pax_global_header00006660000000000000000000000064137752026100014515gustar00rootroot0000000000000052 comment=22715aeceaa81ace2c832312529bde3a42d0814f dlt-daemon-2.18.6/000077500000000000000000000000001377520261000136375ustar00rootroot00000000000000dlt-daemon-2.18.6/.github/000077500000000000000000000000001377520261000151775ustar00rootroot00000000000000dlt-daemon-2.18.6/.github/workflows/000077500000000000000000000000001377520261000172345ustar00rootroot00000000000000dlt-daemon-2.18.6/.github/workflows/codeql-analysis.yml000066400000000000000000000050261377520261000230520ustar00rootroot00000000000000# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. name: "CodeQL" on: push: branches: [master] pull_request: # The branches below must be a subset of the branches above branches: [master] schedule: - cron: '0 9 * * 1' jobs: analyze: name: Analyze runs-on: ubuntu-latest strategy: fail-fast: false matrix: # Override automatic language detection by changing the below list # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] language: ['cpp'] # Learn more... # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection steps: - name: Checkout repository uses: actions/checkout@v2 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. fetch-depth: 2 # If this run was triggered by a pull request event, then checkout # the head of the pull request instead of the merge commit. - run: git checkout HEAD^2 if: ${{ github.event_name == 'pull_request' }} # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v1 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v1 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl # âœī¸ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language #- run: | # make bootstrap # make release - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 dlt-daemon-2.18.6/.gitignore000066400000000000000000000003011377520261000156210ustar00rootroot00000000000000Release/ Debug/ build/ automotive-dlt.spec automotive-dlt.pc config.h include/dlt/dlt_version.h include/dlt/dlt_user.h .project .cproject .settings .idea/ *~ *.o *.out *.swp cmake-build-debug/ dlt-daemon-2.18.6/.travis.yml000066400000000000000000000006521377520261000157530ustar00rootroot00000000000000language: c dist: xenial compiler: gcc script: - cmake -DWITH_DLT_TESTS=ON -DWITH_TESTSCRIPTS=ON -DWITH_DLT_UNIT_TESTS=ON -DWITH_SYSTEMD=ON -DWITH_SYSTEMD_JOURNAL=ON CMakeLists.txt - make - sudo make install - ./.travis/gtest_dlt_all.sh - ./src/tests/dlt-test-user addons: apt: packages: - cmake-data - cmake - libdbus-1-dev - build-essential - systemd - libsystemd-dev dlt-daemon-2.18.6/.travis/000077500000000000000000000000001377520261000152255ustar00rootroot00000000000000dlt-daemon-2.18.6/.travis/gtest_dlt_all.sh000077500000000000000000000035371377520261000204150ustar00rootroot00000000000000#!/bin/bash ################################################################################ # SPDX license identifier: MPL-2.0 # # Copyright (C) 2019, Advanced Driver Information Technology # This code is developed by Advanced Driver Information Technology. # Copyright of Advanced Driver Information Technology, Bosch and DENSO. # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ################################################################################ ################################################################################ #file : gtest_dlt_all.sh # #Description : Run all unit tests in Travis CI # #Author Name : Saya Sugiura ################################################################################ function gtest_run_test() { LOG="../.travis/$1.log" # Send all messsages and system errors to log file export LIBC_FATAL_STDERR_=1 # Execute unit test { ./$1 ;} > $LOG 2>&1 # Release export LIBC_FATAL_STDERR_=0 # Check for result grep "FAILED TEST\|core dumped" $LOG if [ $? -eq 0 ] then cat $LOG echo "$1 failed" exit 1 fi echo "$1 passed" } CTEST_OUTPUT_ON_FAILURE=1 make test pushd tests > /dev/null # Without General section in dlt_gateway.conf ./gtest_dlt_daemon_gateway.sh > /dev/null gtest_run_test gtest_dlt_daemon_gateway # With General section in dlt_gateway.conf ./gtest_dlt_daemon_gateway.sh -w > /dev/null gtest_run_test gtest_dlt_daemon_gateway ./gtest_dlt_daemon_logstorage.sh > /dev/null gtest_run_test gtest_dlt_daemon_offline_log popd > /dev/null dlt-daemon-2.18.6/AUTHORS000066400000000000000000000011661377520261000147130ustar00rootroot00000000000000Copyright (C) 2015 BMW AG. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. Alexander Wenzel Christian Muck Mikko Rapeli Jeremiah C. Foster Stefan Seefeld Noor Ahsan Eckhard Diezel Mohammed AL Dardoun Lassi Marttala Simon Brandner Copyright (c) 2019 MBition GmbH, Andreas Seidl dlt-daemon-2.18.6/Android.bp000066400000000000000000000102141377520261000155400ustar00rootroot00000000000000/** * Copyright (C) 2019 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ cc_defaults { name: "dlt_defaults", vendor: true, local_include_dirs: [ "include/dlt", ], generated_headers: ["dlt_version_header", "dlt_user_header"], cflags: [ "-DDLT_DAEMON_USE_UNIX_SOCKET_IPC", "-DDLT_LIB_USE_UNIX_SOCKET_IPC", "-DCONFIGURATION_FILES_DIR=\"/vendor/etc\"", "-DDLT_USER_IPC_PATH=\"/data/local/tmp\"", ] + [ "-Wno-unused-parameter", "-W", "-Wall", ], } // Generate dlt_version.h without Cmake genrule { name: "dlt_version_header", tool_files: ["util/create_dlt_version_h.py"], srcs: [ "CMakeLists.txt", "cmake/dlt_version.h.cmake", ], cmd: "$(location util/create_dlt_version_h.py) $(in) $(out)", out: ["dlt_version.h"], } // Generate dlt_user.h without Cmake genrule { name: "dlt_user_header", tool_files: ["util/create_dlt_user_h.py"], srcs: [ "include/dlt/dlt_user.h.in", ], cmd: "$(location util/create_dlt_user_h.py) $(in) $(out)", out: ["dlt_user.h"], } cc_binary { name: "dlt-daemon", defaults: ["dlt_defaults"], init_rc: [ "src/daemon/dlt-daemon.rc", ], local_include_dirs: [ "src/daemon", "src/gateway", "src/lib", "src/shared", "src/offlinelogstorage", ], srcs: [ "src/daemon/dlt-daemon.c", "src/daemon/dlt_daemon_client.c", "src/daemon/dlt_daemon_common.c", "src/daemon/dlt_daemon_connection.c", "src/daemon/dlt_daemon_event_handler.c", "src/daemon/dlt_daemon_offline_logstorage.c", "src/daemon/dlt_daemon_serial.c", "src/daemon/dlt_daemon_socket.c", "src/daemon/dlt_daemon_unix_socket.c", "src/gateway/dlt_gateway.c", "src/lib/dlt_client.c", "src/shared/dlt_common.c", "src/shared/dlt_config_file_parser.c", "src/shared/dlt_offline_trace.c", "src/shared/dlt_protocol.c", "src/shared/dlt_user_shared.c", "src/offlinelogstorage/dlt_offline_logstorage.c", "src/offlinelogstorage/dlt_offline_logstorage_behavior.c", ], shared_libs: [ "libc", "libutils", "libcutils", ], } cc_library_shared { name: "libdlt", defaults: ["dlt_defaults"], local_include_dirs: [ "src/lib", "src/shared", ], export_include_dirs: [ "include/dlt", ], export_generated_headers: [ "dlt_version_header", "dlt_user_header" ], srcs: [ "src/lib/dlt_client.c", "src/lib/dlt_env_ll.c", "src/lib/dlt_filetransfer.c", "src/lib/dlt_user.c", "src/shared/dlt_common.c", "src/shared/dlt_protocol.c", "src/shared/dlt_user_shared.c", ], } cc_binary { name: "dlt-example-user", defaults: ["dlt_defaults"], srcs: [ "src/examples/dlt-example-user.c", ], shared_libs: [ "libc", "libdlt", ], } cc_binary { name: "dlt-receive", defaults: ["dlt_defaults"], srcs: [ "src/console/dlt-receive.c", ], shared_libs: [ "libc", "libdlt", ], } cc_binary { name: "dlt-logd-converter", defaults: ["dlt_defaults"], srcs: [ "src/android/dlt-logd-converter.cpp", ], init_rc: [ "src/android/dlt-logd-converter.rc", ], cflags: [ "-Wextra", "-Wpedantic", "-std=c++14", ], shared_libs: [ "libdlt", "liblog", ], include_dirs: [ "system/core/include", ], } // vim: ft=python dlt-daemon-2.18.6/CMakeLists.txt000066400000000000000000000317561377520261000164130ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright(C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License(MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### cmake_minimum_required(VERSION 3.3) project(automotive-dlt VERSION 2.18.6) mark_as_advanced(CMAKE_BACKWARDS_COMPATIBILITY) set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE) include(GNUInstallDirs) # Set version parameters set(DLT_VERSION_STATE STABLE) execute_process(COMMAND git describe --tags WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE DLT_REVISION ERROR_VARIABLE GIT_ERROR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE) if(DLT_REVISION MATCHES "^$") set(PRINT_REVISION "Git revision unavailable") else(DLT_REVISION MATCHES "") string(REPLACE "-" "_" DLT_REVISION ${DLT_REVISION}) set(PRINT_REVISION ${DLT_REVISION}) endif() # set default build type, if not defined by user if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose build type: Debug, Release, RelWithDebInfo, MinSizeRel." FORCE) message(STATUS "Build type not defined. Using default build type 'RelWithDebInfo'.") endif() # Set of indiviual options option(BUILD_SHARED_LIBS "Set to OFF to build static libraries" ON) option(WITH_SYSTEMD "Set to ON to create unit files and systemd check on dlt-daemon startup" OFF) option(WITH_SYSTEMD_WATCHDOG "Set to ON to use the systemd watchdog in dlt-daemon" OFF) option(WITH_SYSTEMD_JOURNAL "Set to ON to use the systemd journal in dlt-system" OFF) option(WITH_DOC "Set to ON to build documentation target" OFF) option(WITH_MAN "Set to ON to build man pages" OFF) option(WITH_CHECK_CONFIG_FILE "Set to ON to create a configure file of CheckIncludeFiles and CheckFunctionExists" OFF) option(WITH_TESTSCRIPTS "Set to ON to run CMakeLists.txt in testscripts" OFF) option(WITH_GPROF "Set -pg to compile flags" OFF) option(WITH_DLTTEST "Set to ON to build with modifications to test User-Daemon communication with corrupt messages" OFF) option(WITH_DLT_SHM_ENABLE "EXPERIMENTAL! Set to ON to use shared memory as IPC. EXPERIMENTAL!" OFF) option(WITH_DLT_ADAPTOR "Set to ON to build src/adaptor binaries" OFF) option(WITH_DLT_CONSOLE "Set to ON to build src/console binaries" ON) option(WITH_DLT_EXAMPLES "Set to ON to build src/examples binaries" ON) option(WITH_DLT_FILETRANSFER "Set to ON to build dlt-system with filetransfer support" OFF) option(WITH_DLT_SYSTEM "Set to ON to build src/system binaries" OFF) option(WITH_DLT_DBUS "Set to ON to build src/dbus binaries" OFF) option(WITH_DLT_TESTS "Set to ON to build src/test binaries" ON) option(WITH_DLT_UNIT_TESTS "Set to ON to build gtest framework and tests/binaries" OFF) option(WITH_DLT_QNX_SYSTEM "Set to ON to build QNX system binary dlt-qnx-system" OFF) set(DLT_IPC "FIFO" CACHE STRING "UNIX_SOCKET,FIFO") set(DLT_USER "genivi" CACHE STRING "Set user for process not run as root") option(WITH_DLT_PKGCONFIG "Set to ON to generate pkgconfig .pc files" ON) option(WITH_DLT_CXX11_EXT "Set to ON to build C++11 extensions" OFF) option(WITH_DLT_COREDUMPHANDLER "EXPERIMENTAL! Set to ON to build src/core_dump_handler binaries. EXPERIMENTAL" OFF) option(WITH_DLT_LOGSTORAGE_CTRL_UDEV "PROTOTYPE! Set to ON to build logstorage control application with udev support" OFF) option(WITH_DLT_USE_IPv6 "Set to ON for IPv6 support" ON) option(WITH_DLT_KPI "Set to ON to build src/kpi binaries" OFF) option(WITH_DLT_FATAL_LOG_TRAP "Set to ON to enable DLT_LOG_FATAL trap(trigger segv inside dlt-user library)" OFF) option(WITH_UDP_CONNECTION "Set to ON to enable dlt UDP multicast SUPPORT" OFF) option(WITH_LIB_SHORT_VERSION "Set to ON to build library with only major number in version" OFF) option(WITH_DLT_DAEMON_VSOCK_IPC "Set to ON to enable VSOCK support in daemon" OFF) option(WITH_DLT_LIB_VSOCK_IPC "Set to ON to enable VSOCK support in library (DLT_IPC is not used in library)" OFF) set(DLT_VSOCK_PORT "13490" CACHE STRING "VSOCK port number for logging traffic.") # RPM settings set(GENIVI_RPM_RELEASE "1") # ${DLT_REVISION}") set(LICENSE "Mozilla Public License Version 2.0") # Build, project and include settings find_package(Threads REQUIRED) if(WITH_DLT_COREDUMPHANDLER OR WITH_DLT_FILETRANSFER) set(ZLIB_LIBRARY "-lz") find_package(ZLIB REQUIRED) else() set(ZLIB_LIBRARY "") endif() if(WITH_DLT_DBUS) find_package(PkgConfig REQUIRED) pkg_check_modules(DBUS REQUIRED dbus-1) endif() include_directories( ${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR}/include/dlt ${PROJECT_SOURCE_DIR}/include/dlt ${PROJECT_SOURCE_DIR}/src/shared ${PROJECT_SOURCE_DIR}/src/core_dump_handler ${PROJECT_SOURCE_DIR}/src/offlinelogstorage ${PROJECT_SOURCE_DIR}/src/lib ${PROJECT_SOURCE_DIR}/src/daemon ${PROJECT_SOURCE_DIR}/src/console ${PROJECT_SOURCE_DIR}/src/gateway ${PROJECT_SOURCE_DIR}/systemd/3rdparty ) add_definitions(-D_GNU_SOURCE) if(NOT DLT_IPC STREQUAL "UNIX_SOCKET" AND NOT DLT_IPC STREQUAL "FIFO") message(FATAL_ERROR "${DLT_IPC} is not a valid value for DLT_IPC") endif() add_definitions(-DDLT_DAEMON_USE_${DLT_IPC}_IPC) if(WITH_DLT_DAEMON_VSOCK_IPC) add_definitions(-DDLT_DAEMON_VSOCK_IPC_ENABLE) endif() if(NOT WITH_DLT_LIB_VSOCK_IPC) add_definitions(-DDLT_LIB_USE_${DLT_IPC}_IPC) else() add_definitions(-DDLT_LIB_USE_VSOCK_IPC) endif() if(WITH_DLT_DAEMON_VSOCK_IPC OR WITH_DLT_LIB_VSOCK_IPC) add_definitions(-DDLT_VSOCK_PORT=${DLT_VSOCK_PORT}) endif() if(NOT DLT_USER_IPC_PATH) set(DLT_USER_IPC_PATH "/tmp") endif() add_definitions(-DDLT_USER_IPC_PATH="${DLT_USER_IPC_PATH}") if(WITH_DLTTEST) add_definitions(-DDLT_TEST_ENABLE) endif() if(WITH_DLT_UNIT_TESTS) add_definitions(-DDLT_UNIT_TESTS) endif() if(WITH_DLT_SHM_ENABLE) add_definitions(-DDLT_SHM_ENABLE) endif() if(WITH_DLT_USE_IPv6) add_definitions(-DDLT_USE_IPv6) endif() if(WITH_DLT_QNX_SYSTEM AND NOT "${CMAKE_C_COMPILER}" MATCHES "nto-qnx|qcc") message(FATAL_ERROR "Can only compile for QNX with a QNX compiler.") endif() if(WITH_GPROF) add_compile_options(-pg) endif() add_compile_options( $<$:-std=gnu99> $<$:-std=gnu++11> -Wall -Wextra # -pedantic -Wno-variadic-macros -Wno-strict-aliasing ) if(WITH_DOC STREQUAL "OFF") set(PACKAGE_DOC "#") else() set(PACKAGE_DOC "") endif() if(WITH_DLT_PKGCONFIG) configure_file(${PROJECT_SOURCE_DIR}/${PROJECT_NAME}.spec.in ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.spec) configure_file(${PROJECT_SOURCE_DIR}/${PROJECT_NAME}.pc.in ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.pc @ONLY) install(FILES ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig COMPONENT devel) endif() if(WITH_DLT_CXX11_EXT AND WITH_DLT_PKGCONFIG) configure_file(${PROJECT_SOURCE_DIR}/${PROJECT_NAME}-c++.pc.in ${PROJECT_BINARY_DIR}/${PROJECT_NAME}-c++.pc @ONLY) install(FILES ${PROJECT_BINARY_DIR}/${PROJECT_NAME}-c++.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig COMPONENT devel) endif() set(CONFIGURATION_FILES_DIR ${CMAKE_INSTALL_FULL_SYSCONFDIR}) add_definitions(-DCONFIGURATION_FILES_DIR="${CONFIGURATION_FILES_DIR}") add_subdirectory(cmake) # Message queue if(HAVE_MQUEUE_H AND HAVE_FUNC_MQOPEN AND HAVE_FUNC_MQCLOSE AND HAVE_FUNC_MQUNLINK AND HAVE_FUNC_MQSEND AND HAVE_FUNC_MQRECEIVE) add_definitions(-DDLT_NETWORK_TRACE_ENABLE) set(DLT_NETWORK_TRACE_ENABLE 1) else() message(STATUS "Disable network trace interface since message queue is not supported") endif() if(WITH_SYSTEMD OR WITH_SYSTEMD_WATCHDOG OR WITH_SYSTEMD_JOURNAL) find_package(PkgConfig REQUIRED) execute_process(COMMAND pkg-config --modversion systemd OUTPUT_VARIABLE SYSTEMD_VERSION) string(REPLACE "\n" "" SYSTEMD_VERSION ${SYSTEMD_VERSION}) if(WITH_SYSTEMD) add_definitions(-DDLT_SYSTEMD_ENABLE) endif() if(WITH_SYSTEMD_WATCHDOG) add_definitions(-DDLT_SYSTEMD_WATCHDOG_ENABLE) endif() if(WITH_SYSTEMD_JOURNAL) add_definitions(-DDLT_SYSTEMD_JOURNAL_ENABLE) endif() set(systemd_SRCS ${PROJECT_SOURCE_DIR}/systemd/3rdparty/sd-daemon.c) set(SYSTEMD_UNITDIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/system" CACHE PATH "Set directory to install systemd unit files") add_subdirectory(systemd) endif() if(WITH_DLT_LOGSTORAGE_CTRL_UDEV) add_definitions(-DDLT_LOGSTORAGE_CTRL_UDEV_ENABLE) endif() if(WITH_DLT_FATAL_LOG_TRAP) add_definitions(-DDLT_FATAL_LOG_RESET_ENABLE) endif() add_subdirectory(doc) add_subdirectory(src) add_subdirectory(include/dlt) add_subdirectory(testscripts) if (WITH_DLT_UNIT_TESTS) add_subdirectory( gtest-1.7.0 ) enable_testing() add_subdirectory(tests) endif() SET(CPACK_GENERATOR "DEB") SET(CPACK_PACKAGE_NAME "dlt_${DLT_REVISION}") SET(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "genivi-diagnostic-log-and-trace@lists.genivi.org") INCLUDE(CPack) message(STATUS) message(STATUS "-------------------------------------------------------------------------------") message(STATUS "Build for Version ${PROJECT_VERSION} build ${DLT_REVISION} version state ${DLT_VERSION_STATE}") message(STATUS "WITH_SYSTEMD = ${WITH_SYSTEMD}") message(STATUS "WITH_SYSTEMD_WATCHDOG = ${WITH_SYSTEMD_WATCHDOG}") message(STATUS "WITH_SYSTEMD_JOURNAL = ${WITH_SYSTEMD_JOURNAL}") message(STATUS "WITH_DOC = ${WITH_DOC}") message(STATUS "WITH_MAN = ${WITH_MAN}") message(STATUS "WITH_DLT_ADAPTOR = ${WITH_DLT_ADAPTOR}") message(STATUS "WITH_DLT_CONSOLE = ${WITH_DLT_CONSOLE}") message(STATUS "WITH_DLT_EXAMPLES = ${WITH_DLT_EXAMPLES}") message(STATUS "WITH_DLT_SYSTEM = ${WITH_DLT_SYSTEM}") message(STATUS "WITH_DLT_FILETRANSFER = ${WITH_DLT_FILETRANSFER}") message(STATUS "WITH_DLT_DBUS = ${WITH_DLT_DBUS}") message(STATUS "WITH_DLT_TESTS = ${WITH_DLT_TESTS}") message(STATUS "WITH_DLT_UNIT_TESTS = ${WITH_DLT_UNIT_TESTS}") message(STATUS "WITH_DLT_SHM_ENABLE = ${WITH_DLT_SHM_ENABLE}") message(STATUS "WITH_DLTTEST = ${WITH_DLTTEST}") message(STATUS "WITH_DLT_PKGCONFIG = ${WITH_DLT_PKGCONFIG}") message(STATUS "WITH_DLT_CXX11_EXT = ${WITH_DLT_CXX11_EXT}") message(STATUS "WITH_DLT_COREDUMPHANDLER = ${WITH_DLT_COREDUMPHANDLER}") message(STATUS "WITH_DLT_KPI = ${WITH_DLT_KPI}") message(STATUS "WITH_DLT_FATAL_LOG_TRAP = ${WITH_DLT_FATAL_LOG_TRAP}") message(STATUS "WITH_CHECK_CONFIG_FILE = ${WITH_CHECK_CONFIG_FILE}") message(STATUS "WITH_TESTSCRIPTS = ${WITH_TESTSCRIPTS}") message(STATUS "WITH_GPROF = ${WITH_GPROF}") message(STATUS "WITH_DLT_USE_IPv6 = ${WITH_DLT_USE_IPv6}") message(STATUS "DLT_USER = ${DLT_USER}") message(STATUS "BUILD_SHARED_LIBS = ${BUILD_SHARED_LIBS}") message(STATUS "TARGET_CPU_NAME = ${TARGET_CPU_NAME}") if(WITH_SYSTEMD OR WITH_SYSTEMD_WATCHDOG OR WITH_SYSTEMD_JOURNAL) message(STATUS "SYSTEMD_VERSION = ${SYSTEMD_VERSION}") message(STATUS "SYSTEMD_UNITDIR = ${SYSTEMD_UNITDIR}") endif() message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}") message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}") message(STATUS "CMAKE_HOST_SYSTEM_PROCESSOR = ${CMAKE_HOST_SYSTEM_PROCESSOR}") message(STATUS "CMAKE_SYSTEM_PROCESSOR = ${CMAKE_SYSTEM_PROCESSOR}") message(STATUS "WITH_DLT_LOGSTORAGE_CTRL_UDEV = ${WITH_DLT_LOGSTORAGE_CTRL_UDEV}") message(STATUS "DLT_IPC = ${DLT_IPC}(Path: ${DLT_USER_IPC_PATH})") message(STATUS "WITH_DLT_DAEMON_VSOCK_IPC = ${WITH_DLT_DAEMON_VSOCK_IPC}") message(STATUS "WITH_DLT_LIB_VSOCK_IPC = ${WITH_DLT_LIB_VSOCK_IPC}") message(STATUS "DLT_VSOCK_PORT = ${DLT_VSOCK_PORT}") message(STATUS "WITH_UDP_CONNECTION = ${WITH_UDP_CONNECTION}") message(STATUS "WITH_DLT_QNX_SYSTEM = ${WITH_DLT_QNX_SYSTEM}") message(STATUS "WITH_LIB_SHORT_VERSION = ${WITH_LIB_SHORT_VERSION}") message(STATUS "Change a value with: cmake -D=") message(STATUS "-------------------------------------------------------------------------------") message(STATUS) dlt-daemon-2.18.6/COPYING000066400000000000000000000006441377520261000146760ustar00rootroot00000000000000 # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. dlt-daemon-2.18.6/LICENSE000066400000000000000000000405261377520261000146530ustar00rootroot00000000000000Mozilla Public License Version 2.0 ================================== 1. Definitions -------------- 1.1. "Contributor" means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. 1.2. "Contributor Version" means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor's Contribution. 1.3. "Contribution" means Covered Software of a particular Contributor. 1.4. "Covered Software" means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. 1.5. "Incompatible With Secondary Licenses" means (a) that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or (b) that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. 1.6. "Executable Form" means any form of the work other than Source Code Form. 1.7. "Larger Work" means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. 1.8. "License" means this document. 1.9. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. 1.10. "Modifications" means any of the following: (a) any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or (b) any new file in Source Code Form that contains any Covered Software. 1.11. "Patent Claims" of a Contributor means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. 1.12. "Secondary License" means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. 1.13. "Source Code Form" means the form of the work preferred for making modifications. 1.14. "You" (or "Your") means an individual or a legal entity exercising rights under this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. License Grants and Conditions -------------------------------- 2.1. Grants Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and (b) under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. 2.2. Effective Date The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. 2.3. Limitations on Grant Scope The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: (a) for any code that a Contributor has removed from Covered Software; or (b) for infringements caused by: (i) Your and any other third party's modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or (c) under Patent Claims infringed by Covered Software in the absence of its Contributions. This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). 2.4. Subsequent Licenses No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). 2.5. Representation Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. 2.6. Fair Use This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. 2.7. Conditions Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. 3. Responsibilities ------------------- 3.1. Distribution of Source Form All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients' rights in the Source Code Form. 3.2. Distribution of Executable Form If You distribute Covered Software in Executable Form then: (a) such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and (b) You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients' rights in the Source Code Form under this License. 3.3. Distribution of a Larger Work You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). 3.4. Notices You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. 3.5. Application of Additional Terms You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. 4. Inability to Comply Due to Statute or Regulation --------------------------------------------------- If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Termination -------------- 5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. 5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. ************************************************************************ * * * 6. Disclaimer of Warranty * * ------------------------- * * * * Covered Software is provided under this License on an "as is" * * basis, without warranty of any kind, either expressed, implied, or * * statutory, including, without limitation, warranties that the * * Covered Software is free of defects, merchantable, fit for a * * particular purpose or non-infringing. The entire risk as to the * * quality and performance of the Covered Software is with You. * * Should any Covered Software prove defective in any respect, You * * (not any Contributor) assume the cost of any necessary servicing, * * repair, or correction. This disclaimer of warranty constitutes an * * essential part of this License. No use of any Covered Software is * * authorized under this License except under this disclaimer. * * * ************************************************************************ ************************************************************************ * * * 7. Limitation of Liability * * -------------------------- * * * * Under no circumstances and under no legal theory, whether tort * * (including negligence), contract, or otherwise, shall any * * Contributor, or anyone who distributes Covered Software as * * permitted above, be liable to You for any direct, indirect, * * special, incidental, or consequential damages of any character * * including, without limitation, damages for lost profits, loss of * * goodwill, work stoppage, computer failure or malfunction, or any * * and all other commercial damages or losses, even if such party * * shall have been informed of the possibility of such damages. This * * limitation of liability shall not apply to liability for death or * * personal injury resulting from such party's negligence to the * * extent applicable law prohibits such limitation. Some * * jurisdictions do not allow the exclusion or limitation of * * incidental or consequential damages, so this exclusion and * * limitation may not apply to You. * * * ************************************************************************ 8. Litigation ------------- Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party's ability to bring cross-claims or counter-claims. 9. Miscellaneous ---------------- This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. 10. Versions of the License --------------------------- 10.1. New Versions Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. 10.2. Effect of New Versions You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. 10.3. Modified Versions If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. Exhibit A - Source Code Form License Notice ------------------------------------------- This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. You may add additional accurate notices of copyright ownership. Exhibit B - "Incompatible With Secondary Licenses" Notice --------------------------------------------------------- This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0. dlt-daemon-2.18.6/README.md000066400000000000000000000254431377520261000151260ustar00rootroot00000000000000# Diagnostic Log and Trace Build and Test status: [![Build Status](https://travis-ci.com/GENIVI/dlt-daemon.svg?branch=master)](https://travis-ci.com/GENIVI/dlt-daemon) Alerts: [![Total alerts](https://img.shields.io/lgtm/alerts/g/GENIVI/dlt-daemon.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/GENIVI/dlt-daemon/alerts/) Code quality: [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/GENIVI/dlt-daemon.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/GENIVI/dlt-daemon/context:cpp) # Diagnostic Log and Trace Welcome to GENIVI Diagnostic Log and Trace (DLT). If you are familiar with DLT and want to know what's new, check the [Release Notes](ReleaseNotes.md). **New to DLT? Great! Welcome aboard.** We prepared a brief [overview](#overview) for you as well as some information on how to [get started](#get-started) immediately. After you made yourself familiar with the basic mechanics of DLT, you can [learn more](#learn-more) about advanced concepts and features. ## Overview GENIVI DLT provides a log and trace interface, based on the standardised protocol specified in the [AUTOSAR standard 4.0 DLT](https://www.autosar.org/fileadmin/user_upload/standards/classic/4-0/AUTOSAR_SWS_DiagnosticLogAndTrace.pdf). It is used by other GENIVI components but can serve as logging framework for other applications without relation to GENIVI. The most important terms and parts are depicted in the following figure. Please refer to [Glossary](doc/dlt_glossary.md) for a full overview over DLT-specific terms. ![alt text](doc/images/dlt_overview.png "DLT Overview") - A **DLT User** essentially is an application that serves its respective (not DLT-related) purpose and produces DLT log messages. It utilizes the DLT library to craft and transmit these messages. - The **DLT Library** provides a convenient API to DLT Users (i.e. applications) to create DLT log messages and hand them over to the DLT Daemon. If the latter is not avilable, the library will cache the messages in a ring buffer so they don't get lost immediately. - The **DLT Daemon** is the DLT communication interface of an ECU. It collects and buffers log messages from one or more DLT users running on the ECU and provides them to DLT clients upon their request. The daemon also accepts control messages from the clients to adjust the daemon's or the aplications' behaviour. - A **DLT Client** receives and consumes the log messages from DLT Users by fetching them from DLT Daemons. It may also issue control messages to control the behaviour of a DLT Daemon or its connected DLT Users. A DLT client can even transmit user-defined data to a DLT User through so-calles injection messages. This is only the simplest of all use cases that you will further pursue in the [Get Started](#get-started) section. Once you want to [learn more](#learn-more), you will find that the repository contains advanced features utilizing several adaptors and console utilities as well as test applications. ## Get Started In this section, you can learn how to [build and install](#build-and-install) DLT. Then you can choose to [run a DLT demo](#run-a-dlt-demo) setup or to start by [developing your own DLT-featured application](#develop-your-own-dlt-featured-application). ### Build and install The following packages need to be installed in order to be able to build and install DLT daemon: - cmake - zlib - dbus On Ubuntu those dependencies can be installed with the following command: ``` sudo apt-get install cmake zlib1g-dev libdbus-glib-1-dev ``` Then proceed to download DLT if you haven't already. We recommend cloning the repository, but downloading and extracting a zip-archive is fine as well. ```bash cd /path/to/workspace git clone https://github.com/GENIVI/dlt-daemon.git ``` To build and install the DLT daemon, follow these steps: ```bash cd /path/to/workspace/dlt-daemon mkdir build cd build cmake .. make optional: sudo make install optional: sudo ldconfig # in case you executed make install ``` CMake accepts a plethora of [build options](doc/dlt_build_options.md) to configure the build to suit your needs. ### Run a DLT demo In case you haven't had a look at the brief [overview](#overview), now would be the perfect occasion to learn about the most important terms and to get an idea where data is buffered. Then go on with our guide on [how to set up a DLT demo setup](doc/dlt_demo_setup.md). ### Develop your own DLT-featured application Now that you have seen DLT in action, you probably want to develop your own applications using DLT. You will find everything you need in our ["DLT for Application Developers" guide](doc/dlt_for_developers.md). A hint: If you want to read the API documentation, you have to build it locally at the moment. The API documentation is generated with _doxygen_. To build it, run cmake with the ```-DWITH_DOC=ON``` option, e.g.: ```bash mkdir build cd build cmake -DWITH_DOC=ON .. make doc ``` ### Build DLT debian package To build the DLT debian package for your own purpose, follow these steps: ```bash mkdir build cd build cmake .. cpack ``` ## Learn more Once you got your feet wet with developing your first application, you might want to learn more. Find out about DLT's [advanced topics](#advanced-topics), learn how to [configure, control and interface](#configure-control-and-interface) DLT or study its internals by checking out the [design specifications](#design-specifications). ### Advanced Topics The GENIVI DLT implementation is capable of by far more than to "just" send log message. You will get an overview of advanced features in this section. Follow the links to learn more about the respective concept. | Document | Description | |----|----| | [Build Options](./doc/dlt_build_options.md) | The CMake build system provides a large amount of build options. They let you turn on or off certain features and provide alternative implementation details. | | [LogStorage](doc/dlt_offline_logstorage.md) | The DLT Daemon as well as the DLT libary provide buffers for caching log data during absence of a consumer. However, some use cases require to write large amounts of log message e.g. to mass storages for long term storage or because no other means of exfiltrating the log data is available. | | [MultiNode](doc/dlt_multinode.md) | A DLT Daemon can run as a gateway to connect multiple passive nodes. Each passive node has its owns DLT Applications and runs its own daemon. The gateway node connects to all of them, collects the logs and routes them to the DLT Client. | | [Extended Network Trace](doc/dlt_extended_network_trace.md) | Normal DLT messages are limited in size. To overcome this limitation the feature network trace message allows the user to send or truncate messages which would not fit into a normal DLT message. | | [DLT Filetransfer](doc/dlt_filetransfer.md) | Although not originally designed for this, files can be transmitted over DLT. A corresponding DLT Client (e.g. DLT Viewer) can receive and decode them accordingly. | | [DLT KPI](doc/dlt_kpi.md) | Valueable status information about the monitored system can be read via DLT as well. The information under `/proc` of the target system is at your hands easily. | | [DLT Core Dump Handler](/doc/dlt_cdh.md) | This tool collects and extracts debug information then utilize [DLT Filetransfer](doc/dlt_filetransfer.md) to transfer the information to client. | ### Configure, Control and Interface There is still lots to discover about DLT. If you turn on the generation of manpages with the cmake option ```-DWITH_MAN=ON``` you can learn how to configure DLT to exactly suit your needs, how to control the behvaiour of running instances and how to interface DLT with existing system through provided adaptors. The man pages are generated with *pandoc*. Build manpages (initally or because something changed) with e.g. ```bash mkdir build cd build cmake -DWITH_MAN=ON .. make generate_man ``` | Document | Description | |----|----| | *Configuration* || |[dlt-daemon(1)](doc/dlt-daemon.1.md) | How to start DLT-Daemon | |[dlt.conf(5)](doc/dlt.conf.5.md) | Configure the DLT framework to reflect your use case| | *Control running instances of DLT*|| |[dlt-receive(1)](doc/dlt-receive.1.md)| Receive DLT messages from daemon and print or store the log messages. | |[dlt-control(1)](doc/dlt-control.1.md)| Send control messages to daemon. | |[dlt-logstorage-ctrl(1)](doc/dlt-logstorage-ctrl.1.md)| Send a trigger to daemon to connect/disconnect certain logstorage device, or send a demand to sync data the internal buffer into logstorage file. | |[dlt-passive-node-ctrl(1)](doc/dlt-passive-node-ctrl.1.md)| Send a trigger to daemon to connect/disconnect passive daemon. | | *Interfacing DLT* || |[dlt-system(1)](doc/dlt-system.1.md) | DLT-System provides a way to directly access system logs via DLT | |[dlt-system.conf(5)](doc/dlt-system.conf.5.md) | Configure DLT-System | |[dlt-adaptor-stdin(1)](doc/dlt-adaptor-stdin.1.md)| Adaptor for forwarding input from stdin to daemon. | |[dlt-adaptor-udp(1)](doc/dlt-adaptor-udp.1.md)| Adaptor for forwarding received UDP messages to daemon. | |[dlt-convert(1)](doc/dlt-convert.1.md)| Convert DLT files into human readable format. | |[dlt-sortbytimestamp(1)](doc/dlt-sortbytimestamp.1.md)| Read log messages from DLT file, sort by timestamp, and store them again. | | [dlt-qnx-system(1)](doc/dlt-qnx-system.md) | Access system logs in QNX with DLT | ## Contribution Start working, best practice is to commit smaller, compilable pieces during the work that makes it easier to handle later on. If you want to commit your changes, create a [Pull Request](https://github.com/genivi/dlt-daemon/pulls) in Github. Please make sure to follow the [Rules for commit messages](https://at.projects.genivi.org/wiki/display/PROJ/Rules+for+Commit+Messages) ### Coding Rules Before contributing code, run uncrustify to harmonize code style. Configuration: util/uncrustify.cfg uncrustify version: 0.68\_f ## Known issues List of open issues can be found on [Github](https://github.com/GENIVI/dlt-daemon/issues) - DLT library: Usage of dlt\_user\_log\_write\_float64() and DLT\_FLOAT64() leads to "Illegal instruction (core dumped)" on ARM target. - DLT library: Nested calls to DLT\_LOG\_ ... are not supported, and will lead to a deadlock. - For Non linux platforms [eg: QNX] IPC supported is UNIX\_SOCKET. For Linux Platforms both IPC FIFO and UNIX\_SOCKET are supported ## Software/Hardware Developed and tested with Ubuntu Linux 16 64-bit / Intel PC ## License Full information on the license for this software is available in the "LICENSE" file. Full information on the license for the cityhash code is available in "COPYING" file in src/core\_dump\_handler/cityhash\_c. ## Mailinglist https://lists.genivi.org/mailman/listinfo/genivi-diagnostic-log-and-trace_lists.genivi.org ## Contact Saya Sugiura , Quynh Le Hoang Ngoc ![alt text](doc/images/genivilogo.png "GENIVI") dlt-daemon-2.18.6/ReleaseNotes.md000066400000000000000000001361051377520261000165600ustar00rootroot00000000000000# Diagnostic Log and Trace - Release Notes Back to [README.md](../README.md) ## Version 2.18.6 STABLE ## Changes ### 2.18.6 * Update releaseNotes and version to v2.18.6 * doc: Limitation to SIGUSR1 usage on Android * gtest_dlt_common: fix seg fault when using memcpy(). * example: Added customization of CxtID and AppID * other: fix remaining conversion warnings * library: fix conversion warnings * tests: fix conversion warnings * daemon: fix conversion warnings * shared: fix conversion warnings * logstorage: fix conversion warnings * console :fix conversion warnings * gateway: fix compile warnings * readme: cpack document for debian package * CMakeList: implement cpack for debian package * dlt-receive: flush stdout buffer by signal * gtest: Include necessary header * doc: Update doc for the maintain logstorage loglevel implementation * logstorage: Implement general config to maintain logstorage loglevel * daemon: Correct order of runtime config load. * libdlt: Use SIGUSR1 for thread on Android * dlt-daemon: log levels are not controlled * dlt-daemon: complete logstorage path with '/' * libdlt: Use poll to avoid CPU high load * libdlt: Flush all data in atexit_handler * dlt-convert: replace system() by dlt_execute_command() * dlt_common: Execute system command using execvp * logstorage: snprintf return check * logstorage: Update unit test * logstorage: Add debug logs * logstorage: Modify rearranging file * logstorage: Handle wrap-around * libdlt: support short version * design doc: update spec for new environment variable * doc: update disable injection msg for developer * libdlt: disable injection msg via env var * doc: Rewrote the DLT user documentation. * daemon: Alternative of timerfd in QNX * bug-fix: fix invalid file descriptor check * dlt_user: fix invalid poll timeout * README: Switch from travis-ci.org to travis-ci.com * Add support for logging with VSOCK (#255) * Use dlt_defaults for dlt-logd-converter in Android.bp (#271) * dlt-control.c: return -1 on error (#259) * Check size of ring buffer (#269) * dlt_common: Fix buffer overflow in dlt_filter_load (#275) * dlt-daemon: Adds an option to disable injection mode (#266) * Add message length check * Init logd crash buffer * Avoid memory access errors with 4-chars context ids (#250) * dlt_client.c: remove misleading error message (#258) * Fix overflow for -d argument in dlt-example-user (#270) * dlt-daemon.c: exit early on error (#261) * Remove nonexistent file from Android.bp (#264) * dlt-control.c: initialize dltdata via struct literal (#257) * dlt-common.c: ensure null terminated string (#256) * Make it easier to use libdlt when building DLT as a CMake subproject (#254) * Simplify setting of CONFIGURATION_FILES_DIR in CMakeLists.txt (#247) * Create codeql-analysis.yml (#252) * Modify CMAKE_C_COMPILER check for QNX to accept "qcc" (#246) * dlt_offline: fix build failures with gcc-10 (#245) * Implement DLTClient for UDP multicast (#240) * Revert "dlt_offline: fix build failures with gcc-10" * dlt_offline: fix build failures with gcc-10 * sd-daemon.c: Fix build with newer glibc and musl libc * dlt_user.c: fix the lack of DLT_NETWORK_TRACE_ENABLE definition ### 2.18.5 * Update releaseNotes and version to v2.18.5 * slog2 adapter on QNX * Update gtest_dlt_all.sh to detect core dump * dlt-daemon.c: fix printf format %d to %ld that formats a long * doc/CMakeList.txt: replace dlt_design_specification.txt to .md * network trace: Fix macro usage * limit logspam in gateway on client overflow * Android.bp: fix dlt_user.h genrule * logstorage: Issue with more than 2 filters * remove unused feature * gtest_dlt_daemon_gateway: correct comparison operator syntax * set DLT_NETWORK_TRACE_ENABLE by cmakedefine * doc: Update dlt_offline_logstorage.md * UT: Fix segfault in logstorage test * logstorage: support all stragegies * update cmake VERSION variables * simplify and fix android version script * execute unittests with cmake * dlt_design_specification: update content * dlt_design_specification: convert from .txt to .md format * logstorage: fix syncbehaviour * daemon: Fix smoketest * unittest: Update according to API's changes * offline storage: Improvement log messages at bottom * common: Isolate FIFO/Unix socket * libdlt: Relocate dltFifoBaseDir setting * doc: md file for dlt_gateway.conf * network trace: Include necessary headers * network trace: Add mqueue verification * Unittest for new api * Remove duplicate definition of DLT_CONVERT_TEXTBUFSIZE * Improve performance of DLT file parsing * relocation dlt_check_envvar() and update dlt_init() functions * Redirect stdout to stderr * Unittest: Update testcase * gateway: Improvement of handling Gateway config * daemon: Avoid spamming message buffer overflow * gateway: Support infinite loop of retry * gateway: Configurable interval time * tests: remove unused zlib include * disable android services by default * logstorage: Add NULL check of IDs * snprintf ret > 0 is not always an error * fix some gcc9 compiler warnings * fix clang warnings about GNU stuff * android logd forwarder * fix gateway config element search * doc: update a note for logstorage with wildcard * daemon: logstorage with wildcards * Limit log messages on full buffer * Android: Enable Android build * logstorage: Filter section handling * doc: Logstorage non-verbose filter * correct errno usage in dlt_stop_threads * shared: Read DLT header until it's found * Use ssize_t for bytes_written * Fix dlt-sortbytimestamp * Remove DLT_PACKED redefinition guard in dlt_common.h * rename definition PACKED to DLT_PACKED * daemon: Remove empty line in daemon log * Revert "dlt_common: Fix buffer overflow in dlt_buffer_get (#215)" * FIX: prevent usage of uninitialized message queue handle * Add unit tests for new sized string functions * Add documentation for new sized string functions * Add macro wrappers for new sized string functions * Minor optimization * Add functions for writing strings with known sizes * Add helper function for writing strings with known sizes * Fixed empty internal message in dlt-daemon.c (#225) * common: Fix uint64 type (#217) * dlt_common: Fix buffer overflow in dlt_buffer_get (#215) * FIX: Check validity of `file` pointer before usage. * doc/dlt_for_developers.md: Fix wrong DLT include directive * Remove naming of variadic macro parameters * sys/poll.h: deprecate old sys/poll.h include header, now glibc/musl wants poll.h being included directly. This fixes a build failure on musl systems with strict c hardening flags * dlt-test-init-free: fix build failure with strict compiler flags, due to uint being undefined. This is actually an "int" type, looking at the test implementation * dlt_user.h: fix build when musl is the libc implementation, by adding a missing include for pthread_t reference: * dlt.conf: suppress the warnings udp multicast (#197) * dlt_daemon_socket: leave while socket binds fails * dlt_user: init DltContextData before use * dlt-daemon: fix resource leak * console: fix memleak of dlt-logstorage-list * BugFix: SEGFAULT when using AppArmor (#192) * Fix compiler warnings: pointer of type ‘void *’ used in arithmetic (#196) * Change the DLT_CHECK_RCV_DATA_SIZE macro to an internal function (#191) * Fix a potential memory leak in file transfer (#126) * Provide DLT_GET_APPID macro (#187) (#188) * dlt-offline-trace: fix bug and hardcode (#174) (#186) * Avoided Seg fault in dlt_message_payload (#179) (#181) * Improvement: Make ZLib dependency optional (#182) * fix the dlt offline trace file name creation (#178) * libdlt: fix memory leak * Removed unused headers(epoll) in UDP connection * Fix: Propper usage of LoggingMode: "uncrustification" * Fix: Propper usage of LoggingMode in ".../dlt-runtime.cfg" * libdlt: reattachment and improvement in dlt thread (#171) * dlt-system: Call tzset before localtime_r (#165) * Update cmakelist, fix build due to copy-paste error (#170) * Bugfix: dlt-system-journal * Proper setup and error checking of pthread_create * udp: Disable WITH_UDP_CONNECTION as default * doxygen improvement * doc: Modify markdown doc generation * doc: Update dlt_for_developers.md * cmake improvement for Logstorage console * cmake add component for libdlt.so * parser: Change maximum number of config section * common: Remove unused structure * dlt_common: Use defined macro * libdlt: calculate resend buffer memory * lib: Disable extended header in non verbose mode by env var * shm: Resend dlt msg when client connect * lib: Remove else nothing * network trace: Do not allow DLT usage in forked child * lib: Assign fd after it's closed * console: Add get sw version control msg * console: Tool to merge multiple DLT files * dlt-test: Add message length option * Add user custom timestamp interface ### 2.18.4 * Update ReleaseNotes and version to v2.18.4 * dlt-daemon: correct errno usage * dlt-daemon: fix bug binding invalid ipv6 address as default * Add option in dlt.conf for bindAddress to specific IPs (#130) * protocol: Remove non supported user service ID (#159) * libdlt: truncate the log message if it is too long (#156) (#157) * UDP Multicast implementation (#155) * doc: Remove unused images * daemon: fix compile error with DLT_IPC="UNIX_SOCKET" (#153) * using POSIX shared memory APIs (#90) (#151) * Revert "Add option in dlt.conf for bindAddress to specific IPs (#130)" * Add option to set owner group of daemon FIFO (#122) * Add option in dlt.conf for bindAddress to specific IPs (#130) * dlt-system-journal: fixed localtime compile error * Correct sa findings * logstorage: fix compile error * doxygen: Align variable for apid and ctid * doxygen: Remove licence * doxygen: Get rid of warnings * doc: Use pandoc to generate HTML from markdown * doc: Improve README.md * doc: Create missing markdown documents * doc: Documentation update * cmake: Allow build as a subproject (#145) * fix config path for dlt-dbus * define DLT_PATH_MAX for max path buffer length * cmake-improvements (#135) * libdlt: Use posix nanosleep (#144) * doc: Improve markdown documents * doc: Improve dlt_for_developers.md * fix the warning of strncat size * fix warning of self assign * dlt-convert: fix warning of wrong conversion * Travis: Run Travis on Xenial 16.04 * Travis: Modify install package * cleanup: Use dlt_vlog() * Fix alerts from lgtm * lgtm: Add code analysis platform * dlt-test: Improve context ID * dlt-test: Add options * libdlt: Remove commented out code * Remove dlt_forward_msg * libdlt: compare dlt_ll_ts to NULL * network trace: Define package ID macro * daemon: Loop for client fds * daemon: Remove bytes_sent * daemon: Don't remove unregistered context * daemon: Don't assign fd after free * test: Add manual interruption in dlt-test-stress * gtest: Logstorage unit test update * Logstorage: Correct behavior in sync message cache * Logstorage: Sync behavior bug fix * Logstorage: Fix write msg cache ### 2.18.3 * Update ReleaseNotes and version to v2.18.3 * Travis CI: Run unit test (#132) * libdlt: Fix compiler warnings * Unit test: Fix compiler warnings * Unit test fix * Do not install systemd service files for binaries that are not built (#129) * lib: unlock buffer on termination * dlt-receive: Fix crash without arguments * dlt-control: Bug fix for broken get log info * Logging: Error message modification * dlt-daemon: fix internal logging to file after daemonize * Offline logstorage: Fix storage handle NULL check during cleanup * Fix compiler warnings * POSIX: Replace usleep with nanosleep * unix socket: IPC code isolation * lib: daemon: Fix sem lock potential issue * socket: Remove unnecessary header * dlt-daemon: unlink application socket * ipc: close socket if connect failed ### 2.18.2 * Update ReleaseNotes and version to v2.18.2 * Size of Resend buffer less than or equal to DLT_USER_BUF_MAX_SIZE resâ€Ļ (#116) * Fixed memory leak when receiving network traces of 0xFFFF length * Contact information update (#118) * lib: Add mq_close/mq_unlink conditions * doc: Do not allow DLT usage in forked child (#95) * doc: Raise an awareness of log level sync * dlt_offline_logstorage: fix multiple file creation error (#85, #94) * doc: Fix PANDOC_TOOL condition * Travis CI: Fix link in README.md (#106, #108) ### 2.18.1 * doc: Move all man pages to markdown files (#102) * Fix linking problem with tests when systemd enabled (#103) * libdlt: Do not allow DLT usage in forked child (#95) * Travis CI: build with systemd enabled (#97) * Make dlt-convert more responsive when watching a file * Travis CI: fix - add new line to .travis.yml * Build and test status added * Add the Travis CI script ### 2.18.0 * fix broken/missing links in documentation * CMake: Set default configuration * Code beautification using uncrustify * Documentation update * dlt-daemon: Output current number of connections as default * Remove unnecessary reference to zlib in .pc file * Cleanup of unit test fixes * gtest: Modification to offline logstorage * libdlt: Add error handling * exit DLT daemon if /dev/null open fails during fork * Improvement - use dup2 in place of dup in daemon fork * Remove one-instance-lock mechanism * daemon: Add exit trigger * UnitTest: Updates * Made socket send reliable * lib: socket: Flush all data before closing socket * buffer: Code cleanup * buffer: Improve logging * Removed log level change callback notification while context register done with ll_ts API * Logging: avoided missing of log level change callback * Injection: New callback with private data Added new injection callback with private data as argument * Fixed compiler error with previous commit * Dynamic allocation of msg buffer * cmake: systemd: fix hardcoded user in dlt-dbus.service (Issue #36) * rename #define STATIC to DLT_STATIC * Use poll in the dlt-daemon for POSIX compliance * dlt-client: logging: Extended the receiver buffer size * dlt-control: update get log info * Protocol: DLT Service ID Enum instead of defines * Gateway Improvements * Log storage - Updates (#82) * Fflush stdout in the intenal logger (#81) * dlt-daemon: per ECU list of user information (#80) * Add dlt-sortbytimestamp utility plus documentation (#73) * Fix compiler warning PR #77 * Fix compilation with glibc 2.28 (#77) * Fix gcc 8 build (#74) * dlt-daemon: fixed linked-list element remove (#71) * Update dlt_user.c (#66) * dlt-daemon: Fix no state transition to BUFFER state (#65) * file parser: Replace hash functions with list (#67) * libdlt: Avoid busy loop in error case of mq_receive() (#59) * dlt-daemon: Output signal number at exit (#68) * dlt-daemon: Improve error logging on accept() failure (#69) * dlt-daemon: Avoid to output duplicated application registration message (#63) * dlt-daemon: Not output Context un-/registration DLT message by default (#62) * dlt-daemon: Continue to send log level / connection status even if error occurs (#61) * IPC: Unix socket added (#43) * Introduce controlling entire system trace status feature from dlt-control (#57) * dlt-daemon: Lower log level of logs not to output unintentional warning (#58) * dlt-daemon: Fix infinite loop on set log level using wildcards (#55) * dlt-daemon: Fix repeated output of marker message (#54) * dlt-control: Fix Setting default trace status issue (#53) * Fix ForceContextLogLevelAndTraceStatus handling in dlt_daemon_client.c (#50) * minor compiler warning gcc 7.x (#30) * improve error reporting in dlt_daemon_socket (#41) * Fix SEGV dlt_offline_trace.c (#32) * fix PR #26 socket_sendreliable data_send update * Prevention for occasional corrupted messages (#26) * README: Update contact information ### 2.17.0 * Fix for initialization of buffer settings in DLT user library. * fix various memory leaks * some-minor-fixes * Minor fixes: corrected typo in CMakeLists.txt - WTIH_DLT_ADAPTOR, removed character from merge * Data stuck in receiver buffer when dlt_daemon_user_send_log_level() fails * Update dlt_user.h * Add short explanation for DLT log level * Prevent buffer overflow for mount point path in dlt_logstorage_open_log_file * journald adaptor: test with sudo privileges * cmake: fix unit tests compilation with systemd * Input parameter check & Error message modification * Tell cmake to use [README.md](README.md) instead of README to fix doc generation * dlt-system-process-handling: fix warning * dlt_daemon_connection_types: fix build warnings * Updated README * dlt-adaptor-udp, dlt-adaptor-stdin: implement get of verbosity level from input * Added Description in dlt-system.conf * dlt-client: fix dlt_client_cleanup memory handling * CMake Option: Trigger segmentation fault in case of FATAL log * Daemon connection handling fixes * Added Description in dlt-system.conf * dlt-client: fix dlt_client_cleanup memory handling * CMake Option: Trigger segmentation fault in case of FATAL log * dlt-daemon: Fix use after free potential issue * Event handling: Fix connection destroy bug * Remove duplicate README * daemon: check payload length before cast to struct * Added missing build steps to INSTALL * pkg-config: fix library directory. ### 2.16.0 * doc: Documenatation update * Systemd-journal-test: Add WITH_DLT_UNIT_TEST flag when building sources * Smoketest: Offline Logstorage * Smoketest: Multinode * Unit Test: Event handling * Provision to test static function * Unit Test: MultiNode * Unit Test: Multinode Unit test preparation script * CMake: Add option to build unit test binaries * dlt-system-filetransfer: fix bug caused by malloc assert * Environment variables for library ringbuffer * DLT_PTR macro: Improve implementation and function API added * MultiNode: Specify config file location in dlt.conf * dlt-client: Use correct port on connect * process user message: Fix bound handling * dlt-system-filetransfer: Fix compiler warnings * Remove C99 style comments in include directory * Dlt-Receive: Use PRIxxx macros for printf variables * Offine logstorage: Remove duplicated source file * Fix: Memory for context description is not freed * Fix: dlt-daemon overwrites ECU ID even if user log message already has the ECU ID that is not default value * Add: Configuration of option of get log info response during context registration * Add: Configuration of daemon FIFO size * Fix: Handle of /tmp/dlt never reset if dlt-daemon is killed during output user buffer * Add: Debug log for file transfer feature of dlt-system. * Fix: Segfault in checking buffer usage * Fix: File Transfer acceleration * Fix: File name is broken when file is transferred on 64 bit OS. * Fix: Memory leak issue in dlt-dbus * Add dlt_user_is_logLevel_enabled API * [README.md](README.md) formatting changes * Adding GitHub flavored markdown for README. * Fixed D-Bus tracing not working anymore * Fixed not working default log level. * Fixed not returning the correct number of lost messages at exit. * dlt-daemon: Free DltDaemon structure on exit * CommonControl: Fix for commands not working with unix socket * CommonControl: Unix socket path and ecuid parsing for control applications * dlt-control: Provision to control entire system log level * DLT_PTR: User macro to print pointers * dlt-daemon: Fix user log handler return value * dlt-daemon: Connection activation rework * dlt-daemon: receiver rework * Fix connection handling of serial interface * Offline trace: Make search more precise * MultiNode: Add support for mandatory configurations * MultiNode: Add support for SerialHeader conf * MultiNode: Add support for port configuration * MultiNode: Send control messages after connection * MultiNode: Send serialheader if specified in dlt.conf * Offline logstorage: On Demand triggering for syncing Logstorage cache and support long options * Offline logstorage: Fix to resetting of Syncbehavior value * Offline logstorage: Refactor filter storage functionality to support general properties * Offline logstorage: Fixed extended header size check condition * Offline logstorage: Fix invalid filter configuration handling * Added abnormal unit tests to check DLT_RETURN_USER_BUFFER_FULL * DLT_RETURN_USER_BUFFER_FULL is returned when user buffer full * Revert truncation of string or raw block ### 2.15.0 * Fixed bug with truncation of string or raw block * Updated man pages and README * Truncate string or raw block if length exceeds maximum message length * Fixed a bug in dlt-system filetransfer * dlt-system filetransfer waits for a client to connect * Fixed compilation for older versions of gcc * Fixed core pattern to use correct dlt-cdh install path * Fixed CMakeLists to build core dump handler * Replaced Type=Simple with Type=simple in cmkake files for .service files * Added systemd install dir parameter * Added option to specify user for non-root processes * Added dlt-kpi component to log various KPI information to dlt-daemon ### 2.14.1 * MultiNode: Reconnection after connection loss * Fix injection message handling ### 2.14.0 * Fix fork()-handler in libdlt * Set default log-levels in dlt.conf * Fix register context before application is registered * Fixed compiler warnings about format issues in dlt-system-journal.c by replacing llu with PRIu64 * Make IP version compile time configurable * Implemented Dlt MultiNode to connect DLT Daemons running on different operating systems * Daemon shutdown: fixed memory leaks and missing removal of created sockets * DltLogstorage: reduce writing to internal storage device as much as possible * Control appliction to support offline log storage trigger implemented * Offline log storage to internal and external devices implemented * Unix socket control interface implemented * Parse INI files for Offline Logstorage, Multinode and potentially other DLT extensions implmented * Linking library systemd instead of systemd-journal systemd-id128 if systemd version >= 209 * Event handling has been reworked in order to use epoll and restructure the code * Fixed include paths in dlt_user_manual.txt and dlt_cheatsheet.txt ### 2.13.0 * Added core dump handler code * Purged all warnings for -Wall -Wextra with gcc 4.9.1 * Set DLT_USER_BUF_MAX_SIZE to 1390 to prepare UDP message transport * dlt-test-client and dlt-test-filetransfer have global failed test counter so they can return 1 on failure * Using DLT_USER_BUF_MAX_SIZE in dlt-test-client.c truncated check * Set path to /usr/local/share/ in dlt-test-filetransfer.c * Added programme to test repeated calls of dlt_init and dlt_free * DLT daemon improvement - dlt_init()-check * DLT daemon improvement - parameter value range check * Adapt unit tests to check for enum return values * Changed C version to gnu99 and C++ version to gnu++0x * Fixed bug in INTERNAL-mode connection * Use the best possible timestamp for all system journal entries * Make timeout in at_exit handler configurable * Allow multiple instances of dlt-daemon * Add C++ extension which uses variadic templates from C++ 11 (disabled by default) * Allow registration of contexts before application is registered * Add env-var to set initial log-levels * Allow applications to fork() * Fixed file permissions * Added offline logstorage implementation which can be used instead of the already available offline trace functionality ### 2.12.1 * Removed all trailing whitespaces * Replaced all tabs with spaces in all files in include folder * Rework of addon tests filtetransfer, systemd-journal and system-logger * Fix compilation warnings and possible misuse of snprint * Rework of unit tests * Fix installation paths on x86_64 (lib64 instead of lib) ### 2.12.0 * Added unit and functional tests * Fixed copyright doxygen comments * Updated license headers to latest GENIVI license policy * Renamed and cleanup further files to comply with licensing requirements * dlt-control: Check for return values * dlt-daemon: Explicitly set the default loggingLevel to LOG_INFO * dlt-daemon: Explicitly set the default loggingMode to DLT_LOG_TO_CONSOLE * Fixing MIN and MAX defines for base integer types * Unified all line endings to UNIX style * Adding gtest framework v1.7.0 * Remove absolute installation paths so that DLT can be installed at any location (not only "/usr"). * Add Service ID Last entry to avoid further modifications in dependent code * Change daemon state handling to have all traces in online trace even when offline trace is active * Fix content of offline trace * Open daemon connection in atexit function * Change loglevel of Request-Resend message * Fix daemon state handling with offline trace * Fix watchdog timeout * Reworked internal output * DLT MISRA conform changes * Made zlib dependent on DLT_SYSTEM * Doxygen paths are now determined by CMake. * Add the IPv6 support * Workaround for duplicated log messages in offline trace file issue * Fix PREFIX. Works now with the default PREFIX (/usr/local/) and with the user PREFIX (e.g. /temp/test_with_pref). PREFIX Fix for filetransfer directory (PREFIX/share/) * Fixed typo in include guard * Resolves BUG-206: Install prefix should be configurable * Adding support for new macros to the daemon. New macros: DLT_HEX8(VAR) 8bits variable displayed in hexadecimal with "0x" prefix DLT_HEX16(VAR) 16bits displayed in hexadecimal with "0x" prefix DLT_HEX32(VAR) 32bits displayed in hexadecimal with "0x" prefix DLT_HEX64(VAR) 64bits displayed in hexadecimal with "0x" prefix DLT_BIN8(VAR) 8bits variable displayed in binary with "0b" prefix DLT_BIN16(VAR) 16bits variable displayed in binary with "0b" prefix * Fixed network trace test * Fix dlt_user_log_write_start_id return value * Added new API to send marker message from application. * New Callback function in DLT library, called when log level of context is changed ### 2.11.0 * New macros for Format of Hex and Binary. * Enable dbus trace when adaptor starts up. * Added configuration of dbus filter. * Fixed segmented messages arguments to standard. * First implementation of DLT DBus adapter. * DLT_CSTRING implementation non verbose mode. * Added new examples which can be manually build against DLt library. * Send ECU Id if enabled and added library API to change. * Send timestamp can be disabled by new API. * Send session/process id by default and add configuration API. * Send extended header in non verbose mode by default and add new API to change setting. * Make daemon buffer size configurable ### 2.10.0 * Bug 184 - /tmp/dltpipes directory does not exist before dlt-daemon is started, logging disabled * Updated authors information. * Fixed missing variable declaration when systemd not enabled. * Fixed: all possible malloc, sprintf and strcpy problems * Fixed: Creation of dltpipes directory is too late. * Cygwin port: cygwin patch, signal handling patch and cppcheck and install lib dll to correct location on Windows. * Fixed compiler warnings with 32Bit gcc compiler. * Fixed: Fixed offline trace and new send functions issues * Fixed: Bug 172 - DLT system crashes because of wrong journald adaptor implementation * DLT Common API Wrapper. * Removed dlt_free from example and test applications, already called from exit handler. * Fixed missing dlt_receiver_remove in dlt_daemon_process_user_xxx functions. * Use LIB_SUFFIX as lib installation path. * Fixed serial port not working anymore. * Added log output of created socket/port In init phase 2 - socket creation * Defined return value for dlt_message_read(). * Cleanup of send return values.Further cleanup of send restructure. * Moved daemon client functions to new source file. * Centralised send function to client.Introduced connection state to dlt daemon. * Removed check of double registration of contexts in user library, already checked by daemon. * When using DLT in console mode on a 64-bit machine, timestamps are corrupted due to an address of a 32-bit value being cast to a 64-bit pointer. * Bug 3 - Cmake does not check for zlib for dlt-daemon compilation. * Added new control message timezone. * Fixed deadlock after wrong merge.. * Fix potential buffer overflow in offline trace. * Fix deadlock in dlt_user_log_reattach_to_daemon(void). * Fixed possible crash when runtime configurations files are corrupted. * Environement variables added to configure internal logging in library. * Reduce Timeout between filetransfer packets. * Close socket when send fails. * Replace threads by timing fds for ecu version, timing packets and watchdog. * Added conntection info and unregister context control messages. * Configurable Timeout on send. * Added further checks to dlt_buffer. * atexit handler fix. * Add threadnames to libdlt threads. * Security fix on DLT pipes. * Reduce usage of SEM_LOCK in application library and reset pointers. * Fix: Systemd Journal Adapter provides corrupted output. * Fix: Install Example service file only when example enabled ### 2.9.1 * Implementation of command line tool dlt-control. * Fix file transfer bug. * Bug 44 - Don't print "Buffer full" message from DLT daemon for each trace. * Yocto fix in build builds. * Fixed: security issue in dlt-system-shell regarding strncpy. * Fixed: Security Issue by Command Injection in DLT System. * systemd/CMakeLists: Remove SYSTEMD_CONFIGURATIONS_FILES_DIR existance check. * Bug 85 - Include of dlt.h leads to compiler warning. * Bug 84 - Adding utf8 support to dlt-daemon, dlt-viewer. Modified patch, originally provided by Stefan Vacek. * systemd journal support added. * spec file does not package man files when cmake is run with -DWITH_DOC=OFF * added length check for paths of files to be transferred * Semaphores and Pointer passing insteasd by value and otehr coverity issue fixes * Fixed several issues in DLT filetransfer. * added creation date and a simple hash on the file name for to improve the uniqueness of getFileSerialNumber * modified filetransfer to be more robust in restarting transfers * Remove dangling DLT_SEM_FREE from dlt_user_queue_resend * Unifed ECU version sending functions * Refinements due to problems reported by static code analysis * Spec file does no more package man files when cmake is run with -DWITH_DOC=OFF * Made the APID strings in dlt-test-multi-process counting from 00-99 * Added creation date and a simple hash on the file name for to improve the uniqueness of getFileSerialNumber * File Transfer: improved robustness in case of restarted ECU/dlt-system with interrupted transfers ### 2.9.0 * Changed documentation and man pages into asciidoc format. * Increased buffer sizes for DLT user library and DLT daemon * [GDLT-120]: truncated and Segmented network tracing * [GDLT-137]: Automatically try resending of user buffer after FIFO full * [GSWD-85]: Added authors file ### 2.8.0 * [GDLT-115]: Encapsulate user macros * Fix register app and register context was not stored in buffer when FIFO is full. Other controll messages still not saved in buffer. * Create new fifo only when same application registers with different pid.' * Do not register appliction again, if already registered. * Fixed filetransfer not checking buffer fill level. ### 2.7.0 * [GDLT-24] Fixing compiler warnings * [GDLT-94] Optional sending periodic software version messages. See man pages for more informations * [GENDLT-26] Check for description length sanity * [GENDLT-24] Crash on invalid injection message fixed * [GDLT-93] Add -Wextra flags for compilation Fixed all the warnings that * [GDLT-90] Optional: systemd watchdog concept in dlt-system and dlt-daemon * [GDLT-67] Re-implemented dlt-system. Read full commit message for more information ### 2.6.2 * [GDLT-89] Fixed daemon doesn't sent the persistent log level * [GDLT-88] Fixed wrong initalization order using offline trace function ### 2.6.1 * Add _GNU_SOURCE Definition to be able to use O_CLOEXEC * Added important SEM_FREE in the daemon and closing fd in the filetransfer * [GDLT-3] Fixed missing semaphore around dlt_buffer_push3 * [GDLT-86] Fixed dlt_free uses absolute file path /tmp and not DLT_USER_DEFINE define * [D4099] Check for duplicate file handles, and clean them up if found * [GDLT-85] Pipes opened multiple times for the same application pid fixed * [GDLT-82] Child process inherits file descriptors openend by their parent fixed * [GDLT-84] Instead of calling the injection callback, store a pointer to it and the required parameter data fixed * [GDLT-70] Check for malloc failures and return errors where applicable * [GDLT-47] Avoid discarding old contexts if no new memory can be allocate * [GDLT-69] Fixed bug in dlt-test-multi-process shares context between threads ### 2.6.0 * [GDLT-75] Use old style directory check on startup * [GENDLT-21] Move mcnt from DltContextData to DltContext * [GENDLT-15] Fixes to previous integrations from review * [GENDLT-15] Safe re-allocations for databuffer * [GENDLT-15] use the correct TEXTBUFSIZE * [GENDLT-15] Optimize usege of strlen. Improved log level handling * [GENDLT-15] Avoid buffer overrun with snprintf() * [GENDLT-15] Check return value of dlt_user_log_write_start(_id) correctly * [GENDLT-15] Reduce the number of applications if allocation fails * [GENDLT-15] Make dlt_user_log_write_start inline * [GENDLT-15] Improve errore checking in dlt_user_log_write_start_id * [GENDLT-15] Use databussersize to avoid reallocations * [GENDLT-15] Rename buffer size constant to avoid confusion * [GENDLT-15] Better error handling when writing to FIFO * [GENDLT-15] Remove duplicate msg initialization. * [GENDLT-15] Optimize away multiple uses of strlen for one check * [GDLT-4] Improve queue handling, allow for other messages while transferring a large file * [GDLT-4] Limit maximum file queue to 256 files * [GDLT-4] First working version of inotify for file transfer * [GDLT-2] First test for filetransfer change * [GDLT-2] Change to gzip wrapper format. Change file signature creation to account for file size, as inode number maybe duplicate when deleting and creating new files * [GDLT-2] Fix bug while reading the options * [GDLT-2] Allow for enabling/disabling compression for the separate directories * [GDLT-2] Check if the file is already compressed * [GDLT-2] Link with libz, fix a typo * [GDLT-2] zlib based compression for dlt-system * Cleaned some warnings generated from removing stale old code ### 2.5.2 * Change to Mozilla Public License Version 2.0 ### 2.5.1 * Fixed bug with comparinson between signed and unsigned integer and protection for a buffer overflow. * Modified library for new test cases to corrupt data - related to the bug fix for testing signed and unsigned integer * [GENDLT-20] Fixed bug to use old cmake version for copy file * Replaced dlt-test-filetransfer-image.png with an own created image * [GENDLT-21] Fixed bug: Message Counter (MCNT) should be increased but is always 0 ### 2.5.0 * [GDLT-53] Man pages installation included * .cproject and .project file for Eclipse included * Update of doxygen documentation and generation * Rework of root CMake project file, e.g. structure and compile options * [GENDLT-16] Create variable in dlt-system.conf to configure the timeout of the filetransfer * [GDLT-37] Extend automated test tools for parallel process/threads tests * [GSW-138] API Extension to resend the log messages in the user buffer * [GDLT-36] Prefixing of dlt_version.h fixed * [GDLT-31] Tracefile content stored different under Ubuntu 64 bit version compared to Ubuntu/Win 32 Bit version fixed * [GDLT-35] Compile warnings fixed * [GSW-137] Wrong include gives error on compailing against dlt fixed ### 2.4.2 * Added dynamic increasable ringbuffers to user lib and daemon. * dlt-system filetransfer now recovers when file is deleted during filetransfer. * Added check of file size when starting and deleting files during filetransfer * Added chekc of shm buffer availability when push to shm * Create abstraction of shm buffer management. * Fixed buffer overflow problem in buffer library. * Disabled share memory by default - disabled completely shared memory if not enabled. ### 2.4.1 * Added dynamic increasable ringbuffers to user lib and dlt-daemon. * Created abstraction of shm buffer management. * dlt-system filetransfer now recovers when file is deleted during filetransfer. * Added check of file size when starting and deleting files during filetransfer. * Added check of shm buffer availability when push to shm. ### 2.4.1 * Added internal logging facility to stdout, syslog or local file, configurable in configuration file. * Added deamonise and signal handlers to dlt-system. * Added manual pages. * Added new API dlt_check_library_version() function. * Fifo or SHM mode can be changed by compiler switch. * Replaced SHM implementation. * Fixed shared memory problem in DLT library during startup, if application is started before daemon. * Fixed syslog adapter in dlt-system. * Reverted API changes in dlt_register_app() function. * DLT user library does not set the stack size of the receiver thread anymore. ### 2.4.0 * New config files /etc/dlt.conf and /etc/dlt-system.conf must be adapted to the needs * New DLT user lib API dlt_get_log_state() to get DLT client state * New DLT user lib API to manage flow control (needed for bulk data logging) * New DLT user lib API dlt_set_log_mode() to enable/disable internal/external trace * New application dlt-system (filtransfer, proc file system logger,syslog udp adapter included) * [GSW-66] File transfer over DLT. * [GSW-43] Performance improvement for bulk data over DLT. * [GSW-61] Replace command line parameter by configuration file * [GSW-13] Support for keep-alive messages as configuration parameter * [GSW-60] Extended offline DLT Trace memory handling. * Removed filter implementation ### 2.3.0 * [GSW-16] Systemd configuration for syslog to DLT dapater * [GSW-62] DLT Library version check * [GSW-28] Directory where persistent data is stored is not configurable * [GSW-59] Statically allocated large array * Added init script for Ubuntu * Optional adding of gprof compile flags * sprintf with float64 fails on ARM platform; disabled this function on QRM platform. ### 2.2.0 * Moved build process completely to cmake * Added commandline parameter -u to set ring buffer size * Reduced cpu consumption needed by applications using DLT library * Increased default ringbuffer size to 10024 bytes * Changed delay in receiver routine to 100ms ### 2.1.0 * DLT Viewer (QT) * New dlt viewer (QT-based) implementated * Moved to seperate project, see extra Release Notes for DLT Viewer (QT) * DLT Viewer (WX) - Deprecated * Old dlt viewer (WX) is removed now from package generation * Moved to seperate project * Removed filtering of messages during writing to a file * DLT library: * Functions dlt_file_read_raw() and dlt_file_read_header_raw() added * Added support for raw messages in nonverbose mode * Injection tables are now dynamically allocated * Contexts are now dynamically allocated * Added seperate file for platform float types (dlt_float_types.h) and used this types. Attention: This file must be adapted to each target platform. * Removed signal handlers from dlt_user.c; SIGPIPE signal is ignored; atexit() handler still exists * Function dlt_forward_msg() added * DLT daemon: * Small optimization in get_log_info() for one searched application with one searched context, which is existing in the context table of the dlt daemon * Optional syncing to serial header added * Support for keep-alive messages, realized as seperate thread * General: * Combined dlt-test-user-multi and dlt-test-many to dlt-test-stress * Extended dlt-test-client * Added stress test3 to dlt-test-stress * Added help to dlt-test-stress, printed if no test was selected * Added dlt-test-internal * Removed plugin support from dlt_receive and dlt_convert * Extended documentation * dlt viewer (wx): Fixed minor bug, it's possible now to compile the dlt viewer (wx) again under mingw under Windows * DLT test programs: Fixed minor bug in dlt-test-user, test3f: Wrong counter was used * Removed DLT_LOG calls in injection functions due to problems (application hangs) ### 2.0.5 * DLT viewer: * The default log level is now shown, if already known * Renamed Filter->New.. to Filter->Delete all filter * Enhanced performance * DLT library: * On crash or termination of application using the DLT library, the registered context and application IDs are removed properly (and are deregistered from DLT daemon) * dlt_register_context_ll_ts() and Macro therefore added * dlt_message_payload() has now additional type DLT_OUTPUT_ASCII_LIMITED * dlt_message_header_flags() added * DLT daemon: * Support for dlt_register_context_ll_ts() added * Enhanced support for get_log_info (all modes, 1 app all contexts, 1 app 1 context, all apps all contexts) * Added -r option, for automatic sending context information to dlt client; if no client connection is available, this information is stored in history buffer in dlt daemon * Several internal performance optimizations: * dlt_daemon_context_find(), dlt_daemon_application_find(): Now O(log n) instead O(n) * Several functions optimized * Unnecessary functions removed * General: * Moved definition of struct DltUser from dlt_user_private.h to dlt_user.h * dlt.h includes now dlt_common.h * Extended dlt-test-user and dlt-test-client applications * DLT daemon/DLT library: Fixed bug in Filter Delete * DLT daemon: Fixed bug in dlt daemon which leads to a crash, when starting/stoping application, then sending new log level to context of this (now not running) application. * DLT daemon: Fixed bug in unregister application * DLT daemon: Fixed bug in reattach to daemon * DLT library: Fixed bug in send function * DLT viewer: Fixed bug in set default log level ### 2.0.4 * License has changed from ADRLPD to ADRLRM * DLT viewer: * Support for non-verbose mode (as FIBEX plugin) * DLT library: * Support for non-verbose mode (as FIBEX plugin) * dlt_message_print_* functions added * Semaphore calls added to enable multi-threading * Changed injection interface from direct usage to callback * Requested log level and trace status is set immediately in dlt_set_application_ll_ts_limit() * Implemented receiver thread in DLT library (used for setting of log level/trace status and for injection handling) * Added signal-handler and atexit-handler for cleanup (calls dlt_free()) * General: * Added implementation of clientlib and testclient for Windows * Both adaptors sends now log messages with log level DLT_LOG_INFO * Multi-threading example in src/tests/dlt-test-user-multi added * DLT viewer: Right mouse button for loading plugin descriptions (MOST-/Fibex-XML File) is now working (also in Windows) * DLT library: Fixed bug in dlt_print_mixed_string() * DLT library: Fixed bug in dlt_daemon_contexts_get_next_con_id() * DLT daemon: dlt_daemon_process_user_message_unregister_application() also removes now all corresponding contexts * DLT daemon: Added security check to dlt_daemon_control_get_log_info() in order to avoid crash which occured under special circumstances * DLT daemon: Register app now opens the connection to the DLT library, unregister app closes the connection (was before in register context) * Added -lrt to package config file * Resolved dependency from dlt_client.h to dlt_common.h -> dlt_common.h is now public ### 2.0.3 * DLT viewer: * Reduced load if idle * Modified behaviour of settings in dlt-viewer * Always open tmpfile in dlt-viewer if nothing other is specified * File->Clear added * DLT daemon: * Added several checks within code * DLT library: * Added several checks within code * Enhanced local print modes: a environment variable now can be used to control local print mode: Variable: DLT_LOCAL_PRINT_MODE Values : "AUTOMATIC" (local print only, if dlt-daemon connection is not available at startup of program using DLT library) "FORCE_ON" (always do local print) "FORCE_OFF" (never do local print) * A client library for writing console client applications (Linux) is now available. dlt-receiver and dlt-test-client uses this new library code * General: * Added seperate file for DltMostMessageHeader type * Added seperate file for DLT protocol values * Relaxed checks for passing trace messages to plugin handler * Tested and improved MOST plugin * Support for float (32 Bit) and double (64 Bit) values * Code fragments for winclientlib and wintestclient added * DLT library: Fixed bug in DLT_IMPORT_CONTEXT * DLT library: Fixed bug in dlt_plugin_print() and dlt_most_payload() * DLT daemon and library: Fixed bug in handling of description strings * DLT viewer: Fixed bug in RMB Click for loading plugin description * General: Fixed parsing and printing of MOST messages * Several small bugs fixed ### 2.0.2 * DLT viewer: * Showing timestamp * Compiles now with MS Visual C++ * Support for loading multiple descriptions of plugins is now possible (*) * Plugin description can be loaded individually by Right-mouse-button (*) * DLT daemon: * Overflow message is now stored in history buffer, if necessary * DLT library: * Ring-buffer for injection messages implemented * History Buffer for Startup + Overflow implemented * Setting of maximum logged log level/trace status for application triggered by application is now possible * Optional local output of Log message is now possible * General: * Support for ARTIS Box implemented (all, without GUI) * Support for timestamp in standardheader extras added * Support for ECU ID in standardheader extras added; this value can be overwritten by the DLT daemon * DLT viewer: * Store and load application and context description fixed * Fixed crash on termination of Windows version * DLT console utilities: * Fixed printing of filter ids * General: * Big Endian/Little Endian support tested and fixed * Fixed writing and reading of locally created dlt files * Several smaller bugs fixed ### 2.0.1 * Full support for serial connection between DLT daemon and DLT Viewer * Several small bugs fixed in DLT Viewer ### 2.0.0 * Initial Release of new DLT daemon Version 2 including the new DLT Client DLT Viewer * Initial Release dlt-daemon-2.18.6/automotive-dlt-c++.pc.in000066400000000000000000000003221377520261000201100ustar00rootroot00000000000000exec_prefix=@CMAKE_INSTALL_PREFIX@ includedir=${exec_prefix}/include Name: DLT C++ Description: Diagnostic Log and Trace C++ extensions Version: @PROJECT_VERSION@ Requires: automotive-dlt Cflags: -std=gnu++0x dlt-daemon-2.18.6/automotive-dlt.pc.in000066400000000000000000000014301377520261000175430ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### prefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=@CMAKE_INSTALL_PREFIX@ libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@ includedir=${exec_prefix}/include Name: DLT Description: Diagnostic Log and Trace Version: @PROJECT_VERSION@ Requires: Libs: -L${libdir} -ldlt -lrt -lpthread @ZLIB_LIBRARY@ Cflags: -I${includedir}/dlt -DDLT_@PROJECT_VERSION_MAJOR@_@PROJECT_VERSION_MINOR@ dlt-daemon-2.18.6/automotive-dlt.spec.in000066400000000000000000000072501377520261000201010ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### Name: @PROJECT_NAME@ Version: @PROJECT_VERSION@ Release: @GENIVI_RPM_RELEASE@ Summary: %{name} - Diagnostic Log and Trace Group: System Environment/Base Vendor: BMW Group AG License: @LICENSE@ Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: pkg-configure BuildRequires: cmake %description This component provides a standardised log and trace interface, based on the standardised protocol specified in the AUTOSAR standard 4.0 DLT. This component can be used by GENIVI components and other applications as logging facility providing - the DLT shared library - the DLT daemon, including startup scripts - the DLT daemon adaptors - the DLT client console utilities - the DLT test applications %package doc Summary: %{name} - Diagnostic Log and Trace: Documentation Group: Documentation %description doc This component provides the documentation for %{name}. %package devel Summary: %{name} - Diagnostic Log and Trace: Development files Group: Development/Libraries Requires: %{name} = %{version}-%{release} Provides: pkgconfig(%{name}) %description devel This component provides the development libraries and includes for %{name}. %package c++-devel Summary: %{name} - Diagnostic Log and Trace: Development files Group: Development/Libraries Requires: %{name} = %{version}-%{release}-devel Provides: pkgconfig(%{name}-c++) %description c++devel This component adds a C++ extension for %{name}. %prep %setup -q %build rm -rf build mkdir -p build cd build #../configure --host=@HOST_TYPE@ --prefix=%{_prefix} #make cmake .. -DCMAKE_INSTALL_PREFIX=/usr make %install rm -rf $RPM_BUILD_ROOT cd build mkdir -p $RPM_BUILD_ROOT%{_bindir} make install DESTDIR=$RPM_BUILD_ROOT #/usr/bin/install -c -m 755 testscripts/Meego/dlt-daemon $RPM_BUILD_ROOT/etc/init.d %pre %post /sbin/ldconfig %postun /sbin/ldconfig %clean rm -rf $RPM_BUILD_ROOT %files #/etc/init.d/dlt-daemon /etc/dlt-system.conf /etc/dlt.conf /usr/share/dlt-filetransfer/dlt-test-filetransfer-file /usr/share/dlt-filetransfer/dlt-test-filetransfer-image.png %{_libdir}/libdlt.so.@PROJECT_VERSION_MAJOR@ %{_libdir}/libdlt.so.@PROJECT_VERSION@ %{_libdir}/libdlt.so %{_bindir}/dlt-system %{_bindir}/dlt-convert %{_bindir}/dlt-sortbytimestamp %{_bindir}/dlt-receive %{_bindir}/dlt-adaptor-stdin %{_bindir}/dlt-adaptor-udp %{_bindir}/dlt-test-client %{_bindir}/dlt-test-user %{_bindir}/dlt-test-stress %{_bindir}/dlt-test-stress-client %{_bindir}/dlt-test-stress-user %{_bindir}/dlt-test-filetransfer %{_bindir}/dlt-test-multi-process %{_bindir}/dlt-test-multi-process-client %attr(0755,root,root) %{_bindir}/dlt-daemon %{_bindir}/dlt-example-user %{_bindir}/dlt-example-user-func %{_bindir}/dlt-example-filetransfer %files doc @PACKAGE_DOC@%{_mandir}/man1/dlt-convert.1.gz @PACKAGE_DOC@%{_mandir}/man1/dlt-sortbytimestamp.1.gz @PACKAGE_DOC@%{_mandir}/man1/dlt-daemon.1.gz @PACKAGE_DOC@%{_mandir}/man1/dlt-receive.1.gz @PACKAGE_DOC@%{_mandir}/man1/dlt-system.1.gz @PACKAGE_DOC@%{_mandir}/man5/dlt-system.conf.5.gz @PACKAGE_DOC@%{_mandir}/man5/dlt.conf.5.gz %files devel %{_includedir}/dlt/*.h %{_libdir}/pkgconfig/@PROJECT_NAME@.pc %files c++-devel %{_includedir}/dlt/*.hpp %{_libdir}/pkgconfig/@PROJECT_NAME@-c++.pc dlt-daemon-2.18.6/cmake/000077500000000000000000000000001377520261000147175ustar00rootroot00000000000000dlt-daemon-2.18.6/cmake/CMakeLists.txt000066400000000000000000000075751377520261000174750ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### # Run CheckIncludeFiles and CheckFunctionExists include(TestBigEndian) TEST_BIG_ENDIAN( DLT_BIGENDIAN ) if( DLT_BIGENDIAN ) add_definitions( -DBYTE_ORDER=BIG_ENDIAN ) else ( DLT_BIGENDIAN ) add_definitions( -DBYTE_ORDER=LITTLE_ENDIAN ) endif ( DLT_BIGENDIAN ) INCLUDE(CheckIncludeFiles) CHECK_INCLUDE_FILES( arpa/inet.h HAVE_ARPAINET_H) CHECK_INCLUDE_FILES( fcntl.h HAVE_FCNTL_H) CHECK_INCLUDE_FILES( float.h HAVE_FLOAT_H) CHECK_INCLUDE_FILES( limits.h HAVE_LIMITS_H) CHECK_INCLUDE_FILES( netdb.h HAVE_NETDB_H) CHECK_INCLUDE_FILES( netinet/in.h HAVE_NETINETIN_H) CHECK_INCLUDE_FILES( stddef.h HAVE_STDDEF_H) CHECK_INCLUDE_FILES( stdint.h HAVE_STDINT_H) CHECK_INCLUDE_FILES( stdlib.h HAVE_STDLIB_H) CHECK_INCLUDE_FILES( string.h HAVE_STRING_H) CHECK_INCLUDE_FILES( sys/ioctl.h HAVE_SYSIOCTL_H) CHECK_INCLUDE_FILES( sys/socket.h HAVE_SYSSOCKET_H) CHECK_INCLUDE_FILES( sys/time.h HAVE_SYSTIME_H) if( WITH_SYSTEMD_WATCHDOG OR WITH_SYSTEMD ) set(CMAKE_REQUIRED_INCLUDES "${PROJECT_SOURCE_DIR}/systemd/3rdparty/") CHECK_INCLUDE_FILES( sd-daemon.h HAVE_SYSTEMD_H) endif ( WITH_SYSTEMD_WATCHDOG OR WITH_SYSTEMD ) CHECK_INCLUDE_FILES( unistd.h HAVE_UNISTD_H) CHECK_INCLUDE_FILES( sys/ipc.h HAVE_SYSIPC_H) CHECK_INCLUDE_FILES( netdb.h HAVE_NETDB_H) CHECK_INCLUDE_FILES( ctype.h HAVE_CTYPE_H) CHECK_INCLUDE_FILES( signal.h HAVE_SIGNAL_H) CHECK_INCLUDE_FILES( syslog.h HAVE_SYSLOG_H) CHECK_INCLUDE_FILES( sys/stat.h HAVE_SYSSTAT_H) CHECK_INCLUDE_FILES( linux/stat.h HAVE_LINUXSTAT_H) CHECK_INCLUDE_FILES( sys/uio.h HAVE_SYSUIO_H) CHECK_INCLUDE_FILES( termios.h HAVE_TERMIOS_H) CHECK_INCLUDE_FILES( unistd.h HAVE_UNISTD_H) CHECK_INCLUDE_FILES( mqueue.h HAVE_MQUEUE_H) INCLUDE(CheckFunctionExists) CHECK_FUNCTION_EXISTS( clock_gettime HAVE_FUNC_CLOCKGETTIME) CHECK_FUNCTION_EXISTS( floor HAVE_FUNC_FLOOR) CHECK_FUNCTION_EXISTS( fork HAVE_FUNC_FORK) CHECK_FUNCTION_EXISTS( gethostbyname HAVE_FUNC_GETHOSTBYNAME) CHECK_FUNCTION_EXISTS( gettimeofday HAVE_FUNC_GETTIMEBYDAY) CHECK_FUNCTION_EXISTS( inet_ntoa HAVE_FUNC_INETNTOA) CHECK_FUNCTION_EXISTS( malloc HAVE_FUNC_MALLOC) CHECK_FUNCTION_EXISTS( memmove HAVE_FUNC_MEMMOVE) CHECK_FUNCTION_EXISTS( memset HAVE_FUNC_MEMSET) CHECK_FUNCTION_EXISTS( mkfifo HAVE_FUNC_MKFIFO) CHECK_FUNCTION_EXISTS( select HAVE_FUNC_SELECT) CHECK_FUNCTION_EXISTS( socket HAVE_FUNC_SOCKET) CHECK_FUNCTION_EXISTS( strchr HAVE_FUNC_STRCHR) CHECK_FUNCTION_EXISTS( strerror HAVE_FUNC_STRERROR) CHECK_FUNCTION_EXISTS( strstr HAVE_FUNC_STRSTR) CHECK_FUNCTION_EXISTS( strtol HAVE_FUNC_STRTOL) # Message queue find_library(RT_LIBRARY rt) if(RT_LIBRARY) include(CheckLibraryExists) CHECK_LIBRARY_EXISTS( ${RT_LIBRARY} mq_open mqueue.h HAVE_FUNC_MQOPEN) CHECK_LIBRARY_EXISTS( ${RT_LIBRARY} mq_close mqueue.h HAVE_FUNC_MQCLOSE) CHECK_LIBRARY_EXISTS( ${RT_LIBRARY} mq_unlink mqueue.h HAVE_FUNC_MQUNLINK) CHECK_LIBRARY_EXISTS( ${RT_LIBRARY} mq_send mqueue.h HAVE_FUNC_MQSEND) CHECK_LIBRARY_EXISTS( ${RT_LIBRARY} mq_receive mqueue.h HAVE_FUNC_MQRECEIVE) else() CHECK_FUNCTION_EXISTS( mq_open HAVE_FUNC_MQOPEN) CHECK_FUNCTION_EXISTS( mq_close HAVE_FUNC_MQCLOSE) CHECK_FUNCTION_EXISTS( mq_unlink HAVE_FUNC_MQUNLINK) CHECK_FUNCTION_EXISTS( mq_send HAVE_FUNC_MQSEND) CHECK_FUNCTION_EXISTS( mq_receive HAVE_FUNC_MQRECEIVE) endif() if(WITH_CHECK_CONFIG_FILE) configure_file(${PROJECT_SOURCE_DIR}/cmake/config.h.cmake ${PROJECT_BINARY_DIR}/include/dlt/config.h) endif(WITH_CHECK_CONFIG_FILE) configure_file(${PROJECT_SOURCE_DIR}/cmake/dlt_version.h.cmake ${PROJECT_BINARY_DIR}/include/dlt/dlt_version.h @ONLY) dlt-daemon-2.18.6/cmake/config.h.cmake000066400000000000000000000037071377520261000174230ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ // DO NOT EDIT! GENERATED AUTOMATICALLY! // cmakedefine01 sets #define [0|1] if variable is defined in cmake // variable is set by CHECK_INCLUDE_FILES and CHECK_FUNCTION_EXISTS #cmakedefine01 HAVE_SYSTEMD_H #cmakedefine01 HAVE_ARPAINET_H #cmakedefine01 HAVE_FCNTL_H #cmakedefine01 HAVE_FLOAT_H #cmakedefine01 HAVE_LIMITS_H #cmakedefine01 HAVE_NETDB_H #cmakedefine01 HAVE_NETINETIN_H #cmakedefine01 HAVE_STDDEF_H #cmakedefine01 HAVE_STDINT_H #cmakedefine01 HAVE_STDLIB_H #cmakedefine01 HAVE_STRING_H #cmakedefine01 HAVE_STRINGS_H #cmakedefine01 HAVE_SYSIOCTL_H #cmakedefine01 HAVE_SYSSOCKET_H #cmakedefine01 HAVE_SYSTIME_H #cmakedefine01 HAVE_SYSTEMD_H #cmakedefine01 HAVE_UNISTD_H #cmakedefine01 HAVE_SYSIPC_H #cmakedefine01 HAVE_NETDB_H #cmakedefine01 HAVE_CTYPE_H #cmakedefine01 HAVE_SIGNAL_H #cmakedefine01 HAVE_SYSLOG_H #cmakedefine01 HAVE_SYSSTAT_H #cmakedefine01 HAVE_LINUXSTAT_H #cmakedefine01 HAVE_SYSUIO_H #cmakedefine01 HAVE_TERMIOS_H #cmakedefine01 HAVE_UNISTD_H #cmakedefine01 HAVE_FUNC_BZERO #cmakedefine01 HAVE_FUNC_CLOCKGETTIME #cmakedefine01 HAVE_FUNC_FLOOR #cmakedefine01 HAVE_FUNC_FORK #cmakedefine01 HAVE_FUNC_GETHOSTBYNAME #cmakedefine01 HAVE_FUNC_GETTIMEBYDAY #cmakedefine01 HAVE_FUNC_INETNTOA #cmakedefine01 HAVE_FUNC_MALLOC #cmakedefine01 HAVE_FUNC_MEMMOVE #cmakedefine01 HAVE_FUNC_MEMSET #cmakedefine01 HAVE_FUNC_MKFIFO #cmakedefine01 HAVE_FUNC_SELECT #cmakedefine01 HAVE_FUNC_SOCKET #cmakedefine01 HAVE_FUNC_STRCHR #cmakedefine01 HAVE_FUNC_STRERROR #cmakedefine01 HAVE_FUNC_STRSTR #cmakedefine01 HAVE_FUNC_STRTOL dlt-daemon-2.18.6/cmake/dlt_version.h.cmake000066400000000000000000000025031377520261000204770ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ #ifndef __DLT_VERSION_H_ #define __DLT_VERSION_H_ #define _DLT_PACKAGE_VERSION_STATE "@DLT_VERSION_STATE@" #define _DLT_PACKAGE_VERSION "@PROJECT_VERSION@" #define _DLT_PACKAGE_MAJOR_VERSION "@PROJECT_VERSION_MAJOR@" #define _DLT_PACKAGE_MINOR_VERSION "@PROJECT_VERSION_MINOR@" #define _DLT_PACKAGE_PATCH_LEVEL "@PROJECT_VERSION_PATCH@" #define _DLT_PACKAGE_REVISION "@DLT_REVISION@" #ifdef DLT_SYSTEMD_ENABLE #define _DLT_SYSTEMD_ENABLE "+SYSTEMD" #else #define _DLT_SYSTEMD_ENABLE "-SYSTEMD" #endif #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE #define _DLT_SYSTEMD_WATCHDOG_ENABLE "+SYSTEMD_WATCHDOG" #else #define _DLT_SYSTEMD_WATCHDOG_ENABLE "-SYSTEMD_WATCHDOG" #endif #ifdef DLT_TEST_ENABLE #define _DLT_TEST_ENABLE "+TEST" #else #define _DLT_TEST_ENABLE "-TEST" #endif #ifdef DLT_SHM_ENABLE #define _DLT_SHM_ENABLE "+SHM" #else #define _DLT_SHM_ENABLE "-SHM" #endif #endif dlt-daemon-2.18.6/distfiles000066400000000000000000000006521377520261000155530ustar00rootroot00000000000000CMakeLists.txt (src|include|wxctb|testscripts|doc).*CMakeLists.txt (src|include|wxctb|testscripts).*\.(cpp|h|c|cxx) include/dlt/.*(\.h|\.cpp|\.cmake) #testscripts/Ubuntu/.*(\.h|\.cpp|\.cmake) #testscripts/Meego/.*(\.h|\.cpp|\.cmake) #systemd/.*(\.h|\.cpp|\.cmake) automotive-dlt.spec.in [^/]*\.cmake src/daemon/dlt.conf src/system/dlt-system.conf src/tests/dlt-test-filetransfer-file src/tests/dlt-test-filetransfer-image.png dlt-daemon-2.18.6/doc/000077500000000000000000000000001377520261000144045ustar00rootroot00000000000000dlt-daemon-2.18.6/doc/CMakeLists.txt000066400000000000000000000233601377520261000171500ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### if(WITH_DOC) # Markdown FIND_PROGRAM(PANDOC_TOOL NAMES pandoc PATHS /bin /usr/bin /usr/local/bin) if(NOT PANDOC_TOOL) MESSAGE(FATAL_ERROR "Could not find pandoc for man page generation.") endif(NOT PANDOC_TOOL) add_custom_target(generate_doc ALL COMMAND ${PANDOC_TOOL} -s -f markdown -t html5 ${PROJECT_SOURCE_DIR}/README.md -o ${PROJECT_BINARY_DIR}/README.html COMMAND ${PANDOC_TOOL} -s -f markdown -t html5 ${PROJECT_SOURCE_DIR}/doc/dlt_for_developers.md -o ${PROJECT_BINARY_DIR}/doc/dlt_for_developers.html COMMAND ${PANDOC_TOOL} -s -f markdown -t html5 ${PROJECT_SOURCE_DIR}/doc/dlt_glossary.md -o ${PROJECT_BINARY_DIR}/doc/dlt_glossary.html COMMAND ${PANDOC_TOOL} -s -f markdown -t html5 ${PROJECT_SOURCE_DIR}/doc/dlt_offline_logstorage.md -o ${PROJECT_BINARY_DIR}/doc/dlt_offline_logstorage.html COMMAND ${PANDOC_TOOL} -s -f markdown -t html5 ${PROJECT_SOURCE_DIR}/doc/dlt_multinode.md -o ${PROJECT_BINARY_DIR}/doc/dlt_multinode.html COMMAND ${PANDOC_TOOL} -s -f markdown -t html5 ${PROJECT_SOURCE_DIR}/doc/dlt_extended_network_trace.md -o ${PROJECT_BINARY_DIR}/doc/dlt_extended_network_trace.html COMMAND ${PANDOC_TOOL} -s -f markdown -t html5 ${PROJECT_SOURCE_DIR}/doc/dlt_filetransfer.md -o ${PROJECT_BINARY_DIR}/doc/dlt_filetransfer.html COMMAND ${PANDOC_TOOL} -s -f markdown -t html5 ${PROJECT_SOURCE_DIR}/doc/dlt_kpi.md -o ${PROJECT_BINARY_DIR}/doc/dlt_kpi.html COMMAND ${PANDOC_TOOL} -s -f markdown -t html5 ${PROJECT_SOURCE_DIR}/doc/dlt_cdh.md -o ${PROJECT_BINARY_DIR}/doc/dlt_cdh.html) # Doxygen find_package(Doxygen) configure_file(${PROJECT_SOURCE_DIR}/doc/doxygen.cfg.cmake ${PROJECT_BINARY_DIR}/doc/doxygen.cfg @ONLY) add_custom_target (doc ALL COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/doc/doxygen.cfg WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/doc ) FIND_PROGRAM(ASCIIDOC_TOOL NAMES asciidoc PATHS /bin /usr/bin /usr/local/bin) if(NOT ASCIIDOC_TOOL) MESSAGE(FATAL_ERROR "Could not find asciidoc for doc-manuals generation.") endif(NOT ASCIIDOC_TOOL) add_custom_target (doc-manuals ALL COMMAND mkdir -p ${PROJECT_BINARY_DIR}/doc/manuals COMMAND mkdir -p ${PROJECT_BINARY_DIR}/doc/manuals/images COMMAND cp ${PROJECT_SOURCE_DIR}/doc/images/* ${PROJECT_BINARY_DIR}/doc/manuals/images COMMAND ${ASCIIDOC_TOOL} -a TOC1 -o ${PROJECT_BINARY_DIR}/doc/manuals/dlt_design_specification.html ${PROJECT_SOURCE_DIR}/doc/dlt_design_specification.md WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/doc ) endif(WITH_DOC) if(WITH_MAN) # Compress the man pages and install to proper place FIND_PROGRAM(GZIP_TOOL NAMES gzip PATHS /bin /usr/bin /usr/local/bin) if(NOT GZIP_TOOL) MESSAGE(FATAL_ERROR "Could not find gzip for man page compression.") endif(NOT GZIP_TOOL) FIND_PROGRAM(PANDOC_TOOL NAMES pandoc PATHS /bin /usr/bin /usr/local/bin) if(NOT PANDOC_TOOL) MESSAGE(FATAL_ERROR "Could not find pandoc for man page generation.") endif(NOT PANDOC_TOOL) set(MAN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(MAN_BUILD_DIR ${PROJECT_BINARY_DIR}/doc) set(MD_SRC ${MAN_SRC_DIR}/dlt.conf.5.md ${MAN_SRC_DIR}/dlt-system.conf.5.md ${MAN_SRC_DIR}/dlt_gateway.conf.5.md ${MAN_SRC_DIR}/dlt-convert.1.md ${MAN_SRC_DIR}/dlt-sortbytimestamp.1.md ${MAN_SRC_DIR}/dlt-daemon.1.md ${MAN_SRC_DIR}/dlt-receive.1.md ${MAN_SRC_DIR}/dlt-system.1.md ${MAN_SRC_DIR}/dlt-control.1.md ${MAN_SRC_DIR}/dlt-logstorage-ctrl.1.md ${MAN_SRC_DIR}/dlt-passive-node-ctrl.1.md ${MAN_SRC_DIR}/dlt-adaptor-stdin.1.md ${MAN_SRC_DIR}/dlt-adaptor-udp.1.md) set(MAN_SRC ${MAN_SRC_DIR}/dlt.conf.5 ${MAN_SRC_DIR}/dlt-system.conf.5 ${MAN_SRC_DIR}/dlt_gateway.conf.5 ${MAN_SRC_DIR}/dlt-convert.1 ${MAN_SRC_DIR}/dlt-sortbytimestamp.1 ${MAN_SRC_DIR}/dlt-daemon.1 ${MAN_SRC_DIR}/dlt-receive.1 ${MAN_SRC_DIR}/dlt-system.1 ${MAN_SRC_DIR}/dlt-control.1 ${MAN_SRC_DIR}/dlt-logstorage-ctrl.1 ${MAN_SRC_DIR}/dlt-passive-node-ctrl.1 ${MAN_SRC_DIR}/dlt-adaptor-stdin.1 ${MAN_SRC_DIR}/dlt-adaptor-udp.1) set(MAN_BUILD_SRC ${MAN_BUILD_DIR}/dlt.conf.5 ${MAN_BUILD_DIR}/dlt-system.conf.5 ${MAN_BUILD_DIR}/dlt_gateway.conf.5 ${MAN_BUILD_DIR}/dlt-convert.1 ${MAN_BUILD_DIR}/dlt-sortbytimestamp.1 ${MAN_BUILD_DIR}/dlt-daemon.1 ${MAN_BUILD_DIR}/dlt-receive.1 ${MAN_BUILD_DIR}/dlt-system.1 ${MAN_BUILD_DIR}/dlt-control.1 ${MAN_BUILD_DIR}/dlt-logstorage-ctrl.1 ${MAN_BUILD_DIR}/dlt-passive-node-ctrl.1 ${MAN_BUILD_DIR}/dlt-adaptor-stdin.1 ${MAN_BUILD_DIR}/dlt-adaptor-udp.1) set(MAN_BUILD_GZ ${MAN_BUILD_DIR}/dlt.conf.5.gz ${MAN_BUILD_DIR}/dlt-system.conf.5.gz ${MAN_BUILD_DIR}/dlt_gateway.conf.5.gz ${MAN_BUILD_DIR}/dlt-convert.1.gz ${MAN_BUILD_DIR}/dlt-sortbytimestamp.1.gz ${MAN_BUILD_DIR}/dlt-daemon.1.gz ${MAN_BUILD_DIR}/dlt-receive.1.gz ${MAN_BUILD_DIR}/dlt-system.1.gz ${MAN_BUILD_DIR}/dlt-control.1.gz ${MAN_BUILD_DIR}/dlt-logstorage-ctrl.1.gz ${MAN_BUILD_DIR}/dlt-passive-node-ctrl.1.gz ${MAN_BUILD_DIR}/dlt-adaptor-stdin.1.gz ${MAN_BUILD_DIR}/dlt-adaptor-udp.1.gz) add_custom_target(generate_man ALL COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt.conf.5.md -o ${MAN_BUILD_DIR}/dlt.conf.5 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt-system.conf.5.md -o ${MAN_BUILD_DIR}/dlt-system.conf.5 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt_gateway.conf.5.md -o ${MAN_BUILD_DIR}/dlt_gateway.conf.5 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt-convert.1.md -o ${MAN_BUILD_DIR}/dlt-convert.1 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt-sortbytimestamp.1.md -o ${MAN_BUILD_DIR}/dlt-sortbytimestamp.1 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt-daemon.1.md -o ${MAN_BUILD_DIR}/dlt-daemon.1 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt-receive.1.md -o ${MAN_BUILD_DIR}/dlt-receive.1 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt-system.1.md -o ${MAN_BUILD_DIR}/dlt-system.1 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt-control.1.md -o ${MAN_BUILD_DIR}/dlt-control.1 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt-logstorage-ctrl.1.md -o ${MAN_BUILD_DIR}/dlt-logstorage-ctrl.1 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt-passive-node-ctrl.1.md -o ${MAN_BUILD_DIR}/dlt-passive-node-ctrl.1 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt-adaptor-stdin.1.md -o ${MAN_BUILD_DIR}/dlt-adaptor-stdin.1 COMMAND ${PANDOC_TOOL} -s -t man ${MAN_SRC_DIR}/dlt-adaptor-udp.1.md -o ${MAN_BUILD_DIR}/dlt-adaptor-udp.1 COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt.conf.5 > ${MAN_BUILD_DIR}/dlt.conf.5.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt-system.conf.5 > ${MAN_BUILD_DIR}/dlt-system.conf.5.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt_gateway.conf.5 > ${MAN_BUILD_DIR}/dlt_gateway.conf.5.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt-convert.1 > ${MAN_BUILD_DIR}/dlt-convert.1.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt-sortbytimestamp.1 > ${MAN_BUILD_DIR}/dlt-sortbytimestamp.1.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt-daemon.1 > ${MAN_BUILD_DIR}/dlt-daemon.1.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt-receive.1 > ${MAN_BUILD_DIR}/dlt-receive.1.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt-system.1 > ${MAN_BUILD_DIR}/dlt-system.1.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt-control.1 > ${MAN_BUILD_DIR}/dlt-control.1.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt-logstorage-ctrl.1 > ${MAN_BUILD_DIR}/dlt-logstorage-ctrl.1.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt-passive-node-ctrl.1 > ${MAN_BUILD_DIR}/dlt-passive-node-ctrl.1.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt-adaptor-stdin.1 > ${MAN_BUILD_DIR}/dlt-adaptor-stdin.1.gz COMMAND ${GZIP_TOOL} -c ${MAN_BUILD_DIR}/dlt-adaptor-udp.1 > ${MAN_BUILD_DIR}/dlt-adaptor-udp.1.gz) # If user has not set the base dir for man pages, use a default location set(MAN_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/man) install(FILES ${MAN_BUILD_DIR}/dlt.conf.5.gz ${MAN_BUILD_DIR}/dlt-system.conf.5.gz ${MAN_BUILD_DIR}/dlt_gateway.conf.5.gz DESTINATION ${MAN_INSTALL_DIR}/man5 ) install(FILES ${MAN_BUILD_DIR}/dlt-convert.1.gz ${MAN_BUILD_DIR}/dlt-sortbytimestamp.1.gz ${MAN_BUILD_DIR}/dlt-daemon.1.gz ${MAN_BUILD_DIR}/dlt-receive.1.gz ${MAN_BUILD_DIR}/dlt-system.1.gz ${MAN_BUILD_DIR}/dlt-control.1.gz ${MAN_BUILD_DIR}/dlt-logstorage-ctrl.1.gz ${MAN_BUILD_DIR}/dlt-passive-node-ctrl.1.gz ${MAN_BUILD_DIR}/dlt-adaptor-stdin.1.gz ${MAN_BUILD_DIR}/dlt-adaptor-udp.1.gz DESTINATION ${MAN_INSTALL_DIR}/man1 ) endif(WITH_MAN) dlt-daemon-2.18.6/doc/dlt-adaptor-stdin.1.md000066400000000000000000000022651377520261000204240ustar00rootroot00000000000000% DLT-ADAPTOR-STDIN(1) # NAME **dlt-adaptor-stdin** - Forward input from stdin to DLT Daemon # SYNOPSIS **dlt-adaptor-stdin** \[**-a** apid\] \[**-c** ctid\] \[**-b**\] \[**-s**\] \[**-t** timeout\] \[**-h**\] # DESCRIPTION This is a small external program for forwarding input from stdin to DLT Daemon. ## OPTIONS -a : Set application ID to apid (default: SINA) -c : Set context ID tp ctid (default: SINC) -b : To flush the buffered logs while unregistering app -t : Set timeout when sending messages at exit, in ms (default: 10000 = 10sec) -h : Show help # EXAMPLES Forward all dmesg to DLT Daemon without discarding any messages **dmesg | dlt-adaptor-stdin -b -s** Send DBUS messages to DLT Daemon using the program dbus-monitor **dbus-monitor | dlt-adaptor-stdin** # EXIT STATUS Non zero is returned in case of failure. # AUTHOR Saya Sugiura (ssugiura (at) jp.adit-jv (dot) com) # COPYRIGHT Copyright (C) 2019 Advanced Driver Information Technology, Bosch and DENSO. License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. # BUGS See Github issue: # SEE ALSO **dlt-daemon(1)** dlt-daemon-2.18.6/doc/dlt-adaptor-udp.1.md000066400000000000000000000023231377520261000200660ustar00rootroot00000000000000% DLT-ADAPTOR-UDP(1) # NAME **dlt-adaptor-udp** - Forward received UDP messages to DLT Daemon # SYNOPSIS **dlt-adaptor-udp** \[**-a** apid\] \[**-c** ctid\] \[**-p**\] \[**-h**\] # DESCRIPTION This is a small external program for forwarding received UDP messages to DLT Daemon. This also can be used for e.g. sending syslog messages to the DLT daemon. Therefore a syslog daemon called *syslog-ng* is necessary. This syslog daemon must be configured to send the syslog messages to a specific UDP port. For configuration of this syslog daemon, see the documentation for *syslog-ng*. This tools is already integrated into *dlt-system*. ## OPTIONS -a : Set application ID to apid (default: UDPA) -c : Set context ID tp ctid (default: UDPC) -p : Set receive port number for UDP messages (default: 47111) -h : Show help # EXIT STATUS Non zero is returned in case of failure. # AUTHOR Saya Sugiura (ssugiura (at) jp.adit-jv (dot) com) # COPYRIGHT Copyright (C) 2019 Advanced Driver Information Technology, Bosch and DENSO. License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. # BUGS See Github issue: # SEE ALSO **dlt-daemon(1)** dlt-daemon-2.18.6/doc/dlt-control.1.md000066400000000000000000000067471377520261000173440ustar00rootroot00000000000000% DLT-CONTROL(1) # NAME **dlt-control** - Send control messages to DLT Daemon # SYNOPSIS **dlt-control** \[**-v**\] \[**-h**\] \[**-S**\] \[**-R**\] \[**-y**\] \[**-b** baudrate\] \[**-e** ecuid\] \[**-a** id\] \[**-c** id\] \[**-s** id\] \[**-m** message\] \[**-x** message\] \[**-t** milliseconds\] \[**-l** level\] \[**-r** tracestatus\] \[**-d** loglevel\] \[**-f** tracestatus\] \[**-i** enable\] \[**-o**\] \[**-g**\] \[**-j**\] \[**-u**\] hostname/serial\_device\_name # DESCRIPTION Send control messages to DLT Daemon. This is useful when there is no client (e.g. DLT Viewer) available. It supports several control messages including: - Setting log level/trace level - Setting default log level/default trace level - Enable timing packets - Store configuration - Reset to factory default - Get logging information **Note** Use -u option instead of hostname/serial\_device\_name if Unix Socket is used. See example for detail. ## OPTIONS -v : Verbose mode -h : Usage -S : Send message with serial header (Default: Without serial header) -R : Enable resync serial header -y : Serial device mode -b : Serial device baudrate (Default: 115200) -e : Set ECU ID (Default: RECV) -a : Control message application id -c : Control message context id -s : Control message injection service id -m : Control message injection in ASCII -x : Control message injection in Hex e.g. 'ad 01 24 ef' -t : Timeout to terminate application (Default:1000) -l Set the log level (0=off - 6=verbose, default= -1) supported options: -l level -a apid -c ctid -l level -a abc* (set level for all ctxts of apps name starts with abc) -l level -a apid (set level for all ctxts of this app) -l level -c xyz* (set level for all ctxts whose name starts with xyz) -l level -c ctid (set level for the particular ctxt) -l level (set level for all the registered contexts) -r : Set the trace status (0=off - 1=on, default=255) supported options: -r tracestatus -a apid -c ctid -r tracestatus -a abc* (set status for all ctxts of apps name starts with abc) -r tracestatus -a apid (set status for all ctxts of this app) -r tracestatus -c xyz* (set status for all ctxts whose name starts with xyz) -r tracestatus -c ctid (set status for the particular ctxt) -r tracestatus (set status for all the registered contexts) -d : Set the default log level (0=off - 5=verbose) -f : Set the default trace status (0=off - 1=on) -i : Enable timing packets (0=off - 1=on) -o : Store configuration -g : Reset to factory default -j : Get log info -u : unix port # EXAMPLES Change log level of application "APP1" to DEBUG with unix port **dlt-control -a APP1 -l 5 -u** Change log level of application "APP1" and context "CON1" to ERROR **dlt-control -a APP1 -c CON1 -l 2 localhost** Get logging information of current running applications with unix port (IPC: Unix Socket) **dlt-control -j -u** Get logging information of current running applications (IPC:FIFO) **dlt-control -j localhost** # EXIT STATUS Non zero is returned in case of failure. # AUTHOR Saya Sugiura (ssugiura (at) jp.adit-jv (dot) com) # COPYRIGHT Copyright (C) 2019 Advanced Driver Information Technology, Bosch and DENSO. License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. # BUGS See Github issue: # SEE ALSO **dlt-daemon(1)** dlt-daemon-2.18.6/doc/dlt-convert.1.md000066400000000000000000000036221377520261000173310ustar00rootroot00000000000000% DLT-CONVERT(1) # NAME **dlt-convert** - Convert DLT Logging files into ASCII # SYNOPSIS **dlt-convert** \[**-h**\] \[**-a**\] \[**-x**\] \[**-m**\] \[**-s**\] \[**-t**\] \[**-o** filename\] \[**-v**\] \[**-c**\] \[**-f** filterfile\] \[**-b** number\] \[**-e** number\] \[**-w**\] file1 \[file2\] \[file3\] # DESCRIPTION Read DLT files, print DLT messages as ASCII and store the messages again. Use Ranges and Output file to cut DLT files. Use two files and Output file to join DLT files. ## OPTIONS -h : Display a short help text. -a : Print DLT file; payload as ASCII. -x : Print DLT file; payload as hex. -m : Print DLT file; payload as hex and ASCII. -s Print DLT file; only headers. -o : Output messages in new DLT file. -v : Verbose mode. -c : Count number of messages. -f : Enable filtering of messages. -b : First messages to be handled. -e : Last message to be handled. -w : Follow dlt file while file is increasing. -t : Handling the compressed input files (tar.gz). # EXAMPLES Convert DLT file into ASCII: **dlt-convert -a mylog.dlt** Cut a specific range, e.g. from message 1 to message 3 from a file called log.dlt and store the result to a file called newlog.dlt: **dlt-convert -b 1 -e 3 -o newlog.dlt log.dlt** Paste two dlt files log1.dlt and log2.dlt to a new file called newlog.dlt: **dlt-convert -o newlog.dlt log1.dlt log2.dlt** Handle the compressed input files and join inputs into a new file called newlog.dlt: **dlt-convert -t -o newlog.dlt log1.dlt compressed_log2.tar.gz** # EXIT STATUS Non zero is returned in case of failure. # AUTHOR Alexander Wenzel (alexander.aw.wenzel (at) bmw (dot) de) # COPYRIGHT Copyright (C) 2015 BMW AG. License MPL-2.0: Mozilla Public License version 2.0 . # BUGS See Github issue: # SEE ALSO **dlt-daemon(1)** dlt-daemon-2.18.6/doc/dlt-daemon.1.md000066400000000000000000000034221377520261000171120ustar00rootroot00000000000000% DLT-DAEMON(1) # NAME **dlt-daemon** - Diagnostic Log and Trace daemon # SYNOPSIS **dlt-daemon** \[**-h**\] \[**-d**\] \[**-c** filename\] \[**-t** directory\] \[**-p** port\] # DESCRIPTION The DLT daemon is the central place where logs and traces are gathered from different applications, stored temporarily or permanently and transferred to a DLT client application, which can run directly on the GENIVI system or more likely on a external tester device. ## OPTIONS -h : Display a short help text. -d : Daemonize, needed in System V init systems. -c : Load an alternative configuration file. By default the configuration file /etc/dlt.conf is loaded. -t : Directory for local fifo and user-pipes (Default: /tmp). Applications wanting to connect to a daemon using a custom directory need to be started with the environment variable DLT_PIPE_DIR set appropriately. -p : Port to monitor for incoming requests (Default: 3490) Applications wanting to connect to a daemon using a custom port need to be started with the environment variable DLT_DAEMON_TCP_PORT set appropriately. # EXAMPLES Start DLT daemon in background mode: **dlt-daemon -d** Start DLT daemon with own configuration: **dlt-daemon -c ~/my-dlt-configuration.cfg** Start DLT daemon with custom pipes directory: **dlt-daemon -t ~/dlt_pipes** Start DLT daemon listening on custom port 3500: **dlt-daemon -p 3500** # EXIT STATUS Non zero is returned in case of failure. # AUTHOR Alexander Wenzel (alexander.aw.wenzel (at) bmw (dot) de) # COPYRIGHT Copyright (C) 2016 BMW AG. License MPL-2.0: Mozilla Public License version 2.0 . # BUGS See Github issue: # SEE ALSO **dlt.conf(5)**, **dlt-system(1)** dlt-daemon-2.18.6/doc/dlt-logstorage-ctrl.1.md000066400000000000000000000026531377520261000207640ustar00rootroot00000000000000% DLT-LOGSTORAGE-CTRL(1) # NAME **dlt-logstorage-ctrl** - Trigger DLT Daemon to start/stop using an offline logstorage device # SYNOPSIS **dlt-logstorage-ctrl** \[**-h**\] \[**-c** ctype\] \[**-p** path\] \[**-e** ecu\] \[**-p\**\] \[**-t** timeout\] \[**-v**\] # DESCRIPTION Send a trigger to DLT Daemon to connect/disconnect a certain offline logstorage device # OPTIONS -h : Display a short help text. -c : Specify connection type: connect = 1, disconnect = 0. -d : Run as daemon: prop = use proprietary handler -p : Mount point path. -e : Specify the ECU ID. Default is: ECU1. -t : Specify connection timeout. Default is: 10s. # EXAMPLES Activate the offline logstorage device mounted on /mnt/dltlog **dlt-logstorage-ctrl -c 1 -p /mnt/dltlog** Deactivate the offline logstorage device mounted on /mnt/dltlog **dlt-logstorage-ctrl -c 0 -p /mnt/dltlog** Run logstorage control application as daemon listen to udev events **dlt-logstorage-ctrl -d** # EXIT STATUS Non zero is returned in case of failure. # AUTHOR Christoph Lipka (clipka (at) jp.adit-jv (dot) com), Syed Hameed (shameed (at) jp.adit-jv (dot) com) # COPYRIGHT Copyright (C) 2015 Advanced Driver Information Technology, Bosch and DENSO. License MPL-2.0: Mozilla Public License version 2.0 . # BUGS See Github issue: # SEE ALSO **dlt-daemon(1)** dlt-daemon-2.18.6/doc/dlt-passive-node-ctrl.1.md000066400000000000000000000024641377520261000212130ustar00rootroot00000000000000% DLT-PASSIVE-NODE-CTRL(1) # NAME **dlt-passive-node-ctrl** - Send a trigger to DLT daemon to (dis)connect a passive node or get current passive node status # SYNOPSIS **dlt-passive-node-ctrl** \[**-h**\] \[**-c**\] \[**-n** ecu\] \[**-s**\] \[**-t** timeout\] \[-v\] # DESCRIPTION Send a trigger to DLT daemon to (dis)connect a passive node or get current passive node status ## OPTIONS -h : Usage -c : Connection status (1 - connect, 0 - disconnect) -n : Passive Node identifier (e.g. ECU2) -s : Show passive node(s) connection status -t : Specify connection timeout (Default: 10s) -v : Set verbose flag (Default:0) # EXAMPLES Get status about connected passives nodes **dlt-passive-node-ctrl -s** Connect to passive node ECU2 **dlt-passive-node-ctrl -c 1 -n ECU2** Disconnect to passive node ECU2 **dlt-passive-node-ctrl -c 0 -n ECU2** # EXIT STATUS Non zero is returned in case of failure. # AUTHOR Christoph Lipka (clipka (at) jp.adit-jv (dot) com), Syed Hameed (shameed (at) jp.adit-jv (dot) com) # COPYRIGHT Copyright (C) 2015 Advanced Driver Information Technology, Bosch and DENSO. License MPL-2.0: Mozilla Public License version 2.0 . # BUGS See Github issue: # SEE ALSO **dlt-daemon(1)** dlt-daemon-2.18.6/doc/dlt-qnx-system.md000066400000000000000000000063631377520261000176470ustar00rootroot00000000000000# dlt-qnx-system QNX specific logging features of dlt are managed by the ```dlt-qnx-system``` process. It currently contains the message forwarder from slogger2 to DLT. The application listens to the system logs on QNX (slogger2) and sends them to DLT. The prerequisite is that dlt-daemon is already started and running. dlt-qnx-system loads by default the configuration file ```/etc/dlt-qnx-system.conf```. > In order to catch all logs via slog2, the syslog needs to forward to slogger2 in [syslog.conf](http://www.qnx.com/developers/docs/7.0.0/index.html#com.qnx.doc.neutrino.utilities/topic/s/syslog.conf.html). To change the log level, use application ID and context ID set in configuration file. ```DLT_INITIAL_LOG_LEVEL``` can be set on startup phase, or control message can be sent from DLT client (e.g. dlt-control, DLT Viewer) at runtime. Refer to [dlt_for_developers.md](dlt_for_developers.md) for more detail. ## Usage ```bash dlt-qnx-system [-h] [-d] [-c FILENAME] ``` -h : Display a short help text. -d : Daemonize. Detach from Terminal and run in background. -c : Load an alternative configuration file. By default the configuration file */etc/dlt-qnx-system.conf* is loaded. Non zero is returned in case of failure. ## Configuration By default, the configuration is loaded from */etc/dlt-qnx-system.conf*. It contains a few basic options: - *ApplicationId*: this QNX system log forwarder will have this application ID and appear on DLT client. Default value is *QSYM*. - *ApplicationContextID*: the context ID of the above application to appear on DLT client. Default value is *QSYC*. - *QnxSlogger2Enable*: when the value is 1 (by default), the QNX slogger2 adapter which sends slogger2 to DLT will be started. Otherwise if the value if 0, it won't be started. - *QnxSlogger2ContextId*: this will set the context ID of the QNX slogger2 adapter. Default value is *QSLA*. - *QnxSlogger2UseOriginalTimestamp*: when the value is 1 (by default), slogger2 event timestamps will be used as DLT timestamps. ## Slogger2 adapter The slogger2 adapter that can be enabled in dlt-qnx-system attaches to slogger2 and converts the messages to dlt messages. ### Log level mapping As the severity levels on QNX system log are different from DLT Log Level, the below table shows how they're converted from the former to the latter. | QNX System Log Level | DLT Log Level | |----------------------|--------------------| | SLOG2\_SHUTDOWN | DLT\_LOG\_FATAL | | SLOG2\_CRITICAL | DLT\_LOG\_FATAL | | SLOG2\_ERROR | DLT\_LOG\_ERROR | | SLOG2\_WARNING | DLT\_LOG\_WARN | | SLOG2\_NOTICE | DLT\_LOG\_INFO | | SLOG2\_INFO | DLT\_LOG\_INFO | | SLOG2\_DEBUG1 | DLT\_LOG\_DEBUG | | SLOG2\_DEBUG2 | DLT\_LOG\_VERBOSE | ### Context Mapping The json file dlt-slog2ctxt.json can be used to map slogger names to dlt-contexts. #### Example Here is an example that sets a mapping from the "dumper" process to the DLT Context "DUMP", and the QNX Hypervisor to "QVM". The description field is in the registration with libdlt. ```python { "DUMP": { "name": "dumper", "description": "Writes core dump files to disk" }, "SYSL": { "name": "syslogd", "description": "" } } ``` dlt-daemon-2.18.6/doc/dlt-receive.1.md000066400000000000000000000042741377520261000172770ustar00rootroot00000000000000% DLT-RECEIVE(1) # NAME **dlt-receive** - Console based client for DLT Logging # SYNOPSIS **dlt-receive** \[**-h**\] \[**-a**\] \[**-x**\] \[**-m**\] \[**-s**\] \[**-o** filename\] \[**-c** limit\] \[**-v**\] \[**-y**\] \[**-b** baudrate\] \[**-e** ecuid\] \[**-f** filterfile\] hostname/serial_device_name # DESCRIPTION Receive DLT messages from DLT daemon and print or store the messages. ## OPTIONS -h : Display a short help text. -a : Print DLT file; payload as ASCII. -x : Print DLT file; payload as hex. -m : Print DLT file; payload as hex and ASCII. -s : Print DLT file; only headers. -o : Output messages in new DLT file. -c : Set limit when storing messages in file. When limit is reached, a new file is opened. Use K,M,G as suffix to specify kilo-, mega-, giga-bytes respectively, e.g. 1M for one megabyte (Default: unlimited). -v : Verbose mode. -y : Serial device mode. -b : Serial device baudrate (Default: 115200). -e : Set ECU ID (Default: RECV). -f : Enable filtering of messages. # EXAMPLES Print received message headers received from a dlt-daemon running on localhost:: **dlt-receive -s localhost** Print received message headers received from a serila interface:: **dlt-receive -s -y /dev/ttySO** Store received message headers from a dlt-daemon to a log file called log.dlt and filter them for e.g. Application ID ABCD and Context ID EFGH (Write:ABCD EFGH as single line to a file called filter.txt):: **dlt-receive -s -o log.dlt -f filter.txt localhost** Store incoming messages in file(s) and restrict file sizes to 1 megabyte. If limit is reached, log.dlt will be renamed into log.0.dlt, log.1.dlt, ... No files will be overwritten in this mode:: **dlt-receive -o log.dlt -c 1M localhost** # EXIT STATUS Non zero is returned in case of failure. # NOTES Be aware that dlt-receive will never delete any files. Instead, it creates a new file. # AUTHOR Alexander Wenzel (alexander.aw.wenzel (at) bmw (dot) de) # COPYRIGHT Copyright (C) 2015 BMW AG. License MPL-2.0: Mozilla Public License version 2.0 . # BUGS See Github issue: # SEE ALSO **dlt-daemon(1)** dlt-daemon-2.18.6/doc/dlt-sortbytimestamp.1.md000066400000000000000000000042411377520261000211150ustar00rootroot00000000000000% DLT-SORTBYTIMESTAMP(1) # NAME **dlt-sortbytimestamp** - Re-order DLT Logging files according to message creation time and timestamp. # SYNOPSIS **dlt-sortbytimestamp** \[**-h**\] \[**-v**\] \[**-c**\] \[**-f** filterfile\] \[**-b** number\] \[**-e** number\] dltfile_in dltfile_out # DESCRIPTION By default messages in DLT files are ordered according to the time the logger received them. This can unhelpful when tracing a sequence of events on a busy multi-threaded/multi-core system, because thread pre-emption combined with multiple processes attempting to log messages simultaneously means that the order in which the messages are received may vary significantly from the order in which they were created. *dlt-sortbytimestamp* is able to re-order a DLT input file's messages according both their creation time and timestamp, and writes them to an output DLT file. # NOTE Use the \*-b\* and/or \*-e\* options to specify a range of messages within a single reboot cycle and all will be well. Hint: use *dlt-viewer* to ascertain the endpoints of the range in question. # OPTIONS -h : Display a short help text. -v : Verbose mode. Repeat to give more information. -c : Count number of messages. -f : Enable filtering of messages. Incompatible with range options. -b : First message to be handled. Zero based index. -e : Last message to be handled. Zero based index. # EXAMPLES Sort an entire file by message timestamp: **dlt-sortbytimestamp input.dlt output.dlt** Sort a specific range, e.g. from message 1,000,000 to message 1,500,000 from a file called input.dlt and store the result in a file called output.dlt: **dlt-sortbytimestamp -b 1000000 -e 1500000 input.dlt output.dlt** # EXIT STATUS Non zero is returned in case of failure. # AUTHOR Jonathan Sambrook (jonathan.sambrook (at) codethink (dot) co (dot) uk) Alexander Wenzel (alexander.aw.wenzel (at) bmw (dot) de) # COPYRIGHT Copyright (C) 2018 Codethink Ltd. Copyright (C) 2015 BMW AG. License MPL-2.0: Mozilla Public License version 2.0 . # BUGS See Github issue: # SEE ALSO **dlt-daemon(1)**, **dlt-convert(1)** dlt-daemon-2.18.6/doc/dlt-system.1.md000066400000000000000000000023001377520261000171650ustar00rootroot00000000000000% DLT-SYSTEM(1) # NAME **dlt-system** - DLT system logging process # SYNOPSIS **dlt-system** \[**-h**\] \[**-d**\] \[**-c** filename\] #DESCRIPTION The DLT system logging process is the central application, which logs system information from the platform. It provides the features filetransfer, syslog adapater, logging of any kind of files and procfilesystem logger. The individual features can be enabled and disabled in the configuration file. dlt-system loads by default the configuration file /etc/dlt-system.conf. ## OPTIONS -h : Display a short help text. -d : Daemonize, needed in System V init systems. -c : Load an alternative configuration file. By default the configuration file /etc/dlt.conf is loaded. # EXAMPLES Start DLT system with custom configuration: **dlt-system -c ~/my-configuration.cfg** # EXIT STATUS Non zero is returned in case of failure. # AUTHOR Alexander Wenzel (alexander.aw.wenzel (at) bmw (dot) de) # COPYRIGHT Copyright (C) 2015 BMW AG. License MPL-2.0: Mozilla Public License version 2.0 . # BUGS See Github issue: # SEE ALSO **dlt-system.conf(5)**, **dlt-daemon(1)** dlt-daemon-2.18.6/doc/dlt-system.conf.5.md000066400000000000000000000132011377520261000201170ustar00rootroot00000000000000% DLT-SYSTEM.CONF(5) # NAME **dlt-system.conf** - DLT system process configuration file # DESCRIPTION The DLT system logging process is the central application, which logs system information from the platform. It provides the features filetransfer, syslog adapater, logging of any kind of files and procfilesystem logger. The individual features can be enabled and disabled in the configuration file. The configuration file dlt-system.conf allows to configure the different runtime behaviour of dlt-system. The configuration file is loaded during startup of dlt-system. dlt-system loads by default the configuration file /etc/dlt-system.conf. An alternative configuration file can be loaded with the option -c. # GENERAL OPTIONS ## ApplicationId The application Id used for the dlt-system process. Default: SYS # SHELL OPTIONS ## ShellEnable Enable the Shell for command line injections. Be careful when you enable this feature. The user can send any kind of shell commands. The commands are executed with the rights of the dlt-system process. Dlt-system is started by default as user genivi. Default: 0 # SYSLOG ADAPTER OPTIONS ## SyslogEnable If this option is set to 1, the syslog adapter feature is enabled. Default: 0 ## SyslogContextId This value defines context id of the syslog adapter. Default: SYSL ## SyslogPort This value defines the UDP port opened for receiving log messages from syslog. Default: 47111 # SYSTEMD JOURNAL ADAPTER OPTIONS ## JournalEnable Enable the Systemd Journal Adapter. This feature is only available, when dlt is compiled with the option "WITH_SYSTEMD_JOURNAL". Dlt-system is started by default as user genivi, see dlt-system.service file. The user genivi must be added to one of the groups 'adm', 'wheel' or 'systemd-journal' to have access to all journal entries. Default: 0 ## JournalContextId The Context Id of the journal adapter. Default: JOUR ## JournalCurrentBoot Show only log entries of current boot and follow. If JournalCurrentBoot and JournalFollow are not set all persistent journal entries will be logged. Default: 1 ## JournalFollow Show only the last 10 entries and follow. Default: 0 ## JournalMapLogLevels Map journal log levels to DLT log levels. - 0 Emergency DLT_LOG_FATAL - 1 Alert DLT_LOG_FATAL - 2 Critical DLT_LOG_FATAL - 3 Error DLT_LOG_ERROR - 4 Warning DLT_LOG_WARN - 5 Notice DLT_LOG_INFO - 6 Informational DLT_LOG_INFO - 7 Debug DLT_LOG_DEBUG Default: 1 # FILETRANSFER OPTIONS ## FiletransferEnable Enable the Filetransfer feature. 0 = disabled, 1 = enabled Default: 0 ## FiletransferContextId The Context Id of the filetransfer. Default: FILE ## FiletransferTimeStartup Time in seconds after startup of dlt-system when first file is transfered. Default: 0 ## FiletransferTimeDelay Time in seconds to wait between deletion of transferred file and start of next file transfer. Default: 10 ## FiletransferTimeoutBetweenLogs Time in seconds to wait between two file transfer logs of a single file to DLT. Default: 10 ## FiletransferDirectory You can define multiple file transfer directories. Define the directory to watch, whether to compress the file with zlib and the zlib compression level. For parsing purposes, FiletransferCompressionLevel must be the last one of three values. ## FiletransferCompression See FiletransferDirectory option for explanation. Default: 0 ## FiletransferCompressionLevel See FiletransferDirectory option for explanation. Default: 5 # LOG FILES OPTIONS ## LogFileEnable If this option is set to 1, the log files feature is enabled. Default: 0 ## LogFileFilename This value sets the full filename path to the file, which should be logged. ## LogFileMode This value defines in which operation mode the file is logged. In mode 1 the file is only logged once when dlt-system is started. In mode 2 the file is logged regularly every time LogFileTimeDelay timer elapses. 0 = off, 1 = startup only, 2 = regular ## LogFileTimeDelay This value is used in mode 3 and defines the number of seconds, after which the defined file is logged. ## LogFileContextId This value defines the context id, which is used for logging the file. # LOG PROCESSES OPTIONS ## LogProcessesEnable Enable the logging of processes. 0 = disabled, 1 = enabled Default: 0 ## LogProcessesContextId This value defines the context id, which is used for logging processes files. Default: PROC ## LogProcessName This value defines the name of the process to be logged, as used in the file stat of each process. If the value is defined as *, all processes are logged. ## LogProcessFilename This value sets the relative filename path to the file, which should be logged. The path is relative to the procfilesystem folder of the process. ## LogProcessMode This value the defines in which operation mode this process file is logged. In mode 1 the file is only logged once when dlt-system is started. In mode 2 the file is logged regularly every time LogFileTimeDelay timer elapses. 0 = off, 1 = startup only, 2 = regular. Default: 0 ## LogProcessTimeDelay This value is used in mode 3 and defines the number of seconds, after which the defined procfilesystem file is logged. Default: 0 # AUTHOR Alexander Wenzel (alexander.aw.wenzel (at) bmw (dot) de) # COPYRIGHT Copyright (C) 2015 BMW AG. License MPL-2.0: Mozilla Public License version 2.0 . # BUGS See Github issue: # SEE ALSO **dlt-system(1)**, **dlt-daemon(1)** dlt-daemon-2.18.6/doc/dlt.conf.5.md000066400000000000000000000236631377520261000166120ustar00rootroot00000000000000% DLT.CONF(5) # NAME **dlt.conf** - DLT daemon configuration file # DESCRIPTION The DLT daemon is the central application which gathers logs and traces from different applications, stores them temporarily or permanently and transfers them to a DLT client application, which could run directly on the GENIVI system or more likely on some external tester device. The configuration file dlt.conf allows to configure the different runtime behaviour of the dlt-daemon. It is loaded during startup of dlt-daemon. # GENERAL OPTIONS ## Verbose Start daemon in debug mode, so that all internal debug information is printed out on the console. Default: Off ## Daemonize If set to 1 DLT daemon is started in background as daemon. This option is only needed in System V init systems. In systemd based startup systems the daemon is started by spawning own process. Default: 0 ## SendSerialHeader If set to 1 DLT daemon sends each DLT message to the client with prepanding the serial header "DLS0x01". Default: 0 ## SendContextRegistration If set to 1 each context which is registered from an application in the DLT daemon generates a message to inform the DLT client about the new context. Default: 1 ## SendMessageTime If set to 1 DLt daemon sends each second a DLT control message to the client with the current timestamp from the system. Default: 0 ## ECUId This value sets the ECU Id, which is sent with each DLT message. Default: ECU1 ## SharedMemorySize This value sets the size of the shared memory, which is used to exchange DLT messages between applications and daemon. This value is defined in bytes. If this value is changed the system must be rebooted to take effect. Default: 100000 ## PersistanceStoragePath This is the directory path, where the DLT daemon stores its runtime configuration. Runtime configuration includes stored log levels, trace status and changed logging mode. Default: /tmp ## LoggingMode The logging console for internal logging of dlt-daemon. 0 = log to stdout, 1 = log to syslog, 2 = log to file (see LoggingFilename), 3 = log to stderr Default: 0 ## LoggingLevel The internal log level, up to which logs are written. LOG_EMERG = 0, LOG_ALERT = 1, LOG_CRIT = 2, LOG_ERR = 3, LOG_WARNING = 4, LOG_NOTICE = 5, LOG_INFO = 6, LOG_DEBUG = 7 Default: 6 ## LoggingFilename If LoggingMode is set to 2 logs are written to the file path given here. Default: /tmp/dlt.log ## TimeOutOnSend Socket timeout in seconds for sending to clients. Default: 4 ## RingbufferMinSize The minimum size of the Ringbuffer, used for storing temporary DLT messages, until client is connected. Default: 500000 ## RingbufferMaxSize The max size of the Ringbuffer, used for storing temporary DLT messages, until client is connected. Default: 10000000 ## RingbufferStepSize The step size the Ringbuffer is increased, used for storing temporary DLT messages, until client is connected. Default: 500000 ## ContextLogLevel Initial log-level that is sent when an application registers. DLT_LOG_OFF = 0, DLT_LOG_FATAL = 1, DLT_LOG_ERROR = 2, DLT_LOG_WARN = 3, DLT_LOG_INFO = 4, DLT_LOG_DEBUG = 5, DLT_LOG_VERBOSE = 6 Default: 4 ## ContextTraceStatus Initial trace-status that is sent when an application registers. DLT_TRACE_STATUS_OFF = 0, DLT_TRACE_STATUS_ON = 1 Default: 0 ## ForceContextLogLevelAndTraceStatus Force log level and trace status of contexts to not exceed "ContextLogLevel" and "ContextTraceStatus". If set to 1 (ON) whenever a context registers or changes the log-level it has to be lower or equal to ContextLogLevel. Default: 0 ## InjectionMode If set to 0, the injection mode (see [here](./dlt_for_developers.md#DLT-Injection-Messages)) is disabled. Default: 1 # GATEWAY CONFIGURATION ## GatewayMode Enable Gateway mode Default: 0 ## GatewayConfigFile Read gateway configuration from another location Default: /etc/dlt_gateway.conf # Permission configuration DLT daemon runs with e.g. User: genivi_dlt Group: genivi_dlt DLT user applications run with different user and group than dlt-daemon but with supplimentory group: dlt_user_apps_group /dlt FIFO will be created by dlt-daemon with User: genivi_dlt Group: dlt_user_apps_group Permission: 620 so that only dlt-daemon can read and only processes in dlt_user_apps_group can write. /dltpipes will be created by dlt-daemon with User: genivi_dlt Group: genivi_dlt Permission: 3733 (i.e Sticky bit and SGID turned on) /dltpipes/dlt FIFO will be created by dlt application (user lib) with User: Group: genivi_dlt (inherited from dltpipes/ due to SGID) Permission: 620 Thus DLT user applications (and also or attackers) can create the dlt FIFO (for communication from dlt-daemon to DLT user application) under /dltpipes/. Since sticky bit is set the applications who creates the FIFO can only rename/delete it. Since SGID of /dltpipes is set the group of dlt FIFO will be genivi_dlt which enables dlt daemon to have write permission on all the dlt FIFO. One dlt user application cannot access dlt FIFO created by other dlt user application(if they run with different user). Owner group of daemon FIFO directory(Default: /tmp/dlt) (If not set, primary group of dlt-daemon process is used). Application should have write permission to this group for tracing into dlt. For this opton to work, dlt-daemon should have this group in it's supplementary group. ## DaemonFifoGroup Owner group of daemon FIFO directory (If not set, primary group of dlt-daemon process is used) Application should have write permission to this group for tracing into dlt For this opton to work, dlt-daemon should have this group in it's Supplementary group Default: group of dlt-daemon process (/tmp/dlt) # CONTROL APPLICATION OPTIONS ## ControlSocketPath Path to control socket. Default: /tmp/dlt-ctrl.sock # OFFLINE TRACE OPTIONS ## OfflineTraceDirectory Store DLT messages to local directory, if not set offline Trace is off. Default: /tmp ## OfflineTraceFileSize This value defines the max size of a offline trace file, if offline trace is enabled. This value is defined in bytes. If the files size of the current used log file is exceeded, a new log file is created. Default: 1000000 ## OfflineTraceMaxSize This value defines the max offline Trace memory size, if offline trace is enabled. This value is defined in bytes. If the overall offline trace size is excedded, the oldest log files are deleted, until a new trace file fits the overall offline trace max size. Default: 4000000 ## OfflineTraceFileNameTimestampBased Filename timestamp based or index based. 1 = timestamp based, 0 = index based Default: Function is disabled # LOCAL CONSOLE OUTPUT OPTIONS ## PrintASCII Prints each received DLT message from the application in ASCII to the local console. This option should only be anabled for debugging purpose. Default: Function is disabled ## PrintHex Prints each received DLT message from the application in ASCII to the local console. The payload is printed in Hex. This option should only be anabled for debugging purpose. Default: Function is disabled ## PrintHeadersOnly Prints each received DLT message from the application in ASCII to the local console. Only the header is printed. This option should only be anabled for debugging purpose. Default: Function is disabled # SERIAL CLIENT OPTIONS ## RS232DeviceName If this value is set to a serial device name, e.g. /dev/ttyS0, a serial port is used for logging to a client. Default: Serial port for logging is disabled ## RS232Baudrate The used serial baud rate, if serial loggin is enabled. The RS232DeviceName must be set to enable serial logging. Default: 115200 ## RS232SyncSerialHeader If serial logging is enabled, each received DLT message is checked to contain a serial header. If the DLT message contains no serial header, the message is ignored. Default: Function is disabled # TCP CLIENT OPTIONS ## TCPSyncSerialHeader Each received DLT message on a TCP connection is checked to contain a serial header. If the DLT message contains no serial header, the message is ignored. Default: Function is disabled # ECU SOFTWARE VERSION OPTIONS ## SendECUSoftwareVersion Periodically send ECU version info. 0 = disabled, 1 = enabled Default: Function is disabled # PathToECUSoftwareVersion Absolute path to file storing version information - if disabled the DLT version will be send. Default: Function is disabled. # TIMEZONE INFO OPTIONS # SendTimezone Periodically send timezone info. 0 = disabled, 1 = enabled Default: Function is disabled # OFFLINE LOGSTORAGE OPTIONS ## OfflineLogstorageMaxDevices Maximum devices to be used as offline logstorage devices. 0 = disabled, 1 .. DLT_OFFLINE_LOGSTORAGE_MAX_DEVICES Default: 0 (Function is disabled) ## OfflineLogstorageDirPath Path to store DLT offline log storage messages. Default: off ## OfflineLogstorageTimestamp Appends timestamp in log file name. 0 = disabled, 1 = enabled Default: 0 ## OfflineLogstorageDelimiter Appends delimiter in log file name, only punctuation characters allowed. Default: _ ## OfflineLogstorageMaxCounter Wrap around value for log file count in file name. Default: UINT_MAX ## OfflineLogstorageCacheSize Maximal used memory for log storage cache in KB. Default: 30000 KB ## UDPConnectionSetup Enable or disable UDP connection. 0 = disabled, 1 = enabled ## UDPMulticastIPAddress The address on which daemon multicasts the log messages ## UDPMulticastIPPort The Multicase IP port. Default: 3491 # AUTHOR Alexander Wenzel (alexander.aw.wenzel (at) bmw (dot) de) # COPYRIGHT Copyright (C) 2015 BMW AG. License MPL-2.0: Mozilla Public License version 2.0 . # BUGS See Github issue: # SEE ALSO **dlt-daemon(1)**, **dlt-system(1)** dlt-daemon-2.18.6/doc/dlt_build_options.md000066400000000000000000000077411377520261000204540ustar00rootroot00000000000000# DLT Build Options DLT is highly configurable. It allows you to choose between certain technologies or implementations and to turn on or off certain features. This way, you can adjust it to your needs and keep the build process as simple as possible. In order to change these options, you can modify these values with cmake, do the appropriate changes in CmakeList.txt or via the commandline for cmake Change a value with: cmake -D\=\, E.g. ```bash cmake .. -DWITH_SYSTEMD=ON -DWITH_SYSTEMD_JOURNAL=ON -DCMAKE_INSTALL_PREFIX=/usr ``` ## General Options Option | Value | Comment :--- | :--- | :--- BUILD\_SHARED\_LIBS | ON | Set to OFF to build static libraries DLT\_IPC |"FIFO" | Set to either "UNIX\_SOCKET" or "FIFO" WITH\_DLT\_USE\_IPv6 | ON | Set to ON for IPv6 support WITH\_DLT\_EXAMPLES | ON | Set to ON to build src/examples binaries DLT\_USER | genivi | Set user for process not run as root WITH\_CHECK\_CONFIG\_FILE | OFF | Set to ON to create a configure file of CheckIncludeFiles and CheckFunctionExists CMAKE\_INSTALL\_PREFIX | /usr/local CMAKE\_BUILD\_TYPE | RelWithDebInfo WITH\_UDP\_CONNECTION | OFF | Set to ON to enable dlt UDP multicast SUPPORT WITH\_DLT\_DAEMON\_VSOCK\_IPC | OFF | Set to ON for VSOCK support in daemon. WITH\_DLT\_LIB\_VSOCK\_IPC | OFF | Set to ON for VSOCK support in libdlt (DLT\_IPC is overridden in libdlt). DLT\_VSOCK\_PORT | 13490 | Port to use for VSOCK communication. ## Command Line Tool Options Option | Value | Comment :--- | :--- | :--- WITH\_DLT\_ADAPTOR | OFF | Set to ON to build src/adaptor binaries WITH\_DLT\_CONSOLE | ON | Set to ON to build src/console binaries WITH\_DLT\_SYSTEM | OFF | Set to ON to build src/system binaries WITH\_DLT\_LOGSTORAGE\_CTRL\_UDEV | OFF | PROTOTYPE! Set to ON to build WITH\_DLT\_KPI | OFF | Set to ON to build src/kpi binaries ## Linux OS Integration Options Option | Value | Comment :--- | :--- | :--- WITH\_SYSTEMD | OFF | Set to ON to run CMakeLists.txt in systemd WITH\_SYSTEMD\_WATCHDOG | OFF | Set to ON to use the systemd watchdog in dlt-daemon WITH\_SYSTEMD\_JOURNAL | OFF | Set to ON to use the systemd journal in dlt-system WITH\_DLT\_DBUS | OFF | Set to ON to build src/dbus binaries ## QNX OS Integration Options Option | Value | Comment :--- | :--- | :--- WITH\_DLT\_QNX\_SYSTEM | OFF | Set to ON to build QNX system binary dlt-qnx-system ## Documentation Options Option | Value | Comment :--- | :--- | :--- WITH\_DOC | OFF | Set to ON to build API documentation WITH\_MAN | OFF | Set to ON to build man pages ## Test Options Option | Value | Comment :--- | :--- | :--- WITH\_TESTSCRIPTS | OFF | Set to ON to run CMakeLists.txt in test scripts WITH\_DLT\_TESTS | ON | Set to ON to build src/test binaries WITH\_DLTTEST | OFF | Set to ON to build with modifications to test User-Daemon communication with corrupt messages WITH\_DLT\_UNIT\_TESTS | OFF | Set to ON to build unit test binaries WITH\_GPROF | OFF | Set \-pg to compile flag ## Experimental Features Options (Dragons ahead!) Option | Value | Comment :--- | :--- | :--- WITH\_DLT\_SHM\_ENABLE | OFF | Set to ON to enable shared memory as IPC WITH\_DLT\_CXX11\_EXT | OFF | Set to ON to build C++11 extensions WITH\_DLT\_COREDUMPHANDLER | OFF | Set to ON to build src/core\_dump\_handler binaries. dlt-daemon-2.18.6/doc/dlt_cdh.md000066400000000000000000000056711377520261000163400ustar00rootroot00000000000000# DLT Core Dump Handler Back to [README.md](../README.md) ## Overview When a program crash occurs on the system, the Core Dump Handler is triggered to extract relevant information from the core dump generated by the system. It stores this extracted information in the ECU's file system as Core Dump Handler Files. These files are transported via the [DLT Filetransfer](dlt_filetransfer.md) mechanism. The transferred information can be combined and integrated into the developer toolchain (gdb, Release SW, etc.). ![alt text](images/dlt_core_dump_handler.png "DLT CDH") ## Integration ### To build the core dump handler Add `-DWITH_DLT_COREDUMPHANDLER=ON -DTARGET_CPU_NAME={i686|x86_64}` options to cmake. The core dump handler code currently supports the i686 and x86\_64 architecture. ### Temporary activation as replacement for default crash handler until next reboot As *root* (not sudo) execute the following: `echo "|/usr/local/bin/dlt-cdh %t %p %s %e" > /proc/sys/kernel/core_pattern` NOTE: replace */usr/local/bin* with the path dlt-cdh has been installed to. This instructs the kernel to pipe a core dump as standard input to dlt-cdh together with the following parameters: - %t time of dump - %p PID of dumped process - %s number of signal causing dump - %e executable filename See `man core` for details. ### Persistent activation as replacement for default crash handler In */usr/lib/sysctl.d/* the file *50-coredump.conf* has to be created which is done automatically by `make install` Unfortunately - at least on Fedora systems - abrt has to be removed with `yum remove abrtd*` because it ruthlessly overwrites our change at every boot. The core dump handler can be activated then without reboot by running `sysctl -p /usr/lib/sysctl.d/50-coredump.conf` ### Configuration of [DLT Filetransfer](dlt_filetransfer.md) for usage with dlt-cdh Make sure the following is set in the "Filetransfer Manager" section of */etc/dlt-system.conf*: ``` ... FiletransferEnable = 1 ... FiletransferDirectory = /var/core ... ``` ### Generation of core dump When a crash happens the kernel invokes dlt-cdh and passes it the core dump as standard input. dlt-cdh does the following tasks: - check if enough disk space available - create target directories if not existing: - /var/core - /var/core\_tmp - /tmp/.core\_locks - clean /var/core\_tmp - retrieve context data mainly from /proc fs of the crashed process to a temporary context file in text format - initialise core dump - read ELF headers and notes to temporary core dump output file - move context file and core dump to /var/core - create id which identifies the crash After the files have been moved to /var/core the [DLT Filetransfer](dlt_filetransfer.md) mechanism ensures that they are sent to connected clients. ## AUTHOR Lutz Helwing ## COPYRIGHT Copyright (C) 2011 - 2015 BMW AG. License MPL-2.0: Mozilla Public License version 2.0 . dlt-daemon-2.18.6/doc/dlt_demo_setup.md000066400000000000000000000137171377520261000177460ustar00rootroot00000000000000# DLT Demo Setup Back to [README.md](../README.md) In this document you will run an instance of dlt-daemon. It silently waits to collect and buffer log messages that are produced by one or multiple DLT users. You will run one of those DLT users and make it produce log messages that are sent to the daemon. Eventually, you launch a client that collects and displays these messages. *Note: We assume that you installed DLT (i.e. executed the [two optional steps after build](../README.md#build-and-install)). Otherwise you have to take care of the executable paths and explicitly state the library path.* ## Run the DLT Daemon The DLT daemon is highly configurable but for this case the default settings are okay. Don't be put off by warning messages: ```bash $ dlt-daemon [1886222.668006]~DLT~32290~NOTICE ~Starting DLT Daemon; DLT Package Version: 2.18.0 STABLE, Package Revision: v2.18.1, build on Dec 8 2020 11:11:51 -SYSTEMD -SYSTEMD_WATCHDOG -TEST -SHM [1886222.668651]~DLT~32290~INFO ~FIFO size: 65536 [1886222.668764]~DLT~32290~INFO ~Activate connection type: 5 [1886222.668897]~DLT~32290~INFO ~dlt_daemon_socket_open: Socket created [1886222.669047]~DLT~32290~INFO ~dlt_daemon_socket_open: Listening on ip 0.0.0.0 and port: 3490 [1886222.669159]~DLT~32290~INFO ~dlt_daemon_socket_open: Socket send queue size: 16384 [1886222.669355]~DLT~32290~INFO ~Activate connection type: 1 [1886222.669509]~DLT~32290~INFO ~Activate connection type: 9 [1886222.669644]~DLT~32290~INFO ~Ringbuffer configuration: 500000/10000000/500000 [1886222.669924]~DLT~32290~NOTICE ~Failed to open ECU Software version file. [1886222.670034]~DLT~32290~INFO ~Activate connection type: 6 [1886222.670188]~DLT~32290~INFO ~Switched to buffer state for socket connections. [1886222.670365]~DLT~32290~WARNING ~dlt_daemon_applications_load: cannot open file /tmp/dlt-runtime-application.cfg: No such file or directory ``` The daemon opened a named pipe from which it is ready to read and buffer log messages. It also accepts connections on TCP port 3490 by clients to collect the messages. ## Produce Log Messages A simulated ECU - a DLT user - will now use the DLT library to create log messages and send them through the named pipe for the daemon to collect. Open a second terminal and run ```bash $ dlt-example-user -n 5 -l 3 "This is my first log message" Send 0 This is my first log message Log level changed of context TEST, LogLevel=4, TraceState=0 Log level changed of context TS1, LogLevel=4, TraceState=0 Log level changed of context TS2, LogLevel=4, TraceState=0 Send 1 This is my first log message Client disconnected! Send 2 This is my first log message Send 3 This is my first log message Send 4 This is my first log message ``` This will send 5 (```-n 5```) identical log messages of Log-Level WARNING ```(-l 3)``` containing a string payload. ## Read logs The DLT daemon now has the messages in its buffer and will keep them there until they are fetched. A mighty tool for receiving and processing log messages is the [DLT-Viewer](https://github.com/GENIVI/dlt-viewer), which also provides a graphical UI. For now, a simple command line client is absolutely sufficient: ```bash $ dlt-receive -a localhost 2020/04/30 12:27:14.976731 17134987 000 ECU1 DA1- DC1- control response N 1 [service(3842), ok, 02 00 00 00 00] 2020/04/30 12:27:14.976779 17067139 000 ECU1 DA1- DC1- control response N 1 [service(3842), ok, 01 00 00 00 00] 2020/04/30 12:27:14.976787 17067139 004 ECU1 DLTD INTM log info V 1 [Client connection #7 closed. Total Clients : 0] 2020/04/30 12:27:14.976794 17104625 005 ECU1 DLTD INTM log info V 1 [ApplicationID 'LOG' registered for PID 5241, Description=Test Application for Logging] 2020/04/30 12:27:14.976802 17104625 000 ECU1 DA1- DC1- control response N 1 [get_log_info, 07, 01 00 4c 4f 47 00 01 00 54 45 53 54 ff ff 18 00 54 65 73 74 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 4c 6f 67 67 69 6e 67 1c 00 54 65 73 74 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 66 6f 72 20 4c 6f 67 67 69 6e 67 72 65 6d 6f] 2020/04/30 12:27:14.976823 17104625 000 ECU1 DA1- DC1- control response N 1 [get_log_info, 07, 01 00 4c 4f 47 00 01 00 54 53 31 00 ff ff 1b 00 54 65 73 74 20 43 6f 6e 74 65 78 74 31 20 66 6f 72 20 69 6e 6a 65 63 74 69 6f 6e 1c 00 54 65 73 74 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 66 6f 72 20 4c 6f 67 67 69 6e 67 72 65 6d 6f] 2020/04/30 12:27:14.976844 17104625 000 ECU1 DA1- DC1- control response N 1 [get_log_info, 07, 01 00 4c 4f 47 00 01 00 54 53 32 00 ff ff 1b 00 54 65 73 74 20 43 6f 6e 74 65 78 74 32 20 66 6f 72 20 69 6e 6a 65 63 74 69 6f 6e 1c 00 54 65 73 74 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 66 6f 72 20 4c 6f 67 67 69 6e 67 72 65 6d 6f] 2020/04/30 12:27:14.976866 17104588 000 ECU1 LOG- TEST log warn V 2 [0 This is my first log message] 2020/04/30 12:27:14.976872 17109592 001 ECU1 LOG- TEST log warn V 2 [1 This is my first log message] 2020/04/30 12:27:14.976880 17114599 002 ECU1 LOG- TEST log warn V 2 [2 This is my first log message] 2020/04/30 12:27:14.976884 17119607 003 ECU1 LOG- TEST log warn V 2 [3 This is my first log message] 2020/04/30 12:27:14.976889 17124611 004 ECU1 LOG- TEST log warn V 2 [4 This is my first log message] 2020/04/30 12:27:14.976894 17134988 006 ECU1 DLTD INTM log info V 1 [New client connection #8 established, Total Clients : 1] 2020/04/30 12:27:15.442016 17139641 000 ECU1 DA1- DC1- control response N 1 [service(3841), ok, 4c 4f 47 00 54 45 53 54 72 65 6d 6f] 2020/04/30 12:27:15.442044 17139642 007 ECU1 DLTD INTM log info V 1 [Unregistered ApID 'LOG'] ``` The client connects to the default port 3490 of localhost to collect all messages and interprets the payload as ASCII text (```-a```). You can see lots of additional messages. These are control messages to control the flow between client and daemon. You will learn about them later. For now, you have set up a basic example have seen DLT in action. You can now experiment with this setup. What happens if you start the DLT user first and (while the DLT user is still running) the daemon?dlt-daemon-2.18.6/doc/dlt_design_specification.md000066400000000000000000001176201377520261000217510ustar00rootroot00000000000000*** SPDX license identifier: MPL-2.0 Copyright (C) 2011-2015, BMW AG This file is part of GENIVI Project DLT - Diagnostic Log and Trace. This Source Code Form is subject to the terms of the Mozilla Public License (MPL), v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/ For further information see http://www.genivi.org/ *** # DLT Design Specification Alexander Wenzel 0.0.1, 2012/10/10: Initial version Luong Hong Duy Khanh 0.0.2, 2020/04/10: Update and convert to markdown format ![genivilogo](images/genivilogo.png "GENIVI") ## Purpose This document specifies the usage of the DLT daemon v2 and also the internal functionality of the DLT daemon v2. The DLT daemon v2 is a complete rework of the DLT daemon v1, which is part of the GENIVI 1.0 release. The DLT daemon component is based on the [AUTOSAR 4.0 standard DLT](https://www.autosar.org/fileadmin/user_upload/standards/classic/4-0/AUTOSAR_SWS_DiagnosticLogAndTrace.pdf) (the current latest version is [R19-11](https://www.autosar.org/fileadmin/user_upload/standards/classic/19-11/AUTOSAR_SWS_DiagnosticLogAndTrace.pdf)). ## Overview ![dlt_overview](images/dlt_overview.png "DLT OVERVIEW") The DLT daemon is the central component in GENIVI, where logs and traces are gathered from the DLT user and different applications, stored optionally temporarily or permanently in a file in the ECU. The DLT daemon forwards all logs and traces to a connected DLT client application, which can run directly on the GENIVI system or more likely on an external tester device. The DLT client can send control messages to the daemon, e.g. to set individual log levels of applications and contexts or get the list of applications and contexts registered in the DLT daemon. In DLT, a log message contains debug information like state changes or value changes and a trace message contains information, which has passed via the Virtual Function Bus (VFB). ## Architecture ### DLT daemon The DLT daemon is the central component between the DLT clients and one or more applications using the DLT user library. #### Overview The DLT daemon is a standalone application which is running as the center of management and this is implemented as a single-thread process. The DLT daemon communicates with the DLT clients over TCP/IP connections or over a serial line with the applications using the DLT user library over named pipes (FIFOs), UNIX sockets or VSOCK sockets based on compile time configuration. The message format is specified in the DLT AUTOSAR Standard. More details concerning the exchanged user messages and their content can be found in [chapter 6](https://www.autosar.org/fileadmin/user_upload/standards/adaptive/19-11/AUTOSAR_SWS_LogAndTrace.pdf#page=10). The main time, the DLT daemon executes the main loop, in which file and socket descriptors are watched (via poll()). If a message is received, the DLT daemon reacts. Here is a rough schematic, how the DLT daemon is structured: ![dlt_architecture](images/dlt_architecture.png "DLT ARCHITECTURE") #### Initialization During initialization of the DLT daemon, the following steps occur: - Option handling. - Option file parsed. The most important configuration files is dlt.conf - Initialization of logging facility for the DLT daemon application. The DLT daemon application by itself prints to screen, if not in daemon mode. In daemon mode, it uses the syslog daemon for log messages of the DLT daemon application. - Then the daemon enters initialization phase 1: - Enter daemon mode, if started as daemon - Initialize output of messages to the local file - Parse filter file, if specified; then set filters for file storage - Setup signal handler - Open DLT output file, if specified - After phase 1, the daemon initializes the connection handling: - Delete, create and open its own named FIFO /tmp/dlt or UNIX_SOCKET - If VSOCK support is enabled in the daemon, open, bind and listen to VSOCK socket for incoming application connections. - Open, bind and listen to TCP socket for incoming connections - Setup and open serial device, if specified - Then the daemon enters initialization phase 2: - Initialize daemon data structures - Initialize ring buffer for client connection - Check if a runtime configuration exists, if yes load all stored application and context ids, as well as all log levels and trace statuses. Store this information to a local array. - Prepare the main loop - Initialize receiver objects for socket and serial connection - Initialize binary semaphore - Create and start thread(s) for timing messages, sending of these messages is disabled at default. - After phase 2: - Initialize the offline logstorage, if the directory path is specified. - Prepare timer for system watchdog, if specified. - Prepare timer to check incoming events. - Prepare timer to send ECU version, if specified. - Initialize the gateway mode, if specified, then prepare the timer for gateway. - Now, the initialization is finished, and the DLT daemon enters the main loop. #### Main loop In the main loop, the following things occur: - Wait for event(s) on the incoming named pipe or socket, the TCP connections (the one connection for new connections, and all TCP connections from clients), and possibly on the serial device, via poll() call. - Distinguish from which socket/file descriptor the connection came, and handle them: - Event from TCP server socket (New DLT client to DLT daemon): - Create a new TCP connection - If the newly created connection is the first TCP connection, send all log messages already stored in ring buffer to DLT client. - Event from incoming named pipe (FIFO) or UNIX socket and, if enabled, VSOCK socket (from DLT user library to DLT daemon): - Use dlt receiver to read data - As long as there are DLT messages available in received data, the handle user messages type can be found at src/shared/dlt_user_shared_cfg.h - Move rest of data in front of buffer for next read attempt - Event from serial device (DLT client to DLT daemon via serial device) - Use other dlt receiver to read data - As long as there are DLT messages available in received data: - Check for DLT message type control request, and if yes process the request - Move rest of data in front of buffer for next read attempt - Event from TCP socket (DLT client to DLT daemon via TCP connection) - Use other dlt receiver to read data, and check for lost connection - As long as there are DLT messages available in received data: - Check for DLT message type control request, and if yes process the request - Move rest of data in front of buffer for next read attempt How the received user messages and control messages are handled, is described in the Appendix. #### Clean up Before exiting from DLT daemon, the following cleanup procedures occur: - Local cleanup - Destroy the connection list - Free the used memory by the organising structure of file - Uninitialise the offline trace - Free the used memory by the organising structure of file - Delete existing named pipes (FIFOs) or UNIX_SOCKET - Cleanup dlt logstorage - Close UDP connection, if specified - De-initialize the gateway, if specified. All internal data will be freed - De-Initialise the dlt daemon structure - Clear all contexts in internal context management of specific ecu - Clear all applications in internal application management of specific ecu - Release and free memory used by dynamic ringbuffer Now, the cleanup is finished, and the DLT daemon is terminated. ### DLT user library #### Overview The DLT user library is linked to each application that wants to use DLT. It encapsulates the communication with the DLT daemon and provides two interfaces: the DLT user macro interface and the DLT user functional interface. All macros from the DLT user macro interface are mapped to functions in the DLT user functional interface. The DLT user library has one additional thread, called housekeeper thread, responsible for receiving and sending messages from/to the DLT daemon. The DLT user library can be written/read from multiple threads (the threads of applications which are using DLT APIs, and DLT housekeeper thread which will send log messages to the daemon). To prevent the concurrent access to the DLT buffer, parts of functions accessible by the user interface are protected by a semaphore as well as parts of the function which is called within the thread. #### Initialization During initialization, the following things are done: - Setup internal structure including Application ID and Description (textual) of application - Get value from environment variable "DLT_LOCAL_PRINT_MODE". This variable can be used to control the local printing mode of the DLT user library. If enabled (either via "AUTOMATIC" or via "FORCE_ON"), all messages, which are prepared to be sent to the DLT daemon will also be print out locally (as ASCII string). If the environment variable is set, this value overrides the local print mode which can be set with the API function dlt_enable_local_print() or with dlt_disable_local_print() from within the application using the DLT user library. The following values are allowed: - "AUTOMATIC": Local printing is enabled, if NO DLT daemon is running. - "FORCE_ON": Local printing is always enabled. - "FORCE_OFF": Local printing is always disabled. - Clear internal context array (dynamically growing in step size DLT_USER_CONTEXT_ALLOC_SIZE, typically 500). The internal context array is NOT be kept sorted, as the DLT daemon stores for each registered context the offset position within this array, and sends this offset position for faster access of a context within this internal context array. The internal context array contains one entry for each context: - Context ID - Log level for this context - Trace status for this context - Initialize table (dynamically growing in step-size 1) with function pointers for callback functions used for injection messages - Description (textual) of context - Initialize ringbuffer for local storage of not sent messages - Setup signal handler and atexit handler - Ignore all pipe signals - Create and open own named pipe (with the name /tmp/dlt, where is the process id of the application using the DLT user library) or UNIX/VSOCK socket IPC to the DLT daemon - Open local file for storage, if specified - Initialize receiver object - Start housekeeper thread for receiving messages #### De-Initialization During de-initialization, the following things are done: - De-register application (and all contexts belonging to this application) from DLT daemon - Stop housekeeper thread - Close and remove own named pipe to the DLT daemon, if FIFO is used - Close and remove Unix socket if socket IPC is used - De-Initialize receiver object - De-Initialize ringbuffer #### Register application and context During register of the application, the following things occur: - Auto-initialize DLT user library, if necessary - Store application id to internal structure - Store application description to internal structure - Send message DLT_REGISTER_APPLICATION to DLT daemon During register of a context of the application, the following things occur: - Auto-initialize DLT user library, if necessary - Check, if context was already registered, if not, dynamically increment if required, the context array in step size DLT_USER_CONTEXT_ALLOC_SIZE, typically 500. Then store one entry for the new context to internal context array. - Send message DLT_REGISTER_CONTEXT to DLT daemon #### Unregister context and application During unregister of context, the following things occur: - Delete context from internal structures - Send message DLT_UNREGISTER_CONTEXT to DLT daemon During unregister of application, the following things occur: - Delete application from internal structures - Send message DLT_UNREGISTER_APPLICATION to DLT daemon #### Handling of messages received from DLT daemon During housekeeper thread within the DLT user library checks for newly received messages from the DLT daemon, and handles them in the following way: - **DLT_USER_MESSAGE_LOG_LEVEL** - Store received log level and trace status for the received context to the context array. - **DLT_USER_MESSAGE_INJECTION** - Check all registered callbacks for this context: - Compare service id of registered callback with received service id, if they matches: - Call registered callback function. #### Overflow handling If the named pipe/socket of the DLT daemon is full, an overflow flag is set and the message stored in a ring buffer. The next time, a message could be sent to the DLT daemon, an overflow message is sent first, then the contents of the ring buffer. If sending of this message was possible, the overflow flag is reset. #### Send log message During sending of a log message, the following things occur: - Auto-initialize DLT user library, if necessary - Initialize DLT log structure - Store log level of log message in DLT log structure - Check if log level is smaller than or equal than the stored log level of the context, under which the message should be sent. If yes continue, else don't send this log message. This is a kind of filtering on the DLT user library side. - In non-verbose mode, insert message id - Add values (int, string, raw, â€Ļ) to DLT log structure: - Set argument type (only in verbose mode) - Copy content of argument to message - Set length information of argument - Set number of arguments and total length of message - Create new message with the help of the DLT log structure and handle this message: - Initialize new message - Add headers (standard header, extended header, storage header, ...) to this message - If logging to a file is enabled, write the log message to file - Print message locally, if requested by environment variable - Check if connection to DLT daemon was lost and try to reattach to daemon. - Check for overflow flag and try to send overflow message. - Try to send message to DLT daemon, and check for return values. This can be: - data could not be written - handle not open or pipe/socket error - other error condition - no error, all right - If sending failed, put this message in the ring buffer for later sending. - Handle these error conditions. #### Send network trace message During sending of a network trace message, the following things occur: - Auto-initialize DLT user library, if necessary - Check for trace status of network trace message to be sent. - If Trace status equals on: - Initialize DLT log structure - Set trace status in DLT log structure to network trace type of message - Copy length of network message header to DLT log structure - Copy data of network message header to DLT log structure - Copy length of network trace payload to DLT log structure - Copy data of network trace payload to DLT log structure - Create new message with the help of the DLT log structure and handle this message #### Register callback function for injection message During registration of a callback function for an injection message, then following steps are executed: - Check if the environment variable DLT\_DISABLE\_INJECTION\_MSG\_AT\_USER is set. - If yes: - libdlt will ignore all data/messages from dlt-daemon, including: loglevel change, custom injection messages ... - If no (default): - libdlt will handle all data/messages from dlt-daemon as normal. - For the specified context, check if service id is already in the table of the registered callbacks (this table is dynamically growing in steps of one entry). - If yes: - Stored service id is set to service id to be registered - Stored callback function pointer is set to callback function pointer to be registered - If no: - Increase the number of callbacks for this context - Store service id in callback table - Store function pointer in callback table #### Android: Thread termination On Android, `pthread_cancel` is not available in bionic. So current implementation uses *SIGUSR1* and `pthread_kill` to terminate housekeeper thread. Due to this, application which is linked to DLT library should not define *SIGUSR1*. ### Communication between DLT daemon and DLT user library The communication mechanism (IPC) used between DLT daemon and DLT user library are named pipes (FIFOs), UNIX sockets or VSOCK sockets, based on compile time configuration). During the startup of the DLT daemon, the DLT daemon creates and opens the IPC (FIFOs or UNIX_SOCKET) on the configured path called /tmp/dlt. If a DLT user application using the DLT user library wants to send log messages to the DLT daemon, this IPC is used. During the startup of the DLT user application using the DLT user library, it creates and opens the same IPC type of DLT daemon. If the DLT daemon wants to send the control messages to the DLT user application, this IPC is used. - When the FIFOs IPC is used, a named pipe called /tmp/dltpipes/dlt, where is the process id of the DLT user application. Each DLT user application creates its own named pipe to communicate with the DLT daemon. - When the UNIX_SOCKETS IPC is used, the DLT user application just needs to connect to the opened socket port of DLT daemon. All DLT user applications use the same UNIX_SOCKETS port to communicate with the DLT daemon. The exchanged messages are described in the [chapter 7.1](https://www.autosar.org/fileadmin/user_upload/standards/adaptive/19-11/AUTOSAR_SWS_LogAndTrace.pdf#page=12). In a system with a single process tree where PIDs are unique, the FIFOs IPC shall work well. In a system with the multiple nested process trees, each process tree maintains an entirely isolated set of processes. Because of that, PIDs are not unique anymore and a DLT User application running in the parent PID namespace might have the same PID as another DLT User application running in the child PID namespace. Since a DLT User application creates its own FIFO based on its PID (getpid()), the DLT Daemon has to deal with multiple applications registering itself with the same PID, which is impossible. To solve this problem, the UNIX_SOCKETS based communication is used. The UNIX_SOCKETS IPC is also supported in the Non-linux platforms (eg: QNX). If the daemon is built with VSOCK socket support, it can also receive log messages from processes running in virtual machines. The communication mechanism between the daemon and the DLT user library on the host is still FIFOs or UNIX sockets. But the DLT user library for the system running in the virtual machine can be built to use VSOCK sockets for sending log messages to the daemon. See "man vsock" for more information about VSOCK sockets. This is an alternative to using a [multinode](dlt_multinode.md) setup for receiving DLT log messages from processes in a virtualized environment. No passive daemon(s) are required and it works without having a network configured between the guest and the host. ### Place of message creation The following table shows, where the certain types of DLT messages are created. The message types are described in more detail in the AUTOSAR Specification for Diagnostic Log and Trace. | Type of message | DLT client | DLT daemon | DLT library | | ---------------- | :--------: | :--------: | :---------: | | Control request | X | X | | | Control response | | X | | Log message | | | X | | Trace message | | | X | This table shows, that: - DLT messages of message type control request are created in the DLT client, and then sent to the DLT daemon. - DLT messages of message type control response (to a control request) are created in the DLT daemon, and then sent to the DLT client. - DLT messages of type log and of type trace are created in the DLT user library, then passed (via the named pipe of the DLT daemon) to the DLT daemon, which forwards them to the connected DLT clients. ### Message flow The following figure shows the overall flow of messages. ![dlt_message_flow](images/dlt_message_flow.png "DLT MESSAGE FLOW") ## Appendix ### Messages exchanged between DLT daemon and DLT user library There are several user messages (each has its own message identifier DLT_USER_MESSAGE_*) which will are exchanged between DLT daemon and DLT user library, and will be described in the following sub-chapters. From DLT user library to DLT daemon: - **DLT_USER_MESSAGE_REGISTER_APPLICATION** - **DLT_USER_MESSAGE_UNREGISTER_APPLICATION** - **DLT_USER_MESSAGE_REGISTER_CONTEXT** - **DLT_USER_MESSAGE_UNREGISTER_CONTEXT** - **DLT_USER_MESSAGE_LOG** - **DLT_USER_MESSAGE_OVERFLOW** - **DLT_USER_MESSAGE_APP_LL_TS** From DLT daemon to DLT user library: - **DLT_USER_MESSAGE_LOG_LEVEL** - **DLT_USER_MESSAGE_INJECTION** Each of the following messages has a message header with the following information: - Pattern: DUH0x01 - Message identifier #### User Message: Register Application This message is sent by the DLT user library once per application to register the application to the DLT daemon. It contains the following information: - The application id of the application to be registered - The process id of the process using the DLT user library. This information is required, if the DLT daemon wants to send something to the DLT user library. - The length of the following description. - The application description. #### User Message: Unregister Application This message is sent by the DLT user library once per application to unregister the application from the DLT daemon. It contains the following information: - The application id of the application to be unregistered - The process id of the process using the DLT user library. #### User Message: Register Context This message is sent by the DLT user library once for each context which should be registered to the DLT daemon. It contains the following information: - The application id of the application to be registered - The context id of the application to be registered - Each created context is stored with its associated information in a dynamically growing array in the DLT user library. The index in this array is sent. - The process id of the process using the DLT user library. This information is required, if the DLT daemon wants to send something to the DLT user library. - The initial log level of the context - The initial trace status of the context - The length of the following description. - The context description. #### User Message: Unregister Context This message is sent by the DLT user library once for each context which should be unregistered from the DLT daemon. It contains the following information: - The application id of the application to be unregistered - The context id of the application to be unregistered - The process id of the process using the DLT user library. #### User Message: Log This is the standard log/trace message send by the DLT user library to the DLT daemon. It contains the following information: - A standard DLT message header as specified in the AUTOSAR R4.0 DLT standard. - An extended DLT message header as specified in the AUTOSAR R4.0 DLT standard. - The payload of the DLT message #### User Message: Overflow This message is sent from the DLT user library to the DLT daemon, if there was an overflow during writing to the DLT daemon named pipe or socket IPC. It contains no further information. #### User Message: Application Log Level and Trace Status This message is sent from the DLT user library to the DLT daemon, when the overall Log Level and Trace Status for the whole DLT application should be set from within the DLT application. It contains the following information: - The application id - The Log Level to be set for the whole application - The Trace Status to be set for the whole application #### User Message: Log Level If the log level or trace status is changed, or initialized, this message is sent from the DLT daemon to the DLT user library to store the current log level and trace status for filtering in the DLT user library. It contains the following information: - The new set log level - New set trace status. - Each created context is stored with its associated information in a dynamically growing array in the DLT user library. The index in this array is sent. #### User Message: Injection This message is sent from the DLT daemon to the DLT user library, if an injection message was received by the DLT daemon from a DLT client. Via the context, the appropriate application and its named pipe can be identified. The injection message is then passed to this named pipe. It contains the following information: - Each created context is stored with its associated information in a dynamically growing array in the DLT user library. The index in this array is sent. - Service ID of the injection message - Length of the following injection message - The contents of the injection message ### DLT daemon: User message handling Following things occur for the received DLT user messages: - **DLT_USER_MESSAGE_REGISTER_APPLICATION** - Add all information about application to a local application array (dynamically growing in a predefined step size (DLT_DAEMON_APPL_ALLOC_SIZE, typically 500)). The array is always being kept sorted (via qsort()). Finding entries in this array is done by a binary search (via bsearch()). - Open named pipe (or Unix socket IPC if specified) to DLT application using the DLT user library with process id . The name of the pipe (or Unix socket IPC) is /tmp/dlt - **DLT_USER_MESSAGE_UNREGISTER_APPLICATION** - Remove all information about this application from local application array, and remove all information of all contexts belonging to this application from local context array. The arrays are always being kept sorted, without empty entries in between. Dynamically shrinking of this array is NOT implemented. - **DLT_USER_MESSAGE_REGISTER_CONTEXT** - Add all information about context to local context array (dynamically growing in a predefined step size (DLT_DAEMON_CONTEXT_ALLOC_SIZE, typically 1000)). The array is always being kept sorted (via qsort()). Finding entries in this array is done by a binary search (via bsearch()). - Send log level and trace status to DLT user library for this context. Therefore, the DLT_USER_MESSAGE_LOG_LEVEL is used. - **DLT_USER_MESSAGE_UNREGISTER_CONTEXT** - Remove all information about this context from local context array. The array is always being kept sorted, without empty entries in between. Dynamically shrinking of this array is NOT implemented. - **DLT_USER_MESSAGE_OVERFLOW** - Set internal flag for overflow. - Create and send DLT control message response overflow to all connected TCP connections, and optionally to serial device, if connected. If the message was sent, reset the internal flag for overflow. - **DLT_USER_MESSAGE_LOG** - Overwrite ECU id, if requested - Set storage header - Check for filters of message, if no filter is set, or filter is matching: - Possibly display message as specified in the options. - Whole message display in hex - Whole message display in ASCII - Show message headers only - Store message to output file - Set serial header in front of message, if specified. - Create and try to send DLT message to all DLT clients connected via TCP connection, and optionally via serial device. - If the message could not be sent, store the message to a local ring buffer. The ring buffer internally uses a variable length for the buffered elements, and therefore uses the memory available for the buffer the best way possible. If the buffer is full, the oldest messages are silently discarded, until there is enough space for the message to be stored in the ring buffer. - **DLT_USER_MESSAGE_APP_LL_TS** - For all contexts belonging to the specified application: - Set specified log level - Set specified trace status - Send specified log level and trace status to DLT client library ### DLT daemon: Control message handling If the DLT daemon receives a control message request from a DLT client, it handles it in the following way. First the service id of the message is detected, and if it is no injection message, the following things occur: - DLT_SERVICE_ID_SET_LOG_LEVEL - Check if received log level is other then already set log level. If yes: - Store new log level to local array. - Send new log level to DLT user library for this context. Therefore, the DLT_USER_MESSAGE_LOG_LEVEL is used. Note that the DLT would take the log level of Logstorage as the highest priority. So even if log level is changed from client, it will be overwritten by Logstorage definition. - Send DLT control response to DLT client, with status of operation. - DLT_SERVICE_ID_SET_TRACE_STATUS - Check if received trace status is other then already set trace status. If yes: - Store new trace status to local array. - Send new trace status to DLT user library for this context. Therefore, the DLT_USER_MESSAGE_LOG_LEVEL is used. - Send DLT control response to DLT client, with status of operation. - DLT_SERVICE_ID_GET_LOG_INFO - Create answer message for DLT control response. All kinds of requests are supported: - Application/Context: - All applications and all contexts - One application and all of its contexts - One application with one context. - Request type (as specified in the AUTOSAR DLT Standard, 1 and 2 are not specified): - 3: Application ID, Context ID - 4: Application ID, Context ID, Log Level - 5: Application ID, Context ID, Trace Status - 6: Application ID, Context ID, Log Level, Trace Status - 7: Application ID, Context ID, Log Level, Trace Status, Description - Answer is of the corresponding type 3-7, or of type 8 (no matching context ids found), or of type 2 (error). - Send DLT control response answer to DLT client. - DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL - Send DLT control response with default log level to DLT client. - DLT_SERVICE_ID_STORE_CONFIG - Store configuration files with currently registered application ids and context ids as well as currently set log levels and trace statuses to configuration files. If these files exists, they will be read in when the DLT daemon is started next time. - Send DLT control response to DLT client. - DLT_SERVICE_ID_RESET_TO_FACTORY_DEFAULT - Delete the stored configuration files, if they exists. - Set default log level and trace status to initial values, and inform all applications using the default log level and trace status about the new defaults. - Send DLT control response to DLT client. - DLT_SERVICE_ID_SET_COM_INTERFACE_STATUS - Send DLT control response "Not supported" to DLT client - DLT_SERVICE_ID_SET_COM_INTERFACE_MAX_BANDWIDTH - Send DLT control response "Not supported" to DLT client - DLT_SERVICE_ID_SET_VERBOSE_MODE - Send DLT control response "Not supported" to DLT client - DLT_SERVICE_ID_SET_MESSAGE_FILTERING - Send DLT control response "Not supported" to DLT client - DLT_SERVICE_ID_SET_TIMING_PACKETS - Set flag to start/stop sending of timing messages in thread. - Send DLT control response to DLT client. - DLT_SERVICE_ID_GET_LOCAL_TIME - Send DLT control response with local time to DLT client. - DLT_SERVICE_ID_USE_ECU_ID - Send DLT control response "Not supported" to DLT client - DLT_SERVICE_ID_USE_SESSION_ID - Send DLT control response "Not supported" to DLT client - DLT_SERVICE_ID_USE_TIMESTAMP - Send DLT control response "Not supported" to DLT client - DLT_SERVICE_ID_USE_EXTENDED_HEADER - Send DLT control response "Not supported" to DLT client - DLT_SERVICE_ID_SET_DEFAULT_LOG_LEVEL - Check if received default log level is other than already stored default log level. If yes: - Store new default log level to internal structure. - Send a DLT_USER_MESSAGE_LOG_LEVEL to all DLT clients containing the new default log level, which uses a context which is set to default log level. - Send DLT control response to DLT client, with status of operation. - DLT_SERVICE_ID_SET_DEFAULT_TRACE_STATUS - Check if received default trace status is other than already stored default trace status. If yes: - Store new default trace status to internal structure. - Send a DLT_USER_MESSAGE_LOG_LEVEL to all DLT clients containing the new default trace status, which uses a context which is set to default trace status. - Send DLT control response to DLT client, with status of operation. - DLT_SERVICE_ID_GET_SOFTWARE_VERSION - Send DLT control response containing a software version string to DLT Client. - The software version string contains: - the package version of the package dltv2, e.g. "2.0.0" - the package status of the package dltv2, e.g. "alpha, beta, final" - the overall subversion revision number for the package dltv2, e.g. "2300" - DLT_SERVICE_ID_MESSAGE_BUFFER_OVERFLOW - Try to send DLT control response containing the status of the internal flag for overflow. If the message could be send, reset the internal flag for overflow. For handling of the injection message, the following steps occur: - Create new user message DLT_USER_MESSAGE_INJECTION from received DLT control request message, and send this user message to the DLT application using the DLT user library. ### Mapping to files Here is a description, how the whole project is structured and which files exists. The following table shows a top level view of the available Git repositories: | Directory | Description | | --------- | ----------- | | dlt | DLT Daemon and Library implementation; command line utilities, examples and test programs | | dlt_viewer | DLT Client GUI (DLT Viewer): QT based implementation | As this document has the focus on the DLT Daemon and the DLT user library, only the "dlt" directory is introduced in more detail: | Directory | Description | | --------- | ----------- | | doc | Documentation | | include | Include files, installed on target | | src | Source Code | | src/shared | Shared source code (between DLT daemon and DLT user library) | | src/adaptor | Adaptors to DLT daemon:dlt-adaptor-stdin (for connection over stdin) dlt-adaptor-udp (for connection over UDP) | | src/console | Console utilities: logstorage, dlt-control, dlt-convert, dlt-passive-node-ctrl, dlt-receive, and dlt-sortbytimestamp | | src/daemon | DLT Daemon | | src/examples | Examples for usage of the DLT user library:dlt-example-user (Macro IF) anddlt-example-user-func (Function IF) andwintestclient (MS Windows based test client) | | src/lib | DLT library functions | | src/tests | Test programs:dlt-test-client and dlt-test-user for automatic tests, dlt-test-stress for stress tests, dlt-test-internal for internal tests | | testscripts | Several supporting scripts | The DLT daemon implementation uses the following files, besides DLT functions from files from the shared directory: | File | Description | | --------- | ----------- | | dlt-daemon.c | DLT daemon implementation | | dlt-daemon.h | Header file for dlt-daemon.c | | dlt-daemon_cfg.h | Compile time configuration for DLT daemon, Part1 | | dlt_daemon_common.c | Supporting functions for a DLT daemon implementation | | dlt_daemon_common.h | Header file for dlt_daemon_common.c | | dlt_daemon_common_cfg.h | Compile time configuration for DLT daemon, Part2 | The DLT user library contains the following files: | File | Description | | --------- | ----------- | | dlt_user.c | Implementation of functions, available via the DLT user library interface. | | dlt_user_cfg.h | Compile time configuration for dlt_user.c | | dlt_client.c | Functions required for DLT Client implementations | | dlt_client_cfg.h | Compile time configuration for dlt_client.c | The shared directory contains the following files: | File | Description | | --------- | ----------- | | dlt_common.c | Common helper functions, such as: Print functions for DLT messages, Functions for handling DLT Ids, Filter functions, DLT message handling functions, Functions for handling DLT files, DLT receiver functions, Log handling, Ringbuffer functions, Setting and checking of storage header | | dlt_common_cfg.h | Compile time configuration for dlt_common.c | | dlt_user_shared.c | Shared functions, required by the DLT daemon and the DLT user library, such as: Setting and checking the user header, Sending DLT messages over named pipes (FIFOs) or UNIX/VSOCK sockets | | dlt_user_shared.h | Header file for dlt_user_shared.c | | dlt_user_shared_cfg.h | Compile time configuration for dlt_user_shared.c | The public available include directory contains the following header files: | File | Description | | --------- | ----------- | | dlt.h | Overall include file, includes dlt_common.h and dlt_user.h | | dlt_common.h | Include file for dlt_common.c | | dlt_user.h | Include file for dlt_user.c, contains the "User API" functions | | dlt_user_macros.h | Include file for dlt_user.c, contains the "User API" macros | | dlt_client.h | Include file for dlt_client.c | | dlt_protocol.h | DLT protocol specfic definitions and macros | | dlt_types.h | Definition of types, must be adapted to the target architecture and compiler toolchain. | ### Description of used structures in implementation The following important structures are used in the DLT Daemon and DLT User Library: | Structure | Description | | --------- | ----------- | | DltDaemonFlags | Flags and values, set over command line during start-up of DLT daemon | | DltDaemonLocal | Global variables of the DLT Daemon, grouped together in a struct | | DltDaemon | Parameters of the DLT daemon | | DltDaemonApplication | Parameters of an application, used within DLT daemon | | DltDaemonContext | Parameters of a context, used within DLT daemon | | DltUserControlMsg... | User control messages | | DltContext | Each context is represented with this structure | | DltContextData | Temorary used structure for constructing a log message | | DltUserInjectionCallback | One entry in dynamic callback table for callback function | | dlt_ll_ts_type | Table managing all contexts (and loglevels and trce statuses) within DLT user library, contains dynamicly growing array with "DltUserInjectionCallback" entries | | DltUser | Parameters for DLT user library application, contains dynamically growing array with "dlt_ll_ts_type" entries | | DltStorageHeader | Storage header | | DltStandardHeader | Structure for standard header of a DLT message | | DltStandardHeaderExtra | Structure for standard header extra fields of a DLT message | | DltExtendedHeader | Structure for extended header of a DLT message | | DltService... | Structures for control messages (requests and responses) | | DltFilter | Structure to store filter parameters | | DltMessage | Structure to organize a DLT message, includes pointers to DltStorageHeader, DltStandardHeader, DltStandardHeaderExtra, and DltExtendedHeader, data of message is stored within a private buffer within this structure | | DltFile | Structure to organize access to a DLT File | | DltReceiver | Structure to organize the receiving of data | | DltRingbuffer | Structure to organize a ring buffer | #### Implementation specifics - The following preconditions were given prior to implementation: - C-only implementation for the DLT daemon and the DLT user library - Implementation of common functions, which can be used in a command line utility as well as in a Graphical UI - Implementation of C+\+ like classes in C, see dlt_common.c and dlt_common.h - The current implementation of the DLT daemon and DLT user library is tested with gcc under Ubuntu 16.04 on Intel HW; Android and QNX on IMX, RCAR, Qualcomm ARM target boards. - It is assumed that packed structs are always stored in memory in the order specified within the packed struct. - The implementation is multithread safe. - Initialize DLT application and contexts, then forking and using the forked process, will lead to unclear behavior (or in the worst case to a crash), as the forked process uses another process id as the parent process. Instead, initialize the DLT application and contexts in the forked process. - Calling of DLT logging and tracing functions within a callback function for injections are not supported, and will lead to an unclear behavior.dlt-daemon-2.18.6/doc/dlt_example_user.md000066400000000000000000000041671377520261000202720ustar00rootroot00000000000000% DLT-EXAMPLE-USER(1) # NAME **dlt-example-user** - Console based application for sending a custom dlt message # SYNOPSIS **dlt-example-user** \[**-h**\] \[**-g**\] \[**-a**\] \[**-k**\] \[**-d** delay\] \[**-f** filename\] \[**-n** count\] \[**-m** mode\] \[**-l** level\] \[**-A** appID\] \[**-C** contextID\] \[**-t** timeout\] \[**-s** size\] message # DESCRIPTION Sends the given message as DLT messages to DLT daemon or prints the raw DLT messages into a local file. ## OPTIONS -h : Display a short help text. -g : Switch to non-verbose mode (Default: verbose mode). -a : Enable local printing of DLT messages (Default: disabled). -k : Send marker message. -d : Milliseconds to wait between sending messages (Default: 500). -f : Use local log file instead of sending to daemon. -n : Number of messages to be generated (Default: 10). -m : Set log mode 0=off, 1=external, 2=internal, 3=both. -l : Set log level, level=-1..6 (Default: 3). -A : Set app ID for send message (Default: LOG). -C : Set context ID for send message (Default: TEST). -t : Set timeout when sending messages at exit, in ms (Default: 10000 = 10sec). -r : Send raw data with specified size instead of string. # EXAMPLES Send "HelloWorld" with default settings (10 times, every 0.5 seconds) as DLT message to dlt-daemon:: dlt-example-user HelloWorld Set app ID to `APP1`, context Id to `TEST` and log level to `error` for send message:: dlt-example-user -l 2 -A APP1 -C TEST HelloWorld Send 100 DLT messages every second:: dlt-example-user -n 100 -d 1000 HelloWorld # EXIT STATUS Non zero is returned in case of failure. # Notes The default descriptions for application and context registration are used irrespective of the IDs that could be set. App will always register with "Test Application for Logging" and context with "Test Context for Logging". # AUTHOR Darian Biastoch (dbiastoch@de.adit-jv.com) # COPYRIGHT Copyright (C) 2020 ADIT GmbH. License MPL-2.0: Mozilla Public License version 2.0 . # BUGS See Github issue: # SEE ALSO **dlt-daemon(1)**dlt-daemon-2.18.6/doc/dlt_extended_network_trace.md000066400000000000000000000071421377520261000223240ustar00rootroot00000000000000# Extended Network Trace Back to [README.md](../README.md) ## Introduction The extended network trace allows the user to send or truncate network trace messages that are larger than the normal maximum size of a DLT message. This interface will be enabled if following calls are supported on the target: - mq\_open - mq\_close - mq\_unlink - mq\_send - mq\_receive ## Protocol When truncation of messages is allowed, the truncated messages will be wrapped into a special message which indicates that a network trace message was truncated and what was the original size of the message. Segmented messages are sent in multiple packages. The package stream is prepended with a start message indicating which contains a unique handle for this stream, size of data to follow, count of segments to follow and segment size. Each segment contains the stream handle, segment sequence number, the data and data length. Finally after sending all the data segments, one more packet is sent to indicate the end of the stream. ## Truncated package Truncated message can be sent using the following function: ` int dlt_user_trace_network_truncated(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload, int allow_truncate) ` This will send a packet in the following format: Value | Description | Type :--- | :--- | :--- NWTR | Package identifier | STRING header | nw_trace header and it's length | RAW size | Original size of the message | UINT payload | The truncated nw_trace payload | RAW ## Segmented messages User can send a segmented network trace message asynchronously using: ` void dlt_user_trace_network_segmented(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload) ` This will start a background thread and return immediately. User can also send all the required packages one by one using: ` int dlt_user_trace_network_segmented_start(unsigned int *id, DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len) ` ` int dlt_user_trace_network_segmented_segment(int id, DltContext *handle, DltNetworkTraceType nw_trace_type, int sequence, uint16_t payload_len, void *payload) ` ` int dlt_user_trace_network_segmented_end(int id, DltContext *handle, DltNetworkTraceType nw_trace_type) ` *NOTE*: It is not recommended to use these functions unless you really have to. ## Segmented start packet The first packet in the stream is the header: Value | Description | Type :--- | :--- | :--- NWST | Package identifier | STRING streamhandle | Unique identifier for all packages in the stream | UINT header | nw_trace header and it's length | RAW payloadsize | Size of the complete payload in this stream | UINT segmentcount | Number of segments to follow | UINT segmentlen | Size of one segment | UINT ## Data segment After the header, follows a stream of data segments. Value | Description | Type :--- | :--- | :--- NWCH | Package identifier | STRING streamhandle | Unique identifier for all packages in the stream | UINT sequence | Sequence number of this segment | UINT data | One segment of the original nw_trace | RAW ## End packet After all the segments have been sent, an End identifier is sent. Value | Description | Type :--- | :--- | :--- NWEN | Package identifier | STRING streamhandle | Unique identifier for all packages in the stream | UINT ## Author Lassi Marttala ## COPYRIGHT Copyright (C) 2011 - 2015 BMW AG. License MPL-2.0: Mozilla Public License version 2.0 . dlt-daemon-2.18.6/doc/dlt_filetransfer.md000066400000000000000000000214311377520261000202560ustar00rootroot00000000000000# DLT Filetransfer Back to [README.md](../README.md) ## Overview DLT is a reusable open source software component for standardized logging and tracing in infotainment ECUs based on the AUTOSAR 4.0 standard. The goal of DLT is the consolidation of the existing variety of logging and tracing protocols on one format. ## Introduction to DLT Filetransfer With DLT Filetransfer it is possible store the binary data of a file to the automotive dlt log. The file will be read in binary mode and put as several chunks to a DLT\_INFO log. With a special plugin of the dlt viewer, you can extract the embedded files from the trace and save them. It can be used for smaller files, e.g. HMI screenshots or little coredumps. ## Protocol The file transfer is at least one single transaction. This transaction consist of three main types of packages: - header package - one or more data packages - end package ## Header Package Every filetransfer must begin with the header package using: ` int dlt_user_log_file_header(DltContext *fileContext,const char *filename) ` Header Header Package Protocol: Value | Description :--- | :--- FLST | Package flag fileserialnumber | Inode of the file used as file serialnumber filename | Use the absolute filepath to the file filesize | Filesize of the file file creation date | Creation date of the file number of packages | Counted packages which will be transferred in the data packages BUFFER_SIZE | Defined buffer size to reconstruct the file FLST | Package flag ## Data Package After the header package was sent, at least one or more data packages can be sent using: ` int dlt_user_log_file_data(DltContext *fileContext,const char *filename,int packageToTransfer, int timeout) ` Data Data Package Protocol: Value | Description :--- | :--- FLDA | Package flag fileserialnumber | Inode of the file used as file serialnumber PackageNumber | Transferred package Data | Payload containing data FLDA | Package flag ## End Package After all data packages were sent, the end package must be sent to indicate that the filetransfer is over using: ` int dlt_user_log_file_end(DltContext *fileContext,const char *filename,int deleteFlag) ` End Package Protocol: Value | Description :--- | :--- FLFI | Package flag fileserialnumber | Inode of the file FLFI | Package flag ## File information The library offers the user the possibility to log informations about a file using the following method without transferring the file itself using: ` dlt_user_log_file_infoAbout(DltContext *fileContext, const char *filename) ` File Information Protocol: Value | Description :--- | :--- FLIF | Package flag fileserialnumber | Inode of the file used as file serialnumber filename | Use the absolute filepath to the file filesize | Filesize of the file file creation date | Creation date of the file number of packages | Counted packages which will be transferred in the data packages FLIF | Package flag ## File transfer error ```c //! Error code for dlt_user_log_file_complete #define ERROR_FILE_COMPLETE -300 //! Error code for dlt_user_log_file_complete #define ERROR_FILE_COMPLETE1 -301 //! Error code for dlt_user_log_file_complete #define ERROR_FILE_COMPLETE2 -302 //! Error code for dlt_user_log_file_complete #define ERROR_FILE_COMPLETE3 -303 //! Error code for dlt_user_log_file_head #define ERROR_FILE_HEAD -400 //! Error code for dlt_user_log_file_data #define ERROR_FILE_DATA -500 //! Error code for dlt_user_log_file_data #define DLT_FILETRANSFER_ERROR_FILE_DATA_USER_BUFFER_FAILED -501 //! Error code for dlt_user_log_file_end #define ERROR_FILE_END -600 //! Error code for dlt_user_log_file_infoAbout #define ERROR_INFO_ABOUT -700 //! Error code for dlt_user_log_file_packagesCount #define ERROR_PACKAGE_COUNT -800 ``` If an error happens during file transfer, the library will execute the method: ` void dlt_user_log_file_errorMessage(DltContext *fileContext, const char *filename, int errorCode) ` File transfer error Protocol: Value | Description :--- | :--- FLER | Package flag error code | see error codes above linux error code | standard linux error code fileserialnumber | Inode of the file used as file serialnumber filename | Use the absolute filepath to the file filesize | Filesize of the file file creation date | Creation date of the file number of packages | Counted packages which will be transferred in the data packages FLER | Package flag If the file doesn't exist, the content of the error package is a little bit different: Value | Description :--- | :--- FLER | Package flag error code | see error codes above linux error code | standard linux error code filename | Use the absolute filepath to the file FLER | Package flag ## Using Using DLT Filetransfer There are two ways to use the filetransfer - Automatic filetransfer in one step - Header, data and end package order handeld by the user ### Automatic Call - dlt\_user\_log\_file\_complete The method needs the following arguments: - fileContext -> Context for logging the file to dlt - filename -> Use the absolute file path to the file - deleteFlag -> Flag if the file will be deleted after transfer. 1->delete, 0->notDelete - timeout -> Deprecated. The order of the packages is to send at first the header, then one or more data packages (depends on the filesize) and in the end the end package. The advantage of this method is, that you must not handle the package ordering by your own. Within dlt\_user\_log\_file\_complete the free space of the user buffer will be checked. If the free space of the user buffer < 50% then the actual package won't be transferred and a timeout will be executed. If the daemon crashes and the user buffer is full, the automatic method is in an endless loop. ### Manual Manual starting filetransfer with the following commands: - dlt\_user\_log\_file\_head | Transfers only the header of the file - dlt\_user\_log\_file\_data | Transfers only one single package of a file - dlt\_user\_log\_file\_end | Tranfers only the end of the file This ordering is very important, so that you can save the transferred files to hard disk on client side with a dlt viewer plugin. The advantage of using several steps to transfer files by your own is, that you are very flexible to integrate the filetransfer in your code. An other difference to the automatic method is, that only a timeout will be done. There is no check of the user buffer. ## Important for integration You should care about blocking the main program when you intergrate filetransfer in your code. Maybe it's useful to extract the filetransfer in an extra thread. Another point is the filesize. The bigger the file is, the longer takes it to log the file to dlt. ## Example dlt filetransfer For an example file transfer you can use ```bash Usage: dlt-example-filetransfer \[options\] \ Filetransfer example with DLT Package Version: 2.2.0 , Package Revision: 1666, build on May 28 2011 02:18:19 Command: -f file - File to transfer (absolute path) Options: -a apid - Set application id to apid (default: FLTR) -c ctid - Set context id to ctid (default: FLTR) -t ms - Timeout between file packages in ms (minimum 20 ms) -d - Flag to delete the file after the transfer (default: false) -i - Flag to log file infos to DLT before transfer file (default: false) -h - This help ``` ## Testing dlt filetransfer When you call "sudo make install", some automatic tests will be installed. Start the test using the following command from bash: ` dlt-test-filetransfer ` It's important that the dlt-filetransfer example files are installed in /usr/share/dlt-filetransfer which will be done automatically by using "sudo make install". If not, use -t and -i options to specify the path to a text file and an image file. - testFile1Run1: Test the file transfer with the condition that the transferred file is smaller as the file transfer buffer using dlt\_user\_log\_file\_complete. - testFile1Run2: Test the file transfer with the condition that the transferred file is smaller as the file transfer buffer using single package transfer - testFile2Run1: Test the file transfer with the condition that the transferred file is bigger as the file transfer buffer using dlt\_user\_log\_file\_complete. - testFile2Run2: Test the file transfer with the condition that the transferred file is bigger as the file transfer buffer using single package transfer - testFile3Run1: Test the file transfer with the condition that the transferred file does not exist using dlt\_user\_log\_file\_complete. - testFile3Run2: Test the file transfer with the condition that the transferred file does not exist using single package transfer - testFile3Run3: Test which logs some information about the file. ## AUTHOR Christian Muck ## COPYRIGHT Copyright (C) 2012 - 2015 BMW AG. License MPL-2.0: Mozilla Public License version 2.0 . dlt-daemon-2.18.6/doc/dlt_for_developers.md000066400000000000000000000700261377520261000206140ustar00rootroot00000000000000# How to DLT for developers Back to [README.md](../README.md) Table of Contents 1. [Summary](#Summary) 2. [Example Application](#DLT-Example-Application) 3. [General Rules for Logging](#General-Rules-for-Logging) 4. [The use of Log Levels](#The-use-of-Log-Levels) 5. [DLT Library Runtime Configuration](#DLT-Library-Runtime-Configuration) 6. [DLT API Usage](#DLT-API-Usage) 7. [DLT injection messages](#DLT-Injection-Messages) 8. [Log level changed callback](#Log-level-changed-callback) ## DLT Example Application To use DLT from an application, it has to be linked against the DLT library. When the DLT daemon is installed on the system, there will be a shared library with the name libdlt.so which provides the interface for applications to get a connection to the DLT daemon. The library path and include path must be set in the build environment prior to building a program using the shared dlt library. By default, the header file "dlt.h" is located in a directory called "dlt/" within the standard include directory. This example gives an overview of DLT usage inside an application by using a minimal code example. Detailed information about the API can be found later in this document. ``` #include DLT_DECLARE_CONTEXT(ctx); /* declare context */ int main() { DLT_REGISTER_APP("TAPP", "Test Application for Logging"); DLT_REGISTER_CONTEXT(ctx, "TES1", "Test Context for Logging"); /* â€Ļ */ DLT_LOG(ctx, DLT_LOG_ERROR, DLT_CSTRING("This is an error")); /* â€Ļ */ DLT_UNREGISTER_CONTEXT(ctx); DLT_UNREGISTER_APP(); return 0; } ``` DLT is quite easy to use. The first thing a developer has to do is to include the dlt header file. DLT contexts can be statically declared using the macro shown in next line. Firstly, a DLT application has to be registered inside the main function. For this, an application identifier APID and application description has to be specified. Afterwards, one or more DLT contexts could be specified. To log messages in verbose mode, the DLT\_LOG macro can be used. As parameter, the logging context, the log level and a variable list of parameters have to be specified. DLT requires each parameter to be strongly typed using DLT type macros. In this example, DLT\_CSTRING is used to specify a constant string. On application cleanup, all DLT contexts, as well as the DLT application have to be unregistered. ### DLT with cmake To use DLT with cmake, the following lines are the important ones: ``` find_package(PkgConfig) pkg_check_modules(DLT REQUIRED automotive-dlt) ``` to INCLUDE\_DIRECTORIES, add ``` ${DLT_INCLUDE_DIRS} ``` and to TARGET\_LINK\_LIBRARIES: ``` ${DLT_LIBRARIES} ``` ### Limitation On Android, definition of `SIGUSR1` in DLT application shall be avoided since DLT library blocks `SIGUSR1` to terminate housekeeper thread at exit. ## General Rules for Logging ### Be Smart Before implementing logging in code one should take a second to think about a concept first. Often strategic places in the software can be used as a central place for logging. Such places are often interfaces to other SW components. Use the solution with the smallest impact. Avoid logging the "good cases" but log e.g. in your error handling sections – you will need error handling anyway. In case an error occurred more logs don't matter as long as your regular code produces little logs. Keep in mind that tracing comes with a price tag – you are working in an embedded environment where CPU, memory and Bandwidth are sparse. ### Avoid high frequency outputs Certain events occur very often in a system – some of them dozens of times per second. In such a case do not implement logging for each occurrence. One example is the screen frame rate. Instead of printing a log for each frame rate aggregate the information and print an average once every five seconds or – even better – report once a second if the frame rate is below a critical value. ### Combine multiple messages Please always consider that each Log message creates a certain overhead. In case of DLT as the way of logging each has a header of 20 bytes. Therefore please aggregate information. In this way all necessary information is always combined. Please always use a human readable format; use identifiers for the different values, be consistent with separators. This helps to work with the data, especially when log messages are processed by scripts. Such scripts often use regular expressions – make the job easier! For example don't write log entries like this: > Total frames: 1000 > > Sync frames: 0 > > Reem frames: 0 > > Valid frames: 0 > > Urgent frames: 1 Better aggregate Information into a single message: > Frame info: total=1000, sync=0, reem=1000, valid=0, urgent=1 ### Do not use ASCII-art Information should be "on your fingertips". Logging is a tool to ease crushing bugs, not to win a computer art contest. → Don't use ASCII Art! ### Do not create charts using ASCII Charts can be a great help to visualize what is going on in the system. This type can be nicely done by a trace analysis or in case of usage of the DLT Viewer, in a Plugin. It certainly should always be done in a post processing step. Doing this on the target is a waste of resources. ### Avoid tracing in loops Bad example: ``` for(int index=0; index export DLT\_INITIAL\_LOG\_LEVEL="EXA1:CON1:5;EXA1:CON2:6" If the log level of all applications and contexts shall be initialized, then: > export DLT\_INITIAL\_LOG\_LEVEL="::2" If the log level for all contexts of application "EXA1" shall be initialized, then: > export DLT\_INITIAL\_LOG\_LEVEL="EXA1::2" If the log level of context "CON1" shall be initialized, then: > export DLT\_INITIAL\_LOG\_LEVEL=":CON1:2" ### Local print mode Sometimes it might be useful to print DLT messages for debugging directly to console. To force the library to do so, the following environment variable can be exported: > export DLT\_LOCAL\_PRINT\_MODE=FORCE\_ON ### Library buffer size The DLT library contains a message buffer in case the DLT Daemon is not started yet or the connection to DLT Daemon is temporarily lost. The buffer is allocated while library initialization with a minimum size. If more messages need to be stored, the buffer grows in defined steps up to a maximum size. In case messages are flushed to DLT Daemon, the buffer is reduced to its minimal size. The default values and the environment variable names to set these values are described below: | | Default value [in bytes] | Environment variable name --- | --- | --- Minimal size | 50000 | DLT\_USER\_BUFFER\_MIN Maximal size | 500000 | DLT\_USER\_BUFFER\_MAX Step size | 50000 | DLT\_USER\_BUFFER\_STEP For example, to limit the maximum buffer size to 250k bytes, the following can be exported: > export DLT\_USER\_BUFFER\_MAX=250000 ## DLT API Usage ### Register application **Important note** - DLT may not be used in a forked child until a variant of exec() is called, because DLT is using non async-signal-safe functions. - DLT\_REGISTER\_APP is asynchronous. It may take some milliseconds to establish the IPC channel. Because of this, you might lose messages if you log immediately after registration. Typically this is not a problem, but may arise especially with simple examples. The DLT application has to be registered as early as possible during the initialization of the application by calling DLT\_REGISTER\_APP(). It is only allowed to call DLT\_REGISTER\_APP() once per application. An application id (maximum four characters) has to be specified and must be unique within an ECU. In this example "MAPP" is used. And also a description for the application can be specified, here it is "Test Application for Logging". ``` int main(int argc, const char* argv[]) { DLT_REGISTER_APP("MAPP","Test Application for Logging"); } ``` DLT\_REGISTER\_APP is asynchronous. It may take some milliseconds to establish the IPC channel. Because of this, messages might be lost if logs are emitted immediately after registering. Typically this is not a problem, but may arise especially with simple examples. ### Get application ID To get the application ID value, requested to allocate a char array at least 4 byte length and input to the function call. The application ID will be stored in this input char array. #### MACRO ``` DLT_GET_APPID(appid); ``` #### Function ``` dlt_get_appid(appid); ``` ### Define and register all logging contexts As many contexts as needed can be defined. These contexts can be declared as contexts in different C or CPP files. But each context is only allowed to be declared once. Therefore a unique variable name for each context has to be used. ``` DLT_DECLARE_CONTEXT(myContext1); DLT_DECLARE_CONTEXT(myContext2); DLT_DECLARE_CONTEXT(myContext3); ``` If contexts from another C or CPP file shall be used, these contexts can be imported by calling: ``` DLT_IMPORT_CONTEXT(myContext1); DLT_IMPORT_CONTEXT(myContext2); DLT_IMPORT_CONTEXT(myContext3); ``` After the application is registered and contexts are declared, contexts need to be registered early during initialization of the application. DLT\_REGISTER\_CONTEXT() shall not be called before DLT\_REGISTER\_APP(). During registration of each context, a context id must be provided (maximum four characters long). In this example "TESX" is used. Also a description for the context can be provided; here it is "Test Context X for Logging". A context can also be registered with a predefined Log Level and Trace Status by using the Macro DLT\_REGISTER\_CONTEXT\_LL\_TS. The third context is registered using this method. ``` int main(int argc, const char* argv[]) { DLT_REGISTER_APP("MAPP","Test Application for Logging"); DLT_REGISTER_CONTEXT(myContext1,"TES1","Test Context 1 for Logging"); DLT_REGISTER_CONTEXT(myContext2,"TES2","Test Context 2 for Logging"); DLT_REGISTER_CONTEXT_LL_TS(myContext3, "TES3","Test Context 3 for Logging", DLT_LOG_DEBUG, DLT_TRACE_STATUS_OFF); } ``` Note: Please be aware that it might be taken up to a second until the synchronization of loglevel between DLT Daemon and application is done. ### Unregister contexts and application Before terminating the application registered contexts and at last the application need to be unregistered. ``` int main(int argc, const char* argv[]) { /* business logic */ DLT_UNREGISTER_CONTEXT(myContext1); DLT_UNREGISTER_CONTEXT(myContext2); DLT_UNREGISTER_CONTEXT(myContext3); DLT_UNREGISTER_APP(); return 0; } ``` ### Logging command DLT provides functions and macros for logging, whereas the interface for Verbose and Non-Verbose differs. The following table shows an example of all 4 types for logging using a constant string and an integer. #### Verbose vs. Non-Verbose API The following sections show examples of all 4 types for logging e.g. a string and an integer. ##### MACRO ###### Verbose ``` DLT_LOG(ctx, DLT_LOG_INFO, DLT_STRING("ID: "), DLT_UINT32(123)); ``` ###### Non-Verbose ``` DLT_LOG_ID(ctx, DLT_LOG_INFO, 42 /* unique message ID */, DLT_STRING("ID: "), DLT_UINT32(123)); ``` ##### Function ###### Verbose ``` if (dlt_user_log_write_start(&ctx, &ctxdata, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&myctxdata, "ID: "); dlt_user_log_write_uint32(&myctxdata, 123); dlt_user_log_write_finish(&myctxdata); } ``` ###### Non-Verbose ``` if (dlt_user_log_write_start_id(&ctx, &ctxdata, DLT_LOG_INFO, 42) > 0) { dlt_user_log_write_string(&myctxdata, "ID: "); dlt_user_log_write_uint32(&myctxdata, 123); dlt_user_log_write_finish(&myctxdata); } ``` Drawback of that solution is that the developer has to decide during development if Verbose or Non-Verbose mode shall be used and the code most likely ends up as written in the dlt-example-user application: ``` if (gflag) { /* Non-verbose mode */ DLT_LOG_ID(ctx, DLT_LOG_INFO, 42 /* unique msg ID */, DLT_INT(num), DLT_STRING(text)); } else { /* Verbose mode */ DLT_LOG(ctx, DLT_LOG_INFO, DLT_INT(num), DLT_STRING(text)); } ``` ##### Switching Verbose and Non-Verbose To switch Verbose/Non-Verbose mode (Verbose mode is default), the following APIs are available: ``` DLT_VERBOSE_MODE(); DLT_NONVERBOSE_MODE(); ``` #### String arguments For string arguments, you can choose between ASCII and UTF-8 encoding. This encoding is written into the argument header, so that the receiver knows what to expect when parsing the message. In addition, you can also choose between null-terminated strings and (potentially) non-null-terminated ones. The latter often arise in C++ code when using classes such as std::string\_view, which does not provide an accessor method that returns a null-terminated C-string. Copying data out of a std::string\_view thus requires to copy only the desired number of characters. For instance, using Verbose mode: ``` std::string_view line = "Name: Ford Prefect"; std::string_view key = line.substr(0, 4); std::string_view value = line.substr(6); if (dlt_user_log_write_start_id(&ctx, &ctxdata, DLT_LOG_INFO, 42) > 0) { dlt_user_log_write_constant_string(&myctxdata, "key"); dlt_user_log_write_sized_utf8_string(&myctxdata, key.data(), key.size()); dlt_user_log_write_constant_string(&myctxdata, "value"); dlt_user_log_write_sized_utf8_string(&myctxdata, value.data(), value.size()); dlt_user_log_write_finish(&myctxdata); } ``` #### Using custom timestamps The timestamp that is transmitted in the header of a DLT message is usually generated automatically by the library itself right before the message is sent. If you wish to change this, e.g. because you want to indicate when an event occured, rather than when the according message was assembled, you can supply a custom timestamp. Compared to the example above, two macros are defined for convenience: ``` uint32_t timestamp = 1234567; /* uptime in 0.1 milliseconds */ if (gflag) { /* Non-verbose mode */ DLT_LOG_ID_TS(ctx, DLT_LOG_INFO, 42, timestamp, DLT_INT(num), DLT_STRING(text)); } else { /* Verbose mode */ DLT_LOG_TS(ctx, DLT_LOG_INFO, timestamp, DLT_INT(num), DLT_STRING(text)); } ``` If you wish to (or have to) use the function interface, you need to set the flag to make use of the user-supplied timestamp manually after calling dlt_user_log_write_start(): ``` if (dlt_user_log_write_start(&ctx, &ctxdata, DLT_LOG_INFO) > 0) { ctxdata.use_timestamp = DLT_USER_TIMESTAMP; ctxdata.user_timestamp = (uint32_t) 1234567; dlt_user_log_write_string(&myctxdata, "ID: "); dlt_user_log_write_uint32(&myctxdata, 123); dlt_user_log_write_finish(&myctxdata); } ``` ### Logging parameters The following parameter types can be used. Multiple parameters can be added to a single log message. The size of all logging parameters together should not exceed 1390 bytes, including the DLT message header. Type | Description --- | --- DLT\_STRING(TEXT) | String DLT\_SIZED\_STRING(TEXT,LENGTH) | String with known length DLT\_CSTRING(TEXT) | Constant string (not sent in non-verbose mode) DLT\_SIZED\_CSTRING(TEXT,LENGTH) | Constant string with known length (not sent in non-verbose mode) DLT\_UTF8(TEXT) | Utf8-encoded string DLT\_SIZED\_UTF8(TEXT,LENGTH) | Utf8-encoded string with known length DLT\_RAW(BUF,LENGTH) | Raw buffer DLT\_INT(VAR) | Integer variable, dependent on platform DLT\_INT8(VAR) |Integer 8 Bit variable DLT\_INT16(VAR) | Integer 16 Bit variable DLT\_INT32(VAR) | Integer 32 Bit variable DLT\_INT64(VAR) | Integer 64 bit variable DLT\_UINT(VAR) | Unsigned integer variable DLT\_UINT8(VAR) | Unsigned 8 Bit integer variable DLT\_UINT16(VAR) |Unsigned 16 Bit integer variable DLT\_UINT32(VAR) | Unsigned 32 Bit integer variable DLT\_UINT64(VAR) | Unsigned 64 bit integer variable DLT\_BOOL(VAR) | Boolean variable DLT\_FLOAT32(VAR) | Float 32 Bit variable DLT\_FLOAT64(VAR) | Float 64 Bit variable DLT\_HEX8(UINT\_VAR) | 8 Bit hex value DLT\_HEX16(UINT\_VAR) | 16 Bit hex value DLT\_HEX32(UINT\_VAR) | 32 Bit hex value DLT\_HEX64(UINT\_VAR) | 64 Bit hex value DLT\_BIN8(UINT\_VAR) | 8 Bit binary value DLT\_BIN16(UINT\_VAR | 16 Bit binary value DLT\_PTR(PTR\_VAR) | Architecture independent macro to print pointers ### Network Trace It is also possible to trace network messages. The interface, here DLT\_NW\_TRACE\_CAN, the length of the header data and a pointer to the header data, the length of the payload data and a pointer to the payload data, must be specified. If no header or payload is available, the corresponding length must be set to 0, and the corresponding pointer must be set to NULL. ``` DLT_TRACE_NETWORK(mycontext, DLT_NW_TRACE_CAN, headerlen, header, payloadlen, payload); ``` Note that when DLT_NETWORK_TRACE_ENABLE is disabled, the mqueue.h will not be included. ### DLT C++ Extension The DLT C++ extension was added to DLT in version 2.13. This approach solves the need to specify the type of each argument for applications written in C++ by using C++ templates and function overloading. The following shows the usage of this API extension: ``` #define DLT_LOG_CXX(CONTEXT, LOGLEVEL, ...) #define DLT_LOG_FCN_CXX(CONTEXT, LOGLEVEL, ...) DLT_LOG_CXX(ctx, DLT_LOG_WARN, 1.0, 65); DLT_LOG_FCN_CXX(ctx, DLT_LOG_WARN, "Test String", 145, 3.141); ``` This works as well with C++ standard containers like std::vector, std::map, std::list. Of course, the logToDlt function can be overloaded to print user defined structures or classes. ``` struct MyStruct { int64_t uuid; int32_t interfaceId; int32_t registrationState; }; template<> inline int logToDlt(DltContextData & log, MyStruct const & value) { int result = 0; result += dlt_user_log_write_string(&log, "("); result += logToDlt(log, value.uuid); result += dlt_user_log_write_string(&log, ","); result += logToDlt(log, value.interfaceId); result += dlt_user_log_write_string(&log, ","); result += logToDlt(log, value.registrationState); result += dlt_user_log_write_string(&log, ")"); if (result != 0) { result = -1; } return result; } ``` ### Check if a specific Log Level is enabled In some scenarios it might be necessary to check if a specific Log Level is enabled or not, before log data is send to DLT Library. The macro is defined as follows: ``` DLT_IS_LOG_LEVEL_ENABLED(CONTEXT,LOGLEVEL) ``` In general, there is no need to check the active Log Level to decide if a log message can be send to not. This is handled inside the DLT\_LOG macro. ## DLT Injection Messages DLT provides an interface to register injection callbacks which can be sent by a DLT Client (e.g. DLT Viewer) to the application. An injection message callback is always registered for a specific context. The API to register a callback is defined as follows: ``` DLT_REGISTER_INJECTION_CALLBACK(CONTEXT, SERVICEID, CALLBACK); ``` Injection message Service IDs must be bigger than 0xFFF, because IDs up to 0xFFF are reserved for DLT Daemon control messages. The callback function needs to have the following definition: ``` int injection_callback(uint32_t service_id, void *data, uint32_t length); ``` For example, registering a callback function for a specific context with the service ID 0x1000 might look like: ``` DLT_REGISTER_INJECTION_CALLBACK(mycontext, 0x1000, injection_callback); ``` From DLT Viewer, an injection message can be sent by right-clicking the corresponding context in the project view ("Send injection"). A dialog will pop up to specify the injection data as shown below. ![alt text](images/dlt-viewer-send-injection-dialog.png "DLT Viewer Send Injection Callback") ## Log level changed callback A callback function can be registered to be called whenever the Log Level of a context changed. The usage is similar to DLT\_REGISTER\_INJECTION\_CALLBACK. ``` DLT_REGISTER_LOG_LEVEL_CHANGED_CALLBACK(CONTEXT, CALLBACK) ``` ## Disable injection messages An environment variable named `DLT_DISABLE_INJECTION_MSG_AT_USER` could be used in case dlt application wants to ignore all data/messages from dlt-daemon completely. To use: ``` export DLT_DISABLE_INJECTION_MSG_AT_USER=1 ``` To clear: ``` unset DLT_DISABLE_INJECTION_MSG_AT_USER ``` dlt-daemon-2.18.6/doc/dlt_gateway.conf.5.md000066400000000000000000000054711377520261000203300ustar00rootroot00000000000000% DLT_GATEWAY.CONF(5) # NAME **dlt_gateway.conf** - DLT configuration file for gateway # DESCRIPTION The configuration file dlt_gateway.conf allows to configure the different runtime behaviour of gateway in Multinode feature. The configuration file is written in an INI file format and contains information about different connected passive nodes. If Multinode feature is enabled, dlt-daemon loads by default the configuration file /etc/dlt_gateway.conf. An alternative configuration file can be loaded by changing `GatewayConfigFile` in dlt.conf(5). # GENERAL SECTION ### Interval Time interval for reconnection to passive Node in second. Default: 1 # PASSIVENODE SECTION Each passive node’s connection parameters are specified in a unique numbered separate section ([PassiveNode{1,2, â€ĻN}]). Example: [PassiveNode1] ### IPaddress Because TCP is the only supported communication channel, the IPaddress and Port of the Passive DLT Daemon has to be specified. IP Address of passive node. Mandatory ### Port TCP port. Default 3490 is used if no port is specified. Default: 3490 ### EcuID ECU identifier of passive node. Mandatory. ### Connect With the Connect property it is possible to specify when the Gateway DLT Daemon shall connect to the passive node. Default: OnStartUp The following values are allowed: OnStartup The Gateway DLT Daemon tries to connect to the Passive DLT Daemon immediately after the Gateway DLT Daemon is started. OnDemand The Gateway DLT Daemon tries to connect to the Passive DLT Daemon when it receives a connection request. ### Timeout Stop connecting to passive node, if not successful after 10 retries. After of retries, the connection to passive Node is marked as DISABLED. It means there is no any retry anymore. Set to 0 for endless retry. Default: 10 ### SendControl Send following control messages after connection is established. Optional. Default: disabled Supported Control messages: DLT_SERVICE_ID_GET_LOG_INFO 0x03 DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL 0x04 DLT_SERVICE_ID_GET_SOFTWARE_VERSION 0x13 ### SendSerialHeader Send Serial Header with control messages. Value in dlt.conf(5) is used as default if not specified. Default: disabled ### SendPeriodicControl Send following control messages periodically. Default: disabled Format: control:interval[in seconds] # AUTHOR Thanh Bui Nguyen Quoc (thanh.buinguyenquoc (at) vn (dot) bosch (dot) vn) # COPYRIGHT Copyright (C) 2020 Advanced Driver Information Technology, Bosch and DENSO. License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. # BUGS See Github issue: # SEE ALSO **dlt.conf(5)**, **dlt-daemon(1)** dlt-daemon-2.18.6/doc/dlt_glossary.md000066400000000000000000000077061377520261000174460ustar00rootroot00000000000000# Glossary Throughout the documentation specific terms are used. Those are defined below. Back to [README.md](../README.md) Term | Definition ----- | ---- Application ID | Application Identifier is a unique identifier for an application registered at the DLT Daemon. It is defined as 8bit ASCII character. e.g. "APP1". Each Application can have several sub-components each having a unique context ID Context ID | This is a user defined ID to group log and trace messages produced by an application. Each Application ID can own several Context IDs and the Context IDs shall be unique within an Application ID. The identification of the source of a log and trace message is done with a pair of Application ID and Context ID. It is composed by four 8 bit ASCII characters. Control Message | A control message is send by a connected client application (e.g. Log Viewer) to the DLT Daemon that includes an action request. E.g. change the Log level of a certain application). DLT Daemon | The DLT Daemon is the central component which receives all logs and traces from the DLT user applications. The DLT Daemon forwards all logs and traces to a connected DLT client (e.g. Log Viewer) or stores them optionally in a file on the target. DLT Library | Provides applications (esp. DLT users) with an API to produce DLT messages and to handle DLT Control Messages accordingly. DLT User | A DLT User is a type of application that produces log messages. It typically uses the DLT library to produce the messages and resembles an ECU. DLT Viewer | The DLT Viewer is the GENIVI Log Viewer implementation. It is a Qt-based desktop application able to run on Windows and Linux operating systems. Further information and source code can be found here: https://github.com/GENIVI/dlt-viewer Gateway DLT Daemon | In a Multi-Node system, the DLT Daemon running on the Node directly connected to a Log Viewer is called Gateway DLT Daemon (if configured as Gateway). It forwards log messages from Passive DLT Daemons to Log Viewers and command/control messages from Log Viewer(s) to Passive DLT Daemon(s). Injection Message | An injection message is a control message for a specific DLT application. Log Consumer | A log consumer is an application connected to the DLT Daemon (DLT Client) that receives log messages and stores (e.g. Logstorage) or displays them (e.g. Log Viewer). A log consumer can run on the same operating system or on a remote host pc. Log Level | A log level defines a classification for the severity grade of a log message. Log Viewer | A client application or tool used to view log information on a host pc. DLT-viewer is the supported Log Viewers. Multi-Node System | A system with more than one node. Node | A node represents an operating system, e.g. Linux, AUTOSAR or a container having its own DLT Daemon instance. Only one DLT Daemon should run on a node. In the context of DLT, Node and ECU describe the same thing. Node Identifier | Unique Identifier of a node (node ID). In DLT, the node ID is defined by __EcuID__ set in _dlt.conf_ configuration file. Passive DLT Daemon | A passive DLT Daemon runs on a node without direct connection to a Log Viewer. All communication between a passive DLT Daemon and a Log Viewer has to be send via the Gateway DLT Daemon. Trace Status | The trace status provides information if a trace message should be send. Supported States are ON or OFF Verbose / Non-Verbose Mode | The DLT supports Verbose and Non-Verbose Mode. In _Verbose_ mode, all logging data including a type description is provided within the payload. Furthermore, Application ID and Context ID are transferred as part of the message header. In _Non-Verbose_ mode, description about the sender (Application ID, Context ID) as well as static strings and data description is not part of the payload. Instead, this information is stored in a file that needs to be parsed by a Log Viewer. The log message contains a unique message ID instead which allows a mapping between received log message and information stored in the file.dlt-daemon-2.18.6/doc/dlt_kpi.md000066400000000000000000000115301377520261000163540ustar00rootroot00000000000000# DLT KPI Back to [README.md](../README.md) ## Overview *DLT KPI* is a tool to provide log messages about **K**ey **P**erformance **I**ndicators to the DLT Daemon. The log message format is designed to be both readable by humans and to be parsed by DLT Viewer plugins. The information source for the dlt-kpi tool is the /proc file system. ## Message format *DLT KPI* logs its messages as human readable ASCII messages, divided in multiple arguments. The tool will log messages in user defined intervals, which can be set in the configuration file dlt-kpi.conf. ## Identifiers and their datasets The logged messages always start with a three character long identifier as first argument. After this identifier, they can contain multiple datasets separated in the remaining arguments. The datasets contain information separated by semicolons. The order and meaning of those information chunks is defined below. The following will explain the meaning to each three-character-identifier and each information chunk of the datasets associated with this identifier. The example messages all contain only one dataset - in real use, many messages will contain multiple datasets (one per argument). *NOTE*: Arguments are delimited by spaces when shown in ASCII, but dlt-viewer plugins can easily access each argument separately by certain methods, which makes arguments useful for parsing. ### NEW This identifies a message that contains datasets describing newly created processes. The datasets in these messages have the following form: `[PID];[Parent PID];[Commandline]` Example message: `NEW 21226;1;/usr/libexec/nm-dispatcher` ### STP This identifies a message that contains datasets describing processes that have ended since the last interval. The datasets in these messages have the following form: `[PID]` Example message: `STP 20541` ### ACT This identifies a message that contains datasets describing active processes. These are processes that have consumed CPU time since the last interval. The datasets in these messages have the following form: `[PID];[CPU time in milliseconds per second];[RSS bytes];[CTX-switches since last interval];[I/O bytes];[I/O wait time in milliseconds per second]` Example message: `ACT 20503;10;389;3;1886649;0` *NOTE:* The *CPU time* value is the active time of a process in milliseconds, divided by the number of CPU cores. So this value should never get greater than 1000ms, which would mean 100% CPU usage. ### CHK This identifies a message that is logged for each process in a certain interval. These messages can be used to get a list of currently existing processes and to keep a plugin, that tracks running processes, up to date if messages were lost or if the commandlines have changed. The datasets in these messages have the following form: `[PID];[Commandline]` Example message: `CHK 660;/sbin/audispd` ### IRQ This identifies a message that contains datasets describing the numbers of interrupts that occurred on each CPU. The datasets in these messages have the following form: `[IRQ name];cpu[CPU number];[Number of total interrupts];` Example message: `IRQ 0;cpu0:133;cpu1:0; 1;cpu0:76827;cpu1:0;` ## Synchronization messages Because the messages can get too long for logging and segmented network messages don't allow for individually set arguments, the datasets can be splitted into multiple messages of the same type (i.e. they have the same identifier). This can make it difficult for an observer (human or machine) to keep track of currently valid information. For example, one can't be sure if a process is part of the list of currently active processes or not, or if this message was part of an older interval that simply arrived too late. So, to correctly associate these messages to each other, each group of potentially "segmented" messages is surrounded by two synchronization messages which start with the same identifier, followed by the codes _BEG_ (for the opening sync message) or _END_ (for the closing sync message). Synchronization messages do not contain datasets. Example (Messages have been shortened for simplicity): ```c ACT BEG ACT 21768;10;417;3;672075;0 19284;20;15857;303654;22932174;0 1826;20;39781;4404293;154392870;0 ACT 1635;10;10696;8412557;375710810;0 990;10;22027;1176631;0;0 ACT END ``` Only processes that are part of this group are active at this moment. *ACT* messages that came before this message-group are invalid now. It can also happen that, between a *BEG* and an *END* sync message, there are messages of other types. So, plugins should not expect these message groups to always be a "solid block", but react on each message individually and dynamically, and store the logged information until the closing *END* message arrives. ## AUTHOR Sven Hassler ## COPYRIGHT Copyright (C) 2015 BMW AG. License MPL-2.0: Mozilla Public License version 2.0 . dlt-daemon-2.18.6/doc/dlt_multinode.md000066400000000000000000000053711377520261000175770ustar00rootroot00000000000000# DLT MultiNode Back to [README.md](../README.md) ## Overview MultiNode allows to connect DLT Daemons running on different operating systems, e.g. in a virtualized environment. The central component is the Gateway DLT Daemon which connects external DLT Clients, like the DLT Viewer running on a host computer with Passive DLT Daemons running on nodes without a physical connection to external DLT clients. All communication between passive nodes and DLT Viewer has to be sent via the Gateway node. The Gateway node forwards log messages coming from passive nodes to all connected DLT clients. The Gateway DLT Daemon also forwards command and control requests coming from DLT clients to the corresponding passive node. ![alt text](images/dlt-multinode.png "DLT MultiNode") ## Precondition The dlt.conf configuration file which is read by each DLT Daemon on start-up contains an entry to specify the ECU identifier (node identifier). It has to be ensured, that **each DLT Daemon in the System has a unique ECU** identifier specified. The ECU identifier is included in every DLT Message and is used to distinguish if a DLT message has to be forwarded to a passive node or handled by the Gateway DLT Daemon itself. ## Configuration The dlt.conf configuration file provides an option to enable the Gateway functionality of a DLT Daemon. The default setting is 0 (Off), which means the Gateway functionality is not available. ``` # Enable Gateway mode (Default: 0) GatewayMode = 1 ``` ### Gateway Configuration File The MultiNode configuration file has to be loaded by the Gateway DLT Daemon during startup. Example: ``` [General] Interval=1 [PassiveNode1] ; IP Address. (Mandatory) IPaddress = 192.168.2.32 ; TCP port. Default 3490 is used if no port is specified Port = 3495 ; Passive node ECU identifier. (Mandatory) EcuID = ECU2 ; Connection to passive node only on demand. Default ‘OnStartup’ if not specified Connect = OnDemand ; Stop connecting to passive node, if not successful after 10 retries. ; Set to 0 for endless retry. Timeout = 10 ; Send following control messages after connection is established SendControl=0x03, 0x13 ; Send SerialHeader with control messages. Value in dlt.conf is used ; as default if not specified SendSerialHeader=1 ``` For more details, please refer to [dlt_gateway.conf.5.md](dlt_gateway.conf.5.md) ## Using DLT MultiNode ``` Usage: dlt-passive-node-ctrl [options] Send a trigger to DLT daemon to (dis)connect a passive node or get current passive node status. Options: -c Connection status (1 - connect, 0 - disconnect) -h Usage -n passive Node identifier (e.g. ECU2) -s Show passive node(s) connection status -t Specify connection timeout (Default: 10s) -v Set verbose flag (Default:0) ``` dlt-daemon-2.18.6/doc/dlt_offline_logstorage.md000066400000000000000000000254011377520261000214430ustar00rootroot00000000000000# DLT Offline Logstorage Back to [README.md](../README.md) ## Introduction to DLT Offline Logstorage Logstorage is a mechanism to store DLT logs on the target system or an external device (e.g. USB stick) connected to the target. It can be seen as an improvement of the Offline Trace functionality which is already part of DLT. Logstorage provides the following features: - Store logs in sets of log files defined by configuration files - Log file content is configurable - Configurable options are: - Application identifier (single entry, list, wildcard) - Context identifier (single entry, list, wildcard) - Log level - ECU identifier - Log files are configurable in terms of: - File name and naming scheme - File size - Number of files - Log message synchronization strategy is configurable - Trigger start and stop logging using a control application - Integration into Udev device management ## Configuration ### General Configuration General configuration is done inside dlt.conf. The following configuration options exist: ``` ############################################################################## # Offline logstorage # ############################################################################## # Store DLT log messages, if not set offline logstorage is off (Default: off) # Maximum devices to be used as offline logstorage devices # OfflineLogstorageMaxDevices = 1 # Path to store DLT offline log storage messages (Default: off) # OfflineLogstorageDirPath = /opt # File options # Appends timestamp in log file name, Disable by setting to 0 (Default: 1) # OfflineLogstorageTimestamp = 0 # Appends delimiter in log file name, allowed punctutations only (Default: _) # OfflineLogstorageDelimiter = _ # Wrap around value for log file count in file name (Default: UINT_MAX) # OfflineLogstorageMaxCounter = 999 # Maximal used memory for Logstorage Cache in KB (Default: 30000 KB) # OfflineLogstorageCacheSize = 30000 ``` ### Configuration file format For DLT daemon to store logs the configuration file named “dlt\_logstorage.conf” should be present in external storage or internal storage device (= given path in the file system). ``` [Filter] # filter configration name LogAppName= # Name of application to store logs from. Multiple applications can be separated by "," and ".*" denotes all applications ContextName= # Name or names of contexts to store logs from. Multiple contexts can be separated by "," and ".*" denotes all contexts of the application LogLevel= # Define log level, e.g. DLT_LOG_INFO or DLT_LOG_FATAL File= # Base name of the created files that containing the logs, e.g. "example". For further file naming scheme configurations see man dlt.conf FileSize= # Maximum file size in bytes NOFiles= # Number of created files before oldest is deleted and a new one is created SyncBehavior= # Specify sync strategy. Default: Sync'ed after every message. See Logstorage Rinbuffer Implementation below. EcuID= # Specify ECU identifier SpecificSize= # Store logs in storage devices after specific size is reached. ``` The Parameter "SyncBehavior","EcuID" and "SpecificSize" are optional - all others are mandatory. If both of the parameter "LogAppName" and "ContextName" are set to wildcard or not present in the configuration file, "EcuID" must be specified. A typical configuration file may look like: ``` [FILTER1] LogAppName=APP1 ContextName=CON1,CON2 LogLevel=DLT_LOG_INFO File=App FileSize=10000 NOFiles=10 [FILTER2] LogAppName=TEST ContextName=.* LogLevel=DLT_LOG_ERROR File=Test FileSize=250000 NOFiles=5 EcuID=ECU1 SyncBehavior=ON_SPECIFIC_SIZE SpecificSize=5000 [FILTER3] LogAppName=TEST ContextName=.* LogLevel=DLT_LOG_ERROR File=Test FileSize=250000 NOFiles=5 SyncBehavior=ON_FILE_SIZE,ON_DEMAND EcuID=ECU1 ``` In case of Non-Verbose mode, following filters should be used. ``` [NON-VERBOSE-STORAGE-FILTER] # filter configuration name for a Non-Verbose passive node EcuID= # Specify ECU identifier File= # Base name of the created files that containing the logs, e.g. "example". For further file naming scheme configurations see man dlt.conf FileSize= # Maximum file size in bytes NOFiles= # Number of created files before oldest is deleted and a new one is created [NON-VERBOSE-LOGLEVEL-CTRL] # filter configuration name to control log level of Non-Verbose applications LogAppName= # Name of application (wildcard allowed) ContextName= # Name of context (wildcard allowed) LogLevel= # Define log level, e.g. DLT_LOG_INFO or DLT_LOG_FATAL EcuID= # Specify ECU identifier ``` A typical configuration file may look like: ``` [NON-VERBOSE-STORAGE-FILTER1] EcuID=PASV File=scc FileSize=50000 NOFiles=5 [NON-VERBOSE-LOGLEVEL-CTRL1] LogAppName=LOG ContextName=TEST LogLevel=DLT_LOG_DEBUG EcuID=PASV [NON-VERBOSE-LOGLEVEL-CTRL2] LogAppName=.* ContextName=.* LogLevel=DLT_LOG_WARN EcuID=PASV ``` ## Usage DLT Offline Logstorage Enable OfflineLogstorage by setting ```OfflineLogstorageMaxDevices = 1``` in dlt.conf. Be aware that the performance of DLT may drop if multiple Logstorage devices are used; the performance depends on the write speed of the used device, too. Create the device folder: ```mkdir -p /var/dltlogs``` Create a configuration file and store it on into that folder or mount an external device containing a configuration file. Start the DLT Daemon. This is not necessary if the DLT Daemon was started already with Offline Logstorage enabled. Trigger DLT Daemon to use the new logstorage device: ```dlt-logstorage-ctrl -c 1 -p /var/dltlogs``` Afterwards, logs that match the filter configuration are stored onto the Logstorage device. ```dlt-logstorage-ctrl -c 0 -p /var/dltlogs``` The configured logstorage device is disconnected from the DLT Daemon. ### Using dlt-logstorage-ctrl application ``` Usage: dlt-logstorage-ctrl [options] Send a trigger to DLT daemon to connect/disconnect a certain logstorage device Options: -c Connection type: connect = 1, disconnect = 0 -d[prop] Run as daemon: prop = use proprietary handler 'prop' may be replaced by any meaningful word -e Set ECU ID (Default: ECU1) -h Usage -p Mount point path -s Sync Logstorage cache -t Specify connection timeout (Default: 10s) -v Set verbose flag (Default:0) ``` ## Testing DLT Offline Logstorage The following procedure can be used to test Offline Logstorage: - Enable OfflineLogstorage by setting OfflineLogstorageMaxDevices = 1 in dlt.conf - Start dlt-daemon - The default search path of logstorage is: /tmp/dltlogs/dltlogsdevX where X is a number in the range [1..OfflineLogstorageMaxDevices] - Create the device folder ```$ mkdir -p /var/dltlog``` - Create the configuration file "dlt\_logstorage.conf" in this folder and define filter configuration(s): ``` [FILTER1] LogAppName=LOG ContextName=TEST LogLevel=DLT_LOG_WARN File=example FileSize=50000 NOFiles=5 ``` - Trigger dlt-daemon to use a new device ```$ dlt-logstorage-ctrl -c 1 -p /var/dltlog``` - Start dlt-example-user ```$ dlt-example-user Hello123``` - After execution, a log file is created in /var/dltlogs e.g. example\_001\_20150512\_133344.dlt - To check the content of the file open it with dlt-convert or DLT Viewer. ## Logstorage Ring Buffer Implementation The DLT Logstorage is mainly used to store a configurable set of logs on an external mass storage device attached to the target. In this scenario, writing each incoming log message directly onto the external storage device is appreciate, because the storage device might be un-mounted/suddenly removed at any time. Writing each log message immediately avoids the problem of losing too many messages because the file system sync could not be finished before the device has been removed physically from the target. On the other hand the DLT Logstorage feature might be used as well to store a configurable set of logs on any internal, nonvolatile memory (e.g. FLASH storage device). Due to the reason of limited write cycles of a FLASH device the number of write cycles has to be reduced as much as possible. But the drawback of losing log messages in case of an unexpected operating system crash has to be taking into account as well. The obvious idea is to cache incoming log messages in memory and write the log data to disk based on a certain strategy. Incoming log messages are stored in a data cache with a specific size. Depending on user defined strategy, the data cache is written onto the storage device、without relying on the sync mechanism of the file system. The following strategies are implemented: - ON\_MSG - sync every message(Default) - ON\_DAEMON\_EXIT - sync on daemon exit - ON\_DEMAND - sync on demand - ON\_FILE\_SIZE - sync on file size reached - ON\_SPECIFIC\_SIZE - sync after specific size is reached Note : 1. Combinations (not allowed: combinations with ON_MSG,combination of ON\_FILE\_SIZE with ON\_SPECIFIC\_SIZE) 2. If on\_demand sync strategy alone is specified, it is advised to concatenate the log files in sequential order before viewing it on viewer. 3. In case multiple FILTERs use the same `File` value, it is recommened that the following settings must also have same values: `NOFiles`, `FileSize` and `SpecificSize` ## Maintain Logstorage Log Level Implementation The log level setting of each user context in the logstorage FILTER will be treated as the highest priority. Other clients (e.g: dlt-control, dlt-viewer) can update the user context's log level to a lower level but can not update to a higher level. In case the clients need to update the user context's log level to a higher level, the new macro ```MaintainLogstorageLogLevel``` is implemented in the ```[General]``` session to allow changing user context's log level to any level or maintain the log level of logstorage configuration. A typical configuration file may look like: ``` [General] MaintainLogstorageLogLevel=OFF ``` By setting ```MaintainLogstorageLogLevel=OFF``` or ```MaintainLogstorageLogLevel=0```, the clients are able to update any log level to user contexts. By setting ```MaintainLogstorageLogLevel=ON``` or ```MaintainLogstorageLogLevel=1``` or not set, the logstorage will maintain its log level as the highest priority. dlt-daemon-2.18.6/doc/doxygen.cfg.cmake000066400000000000000000001753631377520261000176400ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### # Doxyfile 1.5.8 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @PROJECT_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @GENIVI_PROJECT_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = ./DOC_DLT # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, # Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @PROJECT_SOURCE_DIR@/doc/mainpage.h \ @PROJECT_SOURCE_DIR@/src/ \ @PROJECT_SOURCE_DIR@/include # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.d \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = doc \ examples \ .git # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = @PROJECT_SOURCE_DIR@/doc/images # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = YES # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to FRAME, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. Other possible values # for this tag are: HIERARCHIES, which will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list; # ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which # disables this behavior completely. For backwards compatibility with previous # releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE # respectively. GENERATE_TREEVIEW = ALL # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = YES # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = NO #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = NO # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @HAVE_DOT@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Options related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO dlt-daemon-2.18.6/doc/extended_network_trace_doxygen.cfg.cmake000066400000000000000000001754101377520261000244400ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### # Doxyfile 1.5.8 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @PROJECT_NAME@ - ExtendedNetworkTrace # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @GENIVI_PROJECT_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = ./DOC_DLT_ExtendedNetworkTrace # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, # Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ./../../doc/extended_network_trace_mainpage.h \ ./../src/lib/dlt_user.c \ ./../include/dlt_user.h # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.d \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = doc \ examples \ .git # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = @PROJECT_SOURCE_DIR@/doc/images # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = YES # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to FRAME, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. Other possible values # for this tag are: HIERARCHIES, which will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list; # ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which # disables this behavior completely. For backwards compatibility with previous # releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE # respectively. GENERATE_TREEVIEW = ALL # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = YES # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = NO #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = NO # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Options related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO dlt-daemon-2.18.6/doc/images/000077500000000000000000000000001377520261000156515ustar00rootroot00000000000000dlt-daemon-2.18.6/doc/images/dlt-multinode.png000066400000000000000000000523521377520261000211470ustar00rootroot00000000000000‰PNG  IHDR*cŌ˙JsRGBŽÎégAMAą üa pHYsÃÃĮo¨dTIDATx^íŊ mWyžŠĒۈ;÷rAH؈H4q°‹¤äÂd\—Œį˙%Ã`(š{đÄuqĘÆåÄ%ģÆUą!eb¸$a’…ūŅŌ•Hƒ,#Ā XX2‚'Ę88&î=ë]{īĶ{ŸūÖîîģ{Ŋŋužˇę‘úėĩ÷:įíuž÷|ëôéž§!„B!„B!„B!„B!„r­'<á ūW/Âē™Įņ` Š ų“Ö­^>„B!„Üj°§mZ_äIZˇzųB!„r+6*ĨIëV/B!„BnÅFĨ4iŨęåC!„BČ­Ø¨”¤o~ķ›ÕÆÆÆˇšõC!„BČĢfļQyøDu´~P=ŽŸlÆ:yühuâáæFÅĮĨûx¸:q4<ĻŖ'ĒîŨ<Ū[œ× ŦPÚ¤|˙÷˙ŸuÖY/ ß3„B!„Žkˇëû{˛ƒ~ūįūŋ„MĘo!„B•"õīI5­đ–ęÂöwü{MyjĐiĐĨnŗŋĐŌ†`ģęfž÷:÷įŦM-ˆ÷1-Ž16ē՛ŖëÃē^×vŽwÎK>–Åũé§+:7ܖŸxíÖ÷g7úå_ūåĮžūô§Ÿs#„B!T’Ô?'Õ´ÃõūúcLjžwŋQi7uŗží§;lTÚÍMo“ĶšŋÔFĒ÷˜ˇˇoTâŧíõÛ|tWs~ŌŊŋÎyÉĮ¤û9Ž=Įë ËņãáüÖĶ.ôļˇŊíŋ=íiOģĨ^*„B!„Š’öI5-q_õĻ$^¸hÄ÷ō•Åī…XM|sūbū†m›Ąæŧ¸ŅY\ŖûėūÎJ Ŋ]nTęãíĩGˇ{gŌĒũ>ôöŊķEjssą9׀ŽŧōĘŋ~ęSŸzg¸!„BĄĨū8ŠĻ-Ū'õ6čTuûíˇ˙÷g<ãŋÖį`ŊL!„B'6*žt˙ũ÷WgŸ}ö†ĩa“‚B!„JÖ 7*h”|đÁęéOúCa]Ψ—!„BĄbÅFŃ}ôŅęĪxÆšœ]/ B!„BE‹ĘÜĨMĘ3ŸųĖGÃzœS/ B!„BŋĘœõØcUĪ~öŗŋÖâÜzIB!„Z Ĩ7*„ yüã˙đ6)!„BhŨ¤~8ŠÁA„B!„Ę$6*!„BĄŲ‰ B!„BhvbŖ‚B!„šØ¨ „B!„f'6*!„BĄŲ‰ B!„BhvbŖ‚B!„šØ¨ „B!„f'6*!„BĄŲ‰ B!„BhvbŖ‚B!„šVŋQ9røz8üOsÃLiÖĄŲ‰ü˜?äšZäÄü!'Đ.ĨįKRƒƒ#TUūšüüŲÚĮwÍgˇøúC>SķĩOwøTÍWÃ}.ødx â ˙Ąæ+âÁ†?¨ųâã Ģų˛øhÃ5_iøũš/Ūßđ{ ÷U՟ļ|¸áCUõņģ[üÉ>°…î?x×ÕK…ĐėÔÔgfČōyVS‡™!'Č ”[ƒĪ“\OĸĻ@WĀ:ž žŽāhÂãk ŒĀWCX|ĩ Ё¯„phCĄ ‚/‹_ ÅßũUė? Åū§ĄĐUā_Å-ū$÷Ÿ4Eũh(äGī­ĒGÄ=UõĮwŪx_U}^ÜUUŋ7pgāŽĒúŖ“ÛĢęsˇŪ¸ĩĒ>{KÍCīܸŠĒ>scā†Ēú´¸žĒ>õŽĀukĢęÅ5õ}īZŖzŠšļ×j6Čō9ÕöšĖF9ņ9fĢÁįIŽ'Ņöb#kŪhÜq÷ƒ¯‰ŧīÁcõ˛!4 m¯Õ9B~hJm¯É92—œ˜hŖBN ]hĸĘĸ8WČr@ėÄâÚ5j4 ÷mhŦ ¨íOtbŖn×ã5ņØR€´w04Cjú÷ņŪõņūC€ôׁņūڍĘļû›ĒŅĐŧá{ĨĮA€ ™*>Gģô6%KcÂΐnNtsĄĻΞæœ6Cb7uÛæDœ+=›ņ\ÍŗmŖ’ȑЀlˑЀ$s$4 Ûr„ü@ëĢEũˇôëkûímõĻsz9QīÛę[ú„ Dģb7*äڛô\Ijpp„ļŠŠĄŨ(hlAŗ!靃Ĩ†îÆãČĄCÕ!…ÅbŽŽ÷7&ŨF§ûuīKcŖrHãzœĀë†_wÃ՛ˇš͛ŧŋ)6*æ ß+}˙ 4S-ō %ÖP“ˍEŦĨΚŊ é|ĒÃn=̑بˇcŗ˛UÛŨÆcۜL|,ÆF%kސh=ÕĢû­Úīô‘ázKöņüúøōũ,ĐæŖ“ &ë¸Q!'ĐŪ¤įJRƒƒ#´U8 Ũ0XŊw::įõ×!“:Ūģ ņœØDtŪų ÁŅŋļ&Ž™5zG´{{ĢiR€ÄųBcĶ=Ūm$’÷7ÅFåsaŽđũĶc @ĐLĩȅ–n=.Žu›õpģ_gMãŅi6Ru¸5rBį†ÛĒã˜'Í}nˍfūxmøú`į\sŖ˛SŽ|äÔs„ü@ëŠE´,įDŋū:õÆÚz[|Ŋ¨Ģúünv´ķoƒ 9öCzŽ$588BĄ@T([ô6Kc1$Úæn8tÎé5%‰ãŊûą¸ŨitŧX‰é\{ũ돊aˆķļĮã}׏ĢwSÆüŗaŽđ}Ķ hĻZÔ÷rĮÆĸ9V×[§‰72¤ûu¯;s ]`cŖ:Įë ËÆF8_÷2#™Q!?âĩáüxîR’-GČ„z5,ē5ĩ|;UoŊë›ãąŸˆį7uŪ9g6ífdˆuܨhoŌs%ŠÁÁj c‹Ū&by,B|,á…xë3ŲÛ>;Ú6 ŠãKŒpN ¤æXęúÔFERĪĶÜŪãī¨$īo’F#\îSƒA3Õ"ēlĢ#ĄÚĶX*CšFŋn8RuØæS8ĻųžōņŪ&(fFb~5 íXŧ=°QQŌˑЀlˑЀė9GČ´žZdCK¯ŪŒÛÛęMį$ęǟõõ=BN´=Å kšQ!'О¤įJRƒƒ#TÁ¨8wû7Îį Ģl4 ׄųĩFšŠļęy՜B~ôš!ōĄUiĢnWĮ>c•ríMƒ{‘ÁÁjžô+æCá}=„€s U6Ÿ į†ų´FšŠļjz•œB~´?y‰?ą%?ZĨļjw•xí3VšQ!'ĐŪ4¸ĄúIžJ …ˇ—đë¸Qųt8'\¯5"@ĐLU?ĮW ųA~ oǟËĢÄsNŦrŖBN ŊiĸJ|R¯“ Õ ˆXĮFãSáx8_kD€ ™ĒyN¯ōŖų^ȝšįî (!'VšQ!'ĐŪ4ŅF%>‰W€ 0įŠ ‚nčũEx xˇĐÛĻ %ũįE§đcņˇІ@@Wüm ô'ü>§`hÃ! ŋ–Ą_D‹((úŧgDa҆~´Qp4áĄw1ēß…EDAŌ ` cZ#ÍTũįqNČōyU˙ųšr‚œ@95ŅF%î°aŽh4S™ĪY˜Z#ōM,ķš ķAkDN ]hõ•Įmø›đŋø$…y˛q ū%`(ƒ#O8üpø"?æųQ태˜?äDYdĖ ÍŸÔāā؟Õ€,¨æęŌ+BĻGȃjŽ.=W2Ŋ@TsuéíģįÍv§–IȃjŽ.Ŋ"dz€<¨æęŌs%Ķ äA5W—ŪžkpŪlwj™€<¨æîūā'^#Ū÷ĄÕečVĻGȃjÎa~˜^ ĒšL9ÁF tTsw˙î'jBˆÔečVĻGȃjÎa~˜^ ĒšL9ÁF tTs”L՜Ãü0Ŋ@Ts™r‚ @鍿6)™ Ē9‡ųaz€<¨æ2å€ŌQÍ9l4R2=@TsķÃôyPÍeĘ 6*ĨŖšsØh¤dz€<¨ææ‡éō šË”lTJG5į°ŅHÉôyPÍ9ĖĶ äA5—)'ب”ŽjÎaŖ‘’éō šs˜Ļȃj.SN°Q(՜ÃF#%Ķ#äA5į0?L/Õ\Ϝ`ŖP:Ē9‡FJĻGȃjÎa~˜^ ĒšL9ÁF tTs”L՜Ãü0Ŋ@Ts™r‚ @鍿6)™ Ē9‡ųaz€<¨æ2å€ŌQÍ9l4R2=@TsķÃôyPÍeĘ 6*ĨŖšsØh¤dz€<¨ææ‡éō šË”lTJG5į°ŅHÉôyPÍ9ĖĶ äA5—)'ب”ŽjÎaŖ‘’éō šs˜Ļȃj.SN°Q(՜ÃF#%Ķ#äA5į0?L/Õ\Ϝ`ŖP:Ē9‡FJĻGȃjÎa~˜^ ĒšL9ÁF tTs”L՜Ãü0Ŋ@Ts™r‚ @鍿6)™ Ē9‡ųaz€<¨æ2å€ŌQÍ9l4R2=@TsķÃôyPÍeĘ 6*ĨŖšsØh¤dz€<¨ææ‡éō šË”lTJG5į°ŅHÉôyPÍ9ĖĶ äA5—)'ب”ŽjÎaŖ‘’éō šs˜Ļȃj.SN°QŲoî¸î’ęØsŸ æ‹Öč˛7ŊÖ\ÃԐ_‡FJĻGī>X§Üh‘o‡ųaz€<¨æ2儿Njpp„L“%pķåoŠŽ=į{Ģ{OŧĩĒ>đQGæÅņ8O÷ŨÜpũÁÎ<Ąá8´Ņ9_턆Ŗũžl,ÆęīŅN Į^˙ˍĐ9Ŋ†#<&cŖâJĻGĪDOFm rƒÜ˜yu˜Ļȃj.SNhî¤GČ4YŅ›>¯mĐk8tģ}q/ŧŊ†cųēî‹˙ōX¯iؚO/Žmcˆfūx^ęxĸá°ÎŗķÎhīœî×ÛæŠũ'O<ŋž§†c_ūĖ(2=z&zZĒí–nŨÄÛäšąbäÕa~˜^ ĒšL9Ąš“!Ķd Doí/•.Ņ}Áˇ{ÍBį…|ųēnÃaŽÅuęĐŧ¨wī/ŧØÆw%ÕܤŽw›ƒÎ×[īŧ†ķ—>ÂŅ{§ŗ×Xė0Īuw˜§û}ØŠáĐ}v›‰–ÔqĄą^Ãą&Ÿ5—G‡FJĻGĪDOKĩŨBnS#¯ķÃôyPÍeĘ ÍÔāā™&K zĶg´ z/ôēŨ}ī6Ë×uÎ[Ģ?ZŅ™3ŪG=Oīëfū­w"ã‰†Ŗ>ŋ}œ[MRlšĸwN÷ëmķô‹­Įŗ÷†c?ūĖhuķŨņW2=z&zZĒí–n}ÄÛäšąbäÕa~˜^ ĒšL9Ąš“!Ķd DoúERƒú…5~OÄCcÍ mwL/ÆqŦÛptįë~dcqŦ™§ķŽãâ3ÜŊæĀ8žh8ļ}Öŧ7O{ė@8ŋibâĩ:ŽßÃgÍ÷ÚpėĮŸ՟BÕ16*ŽdzôLôÔŠí.äš15ōę0?L/Õ\ϜĐÜI ސi˛ĸ7ũĩ›ŠŅ_ãéŧw_tÍãúK@ú%[}†ŊũˆˆŪ}U#Ŗųöđ×{Võī!t˙zĄ_†ßŧëžęāãNgŖÂFevDOË5<äÆ6Ö97ZäÕa~˜^ ĒšL9Ąš“!Ķd Doí‹ķ”„æaŽWŋčŸU¯zéy=ŸË\ü‹įWį=÷yũ†#<6­W2=z&zęÖīTÛXįÜh‘W‡ųaz€<¨æ2儿Njpp„L“%ŊéEyjŪãE7‰ķ†cķ­īĒÎ˙áß˙j6žņúKû Gx\cŖâJĻGĪDOË5<äÆ6Ö97ZäÕa~˜^ ĒšL9Ąš“!Ķd DozAž5 Vc‘ĸ€†cķâëĒÍ‹Ž­6/ŧĻæ-WW›ožĒÚŧ áMWV›'Žč7á1iÍØ¨¸’éŅ3ŅSˇ~§‚Ü 7 äÕa~˜^ ĒšL9Ąš“!Ķd Dozž5Vc‘b]ūę—G™==-×đ䆁ŧ:ĖĶ äA5—)'4wRƒƒ#dš,čM/ĀSs24Vc‘bm~™ŪĄLž‰ž–kx Č rÃ@^æ‡éō šË”š;ŠÁÁ2M–@ôĻߊš-4Vc‘b]Ž›øez‡2=z&zZŽá) 7Č yu˜Ļȃj.SNhî¤GČ4YŅ[ûÂ;5Vc‘b]Žųez‡2=z&zęÖî”Xų‚Ü`Ŗ2_™^ ĒšL9Ąš“!Ķd DozÁj"ŦæÂb]Žøez‡2=z&zZŽßŠ 7ȍ%äÕa~˜^ ĒšL9Ąš“!Ķd Dozą÷ĐpėØp\g\36*ŽdzôLô´\ŋSAnKČĢÃü0Ŋ@Ts™rBs'588BĻɈŪôB;h8vņÎ(ũr(ĶŖgĸ§åú rƒÜXB^æ‡éō šË”š;ŠÁÁ2M–@ôÖžČNĢš°X׆#<6­W2=z&zjkejČ rc yu˜Ļȃj.SNhî¤GČ4YŅ›^\į īŒ6ČŖÃF#%ĶŖgĸ§níN šAn,!¯ķÃôyPÍeĘ ÍÔāā™&K zĶ ë¸›†cĮ†#<&­W2=z&zęÖäÆōę0?L/Õ\ϜĐÜI ސi˛ĸ7Ŋ¨ÎŽŽđx´flT\Éôč™čŠ[ģSBnKČĢÃü0Ŋ@Ts™rBs'588BĻɈŪÚÔŠš—†cĮ†#<­W2=z&zjëbjČ rc yu˜Ļȃj.SNhî¤GČ4YŅ›^Hį€ÕX¤X׆#<­W2=z&zęÖî”Xų‚Ü`Ŗ2_™^ ĒšL9Ąš“!Ķd DoáEtrŽ /ėVc‘bŽp[÷¯5cŖâJĻGĪDOŨú rƒÜ0W‡ųaz€<¨æ2儿Njpp„L“% oņtjô‚n5)Ö´áĐ}kÍØ¨¸’éŅ3ōÔĢߊ 7Č yu˜Ļȃj.SNhî¤GČ4Yō_4§æ†đân5)Ö˛á_‡û͚ąQq%ĶŖgäŠWŋSAnōę0?L/Õ\ϜĐÜI ސi˛ä-ž`NÍÍáEŪj,RŦcÃĄ¯Ã}iÍØ¨¸’éŅ3ōÔĢߊ 7Č yu˜Ļȃj.SNhî¤GČ4YōļxąœØXEŠum8Â}hÍØ¨¸’éŅ3ō´xÎOšAnXČĢÃü0Ŋ@Ts™rBs'588BĻɐˇø"91ÕĄ9°‹ëÚp„ųĩflT\ÉôčyęÖīT䆅ŧ:ĖĶ äA5—)'4wRƒƒ#dš,y‹/›ĢąHąŽ ‡n‡šĩflT\ÉôčyęÖīT䆅ŧ:ĖĶ äA5—)'4wRƒƒ#dš,y‹/ŽSrų-vS1Ä6•ÆÂŧZ36*ŽdzôŒ<õjx Č r#ŧ:ĖĶ äA5—)'4wRƒƒ#dš,y‹/ŒSĸrĢŠb]Ž0§ÖŒŠ+™=#OŊžrƒÜH ¯ķÃôyPÍeĘ ÍÔāā™&K@Ūâ â„Ä}ĢŠbŽ Âí0—ÖŒŠ+™=#OŨžrƒÜH!¯ķÃôyPÍeĘ ÍÔāā™&K@Ūâ‹á„ÄÁj*†X׆#ĖŖ5cŖâJĻGĪČSˇ†§€Ü 7RČĢÃü0Ŋ@Ts™rBs'588BĻɐˇøB8zgÔj(vb]Ž0‡ÖŒŠ+™=#OŊ:^5äš1€ŧ:ĖĶ äA5—)'4wRƒƒ#dš,y[ŧNÁÕáEÜj(vbŨ×jÍØ¨¸’éŅ3ō´x.OšAn ¯ķÃôyPÍeĘ ÍÔāā™&K@Ūâ‹ßDTˇ†ĢĄØ‰ĩ|g4 ×iÍØ¨¸’éŅ3ōÔ­ãUCnCČĢÃü0Ŋ@Ts™rBs'588BĻɐˇøÂ7á86VCąëÚp„k´flT\ÉôčyęÕō*!7ȍW‡ųaz€<¨æ2儿Njpp„L“% oņEo  ˇŲLė†ul8t;œ¯5cŖâJĻGĪČS¯–W šQȍ$ōę0?L/Õ\ϜĐÜI ސi˛ämņ‚ˇbâ‹ŋÕLė†um8ÂyZ36*ŽdzôŒ<-žˇ+†Ü 7vB^æ‡éō šË”š;ŠÁÁ2M–€ŧÅšUsņĩuĶ`5ģa}ÆĩflT\ÉôčyęÕķĒ 7ȍ] ¯ķÃôyPÍeĘ ÍÔāā™&K@Ū/p+$ž [ÄnY׆#ךąQq%ĶŖgäiņ<]!äšąäÕa~˜^ ĒšL9Ąš“!Ķd Č[|a[%j8Æŧ+*ÖĩáĮ´flT\ÉôčyęÕô* 7ȍ]"¯ķÃôyPÍeĘ ÍÔāā™&K@Ūâ‹Ú* /ÔfąÖ°áØ<ūnkÍØ¨¸’éŅ3ōÔĢéU@nģD^æ‡éō šË”š;ŠÁÁ2M–Ā9O{ZõȝŊĄ~Q[oēĸn Ŧ&b/Ŧ[ÃŅđ×ŋŖzüãNgŖâKĻGΐ䯜QÍ9ĖĶ äA5—)'بė'¯ūÅWV¯zū×īŧ­‚đĢíņÜ^Uá…ŋēúļĒ /ü B MĀ‚Đ,¸\ŧģĒBSPũÎÍ5Ą9¨.ģŠĒBƒ°ā7Ö\rÃoŋ>‡ˇ…†AüļÃ[[BqqÃEĄ‰ąĄ̈́Š5ąšMEKhÆ"j2"mŖąõũģđĮ~Ēzá˙ņB6*ždzô šAnĖ՜Ãü0Ŋ@Ts™r‚Ę~sūĪũt\0˜?j6nģë#lT|ÉôčrÃë’-ōė0?L/Õ\ϜĐÜI ސi˛4žüđ§/džøz‘y|xäĄO›ké՜ÃF#%Ķc)x͍ë'ĨæF‹jÎa~˜^ ĒšL9ÁF%õgŸĢ>øáO˜/lsFëc/÷đÕ_|é!s-ŊŖ5uØh¤dz,¯š‘Bëe/…’sŖEkč0?L/Õ\ϜĐÜI ސi˛DÔtčcžĐúXĮK§äfCkę°ŅHÉôXs#…ÖË:^ ĨoR„ÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ<`}ĘCkę°ŅHÉôķ„õōÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ<`}ĘCkę°ŅHÉôķ„õōÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ<`}ĘCkę°ŅHÉôķ„õōÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ<`}ĘCkę°ŅHÉôķ„õōÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ<`}ĘCkę°ŅHÉôķ„õōÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ<`}ĘCkę°ŅHÉôķ„õōÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ<`}ĘCkę°ŅHÉôķ„õōÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ<`}ĘCkę°ŅHÉôķ„õōÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ<`}ĘCkę°ŅHÉôķ„õōÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ<`}ĘCkę°ŅHÉôķ„õōÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ<`}ĘCkę°ŅHÉôķ„õōÖĐa~˜^ ĒšL9Ąš“!Ķ$ĖÖ§<´Ļ”L0OX/˙h æ‡éō šË”š;ŠÁÁ2MÂ4|ķ˟ŦŽyûĒķ~ôŸTĮž÷ã“M˙ņŧ ēėͯĢû㏚ׁ´Ļ”L0ȓōĐ:ĖĶ äA5—)'4wRƒƒ#dš„ÕsĮu—Tįü­˙%6j.îŊåŠęėoJü˙Íīŧ°zųŋ$ŽĢÁ°Ž¨æ6)™azȓ2QÍ9ĖĶ äA5—)'بŦ#zWSMÃũã˙ŊúĘgî3ĪiŲËš0OTs”L0äIŲ¨ææ‡éō šË”lTÖ 5 į>ûģzījęŨÎWŊâ˙ŽŽũŖ˙-ōŠŸúņęâ˙šŪuzˇôûž÷ÜęŅ?¸§wæjÎaŖ‘’éρ<)՜Ãü0Ŋ@Ts™r‚ĘēĄw3ÛĻĸ}wķ˙ú§?XũÖŋ{uu÷íīŠ\øÆ×V?ķ˙ü‹ØHtßõÔG8ôyķö6ø@5į°ŅHÉôĶ@ž”jÎa~˜^ ĒšL9ÁFå”xāWĢŖĪũÕęakl_x{uü´—U'ÍąSGībę#ú:žú÷ŋĢzĮEo¨ūĮ_|ŅäžģoŠžõw˙NõĐũw,æ8˙ŽW¯ûĩ_Z܆ųŖšsØh¤dz„ÕCžŦĒ9‡ųaz€<¨æ2å•S"ûFe˙Ņ_ãŅ/˛ļīhž÷’Z]ué…fCŅEÍ…Ū íÎŖzt› ˜7Ē9‡FJĻGX-äÉú šs˜Ļȃj.SN°Q9%6*'2~ßj~ōíÍņģĒĪmŋŦ:ū“ßSx`čxį'*ņžž§:ÚΚ¸ßÔĩ6úx†>–Ą¯õy^öŌ™„Å/ŧō_Voü_]ĖĨw@õNh{捞#”LnqúĶYōd}PÍ9ĖĶ äA5—)'4wRƒƒ#dštEĒš¸öeÍIŊi9~íįLJ=l4~ũŽæ¸‡zS‘:ž}ŖŌŨœėt­ūũ’ĢžVƒņŽ‹ĶŅXæö›Ž¨~č˙bŽ?đîø.h{æjÎaŖ‘’éŅ-Ų7*y OÖ՜Ãü0Ŋ@Ts™r‚Ę)‘h.´yĐÆdq,l\´™h7,íņ“ÍO?RĮˇmTz›ŸŽĩyÖßũŽÅĮ+ôYōøNŗ‰°øķ/~ē:ãIO\ĖĨk|üãˇaŪ¨æ6)™Ũ2°Q™ëOgy˛>čyá0?L/Õ\ϜĐÜI ސiŌŠæ"×OTŒĘ^ĸĸw,õ ¯úúœŋõôęķŸēßl",ūōkŸßÖHčķéŨÛ0_Ts”LnYu–ô6'§–%‚åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސiæëSZS‡FJĻG˜'Ŧ—´†ķÃôyPÍeĘ ÍÔāā™&a°>åĄ5uØh¤dz„yÂzųGkč0?L/Õ\ϜĐÜI ސi˛î¸î’ęØsŸ æ‹Öč˛7ŊÖ\ÃԐ_‡FJĻGī>X§Üh‘o‡ųazņŲāƒuˆ.údĘ ÍÔāā™&KāæËßR{Î÷V÷žxkU}āŖŽx ĒîŠÎ9ûiUuĪGjîūũš÷ßŋÅû~o‹ģÄ}Uõ^ņáš;ŇĒęŽ'ˇæönqÛ"›ī÷ÖÜ*îŠ6oišģÚ|wÃÍī¯šIŧ¯ÚŧąÃ wÕ\˙Ū-ŪugÍu-wT›×ÂõÕ=Ä5:ī…?XŊņßūŠš–%ĄšsØh¤dzôL šąČŒĨ܈yBn¸F5į0?L/Ū(9č)ĘB5—)'بė'į~÷ŗĒ/šĘ(ڙŖ@iCd…†#E  ˆE0B(T! Ē‘U(ūJÅ > ž …^…"¯BqGŽ=YUלŦ6¯žŊÚŧęļš+ßSm^qkĩųÎ[j.wĩų;ËnŽ6/ŊŠÚ|Gā’Ģ͡ßPmžíújķˇŪúŽjķâëĒÍ‹Ž­6/ŧĻæ-WW›ožĒÚŧ áMWV›'ލ6ßøÎx\ūģížęŒ'1ײ$Ts”Lž!7ȍ9Ŗšs˜Ļo dƒTs™r‚Ę~ŊYE;wÖ-TŪpyU…yôØĩfũégĢŋųēŊĻ% ”Lž‰žŦēœ;äÆ|sí]Ö÷qbȲÁ ōÍFÅŅ›U´sg C%rÍíqÍîũđ'Ģ<đ‡ÕˇžúYs]Ŋ#lTæKôdÕåÜ!7æ›hī˛žC6 ^o6*ˆŪŦĸÍÎĮŒc{ €P9ų¯~Ĩ:öŦgĮ5XæØß{vué?˙™ÁP_üŖĪ˜ëęydŖ2_ĸ'Ģ.ŗCn›hī˛žŖį™Y{Ų!č)ö†|ŗQq@ôfíÜq*7ũėŋŠŽũƒīIūÂaü%ˇc/¨Ūđ’Ÿ •G?ûis]Ŋ#lTæKôdžĄwQÛĮŅ}ܝĮ7ô8z~æēQYŽãVF>ũĀV]vÎíR×îVÖlè—Ņu{Ú¨414#ÉėXjFļešą;NUKužV˛žŗ—lHŅĢ=ŨNÕŪōuŨÚ[Ē‰ŪœēŨGįhg?QĄ§‡|ŗQq@ôĻâÜ%Ŋ ĐíNŌ~­9#ÍģÛŪíØ8Ô\k…ÔŊøŽG7\âXĶô„9ęņšxl§JsŸŨĮģĒĘ^˙” Đ9ŊP A§cńŠšôm?ąāséÍØŒ7*M&ėDoSbŒÛšŅ͆nÔÔõÛœĶæFŦõ­ÆcņnéĀü13B3ĪÕ<fdÛF%•™7*k“§*6*ŗBĪ3ĢÎ÷B¯öt;U{Ë×ukoŠ&z×évį>zׅĘ`Öt~Úį Ų°•5Ûs*öÍų5/˛ar䛍Šĸ7Ŋƒ°Kڍ‚Ž[ĐhīŧX˜uáwCāČĄCÕĄ& ĖãĄúĮëû‹ÆēMO÷ë^íbŖĸĀé]ŗ‚Ęžü)Á7*ąoyŠū˜†õn3_īlTvķ•ÅO5ļîŖ7§ĩ âséÃč9Ø­÷!b6ą¨ŋpŊˆĩ×9ˇ—¯SĩŪ­o5áv§ļÛÜhŲ6gg#Ë.6*Û˛#ķFemrí]Ö÷qbö’ )zĩ§ÛŠÚ[žŽ[{F],ېhžnķĄ{Ũ˜ŦžļyĖûøzŠqČ7Doí9wA/Œņîģ mC°ũx@‰ãËaĪY~ôŪ–Ž­‰c3ũ‰ŠßrhˆÔqĄą^¨„ĮĻcńJ̏ņØZĮEß;~”ĪĨKÖ÷qÅč1vë~ˆ^ ļĮēĩn[šQ_WĒõ­yT×:7ÜVVÄúmî3ԑ9ŧ6|}°sî.6*Û˛#ķFEy9Dę¸ĐXŅšąōšŠÉ)Ķ‹7ĸĻÎO•åĖHÖŪōuKŊÃ2[ķ6ĩߜ×ŊnLÖ$¯ídŲ~nT4˙˛G‘:.4ļÎŲĐEžŲ¨8 zĶį0wI/–Æb‘ļīœv ŗsN/dÚãī×;&[Į—ÃfqûôNx…J÷ÚTškÆŋŖ˛J°ēųîxŦ˜P9U-mÖJÖ÷qÅė%7Ú:‹īd6ĮęwëÚKåF÷ë^­ˇs‡ÜPčúՁ8^7áüÎ;§f.…Ėˆ×†ķãšKŸCīe‡6*ŠėČŧQ!7öŽŧ˛Q™†čŖ­ŅS¤W{ēĒŊåëēĩgÔÅâZũ4¤Íī\ˇ-k:=Å`ÖÜzo˙ÚNOŅ˝}ܨ ão6*ˆŪTˆģ¤Ëcąã„b=ÎĢÃdņcÛÅXĶ4¤Ža›pŽŪˆĮô‹s‰ëˇoT:įbĀuūęWw,ΟiŖ˛JPÁ§cÅ„ĘŠŠĘ¤č9¸\˙ClĢUĄwĨr#Ö ŽĢĩūöhÃąfcŌŨévjūøl3o›•æē†x^į¯~uĮbvdب{G^Ų¨LCôąT˙{%Y{K՞ÆzŊÃÛęB,įƒč^—ė+ÔOtŗæööįŠ=Eĸ§‰~šĮĩ˛aōÍFÅŅ›^ §FqÃ(Ē$Î˙B‡ÂečŪÄ7īē¯:ø¸ĶŲ¨ žŦīãŠ)%7ęĸyįVķ‘E ¯lTĻ!úXŽĶ) §ØŲĐGžŲ¨8 zk pJFa%q*¯~Ņ?Ģ^õŌķlo ˙âųÕyĪ}^?TÂc͚•*ō˜ąŅ¸,poāæĀËgrĘôč™čŠ[ŋS1"7ÚwCÛwcɍr×}ʏUf…éÅŅGˇF§‚žbdCųÎÔghî¤GČ4YŅ› ojšĪ›īįĄ˛ųÖwUį˙đÆī Ę7^i?TÂãŌXéĄ"™D:'p,đ‑GjBrÉôč™čiš†§€ÜØÆ:įF‹ŧîS~Ŧ2+L/ۈ>–ët Ȇm }ä;SŸĄš“!Ķd Do*ēŠQXá‘ĸ€PŲŧøējķĸkĢÍ ¯ŠyËÕÕæ›¯Ē6/hx͕տ‰+úĄ“ÖŦôP‘ĮLbIī’Ē š#pļėŗLž‰žēõ;äša ¯™ō#gV˜^ŧ}tkt*Ȳaä;SNhî¤GČ4YŅ› mjVx¤X×PY“ŋĐ!û />|øĐEgų䜞øÄËÃąWÔC ũPāū€ŪEŨO™==-×đ䆁ŧŽČŠ˛ÂôâčcšN§€l v@ž÷šĪhĨš“!Ķd Do*˛Š9Šß k*ëņ‹oō¸OrÆˇ=åŦ›^pėũ—ßúw¯Žîžũ]‘ ßøÚęå˙âe˙íĖ'ŸņP8§ûΨ>æĄĪ¤ī§Lž‰ž–kx Č rÃ@^O!?ĻÎ Ķ‹7ĸå:˛lØųŪ§>cYš;ŠÁÁ2M–@ôĻËHōO vĪģ-ē)Ö5Tnâ—é÷ 3žr֙_xû›_˙×˙ã/žXYÜw÷-UhNžÎ}V}IÔëį×_î‹Lž‰žēõ›rƒÜ8Uäuų1‡Ŧ0Ŋx#účÖčT dÃČ÷>ô–4wRƒƒ#dš,č­-ŽLôū¨nw˙Öy÷\+v¯m˙qĻöql,Æļ“›Pš_ĻßĨÎû?ä…˙ŸÕlXŧâ§ō/<ø¯›k%ŊKĒwK÷CĻGĪDOĪšAnœ*ōē‡ü˜KV˜^ŧ}tęxR´ųĐ&d7ŦëFeͲĄ‹|ė3RŌÜI ސi˛ĸ7TFz ‡nˇ˙źmįÕī˜ÖE}M۔čcmÃ˙Ųx~}ŧũcãםûk¯ÍMgūîųŽBåú;ŖįŌCEĮȓĪ8ãúw\üŗŅ°¸ũĻ+ǧœõdũrlĢsz§t?dzôLôÔŠŨäÆŠ"¯ģ͏e…éÅŅG§>'å6*dCųĶg Hs'588BĻɈŪTLé5ēŨygTˇ{īb6 A˙XÎī5"‰"žĶžKB%ΚĢq×p„ĮĨīEéĄ"cäÉg<ņ‘øNŗŅ°øķ/~ēzüãO˙Fsš¤t|ŗūr´Lž‰žšúΚAnœ*ōēÛü˜QV˜^ŧ}45<9lTȆä{LŸ1 ͝Ôāā™&K zk )Ŋ†CˇcsĐi,šæ Û@ôš†N˜ėĻá°‹­wF7áąiÍ`˜'>üן˙ÔũfŖaņ—_û|ĩąqā[áÚŽĖšĄfQ+™ 7ȍU@Vė?‹z˜m<:90ČÚūŽ ŋLĪFeæDo* ŒÔ/ôũ ‹/ôËcl5 íĮ<cuķą›†c§Īšģn8Â㒧ŌCEĮČSÎ|ō=7^}‰ŲhXčUŊŗÚ\ŪJc?dzôLôÔÔw.Č rãT‘×ŨæĮŒ˛ÂôâčŖŠáÉaŖB6 ßcúŒ æÁ~„…%Ķd Do*ž9p7Ą˛c¨„Į¤5+=Täqd€ŧęgŋü¯ŦFÃâ7ã˙ũ֙g<ņmÍĩ’ūŠO÷¯ûŒ‘éŅ3ŅSˇv§„Ü 7–×=äĮ\˛ÂôâčŖ[ŸSB6 Č÷Č>#%͝Ôāā™&K zSáĖBeįP GkVz¨ČãČ9¨áSģ×l6ē|éá?¨ūį§=õ+ášî?æöōĀeõ—ŖezôLôÔ­Ũ)!7ȍ%äuų1—Ŧ0Ŋx#účÖᔐ dÃō=˛ĪHIs'588BĻɈŪÚĸ™š{ •C%<­YéĄ"û įū¯į<ã?Ģš°šĄ_Œ}Ū÷=÷ą'=éI?Ö\ĶęæĀ‹ë/GËôč™čŠ­‹Š!7ȍ%äuų1‡Ŧ0Ŋx#úhŸûSC6 Č÷>ô–4wRƒƒ#dš,čMÅ2ŦđHąŽĄƒÖŦôP‘Į} cO9ë˝]đīũ¯ģŲGīž^ué…ÕˇÛSūüȑ#?ҜÛęŧĀ5õ—û"ĶŖgĸ§níN‰•)ȍĩhFäõōcęŦ0Ŋx#účÖį”X‚lX‹lč"ßûÔg,Ks'588BĻɈŪBĄLÎuĄx­đHąŽĄnëūĩfĨ‡Š<îc€œņ”3Ÿ|eķ °qî'=ņȗĪ<ķŒÛÃ×ŨpHē­Ī›ŸoíLž‰žēõ;äša ¯§˜Sf…éÅŅGˇF§‚l v@ž÷ąĪčJs'588BĻɐˇX$SŖĸĩÂ#چŠî[kVz¨ČcĻ’{Įâ­ũ“éŅ3ōÔĢߊ 7Č y͜9˛Âôâ ųčÕčT dÃČwϜĐÜI ސi˛ä-ÆÔÜ Ø k*áëpZŗŌCE37ËŌgĖõîč~oR$ĶŖgäŠWŋSAnōš1?re…éÅōŅĢŅŠ ȆīL9Ąš“!Ķd Č[,ŠŠš9˛)Ö1Tôu¸/­YéĄ"VúČFûsũBė~~ÜĢ+ĶŖgäŠWŋSAnōēĪųąŠŦ0ŊxC>z5:dŲ°ōŠĪĐÜI ސi˛ämQ Ũ ë*á>´fĨ‡Šų§DÅjĮë*aN­YéĄ"”Lž‘§^ OšAn$W‡ųazņ†|ôęt ȲaČwϜĐÜI ސi˛ä->é'$ļCŦc¨\n‡š´fĨ‡Š<:l4R2=zFžē5<äš‘B^æ‡éÅōŅ­Ķ) ȆŨ ߙrBs'588BĻɐˇø„ŸVp ąŽĄæŅš•*ōč°ŅHÉôčyęÖđäF yu˜ĻoČGˇN§€l vƒ|gĘ ÍÔāā™&K@Ūâ“}*BÁ™Ąąë*a­YéĄ"”Lž‘§^¯rƒÜ@^æ‡éÅōŅĢÕUC6 ģDž3儿Njpp„L“% o‹'ú\ Õ XĮPŅíp­ÖŦôP‘G‡FJĻGĪČĶâš<äš1€ŧ:ĖĶ‹7äcņ|˛lØ%ō)'4wRƒƒ#dš,y‹Ođ‰¨n n…ÆNŦåģáX¸NkVz¨ČŖÃF#%ĶŖgäŠ[ĮĢ†Ü 7†W‡ųazņ†|tkuՐ dÃn‘īL9Ąš“!Ķd Č[|rOA(˛VhėÄē†J¸FkVz¨ČŖÃF#%ĶŖgäŠWËĢ„Ü 7v@^æ‡éÅōŅĢ×UB6 {@ž3儿Njpp„L“% oņ‰=Ą8ÍĀØ ë*ēÎך•*ōč°ŅHÉôčyęÕō*!7ęīš‘D^æ‡éÅōŅĢ×UB6Ô߲aWČwϜĐÜI ސi˛ämņ¤^1ąĀ­ĀØ ë*á<­YéĄ"”Lž‘§ÅķvŐäÆNČĢÃü0ŊxC>ĪÍC6 {Až3儿Njpp„L“% oņ‰ŧj.žļ+0vÃ:†ŠžãZŗŌCE6)™=#OŊz^äšą äÕa~˜^ŧ!Ŋš]dŲ°Gä;SNhî¤GČ4Yōļx¯X´VXė–u •p\kVz¨ČŖÃF#%ĶŖgäiņ<]!äšąäÕa~˜^ŧ!‹įâ !ȆŊ"ߙrBs'588BĻɐˇøä]% •1ī|ˆu •pLkVz¨ČŖÃF#%ĶŖgäŠWĶĢ€Ü 7v‰ŧ:ĖĶ‹7äŖWˇĢ€l NųΔš;ŠÁÁ2M–€ŧÅ'î* ÅhÅ^XÃPŲ<ūnkÍJytØh¤dzôŒ<õjzäÆ.‘W‡ųazņ†|ôęv dÃ) ߙrBs'588BĻÉ8įiOĢųĩ7ÔOÜUđĻ+ęⷂb/Ŧ[¨4|ãõī¨˙¸Ķ‹՜ÃF#%ĶŖgČ rcΨææ‡éÅdŲāÕ\Ϝ`Ŗ˛Ÿŧú_YŊęų?\īŽWA("æxn¯ĒPÜÕÕˇUU(îĄČ#ĄĐ„b_pšxwU…¯~ῚÕe7UUī¸ąæ’ļxûõ‘o Ą ~[„pxkK‰‹. A!bh„ĀPh´(įÄ´„B!„2ÄF!„B!4;ąQA!„BÍNlTB!„Bŗ„B!„ĐėÄF!„B!4;ąQA!„BÍNlTB!„Bŗ„B!„ĐėÄF!„B!4;ąQA!„BÍNlTB!„Bŗ„B!„ĐėÄF!„B!4;ąQA!„BÍNlTB!„Bŗ„B!„ĐėÄF!„B!4; îE č€UĸŊB!„B!„B!„B!„B!¯:í´˙tKô>œąōIENDŽB`‚dlt-daemon-2.18.6/doc/images/dlt-viewer-send-injection-dialog.png000066400000000000000000000301521377520261000246060ustar00rootroot00000000000000‰PNG  IHDRØéíäsRGBŽÎégAMAą üa pHYsÃÃĮo¨d/˙IDATx^íŨypםđfmyãccWywk•lÅvWbīVe“ōÚŠ¤Û¤ÖŽ]IeW€h[ĢŌ6eŲŽMIĻd[ļœŦåÚ(RQIâĘKZ"ÅC–VŠ-RI€.^ 9␠E‚¨|ûũ~ķđϝé™é™éžų} jŊĢģ_ŋųÍ=ÃáĐz;iėĪĪĪŋ• ūkmmŊŠÜČ *ŽŊˇnŨĸ‹+ŗļļ6.Ŋũ6æ@úûû-Ė3ëčę>š+A•Đŧ=ņ!K@Ī8•JaK§Ûŋ?Ώå7œūæšĪ7ƒũ&MĐV[ļlAīâŒ5šĨšw#D[œņ•$Āz8cžŪ¨ņŅũå˜ąeYzë€F>IDč€|tUˇÆža{)~øčūBÍØ3*xMĸÆG÷WKQQ)yĖąa†Ę´*ē >ēŋÅãWˇš˜Õø QãŖû 5ãXYœ1P͝[÷Sė8đZ`hnŲÃ%ŽÍ*•Ũ-axĖx``€ Áfggšä%ü ōå1ã˜[œņÜܡ…[!ŒÁ…ļeƒķzĪ8 >Fyáŧ…ΏR*3ãiô[Œ+^Đģ8ãëם̪•^ {Â+{ŗOŊ%č­ĖŒg|Ŧ^Ŋ: wddŊ•™q1xÆø8Ƥ ʸ$‚‘āÕŗ…P]ŧ8?xđ S×'Ož<{ĮŸ˜˜(ëoH$pƈ$ÄŊss˜'fk;ž"€*Rē~¯¯ŽôļnŨĘĨl˜&ĶÚÚzíÚ5;Ecrn|öË˙ûūų‘&š= ‘4Õۏ¤éJēšŽ |ȈЌoŋcUaŨĶņƒ΅I#ĮņŒûWŧkNSä)+ÔĸۍŽœKŊ‘éĄĨĨ§[œ1áiē"Đ[Š)æ‹gLĢΘŽ5r|ô@4lqÆæĢ” × t‚hyžČ #ąMō‡äxC2Ē>z ĶŖüЉ= ́¨¨ 3vĮĩ¨‰" ŗgŒßgԝ r|ô@4,īWsÆ“xMĸē˜gŌØģwīú ¸’'ŋ,œ4įŒ[víRí9`ēétš+å•ä¨ĀÍ$5…ŨĘOŸÛ˜qU`Æô.Ĩ§œŊPã\2—G¯í^ķ;•^Đ;22ÂÚ=ąq<44Äok*ö›~=­āÂōÅ{olĒčÂ/^œOMM؟wæwãm``—*īm ~3ö… í":ŊŊŊ“““öķ˙ "Ķ ĮßøåÅÁnt‹Úų(9iü¨U‘­™wŗ¯)T6?˛ ˇßąŒ~Pæ…P°>´“1’9~įŅYžäō?~düšočv}¤Iŋ^‡›Ëę Ę͛#MučoĒŗēp,ĢžÉŪ6tĨ›ëģnYõÍéŎĮÕ˙ģU™Ū'īZŌØBc÷-ëŽ4ŅxzņÅš¤Ūx§‚c‰ŨčJa˙~ûã5YK€—Ö zíVøØ|ÎZå\b,}o$ĸ@á%K\Bš—8āũ¤€.?8ö˛Ÿ9IĀ“.NšŖ˜Ļž<éâHĸ(9‰â <éâ¸Äî,2/Ķԓ‚']I%'‰"Oē8ŪK ÔMü2ƒšu°÷ÉôRp2”Õüš[*KÍמÍšHKL¯ƒŠ;ręƒ']%ÆļtK\ƒr/ņmûĖ{ÜļöąĮ¸ŽžøfÁܚOģvŋyYáē‚]4nRĖŗËlĒ×3ĖG¯_—û œ(.šr/1NV#ø‚=—xnnŋņ¨[Ã3ˆpŊP8GM#Io …GÅ~‰ŖĸæPø‚ËŋÄ5¨V–x"X‚÷Ú<–øúõëÕˇÄĮķ§˙Z=×ķDûB­,qÉ—\Ö/,, ‰<õÔSXbO¸_Ž>¸jĀB”ÎēuëģößĖÄbš°šüˇLEpAbž ˆYâ’ŗ—X˛D䐂ą¤XX{‰‘/ϧ§O:uāļļ6ūäĻ(NGGĮČČÖÚÎÅXī}ûöŲˇÜÉšqŸĪį_Õsĸvņ*¨Īŧ’W_}u|| !ŧlŲ2^ŧ7Ú7rŲ V–ļt>jŸ­éOāUČŦ2VõėŲŗX.ûJTT\ΟîmŪšf ÷Uˇ§ÔēfŗVuR/ĄÃuŠķ ķiâ`<ĩ$æ’KJáJfĄi‰íĶKÜ×õf÷Ozįõ˙čũ´|ÛGæ;nŪŧ}{ ?–eu¤ļĢ%îXe؟ßļ:q ķj‰‰:xæÛ]õÍéæzKĸÛ%Ũč´+ļ4O* r†° ‹ƒËķXbØuĪģŽŽxgÝ Ē†%ļ؅ģ32ĢŧKĖ%/<ŖëííĨ/x o˖-øŊ…Ģķ^â´ĻnÔKQ ´v„§Y{čÚC-1-ĸF÷nÜíu§A§ŦA¸v%FADĢ,K\Z˛Ä%WÖ%>—ēd'§„čŠæ;Mp¨<–wÄ\ōcôĶ0B-1TĻ%ĻUāŠąÄfA—Á,ģ%%ŠqØV&Š‹$‰B–8K"—¸6•u‰Oöö9žÅ1Î?˜-Īģ8e]bIžKL÷ ö­ƒâhÔۜh‰1X]BÜ?ųZų›6*ë–0K f9>hVrGQrrG‘˛Ä%WÖ%–DáŊÄyũBspėëXbô‚.S!>J¸Ä(QĄ…Ž+ÁUÍŅž”%Ļɔo‰‹‡SAEŠ–X“%.ų×&Yâ’ķXâÆŋđš~Ɵ<ļ~īŪŊ\¤sޟ‰‰‰ļƒ““TÍ9ž0Á‡5{ŠlnK!ĮOOOč=O<û+Ž+žŗA#áē—5kןMé/J ÁzĪ}Í1æHĸĢzĀoX΋”c‰ĶéôėėlÁ˙"†[K¸×" suJŊRËąÄĸx˛Ä%WÖ%NÖ}q‘øš=—x.û_āŽ0ĮÉ{/ąŪš…Âč%Ŋī }]|Í9—8ZŞđįKTˡÄĩI–¸äjb‰įįįí-O´īōåËšžėEģCM,1îôÕ7"yÃ=—˛ŅžX,Ž+ęVČcŧŖąæ–ø­ˇŪęwÁĸpÉí‹ÅâēÁą¯ŊęŲ-9–øúõëÔW5fggųk§ōAûbą¸žš[âÕĢWķŋĄ˜Úwåʕ\ĪöĸŨĄ&–¸˛d‰KN–¸ä˛–7t´Än¸ÍČ ÷Fn8nyđų2xN.ÔKģā~š<KĢĘ_ųqíÚĩÔi˜PõĄ%ZåRĀzîßŋŸŋ¸u<ÎŖŖŖ}}}üOՊĸõöö.~ũB˙Ãc‹…ļŋūJD!ëKÄTŪ%$K,/+ˆ‘:„H ŽZ bÔqķ†[ķĢW¯âu îåp…ˆÄ䨨ØäääĖĖ îØpLŅlŋîĀíZqŸŧmÛ6ŧ&Q/ĸ¤^FyŖIˆ$Ú˛e —rÁĢ\.„cEE âsũúõŨŨŨ.\@ĐŌ+ A6;;›JĨ(|í7%ü™īĨ„¤ÂØÆņĸϚ…~Mˆ8Ûēu+—2ôˇŠŽ{z#H[[—ŧĐ7ęâA§Z((N(`Ģ]]]ô m„–ũOzLMMõ÷÷›9Á÷‹xúžoŨ?|ēuaūŌ#?|đË_ŊgnnN÷€öÕh64Ũ–e‹lņhųD1ÜA ˆBÄÅĸĀņ¸ÅÖ|hč‘r 8AŦâ˜CCCØ Ąe1JŽ :q`ŨĘûīüâįŋ÷Ũ/tŪõÕī|˙ā“Ÿģwé§šFšė¯ÚMmˇVuÜŧŲaoÔwwŦZ‚mU×Ml¸`ÕĄ§ĄĶŪˇidžŠÎęZXčj°ŋƞXõM\ZXh°ėûœzĢūÖ­4âe;xģí/=V[ÕuĢŅ–ϰļę›éë’튂rēšNģĐÜ`-AŠŽŽš¤Ë´du7­—(€g# ÁA|ZAōĻZđ0Q¨‡Ī ąŠ[”ÁÁÁ  †_{ęûī|āŋ˙Ķģ?ųî?úŗßūgV?Č}€ ąˇôuįôåŅ:ˆÉbßnoˇ;ˆí=;ôx7ÕÛa Vb{1ˆÍÕAL‘]¯†Šäœ^€]ė¯ųîZŌØ V-Î Æ,uĮZ)Q€žž.å’3‡ŅÛÛk?’JØ Fã“O<~oũ~øî˙ôͯ|ņāÁƒôzĐG'~Ņ{ ēŪ)Šgß ä`0Ōn~xaDáá Ä~ÂD! C§.˜eâđ‰š”;ˆ. ?Â!ƒ-Bčū ,A,’Ēšƒ8Y_<ŦŸ¨ž&;ÕÄ5õw×Ë,ǝNjD4Alež›Â]°ģũģ[*˜Ü-á™ßqA•Ē âā čĨ.lŨģ;Ãŗ1$wSÁŊa˜kU…™8žävĸt$ˆ…ˆ’ąH<š…¨Âv´u Ķî7Ļxfã,\Ęæ×.‚ÕĐ=1(ļTĐĖĒ_šxÄÂBĒĘ ģ2‘Û‰Ō‘ . âŌ‘ "JÕÄō ŌũČ€‚āĨ—ōäŪQn'J'Ў vÉb†•ą%ēE7šâ(›U  25‚.;ēPĐeĐAŒF*˜¨Qwš "@ō‚uđ b‚˕РĖ7÷)ļđ;ŸūķƒG:6mÚÄŲÜĢ`VeĒę- €Éė?päp׉§ŽīÅTšC1Kg]u4ŌÖdļۃ\ÃĖ2˜܃ÁŦĸėčuđëõl׍Į4ģPĻĒ.Ä\ąAܲk×SĪ>ÛĮ?÷O.žžnkkãz]ĖÕqˇ€ŖZLf||âėšsŗŗŗccc˜*w(Ž PÕ] 2¨Ũ1,`pĀŗËįsœô¨JtÕ¯<ˎņān‰ƒbƒXˆŠ“ ‰WÍA,Ÿ¨žŸ]¯ŋɏŽ!TÛ˙:¤ú:xĩKbČvT%~t y1ZÕ.Y/¨ĒˇT¨Į;Ķ|ģ[$ ?ē†h‚˜ļšŖZ)Á â$âG×PlĮ™ÜNT%~t ÕÄĸFH‹Ä“ ŽkÖŦ™/ œˆOŠüíʕ/^äžRÂYp.>ĢA‚¸z”írœhųōå\*=ĪsIW11144ÔĶĶsčĐĄv!â‘yôčQDéĨK—p‘•)Ž-ü9<00°lŲ˛ÖÖVdåáø~ė_BâXYXØ˛e ‚!ŠhÄ-ũqÆXôΈnt#æPõŖū@>=ž @MhN„&ĒŅ-ލe (*ˆąE ĩŗŗsdddzzĄ… 9Aģˆ={öPĀų14?¸yķŗÜ§ÔYˇsxæ2ŌTĪûxĄ9)į-ĢÁūWƒšŗĢž™KĄ-iėæR6^')¤áááaGrÍ {Ĩ¸)ƒ-Å âĻĻĻcĮŽ]¸p!+ˆÛÚÚĐĮ‘5?˙­/}z×ēe>ø#Gîŧī;Ë~đí/mũÉ.Ļš{~žŪĒC€ÖYöëÂUKėmĮĒ%ØZĢ:hKÕÔö:ü €ū튛 –ũü:Ģn~~„BÖjčRŗBčZįŠdëjė˛osú’/Š]vĻ ļˇĒËn„"Ė<bKAÜ`ÕÛ#P¤cÖY(v7ĘšG QØßßĪ•p°ËéͧąÕõčyäc b*ˆ_ē˙Ŗ§đŪą_~hęÕwå•?ėūŲÎ=ôŽÔ`wĢ VÛUvxĒxĩˇŠí#eUę3ˆ­†Nė5Ōd1Š8ŖUߤĸ6+ˆĪ7!ælVcWVŒf‚˜b!é b5‡B9Ũ\‡˛bĒRKsŨŪînŧĀ % Wų\Ę@Fr%:ôĀmÛļ *ˆ×˙ø/ûŋšdĪũīûæg~ëūĪŋ˙ü˙}OûũˇqŸĸƒÛΆLg2ąŽR&NŠņĒL&FŠįyÄæí„#ÛŗÎbTŅø4†éŖČú<Ø#KG ģģ›KeĶáQ#Ą‚A×øįŋüKŽ=øÎūŋyāīųuĶķÜįEGm^xg/v4į~ŠggâÂđˆ" ˇ´´l-1ÜE`ÛÛۋ¨ā/dc~t߲/~īŽO|ũ ŸzlíZŒá>/ K,Ģn;Įf´—.x Œã.uĶÂwųâA$ÁPA\ Đ|Ņž˛*ä<đՈša>č(Ä:ėüPh†Á;(vũØņ›Á$jũh21‡ĄûĪĻķĮ;gđiŠ`PŅ숝IÔ ~āÃņK/ŊÄ߸"DlŧüōË:”s1v ?">–Ä"Ų$ˆEâI‹Ä“ ‰WåAŧëõ7ŸaģüDūƒ…å%ށ*bē6Q ŧÄ1 A, ÄKŅąeY\ŠTņ‡ĨkĨĀKą5ûĶcĒŦ D7:Ēf‹YĻ8Ęf5$ē6 GĐ]…á%ށh‚XĶU*¨~gü9Ē{q)tmĸ f™ "˜šhĀK1Ą+tTOPW0Į°{™čڂá°\ųā%ށȂtm%B×&J—8ĸ âĸkĨĀKUÄŖãĮ%…*bQ $ˆEâI‹ÄĢō –•čG>T>tmĸx‰c@‚Xˆ—8âÄôį#‘˙) ]›I˙ųœ.GUäÄKÅą#덊­ģāč”5G5*tm&œˆKŲüڅ^âˆ,ˆQ ˛YP=ÜfŖƒ_{‘čÚL8—˛ųĩ KdŽ/q Ä&\!muA5/ļSÕS˜1 k3áŽqTENŧÄ1eĮ]›(^␠â%ށ*bųP‰Č€„ˆ’ąH< b‘xUÄō ũȀʇŽM”/q H‹ņĮ@ąAɟąŅAÜ[GW@AŖk#čå’bVuŲ]~x‰c ĘLŒ¸b FŨåŧ—îÕ-f• ēė@×Fh¨EĶ-î‚đÃKaƒ˜ūåĸŧ‚XWuA—ĒÄQ%î1Ôbļģ[čچ魃nt„†51—…—8B1r°_ãǏä.ŪQP=Ėlô@]Ž —K.ēË]~x‰c Ø Ž9ē6Q ŧÄ1 A, ÄKUÄō IŪ€’ÄĸH‹Ä“ ‰'A,/‚ ž˜˜xnķæ5k×ļĩˇsSœ`V˜fˆyrSY W*'sp Ä7w#2öîŨÛ˛g˙O[?19š~ÃîȨėec>“Í-{îÄ<=ã8ßŌxĮ^žņY$ķ˜î#›-Ž^]õlw4šĐE¸?ÅņĻM›^ÛŊoÍ+m÷žyüŸZ:00Āú⊠ˇDõ,ĸŊ5Ģ…Á|vī=Øy´w`pøø‰˜-wĖãë3šf—ЎT0™-žˆŲe–Ėvŋ1ÄŅĢĢží!ƒģĨ⊠büĻū›GŸūWĢÛn{˛įļ}öōåËܑĄ×ˆčOz€9ÆQÍËôôtīé3ŖŖŖ(÷ Ŧ}ė1j7šî8ŖģĘ%ŖKoŠ`2[<ŗË,;˜í~c<éÁŽŊrž(äø *6ˆŅ;>>ņ/>šôŸũņį^Üš§e×.îČ k6ˇÁ#Ãīč ķéčėBajj ŲRģ)߃{NÉķ ž# =ÛI@/ĩ›Ûô`Į^~ņCÅ1āžŗŋŋvv“N§š50Ė sÃ}…û~=¤ō?Š8c~t3Ē<ˆéÚD5érž6ˆį bQqÄ"ņJÄô6¸Ū:ĒØV]›šŽũˇ—iĢ ĒYūVs”#ˆŠ@ÕōŖk#4āēH~Ø2\io'pŊ5ĢēĨüčÚĻA[]PÍ"ĖKî‰EâI‹ÄĢš –ī¨>5ÄĸH‹Ä“ ‰'A,O‚¸züíʕxŧđ`•΂sņY•5kÖp_‰áD|JƒqõXž|ųtšā\|VÂ%†ņ) ÄÕÃX%å8×͛7šTbž'’ ŽŦ‰Đ,Ërlķââ7npG‰áD|Jƒqõ@`AĖĨĐÜAĖ.ŽƒS[Ũî.(<ˆ‘ï_ŋ.AsŦū‚¨ˆ˛¸Ž#ˆ*ÜáĸLu*›.ĢÎŦö8ŸŌ A\=X§BC¸8ļyqņÕĢWš#>]@Û8ŸŌGƒqœ!°Ž—‹#ˆgggšŖÄp">ĨA‚¸z °zĘÅÄ333ÜQb8ŸŌ A\=VŽ\922‚‡šÔpœ‹ĪĒŦ^ŊšûJ 'âS$ˆEâI‹Ä“ ‰'A,O‚X$^î noo— q–#ˆGGGÍ ~ņÅąƒąōōË/ë ŪącĮņãĮ‘|9ˆ¯]ģ666ÖŅŅņÆoP‡Ą>)TŦĄá VeøÂüņ…Æģ)|ŽŒųųų… <ä& ‹dA ļ´´ôöö^ēt ҋ̰pũ“““hZļlޟƒ4Zž‚ŅŠ‡ĮIĩāĢōĮË‚9žĘ@gAkČ eęž}ûˇ¸^ĖßÂuÎĖĖ 3Ÿ8qŨ­­­tņ!ņōˆCÔŌVŖØMœ={ö Dąíé陞žFĸŨ¸*¤å‰‰‰ÁÁÁÎÎN Úšsgss3nŸ…ˆ $n…wīŪ}øđáS§NĨĶi$_bägüÜ##ŽāHÔ¸ģĀ3^ 'OžėëëEÆŊũVá üÆA>Fn5pˌŒ BÄÆÆÆŽ¨O6ãϟ"Ė_ĻIqŒV¤d8ĸ‰Yˆ¸ApŌ+1ŠXŠŪŦ¯īĨ!âCVÉ b!’H‚X!*LąBT˜$b!„¨0g"æˇā”e~~ūρ>%„§KEöŽĢ 7ƒ1wf’/vÖđ<;;;333===ĨĐßBᇲ%Ō&’'R()Ō)}`‚r,'\ķcT7ķ/vÆąÆĮĮ/\¸JĨ†‡‡ø[7…BBÂ:wîÜųķįGGG'&&T‘Z͌Lš×NÄTBn§1)|ll {BGGĮ̝žē, ÷ˆXâ‡GQĪ<ķĖ‘#G>|ôčŅžžžt:tŒ\Œdä[ķŗÄv"Fšž—ˇĀ¸ųŨļmÛŌĨK[[[ŅHŪyQo’Dî…æéĮ~%ā…VÁũ‚Aĩ­[ˇr):mmm\Ę?ÕŊžėÜgÖ-[¨[dQäŌõëסˇˇ÷ööž={wĮȴȡČēČNęˇ,ŒF"C†Ļ,|ęÔŠW^yåÎ;īÄĘqāÄéÂŨQ•qSˇúS‹ã– ~p„E “ˆ×=Ŋņö;–éTšÃGa‰ØÄOõü“2gƒNÄeÜ?ūøã˜ä‰'čo8#ß"ë"}Ņû;S˜qˇ<>>>44ÔŅҁ}ЁüĨ˛\LQ†õDŸ/\r0~L„Åəˆ‘yšdđlÔ NÄæa)ã;Z°å’‰#ĒČĢ---‡îëëKĨRcccČēôf1zíDŒÄ<55…$=00pāĀė€=)ŠŠ¤įtq°įāÆ.ū‡›ķW‡ŽŋyĨ÷ü‘í›ŋ;‘>Ì\ÉõHņĄsŨĶ*{‘"B’ĸ9ąžĻÂ%ÅĖnÅÜ;’/Ąŗs%gH5îD ČĢ;vėhoo?yō$nŠ/^ŧ¨oŠ1ØēqãŊ/DÜßߏqf"vøÅ†_Žúßwf¨ølĶŪC_˙ö}=ö~žžâŊŨŊgĶ;Žõ>ōw­æYŪÁÔŲ°„ū%IËZՐSÛëŦÛˇ§¸ÂHSŊ}DÖŲ`Õ5p%'Z#ˇŽFžĒRߜVk^ēšŪjėĸ2Ž•˙ÂH7×-iėæĘ­Ž†\§á8ĸĸBžGŒTˆ;GI‘oMP.ϝ–:ßŗ†ÚP"Î& ōjss3æyėØąÁÁAœÅ;Ŗ‰ãüņ[ŗSųåem{šOwžöō‹žxōûëˇ=ūÂļ^øÕŠõ/Ŋ°÷`ÛáļæÃ/ūđĨĮīûĢŋēûĻú3A§‘ĻÅkįÛUÛą!Ôl7.Ö반›FkUGĮ*ßíę͎UV U§c œ¨íφ&Ũ^×tŪ^#ę# HhV=ĩ;GĘg™,Ģ2n36DĨBģ-›ÎŲ ^ÄĖŲFÖV…fĖ–ā ‹×œ@}ŠDŒ mtdšĖŖÜąãG•e2SrĖ™‚IÁ‰˜Î‚ĖHe:5=…€v1qG6ŋDÜÔÔ´˙~JÄ.\(0÷ė}yįŠ?üŪíđĐ=˙ãį×?pīŸė~ō¯ü/oūäî§˙ãˇžūŋV~÷öīßû'ßņŅ_÷ãũĮđn&ûŪĩn;ŨŽÚ)y“!ęL›)›mœ¸íų؁õ˙3ĩúߤy÷Ųo˙F×7ßõķģ˙āÂČ0ī`Ę~Ø‘ˆŅéJÄ\æ}€[ŗßšČĨn™3oM˜3‰š“ļ>ĢG"VėlŧČNŨv.ö{k"\"ĻbF}ŊŪŅ>klôLĨę Õ76ęü›iĩëFFÖĨvĮ[’ˆE U=˙üķ‡šœœäĻĸ•3›Ô“ˆ2.§§§įWŋú.Đė"Q&âšššŅŅŅ'V˙øÁ?ûđæ¯ūķ=Ëwß×Ūĩ˙ëīܡüˇ_øÆøŗŽųųÎœ9ƒ_wŧC!T†vŨ G‚ĪP;h‰ a§äÅ^*r„‘á§–ņäBFĨwdD™ˆģaüøø8Ž…#9rŋŲŽ=zúôiähũÉ8ā BGˆZáĻ nuåY?´˛yĄĮFQÅüžėhŒ8įőæ C‰Ũ eÛ|Ї ?&Bˆ*å÷LGc%1PÖsãîpxŸHņĄũīŽķBšXSG~|„UŠŸęęɎm4‰˜ōKņøpU„/ĖE=BˆšSĒDŒęÃ?Œ1B!‚![RūÕ$ !DYI"Bˆ “D,„&‰X!*LąBT˜$â¤:—ē4:~…4!’Û?”æIÄI…DĖ˜É!‰ØS\1}ņWBĶģ°/)lG{ފYę-w"Ƹd ‰×3¸Õk!JGą§X$b¤G!¤|Į“Âörđ›s$#g"vTZüڅ(IĞbšˆu¨ėnq<ĮhîŊĀoGluŖ.˜üz=—B$‰eÂu!ŠÃņ”ûIĞ*Ÿˆņ8qIĄĒŲč×â.˜cHđ^āŪҝÅA7:z=—‚Ü‹ØBDŽ${Šo"ÖtģF- ËfP¸ŽpSˆuĖ2Qmf¨ˇ<<ąÆMūO nUí´ĸ ${Ē|"ö„ÔĀĨ wKs'b!âO৘&b‘“$b‘D’ˆ=I"NĒąąÉÔčeų‘Ÿdũ n9‚…AąBT˜$b!„¨0IÄBQa’ˆ“ęœ|éHųŌ?’ˆ“J>5!’Hą§X$bûī(\//>wE˙vF‰˜'ÍŨîėnҍKˆI"öTáDŒg;—2Ü-ō ~ãuģc@žĮ/'ŋ;bĖ™KŠŖ îSp¯E’Dė)v‰˜˜íTÆV7ĀŅčŲåāØEķáąÆM 7å™Ļ…FAåĀ}Š$bO1Ŋ#6ÛũZ< ŽöœÃBŽƒ¨îˆsŽ"_ˆ"Âuƒ$bONĄ4W$ēJđ,ÛC]Ĩø•‰Ŋb–zcĢ€;bp7R‹æn"B’ˆ=Å"‹ø%b!âLą'IÄI%‰X$‘$bO’ˆ“JžôG~’ø#_úãIąBT˜$b!„¨0IÄBQa’ˆ“ęœ|éHųŌ?’ˆ“J>5!’Hą§Ę'búk„›ōWØžtR0Ë@ŊDWíÁÜɡÅŅëæ™ˆé \ņįãŪ+L‹DėŠÂ‰Īm.Uˆž€c&TuO/Ė„1ÆĻËa &ĪF͝ˆ1ŪQđcpīĻ Da${Š>c ōŽđô&ēJ ˛ęôíÕw—į`“ntôēw7ųĩƒ{G]ÎĢfŲ-L"Ļ‚Žjf‹ß^Á!Hž-Ž^ˇœīë˜epW hĸ’ˆ=U>‹Âx&b!bNą'IÄI%‰X$‘$bO’ˆ“JžôG~’ø#_úãIąBT˜$b!„¨°(1Ú) ƒ$b!„IąBTXĉX ŸˆĶéô†_ūōĩ–jZAU4ĸ‹šĐĮZ¸¯P|…›â­°ĨžČ n ņáåÂĐY7Í<”ã°ž%/t^÷d4nR¸)ƒ[]]9;zŨ-&Ī^ŋņ4˜pSö¨ ĢÄQ~*œˆÛÚۑ8F/ũŨĪüÛĪüÅg˙ú;ŸøĶeúô×mGđP<Ō~ģ„Ą8„—^ēí;_ũÍöGvÛāČîÖũ9—.ü•F"ō… >`ȃ”‡ßÜBNŌŧ¯ģ7ßņ€˛Y5šÛũF:„Vã*œˆ×Ŧ]‹û¸4<ųī?÷Ŗ'ÎßÕyæ#ĪôüŪĪÚoûØgW?ũē0€‡ú0fĪ2ü†™íîaēÅķ~‡-ZēĻ×^īč9yėäéū3C##įGGG/^íî9ŧt˜Ē‰[3—`6ę‚F-jˆĮŗŦ9Ũc<ĨŒ'¨:P#õ‚.ģģ<÷ĮÂsŒ7ŖQ‹'ĪŪ⯀‚ÚÍ.*›-&ŨPđÜ+H…ņÆM›Îœ9ķÆūƒøÔŌ÷}ęŽ÷ũ¨ũ=Ķū[˙õŽ~ę }ƒčÂęÃ|˜ũrG{^ÃĖF]vĀ,—-]WĪą'O!˙^ž|yvvöęÕĢ“““x\‚—Î1UĮå¸/*¸<ĩœƒuŲ]ŗL-žU÷^įļWĮŽēō€~ģģšė.˜<‡iÔbŌOÁŊ‚T8OLLŦß°aīŪŊWŽLõœč}îĨ×ļ6ũz`čÜĖĖ Ņ…<ԇãaF•č*ŦŲģep“ÂM 7G vB-åa.ŨšTĘžžtirōr˜ĨãéfpkæĸÜ-TĐĖvÍŨĸŠ7)ܤp“qj'Ôb2tÕŪSŅU*•ÍÍŪAázĻ…+Æ^fŖĩ+ã&ÅQõcSĮ`ܔÍŨån1yöæ5ŪŨâÜ+´ 'b‚”ƒ<ˇysãęÕøŲ´iĒ9S°€8,<Ų„(R,ąBÔ2IÄBQa’ˆ…ĸÂ$ !D…I"NĒsŠKŖãWøABÄž¤až‚9ĘD<77GY$—š|1ŧ‰PDŦahČDŦ>‰Č¸I„ ‰XˆDHL"撐Ž%S›Ü‰ëÃĨpō/„(@•$bŨâîĪÆZˆu¨ėn1 Bˆ‚áyäÆ}J‚ąŲ¨Ëî˜åš2›Đnvų B䋞\ĀuC˛ß#æ&…›˛sąF-ĩÆķ=bŦ†.Ē×ŗÅQBD.‰XFū°NˆDD\Í$ ‘’ˆĢŲØØdjô˛üȏüÄüOU~Ōú“D,„&‰X!*LąBT˜$b!âčŅG}衇–W \ ވ¯ÍG ^˛&‰XˆØYąbÅĨK—đD›Ž¸\Ž‹¯ĐĨ/Ų$‰XˆØÁũžASÕW„ëâ+tŠÁK6I""v(+]. ú –ĀuÅŦ:ēĸœ•ŠŧduA6ŽGĒāÃ_˛Iąąƒg/žeãQCBáR†nĄ‚{@„pEÁ‰¸°K¸¨¨|ĀāK6I""vđėÅSėLԐP¸”Ą[Pp÷F Wœˆ ģä0ĶĻ1ę¯Wo‰_‹YČWđ%›"KÄčģž!‰XˆbPV:5$.eč*¸D(8+|É~eļ‡i!îđl #ø’M’ˆ…ˆ<{¯^Ŋz˛4V×ŗęčŠ Ž(8sÉę‚l\W¸IĄ*ĩƒ.ĢNUë^ƒķ|ÉĻ’$bD,DÁđė=Z]pEÁ‰¸Ö.Ų$‰XˆØYąbÅšsįÆĮĮģĒŽWü9âZģd“$b!âč§?ũ)žÃ¸ŸĒ¸\_›ŧdMąBT˜$b!„¨0IÄBQa’ˆ…ĸÂ$ !D…•ˆGGG‘ˆÛÛÛ% !DÁüqss3ît)ãÆ#1ū‡ĘÔÔņĀĀĀĄC‡°:8+HÖVæ…(ĮP¤üŽLíÁrÁY”g_‘Ww먁;Ũ“'O{$âššš™™úÄōŅŖGˇnŨŠ}|9 GÍūĄĀ–”z6‰Øá‡§hF‘âCûãkpáÄŦpvQ)§ QJȨO<ņÄîŨģ;::úúúRŠÔØØ˛.t<|x,ŌétJĨ2--mÁ‚´ JŦ…˛NĢ’›{ŧĻh5wqå*­Žtę DEÉRšÕĻDą&5˛(ī@ß:ŸēyE‘1kÖÄt¤˛VÅ0Œ\nę×@DDŌI‘™¨Š4n—-L’ôļ˛s:ão€Ū7ek§---K–, Ũŧyŗ=E˜Y eŒÔČĸ ĨTš°Ÿ"ƒŠôĘTYž”aiž,5+IBŌ%‰VƔ3”ÆÁZižL“eN­öŠ=$Š1“—(Ú+°’ĘŨkčA{yfĨĘʔR‹‘āŽEē$5˛(YĘȡæuߤ$ŠÛĻŦš~ũz\\œ¯¯ozz:Ã0= Đ Ã˛,Ëā(,Ë._žŧĻĻæ‹/žŽ.†aŦŽ)C°,ģfÍšĶ§O9r‰ ũƒPv˜M›6:t¨  ĀÛÛÛÕĩĀ`…PvŒôôô;w~ûíˇ~~~ŽŽ1„˛|üņĮ¯žúęŅŖGĮīęZ`pÉž›uđāÁ„„„üüü°°0W׃[Į‰>\ŧÕožžžGŽA"€CāuP‚į)pB€CĘ‚Pā„2‡ ”8Ą Ā!eA(pB€CĘ‚P†AH§–3TÚö‰]ŪŠU1Š´7bņo­Ēķ\A(ÃāÔūęs–Րԯ+yéíoG7-Žpv™}…P†ÁNą&•ōØzŊxĩwŽŊfsWۘú:ĩ\.—3čRÃ@B(à' –9jSÚũeŠ•,˲k¤:ŌĒ”dęgQ‚1‰‹d)čpÀB(à§;W& –Üôf"'IIą&&OĘ0 “p€tįĘ(Ciė)K“‹ĘÎéL  $„2 vڭɲ%ũčģJ‚eûÛ"´û3dÁ"IR!˲•Š”w€‚e‘Æn3˲,[˜tķšĐ;„2 Ní}X†Q’Ļ}<Ą(YjũJ ĢéRvۈiYš,KI’(ŌSĘû˛=GĀ‹S¸‚aô”8d„Ģ p–ekkk+*****ˆ($$$$$Äß߯rNA(ÃĐg0rss׎][__īîîŪŌŌBD ­­Í××w˖-ąąą<ĪÕeaL†ŧâââØØØēē篯FĢ x{{ûųųåææFDD8š6€.c#”a¨*,,\°`ÁÕĢW{]ŌËËëĐĄCršÜ U؂P†ĄŦ¸¸xŪŧyö$˛‘——W~~>úËāBe˛ CPPPuuuŸÖō÷÷ŋxņ"ƗÁUpI Yšššuuu}]ĢŽŽ.33s ę°zĘ0ą,ëīīéŌĨ~Ŧ{ë­ˇž?^(:ŧ*€^Ą§ CSmmm}}}˙Ömhh8S~ÆąõØĄ CPEE…ģģ{˙Öåķųg*Î4559ļ$;!”aǍ¨0Ū!Ō­­­zŊūZĶ5Į–`'„2€­m­Ž.†)„2 A!!! ëōų|ąXÜÖÖæØ’ė„P†!($$¤ßŠÚÚÚ*‹[€ũĘ0ųûûûúúöo]‘H4vėØ~Ÿ'¸Ie‚†Ų˛e‹ˇˇw_W …ëׯg†īΈÂz…›G`hęßmÖ&L(((āņxcƌÁũ#ā|¸y†,—››ëååe˙*BĄpûöí<OĀ ‘ÁUĘ0dEDD:tČÎ\ …YYYͧO'"‘¯h€K° Ą C™\.ĪĪĪ÷÷÷īĄį+ Į˙ŅG…‡‡‘¯¯¯§§§kčcĘ0ô †ĖĖĖ”””††>ŸßÚÚJDÆ/D"ŅúõëŖĸĸŒëôõõõņņquŊ0|áyĘ0Œ455)?ķŨŋŋ[ąbÅēuëd2™X,;vŦņÅŠž@ä+B\‹aŧ8† ĄPxgøĮ˙yœˆF={öl"rwwįģķ=…ž8ŗž2 /sįÎ-((˜;wî×_íęZēÂ%q0ŧTWWŸ:uŠˆJJJjjj\]€eFrrrĸŖŖ‰(:::''ĮÕåXP†a$;;;>>žˆâããŗŗŗ]]€e.JKKf͚EDŗgĪŽĢĢ3ep B†‹ėė돏8777"rss‹‹‹Cg8W_°pãÆĀĀ@FjüĀ—––FEE]ŧxŅĶ\€Ģ/`¸8zô¨ŸŸ_hh¨yJXX˜H$:vė˜ ĢčĄ ÂųŸ%œîÂđ }ÍÍÍãĮ/))  "ķžĻĻfęÔŠ—.]ę÷ ũ Ã0,h4š)SĻŲR@@@hh¨FŖqIUV!”ačÛŊ{w÷ą ŖøøøŨģw;š€ ”ačĢŽŽ^ētŠÕYK—.­ĒĒrr==˜2 ;øĀgaL€[Ę‚Pā„2‡ ”8Ą Ā!eA(pB€CĘ‚Pā„2‡ ”8Ą Ā!eA(pB†<ḠĄ Ā!eA(ƒKéÔrσ\­#ŌĒ•ÖúŦ.SUZË ŠÔ:Zn1­}CŨŲžĶ¯#čy[ZĩŠt{ ”ÁÕ5lģÂ$Iŗ´*FZžŌ>ICJsļę”OZ(ą˛uĢélēÂĄa›vž“öCBíū˛Ôʎ4U¤WĻ–mPë¨įLÖŠåršŧSÛÔSÖĒLŊmķí;RYvÅÛ˙ÕąLGw]ŽŽ4O1oĘbWZ•2Ŗ(Yę°~9 }epĩ Ĩĩá+ŗtįĘdÁ’W,#";úÉ1Y,˲•Š”wĀb(A‘ÎjHŠRŠ”¤ąė:k÷—ĨV˛,ËŽ‘ęHĢR’ÆÜ5Wi‰tę„ŧ˜J–eYļ2&O™\DįÔ å)lēÂrá,JPiI‘ŽIŒ´üMĐ „2¸ZĮEˇčę_ģ?ŖKĮē;:!/F“—Đų\œ$аŊcM›4mQ:ŠŖÃ­UI“‹5Ŧ†6¨u$ –EûØV‡Čė€P†AD‘ÎVNÚĐ>¤at°ė'+Ō5¤ė˜Ũ퍁N-—æÅd%)’˛bō¤ōŽ\6 #ßb“Ļ-J’˛L=i†QRjj$;× j"=Ĩ\ÚõęĸdˍôŒaY–aÜãār à§ Ā!eA(ðÃ0ŒĢK° Ą Ā!eA(pB€CĘ‚Pā„2‡ ”8Ą Ā!eA(pB€CĘ‚P†Ą/<<ŧžžŪęŦúúúđđp'×Đ„2 }'NÜģw¯ÕY{öė tr==@(ÃСlŲ˛ėėlĢŗ˛ŗŗ—-[æäzz€wôÁĐ×ÜÜ<~üø’’’€€"2āĢĢ̧M›véŌ%@āęˆđŽ>&<<<ĸŖŖsrrēLĪÉɉŽŽF"§ ”aXˆī>‚‘ī’zlA(ð0{öėēēēS§N™§”––644˚5˅Ut‡P†aÁÍÍ-..βŗœῆāœčƒáĸ´´4**ęâŋ<Ī`0j4šĐĐPW×Đ'ú` ‰DĮŽ#ĸŖGúųų!‘ƒĘ0Œ˜O÷áp†/`ŠŠŠ™:uj]]¯¯¯ų˛eî`f„Ģkpž€€€ĐĐЂ‚‚)SĻ ‘-ą,[__åʕŨ‹H$ōņņĐ] åūhnnū駟nܸáęBú€Įã;vĈÁôˆvž÷Ū{ îŊ÷ŪĒĒ*Gms0ļ- †¯ŋū:+ķí˙*Šũáŋîî#|F´˜oĪ_ĪŊ.ĶąË˛uõW|÷ ÛĮ‹Åūņ?ŖT*y<^?*Ú0|a¯Ÿū9/÷ŧO””žšzĩéWŋōaīįŠ¯mëČåÍķÚZÛęüĮˆƒ&DΔ=ĩzãčŅŖû¸#gčW;÷ĄÅnܸQûÃ˙ųOc÷ÅpŊ7ī`i[ŗæææ¯¯Ëüā“[n=˙Ā=÷üέ#GzQû1ąÄ˛_KDlˇ)íËtLdYę2…XËšėO˙Ģ?ū‡˛ōķ™Y_ÔÕ_Y‘¸dÅĒŖFrÚąscŒc„rĪ.\¸œ”øMÁņķf˙!&Jy§ŸŸ¨Ë4ÛņÉëō_ęüá&ķļWa‰ĩ>ĩ1Ŋ}/VĻ[îĨššõbÕ%žö€ļh˙įG—,šõüē­“'Oîkƒ ^ÛŲf‹ŲnI›-fŗ…ûŲŧo[K§OŸ~(6:8øö?Ŋ°*,4Ä8ŅâĀ0”ÛweÜڍߕ§íøää÷į>ûüL&đ#ī;–ekkk+*****ˆ($$$$$Äßߟa˜Ú#'BŲų‡Ũ§ÚŪßšeũ‹›Ÿûã“+ãŧŊŊzXŌø˙n˙ĩ åNŗœʖŗ~ú_Ãû™_ėH˙ô/)­Lz̧Vxvļ3—CŲōŋœjÛ.ŪŨņúK/o{cÃÚG‰ļüs~(›§ä||xíŸv¤ž™˙č+xä}d0rss×ŋôÜÕÆkˇ‰ĮŠĮąõ˙­ŌũWčíąiÃ_cccbėÅÅĄl<ėĩk×Ö××ģģ쎴´‘@ hkkķõõŨ˛eËļÚÚÚâbŸ=w>+s[¨ėŽžtĄl\ĨRWŗ4îĨģįŪŠ~;ĪŨŨŊįc öˇķ` eãō\hÛ.rŗĶ^øĶæ_ėē#8¨Ë,†2{ōûsąŋüÂķņO=ŗmŽģΊ‹‹ãY:ŌG¨znņô)ąė –n°ėė}ÆË×r>ÚáØ]ģ2”‹‹‹cccëęę­.āíííįį—››ëđÃļĶĒ•čõU{ķŪøŊ.´ÛŲĩmkéōåË÷/‰Úļ5Åj"sÁÁ_ũķx0ęÚĩk.,Ŗ¸¸øžÅŠ×ÔĒģá=üefÎŊa/žųPÔĸÅÅŎ­Á=åâââyķæ]ŊzÕÎåŊŧŧōķķŲ_>}úôī?û›¯rƒĨˇÛšĘāí)ŋ>uZ¯\ŧļøøw‰ÄÎCžy}mįA×SvaÛvąmˋ˙<ņũßwĢm-āōž2ąėøG_<éöWßøĀ%X é¯'Žxîģ•á,Ëļw­ô”M_ŗlÁĄ’]Їõg˙ŸŖZ]ĐS6 ąąąö'2]Ŋz5&&Æ`0 \U]ŧõæ+O¯|ÄūDB'ũqõƒĪ&%\ŋ~Ũi;&íė’ļĩd0vŧûQō3šdīöcæ…5ņYģÖ×YËm˙„‡‡?đĀûöíknnîyÉÜÜÜQ>Âģwv™~ötõÁũ'ö|Xđ˙jî2kÖ|™÷(ĪĖĖLėėPÎÍÍ­ĢĢëëZuuu7yØöc~úé§}û=ųÄC7ŗģÁčÉĮī+øöûsgĪŨ˟MhgĢŌļ]ØßԍÆīß3Ļ:j×'L&öyųÍ7ßXŊ‰eŲ?Ŋô܊į°ė¤7]mūKōŽžųæK9ooÜ?˙õ5ŋÛÖÚņ˕a˜Į’îyåõMMMŽ*ØŠĄĖ˛ėÚĩk{GļĨŠŠ)%%åfÛÎo Ĩŋŗé% Föë÷žŠ‘#…÷Üū͑—/_î÷FĐÎV9¤mģ°ŋŠs˛w>ū胎Úī@‹hہĪ3x'§¯¯īōåËŋūú뒒ŠT𔔏nŨ:Ë7QmmíÕÆæđČ_[N|åŲ]˙ĐūģųZkĶՖ֖ļ֖ë'˙Š{åYūr6SÜxųڙō3Š–œĘĩĩĩõõũü䥥áfÛÎo ũ;jáŨũŪŅ ũûOö}ĶPßĐÖÖÖŋ- mšųļíÂūĻŽÔWõrM§ūƒ•wķ…Á|aėĘŋUé?œãŸĻwHĨ}sĪīÃŋûĪYƒÁāĀž§Q@@ĀÚĩkKJJ4 Ã0JĨ2,,lķæÍ555DTQQq›dœe7Yö‡â‚˛Ö–NƒN-ÍmĮ ÎÔVũĪ<…a˜@ņ˜3gU°SCšĸĸĸßlōų|‡vĪß"ŌëĢ$’ĀŪ7¤˙`ļgĖv̟Zũ‡s„Ĩ鉨úāĶ/§é‰ôŲüˆŸĪžãvŪâ‹ŪÕJÚü7=‘ūãšŖ˙渟œČ™“KOéYbûņ×LkgK‡_2‡Š%õÎūš/ŒŗŪ°úŨsŧéĨ=Ī˙}ÎČĮíkķ›åĀļíĸ×Ļ>ž:čö‰6××0[ö:ŊßÚtŽõ”âôÚ+;ļĀžņŸ0ēö‡Y–ŊÚØ‡3O}ēiĶĻĒĒĒ´´4N7eʔšsįîÚĩkÂÄN7ĮŸūūŧ››•ķ Ԝčô™›(­×ë¯59æēg‡˛ņ‘~hmmuāa“oLzzúÅĒÚÛoģšį‡‰)hĘY-&:üūĸ]•DD⇠Žf¯÷¸VP|AcÖęŽõ[sx÷âL‘øß\ÎxēįÍöÅ-~ŖŽ4^kiišzõĒŖF? OîŅV‘NĢíéZ$ņ˛‚ĢÚ՞N1mۅÕĻŪž}{ssKÃD:­Ļxæ‹ĪÎ$"'4Uė˜o9ŋúāęe|¯Pž×ÃĢŪŽ&":˙íĒģĻ ŧ§ ŧ§Íyæīz"ĘC0ōUĪ<.9Ã㞍‡ˆčđfQ›¯ō‘¯Ę'ĘßâáķÔܤ§<|f{ÎßĶCGbÔ(¯#xķæÍ;n,3x<ŪÜšsß{īŊúúú‚‚‚ÜÜÜĪ?>v3íßÚÖz3Ģ› χÜīØąãWŖ5 ß˜+V´ĩ]÷đčË;įŊäîųŌʧ˙ĀķīúķA2÷”ĢĶ6å|.,>íp{OYlåŨ2žW(ß+tÎ3ģ;}4Í=åï FNŒŧS0ōNÁ3…tžpÕŨŋŒü`䌹IšzĒũۖO‰N=?íÉŋîč)JRyøČ=|~77鸞ˆōˇzøl]•´ŌS4Įsū›‡ė;777ŸQ^JĨ2 ĀÍ͍[íl2-b&īûFGUÚ}'#fN3MÖ[y÷dž×dž—lÎętdŅS>üšĀûĩUĪ<"đž*¸kÃAÛ=hĖ”Qŋ›TlüžJJôá1*Ō4%ŗ‡ĪŠšI+<|fyĖû¤¯Ÿ \ÛöÜÔIIIMM×ÛW˜é*NöPļîíõ‹vI?ŋzĒĩ4‘ÖE­:Lôģˇ˙ņ}Kãɖ}ŅĮ3kLgčB’wĩ”<;ķħŸÛîhOŽz§ų—­OœH[ūÎļ–aYÖ`¸ąoßž .466˛Æøŧ'žxÂ××wîÜšĪ>ûė”ßH;U;5čÆ +ŋ>Y–2ŖSW¨Z˙“X,vÔĀ”SC9$$D čĮĪ!ŸĪßļm[UUՀ~cŪyįw÷lŸ;2gũĮ[OŊqüc‹OäÄÕ/ÄMÛVjŅGĪÚņUYëÕS­Ÿ>x|—ųŨŲü[ŽüįŗĮˆ(ėÍd9Éßūę_-WūÕ˛īūã™ųZŊ˙Ķkī' }ķäΎ>ōá-‹?úėdaķÉ7'đü;ŒŸø ŋNÚqí?Ģgžøâ‹|ģãÚĩ–+M‡žpáÂ/ŋüÂŊv&"ZúĀč¸V̝:s|ÚŌÚŠÄŗv|uēõęéÖO,ŪuHÛ52u!Éļ”Ž™ybīV##ãâLég%'šOĻNÎL~bG-Ūŧ8SüŲÉâæ“Û&g>÷ĎZんŖŪmūeë'ļˇ7˛ŊŽm{nę;wzxŽ\ą9f" ™fké*ž'úd‘W(?lå{De•ÕDÕßŪ°ęŽÁ{-7# " ėņ֔ Eķˆčˇ÷=JĮĪÖÚZčĮŸ<|ãsãč"ÂŌŌŌuëÖ&%%—””|ũõ×ÉÉÉĩ´üLŠī˜1GÆtz"ĢĀÃ}æœ_ûūĘ<…eŲ*ũbąÃūbuv(÷û—IkkĢ›l|cVŦXáííõķĪ}=y‡TL$žŨŽ›ĨĒžũĘĘģæß˙IOKåŋž8“fn~uuÕÜąqÕŨ øÔÖâzŽfÜ. " šščQ:~Ö8˜xģ4ˆ((Āū[¸.VũwbĀ­ÆËāua¸Cۙˆˆ÷,§“{ž|įŊ™ E°yjõÁˇ˙˛ōîx kŠ ["ĶWVŌŒÛ¤ADâˆEŅņŗ5zŽfÜ&›§CÄ+ÆFļ+V DÛvaĩŠ—/_>1`|Mím­%Q(#ŽŋūÖaãųŊŦ9ÂË1eIČTšųāįĨ§Z¯žji,-X5ņā3÷-ŪK÷ŊˇĄ|_tåč*õDúęĶS>˙<ŸˆūųÅ4ķ[Ģ]¸p)čöqƯ ×ŲP555›7o ‹ŠŠbFŖŅ”””Ŧ]ģÖøē/oīŠ:]Mđō[ßŊ0ÜÓ/ô<Üų÷iŋ•ŧüׇ-˙ō8y\ī=ĘsėØąŽz‰SCŲßßß×סëŠD"‡vĪß"šöëÂĸßä^l9¸Zšh-ĘxŊüSۗ(˙ûœöŌcÛ VŅÁgî_ŧ—îÛųjųžûm­!–HčÄŨyĸķĮ?˙€fŪŅĪ1qũ…Kâ ņƯoō‚¤lįŲ‹§âã'iŌmæ;䎞wŅ>Z”ąą§†ĩM,•Ō‰‹•į‰ôşgŌĖ;Ä ¸¨Ķ›§CÄ+ÆFļ+V9°mģčĩŠgüfʑ#ßÚ\_üčҞiĶ<ž0˜Ēŧåå˜˛dÕÆm“*…u ¸Ũĩvæ‰=‹Ã=ū%Í¤Ō Ģã8ķgŋ9ãÔķĶ"æn˙Ębnjž|ĘÃgÍû3Vŋ÷Ô[åœ>sAÔ>סõÕ××īÜšsîÜšSĻLŅëõiii/^Ü´iS—׿2 ķÆkÛŪŨļΞŗ,ôōxų­ĮŪũäų5Zų’ėÃÚēk…;ŋŖī˞lĻúČķI) ÃđŨ퍧ž+a˜-[ļŦXąĸ¯' …Báúõëoæ°ëëë÷ėŲ“]ZZētéŌ´´´YŗfY}Ėy˃ ?ÎûrņĸyũÛQ'â{–SŪsaņôéã„{ī[ąkķĸ°O"p&}_Ą#ęvį­^{ø8e>#Č$šņ\ų ĪÍĖÜļxĘž™Ũ?“NŅ‰į?íIÚĶ~IŲüĩŸ=š¸xšœˆf>úæû+'}ã]|Š)Šø­ŠcŨŋÛFĶÎ÷.úíúxųĸŲDGLSî[ąkŖąa#čû3zĸ>ũY5oũg=žxĘ "šųXęû+ũ‰Ö}öؓ‹§EŅĖĮļŊŋԟō‰HF_ŽđXZF3ž9ŊŌfŦXuķmۅũMũčãO?˙ÜęgV?js[âGwü#aQĮ­ĪâG Ž>LÄM\ļ{ušÅmÖķã ãL‹Š_$b‰ūÔrŸnÄۗOŋxúČņ§[Ke‰ˆō‰(h‘zÍÛjļ‡a+–e3?Ô>ĩj­ņŸy™ËŧyķŒ=(•Ęž‡Occc_zeí?´˙ž[n9ũŽÉƒ'ųwÜfmáØá˛Æ+ÍQQQDä)ôŧųjÉųĪž0 AAAÕÕÕ}Zk„ <o˘1BĄ°û  ėļēÖIDAT\ļlY¯ß˜Ÿū9(čļ*ũˇ=<=š;ÖæãĮŗ/ˆØǟō›Į|õÍ-ˇÜBDŖGöōęC  h;Ûl1į<û"ŗĮRúė—ĩ úøė Gĩmö7õ7n ôßŋ/ÃüHûîXëĪŖpÜŗ/L­ˇfíg_ą˙üWųãĒMųGŽģÜz뭞žŽI:;/ŧoÁkjÕogMîõŲ'Ž}ũųœ÷w~8}út_0nü¸›/€qū‹Sy<^nnnŸH$ ˇoßÎãņ|A˙™ˆžûî;;—ŧå–[æÎ™ųnÆßŸöÉūíkz˙ƒ÷/žeL ęo'íl•CÚļ û›ÚÍÍíąG|}ãßrŗĶz¸ c`Í[ÛüKī=ŋ´wöŽxrąšŋīüįPGDD|ņ™ÖâŅÖą,[p°ô­—÷íL˙`úôéD$ō9Ē×üúæövpäȑDä!đ;nŦÁ~æ‡Ü'>ģčÎČ`ĸΚ/<û^ĒĻņōĩˇļŧcLd___GŊĨ›a\úû˜˜˜ēē:[7é …B‘H”––æđÃļĮû;7̎gģĪÎįüęPnøĨqÎŧÕÉO/U,zƸH$‰ö›ŋ}jįÁĘ.lÛ.ĘËËįĖųŨ×GrBî°2ÜîōP>YRš(zŨîėī¸ÃtG¸CyúÍ`0dffžļ1åĘåĻÛÄãn“ÜĘ[ĨûīEŨ˙yōx.éŨ¨(ãšĮF“+C™Ú;%%ĨĄĄĪįˇļļ‘ņ ‘H´~ũú:l{°,ŗtá•ÆĢģŗū*õūĒŨÁĘÍÍ-xøeIЄ5ë˙j\‚!Æ?Āß9/âęS;ēPvmÛv—ūÎ7íČË}ģûŖî]ĘgĪV-ZúÂÆ×T‘sLĪÁ1Á‚Ë[Ú555)?sĻâŒ^¯'"ąX,‹ĮŽk,LĀˆ|EŽũķŨÅĄläüÃļS[[Û“—9ōíž=īöúĖßAʧNŸ<ņ;qķNķøŨ¨QŖüüœ÷đ6ûÛyp…2ÚļģÜė´ÕÉ/ŋšåÅø‡[NwU(ŗ,ûÁGūüĘ{¯ūyšbŅĶæzú}J 455]kēÖÚÖjŧÍÂŨŨīÎ÷zD…œe#gvŸŧģãõ?˙å­UO=ōäącÆÜbkąAĘWŽ4eŧ÷Yęßō6žĻēûŪæ.‰‡‡Į­ˇŪęüŠ=í¯ÔW?_ŨÜÜâįëc‘†ö´R¯Ët,žė/—¯^ŋnđŸ0&üΐ…÷%˜9ŗËŨ."‘Č‡Ã‰li@bl@¯SÖîĪŖ5Iļyįâņx“&M7îŇšÂk0~üņGgž6đæņx›ÍÉ<=<ŊŧŊ„BĄÕ{ĝMĢR’†eD¤SËUÚÂôtVŖbTĒÄ 2f”Ö¸ "]“XvnŖ™n6”;@ĢbĘhMĮ+w_X§Ū`šĸSËÔ:EReˇ‘eĐ–M'­Š‘îטžÚĒMJ§Ž…ĩ*FĨeĶĨD“ÅJH§–'Đ9zŧ‡ˆĮã‰D"ŸÖÖÖëׯˇĩĩšęÅ7ƒĮãņx<@ĀįķšÖƒ3¸vūâ‹/ˆčË/ŋ\ž|šC6Ø÷Ûļ †aŧŧŧŧŧŧŒílljĮ>2Š;7ƍ7‚7bā@ĀŠQŨš2ĘČ`2L˙ŒLՑBĸX“ēAš—Z™îœnĒ9tįĘ— U,IÜpÎÚ2ĻÎlĸĻrRˇ…%IY“ä Ŗ$"ĸČTĢ-"%J\ĸ "’NŠL ļy‹Ŋˇ¨#)‘,XBD$ –‘Õz‚a@ĐīgCƒŪÎÕÕÕDT^^~íÚ5Ëq0bĈ#F¸äōSîË"Sŗ:˙­S'äÅhbōÔ r"ėĻū^Ë2ö;ķēse֗Q¤ŗ,˲éŠî ëÔōĘbY–e+S#MŒL­dÛõÜ$íū Sؖ““MDŅŅŅ999Ž.¸G‘žR.5ŋÆEĨÕŠåŌŧ˜Ŧ$ERVLžTŽÖY.\”ÜuŠ#ÜÜ Ž"]CJ†a&!¯ûÜ.w[X˛0†’ĮŸP.ŖōĘî-bįŪ%i`l†šėėėøøx"ŠĪÎÎvu9ĀEĻ~d{g2ŠĐÔ;l˙J‘n:QĻHīĩįØ/¸N†‹ŌŌŌ¨¨¨‹/ōx<ƒÁ¨Ņhē<éĀĩ†áĀéN§ČÎΎ‹‹3žâwss‹‹‹Cg8=enܸaî?đæŽ3'ŽÄ "ô”aø8zô¨ŸŸŸå`EXX˜H$:vė˜ ĢčĄ ÂųŸ%œîÂđ }ÍÍÍãĮ/))1^˜lūĀ×ÔÔL:õŌĨK¸ä8Ã0,h4š)SĻtŋU$ 44TŖŅ¸¤*ĢĘ0ôíŪŊģû؅Q||üîŨģ\@Ę0ôUWW/]ēÔęŦĨK—VUU9š€`L†|⁺0Ļ Ā-eA(pB€CĘ‚Pā„2‡ ”8Ą Ā!eA(pB€CĘ‚Pā„2‡ ”8Ą Þp\†Pā„2‡ ”aĐǘÎTZ""ŌŠåíSäj]—)S‰H§VŠuį›6Ōˎm-ÕÃ,€~B(à ĄHgY–e5‰”¨aY–eĶD¤UIķb*Y–eYļ2&OjĘČČTĶ4–­ŒÉK0…õōI %:u‚y ļrŌ†ŽĖļŊãtÅ@@;„2 b:õ†˛ÔŦ$‰ņ_’¤Âžâ͘ÉDDEytæU Ģ›;âÆÖŠåršœaTZ‹îpGgũc0eÜdÁ+S‹’Ĩíų)͋ÉJ’td˛$АM)—vŽW­JIÆū7›E ÆiE˛Ö2äuę Ļe*SË6ôÖŋč'„2 b’`YŲ9‹tÔiĩÆY _°ÆŽpG?™ĖC!,ËjH)WëtįĘ(Ci ņä"ã6#'I;ī,)kŌ†öEœrx0,!”a0S,‘%'´wZuęå†Ö{°™ŦU1‡‘eÁI°Ŧ{ŒwŨ‚Zž@YĻžr¤Ŗ B5EzeLžÔ>Ū%õ؂P†aaöėŲuuu§N2O)--mhh˜5k– ĢčĄ ››[\\œeg9;;;..ÎÍ ?Ā-8ŅÃEiiiTTÔŋy<žÁ` Ôh4ĄĄĄŽŽ  NôÁ0&‰Ž;FDGõķķC"!”a1ŸîÃ)>ā, _Ā0RSS3uęÔēē:___ķeË܁á ^ŒCSĻLA"7puΞlmmmEEŸqãˆhÚ´i555ūūū øē4€N0|CœÁ`ČÍÍ]ģvm}}Ŋģģ{ssskkëȑ#¯_ŋîëëģeË–ØØXįę2ˆˆc#”a¨*..Ž­ĢĢkll´ē€ˇˇˇŸŸ_nnnDD„“kčĄ CYaaá‚ Ž^ŊÚë’^^^‡’ËåN¨  e˛Š‹‹į͛gO"yyyåįįŖŋ Ž…P†ĄÉ`0UWW÷i-ãũ~T@¯pI Mšššuuu}]ĢŽŽ.33s ę°zĘ0Ô°,ëīīéŌĨ~Ŧ{ë­ˇž?^(:ŧ*{ § CPmm­­×¤öĒĄĄáLųĮÖĐ'ej***ÜŨŨûˇ.ŸĪ?SqĻŠŠÉą%ØĄ CMEEEKKK˙ÖmmmÕëõךŽ9ļ$û!”ējmkuu 0|!”a¨ é÷ģPų|žX,nkkslIöC(ÃPŌīTmmm‹ÅŽ­ OĘ0Ôøûûûúúöo]‘H4vėØ~Ÿ'¸yej†Ų˛e‹ˇˇw_W …ëׯg†īΈÂ끛G`ęßmÖ&L(((āņxcƌÁũ#ā¸y†&—››ëååe˙*BĄpûöí<OĀ ‘Á…Ę04EDD:tČÎ\ …YYYͧO'"‘¯h€Kč B†,š\žŸŸīīīßCĪW(Ž?ūŖ> '"___OOO'ÖĐƔaˆ3 ™™™))) |>ŋĩĩ•ˆŒ_ˆDĸõë×GEE×éëëëãããęzaXÃķ”a¸hjj:S~æLÅŊ^ODbąX,;ÖøâT_ ōĄ .‡P†áĨŠŠéZĶĩÖļVãŨ%îîî|wž§Đgö€#Ę‚K⸥ ƒ„N-g:¨´íåjåbZĶ™iIkÛi_UĢ2-eūÂ.Zuį]8BD kĸ!ĨÜz"*Ō $ļ/Ž°œ­UIķb*ŠŒÉ“vÎ`Ez—Å{ĸŨŸ×ŋÃč B#ŚTĘ;Đį~ĒNŊĄ,5+Ibü—$а[dˇ÷”ÍnSöëÔrš\n1IĢRf%KûĐą° B%I°Ŧ+ʂ%Ŋ/¤U)ÉÔ+Īĸ„öāÉbY–­4ū:P¤k#S+íīXØĄ ƒ’î\™]ņڙ$XVvÎĸ­Ķj­õļuįĘ(CiėK“‹L̘ö×ī_vA(Ã`¤Ũš,[ŌNĒb‰,9Ą}0Z§NPn°6" –EĻVļ_ŗ…I}N€~C(ÃāŅŪ{e%iÚŠ’Ĩ6¯´čN‘^“gZAšSi=pé)åvlĩ(Yjãt#@ŋáæŽĀÍ#܂Pā„2‡ ”8Ą Ā!eA(pB€CĘ‚Pā„2‡ ”8Ą Ā!eA(pB€CĘ‚Pā„2‡ ”8Ą Ā!eA(pB€CĘ‚Pā„2‡ ”8Ą Ā!eA(pB€CĘ‚Pā„2‡ ”8Ą Ā!eA(pB€CĘ‚Pā„2‡ ”8Ą Ā!e.aYÖÕ%€É˙ķÕ¤‘‘ΟļIENDŽB`‚dlt-daemon-2.18.6/doc/images/dlt_core_dump_handler.png000066400000000000000000005112741377520261000227060ustar00rootroot00000000000000‰PNG  IHDRë‹§–…D pHYs  šœ IDATxÚėŊKŒlŲUĩ;Ɯkīˆ|œ3ûQët:N§ķļÆĖîßŋO˛ų„ŋúÕ¯~øÃžį9"žôĨ/}āˆˆŨn7Žc/Āwۊ žÕāœž˙ũī˙ęWŋ @R­uˇÛĩūë^}īt:N§ķŽáĸâ~~~~pppĄZōŪ8Žķ<_8‡/ė Î[EÁˇNÖyžĮq,Ĩ´“Jí-ÛL5™9ĪķjĩęiJN§ĶétŪ1\(woƒžwpp@˛”2Īs/ĀwŪĸ >"¸§)øĖl;ûŅét:N§ķޤ\I-ŪĖÚÎæGčÕ÷Î[Ã0<:::;;“ôāÁƒžŲét:NįĖ4MqxxāŲgŸ}ų嗛a¸÷ûuŪ ūâô¤õzŊZ­Ė,3§ięG§Ķét:Î;•[ˇnãHōī˙ūīˇ|?2ˇ>lÉÚöęÚhƒN§Ķét:w­ņĀ;wÚ4ú6ŸžÍÉé.šÎ[œŌÎ}ík_[¯×ķ<¯×ëöžxgw:N§ĶéŧÃ8>>Ūnˇ-ēŖų‡Iv MįmŖāˇÛíŅŅQ ™1ŗW_}õöíÛ=vĻĶét:Î;˜&ÖīßŋrrrAĶ|įíWĢÕnˇĢĩbīœiīæū&ît:N§ķNÅŨ×ëõfŗšēsģŨŽãØ]4ˇ‚o˙kg‘Úđ‚qŸf ^¯y¨˙Ė­žō3zĸäĮØ>ŪŖ'`Xļû¸¯)\š‡7Ū^yÍ|kl;N§Ķy Đ´%ĩÁĢ$/˛hē‚īŧ ŪĀ$/FŽ‘†!3Ÿž|ÍužvĮEÁßžų¯9OÖ7 ĖũŗzLŊĖ×-GôđæōĪÜ?ŽŊÁēåõJŸHÖ­žš¯™ž™=ööڗÁk^k>z)qų öēgË7ēŸ|ĸû˙ú?¯oÆö›ũ|:N§ĶétžxSN ņúōšē<€|ÂBę.Bū8Īķņ–ąt1ōBO›}CĮėá{5ü§īäŠ~Ī›ûūét:N§Ķé ū›ĢŊžD’xS:h¯õ`<éí¯wqØ5÷χÖ-Ŋâ'}&´Į÷Á XfEw|§Ķét:NWđO‘VR·īãķ–ĘĖąE-ŋ^ĒĘš6ĀcBxõ€=–¯g1ŸsyV˙ĩÛN§Ķét:ÎĶĪoÁ§ÂĮÛ~ŖĒđQwų¤ˇŨVĖˆ}_¨påÉōņD<žđé}=ôÖØvŗz§Ķét:Îž7ąĪ7Úˇ×v&HÂôXÛ'wpđ1¤î>į7ūîŧ>“ûUÉCŨ¨ŧîáø¸Ë†oH?ŅiŠ˙Ē4 GS{ōˇŲ[íõv:N§ĶéŧŊ<ŸāVZUĶņŗ}âJpžĄ‚{ŊĶCOĻSK^¤0$`|8+ķ!ŅÎ7:Â#Ëđŋnyë‘oķûīt:N§Ķų/æŋ˛™™ŗĐĻiŠ=Æ X ™ËEzƒ;ŋæR… ĖûKŊri)ëT ‘HĄ>l†Ņ•›éú‹ A$@B!¯Tå/ī!5téŽ!ĩK(CYžĖČĒä>rūĩÛŧ<đĐūGÆũcŊæō´~¸‘‘Ęvyjwžšj?ûë.™Š=Wŋužįvåüüüâí×˙;NįŠŗŨn¯|l/ŸÆQkŊø(ŪívW?„mzÂÁÁÁéééjĩĮ1k˜Ųוy¯)]gŊūܯ‘¯FÄëĻGņuKÚå RĐÃÅī7ÆÁŊŽn7ĪÅØĄ$ /îÃöŸ‰$˜”‰ )Â÷y2—ŽĄË`™ëŦķ—•ú+ûÉŧļ6oā75uϘ_įbzôĒëq]÷ˇáŖnĖ´G,J‡a˜įyšĻ6­lŗŲŦVĢišÆqŨ?:Nį)2 CĢ’˜€ŗŗŗããã‹)§M —RĖLŌééézŊžqãÆųųy¨´Ũn×ëĩģŋúę̎oß&ŲFĸŪŋŋŨsDŦ×ëyž3sĩZĩG4ë–ČNWđO›ŧn,Q)ešĻq6”Â+/ŊôüķĪīõō×KKÜëO{”˜Ģy­4ģԊԕíłãĸXœaÆå;ɇ„æĩJ”ĖKĒ H¯qqũō ˆ:ƒ 8˜€¨&ž÷äØ~’Ģ]ĘwƒōĄ­øÚ=mkķ‰zģk÷ąļ¯=PlĪķõī’|ôŠíęŠP_wÅH^s›ČČķÍš$ŗÕ8Žũ# Ķétž.îŪ %VĢÕņņ1€ŨnG˛‰īvƒķķķanܸąüŅŽĩ}WûęvģŊ}ûöéééņņņnˇÛív'''÷ßÎáˇ=gggGGGwīŪ}æ™gúÁī|ëđÍ]ŗžÚŠˆö[zppĩÎĶôüˇ}Ûĸ•Pũ:Û dEĻ-æí5[¯Ũ*Láš\LaT0åribš]Ī@TDE—Kûįk.5Q+j,F%BČ@ėĨ|ëEM^šHđá‚8E @Dø~ë"/ŸŪk.ךz((šŋúĐ$xÍöiА\Ö=˓z”Rįõ—GņˆÛ_+߸9ö^šÃƒÃŖÃŖ;wīԘúG@§Ķé<]^yåGGGGGGĨ”Ífķ;ŋķ;‡‡‡Ī>ûėÉɉģ“$ų /|öŗŸ éūũû'''/žøâ¯˙ú¯×w}—ģāøĄúĄ_ûĩ_ûō—ŋ|ttôģŋûģ$˙íßū­- ĖėäädģŨ~Ī÷|Īw|ĮwĖķÜå{į[7)‹&_ˇ\XÖčgįĢÕĘKq╝}í˙ú?˙BQ}}îĖčĨ]‘U‰Č€WĢksjTãÚũq%Ũûŧ5;:é‹×C’Úև‚+NžĢWŽYą0I"’R H ht—˜PmîËOquĩ#BF‘™ÜīšrŌ€-›Euukt!Ûu%ÚVČë]4n×'ų ųēû†¤ŽŨ˙¨­ Ŋ~fŊūXŽ+JĨü‡{{˙ŧömFdVņŌfsqežįÕjupp°Ûíj­Ķ4}đƒüŸ_úŸũ# Ķétž.Ī>û,€Ũn7MĶ7ž{î9IũčGŋķ;ŋķččh†{÷î5ũ āÁƒ'''_øÂ>ņ‰OüØĮ>ö‰O|"3ŋøÅ/ūŪīũŪ_˙õ_ūķŸ˙ĘWžâî˙ūī˙ūÁ~°}¤ð^¯2s†_|ņŨī~w?øŽāŸ˛vëõšfģķķaž}×ģžŊuëāôū*âõˇl‚¤šE(™Ōŧšöže¨™—­ä N’0€$—žI 0R€ŅĀĻMEÔi~Ŋr C…CfFBRC™R5Ŗ ™û^SĘ­ųŨ!IDä˛BHîũ2zøōĸP¯Ģ['E"™HŌ 0ˆA ãëW2^ģÂ!x­o ŌâĘŧ-2Ųwīr2mÉ}=˛ļë‰fú*ÅËFƒĢ:~GIÍ ˙üķĪoˇÛūįë<끒N§ķԑÔü3ĩÖÍfCōŸøÄĮ>öąRŠ$’Í(/éäääŸūéŸ~á~ÁŨ˙čūč#ųȅĩæk_ûÚ/ũŌ/Ũž}ûšįžĮņöíÛíۚoŪĖÚ-ģ|īt˙Mø5~ØĖ|ņĪíųĀúā`uxĶ„į÷ī?Ãy}m™6+ÉÖ #ITRiąZ ×>č4m¯Sx€Ä‡Ãį ˜ā4‹ÁVi‡23W˛L8Øļ2š c"^¯tCv.¤XÅÅR’L˛J‘VŗŲä$MÍõŅd{H ÄRl†ˆĨ ¯å `LļGĖĢ[*Ra2 )“hnŽn• BÂkˇ‰GėÄíąÍh%xŌĐH‚&ˆŧ6Ô^×ŋyRW˙\\ Åĩī4EíĩûĨˇ›ŸūŲĖ|đ`~ų嗎ŽŽž{ ũ# Ķétž~ņ.sĩZĩâ֊ęî-ÁĀnˇ[¯×­÷ôŪŊ{ã8~á _8==ũĖg>ķŖ?úŖíÛ#bšĻwŊë]ø‡øę̝šŲfŗi éûÃÃÃišj­§§§<¸ũNWđOģ’ĖŌä&arŠõÁˆĶĶĶãŖ æųŲÕpŧŨÅüĐ]0˜™ŅŒÖtûĀ@›§íÃuŨ}Uš—ŊŠË áÂڊ'_+ëa͙į\V™ØįZēUåk –‘ģ_5|'"ˆŒ¨ W…230„ ʸJYfKÁ`4+¤ˆ ™ UeĒĨå,ŪöũKĐ*ũ!1,n € ÄæNIÔv\ģ>W>‘¯ŗ­våĀeģ žWļŌrü(ŧfÛSÛ9 ÛˇƒÜÎÛĮ¨Á_ތ N–ہK¯Ė×ßOlËļ22ˆ­˜Ģƒ˛;Ŋ7Õ÷={;íîŪš{rûvÎ^€īt:§ÉEŸÛ4M$‡a888¨ĩ~ųË_ū—ų—öGĘŨĪÎÎ^xá…æ_˙­ßú­ŗŗŗŸ˙ųŸŸĻŠ2†Ą%ĪõŠ‹/Eğ˙ųŸ˙ÄOüÄfŗyņÅ?üáģ{ûÃæîŠŧELŪēukģŨNĶÔ,4ĢÕĒ=Jîé‡ŊĶüÂņņņ4MfVJi'šÖë5ųäjg/đöī+qæŗP–tI!ō¸ø(s-ĨŦĖAsh •aœļįœ“urĸĖL‘ˆ™>šŧЈ476?Œ@3“Î”Í €ŖčS‚¤—$j­sLžRČdÂ=˛yîSģY{yif)ēTD#fe„˛Cŧ€eĶvKŌp9wČH#Ļy' Ȅ‚–P3ÃŦ`B&QšIđDh Ã4 X:QČBķB fMEI„‹ˆČ –`ĐĘ6Ö&’äŌú)5 â˛öhŗŒ¤ĖgC![ûǞåædBÉ ¤$“’!‰Ų"ošŨEûpN˜"ĄÔÅČ ŠKņ-kī˛.Ŗ@HD(˜&ÜGWĒG €ô"÷šŖû“-&“˛É, N†­gX"Ē ëH 5ËV­5ˇĶét:oŸúÔ§>ôĄļ<øû÷ī˙đ˙đnˇkúõzŨJ‡Ķ4•R. ęÍīžÛíšmĻšeZÆüƒÜŊ}õÂßé|Ģ+øļŒnŠí7oŪlĘīĸ0˙øō-A…×t ˛Î[’ĸBe\>ŗōŨDŗÁ¨yš6›L Vn?‡:3ĸ8WƒsdÍJZŌA$ 0h(Ĩ¤¨II­Đ^cRÂŨXlÖnÎYčIîr֜KtŒŗ%ēŗÕĄŨ)%i0š,aĄIĒʐĖČ˿ې Ķ@ÁâŨ\E–DĐ´dŪpž2i&S@š‘ •õ˜Ë,Y!ThMĻdMĻÉہMb@‡ĢĩҚŽo 6bŗ+ŅĒô~)vué. ]öš9Ŗqŧ”BRˆĖĖŦĶ4ĩĶ Û0€)i&'gōj ärmČl“vÍĖŧGĀŪúĪËxÖ Y۟4’nō•–Dū2RÍdž™bb €o׆SĐ Ū–;hĒ`F—F‘ÉJÛŌ––šß…|§Ķé|ķųūī˙ūüã-ŪĖĻiZ­VwîÜyõÕWįy.Ĩ´‰{A-~ IöŖŖŖķķķģwī6Mßvžœœdæũû÷/úbûAît§§§Ī<ķL[Ũļ_ŗÛˇo?ņ#´Ô—%Ae?“hŅz¸šją;8Úfq5gڌ “1ÍDK(’i”eŽ+S2  DéÅmđRCĸ™ a†AæĸT 3 mŲėJ9ĐĖb52!Ō`ØUĨŗĩaÉ$€L2,‰SĘĖ ĸ$a°ÖjCA‚î0ĶÔžĖ%ҞŠ]up(æéĒ`E„ˆš&I'Ã@ƒLŽ :376¯KĘęv+XĨ’H1‰T›nddŗļīŨņØ e `ķÉ[ŗ´g=Ga°a°ÁŨ’IdF uĸ–bf%ŗNŠÉ˛ ĄHeîļôėv QfæÎĄ˜æ ( `JhOH%÷åv‹‘Vk1§›¤šĒ‘f4ŗPäÅüY-īŽ lh’V„”vĐĻbļ ŨyĀ‘Õm[\HÄ Đ­đN§ķĻp!ßIļ*û­[ˇ|÷w÷?üÃ?lˇ[wĮqŗŲĖķ|rrrvv6ŽãŲŲYsđžûŨīn]°žō•¯ŧī}ī›įųöíÛëõ:"úáítÛíö™gžyéĨ—Ū÷ž÷ĩ -ÅéQšŨoŦāy­Û˜ûG‹ÁwĪΎĩÆn7ĐoØÚ9×ĸ5LĢ2K+÷Á,"vQmށž6Û՝KH )'‘I‘- &Öœä€P¨ąbr,RŗĶë |]Vc&"ĶŦĀ ˛Zë<ĪsL4ąÕtĨVj–Yf„ÜZV&v˜ˇžé ,É2mĒĒ -_'ŅZ…đųÔXčn7+Č’Úí&wŦ ÅWcqŖÃ l$kŽ&Y;Ī0A †2 "3¤­ķl°!ŗJŠLIļI#$xë%B¤EԜ¨Ķ<Ąk-Är7 ¨4caļE9nw"ööú}×jÄC™Ü9Ø0¤ƒ{/I0ã¸ĘĖŠÖZk„ĸf"( VF–b. ˆhē`Ņž6}>~Ež“Aa‚˜ˆqĻ[F×@fiGEæŖ÷4ÉN§ĶyØnˇ:ž]9;;kšų‘ųĖg>ķųĪū'ō'Û ÚŧÕ[ˇnĩ‘ĢīyĪ{üíßūí /ŧĐž÷ÛžíÛ2ķ˙ņŋũÛŋ}ŗŲDēy:wĒ‚7ŗZëķĪ?˙ōË/ˇ3S­Cü‰åû>y=^#”ēŌaŲŧÖ§Ûķŗ˜"b4ßnÂbŌ4yšZWb LY}ž]‰‚›N7…KHĸn´Z'e˜šāfVˆéČZ‹Ãé)!›u3Øhˆ˜U)q”RĒ€ĄiôL!$a˙_‹°qo žfîācĩly,‘@˛ ÷æ ‡`íJBžĀœŽIŅŦ".“hÉ´Ãq0ÆbÅ)$]ŠBQ"iĘemdÆõ*ĨPVe¤æDJ÷ēąL䜑ĖВSZVû˜ f…_Γ(a ›1Z–’n<%@É3Ȕ’BļÁĩ\o–ҍíĮ}eXĒ;‹ae°:{K–gR–I+ĶPļĨûTJFÖBĀ(Ē"##S‹sĻMŧ[vMUŽ-ZeA¸ˆ´MĖ–DÚš„Jm€]&ꄡgt:Î›ASØWįņ Ã`fã8~ęSŸúĶ?ũĶO~ō“ī{ßû>ō‘Ŧ×ë6ŗéK_úŌī˙ūī˙æoūæ÷}ß÷ŨŧyķsŸû܏˙øŽ×ëRĘüÁŧōĘ+Ÿūô§ģ žĶü%ã86gķ7žöĩ¯=˙üķÃ0|#"—"ū!Žh ‰”"Y4Ĩ€ķŧÃ<—8Ģ6͘X ƒ°VÍ!Įš0ƒF´jĒIҁTË,Ą˛IãBxÅâiâ5B ĖI€đ\âZāf…4…3@ʄ‰M˛`3ß/WYa‚#I ™˛ä ŲŪZCĘZ6:“…›7 3Dƒ)a4N*B-įŨŒŠŦHĩØL$‚ļOĸIXjB"1 U°Ņ|\lkD"sÉd„ˆ].Y.ēIÁڀĒÅP@—yåžđ($9nY×ųČĶķâUˇ‚ŠģÄūņcŸ›×rį[‡Ëlõ‹_€ÖŌō\¯îÁ~ŽņÜ}sP‘@:ÄpČ  āœ0h…`ė°Ģ˙÷í[cęp´Á\ķė5ą2 “>ÃŽã‡ã0š—Ô‘s ĖĖ@¤¨4°´^ŌŦNĖ Ô:!UhĮĢąNsD,etpžįy^lyĪĖ–{åVJ)wīß/Z[g3Û^‘g&sɨiš^Š%ūœ„Ä”Q…ʼnŨn&eVčFwē™YA 9Ss, 1`f2šSH1EĀi…fN–Ǥī{•ÜėäŅ‚äĩ\Š´Ķ´ Ū:M[üeËžÜė&ÍÜOú>ÕŅÅdRĢŽŖ}ÁĀŦĩ˜›"ŗ†$7cášj˜HkBŊ]’2SîfæûAL"́ŦMÁ/a82^4°Š Ŋ^L…˛2ÎQĢ€Ûcf֌ĖlÚ]ûœø€Ēa2%pX e‚ĪŽmQõZŠ ÅײÍķ¸ŪŦž2m˙Ÿ˙ņ?pü Æ^†īt:§FË;ģ¸ā˙øú§úâëõē9j~ņņˇûˇ‡a¸wīŪ͛7˙ųŸ˙ųŗŸũėßüÍß4áūŊßûŊ?öc?öÉO~ōŊī}oˀ˙ŗ?ûŗĪ}îsõWõž÷ŧ'"~æg~æ7~ã7Öëõ76Ņi˙‡ûĩú§m—?RR_tŪf ūéÜ} PL5Ÿž~ ;"‘HÔĻøŲ˙ößnŪ?]ORÍ1dâîŖa4ÅV^F:ĻęF’ˆŒ(ŠųHW•hJ7E>ŦûyPÚ§‘íÆ|ųKģ?,ēō1Ô7-ŋų™ŠíЙYŗĶXļqąā2 5!#r™ßDŲ4:IXˆ[°…Uļ=KÅzoŪ‡HY‹ldr`2e‚ŽĖ—m?¸Pļ)NID&…kčōEÅ~ū+émæTH¤7Ŧ´Ä˜Áˆ°Ĩ™m!a ÷­M‚™Æš éRdB ŌI ÃJ Š=ÛeB‘Ē3˜Đr# Ŧ9ča0ļŸT‹{ŦP2Åv”™¤4EŠË„%؇bĮ ā .‚CunKFQD5ĘjŽÖ‡ķ¸~0/“˙ũ˙ûqü Vũôk§Ķé|ËŅ|įm͛õĻ$ôȝ\Ęũuč?<ēA“T âV Ī„BģŠ#Ō.Ypđę4ĖKQĖQfæÅÜ ˜‹%ģIBB)lˇģæDŋ˛„q*­&–JË}§å~>č~Qb@ē`P´T”aҜķ{íˤ@K ķŧšØ+# „Ĩ…Ú'Úˇ~˛UŦĨ´6_Vd{VĪļČz$’@ËTÄņņ˜‰Õlyz.ižíÕŠŊüĒD&3š/–´„`4’@$$‘Ku}Y4%߲zŦ)ø¨Ņ´ģ›J’desɜËŠ‡ZkbÕzRą$œAÖff%”‰ŠYÉVßW@Ĩ4ŦŠ ƒhé ™Ę0Ē„,…ČfËAwĐt:N§Ķé ūQ ]{ũKĀšÔĩĩäÄīķh„r8Ŋ°=—ä´b4ȐȇR ļ.Ö D%§Ü 532m™” "ÛÔĸ„F‹MŲĢw´4RY‘-`q錤öĒI8ø‚WR-a’mõ™Ā„šŊNKš€\ÍēŨDĒZ %Ā%ĘđĸJ­Öåé>0jŠ^n€*(„dJĘ´7ôŸ>I&Ŋ[ü>3sÃų5íM1¯Æƒ%mžËsČLĩ&Kų˛č˛ļ?RM˛'ĩŒKř IDATé-fĐĸˇ…eũAĀĮq¯ā°vūAÄnˇKYë4hΤ9o(kãQ[—k4O ’lmÑBŗö¨Ĩ×eH1Ą%¤d˜DYĘdžĄĖ99#gM ”ČˈŗėIđN§Ķétē‚cteģČú}ĐäY#ŦÍG€NšÁhĖfŠ.Xëxœ‹úoÆėˆŒ@fÎP‚´@ĩĀE”6UJ8ˇŊ…ƒŪ•E#7™ÍÃapRnˆŒKŅiŅÄif2]5Ū”ÁöĶ‘paD`~‘’˛ũ\ėÚâN7[FXą-rÉcLĸ…(6LBôEæÂŒdõŠbÁØWÁÁl.š–4ƒ$’°Ō (Pc˙@lt ÁĩĶ"CŦÂÕRlPsÚ$Ą‚ārŊŊĸ*0€yĀŧ5'˛=’žļËfāũĪT¨$”û“û7B A[&š^”ûaíĮ•Š*U ģTÁ¨f‚Â Č lÔ°!k‘§s§„PĨ1ĸģÔĖdwŅt:N§Ķé ū‘:>¯øā—˙ R›tzŠāGķCŽÍ ,î…Fr!W“9h“`šFŌbãf.õŨ–yҊģN 0Ml#Œ’ŋ"ߍ[:#Is‡ &Ā Ō š¤šĐh.@ŪĸæEōRdIM ,ļœ0#’`–a•Ū–ÍĒN2Ė*PÛˇûŌũ eĀ F˜ŅähĖÖ,Y“ˇK >WÃĐ|đfFo!ņ iF ā>Ė%3IŲ´ŨQĸŦ­,$՚œ0Κ8īϚĄ}bŧ¤ēņE—ģR!i;”ũĀڈČ\Ö3Ķí'Ģŧč;¤ƒCBĨ­”­đŽ‹pLāō܈(&o " EIQ€˜A ¨†*US’&b3@­sI팍˜*Âlj,)Km‘[åĀēžĶét:NWđ×Éw´AK0Ąš\čxQûúŧ ,gˇĶn˜ĒĶ,4¸S†99FbJ•žˆ+ā@’ŦRÍ@ĻĶaeņnX‹b@†gËĪ\tļCF>RVÜŦiúf ÷Á‹S$ŗyš›]°ÁZžēZøJ›ŦdĖŅĶe,æh9ņ0Ā97Q“Šĩ~SZē]ĻIĸĩž°¸š—ĮÛv_Ā÷‹<ūũ4Õ6–¨ļ‘M# aLĘ yažQ$B̓´ææåqHE­œĖļvŦÛŨTgĩáO€y^ømö°Zž×"o;#ˆh?ØĒ-.ĸčPÎ(Ĩ–d‰v°Ífžs@bæU͏Ą+™û33SVí€P eé\ÎDP"BĘDŗßWҤsp+M=‰ĻĶét:NWđo ā āK˙ĸ]î,@M‚ūéÕģ‡fÕAH& ”b^l ķ4Îķ:q šÁ‡Õ$˜HĶPŒ„SD˛&wOfë}4+(iš[?ŦŒt˜;ÜZ€: 餪 T˛Bs ĨåŖĀ­´`õ%}<FsˇRāo‚(L§YÅŅĖÖfžT¤H¸ĩhLį@3ž –û>×ôŖÃ‹NØv `ĀŽËõB¸ĄtČ0'ZĖŽ0€ƒN7ČZjē![i^ŒDŠĨëĀ͐Äų„ÍŽlڏ€e EŦčl]ÄŠˆŒÕČd†55ÎLËT$SĸNÍ īä°Ė0Čb'äâbjŊřŽČCŦˆš9#BQ[,N{Ȑ*ĸ"J„8Q^a;ią“ļĀČvBfŌčît[ˇ^h3›"įaĩŗœ†!ŠĄ-:N§Ķétē‚ŋ†ĻZ÷ą’Í)ˆVQ ưWƒ5M„Z#é(3Vā㤠˜­F7÷5ŠķZ@ŠĶ æp:,éd1:T,L4ƒ›y@2éŨ`J#œV\$aĸģÂĶ^ˆÍĐŌĻ2ABˆ@ÖæE§"C•Áf¯ŌJIeͨĩÎ-VÅ"W‘.T¨2ÄLc˜ä,§[ ÍĖ)§åÍä̐íUY)¤Jb¨ōi6Š™ÚLˇƒ ųŋŨ¸é‘"2j̉vxtŌbu21S–€ą…æŲC†Áœf––aYÃØâčö-ŽÜÖ-9<Öz‚Ytš¤ŦĒĩĒF­UĖ ) KrĢëKģ판ĸȨ¨sFČÖÎ-ĖĘĒŦBeĻ))8‹ÛĀ&ĩĢķ﯆v'ŌĨ‹s`ƒšCușŦT˙åīt:N§Ķü7 Ņ|& Îk}ĨÖiFš‹„ą%ŊŒvuŦq˜x`8+ظš=“zīŅú0f˛Å÷ °ŽŨ´ n6˜ ƒ6:Š)ZėĄ@‡™˛…ķ4ĩjŦrqr8˛Â/L Wb%I1ך™KĶĨ¸ŸÔN6‰Å(_•)e^ŪĖ…˜‹%ƒ¨TSđéPÖ3[z[‘vķAŠCÂC„ ÍŧDËŊI šŧI&pĻK>ö1Ž"6ŧĶ’+ŗí@´íjĩŠIf6x1ŗf…aФĶ.˛w(†čå ĄH8čîîƒŅÎĪÎLmä’Ëdƒāt֌ŗ–ųؚ‘M‹ ¨ŦŨdJķdTz *Ŧb˜Ėgjˆœ•Õĸ&BJĖ1­Ā eSú,ß œÕ9sfÖ4´ĖHķ<Ģŗ4Sa–iŠ@ĖčJžĶét:NWđ×Ŗ‡bh.ËđļņN@÷k}Šâ4¨h˛Ūčf@ŽOV5ƒÆq5Ŧ×+[+Í÷§Ípˆ&ƒÂZØĘÁ`&¤HĻ´eĩ6š Мn(†ÂƒÚōȉĖڌ5éØ)BZėÚ{Kˇ$¤2D´°.Ą:\ō+Í Ē0Õ\…0ƒ;Ŧ؀qĐ@y a™„ EÄĻĘhÆV†ĪĖĖJR1šc„­dkY[6¤ĄÎs…dbhHPĸeL2Í.”÷bÜ'3ŖĄõ…ryq0(؆-™2"ŅÖ'š9Û°EUîÃī™j%îږZ^˛fvxp@x‹é43÷ĄĐh6;d"cW DÃŌ.ÁiĄ 3qw‡ˆĐ1C•<ÛL‘6 ŠL„"Uœ-B4`X≖”RëƒŪ?híVøN§Ķét:]Á?6MġÁEÎgŪ›'L1†dS8tÄ3×Ā íüž '_5žzP…Ášr;đam\‹d1 ‚Ą2jFÍZš˜eģ[(efîfÅ÷sQ[dŽ‘YAÎέAæHsZiq(äXŠ2rŽ­ļŦåĐsŅôĖÖų æŪ–ÍzĶ2ĶĄ>¤R-OŅ)ƜÉ\ Ģ6ÎÕh@•,ĻųxJC“ŽÖ6Ē 9ģę8L†*ļ5Ã(Ž€É+‘p(3Å}á_2$ &ŌĸÁ”5ļ†l™8%YĻĢqyÎíNš‰Æ…[Ī¤¤LI$ÍŦ¤ÍfŗĪÚ¯ĒvU€ōÎK[)[9ŋ”âîí᝜ åL_Qk˛ÚBšÂ"ĩˆ)Z j(bŽ@Ļ"r2¤ĒŦsÔĒÜîîVĄVLķ„ŠĸVÔ@VԊˆåtDÄr}Đdv2Ú)$ÁVĖļŽĐÆq-qékU[Y8QŖ 4´á°33îNæL&DšÃÛ8ū!Đét:N§+øĮÕķ-NŌTd ØÄy}O@–{åM.UĘeQr>&P9IČQĖäĒ/™šjŒËÔ& káVbUaapb5,­¨Ū’Ö Cā&ąJ8aŽtŖC.™āÄh܆bŖw7jeĨ9\ĖĖ÷ž ģXŠ$÷]°! ĒŖbŪf‡ëa\‘Tf–Ņa”Û¤yŽĘÂa5Éiû`UV\ *όÜLSį‘ƒƒ7NīŨ?>žą=ߎëõŲnšmŧũÜ­÷īŋôĘK'‡ëãÃʹe¤ƒqĩÛÕķŨŧĮRJ‚Æ˛Ũ(QZÂ$`b&MĖŨŧMDŠU5„Ėš Čæ9•ĩ•Ō§ĀˆD˛%m&"j‘0 Db×Ķüô‚„m]âō÷>+"UÍ qĻĖl‰đ_N™`'–ļäcf;Ât”Œ`†A@(ˆˆ)Ŧ$|ÜnwķPäåôl÷Žā;N§ĶétT_ŠíēœĪšĀkĖČMˇ%ÛĖ!\÷ũHPT$‰„ŒLSmÉ'‚´Ď‹ĻŠMĸ‘ē4‘ŌĀ1uoÎp.bŨ ¤TĘūK81 'ąí7Ę((Ŧ|ŋŗf™U<, wįŽ%‹Æ‹ˆo3†ry5Yäl+kdÅn7'æ8\ÁGŧú‡Į8ž…Íž†›;/âƒĪģĶL$Pģ l™¨ÄP^=Û"žzīü'Į8>䝗åxõ`›GåÁŨíŊģہxî6ΠøœL¤Ļiš8<´ŨNĸ]üDD$!"2[ōŒ„šË`(%VãÉ#KU!•qHą™mBíÔCËŊ!e”B@ŗ%e@ÜĪėUIšLAÔy–O“DAhF|JŒļIđT AmȊũĐVo?îĖę˙bīMeKĪëžĩž÷Ũģæ:ĶÎēod“MR&)Sĸė@–AŒ @?.@ō9@ōÅ0Á‘(r"K˛&b‹"Š&{ŧķšgĒqīŗōáŨuî!E ؒ%x˙€.œĄĒîš§Ē/ÖûėõŦ¸´Æn §§§§§§§§Wđ?_Į_ÃvĒŊSOęLāĻN:šāxĨä!åÚRHj 2kē5Ø R0%pɑ;‡ĐåÃā [a°ŧ“ZŒŠ åh“  šA)Ō/-u#yģ’ūBp˜RvŅȨDĮQ`”‚@Ԝ$ œ¤ĐĖÉ&CU´§D‹ˆX€JjÚį-"a3,‰ũû˙ëßø/ũŊī¯8=}ųâŲ|nĪöoÎöĶļ}úōŋõj; Ÿ6õčx>;ž}įøvTHĢíã÷?øđã“Áŧ,öâtá5îۚã{Ÿ\瀺A9šL[jS5Ģ•ŒYôvg'ŋņy’7S) Bāz“ ŧôjBžfb"ęD!oų*A"sK`-RTņėrÎÖmÆm4šWƒōéâtZÖA¯Z|÷Š4×ĖPמۤĸ{휯^7ˆt0‡r1m^ hR7\'‘m9IŨ˜ß™ĩ;LĸrxĪŽt) ģÉ=ˆ”ų H@H†--YL†dt"!I”EwPŪ5B+´Bė]4=======Ŋ‚˙ëq] ō•^Ī\y߯ëøtۊ0 dČß tJų<@t‡f žSĪŨôŊ{žD3æ5V#áFeo€QA&cÉH™Œ t1ŽŒĪS3^õŸ|iŠjY?{üâņ'Ī׋ēĒxąØ+ĨĶķM(m'—¯^ ””tũ‹ų/YĩIģ+$å dÎĻwī*ģryW¨[‚Ė{°žD‡'Fw%$ē˛ãģSÜāP"r"„ā;NūIH&Äm‹V ƞ¤ĸ;ĘÜŨŲ$o‚ zßĶĶĶĶĶĶĶ+øŋ¤Õ¯ Ú˙*)˙JŦķú˜×ôęžŲ#ã`ŽĄ‘` ˜Ī-kx h‰äĀ÷Ę`l‹H°ĨčF#AxV›rW֙4PŠtŽtíĨŲU/ĀE‰]QPļÍHTŖÔŌ ŽŨš-œÖũ ęŽ'X¨ŊW„ؤaōŖq¸s0?Ŗ’6˯}é-NĪß˙ķOž~üîß\WëMÖ(/–eŖA28ĩIÅ*9ŲšJ­&7[h:Ÿ‡ĸ^Ŧ_œ-_~ú8|ūát˙ÁäčūŌ–oÜ˙ÂŊ×ŪN[üĢ˙ũ˙üŋ˙€Ņ8œn’¨kÚȊYz%—ķ­Ķ-Æ|á#ëûîõ4¸ģŧũ9Ģ›DČhĘ~w‡Z&'R’.&(š9$GĸĨ šŠč|ž\cyŠŸ;˛@˛ļ­d=¯Ûļt r"Ĩ,%ŗ–Ö(‘fũ ž§§§§§§§Wđ˙?šîĄų+ĩ”œbÎ-—™Đ‰i y둄L"Á,4ՍíaBĘ`‘ŪzR ´ÄiŖĪÚsˇÅ™SqZs°‘‰FĐō–­› ÁĖHļ;sĐéƒÁĀŲ-ã’$<‘ŊMFFĐ ˛ņã„ׯÅír˛7ŒC´ļÕâ,ÔMTúđß˙ŪÃ7_ۏG3.›˜Úãl€“ŠŽ´Dp”´(XM_¤;aāÃaŨ–_ũĘ7đš7AōgˋŝŊûĢGī|Ož|ë['OŸĩĢúÅŗ“Ŋųáâr;!öŋüĩ_ũÆģ§O?ūtŗ^§ŧI*"Ҝædĸ9a,„Ü•kf]NģÁ‹‡‡‡ƒÉtÕϟ<}fŗwåזŌŋûŊßûÉ_ŧŦŸĄÎ4Āh˛lõršæhėJЁ’y*˛ãČXˇČëĒ”íŲËŪÅ´[ÎĻ!G24T"ēēVH@[ˆ“ŧv9s($%ŅA‡eąžuŧ<{åwšE@NŋaˇëŦÎäķŗģĖ—ÜŨb™ŨųĢe/â{zzzūķ¤ßdíų{Íĸ7åOģjÄ]Å,W“^Y5Ž'EčēŠN‘T‹+‰HëN$‰ÖARyN0"ē˜\ɲ%čĀ@#•§æx°ŧžšMв4įnsŌBÎŊ$œBHŠ ='A§ēíÜ ĖFå(øfšš|ö˛~åĢ_ūæûßŧø_˙—ÍãOšZÆËDĩîU+5mŨøļŅ&CŒŽ‡Ķĸ(V//gŖiaÃĒŠ×mroØļéåÉŲĻÚ6Š•š!m/×]nVī?Âvģxy˛^V V`4‰“rxúōŦ"ĸˇû“ņl>™ņëoŋõÚô°yžM•}øôųŸnNĪW …%X‚;MmÕŊ^’›9 RRnŌ­…@K†4™ÔÕĘ&úVm›wJ €‰&š6BrĩT>‚%t1ōØÎ`w‘Dė>ŊÚ Æ.õōú[ä§Ūch‚Tđgΐ========Ŋ‚˙´ũNË_‰øŋZkIyc˛[ĩÔƒ˛Ą#ĮČįÂÖÜ*˛ GųžüŠ?]"Žu?ĖĢđJĪi*;[7ŲŨd ą[„õîČ@FšĐ&,Ī/ŦuļĀŦDYUé{öėŖOËífËÁ`YĢĘĨw¨(ãpd1hš•WO_TÚāÍiQŽÖ!F¤v~ãhŊŨŦ6›Åb1›ē6a>ė[Qˇ NÖíų“2Ú¸j§ŖÁđ`˛ļę˛Y­§Es8Ŋ÷Ī˙ËŎŋû“ßûVûøņៜ`˛û<ņ´ō8T9.Céí§édS¤rpž­ƒ‘IîL Á,šōöpÕũÎ(‘‚d4Ād€Ė!ŖåėGŊq„Ũ †î—t¯"@†ĢųH ÉëßÎ\?øu;Áģ=eŧ^"pũ}‚]~|zŖ>ž§§§§§§§W🱂ŋ.âæë×d™9SĸÉ>@š„Wļ æÕG2.ŌōÄ?oą2oŖ*/c‚˧Rč áHÖĨڞ@ 2č&’˛<õ7 95R]D:ųá|ØŽę@a IDATˇĨcZb^–ķņP'ŋķ¯ūÛžFĄ(ĘŒuŨļmKÉͧŗ&5›ļŪĒõ‚6.ö†ąqŲ$ĩĶét4 oŨ~ųôŠģ{Ũ6Ûm[ÁĄŨ ĖP4‹1ͧã…ÚēQĩÚ,­˛ũáÛ_ûjø'˙!ĖN_đŅŲ§/ŋ˙[ŋ[Ô(j;œŧÜ\V\ĪF“ûG‹åŖŗ„:é˛nb( CūĢDži¤įÕR%äQē‹–wMŗd631' ådž|ŌĘ/7ˇŠËŖÁ_zŨõĶ!9×ãqv§WŋēQšUûO÷ôôôôôôôô ū?ĘsܟžÕ›e…Ųiu’&o˛^ŋ~0ČīžĻŨxũĘÕãBˇG{]ũåĪ 7ėviķŗírhBH)Ķ€ŠPŽëŊĸ¸9.K×mōÍĻÚV¤˜ŒËjŗmęÚ§NãŪ°0&/^,ęæru’’ĻiķáOΕ0  Ą,ĐÖ€!ĸĒ6­›*¤Ŧ Ĩm{zļ¸ųčŠúč'ŸŦ^.Ë Ej[MŊ˜EgŸžŸokŸ$͍RģÃÚēewÖ1fÁä26 \rŖuŋKōî× ¤.’ЉîęHá~52Ī×OhsčĻŽ"EũęÂČõ9ŧ[Ũ›_+ Ë:ũgnå"!—CžCu€ŨÚmOOOOOOOO¯ā9~ež‘Ž ëŋ‚îŲÅ~ĨÂŅÅ8ČÎŽ“ÜsB t9aáUÚĄYįŖ–ÉČĢ€¸ģŊ Ž4Š’Č2‚’yʃ^)3ĘĘSåÁJ`ßpÊÛ‡CķUC%o›TÕFN†Ąˆîi]mۈņ^yķáņŪkˇ1)Î6——ĢÅáūäôŅĶžnĩÁ-.&3ÄÄųpZ¯ļĄˆ6ˆÉŊiš­Į˜bąŦęÆÁ"NĮķr„ŗzõŪ|ĮžķŪ—žđÅ'?üčäÃę(`~8;MŌbsūüäčĩ'ÚÚcy{=}†é`°7ÅáãO^Üŧqyūtã|˙`ą\7ĢĻ‘#PDU§Ô¤›Ē(ŠI1ÉĒËUŗ^7ö‡RkN“ØŌ ÁUMŊŲŽC9Úߟ×ÛēØŦ-jŖy˛œ5CŗĮ.  sÔcĀ ha’mÛ&WŪļ;ģšvãņäP’ƒ@žÁ .´+E EY4žÄÎĐîų Џûäꗜ€.ŧæÕéÚnSJ1ƜõK˛Ī÷íéééééééüßWš4šæ3•d# ąËk§ŠË7ä&7"HQŲ׎(¨ ŠŽEĀvˇÁčŒŲ.OE BA0Ą ‚D)B00¸U ĮØtn…%k‰Ō0Œ„PNƒ7jÜ›uP“=;žwīáŊ/Ļíją]]V—ī˙čGņ`ŧw|đđˇxswoÔˇŋû˙Â|~qqq÷Æ/˙åŋX.—åÚīŨܛ´áô“gį›õpo°÷đHįg‹ Ĩ&ÃXÁ™NNĩ‘­ˇ^Ä÷ôôôôôôô ūo‡Wūæã9€P0f Î yģy5˜(‘(Ĩ ŒR‚):P"OÖ„(D]yNĪlĪ~÷0 ˆ˛˜ãk Aäcƒ,Č Œî†ļlã(€–ā°ŖŊ›f0ÛģqoŨ‚ į8;_œ_žž­Ē” m@ĩÚļ‹íŦ¨>÷öĶrŌ>>Y==SQ-.Ķ“}ptŖŅüîxvĢŗËzĸMVâāp°†¯–Íj‰ļAY¤’„z‹aá!ÄVmÚ´^%8cÎĀ rb쎿ŠƆĘ˜”s}ųčÅlbe´iiÃépŧ7Y5Õ'ëË?ũŅęŅæŊ#ÂWīāx2y~šBšļ1âˆeYļÃzģDë¸˙p>6L6uyą¨*—ŖŠP­0ŋYàPÔĒŲnļžŧ‡E™ęF ]7Ē+8JæHdž\Ũ˛n’*†VRÁZȍŠëļ•%ÁÄ$˜É‚ĩ  ŨŌ1QTt"-d€CÉĖ@Iģŧy%đÕD0šû˜ˆ4ĪƒîēÔËNĘĢKĻ”`Ÿa¨MOOOOOOOO¯ā˙c >;gvį%R hōFiūÖNÖG1c¤‚ˇ1ûāwJ= ‘Œčæčq§;c7‡1ë{Ë&û(Wŗ‡>Ëä# @ !ˆQųįņ2R(ČaPô&yÚ÷~üáŅųxoor4įzŊØ.Ÿ>}ą8ĮƒaT””§ē­kŖÃÁÁÁā7˙Ųgē\6ķ ņ´:ûø˛Ē1ëĩ+´5ŧ5•‡ÃáŊÛēŽëGūĸ ‹Ņ`>ŸĈ˛Y7ëŗõūpnĨM[yˆ XQÆr}‰ÖiÉ%!B Ã‘ēíĪ A€Ô\ Ņ;šl%)ŲŋD¸Q–&ƒ‘ōnōÍÜÖęhĸ2v‹" FŌ;ۋZ8'#Ųt­Pf‚Ķ@f€YŽĖŲ9svoîļœmaÔOŪ{zzzzzzz˙7Š“ŅääŽU“ĖÖĘ YÁ3ĪŨ)9ķŧÜāA ēę%š<‡#˛åÁ=XVį ]F ž?U0o-Čķ&k JŠbˇĖJ"B n1)‚Áēpƒ „)ėfacKjCÛŧņ…ÛM{ž]ĩÖĸdhãd<œ¸oĶjģ™Ž†wŽī úVÕô`|ôš×Ú[ŖÛĮ¯œnđäĖæNŸ?{Áu1l‡{ÃŊųœEHMKq:˜Ødœ ™|Ŋ^_\ĸNŅ,Tc”ÍZXz[m’ļ´T(Íbˆƒq`ã[oCĀ0†ÆĶ€Ąõ:$ųΟbäôDЉ°$u“ä`9vS”%¸-”` 1PŽv‚nyÍÕZ8`íėëéBū6ÉÔí3[ēž-ƒŽĘģ-!ßĢ3Ķ gՃ.î‚mčũüŊ§§§§§§§WđŸ y2JФ¸+uŨ|8cŲūÎ.>ŗÎî"D‡<,7Z4ŗ.÷=Įē+‚­´P¸YĮƒi‚™ %ƒ›<Đ"‰öŽ™{ƒ<äžWķQ¯ą7ŽļjéícÁĨļ&÷ö^⤚n‹×¸4 <) KÆ{ŖŅfŗYœœ_<=ģødˆ0rĒ[{ƒįOώGÅëŖĶŇņéÁÅŖOĪĪV›m ÅșÚ[ãÁČoܙÃáŦL)ŠEœXš§ÁđRmQbĘAŲ PmŊFÛLŠzüá{[-ÛĶÅP8bÆ)›ĸnĐ0q …ÖëĻ^yĖ›ĻP¸­S’1$ÂK‰@&yAP2‚.Ī&Đi­ģ›ĩČŖy` 2A-YÛÔd´V'[Rë)§;<$kŅEÜäŌ Iģ ŠÜ͛¯ĶX2 –F1 v˛ŋ˙‡ §§§§§§§W👚īėÍŲ# F72 ”v}Ģ@Wŋš’å T((ûXœDÆ ä.UėZœˆ]˛ ŲīN@N €9Ō1o+vzČĄ4ÁeԃX0,Ęw[ØŊ#o˛ÆÎfŖ‚4*ĀģØ F(ĀBŽA„Eä@rk ´Qí°mJMīL~^Ėög“ã;Ÿûæđõ‡Ābøâc=ūņ‹“gƒ°Ō  a'ŧ˜Îg“ĪÍ7Ë ûķ7žüîčpŠØ"ļa;mÛxŗ>Ü;ŧ΃CĖĻØ?B# ã–K”%`hÚĸu0ĀBA"–Ē/ą™#ŽãāĖR9*oÜ;ļ‹Ÿœúž_üđåĨo+ĀCĩŠ b8D9RâĒōēõuŨ" ˇ„"cgCqˆBŠ)ˆ„ÜÉ.ËņüĖJ§=A€Ũũw›¤yIŲÚ]Ž?%@‚Zš1DIPĘVxf `tP”#ōœĪNō ˆŲ4ã]'kΟÉ6Ŧ×ϧ§§§§§§§Wđŋ„0‡ģ_åfË;Ŗķš…†9:P ÁdP"hR¤ō–jØ` ģ]Õŧ¨ĘˆĖÉîŠėʞĘėƒĪžy(§Rv•ĢfAn´ ā0Zƒ!ĀH Ä-œnŠžæaöpzįū];Œ<nhWØ\ IeYĖíåjyēZßģ?™ßX­ĢmZ§f~÷ā¤šXīm_pÃĩmëæųfYoųöëŸįŅmėMQ”(QģokÆmŅøQŅN†ÅÔÆe—ŗ|ąŧ0Ã0ŽQ4ÉéĄ “yΰŦÁŗöäüŧŦ/ÕbėUj­j‹ˆÃ™Û|ĸår}˛īaîXn¯ˆà ŋ”(3@Øæ˜Į\ËJÖT -H‰ČZœ9ʉ ˜ƒ}rú¤QAā ˛ §ŗŗ;-]™Ũ•Û^%€Ā”#*Ņ4B$•§ōĸŗk›b~c€žKÁđĒ4ˇ§§§§§§§§W🠡3҈ •3HrL¤‚˜#hL`ŽP%dyšžeē„ Č!îÁŗ.OQ,Č•PRîƒrøššŗGÎYĖį„šYp„å8bČBlŠÄâ$´ÃâÍĪŨēû›ßĀ,a,Üãâä“ĮĪOONO'čŪŨųl´gƒ'ūčÅĨƍfŠo|ųŨĄ§ŅŨ[ˆĶ‹ī˙ņ÷į;o=|뇟ū䨏?ž'‡œN„aŊ.Ģ4kląīÜ„‘ĸˇĒˇí"iŠ8(m`˜Š­VĢĻjšAyķ(ŪZã|Ũ4›6TϧUíYJÍâ)ü`T÷æ,l€8B(ÛZ¨†Š-b¤m ĩ ށ!‘’é@’!eą$Ā áģ$ëōãa@ •Đí%wą` %´@E´É% d’“”;vOf9WžĸH ē>W 8A‘Ę—€SD āę=đ=======Ŋ‚˙EÉûĢŨĮ‹yŗ2tō= į–īÜŲ5.E ē €(š9VČōn ¯ŽcĩÃŽ“ĩō­ ¤ŧsØ;‚)Č#ię ™gŋ æ Į ;~E1+×eUîw_ŋX_>ū䃓O×Ú>}ųbąē|pīūėÖ;Į÷îÜ{ûMT[l›æry<>>xũ—Ûí6–O–ÍvĢ8‡cÎíîŦ>øøģ|ņWßEšXU…í°(m0.ËYō=×ܸ‡°Ī8r¨ōËmj…vXzP=ˆ3…”RH•ÛčÆ÷ĻŖã“q<Äͧļ:۞_<~ēyēĐŅåÅĶÅ{Ī_lOi: o†õŌ ÛKøĨĨËL’#É, r1!¯ŸĘAŌtxzu ’=ßߐģlŅtAh‘ũQŪ’čR0%)9Bۈˆ]ÚdūZŒ]ú \ĐnОēœ"d o`îŸBīĸééééééééügĻā“H:dâ.(\Ļ,A (ī’‚@Ųš\`‘I&‚%,Ė“xD!ƒ\Ŋ|@„ e/ (BQ,ōQ!ĢBXNŽ7Z#ÅÁs0ŧwŅōā æ!X,XÃhT\jå(ãGŋõ˙|ŧ=ŲŽÂņ;Ÿ›Ũ|˜B¸{īuåožøđƒoũ۟ÜģsøÎįߚ'(įgŸėß{}6?8ēqįÉwßûŸ˙§˙ņĩh_ŋûÆÍ¯ßĀ‹j¸ŊX>Y_Lęáäp?D%ŧ‰(‰T¸# ,zÁdˆ†ˆņdÆ"V1 īXņ˜īÜĮč>n?ÃúIš|Ú^œøÅæN5˙ß;;ytŠj`~ķΝųŪ[¯->øŪG—OÖë—(”"ÛX kåÎ.&OÜsRɉH‚ÉÕBÜ rģ;S‚rÕęîĸŠā@ ^ &9'č&å}ĘûŽö)ē”ēįdŪ”Ø•´*ĮĀģÜs`|o¤ééééééééügHȕ?pęĘ0ãŖhėÖUMˆ„ÁsĶǞ"WŽPRnV* B($“‚eMŸõĸdĸ{Ëķõ€ÜęJŌ˛áž ŗÃœ<e’1kw3s\!5Œ6pĩÜļž]ĸ­#dŠĶéŅŸ˙ęäŪC Ļ8ē‰Mj–›§‹GMš˙Öģ˙ ¸xūÁûe,î?xČŅ­éŅÛ8[~üŪŗÖâÃŊÛÖÚēMÁp´|öx:šũĢŋü+?~ųXŸūųÛæmy˛`ĶV ˇ‡öĘĪYÜ/–íļž˜L<ލb“‚7ŪhãēnÆÃ ’aųéļ9m‹!ÆEԜ 㨁īč&30&ČĨVĸ˙LB~CĄ•C‚;B˙@OOOOOOO¯ā1ØEvŌŪĐyĩēÚu æžĪÃ(˜)æĐw(Õ¯VZ¯æņa— YQ Ž@7‘pËą*ĨžTŠĸ‘–ĶÍÅĀn ’ģį– G Â)3ĀāFnÜēŅļ———{÷oî}ķëxëxōÖk_z˙ũáųúÖ[_šŨ~¸¨ŠMŲ|Ÿe›tVUĪˇĢ‹ķŗëvĩwt˙Æņí„X3,ļ?úŅ÷ŋķũoVO~ņf|ũÎ'ƒÉŊƒŊ¯ ÷~i´˙„× lŊws’Ē34 #EŒ15ÃA„q@ĩŧüčĮ§'īĨpq˛ŠÂÁâKŋō–m˛ē˛Â‡7fCŦ.üŲĮ/ŸŧöĨđΛoŪ|÷­ÃŊ|ûɓ§ŋũī˙ÃN7į>ŧlc›"oā ĻaÉ:š)Āá€Āĩ`p$2×6)7įJÜ`ō s!’m.iÁFäũSÆl’‘ō+N šĖčČĪ$š‚rD˜ÁAčęÍ’‰‚Ģe6ÍĶ7B  įsbOOOOOOOO¯āēũQxö¸C iĖâXŒ°@fSģ‘Ųæˆ0ÂĀ@‹@‘[œlWÉ$„…#æXw2‚T—>N)Đŗy†–Ŗ*i"čų ‰#dfGY!•—$‹`›ÕJæq6YnaĶxøÆm|áõíŗGķŅ­×>xķ—8¸?k‹™PāËfĩmS‰Áx>?;ĢĘéū}/Ë)0ØčüŅæ…߲7gØ Õb09üōŪíoÚäˈī ŊåŒuXĒ}yļXJ7oŨ(í†ĨaĘøâũ?­ÎŪá4Ēúɏ~° Ŗˇn~ŖYļ6Å ŒmŊŲxŗMEĒ’WäųrÁzyøæ›ˆlßųú?|ūƒ–O.šķõŅÆĸ[ŠŠE˛6$Läyũ”`Žfĸ˜Ķųŗ*[YÉīú\s:gŪ^EžŗēĨáœü#´@0sÁhN1Pr:$`Ėžv8dˆ¤ "•Ÿ8w:õÛŦ=======ų;—ĨG2tƒø,ßĀ`iF0d+<Ȃ @"" nčnŒP  æ´GD  Zކė,Ņ.¸ād Ņ@"äkyo”Q$#;ã‡A2ä„BY×LIÃápĩÁ“gO7Š.fãĢËúÅŒâ§'Ãûwß~ƒƒaÕ,Zo`DUŖ âd0š3?|c˙Æį†ŗëē|üėüôōhÚĐÎîė>­€ū IDATáãúëzøú3 †Į_ßø˛í}ƒû WmÜ)N/ļiĶbĶøåzŨ ącY´ĒËIu˙žËôī|įôÅĸYrq^Í÷ŽSU+mÁ­ jjšYŊHÍz2Š(ũŅÉŖĶÅŠo.đōųėŨwũ7~ķôå˛ ƒČaĄa`™{p¨å?ķڑ+%ŋˆų6ĢöŨ×C>ī o-ðÛyč.ŧtÕ]Ũà !‹û€üĸ‡kķęMœLČßĸ@īJWm÷^âĩ‰{÷i?ƒīééééééų{Čß9MöŽt2 nĸeŋ Žâ#ab`ˇŌĀŦ¤ $’Q#ģAoîfęšYsĒ`Öä]fĨ~îĘĻkƒ-ōɁxsųķNŪmDZO‹—gëúé‹Éũée{ųŅ?øÜŗ/Ū9ē÷&ą(j_>{ūŦ´ũŖ}7ŽËĸÜGˆĀ`2ˇīŪZ­V‹3 ƒ0ogŗáƒ7áÖtP­_Vv8™Ū“7QÜō¸ŸŌ0įŗ0ší§ĒmQm稛 ‹ÂŊ]ėŊ6O§ßō"?xøé'ĪŪxã—ŋōÕ†%SŊ~4ŠŽ‘X.ĘæųĻY#øŧWķbŗ|1LƒAU‡Ņ|úđ­wīWQ­ˇmÛȝ‰V#Õ)‹ī.~FNus8!˜Ŗk@% ōŽRW–‹UŗˇåÕī0…Øšäs\dAô|${hōa)˙ŲØžĒüe9‡œAf]ĸdē:h%AdŅī°öôôôôôôô ū3 ĮHBŽ•4Rž§°ŨH5ow~Œ<Ũ%+Hs/ESNxASöĀĐÄëž "0;>” æčp‡PōŨO)ĮœäŨÚî)¤r!W‘įËåÁá|š8}öéōæ”ãšĩĪ.ôßhoüôüâ¨æėÁ›ŗ¸ŪŽץ˜ļŨz(ˇoŨmĢÅfyvķΝöüųééIÛVÃųÔãØG†É Ááļ™ -bŒyŪĨ%Æa8YŸ´›fRŽGƒ’qģŽž°Āév{tüđ—ãĀđĻڈ‚‘gf•7§›§/NOž­ĒíøčÎíģˇĪž|0āŅÉ㸌÷oø|ųũOŪ~đæ'?ų^Ŋq­[Ô-LM@khˆœŌčCŠû]A°”ä&•—G™¯Š Œ_i÷îj‡ š„ÎÛŪ‘ģŧ:U¯ļ§LāOŊ@ųšÜĀÖ]96’uĻsæt¯e—MŲ˙˙ßĶĶĶĶĶĶĶ+øĪ)N÷,ˆŗ6˒ÎĀ‹&€.\š8\‚á*.đÚ3ēŽÅŨ$ JszønqÖ,˙AN ‰čމģÄAÉŗp$čîrߓ˛p%DVmZm›†­V/¸ųĀøáI8lëu[NpãöŦ(›Ļē\?ŲVĪqNöÁļ > ûĶbŠjųãoũūɋG7nß(Ō}ĘSÁgą˜%ŧu_'+€Ą•¯ĖŌĀ9ojߜĩŠŽ´LfĪOĮ‡÷l€:ÂZĶúėŊu{šŋM/ž=ú‹G=Žoߨ0(fąāęâą/N­ß.‹zyūŊ?üŖâņļ]ŦÛ!kÚļjBmĸeŠíĖŠ0IHæIJBv˛dy ™|×ĩä€H:áĘĮ¤î'‰’_ģ#˜ížįØyc uįuA‘’ƒ.éĘ$ÆŨ‘Ā!÷î2Kũ˙˙=======Ŋ‚˙yŠūJQëšíū/ēÅÂ딀I €$CÄ.…0ËA^T–ėÖit%"’ Đ ˜ĩŽH: AˊpæA:ŗÁÂá€QNXî@ÖũLrōÅ@×˙.åxrļXŽGá`/\\T›%Žnë‚UU¨iž^Ļo'ŗÁūA[âôėųÅfŊ??>ØŋS“ļ*ļëu‰CŦON^žž ņŪŊģVNë:L§ˇöę­1ĖPŒR­URZ1a‘HĄ˜îŨ¸•V—õfųōütÛŽžõũßũĘģŸģģ÷zØ:ÂČĢôėųG—õËËõŖ×ˇa•ę'ˇ<ßŪĮō"ėM>øöĸBl‰Ú‡_úڃßūķ?ũƒßŸm‘X”TĢ&ĨZã˙ĮŪ›ôX’mŲykí}ĖėvŪEF6¯ÍĮ*˛D˛D$$¨ČÍ õÃô ô hĀi X $˛@Tģ—•Yų23oŽßÆĖÎŪKƒs=^ÖkJĸ& ûˆôôđæŪ›ŽuöY{­Žo2=•¤tqĩHĄĖ„^ŽL.‡%žŦ@ĩŨĶ&ž/¨ty!\žlk:^’ˆøŪÔübk×å Ö.PtizĀE¤šŒíÉ(ą5OÁ˜íļi˙+ōŊÅ zķ,$.cŅ—Ä‹ŠšŌ%W"Aē;gkqŦÅŋ‚2534ą@EŲē5uÉ{ˈ˜ē{*ÁĒ8 -Z'˜¤S[h@]kīĖ(mĨR2# ›9›ĸ&ØäŧŠÁ ”ːŲĻûL |č‚8+‰Žøæ‹ũģĶ˙Į˙Íũģ_áĶ×č>Ūn¯ŽĀķ4mnvķa^uM5-áĒĄ¨uøäĶß˙û˙ā||ÂvģšúlĶŨ7(×}ī‡1€d7Ė°ÂŽ€ãņ¸ŲŦîáĢõ&ĪOO2ūāõ§˙õūWeŊ‚máÎŗyŋųß˙×?:ūėúŋø[Ÿŧ^OĮSoļéfĖßaĒãūéķĪīūo>˙ôSüäoâ_}qøv_ŗŦ?Ģ2˛dJėÃü¤z x7CŦ`‘J0íĕíR­˛ WZž„EF*h•JR(2 )$cÍ kŗ|…jMTĄB"“Ęv!Ō(e*SLh&'SŌ‚HÆŦĸu´‚ 2“â˙˝f ˙o(x Š¸>Ŧ§ļŒÁöŸ.ö”—1hIv™˛›D¨R¤ŧÉũDē Đ.‘I öáT$ ČËĐׂfjvíKĮPB‚üelœ” ŅfšR ]-opZmI—R´ŊÖæâ¸…BÔ É↠UÄc&Īüß˙ŖŸüŨßuõ1~öũfSuŦ^įÃã“ĐÅÜšīú,Ēõ|ڟĮwÃw×ÃöĒsÛ^ŖŋÂä8ĪĐú~›BDę“Ķ|5`ƒ5Qč9Ž0¯ WŸŨāD´ öįŠ’ŽáÂ|úéĢOâ¯˙­ožõmõéŨĄœéÄĶ/Ū\? ×ðæ:žĪ÷_|ņúOö÷˙ōį_ūŗ=žm€ĖYČfb‘!•ā uyâhÂĨ;7ĒÂņÅ"/4Ģ •‰‰L1/F)eûëzņĐ4ËúKa*_lfÛWšīĻíÍ ¨íc\ŊОw˛ëKqƖĸŖ0Ŗ;|ésZXXXXXXXü¯ņĮ¤Đô/ˆ0¤‰Ė&  P d2ĨRY@P ē”JŋŦ3H(/Fųéã%zēÚ>(ĄĨÕđEė# kËĢl~vd;1Tx[S5čÅÝm72CĘ` ŋxåm‘ÅYXĸ>ŖÎ§é0ūņwīW˙âOōw˙Įī?Ãßøk×7¯Ž}gLĀqÂZčzŌ×į˛Žš˙ųŋ˜ęŖ[ŦÖ[p—Gž†ā<= `¸žÅĢۛ~*/:Äôt0H+>kŪŋÃW_éŨûÃģīÎĮņ‹7÷ôĢŋņ×ū“ŋųwūs|üCÄLë~į“ŸüÎīíņôöĩŊ:íëķ—§,ˇ¯WøæÛ|ķöí˙öĪŋú7_v'M÷§|Äī^mëķČôŦYŗ)`•ĘH‰öĸā)2„ +"Û% ‘b[r­&!¤Ĩ†2Ā„…ˆ23.^&``K!DĨ}8N1Ą|ņē7™ŸÍĐT€” A›'ŠHI0)j@€_6ZiËO…………………EÁ˙å:ũeVÎ_nĄŠđGH…ĸÅ8š˛B†tX’ĄŠ„E &adf „Ēâ2\šų:3™ēˆqFĻ%á/Ŗ]1$Ĩ˛ųāÛlŪĄ”ü2ļ‚ÉˤˇE7á˙aü^š*FÁ t%I—# Đaž0G–ķøôôg˙äO˙ėūūŽ×ëÛÛūz˜u†[į×ĢájXíHŽãÃiŧ<|YķlD×9ÄÜ›ĄãG¯ŧęčˇ7Ûŋō͟ũ—hWۇoŋųâĢŋú;ŋsũéí]™N_}ũ/˙q÷ūû§žâ§Ø}÷ūÍ_~ûūūé|Ö~ŋzäķüũŋķƒŋ÷žų¨˙ãņ˙á˙ôæëũĪ>ūŪ}{%Ž‡ŅŸaöŒ2ŖDÅeØÆđ3ĸ˛™ÖÛ-A%‚jĪN…ËvrR[`&ß3SD œ‘ĸíŸfģaË´i¯ö°ë/ô/ņûQô™l-ą†„\ ˆ/ģyyړQEYö)@‹faaaaaaaQđŋ–~ą™|đÍ4ëÉ͇õԗæDk­Yf$$Z.¤F9i—č8BißO[ŸĖËÚkĢį 57 Û7,ů_ķƒÚk‰å—XzÁ.Q‘-ņĖ€ ąéWĒļ)4šĶ2C )Išģ# pÄÚė*ËqŌķažöũÛXī:á˜ĒÔÚmåŨʋõ]ŊöãīÜ `ĸČhā€a՗ëae?ėã0N{{Ŋ9āÕ}Uvuúķ‰õ4œž‰oūíŨaZŸĮnöŦķĮ{å”z3žųq˛+–â4æŋũīūčŸũˇÔw¸Ųu¯Ū?¸~ūmž§Ņ1Ž zöæė(“˜@R#DõÅĐRh”ŗ2 æbOķ€DÕöGŗåŋ#ږĒ^„9(0.a?ÖÖa?DË ų’#É&ęÛcÍË+‡ŧ$Œļ׊ōå°(9.' Ā/’`Ĩ>Šŗė ļ ā˙—aŋ2€Ī—?^ŌÖ!7Ād†4ÁÅBÁÂLéjMĢVŦ<˰Aáh=›)0‘BĢņi%ŸËâtüæ8p"~™5™`Ét¸˜•2Gkb% ŌHĩėËa$‘ ՛™9ŨŪ·ãũdĀŨ`ŨĐãHw7ž53Ē8Ģļļ^ß?ųĨ'Ü f‚€ŗ[íû­rčŪÆ qĖÃŖÛ&î~ô1:Ã~^÷Ü ¯Ëā퍧z˙ÍĶ†ØŽŽÜĘl>L÷īŽWÄ1q~Āęš^ųöŗaˇZ­tûŧ~~žâ„Sąn= ]ŌÚí†Ņ‚A˛_ŠÅ’.q0'™/éī-BdÆLō’ß ˜pņ)ĩķQ_ž ™p _nlÚn‰—ēÜËķTˆš2Ŋl$āŧ4CĩVŖÂĖØĘĨ˙[•;?$s7eĻī­ąę{^y EtXĄi)‚Ŧ#\r™ r´?˜LÁ.Z`Ĩ-žæ’Ėŧt°ÂԐ´&"ÅzhxɂRŒô—ĸĪÖAäßģ!°Öę*6ƒž“Ū>Ę%-‡¤fDq˛x­ĩi2"‰˙㛇ģ¯n¯Íėx<ÖįiŗZíļÛÍ8×yNÉ;ē{d-zOõō„e;âDd…ÆŒ0iXõ˛ aXmįÎ>­z՚S}ØŽf~Îqî‡įÎNĶŧ;ûäãĮų)„Y†ŠŽ§ŠČĄŦ×ëĸÚ2ŲIą‰”XŠ1ķŌw Y ‚ETĨÁB26?úĨœK2ļSŧ¤ęS–ÄT‰Fok dÂU€ā•mgXŒˆD÷â’H*= ˆŦ”ˇÖ§v’ķb^@Š`ņ$mÉĸYXXXXXXXüo×ņöũđČϚį˜{/í ÖyA $I#YÚW(Ĩ҈YHŌ\kĖâē7ĀDą´IyĘH§ščjŦÔŒQZā E„.Ųã}éy‰9He+ĘĄŖË¤—5ʈËНrĸķ6ŠNęc`¤`"š:ŗõēsŅ ÔjĨXé˜ĒdŊŒ§Ãz÷Á÷ rȐ4™ŅÔĄ<ŨŸ>úņž|~ˇžģÛî>úųūųŗŨíáŧ˙ōë{uuŗ]oēėūîúūŨ?ü_Žīž~ī“O§Ķũí:ęĖųpÖėVĄ€ËļÅÛR*ÃĸΝLˆņ8ZÉué3Q§šĐaÔ\?8Ս‰f‡É *Ģ—Æ\4û …qvq#uíŦ&TĐŊ ĩiB•Zņ ”Ššp(¤DvŨPÁP(Äbė͓8NSqīhĒĄdÎįiĻŅs:ŒvąîŦzŗŌ=Ξ^ß\īį)mésZXXXXXXXüoAß[Tũ ēŪė˛åš€ J›įŌƜ@ dÖD9s3WĐÚĖ4ĩ&Q.SXČEWȕØ‘ ƒ÷‘=Ų‰˜y1šWš:S˛ˆFšN9 ĶšÍņââwŠ€!)"[„"ĐÄ ĸŋ¸„˜ÍĀĶ*IYV}įmĸĄP*æ¨tXßW@lķ˙L¤)MÖYĄš,aÍ=b¤ėæúÕ\Õy˙x˙üôîņúŗ]ž§ĩûŨv{ŊÛE¨ķŽüôg?úɗ?˙âūíÃsŒĶeÕSŽļZÚBėÉæ9G.0æ6^\O’˜ĀŊ…E^ŦJč4+@VŗD4]o“.kŨĐ'(ŠfFdUdĻH¸Üf8QāAÍĩ‰ z˜ØžkSm]ž šQr˜Ō<#HÃŦĖD(eÍã!ˆâĨ(–@†ĩˈéxÎņd]‡qF?,2~aaaaaaaQđŋ"ßsÜĄBwĀ‘„ "Q"¤ë˛‰č¤.°s+`Gh&obZđĒæžo Ū ¸’‘í/¨˜ĩÉw/x[Z|d0ƒtf9X336ˇŊzSŅeA–”™Qŧ˜jHģdį´ū)˜°šĶuų†Ú¯l“øķDĐ ‚L°vq:™Ü¤\îÉ8 ä3Z"Ž[e4īĮņÚ#įútķã]÷wˆįŽį4EąînîŽv7kF)Ũ“e"#įąÎPÎšģšŽšÆTsœTk[ņíîŖ„Ŋ8ŦUēÚŊũkĮËJ(Jf0Š„ĒHĶ …ŅūL¨ė~™—xé¤Ō/GČ-nŌĐLûD‚-Ė.šät ”ĸ DJǰ+ŽwWLŌčƒyZzīĨ÷Z+Ü^r-‘”@ŧ;îyŨëôģ?ûëÜŦNīŋžģŊE)Ãt|úúáãĪ?gÆŋų÷rz˙øņõęüˇ×]—–™™ŠT2yņ… ˛Ŧkœcž"Sõ  Tq–j2Áįéœ-ˆŊ Ũ!HZ&ŒÖŌ/eY€’§yúpōq°¸™™Ėé–.G\ÂßÛÄŊũ}(‚”~9WģÖBPl5­bÄe‘BĘ  \­—š@č T›÷ôÚŲÄÄĶ#†ÕōS`aaaaaaaQđŋ_^/,ŽDÔK"ü<ƒö;wũÁ§ŸŊOlĻoĐ) )ifN™™˜éÍrŽtĐZ—ĒĄƒŲVh øË—yß*fîVĖÍáîMŲ—Î2ŠÎíũÕ*/ >?\)XsŌ8MšjŽJō›hRŦģšÄ  :X<Ã#gZFo(I;S×MĶh,$ÍA^IEŅķ8­†î¨YĨ‹‡÷īŪ|{ˇ^cĩē톧‡ûų|Ū ëÕÍĻ~t¤möįĮõëĢŦ˜įqžį˜U0q:…2 C™Ė y)āŅō8#Ōjį’.UYĄvI% E)[&ŒL—2Ļu?45OÛj™ŒRIŌĖø=.áđĄi&dũå[ūP 8Šö¤Ķk*3_˛å}N‡1¤œjĢĪíŦuŽ1ĘkßīąŨ{Ųĸ^XXXXXXXXü_ ŋ”ŨˇQjĸVx˙ųŨëŊ}ûÃãš9ÍŊĩö€4 Ģ •h+¤¤ĶĖ Æi¸´tDŌ_<Ŗ^ŋh“~ˆčļ7! ÉŨŨ­”bīēųø"%[É᧟ũrl/E x1‹|xģ,pu Éd”1iē|Ô÷īߛ‘…0ąīL7¯ĻŦāT:z Q^Øul€ĩKˆæŠ-į¯\ß`Ķ!øé]ôqsûf€uŊšzũ:mÖ7ũíŋ÷÷ß~ôÕô8ŨũT‡ÃĄĐúÎ6Ĩôž*eU¸"úuwÃôKF9Kŗ0Y×ēŖ>ėˆĮũŲ@$§:cNsDNcĄR—‡)E™ ĩÖņtžNĶųtšĮŠÖšYŗHÍØų…°Ũî>(xž<ŽŽôČīŠLRŗäg´Z.¤ŅÂ'IzdiĮ3 AC(¸ûiŽŗuķjõUÛÍCTĖ#ÚËcaaaaaaaaQđŋ.ŲņÁ…‚ÎrS’Å`‰0?Ûl^I¯RdRôË$äáˆTf}ņ]dÂaôŽ 6ËM„¸D=ļĀH)%5ŸĐyžh%P0Ōáîfv:.ڑIÁ‚6ūû?ĢNŌ/Ģ4’"jBR2€vt03 įä ƒÖb =ąÛlH‘ ÄĖšZԑŞ˙Ļæ,Ėė@J 3+ĨÄí“*jĒJ VĐĶz/×ÃĄœīûĶæz]ÆķÕĐ3…u?ŽžøøÕ§ņę۟{˙ÍûūčGltUĘ0ë¤ņŽš0Mé­ĀļMŦ“ķ´4Ā2 ŠŠm°žŖ•j †9TLíQ§.§P†Č’YĀͰĩaį¤,Jobōė“ö’×M†#2“)EJ*‰Žé­;€@hΌZ%M§ąIöĖĖøĐīĘšžŧƨd:aJSžę4ĨدrXÆš§ņɧãō#`aaaaaaaQđŋJ›Ë:@E&˚"€Ã ŦtÃjĀŠžņ‹§ũģÕ鈄ŋėŗ‚dfķB\ˇL™5”ļęŗUE"‰H$MÂĖØ<î¨I˜ÁŒˆÖĶÉ01 )ÁŒ”,áEp!-Ī]Eģ#Š*%4ŗÜŊ3 Q3ÅdgCW •Î4Ę“Ŧ(ųđÜ{/pF‡šH=U`O#/¯l‹œUŗ4m†Íņø|:]ēZwÃĒ‹y>ŽGßÜÖÎĪ_Ũ—.?ģîgœr:G™ŠvēZ 1Ôˇi}Õg~Ĩī\gÍc­ŅÁzIhŽ:GIE“Ķhg,"÷Ą‰Õ˛fŠ ZÂ~Šs–Ō[é"㌈6p`íPmŠœÆy>ĪãķyŽĐzؘ`ųRw‰ČÉb0#ɸ,7ģ;ŨŽĶ,B†Ō.XÔôĒAôd;5!Ųö_ĐģˌĻŨ_â€Â0!CtQ@5č•bž¨pdyš§cŒž{ŊÁŨ lɒ\XXXXXXXü¯ņŌā” Ŋļ M˜ÁžĨˤVäzÕ÷š‘’ämŽ ’´¸x[ödĻ"bęņŦVątŲYôfáđæ™Ļ¤ĐÖ"‹”§&—%GÚeÍBJ—›]Âd$Ā ,Íü-Cļ•JBvé-B'ĀĻņf Úęg DbŠ3šFËą`ę`†ëĻ—ƒ­•&x÷Í~ŗåŨĐ)æĶ~>ŨĪ]AĐ9ÜsšC§V×}ņ2Ŧ×ÃxŊŲvėŊ°VG‹ēļnŗ.Öbe¤ŧtÎp^ų65pRĢ™E…ä úzeĨ‰ĖPõ&tp¨ĀŠėŗ_iK…$GōūÍ{\œ-vD0›ĖNČveáL“)YdY*#ÕÁˆD%C͜“/ˇ8Ö,4w*)´ú,aFʂņrãÔHĄ 7pЃŗ%JraaaaaaaQđŋ.ß˙/~ofĢÕjĨh ŪÚÜũ¤˜Ų˛JŦųd@JZŠM¸ŗŖMF’&AˆÖĶdĖūa˛­2–R>įØĨWÔĀ0ORf%DIŲĸęŨÆyƌ„˛ųíŌTúŲMø\æ*ff…Ĩ“Ļ_/ IDATįc!ŧXX†E–T'Zí´ØŠ”Ą‚Ø|ē SB!wDįŪ÷Ŋ­ú¯îŽ>ģÚn6ƒ­ĘēÄ8NyhßÔzX]ß^õ›íqß<Ŋ;=oŧėĘzģé{4՜F í|<%2hU ‘ĸ{Z ķ:ē€N˜GčĖV~;¯p"ŽGßã<ąÖëŧÃî5h¨Ā8áxžN§ÉnæáíãūÛûy?ŲŠæ9YOfvũꕌaÚĐ{é;÷´›ÛĨãķņ͛{Íšę‡Îûyž3kŋ€Ŗ#Œ =ŸŽNGįY,ˆPf Frž3zG)6)åĖbãģžŸSÖk†Ąí°OS)å|ė֛ã8ÆtŪŨ^?žģŨõx<įi¸Ú!Ķ¸ZõĪ@žįRĘzXĮħ͸žsôĢEĀ/,,,,,,, ūˇ €ŋÜdeû§YĮ!os戚ņ°öDCĄÜZq*ĮXĪąZ úņ<=í'aJ`ĩÃĜCĮ=§c1 ąˆ:ÃP×åxĩļU×§xxŸN]ąpžG`ŽĮ×א`’(´¨Ŧ`=%Î˜g k\m}XuįķŋR€ 339žit…B#™‰ąN*(Åúž7OD0 ŪaŸ(;¸ãtÆķ3BXm0l0͘…Htkhe¨É;īī˙ôO˙ĮōÍöĮŊFęY?ūôįpŌ`SÆiާ˜Ņ÷ũĒ2Ŗjžbޜe‰p`]@@‰LÔÄT1bÂõv•§ŲgllčšĻ ˆ,Oīf¸ąt¤(Œ-DË/ĪÖŪ•!j=Æq>(†ÕĒ‹ûũT1lx< &×3 ķœĮĶx €ˆbč…ÛÕĘ{I˜ÕšĻĖŋz?ũôãëÃūx¨Ģyđū\w†Ũfûp8H(}šCœ€?xZwū´ßs%0„ĻķqR§sęœÎiåČ3öÂãēCę×Ö4ū¯āeÄiņ-ÔÖ I˜Ņ;•’YÍ ŖĖén4īļ~<Ž# J_VÆRJß÷īß=2°]mnoŠ˜'ÔĶ…~ebÎØįįöÅt/I“4ô> ôXu¨g4uÛ6…Ļ)k"*:īĖĖqž< Ž1Y Ûĸ&˜™îp/ņŽīOĶ<ŸgJDŦXé}P’IΌyĖŗđ’ĖĶŨĨà ¸3xΘt>`W Á­ãhQu8œ)X?ŋģ{˙‹wëíú#‰LŠouõüžīIÖĐĘpS,\Á1ÁÕRŽAÉžŲbŨa]Gķ9T3âͤšž0ĖB8ē\õũœYsÄ˚D:@äjŨ=?Nŗ*Rŧ_š—žīûãųÔ­ÖOÃzwž‡U÷ü<Ÿķq>9ĀĄ`Ķįœ1ķ4įņņŧ*0ˆČÛí8ŧ۟ŸĪĩįē+ô›_<ÎĀĀTŸ‘+āns;L‡§y.})žĸŲ8fôĀzˇũîp˜Î1%pĒÈaitZXXXXXXXüoA/ŋķ7J|DqXŽ6ëĩn‡ņ„–āBĻ ĄˆĖ~(hff ÆņūųôÉĮŸÍŖQĖ.Kß1_­ļ%,ú§ųx?ŽĄĶį?ūŅ—_ũ9€Ÿ~ūųŋ˙â u=Íž;X ë~æZûqų~:ke_˛”§ˆyJYqØ(•M‘ sđæõĀՀŽ_~,,,,,,,, ūˇČ÷ßȝ ú„Íf“)d*ŗE˜æØm×}éNĶ8g ëUwĩķäčWÛŪē8H6͊LÅŨú6"ÆcĐQH įņéy{{›ā” ķíāĢUå4įȀÂbxuŪõk7֊éŦšē52AÁYž~zā(Ų÷Ų¯fˇ ĶuOMGŸįįÃ;$‡–Î֜ÎgvfÖ)5ŖE !ÆOoļ}×í0ÍûZÃ|ģÛÜŽ×uN"ŪžšŊžÎķÛmןÎO›Íđ|ÜėîßŋÛöũĢÍ čûéTkŊēģĢíI33+„@f V Á\~ ,,,,,,,, ū?Hž7 !ŗFœĻą‹đ$ hNô Ķ\ŧ\ßž2ķ§Ã>CyŗÅ_ŨSīNg÷7đÛ~ÕÍ5ž×wWĶ4ŠSŋ] ÷§Ã¤yŨՔnúūŠÎ§ÃáJ~ģŊ]wåūéņ”ytęjëˇ7žYëņyU9=Üßī1\w}×ASŽgāØųÔõĶz8;‹Vë§XkšûÎK_Ļāw#jˇ^}zs?ŸÄ!ˆ\wĢmqīN§é÷o˙öĮWcNcĸš=ŪGäÍf{w÷Í›ī†ßŽīūéˇ˙îõļ§Îw?öãąÃsÚ̟ũô›÷oʰÚ|tû¯˙üÛŋúƒëņųüüüœĻŨĢ[_or<=ÖiĘú“Ž;„$8%™D5ƒĪĶx åЕŨũjŒÔašĪkYĀ*”]CDîëøĖaė)ëKĘCĒz>ũņđ“õZq^ģ~u;Zųö°?fv›֙ßînžũâĢ›ŌŸįÃgëWûĶņ<Øą‹Ŗķl1uNGŋéÖ2b¸ŸŪßŦĘz[ž;œm7đzxķõģßûŲ~ūķ¯?~}Ģ‚ũųųũĶųõë›÷¯>ųčĪŋ~ˇšŽoož}|‰ënÆiŧų?Ų{īhßÎĒŪû;įķŦōëûˇÛéį¤7H!$!„B*%DBįÁÆĢø^ļ÷"؆mxÕĢōĸrÅzQ@Ĩ( Z‚„ @zNrúŪûėöĢĢ=Μīkī}jШWĖp}ÆëŦŊ~Ģīĩã;įúÎųtã•ҍX ŖÚpØī…A`%˅ÁėÄÔ2y†øjP§ŠŠŠŠŠŠŠJÁ7Ĩ,gˆāËPŽ  @†cå@ؔÃ-"Rà 2"6AšûĨQ/h5nyÍ+j?ūch7`’ e,Ė?ķ™úÔgŨ{_¯ŋ:]Ÿžîæ›Û¯~ļoCilW‹ŦĀž=¸ãŽ{>ķéÅ{îK{ŖzįÚ(ZÍÖŠÛO{úSâĢ.ÅygŖŅ@‘ãžīŒ>˙ųģ>sĮęž}ąP˜ŲĒK`Ú§zÆe—lģâr\ô$ĖNC€ņ÷Ũį>ųŲŨ_øŌøĀáaoÅÆíË˙¯—á'߀ZË"ˆâĀ\~ÛíßūôĮž÷Žvˆ¸V+Xz+29uåK_WŊ ­ČáОúÉ7ĐęŠuéĖö-~įŅÎlį‚˯˛?õ3đõŲ˙íĮ s3ŨˇD[v<ųy7áúį ÕËą8ā ?ÔɆ,…8R̘œŖ1lÃÚôôöķΛŧėbœ{6ē-xÆÃķøęŨsŸøäũßš§Õžzڍ7âĨ/Â);ā2ę ‚Ŋ{ÜįŋtīĮ>ģx×7|Ų^(ļ^Ũāp›gŋæ5á~qŪáŪûžôßßâ=Ø xrzæž{úh˅į_}íUüĖËąkÄaá0/âžžô‘-ܡ{Ą×G`nŧų…Í7ū0ę Ė÷>t͍KƒAŗĶîûOžō˛ķŪņ'``4úÚĪüô—?ķő_Ēw;/{Íkč‡^ŪūĮ_üĐßīŲŊw2ŠÛSSâ\žgũņX#x Ä>ĐqHb,ÖF"¨¨¨¨¨¨¨¨¨ü1˛]ÖkXʆĘá‹O ‘ ž‘)lt¨đĩ¨¨•rÄP5BDȊ, Ãq–%m´æ [‹Kgg`›Č3Ôũ%´Účtęž{ũĢ^ö7üT,ß1h.KŖ}ę˜h`qaŒÕē]LÔqæöķ~äeīŊņĻ §‚nn1;O9īmŋ‰Sģˆ¯ĸ؁Wė:ĩqãMĪŧëîOūō¯ĘwžíV——3ļY6ī|Öoü.xtŒĻB=R`Ē…ŗö™—õ7ũŌĪūŌθ“5ęY+Š&čÔ1ĄŪB’ĸcĶdxö9ŋđŸũÁWútIęAPcÆä,ŽļŸąÖŲķíW_]˙Øįf¨ąxpaÛļI35îĸęÜđô>÷Ņŋ˙›h8Øŧĩ}pS¯x3°uˆG/LÍv†j‹Ą/†ŠäęģFĀíaķéį>éÍ?‹ķÎĐQ4ÁĨOÂųgn~ōö¯˙؛d0ĘL#:ã\tHi<ķŠöŦ3Īŋų>}ÃķÜp)Ŧƒ¨0ZÔīfėÜļĐ-Sœˇ=ßŗˇĄēoa>ÛÃÖĖĨŋ+Zí: č¯âŒœYāé—ÎĻŖ¯~íŪ3ZŗÃ•ŅĘĐ47í€åŨnœ$s++ã8˜¯EįM´ ‚vëķ‡ÚŗŨØĐūáp´yļ9Ũ…pžyĮWöĖĪĖlžO“ŅŌRĢ“8 mÍŧ ÆŽ(Ŧ•ĐÎ G€­ēIVTTTTTTT ū8dMăËΑ@ëÎVŖ ļcĻ‘Â’ąĒ %(`ą €ƒ<8e30X â)К|˙¯ūŋ;gē3SÛO{ūsÆ [ßŧų–ˇŧų>īån0 SGØ@ŖŲũä[u×äļéĶwMŪōL֐._pĶĩŸ˙Ŋŋđíé¤Ũ|ņÛūgN}0?zûįîšũ+W\wÃÄ3Ž@wOšôú7ŋåö|ũXVZ;Ļwß÷‡€ģ6Āvđõ;wũް'†ÂĶ/ģČLNĀ„S“8´šŠ_hK#@-‚÷ŸûŖwmjĩ›;ˇnŋöZ´Bœ=õÆįėųĐûY2îâNˇčN`z ĩLčtv]ũÃwÛŒ×ÆD+Eî]BõaœÆ-aSWßšô’ä3 ÕõwúĶ/GTCÔÎG>lÔÆŖęMן÷ßÍÎōŠ7Üx×G˙aŪāâ[^ˆĶOƒĖ?ô§öā‡>/õíkŠķûfˇOÎÆ~~qš–g#Šˆü–0ĀpŒîũÃ÷åõ‰GōÁŧīl\x&ŧÄą-zũŪÂČÆĖÛ:į_{ļLyī‹wwN߉- \~ŠŨžĩˇ_Räãbh!(h c_zģÎiõ¤…ĪŪÉakōâËaë8ÔmˆPáFÔīq šAašGR˜CŨUxŌi0‚=“wūųÃˇ|ŧēûakîqíĶ3įnŠgûö÷ĐĘh&&îŲsčŨY:°đčΙ›ˇíÄŲgŠßŅ×lÜŦ7“QęĖáfíĸ—Ū„nĶįãƒßžˇ}öé .yZ¯Ũ´Ų˛Œ'&ēŸøĨá?žīo?ų;īØY˜Ķƒ†‘tņ§ĨŪŽãÄ-fi֌|˛Õq‰ÁŽ:(ĢÉØ  Dš#ˆH:’œb„Ą€ščĒé8$%Ã^œ÷…ąfŦ^EÆĖ#h‘Āƒĩ“ĩĸĸĸĸĸĸâ Į÷&IkS:ō3™w#‘j)ĸ„hĖ<F„1qBœ‚RpA€HV—ĀėŌLŌĖ3ÔPĀ;ĩlãZ4€ @e¤2ߚ™ÍŊGÜDĐ|č+ߊ…<ųĶ^|#&:<đšOėûôg<˛euí{ôkˇŪŠ{îA6DĀ;^ōŌåÎėÃcėú FØģ˙+ųŪđūŨįø0J“šƒ{īydßÁÔkļÕ*lpx4‚sh4Ôt˜æcO0! |đĄ‡ēA\LÔ§¤ =ũRÔ>ũä;Ūéŋų(Ãû­OŊxXØšD˛ÕŅ2Ŧƒ¨|s7 a›ģŽžöžqî8 Ûw‚ųŅĪŪŽ0Rh–’fâŧæ0#˜‘Q­%ĩV떛+"Å#ÜņîwgwßuKôČÂäĄåÁ]÷¸ënX8ŸꑎÁ "ëõ––Й€šÍŊėÖfp8Ģ ˛ÂŖQG‘ĄUÃĻÎŽžQK‚g=÷ųáļ-đ„ûį?wˇ?4ÚYį`Ē ĘĄîžüÄÅaŖåIÖk´ÂÍ!õũŦ‹a#œsŪŪ‚&ģÛĐŨ†TÁîÛ÷ß_Ūēeú@Úk\˙ÔĨ¨1Qīƒ•nėwßšh mTĢ5Å`‚-Î~Ų måŗŽš§ÎbĪ! {{ŋüĩŗ3׈ēK9af3Î8–°´XÜ÷ĐĄ/|uûĩ ¨W]=˙73Eā—M҈ũ„)ĀÂcˇûÃ?íįnl>ã wÁųŗ×< ““~aņĢ_ũō)7ŨJP÷Ŋ|8v.l†°PMŪĒq­›|'2*ˇŌ¨+H IDATßũų°É“Ļą­4ļ`’ē+ +I: k0ŦQ¨)Θ­_}ŪĖĩOŪ|ášØŅÂj_Ų3wį7(°Ëƒĸ“Z4ē“‹Sw!WŪßų­‡ZŸ¸ø’§Bí™7>į/ūâ=›ØŲdpįĮ?qËŗŽĀöŲËŋ˙–Ëo~>–úųwî}øëwũõ_žĢ?\¸¨ąykwë0qãG‘X0ãÉO~ëį> ŸCÆÂXÄą¸,XęŗĢ“Ī˜öN, =8ėx'šēšąJ…ÆY6ãB%Mm!+=´ģXX™ËÅĨÃĖ7‘I‘į)TGpÉ ~ũĐ`„vLYqøđ'ßúkūÁŊQ<žęNę"/8ÜđĒW [‡Ęīmuņˇėãŋé˙Ǝ)<ũŠé‹ÎŸŨŊß ‡~ņĢ÷øãg?÷:lÛt›áu—Ÿ{ų9ŋüãßĮ˙øƒĪũîģ–ķ•ē­z Ę‚+P1öĀQ„¨Ļ`°ƒrī…áŗ4a¸ûĐÁ‘ŠōPe‚ÚŦBéPĩ/ÚSZõˆW +•žķCŅL ĘŗĶ;0ōp ´j(­|án}Ν˙ū,ÅLál” GpŒA‚0¨Vo5Ŗ†Ęm€nįÛķûn™ņÄô ÛĀŌ¸0ŠGV“Ígœ ŌūyŅĐ",Cs#2yæ)ûFƒ{ …zÔ ęͅ~_é`l…acp1p _ "PœēU ufĻrKĢĩFēc{ũæ›P ą˛ŧwīŖŨĶTŲŊŅ™8ķĻįŽÂē CĘ8YŽlœĖÜũáO"Ņm—^Šf ~⃎M™^á ō žGAŸĸpđ oƒÜģŅxq‘:V\°ë,ŋœDC>3āx‘mԛĶ…Fq<ā<Ô!2FĸNŊ9ۙlq˃Ŋ<ņvšO]wĨļŌûÚĄöŲá><ō­o‚-Ŧ}Ęĩ×/8ŧ°°P[ũÕ/ūæo]ũĸ;ßđ–ūģ?Ša0BˇŠú•¯{ųėĨįk{2ŠÅKâ˜aÂĪūī÷Ūųî÷|åĪ˙÷įŪqë×?ø$Îäļōkîæöîך%ôGėŪŨw.3&!NˆĮJ)ķĀëĀißÉĀËXt,H9Œ­|đO8ūŖrđQÆzŦšjBđ†xĢDyU%XCL$ŦšŠ&Ę)DČ 0ŊûˇģōâĄU8ķíģŋ3zä‘s<“b~Ü[ŌL[Ŧô^qŕ3홟˙_ÛvŨ5ņYgžäíŋ˙GĪyŪŊ+‹ŲDĢCÔkpūŦ+žūWo˙ŗ3ę‰âû†~ĶĻŠ‹¯€Dõ ĀŨ÷FˇmÍāđŖØt&Ŧßō´ įū&hīÚ<ßëŊũē—ĻĻŪō…Û!,!ˇlŨ~ßÁCĢÃÁÜâ/\ũÜŗO?åÕoûÄ1ęíWūÁoũõU—mi5˛z'zĘųØļi•ÆŗŗĪ}Ķņu؝&Č"ļĶ×\3÷ÛŋwFĐĩ>Í H>xæŽM_zīߜöü§ŖÎ(r|ákŲwlī8Dč§ČLĖM’\ Cž §™ {xxOũėSáõŧ3Īũrkv4ėnj˛8ÖP‡K/q1`āáčG^ôüf3ū™_zë–+ŽFĢ{Õ˙ø÷^wÃöúĖū•ÃÁäėæ+.ÁŠ[V!Ũfđãoûmô<¸ „ Å3_ōÂģ~ũ÷vEŗ÷ûíî´é%wūÕīüā'–䞴åˇ>ø.ĸĶvÍø`:˜ĒՊ‰FĀÅÁų_ķ/6ō´†ŖÂŸûô§?å…/ŪŠ+ŧē\ą<Ėžũģŋü…/ Í-Œ gęą@ äŖ”:ņ¤#r(Hr@ˆŒA%á+******žhüĪÁëcKzĸ"*kk2qCČ~L”0gÆæ6Ȃ8âåÂ÷ ™ĩydÆfāĩ^4õŖŪ;ßũįüoûô‡>ōĨ}ęĐŨt¸æŒ™—lĄi–ęK7°:nĨZúßk678}ķ3~ü5z¸đ_ēí H į?¯¸ėĸ{ZƒÔÔ7īzî‹qŪÅ(b¤tīÛūŋgnž¨ üû÷ _ÅÖg_~ážâū™Č1¯&.ß2Œ|1×[. Њļ@D[Ä´^xĮ+߀ųUÄ›ã—ŋé'öŠ{ Ļįŧꖁ 3n ÉĐiaŌ HĀXsėlšščĪę œfõŠÚŦŽ &ƒņø`mņ îøŌ˛ņũũŪíJ! Š.2fĶ2AĮ‚í˛Ļ+2‚&“Z ?öqė[@îę_ú¤ŋčኊ‡[›¨O~3ĸÃ[ģį_û´Ãˆ" 0(€ÂũĢ;ώūØ[p˙lŒSģũ?¯žo°Üœž~´.žōĻ1ā!P84Ŗ%ÄŖ˜°}ķiĪē|¯KŸņŌ›ē§oËB¸Ėį’•~zpŠĀqÔh´ļm9čGûe„CɃ l(×Á2ƒ>ÆcxW KŒĨQ–$Coô-o}ķ/ūâ[W†} CĮA?Íń9ÛÅÁx,4.a &LBš =:„Ŧ¨¨¨¨¨¨¨xĸđ=öÁ—iv0ABI}aEœGāa@ʔ[SEKIŠĖ5šĻ)Č3ˆŗņĀFfŒ7×jũ•~Žš Æ.¤ŋĐhחÉåõƖfî^2*FEž˙ņûž×ŋąšāÕ¯¨˙õû.ßú;rÁ%WÕÎچ¸ū†üíüGoģ˙ŸxŅ•WwŸ˙\1æīēí‹Ĩ…‰6>öž[_˙ú€LgęE?ųߎ~ÚÅ{îüzgl'O9Ŗ1š!¤ēĐ_„fSlĀ&‰MR$ƒļÔøŖ3?ņZÔ Ũtũø]īZí4fŽŋj ™…ųö­gÍį 3H‹ˆ:[.zōö_‹Éö9W_}ī'ī´™ņŠĸŅ‚ņh¸åÕŊƒ=ķģßķ—;vŸãÅŖ_ųĸE+b_ 3j#§‰'r†r õ>pIm$ŸũŖwŪtŪų¸tĶŨ™_ūųë.ģøÁ{īŊ`ët}kˇšsŊš}ûöÜŋ9Œ €WĖ>%žįFc÷G?uÚŊ‘?ûu¯øęŸũIâõáŅęĪŊĻ@Z/ōOüÉ_ô|(˛õÉŠÍ=˛üŒ—ŋdöēK‡OšáēO}äŖ¯ēúĘĢ~íz, }îÎų•ŪŗëŅÖK΋wžrčöíÛ÷đū}QŗŖĄ…H“­ŽFâÆÉpûŽS˜,E#˛9œ6M¯đĢ9~ø‡_sÃOū<Čžë­ŋđ§ŋ˙?]š ņĐK­ŲGŽPTŲ+rĨ đĒžę_QQQQQQQ)øĮBs*(ˆŽŌđå‡@sņžIˆXU,"JA”i‘™¨ˇÂ°Öô{Ųx4L uZų¸×KüLƒÆä5âÂi´8“i׿–úÉHŠ‚Ã­xŠÅ+šÍîØōGīūŗgžäæÉVŒfëš|ß{Ūöįq_˙§~õŋõæÆųģШuo|öU/$- :øĩû˙ōgŪØ-o#¸Zƒá;^üÚī˙īŋŌ¸úŲ“]4yÕ3XĸQGáđ衙zk96`~íŠ\cõ4Ė>ũõō럍]ĶØ2sá+oŪŗ’R_cĪŌŖŋđ§Û@{y(­:r–g]ļũ9—ƒŽŧ”vn–]ž up´;°§Ŋ÷~ķë_ģ}S{ОĄÆFŨÁ0FÃU_Ŧ‡ĒĸČ ØTbMZįŋņ›ŋ{ŅĪŊ W\Øáe7œ~†=D!Æ+¸c÷rāŊm€Q 6˜˜Ęz+v”ÖÂčCˇžëMĪšģ6!ŽŨø’—üųŸū¯[^ķũ€V\p`~Ī;?ŧüāÃũÜĩffVâ{Ã×=ûŠđÉöōíxdaéá×ũči—ûڟz]÷”žÎ=Â>˙åÛ>üáÛß÷ūāĐß?Ų –P&ãHļđÎ7žåIO{Æĩ¯~!Ž:IŽáļ~øSŸ˙Ō‡˙a÷G>ÔIaƒS—–A1Vr\ÚÖjúÁ úûöãŪŨ05}ÚsnzZÔAZĀøü][†ãōs'ZËũŅĘ`Ņ>ÜÆūŊ˜žÂÄėĶÎģāžO}ąCŠ,gØũ`”láąØ›‚ņRÛØ…ájīÁûp`?ļnGŗÁ’9uĄHr@Ąu0iš>´ûm?ú›Ž|úKúgąëTrQn.ŪšÃÎ=Lž?ŽE;Í1âl(Ķy°-nÎ-=ŧ%Ē™Āė§Ûŗ‘­™•Q?h7ĮIÆŪØŪčĘö)4ę?ät۝F@ĶūĘtciqøÔÖÅ\ŋķŽŋ0EA;šHŨ4Ų–zé;ÆĖ¯Œģí:OLī)rģuûCĢ}NÉŗn2Ž>ãbЁˠæQw–R8NO  ?ƜR­Ö˜ˆÚAĪŊ…Z´œą4âš1Q´Édē3Bļrh˛/ĮvvûžÕnÄ.M&5,\^tƒUIRįgZ““#.úų’Ú¨V›h?˛ē°Ü DyrlGÉĐĖ4VĩÚÂjß;ŪŌžŒGEMen¸P¯×ķNx8›(fĪv( Æ–––įj€1kõ…a𨿨Kg˛Ŋēt°a9ƒĻ'k}iŽsŋš-/ĖEahȄdFƒAwbĒßīGõZRäĘ&gÍ!9D /,¯° Ģ4|EEEÅA˜ų¤ú§œU-?ĒnWÅ6ūĶ<”03ą!Y0 ąecŒZj×pžFyęōZMw§ķ€Ō$ŸĒˇŠáxËdmq5 ÂŪ6M0UoI‘K;đbð1‡ũåma ČĻp5Éši÷Í­ f#‹û¸d• Û7ĩ÷9¤+ Ë鸚ģæŖšš…Sۍ­›&ö<‰;k×Ųád<^Ig'š=ĢŖD5 ,-I˛œĻƒa0Ÿj''I¯ “IÖ(Ė­Ö`0¨ÕyšžŌŦ÷-œ:3ƒČŒŌbDŖœĮ›ÛSƒl)›ōÁŽFŗž:¨ájļ4Ķ› ëuų➋L?×Ā#šhÕ0.’Ôá°&Åx°Ĩֈ ô>(œ Œ€,yk3 &ãFŅJ–ÉhŗąÆ˜ŪŌ~Ō8ôaŽ­s†ēõČĀÔb“-?ēĨŨXč¯ÔjwÃēą Š8H†>ˆÂŅáÅ-Û&ĶáęōÜüXˇDŗ6l9Ģ÷Ī?ĘuSW ‹0œõä—¯Œā;›ë-ąŪÁ$~8X ŠV‡aP’g‡Vō‰IĮĩL§‡‹aģŲJĮƒ€‘äY­Ũé ŖĨŪ`ĖvšÛ(Ÿ›Īŗ‚Āá8é=0^Ū<ŲŽ’"Ë6MOš4ōa0pĒäI…¨ ÎTąÖ‹ĻĸĸĸĸĸĸĸĸRđe¨YŗÂ[c ŗxŖLPCėÁ E’gõ0šš™ļ…Œzƒáp˜¤…ëlÚ:¤ƒb˜GˆļlØähÜ4[ëØ9¨pƒl7Ŧ[.î%­éÚ\’YÖ 8´4žÚļ:ÔąS4Č:ŨNxxŦƒ­ögâ‰(ˇ¯ėiŲnsbĻ7đũƒALÎÎŪļ| 0vzsˇy_ž°˙đ( ;vzxqÅFŌ âa:NļļhBÃfRp`W5O›A2NC7.–ŲjĜ‰Œįį'&ŌÃŊŊ3Ũ)ÉzJHÚpõ éx(By욞Rßų&jh֛ė­ôāęJĢŅë uõLāâX/0 ÎU8Gč9RvbH”ôVšÍfß_Ô#Āĸī0ŊŲŽ ˛Ø6ģ „´eŖQ2å2ÕiĖ Wú@=,-/ĸ†1ËC‹éĖĻ™QŋwĘT}ßÁÕ¤x*ʝ[­aĐ"Ŗ6ÆđŨÍ-åĩ63S7Í"é/ΖfÃLĩįÆã *M \}q<¨ŅÖ6įņŽ1Õ=xøpmĶĖŪÕĨz Ë84ôąô‚ÎĻ…Õ~{ĸU Ķo. НāCäįüäÄLÚ\ކČX|JXI’ÜpJš@DH ¤š*19PPųh*******žhüŸuŅ`ŨHC”øâ JĀCbĄ@°mËTæsRŠå°NŲ“ÎPĮy’69ˆŲæŖ¤Úh&EŲ~æĻ&0ĄmėÍ͚Œ–Û;:ßJ‡Ģd|ÔĮē‹ŒËI—rŠ7§V‡Ŗ¨Î6Đ^/é´Đ zą2>Ĩ§Iē9D?Į20cyg(5‹ÄNöGR÷ĮĄyi‰ļZã,kÖjČŗ Č(؏tf'\nŒ Ėâpė2ĢŽ(|ŗŅ\gŠF HظNĶĻÉ ×GPa&’$éļxyš7;Õ“Ā„ãqj€¨VŗÖޞD™(°šĢįĀö—û¸šĩĸĸĸâŋ •‹ĻĸRđ˙R-ÔaĀ́T3CĩŨ¨&Ŗb°BĀJ‚1€0@ZJ~P°Uc˜ŲaëˆÔ>%‘¤J$d=Å"D$–=QōP…Wu !æˆ&ŖFˆ (Œõ~Öĸ¨ĩ ˛Ü Ķl,ŽPI|{X 4"ŽM°ÆŒ:4‚Fĸ5ń "°1¤ę9V ˆ ÖQä¸ĻAČxU B.#†X°A 0žTBV( V5e;"e60å7 Ē"…aK,LŠ8"1qN†YUŊHXUTsHĻ"ļîUČg^$d@ë‰L`4SŸŠK&ąĄc+v™ĒäLہåŦpšąw¤*¤° Cd ^T=qÁę@^Š2T ^JF âŧÆ:"VņPUõ ŦÄšD Rw QY"b*ƒFYûō-Ÿ¸8ŽÉī}î cŒ`ظōÁWTTTT žRđO,ūĘĖ ¤ € XĄBlEĄälĸĨúwÎp'ÄĘĸÄĒjDČŠUYa‘ZŠ- Yą60`U@Õ¨F… l}™ )[‚Qâ‹ĸPOšåb}fLŲ,—ÔiX¯FČBk*!iŨ˜€É) 2!%¨’å¨%xŲ”•HKUĢĒš  @…CĘ b  ˆ• ęĩ,ü‡ĻŧCT~škĖ0CĒ`ę‰@F™3IUPU9õND PVBEP‰æžT…‘3$ +ķĀINTÍÉäđDՐ s…SˆĀ“!°Âz‚0dČŠ^ Qˆ¨ąë§¨Ē„AD^Ô)Š‚ ē6lj9â9*@ČĢz…€ŲƒÆCĒpō…§5@DlL§fŪąŠˆxī |*Ē/€ŠŠŠŠŠŠŠJÁ˙Û=Ų8ŽzŌĨP6( *~ã}‚ĒŽÅÖĐRî‚@LrÎ)$Hu}ĪjÀ•HˈB`"%#^2q.‡GčYsÕ\}ęreŠCKlŦeĢ`ņ…ŠŠC)‡UÄ{xÂgbbīY6zđ€FAĄ-āEĘT´3†,ŗ!¨3“Ē*)Dëí|h]ƃˆe.A%R"Q¯¤€•€W¨WQ9U!¨ĒWõN QQąCŲĮ“=‘g“1y6ŽāäL^EÁbL/å-äō=Šu@u„2×.PčšjW¨/ƒ-›:’ƒ8ņBå8_¨–IzUõP%øRņC• ^•I¨BăH‰”™™I¤|āŊ7""ĸe´CT øŠŠŠŠŠŠŠJÁ˙ģ(x0“œäƒ“ë-R@!ĒB (6<ŠŅũ "âR­ŠB7<ˆāV •ĸÜHO¤ę•@D9ŠķEá%ŸEqyRxŖa¨žEaEŒ8†„L…‹¯N ŗC1ŧ‘ĒĄĩŦ”‘C””ĖēχzV†:U+Ū01ÁP8ŅŌöQvÍĀ yÁ*̰!páD¨ŧeöŊL_+;ˆ()KŠāWa8¨õ"āE UĮ뀂Ø1yâL‘r'Ū̍ē_ ADāáSį=C”He""%ō^PQ-Ã(QHDTEÁTĒ €Pjw@Ą øR÷ĶZhˇöaÃ˙ĨĒRúĻDcJoXšđ¨€°˛ĐTTTTTTTT ūßFYáú8ˇ`Ŧ‰ģ2§€ ]3dŦ‰xīđĖJ(K!A´æ;!Uõ* %6 Ļyn, ÁŠĻŪgŪ ŗ1z!Ãu^3U˜-(ņΨ…°Ė9c –H‰-C Ä V@SŸ"CLŦ ō Ē ‚„¤kī-ŠBA`J`\ä`bH=Œ\J› P§ĨĄE įDá×2öPE!đ!ë¯(@ĸČANášJä3īRįR'Nā X_ž1y¨@ •ꅄāPž_0eæĄB(/evŊ\‚@ËOšt2Їáu;;A@)žKŖÍzˇŸ҆yqã E9 ‚ t7nŧŸŠrđ•‚˙÷īāŌĪ ĄcĻđrܒrj™<”T`@&`˜TVw2āU×r­dÖğ˛BtMRZ8V1 @ ˜ ŪÃ@)ĐB5„™‚0°Vŧgbœ‘ą!RÙ8&( ++˜Œ5†Øfę,8 X"ËĨÎ$Vg@–˜™1Ŧ‚Š(¨†•ī#^J×ē(*ĶڀȤ0,`C¤DDđ”AšLx‹˛{x°‡zU!,¤Zc¯D öLŽŲ1 sęĨ Í)(SJđ@ØBEUÁ$`zA¨1-ĸėD”ŧĒBKĢ͚—Ō_zŸ ō0`(@ETH<”×GN•5˙P‘čŅœÖ—¯›āפüڍ^_R ÷#öŖ*_QQQQQQQ)ø;^ĀzĨã‘iéZWā˜)ėn -3ͤPx¯>’ĢĻ5Ũžæģ.-%BĸkNjbÃÄ`a0ą‡¨2ŠHDđ ĒĖÂfŨEÍ q"ŽH9¤ 2Ď)Pr"9¨ ÄP&ĩPKdĄŦH‹Â@”„Č1({ËøD0DĖ “QVˆäNrt‚™ˆYf&ƒËŦ70ׂB…ÔKiOWeÔ+ T‰ęUSÆĐ“cöĐBUäŲxâ”ĩ`Sˆ$$9SnI‰•J“ c­˙ {¨#ÍyĀĢ”™ūõâĩ´vb ”÷^ÖŦP(‘aCDFÕ¯gčōTé1Á—^¤$ Áĩ IDATr Ģ(ˆ@Tū¯ĸDĨļWcČ{ÖÚ UTTTTTTTT ūßΚæ(ÁVN7׹SŖkÉ\(ÖœëEąÖ¤´`ƒČXÃ˛Ö=JEaĸļad™"c-3D•TŊå(/Šŧ(œPŲ&÷ĸ’F6`* HQ“ƒ@–`‰Jč’6ĸØB™´4ņ°ŠŒ*‚Čú 'ˇ2ŗafæd4dæĐ’ĩdmĀĖ 2Dʎ! ڈOĘØDEĀZ.'…WQÅAŊŧ;åAŧŠWuĐBŧ¨ú2ĪäT„‘Ēēz˜9¯šúBÅ) UG’Š:u9‰dĒB„˛V´Ôßeų)uđžl^Jĸ2ūRf"C´G‘Ē’‡‚Ę‚cVUP™07ĖėđnÍ%OāʘųũŊĄČ7œņG'Õ0 K ÷ūX|EEEEEEEEĨā˙eäy†aQAäyĮņââbĮIvr|Yx"Ätâˆ< ÄĩÚIVؘ˛l”¤ÁÚ Dœ÷^Į>_͘$k¯Ŧ„V”™ @îŧQu 5egzQÕÜ6jJp ŖjF%°JBŪ¨€Qv…€-qaBKX‹/Ö¯âą)u23ŗ!fŲĀ;×ë÷':­¸^ÛķČŖÛwnˇöÎAI˜HKĢėœ/Ŋ"ēnDQ°gô#YWKÁeyŦ'ôĶD%.-éä‰<ąDAAZ(ŧŠŠē˛ĨŒ*Š5{’WAiŋĄõĘaÂÚ¯† € )PĢÕʖŽŪ{ŗvĢĄDŪ—]gāÄž Å„䤊ōRŪsÛTUÕ' Ȁ6:ĸĶQ­Ņõ¨5 Pš>¯ÍcŊO˙Ú+^›nÄ/˛ĻŅ\¯wV_9Ö´;—o.ÖaĸŦ .#„u ‚čĻ“ ÉžqĒeäCĮ‹øcC¨“¨ųcöüØævI’$Š"į\†ĖÜī÷Ûívõ-PQQQQ)øJÁW<ąøž=”a–?ĢĢĢN§Ņh8įō<Âđqũ>^OmKč(5š6Ī`ŦĨ¨qôŒs :V/ŽmKkʕqÂj'ä××ļ{~Ŗ‹ÎņS9NÖ38Ëō€ƒ 0 ]ģaÔ'lŪ˛IŖÚ 1€§Đ|ÔGŧåÛ9w”ļ^ĪÄĶQÉûŖö^ZeÖe7¯Mųø;~LĖCĮ‡Į¯ŒõęڑOÜßŋį3[k­ĩŊ^¯ĶéTōŊĸĸĸĸĸĸâ‰Č÷ŌESZá7ŽģŽ&Ož…,üã=SYéGĨáõXeHĨMFŽ”5EMz‚‚\×ņē1(čąl´<¤Ŗ  (`NĻāËž–kkåqaĖą‡¨Ā (NPđrŧč>J Œž,ž ÅqŅ‘­ZvĨ<ú×DĘŧqeĮģųŊë/0ŽĩĩĶz§ņū¸°l#fŌãDžŽåNNü9vī‘M6ļĸ(Ō4mĩZÕˇ@EEEÅAĒ|ÅšīåC™Ļi¸žqΞŦü;i4›']Ų°yLuø¸B– īČŅŖ“ņt´ä,ÜåĄË1‰ä¸Ũ­iÎ Ĩ.Įl}sŠNimÜØ#î’Ōf>Î õ(”ž ÖÔ9ŸpŊ'5ĄœÜũM؜4ÍM08*EnpB0sŌ'.7|b€Ŧ9z=ۈWū™ô$!éwWWW'&&ŦĩDTÉ÷ŠŠŠŠŠŠŠJÁ?>Úíļ÷>Ë2cLEe°ĢÕsæ1+YĮúJđâ7„cY¤Ęeîœ7Ŧ&ëԖĘOËf58ōz€ĘÖį @•”°Ö“`¯t|<@ØXļ!åËŖ0č &“˛ÎUL€‚ähWI–HŲ(Ę3NŠ BŋqC6ē( CzÄs¯G øŖ#"=˛X žŦ_Ĩ ÍņJ|MĮ+đĸē~ë éÆ&ĸĮ[€ĘÚ`Ĩ“äGļ:Ņ0Ck•˛á’?Éķđ˜ĒŋŦažžįųp8œœœŦž********˙/Ĩ,"dæzŊ ÔņƘĮkā!z|ë^wŅ”˙]ĪJG+ĨĀ×ōš?*6(e.¯'ڍ!øcÕîúŦYŗf=ž&XĨüāč0ëĨ¨˛Ąé×kjQdáĘž˜ČFYԈę‹ôHUꑾųĨö­9|Ž–ŋĸĮD6§j¨lĩŽ˙\—–ōˆÆĐQ¯ÖÎB&–ãö@G:÷œ°øEžáĸ9žÖö$÷i¤Ā{Ÿ$I­V+_‰NNNfYV†ŽO žĮŨ$˙ãyˆ%ĮæwOÚÁđģīë][N&uĮhtH˙lķ:ĒCŽōš&gx'Æ2fCP/ōĪėá_úD<žk?ņēč13æyđ{xĖmĒŅT+****ūmT>ø˙ŸŊ;ˇŦ*ī„˙{ÖÚķ™ī\5@U!PPX‚€âôą%â˜1ÁŧŅø*­í;étwTLŒō:´mb;$jĮĄ Ņ$(1  ¨€TQãī™÷¸†ūcß{남äC<_øįœģ÷š{Ÿģ÷o¯ķŦĩØqíq÷Ą¤÷=äeŌ¯¸ę_ž&q´Ā¤lė'C$,™˛JßÂáņ-áaoĸũzúųËĄGt“2ÆcŒ=/Ay0ÆcŒ1Æ ž1ÆcŒ1Æ ž1ÆcŒ1Nđŧ cŒ1ÆãĪcŒ1ÆãĪcŒ1Æ'xŪŒ1ÆcŒq‚gŒ1ÆcŒq‚gŒ1ÆcŒ>EŅŽ]ģ^ķš×´Ûmß÷Ë6rĮqÂp1Ũn7MS)ĨëēY–ŊøÅ/ÃĐ÷ũzŊū´§=íŠ+ޏųæ›Ã0,›üyw0ÆcŒq‚gŋÄp8t]7Īķ/ų˗\rÉÖ­[ŋķīĖÍÍ}öŗŸõ}˙Ž;îPfëÕ1j~Õ+„˛`€ÖšˆŪúÖˇĻizäȑ/~ņ‹8˙üķoēéĻ0 ĮYš’1ÆcŒq‚gĖķõЇšžžžæšk.ģė˛ĨĨĨō"áK_úŌ×ŋūõī|į;oxÃ.žøâ2ĩƒVĢ%„PJ•cė0ÆcŒq‚gĮ1"pķÍ7A066æû~™ļĶ4­VĢõzũŽ;î¸íļÛŪųÎwnŪŧyiiéŠ+ŽøÄ'>Ņl6Į1Æŧüå//‹d†ÃáĮ>öąO}ęS'Ÿ|ōøøø˙ņ_}õÕX™ŌĩėĸĮąRŠˆĸ(’R–]WëõúøøxšŌ(ŠÚíļã8Ac:TvĢ­T*—_~ųŽ]ģ‚ xŲË^ļ˙ū÷ž÷ŊÕjuûöí§žzęõ×_?ĩÖ¯~õĢ]× ‚āĸ‹.šŊųæ›ŗ,ĢVĢî7&=cŒ1Æ'xvë÷ûĪzÖŗ´Ö?úŅøž¯ĩ.ÛÂėŨģˇÕj­[ˇn0LNN>ņ‰OŒãøĐĄCe:?ëŦŗFžįˇÜr €={öœrĘ)­VëšĪ}.€Ûnģ- Ce›zFƒˆŌ4MĶ´( ×ugggįįįGFFō ÃzŊ ^¯—ķÃáPą¸¸¸°° ĨŒĸhnnîûß˙ūÉ'Ÿėy^Qå8˜ŽëōîfŒ1Æ'xvÜs]w8†aø™Ī|æøĀüÁ:t(ĪķųųųwŋûŨßøÆ7ļmÛļ{÷î7ŋųÍišÎÍÍŊį=īyéK_JDeëxEe;w­Vģøâ‹_÷ē×[Fü˛ž1Æc?̜ÚügķOy[žg­ĩåSŧšØ1÷æMp|1ÆŅ`0PÎ夔’REáûž”˛,ˆįšœcŒ1Æ8Áŗc¨Í Z­–­J)­u9š¤ĩvõžëēÃá7cŒ1Æ'xöč#ĸN§CDEQT*•JĨėÉ: |ßoˇÛåƒI’đæbŒ1ÆãĪMI’(ĨšÍĻĩ6Žã˛Ą}8j­ûũ~čÃ0,ŠÂZËũcŒ1Æ8ÁŗGY†Y–Yk1Q "×u[­VŲ§×ëA`ŒąÖēŽË[Œ1ÆcŒ<{4åy^ŠTˆČŖ”*ûŅEŅnˇË;å4Ožī+Ĩ¸ ž1ÆcŒ<{”yžˇ°° ĩ‚`ĩĸ+ƒĪ¤ijŒ)‡•$ĸ<Īy‹1ÆcŒ=Æ<†85k.EĖę˙Úō Z~™€|{<_ˇ ãá計6ēĐēZĢÄIÜév\ßÉōː hĨHĮ•ėō9^_d˛‡ŖœĶŒĖšc–V”Ÿ0ØŖˇö/â~>×āĐ´ēėōeÄ{„1Æ'ø5‘Ŋ¤ ĮĀ× ß Ę$P1=æžx(´‚„påc0~YĀ€gcũķŗ| Đ ĩ’¨ābųåc€LŽ#$Yúa?îÖĸÆÚܟĢÜs<Ã$ІĄ„Y^‡ksŊ-×S^ˆr‚C$4~ūÅWō˜öė!:ÚÜ-qôZđ~ŲāD^5ĪŦd”ōC€Ö6 *’$ƒ0‚<×%ŠĮ P-/ŅĐũVN€+V[úË āFxÆcûŦÔģ=OƒШVŗ<ņĮ›Ū°“Y3×läũųŸŦ ĪhŪņĮG#¸œāŲCf6.¯Š™!ĀÖ `ŒÎ\ōIÂ!É`āē.4 D„Ģ…7Պ„…J3וGųÚBˆ˛ūVN–ŗ;cŒ1Nđ÷;%=7˕oĢuā :~ÕÅŌÂO6oL'FeÁWīøãB!|Î<ėaŒYŽf€ ZíG¯ū ␀K0ƒŪbŊ9 ˆ,ũ¨!¤Ģŗ,ËŌ(Š m:‘_Š$ũnX¯€, šîqß~Ŧ6ķ›5}†1Æ'ø˛íhˆ ‡`ō<Ŋ@%Ê“cr,˛ęˆĩqš9…ņČō?ĮÁ?CsŸö0 āhaúr –;˜–ÉÚ1pLŊ5 ˜¤×k Ā@J(%}?ōũōGƒ €#–ČZ\>ė<`ËÂrˆ/h€ŸnHĀü•Ž­"IDš [#cŨîRŖŅ€0q1ŒŧJ‘įEĄŖ¨×03=?55žgÆ „%aĨ'ũ}GŸ´ ŦYΒ1Æãŋ|V6€Ö|…MŽ„C^ų,ĩ¨6hßŊeķĻ^7Uŧ㏠šM,'xöĐãûÚ4-î[Á˛ļŦåč'Ė‹ÜXģš0ąá y\Ŧä{8ŌW:uŠÔ(āPwÜPŦéR# ĀŠ•C+VFˇ¤¸„†1Æ'øÕ“´ty–Åę°´ŌĖ $ÅļęÕãî’g=€üņĄ€"ŽīėÁ‡•JÅ“eYEQxžC0YžiEQiåJé‚Â, Š)|×HÃ@ΝFYŅ…tzØ Œu P@ŽThs° aE@Q$d–ŠžõâN#ĒBŗ3 S“S°h/ [#5ĀÕy.@X"ĮąëēŽë–īœ÷ cŒąĮO‚_3ŖĶęŦŠTÆøŖŖ@ ŒO:$øŌJd—ĢįųöXž•$'xö ã{9į—īûDäy^ŋßdàâ‡2OL§Í‘h8Čĸj0 ō¨ÕĀ=;$@ŲîŪmp‚“BwƒÄ¨5ž*ŒĨÔRGĶ\a§­Y„*NŏRŸļúdØ[<‰QųøÔT^ĀuP­Õ>¸¸aãhĄĩ+EˇÛm4QhˇÛFƒ÷ cŒąĮU‚_å­XŦÍ ZNõ€ņ-|˜Ö!+„…!đí1~ ōŸ({0*•Jžįžį%Iâ8NžįÖÚZĩVūũg1üPxA4Œ‡Õz á‡c°Ø\g wĸú¤~f¤VÆ:ʔĢĩÕÆún"*››h“-*SdsYīv`cu<ë-Ũ 3¨5§t‘ ËaÜ8Ë=ÖbÆQk!…PFö™™™ŠŠŠVĢÅģ1ÆØã0Á‹5ˇÁĀXˆå‘žišÄՐ€ÂBBđí1~kxmöāôûũZ­6 ˛,u]@ģŨŽUęŽ+ũũ>ęÍõú8ėāXŗ [Í' }Rģĩä)ÃA]˖ļÂKDÚXÆB*+r@> 9D‘RYĪõúY6&h&éMŖ*#4\ē Đ@ äQx2t7-fi–úŌŅ…ÕZ{ž755UžIņŒ1Æo ^,—Ŋ¯ÔZX m \+ ,  KʐŠ‚x:§ã†˛EÃŒ0 “$ ðZ­–ĩ4ÖÚV+˛Xj'Ñč BlNéöNÆąŊ5˛izĄT۝¨nĒÕĖ„ąļĐeR'kAd)áBÆ8€€%kČ˜åĪen¤ąp=÷DĐ •ĀZŋą0{ˆĐwJtSÜ ũCāÎæäX/É~‰Ņxˆ˛^ŋ×ë9ŽĶjĩ´ÖRJŪ‰Œ1Æķ'OĻ IDAT7 ~uœ‡Ŗ —˙!B–U4†´ĘZSüÆUæĮÅ-ÁĮėĨŧaXZZ™˜˜ÄiÕĮ&ļaN6՜saN¨Ö7ˇ•„S­5 ‹LĄH;đ*@ĩÖZ2ÆXŖĩ6( @ ?˛ļüL.:Ë9\U.|[Đú [Ž>Üîē“ĩsúq+žË‹ąf´u)ūZēt Ē=7ÚŦâ´Rņ1BˆzŊžįyųæy2Æ{<%ø2ž—!}ų$¨ ´…Ŧ@˛Ė€Vf† aĩ4\ÜÜJâdÃl‚7ÆXkGFFxžGDĩĘ&`đ`cĢöôJđÄķçžŧwæ^Ī]¯‹Nˇo€Nw B E>"Ā<KÂ.AĨ9€åūō¤ 4„‘ŖF@9<&ëgļßmzšôđ¸ŋnKë9{Û7ŒUĮ„{ū\ûŸ{š˛ļ-„(‹g<Ī+/9x2Æ{Œ$x Ŧ ÷~ŋRVF„9:Ü2­9•Ã50Ž€´('5ˇJ@ Á ” ĨĩK[öDX€Œ@åĸeų¸´ aËg€ÕüågÍĘ­+¯_Ŋvíō €ŖīBXA0‚ŦĀĪŊoW×(CHkŗf]k×n¤…%!Ŧ)ž0rų=P!,GXJĀ€ĘžĀbyųˡĖōí}ßķęī.ŦYŲbkŸ÷ûŲ•ÁšËgÍĪlíå=˛vÉ´ō2ÆVÆ`šÉš€•šNa´ŌdąīģõV‹¨ lÎņä9ÕĘV•čģíÚ;W‚-ÃÔuĻĨŨhä|‚ãV@[hc 9ž-[ ŦVÁZX2– yžU€ŅŊĄ–hôsÕ 7,&é|–¸ģ‹ôđpNž2ŗøOĀ]DÛāÎÄ،FˆjĨĩrX3+ķļ:emā}lŒ1ÆØÚĻĢcí ÅũļŦ0Í5´AŅÛ@ĢaĖĘŋ(ĘšQÎØ´rĸ#¸„P BÆwĀ:p<˜@8y’šČs‘æ2Îe\Č8i!ķ\æšPšĐšPŠr%b-JÄÆ7Ęąē(˛jäņ0ōƒ<ËH:š2ŠŌpĨã;6¤‡´-r•j›‘Ô$ĩ*L!=™ŠŦ0EŽs- qRë…)FÆGúÃ^œÅQĩŌ‡Â!áŠ\é ĒļģKÂ#mMZäižø‘īøŪÜÂbTi)ã$‰ŠTÃ$ +‘ļƒ°FT+-Ŗe<Ė´RB8ŽiÆIE`–ēąpšaeŨ 1Öĩeia C™É"P™íkŠĩ0FH7 {ôŸ$­ņ‰~:ĐRwãö īhQ¸7QŠŌJGVŧÄfKņ‚ö2'Bĸ†näÅEf@$éú䐕ĘƜœŒ\5Hû^čA")bé 7 ™•Š\GÃŅV*MyaS#´tĨáÃÖÄ÷ųōŦĒŦMŒ™ē0,Ŧ՞ī*äŽ+!Ļ€“ƒđĨĪîNf›lL­đ㴌ĮžI,”FĄ  …<‡ōQD(|$ 8€´ĘB[ +`%l]ĄäØÂÂØō@d  ĐMā„ŊC=yúB÷ žûģ¯.D4Uk K9žCI&ˇ@‘ į@œĀhÃ}@cŒ=°cŽ >Ēx°Č “ÛBxäEQdŦ°beČH”=Réh˙¯•¨Wö^•€UČûCŒÁ`0‰ĸŅædQVX˛ÆŌĘTįVŦ•ŗ “P€2$ēAN3ŠŠ¸qãÆũûÖÂēpdš'n '§ÆĻg撴Ģnœ÷k~à ĒFxwŪsĪē Mŋ’ˇg—ÖOn4ÆĖÎ/ļgē'lš‚ŌŠ ú…đ"'ŦWkĩĘۃûf¯×ŲyÆYwŪygĻČąšĸ( 7wâŦ8õÔ3ošåŖc-7Œöîߡ}ûũԒĩ…Ęķœ„q\*L–æYŗ9UĀ("áq’æy.„h4Ŗ,Ë  ˆ ĨuÆĸl•¨—ļ+n+ĸQ (ŦpRmEؘ´IØ :͋žŠō“ĩŪttֈ5Kĸ•Ë”ÕíÆd­ûË:•.wŧyā—Y:zŊđ`j4”†õO8rčœaāo„†Jl’V| O’aVf‡ãc<ÍcŒąFDd­ĩÖ(Įp({Y=Zl0° ŠŦđČÂt“n#ŦõúũfĨEfšŖĐE Ā×Ë  /ŌYČ Æ=WjüĶ—_9 ŊŲũ#Õē° Kk§Uk<@ZXԚ(ŸĻÃFÅYœ=hTxn%ĒgJö†F¸UáÖjBáP¤0yT­†ŠÎ…tB˛˛PÆuŨJ#ęõ–#•ųš™8Ž_ˇ)͊nģ?::ÚŠīÛwרøČp…­Õja$īŊ÷Ūņą ŗŗŗë֏:Žs×O÷mßž=Ë­ĩŌšŽ1"ΊĀ÷=O›‡‘×^XŦ×ëaPM’ĖsdĐËōĄ~­īj­¸Ķü÷?žįÅ/Üô´ ÎŌvĐîö}ŋȅ54>ŅĐ6ޓޤjÚoũū›ŋūŌ—ĩžũœķ:ŨŲzŖĒ ČĀk\ôü/_~ųēsĪ=ˇPŠP’v|ßW…ˆĶŦVÃČKŗ^k¤Úë.h­ŗLÕĒŖ[O“"Mcé˜(´Ōsڝ~š*)œ(ĒēŌs]_+3Œ(–„’‚”1ǧ7œ÷ĸĢĮĘį“=Ē,Tĸ—ôšá8A´į’ąŅĐ*(3pÃanSßÛUwĮ3$žŪŦíęôk„I°+Ŋĸ P–ŪŅĘßūōE{y4°pīÛ3ūW= šûÎhuršå _ÆéĄĐŸÎí÷Âú÷ ˙ôžëļÍQčæĒđœ1 B¸ŧëû÷ „xĀüSŪ–s'[k˧xsącÍą÷Ą´ Ā%˛@5ĀŠ×Z„åŗĄĄr¤đ•ÚQąļ8Ū-ĪäKôēIÅ7š@@ĒÜlh7đw%ôJv7GĪâļ,_=Ŗ[Āsŗ‹q“­yAŅī¸bĘĒjmÄ8žŌŽ2ä8žëTŦĘĶl°Ô-´Bxžynä(“eŲââĐZgnnčyŖĩuíöĀņŧ ›ļˇÛí|>NŠ0ËëũØ4•Aš<Ô=q۞xØkcBNėÛāŒ3ŸúĶģīôŨ RiôúíąąĻQisŦ)€šš9Gy!o\[wvącQ zũ­[OƒĒëÖīŲ×~Ęųįūۏžļuë)sķ÷Ė-d‹ŨXČÂņF×mØ8?×NĶėČLŌlÕĶLmTO LŦÛÚŅ-Ķ3‡[ÍŅ0Ŧ éÖmȔ[ߒ„p„#,9ĩfUˇģÃ,ŗv˛o˙ôæÍĮi᠟,;Ž”ač iúÉ īÆY&‚htŦ5’įjnnÎw‹Z­b””I’Öjk`Ŧ‘RĀ k8ģ°ûœpaE3l&Y7ōcŖao õ:\¯J˛ ZŌ ŗeÃØĢzK[t6Š‘ ø+ÁÚũĢ'ą’ãWˇ•ËĮ‡YĩeŚŸ~6å…AœšAcdüÁŋĸ˛ šč[ŗ´°˜Žĩt{ ÍēŸŠĖwxR3ÆcĮ~‚ˇ@8€Āâ|ˇ:Ōp¤3H O:Ž ÂB´€"h@ÚĀ1ČA¤Ę¯­ In­ŠD!ZŖ›ÛséŌpā#–4$‹û3žÚ 'pô{pŖ!šãHUō4!å X‹ĸˆƒjEÉb˜Se¤ Uŗ;oŋëî;īšæxåīŽ>įמ•¤ũÅöņɉVŊŅ^TŖŅ;~z·>øí6.ųÍuᜎ§Ũé-vâŋūë>pķĶ8e'ŪđÆĖͧ˙ãĘžzÁŌķ.:ŖÖœüO¯˙_ÕŪū‡§Ô›;>ô˙ę7Ãhœš¯|õķ•:Bjj~ô#˙ø“ÛŅ^Ėņ;ŋ{âŲOŲyųÛŽzŲKfvīzļÕÍxœ˛ķ/žū/ų“?ųb{ ŸûÛŲ¯üŨ×7oÁūáīŧõ-ŸŧũäÂįũÆ%ŋž´d\~pËŨú?8xO>—^z‘ãvĢ5×:82 ¨yũžÄōCŧęĻ›PØsŪôûfz¸~ã _ŧōÆÜtĮĶ/h=ķ‚gûAĢŅēĢLˇ×_ŌZûáȇ>ôĩ‡°ķTŧđEnXŋŠ?XČu22Q :$ˆ´-r”=Kdj\ĖŽū•ZQÄ^T!ßŅÔë ^‡„ŗ´ vlĐŲāK‹ë3š|ajbjvNī´zá_Ná,`5ûĢ5uŋŌ{ú™ŸúK ´ÆĢíļrĨzŦ&ž—gÛĀOē‡DËĒ6 ŒŅÍú¸ŅÚwšĮ`W%Æcœāˆ)“9ÆÆš cŒ,G€!H”ŲŨh@@äō÷ã(ûÁĸ€"P2ėS„,ÁB íŒĻnX@%?„a°Ž%ĀÁîßđĖ§.Ė2KČUa_öi­Ņ Œüņmw}뛷Ũq;B'ŦĮûĶķ''š…2Vx#Ŗë†ąúîwoüî÷îžæ°y víōÎ}ęšë&ĮjZ§ŗøąũķRoxĶËÆFNøĢũĪ?ú¯_ũĶ˙ūĒ‹^äũå_~c÷SNųĮĪ|fĄƒwũŲíôŧķŸĒUņįīMŖÖ|÷{Žx×_{įģĶ*ũįīũ\āá?˙—ߨ´qãžũˇ‡Q§ÎūƒŸÚV[ņЗŽk€ŪĐüŋ¯|É=?ųâsíY/xéŽa2Wčp÷YgŧūMģÛíūÂŦúØ_}uãæÛŸ¸{gēøöŋô^ũęgoßö„¯~õĢŋ˙ÖĢŋzÕ[ Õ_ę⤓Oģ÷āL6>ôÁŋ‰‡øä'_§‹˙øg˙菾ūž?{éR'ŋôw^ē{÷ŪžîæWŧæ gž‚§=}ŨéģļMLT=ŋâxÖ˙uoŧôöÛ÷}ãšë_{Ų×[#¸øõsÎŪŨíôŖĐBĮÁhXk‰„ārv_.)xNPÁ„ŋĮÅé…m4ÂķĄNō¤8Ŗ°2ˆĶ™šŦü|å{6Ŧ„x 2°Šû†ø÷Ŗ[{np "aũ<ķ&jO™ëg“õŗŊ¯:¨HgĮ ķSĪ“ÆÉSåE‚ĮŖaŒ1vĖ'x  ßÔZÕ2Ī×#ØīĩęåīšË!! šVĒLWŋš^;.(ČfU+@ây/ŋ<īŖĄ—ŽĖĮ˛2(äZ––¯Ę/Â}‹BüÕGk‘mÕÜzMĮƒ$Žãv'Š67~á‹×\ũwiǰû‰xųĨ{NŲąut´bÔRž&äTlæüÃ×ŋ핝°û,ņįī;į¤'æEėųĄįY†ŸŪ9ĶŋâŸy-Õ¸đâ Ūõ§_ffĪų'~īVŧ÷}_žë.|ø#/¨C‹ŨŪ­ˇá“ŸüͰĨMŋöõ/ŧôˇŋœ&áÁƒŋw3žö÷—ãŽvnÜZÜÅ%íHë.t÷ŽoŲwĶŪMQkúívG¸p|sdūΨJ0tęÎäæÃSN;Ŋ9‚ģöŪų´gœ[dNāô3ĒgîŪåûî _rᗮúË˙ķå/=į9Īéõ§•‰ņíŨn÷ÆīâŸxy{°0:2ōļˇžų˙yîûfĐÄÔhbã‰ÁīŸû‚×_Ž~t˝W}åîūÕôi§ā’ß<ķŒ3ˇ&­6å–íã¯Ųņ˛ˇŧŊņÃ[~üŋ?sã?wŨÎĶđÛ/˙ĩf#dž‚0€H吚(ĪÉĘÖđ|ĀÂfbĄŗpŌö-ũ~ė.prK>“ÔĻ~Ą‹ĸøĩA’ø•0.X4ių;5šÜĪfĩ=~9ě_Ūuõ—°Đ˙ĀĮ7-ę ƒœ ™A ÖŅ_¯Ķ A8—~¸klôôLQÅbˇŨkŒÖy3Æ;ÁąËåî`ÆBY†VûŒĐU ˆļŌ"0=„€Ž! ǜ•e%Š•1į͚_æxkŅbÃÆ-dÚņāHžv´„ÕŠOaQKKiˇ‡‰)œ~ú;wžé{ĸĶ]ĒēPšļĘBtzíųLLāēļļÆZyžZ Š–gëĩąFŖ6ČđĘW}ÄdļoÑY,,.ÕFĒ—ūîEŋuÉÕgžu'4‰9h€wüņgûC8aébfļ{čđâČ–zGZŖž6ŨaŦ&&wäƒ,/* 9Ė7oŨ°÷斎Ŧ[ˇafÂ3Õϝm`īŲ˙Ķ?˙Ā€'ū!b—Ÿ%yR‰&1vœō„Âd ŗ‡ÍJsÕF”æųæ­hw“AŦ~r×Ũ™Æ/˙L%@<@QĀ(Š\)ĩÔîoÚ´Š×[RĘlŪēų´‡îš'íô1Hú…RųÜÂBĩ>b5úqd¤šë‰ĩë;ũŋ‹\´†ļB4HX);1ļ6-Â\LNWšĀēŠÉŧŋNÚņ…XNļ6Oˇ( X›Å1Ü&Ũ§qŨ @j9쓁5ŊõũhY΃e†C ˇn@a ĩ>Á“q#ĐõfER‚€jÕÉĘŗøĮ̝@ž:JëĄtĘāŽ]m\cŠ,Œ'#„&Ą!- X!,\ccĢĩ0ą EB,ã#üŦīâˇ_~ņųįøā˙uëæ›Õ‰§>oxŨGßņŸŸ755ą÷Žģ÷ŪsãxŪEÍÆĻ]§ã͟ēņŌWœŋ~rböđū-›GÛK‡N; ˇŪr׎'ŒŒŦ˙ģĢ>-ŅVã'wütįŠ˛ŗ´ ˛-ëēmS`ũäT‘fõęčĩßčn?õj¸¸Đë´¸á;ם}ΞĪ}ö+:ĮŗžqžRĒZëƒ#7´Î8ī{īįūãkŸģnrr˙Ŋw:ž>mįŽÅ…CŸ˙Ûžų_xÕ+Ÿ˛~ÃØÔúĒã&Iē”C!‘åũĪũīĢŋ÷}Ô*xÅĨ;žrÎ{Ŋų"ëUkū 7\:– 9ö5pöûũ0 ׯĮ2a?Ra:Ë2žī{ž@k]E<Ī+,3kš^ß÷Ąä'•RA‘īûeJ&ĸ^¯ˇŲ‰¨^¯+ĨŠĸÃ_mŦ×ukĩ€0 ŗ,+ßy™ãˈODŽãüŌ-Yn2ë—ŨqœrĖ5)eĮAÄqėûū#ßPßäZļ8'AŲ$ų6üžîöė‰dĮŗLŠ5Z  kŠŧ 1ļœ$Éœō‚9Ä?ŦBķŗcÃkŊ|ũ#„(ŋīŗ–āúQ‘ÄP)\‘1ƒ"ŋŗ“ūö߀%Č:(´*'Gæ2Æc?÷”xlÖĀ3°pI‘é֜ąĐâW_æd3wÕ÷„ @Š|C$•vyúN hMÂ,ˆŦp´Ԑ)œL CÆF’u  @¨°Ōj8…v„lĻšī:­ _đ—øģĢ/C>_qROædaŦtŖÖ Á %×"ĮZZõ:í{FZĩ(l9´ŽZkĶ<‰*žpe’ §§§š#cã7lŲpæŗû÷˙ræfąmÎ<ģvīü‹wũøíīxÖi;' ™ŋx÷įĻgņgö›q>øû¯|ã†īƇbjÎ~ .ũiÖí$ķÉoîŋ3͘˜Ä[ŪúäÍ['öíÛ÷ŠOŪV¤˜9‚§?}ō[ߙ}ĪûwMŲ[ûÛ>_žp*>ü˙ô'ōī~'īĀŌ<ļn…2xÕī=ŋZķ^ûÚ/ũdÜģwŨ…õëņ_w^ŊŽßĐzá‹ŋđ{ŋįŧä%/ëu˛~/ũüßūũwŽŽƒ={đü‹ÎŨ°nlfnŋEēiĶÆš™ų ëˇø^}i~)I†ĩzāúj ö˜oŒŒ×+u)ŦpČ1Zi…>HK[€ōōëŨĮĻs_pUīį_…1FJųī4Xo’$ĢÍĖeĸÍķŧlz/×[ĻŪ'e˜.ĶpĨRŅZk­ƒAŗŲBŦÍô^Ų:`õĮŗ,ŗÖކok­ÖzõūĪËņĢ-ôŨnˇŅhŦŽ—œ$IšĻ­VĢŧĻŌZģŽûČ}7b€P€!Zœ?Ö¸ ?Œ2}öZ¸ ōtØķ\zžÍ'”™… )ZÖxÖ{߀4(ëŦôgŋZd^ŽĸYIđ÷Ѓ7‘(?6ËķĀZ× Š,4 áē*7ˇ@æĮ@žNdņ~āNcČā~N3ÆY<<ã˙R+ >„ąpɐéÖܑČāÚĢ_%ķÃUgHEߓ0œØ 5i!+uđ–Ęŋü;J#ĘAJËÄ„ņČJa‚)P*Œ´šDĄ=!FŌ,tą /ū°ūūh‚_ō…0ÖČTģČĒ.`,‰BŠ<ĪŦo” ëēn(]W:ļ7\ #OŠ÷Ū wwŊ9nėá^2/­UFeîâL<691čĪŽL4†ŊŽ!TÃúÜBģVĨë (áŲN{ē5ÖpĨ8<=ēĩj}ôȁų͛7īŋ÷žVĢUĢÕŦÕEŪĶ&†H, Īņķ”ŌX2ôŊ ”Ã4 •ZCÂô‡ē@ĩZ¯Œí÷{% W|. ûØrÎÅW Ė'x­uYBķˆWÎüŧđÚétšÍæ/~ÍÃOíRĘō\-›)åyîy^ÁËûy-ƒÁ Z­–ÛķįũÕcŒ1ŋôŧU.ĒÜeYN™ãÃ0,/Ɲ)ÎģŊīņ!`!m.œ¨ ~åV lyá€HĪ/´XȒ;ī7‚úpN–îúFP_Zúđ=c…Q<#cœā{ Įā‡ŌhMs™ärŋRCĐ$  ÂĀ‚ ĀÂJČ €$ŦŒ5ÆAЄō¯ŅJĢ V‘%i YŌ ke!ŦVZ#ˆŒ´ ÕŗŊ‚,Ŧ'tUX%Ą5ЉV5.Ô0ŸĪ3m- áHrA¨ĀuĨį9äSœ%iÖĄĖu]Ī…ãÚĐXĮ!a %[ʉĒŌY§}QGŌ4Bwi0sŌIÛíúž)ōģ´.f“ĶO=iaaIëĨazdjĘOŗA–Ĩë''fî€uví:aīŨ˙:2Ōô†B ôũ‘ÉĘââ=‹ÉŊ•JUĸ˜=rĮÖM“I{Aįi’ÎÔĒ”&Ũaon¤9>=sāĖ]gÜuĪ­†×ž›Ÿ9ifvĄŨ›Ū˛i|fæ^cČsüŪbZšƒ…Ø“áDm}–Æ&ël;ą6?įæFĶ4ô@Ęc´đJÔĄKYP5Žk´fé@S ĒFVÚKhĶhVeEö{3ŊNæģžį;°+a+¨ūŧ:‚2ģ¯ĻŪ˛ÄuŨG*R÷zŊZ­FDeCrŲÜŪl6WËâËËßápč8Î#UBSžQĘR{ĪķŌ4-ĢÕŖ(*Ãtų[+Ĩ˛,ķ<īĄ5Ã'IR­VtģŨZ­æy^¸W ‡°R’ô NZY–šŽ+„(Ŗy™āÃ0,åēî`0(ßĸÕNv IDATÛ#ß8V ZžŌ¨"-`LÃ-áž2ĩwˇCā2ÜæŅV×;AXĮ8uč:L•lÕąĻ^?pė~„šF,4ŦlԐVZáhĮĨžwåô8×BˇMđŸ+ÕŽĐ„ģĄ¤…)į—æ6xÆcĮC‚ÁˆrŠs°Ž4A“cáhr@Ž K€ĩdĘĐ_æm˛–´°Ō–mđ0ĸ9Ū: eÉŦœíę%‚YîĐfA˧sK€uĖōėN 0d‰ŦCd!ĄÜ{oT ŖF­yĄŠBIc¤tkąnˇÛ]j ‡ĒÕJŖŌ4†ōšɒ@Å H¨ tŨ™™5rŨx#Š‚™™#°nũÔôė^×qáÔÜÜÜēõc‡iÔFæp\ŠTĸ˛ö膭‹ Ļ^Šw|WZ›ėÛ÷¯ëĻϊŧyn¯7¨¸áŌÜly^M›'éR% öÉTŗ8¯UŖ"ë….ųžßY\h„áŊ÷üØĘ’ūxk¤ŗ0;V!™ö—æęGŠÜ÷,iQ ܸ;Ŧ´jIģŌzDƒî\%Ąp(÷<Įq|ú)ŧÁDÔD_1@ÔøŠ—ÄÄ[0ä/‰â#čÅDã5$ ’¨Qä:ÃLOO_ĒëzîûōũąĢkÁķ’' žõÔSOMWÕŠsjęœŊöo¯ßZk­NXņm—‰,R:ķlfq̐EšÆk5Î)ŽQŲ¯Ž×l›'Q4JÔŦõŒLûį1ø,˔RDä8ŽmÛkՏ Œ2ĔÃÍTÁ›ĮB$IbÛļeYa>æ5!Cėžˆ‚ ĩŸÆq\ĢÕĖį*Ĩ ˙…įš)“EŅl6MĄŨüÅu]CÜ7 i~LŖmšĻFŦī8ÎH oHŧ™EaĘđY‹‘&( SP—Š”v!ÆĩđĒátLņŨD|§ĀRĄš×z‚sE’“ō”āJ‘ēOÚč˙å>=â „‘Ôž8×6õ,q )î“ɝĀPî$ą_ĢÚŋšĨ[Ĩ¤üASŐ10ģ¤ī%J”(Qâ°ađëõoĨĄ¤] H@ÍČÆs†iĻ!!ŠŅ*6i˜æTԊiĨ4͏6ŗĄ ¤ą“g E Sđ'h‚bÁ@ÄY .‡4ߌj6cP¨­s[ûiÜoĮ`Úņ,׆*ō4É=ËsÃąZ]+ō"‹SĶÁæ8ŽÍ¤į9…Ė—W6 ›ŲMŨĩAo5^-VĄ™SqHØų@M1ŨZ¸ęœ6Í-l5›y’嚘›™ßŋ÷@žˆ#wĖŦ,´zĩQĢŽŸÅbĐOĻ'įyč;˓؀ģö`-Ž7šƒœ¯Ž Ēã),—ÛyĸŦ SW§ēŨ~X ˆå–MŨNĪķĒRĩķ4WJ4ŧz¯Ŋ” â-[68°ŋZuī Ųõė Vxpo; ŊÎ į‡žc×ŌdSæy$ewЍ'&6YSBBZļUõ\–gƒhĐiLLŽuJ)ëĩąZŗGIÔMŗlÛ_ŨaÁô%˙õX1x §â€d6K‚Û|LĒF–Nv6Ŧ_ķé9ĀVĀ…\ŧų´ú>cˇ[ÎOm{¯ÅÖ8 ŖģŖ‡üęõŽ>š4[x(9•  BfŗžcĩkŅPˇ߂ü'ˆ€Íû•gÔÂ¸ė˛Ø–U ‡@–å4 Á ĒĨJ”(QĸÄãŸÁ[Đnž4 @‘rĀaˆû˖6ę\mKÅ [ ’ Š‘ŌR#S”H–H–*Gi ŠR–_‹rĀŠÅšåû\xļtšä\+ĻÅ0ÚUsžCcT„"ŗ'Ēã.Ķé`É#ãË,Į“ •I}!@¤úAŨ¤ƒTdģĩ‰ųAau2tōĸ'ŗ’]%TP(Õ/„ä<…RbŧQ‰ ´úI;U‘[q-ËrģuãŦŖyT­AšjæÅ2mäō öĀÁƒv-Ô~ĐMŌ°2– 2‡;cĩzŋÛļ ũ€D^¸ž ’ŠŠ î§2Yíļ-ß'˛¸Tž‚ãsî'QžĒ™v7WũTļaIf3p– •‰B3ËŧŸôÕ^ÜM‹Ô¯„šR3Ν¯Ŧö‚JÕrIB’I )UĄ” n[Ž f§yĄĖ"f+Í ĻÁ˜ÜbžČ síŲ^ā…PZ9g&i÷!ˇ ^ŨŒÛoŋũôĶOßž}ûO~ō“8Ž?öą­ŦŦ|ûÛßB˜bvšĻFÅn^Ÿ$Éčž(Š8ŽG$Uą1=Ēßī›V*•ÕÕÕK/Ŋtiiiyyų‹_üâęęę+^ņŠūį6,Öļm#81ÎôŒcŒŲŽqŽm6MSķGŦ ÍÍŗ†˛›÷æy^¯×Yy§Ķ1erSīt:†^‹yËhkæX”RfgĖū˜Ãlũ~ßZˇÛ5Õņ8ŽģŨîhJ`ļ€1&Ĩ4˙4ûfvxã!Ôjĩĩĩĩ‹/ž8ŠĸvģŊļļvųå—_rÉ%'œpBEĩZ­Õj™ŽŲŸŲ¸ŲČh EŠGāÅ´b›Ą’å€Ģ .œ*Õúĸ*č)ļķ?ø`Ø| ų_įé_(ũYßŊĨî÷yæ€L4†ÖŒYúƈ Îa,ŗZ” ™‡ļĮ|öS.ŋЊŋū¸øgāT°Km÷ˇĩ:#sąt¸S Ԋ:¨ØpŒZ¨D‰%J”8 jđJƒ;.‘ƒģ€lŪ¨Ává‡Õ$–×Ā|Ë­eÂbäđaœ1.ÁqKDÉ Đ2ŦTˆ3fq×ĩĶ,^Z:¨õĐ5^kĄ‘kdZZKĨ)ΤįU8ŗ—–ķlPŠ0×EāĄTĨ”îz~Ž´â$Ą'6MKP.”æŽĐÎîŊËa}6¨M'‚õ ĢR¯5gĸ\“WāšÛÄx­ÖˆIāW ™ë–í¯vÚkũ•(í„Õ`zvϟ$wȝyvhĨ"īôRÛw‚ZĢ7dlŗ=ŋŪé„ÕJ}0ˆŠBŒŠH€¤"­H+‚f&īCķuם T É1‡?ŦØšá†u‘:Û Vøk6ž ŠÔ†ÔĪnũü{øfišž{îšīxĮ;Ūķž÷ĖĪĪûžėąĮ~âŸ8å”S,ËZZZzÃŪ°k׎ššš?øƒ?ØŗgÂ÷ũíÛˇŋī}ī;í´ĶžúÔ§ŪxãŪõŽwU*•íÛˇŸ{îš †"›Ö(Š:Ž1_¯T*Fc׎]W_}õqĮwÉ%—¨×ë[ļlųŪ÷žĀļí[oŊÕôƒrÎÃ0üЇ>tæ™gqÄOyĘSēŨî‡?üáÉÉÉ-[ļ\qņsĖ1ŋ˙ûŋŌI'sÎ9'Ÿ|ōíˇß.Ĩ4rŦ[‰'I’įš‘ ĨiÚh4Fļ–e]uÕU;vė¨×ë[ˇnũ“?ųķÆnˇ{ꊧžķī|á _xä‘GžuÖYˇß~ģҎ´Z­ŊčE›6mÚĩk×u×]gÛļQĢĪĖĖŦ­­U*•ĨĨĨ8ŽßūöˇÕëõ .¸ Š"ĨÔŅGũū÷ŋ˙e/{ŲļmÛūéŸūÉô°Ž4KA8ŽcYVĩZ‹ĸčōË/˙Á~`ÄúišúžoY–”ōu¯{Ũ‘GID¯~õĢ‹ĸ0v™#ŗN“Z•ĻŠ!÷Ōå.R›7ŗ†dk˛üB7E~œJo'׭、néOzÉwŖü;…žØž€'c(´N¤J„€PPæ^i)ōENPÛwƒƒäܕäˇv’oÆÅw€ôÜņJõXā$¨_“âøL!E Ú1Í7.6`¯øK”(QĸD‰ÃƒÁ+b’ŲJ(Čuš§2šÚC/EšWßJŪ<¯ėHiļ¯ĻėĘB“Ô…DĄtŽ”RZ˜æŧFŖ‘§ņZk9M:ŒĨEžV¯Ēí;&ČVp[ÃÖdctŗCžČH qâŽōëļĐQœ"Ku{Q?b°k•1­,‚%:Iq˙ˇlrˇ+ĀjŊHŊāôë×:Bëđ5¯šū ×Ü0ˆĨåîÅŋ÷ŋoģí‡iĻ{ƒ<ÍԁƒmÛŠĻŠĩļ&}ojjĶ‰ =˛Ũ…ƒ]ÛãŽëU­Ĩöũ‰\ģoīŨ^üMÍMá[/úÚŨ{îė§íÅå%Į =ŋÂŨ€¸Û¤ÜrĪĶQ-?*|XãÁ\\\<ûėŗ“$1ĩgSNîõzƒÁāŧķÎģ˙ūûoģíļģīžûĻ›núÄ'>aXoQ×_ũÕW_ũã˙ø¯xÅŗŸũė{îšįŽģîē˙ūûkĩÚyį7˛Z†aŖŅp]wmmm0˜:´ëēįŸū-ˇÜ2 Ō4ՏÍũØØ˜mÛEQ<ũéO˙ä'?ųŅ~ôŽ;îØšsįĖĖL§Ķé÷û×^{íE]´wīŪÕÕU)åמöĩoûÛ7ß|ķyįwÎ9įH)M›l’$#Ƒ‘‹ëēqGQdjöĻ˙Ío~ŗÕj]ũõôGtà 7ģ÷Ū{ŋņo|⟸īžûÎ<ķĖ7ŊéM†Ÿ}öŲ333÷ÜsĪmˇŨvŨuיšˇīû÷ßŋ)ü7›Í—ŧä%Ũn÷Î;īėvģ–eŊöĩ¯Íķ< ÃŋúĢŋúøĮ?žoßž“N:iTPΞldyiVöīßo.Ė7ÆŗmÛėđYg•$É-ˇÜĸĩžŸŸÚĶžfۘe™™)EÁķ<īąęgēĻÕņŒ^ā o^lĶōŪ4ûÛT_ō/ÚĮˇ“ŗn…Qč1­9)†GsO\ēNaSJ(GŦÕÁAö¯ŊäĻ8ŋVā˙?rā)~ÃĘOĮį;ö1–ã3féaķŧ­›ëÅßО˙ž„ŦD‰%Jü’ãņÕÉĒĄ”1~ą]‹Ak$1‚Jč†h4°:°ëēÆaĮiŽBĢ,(¸ ÛeČ84ƒûŦÕ)GɨßĪ3&sf9ŽGwėišÕM‚Y¤H1}Hiͤ!ë§q‡ģĄŌŦŸ'G sS“ŊvQ¤ņ@É m4Z*Νp{üŽ;îŸÜÜORËn RŸ‘YV­b||žņęæ#6ÅÉwzƒ‚qß ŦšéÉđO~ō“ĢĢĢ–emŨēõ›6m2Ä÷üķĪ7/;á„Ūöļˇ}ņ‹_<ûėŗĖÎΞūųĶĶĶJŠ3Î8ãũīŋã8÷ÜsĪ­ˇŪzã76›Í,Ë^˙ú×_pÁfˇ7mÚÔëõ˛,Ëķüë_˙ú<0==įųG?úŅfŗšļļ–$É%—\˛yķfI’Ôj5äd8đgög×\ś&''¯ŊöÚFŖ177'„ČķÜļmĪķöīßĶM7i­;€‹/žøO˙ôO[­–įyA˜íØļm2h+ãĨũĩT[smŋfG›EB¯ę⇃BYtgâAsÛqäŖž?Đ)w`Á!pĨŗLŦ@>Ŋ´ëæîôđT*ļ‰ŧ)¤Å¸"RJ1h­A 4Jĸ{¤+b‰%J”(ņøgđ4ä íUŧIp&$ėšĐŽŅKpŪū$ ô Sxž‹n9 É8<2^Sëé)*>| qĄ\ĸ¯ę9Ûđš×C’Ai€AjØxŠIÖŌÁj`Im1HÎ\‹ûŨAyĩe;Õ~ø[?ø Ž<ŋúŦMÜEoĀtÁģŦu”e5ūėĪŽ¸÷>\ŸˇŽûÛ/ĩ¯ûglŨ˛YH]mŒ“íũ۝÷ŪúŊīáÚ|fŽ‹ˇ˙áIģv{×Ũ÷øƒß:pŽ‹sÎyÚÔ$˛ÂÖÄ7ÎęØkūĮ—ĶS“xÕ+'_ųō˙gĪî{ZŨžÍaģž2åvCØ ļöâqŲŦü`ffÆøąč÷ûÕjÕE˛,ģķÎ;Į7œ{ff&ĪsÃČĮ9捪ĸ(ģûîģ[­ÖŅGŨl6ĮiĩZI’Ŧ­­™×{žglā›Íf†Æ‚& Ã0 oŋũöS'ĸŠŠ)Ã8íãpBČØ‰'žhhŽmÛŨn€eYyžOMM­ŽŽE†áüüŧÖzlllqqņ„NxđÁ' Ö5ôÕjõ /|͛۔eŲQGĩ{÷îį>÷šívÛ|ĘÕW_}ÕUWíŪŊÛ÷})åķŸ˙ü={ölßž=Šĸšš9Ûļã8ö<¯Ķé$IōāƒnßžŊŲlæyîēîqĮˇmÛļvģ]ŠTlÛ>ōČ#9įˇÜrK†§žzĒņŒ7ļôŽãt:-[ļÄq< ĻĻĻ”RĻfo÷ÜÜÜi§vŪyį5›M"šžž^[[3‹ AøžŸįųũ÷ß ^¯oÚ´)˲Z­V¯×8đä'?ŲĖ”ÖÖÖĻĻĻ<Ī}ƒ'’B SbuNO%w'ąĩ"ų°ø;Ą[B§P60Ø(Ä/› °ÖKæ h¨ĀĶĀļۂbS"Ē@­žxšõˆLį+ŗĖŠĒ”QˌÍôh*^ĸD‰%J ^ t!tf‘O˛SSsƒÁÁv_2BT@+¤‰@ ä`Zs&?` –IžÃ֒Čl4ĀöúāKëi)š ŽLƒ€ @&ąi  ŨÖRÅkZĐĻL¨5åBĪÎm}ãīüõÔ n¸á-{Ü˙‡īũrŖ‰v7Ÿ¨Õ‚Ī ę˙ã5įíŨ˙™į<ŖyÚķNžŦ‡L‹ƒ+ĢÄ­fsŽ‹/|áŸÚ]\÷å7GƒvgpĀņíû\ü_—}ë'VßųŽķ,´>ô‘ŋétÁė 1Ũéã _ÜũîwŊŦ9.?˙7×_ũĘI'.(ÍĒÕą4écZåæ/Ŗ ƒVOHėąĮnÛļí}ī{ßUW]U­VWWW'&& Īžžž°ŧŧ<99ib˛,›™™Y\\äœīŨģ×´lNOO×ëõŊ{÷vģŨÉÉI"2Žī†›MqÎ;ÎęęĒŅu˜Ŗë¯ŋūÅ/~qŊ^_ZZÚēuë}÷ŨwôŅG'I˛ēēĘ9OĶÔļíÉÉÉģîēë™Ī|ĻÖÚqœ;v$Iĸ”ōnßž}wÜqĮi§vÜqĮEQtīŊ÷ÛxĶÆEŅôô´yŖ™&EaĒææk1Ŧũ)OyŠ xÎķ|vvvrrŌPķ(ŠĖw/×PĖÆ¯ŋxb×ņ[Ēũ溟ôĄ?Ŋ')dāzqš’&Į÷ĶXĘŦ*qŪBūp9į—]vŲĨ—^úž÷Ŋī-oyKĩZŊķÎ;˙üĪ˙üŧķÎ;ūøãO:é¤ßũŨßŊüōËĮĮĮßøÆ7žá oˆãxfff0ėÚĩË0Č͛7?ëYĪzík_{ųå—Ņũ÷ßīŊ÷ž|ōÉQ5›ÍBõEŅîŨģ?öą}ī{ßģéĻ›”R›6m:öØcøÃžqÆŽŧōJ3g0¨Ŗ¤n!D¯×ķ}ß$uwģŨąą1CUŋō•¯œzęŠ'Ÿ|ōG?úQ)å™gži:G+•ŠaöQ !ŒŪ86šÅ•JĨÕjÍĖĖŅĘĘĘĮ?ūņSN9ĀRdƒ¯ūÃW?ķé,-āí˙ëÄŪĶs3iv`bĻļÖ]ûÖwžŊe+ļ9=ˆ—Šœv÷*%ˆt–cËöMK­ŊËKâIGE÷(… ŦĻĻûũžŊ‘¨Ķz'œ~Â2x!Äšįž†á'?ųÉcŽ9F)5;;ûęWŋú˜cŽđå/ųÍo~ķöíۉčüķĪŋė˛ËŒ‹b­V[\\4-§>ķ™ĪŧũíoŪķžwß}÷íØąã/xÁ ^đcübĘĪļm+Ĩ>ō‘|đƒBėÚĩëYĪzÖwŋûŨ;v˜ōķ%—\rÁ|ūퟟ˜˜8í´ĶŽģî:ĶHíēîĖˌ1q7!J09@†ũ~ßļ텅… .¸ā˛Ë.ģũöۏ=öØo~ķ›JŠĖÕIJzž§”2Â/ebb§§§ßũîwŸqÆAėÜšķ…/|áęę*€­[ˇƒN§cÛvžįF€ŅÃ|îsŸ{ÛÛŪöéO: ÃWŊęU˙ø˙8>>žēējļo>ô/˙ō/ß˙ū÷ŸzęŠ{÷›;ûėŗ…&ŽÕļmŗE‘)älãmÛŽVĢÃ_‘q÷˙7ŽũŌīxķ ×4ęØē•íąÔ`mĩÕīāô“Ÿ+b2RÅÎČĸ>TĪʲ„´pl1 MŖƒ8ėcX\\4S”Q˜‘)ZÖĮĩ˛˛˛uëÖ$IL‡¨‰V5]žŋT0ŨÃfVĻĩ6„ŪdĘzž×l6_§ÖÚļí4=×P ,\ZZ&}wK’ˇoœ´E炐†VPšÄ°É›6œ#†’+0¨G/;“šŲ =t„4ũ'z(äŖõ“ölčBdöˆ'éđ Íb˜UĸD‰%JŒÆ¸Į™ŠŖīFĖŊ>ĘŌP*ĒĄĖȆ“ („Ͱ%lĀbĐ.bĪĒ 7éÜĀZĩeĮÖĕá¸P4äņ†|ĻV7|°žė.Öš>S°´ļĮ›ŗ—ē÷Ī_iĩ,›MLíߡˇæúœŲ^X ^¯WŠœ¤kéÁZkj˛Ųëuâ¤hRæĶŗ[WWēęDkuiێŠ$í­ĩW]§âÚãiŦ9ėBĩŠ+)ËĶ~’'i”ûžcl˙žŊŗ›Ļ*Ą'Š$ôÖę˛ëÚ#7I=Ēt8';F˜?õÜkVbh­Ĩ”FHÃ97ūë‡õ‰Į9ßh›(„čvģFŗūKÎyĮ& Ëxƒ0ŠXæŪŦŊ˜ĖŦJ%XZØÔę…fÛ<§^IÕ?}˙A d?\ECĐ|ŊSFAKMJodđ4bÉJAéuÖGs­bš¯ģš›ļx#äƒâ„Ck† ä$ އ_ Ŗ6¨hžÜ.ônĨ• f••ø%ūË*DĨŠĻÄaŒĮŸ<2TžÄ!ŲŠÆ6˛y(Ž-æ•.8#€YĐ´ąfqC‰P"Lũ ÷ ‰æ9HüĖ ¸ŪûúĐs{čÃČÄô†§ Hã(ęļĢÕFZ$ķ›jė×)͌‡yšÕjÁ}•ÆØÔxŊÕZŠūņZemeŲąyŖâĪo™ī&i?Z­TYŨ5=UíĩöīŨģīøã+Dšåûˆ‹{ĄW]ÜßÚ4=;VuĐkmÛļ;m™;ö+OŪĩ瞑‰4–6VԆŊ4‰N‡;âŽëÚļmÚ(ÍĩĩRŠÅÅá #û6î+Æ{ž(Š'Āqũ'ŧiĸõ9TĢÕVĢEDf45Īzž—Ļé`×ęã đkcĀ€nwĨÛŨlųw ”‚^??ŦĄđ$ @š@ ĘiØšúúG¤éÍȁŦ€´ mƒ\­ŲF ˜Î.ūŊËūŅã˛ _ĸD‰%˙ ~}¸"Å ‰Lb͆ÂüPŠĘŊ‡Ä ŽRÂז!ÜLŲÄ8“fŠéuFnŒˆ¯Ëj0€´HĶP€­6Žz¯ĩZGlžt•JĐ^]<æI[îŊ÷ÎæxŲēHēÍz˜ŠŽī:´cËV]dŒ¤eąÅĨÅnÜŒ ŌbëÖ#ŠÛLkĸcv>Iæyu´ŠmH%rĶx-ā*tiÔZŗZŒYķúV¯uĐu~oāXŦĶZ­ÖB#Ãíž3ëĖ´ôļ¨T°4Č,Ë2Ôք" ƒ'ĀšgâĖshOŒãúEg2&:*ĪsŖŒoĩZœs"J’dllĖt>¤ię8NQä•ĀK ÷û°Ļ!Ō͛wôۍîĀúy˛;Iëņ€éųđI­@ZAsĶˆŠGÛÍĒMÃhU3M ŗ’Xŗ­3x2o\?ÕFzŋáäŨ /é{‰%J”8,ŧ SŅ0 gJCq€F‹ãI<†Ö4Ć#&¸  Y`đ b€bdÁRĖÖ.”= ™Ņw8Ŧ5Ŧꐘ‡)Eŧ&šMŒ/XĢˇW–'§Üs—oƒé,K3Įķ=×NĶŧĶZm4ÆŨ2[‹LËܲQ Cf[~ŖļÜéŽ.ˇ6Õį\¨„ŽĮÕÂÂūFŖŅ¨Ą˜˛˛,ķ,™ô;•Ē;?stˇģŧÖîNNU ŌBëĀá.w9ƒmĄŊ^O=”lü^WNk˛NMâĪæÜH–h9×jŖ(2j"!„ŅīU*•ĸ(„ív{ÔĨmÖēQĒ€JŖ9čdfōĶ´lžŠPđ#×L€eƒv‡-ōë Hh‚˛kØ`Ē”­a=j/0Ķ’Ŗm€˜fBƒ­ÛÔ˛ĄĐoxņ†Wü‡!kŖ^ R?SĸD‰%ŋN7M[ŠVĻ œŅhAš iØÆĒh]åĘXJ ÖzŠ\KdšArÎ,æBģRŽ™ÃG%.ÖŨÕēŪTΘ" i,,ŒRچfŊNŋ96Ą´ĐI<#¨88ļíXöęęęäĻšĩvOæ™Í™msׯdI¤t^¯×\ØYĨZDõĸąúøD3ÜŊįŽųŲiÛv.Žú^%ˊņņFžÅązwîšëāÔÔTŗ1Ķkw4ã›&š‹‹‹õFĩŊļVĢÕWVV\×}O0AĐívëõēĄīƓ„čđ.NfYfčģŠ.čõzĩZMŠ_. pƘëē&V)•eŲėėė˜|¨~ŋ?zĒZ­öēh’Œ,Ú ŨîVŧą85o ŨŠH3@ŅpAN )Ąá)o´zdæíà Ŗa)ž­×đ6‘ë,œm(&˜Į64ƒâCĩĖÆ ­ogôéÃL'šau‘A>HŦ Dˆâ¸^¯cŊDÍ9˜ĻJË#SZ­fí/Û5(Š"cÂc8ēĄīĩZ­×ëÅq ĀÜÆqlÛ.$[Ī(Sw OP -=ŋšÆ­0˜Lb­’v!Ā]W)Ĩ!Ĩe;Žƒ8Š5ų€e#.ÂŅ;mTš9eų 1Vī´ÛoY0r”–"œ4åŒsQäÜvdžƒYœYRĒcš\ă 6÷"‹ų¤uŖ˜īÚņjE!!mh š4ĖÄ(I|‰%J”8\ŧYŌNōČsĒUˇĻÁ¨BÄBWf#°@Šī{ÁWęBĨŅxAÚ^đ]dÖ:ꈚcVößøˑIbB“$ĻI4ƒ°”ä IoāÕ`|{”ˆÕŽJĨyĮÖmĒXŦíKŌČå^ŗ6īYNš cŒŖH˛áXkAŗuÉÍ:ÉX÷ēQ´až2äÖyÁÃ߂QēúČōaug5\Ŗ˙YŊėáNÜKüō Z­fYf÷û}""ĸ^¯×h4ÖÖ֒$1yēÃĖWąņä Qß'#(­¤Ę‹4¤GaXEĢ'd–9`ƒ¸”˛(8ą@ëĄĘ\“Đë+r$L9āĐéF YžĸĶëDœ<ۑ *×ļĮœ8Ô@i(d‘Zļ+˛\Bļī7ˆEyÜë¸vĩ(R‡{mAĄ"Tž dN{h&”*%4%J”(Qâ°ađãp*Ž#”⌒Äĩņj­Æ}'Ī X@H€;Č ã+ii‚ĨG6&kEh+Y€¯xşŒ4°‚ i¨ŒQ4|IT+HzĐ@ĸY¯ŖNøČ˙Ús^āWבšĐnˇũ°ō"mä­eÛY‰ŋ´ÖĻ‘7Įq:ŽÖÚH‰Úí6ŲļmjķQ…a¸áŒ{ˆīŦ’ %ĩãU•ĐKĩö2Ν • ‘C ‹7D!ŠŧįxažĢ ũ!Æ!Ū4†¯L~ĒQāP Ŋԛil1yZ $āé"æ;žJČtIH—ņYΐ$)Đ\ ÖÄzŠŦ ˛,ËĩÅČS‡f&æ¸J_ĸD‰%#¯´ņ,I‚Õü€ûîēãŠO>ã>Ōž…LĀráøčö ƒ lX‡én-PwāZˆb šBH ‰ám8Tj0B! ´B?…"Įęr`|lŠQĒU°"ĪɧaģĄ‰y"m’žÔúK”(ņ¨@D&ĩ×ë­ŦŦA (Šĸ(ÆÆÆ˜ÄVajĨ:”ŧo<ŅČqĒRឈdáđ`ĸæåŌ‹˛œYä¸nžJmLctŌIS"9\CÃ(¸M˜$įaS8i+đō"QE¤ā4Æŧ,÷¤TRJÎ])4ĀCˇ€œ1[gZ蔓¤ÆŊІʕŽÛä–[äCķ{UdÜļË_B‰%J”8œ<ĐoĒzčûPHĶÂķų‘OÚZhŽãcüƒzEq$BFRĨšJ+íRÁ ĄIðĪ䚘lŽÅũžĘs*đ]‡øÁ֒ß I\“ÄŒī ƒr8eQlq›3ŸŲŠN,.žøSíELMÎôģģĩÔ')ĨÂ÷}ĄÖõ˛‡HŧFŠ])Qâ'ņģwīn4fbl:zMœįÜįįynœã}Į^?ī‚<—–c6Čâā ÕęԈšŽãTĄ"Š ĮöōĸéN@ģ€e€\ã™ÖlčrĨ-͟*2‹ˆ€1 čtģP= Iä+Ų×jĀ،eąāՂæ`WƒJ7Ę<BTÆjÖJo`ôû =d:°7Y<°lĻúB‚ķˆĮUĸD‰%J ž:V‡F4(ÂĐö<ZAË$ÅJŠņĒŽ¸‰Ėێ'—Ŋ¨×¯päP`L3ZšfŖŌYŨŖ…Ž5 é3¯H‹ãv4W; Š I–$ĻAŠĀ I+—a ŖĒW—*Jķ5îT-›Z{Ą••ļ˺І_qIJ’LApËYĪ@UnŧüI•(ņčaøzŗŲ$")åŌŌŌėėŦIw˛m;Īķ0 ã86exßw!Åē!ãF˛Ë€\ Ė%"4„ÆBsb‹ëNXhsN€dŒy/r Ķø­L‰}]ÂĸŲ0Qõ”ĸJ%ˆâVÆ7Í'}/‰ĶfŗŪZUREIÚõC'ĪÚQ,ĨtŊEcqĻ%:ŨôĮĮĻ;ŊūTsöāōž¸¨Ž™íē€ãē~žŽG•<žD‰%Jü‡xœI-MĄFXąAČ dQ‚"­zlpŠŊũ"[Îl´Ĩũ‹,ĸ, æ€9Ä,âŒkw;Ž4šSNP+´ÃŨFg wīYdšeeÜJ™•2+#+#+…•A÷u•B_†ē¯YdåméëJÕAāĸVĢ„ ­Xŋq­õČHäaû_šG”(ņ Ā8đDQ MĶŲŲŲVĢå8މbu'˲ <Īs§×ë=lÎø‘‰įŋ:ĐčyŽR ”† „‚ DĘ#åˆ@¤üõ›GĘ#mi>Vkh…Á`‰PL͏}ôōņ—žĖĩ-Ģĩēp Ũ4céĻŠŸîŨšoå˜ÅöI‹ĢGøc›$˙—į<¯zågˇī9xÂ{7Ũøõ#_ūĒ`ĸšš†žkRJ °ĸP꒾—(QĸD‰GƒĮŸĩáƒH‰ëÕšU)’b0XDû§Ļ&wîD!z"‘Ž;d }‚´][ÉH‘`Ŧ§`3é+ŖDą‚i(S\cĘRĨH´ģ)ˇC]xĩ†Ŋŧ˙îéŲÍG!瀎ŠY[j-.-Ū•ËMŸũ|ōŲO}kyQđl‡*ĩäšûŅOpÚ¯âŨ­§đ“~å„ÕÖ>`ĘﯿØN*””’ÁZ΁*kđ%J”(Qâpcđ Pd“P(Ø Äš1hŦÔĒ"īvú‰ã8HŠ,M644H)iŠĨ˜å°4ë:ž•ˁíŗnÖæš,E¤ˆ­÷˛)ã BKm;ŗŖ(aœ5Æb€Ûvķ\Ø6sG ehyųBSiGSĸÄ/v ÚCk¨üĪ Ņhāœ zŖMē=|ždUÛÆ ß”åpƑčļQ¯4Z 1ejŪí]ĮÎŊåÂā9ŋ6nyøģ›ņŽw~5YĢVjã°öžëŊ§ŸōLmÂ}wãõ¯˙ˇÕĨÁķ_đŦwŋ~Ŋ>>˙7øÔŸī‰#ŊĐ€ĮƗZ-›qÉ)õėxuÎJ›E–:NÎÜâ¨Ŗpá[ŋļ᧞b=˙GßuūõŸōH3ËB!Ü4éqĢĒĨ6ŅRë­øë ųee D‰%J €‚T #(W ādI‚ԐF˜"hR64‘˛F$ I“4îîësÆjf=—š)(bФ´ŌŠA) -4A1%‰1ĻåPØ>Üč(ÃõaXOX/QĸÄ!ŒB}”ĪlŠÖ@œH ;čû€]¯ųBˇŌ<'†J­•e`Îą\n5 }āĸK×Ã3žyģí%_ø?ĪyįģO˙˙>|o§ŨŊę/Og6N˙õĪ™˙äcOė´Wm× BŧäėoŦŽíŲõäé_ųâ{īÚ~מ>ŗu~aiĪCšŽ6ÂMiÖW°ĢUŒYkkkZQčT[íŊAAËpūoœļsÛiˇ|c_§S0›ÖÚ]Éõ놧5”.ØĄNÖ˛_ĸD‰%Ոø8#đ&ĩE2FæfLĶDLƒA3 KÆrmÉÁa;Âq ÛŽWØŽ°]ašÂrs%\Š\)\)l•[ǰuf!ŗtfëÔV™Ŗ['ŽŽ؈-$ŽŒ!eKęš=t?Նŋ3€™8÷ō'UĸÄ!ŒSûÃNCÛâŽ;îų>€8*ĸ~WfãđŸ3‹aôļoŲúâŗpÁ×8,LōŨ—}ųˇ^…Ŋ{›õųį?Ŋõ“NqBžú´ų6õ–f{Ëūį¯ūûå…n2Hvßûã/|Ą}æ‹āTÖüpÛVæ­jĩčD?HEáēcËËøĪÅŨûžûĀÁ'ßō/[_tÖ¯îüsžņ™ãŋƒ¯}wķWūaû™/9Ú +6ãJļã(š^ ĩŽĸYŸĄ”(QĸD‰?ˇLV°Ą'<`úB LĶĄŒ“uĄŠqk†dzˆ>4b'E빆¤hRrHÃ×ÛÅĖ+iãœAC›<&ĄˆiŠ1Fō†ŅĄe${¤šîUi _ĸÄ!‰gëņ ‡øn!âĐ  *dČ,Ī뜡ĶÁäÄ+Ģ™•Аmšh: “íVßŧ…û¤Äö­OŨų¤q˛Tĩ—UÃŲŪÉ{ÍĘ´[i˙ĘĶOüÍ×ãIĮ hNā_…DÛöXŖRīø…žģYĩx°Ōlâæ›ņųúÚ2¯xõī_Æōßō;ßtüŪô<ũō—üĪßŝwu÷ŗ,׀$ 9s´ŌĻ%%y/QĸD‰‡ƒĮĐšm=qQH3Ō fÍI€@ \ .%ÛP'5ÔĖ 9ēRŖÜ%€iƤp ĻĄŽAiƈH Í4c‚1pV0Ø#—ˆa…Œ=q×āŽĖĻD‰ }wž×¤ ØyŽĸ@ú~.c­Xŋ‹Ŗß)BļI$ˆ]§ŗŠjĐdņ˜ŌƒŠąŖ,`Īû´p9BĪŽVžĢ†Si îq‹åOfúõŋ‰ūîúætö;oyųÔ$Ļ&š‹ûV’>$ŠÍPˇėēÔˆ-{H÷ÜåÚú(éøMWĒ^ˇ+ÎĖ öÖ&.˙ãī_r҉“Ώ‹ļT.Āĩ -Ë*ō‡^)¤)QĸD‰˙>Ē¸WāÆã]3ĻGŖš$H@€ AR˛B˛B“Ô$5)c ¯`)X š žõú œi‹´EÚbÚbŠ“ļ˜f¤‰4cš1M¤4cúɸzX‘lT}į(ų{‰˙Õô]o`đë kžk+"+ ƒõé;ķ?ūŅ~Y„q/|ų˸XܗÖĒOŌ**î$§Z^tl‹W3++HcY ļgyŖ;p˜nš|Īm?z×ö™éŲZeæÍ˙?{wmYUߋū;›Õî~ŸļĒ ( čsA1ŅäJĀÜãSâŅ{GäAHĸy&Ļ× īKōLÃ& ōrŸÁ˜d\‚:Ô”ŧ\ĶQcŒžT)Ē9uúŨŽ~6īšĪŽSeEF œâ÷ĄÆâœ}ÖŲ{­uö^ûģæūÍ9ß|ÅãßÁÚú°Rc‚ÖāZ÷†By*Īą6øÉ<§|šã]G56™aE1V‚•āƒaĖ kmŦ1˜įF°Iaēģ0–@o˜rĄ=€;–Arkš1hn¯ã‚ûz2BũÖ¯Û3ú¤Ļg+ÄO.@!ßËSļ†sŨ*Ī‹‧ĩ¨L DQ¤Á[~ oyÛĩ:E‘@H|˙•Ŋ˙ōSŸųŨßũą˙éžŨ‹{>ôøĀû֘1Uxķ˙öOˇũŪēĢŲí\ļ~¯ûÉÕøÂ?ŪņŸúūûĩøŒ•u|ūs0 û(:Gža\lx˛đųŧL]*`÷ŪZZ•lˇ˛#ÃĖėbŨ|āN×îŗzņŪ÷ãīąĖh Î=Ĩ5?vMB!„ė¸ĪŗÕ’mea T@‰.lÉle‘LpH k``Á-‡fw7ē?iGg–ĄdŦā,3€E¤™tõėîSxÍ­aĖ0kEÎĐ(Ā9 ’YÃ,‡Ė0nË4˜ŗîķfaXÅ-§VBžˇ§¸kf[ũˍįÅPōÜræĮņîåĨ/˙ō/.ßüƯt74ŖhWāņ¤(Ŧ?ûs÷y,ôĘfíŒĒšá¨oŒŠĐ?ãį~î a}IYeĶ3‚°S̟ķî÷|ūŋßvÖ(+8 &D=˜ąfO•‡/åjČm,䅭PEa­,Ŋë˙˟Ôęõ2=K@XozOxôŋūō ĶîLmãČQˇuŠ:`mÎeŠĀ‚@æĮ&du§/P=!„”āÁÁŧd4Ž5CYQž'<–’á?ū/īvÛĀÛÄŨ\¨ ° –ÁÆ @¸IÕ50”ė¤ LFŧ96 sĖZ´|cdœŽsÆŧĸČkĩ@p”ē ›–÷° ÜpjE#ä{ßšs17XĪ]ãWJCsˇŽą6I5ãûį ŊpVËs¯ČŒe &›Ür&Ä8õ-C`aŗŠ[~a>Úk™aĻ–$‚A,ÉÆ8 Å(\YÉ”FŲÂ^øŠ IDAT€đ,ˇāØJ20>cŒeƒb|Ø,Tĩšb˜<۔œ[cá1ÔĘʀI0ä…sŊ÷ Ŧ;]E€ādo!„įh‚į Ŧ( ÆX\ķŦŽŽvįæÖÖÖNŌēŊâŲņ<‘aŖą{4Ú(ĐīF&Í× 3œ´ž]ŸÄÖŅéÄX>ôXFTĢwÆI?MGƖačƒŋAL?É05„P`ā€ä‰/ˇ­â ÁLŨĸfĩĀöúų§XÚ:˛č>é:ö„[Äqg$SCYÃqŸÁ ˜Úņ›į:ŨZ qŦ‰}ûU“ũō'+ŗéÎB!ĪéĒĒZ­€<ĪdY6??˙āƒ...žt}7 údčxfĀ* Ō`ƒĖv÷\ĮV柸ÍTÖũÔWŠÛSm&Öl,ŧđĸķWVŽdyRŠT›@§ĶɲdۛîôēŪk !„BČķ,ÁO§X÷<@ZëÅÅE}üx Į<ŗv2<ŗ†Yˍe“Fôf“UÕ ZͲˇž*Í0֕›CåTˆũgÍonŽĢ f=ĪSē¨Ē ā8îJ€˛;!„By^&xÆX’$žįųž€s> „õzũä ~kâ'€āœa2!”6c/=° ũÍoÁí4#1@ üSÜÍxos-)ĘŲŲŽą†1+ĨRfYæyŪņŠ‹ũ„B!„<<)Ĩ‹īŊ^¯Ņh¸ĸcNžŒ-,į[38YËÁ¸eĻTEŗŅ€ucL"e\c‡=˛,VÆgö”ūĶ s ŗqžÕjáęęĒR•ČZ-RJŋ=ÔO!„Bžß Ū}Ņét\ņL¯×ët:'Ođ0`[MđŒĖc0ĄXcĘÁXUl؛ŨÍZ{æTë1Ë-3OģdĀá•Âqc*ÆMŖYËķ”1–įšī‡Û6b[‚g fxB!„ōI×Ú@[˜ÉĖŦL¸ę+ Ã*nĩ0΍8Ĩ6{3Iķ °”ā !„B%ø§6íbĘ Ā9„†›‰Õš``(9ƒb“¨=ũŧX2;)…gĐ°Ķ¯§ÁŨn5ÃoŠÃ5 +ųovuféH’^ė`0€¨´ÕĘZĪNO“WޚŧH1ũ 턧×öķÆÔ3,ŗ'=šÅ´ļÛɍ'œI&ˇLƒ°†Ņ™„BČé™āŲļ/&š5× n* Y 0ų¸ŗXßX;Š–?ƒŅ$ˇē¨ōãî8Ķá,-ŦĶT˙oEąŠ9îĩÆõ ˇÖęœŅnÔûŖŧæiØĖ ŒŧP X4Yƒl{õ ęoBr0V†“áĒNūâŨĒ‚;Ą[üŋūŒdÁ Ā-Ŧ€•°“ģeœŲ* !…īŖLg\€•&™‰Âqjc¯žöĶZS€)@Đų„BČi—āŊqēøn1ŪÂj)„{ûŗ|4ÁúŒNą~†–ĪúRģ‰ē9F´:sÉ(īVęGûՍŦåÚXŖ:hBÎu^ôWáylrV81¯cĢæmÛ)ÄÂ>éUúĶąOņ‹Ûœĩļ*ø–§)¤DU••ÖģŗģŠô‰Ļŋfė㍨˛Z=†UÕxė5ĸå&BĄŋŖLŌŦ›ÚIŠĘ 7€ßŦŦžiדŪĀŊUĶŋįū?Å9§:r,(Ë|\AT‹aô*uāŅÍė_€ Ī>ë_^ÚĢįĨ-úUÔœĪ†}°´†Ũ6™Ķ€ĶŽøև €Ũ6­ÄŠfw7›œŨvuĀ´&ˇŌûôŅôežž›ßģļšQĢéÅņîŖË÷Öڇ7zúĐŌĢÍĐߜBČiŸāíöiS‹Öjx>„DŖŗ'ß,†6Ã†4úØ Ž´|/+ĶK”ÃÖ#XlnÍv lOCõ&ŌÁãOذöŠ*[ üķífÃŦÕjƒâ)‚@1k&Uį֍ˡ‚ļą°ėÔū;ֆΠ›6XnÁ˜åöģëė-įŪŽĩՔÃ3X7ŌüĐėŽõĩΰúvŧ¤L/é đ°š2čîjҟBČéā¸÷QH·¨J#Õčŗ-a`Ų†`),3´|Ž/SÛ2Œ:“c/p@ŗîŦ°Āz/ ëĩl\Dū:gOœĪų+ĢüŌŨK—zy€PŖŒ™–’OžKœOæj–ۏ20 P |Ģ…ū)—lk67VMúĩ[x€Ī€cõëĮęīdŧŦVfÚģúũ(8ÂäCiōŲõŖ‚¯Ú¤—•cÎĐė@U–kÖ] øN!äôNđ–o û8iîRŦ4C{;×ZäA;+}ÆrĒ2ßËŗš^Ŗd;f7zĢÍF[ʸÛiZ QiVŒĸ¨ũU _åjŽ;ģ´9Ža¯įˇŗœoī 毟ĖÛŽÂũôėaNqœĒɝ1Øce2“!e ˜:VŒc%Āđ4Kĸ`qŖpn&ŅøúæÆ=āyņf• .Päi á™<į¨žBČÉßcÖZ7lŸRJJiŒá|įŒ~pėŖęĘÍådÁ5dfŦĪ}„ķģoNŪ¨ŠBe§,P2T;øųIū-ĨK)$ —WÖææ,0NĮQÆBD˛-âķõh×ģ_ƒâŧÃ<Ä÷i4\^ˇÛN[u-Æ2jԚn9 aųŠ?O-3“O0Ãܘ3ŦËÁsf-‰` „äLø›Iū÷aãųč˙­ĪöĮ›XV¨\ËĀKŌa­hã$iÕæNĮŪJ„<'pÎOšܒ1ĀZë~D‡‹<לfOJžõÖl<.-Ŧ‚įfu 8jÖ%d‡žĀĨ•2EY.,ĖĒB4âē‹æÃ´(Ô81°~xi¸`Oįĩ›ũ!lkëä°ÛaXX0lMø€ÉŌđg0­23`ā` ā°fŌ‘õ¸î°Ŧ×@Á sŗééÃĀ_åų#đ÷×­åé :+eTĢō˛V¯”UŊVŗĮ:áB!§Q‚wīo[‹Iw4Îa-˜„, -a` Œ‡æBŅøĘ;<đi‚q­ Ô˙|f!y,}tšÆŧ D„Ū`ŖQ¤lA¯éå!_ øžą.vZ›=”ÕÂF’įQT˲žęē2Đ ^ˤ´EƞIá ‡ĮPl„­™|Ŧ!8”ž§Kø3Eļ^¯ĪÆëaÄĶėPúaԇøÎ`ũ¯ĀŽ÷ŋĶŽ9Œ ũ€‰`ʋ\‘Ŋˆgr9A!„üz;wMîbú†ēĩ䀞Ž, ÎĀŨÎZęšŖWiąõŧ;•:xĖĢ{ÕXIcĻYæ°%ĘNJĨg-j!FŲáÂücÔZË÷ß@đ`–¯2Ė%ÃĒĶđ´6R[j&‚c­\ÚÂÃļ !˙樞ėh§Á“rĢAÎ ęŧ5Á gĮ'u6­ŖwEJņd§žØ+@<ų4MÚŠĨ_H3‡ģŦ?rty}íx" bØ3–ÎŨŪë—>P¯Ŋēš9ĘfšđĒ*ŅJBz5%ŊgļE*đŒäZI¯0f,™ôS5ˆ„ÜHVgģųÚæ˛ÁCŧŨ7ÉCŖü!ë@ÔjÖaÁÜYËÛē(˜ü“`’ÁlŸā‚B9.íđ6xSÁđ ™+Šą“Bxđɰ3pmđĶæzŠƒ;+ģ3ú“‘)×/a›“!9€!`€¨Čeā Xô{eģë7éÚhķÜŗ/Kûū™ZĩQÅAí‚ųŲ =‘-îējc ŽQ|;“°Ęâ˛H§ßráÕŅx´:L7âˆshm+Á<īXĢÁöGˇÛžŨęmŋ5AŦâЀaā€Ãˇö”B žíø'%ÛūĮžfUBȎ~ĩo{?õ 1[ŸÁ=Iö<ƒŠJ]–eŊ^˙æC_Ūŋ˙S4u,..~ũë_œ™™ ĩ.ŠBJéû>€~ŋ߈|cLYé ¨Įãz=8yv’īÄąŗą]ôĐív˲,Ër<{ž7]ÁOŊ^oˇÛeYŪpà ŋūëŋž´´äZî­ĩįœsÎ]wŨuæ™gēÃ2333ÍŲĶæwŠcŒF.ģxíšÃ[­VžįGeŒÕëu­õ ^đ‚ģīž{4šŨœŪC¯×“Rē¯cî 5›MˇÍØúŦã5¯y ÛRĢÕnēéĻ—ŋüåˇŨv›ģ0xå+_ųą}Ėmž‹øŊ^/Žc÷G¤į6!„ûlˇŽŗoßž|ä#Ķw7âÍË^ö˛Z­ļgĪžZ­6;;Ûív|âŸ0ÆL7ŌmØÛßūö›nēÉmü\đÁ~Đu8tčį<˲øžŋ˛˛âԝwŪ97771—]vŲG>ō‘ĒĒŽ=ēũ¨ēõápøÂžđw÷w§įÚuįĩÖ^uÕU(Šæįįŋō•¯\|ņÅō'âÖšęĒĢîžûîĮ{Œ1vôčQןØ˙¸îÅäųüēūîüã–ĶO„܏yŽ‘t C!OË•Š¸/Üûúââ"YZZÚŊ{7c įüąĮķ<Ī5A033ãzOÎĪĪģˆ™eYĮđ<īđĨ”n”•fŗųÄOtģ]Īķ”RRJĪķō<ŸģîÆCt…% nÉzŊže™)r׎]îZ­–tÅ}&ā:ž–e)ĨÜŋ˙\õų™gžé™q ęî\Ŗž¤ÅsķÍ7ŋãīĮŒ1cĖ5×\“$Iŋßīt:˙øĮ?øÁ>üđÃŽ'ëųįŸīQŋßߡoŸk§×Zc<Ī{ā]cųĘĘĘ5×\ŗąąáĘî•ReYrÎxāvģ}ųå—×ëõ4M[­VģŨŪÜÜÜÜÜܡoŸģ7­ĩ+˜quMyžK)¯ŋūúˇŋũíÖZ!DˇÛuûŦ­­ÍÍÍUU5 Ö××­ĩW^yĨ”ŌõˆuWAgŸ}6=Ŋ !;%xByŽÁc:”$Ägffî¸ãŽwžķ.žpšö‚ .¨Ējiiiff†sžļﯛŸŸ7Æ´ÛíŅhä*Uܰ’_ũęWƒ BL]q-ĮŠĸpųÛEgÎyŗŲTJ}øÃūПú)7f|ˇÛ=tčĐå—_žĻ鯯F’$." !FŖ‘[ĮŨaĮZk׃–sžēēúĩ¯}íēëŽ[__¯×ëŊ^oĪž=EQc\ŧ{PWQsÖYgšoûũžĸĶé=zôõ¯ũžđ…ŋøÅRʡŧå-+++Ž]üŌK/]^^BLgSB\|ņÅt]Wîŋ˙ū™™)åęęętúË.ģŦßīgYæzžŽĮãZ­æúČēS!„ë>;2 C7ÎĖŽ]ģ܈:ޝBUUŗŗŗŽŽ)Š"7fÎČ)­ IDATˇžõ-Îų´o1€ŅhäzĐBČBuđ„ō L‡•lĩZûØĮ>ôĄŊ˙ũī_^^.ŠâßøÆoūæo~á _hˇÛ?ņ?ņ‹ŋø‹ƒÁ ßīßzë­o|ãŨĮņI’´Ûm7ŋŌyįwÍ5×ŧõ­oeŒyžˇēēúįūįY–1Ƥ”RJRĢĒrÍđiš~ņ‹_ü…_ø…Ī}îs7ŨtSŗŲô}˙’K.ųĖg>ã†dųƒ?øƒ~ŋ¯ĩ.ËryyšŅh¸1"ķūņGQ4īēëŽÁ`eŲüüŧ”Ō Í>33ķŠWŧâ oxÃ> ‚O~ō“õzŊĶé¸îŗîø[k]Ũŧ—&Žc÷(î EQ”e™›ÍĒŲl‡ÃN§ŗwīŪ—ŋüåˇÜrˁ=zôŽ;î@ņB žBN˙? ņ/{ŲË>ũéOũë_ßŋ†¯ũë/šä’Ë.ģŦÕjŨzë­a^uÕU—_~ųĖĖĖ{Ūķ—Ë“$évģŗŗŗƒÁ@)õŲĪ~6‚sĪ=ˇĶé\{íĩŸūô§Ŗ(2ƌĮcĨÔ`0pŨ4oŋũöN§Ķnˇßöļˇ-///--]uÕUƒÁĀ­ˇŪúčŖžôĨ/Ŋė˛ËޏâŠÅÅEמŨjĩfff”Rn´øvģíRōô37AŌ 7ÜđĻ7ŊÉ÷ũ{îšįŪ{īuĩ+ØrĮÕôz=÷ítJ×zŊ†aĮīyĪ{Î=÷ÜË.ģė×~í×~äG~Ä5œwģŨĮüėŗĪvå+ŽÜČ5{ß{īŊūđ‡ø‡øēëŽ{Á ^āÆŧđøãˇÛí,Ë8į÷Ū{īŪŊ{ožųæ8ŽwīŪũå/ŲZ잞rôčQ7‹mŋßÐsî~Ŋ,Ë,ËVVVÜdRî2CJš´´äFŌtyŨķŧO}ęSÍfķu¯{]ĮW^yĨĢšwƒWBČÎÂĻ̓ģSļ”Ō}NJ‡†BĻ'JÎyUUœs­ĩk„v'Lˇ‚kpøđá3Î8Āx<Ž×ëyžF#7øēã*כÍ&cĖ-ãڀ§u2I’¸ĒWÚĀ=Ž+°qw;ũŅææfˇÛöÉsß0ƸáÛ¸áŌ]•šīûn79ë…^xĮw\wŨuĶķ˙öę”í;čæ ÃĐŨâæu…­ęÖÚÍÍMß÷†ÛTũŨ–9rdĪž=ŽĒÖÚ W?ũu7ĐžģˍĒĒ,K7'ëöû___wÅũnŒËFŖ1=ōؚ@ĒÕjš;ÜíeYē8Ļ`Ŋ^ovv֍oĶī÷Ũyrũ=ž;˙¸å´Ÿëö!ĪĄ'0ByZ͉œĻŲ.ĶOãģ˸.žk­ëõzQnî$Wž’įšë‡Újĩcyž7 å§­ŨjĩÚÚÚZŋßwņn¤ķiõˆÛßŗ,sēĒĒ^¯įž-ËŌ­E‘īûŽ*ŨÍ å6˛Ûíj­ŨÜĨÍfĶŨ­ë ę6`4šĨ”npzˇm.Žc\ŧ{h7eį|0¸Ę–™™wMâ†ÂtAŲ=ŠkŒŸ>´ÛˇynMßĨ”n|I×F>Ŋœ(ŠÂÅwWIīŽdÜ>ēĄiōĘyū *B žBžīôtdĄOČŗķĻC@!„B%xB!„B%xB!„B(ÁĶ! „B!„â8î÷ûRĘN§“$IšĻõzŽ!„gĩÁBȄīûŽßĒKķBĨÔh4 ‚ MĶ ¤”kkkÖÚi#=!„B žBžMRJÜcJŠĸ(cŽēfZŸe™įyÆ:\„B(ÁBČŗĪUË$Ib­™™ąÖē:øN§ãĻ|j4Ŋ^OAĮŠBČŗ‚ęā !dĸ,˲,Ûí6€fŗŲëõúũžįyiščõzn*VĨT§ĶąÖNįj%„Bū=QŖ$O!”ā !;VY–BˆzŊn­Í˛,ŽãÕÕÕųųyX}ZîīæææŽ] GŽ4›õõĩŲš9Bx°;9ĶZh”Ux°€°@ĨËHøô$'„į2Ēĸ!„ük 7Ā"€ĸ(ƒ;MģÖ´[íū Ī7քA˜9÷íÎŨ)åž@ĻQ1ČH.­Ž5km€ŲãĢh,UĶĶ UŅJđ„įwē(ŠÂķ<Κ‚ēę‹ĶÎ4Ę Îáû¨*”jg'Z„>˛†Ą`ĐeUŌ˛Į'&x>ų’<ĄOČs=) !ĪØææĻ%Y–c"†ûîy[ˆ€oõŠ€ŽĒĘMoę“§_‚ˇĨR|œæYZ0)$ãŨŲų*/vî~qfUĩ~öŪ…õÁzU 2h4ęēB–Ųz}{ŊŒëä:­ø§O!”ā !;ņÄ!e’$ĩZ-I’zŊîGįĘc`q:-™œséyܘ˛,Q4¸'•5;wŋŦ-§Ã*ôw1ƒV &ˏęõ“öZĨŽŦ„B ž˛ÃEQ Ü6 ēĩL T§áۚĘ€Ņ}TÅ(ôaT*vrĻ5 Uč‰T§’!ƒ!ė ÃĀ›‡…'„B žrÚāܞžcҜ–ŦeJ V1ģÕĀžŊŠ}Ō‡uō §BĄO9Í!<ÍK!og¨¸1ÂhfŨ՗ģ ;öˇœôaĩ[ŅP|'„Jđ„ĶŽ 3šÄNų{+↰ –M[á  06 ų„B(ÁBNš#õ5XE‡b§`†Ã ąUũÎ-`ÜĖē úXŧ+ŗĄžŦ„B žršąā–j-vŌß ŦœŒɸĩ`#ŽÁĶP4„B žr:b!<:;#ž3TĖ*&-ŽÍĀjļb:ƒ96ëÛ`'? „B žōīÚ\K+p\¯ÄI23Į¯ûL›Ō9ˇ†YˆgR.Í,3–U, a=Î]6ŗ€bn›-‡•Įō#sõöæ¸ >i'Zfpl@Äé lë6s|(5ÛWŗĖ¸ųļßöSpf,ߚĩtûžŗÉöLŽĒŦŨ:ÂĖr†ģÃÅhÂ00k&ËXŽ,3°œŲiGRæ.–,ŗ[ÛļmŽ%+ĻģĖŦūMš…a“íˇ[Õ0šYÆ5€Éo°āėXˆßzD~ÜnBy Īģ yÅwmPš?edRm`   “ęįIđ}ō|ÛŽ7¤åZ‹â˙Y^YŽ,/Ŧė+ŗ’Y)LÁŊ‚G#ÅTā!Få%•Ødū˜{%X™•ąLúRxV#)tOa ‚܏Œ˛Š˛™a•2—Ė deō dĨ˛Š˛iĄF9luã$Æõ(Is ×Úe Ĩ­úÜŗĘæ‰ęÅM.=Ã=­¤â1SU&†Å¸Öm­šqdy9J{•Ę„Ôcĩ!ZųiŽ$lxVb8kĩÕāVøāžļŧŌ(*V(VŠ"UF1Á ´E)yúÖķ´äš #<.}a̘)me™bÖ0ËŲļë0 x@ãMJh¸Ą!„{؊ōîOģ•Š­į ĩûB%xBČŋĢãë"Ž›ģg{;ėdø‘If;Y‚įրqi ƒ#Šië§ā!`Cks0͑Á2c5ˇŦ‘–i•[úÂ÷DX[ķ’ĸ‚1ΙĮI6Ž=/đdˇ×}?,Šreĩ/¤[ØeQõ7פ°œËq?Éōrvže­`Œ5›õĸ¨jĩZ2Jķ~ž{aņ›?zöž3”ÕĩߗJ)nŊ*gËG6vīŪŨī÷ĶÂHé‡ĸS¯5še+ÃĮįjIudáŒF¯ˇÚl6‡I&ôf;=ņĐĖ˜æiĨ‹0ŦuÚápTŒĶĒzܘņ˜)J57ŋg؏3Õčt]­ÕëĄđTĨ ×6“å#ĢŌcŨÆŽ•õ5øÜTŠK]ŠtyyinfWšäLxŗ33Ė3Ŗņfž'žī7ōČáī¤IŲíÎ4›se–giæų>ãJr 2•Õ–C[Ã,Û6r$!„Jđ„įpˆcMėė¤ĢāÄš{ė“/Ųö[\Ģí3š÷Gj„ÖzĖT LyÆĀV€FĻ O0Ÿ{ AĨŧĒ dk&^Ų8\UEģĶė´fĶ$/KÍŧhs8ĸBÄÍĻeųōæQ°ĒĶŽŠŦ°āÍÆ\-–Ri>Ž*Ŋ˛žĻŠrvvņŦŗ.øÎˇô7‹}g]0­q.úÃ"đkíN1ÛlŽŗŧˇfæöô‡YÖ}_Ŗ TÉpäûŅî]gŒËCĨβ^ŪltWև{ö^Đë „āqŗ-à õ­“˛7J‹ÂĖÎí:˛2Šãv,Ã`e3mÅŗz<^$õÎ\ĘĮžųĩ3wīcŧ^ku ąÔjć¯ûaÜi593Ã~?WĩZ87ˇŌ:ˊåĩUĀXŽ=/bđŽ.-ĪvgüŨQšäÃņ@Jé7ę€.ĘL2&983ˇ7UQåšzB%xBČsßŪ‡u[ŋKŗív~b‡Ė§hŖu}59h@Jh…ōˇÆZĄ $ŗ n ؘA @p΍`Ú(Ģ”Š*fM a7†+ÜĪy5L‹žVVĘĀrŋ;×ä\öûũŪpŖŲ:ŗQY™ĘĻ\Ę^ÄųŦõ|¤Ŋ¨=ŋ–*-ō<Œ˙øå‡.ģäō••eÂJY&uw~—ëeëJ§AāyŒ—*ņXd™ą\ Ō5Ĩķ8ˆĩÆ8I^#n6<ô7ĢáPžu֋~č[ĩZį7ķžú5­—ŧô .šÚÃ^Į])íōŠ™_¸¨?\iÔŅæ-_ü͝Ŋū5¯PÉæę ģ~Ŗß˙wüÅ‹Žˆū×Wŋ8WUwaÎj8,uešāyĻ,JøæđĮvīžŸiÕúƒ!CØîîŌ•\]]m7šE27xĀD€\įU Ÿ!F2ÃĢŠ}ĪX–결,¤W!„P‚'„ė Į  ˇÆ üŽæs†'ZÆppÅ!hÅ`yiQ0ËŨh*OŊ4JH! ¤ãJÍn9ĶL0QÁ(]Ađ(ō ¸ą|4Ž6YŋŋÁēsmU™ĩĩ† 7•5aŊÕãd¸š9ŒC9?ĶUUUd!7Ąž6Õp<ĻŊ8ޝ÷ŗs÷_ÖZ?œÛčmÎ-,n6zIVV– /f˜'„VØ$͸` <ĒĪĀ(ĢŅlEJŲŪ˛"ĢÔžŊ—:08r¤ÚĩërŖ1 Z–5evfg6û‡Œœc:æˇ Ŧc \=IUŒ›šS ¸a! 0ÍPqË 3OģT"SŪ†fÂčÚr&‚Ēä^ČĀŦ9 ‹ô YZ>ZíßķŸ>˙Ųų‹ŋūģ^üxÅ+_pæŪřšc˛Čāķfvŋúåoũá‡˙a8Āk~b× .ĮE]tč;ꓟüŗûūžŋ1ĀËŽÅ›ūeãĸzãõķˇ\đW^Ë-ŪķŪ{˜˙ãˇ^2úĐÜķ•/#đąo/~ō'čĨ?ø}ƒėQą;n˙ë¸y…ķĪÆĪū܍÷ûžōæ_Ú3ŋxæ‘#Ã4•˙ųæ˙ņ‰ģ~åO˙ôO,á]ī9¸į#Ī;oēéG˙îs_ū˟×VŽn~áK~čâŦH,ã{÷á‘o­˙͟ūņŖáĸ—âĘX|íĩ/Ø\M¤REƒQžûĖ Ŋš˙á˙ø˙žš†Î: ¯ûÉķ_ú’+G‡ī{īß9ÎڋĢ_vÕšįí1˛4ŦŦ7Äxcí‚ķĪūæˇ–nûŊ/íø×âG~ė?ug[ũūFĢÄ„P(•VĻÁTOŅk‚B(ÁBvF‚ßIrōũļÖwkĐ`œ!x˛&Z7n8ƒa[mųHŲŦaŒ[<ũRąĸd#X.u›Í9K7°ÚB€{Œ‡ÚhĨkƒũæŖË<°ō˟|¨UĮ‹ŽđßpãKĪŋpwŠ+ĢÎy‘WyĻ˙ė͟ûĖ˙Äâ~øęšË/ŋb˙y{ĸFúČw˙ū˙}_‘ã]ī{3“ų]ûÃ˙ö;÷Ŋũ׎ū¯˙íÂ[˙ĪožŅ}é _üÎ!ŧįļkJŧãˇîņü_īēŠQoāö÷˙˙ėŨyœdU}7ūĪ9įîĩWWõŪŗ3 8l˛Ŗ>.Q|D •$÷ĀãcLŒâöķ§OÅeQ@ˆBDĀā.n@ ĸ ‹ 2ûLOīKmˇęîį<ÜĐ?™īûÕjĒĢēo-]õšßúŪsžķũz†úLŗxŲGnwL|ū ¯ę[qīŊ÷Ž\Ŋ1–m;ŅjûĻ!™ŅlšBŗĪÛxđ#¯ÃĻã_xx,[ų|>›+üũ?œ´zåQ[wŒŊûŊ_5öš×ŽŽÕ[ŋy‘7|ÁĢO8ųÔcŽøâu_˙úø+O“–]H$ĸØ`ÂŽ5Ŋ|äZĶ4?ūÉŋ,ØŋüË ßųÁ–ŪÁ!Sˇū÷{_ŊåŠ÷üđ7úØåĘ/yIßqĮËÁËÅʎí{l츁÷Ÿûč;˙ũģčC?`:ÎÃ˛Ë{– ”mÍdŒA1륧 !„ P §žújÆŌõ†žä š‚à øū7ĪÂ-KADšpfmĢ`ëFīw~đø7oœzzīû>X=öøUžĄĪÖgtŨę*ūīßüŪíˇī‘ 6ƒ˙sųIŊũy͈LˏųļiW0Ãšī—øÚ-_îĒĖ4ö\pá9įŋ雡Ō6}ėK^1ûá]?>†+Žxĩ7ļ>øn¸é•J)Œü ßúÆˇ^|Ķ›/ΏMĖn~ ˙|å+Íŧ]ķĻ:ápŨļ;ĐÎ!JbĄ+ÁÕlcŌ Ą™IųĐāGuĶa2ˆ]oöĖŋHÆfŊ5ĩfÍĒsÎŲđāžuÖ ‚YéÂŽ>é¤3Ŗ°ņüåEoûōæÍÛûĶttÚąāÖL}ėWâĻ›.Zž|ųäøČÅ˙ÍÛßvũĢÎáĢVUŊ žfãō5—Į âņ]ˇßūøˇ|ë°xË^päáËü$đwũ†eë^WīÄ÷˙Įƒ>¸û3ŸÚsüŅxûÅg ôdŊ¨nd˜ ņ„B žrĀ‘`œiBĶ”˛p›@0€d?3Iî” Cō_Î^ŗx” JÁÎÂmA–]‘ÆdŦęžį[<ßÕŨĢįôÃõ={Ļã=}Æ˛åksŒ%PRĶ´|ÖéxrĪŽąŲ™öø6ÃV¯íęĒ– ļáÄQԘiÔŧ@߲eē\ƅõÉ(Fß2HŽb ͎/ôäŦ—ŧôö;n9í$gpÅō0™žŠKøØĮ¯Ú燭Įė4ŽŅņÉúL­ãã° GáLĮ­YēŪđ<&œ$Ļ;žpWĒE hēŒâP*ä ™‰Éąū.]ß˙ŪOŋũ­ņéIDük×Á2sāĸŲÄakÖÖgk=…PÉ僨ąm÷1Oi5P,å9Ķvnߓ-āŧz÷ô÷B†āÚ^Ôhˇ3ŽĄ…aKô œ|Š;y æ_g:^Ā Aųž‰cO9éTßUũjĪČFöŽ õnڙ(n†a ͤ?BĄO9c‡âđęôėļ¯ũë솖­Ü1üd$'{ûsÍĻ›u˛×ũÛõ'ž€‡î<ōȃ§žļ~` ŋ^Û|ų§.8bcoĶ˜œíŽ äŦęŖļĩĶ™,Ë8đƒN¨‰ÉæCŋzüG?Ū;Œ#Æ/<á˜ŖÖÆõŨR´sNëĄ9ëūæÉß~įû[gœwžcŲ™§ŸX.8õé‰8–ē(Æ1&-ŗJ!”ā !@|Į\ü\˜æ„€Ļ[˜­ŠnÛÖę"ŽÉÎ.ˁ@ÅÁäķŽ ’+šôļ <z!?85 *Ō %×ĖŽŽLȒļ7Õlw …ĖË^žáė3͓ŪĶ IDATŽôĻŗ÷ŪķĀ÷ŋģįģßŨsÎkǧŸyb§ĶÔ4mp¨jÛ+XŋRÎūüÁŊyΎīÚ{Ņ[6­ŪЧ'Ī}öķoø‹W¯>lšš?ųá=§Ÿ~úŋ|æú];på§ßūë‡~yíUŋHÂŨ/˙ŗWžy*žzĶWĪ9įÄ#6Ž5™ų?ûéą/8žŋĪĀŋŪ|Ī[ßvjš”ûÍo~ŗî0' qü øņˇ­[s´Ĩk˙üĪß]5ÅüR1ĶUÁÖ-[O9õÁŒjĨßŌąfÍZÛ4vīŪũŸ˙9|Æš°ã% š ŽŊöūãVįV­¸ãî;‡ú°éČŖ‚NÛ6‘D3†>84¸æĖS˙ãk˙z}ũŲÚĩ}*N~úŖīŦ^šŦZ­~åÆoŪwzzņˇo9éđGÔëŗŠI˔‘ÅōųŒëļo¸á{÷Ū‹kđʗ­úĖ•/Ö´ØnkĒQķÃ44]1ēĘŽ?M„r@ž™3ƔRJ)qkš&ĨäœÖÍ&ä 3W&—`‰‚L hH|˜:ētÆžwį?Dí­ųlË‘%m!ųRûhXÂ/šsžŽI;…#Î~Ņ5yīüđ")ˇxē‰!)Ĩā‰Žuq]d;ōUÖXv’Du†GļKV_WŗÕčííŨļuw_ī L´N;Ędr2ÁøøxËmĩiÞáąBž÷ŗ˙ōoÛv`÷0ōŧčtœvچ}pķ§ūé”Ŧ“[ŗjõŸúüî]øø'^9ÛđžqûŸx[wĸŋŠ#ŽÄû.{ŖÎh˙āeߞA§ĶÄ;˙öØŖ6 nÛūÛ/]÷Ôô2ūėœĄk¯žæē?+æōOüö‰ë¯{tjG‰ŋēčĨ˙qīĪz¯Ë–­70<ŒĪ^ņj?Œ/}ßwÎ<ŊōčĪώî@q9Ūũŋ7mZ5¤1ííīžã˜ōķūįY†aLL'ˇŨūũí[ąe –aãü¯K_¯íÜūÛRŠP(—ÚŽßhvĒÕ>Û)NŒ w•L™øšĻíÜš›A,_š2đ Ž–eIÎĨŽ'nģæn6kK¨„uu‚•¯8÷jhÆ ŠˆŔ>÷´a‹ˆßeÅ.Bū¤qÎ÷›Ō1=Ô[)•~‹î.B žōGLđr>Ác!Á €Į`@ˇÅ´÷|ëŨ‰ŋ%cMY:†i.Š'f~ߐKœ>¨‹„ëk_ķǝāŽ{­•Ųc?c•:3ŽRLX͌ÉСŧ Ō­$›-´ę°ŦL.ĢM3䋙Úė´ĐŒÁž•ĩzËmz†édlĮ :2Iōų|ŖŅĐ ' ’RšÄIŗŲ,WJ““ãQ”twwĢBˆ$ fĻ'׎Y9:>"QŠ,›™PœŲ•JyēļKŗęQRS*1ĸ×ĘØf‰1Ļ´ TJ&gĻU\āÜ1t6ۘäLö tGaØît’Hæ‹ĨČO 3Ķj6`–Ûq͌îXBzmމ‘š›ËäĢēŲņÜɰ=´l`r˖ŽRĄäËEGĮömÛ §ĢPėžžœæœ÷”+õFÍŌTœx–ÉũĀēfšĻĒ0Bd„Æ Kk4§8gēÆ-ËЅáy&Ėv;(ä‹AÔ[ŗ™ŦQ(ÛaäļZ-δ„U)ÁJđ”āɇž”„:;ėJ‚ЧŊ…ÍíĘq `ą›ŗ%KšívĶÎõ'`L!aæŋĨ`ŠƒÉį5Îķˆ‚lˆ€œCēqŦ‰bqėdĖŦ^ô8JÜČõ2–ãG ßĶ3ŽĄ #›É["ĶtÛ;ˇíq˛…îrOŦ¤ßi1‘Øk5'*šrŖŅXÖÛûÛ­õ Fî¤Ņ•Šŗ…BéąG~Ŋvõ ĪomˇĢ`úÍɌāē‘Ųģ=“5zûĒ[ļ?X.—-Ķ™žf\×û*ų=ŪÎ0ŪiÛvŊŲF\Ę´ŊÕŠ+ČJ74ĩŧ'ŨFŖ\­z­Č Z3“õ•Ģ× QW\u|/“Ī0ÆF÷N-Ģ%Hzzm[žėZÍd§ÜelßūøąĢ׌ WVTļī|ĖæÆŠÁeą2&&öd4Ņ××ŗũŠĮ*ÕŽb.ģwīŦˆ\.§”Š\Ī6LFAà üP ÍâH”iŲaĖÔ'ËÖÍ8g˛Ųéí\įÕî|ģw2uw÷zŽG„B žō§OΏsū\Í5Ø0 Ŗ! ;&÷uØķW"ZōOLPb‰—V‰fļę͈€Ä÷Œb"+¸ĨÅēb‰ŒyģJå3hšfi\)Ą".KĮl­ŅlēĨlŪPŦŋŋßmy‘2Ļâ¨mhÜ4LÉfs˛/íėíŧƚ•ũ{†‡‹ÅŌžmOŊāČõģwūļXČåģJŽįu\Cŗe”‹ļføģwũ琺Ú{w-_ļÆķŧOm­vÂ`aØîí2;nu2A0ËeČ7¸ŸØŪŨS‚#y–ĄqĻV.ī™ÜéØųfĢ>8Ô355Ņžb¨/lwõĻČ'lÚ0ąm¸\.7"oE÷ääãImjŦ§RĘۅ‰‘QËÉį]>1ēŗZÍŲŸ\ˇmh<đ#)%dâ8 ËĨühmē’īq›íиâY'S*äfff4Î y‹ëŧĶnQT­T4ŨlÔTY$„}Jų#íI0(†H$ŒûBIQ%å Œ!U%ĶĪŖB,30ēÚŽ0ôBÆĖÖ§'MۚL ˛ŲŦĄ”.#χĄô¤g„‘ĪéQŌė4ëP XlؚāNr)åčČpĩTԀŦez­Z>oH6^č Į.ÆI"ô¸ŲšétÂJ×PäŠ=•ˇŲ:qŠPUąyF§ÉZõĀąõПÖXĶPn^ˇÚSîúe‡ĩÆ][–ˍÄ;ļ™`*)B”ĖâÔîąJ.g(áĩ[REšŦmrV›˜°3–tD’ĝטa[ŗdČõĻ•q¤B'Ąf‰„ëy†mģaŨpƒ0bŠëZ$×4Ãtڝ8oÃV`0+΄MˇŖ›ļĐõ(息,ÛČIa+0…ÉŊBȉ 0„‚ûí íë"MŌ‚Í-ĐڎĄ–LĖ0 l;›Ā\ōl’LXb|ĖyȒ|ɆÁ0Á¤ŠޏĖÚF§>›a9m™CYŲ†o7K•ŧÍ3Z+W*îąĖ‚bZ!_1ôv’$RĘ\>ã-€ēÅ4'ŒāĄf˜Q¯XšļŅhLNÎ,_žb˖-–evwWâXz^ģãy–ed3]I’p&˛Y3ŽÚ×k5ZCũ+žx⁁CtÕf]M3‚NÔi7 Í`Š÷öô×[Í*rîh™îÆH`Žŗi~ž¨ŅI.ŪáŲWsaû¯Å<­CjņÎRzõ´ËpHų\W „B žō'!-¸*š(˙I .ĨĀ4$PZļåņŒ•ĪdōaCƒ4Ō.›įũ$X H(ŽØķRH—Į0 í:Đņļļf;ˇ5-yāĮĩ\Áqōšš;֘Ü^.TĢ}+"Ĩŧ)a5;L×ō}CfŗŲpœ ƒĨéĻĻĖÔ\3 4Íjšqĸx˙˛ęŪṨ&5ÍJd,r;~ŗé,ŸŽÍÆÉD>_œkôtĩÚ-Ŗ!‡‡gģ*…ŲÖtu Č9fÜąZ}rhpYŪŦÖk­(ŒtÍjĩánOw.[0“ČžŽ5—­ōüv§Ķ˛2šbąØhNyn=_ĘîŨS록Ir…<ÍžN!„Yŗ3ĨDčÃãSM/ĖWēcĻOĖļJŨũ!x­ŲŽFFGŗE§æ$zkxj †ÃzĪ{ōŨī˙f÷ŪļëëŲ Í.ųĘ™g:‘p ۉaÆĖZŊnëŽŊŲRwĻXių 32šŽnfXOíØ›Ų|>Ûl)F/š„Bū¨OČĄâŲĸ9Ü!ž$ˆ#?zJldŌĢrą‡;Ėį!X´ä>xĖ7h/iy M%ļÛ´ē Ėm(Îė8bŌh–ĘÛŲ‘ŖēU:Ũסiŧ>[oZŽéІ Ũdž1SēÅ$r ŲLV˜švЊZŗBŠ ;[ÍA‘DŌÎår…ŽŨÃ{ûû‡fgk^ĐļĮ6â$ōÜ@S˛Pq ŖšÉ•c5Ûi5§g‘Νąŗũą[ŗŗCõÆl͝*”ŒHŲŗÍ¤”­¸íD%šßŒû‡Öė,×]œšž˜šu3š\ą‹)a„QÔņÁūå^­FO@B!”ā !ŋGˆį` ]4ÜrlÅ0VS—žįn:CŦ.ü´´H aH–xiS!”MLЀLÆNˆF'ŠG—uĒų˛mÛŨo™šęš;ˇ=†îžû^r΋ęm˜Ųr&W’@ŗ]ÃãwëžmģpÍuãĻĮ> /}Íϕ̗ ÍáÂČ2W\ųåÍOāŠ­čéÃi§áœ×ŧėûoüüÆß´wīļÃúģķöŋáÆÚõםė›˙ū‹›ož-æąwũ3;Ķ™ĀåW<|Ã×^ĩoŋhMØ7ßú‹ĮŦ]‹‹ūęėžūŪÚLđÉOŪqė ėŪ{•JāupíŪxõ5ˇüâ—(•°n-ūņ/–Ídbr&ĢkÔ O!„˙Ŋß>5|ØúUO=ĩsd¤~Âņ¨5\ÃĖŨxĶėg>ũ—ĨÂ2;ƒ§vüpppđ‰Gž~îëÎŪtbÖ0 éįŽšúډY\ųéķšĒ|ņ‹_¸ö‹?úĀ?žŠPčÛš­Žzį;XwÅ_ũëŋžåÅ/×\ûâ;v\öū­¯>gkĩ'“Í–¸ O!„wÕĪ—¯ÆÉ§U^ú’s:^pöKÎŧâS?yû[­ŸũäÁjGlXŸ+°á‘=˙øūõ7Ũüä­_ũĢ}ø‹7­ÜtėņĐtdŦĖčĨÛd`øĢ ŋæäĄ‚Chh7Û#ĒĪ \,æ3yŸąŅáŅĄ~D~ä8ÂķŧūxŽqÆŊâBĄOųũ|š×ŸžÍ%ĀÁŌiãyzI ĪQ¤g ´ô 4(Ą KpĨäķŽ:SšLh94€‹:QäĢŲŲēådWŽ\šgī.īÄcŽņŨ~kwcÕRÎ1úLėšSĻVŨŗ@WÉĘfœV}äå/{ņK˙G”ÕÕŽíã•rcuŊķos ĸ‡ũčõ׏ŋäÅqš+[­#“Ÿ<üĢ-÷ũlōØãŒV{2›-į˛ÎÚĩÕĪ_uôähį{ß˙ū5WīüŌ—NTA;ĒMˇŖ08`ōøÄåĮžqeģ5ę‹g{ē—MOzåz÷ėŪ^* šqũŊ÷îå,aJ“q"ÎŖ0´|!„?šÚŒCųĪ?ũšk^ßO‹ļ{Ž/!Á49˙Īô´4˜4Ąô%‰-bG$ļP`Jq)˜LI†°§ˇ'>ĶČôTņŖ>°kĮ”ÎíŸÜķ īÁ`‘­ĮY,i=•bÖÆėĖpŖ>Äą`ņÄÄn¨ä°5ĢkS“÷Ũû“WvXŋë6ģĘ`<Ē5ƓČ{ũë–]sõwīÆk^ķ˛l†yæđÎ]ģļđDT˕žŽĒīĸĶč” č´fKų˛Ŗ;]Åâq/Ā-7>ŧmķ.ŋf įÉ' Ŋ:WžÛĀȞ­Ĩŧ™sÄŪŨÛÜ: YS ˛ ֜Ew9ĪeāX&Wâ !„üP žC‡œ[9—ãįzâĶø.ÁæbũâÕV÷÷ÀÍ_OĐĄÁXâÖ(C"æR ÅDœĘæšĪŽW CzdŠ$û÷īyĶmw}ķ#žÁĐąnØē9 šSÂĐ#ˆf*ÅŒŽėšāüu×}áŠoßtÛqĮā]—ŨßW‚ŠĻ'Ggσũpëį¯ŲĒŲ(”ņœF Mđ]ģļŧáüsoŧá3'‹r1Ģ 7 }Dė–/îøĐe;ĒyKøčNYˇjÙ§?y×][žúĩ6Ŋ—ŧë‚7ŧîŪyם×ūķCOnFšˆã^ˆõĢŗû¨āĘíŽXqč™Z☈ƒzŪÖ"ßĪ9hÖÆ›ĩ\)_ " Ęđ„BūÛcL)Ĩ”ĮąĻiRJΊ6OČÁFAJ$8ŸÖĶ1—ÄtåsŗÔ¨škîg6%Á8’Bƒ)Dōį߸0ŖF—ē=ŒC‰XDY‰žw‡¸„īŒÄš'îhyŠÉŲģáŦĮˇlļĩ1Į”§Ōiĩûė™zmĸ‰bžhûõLΙâ8âƒvOģ=kt%ãŗ{ËvQ†GQ*ĨŒŽ•×ÍNĻPZž. Mˇũõ…_~÷ģ]ŋĻ”/(&=Æķ×eY=š|æ‰ÍTē3JEÕîĘčč^ËքË×n~bÛāāĐđžą0P+–W]o›Ž'2Ę´Û-Žw4{m6Đŋē^¯ÛŽ˜­īą,' íjĩG‘Ņ]YĶūz>03ķR'XųŠs¯ö€fŦĀ 8€PLéû} ôÉ-9hpÎ÷›Ō‘1@)•~‹î.ō§†ž”„RäĸŒūôú:S‹ēh°šnøũ&xŠ8gˆ×8Įąbæ.õí3mČ>MĻl†€#íĸILCs[3ŊÅj.I†G~•/%ũÕ$ôš,˛2&Įv9Ųė˛ÁŽ$TŽ0›õŲū•ƒ““ÍfcF×f!ÉØļīšĻi™šüŽ=OŲyL͌/[qØÔø¸Æ‹ˇŪz{O/VŽč*æ ĻÆQ+–cÅĒōƒÉ-;ĮV6´|ŋSĢOæōšZŖŅøíÖŨŨũ•GŸ¸cũúõ–eŒŽÜŸw $šŠ…Ū|Į÷…ÆÂļų5Žŧ VË€GœmßōxĨÛ,åė(””€ !„üvAé. äPĸ§ĮĻ2,ęai žÍW ­Ä.îĸyÎqnO@ĨkDÍí,í‹Å`!X”đ$‘-đļP\$"Œ3#ڝįącwōš`ĪŪ-‰ô=¯VČ*ICėģ“cģ”’š|fdx‡@`ŲBĶeĐiēP‰lwš ž„×Ē×z*]Ĩ‚SÎ;3cŖ–ŋxíÜ_pūĀĐ@Arj|Ėq,%ƒúėnÎkŊŊē׃jÆaĶ4bÎ<Ž ˜7˛ ƒŠ“OÚ0>ļšŅØYîIâi\ByS{Ũæl>ãt•r^gÖԕÆU}vIŦ‰dh Ēqų=˙!„üAP !‡Š…ûܲ 1ƒ% ˆ -Œ`ëŧČ1ôЇaâšf0=ķ-!*FWWoŌžøĪ;ߘŎĨžú@j‚‡Â›PõR.ŸĢs34uŗ8îNŗ|Ā ˛Pš¯‡ąH$WœK!$įˆ% ˜@H2á¸HÉ#Å&Åž"…âŠĮ`É\ĮžŌ 0ÉĶ”ŌŲxÔÂíUėéŎ´ņ?Ũq™û°‚)5˙K@-ô™,Z~Ô˙ŠM¨‹†⨋†ĐčIIČ!–â°ôxJ>V€ŽC‡ëĩŗf&đ`ß‚÷ŊH34p ĨŽķz{ĻjA)Ĩ–ŧh‘‚đÚReŗšm&\›mė-ą,XŠRė™Rà R @*@ŲPW2?GI’-äj)ų|°– s`ÎoË Äüšņ\žVûv& ÄܧĪy¤éâžŖũÍąŠžūK÷åuų§–Ũ !„P‚'„PŌ€Í§WŽŽkųVÛĢ4ĀĻÉŖhŽxüô0ë0‰83Y(=î0(#]Ōu‰Ū°xqÖ}Âčéļ+Ffr"hÎ4Pf E1ŠöĩßB!”ā !‡Z|ÚŦā~čįœ€JÁfĨßäz\›Ÿ'ū™ĮąēA[×5“[ `õvMØđ;h&]Ņ’ŧ&ĩœČ M:Ž5ŧwĢmŗŽ;-Ĩ•¯ëhs$@Ú ŋ°Íß !„Jđ„ĸä3ŧm8nģ™ËV s‰œ…ă\ fû™‹ÆļĖ0 d@ĄXĘ&M˜&Î|ÍÕlÉa)”ÔĘEÜųų× uôf8Ŗ4.į*îû*ņ„BĄOČĄœāųü´î˛™Ŧ†˜%(å´a(ÄķGq.Ĩp@é6QÍíĪĸéūnÍۚrYLģ¨Õ!ôÂTmRĶ4f?#­ķšo!„B žC“š;ūs_DVQŦd,‹ãļ[>Ā“ņŪRąŨ˜NT"šä ’aņhfGq*Î2–đƸ×vsē&ÔR{]¤˛TÆëüĪßue\ä‹yˇ]ׄ’LŠųĪ”Æ8„dôĐB!”ā 9$ą´§|_ æL3˜ŌŌyáUT/dãŲņÍ]Y đĸgWáÃNܓ˄,C_‹ĸŠONN¯éī‹ZSLŠg×ė÷;†ČĪŧgpƒĀP\ #nĪÔJĨ „äPúÜú¯jnūB!„ŧKĘņ„BHŠjđ„j!Āâŧb W€ap X(@ˇÖpŨf›āHb 0øtĮË\1Mą%ŽĨTĸāK;&Jƒbžßļ-KÍ/5ĩč÷ÍÕä !„B žC[”ČĶš` 8¤„d€‚d€´}ŗ62ā92x h1᐀B3$LIĻ07åķ,žĢęĢt]X Ļļ‘+ļp¸­¤øN!„P‚'äÎņķ9­ss‹æĻIĶ}Úž"Ķ|­Ōrũâ‘K ŽD,Ą) ibxB!„틧ÃY !„ę.%äPĮžuúéį(@íwdrߨšū0ŽØRFÎĻS` Lq&“l_|_xÁRéČiüīLqĻ„Z盯°čSh€H?˜ü¯&%„ō˙;ĒÁríą3ûē\ø~âûŗÂũsUŊ™c`jūsO*Ļæ&™ūQ2„<GĨ3žķg˜Z8­@q0˙0#מ0S“Xô8JHžNĘĸEš ?!BĄOų#„øũ…ņ?Ė– Ÿ[Ûõw‘üWßL'—|晒Æ˙ū˜–á9Ā”|æĶBÍā<ŋ.Ÿŗ m !„Žã\. ĀöĩN4ãL­^é*@"-CPR ‘đíb 1čļVp˛ąLsq|_Ü O4„B žrĀĘfŗa‚ —ËÍ5‰JhXÔmqé)“Vl(ÆæMļ˛å\Ū0ãfd8ú}ģT f Ö莊["”ž­™ ‡ąĻâ`\BÔBC!”ā !¨8ŽÃ0Ėfŗ†a¤‡yEQ¤k:âƒķöļëÍL!/Ā$’l9 lyFÎ>āwW8Ā‘+;DĻÆCŲF”8FöYī”Ũ !„ˇƁ§wĒĀB%xBČūÂĄiLĶÄBõ8ˆ×‘āOįXdāĻn1pqPė¯dėŦ‚´y€ k˛˛ųĪĀ0wĖ+Õâ !„–ļÃ?ëÜįū!„?2úh”B!„Jđ„B!„Jđ„B!„Jđ„B!„P‚'„B!„P‚'„B!„P‚'„B!„ûÃūpEa*Ĩ’$éęęúÆ7ž‘^,ŨæTēĩA,žéÅęõēRjá–Ļøõ¯],Ķ {ėą_ųĘWŌ{I)•Ū3 ›n€fŗ™žˆĸ(ŊĸRJ)uꊧ2ÆLĶÔ4-ŸĪŋęU¯zŅ‹^tÛmˇĨŪ´iĶ—žôĨ…;vAŖŅ §1!„đĀœķvģmÛļR*‰šĻyž—ÉdL͜˜˜xF>žwīŪģīžûâ‹/>î¸ã’$ņ}ßqœRŠdYVēįŪüVĢU(čiLĄO!‡ß÷?úŅž{ũėg×ŦYcYÖÆ/ŋüōŗÎ:ĢĶéøž˙ĘWž˛ŋŋ˙¤“NēôŌKĶ@ P(ÜrË-'žx↠~ųË_Ž]vŲeũũũÕjõĪ˙üΎmÛÆB0ƍFņĨ”RJĶ4ËåōņĮĮw¤uqÛļã8.•J>úhˆīŋ˙~!D6›Õ4íđÃ˙Úמvâ‰':ŽsĖ1Į´ÛíkŽšfpppåʕ_øÂŌhžnŨēüãgœqÆi§vÔQG=öØcœsÎy†iĖÕ4ͲŦ(Š<Ī3 @ĩZmŊšĻMOO_uÕU§Ÿ~zĩZ=ūøã?øÁFQdšfŊ^_ŋ~ũ‡>ôĄ—ŋüå6lxŲË^vĪ=÷´ÛmÎųÄÄÄßøÆrš| 'Ü|ķÍŲl6MöaĻûi^?˙üķ{{{7mÚtá…îÚĩ̎ˇˇģģû͟ūôi§vöŲg/ÜŪ4ߘ™™1 ŖŋŋŋRŠ˜ĻŠ”úüį?Ī=÷!,ËSJEQÄģøâ‹×ŦYS(.šäĪķ&''é™LĄO!‡Š'žxb˖-īz×ģâ8žœœLËێã(ĨĮ9÷Üs‹Åâũ÷ß˙͟ūtĪž=ī|į;$I˛nŨēëŽģîîģīŪŧyķgœqéĨ—>øāƒ;wîéīī˙ûßßnˇ]×õ}ŋP(0ƒ$)—ËårŲ÷ũ4Đûž˙ŠWŧâ—ŋüe’$šĻ•J%Ƙëēív{pp°ĢĢË÷}Îųäääį>÷šĢ¯žzzzzíÚĩ'Ÿ|rÛļmûÄ'>qéĨ—§Ĩņ¯ũëßūöˇīģīžwŋûŨ¯{ŨëŌ0­ëzš×Ĩ”BˆL&cÛöĖĖ Ë˛<ĪPŠTēēēŽšæšŠŠŠë¯ŋūæ›ožëŽģî„ī}ī{ˇŨvۖ-[^ôĸ]y啙L&ŽãsĪ=×4͇~øŽģîzôŅGĶ#cēŽ7 !ÄÔÔÔ%—\ĸiÚŽ]ģvîÜiÛö{ßûŪ ošå–o}ë[<ōȆ ŌūŸ´‰Č˛ŦjĩAúi€išŒą(Š …Bڍ3000::ĒëúĢ^õĒFŖņã˙¸VĢApŪyįuwwĶ3™rāI‹égĻi[áÂG¨„B^Ķ×Ė…—JĨÔŊ÷Ūë8ÎôôtúOß÷Ķnoß÷7oۜËåFGGĶoŨ~ûíĻiÆqŦ”ZŊzõM7Ũ”ļzðÕjMOO lŨē5ŊV†A´Ûí“N:éƒü`zfŖŅPJ}÷ģßMŖvŊ^īëëûöˇŋ~÷?øã8I’Ôjĩ3Î8ãúë¯O[tnģí6Ã0ÚíöB×ø­ˇŪĒ”ęęęēá†fggĶķ{{{ĶķZq”R‡~8€ŽŽŽ7Z–ÕßߟÍfŋō•¯<ûũâ-oyËßũŨßĨŋeũúõŸûÜįŌžũčG…BĄĶé<ōČ#ēŽ/lÆŋøEÃ0ŌĶ7nŧíļ۔RÛˇogŒ A ”ÚŊ{ˇŽë“““ëÖ­ģņÆ[­VĶ?4JŠŖŽ: Āʕ+ŗŲlŠTúÅ/~qōÉ'ßzë­iŅÆŋķīėØąC×õŠŠ)ĨTĢÕJHËķäô\ųįšūŪ ų“ĸŅ> !„ü~˛Ųl§ĶŲŊ{w.—‹ãØqMĶ\×ĩm{||ŧĶéär9­Vëä“Oļ,kxxxŊžįĨĨtË˛Ō´zėąĮ +ĨšÍfÚqŪnˇĶB¸aŽãAāûžeYų|Ūķ<Īķ,Ë✧øđÃoˇÛ™LĻP((Ĩ8įÅbqddĀBƒûĒUĢĮYhCO‹čŲlÖļí´^J900`šfŖŅČįķéG V¯^ũÚמöâ‹/n6›…BĄÕj]pÁãããéŋũöÛ¯ŧōĘĮ|ųōåĮwœã8333ēŽ÷ôôp]÷„Nh6›i‘bĄįčŖ.—ËI’4l6Ûjĩ”R###éáŗéLzˆđØØXZ§Īfŗié==H€s.Ĩ ÃpõęÕ/{ŲËŪöļˇåršvģŨßߟķšļåd2™­[ˇ†EŅ‘G™~ŒP(6†B,”ā !ä÷´iĶĻ•+WŪu×]ĮsLš9įŲlV)uä‘GĻÅī´ũĄ‡j4+VŦˆĸ¨§§§\.ģŽë8NĨRą,k˖-Ad2™´ $I’$i€Žĸ(‚8Žķų|zœ¨įyļm˙Ķ?ũĶ _øÂ0 ĮŲ°aÃ}÷Ũ÷æ7ŋ9-NØŗgΞe˒$)‹éĻŽ …éééJĨĸ”jˇÛ}}}é^Įč訔2 ÷ÃÃÃiķ æC Ãp||üˆ#Žčīī_ž|yúĶvíÚ500`jjęŧķÎ{ōÉ'ûûûķųü{Ūķž'žx"-ØOMMĨģ"Bˆfŗ™~4‘¨šn¤išģwīžšš’R–Ëe]×sšcŦT*x衇˛Ųl’$ív;—ËšŽkšfzßĻĮ­.< œsĨÔÔÔÔúõë—/_ÎĢT*éīîüėŨģ÷°ÃÛ¸q#€Í›7—JĨ8ŽĶY˜Ü†B ÔO!ŋ§$IŽŋūú}ėcûØĮfffĸ(zä‘GŪúÖˇ>đĀēŽŸuÖY]tQ:Ë{ŪķžK.š$]×Ķ8›ÍfÃ0<âˆ#N9唋/žØ÷}Ã0fggī¸ãÎyzLgĮēŽg2™4Čv:VĢĩ{÷î‹/žøŅGŊęĒĢ,ËjĩZ+VŦxėąĮŌMz˙ûß_(–-[E‘mۚĻu:FŖąqãÆZ­VŠTŌwNGĶ´8Ž?ķ™Ī<õÔSívûōË/ÃđŧķÎK÷ciÉ_Ķ´´ūĮqĮaVĢU)e:šMz~>ŸßącĮmˇŨļlŲ˛tÆĖîîîtöÆô“ Ķ4MĶ\ĩjÕqĮ÷ŠO}*íŽųÜį>W*•t]—RĻQŪķŧÃ?üĸ‹.zĶ›Ūôøã !<Īûú×ŋžVփ HķÅüĖ•ĶĶĶlۖRFQôŲģķh[ĪēNđßßķ<ī´į3wĘMr“˜ËdD€hĨ%ĸR8kKĢe[ˆ­8tIÛ*¸VĢŦ.))§U؅­RŠâČ b!Ō (`0!$$ÜäįžqĪûŸĄ˙xÎŲ÷ÜäŪܓ^@n¸ŋĪ:ŧėģĪ>ûŧį=;û|÷o˙Ūß#„đĮÍĶl6ķŽĻ”Ō‰'“Éâââ›ßüæšššN§ķŠWŧ"‚{îšįĻ›nĒĒĒŲlūø˙ø=QĪcO#DDĶŅŋū]E˙Tȇ†1Æ<˙Ŧ8=īmڀņxū8Ĩ”ŋ™¯ĻO?[EE›››Ķų'ŨnwvvÖĄ”rúôë{ģ}ēm4UUųnßė>}åØßáôË}Ŗ<€ņxėûÅũũOo6Ũķ˛,}˙÷ 7ÜđļˇŊ͡éwģŨZ­Įņôŗū~FŖ‘ŋúũ~§ĶFžÅ?MSĶĶ4q÷ĒĒ ‚Āī’o}‰ĸȇøéūxü>_îøû[úīčŪũˇ™Éé.=Ūc~qū<`žEsÍōũWĪ?˙īą§ōˇ€1Æū'{_™žÖq}áÜî ö§L?(]kŊ¸¸8]˛tšö§|!Žc)ĨŖAL×HĐjĩŌ4õũ!ūŦV˙|.ËŌ‡ŗŗŗ~ēĸÚčŋŅöööôôÍ<ĪĢNJãx<7›ÍĮļŖ(ōeū$I|Ūß Ųlî_*u8Öjĩ$IĻĢĀú—“ÉÄß~}}Ũ—Ã}—Ë´HT–eĮƒÁ MSßõ>=°išN&“éŲĶģŠãØ×éąo}Ųáp8;;ëwŠVĢåy>}a4ųŸē( _› ž' Cß1Īcœācėšy‹ņMՓɤĒ*Ÿ€}Äôŧiī‡ī0ņšßO–œ››ķ>{"ōIˆ|ÖôY܉1fZĨ&"ŸÂ“$ņŅVkí͆žuŪįT>Ēú[úËū5Āüüüt(ÍtŽÂž ßOcôëļú”ŦĩŨnwú“EŅh4|'Ėt÷Â0ôåv˙’cyyšÛíú3YĨ”A¤ięW ívģVĢĮckí4˛ûæXzŊ^Ŋ^ä‘G|§ģŋĪ<ĪëõēņūPø%¨†ÃaĮÍfs4ųÖĨÔÆÆ†?°Bˆvģ폃Ÿ'Č]4Œą§#îĸaŒą+¸ÜģꞸë×OŪØGmß?ŗŋīŗŠ”Ōˇ—`¯•Å'ī0 Ĩ”yî>OgWč÷ûĩZÍŗ}ĮÎūˇø}› ölü"PRJŸ_ũHĮũŊãūĢʲĖķŧVĢųŸĨĒĒéÎL÷vzKŋĪū­†é§|÷;PUU§ĶņûÜëõÚíļŋ+?Egú}ũú~˜ũ-4ūĩÍt'}~ēžIÆZKDDäģzö´nˇëSģ˙ëæO–R>æÜãÛ~Ø5ø œģh'xÆģæü4˛û$}ÉgN?‹ÆO.āĪ(mĩZžĢÛWͧŊėžôîÃô4ÅúĻ‘ | öõsO/dY&„ˆĸČ9×ëõ|Gø4Í{ūĖÎé ˙-ˆhmmmeeÅ˙-˜žęē˙§ķgĻúĒšËÆß&4ũ}ˇÁā/û™•>—īo| ĩZ-ŋ\Ôū>ūzŊîķú´Æī˙`0đS&ũˀũ/'üqđŊCQíyā›yü/n4ų×ûĀûˇö%Æ ž<ãĪc_Î >ĪķũÍîĶJš¯û°8ũÛ?í!ņˇņĢ&ųN•˛,…išîŸlč§":įĻhéūŠÛ§œîĀôŲ;˲˛,Ûíļ°ƒÁ`Z¨öŲũ1åpŋ’”1fvvVkí'ÉLw5Īs˙bzËéĀxŋ˙ĶŦ?ŊėģnˆH)5ÍÜūĨŽĐūGđąÛÕôTÔũʲLĶÔī|–e~ĀĨ?ūEQøŗ|īÍôՎ?>ûß7˜L&ZkŋĪĶÃ8í\bœā9Á3NđŒ1v %x˙OßŅ1Â>OŸE÷÷„øÂ°ʝŪ`:;eZQžv¤LMĶęô?ŒŌ×ėL{Züėīņwî§Įø˜Fm˙ƒL 毘˛,“$ņ×gYæoėOĀõąŪīƒŋŸé—K)§UöŅhEŅ´Îí˙¸ø/ô­2ūn§9Éwųžx¨}wĐczĻ?‘īâ1HūĮÜ?…Æ_ŋ˙]ˆũ%˙ũwëģqøAÎ ž<ãĪc×J‚gŒq‚gė)xķ!`Œ1ÆcŒŒ1ÆcŒq‚gŒ1ÆcŒq‚gŒ1ÆcŒ<ÆcŒ1Æ8Á3ÆcŒ1Æ8Á3ÆcŒ1Æ žcŒyZë˛,ũåņxė/äy.„ĐZH’¤Ûí*ĨŠĸđŸõˇ/ËŌ_0ÆđadŒ1Æ ž1ÆžD”RafYV–ĨRjvv–ˆVWW‰¨Ķ鸈øđa"Z\\$"!MĶ0 Ã04ÆXkĢĒâ#ÉcŒÁgYĻ”JĶ@ģŨ ū ûũž”Ō9FÆc_TŠcŒyUUÕëuk­B)å/‚ ‚˛,­ĩQÅq< Z­Ö`0pÎų¯ít:Zë0 ķ<ã˜&cŒą/ŽÁ3ÆØ._>ĮY– ĸ$Ięõzžįyž'IŌjĩŠĸđu÷ápĀ9ˇļļæ;g”RÆŽīŒ1Æ8Á3ÆØ—ČÖÖ€VĢ•$‰ĩv4eY6™LÂ00™L|ķ ---ų/ņōž?™L¤”ĶsacŒ1NđŒ1öÅĩ°°0Ō4ÕZ !šÍĻsŽ^¯k­Ûí6­uEʍ ˙O?˛ÆZ›įyŊ^wÎų¸ĪcŒq‚gŒą/ē4M›Ífū4Vįœĩv2™Xkƒ(ŠB)EDAH)ũ•qGQä3ũtĐ$cŒ1Æ ž1Æž¸|÷­2FƒˆÆãqŗŲ†Ąo• ÃĐ׿}ī{Ŋ^ß˙ĩAø(ĪcŒq‚gŒą/ē$Iø¤ÖēÕj={€RĘĮú˛,{ŊŪūEcŒ1NđŒ1öÔ(ŠÂ9įoōŠ}<ˇZ­éxŋ2kŗŲ´Örŋ;cŒ1NđŒ1ö›öĩoooû°.„(ËŌ_įyĢՍFÖÚ镌1Æ'xÆ{jøîƘųųy!„ÖēVĢųø8Žũ8š4M>œĻŠīĢaŒ1Æ8Á3ÆØSÉΟ „đë: ƒĸ(ō<ŌĢ2 IDATĮGŽŅZ¯¯¯‡ačįH2Æc_zDDÎ9æ–Öz˙BâŒ1v *ËŌŖ”ōK´ú§Dß] Žã<Īũs&cėéKqÉüŗ˙?yįœ˙.vĩá%cė)d¯ĒŊ™L&õz= •ÖPJv<7 Ā:gˆd‡yž;gĘ2ŋúÎdØ˙˛‚*p@ū@[_›!Nė]bŒ1Æ ž1Æ.c<ûé鞸ĨuŠÔÕõv_ŊžøJ ĄŅ¨ļ,Š0Š…"/“XéĒÚJHyU%xį0ĄY,ƂdĨ°Ōg{Kp$8ėvQrˆgŒ1NđŒ1öxeYJ)†s.˲Z­ļššš¸¸gžûFÉh8ÔJ‰VĢ“ĻyĢ āĒęĨq  Ų€) d%ĸ1 Ų*5œÜ_wíė9ž3ÆØĶ÷Á3ÆžƒŸå (ŠĨĨĨÁ`DOŸ“ég:3Ŋ~oúĪ(ŒŠōęZŅI@K Q–ˆ"T€1НÂõ,h‚S +āÁ!ž]ģ¸ž=­ņƒ’1öĨāûgŠĸ‚ ŠĸŅh$acXųtØy¨lĢ4ëMĨŽ öj;•@  ŅĀ V=’€ÛŨYÄc;æcŒq‚gŒąĮčvģŗŗŗĸ(e™ĩ6!üÍģ_cđMįWīVŠp<Ļiž´´ ĩ )„‡J…WĪ~‚ ƒá¤œíįè‘mî¸īúÎßM6$ŦŲŊ%„ˆKīŒ1Æ ž1ƞ€īŖŅHJYĢՒ$BkCŦ'8KŽp5oC**o:´°Ũ=ÕÂÍí­…šyƒ4pęęŲOMPq+”FÖ_ÂpžĩŦ HĀOĄ1ü@dŒ1NđŒ1v@ž‘´Ųlú–ĶĒĒvWM"RW‚Ī‹JÁįúüÜâÂNˇėø [ë*НĒũ”BˇãvœëĻ3_nw •Ũ ÜHÃcœācėōO4JųQë“ɤŅhø•’„€vÖ:k8\Í[(cĖĄŖGļļļæ—×××ũénWÕ~ [ÕC›$4Ú>k*Ô¨JX8!hZƒ÷3øŸÃĘcœācė‰$I Žãé5ÎA’‘¨ž{ī ŌqˇžČ<íĮĄĪÁW×rTD&€DVÆÔŠkažæąŒvŸâũúMģ;l€ Ā“ĮcŒ]č€ @î ĸáķYcŒō˙{˙—莞x+œ e-H€Ā*@™HšÆwÅAÂÅÎå #Á‘uF¸Î*GFg֕Ą ™ĀDÎÕAÁ¤(Ĩ$‚d<ždƒá8ĸ@ÍÖk0Œ‹ĸÜØėKå–VĒŪöÎ`ĮĩGNm­ŦŦ´Z­ŗįN'ĩ† ’ååë‹ŧėē3ŗŦ(‹ŌĨØØé*‡g‚7¸Å¸á™ĶëJĸDĄŲl Ē´ÕŽ“”‡WŽZ3ãĒČäUw”BQģŊj Ĩ" ëƒŅ¤ßëˇífį•iĒsŠdģ-ΟYo5k$ĒÁ`Ŗ¨tR›UT÷m(’ Ļĸ‰e ĩU!pĄã‡,cŒq‚gŒ]ģđ ߸dĮÅŪl“ĮwÉ_rKû¯ņ9âÉŧ¨ bį˛A€t`-\T ]’BĸJUAĒö\mcįlU™ÖL{>äei(HēÃą”…”˛Öj9Ę×ģįAUģŨÎ2ˇŧz}ŖŠĪ­­gå$nΎG=&ģãןČĘĪįZ/,t33?xæĻOF.˜Œ†ãIo§×+ËŪĖėr§~ũçÎĖ/)Ą’™zŊГá Mļ%ČYc›ĩúÎÎNĒŦ*¨åCĮōI^dÅų­Hę,Īia×Ξ><ŗ ËÂÂĩ›‹JŠqZXgįg†ÖÚhg#įāÁY~Đ2ÆØ5‚ģhc—}~ ‚ĸŊėŊ÷a÷wĩۘá.¤ū'j„Ųģ`hi´,ú!Ŧ&a×tļ&Ŧ hå åʐt$e@°Úš-J2ļfė 7E˜Gu—WÃî`}’÷œ(œ¨fZ3ķMKeo¸a)Ÿ™Oę-YšÔō͟ũüŋúÖß{č‘ū(Įŋū=Ÿøô}ŖÂÅõÕWžú7ūúß ęskÛŨ3ŨZëĐÆvņđ#į­“RÅÆæė8­ÎœÛZX<Ōäi ĨZÚDíÎj§s$gBRŽŗØj"ĶŲ(…õX&!byjíŅÍÁĻQzvą]k'ũq˜æ–H&ĩhŅ”M›§*Šíē[ŊûzãĪNōsUUÁքëm[T•áÆvÆģFp ž1v@Jŧ{qũq%ēl‡-  Aœ( r‘ŊâÖ hŠ,¤„V$´˛†á’$+Xm*H‘$¤°NŒÆqsfÖØŦßßŗ ]Ų­­ BT¯ĩ´ŗqŖÔ›ãɰÛFI´¸˛DRļfŅëÛZkéΗČëoųŠ…ĨÃeÚY;CĮníöŗ™ųާí摝ÁōŌŅĩķ§W–fÛŨ3Ąjʰ9WõæRĄ'“R”U¤%lmg+++ŖņŲņÖ07UáąëoMĶt”–!‰öėJ„ƒ^ãėVŌjčf [Ņ_īŽ.ŽÄI*¨Ŧîõ‡Ö‰ÅÅ#YVĀÂ$ÖĸЕ Ģ” ‚¤BÅž1Æ8Á3ÆŽmĶĘ:,`÷uiáãûn?Œ…s Ōú2īėY‚´„ë € ĄNX˛WÜj™é`Į´&q…ƒ…Mā¤.EČ9™‹ØRb“ĩõķՍ‡ū‡|đŸŪ÷íôđü¯ÆËžá9GŽ.Ī-ĖŠ"C(ZI<û‰?ø_˙¯ øĻo>ō5w¯ÖëÍĶgAĒ]õᏚųÕΧš:´xĮÜîŊ˙‘ˇüęéĶkxöŗņCß.ÍÚæ˙ņ­*Œ2ä%ží[įĶÁÚo˙öįū<÷öā{žį;,&k›ƒ_úĨŋ:vL=xŸ– 3 čņ†˙íUR†ĩøč#œzãūō—˙Ķ7Ŧ,úũw~āūĪâö„_}į >ŧ´:›Ļ;ÅĖBû‘Ķ›oûß?ônŽēûî—'ĩ ŲtA˜“ĘĩÍw'q~gŒ1NđŒ1Nđ>ÁīM’Üũ÷žęģ†s@  D—ː~Đ9ÁŌ^-ß)-ĀY"ápå­Ļĸ¤œPĻCÖĸ g$D@"6ÖhS Üg?ˇ~Ī=?ņŽĪ´¸ũyáwŋæ…7Ũ˛ZęÁÆæ@QäUž™?û“˙ūŪ÷`y /ũš…Ûn{Ū 'Ž õZVV‡õ‡mŅŒ^üâ›ĘqœæøŖwŸūš_xÉŗn[yË[~˙§ßđūˇŋíuB…÷=ˆgœÄũČ VˇĶŸų§ū˙įŨrrõOūüŨŋķÛŸ8ų™o\]9rËįĪüUo áį_~øđüæÎđģūĮw÷Gų‘#Į’¨öŽ?|ûW߉0ŠkÍÖw|įŋ|ôėŲ}äo|ĶoÔđōģ:/~ŅķÚ3áŖkۋĢĮô§Žûȇīųä?~ö‡^÷'ˇ|^ô™gå ++í0Ē[mŒ-„Äį˛2Æ'xÆØĩßũ˛”tژ8”C(ā,ę!&% 땨¯„G¸ķŋFĶU“Ž´åP#Ā"Ū˙'ß^”ļcY)Yë&q; Âå÷üå?˙Öī<\Üų’åŸūŲ…ÛŸw}žRŨūNÄs¯øĶ?yßģŪuÚ|åmxķŋ˙ęåՖ Ģ(Îĩx0 b‚P–åÂÂÂÆ—wvvęÁ’sxų7^wã 7 k˙æ‡^ũ—ūŽOŨķΎßvkkĪyŪJknI&Ád8zîWŊ¤2bg4¸ķkŋū͟ų/˙ŠOŸüĘ[ˇã…|õķŊnn}ãÁÅÕãwŧöž÷ŧöĩß÷ĀÃ÷˙ĶŊxÃŋũŠÎĸįgŗöäü‘“ˇßđ¯-}â˙é#|āīøĀɓøž×ÜIJ4ÃįžđúįŧđĐw˙yāŗ§>øžGßņÎŧųžųUĪíˇĨÄDŌhœüäžmÜÅ0߆ÅŌŠ iL˛ļŨŗŊQknîĩ?öĒoü–ūGūîī?ņŠüŪÛņŦgāö¯x˙oũߟģîîüšÃˇ=įŲķË7›jÆÖLŒFžMÂ@ŒF[A€Ķ>øĩáŗō4 Uā,Š|ôĀũ÷ŽŽb8ęŸ={úĐĘrŋ7øĪŋōҟúÉģžūå/¸ī3˙ôgúžū h4Ĩh2Áââ"\D:@Ĩ^úĸozëzËßüõ=ũWŧō›–šZĶ⌁9}æü˙ûąāƒãsįđâáĮōĪ|Î͕)&ųFLíS§†ûč'˙æCŊ˛ÂɓøÅ˙ķš7Ũ¸Úl>ķĀĄÕŲ<į+cŒq‚gŒąŨĶXŨ^˜¤„ b t{îĐb’¨žÔ=›>× QÁ Ŋâ–`…ŗ?÷2‡¨dĐnŪęBÖUA(áŦŠÍÍÕK2“lk8IÛíúËîžõëžæ™ŲvãÃõwīīé÷ž÷ôŋ|åÂK^úUi:TJ>˛$ĮOŪr\ÉÚĮ>úņwüÎéŋøãŗß˙ƒĪ~öķnh×ŖÉÍēQTŽú¨…ŲR¸4R¸įS“GēõHëÃūđÎ&^õÍ_ŸeY`Ļ™ĖĪÔē;įÎœŲ‰ÜzķuîŪÅųæ=Ÿ*Zm,Î5zčÔō˛Q¯U[ôvĸÚ\ž/ŋ{ųīûįûÄ/ŧéåBØ0į×O˙á~čã˙ˆŖĮđ-¯:z××ŋ,õĘjĘruuūsūWå/>ũ)ŦÆŧæy7ž¸Ž3ŒF›é¤{ėĐ" lmŽÕĮ3‚cŒčõØØŒëŅwûíåĢōŲ…ųH%E> -ĪÎë2Ũ:ģ#¤nwj•đc–1Æ8Á3ÆŽqvīãĸT*ĀA (ƒ$(øˆÕ P JØč@=1ūÎÉö€ķā‹ NšĖLP ļ{q=ĢÅĸˇŌJ€‚€ˆD™gãÁ0ˆMģŅõĪĮq}ĻTĻITX›VÅ`í\vĶ Į{ũŅx˜…QM@:™ÁŅëŽZįâ8ųą˙åųRĢĢs˙ö'_ ĐâÂ2 Ūđŋ>īæ[NŒĮC!m¯×[\XÃ8g˙îį_xôøęÚú)äĸ,ā{˙Uō?ˇ ‡•žQŨšĘ"uEī7Ūúqšb;‰Ĩ!wxõČçļ˛ßúęį[“§Ų¤ž˜F#8qâPYh§ĮQ¤Úúxg§Ņ™™kÅĨ&ēPIëÔl[zŨzT'čl(œmÖH”ēĘIđ™ŦŒ1Æ ž1v-# gqŅxBá[4ˆ m ŌãfbÉ '“aŌ\5 rđfžx 8€œŲ+n•-VEŖT@3i€P–c]čVai]ĢG ]ē2ãjœÕãZ^ ō,¨×Â@†z+–õáxręĄĶĩF{qvI;›§#’&‰i8\T<õVVÚũūp4Ü>´ēx~mk2X§O>ãØéG??33“ĨŲM'Ž_[;ģŗ•Ž.JĨ6iš“hŌFOfę ŊîF{N¤i¯š ƒP ŗZŌ:´tķ ;H˜ĘÅõú?üũ'?ņŠŸq NÜps’Āj83ÜXÛh4ãZTĪ #(HĮŖšvhĒí,›EqR“ąČR5Ú“°Öēą­JPE$,™‚BÉ[ÆãĪcvoģût!Üî€ę U™F"D‘Ä”›ąEuā{–dC¸ƒ†NcI †[PU9‰k%ŠHRĸt8ŖÅdZGŽ‚@ĘP Hg`E,ƒ^o0ęUf[ŲøČōĖp<.ō ‘ĐĨÖ:Nâj8úíVŊ,u¯ģ…BØĒČ'ĒĶHB„ŌČ8X;} dVgFƒÍNģælY–Šą…ƒ%ôg:ĩÉxkĻKeųčø‘ÃišŸ;ũšų™y8Ęķ*‚ũéŸüHãGėY¨ŠtļŨj]Ž„Ŧ*Ŗ‹Ē=3“j“eãPšZ= ĸ,”•'QԒÉdB°3œŽēČuÜŦp ž1Æ8Á3ÆØUÉĘYŲTĀXŅ—ČŦ‹€ÄY™§iDA{nf#ÉF+]Úē 7v6YĶf°G|œĢPŒvļjÍĐX#-ĖŦ ÆãŪV֙›™¤ũVģŅßé‡íöx0 ‚HP(6›œzxuå°u:ˆ­zRVyULÂPXk,‰H eIĀ–šŽd(‹Ę)H9ĩÚIi2%aQôŪų{_gÉ?ũîĘ gŌąDd´ƒŖ(ˆŗÉH„RģËØA8ĒŦЊ””fČǰ 4ÖŠŠWeeŒ1NđŒ1ļŋ}]°Iģ ´N4‚°&dlMT–E’4 ĸO“ ā€}đ•Ē2˛™@ÐŦŦ UAÔZíflãņ¨ībŅKû-Uoˇg˛Qž˛rHk†Qžfp˛Ö€ $5;E‘ÆcG9Hʼn2,ŠBkk,Í/ޜ[[[\XŪŲŲYœkīlm¸õæ[īŊ÷Ūz=YZœ?ū\ŗŲPJÕô$8XŌ{åáßd° kũX$Š‹o9 Ā>f°Ė…†ĻŨZģ%L‡Ī¸}—cŒq‚gŒ]“œ7@ĀZ 8"( 8ÕeĸˇęõV9P°Ąī˛šâ`A°pÂŅ•ˇFŌx’Øh~R ŌąjD(h%ĩvwcË(rÎdÕ¤ą¸l ˛E>˜l zÅ3Ÿųœ3§ÎUÕ¨ĶAE;Ũ(héĸÕŦ/Î/.fœæR’¨EijŌÜōdck„˛Imf’é¤9Ŗgέ/­ŦŖÃagvÆ]–%ˆŸBcŒq‚gŒ]]|M×íGã€R# `,Ua•GRĩÉUq”H+ē*+“™&)ĸĐÅIc@]bļŗâLÖÛ44ZueuŖšKŸéĩgZ­f‘e7Ürⓟ~`av!I‚Ūä\ŗ)NÜzrķ|ŋĩxũ™GˇGy9ˇĐ€ Æé°Vk­¤ “ųl3]XXHâd0ôûŨåĨ%¨Û.-/÷{;Ûũ#‡–ˆˆyiø!ÂcėŠúķĖc—â[;@€ }Ma X—;T€úĖqŲ‰ą+Æ4ctíčS›fļ8āGn ‚H †Ã~‘ë0¨Õ’FV¤Ŗt4šTÁûŋøņgŸ¸V ūéŸûĀĮ?ąžĶ›}ā§ÍĄ­~ÚZč,Z)´’@ÍōÖ?ßŗöęo˙úVۜ9ō]ßûŽßøÍ˙ŲhĪú‘{÷ģ˙ôŊĩVįĖچPōÆoėöûeYĻiĘÆcO ŽÁ3ÆŽâiß wX@]åXšĄs›Ų|'œí,‰åĸUîƒvt4AŪBÁÆéP/ÍbԃĄ.ctŖ—“"rĒ][8{DõN{–„ûžŧųøõˇŠdîŪp×]ËsķĪÍŌq¸Ũhb0Œ˛<‰›­öqįD:ė 5§- [rõ0VŸãöŲ3§˛sķĢÚPgfļČGƒķÎB)ĮQVh~€0ÆãĪģ CŧMģh,’"Ž%Žpžį~ô'ūŨxˆ€ `ÚC ‚9ā­B‡0WÃVŠhÄķF˜‚lVu‡éN•wAu+ŖzĩV`åx4™ŧķ]ÜųRÜųĸ;VŽāūīøŨˇœ_Ãsž…īû;W´’¸~ßŊũŅ˙ķɏ~×Á]ßpPˆ’ŲÍõķ•ÅésÛgÖv>öŅO>| ?÷χo8ūđ~ęöC‡\wũņ~wg§ßĢ%M~t0ÆûŌã.ÆØ“zĘp€up•Ұ@oŒ@€#`x°mJđl:ؖdén[Oš÷ƓĄCÕ$ Ũę4Z­æpœKŅ@늚™qލÖiv–vúøģ8÷Ã?ömī˙Ā›;ķęgūo­IŠBüÖo}R[üņģøgū[ßũĮäŠŗsËë›8zäúåĨC/ŧķĨ'nĀOũÔuoũåo=zŨqÕjõG}Tk†!?cŒ=%¸Īģ Ú_¸;ĻĐNĮHJeŦƒĶp(! "K¯Đda„†VPâ@đˇī~mÍmpš$r [(­\%ŠZ͔”[›Eą,&eC%I¸(”;Ģce•P–ZÉZ’āöۂgŪŪLîų×˙æUß÷š?¸īŪõ$‰ÎžÃ›˙ũ×FĩqÛҎ|ÛŅ_û/§Ë˛ • ĀZlooˇÛmÆ"˛ÖæyŪn„”Ë4MįægĶIÁÆcœācWYˆßûė›+9m‹W DpŽ w™wöā ü‡ŋF5ˇÕĀiá„%{Å­!i()„,¤Q@D¨(Ëŧ,ŠI‘iSV%ŠĒ2“4m4P–y:įnŧéHVtķĸ_ ;ËËØŲļÛ­ŅĮwĸ¤yėØaA§ÛÍD°ŽŒ“Čęr8ÄhĐk6›gy ŅjÍOŌaŗUFJqž1Æ'xÆØU™ā}^ŋ8›[@€üØxáoŠp™ <`A( E€“…pÎ^q §¤ ŠJX!M$ƒ*LGÉɲ¨HBF;ImŽ]åXžŸ™ī4ģ›÷˛ĀÕgæįˇ7ļ7×ҍ‡ËK3­vļ‡R)[ĘaXfČĶŽ$‚Ķ“v=ŦJĶnáØŅCkg=~üøxÜ=uęÔÜl;ÂnﭚœācŒ=¸ž1vđ§ ˙ąÛ•žÜq„ IDATHü.玴 e÷ūé/ېlhëH•€&'ȑ@Ō餀NģI:Ė ôûkŖá–‚ž 0éoīlŸžũŲøũß>öáŗŸīžī/ūzĻ…;žę–ų…¤ŨÁ˙ҟĪĪé÷&ī~×ŊKs¨'.”åü l5žŒļ‡Ŋš>û™â(čuˇŽfڝ­­­ņxÜjvø1Ácė)Á5xÆØåØŨ•SĄ°ŋŋÛīãģíÆúũĢ­^ę΀öžNPF*¸ŒMĨ !¨Đĸ.–¨ XĸŠ`mĨ´‹+„0ꖛ07ˇ ld+:qfaHéŖá{žũÆ_ū>"Nđã¯ļŗ›Q$æ wžũŋūíŧö­Q„g>#:ûŪbgãĄPĒF Stg;aŧ°ôâ6˙ÛīŽ>ô÷üƝž¤=7ģšĩöĖ[ŸųĀ÷Įq(~ eŒ1ö "rÎ9įh­•RÖZ!¸6ĪØĩÎÁZ´?šī&ņ鉮bwJÛũĘKL„t$`4¤!’˛ûŅ?üŪē[;č‰Bbbd‘†L­‘.l¯—ĒŒÔ’É¨æ'ę˙đđÖʑĨÕ—åŖá$,5ÍÍ4”ŒĶĄS˛–ŽĮ­–rrk’īÄqMíSŸīļ;ËÍVm<ŲŠ%FĩBˆVŖũČ#(!oŧņÆíug­n’Žęq$$ĮÃcĮŽmuˇŽĸߗ0VVäT”Õ¤ˆR9ŅĘK_ų}‡ĖäW×%€āh˙Ģ2ÆŽ9BˆKæŋ%"Î9˙)>\ėjÃJÆØ°û2úÅõõŨ0¸—öĐn7ü%ŧuB´J„ BÃjYhpW¤l(Œ"a…Š“i49)œĒJŌQh§Ož<”VŖŦėiS,˝hŖ†ũõ ÃÉÖŌŌ\„‰•‘ ( â8LH–ןˆ+Ŋ Š‚jœMōŅ…PÅëëëƒîæĄÕUEbãÜŖ­VgíėécĮŽÅĄ*ō´Ķj—yvöėŲ¨ņC„1Æ'xÆØU%Ø] {2žž|!7¸âŨÅoÜšKmiīfίuŅˀ+päcŧ´$œ¨Î JƒŌUR‰(ˆķá°UĶ›gÎŲ°j5ëëë,/ • Cģ´”(9°ļŸÄ‹yęĸ ąĩą×URÖdÃA~dõH™Ęĩ$Iæ:ũŪ°ĖGšļ ģŗuūæ›Oœ9ķ¨"ŠÃõÍķķŗs“,50üaŒ1Æ ž1võđĄ\īzˇ„T€(+‘(˛ĒĸĖF¸\g†Î&P°p3õY3Ų Ü„ĸJčžuZÎŲ QŠfĐŲí •:)ʂ’8wĪÍ6#‡ZYˆv3,&ã@ÂiãHTe EJä`tÚi'€uĨ (šŠÅioˆfŊ ›ŒŖPÁ!!$Š ÜØY k&á8YîAaŒ1ö”ū…fŒąKŲmmˇpûf´†„ÂãlEA‘# ÷Ģšø#/*:šŌ–ô';q įœstĀëh’Ú ĄŦĩŒ w†y1Ō…˜ī,92NŽŦpN ¤ŨŨS r–œ%˛.€ ā$€ ×;AVJ+Č]Üëŋ{ļî%?Āņ1ÆØSˆkđŒą'äŖę…lK€PĀ Įak4ÉæÛ ČdÃÁŠĒ‚žDŠ FēET.Đ)Á…~IמœcŅéæeN:”áŌb2Ö77ŠáÎŗ4](ŠŦۗļcŒ1NđŒąk,ž_tĢD^æÍZĀ|;ē6Š ĄöæÄ?ö<Öq1 ‰˜āęOz2AžbhæĒ'xeUS6¤˛ĩZ|æėį’„ŌņļĩqkžĶĮDø–tÚ˙^ĮwÆcœāc×(û˜Ÿ„ĩņdØl,„R ‹f “Ác@Ķ%fŅ$qTV…5p:3 3DáĨ¯üĩƒwŖÄ3€ú„ŲŪũ+¯<2×q†åŽSÂîVÜ/TâcŒ1NđŒąk9Á‹Ŋąî„FŊĄ É`ωb‚°@[Bī-ø´kŗBroyÕ¯60?š3q”ÍļĮčõ!ƒöVoS)EÉcŌēxė`ÆcŒÄËŊSnyž @X€€ho|¤"( ¤ 8‰qĨmma-•U<Ēˆ=fë jDí1*ŠlX[“^Öi´‘æ€õQ~ Ņ ”@טŨI3I…TačäØČ Č+Iw„î ø×ČcėË×āc—cAL+å ĀM6[ŊĖ.ŽÜ:îo—Ú*{‰.š¨mfUY–D”DÉ ĢDgéáÍ4Œ›–ė×dmš|fm§ÁФs‹¨^×ZKW r éH9§á"¸€œāFxÆcœāc×\ŽܛuJƐä,Š ßųoNĮģ3ØIÂ\ę.´üPJĀ9h61šĀŅúß÷ļŌ!æ;Đ‚°Õ¨ßKYkœŊxŸ#KüÛcŒ1Æ ž1víæxûũd\@ F¨G¨ Âč2õî Ue ë|otZëũa‚ ˆŊĶe¯¸õ'°ģPĀL Ļ-Ėĩ” Š´'ö/Č XrūEācŒq‚gŒ]ŗ ~_%>ÍMŊŅŌ>‘CģtLq#T…KžĮÅ8‚HDūŸũIuuÕNĒũŅkëvë€{`ˆdÜ,ŽGęüŲ‡“Đõˇ7Éåsí†.í_~•ƒ;cŒ1NđŒąkÕūq.ÖBp@ËḨGŅd”ĩÛ Åŋ:*…Ž „…ŨŋíD-ŲĀHČŲzĮĢZ€ļč5Ěp°„+nKŠJäEe˛Ę94k.Ŧt7×GũA-ŲéģsęũëĮQž1Æ'xÆØĩÃíkß-ŦīVâ ĐhDZ3ÉdŒZ ] ˆ! E$áˆöoMZ Ĩ…F(C‹:P$˜ā¨Št§GÂ!$lnŦO‚¨YOZĩ…4“ÛßÁÁ1ÆØ—3ž&É{ÂīÄ´/@ZĀXy…Zy †˛`Åãˇ2N\š÷Ų DEíÚlQ€( HGę@[ĸz"eŪ'›ÍĩĩX…*čvģä„ķMđNė…wË9ž1ÆØ—+ŽÁ3ƞ8ÄØ_ƒwë`„ÂPX ŽÃA2]Ãõ(‰ `4¤Bąf-@8Rޏ”sÆ!ˇ¤k‘ĐÅNÁQ–O’8v{KMíû~ģ5yÆcŒûl™ÉŲ7 ˛‚Ę"ĢÖ"ŠR­ˆQŅ@Á…úĢ(¸|ûÕZZAęY •АbP”‚,ˆ K’ÉŦĪröåž\3O&!(Á3pŊ_yĖLÎ<˙Éy>į~ŽûēAcøæįĀHz'„Jđ„ōŠ0ŦŠ'{€ĐJhÅ@IĨĩĄ@āü{q‚ƒ`”ā !„VLĢņQv 0>Īđ˟ĨyB!”ā !d')-ËJĶTJ‰°œŒŠņøUžs!Āá ^s8|닯äjĨ#pÖ*&u Ā4׀æ°cß} bûLWB!”ā !d'Y–†Į16hk7n›*ĨL˛\gœqĖŧš)Ĩ—\OĻAx°=ĻãčģoÉû”arįS¤€‰B%xBČkrĸ‘,˂öč;ĀZwBkÍA0+ĸaĀ90Ѐ$“ī‚8ŧ¸•äXšĮŋņāS !„P‚'„ōg÷6ūŌ˙ß !dJŖ38!„B!”ā !„B!”ā !„B!”ā !„BĄO!„BĄO!„BĄO!„B%xB!„B%xB!„B%xB!„B(ÁB!„B(ÁB!„B(ÁB!„B žB!„B žB!„B žB!„Jđ„B!„Jđ„B!„Jđ„B!„P‚'„B!„P‚'„B!„P‚'„B!„Y|jíŖ×Ū?I’,ËÚû´wk߯RjâĪĸ}#ôkL™Zc Ī€xR–R*Ĩ8§dO!;ä<ÆcŦ1’&IbY–" CĮqâ86M“1Öh4LĶtwéîînĩZĨRŠDĮQJ1Æp›e™išj Ã!D’$œs)e’$xīøOíĀj~ —J%ŧ8Ž-Ëjß×ċ,ËđŸō<B@ûąAāēnûöĩÖ¸g›įy…B1V¯×ĢÕjEļm+ĨđĀ0ŒöūY–1Æđöqˇöe€”zzzđ6‹ÅâÄ{ļmģP(´ŋâûžīû¸?>Č<Īcœķ]žleY†‡”sŽ?—(ŠÚĮųÄCGŪh8įģĖ?¸m˙gĮĸÃE&Ũ/0Bye¤”Y– !˛,ÃhhYŽj !đ+[ļlBtww{ž×Žīq;Ž!į“.†!DûSQ6MĶ0 )%~šįšįy휁i5ĪķÎÎNĶ4q˲â8NĶ3ŠīûA⯠|œx/x9Ņ~ 8ŪŽãI’xž‡{ļ¯pĶ4ņ2ŖP(‹Åö…ÖZ)…ˇīyžaY–Ĩi*Ĩ”Râ°zGGG†žīc|ĪķŧÕj5›MčėėÄø>22’$IĮ…Bã{ûš [ûîđĩÖqc2ŗ, wĀË*ü‰ā[%JŠöô›L™rh žBūˆ—ƒOĶGģąėĮ˜q¸Ž=ū™5Ë2;-—ËqģŽÛŪ§Ųl–Ëåv&Æ3p†RĘöˆ{Ŋ^/‹xãFCJ‰7ĪsĨî†įp×Z3Æđ–'"NínßoŖŅ¨T*qK)1s'Ibš&ŪHšĻxûí˛,ķ<¯}/xkíw$đ‰H)ņšˇo‡ųąˆ¨P(´o EQ„ãåxG˜ūÛCøx›œķĄĄĄŽŽ.‚ī GR_ęe oŠ1†?Љ&í‰?hüY͝ũëÁ“Šũ L‡€B^Ã0Â0l6›†a‹Å$I0ļ `¸Åëááa ĩZMáēnŊ^Į}Fš\Æâė4Mqh<ĪsĮq0āâpuĩZͲ,I’ *•JĄPPJA „RļZ-ŧxˆã¸Z­Âxéyš\ÆŨjĩp`ĮĄq€/9`ŧ2Į˛,Ĩ֔cŨüČģqãFÜ-Š"Î9Æ÷4MÛī āĶįã°Čķ<ŧzÁԎˇV(ڕBũũũĐjĩpŧ|``“ũÄŌŦbĮS.—“$i?YLųíV¯×ņšã0<^ŠX–ÕŽīyžAĐjĩâ8ÆĮų⊠„B žB^ˇ°Ļ\.ŒŒÜ˙ũīyĪ{\ם5kÖŠ§žzÅWÄq\ĢÕĸ(Šã¸ˇˇ\×õ}Ãq;ĩW* š˜Ąqäģ=Á´=xŸįųgœQ(°ŊŖŖãŸøÄēuë CŦĪQJY–Ĩĩ°m;Šĸ 0ČēŽë8N{.)žŸ`šfĢÕu]ƒŦaĻiúžoÛļŋ—sŪl6/šä’Ë/ŋÜķ<Ûļ9į[ˇnŨgŸ}îēë. ĮX5dFEņ1ž—J%ÚÄp?<<Įqí:œŪŪŪĩk×Ο?Ÿ1æûūyį÷¯˙ú¯ø8ņ vPžįõzŨ4M,ƒ1Mëõqļ+~û‰'ž(Ĩ,—Ëļm;ŽsĖ1Įy䑷Ūz+^á,]ēôÆot]ˇT*†Ņž0Āk|?Šã !”ā !äõĖļíVĢÕjĩÖ­[ˇjÕĒC9äÁ\ˇnŨUW]5::ēfÍÜĮ°1Ęc*B4 &ΞĖ÷}ĮqÂ0L’¤ÕjálTŧ )Ĩišiš6›ÍĄĄĄ}ėcZë0 }ôŅ^xaŊ>ø æī‰•$===XÕãēŽiš§ĢâŦĶ(ŠpÔŧT*ÕjĩVĢ%ĨÄļ08FŽ)6MĶ4M“$)—Ëxĩ€#ßĐ×סyķæ °ũËČČČØ‹ į8´¯”*‹ƒƒƒ0^Ų¯ĩ–R:Žãēnģŋ}`` …ÂƍĮB`¤ÆË$œ„jYVš\ÃĐļml\ƒ7ŽokøžĪ9īėėŧøâ‹ûûûëõzŖŅøņ|ŪyįvØaĨR) ÃŪŪŪ4MGGGķųä<Ο{îšsĪ=×uŨE‹]|ņÅ8 Gyä5×\ŗråĘĨK—>ņÄ›7ožđ —.]ēhŅĸ .¸ Õjĩ§“ĸZ­V,1Ú !öÚk¯ī}ī{o}ë[/ŋüō)eĩZŊ÷Ū{ąũË<0}útœ{ēhŅĸo|ã‡z¨išgœqƆ žøÅ/.\¸°§§įK_ú^ZŦXąâSŸúÔqĮ‡×!O=õ”įyx]0€wŨŽHI’¤ŗŗ÷‘RūÛŋũÛ>ûėã8Îüųķ¯ēę*ß÷1/_žü’K.9ņÄįĖ™ŗ|ųōááá(ŠÂ0Xĩj•ëē‡rČÃ?ûlĢÕÂęŧ6¨×ëZëZ­VŠTđ­Œë¯ŋūž{îiĩZŽãŒŽŽÚļ]ĢÕ<ĪģôŌKkĩZ__ßÉ'ŸLSZ !”ā !äCęc=Ļĩ>ņÄą*Ģ>p8<ŽãŗÎ:‹1ļmÛļ‡zčá‡>˙üķąöŖÕjŨtĶMwÜqĮēuë<đĀ~ôŖƒƒƒŋûŨī~ũë_‹E,ČÁ,ŪQĮyžã;ė]sŌI'=účŖŽã`[I,Ž×Z—J%Ĩ֝3ÆŽŊöÚo~ķ›I’Øļ}øá‡{ž÷ÄOÜu×]Ÿũėgׯ_oÛvĮkÆ}üã?öØc]×ÅĄn ĮZëršĖÃjĀ"ōöĄ0MķÎ;ī Ãđæ›oūĘWžr÷ŨwcƝÕj?ũéOoŧņÆ'Ÿ|ōÔSOũā?ˆQûčŖ^ŧxqŖŅ¸éĻ›Žģî灁zB´ØāØŧyķƒ>822âēîšįžĢĩö<īÎ;ī\ŗfÍŖ>zČ!‡”J%Κįyø]–eáÄYüØqŧÁ1xüĸįyī~÷ģ×­[÷Ė3ĪlŪŧšˇˇ÷Ŋī}o{-žBôN™ŧ&ļVĀlËE!ĩ;âiŗũŦšīžû`|9¤ü–-[ļh­7oŪ [ˇnŇ?ųÉOplxdddÕĒUW^y%îŧiĶ&ĮqÖ­[‡5ŲŖŖŖŽãŒŒŒāŋļįeuÔQĢW¯n¯č444ôķŸ˙žūy­õŒ3ÖŦYƒįđG}´}bŸ1cÆ5×\ŖĩŪ¸qã-ˇÜ˛`ÁÜĮ÷ũŲŗgß{īŊZëŪŪŪ¯ũëiš6 ÞãŽ;đÛ[­ļã8î¸ã …Â^{í%„¨VĢÅbŅqœī|į;ZëmÛļá˛JÍfSkŊzõęŋų›ŋÁo/ ×_=~ŧ~ũz|T>ú( áēQ˙ųŸ˙‰ķbķ<ßwß}ošå<€P¯×q…&œđše؜9sžüå/ˇ—ÁÂ1øöOjáÂ…Ķ§Oīîî. }}}k׎=ė°Ãnēé&üšŦXąâŸ˙ųŸŸūų™3gFQ„“_‡††˛,Ã!ü‰ũ(ÉëØKåÜļ˙ŗã?2ŲPƒ$ByåcđFcîÜš–e=ūøãx 6g„ņ–/=ö˜ëē===ØÃąˇˇ7Šĸ§žzjņâÅO<ņć?üaĖŽ6lÃđ”SNiOŠĖķüŲgŸåœ—ËeœÛ 8­S)…Í(]×]ģv­Æk¸= IDATbæĖ™XŽm=ĪëîîÆ‘ū<ĪgΜ9cÆ ˜5kÖ=÷܃ÃÕØgöėŲ<đĀĒUĢjĩÚôéĶq(,Y˛dppĐ÷}lņžī{žwÎ9įŦ^Ŋ:Iŧwŧ;čééšå–[žüå/7›Ífŗ9::zꊧ€RjîÜšx›I’ā;.ĖÔŅŅaÛ66Ééęęķ_qŠ5kÖ0Æ;ė°zŊŽĨ/Žë>ņÄAĖž=[WW—ëē8_{hîŗĪ>ĨRéŠ+Ž(—Ëũũũ3gÎô}?MĶîînLcRʁÍ›7/Z´höėŲžįÅq<ūüÁÁÁrš\ŠT°ŗ>u$„Lrt’"„Whdd¤ŖŖCJ9sæĖn¸áĐC€FŖ j˛,Ã÷FŖQĢÕ|ßĮŲĢØ—ĻZ­bšŽŽŽžž>×uūķŸc c ËfÚÄ톌X?ƒßRĘÛoŋ}åʕœķRŠÔÛۋÕZëûîģ¯ŨåɏŒŒT*•… öõõ !ļmÛ6mÚ4†€(Šžxâ‰wŊë]Đl6׎]ģdɒö0dEårš\.O›6­Z­âÅÉđđđ’%K°ãÍāāā™gžų‹_üâCIĶôę̝ūéOŠËĻbĪûv?œ<Ī …‚”rëÖ­¸ŽSŠT˛mßĐĀ)šŒąĶN;íüķĪŋ˙ūûkĩZĮFŖ§§Gk]kFGGģēē°vgũâ˛ĩžī/X°`Μ9ĐŲŲĮq{ũŠ,ËZ­6 B<ķĖ3•J% CĶ4‡††ĻM›6::Š“bąC%-B™ĖčôD!¯PGGFŌÕĢWßvÛmĢW¯îīī¯T*7nüøĮ?~˙ũ÷~øá˖-ûā?8::šĻé…^xŪyįaŋvĨT†XĨ=wîÜc=öœsÎq]Wk]¯×oŊõÖ4MqåÔvë˜îînÃ0p {˖-øĀž~úékŽš& à VŦXqë­ˇ@ĨRšéĻ›Ęå˛įy–eájSØįЧžÂ>•ĶĻMÊŧT‚ā‡?üáÚĩkŖ(úÆ7žŅ×סß~û‹EŦŧĮŠĢ8m´ŊŦŠëēÛļmķ}_J‰5čŗgĪÆž9ßúÖˇ,XĐîy?qA%)Ĩįy‡zčōåË/ŊôŌBĄP¯×˙éŸū Ÿ¸ëēĩZmttģOžį=ī9ëŦŗ6mÚdYÛ0ÆÖ­[W­V …¨ã‹ūąëNĄPĀâß÷ąęŊŊ(OąXŦT*Žãœ|ōÉī{ßû°ø~xxøŋøÔjĩFŖŨ$ą ũ†B(ÁBČë"I’sĪ=÷öÛoä‘G°å„Nčîî>捪Â0ŧõÖ[›Íæ›ŪôĻųķį/^ŧøÚk¯õøG?útwwoÚ´ ¯đÚ ũA{*‚eY¸fíččhgg'ū¤pręo~ķ›rš|ÛmˇuvvuÔQ–eŊå-oyāđí‹JĨ’$ ŽqK…4„ÉŒM\ÍnâĒÂth!á˛ŊÖOûœ™ĻŠišI’0ưŲb;öá¨9vƒ€ °1|Eí•P Ņh`-MûÄAšĻ•JëO&ފŠ-YÚßŪŽąŦY‡ņÂüb†ŽãānũũũŊŊŊx=Đ^" {Ũ$I˛`Á‚oûÛĮ{,>rÛļzzzđáōI###Åb‹€fŗY.—ądk{Ú‹ūņ~wzAi6›ĨR {ÕO<ÂI’`(îėėLĶTßˆwÔ~‚xƒíũaŧų~Š•0?Ābžö \ģÆŊŊ€.vĻo7ųÁJ!úåãœī2˙āļũŸæEIú L‡€Bū”d†apÎ1bæÆŪŽø¯ØFã|cbČķÃe†œslēâēnĨRÁ $I°i#.tZĢÕp=&Ŧ„i7v˞ Sužįߓ$iGm "X|ˇ‰ˇxRŠTp;N@WWށĘ97M3ŽãŽŽŽvËEĀÄĖÃúl߁ŖāÅbqttī—s†!ŪfqÆX;žck|ß÷qÕ*­5™ãņÄyŊ¸ŠSĄPĀđϰÕ};{aũ 6¯ô¤iĒ”ĸÃH!„l?šĨQ˛×ôŊB?q 'Žc[ÚL1qŲíÍ ĶyžsΙä]Ķ§F ›Ží‹-6öņN—eģŠū„B^;t:&„ėáP8VâÎ'ŽīžtÜgÛķũ¤Ũ†šq˖$Ë7“–]H˛Š^N(P|‡—؉/9œįÜ4M!DoooĮJŠ(ŠŌ4u]ˇP(Äqėy^žįĩZ-Ë2Ƙã8Zkß÷ņ{Ĩ4cZë<ĪĶ4MĶTaaBČî,d1Đ 2“s?)؅8ĩ- `ãõC;ûPs`Šļ¯ú–sYTĀMÃŅĀĶXĸrȕeĀ6%%xBŲÃZ­–a…B!˲<ĪëõēëēÍfĶ4lËt”RIœiÅ´b†´JE› |Ō$Bp&ŗ,ŗmSë\kÍ3M3Īķ<Īc†a¤iJ™˛;Ģ•4Ķ=¯ŖXf”ĮĀ9gĀpÅ4Į ų@qÅA+ íĢŋZsÎ yšh)YĄŒ Ĩ Qout”(ÁBČfÛv–eĨRŠŅhpÎ]×!D–eår9ŽãFŖaÛļëē8¸†a8ކ!įŧX,†aYĻ”Ęp _J™ĻŠÖZ)zc›˛ģdCÅęeną ķ %lkŦB0  š–0ޤ 4°4ĐöUßr@*°,‹(hĩ´e1Ķ„ÎZÉ÷bJđ„˛‡9ŽĶßß/ĨŽT*år9Š"˲ˆ(Š’$1MĶq!DEžįŲļÍËķܲ,Ĩ”īûQ1ŽņĶ,Ë´ÖBPJåyŽBČËÄ4…ôFĄÚŅ#!c8ËT ĮŌ´'ŗj<ˆqÂ$yMhpõX÷Čņ \a”kJđ„˛‡5RŠÄ9īččāœGQÔh4:;;ˆVĢeYVŠTō<ĮékĩšīûI’ —ËeΚīûårŲ´dšĻB°4Mŗ,SJ†aFžįt„ !ģ›ACąbaÕäa›˜°ËxˆW9@&@1:p¯ ĄĄ Mļ_Vå]]°e(4Ę5—zŅBȞ§”ęééyôŅGį͛gÛvŖŅpĮ4Í(L´Ö8]ĩÕjau͆ ĘåroooŒ1˲8įĩZ튧'ĨŦTJļm‡a¨”✠!°Y dBČnā ˛T(Ąi ¸ųĻ+”éí´ŧÖVP!ƒ 4ãJ¤Áˇr%čTķZaY’{ ¸ãԜbg̓QOĩņĄ|eÄČ=“;Ŧŋ´›÷ōĮ†˜Î­<åĩļ¤q%SNWef­Öí{`I•‚éR‚'ä ßsP @1|ŋT€āaœ1!Ĩ ĩc3ĐZë8ųkČaļ€É ¨*ixĶ:;´Î˜„ĄA˕L@K –Ō ]]]ÃCͲ[ÚČ"_Cę<˛$ÖŽSc†ĶzžgаqÛļĪ—Bˇ>2š$IOOO† ´æLimX&į< SŽ%-/¨+—ĒŽaCõJš#IxĨŌšmp¸T)úA]YĒũ‚]Ôa™ƒŒĶzgOW˙æÁŽžžúpS˜Œ1_ZPõē§õÆžj­Zĩä{ŖŨÅęÖmÃĶfĩŧ šåŽŽ˜W}/ŦgÆÖaˆToÁi0Õh†VĄ&iĨcÖČȈi– ›oÚ×ē5ŧĨ5}´iøQĄĢĢKJųüķĪĪ™ŗOÃ{`¸‘-Ģö)V‰S ĸZ.ˆō­\‚ÁYŊJe'›7{N˙ļMĨ"W:ʓ4ÉRSČrĩēaŨúZgˇmØ $ËA `*møuĻķJG1Î&WOl—Éų¯ˆ{ļîßķŧbąˆm=]×ÅiÁœķöZk|{v˛N~‚Āu]܎ũ¯Ô:Ë2ėŠûÄqlYÖîEŗ ‡(I)%Ž!°ģOŋ% CĮqÚ#MSÃ0‚ ĀNĻXfÛ6Q§ÚfÄRAŲP<čī*˜i Ą„™3Ítn( ĘĖAæLNØÔMđ´ÚEß>đŖvŒÚãÃCZŊhŸ]ā>í틍Ũ‹ībwd`pU)đ$÷l“ûÁ€2ŠeĸLP‚'ä D(1VîØnûĢLSjIA×ĒhĐyʤÍÃs˙߂HS P.@ÅM[ŧY}åi3+yDQ ڐ€ÎE,UEģŗ^1ÜZŨË-wÚļß5ŒŽbËtz&ČJŠ”ĻFĐ …+Ģ•Z*:†ëaËO ŖēiãķßŊūū-/Āßŧŋô ÅJUf’æ\ÚLȁĄáū˙ûîĮŽ? >đ÷ozac{7|īĩO@ŗË‚÷žīÄ ÷Î>ûÎK.uÜņGo~~ëˇŋöũrÎ|÷;†›ÛūëŽģūķčé‚yķāÂŋ;âŧoæ‚M›ļ\÷;Ÿ~ļ Ââųpö3;ėˆS˙â{—\˛|åō}^Y?^üÉ˙ŧũēwūÛ ßīųÎúīūķúũ—ÂĮ.>ãû7˙āĮ?kmŪ]]pøáōÃūČÖ­/Dõ@ xa ūˇũdŦ^}ėÜšsëū¨˰%ōŒs°nšíŽ˙^ĶõāЃácŸx{OšēeËĻoûW^öYb͝ŗõMûíÛl††áåJ% [ŋ_ŋáöüöÉßÁa+aŋ}˜7o>ck]Šôr‘zÁ°0wņ>ÆkƒŦR 'ėj­ą›ūģˆÕē=1C§iŠ9ĩ}ŲĀBėŲ:Ĩ,ËLĶę xמī[–EQąX4 CkŨl6+•J–eģß1y+Ĩ‚ ¨T*Øxâ8n_'ŧ܈'Čņ6͏ĘeYžī ü"~œ$IEår™NĒS,ăČAjČäbŠXŽqd…™9Ī0#åĀĨRBs͔bjŠ?_ĩã(Öø2ŗ;gküX‚æĀ4lÖģzú¸ÆtļĶ<ûc÷˛;^IĻsŽ390ƒījĄS‚'ä Ī5ųNCœCĒÁ4AVžj€\0ZAĘáå' `!đ~_Õcwö’#oķī_ØŌQB2ehm)JņXĘ@ĩBa9Ui§ƒÃƒÕō´ŊfwoÛÜī…Ē`vDYfX- I¤”€\éÁ­~ĸĒ-Īē˙ūû~tįh­ G§ŊsΛößGJ™ĨĐl$qĖ6ŋđÂ=?ūų#€pčJ¸ôsošˇ`é†įļKĶžņn°¸ø“ĢfĪũ_ēūĘ/ũđ˙įüŋ˙ÜūŸ˙Âãͧ>öčÚĩŋƒkž|ʒĨŦ^}Åļ¸ū†w–Ë…oû†kžúƒ‹.:ëųMC—_qgĪ4øâ—SšÜ2ŖÛōŗf˙0pG÷Ŧo%YĸĢ)@ĪŦÂaG/yøŠ'O8aéņ‡/ėŽ:QbÔĻ•>táĸÅK—ūú×O|íkÍ˜}ÛI'ŊÃ÷ÃDÃ=÷6>ú҃—.Ũ÷›ßüÎį˙ŋ5W^ų×-ö튎ēĻõ>ˇaôë_ŊidžsÇŗÜŋá߯ģâŗ˙ũņ‹˜=wŪ9įÉįŸßôŗû^¸ũk—,\{čA‹<`ßZ—•äʏ“ŊæÍ9ûœžßŦ}ūū{Ïî|ŦV}똎-]~ČbËĩšA—&Y!eE`Û6.@›eKī4*˙§R*ĨšÍfĄPĀádLĖŲcd1īŠû8ŌŗĮÁ&Ą†Ą”˛RŠ€įy¸’Āî>)Îyš\Æwĸ(’Rîn|‡ņNGøhņ°dYŽã¤iĘ“Râc3M“&“^ģĀķžŒaĮLö2ˇÚžŌ'~q§ŌÍWņš‡Į÷ûßû|ö& IDATüĘ#übą¸šN?Ũ8āā7ŋ÷œŋ|ôĸ˙ˇië`_Ÿ­CŦ˛į6oÖũØZøöˇū*QАúm'ķį˙xÚôyÍVŖŌŲup_ī’}zīY…§Ÿ|áž{~vëmOÛøģ8{n×ĀČhąØ}ØĒcŽ8â/7=7ēaũÆ{īûŸšîw‹–Â_ž=˙ũg'I}R5‹Ãr}Į$-÷貃I’`HĩZů`nÆQlŲ‰Š}ĪÛĻY¯×ĢÕĒ”˛ũŒFFF:::đâĮæ}ßo?°Ũģ.į|hh¨ĢĢĢX,úžīē.^Šŧ‚ÛÁ§ËãCͲ ¯ڏybE9ɤņ°}­ĶíA\íßwĘčėR÷%ŋ…mgûEg”ā !*žĢ“ˇmĄZ­f­äHiwVĀĢoWČŧÜ3Ĩr ™Á!@įĀõŽƒšbĀ2=öh†!0%˜0ĶMY 8OšŌ\§Bg"ËDžsÆĐŅ‹–ė3oūÂ0j4=)ŗ,gåJgË ŸaËpf̀ŗöŽTjqGéHwo÷hŊ>ZĪZ~~ôF́A˜3LžüŨŗķæ.ũ‹wŸ{ûí_;j•;sÖėÍ[ûGę͂ ]|]CCW(€'ŸūŊŽ Áü…‹7nÜX,ZAĢĨM#SÂ°Ā°zú›vɚ1kß­Ûū7ŠaņÂņõĶ-[ZgœxČČĀÆ05~rß˙Ūķ?OnŪay‡ åŌĖÁÁÁĨK wÚÂ(4[MV(Ķúˇ¸¸áũ \™æĢüâé0ƒ .üîŒŊá…ÍPë.āš[L#íœVŽâTîô™3ļ… /zz¤͖oZ{IĶ ŧxķĻgĢEæ+ /z~톇ûíĀ Ö“\Á$ëöŒ Đâ8įcčÄŽ?ŅÄ•VĢ%„p] žq€ŧ=Xããņ{ ftŦ Į-æcß÷MĶLĶŸrû ėîíwtt⛝8žãĩSšĻļmĮqŒÕųœs|äX"ßžäPJQ|'“ÛÄŅq56Ok§Ė=1žŋTEûöĘž‹ņJĨbYŪT†ļmwttā›ÕĐé”Lĩ˙ŌŲũÅ˙4åųÎ7ĩ‹ī}Ņ]0>á{"˙9ęãcLkXîļ§īB&=Û(6VŽ>Ö2ŒĶ2t’6ƒuW:ƒŦšũ“ņ„Åļ}ūؖi4ĸŊúfÔÃqLīÖjĩŌ(¯U{?U 5͔bšæŠâ™é…všsÚPcĀ-w´<ųÎĶŽãîšëũYúŦkyâ§qâ:5ađ(­'yĸs[ ˇP(z­´ašîđĐH§ĶĻMS*3LÉšŠâãš<Ž@@g$~Pīę.—Ęî†gžû¯;~ũđCĐjAĨ û`rČō/]õĀWŽ9ϧ¯ę8ÎמrCŖ ]üĪkŪņƒŸŨûShÔaú 8p9œsîqQ˜ie^÷o?úåƒĐōaŋ}ácŦ˜>kūs›GŽųę]q Xļræu×m^sķģLS>ņLķōŋŋËÕ°ĪbøČGOŋsÍ=÷ü¸Ą9ôöB_ ĀEU.WĪ;īŸŽ9ĻãF6n„éĶáōËßY,ēļí~ėŖß>ņøžĶŪuBÖ†GžÃũŋũŒ7ᨷ™yHGĨëéu§wĪWĀkUÛ‡ōŧn;’nĻdŌv ŋúéŽîšc‰2§Ō2mÃôÃXĨēP´ŗŧÅ5ˇBWp+^‹õuęÍu ĄÎ5p _­āŌۚÁ̰>ãwŪyíĩ×Ū˙ũ### ,8˙üķß˙ū÷ŋ˛ęđ]:˙üķoŋũvėŗ÷Ū{}ôŅ—^zi­V+‹į9clŋ6JĨĸ”ZĩjÕÛŪöļ /ŧŸTĮK—.ũüį?æ™gâä]˜Đ æeÂqņ‡zčøãnĩZGqÄg>ķ™3Î8cˇnGÆq|æ™gŪqĮ0>Š÷‚ .¸÷Ū{?ķ™ĪwÜqĩZí˜cŽyûÛßūÉO~rʏhpžËüƒ[ŧ˜ÁvŸ{v>Æk–euLpf• ûåÎ6ķgLÎŗTōLh°2ž3hŲŠn§†P¯ƒ^4ęÄôí¯Ž ļ¯[ŌÎßGĐĮ‡đwhÉ˙Đáj$8PžsūË"”d<Õ÷0 W¯^}ŅEŲļeYš\žęĒĢŽ8âˆZ­†ítöÚk¯öãsÄšŋ­V‹ZL’INpéû>önĒÕjaFqR,ēIÃŽ–;T9¸7˒$‰ S@’¤Œ )„†Öyš%Zk!ä*ÜĀËB­5ĀØ|ƒį‹ĩŋ2õ_é¤yk'䍉ƒfģzŖæzŽA(!rC(ķål™2™– qUVŠ™ÔL‚–š1  xĻxĒYĒx Ë8dbŠcĄSĄs\íI0e0-š’L Ž„Č-‘["wDî@¤ Â.XnÁ2ã ŲY+– ˛QßĒ3¯XŽÁŌ¨Ųî(×ĻwLs87tlčĐĐŠĄ”Đ H•KOë4 ^Ÿ5Ãĩ5ō7™ÜsÍ4öMíI¤Î¤ÎĨŽ%øZ|Š3Š´Ô‰„PBKBKęTę\čXB$xĶ`žĐšÔŠd#’ :6U,Y]˛ŠCą_°ĻûĶxš[íK ­¤Î„Z‚7Ĩö…ÎĨĄ3ŠcÁ< €PčLhnäB(0”:7t. 7”Ššš42S(nä ´:ßãu™/Sģī{ģi#į<‚sÎ9įĸ‹.ēōĘ+ßō–ˇ …}÷Ũ÷[ßú֜9s„ëׯŋā‚ :;;g͚ĩzõęŅŅQĨTĢ՚;wîį>÷šwžķË–-ģīžû>ō‘ôõõMŸ>ũÄOlĩZ8g´ŅhĀ„f‘…Bķņ˛eËŽŊöÚC=ô /´m{ÛļmķįĪđÁŗ,‹ĸčÉ'Ÿ,‹åryhhhņâÅ7ß|ķōåË …Š+¯žúęÎÎÎbąxë­ˇâhî… /šä’SN9eåʕĢV­z衇0‘ˇ×‡ŌZK)qŅ(Î96\Į5Ö¯ŧōĘũ÷ßß0Œyķæ}ūķŸĮf—ŒąũöÛī˛Ë.;ōČ#—,YrōÉ'?ūøã###RĘÁÁÁã?žsž˙˙ĪŪ›‡IR•YãįŊ7–ŒČČ­*kíŊĄģi@dE––PDđCTTĀaQE‡qÃqCdDY´QĻYĨe•ĩ›îęĒŽ=ĢrĪXî}ŋ?nVŅĖ7?i~ŖŖŽyž|âɊŽĘˆŒĖžqî{Ī{Îîģ?üđÃÆ"ĻRŠØļŨŨŨm˜Áøøø9᜺zõęŪŪŪĶO?}ddDJšråĘ /ŧđØc]šråSO=ÕjĩL{€eYf’EQĄPđ}?‚8Žīŋ˙ūûîģ¯VĢ™ÉIĢÕ2Ϝ§žzę’%K˛ŲėÉ'ŸlX‘qŖī ƒ?[0“e9Q”(Åår5ŠÛv“DŋŦ$ožX€EŖŅlÔ[Q”0Ą]qBÔj­z-Œ"M°Ifbf°xyĨ>\üîâtĐÁ_7•įv˜ˆ!RØ"moį,c!CIĄ/=, %B[…– ­(˛T,“ØJ%4ą–Ŧ% ŠlĄ]iTZ˜‡öHĨIû¤™2ÉĒFÆæîĘdœ4D.]`LŽoÉĢfŗ1‡ÍŦŸI*ŠÛÕiĒÍ(ĸD•Оh)™ŖÖäøØ“:Ų"0.1mĄáÛÂŗ…¤šÍu[ [I›c5›flĒØ ļ’ļ‚Ía{+Š…dA ÉZ°ļ”´”°8´8ļYJZm„’!XHfCġ˙!9–Ô”Ĩļ¤ļ$G’*R”¤¨H†TļÔB"’bVŌŦäXjKÆYRYŌą $„ˆXKŌiJr”HåI¤]b$ô§ûÚąŠĄŗĻôģyķæRŠtÔQGr_ŠT¤”Žëæķų(Š>øÁÎÎÎ>ķĖ3=öد~õĢķÎ;ĪtŖæķųn¸áškŽųíoģf͚SO=uttôÉ'ŸYĩjՉ'žhgŠÖÆÔÜĎn;‘8ũôĶ×­[—$I___ŖŅ0nôŠTJJi,ę‹ÅâÔÔÔ?üÃ?üøĮ?ëëëÛ}÷Ũgff&&&ž÷Ŋī}āØŧyŗŠĐßz뭗^zéƒ>xūųįŋéMo23ƒ0 ėŪ”ķ¸Ž;==ŨÕÕ544d˛œvÛmˇ›ož9ŽãëŽģîēëŽûŅ~dN@qĮwÜrË-=öØqĮwá……úGątéŌ‰‰‰_üâW\q…™ŸdŗŲ$I&''MYũœsɝ]ˇnŨ–-[,Ë:ãŒ34ģīžûûß˙ū† úúú2™ĖäädŠTj6›ZkĪķæĩûa–Ë呑‘(ŠĖe`.Î)§œĮņsĪ=W¯×Ã0<å”SŒÃOgTíāĪĢ\õōGĢTĘwœToo*å§Rž—J›éôˋ\Ļ–E ..ēlËeĻ8ŽMģˆë¤ ..ŠŽí-Ĩ8‰ ^ą˙äŋ_zŸGGEĶAux‰ˇ‘ØVę'ڒg!LØxN.¨ˇgˤ•€~Ib8—NÍ"”l“ ba3B°da‘ļįj6`k˛%k@2L]`™ ōNģ,Ũj†vʛĶc˜RnFPd!ˆ)nZ,RCK† hĻØ÷ėîn/ŠfģēR€Ŭ*fKؚZ€í‚BP –€  Ä &@`ļ‰mAÁDl hÁ‚XHm mA$¤-ÁR“&†xue (Hģ A"fb†$í0,bfR„H ° ļÁ Š&Ę(יi›aĩ˜4!ū͆ąÎ‡šÛXĮq|đÁĻ)͈1ęõēeY›7ožëŽģÆĮĮ{zz|ä#9ų䓯ŊöÚzŊ^¯×Ī<ķĖÁÁA?ūøOûėŗK–,I’äŸøÄōåËxāš\îŅG=ā€LöĒyŋãããßøÆ7nžų摑ƒƒƒ›6mš/Ãz襚\. Ã>øØcŊ˙ūûÍ$Dk}ūųᛎøá‡Ÿ{îšĖŧyķfķ~‹Åĸaęgu–9ĘđđpąXÔZ¯_ŋūöÛo߲eKOO]tŅEK—.­VĢũũũīyĪ{Œ#dąXœœœ4/n055õšĪ}îÚk¯­T*…BaíÚĩI’ĖÛ阏īųįŸ_ģvíĶO?mYVE7Ūxc:Žãx^ĢĶAÜũŋø1•˛ĩBĨZķmĸšŽßybmZÂČ6„ФĶs“€SĐĖpÁ¤YA´Ø~ķ`bP¨AДRšA‰fmĻ#$„Фĩ3™ÄÜg(˜¨}élŠ!Ō$ęOR†ŸĪl2Ī-˚ˇ=Ų¸qcąX4šofN§ĶaVĢU!Dooo†RĘũöÛ/—Ë -^ŧXJič;€ŅŅŅŅŅҎŧå-Zël6[ŠT|ß75ėųŠ{ĨR™˜˜˜ˇc7tĶü“mÛ]]]D”Ëå’$1¤?ŸĪWĢÕL&322âyž1Š™™™ŲsĪ=1gãX(†‡‡ã8žžž^°`ÁĖĖLĄPČįķĪ>ûėÁlˆ˛Qä÷÷÷z襧žzjwww&“:捪ækÛk׎ŊôŌK‡††ršÜķĪ?oV$&''MŒ+€ééiß÷ŗŲŦbķæÍ]]]ÅbҜáîģīŪĶĶcNi—]v1ÍŧĮ=÷ÜsŪ‡GąaÆ(ŠVŦXat8======F_­V•RÅbņ‚ .x˙ûßošzƒ °mģÕj…LĖ<44†áGADÕjÕuŨBĄ066ļķÎ;wÆÖūoss”(LōŸ5ŊŲl–ËeÃŋûûûįŨâûûû7mÚ ŸĪ›f8ÛļxũĄ‡ZŗfYFxöŲg—.]:ßxjŪ,3÷õõíąĮĻĢÕDTa;~fÃķAŽŒŒÖk i§ ļŒŒ˛kģaurCK!Ĩ” •USVEȄbqéc-X°wŲ1í/Vڏ•n†ą†ĢaąhjŲdԚ]æ´f—)ֲɤ4$sFë4´ĩ¨+ĢŽDĖĸŠ­Y-+šb1[ŗlͲhjŗŦąŦhYgš‡ŪŪ­Ōė*H%C%늠RœVė)+*‘(˛g§•ĐJV•=Ĩė’˛šJhEļ"G‘P2QVEŲSĘWö¤˛*J†Š„ŸL¯öą­_ŋ>“É<ōČ#ī}ī{īŋ˙ūūūūŖ>úŗŸũėÄÄĆ .ģ랓O>9“ÉôööæķųRŠĀĐĶ5kÖ|čCŠãØqœõë×ßzë­Ęå˛ŅžˇZ­FŖax93ģŽģ~ũúŗĪ>û‰'ž¸üōË3™Ėččč~ûí÷Ë_ū˛RŠÔëõË.ģĖķŧZ­`ëÖ­+WŽÔZQŊ^īíím6›qA°iĶ&Ĩ”Rj˖-×_ũc=–N§?úŅ.]ēôČ# ‚Ā4ėzžįēn†æ4Â04ö…Ųl6N§ĶéT*566ļzõjß÷üņë¯ŋ~Ų˛eD´qãÆŽŽŽ(Š&&&FOO)Žŋæ5¯9đĀŋō•¯TĢU˙ôO˙dČ´eYfąB)ĩ×^{Ŋķī<âˆ#„I’LLL\{íĩJŠ+V,X°Ā\ųFŖa8úŧFEžįú^­VŖ(2ō_Ãėgff’$Y´hŅqĮwüņĮ›ęūÕW_š–ƒ:øŗˇģQ۞¸ @d29‚œŸēúęߎ]ûŗ‰‰)fäs]ÛÜŠÍøY€ÅÅ?đ͟ÜS­VsŲB>_đũ IôėlųâĪŨˇö§÷V*ÕLϐËå=/­.—ĢŋŸ]˙uđßA- í˜;" 鐂2ĄČlß6ĸqwŦ 1rŠ3 Ō üA„l„Bˆb„Ž„ķ įZįBt…莚;B6!Wĩ­ļâ9ųŠ)-b‰аX¤6o‚+ŋëŊŋŪZ)öīxŪG×Ūû‹ßÆĘŸi^úĮožíÎXSīāĸą‰Øģ`ɰ™=Í~BnŸŊčĶO<ģa|ļ X…JÂØõ‚"kŸŲU2f+rYŠŗĖiEļ"ĄˆÜX÷(Ũ“Ģˆ”sJqĀOČf‚*‘q"´"Gą“—ÅFšļ IDATĢ ŠDD^D^(í„ė„\ [‘€)į“q†Ņ,bPČBé—"AæŨ $`Í­ū§æcœo6Ø ”€âö…%5Ÿ-Âĸ[Āü­KJé8ŽÖ: C­õa‡öāƒūîwŋ{ãߘJĨÎ:ëŦå˗īŊ÷ŪA[É=öØãđÃ/‹W]u•y…ŅŅQS#7,wŪy'íˇß~Dôž÷ŧįņĮ/•JFŸã8N*•ō}ßPķ|>ODgžyæÄÄÄũ÷ßŋlŲ23 ¸ä’KÖŽ]ģīžû}ôŅûíˇŸņWËå6lØ`ÛļÂķŧééiĪķlێĸh—]vŠÕjRĘŽŽŽwŋûŨ§žzj__߃>xà 7˜ˇļmsgŗŲ4ēSąVJÍÎÎ6(Š–,YrņÅtĐAûîģīžđ…×ŋūõĻvéŌĨFũŌÛÛëyŪÔÔÔŧģÎÍ7ß|Ī=÷ŦYŗfŸ}ö9ūøãEŠ—c.Ôöâ‹/Ūc=ÖŦYĶßßŋûîģ?ûėŗRĘ-[ļ˜+?ŋČ`fĻī83foŧ)Í/3ŗã8ŊŊŊžī+Ĩžķī,Y˛äČ#$ĸ<ĐôãvōdūĄ_å#7m$`[‘Éč€& ­DÛGH!–Z Ĩ„VB)ƖjI;”6H jB4Y„LķÆÄB (ŠlO!­fö6“`Ō,“æš_`Nŗ˜Ûŋcū6A:A—›×~‚tÂ] w%ČÆ”Ž…“—p>A6!7!7áŧŌyOÁUœUœUH›!!a'ÂJČ1ã˙LUŗ¤ķƒŖSHČKį{ĩtĘÍ(&?ĻLLn,ܘ‚˜‚XZ‰pę-ŨmyšfŦĻgâJÉöü\O=9ŊŌĪÖâx|Ļ9Sgv?;˜čž„ ÉD@‘­8PœU:¯ØoŸ$Ų퇹Pæ_u~îĖ]E“xÅ|ØNĸSt&'§{{ē])M÷õöj…Ÿüč›)NŌŽt€VU×-›3šlĩÖP$Áؖ‚akmąŌŠlīđØLWī‚ŠRYŠÔûO˙TŊ‚~˙TĮO§Đ)íNN×/Y=9Uĩė\ĨŌōĶš7âëūí†3]/8唯ŧũíĢ>ø@ĪÁY¸æä“=d˙°ŲHģÂaMŦ¤#ˇŽUzzW՛QЕŸŪ:R˙‡øéu×ŋ=Hģĩ™x ¯lôÅ đëĩZOŋęįkĩ’%7Øjĩ<߲œpd|há`ŗéFÕA)e-zĻØījÍ㍞âǍEęTCD“,Ēž#5r°Õ´‚”Ÿ¨ZĐÅĨrE¸ƒŗåZWÁiVg{ ÕéI[6ˆšļP`ėhJXÖÖėmŅÎIæâžį5NÉ6“¯š=í9€K@´Û—ĻCmģUK“†Œˆ­?ĢD§ŋhŦZĩę͟ūô‰'ž85nî؄×ūPø&:)Ĩâ86MÕFeĖwÆŦ‡ŋŅųˆƒZ­fcæÄ’$˛ŦWEÕb$uČ0/:ĀĪî83i5…„„€H„`H3zˆ*ÕR_ß@+ŦÆĒ‚TaēŲåÁ8¨„–JČ%••Ę“J*å ŌhĨœîŦß3[ ŸzâÉųø#âīÎöÚgWqĩŌėé^Fvi*.æž|뉇ūÍڟãŦæ÷Ū5Ų^ÜėûæUßûÕzØV눺Ī>Ļ^-ũãEŧīÔ×īųē}SūčĮ/Íwã#įŊÃÂŋôÍ-#HŦ^ŽĶß÷ÎHMnÕßŋųÖGĮč$–툞÷Úå˗üm||ņž{ėízš‡úõ'?ųÄM7ž|Û-ˇŨ|K̐Ež€ž~\ø‰ˇ˙äžû¯ŋqĢRđ<ū†â 'ü­“ž’įž~ã!‡,āáccčĘá.:lųōŽé™čī?qûAoÜīčãW[Vkj<úæå?ŸÂØ^ˇ }đÃī—ŪĶ™ŧüÚ×=ņ[ėŋ_pôŅG,Č6ÃP$$7ĩbąˇ4U˙ÖÕ?~ōqöÆâĐÛWpRąâĒâŠkqJ‘ED§:čā÷ßN’¤ˇ§ÛÜÔ˛]=-GŸpό_M¯ ÃĩÆ0ϐ=EL—  l–"0ÚĻėsėˆ2>Âqčë+4+%3´eI‹)%I„­ÔĻÍ[¯ũ×ĩ›†Đۃ=^—¯ˇPoÅͨÚĶ/H7Z­›oŧeĒ„o|cëUßŧe˙×ãƒgGˇšUĸpŅ֑æÅ_ŧáąį°÷>xũ~{”[Čödfg&pû=?ŊģaYĐ1Ū~âāūîšíŅ^ļĢ^Ę}éËßyōwŸÆâŦŗ×ŧ0´ĩ+ˇė‚_ú†÷zpũožß€ÕĢpöŲožū'?üÉŨ[Z!Ū|Lú´Ķ›­$ĄålÚ:üŗŸ>xßŋ#åâu{áäSÖø™üģß{í1Į­ēoŨŗ“#čÍác>dɂT6Ä͊`ÃŧA`&mĘī=§ËÜļę†˙"ëģ­ŨÜÉKķŗ˙â_!ˆuįĢ˙E…BaŪ1=Nŋĸĩ\•s­MĸÖļ„Ūu]­ĩI%cæVĢåûžI×2íρ¸Ųlúž?11ŅÛÛ ~5ÖûlAdfGĻŌiÂÖéÔⅯcTË3ÃļmÖ&†Ĩ!€œįēvubkH"%S~‚Œ’+jj7W%ĩ45ĩH„‚$1XF‰'ÂđhåßīųŪ矎\‡ė\đņUËWô’PŌōēzz” ļ ĪÜ}į˙~OË&|ņ3Ÿ_ņÚ=WLU7÷t-|ßi×ûR}ú×íŊËߝyÉg>˙ãĢŽ:įø“FžôՇžūŊúŲŋo™Ā?ūV‘*ūũ'/(œôžÕšLî_¯ŧ÷’žūË_=c|bäÛ×ŨAį}ôĐũß°į#>”)¤ë-•ÎcáŌg‘lÖĶųūîž' ÅE'œ|Ú=÷^qî÷Yž|°¯ŋŜČĖ/9ŠĢGlzqäüsîÛi×-û4Xšš­‡¸ķŽŸēø°ÅK{īũÉ#ŋđį_ũįC-]=6 'b ‡žúõôu§ŪÖ[]ŲuËwščĸĢ?éQŌUo?ųāũ__tũ ī?ãÆE qČa ÷ߡÅË{„E“3ãš\ņCįŸōĢž|ôąg>õéÛmo~ķĸCÛ'›ëiÖ&][ņīųH; žƒ:€RJaj<Ļ"•ÍfÃzÅtbn?1||õ2f§`žzZŊ,vŪ’FųÕâ*A.@ÆÃSOüfé‚Āĩ]h4q*ô—NLĮ×|륁…øä§Ūļehäë—?ØŨƒîĶĻĄŲY´ÂŠBÁ9éoY˙ۛ?ŽįˆÃUIĢŲ(…ĒĩpQĪTiĸTÛúŅOÜ÷ÚŊíĪ\vô3Ī=˙õ¯ũVc3SŽØy÷•ûĐĩxQ×ÔÔĖĮĪ˙yžˇxāĸžF”\ö[6mÄ5ן]o”.ģô†/_ō͝^vōČPyr ˇŨū›K¯:–eë Ÿ[ûŠOßšĮžÖ—ūų„ÍC?÷šõ+w~|ß}÷­TfŋûŨ§\ōõC¤pŋôş^wŨOßæéÍÖŨûėy~Ķîģî|éŋqå뎚ú]ĨņĮjWÍÉøØh°Čv;T!0žéÍfĶķKN|oØ0z÷ŋžę_ļėą+Î9ëˆ|Ÿĩ: žƒ:ø}0• ĖęŋYÆmԚiĪun%ŒŧKÉ,î¸ųķŊîđĐSB&žī3,Í6ÄdK'-8UE‘ãd§gjž$q5gt…ĩqŽ)¤-mÖnŌøØėŋÙg–˛Ĩ‹¯9â…+ޜ(MOö÷ödŌH9n­\Ųaųâé ŖÕhæŗžälMLĪ&P3ÕĘæq\|ō;aM/_ĩė°Ã“ĩ?{%ˆVŦŪŲwķQ8™ÎvtØâGÛ´rĪ<'üŗûqûÍ×[C(:ũī=é×lŪ¤‹+vJ-\¸¸P,Ô[å5köšâĘ˙8õ='ģÚ9ŋ4ßģŪu ͖ļĸÂŋŨpXŽÛW‘zĮģwûÄG?ûܞl€#ße§+7m|ņ¸c{īoÚ´qķ‚ū\ØĒ Á[€$Xtü_ŒÄsļ3q[–ÕĄīü'xž†ĄuÍÖķŧršŦĩ. žį?Ķ2aūÄčgĖČėēnĩZ•Đ)číīFWHRQ­•ÄĐ Į˜AŖ]VĄö(>×ō97ĩ|ŠFÆt¤Ą› °­ŲƒôččHŦąx1vŨu×ÁÁ*ĄzÔR‹ũ­VĢZo5ę­D#›Å‚…‹wŪõ5D“CÃ[üL:Ķ•mFÕjĩj\uÕ5ŗU”kXšŽ‹(ÔqŦöŨwīÛ~tīÁP.“ˇ¤eÛn:…ķĪŋ.“GĨō˜ŠĖ”Ē3އŊöÛuã‹OģķŽ°›Ífāes8ŅĶ“S*ŌŲtЕtRž)Ĩlؒ ö7ęŗ]ųė-ßŋųÅĄÍ?ž+ZŧĩVíhŽÂVڃ †Ō˖í€8WŠ Šĸžb¯ŽŅĒ×R–¤Ŋ8īŧë-@­Œ‰ž<ĘĨQÛeÄ:åtģļã;zé’ūŌô`ßoĮU„‘-/fsIĄé^Ø7<4Ķj?ÕŊķĒe[GļlŪĩ°e͆Å}+˙gÚađtĐAI’$IR.—¤3ūKîÛšs¤\O×Ģ[s餐sZåjS‘d؀X ЈB[ļĘĩ™Ā%‘”zķŲr9Ę{Šji$ŸļĢ͆°Ü´4Z<>>VĢ5rė¸l§ ›ŪēËęŊXß5P\:99]Aĩ ö-ßŧax°‚ũ¨ø§?Y÷­o7-đŠO/s%lģKÚaĢ^Yēüĩ^|ÆOw+Ũ|`ŨS?šķąÍÃŌhT°p)zvüå}$ĀģŪû÷ŨũhEkpS›œČę™į[sôkfĘ3Ŋ}ųD1Ąw ÷ųMė˛z§ ‹ĮŸ|vÁĸ]Ÿ}nˆb_BŊÕ ĶĀđđ¨ŽáYNŊ\ííęyq˛;ƒ%‹—=]ČB´ƒĢŒä\Ļ7u¤.1R†aĮąįy–e]uį˛tđ_~UĘå˛ã8žī›ŪhãßojíĻyÚķ<.V*•ēēēæé~;7—pßmNaŧŧņJ[&+•îžĸeIp5*3Ž”–œoŌ Š`ij'ÖI‘nVŖŽŽbŖQąŪ:“˙žkĒ jZDmÉ´[ õŽwīđ1ĩ§Û˛îį^}åŖË—âØcöÜ{ߝĮĮĮŨ”NgÅ[O8ā 7ÆO=žåg÷ŦũüWÖîģŪú–ũzēē{3,Õā‚n|ōĸwwõšĖqiēÖÕÕÕ¨Ī82¸ņ†{ßx`°ūąÚS?ąûģÔĘ5•ā;ß9Ãrë™LĀڙ˜ëéķb]/Uđ›GXŊËrÅIRČį3•‚$î/v˙îÉgĒtį˛ALO!nÕ[zŗ^Ũ°ņÅ̝|ūŧ v?ųKĨ´īúáÃC›ļ¸ļ՛)ZYk=ļuÔQĸË—&̈ y—ģr~mb ˇŨvŧÕ8’žØą\ ē7ûɸkl8šûžuŋū~÷ ;į~xŲNĢ—7I"Õ´Ÿ}ŧ*ũͯŸ¸ûŽ_ŒO`÷=qÆß Ŧ\ĩ¨§+íV‡ÁwĐA¯€VĢåĖÁøltwwHÚHÛÕÉJ`)T ŠŖY/ĨüŠMåÉ-Ŗšl*%-EÃfXiÁ“J2%ŲŦ'f&‡˜Ų’”ödŖ>ø.4—Ë%ĮëîČĪԛŗU”ËÕ­[Į|?Úę lŨ<ÚÛÛëYȧ “cSvāÁž%ũžîūˇ{‘kšnZÖÊÍC5ß{1to~qũŌw|ĸ6a 4Iizúk_}ė‚ķŨkīĶA×?íûõÖĖđČØāÂĨÅÂŗ—~õSåÖ#ŊŊAÆ]ZŠ/Ų!ĒVųĒÕÉŪžeĶSļLúzQ.ĪÚÂ}æ™įt‚bą¤ŪžBĘEŖŅ$)Å*NŠ=(vg-‰|Ö ›ĩ”đŖVŗTÅÖ­[-lVgį? ĻNéũ/ŽëēŽ›$IĮƸÆ$%uŽLķ0ŧÜX$0ļ?ŲlV)ebŗ&''ûúúL’@ĩZ5ôŨ¤‡úžīyžBhí`Ėðérߎm˛¨+*äĒ[‡G¤š ãXu?•˛„•$ CBChdŒeüLvLMIo QČŲŲžÁžHY`Îéæ ‹4H†ŠgzzäŌŖö8ō°ƒÆ‡šO˙î…u÷Ž˙âWÖ_úĩ×,ČĒZKiŨĶŨģ˙+wÛmEĘÍũė'?ŋâō‡ÃgŸŗbį×îāģrÍņ¯ßū×ŋ}ÛvŪe§$-ķĢûöÜsī^÷íÉ \üŲ3öķģoŋåĨ ģözí.ģīö‹/}éĒ÷öư;S¯77n|}v^ŊĶĒՏŨ|ËÃ^œ‹ęņ؆ņŨwÛ}ķĻWîˆ7ŧpčĄ?õäSwßņd# kĶÍĘNĢPĢĖpŌ´,[<āH,_<¸zÅōgžyî7oYŊ3R–l Ŋu LžÚkߎŨ÷X}͡nęëÁęU;0H*ĒHô)û¨#ņå/üāŨīYšĶĒŨ†žņÅMĪąbŅ–á?ŧéWë~†Eƒ8ę¨]>sņ Û Y'„$N§˛ĨÉúē{ŧūßĸ7ŧo;n§%ËdŌ9NÔLĪJxßAŧrAČ80Ôjĩl6kčûÖą‘žū^MÛˇMfĻĮË5¤’-— vT\DŊ9+Y&ä0$‘`Ō &ύg‚|=L2é ZĢÛļÅēe“UoVē =­FĢÕŦxY?›Īõ5R˖áŽģtĘÉīŠĸäöÛõS(vĀJ%°9Rô{+ŗØøÂ†ÃŪxđÔøÄLe&ߕĢכd9‹,éī{øÚkūå§0:4qĮčIčP[lI`Éⅎtž~ęÉ˙øÕÆW“—rĶ.åsøŪ÷Ž:õ´C}ĪžÛ´iĶ333Ŋ^ˇoeõĘ8%B73A<3Všöš÷Ø´ų…¨Äŗ’§ú{h§pÉŎđƒo˛eúÚ+īŨuRnŊQ…-âB֝œŲaų"ČdũRiĘŗšæ—æra;øŋ(ĖK#,Ë2, sm‹‹ĶÁ^>ķ´“ŽŧęÆĢ.Ŋ˙ųīO9xÃAXļ¨pÛ-ŅußYS¯ũîđ7îļņų§žúÅõkīøû ŽûŪMˇ}îS÷jĀuqČĄ˜ė˙âįŧė˛ĩ§ŸöSßFũ]]ƒ=;īˆ]xĪ/îûKâĐÃü‘- Ĩę]šü1ŗëWžôäw|˙5ģâÔ÷øöˇ;ŸúÔ]ũw% Ö‰É)´šŗžo‹8ė°ĨW|ãūéŌũиācģįķ~ŗŲLg‘Ímų™ĀzįI‡Ü}×ēķĪyN%Ī-ęÃĀŧūõK˛é›ßė{L*—ëvovvŌ'‡uB’’(N’ÄK9¯Ųmųõ‡/ņüĀsSv JU'ÆĮ˜ëŨųÜ+ŽwÜ$;蠃6ų°,ËÜBLŊ´„B´ũŅFöáQøÕĪ.šzh° RT3ŠTJ)8š¤"Ą €–Ú˛u*åĻĢfĸ‘ō=ĨCpĸâ†¤Ø˛(ŽcaYädÆK•BīĸM›Įžuå¯7ŊˆBGVŧōęŠ;tZE^øŨC*ūíņo-•ĻFGGžøOŋŽ",[ŽË/˙Ä䨝’õfͲ c#øŌ—oĄH`םŠwÜ9uĶ­'Δ&õĀswüp$›E:‡ kŒ%_øō RĘF)ķíkŽ{āĄˆ€ŒŊ÷Áߝõ7åRå?ū˓Nź-̇•Gyöģ׍~ķĘ÷Ž/]ēäŧ\ūÚ=pō;Ž‹ãx|lú†{čÁØsOœsîÛÂX}ôŖˇžé¨ž#ŽØĪĩåč–Ų3Îŧ÷î­U Áœ[PĸuZ°$¨?^@7 ĨeÜq“üÃĸ^¯[–ex<3w|$˙œņ§r“43ŊyûČmŋ$žį5›Mŗs>6™MĘī|ž/eîŋõ˙¤1ŧŊGĨČNŠJu&äU¤tLž—‰š‰˜ }×ÄLš €…BÖ}Ī­UT3ÔųbĪXÕ;ō„ģ\‡oxWŠÆęŠj"XĒ”Ĩ„Å1‹0´j1Kú¤,NlßÍ[äT+”ãÆI(Č"6„T­V¨éʔt•ĻˍzŧpҊŌd+ČęĒ”œËÕæėlyŦЕ ŖēcûļL•jÍFĩ6Ķ××3=Uöƒ4(ĒTĘ]]=VKsœN{ĩZŠ<‘ļ„ ÃēãŲNʞ)—ŗŲŽzŖåXŠ8RĖä§,p4==ēhq_ŠT´īσVĢdÛļcåâ$l6ƃ —4ōA:;Qzސķ]'ÛhÔ]‘×ęjáĸ‡~ģ`pq­dA§Į҉ŖÃŒí*m?§y:IrĶDD°ÁžeYÕŲiĮ—žk×[uG:‰\’NØ#•ä2žt9jÕã8tȤ~›d‡ÁwĐAĐZ'Ibl‰ĩÖZk˲˜ô*úX ˆZq_>•&üāēķ34’Ō?*ΌĨĶžnyXŠ$4iŠ…Hā9ŪDi:Čįŧ´_ŠÎú)*BŌ4‡V‰°˛lMFÎ aŦ‹į~|é}€4ąž;턠˜4 ™]茆dŠhX DPĐ`×ŧ ÃRp•ĐBT H[ A $ EHHÛBe@V@Ą&bvĄō`ĐMČYˆ&h*íše@s‰ĄU5 –Đ(aĢ(h°ū¨~ßA§nôNfÍÄäU™ ˇëēÆđҰ##O˙ÚÎŪeÛv>ŸŸ5ÔKkíûž‰Ķ2ŋÕjY–•$‰q™LĨRDÔå⾛OJch;¨'BkĄÁ–ĐFúbšPۃ¨&Í"abM HKæ”bŠĨN\XАUƒz;îzŠđ››Îpi¤‘šMd,ĩmiXh&ÂM‚¸\šÉg3™tzbbÂą\I–įÕjUXŌqœŠR)N§D–-œz­™ÍæëĩŲŽB6lVZaÅō­ĐŅ$@M`Đ-°*ļ ĒČšũcr”v$€EIŠaO „Đ>Ø5q(``ĸ‹Q“EHĐL -i—a“ļĻ5"!ĸŽ|tđ ĩ(Įq’$!""˛,Ë(ã™dé9Čßŋ×m†`Ā÷_dU­”ō]Ö-­ĩ ĄČ!H‚­¤ÔĉØyJĮ*œ™­ÆIä:AبųŽM ‹H–$,‚($R€9-C(ŊÔ­€AĻĸ  f -bÁØeŌ Y6é„ā0ˆ¨.Ą‰cCĮlŌąĸhŌŽĐ Ēk脅–H43¸f@ƒÃöÃ\4ŽįēQCpȤ$C´H61ÅsYKh›˛ĩ#TÕ˙ëāū?†”-aæOlîWP°æœE;žū÷Œ{Lí|-œ™ ]Ū–åĪSę?ˆČÔ͏žī—ËåųÚ?sŦbą855eÎĶMšņŲ”Z₹ũō,Ō„b!ډoÔn—ŸŖī’53k$ŠĄĨąEÚ!ļ -Ō lúe/j$‘ X  [ ßÍDõxĒ>IZ§\Ô*%Ö5€,ōl™ĘĨ3QDĩ0–b͎o§ũœ¤VŖQOâJ:miÕJ{†Ír)v?›I“´›ÍĒ눰5%“Ö­ZĖBĻmËs8nEõ™ˆyÖqR]™œ”˛ŅhĖÎĖdƒ (abDCyw–Íq\ÕĒU­´€Äą…VM& Ū&/$ĄX@ JĀ(iX` ¤%DÄ ŠÁBH3’Gí{‹š|ØŒĻ €˜@íX‚)b€LĘhS_ßAĀäš•bĨ€ŲŲŲūū~˛:K‰mӈš5S›áFÅ÷,։ÖZ“ĐŠXk­ J¨pŧT‹Ąũ 9šM IDAT đ|;ÅNĘvÃFSÃ,‰-°‰… KSƒT{8ˆ!Xƒ˜´ņ|ĩfC÷!ÛæÆXHR`@ûš t€ ´Ĩ $L ą4(dƒA Ô í€5(„Đ‚…fLˆ@ÕvŲ XCĪO{ę@ 2ûĀą&ĀŽ0BI›c[)|{fŌAüQ ĩ6é§D¤”š72ôŨuŨ0 Ís­uķœûŋ fŽÕjfVÍf+•ŠĄõFBĶĶĶ399é8ŽĄīétē^¯›S ‚ I’VĢ•Ëå¸\ļ•pˇ{ž¯Iģ`&´Wöxž6˜9J4)PÂs5"baCģ  @éļo¤hiŠYĻËíĖ8h?āV\IBá{ĻTĮAÆŅh.Z4°exŖ˛YDcãŊ=‹ŌAfjrÖMu+Ī”Ŗ[‡Ōž_čv™f˕ Į*$J€(“íJ9]ÕzØhļ\ĪŽĩjAÚí*t•gĢq9Ž—J‰™ÉŅžâ`%q:Ž7cK ;—U:2ë S ˆ9‰cĪKKŲLwØŦ‚¤mĄZŠ[ļÔĻŽNJ°B;POƒZít›Õ]A jjĸŊßTmäÜ3´sm CÜ[B„ ¤ŨūĢmĀ›KÚFûJBƒBPŖ]`bģÃā;蠃W€)ę˜{3K)ûûûMŊ ōĻ€đûˇ ­“ÍšamŒ…ĶÃĶS•ÉÁž|ĢȰÚ4›‚ ōųÉŠQM‚\7Žã°ŲŒ#%,—ŲK°%X2YB dR°&F8. ‰!ôü˜iödĘCŌÄÚn/}˛€ļ$$@Z2ŽR€Á `ŠßZ 1ã5ĻŪî+MER°Đ 5™1˜´QãĖ­LÄ,âųũfš@B† NâUé”ūĮЊ;*šū÷ƒˆ\×Ũŧys&“Á\ƒé|Q#“ÉĖWĘëõēISúCÚX™šŽkÔ;ÍfĶqœééiŗßp÷$I2™LŗŲŒãxž=ēZ­æ-hŌÛīZe¨"Ŋdŧíbš›"ˆn˙''h@ bÁhŠ/û@“ļ˜æw“°4M ĄŽ´NX¤ĘŗõĄáÍĢVíĐ ëŗ•rĄ;SøÂƍ+Wí:1VΊŲloĢ،#ÕjÕĩÕ‘Ží‡aÜŖ8J˜×/ödĮGˇÖëIŖYRЋŅ–e%ējģÖøXIJ;åŗįÚ*ļÃ0ÖŦ,ÛRmWCßįO^§ŧ”VĒR­yžW¯ÎJ ]…Œã8ŦŋžõŧäÖhCŠÍ‹°†ĐąÛūέi´Í1ˆÁI{Y•B@6X֜ޯ@Hŋ´ ŲađtĐÁvA)Ĩ”2TŪtMmŲ˛yŅĸ¯†b&‰ŽJ ‚‘P2]Š%R¤˛ųJ¤Ã„SŸ“\š"Ø˖•fŌl†Đ”!™Îä“J° ķËhh° ÖēÍāˇAģƒĮte ØH<]˜Š>K“”D:RĐ6 X˜UN›H r@Ø™M$ €eû8¤´ąQƒdm_˜IƒÁ°É°Á`ŌfŋžÛ/Ä\ŠF ļ‹Ģ]ŋa ķ㟎¯ĄM.ŖÔmĪ$4Íį6vĐÁ˙Øļ]ĢՌWŖY{4ƎĻ9Šĸ(Š´Z-¨ô‡r÷7MGSSSÅbŅŦ|šžZ×uM˜@†žī›Ú|’$aŸßy%ĩ Gâí<¨ÔÂM ÍJ%‰Fûí˜æ"ė65B•ŌėBKRļ@LėĪi-˜3/0KŽC4B7AĘõ9‘QCĪڎĨŨ´åeúƒZÃŽÕ¤íeĢašĐ#탘Ēŋāv Œ•&…ļƒt7élŊŎŸķüîé UČõĻqᇞzúéķ?ō‹rÂBœĀš›3ėąÎ8wpõN ËõRK5ûŠūŋ˙âą{×=2>…™Y28č î[ūöĐXáĸĪŪ~ČA}Įŋk:[øĖ~ž˙=2Đ] ’ē¯bŽu¨’Čļ@˜~Ķ—†h–™ Û¨GãĶW_ũČöKíĩ÷ëŌž“ĪåÂF€`ŌB #ĪÔŌđd†Ëļ–’ÖLzŽQÕ¨­Õ枴ë2ēŊšĒ3ØLœ ÚÁÛ4—ūņ˛J ąßAmĐ/39!ˆ#ļbÛ!ĮZĩvŨuEŊ:Ũŗ`X€G°'Ŋí%ā[ˆHBÂmęGsrL9WÉ!€%b!Á‹ņõ¯öä\€p872H häeMúsĒŅ^æöÚVæ3“Ö¤E{šĄ4ī—öJ0“ ĄÁ¤…KÁō%ą#ؚŗ_Ú"Q&ŖíiįŅBCsŖhĪiH /%ÚļOx^lCķf8/ÕoŒęŧÍã;Ĩî:øãBņÛģķ IōĢ>āß÷~ŋĖŦŦŖĢģ§ģgfO-ËŽ$YFâļ1æË"pŒV8dB!ėĀa‚?đ„ą°q`ƒ#0–‰pذ`FØØ8Ā؆X‹ÄŽvggįčŗŽŦ<~īų_VuõÎ3xŊ=Ķķ>Q‘[[]=]SŲ“ųęåûŊ7bę=ۊéö@ĮĻēŨnWU™96|š~n–eŖŅ(Îa9øŠĮfž‡‡‡ëëëĻĶéōEėEƒE&žŠYŠŪėK , Õbõ€ĪXš^āXä(6ę%°2¨&ž€Ú‰y%šZ×bƤq¨ÁņØ&5ĀĐ´Ēņ%îžŋņÎoĖ;ÍG?ú?>ü~ė§w{ų¯}áŸ}ũ'ŸüxpáÂÎĨ§÷¸÷‘ũ¯vĘJÕäŸũķõõÎÛ˙Ę7ö;ÉáčįÎTU5›Mv.^Tu?ũØc?ķ͇oúĖôīürææh˙đ7?ü[đŋ˙Ÿ˙Åe…@iš¯Æ‡oūŧOøÕ¤Ŋę¨(悺tĀ —ķ ¨KƊi/Ÿ249!M†Ŋáš+×ĐPŪ[ߑPeFĖÚa‘ļg%^¤,¤mß58>Ķâlļ8]ÄS› ZtVXíL@˛XW$7äDÚË‚—n4dŧ1w] /Ž-mXí@4åÎN_klôPOán:ëÄhËŊKĄP5tõ@@ÛV×ÃöĻp.Å´ĀĪ ßxÕŦ~"E™Hé,¯ xY3cĖjÛ-YÆÄ*$)Į Ĩ— \[¯æå+@¸FÛ‹™1Ŗ_ ]TšÄŗpl†!uņ§01)˜„‹¯ōō> ̉ ,T/öņ̈]&•ÛËŋÍ+Ž_%Vʁ@m-g5gåx¸ČŠ/Į'-;˛Į;ą>„č—ëįÆŪ_yžĮĐ|9gų„žˆķ›T5Š/,Äg_ô5īŊųn’Ņ¤¨tPEę!%DŸ“ūmoԌ@ A\Ęēėá[p8s˜9Ė„9M…ĢõM¤QĐ'ķŽŨëōW?ôÖúŋđŸ>øąĪ~ËũäfëGÚËx-?ęø§&ŗfNƒąž˛d7áj{XäägÕÎÆų+×GIgø÷žåsđŽw}ÃĩŨ'īŊg§ØÄŖŸū%ŨžNĮ—ŗyžgsE˙?üō'ž^ķęǚũȏ=öģ˙>ĮĢÄwŋį”fîŨīūˇox.]ÆSŸÂÆ:žíÛžôՏ>üž÷ŊīÉgņŪ;ø7?ķs=Œŋ÷Ŋ__O÷“xü‡€‹Zę–pĖŨrüxXyķ ˇE•TxŅ råxëg‰ŗÖq)Îb=ņKåq,‚7æ.$̇ĩ j .xÆŦáÂūéū͡œ×9ß\% '+'mg¯ŽŲĸ‹zsN$m´,ædÃŊą{÷wū‹ũL+xFÁHđŦLĘJí¨‹ûLqb&ÕsŽ’ĪÉsķqúäyBÚæäͰģą(ÄKnq|ĐįļÅäsvʉžļ`ԘŗÉ93ÅĢ{{{Ŋ^/†õĪûüeךx`4;wnoo¯ŧÅü j\¸˙á+OŽų$Ūō ß8—ĻO“L.^ŧīOŊáÍ?ņūßfOięf&Ķ0OTö;+>ͨ)övąŅ­S?īfU=/2t)~ę‰K¯ã[~ū—ūëū>ūÂ[?7˚ĩž+&×××7v÷T]šu Ēyg°ģ?­ižyx$÷{{Õũũüáˇī\ėŧ÷˙Đ÷}˙ûŋ÷{žÅ#kŋ˙‡øūx{–ä?ûØ/üø˙įŋ˙_ķ•_õuúÕ÷Ŋį=o~íëŪØČž8‘%ūĢųŠ6Ģ"xnÎč†c5ãäIgåÄ7}ú’žoŧ1–vĶņ5žöå<:Mp@g)+æ3<ôĀÅÎô“ &‹ŽZ/ĩåF}[ Ø~mŸƒElēacëĮd˜o_/f;;ÛsMģkÛ  (ŠAI™•OŽ2ƘŗÁĮE´ũ~_DâÚŲ ßąāgKŅp8|üņĮc [9ô $荨Ú<ßEųūũæÍĩq7ÛN8amĢ Ahœ‚BĻ?V4#I•LSčUÖĮ‰Eš 2 ōī‡ĀíŽĪŨî`4+x聎ûíƒŖŅÚf.Œášs;÷<8Ÿ—L‰üzok0Āú:úũ5)÷ëJCBUũõkW÷ÚŪŠ˙øĮ?ņÆ7" U‰ŨĢ—î͎Xą˛TķEļD¸Rš,ˇģi1hIŌ•t„JR*ŧ"“ũŨëIîŽasũ\¨vÛõøē\Tj;ĐsÔuŨétʲdæ8Ręúõë;;;/ôüØ+,Že;Ä/ŋŲ -*ęŽe °5fūÂõÕJljŗ Šgd@2il[ޚ ÎÅ J]—‡*ę´]ŠO=…‡_×Ŧm†ĻŠ›IUU—¯^žäƒ>§~<Åh<žÎĢĸâ ė¯ī5ūŽöņßūžOO_ÁpˆÍ!öŽ^ÖϏü4^ûš‡ŠûīŲž—¸ōĖGGGũ‰W98¸z߅f2šŗrEÁsWņ Črß2,nĒ*IŌÔQYÎō¤–¯Øts ŊŲ~ÃJ"ä”(NiÅÉKzęˇ_%qRēŊNãNæĒĻ `>ÃîŗW77™ĀĢĢ…„uéÆs'‹kg$IËi^$|Đī÷cE~Y–ƒÁ ÖŌÄŅ{ˇöƒûŊzŽ’ÅîŦØ\ëA3/:šc’Øq„…Ā5IˇŪô!&]XJĸ¤]H)(%‹2›FHåöÔĸWŽî^¸§9í_)~˙ī5uhŌ|–˛īt:ëDMBžįˍĐÍûÚĀė÷v6ˇú¯}ôĩįˇ~īC˙ņ7îšxžš—u]ÃŊÃÃ4ËˇĪŸĢk<ųä¯{ĶÖC=( ōœ_÷č#)ė˙î]*n6ŋ>úf>ÛŪŲGĪãúĩ§ŪôÆ×ÅŅĩ+O3°1ėlmöÁsČ][îõŨö‹dŧ1w‘¸Ę“â0Ō•4|¯—Æ5:‰c¨H ŧįz^0f7ŲMmÁ_<âĢ-§v/V—Æ)N‹8Á$Œ'ķ°ąųĐŦĘ: zy—eĖˤL VKŋcÎfžĪį1Ą^×ĩˆ$Iō"+e›Ļ‰M~Ķ4‹_ãH×[š0ˆ…PHĻ#—&č@¨žÕBĸĐĀĐØ#Kƒo2­3/âX"Q!(‰GÛ„sMZS4åÜ1w’ôūö˙Õ]ūČGņŨßķeŽd^–›-/_ž4čɈŲ'šcÂtŒēœo­÷&Ŗj6›ųíííI1Í:ko{Ûö>p=K~ækŋæKևkųČG~ũÏŋņMƒ7˙é/ÜØD¯ŸlŦž~ę÷ö°ŊŲķÔ|ūįāũĀžį;ŋuØOĘŲÁĶO} zOŋߝŒ%B:īv܃÷īt<ęr2žĪļ6ņą~âu¯Ŋŋ“u×y3›ZoŒšMÃ÷ÅHĐåĮ‹uŽFGŊUÔëf€rÂAÚIŌ /]­  ŠÚšĄęY}S¨ƒzhl()qT—3üæo\ûĐ/ü\Sáž{ņųoÁw|ûg~ög=R§Ÿ<ŧzXÎđÁ_ŧú‹ũ{]ôIüŅ˙ĸÍuln`2ŲĪ\ÎfvŪ]ßŋēžyĪd6~ëW}ųũ÷ūî/}đcīxû Āũ¯Âį}>įsŪ|xpPÕ2S­Ģjrū<Æã+iúŽüÕĪũ•ūÖßų[?ųĖU<úîģīxĮšaØë`­į§ŖkÎ%ĶŅ$48ÜģüĐCŊík^ũŪ÷~ü÷ūׯ=ôiøkßú†íáÆõ‹Dą‰Ō˛™‘÷~ŲGÉs– 4ö|F;SP8ŧ^eiŪ_KŽ\}j¸ļ‘f~<:`Oy–*a:žom_¨ŠP7`ĸĸœõ{Éîūĩn×ol fŖ1ŨN…šNô O§S"][[‹s§.gūQ#€â4Šg’§ĀtŠ4MYAtÜz}÷[ƒEcĖYøäpĨ­L„Ŋŗ˙R”Kqi˜7zÉ|ülʍOhrpŊ—mCæNXĘĻãTÃŧ*fÛ[Ũ ŗb˛”  É:\ĖGy× æUUn ;!ĖĘZŧ×ē™)‡,! •s@Ęę ‡TÎ÷AĄÛ́iQÔÃĩ ˜W%:+I…yĮOÆû¤^áD&ZWÅÚ 'Ē'ã#žĶ2DÁswynUA„ PÖ ę]č•ĢH€î¨ŧū ­Lņyņ­—Ž^}õĢ Ą~öĘeHYĘų,LšĸvÔ(Į’%ŧ{y÷ ?؍fU/1klFl탌1wšXø¯`12öÖk%œCˇA fĶb­“­+™õēA” a¯$Ŧ‰WŸÄĩLĢU4ėI}b}Ŗā¸&“q(5Ŗt”´QŦM†Šƒāĩ L"„†4Î1ˆŖ¯Iâɉ„IA`VaAÃĐ8eO€† Ą„Ɓ‚ˍ„ :…Đ´ ¤‚ÅČžEÄĄt§uJ°ۘģ&ņs2ā^Bpė˜üt:îõ’­s(FxúŠg/fŪãfķC¸ĶÛ|üSWëĻčt˛ĩ^?HÉä*Ō„ũņKPX”4Ÿ7ÁZ’AšWTí€ÄÍa1ģ'hPJ}ĸkĨ1ÆÜEšĻ)Ë2Îgĩ=‚•ŦBžČWĶzîtpM9ĄĖ•Õ´Igã0… •¸’5ķMÖŠ3/¤JäãJV|┠h„ (ŗD%ĄN¤b4 Ēĸ ÔÄÎ;‚9HƒY a4€tņQ ņ H€ˆĖÄB Äŧ`@h#xFXN3%>žl—€­NĐhŗX&€ÜĄÉ"‹āšģ‚øãP~%ߐ$n÷`´šąÖë ‹ņîĩ=$ĀÎų‡ôč@pŗ-‡…(ë÷‹ŲäÜš~å§._ÚØlnßķėå§ķ<_Åk›‰p`9SˇaRĐÚpĢŦ`Z ÖÔÎUee!Ģĸ1ÆÜuŧ÷išVUģIˆ]äo) Ī€*˜“Ēš; Tĩv˜Āšä H ԓäŪ%]f/7v“”*ˁ“åmã`M€ęvaĢÆV ĒAŌŽĄ‰qš:€A j×bÅiRtbBļĀ€ŠdâYEU ņ,ļ8´gąã“-ų¤Đㆠ‹ėž @ ÜЛølzfŧ1w‘ĘÁ ā|L>œS ĪqũpŪ ÃôĻS—į[ãrˇ:pŨŪfÚīNë&yM,•c˜õ¸~sgsw6×Ų\˜¤?ĀxŒÉt´Ö“åa—´ÍÍ[oŒš M&“˜€s[›ĻQÕ$InuĸŠy’öÖP÷€­nŪLį.ÉįRVBŦĘBƒiˆÖSšÂ­LtR()´RW¨Q04ĻŦ‰€jᆄI9Î (Ō@ĸ´8Ē 8ÖģĖÁˆ78@p"g$“"Ō@@$m'›ļäeĩq/—ŠK­bŠOģ_•?ŧøq‹ĪĘ ;r•EđÆÜEá;ŸČ[Ä#ˆ`m˜•M/#æ%žękŋ+eÜŌĢ pŒ ĐëbV„4A]ƒuå¨ģã'Å660+0/‭ííjö,¨i3%$PˇœeŒ1w•¸ÔuŲĮ{ŋŋŋŋššykK`U¨›ęhTB°;æÍĩmŽ'œ°‚•<ĸÆ„L]hüXX9dЌ$@T2MAGĖ3†Â¤ƒƒkU‚Rė Ė bSĄˆ$0ŗz€ƒˇ™´mLJņÄÔŦ&›H™%aeRVZúę@‚˜´šĄø=ņūsûČsiĪ€áũŰۘģ.Žoƒx:NBĖfĩO’$C'ķeY˛CÖáņTfŠpĶ×iÁ Ãŧ„wa4ŊfS,/öŌĸ#Ŋ.zGHė!pqO_zęü9âÚ&~Î 7ƘģJžįb?x":::zôŅG÷ööū)œ ÷?ŧÁúõīúŠÉ¨w¨ÂqTËmd”B  Ā/nŋô‹9#Ģ]E~IDATĄŊâP‚*Ŧ@€*‰ ‚!HI  \ƒ N$pĖ…3Ģkë*ÛC}e ‚úXÃJÜ^š‰ÅúœÅyAŊB@Ę _9_0”ãL‘E&čyN|‹ĢŌâÕ“EđƘÛ;_$āAXë'íbŸY–uĶJŽnę/=“5AMZŽņ°øųŸ˙žķ›ŲĶO˙Ņ=wĻã>>j ĀŦĶęy§36έ=ũĖå ;Bu÷ęS÷^č„j—Āví˜WšķÚcĖË!ÎmͲ,.]][[ÛÛÛË<|s ×HĄIpõŌ'ķ8:Bę!áDøŽ•ā+ mņ Đ ÉN™õ€ŖEFf9r[HA3ƒ@Ę,Lp|aĶ Ų!9.˜\ÔĪÄ„ŽCīåÅØÅC‹ ēŌđ`ĩĒ^)ާZ| į‹ā1Æcî$J(}pTßäķÂ œĐ ,ķb<@ eõ‹tĄâ„ „8€$8æ Tƒ‚pÃmEĨąŪcŒ1ÆŧBÛRũĻžŦė\ÛK€eĩ¤2>Hqæ‘.*L _ԝĮy|ËûË1Ũ^J,ˆˇŪcŒ1ÆîâVP#Ä YFøDĸˆ“˜tņ-XūYYI•mĨ’EđÆcŒ1æĨ(P;)o:vŌ†cwuhĮ*ů (Ą”Ä Rņ.¤ĸ ¤PˇũiŌaJH°@Ûš|b;,‚7ÆcŒ1/‘CčωFÃ",AÁ“Äx<–Áŗ”DÉ D`U ʕ Õ{/ŌjŠ{ûa O EņÁcŒ1Æ@QŊ^o>Ÿ÷ûũø‚瀛­ƒ‡TyĒŖņáZ=4ĨÔÔÍUQ2{( A "Ē$í¨%*áĻY?›ŒÆE)ë[Ûãņ<4'ĒAąÕz‰PåÄÄScŧ1ÆcĖ]Ģiš^¯ nëē OĖÄŦÂKo™§“ÃÍĩA¨ë”ŲįŽœ<\Âhšā$æā(ŽteašÎge]mŽ_Ŧ§•TJY›ĩ§°¨|'€…<qũĢUÄŋ’Ŧī1ÆcĖmĘ{`<E If Ú@•›ÛIŗn§?<šÎĻķ Ņ2ÉÄûÚûĘ%Uâī$qđLžÉqįüöëërĢŽļf“\ÃÚ w):eÄĄĢēēÖŌ/†ŊÆcŒ1ˇ§ũũũÍÍÍÁ`˙ˇ( B… 1 /šUāúūhæļüār8ĒĢYsPÎģãæ’ ā…ĘĐd^õÂl'tļēî?š^ĐÄĄvęeVau‰p 6 w §āĀrüoß9 Aī rčęÁbw‹ā1w˛ūų‹‡ 0šåÛ÷|Ölri´ģ›%iĮ¯‘$ĐD  m/ ŠåāOéäOõ3ģ{ÎQÚß×Čo}âÉũ¤ƒ1ÚVq° $Æcŧ1æl#€P#W_ņ˙ļRd æEû]éVĀYz÷Tw—'ˆ" ßÁd;Âņ “ZÄ"zcŒąŪs !ÉMB] ˜M@ŠråújŒŨœXHxšæ f¤¨ ,1-Áj„š•ŨB‹°Ũ>kcŒEđÆ˜ŗF 5đôÕgÖžQĖf{ŨNBœĄaH éÄįA Ę)ŧ0ŦŠæô>pÁ‘9ÁÁ'u Č'š,zÔ҉”ģí&cŒąŪs‘CwĀûĶkŊnˇÛ/ĘYš€Čš¤ƒeũ ÅL|Ŧāđdƒ@N .S@ Äđí>Nfâ1ÆXoŒ9{dVMō4öW÷/_Ø<Ÿek"ę\Ē'įu+¨˜É’ģ§ĻŦĀDP`6¯ķNR†2s ĄA;!}Ņ^QŧÅōÆcŧ1æ,¤]…|aķ 0ûÆôÕ@ԋ/´ˆmûJn}’÷yīw é:jp(¯>&ëüiŒ1ˇ Ë~c^fx‡Ä!adŒ Č ā—K! AB'ēĢmOc+XĖh"€Đ‚Cã ÍqŦŽ+7cŒ1ˇËÁc^ž žķøddPŦÆāiåā㐠lûĘoD•å ˛Ō5R ÎbwcŒąŪsĻé‹ æŖÅüqũŒŽ|¯m_ų- ĩ˙#+;ˇE~VūnŒ1ÁcÎ*ZYō¨' eNDęĢąģ9ŝsíĮQûÉ\ÄĐįyØcĖŠŗ:xcĖËRģ0Uéx H@ ¨iĩŽÖfmOi @—év×Ū4&€ŧ‚• „°¸ŲĮ.cŒšMXŪķrPPĀbŠÅh•ÖxPrœƒ'€ ĻOiËĐ៍ĩėû ˆ´Ũ?cËxļŧ1ÆXoŒ9Sŧž(§^„õËhpUGŠ-“<ÍO\7Ž‹ŊSƜ h\ƒŒŲ ՁÕʉ, †J f;<Ÿ%AČ$Ŧš"QâÅÉ3œEđÆ˜— S[WÍ|\P휸>^i ŨĶE/øđbĮ°[Š”'Û_ÆÜšá;U@™ž1ĒyŖawtym-mTĄIĘĘ øŠeÎņbāO‡jđd*.6ķ,ëīÎt<&pC‹ā1/[ŋÜŽÔkđÍ}—šmc{ļ9NÆÜųĒŌ´˙ŧŨ{Ķũ ;÷NÆĪBŠ8†Y‰E…W8.ƒ8ĩ$üi‚›ĒšĀq>ø´ŧn4Ágŗ^û€4 ‘ĒĒ*€Ļiŧ÷"ÂlįTcŒ1ƜŨ”ķķÆ?qKDT5~éŽ˙Û E':ë)Ué$‹§,ĀčĸāFŦũÔi}ŪRôęęÄŲÚō—wfĄ‚UŅcŒ1Ɯq&4ȡ_Í{Ü­dæę†đ]Ā PąK¤§F1mÁéb§āō.ØįeSŽfkVEcŒ1ÆsļBÂ44 _ę5‡Đ0ģN†e Åõ/p VB [Č~JžūdĶxŦYFi ĻĶŌ>^cŒ1ƜmMšÕGՕ‡{“+ŠÂu=XĖ rÂhXk A ę@ļ}åˇ Ô@É8,q}Ŧ*F>$—ĄöÆŨ~f9xcŒ1ƘŗMe?M2ė÷Į崗õęĒé¤ŨØhjQEÃą–ÆÅvãâ  "ÛžŌ[ƜDÁi.yÎ ¨”€ Y’Ŧo°•ŦÆcŒšëÜU+YMĀŧAåá+ wËy•weYgY‚Eüĸ^H…­ˆæô~;e&īŨŦžu“nĐāÉĀeSv|g^U–ƒ7ÆcŒ9ã!ĄC‡1\Î  ›ft’VÆt´“”a­hN q×; N“¨Aq֊*¸ëvŌÔ"xcŒ1Ƙ3‚¸Ø\Fŗ°WVąōņ”f>~Üļ¯ä–HÚîã+§Ŧ0`‹ā1ÆcÎ6YÜøD\¸đ‰Ä!( 8ÄYŦŲ˛,Ūļ¯đÖÁĄI Éņĩ:—M%XoŒ1Æsæ1tĨ°]Ÿ'ž_FõŦVŠ4icy:Qāmī,‚7ÆcŒ9ûá;°Ŧĸyž¯ōJL(“Ú›vz¤Ũ-m´N'Cy,‚7ÆcŒ9ûhģķķņĢÄEŦËZy˛í+žēŽÁ/3ņíĩ‹ā1ÆcÎ6DÛŧē€x%ށA|ŧÂ5îl‘ôŠm• ‚€Û'áãjļ•ŦÆcŒ1gŸļ…ÕX´š‰5 @!>ŽĐXd|Û.“ļ}Ŏ‚F AĨŊj"f€aŧEđÆcŒšë¤iZ–eŧ?™Lúũž÷~>Ÿw:8ÎÉ9@DT5>r'‹†P Ū€NŸgYVEžįu]'IˇöĻ™Û‡EęÆcŒšëÄ´zaŋi"ęt:ŗŲLUŊ÷bz>ÖĪĚxc,‚7ÆcŒ95ą<Æ9ˇšš™$I§Ķ !¨ęîînŒ×ĢĒ*ŠĸiUĩÚcŧ1ÆcĖ) yžĪf3""ĸ$IöööDdkk ĀááašĻyž'Iëí3ˇ̃7ÆcĖŨÅ;Ãáp4]ģvmkkĢĒ*ī}Œ‚b<€˛,ŗ,ŗwĖÜvŧŊ ÆcŒšĢ¨j\ˇÃĮ–đöļ˜;…­Ė0ÆcĖ]g0L§Ķápxũúõ¸Œõčč¨ĶéØ;cîVÚeŒ1ƘģŽĒVUBčvģĶé4ļ’ !XÛsGøŋY5 mųÜûIENDŽB`‚dlt-daemon-2.18.6/doc/images/dlt_message_flow.png000066400000000000000000001465451377520261000217140ustar00rootroot00000000000000‰PNG  IHDRÅo5;§$sRGBŽÎégAMAą üa pHYsÃÃĮo¨dĖúIDATx^íŊŒ×uįi@“qâh$ŞeĢ˙ Ä d8 3͘•Ė1Ā]gÚá” ė°-qxã´âĶČ3Ķ„ąt%ĀģaW‚ÜĪ V< 'î“gž 7!1DqÄÁ§ëĐ+äAČŗ>(Ķ Ѕĸ¸ =î…@+҃.g !9Dqä @÷!€X!ú @žõA™6 .Å]čq/ €X ˆt<ķ H¸Č Š#OēÄ 9ĐōŦĘ´t!€(îB{!ÄJAô  ä™AÂEDNQyĐ} Vȁ>g}PĻ @  DqzÜ  Vĸ] Ī<.B rˆâČ€îCąBôA€<ëƒ2m@] ŠģĐã^@ą@=čyæAp‘@Gžtˆr äY”ičBQ܅÷B ˆ•‚čAČ3‚„‹ˆœĸ8ō û@Ŧ} Īú L€@ˆâ.ô¸@ŦDē ķ,ûŅîæ˙åāŦk˛.æmxĐm\„<"€(ö(X¸ Å&¨bŗH@2Ī$m)@ãŨ €â&€Āˆ;ū}õž<ë‹4í@m °Rܖ÷A ˆ•@éx7$ķLŌ–ãØpč‘ĸ¸GØ4 0\ŒJx>I晤­đHĶ#@ -Dq[r܁@ 0 ¤ãŨĖ3I[ŽcÃ=@ GˆâaĶ\$€Āp1*áų$™g’ļÂ#M ļÅmÉq!€Ā$ŽwƒÍ@@{$\„€I “tąĖ3I[D€Āxž 7FÜņīĢ÷’y&i̝ūĶ ā>VŠŨBĀ(†QŧO g¤ ā:DąëÂ?&ā´XŲŪRëˋjaaĄđŗ¨ö¯>­—Õõ>ۗ×Õō’ZŨxšė¯ęÚÆšZœ˛Yl#ų÷ōēēŧ]€Ųmč{^VĢK3m­Sæ%ķLŌ–Sp°JQl?CĀ>§F*ŠW7Ôĩ T×Ôå/Ģ“+{ÕâʓjķꍉŋÎŦî×6Ôęₚn§:>ķÛ@įéI晤-û# W Š]‰~@§FĨ(Na]˙ŽZ×ÂøĐ@]É­čÎŦEņöUuqpR­$"|´ŽWŊ×ÕÆåIŲ¯Ž_VëĢjļĸŊ¸ĸN.ĒĢeũŧđ_տЕdõģjuÜRr嚕Ė3I[öÉā ā Dą+‘ĀX"ā´Ā˜'ŠfeØ]Q|C]Q‹‹‡ÔúV*‚‘<´‹kjãZĒx‡b)ËuųēūŨvĸ‘ju˙]j˙ÉÍqÉȨŸ{ÕĘę¯ĢSW’ĢÜ}I晤-w‰á Đ7DqßÄiŽpZ`ÔÅĒägEqV#]ŦU–o,Ēåõ­DØnjžķ"y˜3éīPë—_ũf(Š›•}ØJ?É<ûƒ?øĨíåmf˙Î~WüˇîwÕ5ļ˜Đ. āDą[ņĀôN@RŦˆ;š(ΞĶĨĘĖĐ+­oŠį‰‘(ÎÄ´8}Qƒ’yæĒ-Q`ƒz'€(î9 BĀ-’CŧgÁ‰â„Đõ-5X]ÎÕ'ģh|5W+\šãÆN ōhE9[)FwÉ;§ķŋKĮ¸hLQÜ7@ ,N‹‚:ĸxĸô`gË'rŠŗ}õĸúęā÷†;h ¸Û\mč]4ęô9ĩÃJqXc‘Ū@v Šíō§uX'āˇ(N@ģx*ŲĄa§ÎÖ5Q\g›ˇí+uh\S\+ˇXEąä q:˙%;Š-@`.Dņ\D\° 8- 歚^ßT'÷/ZŲ’Mmŋ¨‡’íāĻöPNẆBˇ°EÚ°?ûĻ™čgö Ũ5¸2Ŋ˙ō•3jk¸#å#Ķéü—č 6 ÚÅĩQq!Â$ā´(˜yxĮz˛EY"ˆs"1‹PåCQ:žÉ–h'ŋžnĻ{C]Ŋxv´}Úڅ‰}…•zU]DÁ|F\Ņ€džšjĢ;%,@6 ŠmŌ§m8@@R`8Đ\p”€džšjËQô¸Ô$€(Ž ŠË *-0øA9 5†$Eą”O؁ü'€(ö?†ôhqúĸ⧃Ą€|„ŸF f.žØ.FŸ `‡€›ŗ”´ ( Š› ]ßôÉÛÔīHÉŪw›zŖÄAQ,)d%mE9ĐiDQP0é ڐÅO ÖÕģR5õßEu÷ĘĶęĪ^UO5XuyõZN˙ēųoW •ėîTw|āĮÔ-ŸüĄÉ•éĪŪŦn˙‰ Ūī¸CŨūŋŪĸŪôŲļ+Ų?ĸnÛw§ZxĮ[Ô-ŸšInEQÜfxr Đ#Dq°i .ÅKjųôËĶe›WÕÚŖĢęî…ęūŗ¯QĻ!.ŠwŨĄn[ 7}ōVu{™@ÍDņÔ*îŠ7ũ̎¨ˇīZPwūô­-WxSQüˇĢ›[ ëAî¨(vqLâ `‡ĸØwZ…€3Œ‹âáęđËęØĘ’Z¸w]ßĖ—+lĢ/6ÔÁ•åņjéî'Õá’Uå§Î_T‡Ž¨ŨéĒęî§ÔŅÁĩ‘Čūæ†ZŪŗ¨ŪõČÖÔjôhģB°ˇ\šîKkvW“R-r?pŗē)+c¨ÅZŒĻĸvBh§+ŌSâ;[Š~ģēũČŠ›ŽÜŽî,ŽZ^>áĖ@Ä@Ā:DąõāėčUīYSĮžšŽ'‚øÜuĪžeĩ|bK}q(P¯Šã'ÖĻW•ŸÛT÷/-Š{ū–z|(ĒĶëöQ‡ŸŊ1ŨģW6Ô&„îëęø#¨…‰v›×K9lˆâ…ŧ8­#Š'Vzë‰â҃sî¯KŽjŠ%ib ~@û?ŧ‡@g}ŠâIŅ:Z=ž˛ÅUåmõ…Ķkjwq•ysKŧw1Ŋ?ŊĻ(~'Žé.†3qÜŋ(Nj‹ūČN}oĨ(~ŖēųįuųÄÛÕ[?ūÚzā°Dऐ•´Õy0b°JQl?CĀ>ãĸ8Š)ūĖÃIŲÞCęāš´Üa\ōPVÖP¸Uâš r‡%“öFĨ¨ƒƒ×Ek™ûÅēĻø-īNz{wRߛčmփv wǎāę‰ÅU# Ql¸BQėJ$đ–ȉâĒŨ'’ōˆGęXV˙›–7ĖŪąBÛJÅlíÕŪĸxNK'Ļę˜ģ¯‹‹âĒŨ'ôN?{Û¤ Ö%3Ę'ÆįMiDąĨáEŗ€€GÅ W!`‚€œ(.Žú&5ÃgOUî:Qû¸Úĸ8m/+ĄŪwWéÃw]ˇ{ÅSĀũ°ē姓­ÚĒļE›YSœ=œ—/šKKŽVŠ%ib ~@û?ŧ‡@gæDą^‘}U­= –NŠĩį˛ėŌ•Ú;FLŠÖĒ+JV|‡Bxßpk8SĨÚ7ķĸ8ļŸšUŊ59@ŖtkĩZĸ8Ym?œ–(–˛’ļ:F @V Š­â§qØ'`Vīl—v÷ŅÍt‡‰LĖĻå¨ĪMlĶĻËŠ{ųNz}“‡čF%ģWžĻ>Ŗw0P:Ņ›(~ä&õƃw$e$Ňæf—O”oãļcKoŊļsQ/^QĀĻ €€DąHĖ@ĀWæEq":7_T‡?´7Ų/8ÛW8ĸ]ī(?äãtZƒ<ĩ7ąĸ8Æ#1›”BüĶ7īŨPōpŪ#;§Ũ •ÖÛļũüÍęMéj4+ÅžŽ`ü†¤ ŠĨHbžÅ]\ķí~š•â’ãŗSëBû¯ā1Ī’Cō I𨂀ßÅ~Įī!ЙĀPāņƒr s˛Ļ$…Ŧ¤-Šūa°CQl‡;­Bs<˙üķę‰'ž€S?ü°ētéRƒ;üŧTRČJÚō“&^CD1šˆ=ö˜Úģw¯¨oĄ;wîœŌ?Ąŋ¤r,tNôhFQ܌WCsH–×^{m\ÎÃʧTR?^éŧęČ×ú­q% ā2DąËŅÁ7xH@BdčŌ‰ŦΙŠúIđ /(]BúK"Į2F’ļBįN˙ :DqčĻđ€^íĖD1%õ˜­°×ŋÃĪ+%…Ŧ¤-?iâ5 0ū @’犌|éD&Œ)Ą¨!ÍL3 ųÕ5ĮBfCß öX)nĪŽ;!]Kžt‚Šæ)ĻË't¯zēækŊV¸ đĸ؇(á#<"ĐUdäK'(ĄhxÍO?pĮ́ŽųZ¯Ž‚| €(ö!JøH”•NPBŅ,ø1lË&)d%m5‹WCŽ@ģü€į爌˛Ō‰LŗÕXŊÄĐõץī@Ņ%ĮęQä*@ FˆâŖNŸ!`@ÁRV:‘‰â “‹Ž'~đÁ%L9kŖKŽ9Û)ƒŦ@[@ ,]K^—ũŋ^Iæ5Ÿ@—ˎÖ° +žô] ŠģĐã^@`Š@[‘ĄŋöŸ'Š)Ą¨—pzoį—^zŠŪÅ^Õ6ĮĘē*iËC”¸ ä ŠI@Ā úäēyĸ˜ŠzĄ }[6I!+iĢ^t¸ p•ĸØÕČā<%ĐVdčÕÍ:ĸ˜Šų‰ņĖ3Ī(Ŋ E¨¯ļ9*úČ@ËpÄ  Ȅ­ūg^ä˙ ›:B8Mņaŧ üŦļĘļz›į_ģu¯)öąNÛmîŠcˇÎ5MÛ.‹eY;RmK6ļ$MlAĀoˆbŋã‡÷‚ĀG?úŅZĢęXkzŒą^9Õ?ąŧô]ˇe‹E,ÆŌĪXrŸ~B  DqzÜ ˆ¸õÖ[‰â&%¯ŧōĘĐvW‘(ŌŅžŒč‡ėt9J—W,b1–~vÉî…@,ÅąDš~BĀQƒÁ ‘ Ö"ĻÉ.Ų|]EĸŖø*Ũę*öēŪī/ü… €(& g tfŲ*qVvĄ˙ËKāĄË(Úžē˛oÛ.÷A°EQl‹<íBs tfÅmŪēˆÄšÎ:v.Ņ{?ˇ}ueßļŨžī‹ĨŸ}sĨ=øHQėcÔđ‘č"XŠĢÄÚVČ۔SB÷ĩKģ°÷)=cé§O1ÁWØ"€(ļEžv!šē–˛Ã@šÔ"ĪuÎņ Ο?ߨöēØ.ėG3á^,ũô)&ø [ÅļČĶ. 0—@[ÁRļJŦmé:ÛX^]ˇekË>žôĸ8ŧ˜Ō#C ­0›udt0pæt$;°¤mÛ˛o۞­ûbé§-ž´ Ÿ Š}ŠžB 2mKÕ*qļELÛé>7=č$Ką6ė}LĪXúéclđ}@÷Mœö ÚÚ–YĢÄÚ^“ƒ?j;ęč…zŠļÚ°wÃLˇb駏ąÁgôMQÜ7qڃjh*Xæ­k{1÷Ŧ,ÔÜĩy5eßĻ î āDąKŅĀ@`‚@Sa6o•Xۋé¸į.Û˛5eīkęÆŌO_ãƒßč“ĸ¸OÚ´4"ĐD°ÔY%Ööb:îYŪŅöC@ö‚ęØÅąôĶ1ė¸' Š NAš@ÁRg•8{Ø.–ãžu=qÛm蚰÷9[cé§Ī1ÂwôEQÜiځČDl&ĢūũžéËėÎkK˙ũĪ˙ü·‚Ŋ‰uėJ\3AąLÎëOߊmĪģĮ•ļ'&7@A@V:0Ô]Åģ÷Ū{'DęįË/|yųM¤ û|;:mVĒ›øĘĩ€$ Š%(b0B ‹0k[6PėHYͲOĸX?d§kz›žē°ĪˇÅCvMÉs= `‹ĸØyڅæč"ĖÚ>`VtJ×âķIëū´áØæž˛€ōŨÜ4į@ĀˆbG€Ā4.ÂLBŒé¯ũËvĩđMkaßtŠ.ėŗHōŖđ‰ĸاhá+"#ĐE˜ušWcÎļ_+Åz Ÿ^mJēōĶ|xČΧ,ÁW@QL@Îh+Ė´ mŗíZ"ŋũZÕūĮÎB+qŦÍÃnmŲį›oĶŽO\ņ‹ĸ8ŦxŌE ­0ëēBŠ÷˜wˆO õVtMOákË>ĪĨÍ ĩO\ņ‹ĸ8ŦxŌE ­0ë˛BŠõˆâøbN!⠁ļÂL¯ŠęŊ…›žšŨÔļÍëu9HS–M¯/ö‡ėlFœļ!6Åm¨q Đ ļÂŦívlúž:ĢÄmũęZE#Úg-Žëžēöąk K]?š€€DąIė@âÚ ŗĻP;^ĩũZÚéū5ũ Đ–}–]JXÄ ƒ€j@׀Ä%€€m„Y›R}ę[Ũâė:;DÚˇĒKJôwu_mØįmķ]]Ō\¸BQėJ$đ˜"ĐF˜ĩy¨L‹bŊã„Ū¸Ž8ö-\MWnÛ°Ī3á!;ß2!D198K 0ĶĢĄZāļ}iŦdŲņÎyÁÜô„¸ļūHŨ×´Æˇ ûĖW˛“Šv > Šû¤M[€@#m„YĶŅYŨrË-ęņĮîņĢW>}ÅM4iÃ>cŲT€7J .† `ˆĸØXĖBŨ ´fRĩŦZDsÖŋûÄ'>1\EömĨXGŖ Ī&×#-ųÁ¤{a€@=ˆâzœ¸ °@ 0“ŦZü某^zĩ[—‡ÔyĩaŸŲíūÁäoÕåßūgjaaaÆĪ’úā7^5ų7_RĢ‹ j×§7Ô_ŅđūĖņí-õŸ×ĢĮîŸäÚ]Tw}ō´:õíŋR_×@Ū@{:‡@øÚŗ6÷”‘ÔĢÄ>ŽĪƊ&Û˛uáØũ!ģLÔ> Vˇ^ŸŸč•ĸ¸æũI ÛWžVŋōŪ]j×Áęġ¯ėāD(oūî!up×.u×§žĄļļįģÀ€ŸÅ~Æ ¯!ĻÂL¯‚Kڀ õA1Ŋō­Kęŧš˛ĪlʰëYo_Rđąĸv=ôę{Ĩĸ÷īÕõ??Ŧö/,Ēw>ŊŊqâxHQėaĐpąh*ĖÚlĮVÆ˛ëŽÆG âē%!MŲg}–yČŽOQü÷ęÚ7~F-.Ė[UūKĩņË?Ž×ԗū†åbWsŋ Ѕĸ¸ =î…Œh*˚ˆžYŽë2ƒõõuŖ}ŗaŧɇ†ĻėŗūČŗŲũ!;mŠÆƒrųÛ6ڍīOW€k‹bJ(ęä×@ĀGˆbŖÖ—ĪÛĪŠõ÷íšũøøĨdĨŅũ;ÚūÁĒ/Ÿ9¤V’§Éwž>_VüÍ˙SũánôÕ{Úq€@SaÖäA˛Ēîébm'ÔW]Ļu¯+ręū]^Ī+iH[īô ĸ8Ô\§_hJQܔXL×gĸvî Š†2C×ē_Ûø;õWßøšäa–Ŋę=ŋöûX åß˙ĩ÷$uËęgžņt‰$› 3 AĻOÃĶ5ÅĄžęnYהŊæ%ķ]ßĸ˜ō‰Ps~A )DqSb1]ßŗ(Ū~é„zh×;Õ{˙/+Dī_Š‹ŋņ“ÉęņäęŅŽ`ÎV–õĒō7Ôˇ˙–‡a|O×ĻÂŦéõe|$„ĩËÜë–7´a)ķ]ßĸ8ŲŽmkU-ķ Ëi‹oč…ĸ¸Ėž6ŌĢ(ŽųfņkŌl+ĨƒĪ¨įŽDđö•/ĢĪ'›īīläī)Ünt[ĶcŒËđ–bZę>×F×ĩ=ŸiŸÚéI#Ũ’-7Lú˜lÉöŨ_Mö*žõĄ}~¯¸p›ĸØíøØõŽOQœ´õü/˙¸Æ “Û"VxŠžÔŨbÉ.^ZŸO ‰0“XĨ ņģ"e]rß}÷ͅ߄}fŦî*ôÜÆĮÚõQS<ōfüaēōđŽwĒ÷üÆķŪ1?x\o ŠŊ ]Ž×xPng5ļŨƒvãû“āO''FÍß?ÅŲWŲĘņÁSęéī]ë MôI ‰0“XĨ ņģbŧęnËք}ֆ\éIĪ+ÅYJyÖĪ8ü{ŽyîsāĶ,@[īEŗ}ގÅIõņõīŸPŸNŽgíTĄë‰70/lž“M„™^ũ랎p“íĘæ{îîŲ–sķąúīԕįŸTŋ;ŪĘmQŨõŠođU§į™ØD˜uŨŽ-ÔSėĘR@sˇsöē ‰ōĪĶ÷!Ī Š= Q÷ûÅY áŧíÛĻö#-#ä˙øĶ5Žm5Jãšŗ:Bo–Kz̞.+ÍŨíÍDMØkĮ%ĘWz@C€J ŠI‹jŊŠâäA—tKļ÷üöS˙_ŠW­žúŊj׎_R'^⥴{ߎ_Q_ú›Éí×FāqĢīé]W˜Õ- ¨âō)ve}ÖĨ&ķöbŽË>ŗ/÷īY‹˙€€¯ÅžFŽŋ{ÅÃÃ;žũo†ÛUŪąk×AuøÛĩŗņõ:qī?Vw}ōÜΞÄÛßSüŠwĒ…ũ§ÔĻÛ´õ‹6ä ÔfuĢō0ôSėŠũŽŗĒ[—}f[î!;ų<Â" :Åu(ÅzMīĸxēô˜įÅučLų1ĪÛ?¨õŖ‰>h§ĻOċ5„ž÷ģŽ0ëZ\gåÔw–y˙ëÔ˙Öe¯íō]HŲA_ /Dqŧą§įpž@]aVgåsVgc[åŦsĐI]öšk‘í|˛á  =Dqô)¸K Ž0ëRĪĒŪŸ8ļ×<ļķūžįÕõCIlėé/ ā&Dą›qÁ+@ !PW˜é#ôęg›W §Ø•qŅĢãzoæĒW]öúū.JfĮ,=ÄcŪŽ4mßđžŅÃģÕ'ėMŽŲ¨üŦĄ3\!€(6‚Ŗ€€ēÂŦîue>ÅpŠ]YŋįmËÖ„Ššō“äˇß1<ér;™ŋsĪ;Ôŋņ˛Dj5´1:ąs×ûÖÕˇ'7ēÛŠ'ŠG"į$Іnp9 `”ĸØ(^ŒC]ÔfzĩŗmųC,§Ø•Å@¯ë˛‡ĒWöú^ŖŲ Oēŧ_­nŊŽÔđ˙ßmIīˆķŋ¯VOŽŠGw™¸æ ŠÍąÅ2 Б@aÖe;ļŽģVtėžÕÛĩ Ö¸Ģ(6÷]ē:ģëSęw÷ƒÉa<Ųî2É×ԗūĮ%ĩūž]‰Āü#õŊ˙üŲŖŪ“jôļÛûmõõ_{OzŸŪ‘æŲÜļĪ•ßĢ‰ęĪĻOÂ, ōëĪŠsão’Ķ3?yF}û˙ú7IyÅâpU{(œ‹åéÁC;ģ䰏ēÕ@ã(!€(&- g ÔÅķÄŨŦÎÅtŠ]‘ÃŧuØk›æ˛Ë—lËķō¤ĸs×GR>~~$dŗ=Ę?ŦŪķžŸWĢßģ–üōīÕõīūj˛˙ųŽiÁēoYŊįŋŸŠåėēwĒ÷ūū_îė…ŽÍæ Úž¤ūāc˙Dí:øŒzn¸zrß÷O¨O}øjß,QŦaÕ:‘ĶŲáˆcžĸ8ø t0yķų?ū—ŧķ†"`˛‰ųŨÔû ŗ]ëÜÕ?:Âl^@•׹bWä0¯t¤{mĶØCv5ÄŖUã2Q<\5Ÿh™]—[ąÕNfúĶę¯s˙^X<2>sħlŽ™Ŧ.?-ŗ¤Ũ˛íÅũO"´Å `E{ižŽĪęÃ.Ru}ívŊ!æžÆøJ79`äw7 _ŊÎx3Ÿ˛Ŗŋ†=­Nü§īWs_ÖfķĢĸÛ)vefņ­Ã^Û4õŨän3ÆŅÄÎ%×åEpvmåΊ(Îī21ą(ŲŸŪ…ĸÖrDq|“=öŠĸØĢpŲpļđÔĩ͇]ōâŧE­7&Õäa—ŋV[ôĢęđŲ†_§NŲû‘Q­ëõ‘ĶŸúFNWŋ™O?lķ×ęûøoÕã?§ŋš}R ~p#×ËŋT_?~Lũ읯%˜ëŗļĸ,ļSėʆĖŦ­ėę°7÷]qˇ‡žDq‰č˜wRŅ<ą:="[kîAÛxŖMÔ&€(Ž*Ö 3ų õ˙ŋžœ|ØåŋõËÉĘiōĀČ˙õ˙¨˙ōÔÕūôī#Q÷ēēūŊߊŧáÃ%ú¨æ?Ú¯‚Žŋ†,Üģ°UũęŸ]™¨éĶu{Ã-‘vũĘÎWĨ&vŲŪR~ö°úāĪũĻúŌw˙füjQŦ/)[Ej"ŠĶfŽ˙ąú-ŒúõŊ‰íŸūN]ųö ĩöÁ_PĢĪîp 93ëŗ:ה1j+ĻCâ=ĢôĄWsŲ?¸ÚÅÅyQRūĶ ŠÉ‰ŲæÔõDâ^õ?ũĪ+ęgŋūƒŅję•§Õ¯ŧ7y*ü#Õ{ūåĶéÃ(É*čé÷&ĸzįkĮL`žã'VũĖČV@G×íÚõKĨĩ~ãÕUSģTˆá ŌlQœ­åŸ*o!ŠĮĢNUO§įÄņŲ?Ÿ~R> œž'ĖęW\†#ÖSėŠ,f=$7Ŋļeė!ģŠo¤úÅEŅ[įˆâ€Ļē)ˆb’b&‰§ŽĮ+Ą;b-Ģą,Ŋ‘,N*> 2žˇ¸"Zö`_Ą–Yüa—dûĻoüæÕ;?|B==|bŊüÕËJąnēø`PŠ;#qükīũ™’Zæ0{ž0k[ë)vÅŦĐ[Ōé2’˛×<öúSŲMÎ;ē%CĸxĒ "ģrĩĮÅCĘOļKÆâüéäC˙Œ-Ųt7(ŸcbĸÁ@Z‰ŽŸÄž~c*‰éKá §xmĨĀ,yĻüĄ™‡]ʅ}SQ<ږiXSüšÍ܃ríVŠë‰âĖĮrŪ`ÛÆ—>,×đAģ‰-Ų’įžũo’­Ûvļd+ĀßRũŌĘ{ÕGĘļ}Ë?XëÃŽíQGûˆ—ĸ8ŪØ×čyqˇ‡žDqú ÜÂøÍ¤øĐ¯0­Wė>‘ÔB¯N•3˜ÅŦëUNŊZÜä5o+˛&ļ|ŋ6ۖŽÍJąą‡ėĒļ€Ėö >ˇ| ūîĀą3OTŦ(ë_ôøßOǝ}+wđ‡>ŧãËY)WõÛ?¨õÂáĪįÉäÄŊ’Ŋ'vĮH„÷7~.}öĸ°mœīɄ˙€ĸ8€ ëBē>#+ÅSĸ¸ĮēžŽ5ÅĶąh)Їėso°†Š)Îp´ŲŽ-æSėĒįĮÅ×ŧ•bsŲ›Ņv WnÉÖCÛ48KQėlhl;V˛ÛCeMqqÅCĻ|b\§<%Î ŦqˇÚ}ĸ,fmDqRŠņᇓդbyģO” ˇ2A7kôÄ|Š]—ĒķDqÛŌÛ3Û°}DąaĀ ¸FQėZDœņ§ė€ å jjŋŪÂ*éôC7Ų.%ĸQüa—ēûWŽ…(ž>P'ôî ˛Oq‘°ūú~žp+Ūû)veYZĩ_ķ<ļϞëe D÷‚™F āDąoëËߊēžō$ē­OlÉĻWhã=š-Ų*ęú,=ė2oKļéđ4ʼnvU}Z âƒĪ¤[Ųõp7ۙ%Ėf=$V՛ļģU¸IGÆĢĒßyĸØĖCv2}škQ<@ FˆâŖ^ŖĪåÛé¯ŋ§ūøSīƑ|Ŋ˙kg)Ų§¸›(~įé¯Ģ?Ëüą°Mø~z`FÕC7Ú ģHŠâÃɟ]ODwjŨŦtœ%ĖÚÔsŠŨ4íĒÚāYė=dWcnâ@Ļ ŠM‘Åî\Íæ\“\YÂŦMMĢ×Ģ›†b[uĘ,ö^?dgˆ#f!˙ ŠũĄˇ=@{ēŪŸ%˚ִrŠ]uØĘ8K é-ih€@Kˆâ–⏭;Dqw†Ą[˜%˚ĀÁ)vÕŲĸYęũ›ķ/É$Ąį)ũƒ €(#Ž^öQėeØzuz–0›÷ XŅŅĻ"ē׎ZnŦl[ļY|)Cą0š‡Œ@ÁŠQ@@‚@•0Ķ̚ZäÖ}qŠŨlRz]×h×Y)æ!ģēYĮu€€oÅžE !*QÜt;ļ6;UD„y(ˆĩ0Ž#ŠyČ.ĻĖ ¯ˆ‹ĸ8ŽxĶ[xE J—‰¸YͧØi1Į̜@Ų‡ŒYė‹ĢĘp… DqQ¤”@•0ûčG?:õuNą›Ÿe%Uė›îú1ŋuŽ€ āDąqĀ @ „Ā,aĻW7ëŧô)vúĐ^ŗ YWąį!;2 •ĸ8ÔČŌ/@@B˜qŠ]ŊDĐ%&ųeėyČŽKŽ‚ü$€(ö3nx (T‰â&Ûąą˛Y/UŠeeŒyČŽKŽ‚ü$€(ö3nx (” ŗĒc‰Ë€h§W@yÍ'P<6ģŒ}›ŖĩįˇĖ€Ü €(v#x”(fēFX¯jÖyqŠ]JŖkŠĩ×eėyČŽ>OŽ„ü#€(ö/fx ht]­,;ž8x ;Zܖ­Œ=Ĩ( Ąr9 āDąWáÂYÄE L˜éįôĒæŧ§ØÍ#4ų÷lëēėˇEö@û=|‡@āŠĸ¸n0§ØÍN ũĐÜ<á[÷īZX#Šˆt‘@Ghē  EqŨÃ#Ø:l~´up]á;ë:^€B €(!Šô(Šâ:‡GpŠ]ŊdX-Öû@ķ‚  Dq(‘¤@Qk6o;6NąĢŸ]W‹õ^€B!€(%’ô(Šâ:;OpŠ]ũDČähSFQ÷¨íúŪp% ģÅvųĶ: 0ƒ@^ëęæ}]Ī)vÍĶIסŚ5/@!@‡MúĀäEqíØęîNĻNŨŅ;G4ŨšM—]đ‚ DqhĨ?ˆ@^ëM]/<ëÅ)ví‚ßdĩ˜-ØÚ1æ.@Ā}ˆb÷c„‡ˆ–@^Ī;f˜SėÚ§I“Õbļ`kĪ™;!ˇ ŠŨŽŪA jyQŦėšĩķ§ØuK•:ĢÅķjēģyĀŨ€ė@ÛåOë€Ā yQ<ī@Nąë–JuV‹Ų‚­cî†Ü&€(v;>x¨ äEņŧíØæ‰æ¨AÖėüŦÕbļ`Ģ ‘Ë o ŠŊ ŽC |™Öeú!ēǧØÉä‚^-žå–[Jˇhc 6ÆXÜ%€(v76xč dĸX× ĪZŠä;šT)[-f 69žX‚Ü%€(v76xč dĸX ĩYģpŠ\ĒčÕâų‘¯ß|ķÍJ˙Ž Đ ŠC0ũƒ€Į2QŦĸĶĢÅe/Ną“đ§>õŠą(f 6yžX„Ü$€(v3.x$2Q;fëMÉgføČ°5˙ Šeâ‡@Ā=1ž?^=ņÄĨÖĩ Öį%OĀ֛’|O°øFĀÖüƒ(ö-SđĐãšsį†?e¯Ŋ{÷Ë+xɰõĻ$ß,Bž°5˙ Š}Ëü…@DôĨK'ĘNSĶŋ{đÁ#ĸŅoWmŊ)õÛKZƒ\$`kūAģ˜ ø č‰QīQŦ늋¯gžyFé^fØzS2ĶŦB>°5˙ Š}Ę|…@d˛­zĘē­ÅōK/Ŋ‘ūēkëMŠŋŌ ā*[ķĸØÕŒĀ/@`ŧR\DĄÅ°Ž'æeŽ€­7%s=Â2 ā [ķĸؗ ÁODH Ģ).v}֎b2Ōe[oJF:ƒQ@Ā+ļæDąWi‚ŗˆ‹€žËę†õveßÅEĮlomŊ)™íÖ!ؚůĢË먅……éŸũĢj}đ§ęōõíéønoŠõåEĩ¸ēĄŽ•F˙eĩąēTnwĸ­EĩŧžĨJZHŦļô͇lÄG8B ے-ī§Øõ[oJũôŽV — ؚüŋkjãZ^šnĢë—˙T}åäŠZ\\Q§6¯N ךĸ¸˜ ÛęÚÆšZ\XRĢ/×Ė“T7õ­Ļu.ƒFģOwžāģ~2Ã֛R?ŊŖ@ĀeļæOEqĘkjkũP"Œ¨Á•;ņĩ*ŠįøĻ˙ŧ}U]œT+‹Ų ø^ĩrōë%ĢŪZüo¨õÕåņĒöâĘI5¸˜˙°#Î/lũ™:3ž6ąyę[ęęö5uųŠq[‹+§Ô…ËųõķęęŁ:š˛wF‰Ë—×ÕōđCß°ˇPöĄÄ呆o^ĐcņpNąë'„ļŪ”úé­@.°5˙x.ŠĩĀ,)•pBWøĻ^UOP ûĢĢАŋūĩžˆŌÅCueŧ žâ­3‰˜]Ṽ-u}˜Ŋ‰ĀŦŠũ Ôɋ¯Ļųœ‰âĢ•‡OĻ6Ąģq<šn¯úČƊ:´ūŅũi; Ëëęō°¤‹§’ëōmd÷æÛČDąļwT­åü)ũPâōHÃ7¯”MŒœb×OmŊ)õĶ;Z\&`kūņ_gĩŊų2WDq™o×6ÔębąV9+ßx@­_~=ÍĶQŨķt]tZ=ļYmsĄôcØN˛=žN›-”|Tr*â…)vVë–¸< ņÍ%ēlĸ81rŠ]˛õĻÔ_i p•€­ųQ<Ėɚâ|ŠUÕͰDEmYszíøC@&Šķ‚:ąŸŠâIQ]¸ļT —ˆgMhX>QōāaĨ W‡~ųB@īE\œ9ÅŽŋčŲzS杇´¸JĀÖüƒ(ļ Šˇ¯^TũāÔŽ;Âv$BKvŨ˙.ģļŊ(Ž^åéˆbW§Ž°ũ*NŒœb×_ŧmŊ)õ×CZ‚\%`kū @OÕ_Zg<3ōĻVŠKĘŽ ÔĄ¤|b˙ęYu1Ģ)¯TEqŨ0ÅŽjüęN ?1rŠ]wžM,ØzSjâ#×Ba°5˙ø/НoĒ“ûīšÜOؕšâ)ßǎqm —+¨]–Đ^J,Ęöbžö“•â0'×{•Ÿ9ÅŽßhŲzS귗´¸HĀÖüãš(NwrprKļ2ß*Dņö‹jpHo‰Vō ŨĎ:uĩCj%ÛQb|ˆH‹šb5ûaž|=2ĸØÅi#|Ÿō#§Øõo[oJũö’Ö  ؚ<Åšũ{Šõ­ÂšuVWŠgû6—ËjmãĘčĀ‘ë—Õ…“GÔĄÕ#ÉÖhųr‰lKļlŋa}qŲviVŠKˇd+Ûöí\œ4bđ)›9ÅŽ˙hÛzSęŋ§´¸FĀÖüã‡(.{ā,94âäWfķ\z<´ļUr ]ëíšú6Ūk8}ˆNWŊqY]¯įˇ=kpxĮÄ*s’ŪuvŸŽ‚&‡w°û„kGčūd#§Øõi[oJũ÷”!×ؚÅŽ…  > d#§ØõI}Ԗ­7Ĩū{J‹€€klÍ?ˆb×2 1lbäģū“Â֛R˙=ĨE@Ā5ļæDąk™€?€Ā„(æ;; aëMÉNoip‰€­ųQėRā  0A@OŒœbg')lŊ)Ųé-­B.°5˙ Š]Ę|ĻD1§ØŲI [oJvzKĢ€€KlÍ?ˆb—˛_ )QŦë‰yõOĀ֛R˙=ĨE@Ā5ļæDąk™€?€Ā˜€žŸx⠈$ ËS4į&?įΝ3čĻ!Ø ŠcĪúLĐŖ~Ў—9/ŊôR#AŦcĸīá@ĀDą)˛Ø…ŧ$Ā)vũ…M×m×])Ö×ō‚ `’ĸØ$]l;O ˙†Ŧõīl°ĖģgžâßëØ­sMۆ´ŊSP9ķ6%’cĄ(ČįʼnļûĪsIæUcĶų7*ėĸ¸7Ô4øBĀÖÄč )?›”PP:!E;€@[s?ڑ“€€ŗlMŒÎ1čXŠ|Đ ˜Ž‘c<ƨĪīŗ­ŧ@Ī Wô@ĀÖčĄk4ҁyŅ^Ã[ë”Pœ?žĄU.‡ĀlŒq2¤Œ€­ŧ@“N°5œč˙P]•(ž^™ŪYA~yv¸ęŠâĘëŌ~ë¨S§>L÷'+%™ū‰ģÃļîjQsŨOfښûéÛ­<ņÄŠŌ ˇc„w•€­šQjFyÖ¯f ÅÉ ņĢß=L7ņĀ]N<žZ&‚‹pšˆâ’‡öJ…vIęŠâJ{E\É;m…zļR<õĀaö0âŦ-æRŗŧ˜íhVĀGeü˜a`q¸xŲ´ä÷N—°•ˆbŌ Í@N_{]]IV…wVyˇ¯ ÔĄÅtõ¸D`NÕāfõĩíU­›ÅÕ+Īņ>Kdú])ŠUĩ°v!1šåÅ|Q|úĸRüĀĀTHæĢ ã¯`Öe˙Ú°•ˆb˙r%H› €ŧ(NŠ€S8ĒĄ-ŦĻÅáP0/&5¸gÕÅŦĻ8)ŧ•[Ô)Ÿ˜/ŠwvŊČäKíÖ\)Fī¤xŗŧ@›{Ø­÷AB2_ƒœčK:ŗX"ŨŦŸļōQÜ,N\큂(Î áa9EŽFvBׯÁU™Íü tú°ÚT BåŽî,91j[ˆģzâNí8IæĢS-N@Ā[c Ql)ā4;I Ų(Šâäyąá đ’zøä#É. šß:ĸxûE58¤ˇ>“Y)ތm͕b•–4L ÕQŋw~ŸŽpW=h—ûũøAģâÁ!uŊĨ„m–Ŧ#fۉY)n’ųjiČõŪ,ĖzGîEƒļōQėEz„īdŗ0-Š3!Š÷靓ĨĩĩËjmãĘhˇŠë—Õ…“GÔĄÕ#É.zâl {5ʼnÄ/Ų’íšēũō¤čŪ|QūPN?ˇŠîOōž/ǧ<ÆRķ˜ß#ˇ™÷0kÆ+–Ģmåĸ8– sŧŸ@—Ndĩŗ”P8đîąOqējēyE{hY-,­ĒŊē#ĩP~tUŨŊ°ˇĨ˜ėAsC-īY*ˆâmõ…Ķkj÷ž5uė›ÛŠXžĄ>wâHáwū­KĖc5†FP—Ā,¨pŠuÆV^ ŠÅBˆ!Û˛Ō‰LSBa;"ŨÚįDģ‘(|j°ŽŪĩP–™`L…í„ĀÔÛV_l¨ƒ+‰˜NW–õĒōáŧ¨žX%НŠã§×sĢŌ{“‡Z;cĒÄâŠķÕáŖ+j÷¸SęčāÚ°ũĄđÍ­j/d>WīRīzdkrU¸ę÷­Ûz#ī6Ō¸î°5–ÅîåB”I €Ŧt"ŔPøJ™(~â‰'ÔĨK—:wÆ×Ũ'f‹â˛ÕÔDŸ;ŖîŲŗŦ–OlĨĨ‰Đ=ą–Ŧ*P÷Ÿ}5ˇeĸøšzô‘Cj÷Ԛ:<ˇ‰ũįļÔa-Ž—NŠĩផ]ũûQÉÃ=K=žŠũHÛØsD~V čLO úQĘę˜Sî]WĮ‡öüû‘˜Į:'ēg`æYĀzr×V^ Š{ 0ÍĖ&ĐuäK'(Ą'ÛēæEž„¯ĸøô°ūv¯ZØŗĸîüOÕņŧ0-Ž/Ģc+Kj÷ʆúÂÄßGŋ_‹ÎQ\ZĶáīsĢģŠā- ØájībÚv™(ž-|ĢŗY2_ÃÅfįūX8ÅÖO[c Q[Ļ9Úߎ X:A …ŖnčV×ŧBWk/ĢŖš2……¤ŽøžŖŋ§Ÿ(ÉUÂ6[š—ZEqY­o&F‹BģJxįÅk™(ž}_ķUqˇÄ˛dž6*Ū^3oCgÔq[y(6VŒ÷E X:A E_äÍĩ“í-,Ղˇ+ÅĢŊēŪ÷̉ūJŽ^8_&‘Õ īėP‘ß­bô˙YéBQg˙žqoļ2<ą"\%LKDņŧûĻV¤ŨŊķJ:lŊ‘Kė@ĀļÆĸؕ ˆÜ. Ŧt‚ ˙*Ģ)ŽŗŨZŪ†!Š "1؁â3ëŨvjtë¯ļVˆâЇöJ„é<¤lKļģÔŨ]˜Ü’-ˇíÛ´`g÷ ˙FĸYÛÎũfŊÂēmļōQl;ō´ß‰ĀŧŌ‰L8iņĖË/MDqė­(NwŸ8vĸâ˜įĪ_LEéäÎvī(’ ęÜ~ėSė×8Ä[Ø €(ļA6!Đvčãœķ‚¨ę˙ĩxæåļĸ¸J {-Š=<Čĸr§N´ķk öļíÜoØ-Ė[&`+/X)ļxšh3ô1ÎuąžĻm E]û\÷†Úą°Á*ûđ4oK-ūŪĮleû!ßPŸ;qDíŽŗķ…ÃÚĖcąŋĀ,ö (īŋ­ŧ@“Nh3ô1ÎMVĶ ŊOîŪŊ{āŖ]WŠĩÖ9ĸ?A.1÷4Ík߯‡™ī4ãŋ­ŧ@›‰'V-LYéD&Š)Ąč? ™(ÖĩāM’Ŧú:ĄŸPí3æsO˙#!ā[c Qė^.āQG]Sžt"ŔPt JËÛ쯒ō D0ĸ¸åāã6X$ 9÷7éĸ¸ -Ž5F@rtĩU, „ÂXØįîKD1ĸQũŋ[”ã~“Āû<[y(& 9ÚØĒ[:A EŋéŌ&–ũznk°7ļ.õŒ-ŲÂ^–'ÖĘ gdF[y(& 9\ĩåh̐ŒĨg]ˇî.ė­‡ Čŗ(Âܸ“ļōQÜ8TÜā:ÉÁ$iËun.ú{QŊ=ö´ Ø ؚÅągž#ũ—ŽÚrĩWnHÆŌĢŽ;ā,ėB.gšEmåĸ¸E°¸Ež€äpՖ<ĩđ-JÆ2|Z˛=„Ŋ,OŦ• ĪȌ2ļōQL>:A@r¸jË Đž9!KĪēnŨ]Ø[AgQ„šq'måĸ¸q¨¸ÁÉāĒ-ÜBˇ)ËĐYĩíßĨK—ÔšsįĻ~4û˛ßëßŊđ m›ã>L`Œ“Ŧ“0H@r’•´e°ËÁš†ŋųĐ>˙üķJsnōŖīá@Ā[s?+ÅĻ"ŠŨF$€Ģļáâ!ÉX‚´œĀk¯ŊÖHë˜č{xA@‚c\‚bx6låĸ8ŧ\ō˛G’ĀU[^Æ˛Ķ’ą´Ü§›øá‡k ãĮ{Ėéžāœ_ã~ÅĢ/omåĸ¸¯ĶÎL’ĀU[¤@s’ąlŪz(û׆­ŧ@û—+x<‡€ä`’´Eāš€sfmîxå•Wj‹bJ'Úæ@  [s?ĸ¸I”¸ÖÉāĒ-cđ6,ˀ1‰tíÁœ+Œ)A‘Æ8éPFĀV^ ŠÉG'HWm9Ú3'$céY×{wˇN ĨŊ‡%øãÁ‡¸Umåĸ¸U¸¸Iš€äpՖ4ŗėIÆ2^]úX§„‚Ō‰.„š×ĨAĸá6[s?ĸØíŧĀģ$“¤­]‰ūø÷›ŗJ((č7´˜ ؚûÅ1g] }—L’ļÅm´[đ7ŠwĘøŦ J'ú­A fļæ~DqĖYįPß%€ĢļÂí+’ąôĻĶ­*ĄØģw/vXŒKČM3ÆCŽnûžŲĘ Dqû˜q§ ÉāĒ-A\Ҙ’Œe4Đ:v´Ŧ„â‰'žčh•Û!PN€1Nf”°•ˆbōŅ ’ĀU[N€öĖ ÉXzÖukP\ētɚ?46ÆxØņmÛ;[y(n1îs–€ä`’´å,0‡ƒ˙Á)–PčŌ ^€ú$`kîG÷eÚĒ$ 9\ĩEø›ŒeķÖãŊ#_BAéDŧyĐGĪã}Pö¯ [y(ö/W‚ôXr¸j+ČĀî”d, ģ”ų| ĨA…ÖšÎ0Ɲ ‰ŲĘ DąáĮ ÉāĒ-ĸܜ€d,›ˇīY Ĩņæ@_=gŒ÷EÚ¯vlåĸد<ÁÛ$“¤­ŽsIüíĨ„.Ą tÂZ†@ĖlÍũˆâ˜ŗ.ĐžK&I[â6Ú-øÅ;͏.Ą tÂ˙XZfŒĮéfũ´•ˆâfqâjC$€Ģļ Ą ÚŦt,ĩ=~``2‚:'9Æ ¸‡IKlåĸØRĀiv’€äpÕ1oN@:–§/*Å Lå€dž6-~Ū3?ãfÚk[y(6Yė×" 9\ĩU MŽĨ)1„]„ļÎÉ|e*€Y,‘nÖO[y(n'Žö€€ä`’´å:į\”ä¯m!^¯&s@2_Œ8 ØKˆâƒLSÕ$€ĢļˆsŌą4)ˆ°ā–Ė׿ŖÅĪ;`ægÜL{m+/ÅĻ#‹ũZ$€Ģļjā"Ę'¨{övE_rî‰e*€Y,‘nÖO[y(n'Ž6D@r¸jËē ÍJĮ’Õ\VsMæ€dž=°sƒY,‘nÖO[y(n'Žö€€ä`’´å:į\”äOM1‚ؤ æA;įĻō˜€äÜßĸ¸ -Ž5F@r¸jËŧ€ KĮŌ´(Â~ÜÂ[2_ÖÆJ¤baC?m%Dq ŲåA%€Ģļ<ƒs.JĮҎh5É|un0rf†ĀznÖV^ Š=OœPܗŽÚ %V}öC:–ĻEöãŨ’ųÚį8ŗŲĖlŌwˇm[y(v7'ĸōLr¸j+Ē€ uV:–ˆÖ¸EĢéøKæĢĐrŪ Ėœ‘måĸØJ¸iÔ$ÉÁ$iËdŸCĩ-ɟíĈâPg úÉšŋ DqZ\kŒ€äpՖ1x–ŽĨiQ„ũ¸…ˇdž<Ŧ'ēŗX"ŨŦŸļōQÜ,N\mˆ€äpՖ!tA›•Ž%ĸ5nŅj:ū’ųôĀÎufąDēY?måĸ¸Yœ¸ÚÉāĒ-Cč‚6+KĶĸûq‹nÉ| z`#Šc oë~ÚKˆâÖ!ãFW H&I[ŽōrŲ/IūÔĮ-XûøĀĸs,ËŲė˙Ëū]į—Į%žAĀ4Éšŋ‰¯ˆâ&´¸ÖÉāĒ-cđ6,Ë>„mÄ+žĨķ5āĄ=îš$ŗxÅŌG[y(Ž%Ãī§äpՖã!pŌ=éXú&XŸŦĢw-,Ēw=˛ĨžēX!67ˇÔÁ{ÕÂŊëęøf3AZË~Uģü^ķI:_”ÂNI2v s ØĘ DąÅ ĶôÉāĒ-âŨœ€t,EEņ77Ôōžĩ0G´Ž„§žîupđú”šåSŠhŠā}jųôË#[‰âžęūÕŨ+OĢ_<{ĩZā{.´ĨķĩųˆņīIfūõĢØĘ D19ÉÁ$i+8Đ=tH’ŋxMņX'â¯r•öuuü‘R($Їí.íˆâBRzĨxd¯ÂˇÍĢjíŅUu÷Âu˙ŲW}8ũ0́×pR.YU~ęüEuøčʘÃî§ÔŅÁĩĮá†ōr“ųž5+=)ČŌųķØ§īqKMH"Š›ĐâZc$€ĢļŒÁ ذt,į­ô5ú{ēRŧûũ+ęŸ'eģW6Ô&V!3ģWũķND\&vۊb-Ú2›šÕؒō‰LėŪĩ´ĸŪbK}qč×5õč#‡Ôî=GÔágo EdŠ(~î;ęāĨ¤Ôa Ž?§EģŦĩŧt—ēûčfjĢ\@ΞŠ(žø@Ø?wFŨŗgY-į|=~bmzUųšMu˙Ō’ēįáoĨũš^7îĶČūt,ǘwÂųœ‘Î׀‡ö¸k’ĖbāKmåĸ8– sŧŸ’ĀU[އĀI÷¤cŲHôÎûš=Å+_VGP 9ą9j'€K'ÕŅĢDq"Ô?4PŸË¯îô]ã÷ĻEq*ē§Vą31>ģ¤Ž(ž­UBļ¸ĒœúP,UI?ŒlVø?qŦFw›:$Įx7O¸Û%ļōQėRDė‹äpÕVÄámŨuéXšÅęTŲ.ã¯ōŋĢN Ëú_)žÚĩĸ°Ē<-ŠĢjVš0ģ–y^MņgNĘöRĪĨå㒇2ģE;Ãˇü˜’šë‘_Ík盿‹tžļ8Ũ(ÉĖŖnãęļōQLjG@r0IÚ t’äoĻĻ8-›Ø|QūĐŪ\­ė õšGŌR…×ĶZ`DqĄĻwJgĸyjįˆŦŽyööpŗwŸHĘ#¨cYũo*dgߓÛĩŖöjoQ<§Ĩ-ļŦŗ)Š{^4g HÎũM:‰(nB‹kŽÚ2/`ÃŌąl*rf^?.ŸČ}mŸíŦPö•ž +Å5EņtMnŊ’ƒō•â¤føėŠĘ]'æ—\¤m×Åi{Y HĄdD4 %6ŌųđĐwM’Y ŧbéŖ­ŧ@Į’aŽ÷Sr¸jËņ8éžt,EŅ„(ŪŲ/X ĘQ9Eļ2\ŦĮíīAģĒō‰LôV•O´9dįÁŊ˛RˆW՚Žģ^:ĨֆīåDöŒ#&ãUĩsE‰`ĪíåÜWé„öU:_”ÂNI2v s ØĘ DąÅ ĶôÉāĒ-âŨœ€t,Šâ‹;%÷âÚRŠĸ(Žzh-}šÚ×Ęáō[ĀUî>Q˛#FA€V?hˇŗCEÆL_ģ÷ĀõhQÔæîĖUß´íé,Ōr‡âCõ‡‡CęžGž“îxŅä!ēŅŨ+_SŸŅûD÷P:(n>žõ’cŧÜå"[y(v1đŠÉÁ$iĢS§"ŊY’ŋҚâLŽôȝ–N‹ā§ž¨}{öæŸŪZė×Õû&ļn+ß2mJxÖŨ’-9TIæk¤CžnC`HĀÖXB“€ÁL’ļ‚ŨC‡$ų÷"Ї̛ÉĘäD™@ŲĘp"úÎ<™ė͛;ãˇļÔį&vЍØGxķŠ:öPvČERĸqîRÅáÉCq˙Ûõ™á)rŲákępîAˇŪīČHœÚžŽËáå‡|ŒŋžÚ^ÎQ,™û= ÕÖMÄŌĪր"ŊŅV^ Š#M8×ē-9\ĩåsü‘Žåŧ•žPū.}|s(\L÷C:_}Ŗ]}”dÖÕîw‡€­ŧ@ģ“Q{"9\ĩu€[v^:–ĻE‘+öÅ2åMã)¯-‡WˇI2ķĒã8;“€­ŧ@“˜NŽÚr´gNHĮ˛ŠČņõzD1ĸؗĄ.9Æ}é3~Î'`+/ÅķcސL’ļ<Ãč„ģ’üÅkŠįmņīˆb˙Eą' `‰€äÜߤ ˆâ&´¸ÖÉāĒ-cđ6,K_W~ņێČmĘ]:_ÚãŽI2‹W,}´•ˆâX2Ėņ~JWm9'Ũ“ŽeS‘Ãõ~ˆQWâ$¯NJa§$™ ģ†9‹låĸØbĐiz‡€äpÕņnN@:–Žˆ'üSlKįkķãß’Ėüë=W°•ˆbr28’ƒIŌVp {č$˙˜jŠŨvDˇdžö0ŧhΰ5–ÅÎĻD\ŽIWmÅQ™ŪJĮąhG,ÆÂ]:_eF‘ÛV$™šŨSŧkBĀV^ Š›D‰kŽÚ2/`ÃŌąŒEœŅO;â_:_ÚãŽI2‹W,}´•ˆâX2Ėņ~JWm9'Ũ“Ž%bŅŽXŒ…ģtž:9(…’d&ėæ,°•ˆb‹A§é’ĀU[Äģ9éXÆ"Îč§ņ/™¯ÍG‹ŸwĀĖΏ™öÚV^ ŠMGûŊL’ļz@ƒ’üyĐΎPŒI Kæk×.@ 5[c QÜ:dÜ(I@r¸jK’W,ļ¤c“@Ŗ¯ũÎׯš$ŗxÅŌG[y(Ž%Ãī§äpՖã!pŌ=éX"ûŠ11—ÎW'Ĩ°S’Ė„]ÜEļōQl1č4ŊC@r¸j‹x7' ˘}í˙€tž61ūŨ!ÉĖŋŪãq[y(&'ƒ# 9˜$mē‡Iō×︁éčaXĐ‚' 9÷7…(nB‹kŽÚ2/`Òą “‘ŽÁŪÖÚFcáK?kž ‡låĸ˜t‚€äpՖ =sB2–’]wÕ/ú(IĀŽ­rĖĻøą]ZŸGĀVū#ŠįE†ŋ÷B@r¸j̐5"KI4ŽúE% ØĩCŽ!Šíæ˜Ë­ÛĘDąËY‘o’ĀU[…SŦĢ’ąsĘâW{’}˜gËUöķüæī€€˙lÍ?ˆb˙s‡H&I[Ē9ø7g&uėĨHļŗ˙vܸ+ ļōQFūxß ÉāĒ-īƒdĄ’ą”tßUŋčŖ$ģļbČ1M8–~ÚÍ&˙Zˇ•ˆb˙r%H%€Ģļ‚ œáNIÆRŌUWũĸ’ėڊ!ĮÅvsĖåÖmå?ĸØåŦˆČ7ÉāĒ­ˆÂ)ÖUÉXŠ9Éę–Ģė%ã貭XøĮŌO—sÍEßlåĸØÅl§N$“¤­NŠôfWųģę—dšÄĐGI^؂äؚÅr1ÄR’ĀU[đD{Ģd,Ŗ…Ø˛ã°o NčļXøĮŌOĄ´ˆÆŒ­ŧ@G“bnwTr¸jËí¸éd,%{čĒ_ôQ’€][1ä˜&K?íf“­ÛĘ Dąš¤Į’ĀU[AÎp§$c)éĒĢ~ŅGIvmŐcˆbģ9ærëļōQėrVā[+’ƒIŌVĢÎD~“Ģü]õĢMē<ķĖ3ÃÕē&?įΝkĶ÷@¨EĀÖ‹(Ž.ō‰€ä`’´åCW|…ŋųHŧôŌKąŽ‰ž‡—Yąä~,ũ4›-áYˇ•ˆâđrÉËIWmyËNKÆR˛+ŽúÕļ÷Ũw_maŦ¯åež@h9VE,–~šĪ˜°Z°•ˆâ°ōČÛŪHWmy‹ŽKÆR˛YЁļY,;(ūŽėßRטhģNE›~›đ5‹iŪö<ļYNÍģgž>ږĖYWmš:Æ]å‹_ļōQK†9ŪOÉāĒ-ĮCā¤{’ąt˛ƒŽ8Õ¤„‚Ō G‚ˆŒņ@)Ü [y($æėL’ļė“ņĪø÷ŗŊ{÷Î-Ą tĸŋxĐb&`kîGĮœuõ]r¸jË!ÜŪ¸"Ko:mÉŅ'žxbŽ(Ö;Uđ‚€$Ƹ$ÍplŲĘ Dq89äuO$€Ģļŧ%į%ciŠ Ū4{éŌĨšĸ˜Ō oÂéŖŒqoBÕĢŖļōQÜk˜iŦŠ€äpÕŅoN@2–Í[īŽY%”Nė}ô˜1Ūe˙Ú°•ˆb˙rįL’ļ\sđoÎŦËŗJ((čB–{!&lÍũˆâ&QâZc$€ĢļŒÁ ذd,Æ$ÖĩY%”NˆaÆPŽcœt(#`+/ÅäŖ$€Ģļœí™’ąôŦëÖÜ-+Ą tÂZ8‚o˜1|ˆ[uĐV^ Š[…‹›¤ HWmI3‹Ážd,cā%ŅĮ˛ J'$ČbÃĨAĸá6[s?ĸØíŧˆÆ;ÉāĒ­h‚)ØQÉX ē´Š˛ J'‚šÕÎ1Æ­âwļq[y(v6%pŦ-ÉÁ$iĢmbžūvĸŸ/Ą tÂN h1°5÷#ŠcÎ:‡ú.9\ĩåno\‘ŒĨ7vĀŅ| ÅšsįđB%Ā5˛Ũúe+/ÅŨâÆŨB$€Ģļ„PEeF2–QëØŲ| Å+¯ŧŌҎC šcœė(#`+/ÅäŖ$€Ģļœí™’ąôŦëÖŨÕ%>ø u?p lŒņ°ãÛļwļōQÜ6bÜį,ÉÁ$iËY`;{ÁŅ%įΟˇį-CҰ5÷#ŠŖM9ˇ:.9\ĩåq?ŧ‘ŽĨļĮ Læ€#Ë/%Į¸;Ŋ“Žlåĸ¸kä¸_„€äpՖ¨ČŒHĮōôEĨøŠĖ×X†:Ėb‰tŗ~ÚĘ Dqŗ8qĩ!’ĀU[†ĐmV:–ĻÄvÚ:$ķ5聝ëĖb‰tŗ~ÚĘ Dqŗ8qĩ!’ĀU[†ĐmV:–ˆWÄĢɐĖ× 6ƒĀļÆĸ˜Ô Ž€ä`’´č:$É_Û2)ˆ°ā–Ė׆M@ĀYļÆĸØŲ”ˆË1ÉāĒ­¸"*Ķ[éX"\Ž&s@2_eFûV`æ~Œlxh+/Å6ĸM›S$€Ģļ{sŌą4)ˆ°ā–Ė׿ŖÅĪ;`ægÜL{m+/ÅĻ#‹ũZ$€Ģļjāĸ ŌąD¸"\Mæ€džÆ2Ā,–H7ë§­ŧ@7‹W{@@r0IÚōs.JōˇZSŧšĨŪģ¨î]WĮ7ûĻ/Ģc+KÛ}j°ŽŪĩ°¨ŪõȖzʉmė^WĮy@-,< ^Ž Om ÄF2_Œ8 ØKˆâƒLSÕ$€ĢļˆsŌą]%ÜŧĒÖ>˙{ęū{ąļū,ĢåGęØāÚ¤pCw˛&Eąūā°Oä€dž6-~Ū3?ãfÚk[y(6Yė×" 9\ĩU yQ>ņÔųoŠ1ŧûĀIuøėÕņjęSį7ÕĮV–ŧŦŪúĘÎ*+ĸØ]QüÍ ĩŧGfZrî‰e*€Y,‘nÖO[y(n'Ž6D@r¸jËē ÍJĮRdĨxķEuøC‰ ūĐ@}ŽŦ"ũûž#ęđŗ7Fbp,ŠŸVkįžž[]ŪĢîyø[ęņĸį.ĢcŦĒģŗč=+ęū§¯ĶĢÕ'NĒ{ö¤+ÕúēßēŦž8.y(+ŸØV_ą•ģv§Ŧc§|âĪÔŖŋujÂūgv>Œx&öęāđÃĀȏ⇅ŒûSį/ĒÃGWÔî|ŋ&üÍė ÔōRRn2ŧ.ņķŅ?UĮūˇ˛ō‰m§ėw¯<Ģ=ķä°/ģW6ÔRßŋpzMíŪŗĻŽ}sģŖpįđŽ6“‘äoĶ>÷¸IĀV^ ŠŨĖŧę@@r0IÚęĐĨho•ä/US<ŒŗWõ5{œRGŗ2ŠL˙Ô˛ēįĄ:ūœ`™8-Ôî>÷uđĀ’ē{%wŨ@‹ÄģÔŨG7s"öUĩvô@"@ŸTŸ9¯Åˇˆúē%ĩīċé*uQgmîÍ]3]㜉âģ–VÔûĮÂųšzô‘C‰ Í÷ŊL`_SĮOŦ%‚ū€ē˙ėĢ;BķšMuŋîÃCRq_îËSĪÔž=ɇ…Gž“öUÛ;ŽîIú5YS\ŗíLXU~xŖđÁbT–ą#’ģÕ{Kæk´ƒžŽC !`k,!ŠIŋāH&I[ÁîĄC’üeDqZÛÚte1ÅÅûÆĢ˜ķV.ˇÕpE3/HKŋö/ú7)ŠŸ:AŊ?—;‚ŗ\ŽDq~EutŨč÷KjųôËŠØ؟•Ķb|Ę˙áJmņē*žéu‚ŧfÛUėĮ+øûrũA÷0Ŧis HÎũsË]€(nB‹kŽÚ2/`ÃŌąė^>Ņn7‡ō‰âîE{UB/kCœ ŌT$Īį9ûßÔ+ĩķņŽø-Ų}bčCî÷>åe ˙†%$U|K´ĢÛöŒzî:ĢūMrF2_Ö]ƒY,‘nÖO[y(n'Ž6D@r¸jËē ÍJĮ˛‰Ā)ŋÖ°(ÎÜx7‹lW‹ėŋ™ ­ģbúģtD-ë]2æŠčüŠđ|Qœ­(īėžQô7_jqC=~vPØ­#Ŋ>Ûmjå<ÚĶĸ¸vەĸ8î[ąeš"™¯AėüĘ\rü:/ ØKŊgŖ­Ž’rnĖ Wmš7Ŋ“ŽewQ\WŒž†¯f‘]) ‹_ë×õ#+;XLj”Ŋ¤.yVųD]Qœ/§¨*?¸Ą>wâHRūĄšÛĖÕõÖí•(ŽŅööRõÄ:ˇ$ķÕÍ)īĖ䙆`ŅV^ ŠCČú`ėë8[“ŽHō—Š).ĢĢ-‚úĄ˛kęcŲvmuEqeų@ą’ãŌC6ōĸ3y0íėŠä¸Âvq%÷UŪQZ>Q㐏Jąß^ĘIęˇ=upJeųEûēbÉ|e€@Ėl%DqĖYįPß%€ĢļÂí+ŌąėžRŦˇWmÉļ°tJ­ w‘(Š¨ŅŽå[˛ÍĢ)ÎjqsÛšĨöG;ZœQfm–ŠēŲڝžXâ[QœŠøéíé´‡včĢÅŖ&’Šq CÅérķ˛íĻļÆ+oģ(ЇÂŋf9IŨŧ‘ĖWoiGGaÖ` ˇÛĘ Dq  å[ˇ$€Ģļ|‹‰ ūJĮ˛Ž¸™{ŨpÛ4-ŒWÕÁĶ;ûīėÃ[÷đŽ’åÔöÎVkÉęôp׈ō-Ų–ŽĢc[˛å¯+ŗ¯¸[ŦŪgyŧËÄüō‰måōû-'ĩçļdKÅÉ~ÍúĩüŅdãœ8-ߒí×Õû|¸b;¸9m—ŽŌËíœĪÉ|uaüõáĖú ė_ļōQė_ŽéąäpÕV3Ü)éXÎģĨ%_§Wķü5ĩ6Ššûj—O¤÷t9ŧc␏ō3ášŗŸņdk—O49ŧãš-ux|‡Žq^‡=^-oõĻČ;[8ŧC"RؒŽnÛeė‡ŋģKähgDqˇI@rŒwķ„ģ]"`+/Å.ežˆL’ļD:™IūR5ÅĸÂē‰įÚÎ'ɎdžF6Ôé.&ØKˆbŅ ’ĀU[N€öĖ éXšEØo˙Zė$ķÕŗĄÚÚ]˜ĩFôļōQtZųĶ9ÉāĒ-ĸáŽ§Ōą AxŅw…ˇdžē3 Íz3ŗ|}ĩn+/ÅžfL`~KWm˛^ē#KĨģ‚2„ØHæk/ˁF`æ@tÁV^ ŠL†]’ŽÚŠ1Ž]û,Ë„}pWØKæk׹ãËũ0ķ%Rũúi+/ÅũƙÖz 9˜$mõĐõ⚐ä΃vîŠÉP„ždž7˜é°5–Å ‚ÄĨæHWm™ŖŽeéX†"žč‡›_2_ÃՓ=ƒY,‘nÖO[y(n'Ž6D@r¸jËē ÍJĮ1éϘ %.’ųôĀÎufąDēY?måĸ¸Yœ¸ÚÉāĒ-Cč‚6+ËPÄũpSÜKækĐQKx[÷ĶÖXBˇ7ēJ@r0IÚr•—Ë~Iō§ĻØ1!9ũ˛ķ‡rÔũ"™¯.K|ƒ€iļÆĸØtdą_‹€äpÕV-\4A@:–uÅ ×õ  ŋšĄ–÷,!Š#ķ’ct@ŨũS‰đĪ‹âáũK‰H¤‚_ ũAōá.u÷ŅÍ´_eB3ÆŲJņËå‚;a7ĐY_SQŧđSËꞇrmųîÕ­}k/Œ%ķÕȀrĐ(Ė Š.ŲĘ DąÁĮĨ$€ĢļˆssŌą4!ŠÆâT‹ŠLėå°˛ŲĒō†úÂPDāî•ėߙ+ˆÃLWg‡Ģ§iuޝ¸üûû€:8x}$”‡öîĘ ø‘oO ÖÕģôĘņؗ‚`¯g r6'VŠķœvĘ'Fö‹÷8e}ŨsD~6öCÛ¯Ģã< äĸ¸ųHåȐœû›x†(nB‹kŊ 9˜$myĪ1'%ų‹?hW*F‹+ ŠĀ*^[YO[šŠHÖ% ŋušbåĩÎ5UBoZĀŽÄiI­īTĢ„}ĄäaJ—‹âR1>äTė…Õęŧ(‹ę.ž!Š›p'B’s|ˆâ&´¸ÖÉāĒ-cđ6,K#+Å̏õDņxÕ5­ŲÍjŠwū›‚ĪmŠÃãēc]Oü´:üųBÍnkôjīų‹ęđ¸Î9_ĪģĶ^mQœ‰äĘ>WĨķbŗŒSÅjožoÕĒxqÅģ“oˆâ>§É1Ū§ß´e–€­ŧ@›+ÖkŽÚlj‚Ër¤cé–(nļķ‚´ŋxâ÷ÔũI đP<įkƒĶÕØY×<õė@íKJ.î^9ĢÖ˛šâ’ō‰Ļĸxē¤Ž¨,˙đ0j;ĢŠÖĢŊû&Ë8ŠâvžÕņŋüÉ|e"€Y,‘nÖO[y(n'Ž6D@r¸jËē ÍJĮŌQ<ÚQaÖJęla– ܝ÷ϝŸŧ&]…¨Η1´X)Nëĸ§vŖ(-—(úWąĸž¯ĩ.–NŒëg”OŒûWõā^{Á['w$ķ5čmčƒo,Ėbč§­ą„(Ž!ģ"ëŖä`’´YDē+ÉߊšâLüMėú=0vHŨķČwFõÃU\äÜĢsMö ZQož¨H¯‘é{VÕŋ~|Uí.>`8~Đ.ÛyŖâÅņŽm|k/œ%ķUdaž°5–Ş&LhnKWm…ŗ>ú#Ë:Ģ}ĩ¯éō Ũx›ļdŸā‡ŋ•î¯{C=~úxaKļlĩ5uxŧ/qņē:×dģG,Ģ÷Ÿž2Ún¸ōĩoåHŌfž”#[UŪŲnö–lɖnžTŸIK2ž:AŊî–l™?%%$éCˆw/íŸ>ØŖtKļ„Į™'+ļdkį[í(ŦŠKækã˅6`æBÜķÁV^ ŠŨ˅(=’ŽÚŠ2°;-Ëļb§ôžNĸx´*ZûđŽÜAĨ‡|čC9æ]3Ū9}ĀniU<ėh1^-NÉļˆËöBÎŪqîΆ‡•t?ŧ#ۑ#ŨĶyØF~+ļTäO•zėlmˇpī“ęؙ܁)úđŽņ~Īš•^īč8Íß.9ÆÍ{K }°•ˆâž"L;3 HWm‘Í HĮRT×Ēm˙UŧsžNíĩlĒo#Q\ú\åƒvĻ|ifW2_›?Ÿq3íĩ­ŧ@›Ž,ö{' 9˜$mõ"€%ų‹×+Š““õNUÖĢČĮM—ę!.Ū‡åųSũrÂQĀ¨Ļ ˜O@rîŸßÚΈâ&´¸Ö ’ƒIŌ–đsR’?ĸ¸îĒgzĖsR’0Ž?-=ũ⚍(N÷[žķĖ3Jŗ×?”N8€]`ŒÜ]ŗ•ˆâAãV9’ĀU[r´âą$Ëx¨uīéK/Ŋ4ŔNtቅjŒq˛ŖŒ€­ŧ@“NŽÚr´gNHÆŌŗŽ[w÷žûîS”NXCđ0ƃqĢÚĘ DqĢpq“Ë$“¤-—™šęüíEF—PP:a?-C fļæ~DqĖYįPß%€ĢļÂí+ŌąĖędųī¨^˜yŪ .G•ãŽt 7ØĘ Dą@đ0Ņ€äpÕVwJņYŽåé‹JņS9 ™¯ąŒv˜Åéfũ´•ˆâfqâjC$€Ģļ Ą ÚŦt,M‰!ė"´uHækĐ;×9˜Åéfũ´•ˆâfqâjH&I[ sÎEIūÚâņj2$ķÕšÁˆC葀­ą„(î1Č4UM@r¸j‹ø7' K“‚ÛnÉ|m>Züŧf~ÆÍ´×ļōQl:˛Ø¯E@r¸jĢ.š K„+ÂÕdHæk,SĖb‰tŗ~ÚĘ Dqŗ8qĩ!’ĀU[†ĐmV:–&ļܒųôĀÎufąDēY?måĸ¸Yœ¸ÚÉāĒ-Cč‚6+K„+ÂÕdHækĐQKx[÷ĶÖXBˇ7ēJ@r0IÚr•—Ë~IōįA;ąIAĖî.Ī$øæÉšŋIßÅMhq­1’ĀU[ÆālX:–ĻE‘¨ũÍ-uđŪEĩ°°PōŗWŨst ÖÎß`G ‡öž–Ė׀‡õD×`K¤›õĶV^ Š›Å‰Ģ ŽÚ2„.hŗŌą­ĻÅX&Šī]WĮ7'WyŸ:ŋŠ>ļ˛Ŧ–ŽĢccg>HækĐ›ō‰XÂÛēŸļÆĸ¸uȸQ’€äpՖ$¯XlIĮ2Q<ėĮ77ÔōžEõŽGļÔSCūē:ūČjaΚ:zî9õŊÃ˙?öÍíäo7Ôãgę~ũģtåy÷“ęđŲĢéŊ;ĸûŠķÕáŖ+j÷øēSęčāZAx^SĮO¯ĢåĨl%ģlåzēͅĨUuđôeõÅÜŠb{ Ëjų‘ uü9íˇ_%’ųʏ…ũ,#`k,!ŠÉĮāH&I[ÁîĄC’üŊĢ)žąR<‹éßw¯l¨/Lˆâ¨åOœÎ­ oĢ/ž=ĨîÖbķÄV*HÁzúxōģęūŗ¯îˆĪį6ÕũKKꞇŋĨŽN'â÷Ěē{ĪuøŲŦTãšzô‘Cj÷Ԛ:œ‰åįļÔááĘõ)ĩ–ŠŲ§ž¨}{ąüČwvÚ<ķ¤ēgĪ’Z>ũō¨ÍÍÕáíUģœQf÷˙ÖPĐīôËa,™¯= /š€€ŗl%Dąŗ)—c’ĀU[qETĻˇŌąôjåqž(ŽZ)^ȉÎRņœ‰Ė—Õą•%ĩ0.ĪØV_8ŊĻvË5Šâ{ØnĄŠ•ëtÕzáupđznÅw˛Í§ëę] ųÕní[ęĮÔŊî‹cÉ|•Aî[™û1˛áĄ­ŧ@ۈ6mNŽÚ"ėÍ HĮ2Q\˛2;.Ÿ(ŠÉ)ņœ‰Ër‹Q‰ÅH°Î^ĄMë¸,#/Tķ÷gÂV—U|ŊēbčÛB˛R\Vĸáž.æ“dž6-~Ū3?ãfÚk[y(6Yė×" 9\ĩU MŽĨ—ĸ¸t÷ ]wûĩÂîåĢŗŖÕؒ•ŨâŠėT9F™(ÍÚ(Û#ũŨxĨ9-ŊČü×õÄ'ž-øœ”v šÚdŨ¯¯¨_,Šuö!v’ųËTŗX"ŨŦŸļōQÜ,N\mˆ€äpՖ!tA›•ŽĨÂjėãŧō‰Š‡ĐzÅĨ+Å+ģ›WÕÚįę_Ū[Vī?}Ĩđ€Ÿ~(īYuøņ“IÍą׋ęî‡.¤uÍūŦKækĐ›ÎA`[c QLjG@r0IÚ t’ä܃v5Eņô.ŗË'vjŒËÄhĮzßôÁēŲmÜPŸ;q$ŲũĸXėž8–Ė׆M@ĀYļÆĸØŲ”ˆË1ÉāĒ­¸"*Ķ[éXƸR\]+\Ŧ!ލ.}Đn¯ÚwâÅÉÕ^}ŨŋøuđœŪžm´j=]Ÿpb+™¯Î F‚@l%DqAĻŠj’ĀU[Äŋ9éX"Üü)Eđ1V’ųÚ|´øyĖüŒ›i¯måĸØtdą_‹€äpÕV-\Dų„ĄULEĻo>KÎ=ąL0‹%ŌÍúi+/ÅÍâÄՆHWmB´YéXú&˛đׯ•mÉ| z`į:ŗX"ŨŦŸļōQÜ,N\íÉÁ$iËtΚ(ɟšbŋĻ$ķÕšÁˆC葀­ą„(î1Č4ÕÉÁ$iĢŸŪ‡ÕŠ$D1ĸØ´Đ–Ė×°F2Ŋ@3ļÆĸ¸Yœ¸ÚÉāĒ-Cč‚6+KĶĸûq oÉ| z`S>Kx[÷ĶÖXBˇ7JŽÚ’ä‹-éX†"ZG'ž-Ēw=˛5yĒ\į‡ôŌį<}ytĒÜďKĸ¸ę¨čŲâ´›ÎĘ}ĖWΆjkwaÖ]Đ7ÚĘ DqĐigį$“¤­8ŖŅ­×’üûŠ)NEåŌGÔ=ÉņÅō+š#1VKøĨĸx÷ʆú„Ô§Ņ}YŨ`¯Ú}āIõ™ķ7 ÂxūŠh/..žŦŽ­,Ši˙ÅŨFwCĀ}’s“Ū"Š›ĐâZc$€ĢļŒÁ ذt,‹šĄÕbø’zô‘’c×Ôąon—¯Æęŋ=ģĨŽ]QģĶÕÜR‘úܖ:ŧ˛œ[å=Ģ>súÉųå•ĸ8•Ī}GÔÂøCõšÍLh–¯?uūĸ:œķsaaY-?˛ĄŽ?—ömÜÖŗęŅŗųŖ“ëŨœ8ÖyƒÍĢjíÄIuĪpE]˙čŖŋžcoŧڞũ}I-Ÿ~yô āËî§ÔŅÁĩ1㝠Ļũ­S;m$GL?pæĒpšÉ¤@—Ė׀‡õD×`K¤›õĶV^ Š›Å‰Ģ ŽÚ2„.hŗ:–’?fEņļúÂé5ĩ{ĪuøŲdõu(ėvÄÜNÛŠđÜķauĪG]Î]™HŨ|Qū^Ņ=Ŗ ĐmõÅÁ@Ŋ˙žēk^Mņ]ĩ%ÛGŠ>ĩƒCĄŨ™‡wŦ+]#ŧŗÕی}Їâ9Š‹^ÉļZĶåWÔą‡’Ŋ“—NŠ5ŊU\é–lIšÅ™'§ļdąXVī?}e´MÛs—“Ŋš¨}+G’UëÜNeūgždeĶ-Ųr8˛RÃhĻĄ°õŪ‹(=ŗ<éŸäpՖ'ĄÖM3ĸ¸jÛĩYĩ(VąŠ>V8ŧcíÜŗ%ۚ•ˇ9}Ės˛]؁“ę_78æyŌ‡ė°ÁNMđ¸|âIuėLáđŽņ^Á™™M뭗VÕAíËxĩ8ÛN-Õ§'Byt4uv:āôá'ÕáÜCˆbŋ†°ä|íWĪņ–ō‰„€PF@2/\ĩEäí0#Šeˇô2šeœQە5Åqņ‘œ{ėŽ–ūZ‡YŦ}jÉV^°RėS–ėĢäpÕVĀáķĸkˆbƒQ<ܛZrîņbP 8 3ˆš°•ˆâ“)ö.I&I[ąĮÅv˙ňbŖĢåˆbÛCœö"`ëŊQPųÜÉāĒ-Ÿã‚īˆbD1ĸØŊ‘,9_ģ×;°5˙ Š}Ę|­E@r0IÚĒå<AĀäž#Ā DHĀÖüƒ(Ž0ŲBī˛ä`’´:wúr?ŦxŌøDĀÖüƒ(ö)KđĩÉÁ$aëĩ×^SĪ?˙ŧzėąĮjųĪEp€DîģĐ|€ü#`kūAû—+x<‡€ä`jk+/„ĩė‡āAĀmsߗūá' ā.[ķĸØŨœĀŗ–$SS[—.]RO<ņ„ÚģwīX#Š[’ÛŦhšûVĨq@ (ļæDqPiDg4ÉÁTĮÖCî°5˙ ŠŨĪ Ū¤qDqZ\ëÉÁôĘ+¯ŒˇS“x“÷ NB ! 9ށķįĪ+ũ­/˜$`kūA›Œ*ļ­05˜ĒļYk"–­ĄQ´ `jĩp…["đāƒŋ=ã“lÍ?ˆb“QÅļ} ĻļŲ …@ }ŒŖnq‹Eú›3zËI^0IĀÖüƒ(6Ul[!Đ÷`j"­ĄQ´ Đ÷8já"ˇôL@—NdߌQBŅ3üȚŗ5˙ Š#K´ēkk0iļķr üéclŽŖ0†× ]:‘‰bJ(‹¯K=˛5˙ Š]Ę|!`k0/Č"Äz āĘ8ęĄĢ4Qƒ@V:‘‰bJ(j@ã’ÖlÍ?ˆâÖ!ãFW ØLŗxdŲUfø"ĮQ˛G _:A …Ŋ8ÄŌ˛­ųQK†EÔO[ƒ)"Ät5ŒŖ‚Ü ‹ųŌ J(€ãŌVlÍ?ˆâVáâ&— ØL.3Á74%Ā8jJ,Üë‹Ĩ”P„kWzfkūAģ’ø!FĀÖ`ë† āƑApą˛Ō J( N nؚŁ&TĖŨ˛5˜bfNßÃ#Ā8 /Ļm{TV:A E[šÜW‡€­ųQ\':\ã[ƒÉ+H8 9G¤ˆ&PU:A ųa’€­ųQl2ĒØļBĀÖ`˛ŌY…@GúĢņ‡~xęGŖ˛ßëß=˙üķ[åv_Ė* „—(úį§­÷qDąš‚ĮŦp‘# O&ËÄMŨ˙žôŌKbícČmŗJ'˛|yėąĮÜîŪyGQė]ČpØUļ“Ģ<đ ķčƒę âûîģož9ūyĨųœŅ{ąķ‚€[īãŦKE;ΰ5˜œ€#hH@Ų[W?ķĖ3 ­sš¯ę”NdyCI¯QvĶo[īãˆb7ķ¯:°5˜:¸Ė­°J I ĨVCÕkãuJ'(Ąč5$Ņ4fë}QMŠÅĶQ[ƒ)Âô4DuJ((1ōå}Ōåuŋ=ČŽŖ„"žü0ŨS[īãˆbĶ‘Å~īl ĻŪ;Jƒ$P§„‚Ō AāŽ›ŌåME1%ŽÕ#÷lŊ#Š=J\­GĀÖ`ĒįWAĀMuJ((p3v&ŧŌųpîÜšŠ=ŋ–ũ^˙î…^0á 6#$`ë}Qa˛…Ūe[ƒ)tŽô/|ŗJ((?ūuzČüZ‡×t%`+ĪÅ]#Įũΰ5˜œChH`V Ĩ az9ķk uŦ[ļō QėX"āNwļSwĪąģf•PP:a76Ž´ÎüęJ$ÂöÃVž!ŠÃÎĢ({gk0E ›NG Ŧ„‚Ō‰āÂÜēC˝­Ņqcļō QÜ H\ę[ƒÉ:x ŲĘJ(( k2˝äBlåĸ¸čŌF¯l Ļ^;Ic0D Ŧ„‚Ō C°=4ËüęaĐû&uˇîHDs^$֘掉âŸoũ—#ąž#j›øą#Šo‹ũT˙ÄíęæĪ6ą%p-ĸ¸Ņđ`~m„‹‹[°•gˆâ–ã6w ØLîÁ3iĸĸx¸\& §WŠw„ęÍ濟‹zûŽtåy×ÛÕ[ūÕôJķ›>~ģēã;×ŧõįoVoJWiwiš°ŦÅÚßÕ¤ÔAˇŊ/)sHW°ĢŽĪVœīüĀÍęĻĪŪŦn˙‰ęķņJzf÷37ĢÛ> ?0äúđŗˇ¨7å„ķ¸ŨŸ˙GŠX¯øđQĩŌŽ(n4<˜_áââ–låĸ¸eÍ]ļ“ģDđLš€1Qŧ+Н]ÍĘĒEņÛßũ6uĮĪۜ Ō7&eoS ģŪĻŪ|l§ĖâĻcoVoÛu§zûūŅčēá īÛԝīĐĩŧIōœ’Œ:ĸx(t›ˆâáĩ5WŠ?ķÔíīžSŨšīÍęæaIErߑ7Eū?}ë”ûžˇĒˇ,~0¨ą’Œ(n4<˜_áââ–låĸ¸eÍ]ļ“ģDđLš€1Qœ[y}Ã#Uĸxr…V×O ØôŪb9ÂxĨļƒ(Ö̎?”Oęk­×ÅŠpžøP.¨ĮĩĪėjˆálåQÜhx0ŋ6ÂÅÅ- ØĘ3Dqˀq›ģl &w‰ā™4QQœÕč&+Ŋˇ˙Ōs5ĮÕĸ8ŋB;|¨.-g˙>ŋSBąūÃ{3œōĩL˜„éDųDmQœ–“” Ũa_wJ$Ļí7ÄÚDqŖá¯F¸¸¸%[y†(n0ns—€­Áä.<“&ĐNWÕŌ&īoVˇÉ b-ė\Åeõš?¤FĩĘšŌŒŌÕęĸ¸FíqöQ,Ũŗí1ŋöË;ÖÖlåĸ8֌ ¸ßļSĀHéZ@;Q\˜I‰ĀĮß2c׉Dq‰øœ›U­M—7ˆ–OTŽtO¯#ŠûžĖ¯ũōŽĩ5[y†(Ž5ãÁ0RēfDk÷ÃꖒúÜŅ>Ã=ˆâ{Ī|Đnü°\ąŒaZDw*Ÿ¨ąEĸ¸ßáÉüÚ/īX[ŗ•gˆâX3.ā~ÛL#ĨkÆDqŽ8ˇŖBgQœ jÚUÕëš'ŽKvŒīTQg÷‰l%zrGŦFųíīNö3Nų@÷;<™_ûåkkļō QkÆÜo[ƒ)`¤tͤ(Nė›~6ŲR-9(ãm?ûŖšSí:Ŧįj|åˇdËjŠ'ˇF{ÃgTŊųŸ&ÛŊkē…ÚŊoî§ÜL'Ō-ŲŪũuë'G[ÍŨôÉä!ģŌ-ŲōöyĐÎä€e~5IÛ[y†(&ƒ#`k0’UŠ)ΉˇLPNė5ÜMëō‹7ũĢÉ>ۚpqKÍŖŖgî>ņŽ;Ôíŗ}’wúqĶ'oUoIö‘<ˆ÷Ķ?Ļn>6:čŖą(Ö+Íĩī@÷5\™_û"w;ļō QwŪŲ{[ƒ)H˜tĒ”@SQ<*‡pá'ÚSû˙ēā›%ؒ­Ņ(g~m„‹‹[°•gˆâ–ã6w ØLîÁ3iî‹b]ēp›zķĪŪ6ŽŊ¨SŽņ›"žĄŒ(n4<˜_áââ–låĸ¸eÍ]ļ“ģDđLš€ûĸ8Šŋķœ”ü‹Ûԛ>;ÚÍbTNQŦ]îAx:ąJ^ŅODqŖáÁüÚˇ$`+ĪÅ-Æmî°5˜Ü%‚g] ŧōĘ+ęŌĨKęÜšsęᇞ‚æūJęhĩøö}YoRį[Q ė~_ ōNbŠãĒcĖk>æ×ųŒ¸ĸ;[y†(î;,8FĀÖ`r î´$đÚk¯Š^xa,€÷îŨĢôÃZrģē3Ÿ%˙Ŋsß[ԏ}üMšŖ¤G[ĩŨ<<å.­˙ŊSŨņSˇ¤Į,7ßĨ"Ųãā‰íˇĢˇ~ü‡G;v|æVõÖw8´-\MQœ 9ũ DĖæ1ŋF<ųöØu[y†(î1Č4Õ[ƒŠŸŪÅ×ĘŧálÔ{:!ŠWõņɉh=ø#ãíáFĸxōwc!›ŦØŪōĄ;’ŋįęp§†ęSîÆĮ6į„w3aŧ#Šo?ōCПИwåTŊ†ĸ8Åķô7’ßF¸:Ō™_]LX~ŲĘ3DqXyDoļđģ˜õ œŽļ!€Ëze_§Bļp2ŨLQ<Ā?ĸnĶûOÜ7ëčįLÔÖßŲJõ¸YŨôŲ›Õí?QX}΄púˇáuMˇP“žžĨ(Îį…ÎÛüƒy]ęÕģ"ŗ˜_ÍōÅúˆ€­'…ęNMqEųD~Ĩxßmęã×*QŦOÄû1õÖwO?W%žë‹âLXO÷ĄYy†Āz‚ĸ8Ÿ0úÁ<ŊëIhæ1ŋšž]°(& H€I[f S.<×ÂíFˇØÅéękIMîŧšâ[˙eō@ŨގŠÛ鍚cĒg=h—”?ŧûvusú _&XåDņ,/ xë”ZÅYBeæe§"ú~bķkŖŠ‚‹[°•g”O´ ˇšKĀÖ`r—ˆYĪ\|ÎlGõnŊ¯hÎ]Ųˇû„ŪIâÍęļ#yA<ûAģ7dį„´„(~ÃđAÁeŊŽØ°(Îr1”ķ˜_MĪ.ØgĨ˜€€ &mA˜Sž<gŽĀȲÛĸ¸¸úšŦ,ü-%ģNdÂ~VMqîáŧ\Éĸ¸[†ųü`ķkˇØsw=ļōŒ•âzņá*ØL!ĒåĒĪÂÕę`‡‹üÅZØū°ēå§“Ō‰Ō­ÕjŠâ\šĸ¸CōänÍĖĶ'-ę]‡ėúƒy˝2ąĮĘlļō QLfGĀÖ`ōdh™Ž…]QܲĻ8+W˜:MŽĻ(ÎīQZúí4‘/‰¨Ú}ĸz‹ŪËRz*Ÿ˜—“ųķôá Ļ ™įOÕߙ_ےãž&låĸ¸I”¸Ö ļ“p'ķÂéŊUõ@ŲC@z;)ũ ĢoČŽ0Šb‹?7Ũœî>qsr FΏŅī“ō‰Û’=ĻüKÍxķےĶå’ĶäŪüŖęĻņßQ|ģ>ŅîuÛ““ņō÷Ũ”øq{zāĮ-ɉtŲßnúQõæˇ%ûŋ=yoxO"~o~ŗēãŽˇŠˇ''âŨy{˛˙đđÚä÷ˇN´ģŊÔ×éßÛāęJ^i?ôØĶĸ8“Z,ģôb~u)áúb+ĪÅáæT´=ŗ5˜\žÕkŦŋĸÕ|ôVQĪ<ķĖđëZWÄp•Ÿ“~moŠõåģÔōú–ÚÎ9¸}y]-/,ŠÕ—ËŨŪ~Q íU ‹GÔāʍôš×Õåõ*Žy^TûW×ÕÆåkSöļ¯~KZIl …ŪĢVN~]]žrA­..æüÚV×6ÖÔâÂjũōë9i›ËëęržNÂļã”ūđĒĮgVZĄ?°ēđa•ųÕN>ÄÖĒ­ãëßQë+Kj˙ÉMu=‚đôŅEũY?P÷ÁŧŦŦ*/Œ›| ö}~í#&´Ņ€­ô^>aŖ“´ŋø‹ŋPˇŪzëT‡õī˙äOūD õŲĪ~V}âŸP÷Ū{¯ēûîģį~ČĐ×ō‚ Ĩ>úŅĒĪūķ €@ÅA†5ŪNéÉZōÕâˇéK‹fũŖEŗūŅĸY˙čZ:^€  †‹z1B$€(1Ē÷i÷îŨCQŦW3xA€€Ŋؐ}ŨŽŋ}ãĐ ŠC‹hÄũÉoP¯Å1/@# 2QL …W,šCQėN,đ¤#]û›h@‹d^€ C@—Nds,%2LąâDą[ņĀ›˛Ō‰lŌæš0š€@Ž@žt‚ R#TˆâP#YŋōĨŲ„M EdI@w!cōĨ”PÌaËŖ@ķ2ŠĨŲ¤M … _Ŧ@qȗNPBw.„Ü{DqČŅ¨oÅŌ J(" >]…Œ(+ „Â(rŒ["€(ļžf唕NPB!ĮK€@ÜĘJ'(Ąˆ;'Bí=ĸ8ÔČFÔ¯ĒŌ J("Jē #PV:A …1ÜļHQl>M˨* „B†/V x čS>ķ[]–ũ?yěĄõQZD#ëĪŦŌ J("Kē ˆ˜÷Mœžg9ČC;-@[Oŗ2ęLØzŌf ŪXâ"0ī›8=ŋrG\9roÅ!G7‚žÕ™°õ¤ÍA$]„D Ôų&Ž](D‘cĖ2DąåĐ|{M&lōhĪ™;!8 Ôũ&ŽŠ8ķ#Ä^#ŠCŒj$}j2aSBIRĐM@@Œ@Ũoâ(ĄCŽ!ËŖ@ķí 4™°)ĄhĪ™;!ø4ų&ŽŠøō#Ô#ŠClāũj3aSBxRĐ=@@Œ@Ķoâ(ĄC!‹ÅáĶ´zræ@ō˜_å™bҍwb'B˜´…@b€@ķ+)2DqČŅ´oLڑžnCÆ 0ŋGL Š-§i3˜´ÍpÅ* æWr dˆâŖiߘ´# <Ũ†Œ`~5Ž˜,@[„OĶf0i›áŠU@˝ä@ČÅ!G7Ōž1iGxē 'Āüj1 X$€(ļŸĻÍ`Ō6ÃĢ€˜_Ɂ ŠCŽn¤}cŌŽ4đt0N€ųÕ8b°HQl>M›!¤m†+V!0ŋ’!@‡ŨHûƤiāé6 `œķĢqÄ4`‘ĸØ"|š6C€IÛ WŦB`~%B&€(9ē‘öI;ŌĀĶm@Ā8æWãˆiĀ"DąEø4m†“ļŽX… ĀüJ„LQrt#í“v¤§Û€€q˝ÆĶ€Eˆb‹điÚ &m3\ą @€ų•™ĸ8äčFÚ7&íHOˇ!ã˜_#Ļ‹ÅáĶ´LÚf¸b€ķ+92DqČŅ´oLڑžnCÆ 0ŋGL Š-§i3˜´ÍpÅ* æWr dˆâŖiߘ´# <Ũ†Œ`~5Ž˜,@[„OĶf0i›áŠU@˝ä@ČÅ!G7Ōžš>ioo­Ēå…EõΧˇÔß7ŒQ—{6åīåÛĪŠõ÷íR ËëęÛÛūvĪ!ā"×įW™ųáĶßĒËŋũĪÔÂÂjuëu?\6ā%ĸØTLÚ%ĐfŌŪūÁǝüæÕū……dRČ~öĒ÷üÚīĒ/}÷oD;ÔEØvšW´.KDđīÜķõÁoŧ<ō QėRtđ%0æ×ŋų’Z]ĖĪŠU˙_"ÄļˇÔ^?Ž˙š’›“—ÕķË%sr&čĘíī:xBøö•Æ‹…ŽĐŗ]ŸŪP=ü ĸXS@‡õQöŽŅ¤­5ԕ§ÕÚŊ˙XŨõÉ3ępcĖlûĩ~ôjaņˆ:ņŌÎīmBE—ĐOŪx?ŊëŨ;ĸØf€hh:ŋNâøKĩņË?žĖŠkęKSũ5Îö•/ĢĪ'b¸(fĮsō²ú™oü 'rgēD\˙—§ô‚GņžĀ5ˇ{ŖXėˆâš7Dqĸ8Š0ĮÕÉf“v:™VMŌéĒãôÄņ×jëŲUõé÷&_ĶW–õĒōīOˆęlÅr×§˙H}īÛ˙F­$+&ÚÎ˙¨(ŸĐĢÕŋ˙kīQ‹ŲJõâŠ:ôG[ę˙˅¯ļ(NŪ6÷аͥ%ļ”ú;uåÛ'&VbĻWTr|^úoęë9˙v|R ō"†ũZJÄéW/|íđDۇŋũW…UšŋW×ŋû%õ´ūБöˇj5§Če×ÁSęéī]K¨üŊēöŸŲá5ėgōfû?.•—O™ĖŒŲ7ÔKßûí›$žŋņŧÚĸ#ŽÉ„ŪNh6ŋo¯!Ў/Š?øX"ˆúõŊ˛ņ–ū}rąbŪ*gÚîܒĒ✨įõgÕˇ˙vŌ‘Ōšúw7'æ‡Ņ\]c>ŋĮԜsūöÛęųo5õÜ^h[S¯ž7“?N­āk?_*/Ÿ¨3ofĢĖzūķ>áúBģ!ükL Ų¤=G—ļū×ęû§ßĢvŊ÷Wԉī§ĨןSį´ĀÛJũáõtÍ&샟VûÔ×ĮfаŊ>P'ôjõ§ž‘^§Eã¯ĒƒģŪŠŪûû9”õDņ_Š‹ŋņ“É*K&Z[ß?Ą~ųŸũxÎVōģ??<\=ųā—ŋŸ īŋSõŸK~w@Ú|5íyÆįÃę=ũjŽŋŦ~G¯ääŪ¸FžíU˙Ķ˙ŧĸ~æ?d6SVģ~)ˇÚžõí}šļ˙ZŊđ~ĻĐvâBÂåņÄīA:ēîŊc{™0֓úŦō‰“…ũk;}ØūžúãOUÄė#Š˙cúfX‹Æ‰É €@ŗųĩš(Í#ŗëZõ5?ųÁé‡cŨÆthÅ>ÚŠb,ä+ŌĢķĻÚ8UšŪh>ŋæģ8OˇgŗDqŎPEōĩžM¨ö¯( +įųĒâSĨÅļfˇž×™7ëˆâķfåJũ Žf>ĸØŅĀāV{&í¤^ë?8ĄžôĨ_ŪŠÎå>ü3ž¨Î&ˇFĸxēžwŧ Fn˛œ/¨ë­´TތëtŗUkyQœ­ ėėōQd™ļ]ššĪ:ĸx“Âĸ¸ũĀãÎ(tš_ŗú•ÚuÅeķōbRnpZšzŽa2\ÕsbîēYsRAėŠ‹âlnšØ!)ßßŅ‚Äv­yŗŽ(n0o"ŠŖûtŌSŨ&íÂD™>Ŋŗįm=Ņ9´R['‚ø?ūtōĀXRßûԟåÖhŗR\Ī?ûĸ¸ø5[I˛ÕšÜŞSÜö”@ˇųuŪJqŊųkŨŧō‰ų°}Åsw‹¨5o"ŠĢ2‚•âųc…+<#ĐlŌNéķŋ=c/ââdÛāë ēĸ¸v}oVŸ;ëāšūY/ŸČÕ^WæWUŖ:ĸ¸Á׀Ŧ{6ÚqˇoÍæ×ĸwķDqŲ3%=Lvûĩ÷|BũęŸe{wÅzG†‰gBJÁÚ/Ÿ˜(QyŗŽ(n0o˛RÜ÷0¤=Ô'ĐhŌÎiÕö?%”&ĪÉ]!˛•á§ōįÕępģ°+Åĸ8{0? Î/ŸMvĶûöW`f?ė6C÷5ÅYíõķŋU/$ģzŧįˇ˙[úwE}t‹íʙ”°B×h\%FķëĄųĸXe[Žåwō™°“îˆ0ąŧ€(ŽxxryöÃnģrÁ‰—O¤Ĩmģ&vōIßj†ģqŦĢį†;ՙ7ëˆâĒ÷’˛ß×/ŗs}аRėz„đ¯1f“vļ5YŲ>ÃŲĻī{'ļESÉŪ Ã-Ųō[÷ĖØŪĢøÉ~z˛L'”ũĮ՗ŽčCBFūũÚ{īSGčÃCv6ē¯%ŠUļNÎŪÔļ=e[˛•=R˛Ģũ& û—n7ˇŗÕZŲvp ŠŠ­ęĻ}œúÚŗTؖl-4cŊé՘šĢ/ŗ• āfķkąo5Dąže¸õXr’ŨūUĩúėÎ^í;{ī68ŧŖ6Ū9q|0HŲ1ĩ%[ųļhĩįÃ&ÄS.ų=âËļƒĢ3oNīnQ6×ל7Y)Že\Ū 4Ÿ´ĩHû÷ęËĨĮ<˙ûŠ4ęŪ1_ë7tŸãáCúÁß–tŒW‹‡›Āŋœno6Ģ|"Å]vxĮÔī ī˜Ú7´ËJąöąËá…#[ŗ$CvÉCzßũ/ī@÷>liĐÍį×|ĮjŠb}Kå1Ī˙įä!ICķ+ÅÚNŲá…C™´ke-•ŪQc7ž&ĸxØÕļ‡wēÎ"Fī9ī|ú˙VßKŽ}ÎĄ[¯ī­Éá5Ū'\OsVŠ]ū5&ĐmŌnÜ7@ˆ†ķk4ĄŽ˛Ŗˆâ(Ãv§™´ÃŽ/Ŋƒė`~ĩĮž–Í@›gL =`Ōî8ÍAŅ`~&ÔQvQeØÃî4“vØņĨw€€=˝öØĶ˛yˆbķŒiĄgLÚ=§9@ ˝҄:ʎ"ŠŖ {؝fŌ;žô°G€ųÕ{Z6OQlž1-ôL€Iģgā4DC€ų5šPGŲQDq”aģĶLÚaĮ—ŪAö0ŋÚcOËæ ŠÍ3Ļ…ž 0i÷ œæ h0ŋFę(;Š(Ž2ėawšI;ėøŌ;@ĀæW{ėiŲ<DąyÆ´Đ3&힁Ķ  æ×hBeGÅQ†=ėN3i‡_zØ#Āüj=-›'€(6Θz&¤Ũ3pšƒĸ!ĀüM¨Ŗė(ĸ8ʰ‡Ũi&í°ãKī {˜_íą§eķÅæĶBĪ˜´{Ns€@4˜_Ŗ u”EGö°;ͤv|é `ķĢ=ö´lžĸØG/rßõĘo]AŦ¯Ķ“ pÆ0_4Ÿ/`֜™ąư(Dą(Nyczōá“Č1“tąí:ōßõųī9æO Q\ŽĮŠÁäx€p ˆtĄ5ōŋ5:nŦI€Ģ ʁËÅa– &Į€{äXA¤ ­ ˙­ŅqcMäXMP\†(v ˆbĮƒ¸{L؁˜îÍ$@ū“ Ļ cĻ ËŲGËą4b‰Ád+FsČ1Ō!fäĖŅī§īäX?œ%ZAKP4hƒÁd.χČ1!fäĖŅī§īäX?œ%ZAKP4hƒÁd.ĻÅä@ô˜cŖOãČ1ãˆÅ@‹Ą4cˆÁd†+VwcdCĖČ˙˜ŖßOßÉą~8K´‚(– hĐƒÉ \LŗRLDO€96ú0€3ŽXŦDąJ3†Lf¸b••bršs,y`š9fš°œ}DąK#–LF°b4G€#b&@ūĮũ~úNŽõÃYĸDąEƒ6LábzH€#b&@ūĮũ~úNŽõÃYĸDąEƒ6LábQLDO€96ú0€3ŽXŦDąJ3†Lf¸bu‡9F6ÄL€ü9úũôë‡ŗD+ˆb Šm0˜ ÂÅ4+Åä@ô˜cŖOãČ1ãˆÅ@‹Ą4cˆÁd†ĢR¯ĢË먅…Ôúå×GloŠõåEĩ°ŧŽ.o›j×=ģä˜{1ÁŖū˙†X—Ė§Û—×ÕōÂĸZ^ßRMąÃį6ō?šøŧĪēÆPÄ0Ģãˇ 83agÜÂB"$ķ?‹j˙ęĶj°qY]/A9š—ÔęÆËå ¯m¨ÕÅĸͲįÄkeČn¨ĢŸU_9šĸĮ>VųgQYîĢfŌsJ:“c=÷›æ  HŒæĘ˛šoY­ŽÔÆåk%nĻķØâšÚ¸V&3ˇÕĩĩÜ|8cŽ­ŗ°}U]üęīŠ“+{sīūYÅC–•Lúļä+iĢ(vôp/ŽĖąķįʲUá~VŠGžÍ.aĶ×X9Ĩ.dķd]Q<\PYJĘđrķæåA˛q—Úr3-ËËúųaĩōđ¯įæâ˛Å˜–ß6ĖwÉ“´e°ËۚF;:g@ Qœ=¨–˙d>ĸ/ ų„ÖŧÜ ËŧíĒJ†ŋĪ=0’ŊW~§¸!Šr¸WæØ:ķØô5}ˆâmčĒ%ŠĢJ˛y2âŲ"Fq1ĄĖˇæī!ĻS^2Į$m™îˇöŎG͙āŦ(.NžuZgĨxVmÚhâ¨ŦŸK'čņC,ˆâēâ:ôAĀ•9Ö]Q\œÃjFĨ–(.ĖŖyĶ %ķõđÚ˛ųQ\3B\VBQėxZ¸2a—­OĄ+Îu&úI;M'4“ĸ8›ˆk<ą(v|$áĘ ¸2Į֙+íŦŕģesnömĸ˜ņÛDq?œ[ˇâʄ]KK ôįøy[˛M‘i*ŠÛ´Ą­ŗRÜākCDqëįFØ$āĘ;Ž,[h0Geī>Ņĸá"îôžīSû×ųrč7ĸ8 Ÿ+ųjs˚lQl’Ž€mgĀÜÉ+y¨ėâŠäéáɇ1æOôEHÍEq-ÁŽ^UOQĢg6Ķ-ęˆâĢЈblĮú'āĘ;ŽÔs؁ÂáB-kcQ\sááúf˛ëΚ:“m×VGĢēĢЈbDq?sĸ¸έ[qež+<õ„˜lYfuKļ…ęäÅWKXg‚ŊŖlÃ7â6Hé*ȁ_Pë[éŽÍˆâÖ9΍°IĀ•9vî–lÃEģ[˛Mė¸3´T°7Ū’-{ncz;ÍŅngÔÖp'D1ĸ¸ŸYQÜįÖ­¸2aW‹â=|ĮØNwį¯~ŦM¤[§%ȝŽo¤[ĸiņšŪ1Đß×8ŧŖTØĻv“}3OmĻÖo_Qkå[˛M=ŊԜIëôŠuŖ39VË[.‚€,Wōŋr^īá›ėyžūÂÉĄũŦ‰§{Ņ/ė_UëšLˇ¯^TƒážÁķī(=æ9Ûã>wøĶöÕ j­lKļŠmá„JJdSjƚ+9f¸›A˜G;Fg͌"ô G_™yĖsõƒjĶ̎(ŸĮ°ú˜į¯æN`]^§|"3\˙đŽ:ĸXeĸz¸Á|ãĢÍ&Š39fļ›X‡@)Wōŋú˜g}XЗgķ\z<´ž_JöCoQ>1WyĖķ×&3Ō7Ô*ŸH-×=ŧŖ–(Ök!ZT§‡-Õ9žÚđؐĖ1I[†ģíĨyDąãac8 Ü#Į"]hM€üoŽkĖ1I[5Ũę2Dąãáf8 Ü#Į"]hM€üoŽkĖ1I[5Ũę2Dąãáf8 Ü#Į"]hM€üoŽkĖ1I[5Ũę2Dąãáf8 Ü#Į"]hM€üoŽkÎ1m/ûŅ.˙]öģĒ{jv!šËŎ‡Zz09Ū]Üŗ@€ŗ&!@ū;Š`‘Ė1Wm…‰Üûŗ’Ø4 ķūöųĸxž¤,Y8°rJ]Čæä$)æ•Ē•Īũå‹'ä˜Y!æ~WbˆâŽ ßī{ŌVNŦé*İÆė+Ē.įkK5qI †žnXš‘_N'× ČôD]ąbĄŌÚģÜĘvõ$ÆDî{Ž‚˜œ@xų_g^š'ŠĢž­›Ÿ ­VŠĮbÚ˙oŪĘIæ˜Ģļæg†W Š“äčŋĢsęÚŽ_VōĨ IņĘÉßSƒAQ$Ξ3ą;ĩŊ™(žœ\į­^ė°i!Š=¯…ķ;ĮúĪjZ ‹@xų_œËâ5OO΃uŖ^=×&ßÄ]ŒjŠKv›hūía]ė_'™c’ļė“qĪDą{1™đČīPwĩA× 5Ã_QëÇ7t}ī˛ZlĨĩŊ™Đ͞.ųīxeˇ‰(Ö~ ÔI]w\|*ģÖJqÕjŗãIUpĪīķ‹5ŪēG ¸ü–u-ÎyØ´(Ž˜Ģ“Ģ×ŋZØ}"K‰ŠoũÜ˕ļI昤­ļũ ų>DąãŅõ{ÔŅ $;PlžŌŋeĢŊMėÔÅéĪZ|ŸŲĖ= ŨdĨQėøđÁ=Ė%ā÷[Ō=QÜdΝôĄūˇrßÅssUú‚ār_ĸXĸI~'mõÄĒw}øęÆä.yŽÅ3FÛÕŠ7Ģ)Š+ß8Å&ķÛp€ßsŦ)Qœ=0WĩCPÚŽ~Xyemb[MDņtL$sĖU[Žëļū ŠÛ’ëé>ÉГ˹fĒj3ą\}øÅT}ŲpĄdīb-nü‚ZßJw¤PŨDņö•:´˜|õWĢ|ĸũjJ˙ą¨nŅīs‰$žøH ŧü—¨)N"™= ]áø Á=t āû;Ũu‰Ũ'˛•`} sōĖ…ŽÎ}ŗˇŗŋ{“Ã;fŠÎpÂlõVÉ“´eŠŖ#Š Læ–÷`Ö^žÉcžKÆhpxGĄÔĸ|ŸâtŸãáCv‹j˙ęúđØŌņjqē­û;>Hpx?Į–ô}žĀœ÷ ]Îhå1Ī_+œ4ē§]ųD!ß!Ȗou5Į\õËf¸Å6é×hÛ˙¤ w˛›˙ÆS#Ā\âŽ9ŧ%dūûv°oū6ĖvWsĖUŋâŊQ,ŠSŪXI;Ŧžķ†<:ŗŗ#PW7TVÍlļAsփČ1sx°80ķÎņNÅ4Ũ ČķũŪg!•Ė1Wm9•RœAw€×Į­’ ËÛH'ŊĘ6ėyÖŽå¤ūøâ)ĩąúAÁvvíÜFŽŲaGĢū6˙‡ܗJĘp*jÃįK–ÔĄÁ‹ŖgE|I昤­Qwîĸ¸3Bŗ‚éCq‹+gÔÖŧ#Í"íh=Ä[gÔĘâuōâĢmšq{09æNŧđŒ@Čųŋ}õ‚ZKįĘúwԃ Îuũ ŸÂŊ#6É“´Õą[AŪŽ(v<Ŧ Į€{äXA¤ ­ ˙­ŅqcMŽæ˜Ģ~ÕÄjä2DąŦrFIZ9–X*'@Ž‘1 ˙cŽ~?}—Ė1WmõCŌ|+ˆbķŒ;ĩ 9:9ÂÍÁ Į‚ -ĢA€ü¯‰K:Ė1WmuäĐ͈b‡‚QæŠäpŧ̏g‰9f <Í:A€üw" A;!™c’۞sˆâ–āúēĐéxÛ!Įâ==WŠü' Lp5Į\õËte0žB€€ŗΆ&Į$sLŌV(€ÅĄD’~@€ 4I!+i+čˆâP"I? @Ā*D†UüQ4NŽ™ 3ĸØ,_ŦC€@$,‘Úb7%sLŌ–E$ĸM#ŠEqb €b%€Čˆ5ō~ö›|ŽĸØĪ\Æk@€"# )d%m…Dq(‘¤€ `•"Ã*ū('ĮˆQl–/Ö!@ –Hmą›ä˜Yøˆbŗ|ą@‘@°Dč@ēIžNQHrĶ @°K‘a— ­K昤­PØ#ŠC‰$ũ€ @ h’BVŌV(ĐÅĄD’~@€€Uˆ ĢøŖhœ3fDąYžX‡ HhÁ’‰–ė˙Ģ~§‘ä¯É׿ßڎĄeņnĶoÉĄ„ĀžĻ‰(–Ė0lA€ X bb&r Qˁ 8OÁâ|ˆŧwC{ŸÄt€Â'€` ?ÆôĐ=”O¸<‚ Č Š#Oēo…ĸØ v… @öđÁ‹ō {ŲGË€ š,5AqYkäĸ¸uōp# @ /–žHĮÛ9†(Ž7ûé9 xCÁâM¨p4 ÔLē@€ęāƒ+Åuō„k @V XŦâĸqr QEĸĶI@đ›‚Åīøųā=9†(ö!Oņ€"'€`‰<čžÔ[ÁNŖ€ jˆb˛Ã4rŒ•bĶ9†}@€ ā<D1ĸØų$ÅA@€‚…0M€C›Î1ėC€:Ђ%-Ų˙WũN7ÖôšĖÁü}E;u¯qŠíYũ)ãŲWŸ]mģsĸf€šâĀJw @€š@7gÆ€ @@Pē@€ Мĸ¸93î€ @Œĸ8°€Ō@€ æÅ͙q @€@`Ł”î@€ 4'€(nΌ; @€#€(, t€ @ 9DqsfÜ@€ Dq`Ĩ;€ @Í Š›3ã@€ Ā Š (Ũ @hNQܜw@€ FQX@é @€@sˆâæĖ¸€ @ 0ˆâĀJw @€šø˙,ŸÁ MIENDŽB`‚dlt-daemon-2.18.6/doc/images/dlt_overview.png000066400000000000000000000552311377520261000210760ustar00rootroot00000000000000‰PNG  IHDRˇIÁ?Ŧ IDATxœėŨy|SUū?ū÷%UBéĸΌ˛tĄIg¤E6­ėHÁâH@ļŌĻčgHq>€@Ą+ 2BÃ|TÚ"XĄ*e~ZaÚTŲéÂ|•ÅŅČŌ$t™Īg>XZŠß/ÚpÜ$M›´M“›f{=}hrsΚ'!gšįœœË°,KĐWčE8 €ûúR~ˆaüģ8†a˜î΀WB/ ĀčE8Ŋ(?USS3pā@wįĀ‹š˛ĨV0$ ĩŽˆH§’0•Î…§%ŌŠ •ÎÎsŠ ŖPģ4?ŨK§’0–ú+ôĪūsæĖ™Ÿ|ōI?Āšz,*ŊœeY–Õ–‹ ’SU:"Ą˛š­V ]yNõļä QŋœË)Be5Ëjķ(!O˲,›/íŗętēäääŋūõ¯Ī<ķLœĀGŲîE™I¸$JÂ0‰BÂ0ŒDĄR)$ ÃGyÔ ķK=ŒûĨ+ķjJĘtãC:ĩBb§RĮЌ§H¸ĩ‚a câÆ‘s´ŽŅ­Ž„T:ŌŠr ˆj2E•ēc,ĒË;ęYw§čČXĮ'eõ.läŲ=WĶۉ†‘H†Q¨m|>ÖīÂȤ׎]›:ujvvļ\.ˇ'<tĮV/J­eRž–eŲrqAō6S§Až˛š-O¯)Čŧ˜RÍjķj2Í/‰SĒYļ<Ŋ&3ĩĮļŧæĸļã‰Pš_Ͳ,˖§×pũĢÔĖqš–­^iŲĀkbVr§+(UŠÉâr­Å薮Ŧ¤€ŌËĩZ–eĢ•B*ŗŌ‰ō´ÕJQ/īČ6ĢSt“1ÛīÂ:Ī=EˇEœÅ˛lžÔ:eĢwĄSĨ&ˆËY–ÕfQĻ¨× Á7nL:UĄP¤§§Û“聍^”ŽVC r™ˆ¤ųĶLâhãÔXBŒ¨K qŠ”ˆ¤)éûIV:ĮÔŠU …DÂ$t !$F‹-ļ8ĸĢ՘˜N'Tfå‘&Y$˛¯˛īŲfãļ3ÖũģčœįŖ[3H]Sļ~ڋ5DÉ Ãˆ’ ˆ4ĩ=uaÛÚڒ““e2ŲęÕĢ{ĪôÆF/J-ĻnXÅÎĨāĨj"R—ØčaéĘJjŒ]ŽZ!J.Ą”ĸ"mšÅ¸HÍE­Žë/Ø&Œ›ÂtœNĒŦŽfYV›—΍W9÷ŽlžĸģŒŲ~Öz{_ÖŦSļ~ĸ˜JH/ײœ–€Ũšs'%%åąĮÛēuĢŨY€žØšŅ“ækķÄ%"†aD%âŧĸŪ—g'PŠ„a’ Ŧ$s yD%âōN/JSōj ’EĸÔRJ0*å%$‹Éļ‹ŨžJš_žŽI1Œ(Y“ÎĨhZ$ĘÔ¤į­”‰RŌšuQڎX=ŋ#S.‰Jg}Š2fũ.Ŧ •Ey\‚Š%Ŋ}’=Ļlõ.„Ęĸ<ą&YÔ˨öööšsᆆ†æįį3 c  ˲NŨOM­`’Šœ—Ÿ—™“ŌŠĸLžåƒĮfĖ,Ë.]ē´ŠŠéđáÃ÷ŨwŸģŗā#† pw,HWæĨ§&3 %¤įyNOÅc3Ö–eWŽ\ųŨwß=z](~9=l˖-~øáŠS§xāwį§xØXđ*??ŋ°°°ĒĒ ](W@/Ę78p`ĶĻM§OŸ2dˆģķā›0Ŗįƒ***RSS9ōÛßūÖŨyđM3zøŧ/š˙ūû=Š.€K{Q‹čÛw#€žĄāôĸ^€#ЋpzQŽ@/ ĀčE8Ŋ(G āôĸ^€#ЋpŸŊ¨œœœœœ†a†ÉÉÉą<Žƒ8ˆƒ8ˆƒžvpüøņ?~ŧÛ˙ųp—ƒNbX–e†eYŌâ)č999<6'~íÃ}Ћ°Ú; "†aøœŅËÎÎæ15Ī„ö8|ŽEx8žæ˛y‹/‚EQāŸ6nÜČWR‹đS¨üÁ?ņ¸œįxL Ā!:•„1S¨­™ŽëTĶëD¤VpO¸˙w~;,QéĖĄlŸÍö%*ņˆET̄›¸šŊS+›5OĪ‘T\ed‡Î5›Ũ••×Tl<.kãŗÅã€Ct*‰čbkRNÉÆ> %äiŲųRî &×v‘*ŗŌ J-:=ĨéYJĄÍsÚHY­•ȍGĩō‘wÔ+ā°DÚannī¤ų\—Néå–uZOÔĨ%}9…1áÎiīŲ˛##€ĮN0ÖEQoË—[bi>[ŨM߇ˆˆÄYE1ŨôŖ¤+ķ4šÆŠC§ĘÕä­´ģnĐŠr5yEĻķ •Õ^R¯€˙Á‚1Q{=Ļį 5ŠÉ5™"͐ģe0J"‘Hēr’ŽĖŖ’2uDĩBbŽ$%Gë;ŗ$*uÆ|v:Ÿ’#""Ë"l,Ķ5™"[ãĶBe%ÛŦ;„2šąâЕ•\ÖmgĖVĘâčúnāõ<ąŊS+’É8€TDŠ 5ŠK5ÜPųJ‘Nš_žž§Í—Z#ĸqVãYÂhąÍôĨ)âĖmj"Ō••ˆ-GëuĒTĶpŧV^’*‘XŸŅg`]ø”š‹Z"âF€X–Õæ%_č4īfYYHķËm÷ŖLŨ¨ŽõCWV) ŖÅšZ‹ë-ZmãęËÔß/äíŽVCÉÜõœ(ŗFS̓ޔ—ˆ†aRËz FŊÕGēZ8Zh#ĸ4%Ŋ TMęm™âË.˜öĸųĘS¨Ŧ.’“õŨ 3zļHWæi,'đue%5vÄĘ/§ääĢãBe–¸¤LÕĩ~°#ÁqfĒ):Ujrn™Ž„Ņ⎕VęŌ Wûy`W&Œ[^ĶU+…ÆËI­iBŽģ`Ŋ0v’lE”ŽĖĶ”*Jģ.yÅtœQ­eÖôņŒ.Įã˛6ôĸĀ—•ÕlÖEķ ›čb–iÜŠĶŧ[ךyi~yē­ä¤)âĖĖŪ–DŲHYš¯5^2Œ¨DŽåĒ›ür2^Ž1ÉTŽĩRā~øIO‘æ[Ô~ÜZ(ãøq8Ŋ&S$QéŦ‚Ųf=捝lEĘäšM×%Be‘š LĻr–ĩëŒŪ‰ĪũĸpcK/ÂWåī‡ĐŪy5÷.÷”ģ777ˇļļ:Ÿā<øāƒîÎx4t†(‡ôĸš››_š7īČéĶ„„8ŸG8ųŪ=2zķ­[ãcc‹ u*}°‚^Ã0<&įØ/?͙ķđ¯ũŋß}wīŊ÷:söŽ/4÷ ËĶū=Îē;­mmĢŪ~ûĨ™3?9y’€Wž¸Ķ¸ƒ›īŖ×ÖÖ6ä‘GšÎ <ØÉ¤Đ‹ęrüÎĪ?˙æŲg›~ø!Ä]ƒ|ž‡ĮuQnūŪ7BƒƒīBĩûîŊ÷  ĻĻĻ_~ųÅŨyO„EQ⟰́ŋknmm¸~Ŋáúõ†ũ‹ûkûé'›![ZZŽ_ŋŽŽXÃNNâs]~îŅš[[—nŪ|ėË/ģ,ÆoniģwíÚṔŊģwīŪēuëčĮlø2´w^Įem|ŽEá˛ÆĨÚ~úŠáúuųēu÷×õUũŲŗ–MįĪ?<|xÚÖ­6ãŪŊ{ˇŸs žK¤†öÎĢá0~į­ââˆįž›°lŲ7:]ÍŲŗÂ„„ŋŧûŽe€ Áƒ˙úÆGŋüōæ­[îĘ$xŒĻ8Éũ;@¯Ú~úiËûīŠV ##š#ēēē'““3. 4Čėžûî{ $¤åöíŦÖp%´wĀás, —5.rŖĨ%(0Đ܅""addP`āæf7æ ĀoĄŊķj˜Ņķ/ˇļĩéęęĖG´W¯Ūē}ûAėKN@WüËÚøœŅ 8pÍĸEO%'øīÜx˙ũ­mmë”JËé<€žÚ¸q#:RÎŒ^*Ö¯ßŲ`ë•ĶŲ‚ŅŲ–G÷%>:ogŖĢ˛ō§yķęJK‹7nŧ7 āÔ§Ÿ6ž=û§Œ W zäsíņŋęŽĢVÍČ8ŪãŪÚ-ûøŠķÉčö/LÚ´_mŅÁŌ/LĘũPŨä|ڎÃi‡a§¯æ?ëĸęôĮWIf  Ŧ iĒ]mQ¯š1`ČÁĐ…õDD'V † Ë8Atâ5Áđá'ˆ¨žbÍLAx¸ üųŒ=ÆÁ%ũŪ?"#‘‘‰ëNę‰čd– *Ģ‚ˆčT†P˜qĒaįÛ]X1eöÎͧ3fG FŽŒ™¸ĄHoĖ›67{Ž`ôhÁŧ}úNynŦØ8?@,xlÁ˛ũD$œŸģwâÕÍ됚ēŦĒQG$œ÷ÆŪ W7g HM]VÕ¤ŗãƒāv:˜—ũs{û¸™3ÃÆŽí˛Ķ@_a@ĀI|öĸxŋŦŅ*Eķ/?–Y}÷Лʉ‘Ũ‘íUöÆęLʑd'š°ĩ6'ŽpápÁÂâøœĘ]Hŋg…ŦxTYCƒáÔi͏ŒD'ÖFoĸ'ë u{Å-ŲvŌúäáË_™C4fĮ‘˟~zׁZÕ+†ÂŲg¨ËLs|ō—>4\*Hģ°%u_Į@“~ßZŲAŅaĻŊ,ļʖUQ˜0qCeŅ?/Oj^™ūV J˛*‹.\~F¤YūÜ[UŊ|æΝûĻū̝ž,/ßŧsgÛíÛ||ĖĐ7ÆŽG¯‹ŠJSi÷ú6O2`Æ*Õņ:›Gjĩg‰öˆ HiôõDĩ43ˆâæeŊADZí9ĸbYx¸`ÜĸB"M]ƒžî2Å>+ 'ĸņģŽ^Ũ5žįŒ4T­Ī˜3GvĀâ (:Œˆ’RätFßąxJ{õkĸƒĶÅâŲ˅DšúFĸF]ÕϤÔߍú‚fŊ}øŨD"jŌUį&ĨŽõ9ÍÚųŲģ‰Ŋ|ØéĀŖ`ĪĢųΌ^dÔÄ7ĢũpW5*”Įm‰ĨąķËĒ0\ģf¸v­*-‚ˆ*V/(¤¸øsŞ×N‘HGqķĘN5 õõUKÂŖ"GŅųŋ—5QÃÎF$îåēAWjˆę43Qą~ŠŦœRļn­-œmq¸¤´’ˆ*KK(>*Ü|T4âqz|ÖárMûˇßļûmåü0ŨūŦÅĮGŦ}ũŸíEë—'†‘ŽxŨâ#Öæ^h/ĘZž8ŧ×O;€+ +ūÉ˙v:ˆœ¨|sĸí#U;´J™dÅĪĪ)ښFģŸ“Įí¨,]Nī%&-LŽZ˛c‡v…l\8ÅĪŨP´yIԄÍĩÖ¤Ž\A˙âúĸÅáÄNŪûҊ‰Q%sb§ˆ˜œF¯˜2{ĮēuņېM=?{v<]¸hxŖ9:W~ÆŦŠ]FĻ9Ŋ¨›w\];=YLDņŗVī]?O8˙ƒJ"bYsŪ…ķ>¨´xÚ+ėtŽ€œÄ°,Ë0 ۗFŊ;ÜãēĄĄái‰¤ū̝œ?{Į[ātyÚŋĮY$ÛöĶOW¯]K\ēô‘#<ü°uĒĨĩ5,.ŽéĶOäbxá…âŋũmذa=ôXāĢō÷C´wā9øúįcÆKv:ĸ+Mųũī˙˛k×ŨģwģŧzįΝ•›6‹ 8Đ-Ų¯ƒ%ŌC{įÕxė{Ɍ˜ė^ģvqnîđØØĐā`Ëã?Ūŧ9ųÉ'÷Ž]뮌€×Áh €“øėEá˛Ļ„•žųæ­Ûˇlią<t˙ũĄAAD`€+ ŊŸŊ(\Öô›Áƒ æfîŦ×Q€‹ĄŊķj<.kķđĀUĐ˙Äã˛6ßčEÕŠf  *XŨ—ûę5ėMŒüÃÎĸ†Ŋ‰#^°}×a[Ņ*˛ŗw65~8zŽën? ājX" ā$ŪģÜ^uGKΎM›Gû?¯p zøâĒĢ[Ū{@"ĸĶīÉÔ…-Ŧēôáō0ÎŪ Ãx^Įemž°Ķūčá3c§¯\6=žö—rŖQ'V †§$ž–">\0sžˆNŦ„?Ÿ¸æyAD„āų=îl1Ĩ–@(…‰Y§ôDÔp*cv´ :Z¸ĄHO ;ß9@taÅ3/îŦė‹Ēș'ˆ‰<úhbNĨžˆ*7ˆ7.Û´ āąĮnR÷ī§`',‘v†ņŧš˙ÜÆu?|–FEEEL‘ĮQáį“zâgJ M¤ËIŨSo<2õCũŪ´ķ›R÷ؚĀ;™ũ:í8Ļ3čŪüŌļSDáãv¨5ÔÖvs÷!_ūōlĸ1;>˙¨cėĒ2GV"*̏hPīĖ0Ũ™X;zŅžö˛Õņ_˙íPo7p ¨8‰Ī^”{.kꎖœ%Ú?_0T˛âYLęJ™@DRæŅ-w瑯#séŒîĒuJúú++“…ҏ]:ŨŽqdŧņėŲ‚ĨŦÛbiiL”(Œ(,)ešĘõĪDĸ0ĸ°p1¯ī<†ņ€ãõëĸôGŸĄųe?ü`¸vͰo>ŅūŌÜ+ÅĨ'ˆčDi1ŋ"‰ˆčCã‘)^8Â:Ѝˆ‘tžĖx‹bš0ņũ†Šõ“eå”ōæ›ĩģg[‡7ÅŅŊą˛ô ŏ°sx+ ãy5Ėč™ÕũũđYš?MĘ=›øLQa׍ŠŖĪSÃÆå-‰0ųâyAÄâÂØ EKlõuÆįÖŽY2I(N*‰Î*Z>mōēø dSϤ!ã}ˆÃ'§qëĸĖS‚I9er­lZŒ@šĄ™ĩĢhœ€w@WüËÚøŧą\u7âĢ ¨ŦéĪĶČ´å‰5‚TļŦaË4¯ŊąĮq7bčîF ū‰¯o>Īw#Æe ø´w^Įem|ŽE9ŽĢÆĸČ̓@‹ĪĮã}0ü †ņ€x‹/‚.€“ŧ§€ū…ö8XĐ7hīŧv:gĄ+ū‰ĮЋđS¸€“0ŖĐ7hīŧËÚøėEá˛Ā‹`‰´ÃĐŪy5Ŧ‹ga@ĀIØé oĐŪëĸúíWÌ8 ]đOØéœ…%ŌNŒ@ß ŊķjØéœ…%ŌC{įÕ°. œ…'a§€žA{Ŧ‹č´w^ 3zā,tĀ?a§p–H8 3z}ƒöÎĢa§p–H; íWķuQAAA?ŪŧyįÎ÷fÃ'ĩ´ĩ5ßēę‡Â€ €“ÜŧĶAhh蔧ŸVŽ_ßzë9;?˙ŧúwÆĮÆ4ČŨyđ5ÆÃ˛,Ã0,Ëē+ÍÍ͋æĖ9QSėž8ųŪ=2ú­­Sž|2[Ĩ &ĸ‡zČŠø„œœ^bŽ˙äŪ^§­­M¯×ßō˜Š3f:tČŨšp\PPPPPųiHHHHHˆķˆ¯ļĀģđÕíņ ^ũōË/ׯ_ŋ{÷Žģ3BDYWWįî\đcĀ€<ōČ=÷ÜãgņĘ Ÿņ؋ p>3'/kîšįžGyäöíÛíííüeĘqîÎ 0xđ`tĄx„a<¯Æã˛6>Įĸ|鞯—Ū €Mč 8 mī3zžô­ōĨ÷üBDÄ0Œ›w:đ:hī€ãAĢË= >ŸÄãN¸1€ŸÂĸ(đO<ŪĀcQļá3Ÿ‡ŠüËÁų‹Âe ø´w^ ;¸œ/Ŋ›°ĶÃĐFa§ƒøŌ{~ĄÂN@{Ŧ.ˇ Ÿ €OÂNā,,Š˙„\Ÿ øĐŪ/°.ĒÃë¯ŋÖĐаlŲ˛šššŗgĪĻĨĨ566Ž1bÛļmîÎx ooīü˙|øžŅöíÛWŽ\še˖UĢVuyé7ŪØ°aCnnîš5kēF;ö|ĐLú´õ“IΞĶhæŖŲKœMĀ^Xū‰Į…LčEÕÕՉDĸ7Ž[ˇÎf€-[ļŦ_ŋžąąqȐ!^ā­ĐßPųƒÂNԃ>€~āŊíđ+€Į´ŧ÷˛fûöíŊ†0`Ā[oŊeã…[ŸNfããQŲK—6~Ä0Lļņé"útrdÔ¨QDD“>éz¤} ũĀ{Û; ^Šß蹜ÅĪøŒÛHŦŽô°Áutė†ŧĀN⟰́w9ö|ĐäOo žy´õ“IļŽô):PųƒÂNŪeŌ'­ÜöXSČúHŸĸ€;ĄŊķj<.kÃŨˆüfô†öˆ÷ą(_‚š|*:'a§Û°ŖtĮ—Ú;pV—Û†ĪĀ'ņ5—=˙…=đO#Qé,Ķ2ĶŠ$ …Âô’ZŅ)P×XĻį–§äNhOūģÍ€˙ņĨöœuQNS+’ŠœeY–eË)YĄ&*ĩDŽeY–eS¨€ d‰’æ—§'äiķĨDT#ÎbŲ|ŠN•kŒŽÍĶäĒtd_+/I•HĖéQĒŠŖeR@),˲åâLQŠéŅ6u§\qąÔĨš<-˲ėJ‘Îō1YeĀFū­Rđg~ÚŪų ˙ų0Ŗį,]­&=Ÿ8Jš’ŽŠÕi/ֈŖ…Ļ\ ŽÕIBŒˆˆH¨,ŠÉe†aD™5DD¤ŊHrc`Ą˛ēHNTĖ˜Bhj;Ī-ŠI0į˜Ģ.ą¤+å%"†a˜Ô2˛|lëü[§Æ×§n„Žø'w:@/ĘYÂhqAŠqpF]Z ŽŠbLũ ui‘íN”‘N%IĨ"ãPP‰b¨¤ĖØOQ+D™5 ÜĀ˲,[mßÂta´¸k,Ą˛šeYm•”é,Ģ­2`Š€÷ãą-đO˜Ņsš4ŋœŒã4ÉTž/%Ą˛Č8ÔÔR:uíDÕdŠ$*­é™P&§L.pęE1]Ԓe|&™ĘY6ëĸČ´p‰ąw6Mšß%–qa“(SœĨÔZ<–ZeĀ*˙6Rđg~ÚŪų ėtārÎŧnxŠZ)ėûnÁÛķvÂNķĨöÆpßôĸŦ9WščTãŖ„<­Îy{ū\˗Ú;pĪŊ(\ր?@{Ä{/ ĀÃņÕ f°w9€ßÂh ø'ėtār¨\Āįa§'a§ÛPš@w|ŠŊķCØéĀå|éŊ؄%ŌC„uQ–ÆŽÛŌŌbķĨ–––ącĮös~\ ]('ņŲ‹ōę{\2äđáÃ6_:|øđĐĄCû9?āąŧēŊa]”‘\.?xđ Í—JJJf͚ÕĪųåÕíđøĪ‡ũĸŒZZZššš‚‚‚ČbÎģËqŸuQāŸx\ŽuQFÁÁÁãÆ;tč÷ÔW($*Í#jZ§’H$ÆšWlā–H;Ė{Û; ^;ÁØé€ˆHĢÕFEŠz 6bxtmmmO!Ԋd*gY–eŲrJV¨I§J-‘kY–eŲ* "G:“ą,Ëj퍤L×k`Įa@ĀIØé€ˆH$éë´ŊģÚTŨC]­&=Å85'MI×Ôę´kÄŅBĶ""ë#_F‹í îāŊíđ ëĸˆˆâââ.üķŦÁ`č!ŒÁ`Đ\9×Ca´¸ ”›Č#ui8Z(ŠIĐÔęLˆˆŦô O xo{„=Ū >\52Ī_{ŗˇä¯#ÂF6ŦĶҚLcąJš_NÉÜŗd*Ī—’PY$/႔R:Ų8ԃ>čtĀ?ņ¸Ŧ ;étē§žüũß{tÔc<îeą‚q;‘Õ‘~g?åž ō˙„ø' ˇŊąķŲY“Ū.ĖŗœÚ3 ûķäËĻlú“ʁ-7-“’5y+ĨļŽô):¸WˇwĀã˛6>Įĸ|ā˛F§ĶĨÎ_ĸÕ_ųŨŖq#ÂEú:í?ŋ;1r˙=Øĩ| ö.w˜´wā<ž÷.÷o˲ß˙ũšsį222víÚ7lذŽũĘĀīųF{Nb&€Įä|㗟 à >|øđá3gÎLIIqwvĀãøF{ÎÃęōnácđ=|ÍeķŧēŧEÂNũ ø6Ôr⟰Ķ€Û ŊķjØé ?øØÛč;8 v:虏Ŋā  ŪgôđËOđhī€ƒÕåŨÂĮā{°Ķ8 ‹ĸĀ?a§ƒū€|j9đOØéĀmĐŪy5ėtĐ|ėít†;ôĖĮŪđ v:pÚ;ā`uyˇđąøėtÎÂĸ(đOØé ?āc߆Züv:p´w^ ;ô{;]`§‡ĄÂN=ķąˇ|A„€ö8X]Ū-|,ž;€ŗ°( ü“_ėtĐÜÜÜÚÚęÆ DDDÔ××ģ1žīÁ tw.ĀYn/kĐ+•5ĪŦüũĘ Ã+<.p>3ž†Čš››_š7īČéĶ„„8ŸšÃî xZ"ąņŋ•Ž'§Ö[‚͡n-:t(44”įķBŋđ˛Ö-O.(kūÍëÛ;gžĀž׹ĸáã;<÷Ė3˙ú×;ssīŊ÷^įS3ë”7ķcëžņ*ÛkxČpk[ÛĒˇßžŅÚúÉɓ^eÍĪËv:p˜į´wl—/Lŋ=ĩ8ÎēéŧäîfČw:hkkōČ#MįÎ ė|–,ĄfwÅĢw~ūų7Ī>ÛôÃ!ž9˜ŨCYë”W”5č ĪiīüŧåŪĸá‰;ܸq#48˜÷j\äž{ī} (¨ŠŠé—_~qw^ oPÖŧ ƚGA{į9Ü[4x^ÅcjāvÍ­­­ˇoŸ°,=x˙ũÖ![ZZŽ_ŋūČ#ÜsĪ=ũ™C߀˛æuĐŪõæÖÖÖļ6Ë#ŧ į˛ųėEĪhnm]ēyķą¯žę˛āąšĨe\lėŪ5kBƒ‚ēDš{÷î­[ˇxā~Ė&€×soYÃē(đXÍ­­KßxãØ—_Ú.k׆ZáŲ_46nÜČ×7ûEA'm?ũÔpũē<+ëūú¯žĒ?{Öō¯éüų‡‡O{ķM›qīŪŊÛĪšđ^žPÖxÜ5€/ÆĸąvíũÁÁŨ­[mÆí˙fˆĪ^ŽiŧŨ[ÅÅ))^y坎æėYaBÂ_Ū}×2@ĐāÁ}ãŖ_~yķÖ-weĀ Ŧy;´w.ōVqqÄsĪMXļĖĨEƒĮøėEá˛ÆĢĩũôĶ–ĸĸ/ÕęúsįūũŨwõ_}õeyųæ;ÛĖË5ˆˆčžûî{ $¤ĨķA°Ÿį”5Ü Îahī\Ąí§ŸļėŨÛEƒĮN0fôĀčFKKP` 02Ō|DxŖšŲšđ=žSÖ0 ÅsІũ=oîÜ'Ÿ|ĸįč €•î Teļ`´Uz”įe,7ē´âqYzQDDTbįš™'ēyžĶ‘đÅUu˙ßōp>OĢ˙`nbΞ ‹¯ ~ßŧ.GŧFŨqÕĒĮ-ŽÔßšúšNåˆw§vËÔ:ŸŒn˙‚¤MûÕEOWœšôząÚĢ ã7ļoß3:C‘÷ģč¯ž:Ûsx,‘öhÖĘúīNí–}|ÅųdŦ‹îÃÔ¤ÜÕMΧíYü|§ƒzũ‰×S† 2?§Š;vMāŽŦI|>\đę4uûŽ aÍcQDDWr×Ŋ ˆŠĖz_OD§˛Baĸ\(fU4œĘ‹"‘ ::q}‘žˆNoŒ™8g¤`äœÄG%~Đ@DŲŖŲ•Q ˙\4IŸģ&F0o^FeŖž(jÁ–ĸIúÜĩâ€ųķ—U6ęú÷ãā~}=oãÆŸÛÛĮ͜6vl—Ÿ˜ØR§?žJ2cČeMSíšHDõúãĢg ,˙œĻЏ’UņZŠ`øpÁđ”Œ=õDD'ÖÂÂ2NX#Ī8AD kŸDF "˙ą×XŌô{_Œ!ˆŠJĖ:i*kYDD§2DĸŒS ;ßū˜čŠ)ŗwž>1g¤`äHÁȑ‰ŠôÆŧÕæfĪŒ-˜ûžSž+ræ }T žŋl_# įŋąwÂÕÍë X¸pYUŖŽH8īõŊŽn^˙쀅 —U5ņ[ų-kæÁ§¨¨¨ķ_Õŧ›÷Æ7˙į¨ōåĨšš{'\Ũŧ>6`ŅĸeÕŨ(n§ƒyŲŲ.m†°Ķ?ôģ•Ņ /‹••†Ō?/ŸADú=+ĸS/‹˙xĘđÉîHwäé3čßK;˙zęûÆę^üŠÎ Ë>nW‰Ö ÕvĪ>s ŧĖ4.*~ųŠáĘĮEŌ1gÔ§ôtē´„Ō&'…E%åT_Ŧ&Ō(ĻmĢ$ã‘ũšËΈ4˒ßĒtŨģīĘüëë†sįūGŖéî'Ļŗ–ŧ‹žP)šųąĖęģ‡ŪTNŒ$"}áōč—ęՆC[%kˇRV<ĒŦŠÉPФœ§3NMØR›W¸(\°čÃøėSģ&~Ī Ų‡ŖĘęę '˙H›Ægœ$:š.úuÚqâĒA˙žøŖ—ļ´>yøōWæŲqäĀō§ŸŪõņÕ+†ÂŲg¨ÍEOūŌ‡†Kiļ¤îë¸.Öī[#;(*ûî;Cš‚ļ&/Ģ$ĸ0aŌ†Ę}ß^ž*Ôŧüė[UD&L\_YôĪËĪDkūcú[Uŧ}b<–ĩ.ƒOÚVä%%<Å0Œ=Ņ]ŋDZ]Zââ3¸‰ëÚ;[ĘÆŲūQe?üpˇ:“r$Į‰&n­Í‰+\0L°°8>§ŌX ŠG•54Nũ‘6ŽË8Atbmô&Úq˛ÎPˇWüŅĮ ÔÅü.JˇoíôƒĸÃß~Û^–No>ģĖēøTŅpĄ$Ģōũķ—§Š4ËSŪĒļņŪÍ;¸¨2ÃNüˆZĒĒũ`”F•$Hymį‰z"ŠZ˛Ŗļh”æ¯ãΝáŽtcdt8Oy‘Îč¸_ÄÆDp/5Tŧŋ>C.,=`~LL8QÔÂeiÔe§ë5$OI"ĸF}eNâŧ˜č ’įWė2™/õ9ÍzˇüŨ$Ūßtˇ\÷ĶžÎ2€w‰JSi÷ú6O2`Æ*Õņ:"ŠJÛYģo´&O"˜ąš+GZí9ĸbŲđႤ……Dšēz"ŠZ˛<ˆâæf-‰ "­î<҇˛ČHÁøÅ…Dšē}ŨЕɉhü.Ŋ~×øž3ŌPQ´!cÎAšeŅ‹Ž#ĸ¤9ŅwŦõĐęŋ&:({ôQAō˛B"M}#QŖŽrSŌ‚ĮF}AŗŪųûģ‰DÔ¨Ģz=)õwŖ>§Y˙uøŨDŪ>1įËZwƒO<С{Ú÷ĩ-ŅŠ$ GĸŌŠÆgÆą$J"‘H:H.¨É)ÔĻWjëX6OŖP(Lɨ ’EtãĶsˤš„­NdΞBĄčۜŧûŲ*P]ÔjĪí— 2@2ŋHŖ¯'ĸ¨Ĩ™iD7/ëĨ2ēđpÁ¸EĻu™bŸ5¨ĢW*P"Ûęę×D§?öX€ėåŽeY|$DÔ¤ĢÎMZ;ę šĩŗô]‰Sb§¯ûågDԄ?W•6ōžĄ/VdœāŽlŠú¤Á°}*}ņj÷ë9>*=ID'K?ĸxa¤å ë'ËĘ)eÛļÚŨŗmE|:eö…’wÕg䓧é?x-õXT֖‹†âœåIaD¤ßˇ&õXTÖfMûūlîHŋáũ'Ļž3ËāĢs #2jâ›Õ‡~¸ĢšFƌãD5qkÕĄk†ĪP…2ã‰Dq7¯Ŧ˛ÉĐÔdhlŦZADkR ).ū܇˛5'ˆH$ŒĨØše'ë uu†ēēĒÅáQ‘#é|YY5ėœ•h÷­­m j¨ĶtÎDÅú)25ĨlŨZ[hYô”VQei ÅGuŦjE=NĪ*SgĐhÚ5šĘaēũëŸąöoÛ?ذ<1ŒˆtÅëŸąöõļĩ&*×R›§ÉUé,ŗŸBDd#5ûš˛Ŋŗ.P]D‹ÆŌØųeÕ?ÜũáÃĩkUiDTązA!Åş+–Ŋv‚ČTčN5 UKÂŖ"GŅųŋ Ô #ķæWúR Jl¨Ķãŗ—}Ûūíˇíß|S9?Ėēøč>ĖZ|bÄÚ×ΎŋŋnšÄvōƝü|]”IĄå[>í´ *bÂō-Ÿt:ŌIŦæČ ‚¨— c×-ę´ā|Úäuņ>–Mžœz„âéÂEĢ_:L›4ûĖ… i““ˆ(já‡U9 ĻYt–ĸw9ŌoĖŋž‹ûĩXņÄOÉdk—/wā'ĻNÎ2đÍgį‘pūžĘ ķĨEO8¯¨rũ<Š Ŗ3eMš|ųoŧąāřv>q-–•sNNcĨ×DDڋ$— ‰ˆH¨Ŧ.’SzŠ”‹"MI×ÔꈈÄŅB""a´¸kNbDD¤ĢÕØˆeÍH“`N\t*Hæ˛$ĘŦŅÔę¤+å%"†a˜Ô2˛|LBeQLŽ) —ũcîHš’n;5Ë,ôüAq?•wā“´ ——×ŌÚjû [Ęt$*MĩcÔe™dȀ!CWę‰ô…3dÅq;Ē>ĢĒˉ/^˜ø^Ŋą@ „‡s…Ž&lŽŨ0˛d|¤ r|ÉČõE‹ÃiüäąįWLŒę[ŠQt)P›ˇ‹´Ķe<öXŌĻũ:[ÅG8ˇ¨2kŽ´ĮëķNÎ7C=ãąģ°,Ë0 ˲|Ĩ褆††§%’ú¯žâ=åNīŅüØúĢ_=-H§˛K9ĶzŒËöššk2ÜöĶOWŋ˙>1=ũ‘#<ü°õwˇĨĩ5,.ŽéĶOäĸŒxá…âŋũmذaƒ ētéRūŽ]eååĪJ'/]ôbbü“Ö=§€ áÎ|ßt*‰ąRLČĶV+ĩ &™ģŦL/gķĨ¤SIRK¨ĻĻĻK€ôrmLnj ÕԈËŲ|ę‹Ô Ļ4…Í—ZžfÛEqAAQBž6ëĸ(šĀ˜ HmŠn<`zžn‘4—°ēë‰ĖŲOOO×ÄŦ´ŒmNžŸø~YŗīUī*kīŧ÷Ū?ūņ’  Ĩ‹^\đâ >Đíez¯e­oģæčT’T*âžŖÜˇÖø­6•‘J˛-ēÚxDRģ˛Z)4ūŸĖQ-ŠšéĄÍŌĮĨĶņČˆŒéö”7J’JYō’\ããk˛2sĩ‚ɍŅV+ĩŨ¤Ö_x)ƒl—/[ŋ=ĩ8ÎōšrÛíÛW¯]KLKģđÅ}m†zč![ŸS'|u{†ņëuQũO˙Á‹‚ôņk—LswNē8pāoEĸ)O=õ—]ģŦoŽ}įΝ•›6‹ 8Đōx˙Í2`N|…ce-88øĨ—^ĒĒŽ.(|ī¡ēčß%-LSVÖüĮš„ž-‘*‹Œc= “Lå,[NÉæg Îj2E•ÖüTšoWŦîHķŗ.ŠĖã: ĩia“(SœĨÔZ<–Ęä”É…LŊ(Ļ‹ZËė—RēíÔĀ8V4Ü3zũ*jáG†Ë—Ģōēë” ė^ģözcãđØØˆąc-˙~õčŖ˙ûÃ{×ŦéžfˆühNÁá9ûDDDô4›ũĸ¯eÃ0LRRŌūâbŊ^÷¤dYæēĮžœ”÷vá]ģW¨ŦfōĨDŌ|ËgDBeĩŠ[$Íį†x¤ų,ËV+ĨĘjķO×X$Íg;÷Ļ:ŌéxdԝeķĨOģ<ļČku~~už´Ë5Œą vIÍ~hī\m÷ēuכšē-k×:“8ËÚøœŅã%Ė2tĘkŋĪ2X>¸uûöæV–e‰(hāĀĐÁƒģÄå}–Ą'˜SāĘZ§ŧzIYŗ9mÁ˛lUUUūŽ]/+“M›”ļx.7™ÎķŒž×ë˛ĀŠBį9íīÍčY>Ŋuûö--–hXîëŒ_†áķ>zāc4ؑæg•vŧ­ôr6ĨÔ¸°)ŊœÕ*‘éąTDš".ŗ ééDZRvd?==Ũvj}žãīgYŗ‰šJJJēqãFQQҞĖuÄŪ]ēčÅ^#úSЏá)Ĩģ3}âdŅč|ŽEņrYƒëãNyuëõą¯Z_pUyaaW•wšrrušWŗޞũęw(kōęeÍ&ķĐT­ļöË/ų˙÷ō¤öΡĮĸz>¯ųŋn‹ōīuQ'V †7ū…ÍĖ0nŗy"Ãx? NÃÎį#¸-ķšŋŒ“æ—NfDEY<%jx?Q$ßŲ@tjŊ zŊOŪąØ>øā̝žzņâ%^Āú‹õ­Éšŧ•ž?ęt|ĩ`Ø0ãßđ”Ž"ÆŨûŨ~įķႈãŸe;šN0bwAÔŦŒ“6o‘ ]™WMĄ å:ŅŪ_5`ČÁĐĄ‚ĄCCgt”/ã`8õ;Ÿ„‡Û(_DÔđ~ÆŦ(AT”@(Īāöc3ˇb E‰#įØž-ą ęM›<á>ßvÂŪå<šWÖÔdhjĒ-U˜ēbgŊu€đåŸÔNnˆ§Ø'ë uu=í÷ž¨J[Âī‹ŊWw `Ũ/÷˛XōęžßW÷¯yeßoøūûÚF.Ė´UÄ"–Ō`8ĩ!žbwœĒˇ*b/–]ŊjĐëkßYøŌÚ]§ƒ]<ĸ+N™_víšáÚĩÚ}Ŗ (ģ/_Ų6ĘWÃŪĉ¯Ķ+Į zŊáX˛&wRÆ)‹xáŠUW>ļˇ9ĢÜ;ũ ļ÷`ƒĮø e5Aą#î\Éņz§R1÷≈js×ĪDG æXܓøÅQ‚QŲ §3掌-=:1gŸžˆ*s11‰ķ<:/qŪŖ‰û‰HŊQ°Šo¤į2]†ĻžxbŦģsn5!cGÜš’cõFŸļ#ö|ɉj8•! „BH”¸ū}=QCWÖFÎÉ(j "}ŅÁ¨ŗ_Œ•˜ũÁNî†ÄĻû§īCüčŖ‰9•z"ĒÜ Ū¸Œģ—ę‚M~õkw¯ģų)t'jâ˛qįJŽÖÛEŧėLėú•ãɈÂUétģÆYŧÜ1ÕP‘ũĸ`Ô(Áčš4q VNWŽæåTPãÎüƒD_ŋ*[āEÃQ|ņī=+g´u<Ļ&_zĀPģ;íÂæÔ"Ķ‹—]6\Ū8-üé]^2\ēd(Ÿ)Š(3}íÄßž+.šöø™ĪOé¨ōĐAJ›Đ7Ōs1Ė29]ÄÎčę)|ÜŽA§3ėžsæãō˛Ō­’ˆ.Ģ­5|ņ2mžšqÚXžä#CÁė3%[.NūĐđųšø [ļUUæČJDeęī ę]âƒĻ;ĒjG/Ú×^ļ:ū냇øģë0ø0ĪlīúTž´ēķöĶ­–ˆ.ģ|Ųđų2ÚōL†ņŌ^ŗ¤Ø ~-ūëƒĨ•aËŗˆß^ļoš;nŧáw:āŗå—5ņĸČŪŲ+::œˆžN™mžkŖņžÄD dgĖ+Hˇŧ5‰éŽÅ 2Ōžūŧŧ˛^CŗføN' €Čé"/Œ j¨x?+C.,ũ˜;¨Õ] : ‹ŽLMãîēJDĻH厈H_¯Ĩ1Qĸ0ĸ°¤”Ytæ*X$ # ˇÚbĖĮyáÍO=…gļw}*_"aŦ=Á´ú DdŖF žI/$ŌÔqĸč0ĸ°/-2XåõĮKÎÅÉ'Fđ—âŌĶDtēô@§ģ6QEö3˛ JųķŸk äļ"&ĨĖúú`ūįgfMôũÕĮā?ꏕœ‹“OŠp0zɒķąō áY“L7üžÃŊ"ŽĄ1ŗËŽÔŽ\1\šR•ÚĶRލ]Đk‰+KRüŋ^Æč™*āˆú#%įâä“#ė5Qūõm'M‹Ę…ÂNëĸLDQchĖė˛Ī/.]2\ēTĩĐK†›ú ŸŊ(īŧŦ)–qŋŅ{ú°¸hĮōãŅÂEÆ5$îée9káKQĄP šn8o6Fsdļ ziá˜ĩEĢõi“ÖÆ_(‘=ķLįģ1Í_×Eánġ% ŅéÁ2:ŦɖúĐ6āiPÖ:åe úö‹r×~Q|íÚĪķ~QĀ ũžy‚eãW/Æt¸fôĀ?a§_ĩ Ø ŅTbĸ\Ė3—HxėtĐ7hīŧv:gyĖiīƒöÎĢa§pTœ„úíp°.  oĐŪy5Ė耺Đ˙„ĀYX" ā$Ėčô Ú;¯†ĀYX"í0´w^ ëĸĀYPpv:č´wĀ ā1-OžŦižyŗåÖ­ŽįÎÜ\Ŋ‡`¤ÜM‚ŪgŪæ[q 8ĐF 7žÜŪA¯rrrøúäŗ噚oŪ\ēv͑ŖĮx ”ˇDmuėy­÷DŽŨkĖί7ˇ´ŒOxjĪĒĩĄƒ;|J€.šoŪlmkcšŽđš+ËW=íę…ĮļĀ‹lܸŊ({-^Ŋęáßüæ˙uíŪ{īík\‹Æ€%–L=ÖÔ#áú=]ĒK–ˆæUįŨ§Ö׈­ˇÚVoښž}ëÁė\;? €¸är…zŊ:pü˛Ãéëû"ÛŧzųĪ­zFžHIDAT×Bƒ‚œ91_xlKüĪ3zžV Ûnß>qōTSÎ.”o ˜—›õˆ8ūæ­[!ާ9sšBŨ^xtēÆčí â¯^ōļÜđz/Ÿx6līĀ~ØéĀ^7š›CCC‚<ã˛ĪĶÜwßŊ„„|ßÚú‹Í)ģq—+oūy3.WzÆ]Ŋ9U}Ķr™Ļû`‰´Ã<°Ŋûa§āÍ­ģw˙ÕŪŪŽŽ8—+ö3]ŊÜō„ĢŒĻ8 ;ąDˇîŪuw.üČ­ģw˙ÕnĀՋ÷B{܈ˆîĸ2č_,Ņ-<¯…öÎĢaFĀëŨuî'‚ÎCWüËÚЋđSX" ā$Ėčô Ú;¯†ĀYX"í0´w^ ëĸĀYPq…ącĮΘ1c˙ūũ---îÎ ¸v:āÃJÁĀ`Á Á Á ĐÄ?žĢŗîęÎÉŋ úUŌ;ĮvNūu@đo’ŪŠëߌ‚īC ŧR+…ēáu*…JG¤VŠēŠ}DíŨącĮärųÁƒÃÂÂP}ÖEņeQŲ훆Û7 ßlīYûÖļ‚\=rđË'ļ_øwå3ēƒ_ŽŨ~áŋ+_Žėīlz ÔŨō‹ü‹LķE‹`PhŌō]=^ˇü:éc;§āēĨ_čĘ.ÆČ„¤.-qwN\Ŧ‡ö.88xūüųŸ}öYccŖīFī„=Ļáū÷Ŋ€Āj"ĸŖË?´ėČ՝iYgčĢWĮü*`Ėú3töÕ1˛WëÔJY@ČÃ!Ī.{ˇŽˆčČĒ{B‡<=uč=ĄĢ+Ü÷ŧßÔŨŊō›œģniîéēEĪ]ˇüŽ[ēͧļD­`ŒŒ8:•Äø\Ąp—/\AT+’ j2E ĩN%‘H$\Ģčņ‰Jg@ŌåRH§’( ĶKjE§@]c™ž[ž’;Ą=ųī6ņ›Âč}°Ķz_Æ]˙ví™ßoūĶTë#–æÆĶÛ/üģũÂëņ4vû…˛äŠ˙˜ūūčÃ7˙Õ~ūUZ“°ėˆ1čŖ+¯ũŌŧuZŋæßsĄîvŒ˙Ôā×-¯vēnQp×-ŋî|ŨōŦ­ë–!ūyŨŌ‡ļD­HĻr–eY–-§d…štĒÔš–eY–MĄ.ņjFš_žž§Í—Q8‹eķĨ:UŽ1ē6O“ĢŌ‘e|­ŧ$U"1§_DŠ]ĸ (…eYļ\œ)*5=ÚĻî”+.–ēT“§eY–])ŌY>&Ģ ØČŋUj|éŽ0~úé§wqß/‡=ž˜fôn—¤ŅÚÅoÛ5q Ŋr–hßô‡bįit\ŦąŖ….ÍĒWAŨí4­Ášë–PÁoמy˛›ë–|îēåė¸nųÁ-×-Ûöė ˆ7ū%$p›Ū{Ī`Ķž=‰‰‰‰IIII˙ũßIIIyyyæ999ŒËĒØų]­&=EĘ=–Ϥkjuڋ5âhĄéˆ+ˆ$Ĉˆˆ„Ęĸ˜\†aF”YCDDڋ$7*Ģ‹äDɌ)„Ļļķå„ņÜĸ˜s.ŒšęKēR^"b†I-#ËĮÖ°Îŋuj–YāåŖ Y°`ÁĄC‡Z[[>ŧbŊī¯_'čwØéĀ[\Ô^%ēĒĶtķ˛häXzrÁáķ˙jŋų¯ö›×+—šaēaOIɈÄÄßH~˙û€ß˙~ĶîŨæ—6íŪmŽŲ$îoĶž=öė1×ė‘‘‘ŋúÕ¯xŠÁ-ŗįĪu7ŋmĄĪÕāĻ=ožnYšdIû™3ÆŋšîoÃK/™lX˛¤ŊĒĒŊĒĒŊ˛˛Ŋ˛2ė7ŋŠŦŦĖĖĖ4ČÉÉa­tųwī!@vvv¯)p„Ņâ‚Rc_]Z ŽŠbLßUui‘í‚h¤SIRŠČx9‘@DDĸ*)3~×Õ QfMwņÁ˛,ËV+íú'F‹ģÆ*ĢY–ÕæQI™ÎâąÚ*Öųˇ‘š….õéŖæÜŧysßž}ͧO š1cƎ;†=ōˆ=īø…uQČ4Ŗ7H^H‹ÖžISe۟üęÕß>˜”WÚ]áË˙ĩ=æŌô؇BNĘ,p˲č%rųÕĒĒ˙ŽŽi˙Į?Ú˙ņ K—š_Ú°tŠšfo¯Žæū6,YŌ`ÉsÍ^WW÷ī˙ہjÅ:€eöüšîvū“ôŋÜ Ž[•^ÎJ‰¤Er‰ˆÉ$ĸôtsŨ­4…¯ÉI¨\n|&”ÉIÄNHO'ŌI•æøDéå,KŠŽņ¯ôr6ßbĖŠ‡\e•vŠ•RĘ$kŒČôX*ĸÜÎP*ģäßFjvåÁn---‡.))9uęÔøņãårųž}û‚ƒƒvüå/|žŠ_Ŋ/ôžņᓩ‡_‰$’m˛čÕß=xpņŨÅžü_Û¯üĮô؇‰(~ŅÆŊyéQũ’Wo&ÍgĨæGl~Į Æšéj!‘ZÁPtžPš¯´ˆÅ…U# •ÕŦ’:ëzŦsúÂåw}dÎV—\‘ÔâŠåcęšĢüÛJ­{ö´wŨ=ģN^‚aY–a˜.nÔĐĐđ´DR˙ÕWü¤öũ÷ã^øCŊŽÖąč Ëur,›žšÃtíE9‘5č˛ûÔ‹(|bRąjįЇÄ xP`ē$˛ü2tͤWGŧđBņßū6lذ‡zˆ\Œ^ĒVru_i Ī]—ëˇüwŠÁg͚5}útËœĮ˛ædAŖn‹L§ŌŅۗßk⠟˜TœĮ•;zP č˃ĘZot*‰qž:!Okį8Ž'qUū{-zfŧ”AļËĻߞZgŨt^ķûZ4rrrx™Ôc†Īą(€~ ´KJČĶÚwŨčA\\ū‚ũœkKl/yWåŌ¤IC‡EŅķd7näkizQāuPw÷58؏ĮļĖΞ=ëî,@˙ÁN>åėŲŗŸ}öŲüųķŅ…p´w^ ;€ŗü÷'ANC{įÕ°Ķ8 *Nâŗ…Ëđhī€ƒuQ}ƒöÎĢaFœ…Žø'—ĩųx/*(0đĮ›īÜšãîŒxĸ–Ö[Í--!AAîÎx=4ûyTšÃi'ųøŒ^hHȔɓ”+ūÔÚÚęîŧx–;w~~íõmãž4p ģķ^ÍN(w>ÃÛ;°ËÚøÜuĶ37pÛŊyËâÕ̆G CCCxK´§ûå8|/ķũ"œˆn÷ë?Ūŧ9eœdSæJ‡Ī`É%zũ^;së*'Kœ}‘m—ģ˙tæŦ<Âi‡yf{vâņßÎ÷÷. )Í/hģ}[÷ũ÷ˇÍ3UkuÄæÁĢKûã:|^;#ö’Ŋޏƒ <Ø|0€ąŽĐæ‚Ļŋv­í˙ũŋŽ<¯ŦíųčŖ%/Îą#{ü”5˗åÎt0€qsÁC?ĀI|öĸ<ų˛&pĐ ˜¨¨ĩ´Üeģ\€öŊfwK\ž”ĸ||…ôŽ ]ŋyķ.Û_]ãîũøŖõ¯Ž°ã.Ë0qåÎŨŊ(p˜'ˇwПøėEyøeÍ=ÁÃÁÁˇīÜiŋ{—z¨â‰ė~ĩįJ–ßWûąįšŊãĐbĀ0ĸ8ĒSA#ûKSΝō\Öt˙ĒĢĘąĻ>à <`€īĪø.oī gÎŨ‡ģ˙*Å÷!ÜĸNĩsĪuwŋĘöž÷“đ¤Ŗ ‘G”&ëWēī>ķA7”5›¯ēm €áqYæqüv:p’ītĐņW^qwĀëĄŊķj<.kãŗ…Ëđ|ŲčE™`‰´ÃĐŪy5Üœ…'ņŲ‹Âe ø´wĀÁē(đ/ß~ÛŨY¯‡öÎĢaFĀA›Đ‹2AWüËÚ<Žôã͛¸9ŧˇhikkžu+44ÔŨ>CYķ.Ž(kX"í^(ƒŧpo3äq3zĄĄĄSž~Zš~}ë­[Χ.uįįŸWŋķÎøØØAƒš;/Đg(k^eÍĶ ŊķŽ —ĩ1,Ë2 Ãōą…._é477/š3įDMMhp°ķŠņßí†=9ĩŪüąĩuʓOfĢTÁÁÁDøĐCņœp%˙,k×¯‡=ō_ŠņÆe {—;ĖëÛ;g2īIqŨÛ 1Ü÷ĀĶzQœļļ6Ŋ^ =td~âÆü€cü­Ŧ%%%UVVē;}ƒ˛æiĐŪy÷ †aøŧŋŋü Œ‰‰š~ũú]îžĻāŲ €š/å‡emذaî΂ãPÖ<Ú;ä–ĸÁįX”+üōË/ˇoßnoowwF '  ‡ĄŊÂN@{„€ö8X]~;8+ĖđQ€ÂNBg†üv:p´w^ ;85•v:pžE@Øéüj*pžE@ØéĀhī€ƒÕåā_Pãø9ėt⠌"˜aQø'ėtÎBå˙{wTU™püwŦ6ŧp•SK‹—ÍŠĻMÛ_*'Wi.jSė41aV‚›ųēÖ?ÎČî8ļSI@Vb›IŅTبÄČ5ĶvÍĘÆ—iv×÷û‚Ā*)ÂårQî…ŗ\@PTî9‡ xžŸ9žÜį<įṗ™ķûį<÷9Ƥãtđpí­tāë#Đ7ŪšŨŊZ3”aÆEFF{+´âŌW5ŊâÛí~aîķßėÜ5t¨E{k—ģ~ĩŋEŸfzØÄĩÜĪ#~_øų—K/|€×ÃJ ‡ÔÚéīfĻZo>t}ŲM íģÕļĐāõžö×7ęÜõ›ˇíĶ9‹âÜ ˙ãzÚéīGŽYUî0›ÍĒ1x%ĸ455HLĒúīŠččh -ž@Đt‰wĩĩĩK´– "rĶMƒ‡FGWUUų|žĸcēÂJ`P\úâ†áņxĒĢĢ{˜Hé¸ŌY”Žąčs­­­^¯7Ä?”;z‡x×?ĩļļö¤šŽ+č™EqY˸ĢFŧИ*‘:t`@ĐHĪ,Šs€ūÔÚīĀŧ(‚CŧиŖЊTÆÄJ ŠCĻHßXvdŨ|kÖךš°-œ>dXø˜IīšDDÄe[´,ߊGīnPÜŅ`,¤ĐîÆŒwŽuĢ7HÎŋjũ›ŸÛûÚËų.‘īZ?:Ú×ŨŌ+´bŠ´j׈wãÆKMM-**ōx<ĄėRˇļ/˜:čķ [ĖėpŠˆ¸ō<>čWŅ_™6ņÖčŦnāģĶöŽ¸ŋ×ļ0֕˙ÆĮ"û—>’īÛĸ”đ¨ááQÃ'-úÖ!"ß,žmŌ´áŅˡ—;ÚČËČ˨ÉK>pˆˆœĖ_23bč“—Κ<ėŽų;EääöĨŗ#bÆDÄ<9ŨÉ~Ũ`^@ĢШØ2M&SržŖģ]yŨ;ō’3mŊŪ-]íÚĩ+--mĶĻMŖGîãtęë…O|xßļC -‡žLÜđTÆZ—smæ’ ÷nûOũ÷‹gwS?6ëŖÍōÚĮŪ>uMbžúœČøœŸË:˙lŨxoéĪgü?–¸ņ™įß;8"qyĩŋūÍéw=öūŽĶ>÷i_qúŪÂŌ˛rqŦ[´ŦpléÁĒī^ąj:Ö-ą~<ļô\…oß+˛bĘüĄúz+BÃļuũŧ2å‡EņŨí*}ÔģFŧ‹ŠŠJOO/))ŠŦŦėÛtĘi?,Mˆ‰›6kŽė=æyøî„8‘¸øÄ–ŗĮ[{lķǤ}+VˇMq8ŽČC ą"ąĨΑŊĮģÆŨØ_žũũWįOKH+ēÔÖø„øģDîŠŊ/Љƒ"ŸZcÆD<4įī"‡ŊōžCŽyQ€P°eĻŦ—õ)ĻL[Û ”Šc`ʖ™˛ūĮÅ ™6qä%wŲ'[3ģŧėzīú<ŠK¸O~:fwŠ8wlŨ IcãDD~:nwŠ8‡Ž¨īxwzxäR›Kâã$Q$1!ļcW|üŊ˛Īnw‰¸žũjŖ$ŨÛųĀíK’­[dfAŪŅâôKĨûíŽr‘r×á@ ŋyPÆ?[ē¯ÂwŽÂwŽâģŦ1Ŋōž{†;z­B|é;Ŗ lžĖ+S fØ2S¤LQEQ %#Ķ&3 ĘæMČĩĖG^Fqš]QEą§gŧyDÖË,EQ{Žoë?iT0Ž–NmŲ˛Ĩ‡Ī}ëšfŪ:čæČA7GN\ë’?äo{áđ‰æA‰Ošûeá‚Ø¸o?ŧņ‰ßFOĖ=~åąņ/ŋŸ3÷ˆõūaá÷¯8ôüĒe‹ÄĨŧ˜÷Véœ#Ö†‡?đĖĄ9Ÿ}ô§;;8=å/Iû‹ŦŋKž[&Irđ¨Sâŗō֌˙Ôúā“ßąˇ5žõöš{ŽY3fōŌ }û›Ôsˇĸ(ŋĀVŽ\øûĘķa`WGĩž‚\åÎToôAQE dQŠ=wBįĘríŠR6oBŽ]šôo{î„ymųVį=ũí“T]ADZ›/jŲZš.´oį[ūØÛļ‹Ū–‹Ū–‹ -Z.4´\đ´l#2gۅú–ŋū’ČK[Ü-įŨūÆēö­ÖßXë÷ÖúŊįÚļ†CŋáŦŋáŦßsÖī9Ķžũâ¯lÕūújŸûtûvĘWwĘWwĘWüŦČŗĨuUžŲ/ŠŧøEĨ¯ļŌwŽ20å;Wá;wŌWsŌWSؚĪēÚ7gķ™Āæh>ãh>coū%°hūåDsõ‰æęãíÛąæĶĮšOm>}tô¨‘{öė)//¯ŠŠQz@tJ{DĤ(ŠÉd ŧĐ(;;››z0Pčuōī1[Ļië,Ĩ`†-3ųÄōŽĶŖÚ‹yÉRØgË4­:4!qÅ3:Õa¯N]ŧķx<ĨĨĨÅÅÅģwī~ä‘G}ôŅ5kŪĒti—éôTDi˙OûžK/•ĀWū‚Ė%ö‰HŌÜ× ßɊģŦ…K5¯ÖB7?Ģģ>”į/Y´Ŧđ ˆ$edoșß} í­\õ]t}y•âĮOũôķ/nŋũöČČȘ˜˜Ģ~XíôJWL&+€AõŲW‚fŦ8’`j×ö%ŧ'$į9âώíK‘˛Â´žéáõī<OQQQjjęčŅŖ7mڔ––VYYYRR2{öė°°Ī̉]¸ö›– õ-įëŋg~\/ū ;ž]âĢĢōÕV}—ķB˙H}/ŅqÄGĪą¨_ÖĐzī.yzúé§­VkTTTG…ŠŠŠÉ“'tœĐŌ“ ĮĸēŠŲ;cQAŒ$io!Øą(Ŋ˜LĻp›cĨ€\#Ū]–<ĨĨĨ}ōÉ'“'ÜHôĖĸ˜0‚kÄģŠS§Ž5ŠäŠ?Ķq7+€AqéÛ8PRR’žžN Õoé8›, Нąv9Á!Ū h:NãfĨ0(ž¤ņn@ã 0­P4Ō3‹â˛`Ä;0/ €āī4îč´"€1ąŌ@+ĻHqG€āčīĖfs]ģŠŠI{SFæiđē=‹ÅŌķCtœÖÆĶˆĀ t|†Ņčīžœ=ë×11oümĩŲlVׂÁŸFÜÔÔ´xÅĒŗ5ĩųŠHčŸFL@pôŠwnˇ{NÆs˙øįn‹%Z{k—ģ~ĩŋ…ŽäFv‚¯UW_˙ø”ä•Ģß úč#¨ĒZņi׎_mˇmÛEQ*}f͚ĨsÆDā=B2Õßūö7ŧũöÛÕ~UëĢ9D2pDHĻÉÍÍõYāĖ™3xüņĮ ˈėŠ#B2M׎]ņã?ÖzOQŌ !™Æ×üä?ã)JzãĨ1™ÆétšB2Ņc=Vë1ááádBvĮKc2Um—Į999hÔ¨‘Aؐ]qDHĻōx<>ŋ;|ø0‹ ‚#B˛„ƒâųįŸ‡ĮãÁˆ#pũõכŲ !ŲgӐ-[ļ`õęÕPUƒFĮŽÍN‰(`’&oŧņzčĄjŋ›?>ƎkpFDÚąRĀēuë†-[ļÔxLßž}ņõ×_”‘>5Ļ€Ė˜1ŖÖ"ß|ķ >úč#2"Į!ÄßiqŽõzŊ:fC$G„äˇėėė€ŽWUĐ'"‰XÉoBØŧyŗ™ÉÅBHēâ~% XÉoZŪŧōĘ+k=æÄ‰U–ęWŨēuĶ’&QĀø°„"ķaÉéͧũÚųÚk¯ÅęÕĢũî—(PR@222ü>v͚5>ŋËËËķĢĀ—_~P&  !äÖ[oÅmˇŨVëqƒƀĒũÎãņ Aƒ÷Ũēuë€Ûųƒ…ļxņb|üņĮp8Ēž>‡_}õ–.]ęŗ}BB‚Ļ~8€ŸūYS[ĸšđ! 9yō$> hÖŦ™_#=ŅË\ž˛$ßm ! 4č2÷Ū{īÕ1"mxiL†ZšrĨpŒŊ{÷JȄč,„d(ˇÛ-c÷îŨ2!ú !æÍ››…B2T׎]…ctęÔIB&DāSc2Ÿ“ÕpDHAeųōåf§@!ˆ#B2\nn.’’’n…ââb2"ģ㈐ רQ#M¯Ņé  !™ä†nŽß~ë׹ņņņPU• /nXÉ4Ŋ{÷†Ēǘ:ujĩß+Š‚S§N!//ĪāĖČnxĒõÕW_aīŪŊp8čÜš3zôčavJDēá\cǐ——Wãŧáēuëĸ  aaafE¤?^ _ŋ~ĩ.žpöėY„‡‡ãĩ×^3(+"cđԘ’’‚={öÔæ­ˇŪÂ< SFDÆb!´šŒŒ Œ9RSÛÜÜ\$&&JΈČx,„6'ōJJXXĘĘĘ$fCdŪ#´ąÅ‹ ĩ?wLˆĖÅBhcͧOŽņ¯ũKB&DæâĨąÉ˜ŠŅĒU+üöÛo˛!2G„Dd{|ĄÚÆ"##QRR"ã˛Ë.“’ˉ'pöėY@LL âââ¤Ä%ōG„66hĐ ásįÎÕÜvÖŦY¨S§EAbb"Zļl‰–-[">>Šĸ yķæØąc‡pŽDĩá=B+**BllŦP -§ĪŪŊ{ŅŽ];ŋˆˆ@aa!§ö‘n8"´ą˜˜ĄöãÆ ¸ÍË/ŋP€ŌŌR„‡‡W\:ÉÆĄÍ;wáááˇS^¯7 6™™™:thĀ}]Ŧ¤¤uëÖŠAôg,„„‚‚‚€Nh9mdŧŽŖĨՆ—Æ„úõëû}ŽE‹šŠ`›6m´¤V…Ēǘ9sĻ”XDpDH•?~ŠŠŠ8uęTů9N4kÖ ĐSëåwMxڒL|*ILLD~~žÔ˜ ,<\.žž$G„¤;=6]úĪūƒáÇKKöÄ{„”^}õUŗS Â!éN¯m8yę’,RPęÛˇ¯Ų)Pa!$ŨÅĮĮK9gÎé1ÉžXIw˗/—ķōË/—“ė‹÷IwĒĒÂá÷wnDDį“T’îEÁ€¤Å[ģv­´XDG„d OëÖ­+ŧ˜,ҟqDhCeee(((@AAĄũ?~\¨}DD‹ 邅Đ&f͚…ččh(Š‚ˆˆÄÅÅ!..Šĸ@Q\yå•ēįаaCjnĪû‚¤Â÷ūûīCQüã˙Ā™3g|÷ũ÷ßCQôčŅC×|bccĄĒj@‹ŗŪ}÷Ũ|yštÅ{„!,22Rķ(ęÂĒĐzrģŨ¸üōˑ]í÷&LĀėŲŗu›™Bt aˆJJJBnnŽP ždŧ4AŨēu.‚¤žûg‡Bģví*î‹^ø¤¤¤āĐĄCf§G& ­3““ƒ-[ļH‰ĨĒ*îēë.)ąĖô—ŋüŠĸ E‹Øģwo•ī÷ė؃-Z@Qôīߟ#aâĨqˆš°ėžLÁzŠŦ\š7Ũt“Ļļ‹-¨QŖ$gDVÅaˆ‘]`Ú´iŌcę­_ŋ~š‹ Üu×]čÜšŗÄŒČĘXCHffĻ.qgĪž­K\Ŋ\uÕUøæ›o„ãlŨēƒ–Y/CČĨ—^Š;wę;XN“å˗K/^¸õÖ[ĨÆ$ka! !Mš4ÁącĮt‰,§‰^ī–——‡ÜStú˙dCˆÛí6;…j­]ģéééHOOGiiŠnũ 8PˇØwŪy§nąÉ|†6mÚāˇß~Ķ%v §É˜1cđîģīÖxŒėKNŊg đG%tqDBôzį¯N:~ûĶO?AQ”Z‹ ÜvÛmpš\đx<Ų§uķų@ČŪī™Ŧƒ…0„L™2E—¸Ŋ{÷öë¸^x]ēt (vyyy@…Ö—7ŪxC8FmîŊ÷^Ũû sđŌ8ÄčqyčĪ)˛uëVá÷îDHˆ,0á¯äädėÛˇO×>ȆŲ%Õ¯_߯ãdŧ|ÜĒU+ÍmXĢ0//O÷>Č,„!fĐ Apš\Ōâ>|¸Öcxā)}:teeeRbéÁétš鄅0ÉzfãÆˆŠŠĒõ¸ˇß~[Jpã7jj—œœ,-_’’’tīƒĖÁBĸŠŠŠ„ÚĪž=={öŦõ¸ŗgĪJ}­Dëu?ü°´|éÛˇ¯î}9ø°$ÄÅÆÆTEAii)ÂÂÂü:ūāÁƒB÷öĒŖå”ĖÍÍÕ}ÄÆ•ĐÅaˆ;}ú4ļnŨŠēuëÖzėË/ŋ ¯×ëw€M›6‰¤'MŖFĖN‚ Ą tęÔ %%%PUûöíäI“0fĖŒ3+VŦ€ĒĒPU>úhĀą6l¨CÆÚLžį͛'­OĒ:tđ+ŋúõëĢûöí3,7§ĶŠéĪî‘G1,Gú/-jĐ AøüķĪn—’’‚ėėláū‹ŠŠĐČÔáp //ĪīMáE\rÉ%Øˇo_ĀípōäI2ĒLUUÄÅÅĄ°°Đī6ģvíâŊ]“đa‰E­Xą"ā¤Á 6 666āËs¯×‹¸¸8,]ēT8_Ün7EŅT //ŠĸāāÁƒ’3ĢLQ   iii>s8˜7oTUe4G„7|øpŋV,–5Üļmޏâ á8K—.^ŅåĪ<¤=Úž};:vė(%–?ŧ^/<€ķO…­ƒ…0œ;wŖFÂĮ\åģ"33SÚjÆ27?’}jéą1OXé"­Zĩ’zÉXˇn]”””H‰ÕĻMüöÛoRb]Ėårŧ~"…Ū#$@iiŠôûfgĪž ča/šššēAāüåö‚ t‰MÁƒ…éééēÄ}đÁ…cČŪ7ųĪÆŽĢk|˛>^}îŋ] zŠé™Û'Ož xÛN ’ĨŊūúë†ô3`ĀCú!kb!$K[´h‘!ũh}/ą6ͧOGãÆQ¯^=Ô¯_M›6Å… u鋴c!´¸W_} 6„ĸ(ŸĢŽēJęJ'VļcĮCú‘õtV¯^]ņg5yōdäääāôéĶ(,,ÄŅŖGq˙ũ÷CQDFFļ{Ռ÷-ęÆoÄĒUĢj=îāÁƒhŅĸ…pVŊGhÄũÁ dü(hÉרiä Ą9Ž€~(oŧņFMķ’/ÆB(–§ÛíFDDŧ^¯Ļöááá(--ÕÜ?‰áĨąÅ(Šđäʕ+1tčPĄ~'Ož,ÔŪ—{îšG¨}ŗfÍä$ĸŗ°°0ÍEĘĘĘ -úT Ą…téŌEsÛĖĖL;vLs{Ŋ áėŲŗ…Úĩīq  \\ŦS§NŌō6l˜´Xä?^[ę3g¤Ėųã”=Å.::Zxĩæ_~ųՅŌĶĶņėŗĪÜŽ¸¸111Rs)++CXX˜Ô˜T3B‹¸ķÎ;…7vÎO• ×Üۊ‹.qɨ5×đđđŠģeéŲŗ'6nÜ(5&Ռ—Æ!ŖĀO}ZĶåíž={’’ĸCF\Ėh†˜ŖG ĮHKKÃáÇ5ĩÍÎΖ^`ɒ%ŌcĀāÁƒ5ßã[ˇnälū°yķfŨbSU,„T­ĻM›BUUĖ;Gͧ‰ÃáŒ3 ĒĒn#¤#FRĢS¯^=Ąmrss%fSYNNŽnąŠ*ŽN5?~<ƏŌŌRŦZĩ YYYČÎÎFjj*ēvíŠĢ¯žÚ°­'7mڄîŨģK-H‰CÁ…üĄC‡ ŋ¸-*++ ééé˜2eŠæ}ûöÅ×_-1+ vŧ4Ļ “žžŽâââ€ßģtš\8pā‹ UÁBHA)** EEEđzŊ2dHĮ^uÕU8uęÜn7ZļliP†LxiLAMQ”Jī,–——ÃãņĀáp N:&fFÁ„…BŠĶé„Ķé4; 2ŧ4&"Ûc!$"Ûc!¤jy<Ė;ˇŌ.ŊôRœ8qÂė4‰¤ā=BĒ"--­ÖųĘ;wîDbb"œN'˛˛˛Đšsgƒ˛#’#Bǐ••EQZ´Ąŧŧ]ētAjjĒŽ™鋅¯ŧō ŌŌŌ4ˇßŊ{7ęÖ­+1#"ãđԘ°aÃ<öØcÂqJKK‘””dč‚Ė-[*æ§ĻĻ"%%Eú ÚXmÎëõĸoßžŌâåææâ‘GÁŦYŗ¤Åüŗœœ$''×ēąÃá˜1c°`ÁŨrĄĐĀKc›Ķcʙč†Mžüūûīpš\hܸą_˛{Ŋ^,\¸Šĸāá‡Ö%' ,„6§uÖڌ5Jjŧ‘#Gĸe˖(//×Ôūõ×_‡ĸ(B[nRčb!´ą &čûƒ>ĢUĢVČČȐËét"??_J, ,„66oŪ<ŗS¨UZZšÔ-F !!#CĒ„…ĐÆô؁íbĸ+I/^ŧXx#*_¸0]Œ…tŗjÕ*ÍmŊ^/nŋũv‰ŲTõĖ3ĪčŸ‚ !éfĶĻMšÛÖļØĒ Ī?˙ŧî}Pp`!$KZąb…!ũL:Ր~ČÚXÉrV¯^mX_ĶĻM3Ŧ/˛.B˛Ŋī ^ĖãņÖY !YNaaĄĄũíÚĩËĐūČzXÉrŒ~Įoßž}†öGÖÃBHļgô”Ŧ‡…ˆl…ˆl…ˆl…ˆl…ˆl…0Ä4iŌÄėˆ‚ aˆéŲŗ§Ų)B‹1b„”83fː‡ČNX-bá…RâDFFJ‰Cd',„ƒ””Ąû÷ī—” ‘Ŋ°ZHvv6\.m[M:­[ˇ–œ‘=°ZĖšsį (J@mˆO?ũT§ŒˆB ĄÅ\Ø{×߇'˖-Ú5ktΊ(´ąZԒ%K Ē*&Mš„čččŠQĸËåB||>ŪėHB"ŠŠŠŌcūķŸ˙”“jÆBH$`ĮŽŌcN™2EzLĒ !‘‡ÃqãÆI‹÷îģīJ‹Eūc!$ôæ›oÂét Įšä’K0zôh Q X‰$đx]ĮˈôÅBHUĖ;ĒĒbĮޏųæ›Ģ|ß°aC,[ļ ‡†ËÅ]a)¸ņ &Ÿ:tč€e˖™‘î8"$"Ûc!$ÛkܸąŲ)ÉXÉr íī˛Ë.3´?˛B˛ŖW­iÔ¨‘Ąũ‘õ(ĒĒĒf'AôgŠĸŌOtt4ŠŠŠ é‹Ŧ‹#B˛ĩŊ{÷šY !YŌk¯ŊĻ{‡IIIē÷CÖĮKc˛,Ŋ/ˇoߎŽ;ęÚŽɲÜnˇnąĶŌŌXŠ !Y–Ëåš5k¤Į‹‹Ã÷ß/=./B˛´bõęÕŌâ%$$H]‘BīRĐp89]GŒ%K–HˈBG„4ŧ^/ūī˙ū/āv (,,d$ŸX)¨L:ĒĒbŨēuhŌ¤‰Īã"##1|øp¨ĒŠ“'O"66ÖĀ,)ØđԘˆl#B"˛=B"˛=B"˛=B"˛=B"˛=B"˛=B"˛=B"˛=B"˛=B"˛=B"˛=B"˛=B"˛=B"˛=B"˛=B"˛=—뀧NÂŠS§*ūũâĀļmÛjlߊS§Š‹‹ĢøgTTĸŖŖ%;e"˛š€ a~~>fΜ‰O>ųųųųČĪ·ĮãŅ+ˇZEDD !!Ŋzõ´i͐’’"ŊFIi–!C†`ūüųĩ—œœŒââb]sŲŧy3š7oŽk/žø"fÎœŠŠmnnŽßĮ~ņÅ=z´Ļ~žzę)Lœ8Ņį÷"į_ƒ °cĮÍíeûųįŸqõÕWkn_͟IQQÚļmĢ)îã?¨5øõ×_Õ.]獂ęͧOu׎]5ũ¯ųÍė˙™Ÿ[oŊÕ¯˙ᘘCōŅۚ5k É-33Ss?Ī=÷\ąīģī>K˙Bä˙#99šÆØšc§§§ĢÕŪ#ôzŊ Crr2~üņĮęą´oŋũíÛˇ‡Ķéĉ'ĖN‡|¸å–[ĖNÁō,X Ôū…^”‰˜ŗgĪ ĩ_ŋ~ŊœD|¨RWŦX§Ķ ˇÛ­kĮFđzŊHLLÄŨwßmv*TO>ųeeef§ay‰‰‰šÛ>ũôĶ3ŅŽ˙ūšÛ:4kÖL^2Õõqņ=z7ß|ŗŽšaŅĸEøį?˙ivT˜˜ŗS°ŧũû÷ ĩˇÂUŅ?ü šíöíÛ%fRŊJ…°iĶĻēwh–iĶĻ!''Įė4čOÜn7æĖ™cv–%´/s‹-$f¸Į{L¨ũĨ—^*)ß* ĄČĐ5X$''›UŖĻ§ĻtŪ˙û_ÍmKKKQTT$1›ĀŧōĘ+šÛ>účŖ3ņ­ĸ~ũõ׆thĻ’’S_÷!ßôžėēuë&ÔūškŽ‘”I`V¯^-Ôūå—_–”IÍ€XÅ6“'O6;ĒÆ‘#G••ev–öÖ[oinûũ÷ßKĖăÖÜÖČŋ0}útÃ:4ۋ/žhv äCZZšÔxũúõ“Īl<đ€PûÛoŋ]R&ū;wîœæļģwī–˜IÍ@å)pDfēūúëÍNÁŌ  šíâŋ%fRģÆkn[¯^=DFFJĖĻfA˛’ÕĢWãĖ™3f§aY"Mą×X%ō–Æš5k$fR;×Ö­[u ~aî߅FDDøœ_ZVV†ß˙Ŋâŋ÷íÛWéŸÁæá‡6;…*:wîlv ~‰ŽŽÆųYT¤¤$ÍEĻG†üŪ>ķĖ3BíEĘõī˙[8HZZšĄ7c;wî = ¸ ¯žúĒŲ)Ž[ˇnhÛļ-222„Ø^|ņELš4IRfĄ%++KhÁŠŌŌRDDDHˍĒįŸ^s[Ņi…Z8žųæĄĒĒūD槟~ÂŌĨK5ˇŋxäIōtíÚ}ô–/_.ëÉ'Ÿ”QhjÖŦÂÃÃ5ˇīÚĩĢÄlĒZˇnPû{īŊWR&ūsˆ…ƒJL%0"åCaĩ•ŨtĶMRĻΉü°‡ē 6hnģsįNxŊ^‰ŲT6hĐ Ím{ôčEQ$fãÍ+T;ͧîhuėØ1ŗSyĮŽqîÜ9áŅE¨ęŪŊģP{ŅWq|9~ü8JJJ4ˇß´i“Älü§šk$cDDDāž{îŽ#ōēˆ# #=û뺚ÛęuNä]ĐúõëKĖ$0š áß˙ūw™yhRTT¤éĶŗgOŗSˇ…wŪyGJœŽ;J‰jŌĶĶ…ÚŋũöÛršˆČí˛7JĖ$0š ĄČ=:YĸŖŖ5}œN§ŲŠÛFvvļpŒ_~ų…+ų ˛=Ń>(1āžûîĶÜÖårĄ}ûöŗ ŒæBØĻM™y„EQ,ķéĐĄƒiŋ)))hŨēĩp‘Y Ąlį͚Ûz<ŠMD^ÅËČȐ–‡ÜΓt'ëĨø§žzJJœPâp8„ū’pšäldšeËĄöÆ “’‡VŌˇķô‡ŲS¨ÂÃÃĨô_Kœ9dffâ¯ũĢPü3fāšįžã­?Yŋ~ŊæKdUUáņx„Df‚Œ3F¨oLŠŅŅŅft[áƒ>ĀwÜajĄ¨ĻŲ>C† ADDJKK…úˆGaaĄPŒPĶŽ];ĄöwŪy§ĐĨi^^žP˙ .j/ƒ-/9ŗÄĸ?0púôiŦ]ģVB6ĄeÕĒUšÛ.Y˛D¨o‘Õí###-ņš“- !™#22ãĮŽ3pā@ŋŽŗÂ˜QD—/›={ļæļŋüō‹æļVYũŠ… 5wî\)qd/Ų- ęIDATâ Dļ­ÕēÁŌđáÃ5÷†°°0Ííe˛e!YšƒÄ>|X8FVVNŸ>-!›ĐņŪ{īin[^^ŽiE§Ī>ûLsŸŸ|ō‰æļ˛Ų˛Úé’ÉŠš6m*|ƒ$dZD^°îŨģw@Įgff -ˇ&˛8ƒlļ,„d>ûQx<ĄųļĄHdIŧ’’’€^°:t¨æžŦļÖ$ !™æ‹/žŽ1uęT”——KČ&4ÔĢWOhņ‚=zHĖÆ7‘…[õފuōĐC™B…¤¤$Cú9{öl@Į_wŨuˆŒŒZļ 4h`™§V°mÛ6´lŲRSÛ͛7CUÕZo‰œS]ētÃa­1˜- ĄûĨžöÚkē÷a5ZæŊĸN:BũāË/ŋÄĩ×^+'Tˆ.‘7gÎLœ8ąÆcrss5Į7kåšh.ËÛˇo×ÜŠĒĒR>ŸūšĻū­öˇ‘š\.<ũôĶÂqŽģîē*7îíüPLdļÆ#]Jœ>}úH‰ D÷ũ¨iep‘É6oŪŦš­ž4Â7ß|Sfšh]ŧĢk[Ή'„clܸ'Ož”MhčׯŸæļC† Šö×Eæ$;tęÔIs{=i.„ŋūúĢĖ<4ŅēYuŖF$gBĸ4h ewĩ† JČ&4Ŧ_ŋ^sÛĸĸĸjČ5j”易'OÖÜVoš aYY™éģÁi,ÎŨŅŦIÖeĶÔŠSĨÄ ŠŠŠšÛ6mÚ´Ōįææú\jÍSĻLŅÜVoBO Ė^5Ø ÷)IŽīžûN8ÆŗĪ>+ôJDļũĖĪΝô*99Ys,Ģ?ŅwˆL^ĪËËCÆ ?銋‹…_š kęÕĢbcc…ãÔŠS‡oāü-111HHH@BB‚Đ‚Ę˗/ĘCoŽ‘#Gjž×'OžŦR”’’’˜˜ˆøøøŠáujjjĨ•&.ŋürž_Úø×ūųg”””H[ōŨV}uCdn¨Q -ûûŒvīŪ­yō™3g„W”ˇĖ*3ž¸Dž,ų’““Ã]ĮHČėŲŗk}Š—ü#c Á0ëĮÁ=cɊŦ°ov(yōÉ'MëģnŨēĻõí/‡Ũîĩq'´āaö[ Ąä…^0Ĩßųķį›Ōo LŨ÷Öh|ĩ"x¸\.Œ1Âė4B†3oƎkxŸZ8`ĮŽfįa§ĶiÉyŽä›čÆBôŖ7Ŋ翚k íODÅûfŋh+ŽzAĩÛģw¯Ų)„„:uę˛ōŌ";ë­ĸ=z4¤_YHJJ’2…‹Œ×ļm[͟|†ŠmÛļŌO‡āt: éK†Joœ?~ÜŦøģví‚×ë­´|ž^EŠø8ôë×ÇĮ¸qãt듈ėAS!$" %˙ü^ū…8‡°IENDŽB`‚dlt-daemon-2.18.6/doc/mainpage.h000066400000000000000000000017651377520261000163470ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! \mainpage \author Alexander Wenzel \copyright Copyright Š 2011-2015 BMW AG. \n License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. \par More information can be found at http://projects.genivi.org/diagnostic-log-trace/ \n \par About DLT DLT is a reusable open source software component for standardized logging and tracing in infotainment ECUs based on the AUTOSAR 4.0 standard. The goal of DLT is the consolidation of the existing variety of logging and tracing protocols on one format. \image html genivilogo.png */ dlt-daemon-2.18.6/examples/000077500000000000000000000000001377520261000154555ustar00rootroot00000000000000dlt-daemon-2.18.6/examples/README.txt000066400000000000000000000010751377520261000171560ustar00rootroot00000000000000Copyright (C) 2015 BMW AG. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This folder contains several examples of applications using the DLT library. These examples will be extended in the future to show different Use Cases. Example1: Minimal DLT Example Example2: Non Verbose Mode Examples with different AppIdds and normal Strings Example3: Non Verbose Mode Examples with different AppIdds and constant strings Example4: Different RAW data dlt-daemon-2.18.6/examples/example1/000077500000000000000000000000001377520261000171715ustar00rootroot00000000000000dlt-daemon-2.18.6/examples/example1/CMakeLists.txt000066400000000000000000000017571377520261000217430ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### # # DLT example implementation # cmake_minimum_required( VERSION 2.6 ) project( automotive-dlt-example1 ) # # find dependency packages # find_package(PkgConfig) pkg_check_modules(DLT REQUIRED automotive-dlt) # # include directories # include_directories( ${DLT_INCLUDE_DIRS} ) # # build project # set(dlt_example1_SRCS example1.c) add_executable(dlt-example1 ${dlt_example1_SRCS}) target_link_libraries(dlt-example1 ${DLT_LIBRARIES}) set_target_properties(dlt-example1 PROPERTIES LINKER_LANGUAGE C) install(TARGETS dlt-example1 RUNTIME DESTINATION bin COMPONENT base) dlt-daemon-2.18.6/examples/example1/example1.c000066400000000000000000000052211377520261000210510ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file example1.c */ /******************************************************************************* ** ** ** SRC-MODULE: example1.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #include /* for printf() and fprintf() */ #include /* for atoi() and exit() */ #include DLT_DECLARE_CONTEXT(con_exa1); int main() { struct timespec ts; DLT_REGISTER_APP("EXA1", "First Example"); DLT_REGISTER_CONTEXT(con_exa1, "CON", "First context"); DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_STRING("Hello world!")); ts.tv_sec = 0; ts.tv_nsec = 1000000; nanosleep(&ts, NULL); DLT_UNREGISTER_CONTEXT(con_exa1); DLT_UNREGISTER_APP(); } dlt-daemon-2.18.6/examples/example2/000077500000000000000000000000001377520261000171725ustar00rootroot00000000000000dlt-daemon-2.18.6/examples/example2/CMakeLists.txt000066400000000000000000000017571377520261000217440ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### # # DLT example implementation # cmake_minimum_required( VERSION 2.6 ) project( automotive-dlt-example2 ) # # find dependency packages # find_package(PkgConfig) pkg_check_modules(DLT REQUIRED automotive-dlt) # # include directories # include_directories( ${DLT_INCLUDE_DIRS} ) # # build project # set(dlt_example2_SRCS example2.c) add_executable(dlt-example2 ${dlt_example2_SRCS}) target_link_libraries(dlt-example2 ${DLT_LIBRARIES}) set_target_properties(dlt-example2 PROPERTIES LINKER_LANGUAGE C) install(TARGETS dlt-example2 RUNTIME DESTINATION bin COMPONENT base) dlt-daemon-2.18.6/examples/example2/dlt_id.h000066400000000000000000000011621377520261000206020ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /* generated file, do not edit */ #ifndef DLT_ID_H #define DLT_ID_H #define DLT_EXA2_CON_EXA2_ID1 1000 #define DLT_EXA2_CON_EXA2_ID2 1001 #define DLT_EXA2_CON_EXA2_ID3 1002 #endif /* DLT_ID_H */ dlt-daemon-2.18.6/examples/example2/example2.c000066400000000000000000000060461377520261000210610ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file example2.c */ /******************************************************************************* ** ** ** SRC-MODULE: example2.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #include /* for printf() and fprintf() */ #include /* for atoi() and exit() */ #include #include "dlt_id.h" DLT_DECLARE_CONTEXT(con_exa2); int main() { int num; struct timespec ts; DLT_REGISTER_APP("EXA2", "Third Example"); DLT_REGISTER_CONTEXT(con_exa2, "CON", "First context"); DLT_NONVERBOSE_MODE(); for (num = 0; num < 10; num++) { DLT_LOG_ID(con_exa2, DLT_LOG_INFO, DLT_EXA2_CON_EXA2_ID1, DLT_INT32(12345678), DLT_STRING("Hello world 1!")); DLT_LOG_ID(con_exa2, DLT_LOG_ERROR, DLT_EXA2_CON_EXA2_ID2, DLT_INT32(87654321), DLT_STRING("Hello world 2!")); DLT_LOG_ID(con_exa2, DLT_LOG_WARN, DLT_EXA2_CON_EXA2_ID3, DLT_INT32(11223344), DLT_STRING("Hello world 3!")); ts.tv_sec = 0; ts.tv_nsec = 1000000; nanosleep(&ts, NULL); } DLT_UNREGISTER_CONTEXT(con_exa2); DLT_UNREGISTER_APP(); } dlt-daemon-2.18.6/examples/example2/example2.xml000066400000000000000000000176471377520261000214500ustar00rootroot00000000000000 projectEntry Entry unknown EXA2 Third Example CON First context PDU_1000_0 4 OTHER 0 PDU_1000_1 0 OTHER 0 PDU_1001_0 4 OTHER 0 PDU_1001_1 0 OTHER 0 PDU_1002_0 4 OTHER 0 PDU_1002_1 0 OTHER 0 ID_1000 4 OTHER 0 1 DLT_TYPE_LOG DLT_LOG_INFO EXA2 CON /home/alex/workspace/ascgit/dlt-daemon/examples/example2/example2.c 64 ID_1001 4 OTHER 0 1 DLT_TYPE_LOG DLT_LOG_ERROR EXA2 CON /home/alex/workspace/ascgit/dlt-daemon/examples/example2/example2.c 65 ID_1002 4 OTHER 0 1 DLT_TYPE_LOG DLT_LOG_WARN EXA2 CON /home/alex/workspace/ascgit/dlt-daemon/examples/example2/example2.c 66 dlt-daemon-2.18.6/examples/example3/000077500000000000000000000000001377520261000171735ustar00rootroot00000000000000dlt-daemon-2.18.6/examples/example3/CMakeLists.txt000066400000000000000000000017571377520261000217450ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### # # DLT example implementation # cmake_minimum_required( VERSION 2.6 ) project( automotive-dlt-example3 ) # # find dependency packages # find_package(PkgConfig) pkg_check_modules(DLT REQUIRED automotive-dlt) # # include directories # include_directories( ${DLT_INCLUDE_DIRS} ) # # build project # set(dlt_example3_SRCS example3.c) add_executable(dlt-example3 ${dlt_example3_SRCS}) target_link_libraries(dlt-example3 ${DLT_LIBRARIES}) set_target_properties(dlt-example3 PROPERTIES LINKER_LANGUAGE C) install(TARGETS dlt-example3 RUNTIME DESTINATION bin COMPONENT base) dlt-daemon-2.18.6/examples/example3/dlt_id.h000066400000000000000000000011621377520261000206030ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /* generated file, do not edit */ #ifndef DLT_ID_H #define DLT_ID_H #define DLT_EXA3_CON_EXA3_ID1 1000 #define DLT_EXA3_CON_EXA3_ID2 1001 #define DLT_EXA3_CON_EXA3_ID3 1002 #endif /* DLT_ID_H */ dlt-daemon-2.18.6/examples/example3/example3.c000066400000000000000000000060511377520261000210570ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file example3.c */ /******************************************************************************* ** ** ** SRC-MODULE: example3.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #include /* for printf() and fprintf() */ #include /* for atoi() and exit() */ #include #include "dlt_id.h" DLT_DECLARE_CONTEXT(con_exa3); int main() { int num; struct timespec ts; DLT_REGISTER_APP("EXA3", "Third Example"); DLT_REGISTER_CONTEXT(con_exa3, "CON", "First context"); DLT_NONVERBOSE_MODE(); for (num = 0; num < 10; num++) { DLT_LOG_ID(con_exa3, DLT_LOG_INFO, DLT_EXA3_CON_EXA3_ID1, DLT_INT32(12345678), DLT_CSTRING("Hello world 1!")); DLT_LOG_ID(con_exa3, DLT_LOG_ERROR, DLT_EXA3_CON_EXA3_ID2, DLT_INT32(87654321), DLT_CSTRING("Hello world 2!")); DLT_LOG_ID(con_exa3, DLT_LOG_WARN, DLT_EXA3_CON_EXA3_ID3, DLT_INT32(11223344), DLT_CSTRING("Hello world 3!")); ts.tv_sec = 0; ts.tv_nsec = 1000000; nanosleep(&ts, NULL); } DLT_UNREGISTER_CONTEXT(con_exa3); DLT_UNREGISTER_APP(); } dlt-daemon-2.18.6/examples/example3/example3.xml000066400000000000000000000162551377520261000214440ustar00rootroot00000000000000 projectEntry Entry unknown EXA3 Third Example CON First context PDU_1000_0 4 OTHER 0 PDU_1000_1 Hello world 1! 0 OTHER PDU_1001_0 4 OTHER 0 PDU_1001_1 Hello world 2! 0 OTHER PDU_1002_0 4 OTHER 0 PDU_1002_1 Hello world 3! 0 OTHER ID_1000 4 OTHER 0 1 DLT_TYPE_LOG DLT_LOG_INFO EXA3 CON /home/alex/workspace/ascgit/dlt-daemon/examples/example3/example3.c 64 ID_1001 4 OTHER 0 1 DLT_TYPE_LOG DLT_LOG_ERROR EXA3 CON /home/alex/workspace/ascgit/dlt-daemon/examples/example3/example3.c 65 ID_1002 4 OTHER 0 1 DLT_TYPE_LOG DLT_LOG_WARN EXA3 CON /home/alex/workspace/ascgit/dlt-daemon/examples/example3/example3.c 66 dlt-daemon-2.18.6/examples/example4/000077500000000000000000000000001377520261000171745ustar00rootroot00000000000000dlt-daemon-2.18.6/examples/example4/CMakeLists.txt000066400000000000000000000020451377520261000217350ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### # # DLT example implementation # cmake_minimum_required( VERSION 2.6 ) project( automotive-dlt-example4 ) # # set prefix # set( CMAKE_INSTALL_PREFIX "/usr" ) # # find dependency packages # find_package(PkgConfig) pkg_check_modules(DLT REQUIRED automotive-dlt) # # include directories # include_directories( ${DLT_INCLUDE_DIRS} ) # # build project # set(dlt_example4_SRCS example4.c) add_executable(dlt-example4 ${dlt_example4_SRCS}) target_link_libraries(dlt-example4 ${DLT_LIBRARIES}) set_target_properties(dlt-example4 PROPERTIES LINKER_LANGUAGE C) install(TARGETS dlt-example4 RUNTIME DESTINATION bin COMPONENT base) dlt-daemon-2.18.6/examples/example4/example4.c000066400000000000000000000077731377520261000210750ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file example4.c */ /******************************************************************************* ** ** ** SRC-MODULE: example4.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #include /* for printf() and fprintf() */ #include /* for atoi() and exit() */ #include DLT_DECLARE_CONTEXT(con_exa1); int main() { unsigned char buffer[256]; int num; struct timespec ts; DLT_REGISTER_APP("EXA4", "Fourth Example"); DLT_REGISTER_CONTEXT(con_exa1, "CON", "First context"); for (num = 0; num < 256; num++) buffer[num] = num; DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_STRING("DLT_RAW")); DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_RAW(buffer, 256)); uint8_t uint8data = 0x2a; DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_STRING("DLT_UINT8")); DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_UINT8(uint8data)); uint8_t hex8data = 0x1a; DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_STRING("DLT_HEX8")); DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_HEX8(hex8data)); uint16_t hex16data = 0x1ad3; DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_STRING("DLT_HEX16")); DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_HEX16(hex16data)); uint32_t hex32data = 0x1abcd3e4; DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_STRING("DLT_HEX32")); DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_HEX32(hex32data)); uint64_t hex64data = 0x17b4ddcf34eabb2a; DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_STRING("DLT_HEX64")); DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_HEX64(hex64data)); uint8_t bin8data = 0xe2; DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_STRING("DLT_BIN8")); DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_BIN8(bin8data)); bin8data = 0x01; DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_STRING("DLT_BIN8")); DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_BIN8(bin8data)); uint16_t bin16data = 0x1234; DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_STRING("DLT_BIN16")); DLT_LOG(con_exa1, DLT_LOG_INFO, DLT_BIN16(bin16data)); ts.tv_sec = 0; ts.tv_nsec = 1000000; nanosleep(&ts, NULL); DLT_UNREGISTER_CONTEXT(con_exa1); DLT_UNREGISTER_APP(); } dlt-daemon-2.18.6/gtest-1.7.0/000077500000000000000000000000001377520261000154265ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/CHANGES000066400000000000000000000147651377520261000164360ustar00rootroot00000000000000Changes for 1.7.0: * New feature: death tests are supported on OpenBSD and in iOS simulator now. * New feature: Google Test now implements a protocol to allow a test runner to detect that a test program has exited prematurely and report it as a failure (before it would be falsely reported as a success if the exit code is 0). * New feature: Test::RecordProperty() can now be used outside of the lifespan of a test method, in which case it will be attributed to the current test case or the test program in the XML report. * New feature (potentially breaking): --gtest_list_tests now prints the type parameters and value parameters for each test. * Improvement: char pointers and char arrays are now escaped properly in failure messages. * Improvement: failure summary in XML reports now includes file and line information. * Improvement: the XML element now has a timestamp attribute. * Improvement: When --gtest_filter is specified, XML report now doesn't contain information about tests that are filtered out. * Fixed the bug where long --gtest_filter flag values are truncated in death tests. * Potentially breaking change: RUN_ALL_TESTS() is now implemented as a function instead of a macro in order to work better with Clang. * Compatibility fixes with C++ 11 and various platforms. * Bug/warning fixes. Changes for 1.6.0: * New feature: ADD_FAILURE_AT() for reporting a test failure at the given source location -- useful for writing testing utilities. * New feature: the universal value printer is moved from Google Mock to Google Test. * New feature: type parameters and value parameters are reported in the XML report now. * A gtest_disable_pthreads CMake option. * Colored output works in GNU Screen sessions now. * Parameters of value-parameterized tests are now printed in the textual output. * Failures from ad hoc test assertions run before RUN_ALL_TESTS() are now correctly reported. * Arguments of ASSERT_XY and EXPECT_XY no longer need to support << to ostream. * More complete handling of exceptions. * GTEST_ASSERT_XY can be used instead of ASSERT_XY in case the latter name is already used by another library. * --gtest_catch_exceptions is now true by default, allowing a test program to continue after an exception is thrown. * Value-parameterized test fixtures can now derive from Test and WithParamInterface separately, easing conversion of legacy tests. * Death test messages are clearly marked to make them more distinguishable from other messages. * Compatibility fixes for Android, Google Native Client, MinGW, HP UX, PowerPC, Lucid autotools, libCStd, Sun C++, Borland C++ Builder (Code Gear), IBM XL C++ (Visual Age C++), and C++0x. * Bug fixes and implementation clean-ups. * Potentially incompatible changes: disables the harmful 'make install' command in autotools. Changes for 1.5.0: * New feature: assertions can be safely called in multiple threads where the pthreads library is available. * New feature: predicates used inside EXPECT_TRUE() and friends can now generate custom failure messages. * New feature: Google Test can now be compiled as a DLL. * New feature: fused source files are included. * New feature: prints help when encountering unrecognized Google Test flags. * Experimental feature: CMake build script (requires CMake 2.6.4+). * Experimental feature: the Pump script for meta programming. * double values streamed to an assertion are printed with enough precision to differentiate any two different values. * Google Test now works on Solaris and AIX. * Build and test script improvements. * Bug fixes and implementation clean-ups. Potentially breaking changes: * Stopped supporting VC++ 7.1 with exceptions disabled. * Dropped support for 'make install'. Changes for 1.4.0: * New feature: the event listener API * New feature: test shuffling * New feature: the XML report format is closer to junitreport and can be parsed by Hudson now. * New feature: when a test runs under Visual Studio, its failures are integrated in the IDE. * New feature: /MD(d) versions of VC++ projects. * New feature: elapsed time for the tests is printed by default. * New feature: comes with a TR1 tuple implementation such that Boost is no longer needed for Combine(). * New feature: EXPECT_DEATH_IF_SUPPORTED macro and friends. * New feature: the Xcode project can now produce static gtest libraries in addition to a framework. * Compatibility fixes for Solaris, Cygwin, minGW, Windows Mobile, Symbian, gcc, and C++Builder. * Bug fixes and implementation clean-ups. Changes for 1.3.0: * New feature: death tests on Windows, Cygwin, and Mac. * New feature: ability to use Google Test assertions in other testing frameworks. * New feature: ability to run disabled test via --gtest_also_run_disabled_tests. * New feature: the --help flag for printing the usage. * New feature: access to Google Test flag values in user code. * New feature: a script that packs Google Test into one .h and one .cc file for easy deployment. * New feature: support for distributing test functions to multiple machines (requires support from the test runner). * Bug fixes and implementation clean-ups. Changes for 1.2.1: * Compatibility fixes for Linux IA-64 and IBM z/OS. * Added support for using Boost and other TR1 implementations. * Changes to the build scripts to support upcoming release of Google C++ Mocking Framework. * Added Makefile to the distribution package. * Improved build instructions in README. Changes for 1.2.0: * New feature: value-parameterized tests. * New feature: the ASSERT/EXPECT_(NON)FATAL_FAILURE(_ON_ALL_THREADS) macros. * Changed the XML report format to match JUnit/Ant's. * Added tests to the Xcode project. * Added scons/SConscript for building with SCons. * Added src/gtest-all.cc for building Google Test from a single file. * Fixed compatibility with Solaris and z/OS. * Enabled running Python tests on systems with python 2.3 installed, e.g. Mac OS X 10.4. * Bug fixes. Changes for 1.1.0: * New feature: type-parameterized tests. * New feature: exception assertions. * New feature: printing elapsed time of tests. * Improved the robustness of death tests. * Added an Xcode project and samples. * Adjusted the output format on Windows to be understandable by Visual Studio. * Minor bug fixes. Changes for 1.0.1: * Added project files for Visual Studio 7.1. * Fixed issues with compiling on Mac OS X. * Fixed issues with compiling on Cygwin. Changes for 1.0.0: * Initial Open Source release of Google Test dlt-daemon-2.18.6/gtest-1.7.0/CMakeLists.txt000066400000000000000000000216401377520261000201710ustar00rootroot00000000000000######################################################################## # CMake build script for Google Test. # # To run the tests for Google Test itself on Linux, use 'make test' or # ctest. You can select which tests to run using 'ctest -R regex'. # For more options, run 'ctest --help'. # BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to # make it prominent in the GUI. option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF) # When other libraries are using a shared version of runtime libraries, # Google Test also has to use one. option( gtest_force_shared_crt "Use shared (DLL) run-time lib even when Google Test is built as static lib." OFF) option(gtest_build_tests "Build all of gtest's own tests." OFF) option(gtest_build_samples "Build gtest's sample programs." OFF) option(gtest_disable_pthreads "Disable uses of pthreads in gtest." OFF) # Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build(). include(cmake/hermetic_build.cmake OPTIONAL) if (COMMAND pre_project_set_up_hermetic_build) pre_project_set_up_hermetic_build() endif() ######################################################################## # # Project-wide settings # Name of the project. # # CMake files in this project can refer to the root source directory # as ${gtest_SOURCE_DIR} and to the root binary directory as # ${gtest_BINARY_DIR}. # Language "C" is required for find_package(Threads). project(gtest CXX C) cmake_minimum_required(VERSION 2.6.2) if (COMMAND set_up_hermetic_build) set_up_hermetic_build() endif() # Define helper functions and macros used by Google Test. include(cmake/internal_utils.cmake) config_compiler_and_linker() # Defined in internal_utils.cmake. # Where Google Test's .h files can be found. include_directories( ${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) # Where Google Test's libraries can be found. link_directories(${gtest_BINARY_DIR}/src) ######################################################################## # # Defines the gtest & gtest_main libraries. User tests should link # with one of them. # Google Test libraries. We build them using more strict warnings than what # are used for other targets, to ensure that gtest can be compiled by a user # aggressive about warnings. cxx_library(gtest "${cxx_strict}" src/gtest-all.cc) cxx_library(gtest_main "${cxx_strict}" src/gtest_main.cc) target_link_libraries(gtest_main gtest) ######################################################################## # # Samples on how to link user tests with gtest or gtest_main. # # They are not built by default. To build them, set the # gtest_build_samples option to ON. You can do it by running ccmake # or specifying the -Dgtest_build_samples=ON flag when running cmake. if (gtest_build_samples) cxx_executable(sample1_unittest samples gtest_main samples/sample1.cc) cxx_executable(sample2_unittest samples gtest_main samples/sample2.cc) cxx_executable(sample3_unittest samples gtest_main) cxx_executable(sample4_unittest samples gtest_main samples/sample4.cc) cxx_executable(sample5_unittest samples gtest_main samples/sample1.cc) cxx_executable(sample6_unittest samples gtest_main) cxx_executable(sample7_unittest samples gtest_main) cxx_executable(sample8_unittest samples gtest_main) cxx_executable(sample9_unittest samples gtest) cxx_executable(sample10_unittest samples gtest) endif() ######################################################################## # # Google Test's own tests. # # You can skip this section if you aren't interested in testing # Google Test itself. # # The tests are not built by default. To build them, set the # gtest_build_tests option to ON. You can do it by running ccmake # or specifying the -Dgtest_build_tests=ON flag when running cmake. if (gtest_build_tests) # This must be set in the root directory for the tests to be run by # 'make test' or ctest. enable_testing() ############################################################ # C++ tests built with standard compiler flags. cxx_test(gtest-death-test_test gtest_main) cxx_test(gtest_environment_test gtest) cxx_test(gtest-filepath_test gtest_main) cxx_test(gtest-linked_ptr_test gtest_main) cxx_test(gtest-listener_test gtest_main) cxx_test(gtest_main_unittest gtest_main) cxx_test(gtest-message_test gtest_main) cxx_test(gtest_no_test_unittest gtest) cxx_test(gtest-options_test gtest_main) cxx_test(gtest-param-test_test gtest test/gtest-param-test2_test.cc) cxx_test(gtest-port_test gtest_main) cxx_test(gtest_pred_impl_unittest gtest_main) cxx_test(gtest_premature_exit_test gtest test/gtest_premature_exit_test.cc) cxx_test(gtest-printers_test gtest_main) cxx_test(gtest_prod_test gtest_main test/production.cc) cxx_test(gtest_repeat_test gtest) cxx_test(gtest_sole_header_test gtest_main) cxx_test(gtest_stress_test gtest) cxx_test(gtest-test-part_test gtest_main) cxx_test(gtest_throw_on_failure_ex_test gtest) cxx_test(gtest-typed-test_test gtest_main test/gtest-typed-test2_test.cc) cxx_test(gtest_unittest gtest_main) cxx_test(gtest-unittest-api_test gtest) ############################################################ # C++ tests built with non-standard compiler flags. # MSVC 7.1 does not support STL with exceptions disabled. if (NOT MSVC OR MSVC_VERSION GREATER 1310) cxx_library(gtest_no_exception "${cxx_no_exception}" src/gtest-all.cc) cxx_library(gtest_main_no_exception "${cxx_no_exception}" src/gtest-all.cc src/gtest_main.cc) endif() cxx_library(gtest_main_no_rtti "${cxx_no_rtti}" src/gtest-all.cc src/gtest_main.cc) cxx_test_with_flags(gtest-death-test_ex_nocatch_test "${cxx_exception} -DGTEST_ENABLE_CATCH_EXCEPTIONS_=0" gtest test/gtest-death-test_ex_test.cc) cxx_test_with_flags(gtest-death-test_ex_catch_test "${cxx_exception} -DGTEST_ENABLE_CATCH_EXCEPTIONS_=1" gtest test/gtest-death-test_ex_test.cc) cxx_test_with_flags(gtest_no_rtti_unittest "${cxx_no_rtti}" gtest_main_no_rtti test/gtest_unittest.cc) cxx_shared_library(gtest_dll "${cxx_default}" src/gtest-all.cc src/gtest_main.cc) cxx_executable_with_flags(gtest_dll_test_ "${cxx_default}" gtest_dll test/gtest_all_test.cc) set_target_properties(gtest_dll_test_ PROPERTIES COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") if (NOT MSVC OR NOT MSVC_VERSION EQUAL 1600) # The C++ Standard specifies tuple_element. # Yet MSVC 10's declares tuple_element. # That declaration conflicts with our own standard-conforming # tuple implementation. Therefore using our own tuple with # MSVC 10 doesn't compile. cxx_library(gtest_main_use_own_tuple "${cxx_use_own_tuple}" src/gtest-all.cc src/gtest_main.cc) cxx_test_with_flags(gtest-tuple_test "${cxx_use_own_tuple}" gtest_main_use_own_tuple test/gtest-tuple_test.cc) cxx_test_with_flags(gtest_use_own_tuple_test "${cxx_use_own_tuple}" gtest_main_use_own_tuple test/gtest-param-test_test.cc test/gtest-param-test2_test.cc) endif() ############################################################ # Python tests. cxx_executable(gtest_break_on_failure_unittest_ test gtest) py_test(gtest_break_on_failure_unittest) # MSVC 7.1 does not support STL with exceptions disabled. if (NOT MSVC OR MSVC_VERSION GREATER 1310) cxx_executable_with_flags( gtest_catch_exceptions_no_ex_test_ "${cxx_no_exception}" gtest_main_no_exception test/gtest_catch_exceptions_test_.cc) endif() cxx_executable_with_flags( gtest_catch_exceptions_ex_test_ "${cxx_exception}" gtest_main test/gtest_catch_exceptions_test_.cc) py_test(gtest_catch_exceptions_test) cxx_executable(gtest_color_test_ test gtest) py_test(gtest_color_test) cxx_executable(gtest_env_var_test_ test gtest) py_test(gtest_env_var_test) cxx_executable(gtest_filter_unittest_ test gtest) py_test(gtest_filter_unittest) cxx_executable(gtest_help_test_ test gtest_main) py_test(gtest_help_test) cxx_executable(gtest_list_tests_unittest_ test gtest) py_test(gtest_list_tests_unittest) cxx_executable(gtest_output_test_ test gtest) py_test(gtest_output_test) cxx_executable(gtest_shuffle_test_ test gtest) py_test(gtest_shuffle_test) # MSVC 7.1 does not support STL with exceptions disabled. if (NOT MSVC OR MSVC_VERSION GREATER 1310) cxx_executable(gtest_throw_on_failure_test_ test gtest_no_exception) set_target_properties(gtest_throw_on_failure_test_ PROPERTIES COMPILE_FLAGS "${cxx_no_exception}") py_test(gtest_throw_on_failure_test) endif() cxx_executable(gtest_uninitialized_test_ test gtest) py_test(gtest_uninitialized_test) cxx_executable(gtest_xml_outfile1_test_ test gtest_main) cxx_executable(gtest_xml_outfile2_test_ test gtest_main) py_test(gtest_xml_outfiles_test) cxx_executable(gtest_xml_output_unittest_ test gtest) py_test(gtest_xml_output_unittest) endif() dlt-daemon-2.18.6/gtest-1.7.0/CONTRIBUTORS000066400000000000000000000025161377520261000173120ustar00rootroot00000000000000# This file contains a list of people who've made non-trivial # contribution to the Google C++ Testing Framework project. People # who commit code to the project are encouraged to add their names # here. Please keep the list sorted by first names. Ajay Joshi BalÃĄzs DÃĄn Bharat Mediratta Chandler Carruth Chris Prince Chris Taylor Dan Egnor Eric Roman Hady Zalek Jeffrey Yasskin JÃŗi Sigurðsson Keir Mierle Keith Ray Kenton Varda Manuel Klimek Markus Heule Mika Raento MiklÃŗs Fazekas Pasi Valminen Patrick Hanna Patrick Riley Peter Kaminski Preston Jackson Rainer Klaffenboeck Russ Cox Russ Rufer Sean Mcafee Sigurður Ásgeirsson Tracy Bialik Vadim Berman Vlad Losev Zhanyong Wan dlt-daemon-2.18.6/gtest-1.7.0/LICENSE000066400000000000000000000027031377520261000164350ustar00rootroot00000000000000Copyright 2008, Google Inc. All rights reserved. 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 Google Inc. 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. dlt-daemon-2.18.6/gtest-1.7.0/Makefile000066400000000000000000001570061377520261000170770ustar00rootroot00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # Makefile. Generated from Makefile.in by configure. # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # Automake file pkgdatadir = $(datadir)/gtest pkgincludedir = $(includedir)/gtest pkglibdir = $(libdir)/gtest pkglibexecdir = $(libexecdir)/gtest am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = i686-pc-linux-gnu host_triplet = i686-pc-linux-gnu TESTS = samples/sample1_unittest$(EXEEXT) \ samples/sample10_unittest$(EXEEXT) \ test/gtest_all_test$(EXEEXT) $(am__EXEEXT_1) check_PROGRAMS = samples/sample1_unittest$(EXEEXT) \ samples/sample10_unittest$(EXEEXT) \ test/gtest_all_test$(EXEEXT) $(am__EXEEXT_1) am__append_1 = test/fused_gtest_test am__append_2 = test/fused_gtest_test subdir = . DIST_COMMON = README $(am__configure_deps) $(pkginclude_HEADERS) \ $(pkginclude_internal_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/build-aux/config.h.in \ $(top_srcdir)/configure $(top_srcdir)/scripts/gtest-config.in \ build-aux/config.guess build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/ltmain.sh build-aux/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/build-aux/config.h CONFIG_CLEAN_FILES = scripts/gtest-config CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(m4datadir)" \ "$(DESTDIR)$(pkgincludedir)" \ "$(DESTDIR)$(pkginclude_internaldir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) lib_libgtest_la_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp am_lib_libgtest_la_OBJECTS = src/gtest-all.lo lib_libgtest_la_OBJECTS = $(am_lib_libgtest_la_OBJECTS) lib_libgtest_main_la_DEPENDENCIES = lib/libgtest.la am_lib_libgtest_main_la_OBJECTS = src/gtest_main.lo lib_libgtest_main_la_OBJECTS = $(am_lib_libgtest_main_la_OBJECTS) samples_libsamples_la_LIBADD = am_samples_libsamples_la_OBJECTS = samples/sample1.lo \ samples/sample2.lo samples/sample4.lo samples_libsamples_la_OBJECTS = $(am_samples_libsamples_la_OBJECTS) am__EXEEXT_1 = test/fused_gtest_test$(EXEEXT) am_samples_sample10_unittest_OBJECTS = \ samples/sample10_unittest.$(OBJEXT) samples_sample10_unittest_OBJECTS = \ $(am_samples_sample10_unittest_OBJECTS) samples_sample10_unittest_DEPENDENCIES = lib/libgtest.la am_samples_sample1_unittest_OBJECTS = \ samples/sample1_unittest.$(OBJEXT) samples_sample1_unittest_OBJECTS = \ $(am_samples_sample1_unittest_OBJECTS) samples_sample1_unittest_DEPENDENCIES = lib/libgtest_main.la \ lib/libgtest.la samples/libsamples.la am__test_fused_gtest_test_SOURCES_DIST = fused-src/gtest/gtest-all.cc \ fused-src/gtest/gtest.h fused-src/gtest/gtest_main.cc \ samples/sample1.cc samples/sample1_unittest.cc am__objects_1 = \ fused-src/gtest/test_fused_gtest_test-gtest-all.$(OBJEXT) \ fused-src/gtest/test_fused_gtest_test-gtest_main.$(OBJEXT) am_test_fused_gtest_test_OBJECTS = $(am__objects_1) \ samples/test_fused_gtest_test-sample1.$(OBJEXT) \ samples/test_fused_gtest_test-sample1_unittest.$(OBJEXT) test_fused_gtest_test_OBJECTS = $(am_test_fused_gtest_test_OBJECTS) test_fused_gtest_test_LDADD = $(LDADD) am_test_gtest_all_test_OBJECTS = test/gtest_all_test.$(OBJEXT) test_gtest_all_test_OBJECTS = $(am_test_gtest_all_test_OBJECTS) test_gtest_all_test_DEPENDENCIES = lib/libgtest_main.la \ lib/libgtest.la DEFAULT_INCLUDES = -I. -I$(top_builddir)/build-aux depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(lib_libgtest_la_SOURCES) $(lib_libgtest_main_la_SOURCES) \ $(samples_libsamples_la_SOURCES) \ $(samples_sample10_unittest_SOURCES) \ $(samples_sample1_unittest_SOURCES) \ $(test_fused_gtest_test_SOURCES) \ $(test_gtest_all_test_SOURCES) DIST_SOURCES = $(lib_libgtest_la_SOURCES) \ $(lib_libgtest_main_la_SOURCES) \ $(samples_libsamples_la_SOURCES) \ $(samples_sample10_unittest_SOURCES) \ $(samples_sample1_unittest_SOURCES) \ $(am__test_fused_gtest_test_SOURCES_DIST) \ $(test_gtest_all_test_SOURCES) DATA = $(m4data_DATA) HEADERS = $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 $(distdir).zip GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = ${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run aclocal-1.11 AMTAR = $${TAR-tar} AR = ar AUTOCONF = ${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run autoconf AUTOHEADER = ${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run autoheader AUTOMAKE = ${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run automake-1.11 AWK = gawk CC = gcc CCDEPMODE = depmode=gcc3 CFLAGS = -g -O2 CPP = gcc -E CPPFLAGS = CXX = g++ CXXCPP = g++ -E CXXDEPMODE = depmode=gcc3 CXXFLAGS = -g -O2 CYGPATH_W = echo DEFS = -DHAVE_CONFIG_H DEPDIR = .deps DLLTOOL = false DSYMUTIL = DUMPBIN = ECHO_C = ECHO_N = -n ECHO_T = EGREP = /usr/bin/grep -E EXEEXT = FGREP = /usr/bin/grep -F GREP = /usr/bin/grep INSTALL = /usr/bin/install -c INSTALL_DATA = ${INSTALL} -m 644 INSTALL_PROGRAM = ${INSTALL} INSTALL_SCRIPT = ${INSTALL} INSTALL_STRIP_PROGRAM = $(install_sh) -c -s LD = /usr/bin/ld LDFLAGS = LIBOBJS = LIBS = LIBTOOL = $(SHELL) $(top_builddir)/libtool LIPO = LN_S = ln -s LTLIBOBJS = MAKEINFO = ${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run makeinfo MANIFEST_TOOL = : MKDIR_P = /usr/bin/mkdir -p NM = /usr/bin/nm -B NMEDIT = OBJDUMP = objdump OBJEXT = o OTOOL = OTOOL64 = PACKAGE = gtest PACKAGE_BUGREPORT = googletestframework@googlegroups.com PACKAGE_NAME = Google C++ Testing Framework PACKAGE_STRING = Google C++ Testing Framework 1.7.0 PACKAGE_TARNAME = gtest PACKAGE_URL = PACKAGE_VERSION = 1.7.0 PATH_SEPARATOR = : PTHREAD_CC = gcc PTHREAD_CFLAGS = -pthread PTHREAD_LIBS = PYTHON = /usr/bin/python RANLIB = ranlib SED = /usr/bin/sed SET_MAKE = SHELL = /bin/sh STRIP = strip VERSION = 1.7.0 abs_builddir = /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0 abs_srcdir = /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0 abs_top_builddir = /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0 abs_top_srcdir = /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0 ac_ct_AR = ar ac_ct_CC = gcc ac_ct_CXX = g++ ac_ct_DUMPBIN = acx_pthread_config = am__include = include am__leading_dot = . am__quote = am__tar = $${TAR-tar} chof - "$$tardir" am__untar = $${TAR-tar} xf - bindir = ${exec_prefix}/bin build = i686-pc-linux-gnu build_alias = build_cpu = i686 build_os = linux-gnu build_vendor = pc builddir = . datadir = ${datarootdir} datarootdir = ${prefix}/share docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} dvidir = ${docdir} exec_prefix = ${prefix} host = i686-pc-linux-gnu host_alias = host_cpu = i686 host_os = linux-gnu host_vendor = pc htmldir = ${docdir} includedir = ${prefix}/include infodir = ${datarootdir}/info install_sh = ${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/install-sh libdir = ${exec_prefix}/lib libexecdir = ${exec_prefix}/libexec localedir = ${datarootdir}/locale localstatedir = ${prefix}/var mandir = ${datarootdir}/man mkdir_p = /usr/bin/mkdir -p oldincludedir = /usr/include pdfdir = ${docdir} prefix = /usr/local program_transform_name = s,x,x, psdir = ${docdir} sbindir = ${exec_prefix}/sbin sharedstatedir = ${prefix}/com srcdir = . sysconfdir = ${prefix}/etc target_alias = top_build_prefix = top_builddir = . top_srcdir = . ACLOCAL_AMFLAGS = -I m4 # Nonstandard package files for distribution # Sample files that we don't compile. # C++ test files that we don't compile directly. # Python tests that we don't run. # CMake script # MSVC project files # xcode project files # xcode sample files # C++Builder project files EXTRA_DIST = CHANGES CONTRIBUTORS LICENSE \ include/gtest/gtest-param-test.h.pump \ include/gtest/internal/gtest-param-util-generated.h.pump \ include/gtest/internal/gtest-tuple.h.pump \ include/gtest/internal/gtest-type-util.h.pump make/Makefile \ scripts/fuse_gtest_files.py scripts/gen_gtest_pred_impl.py \ scripts/pump.py scripts/test/Makefile $(GTEST_SRC) \ samples/prime_tables.h samples/sample2_unittest.cc \ samples/sample3_unittest.cc samples/sample4_unittest.cc \ samples/sample5_unittest.cc samples/sample6_unittest.cc \ samples/sample7_unittest.cc samples/sample8_unittest.cc \ samples/sample9_unittest.cc test/gtest-death-test_ex_test.cc \ test/gtest-death-test_test.cc test/gtest-filepath_test.cc \ test/gtest-linked_ptr_test.cc test/gtest-listener_test.cc \ test/gtest-message_test.cc test/gtest-options_test.cc \ test/gtest-param-test2_test.cc test/gtest-param-test2_test.cc \ test/gtest-param-test_test.cc test/gtest-param-test_test.cc \ test/gtest-param-test_test.h test/gtest-port_test.cc \ test/gtest_premature_exit_test.cc test/gtest-printers_test.cc \ test/gtest-test-part_test.cc test/gtest-tuple_test.cc \ test/gtest-typed-test2_test.cc test/gtest-typed-test_test.cc \ test/gtest-typed-test_test.h test/gtest-unittest-api_test.cc \ test/gtest_break_on_failure_unittest_.cc \ test/gtest_catch_exceptions_test_.cc test/gtest_color_test_.cc \ test/gtest_env_var_test_.cc test/gtest_environment_test.cc \ test/gtest_filter_unittest_.cc test/gtest_help_test_.cc \ test/gtest_list_tests_unittest_.cc test/gtest_main_unittest.cc \ test/gtest_no_test_unittest.cc test/gtest_output_test_.cc \ test/gtest_pred_impl_unittest.cc test/gtest_prod_test.cc \ test/gtest_repeat_test.cc test/gtest_shuffle_test_.cc \ test/gtest_sole_header_test.cc test/gtest_stress_test.cc \ test/gtest_throw_on_failure_ex_test.cc \ test/gtest_throw_on_failure_test_.cc \ test/gtest_uninitialized_test_.cc test/gtest_unittest.cc \ test/gtest_unittest.cc test/gtest_xml_outfile1_test_.cc \ test/gtest_xml_outfile2_test_.cc \ test/gtest_xml_output_unittest_.cc test/production.cc \ test/production.h test/gtest_break_on_failure_unittest.py \ test/gtest_catch_exceptions_test.py test/gtest_color_test.py \ test/gtest_env_var_test.py test/gtest_filter_unittest.py \ test/gtest_help_test.py test/gtest_list_tests_unittest.py \ test/gtest_output_test.py \ test/gtest_output_test_golden_lin.txt \ test/gtest_shuffle_test.py test/gtest_test_utils.py \ test/gtest_throw_on_failure_test.py \ test/gtest_uninitialized_test.py \ test/gtest_xml_outfiles_test.py \ test/gtest_xml_output_unittest.py test/gtest_xml_test_utils.py \ CMakeLists.txt cmake/internal_utils.cmake msvc/gtest-md.sln \ msvc/gtest-md.vcproj msvc/gtest.sln msvc/gtest.vcproj \ msvc/gtest_main-md.vcproj msvc/gtest_main.vcproj \ msvc/gtest_prod_test-md.vcproj msvc/gtest_prod_test.vcproj \ msvc/gtest_unittest-md.vcproj msvc/gtest_unittest.vcproj \ xcode/Config/DebugProject.xcconfig \ xcode/Config/FrameworkTarget.xcconfig \ xcode/Config/General.xcconfig \ xcode/Config/ReleaseProject.xcconfig \ xcode/Config/StaticLibraryTarget.xcconfig \ xcode/Config/TestTarget.xcconfig xcode/Resources/Info.plist \ xcode/Scripts/runtests.sh xcode/Scripts/versiongenerate.py \ xcode/gtest.xcodeproj/project.pbxproj \ xcode/Samples/FrameworkSample/Info.plist \ xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj \ xcode/Samples/FrameworkSample/runtests.sh \ xcode/Samples/FrameworkSample/widget.cc \ xcode/Samples/FrameworkSample/widget.h \ xcode/Samples/FrameworkSample/widget_test.cc \ codegear/gtest.cbproj codegear/gtest.groupproj \ codegear/gtest_all.cc codegear/gtest_link.cc \ codegear/gtest_main.cbproj codegear/gtest_unittest.cbproj \ $(m4data_DATA) # gtest source files that we don't compile directly. They are # #included by gtest-all.cc. GTEST_SRC = \ src/gtest-death-test.cc \ src/gtest-filepath.cc \ src/gtest-internal-inl.h \ src/gtest-port.cc \ src/gtest-printers.cc \ src/gtest-test-part.cc \ src/gtest-typed-test.cc \ src/gtest.cc # Distribute and install M4 macro m4datadir = $(datadir)/aclocal m4data_DATA = m4/gtest.m4 # We define the global AM_CPPFLAGS as everything we compile includes from these # directories. AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/include #AM_CXXFLAGS = -DGTEST_HAS_PTHREAD=0 # Modifies compiler and linker flags for pthreads compatibility. AM_CXXFLAGS = -pthread -DGTEST_HAS_PTHREAD=1 AM_LIBS = # Build rules for libraries. lib_LTLIBRARIES = lib/libgtest.la lib/libgtest_main.la lib_libgtest_la_SOURCES = src/gtest-all.cc pkginclude_HEADERS = \ include/gtest/gtest-death-test.h \ include/gtest/gtest-message.h \ include/gtest/gtest-param-test.h \ include/gtest/gtest-printers.h \ include/gtest/gtest-spi.h \ include/gtest/gtest-test-part.h \ include/gtest/gtest-typed-test.h \ include/gtest/gtest.h \ include/gtest/gtest_pred_impl.h \ include/gtest/gtest_prod.h pkginclude_internaldir = $(pkgincludedir)/internal pkginclude_internal_HEADERS = \ include/gtest/internal/gtest-death-test-internal.h \ include/gtest/internal/gtest-filepath.h \ include/gtest/internal/gtest-internal.h \ include/gtest/internal/gtest-linked_ptr.h \ include/gtest/internal/gtest-param-util-generated.h \ include/gtest/internal/gtest-param-util.h \ include/gtest/internal/gtest-port.h \ include/gtest/internal/gtest-string.h \ include/gtest/internal/gtest-tuple.h \ include/gtest/internal/gtest-type-util.h lib_libgtest_main_la_SOURCES = src/gtest_main.cc lib_libgtest_main_la_LIBADD = lib/libgtest.la # Bulid rules for samples and tests. Automake's naming for some of # these variables isn't terribly obvious, so this is a brief # reference: # # TESTS -- Programs run automatically by "make check" # check_PROGRAMS -- Programs built by "make check" but not necessarily run noinst_LTLIBRARIES = samples/libsamples.la samples_libsamples_la_SOURCES = \ samples/sample1.cc \ samples/sample1.h \ samples/sample2.cc \ samples/sample2.h \ samples/sample3-inl.h \ samples/sample4.cc \ samples/sample4.h TESTS_ENVIRONMENT = GTEST_SOURCE_DIR="$(srcdir)/test" \ GTEST_BUILD_DIR="$(top_builddir)/test" samples_sample1_unittest_SOURCES = samples/sample1_unittest.cc samples_sample1_unittest_LDADD = lib/libgtest_main.la \ lib/libgtest.la \ samples/libsamples.la samples_sample10_unittest_SOURCES = samples/sample10_unittest.cc samples_sample10_unittest_LDADD = lib/libgtest.la test_gtest_all_test_SOURCES = test/gtest_all_test.cc test_gtest_all_test_LDADD = lib/libgtest_main.la \ lib/libgtest.la # Tests that fused gtest files compile and work. FUSED_GTEST_SRC = \ fused-src/gtest/gtest-all.cc \ fused-src/gtest/gtest.h \ fused-src/gtest/gtest_main.cc test_fused_gtest_test_SOURCES = $(FUSED_GTEST_SRC) \ samples/sample1.cc samples/sample1_unittest.cc test_fused_gtest_test_CPPFLAGS = -I"$(srcdir)/fused-src" # Death tests may produce core dumps in the build directory. In case # this happens, clean them to keep distcleancheck happy. CLEANFILES = core all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): build-aux/config.h: build-aux/stamp-h1 @if test ! -f $@; then rm -f build-aux/stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) build-aux/stamp-h1; else :; fi build-aux/stamp-h1: $(top_srcdir)/build-aux/config.h.in $(top_builddir)/config.status @rm -f build-aux/stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status build-aux/config.h $(top_srcdir)/build-aux/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f build-aux/stamp-h1 touch $@ distclean-hdr: -rm -f build-aux/config.h build-aux/stamp-h1 scripts/gtest-config: $(top_builddir)/config.status $(top_srcdir)/scripts/gtest-config.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done src/$(am__dirstamp): @$(MKDIR_P) src @: > src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/$(DEPDIR) @: > src/$(DEPDIR)/$(am__dirstamp) src/gtest-all.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) lib/$(am__dirstamp): @$(MKDIR_P) lib @: > lib/$(am__dirstamp) lib/libgtest.la: $(lib_libgtest_la_OBJECTS) $(lib_libgtest_la_DEPENDENCIES) $(EXTRA_lib_libgtest_la_DEPENDENCIES) lib/$(am__dirstamp) $(CXXLINK) -rpath $(libdir) $(lib_libgtest_la_OBJECTS) $(lib_libgtest_la_LIBADD) $(LIBS) src/gtest_main.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) lib/libgtest_main.la: $(lib_libgtest_main_la_OBJECTS) $(lib_libgtest_main_la_DEPENDENCIES) $(EXTRA_lib_libgtest_main_la_DEPENDENCIES) lib/$(am__dirstamp) $(CXXLINK) -rpath $(libdir) $(lib_libgtest_main_la_OBJECTS) $(lib_libgtest_main_la_LIBADD) $(LIBS) samples/$(am__dirstamp): @$(MKDIR_P) samples @: > samples/$(am__dirstamp) samples/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) samples/$(DEPDIR) @: > samples/$(DEPDIR)/$(am__dirstamp) samples/sample1.lo: samples/$(am__dirstamp) \ samples/$(DEPDIR)/$(am__dirstamp) samples/sample2.lo: samples/$(am__dirstamp) \ samples/$(DEPDIR)/$(am__dirstamp) samples/sample4.lo: samples/$(am__dirstamp) \ samples/$(DEPDIR)/$(am__dirstamp) samples/libsamples.la: $(samples_libsamples_la_OBJECTS) $(samples_libsamples_la_DEPENDENCIES) $(EXTRA_samples_libsamples_la_DEPENDENCIES) samples/$(am__dirstamp) $(CXXLINK) $(samples_libsamples_la_OBJECTS) $(samples_libsamples_la_LIBADD) $(LIBS) clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list samples/sample10_unittest.$(OBJEXT): samples/$(am__dirstamp) \ samples/$(DEPDIR)/$(am__dirstamp) samples/sample10_unittest$(EXEEXT): $(samples_sample10_unittest_OBJECTS) $(samples_sample10_unittest_DEPENDENCIES) $(EXTRA_samples_sample10_unittest_DEPENDENCIES) samples/$(am__dirstamp) @rm -f samples/sample10_unittest$(EXEEXT) $(CXXLINK) $(samples_sample10_unittest_OBJECTS) $(samples_sample10_unittest_LDADD) $(LIBS) samples/sample1_unittest.$(OBJEXT): samples/$(am__dirstamp) \ samples/$(DEPDIR)/$(am__dirstamp) samples/sample1_unittest$(EXEEXT): $(samples_sample1_unittest_OBJECTS) $(samples_sample1_unittest_DEPENDENCIES) $(EXTRA_samples_sample1_unittest_DEPENDENCIES) samples/$(am__dirstamp) @rm -f samples/sample1_unittest$(EXEEXT) $(CXXLINK) $(samples_sample1_unittest_OBJECTS) $(samples_sample1_unittest_LDADD) $(LIBS) fused-src/gtest/$(am__dirstamp): @$(MKDIR_P) fused-src/gtest @: > fused-src/gtest/$(am__dirstamp) fused-src/gtest/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) fused-src/gtest/$(DEPDIR) @: > fused-src/gtest/$(DEPDIR)/$(am__dirstamp) fused-src/gtest/test_fused_gtest_test-gtest-all.$(OBJEXT): \ fused-src/gtest/$(am__dirstamp) \ fused-src/gtest/$(DEPDIR)/$(am__dirstamp) fused-src/gtest/test_fused_gtest_test-gtest_main.$(OBJEXT): \ fused-src/gtest/$(am__dirstamp) \ fused-src/gtest/$(DEPDIR)/$(am__dirstamp) samples/test_fused_gtest_test-sample1.$(OBJEXT): \ samples/$(am__dirstamp) samples/$(DEPDIR)/$(am__dirstamp) samples/test_fused_gtest_test-sample1_unittest.$(OBJEXT): \ samples/$(am__dirstamp) samples/$(DEPDIR)/$(am__dirstamp) test/$(am__dirstamp): @$(MKDIR_P) test @: > test/$(am__dirstamp) test/fused_gtest_test$(EXEEXT): $(test_fused_gtest_test_OBJECTS) $(test_fused_gtest_test_DEPENDENCIES) $(EXTRA_test_fused_gtest_test_DEPENDENCIES) test/$(am__dirstamp) @rm -f test/fused_gtest_test$(EXEEXT) $(CXXLINK) $(test_fused_gtest_test_OBJECTS) $(test_fused_gtest_test_LDADD) $(LIBS) test/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) test/$(DEPDIR) @: > test/$(DEPDIR)/$(am__dirstamp) test/gtest_all_test.$(OBJEXT): test/$(am__dirstamp) \ test/$(DEPDIR)/$(am__dirstamp) test/gtest_all_test$(EXEEXT): $(test_gtest_all_test_OBJECTS) $(test_gtest_all_test_DEPENDENCIES) $(EXTRA_test_gtest_all_test_DEPENDENCIES) test/$(am__dirstamp) @rm -f test/gtest_all_test$(EXEEXT) $(CXXLINK) $(test_gtest_all_test_OBJECTS) $(test_gtest_all_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f fused-src/gtest/test_fused_gtest_test-gtest-all.$(OBJEXT) -rm -f fused-src/gtest/test_fused_gtest_test-gtest_main.$(OBJEXT) -rm -f samples/sample1.$(OBJEXT) -rm -f samples/sample1.lo -rm -f samples/sample10_unittest.$(OBJEXT) -rm -f samples/sample1_unittest.$(OBJEXT) -rm -f samples/sample2.$(OBJEXT) -rm -f samples/sample2.lo -rm -f samples/sample4.$(OBJEXT) -rm -f samples/sample4.lo -rm -f samples/test_fused_gtest_test-sample1.$(OBJEXT) -rm -f samples/test_fused_gtest_test-sample1_unittest.$(OBJEXT) -rm -f src/gtest-all.$(OBJEXT) -rm -f src/gtest-all.lo -rm -f src/gtest_main.$(OBJEXT) -rm -f src/gtest_main.lo -rm -f test/gtest_all_test.$(OBJEXT) distclean-compile: -rm -f *.tab.c include fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Po include fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Po include samples/$(DEPDIR)/sample1.Plo include samples/$(DEPDIR)/sample10_unittest.Po include samples/$(DEPDIR)/sample1_unittest.Po include samples/$(DEPDIR)/sample2.Plo include samples/$(DEPDIR)/sample4.Plo include samples/$(DEPDIR)/test_fused_gtest_test-sample1.Po include samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Po include src/$(DEPDIR)/gtest-all.Plo include src/$(DEPDIR)/gtest_main.Plo include test/$(DEPDIR)/gtest_all_test.Po .cc.o: depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ $(am__mv) $$depbase.Tpo $$depbase.Po # source='$<' object='$@' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXXCOMPILE) -c -o $@ $< .cc.obj: depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ $(am__mv) $$depbase.Tpo $$depbase.Po # source='$<' object='$@' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ $(am__mv) $$depbase.Tpo $$depbase.Plo # source='$<' object='$@' libtool=yes \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(LTCXXCOMPILE) -c -o $@ $< fused-src/gtest/test_fused_gtest_test-gtest-all.o: fused-src/gtest/gtest-all.cc $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest-all.o -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.o `test -f 'fused-src/gtest/gtest-all.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest-all.cc $(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Po # source='fused-src/gtest/gtest-all.cc' object='fused-src/gtest/test_fused_gtest_test-gtest-all.o' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.o `test -f 'fused-src/gtest/gtest-all.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest-all.cc fused-src/gtest/test_fused_gtest_test-gtest-all.obj: fused-src/gtest/gtest-all.cc $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest-all.obj -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.obj `if test -f 'fused-src/gtest/gtest-all.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest-all.cc'; fi` $(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Po # source='fused-src/gtest/gtest-all.cc' object='fused-src/gtest/test_fused_gtest_test-gtest-all.obj' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.obj `if test -f 'fused-src/gtest/gtest-all.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest-all.cc'; fi` fused-src/gtest/test_fused_gtest_test-gtest_main.o: fused-src/gtest/gtest_main.cc $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest_main.o -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.o `test -f 'fused-src/gtest/gtest_main.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest_main.cc $(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Po # source='fused-src/gtest/gtest_main.cc' object='fused-src/gtest/test_fused_gtest_test-gtest_main.o' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.o `test -f 'fused-src/gtest/gtest_main.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest_main.cc fused-src/gtest/test_fused_gtest_test-gtest_main.obj: fused-src/gtest/gtest_main.cc $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest_main.obj -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.obj `if test -f 'fused-src/gtest/gtest_main.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest_main.cc'; fi` $(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Po # source='fused-src/gtest/gtest_main.cc' object='fused-src/gtest/test_fused_gtest_test-gtest_main.obj' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.obj `if test -f 'fused-src/gtest/gtest_main.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest_main.cc'; fi` samples/test_fused_gtest_test-sample1.o: samples/sample1.cc $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1.o -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo -c -o samples/test_fused_gtest_test-sample1.o `test -f 'samples/sample1.cc' || echo '$(srcdir)/'`samples/sample1.cc $(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1.Po # source='samples/sample1.cc' object='samples/test_fused_gtest_test-sample1.o' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1.o `test -f 'samples/sample1.cc' || echo '$(srcdir)/'`samples/sample1.cc samples/test_fused_gtest_test-sample1.obj: samples/sample1.cc $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1.obj -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo -c -o samples/test_fused_gtest_test-sample1.obj `if test -f 'samples/sample1.cc'; then $(CYGPATH_W) 'samples/sample1.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1.cc'; fi` $(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1.Po # source='samples/sample1.cc' object='samples/test_fused_gtest_test-sample1.obj' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1.obj `if test -f 'samples/sample1.cc'; then $(CYGPATH_W) 'samples/sample1.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1.cc'; fi` samples/test_fused_gtest_test-sample1_unittest.o: samples/sample1_unittest.cc $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1_unittest.o -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo -c -o samples/test_fused_gtest_test-sample1_unittest.o `test -f 'samples/sample1_unittest.cc' || echo '$(srcdir)/'`samples/sample1_unittest.cc $(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Po # source='samples/sample1_unittest.cc' object='samples/test_fused_gtest_test-sample1_unittest.o' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1_unittest.o `test -f 'samples/sample1_unittest.cc' || echo '$(srcdir)/'`samples/sample1_unittest.cc samples/test_fused_gtest_test-sample1_unittest.obj: samples/sample1_unittest.cc $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1_unittest.obj -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo -c -o samples/test_fused_gtest_test-sample1_unittest.obj `if test -f 'samples/sample1_unittest.cc'; then $(CYGPATH_W) 'samples/sample1_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1_unittest.cc'; fi` $(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Po # source='samples/sample1_unittest.cc' object='samples/test_fused_gtest_test-sample1_unittest.obj' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1_unittest.obj `if test -f 'samples/sample1_unittest.cc'; then $(CYGPATH_W) 'samples/sample1_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1_unittest.cc'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf lib/.libs lib/_libs -rm -rf samples/.libs samples/_libs -rm -rf src/.libs src/_libs -rm -rf test/.libs test/_libs distclean-libtool: -rm -f libtool config.lt install-m4dataDATA: $(m4data_DATA) @$(NORMAL_INSTALL) test -z "$(m4datadir)" || $(MKDIR_P) "$(DESTDIR)$(m4datadir)" @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(m4datadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(m4datadir)" || exit $$?; \ done uninstall-m4dataDATA: @$(NORMAL_UNINSTALL) @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(m4datadir)'; $(am__uninstall_files_from_dir) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) install-pkginclude_internalHEADERS: $(pkginclude_internal_HEADERS) @$(NORMAL_INSTALL) test -z "$(pkginclude_internaldir)" || $(MKDIR_P) "$(DESTDIR)$(pkginclude_internaldir)" @list='$(pkginclude_internal_HEADERS)'; test -n "$(pkginclude_internaldir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkginclude_internaldir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkginclude_internaldir)" || exit $$?; \ done uninstall-pkginclude_internalHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_internal_HEADERS)'; test -n "$(pkginclude_internaldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkginclude_internaldir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$${col}$$dashes$${std}"; \ echo "$${col}$$banner$${std}"; \ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ test -z "$$report" || echo "$${col}$$report$${std}"; \ echo "$${col}$$dashes$${std}"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkginclude_internaldir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f fused-src/gtest/$(DEPDIR)/$(am__dirstamp) -rm -f fused-src/gtest/$(am__dirstamp) -rm -f lib/$(am__dirstamp) -rm -f samples/$(DEPDIR)/$(am__dirstamp) -rm -f samples/$(am__dirstamp) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) -rm -f test/$(DEPDIR)/$(am__dirstamp) -rm -f test/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." #maintainer-clean-local: clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf fused-src/gtest/$(DEPDIR) samples/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-m4dataDATA \ install-pkgincludeHEADERS install-pkginclude_internalHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-exec-local install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf fused-src/gtest/$(DEPDIR) samples/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES uninstall-m4dataDATA \ uninstall-pkgincludeHEADERS \ uninstall-pkginclude_internalHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \ clean clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool clean-noinstLTLIBRARIES ctags dist dist-all \ dist-bzip2 dist-gzip dist-lzip dist-lzma dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-exec-local \ install-html install-html-am install-info install-info-am \ install-libLTLIBRARIES install-m4dataDATA install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-pkginclude_internalHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLTLIBRARIES \ uninstall-m4dataDATA uninstall-pkgincludeHEADERS \ uninstall-pkginclude_internalHEADERS # Build rules for putting fused Google Test files into the distribution # package. The user can also create those files by manually running # scripts/fuse_gtest_files.py. $(test_fused_gtest_test_SOURCES): fused-gtest fused-gtest: $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) \ $(GTEST_SRC) src/gtest-all.cc src/gtest_main.cc \ scripts/fuse_gtest_files.py mkdir -p "$(srcdir)/fused-src" chmod -R u+w "$(srcdir)/fused-src" rm -f "$(srcdir)/fused-src/gtest/gtest-all.cc" rm -f "$(srcdir)/fused-src/gtest/gtest.h" "$(srcdir)/scripts/fuse_gtest_files.py" "$(srcdir)/fused-src" cp -f "$(srcdir)/src/gtest_main.cc" "$(srcdir)/fused-src/gtest/" maintainer-clean-local: rm -rf "$(srcdir)/fused-src" # Disables 'make install' as installing a compiled version of Google # Test can lead to undefined behavior due to violation of the # One-Definition Rule. install-exec-local: echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system." false install-data-local: echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system." false # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: dlt-daemon-2.18.6/gtest-1.7.0/Makefile.am000066400000000000000000000230131377520261000174610ustar00rootroot00000000000000# Automake file ACLOCAL_AMFLAGS = -I m4 # Nonstandard package files for distribution EXTRA_DIST = \ CHANGES \ CONTRIBUTORS \ LICENSE \ include/gtest/gtest-param-test.h.pump \ include/gtest/internal/gtest-param-util-generated.h.pump \ include/gtest/internal/gtest-tuple.h.pump \ include/gtest/internal/gtest-type-util.h.pump \ make/Makefile \ scripts/fuse_gtest_files.py \ scripts/gen_gtest_pred_impl.py \ scripts/pump.py \ scripts/test/Makefile # gtest source files that we don't compile directly. They are # #included by gtest-all.cc. GTEST_SRC = \ src/gtest-death-test.cc \ src/gtest-filepath.cc \ src/gtest-internal-inl.h \ src/gtest-port.cc \ src/gtest-printers.cc \ src/gtest-test-part.cc \ src/gtest-typed-test.cc \ src/gtest.cc EXTRA_DIST += $(GTEST_SRC) # Sample files that we don't compile. EXTRA_DIST += \ samples/prime_tables.h \ samples/sample2_unittest.cc \ samples/sample3_unittest.cc \ samples/sample4_unittest.cc \ samples/sample5_unittest.cc \ samples/sample6_unittest.cc \ samples/sample7_unittest.cc \ samples/sample8_unittest.cc \ samples/sample9_unittest.cc # C++ test files that we don't compile directly. EXTRA_DIST += \ test/gtest-death-test_ex_test.cc \ test/gtest-death-test_test.cc \ test/gtest-filepath_test.cc \ test/gtest-linked_ptr_test.cc \ test/gtest-listener_test.cc \ test/gtest-message_test.cc \ test/gtest-options_test.cc \ test/gtest-param-test2_test.cc \ test/gtest-param-test2_test.cc \ test/gtest-param-test_test.cc \ test/gtest-param-test_test.cc \ test/gtest-param-test_test.h \ test/gtest-port_test.cc \ test/gtest_premature_exit_test.cc \ test/gtest-printers_test.cc \ test/gtest-test-part_test.cc \ test/gtest-tuple_test.cc \ test/gtest-typed-test2_test.cc \ test/gtest-typed-test_test.cc \ test/gtest-typed-test_test.h \ test/gtest-unittest-api_test.cc \ test/gtest_break_on_failure_unittest_.cc \ test/gtest_catch_exceptions_test_.cc \ test/gtest_color_test_.cc \ test/gtest_env_var_test_.cc \ test/gtest_environment_test.cc \ test/gtest_filter_unittest_.cc \ test/gtest_help_test_.cc \ test/gtest_list_tests_unittest_.cc \ test/gtest_main_unittest.cc \ test/gtest_no_test_unittest.cc \ test/gtest_output_test_.cc \ test/gtest_pred_impl_unittest.cc \ test/gtest_prod_test.cc \ test/gtest_repeat_test.cc \ test/gtest_shuffle_test_.cc \ test/gtest_sole_header_test.cc \ test/gtest_stress_test.cc \ test/gtest_throw_on_failure_ex_test.cc \ test/gtest_throw_on_failure_test_.cc \ test/gtest_uninitialized_test_.cc \ test/gtest_unittest.cc \ test/gtest_unittest.cc \ test/gtest_xml_outfile1_test_.cc \ test/gtest_xml_outfile2_test_.cc \ test/gtest_xml_output_unittest_.cc \ test/production.cc \ test/production.h # Python tests that we don't run. EXTRA_DIST += \ test/gtest_break_on_failure_unittest.py \ test/gtest_catch_exceptions_test.py \ test/gtest_color_test.py \ test/gtest_env_var_test.py \ test/gtest_filter_unittest.py \ test/gtest_help_test.py \ test/gtest_list_tests_unittest.py \ test/gtest_output_test.py \ test/gtest_output_test_golden_lin.txt \ test/gtest_shuffle_test.py \ test/gtest_test_utils.py \ test/gtest_throw_on_failure_test.py \ test/gtest_uninitialized_test.py \ test/gtest_xml_outfiles_test.py \ test/gtest_xml_output_unittest.py \ test/gtest_xml_test_utils.py # CMake script EXTRA_DIST += \ CMakeLists.txt \ cmake/internal_utils.cmake # MSVC project files EXTRA_DIST += \ msvc/gtest-md.sln \ msvc/gtest-md.vcproj \ msvc/gtest.sln \ msvc/gtest.vcproj \ msvc/gtest_main-md.vcproj \ msvc/gtest_main.vcproj \ msvc/gtest_prod_test-md.vcproj \ msvc/gtest_prod_test.vcproj \ msvc/gtest_unittest-md.vcproj \ msvc/gtest_unittest.vcproj # xcode project files EXTRA_DIST += \ xcode/Config/DebugProject.xcconfig \ xcode/Config/FrameworkTarget.xcconfig \ xcode/Config/General.xcconfig \ xcode/Config/ReleaseProject.xcconfig \ xcode/Config/StaticLibraryTarget.xcconfig \ xcode/Config/TestTarget.xcconfig \ xcode/Resources/Info.plist \ xcode/Scripts/runtests.sh \ xcode/Scripts/versiongenerate.py \ xcode/gtest.xcodeproj/project.pbxproj # xcode sample files EXTRA_DIST += \ xcode/Samples/FrameworkSample/Info.plist \ xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj \ xcode/Samples/FrameworkSample/runtests.sh \ xcode/Samples/FrameworkSample/widget.cc \ xcode/Samples/FrameworkSample/widget.h \ xcode/Samples/FrameworkSample/widget_test.cc # C++Builder project files EXTRA_DIST += \ codegear/gtest.cbproj \ codegear/gtest.groupproj \ codegear/gtest_all.cc \ codegear/gtest_link.cc \ codegear/gtest_main.cbproj \ codegear/gtest_unittest.cbproj # Distribute and install M4 macro m4datadir = $(datadir)/aclocal m4data_DATA = m4/gtest.m4 EXTRA_DIST += $(m4data_DATA) # We define the global AM_CPPFLAGS as everything we compile includes from these # directories. AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/include # Modifies compiler and linker flags for pthreads compatibility. if HAVE_PTHREADS AM_CXXFLAGS = @PTHREAD_CFLAGS@ -DGTEST_HAS_PTHREAD=1 AM_LIBS = @PTHREAD_LIBS@ else AM_CXXFLAGS = -DGTEST_HAS_PTHREAD=0 endif # Build rules for libraries. lib_LTLIBRARIES = lib/libgtest.la lib/libgtest_main.la lib_libgtest_la_SOURCES = src/gtest-all.cc pkginclude_HEADERS = \ include/gtest/gtest-death-test.h \ include/gtest/gtest-message.h \ include/gtest/gtest-param-test.h \ include/gtest/gtest-printers.h \ include/gtest/gtest-spi.h \ include/gtest/gtest-test-part.h \ include/gtest/gtest-typed-test.h \ include/gtest/gtest.h \ include/gtest/gtest_pred_impl.h \ include/gtest/gtest_prod.h pkginclude_internaldir = $(pkgincludedir)/internal pkginclude_internal_HEADERS = \ include/gtest/internal/gtest-death-test-internal.h \ include/gtest/internal/gtest-filepath.h \ include/gtest/internal/gtest-internal.h \ include/gtest/internal/gtest-linked_ptr.h \ include/gtest/internal/gtest-param-util-generated.h \ include/gtest/internal/gtest-param-util.h \ include/gtest/internal/gtest-port.h \ include/gtest/internal/gtest-string.h \ include/gtest/internal/gtest-tuple.h \ include/gtest/internal/gtest-type-util.h lib_libgtest_main_la_SOURCES = src/gtest_main.cc lib_libgtest_main_la_LIBADD = lib/libgtest.la # Bulid rules for samples and tests. Automake's naming for some of # these variables isn't terribly obvious, so this is a brief # reference: # # TESTS -- Programs run automatically by "make check" # check_PROGRAMS -- Programs built by "make check" but not necessarily run noinst_LTLIBRARIES = samples/libsamples.la samples_libsamples_la_SOURCES = \ samples/sample1.cc \ samples/sample1.h \ samples/sample2.cc \ samples/sample2.h \ samples/sample3-inl.h \ samples/sample4.cc \ samples/sample4.h TESTS= TESTS_ENVIRONMENT = GTEST_SOURCE_DIR="$(srcdir)/test" \ GTEST_BUILD_DIR="$(top_builddir)/test" check_PROGRAMS= # A simple sample on using gtest. TESTS += samples/sample1_unittest check_PROGRAMS += samples/sample1_unittest samples_sample1_unittest_SOURCES = samples/sample1_unittest.cc samples_sample1_unittest_LDADD = lib/libgtest_main.la \ lib/libgtest.la \ samples/libsamples.la # Another sample. It also verifies that libgtest works. TESTS += samples/sample10_unittest check_PROGRAMS += samples/sample10_unittest samples_sample10_unittest_SOURCES = samples/sample10_unittest.cc samples_sample10_unittest_LDADD = lib/libgtest.la # This tests most constructs of gtest and verifies that libgtest_main # and libgtest work. TESTS += test/gtest_all_test check_PROGRAMS += test/gtest_all_test test_gtest_all_test_SOURCES = test/gtest_all_test.cc test_gtest_all_test_LDADD = lib/libgtest_main.la \ lib/libgtest.la # Tests that fused gtest files compile and work. FUSED_GTEST_SRC = \ fused-src/gtest/gtest-all.cc \ fused-src/gtest/gtest.h \ fused-src/gtest/gtest_main.cc if HAVE_PYTHON TESTS += test/fused_gtest_test check_PROGRAMS += test/fused_gtest_test test_fused_gtest_test_SOURCES = $(FUSED_GTEST_SRC) \ samples/sample1.cc samples/sample1_unittest.cc test_fused_gtest_test_CPPFLAGS = -I"$(srcdir)/fused-src" # Build rules for putting fused Google Test files into the distribution # package. The user can also create those files by manually running # scripts/fuse_gtest_files.py. $(test_fused_gtest_test_SOURCES): fused-gtest fused-gtest: $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) \ $(GTEST_SRC) src/gtest-all.cc src/gtest_main.cc \ scripts/fuse_gtest_files.py mkdir -p "$(srcdir)/fused-src" chmod -R u+w "$(srcdir)/fused-src" rm -f "$(srcdir)/fused-src/gtest/gtest-all.cc" rm -f "$(srcdir)/fused-src/gtest/gtest.h" "$(srcdir)/scripts/fuse_gtest_files.py" "$(srcdir)/fused-src" cp -f "$(srcdir)/src/gtest_main.cc" "$(srcdir)/fused-src/gtest/" maintainer-clean-local: rm -rf "$(srcdir)/fused-src" endif # Death tests may produce core dumps in the build directory. In case # this happens, clean them to keep distcleancheck happy. CLEANFILES = core # Disables 'make install' as installing a compiled version of Google # Test can lead to undefined behavior due to violation of the # One-Definition Rule. install-exec-local: echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system." false install-data-local: echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system." false dlt-daemon-2.18.6/gtest-1.7.0/Makefile.in000066400000000000000000001632441377520261000175050ustar00rootroot00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Automake file VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ TESTS = samples/sample1_unittest$(EXEEXT) \ samples/sample10_unittest$(EXEEXT) \ test/gtest_all_test$(EXEEXT) $(am__EXEEXT_1) check_PROGRAMS = samples/sample1_unittest$(EXEEXT) \ samples/sample10_unittest$(EXEEXT) \ test/gtest_all_test$(EXEEXT) $(am__EXEEXT_1) @HAVE_PYTHON_TRUE@am__append_1 = test/fused_gtest_test @HAVE_PYTHON_TRUE@am__append_2 = test/fused_gtest_test subdir = . DIST_COMMON = README $(am__configure_deps) $(pkginclude_HEADERS) \ $(pkginclude_internal_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/build-aux/config.h.in \ $(top_srcdir)/configure $(top_srcdir)/scripts/gtest-config.in \ build-aux/config.guess build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/ltmain.sh build-aux/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/build-aux/config.h CONFIG_CLEAN_FILES = scripts/gtest-config CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(m4datadir)" \ "$(DESTDIR)$(pkgincludedir)" \ "$(DESTDIR)$(pkginclude_internaldir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) lib_libgtest_la_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp am_lib_libgtest_la_OBJECTS = src/gtest-all.lo lib_libgtest_la_OBJECTS = $(am_lib_libgtest_la_OBJECTS) lib_libgtest_main_la_DEPENDENCIES = lib/libgtest.la am_lib_libgtest_main_la_OBJECTS = src/gtest_main.lo lib_libgtest_main_la_OBJECTS = $(am_lib_libgtest_main_la_OBJECTS) samples_libsamples_la_LIBADD = am_samples_libsamples_la_OBJECTS = samples/sample1.lo \ samples/sample2.lo samples/sample4.lo samples_libsamples_la_OBJECTS = $(am_samples_libsamples_la_OBJECTS) @HAVE_PYTHON_TRUE@am__EXEEXT_1 = test/fused_gtest_test$(EXEEXT) am_samples_sample10_unittest_OBJECTS = \ samples/sample10_unittest.$(OBJEXT) samples_sample10_unittest_OBJECTS = \ $(am_samples_sample10_unittest_OBJECTS) samples_sample10_unittest_DEPENDENCIES = lib/libgtest.la am_samples_sample1_unittest_OBJECTS = \ samples/sample1_unittest.$(OBJEXT) samples_sample1_unittest_OBJECTS = \ $(am_samples_sample1_unittest_OBJECTS) samples_sample1_unittest_DEPENDENCIES = lib/libgtest_main.la \ lib/libgtest.la samples/libsamples.la am__test_fused_gtest_test_SOURCES_DIST = fused-src/gtest/gtest-all.cc \ fused-src/gtest/gtest.h fused-src/gtest/gtest_main.cc \ samples/sample1.cc samples/sample1_unittest.cc am__objects_1 = \ fused-src/gtest/test_fused_gtest_test-gtest-all.$(OBJEXT) \ fused-src/gtest/test_fused_gtest_test-gtest_main.$(OBJEXT) @HAVE_PYTHON_TRUE@am_test_fused_gtest_test_OBJECTS = $(am__objects_1) \ @HAVE_PYTHON_TRUE@ samples/test_fused_gtest_test-sample1.$(OBJEXT) \ @HAVE_PYTHON_TRUE@ samples/test_fused_gtest_test-sample1_unittest.$(OBJEXT) test_fused_gtest_test_OBJECTS = $(am_test_fused_gtest_test_OBJECTS) test_fused_gtest_test_LDADD = $(LDADD) am_test_gtest_all_test_OBJECTS = test/gtest_all_test.$(OBJEXT) test_gtest_all_test_OBJECTS = $(am_test_gtest_all_test_OBJECTS) test_gtest_all_test_DEPENDENCIES = lib/libgtest_main.la \ lib/libgtest.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/build-aux depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(lib_libgtest_la_SOURCES) $(lib_libgtest_main_la_SOURCES) \ $(samples_libsamples_la_SOURCES) \ $(samples_sample10_unittest_SOURCES) \ $(samples_sample1_unittest_SOURCES) \ $(test_fused_gtest_test_SOURCES) \ $(test_gtest_all_test_SOURCES) DIST_SOURCES = $(lib_libgtest_la_SOURCES) \ $(lib_libgtest_main_la_SOURCES) \ $(samples_libsamples_la_SOURCES) \ $(samples_sample10_unittest_SOURCES) \ $(samples_sample1_unittest_SOURCES) \ $(am__test_fused_gtest_test_SOURCES_DIST) \ $(test_gtest_all_test_SOURCES) DATA = $(m4data_DATA) HEADERS = $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 $(distdir).zip GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 # Nonstandard package files for distribution # Sample files that we don't compile. # C++ test files that we don't compile directly. # Python tests that we don't run. # CMake script # MSVC project files # xcode project files # xcode sample files # C++Builder project files EXTRA_DIST = CHANGES CONTRIBUTORS LICENSE \ include/gtest/gtest-param-test.h.pump \ include/gtest/internal/gtest-param-util-generated.h.pump \ include/gtest/internal/gtest-tuple.h.pump \ include/gtest/internal/gtest-type-util.h.pump make/Makefile \ scripts/fuse_gtest_files.py scripts/gen_gtest_pred_impl.py \ scripts/pump.py scripts/test/Makefile $(GTEST_SRC) \ samples/prime_tables.h samples/sample2_unittest.cc \ samples/sample3_unittest.cc samples/sample4_unittest.cc \ samples/sample5_unittest.cc samples/sample6_unittest.cc \ samples/sample7_unittest.cc samples/sample8_unittest.cc \ samples/sample9_unittest.cc test/gtest-death-test_ex_test.cc \ test/gtest-death-test_test.cc test/gtest-filepath_test.cc \ test/gtest-linked_ptr_test.cc test/gtest-listener_test.cc \ test/gtest-message_test.cc test/gtest-options_test.cc \ test/gtest-param-test2_test.cc test/gtest-param-test2_test.cc \ test/gtest-param-test_test.cc test/gtest-param-test_test.cc \ test/gtest-param-test_test.h test/gtest-port_test.cc \ test/gtest_premature_exit_test.cc test/gtest-printers_test.cc \ test/gtest-test-part_test.cc test/gtest-tuple_test.cc \ test/gtest-typed-test2_test.cc test/gtest-typed-test_test.cc \ test/gtest-typed-test_test.h test/gtest-unittest-api_test.cc \ test/gtest_break_on_failure_unittest_.cc \ test/gtest_catch_exceptions_test_.cc test/gtest_color_test_.cc \ test/gtest_env_var_test_.cc test/gtest_environment_test.cc \ test/gtest_filter_unittest_.cc test/gtest_help_test_.cc \ test/gtest_list_tests_unittest_.cc test/gtest_main_unittest.cc \ test/gtest_no_test_unittest.cc test/gtest_output_test_.cc \ test/gtest_pred_impl_unittest.cc test/gtest_prod_test.cc \ test/gtest_repeat_test.cc test/gtest_shuffle_test_.cc \ test/gtest_sole_header_test.cc test/gtest_stress_test.cc \ test/gtest_throw_on_failure_ex_test.cc \ test/gtest_throw_on_failure_test_.cc \ test/gtest_uninitialized_test_.cc test/gtest_unittest.cc \ test/gtest_unittest.cc test/gtest_xml_outfile1_test_.cc \ test/gtest_xml_outfile2_test_.cc \ test/gtest_xml_output_unittest_.cc test/production.cc \ test/production.h test/gtest_break_on_failure_unittest.py \ test/gtest_catch_exceptions_test.py test/gtest_color_test.py \ test/gtest_env_var_test.py test/gtest_filter_unittest.py \ test/gtest_help_test.py test/gtest_list_tests_unittest.py \ test/gtest_output_test.py \ test/gtest_output_test_golden_lin.txt \ test/gtest_shuffle_test.py test/gtest_test_utils.py \ test/gtest_throw_on_failure_test.py \ test/gtest_uninitialized_test.py \ test/gtest_xml_outfiles_test.py \ test/gtest_xml_output_unittest.py test/gtest_xml_test_utils.py \ CMakeLists.txt cmake/internal_utils.cmake msvc/gtest-md.sln \ msvc/gtest-md.vcproj msvc/gtest.sln msvc/gtest.vcproj \ msvc/gtest_main-md.vcproj msvc/gtest_main.vcproj \ msvc/gtest_prod_test-md.vcproj msvc/gtest_prod_test.vcproj \ msvc/gtest_unittest-md.vcproj msvc/gtest_unittest.vcproj \ xcode/Config/DebugProject.xcconfig \ xcode/Config/FrameworkTarget.xcconfig \ xcode/Config/General.xcconfig \ xcode/Config/ReleaseProject.xcconfig \ xcode/Config/StaticLibraryTarget.xcconfig \ xcode/Config/TestTarget.xcconfig xcode/Resources/Info.plist \ xcode/Scripts/runtests.sh xcode/Scripts/versiongenerate.py \ xcode/gtest.xcodeproj/project.pbxproj \ xcode/Samples/FrameworkSample/Info.plist \ xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj \ xcode/Samples/FrameworkSample/runtests.sh \ xcode/Samples/FrameworkSample/widget.cc \ xcode/Samples/FrameworkSample/widget.h \ xcode/Samples/FrameworkSample/widget_test.cc \ codegear/gtest.cbproj codegear/gtest.groupproj \ codegear/gtest_all.cc codegear/gtest_link.cc \ codegear/gtest_main.cbproj codegear/gtest_unittest.cbproj \ $(m4data_DATA) # gtest source files that we don't compile directly. They are # #included by gtest-all.cc. GTEST_SRC = \ src/gtest-death-test.cc \ src/gtest-filepath.cc \ src/gtest-internal-inl.h \ src/gtest-port.cc \ src/gtest-printers.cc \ src/gtest-test-part.cc \ src/gtest-typed-test.cc \ src/gtest.cc # Distribute and install M4 macro m4datadir = $(datadir)/aclocal m4data_DATA = m4/gtest.m4 # We define the global AM_CPPFLAGS as everything we compile includes from these # directories. AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/include @HAVE_PTHREADS_FALSE@AM_CXXFLAGS = -DGTEST_HAS_PTHREAD=0 # Modifies compiler and linker flags for pthreads compatibility. @HAVE_PTHREADS_TRUE@AM_CXXFLAGS = @PTHREAD_CFLAGS@ -DGTEST_HAS_PTHREAD=1 @HAVE_PTHREADS_TRUE@AM_LIBS = @PTHREAD_LIBS@ # Build rules for libraries. lib_LTLIBRARIES = lib/libgtest.la lib/libgtest_main.la lib_libgtest_la_SOURCES = src/gtest-all.cc pkginclude_HEADERS = \ include/gtest/gtest-death-test.h \ include/gtest/gtest-message.h \ include/gtest/gtest-param-test.h \ include/gtest/gtest-printers.h \ include/gtest/gtest-spi.h \ include/gtest/gtest-test-part.h \ include/gtest/gtest-typed-test.h \ include/gtest/gtest.h \ include/gtest/gtest_pred_impl.h \ include/gtest/gtest_prod.h pkginclude_internaldir = $(pkgincludedir)/internal pkginclude_internal_HEADERS = \ include/gtest/internal/gtest-death-test-internal.h \ include/gtest/internal/gtest-filepath.h \ include/gtest/internal/gtest-internal.h \ include/gtest/internal/gtest-linked_ptr.h \ include/gtest/internal/gtest-param-util-generated.h \ include/gtest/internal/gtest-param-util.h \ include/gtest/internal/gtest-port.h \ include/gtest/internal/gtest-string.h \ include/gtest/internal/gtest-tuple.h \ include/gtest/internal/gtest-type-util.h lib_libgtest_main_la_SOURCES = src/gtest_main.cc lib_libgtest_main_la_LIBADD = lib/libgtest.la # Bulid rules for samples and tests. Automake's naming for some of # these variables isn't terribly obvious, so this is a brief # reference: # # TESTS -- Programs run automatically by "make check" # check_PROGRAMS -- Programs built by "make check" but not necessarily run noinst_LTLIBRARIES = samples/libsamples.la samples_libsamples_la_SOURCES = \ samples/sample1.cc \ samples/sample1.h \ samples/sample2.cc \ samples/sample2.h \ samples/sample3-inl.h \ samples/sample4.cc \ samples/sample4.h TESTS_ENVIRONMENT = GTEST_SOURCE_DIR="$(srcdir)/test" \ GTEST_BUILD_DIR="$(top_builddir)/test" samples_sample1_unittest_SOURCES = samples/sample1_unittest.cc samples_sample1_unittest_LDADD = lib/libgtest_main.la \ lib/libgtest.la \ samples/libsamples.la samples_sample10_unittest_SOURCES = samples/sample10_unittest.cc samples_sample10_unittest_LDADD = lib/libgtest.la test_gtest_all_test_SOURCES = test/gtest_all_test.cc test_gtest_all_test_LDADD = lib/libgtest_main.la \ lib/libgtest.la # Tests that fused gtest files compile and work. FUSED_GTEST_SRC = \ fused-src/gtest/gtest-all.cc \ fused-src/gtest/gtest.h \ fused-src/gtest/gtest_main.cc @HAVE_PYTHON_TRUE@test_fused_gtest_test_SOURCES = $(FUSED_GTEST_SRC) \ @HAVE_PYTHON_TRUE@ samples/sample1.cc samples/sample1_unittest.cc @HAVE_PYTHON_TRUE@test_fused_gtest_test_CPPFLAGS = -I"$(srcdir)/fused-src" # Death tests may produce core dumps in the build directory. In case # this happens, clean them to keep distcleancheck happy. CLEANFILES = core all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): build-aux/config.h: build-aux/stamp-h1 @if test ! -f $@; then rm -f build-aux/stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) build-aux/stamp-h1; else :; fi build-aux/stamp-h1: $(top_srcdir)/build-aux/config.h.in $(top_builddir)/config.status @rm -f build-aux/stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status build-aux/config.h $(top_srcdir)/build-aux/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f build-aux/stamp-h1 touch $@ distclean-hdr: -rm -f build-aux/config.h build-aux/stamp-h1 scripts/gtest-config: $(top_builddir)/config.status $(top_srcdir)/scripts/gtest-config.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done src/$(am__dirstamp): @$(MKDIR_P) src @: > src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/$(DEPDIR) @: > src/$(DEPDIR)/$(am__dirstamp) src/gtest-all.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) lib/$(am__dirstamp): @$(MKDIR_P) lib @: > lib/$(am__dirstamp) lib/libgtest.la: $(lib_libgtest_la_OBJECTS) $(lib_libgtest_la_DEPENDENCIES) $(EXTRA_lib_libgtest_la_DEPENDENCIES) lib/$(am__dirstamp) $(CXXLINK) -rpath $(libdir) $(lib_libgtest_la_OBJECTS) $(lib_libgtest_la_LIBADD) $(LIBS) src/gtest_main.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) lib/libgtest_main.la: $(lib_libgtest_main_la_OBJECTS) $(lib_libgtest_main_la_DEPENDENCIES) $(EXTRA_lib_libgtest_main_la_DEPENDENCIES) lib/$(am__dirstamp) $(CXXLINK) -rpath $(libdir) $(lib_libgtest_main_la_OBJECTS) $(lib_libgtest_main_la_LIBADD) $(LIBS) samples/$(am__dirstamp): @$(MKDIR_P) samples @: > samples/$(am__dirstamp) samples/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) samples/$(DEPDIR) @: > samples/$(DEPDIR)/$(am__dirstamp) samples/sample1.lo: samples/$(am__dirstamp) \ samples/$(DEPDIR)/$(am__dirstamp) samples/sample2.lo: samples/$(am__dirstamp) \ samples/$(DEPDIR)/$(am__dirstamp) samples/sample4.lo: samples/$(am__dirstamp) \ samples/$(DEPDIR)/$(am__dirstamp) samples/libsamples.la: $(samples_libsamples_la_OBJECTS) $(samples_libsamples_la_DEPENDENCIES) $(EXTRA_samples_libsamples_la_DEPENDENCIES) samples/$(am__dirstamp) $(CXXLINK) $(samples_libsamples_la_OBJECTS) $(samples_libsamples_la_LIBADD) $(LIBS) clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list samples/sample10_unittest.$(OBJEXT): samples/$(am__dirstamp) \ samples/$(DEPDIR)/$(am__dirstamp) samples/sample10_unittest$(EXEEXT): $(samples_sample10_unittest_OBJECTS) $(samples_sample10_unittest_DEPENDENCIES) $(EXTRA_samples_sample10_unittest_DEPENDENCIES) samples/$(am__dirstamp) @rm -f samples/sample10_unittest$(EXEEXT) $(CXXLINK) $(samples_sample10_unittest_OBJECTS) $(samples_sample10_unittest_LDADD) $(LIBS) samples/sample1_unittest.$(OBJEXT): samples/$(am__dirstamp) \ samples/$(DEPDIR)/$(am__dirstamp) samples/sample1_unittest$(EXEEXT): $(samples_sample1_unittest_OBJECTS) $(samples_sample1_unittest_DEPENDENCIES) $(EXTRA_samples_sample1_unittest_DEPENDENCIES) samples/$(am__dirstamp) @rm -f samples/sample1_unittest$(EXEEXT) $(CXXLINK) $(samples_sample1_unittest_OBJECTS) $(samples_sample1_unittest_LDADD) $(LIBS) fused-src/gtest/$(am__dirstamp): @$(MKDIR_P) fused-src/gtest @: > fused-src/gtest/$(am__dirstamp) fused-src/gtest/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) fused-src/gtest/$(DEPDIR) @: > fused-src/gtest/$(DEPDIR)/$(am__dirstamp) fused-src/gtest/test_fused_gtest_test-gtest-all.$(OBJEXT): \ fused-src/gtest/$(am__dirstamp) \ fused-src/gtest/$(DEPDIR)/$(am__dirstamp) fused-src/gtest/test_fused_gtest_test-gtest_main.$(OBJEXT): \ fused-src/gtest/$(am__dirstamp) \ fused-src/gtest/$(DEPDIR)/$(am__dirstamp) samples/test_fused_gtest_test-sample1.$(OBJEXT): \ samples/$(am__dirstamp) samples/$(DEPDIR)/$(am__dirstamp) samples/test_fused_gtest_test-sample1_unittest.$(OBJEXT): \ samples/$(am__dirstamp) samples/$(DEPDIR)/$(am__dirstamp) test/$(am__dirstamp): @$(MKDIR_P) test @: > test/$(am__dirstamp) test/fused_gtest_test$(EXEEXT): $(test_fused_gtest_test_OBJECTS) $(test_fused_gtest_test_DEPENDENCIES) $(EXTRA_test_fused_gtest_test_DEPENDENCIES) test/$(am__dirstamp) @rm -f test/fused_gtest_test$(EXEEXT) $(CXXLINK) $(test_fused_gtest_test_OBJECTS) $(test_fused_gtest_test_LDADD) $(LIBS) test/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) test/$(DEPDIR) @: > test/$(DEPDIR)/$(am__dirstamp) test/gtest_all_test.$(OBJEXT): test/$(am__dirstamp) \ test/$(DEPDIR)/$(am__dirstamp) test/gtest_all_test$(EXEEXT): $(test_gtest_all_test_OBJECTS) $(test_gtest_all_test_DEPENDENCIES) $(EXTRA_test_gtest_all_test_DEPENDENCIES) test/$(am__dirstamp) @rm -f test/gtest_all_test$(EXEEXT) $(CXXLINK) $(test_gtest_all_test_OBJECTS) $(test_gtest_all_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f fused-src/gtest/test_fused_gtest_test-gtest-all.$(OBJEXT) -rm -f fused-src/gtest/test_fused_gtest_test-gtest_main.$(OBJEXT) -rm -f samples/sample1.$(OBJEXT) -rm -f samples/sample1.lo -rm -f samples/sample10_unittest.$(OBJEXT) -rm -f samples/sample1_unittest.$(OBJEXT) -rm -f samples/sample2.$(OBJEXT) -rm -f samples/sample2.lo -rm -f samples/sample4.$(OBJEXT) -rm -f samples/sample4.lo -rm -f samples/test_fused_gtest_test-sample1.$(OBJEXT) -rm -f samples/test_fused_gtest_test-sample1_unittest.$(OBJEXT) -rm -f src/gtest-all.$(OBJEXT) -rm -f src/gtest-all.lo -rm -f src/gtest_main.$(OBJEXT) -rm -f src/gtest_main.lo -rm -f test/gtest_all_test.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample10_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample1_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/test_fused_gtest_test-sample1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gtest-all.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gtest_main.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest_all_test.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< fused-src/gtest/test_fused_gtest_test-gtest-all.o: fused-src/gtest/gtest-all.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest-all.o -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.o `test -f 'fused-src/gtest/gtest-all.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest-all.cc @am__fastdepCXX_TRUE@ $(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fused-src/gtest/gtest-all.cc' object='fused-src/gtest/test_fused_gtest_test-gtest-all.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.o `test -f 'fused-src/gtest/gtest-all.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest-all.cc fused-src/gtest/test_fused_gtest_test-gtest-all.obj: fused-src/gtest/gtest-all.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest-all.obj -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.obj `if test -f 'fused-src/gtest/gtest-all.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest-all.cc'; fi` @am__fastdepCXX_TRUE@ $(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fused-src/gtest/gtest-all.cc' object='fused-src/gtest/test_fused_gtest_test-gtest-all.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.obj `if test -f 'fused-src/gtest/gtest-all.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest-all.cc'; fi` fused-src/gtest/test_fused_gtest_test-gtest_main.o: fused-src/gtest/gtest_main.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest_main.o -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.o `test -f 'fused-src/gtest/gtest_main.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest_main.cc @am__fastdepCXX_TRUE@ $(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fused-src/gtest/gtest_main.cc' object='fused-src/gtest/test_fused_gtest_test-gtest_main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.o `test -f 'fused-src/gtest/gtest_main.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest_main.cc fused-src/gtest/test_fused_gtest_test-gtest_main.obj: fused-src/gtest/gtest_main.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest_main.obj -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.obj `if test -f 'fused-src/gtest/gtest_main.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest_main.cc'; fi` @am__fastdepCXX_TRUE@ $(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fused-src/gtest/gtest_main.cc' object='fused-src/gtest/test_fused_gtest_test-gtest_main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.obj `if test -f 'fused-src/gtest/gtest_main.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest_main.cc'; fi` samples/test_fused_gtest_test-sample1.o: samples/sample1.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1.o -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo -c -o samples/test_fused_gtest_test-sample1.o `test -f 'samples/sample1.cc' || echo '$(srcdir)/'`samples/sample1.cc @am__fastdepCXX_TRUE@ $(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='samples/sample1.cc' object='samples/test_fused_gtest_test-sample1.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1.o `test -f 'samples/sample1.cc' || echo '$(srcdir)/'`samples/sample1.cc samples/test_fused_gtest_test-sample1.obj: samples/sample1.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1.obj -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo -c -o samples/test_fused_gtest_test-sample1.obj `if test -f 'samples/sample1.cc'; then $(CYGPATH_W) 'samples/sample1.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1.cc'; fi` @am__fastdepCXX_TRUE@ $(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='samples/sample1.cc' object='samples/test_fused_gtest_test-sample1.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1.obj `if test -f 'samples/sample1.cc'; then $(CYGPATH_W) 'samples/sample1.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1.cc'; fi` samples/test_fused_gtest_test-sample1_unittest.o: samples/sample1_unittest.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1_unittest.o -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo -c -o samples/test_fused_gtest_test-sample1_unittest.o `test -f 'samples/sample1_unittest.cc' || echo '$(srcdir)/'`samples/sample1_unittest.cc @am__fastdepCXX_TRUE@ $(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='samples/sample1_unittest.cc' object='samples/test_fused_gtest_test-sample1_unittest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1_unittest.o `test -f 'samples/sample1_unittest.cc' || echo '$(srcdir)/'`samples/sample1_unittest.cc samples/test_fused_gtest_test-sample1_unittest.obj: samples/sample1_unittest.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1_unittest.obj -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo -c -o samples/test_fused_gtest_test-sample1_unittest.obj `if test -f 'samples/sample1_unittest.cc'; then $(CYGPATH_W) 'samples/sample1_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1_unittest.cc'; fi` @am__fastdepCXX_TRUE@ $(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='samples/sample1_unittest.cc' object='samples/test_fused_gtest_test-sample1_unittest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1_unittest.obj `if test -f 'samples/sample1_unittest.cc'; then $(CYGPATH_W) 'samples/sample1_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1_unittest.cc'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf lib/.libs lib/_libs -rm -rf samples/.libs samples/_libs -rm -rf src/.libs src/_libs -rm -rf test/.libs test/_libs distclean-libtool: -rm -f libtool config.lt install-m4dataDATA: $(m4data_DATA) @$(NORMAL_INSTALL) test -z "$(m4datadir)" || $(MKDIR_P) "$(DESTDIR)$(m4datadir)" @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(m4datadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(m4datadir)" || exit $$?; \ done uninstall-m4dataDATA: @$(NORMAL_UNINSTALL) @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(m4datadir)'; $(am__uninstall_files_from_dir) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) install-pkginclude_internalHEADERS: $(pkginclude_internal_HEADERS) @$(NORMAL_INSTALL) test -z "$(pkginclude_internaldir)" || $(MKDIR_P) "$(DESTDIR)$(pkginclude_internaldir)" @list='$(pkginclude_internal_HEADERS)'; test -n "$(pkginclude_internaldir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkginclude_internaldir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkginclude_internaldir)" || exit $$?; \ done uninstall-pkginclude_internalHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_internal_HEADERS)'; test -n "$(pkginclude_internaldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkginclude_internaldir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$${col}$$dashes$${std}"; \ echo "$${col}$$banner$${std}"; \ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ test -z "$$report" || echo "$${col}$$report$${std}"; \ echo "$${col}$$dashes$${std}"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkginclude_internaldir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f fused-src/gtest/$(DEPDIR)/$(am__dirstamp) -rm -f fused-src/gtest/$(am__dirstamp) -rm -f lib/$(am__dirstamp) -rm -f samples/$(DEPDIR)/$(am__dirstamp) -rm -f samples/$(am__dirstamp) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) -rm -f test/$(DEPDIR)/$(am__dirstamp) -rm -f test/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @HAVE_PYTHON_FALSE@maintainer-clean-local: clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf fused-src/gtest/$(DEPDIR) samples/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-m4dataDATA \ install-pkgincludeHEADERS install-pkginclude_internalHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-exec-local install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf fused-src/gtest/$(DEPDIR) samples/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES uninstall-m4dataDATA \ uninstall-pkgincludeHEADERS \ uninstall-pkginclude_internalHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \ clean clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool clean-noinstLTLIBRARIES ctags dist dist-all \ dist-bzip2 dist-gzip dist-lzip dist-lzma dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-exec-local \ install-html install-html-am install-info install-info-am \ install-libLTLIBRARIES install-m4dataDATA install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-pkginclude_internalHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLTLIBRARIES \ uninstall-m4dataDATA uninstall-pkgincludeHEADERS \ uninstall-pkginclude_internalHEADERS # Build rules for putting fused Google Test files into the distribution # package. The user can also create those files by manually running # scripts/fuse_gtest_files.py. @HAVE_PYTHON_TRUE@$(test_fused_gtest_test_SOURCES): fused-gtest @HAVE_PYTHON_TRUE@fused-gtest: $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) \ @HAVE_PYTHON_TRUE@ $(GTEST_SRC) src/gtest-all.cc src/gtest_main.cc \ @HAVE_PYTHON_TRUE@ scripts/fuse_gtest_files.py @HAVE_PYTHON_TRUE@ mkdir -p "$(srcdir)/fused-src" @HAVE_PYTHON_TRUE@ chmod -R u+w "$(srcdir)/fused-src" @HAVE_PYTHON_TRUE@ rm -f "$(srcdir)/fused-src/gtest/gtest-all.cc" @HAVE_PYTHON_TRUE@ rm -f "$(srcdir)/fused-src/gtest/gtest.h" @HAVE_PYTHON_TRUE@ "$(srcdir)/scripts/fuse_gtest_files.py" "$(srcdir)/fused-src" @HAVE_PYTHON_TRUE@ cp -f "$(srcdir)/src/gtest_main.cc" "$(srcdir)/fused-src/gtest/" @HAVE_PYTHON_TRUE@maintainer-clean-local: @HAVE_PYTHON_TRUE@ rm -rf "$(srcdir)/fused-src" # Disables 'make install' as installing a compiled version of Google # Test can lead to undefined behavior due to violation of the # One-Definition Rule. install-exec-local: echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system." false install-data-local: echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system." false # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: dlt-daemon-2.18.6/gtest-1.7.0/README000066400000000000000000000373321377520261000163160ustar00rootroot00000000000000Google C++ Testing Framework ============================ http://code.google.com/p/googletest/ Overview -------- Google's framework for writing C++ tests on a variety of platforms (Linux, Mac OS X, Windows, Windows CE, Symbian, etc). Based on the xUnit architecture. Supports automatic test discovery, a rich set of assertions, user-defined assertions, death tests, fatal and non-fatal failures, various options for running the tests, and XML test report generation. Please see the project page above for more information as well as the mailing list for questions, discussions, and development. There is also an IRC channel on OFTC (irc.oftc.net) #gtest available. Please join us! Requirements for End Users -------------------------- Google Test is designed to have fairly minimal requirements to build and use with your projects, but there are some. Currently, we support Linux, Windows, Mac OS X, and Cygwin. We will also make our best effort to support other platforms (e.g. Solaris, AIX, and z/OS). However, since core members of the Google Test project have no access to these platforms, Google Test may have outstanding issues there. If you notice any problems on your platform, please notify googletestframework@googlegroups.com. Patches for fixing them are even more welcome! ### Linux Requirements ### These are the base requirements to build and use Google Test from a source package (as described below): * GNU-compatible Make or gmake * POSIX-standard shell * POSIX(-2) Regular Expressions (regex.h) * A C++98-standard-compliant compiler ### Windows Requirements ### * Microsoft Visual C++ 7.1 or newer ### Cygwin Requirements ### * Cygwin 1.5.25-14 or newer ### Mac OS X Requirements ### * Mac OS X 10.4 Tiger or newer * Developer Tools Installed Also, you'll need CMake 2.6.4 or higher if you want to build the samples using the provided CMake script, regardless of the platform. Requirements for Contributors ----------------------------- We welcome patches. If you plan to contribute a patch, you need to build Google Test and its own tests from an SVN checkout (described below), which has further requirements: * Python version 2.3 or newer (for running some of the tests and re-generating certain source files from templates) * CMake 2.6.4 or newer Getting the Source ------------------ There are two primary ways of getting Google Test's source code: you can download a stable source release in your preferred archive format, or directly check out the source from our Subversion (SVN) repositary. The SVN checkout requires a few extra steps and some extra software packages on your system, but lets you track the latest development and make patches much more easily, so we highly encourage it. ### Source Package ### Google Test is released in versioned source packages which can be downloaded from the download page [1]. Several different archive formats are provided, but the only difference is the tools used to manipulate them, and the size of the resulting file. Download whichever you are most comfortable with. [1] http://code.google.com/p/googletest/downloads/list Once the package is downloaded, expand it using whichever tools you prefer for that type. This will result in a new directory with the name "gtest-X.Y.Z" which contains all of the source code. Here are some examples on Linux: tar -xvzf gtest-X.Y.Z.tar.gz tar -xvjf gtest-X.Y.Z.tar.bz2 unzip gtest-X.Y.Z.zip ### SVN Checkout ### To check out the main branch (also known as the "trunk") of Google Test, run the following Subversion command: svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn Setting up the Build -------------------- To build Google Test and your tests that use it, you need to tell your build system where to find its headers and source files. The exact way to do it depends on which build system you use, and is usually straightforward. ### Generic Build Instructions ### Suppose you put Google Test in directory ${GTEST_DIR}. To build it, create a library build target (or a project as called by Visual Studio and Xcode) to compile ${GTEST_DIR}/src/gtest-all.cc with ${GTEST_DIR}/include in the system header search path and ${GTEST_DIR} in the normal header search path. Assuming a Linux-like system and gcc, something like the following will do: g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \ -pthread -c ${GTEST_DIR}/src/gtest-all.cc ar -rv libgtest.a gtest-all.o (We need -pthread as Google Test uses threads.) Next, you should compile your test source file with ${GTEST_DIR}/include in the system header search path, and link it with gtest and any other necessary libraries: g++ -isystem ${GTEST_DIR}/include -pthread path/to/your_test.cc libgtest.a \ -o your_test As an example, the make/ directory contains a Makefile that you can use to build Google Test on systems where GNU make is available (e.g. Linux, Mac OS X, and Cygwin). It doesn't try to build Google Test's own tests. Instead, it just builds the Google Test library and a sample test. You can use it as a starting point for your own build script. If the default settings are correct for your environment, the following commands should succeed: cd ${GTEST_DIR}/make make ./sample1_unittest If you see errors, try to tweak the contents of make/Makefile to make them go away. There are instructions in make/Makefile on how to do it. ### Using CMake ### Google Test comes with a CMake build script (CMakeLists.txt) that can be used on a wide range of platforms ("C" stands for cross-platofrm.). If you don't have CMake installed already, you can download it for free from http://www.cmake.org/. CMake works by generating native makefiles or build projects that can be used in the compiler environment of your choice. The typical workflow starts with: mkdir mybuild # Create a directory to hold the build output. cd mybuild cmake ${GTEST_DIR} # Generate native build scripts. If you want to build Google Test's samples, you should replace the last command with cmake -Dgtest_build_samples=ON ${GTEST_DIR} If you are on a *nix system, you should now see a Makefile in the current directory. Just type 'make' to build gtest. If you use Windows and have Vistual Studio installed, a gtest.sln file and several .vcproj files will be created. You can then build them using Visual Studio. On Mac OS X with Xcode installed, a .xcodeproj file will be generated. ### Legacy Build Scripts ### Before settling on CMake, we have been providing hand-maintained build projects/scripts for Visual Studio, Xcode, and Autotools. While we continue to provide them for convenience, they are not actively maintained any more. We highly recommend that you follow the instructions in the previous two sections to integrate Google Test with your existing build system. If you still need to use the legacy build scripts, here's how: The msvc\ folder contains two solutions with Visual C++ projects. Open the gtest.sln or gtest-md.sln file using Visual Studio, and you are ready to build Google Test the same way you build any Visual Studio project. Files that have names ending with -md use DLL versions of Microsoft runtime libraries (the /MD or the /MDd compiler option). Files without that suffix use static versions of the runtime libraries (the /MT or the /MTd option). Please note that one must use the same option to compile both gtest and the test code. If you use Visual Studio 2005 or above, we recommend the -md version as /MD is the default for new projects in these versions of Visual Studio. On Mac OS X, open the gtest.xcodeproj in the xcode/ folder using Xcode. Build the "gtest" target. The universal binary framework will end up in your selected build directory (selected in the Xcode "Preferences..." -> "Building" pane and defaults to xcode/build). Alternatively, at the command line, enter: xcodebuild This will build the "Release" configuration of gtest.framework in your default build location. See the "xcodebuild" man page for more information about building different configurations and building in different locations. If you wish to use the Google Test Xcode project with Xcode 4.x and above, you need to either: * update the SDK configuration options in xcode/Config/General.xconfig. Comment options SDKROOT, MACOS_DEPLOYMENT_TARGET, and GCC_VERSION. If you choose this route you lose the ability to target earlier versions of MacOS X. * Install an SDK for an earlier version. This doesn't appear to be supported by Apple, but has been reported to work (http://stackoverflow.com/questions/5378518). Tweaking Google Test -------------------- Google Test can be used in diverse environments. The default configuration may not work (or may not work well) out of the box in some environments. However, you can easily tweak Google Test by defining control macros on the compiler command line. Generally, these macros are named like GTEST_XYZ and you define them to either 1 or 0 to enable or disable a certain feature. We list the most frequently used macros below. For a complete list, see file include/gtest/internal/gtest-port.h. ### Choosing a TR1 Tuple Library ### Some Google Test features require the C++ Technical Report 1 (TR1) tuple library, which is not yet available with all compilers. The good news is that Google Test implements a subset of TR1 tuple that's enough for its own need, and will automatically use this when the compiler doesn't provide TR1 tuple. Usually you don't need to care about which tuple library Google Test uses. However, if your project already uses TR1 tuple, you need to tell Google Test to use the same TR1 tuple library the rest of your project uses, or the two tuple implementations will clash. To do that, add -DGTEST_USE_OWN_TR1_TUPLE=0 to the compiler flags while compiling Google Test and your tests. If you want to force Google Test to use its own tuple library, just add -DGTEST_USE_OWN_TR1_TUPLE=1 to the compiler flags instead. If you don't want Google Test to use tuple at all, add -DGTEST_HAS_TR1_TUPLE=0 and all features using tuple will be disabled. ### Multi-threaded Tests ### Google Test is thread-safe where the pthread library is available. After #include "gtest/gtest.h", you can check the GTEST_IS_THREADSAFE macro to see whether this is the case (yes if the macro is #defined to 1, no if it's undefined.). If Google Test doesn't correctly detect whether pthread is available in your environment, you can force it with -DGTEST_HAS_PTHREAD=1 or -DGTEST_HAS_PTHREAD=0 When Google Test uses pthread, you may need to add flags to your compiler and/or linker to select the pthread library, or you'll get link errors. If you use the CMake script or the deprecated Autotools script, this is taken care of for you. If you use your own build script, you'll need to read your compiler and linker's manual to figure out what flags to add. ### As a Shared Library (DLL) ### Google Test is compact, so most users can build and link it as a static library for the simplicity. You can choose to use Google Test as a shared library (known as a DLL on Windows) if you prefer. To compile *gtest* as a shared library, add -DGTEST_CREATE_SHARED_LIBRARY=1 to the compiler flags. You'll also need to tell the linker to produce a shared library instead - consult your linker's manual for how to do it. To compile your *tests* that use the gtest shared library, add -DGTEST_LINKED_AS_SHARED_LIBRARY=1 to the compiler flags. Note: while the above steps aren't technically necessary today when using some compilers (e.g. GCC), they may become necessary in the future, if we decide to improve the speed of loading the library (see http://gcc.gnu.org/wiki/Visibility for details). Therefore you are recommended to always add the above flags when using Google Test as a shared library. Otherwise a future release of Google Test may break your build script. ### Avoiding Macro Name Clashes ### In C++, macros don't obey namespaces. Therefore two libraries that both define a macro of the same name will clash if you #include both definitions. In case a Google Test macro clashes with another library, you can force Google Test to rename its macro to avoid the conflict. Specifically, if both Google Test and some other code define macro FOO, you can add -DGTEST_DONT_DEFINE_FOO=1 to the compiler flags to tell Google Test to change the macro's name from FOO to GTEST_FOO. Currently FOO can be FAIL, SUCCEED, or TEST. For example, with -DGTEST_DONT_DEFINE_TEST=1, you'll need to write GTEST_TEST(SomeTest, DoesThis) { ... } instead of TEST(SomeTest, DoesThis) { ... } in order to define a test. Upgrating from an Earlier Version --------------------------------- We strive to keep Google Test releases backward compatible. Sometimes, though, we have to make some breaking changes for the users' long-term benefits. This section describes what you'll need to do if you are upgrading from an earlier version of Google Test. ### Upgrading from 1.3.0 or Earlier ### You may need to explicitly enable or disable Google Test's own TR1 tuple library. See the instructions in section "Choosing a TR1 Tuple Library". ### Upgrading from 1.4.0 or Earlier ### The Autotools build script (configure + make) is no longer officially supportted. You are encouraged to migrate to your own build system or use CMake. If you still need to use Autotools, you can find instructions in the README file from Google Test 1.4.0. On platforms where the pthread library is available, Google Test uses it in order to be thread-safe. See the "Multi-threaded Tests" section for what this means to your build script. If you use Microsoft Visual C++ 7.1 with exceptions disabled, Google Test will no longer compile. This should affect very few people, as a large portion of STL (including ) doesn't compile in this mode anyway. We decided to stop supporting it in order to greatly simplify Google Test's implementation. Developing Google Test ---------------------- This section discusses how to make your own changes to Google Test. ### Testing Google Test Itself ### To make sure your changes work as intended and don't break existing functionality, you'll want to compile and run Google Test's own tests. For that you can use CMake: mkdir mybuild cd mybuild cmake -Dgtest_build_tests=ON ${GTEST_DIR} Make sure you have Python installed, as some of Google Test's tests are written in Python. If the cmake command complains about not being able to find Python ("Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE)"), try telling it explicitly where your Python executable can be found: cmake -DPYTHON_EXECUTABLE=path/to/python -Dgtest_build_tests=ON ${GTEST_DIR} Next, you can build Google Test and all of its own tests. On *nix, this is usually done by 'make'. To run the tests, do make test All tests should pass. ### Regenerating Source Files ### Some of Google Test's source files are generated from templates (not in the C++ sense) using a script. A template file is named FOO.pump, where FOO is the name of the file it will generate. For example, the file include/gtest/internal/gtest-type-util.h.pump is used to generate gtest-type-util.h in the same directory. Normally you don't need to worry about regenerating the source files, unless you need to modify them. In that case, you should modify the corresponding .pump files instead and run the pump.py Python script to regenerate them. You can find pump.py in the scripts/ directory. Read the Pump manual [2] for how to use it. [2] http://code.google.com/p/googletest/wiki/PumpManual ### Contributing a Patch ### We welcome patches. Please read the Google Test developer's guide [3] for how you can contribute. In particular, make sure you have signed the Contributor License Agreement, or we won't be able to accept the patch. [3] http://code.google.com/p/googletest/wiki/GoogleTestDevGuide Happy testing! dlt-daemon-2.18.6/gtest-1.7.0/aclocal.m4000066400000000000000000001253711377520261000172770ustar00rootroot00000000000000# generated automatically by aclocal 1.11.3 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, [m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.3], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.3])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------------- # Adds support for distributing Python modules and packages. To # install modules, copy them to $(pythondir), using the python_PYTHON # automake variable. To install a package with the same name as the # automake package, install to $(pkgpythondir), or use the # pkgpython_PYTHON automake variable. # # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as # locations to install python extension modules (shared libraries). # Another macro is required to find the appropriate flags to compile # extension modules. # # If your package is configured with a different prefix to python, # users will have to add the install directory to the PYTHONPATH # environment variable, or create a .pth file (see the python # documentation for details). # # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will # cause an error if the version of python installed on the system # doesn't meet the requirement. MINIMUM-VERSION should consist of # numbers and dots only. AC_DEFUN([AM_PATH_PYTHON], [ dnl Find a Python interpreter. Python versions prior to 2.0 are not dnl supported. (2.0 was released on October 16, 2000). m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python python2 python3 python3.2 python3.1 python3.0 python2.7 dnl python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0]) AC_ARG_VAR([PYTHON], [the Python interpreter]) m4_if([$1],[],[ dnl No version check is needed. # Find any Python interpreter. if test -z "$PYTHON"; then AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) fi am_display_PYTHON=python ], [ dnl A version check is needed. if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. AC_MSG_CHECKING([whether $PYTHON version >= $1]) AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [AC_MSG_RESULT(yes)], [AC_MSG_ERROR(too old)]) am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. AC_CACHE_CHECK([for a Python interpreter with version >= $1], [am_cv_pathless_PYTHON],[ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do test "$am_cv_pathless_PYTHON" = none && break AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) done]) # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) fi am_display_PYTHON=$am_cv_pathless_PYTHON fi ]) if test "$PYTHON" = :; then dnl Run any user-specified action, or abort. m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) else dnl Query Python for its version number. Getting [:3] seems to be dnl the best way to do this; it's what "site.py" does in the standard dnl library. AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) dnl Use the values of $prefix and $exec_prefix for the corresponding dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made dnl distinct variables so they can be overridden if need be. However, dnl general consensus is that you shouldn't need this ability. AC_SUBST([PYTHON_PREFIX], ['${prefix}']) AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) dnl At times (like when building shared libraries) you may want dnl to know which OS platform Python thinks this is. AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) dnl Set up 4 directories: dnl pythondir -- where to install python scripts. This is the dnl site-packages directory, not the python standard library dnl directory like in previous automake betas. This behavior dnl is more consistent with lispdir.m4 for example. dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON script directory], [am_cv_python_pythondir], [if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) dnl pkgpythondir -- $PACKAGE directory under pythondir. Was dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is dnl more consistent with the rest of automake. AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) dnl pyexecdir -- directory for installing python extension modules dnl (shared libraries) dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], [am_cv_python_pyexecdir], [if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) dnl Run any user-specified action. $2 fi ]) # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------------------- # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. # Run ACTION-IF-FALSE otherwise. # This test uses sys.hexversion instead of the string equivalent (first # word of sys.version), in order to cope with versions such as 2.2c1. # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] sys.exit(sys.hexversion < minverhex)" AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) dlt-daemon-2.18.6/gtest-1.7.0/build-aux/000077500000000000000000000000001377520261000173205ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/build-aux/config.guess000077500000000000000000001274321377520261000216510ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: dlt-daemon-2.18.6/gtest-1.7.0/build-aux/config.h.in000066400000000000000000000034611377520261000213470ustar00rootroot00000000000000/* build-aux/config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define if you have POSIX threads libraries and header files. */ #undef HAVE_PTHREAD /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION dlt-daemon-2.18.6/gtest-1.7.0/build-aux/config.sub000077500000000000000000001051761377520261000213150ustar00rootroot00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: dlt-daemon-2.18.6/gtest-1.7.0/build-aux/depcomp000077500000000000000000000475561377520261000207160ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2011-12-04.11; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/ \1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/ / G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: dlt-daemon-2.18.6/gtest-1.7.0/build-aux/install-sh000077500000000000000000000332561377520261000213350ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # 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 # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: dlt-daemon-2.18.6/gtest-1.7.0/build-aux/ltmain.sh000066400000000000000000010520401377520261000211420ustar00rootroot00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1ubuntu1" TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 dlt-daemon-2.18.6/gtest-1.7.0/build-aux/missing000077500000000000000000000241521377520261000207230ustar00rootroot00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: dlt-daemon-2.18.6/gtest-1.7.0/build-aux/stamp-h1000066400000000000000000000000411377520261000206700ustar00rootroot00000000000000timestamp for build-aux/config.h dlt-daemon-2.18.6/gtest-1.7.0/cmake/000077500000000000000000000000001377520261000165065ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/cmake/internal_utils.cmake000066400000000000000000000225141377520261000225500ustar00rootroot00000000000000# Defines functions and macros useful for building Google Test and # Google Mock. # # Note: # # - This file will be run twice when building Google Mock (once via # Google Test's CMakeLists.txt, and once via Google Mock's). # Therefore it shouldn't have any side effects other than defining # the functions and macros. # # - The functions/macros defined in this file may depend on Google # Test and Google Mock's option() definitions, and thus must be # called *after* the options have been defined. # Tweaks CMake's default compiler/linker settings to suit Google Test's needs. # # This must be a macro(), as inside a function string() can only # update variables in the function scope. macro(fix_default_compiler_settings_) if (MSVC) # For MSVC, CMake sets certain flags to defaults we want to override. # This replacement code is taken from sample in the CMake Wiki at # http://www.cmake.org/Wiki/CMake_FAQ#Dynamic_Replace. foreach (flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) if (NOT BUILD_SHARED_LIBS AND NOT gtest_force_shared_crt) # When Google Test is built as a shared library, it should also use # shared runtime libraries. Otherwise, it may end up with multiple # copies of runtime library data in different modules, resulting in # hard-to-find crashes. When it is built as a static library, it is # preferable to use CRT as static libraries, as we don't have to rely # on CRT DLLs being available. CMake always defaults to using shared # CRT libraries, so we override that default here. string(REPLACE "/MD" "-MT" ${flag_var} "${${flag_var}}") endif() # We prefer more strict warning checking for building Google Test. # Replaces /W3 with /W4 in defaults. string(REPLACE "/W3" "-W4" ${flag_var} "${${flag_var}}") endforeach() endif() endmacro() # Defines the compiler/linker flags used to build Google Test and # Google Mock. You can tweak these definitions to suit your need. A # variable's value is empty before it's explicitly assigned to. macro(config_compiler_and_linker) if (NOT gtest_disable_pthreads) # Defines CMAKE_USE_PTHREADS_INIT and CMAKE_THREAD_LIBS_INIT. find_package(Threads) endif() fix_default_compiler_settings_() if (MSVC) # Newlines inside flags variables break CMake's NMake generator. # TODO(vladl@google.com): Add -RTCs and -RTCu to debug builds. set(cxx_base_flags "-GS -W4 -WX -wd4127 -wd4251 -wd4275 -nologo -J -Zi") if (MSVC_VERSION LESS 1400) # Suppress spurious warnings MSVC 7.1 sometimes issues. # Forcing value to bool. set(cxx_base_flags "${cxx_base_flags} -wd4800") # Copy constructor and assignment operator could not be generated. set(cxx_base_flags "${cxx_base_flags} -wd4511 -wd4512") # Compatibility warnings not applicable to Google Test. # Resolved overload was found by argument-dependent lookup. set(cxx_base_flags "${cxx_base_flags} -wd4675") endif() set(cxx_base_flags "${cxx_base_flags} -D_UNICODE -DUNICODE -DWIN32 -D_WIN32") set(cxx_base_flags "${cxx_base_flags} -DSTRICT -DWIN32_LEAN_AND_MEAN") set(cxx_exception_flags "-EHsc -D_HAS_EXCEPTIONS=1") set(cxx_no_exception_flags "-D_HAS_EXCEPTIONS=0") set(cxx_no_rtti_flags "-GR-") elseif (CMAKE_COMPILER_IS_GNUCXX) set(cxx_base_flags "-Wall -Wshadow") set(cxx_exception_flags "-fexceptions") set(cxx_no_exception_flags "-fno-exceptions") # Until version 4.3.2, GCC doesn't define a macro to indicate # whether RTTI is enabled. Therefore we define GTEST_HAS_RTTI # explicitly. set(cxx_no_rtti_flags "-fno-rtti -DGTEST_HAS_RTTI=0") set(cxx_strict_flags "-Wextra -Wno-unused-parameter -Wno-missing-field-initializers") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") set(cxx_exception_flags "-features=except") # Sun Pro doesn't provide macros to indicate whether exceptions and # RTTI are enabled, so we define GTEST_HAS_* explicitly. set(cxx_no_exception_flags "-features=no%except -DGTEST_HAS_EXCEPTIONS=0") set(cxx_no_rtti_flags "-features=no%rtti -DGTEST_HAS_RTTI=0") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "VisualAge" OR CMAKE_CXX_COMPILER_ID STREQUAL "XL") # CMake 2.8 changes Visual Age's compiler ID to "XL". set(cxx_exception_flags "-qeh") set(cxx_no_exception_flags "-qnoeh") # Until version 9.0, Visual Age doesn't define a macro to indicate # whether RTTI is enabled. Therefore we define GTEST_HAS_RTTI # explicitly. set(cxx_no_rtti_flags "-qnortti -DGTEST_HAS_RTTI=0") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "HP") set(cxx_base_flags "-AA -mt") set(cxx_exception_flags "-DGTEST_HAS_EXCEPTIONS=1") set(cxx_no_exception_flags "+noeh -DGTEST_HAS_EXCEPTIONS=0") # RTTI can not be disabled in HP aCC compiler. set(cxx_no_rtti_flags "") endif() if (CMAKE_USE_PTHREADS_INIT) # The pthreads library is available and allowed. set(cxx_base_flags "${cxx_base_flags} -DGTEST_HAS_PTHREAD=1") else() set(cxx_base_flags "${cxx_base_flags} -DGTEST_HAS_PTHREAD=0") endif() # For building gtest's own tests and samples. set(cxx_exception "${CMAKE_CXX_FLAGS} ${cxx_base_flags} ${cxx_exception_flags}") set(cxx_no_exception "${CMAKE_CXX_FLAGS} ${cxx_base_flags} ${cxx_no_exception_flags}") set(cxx_default "${cxx_exception}") set(cxx_no_rtti "${cxx_default} ${cxx_no_rtti_flags}") set(cxx_use_own_tuple "${cxx_default} -DGTEST_USE_OWN_TR1_TUPLE=1") # For building the gtest libraries. set(cxx_strict "${cxx_default} ${cxx_strict_flags}") endmacro() # Defines the gtest & gtest_main libraries. User tests should link # with one of them. function(cxx_library_with_type name type cxx_flags) # type can be either STATIC or SHARED to denote a static or shared library. # ARGN refers to additional arguments after 'cxx_flags'. add_library(${name} ${type} ${ARGN}) set_target_properties(${name} PROPERTIES COMPILE_FLAGS "${cxx_flags}") if (BUILD_SHARED_LIBS OR type STREQUAL "SHARED") set_target_properties(${name} PROPERTIES COMPILE_DEFINITIONS "GTEST_CREATE_SHARED_LIBRARY=1") endif() if (CMAKE_USE_PTHREADS_INIT) target_link_libraries(${name} ${CMAKE_THREAD_LIBS_INIT}) endif() endfunction() ######################################################################## # # Helper functions for creating build targets. function(cxx_shared_library name cxx_flags) cxx_library_with_type(${name} SHARED "${cxx_flags}" ${ARGN}) endfunction() function(cxx_library name cxx_flags) cxx_library_with_type(${name} "" "${cxx_flags}" ${ARGN}) endfunction() # cxx_executable_with_flags(name cxx_flags libs srcs...) # # creates a named C++ executable that depends on the given libraries and # is built from the given source files with the given compiler flags. function(cxx_executable_with_flags name cxx_flags libs) add_executable(${name} ${ARGN}) if (cxx_flags) set_target_properties(${name} PROPERTIES COMPILE_FLAGS "${cxx_flags}") endif() if (BUILD_SHARED_LIBS) set_target_properties(${name} PROPERTIES COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") endif() # To support mixing linking in static and dynamic libraries, link each # library in with an extra call to target_link_libraries. foreach (lib "${libs}") target_link_libraries(${name} ${lib}) endforeach() endfunction() # cxx_executable(name dir lib srcs...) # # creates a named target that depends on the given libs and is built # from the given source files. dir/name.cc is implicitly included in # the source file list. function(cxx_executable name dir libs) cxx_executable_with_flags( ${name} "${cxx_default}" "${libs}" "${dir}/${name}.cc" ${ARGN}) endfunction() # Sets PYTHONINTERP_FOUND and PYTHON_EXECUTABLE. find_package(PythonInterp) # cxx_test_with_flags(name cxx_flags libs srcs...) # # creates a named C++ test that depends on the given libs and is built # from the given source files with the given compiler flags. function(cxx_test_with_flags name cxx_flags libs) cxx_executable_with_flags(${name} "${cxx_flags}" "${libs}" ${ARGN}) add_test(${name} ${name}) endfunction() # cxx_test(name libs srcs...) # # creates a named test target that depends on the given libs and is # built from the given source files. Unlike cxx_test_with_flags, # test/name.cc is already implicitly included in the source file list. function(cxx_test name libs) cxx_test_with_flags("${name}" "${cxx_default}" "${libs}" "test/${name}.cc" ${ARGN}) endfunction() # py_test(name) # # creates a Python test with the given name whose main module is in # test/name.py. It does nothing if Python is not installed. function(py_test name) # We are not supporting Python tests on Linux yet as they consider # all Linux environments to be google3 and try to use google3 features. if (PYTHONINTERP_FOUND) # ${CMAKE_BINARY_DIR} is known at configuration time, so we can # directly bind it from cmake. ${CTEST_CONFIGURATION_TYPE} is known # only at ctest runtime (by calling ctest -c ), so # we have to escape $ to delay variable substitution here. add_test(${name} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py --build_dir=${CMAKE_CURRENT_BINARY_DIR}/\${CTEST_CONFIGURATION_TYPE}) endif() endfunction() dlt-daemon-2.18.6/gtest-1.7.0/codegear/000077500000000000000000000000001377520261000171775ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/codegear/gtest.cbproj000066400000000000000000000243661377520261000215410ustar00rootroot00000000000000īģŋ {bca37a72-5b07-46cf-b44e-89f8e06451a2} Release true true true Base true true Base true lib JPHNE NO_STRICT true true CppStaticLibrary true rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi false $(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;.. rtl.lib;vcl.lib 32 $(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk false false true _DEBUG;$(Defines) true false true None DEBUG true Debug true true true $(BDS)\lib\debug;$(ILINK_LibraryPath) Full true NDEBUG;$(Defines) Release $(BDS)\lib\release;$(ILINK_LibraryPath) None CPlusPlusBuilder.Personality CppStaticLibrary FalseFalse1000FalseFalseFalseFalseFalse103312521.0.0.01.0.0.0FalseFalseFalseTrueFalse CodeGear C++Builder Office 2000 Servers Package CodeGear C++Builder Office XP Servers Package FalseTrueTrue3$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include1$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk1NO_STRICT13216 3 4 5 6 7 8 0 1 2 9 10 11 12 14 13 15 16 17 18 Cfg_1 Cfg_2 dlt-daemon-2.18.6/gtest-1.7.0/codegear/gtest.groupproj000066400000000000000000000037301377520261000223010ustar00rootroot00000000000000īģŋ {c1d923e0-6cba-4332-9b6f-3420acbf5091} Default.Personality dlt-daemon-2.18.6/gtest-1.7.0/codegear/gtest_all.cc000066400000000000000000000035111377520261000214640ustar00rootroot00000000000000// Copyright 2009, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: Josh Kelley (joshkel@gmail.com) // // Google C++ Testing Framework (Google Test) // // C++Builder's IDE cannot build a static library from files with hyphens // in their name. See http://qc.codegear.com/wc/qcmain.aspx?d=70977 . // This file serves as a workaround. #include "src/gtest-all.cc" dlt-daemon-2.18.6/gtest-1.7.0/codegear/gtest_link.cc000066400000000000000000000037111377520261000216530ustar00rootroot00000000000000// Copyright 2009, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: Josh Kelley (joshkel@gmail.com) // // Google C++ Testing Framework (Google Test) // // Links gtest.lib and gtest_main.lib into the current project in C++Builder. // This means that these libraries can't be renamed, but it's the only way to // ensure that Debug versus Release test builds are linked against the // appropriate Debug or Release build of the libraries. #pragma link "gtest.lib" #pragma link "gtest_main.lib" dlt-daemon-2.18.6/gtest-1.7.0/codegear/gtest_main.cbproj000066400000000000000000000206041377520261000225340ustar00rootroot00000000000000īģŋ {bca37a72-5b07-46cf-b44e-89f8e06451a2} Release true true true Base true true Base true lib JPHNE NO_STRICT true true CppStaticLibrary true rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi false $(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;.. rtl.lib;vcl.lib 32 $(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk false false true _DEBUG;$(Defines) true false true None DEBUG true Debug true true true $(BDS)\lib\debug;$(ILINK_LibraryPath) Full true NDEBUG;$(Defines) Release $(BDS)\lib\release;$(ILINK_LibraryPath) None CPlusPlusBuilder.Personality CppStaticLibrary FalseFalse1000FalseFalseFalseFalseFalse103312521.0.0.01.0.0.0FalseFalseFalseTrueFalse CodeGear C++Builder Office 2000 Servers Package CodeGear C++Builder Office XP Servers Package FalseTrueTrue3$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include1$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk1NO_STRICT13216 0 Cfg_1 Cfg_2 dlt-daemon-2.18.6/gtest-1.7.0/codegear/gtest_unittest.cbproj000066400000000000000000000207631377520261000234750ustar00rootroot00000000000000īģŋ {eea63393-5ac5-4b9c-8909-d75fef2daa41} Release true true true Base true true Base exe true NO_STRICT JPHNE true ..\test true CppConsoleApplication true true rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi false $(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;.. $(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test true false false true _DEBUG;$(Defines) true false true None DEBUG true Debug true true true $(BDS)\lib\debug;$(ILINK_LibraryPath) Full true NDEBUG;$(Defines) Release $(BDS)\lib\release;$(ILINK_LibraryPath) None CPlusPlusBuilder.Personality CppConsoleApplication FalseFalse1000FalseFalseFalseFalseFalse103312521.0.0.01.0.0.0FalseFalseFalseTrueFalse CodeGear C++Builder Office 2000 Servers Package CodeGear C++Builder Office XP Servers Package FalseTrueTrue3$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;..$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include1$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;$(OUTPUTDIR);..\test2NO_STRICTSTRICT 0 1 Cfg_1 Cfg_2 dlt-daemon-2.18.6/gtest-1.7.0/config.log000066400000000000000000001050201377520261000173740ustar00rootroot00000000000000This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Google C++ Testing Framework configure 1.7.0, which was generated by GNU Autoconf 2.68. Invocation command line was $ ./configure ## --------- ## ## Platform. ## ## --------- ## hostname = localhost.localdomain uname -m = i686 uname -r = 3.19.3-200.fc21.i686 uname -s = Linux uname -v = #1 SMP Thu Mar 26 22:12:19 UTC 2015 /usr/bin/uname -p = i686 /bin/uname -X = unknown /bin/arch = i686 /usr/bin/arch -k = unknown /usr/convex/getsysinfo = unknown /usr/bin/hostinfo = unknown /bin/machine = unknown /usr/bin/oslevel = unknown /bin/universe = unknown PATH: /usr/local/bin PATH: /usr/local/sbin PATH: /usr/bin PATH: /usr/sbin PATH: /bin PATH: /sbin PATH: /home/user/.local/bin PATH: /home/user/bin ## ----------- ## ## Core tests. ## ## ----------- ## configure:2293: checking for a BSD-compatible install configure:2361: result: /usr/bin/install -c configure:2372: checking whether build environment is sane configure:2422: result: yes configure:2563: checking for a thread-safe mkdir -p configure:2602: result: /usr/bin/mkdir -p configure:2615: checking for gawk configure:2631: found /usr/bin/gawk configure:2642: result: gawk configure:2653: checking whether make sets $(MAKE) configure:2675: result: yes configure:2805: checking for gcc configure:2821: found /usr/bin/gcc configure:2832: result: gcc configure:3061: checking for C compiler version configure:3070: gcc --version >&5 gcc (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6) Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. configure:3081: $? = 0 configure:3070: gcc -v >&5 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/i686-redhat-linux/4.9.2/lto-wrapper Target: i686-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.9.2-20150212/obj-i686-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.9.2-20150212/obj-i686-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch=i686 --build=i686-redhat-linux Thread model: posix gcc version 4.9.2 20150212 (Red Hat 4.9.2-6) (GCC) configure:3081: $? = 0 configure:3070: gcc -V >&5 gcc: error: unrecognized command line option '-V' gcc: fatal error: no input files compilation terminated. configure:3081: $? = 4 configure:3070: gcc -qversion >&5 gcc: error: unrecognized command line option '-qversion' gcc: fatal error: no input files compilation terminated. configure:3081: $? = 4 configure:3101: checking whether the C compiler works configure:3123: gcc conftest.c >&5 configure:3127: $? = 0 configure:3175: result: yes configure:3178: checking for C compiler default output file name configure:3180: result: a.out configure:3186: checking for suffix of executables configure:3193: gcc -o conftest conftest.c >&5 configure:3197: $? = 0 configure:3219: result: configure:3241: checking whether we are cross compiling configure:3249: gcc -o conftest conftest.c >&5 configure:3253: $? = 0 configure:3260: ./conftest configure:3264: $? = 0 configure:3279: result: no configure:3284: checking for suffix of object files configure:3306: gcc -c conftest.c >&5 configure:3310: $? = 0 configure:3331: result: o configure:3335: checking whether we are using the GNU C compiler configure:3354: gcc -c conftest.c >&5 configure:3354: $? = 0 configure:3363: result: yes configure:3372: checking whether gcc accepts -g configure:3392: gcc -c -g conftest.c >&5 configure:3392: $? = 0 configure:3433: result: yes configure:3450: checking for gcc option to accept ISO C89 configure:3514: gcc -c -g -O2 conftest.c >&5 configure:3514: $? = 0 configure:3527: result: none needed configure:3558: checking for style of include used by make configure:3586: result: GNU configure:3612: checking dependency style of gcc configure:3723: result: gcc3 configure:3796: checking for g++ configure:3812: found /usr/bin/g++ configure:3823: result: g++ configure:3850: checking for C++ compiler version configure:3859: g++ --version >&5 g++ (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6) Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. configure:3870: $? = 0 configure:3859: g++ -v >&5 Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/libexec/gcc/i686-redhat-linux/4.9.2/lto-wrapper Target: i686-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.9.2-20150212/obj-i686-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.9.2-20150212/obj-i686-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch=i686 --build=i686-redhat-linux Thread model: posix gcc version 4.9.2 20150212 (Red Hat 4.9.2-6) (GCC) configure:3870: $? = 0 configure:3859: g++ -V >&5 g++: error: unrecognized command line option '-V' g++: fatal error: no input files compilation terminated. configure:3870: $? = 4 configure:3859: g++ -qversion >&5 g++: error: unrecognized command line option '-qversion' g++: fatal error: no input files compilation terminated. configure:3870: $? = 4 configure:3874: checking whether we are using the GNU C++ compiler configure:3893: g++ -c conftest.cpp >&5 configure:3893: $? = 0 configure:3902: result: yes configure:3911: checking whether g++ accepts -g configure:3931: g++ -c -g conftest.cpp >&5 configure:3931: $? = 0 configure:3972: result: yes configure:3997: checking dependency style of g++ configure:4108: result: gcc3 configure:4158: checking build system type configure:4172: result: i686-pc-linux-gnu configure:4192: checking host system type configure:4205: result: i686-pc-linux-gnu configure:4246: checking how to print strings configure:4273: result: printf configure:4294: checking for a sed that does not truncate output configure:4358: result: /usr/bin/sed configure:4376: checking for grep that handles long lines and -e configure:4434: result: /usr/bin/grep configure:4439: checking for egrep configure:4501: result: /usr/bin/grep -E configure:4506: checking for fgrep configure:4568: result: /usr/bin/grep -F configure:4603: checking for ld used by gcc configure:4670: result: /usr/bin/ld configure:4677: checking if the linker (/usr/bin/ld) is GNU ld configure:4692: result: yes configure:4704: checking for BSD- or MS-compatible name lister (nm) configure:4753: result: /usr/bin/nm -B configure:4883: checking the name lister (/usr/bin/nm -B) interface configure:4890: g++ -c -g -O2 conftest.cpp >&5 configure:4893: /usr/bin/nm -B "conftest.o" configure:4896: output 00000000 B some_variable configure:4903: result: BSD nm configure:4906: checking whether ln -s works configure:4910: result: yes configure:4918: checking the maximum length of command line arguments configure:5048: result: 1572864 configure:5065: checking whether the shell understands some XSI constructs configure:5075: result: yes configure:5079: checking whether the shell understands "+=" configure:5085: result: yes configure:5120: checking how to convert i686-pc-linux-gnu file names to i686-pc-linux-gnu format configure:5160: result: func_convert_file_noop configure:5167: checking how to convert i686-pc-linux-gnu file names to toolchain format configure:5187: result: func_convert_file_noop configure:5194: checking for /usr/bin/ld option to reload object files configure:5201: result: -r configure:5275: checking for objdump configure:5291: found /usr/bin/objdump configure:5302: result: objdump configure:5334: checking how to recognize dependent libraries configure:5536: result: pass_all configure:5621: checking for dlltool configure:5651: result: no configure:5681: checking how to associate runtime and link libraries configure:5708: result: printf %s\n configure:5769: checking for ar configure:5785: found /usr/bin/ar configure:5796: result: ar configure:5833: checking for archiver @FILE support configure:5850: g++ -c -g -O2 conftest.cpp >&5 configure:5850: $? = 0 configure:5853: ar cru libconftest.a @conftest.lst >&5 configure:5856: $? = 0 configure:5861: ar cru libconftest.a @conftest.lst >&5 ar: conftest.o: No such file or directory configure:5864: $? = 1 configure:5876: result: @ configure:5934: checking for strip configure:5950: found /usr/bin/strip configure:5961: result: strip configure:6033: checking for ranlib configure:6049: found /usr/bin/ranlib configure:6060: result: ranlib configure:6162: checking command to parse /usr/bin/nm -B output from gcc object configure:6282: g++ -c -g -O2 conftest.cpp >&5 configure:6285: $? = 0 configure:6289: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm configure:6292: $? = 0 configure:6358: g++ -o conftest -g -O2 conftest.cpp conftstm.o >&5 configure:6361: $? = 0 configure:6399: result: ok configure:6436: checking for sysroot configure:6466: result: no configure:6723: checking for mt configure:6753: result: no configure:6773: checking if : is a manifest tool configure:6779: : '-?' configure:6787: result: no configure:7429: checking how to run the C preprocessor configure:7460: gcc -E conftest.c configure:7460: $? = 0 configure:7474: gcc -E conftest.c conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:7474: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "Google C++ Testing Framework" | #define PACKAGE_TARNAME "gtest" | #define PACKAGE_VERSION "1.7.0" | #define PACKAGE_STRING "Google C++ Testing Framework 1.7.0" | #define PACKAGE_BUGREPORT "googletestframework@googlegroups.com" | #define PACKAGE_URL "" | #define PACKAGE "gtest" | #define VERSION "1.7.0" | /* end confdefs.h. */ | #include configure:7499: result: gcc -E configure:7519: gcc -E conftest.c configure:7519: $? = 0 configure:7533: gcc -E conftest.c conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:7533: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "Google C++ Testing Framework" | #define PACKAGE_TARNAME "gtest" | #define PACKAGE_VERSION "1.7.0" | #define PACKAGE_STRING "Google C++ Testing Framework 1.7.0" | #define PACKAGE_BUGREPORT "googletestframework@googlegroups.com" | #define PACKAGE_URL "" | #define PACKAGE "gtest" | #define VERSION "1.7.0" | /* end confdefs.h. */ | #include configure:7562: checking for ANSI C header files configure:7582: gcc -c -g -O2 conftest.c >&5 configure:7582: $? = 0 configure:7655: gcc -o conftest -g -O2 conftest.c >&5 configure:7655: $? = 0 configure:7655: ./conftest configure:7655: $? = 0 configure:7666: result: yes configure:7679: checking for sys/types.h configure:7679: gcc -c -g -O2 conftest.c >&5 configure:7679: $? = 0 configure:7679: result: yes configure:7679: checking for sys/stat.h configure:7679: gcc -c -g -O2 conftest.c >&5 configure:7679: $? = 0 configure:7679: result: yes configure:7679: checking for stdlib.h configure:7679: gcc -c -g -O2 conftest.c >&5 configure:7679: $? = 0 configure:7679: result: yes configure:7679: checking for string.h configure:7679: gcc -c -g -O2 conftest.c >&5 configure:7679: $? = 0 configure:7679: result: yes configure:7679: checking for memory.h configure:7679: gcc -c -g -O2 conftest.c >&5 configure:7679: $? = 0 configure:7679: result: yes configure:7679: checking for strings.h configure:7679: gcc -c -g -O2 conftest.c >&5 configure:7679: $? = 0 configure:7679: result: yes configure:7679: checking for inttypes.h configure:7679: gcc -c -g -O2 conftest.c >&5 configure:7679: $? = 0 configure:7679: result: yes configure:7679: checking for stdint.h configure:7679: gcc -c -g -O2 conftest.c >&5 configure:7679: $? = 0 configure:7679: result: yes configure:7679: checking for unistd.h configure:7679: gcc -c -g -O2 conftest.c >&5 configure:7679: $? = 0 configure:7679: result: yes configure:7693: checking for dlfcn.h configure:7693: gcc -c -g -O2 conftest.c >&5 configure:7693: $? = 0 configure:7693: result: yes configure:7909: checking for objdir configure:7924: result: .libs configure:8195: checking if gcc supports -fno-rtti -fno-exceptions configure:8213: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C configure:8217: $? = 0 configure:8230: result: no configure:8557: checking for gcc option to produce PIC configure:8564: result: -fPIC -DPIC configure:8572: checking if gcc PIC flag -fPIC -DPIC works configure:8590: gcc -c -g -O2 -fPIC -DPIC -DPIC conftest.c >&5 configure:8594: $? = 0 configure:8607: result: yes configure:8636: checking if gcc static flag -static works configure:8664: result: no configure:8679: checking if gcc supports -c -o file.o configure:8700: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 configure:8704: $? = 0 configure:8726: result: yes configure:8734: checking if gcc supports -c -o file.o configure:8781: result: yes configure:8814: checking whether the gcc linker (/usr/bin/ld) supports shared libraries configure:9971: result: yes configure:10008: checking whether -lc should be explicitly linked in configure:10016: gcc -c -g -O2 conftest.c >&5 configure:10019: $? = 0 configure:10034: gcc -shared -fPIC -DPIC conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /usr/bin/grep -lc \>/dev/null 2\>\&1 configure:10037: $? = 0 configure:10051: result: no configure:10211: checking dynamic linker characteristics configure:10722: gcc -o conftest -g -O2 -Wl,-rpath -Wl,/foo conftest.c >&5 configure:10722: $? = 0 configure:10956: result: GNU/Linux ld.so configure:11063: checking how to hardcode library paths into programs configure:11088: result: immediate configure:11628: checking whether stripping libraries is possible configure:11633: result: yes configure:11668: checking if libtool supports shared libraries configure:11670: result: yes configure:11673: checking whether to build shared libraries configure:11694: result: yes configure:11697: checking whether to build static libraries configure:11701: result: yes configure:11724: checking how to run the C++ preprocessor configure:11751: g++ -E conftest.cpp configure:11751: $? = 0 configure:11765: g++ -E conftest.cpp conftest.cpp:23:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:11765: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "Google C++ Testing Framework" | #define PACKAGE_TARNAME "gtest" | #define PACKAGE_VERSION "1.7.0" | #define PACKAGE_STRING "Google C++ Testing Framework 1.7.0" | #define PACKAGE_BUGREPORT "googletestframework@googlegroups.com" | #define PACKAGE_URL "" | #define PACKAGE "gtest" | #define VERSION "1.7.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | /* end confdefs.h. */ | #include configure:11790: result: g++ -E configure:11810: g++ -E conftest.cpp configure:11810: $? = 0 configure:11824: g++ -E conftest.cpp conftest.cpp:23:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:11824: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "Google C++ Testing Framework" | #define PACKAGE_TARNAME "gtest" | #define PACKAGE_VERSION "1.7.0" | #define PACKAGE_STRING "Google C++ Testing Framework 1.7.0" | #define PACKAGE_BUGREPORT "googletestframework@googlegroups.com" | #define PACKAGE_URL "" | #define PACKAGE "gtest" | #define VERSION "1.7.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | /* end confdefs.h. */ | #include configure:11993: checking for ld used by g++ configure:12060: result: /usr/bin/ld configure:12067: checking if the linker (/usr/bin/ld) is GNU ld configure:12082: result: yes configure:12137: checking whether the g++ linker (/usr/bin/ld) supports shared libraries configure:13142: result: yes configure:13178: g++ -c -g -O2 conftest.cpp >&5 configure:13181: $? = 0 configure:13701: checking for g++ option to produce PIC configure:13708: result: -fPIC -DPIC configure:13716: checking if g++ PIC flag -fPIC -DPIC works configure:13734: g++ -c -g -O2 -fPIC -DPIC -DPIC conftest.cpp >&5 configure:13738: $? = 0 configure:13751: result: yes configure:13774: checking if g++ static flag -static works configure:13802: result: no configure:13814: checking if g++ supports -c -o file.o configure:13835: g++ -c -g -O2 -o out/conftest2.o conftest.cpp >&5 configure:13839: $? = 0 configure:13861: result: yes configure:13866: checking if g++ supports -c -o file.o configure:13913: result: yes configure:13943: checking whether the g++ linker (/usr/bin/ld) supports shared libraries configure:13982: result: yes configure:14123: checking dynamic linker characteristics configure:14802: result: GNU/Linux ld.so configure:14855: checking how to hardcode library paths into programs configure:14880: result: immediate configure:14950: checking for python configure:14968: found /usr/bin/python configure:14981: result: /usr/bin/python configure:14999: /usr/bin/python -c import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '2.3'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex) configure:15002: $? = 0 configure:15195: checking for the pthreads library -lpthreads configure:15228: gcc -o conftest -g -O2 conftest.c -lpthreads >&5 /usr/bin/ld: cannot find -lpthreads collect2: error: ld returned 1 exit status configure:15228: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "Google C++ Testing Framework" | #define PACKAGE_TARNAME "gtest" | #define PACKAGE_VERSION "1.7.0" | #define PACKAGE_STRING "Google C++ Testing Framework 1.7.0" | #define PACKAGE_BUGREPORT "googletestframework@googlegroups.com" | #define PACKAGE_URL "" | #define PACKAGE "gtest" | #define VERSION "1.7.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | /* end confdefs.h. */ | #include | int | main () | { | pthread_t th; pthread_join(th, 0); | pthread_attr_init(0); pthread_cleanup_push(0, 0); | pthread_create(0,0,0,0); pthread_cleanup_pop(0); | ; | return 0; | } configure:15237: result: no configure:15140: checking whether pthreads work without any flags configure:15228: gcc -o conftest -g -O2 conftest.c >&5 /tmp/ccDg1tDT.o: In function `main': /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/conftest.c:27: undefined reference to `pthread_join' /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/conftest.c:28: undefined reference to `__pthread_register_cancel' /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/conftest.c:29: undefined reference to `pthread_create' /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/conftest.c:29: undefined reference to `__pthread_unregister_cancel' collect2: error: ld returned 1 exit status configure:15228: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "Google C++ Testing Framework" | #define PACKAGE_TARNAME "gtest" | #define PACKAGE_VERSION "1.7.0" | #define PACKAGE_STRING "Google C++ Testing Framework 1.7.0" | #define PACKAGE_BUGREPORT "googletestframework@googlegroups.com" | #define PACKAGE_URL "" | #define PACKAGE "gtest" | #define VERSION "1.7.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | /* end confdefs.h. */ | #include | int | main () | { | pthread_t th; pthread_join(th, 0); | pthread_attr_init(0); pthread_cleanup_push(0, 0); | pthread_create(0,0,0,0); pthread_cleanup_pop(0); | ; | return 0; | } configure:15237: result: no configure:15145: checking whether pthreads work with -Kthread configure:15228: gcc -o conftest -g -O2 -Kthread conftest.c >&5 gcc: error: unrecognized command line option '-Kthread' configure:15228: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "Google C++ Testing Framework" | #define PACKAGE_TARNAME "gtest" | #define PACKAGE_VERSION "1.7.0" | #define PACKAGE_STRING "Google C++ Testing Framework 1.7.0" | #define PACKAGE_BUGREPORT "googletestframework@googlegroups.com" | #define PACKAGE_URL "" | #define PACKAGE "gtest" | #define VERSION "1.7.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | /* end confdefs.h. */ | #include | int | main () | { | pthread_t th; pthread_join(th, 0); | pthread_attr_init(0); pthread_cleanup_push(0, 0); | pthread_create(0,0,0,0); pthread_cleanup_pop(0); | ; | return 0; | } configure:15237: result: no configure:15145: checking whether pthreads work with -kthread configure:15228: gcc -o conftest -g -O2 -kthread conftest.c >&5 gcc: error: unrecognized command line option '-kthread' configure:15228: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "Google C++ Testing Framework" | #define PACKAGE_TARNAME "gtest" | #define PACKAGE_VERSION "1.7.0" | #define PACKAGE_STRING "Google C++ Testing Framework 1.7.0" | #define PACKAGE_BUGREPORT "googletestframework@googlegroups.com" | #define PACKAGE_URL "" | #define PACKAGE "gtest" | #define VERSION "1.7.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | /* end confdefs.h. */ | #include | int | main () | { | pthread_t th; pthread_join(th, 0); | pthread_attr_init(0); pthread_cleanup_push(0, 0); | pthread_create(0,0,0,0); pthread_cleanup_pop(0); | ; | return 0; | } configure:15237: result: no configure:15195: checking for the pthreads library -llthread configure:15228: gcc -o conftest -g -O2 conftest.c -llthread >&5 /usr/bin/ld: cannot find -llthread collect2: error: ld returned 1 exit status configure:15228: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "Google C++ Testing Framework" | #define PACKAGE_TARNAME "gtest" | #define PACKAGE_VERSION "1.7.0" | #define PACKAGE_STRING "Google C++ Testing Framework 1.7.0" | #define PACKAGE_BUGREPORT "googletestframework@googlegroups.com" | #define PACKAGE_URL "" | #define PACKAGE "gtest" | #define VERSION "1.7.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | /* end confdefs.h. */ | #include | int | main () | { | pthread_t th; pthread_join(th, 0); | pthread_attr_init(0); pthread_cleanup_push(0, 0); | pthread_create(0,0,0,0); pthread_cleanup_pop(0); | ; | return 0; | } configure:15237: result: no configure:15145: checking whether pthreads work with -pthread configure:15228: gcc -o conftest -g -O2 -pthread conftest.c >&5 configure:15228: $? = 0 configure:15237: result: yes configure:15256: checking for joinable pthread attribute configure:15271: gcc -o conftest -g -O2 -pthread conftest.c >&5 configure:15271: $? = 0 configure:15277: result: PTHREAD_CREATE_JOINABLE configure:15287: checking if more special flags are required for pthreads configure:15294: result: no configure:15383: checking whether to check for GCC pthread/shared inconsistencies configure:15396: gcc -o conftest -shared -fPIC -Wl,-z,defs -g -O2 -pthread conftest.c >&5 configure:15396: $? = 0 configure:15408: result: yes configure:15414: checking whether -pthread is sufficient with -shared configure:15429: gcc -o conftest -shared -fPIC -Wl,-z,defs -g -O2 -pthread conftest.c >&5 configure:15429: $? = 0 configure:15436: result: yes configure:15718: creating ./config.status ## ---------------------- ## ## Running config.status. ## ## ---------------------- ## This file was extended by Google C++ Testing Framework config.status 1.7.0, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = CONFIG_HEADERS = CONFIG_LINKS = CONFIG_COMMANDS = $ ./config.status on localhost.localdomain config.status:1162: creating Makefile config.status:1162: creating scripts/gtest-config config.status:1162: creating build-aux/config.h config.status:1391: executing depfiles commands config.status:1391: executing libtool commands ## ---------------- ## ## Cache variables. ## ## ---------------- ## ac_cv_build=i686-pc-linux-gnu ac_cv_c_compiler_gnu=yes ac_cv_cxx_compiler_gnu=yes ac_cv_env_CCC_set= ac_cv_env_CCC_value= ac_cv_env_CC_set= ac_cv_env_CC_value= ac_cv_env_CFLAGS_set= ac_cv_env_CFLAGS_value= ac_cv_env_CPPFLAGS_set= ac_cv_env_CPPFLAGS_value= ac_cv_env_CPP_set= ac_cv_env_CPP_value= ac_cv_env_CXXCPP_set= ac_cv_env_CXXCPP_value= ac_cv_env_CXXFLAGS_set= ac_cv_env_CXXFLAGS_value= ac_cv_env_CXX_set= ac_cv_env_CXX_value= ac_cv_env_LDFLAGS_set= ac_cv_env_LDFLAGS_value= ac_cv_env_LIBS_set= ac_cv_env_LIBS_value= ac_cv_env_build_alias_set= ac_cv_env_build_alias_value= ac_cv_env_host_alias_set= ac_cv_env_host_alias_value= ac_cv_env_target_alias_set= ac_cv_env_target_alias_value= ac_cv_header_dlfcn_h=yes ac_cv_header_inttypes_h=yes ac_cv_header_memory_h=yes ac_cv_header_stdc=yes ac_cv_header_stdint_h=yes ac_cv_header_stdlib_h=yes ac_cv_header_string_h=yes ac_cv_header_strings_h=yes ac_cv_header_sys_stat_h=yes ac_cv_header_sys_types_h=yes ac_cv_header_unistd_h=yes ac_cv_host=i686-pc-linux-gnu ac_cv_objext=o ac_cv_path_EGREP='/usr/bin/grep -E' ac_cv_path_FGREP='/usr/bin/grep -F' ac_cv_path_GREP=/usr/bin/grep ac_cv_path_PYTHON=/usr/bin/python ac_cv_path_SED=/usr/bin/sed ac_cv_path_install='/usr/bin/install -c' ac_cv_path_mkdir=/usr/bin/mkdir ac_cv_prog_AWK=gawk ac_cv_prog_CPP='gcc -E' ac_cv_prog_CXXCPP='g++ -E' ac_cv_prog_ac_ct_AR=ar ac_cv_prog_ac_ct_CC=gcc ac_cv_prog_ac_ct_CXX=g++ ac_cv_prog_ac_ct_OBJDUMP=objdump ac_cv_prog_ac_ct_RANLIB=ranlib ac_cv_prog_ac_ct_STRIP=strip ac_cv_prog_cc_c89= ac_cv_prog_cc_g=yes ac_cv_prog_cxx_g=yes ac_cv_prog_make_make_set=yes am_cv_CC_dependencies_compiler_type=gcc3 am_cv_CXX_dependencies_compiler_type=gcc3 lt_cv_ar_at_file=@ lt_cv_archive_cmds_need_lc=no lt_cv_deplibs_check_method=pass_all lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_ld_reload_flag=-r lt_cv_nm_interface='BSD nm' lt_cv_objdir=.libs lt_cv_path_LD=/usr/bin/ld lt_cv_path_LDCXX=/usr/bin/ld lt_cv_path_NM='/usr/bin/nm -B' lt_cv_path_mainfest_tool=no lt_cv_prog_compiler_c_o=yes lt_cv_prog_compiler_c_o_CXX=yes lt_cv_prog_compiler_pic='-fPIC -DPIC' lt_cv_prog_compiler_pic_CXX='-fPIC -DPIC' lt_cv_prog_compiler_pic_works=yes lt_cv_prog_compiler_pic_works_CXX=yes lt_cv_prog_compiler_rtti_exceptions=no lt_cv_prog_compiler_static_works=no lt_cv_prog_compiler_static_works_CXX=no lt_cv_prog_gnu_ld=yes lt_cv_prog_gnu_ldcxx=yes lt_cv_sharedlib_from_linklib_cmd='printf %s\n' lt_cv_shlibpath_overrides_runpath=no lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' lt_cv_sys_max_cmd_len=1572864 lt_cv_to_host_file_cmd=func_convert_file_noop lt_cv_to_tool_file_cmd=func_convert_file_noop ## ----------------- ## ## Output variables. ## ## ----------------- ## ACLOCAL='${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run aclocal-1.11' AMDEPBACKSLASH='\' AMDEP_FALSE='#' AMDEP_TRUE='' AMTAR='$${TAR-tar}' AR='ar' AUTOCONF='${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run autoconf' AUTOHEADER='${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run autoheader' AUTOMAKE='${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run automake-1.11' AWK='gawk' CC='gcc' CCDEPMODE='depmode=gcc3' CFLAGS='-g -O2' CPP='gcc -E' CPPFLAGS='' CXX='g++' CXXCPP='g++ -E' CXXDEPMODE='depmode=gcc3' CXXFLAGS='-g -O2' CYGPATH_W='echo' DEFS='-DHAVE_CONFIG_H' DEPDIR='.deps' DLLTOOL='false' DSYMUTIL='' DUMPBIN='' ECHO_C='' ECHO_N='-n' ECHO_T='' EGREP='/usr/bin/grep -E' EXEEXT='' FGREP='/usr/bin/grep -F' GREP='/usr/bin/grep' HAVE_PTHREADS_FALSE='#' HAVE_PTHREADS_TRUE='' HAVE_PYTHON_FALSE='#' HAVE_PYTHON_TRUE='' INSTALL_DATA='${INSTALL} -m 644' INSTALL_PROGRAM='${INSTALL}' INSTALL_SCRIPT='${INSTALL}' INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' LD='/usr/bin/ld' LDFLAGS='' LIBOBJS='' LIBS='' LIBTOOL='$(SHELL) $(top_builddir)/libtool' LIPO='' LN_S='ln -s' LTLIBOBJS='' MAKEINFO='${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run makeinfo' MANIFEST_TOOL=':' MKDIR_P='/usr/bin/mkdir -p' NM='/usr/bin/nm -B' NMEDIT='' OBJDUMP='objdump' OBJEXT='o' OTOOL64='' OTOOL='' PACKAGE='gtest' PACKAGE_BUGREPORT='googletestframework@googlegroups.com' PACKAGE_NAME='Google C++ Testing Framework' PACKAGE_STRING='Google C++ Testing Framework 1.7.0' PACKAGE_TARNAME='gtest' PACKAGE_URL='' PACKAGE_VERSION='1.7.0' PATH_SEPARATOR=':' PTHREAD_CC='gcc' PTHREAD_CFLAGS='-pthread' PTHREAD_LIBS='' PYTHON='/usr/bin/python' RANLIB='ranlib' SED='/usr/bin/sed' SET_MAKE='' SHELL='/bin/sh' STRIP='strip' VERSION='1.7.0' ac_ct_AR='ar' ac_ct_CC='gcc' ac_ct_CXX='g++' ac_ct_DUMPBIN='' acx_pthread_config='' am__EXEEXT_FALSE='' am__EXEEXT_TRUE='#' am__fastdepCC_FALSE='#' am__fastdepCC_TRUE='' am__fastdepCXX_FALSE='#' am__fastdepCXX_TRUE='' am__include='include' am__isrc='' am__leading_dot='.' am__nodep='_no' am__quote='' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' bindir='${exec_prefix}/bin' build='i686-pc-linux-gnu' build_alias='' build_cpu='i686' build_os='linux-gnu' build_vendor='pc' datadir='${datarootdir}' datarootdir='${prefix}/share' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' dvidir='${docdir}' exec_prefix='${prefix}' host='i686-pc-linux-gnu' host_alias='' host_cpu='i686' host_os='linux-gnu' host_vendor='pc' htmldir='${docdir}' includedir='${prefix}/include' infodir='${datarootdir}/info' install_sh='${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/install-sh' libdir='${exec_prefix}/lib' libexecdir='${exec_prefix}/libexec' localedir='${datarootdir}/locale' localstatedir='${prefix}/var' mandir='${datarootdir}/man' mkdir_p='/usr/bin/mkdir -p' oldincludedir='/usr/include' pdfdir='${docdir}' prefix='/usr/local' program_transform_name='s,x,x,' psdir='${docdir}' sbindir='${exec_prefix}/sbin' sharedstatedir='${prefix}/com' sysconfdir='${prefix}/etc' target_alias='' ## ----------- ## ## confdefs.h. ## ## ----------- ## /* confdefs.h */ #define PACKAGE_NAME "Google C++ Testing Framework" #define PACKAGE_TARNAME "gtest" #define PACKAGE_VERSION "1.7.0" #define PACKAGE_STRING "Google C++ Testing Framework 1.7.0" #define PACKAGE_BUGREPORT "googletestframework@googlegroups.com" #define PACKAGE_URL "" #define PACKAGE "gtest" #define VERSION "1.7.0" #define STDC_HEADERS 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRING_H 1 #define HAVE_MEMORY_H 1 #define HAVE_STRINGS_H 1 #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 #define HAVE_UNISTD_H 1 #define HAVE_DLFCN_H 1 #define LT_OBJDIR ".libs/" #define HAVE_PTHREAD 1 configure: exit 0 dlt-daemon-2.18.6/gtest-1.7.0/config.status000077500000000000000000002140351377520261000201500ustar00rootroot00000000000000#! /bin/sh # Generated by configure. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=${CONFIG_SHELL-/bin/sh} export SHELL ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Google C++ Testing Framework $as_me 1.7.0, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " # Files that config.status was made for. config_files=" Makefile scripts/gtest-config" config_headers=" build-aux/config.h" config_commands=" depfiles libtool" ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." ac_cs_config="" ac_cs_version="\ Google C++ Testing Framework config.status 1.7.0 configured by ./configure, generated by GNU Autoconf 2.68, with options \"$ac_cs_config\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0' srcdir='.' INSTALL='/usr/bin/install -c' MKDIR_P='/usr/bin/mkdir -p' AWK='gawk' test -n "$AWK" || AWK=awk # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi if $ac_cs_recheck; then set X '/bin/sh' './configure' $ac_configure_extra_args --no-create --no-recursion shift $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6 CONFIG_SHELL='/bin/sh' export CONFIG_SHELL exec "$@" fi exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 # # INIT-COMMANDS # AMDEP_TRUE="" ac_aux_dir="build-aux" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='s/\(["`$\\]\)/\\\1/g' double_quote_subst='s/\(["`\\]\)/\\\1/g' delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' macro_version='2.4.2' macro_revision='1.3337' enable_shared='yes' enable_static='yes' pic_mode='default' enable_fast_install='yes' SHELL='/bin/sh' ECHO='printf %s\n' PATH_SEPARATOR=':' host_alias='' host='i686-pc-linux-gnu' host_os='linux-gnu' build_alias='' build='i686-pc-linux-gnu' build_os='linux-gnu' SED='/usr/bin/sed' Xsed='/usr/bin/sed -e 1s/^X//' GREP='/usr/bin/grep' EGREP='/usr/bin/grep -E' FGREP='/usr/bin/grep -F' LD='/usr/bin/ld' NM='/usr/bin/nm -B' LN_S='ln -s' max_cmd_len='1572864' ac_objext='o' exeext='' lt_unset='unset' lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' lt_cv_to_host_file_cmd='func_convert_file_noop' lt_cv_to_tool_file_cmd='func_convert_file_noop' reload_flag=' -r' reload_cmds='$LD$reload_flag -o $output$reload_objs' OBJDUMP='objdump' deplibs_check_method='pass_all' file_magic_cmd='$MAGIC_CMD' file_magic_glob='' want_nocaseglob='no' DLLTOOL='false' sharedlib_from_linklib_cmd='printf %s\n' AR='ar' AR_FLAGS='cru' archiver_list_spec='@' STRIP='strip' RANLIB='ranlib' old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $tool_oldlib' old_postuninstall_cmds='' old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib' lock_old_archive_extraction='no' CC='gcc' CFLAGS='-g -O2' compiler='g++' GCC='yes' lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' nm_file_list_spec='@' lt_sysroot='' objdir='.libs' MAGIC_CMD='file' lt_prog_compiler_no_builtin_flag=' -fno-builtin' lt_prog_compiler_pic=' -fPIC -DPIC' lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='' lt_cv_prog_compiler_c_o='yes' need_locks='no' MANIFEST_TOOL=':' DSYMUTIL='' NMEDIT='' LIPO='' OTOOL='' OTOOL64='' libext='a' shrext_cmds='.so' extract_expsyms_cmds='' archive_cmds_need_lc='no' enable_shared_with_static_runtimes='no' export_dynamic_flag_spec='${wl}--export-dynamic' whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' compiler_needs_object='no' old_archive_from_new_cmds='' old_archive_from_expsyms_cmds='' archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' module_cmds='' module_expsym_cmds='' with_gnu_ld='yes' allow_undefined_flag='' no_undefined_flag='' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator='' hardcode_direct='no' hardcode_direct_absolute='no' hardcode_minus_L='no' hardcode_shlibpath_var='unsupported' hardcode_automatic='no' inherit_rpath='no' link_all_deplibs='no' always_export_symbols='no' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' include_expsyms='' prelink_cmds='' postlink_cmds='' file_list_spec='' variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH' need_lib_prefix='no' need_version='no' version_type='linux' runpath_var='LD_RUN_PATH' shlibpath_var='LD_LIBRARY_PATH' shlibpath_overrides_runpath='no' libname_spec='lib$name' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' install_override_mode='' postinstall_cmds='' postuninstall_cmds='' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' finish_eval='' hardcode_into_libs='yes' sys_lib_search_path_spec='/usr/lib/gcc/i686-redhat-linux/4.9.2 /usr/lib /lib ' sys_lib_dlsearch_path_spec='/lib /usr/lib /usr/lib/dyninst /usr/lib/iscsi /usr/lib/llvm /usr/lib/vmware-tools/lib32/libvmGuestLib.so /usr/lib/vmware-tools/lib64/libvmGuestLib.so /usr/lib/vmware-tools/lib32/libvmGuestLibJava.so /usr/lib/vmware-tools/lib64/libvmGuestLibJava.so /usr/lib/vmware-tools/lib32/libDeployPkg.so /usr/lib/vmware-tools/lib64/libDeployPkg.so ' hardcode_action='immediate' enable_dlopen='unknown' enable_dlopen_self='unknown' enable_dlopen_self_static='unknown' old_striplib='strip --strip-debug' striplib='strip --strip-unneeded' compiler_lib_search_dirs='' predep_objects='' postdep_objects='' predeps='' postdeps='' compiler_lib_search_path='' LD_CXX='/usr/bin/ld' reload_flag_CXX=' -r' reload_cmds_CXX='$LD$reload_flag -o $output$reload_objs' old_archive_cmds_CXX='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib' compiler_CXX='g++' GCC_CXX='yes' lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' lt_prog_compiler_pic_CXX=' -fPIC -DPIC' lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='' lt_cv_prog_compiler_c_o_CXX='yes' archive_cmds_need_lc_CXX='no' enable_shared_with_static_runtimes_CXX='no' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' compiler_needs_object_CXX='no' old_archive_from_new_cmds_CXX='' old_archive_from_expsyms_cmds_CXX='' archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' module_cmds_CXX='' module_expsym_cmds_CXX='' with_gnu_ld_CXX='yes' allow_undefined_flag_CXX='' no_undefined_flag_CXX='' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX='' hardcode_direct_CXX='no' hardcode_direct_absolute_CXX='no' hardcode_minus_L_CXX='no' hardcode_shlibpath_var_CXX='unsupported' hardcode_automatic_CXX='no' inherit_rpath_CXX='no' link_all_deplibs_CXX='no' always_export_symbols_CXX='no' export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' include_expsyms_CXX='' prelink_cmds_CXX='' postlink_cmds_CXX='' file_list_spec_CXX='' hardcode_action_CXX='immediate' compiler_lib_search_dirs_CXX='/usr/lib/gcc/i686-redhat-linux/4.9.2 /usr/lib/gcc/i686-redhat-linux/4.9.2/../../..' predep_objects_CXX='/usr/lib/gcc/i686-redhat-linux/4.9.2/../../../crti.o /usr/lib/gcc/i686-redhat-linux/4.9.2/crtbeginS.o' postdep_objects_CXX='/usr/lib/gcc/i686-redhat-linux/4.9.2/crtendS.o /usr/lib/gcc/i686-redhat-linux/4.9.2/../../../crtn.o' predeps_CXX='' postdeps_CXX='-lstdc++ -lm -lgcc_s -lc -lgcc_s' compiler_lib_search_path_CXX='-L/usr/lib/gcc/i686-redhat-linux/4.9.2 -L/usr/lib/gcc/i686-redhat-linux/4.9.2/../../..' LTCC='gcc' LTCFLAGS='-g -O2' compiler='gcc' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL ECHO PATH_SEPARATOR SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag OBJDUMP deplibs_check_method file_magic_cmd file_magic_glob want_nocaseglob DLLTOOL sharedlib_from_linklib_cmd AR AR_FLAGS archiver_list_spec STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix nm_file_list_spec lt_prog_compiler_no_builtin_flag lt_prog_compiler_pic lt_prog_compiler_wl lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks MANIFEST_TOOL DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_separator exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib compiler_lib_search_dirs predep_objects postdep_objects predeps postdeps compiler_lib_search_path LD_CXX reload_flag_CXX compiler_CXX lt_prog_compiler_no_builtin_flag_CXX lt_prog_compiler_pic_CXX lt_prog_compiler_wl_CXX lt_prog_compiler_static_CXX lt_cv_prog_compiler_c_o_CXX export_dynamic_flag_spec_CXX whole_archive_flag_spec_CXX compiler_needs_object_CXX with_gnu_ld_CXX allow_undefined_flag_CXX no_undefined_flag_CXX hardcode_libdir_flag_spec_CXX hardcode_libdir_separator_CXX exclude_expsyms_CXX include_expsyms_CXX file_list_spec_CXX compiler_lib_search_dirs_CXX predep_objects_CXX postdep_objects_CXX predeps_CXX postdeps_CXX compiler_lib_search_path_CXX; do case `eval \\$ECHO \\""\\$$var"\\"` in *[\\\`\"\$]*) eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\$$var\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postlink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec sys_lib_dlsearch_path_spec reload_cmds_CXX old_archive_cmds_CXX old_archive_from_new_cmds_CXX old_archive_from_expsyms_cmds_CXX archive_cmds_CXX archive_expsym_cmds_CXX module_cmds_CXX module_expsym_cmds_CXX export_symbols_cmds_CXX prelink_cmds_CXX postlink_cmds_CXX; do case `eval \\$ECHO \\""\\$$var"\\"` in *[\\\`\"\$]*) eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\$$var\\\"" ;; esac done ac_aux_dir='build-aux' xsi_shell='yes' lt_shell_append='yes' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='gtest' VERSION='1.7.0' TIMESTAMP='' RM='rm -f' ofile='libtool' # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "build-aux/config.h") CONFIG_HEADERS="$CONFIG_HEADERS build-aux/config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "scripts/gtest-config") CONFIG_FILES="$CONFIG_FILES scripts/gtest-config" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && S["am__EXEEXT_FALSE"]="" S["am__EXEEXT_TRUE"]="#" S["LTLIBOBJS"]="" S["LIBOBJS"]="" S["HAVE_PTHREADS_FALSE"]="#" S["HAVE_PTHREADS_TRUE"]="" S["PTHREAD_CFLAGS"]="-pthread" S["PTHREAD_LIBS"]="" S["PTHREAD_CC"]="gcc" S["acx_pthread_config"]="" S["HAVE_PYTHON_FALSE"]="#" S["HAVE_PYTHON_TRUE"]="" S["PYTHON"]="/usr/bin/python" S["CXXCPP"]="g++ -E" S["CPP"]="gcc -E" S["OTOOL64"]="" S["OTOOL"]="" S["LIPO"]="" S["NMEDIT"]="" S["DSYMUTIL"]="" S["MANIFEST_TOOL"]=":" S["RANLIB"]="ranlib" S["ac_ct_AR"]="ar" S["AR"]="ar" S["DLLTOOL"]="false" S["OBJDUMP"]="objdump" S["LN_S"]="ln -s" S["NM"]="/usr/bin/nm -B" S["ac_ct_DUMPBIN"]="" S["DUMPBIN"]="" S["LD"]="/usr/bin/ld" S["FGREP"]="/usr/bin/grep -F" S["EGREP"]="/usr/bin/grep -E" S["GREP"]="/usr/bin/grep" S["SED"]="/usr/bin/sed" S["host_os"]="linux-gnu" S["host_vendor"]="pc" S["host_cpu"]="i686" S["host"]="i686-pc-linux-gnu" S["build_os"]="linux-gnu" S["build_vendor"]="pc" S["build_cpu"]="i686" S["build"]="i686-pc-linux-gnu" S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" S["am__fastdepCXX_FALSE"]="#" S["am__fastdepCXX_TRUE"]="" S["CXXDEPMODE"]="depmode=gcc3" S["ac_ct_CXX"]="g++" S["CXXFLAGS"]="-g -O2" S["CXX"]="g++" S["am__fastdepCC_FALSE"]="#" S["am__fastdepCC_TRUE"]="" S["CCDEPMODE"]="depmode=gcc3" S["am__nodep"]="_no" S["AMDEPBACKSLASH"]="\\" S["AMDEP_FALSE"]="#" S["AMDEP_TRUE"]="" S["am__quote"]="" S["am__include"]="include" S["DEPDIR"]=".deps" S["OBJEXT"]="o" S["EXEEXT"]="" S["ac_ct_CC"]="gcc" S["CPPFLAGS"]="" S["LDFLAGS"]="" S["CFLAGS"]="-g -O2" S["CC"]="gcc" S["am__untar"]="$${TAR-tar} xf -" S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" S["AMTAR"]="$${TAR-tar}" S["am__leading_dot"]="." S["SET_MAKE"]="" S["AWK"]="gawk" S["mkdir_p"]="/usr/bin/mkdir -p" S["MKDIR_P"]="/usr/bin/mkdir -p" S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" S["STRIP"]="strip" S["install_sh"]="${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/install-sh" S["MAKEINFO"]="${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run makeinfo" S["AUTOHEADER"]="${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run autoheader" S["AUTOMAKE"]="${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run automake-1.11" S["AUTOCONF"]="${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run autoconf" S["ACLOCAL"]="${SHELL} /home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/build-aux/missing --run aclocal-1.11" S["VERSION"]="1.7.0" S["PACKAGE"]="gtest" S["CYGPATH_W"]="echo" S["am__isrc"]="" S["INSTALL_DATA"]="${INSTALL} -m 644" S["INSTALL_SCRIPT"]="${INSTALL}" S["INSTALL_PROGRAM"]="${INSTALL}" S["target_alias"]="" S["host_alias"]="" S["build_alias"]="" S["LIBS"]="" S["ECHO_T"]="" S["ECHO_N"]="-n" S["ECHO_C"]="" S["DEFS"]="-DHAVE_CONFIG_H" S["mandir"]="${datarootdir}/man" S["localedir"]="${datarootdir}/locale" S["libdir"]="${exec_prefix}/lib" S["psdir"]="${docdir}" S["pdfdir"]="${docdir}" S["dvidir"]="${docdir}" S["htmldir"]="${docdir}" S["infodir"]="${datarootdir}/info" S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" S["oldincludedir"]="/usr/include" S["includedir"]="${prefix}/include" S["localstatedir"]="${prefix}/var" S["sharedstatedir"]="${prefix}/com" S["sysconfdir"]="${prefix}/etc" S["datadir"]="${datarootdir}" S["datarootdir"]="${prefix}/share" S["libexecdir"]="${exec_prefix}/libexec" S["sbindir"]="${exec_prefix}/sbin" S["bindir"]="${exec_prefix}/bin" S["program_transform_name"]="s,x,x," S["prefix"]="/usr/local" S["exec_prefix"]="${prefix}" S["PACKAGE_URL"]="" S["PACKAGE_BUGREPORT"]="googletestframework@googlegroups.com" S["PACKAGE_STRING"]="Google C++ Testing Framework 1.7.0" S["PACKAGE_VERSION"]="1.7.0" S["PACKAGE_TARNAME"]="gtest" S["PACKAGE_NAME"]="Google C++ Testing Framework" S["PATH_SEPARATOR"]=":" S["SHELL"]="/bin/sh" _ACAWK cat >>"$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { D["PACKAGE_NAME"]=" \"Google C++ Testing Framework\"" D["PACKAGE_TARNAME"]=" \"gtest\"" D["PACKAGE_VERSION"]=" \"1.7.0\"" D["PACKAGE_STRING"]=" \"Google C++ Testing Framework 1.7.0\"" D["PACKAGE_BUGREPORT"]=" \"googletestframework@googlegroups.com\"" D["PACKAGE_URL"]=" \"\"" D["PACKAGE"]=" \"gtest\"" D["VERSION"]=" \"1.7.0\"" D["STDC_HEADERS"]=" 1" D["HAVE_SYS_TYPES_H"]=" 1" D["HAVE_SYS_STAT_H"]=" 1" D["HAVE_STDLIB_H"]=" 1" D["HAVE_STRING_H"]=" 1" D["HAVE_MEMORY_H"]=" 1" D["HAVE_STRINGS_H"]=" 1" D["HAVE_INTTYPES_H"]=" 1" D["HAVE_STDINT_H"]=" 1" D["HAVE_UNISTD_H"]=" 1" D["HAVE_DLFCN_H"]=" 1" D["LT_OBJDIR"]=" \".libs/\"" D["HAVE_PTHREAD"]=" 1" for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { line = $ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} ac_datarootdir_hack=' s&@datadir@&${datarootdir}&g s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g s&@infodir@&${datarootdir}/info&g s&@localedir@&${datarootdir}/locale&g s&@mandir@&${datarootdir}/man&g s&\${datarootdir}&${prefix}/share&g' ;; esac ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// } :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "scripts/gtest-config":F) chmod +x scripts/gtest-config ;; "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 dlt-daemon-2.18.6/gtest-1.7.0/configure000077500000000000000000021163601377520261000173460ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for Google C++ Testing Framework 1.7.0. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: googletestframework@googlegroups.com about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Google C++ Testing Framework' PACKAGE_TARNAME='gtest' PACKAGE_VERSION='1.7.0' PACKAGE_STRING='Google C++ Testing Framework 1.7.0' PACKAGE_BUGREPORT='googletestframework@googlegroups.com' PACKAGE_URL='' ac_unique_file="./LICENSE" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS HAVE_PTHREADS_FALSE HAVE_PTHREADS_TRUE PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC acx_pthread_config HAVE_PYTHON_FALSE HAVE_PYTHON_TRUE PYTHON CXXCPP CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock with_pthreads ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Google C++ Testing Framework 1.7.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gtest] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Google C++ Testing Framework 1.7.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-pthreads use pthreads (default is yes) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Google C++ Testing Framework configure 1.7.0 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Google C++ Testing Framework $as_me 1.7.0, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Provide various options to initialize the Autoconf and configure processes. ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers build-aux/config.h" ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files scripts/gtest-config" # Initialize Automake with various options. We require at least v1.9, prevent # pedantic complaints about package files, and enable various distribution # targets. am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gtest' VERSION='1.7.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Check for programs used in building Google Test. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # TODO(chandlerc@google.com): Currently we aren't running the Python tests # against the interpreter detected by AM_PATH_PYTHON, and so we condition # HAVE_PYTHON by requiring "python" to be in the PATH, and that interpreter's # version to be >= 2.3. This will allow the scripts to use a "/usr/bin/env" # hashbang. PYTHON= # We *do not* allow the user to specify a python interpreter # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON=":" ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$PYTHON" != ":"; then : prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '2.3'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 ($PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then : : else PYTHON=":" fi fi if test "$PYTHON" != ":"; then HAVE_PYTHON_TRUE= HAVE_PYTHON_FALSE='#' else HAVE_PYTHON_TRUE='#' HAVE_PYTHON_FALSE= fi # Configure pthreads. # Check whether --with-pthreads was given. if test "${with_pthreads+set}" = set; then : withval=$with_pthreads; with_pthreads=$withval else with_pthreads=check fi have_pthreads=no if test "x$with_pthreads" != "xno"; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : acx_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 $as_echo "$acx_pthread_ok" >&6; } if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 $as_echo_n "checking whether pthreads work with $flag... " >&6; } PTHREAD_CFLAGS="$flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_acx_pthread_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$acx_pthread_config"; then ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_acx_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" fi fi acx_pthread_config=$ac_cv_prog_acx_pthread_config if test -n "$acx_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 $as_echo "$acx_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 $as_echo_n "checking for the pthreads library -l$flag... " >&6; } PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : acx_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 $as_echo "$acx_pthread_ok" >&6; } if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr=$attr; return attr; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : attr_name=$attr; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 $as_echo "$attr_name" >&6; } if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then cat >>confdefs.h <<_ACEOF #define PTHREAD_CREATE_JOINABLE $attr_name _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 $as_echo_n "checking if more special flags are required for pthreads... " >&6; } flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 $as_echo "${flag}" >&6; } if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r if test x"$GCC" != xyes; then for ac_prog in xlc_r cc_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_PTHREAD_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" else PTHREAD_CC=$CC fi # The next part tries to detect GCC inconsistency with -shared on some # architectures and systems. The problem is that in certain # configurations, when -shared is specified, GCC "forgets" to # internally use various flags which are still necessary. # # Prepare the flags # save_CFLAGS="$CFLAGS" save_LIBS="$LIBS" save_CC="$CC" # Try with the flags determined by the earlier checks. # # -Wl,-z,defs forces link-time symbol resolution, so that the # linking checks with -shared actually have any value # # FIXME: -fPIC is required for -shared on many architectures, # so we specify it here, but the right way would probably be to # properly detect whether it is actually required. CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CC="$PTHREAD_CC" # In order not to create several levels of indentation, we test # the value of "$done" until we find the cure or run out of ideas. done="no" # First, make sure the CFLAGS we added are actually accepted by our # compiler. If not (and OS X's ld, for instance, does not accept -z), # then we can't do this test. if test x"$done" = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to check for GCC pthread/shared inconsistencies" >&5 $as_echo_n "checking whether to check for GCC pthread/shared inconsistencies... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else done=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "x$done" = xyes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi if test x"$done" = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -pthread is sufficient with -shared" >&5 $as_echo_n "checking whether -pthread is sufficient with -shared... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : done=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "x$done" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi # # Linux gcc on some architectures such as mips/mipsel forgets # about -lpthread # if test x"$done" = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lpthread fixes that" >&5 $as_echo_n "checking whether -lpthread fixes that... " >&6; } LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : done=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "x$done" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi # # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc # if test x"$done" = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc_r fixes that" >&5 $as_echo_n "checking whether -lc_r fixes that... " >&6; } LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : done=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "x$done" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test x"$done" = xno; then # OK, we have run out of ideas { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Impossible to determine how to use pthreads with shared libraries" >&5 $as_echo "$as_me: WARNING: Impossible to determine how to use pthreads with shared libraries" >&2;} # so it's not safe to assume that we may use pthreads acx_pthread_ok=no fi CFLAGS="$save_CFLAGS" LIBS="$save_LIBS" CC="$save_CC" else PTHREAD_CC="$CC" fi # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h : else acx_pthread_ok=no if test "x$with_pthreads" != "xcheck"; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-pthreads was specified, but unable to be used See \`config.log' for more details" "$LINENO" 5; } fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu have_pthreads="$acx_pthread_ok" fi if test "x$have_pthreads" = "xyes"; then HAVE_PTHREADS_TRUE= HAVE_PTHREADS_FALSE='#' else HAVE_PTHREADS_TRUE='#' HAVE_PTHREADS_FALSE= fi # TODO(chandlerc@google.com) Check for the necessary system headers. # TODO(chandlerc@google.com) Check the types, structures, and other compiler # and architecture characteristics. # Output the generated files. No further autoconf macros may be used. cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PYTHON_TRUE}" && test -z "${HAVE_PYTHON_FALSE}"; then as_fn_error $? "conditional \"HAVE_PYTHON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PTHREADS_TRUE}" && test -z "${HAVE_PTHREADS_FALSE}"; then as_fn_error $? "conditional \"HAVE_PTHREADS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Google C++ Testing Framework $as_me 1.7.0, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Google C++ Testing Framework config.status 1.7.0 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "build-aux/config.h") CONFIG_HEADERS="$CONFIG_HEADERS build-aux/config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "scripts/gtest-config") CONFIG_FILES="$CONFIG_FILES scripts/gtest-config" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "scripts/gtest-config":F) chmod +x scripts/gtest-config ;; "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi dlt-daemon-2.18.6/gtest-1.7.0/configure.ac000066400000000000000000000050161377520261000177160ustar00rootroot00000000000000m4_include(m4/acx_pthread.m4) # At this point, the Xcode project assumes the version string will be three # integers separated by periods and surrounded by square brackets (e.g. # "[1.0.1]"). It also asumes that there won't be any closing parenthesis # between "AC_INIT(" and the closing ")" including comments and strings. AC_INIT([Google C++ Testing Framework], [1.7.0], [googletestframework@googlegroups.com], [gtest]) # Provide various options to initialize the Autoconf and configure processes. AC_PREREQ([2.59]) AC_CONFIG_SRCDIR([./LICENSE]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADERS([build-aux/config.h]) AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([scripts/gtest-config], [chmod +x scripts/gtest-config]) # Initialize Automake with various options. We require at least v1.9, prevent # pedantic complaints about package files, and enable various distribution # targets. AM_INIT_AUTOMAKE([1.9 dist-bzip2 dist-zip foreign subdir-objects]) # Check for programs used in building Google Test. AC_PROG_CC AC_PROG_CXX AC_LANG([C++]) AC_PROG_LIBTOOL # TODO(chandlerc@google.com): Currently we aren't running the Python tests # against the interpreter detected by AM_PATH_PYTHON, and so we condition # HAVE_PYTHON by requiring "python" to be in the PATH, and that interpreter's # version to be >= 2.3. This will allow the scripts to use a "/usr/bin/env" # hashbang. PYTHON= # We *do not* allow the user to specify a python interpreter AC_PATH_PROG([PYTHON],[python],[:]) AS_IF([test "$PYTHON" != ":"], [AM_PYTHON_CHECK_VERSION([$PYTHON],[2.3],[:],[PYTHON=":"])]) AM_CONDITIONAL([HAVE_PYTHON],[test "$PYTHON" != ":"]) # Configure pthreads. AC_ARG_WITH([pthreads], [AS_HELP_STRING([--with-pthreads], [use pthreads (default is yes)])], [with_pthreads=$withval], [with_pthreads=check]) have_pthreads=no AS_IF([test "x$with_pthreads" != "xno"], [ACX_PTHREAD( [], [AS_IF([test "x$with_pthreads" != "xcheck"], [AC_MSG_FAILURE( [--with-pthreads was specified, but unable to be used])])]) have_pthreads="$acx_pthread_ok"]) AM_CONDITIONAL([HAVE_PTHREADS],[test "x$have_pthreads" = "xyes"]) AC_SUBST(PTHREAD_CFLAGS) AC_SUBST(PTHREAD_LIBS) # TODO(chandlerc@google.com) Check for the necessary system headers. # TODO(chandlerc@google.com) Check the types, structures, and other compiler # and architecture characteristics. # Output the generated files. No further autoconf macros may be used. AC_OUTPUT dlt-daemon-2.18.6/gtest-1.7.0/fused-src/000077500000000000000000000000001377520261000173215ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/fused-src/gtest/000077500000000000000000000000001377520261000204475ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/fused-src/gtest/.deps/000077500000000000000000000000001377520261000214605ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/fused-src/gtest/.deps/test_fused_gtest_test-gtest-all.Po000066400000000000000000000000101377520261000302530ustar00rootroot00000000000000# dummy dlt-daemon-2.18.6/gtest-1.7.0/fused-src/gtest/.deps/test_fused_gtest_test-gtest_main.Po000066400000000000000000000000101377520261000305110ustar00rootroot00000000000000# dummy dlt-daemon-2.18.6/gtest-1.7.0/fused-src/gtest/gtest-all.cc000066400000000000000000012640701377520261000226640ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: mheule@google.com (Markus Heule) // // Google C++ Testing Framework (Google Test) // // Sometimes it's desirable to build Google Test by compiling a single file. // This file serves this purpose. // This line ensures that gtest.h can be compiled on its own, even // when it's fused. #include "gtest/gtest.h" // The following lines pull in the real gtest *.cc files. // Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) // Copyright 2007, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // Utilities for testing Google Test itself and code that uses Google Test // (e.g. frameworks built on top of Google Test). #ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_ #define GTEST_INCLUDE_GTEST_GTEST_SPI_H_ namespace testing { // This helper class can be used to mock out Google Test failure reporting // so that we can test Google Test or code that builds on Google Test. // // An object of this class appends a TestPartResult object to the // TestPartResultArray object given in the constructor whenever a Google Test // failure is reported. It can either intercept only failures that are // generated in the same thread that created this object or it can intercept // all generated failures. The scope of this mock object can be controlled with // the second argument to the two arguments constructor. class GTEST_API_ ScopedFakeTestPartResultReporter : public TestPartResultReporterInterface { public: // The two possible mocking modes of this object. enum InterceptMode { INTERCEPT_ONLY_CURRENT_THREAD, // Intercepts only thread local failures. INTERCEPT_ALL_THREADS // Intercepts all failures. }; // The c'tor sets this object as the test part result reporter used // by Google Test. The 'result' parameter specifies where to report the // results. This reporter will only catch failures generated in the current // thread. DEPRECATED explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result); // Same as above, but you can choose the interception scope of this object. ScopedFakeTestPartResultReporter(InterceptMode intercept_mode, TestPartResultArray* result); // The d'tor restores the previous test part result reporter. virtual ~ScopedFakeTestPartResultReporter(); // Appends the TestPartResult object to the TestPartResultArray // received in the constructor. // // This method is from the TestPartResultReporterInterface // interface. virtual void ReportTestPartResult(const TestPartResult& result); private: void Init(); const InterceptMode intercept_mode_; TestPartResultReporterInterface* old_reporter_; TestPartResultArray* const result_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter); }; namespace internal { // A helper class for implementing EXPECT_FATAL_FAILURE() and // EXPECT_NONFATAL_FAILURE(). Its destructor verifies that the given // TestPartResultArray contains exactly one failure that has the given // type and contains the given substring. If that's not the case, a // non-fatal failure will be generated. class GTEST_API_ SingleFailureChecker { public: // The constructor remembers the arguments. SingleFailureChecker(const TestPartResultArray* results, TestPartResult::Type type, const string& substr); ~SingleFailureChecker(); private: const TestPartResultArray* const results_; const TestPartResult::Type type_; const string substr_; GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker); }; } // namespace internal } // namespace testing // A set of macros for testing Google Test assertions or code that's expected // to generate Google Test fatal failures. It verifies that the given // statement will cause exactly one fatal Google Test failure with 'substr' // being part of the failure message. // // There are two different versions of this macro. EXPECT_FATAL_FAILURE only // affects and considers failures generated in the current thread and // EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. // // The verification of the assertion is done correctly even when the statement // throws an exception or aborts the current function. // // Known restrictions: // - 'statement' cannot reference local non-static variables or // non-static members of the current object. // - 'statement' cannot return a value. // - You cannot stream a failure message to this macro. // // Note that even though the implementations of the following two // macros are much alike, we cannot refactor them to use a common // helper macro, due to some peculiarity in how the preprocessor // works. The AcceptsMacroThatExpandsToUnprotectedComma test in // gtest_unittest.cc will fail to compile if we do that. #define EXPECT_FATAL_FAILURE(statement, substr) \ do { \ class GTestExpectFatalFailureHelper {\ public:\ static void Execute() { statement; }\ };\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter:: \ INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ GTestExpectFatalFailureHelper::Execute();\ }\ } while (::testing::internal::AlwaysFalse()) #define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ do { \ class GTestExpectFatalFailureHelper {\ public:\ static void Execute() { statement; }\ };\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter:: \ INTERCEPT_ALL_THREADS, >est_failures);\ GTestExpectFatalFailureHelper::Execute();\ }\ } while (::testing::internal::AlwaysFalse()) // A macro for testing Google Test assertions or code that's expected to // generate Google Test non-fatal failures. It asserts that the given // statement will cause exactly one non-fatal Google Test failure with 'substr' // being part of the failure message. // // There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only // affects and considers failures generated in the current thread and // EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. // // 'statement' is allowed to reference local variables and members of // the current object. // // The verification of the assertion is done correctly even when the statement // throws an exception or aborts the current function. // // Known restrictions: // - You cannot stream a failure message to this macro. // // Note that even though the implementations of the following two // macros are much alike, we cannot refactor them to use a common // helper macro, due to some peculiarity in how the preprocessor // works. If we do that, the code won't compile when the user gives // EXPECT_NONFATAL_FAILURE() a statement that contains a macro that // expands to code containing an unprotected comma. The // AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc // catches that. // // For the same reason, we have to write // if (::testing::internal::AlwaysTrue()) { statement; } // instead of // GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) // to avoid an MSVC warning on unreachable code. #define EXPECT_NONFATAL_FAILURE(statement, substr) \ do {\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter:: \ INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ if (::testing::internal::AlwaysTrue()) { statement; }\ }\ } while (::testing::internal::AlwaysFalse()) #define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ do {\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, \ >est_failures);\ if (::testing::internal::AlwaysTrue()) { statement; }\ }\ } while (::testing::internal::AlwaysFalse()) #endif // GTEST_INCLUDE_GTEST_GTEST_SPI_H_ #include #include #include #include #include #include #include #include #include #include #include #include // NOLINT #include #include #if GTEST_OS_LINUX // TODO(kenton@google.com): Use autoconf to detect availability of // gettimeofday(). # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT # include // NOLINT # include // NOLINT // Declares vsnprintf(). This header is not available on Windows. # include // NOLINT # include // NOLINT # include // NOLINT # include // NOLINT # include #elif GTEST_OS_SYMBIAN # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT #elif GTEST_OS_ZOS # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT // On z/OS we additionally need strings.h for strcasecmp. # include // NOLINT #elif GTEST_OS_WINDOWS_MOBILE // We are on Windows CE. # include // NOLINT #elif GTEST_OS_WINDOWS // We are on Windows proper. # include // NOLINT # include // NOLINT # include // NOLINT # include // NOLINT # if GTEST_OS_WINDOWS_MINGW // MinGW has gettimeofday() but not _ftime64(). // TODO(kenton@google.com): Use autoconf to detect availability of // gettimeofday(). // TODO(kenton@google.com): There are other ways to get the time on // Windows, like GetTickCount() or GetSystemTimeAsFileTime(). MinGW // supports these. consider using them instead. # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT # endif // GTEST_OS_WINDOWS_MINGW // cpplint thinks that the header is already included, so we want to // silence it. # include // NOLINT #else // Assume other platforms have gettimeofday(). // TODO(kenton@google.com): Use autoconf to detect availability of // gettimeofday(). # define GTEST_HAS_GETTIMEOFDAY_ 1 // cpplint thinks that the header is already included, so we want to // silence it. # include // NOLINT # include // NOLINT #endif // GTEST_OS_LINUX #if GTEST_HAS_EXCEPTIONS # include #endif #if GTEST_CAN_STREAM_RESULTS_ # include // NOLINT # include // NOLINT #endif // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 // Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // Utility functions and classes used by the Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) // // This file contains purely Google Test's internal implementation. Please // DO NOT #INCLUDE IT IN A USER PROGRAM. #ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_ #define GTEST_SRC_GTEST_INTERNAL_INL_H_ // GTEST_IMPLEMENTATION_ is defined to 1 iff the current translation unit is // part of Google Test's implementation; otherwise it's undefined. #if !GTEST_IMPLEMENTATION_ // A user is trying to include this from his code - just say no. # error "gtest-internal-inl.h is part of Google Test's internal implementation." # error "It must not be included except by Google Test itself." #endif // GTEST_IMPLEMENTATION_ #ifndef _WIN32_WCE # include #endif // !_WIN32_WCE #include #include // For strtoll/_strtoul64/malloc/free. #include // For memmove. #include #include #include #if GTEST_CAN_STREAM_RESULTS_ # include // NOLINT # include // NOLINT #endif #if GTEST_OS_WINDOWS # include // NOLINT #endif // GTEST_OS_WINDOWS namespace testing { // Declares the flags. // // We don't want the users to modify this flag in the code, but want // Google Test's own unit tests to be able to access it. Therefore we // declare it here as opposed to in gtest.h. GTEST_DECLARE_bool_(death_test_use_fork); namespace internal { // The value of GetTestTypeId() as seen from within the Google Test // library. This is solely for testing GetTestTypeId(). GTEST_API_ extern const TypeId kTestTypeIdInGoogleTest; // Names of the flags (needed for parsing Google Test flags). const char kAlsoRunDisabledTestsFlag[] = "also_run_disabled_tests"; const char kBreakOnFailureFlag[] = "break_on_failure"; const char kCatchExceptionsFlag[] = "catch_exceptions"; const char kColorFlag[] = "color"; const char kFilterFlag[] = "filter"; const char kListTestsFlag[] = "list_tests"; const char kOutputFlag[] = "output"; const char kPrintTimeFlag[] = "print_time"; const char kRandomSeedFlag[] = "random_seed"; const char kRepeatFlag[] = "repeat"; const char kShuffleFlag[] = "shuffle"; const char kStackTraceDepthFlag[] = "stack_trace_depth"; const char kStreamResultToFlag[] = "stream_result_to"; const char kThrowOnFailureFlag[] = "throw_on_failure"; // A valid random seed must be in [1, kMaxRandomSeed]. const int kMaxRandomSeed = 99999; // g_help_flag is true iff the --help flag or an equivalent form is // specified on the command line. GTEST_API_ extern bool g_help_flag; // Returns the current time in milliseconds. GTEST_API_ TimeInMillis GetTimeInMillis(); // Returns true iff Google Test should use colors in the output. GTEST_API_ bool ShouldUseColor(bool stdout_is_tty); // Formats the given time in milliseconds as seconds. GTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms); // Converts the given time in milliseconds to a date string in the ISO 8601 // format, without the timezone information. N.B.: due to the use the // non-reentrant localtime() function, this function is not thread safe. Do // not use it in any code that can be called from multiple threads. GTEST_API_ std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms); // Parses a string for an Int32 flag, in the form of "--flag=value". // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. GTEST_API_ bool ParseInt32Flag( const char* str, const char* flag, Int32* value); // Returns a random seed in range [1, kMaxRandomSeed] based on the // given --gtest_random_seed flag value. inline int GetRandomSeedFromFlag(Int32 random_seed_flag) { const unsigned int raw_seed = (random_seed_flag == 0) ? static_cast(GetTimeInMillis()) : static_cast(random_seed_flag); // Normalizes the actual seed to range [1, kMaxRandomSeed] such that // it's easy to type. const int normalized_seed = static_cast((raw_seed - 1U) % static_cast(kMaxRandomSeed)) + 1; return normalized_seed; } // Returns the first valid random seed after 'seed'. The behavior is // undefined if 'seed' is invalid. The seed after kMaxRandomSeed is // considered to be 1. inline int GetNextRandomSeed(int seed) { GTEST_CHECK_(1 <= seed && seed <= kMaxRandomSeed) << "Invalid random seed " << seed << " - must be in [1, " << kMaxRandomSeed << "]."; const int next_seed = seed + 1; return (next_seed > kMaxRandomSeed) ? 1 : next_seed; } // This class saves the values of all Google Test flags in its c'tor, and // restores them in its d'tor. class GTestFlagSaver { public: // The c'tor. GTestFlagSaver() { also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests); break_on_failure_ = GTEST_FLAG(break_on_failure); catch_exceptions_ = GTEST_FLAG(catch_exceptions); color_ = GTEST_FLAG(color); death_test_style_ = GTEST_FLAG(death_test_style); death_test_use_fork_ = GTEST_FLAG(death_test_use_fork); filter_ = GTEST_FLAG(filter); internal_run_death_test_ = GTEST_FLAG(internal_run_death_test); list_tests_ = GTEST_FLAG(list_tests); output_ = GTEST_FLAG(output); print_time_ = GTEST_FLAG(print_time); random_seed_ = GTEST_FLAG(random_seed); repeat_ = GTEST_FLAG(repeat); shuffle_ = GTEST_FLAG(shuffle); stack_trace_depth_ = GTEST_FLAG(stack_trace_depth); stream_result_to_ = GTEST_FLAG(stream_result_to); throw_on_failure_ = GTEST_FLAG(throw_on_failure); } // The d'tor is not virtual. DO NOT INHERIT FROM THIS CLASS. ~GTestFlagSaver() { GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_; GTEST_FLAG(break_on_failure) = break_on_failure_; GTEST_FLAG(catch_exceptions) = catch_exceptions_; GTEST_FLAG(color) = color_; GTEST_FLAG(death_test_style) = death_test_style_; GTEST_FLAG(death_test_use_fork) = death_test_use_fork_; GTEST_FLAG(filter) = filter_; GTEST_FLAG(internal_run_death_test) = internal_run_death_test_; GTEST_FLAG(list_tests) = list_tests_; GTEST_FLAG(output) = output_; GTEST_FLAG(print_time) = print_time_; GTEST_FLAG(random_seed) = random_seed_; GTEST_FLAG(repeat) = repeat_; GTEST_FLAG(shuffle) = shuffle_; GTEST_FLAG(stack_trace_depth) = stack_trace_depth_; GTEST_FLAG(stream_result_to) = stream_result_to_; GTEST_FLAG(throw_on_failure) = throw_on_failure_; } private: // Fields for saving the original values of flags. bool also_run_disabled_tests_; bool break_on_failure_; bool catch_exceptions_; std::string color_; std::string death_test_style_; bool death_test_use_fork_; std::string filter_; std::string internal_run_death_test_; bool list_tests_; std::string output_; bool print_time_; internal::Int32 random_seed_; internal::Int32 repeat_; bool shuffle_; internal::Int32 stack_trace_depth_; std::string stream_result_to_; bool throw_on_failure_; } GTEST_ATTRIBUTE_UNUSED_; // Converts a Unicode code point to a narrow string in UTF-8 encoding. // code_point parameter is of type UInt32 because wchar_t may not be // wide enough to contain a code point. // If the code_point is not a valid Unicode code point // (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted // to "(Invalid Unicode 0xXXXXXXXX)". GTEST_API_ std::string CodePointToUtf8(UInt32 code_point); // Converts a wide string to a narrow string in UTF-8 encoding. // The wide string is assumed to have the following encoding: // UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) // UTF-32 if sizeof(wchar_t) == 4 (on Linux) // Parameter str points to a null-terminated wide string. // Parameter num_chars may additionally limit the number // of wchar_t characters processed. -1 is used when the entire string // should be processed. // If the string contains code points that are not valid Unicode code points // (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output // as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding // and contains invalid UTF-16 surrogate pairs, values in those pairs // will be encoded as individual Unicode characters from Basic Normal Plane. GTEST_API_ std::string WideStringToUtf8(const wchar_t* str, int num_chars); // Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file // if the variable is present. If a file already exists at this location, this // function will write over it. If the variable is present, but the file cannot // be created, prints an error and exits. void WriteToShardStatusFileIfNeeded(); // Checks whether sharding is enabled by examining the relevant // environment variable values. If the variables are present, // but inconsistent (e.g., shard_index >= total_shards), prints // an error and exits. If in_subprocess_for_death_test, sharding is // disabled because it must only be applied to the original test // process. Otherwise, we could filter out death tests we intended to execute. GTEST_API_ bool ShouldShard(const char* total_shards_str, const char* shard_index_str, bool in_subprocess_for_death_test); // Parses the environment variable var as an Int32. If it is unset, // returns default_val. If it is not an Int32, prints an error and // and aborts. GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val); // Given the total number of shards, the shard index, and the test id, // returns true iff the test should be run on this shard. The test id is // some arbitrary but unique non-negative integer assigned to each test // method. Assumes that 0 <= shard_index < total_shards. GTEST_API_ bool ShouldRunTestOnShard( int total_shards, int shard_index, int test_id); // STL container utilities. // Returns the number of elements in the given container that satisfy // the given predicate. template inline int CountIf(const Container& c, Predicate predicate) { // Implemented as an explicit loop since std::count_if() in libCstd on // Solaris has a non-standard signature. int count = 0; for (typename Container::const_iterator it = c.begin(); it != c.end(); ++it) { if (predicate(*it)) ++count; } return count; } // Applies a function/functor to each element in the container. template void ForEach(const Container& c, Functor functor) { std::for_each(c.begin(), c.end(), functor); } // Returns the i-th element of the vector, or default_value if i is not // in range [0, v.size()). template inline E GetElementOr(const std::vector& v, int i, E default_value) { return (i < 0 || i >= static_cast(v.size())) ? default_value : v[i]; } // Performs an in-place shuffle of a range of the vector's elements. // 'begin' and 'end' are element indices as an STL-style range; // i.e. [begin, end) are shuffled, where 'end' == size() means to // shuffle to the end of the vector. template void ShuffleRange(internal::Random* random, int begin, int end, std::vector* v) { const int size = static_cast(v->size()); GTEST_CHECK_(0 <= begin && begin <= size) << "Invalid shuffle range start " << begin << ": must be in range [0, " << size << "]."; GTEST_CHECK_(begin <= end && end <= size) << "Invalid shuffle range finish " << end << ": must be in range [" << begin << ", " << size << "]."; // Fisher-Yates shuffle, from // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle for (int range_width = end - begin; range_width >= 2; range_width--) { const int last_in_range = begin + range_width - 1; const int selected = begin + random->Generate(range_width); std::swap((*v)[selected], (*v)[last_in_range]); } } // Performs an in-place shuffle of the vector's elements. template inline void Shuffle(internal::Random* random, std::vector* v) { ShuffleRange(random, 0, static_cast(v->size()), v); } // A function for deleting an object. Handy for being used as a // functor. template static void Delete(T* x) { delete x; } // A predicate that checks the key of a TestProperty against a known key. // // TestPropertyKeyIs is copyable. class TestPropertyKeyIs { public: // Constructor. // // TestPropertyKeyIs has NO default constructor. explicit TestPropertyKeyIs(const std::string& key) : key_(key) {} // Returns true iff the test name of test property matches on key_. bool operator()(const TestProperty& test_property) const { return test_property.key() == key_; } private: std::string key_; }; // Class UnitTestOptions. // // This class contains functions for processing options the user // specifies when running the tests. It has only static members. // // In most cases, the user can specify an option using either an // environment variable or a command line flag. E.g. you can set the // test filter using either GTEST_FILTER or --gtest_filter. If both // the variable and the flag are present, the latter overrides the // former. class GTEST_API_ UnitTestOptions { public: // Functions for processing the gtest_output flag. // Returns the output format, or "" for normal printed output. static std::string GetOutputFormat(); // Returns the absolute path of the requested output file, or the // default (test_detail.xml in the original working directory) if // none was explicitly specified. static std::string GetAbsolutePathToOutputFile(); // Functions for processing the gtest_filter flag. // Returns true iff the wildcard pattern matches the string. The // first ':' or '\0' character in pattern marks the end of it. // // This recursive algorithm isn't very efficient, but is clear and // works well enough for matching test names, which are short. static bool PatternMatchesString(const char *pattern, const char *str); // Returns true iff the user-specified filter matches the test case // name and the test name. static bool FilterMatchesTest(const std::string &test_case_name, const std::string &test_name); #if GTEST_OS_WINDOWS // Function for supporting the gtest_catch_exception flag. // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. // This function is useful as an __except condition. static int GTestShouldProcessSEH(DWORD exception_code); #endif // GTEST_OS_WINDOWS // Returns true if "name" matches the ':' separated list of glob-style // filters in "filter". static bool MatchesFilter(const std::string& name, const char* filter); }; // Returns the current application's name, removing directory path if that // is present. Used by UnitTestOptions::GetOutputFile. GTEST_API_ FilePath GetCurrentExecutableName(); // The role interface for getting the OS stack trace as a string. class OsStackTraceGetterInterface { public: OsStackTraceGetterInterface() {} virtual ~OsStackTraceGetterInterface() {} // Returns the current OS stack trace as an std::string. Parameters: // // max_depth - the maximum number of stack frames to be included // in the trace. // skip_count - the number of top frames to be skipped; doesn't count // against max_depth. virtual string CurrentStackTrace(int max_depth, int skip_count) = 0; // UponLeavingGTest() should be called immediately before Google Test calls // user code. It saves some information about the current stack that // CurrentStackTrace() will use to find and hide Google Test stack frames. virtual void UponLeavingGTest() = 0; private: GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface); }; // A working implementation of the OsStackTraceGetterInterface interface. class OsStackTraceGetter : public OsStackTraceGetterInterface { public: OsStackTraceGetter() : caller_frame_(NULL) {} virtual string CurrentStackTrace(int max_depth, int skip_count) GTEST_LOCK_EXCLUDED_(mutex_); virtual void UponLeavingGTest() GTEST_LOCK_EXCLUDED_(mutex_); // This string is inserted in place of stack frames that are part of // Google Test's implementation. static const char* const kElidedFramesMarker; private: Mutex mutex_; // protects all internal state // We save the stack frame below the frame that calls user code. // We do this because the address of the frame immediately below // the user code changes between the call to UponLeavingGTest() // and any calls to CurrentStackTrace() from within the user code. void* caller_frame_; GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter); }; // Information about a Google Test trace point. struct TraceInfo { const char* file; int line; std::string message; }; // This is the default global test part result reporter used in UnitTestImpl. // This class should only be used by UnitTestImpl. class DefaultGlobalTestPartResultReporter : public TestPartResultReporterInterface { public: explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test); // Implements the TestPartResultReporterInterface. Reports the test part // result in the current test. virtual void ReportTestPartResult(const TestPartResult& result); private: UnitTestImpl* const unit_test_; GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter); }; // This is the default per thread test part result reporter used in // UnitTestImpl. This class should only be used by UnitTestImpl. class DefaultPerThreadTestPartResultReporter : public TestPartResultReporterInterface { public: explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test); // Implements the TestPartResultReporterInterface. The implementation just // delegates to the current global test part result reporter of *unit_test_. virtual void ReportTestPartResult(const TestPartResult& result); private: UnitTestImpl* const unit_test_; GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter); }; // The private implementation of the UnitTest class. We don't protect // the methods under a mutex, as this class is not accessible by a // user and the UnitTest class that delegates work to this class does // proper locking. class GTEST_API_ UnitTestImpl { public: explicit UnitTestImpl(UnitTest* parent); virtual ~UnitTestImpl(); // There are two different ways to register your own TestPartResultReporter. // You can register your own repoter to listen either only for test results // from the current thread or for results from all threads. // By default, each per-thread test result repoter just passes a new // TestPartResult to the global test result reporter, which registers the // test part result for the currently running test. // Returns the global test part result reporter. TestPartResultReporterInterface* GetGlobalTestPartResultReporter(); // Sets the global test part result reporter. void SetGlobalTestPartResultReporter( TestPartResultReporterInterface* reporter); // Returns the test part result reporter for the current thread. TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread(); // Sets the test part result reporter for the current thread. void SetTestPartResultReporterForCurrentThread( TestPartResultReporterInterface* reporter); // Gets the number of successful test cases. int successful_test_case_count() const; // Gets the number of failed test cases. int failed_test_case_count() const; // Gets the number of all test cases. int total_test_case_count() const; // Gets the number of all test cases that contain at least one test // that should run. int test_case_to_run_count() const; // Gets the number of successful tests. int successful_test_count() const; // Gets the number of failed tests. int failed_test_count() const; // Gets the number of disabled tests that will be reported in the XML report. int reportable_disabled_test_count() const; // Gets the number of disabled tests. int disabled_test_count() const; // Gets the number of tests to be printed in the XML report. int reportable_test_count() const; // Gets the number of all tests. int total_test_count() const; // Gets the number of tests that should run. int test_to_run_count() const; // Gets the time of the test program start, in ms from the start of the // UNIX epoch. TimeInMillis start_timestamp() const { return start_timestamp_; } // Gets the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } // Returns true iff the unit test passed (i.e. all test cases passed). bool Passed() const { return !Failed(); } // Returns true iff the unit test failed (i.e. some test case failed // or something outside of all tests failed). bool Failed() const { return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed(); } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. const TestCase* GetTestCase(int i) const { const int index = GetElementOr(test_case_indices_, i, -1); return index < 0 ? NULL : test_cases_[i]; } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. TestCase* GetMutableTestCase(int i) { const int index = GetElementOr(test_case_indices_, i, -1); return index < 0 ? NULL : test_cases_[index]; } // Provides access to the event listener list. TestEventListeners* listeners() { return &listeners_; } // Returns the TestResult for the test that's currently running, or // the TestResult for the ad hoc test if no test is running. TestResult* current_test_result(); // Returns the TestResult for the ad hoc test. const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; } // Sets the OS stack trace getter. // // Does nothing if the input and the current OS stack trace getter // are the same; otherwise, deletes the old getter and makes the // input the current getter. void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter); // Returns the current OS stack trace getter if it is not NULL; // otherwise, creates an OsStackTraceGetter, makes it the current // getter, and returns it. OsStackTraceGetterInterface* os_stack_trace_getter(); // Returns the current OS stack trace as an std::string. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // CurrentOsStackTraceExceptTop(1), Foo() will be included in the // trace but Bar() and CurrentOsStackTraceExceptTop() won't. std::string CurrentOsStackTraceExceptTop(int skip_count) GTEST_NO_INLINE_; // Finds and returns a TestCase with the given name. If one doesn't // exist, creates one and returns it. // // Arguments: // // test_case_name: name of the test case // type_param: the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase* GetTestCase(const char* test_case_name, const char* type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc); // Adds a TestInfo to the unit test. // // Arguments: // // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case // test_info: the TestInfo object void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc, TestInfo* test_info) { // In order to support thread-safe death tests, we need to // remember the original working directory when the test program // was first invoked. We cannot do this in RUN_ALL_TESTS(), as // the user may have changed the current directory before calling // RUN_ALL_TESTS(). Therefore we capture the current directory in // AddTestInfo(), which is called to register a TEST or TEST_F // before main() is reached. if (original_working_dir_.IsEmpty()) { original_working_dir_.Set(FilePath::GetCurrentDir()); GTEST_CHECK_(!original_working_dir_.IsEmpty()) << "Failed to get the current working directory."; } GetTestCase(test_info->test_case_name(), test_info->type_param(), set_up_tc, tear_down_tc)->AddTestInfo(test_info); } #if GTEST_HAS_PARAM_TEST // Returns ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. internal::ParameterizedTestCaseRegistry& parameterized_test_registry() { return parameterized_test_registry_; } #endif // GTEST_HAS_PARAM_TEST // Sets the TestCase object for the test that's currently running. void set_current_test_case(TestCase* a_current_test_case) { current_test_case_ = a_current_test_case; } // Sets the TestInfo object for the test that's currently running. If // current_test_info is NULL, the assertion results will be stored in // ad_hoc_test_result_. void set_current_test_info(TestInfo* a_current_test_info) { current_test_info_ = a_current_test_info; } // Registers all parameterized tests defined using TEST_P and // INSTANTIATE_TEST_CASE_P, creating regular tests for each test/parameter // combination. This method can be called more then once; it has guards // protecting from registering the tests more then once. If // value-parameterized tests are disabled, RegisterParameterizedTests is // present but does nothing. void RegisterParameterizedTests(); // Runs all tests in this UnitTest object, prints the result, and // returns true if all tests are successful. If any exception is // thrown during a test, this test is considered to be failed, but // the rest of the tests will still be run. bool RunAllTests(); // Clears the results of all tests, except the ad hoc tests. void ClearNonAdHocTestResult() { ForEach(test_cases_, TestCase::ClearTestCaseResult); } // Clears the results of ad-hoc test assertions. void ClearAdHocTestResult() { ad_hoc_test_result_.Clear(); } // Adds a TestProperty to the current TestResult object when invoked in a // context of a test or a test case, or to the global property set. If the // result already contains a property with the same key, the value will be // updated. void RecordProperty(const TestProperty& test_property); enum ReactionToSharding { HONOR_SHARDING_PROTOCOL, IGNORE_SHARDING_PROTOCOL }; // Matches the full name of each test against the user-specified // filter to decide whether the test should run, then records the // result in each TestCase and TestInfo object. // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests // based on sharding variables in the environment. // Returns the number of tests that should run. int FilterTests(ReactionToSharding shard_tests); // Prints the names of the tests matching the user-specified filter flag. void ListTestsMatchingFilter(); const TestCase* current_test_case() const { return current_test_case_; } TestInfo* current_test_info() { return current_test_info_; } const TestInfo* current_test_info() const { return current_test_info_; } // Returns the vector of environments that need to be set-up/torn-down // before/after the tests are run. std::vector& environments() { return environments_; } // Getters for the per-thread Google Test trace stack. std::vector& gtest_trace_stack() { return *(gtest_trace_stack_.pointer()); } const std::vector& gtest_trace_stack() const { return gtest_trace_stack_.get(); } #if GTEST_HAS_DEATH_TEST void InitDeathTestSubprocessControlInfo() { internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag()); } // Returns a pointer to the parsed --gtest_internal_run_death_test // flag, or NULL if that flag was not specified. // This information is useful only in a death test child process. // Must not be called before a call to InitGoogleTest. const InternalRunDeathTestFlag* internal_run_death_test_flag() const { return internal_run_death_test_flag_.get(); } // Returns a pointer to the current death test factory. internal::DeathTestFactory* death_test_factory() { return death_test_factory_.get(); } void SuppressTestEventsIfInSubprocess(); friend class ReplaceDeathTestFactory; #endif // GTEST_HAS_DEATH_TEST // Initializes the event listener performing XML output as specified by // UnitTestOptions. Must not be called before InitGoogleTest. void ConfigureXmlOutput(); #if GTEST_CAN_STREAM_RESULTS_ // Initializes the event listener for streaming test results to a socket. // Must not be called before InitGoogleTest. void ConfigureStreamingOutput(); #endif // Performs initialization dependent upon flag values obtained in // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest // this function is also called from RunAllTests. Since this function can be // called more than once, it has to be idempotent. void PostFlagParsingInit(); // Gets the random seed used at the start of the current test iteration. int random_seed() const { return random_seed_; } // Gets the random number generator. internal::Random* random() { return &random_; } // Shuffles all test cases, and the tests within each test case, // making sure that death tests are still run first. void ShuffleTests(); // Restores the test cases and tests to their order before the first shuffle. void UnshuffleTests(); // Returns the value of GTEST_FLAG(catch_exceptions) at the moment // UnitTest::Run() starts. bool catch_exceptions() const { return catch_exceptions_; } private: friend class ::testing::UnitTest; // Used by UnitTest::Run() to capture the state of // GTEST_FLAG(catch_exceptions) at the moment it starts. void set_catch_exceptions(bool value) { catch_exceptions_ = value; } // The UnitTest object that owns this implementation object. UnitTest* const parent_; // The working directory when the first TEST() or TEST_F() was // executed. internal::FilePath original_working_dir_; // The default test part result reporters. DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_; DefaultPerThreadTestPartResultReporter default_per_thread_test_part_result_reporter_; // Points to (but doesn't own) the global test part result reporter. TestPartResultReporterInterface* global_test_part_result_repoter_; // Protects read and write access to global_test_part_result_reporter_. internal::Mutex global_test_part_result_reporter_mutex_; // Points to (but doesn't own) the per-thread test part result reporter. internal::ThreadLocal per_thread_test_part_result_reporter_; // The vector of environments that need to be set-up/torn-down // before/after the tests are run. std::vector environments_; // The vector of TestCases in their original order. It owns the // elements in the vector. std::vector test_cases_; // Provides a level of indirection for the test case list to allow // easy shuffling and restoring the test case order. The i-th // element of this vector is the index of the i-th test case in the // shuffled order. std::vector test_case_indices_; #if GTEST_HAS_PARAM_TEST // ParameterizedTestRegistry object used to register value-parameterized // tests. internal::ParameterizedTestCaseRegistry parameterized_test_registry_; // Indicates whether RegisterParameterizedTests() has been called already. bool parameterized_tests_registered_; #endif // GTEST_HAS_PARAM_TEST // Index of the last death test case registered. Initially -1. int last_death_test_case_; // This points to the TestCase for the currently running test. It // changes as Google Test goes through one test case after another. // When no test is running, this is set to NULL and Google Test // stores assertion results in ad_hoc_test_result_. Initially NULL. TestCase* current_test_case_; // This points to the TestInfo for the currently running test. It // changes as Google Test goes through one test after another. When // no test is running, this is set to NULL and Google Test stores // assertion results in ad_hoc_test_result_. Initially NULL. TestInfo* current_test_info_; // Normally, a user only writes assertions inside a TEST or TEST_F, // or inside a function called by a TEST or TEST_F. Since Google // Test keeps track of which test is current running, it can // associate such an assertion with the test it belongs to. // // If an assertion is encountered when no TEST or TEST_F is running, // Google Test attributes the assertion result to an imaginary "ad hoc" // test, and records the result in ad_hoc_test_result_. TestResult ad_hoc_test_result_; // The list of event listeners that can be used to track events inside // Google Test. TestEventListeners listeners_; // The OS stack trace getter. Will be deleted when the UnitTest // object is destructed. By default, an OsStackTraceGetter is used, // but the user can set this field to use a custom getter if that is // desired. OsStackTraceGetterInterface* os_stack_trace_getter_; // True iff PostFlagParsingInit() has been called. bool post_flag_parse_init_performed_; // The random number seed used at the beginning of the test run. int random_seed_; // Our random number generator. internal::Random random_; // The time of the test program start, in ms from the start of the // UNIX epoch. TimeInMillis start_timestamp_; // How long the test took to run, in milliseconds. TimeInMillis elapsed_time_; #if GTEST_HAS_DEATH_TEST // The decomposed components of the gtest_internal_run_death_test flag, // parsed when RUN_ALL_TESTS is called. internal::scoped_ptr internal_run_death_test_flag_; internal::scoped_ptr death_test_factory_; #endif // GTEST_HAS_DEATH_TEST // A per-thread stack of traces created by the SCOPED_TRACE() macro. internal::ThreadLocal > gtest_trace_stack_; // The value of GTEST_FLAG(catch_exceptions) at the moment RunAllTests() // starts. bool catch_exceptions_; GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl); }; // class UnitTestImpl // Convenience function for accessing the global UnitTest // implementation object. inline UnitTestImpl* GetUnitTestImpl() { return UnitTest::GetInstance()->impl(); } #if GTEST_USES_SIMPLE_RE // Internal helper functions for implementing the simple regular // expression matcher. GTEST_API_ bool IsInSet(char ch, const char* str); GTEST_API_ bool IsAsciiDigit(char ch); GTEST_API_ bool IsAsciiPunct(char ch); GTEST_API_ bool IsRepeat(char ch); GTEST_API_ bool IsAsciiWhiteSpace(char ch); GTEST_API_ bool IsAsciiWordChar(char ch); GTEST_API_ bool IsValidEscape(char ch); GTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch); GTEST_API_ bool ValidateRegex(const char* regex); GTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str); GTEST_API_ bool MatchRepetitionAndRegexAtHead( bool escaped, char ch, char repeat, const char* regex, const char* str); GTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str); #endif // GTEST_USES_SIMPLE_RE // Parses the command line for Google Test flags, without initializing // other parts of Google Test. GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, char** argv); GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv); #if GTEST_HAS_DEATH_TEST // Returns the message describing the last system error, regardless of the // platform. GTEST_API_ std::string GetLastErrnoDescription(); # if GTEST_OS_WINDOWS // Provides leak-safe Windows kernel handle ownership. class AutoHandle { public: AutoHandle() : handle_(INVALID_HANDLE_VALUE) {} explicit AutoHandle(HANDLE handle) : handle_(handle) {} ~AutoHandle() { Reset(); } HANDLE Get() const { return handle_; } void Reset() { Reset(INVALID_HANDLE_VALUE); } void Reset(HANDLE handle) { if (handle != handle_) { if (handle_ != INVALID_HANDLE_VALUE) ::CloseHandle(handle_); handle_ = handle; } } private: HANDLE handle_; GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle); }; # endif // GTEST_OS_WINDOWS // Attempts to parse a string into a positive integer pointed to by the // number parameter. Returns true if that is possible. // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use // it here. template bool ParseNaturalNumber(const ::std::string& str, Integer* number) { // Fail fast if the given string does not begin with a digit; // this bypasses strtoXXX's "optional leading whitespace and plus // or minus sign" semantics, which are undesirable here. if (str.empty() || !IsDigit(str[0])) { return false; } errno = 0; char* end; // BiggestConvertible is the largest integer type that system-provided // string-to-number conversion routines can return. # if GTEST_OS_WINDOWS && !defined(__GNUC__) // MSVC and C++ Builder define __int64 instead of the standard long long. typedef unsigned __int64 BiggestConvertible; const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10); # else typedef unsigned long long BiggestConvertible; // NOLINT const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); # endif // GTEST_OS_WINDOWS && !defined(__GNUC__) const bool parse_success = *end == '\0' && errno == 0; // TODO(vladl@google.com): Convert this to compile time assertion when it is // available. GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed)); const Integer result = static_cast(parsed); if (parse_success && static_cast(result) == parsed) { *number = result; return true; } return false; } #endif // GTEST_HAS_DEATH_TEST // TestResult contains some private methods that should be hidden from // Google Test user but are required for testing. This class allow our tests // to access them. // // This class is supplied only for the purpose of testing Google Test's own // constructs. Do not use it in user tests, either directly or indirectly. class TestResultAccessor { public: static void RecordProperty(TestResult* test_result, const std::string& xml_element, const TestProperty& property) { test_result->RecordProperty(xml_element, property); } static void ClearTestPartResults(TestResult* test_result) { test_result->ClearTestPartResults(); } static const std::vector& test_part_results( const TestResult& test_result) { return test_result.test_part_results(); } }; #if GTEST_CAN_STREAM_RESULTS_ // Streams test results to the given port on the given host machine. class StreamingListener : public EmptyTestEventListener { public: // Abstract base class for writing strings to a socket. class AbstractSocketWriter { public: virtual ~AbstractSocketWriter() {} // Sends a string to the socket. virtual void Send(const string& message) = 0; // Closes the socket. virtual void CloseConnection() {} // Sends a string and a newline to the socket. void SendLn(const string& message) { Send(message + "\n"); } }; // Concrete class for actually writing strings to a socket. class SocketWriter : public AbstractSocketWriter { public: SocketWriter(const string& host, const string& port) : sockfd_(-1), host_name_(host), port_num_(port) { MakeConnection(); } virtual ~SocketWriter() { if (sockfd_ != -1) CloseConnection(); } // Sends a string to the socket. virtual void Send(const string& message) { GTEST_CHECK_(sockfd_ != -1) << "Send() can be called only when there is a connection."; const int len = static_cast(message.length()); if (write(sockfd_, message.c_str(), len) != len) { GTEST_LOG_(WARNING) << "stream_result_to: failed to stream to " << host_name_ << ":" << port_num_; } } private: // Creates a client socket and connects to the server. void MakeConnection(); // Closes the socket. void CloseConnection() { GTEST_CHECK_(sockfd_ != -1) << "CloseConnection() can be called only when there is a connection."; close(sockfd_); sockfd_ = -1; } int sockfd_; // socket file descriptor const string host_name_; const string port_num_; GTEST_DISALLOW_COPY_AND_ASSIGN_(SocketWriter); }; // class SocketWriter // Escapes '=', '&', '%', and '\n' characters in str as "%xx". static string UrlEncode(const char* str); StreamingListener(const string& host, const string& port) : socket_writer_(new SocketWriter(host, port)) { Start(); } explicit StreamingListener(AbstractSocketWriter* socket_writer) : socket_writer_(socket_writer) { Start(); } void OnTestProgramStart(const UnitTest& /* unit_test */) { SendLn("event=TestProgramStart"); } void OnTestProgramEnd(const UnitTest& unit_test) { // Note that Google Test current only report elapsed time for each // test iteration, not for the entire test program. SendLn("event=TestProgramEnd&passed=" + FormatBool(unit_test.Passed())); // Notify the streaming server to stop. socket_writer_->CloseConnection(); } void OnTestIterationStart(const UnitTest& /* unit_test */, int iteration) { SendLn("event=TestIterationStart&iteration=" + StreamableToString(iteration)); } void OnTestIterationEnd(const UnitTest& unit_test, int /* iteration */) { SendLn("event=TestIterationEnd&passed=" + FormatBool(unit_test.Passed()) + "&elapsed_time=" + StreamableToString(unit_test.elapsed_time()) + "ms"); } void OnTestCaseStart(const TestCase& test_case) { SendLn(std::string("event=TestCaseStart&name=") + test_case.name()); } void OnTestCaseEnd(const TestCase& test_case) { SendLn("event=TestCaseEnd&passed=" + FormatBool(test_case.Passed()) + "&elapsed_time=" + StreamableToString(test_case.elapsed_time()) + "ms"); } void OnTestStart(const TestInfo& test_info) { SendLn(std::string("event=TestStart&name=") + test_info.name()); } void OnTestEnd(const TestInfo& test_info) { SendLn("event=TestEnd&passed=" + FormatBool((test_info.result())->Passed()) + "&elapsed_time=" + StreamableToString((test_info.result())->elapsed_time()) + "ms"); } void OnTestPartResult(const TestPartResult& test_part_result) { const char* file_name = test_part_result.file_name(); if (file_name == NULL) file_name = ""; SendLn("event=TestPartResult&file=" + UrlEncode(file_name) + "&line=" + StreamableToString(test_part_result.line_number()) + "&message=" + UrlEncode(test_part_result.message())); } private: // Sends the given message and a newline to the socket. void SendLn(const string& message) { socket_writer_->SendLn(message); } // Called at the start of streaming to notify the receiver what // protocol we are using. void Start() { SendLn("gtest_streaming_protocol_version=1.0"); } string FormatBool(bool value) { return value ? "1" : "0"; } const scoped_ptr socket_writer_; GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamingListener); }; // class StreamingListener #endif // GTEST_CAN_STREAM_RESULTS_ } // namespace internal } // namespace testing #endif // GTEST_SRC_GTEST_INTERNAL_INL_H_ #undef GTEST_IMPLEMENTATION_ #if GTEST_OS_WINDOWS # define vsnprintf _vsnprintf #endif // GTEST_OS_WINDOWS namespace testing { using internal::CountIf; using internal::ForEach; using internal::GetElementOr; using internal::Shuffle; // Constants. // A test whose test case name or test name matches this filter is // disabled and not run. static const char kDisableTestFilter[] = "DISABLED_*:*/DISABLED_*"; // A test case whose name matches this filter is considered a death // test case and will be run before test cases whose name doesn't // match this filter. static const char kDeathTestCaseFilter[] = "*DeathTest:*DeathTest/*"; // A test filter that matches everything. static const char kUniversalFilter[] = "*"; // The default output file for XML output. static const char kDefaultOutputFile[] = "test_detail.xml"; // The environment variable name for the test shard index. static const char kTestShardIndex[] = "GTEST_SHARD_INDEX"; // The environment variable name for the total number of test shards. static const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS"; // The environment variable name for the test shard status file. static const char kTestShardStatusFile[] = "GTEST_SHARD_STATUS_FILE"; namespace internal { // The text used in failure messages to indicate the start of the // stack trace. const char kStackTraceMarker[] = "\nStack trace:\n"; // g_help_flag is true iff the --help flag or an equivalent form is // specified on the command line. bool g_help_flag = false; } // namespace internal static const char* GetDefaultFilter() { return kUniversalFilter; } GTEST_DEFINE_bool_( also_run_disabled_tests, internal::BoolFromGTestEnv("also_run_disabled_tests", false), "Run disabled tests too, in addition to the tests normally being run."); GTEST_DEFINE_bool_( break_on_failure, internal::BoolFromGTestEnv("break_on_failure", false), "True iff a failed assertion should be a debugger break-point."); GTEST_DEFINE_bool_( catch_exceptions, internal::BoolFromGTestEnv("catch_exceptions", true), "True iff " GTEST_NAME_ " should catch exceptions and treat them as test failures."); GTEST_DEFINE_string_( color, internal::StringFromGTestEnv("color", "auto"), "Whether to use colors in the output. Valid values: yes, no, " "and auto. 'auto' means to use colors if the output is " "being sent to a terminal and the TERM environment variable " "is set to a terminal type that supports colors."); GTEST_DEFINE_string_( filter, internal::StringFromGTestEnv("filter", GetDefaultFilter()), "A colon-separated list of glob (not regex) patterns " "for filtering the tests to run, optionally followed by a " "'-' and a : separated list of negative patterns (tests to " "exclude). A test is run if it matches one of the positive " "patterns and does not match any of the negative patterns."); GTEST_DEFINE_bool_(list_tests, false, "List all tests without running them."); GTEST_DEFINE_string_( output, internal::StringFromGTestEnv("output", ""), "A format (currently must be \"xml\"), optionally followed " "by a colon and an output file name or directory. A directory " "is indicated by a trailing pathname separator. " "Examples: \"xml:filename.xml\", \"xml::directoryname/\". " "If a directory is specified, output files will be created " "within that directory, with file-names based on the test " "executable's name and, if necessary, made unique by adding " "digits."); GTEST_DEFINE_bool_( print_time, internal::BoolFromGTestEnv("print_time", true), "True iff " GTEST_NAME_ " should display elapsed time in text output."); GTEST_DEFINE_int32_( random_seed, internal::Int32FromGTestEnv("random_seed", 0), "Random number seed to use when shuffling test orders. Must be in range " "[1, 99999], or 0 to use a seed based on the current time."); GTEST_DEFINE_int32_( repeat, internal::Int32FromGTestEnv("repeat", 1), "How many times to repeat each test. Specify a negative number " "for repeating forever. Useful for shaking out flaky tests."); GTEST_DEFINE_bool_( show_internal_stack_frames, false, "True iff " GTEST_NAME_ " should include internal stack frames when " "printing test failure stack traces."); GTEST_DEFINE_bool_( shuffle, internal::BoolFromGTestEnv("shuffle", false), "True iff " GTEST_NAME_ " should randomize tests' order on every run."); GTEST_DEFINE_int32_( stack_trace_depth, internal::Int32FromGTestEnv("stack_trace_depth", kMaxStackTraceDepth), "The maximum number of stack frames to print when an " "assertion fails. The valid range is 0 through 100, inclusive."); GTEST_DEFINE_string_( stream_result_to, internal::StringFromGTestEnv("stream_result_to", ""), "This flag specifies the host name and the port number on which to stream " "test results. Example: \"localhost:555\". The flag is effective only on " "Linux."); GTEST_DEFINE_bool_( throw_on_failure, internal::BoolFromGTestEnv("throw_on_failure", false), "When this flag is specified, a failed assertion will throw an exception " "if exceptions are enabled or exit the program with a non-zero code " "otherwise."); namespace internal { // Generates a random number from [0, range), using a Linear // Congruential Generator (LCG). Crashes if 'range' is 0 or greater // than kMaxRange. UInt32 Random::Generate(UInt32 range) { // These constants are the same as are used in glibc's rand(3). state_ = (1103515245U*state_ + 12345U) % kMaxRange; GTEST_CHECK_(range > 0) << "Cannot generate a number in the range [0, 0)."; GTEST_CHECK_(range <= kMaxRange) << "Generation of a number in [0, " << range << ") was requested, " << "but this can only generate numbers in [0, " << kMaxRange << ")."; // Converting via modulus introduces a bit of downward bias, but // it's simple, and a linear congruential generator isn't too good // to begin with. return state_ % range; } // GTestIsInitialized() returns true iff the user has initialized // Google Test. Useful for catching the user mistake of not initializing // Google Test before calling RUN_ALL_TESTS(). // // A user must call testing::InitGoogleTest() to initialize Google // Test. g_init_gtest_count is set to the number of times // InitGoogleTest() has been called. We don't protect this variable // under a mutex as it is only accessed in the main thread. GTEST_API_ int g_init_gtest_count = 0; static bool GTestIsInitialized() { return g_init_gtest_count != 0; } // Iterates over a vector of TestCases, keeping a running sum of the // results of calling a given int-returning method on each. // Returns the sum. static int SumOverTestCaseList(const std::vector& case_list, int (TestCase::*method)() const) { int sum = 0; for (size_t i = 0; i < case_list.size(); i++) { sum += (case_list[i]->*method)(); } return sum; } // Returns true iff the test case passed. static bool TestCasePassed(const TestCase* test_case) { return test_case->should_run() && test_case->Passed(); } // Returns true iff the test case failed. static bool TestCaseFailed(const TestCase* test_case) { return test_case->should_run() && test_case->Failed(); } // Returns true iff test_case contains at least one test that should // run. static bool ShouldRunTestCase(const TestCase* test_case) { return test_case->should_run(); } // AssertHelper constructor. AssertHelper::AssertHelper(TestPartResult::Type type, const char* file, int line, const char* message) : data_(new AssertHelperData(type, file, line, message)) { } AssertHelper::~AssertHelper() { delete data_; } // Message assignment, for assertion streaming support. void AssertHelper::operator=(const Message& message) const { UnitTest::GetInstance()-> AddTestPartResult(data_->type, data_->file, data_->line, AppendUserMessage(data_->message, message), UnitTest::GetInstance()->impl() ->CurrentOsStackTraceExceptTop(1) // Skips the stack frame for this function itself. ); // NOLINT } // Mutex for linked pointers. GTEST_API_ GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex); // Application pathname gotten in InitGoogleTest. std::string g_executable_path; // Returns the current application's name, removing directory path if that // is present. FilePath GetCurrentExecutableName() { FilePath result; #if GTEST_OS_WINDOWS result.Set(FilePath(g_executable_path).RemoveExtension("exe")); #else result.Set(FilePath(g_executable_path)); #endif // GTEST_OS_WINDOWS return result.RemoveDirectoryName(); } // Functions for processing the gtest_output flag. // Returns the output format, or "" for normal printed output. std::string UnitTestOptions::GetOutputFormat() { const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); if (gtest_output_flag == NULL) return std::string(""); const char* const colon = strchr(gtest_output_flag, ':'); return (colon == NULL) ? std::string(gtest_output_flag) : std::string(gtest_output_flag, colon - gtest_output_flag); } // Returns the name of the requested output file, or the default if none // was explicitly specified. std::string UnitTestOptions::GetAbsolutePathToOutputFile() { const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); if (gtest_output_flag == NULL) return ""; const char* const colon = strchr(gtest_output_flag, ':'); if (colon == NULL) return internal::FilePath::ConcatPaths( internal::FilePath( UnitTest::GetInstance()->original_working_dir()), internal::FilePath(kDefaultOutputFile)).string(); internal::FilePath output_name(colon + 1); if (!output_name.IsAbsolutePath()) // TODO(wan@google.com): on Windows \some\path is not an absolute // path (as its meaning depends on the current drive), yet the // following logic for turning it into an absolute path is wrong. // Fix it. output_name = internal::FilePath::ConcatPaths( internal::FilePath(UnitTest::GetInstance()->original_working_dir()), internal::FilePath(colon + 1)); if (!output_name.IsDirectory()) return output_name.string(); internal::FilePath result(internal::FilePath::GenerateUniqueFileName( output_name, internal::GetCurrentExecutableName(), GetOutputFormat().c_str())); return result.string(); } // Returns true iff the wildcard pattern matches the string. The // first ':' or '\0' character in pattern marks the end of it. // // This recursive algorithm isn't very efficient, but is clear and // works well enough for matching test names, which are short. bool UnitTestOptions::PatternMatchesString(const char *pattern, const char *str) { switch (*pattern) { case '\0': case ':': // Either ':' or '\0' marks the end of the pattern. return *str == '\0'; case '?': // Matches any single character. return *str != '\0' && PatternMatchesString(pattern + 1, str + 1); case '*': // Matches any string (possibly empty) of characters. return (*str != '\0' && PatternMatchesString(pattern, str + 1)) || PatternMatchesString(pattern + 1, str); default: // Non-special character. Matches itself. return *pattern == *str && PatternMatchesString(pattern + 1, str + 1); } } bool UnitTestOptions::MatchesFilter( const std::string& name, const char* filter) { const char *cur_pattern = filter; for (;;) { if (PatternMatchesString(cur_pattern, name.c_str())) { return true; } // Finds the next pattern in the filter. cur_pattern = strchr(cur_pattern, ':'); // Returns if no more pattern can be found. if (cur_pattern == NULL) { return false; } // Skips the pattern separater (the ':' character). cur_pattern++; } } // Returns true iff the user-specified filter matches the test case // name and the test name. bool UnitTestOptions::FilterMatchesTest(const std::string &test_case_name, const std::string &test_name) { const std::string& full_name = test_case_name + "." + test_name.c_str(); // Split --gtest_filter at '-', if there is one, to separate into // positive filter and negative filter portions const char* const p = GTEST_FLAG(filter).c_str(); const char* const dash = strchr(p, '-'); std::string positive; std::string negative; if (dash == NULL) { positive = GTEST_FLAG(filter).c_str(); // Whole string is a positive filter negative = ""; } else { positive = std::string(p, dash); // Everything up to the dash negative = std::string(dash + 1); // Everything after the dash if (positive.empty()) { // Treat '-test1' as the same as '*-test1' positive = kUniversalFilter; } } // A filter is a colon-separated list of patterns. It matches a // test if any pattern in it matches the test. return (MatchesFilter(full_name, positive.c_str()) && !MatchesFilter(full_name, negative.c_str())); } #if GTEST_HAS_SEH // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. // This function is useful as an __except condition. int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) { // Google Test should handle a SEH exception if: // 1. the user wants it to, AND // 2. this is not a breakpoint exception, AND // 3. this is not a C++ exception (VC++ implements them via SEH, // apparently). // // SEH exception code for C++ exceptions. // (see http://support.microsoft.com/kb/185294 for more information). const DWORD kCxxExceptionCode = 0xe06d7363; bool should_handle = true; if (!GTEST_FLAG(catch_exceptions)) should_handle = false; else if (exception_code == EXCEPTION_BREAKPOINT) should_handle = false; else if (exception_code == kCxxExceptionCode) should_handle = false; return should_handle ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH; } #endif // GTEST_HAS_SEH } // namespace internal // The c'tor sets this object as the test part result reporter used by // Google Test. The 'result' parameter specifies where to report the // results. Intercepts only failures from the current thread. ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( TestPartResultArray* result) : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD), result_(result) { Init(); } // The c'tor sets this object as the test part result reporter used by // Google Test. The 'result' parameter specifies where to report the // results. ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( InterceptMode intercept_mode, TestPartResultArray* result) : intercept_mode_(intercept_mode), result_(result) { Init(); } void ScopedFakeTestPartResultReporter::Init() { internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); if (intercept_mode_ == INTERCEPT_ALL_THREADS) { old_reporter_ = impl->GetGlobalTestPartResultReporter(); impl->SetGlobalTestPartResultReporter(this); } else { old_reporter_ = impl->GetTestPartResultReporterForCurrentThread(); impl->SetTestPartResultReporterForCurrentThread(this); } } // The d'tor restores the test part result reporter used by Google Test // before. ScopedFakeTestPartResultReporter::~ScopedFakeTestPartResultReporter() { internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); if (intercept_mode_ == INTERCEPT_ALL_THREADS) { impl->SetGlobalTestPartResultReporter(old_reporter_); } else { impl->SetTestPartResultReporterForCurrentThread(old_reporter_); } } // Increments the test part result count and remembers the result. // This method is from the TestPartResultReporterInterface interface. void ScopedFakeTestPartResultReporter::ReportTestPartResult( const TestPartResult& result) { result_->Append(result); } namespace internal { // Returns the type ID of ::testing::Test. We should always call this // instead of GetTypeId< ::testing::Test>() to get the type ID of // testing::Test. This is to work around a suspected linker bug when // using Google Test as a framework on Mac OS X. The bug causes // GetTypeId< ::testing::Test>() to return different values depending // on whether the call is from the Google Test framework itself or // from user test code. GetTestTypeId() is guaranteed to always // return the same value, as it always calls GetTypeId<>() from the // gtest.cc, which is within the Google Test framework. TypeId GetTestTypeId() { return GetTypeId(); } // The value of GetTestTypeId() as seen from within the Google Test // library. This is solely for testing GetTestTypeId(). extern const TypeId kTestTypeIdInGoogleTest = GetTestTypeId(); // This predicate-formatter checks that 'results' contains a test part // failure of the given type and that the failure message contains the // given substring. AssertionResult HasOneFailure(const char* /* results_expr */, const char* /* type_expr */, const char* /* substr_expr */, const TestPartResultArray& results, TestPartResult::Type type, const string& substr) { const std::string expected(type == TestPartResult::kFatalFailure ? "1 fatal failure" : "1 non-fatal failure"); Message msg; if (results.size() != 1) { msg << "Expected: " << expected << "\n" << " Actual: " << results.size() << " failures"; for (int i = 0; i < results.size(); i++) { msg << "\n" << results.GetTestPartResult(i); } return AssertionFailure() << msg; } const TestPartResult& r = results.GetTestPartResult(0); if (r.type() != type) { return AssertionFailure() << "Expected: " << expected << "\n" << " Actual:\n" << r; } if (strstr(r.message(), substr.c_str()) == NULL) { return AssertionFailure() << "Expected: " << expected << " containing \"" << substr << "\"\n" << " Actual:\n" << r; } return AssertionSuccess(); } // The constructor of SingleFailureChecker remembers where to look up // test part results, what type of failure we expect, and what // substring the failure message should contain. SingleFailureChecker:: SingleFailureChecker( const TestPartResultArray* results, TestPartResult::Type type, const string& substr) : results_(results), type_(type), substr_(substr) {} // The destructor of SingleFailureChecker verifies that the given // TestPartResultArray contains exactly one failure that has the given // type and contains the given substring. If that's not the case, a // non-fatal failure will be generated. SingleFailureChecker::~SingleFailureChecker() { EXPECT_PRED_FORMAT3(HasOneFailure, *results_, type_, substr_); } DefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter( UnitTestImpl* unit_test) : unit_test_(unit_test) {} void DefaultGlobalTestPartResultReporter::ReportTestPartResult( const TestPartResult& result) { unit_test_->current_test_result()->AddTestPartResult(result); unit_test_->listeners()->repeater()->OnTestPartResult(result); } DefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter( UnitTestImpl* unit_test) : unit_test_(unit_test) {} void DefaultPerThreadTestPartResultReporter::ReportTestPartResult( const TestPartResult& result) { unit_test_->GetGlobalTestPartResultReporter()->ReportTestPartResult(result); } // Returns the global test part result reporter. TestPartResultReporterInterface* UnitTestImpl::GetGlobalTestPartResultReporter() { internal::MutexLock lock(&global_test_part_result_reporter_mutex_); return global_test_part_result_repoter_; } // Sets the global test part result reporter. void UnitTestImpl::SetGlobalTestPartResultReporter( TestPartResultReporterInterface* reporter) { internal::MutexLock lock(&global_test_part_result_reporter_mutex_); global_test_part_result_repoter_ = reporter; } // Returns the test part result reporter for the current thread. TestPartResultReporterInterface* UnitTestImpl::GetTestPartResultReporterForCurrentThread() { return per_thread_test_part_result_reporter_.get(); } // Sets the test part result reporter for the current thread. void UnitTestImpl::SetTestPartResultReporterForCurrentThread( TestPartResultReporterInterface* reporter) { per_thread_test_part_result_reporter_.set(reporter); } // Gets the number of successful test cases. int UnitTestImpl::successful_test_case_count() const { return CountIf(test_cases_, TestCasePassed); } // Gets the number of failed test cases. int UnitTestImpl::failed_test_case_count() const { return CountIf(test_cases_, TestCaseFailed); } // Gets the number of all test cases. int UnitTestImpl::total_test_case_count() const { return static_cast(test_cases_.size()); } // Gets the number of all test cases that contain at least one test // that should run. int UnitTestImpl::test_case_to_run_count() const { return CountIf(test_cases_, ShouldRunTestCase); } // Gets the number of successful tests. int UnitTestImpl::successful_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::successful_test_count); } // Gets the number of failed tests. int UnitTestImpl::failed_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::failed_test_count); } // Gets the number of disabled tests that will be reported in the XML report. int UnitTestImpl::reportable_disabled_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::reportable_disabled_test_count); } // Gets the number of disabled tests. int UnitTestImpl::disabled_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::disabled_test_count); } // Gets the number of tests to be printed in the XML report. int UnitTestImpl::reportable_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::reportable_test_count); } // Gets the number of all tests. int UnitTestImpl::total_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::total_test_count); } // Gets the number of tests that should run. int UnitTestImpl::test_to_run_count() const { return SumOverTestCaseList(test_cases_, &TestCase::test_to_run_count); } // Returns the current OS stack trace as an std::string. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // CurrentOsStackTraceExceptTop(1), Foo() will be included in the // trace but Bar() and CurrentOsStackTraceExceptTop() won't. std::string UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) { (void)skip_count; return ""; } // Returns the current time in milliseconds. TimeInMillis GetTimeInMillis() { #if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__) // Difference between 1970-01-01 and 1601-01-01 in milliseconds. // http://analogous.blogspot.com/2005/04/epoch.html const TimeInMillis kJavaEpochToWinFileTimeDelta = static_cast(116444736UL) * 100000UL; const DWORD kTenthMicrosInMilliSecond = 10000; SYSTEMTIME now_systime; FILETIME now_filetime; ULARGE_INTEGER now_int64; // TODO(kenton@google.com): Shouldn't this just use // GetSystemTimeAsFileTime()? GetSystemTime(&now_systime); if (SystemTimeToFileTime(&now_systime, &now_filetime)) { now_int64.LowPart = now_filetime.dwLowDateTime; now_int64.HighPart = now_filetime.dwHighDateTime; now_int64.QuadPart = (now_int64.QuadPart / kTenthMicrosInMilliSecond) - kJavaEpochToWinFileTimeDelta; return now_int64.QuadPart; } return 0; #elif GTEST_OS_WINDOWS && !GTEST_HAS_GETTIMEOFDAY_ __timeb64 now; # ifdef _MSC_VER // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996 // (deprecated function) there. // TODO(kenton@google.com): Use GetTickCount()? Or use // SystemTimeToFileTime() # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4996) // Temporarily disables warning 4996. _ftime64(&now); # pragma warning(pop) // Restores the warning state. # else _ftime64(&now); # endif // _MSC_VER return static_cast(now.time) * 1000 + now.millitm; #elif GTEST_HAS_GETTIMEOFDAY_ struct timeval now; gettimeofday(&now, NULL); return static_cast(now.tv_sec) * 1000 + now.tv_usec / 1000; #else # error "Don't know how to get the current time on your system." #endif } // Utilities // class String. #if GTEST_OS_WINDOWS_MOBILE // Creates a UTF-16 wide string from the given ANSI string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the wide string, or NULL if the // input is NULL. LPCWSTR String::AnsiToUtf16(const char* ansi) { if (!ansi) return NULL; const int length = strlen(ansi); const int unicode_length = MultiByteToWideChar(CP_ACP, 0, ansi, length, NULL, 0); WCHAR* unicode = new WCHAR[unicode_length + 1]; MultiByteToWideChar(CP_ACP, 0, ansi, length, unicode, unicode_length); unicode[unicode_length] = 0; return unicode; } // Creates an ANSI string from the given wide string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the ANSI string, or NULL if the // input is NULL. const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { if (!utf16_str) return NULL; const int ansi_length = WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, NULL, 0, NULL, NULL); char* ansi = new char[ansi_length + 1]; WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, ansi, ansi_length, NULL, NULL); ansi[ansi_length] = 0; return ansi; } #endif // GTEST_OS_WINDOWS_MOBILE // Compares two C strings. Returns true iff they have the same content. // // Unlike strcmp(), this function can handle NULL argument(s). A NULL // C string is considered different to any non-NULL C string, // including the empty string. bool String::CStringEquals(const char * lhs, const char * rhs) { if ( lhs == NULL ) return rhs == NULL; if ( rhs == NULL ) return false; return strcmp(lhs, rhs) == 0; } #if GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING // Converts an array of wide chars to a narrow string using the UTF-8 // encoding, and streams the result to the given Message object. static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length, Message* msg) { for (size_t i = 0; i != length; ) { // NOLINT if (wstr[i] != L'\0') { *msg << WideStringToUtf8(wstr + i, static_cast(length - i)); while (i != length && wstr[i] != L'\0') i++; } else { *msg << '\0'; i++; } } } #endif // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING } // namespace internal // Constructs an empty Message. // We allocate the stringstream separately because otherwise each use of // ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's // stack frame leading to huge stack frames in some cases; gcc does not reuse // the stack space. Message::Message() : ss_(new ::std::stringstream) { // By default, we want there to be enough precision when printing // a double to a Message. *ss_ << std::setprecision(std::numeric_limits::digits10 + 2); } // These two overloads allow streaming a wide C string to a Message // using the UTF-8 encoding. Message& Message::operator <<(const wchar_t* wide_c_str) { return *this << internal::String::ShowWideCString(wide_c_str); } Message& Message::operator <<(wchar_t* wide_c_str) { return *this << internal::String::ShowWideCString(wide_c_str); } #if GTEST_HAS_STD_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& Message::operator <<(const ::std::wstring& wstr) { internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); return *this; } #endif // GTEST_HAS_STD_WSTRING #if GTEST_HAS_GLOBAL_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& Message::operator <<(const ::wstring& wstr) { internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); return *this; } #endif // GTEST_HAS_GLOBAL_WSTRING // Gets the text streamed to this object so far as an std::string. // Each '\0' character in the buffer is replaced with "\\0". std::string Message::GetString() const { return internal::StringStreamToString(ss_.get()); } // AssertionResult constructors. // Used in EXPECT_TRUE/FALSE(assertion_result). AssertionResult::AssertionResult(const AssertionResult& other) : success_(other.success_), message_(other.message_.get() != NULL ? new ::std::string(*other.message_) : static_cast< ::std::string*>(NULL)) { } // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. AssertionResult AssertionResult::operator!() const { AssertionResult negation(!success_); if (message_.get() != NULL) negation << *message_; return negation; } // Makes a successful assertion result. AssertionResult AssertionSuccess() { return AssertionResult(true); } // Makes a failed assertion result. AssertionResult AssertionFailure() { return AssertionResult(false); } // Makes a failed assertion result with the given failure message. // Deprecated; use AssertionFailure() << message. AssertionResult AssertionFailure(const Message& message) { return AssertionFailure() << message; } namespace internal { // Constructs and returns the message for an equality assertion // (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. // // The first four parameters are the expressions used in the assertion // and their values, as strings. For example, for ASSERT_EQ(foo, bar) // where foo is 5 and bar is 6, we have: // // expected_expression: "foo" // actual_expression: "bar" // expected_value: "5" // actual_value: "6" // // The ignoring_case parameter is true iff the assertion is a // *_STRCASEEQ*. When it's true, the string " (ignoring case)" will // be inserted into the message. AssertionResult EqFailure(const char* expected_expression, const char* actual_expression, const std::string& expected_value, const std::string& actual_value, bool ignoring_case) { Message msg; msg << "Value of: " << actual_expression; if (actual_value != actual_expression) { msg << "\n Actual: " << actual_value; } msg << "\nExpected: " << expected_expression; if (ignoring_case) { msg << " (ignoring case)"; } if (expected_value != expected_expression) { msg << "\nWhich is: " << expected_value; } return AssertionFailure() << msg; } // Constructs a failure message for Boolean assertions such as EXPECT_TRUE. std::string GetBoolAssertionFailureMessage( const AssertionResult& assertion_result, const char* expression_text, const char* actual_predicate_value, const char* expected_predicate_value) { const char* actual_message = assertion_result.message(); Message msg; msg << "Value of: " << expression_text << "\n Actual: " << actual_predicate_value; if (actual_message[0] != '\0') msg << " (" << actual_message << ")"; msg << "\nExpected: " << expected_predicate_value; return msg.GetString(); } // Helper function for implementing ASSERT_NEAR. AssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2, const char* abs_error_expr, double val1, double val2, double abs_error) { const double diff = fabs(val1 - val2); if (diff <= abs_error) return AssertionSuccess(); // TODO(wan): do not print the value of an expression if it's // already a literal. return AssertionFailure() << "The difference between " << expr1 << " and " << expr2 << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n" << expr1 << " evaluates to " << val1 << ",\n" << expr2 << " evaluates to " << val2 << ", and\n" << abs_error_expr << " evaluates to " << abs_error << "."; } // Helper template for implementing FloatLE() and DoubleLE(). template AssertionResult FloatingPointLE(const char* expr1, const char* expr2, RawType val1, RawType val2) { // Returns success if val1 is less than val2, if (val1 < val2) { return AssertionSuccess(); } // or if val1 is almost equal to val2. const FloatingPoint lhs(val1), rhs(val2); if (lhs.AlmostEquals(rhs)) { return AssertionSuccess(); } // Note that the above two checks will both fail if either val1 or // val2 is NaN, as the IEEE floating-point standard requires that // any predicate involving a NaN must return false. ::std::stringstream val1_ss; val1_ss << std::setprecision(std::numeric_limits::digits10 + 2) << val1; ::std::stringstream val2_ss; val2_ss << std::setprecision(std::numeric_limits::digits10 + 2) << val2; return AssertionFailure() << "Expected: (" << expr1 << ") <= (" << expr2 << ")\n" << " Actual: " << StringStreamToString(&val1_ss) << " vs " << StringStreamToString(&val2_ss); } } // namespace internal // Asserts that val1 is less than, or almost equal to, val2. Fails // otherwise. In particular, it fails if either val1 or val2 is NaN. AssertionResult FloatLE(const char* expr1, const char* expr2, float val1, float val2) { return internal::FloatingPointLE(expr1, expr2, val1, val2); } // Asserts that val1 is less than, or almost equal to, val2. Fails // otherwise. In particular, it fails if either val1 or val2 is NaN. AssertionResult DoubleLE(const char* expr1, const char* expr2, double val1, double val2) { return internal::FloatingPointLE(expr1, expr2, val1, val2); } namespace internal { // The helper function for {ASSERT|EXPECT}_EQ with int or enum // arguments. AssertionResult CmpHelperEQ(const char* expected_expression, const char* actual_expression, BiggestInt expected, BiggestInt actual) { if (expected == actual) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, FormatForComparisonFailureMessage(expected, actual), FormatForComparisonFailureMessage(actual, expected), false); } // A macro for implementing the helper functions needed to implement // ASSERT_?? and EXPECT_?? with integer or enum arguments. It is here // just to avoid copy-and-paste of similar code. #define GTEST_IMPL_CMP_HELPER_(op_name, op)\ AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ BiggestInt val1, BiggestInt val2) {\ if (val1 op val2) {\ return AssertionSuccess();\ } else {\ return AssertionFailure() \ << "Expected: (" << expr1 << ") " #op " (" << expr2\ << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ << " vs " << FormatForComparisonFailureMessage(val2, val1);\ }\ } // Implements the helper function for {ASSERT|EXPECT}_NE with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(NE, !=) // Implements the helper function for {ASSERT|EXPECT}_LE with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(LE, <=) // Implements the helper function for {ASSERT|EXPECT}_LT with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(LT, < ) // Implements the helper function for {ASSERT|EXPECT}_GE with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(GE, >=) // Implements the helper function for {ASSERT|EXPECT}_GT with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(GT, > ) #undef GTEST_IMPL_CMP_HELPER_ // The helper function for {ASSERT|EXPECT}_STREQ. AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual) { if (String::CStringEquals(expected, actual)) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, PrintToString(expected), PrintToString(actual), false); } // The helper function for {ASSERT|EXPECT}_STRCASEEQ. AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual) { if (String::CaseInsensitiveCStringEquals(expected, actual)) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, PrintToString(expected), PrintToString(actual), true); } // The helper function for {ASSERT|EXPECT}_STRNE. AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2) { if (!String::CStringEquals(s1, s2)) { return AssertionSuccess(); } else { return AssertionFailure() << "Expected: (" << s1_expression << ") != (" << s2_expression << "), actual: \"" << s1 << "\" vs \"" << s2 << "\""; } } // The helper function for {ASSERT|EXPECT}_STRCASENE. AssertionResult CmpHelperSTRCASENE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2) { if (!String::CaseInsensitiveCStringEquals(s1, s2)) { return AssertionSuccess(); } else { return AssertionFailure() << "Expected: (" << s1_expression << ") != (" << s2_expression << ") (ignoring case), actual: \"" << s1 << "\" vs \"" << s2 << "\""; } } } // namespace internal namespace { // Helper functions for implementing IsSubString() and IsNotSubstring(). // This group of overloaded functions return true iff needle is a // substring of haystack. NULL is considered a substring of itself // only. bool IsSubstringPred(const char* needle, const char* haystack) { if (needle == NULL || haystack == NULL) return needle == haystack; return strstr(haystack, needle) != NULL; } bool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) { if (needle == NULL || haystack == NULL) return needle == haystack; return wcsstr(haystack, needle) != NULL; } // StringType here can be either ::std::string or ::std::wstring. template bool IsSubstringPred(const StringType& needle, const StringType& haystack) { return haystack.find(needle) != StringType::npos; } // This function implements either IsSubstring() or IsNotSubstring(), // depending on the value of the expected_to_be_substring parameter. // StringType here can be const char*, const wchar_t*, ::std::string, // or ::std::wstring. template AssertionResult IsSubstringImpl( bool expected_to_be_substring, const char* needle_expr, const char* haystack_expr, const StringType& needle, const StringType& haystack) { if (IsSubstringPred(needle, haystack) == expected_to_be_substring) return AssertionSuccess(); const bool is_wide_string = sizeof(needle[0]) > 1; const char* const begin_string_quote = is_wide_string ? "L\"" : "\""; return AssertionFailure() << "Value of: " << needle_expr << "\n" << " Actual: " << begin_string_quote << needle << "\"\n" << "Expected: " << (expected_to_be_substring ? "" : "not ") << "a substring of " << haystack_expr << "\n" << "Which is: " << begin_string_quote << haystack << "\""; } } // namespace // IsSubstring() and IsNotSubstring() check whether needle is a // substring of haystack (NULL is considered a substring of itself // only), and return an appropriate error message when they fail. AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } #if GTEST_HAS_STD_WSTRING AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } #endif // GTEST_HAS_STD_WSTRING namespace internal { #if GTEST_OS_WINDOWS namespace { // Helper function for IsHRESULT{SuccessFailure} predicates AssertionResult HRESULTFailureHelper(const char* expr, const char* expected, long hr) { // NOLINT # if GTEST_OS_WINDOWS_MOBILE // Windows CE doesn't support FormatMessage. const char error_text[] = ""; # else // Looks up the human-readable system message for the HRESULT code // and since we're not passing any params to FormatMessage, we don't // want inserts expanded. const DWORD kFlags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS; const DWORD kBufSize = 4096; // Gets the system's human readable message string for this HRESULT. char error_text[kBufSize] = { '\0' }; DWORD message_length = ::FormatMessageA(kFlags, 0, // no source, we're asking system hr, // the error 0, // no line width restrictions error_text, // output buffer kBufSize, // buf size NULL); // no arguments for inserts // Trims tailing white space (FormatMessage leaves a trailing CR-LF) for (; message_length && IsSpace(error_text[message_length - 1]); --message_length) { error_text[message_length - 1] = '\0'; } # endif // GTEST_OS_WINDOWS_MOBILE const std::string error_hex("0x" + String::FormatHexInt(hr)); return ::testing::AssertionFailure() << "Expected: " << expr << " " << expected << ".\n" << " Actual: " << error_hex << " " << error_text << "\n"; } } // namespace AssertionResult IsHRESULTSuccess(const char* expr, long hr) { // NOLINT if (SUCCEEDED(hr)) { return AssertionSuccess(); } return HRESULTFailureHelper(expr, "succeeds", hr); } AssertionResult IsHRESULTFailure(const char* expr, long hr) { // NOLINT if (FAILED(hr)) { return AssertionSuccess(); } return HRESULTFailureHelper(expr, "fails", hr); } #endif // GTEST_OS_WINDOWS // Utility functions for encoding Unicode text (wide strings) in // UTF-8. // A Unicode code-point can have upto 21 bits, and is encoded in UTF-8 // like this: // // Code-point length Encoding // 0 - 7 bits 0xxxxxxx // 8 - 11 bits 110xxxxx 10xxxxxx // 12 - 16 bits 1110xxxx 10xxxxxx 10xxxxxx // 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx // The maximum code-point a one-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint1 = (static_cast(1) << 7) - 1; // The maximum code-point a two-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint2 = (static_cast(1) << (5 + 6)) - 1; // The maximum code-point a three-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint3 = (static_cast(1) << (4 + 2*6)) - 1; // The maximum code-point a four-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint4 = (static_cast(1) << (3 + 3*6)) - 1; // Chops off the n lowest bits from a bit pattern. Returns the n // lowest bits. As a side effect, the original bit pattern will be // shifted to the right by n bits. inline UInt32 ChopLowBits(UInt32* bits, int n) { const UInt32 low_bits = *bits & ((static_cast(1) << n) - 1); *bits >>= n; return low_bits; } // Converts a Unicode code point to a narrow string in UTF-8 encoding. // code_point parameter is of type UInt32 because wchar_t may not be // wide enough to contain a code point. // If the code_point is not a valid Unicode code point // (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted // to "(Invalid Unicode 0xXXXXXXXX)". std::string CodePointToUtf8(UInt32 code_point) { if (code_point > kMaxCodePoint4) { return "(Invalid Unicode 0x" + String::FormatHexInt(code_point) + ")"; } char str[5]; // Big enough for the largest valid code point. if (code_point <= kMaxCodePoint1) { str[1] = '\0'; str[0] = static_cast(code_point); // 0xxxxxxx } else if (code_point <= kMaxCodePoint2) { str[2] = '\0'; str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[0] = static_cast(0xC0 | code_point); // 110xxxxx } else if (code_point <= kMaxCodePoint3) { str[3] = '\0'; str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[0] = static_cast(0xE0 | code_point); // 1110xxxx } else { // code_point <= kMaxCodePoint4 str[4] = '\0'; str[3] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[0] = static_cast(0xF0 | code_point); // 11110xxx } return str; } // The following two functions only make sense if the the system // uses UTF-16 for wide string encoding. All supported systems // with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16. // Determines if the arguments constitute UTF-16 surrogate pair // and thus should be combined into a single Unicode code point // using CreateCodePointFromUtf16SurrogatePair. inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { return sizeof(wchar_t) == 2 && (first & 0xFC00) == 0xD800 && (second & 0xFC00) == 0xDC00; } // Creates a Unicode code point from UTF16 surrogate pair. inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first, wchar_t second) { const UInt32 mask = (1 << 10) - 1; return (sizeof(wchar_t) == 2) ? (((first & mask) << 10) | (second & mask)) + 0x10000 : // This function should not be called when the condition is // false, but we provide a sensible default in case it is. static_cast(first); } // Converts a wide string to a narrow string in UTF-8 encoding. // The wide string is assumed to have the following encoding: // UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) // UTF-32 if sizeof(wchar_t) == 4 (on Linux) // Parameter str points to a null-terminated wide string. // Parameter num_chars may additionally limit the number // of wchar_t characters processed. -1 is used when the entire string // should be processed. // If the string contains code points that are not valid Unicode code points // (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output // as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding // and contains invalid UTF-16 surrogate pairs, values in those pairs // will be encoded as individual Unicode characters from Basic Normal Plane. std::string WideStringToUtf8(const wchar_t* str, int num_chars) { if (num_chars == -1) num_chars = static_cast(wcslen(str)); ::std::stringstream stream; for (int i = 0; i < num_chars; ++i) { UInt32 unicode_code_point; if (str[i] == L'\0') { break; } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) { unicode_code_point = CreateCodePointFromUtf16SurrogatePair(str[i], str[i + 1]); i++; } else { unicode_code_point = static_cast(str[i]); } stream << CodePointToUtf8(unicode_code_point); } return StringStreamToString(&stream); } // Converts a wide C string to an std::string using the UTF-8 encoding. // NULL will be converted to "(null)". std::string String::ShowWideCString(const wchar_t * wide_c_str) { if (wide_c_str == NULL) return "(null)"; return internal::WideStringToUtf8(wide_c_str, -1); } // Compares two wide C strings. Returns true iff they have the same // content. // // Unlike wcscmp(), this function can handle NULL argument(s). A NULL // C string is considered different to any non-NULL C string, // including the empty string. bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) { if (lhs == NULL) return rhs == NULL; if (rhs == NULL) return false; return wcscmp(lhs, rhs) == 0; } // Helper function for *_STREQ on wide strings. AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const wchar_t* expected, const wchar_t* actual) { if (String::WideCStringEquals(expected, actual)) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, PrintToString(expected), PrintToString(actual), false); } // Helper function for *_STRNE on wide strings. AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const wchar_t* s1, const wchar_t* s2) { if (!String::WideCStringEquals(s1, s2)) { return AssertionSuccess(); } return AssertionFailure() << "Expected: (" << s1_expression << ") != (" << s2_expression << "), actual: " << PrintToString(s1) << " vs " << PrintToString(s2); } // Compares two C strings, ignoring case. Returns true iff they have // the same content. // // Unlike strcasecmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. bool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) { if (lhs == NULL) return rhs == NULL; if (rhs == NULL) return false; return posix::StrCaseCmp(lhs, rhs) == 0; } // Compares two wide C strings, ignoring case. Returns true iff they // have the same content. // // Unlike wcscasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL wide C string, // including the empty string. // NB: The implementations on different platforms slightly differ. // On windows, this method uses _wcsicmp which compares according to LC_CTYPE // environment variable. On GNU platform this method uses wcscasecmp // which compares according to LC_CTYPE category of the current locale. // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the // current locale. bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs, const wchar_t* rhs) { if (lhs == NULL) return rhs == NULL; if (rhs == NULL) return false; #if GTEST_OS_WINDOWS return _wcsicmp(lhs, rhs) == 0; #elif GTEST_OS_LINUX && !GTEST_OS_LINUX_ANDROID return wcscasecmp(lhs, rhs) == 0; #else // Android, Mac OS X and Cygwin don't define wcscasecmp. // Other unknown OSes may not define it either. wint_t left, right; do { left = towlower(*lhs++); right = towlower(*rhs++); } while (left && left == right); return left == right; #endif // OS selector } // Returns true iff str ends with the given suffix, ignoring case. // Any string is considered to end with an empty suffix. bool String::EndsWithCaseInsensitive( const std::string& str, const std::string& suffix) { const size_t str_len = str.length(); const size_t suffix_len = suffix.length(); return (str_len >= suffix_len) && CaseInsensitiveCStringEquals(str.c_str() + str_len - suffix_len, suffix.c_str()); } // Formats an int value as "%02d". std::string String::FormatIntWidth2(int value) { std::stringstream ss; ss << std::setfill('0') << std::setw(2) << value; return ss.str(); } // Formats an int value as "%X". std::string String::FormatHexInt(int value) { std::stringstream ss; ss << std::hex << std::uppercase << value; return ss.str(); } // Formats a byte as "%02X". std::string String::FormatByte(unsigned char value) { std::stringstream ss; ss << std::setfill('0') << std::setw(2) << std::hex << std::uppercase << static_cast(value); return ss.str(); } // Converts the buffer in a stringstream to an std::string, converting NUL // bytes to "\\0" along the way. std::string StringStreamToString(::std::stringstream* ss) { const ::std::string& str = ss->str(); const char* const start = str.c_str(); const char* const end = start + str.length(); std::string result; result.reserve(2 * (end - start)); for (const char* ch = start; ch != end; ++ch) { if (*ch == '\0') { result += "\\0"; // Replaces NUL with "\\0"; } else { result += *ch; } } return result; } // Appends the user-supplied message to the Google-Test-generated message. std::string AppendUserMessage(const std::string& gtest_msg, const Message& user_msg) { // Appends the user message if it's non-empty. const std::string user_msg_string = user_msg.GetString(); if (user_msg_string.empty()) { return gtest_msg; } return gtest_msg + "\n" + user_msg_string; } } // namespace internal // class TestResult // Creates an empty TestResult. TestResult::TestResult() : death_test_count_(0), elapsed_time_(0) { } // D'tor. TestResult::~TestResult() { } // Returns the i-th test part result among all the results. i can // range from 0 to total_part_count() - 1. If i is not in that range, // aborts the program. const TestPartResult& TestResult::GetTestPartResult(int i) const { if (i < 0 || i >= total_part_count()) internal::posix::Abort(); return test_part_results_.at(i); } // Returns the i-th test property. i can range from 0 to // test_property_count() - 1. If i is not in that range, aborts the // program. const TestProperty& TestResult::GetTestProperty(int i) const { if (i < 0 || i >= test_property_count()) internal::posix::Abort(); return test_properties_.at(i); } // Clears the test part results. void TestResult::ClearTestPartResults() { test_part_results_.clear(); } // Adds a test part result to the list. void TestResult::AddTestPartResult(const TestPartResult& test_part_result) { test_part_results_.push_back(test_part_result); } // Adds a test property to the list. If a property with the same key as the // supplied property is already represented, the value of this test_property // replaces the old value for that key. void TestResult::RecordProperty(const std::string& xml_element, const TestProperty& test_property) { if (!ValidateTestProperty(xml_element, test_property)) { return; } internal::MutexLock lock(&test_properites_mutex_); const std::vector::iterator property_with_matching_key = std::find_if(test_properties_.begin(), test_properties_.end(), internal::TestPropertyKeyIs(test_property.key())); if (property_with_matching_key == test_properties_.end()) { test_properties_.push_back(test_property); return; } property_with_matching_key->SetValue(test_property.value()); } // The list of reserved attributes used in the element of XML // output. static const char* const kReservedTestSuitesAttributes[] = { "disabled", "errors", "failures", "name", "random_seed", "tests", "time", "timestamp" }; // The list of reserved attributes used in the element of XML // output. static const char* const kReservedTestSuiteAttributes[] = { "disabled", "errors", "failures", "name", "tests", "time" }; // The list of reserved attributes used in the element of XML output. static const char* const kReservedTestCaseAttributes[] = { "classname", "name", "status", "time", "type_param", "value_param" }; template std::vector ArrayAsVector(const char* const (&array)[kSize]) { return std::vector(array, array + kSize); } static std::vector GetReservedAttributesForElement( const std::string& xml_element) { if (xml_element == "testsuites") { return ArrayAsVector(kReservedTestSuitesAttributes); } else if (xml_element == "testsuite") { return ArrayAsVector(kReservedTestSuiteAttributes); } else if (xml_element == "testcase") { return ArrayAsVector(kReservedTestCaseAttributes); } else { GTEST_CHECK_(false) << "Unrecognized xml_element provided: " << xml_element; } // This code is unreachable but some compilers may not realizes that. return std::vector(); } static std::string FormatWordList(const std::vector& words) { Message word_list; for (size_t i = 0; i < words.size(); ++i) { if (i > 0 && words.size() > 2) { word_list << ", "; } if (i == words.size() - 1) { word_list << "and "; } word_list << "'" << words[i] << "'"; } return word_list.GetString(); } bool ValidateTestPropertyName(const std::string& property_name, const std::vector& reserved_names) { if (std::find(reserved_names.begin(), reserved_names.end(), property_name) != reserved_names.end()) { ADD_FAILURE() << "Reserved key used in RecordProperty(): " << property_name << " (" << FormatWordList(reserved_names) << " are reserved by " << GTEST_NAME_ << ")"; return false; } return true; } // Adds a failure if the key is a reserved attribute of the element named // xml_element. Returns true if the property is valid. bool TestResult::ValidateTestProperty(const std::string& xml_element, const TestProperty& test_property) { return ValidateTestPropertyName(test_property.key(), GetReservedAttributesForElement(xml_element)); } // Clears the object. void TestResult::Clear() { test_part_results_.clear(); test_properties_.clear(); death_test_count_ = 0; elapsed_time_ = 0; } // Returns true iff the test failed. bool TestResult::Failed() const { for (int i = 0; i < total_part_count(); ++i) { if (GetTestPartResult(i).failed()) return true; } return false; } // Returns true iff the test part fatally failed. static bool TestPartFatallyFailed(const TestPartResult& result) { return result.fatally_failed(); } // Returns true iff the test fatally failed. bool TestResult::HasFatalFailure() const { return CountIf(test_part_results_, TestPartFatallyFailed) > 0; } // Returns true iff the test part non-fatally failed. static bool TestPartNonfatallyFailed(const TestPartResult& result) { return result.nonfatally_failed(); } // Returns true iff the test has a non-fatal failure. bool TestResult::HasNonfatalFailure() const { return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0; } // Gets the number of all test parts. This is the sum of the number // of successful test parts and the number of failed test parts. int TestResult::total_part_count() const { return static_cast(test_part_results_.size()); } // Returns the number of the test properties. int TestResult::test_property_count() const { return static_cast(test_properties_.size()); } // class Test // Creates a Test object. // The c'tor saves the values of all Google Test flags. Test::Test() : gtest_flag_saver_(new internal::GTestFlagSaver) { } // The d'tor restores the values of all Google Test flags. Test::~Test() { delete gtest_flag_saver_; } // Sets up the test fixture. // // A sub-class may override this. void Test::SetUp() { } // Tears down the test fixture. // // A sub-class may override this. void Test::TearDown() { } // Allows user supplied key value pairs to be recorded for later output. void Test::RecordProperty(const std::string& key, const std::string& value) { UnitTest::GetInstance()->RecordProperty(key, value); } // Allows user supplied key value pairs to be recorded for later output. void Test::RecordProperty(const std::string& key, int value) { Message value_message; value_message << value; RecordProperty(key, value_message.GetString().c_str()); } namespace internal { void ReportFailureInUnknownLocation(TestPartResult::Type result_type, const std::string& message) { // This function is a friend of UnitTest and as such has access to // AddTestPartResult. UnitTest::GetInstance()->AddTestPartResult( result_type, NULL, // No info about the source file where the exception occurred. -1, // We have no info on which line caused the exception. message, ""); // No stack trace, either. } } // namespace internal // Google Test requires all tests in the same test case to use the same test // fixture class. This function checks if the current test has the // same fixture class as the first test in the current test case. If // yes, it returns true; otherwise it generates a Google Test failure and // returns false. bool Test::HasSameFixtureClass() { internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); const TestCase* const test_case = impl->current_test_case(); // Info about the first test in the current test case. const TestInfo* const first_test_info = test_case->test_info_list()[0]; const internal::TypeId first_fixture_id = first_test_info->fixture_class_id_; const char* const first_test_name = first_test_info->name(); // Info about the current test. const TestInfo* const this_test_info = impl->current_test_info(); const internal::TypeId this_fixture_id = this_test_info->fixture_class_id_; const char* const this_test_name = this_test_info->name(); if (this_fixture_id != first_fixture_id) { // Is the first test defined using TEST? const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId(); // Is this test defined using TEST? const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId(); if (first_is_TEST || this_is_TEST) { // The user mixed TEST and TEST_F in this test case - we'll tell // him/her how to fix it. // Gets the name of the TEST and the name of the TEST_F. Note // that first_is_TEST and this_is_TEST cannot both be true, as // the fixture IDs are different for the two tests. const char* const TEST_name = first_is_TEST ? first_test_name : this_test_name; const char* const TEST_F_name = first_is_TEST ? this_test_name : first_test_name; ADD_FAILURE() << "All tests in the same test case must use the same test fixture\n" << "class, so mixing TEST_F and TEST in the same test case is\n" << "illegal. In test case " << this_test_info->test_case_name() << ",\n" << "test " << TEST_F_name << " is defined using TEST_F but\n" << "test " << TEST_name << " is defined using TEST. You probably\n" << "want to change the TEST to TEST_F or move it to another test\n" << "case."; } else { // The user defined two fixture classes with the same name in // two namespaces - we'll tell him/her how to fix it. ADD_FAILURE() << "All tests in the same test case must use the same test fixture\n" << "class. However, in test case " << this_test_info->test_case_name() << ",\n" << "you defined test " << first_test_name << " and test " << this_test_name << "\n" << "using two different test fixture classes. This can happen if\n" << "the two classes are from different namespaces or translation\n" << "units and have the same name. You should probably rename one\n" << "of the classes to put the tests into different test cases."; } return false; } return true; } #if GTEST_HAS_SEH // Adds an "exception thrown" fatal failure to the current test. This // function returns its result via an output parameter pointer because VC++ // prohibits creation of objects with destructors on stack in functions // using __try (see error C2712). static std::string* FormatSehExceptionMessage(DWORD exception_code, const char* location) { Message message; message << "SEH exception with code 0x" << std::setbase(16) << exception_code << std::setbase(10) << " thrown in " << location << "."; return new std::string(message.GetString()); } #endif // GTEST_HAS_SEH namespace internal { #if GTEST_HAS_EXCEPTIONS // Adds an "exception thrown" fatal failure to the current test. static std::string FormatCxxExceptionMessage(const char* description, const char* location) { Message message; if (description != NULL) { message << "C++ exception with description \"" << description << "\""; } else { message << "Unknown C++ exception"; } message << " thrown in " << location << "."; return message.GetString(); } static std::string PrintTestPartResultToString( const TestPartResult& test_part_result); GoogleTestFailureException::GoogleTestFailureException( const TestPartResult& failure) : ::std::runtime_error(PrintTestPartResultToString(failure).c_str()) {} #endif // GTEST_HAS_EXCEPTIONS // We put these helper functions in the internal namespace as IBM's xlC // compiler rejects the code if they were declared static. // Runs the given method and handles SEH exceptions it throws, when // SEH is supported; returns the 0-value for type Result in case of an // SEH exception. (Microsoft compilers cannot handle SEH and C++ // exceptions in the same function. Therefore, we provide a separate // wrapper function for handling SEH exceptions.) template Result HandleSehExceptionsInMethodIfSupported( T* object, Result (T::*method)(), const char* location) { #if GTEST_HAS_SEH __try { return (object->*method)(); } __except (internal::UnitTestOptions::GTestShouldProcessSEH( // NOLINT GetExceptionCode())) { // We create the exception message on the heap because VC++ prohibits // creation of objects with destructors on stack in functions using __try // (see error C2712). std::string* exception_message = FormatSehExceptionMessage( GetExceptionCode(), location); internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure, *exception_message); delete exception_message; return static_cast(0); } #else (void)location; return (object->*method)(); #endif // GTEST_HAS_SEH } // Runs the given method and catches and reports C++ and/or SEH-style // exceptions, if they are supported; returns the 0-value for type // Result in case of an SEH exception. template Result HandleExceptionsInMethodIfSupported( T* object, Result (T::*method)(), const char* location) { // NOTE: The user code can affect the way in which Google Test handles // exceptions by setting GTEST_FLAG(catch_exceptions), but only before // RUN_ALL_TESTS() starts. It is technically possible to check the flag // after the exception is caught and either report or re-throw the // exception based on the flag's value: // // try { // // Perform the test method. // } catch (...) { // if (GTEST_FLAG(catch_exceptions)) // // Report the exception as failure. // else // throw; // Re-throws the original exception. // } // // However, the purpose of this flag is to allow the program to drop into // the debugger when the exception is thrown. On most platforms, once the // control enters the catch block, the exception origin information is // lost and the debugger will stop the program at the point of the // re-throw in this function -- instead of at the point of the original // throw statement in the code under test. For this reason, we perform // the check early, sacrificing the ability to affect Google Test's // exception handling in the method where the exception is thrown. if (internal::GetUnitTestImpl()->catch_exceptions()) { #if GTEST_HAS_EXCEPTIONS try { return HandleSehExceptionsInMethodIfSupported(object, method, location); } catch (const internal::GoogleTestFailureException&) { // NOLINT // This exception type can only be thrown by a failed Google // Test assertion with the intention of letting another testing // framework catch it. Therefore we just re-throw it. throw; } catch (const std::exception& e) { // NOLINT internal::ReportFailureInUnknownLocation( TestPartResult::kFatalFailure, FormatCxxExceptionMessage(e.what(), location)); } catch (...) { // NOLINT internal::ReportFailureInUnknownLocation( TestPartResult::kFatalFailure, FormatCxxExceptionMessage(NULL, location)); } return static_cast(0); #else return HandleSehExceptionsInMethodIfSupported(object, method, location); #endif // GTEST_HAS_EXCEPTIONS } else { return (object->*method)(); } } } // namespace internal // Runs the test and updates the test result. void Test::Run() { if (!HasSameFixtureClass()) return; internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported(this, &Test::SetUp, "SetUp()"); // We will run the test only if SetUp() was successful. if (!HasFatalFailure()) { impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &Test::TestBody, "the test body"); } // However, we want to clean up as much as possible. Hence we will // always call TearDown(), even if SetUp() or the test body has // failed. impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &Test::TearDown, "TearDown()"); } // Returns true iff the current test has a fatal failure. bool Test::HasFatalFailure() { return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure(); } // Returns true iff the current test has a non-fatal failure. bool Test::HasNonfatalFailure() { return internal::GetUnitTestImpl()->current_test_result()-> HasNonfatalFailure(); } // class TestInfo // Constructs a TestInfo object. It assumes ownership of the test factory // object. TestInfo::TestInfo(const std::string& a_test_case_name, const std::string& a_name, const char* a_type_param, const char* a_value_param, internal::TypeId fixture_class_id, internal::TestFactoryBase* factory) : test_case_name_(a_test_case_name), name_(a_name), type_param_(a_type_param ? new std::string(a_type_param) : NULL), value_param_(a_value_param ? new std::string(a_value_param) : NULL), fixture_class_id_(fixture_class_id), should_run_(false), is_disabled_(false), matches_filter_(false), factory_(factory), result_() {} // Destructs a TestInfo object. TestInfo::~TestInfo() { delete factory_; } namespace internal { // Creates a new TestInfo object and registers it with Google Test; // returns the created object. // // Arguments: // // test_case_name: name of the test case // name: name of the test // type_param: the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. // value_param: text representation of the test's value parameter, // or NULL if this is not a value-parameterized test. // fixture_class_id: ID of the test fixture class // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case // factory: pointer to the factory that creates a test object. // The newly created TestInfo instance will assume // ownership of the factory object. TestInfo* MakeAndRegisterTestInfo( const char* test_case_name, const char* name, const char* type_param, const char* value_param, TypeId fixture_class_id, SetUpTestCaseFunc set_up_tc, TearDownTestCaseFunc tear_down_tc, TestFactoryBase* factory) { TestInfo* const test_info = new TestInfo(test_case_name, name, type_param, value_param, fixture_class_id, factory); GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info); return test_info; } #if GTEST_HAS_PARAM_TEST void ReportInvalidTestCaseType(const char* test_case_name, const char* file, int line) { Message errors; errors << "Attempted redefinition of test case " << test_case_name << ".\n" << "All tests in the same test case must use the same test fixture\n" << "class. However, in test case " << test_case_name << ", you tried\n" << "to define a test using a fixture class different from the one\n" << "used earlier. This can happen if the two fixture classes are\n" << "from different namespaces and have the same name. You should\n" << "probably rename one of the classes to put the tests into different\n" << "test cases."; fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), errors.GetString().c_str()); } #endif // GTEST_HAS_PARAM_TEST } // namespace internal namespace { // A predicate that checks the test name of a TestInfo against a known // value. // // This is used for implementation of the TestCase class only. We put // it in the anonymous namespace to prevent polluting the outer // namespace. // // TestNameIs is copyable. class TestNameIs { public: // Constructor. // // TestNameIs has NO default constructor. explicit TestNameIs(const char* name) : name_(name) {} // Returns true iff the test name of test_info matches name_. bool operator()(const TestInfo * test_info) const { return test_info && test_info->name() == name_; } private: std::string name_; }; } // namespace namespace internal { // This method expands all parameterized tests registered with macros TEST_P // and INSTANTIATE_TEST_CASE_P into regular tests and registers those. // This will be done just once during the program runtime. void UnitTestImpl::RegisterParameterizedTests() { #if GTEST_HAS_PARAM_TEST if (!parameterized_tests_registered_) { parameterized_test_registry_.RegisterTests(); parameterized_tests_registered_ = true; } #endif } } // namespace internal // Creates the test object, runs it, records its result, and then // deletes it. void TestInfo::Run() { if (!should_run_) return; // Tells UnitTest where to store test result. internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); impl->set_current_test_info(this); TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); // Notifies the unit test event listeners that a test is about to start. repeater->OnTestStart(*this); const TimeInMillis start = internal::GetTimeInMillis(); impl->os_stack_trace_getter()->UponLeavingGTest(); // Creates the test object. Test* const test = internal::HandleExceptionsInMethodIfSupported( factory_, &internal::TestFactoryBase::CreateTest, "the test fixture's constructor"); // Runs the test only if the test object was created and its // constructor didn't generate a fatal failure. if ((test != NULL) && !Test::HasFatalFailure()) { // This doesn't throw as all user code that can throw are wrapped into // exception handling code. test->Run(); } // Deletes the test object. impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( test, &Test::DeleteSelf_, "the test fixture's destructor"); result_.set_elapsed_time(internal::GetTimeInMillis() - start); // Notifies the unit test event listener that a test has just finished. repeater->OnTestEnd(*this); // Tells UnitTest to stop associating assertion results to this // test. impl->set_current_test_info(NULL); } // class TestCase // Gets the number of successful tests in this test case. int TestCase::successful_test_count() const { return CountIf(test_info_list_, TestPassed); } // Gets the number of failed tests in this test case. int TestCase::failed_test_count() const { return CountIf(test_info_list_, TestFailed); } // Gets the number of disabled tests that will be reported in the XML report. int TestCase::reportable_disabled_test_count() const { return CountIf(test_info_list_, TestReportableDisabled); } // Gets the number of disabled tests in this test case. int TestCase::disabled_test_count() const { return CountIf(test_info_list_, TestDisabled); } // Gets the number of tests to be printed in the XML report. int TestCase::reportable_test_count() const { return CountIf(test_info_list_, TestReportable); } // Get the number of tests in this test case that should run. int TestCase::test_to_run_count() const { return CountIf(test_info_list_, ShouldRunTest); } // Gets the number of all tests. int TestCase::total_test_count() const { return static_cast(test_info_list_.size()); } // Creates a TestCase with the given name. // // Arguments: // // name: name of the test case // a_type_param: the name of the test case's type parameter, or NULL if // this is not a typed or a type-parameterized test case. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase::TestCase(const char* a_name, const char* a_type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc) : name_(a_name), type_param_(a_type_param ? new std::string(a_type_param) : NULL), set_up_tc_(set_up_tc), tear_down_tc_(tear_down_tc), should_run_(false), elapsed_time_(0) { } // Destructor of TestCase. TestCase::~TestCase() { // Deletes every Test in the collection. ForEach(test_info_list_, internal::Delete); } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. const TestInfo* TestCase::GetTestInfo(int i) const { const int index = GetElementOr(test_indices_, i, -1); return index < 0 ? NULL : test_info_list_[index]; } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. TestInfo* TestCase::GetMutableTestInfo(int i) { const int index = GetElementOr(test_indices_, i, -1); return index < 0 ? NULL : test_info_list_[index]; } // Adds a test to this test case. Will delete the test upon // destruction of the TestCase object. void TestCase::AddTestInfo(TestInfo * test_info) { test_info_list_.push_back(test_info); test_indices_.push_back(static_cast(test_indices_.size())); } // Runs every test in this TestCase. void TestCase::Run() { if (!should_run_) return; internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); impl->set_current_test_case(this); TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); repeater->OnTestCaseStart(*this); impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &TestCase::RunSetUpTestCase, "SetUpTestCase()"); const internal::TimeInMillis start = internal::GetTimeInMillis(); for (int i = 0; i < total_test_count(); i++) { GetMutableTestInfo(i)->Run(); } elapsed_time_ = internal::GetTimeInMillis() - start; impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &TestCase::RunTearDownTestCase, "TearDownTestCase()"); repeater->OnTestCaseEnd(*this); impl->set_current_test_case(NULL); } // Clears the results of all tests in this test case. void TestCase::ClearResult() { ad_hoc_test_result_.Clear(); ForEach(test_info_list_, TestInfo::ClearTestResult); } // Shuffles the tests in this test case. void TestCase::ShuffleTests(internal::Random* random) { Shuffle(random, &test_indices_); } // Restores the test order to before the first shuffle. void TestCase::UnshuffleTests() { for (size_t i = 0; i < test_indices_.size(); i++) { test_indices_[i] = static_cast(i); } } // Formats a countable noun. Depending on its quantity, either the // singular form or the plural form is used. e.g. // // FormatCountableNoun(1, "formula", "formuli") returns "1 formula". // FormatCountableNoun(5, "book", "books") returns "5 books". static std::string FormatCountableNoun(int count, const char * singular_form, const char * plural_form) { return internal::StreamableToString(count) + " " + (count == 1 ? singular_form : plural_form); } // Formats the count of tests. static std::string FormatTestCount(int test_count) { return FormatCountableNoun(test_count, "test", "tests"); } // Formats the count of test cases. static std::string FormatTestCaseCount(int test_case_count) { return FormatCountableNoun(test_case_count, "test case", "test cases"); } // Converts a TestPartResult::Type enum to human-friendly string // representation. Both kNonFatalFailure and kFatalFailure are translated // to "Failure", as the user usually doesn't care about the difference // between the two when viewing the test result. static const char * TestPartResultTypeToString(TestPartResult::Type type) { switch (type) { case TestPartResult::kSuccess: return "Success"; case TestPartResult::kNonFatalFailure: case TestPartResult::kFatalFailure: #ifdef _MSC_VER return "error: "; #else return "Failure\n"; #endif default: return "Unknown result type"; } } namespace internal { // Prints a TestPartResult to an std::string. static std::string PrintTestPartResultToString( const TestPartResult& test_part_result) { return (Message() << internal::FormatFileLocation(test_part_result.file_name(), test_part_result.line_number()) << " " << TestPartResultTypeToString(test_part_result.type()) << test_part_result.message()).GetString(); } // Prints a TestPartResult. static void PrintTestPartResult(const TestPartResult& test_part_result) { const std::string& result = PrintTestPartResultToString(test_part_result); printf("%s\n", result.c_str()); fflush(stdout); // If the test program runs in Visual Studio or a debugger, the // following statements add the test part result message to the Output // window such that the user can double-click on it to jump to the // corresponding source code location; otherwise they do nothing. #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE // We don't call OutputDebugString*() on Windows Mobile, as printing // to stdout is done by OutputDebugString() there already - we don't // want the same message printed twice. ::OutputDebugStringA(result.c_str()); ::OutputDebugStringA("\n"); #endif } // class PrettyUnitTestResultPrinter enum GTestColor { COLOR_DEFAULT, COLOR_RED, COLOR_GREEN, COLOR_YELLOW }; #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE // Returns the character attribute for the given color. WORD GetColorAttribute(GTestColor color) { switch (color) { case COLOR_RED: return FOREGROUND_RED; case COLOR_GREEN: return FOREGROUND_GREEN; case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN; default: return 0; } } #else // Returns the ANSI color code for the given color. COLOR_DEFAULT is // an invalid input. const char* GetAnsiColorCode(GTestColor color) { switch (color) { case COLOR_RED: return "1"; case COLOR_GREEN: return "2"; case COLOR_YELLOW: return "3"; default: return NULL; }; } #endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE // Returns true iff Google Test should use colors in the output. bool ShouldUseColor(bool stdout_is_tty) { const char* const gtest_color = GTEST_FLAG(color).c_str(); if (String::CaseInsensitiveCStringEquals(gtest_color, "auto")) { #if GTEST_OS_WINDOWS // On Windows the TERM variable is usually not set, but the // console there does support colors. return stdout_is_tty; #else // On non-Windows platforms, we rely on the TERM variable. const char* const term = posix::GetEnv("TERM"); const bool term_supports_color = String::CStringEquals(term, "xterm") || String::CStringEquals(term, "xterm-color") || String::CStringEquals(term, "xterm-256color") || String::CStringEquals(term, "screen") || String::CStringEquals(term, "screen-256color") || String::CStringEquals(term, "linux") || String::CStringEquals(term, "cygwin"); return stdout_is_tty && term_supports_color; #endif // GTEST_OS_WINDOWS } return String::CaseInsensitiveCStringEquals(gtest_color, "yes") || String::CaseInsensitiveCStringEquals(gtest_color, "true") || String::CaseInsensitiveCStringEquals(gtest_color, "t") || String::CStringEquals(gtest_color, "1"); // We take "yes", "true", "t", and "1" as meaning "yes". If the // value is neither one of these nor "auto", we treat it as "no" to // be conservative. } // Helpers for printing colored strings to stdout. Note that on Windows, we // cannot simply emit special characters and have the terminal change colors. // This routine must actually emit the characters rather than return a string // that would be colored when printed, as can be done on Linux. void ColoredPrintf(GTestColor color, const char* fmt, ...) { va_list args; va_start(args, fmt); #if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS || GTEST_OS_IOS const bool use_color = false; #else static const bool in_color_mode = ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0); const bool use_color = in_color_mode && (color != COLOR_DEFAULT); #endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS // The '!= 0' comparison is necessary to satisfy MSVC 7.1. if (!use_color) { vprintf(fmt, args); va_end(args); return; } #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); // Gets the current text color. CONSOLE_SCREEN_BUFFER_INFO buffer_info; GetConsoleScreenBufferInfo(stdout_handle, &buffer_info); const WORD old_color_attrs = buffer_info.wAttributes; // We need to flush the stream buffers into the console before each // SetConsoleTextAttribute call lest it affect the text that is already // printed but has not yet reached the console. fflush(stdout); SetConsoleTextAttribute(stdout_handle, GetColorAttribute(color) | FOREGROUND_INTENSITY); vprintf(fmt, args); fflush(stdout); // Restores the text color. SetConsoleTextAttribute(stdout_handle, old_color_attrs); #else printf("\033[0;3%sm", GetAnsiColorCode(color)); vprintf(fmt, args); printf("\033[m"); // Resets the terminal to default. #endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE va_end(args); } // Text printed in Google Test's text output and --gunit_list_tests // output to label the type parameter and value parameter for a test. static const char kTypeParamLabel[] = "TypeParam"; static const char kValueParamLabel[] = "GetParam()"; void PrintFullTestCommentIfPresent(const TestInfo& test_info) { const char* const type_param = test_info.type_param(); const char* const value_param = test_info.value_param(); if (type_param != NULL || value_param != NULL) { printf(", where "); if (type_param != NULL) { printf("%s = %s", kTypeParamLabel, type_param); if (value_param != NULL) printf(" and "); } if (value_param != NULL) { printf("%s = %s", kValueParamLabel, value_param); } } } // This class implements the TestEventListener interface. // // Class PrettyUnitTestResultPrinter is copyable. class PrettyUnitTestResultPrinter : public TestEventListener { public: PrettyUnitTestResultPrinter() {} static void PrintTestName(const char * test_case, const char * test) { printf("%s.%s", test_case, test); } // The following methods override what's in the TestEventListener class. virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestCaseStart(const TestCase& test_case); virtual void OnTestStart(const TestInfo& test_info); virtual void OnTestPartResult(const TestPartResult& result); virtual void OnTestEnd(const TestInfo& test_info); virtual void OnTestCaseEnd(const TestCase& test_case); virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} private: static void PrintFailedTests(const UnitTest& unit_test); }; // Fired before each iteration of tests starts. void PrettyUnitTestResultPrinter::OnTestIterationStart( const UnitTest& unit_test, int iteration) { if (GTEST_FLAG(repeat) != 1) printf("\nRepeating all tests (iteration %d) . . .\n\n", iteration + 1); const char* const filter = GTEST_FLAG(filter).c_str(); // Prints the filter if it's not *. This reminds the user that some // tests may be skipped. if (!String::CStringEquals(filter, kUniversalFilter)) { ColoredPrintf(COLOR_YELLOW, "Note: %s filter = %s\n", GTEST_NAME_, filter); } if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) { const Int32 shard_index = Int32FromEnvOrDie(kTestShardIndex, -1); ColoredPrintf(COLOR_YELLOW, "Note: This is test shard %d of %s.\n", static_cast(shard_index) + 1, internal::posix::GetEnv(kTestTotalShards)); } if (GTEST_FLAG(shuffle)) { ColoredPrintf(COLOR_YELLOW, "Note: Randomizing tests' orders with a seed of %d .\n", unit_test.random_seed()); } ColoredPrintf(COLOR_GREEN, "[==========] "); printf("Running %s from %s.\n", FormatTestCount(unit_test.test_to_run_count()).c_str(), FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); fflush(stdout); } void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart( const UnitTest& /*unit_test*/) { ColoredPrintf(COLOR_GREEN, "[----------] "); printf("Global test environment set-up.\n"); fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) { const std::string counts = FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); ColoredPrintf(COLOR_GREEN, "[----------] "); printf("%s from %s", counts.c_str(), test_case.name()); if (test_case.type_param() == NULL) { printf("\n"); } else { printf(", where %s = %s\n", kTypeParamLabel, test_case.type_param()); } fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { ColoredPrintf(COLOR_GREEN, "[ RUN ] "); PrintTestName(test_info.test_case_name(), test_info.name()); printf("\n"); fflush(stdout); } // Called after an assertion failure. void PrettyUnitTestResultPrinter::OnTestPartResult( const TestPartResult& result) { // If the test part succeeded, we don't need to do anything. if (result.type() == TestPartResult::kSuccess) return; // Print failure message from the assertion (e.g. expected this and got that). PrintTestPartResult(result); fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { if (test_info.result()->Passed()) { ColoredPrintf(COLOR_GREEN, "[ OK ] "); } else { ColoredPrintf(COLOR_RED, "[ FAILED ] "); } PrintTestName(test_info.test_case_name(), test_info.name()); if (test_info.result()->Failed()) PrintFullTestCommentIfPresent(test_info); if (GTEST_FLAG(print_time)) { printf(" (%s ms)\n", internal::StreamableToString( test_info.result()->elapsed_time()).c_str()); } else { printf("\n"); } fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) { if (!GTEST_FLAG(print_time)) return; const std::string counts = FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); ColoredPrintf(COLOR_GREEN, "[----------] "); printf("%s from %s (%s ms total)\n\n", counts.c_str(), test_case.name(), internal::StreamableToString(test_case.elapsed_time()).c_str()); fflush(stdout); } void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( const UnitTest& /*unit_test*/) { ColoredPrintf(COLOR_GREEN, "[----------] "); printf("Global test environment tear-down\n"); fflush(stdout); } // Internal helper for printing the list of failed tests. void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { const int failed_test_count = unit_test.failed_test_count(); if (failed_test_count == 0) { return; } for (int i = 0; i < unit_test.total_test_case_count(); ++i) { const TestCase& test_case = *unit_test.GetTestCase(i); if (!test_case.should_run() || (test_case.failed_test_count() == 0)) { continue; } for (int j = 0; j < test_case.total_test_count(); ++j) { const TestInfo& test_info = *test_case.GetTestInfo(j); if (!test_info.should_run() || test_info.result()->Passed()) { continue; } ColoredPrintf(COLOR_RED, "[ FAILED ] "); printf("%s.%s", test_case.name(), test_info.name()); PrintFullTestCommentIfPresent(test_info); printf("\n"); } } } void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, int /*iteration*/) { ColoredPrintf(COLOR_GREEN, "[==========] "); printf("%s from %s ran.", FormatTestCount(unit_test.test_to_run_count()).c_str(), FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); if (GTEST_FLAG(print_time)) { printf(" (%s ms total)", internal::StreamableToString(unit_test.elapsed_time()).c_str()); } printf("\n"); ColoredPrintf(COLOR_GREEN, "[ PASSED ] "); printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str()); int num_failures = unit_test.failed_test_count(); if (!unit_test.Passed()) { const int failed_test_count = unit_test.failed_test_count(); ColoredPrintf(COLOR_RED, "[ FAILED ] "); printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str()); PrintFailedTests(unit_test); printf("\n%2d FAILED %s\n", num_failures, num_failures == 1 ? "TEST" : "TESTS"); } int num_disabled = unit_test.reportable_disabled_test_count(); if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) { if (!num_failures) { printf("\n"); // Add a spacer if no FAILURE banner is displayed. } ColoredPrintf(COLOR_YELLOW, " YOU HAVE %d DISABLED %s\n\n", num_disabled, num_disabled == 1 ? "TEST" : "TESTS"); } // Ensure that Google Test output is printed before, e.g., heapchecker output. fflush(stdout); } // End PrettyUnitTestResultPrinter // class TestEventRepeater // // This class forwards events to other event listeners. class TestEventRepeater : public TestEventListener { public: TestEventRepeater() : forwarding_enabled_(true) {} virtual ~TestEventRepeater(); void Append(TestEventListener *listener); TestEventListener* Release(TestEventListener* listener); // Controls whether events will be forwarded to listeners_. Set to false // in death test child processes. bool forwarding_enabled() const { return forwarding_enabled_; } void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; } virtual void OnTestProgramStart(const UnitTest& unit_test); virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test); virtual void OnTestCaseStart(const TestCase& test_case); virtual void OnTestStart(const TestInfo& test_info); virtual void OnTestPartResult(const TestPartResult& result); virtual void OnTestEnd(const TestInfo& test_info); virtual void OnTestCaseEnd(const TestCase& test_case); virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test); virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); virtual void OnTestProgramEnd(const UnitTest& unit_test); private: // Controls whether events will be forwarded to listeners_. Set to false // in death test child processes. bool forwarding_enabled_; // The list of listeners that receive events. std::vector listeners_; GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater); }; TestEventRepeater::~TestEventRepeater() { ForEach(listeners_, Delete); } void TestEventRepeater::Append(TestEventListener *listener) { listeners_.push_back(listener); } // TODO(vladl@google.com): Factor the search functionality into Vector::Find. TestEventListener* TestEventRepeater::Release(TestEventListener *listener) { for (size_t i = 0; i < listeners_.size(); ++i) { if (listeners_[i] == listener) { listeners_.erase(listeners_.begin() + i); return listener; } } return NULL; } // Since most methods are very similar, use macros to reduce boilerplate. // This defines a member that forwards the call to all listeners. #define GTEST_REPEATER_METHOD_(Name, Type) \ void TestEventRepeater::Name(const Type& parameter) { \ if (forwarding_enabled_) { \ for (size_t i = 0; i < listeners_.size(); i++) { \ listeners_[i]->Name(parameter); \ } \ } \ } // This defines a member that forwards the call to all listeners in reverse // order. #define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \ void TestEventRepeater::Name(const Type& parameter) { \ if (forwarding_enabled_) { \ for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { \ listeners_[i]->Name(parameter); \ } \ } \ } GTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest) GTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest) GTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase) GTEST_REPEATER_METHOD_(OnTestStart, TestInfo) GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult) GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo) GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase) GTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest) #undef GTEST_REPEATER_METHOD_ #undef GTEST_REVERSE_REPEATER_METHOD_ void TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test, int iteration) { if (forwarding_enabled_) { for (size_t i = 0; i < listeners_.size(); i++) { listeners_[i]->OnTestIterationStart(unit_test, iteration); } } } void TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test, int iteration) { if (forwarding_enabled_) { for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { listeners_[i]->OnTestIterationEnd(unit_test, iteration); } } } // End TestEventRepeater // This class generates an XML output file. class XmlUnitTestResultPrinter : public EmptyTestEventListener { public: explicit XmlUnitTestResultPrinter(const char* output_file); virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); private: // Is c a whitespace character that is normalized to a space character // when it appears in an XML attribute value? static bool IsNormalizableWhitespace(char c) { return c == 0x9 || c == 0xA || c == 0xD; } // May c appear in a well-formed XML document? static bool IsValidXmlCharacter(char c) { return IsNormalizableWhitespace(c) || c >= 0x20; } // Returns an XML-escaped copy of the input string str. If // is_attribute is true, the text is meant to appear as an attribute // value, and normalizable whitespace is preserved by replacing it // with character references. static std::string EscapeXml(const std::string& str, bool is_attribute); // Returns the given string with all characters invalid in XML removed. static std::string RemoveInvalidXmlCharacters(const std::string& str); // Convenience wrapper around EscapeXml when str is an attribute value. static std::string EscapeXmlAttribute(const std::string& str) { return EscapeXml(str, true); } // Convenience wrapper around EscapeXml when str is not an attribute value. static std::string EscapeXmlText(const char* str) { return EscapeXml(str, false); } // Verifies that the given attribute belongs to the given element and // streams the attribute as XML. static void OutputXmlAttribute(std::ostream* stream, const std::string& element_name, const std::string& name, const std::string& value); // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. static void OutputXmlCDataSection(::std::ostream* stream, const char* data); // Streams an XML representation of a TestInfo object. static void OutputXmlTestInfo(::std::ostream* stream, const char* test_case_name, const TestInfo& test_info); // Prints an XML representation of a TestCase object static void PrintXmlTestCase(::std::ostream* stream, const TestCase& test_case); // Prints an XML summary of unit_test to output stream out. static void PrintXmlUnitTest(::std::ostream* stream, const UnitTest& unit_test); // Produces a string representing the test properties in a result as space // delimited XML attributes based on the property key="value" pairs. // When the std::string is not empty, it includes a space at the beginning, // to delimit this attribute from prior attributes. static std::string TestPropertiesAsXmlAttributes(const TestResult& result); // The output file. const std::string output_file_; GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter); }; // Creates a new XmlUnitTestResultPrinter. XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file) : output_file_(output_file) { if (output_file_.c_str() == NULL || output_file_.empty()) { fprintf(stderr, "XML output file may not be null\n"); fflush(stderr); exit(EXIT_FAILURE); } } // Called after the unit test ends. void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, int /*iteration*/) { FILE* xmlout = NULL; FilePath output_file(output_file_); FilePath output_dir(output_file.RemoveFileName()); if (output_dir.CreateDirectoriesRecursively()) { xmlout = posix::FOpen(output_file_.c_str(), "w"); } if (xmlout == NULL) { // TODO(wan): report the reason of the failure. // // We don't do it for now as: // // 1. There is no urgent need for it. // 2. It's a bit involved to make the errno variable thread-safe on // all three operating systems (Linux, Windows, and Mac OS). // 3. To interpret the meaning of errno in a thread-safe way, // we need the strerror_r() function, which is not available on // Windows. fprintf(stderr, "Unable to open file \"%s\"\n", output_file_.c_str()); fflush(stderr); exit(EXIT_FAILURE); } std::stringstream stream; PrintXmlUnitTest(&stream, unit_test); fprintf(xmlout, "%s", StringStreamToString(&stream).c_str()); fclose(xmlout); } // Returns an XML-escaped copy of the input string str. If is_attribute // is true, the text is meant to appear as an attribute value, and // normalizable whitespace is preserved by replacing it with character // references. // // Invalid XML characters in str, if any, are stripped from the output. // It is expected that most, if not all, of the text processed by this // module will consist of ordinary English text. // If this module is ever modified to produce version 1.1 XML output, // most invalid characters can be retained using character references. // TODO(wan): It might be nice to have a minimally invasive, human-readable // escaping scheme for invalid characters, rather than dropping them. std::string XmlUnitTestResultPrinter::EscapeXml( const std::string& str, bool is_attribute) { Message m; for (size_t i = 0; i < str.size(); ++i) { const char ch = str[i]; switch (ch) { case '<': m << "<"; break; case '>': m << ">"; break; case '&': m << "&"; break; case '\'': if (is_attribute) m << "'"; else m << '\''; break; case '"': if (is_attribute) m << """; else m << '"'; break; default: if (IsValidXmlCharacter(ch)) { if (is_attribute && IsNormalizableWhitespace(ch)) m << "&#x" << String::FormatByte(static_cast(ch)) << ";"; else m << ch; } break; } } return m.GetString(); } // Returns the given string with all characters invalid in XML removed. // Currently invalid characters are dropped from the string. An // alternative is to replace them with certain characters such as . or ?. std::string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters( const std::string& str) { std::string output; output.reserve(str.size()); for (std::string::const_iterator it = str.begin(); it != str.end(); ++it) if (IsValidXmlCharacter(*it)) output.push_back(*it); return output; } // The following routines generate an XML representation of a UnitTest // object. // // This is how Google Test concepts map to the DTD: // // <-- corresponds to a UnitTest object // <-- corresponds to a TestCase object // <-- corresponds to a TestInfo object // ... // ... // ... // <-- individual assertion failures // // // // Formats the given time in milliseconds as seconds. std::string FormatTimeInMillisAsSeconds(TimeInMillis ms) { ::std::stringstream ss; ss << ms/1000.0; return ss.str(); } // Converts the given epoch time in milliseconds to a date string in the ISO // 8601 format, without the timezone information. std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms) { // Using non-reentrant version as localtime_r is not portable. time_t seconds = static_cast(ms / 1000); #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4996) // Temporarily disables warning 4996 // (function or variable may be unsafe). const struct tm* const time_struct = localtime(&seconds); // NOLINT # pragma warning(pop) // Restores the warning state again. #else const struct tm* const time_struct = localtime(&seconds); // NOLINT #endif if (time_struct == NULL) return ""; // Invalid ms value // YYYY-MM-DDThh:mm:ss return StreamableToString(time_struct->tm_year + 1900) + "-" + String::FormatIntWidth2(time_struct->tm_mon + 1) + "-" + String::FormatIntWidth2(time_struct->tm_mday) + "T" + String::FormatIntWidth2(time_struct->tm_hour) + ":" + String::FormatIntWidth2(time_struct->tm_min) + ":" + String::FormatIntWidth2(time_struct->tm_sec); } // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream, const char* data) { const char* segment = data; *stream << ""); if (next_segment != NULL) { stream->write( segment, static_cast(next_segment - segment)); *stream << "]]>]]>"); } else { *stream << segment; break; } } *stream << "]]>"; } void XmlUnitTestResultPrinter::OutputXmlAttribute( std::ostream* stream, const std::string& element_name, const std::string& name, const std::string& value) { const std::vector& allowed_names = GetReservedAttributesForElement(element_name); GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) != allowed_names.end()) << "Attribute " << name << " is not allowed for element <" << element_name << ">."; *stream << " " << name << "=\"" << EscapeXmlAttribute(value) << "\""; } // Prints an XML representation of a TestInfo object. // TODO(wan): There is also value in printing properties with the plain printer. void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, const char* test_case_name, const TestInfo& test_info) { const TestResult& result = *test_info.result(); const std::string kTestcase = "testcase"; *stream << " \n"; } const string location = internal::FormatCompilerIndependentFileLocation( part.file_name(), part.line_number()); const string summary = location + "\n" + part.summary(); *stream << " "; const string detail = location + "\n" + part.message(); OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str()); *stream << "\n"; } } if (failures == 0) *stream << " />\n"; else *stream << " \n"; } // Prints an XML representation of a TestCase object void XmlUnitTestResultPrinter::PrintXmlTestCase(std::ostream* stream, const TestCase& test_case) { const std::string kTestsuite = "testsuite"; *stream << " <" << kTestsuite; OutputXmlAttribute(stream, kTestsuite, "name", test_case.name()); OutputXmlAttribute(stream, kTestsuite, "tests", StreamableToString(test_case.reportable_test_count())); OutputXmlAttribute(stream, kTestsuite, "failures", StreamableToString(test_case.failed_test_count())); OutputXmlAttribute( stream, kTestsuite, "disabled", StreamableToString(test_case.reportable_disabled_test_count())); OutputXmlAttribute(stream, kTestsuite, "errors", "0"); OutputXmlAttribute(stream, kTestsuite, "time", FormatTimeInMillisAsSeconds(test_case.elapsed_time())); *stream << TestPropertiesAsXmlAttributes(test_case.ad_hoc_test_result()) << ">\n"; for (int i = 0; i < test_case.total_test_count(); ++i) { if (test_case.GetTestInfo(i)->is_reportable()) OutputXmlTestInfo(stream, test_case.name(), *test_case.GetTestInfo(i)); } *stream << " \n"; } // Prints an XML summary of unit_test to output stream out. void XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream, const UnitTest& unit_test) { const std::string kTestsuites = "testsuites"; *stream << "\n"; *stream << "<" << kTestsuites; OutputXmlAttribute(stream, kTestsuites, "tests", StreamableToString(unit_test.reportable_test_count())); OutputXmlAttribute(stream, kTestsuites, "failures", StreamableToString(unit_test.failed_test_count())); OutputXmlAttribute( stream, kTestsuites, "disabled", StreamableToString(unit_test.reportable_disabled_test_count())); OutputXmlAttribute(stream, kTestsuites, "errors", "0"); OutputXmlAttribute( stream, kTestsuites, "timestamp", FormatEpochTimeInMillisAsIso8601(unit_test.start_timestamp())); OutputXmlAttribute(stream, kTestsuites, "time", FormatTimeInMillisAsSeconds(unit_test.elapsed_time())); if (GTEST_FLAG(shuffle)) { OutputXmlAttribute(stream, kTestsuites, "random_seed", StreamableToString(unit_test.random_seed())); } *stream << TestPropertiesAsXmlAttributes(unit_test.ad_hoc_test_result()); OutputXmlAttribute(stream, kTestsuites, "name", "AllTests"); *stream << ">\n"; for (int i = 0; i < unit_test.total_test_case_count(); ++i) { if (unit_test.GetTestCase(i)->reportable_test_count() > 0) PrintXmlTestCase(stream, *unit_test.GetTestCase(i)); } *stream << "\n"; } // Produces a string representing the test properties in a result as space // delimited XML attributes based on the property key="value" pairs. std::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes( const TestResult& result) { Message attributes; for (int i = 0; i < result.test_property_count(); ++i) { const TestProperty& property = result.GetTestProperty(i); attributes << " " << property.key() << "=" << "\"" << EscapeXmlAttribute(property.value()) << "\""; } return attributes.GetString(); } // End XmlUnitTestResultPrinter #if GTEST_CAN_STREAM_RESULTS_ // Checks if str contains '=', '&', '%' or '\n' characters. If yes, // replaces them by "%xx" where xx is their hexadecimal value. For // example, replaces "=" with "%3D". This algorithm is O(strlen(str)) // in both time and space -- important as the input str may contain an // arbitrarily long test failure message and stack trace. string StreamingListener::UrlEncode(const char* str) { string result; result.reserve(strlen(str) + 1); for (char ch = *str; ch != '\0'; ch = *++str) { switch (ch) { case '%': case '=': case '&': case '\n': result.append("%" + String::FormatByte(static_cast(ch))); break; default: result.push_back(ch); break; } } return result; } void StreamingListener::SocketWriter::MakeConnection() { GTEST_CHECK_(sockfd_ == -1) << "MakeConnection() can't be called when there is already a connection."; addrinfo hints; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; // To allow both IPv4 and IPv6 addresses. hints.ai_socktype = SOCK_STREAM; addrinfo* servinfo = NULL; // Use the getaddrinfo() to get a linked list of IP addresses for // the given host name. const int error_num = getaddrinfo( host_name_.c_str(), port_num_.c_str(), &hints, &servinfo); if (error_num != 0) { GTEST_LOG_(WARNING) << "stream_result_to: getaddrinfo() failed: " << gai_strerror(error_num); } // Loop through all the results and connect to the first we can. for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != NULL; cur_addr = cur_addr->ai_next) { sockfd_ = socket( cur_addr->ai_family, cur_addr->ai_socktype, cur_addr->ai_protocol); if (sockfd_ != -1) { // Connect the client socket to the server socket. if (connect(sockfd_, cur_addr->ai_addr, cur_addr->ai_addrlen) == -1) { close(sockfd_); sockfd_ = -1; } } } freeaddrinfo(servinfo); // all done with this structure if (sockfd_ == -1) { GTEST_LOG_(WARNING) << "stream_result_to: failed to connect to " << host_name_ << ":" << port_num_; } } // End of class Streaming Listener #endif // GTEST_CAN_STREAM_RESULTS__ // Class ScopedTrace // Pushes the given source file location and message onto a per-thread // trace stack maintained by Google Test. ScopedTrace::ScopedTrace(const char* file, int line, const Message& message) GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { TraceInfo trace; trace.file = file; trace.line = line; trace.message = message.GetString(); UnitTest::GetInstance()->PushGTestTrace(trace); } // Pops the info pushed by the c'tor. ScopedTrace::~ScopedTrace() GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { UnitTest::GetInstance()->PopGTestTrace(); } // class OsStackTraceGetter // Returns the current OS stack trace as an std::string. Parameters: // // max_depth - the maximum number of stack frames to be included // in the trace. // skip_count - the number of top frames to be skipped; doesn't count // against max_depth. // string OsStackTraceGetter::CurrentStackTrace(int /* max_depth */, int /* skip_count */) GTEST_LOCK_EXCLUDED_(mutex_) { return ""; } void OsStackTraceGetter::UponLeavingGTest() GTEST_LOCK_EXCLUDED_(mutex_) { } const char* const OsStackTraceGetter::kElidedFramesMarker = "... " GTEST_NAME_ " internal frames ..."; // A helper class that creates the premature-exit file in its // constructor and deletes the file in its destructor. class ScopedPrematureExitFile { public: explicit ScopedPrematureExitFile(const char* premature_exit_filepath) : premature_exit_filepath_(premature_exit_filepath) { // If a path to the premature-exit file is specified... if (premature_exit_filepath != NULL && *premature_exit_filepath != '\0') { // create the file with a single "0" character in it. I/O // errors are ignored as there's nothing better we can do and we // don't want to fail the test because of this. FILE* pfile = posix::FOpen(premature_exit_filepath, "w"); fwrite("0", 1, 1, pfile); fclose(pfile); } } ~ScopedPrematureExitFile() { if (premature_exit_filepath_ != NULL && *premature_exit_filepath_ != '\0') { remove(premature_exit_filepath_); } } private: const char* const premature_exit_filepath_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedPrematureExitFile); }; } // namespace internal // class TestEventListeners TestEventListeners::TestEventListeners() : repeater_(new internal::TestEventRepeater()), default_result_printer_(NULL), default_xml_generator_(NULL) { } TestEventListeners::~TestEventListeners() { delete repeater_; } // Returns the standard listener responsible for the default console // output. Can be removed from the listeners list to shut down default // console output. Note that removing this object from the listener list // with Release transfers its ownership to the user. void TestEventListeners::Append(TestEventListener* listener) { repeater_->Append(listener); } // Removes the given event listener from the list and returns it. It then // becomes the caller's responsibility to delete the listener. Returns // NULL if the listener is not found in the list. TestEventListener* TestEventListeners::Release(TestEventListener* listener) { if (listener == default_result_printer_) default_result_printer_ = NULL; else if (listener == default_xml_generator_) default_xml_generator_ = NULL; return repeater_->Release(listener); } // Returns repeater that broadcasts the TestEventListener events to all // subscribers. TestEventListener* TestEventListeners::repeater() { return repeater_; } // Sets the default_result_printer attribute to the provided listener. // The listener is also added to the listener list and previous // default_result_printer is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) { if (default_result_printer_ != listener) { // It is an error to pass this method a listener that is already in the // list. delete Release(default_result_printer_); default_result_printer_ = listener; if (listener != NULL) Append(listener); } } // Sets the default_xml_generator attribute to the provided listener. The // listener is also added to the listener list and previous // default_xml_generator is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) { if (default_xml_generator_ != listener) { // It is an error to pass this method a listener that is already in the // list. delete Release(default_xml_generator_); default_xml_generator_ = listener; if (listener != NULL) Append(listener); } } // Controls whether events will be forwarded by the repeater to the // listeners in the list. bool TestEventListeners::EventForwardingEnabled() const { return repeater_->forwarding_enabled(); } void TestEventListeners::SuppressEventForwarding() { repeater_->set_forwarding_enabled(false); } // class UnitTest // Gets the singleton UnitTest object. The first time this method is // called, a UnitTest object is constructed and returned. Consecutive // calls will return the same object. // // We don't protect this under mutex_ as a user is not supposed to // call this before main() starts, from which point on the return // value will never change. UnitTest* UnitTest::GetInstance() { // When compiled with MSVC 7.1 in optimized mode, destroying the // UnitTest object upon exiting the program messes up the exit code, // causing successful tests to appear failed. We have to use a // different implementation in this case to bypass the compiler bug. // This implementation makes the compiler happy, at the cost of // leaking the UnitTest object. // CodeGear C++Builder insists on a public destructor for the // default implementation. Use this implementation to keep good OO // design with private destructor. #if (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) static UnitTest* const instance = new UnitTest; return instance; #else static UnitTest instance; return &instance; #endif // (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) } // Gets the number of successful test cases. int UnitTest::successful_test_case_count() const { return impl()->successful_test_case_count(); } // Gets the number of failed test cases. int UnitTest::failed_test_case_count() const { return impl()->failed_test_case_count(); } // Gets the number of all test cases. int UnitTest::total_test_case_count() const { return impl()->total_test_case_count(); } // Gets the number of all test cases that contain at least one test // that should run. int UnitTest::test_case_to_run_count() const { return impl()->test_case_to_run_count(); } // Gets the number of successful tests. int UnitTest::successful_test_count() const { return impl()->successful_test_count(); } // Gets the number of failed tests. int UnitTest::failed_test_count() const { return impl()->failed_test_count(); } // Gets the number of disabled tests that will be reported in the XML report. int UnitTest::reportable_disabled_test_count() const { return impl()->reportable_disabled_test_count(); } // Gets the number of disabled tests. int UnitTest::disabled_test_count() const { return impl()->disabled_test_count(); } // Gets the number of tests to be printed in the XML report. int UnitTest::reportable_test_count() const { return impl()->reportable_test_count(); } // Gets the number of all tests. int UnitTest::total_test_count() const { return impl()->total_test_count(); } // Gets the number of tests that should run. int UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); } // Gets the time of the test program start, in ms from the start of the // UNIX epoch. internal::TimeInMillis UnitTest::start_timestamp() const { return impl()->start_timestamp(); } // Gets the elapsed time, in milliseconds. internal::TimeInMillis UnitTest::elapsed_time() const { return impl()->elapsed_time(); } // Returns true iff the unit test passed (i.e. all test cases passed). bool UnitTest::Passed() const { return impl()->Passed(); } // Returns true iff the unit test failed (i.e. some test case failed // or something outside of all tests failed). bool UnitTest::Failed() const { return impl()->Failed(); } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. const TestCase* UnitTest::GetTestCase(int i) const { return impl()->GetTestCase(i); } // Returns the TestResult containing information on test failures and // properties logged outside of individual test cases. const TestResult& UnitTest::ad_hoc_test_result() const { return *impl()->ad_hoc_test_result(); } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. TestCase* UnitTest::GetMutableTestCase(int i) { return impl()->GetMutableTestCase(i); } // Returns the list of event listeners that can be used to track events // inside Google Test. TestEventListeners& UnitTest::listeners() { return *impl()->listeners(); } // Registers and returns a global test environment. When a test // program is run, all global test environments will be set-up in the // order they were registered. After all tests in the program have // finished, all global test environments will be torn-down in the // *reverse* order they were registered. // // The UnitTest object takes ownership of the given environment. // // We don't protect this under mutex_, as we only support calling it // from the main thread. Environment* UnitTest::AddEnvironment(Environment* env) { if (env == NULL) { return NULL; } impl_->environments().push_back(env); return env; } // Adds a TestPartResult to the current TestResult object. All Google Test // assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call // this to report their results. The user code should use the // assertion macros instead of calling this directly. void UnitTest::AddTestPartResult( TestPartResult::Type result_type, const char* file_name, int line_number, const std::string& message, const std::string& os_stack_trace) GTEST_LOCK_EXCLUDED_(mutex_) { Message msg; msg << message; internal::MutexLock lock(&mutex_); if (impl_->gtest_trace_stack().size() > 0) { msg << "\n" << GTEST_NAME_ << " trace:"; for (int i = static_cast(impl_->gtest_trace_stack().size()); i > 0; --i) { const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1]; msg << "\n" << internal::FormatFileLocation(trace.file, trace.line) << " " << trace.message; } } if (os_stack_trace.c_str() != NULL && !os_stack_trace.empty()) { msg << internal::kStackTraceMarker << os_stack_trace; } const TestPartResult result = TestPartResult(result_type, file_name, line_number, msg.GetString().c_str()); impl_->GetTestPartResultReporterForCurrentThread()-> ReportTestPartResult(result); if (result_type != TestPartResult::kSuccess) { // gtest_break_on_failure takes precedence over // gtest_throw_on_failure. This allows a user to set the latter // in the code (perhaps in order to use Google Test assertions // with another testing framework) and specify the former on the // command line for debugging. if (GTEST_FLAG(break_on_failure)) { #if GTEST_OS_WINDOWS // Using DebugBreak on Windows allows gtest to still break into a debugger // when a failure happens and both the --gtest_break_on_failure and // the --gtest_catch_exceptions flags are specified. DebugBreak(); #else // Dereference NULL through a volatile pointer to prevent the compiler // from removing. We use this rather than abort() or __builtin_trap() for // portability: Symbian doesn't implement abort() well, and some debuggers // don't correctly trap abort(). *static_cast(NULL) = 1; #endif // GTEST_OS_WINDOWS } else if (GTEST_FLAG(throw_on_failure)) { #if GTEST_HAS_EXCEPTIONS throw internal::GoogleTestFailureException(result); #else // We cannot call abort() as it generates a pop-up in debug mode // that cannot be suppressed in VC 7.1 or below. exit(1); #endif } } } // Adds a TestProperty to the current TestResult object when invoked from // inside a test, to current TestCase's ad_hoc_test_result_ when invoked // from SetUpTestCase or TearDownTestCase, or to the global property set // when invoked elsewhere. If the result already contains a property with // the same key, the value will be updated. void UnitTest::RecordProperty(const std::string& key, const std::string& value) { impl_->RecordProperty(TestProperty(key, value)); } // Runs all tests in this UnitTest object and prints the result. // Returns 0 if successful, or 1 otherwise. // // We don't protect this under mutex_, as we only support calling it // from the main thread. int UnitTest::Run() { const bool in_death_test_child_process = internal::GTEST_FLAG(internal_run_death_test).length() > 0; // Google Test implements this protocol for catching that a test // program exits before returning control to Google Test: // // 1. Upon start, Google Test creates a file whose absolute path // is specified by the environment variable // TEST_PREMATURE_EXIT_FILE. // 2. When Google Test has finished its work, it deletes the file. // // This allows a test runner to set TEST_PREMATURE_EXIT_FILE before // running a Google-Test-based test program and check the existence // of the file at the end of the test execution to see if it has // exited prematurely. // If we are in the child process of a death test, don't // create/delete the premature exit file, as doing so is unnecessary // and will confuse the parent process. Otherwise, create/delete // the file upon entering/leaving this function. If the program // somehow exits before this function has a chance to return, the // premature-exit file will be left undeleted, causing a test runner // that understands the premature-exit-file protocol to report the // test as having failed. const internal::ScopedPrematureExitFile premature_exit_file( in_death_test_child_process ? NULL : internal::posix::GetEnv("TEST_PREMATURE_EXIT_FILE")); // Captures the value of GTEST_FLAG(catch_exceptions). This value will be // used for the duration of the program. impl()->set_catch_exceptions(GTEST_FLAG(catch_exceptions)); #if GTEST_HAS_SEH // Either the user wants Google Test to catch exceptions thrown by the // tests or this is executing in the context of death test child // process. In either case the user does not want to see pop-up dialogs // about crashes - they are expected. if (impl()->catch_exceptions() || in_death_test_child_process) { # if !GTEST_OS_WINDOWS_MOBILE // SetErrorMode doesn't exist on CE. SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); # endif // !GTEST_OS_WINDOWS_MOBILE # if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE // Death test children can be terminated with _abort(). On Windows, // _abort() can show a dialog with a warning message. This forces the // abort message to go to stderr instead. _set_error_mode(_OUT_TO_STDERR); # endif # if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE // In the debug version, Visual Studio pops up a separate dialog // offering a choice to debug the aborted program. We need to suppress // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement // executed. Google Test will notify the user of any unexpected // failure via stderr. // // VC++ doesn't define _set_abort_behavior() prior to the version 8.0. // Users of prior VC versions shall suffer the agony and pain of // clicking through the countless debug dialogs. // TODO(vladl@google.com): find a way to suppress the abort dialog() in the // debug mode when compiled with VC 7.1 or lower. if (!GTEST_FLAG(break_on_failure)) _set_abort_behavior( 0x0, // Clear the following flags: _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump. # endif } #endif // GTEST_HAS_SEH return internal::HandleExceptionsInMethodIfSupported( impl(), &internal::UnitTestImpl::RunAllTests, "auxiliary test code (environments or event listeners)") ? 0 : 1; } // Returns the working directory when the first TEST() or TEST_F() was // executed. const char* UnitTest::original_working_dir() const { return impl_->original_working_dir_.c_str(); } // Returns the TestCase object for the test that's currently running, // or NULL if no test is running. const TestCase* UnitTest::current_test_case() const GTEST_LOCK_EXCLUDED_(mutex_) { internal::MutexLock lock(&mutex_); return impl_->current_test_case(); } // Returns the TestInfo object for the test that's currently running, // or NULL if no test is running. const TestInfo* UnitTest::current_test_info() const GTEST_LOCK_EXCLUDED_(mutex_) { internal::MutexLock lock(&mutex_); return impl_->current_test_info(); } // Returns the random seed used at the start of the current test run. int UnitTest::random_seed() const { return impl_->random_seed(); } #if GTEST_HAS_PARAM_TEST // Returns ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. internal::ParameterizedTestCaseRegistry& UnitTest::parameterized_test_registry() GTEST_LOCK_EXCLUDED_(mutex_) { return impl_->parameterized_test_registry(); } #endif // GTEST_HAS_PARAM_TEST // Creates an empty UnitTest. UnitTest::UnitTest() { impl_ = new internal::UnitTestImpl(this); } // Destructor of UnitTest. UnitTest::~UnitTest() { delete impl_; } // Pushes a trace defined by SCOPED_TRACE() on to the per-thread // Google Test trace stack. void UnitTest::PushGTestTrace(const internal::TraceInfo& trace) GTEST_LOCK_EXCLUDED_(mutex_) { internal::MutexLock lock(&mutex_); impl_->gtest_trace_stack().push_back(trace); } // Pops a trace from the per-thread Google Test trace stack. void UnitTest::PopGTestTrace() GTEST_LOCK_EXCLUDED_(mutex_) { internal::MutexLock lock(&mutex_); impl_->gtest_trace_stack().pop_back(); } namespace internal { UnitTestImpl::UnitTestImpl(UnitTest* parent) : parent_(parent), #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4355) // Temporarily disables warning 4355 // (using this in initializer). default_global_test_part_result_reporter_(this), default_per_thread_test_part_result_reporter_(this), # pragma warning(pop) // Restores the warning state again. #else default_global_test_part_result_reporter_(this), default_per_thread_test_part_result_reporter_(this), #endif // _MSC_VER global_test_part_result_repoter_( &default_global_test_part_result_reporter_), per_thread_test_part_result_reporter_( &default_per_thread_test_part_result_reporter_), #if GTEST_HAS_PARAM_TEST parameterized_test_registry_(), parameterized_tests_registered_(false), #endif // GTEST_HAS_PARAM_TEST last_death_test_case_(-1), current_test_case_(NULL), current_test_info_(NULL), ad_hoc_test_result_(), os_stack_trace_getter_(NULL), post_flag_parse_init_performed_(false), random_seed_(0), // Will be overridden by the flag before first use. random_(0), // Will be reseeded before first use. start_timestamp_(0), elapsed_time_(0), #if GTEST_HAS_DEATH_TEST death_test_factory_(new DefaultDeathTestFactory), #endif // Will be overridden by the flag before first use. catch_exceptions_(false) { listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter); } UnitTestImpl::~UnitTestImpl() { // Deletes every TestCase. ForEach(test_cases_, internal::Delete); // Deletes every Environment. ForEach(environments_, internal::Delete); delete os_stack_trace_getter_; } // Adds a TestProperty to the current TestResult object when invoked in a // context of a test, to current test case's ad_hoc_test_result when invoke // from SetUpTestCase/TearDownTestCase, or to the global property set // otherwise. If the result already contains a property with the same key, // the value will be updated. void UnitTestImpl::RecordProperty(const TestProperty& test_property) { std::string xml_element; TestResult* test_result; // TestResult appropriate for property recording. if (current_test_info_ != NULL) { xml_element = "testcase"; test_result = &(current_test_info_->result_); } else if (current_test_case_ != NULL) { xml_element = "testsuite"; test_result = &(current_test_case_->ad_hoc_test_result_); } else { xml_element = "testsuites"; test_result = &ad_hoc_test_result_; } test_result->RecordProperty(xml_element, test_property); } #if GTEST_HAS_DEATH_TEST // Disables event forwarding if the control is currently in a death test // subprocess. Must not be called before InitGoogleTest. void UnitTestImpl::SuppressTestEventsIfInSubprocess() { if (internal_run_death_test_flag_.get() != NULL) listeners()->SuppressEventForwarding(); } #endif // GTEST_HAS_DEATH_TEST // Initializes event listeners performing XML output as specified by // UnitTestOptions. Must not be called before InitGoogleTest. void UnitTestImpl::ConfigureXmlOutput() { const std::string& output_format = UnitTestOptions::GetOutputFormat(); if (output_format == "xml") { listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter( UnitTestOptions::GetAbsolutePathToOutputFile().c_str())); } else if (output_format != "") { printf("WARNING: unrecognized output format \"%s\" ignored.\n", output_format.c_str()); fflush(stdout); } } #if GTEST_CAN_STREAM_RESULTS_ // Initializes event listeners for streaming test results in string form. // Must not be called before InitGoogleTest. void UnitTestImpl::ConfigureStreamingOutput() { const std::string& target = GTEST_FLAG(stream_result_to); if (!target.empty()) { const size_t pos = target.find(':'); if (pos != std::string::npos) { listeners()->Append(new StreamingListener(target.substr(0, pos), target.substr(pos+1))); } else { printf("WARNING: unrecognized streaming target \"%s\" ignored.\n", target.c_str()); fflush(stdout); } } } #endif // GTEST_CAN_STREAM_RESULTS_ // Performs initialization dependent upon flag values obtained in // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest // this function is also called from RunAllTests. Since this function can be // called more than once, it has to be idempotent. void UnitTestImpl::PostFlagParsingInit() { // Ensures that this function does not execute more than once. if (!post_flag_parse_init_performed_) { post_flag_parse_init_performed_ = true; #if GTEST_HAS_DEATH_TEST InitDeathTestSubprocessControlInfo(); SuppressTestEventsIfInSubprocess(); #endif // GTEST_HAS_DEATH_TEST // Registers parameterized tests. This makes parameterized tests // available to the UnitTest reflection API without running // RUN_ALL_TESTS. RegisterParameterizedTests(); // Configures listeners for XML output. This makes it possible for users // to shut down the default XML output before invoking RUN_ALL_TESTS. ConfigureXmlOutput(); #if GTEST_CAN_STREAM_RESULTS_ // Configures listeners for streaming test results to the specified server. ConfigureStreamingOutput(); #endif // GTEST_CAN_STREAM_RESULTS_ } } // A predicate that checks the name of a TestCase against a known // value. // // This is used for implementation of the UnitTest class only. We put // it in the anonymous namespace to prevent polluting the outer // namespace. // // TestCaseNameIs is copyable. class TestCaseNameIs { public: // Constructor. explicit TestCaseNameIs(const std::string& name) : name_(name) {} // Returns true iff the name of test_case matches name_. bool operator()(const TestCase* test_case) const { return test_case != NULL && strcmp(test_case->name(), name_.c_str()) == 0; } private: std::string name_; }; // Finds and returns a TestCase with the given name. If one doesn't // exist, creates one and returns it. It's the CALLER'S // RESPONSIBILITY to ensure that this function is only called WHEN THE // TESTS ARE NOT SHUFFLED. // // Arguments: // // test_case_name: name of the test case // type_param: the name of the test case's type parameter, or NULL if // this is not a typed or a type-parameterized test case. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase* UnitTestImpl::GetTestCase(const char* test_case_name, const char* type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc) { // Can we find a TestCase with the given name? const std::vector::const_iterator test_case = std::find_if(test_cases_.begin(), test_cases_.end(), TestCaseNameIs(test_case_name)); if (test_case != test_cases_.end()) return *test_case; // No. Let's create one. TestCase* const new_test_case = new TestCase(test_case_name, type_param, set_up_tc, tear_down_tc); // Is this a death test case? if (internal::UnitTestOptions::MatchesFilter(test_case_name, kDeathTestCaseFilter)) { // Yes. Inserts the test case after the last death test case // defined so far. This only works when the test cases haven't // been shuffled. Otherwise we may end up running a death test // after a non-death test. ++last_death_test_case_; test_cases_.insert(test_cases_.begin() + last_death_test_case_, new_test_case); } else { // No. Appends to the end of the list. test_cases_.push_back(new_test_case); } test_case_indices_.push_back(static_cast(test_case_indices_.size())); return new_test_case; } // Helpers for setting up / tearing down the given environment. They // are for use in the ForEach() function. static void SetUpEnvironment(Environment* env) { env->SetUp(); } static void TearDownEnvironment(Environment* env) { env->TearDown(); } // Runs all tests in this UnitTest object, prints the result, and // returns true if all tests are successful. If any exception is // thrown during a test, the test is considered to be failed, but the // rest of the tests will still be run. // // When parameterized tests are enabled, it expands and registers // parameterized tests first in RegisterParameterizedTests(). // All other functions called from RunAllTests() may safely assume that // parameterized tests are ready to be counted and run. bool UnitTestImpl::RunAllTests() { // Makes sure InitGoogleTest() was called. if (!GTestIsInitialized()) { printf("%s", "\nThis test program did NOT call ::testing::InitGoogleTest " "before calling RUN_ALL_TESTS(). Please fix it.\n"); return false; } // Do not run any test if the --help flag was specified. if (g_help_flag) return true; // Repeats the call to the post-flag parsing initialization in case the // user didn't call InitGoogleTest. PostFlagParsingInit(); // Even if sharding is not on, test runners may want to use the // GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding // protocol. internal::WriteToShardStatusFileIfNeeded(); // True iff we are in a subprocess for running a thread-safe-style // death test. bool in_subprocess_for_death_test = false; #if GTEST_HAS_DEATH_TEST in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL); #endif // GTEST_HAS_DEATH_TEST const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex, in_subprocess_for_death_test); // Compares the full test names with the filter to decide which // tests to run. const bool has_tests_to_run = FilterTests(should_shard ? HONOR_SHARDING_PROTOCOL : IGNORE_SHARDING_PROTOCOL) > 0; // Lists the tests and exits if the --gtest_list_tests flag was specified. if (GTEST_FLAG(list_tests)) { // This must be called *after* FilterTests() has been called. ListTestsMatchingFilter(); return true; } random_seed_ = GTEST_FLAG(shuffle) ? GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0; // True iff at least one test has failed. bool failed = false; TestEventListener* repeater = listeners()->repeater(); start_timestamp_ = GetTimeInMillis(); repeater->OnTestProgramStart(*parent_); // How many times to repeat the tests? We don't want to repeat them // when we are inside the subprocess of a death test. const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat); // Repeats forever if the repeat count is negative. const bool forever = repeat < 0; for (int i = 0; forever || i != repeat; i++) { // We want to preserve failures generated by ad-hoc test // assertions executed before RUN_ALL_TESTS(). ClearNonAdHocTestResult(); const TimeInMillis start = GetTimeInMillis(); // Shuffles test cases and tests if requested. if (has_tests_to_run && GTEST_FLAG(shuffle)) { random()->Reseed(random_seed_); // This should be done before calling OnTestIterationStart(), // such that a test event listener can see the actual test order // in the event. ShuffleTests(); } // Tells the unit test event listeners that the tests are about to start. repeater->OnTestIterationStart(*parent_, i); // Runs each test case if there is at least one test to run. if (has_tests_to_run) { // Sets up all environments beforehand. repeater->OnEnvironmentsSetUpStart(*parent_); ForEach(environments_, SetUpEnvironment); repeater->OnEnvironmentsSetUpEnd(*parent_); // Runs the tests only if there was no fatal failure during global // set-up. if (!Test::HasFatalFailure()) { for (int test_index = 0; test_index < total_test_case_count(); test_index++) { GetMutableTestCase(test_index)->Run(); } } // Tears down all environments in reverse order afterwards. repeater->OnEnvironmentsTearDownStart(*parent_); std::for_each(environments_.rbegin(), environments_.rend(), TearDownEnvironment); repeater->OnEnvironmentsTearDownEnd(*parent_); } elapsed_time_ = GetTimeInMillis() - start; // Tells the unit test event listener that the tests have just finished. repeater->OnTestIterationEnd(*parent_, i); // Gets the result and clears it. if (!Passed()) { failed = true; } // Restores the original test order after the iteration. This // allows the user to quickly repro a failure that happens in the // N-th iteration without repeating the first (N - 1) iterations. // This is not enclosed in "if (GTEST_FLAG(shuffle)) { ... }", in // case the user somehow changes the value of the flag somewhere // (it's always safe to unshuffle the tests). UnshuffleTests(); if (GTEST_FLAG(shuffle)) { // Picks a new random seed for each iteration. random_seed_ = GetNextRandomSeed(random_seed_); } } repeater->OnTestProgramEnd(*parent_); return !failed; } // Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file // if the variable is present. If a file already exists at this location, this // function will write over it. If the variable is present, but the file cannot // be created, prints an error and exits. void WriteToShardStatusFileIfNeeded() { const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile); if (test_shard_file != NULL) { FILE* const file = posix::FOpen(test_shard_file, "w"); if (file == NULL) { ColoredPrintf(COLOR_RED, "Could not write to the test shard status file \"%s\" " "specified by the %s environment variable.\n", test_shard_file, kTestShardStatusFile); fflush(stdout); exit(EXIT_FAILURE); } fclose(file); } } // Checks whether sharding is enabled by examining the relevant // environment variable values. If the variables are present, // but inconsistent (i.e., shard_index >= total_shards), prints // an error and exits. If in_subprocess_for_death_test, sharding is // disabled because it must only be applied to the original test // process. Otherwise, we could filter out death tests we intended to execute. bool ShouldShard(const char* total_shards_env, const char* shard_index_env, bool in_subprocess_for_death_test) { if (in_subprocess_for_death_test) { return false; } const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1); const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1); if (total_shards == -1 && shard_index == -1) { return false; } else if (total_shards == -1 && shard_index != -1) { const Message msg = Message() << "Invalid environment variables: you have " << kTestShardIndex << " = " << shard_index << ", but have left " << kTestTotalShards << " unset.\n"; ColoredPrintf(COLOR_RED, msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (total_shards != -1 && shard_index == -1) { const Message msg = Message() << "Invalid environment variables: you have " << kTestTotalShards << " = " << total_shards << ", but have left " << kTestShardIndex << " unset.\n"; ColoredPrintf(COLOR_RED, msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (shard_index < 0 || shard_index >= total_shards) { const Message msg = Message() << "Invalid environment variables: we require 0 <= " << kTestShardIndex << " < " << kTestTotalShards << ", but you have " << kTestShardIndex << "=" << shard_index << ", " << kTestTotalShards << "=" << total_shards << ".\n"; ColoredPrintf(COLOR_RED, msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } return total_shards > 1; } // Parses the environment variable var as an Int32. If it is unset, // returns default_val. If it is not an Int32, prints an error // and aborts. Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) { const char* str_val = posix::GetEnv(var); if (str_val == NULL) { return default_val; } Int32 result; if (!ParseInt32(Message() << "The value of environment variable " << var, str_val, &result)) { exit(EXIT_FAILURE); } return result; } // Given the total number of shards, the shard index, and the test id, // returns true iff the test should be run on this shard. The test id is // some arbitrary but unique non-negative integer assigned to each test // method. Assumes that 0 <= shard_index < total_shards. bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { return (test_id % total_shards) == shard_index; } // Compares the name of each test with the user-specified filter to // decide whether the test should be run, then records the result in // each TestCase and TestInfo object. // If shard_tests == true, further filters tests based on sharding // variables in the environment - see // http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide. // Returns the number of tests that should run. int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ? Int32FromEnvOrDie(kTestTotalShards, -1) : -1; const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ? Int32FromEnvOrDie(kTestShardIndex, -1) : -1; // num_runnable_tests are the number of tests that will // run across all shards (i.e., match filter and are not disabled). // num_selected_tests are the number of tests to be run on // this shard. int num_runnable_tests = 0; int num_selected_tests = 0; for (size_t i = 0; i < test_cases_.size(); i++) { TestCase* const test_case = test_cases_[i]; const std::string &test_case_name = test_case->name(); test_case->set_should_run(false); for (size_t j = 0; j < test_case->test_info_list().size(); j++) { TestInfo* const test_info = test_case->test_info_list()[j]; const std::string test_name(test_info->name()); // A test is disabled if test case name or test name matches // kDisableTestFilter. const bool is_disabled = internal::UnitTestOptions::MatchesFilter(test_case_name, kDisableTestFilter) || internal::UnitTestOptions::MatchesFilter(test_name, kDisableTestFilter); test_info->is_disabled_ = is_disabled; const bool matches_filter = internal::UnitTestOptions::FilterMatchesTest(test_case_name, test_name); test_info->matches_filter_ = matches_filter; const bool is_runnable = (GTEST_FLAG(also_run_disabled_tests) || !is_disabled) && matches_filter; const bool is_selected = is_runnable && (shard_tests == IGNORE_SHARDING_PROTOCOL || ShouldRunTestOnShard(total_shards, shard_index, num_runnable_tests)); num_runnable_tests += is_runnable; num_selected_tests += is_selected; test_info->should_run_ = is_selected; test_case->set_should_run(test_case->should_run() || is_selected); } } return num_selected_tests; } // Prints the given C-string on a single line by replacing all '\n' // characters with string "\\n". If the output takes more than // max_length characters, only prints the first max_length characters // and "...". static void PrintOnOneLine(const char* str, int max_length) { if (str != NULL) { for (int i = 0; *str != '\0'; ++str) { if (i >= max_length) { printf("..."); break; } if (*str == '\n') { printf("\\n"); i += 2; } else { printf("%c", *str); ++i; } } } } // Prints the names of the tests matching the user-specified filter flag. void UnitTestImpl::ListTestsMatchingFilter() { // Print at most this many characters for each type/value parameter. const int kMaxParamLength = 250; for (size_t i = 0; i < test_cases_.size(); i++) { const TestCase* const test_case = test_cases_[i]; bool printed_test_case_name = false; for (size_t j = 0; j < test_case->test_info_list().size(); j++) { const TestInfo* const test_info = test_case->test_info_list()[j]; if (test_info->matches_filter_) { if (!printed_test_case_name) { printed_test_case_name = true; printf("%s.", test_case->name()); if (test_case->type_param() != NULL) { printf(" # %s = ", kTypeParamLabel); // We print the type parameter on a single line to make // the output easy to parse by a program. PrintOnOneLine(test_case->type_param(), kMaxParamLength); } printf("\n"); } printf(" %s", test_info->name()); if (test_info->value_param() != NULL) { printf(" # %s = ", kValueParamLabel); // We print the value parameter on a single line to make the // output easy to parse by a program. PrintOnOneLine(test_info->value_param(), kMaxParamLength); } printf("\n"); } } } fflush(stdout); } // Sets the OS stack trace getter. // // Does nothing if the input and the current OS stack trace getter are // the same; otherwise, deletes the old getter and makes the input the // current getter. void UnitTestImpl::set_os_stack_trace_getter( OsStackTraceGetterInterface* getter) { if (os_stack_trace_getter_ != getter) { delete os_stack_trace_getter_; os_stack_trace_getter_ = getter; } } // Returns the current OS stack trace getter if it is not NULL; // otherwise, creates an OsStackTraceGetter, makes it the current // getter, and returns it. OsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() { if (os_stack_trace_getter_ == NULL) { os_stack_trace_getter_ = new OsStackTraceGetter; } return os_stack_trace_getter_; } // Returns the TestResult for the test that's currently running, or // the TestResult for the ad hoc test if no test is running. TestResult* UnitTestImpl::current_test_result() { return current_test_info_ ? &(current_test_info_->result_) : &ad_hoc_test_result_; } // Shuffles all test cases, and the tests within each test case, // making sure that death tests are still run first. void UnitTestImpl::ShuffleTests() { // Shuffles the death test cases. ShuffleRange(random(), 0, last_death_test_case_ + 1, &test_case_indices_); // Shuffles the non-death test cases. ShuffleRange(random(), last_death_test_case_ + 1, static_cast(test_cases_.size()), &test_case_indices_); // Shuffles the tests inside each test case. for (size_t i = 0; i < test_cases_.size(); i++) { test_cases_[i]->ShuffleTests(random()); } } // Restores the test cases and tests to their order before the first shuffle. void UnitTestImpl::UnshuffleTests() { for (size_t i = 0; i < test_cases_.size(); i++) { // Unshuffles the tests in each test case. test_cases_[i]->UnshuffleTests(); // Resets the index of each test case. test_case_indices_[i] = static_cast(i); } } // Returns the current OS stack trace as an std::string. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in // the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. std::string GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, int skip_count) { // We pass skip_count + 1 to skip this wrapper function in addition // to what the user really wants to skip. return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1); } // Used by the GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_ macro to // suppress unreachable code warnings. namespace { class ClassUniqueToAlwaysTrue {}; } bool IsTrue(bool condition) { return condition; } bool AlwaysTrue() { #if GTEST_HAS_EXCEPTIONS // This condition is always false so AlwaysTrue() never actually throws, // but it makes the compiler think that it may throw. if (IsTrue(false)) throw ClassUniqueToAlwaysTrue(); #endif // GTEST_HAS_EXCEPTIONS return true; } // If *pstr starts with the given prefix, modifies *pstr to be right // past the prefix and returns true; otherwise leaves *pstr unchanged // and returns false. None of pstr, *pstr, and prefix can be NULL. bool SkipPrefix(const char* prefix, const char** pstr) { const size_t prefix_len = strlen(prefix); if (strncmp(*pstr, prefix, prefix_len) == 0) { *pstr += prefix_len; return true; } return false; } // Parses a string as a command line flag. The string should have // the format "--flag=value". When def_optional is true, the "=value" // part can be omitted. // // Returns the value of the flag, or NULL if the parsing failed. const char* ParseFlagValue(const char* str, const char* flag, bool def_optional) { // str and flag must not be NULL. if (str == NULL || flag == NULL) return NULL; // The flag must start with "--" followed by GTEST_FLAG_PREFIX_. const std::string flag_str = std::string("--") + GTEST_FLAG_PREFIX_ + flag; const size_t flag_len = flag_str.length(); if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL; // Skips the flag name. const char* flag_end = str + flag_len; // When def_optional is true, it's OK to not have a "=value" part. if (def_optional && (flag_end[0] == '\0')) { return flag_end; } // If def_optional is true and there are more characters after the // flag name, or if def_optional is false, there must be a '=' after // the flag name. if (flag_end[0] != '=') return NULL; // Returns the string after "=". return flag_end + 1; } // Parses a string for a bool flag, in the form of either // "--flag=value" or "--flag". // // In the former case, the value is taken as true as long as it does // not start with '0', 'f', or 'F'. // // In the latter case, the value is taken as true. // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. bool ParseBoolFlag(const char* str, const char* flag, bool* value) { // Gets the value of the flag as a string. const char* const value_str = ParseFlagValue(str, flag, true); // Aborts if the parsing failed. if (value_str == NULL) return false; // Converts the string value to a bool. *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F'); return true; } // Parses a string for an Int32 flag, in the form of // "--flag=value". // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { // Gets the value of the flag as a string. const char* const value_str = ParseFlagValue(str, flag, false); // Aborts if the parsing failed. if (value_str == NULL) return false; // Sets *value to the value of the flag. return ParseInt32(Message() << "The value of flag --" << flag, value_str, value); } // Parses a string for a string flag, in the form of // "--flag=value". // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. bool ParseStringFlag(const char* str, const char* flag, std::string* value) { // Gets the value of the flag as a string. const char* const value_str = ParseFlagValue(str, flag, false); // Aborts if the parsing failed. if (value_str == NULL) return false; // Sets *value to the value of the flag. *value = value_str; return true; } // Determines whether a string has a prefix that Google Test uses for its // flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_. // If Google Test detects that a command line flag has its prefix but is not // recognized, it will print its help message. Flags starting with // GTEST_INTERNAL_PREFIX_ followed by "internal_" are considered Google Test // internal flags and do not trigger the help message. static bool HasGoogleTestFlagPrefix(const char* str) { return (SkipPrefix("--", &str) || SkipPrefix("-", &str) || SkipPrefix("/", &str)) && !SkipPrefix(GTEST_FLAG_PREFIX_ "internal_", &str) && (SkipPrefix(GTEST_FLAG_PREFIX_, &str) || SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str)); } // Prints a string containing code-encoded text. The following escape // sequences can be used in the string to control the text color: // // @@ prints a single '@' character. // @R changes the color to red. // @G changes the color to green. // @Y changes the color to yellow. // @D changes to the default terminal text color. // // TODO(wan@google.com): Write tests for this once we add stdout // capturing to Google Test. static void PrintColorEncoded(const char* str) { GTestColor color = COLOR_DEFAULT; // The current color. // Conceptually, we split the string into segments divided by escape // sequences. Then we print one segment at a time. At the end of // each iteration, the str pointer advances to the beginning of the // next segment. for (;;) { const char* p = strchr(str, '@'); if (p == NULL) { ColoredPrintf(color, "%s", str); return; } ColoredPrintf(color, "%s", std::string(str, p).c_str()); const char ch = p[1]; str = p + 2; if (ch == '@') { ColoredPrintf(color, "@"); } else if (ch == 'D') { color = COLOR_DEFAULT; } else if (ch == 'R') { color = COLOR_RED; } else if (ch == 'G') { color = COLOR_GREEN; } else if (ch == 'Y') { color = COLOR_YELLOW; } else { --str; } } } static const char kColorEncodedHelpMessage[] = "This program contains tests written using " GTEST_NAME_ ". You can use the\n" "following command line flags to control its behavior:\n" "\n" "Test Selection:\n" " @G--" GTEST_FLAG_PREFIX_ "list_tests@D\n" " List the names of all tests instead of running them. The name of\n" " TEST(Foo, Bar) is \"Foo.Bar\".\n" " @G--" GTEST_FLAG_PREFIX_ "filter=@YPOSTIVE_PATTERNS" "[@G-@YNEGATIVE_PATTERNS]@D\n" " Run only the tests whose name matches one of the positive patterns but\n" " none of the negative patterns. '?' matches any single character; '*'\n" " matches any substring; ':' separates two patterns.\n" " @G--" GTEST_FLAG_PREFIX_ "also_run_disabled_tests@D\n" " Run all disabled tests too.\n" "\n" "Test Execution:\n" " @G--" GTEST_FLAG_PREFIX_ "repeat=@Y[COUNT]@D\n" " Run the tests repeatedly; use a negative count to repeat forever.\n" " @G--" GTEST_FLAG_PREFIX_ "shuffle@D\n" " Randomize tests' orders on every iteration.\n" " @G--" GTEST_FLAG_PREFIX_ "random_seed=@Y[NUMBER]@D\n" " Random number seed to use for shuffling test orders (between 1 and\n" " 99999, or 0 to use a seed based on the current time).\n" "\n" "Test Output:\n" " @G--" GTEST_FLAG_PREFIX_ "color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\n" " Enable/disable colored output. The default is @Gauto@D.\n" " -@G-" GTEST_FLAG_PREFIX_ "print_time=0@D\n" " Don't print the elapsed time of each test.\n" " @G--" GTEST_FLAG_PREFIX_ "output=xml@Y[@G:@YDIRECTORY_PATH@G" GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n" " Generate an XML report in the given directory or with the given file\n" " name. @YFILE_PATH@D defaults to @Gtest_details.xml@D.\n" #if GTEST_CAN_STREAM_RESULTS_ " @G--" GTEST_FLAG_PREFIX_ "stream_result_to=@YHOST@G:@YPORT@D\n" " Stream test results to the given server.\n" #endif // GTEST_CAN_STREAM_RESULTS_ "\n" "Assertion Behavior:\n" #if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS " @G--" GTEST_FLAG_PREFIX_ "death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\n" " Set the default death test style.\n" #endif // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS " @G--" GTEST_FLAG_PREFIX_ "break_on_failure@D\n" " Turn assertion failures into debugger break-points.\n" " @G--" GTEST_FLAG_PREFIX_ "throw_on_failure@D\n" " Turn assertion failures into C++ exceptions.\n" " @G--" GTEST_FLAG_PREFIX_ "catch_exceptions=0@D\n" " Do not report exceptions as test failures. Instead, allow them\n" " to crash the program or throw a pop-up (on Windows).\n" "\n" "Except for @G--" GTEST_FLAG_PREFIX_ "list_tests@D, you can alternatively set " "the corresponding\n" "environment variable of a flag (all letters in upper-case). For example, to\n" "disable colored text output, you can either specify @G--" GTEST_FLAG_PREFIX_ "color=no@D or set\n" "the @G" GTEST_FLAG_PREFIX_UPPER_ "COLOR@D environment variable to @Gno@D.\n" "\n" "For more information, please read the " GTEST_NAME_ " documentation at\n" "@G" GTEST_PROJECT_URL_ "@D. If you find a bug in " GTEST_NAME_ "\n" "(not one in your own code or tests), please report it to\n" "@G<" GTEST_DEV_EMAIL_ ">@D.\n"; // Parses the command line for Google Test flags, without initializing // other parts of Google Test. The type parameter CharType can be // instantiated to either char or wchar_t. template void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { for (int i = 1; i < *argc; i++) { const std::string arg_string = StreamableToString(argv[i]); const char* const arg = arg_string.c_str(); using internal::ParseBoolFlag; using internal::ParseInt32Flag; using internal::ParseStringFlag; // Do we see a Google Test flag? if (ParseBoolFlag(arg, kAlsoRunDisabledTestsFlag, >EST_FLAG(also_run_disabled_tests)) || ParseBoolFlag(arg, kBreakOnFailureFlag, >EST_FLAG(break_on_failure)) || ParseBoolFlag(arg, kCatchExceptionsFlag, >EST_FLAG(catch_exceptions)) || ParseStringFlag(arg, kColorFlag, >EST_FLAG(color)) || ParseStringFlag(arg, kDeathTestStyleFlag, >EST_FLAG(death_test_style)) || ParseBoolFlag(arg, kDeathTestUseFork, >EST_FLAG(death_test_use_fork)) || ParseStringFlag(arg, kFilterFlag, >EST_FLAG(filter)) || ParseStringFlag(arg, kInternalRunDeathTestFlag, >EST_FLAG(internal_run_death_test)) || ParseBoolFlag(arg, kListTestsFlag, >EST_FLAG(list_tests)) || ParseStringFlag(arg, kOutputFlag, >EST_FLAG(output)) || ParseBoolFlag(arg, kPrintTimeFlag, >EST_FLAG(print_time)) || ParseInt32Flag(arg, kRandomSeedFlag, >EST_FLAG(random_seed)) || ParseInt32Flag(arg, kRepeatFlag, >EST_FLAG(repeat)) || ParseBoolFlag(arg, kShuffleFlag, >EST_FLAG(shuffle)) || ParseInt32Flag(arg, kStackTraceDepthFlag, >EST_FLAG(stack_trace_depth)) || ParseStringFlag(arg, kStreamResultToFlag, >EST_FLAG(stream_result_to)) || ParseBoolFlag(arg, kThrowOnFailureFlag, >EST_FLAG(throw_on_failure)) ) { // Yes. Shift the remainder of the argv list left by one. Note // that argv has (*argc + 1) elements, the last one always being // NULL. The following loop moves the trailing NULL element as // well. for (int j = i; j != *argc; j++) { argv[j] = argv[j + 1]; } // Decrements the argument count. (*argc)--; // We also need to decrement the iterator as we just removed // an element. i--; } else if (arg_string == "--help" || arg_string == "-h" || arg_string == "-?" || arg_string == "/?" || HasGoogleTestFlagPrefix(arg)) { // Both help flag and unrecognized Google Test flags (excluding // internal ones) trigger help display. g_help_flag = true; } } if (g_help_flag) { // We print the help here instead of in RUN_ALL_TESTS(), as the // latter may not be called at all if the user is using Google // Test with another testing framework. PrintColorEncoded(kColorEncodedHelpMessage); } } // Parses the command line for Google Test flags, without initializing // other parts of Google Test. void ParseGoogleTestFlagsOnly(int* argc, char** argv) { ParseGoogleTestFlagsOnlyImpl(argc, argv); } void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) { ParseGoogleTestFlagsOnlyImpl(argc, argv); } // The internal implementation of InitGoogleTest(). // // The type parameter CharType can be instantiated to either char or // wchar_t. template void InitGoogleTestImpl(int* argc, CharType** argv) { g_init_gtest_count++; // We don't want to run the initialization code twice. if (g_init_gtest_count != 1) return; if (*argc <= 0) return; internal::g_executable_path = internal::StreamableToString(argv[0]); #if GTEST_HAS_DEATH_TEST g_argvs.clear(); for (int i = 0; i != *argc; i++) { g_argvs.push_back(StreamableToString(argv[i])); } #endif // GTEST_HAS_DEATH_TEST ParseGoogleTestFlagsOnly(argc, argv); GetUnitTestImpl()->PostFlagParsingInit(); } } // namespace internal // Initializes Google Test. This must be called before calling // RUN_ALL_TESTS(). In particular, it parses a command line for the // flags that Google Test recognizes. Whenever a Google Test flag is // seen, it is removed from argv, and *argc is decremented. // // No value is returned. Instead, the Google Test flag variables are // updated. // // Calling the function for the second time has no user-visible effect. void InitGoogleTest(int* argc, char** argv) { internal::InitGoogleTestImpl(argc, argv); } // This overloaded version can be used in Windows programs compiled in // UNICODE mode. void InitGoogleTest(int* argc, wchar_t** argv) { internal::InitGoogleTestImpl(argc, argv); } } // namespace testing // Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan), vladl@google.com (Vlad Losev) // // This file implements death tests. #if GTEST_HAS_DEATH_TEST # if GTEST_OS_MAC # include # endif // GTEST_OS_MAC # include # include # include # if GTEST_OS_LINUX # include # endif // GTEST_OS_LINUX # include # if GTEST_OS_WINDOWS # include # else # include # include # endif // GTEST_OS_WINDOWS # if GTEST_OS_QNX # include # endif // GTEST_OS_QNX #endif // GTEST_HAS_DEATH_TEST // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #undef GTEST_IMPLEMENTATION_ namespace testing { // Constants. // The default death test style. static const char kDefaultDeathTestStyle[] = "fast"; GTEST_DEFINE_string_( death_test_style, internal::StringFromGTestEnv("death_test_style", kDefaultDeathTestStyle), "Indicates how to run a death test in a forked child process: " "\"threadsafe\" (child process re-executes the test binary " "from the beginning, running only the specific death test) or " "\"fast\" (child process runs the death test immediately " "after forking)."); GTEST_DEFINE_bool_( death_test_use_fork, internal::BoolFromGTestEnv("death_test_use_fork", false), "Instructs to use fork()/_exit() instead of clone() in death tests. " "Ignored and always uses fork() on POSIX systems where clone() is not " "implemented. Useful when running under valgrind or similar tools if " "those do not support clone(). Valgrind 3.3.1 will just fail if " "it sees an unsupported combination of clone() flags. " "It is not recommended to use this flag w/o valgrind though it will " "work in 99% of the cases. Once valgrind is fixed, this flag will " "most likely be removed."); namespace internal { GTEST_DEFINE_string_( internal_run_death_test, "", "Indicates the file, line number, temporal index of " "the single death test to run, and a file descriptor to " "which a success code may be sent, all separated by " "the '|' characters. This flag is specified if and only if the current " "process is a sub-process launched for running a thread-safe " "death test. FOR INTERNAL USE ONLY."); } // namespace internal #if GTEST_HAS_DEATH_TEST namespace internal { // Valid only for fast death tests. Indicates the code is running in the // child process of a fast style death test. static bool g_in_fast_death_test_child = false; // Returns a Boolean value indicating whether the caller is currently // executing in the context of the death test child process. Tools such as // Valgrind heap checkers may need this to modify their behavior in death // tests. IMPORTANT: This is an internal utility. Using it may break the // implementation of death tests. User code MUST NOT use it. bool InDeathTestChild() { # if GTEST_OS_WINDOWS // On Windows, death tests are thread-safe regardless of the value of the // death_test_style flag. return !GTEST_FLAG(internal_run_death_test).empty(); # else if (GTEST_FLAG(death_test_style) == "threadsafe") return !GTEST_FLAG(internal_run_death_test).empty(); else return g_in_fast_death_test_child; #endif } } // namespace internal // ExitedWithCode constructor. ExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) { } // ExitedWithCode function-call operator. bool ExitedWithCode::operator()(int exit_status) const { # if GTEST_OS_WINDOWS return exit_status == exit_code_; # else return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_; # endif // GTEST_OS_WINDOWS } # if !GTEST_OS_WINDOWS // KilledBySignal constructor. KilledBySignal::KilledBySignal(int signum) : signum_(signum) { } // KilledBySignal function-call operator. bool KilledBySignal::operator()(int exit_status) const { return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_; } # endif // !GTEST_OS_WINDOWS namespace internal { // Utilities needed for death tests. // Generates a textual description of a given exit code, in the format // specified by wait(2). static std::string ExitSummary(int exit_code) { Message m; # if GTEST_OS_WINDOWS m << "Exited with exit status " << exit_code; # else if (WIFEXITED(exit_code)) { m << "Exited with exit status " << WEXITSTATUS(exit_code); } else if (WIFSIGNALED(exit_code)) { m << "Terminated by signal " << WTERMSIG(exit_code); } # ifdef WCOREDUMP if (WCOREDUMP(exit_code)) { m << " (core dumped)"; } # endif # endif // GTEST_OS_WINDOWS return m.GetString(); } // Returns true if exit_status describes a process that was terminated // by a signal, or exited normally with a nonzero exit code. bool ExitedUnsuccessfully(int exit_status) { return !ExitedWithCode(0)(exit_status); } # if !GTEST_OS_WINDOWS // Generates a textual failure message when a death test finds more than // one thread running, or cannot determine the number of threads, prior // to executing the given statement. It is the responsibility of the // caller not to pass a thread_count of 1. static std::string DeathTestThreadWarning(size_t thread_count) { Message msg; msg << "Death tests use fork(), which is unsafe particularly" << " in a threaded context. For this test, " << GTEST_NAME_ << " "; if (thread_count == 0) msg << "couldn't detect the number of threads."; else msg << "detected " << thread_count << " threads."; return msg.GetString(); } # endif // !GTEST_OS_WINDOWS // Flag characters for reporting a death test that did not die. static const char kDeathTestLived = 'L'; static const char kDeathTestReturned = 'R'; static const char kDeathTestThrew = 'T'; static const char kDeathTestInternalError = 'I'; // An enumeration describing all of the possible ways that a death test can // conclude. DIED means that the process died while executing the test // code; LIVED means that process lived beyond the end of the test code; // RETURNED means that the test statement attempted to execute a return // statement, which is not allowed; THREW means that the test statement // returned control by throwing an exception. IN_PROGRESS means the test // has not yet concluded. // TODO(vladl@google.com): Unify names and possibly values for // AbortReason, DeathTestOutcome, and flag characters above. enum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED, THREW }; // Routine for aborting the program which is safe to call from an // exec-style death test child process, in which case the error // message is propagated back to the parent process. Otherwise, the // message is simply printed to stderr. In either case, the program // then exits with status 1. void DeathTestAbort(const std::string& message) { // On a POSIX system, this function may be called from a threadsafe-style // death test child process, which operates on a very small stack. Use // the heap for any additional non-minuscule memory requirements. const InternalRunDeathTestFlag* const flag = GetUnitTestImpl()->internal_run_death_test_flag(); if (flag != NULL) { FILE* parent = posix::FDOpen(flag->write_fd(), "w"); fputc(kDeathTestInternalError, parent); fprintf(parent, "%s", message.c_str()); fflush(parent); _exit(1); } else { fprintf(stderr, "%s", message.c_str()); fflush(stderr); posix::Abort(); } } // A replacement for CHECK that calls DeathTestAbort if the assertion // fails. # define GTEST_DEATH_TEST_CHECK_(expression) \ do { \ if (!::testing::internal::IsTrue(expression)) { \ DeathTestAbort( \ ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ + ::testing::internal::StreamableToString(__LINE__) + ": " \ + #expression); \ } \ } while (::testing::internal::AlwaysFalse()) // This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for // evaluating any system call that fulfills two conditions: it must return // -1 on failure, and set errno to EINTR when it is interrupted and // should be tried again. The macro expands to a loop that repeatedly // evaluates the expression as long as it evaluates to -1 and sets // errno to EINTR. If the expression evaluates to -1 but errno is // something other than EINTR, DeathTestAbort is called. # define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \ do { \ int gtest_retval; \ do { \ gtest_retval = (expression); \ } while (gtest_retval == -1 && errno == EINTR); \ if (gtest_retval == -1) { \ DeathTestAbort( \ ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ + ::testing::internal::StreamableToString(__LINE__) + ": " \ + #expression + " != -1"); \ } \ } while (::testing::internal::AlwaysFalse()) // Returns the message describing the last system error in errno. std::string GetLastErrnoDescription() { return errno == 0 ? "" : posix::StrError(errno); } // This is called from a death test parent process to read a failure // message from the death test child process and log it with the FATAL // severity. On Windows, the message is read from a pipe handle. On other // platforms, it is read from a file descriptor. static void FailFromInternalError(int fd) { Message error; char buffer[256]; int num_read; do { while ((num_read = posix::Read(fd, buffer, 255)) > 0) { buffer[num_read] = '\0'; error << buffer; } } while (num_read == -1 && errno == EINTR); if (num_read == 0) { GTEST_LOG_(FATAL) << error.GetString(); } else { const int last_error = errno; GTEST_LOG_(FATAL) << "Error while reading death test internal: " << GetLastErrnoDescription() << " [" << last_error << "]"; } } // Death test constructor. Increments the running death test count // for the current test. DeathTest::DeathTest() { TestInfo* const info = GetUnitTestImpl()->current_test_info(); if (info == NULL) { DeathTestAbort("Cannot run a death test outside of a TEST or " "TEST_F construct"); } } // Creates and returns a death test by dispatching to the current // death test factory. bool DeathTest::Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test) { return GetUnitTestImpl()->death_test_factory()->Create( statement, regex, file, line, test); } const char* DeathTest::LastMessage() { return last_death_test_message_.c_str(); } void DeathTest::set_last_death_test_message(const std::string& message) { last_death_test_message_ = message; } std::string DeathTest::last_death_test_message_; // Provides cross platform implementation for some death functionality. class DeathTestImpl : public DeathTest { protected: DeathTestImpl(const char* a_statement, const RE* a_regex) : statement_(a_statement), regex_(a_regex), spawned_(false), status_(-1), outcome_(IN_PROGRESS), read_fd_(-1), write_fd_(-1) {} // read_fd_ is expected to be closed and cleared by a derived class. ~DeathTestImpl() { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); } void Abort(AbortReason reason); virtual bool Passed(bool status_ok); const char* statement() const { return statement_; } const RE* regex() const { return regex_; } bool spawned() const { return spawned_; } void set_spawned(bool is_spawned) { spawned_ = is_spawned; } int status() const { return status_; } void set_status(int a_status) { status_ = a_status; } DeathTestOutcome outcome() const { return outcome_; } void set_outcome(DeathTestOutcome an_outcome) { outcome_ = an_outcome; } int read_fd() const { return read_fd_; } void set_read_fd(int fd) { read_fd_ = fd; } int write_fd() const { return write_fd_; } void set_write_fd(int fd) { write_fd_ = fd; } // Called in the parent process only. Reads the result code of the death // test child process via a pipe, interprets it to set the outcome_ // member, and closes read_fd_. Outputs diagnostics and terminates in // case of unexpected codes. void ReadAndInterpretStatusByte(); private: // The textual content of the code this object is testing. This class // doesn't own this string and should not attempt to delete it. const char* const statement_; // The regular expression which test output must match. DeathTestImpl // doesn't own this object and should not attempt to delete it. const RE* const regex_; // True if the death test child process has been successfully spawned. bool spawned_; // The exit status of the child process. int status_; // How the death test concluded. DeathTestOutcome outcome_; // Descriptor to the read end of the pipe to the child process. It is // always -1 in the child process. The child keeps its write end of the // pipe in write_fd_. int read_fd_; // Descriptor to the child's write end of the pipe to the parent process. // It is always -1 in the parent process. The parent keeps its end of the // pipe in read_fd_. int write_fd_; }; // Called in the parent process only. Reads the result code of the death // test child process via a pipe, interprets it to set the outcome_ // member, and closes read_fd_. Outputs diagnostics and terminates in // case of unexpected codes. void DeathTestImpl::ReadAndInterpretStatusByte() { char flag; int bytes_read; // The read() here blocks until data is available (signifying the // failure of the death test) or until the pipe is closed (signifying // its success), so it's okay to call this in the parent before // the child process has exited. do { bytes_read = posix::Read(read_fd(), &flag, 1); } while (bytes_read == -1 && errno == EINTR); if (bytes_read == 0) { set_outcome(DIED); } else if (bytes_read == 1) { switch (flag) { case kDeathTestReturned: set_outcome(RETURNED); break; case kDeathTestThrew: set_outcome(THREW); break; case kDeathTestLived: set_outcome(LIVED); break; case kDeathTestInternalError: FailFromInternalError(read_fd()); // Does not return. break; default: GTEST_LOG_(FATAL) << "Death test child process reported " << "unexpected status byte (" << static_cast(flag) << ")"; } } else { GTEST_LOG_(FATAL) << "Read from death test child process failed: " << GetLastErrnoDescription(); } GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd())); set_read_fd(-1); } // Signals that the death test code which should have exited, didn't. // Should be called only in a death test child process. // Writes a status byte to the child's status file descriptor, then // calls _exit(1). void DeathTestImpl::Abort(AbortReason reason) { // The parent process considers the death test to be a failure if // it finds any data in our pipe. So, here we write a single flag byte // to the pipe, then exit. const char status_ch = reason == TEST_DID_NOT_DIE ? kDeathTestLived : reason == TEST_THREW_EXCEPTION ? kDeathTestThrew : kDeathTestReturned; GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1)); // We are leaking the descriptor here because on some platforms (i.e., // when built as Windows DLL), destructors of global objects will still // run after calling _exit(). On such systems, write_fd_ will be // indirectly closed from the destructor of UnitTestImpl, causing double // close if it is also closed here. On debug configurations, double close // may assert. As there are no in-process buffers to flush here, we are // relying on the OS to close the descriptor after the process terminates // when the destructors are not run. _exit(1); // Exits w/o any normal exit hooks (we were supposed to crash) } // Returns an indented copy of stderr output for a death test. // This makes distinguishing death test output lines from regular log lines // much easier. static ::std::string FormatDeathTestOutput(const ::std::string& output) { ::std::string ret; for (size_t at = 0; ; ) { const size_t line_end = output.find('\n', at); ret += "[ DEATH ] "; if (line_end == ::std::string::npos) { ret += output.substr(at); break; } ret += output.substr(at, line_end + 1 - at); at = line_end + 1; } return ret; } // Assesses the success or failure of a death test, using both private // members which have previously been set, and one argument: // // Private data members: // outcome: An enumeration describing how the death test // concluded: DIED, LIVED, THREW, or RETURNED. The death test // fails in the latter three cases. // status: The exit status of the child process. On *nix, it is in the // in the format specified by wait(2). On Windows, this is the // value supplied to the ExitProcess() API or a numeric code // of the exception that terminated the program. // regex: A regular expression object to be applied to // the test's captured standard error output; the death test // fails if it does not match. // // Argument: // status_ok: true if exit_status is acceptable in the context of // this particular death test, which fails if it is false // // Returns true iff all of the above conditions are met. Otherwise, the // first failing condition, in the order given above, is the one that is // reported. Also sets the last death test message string. bool DeathTestImpl::Passed(bool status_ok) { if (!spawned()) return false; const std::string error_message = GetCapturedStderr(); bool success = false; Message buffer; buffer << "Death test: " << statement() << "\n"; switch (outcome()) { case LIVED: buffer << " Result: failed to die.\n" << " Error msg:\n" << FormatDeathTestOutput(error_message); break; case THREW: buffer << " Result: threw an exception.\n" << " Error msg:\n" << FormatDeathTestOutput(error_message); break; case RETURNED: buffer << " Result: illegal return in test statement.\n" << " Error msg:\n" << FormatDeathTestOutput(error_message); break; case DIED: if (status_ok) { const bool matched = RE::PartialMatch(error_message.c_str(), *regex()); if (matched) { success = true; } else { buffer << " Result: died but not with expected error.\n" << " Expected: " << regex()->pattern() << "\n" << "Actual msg:\n" << FormatDeathTestOutput(error_message); } } else { buffer << " Result: died but not with expected exit code:\n" << " " << ExitSummary(status()) << "\n" << "Actual msg:\n" << FormatDeathTestOutput(error_message); } break; case IN_PROGRESS: default: GTEST_LOG_(FATAL) << "DeathTest::Passed somehow called before conclusion of test"; } DeathTest::set_last_death_test_message(buffer.GetString()); return success; } # if GTEST_OS_WINDOWS // WindowsDeathTest implements death tests on Windows. Due to the // specifics of starting new processes on Windows, death tests there are // always threadsafe, and Google Test considers the // --gtest_death_test_style=fast setting to be equivalent to // --gtest_death_test_style=threadsafe there. // // A few implementation notes: Like the Linux version, the Windows // implementation uses pipes for child-to-parent communication. But due to // the specifics of pipes on Windows, some extra steps are required: // // 1. The parent creates a communication pipe and stores handles to both // ends of it. // 2. The parent starts the child and provides it with the information // necessary to acquire the handle to the write end of the pipe. // 3. The child acquires the write end of the pipe and signals the parent // using a Windows event. // 4. Now the parent can release the write end of the pipe on its side. If // this is done before step 3, the object's reference count goes down to // 0 and it is destroyed, preventing the child from acquiring it. The // parent now has to release it, or read operations on the read end of // the pipe will not return when the child terminates. // 5. The parent reads child's output through the pipe (outcome code and // any possible error messages) from the pipe, and its stderr and then // determines whether to fail the test. // // Note: to distinguish Win32 API calls from the local method and function // calls, the former are explicitly resolved in the global namespace. // class WindowsDeathTest : public DeathTestImpl { public: WindowsDeathTest(const char* a_statement, const RE* a_regex, const char* file, int line) : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {} // All of these virtual functions are inherited from DeathTest. virtual int Wait(); virtual TestRole AssumeRole(); private: // The name of the file in which the death test is located. const char* const file_; // The line number on which the death test is located. const int line_; // Handle to the write end of the pipe to the child process. AutoHandle write_handle_; // Child process handle. AutoHandle child_handle_; // Event the child process uses to signal the parent that it has // acquired the handle to the write end of the pipe. After seeing this // event the parent can release its own handles to make sure its // ReadFile() calls return when the child terminates. AutoHandle event_handle_; }; // Waits for the child in a death test to exit, returning its exit // status, or 0 if no child process exists. As a side effect, sets the // outcome data member. int WindowsDeathTest::Wait() { if (!spawned()) return 0; // Wait until the child either signals that it has acquired the write end // of the pipe or it dies. const HANDLE wait_handles[2] = { child_handle_.Get(), event_handle_.Get() }; switch (::WaitForMultipleObjects(2, wait_handles, FALSE, // Waits for any of the handles. INFINITE)) { case WAIT_OBJECT_0: case WAIT_OBJECT_0 + 1: break; default: GTEST_DEATH_TEST_CHECK_(false); // Should not get here. } // The child has acquired the write end of the pipe or exited. // We release the handle on our side and continue. write_handle_.Reset(); event_handle_.Reset(); ReadAndInterpretStatusByte(); // Waits for the child process to exit if it haven't already. This // returns immediately if the child has already exited, regardless of // whether previous calls to WaitForMultipleObjects synchronized on this // handle or not. GTEST_DEATH_TEST_CHECK_( WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(), INFINITE)); DWORD status_code; GTEST_DEATH_TEST_CHECK_( ::GetExitCodeProcess(child_handle_.Get(), &status_code) != FALSE); child_handle_.Reset(); set_status(static_cast(status_code)); return status(); } // The AssumeRole process for a Windows death test. It creates a child // process with the same executable as the current process to run the // death test. The child process is given the --gtest_filter and // --gtest_internal_run_death_test flags such that it knows to run the // current death test only. DeathTest::TestRole WindowsDeathTest::AssumeRole() { const UnitTestImpl* const impl = GetUnitTestImpl(); const InternalRunDeathTestFlag* const flag = impl->internal_run_death_test_flag(); const TestInfo* const info = impl->current_test_info(); const int death_test_index = info->result()->death_test_count(); if (flag != NULL) { // ParseInternalRunDeathTestFlag() has performed all the necessary // processing. set_write_fd(flag->write_fd()); return EXECUTE_TEST; } // WindowsDeathTest uses an anonymous pipe to communicate results of // a death test. SECURITY_ATTRIBUTES handles_are_inheritable = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; HANDLE read_handle, write_handle; GTEST_DEATH_TEST_CHECK_( ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable, 0) // Default buffer size. != FALSE); set_read_fd(::_open_osfhandle(reinterpret_cast(read_handle), O_RDONLY)); write_handle_.Reset(write_handle); event_handle_.Reset(::CreateEvent( &handles_are_inheritable, TRUE, // The event will automatically reset to non-signaled state. FALSE, // The initial state is non-signalled. NULL)); // The even is unnamed. GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != NULL); const std::string filter_flag = std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" + info->test_case_name() + "." + info->name(); const std::string internal_flag = std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" + file_ + "|" + StreamableToString(line_) + "|" + StreamableToString(death_test_index) + "|" + StreamableToString(static_cast(::GetCurrentProcessId())) + // size_t has the same width as pointers on both 32-bit and 64-bit // Windows platforms. // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx. "|" + StreamableToString(reinterpret_cast(write_handle)) + "|" + StreamableToString(reinterpret_cast(event_handle_.Get())); char executable_path[_MAX_PATH + 1]; // NOLINT GTEST_DEATH_TEST_CHECK_( _MAX_PATH + 1 != ::GetModuleFileNameA(NULL, executable_path, _MAX_PATH)); std::string command_line = std::string(::GetCommandLineA()) + " " + filter_flag + " \"" + internal_flag + "\""; DeathTest::set_last_death_test_message(""); CaptureStderr(); // Flush the log buffers since the log streams are shared with the child. FlushInfoLog(); // The child process will share the standard handles with the parent. STARTUPINFOA startup_info; memset(&startup_info, 0, sizeof(STARTUPINFO)); startup_info.dwFlags = STARTF_USESTDHANDLES; startup_info.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE); startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE); startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE); PROCESS_INFORMATION process_info; GTEST_DEATH_TEST_CHECK_(::CreateProcessA( executable_path, const_cast(command_line.c_str()), NULL, // Retuned process handle is not inheritable. NULL, // Retuned thread handle is not inheritable. TRUE, // Child inherits all inheritable handles (for write_handle_). 0x0, // Default creation flags. NULL, // Inherit the parent's environment. UnitTest::GetInstance()->original_working_dir(), &startup_info, &process_info) != FALSE); child_handle_.Reset(process_info.hProcess); ::CloseHandle(process_info.hThread); set_spawned(true); return OVERSEE_TEST; } # else // We are not on Windows. // ForkingDeathTest provides implementations for most of the abstract // methods of the DeathTest interface. Only the AssumeRole method is // left undefined. class ForkingDeathTest : public DeathTestImpl { public: ForkingDeathTest(const char* statement, const RE* regex); // All of these virtual functions are inherited from DeathTest. virtual int Wait(); protected: void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; } private: // PID of child process during death test; 0 in the child process itself. pid_t child_pid_; }; // Constructs a ForkingDeathTest. ForkingDeathTest::ForkingDeathTest(const char* a_statement, const RE* a_regex) : DeathTestImpl(a_statement, a_regex), child_pid_(-1) {} // Waits for the child in a death test to exit, returning its exit // status, or 0 if no child process exists. As a side effect, sets the // outcome data member. int ForkingDeathTest::Wait() { if (!spawned()) return 0; ReadAndInterpretStatusByte(); int status_value; GTEST_DEATH_TEST_CHECK_SYSCALL_(waitpid(child_pid_, &status_value, 0)); set_status(status_value); return status_value; } // A concrete death test class that forks, then immediately runs the test // in the child process. class NoExecDeathTest : public ForkingDeathTest { public: NoExecDeathTest(const char* a_statement, const RE* a_regex) : ForkingDeathTest(a_statement, a_regex) { } virtual TestRole AssumeRole(); }; // The AssumeRole process for a fork-and-run death test. It implements a // straightforward fork, with a simple pipe to transmit the status byte. DeathTest::TestRole NoExecDeathTest::AssumeRole() { const size_t thread_count = GetThreadCount(); if (thread_count != 1) { GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count); } int pipe_fd[2]; GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); DeathTest::set_last_death_test_message(""); CaptureStderr(); // When we fork the process below, the log file buffers are copied, but the // file descriptors are shared. We flush all log files here so that closing // the file descriptors in the child process doesn't throw off the // synchronization between descriptors and buffers in the parent process. // This is as close to the fork as possible to avoid a race condition in case // there are multiple threads running before the death test, and another // thread writes to the log file. FlushInfoLog(); const pid_t child_pid = fork(); GTEST_DEATH_TEST_CHECK_(child_pid != -1); set_child_pid(child_pid); if (child_pid == 0) { GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[0])); set_write_fd(pipe_fd[1]); // Redirects all logging to stderr in the child process to prevent // concurrent writes to the log files. We capture stderr in the parent // process and append the child process' output to a log. LogToStderr(); // Event forwarding to the listeners of event listener API mush be shut // down in death test subprocesses. GetUnitTestImpl()->listeners()->SuppressEventForwarding(); g_in_fast_death_test_child = true; return EXECUTE_TEST; } else { GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); set_read_fd(pipe_fd[0]); set_spawned(true); return OVERSEE_TEST; } } // A concrete death test class that forks and re-executes the main // program from the beginning, with command-line flags set that cause // only this specific death test to be run. class ExecDeathTest : public ForkingDeathTest { public: ExecDeathTest(const char* a_statement, const RE* a_regex, const char* file, int line) : ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { } virtual TestRole AssumeRole(); private: static ::std::vector GetArgvsForDeathTestChildProcess() { ::std::vector args = GetInjectableArgvs(); return args; } // The name of the file in which the death test is located. const char* const file_; // The line number on which the death test is located. const int line_; }; // Utility class for accumulating command-line arguments. class Arguments { public: Arguments() { args_.push_back(NULL); } ~Arguments() { for (std::vector::iterator i = args_.begin(); i != args_.end(); ++i) { free(*i); } } void AddArgument(const char* argument) { args_.insert(args_.end() - 1, posix::StrDup(argument)); } template void AddArguments(const ::std::vector& arguments) { for (typename ::std::vector::const_iterator i = arguments.begin(); i != arguments.end(); ++i) { args_.insert(args_.end() - 1, posix::StrDup(i->c_str())); } } char* const* Argv() { return &args_[0]; } private: std::vector args_; }; // A struct that encompasses the arguments to the child process of a // threadsafe-style death test process. struct ExecDeathTestArgs { char* const* argv; // Command-line arguments for the child's call to exec int close_fd; // File descriptor to close; the read end of a pipe }; # if GTEST_OS_MAC inline char** GetEnviron() { // When Google Test is built as a framework on MacOS X, the environ variable // is unavailable. Apple's documentation (man environ) recommends using // _NSGetEnviron() instead. return *_NSGetEnviron(); } # else // Some POSIX platforms expect you to declare environ. extern "C" makes // it reside in the global namespace. extern "C" char** environ; inline char** GetEnviron() { return environ; } # endif // GTEST_OS_MAC # if !GTEST_OS_QNX // The main function for a threadsafe-style death test child process. // This function is called in a clone()-ed process and thus must avoid // any potentially unsafe operations like malloc or libc functions. static int ExecDeathTestChildMain(void* child_arg) { ExecDeathTestArgs* const args = static_cast(child_arg); GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd)); // We need to execute the test program in the same environment where // it was originally invoked. Therefore we change to the original // working directory first. const char* const original_dir = UnitTest::GetInstance()->original_working_dir(); // We can safely call chdir() as it's a direct system call. if (chdir(original_dir) != 0) { DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + GetLastErrnoDescription()); return EXIT_FAILURE; } // We can safely call execve() as it's a direct system call. We // cannot use execvp() as it's a libc function and thus potentially // unsafe. Since execve() doesn't search the PATH, the user must // invoke the test program via a valid path that contains at least // one path separator. execve(args->argv[0], args->argv, GetEnviron()); DeathTestAbort(std::string("execve(") + args->argv[0] + ", ...) in " + original_dir + " failed: " + GetLastErrnoDescription()); return EXIT_FAILURE; } # endif // !GTEST_OS_QNX // Two utility routines that together determine the direction the stack // grows. // This could be accomplished more elegantly by a single recursive // function, but we want to guard against the unlikely possibility of // a smart compiler optimizing the recursion away. // // GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining // StackLowerThanAddress into StackGrowsDown, which then doesn't give // correct answer. void StackLowerThanAddress(const void* ptr, bool* result) GTEST_NO_INLINE_; void StackLowerThanAddress(const void* ptr, bool* result) { int dummy; *result = (&dummy < ptr); } bool StackGrowsDown() { int dummy; bool result; StackLowerThanAddress(&dummy, &result); return result; } // Spawns a child process with the same executable as the current process in // a thread-safe manner and instructs it to run the death test. The // implementation uses fork(2) + exec. On systems where clone(2) is // available, it is used instead, being slightly more thread-safe. On QNX, // fork supports only single-threaded environments, so this function uses // spawn(2) there instead. The function dies with an error message if // anything goes wrong. static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { ExecDeathTestArgs args = { argv, close_fd }; pid_t child_pid = -1; # if GTEST_OS_QNX // Obtains the current directory and sets it to be closed in the child // process. const int cwd_fd = open(".", O_RDONLY); GTEST_DEATH_TEST_CHECK_(cwd_fd != -1); GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(cwd_fd, F_SETFD, FD_CLOEXEC)); // We need to execute the test program in the same environment where // it was originally invoked. Therefore we change to the original // working directory first. const char* const original_dir = UnitTest::GetInstance()->original_working_dir(); // We can safely call chdir() as it's a direct system call. if (chdir(original_dir) != 0) { DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + GetLastErrnoDescription()); return EXIT_FAILURE; } int fd_flags; // Set close_fd to be closed after spawn. GTEST_DEATH_TEST_CHECK_SYSCALL_(fd_flags = fcntl(close_fd, F_GETFD)); GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(close_fd, F_SETFD, fd_flags | FD_CLOEXEC)); struct inheritance inherit = {0}; // spawn is a system call. child_pid = spawn(args.argv[0], 0, NULL, &inherit, args.argv, GetEnviron()); // Restores the current working directory. GTEST_DEATH_TEST_CHECK_(fchdir(cwd_fd) != -1); GTEST_DEATH_TEST_CHECK_SYSCALL_(close(cwd_fd)); # else // GTEST_OS_QNX # if GTEST_OS_LINUX // When a SIGPROF signal is received while fork() or clone() are executing, // the process may hang. To avoid this, we ignore SIGPROF here and re-enable // it after the call to fork()/clone() is complete. struct sigaction saved_sigprof_action; struct sigaction ignore_sigprof_action; memset(&ignore_sigprof_action, 0, sizeof(ignore_sigprof_action)); sigemptyset(&ignore_sigprof_action.sa_mask); ignore_sigprof_action.sa_handler = SIG_IGN; GTEST_DEATH_TEST_CHECK_SYSCALL_(sigaction( SIGPROF, &ignore_sigprof_action, &saved_sigprof_action)); # endif // GTEST_OS_LINUX # if GTEST_HAS_CLONE const bool use_fork = GTEST_FLAG(death_test_use_fork); if (!use_fork) { static const bool stack_grows_down = StackGrowsDown(); const size_t stack_size = getpagesize(); // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead. void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED); // Maximum stack alignment in bytes: For a downward-growing stack, this // amount is subtracted from size of the stack space to get an address // that is within the stack space and is aligned on all systems we care // about. As far as I know there is no ABI with stack alignment greater // than 64. We assume stack and stack_size already have alignment of // kMaxStackAlignment. const size_t kMaxStackAlignment = 64; void* const stack_top = static_cast(stack) + (stack_grows_down ? stack_size - kMaxStackAlignment : 0); GTEST_DEATH_TEST_CHECK_(stack_size > kMaxStackAlignment && reinterpret_cast(stack_top) % kMaxStackAlignment == 0); child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args); GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1); } # else const bool use_fork = true; # endif // GTEST_HAS_CLONE if (use_fork && (child_pid = fork()) == 0) { ExecDeathTestChildMain(&args); _exit(0); } # endif // GTEST_OS_QNX # if GTEST_OS_LINUX GTEST_DEATH_TEST_CHECK_SYSCALL_( sigaction(SIGPROF, &saved_sigprof_action, NULL)); # endif // GTEST_OS_LINUX GTEST_DEATH_TEST_CHECK_(child_pid != -1); return child_pid; } // The AssumeRole process for a fork-and-exec death test. It re-executes the // main program from the beginning, setting the --gtest_filter // and --gtest_internal_run_death_test flags to cause only the current // death test to be re-run. DeathTest::TestRole ExecDeathTest::AssumeRole() { const UnitTestImpl* const impl = GetUnitTestImpl(); const InternalRunDeathTestFlag* const flag = impl->internal_run_death_test_flag(); const TestInfo* const info = impl->current_test_info(); const int death_test_index = info->result()->death_test_count(); if (flag != NULL) { set_write_fd(flag->write_fd()); return EXECUTE_TEST; } int pipe_fd[2]; GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); // Clear the close-on-exec flag on the write end of the pipe, lest // it be closed when the child process does an exec: GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1); const std::string filter_flag = std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" + info->test_case_name() + "." + info->name(); const std::string internal_flag = std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" + file_ + "|" + StreamableToString(line_) + "|" + StreamableToString(death_test_index) + "|" + StreamableToString(pipe_fd[1]); Arguments args; args.AddArguments(GetArgvsForDeathTestChildProcess()); args.AddArgument(filter_flag.c_str()); args.AddArgument(internal_flag.c_str()); DeathTest::set_last_death_test_message(""); CaptureStderr(); // See the comment in NoExecDeathTest::AssumeRole for why the next line // is necessary. FlushInfoLog(); const pid_t child_pid = ExecDeathTestSpawnChild(args.Argv(), pipe_fd[0]); GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); set_child_pid(child_pid); set_read_fd(pipe_fd[0]); set_spawned(true); return OVERSEE_TEST; } # endif // !GTEST_OS_WINDOWS // Creates a concrete DeathTest-derived class that depends on the // --gtest_death_test_style flag, and sets the pointer pointed to // by the "test" argument to its address. If the test should be // skipped, sets that pointer to NULL. Returns true, unless the // flag is set to an invalid value. bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test) { UnitTestImpl* const impl = GetUnitTestImpl(); const InternalRunDeathTestFlag* const flag = impl->internal_run_death_test_flag(); const int death_test_index = impl->current_test_info() ->increment_death_test_count(); if (flag != NULL) { if (death_test_index > flag->index()) { DeathTest::set_last_death_test_message( "Death test count (" + StreamableToString(death_test_index) + ") somehow exceeded expected maximum (" + StreamableToString(flag->index()) + ")"); return false; } if (!(flag->file() == file && flag->line() == line && flag->index() == death_test_index)) { *test = NULL; return true; } } # if GTEST_OS_WINDOWS if (GTEST_FLAG(death_test_style) == "threadsafe" || GTEST_FLAG(death_test_style) == "fast") { *test = new WindowsDeathTest(statement, regex, file, line); } # else if (GTEST_FLAG(death_test_style) == "threadsafe") { *test = new ExecDeathTest(statement, regex, file, line); } else if (GTEST_FLAG(death_test_style) == "fast") { *test = new NoExecDeathTest(statement, regex); } # endif // GTEST_OS_WINDOWS else { // NOLINT - this is more readable than unbalanced brackets inside #if. DeathTest::set_last_death_test_message( "Unknown death test style \"" + GTEST_FLAG(death_test_style) + "\" encountered"); return false; } return true; } // Splits a given string on a given delimiter, populating a given // vector with the fields. GTEST_HAS_DEATH_TEST implies that we have // ::std::string, so we can use it here. static void SplitString(const ::std::string& str, char delimiter, ::std::vector< ::std::string>* dest) { ::std::vector< ::std::string> parsed; ::std::string::size_type pos = 0; while (::testing::internal::AlwaysTrue()) { const ::std::string::size_type colon = str.find(delimiter, pos); if (colon == ::std::string::npos) { parsed.push_back(str.substr(pos)); break; } else { parsed.push_back(str.substr(pos, colon - pos)); pos = colon + 1; } } dest->swap(parsed); } # if GTEST_OS_WINDOWS // Recreates the pipe and event handles from the provided parameters, // signals the event, and returns a file descriptor wrapped around the pipe // handle. This function is called in the child process only. int GetStatusFileDescriptor(unsigned int parent_process_id, size_t write_handle_as_size_t, size_t event_handle_as_size_t) { AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE, FALSE, // Non-inheritable. parent_process_id)); if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) { DeathTestAbort("Unable to open parent process " + StreamableToString(parent_process_id)); } // TODO(vladl@google.com): Replace the following check with a // compile-time assertion when available. GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t)); const HANDLE write_handle = reinterpret_cast(write_handle_as_size_t); HANDLE dup_write_handle; // The newly initialized handle is accessible only in in the parent // process. To obtain one accessible within the child, we need to use // DuplicateHandle. if (!::DuplicateHandle(parent_process_handle.Get(), write_handle, ::GetCurrentProcess(), &dup_write_handle, 0x0, // Requested privileges ignored since // DUPLICATE_SAME_ACCESS is used. FALSE, // Request non-inheritable handler. DUPLICATE_SAME_ACCESS)) { DeathTestAbort("Unable to duplicate the pipe handle " + StreamableToString(write_handle_as_size_t) + " from the parent process " + StreamableToString(parent_process_id)); } const HANDLE event_handle = reinterpret_cast(event_handle_as_size_t); HANDLE dup_event_handle; if (!::DuplicateHandle(parent_process_handle.Get(), event_handle, ::GetCurrentProcess(), &dup_event_handle, 0x0, FALSE, DUPLICATE_SAME_ACCESS)) { DeathTestAbort("Unable to duplicate the event handle " + StreamableToString(event_handle_as_size_t) + " from the parent process " + StreamableToString(parent_process_id)); } const int write_fd = ::_open_osfhandle(reinterpret_cast(dup_write_handle), O_APPEND); if (write_fd == -1) { DeathTestAbort("Unable to convert pipe handle " + StreamableToString(write_handle_as_size_t) + " to a file descriptor"); } // Signals the parent that the write end of the pipe has been acquired // so the parent can release its own write end. ::SetEvent(dup_event_handle); return write_fd; } # endif // GTEST_OS_WINDOWS // Returns a newly created InternalRunDeathTestFlag object with fields // initialized from the GTEST_FLAG(internal_run_death_test) flag if // the flag is specified; otherwise returns NULL. InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() { if (GTEST_FLAG(internal_run_death_test) == "") return NULL; // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we // can use it here. int line = -1; int index = -1; ::std::vector< ::std::string> fields; SplitString(GTEST_FLAG(internal_run_death_test).c_str(), '|', &fields); int write_fd = -1; # if GTEST_OS_WINDOWS unsigned int parent_process_id = 0; size_t write_handle_as_size_t = 0; size_t event_handle_as_size_t = 0; if (fields.size() != 6 || !ParseNaturalNumber(fields[1], &line) || !ParseNaturalNumber(fields[2], &index) || !ParseNaturalNumber(fields[3], &parent_process_id) || !ParseNaturalNumber(fields[4], &write_handle_as_size_t) || !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) { DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + GTEST_FLAG(internal_run_death_test)); } write_fd = GetStatusFileDescriptor(parent_process_id, write_handle_as_size_t, event_handle_as_size_t); # else if (fields.size() != 4 || !ParseNaturalNumber(fields[1], &line) || !ParseNaturalNumber(fields[2], &index) || !ParseNaturalNumber(fields[3], &write_fd)) { DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + GTEST_FLAG(internal_run_death_test)); } # endif // GTEST_OS_WINDOWS return new InternalRunDeathTestFlag(fields[0], line, index, write_fd); } } // namespace internal #endif // GTEST_HAS_DEATH_TEST } // namespace testing // Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: keith.ray@gmail.com (Keith Ray) #include #if GTEST_OS_WINDOWS_MOBILE # include #elif GTEST_OS_WINDOWS # include # include #elif GTEST_OS_SYMBIAN // Symbian OpenC has PATH_MAX in sys/syslimits.h # include #else # include # include // Some Linux distributions define PATH_MAX here. #endif // GTEST_OS_WINDOWS_MOBILE #if GTEST_OS_WINDOWS # define GTEST_PATH_MAX_ _MAX_PATH #elif defined(PATH_MAX) # define GTEST_PATH_MAX_ PATH_MAX #elif defined(_XOPEN_PATH_MAX) # define GTEST_PATH_MAX_ _XOPEN_PATH_MAX #else # define GTEST_PATH_MAX_ _POSIX_PATH_MAX #endif // GTEST_OS_WINDOWS namespace testing { namespace internal { #if GTEST_OS_WINDOWS // On Windows, '\\' is the standard path separator, but many tools and the // Windows API also accept '/' as an alternate path separator. Unless otherwise // noted, a file path can contain either kind of path separators, or a mixture // of them. const char kPathSeparator = '\\'; const char kAlternatePathSeparator = '/'; const char kPathSeparatorString[] = "\\"; const char kAlternatePathSeparatorString[] = "/"; # if GTEST_OS_WINDOWS_MOBILE // Windows CE doesn't have a current directory. You should not use // the current directory in tests on Windows CE, but this at least // provides a reasonable fallback. const char kCurrentDirectoryString[] = "\\"; // Windows CE doesn't define INVALID_FILE_ATTRIBUTES const DWORD kInvalidFileAttributes = 0xffffffff; # else const char kCurrentDirectoryString[] = ".\\"; # endif // GTEST_OS_WINDOWS_MOBILE #else const char kPathSeparator = '/'; const char kPathSeparatorString[] = "/"; const char kCurrentDirectoryString[] = "./"; #endif // GTEST_OS_WINDOWS // Returns whether the given character is a valid path separator. static bool IsPathSeparator(char c) { #if GTEST_HAS_ALT_PATH_SEP_ return (c == kPathSeparator) || (c == kAlternatePathSeparator); #else return c == kPathSeparator; #endif } // Returns the current working directory, or "" if unsuccessful. FilePath FilePath::GetCurrentDir() { #if GTEST_OS_WINDOWS_MOBILE // Windows CE doesn't have a current directory, so we just return // something reasonable. return FilePath(kCurrentDirectoryString); #elif GTEST_OS_WINDOWS char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); #else char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); #endif // GTEST_OS_WINDOWS_MOBILE } // Returns a copy of the FilePath with the case-insensitive extension removed. // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns // FilePath("dir/file"). If a case-insensitive extension is not // found, returns a copy of the original FilePath. FilePath FilePath::RemoveExtension(const char* extension) const { const std::string dot_extension = std::string(".") + extension; if (String::EndsWithCaseInsensitive(pathname_, dot_extension)) { return FilePath(pathname_.substr( 0, pathname_.length() - dot_extension.length())); } return *this; } // Returns a pointer to the last occurence of a valid path separator in // the FilePath. On Windows, for example, both '/' and '\' are valid path // separators. Returns NULL if no path separator was found. const char* FilePath::FindLastPathSeparator() const { const char* const last_sep = strrchr(c_str(), kPathSeparator); #if GTEST_HAS_ALT_PATH_SEP_ const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator); // Comparing two pointers of which only one is NULL is undefined. if (last_alt_sep != NULL && (last_sep == NULL || last_alt_sep > last_sep)) { return last_alt_sep; } #endif return last_sep; } // Returns a copy of the FilePath with the directory part removed. // Example: FilePath("path/to/file").RemoveDirectoryName() returns // FilePath("file"). If there is no directory part ("just_a_file"), it returns // the FilePath unmodified. If there is no file part ("just_a_dir/") it // returns an empty FilePath (""). // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath FilePath::RemoveDirectoryName() const { const char* const last_sep = FindLastPathSeparator(); return last_sep ? FilePath(last_sep + 1) : *this; } // RemoveFileName returns the directory path with the filename removed. // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". // If the FilePath is "a_file" or "/a_file", RemoveFileName returns // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does // not have a file, like "just/a/dir/", it returns the FilePath unmodified. // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath FilePath::RemoveFileName() const { const char* const last_sep = FindLastPathSeparator(); std::string dir; if (last_sep) { dir = std::string(c_str(), last_sep + 1 - c_str()); } else { dir = kCurrentDirectoryString; } return FilePath(dir); } // Helper functions for naming files in a directory for xml output. // Given directory = "dir", base_name = "test", number = 0, // extension = "xml", returns "dir/test.xml". If number is greater // than zero (e.g., 12), returns "dir/test_12.xml". // On Windows platform, uses \ as the separator rather than /. FilePath FilePath::MakeFileName(const FilePath& directory, const FilePath& base_name, int number, const char* extension) { std::string file; if (number == 0) { file = base_name.string() + "." + extension; } else { file = base_name.string() + "_" + StreamableToString(number) + "." + extension; } return ConcatPaths(directory, FilePath(file)); } // Given directory = "dir", relative_path = "test.xml", returns "dir/test.xml". // On Windows, uses \ as the separator rather than /. FilePath FilePath::ConcatPaths(const FilePath& directory, const FilePath& relative_path) { if (directory.IsEmpty()) return relative_path; const FilePath dir(directory.RemoveTrailingPathSeparator()); return FilePath(dir.string() + kPathSeparator + relative_path.string()); } // Returns true if pathname describes something findable in the file-system, // either a file, directory, or whatever. bool FilePath::FileOrDirectoryExists() const { #if GTEST_OS_WINDOWS_MOBILE LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str()); const DWORD attributes = GetFileAttributes(unicode); delete [] unicode; return attributes != kInvalidFileAttributes; #else posix::StatStruct file_stat; return posix::Stat(pathname_.c_str(), &file_stat) == 0; #endif // GTEST_OS_WINDOWS_MOBILE } // Returns true if pathname describes a directory in the file-system // that exists. bool FilePath::DirectoryExists() const { bool result = false; #if GTEST_OS_WINDOWS // Don't strip off trailing separator if path is a root directory on // Windows (like "C:\\"). const FilePath& path(IsRootDirectory() ? *this : RemoveTrailingPathSeparator()); #else const FilePath& path(*this); #endif #if GTEST_OS_WINDOWS_MOBILE LPCWSTR unicode = String::AnsiToUtf16(path.c_str()); const DWORD attributes = GetFileAttributes(unicode); delete [] unicode; if ((attributes != kInvalidFileAttributes) && (attributes & FILE_ATTRIBUTE_DIRECTORY)) { result = true; } #else posix::StatStruct file_stat; result = posix::Stat(path.c_str(), &file_stat) == 0 && posix::IsDir(file_stat); #endif // GTEST_OS_WINDOWS_MOBILE return result; } // Returns true if pathname describes a root directory. (Windows has one // root directory per disk drive.) bool FilePath::IsRootDirectory() const { #if GTEST_OS_WINDOWS // TODO(wan@google.com): on Windows a network share like // \\server\share can be a root directory, although it cannot be the // current directory. Handle this properly. return pathname_.length() == 3 && IsAbsolutePath(); #else return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]); #endif } // Returns true if pathname describes an absolute path. bool FilePath::IsAbsolutePath() const { const char* const name = pathname_.c_str(); #if GTEST_OS_WINDOWS return pathname_.length() >= 3 && ((name[0] >= 'a' && name[0] <= 'z') || (name[0] >= 'A' && name[0] <= 'Z')) && name[1] == ':' && IsPathSeparator(name[2]); #else return IsPathSeparator(name[0]); #endif } // Returns a pathname for a file that does not currently exist. The pathname // will be directory/base_name.extension or // directory/base_name_.extension if directory/base_name.extension // already exists. The number will be incremented until a pathname is found // that does not already exist. // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. // There could be a race condition if two or more processes are calling this // function at the same time -- they could both pick the same filename. FilePath FilePath::GenerateUniqueFileName(const FilePath& directory, const FilePath& base_name, const char* extension) { FilePath full_pathname; int number = 0; do { full_pathname.Set(MakeFileName(directory, base_name, number++, extension)); } while (full_pathname.FileOrDirectoryExists()); return full_pathname; } // Returns true if FilePath ends with a path separator, which indicates that // it is intended to represent a directory. Returns false otherwise. // This does NOT check that a directory (or file) actually exists. bool FilePath::IsDirectory() const { return !pathname_.empty() && IsPathSeparator(pathname_.c_str()[pathname_.length() - 1]); } // Create directories so that path exists. Returns true if successful or if // the directories already exist; returns false if unable to create directories // for any reason. bool FilePath::CreateDirectoriesRecursively() const { if (!this->IsDirectory()) { return false; } if (pathname_.length() == 0 || this->DirectoryExists()) { return true; } const FilePath parent(this->RemoveTrailingPathSeparator().RemoveFileName()); return parent.CreateDirectoriesRecursively() && this->CreateFolder(); } // Create the directory so that path exists. Returns true if successful or // if the directory already exists; returns false if unable to create the // directory for any reason, including if the parent directory does not // exist. Not named "CreateDirectory" because that's a macro on Windows. bool FilePath::CreateFolder() const { #if GTEST_OS_WINDOWS_MOBILE FilePath removed_sep(this->RemoveTrailingPathSeparator()); LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str()); int result = CreateDirectory(unicode, NULL) ? 0 : -1; delete [] unicode; #elif GTEST_OS_WINDOWS int result = _mkdir(pathname_.c_str()); #else int result = mkdir(pathname_.c_str(), 0777); #endif // GTEST_OS_WINDOWS_MOBILE if (result == -1) { return this->DirectoryExists(); // An error is OK if the directory exists. } return true; // No error. } // If input name has a trailing separator character, remove it and return the // name, otherwise return the name string unmodified. // On Windows platform, uses \ as the separator, other platforms use /. FilePath FilePath::RemoveTrailingPathSeparator() const { return IsDirectory() ? FilePath(pathname_.substr(0, pathname_.length() - 1)) : *this; } // Removes any redundant separators that might be in the pathname. // For example, "bar///foo" becomes "bar/foo". Does not eliminate other // redundancies that might be in a pathname involving "." or "..". // TODO(wan@google.com): handle Windows network shares (e.g. \\server\share). void FilePath::Normalize() { if (pathname_.c_str() == NULL) { pathname_ = ""; return; } const char* src = pathname_.c_str(); char* const dest = new char[pathname_.length() + 1]; char* dest_ptr = dest; memset(dest_ptr, 0, pathname_.length() + 1); while (*src != '\0') { *dest_ptr = *src; if (!IsPathSeparator(*src)) { src++; } else { #if GTEST_HAS_ALT_PATH_SEP_ if (*dest_ptr == kAlternatePathSeparator) { *dest_ptr = kPathSeparator; } #endif while (IsPathSeparator(*src)) src++; } dest_ptr++; } *dest_ptr = '\0'; pathname_ = dest; delete[] dest; } } // namespace internal } // namespace testing // Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #include #include #include #include #if GTEST_OS_WINDOWS_MOBILE # include // For TerminateProcess() #elif GTEST_OS_WINDOWS # include # include #else # include #endif // GTEST_OS_WINDOWS_MOBILE #if GTEST_OS_MAC # include # include # include #endif // GTEST_OS_MAC #if GTEST_OS_QNX # include # include #endif // GTEST_OS_QNX // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #undef GTEST_IMPLEMENTATION_ namespace testing { namespace internal { #if defined(_MSC_VER) || defined(__BORLANDC__) // MSVC and C++Builder do not provide a definition of STDERR_FILENO. const int kStdOutFileno = 1; const int kStdErrFileno = 2; #else const int kStdOutFileno = STDOUT_FILENO; const int kStdErrFileno = STDERR_FILENO; #endif // _MSC_VER #if GTEST_OS_MAC // Returns the number of threads running in the process, or 0 to indicate that // we cannot detect it. size_t GetThreadCount() { const task_t task = mach_task_self(); mach_msg_type_number_t thread_count; thread_act_array_t thread_list; const kern_return_t status = task_threads(task, &thread_list, &thread_count); if (status == KERN_SUCCESS) { // task_threads allocates resources in thread_list and we need to free them // to avoid leaks. vm_deallocate(task, reinterpret_cast(thread_list), sizeof(thread_t) * thread_count); return static_cast(thread_count); } else { return 0; } } #elif GTEST_OS_QNX // Returns the number of threads running in the process, or 0 to indicate that // we cannot detect it. size_t GetThreadCount() { const int fd = open("/proc/self/as", O_RDONLY); if (fd < 0) { return 0; } procfs_info process_info; const int status = devctl(fd, DCMD_PROC_INFO, &process_info, sizeof(process_info), NULL); close(fd); if (status == EOK) { return static_cast(process_info.num_threads); } else { return 0; } } #else size_t GetThreadCount() { // There's no portable way to detect the number of threads, so we just // return 0 to indicate that we cannot detect it. return 0; } #endif // GTEST_OS_MAC #if GTEST_USES_POSIX_RE // Implements RE. Currently only needed for death tests. RE::~RE() { if (is_valid_) { // regfree'ing an invalid regex might crash because the content // of the regex is undefined. Since the regex's are essentially // the same, one cannot be valid (or invalid) without the other // being so too. regfree(&partial_regex_); regfree(&full_regex_); } free(const_cast(pattern_)); } // Returns true iff regular expression re matches the entire str. bool RE::FullMatch(const char* str, const RE& re) { if (!re.is_valid_) return false; regmatch_t match; return regexec(&re.full_regex_, str, 1, &match, 0) == 0; } // Returns true iff regular expression re matches a substring of str // (including str itself). bool RE::PartialMatch(const char* str, const RE& re) { if (!re.is_valid_) return false; regmatch_t match; return regexec(&re.partial_regex_, str, 1, &match, 0) == 0; } // Initializes an RE from its string representation. void RE::Init(const char* regex) { pattern_ = posix::StrDup(regex); // Reserves enough bytes to hold the regular expression used for a // full match. const size_t full_regex_len = strlen(regex) + 10; char* const full_pattern = new char[full_regex_len]; snprintf(full_pattern, full_regex_len, "^(%s)$", regex); is_valid_ = regcomp(&full_regex_, full_pattern, REG_EXTENDED) == 0; // We want to call regcomp(&partial_regex_, ...) even if the // previous expression returns false. Otherwise partial_regex_ may // not be properly initialized can may cause trouble when it's // freed. // // Some implementation of POSIX regex (e.g. on at least some // versions of Cygwin) doesn't accept the empty string as a valid // regex. We change it to an equivalent form "()" to be safe. if (is_valid_) { const char* const partial_regex = (*regex == '\0') ? "()" : regex; is_valid_ = regcomp(&partial_regex_, partial_regex, REG_EXTENDED) == 0; } EXPECT_TRUE(is_valid_) << "Regular expression \"" << regex << "\" is not a valid POSIX Extended regular expression."; delete[] full_pattern; } #elif GTEST_USES_SIMPLE_RE // Returns true iff ch appears anywhere in str (excluding the // terminating '\0' character). bool IsInSet(char ch, const char* str) { return ch != '\0' && strchr(str, ch) != NULL; } // Returns true iff ch belongs to the given classification. Unlike // similar functions in , these aren't affected by the // current locale. bool IsAsciiDigit(char ch) { return '0' <= ch && ch <= '9'; } bool IsAsciiPunct(char ch) { return IsInSet(ch, "^-!\"#$%&'()*+,./:;<=>?@[\\]_`{|}~"); } bool IsRepeat(char ch) { return IsInSet(ch, "?*+"); } bool IsAsciiWhiteSpace(char ch) { return IsInSet(ch, " \f\n\r\t\v"); } bool IsAsciiWordChar(char ch) { return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || ('0' <= ch && ch <= '9') || ch == '_'; } // Returns true iff "\\c" is a supported escape sequence. bool IsValidEscape(char c) { return (IsAsciiPunct(c) || IsInSet(c, "dDfnrsStvwW")); } // Returns true iff the given atom (specified by escaped and pattern) // matches ch. The result is undefined if the atom is invalid. bool AtomMatchesChar(bool escaped, char pattern_char, char ch) { if (escaped) { // "\\p" where p is pattern_char. switch (pattern_char) { case 'd': return IsAsciiDigit(ch); case 'D': return !IsAsciiDigit(ch); case 'f': return ch == '\f'; case 'n': return ch == '\n'; case 'r': return ch == '\r'; case 's': return IsAsciiWhiteSpace(ch); case 'S': return !IsAsciiWhiteSpace(ch); case 't': return ch == '\t'; case 'v': return ch == '\v'; case 'w': return IsAsciiWordChar(ch); case 'W': return !IsAsciiWordChar(ch); } return IsAsciiPunct(pattern_char) && pattern_char == ch; } return (pattern_char == '.' && ch != '\n') || pattern_char == ch; } // Helper function used by ValidateRegex() to format error messages. std::string FormatRegexSyntaxError(const char* regex, int index) { return (Message() << "Syntax error at index " << index << " in simple regular expression \"" << regex << "\": ").GetString(); } // Generates non-fatal failures and returns false if regex is invalid; // otherwise returns true. bool ValidateRegex(const char* regex) { if (regex == NULL) { // TODO(wan@google.com): fix the source file location in the // assertion failures to match where the regex is used in user // code. ADD_FAILURE() << "NULL is not a valid simple regular expression."; return false; } bool is_valid = true; // True iff ?, *, or + can follow the previous atom. bool prev_repeatable = false; for (int i = 0; regex[i]; i++) { if (regex[i] == '\\') { // An escape sequence i++; if (regex[i] == '\0') { ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) << "'\\' cannot appear at the end."; return false; } if (!IsValidEscape(regex[i])) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) << "invalid escape sequence \"\\" << regex[i] << "\"."; is_valid = false; } prev_repeatable = true; } else { // Not an escape sequence. const char ch = regex[i]; if (ch == '^' && i > 0) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'^' can only appear at the beginning."; is_valid = false; } else if (ch == '$' && regex[i + 1] != '\0') { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'$' can only appear at the end."; is_valid = false; } else if (IsInSet(ch, "()[]{}|")) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'" << ch << "' is unsupported."; is_valid = false; } else if (IsRepeat(ch) && !prev_repeatable) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'" << ch << "' can only follow a repeatable token."; is_valid = false; } prev_repeatable = !IsInSet(ch, "^$?*+"); } } return is_valid; } // Matches a repeated regex atom followed by a valid simple regular // expression. The regex atom is defined as c if escaped is false, // or \c otherwise. repeat is the repetition meta character (?, *, // or +). The behavior is undefined if str contains too many // characters to be indexable by size_t, in which case the test will // probably time out anyway. We are fine with this limitation as // std::string has it too. bool MatchRepetitionAndRegexAtHead( bool escaped, char c, char repeat, const char* regex, const char* str) { const size_t min_count = (repeat == '+') ? 1 : 0; const size_t max_count = (repeat == '?') ? 1 : static_cast(-1) - 1; // We cannot call numeric_limits::max() as it conflicts with the // max() macro on Windows. for (size_t i = 0; i <= max_count; ++i) { // We know that the atom matches each of the first i characters in str. if (i >= min_count && MatchRegexAtHead(regex, str + i)) { // We have enough matches at the head, and the tail matches too. // Since we only care about *whether* the pattern matches str // (as opposed to *how* it matches), there is no need to find a // greedy match. return true; } if (str[i] == '\0' || !AtomMatchesChar(escaped, c, str[i])) return false; } return false; } // Returns true iff regex matches a prefix of str. regex must be a // valid simple regular expression and not start with "^", or the // result is undefined. bool MatchRegexAtHead(const char* regex, const char* str) { if (*regex == '\0') // An empty regex matches a prefix of anything. return true; // "$" only matches the end of a string. Note that regex being // valid guarantees that there's nothing after "$" in it. if (*regex == '$') return *str == '\0'; // Is the first thing in regex an escape sequence? const bool escaped = *regex == '\\'; if (escaped) ++regex; if (IsRepeat(regex[1])) { // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so // here's an indirect recursion. It terminates as the regex gets // shorter in each recursion. return MatchRepetitionAndRegexAtHead( escaped, regex[0], regex[1], regex + 2, str); } else { // regex isn't empty, isn't "$", and doesn't start with a // repetition. We match the first atom of regex with the first // character of str and recurse. return (*str != '\0') && AtomMatchesChar(escaped, *regex, *str) && MatchRegexAtHead(regex + 1, str + 1); } } // Returns true iff regex matches any substring of str. regex must be // a valid simple regular expression, or the result is undefined. // // The algorithm is recursive, but the recursion depth doesn't exceed // the regex length, so we won't need to worry about running out of // stack space normally. In rare cases the time complexity can be // exponential with respect to the regex length + the string length, // but usually it's must faster (often close to linear). bool MatchRegexAnywhere(const char* regex, const char* str) { if (regex == NULL || str == NULL) return false; if (*regex == '^') return MatchRegexAtHead(regex + 1, str); // A successful match can be anywhere in str. do { if (MatchRegexAtHead(regex, str)) return true; } while (*str++ != '\0'); return false; } // Implements the RE class. RE::~RE() { free(const_cast(pattern_)); free(const_cast(full_pattern_)); } // Returns true iff regular expression re matches the entire str. bool RE::FullMatch(const char* str, const RE& re) { return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str); } // Returns true iff regular expression re matches a substring of str // (including str itself). bool RE::PartialMatch(const char* str, const RE& re) { return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str); } // Initializes an RE from its string representation. void RE::Init(const char* regex) { pattern_ = full_pattern_ = NULL; if (regex != NULL) { pattern_ = posix::StrDup(regex); } is_valid_ = ValidateRegex(regex); if (!is_valid_) { // No need to calculate the full pattern when the regex is invalid. return; } const size_t len = strlen(regex); // Reserves enough bytes to hold the regular expression used for a // full match: we need space to prepend a '^', append a '$', and // terminate the string with '\0'. char* buffer = static_cast(malloc(len + 3)); full_pattern_ = buffer; if (*regex != '^') *buffer++ = '^'; // Makes sure full_pattern_ starts with '^'. // We don't use snprintf or strncpy, as they trigger a warning when // compiled with VC++ 8.0. memcpy(buffer, regex, len); buffer += len; if (len == 0 || regex[len - 1] != '$') *buffer++ = '$'; // Makes sure full_pattern_ ends with '$'. *buffer = '\0'; } #endif // GTEST_USES_POSIX_RE const char kUnknownFile[] = "unknown file"; // Formats a source file path and a line number as they would appear // in an error message from the compiler used to compile this code. GTEST_API_ ::std::string FormatFileLocation(const char* file, int line) { const std::string file_name(file == NULL ? kUnknownFile : file); if (line < 0) { return file_name + ":"; } #ifdef _MSC_VER return file_name + "(" + StreamableToString(line) + "):"; #else return file_name + ":" + StreamableToString(line) + ":"; #endif // _MSC_VER } // Formats a file location for compiler-independent XML output. // Although this function is not platform dependent, we put it next to // FormatFileLocation in order to contrast the two functions. // Note that FormatCompilerIndependentFileLocation() does NOT append colon // to the file location it produces, unlike FormatFileLocation(). GTEST_API_ ::std::string FormatCompilerIndependentFileLocation( const char* file, int line) { const std::string file_name(file == NULL ? kUnknownFile : file); if (line < 0) return file_name; else return file_name + ":" + StreamableToString(line); } GTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line) : severity_(severity) { const char* const marker = severity == GTEST_INFO ? "[ INFO ]" : severity == GTEST_WARNING ? "[WARNING]" : severity == GTEST_ERROR ? "[ ERROR ]" : "[ FATAL ]"; GetStream() << ::std::endl << marker << " " << FormatFileLocation(file, line).c_str() << ": "; } // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. GTestLog::~GTestLog() { GetStream() << ::std::endl; if (severity_ == GTEST_FATAL) { fflush(stderr); posix::Abort(); } } // Disable Microsoft deprecation warnings for POSIX functions called from // this class (creat, dup, dup2, and close) #ifdef _MSC_VER # pragma warning(push) # pragma warning(disable: 4996) #endif // _MSC_VER #if GTEST_HAS_STREAM_REDIRECTION // Object that captures an output stream (stdout/stderr). class CapturedStream { public: // The ctor redirects the stream to a temporary file. explicit CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) { # if GTEST_OS_WINDOWS char temp_dir_path[MAX_PATH + 1] = { '\0' }; // NOLINT char temp_file_path[MAX_PATH + 1] = { '\0' }; // NOLINT ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path); const UINT success = ::GetTempFileNameA(temp_dir_path, "gtest_redir", 0, // Generate unique file name. temp_file_path); GTEST_CHECK_(success != 0) << "Unable to create a temporary file in " << temp_dir_path; const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE); GTEST_CHECK_(captured_fd != -1) << "Unable to open temporary file " << temp_file_path; filename_ = temp_file_path; # else // There's no guarantee that a test has write access to the current // directory, so we create the temporary file in the /tmp directory // instead. We use /tmp on most systems, and /sdcard on Android. // That's because Android doesn't have /tmp. # if GTEST_OS_LINUX_ANDROID // Note: Android applications are expected to call the framework's // Context.getExternalStorageDirectory() method through JNI to get // the location of the world-writable SD Card directory. However, // this requires a Context handle, which cannot be retrieved // globally from native code. Doing so also precludes running the // code as part of a regular standalone executable, which doesn't // run in a Dalvik process (e.g. when running it through 'adb shell'). // // The location /sdcard is directly accessible from native code // and is the only location (unofficially) supported by the Android // team. It's generally a symlink to the real SD Card mount point // which can be /mnt/sdcard, /mnt/sdcard0, /system/media/sdcard, or // other OEM-customized locations. Never rely on these, and always // use /sdcard. char name_template[] = "/sdcard/gtest_captured_stream.XXXXXX"; # else char name_template[] = "/tmp/captured_stream.XXXXXX"; # endif // GTEST_OS_LINUX_ANDROID const int captured_fd = mkstemp(name_template); filename_ = name_template; # endif // GTEST_OS_WINDOWS fflush(NULL); dup2(captured_fd, fd_); close(captured_fd); } ~CapturedStream() { remove(filename_.c_str()); } std::string GetCapturedString() { if (uncaptured_fd_ != -1) { // Restores the original stream. fflush(NULL); dup2(uncaptured_fd_, fd_); close(uncaptured_fd_); uncaptured_fd_ = -1; } FILE* const file = posix::FOpen(filename_.c_str(), "r"); const std::string content = ReadEntireFile(file); posix::FClose(file); return content; } private: // Reads the entire content of a file as an std::string. static std::string ReadEntireFile(FILE* file); // Returns the size (in bytes) of a file. static size_t GetFileSize(FILE* file); const int fd_; // A stream to capture. int uncaptured_fd_; // Name of the temporary file holding the stderr output. ::std::string filename_; GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream); }; // Returns the size (in bytes) of a file. size_t CapturedStream::GetFileSize(FILE* file) { fseek(file, 0, SEEK_END); return static_cast(ftell(file)); } // Reads the entire content of a file as a string. std::string CapturedStream::ReadEntireFile(FILE* file) { const size_t file_size = GetFileSize(file); char* const buffer = new char[file_size]; size_t bytes_last_read = 0; // # of bytes read in the last fread() size_t bytes_read = 0; // # of bytes read so far fseek(file, 0, SEEK_SET); // Keeps reading the file until we cannot read further or the // pre-determined file size is reached. do { bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file); bytes_read += bytes_last_read; } while (bytes_last_read > 0 && bytes_read < file_size); const std::string content(buffer, bytes_read); delete[] buffer; return content; } # ifdef _MSC_VER # pragma warning(pop) # endif // _MSC_VER static CapturedStream* g_captured_stderr = NULL; static CapturedStream* g_captured_stdout = NULL; // Starts capturing an output stream (stdout/stderr). void CaptureStream(int fd, const char* stream_name, CapturedStream** stream) { if (*stream != NULL) { GTEST_LOG_(FATAL) << "Only one " << stream_name << " capturer can exist at a time."; } *stream = new CapturedStream(fd); } // Stops capturing the output stream and returns the captured string. std::string GetCapturedStream(CapturedStream** captured_stream) { const std::string content = (*captured_stream)->GetCapturedString(); delete *captured_stream; *captured_stream = NULL; return content; } // Starts capturing stdout. void CaptureStdout() { CaptureStream(kStdOutFileno, "stdout", &g_captured_stdout); } // Starts capturing stderr. void CaptureStderr() { CaptureStream(kStdErrFileno, "stderr", &g_captured_stderr); } // Stops capturing stdout and returns the captured string. std::string GetCapturedStdout() { return GetCapturedStream(&g_captured_stdout); } // Stops capturing stderr and returns the captured string. std::string GetCapturedStderr() { return GetCapturedStream(&g_captured_stderr); } #endif // GTEST_HAS_STREAM_REDIRECTION #if GTEST_HAS_DEATH_TEST // A copy of all command line arguments. Set by InitGoogleTest(). ::std::vector g_argvs; static const ::std::vector* g_injected_test_argvs = NULL; // Owned. void SetInjectableArgvs(const ::std::vector* argvs) { if (g_injected_test_argvs != argvs) delete g_injected_test_argvs; g_injected_test_argvs = argvs; } const ::std::vector& GetInjectableArgvs() { if (g_injected_test_argvs != NULL) { return *g_injected_test_argvs; } return g_argvs; } #endif // GTEST_HAS_DEATH_TEST #if GTEST_OS_WINDOWS_MOBILE namespace posix { void Abort() { DebugBreak(); TerminateProcess(GetCurrentProcess(), 1); } } // namespace posix #endif // GTEST_OS_WINDOWS_MOBILE // Returns the name of the environment variable corresponding to the // given flag. For example, FlagToEnvVar("foo") will return // "GTEST_FOO" in the open-source version. static std::string FlagToEnvVar(const char* flag) { const std::string full_flag = (Message() << GTEST_FLAG_PREFIX_ << flag).GetString(); Message env_var; for (size_t i = 0; i != full_flag.length(); i++) { env_var << ToUpper(full_flag.c_str()[i]); } return env_var.GetString(); } // Parses 'str' for a 32-bit signed integer. If successful, writes // the result to *value and returns true; otherwise leaves *value // unchanged and returns false. bool ParseInt32(const Message& src_text, const char* str, Int32* value) { // Parses the environment variable as a decimal integer. char* end = NULL; const long long_value = strtol(str, &end, 10); // NOLINT // Has strtol() consumed all characters in the string? if (*end != '\0') { // No - an invalid character was encountered. Message msg; msg << "WARNING: " << src_text << " is expected to be a 32-bit integer, but actually" << " has value \"" << str << "\".\n"; printf("%s", msg.GetString().c_str()); fflush(stdout); return false; } // Is the parsed value in the range of an Int32? const Int32 result = static_cast(long_value); if (long_value == LONG_MAX || long_value == LONG_MIN || // The parsed value overflows as a long. (strtol() returns // LONG_MAX or LONG_MIN when the input overflows.) result != long_value // The parsed value overflows as an Int32. ) { Message msg; msg << "WARNING: " << src_text << " is expected to be a 32-bit integer, but actually" << " has value " << str << ", which overflows.\n"; printf("%s", msg.GetString().c_str()); fflush(stdout); return false; } *value = result; return true; } // Reads and returns the Boolean environment variable corresponding to // the given flag; if it's not set, returns default_value. // // The value is considered true iff it's not "0". bool BoolFromGTestEnv(const char* flag, bool default_value) { const std::string env_var = FlagToEnvVar(flag); const char* const string_value = posix::GetEnv(env_var.c_str()); return string_value == NULL ? default_value : strcmp(string_value, "0") != 0; } // Reads and returns a 32-bit integer stored in the environment // variable corresponding to the given flag; if it isn't set or // doesn't represent a valid 32-bit integer, returns default_value. Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { const std::string env_var = FlagToEnvVar(flag); const char* const string_value = posix::GetEnv(env_var.c_str()); if (string_value == NULL) { // The environment variable is not set. return default_value; } Int32 result = default_value; if (!ParseInt32(Message() << "Environment variable " << env_var, string_value, &result)) { printf("The default value %s is used.\n", (Message() << default_value).GetString().c_str()); fflush(stdout); return default_value; } return result; } // Reads and returns the string environment variable corresponding to // the given flag; if it's not set, returns default_value. const char* StringFromGTestEnv(const char* flag, const char* default_value) { const std::string env_var = FlagToEnvVar(flag); const char* const value = posix::GetEnv(env_var.c_str()); return value == NULL ? default_value : value; } } // namespace internal } // namespace testing // Copyright 2007, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Google Test - The Google C++ Testing Framework // // This file implements a universal value printer that can print a // value of any type T: // // void ::testing::internal::UniversalPrinter::Print(value, ostream_ptr); // // It uses the << operator when possible, and prints the bytes in the // object otherwise. A user can override its behavior for a class // type Foo by defining either operator<<(::std::ostream&, const Foo&) // or void PrintTo(const Foo&, ::std::ostream*) in the namespace that // defines Foo. #include #include #include // NOLINT #include namespace testing { namespace { using ::std::ostream; // Prints a segment of bytes in the given object. void PrintByteSegmentInObjectTo(const unsigned char* obj_bytes, size_t start, size_t count, ostream* os) { char text[5] = ""; for (size_t i = 0; i != count; i++) { const size_t j = start + i; if (i != 0) { // Organizes the bytes into groups of 2 for easy parsing by // human. if ((j % 2) == 0) *os << ' '; else *os << '-'; } GTEST_SNPRINTF_(text, sizeof(text), "%02X", obj_bytes[j]); *os << text; } } // Prints the bytes in the given value to the given ostream. void PrintBytesInObjectToImpl(const unsigned char* obj_bytes, size_t count, ostream* os) { // Tells the user how big the object is. *os << count << "-byte object <"; const size_t kThreshold = 132; const size_t kChunkSize = 64; // If the object size is bigger than kThreshold, we'll have to omit // some details by printing only the first and the last kChunkSize // bytes. // TODO(wan): let the user control the threshold using a flag. if (count < kThreshold) { PrintByteSegmentInObjectTo(obj_bytes, 0, count, os); } else { PrintByteSegmentInObjectTo(obj_bytes, 0, kChunkSize, os); *os << " ... "; // Rounds up to 2-byte boundary. const size_t resume_pos = (count - kChunkSize + 1)/2*2; PrintByteSegmentInObjectTo(obj_bytes, resume_pos, count - resume_pos, os); } *os << ">"; } } // namespace namespace internal2 { // Delegates to PrintBytesInObjectToImpl() to print the bytes in the // given object. The delegation simplifies the implementation, which // uses the << operator and thus is easier done outside of the // ::testing::internal namespace, which contains a << operator that // sometimes conflicts with the one in STL. void PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count, ostream* os) { PrintBytesInObjectToImpl(obj_bytes, count, os); } } // namespace internal2 namespace internal { // Depending on the value of a char (or wchar_t), we print it in one // of three formats: // - as is if it's a printable ASCII (e.g. 'a', '2', ' '), // - as a hexidecimal escape sequence (e.g. '\x7F'), or // - as a special escape sequence (e.g. '\r', '\n'). enum CharFormat { kAsIs, kHexEscape, kSpecialEscape }; // Returns true if c is a printable ASCII character. We test the // value of c directly instead of calling isprint(), which is buggy on // Windows Mobile. inline bool IsPrintableAscii(wchar_t c) { return 0x20 <= c && c <= 0x7E; } // Prints a wide or narrow char c as a character literal without the // quotes, escaping it when necessary; returns how c was formatted. // The template argument UnsignedChar is the unsigned version of Char, // which is the type of c. template static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { switch (static_cast(c)) { case L'\0': *os << "\\0"; break; case L'\'': *os << "\\'"; break; case L'\\': *os << "\\\\"; break; case L'\a': *os << "\\a"; break; case L'\b': *os << "\\b"; break; case L'\f': *os << "\\f"; break; case L'\n': *os << "\\n"; break; case L'\r': *os << "\\r"; break; case L'\t': *os << "\\t"; break; case L'\v': *os << "\\v"; break; default: if (IsPrintableAscii(c)) { *os << static_cast(c); return kAsIs; } else { *os << "\\x" + String::FormatHexInt(static_cast(c)); return kHexEscape; } } return kSpecialEscape; } // Prints a wchar_t c as if it's part of a string literal, escaping it when // necessary; returns how c was formatted. static CharFormat PrintAsStringLiteralTo(wchar_t c, ostream* os) { switch (c) { case L'\'': *os << "'"; return kAsIs; case L'"': *os << "\\\""; return kSpecialEscape; default: return PrintAsCharLiteralTo(c, os); } } // Prints a char c as if it's part of a string literal, escaping it when // necessary; returns how c was formatted. static CharFormat PrintAsStringLiteralTo(char c, ostream* os) { return PrintAsStringLiteralTo( static_cast(static_cast(c)), os); } // Prints a wide or narrow character c and its code. '\0' is printed // as "'\\0'", other unprintable characters are also properly escaped // using the standard C++ escape sequence. The template argument // UnsignedChar is the unsigned version of Char, which is the type of c. template void PrintCharAndCodeTo(Char c, ostream* os) { // First, print c as a literal in the most readable form we can find. *os << ((sizeof(c) > 1) ? "L'" : "'"); const CharFormat format = PrintAsCharLiteralTo(c, os); *os << "'"; // To aid user debugging, we also print c's code in decimal, unless // it's 0 (in which case c was printed as '\\0', making the code // obvious). if (c == 0) return; *os << " (" << static_cast(c); // For more convenience, we print c's code again in hexidecimal, // unless c was already printed in the form '\x##' or the code is in // [1, 9]. if (format == kHexEscape || (1 <= c && c <= 9)) { // Do nothing. } else { *os << ", 0x" << String::FormatHexInt(static_cast(c)); } *os << ")"; } void PrintTo(unsigned char c, ::std::ostream* os) { PrintCharAndCodeTo(c, os); } void PrintTo(signed char c, ::std::ostream* os) { PrintCharAndCodeTo(c, os); } // Prints a wchar_t as a symbol if it is printable or as its internal // code otherwise and also as its code. L'\0' is printed as "L'\\0'". void PrintTo(wchar_t wc, ostream* os) { PrintCharAndCodeTo(wc, os); } // Prints the given array of characters to the ostream. CharType must be either // char or wchar_t. // The array starts at begin, the length is len, it may include '\0' characters // and may not be NUL-terminated. template static void PrintCharsAsStringTo( const CharType* begin, size_t len, ostream* os) { const char* const kQuoteBegin = sizeof(CharType) == 1 ? "\"" : "L\""; *os << kQuoteBegin; bool is_previous_hex = false; for (size_t index = 0; index < len; ++index) { const CharType cur = begin[index]; if (is_previous_hex && IsXDigit(cur)) { // Previous character is of '\x..' form and this character can be // interpreted as another hexadecimal digit in its number. Break string to // disambiguate. *os << "\" " << kQuoteBegin; } is_previous_hex = PrintAsStringLiteralTo(cur, os) == kHexEscape; } *os << "\""; } // Prints a (const) char/wchar_t array of 'len' elements, starting at address // 'begin'. CharType must be either char or wchar_t. template static void UniversalPrintCharArray( const CharType* begin, size_t len, ostream* os) { // The code // const char kFoo[] = "foo"; // generates an array of 4, not 3, elements, with the last one being '\0'. // // Therefore when printing a char array, we don't print the last element if // it's '\0', such that the output matches the string literal as it's // written in the source code. if (len > 0 && begin[len - 1] == '\0') { PrintCharsAsStringTo(begin, len - 1, os); return; } // If, however, the last element in the array is not '\0', e.g. // const char kFoo[] = { 'f', 'o', 'o' }; // we must print the entire array. We also print a message to indicate // that the array is not NUL-terminated. PrintCharsAsStringTo(begin, len, os); *os << " (no terminating NUL)"; } // Prints a (const) char array of 'len' elements, starting at address 'begin'. void UniversalPrintArray(const char* begin, size_t len, ostream* os) { UniversalPrintCharArray(begin, len, os); } // Prints a (const) wchar_t array of 'len' elements, starting at address // 'begin'. void UniversalPrintArray(const wchar_t* begin, size_t len, ostream* os) { UniversalPrintCharArray(begin, len, os); } // Prints the given C string to the ostream. void PrintTo(const char* s, ostream* os) { if (s == NULL) { *os << "NULL"; } else { *os << ImplicitCast_(s) << " pointing to "; PrintCharsAsStringTo(s, strlen(s), os); } } // MSVC compiler can be configured to define whar_t as a typedef // of unsigned short. Defining an overload for const wchar_t* in that case // would cause pointers to unsigned shorts be printed as wide strings, // possibly accessing more memory than intended and causing invalid // memory accesses. MSVC defines _NATIVE_WCHAR_T_DEFINED symbol when // wchar_t is implemented as a native type. #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) // Prints the given wide C string to the ostream. void PrintTo(const wchar_t* s, ostream* os) { if (s == NULL) { *os << "NULL"; } else { *os << ImplicitCast_(s) << " pointing to "; PrintCharsAsStringTo(s, wcslen(s), os); } } #endif // wchar_t is native // Prints a ::string object. #if GTEST_HAS_GLOBAL_STRING void PrintStringTo(const ::string& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); } #endif // GTEST_HAS_GLOBAL_STRING void PrintStringTo(const ::std::string& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); } // Prints a ::wstring object. #if GTEST_HAS_GLOBAL_WSTRING void PrintWideStringTo(const ::wstring& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); } #endif // GTEST_HAS_GLOBAL_WSTRING #if GTEST_HAS_STD_WSTRING void PrintWideStringTo(const ::std::wstring& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); } #endif // GTEST_HAS_STD_WSTRING } // namespace internal } // namespace testing // Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: mheule@google.com (Markus Heule) // // The Google C++ Testing Framework (Google Test) // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #undef GTEST_IMPLEMENTATION_ namespace testing { using internal::GetUnitTestImpl; // Gets the summary of the failure message by omitting the stack trace // in it. std::string TestPartResult::ExtractSummary(const char* message) { const char* const stack_trace = strstr(message, internal::kStackTraceMarker); return stack_trace == NULL ? message : std::string(message, stack_trace); } // Prints a TestPartResult object. std::ostream& operator<<(std::ostream& os, const TestPartResult& result) { return os << result.file_name() << ":" << result.line_number() << ": " << (result.type() == TestPartResult::kSuccess ? "Success" : result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : "Non-fatal failure") << ":\n" << result.message() << std::endl; } // Appends a TestPartResult to the array. void TestPartResultArray::Append(const TestPartResult& result) { array_.push_back(result); } // Returns the TestPartResult at the given index (0-based). const TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { if (index < 0 || index >= size()) { printf("\nInvalid index (%d) into TestPartResultArray.\n", index); internal::posix::Abort(); } return array_[index]; } // Returns the number of TestPartResult objects in the array. int TestPartResultArray::size() const { return static_cast(array_.size()); } namespace internal { HasNewFatalFailureHelper::HasNewFatalFailureHelper() : has_new_fatal_failure_(false), original_reporter_(GetUnitTestImpl()-> GetTestPartResultReporterForCurrentThread()) { GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); } HasNewFatalFailureHelper::~HasNewFatalFailureHelper() { GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread( original_reporter_); } void HasNewFatalFailureHelper::ReportTestPartResult( const TestPartResult& result) { if (result.fatally_failed()) has_new_fatal_failure_ = true; original_reporter_->ReportTestPartResult(result); } } // namespace internal } // namespace testing // Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) namespace testing { namespace internal { #if GTEST_HAS_TYPED_TEST_P // Skips to the first non-space char in str. Returns an empty string if str // contains only whitespace characters. static const char* SkipSpaces(const char* str) { while (IsSpace(*str)) str++; return str; } // Verifies that registered_tests match the test names in // defined_test_names_; returns registered_tests if successful, or // aborts the program otherwise. const char* TypedTestCasePState::VerifyRegisteredTestNames( const char* file, int line, const char* registered_tests) { typedef ::std::set::const_iterator DefinedTestIter; registered_ = true; // Skip initial whitespace in registered_tests since some // preprocessors prefix stringizied literals with whitespace. registered_tests = SkipSpaces(registered_tests); Message errors; ::std::set tests; for (const char* names = registered_tests; names != NULL; names = SkipComma(names)) { const std::string name = GetPrefixUntilComma(names); if (tests.count(name) != 0) { errors << "Test " << name << " is listed more than once.\n"; continue; } bool found = false; for (DefinedTestIter it = defined_test_names_.begin(); it != defined_test_names_.end(); ++it) { if (name == *it) { found = true; break; } } if (found) { tests.insert(name); } else { errors << "No test named " << name << " can be found in this test case.\n"; } } for (DefinedTestIter it = defined_test_names_.begin(); it != defined_test_names_.end(); ++it) { if (tests.count(*it) == 0) { errors << "You forgot to list test " << *it << ".\n"; } } const std::string& errors_str = errors.GetString(); if (errors_str != "") { fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), errors_str.c_str()); fflush(stderr); posix::Abort(); } return registered_tests; } #endif // GTEST_HAS_TYPED_TEST_P } // namespace internal } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/fused-src/gtest/gtest.h000066400000000000000000031261431377520261000217600ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) // // This header file defines the public API for Google Test. It should be // included by any test program that uses Google Test. // // IMPORTANT NOTE: Due to limitation of the C++ language, we have to // leave some internal implementation details in this header file. // They are clearly marked by comments like this: // // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // // Such code is NOT meant to be used by a user directly, and is subject // to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user // program! // // Acknowledgment: Google Test borrowed the idea of automatic test // registration from Barthelemy Dagenais' (barthelemy@prologique.com) // easyUnit framework. #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_H_ #include #include #include // Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) // // The Google C++ Testing Framework (Google Test) // // This header file declares functions and macros used internally by // Google Test. They are subject to change without notice. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ // Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: wan@google.com (Zhanyong Wan) // // Low-level types and utilities for porting Google Test to various // platforms. They are subject to change without notice. DO NOT USE // THEM IN USER CODE. // // This file is fundamental to Google Test. All other Google Test source // files are expected to #include this. Therefore, it cannot #include // any other Google Test header. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ // The user can define the following macros in the build script to // control Google Test's behavior. If the user doesn't define a macro // in this list, Google Test will define it. // // GTEST_HAS_CLONE - Define it to 1/0 to indicate that clone(2) // is/isn't available. // GTEST_HAS_EXCEPTIONS - Define it to 1/0 to indicate that exceptions // are enabled. // GTEST_HAS_GLOBAL_STRING - Define it to 1/0 to indicate that ::string // is/isn't available (some systems define // ::string, which is different to std::string). // GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::string // is/isn't available (some systems define // ::wstring, which is different to std::wstring). // GTEST_HAS_POSIX_RE - Define it to 1/0 to indicate that POSIX regular // expressions are/aren't available. // GTEST_HAS_PTHREAD - Define it to 1/0 to indicate that // is/isn't available. // GTEST_HAS_RTTI - Define it to 1/0 to indicate that RTTI is/isn't // enabled. // GTEST_HAS_STD_WSTRING - Define it to 1/0 to indicate that // std::wstring does/doesn't work (Google Test can // be used where std::wstring is unavailable). // GTEST_HAS_TR1_TUPLE - Define it to 1/0 to indicate tr1::tuple // is/isn't available. // GTEST_HAS_SEH - Define it to 1/0 to indicate whether the // compiler supports Microsoft's "Structured // Exception Handling". // GTEST_HAS_STREAM_REDIRECTION // - Define it to 1/0 to indicate whether the // platform supports I/O stream redirection using // dup() and dup2(). // GTEST_USE_OWN_TR1_TUPLE - Define it to 1/0 to indicate whether Google // Test's own tr1 tuple implementation should be // used. Unused when the user sets // GTEST_HAS_TR1_TUPLE to 0. // GTEST_LANG_CXX11 - Define it to 1/0 to indicate that Google Test // is building in C++11/C++98 mode. // GTEST_LINKED_AS_SHARED_LIBRARY // - Define to 1 when compiling tests that use // Google Test as a shared library (known as // DLL on Windows). // GTEST_CREATE_SHARED_LIBRARY // - Define to 1 when compiling Google Test itself // as a shared library. // This header defines the following utilities: // // Macros indicating the current platform (defined to 1 if compiled on // the given platform; otherwise undefined): // GTEST_OS_AIX - IBM AIX // GTEST_OS_CYGWIN - Cygwin // GTEST_OS_HPUX - HP-UX // GTEST_OS_LINUX - Linux // GTEST_OS_LINUX_ANDROID - Google Android // GTEST_OS_MAC - Mac OS X // GTEST_OS_IOS - iOS // GTEST_OS_IOS_SIMULATOR - iOS simulator // GTEST_OS_NACL - Google Native Client (NaCl) // GTEST_OS_OPENBSD - OpenBSD // GTEST_OS_QNX - QNX // GTEST_OS_SOLARIS - Sun Solaris // GTEST_OS_SYMBIAN - Symbian // GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile) // GTEST_OS_WINDOWS_DESKTOP - Windows Desktop // GTEST_OS_WINDOWS_MINGW - MinGW // GTEST_OS_WINDOWS_MOBILE - Windows Mobile // GTEST_OS_ZOS - z/OS // // Among the platforms, Cygwin, Linux, Max OS X, and Windows have the // most stable support. Since core members of the Google Test project // don't have access to other platforms, support for them may be less // stable. If you notice any problems on your platform, please notify // googletestframework@googlegroups.com (patches for fixing them are // even more welcome!). // // Note that it is possible that none of the GTEST_OS_* macros are defined. // // Macros indicating available Google Test features (defined to 1 if // the corresponding feature is supported; otherwise undefined): // GTEST_HAS_COMBINE - the Combine() function (for value-parameterized // tests) // GTEST_HAS_DEATH_TEST - death tests // GTEST_HAS_PARAM_TEST - value-parameterized tests // GTEST_HAS_TYPED_TEST - typed tests // GTEST_HAS_TYPED_TEST_P - type-parameterized tests // GTEST_USES_POSIX_RE - enhanced POSIX regex is used. Do not confuse with // GTEST_HAS_POSIX_RE (see above) which users can // define themselves. // GTEST_USES_SIMPLE_RE - our own simple regex is used; // the above two are mutually exclusive. // GTEST_CAN_COMPARE_NULL - accepts untyped NULL in EXPECT_EQ(). // // Macros for basic C++ coding: // GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning. // GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a // variable don't have to be used. // GTEST_DISALLOW_ASSIGN_ - disables operator=. // GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=. // GTEST_MUST_USE_RESULT_ - declares that a function's result must be used. // // Synchronization: // Mutex, MutexLock, ThreadLocal, GetThreadCount() // - synchronization primitives. // GTEST_IS_THREADSAFE - defined to 1 to indicate that the above // synchronization primitives have real implementations // and Google Test is thread-safe; or 0 otherwise. // // Template meta programming: // is_pointer - as in TR1; needed on Symbian and IBM XL C/C++ only. // IteratorTraits - partial implementation of std::iterator_traits, which // is not available in libCstd when compiled with Sun C++. // // Smart pointers: // scoped_ptr - as in TR2. // // Regular expressions: // RE - a simple regular expression class using the POSIX // Extended Regular Expression syntax on UNIX-like // platforms, or a reduced regular exception syntax on // other platforms, including Windows. // // Logging: // GTEST_LOG_() - logs messages at the specified severity level. // LogToStderr() - directs all log messages to stderr. // FlushInfoLog() - flushes informational log messages. // // Stdout and stderr capturing: // CaptureStdout() - starts capturing stdout. // GetCapturedStdout() - stops capturing stdout and returns the captured // string. // CaptureStderr() - starts capturing stderr. // GetCapturedStderr() - stops capturing stderr and returns the captured // string. // // Integer types: // TypeWithSize - maps an integer to a int type. // Int32, UInt32, Int64, UInt64, TimeInMillis // - integers of known sizes. // BiggestInt - the biggest signed integer type. // // Command-line utilities: // GTEST_FLAG() - references a flag. // GTEST_DECLARE_*() - declares a flag. // GTEST_DEFINE_*() - defines a flag. // GetInjectableArgvs() - returns the command line as a vector of strings. // // Environment variable utilities: // GetEnv() - gets the value of an environment variable. // BoolFromGTestEnv() - parses a bool environment variable. // Int32FromGTestEnv() - parses an Int32 environment variable. // StringFromGTestEnv() - parses a string environment variable. #include // for isspace, etc #include // for ptrdiff_t #include #include #include #ifndef _WIN32_WCE # include # include #endif // !_WIN32_WCE #if defined __APPLE__ # include # include #endif #include // NOLINT #include // NOLINT #include // NOLINT #define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" #define GTEST_FLAG_PREFIX_ "gtest_" #define GTEST_FLAG_PREFIX_DASH_ "gtest-" #define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" #define GTEST_NAME_ "Google Test" #define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/" // Determines the version of gcc that is used to compile this. #ifdef __GNUC__ // 40302 means version 4.3.2. # define GTEST_GCC_VER_ \ (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) #endif // __GNUC__ // Determines the platform on which Google Test is compiled. #ifdef __CYGWIN__ # define GTEST_OS_CYGWIN 1 #elif defined __SYMBIAN32__ # define GTEST_OS_SYMBIAN 1 #elif defined _WIN32 # define GTEST_OS_WINDOWS 1 # ifdef _WIN32_WCE # define GTEST_OS_WINDOWS_MOBILE 1 # elif defined(__MINGW__) || defined(__MINGW32__) # define GTEST_OS_WINDOWS_MINGW 1 # else # define GTEST_OS_WINDOWS_DESKTOP 1 # endif // _WIN32_WCE #elif defined __APPLE__ # define GTEST_OS_MAC 1 # if TARGET_OS_IPHONE # define GTEST_OS_IOS 1 # if TARGET_IPHONE_SIMULATOR # define GTEST_OS_IOS_SIMULATOR 1 # endif # endif #elif defined __linux__ # define GTEST_OS_LINUX 1 # if defined __ANDROID__ # define GTEST_OS_LINUX_ANDROID 1 # endif #elif defined __MVS__ # define GTEST_OS_ZOS 1 #elif defined(__sun) && defined(__SVR4) # define GTEST_OS_SOLARIS 1 #elif defined(_AIX) # define GTEST_OS_AIX 1 #elif defined(__hpux) # define GTEST_OS_HPUX 1 #elif defined __native_client__ # define GTEST_OS_NACL 1 #elif defined __OpenBSD__ # define GTEST_OS_OPENBSD 1 #elif defined __QNX__ # define GTEST_OS_QNX 1 #endif // __CYGWIN__ #ifndef GTEST_LANG_CXX11 // gcc and clang define __GXX_EXPERIMENTAL_CXX0X__ when // -std={c,gnu}++{0x,11} is passed. The C++11 standard specifies a // value for __cplusplus, and recent versions of clang, gcc, and // probably other compilers set that too in C++11 mode. # if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L // Compiling in at least C++11 mode. # define GTEST_LANG_CXX11 1 # else # define GTEST_LANG_CXX11 0 # endif #endif // Brings in definitions for functions used in the testing::internal::posix // namespace (read, write, close, chdir, isatty, stat). We do not currently // use them on Windows Mobile. #if !GTEST_OS_WINDOWS // This assumes that non-Windows OSes provide unistd.h. For OSes where this // is not the case, we need to include headers that provide the functions // mentioned above. # include # include #elif !GTEST_OS_WINDOWS_MOBILE # include # include #endif #if GTEST_OS_LINUX_ANDROID // Used to define __ANDROID_API__ matching the target NDK API level. # include // NOLINT #endif // Defines this to true iff Google Test can use POSIX regular expressions. #ifndef GTEST_HAS_POSIX_RE # if GTEST_OS_LINUX_ANDROID // On Android, is only available starting with Gingerbread. # define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9) # else # define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS) # endif #endif #if GTEST_HAS_POSIX_RE // On some platforms, needs someone to define size_t, and // won't compile otherwise. We can #include it here as we already // included , which is guaranteed to define size_t through // . # include // NOLINT # define GTEST_USES_POSIX_RE 1 #elif GTEST_OS_WINDOWS // is not available on Windows. Use our own simple regex // implementation instead. # define GTEST_USES_SIMPLE_RE 1 #else // may not be available on this platform. Use our own // simple regex implementation instead. # define GTEST_USES_SIMPLE_RE 1 #endif // GTEST_HAS_POSIX_RE #ifndef GTEST_HAS_EXCEPTIONS // The user didn't tell us whether exceptions are enabled, so we need // to figure it out. # if defined(_MSC_VER) || defined(__BORLANDC__) // MSVC's and C++Builder's implementations of the STL use the _HAS_EXCEPTIONS // macro to enable exceptions, so we'll do the same. // Assumes that exceptions are enabled by default. # ifndef _HAS_EXCEPTIONS # define _HAS_EXCEPTIONS 1 # endif // _HAS_EXCEPTIONS # define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS # elif defined(__GNUC__) && __EXCEPTIONS // gcc defines __EXCEPTIONS to 1 iff exceptions are enabled. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__SUNPRO_CC) // Sun Pro CC supports exceptions. However, there is no compile-time way of // detecting whether they are enabled or not. Therefore, we assume that // they are enabled unless the user tells us otherwise. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__IBMCPP__) && __EXCEPTIONS // xlC defines __EXCEPTIONS to 1 iff exceptions are enabled. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__HP_aCC) // Exception handling is in effect by default in HP aCC compiler. It has to // be turned of by +noeh compiler option if desired. # define GTEST_HAS_EXCEPTIONS 1 # else // For other compilers, we assume exceptions are disabled to be // conservative. # define GTEST_HAS_EXCEPTIONS 0 # endif // defined(_MSC_VER) || defined(__BORLANDC__) #endif // GTEST_HAS_EXCEPTIONS #if !defined(GTEST_HAS_STD_STRING) // Even though we don't use this macro any longer, we keep it in case // some clients still depend on it. # define GTEST_HAS_STD_STRING 1 #elif !GTEST_HAS_STD_STRING // The user told us that ::std::string isn't available. # error "Google Test cannot be used where ::std::string isn't available." #endif // !defined(GTEST_HAS_STD_STRING) #ifndef GTEST_HAS_GLOBAL_STRING // The user didn't tell us whether ::string is available, so we need // to figure it out. # define GTEST_HAS_GLOBAL_STRING 0 #endif // GTEST_HAS_GLOBAL_STRING #ifndef GTEST_HAS_STD_WSTRING // The user didn't tell us whether ::std::wstring is available, so we need // to figure it out. // TODO(wan@google.com): uses autoconf to detect whether ::std::wstring // is available. // Cygwin 1.7 and below doesn't support ::std::wstring. // Solaris' libc++ doesn't support it either. Android has // no support for it at least as recent as Froyo (2.2). # define GTEST_HAS_STD_WSTRING \ (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS)) #endif // GTEST_HAS_STD_WSTRING #ifndef GTEST_HAS_GLOBAL_WSTRING // The user didn't tell us whether ::wstring is available, so we need // to figure it out. # define GTEST_HAS_GLOBAL_WSTRING \ (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) #endif // GTEST_HAS_GLOBAL_WSTRING // Determines whether RTTI is available. #ifndef GTEST_HAS_RTTI // The user didn't tell us whether RTTI is enabled, so we need to // figure it out. # ifdef _MSC_VER # ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled. # define GTEST_HAS_RTTI 1 # else # define GTEST_HAS_RTTI 0 # endif // Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled. # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302) # ifdef __GXX_RTTI // When building against STLport with the Android NDK and with // -frtti -fno-exceptions, the build fails at link time with undefined // references to __cxa_bad_typeid. Note sure if STL or toolchain bug, // so disable RTTI when detected. # if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \ !defined(__EXCEPTIONS) # define GTEST_HAS_RTTI 0 # else # define GTEST_HAS_RTTI 1 # endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS # else # define GTEST_HAS_RTTI 0 # endif // __GXX_RTTI // Clang defines __GXX_RTTI starting with version 3.0, but its manual recommends // using has_feature instead. has_feature(cxx_rtti) is supported since 2.7, the // first version with C++ support. # elif defined(__clang__) # define GTEST_HAS_RTTI __has_feature(cxx_rtti) // Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if // both the typeid and dynamic_cast features are present. # elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) # ifdef __RTTI_ALL__ # define GTEST_HAS_RTTI 1 # else # define GTEST_HAS_RTTI 0 # endif # else // For all other compilers, we assume RTTI is enabled. # define GTEST_HAS_RTTI 1 # endif // _MSC_VER #endif // GTEST_HAS_RTTI // It's this header's responsibility to #include when RTTI // is enabled. #if GTEST_HAS_RTTI # include #endif // Determines whether Google Test can use the pthreads library. #ifndef GTEST_HAS_PTHREAD // The user didn't tell us explicitly, so we assume pthreads support is // available on Linux and Mac. // // To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0 // to your compiler flags. # define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX \ || GTEST_OS_QNX) #endif // GTEST_HAS_PTHREAD #if GTEST_HAS_PTHREAD // gtest-port.h guarantees to #include when GTEST_HAS_PTHREAD is // true. # include // NOLINT // For timespec and nanosleep, used below. # include // NOLINT #endif // Determines whether Google Test can use tr1/tuple. You can define // this macro to 0 to prevent Google Test from using tuple (any // feature depending on tuple with be disabled in this mode). #ifndef GTEST_HAS_TR1_TUPLE # if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) // STLport, provided with the Android NDK, has neither or . # define GTEST_HAS_TR1_TUPLE 0 # else // The user didn't tell us not to do it, so we assume it's OK. # define GTEST_HAS_TR1_TUPLE 1 # endif #endif // GTEST_HAS_TR1_TUPLE // Determines whether Google Test's own tr1 tuple implementation // should be used. #ifndef GTEST_USE_OWN_TR1_TUPLE // The user didn't tell us, so we need to figure it out. // We use our own TR1 tuple if we aren't sure the user has an // implementation of it already. At this time, libstdc++ 4.0.0+ and // MSVC 2010 are the only mainstream standard libraries that come // with a TR1 tuple implementation. NVIDIA's CUDA NVCC compiler // pretends to be GCC by defining __GNUC__ and friends, but cannot // compile GCC's tuple implementation. MSVC 2008 (9.0) provides TR1 // tuple in a 323 MB Feature Pack download, which we cannot assume the // user has. QNX's QCC compiler is a modified GCC but it doesn't // support TR1 tuple. libc++ only provides std::tuple, in C++11 mode, // and it can be used with some compilers that define __GNUC__. # if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \ && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) || _MSC_VER >= 1600 # define GTEST_ENV_HAS_TR1_TUPLE_ 1 # endif // C++11 specifies that provides std::tuple. Use that if gtest is used // in C++11 mode and libstdc++ isn't very old (binaries targeting OS X 10.6 // can build with clang but need to use gcc4.2's libstdc++). # if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325) # define GTEST_ENV_HAS_STD_TUPLE_ 1 # endif # if GTEST_ENV_HAS_TR1_TUPLE_ || GTEST_ENV_HAS_STD_TUPLE_ # define GTEST_USE_OWN_TR1_TUPLE 0 # else # define GTEST_USE_OWN_TR1_TUPLE 1 # endif #endif // GTEST_USE_OWN_TR1_TUPLE // To avoid conditional compilation everywhere, we make it // gtest-port.h's responsibility to #include the header implementing // tr1/tuple. #if GTEST_HAS_TR1_TUPLE # if GTEST_USE_OWN_TR1_TUPLE // This file was GENERATED by command: // pump.py gtest-tuple.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2009 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Implements a subset of TR1 tuple needed by Google Test and Google Mock. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ #include // For ::std::pair. // The compiler used in Symbian has a bug that prevents us from declaring the // tuple template as a friend (it complains that tuple is redefined). This // hack bypasses the bug by declaring the members that should otherwise be // private as public. // Sun Studio versions < 12 also have the above bug. #if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) # define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: #else # define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ template friend class tuple; \ private: #endif // GTEST_n_TUPLE_(T) is the type of an n-tuple. #define GTEST_0_TUPLE_(T) tuple<> #define GTEST_1_TUPLE_(T) tuple #define GTEST_2_TUPLE_(T) tuple #define GTEST_3_TUPLE_(T) tuple #define GTEST_4_TUPLE_(T) tuple #define GTEST_5_TUPLE_(T) tuple #define GTEST_6_TUPLE_(T) tuple #define GTEST_7_TUPLE_(T) tuple #define GTEST_8_TUPLE_(T) tuple #define GTEST_9_TUPLE_(T) tuple #define GTEST_10_TUPLE_(T) tuple // GTEST_n_TYPENAMES_(T) declares a list of n typenames. #define GTEST_0_TYPENAMES_(T) #define GTEST_1_TYPENAMES_(T) typename T##0 #define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1 #define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2 #define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3 #define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4 #define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5 #define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6 #define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6, typename T##7 #define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6, \ typename T##7, typename T##8 #define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6, \ typename T##7, typename T##8, typename T##9 // In theory, defining stuff in the ::std namespace is undefined // behavior. We can do this as we are playing the role of a standard // library vendor. namespace std { namespace tr1 { template class tuple; // Anything in namespace gtest_internal is Google Test's INTERNAL // IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. namespace gtest_internal { // ByRef::type is T if T is a reference; otherwise it's const T&. template struct ByRef { typedef const T& type; }; // NOLINT template struct ByRef { typedef T& type; }; // NOLINT // A handy wrapper for ByRef. #define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef::type // AddRef::type is T if T is a reference; otherwise it's T&. This // is the same as tr1::add_reference::type. template struct AddRef { typedef T& type; }; // NOLINT template struct AddRef { typedef T& type; }; // NOLINT // A handy wrapper for AddRef. #define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef::type // A helper for implementing get(). template class Get; // A helper for implementing tuple_element. kIndexValid is true // iff k < the number of fields in tuple type T. template struct TupleElement; template struct TupleElement { typedef T0 type; }; template struct TupleElement { typedef T1 type; }; template struct TupleElement { typedef T2 type; }; template struct TupleElement { typedef T3 type; }; template struct TupleElement { typedef T4 type; }; template struct TupleElement { typedef T5 type; }; template struct TupleElement { typedef T6 type; }; template struct TupleElement { typedef T7 type; }; template struct TupleElement { typedef T8 type; }; template struct TupleElement { typedef T9 type; }; } // namespace gtest_internal template <> class tuple<> { public: tuple() {} tuple(const tuple& /* t */) {} tuple& operator=(const tuple& /* t */) { return *this; } }; template class GTEST_1_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_() {} explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {} tuple(const tuple& t) : f0_(t.f0_) {} template tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_1_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) { f0_ = t.f0_; return *this; } T0 f0_; }; template class GTEST_2_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0), f1_(f1) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {} template tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {} template tuple(const ::std::pair& p) : f0_(p.first), f1_(p.second) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_2_TUPLE_(U)& t) { return CopyFrom(t); } template tuple& operator=(const ::std::pair& p) { f0_ = p.first; f1_ = p.second; return *this; } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; return *this; } T0 f0_; T1 f1_; }; template class GTEST_3_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} template tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_3_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; return *this; } T0 f0_; T1 f1_; T2 f2_; }; template class GTEST_4_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2), f3_(f3) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} template tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_4_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; }; template class GTEST_5_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_) {} template tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_5_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; }; template class GTEST_6_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} template tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_6_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; }; template class GTEST_7_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} template tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_7_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; }; template class GTEST_8_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} template tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_8_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; f7_ = t.f7_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; T7 f7_; }; template class GTEST_9_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} template tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_9_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; f7_ = t.f7_; f8_ = t.f8_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; T7 f7_; T8 f8_; }; template class tuple { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(), f9_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} template tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_10_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; f7_ = t.f7_; f8_ = t.f8_; f9_ = t.f9_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; T7 f7_; T8 f8_; T9 f9_; }; // 6.1.3.2 Tuple creation functions. // Known limitations: we don't support passing an // std::tr1::reference_wrapper to make_tuple(). And we don't // implement tie(). inline tuple<> make_tuple() { return tuple<>(); } template inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) { return GTEST_1_TUPLE_(T)(f0); } template inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) { return GTEST_2_TUPLE_(T)(f0, f1); } template inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) { return GTEST_3_TUPLE_(T)(f0, f1, f2); } template inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3) { return GTEST_4_TUPLE_(T)(f0, f1, f2, f3); } template inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4) { return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4); } template inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5) { return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5); } template inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6) { return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6); } template inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) { return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7); } template inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, const T8& f8) { return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8); } template inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, const T8& f8, const T9& f9) { return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9); } // 6.1.3.3 Tuple helper classes. template struct tuple_size; template struct tuple_size { static const int value = 0; }; template struct tuple_size { static const int value = 1; }; template struct tuple_size { static const int value = 2; }; template struct tuple_size { static const int value = 3; }; template struct tuple_size { static const int value = 4; }; template struct tuple_size { static const int value = 5; }; template struct tuple_size { static const int value = 6; }; template struct tuple_size { static const int value = 7; }; template struct tuple_size { static const int value = 8; }; template struct tuple_size { static const int value = 9; }; template struct tuple_size { static const int value = 10; }; template struct tuple_element { typedef typename gtest_internal::TupleElement< k < (tuple_size::value), k, Tuple>::type type; }; #define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element::type // 6.1.3.4 Element access. namespace gtest_internal { template <> class Get<0> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) Field(Tuple& t) { return t.f0_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) ConstField(const Tuple& t) { return t.f0_; } }; template <> class Get<1> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) Field(Tuple& t) { return t.f1_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) ConstField(const Tuple& t) { return t.f1_; } }; template <> class Get<2> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) Field(Tuple& t) { return t.f2_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) ConstField(const Tuple& t) { return t.f2_; } }; template <> class Get<3> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) Field(Tuple& t) { return t.f3_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) ConstField(const Tuple& t) { return t.f3_; } }; template <> class Get<4> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) Field(Tuple& t) { return t.f4_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) ConstField(const Tuple& t) { return t.f4_; } }; template <> class Get<5> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) Field(Tuple& t) { return t.f5_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) ConstField(const Tuple& t) { return t.f5_; } }; template <> class Get<6> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) Field(Tuple& t) { return t.f6_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) ConstField(const Tuple& t) { return t.f6_; } }; template <> class Get<7> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) Field(Tuple& t) { return t.f7_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) ConstField(const Tuple& t) { return t.f7_; } }; template <> class Get<8> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) Field(Tuple& t) { return t.f8_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) ConstField(const Tuple& t) { return t.f8_; } }; template <> class Get<9> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) Field(Tuple& t) { return t.f9_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) ConstField(const Tuple& t) { return t.f9_; } }; } // namespace gtest_internal template GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) get(GTEST_10_TUPLE_(T)& t) { return gtest_internal::Get::Field(t); } template GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) get(const GTEST_10_TUPLE_(T)& t) { return gtest_internal::Get::ConstField(t); } // 6.1.3.5 Relational operators // We only implement == and !=, as we don't have a need for the rest yet. namespace gtest_internal { // SameSizeTuplePrefixComparator::Eq(t1, t2) returns true if the // first k fields of t1 equals the first k fields of t2. // SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if // k1 != k2. template struct SameSizeTuplePrefixComparator; template <> struct SameSizeTuplePrefixComparator<0, 0> { template static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { return true; } }; template struct SameSizeTuplePrefixComparator { template static bool Eq(const Tuple1& t1, const Tuple2& t2) { return SameSizeTuplePrefixComparator::Eq(t1, t2) && ::std::tr1::get(t1) == ::std::tr1::get(t2); } }; } // namespace gtest_internal template inline bool operator==(const GTEST_10_TUPLE_(T)& t, const GTEST_10_TUPLE_(U)& u) { return gtest_internal::SameSizeTuplePrefixComparator< tuple_size::value, tuple_size::value>::Eq(t, u); } template inline bool operator!=(const GTEST_10_TUPLE_(T)& t, const GTEST_10_TUPLE_(U)& u) { return !(t == u); } // 6.1.4 Pairs. // Unimplemented. } // namespace tr1 } // namespace std #undef GTEST_0_TUPLE_ #undef GTEST_1_TUPLE_ #undef GTEST_2_TUPLE_ #undef GTEST_3_TUPLE_ #undef GTEST_4_TUPLE_ #undef GTEST_5_TUPLE_ #undef GTEST_6_TUPLE_ #undef GTEST_7_TUPLE_ #undef GTEST_8_TUPLE_ #undef GTEST_9_TUPLE_ #undef GTEST_10_TUPLE_ #undef GTEST_0_TYPENAMES_ #undef GTEST_1_TYPENAMES_ #undef GTEST_2_TYPENAMES_ #undef GTEST_3_TYPENAMES_ #undef GTEST_4_TYPENAMES_ #undef GTEST_5_TYPENAMES_ #undef GTEST_6_TYPENAMES_ #undef GTEST_7_TYPENAMES_ #undef GTEST_8_TYPENAMES_ #undef GTEST_9_TYPENAMES_ #undef GTEST_10_TYPENAMES_ #undef GTEST_DECLARE_TUPLE_AS_FRIEND_ #undef GTEST_BY_REF_ #undef GTEST_ADD_REF_ #undef GTEST_TUPLE_ELEMENT_ #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ # elif GTEST_ENV_HAS_STD_TUPLE_ # include // C++11 puts its tuple into the ::std namespace rather than // ::std::tr1. gtest expects tuple to live in ::std::tr1, so put it there. // This causes undefined behavior, but supported compilers react in // the way we intend. namespace std { namespace tr1 { using ::std::get; using ::std::make_tuple; using ::std::tuple; using ::std::tuple_element; using ::std::tuple_size; } } # elif GTEST_OS_SYMBIAN // On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to // use STLport's tuple implementation, which unfortunately doesn't // work as the copy of STLport distributed with Symbian is incomplete. // By making sure BOOST_HAS_TR1_TUPLE is undefined, we force Boost to // use its own tuple implementation. # ifdef BOOST_HAS_TR1_TUPLE # undef BOOST_HAS_TR1_TUPLE # endif // BOOST_HAS_TR1_TUPLE // This prevents , which defines // BOOST_HAS_TR1_TUPLE, from being #included by Boost's . # define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED # include # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000) // GCC 4.0+ implements tr1/tuple in the header. This does // not conform to the TR1 spec, which requires the header to be . # if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 // Until version 4.3.2, gcc has a bug that causes , // which is #included by , to not compile when RTTI is // disabled. _TR1_FUNCTIONAL is the header guard for // . Hence the following #define is a hack to prevent // from being included. # define _TR1_FUNCTIONAL 1 # include # undef _TR1_FUNCTIONAL // Allows the user to #include // if he chooses to. # else # include // NOLINT # endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 # else // If the compiler is not GCC 4.0+, we assume the user is using a // spec-conforming TR1 implementation. # include // NOLINT # endif // GTEST_USE_OWN_TR1_TUPLE #endif // GTEST_HAS_TR1_TUPLE // Determines whether clone(2) is supported. // Usually it will only be available on Linux, excluding // Linux on the Itanium architecture. // Also see http://linux.die.net/man/2/clone. #ifndef GTEST_HAS_CLONE // The user didn't tell us, so we need to figure it out. # if GTEST_OS_LINUX && !defined(__ia64__) # if GTEST_OS_LINUX_ANDROID // On Android, clone() is only available on ARM starting with Gingerbread. # if defined(__arm__) && __ANDROID_API__ >= 9 # define GTEST_HAS_CLONE 1 # else # define GTEST_HAS_CLONE 0 # endif # else # define GTEST_HAS_CLONE 1 # endif # else # define GTEST_HAS_CLONE 0 # endif // GTEST_OS_LINUX && !defined(__ia64__) #endif // GTEST_HAS_CLONE // Determines whether to support stream redirection. This is used to test // output correctness and to implement death tests. #ifndef GTEST_HAS_STREAM_REDIRECTION // By default, we assume that stream redirection is supported on all // platforms except known mobile ones. # if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN # define GTEST_HAS_STREAM_REDIRECTION 0 # else # define GTEST_HAS_STREAM_REDIRECTION 1 # endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN #endif // GTEST_HAS_STREAM_REDIRECTION // Determines whether to support death tests. // Google Test does not support death tests for VC 7.1 and earlier as // abort() in a VC 7.1 application compiled as GUI in debug config // pops up a dialog window that cannot be suppressed programmatically. #if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ (GTEST_OS_MAC && !GTEST_OS_IOS) || GTEST_OS_IOS_SIMULATOR || \ (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \ GTEST_OS_OPENBSD || GTEST_OS_QNX) # define GTEST_HAS_DEATH_TEST 1 # include // NOLINT #endif // We don't support MSVC 7.1 with exceptions disabled now. Therefore // all the compilers we care about are adequate for supporting // value-parameterized tests. #define GTEST_HAS_PARAM_TEST 1 // Determines whether to support type-driven tests. // Typed tests need and variadic macros, which GCC, VC++ 8.0, // Sun Pro CC, IBM Visual Age, and HP aCC support. #if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \ defined(__IBMCPP__) || defined(__HP_aCC) # define GTEST_HAS_TYPED_TEST 1 # define GTEST_HAS_TYPED_TEST_P 1 #endif // Determines whether to support Combine(). This only makes sense when // value-parameterized tests are enabled. The implementation doesn't // work on Sun Studio since it doesn't understand templated conversion // operators. #if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC) # define GTEST_HAS_COMBINE 1 #endif // Determines whether the system compiler uses UTF-16 for encoding wide strings. #define GTEST_WIDE_STRING_USES_UTF16_ \ (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX) // Determines whether test results can be streamed to a socket. #if GTEST_OS_LINUX # define GTEST_CAN_STREAM_RESULTS_ 1 #endif // Defines some utility macros. // The GNU compiler emits a warning if nested "if" statements are followed by // an "else" statement and braces are not used to explicitly disambiguate the // "else" binding. This leads to problems with code like: // // if (gate) // ASSERT_*(condition) << "Some message"; // // The "switch (0) case 0:" idiom is used to suppress this. #ifdef __INTEL_COMPILER # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ #else # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default: // NOLINT #endif // Use this annotation at the end of a struct/class definition to // prevent the compiler from optimizing away instances that are never // used. This is useful when all interesting logic happens inside the // c'tor and / or d'tor. Example: // // struct Foo { // Foo() { ... } // } GTEST_ATTRIBUTE_UNUSED_; // // Also use it after a variable or parameter declaration to tell the // compiler the variable/parameter does not have to be used. #if defined(__GNUC__) && !defined(COMPILER_ICC) # define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) #else # define GTEST_ATTRIBUTE_UNUSED_ #endif // A macro to disallow operator= // This should be used in the private: declarations for a class. #define GTEST_DISALLOW_ASSIGN_(type)\ void operator=(type const &) // A macro to disallow copy constructor and operator= // This should be used in the private: declarations for a class. #define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\ type(type const &);\ GTEST_DISALLOW_ASSIGN_(type) // Tell the compiler to warn about unused return values for functions declared // with this macro. The macro should be used on function declarations // following the argument list: // // Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_; #if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC) # define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) #else # define GTEST_MUST_USE_RESULT_ #endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC // Determine whether the compiler supports Microsoft's Structured Exception // Handling. This is supported by several Windows compilers but generally // does not exist on any other system. #ifndef GTEST_HAS_SEH // The user didn't tell us, so we need to figure it out. # if defined(_MSC_VER) || defined(__BORLANDC__) // These two compilers are known to support SEH. # define GTEST_HAS_SEH 1 # else // Assume no SEH. # define GTEST_HAS_SEH 0 # endif #endif // GTEST_HAS_SEH #ifdef _MSC_VER # if GTEST_LINKED_AS_SHARED_LIBRARY # define GTEST_API_ __declspec(dllimport) # elif GTEST_CREATE_SHARED_LIBRARY # define GTEST_API_ __declspec(dllexport) # endif #endif // _MSC_VER #ifndef GTEST_API_ # define GTEST_API_ #endif #ifdef __GNUC__ // Ask the compiler to never inline a given function. # define GTEST_NO_INLINE_ __attribute__((noinline)) #else # define GTEST_NO_INLINE_ #endif // _LIBCPP_VERSION is defined by the libc++ library from the LLVM project. #if defined(__GLIBCXX__) || defined(_LIBCPP_VERSION) # define GTEST_HAS_CXXABI_H_ 1 #else # define GTEST_HAS_CXXABI_H_ 0 #endif namespace testing { class Message; namespace internal { // A secret type that Google Test users don't know about. It has no // definition on purpose. Therefore it's impossible to create a // Secret object, which is what we want. class Secret; // The GTEST_COMPILE_ASSERT_ macro can be used to verify that a compile time // expression is true. For example, you could use it to verify the // size of a static array: // // GTEST_COMPILE_ASSERT_(ARRAYSIZE(content_type_names) == CONTENT_NUM_TYPES, // content_type_names_incorrect_size); // // or to make sure a struct is smaller than a certain size: // // GTEST_COMPILE_ASSERT_(sizeof(foo) < 128, foo_too_large); // // The second argument to the macro is the name of the variable. If // the expression is false, most compilers will issue a warning/error // containing the name of the variable. template struct CompileAssert { }; #define GTEST_COMPILE_ASSERT_(expr, msg) \ typedef ::testing::internal::CompileAssert<(static_cast(expr))> \ msg[static_cast(expr) ? 1 : -1] GTEST_ATTRIBUTE_UNUSED_ // Implementation details of GTEST_COMPILE_ASSERT_: // // - GTEST_COMPILE_ASSERT_ works by defining an array type that has -1 // elements (and thus is invalid) when the expression is false. // // - The simpler definition // // #define GTEST_COMPILE_ASSERT_(expr, msg) typedef char msg[(expr) ? 1 : -1] // // does not work, as gcc supports variable-length arrays whose sizes // are determined at run-time (this is gcc's extension and not part // of the C++ standard). As a result, gcc fails to reject the // following code with the simple definition: // // int foo; // GTEST_COMPILE_ASSERT_(foo, msg); // not supposed to compile as foo is // // not a compile-time constant. // // - By using the type CompileAssert<(bool(expr))>, we ensures that // expr is a compile-time constant. (Template arguments must be // determined at compile-time.) // // - The outter parentheses in CompileAssert<(bool(expr))> are necessary // to work around a bug in gcc 3.4.4 and 4.0.1. If we had written // // CompileAssert // // instead, these compilers will refuse to compile // // GTEST_COMPILE_ASSERT_(5 > 0, some_message); // // (They seem to think the ">" in "5 > 0" marks the end of the // template argument list.) // // - The array size is (bool(expr) ? 1 : -1), instead of simply // // ((expr) ? 1 : -1). // // This is to avoid running into a bug in MS VC 7.1, which // causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1. // StaticAssertTypeEqHelper is used by StaticAssertTypeEq defined in gtest.h. // // This template is declared, but intentionally undefined. template struct StaticAssertTypeEqHelper; template struct StaticAssertTypeEqHelper {}; #if GTEST_HAS_GLOBAL_STRING typedef ::string string; #else typedef ::std::string string; #endif // GTEST_HAS_GLOBAL_STRING #if GTEST_HAS_GLOBAL_WSTRING typedef ::wstring wstring; #elif GTEST_HAS_STD_WSTRING typedef ::std::wstring wstring; #endif // GTEST_HAS_GLOBAL_WSTRING // A helper for suppressing warnings on constant condition. It just // returns 'condition'. GTEST_API_ bool IsTrue(bool condition); // Defines scoped_ptr. // This implementation of scoped_ptr is PARTIAL - it only contains // enough stuff to satisfy Google Test's need. template class scoped_ptr { public: typedef T element_type; explicit scoped_ptr(T* p = NULL) : ptr_(p) {} ~scoped_ptr() { reset(); } T& operator*() const { return *ptr_; } T* operator->() const { return ptr_; } T* get() const { return ptr_; } T* release() { T* const ptr = ptr_; ptr_ = NULL; return ptr; } void reset(T* p = NULL) { if (p != ptr_) { if (IsTrue(sizeof(T) > 0)) { // Makes sure T is a complete type. delete ptr_; } ptr_ = p; } } private: T* ptr_; GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr); }; // Defines RE. // A simple C++ wrapper for . It uses the POSIX Extended // Regular Expression syntax. class GTEST_API_ RE { public: // A copy constructor is required by the Standard to initialize object // references from r-values. RE(const RE& other) { Init(other.pattern()); } // Constructs an RE from a string. RE(const ::std::string& regex) { Init(regex.c_str()); } // NOLINT #if GTEST_HAS_GLOBAL_STRING RE(const ::string& regex) { Init(regex.c_str()); } // NOLINT #endif // GTEST_HAS_GLOBAL_STRING RE(const char* regex) { Init(regex); } // NOLINT ~RE(); // Returns the string representation of the regex. const char* pattern() const { return pattern_; } // FullMatch(str, re) returns true iff regular expression re matches // the entire str. // PartialMatch(str, re) returns true iff regular expression re // matches a substring of str (including str itself). // // TODO(wan@google.com): make FullMatch() and PartialMatch() work // when str contains NUL characters. static bool FullMatch(const ::std::string& str, const RE& re) { return FullMatch(str.c_str(), re); } static bool PartialMatch(const ::std::string& str, const RE& re) { return PartialMatch(str.c_str(), re); } #if GTEST_HAS_GLOBAL_STRING static bool FullMatch(const ::string& str, const RE& re) { return FullMatch(str.c_str(), re); } static bool PartialMatch(const ::string& str, const RE& re) { return PartialMatch(str.c_str(), re); } #endif // GTEST_HAS_GLOBAL_STRING static bool FullMatch(const char* str, const RE& re); static bool PartialMatch(const char* str, const RE& re); private: void Init(const char* regex); // We use a const char* instead of an std::string, as Google Test used to be // used where std::string is not available. TODO(wan@google.com): change to // std::string. const char* pattern_; bool is_valid_; #if GTEST_USES_POSIX_RE regex_t full_regex_; // For FullMatch(). regex_t partial_regex_; // For PartialMatch(). #else // GTEST_USES_SIMPLE_RE const char* full_pattern_; // For FullMatch(); #endif GTEST_DISALLOW_ASSIGN_(RE); }; // Formats a source file path and a line number as they would appear // in an error message from the compiler used to compile this code. GTEST_API_ ::std::string FormatFileLocation(const char* file, int line); // Formats a file location for compiler-independent XML output. // Although this function is not platform dependent, we put it next to // FormatFileLocation in order to contrast the two functions. GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char* file, int line); // Defines logging utilities: // GTEST_LOG_(severity) - logs messages at the specified severity level. The // message itself is streamed into the macro. // LogToStderr() - directs all log messages to stderr. // FlushInfoLog() - flushes informational log messages. enum GTestLogSeverity { GTEST_INFO, GTEST_WARNING, GTEST_ERROR, GTEST_FATAL }; // Formats log entry severity, provides a stream object for streaming the // log message, and terminates the message with a newline when going out of // scope. class GTEST_API_ GTestLog { public: GTestLog(GTestLogSeverity severity, const char* file, int line); // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. ~GTestLog(); ::std::ostream& GetStream() { return ::std::cerr; } private: const GTestLogSeverity severity_; GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog); }; #define GTEST_LOG_(severity) \ ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ __FILE__, __LINE__).GetStream() inline void LogToStderr() {} inline void FlushInfoLog() { fflush(NULL); } // INTERNAL IMPLEMENTATION - DO NOT USE. // // GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition // is not satisfied. // Synopsys: // GTEST_CHECK_(boolean_condition); // or // GTEST_CHECK_(boolean_condition) << "Additional message"; // // This checks the condition and if the condition is not satisfied // it prints message about the condition violation, including the // condition itself, plus additional message streamed into it, if any, // and then it aborts the program. It aborts the program irrespective of // whether it is built in the debug mode or not. #define GTEST_CHECK_(condition) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::IsTrue(condition)) \ ; \ else \ GTEST_LOG_(FATAL) << "Condition " #condition " failed. " // An all-mode assert to verify that the given POSIX-style function // call returns 0 (indicating success). Known limitation: this // doesn't expand to a balanced 'if' statement, so enclose the macro // in {} if you need to use it as the only statement in an 'if' // branch. #define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ if (const int gtest_error = (posix_call)) \ GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ << gtest_error // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Use ImplicitCast_ as a safe version of static_cast for upcasting in // the type hierarchy (e.g. casting a Foo* to a SuperclassOfFoo* or a // const Foo*). When you use ImplicitCast_, the compiler checks that // the cast is safe. Such explicit ImplicitCast_s are necessary in // surprisingly many situations where C++ demands an exact type match // instead of an argument type convertable to a target type. // // The syntax for using ImplicitCast_ is the same as for static_cast: // // ImplicitCast_(expr) // // ImplicitCast_ would have been part of the C++ standard library, // but the proposal was submitted too late. It will probably make // its way into the language in the future. // // This relatively ugly name is intentional. It prevents clashes with // similar functions users may have (e.g., implicit_cast). The internal // namespace alone is not enough because the function can be found by ADL. template inline To ImplicitCast_(To x) { return x; } // When you upcast (that is, cast a pointer from type Foo to type // SuperclassOfFoo), it's fine to use ImplicitCast_<>, since upcasts // always succeed. When you downcast (that is, cast a pointer from // type Foo to type SubclassOfFoo), static_cast<> isn't safe, because // how do you know the pointer is really of type SubclassOfFoo? It // could be a bare Foo, or of type DifferentSubclassOfFoo. Thus, // when you downcast, you should use this macro. In debug mode, we // use dynamic_cast<> to double-check the downcast is legal (we die // if it's not). In normal mode, we do the efficient static_cast<> // instead. Thus, it's important to test in debug mode to make sure // the cast is legal! // This is the only place in the code we should use dynamic_cast<>. // In particular, you SHOULDN'T be using dynamic_cast<> in order to // do RTTI (eg code like this: // if (dynamic_cast(foo)) HandleASubclass1Object(foo); // if (dynamic_cast(foo)) HandleASubclass2Object(foo); // You should design the code some other way not to need this. // // This relatively ugly name is intentional. It prevents clashes with // similar functions users may have (e.g., down_cast). The internal // namespace alone is not enough because the function can be found by ADL. template // use like this: DownCast_(foo); inline To DownCast_(From* f) { // so we only accept pointers // Ensures that To is a sub-type of From *. This test is here only // for compile-time type checking, and has no overhead in an // optimized build at run-time, as it will be optimized away // completely. if (false) { const To to = NULL; ::testing::internal::ImplicitCast_(to); } #if GTEST_HAS_RTTI // RTTI: debug mode only! GTEST_CHECK_(f == NULL || dynamic_cast(f) != NULL); #endif return static_cast(f); } // Downcasts the pointer of type Base to Derived. // Derived must be a subclass of Base. The parameter MUST // point to a class of type Derived, not any subclass of it. // When RTTI is available, the function performs a runtime // check to enforce this. template Derived* CheckedDowncastToActualType(Base* base) { #if GTEST_HAS_RTTI GTEST_CHECK_(typeid(*base) == typeid(Derived)); return dynamic_cast(base); // NOLINT #else return static_cast(base); // Poor man's downcast. #endif } #if GTEST_HAS_STREAM_REDIRECTION // Defines the stderr capturer: // CaptureStdout - starts capturing stdout. // GetCapturedStdout - stops capturing stdout and returns the captured string. // CaptureStderr - starts capturing stderr. // GetCapturedStderr - stops capturing stderr and returns the captured string. // GTEST_API_ void CaptureStdout(); GTEST_API_ std::string GetCapturedStdout(); GTEST_API_ void CaptureStderr(); GTEST_API_ std::string GetCapturedStderr(); #endif // GTEST_HAS_STREAM_REDIRECTION #if GTEST_HAS_DEATH_TEST const ::std::vector& GetInjectableArgvs(); void SetInjectableArgvs(const ::std::vector* new_argvs); // A copy of all command line arguments. Set by InitGoogleTest(). extern ::std::vector g_argvs; #endif // GTEST_HAS_DEATH_TEST // Defines synchronization primitives. #if GTEST_HAS_PTHREAD // Sleeps for (roughly) n milli-seconds. This function is only for // testing Google Test's own constructs. Don't use it in user tests, // either directly or indirectly. inline void SleepMilliseconds(int n) { const timespec time = { 0, // 0 seconds. n * 1000L * 1000L, // And n ms. }; nanosleep(&time, NULL); } // Allows a controller thread to pause execution of newly created // threads until notified. Instances of this class must be created // and destroyed in the controller thread. // // This class is only for testing Google Test's own constructs. Do not // use it in user tests, either directly or indirectly. class Notification { public: Notification() : notified_(false) { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); } ~Notification() { pthread_mutex_destroy(&mutex_); } // Notifies all threads created with this notification to start. Must // be called from the controller thread. void Notify() { pthread_mutex_lock(&mutex_); notified_ = true; pthread_mutex_unlock(&mutex_); } // Blocks until the controller thread notifies. Must be called from a test // thread. void WaitForNotification() { for (;;) { pthread_mutex_lock(&mutex_); const bool notified = notified_; pthread_mutex_unlock(&mutex_); if (notified) break; SleepMilliseconds(10); } } private: pthread_mutex_t mutex_; bool notified_; GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification); }; // As a C-function, ThreadFuncWithCLinkage cannot be templated itself. // Consequently, it cannot select a correct instantiation of ThreadWithParam // in order to call its Run(). Introducing ThreadWithParamBase as a // non-templated base class for ThreadWithParam allows us to bypass this // problem. class ThreadWithParamBase { public: virtual ~ThreadWithParamBase() {} virtual void Run() = 0; }; // pthread_create() accepts a pointer to a function type with the C linkage. // According to the Standard (7.5/1), function types with different linkages // are different even if they are otherwise identical. Some compilers (for // example, SunStudio) treat them as different types. Since class methods // cannot be defined with C-linkage we need to define a free C-function to // pass into pthread_create(). extern "C" inline void* ThreadFuncWithCLinkage(void* thread) { static_cast(thread)->Run(); return NULL; } // Helper class for testing Google Test's multi-threading constructs. // To use it, write: // // void ThreadFunc(int param) { /* Do things with param */ } // Notification thread_can_start; // ... // // The thread_can_start parameter is optional; you can supply NULL. // ThreadWithParam thread(&ThreadFunc, 5, &thread_can_start); // thread_can_start.Notify(); // // These classes are only for testing Google Test's own constructs. Do // not use them in user tests, either directly or indirectly. template class ThreadWithParam : public ThreadWithParamBase { public: typedef void (*UserThreadFunc)(T); ThreadWithParam( UserThreadFunc func, T param, Notification* thread_can_start) : func_(func), param_(param), thread_can_start_(thread_can_start), finished_(false) { ThreadWithParamBase* const base = this; // The thread can be created only after all fields except thread_ // have been initialized. GTEST_CHECK_POSIX_SUCCESS_( pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base)); } ~ThreadWithParam() { Join(); } void Join() { if (!finished_) { GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0)); finished_ = true; } } virtual void Run() { if (thread_can_start_ != NULL) thread_can_start_->WaitForNotification(); func_(param_); } private: const UserThreadFunc func_; // User-supplied thread function. const T param_; // User-supplied parameter to the thread function. // When non-NULL, used to block execution until the controller thread // notifies. Notification* const thread_can_start_; bool finished_; // true iff we know that the thread function has finished. pthread_t thread_; // The native thread object. GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam); }; // MutexBase and Mutex implement mutex on pthreads-based platforms. They // are used in conjunction with class MutexLock: // // Mutex mutex; // ... // MutexLock lock(&mutex); // Acquires the mutex and releases it at the end // // of the current scope. // // MutexBase implements behavior for both statically and dynamically // allocated mutexes. Do not use MutexBase directly. Instead, write // the following to define a static mutex: // // GTEST_DEFINE_STATIC_MUTEX_(g_some_mutex); // // You can forward declare a static mutex like this: // // GTEST_DECLARE_STATIC_MUTEX_(g_some_mutex); // // To create a dynamic mutex, just define an object of type Mutex. class MutexBase { public: // Acquires this mutex. void Lock() { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_)); owner_ = pthread_self(); has_owner_ = true; } // Releases this mutex. void Unlock() { // Since the lock is being released the owner_ field should no longer be // considered valid. We don't protect writing to has_owner_ here, as it's // the caller's responsibility to ensure that the current thread holds the // mutex when this is called. has_owner_ = false; GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_)); } // Does nothing if the current thread holds the mutex. Otherwise, crashes // with high probability. void AssertHeld() const { GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self())) << "The current thread is not holding the mutex @" << this; } // A static mutex may be used before main() is entered. It may even // be used before the dynamic initialization stage. Therefore we // must be able to initialize a static mutex object at link time. // This means MutexBase has to be a POD and its member variables // have to be public. public: pthread_mutex_t mutex_; // The underlying pthread mutex. // has_owner_ indicates whether the owner_ field below contains a valid thread // ID and is therefore safe to inspect (e.g., to use in pthread_equal()). All // accesses to the owner_ field should be protected by a check of this field. // An alternative might be to memset() owner_ to all zeros, but there's no // guarantee that a zero'd pthread_t is necessarily invalid or even different // from pthread_self(). bool has_owner_; pthread_t owner_; // The thread holding the mutex. }; // Forward-declares a static mutex. # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ extern ::testing::internal::MutexBase mutex // Defines and statically (i.e. at link time) initializes a static mutex. // The initialization list here does not explicitly initialize each field, // instead relying on default initialization for the unspecified fields. In // particular, the owner_ field (a pthread_t) is not explicitly initialized. // This allows initialization to work whether pthread_t is a scalar or struct. // The flag -Wmissing-field-initializers must not be specified for this to work. # define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, false } // The Mutex class can only be used for mutexes created at runtime. It // shares its API with MutexBase otherwise. class Mutex : public MutexBase { public: Mutex() { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); has_owner_ = false; } ~Mutex() { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_)); } private: GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex); }; // We cannot name this class MutexLock as the ctor declaration would // conflict with a macro named MutexLock, which is defined on some // platforms. Hence the typedef trick below. class GTestMutexLock { public: explicit GTestMutexLock(MutexBase* mutex) : mutex_(mutex) { mutex_->Lock(); } ~GTestMutexLock() { mutex_->Unlock(); } private: MutexBase* const mutex_; GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock); }; typedef GTestMutexLock MutexLock; // Helpers for ThreadLocal. // pthread_key_create() requires DeleteThreadLocalValue() to have // C-linkage. Therefore it cannot be templatized to access // ThreadLocal. Hence the need for class // ThreadLocalValueHolderBase. class ThreadLocalValueHolderBase { public: virtual ~ThreadLocalValueHolderBase() {} }; // Called by pthread to delete thread-local data stored by // pthread_setspecific(). extern "C" inline void DeleteThreadLocalValue(void* value_holder) { delete static_cast(value_holder); } // Implements thread-local storage on pthreads-based systems. // // // Thread 1 // ThreadLocal tl(100); // 100 is the default value for each thread. // // // Thread 2 // tl.set(150); // Changes the value for thread 2 only. // EXPECT_EQ(150, tl.get()); // // // Thread 1 // EXPECT_EQ(100, tl.get()); // In thread 1, tl has the original value. // tl.set(200); // EXPECT_EQ(200, tl.get()); // // The template type argument T must have a public copy constructor. // In addition, the default ThreadLocal constructor requires T to have // a public default constructor. // // An object managed for a thread by a ThreadLocal instance is deleted // when the thread exits. Or, if the ThreadLocal instance dies in // that thread, when the ThreadLocal dies. It's the user's // responsibility to ensure that all other threads using a ThreadLocal // have exited when it dies, or the per-thread objects for those // threads will not be deleted. // // Google Test only uses global ThreadLocal objects. That means they // will die after main() has returned. Therefore, no per-thread // object managed by Google Test will be leaked as long as all threads // using Google Test have exited when main() returns. template class ThreadLocal { public: ThreadLocal() : key_(CreateKey()), default_() {} explicit ThreadLocal(const T& value) : key_(CreateKey()), default_(value) {} ~ThreadLocal() { // Destroys the managed object for the current thread, if any. DeleteThreadLocalValue(pthread_getspecific(key_)); // Releases resources associated with the key. This will *not* // delete managed objects for other threads. GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_)); } T* pointer() { return GetOrCreateValue(); } const T* pointer() const { return GetOrCreateValue(); } const T& get() const { return *pointer(); } void set(const T& value) { *pointer() = value; } private: // Holds a value of type T. class ValueHolder : public ThreadLocalValueHolderBase { public: explicit ValueHolder(const T& value) : value_(value) {} T* pointer() { return &value_; } private: T value_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder); }; static pthread_key_t CreateKey() { pthread_key_t key; // When a thread exits, DeleteThreadLocalValue() will be called on // the object managed for that thread. GTEST_CHECK_POSIX_SUCCESS_( pthread_key_create(&key, &DeleteThreadLocalValue)); return key; } T* GetOrCreateValue() const { ThreadLocalValueHolderBase* const holder = static_cast(pthread_getspecific(key_)); if (holder != NULL) { return CheckedDowncastToActualType(holder)->pointer(); } ValueHolder* const new_holder = new ValueHolder(default_); ThreadLocalValueHolderBase* const holder_base = new_holder; GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base)); return new_holder->pointer(); } // A key pthreads uses for looking up per-thread values. const pthread_key_t key_; const T default_; // The default value for each thread. GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal); }; # define GTEST_IS_THREADSAFE 1 #else // GTEST_HAS_PTHREAD // A dummy implementation of synchronization primitives (mutex, lock, // and thread-local variable). Necessary for compiling Google Test where // mutex is not supported - using Google Test in multiple threads is not // supported on such platforms. class Mutex { public: Mutex() {} void Lock() {} void Unlock() {} void AssertHeld() const {} }; # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ extern ::testing::internal::Mutex mutex # define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex class GTestMutexLock { public: explicit GTestMutexLock(Mutex*) {} // NOLINT }; typedef GTestMutexLock MutexLock; template class ThreadLocal { public: ThreadLocal() : value_() {} explicit ThreadLocal(const T& value) : value_(value) {} T* pointer() { return &value_; } const T* pointer() const { return &value_; } const T& get() const { return value_; } void set(const T& value) { value_ = value; } private: T value_; }; // The above synchronization primitives have dummy implementations. // Therefore Google Test is not thread-safe. # define GTEST_IS_THREADSAFE 0 #endif // GTEST_HAS_PTHREAD // Returns the number of threads running in the process, or 0 to indicate that // we cannot detect it. GTEST_API_ size_t GetThreadCount(); // Passing non-POD classes through ellipsis (...) crashes the ARM // compiler and generates a warning in Sun Studio. The Nokia Symbian // and the IBM XL C/C++ compiler try to instantiate a copy constructor // for objects passed through ellipsis (...), failing for uncopyable // objects. We define this to ensure that only POD is passed through // ellipsis on these systems. #if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC) // We lose support for NULL detection where the compiler doesn't like // passing non-POD classes through ellipsis (...). # define GTEST_ELLIPSIS_NEEDS_POD_ 1 #else # define GTEST_CAN_COMPARE_NULL 1 #endif // The Nokia Symbian and IBM XL C/C++ compilers cannot decide between // const T& and const T* in a function template. These compilers // _can_ decide between class template specializations for T and T*, // so a tr1::type_traits-like is_pointer works. #if defined(__SYMBIAN32__) || defined(__IBMCPP__) # define GTEST_NEEDS_IS_POINTER_ 1 #endif template struct bool_constant { typedef bool_constant type; static const bool value = bool_value; }; template const bool bool_constant::value; typedef bool_constant false_type; typedef bool_constant true_type; template struct is_pointer : public false_type {}; template struct is_pointer : public true_type {}; template struct IteratorTraits { typedef typename Iterator::value_type value_type; }; template struct IteratorTraits { typedef T value_type; }; template struct IteratorTraits { typedef T value_type; }; #if GTEST_OS_WINDOWS # define GTEST_PATH_SEP_ "\\" # define GTEST_HAS_ALT_PATH_SEP_ 1 // The biggest signed integer type the compiler supports. typedef __int64 BiggestInt; #else # define GTEST_PATH_SEP_ "/" # define GTEST_HAS_ALT_PATH_SEP_ 0 typedef long long BiggestInt; // NOLINT #endif // GTEST_OS_WINDOWS // Utilities for char. // isspace(int ch) and friends accept an unsigned char or EOF. char // may be signed, depending on the compiler (or compiler flags). // Therefore we need to cast a char to unsigned char before calling // isspace(), etc. inline bool IsAlpha(char ch) { return isalpha(static_cast(ch)) != 0; } inline bool IsAlNum(char ch) { return isalnum(static_cast(ch)) != 0; } inline bool IsDigit(char ch) { return isdigit(static_cast(ch)) != 0; } inline bool IsLower(char ch) { return islower(static_cast(ch)) != 0; } inline bool IsSpace(char ch) { return isspace(static_cast(ch)) != 0; } inline bool IsUpper(char ch) { return isupper(static_cast(ch)) != 0; } inline bool IsXDigit(char ch) { return isxdigit(static_cast(ch)) != 0; } inline bool IsXDigit(wchar_t ch) { const unsigned char low_byte = static_cast(ch); return ch == low_byte && isxdigit(low_byte) != 0; } inline char ToLower(char ch) { return static_cast(tolower(static_cast(ch))); } inline char ToUpper(char ch) { return static_cast(toupper(static_cast(ch))); } // The testing::internal::posix namespace holds wrappers for common // POSIX functions. These wrappers hide the differences between // Windows/MSVC and POSIX systems. Since some compilers define these // standard functions as macros, the wrapper cannot have the same name // as the wrapped function. namespace posix { // Functions with a different name on Windows. #if GTEST_OS_WINDOWS typedef struct _stat StatStruct; # ifdef __BORLANDC__ inline int IsATTY(int fd) { return isatty(fd); } inline int StrCaseCmp(const char* s1, const char* s2) { return stricmp(s1, s2); } inline char* StrDup(const char* src) { return strdup(src); } # else // !__BORLANDC__ # if GTEST_OS_WINDOWS_MOBILE inline int IsATTY(int /* fd */) { return 0; } # else inline int IsATTY(int fd) { return _isatty(fd); } # endif // GTEST_OS_WINDOWS_MOBILE inline int StrCaseCmp(const char* s1, const char* s2) { return _stricmp(s1, s2); } inline char* StrDup(const char* src) { return _strdup(src); } # endif // __BORLANDC__ # if GTEST_OS_WINDOWS_MOBILE inline int FileNo(FILE* file) { return reinterpret_cast(_fileno(file)); } // Stat(), RmDir(), and IsDir() are not needed on Windows CE at this // time and thus not defined there. # else inline int FileNo(FILE* file) { return _fileno(file); } inline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); } inline int RmDir(const char* dir) { return _rmdir(dir); } inline bool IsDir(const StatStruct& st) { return (_S_IFDIR & st.st_mode) != 0; } # endif // GTEST_OS_WINDOWS_MOBILE #else typedef struct stat StatStruct; inline int FileNo(FILE* file) { return fileno(file); } inline int IsATTY(int fd) { return isatty(fd); } inline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); } inline int StrCaseCmp(const char* s1, const char* s2) { return strcasecmp(s1, s2); } inline char* StrDup(const char* src) { return strdup(src); } inline int RmDir(const char* dir) { return rmdir(dir); } inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } #endif // GTEST_OS_WINDOWS // Functions deprecated by MSVC 8.0. #ifdef _MSC_VER // Temporarily disable warning 4996 (deprecated function). # pragma warning(push) # pragma warning(disable:4996) #endif inline const char* StrNCpy(char* dest, const char* src, size_t n) { return strncpy(dest, src, n); } // ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and // StrError() aren't needed on Windows CE at this time and thus not // defined there. #if !GTEST_OS_WINDOWS_MOBILE inline int ChDir(const char* dir) { return chdir(dir); } #endif inline FILE* FOpen(const char* path, const char* mode) { return fopen(path, mode); } #if !GTEST_OS_WINDOWS_MOBILE inline FILE *FReopen(const char* path, const char* mode, FILE* stream) { return freopen(path, mode, stream); } inline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); } #endif inline int FClose(FILE* fp) { return fclose(fp); } #if !GTEST_OS_WINDOWS_MOBILE inline int Read(int fd, void* buf, unsigned int count) { return static_cast(read(fd, buf, count)); } inline int Write(int fd, const void* buf, unsigned int count) { return static_cast(write(fd, buf, count)); } inline int Close(int fd) { return close(fd); } inline const char* StrError(int errnum) { return strerror(errnum); } #endif inline const char* GetEnv(const char* name) { #if GTEST_OS_WINDOWS_MOBILE // We are on Windows CE, which has no environment variables. return NULL; #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) // Environment variables which we programmatically clear will be set to the // empty string rather than unset (NULL). Handle that case. const char* const env = getenv(name); return (env != NULL && env[0] != '\0') ? env : NULL; #else return getenv(name); #endif } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif #if GTEST_OS_WINDOWS_MOBILE // Windows CE has no C library. The abort() function is used in // several places in Google Test. This implementation provides a reasonable // imitation of standard behaviour. void Abort(); #else inline void Abort() { abort(); } #endif // GTEST_OS_WINDOWS_MOBILE } // namespace posix // MSVC "deprecates" snprintf and issues warnings wherever it is used. In // order to avoid these warnings, we need to use _snprintf or _snprintf_s on // MSVC-based platforms. We map the GTEST_SNPRINTF_ macro to the appropriate // function in order to achieve that. We use macro definition here because // snprintf is a variadic function. #if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE // MSVC 2005 and above support variadic macros. # define GTEST_SNPRINTF_(buffer, size, format, ...) \ _snprintf_s(buffer, size, size, format, __VA_ARGS__) #elif defined(_MSC_VER) // Windows CE does not define _snprintf_s and MSVC prior to 2005 doesn't // complain about _snprintf. # define GTEST_SNPRINTF_ _snprintf #else # define GTEST_SNPRINTF_ snprintf #endif // The maximum number a BiggestInt can represent. This definition // works no matter BiggestInt is represented in one's complement or // two's complement. // // We cannot rely on numeric_limits in STL, as __int64 and long long // are not part of standard C++ and numeric_limits doesn't need to be // defined for them. const BiggestInt kMaxBiggestInt = ~(static_cast(1) << (8*sizeof(BiggestInt) - 1)); // This template class serves as a compile-time function from size to // type. It maps a size in bytes to a primitive type with that // size. e.g. // // TypeWithSize<4>::UInt // // is typedef-ed to be unsigned int (unsigned integer made up of 4 // bytes). // // Such functionality should belong to STL, but I cannot find it // there. // // Google Test uses this class in the implementation of floating-point // comparison. // // For now it only handles UInt (unsigned int) as that's all Google Test // needs. Other types can be easily added in the future if need // arises. template class TypeWithSize { public: // This prevents the user from using TypeWithSize with incorrect // values of N. typedef void UInt; }; // The specialization for size 4. template <> class TypeWithSize<4> { public: // unsigned int has size 4 in both gcc and MSVC. // // As base/basictypes.h doesn't compile on Windows, we cannot use // uint32, uint64, and etc here. typedef int Int; typedef unsigned int UInt; }; // The specialization for size 8. template <> class TypeWithSize<8> { public: #if GTEST_OS_WINDOWS typedef __int64 Int; typedef unsigned __int64 UInt; #else typedef long long Int; // NOLINT typedef unsigned long long UInt; // NOLINT #endif // GTEST_OS_WINDOWS }; // Integer types of known sizes. typedef TypeWithSize<4>::Int Int32; typedef TypeWithSize<4>::UInt UInt32; typedef TypeWithSize<8>::Int Int64; typedef TypeWithSize<8>::UInt UInt64; typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. // Utilities for command line flags and environment variables. // Macro for referencing flags. #define GTEST_FLAG(name) FLAGS_gtest_##name // Macros for declaring flags. #define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name) #define GTEST_DECLARE_int32_(name) \ GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name) #define GTEST_DECLARE_string_(name) \ GTEST_API_ extern ::std::string GTEST_FLAG(name) // Macros for defining flags. #define GTEST_DEFINE_bool_(name, default_val, doc) \ GTEST_API_ bool GTEST_FLAG(name) = (default_val) #define GTEST_DEFINE_int32_(name, default_val, doc) \ GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) #define GTEST_DEFINE_string_(name, default_val, doc) \ GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val) // Thread annotations #define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) #define GTEST_LOCK_EXCLUDED_(locks) // Parses 'str' for a 32-bit signed integer. If successful, writes the result // to *value and returns true; otherwise leaves *value unchanged and returns // false. // TODO(chandlerc): Find a better way to refactor flag and environment parsing // out of both gtest-port.cc and gtest.cc to avoid exporting this utility // function. bool ParseInt32(const Message& src_text, const char* str, Int32* value); // Parses a bool/Int32/string from the environment variable // corresponding to the given Google Test flag. bool BoolFromGTestEnv(const char* flag, bool default_val); GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val); const char* StringFromGTestEnv(const char* flag, const char* default_val); } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ #if GTEST_OS_LINUX # include # include # include # include #endif // GTEST_OS_LINUX #if GTEST_HAS_EXCEPTIONS # include #endif #include #include #include #include #include #include // Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) // // This header file defines the Message class. // // IMPORTANT NOTE: Due to limitation of the C++ language, we have to // leave some internal implementation details in this header file. // They are clearly marked by comments like this: // // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // // Such code is NOT meant to be used by a user directly, and is subject // to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user // program! #ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ #define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ #include // Ensures that there is at least one operator<< in the global namespace. // See Message& operator<<(...) below for why. void operator<<(const testing::internal::Secret&, int); namespace testing { // The Message class works like an ostream repeater. // // Typical usage: // // 1. You stream a bunch of values to a Message object. // It will remember the text in a stringstream. // 2. Then you stream the Message object to an ostream. // This causes the text in the Message to be streamed // to the ostream. // // For example; // // testing::Message foo; // foo << 1 << " != " << 2; // std::cout << foo; // // will print "1 != 2". // // Message is not intended to be inherited from. In particular, its // destructor is not virtual. // // Note that stringstream behaves differently in gcc and in MSVC. You // can stream a NULL char pointer to it in the former, but not in the // latter (it causes an access violation if you do). The Message // class hides this difference by treating a NULL char pointer as // "(null)". class GTEST_API_ Message { private: // The type of basic IO manipulators (endl, ends, and flush) for // narrow streams. typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&); public: // Constructs an empty Message. Message(); // Copy constructor. Message(const Message& msg) : ss_(new ::std::stringstream) { // NOLINT *ss_ << msg.GetString(); } // Constructs a Message from a C-string. explicit Message(const char* str) : ss_(new ::std::stringstream) { *ss_ << str; } #if GTEST_OS_SYMBIAN // Streams a value (either a pointer or not) to this object. template inline Message& operator <<(const T& value) { StreamHelper(typename internal::is_pointer::type(), value); return *this; } #else // Streams a non-pointer value to this object. template inline Message& operator <<(const T& val) { // Some libraries overload << for STL containers. These // overloads are defined in the global namespace instead of ::std. // // C++'s symbol lookup rule (i.e. Koenig lookup) says that these // overloads are visible in either the std namespace or the global // namespace, but not other namespaces, including the testing // namespace which Google Test's Message class is in. // // To allow STL containers (and other types that has a << operator // defined in the global namespace) to be used in Google Test // assertions, testing::Message must access the custom << operator // from the global namespace. With this using declaration, // overloads of << defined in the global namespace and those // visible via Koenig lookup are both exposed in this function. using ::operator <<; *ss_ << val; return *this; } // Streams a pointer value to this object. // // This function is an overload of the previous one. When you // stream a pointer to a Message, this definition will be used as it // is more specialized. (The C++ Standard, section // [temp.func.order].) If you stream a non-pointer, then the // previous definition will be used. // // The reason for this overload is that streaming a NULL pointer to // ostream is undefined behavior. Depending on the compiler, you // may get "0", "(nil)", "(null)", or an access violation. To // ensure consistent result across compilers, we always treat NULL // as "(null)". template inline Message& operator <<(T* const& pointer) { // NOLINT if (pointer == NULL) { *ss_ << "(null)"; } else { *ss_ << pointer; } return *this; } #endif // GTEST_OS_SYMBIAN // Since the basic IO manipulators are overloaded for both narrow // and wide streams, we have to provide this specialized definition // of operator <<, even though its body is the same as the // templatized version above. Without this definition, streaming // endl or other basic IO manipulators to Message will confuse the // compiler. Message& operator <<(BasicNarrowIoManip val) { *ss_ << val; return *this; } // Instead of 1/0, we want to see true/false for bool values. Message& operator <<(bool b) { return *this << (b ? "true" : "false"); } // These two overloads allow streaming a wide C string to a Message // using the UTF-8 encoding. Message& operator <<(const wchar_t* wide_c_str); Message& operator <<(wchar_t* wide_c_str); #if GTEST_HAS_STD_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& operator <<(const ::std::wstring& wstr); #endif // GTEST_HAS_STD_WSTRING #if GTEST_HAS_GLOBAL_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& operator <<(const ::wstring& wstr); #endif // GTEST_HAS_GLOBAL_WSTRING // Gets the text streamed to this object so far as an std::string. // Each '\0' character in the buffer is replaced with "\\0". // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. std::string GetString() const; private: #if GTEST_OS_SYMBIAN // These are needed as the Nokia Symbian Compiler cannot decide between // const T& and const T* in a function template. The Nokia compiler _can_ // decide between class template specializations for T and T*, so a // tr1::type_traits-like is_pointer works, and we can overload on that. template inline void StreamHelper(internal::true_type /*is_pointer*/, T* pointer) { if (pointer == NULL) { *ss_ << "(null)"; } else { *ss_ << pointer; } } template inline void StreamHelper(internal::false_type /*is_pointer*/, const T& value) { // See the comments in Message& operator <<(const T&) above for why // we need this using statement. using ::operator <<; *ss_ << value; } #endif // GTEST_OS_SYMBIAN // We'll hold the text streamed to this object here. const internal::scoped_ptr< ::std::stringstream> ss_; // We declare (but don't implement) this to prevent the compiler // from implementing the assignment operator. void operator=(const Message&); }; // Streams a Message to an ostream. inline std::ostream& operator <<(std::ostream& os, const Message& sb) { return os << sb.GetString(); } namespace internal { // Converts a streamable value to an std::string. A NULL pointer is // converted to "(null)". When the input value is a ::string, // ::std::string, ::wstring, or ::std::wstring object, each NUL // character in it is replaced with "\\0". template std::string StreamableToString(const T& streamable) { return (Message() << streamable).GetString(); } } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ // Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) // // The Google C++ Testing Framework (Google Test) // // This header file declares the String class and functions used internally by // Google Test. They are subject to change without notice. They should not used // by code external to Google Test. // // This header file is #included by . // It should not be #included by other files. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ #ifdef __BORLANDC__ // string.h is not guaranteed to provide strcpy on C++ Builder. # include #endif #include #include namespace testing { namespace internal { // String - an abstract class holding static string utilities. class GTEST_API_ String { public: // Static utility methods // Clones a 0-terminated C string, allocating memory using new. The // caller is responsible for deleting the return value using // delete[]. Returns the cloned string, or NULL if the input is // NULL. // // This is different from strdup() in string.h, which allocates // memory using malloc(). static const char* CloneCString(const char* c_str); #if GTEST_OS_WINDOWS_MOBILE // Windows CE does not have the 'ANSI' versions of Win32 APIs. To be // able to pass strings to Win32 APIs on CE we need to convert them // to 'Unicode', UTF-16. // Creates a UTF-16 wide string from the given ANSI string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the wide string, or NULL if the // input is NULL. // // The wide string is created using the ANSI codepage (CP_ACP) to // match the behaviour of the ANSI versions of Win32 calls and the // C runtime. static LPCWSTR AnsiToUtf16(const char* c_str); // Creates an ANSI string from the given wide string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the ANSI string, or NULL if the // input is NULL. // // The returned string is created using the ANSI codepage (CP_ACP) to // match the behaviour of the ANSI versions of Win32 calls and the // C runtime. static const char* Utf16ToAnsi(LPCWSTR utf16_str); #endif // Compares two C strings. Returns true iff they have the same content. // // Unlike strcmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. static bool CStringEquals(const char* lhs, const char* rhs); // Converts a wide C string to a String using the UTF-8 encoding. // NULL will be converted to "(null)". If an error occurred during // the conversion, "(failed to convert from wide string)" is // returned. static std::string ShowWideCString(const wchar_t* wide_c_str); // Compares two wide C strings. Returns true iff they have the same // content. // // Unlike wcscmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); // Compares two C strings, ignoring case. Returns true iff they // have the same content. // // Unlike strcasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL C string, // including the empty string. static bool CaseInsensitiveCStringEquals(const char* lhs, const char* rhs); // Compares two wide C strings, ignoring case. Returns true iff they // have the same content. // // Unlike wcscasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL wide C string, // including the empty string. // NB: The implementations on different platforms slightly differ. // On windows, this method uses _wcsicmp which compares according to LC_CTYPE // environment variable. On GNU platform this method uses wcscasecmp // which compares according to LC_CTYPE category of the current locale. // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the // current locale. static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); // Returns true iff the given string ends with the given suffix, ignoring // case. Any string is considered to end with an empty suffix. static bool EndsWithCaseInsensitive( const std::string& str, const std::string& suffix); // Formats an int value as "%02d". static std::string FormatIntWidth2(int value); // "%02d" for width == 2 // Formats an int value as "%X". static std::string FormatHexInt(int value); // Formats a byte as "%02X". static std::string FormatByte(unsigned char value); private: String(); // Not meant to be instantiated. }; // class String // Gets the content of the stringstream's buffer as an std::string. Each '\0' // character in the buffer is replaced with "\\0". GTEST_API_ std::string StringStreamToString(::std::stringstream* stream); } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ // Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: keith.ray@gmail.com (Keith Ray) // // Google Test filepath utilities // // This header file declares classes and functions used internally by // Google Test. They are subject to change without notice. // // This file is #included in . // Do not include this header file separately! #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ namespace testing { namespace internal { // FilePath - a class for file and directory pathname manipulation which // handles platform-specific conventions (like the pathname separator). // Used for helper functions for naming files in a directory for xml output. // Except for Set methods, all methods are const or static, which provides an // "immutable value object" -- useful for peace of mind. // A FilePath with a value ending in a path separator ("like/this/") represents // a directory, otherwise it is assumed to represent a file. In either case, // it may or may not represent an actual file or directory in the file system. // Names are NOT checked for syntax correctness -- no checking for illegal // characters, malformed paths, etc. class GTEST_API_ FilePath { public: FilePath() : pathname_("") { } FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { } explicit FilePath(const std::string& pathname) : pathname_(pathname) { Normalize(); } FilePath& operator=(const FilePath& rhs) { Set(rhs); return *this; } void Set(const FilePath& rhs) { pathname_ = rhs.pathname_; } const std::string& string() const { return pathname_; } const char* c_str() const { return pathname_.c_str(); } // Returns the current working directory, or "" if unsuccessful. static FilePath GetCurrentDir(); // Given directory = "dir", base_name = "test", number = 0, // extension = "xml", returns "dir/test.xml". If number is greater // than zero (e.g., 12), returns "dir/test_12.xml". // On Windows platform, uses \ as the separator rather than /. static FilePath MakeFileName(const FilePath& directory, const FilePath& base_name, int number, const char* extension); // Given directory = "dir", relative_path = "test.xml", // returns "dir/test.xml". // On Windows, uses \ as the separator rather than /. static FilePath ConcatPaths(const FilePath& directory, const FilePath& relative_path); // Returns a pathname for a file that does not currently exist. The pathname // will be directory/base_name.extension or // directory/base_name_.extension if directory/base_name.extension // already exists. The number will be incremented until a pathname is found // that does not already exist. // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. // There could be a race condition if two or more processes are calling this // function at the same time -- they could both pick the same filename. static FilePath GenerateUniqueFileName(const FilePath& directory, const FilePath& base_name, const char* extension); // Returns true iff the path is "". bool IsEmpty() const { return pathname_.empty(); } // If input name has a trailing separator character, removes it and returns // the name, otherwise return the name string unmodified. // On Windows platform, uses \ as the separator, other platforms use /. FilePath RemoveTrailingPathSeparator() const; // Returns a copy of the FilePath with the directory part removed. // Example: FilePath("path/to/file").RemoveDirectoryName() returns // FilePath("file"). If there is no directory part ("just_a_file"), it returns // the FilePath unmodified. If there is no file part ("just_a_dir/") it // returns an empty FilePath (""). // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath RemoveDirectoryName() const; // RemoveFileName returns the directory path with the filename removed. // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". // If the FilePath is "a_file" or "/a_file", RemoveFileName returns // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does // not have a file, like "just/a/dir/", it returns the FilePath unmodified. // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath RemoveFileName() const; // Returns a copy of the FilePath with the case-insensitive extension removed. // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns // FilePath("dir/file"). If a case-insensitive extension is not // found, returns a copy of the original FilePath. FilePath RemoveExtension(const char* extension) const; // Creates directories so that path exists. Returns true if successful or if // the directories already exist; returns false if unable to create // directories for any reason. Will also return false if the FilePath does // not represent a directory (that is, it doesn't end with a path separator). bool CreateDirectoriesRecursively() const; // Create the directory so that path exists. Returns true if successful or // if the directory already exists; returns false if unable to create the // directory for any reason, including if the parent directory does not // exist. Not named "CreateDirectory" because that's a macro on Windows. bool CreateFolder() const; // Returns true if FilePath describes something in the file-system, // either a file, directory, or whatever, and that something exists. bool FileOrDirectoryExists() const; // Returns true if pathname describes a directory in the file-system // that exists. bool DirectoryExists() const; // Returns true if FilePath ends with a path separator, which indicates that // it is intended to represent a directory. Returns false otherwise. // This does NOT check that a directory (or file) actually exists. bool IsDirectory() const; // Returns true if pathname describes a root directory. (Windows has one // root directory per disk drive.) bool IsRootDirectory() const; // Returns true if pathname describes an absolute path. bool IsAbsolutePath() const; private: // Replaces multiple consecutive separators with a single separator. // For example, "bar///foo" becomes "bar/foo". Does not eliminate other // redundancies that might be in a pathname involving "." or "..". // // A pathname with multiple consecutive separators may occur either through // user error or as a result of some scripts or APIs that generate a pathname // with a trailing separator. On other platforms the same API or script // may NOT generate a pathname with a trailing "/". Then elsewhere that // pathname may have another "/" and pathname components added to it, // without checking for the separator already being there. // The script language and operating system may allow paths like "foo//bar" // but some of the functions in FilePath will not handle that correctly. In // particular, RemoveTrailingPathSeparator() only removes one separator, and // it is called in CreateDirectoriesRecursively() assuming that it will change // a pathname from directory syntax (trailing separator) to filename syntax. // // On Windows this method also replaces the alternate path separator '/' with // the primary path separator '\\', so that for example "bar\\/\\foo" becomes // "bar\\foo". void Normalize(); // Returns a pointer to the last occurence of a valid path separator in // the FilePath. On Windows, for example, both '/' and '\' are valid path // separators. Returns NULL if no path separator was found. const char* FindLastPathSeparator() const; std::string pathname_; }; // class FilePath } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ // This file was GENERATED by command: // pump.py gtest-type-util.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Type utilities needed for implementing typed and type-parameterized // tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // // Currently we support at most 50 types in a list, and at most 50 // type-parameterized tests in one type-parameterized test case. // Please contact googletestframework@googlegroups.com if you need // more. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ // #ifdef __GNUC__ is too general here. It is possible to use gcc without using // libstdc++ (which is where cxxabi.h comes from). # if GTEST_HAS_CXXABI_H_ # include # elif defined(__HP_aCC) # include # endif // GTEST_HASH_CXXABI_H_ namespace testing { namespace internal { // GetTypeName() returns a human-readable name of type T. // NB: This function is also used in Google Mock, so don't move it inside of // the typed-test-only section below. template std::string GetTypeName() { # if GTEST_HAS_RTTI const char* const name = typeid(T).name(); # if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC) int status = 0; // gcc's implementation of typeid(T).name() mangles the type name, // so we have to demangle it. # if GTEST_HAS_CXXABI_H_ using abi::__cxa_demangle; # endif // GTEST_HAS_CXXABI_H_ char* const readable_name = __cxa_demangle(name, 0, 0, &status); const std::string name_str(status == 0 ? readable_name : name); free(readable_name); return name_str; # else return name; # endif // GTEST_HAS_CXXABI_H_ || __HP_aCC # else return ""; # endif // GTEST_HAS_RTTI } #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P // AssertyTypeEq::type is defined iff T1 and T2 are the same // type. This can be used as a compile-time assertion to ensure that // two types are equal. template struct AssertTypeEq; template struct AssertTypeEq { typedef bool type; }; // A unique type used as the default value for the arguments of class // template Types. This allows us to simulate variadic templates // (e.g. Types, Type, and etc), which C++ doesn't // support directly. struct None {}; // The following family of struct and struct templates are used to // represent type lists. In particular, TypesN // represents a type list with N types (T1, T2, ..., and TN) in it. // Except for Types0, every struct in the family has two member types: // Head for the first type in the list, and Tail for the rest of the // list. // The empty type list. struct Types0 {}; // Type lists of length 1, 2, 3, and so on. template struct Types1 { typedef T1 Head; typedef Types0 Tail; }; template struct Types2 { typedef T1 Head; typedef Types1 Tail; }; template struct Types3 { typedef T1 Head; typedef Types2 Tail; }; template struct Types4 { typedef T1 Head; typedef Types3 Tail; }; template struct Types5 { typedef T1 Head; typedef Types4 Tail; }; template struct Types6 { typedef T1 Head; typedef Types5 Tail; }; template struct Types7 { typedef T1 Head; typedef Types6 Tail; }; template struct Types8 { typedef T1 Head; typedef Types7 Tail; }; template struct Types9 { typedef T1 Head; typedef Types8 Tail; }; template struct Types10 { typedef T1 Head; typedef Types9 Tail; }; template struct Types11 { typedef T1 Head; typedef Types10 Tail; }; template struct Types12 { typedef T1 Head; typedef Types11 Tail; }; template struct Types13 { typedef T1 Head; typedef Types12 Tail; }; template struct Types14 { typedef T1 Head; typedef Types13 Tail; }; template struct Types15 { typedef T1 Head; typedef Types14 Tail; }; template struct Types16 { typedef T1 Head; typedef Types15 Tail; }; template struct Types17 { typedef T1 Head; typedef Types16 Tail; }; template struct Types18 { typedef T1 Head; typedef Types17 Tail; }; template struct Types19 { typedef T1 Head; typedef Types18 Tail; }; template struct Types20 { typedef T1 Head; typedef Types19 Tail; }; template struct Types21 { typedef T1 Head; typedef Types20 Tail; }; template struct Types22 { typedef T1 Head; typedef Types21 Tail; }; template struct Types23 { typedef T1 Head; typedef Types22 Tail; }; template struct Types24 { typedef T1 Head; typedef Types23 Tail; }; template struct Types25 { typedef T1 Head; typedef Types24 Tail; }; template struct Types26 { typedef T1 Head; typedef Types25 Tail; }; template struct Types27 { typedef T1 Head; typedef Types26 Tail; }; template struct Types28 { typedef T1 Head; typedef Types27 Tail; }; template struct Types29 { typedef T1 Head; typedef Types28 Tail; }; template struct Types30 { typedef T1 Head; typedef Types29 Tail; }; template struct Types31 { typedef T1 Head; typedef Types30 Tail; }; template struct Types32 { typedef T1 Head; typedef Types31 Tail; }; template struct Types33 { typedef T1 Head; typedef Types32 Tail; }; template struct Types34 { typedef T1 Head; typedef Types33 Tail; }; template struct Types35 { typedef T1 Head; typedef Types34 Tail; }; template struct Types36 { typedef T1 Head; typedef Types35 Tail; }; template struct Types37 { typedef T1 Head; typedef Types36 Tail; }; template struct Types38 { typedef T1 Head; typedef Types37 Tail; }; template struct Types39 { typedef T1 Head; typedef Types38 Tail; }; template struct Types40 { typedef T1 Head; typedef Types39 Tail; }; template struct Types41 { typedef T1 Head; typedef Types40 Tail; }; template struct Types42 { typedef T1 Head; typedef Types41 Tail; }; template struct Types43 { typedef T1 Head; typedef Types42 Tail; }; template struct Types44 { typedef T1 Head; typedef Types43 Tail; }; template struct Types45 { typedef T1 Head; typedef Types44 Tail; }; template struct Types46 { typedef T1 Head; typedef Types45 Tail; }; template struct Types47 { typedef T1 Head; typedef Types46 Tail; }; template struct Types48 { typedef T1 Head; typedef Types47 Tail; }; template struct Types49 { typedef T1 Head; typedef Types48 Tail; }; template struct Types50 { typedef T1 Head; typedef Types49 Tail; }; } // namespace internal // We don't want to require the users to write TypesN<...> directly, // as that would require them to count the length. Types<...> is much // easier to write, but generates horrible messages when there is a // compiler error, as gcc insists on printing out each template // argument, even if it has the default value (this means Types // will appear as Types in the compiler // errors). // // Our solution is to combine the best part of the two approaches: a // user would write Types, and Google Test will translate // that to TypesN internally to make error messages // readable. The translation is done by the 'type' member of the // Types template. template struct Types { typedef internal::Types50 type; }; template <> struct Types { typedef internal::Types0 type; }; template struct Types { typedef internal::Types1 type; }; template struct Types { typedef internal::Types2 type; }; template struct Types { typedef internal::Types3 type; }; template struct Types { typedef internal::Types4 type; }; template struct Types { typedef internal::Types5 type; }; template struct Types { typedef internal::Types6 type; }; template struct Types { typedef internal::Types7 type; }; template struct Types { typedef internal::Types8 type; }; template struct Types { typedef internal::Types9 type; }; template struct Types { typedef internal::Types10 type; }; template struct Types { typedef internal::Types11 type; }; template struct Types { typedef internal::Types12 type; }; template struct Types { typedef internal::Types13 type; }; template struct Types { typedef internal::Types14 type; }; template struct Types { typedef internal::Types15 type; }; template struct Types { typedef internal::Types16 type; }; template struct Types { typedef internal::Types17 type; }; template struct Types { typedef internal::Types18 type; }; template struct Types { typedef internal::Types19 type; }; template struct Types { typedef internal::Types20 type; }; template struct Types { typedef internal::Types21 type; }; template struct Types { typedef internal::Types22 type; }; template struct Types { typedef internal::Types23 type; }; template struct Types { typedef internal::Types24 type; }; template struct Types { typedef internal::Types25 type; }; template struct Types { typedef internal::Types26 type; }; template struct Types { typedef internal::Types27 type; }; template struct Types { typedef internal::Types28 type; }; template struct Types { typedef internal::Types29 type; }; template struct Types { typedef internal::Types30 type; }; template struct Types { typedef internal::Types31 type; }; template struct Types { typedef internal::Types32 type; }; template struct Types { typedef internal::Types33 type; }; template struct Types { typedef internal::Types34 type; }; template struct Types { typedef internal::Types35 type; }; template struct Types { typedef internal::Types36 type; }; template struct Types { typedef internal::Types37 type; }; template struct Types { typedef internal::Types38 type; }; template struct Types { typedef internal::Types39 type; }; template struct Types { typedef internal::Types40 type; }; template struct Types { typedef internal::Types41 type; }; template struct Types { typedef internal::Types42 type; }; template struct Types { typedef internal::Types43 type; }; template struct Types { typedef internal::Types44 type; }; template struct Types { typedef internal::Types45 type; }; template struct Types { typedef internal::Types46 type; }; template struct Types { typedef internal::Types47 type; }; template struct Types { typedef internal::Types48 type; }; template struct Types { typedef internal::Types49 type; }; namespace internal { # define GTEST_TEMPLATE_ template class // The template "selector" struct TemplateSel is used to // represent Tmpl, which must be a class template with one type // parameter, as a type. TemplateSel::Bind::type is defined // as the type Tmpl. This allows us to actually instantiate the // template "selected" by TemplateSel. // // This trick is necessary for simulating typedef for class templates, // which C++ doesn't support directly. template struct TemplateSel { template struct Bind { typedef Tmpl type; }; }; # define GTEST_BIND_(TmplSel, T) \ TmplSel::template Bind::type // A unique struct template used as the default value for the // arguments of class template Templates. This allows us to simulate // variadic templates (e.g. Templates, Templates, // and etc), which C++ doesn't support directly. template struct NoneT {}; // The following family of struct and struct templates are used to // represent template lists. In particular, TemplatesN represents a list of N templates (T1, T2, ..., and TN). Except // for Templates0, every struct in the family has two member types: // Head for the selector of the first template in the list, and Tail // for the rest of the list. // The empty template list. struct Templates0 {}; // Template lists of length 1, 2, 3, and so on. template struct Templates1 { typedef TemplateSel Head; typedef Templates0 Tail; }; template struct Templates2 { typedef TemplateSel Head; typedef Templates1 Tail; }; template struct Templates3 { typedef TemplateSel Head; typedef Templates2 Tail; }; template struct Templates4 { typedef TemplateSel Head; typedef Templates3 Tail; }; template struct Templates5 { typedef TemplateSel Head; typedef Templates4 Tail; }; template struct Templates6 { typedef TemplateSel Head; typedef Templates5 Tail; }; template struct Templates7 { typedef TemplateSel Head; typedef Templates6 Tail; }; template struct Templates8 { typedef TemplateSel Head; typedef Templates7 Tail; }; template struct Templates9 { typedef TemplateSel Head; typedef Templates8 Tail; }; template struct Templates10 { typedef TemplateSel Head; typedef Templates9 Tail; }; template struct Templates11 { typedef TemplateSel Head; typedef Templates10 Tail; }; template struct Templates12 { typedef TemplateSel Head; typedef Templates11 Tail; }; template struct Templates13 { typedef TemplateSel Head; typedef Templates12 Tail; }; template struct Templates14 { typedef TemplateSel Head; typedef Templates13 Tail; }; template struct Templates15 { typedef TemplateSel Head; typedef Templates14 Tail; }; template struct Templates16 { typedef TemplateSel Head; typedef Templates15 Tail; }; template struct Templates17 { typedef TemplateSel Head; typedef Templates16 Tail; }; template struct Templates18 { typedef TemplateSel Head; typedef Templates17 Tail; }; template struct Templates19 { typedef TemplateSel Head; typedef Templates18 Tail; }; template struct Templates20 { typedef TemplateSel Head; typedef Templates19 Tail; }; template struct Templates21 { typedef TemplateSel Head; typedef Templates20 Tail; }; template struct Templates22 { typedef TemplateSel Head; typedef Templates21 Tail; }; template struct Templates23 { typedef TemplateSel Head; typedef Templates22 Tail; }; template struct Templates24 { typedef TemplateSel Head; typedef Templates23 Tail; }; template struct Templates25 { typedef TemplateSel Head; typedef Templates24 Tail; }; template struct Templates26 { typedef TemplateSel Head; typedef Templates25 Tail; }; template struct Templates27 { typedef TemplateSel Head; typedef Templates26 Tail; }; template struct Templates28 { typedef TemplateSel Head; typedef Templates27 Tail; }; template struct Templates29 { typedef TemplateSel Head; typedef Templates28 Tail; }; template struct Templates30 { typedef TemplateSel Head; typedef Templates29 Tail; }; template struct Templates31 { typedef TemplateSel Head; typedef Templates30 Tail; }; template struct Templates32 { typedef TemplateSel Head; typedef Templates31 Tail; }; template struct Templates33 { typedef TemplateSel Head; typedef Templates32 Tail; }; template struct Templates34 { typedef TemplateSel Head; typedef Templates33 Tail; }; template struct Templates35 { typedef TemplateSel Head; typedef Templates34 Tail; }; template struct Templates36 { typedef TemplateSel Head; typedef Templates35 Tail; }; template struct Templates37 { typedef TemplateSel Head; typedef Templates36 Tail; }; template struct Templates38 { typedef TemplateSel Head; typedef Templates37 Tail; }; template struct Templates39 { typedef TemplateSel Head; typedef Templates38 Tail; }; template struct Templates40 { typedef TemplateSel Head; typedef Templates39 Tail; }; template struct Templates41 { typedef TemplateSel Head; typedef Templates40 Tail; }; template struct Templates42 { typedef TemplateSel Head; typedef Templates41 Tail; }; template struct Templates43 { typedef TemplateSel Head; typedef Templates42 Tail; }; template struct Templates44 { typedef TemplateSel Head; typedef Templates43 Tail; }; template struct Templates45 { typedef TemplateSel Head; typedef Templates44 Tail; }; template struct Templates46 { typedef TemplateSel Head; typedef Templates45 Tail; }; template struct Templates47 { typedef TemplateSel Head; typedef Templates46 Tail; }; template struct Templates48 { typedef TemplateSel Head; typedef Templates47 Tail; }; template struct Templates49 { typedef TemplateSel Head; typedef Templates48 Tail; }; template struct Templates50 { typedef TemplateSel Head; typedef Templates49 Tail; }; // We don't want to require the users to write TemplatesN<...> directly, // as that would require them to count the length. Templates<...> is much // easier to write, but generates horrible messages when there is a // compiler error, as gcc insists on printing out each template // argument, even if it has the default value (this means Templates // will appear as Templates in the compiler // errors). // // Our solution is to combine the best part of the two approaches: a // user would write Templates, and Google Test will translate // that to TemplatesN internally to make error messages // readable. The translation is done by the 'type' member of the // Templates template. template struct Templates { typedef Templates50 type; }; template <> struct Templates { typedef Templates0 type; }; template struct Templates { typedef Templates1 type; }; template struct Templates { typedef Templates2 type; }; template struct Templates { typedef Templates3 type; }; template struct Templates { typedef Templates4 type; }; template struct Templates { typedef Templates5 type; }; template struct Templates { typedef Templates6 type; }; template struct Templates { typedef Templates7 type; }; template struct Templates { typedef Templates8 type; }; template struct Templates { typedef Templates9 type; }; template struct Templates { typedef Templates10 type; }; template struct Templates { typedef Templates11 type; }; template struct Templates { typedef Templates12 type; }; template struct Templates { typedef Templates13 type; }; template struct Templates { typedef Templates14 type; }; template struct Templates { typedef Templates15 type; }; template struct Templates { typedef Templates16 type; }; template struct Templates { typedef Templates17 type; }; template struct Templates { typedef Templates18 type; }; template struct Templates { typedef Templates19 type; }; template struct Templates { typedef Templates20 type; }; template struct Templates { typedef Templates21 type; }; template struct Templates { typedef Templates22 type; }; template struct Templates { typedef Templates23 type; }; template struct Templates { typedef Templates24 type; }; template struct Templates { typedef Templates25 type; }; template struct Templates { typedef Templates26 type; }; template struct Templates { typedef Templates27 type; }; template struct Templates { typedef Templates28 type; }; template struct Templates { typedef Templates29 type; }; template struct Templates { typedef Templates30 type; }; template struct Templates { typedef Templates31 type; }; template struct Templates { typedef Templates32 type; }; template struct Templates { typedef Templates33 type; }; template struct Templates { typedef Templates34 type; }; template struct Templates { typedef Templates35 type; }; template struct Templates { typedef Templates36 type; }; template struct Templates { typedef Templates37 type; }; template struct Templates { typedef Templates38 type; }; template struct Templates { typedef Templates39 type; }; template struct Templates { typedef Templates40 type; }; template struct Templates { typedef Templates41 type; }; template struct Templates { typedef Templates42 type; }; template struct Templates { typedef Templates43 type; }; template struct Templates { typedef Templates44 type; }; template struct Templates { typedef Templates45 type; }; template struct Templates { typedef Templates46 type; }; template struct Templates { typedef Templates47 type; }; template struct Templates { typedef Templates48 type; }; template struct Templates { typedef Templates49 type; }; // The TypeList template makes it possible to use either a single type // or a Types<...> list in TYPED_TEST_CASE() and // INSTANTIATE_TYPED_TEST_CASE_P(). template struct TypeList { typedef Types1 type; }; template struct TypeList > { typedef typename Types::type type; }; #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ // Due to C++ preprocessor weirdness, we need double indirection to // concatenate two tokens when one of them is __LINE__. Writing // // foo ## __LINE__ // // will result in the token foo__LINE__, instead of foo followed by // the current line number. For more details, see // http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6 #define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) #define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar class ProtocolMessage; namespace proto2 { class Message; } namespace testing { // Forward declarations. class AssertionResult; // Result of an assertion. class Message; // Represents a failure message. class Test; // Represents a test. class TestInfo; // Information about a test. class TestPartResult; // Result of a test part. class UnitTest; // A collection of test cases. template ::std::string PrintToString(const T& value); namespace internal { struct TraceInfo; // Information about a trace point. class ScopedTrace; // Implements scoped trace. class TestInfoImpl; // Opaque implementation of TestInfo class UnitTestImpl; // Opaque implementation of UnitTest // How many times InitGoogleTest() has been called. GTEST_API_ extern int g_init_gtest_count; // The text used in failure messages to indicate the start of the // stack trace. GTEST_API_ extern const char kStackTraceMarker[]; // Two overloaded helpers for checking at compile time whether an // expression is a null pointer literal (i.e. NULL or any 0-valued // compile-time integral constant). Their return values have // different sizes, so we can use sizeof() to test which version is // picked by the compiler. These helpers have no implementations, as // we only need their signatures. // // Given IsNullLiteralHelper(x), the compiler will pick the first // version if x can be implicitly converted to Secret*, and pick the // second version otherwise. Since Secret is a secret and incomplete // type, the only expression a user can write that has type Secret* is // a null pointer literal. Therefore, we know that x is a null // pointer literal if and only if the first version is picked by the // compiler. char IsNullLiteralHelper(Secret* p); char (&IsNullLiteralHelper(...))[2]; // NOLINT // A compile-time bool constant that is true if and only if x is a // null pointer literal (i.e. NULL or any 0-valued compile-time // integral constant). #ifdef GTEST_ELLIPSIS_NEEDS_POD_ // We lose support for NULL detection where the compiler doesn't like // passing non-POD classes through ellipsis (...). # define GTEST_IS_NULL_LITERAL_(x) false #else # define GTEST_IS_NULL_LITERAL_(x) \ (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1) #endif // GTEST_ELLIPSIS_NEEDS_POD_ // Appends the user-supplied message to the Google-Test-generated message. GTEST_API_ std::string AppendUserMessage( const std::string& gtest_msg, const Message& user_msg); #if GTEST_HAS_EXCEPTIONS // This exception is thrown by (and only by) a failed Google Test // assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions // are enabled). We derive it from std::runtime_error, which is for // errors presumably detectable only at run time. Since // std::runtime_error inherits from std::exception, many testing // frameworks know how to extract and print the message inside it. class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error { public: explicit GoogleTestFailureException(const TestPartResult& failure); }; #endif // GTEST_HAS_EXCEPTIONS // A helper class for creating scoped traces in user programs. class GTEST_API_ ScopedTrace { public: // The c'tor pushes the given source file location and message onto // a trace stack maintained by Google Test. ScopedTrace(const char* file, int line, const Message& message); // The d'tor pops the info pushed by the c'tor. // // Note that the d'tor is not virtual in order to be efficient. // Don't inherit from ScopedTrace! ~ScopedTrace(); private: GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace); } GTEST_ATTRIBUTE_UNUSED_; // A ScopedTrace object does its job in its // c'tor and d'tor. Therefore it doesn't // need to be used otherwise. // Constructs and returns the message for an equality assertion // (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. // // The first four parameters are the expressions used in the assertion // and their values, as strings. For example, for ASSERT_EQ(foo, bar) // where foo is 5 and bar is 6, we have: // // expected_expression: "foo" // actual_expression: "bar" // expected_value: "5" // actual_value: "6" // // The ignoring_case parameter is true iff the assertion is a // *_STRCASEEQ*. When it's true, the string " (ignoring case)" will // be inserted into the message. GTEST_API_ AssertionResult EqFailure(const char* expected_expression, const char* actual_expression, const std::string& expected_value, const std::string& actual_value, bool ignoring_case); // Constructs a failure message for Boolean assertions such as EXPECT_TRUE. GTEST_API_ std::string GetBoolAssertionFailureMessage( const AssertionResult& assertion_result, const char* expression_text, const char* actual_predicate_value, const char* expected_predicate_value); // This template class represents an IEEE floating-point number // (either single-precision or double-precision, depending on the // template parameters). // // The purpose of this class is to do more sophisticated number // comparison. (Due to round-off error, etc, it's very unlikely that // two floating-points will be equal exactly. Hence a naive // comparison by the == operation often doesn't work.) // // Format of IEEE floating-point: // // The most-significant bit being the leftmost, an IEEE // floating-point looks like // // sign_bit exponent_bits fraction_bits // // Here, sign_bit is a single bit that designates the sign of the // number. // // For float, there are 8 exponent bits and 23 fraction bits. // // For double, there are 11 exponent bits and 52 fraction bits. // // More details can be found at // http://en.wikipedia.org/wiki/IEEE_floating-point_standard. // // Template parameter: // // RawType: the raw floating-point type (either float or double) template class FloatingPoint { public: // Defines the unsigned integer type that has the same size as the // floating point number. typedef typename TypeWithSize::UInt Bits; // Constants. // # of bits in a number. static const size_t kBitCount = 8*sizeof(RawType); // # of fraction bits in a number. static const size_t kFractionBitCount = std::numeric_limits::digits - 1; // # of exponent bits in a number. static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount; // The mask for the sign bit. static const Bits kSignBitMask = static_cast(1) << (kBitCount - 1); // The mask for the fraction bits. static const Bits kFractionBitMask = ~static_cast(0) >> (kExponentBitCount + 1); // The mask for the exponent bits. static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask); // How many ULP's (Units in the Last Place) we want to tolerate when // comparing two numbers. The larger the value, the more error we // allow. A 0 value means that two numbers must be exactly the same // to be considered equal. // // The maximum error of a single floating-point operation is 0.5 // units in the last place. On Intel CPU's, all floating-point // calculations are done with 80-bit precision, while double has 64 // bits. Therefore, 4 should be enough for ordinary use. // // See the following article for more details on ULP: // http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ static const size_t kMaxUlps = 4; // Constructs a FloatingPoint from a raw floating-point number. // // On an Intel CPU, passing a non-normalized NAN (Not a Number) // around may change its bits, although the new value is guaranteed // to be also a NAN. Therefore, don't expect this constructor to // preserve the bits in x when x is a NAN. explicit FloatingPoint(const RawType& x) { u_.value_ = x; } // Static methods // Reinterprets a bit pattern as a floating-point number. // // This function is needed to test the AlmostEquals() method. static RawType ReinterpretBits(const Bits bits) { FloatingPoint fp(0); fp.u_.bits_ = bits; return fp.u_.value_; } // Returns the floating-point number that represent positive infinity. static RawType Infinity() { return ReinterpretBits(kExponentBitMask); } // Returns the maximum representable finite floating-point number. static RawType Max(); // Non-static methods // Returns the bits that represents this number. const Bits &bits() const { return u_.bits_; } // Returns the exponent bits of this number. Bits exponent_bits() const { return kExponentBitMask & u_.bits_; } // Returns the fraction bits of this number. Bits fraction_bits() const { return kFractionBitMask & u_.bits_; } // Returns the sign bit of this number. Bits sign_bit() const { return kSignBitMask & u_.bits_; } // Returns true iff this is NAN (not a number). bool is_nan() const { // It's a NAN if the exponent bits are all ones and the fraction // bits are not entirely zeros. return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0); } // Returns true iff this number is at most kMaxUlps ULP's away from // rhs. In particular, this function: // // - returns false if either number is (or both are) NAN. // - treats really large numbers as almost equal to infinity. // - thinks +0.0 and -0.0 are 0 DLP's apart. bool AlmostEquals(const FloatingPoint& rhs) const { // The IEEE standard says that any comparison operation involving // a NAN must return false. if (is_nan() || rhs.is_nan()) return false; return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_) <= kMaxUlps; } private: // The data type used to store the actual floating-point number. union FloatingPointUnion { RawType value_; // The raw floating-point number. Bits bits_; // The bits that represent the number. }; // Converts an integer from the sign-and-magnitude representation to // the biased representation. More precisely, let N be 2 to the // power of (kBitCount - 1), an integer x is represented by the // unsigned number x + N. // // For instance, // // -N + 1 (the most negative number representable using // sign-and-magnitude) is represented by 1; // 0 is represented by N; and // N - 1 (the biggest number representable using // sign-and-magnitude) is represented by 2N - 1. // // Read http://en.wikipedia.org/wiki/Signed_number_representations // for more details on signed number representations. static Bits SignAndMagnitudeToBiased(const Bits &sam) { if (kSignBitMask & sam) { // sam represents a negative number. return ~sam + 1; } else { // sam represents a positive number. return kSignBitMask | sam; } } // Given two numbers in the sign-and-magnitude representation, // returns the distance between them as an unsigned number. static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, const Bits &sam2) { const Bits biased1 = SignAndMagnitudeToBiased(sam1); const Bits biased2 = SignAndMagnitudeToBiased(sam2); return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1); } FloatingPointUnion u_; }; // We cannot use std::numeric_limits::max() as it clashes with the max() // macro defined by . template <> inline float FloatingPoint::Max() { return FLT_MAX; } template <> inline double FloatingPoint::Max() { return DBL_MAX; } // Typedefs the instances of the FloatingPoint template class that we // care to use. typedef FloatingPoint Float; typedef FloatingPoint Double; // In order to catch the mistake of putting tests that use different // test fixture classes in the same test case, we need to assign // unique IDs to fixture classes and compare them. The TypeId type is // used to hold such IDs. The user should treat TypeId as an opaque // type: the only operation allowed on TypeId values is to compare // them for equality using the == operator. typedef const void* TypeId; template class TypeIdHelper { public: // dummy_ must not have a const type. Otherwise an overly eager // compiler (e.g. MSVC 7.1 & 8.0) may try to merge // TypeIdHelper::dummy_ for different Ts as an "optimization". static bool dummy_; }; template bool TypeIdHelper::dummy_ = false; // GetTypeId() returns the ID of type T. Different values will be // returned for different types. Calling the function twice with the // same type argument is guaranteed to return the same ID. template TypeId GetTypeId() { // The compiler is required to allocate a different // TypeIdHelper::dummy_ variable for each T used to instantiate // the template. Therefore, the address of dummy_ is guaranteed to // be unique. return &(TypeIdHelper::dummy_); } // Returns the type ID of ::testing::Test. Always call this instead // of GetTypeId< ::testing::Test>() to get the type ID of // ::testing::Test, as the latter may give the wrong result due to a // suspected linker bug when compiling Google Test as a Mac OS X // framework. GTEST_API_ TypeId GetTestTypeId(); // Defines the abstract factory interface that creates instances // of a Test object. class TestFactoryBase { public: virtual ~TestFactoryBase() {} // Creates a test instance to run. The instance is both created and destroyed // within TestInfoImpl::Run() virtual Test* CreateTest() = 0; protected: TestFactoryBase() {} private: GTEST_DISALLOW_COPY_AND_ASSIGN_(TestFactoryBase); }; // This class provides implementation of TeastFactoryBase interface. // It is used in TEST and TEST_F macros. template class TestFactoryImpl : public TestFactoryBase { public: virtual Test* CreateTest() { return new TestClass; } }; #if GTEST_OS_WINDOWS // Predicate-formatters for implementing the HRESULT checking macros // {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED} // We pass a long instead of HRESULT to avoid causing an // include dependency for the HRESULT type. GTEST_API_ AssertionResult IsHRESULTSuccess(const char* expr, long hr); // NOLINT GTEST_API_ AssertionResult IsHRESULTFailure(const char* expr, long hr); // NOLINT #endif // GTEST_OS_WINDOWS // Types of SetUpTestCase() and TearDownTestCase() functions. typedef void (*SetUpTestCaseFunc)(); typedef void (*TearDownTestCaseFunc)(); // Creates a new TestInfo object and registers it with Google Test; // returns the created object. // // Arguments: // // test_case_name: name of the test case // name: name of the test // type_param the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. // value_param text representation of the test's value parameter, // or NULL if this is not a type-parameterized test. // fixture_class_id: ID of the test fixture class // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case // factory: pointer to the factory that creates a test object. // The newly created TestInfo instance will assume // ownership of the factory object. GTEST_API_ TestInfo* MakeAndRegisterTestInfo( const char* test_case_name, const char* name, const char* type_param, const char* value_param, TypeId fixture_class_id, SetUpTestCaseFunc set_up_tc, TearDownTestCaseFunc tear_down_tc, TestFactoryBase* factory); // If *pstr starts with the given prefix, modifies *pstr to be right // past the prefix and returns true; otherwise leaves *pstr unchanged // and returns false. None of pstr, *pstr, and prefix can be NULL. GTEST_API_ bool SkipPrefix(const char* prefix, const char** pstr); #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P // State of the definition of a type-parameterized test case. class GTEST_API_ TypedTestCasePState { public: TypedTestCasePState() : registered_(false) {} // Adds the given test name to defined_test_names_ and return true // if the test case hasn't been registered; otherwise aborts the // program. bool AddTestName(const char* file, int line, const char* case_name, const char* test_name) { if (registered_) { fprintf(stderr, "%s Test %s must be defined before " "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n", FormatFileLocation(file, line).c_str(), test_name, case_name); fflush(stderr); posix::Abort(); } defined_test_names_.insert(test_name); return true; } // Verifies that registered_tests match the test names in // defined_test_names_; returns registered_tests if successful, or // aborts the program otherwise. const char* VerifyRegisteredTestNames( const char* file, int line, const char* registered_tests); private: bool registered_; ::std::set defined_test_names_; }; // Skips to the first non-space char after the first comma in 'str'; // returns NULL if no comma is found in 'str'. inline const char* SkipComma(const char* str) { const char* comma = strchr(str, ','); if (comma == NULL) { return NULL; } while (IsSpace(*(++comma))) {} return comma; } // Returns the prefix of 'str' before the first comma in it; returns // the entire string if it contains no comma. inline std::string GetPrefixUntilComma(const char* str) { const char* comma = strchr(str, ','); return comma == NULL ? str : std::string(str, comma); } // TypeParameterizedTest::Register() // registers a list of type-parameterized tests with Google Test. The // return value is insignificant - we just need to return something // such that we can call this function in a namespace scope. // // Implementation note: The GTEST_TEMPLATE_ macro declares a template // template parameter. It's defined in gtest-type-util.h. template class TypeParameterizedTest { public: // 'index' is the index of the test in the type list 'Types' // specified in INSTANTIATE_TYPED_TEST_CASE_P(Prefix, TestCase, // Types). Valid values for 'index' are [0, N - 1] where N is the // length of Types. static bool Register(const char* prefix, const char* case_name, const char* test_names, int index) { typedef typename Types::Head Type; typedef Fixture FixtureClass; typedef typename GTEST_BIND_(TestSel, Type) TestClass; // First, registers the first type-parameterized test in the type // list. MakeAndRegisterTestInfo( (std::string(prefix) + (prefix[0] == '\0' ? "" : "/") + case_name + "/" + StreamableToString(index)).c_str(), GetPrefixUntilComma(test_names).c_str(), GetTypeName().c_str(), NULL, // No value parameter. GetTypeId(), TestClass::SetUpTestCase, TestClass::TearDownTestCase, new TestFactoryImpl); // Next, recurses (at compile time) with the tail of the type list. return TypeParameterizedTest ::Register(prefix, case_name, test_names, index + 1); } }; // The base case for the compile time recursion. template class TypeParameterizedTest { public: static bool Register(const char* /*prefix*/, const char* /*case_name*/, const char* /*test_names*/, int /*index*/) { return true; } }; // TypeParameterizedTestCase::Register() // registers *all combinations* of 'Tests' and 'Types' with Google // Test. The return value is insignificant - we just need to return // something such that we can call this function in a namespace scope. template class TypeParameterizedTestCase { public: static bool Register(const char* prefix, const char* case_name, const char* test_names) { typedef typename Tests::Head Head; // First, register the first test in 'Test' for each type in 'Types'. TypeParameterizedTest::Register( prefix, case_name, test_names, 0); // Next, recurses (at compile time) with the tail of the test list. return TypeParameterizedTestCase ::Register(prefix, case_name, SkipComma(test_names)); } }; // The base case for the compile time recursion. template class TypeParameterizedTestCase { public: static bool Register(const char* /*prefix*/, const char* /*case_name*/, const char* /*test_names*/) { return true; } }; #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P // Returns the current OS stack trace as an std::string. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in // the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. GTEST_API_ std::string GetCurrentOsStackTraceExceptTop( UnitTest* unit_test, int skip_count); // Helpers for suppressing warnings on unreachable code or constant // condition. // Always returns true. GTEST_API_ bool AlwaysTrue(); // Always returns false. inline bool AlwaysFalse() { return !AlwaysTrue(); } // Helper for suppressing false warning from Clang on a const char* // variable declared in a conditional expression always being NULL in // the else branch. struct GTEST_API_ ConstCharPtr { ConstCharPtr(const char* str) : value(str) {} operator bool() const { return true; } const char* value; }; // A simple Linear Congruential Generator for generating random // numbers with a uniform distribution. Unlike rand() and srand(), it // doesn't use global state (and therefore can't interfere with user // code). Unlike rand_r(), it's portable. An LCG isn't very random, // but it's good enough for our purposes. class GTEST_API_ Random { public: static const UInt32 kMaxRange = 1u << 31; explicit Random(UInt32 seed) : state_(seed) {} void Reseed(UInt32 seed) { state_ = seed; } // Generates a random number from [0, range). Crashes if 'range' is // 0 or greater than kMaxRange. UInt32 Generate(UInt32 range); private: UInt32 state_; GTEST_DISALLOW_COPY_AND_ASSIGN_(Random); }; // Defining a variable of type CompileAssertTypesEqual will cause a // compiler error iff T1 and T2 are different types. template struct CompileAssertTypesEqual; template struct CompileAssertTypesEqual { }; // Removes the reference from a type if it is a reference type, // otherwise leaves it unchanged. This is the same as // tr1::remove_reference, which is not widely available yet. template struct RemoveReference { typedef T type; }; // NOLINT template struct RemoveReference { typedef T type; }; // NOLINT // A handy wrapper around RemoveReference that works when the argument // T depends on template parameters. #define GTEST_REMOVE_REFERENCE_(T) \ typename ::testing::internal::RemoveReference::type // Removes const from a type if it is a const type, otherwise leaves // it unchanged. This is the same as tr1::remove_const, which is not // widely available yet. template struct RemoveConst { typedef T type; }; // NOLINT template struct RemoveConst { typedef T type; }; // NOLINT // MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above // definition to fail to remove the const in 'const int[3]' and 'const // char[3][4]'. The following specialization works around the bug. template struct RemoveConst { typedef typename RemoveConst::type type[N]; }; #if defined(_MSC_VER) && _MSC_VER < 1400 // This is the only specialization that allows VC++ 7.1 to remove const in // 'const int[3] and 'const int[3][4]'. However, it causes trouble with GCC // and thus needs to be conditionally compiled. template struct RemoveConst { typedef typename RemoveConst::type type[N]; }; #endif // A handy wrapper around RemoveConst that works when the argument // T depends on template parameters. #define GTEST_REMOVE_CONST_(T) \ typename ::testing::internal::RemoveConst::type // Turns const U&, U&, const U, and U all into U. #define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \ GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T)) // Adds reference to a type if it is not a reference type, // otherwise leaves it unchanged. This is the same as // tr1::add_reference, which is not widely available yet. template struct AddReference { typedef T& type; }; // NOLINT template struct AddReference { typedef T& type; }; // NOLINT // A handy wrapper around AddReference that works when the argument T // depends on template parameters. #define GTEST_ADD_REFERENCE_(T) \ typename ::testing::internal::AddReference::type // Adds a reference to const on top of T as necessary. For example, // it transforms // // char ==> const char& // const char ==> const char& // char& ==> const char& // const char& ==> const char& // // The argument T must depend on some template parameters. #define GTEST_REFERENCE_TO_CONST_(T) \ GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T)) // ImplicitlyConvertible::value is a compile-time bool // constant that's true iff type From can be implicitly converted to // type To. template class ImplicitlyConvertible { private: // We need the following helper functions only for their types. // They have no implementations. // MakeFrom() is an expression whose type is From. We cannot simply // use From(), as the type From may not have a public default // constructor. static From MakeFrom(); // These two functions are overloaded. Given an expression // Helper(x), the compiler will pick the first version if x can be // implicitly converted to type To; otherwise it will pick the // second version. // // The first version returns a value of size 1, and the second // version returns a value of size 2. Therefore, by checking the // size of Helper(x), which can be done at compile time, we can tell // which version of Helper() is used, and hence whether x can be // implicitly converted to type To. static char Helper(To); static char (&Helper(...))[2]; // NOLINT // We have to put the 'public' section after the 'private' section, // or MSVC refuses to compile the code. public: // MSVC warns about implicitly converting from double to int for // possible loss of data, so we need to temporarily disable the // warning. #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4244) // Temporarily disables warning 4244. static const bool value = sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; # pragma warning(pop) // Restores the warning state. #elif defined(__BORLANDC__) // C++Builder cannot use member overload resolution during template // instantiation. The simplest workaround is to use its C++0x type traits // functions (C++Builder 2009 and above only). static const bool value = __is_convertible(From, To); #else static const bool value = sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; #endif // _MSV_VER }; template const bool ImplicitlyConvertible::value; // IsAProtocolMessage::value is a compile-time bool constant that's // true iff T is type ProtocolMessage, proto2::Message, or a subclass // of those. template struct IsAProtocolMessage : public bool_constant< ImplicitlyConvertible::value || ImplicitlyConvertible::value> { }; // When the compiler sees expression IsContainerTest(0), if C is an // STL-style container class, the first overload of IsContainerTest // will be viable (since both C::iterator* and C::const_iterator* are // valid types and NULL can be implicitly converted to them). It will // be picked over the second overload as 'int' is a perfect match for // the type of argument 0. If C::iterator or C::const_iterator is not // a valid type, the first overload is not viable, and the second // overload will be picked. Therefore, we can determine whether C is // a container class by checking the type of IsContainerTest(0). // The value of the expression is insignificant. // // Note that we look for both C::iterator and C::const_iterator. The // reason is that C++ injects the name of a class as a member of the // class itself (e.g. you can refer to class iterator as either // 'iterator' or 'iterator::iterator'). If we look for C::iterator // only, for example, we would mistakenly think that a class named // iterator is an STL container. // // Also note that the simpler approach of overloading // IsContainerTest(typename C::const_iterator*) and // IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++. typedef int IsContainer; template IsContainer IsContainerTest(int /* dummy */, typename C::iterator* /* it */ = NULL, typename C::const_iterator* /* const_it */ = NULL) { return 0; } typedef char IsNotContainer; template IsNotContainer IsContainerTest(long /* dummy */) { return '\0'; } // EnableIf::type is void when 'Cond' is true, and // undefined when 'Cond' is false. To use SFINAE to make a function // overload only apply when a particular expression is true, add // "typename EnableIf::type* = 0" as the last parameter. template struct EnableIf; template<> struct EnableIf { typedef void type; }; // NOLINT // Utilities for native arrays. // ArrayEq() compares two k-dimensional native arrays using the // elements' operator==, where k can be any integer >= 0. When k is // 0, ArrayEq() degenerates into comparing a single pair of values. template bool ArrayEq(const T* lhs, size_t size, const U* rhs); // This generic version is used when k is 0. template inline bool ArrayEq(const T& lhs, const U& rhs) { return lhs == rhs; } // This overload is used when k >= 1. template inline bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N]) { return internal::ArrayEq(lhs, N, rhs); } // This helper reduces code bloat. If we instead put its logic inside // the previous ArrayEq() function, arrays with different sizes would // lead to different copies of the template code. template bool ArrayEq(const T* lhs, size_t size, const U* rhs) { for (size_t i = 0; i != size; i++) { if (!internal::ArrayEq(lhs[i], rhs[i])) return false; } return true; } // Finds the first element in the iterator range [begin, end) that // equals elem. Element may be a native array type itself. template Iter ArrayAwareFind(Iter begin, Iter end, const Element& elem) { for (Iter it = begin; it != end; ++it) { if (internal::ArrayEq(*it, elem)) return it; } return end; } // CopyArray() copies a k-dimensional native array using the elements' // operator=, where k can be any integer >= 0. When k is 0, // CopyArray() degenerates into copying a single value. template void CopyArray(const T* from, size_t size, U* to); // This generic version is used when k is 0. template inline void CopyArray(const T& from, U* to) { *to = from; } // This overload is used when k >= 1. template inline void CopyArray(const T(&from)[N], U(*to)[N]) { internal::CopyArray(from, N, *to); } // This helper reduces code bloat. If we instead put its logic inside // the previous CopyArray() function, arrays with different sizes // would lead to different copies of the template code. template void CopyArray(const T* from, size_t size, U* to) { for (size_t i = 0; i != size; i++) { internal::CopyArray(from[i], to + i); } } // The relation between an NativeArray object (see below) and the // native array it represents. enum RelationToSource { kReference, // The NativeArray references the native array. kCopy // The NativeArray makes a copy of the native array and // owns the copy. }; // Adapts a native array to a read-only STL-style container. Instead // of the complete STL container concept, this adaptor only implements // members useful for Google Mock's container matchers. New members // should be added as needed. To simplify the implementation, we only // support Element being a raw type (i.e. having no top-level const or // reference modifier). It's the client's responsibility to satisfy // this requirement. Element can be an array type itself (hence // multi-dimensional arrays are supported). template class NativeArray { public: // STL-style container typedefs. typedef Element value_type; typedef Element* iterator; typedef const Element* const_iterator; // Constructs from a native array. NativeArray(const Element* array, size_t count, RelationToSource relation) { Init(array, count, relation); } // Copy constructor. NativeArray(const NativeArray& rhs) { Init(rhs.array_, rhs.size_, rhs.relation_to_source_); } ~NativeArray() { // Ensures that the user doesn't instantiate NativeArray with a // const or reference type. static_cast(StaticAssertTypeEqHelper()); if (relation_to_source_ == kCopy) delete[] array_; } // STL-style container methods. size_t size() const { return size_; } const_iterator begin() const { return array_; } const_iterator end() const { return array_ + size_; } bool operator==(const NativeArray& rhs) const { return size() == rhs.size() && ArrayEq(begin(), size(), rhs.begin()); } private: // Initializes this object; makes a copy of the input array if // 'relation' is kCopy. void Init(const Element* array, size_t a_size, RelationToSource relation) { if (relation == kReference) { array_ = array; } else { Element* const copy = new Element[a_size]; CopyArray(array, a_size, copy); array_ = copy; } size_ = a_size; relation_to_source_ = relation; } const Element* array_; size_t size_; RelationToSource relation_to_source_; GTEST_DISALLOW_ASSIGN_(NativeArray); }; } // namespace internal } // namespace testing #define GTEST_MESSAGE_AT_(file, line, message, result_type) \ ::testing::internal::AssertHelper(result_type, file, line, message) \ = ::testing::Message() #define GTEST_MESSAGE_(message, result_type) \ GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type) #define GTEST_FATAL_FAILURE_(message) \ return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure) #define GTEST_NONFATAL_FAILURE_(message) \ GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure) #define GTEST_SUCCESS_(message) \ GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess) // Suppresses MSVC warnings 4072 (unreachable code) for the code following // statement if it returns or throws (or doesn't return or throw in some // situations). #define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ if (::testing::internal::AlwaysTrue()) { statement; } #define GTEST_TEST_THROW_(statement, expected_exception, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::ConstCharPtr gtest_msg = "") { \ bool gtest_caught_expected = false; \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } \ catch (expected_exception const&) { \ gtest_caught_expected = true; \ } \ catch (...) { \ gtest_msg.value = \ "Expected: " #statement " throws an exception of type " \ #expected_exception ".\n Actual: it throws a different type."; \ goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ } \ if (!gtest_caught_expected) { \ gtest_msg.value = \ "Expected: " #statement " throws an exception of type " \ #expected_exception ".\n Actual: it throws nothing."; \ goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \ fail(gtest_msg.value) #define GTEST_TEST_NO_THROW_(statement, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } \ catch (...) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \ fail("Expected: " #statement " doesn't throw an exception.\n" \ " Actual: it throws.") #define GTEST_TEST_ANY_THROW_(statement, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ bool gtest_caught_any = false; \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } \ catch (...) { \ gtest_caught_any = true; \ } \ if (!gtest_caught_any) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \ fail("Expected: " #statement " throws an exception.\n" \ " Actual: it doesn't.") // Implements Boolean test assertions such as EXPECT_TRUE. expression can be // either a boolean expression or an AssertionResult. text is a textual // represenation of expression as it was passed into the EXPECT_TRUE. #define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (const ::testing::AssertionResult gtest_ar_ = \ ::testing::AssertionResult(expression)) \ ; \ else \ fail(::testing::internal::GetBoolAssertionFailureMessage(\ gtest_ar_, text, #actual, #expected).c_str()) #define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \ fail("Expected: " #statement " doesn't generate new fatal " \ "failures in the current thread.\n" \ " Actual: it does.") // Expands to the name of the class that implements the given test. #define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ test_case_name##_##test_name##_Test // Helper macro for defining tests. #define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\ class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\ public:\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\ private:\ virtual void TestBody();\ static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\ GTEST_DISALLOW_COPY_AND_ASSIGN_(\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\ };\ \ ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\ ::test_info_ =\ ::testing::internal::MakeAndRegisterTestInfo(\ #test_case_name, #test_name, NULL, NULL, \ (parent_id), \ parent_class::SetUpTestCase, \ parent_class::TearDownTestCase, \ new ::testing::internal::TestFactoryImpl<\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ // Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) // // This header file defines the public API for death tests. It is // #included by gtest.h so a user doesn't need to include this // directly. #ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ // Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) // // The Google C++ Testing Framework (Google Test) // // This header file defines internal utilities needed for implementing // death tests. They are subject to change without notice. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ #include namespace testing { namespace internal { GTEST_DECLARE_string_(internal_run_death_test); // Names of the flags (needed for parsing Google Test flags). const char kDeathTestStyleFlag[] = "death_test_style"; const char kDeathTestUseFork[] = "death_test_use_fork"; const char kInternalRunDeathTestFlag[] = "internal_run_death_test"; #if GTEST_HAS_DEATH_TEST // DeathTest is a class that hides much of the complexity of the // GTEST_DEATH_TEST_ macro. It is abstract; its static Create method // returns a concrete class that depends on the prevailing death test // style, as defined by the --gtest_death_test_style and/or // --gtest_internal_run_death_test flags. // In describing the results of death tests, these terms are used with // the corresponding definitions: // // exit status: The integer exit information in the format specified // by wait(2) // exit code: The integer code passed to exit(3), _exit(2), or // returned from main() class GTEST_API_ DeathTest { public: // Create returns false if there was an error determining the // appropriate action to take for the current death test; for example, // if the gtest_death_test_style flag is set to an invalid value. // The LastMessage method will return a more detailed message in that // case. Otherwise, the DeathTest pointer pointed to by the "test" // argument is set. If the death test should be skipped, the pointer // is set to NULL; otherwise, it is set to the address of a new concrete // DeathTest object that controls the execution of the current test. static bool Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test); DeathTest(); virtual ~DeathTest() { } // A helper class that aborts a death test when it's deleted. class ReturnSentinel { public: explicit ReturnSentinel(DeathTest* test) : test_(test) { } ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); } private: DeathTest* const test_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel); } GTEST_ATTRIBUTE_UNUSED_; // An enumeration of possible roles that may be taken when a death // test is encountered. EXECUTE means that the death test logic should // be executed immediately. OVERSEE means that the program should prepare // the appropriate environment for a child process to execute the death // test, then wait for it to complete. enum TestRole { OVERSEE_TEST, EXECUTE_TEST }; // An enumeration of the three reasons that a test might be aborted. enum AbortReason { TEST_ENCOUNTERED_RETURN_STATEMENT, TEST_THREW_EXCEPTION, TEST_DID_NOT_DIE }; // Assumes one of the above roles. virtual TestRole AssumeRole() = 0; // Waits for the death test to finish and returns its status. virtual int Wait() = 0; // Returns true if the death test passed; that is, the test process // exited during the test, its exit status matches a user-supplied // predicate, and its stderr output matches a user-supplied regular // expression. // The user-supplied predicate may be a macro expression rather // than a function pointer or functor, or else Wait and Passed could // be combined. virtual bool Passed(bool exit_status_ok) = 0; // Signals that the death test did not die as expected. virtual void Abort(AbortReason reason) = 0; // Returns a human-readable outcome message regarding the outcome of // the last death test. static const char* LastMessage(); static void set_last_death_test_message(const std::string& message); private: // A string containing a description of the outcome of the last death test. static std::string last_death_test_message_; GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest); }; // Factory interface for death tests. May be mocked out for testing. class DeathTestFactory { public: virtual ~DeathTestFactory() { } virtual bool Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test) = 0; }; // A concrete DeathTestFactory implementation for normal use. class DefaultDeathTestFactory : public DeathTestFactory { public: virtual bool Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test); }; // Returns true if exit_status describes a process that was terminated // by a signal, or exited normally with a nonzero exit code. GTEST_API_ bool ExitedUnsuccessfully(int exit_status); // Traps C++ exceptions escaping statement and reports them as test // failures. Note that trapping SEH exceptions is not implemented here. # if GTEST_HAS_EXCEPTIONS # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } catch (const ::std::exception& gtest_exception) { \ fprintf(\ stderr, \ "\n%s: Caught std::exception-derived exception escaping the " \ "death test statement. Exception message: %s\n", \ ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \ gtest_exception.what()); \ fflush(stderr); \ death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ } catch (...) { \ death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ } # else # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) # endif // This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*, // ASSERT_EXIT*, and EXPECT_EXIT*. # define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ const ::testing::internal::RE& gtest_regex = (regex); \ ::testing::internal::DeathTest* gtest_dt; \ if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \ __FILE__, __LINE__, >est_dt)) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ } \ if (gtest_dt != NULL) { \ ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \ gtest_dt_ptr(gtest_dt); \ switch (gtest_dt->AssumeRole()) { \ case ::testing::internal::DeathTest::OVERSEE_TEST: \ if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ } \ break; \ case ::testing::internal::DeathTest::EXECUTE_TEST: { \ ::testing::internal::DeathTest::ReturnSentinel \ gtest_sentinel(gtest_dt); \ GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \ gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ break; \ } \ default: \ break; \ } \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \ fail(::testing::internal::DeathTest::LastMessage()) // The symbol "fail" here expands to something into which a message // can be streamed. // This macro is for implementing ASSERT/EXPECT_DEBUG_DEATH when compiled in // NDEBUG mode. In this case we need the statements to be executed, the regex is // ignored, and the macro must accept a streamed message even though the message // is never printed. # define GTEST_EXECUTE_STATEMENT_(statement, regex) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } else \ ::testing::Message() // A class representing the parsed contents of the // --gtest_internal_run_death_test flag, as it existed when // RUN_ALL_TESTS was called. class InternalRunDeathTestFlag { public: InternalRunDeathTestFlag(const std::string& a_file, int a_line, int an_index, int a_write_fd) : file_(a_file), line_(a_line), index_(an_index), write_fd_(a_write_fd) {} ~InternalRunDeathTestFlag() { if (write_fd_ >= 0) posix::Close(write_fd_); } const std::string& file() const { return file_; } int line() const { return line_; } int index() const { return index_; } int write_fd() const { return write_fd_; } private: std::string file_; int line_; int index_; int write_fd_; GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag); }; // Returns a newly created InternalRunDeathTestFlag object with fields // initialized from the GTEST_FLAG(internal_run_death_test) flag if // the flag is specified; otherwise returns NULL. InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag(); #else // GTEST_HAS_DEATH_TEST // This macro is used for implementing macros such as // EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where // death tests are not supported. Those macros must compile on such systems // iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on // systems that support death tests. This allows one to write such a macro // on a system that does not support death tests and be sure that it will // compile on a death-test supporting system. // // Parameters: // statement - A statement that a macro such as EXPECT_DEATH would test // for program termination. This macro has to make sure this // statement is compiled but not executed, to ensure that // EXPECT_DEATH_IF_SUPPORTED compiles with a certain // parameter iff EXPECT_DEATH compiles with it. // regex - A regex that a macro such as EXPECT_DEATH would use to test // the output of statement. This parameter has to be // compiled but not evaluated by this macro, to ensure that // this macro only accepts expressions that a macro such as // EXPECT_DEATH would accept. // terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED // and a return statement for ASSERT_DEATH_IF_SUPPORTED. // This ensures that ASSERT_DEATH_IF_SUPPORTED will not // compile inside functions where ASSERT_DEATH doesn't // compile. // // The branch that has an always false condition is used to ensure that // statement and regex are compiled (and thus syntactically correct) but // never executed. The unreachable code macro protects the terminator // statement from generating an 'unreachable code' warning in case // statement unconditionally returns or throws. The Message constructor at // the end allows the syntax of streaming additional messages into the // macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH. # define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ GTEST_LOG_(WARNING) \ << "Death tests are not supported on this platform.\n" \ << "Statement '" #statement "' cannot be verified."; \ } else if (::testing::internal::AlwaysFalse()) { \ ::testing::internal::RE::PartialMatch(".*", (regex)); \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ terminator; \ } else \ ::testing::Message() #endif // GTEST_HAS_DEATH_TEST } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ namespace testing { // This flag controls the style of death tests. Valid values are "threadsafe", // meaning that the death test child process will re-execute the test binary // from the start, running only a single death test, or "fast", // meaning that the child process will execute the test logic immediately // after forking. GTEST_DECLARE_string_(death_test_style); #if GTEST_HAS_DEATH_TEST namespace internal { // Returns a Boolean value indicating whether the caller is currently // executing in the context of the death test child process. Tools such as // Valgrind heap checkers may need this to modify their behavior in death // tests. IMPORTANT: This is an internal utility. Using it may break the // implementation of death tests. User code MUST NOT use it. GTEST_API_ bool InDeathTestChild(); } // namespace internal // The following macros are useful for writing death tests. // Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is // executed: // // 1. It generates a warning if there is more than one active // thread. This is because it's safe to fork() or clone() only // when there is a single thread. // // 2. The parent process clone()s a sub-process and runs the death // test in it; the sub-process exits with code 0 at the end of the // death test, if it hasn't exited already. // // 3. The parent process waits for the sub-process to terminate. // // 4. The parent process checks the exit code and error message of // the sub-process. // // Examples: // // ASSERT_DEATH(server.SendMessage(56, "Hello"), "Invalid port number"); // for (int i = 0; i < 5; i++) { // EXPECT_DEATH(server.ProcessRequest(i), // "Invalid request .* in ProcessRequest()") // << "Failed to die on request " << i; // } // // ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting"); // // bool KilledBySIGHUP(int exit_code) { // return WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGHUP; // } // // ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, "Hanging up!"); // // On the regular expressions used in death tests: // // On POSIX-compliant systems (*nix), we use the library, // which uses the POSIX extended regex syntax. // // On other platforms (e.g. Windows), we only support a simple regex // syntax implemented as part of Google Test. This limited // implementation should be enough most of the time when writing // death tests; though it lacks many features you can find in PCRE // or POSIX extended regex syntax. For example, we don't support // union ("x|y"), grouping ("(xy)"), brackets ("[xy]"), and // repetition count ("x{5,7}"), among others. // // Below is the syntax that we do support. We chose it to be a // subset of both PCRE and POSIX extended regex, so it's easy to // learn wherever you come from. In the following: 'A' denotes a // literal character, period (.), or a single \\ escape sequence; // 'x' and 'y' denote regular expressions; 'm' and 'n' are for // natural numbers. // // c matches any literal character c // \\d matches any decimal digit // \\D matches any character that's not a decimal digit // \\f matches \f // \\n matches \n // \\r matches \r // \\s matches any ASCII whitespace, including \n // \\S matches any character that's not a whitespace // \\t matches \t // \\v matches \v // \\w matches any letter, _, or decimal digit // \\W matches any character that \\w doesn't match // \\c matches any literal character c, which must be a punctuation // . matches any single character except \n // A? matches 0 or 1 occurrences of A // A* matches 0 or many occurrences of A // A+ matches 1 or many occurrences of A // ^ matches the beginning of a string (not that of each line) // $ matches the end of a string (not that of each line) // xy matches x followed by y // // If you accidentally use PCRE or POSIX extended regex features // not implemented by us, you will get a run-time failure. In that // case, please try to rewrite your regular expression within the // above syntax. // // This implementation is *not* meant to be as highly tuned or robust // as a compiled regex library, but should perform well enough for a // death test, which already incurs significant overhead by launching // a child process. // // Known caveats: // // A "threadsafe" style death test obtains the path to the test // program from argv[0] and re-executes it in the sub-process. For // simplicity, the current implementation doesn't search the PATH // when launching the sub-process. This means that the user must // invoke the test program via a path that contains at least one // path separator (e.g. path/to/foo_test and // /absolute/path/to/bar_test are fine, but foo_test is not). This // is rarely a problem as people usually don't put the test binary // directory in PATH. // // TODO(wan@google.com): make thread-safe death tests search the PATH. // Asserts that a given statement causes the program to exit, with an // integer exit status that satisfies predicate, and emitting error output // that matches regex. # define ASSERT_EXIT(statement, predicate, regex) \ GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_) // Like ASSERT_EXIT, but continues on to successive tests in the // test case, if any: # define EXPECT_EXIT(statement, predicate, regex) \ GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_) // Asserts that a given statement causes the program to exit, either by // explicitly exiting with a nonzero exit code or being killed by a // signal, and emitting error output that matches regex. # define ASSERT_DEATH(statement, regex) \ ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) // Like ASSERT_DEATH, but continues on to successive tests in the // test case, if any: # define EXPECT_DEATH(statement, regex) \ EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) // Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*: // Tests that an exit code describes a normal exit with a given exit code. class GTEST_API_ ExitedWithCode { public: explicit ExitedWithCode(int exit_code); bool operator()(int exit_status) const; private: // No implementation - assignment is unsupported. void operator=(const ExitedWithCode& other); const int exit_code_; }; # if !GTEST_OS_WINDOWS // Tests that an exit code describes an exit due to termination by a // given signal. class GTEST_API_ KilledBySignal { public: explicit KilledBySignal(int signum); bool operator()(int exit_status) const; private: const int signum_; }; # endif // !GTEST_OS_WINDOWS // EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode. // The death testing framework causes this to have interesting semantics, // since the sideeffects of the call are only visible in opt mode, and not // in debug mode. // // In practice, this can be used to test functions that utilize the // LOG(DFATAL) macro using the following style: // // int DieInDebugOr12(int* sideeffect) { // if (sideeffect) { // *sideeffect = 12; // } // LOG(DFATAL) << "death"; // return 12; // } // // TEST(TestCase, TestDieOr12WorksInDgbAndOpt) { // int sideeffect = 0; // // Only asserts in dbg. // EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), "death"); // // #ifdef NDEBUG // // opt-mode has sideeffect visible. // EXPECT_EQ(12, sideeffect); // #else // // dbg-mode no visible sideeffect. // EXPECT_EQ(0, sideeffect); // #endif // } // // This will assert that DieInDebugReturn12InOpt() crashes in debug // mode, usually due to a DCHECK or LOG(DFATAL), but returns the // appropriate fallback value (12 in this case) in opt mode. If you // need to test that a function has appropriate side-effects in opt // mode, include assertions against the side-effects. A general // pattern for this is: // // EXPECT_DEBUG_DEATH({ // // Side-effects here will have an effect after this statement in // // opt mode, but none in debug mode. // EXPECT_EQ(12, DieInDebugOr12(&sideeffect)); // }, "death"); // # ifdef NDEBUG # define EXPECT_DEBUG_DEATH(statement, regex) \ GTEST_EXECUTE_STATEMENT_(statement, regex) # define ASSERT_DEBUG_DEATH(statement, regex) \ GTEST_EXECUTE_STATEMENT_(statement, regex) # else # define EXPECT_DEBUG_DEATH(statement, regex) \ EXPECT_DEATH(statement, regex) # define ASSERT_DEBUG_DEATH(statement, regex) \ ASSERT_DEATH(statement, regex) # endif // NDEBUG for EXPECT_DEBUG_DEATH #endif // GTEST_HAS_DEATH_TEST // EXPECT_DEATH_IF_SUPPORTED(statement, regex) and // ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if // death tests are supported; otherwise they just issue a warning. This is // useful when you are combining death test assertions with normal test // assertions in one test. #if GTEST_HAS_DEATH_TEST # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ EXPECT_DEATH(statement, regex) # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ ASSERT_DEATH(statement, regex) #else # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, ) # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return) #endif } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ // This file was GENERATED by command: // pump.py gtest-param-test.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: vladl@google.com (Vlad Losev) // // Macros and functions for implementing parameterized tests // in Google C++ Testing Framework (Google Test) // // This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // #ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ // Value-parameterized tests allow you to test your code with different // parameters without writing multiple copies of the same test. // // Here is how you use value-parameterized tests: #if 0 // To write value-parameterized tests, first you should define a fixture // class. It is usually derived from testing::TestWithParam (see below for // another inheritance scheme that's sometimes useful in more complicated // class hierarchies), where the type of your parameter values. // TestWithParam is itself derived from testing::Test. T can be any // copyable type. If it's a raw pointer, you are responsible for managing the // lifespan of the pointed values. class FooTest : public ::testing::TestWithParam { // You can implement all the usual class fixture members here. }; // Then, use the TEST_P macro to define as many parameterized tests // for this fixture as you want. The _P suffix is for "parameterized" // or "pattern", whichever you prefer to think. TEST_P(FooTest, DoesBlah) { // Inside a test, access the test parameter with the GetParam() method // of the TestWithParam class: EXPECT_TRUE(foo.Blah(GetParam())); ... } TEST_P(FooTest, HasBlahBlah) { ... } // Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test // case with any set of parameters you want. Google Test defines a number // of functions for generating test parameters. They return what we call // (surprise!) parameter generators. Here is a summary of them, which // are all in the testing namespace: // // // Range(begin, end [, step]) - Yields values {begin, begin+step, // begin+step+step, ...}. The values do not // include end. step defaults to 1. // Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. // ValuesIn(container) - Yields values from a C-style array, an STL // ValuesIn(begin,end) container, or an iterator range [begin, end). // Bool() - Yields sequence {false, true}. // Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product // for the math savvy) of the values generated // by the N generators. // // For more details, see comments at the definitions of these functions below // in this file. // // The following statement will instantiate tests from the FooTest test case // each with parameter values "meeny", "miny", and "moe". INSTANTIATE_TEST_CASE_P(InstantiationName, FooTest, Values("meeny", "miny", "moe")); // To distinguish different instances of the pattern, (yes, you // can instantiate it more then once) the first argument to the // INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the // actual test case name. Remember to pick unique prefixes for different // instantiations. The tests from the instantiation above will have // these names: // // * InstantiationName/FooTest.DoesBlah/0 for "meeny" // * InstantiationName/FooTest.DoesBlah/1 for "miny" // * InstantiationName/FooTest.DoesBlah/2 for "moe" // * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" // * InstantiationName/FooTest.HasBlahBlah/1 for "miny" // * InstantiationName/FooTest.HasBlahBlah/2 for "moe" // // You can use these names in --gtest_filter. // // This statement will instantiate all tests from FooTest again, each // with parameter values "cat" and "dog": const char* pets[] = {"cat", "dog"}; INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); // The tests from the instantiation above will have these names: // // * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" // * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" // * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" // * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" // // Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests // in the given test case, whether their definitions come before or // AFTER the INSTANTIATE_TEST_CASE_P statement. // // Please also note that generator expressions (including parameters to the // generators) are evaluated in InitGoogleTest(), after main() has started. // This allows the user on one hand, to adjust generator parameters in order // to dynamically determine a set of tests to run and on the other hand, // give the user a chance to inspect the generated tests with Google Test // reflection API before RUN_ALL_TESTS() is executed. // // You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc // for more examples. // // In the future, we plan to publish the API for defining new parameter // generators. But for now this interface remains part of the internal // implementation and is subject to change. // // // A parameterized test fixture must be derived from testing::Test and from // testing::WithParamInterface, where T is the type of the parameter // values. Inheriting from TestWithParam satisfies that requirement because // TestWithParam inherits from both Test and WithParamInterface. In more // complicated hierarchies, however, it is occasionally useful to inherit // separately from Test and WithParamInterface. For example: class BaseTest : public ::testing::Test { // You can inherit all the usual members for a non-parameterized test // fixture here. }; class DerivedTest : public BaseTest, public ::testing::WithParamInterface { // The usual test fixture members go here too. }; TEST_F(BaseTest, HasFoo) { // This is an ordinary non-parameterized test. } TEST_P(DerivedTest, DoesBlah) { // GetParam works just the same here as if you inherit from TestWithParam. EXPECT_TRUE(foo.Blah(GetParam())); } #endif // 0 #if !GTEST_OS_SYMBIAN # include #endif // scripts/fuse_gtest.py depends on gtest's own header being #included // *unconditionally*. Therefore these #includes cannot be moved // inside #if GTEST_HAS_PARAM_TEST. // Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // Type and function utilities for implementing parameterized tests. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ #include #include #include // scripts/fuse_gtest.py depends on gtest's own header being #included // *unconditionally*. Therefore these #includes cannot be moved // inside #if GTEST_HAS_PARAM_TEST. // Copyright 2003 Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: Dan Egnor (egnor@google.com) // // A "smart" pointer type with reference tracking. Every pointer to a // particular object is kept on a circular linked list. When the last pointer // to an object is destroyed or reassigned, the object is deleted. // // Used properly, this deletes the object when the last reference goes away. // There are several caveats: // - Like all reference counting schemes, cycles lead to leaks. // - Each smart pointer is actually two pointers (8 bytes instead of 4). // - Every time a pointer is assigned, the entire list of pointers to that // object is traversed. This class is therefore NOT SUITABLE when there // will often be more than two or three pointers to a particular object. // - References are only tracked as long as linked_ptr<> objects are copied. // If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS // will happen (double deletion). // // A good use of this class is storing object references in STL containers. // You can safely put linked_ptr<> in a vector<>. // Other uses may not be as good. // // Note: If you use an incomplete type with linked_ptr<>, the class // *containing* linked_ptr<> must have a constructor and destructor (even // if they do nothing!). // // Bill Gibbons suggested we use something like this. // // Thread Safety: // Unlike other linked_ptr implementations, in this implementation // a linked_ptr object is thread-safe in the sense that: // - it's safe to copy linked_ptr objects concurrently, // - it's safe to copy *from* a linked_ptr and read its underlying // raw pointer (e.g. via get()) concurrently, and // - it's safe to write to two linked_ptrs that point to the same // shared object concurrently. // TODO(wan@google.com): rename this to safe_linked_ptr to avoid // confusion with normal linked_ptr. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ #include #include namespace testing { namespace internal { // Protects copying of all linked_ptr objects. GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex); // This is used internally by all instances of linked_ptr<>. It needs to be // a non-template class because different types of linked_ptr<> can refer to // the same object (linked_ptr(obj) vs linked_ptr(obj)). // So, it needs to be possible for different types of linked_ptr to participate // in the same circular linked list, so we need a single class type here. // // DO NOT USE THIS CLASS DIRECTLY YOURSELF. Use linked_ptr. class linked_ptr_internal { public: // Create a new circle that includes only this instance. void join_new() { next_ = this; } // Many linked_ptr operations may change p.link_ for some linked_ptr // variable p in the same circle as this object. Therefore we need // to prevent two such operations from occurring concurrently. // // Note that different types of linked_ptr objects can coexist in a // circle (e.g. linked_ptr, linked_ptr, and // linked_ptr). Therefore we must use a single mutex to // protect all linked_ptr objects. This can create serious // contention in production code, but is acceptable in a testing // framework. // Join an existing circle. void join(linked_ptr_internal const* ptr) GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { MutexLock lock(&g_linked_ptr_mutex); linked_ptr_internal const* p = ptr; while (p->next_ != ptr) p = p->next_; p->next_ = this; next_ = ptr; } // Leave whatever circle we're part of. Returns true if we were the // last member of the circle. Once this is done, you can join() another. bool depart() GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { MutexLock lock(&g_linked_ptr_mutex); if (next_ == this) return true; linked_ptr_internal const* p = next_; while (p->next_ != this) p = p->next_; p->next_ = next_; return false; } private: mutable linked_ptr_internal const* next_; }; template class linked_ptr { public: typedef T element_type; // Take over ownership of a raw pointer. This should happen as soon as // possible after the object is created. explicit linked_ptr(T* ptr = NULL) { capture(ptr); } ~linked_ptr() { depart(); } // Copy an existing linked_ptr<>, adding ourselves to the list of references. template linked_ptr(linked_ptr const& ptr) { copy(&ptr); } linked_ptr(linked_ptr const& ptr) { // NOLINT assert(&ptr != this); copy(&ptr); } // Assignment releases the old value and acquires the new. template linked_ptr& operator=(linked_ptr const& ptr) { depart(); copy(&ptr); return *this; } linked_ptr& operator=(linked_ptr const& ptr) { if (&ptr != this) { depart(); copy(&ptr); } return *this; } // Smart pointer members. void reset(T* ptr = NULL) { depart(); capture(ptr); } T* get() const { return value_; } T* operator->() const { return value_; } T& operator*() const { return *value_; } bool operator==(T* p) const { return value_ == p; } bool operator!=(T* p) const { return value_ != p; } template bool operator==(linked_ptr const& ptr) const { return value_ == ptr.get(); } template bool operator!=(linked_ptr const& ptr) const { return value_ != ptr.get(); } private: template friend class linked_ptr; T* value_; linked_ptr_internal link_; void depart() { if (link_.depart()) delete value_; } void capture(T* ptr) { value_ = ptr; link_.join_new(); } template void copy(linked_ptr const* ptr) { value_ = ptr->get(); if (value_) link_.join(&ptr->link_); else link_.join_new(); } }; template inline bool operator==(T* ptr, const linked_ptr& x) { return ptr == x.get(); } template inline bool operator!=(T* ptr, const linked_ptr& x) { return ptr != x.get(); } // A function to convert T* into linked_ptr // Doing e.g. make_linked_ptr(new FooBarBaz(arg)) is a shorter notation // for linked_ptr >(new FooBarBaz(arg)) template linked_ptr make_linked_ptr(T* ptr) { return linked_ptr(ptr); } } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ // Copyright 2007, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Google Test - The Google C++ Testing Framework // // This file implements a universal value printer that can print a // value of any type T: // // void ::testing::internal::UniversalPrinter::Print(value, ostream_ptr); // // A user can teach this function how to print a class type T by // defining either operator<<() or PrintTo() in the namespace that // defines T. More specifically, the FIRST defined function in the // following list will be used (assuming T is defined in namespace // foo): // // 1. foo::PrintTo(const T&, ostream*) // 2. operator<<(ostream&, const T&) defined in either foo or the // global namespace. // // If none of the above is defined, it will print the debug string of // the value if it is a protocol buffer, or print the raw bytes in the // value otherwise. // // To aid debugging: when T is a reference type, the address of the // value is also printed; when T is a (const) char pointer, both the // pointer value and the NUL-terminated string it points to are // printed. // // We also provide some convenient wrappers: // // // Prints a value to a string. For a (const or not) char // // pointer, the NUL-terminated string (but not the pointer) is // // printed. // std::string ::testing::PrintToString(const T& value); // // // Prints a value tersely: for a reference type, the referenced // // value (but not the address) is printed; for a (const or not) char // // pointer, the NUL-terminated string (but not the pointer) is // // printed. // void ::testing::internal::UniversalTersePrint(const T& value, ostream*); // // // Prints value using the type inferred by the compiler. The difference // // from UniversalTersePrint() is that this function prints both the // // pointer and the NUL-terminated string for a (const or not) char pointer. // void ::testing::internal::UniversalPrint(const T& value, ostream*); // // // Prints the fields of a tuple tersely to a string vector, one // // element for each field. Tuple support must be enabled in // // gtest-port.h. // std::vector UniversalTersePrintTupleFieldsToStrings( // const Tuple& value); // // Known limitation: // // The print primitives print the elements of an STL-style container // using the compiler-inferred type of *iter where iter is a // const_iterator of the container. When const_iterator is an input // iterator but not a forward iterator, this inferred type may not // match value_type, and the print output may be incorrect. In // practice, this is rarely a problem as for most containers // const_iterator is a forward iterator. We'll fix this if there's an // actual need for it. Note that this fix cannot rely on value_type // being defined as many user-defined container types don't have // value_type. #ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ #define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ #include // NOLINT #include #include #include #include namespace testing { // Definitions in the 'internal' and 'internal2' name spaces are // subject to change without notice. DO NOT USE THEM IN USER CODE! namespace internal2 { // Prints the given number of bytes in the given object to the given // ostream. GTEST_API_ void PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count, ::std::ostream* os); // For selecting which printer to use when a given type has neither << // nor PrintTo(). enum TypeKind { kProtobuf, // a protobuf type kConvertibleToInteger, // a type implicitly convertible to BiggestInt // (e.g. a named or unnamed enum type) kOtherType // anything else }; // TypeWithoutFormatter::PrintValue(value, os) is called // by the universal printer to print a value of type T when neither // operator<< nor PrintTo() is defined for T, where kTypeKind is the // "kind" of T as defined by enum TypeKind. template class TypeWithoutFormatter { public: // This default version is called when kTypeKind is kOtherType. static void PrintValue(const T& value, ::std::ostream* os) { PrintBytesInObjectTo(reinterpret_cast(&value), sizeof(value), os); } }; // We print a protobuf using its ShortDebugString() when the string // doesn't exceed this many characters; otherwise we print it using // DebugString() for better readability. const size_t kProtobufOneLinerMaxLength = 50; template class TypeWithoutFormatter { public: static void PrintValue(const T& value, ::std::ostream* os) { const ::testing::internal::string short_str = value.ShortDebugString(); const ::testing::internal::string pretty_str = short_str.length() <= kProtobufOneLinerMaxLength ? short_str : ("\n" + value.DebugString()); *os << ("<" + pretty_str + ">"); } }; template class TypeWithoutFormatter { public: // Since T has no << operator or PrintTo() but can be implicitly // converted to BiggestInt, we print it as a BiggestInt. // // Most likely T is an enum type (either named or unnamed), in which // case printing it as an integer is the desired behavior. In case // T is not an enum, printing it as an integer is the best we can do // given that it has no user-defined printer. static void PrintValue(const T& value, ::std::ostream* os) { const internal::BiggestInt kBigInt = value; *os << kBigInt; } }; // Prints the given value to the given ostream. If the value is a // protocol message, its debug string is printed; if it's an enum or // of a type implicitly convertible to BiggestInt, it's printed as an // integer; otherwise the bytes in the value are printed. This is // what UniversalPrinter::Print() does when it knows nothing about // type T and T has neither << operator nor PrintTo(). // // A user can override this behavior for a class type Foo by defining // a << operator in the namespace where Foo is defined. // // We put this operator in namespace 'internal2' instead of 'internal' // to simplify the implementation, as much code in 'internal' needs to // use << in STL, which would conflict with our own << were it defined // in 'internal'. // // Note that this operator<< takes a generic std::basic_ostream type instead of the more restricted std::ostream. If // we define it to take an std::ostream instead, we'll get an // "ambiguous overloads" compiler error when trying to print a type // Foo that supports streaming to std::basic_ostream, as the compiler cannot tell whether // operator<<(std::ostream&, const T&) or // operator<<(std::basic_stream, const Foo&) is more // specific. template ::std::basic_ostream& operator<<( ::std::basic_ostream& os, const T& x) { TypeWithoutFormatter::value ? kProtobuf : internal::ImplicitlyConvertible::value ? kConvertibleToInteger : kOtherType)>::PrintValue(x, &os); return os; } } // namespace internal2 } // namespace testing // This namespace MUST NOT BE NESTED IN ::testing, or the name look-up // magic needed for implementing UniversalPrinter won't work. namespace testing_internal { // Used to print a value that is not an STL-style container when the // user doesn't define PrintTo() for it. template void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) { // With the following statement, during unqualified name lookup, // testing::internal2::operator<< appears as if it was declared in // the nearest enclosing namespace that contains both // ::testing_internal and ::testing::internal2, i.e. the global // namespace. For more details, refer to the C++ Standard section // 7.3.4-1 [namespace.udir]. This allows us to fall back onto // testing::internal2::operator<< in case T doesn't come with a << // operator. // // We cannot write 'using ::testing::internal2::operator<<;', which // gcc 3.3 fails to compile due to a compiler bug. using namespace ::testing::internal2; // NOLINT // Assuming T is defined in namespace foo, in the next statement, // the compiler will consider all of: // // 1. foo::operator<< (thanks to Koenig look-up), // 2. ::operator<< (as the current namespace is enclosed in ::), // 3. testing::internal2::operator<< (thanks to the using statement above). // // The operator<< whose type matches T best will be picked. // // We deliberately allow #2 to be a candidate, as sometimes it's // impossible to define #1 (e.g. when foo is ::std, defining // anything in it is undefined behavior unless you are a compiler // vendor.). *os << value; } } // namespace testing_internal namespace testing { namespace internal { // UniversalPrinter::Print(value, ostream_ptr) prints the given // value to the given ostream. The caller must ensure that // 'ostream_ptr' is not NULL, or the behavior is undefined. // // We define UniversalPrinter as a class template (as opposed to a // function template), as we need to partially specialize it for // reference types, which cannot be done with function templates. template class UniversalPrinter; template void UniversalPrint(const T& value, ::std::ostream* os); // Used to print an STL-style container when the user doesn't define // a PrintTo() for it. template void DefaultPrintTo(IsContainer /* dummy */, false_type /* is not a pointer */, const C& container, ::std::ostream* os) { const size_t kMaxCount = 32; // The maximum number of elements to print. *os << '{'; size_t count = 0; for (typename C::const_iterator it = container.begin(); it != container.end(); ++it, ++count) { if (count > 0) { *os << ','; if (count == kMaxCount) { // Enough has been printed. *os << " ..."; break; } } *os << ' '; // We cannot call PrintTo(*it, os) here as PrintTo() doesn't // handle *it being a native array. internal::UniversalPrint(*it, os); } if (count > 0) { *os << ' '; } *os << '}'; } // Used to print a pointer that is neither a char pointer nor a member // pointer, when the user doesn't define PrintTo() for it. (A member // variable pointer or member function pointer doesn't really point to // a location in the address space. Their representation is // implementation-defined. Therefore they will be printed as raw // bytes.) template void DefaultPrintTo(IsNotContainer /* dummy */, true_type /* is a pointer */, T* p, ::std::ostream* os) { if (p == NULL) { *os << "NULL"; } else { // C++ doesn't allow casting from a function pointer to any object // pointer. // // IsTrue() silences warnings: "Condition is always true", // "unreachable code". if (IsTrue(ImplicitlyConvertible::value)) { // T is not a function type. We just call << to print p, // relying on ADL to pick up user-defined << for their pointer // types, if any. *os << p; } else { // T is a function type, so '*os << p' doesn't do what we want // (it just prints p as bool). We want to print p as a const // void*. However, we cannot cast it to const void* directly, // even using reinterpret_cast, as earlier versions of gcc // (e.g. 3.4.5) cannot compile the cast when p is a function // pointer. Casting to UInt64 first solves the problem. *os << reinterpret_cast( reinterpret_cast(p)); } } } // Used to print a non-container, non-pointer value when the user // doesn't define PrintTo() for it. template void DefaultPrintTo(IsNotContainer /* dummy */, false_type /* is not a pointer */, const T& value, ::std::ostream* os) { ::testing_internal::DefaultPrintNonContainerTo(value, os); } // Prints the given value using the << operator if it has one; // otherwise prints the bytes in it. This is what // UniversalPrinter::Print() does when PrintTo() is not specialized // or overloaded for type T. // // A user can override this behavior for a class type Foo by defining // an overload of PrintTo() in the namespace where Foo is defined. We // give the user this option as sometimes defining a << operator for // Foo is not desirable (e.g. the coding style may prevent doing it, // or there is already a << operator but it doesn't do what the user // wants). template void PrintTo(const T& value, ::std::ostream* os) { // DefaultPrintTo() is overloaded. The type of its first two // arguments determine which version will be picked. If T is an // STL-style container, the version for container will be called; if // T is a pointer, the pointer version will be called; otherwise the // generic version will be called. // // Note that we check for container types here, prior to we check // for protocol message types in our operator<<. The rationale is: // // For protocol messages, we want to give people a chance to // override Google Mock's format by defining a PrintTo() or // operator<<. For STL containers, other formats can be // incompatible with Google Mock's format for the container // elements; therefore we check for container types here to ensure // that our format is used. // // The second argument of DefaultPrintTo() is needed to bypass a bug // in Symbian's C++ compiler that prevents it from picking the right // overload between: // // PrintTo(const T& x, ...); // PrintTo(T* x, ...); DefaultPrintTo(IsContainerTest(0), is_pointer(), value, os); } // The following list of PrintTo() overloads tells // UniversalPrinter::Print() how to print standard types (built-in // types, strings, plain arrays, and pointers). // Overloads for various char types. GTEST_API_ void PrintTo(unsigned char c, ::std::ostream* os); GTEST_API_ void PrintTo(signed char c, ::std::ostream* os); inline void PrintTo(char c, ::std::ostream* os) { // When printing a plain char, we always treat it as unsigned. This // way, the output won't be affected by whether the compiler thinks // char is signed or not. PrintTo(static_cast(c), os); } // Overloads for other simple built-in types. inline void PrintTo(bool x, ::std::ostream* os) { *os << (x ? "true" : "false"); } // Overload for wchar_t type. // Prints a wchar_t as a symbol if it is printable or as its internal // code otherwise and also as its decimal code (except for L'\0'). // The L'\0' char is printed as "L'\\0'". The decimal code is printed // as signed integer when wchar_t is implemented by the compiler // as a signed type and is printed as an unsigned integer when wchar_t // is implemented as an unsigned type. GTEST_API_ void PrintTo(wchar_t wc, ::std::ostream* os); // Overloads for C strings. GTEST_API_ void PrintTo(const char* s, ::std::ostream* os); inline void PrintTo(char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } // signed/unsigned char is often used for representing binary data, so // we print pointers to it as void* to be safe. inline void PrintTo(const signed char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } inline void PrintTo(signed char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } inline void PrintTo(const unsigned char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } inline void PrintTo(unsigned char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } // MSVC can be configured to define wchar_t as a typedef of unsigned // short. It defines _NATIVE_WCHAR_T_DEFINED when wchar_t is a native // type. When wchar_t is a typedef, defining an overload for const // wchar_t* would cause unsigned short* be printed as a wide string, // possibly causing invalid memory accesses. #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) // Overloads for wide C strings GTEST_API_ void PrintTo(const wchar_t* s, ::std::ostream* os); inline void PrintTo(wchar_t* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } #endif // Overload for C arrays. Multi-dimensional arrays are printed // properly. // Prints the given number of elements in an array, without printing // the curly braces. template void PrintRawArrayTo(const T a[], size_t count, ::std::ostream* os) { UniversalPrint(a[0], os); for (size_t i = 1; i != count; i++) { *os << ", "; UniversalPrint(a[i], os); } } // Overloads for ::string and ::std::string. #if GTEST_HAS_GLOBAL_STRING GTEST_API_ void PrintStringTo(const ::string&s, ::std::ostream* os); inline void PrintTo(const ::string& s, ::std::ostream* os) { PrintStringTo(s, os); } #endif // GTEST_HAS_GLOBAL_STRING GTEST_API_ void PrintStringTo(const ::std::string&s, ::std::ostream* os); inline void PrintTo(const ::std::string& s, ::std::ostream* os) { PrintStringTo(s, os); } // Overloads for ::wstring and ::std::wstring. #if GTEST_HAS_GLOBAL_WSTRING GTEST_API_ void PrintWideStringTo(const ::wstring&s, ::std::ostream* os); inline void PrintTo(const ::wstring& s, ::std::ostream* os) { PrintWideStringTo(s, os); } #endif // GTEST_HAS_GLOBAL_WSTRING #if GTEST_HAS_STD_WSTRING GTEST_API_ void PrintWideStringTo(const ::std::wstring&s, ::std::ostream* os); inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) { PrintWideStringTo(s, os); } #endif // GTEST_HAS_STD_WSTRING #if GTEST_HAS_TR1_TUPLE // Overload for ::std::tr1::tuple. Needed for printing function arguments, // which are packed as tuples. // Helper function for printing a tuple. T must be instantiated with // a tuple type. template void PrintTupleTo(const T& t, ::std::ostream* os); // Overloaded PrintTo() for tuples of various arities. We support // tuples of up-to 10 fields. The following implementation works // regardless of whether tr1::tuple is implemented using the // non-standard variadic template feature or not. inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo( const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } #endif // GTEST_HAS_TR1_TUPLE // Overload for std::pair. template void PrintTo(const ::std::pair& value, ::std::ostream* os) { *os << '('; // We cannot use UniversalPrint(value.first, os) here, as T1 may be // a reference type. The same for printing value.second. UniversalPrinter::Print(value.first, os); *os << ", "; UniversalPrinter::Print(value.second, os); *os << ')'; } // Implements printing a non-reference type T by letting the compiler // pick the right overload of PrintTo() for T. template class UniversalPrinter { public: // MSVC warns about adding const to a function type, so we want to // disable the warning. #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4180) // Temporarily disables warning 4180. #endif // _MSC_VER // Note: we deliberately don't call this PrintTo(), as that name // conflicts with ::testing::internal::PrintTo in the body of the // function. static void Print(const T& value, ::std::ostream* os) { // By default, ::testing::internal::PrintTo() is used for printing // the value. // // Thanks to Koenig look-up, if T is a class and has its own // PrintTo() function defined in its namespace, that function will // be visible here. Since it is more specific than the generic ones // in ::testing::internal, it will be picked by the compiler in the // following statement - exactly what we want. PrintTo(value, os); } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif // _MSC_VER }; // UniversalPrintArray(begin, len, os) prints an array of 'len' // elements, starting at address 'begin'. template void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) { if (len == 0) { *os << "{}"; } else { *os << "{ "; const size_t kThreshold = 18; const size_t kChunkSize = 8; // If the array has more than kThreshold elements, we'll have to // omit some details by printing only the first and the last // kChunkSize elements. // TODO(wan@google.com): let the user control the threshold using a flag. if (len <= kThreshold) { PrintRawArrayTo(begin, len, os); } else { PrintRawArrayTo(begin, kChunkSize, os); *os << ", ..., "; PrintRawArrayTo(begin + len - kChunkSize, kChunkSize, os); } *os << " }"; } } // This overload prints a (const) char array compactly. GTEST_API_ void UniversalPrintArray( const char* begin, size_t len, ::std::ostream* os); // This overload prints a (const) wchar_t array compactly. GTEST_API_ void UniversalPrintArray( const wchar_t* begin, size_t len, ::std::ostream* os); // Implements printing an array type T[N]. template class UniversalPrinter { public: // Prints the given array, omitting some elements when there are too // many. static void Print(const T (&a)[N], ::std::ostream* os) { UniversalPrintArray(a, N, os); } }; // Implements printing a reference type T&. template class UniversalPrinter { public: // MSVC warns about adding const to a function type, so we want to // disable the warning. #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4180) // Temporarily disables warning 4180. #endif // _MSC_VER static void Print(const T& value, ::std::ostream* os) { // Prints the address of the value. We use reinterpret_cast here // as static_cast doesn't compile when T is a function type. *os << "@" << reinterpret_cast(&value) << " "; // Then prints the value itself. UniversalPrint(value, os); } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif // _MSC_VER }; // Prints a value tersely: for a reference type, the referenced value // (but not the address) is printed; for a (const) char pointer, the // NUL-terminated string (but not the pointer) is printed. template class UniversalTersePrinter { public: static void Print(const T& value, ::std::ostream* os) { UniversalPrint(value, os); } }; template class UniversalTersePrinter { public: static void Print(const T& value, ::std::ostream* os) { UniversalPrint(value, os); } }; template class UniversalTersePrinter { public: static void Print(const T (&value)[N], ::std::ostream* os) { UniversalPrinter::Print(value, os); } }; template <> class UniversalTersePrinter { public: static void Print(const char* str, ::std::ostream* os) { if (str == NULL) { *os << "NULL"; } else { UniversalPrint(string(str), os); } } }; template <> class UniversalTersePrinter { public: static void Print(char* str, ::std::ostream* os) { UniversalTersePrinter::Print(str, os); } }; #if GTEST_HAS_STD_WSTRING template <> class UniversalTersePrinter { public: static void Print(const wchar_t* str, ::std::ostream* os) { if (str == NULL) { *os << "NULL"; } else { UniversalPrint(::std::wstring(str), os); } } }; #endif template <> class UniversalTersePrinter { public: static void Print(wchar_t* str, ::std::ostream* os) { UniversalTersePrinter::Print(str, os); } }; template void UniversalTersePrint(const T& value, ::std::ostream* os) { UniversalTersePrinter::Print(value, os); } // Prints a value using the type inferred by the compiler. The // difference between this and UniversalTersePrint() is that for a // (const) char pointer, this prints both the pointer and the // NUL-terminated string. template void UniversalPrint(const T& value, ::std::ostream* os) { // A workarond for the bug in VC++ 7.1 that prevents us from instantiating // UniversalPrinter with T directly. typedef T T1; UniversalPrinter::Print(value, os); } #if GTEST_HAS_TR1_TUPLE typedef ::std::vector Strings; // This helper template allows PrintTo() for tuples and // UniversalTersePrintTupleFieldsToStrings() to be defined by // induction on the number of tuple fields. The idea is that // TuplePrefixPrinter::PrintPrefixTo(t, os) prints the first N // fields in tuple t, and can be defined in terms of // TuplePrefixPrinter. // The inductive case. template struct TuplePrefixPrinter { // Prints the first N fields of a tuple. template static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { TuplePrefixPrinter::PrintPrefixTo(t, os); *os << ", "; UniversalPrinter::type> ::Print(::std::tr1::get(t), os); } // Tersely prints the first N fields of a tuple to a string vector, // one element for each field. template static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { TuplePrefixPrinter::TersePrintPrefixToStrings(t, strings); ::std::stringstream ss; UniversalTersePrint(::std::tr1::get(t), &ss); strings->push_back(ss.str()); } }; // Base cases. template <> struct TuplePrefixPrinter<0> { template static void PrintPrefixTo(const Tuple&, ::std::ostream*) {} template static void TersePrintPrefixToStrings(const Tuple&, Strings*) {} }; // We have to specialize the entire TuplePrefixPrinter<> class // template here, even though the definition of // TersePrintPrefixToStrings() is the same as the generic version, as // Embarcadero (formerly CodeGear, formerly Borland) C++ doesn't // support specializing a method template of a class template. template <> struct TuplePrefixPrinter<1> { template static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { UniversalPrinter::type>:: Print(::std::tr1::get<0>(t), os); } template static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { ::std::stringstream ss; UniversalTersePrint(::std::tr1::get<0>(t), &ss); strings->push_back(ss.str()); } }; // Helper function for printing a tuple. T must be instantiated with // a tuple type. template void PrintTupleTo(const T& t, ::std::ostream* os) { *os << "("; TuplePrefixPrinter< ::std::tr1::tuple_size::value>:: PrintPrefixTo(t, os); *os << ")"; } // Prints the fields of a tuple tersely to a string vector, one // element for each field. See the comment before // UniversalTersePrint() for how we define "tersely". template Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) { Strings result; TuplePrefixPrinter< ::std::tr1::tuple_size::value>:: TersePrintPrefixToStrings(value, &result); return result; } #endif // GTEST_HAS_TR1_TUPLE } // namespace internal template ::std::string PrintToString(const T& value) { ::std::stringstream ss; internal::UniversalTersePrinter::Print(value, &ss); return ss.str(); } } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ #if GTEST_HAS_PARAM_TEST namespace testing { namespace internal { // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Outputs a message explaining invalid registration of different // fixture class for the same test case. This may happen when // TEST_P macro is used to define two tests with the same name // but in different namespaces. GTEST_API_ void ReportInvalidTestCaseType(const char* test_case_name, const char* file, int line); template class ParamGeneratorInterface; template class ParamGenerator; // Interface for iterating over elements provided by an implementation // of ParamGeneratorInterface. template class ParamIteratorInterface { public: virtual ~ParamIteratorInterface() {} // A pointer to the base generator instance. // Used only for the purposes of iterator comparison // to make sure that two iterators belong to the same generator. virtual const ParamGeneratorInterface* BaseGenerator() const = 0; // Advances iterator to point to the next element // provided by the generator. The caller is responsible // for not calling Advance() on an iterator equal to // BaseGenerator()->End(). virtual void Advance() = 0; // Clones the iterator object. Used for implementing copy semantics // of ParamIterator. virtual ParamIteratorInterface* Clone() const = 0; // Dereferences the current iterator and provides (read-only) access // to the pointed value. It is the caller's responsibility not to call // Current() on an iterator equal to BaseGenerator()->End(). // Used for implementing ParamGenerator::operator*(). virtual const T* Current() const = 0; // Determines whether the given iterator and other point to the same // element in the sequence generated by the generator. // Used for implementing ParamGenerator::operator==(). virtual bool Equals(const ParamIteratorInterface& other) const = 0; }; // Class iterating over elements provided by an implementation of // ParamGeneratorInterface. It wraps ParamIteratorInterface // and implements the const forward iterator concept. template class ParamIterator { public: typedef T value_type; typedef const T& reference; typedef ptrdiff_t difference_type; // ParamIterator assumes ownership of the impl_ pointer. ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {} ParamIterator& operator=(const ParamIterator& other) { if (this != &other) impl_.reset(other.impl_->Clone()); return *this; } const T& operator*() const { return *impl_->Current(); } const T* operator->() const { return impl_->Current(); } // Prefix version of operator++. ParamIterator& operator++() { impl_->Advance(); return *this; } // Postfix version of operator++. ParamIterator operator++(int /*unused*/) { ParamIteratorInterface* clone = impl_->Clone(); impl_->Advance(); return ParamIterator(clone); } bool operator==(const ParamIterator& other) const { return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_); } bool operator!=(const ParamIterator& other) const { return !(*this == other); } private: friend class ParamGenerator; explicit ParamIterator(ParamIteratorInterface* impl) : impl_(impl) {} scoped_ptr > impl_; }; // ParamGeneratorInterface is the binary interface to access generators // defined in other translation units. template class ParamGeneratorInterface { public: typedef T ParamType; virtual ~ParamGeneratorInterface() {} // Generator interface definition virtual ParamIteratorInterface* Begin() const = 0; virtual ParamIteratorInterface* End() const = 0; }; // Wraps ParamGeneratorInterface and provides general generator syntax // compatible with the STL Container concept. // This class implements copy initialization semantics and the contained // ParamGeneratorInterface instance is shared among all copies // of the original object. This is possible because that instance is immutable. template class ParamGenerator { public: typedef ParamIterator iterator; explicit ParamGenerator(ParamGeneratorInterface* impl) : impl_(impl) {} ParamGenerator(const ParamGenerator& other) : impl_(other.impl_) {} ParamGenerator& operator=(const ParamGenerator& other) { impl_ = other.impl_; return *this; } iterator begin() const { return iterator(impl_->Begin()); } iterator end() const { return iterator(impl_->End()); } private: linked_ptr > impl_; }; // Generates values from a range of two comparable values. Can be used to // generate sequences of user-defined types that implement operator+() and // operator<(). // This class is used in the Range() function. template class RangeGenerator : public ParamGeneratorInterface { public: RangeGenerator(T begin, T end, IncrementT step) : begin_(begin), end_(end), step_(step), end_index_(CalculateEndIndex(begin, end, step)) {} virtual ~RangeGenerator() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, begin_, 0, step_); } virtual ParamIteratorInterface* End() const { return new Iterator(this, end_, end_index_, step_); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, T value, int index, IncrementT step) : base_(base), value_(value), index_(index), step_(step) {} virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } virtual void Advance() { value_ = value_ + step_; index_++; } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const T* Current() const { return &value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const int other_index = CheckedDowncastToActualType(&other)->index_; return index_ == other_index; } private: Iterator(const Iterator& other) : ParamIteratorInterface(), base_(other.base_), value_(other.value_), index_(other.index_), step_(other.step_) {} // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; T value_; int index_; const IncrementT step_; }; // class RangeGenerator::Iterator static int CalculateEndIndex(const T& begin, const T& end, const IncrementT& step) { int end_index = 0; for (T i = begin; i < end; i = i + step) end_index++; return end_index; } // No implementation - assignment is unsupported. void operator=(const RangeGenerator& other); const T begin_; const T end_; const IncrementT step_; // The index for the end() iterator. All the elements in the generated // sequence are indexed (0-based) to aid iterator comparison. const int end_index_; }; // class RangeGenerator // Generates values from a pair of STL-style iterators. Used in the // ValuesIn() function. The elements are copied from the source range // since the source can be located on the stack, and the generator // is likely to persist beyond that stack frame. template class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface { public: template ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end) : container_(begin, end) {} virtual ~ValuesInIteratorRangeGenerator() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, container_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, container_.end()); } private: typedef typename ::std::vector ContainerType; class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, typename ContainerType::const_iterator iterator) : base_(base), iterator_(iterator) {} virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } virtual void Advance() { ++iterator_; value_.reset(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } // We need to use cached value referenced by iterator_ because *iterator_ // can return a temporary object (and of type other then T), so just // having "return &*iterator_;" doesn't work. // value_ is updated here and not in Advance() because Advance() // can advance iterator_ beyond the end of the range, and we cannot // detect that fact. The client code, on the other hand, is // responsible for not calling Current() on an out-of-range iterator. virtual const T* Current() const { if (value_.get() == NULL) value_.reset(new T(*iterator_)); return value_.get(); } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; return iterator_ == CheckedDowncastToActualType(&other)->iterator_; } private: Iterator(const Iterator& other) // The explicit constructor call suppresses a false warning // emitted by gcc when supplied with the -Wextra option. : ParamIteratorInterface(), base_(other.base_), iterator_(other.iterator_) {} const ParamGeneratorInterface* const base_; typename ContainerType::const_iterator iterator_; // A cached value of *iterator_. We keep it here to allow access by // pointer in the wrapping iterator's operator->(). // value_ needs to be mutable to be accessed in Current(). // Use of scoped_ptr helps manage cached value's lifetime, // which is bound by the lifespan of the iterator itself. mutable scoped_ptr value_; }; // class ValuesInIteratorRangeGenerator::Iterator // No implementation - assignment is unsupported. void operator=(const ValuesInIteratorRangeGenerator& other); const ContainerType container_; }; // class ValuesInIteratorRangeGenerator // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Stores a parameter value and later creates tests parameterized with that // value. template class ParameterizedTestFactory : public TestFactoryBase { public: typedef typename TestClass::ParamType ParamType; explicit ParameterizedTestFactory(ParamType parameter) : parameter_(parameter) {} virtual Test* CreateTest() { TestClass::SetParam(¶meter_); return new TestClass(); } private: const ParamType parameter_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory); }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // TestMetaFactoryBase is a base class for meta-factories that create // test factories for passing into MakeAndRegisterTestInfo function. template class TestMetaFactoryBase { public: virtual ~TestMetaFactoryBase() {} virtual TestFactoryBase* CreateTestFactory(ParamType parameter) = 0; }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // TestMetaFactory creates test factories for passing into // MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives // ownership of test factory pointer, same factory object cannot be passed // into that method twice. But ParameterizedTestCaseInfo is going to call // it for each Test/Parameter value combination. Thus it needs meta factory // creator class. template class TestMetaFactory : public TestMetaFactoryBase { public: typedef typename TestCase::ParamType ParamType; TestMetaFactory() {} virtual TestFactoryBase* CreateTestFactory(ParamType parameter) { return new ParameterizedTestFactory(parameter); } private: GTEST_DISALLOW_COPY_AND_ASSIGN_(TestMetaFactory); }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // ParameterizedTestCaseInfoBase is a generic interface // to ParameterizedTestCaseInfo classes. ParameterizedTestCaseInfoBase // accumulates test information provided by TEST_P macro invocations // and generators provided by INSTANTIATE_TEST_CASE_P macro invocations // and uses that information to register all resulting test instances // in RegisterTests method. The ParameterizeTestCaseRegistry class holds // a collection of pointers to the ParameterizedTestCaseInfo objects // and calls RegisterTests() on each of them when asked. class ParameterizedTestCaseInfoBase { public: virtual ~ParameterizedTestCaseInfoBase() {} // Base part of test case name for display purposes. virtual const string& GetTestCaseName() const = 0; // Test case id to verify identity. virtual TypeId GetTestCaseTypeId() const = 0; // UnitTest class invokes this method to register tests in this // test case right before running them in RUN_ALL_TESTS macro. // This method should not be called more then once on any single // instance of a ParameterizedTestCaseInfoBase derived class. virtual void RegisterTests() = 0; protected: ParameterizedTestCaseInfoBase() {} private: GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfoBase); }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // ParameterizedTestCaseInfo accumulates tests obtained from TEST_P // macro invocations for a particular test case and generators // obtained from INSTANTIATE_TEST_CASE_P macro invocations for that // test case. It registers tests with all values generated by all // generators when asked. template class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { public: // ParamType and GeneratorCreationFunc are private types but are required // for declarations of public methods AddTestPattern() and // AddTestCaseInstantiation(). typedef typename TestCase::ParamType ParamType; // A function that returns an instance of appropriate generator type. typedef ParamGenerator(GeneratorCreationFunc)(); explicit ParameterizedTestCaseInfo(const char* name) : test_case_name_(name) {} // Test case base name for display purposes. virtual const string& GetTestCaseName() const { return test_case_name_; } // Test case id to verify identity. virtual TypeId GetTestCaseTypeId() const { return GetTypeId(); } // TEST_P macro uses AddTestPattern() to record information // about a single test in a LocalTestInfo structure. // test_case_name is the base name of the test case (without invocation // prefix). test_base_name is the name of an individual test without // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is // test case base name and DoBar is test base name. void AddTestPattern(const char* test_case_name, const char* test_base_name, TestMetaFactoryBase* meta_factory) { tests_.push_back(linked_ptr(new TestInfo(test_case_name, test_base_name, meta_factory))); } // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information // about a generator. int AddTestCaseInstantiation(const string& instantiation_name, GeneratorCreationFunc* func, const char* /* file */, int /* line */) { instantiations_.push_back(::std::make_pair(instantiation_name, func)); return 0; // Return value used only to run this method in namespace scope. } // UnitTest class invokes this method to register tests in this test case // test cases right before running tests in RUN_ALL_TESTS macro. // This method should not be called more then once on any single // instance of a ParameterizedTestCaseInfoBase derived class. // UnitTest has a guard to prevent from calling this method more then once. virtual void RegisterTests() { for (typename TestInfoContainer::iterator test_it = tests_.begin(); test_it != tests_.end(); ++test_it) { linked_ptr test_info = *test_it; for (typename InstantiationContainer::iterator gen_it = instantiations_.begin(); gen_it != instantiations_.end(); ++gen_it) { const string& instantiation_name = gen_it->first; ParamGenerator generator((*gen_it->second)()); string test_case_name; if ( !instantiation_name.empty() ) test_case_name = instantiation_name + "/"; test_case_name += test_info->test_case_base_name; int i = 0; for (typename ParamGenerator::iterator param_it = generator.begin(); param_it != generator.end(); ++param_it, ++i) { Message test_name_stream; test_name_stream << test_info->test_base_name << "/" << i; MakeAndRegisterTestInfo( test_case_name.c_str(), test_name_stream.GetString().c_str(), NULL, // No type parameter. PrintToString(*param_it).c_str(), GetTestCaseTypeId(), TestCase::SetUpTestCase, TestCase::TearDownTestCase, test_info->test_meta_factory->CreateTestFactory(*param_it)); } // for param_it } // for gen_it } // for test_it } // RegisterTests private: // LocalTestInfo structure keeps information about a single test registered // with TEST_P macro. struct TestInfo { TestInfo(const char* a_test_case_base_name, const char* a_test_base_name, TestMetaFactoryBase* a_test_meta_factory) : test_case_base_name(a_test_case_base_name), test_base_name(a_test_base_name), test_meta_factory(a_test_meta_factory) {} const string test_case_base_name; const string test_base_name; const scoped_ptr > test_meta_factory; }; typedef ::std::vector > TestInfoContainer; // Keeps pairs of // received from INSTANTIATE_TEST_CASE_P macros. typedef ::std::vector > InstantiationContainer; const string test_case_name_; TestInfoContainer tests_; InstantiationContainer instantiations_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfo); }; // class ParameterizedTestCaseInfo // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // ParameterizedTestCaseRegistry contains a map of ParameterizedTestCaseInfoBase // classes accessed by test case names. TEST_P and INSTANTIATE_TEST_CASE_P // macros use it to locate their corresponding ParameterizedTestCaseInfo // descriptors. class ParameterizedTestCaseRegistry { public: ParameterizedTestCaseRegistry() {} ~ParameterizedTestCaseRegistry() { for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); it != test_case_infos_.end(); ++it) { delete *it; } } // Looks up or creates and returns a structure containing information about // tests and instantiations of a particular test case. template ParameterizedTestCaseInfo* GetTestCasePatternHolder( const char* test_case_name, const char* file, int line) { ParameterizedTestCaseInfo* typed_test_info = NULL; for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); it != test_case_infos_.end(); ++it) { if ((*it)->GetTestCaseName() == test_case_name) { if ((*it)->GetTestCaseTypeId() != GetTypeId()) { // Complain about incorrect usage of Google Test facilities // and terminate the program since we cannot guaranty correct // test case setup and tear-down in this case. ReportInvalidTestCaseType(test_case_name, file, line); posix::Abort(); } else { // At this point we are sure that the object we found is of the same // type we are looking for, so we downcast it to that type // without further checks. typed_test_info = CheckedDowncastToActualType< ParameterizedTestCaseInfo >(*it); } break; } } if (typed_test_info == NULL) { typed_test_info = new ParameterizedTestCaseInfo(test_case_name); test_case_infos_.push_back(typed_test_info); } return typed_test_info; } void RegisterTests() { for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); it != test_case_infos_.end(); ++it) { (*it)->RegisterTests(); } } private: typedef ::std::vector TestCaseInfoContainer; TestCaseInfoContainer test_case_infos_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseRegistry); }; } // namespace internal } // namespace testing #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ // This file was GENERATED by command: // pump.py gtest-param-util-generated.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // Type and function utilities for implementing parameterized tests. // This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // // Currently Google Test supports at most 50 arguments in Values, // and at most 10 arguments in Combine. Please contact // googletestframework@googlegroups.com if you need more. // Please note that the number of arguments to Combine is limited // by the maximum arity of the implementation of tr1::tuple which is // currently set at 10. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ // scripts/fuse_gtest.py depends on gtest's own header being #included // *unconditionally*. Therefore these #includes cannot be moved // inside #if GTEST_HAS_PARAM_TEST. #if GTEST_HAS_PARAM_TEST namespace testing { // Forward declarations of ValuesIn(), which is implemented in // include/gtest/gtest-param-test.h. template internal::ParamGenerator< typename ::testing::internal::IteratorTraits::value_type> ValuesIn(ForwardIterator begin, ForwardIterator end); template internal::ParamGenerator ValuesIn(const T (&array)[N]); template internal::ParamGenerator ValuesIn( const Container& container); namespace internal { // Used in the Values() function to provide polymorphic capabilities. template class ValueArray1 { public: explicit ValueArray1(T1 v1) : v1_(v1) {} template operator ParamGenerator() const { return ValuesIn(&v1_, &v1_ + 1); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray1& other); const T1 v1_; }; template class ValueArray2 { public: ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray2& other); const T1 v1_; const T2 v2_; }; template class ValueArray3 { public: ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray3& other); const T1 v1_; const T2 v2_; const T3 v3_; }; template class ValueArray4 { public: ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3), v4_(v4) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray4& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; }; template class ValueArray5 { public: ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray5& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; }; template class ValueArray6 { public: ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray6& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; }; template class ValueArray7 { public: ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray7& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; }; template class ValueArray8 { public: ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray8& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; }; template class ValueArray9 { public: ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray9& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; }; template class ValueArray10 { public: ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray10& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; }; template class ValueArray11 { public: ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray11& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; }; template class ValueArray12 { public: ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray12& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; }; template class ValueArray13 { public: ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray13& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; }; template class ValueArray14 { public: ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray14& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; }; template class ValueArray15 { public: ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray15& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; }; template class ValueArray16 { public: ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray16& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; }; template class ValueArray17 { public: ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray17& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; }; template class ValueArray18 { public: ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray18& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; }; template class ValueArray19 { public: ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray19& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; }; template class ValueArray20 { public: ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray20& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; }; template class ValueArray21 { public: ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray21& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; }; template class ValueArray22 { public: ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray22& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; }; template class ValueArray23 { public: ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray23& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; }; template class ValueArray24 { public: ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray24& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; }; template class ValueArray25 { public: ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray25& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; }; template class ValueArray26 { public: ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray26& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; }; template class ValueArray27 { public: ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray27& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; }; template class ValueArray28 { public: ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray28& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; }; template class ValueArray29 { public: ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray29& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; }; template class ValueArray30 { public: ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray30& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; }; template class ValueArray31 { public: ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray31& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; }; template class ValueArray32 { public: ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray32& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; }; template class ValueArray33 { public: ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray33& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; }; template class ValueArray34 { public: ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray34& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; }; template class ValueArray35 { public: ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray35& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; }; template class ValueArray36 { public: ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray36& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; }; template class ValueArray37 { public: ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray37& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; }; template class ValueArray38 { public: ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray38& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; }; template class ValueArray39 { public: ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray39& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; }; template class ValueArray40 { public: ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray40& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; }; template class ValueArray41 { public: ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray41& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; }; template class ValueArray42 { public: ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray42& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; }; template class ValueArray43 { public: ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray43& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; }; template class ValueArray44 { public: ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray44& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; }; template class ValueArray45 { public: ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray45& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; }; template class ValueArray46 { public: ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_), static_cast(v46_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray46& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; }; template class ValueArray47 { public: ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_), static_cast(v46_), static_cast(v47_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray47& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; }; template class ValueArray48 { public: ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47), v48_(v48) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_), static_cast(v46_), static_cast(v47_), static_cast(v48_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray48& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; const T48 v48_; }; template class ValueArray49 { public: ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_), static_cast(v46_), static_cast(v47_), static_cast(v48_), static_cast(v49_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray49& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; const T48 v48_; const T49 v49_; }; template class ValueArray50 { public: ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_), static_cast(v46_), static_cast(v47_), static_cast(v48_), static_cast(v49_), static_cast(v50_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray50& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; const T48 v48_; const T49 v49_; const T50 v50_; }; # if GTEST_HAS_COMBINE // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Generates values from the Cartesian product of values produced // by the argument generators. // template class CartesianProductGenerator2 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator2(const ParamGenerator& g1, const ParamGenerator& g2) : g1_(g1), g2_(g2) {} virtual ~CartesianProductGenerator2() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current2_; if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; ParamType current_value_; }; // class CartesianProductGenerator2::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator2& other); const ParamGenerator g1_; const ParamGenerator g2_; }; // class CartesianProductGenerator2 template class CartesianProductGenerator3 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator3(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3) : g1_(g1), g2_(g2), g3_(g3) {} virtual ~CartesianProductGenerator3() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current3_; if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; ParamType current_value_; }; // class CartesianProductGenerator3::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator3& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; }; // class CartesianProductGenerator3 template class CartesianProductGenerator4 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator4(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4) : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} virtual ~CartesianProductGenerator4() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current4_; if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; ParamType current_value_; }; // class CartesianProductGenerator4::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator4& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; }; // class CartesianProductGenerator4 template class CartesianProductGenerator5 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator5(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} virtual ~CartesianProductGenerator5() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current5_; if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; ParamType current_value_; }; // class CartesianProductGenerator5::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator5& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; }; // class CartesianProductGenerator5 template class CartesianProductGenerator6 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator6(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} virtual ~CartesianProductGenerator6() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current6_; if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; ParamType current_value_; }; // class CartesianProductGenerator6::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator6& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; }; // class CartesianProductGenerator6 template class CartesianProductGenerator7 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator7(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} virtual ~CartesianProductGenerator7() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current7_; if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; ParamType current_value_; }; // class CartesianProductGenerator7::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator7& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; }; // class CartesianProductGenerator7 template class CartesianProductGenerator8 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator8(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7, const ParamGenerator& g8) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8) {} virtual ~CartesianProductGenerator8() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin(), g8_, g8_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, g8_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7, const ParamGenerator& g8, const typename ParamGenerator::iterator& current8) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7), begin8_(g8.begin()), end8_(g8.end()), current8_(current8) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current8_; if (current8_ == end8_) { current8_ = begin8_; ++current7_; } if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_ && current8_ == typed_other->current8_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_), begin8_(other.begin8_), end8_(other.end8_), current8_(other.current8_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_, *current8_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_ || current8_ == end8_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; const typename ParamGenerator::iterator begin8_; const typename ParamGenerator::iterator end8_; typename ParamGenerator::iterator current8_; ParamType current_value_; }; // class CartesianProductGenerator8::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator8& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; const ParamGenerator g8_; }; // class CartesianProductGenerator8 template class CartesianProductGenerator9 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator9(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7, const ParamGenerator& g8, const ParamGenerator& g9) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9) {} virtual ~CartesianProductGenerator9() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, g8_.end(), g9_, g9_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7, const ParamGenerator& g8, const typename ParamGenerator::iterator& current8, const ParamGenerator& g9, const typename ParamGenerator::iterator& current9) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7), begin8_(g8.begin()), end8_(g8.end()), current8_(current8), begin9_(g9.begin()), end9_(g9.end()), current9_(current9) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current9_; if (current9_ == end9_) { current9_ = begin9_; ++current8_; } if (current8_ == end8_) { current8_ = begin8_; ++current7_; } if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_ && current8_ == typed_other->current8_ && current9_ == typed_other->current9_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_), begin8_(other.begin8_), end8_(other.end8_), current8_(other.current8_), begin9_(other.begin9_), end9_(other.end9_), current9_(other.current9_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_, *current8_, *current9_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_ || current8_ == end8_ || current9_ == end9_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; const typename ParamGenerator::iterator begin8_; const typename ParamGenerator::iterator end8_; typename ParamGenerator::iterator current8_; const typename ParamGenerator::iterator begin9_; const typename ParamGenerator::iterator end9_; typename ParamGenerator::iterator current9_; ParamType current_value_; }; // class CartesianProductGenerator9::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator9& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; const ParamGenerator g8_; const ParamGenerator g9_; }; // class CartesianProductGenerator9 template class CartesianProductGenerator10 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator10(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7, const ParamGenerator& g8, const ParamGenerator& g9, const ParamGenerator& g10) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9), g10_(g10) {} virtual ~CartesianProductGenerator10() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, g8_.end(), g9_, g9_.end(), g10_, g10_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7, const ParamGenerator& g8, const typename ParamGenerator::iterator& current8, const ParamGenerator& g9, const typename ParamGenerator::iterator& current9, const ParamGenerator& g10, const typename ParamGenerator::iterator& current10) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7), begin8_(g8.begin()), end8_(g8.end()), current8_(current8), begin9_(g9.begin()), end9_(g9.end()), current9_(current9), begin10_(g10.begin()), end10_(g10.end()), current10_(current10) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current10_; if (current10_ == end10_) { current10_ = begin10_; ++current9_; } if (current9_ == end9_) { current9_ = begin9_; ++current8_; } if (current8_ == end8_) { current8_ = begin8_; ++current7_; } if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_ && current8_ == typed_other->current8_ && current9_ == typed_other->current9_ && current10_ == typed_other->current10_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_), begin8_(other.begin8_), end8_(other.end8_), current8_(other.current8_), begin9_(other.begin9_), end9_(other.end9_), current9_(other.current9_), begin10_(other.begin10_), end10_(other.end10_), current10_(other.current10_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_, *current8_, *current9_, *current10_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_ || current8_ == end8_ || current9_ == end9_ || current10_ == end10_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; const typename ParamGenerator::iterator begin8_; const typename ParamGenerator::iterator end8_; typename ParamGenerator::iterator current8_; const typename ParamGenerator::iterator begin9_; const typename ParamGenerator::iterator end9_; typename ParamGenerator::iterator current9_; const typename ParamGenerator::iterator begin10_; const typename ParamGenerator::iterator end10_; typename ParamGenerator::iterator current10_; ParamType current_value_; }; // class CartesianProductGenerator10::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator10& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; const ParamGenerator g8_; const ParamGenerator g9_; const ParamGenerator g10_; }; // class CartesianProductGenerator10 // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Helper classes providing Combine() with polymorphic features. They allow // casting CartesianProductGeneratorN to ParamGenerator if T is // convertible to U. // template class CartesianProductHolder2 { public: CartesianProductHolder2(const Generator1& g1, const Generator2& g2) : g1_(g1), g2_(g2) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator2( static_cast >(g1_), static_cast >(g2_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder2& other); const Generator1 g1_; const Generator2 g2_; }; // class CartesianProductHolder2 template class CartesianProductHolder3 { public: CartesianProductHolder3(const Generator1& g1, const Generator2& g2, const Generator3& g3) : g1_(g1), g2_(g2), g3_(g3) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator3( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder3& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; }; // class CartesianProductHolder3 template class CartesianProductHolder4 { public: CartesianProductHolder4(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4) : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator4( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder4& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; }; // class CartesianProductHolder4 template class CartesianProductHolder5 { public: CartesianProductHolder5(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator5( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder5& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; }; // class CartesianProductHolder5 template class CartesianProductHolder6 { public: CartesianProductHolder6(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator6( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder6& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; }; // class CartesianProductHolder6 template class CartesianProductHolder7 { public: CartesianProductHolder7(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator7( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder7& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; }; // class CartesianProductHolder7 template class CartesianProductHolder8 { public: CartesianProductHolder8(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator8( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_), static_cast >(g8_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder8& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; const Generator8 g8_; }; // class CartesianProductHolder8 template class CartesianProductHolder9 { public: CartesianProductHolder9(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator9( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_), static_cast >(g8_), static_cast >(g9_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder9& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; const Generator8 g8_; const Generator9 g9_; }; // class CartesianProductHolder9 template class CartesianProductHolder10 { public: CartesianProductHolder10(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9, const Generator10& g10) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9), g10_(g10) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator10( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_), static_cast >(g8_), static_cast >(g9_), static_cast >(g10_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder10& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; const Generator8 g8_; const Generator9 g9_; const Generator10 g10_; }; // class CartesianProductHolder10 # endif // GTEST_HAS_COMBINE } // namespace internal } // namespace testing #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ #if GTEST_HAS_PARAM_TEST namespace testing { // Functions producing parameter generators. // // Google Test uses these generators to produce parameters for value- // parameterized tests. When a parameterized test case is instantiated // with a particular generator, Google Test creates and runs tests // for each element in the sequence produced by the generator. // // In the following sample, tests from test case FooTest are instantiated // each three times with parameter values 3, 5, and 8: // // class FooTest : public TestWithParam { ... }; // // TEST_P(FooTest, TestThis) { // } // TEST_P(FooTest, TestThat) { // } // INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); // // Range() returns generators providing sequences of values in a range. // // Synopsis: // Range(start, end) // - returns a generator producing a sequence of values {start, start+1, // start+2, ..., }. // Range(start, end, step) // - returns a generator producing a sequence of values {start, start+step, // start+step+step, ..., }. // Notes: // * The generated sequences never include end. For example, Range(1, 5) // returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) // returns a generator producing {1, 3, 5, 7}. // * start and end must have the same type. That type may be any integral or // floating-point type or a user defined type satisfying these conditions: // * It must be assignable (have operator=() defined). // * It must have operator+() (operator+(int-compatible type) for // two-operand version). // * It must have operator<() defined. // Elements in the resulting sequences will also have that type. // * Condition start < end must be satisfied in order for resulting sequences // to contain any elements. // template internal::ParamGenerator Range(T start, T end, IncrementT step) { return internal::ParamGenerator( new internal::RangeGenerator(start, end, step)); } template internal::ParamGenerator Range(T start, T end) { return Range(start, end, 1); } // ValuesIn() function allows generation of tests with parameters coming from // a container. // // Synopsis: // ValuesIn(const T (&array)[N]) // - returns a generator producing sequences with elements from // a C-style array. // ValuesIn(const Container& container) // - returns a generator producing sequences with elements from // an STL-style container. // ValuesIn(Iterator begin, Iterator end) // - returns a generator producing sequences with elements from // a range [begin, end) defined by a pair of STL-style iterators. These // iterators can also be plain C pointers. // // Please note that ValuesIn copies the values from the containers // passed in and keeps them to generate tests in RUN_ALL_TESTS(). // // Examples: // // This instantiates tests from test case StringTest // each with C-string values of "foo", "bar", and "baz": // // const char* strings[] = {"foo", "bar", "baz"}; // INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings)); // // This instantiates tests from test case StlStringTest // each with STL strings with values "a" and "b": // // ::std::vector< ::std::string> GetParameterStrings() { // ::std::vector< ::std::string> v; // v.push_back("a"); // v.push_back("b"); // return v; // } // // INSTANTIATE_TEST_CASE_P(CharSequence, // StlStringTest, // ValuesIn(GetParameterStrings())); // // // This will also instantiate tests from CharTest // each with parameter values 'a' and 'b': // // ::std::list GetParameterChars() { // ::std::list list; // list.push_back('a'); // list.push_back('b'); // return list; // } // ::std::list l = GetParameterChars(); // INSTANTIATE_TEST_CASE_P(CharSequence2, // CharTest, // ValuesIn(l.begin(), l.end())); // template internal::ParamGenerator< typename ::testing::internal::IteratorTraits::value_type> ValuesIn(ForwardIterator begin, ForwardIterator end) { typedef typename ::testing::internal::IteratorTraits ::value_type ParamType; return internal::ParamGenerator( new internal::ValuesInIteratorRangeGenerator(begin, end)); } template internal::ParamGenerator ValuesIn(const T (&array)[N]) { return ValuesIn(array, array + N); } template internal::ParamGenerator ValuesIn( const Container& container) { return ValuesIn(container.begin(), container.end()); } // Values() allows generating tests from explicitly specified list of // parameters. // // Synopsis: // Values(T v1, T v2, ..., T vN) // - returns a generator producing sequences with elements v1, v2, ..., vN. // // For example, this instantiates tests from test case BarTest each // with values "one", "two", and "three": // // INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); // // This instantiates tests from test case BazTest each with values 1, 2, 3.5. // The exact type of values will depend on the type of parameter in BazTest. // // INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); // // Currently, Values() supports from 1 to 50 parameters. // template internal::ValueArray1 Values(T1 v1) { return internal::ValueArray1(v1); } template internal::ValueArray2 Values(T1 v1, T2 v2) { return internal::ValueArray2(v1, v2); } template internal::ValueArray3 Values(T1 v1, T2 v2, T3 v3) { return internal::ValueArray3(v1, v2, v3); } template internal::ValueArray4 Values(T1 v1, T2 v2, T3 v3, T4 v4) { return internal::ValueArray4(v1, v2, v3, v4); } template internal::ValueArray5 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) { return internal::ValueArray5(v1, v2, v3, v4, v5); } template internal::ValueArray6 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) { return internal::ValueArray6(v1, v2, v3, v4, v5, v6); } template internal::ValueArray7 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) { return internal::ValueArray7(v1, v2, v3, v4, v5, v6, v7); } template internal::ValueArray8 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) { return internal::ValueArray8(v1, v2, v3, v4, v5, v6, v7, v8); } template internal::ValueArray9 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) { return internal::ValueArray9(v1, v2, v3, v4, v5, v6, v7, v8, v9); } template internal::ValueArray10 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) { return internal::ValueArray10(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); } template internal::ValueArray11 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11) { return internal::ValueArray11(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); } template internal::ValueArray12 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12) { return internal::ValueArray12(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12); } template internal::ValueArray13 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13) { return internal::ValueArray13(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); } template internal::ValueArray14 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) { return internal::ValueArray14(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14); } template internal::ValueArray15 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) { return internal::ValueArray15(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15); } template internal::ValueArray16 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) { return internal::ValueArray16(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16); } template internal::ValueArray17 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17) { return internal::ValueArray17(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17); } template internal::ValueArray18 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18) { return internal::ValueArray18(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18); } template internal::ValueArray19 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) { return internal::ValueArray19(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19); } template internal::ValueArray20 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) { return internal::ValueArray20(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20); } template internal::ValueArray21 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) { return internal::ValueArray21(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21); } template internal::ValueArray22 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) { return internal::ValueArray22(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22); } template internal::ValueArray23 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) { return internal::ValueArray23(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23); } template internal::ValueArray24 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) { return internal::ValueArray24(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24); } template internal::ValueArray25 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) { return internal::ValueArray25(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25); } template internal::ValueArray26 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26) { return internal::ValueArray26(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26); } template internal::ValueArray27 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27) { return internal::ValueArray27(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27); } template internal::ValueArray28 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28) { return internal::ValueArray28(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28); } template internal::ValueArray29 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29) { return internal::ValueArray29(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29); } template internal::ValueArray30 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) { return internal::ValueArray30(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30); } template internal::ValueArray31 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) { return internal::ValueArray31(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31); } template internal::ValueArray32 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) { return internal::ValueArray32(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32); } template internal::ValueArray33 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33) { return internal::ValueArray33(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33); } template internal::ValueArray34 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34) { return internal::ValueArray34(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34); } template internal::ValueArray35 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) { return internal::ValueArray35(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35); } template internal::ValueArray36 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) { return internal::ValueArray36(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36); } template internal::ValueArray37 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37) { return internal::ValueArray37(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37); } template internal::ValueArray38 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) { return internal::ValueArray38(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38); } template internal::ValueArray39 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) { return internal::ValueArray39(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39); } template internal::ValueArray40 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) { return internal::ValueArray40(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40); } template internal::ValueArray41 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) { return internal::ValueArray41(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41); } template internal::ValueArray42 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42) { return internal::ValueArray42(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42); } template internal::ValueArray43 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43) { return internal::ValueArray43(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43); } template internal::ValueArray44 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44) { return internal::ValueArray44(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44); } template internal::ValueArray45 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) { return internal::ValueArray45(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45); } template internal::ValueArray46 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) { return internal::ValueArray46(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46); } template internal::ValueArray47 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) { return internal::ValueArray47(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47); } template internal::ValueArray48 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) { return internal::ValueArray48(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48); } template internal::ValueArray49 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49) { return internal::ValueArray49(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49); } template internal::ValueArray50 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) { return internal::ValueArray50(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50); } // Bool() allows generating tests with parameters in a set of (false, true). // // Synopsis: // Bool() // - returns a generator producing sequences with elements {false, true}. // // It is useful when testing code that depends on Boolean flags. Combinations // of multiple flags can be tested when several Bool()'s are combined using // Combine() function. // // In the following example all tests in the test case FlagDependentTest // will be instantiated twice with parameters false and true. // // class FlagDependentTest : public testing::TestWithParam { // virtual void SetUp() { // external_flag = GetParam(); // } // } // INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); // inline internal::ParamGenerator Bool() { return Values(false, true); } # if GTEST_HAS_COMBINE // Combine() allows the user to combine two or more sequences to produce // values of a Cartesian product of those sequences' elements. // // Synopsis: // Combine(gen1, gen2, ..., genN) // - returns a generator producing sequences with elements coming from // the Cartesian product of elements from the sequences generated by // gen1, gen2, ..., genN. The sequence elements will have a type of // tuple where T1, T2, ..., TN are the types // of elements from sequences produces by gen1, gen2, ..., genN. // // Combine can have up to 10 arguments. This number is currently limited // by the maximum number of elements in the tuple implementation used by Google // Test. // // Example: // // This will instantiate tests in test case AnimalTest each one with // the parameter values tuple("cat", BLACK), tuple("cat", WHITE), // tuple("dog", BLACK), and tuple("dog", WHITE): // // enum Color { BLACK, GRAY, WHITE }; // class AnimalTest // : public testing::TestWithParam > {...}; // // TEST_P(AnimalTest, AnimalLooksNice) {...} // // INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, // Combine(Values("cat", "dog"), // Values(BLACK, WHITE))); // // This will instantiate tests in FlagDependentTest with all variations of two // Boolean flags: // // class FlagDependentTest // : public testing::TestWithParam > { // virtual void SetUp() { // // Assigns external_flag_1 and external_flag_2 values from the tuple. // tie(external_flag_1, external_flag_2) = GetParam(); // } // }; // // TEST_P(FlagDependentTest, TestFeature1) { // // Test your code using external_flag_1 and external_flag_2 here. // } // INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, // Combine(Bool(), Bool())); // template internal::CartesianProductHolder2 Combine( const Generator1& g1, const Generator2& g2) { return internal::CartesianProductHolder2( g1, g2); } template internal::CartesianProductHolder3 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3) { return internal::CartesianProductHolder3( g1, g2, g3); } template internal::CartesianProductHolder4 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4) { return internal::CartesianProductHolder4( g1, g2, g3, g4); } template internal::CartesianProductHolder5 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5) { return internal::CartesianProductHolder5( g1, g2, g3, g4, g5); } template internal::CartesianProductHolder6 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6) { return internal::CartesianProductHolder6( g1, g2, g3, g4, g5, g6); } template internal::CartesianProductHolder7 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7) { return internal::CartesianProductHolder7( g1, g2, g3, g4, g5, g6, g7); } template internal::CartesianProductHolder8 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8) { return internal::CartesianProductHolder8( g1, g2, g3, g4, g5, g6, g7, g8); } template internal::CartesianProductHolder9 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9) { return internal::CartesianProductHolder9( g1, g2, g3, g4, g5, g6, g7, g8, g9); } template internal::CartesianProductHolder10 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9, const Generator10& g10) { return internal::CartesianProductHolder10( g1, g2, g3, g4, g5, g6, g7, g8, g9, g10); } # endif // GTEST_HAS_COMBINE # define TEST_P(test_case_name, test_name) \ class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ : public test_case_name { \ public: \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ virtual void TestBody(); \ private: \ static int AddToRegistry() { \ ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ GetTestCasePatternHolder(\ #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ #test_case_name, \ #test_name, \ new ::testing::internal::TestMetaFactory< \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ return 0; \ } \ static int gtest_registering_dummy_; \ GTEST_DISALLOW_COPY_AND_ASSIGN_(\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ }; \ int GTEST_TEST_CLASS_NAME_(test_case_name, \ test_name)::gtest_registering_dummy_ = \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() # define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ ::testing::internal::ParamGenerator \ gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ int gtest_##prefix##test_case_name##_dummy_ = \ ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ GetTestCasePatternHolder(\ #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ #prefix, \ >est_##prefix##test_case_name##_EvalGenerator_, \ __FILE__, __LINE__) } // namespace testing #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ // Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // Google C++ Testing Framework definitions useful in production code. #ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ #define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ // When you need to test the private or protected members of a class, // use the FRIEND_TEST macro to declare your tests as friends of the // class. For example: // // class MyClass { // private: // void MyMethod(); // FRIEND_TEST(MyClassTest, MyMethod); // }; // // class MyClassTest : public testing::Test { // // ... // }; // // TEST_F(MyClassTest, MyMethod) { // // Can call MyClass::MyMethod() here. // } #define FRIEND_TEST(test_case_name, test_name)\ friend class test_case_name##_##test_name##_Test #endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_ // Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: mheule@google.com (Markus Heule) // #ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ #define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ #include #include namespace testing { // A copyable object representing the result of a test part (i.e. an // assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()). // // Don't inherit from TestPartResult as its destructor is not virtual. class GTEST_API_ TestPartResult { public: // The possible outcomes of a test part (i.e. an assertion or an // explicit SUCCEED(), FAIL(), or ADD_FAILURE()). enum Type { kSuccess, // Succeeded. kNonFatalFailure, // Failed but the test can continue. kFatalFailure // Failed and the test should be terminated. }; // C'tor. TestPartResult does NOT have a default constructor. // Always use this constructor (with parameters) to create a // TestPartResult object. TestPartResult(Type a_type, const char* a_file_name, int a_line_number, const char* a_message) : type_(a_type), file_name_(a_file_name == NULL ? "" : a_file_name), line_number_(a_line_number), summary_(ExtractSummary(a_message)), message_(a_message) { } // Gets the outcome of the test part. Type type() const { return type_; } // Gets the name of the source file where the test part took place, or // NULL if it's unknown. const char* file_name() const { return file_name_.empty() ? NULL : file_name_.c_str(); } // Gets the line in the source file where the test part took place, // or -1 if it's unknown. int line_number() const { return line_number_; } // Gets the summary of the failure message. const char* summary() const { return summary_.c_str(); } // Gets the message associated with the test part. const char* message() const { return message_.c_str(); } // Returns true iff the test part passed. bool passed() const { return type_ == kSuccess; } // Returns true iff the test part failed. bool failed() const { return type_ != kSuccess; } // Returns true iff the test part non-fatally failed. bool nonfatally_failed() const { return type_ == kNonFatalFailure; } // Returns true iff the test part fatally failed. bool fatally_failed() const { return type_ == kFatalFailure; } private: Type type_; // Gets the summary of the failure message by omitting the stack // trace in it. static std::string ExtractSummary(const char* message); // The name of the source file where the test part took place, or // "" if the source file is unknown. std::string file_name_; // The line in the source file where the test part took place, or -1 // if the line number is unknown. int line_number_; std::string summary_; // The test failure summary. std::string message_; // The test failure message. }; // Prints a TestPartResult object. std::ostream& operator<<(std::ostream& os, const TestPartResult& result); // An array of TestPartResult objects. // // Don't inherit from TestPartResultArray as its destructor is not // virtual. class GTEST_API_ TestPartResultArray { public: TestPartResultArray() {} // Appends the given TestPartResult to the array. void Append(const TestPartResult& result); // Returns the TestPartResult at the given index (0-based). const TestPartResult& GetTestPartResult(int index) const; // Returns the number of TestPartResult objects in the array. int size() const; private: std::vector array_; GTEST_DISALLOW_COPY_AND_ASSIGN_(TestPartResultArray); }; // This interface knows how to report a test part result. class TestPartResultReporterInterface { public: virtual ~TestPartResultReporterInterface() {} virtual void ReportTestPartResult(const TestPartResult& result) = 0; }; namespace internal { // This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a // statement generates new fatal failures. To do so it registers itself as the // current test part result reporter. Besides checking if fatal failures were // reported, it only delegates the reporting to the former result reporter. // The original result reporter is restored in the destructor. // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. class GTEST_API_ HasNewFatalFailureHelper : public TestPartResultReporterInterface { public: HasNewFatalFailureHelper(); virtual ~HasNewFatalFailureHelper(); virtual void ReportTestPartResult(const TestPartResult& result); bool has_new_fatal_failure() const { return has_new_fatal_failure_; } private: bool has_new_fatal_failure_; TestPartResultReporterInterface* original_reporter_; GTEST_DISALLOW_COPY_AND_ASSIGN_(HasNewFatalFailureHelper); }; } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ // Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ // This header implements typed tests and type-parameterized tests. // Typed (aka type-driven) tests repeat the same test for types in a // list. You must know which types you want to test with when writing // typed tests. Here's how you do it: #if 0 // First, define a fixture class template. It should be parameterized // by a type. Remember to derive it from testing::Test. template class FooTest : public testing::Test { public: ... typedef std::list List; static T shared_; T value_; }; // Next, associate a list of types with the test case, which will be // repeated for each type in the list. The typedef is necessary for // the macro to parse correctly. typedef testing::Types MyTypes; TYPED_TEST_CASE(FooTest, MyTypes); // If the type list contains only one type, you can write that type // directly without Types<...>: // TYPED_TEST_CASE(FooTest, int); // Then, use TYPED_TEST() instead of TEST_F() to define as many typed // tests for this test case as you want. TYPED_TEST(FooTest, DoesBlah) { // Inside a test, refer to TypeParam to get the type parameter. // Since we are inside a derived class template, C++ requires use to // visit the members of FooTest via 'this'. TypeParam n = this->value_; // To visit static members of the fixture, add the TestFixture:: // prefix. n += TestFixture::shared_; // To refer to typedefs in the fixture, add the "typename // TestFixture::" prefix. typename TestFixture::List values; values.push_back(n); ... } TYPED_TEST(FooTest, HasPropertyA) { ... } #endif // 0 // Type-parameterized tests are abstract test patterns parameterized // by a type. Compared with typed tests, type-parameterized tests // allow you to define the test pattern without knowing what the type // parameters are. The defined pattern can be instantiated with // different types any number of times, in any number of translation // units. // // If you are designing an interface or concept, you can define a // suite of type-parameterized tests to verify properties that any // valid implementation of the interface/concept should have. Then, // each implementation can easily instantiate the test suite to verify // that it conforms to the requirements, without having to write // similar tests repeatedly. Here's an example: #if 0 // First, define a fixture class template. It should be parameterized // by a type. Remember to derive it from testing::Test. template class FooTest : public testing::Test { ... }; // Next, declare that you will define a type-parameterized test case // (the _P suffix is for "parameterized" or "pattern", whichever you // prefer): TYPED_TEST_CASE_P(FooTest); // Then, use TYPED_TEST_P() to define as many type-parameterized tests // for this type-parameterized test case as you want. TYPED_TEST_P(FooTest, DoesBlah) { // Inside a test, refer to TypeParam to get the type parameter. TypeParam n = 0; ... } TYPED_TEST_P(FooTest, HasPropertyA) { ... } // Now the tricky part: you need to register all test patterns before // you can instantiate them. The first argument of the macro is the // test case name; the rest are the names of the tests in this test // case. REGISTER_TYPED_TEST_CASE_P(FooTest, DoesBlah, HasPropertyA); // Finally, you are free to instantiate the pattern with the types you // want. If you put the above code in a header file, you can #include // it in multiple C++ source files and instantiate it multiple times. // // To distinguish different instances of the pattern, the first // argument to the INSTANTIATE_* macro is a prefix that will be added // to the actual test case name. Remember to pick unique prefixes for // different instances. typedef testing::Types MyTypes; INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes); // If the type list contains only one type, you can write that type // directly without Types<...>: // INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, int); #endif // 0 // Implements typed tests. #if GTEST_HAS_TYPED_TEST // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the name of the typedef for the type parameters of the // given test case. # define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_ // The 'Types' template argument below must have spaces around it // since some compilers may choke on '>>' when passing a template // instance (e.g. Types) # define TYPED_TEST_CASE(CaseName, Types) \ typedef ::testing::internal::TypeList< Types >::type \ GTEST_TYPE_PARAMS_(CaseName) # define TYPED_TEST(CaseName, TestName) \ template \ class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ : public CaseName { \ private: \ typedef CaseName TestFixture; \ typedef gtest_TypeParam_ TypeParam; \ virtual void TestBody(); \ }; \ bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \ ::testing::internal::TypeParameterizedTest< \ CaseName, \ ::testing::internal::TemplateSel< \ GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \ GTEST_TYPE_PARAMS_(CaseName)>::Register(\ "", #CaseName, #TestName, 0); \ template \ void GTEST_TEST_CLASS_NAME_(CaseName, TestName)::TestBody() #endif // GTEST_HAS_TYPED_TEST // Implements type-parameterized tests. #if GTEST_HAS_TYPED_TEST_P // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the namespace name that the type-parameterized tests for // the given type-parameterized test case are defined in. The exact // name of the namespace is subject to change without notice. # define GTEST_CASE_NAMESPACE_(TestCaseName) \ gtest_case_##TestCaseName##_ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the name of the variable used to remember the names of // the defined tests in the given test case. # define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \ gtest_typed_test_case_p_state_##TestCaseName##_ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY. // // Expands to the name of the variable used to remember the names of // the registered tests in the given test case. # define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \ gtest_registered_test_names_##TestCaseName##_ // The variables defined in the type-parameterized test macros are // static as typically these macros are used in a .h file that can be // #included in multiple translation units linked together. # define TYPED_TEST_CASE_P(CaseName) \ static ::testing::internal::TypedTestCasePState \ GTEST_TYPED_TEST_CASE_P_STATE_(CaseName) # define TYPED_TEST_P(CaseName, TestName) \ namespace GTEST_CASE_NAMESPACE_(CaseName) { \ template \ class TestName : public CaseName { \ private: \ typedef CaseName TestFixture; \ typedef gtest_TypeParam_ TypeParam; \ virtual void TestBody(); \ }; \ static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \ GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\ __FILE__, __LINE__, #CaseName, #TestName); \ } \ template \ void GTEST_CASE_NAMESPACE_(CaseName)::TestName::TestBody() # define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \ namespace GTEST_CASE_NAMESPACE_(CaseName) { \ typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ } \ static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \ GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\ __FILE__, __LINE__, #__VA_ARGS__) // The 'Types' template argument below must have spaces around it // since some compilers may choke on '>>' when passing a template // instance (e.g. Types) # define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \ bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \ ::testing::internal::TypeParameterizedTestCase::type>::Register(\ #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName)) #endif // GTEST_HAS_TYPED_TEST_P #endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ // Depending on the platform, different string classes are available. // On Linux, in addition to ::std::string, Google also makes use of // class ::string, which has the same interface as ::std::string, but // has a different implementation. // // The user can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that // ::string is available AND is a distinct type to ::std::string, or // define it to 0 to indicate otherwise. // // If the user's ::std::string and ::string are the same class due to // aliasing, he should define GTEST_HAS_GLOBAL_STRING to 0. // // If the user doesn't define GTEST_HAS_GLOBAL_STRING, it is defined // heuristically. namespace testing { // Declares the flags. // This flag temporary enables the disabled tests. GTEST_DECLARE_bool_(also_run_disabled_tests); // This flag brings the debugger on an assertion failure. GTEST_DECLARE_bool_(break_on_failure); // This flag controls whether Google Test catches all test-thrown exceptions // and logs them as failures. GTEST_DECLARE_bool_(catch_exceptions); // This flag enables using colors in terminal output. Available values are // "yes" to enable colors, "no" (disable colors), or "auto" (the default) // to let Google Test decide. GTEST_DECLARE_string_(color); // This flag sets up the filter to select by name using a glob pattern // the tests to run. If the filter is not given all tests are executed. GTEST_DECLARE_string_(filter); // This flag causes the Google Test to list tests. None of the tests listed // are actually run if the flag is provided. GTEST_DECLARE_bool_(list_tests); // This flag controls whether Google Test emits a detailed XML report to a file // in addition to its normal textual output. GTEST_DECLARE_string_(output); // This flags control whether Google Test prints the elapsed time for each // test. GTEST_DECLARE_bool_(print_time); // This flag specifies the random number seed. GTEST_DECLARE_int32_(random_seed); // This flag sets how many times the tests are repeated. The default value // is 1. If the value is -1 the tests are repeating forever. GTEST_DECLARE_int32_(repeat); // This flag controls whether Google Test includes Google Test internal // stack frames in failure stack traces. GTEST_DECLARE_bool_(show_internal_stack_frames); // When this flag is specified, tests' order is randomized on every iteration. GTEST_DECLARE_bool_(shuffle); // This flag specifies the maximum number of stack frames to be // printed in a failure message. GTEST_DECLARE_int32_(stack_trace_depth); // When this flag is specified, a failed assertion will throw an // exception if exceptions are enabled, or exit the program with a // non-zero code otherwise. GTEST_DECLARE_bool_(throw_on_failure); // When this flag is set with a "host:port" string, on supported // platforms test results are streamed to the specified port on // the specified host machine. GTEST_DECLARE_string_(stream_result_to); // The upper limit for valid stack trace depths. const int kMaxStackTraceDepth = 100; namespace internal { class AssertHelper; class DefaultGlobalTestPartResultReporter; class ExecDeathTest; class NoExecDeathTest; class FinalSuccessChecker; class GTestFlagSaver; class StreamingListenerTest; class TestResultAccessor; class TestEventListenersAccessor; class TestEventRepeater; class UnitTestRecordPropertyTestHelper; class WindowsDeathTest; class UnitTestImpl* GetUnitTestImpl(); void ReportFailureInUnknownLocation(TestPartResult::Type result_type, const std::string& message); } // namespace internal // The friend relationship of some of these classes is cyclic. // If we don't forward declare them the compiler might confuse the classes // in friendship clauses with same named classes on the scope. class Test; class TestCase; class TestInfo; class UnitTest; // A class for indicating whether an assertion was successful. When // the assertion wasn't successful, the AssertionResult object // remembers a non-empty message that describes how it failed. // // To create an instance of this class, use one of the factory functions // (AssertionSuccess() and AssertionFailure()). // // This class is useful for two purposes: // 1. Defining predicate functions to be used with Boolean test assertions // EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts // 2. Defining predicate-format functions to be // used with predicate assertions (ASSERT_PRED_FORMAT*, etc). // // For example, if you define IsEven predicate: // // testing::AssertionResult IsEven(int n) { // if ((n % 2) == 0) // return testing::AssertionSuccess(); // else // return testing::AssertionFailure() << n << " is odd"; // } // // Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) // will print the message // // Value of: IsEven(Fib(5)) // Actual: false (5 is odd) // Expected: true // // instead of a more opaque // // Value of: IsEven(Fib(5)) // Actual: false // Expected: true // // in case IsEven is a simple Boolean predicate. // // If you expect your predicate to be reused and want to support informative // messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up // about half as often as positive ones in our tests), supply messages for // both success and failure cases: // // testing::AssertionResult IsEven(int n) { // if ((n % 2) == 0) // return testing::AssertionSuccess() << n << " is even"; // else // return testing::AssertionFailure() << n << " is odd"; // } // // Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print // // Value of: IsEven(Fib(6)) // Actual: true (8 is even) // Expected: false // // NB: Predicates that support negative Boolean assertions have reduced // performance in positive ones so be careful not to use them in tests // that have lots (tens of thousands) of positive Boolean assertions. // // To use this class with EXPECT_PRED_FORMAT assertions such as: // // // Verifies that Foo() returns an even number. // EXPECT_PRED_FORMAT1(IsEven, Foo()); // // you need to define: // // testing::AssertionResult IsEven(const char* expr, int n) { // if ((n % 2) == 0) // return testing::AssertionSuccess(); // else // return testing::AssertionFailure() // << "Expected: " << expr << " is even\n Actual: it's " << n; // } // // If Foo() returns 5, you will see the following message: // // Expected: Foo() is even // Actual: it's 5 // class GTEST_API_ AssertionResult { public: // Copy constructor. // Used in EXPECT_TRUE/FALSE(assertion_result). AssertionResult(const AssertionResult& other); // Used in the EXPECT_TRUE/FALSE(bool_expression). explicit AssertionResult(bool success) : success_(success) {} // Returns true iff the assertion succeeded. operator bool() const { return success_; } // NOLINT // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. AssertionResult operator!() const; // Returns the text streamed into this AssertionResult. Test assertions // use it when they fail (i.e., the predicate's outcome doesn't match the // assertion's expectation). When nothing has been streamed into the // object, returns an empty string. const char* message() const { return message_.get() != NULL ? message_->c_str() : ""; } // TODO(vladl@google.com): Remove this after making sure no clients use it. // Deprecated; please use message() instead. const char* failure_message() const { return message(); } // Streams a custom failure message into this object. template AssertionResult& operator<<(const T& value) { AppendMessage(Message() << value); return *this; } // Allows streaming basic output manipulators such as endl or flush into // this object. AssertionResult& operator<<( ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) { AppendMessage(Message() << basic_manipulator); return *this; } private: // Appends the contents of message to message_. void AppendMessage(const Message& a_message) { if (message_.get() == NULL) message_.reset(new ::std::string); message_->append(a_message.GetString().c_str()); } // Stores result of the assertion predicate. bool success_; // Stores the message describing the condition in case the expectation // construct is not satisfied with the predicate's outcome. // Referenced via a pointer to avoid taking too much stack frame space // with test assertions. internal::scoped_ptr< ::std::string> message_; GTEST_DISALLOW_ASSIGN_(AssertionResult); }; // Makes a successful assertion result. GTEST_API_ AssertionResult AssertionSuccess(); // Makes a failed assertion result. GTEST_API_ AssertionResult AssertionFailure(); // Makes a failed assertion result with the given failure message. // Deprecated; use AssertionFailure() << msg. GTEST_API_ AssertionResult AssertionFailure(const Message& msg); // The abstract class that all tests inherit from. // // In Google Test, a unit test program contains one or many TestCases, and // each TestCase contains one or many Tests. // // When you define a test using the TEST macro, you don't need to // explicitly derive from Test - the TEST macro automatically does // this for you. // // The only time you derive from Test is when defining a test fixture // to be used a TEST_F. For example: // // class FooTest : public testing::Test { // protected: // virtual void SetUp() { ... } // virtual void TearDown() { ... } // ... // }; // // TEST_F(FooTest, Bar) { ... } // TEST_F(FooTest, Baz) { ... } // // Test is not copyable. class GTEST_API_ Test { public: friend class TestInfo; // Defines types for pointers to functions that set up and tear down // a test case. typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; // The d'tor is virtual as we intend to inherit from Test. virtual ~Test(); // Sets up the stuff shared by all tests in this test case. // // Google Test will call Foo::SetUpTestCase() before running the first // test in test case Foo. Hence a sub-class can define its own // SetUpTestCase() method to shadow the one defined in the super // class. static void SetUpTestCase() {} // Tears down the stuff shared by all tests in this test case. // // Google Test will call Foo::TearDownTestCase() after running the last // test in test case Foo. Hence a sub-class can define its own // TearDownTestCase() method to shadow the one defined in the super // class. static void TearDownTestCase() {} // Returns true iff the current test has a fatal failure. static bool HasFatalFailure(); // Returns true iff the current test has a non-fatal failure. static bool HasNonfatalFailure(); // Returns true iff the current test has a (either fatal or // non-fatal) failure. static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } // Logs a property for the current test, test case, or for the entire // invocation of the test program when used outside of the context of a // test case. Only the last value for a given key is remembered. These // are public static so they can be called from utility functions that are // not members of the test fixture. Calls to RecordProperty made during // lifespan of the test (from the moment its constructor starts to the // moment its destructor finishes) will be output in XML as attributes of // the element. Properties recorded from fixture's // SetUpTestCase or TearDownTestCase are logged as attributes of the // corresponding element. Calls to RecordProperty made in the // global context (before or after invocation of RUN_ALL_TESTS and from // SetUp/TearDown method of Environment objects registered with Google // Test) will be output as attributes of the element. static void RecordProperty(const std::string& key, const std::string& value); static void RecordProperty(const std::string& key, int value); protected: // Creates a Test object. Test(); // Sets up the test fixture. virtual void SetUp(); // Tears down the test fixture. virtual void TearDown(); private: // Returns true iff the current test has the same fixture class as // the first test in the current test case. static bool HasSameFixtureClass(); // Runs the test after the test fixture has been set up. // // A sub-class must implement this to define the test logic. // // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. // Instead, use the TEST or TEST_F macro. virtual void TestBody() = 0; // Sets up, executes, and tears down the test. void Run(); // Deletes self. We deliberately pick an unusual name for this // internal method to avoid clashing with names used in user TESTs. void DeleteSelf_() { delete this; } // Uses a GTestFlagSaver to save and restore all Google Test flags. const internal::GTestFlagSaver* const gtest_flag_saver_; // Often a user mis-spells SetUp() as Setup() and spends a long time // wondering why it is never called by Google Test. The declaration of // the following method is solely for catching such an error at // compile time: // // - The return type is deliberately chosen to be not void, so it // will be a conflict if a user declares void Setup() in his test // fixture. // // - This method is private, so it will be another compiler error // if a user calls it from his test fixture. // // DO NOT OVERRIDE THIS FUNCTION. // // If you see an error about overriding the following function or // about it being private, you have mis-spelled SetUp() as Setup(). struct Setup_should_be_spelled_SetUp {}; virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } // We disallow copying Tests. GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); }; typedef internal::TimeInMillis TimeInMillis; // A copyable object representing a user specified test property which can be // output as a key/value string pair. // // Don't inherit from TestProperty as its destructor is not virtual. class TestProperty { public: // C'tor. TestProperty does NOT have a default constructor. // Always use this constructor (with parameters) to create a // TestProperty object. TestProperty(const std::string& a_key, const std::string& a_value) : key_(a_key), value_(a_value) { } // Gets the user supplied key. const char* key() const { return key_.c_str(); } // Gets the user supplied value. const char* value() const { return value_.c_str(); } // Sets a new value, overriding the one supplied in the constructor. void SetValue(const std::string& new_value) { value_ = new_value; } private: // The key supplied by the user. std::string key_; // The value supplied by the user. std::string value_; }; // The result of a single Test. This includes a list of // TestPartResults, a list of TestProperties, a count of how many // death tests there are in the Test, and how much time it took to run // the Test. // // TestResult is not copyable. class GTEST_API_ TestResult { public: // Creates an empty TestResult. TestResult(); // D'tor. Do not inherit from TestResult. ~TestResult(); // Gets the number of all test parts. This is the sum of the number // of successful test parts and the number of failed test parts. int total_part_count() const; // Returns the number of the test properties. int test_property_count() const; // Returns true iff the test passed (i.e. no test part failed). bool Passed() const { return !Failed(); } // Returns true iff the test failed. bool Failed() const; // Returns true iff the test fatally failed. bool HasFatalFailure() const; // Returns true iff the test has a non-fatal failure. bool HasNonfatalFailure() const; // Returns the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } // Returns the i-th test part result among all the results. i can range // from 0 to test_property_count() - 1. If i is not in that range, aborts // the program. const TestPartResult& GetTestPartResult(int i) const; // Returns the i-th test property. i can range from 0 to // test_property_count() - 1. If i is not in that range, aborts the // program. const TestProperty& GetTestProperty(int i) const; private: friend class TestInfo; friend class TestCase; friend class UnitTest; friend class internal::DefaultGlobalTestPartResultReporter; friend class internal::ExecDeathTest; friend class internal::TestResultAccessor; friend class internal::UnitTestImpl; friend class internal::WindowsDeathTest; // Gets the vector of TestPartResults. const std::vector& test_part_results() const { return test_part_results_; } // Gets the vector of TestProperties. const std::vector& test_properties() const { return test_properties_; } // Sets the elapsed time. void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } // Adds a test property to the list. The property is validated and may add // a non-fatal failure if invalid (e.g., if it conflicts with reserved // key names). If a property is already recorded for the same key, the // value will be updated, rather than storing multiple values for the same // key. xml_element specifies the element for which the property is being // recorded and is used for validation. void RecordProperty(const std::string& xml_element, const TestProperty& test_property); // Adds a failure if the key is a reserved attribute of Google Test // testcase tags. Returns true if the property is valid. // TODO(russr): Validate attribute names are legal and human readable. static bool ValidateTestProperty(const std::string& xml_element, const TestProperty& test_property); // Adds a test part result to the list. void AddTestPartResult(const TestPartResult& test_part_result); // Returns the death test count. int death_test_count() const { return death_test_count_; } // Increments the death test count, returning the new count. int increment_death_test_count() { return ++death_test_count_; } // Clears the test part results. void ClearTestPartResults(); // Clears the object. void Clear(); // Protects mutable state of the property vector and of owned // properties, whose values may be updated. internal::Mutex test_properites_mutex_; // The vector of TestPartResults std::vector test_part_results_; // The vector of TestProperties std::vector test_properties_; // Running count of death tests. int death_test_count_; // The elapsed time, in milliseconds. TimeInMillis elapsed_time_; // We disallow copying TestResult. GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); }; // class TestResult // A TestInfo object stores the following information about a test: // // Test case name // Test name // Whether the test should be run // A function pointer that creates the test object when invoked // Test result // // The constructor of TestInfo registers itself with the UnitTest // singleton such that the RUN_ALL_TESTS() macro knows which tests to // run. class GTEST_API_ TestInfo { public: // Destructs a TestInfo object. This function is not virtual, so // don't inherit from TestInfo. ~TestInfo(); // Returns the test case name. const char* test_case_name() const { return test_case_name_.c_str(); } // Returns the test name. const char* name() const { return name_.c_str(); } // Returns the name of the parameter type, or NULL if this is not a typed // or a type-parameterized test. const char* type_param() const { if (type_param_.get() != NULL) return type_param_->c_str(); return NULL; } // Returns the text representation of the value parameter, or NULL if this // is not a value-parameterized test. const char* value_param() const { if (value_param_.get() != NULL) return value_param_->c_str(); return NULL; } // Returns true if this test should run, that is if the test is not // disabled (or it is disabled but the also_run_disabled_tests flag has // been specified) and its full name matches the user-specified filter. // // Google Test allows the user to filter the tests by their full names. // The full name of a test Bar in test case Foo is defined as // "Foo.Bar". Only the tests that match the filter will run. // // A filter is a colon-separated list of glob (not regex) patterns, // optionally followed by a '-' and a colon-separated list of // negative patterns (tests to exclude). A test is run if it // matches one of the positive patterns and does not match any of // the negative patterns. // // For example, *A*:Foo.* is a filter that matches any string that // contains the character 'A' or starts with "Foo.". bool should_run() const { return should_run_; } // Returns true iff this test will appear in the XML report. bool is_reportable() const { // For now, the XML report includes all tests matching the filter. // In the future, we may trim tests that are excluded because of // sharding. return matches_filter_; } // Returns the result of the test. const TestResult* result() const { return &result_; } private: #if GTEST_HAS_DEATH_TEST friend class internal::DefaultDeathTestFactory; #endif // GTEST_HAS_DEATH_TEST friend class Test; friend class TestCase; friend class internal::UnitTestImpl; friend class internal::StreamingListenerTest; friend TestInfo* internal::MakeAndRegisterTestInfo( const char* test_case_name, const char* name, const char* type_param, const char* value_param, internal::TypeId fixture_class_id, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc, internal::TestFactoryBase* factory); // Constructs a TestInfo object. The newly constructed instance assumes // ownership of the factory object. TestInfo(const std::string& test_case_name, const std::string& name, const char* a_type_param, // NULL if not a type-parameterized test const char* a_value_param, // NULL if not a value-parameterized test internal::TypeId fixture_class_id, internal::TestFactoryBase* factory); // Increments the number of death tests encountered in this test so // far. int increment_death_test_count() { return result_.increment_death_test_count(); } // Creates the test object, runs it, records its result, and then // deletes it. void Run(); static void ClearTestResult(TestInfo* test_info) { test_info->result_.Clear(); } // These fields are immutable properties of the test. const std::string test_case_name_; // Test case name const std::string name_; // Test name // Name of the parameter type, or NULL if this is not a typed or a // type-parameterized test. const internal::scoped_ptr type_param_; // Text representation of the value parameter, or NULL if this is not a // value-parameterized test. const internal::scoped_ptr value_param_; const internal::TypeId fixture_class_id_; // ID of the test fixture class bool should_run_; // True iff this test should run bool is_disabled_; // True iff this test is disabled bool matches_filter_; // True if this test matches the // user-specified filter. internal::TestFactoryBase* const factory_; // The factory that creates // the test object // This field is mutable and needs to be reset before running the // test for the second time. TestResult result_; GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); }; // A test case, which consists of a vector of TestInfos. // // TestCase is not copyable. class GTEST_API_ TestCase { public: // Creates a TestCase with the given name. // // TestCase does NOT have a default constructor. Always use this // constructor to create a TestCase object. // // Arguments: // // name: name of the test case // a_type_param: the name of the test's type parameter, or NULL if // this is not a type-parameterized test. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase(const char* name, const char* a_type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc); // Destructor of TestCase. virtual ~TestCase(); // Gets the name of the TestCase. const char* name() const { return name_.c_str(); } // Returns the name of the parameter type, or NULL if this is not a // type-parameterized test case. const char* type_param() const { if (type_param_.get() != NULL) return type_param_->c_str(); return NULL; } // Returns true if any test in this test case should run. bool should_run() const { return should_run_; } // Gets the number of successful tests in this test case. int successful_test_count() const; // Gets the number of failed tests in this test case. int failed_test_count() const; // Gets the number of disabled tests that will be reported in the XML report. int reportable_disabled_test_count() const; // Gets the number of disabled tests in this test case. int disabled_test_count() const; // Gets the number of tests to be printed in the XML report. int reportable_test_count() const; // Get the number of tests in this test case that should run. int test_to_run_count() const; // Gets the number of all tests in this test case. int total_test_count() const; // Returns true iff the test case passed. bool Passed() const { return !Failed(); } // Returns true iff the test case failed. bool Failed() const { return failed_test_count() > 0; } // Returns the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. const TestInfo* GetTestInfo(int i) const; // Returns the TestResult that holds test properties recorded during // execution of SetUpTestCase and TearDownTestCase. const TestResult& ad_hoc_test_result() const { return ad_hoc_test_result_; } private: friend class Test; friend class internal::UnitTestImpl; // Gets the (mutable) vector of TestInfos in this TestCase. std::vector& test_info_list() { return test_info_list_; } // Gets the (immutable) vector of TestInfos in this TestCase. const std::vector& test_info_list() const { return test_info_list_; } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. TestInfo* GetMutableTestInfo(int i); // Sets the should_run member. void set_should_run(bool should) { should_run_ = should; } // Adds a TestInfo to this test case. Will delete the TestInfo upon // destruction of the TestCase object. void AddTestInfo(TestInfo * test_info); // Clears the results of all tests in this test case. void ClearResult(); // Clears the results of all tests in the given test case. static void ClearTestCaseResult(TestCase* test_case) { test_case->ClearResult(); } // Runs every test in this TestCase. void Run(); // Runs SetUpTestCase() for this TestCase. This wrapper is needed // for catching exceptions thrown from SetUpTestCase(). void RunSetUpTestCase() { (*set_up_tc_)(); } // Runs TearDownTestCase() for this TestCase. This wrapper is // needed for catching exceptions thrown from TearDownTestCase(). void RunTearDownTestCase() { (*tear_down_tc_)(); } // Returns true iff test passed. static bool TestPassed(const TestInfo* test_info) { return test_info->should_run() && test_info->result()->Passed(); } // Returns true iff test failed. static bool TestFailed(const TestInfo* test_info) { return test_info->should_run() && test_info->result()->Failed(); } // Returns true iff the test is disabled and will be reported in the XML // report. static bool TestReportableDisabled(const TestInfo* test_info) { return test_info->is_reportable() && test_info->is_disabled_; } // Returns true iff test is disabled. static bool TestDisabled(const TestInfo* test_info) { return test_info->is_disabled_; } // Returns true iff this test will appear in the XML report. static bool TestReportable(const TestInfo* test_info) { return test_info->is_reportable(); } // Returns true if the given test should run. static bool ShouldRunTest(const TestInfo* test_info) { return test_info->should_run(); } // Shuffles the tests in this test case. void ShuffleTests(internal::Random* random); // Restores the test order to before the first shuffle. void UnshuffleTests(); // Name of the test case. std::string name_; // Name of the parameter type, or NULL if this is not a typed or a // type-parameterized test. const internal::scoped_ptr type_param_; // The vector of TestInfos in their original order. It owns the // elements in the vector. std::vector test_info_list_; // Provides a level of indirection for the test list to allow easy // shuffling and restoring the test order. The i-th element in this // vector is the index of the i-th test in the shuffled test list. std::vector test_indices_; // Pointer to the function that sets up the test case. Test::SetUpTestCaseFunc set_up_tc_; // Pointer to the function that tears down the test case. Test::TearDownTestCaseFunc tear_down_tc_; // True iff any test in this test case should run. bool should_run_; // Elapsed time, in milliseconds. TimeInMillis elapsed_time_; // Holds test properties recorded during execution of SetUpTestCase and // TearDownTestCase. TestResult ad_hoc_test_result_; // We disallow copying TestCases. GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); }; // An Environment object is capable of setting up and tearing down an // environment. The user should subclass this to define his own // environment(s). // // An Environment object does the set-up and tear-down in virtual // methods SetUp() and TearDown() instead of the constructor and the // destructor, as: // // 1. You cannot safely throw from a destructor. This is a problem // as in some cases Google Test is used where exceptions are enabled, and // we may want to implement ASSERT_* using exceptions where they are // available. // 2. You cannot use ASSERT_* directly in a constructor or // destructor. class Environment { public: // The d'tor is virtual as we need to subclass Environment. virtual ~Environment() {} // Override this to define how to set up the environment. virtual void SetUp() {} // Override this to define how to tear down the environment. virtual void TearDown() {} private: // If you see an error about overriding the following function or // about it being private, you have mis-spelled SetUp() as Setup(). struct Setup_should_be_spelled_SetUp {}; virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } }; // The interface for tracing execution of tests. The methods are organized in // the order the corresponding events are fired. class TestEventListener { public: virtual ~TestEventListener() {} // Fired before any test activity starts. virtual void OnTestProgramStart(const UnitTest& unit_test) = 0; // Fired before each iteration of tests starts. There may be more than // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration // index, starting from 0. virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration) = 0; // Fired before environment set-up for each iteration of tests starts. virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0; // Fired after environment set-up for each iteration of tests ends. virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0; // Fired before the test case starts. virtual void OnTestCaseStart(const TestCase& test_case) = 0; // Fired before the test starts. virtual void OnTestStart(const TestInfo& test_info) = 0; // Fired after a failed assertion or a SUCCEED() invocation. virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0; // Fired after the test ends. virtual void OnTestEnd(const TestInfo& test_info) = 0; // Fired after the test case ends. virtual void OnTestCaseEnd(const TestCase& test_case) = 0; // Fired before environment tear-down for each iteration of tests starts. virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0; // Fired after environment tear-down for each iteration of tests ends. virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0; // Fired after each iteration of tests finishes. virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration) = 0; // Fired after all test activities have ended. virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0; }; // The convenience class for users who need to override just one or two // methods and are not concerned that a possible change to a signature of // the methods they override will not be caught during the build. For // comments about each method please see the definition of TestEventListener // above. class EmptyTestEventListener : public TestEventListener { public: virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, int /*iteration*/) {} virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {} virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} virtual void OnTestStart(const TestInfo& /*test_info*/) {} virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {} virtual void OnTestEnd(const TestInfo& /*test_info*/) {} virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {} virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, int /*iteration*/) {} virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} }; // TestEventListeners lets users add listeners to track events in Google Test. class GTEST_API_ TestEventListeners { public: TestEventListeners(); ~TestEventListeners(); // Appends an event listener to the end of the list. Google Test assumes // the ownership of the listener (i.e. it will delete the listener when // the test program finishes). void Append(TestEventListener* listener); // Removes the given event listener from the list and returns it. It then // becomes the caller's responsibility to delete the listener. Returns // NULL if the listener is not found in the list. TestEventListener* Release(TestEventListener* listener); // Returns the standard listener responsible for the default console // output. Can be removed from the listeners list to shut down default // console output. Note that removing this object from the listener list // with Release transfers its ownership to the caller and makes this // function return NULL the next time. TestEventListener* default_result_printer() const { return default_result_printer_; } // Returns the standard listener responsible for the default XML output // controlled by the --gtest_output=xml flag. Can be removed from the // listeners list by users who want to shut down the default XML output // controlled by this flag and substitute it with custom one. Note that // removing this object from the listener list with Release transfers its // ownership to the caller and makes this function return NULL the next // time. TestEventListener* default_xml_generator() const { return default_xml_generator_; } private: friend class TestCase; friend class TestInfo; friend class internal::DefaultGlobalTestPartResultReporter; friend class internal::NoExecDeathTest; friend class internal::TestEventListenersAccessor; friend class internal::UnitTestImpl; // Returns repeater that broadcasts the TestEventListener events to all // subscribers. TestEventListener* repeater(); // Sets the default_result_printer attribute to the provided listener. // The listener is also added to the listener list and previous // default_result_printer is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void SetDefaultResultPrinter(TestEventListener* listener); // Sets the default_xml_generator attribute to the provided listener. The // listener is also added to the listener list and previous // default_xml_generator is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void SetDefaultXmlGenerator(TestEventListener* listener); // Controls whether events will be forwarded by the repeater to the // listeners in the list. bool EventForwardingEnabled() const; void SuppressEventForwarding(); // The actual list of listeners. internal::TestEventRepeater* repeater_; // Listener responsible for the standard result output. TestEventListener* default_result_printer_; // Listener responsible for the creation of the XML output file. TestEventListener* default_xml_generator_; // We disallow copying TestEventListeners. GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); }; // A UnitTest consists of a vector of TestCases. // // This is a singleton class. The only instance of UnitTest is // created when UnitTest::GetInstance() is first called. This // instance is never deleted. // // UnitTest is not copyable. // // This class is thread-safe as long as the methods are called // according to their specification. class GTEST_API_ UnitTest { public: // Gets the singleton UnitTest object. The first time this method // is called, a UnitTest object is constructed and returned. // Consecutive calls will return the same object. static UnitTest* GetInstance(); // Runs all tests in this UnitTest object and prints the result. // Returns 0 if successful, or 1 otherwise. // // This method can only be called from the main thread. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. int Run() GTEST_MUST_USE_RESULT_; // Returns the working directory when the first TEST() or TEST_F() // was executed. The UnitTest object owns the string. const char* original_working_dir() const; // Returns the TestCase object for the test that's currently running, // or NULL if no test is running. const TestCase* current_test_case() const GTEST_LOCK_EXCLUDED_(mutex_); // Returns the TestInfo object for the test that's currently running, // or NULL if no test is running. const TestInfo* current_test_info() const GTEST_LOCK_EXCLUDED_(mutex_); // Returns the random seed used at the start of the current test run. int random_seed() const; #if GTEST_HAS_PARAM_TEST // Returns the ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. internal::ParameterizedTestCaseRegistry& parameterized_test_registry() GTEST_LOCK_EXCLUDED_(mutex_); #endif // GTEST_HAS_PARAM_TEST // Gets the number of successful test cases. int successful_test_case_count() const; // Gets the number of failed test cases. int failed_test_case_count() const; // Gets the number of all test cases. int total_test_case_count() const; // Gets the number of all test cases that contain at least one test // that should run. int test_case_to_run_count() const; // Gets the number of successful tests. int successful_test_count() const; // Gets the number of failed tests. int failed_test_count() const; // Gets the number of disabled tests that will be reported in the XML report. int reportable_disabled_test_count() const; // Gets the number of disabled tests. int disabled_test_count() const; // Gets the number of tests to be printed in the XML report. int reportable_test_count() const; // Gets the number of all tests. int total_test_count() const; // Gets the number of tests that should run. int test_to_run_count() const; // Gets the time of the test program start, in ms from the start of the // UNIX epoch. TimeInMillis start_timestamp() const; // Gets the elapsed time, in milliseconds. TimeInMillis elapsed_time() const; // Returns true iff the unit test passed (i.e. all test cases passed). bool Passed() const; // Returns true iff the unit test failed (i.e. some test case failed // or something outside of all tests failed). bool Failed() const; // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. const TestCase* GetTestCase(int i) const; // Returns the TestResult containing information on test failures and // properties logged outside of individual test cases. const TestResult& ad_hoc_test_result() const; // Returns the list of event listeners that can be used to track events // inside Google Test. TestEventListeners& listeners(); private: // Registers and returns a global test environment. When a test // program is run, all global test environments will be set-up in // the order they were registered. After all tests in the program // have finished, all global test environments will be torn-down in // the *reverse* order they were registered. // // The UnitTest object takes ownership of the given environment. // // This method can only be called from the main thread. Environment* AddEnvironment(Environment* env); // Adds a TestPartResult to the current TestResult object. All // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) // eventually call this to report their results. The user code // should use the assertion macros instead of calling this directly. void AddTestPartResult(TestPartResult::Type result_type, const char* file_name, int line_number, const std::string& message, const std::string& os_stack_trace) GTEST_LOCK_EXCLUDED_(mutex_); // Adds a TestProperty to the current TestResult object when invoked from // inside a test, to current TestCase's ad_hoc_test_result_ when invoked // from SetUpTestCase or TearDownTestCase, or to the global property set // when invoked elsewhere. If the result already contains a property with // the same key, the value will be updated. void RecordProperty(const std::string& key, const std::string& value); // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. TestCase* GetMutableTestCase(int i); // Accessors for the implementation object. internal::UnitTestImpl* impl() { return impl_; } const internal::UnitTestImpl* impl() const { return impl_; } // These classes and funcions are friends as they need to access private // members of UnitTest. friend class Test; friend class internal::AssertHelper; friend class internal::ScopedTrace; friend class internal::StreamingListenerTest; friend class internal::UnitTestRecordPropertyTestHelper; friend Environment* AddGlobalTestEnvironment(Environment* env); friend internal::UnitTestImpl* internal::GetUnitTestImpl(); friend void internal::ReportFailureInUnknownLocation( TestPartResult::Type result_type, const std::string& message); // Creates an empty UnitTest. UnitTest(); // D'tor virtual ~UnitTest(); // Pushes a trace defined by SCOPED_TRACE() on to the per-thread // Google Test trace stack. void PushGTestTrace(const internal::TraceInfo& trace) GTEST_LOCK_EXCLUDED_(mutex_); // Pops a trace from the per-thread Google Test trace stack. void PopGTestTrace() GTEST_LOCK_EXCLUDED_(mutex_); // Protects mutable state in *impl_. This is mutable as some const // methods need to lock it too. mutable internal::Mutex mutex_; // Opaque implementation object. This field is never changed once // the object is constructed. We don't mark it as const here, as // doing so will cause a warning in the constructor of UnitTest. // Mutable state in *impl_ is protected by mutex_. internal::UnitTestImpl* impl_; // We disallow copying UnitTest. GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); }; // A convenient wrapper for adding an environment for the test // program. // // You should call this before RUN_ALL_TESTS() is called, probably in // main(). If you use gtest_main, you need to call this before main() // starts for it to take effect. For example, you can define a global // variable like this: // // testing::Environment* const foo_env = // testing::AddGlobalTestEnvironment(new FooEnvironment); // // However, we strongly recommend you to write your own main() and // call AddGlobalTestEnvironment() there, as relying on initialization // of global variables makes the code harder to read and may cause // problems when you register multiple environments from different // translation units and the environments have dependencies among them // (remember that the compiler doesn't guarantee the order in which // global variables from different translation units are initialized). inline Environment* AddGlobalTestEnvironment(Environment* env) { return UnitTest::GetInstance()->AddEnvironment(env); } // Initializes Google Test. This must be called before calling // RUN_ALL_TESTS(). In particular, it parses a command line for the // flags that Google Test recognizes. Whenever a Google Test flag is // seen, it is removed from argv, and *argc is decremented. // // No value is returned. Instead, the Google Test flag variables are // updated. // // Calling the function for the second time has no user-visible effect. GTEST_API_ void InitGoogleTest(int* argc, char** argv); // This overloaded version can be used in Windows programs compiled in // UNICODE mode. GTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv); namespace internal { // FormatForComparison::Format(value) formats a // value of type ToPrint that is an operand of a comparison assertion // (e.g. ASSERT_EQ). OtherOperand is the type of the other operand in // the comparison, and is used to help determine the best way to // format the value. In particular, when the value is a C string // (char pointer) and the other operand is an STL string object, we // want to format the C string as a string, since we know it is // compared by value with the string object. If the value is a char // pointer but the other operand is not an STL string object, we don't // know whether the pointer is supposed to point to a NUL-terminated // string, and thus want to print it as a pointer to be safe. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // The default case. template class FormatForComparison { public: static ::std::string Format(const ToPrint& value) { return ::testing::PrintToString(value); } }; // Array. template class FormatForComparison { public: static ::std::string Format(const ToPrint* value) { return FormatForComparison::Format(value); } }; // By default, print C string as pointers to be safe, as we don't know // whether they actually point to a NUL-terminated string. #define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType) \ template \ class FormatForComparison { \ public: \ static ::std::string Format(CharType* value) { \ return ::testing::PrintToString(static_cast(value)); \ } \ } GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char); GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char); GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(wchar_t); GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const wchar_t); #undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_ // If a C string is compared with an STL string object, we know it's meant // to point to a NUL-terminated string, and thus can print it as a string. #define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \ template <> \ class FormatForComparison { \ public: \ static ::std::string Format(CharType* value) { \ return ::testing::PrintToString(value); \ } \ } GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::std::string); #if GTEST_HAS_GLOBAL_STRING GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::string); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::string); #endif #if GTEST_HAS_GLOBAL_WSTRING GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::wstring); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::wstring); #endif #if GTEST_HAS_STD_WSTRING GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::std::wstring); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::std::wstring); #endif #undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_ // Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc) // operand to be used in a failure message. The type (but not value) // of the other operand may affect the format. This allows us to // print a char* as a raw pointer when it is compared against another // char* or void*, and print it as a C string when it is compared // against an std::string object, for example. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. template std::string FormatForComparisonFailureMessage( const T1& value, const T2& /* other_operand */) { return FormatForComparison::Format(value); } // The helper function for {ASSERT|EXPECT}_EQ. template AssertionResult CmpHelperEQ(const char* expected_expression, const char* actual_expression, const T1& expected, const T2& actual) { #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4389) // Temporarily disables warning on // signed/unsigned mismatch. #endif if (expected == actual) { return AssertionSuccess(); } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif return EqFailure(expected_expression, actual_expression, FormatForComparisonFailureMessage(expected, actual), FormatForComparisonFailureMessage(actual, expected), false); } // With this overloaded version, we allow anonymous enums to be used // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums // can be implicitly cast to BiggestInt. GTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression, const char* actual_expression, BiggestInt expected, BiggestInt actual); // The helper class for {ASSERT|EXPECT}_EQ. The template argument // lhs_is_null_literal is true iff the first argument to ASSERT_EQ() // is a null pointer literal. The following default implementation is // for lhs_is_null_literal being false. template class EqHelper { public: // This templatized version is for the general case. template static AssertionResult Compare(const char* expected_expression, const char* actual_expression, const T1& expected, const T2& actual) { return CmpHelperEQ(expected_expression, actual_expression, expected, actual); } // With this overloaded version, we allow anonymous enums to be used // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous // enums can be implicitly cast to BiggestInt. // // Even though its body looks the same as the above version, we // cannot merge the two, as it will make anonymous enums unhappy. static AssertionResult Compare(const char* expected_expression, const char* actual_expression, BiggestInt expected, BiggestInt actual) { return CmpHelperEQ(expected_expression, actual_expression, expected, actual); } }; // This specialization is used when the first argument to ASSERT_EQ() // is a null pointer literal, like NULL, false, or 0. template <> class EqHelper { public: // We define two overloaded versions of Compare(). The first // version will be picked when the second argument to ASSERT_EQ() is // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or // EXPECT_EQ(false, a_bool). template static AssertionResult Compare( const char* expected_expression, const char* actual_expression, const T1& expected, const T2& actual, // The following line prevents this overload from being considered if T2 // is not a pointer type. We need this because ASSERT_EQ(NULL, my_ptr) // expands to Compare("", "", NULL, my_ptr), which requires a conversion // to match the Secret* in the other overload, which would otherwise make // this template match better. typename EnableIf::value>::type* = 0) { return CmpHelperEQ(expected_expression, actual_expression, expected, actual); } // This version will be picked when the second argument to ASSERT_EQ() is a // pointer, e.g. ASSERT_EQ(NULL, a_pointer). template static AssertionResult Compare( const char* expected_expression, const char* actual_expression, // We used to have a second template parameter instead of Secret*. That // template parameter would deduce to 'long', making this a better match // than the first overload even without the first overload's EnableIf. // Unfortunately, gcc with -Wconversion-null warns when "passing NULL to // non-pointer argument" (even a deduced integral argument), so the old // implementation caused warnings in user code. Secret* /* expected (NULL) */, T* actual) { // We already know that 'expected' is a null pointer. return CmpHelperEQ(expected_expression, actual_expression, static_cast(NULL), actual); } }; // A macro for implementing the helper functions needed to implement // ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste // of similar code. // // For each templatized helper function, we also define an overloaded // version for BiggestInt in order to reduce code bloat and allow // anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled // with gcc 4. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. #define GTEST_IMPL_CMP_HELPER_(op_name, op)\ template \ AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ const T1& val1, const T2& val2) {\ if (val1 op val2) {\ return AssertionSuccess();\ } else {\ return AssertionFailure() \ << "Expected: (" << expr1 << ") " #op " (" << expr2\ << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ << " vs " << FormatForComparisonFailureMessage(val2, val1);\ }\ }\ GTEST_API_ AssertionResult CmpHelper##op_name(\ const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // Implements the helper function for {ASSERT|EXPECT}_NE GTEST_IMPL_CMP_HELPER_(NE, !=); // Implements the helper function for {ASSERT|EXPECT}_LE GTEST_IMPL_CMP_HELPER_(LE, <=); // Implements the helper function for {ASSERT|EXPECT}_LT GTEST_IMPL_CMP_HELPER_(LT, <); // Implements the helper function for {ASSERT|EXPECT}_GE GTEST_IMPL_CMP_HELPER_(GE, >=); // Implements the helper function for {ASSERT|EXPECT}_GT GTEST_IMPL_CMP_HELPER_(GT, >); #undef GTEST_IMPL_CMP_HELPER_ // The helper function for {ASSERT|EXPECT}_STREQ. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual); // The helper function for {ASSERT|EXPECT}_STRCASEEQ. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual); // The helper function for {ASSERT|EXPECT}_STRNE. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2); // The helper function for {ASSERT|EXPECT}_STRCASENE. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2); // Helper function for *_STREQ on wide strings. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const wchar_t* expected, const wchar_t* actual); // Helper function for *_STRNE on wide strings. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const wchar_t* s1, const wchar_t* s2); } // namespace internal // IsSubstring() and IsNotSubstring() are intended to be used as the // first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by // themselves. They check whether needle is a substring of haystack // (NULL is considered a substring of itself only), and return an // appropriate error message when they fail. // // The {needle,haystack}_expr arguments are the stringified // expressions that generated the two real arguments. GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack); GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack); GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack); #if GTEST_HAS_STD_WSTRING GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack); #endif // GTEST_HAS_STD_WSTRING namespace internal { // Helper template function for comparing floating-points. // // Template parameter: // // RawType: the raw floating-point type (either float or double) // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. template AssertionResult CmpHelperFloatingPointEQ(const char* expected_expression, const char* actual_expression, RawType expected, RawType actual) { const FloatingPoint lhs(expected), rhs(actual); if (lhs.AlmostEquals(rhs)) { return AssertionSuccess(); } ::std::stringstream expected_ss; expected_ss << std::setprecision(std::numeric_limits::digits10 + 2) << expected; ::std::stringstream actual_ss; actual_ss << std::setprecision(std::numeric_limits::digits10 + 2) << actual; return EqFailure(expected_expression, actual_expression, StringStreamToString(&expected_ss), StringStreamToString(&actual_ss), false); } // Helper function for implementing ASSERT_NEAR. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2, const char* abs_error_expr, double val1, double val2, double abs_error); // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // A class that enables one to stream messages to assertion macros class GTEST_API_ AssertHelper { public: // Constructor. AssertHelper(TestPartResult::Type type, const char* file, int line, const char* message); ~AssertHelper(); // Message assignment is a semantic trick to enable assertion // streaming; see the GTEST_MESSAGE_ macro below. void operator=(const Message& message) const; private: // We put our data in a struct so that the size of the AssertHelper class can // be as small as possible. This is important because gcc is incapable of // re-using stack space even for temporary variables, so every EXPECT_EQ // reserves stack space for another AssertHelper. struct AssertHelperData { AssertHelperData(TestPartResult::Type t, const char* srcfile, int line_num, const char* msg) : type(t), file(srcfile), line(line_num), message(msg) { } TestPartResult::Type const type; const char* const file; int const line; std::string const message; private: GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData); }; AssertHelperData* const data_; GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); }; } // namespace internal #if GTEST_HAS_PARAM_TEST // The pure interface class that all value-parameterized tests inherit from. // A value-parameterized class must inherit from both ::testing::Test and // ::testing::WithParamInterface. In most cases that just means inheriting // from ::testing::TestWithParam, but more complicated test hierarchies // may need to inherit from Test and WithParamInterface at different levels. // // This interface has support for accessing the test parameter value via // the GetParam() method. // // Use it with one of the parameter generator defining functions, like Range(), // Values(), ValuesIn(), Bool(), and Combine(). // // class FooTest : public ::testing::TestWithParam { // protected: // FooTest() { // // Can use GetParam() here. // } // virtual ~FooTest() { // // Can use GetParam() here. // } // virtual void SetUp() { // // Can use GetParam() here. // } // virtual void TearDown { // // Can use GetParam() here. // } // }; // TEST_P(FooTest, DoesBar) { // // Can use GetParam() method here. // Foo foo; // ASSERT_TRUE(foo.DoesBar(GetParam())); // } // INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); template class WithParamInterface { public: typedef T ParamType; virtual ~WithParamInterface() {} // The current parameter value. Is also available in the test fixture's // constructor. This member function is non-static, even though it only // references static data, to reduce the opportunity for incorrect uses // like writing 'WithParamInterface::GetParam()' for a test that // uses a fixture whose parameter type is int. const ParamType& GetParam() const { GTEST_CHECK_(parameter_ != NULL) << "GetParam() can only be called inside a value-parameterized test " << "-- did you intend to write TEST_P instead of TEST_F?"; return *parameter_; } private: // Sets parameter value. The caller is responsible for making sure the value // remains alive and unchanged throughout the current test. static void SetParam(const ParamType* parameter) { parameter_ = parameter; } // Static value used for accessing parameter during a test lifetime. static const ParamType* parameter_; // TestClass must be a subclass of WithParamInterface and Test. template friend class internal::ParameterizedTestFactory; }; template const T* WithParamInterface::parameter_ = NULL; // Most value-parameterized classes can ignore the existence of // WithParamInterface, and can just inherit from ::testing::TestWithParam. template class TestWithParam : public Test, public WithParamInterface { }; #endif // GTEST_HAS_PARAM_TEST // Macros for indicating success/failure in test code. // ADD_FAILURE unconditionally adds a failure to the current test. // SUCCEED generates a success - it doesn't automatically make the // current test successful, as a test is only successful when it has // no failure. // // EXPECT_* verifies that a certain condition is satisfied. If not, // it behaves like ADD_FAILURE. In particular: // // EXPECT_TRUE verifies that a Boolean condition is true. // EXPECT_FALSE verifies that a Boolean condition is false. // // FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except // that they will also abort the current function on failure. People // usually want the fail-fast behavior of FAIL and ASSERT_*, but those // writing data-driven tests often find themselves using ADD_FAILURE // and EXPECT_* more. // Generates a nonfatal failure with a generic message. #define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") // Generates a nonfatal failure at the given source file location with // a generic message. #define ADD_FAILURE_AT(file, line) \ GTEST_MESSAGE_AT_(file, line, "Failed", \ ::testing::TestPartResult::kNonFatalFailure) // Generates a fatal failure with a generic message. #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") // Define this macro to 1 to omit the definition of FAIL(), which is a // generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_FAIL # define FAIL() GTEST_FAIL() #endif // Generates a success with a generic message. #define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") // Define this macro to 1 to omit the definition of SUCCEED(), which // is a generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_SUCCEED # define SUCCEED() GTEST_SUCCEED() #endif // Macros for testing exceptions. // // * {ASSERT|EXPECT}_THROW(statement, expected_exception): // Tests that the statement throws the expected exception. // * {ASSERT|EXPECT}_NO_THROW(statement): // Tests that the statement doesn't throw any exception. // * {ASSERT|EXPECT}_ANY_THROW(statement): // Tests that the statement throws an exception. #define EXPECT_THROW(statement, expected_exception) \ GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) #define EXPECT_NO_THROW(statement) \ GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) #define EXPECT_ANY_THROW(statement) \ GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) #define ASSERT_THROW(statement, expected_exception) \ GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) #define ASSERT_NO_THROW(statement) \ GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) #define ASSERT_ANY_THROW(statement) \ GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) // Boolean assertions. Condition can be either a Boolean expression or an // AssertionResult. For more information on how to use AssertionResult with // these macros see comments on that class. #define EXPECT_TRUE(condition) \ GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ GTEST_NONFATAL_FAILURE_) #define EXPECT_FALSE(condition) \ GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ GTEST_NONFATAL_FAILURE_) #define ASSERT_TRUE(condition) \ GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ GTEST_FATAL_FAILURE_) #define ASSERT_FALSE(condition) \ GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ GTEST_FATAL_FAILURE_) // Includes the auto-generated header that implements a family of // generic predicate assertion macros. // Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // This file is AUTOMATICALLY GENERATED on 10/31/2011 by command // 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! // // Implements a family of generic predicate assertion macros. #ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ #define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ // Makes sure this header is not included before gtest.h. #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ # error Do not include gtest_pred_impl.h directly. Include gtest.h instead. #endif // GTEST_INCLUDE_GTEST_GTEST_H_ // This header implements a family of generic predicate assertion // macros: // // ASSERT_PRED_FORMAT1(pred_format, v1) // ASSERT_PRED_FORMAT2(pred_format, v1, v2) // ... // // where pred_format is a function or functor that takes n (in the // case of ASSERT_PRED_FORMATn) values and their source expression // text, and returns a testing::AssertionResult. See the definition // of ASSERT_EQ in gtest.h for an example. // // If you don't care about formatting, you can use the more // restrictive version: // // ASSERT_PRED1(pred, v1) // ASSERT_PRED2(pred, v1, v2) // ... // // where pred is an n-ary function or functor that returns bool, // and the values v1, v2, ..., must support the << operator for // streaming to std::ostream. // // We also define the EXPECT_* variations. // // For now we only support predicates whose arity is at most 5. // Please email googletestframework@googlegroups.com if you need // support for higher arities. // GTEST_ASSERT_ is the basic statement to which all of the assertions // in this file reduce. Don't use this in your code. #define GTEST_ASSERT_(expression, on_failure) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (const ::testing::AssertionResult gtest_ar = (expression)) \ ; \ else \ on_failure(gtest_ar.failure_message()) // Helper function for implementing {EXPECT|ASSERT}_PRED1. Don't use // this in your code. template AssertionResult AssertPred1Helper(const char* pred_text, const char* e1, Pred pred, const T1& v1) { if (pred(v1)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. // Don't use this in your code. #define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ GTEST_ASSERT_(pred_format(#v1, v1), \ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use // this in your code. #define GTEST_PRED1_(pred, v1, on_failure)\ GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ #v1, \ pred, \ v1), on_failure) // Unary predicate assertion macros. #define EXPECT_PRED_FORMAT1(pred_format, v1) \ GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED1(pred, v1) \ GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT1(pred_format, v1) \ GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) #define ASSERT_PRED1(pred, v1) \ GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED2. Don't use // this in your code. template AssertionResult AssertPred2Helper(const char* pred_text, const char* e1, const char* e2, Pred pred, const T1& v1, const T2& v2) { if (pred(v1, v2)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. // Don't use this in your code. #define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use // this in your code. #define GTEST_PRED2_(pred, v1, v2, on_failure)\ GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ #v1, \ #v2, \ pred, \ v1, \ v2), on_failure) // Binary predicate assertion macros. #define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED2(pred, v1, v2) \ GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) #define ASSERT_PRED2(pred, v1, v2) \ GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED3. Don't use // this in your code. template AssertionResult AssertPred3Helper(const char* pred_text, const char* e1, const char* e2, const char* e3, Pred pred, const T1& v1, const T2& v2, const T3& v3) { if (pred(v1, v2, v3)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2 << "\n" << e3 << " evaluates to " << v3; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. // Don't use this in your code. #define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use // this in your code. #define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ #v1, \ #v2, \ #v3, \ pred, \ v1, \ v2, \ v3), on_failure) // Ternary predicate assertion macros. #define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED3(pred, v1, v2, v3) \ GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) #define ASSERT_PRED3(pred, v1, v2, v3) \ GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED4. Don't use // this in your code. template AssertionResult AssertPred4Helper(const char* pred_text, const char* e1, const char* e2, const char* e3, const char* e4, Pred pred, const T1& v1, const T2& v2, const T3& v3, const T4& v4) { if (pred(v1, v2, v3, v4)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ", " << e4 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2 << "\n" << e3 << " evaluates to " << v3 << "\n" << e4 << " evaluates to " << v4; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. // Don't use this in your code. #define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use // this in your code. #define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ #v1, \ #v2, \ #v3, \ #v4, \ pred, \ v1, \ v2, \ v3, \ v4), on_failure) // 4-ary predicate assertion macros. #define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED4(pred, v1, v2, v3, v4) \ GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) #define ASSERT_PRED4(pred, v1, v2, v3, v4) \ GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED5. Don't use // this in your code. template AssertionResult AssertPred5Helper(const char* pred_text, const char* e1, const char* e2, const char* e3, const char* e4, const char* e5, Pred pred, const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5) { if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ", " << e4 << ", " << e5 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2 << "\n" << e3 << " evaluates to " << v3 << "\n" << e4 << " evaluates to " << v4 << "\n" << e5 << " evaluates to " << v5; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. // Don't use this in your code. #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use // this in your code. #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ #v1, \ #v2, \ #v3, \ #v4, \ #v5, \ pred, \ v1, \ v2, \ v3, \ v4, \ v5), on_failure) // 5-ary predicate assertion macros. #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) #define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) #endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ // Macros for testing equalities and inequalities. // // * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual // * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 // * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 // * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 // * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 // * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 // // When they are not, Google Test prints both the tested expressions and // their actual values. The values must be compatible built-in types, // or you will get a compiler error. By "compatible" we mean that the // values can be compared by the respective operator. // // Note: // // 1. It is possible to make a user-defined type work with // {ASSERT|EXPECT}_??(), but that requires overloading the // comparison operators and is thus discouraged by the Google C++ // Usage Guide. Therefore, you are advised to use the // {ASSERT|EXPECT}_TRUE() macro to assert that two objects are // equal. // // 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on // pointers (in particular, C strings). Therefore, if you use it // with two C strings, you are testing how their locations in memory // are related, not how their content is related. To compare two C // strings by content, use {ASSERT|EXPECT}_STR*(). // // 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to // {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you // what the actual value is when it fails, and similarly for the // other comparisons. // // 4. Do not depend on the order in which {ASSERT|EXPECT}_??() // evaluate their arguments, which is undefined. // // 5. These macros evaluate their arguments exactly once. // // Examples: // // EXPECT_NE(5, Foo()); // EXPECT_EQ(NULL, a_pointer); // ASSERT_LT(i, array_size); // ASSERT_GT(records.size(), 0) << "There is no record left."; #define EXPECT_EQ(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal:: \ EqHelper::Compare, \ expected, actual) #define EXPECT_NE(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) #define EXPECT_LE(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) #define EXPECT_LT(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) #define EXPECT_GE(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) #define EXPECT_GT(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) #define GTEST_ASSERT_EQ(expected, actual) \ ASSERT_PRED_FORMAT2(::testing::internal:: \ EqHelper::Compare, \ expected, actual) #define GTEST_ASSERT_NE(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) #define GTEST_ASSERT_LE(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) #define GTEST_ASSERT_LT(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) #define GTEST_ASSERT_GE(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) #define GTEST_ASSERT_GT(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) // Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of // ASSERT_XY(), which clashes with some users' own code. #if !GTEST_DONT_DEFINE_ASSERT_EQ # define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_NE # define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_LE # define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_LT # define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_GE # define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_GT # define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) #endif // C-string Comparisons. All tests treat NULL and any non-NULL string // as different. Two NULLs are equal. // // * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 // * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 // * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case // * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case // // For wide or narrow string objects, you can use the // {ASSERT|EXPECT}_??() macros. // // Don't depend on the order in which the arguments are evaluated, // which is undefined. // // These macros evaluate their arguments exactly once. #define EXPECT_STREQ(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) #define EXPECT_STRNE(s1, s2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) #define EXPECT_STRCASEEQ(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) #define EXPECT_STRCASENE(s1, s2)\ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) #define ASSERT_STREQ(expected, actual) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) #define ASSERT_STRNE(s1, s2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) #define ASSERT_STRCASEEQ(expected, actual) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) #define ASSERT_STRCASENE(s1, s2)\ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) // Macros for comparing floating-point numbers. // // * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual): // Tests that two float values are almost equal. // * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual): // Tests that two double values are almost equal. // * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): // Tests that v1 and v2 are within the given distance to each other. // // Google Test uses ULP-based comparison to automatically pick a default // error bound that is appropriate for the operands. See the // FloatingPoint template class in gtest-internal.h if you are // interested in the implementation details. #define EXPECT_FLOAT_EQ(expected, actual)\ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define EXPECT_DOUBLE_EQ(expected, actual)\ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define ASSERT_FLOAT_EQ(expected, actual)\ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define ASSERT_DOUBLE_EQ(expected, actual)\ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define EXPECT_NEAR(val1, val2, abs_error)\ EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ val1, val2, abs_error) #define ASSERT_NEAR(val1, val2, abs_error)\ ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ val1, val2, abs_error) // These predicate format functions work on floating-point values, and // can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. // // EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); // Asserts that val1 is less than, or almost equal to, val2. Fails // otherwise. In particular, it fails if either val1 or val2 is NaN. GTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2, float val1, float val2); GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, double val1, double val2); #if GTEST_OS_WINDOWS // Macros that test for HRESULT failure and success, these are only useful // on Windows, and rely on Windows SDK macros and APIs to compile. // // * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) // // When expr unexpectedly fails or succeeds, Google Test prints the // expected result and the actual result with both a human-readable // string representation of the error, if available, as well as the // hex result code. # define EXPECT_HRESULT_SUCCEEDED(expr) \ EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) # define ASSERT_HRESULT_SUCCEEDED(expr) \ ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) # define EXPECT_HRESULT_FAILED(expr) \ EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) # define ASSERT_HRESULT_FAILED(expr) \ ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) #endif // GTEST_OS_WINDOWS // Macros that execute statement and check that it doesn't generate new fatal // failures in the current thread. // // * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement); // // Examples: // // EXPECT_NO_FATAL_FAILURE(Process()); // ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; // #define ASSERT_NO_FATAL_FAILURE(statement) \ GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) #define EXPECT_NO_FATAL_FAILURE(statement) \ GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) // Causes a trace (including the source file path, the current line // number, and the given message) to be included in every test failure // message generated by code in the current scope. The effect is // undone when the control leaves the current scope. // // The message argument can be anything streamable to std::ostream. // // In the implementation, we include the current line number as part // of the dummy variable name, thus allowing multiple SCOPED_TRACE()s // to appear in the same block - as long as they are on different // lines. #define SCOPED_TRACE(message) \ ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ __FILE__, __LINE__, ::testing::Message() << (message)) // Compile-time assertion for type equality. // StaticAssertTypeEq() compiles iff type1 and type2 are // the same type. The value it returns is not interesting. // // Instead of making StaticAssertTypeEq a class template, we make it a // function template that invokes a helper class template. This // prevents a user from misusing StaticAssertTypeEq by // defining objects of that type. // // CAVEAT: // // When used inside a method of a class template, // StaticAssertTypeEq() is effective ONLY IF the method is // instantiated. For example, given: // // template class Foo { // public: // void Bar() { testing::StaticAssertTypeEq(); } // }; // // the code: // // void Test1() { Foo foo; } // // will NOT generate a compiler error, as Foo::Bar() is never // actually instantiated. Instead, you need: // // void Test2() { Foo foo; foo.Bar(); } // // to cause a compiler error. template bool StaticAssertTypeEq() { (void)internal::StaticAssertTypeEqHelper(); return true; } // Defines a test. // // The first parameter is the name of the test case, and the second // parameter is the name of the test within the test case. // // The convention is to end the test case name with "Test". For // example, a test case for the Foo class can be named FooTest. // // The user should put his test code between braces after using this // macro. Example: // // TEST(FooTest, InitializesCorrectly) { // Foo foo; // EXPECT_TRUE(foo.StatusIsOK()); // } // Note that we call GetTestTypeId() instead of GetTypeId< // ::testing::Test>() here to get the type ID of testing::Test. This // is to work around a suspected linker bug when using Google Test as // a framework on Mac OS X. The bug causes GetTypeId< // ::testing::Test>() to return different values depending on whether // the call is from the Google Test framework itself or from user test // code. GetTestTypeId() is guaranteed to always return the same // value, as it always calls GetTypeId<>() from the Google Test // framework. #define GTEST_TEST(test_case_name, test_name)\ GTEST_TEST_(test_case_name, test_name, \ ::testing::Test, ::testing::internal::GetTestTypeId()) // Define this macro to 1 to omit the definition of TEST(), which // is a generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_TEST # define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) #endif // Defines a test that uses a test fixture. // // The first parameter is the name of the test fixture class, which // also doubles as the test case name. The second parameter is the // name of the test within the test case. // // A test fixture class must be declared earlier. The user should put // his test code between braces after using this macro. Example: // // class FooTest : public testing::Test { // protected: // virtual void SetUp() { b_.AddElement(3); } // // Foo a_; // Foo b_; // }; // // TEST_F(FooTest, InitializesCorrectly) { // EXPECT_TRUE(a_.StatusIsOK()); // } // // TEST_F(FooTest, ReturnsElementCountCorrectly) { // EXPECT_EQ(0, a_.size()); // EXPECT_EQ(1, b_.size()); // } #define TEST_F(test_fixture, test_name)\ GTEST_TEST_(test_fixture, test_name, test_fixture, \ ::testing::internal::GetTypeId()) } // namespace testing // Use this function in main() to run all tests. It returns 0 if all // tests are successful, or 1 otherwise. // // RUN_ALL_TESTS() should be invoked after the command line has been // parsed by InitGoogleTest(). // // This function was formerly a macro; thus, it is in the global // namespace and has an all-caps name. int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_; inline int RUN_ALL_TESTS() { return ::testing::UnitTest::GetInstance()->Run(); } #endif // GTEST_INCLUDE_GTEST_GTEST_H_ dlt-daemon-2.18.6/gtest-1.7.0/fused-src/gtest/gtest_main.cc000066400000000000000000000033451377520261000231150ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. #include #include "gtest/gtest.h" GTEST_API_ int main(int argc, char **argv) { printf("Running main() from gtest_main.cc\n"); testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/include/000077500000000000000000000000001377520261000170515ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/000077500000000000000000000000001377520261000201775ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/gtest-death-test.h000066400000000000000000000264031377520261000235430ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) // // This header file defines the public API for death tests. It is // #included by gtest.h so a user doesn't need to include this // directly. #ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ #include "gtest/internal/gtest-death-test-internal.h" namespace testing { // This flag controls the style of death tests. Valid values are "threadsafe", // meaning that the death test child process will re-execute the test binary // from the start, running only a single death test, or "fast", // meaning that the child process will execute the test logic immediately // after forking. GTEST_DECLARE_string_(death_test_style); #if GTEST_HAS_DEATH_TEST namespace internal { // Returns a Boolean value indicating whether the caller is currently // executing in the context of the death test child process. Tools such as // Valgrind heap checkers may need this to modify their behavior in death // tests. IMPORTANT: This is an internal utility. Using it may break the // implementation of death tests. User code MUST NOT use it. GTEST_API_ bool InDeathTestChild(); } // namespace internal // The following macros are useful for writing death tests. // Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is // executed: // // 1. It generates a warning if there is more than one active // thread. This is because it's safe to fork() or clone() only // when there is a single thread. // // 2. The parent process clone()s a sub-process and runs the death // test in it; the sub-process exits with code 0 at the end of the // death test, if it hasn't exited already. // // 3. The parent process waits for the sub-process to terminate. // // 4. The parent process checks the exit code and error message of // the sub-process. // // Examples: // // ASSERT_DEATH(server.SendMessage(56, "Hello"), "Invalid port number"); // for (int i = 0; i < 5; i++) { // EXPECT_DEATH(server.ProcessRequest(i), // "Invalid request .* in ProcessRequest()") // << "Failed to die on request " << i; // } // // ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting"); // // bool KilledBySIGHUP(int exit_code) { // return WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGHUP; // } // // ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, "Hanging up!"); // // On the regular expressions used in death tests: // // On POSIX-compliant systems (*nix), we use the library, // which uses the POSIX extended regex syntax. // // On other platforms (e.g. Windows), we only support a simple regex // syntax implemented as part of Google Test. This limited // implementation should be enough most of the time when writing // death tests; though it lacks many features you can find in PCRE // or POSIX extended regex syntax. For example, we don't support // union ("x|y"), grouping ("(xy)"), brackets ("[xy]"), and // repetition count ("x{5,7}"), among others. // // Below is the syntax that we do support. We chose it to be a // subset of both PCRE and POSIX extended regex, so it's easy to // learn wherever you come from. In the following: 'A' denotes a // literal character, period (.), or a single \\ escape sequence; // 'x' and 'y' denote regular expressions; 'm' and 'n' are for // natural numbers. // // c matches any literal character c // \\d matches any decimal digit // \\D matches any character that's not a decimal digit // \\f matches \f // \\n matches \n // \\r matches \r // \\s matches any ASCII whitespace, including \n // \\S matches any character that's not a whitespace // \\t matches \t // \\v matches \v // \\w matches any letter, _, or decimal digit // \\W matches any character that \\w doesn't match // \\c matches any literal character c, which must be a punctuation // . matches any single character except \n // A? matches 0 or 1 occurrences of A // A* matches 0 or many occurrences of A // A+ matches 1 or many occurrences of A // ^ matches the beginning of a string (not that of each line) // $ matches the end of a string (not that of each line) // xy matches x followed by y // // If you accidentally use PCRE or POSIX extended regex features // not implemented by us, you will get a run-time failure. In that // case, please try to rewrite your regular expression within the // above syntax. // // This implementation is *not* meant to be as highly tuned or robust // as a compiled regex library, but should perform well enough for a // death test, which already incurs significant overhead by launching // a child process. // // Known caveats: // // A "threadsafe" style death test obtains the path to the test // program from argv[0] and re-executes it in the sub-process. For // simplicity, the current implementation doesn't search the PATH // when launching the sub-process. This means that the user must // invoke the test program via a path that contains at least one // path separator (e.g. path/to/foo_test and // /absolute/path/to/bar_test are fine, but foo_test is not). This // is rarely a problem as people usually don't put the test binary // directory in PATH. // // TODO(wan@google.com): make thread-safe death tests search the PATH. // Asserts that a given statement causes the program to exit, with an // integer exit status that satisfies predicate, and emitting error output // that matches regex. # define ASSERT_EXIT(statement, predicate, regex) \ GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_) // Like ASSERT_EXIT, but continues on to successive tests in the // test case, if any: # define EXPECT_EXIT(statement, predicate, regex) \ GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_) // Asserts that a given statement causes the program to exit, either by // explicitly exiting with a nonzero exit code or being killed by a // signal, and emitting error output that matches regex. # define ASSERT_DEATH(statement, regex) \ ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) // Like ASSERT_DEATH, but continues on to successive tests in the // test case, if any: # define EXPECT_DEATH(statement, regex) \ EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) // Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*: // Tests that an exit code describes a normal exit with a given exit code. class GTEST_API_ ExitedWithCode { public: explicit ExitedWithCode(int exit_code); bool operator()(int exit_status) const; private: // No implementation - assignment is unsupported. void operator=(const ExitedWithCode& other); const int exit_code_; }; # if !GTEST_OS_WINDOWS // Tests that an exit code describes an exit due to termination by a // given signal. class GTEST_API_ KilledBySignal { public: explicit KilledBySignal(int signum); bool operator()(int exit_status) const; private: const int signum_; }; # endif // !GTEST_OS_WINDOWS // EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode. // The death testing framework causes this to have interesting semantics, // since the sideeffects of the call are only visible in opt mode, and not // in debug mode. // // In practice, this can be used to test functions that utilize the // LOG(DFATAL) macro using the following style: // // int DieInDebugOr12(int* sideeffect) { // if (sideeffect) { // *sideeffect = 12; // } // LOG(DFATAL) << "death"; // return 12; // } // // TEST(TestCase, TestDieOr12WorksInDgbAndOpt) { // int sideeffect = 0; // // Only asserts in dbg. // EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), "death"); // // #ifdef NDEBUG // // opt-mode has sideeffect visible. // EXPECT_EQ(12, sideeffect); // #else // // dbg-mode no visible sideeffect. // EXPECT_EQ(0, sideeffect); // #endif // } // // This will assert that DieInDebugReturn12InOpt() crashes in debug // mode, usually due to a DCHECK or LOG(DFATAL), but returns the // appropriate fallback value (12 in this case) in opt mode. If you // need to test that a function has appropriate side-effects in opt // mode, include assertions against the side-effects. A general // pattern for this is: // // EXPECT_DEBUG_DEATH({ // // Side-effects here will have an effect after this statement in // // opt mode, but none in debug mode. // EXPECT_EQ(12, DieInDebugOr12(&sideeffect)); // }, "death"); // # ifdef NDEBUG # define EXPECT_DEBUG_DEATH(statement, regex) \ GTEST_EXECUTE_STATEMENT_(statement, regex) # define ASSERT_DEBUG_DEATH(statement, regex) \ GTEST_EXECUTE_STATEMENT_(statement, regex) # else # define EXPECT_DEBUG_DEATH(statement, regex) \ EXPECT_DEATH(statement, regex) # define ASSERT_DEBUG_DEATH(statement, regex) \ ASSERT_DEATH(statement, regex) # endif // NDEBUG for EXPECT_DEBUG_DEATH #endif // GTEST_HAS_DEATH_TEST // EXPECT_DEATH_IF_SUPPORTED(statement, regex) and // ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if // death tests are supported; otherwise they just issue a warning. This is // useful when you are combining death test assertions with normal test // assertions in one test. #if GTEST_HAS_DEATH_TEST # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ EXPECT_DEATH(statement, regex) # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ ASSERT_DEATH(statement, regex) #else # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, ) # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return) #endif } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/gtest-message.h000066400000000000000000000217421377520261000231260ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) // // This header file defines the Message class. // // IMPORTANT NOTE: Due to limitation of the C++ language, we have to // leave some internal implementation details in this header file. // They are clearly marked by comments like this: // // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // // Such code is NOT meant to be used by a user directly, and is subject // to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user // program! #ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ #define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ #include #include "gtest/internal/gtest-port.h" // Ensures that there is at least one operator<< in the global namespace. // See Message& operator<<(...) below for why. void operator<<(const testing::internal::Secret&, int); namespace testing { // The Message class works like an ostream repeater. // // Typical usage: // // 1. You stream a bunch of values to a Message object. // It will remember the text in a stringstream. // 2. Then you stream the Message object to an ostream. // This causes the text in the Message to be streamed // to the ostream. // // For example; // // testing::Message foo; // foo << 1 << " != " << 2; // std::cout << foo; // // will print "1 != 2". // // Message is not intended to be inherited from. In particular, its // destructor is not virtual. // // Note that stringstream behaves differently in gcc and in MSVC. You // can stream a NULL char pointer to it in the former, but not in the // latter (it causes an access violation if you do). The Message // class hides this difference by treating a NULL char pointer as // "(null)". class GTEST_API_ Message { private: // The type of basic IO manipulators (endl, ends, and flush) for // narrow streams. typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&); public: // Constructs an empty Message. Message(); // Copy constructor. Message(const Message& msg) : ss_(new ::std::stringstream) { // NOLINT *ss_ << msg.GetString(); } // Constructs a Message from a C-string. explicit Message(const char* str) : ss_(new ::std::stringstream) { *ss_ << str; } #if GTEST_OS_SYMBIAN // Streams a value (either a pointer or not) to this object. template inline Message& operator <<(const T& value) { StreamHelper(typename internal::is_pointer::type(), value); return *this; } #else // Streams a non-pointer value to this object. template inline Message& operator <<(const T& val) { // Some libraries overload << for STL containers. These // overloads are defined in the global namespace instead of ::std. // // C++'s symbol lookup rule (i.e. Koenig lookup) says that these // overloads are visible in either the std namespace or the global // namespace, but not other namespaces, including the testing // namespace which Google Test's Message class is in. // // To allow STL containers (and other types that has a << operator // defined in the global namespace) to be used in Google Test // assertions, testing::Message must access the custom << operator // from the global namespace. With this using declaration, // overloads of << defined in the global namespace and those // visible via Koenig lookup are both exposed in this function. using ::operator <<; *ss_ << val; return *this; } // Streams a pointer value to this object. // // This function is an overload of the previous one. When you // stream a pointer to a Message, this definition will be used as it // is more specialized. (The C++ Standard, section // [temp.func.order].) If you stream a non-pointer, then the // previous definition will be used. // // The reason for this overload is that streaming a NULL pointer to // ostream is undefined behavior. Depending on the compiler, you // may get "0", "(nil)", "(null)", or an access violation. To // ensure consistent result across compilers, we always treat NULL // as "(null)". template inline Message& operator <<(T* const& pointer) { // NOLINT if (pointer == NULL) { *ss_ << "(null)"; } else { *ss_ << pointer; } return *this; } #endif // GTEST_OS_SYMBIAN // Since the basic IO manipulators are overloaded for both narrow // and wide streams, we have to provide this specialized definition // of operator <<, even though its body is the same as the // templatized version above. Without this definition, streaming // endl or other basic IO manipulators to Message will confuse the // compiler. Message& operator <<(BasicNarrowIoManip val) { *ss_ << val; return *this; } // Instead of 1/0, we want to see true/false for bool values. Message& operator <<(bool b) { return *this << (b ? "true" : "false"); } // These two overloads allow streaming a wide C string to a Message // using the UTF-8 encoding. Message& operator <<(const wchar_t* wide_c_str); Message& operator <<(wchar_t* wide_c_str); #if GTEST_HAS_STD_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& operator <<(const ::std::wstring& wstr); #endif // GTEST_HAS_STD_WSTRING #if GTEST_HAS_GLOBAL_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& operator <<(const ::wstring& wstr); #endif // GTEST_HAS_GLOBAL_WSTRING // Gets the text streamed to this object so far as an std::string. // Each '\0' character in the buffer is replaced with "\\0". // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. std::string GetString() const; private: #if GTEST_OS_SYMBIAN // These are needed as the Nokia Symbian Compiler cannot decide between // const T& and const T* in a function template. The Nokia compiler _can_ // decide between class template specializations for T and T*, so a // tr1::type_traits-like is_pointer works, and we can overload on that. template inline void StreamHelper(internal::true_type /*is_pointer*/, T* pointer) { if (pointer == NULL) { *ss_ << "(null)"; } else { *ss_ << pointer; } } template inline void StreamHelper(internal::false_type /*is_pointer*/, const T& value) { // See the comments in Message& operator <<(const T&) above for why // we need this using statement. using ::operator <<; *ss_ << value; } #endif // GTEST_OS_SYMBIAN // We'll hold the text streamed to this object here. const internal::scoped_ptr< ::std::stringstream> ss_; // We declare (but don't implement) this to prevent the compiler // from implementing the assignment operator. void operator=(const Message&); }; // Streams a Message to an ostream. inline std::ostream& operator <<(std::ostream& os, const Message& sb) { return os << sb.GetString(); } namespace internal { // Converts a streamable value to an std::string. A NULL pointer is // converted to "(null)". When the input value is a ::string, // ::std::string, ::wstring, or ::std::wstring object, each NUL // character in it is replaced with "\\0". template std::string StreamableToString(const T& streamable) { return (Message() << streamable).GetString(); } } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/gtest-param-test.h000066400000000000000000002241301377520261000235530ustar00rootroot00000000000000// This file was GENERATED by command: // pump.py gtest-param-test.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: vladl@google.com (Vlad Losev) // // Macros and functions for implementing parameterized tests // in Google C++ Testing Framework (Google Test) // // This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // #ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ // Value-parameterized tests allow you to test your code with different // parameters without writing multiple copies of the same test. // // Here is how you use value-parameterized tests: #if 0 // To write value-parameterized tests, first you should define a fixture // class. It is usually derived from testing::TestWithParam (see below for // another inheritance scheme that's sometimes useful in more complicated // class hierarchies), where the type of your parameter values. // TestWithParam is itself derived from testing::Test. T can be any // copyable type. If it's a raw pointer, you are responsible for managing the // lifespan of the pointed values. class FooTest : public ::testing::TestWithParam { // You can implement all the usual class fixture members here. }; // Then, use the TEST_P macro to define as many parameterized tests // for this fixture as you want. The _P suffix is for "parameterized" // or "pattern", whichever you prefer to think. TEST_P(FooTest, DoesBlah) { // Inside a test, access the test parameter with the GetParam() method // of the TestWithParam class: EXPECT_TRUE(foo.Blah(GetParam())); ... } TEST_P(FooTest, HasBlahBlah) { ... } // Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test // case with any set of parameters you want. Google Test defines a number // of functions for generating test parameters. They return what we call // (surprise!) parameter generators. Here is a summary of them, which // are all in the testing namespace: // // // Range(begin, end [, step]) - Yields values {begin, begin+step, // begin+step+step, ...}. The values do not // include end. step defaults to 1. // Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. // ValuesIn(container) - Yields values from a C-style array, an STL // ValuesIn(begin,end) container, or an iterator range [begin, end). // Bool() - Yields sequence {false, true}. // Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product // for the math savvy) of the values generated // by the N generators. // // For more details, see comments at the definitions of these functions below // in this file. // // The following statement will instantiate tests from the FooTest test case // each with parameter values "meeny", "miny", and "moe". INSTANTIATE_TEST_CASE_P(InstantiationName, FooTest, Values("meeny", "miny", "moe")); // To distinguish different instances of the pattern, (yes, you // can instantiate it more then once) the first argument to the // INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the // actual test case name. Remember to pick unique prefixes for different // instantiations. The tests from the instantiation above will have // these names: // // * InstantiationName/FooTest.DoesBlah/0 for "meeny" // * InstantiationName/FooTest.DoesBlah/1 for "miny" // * InstantiationName/FooTest.DoesBlah/2 for "moe" // * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" // * InstantiationName/FooTest.HasBlahBlah/1 for "miny" // * InstantiationName/FooTest.HasBlahBlah/2 for "moe" // // You can use these names in --gtest_filter. // // This statement will instantiate all tests from FooTest again, each // with parameter values "cat" and "dog": const char* pets[] = {"cat", "dog"}; INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); // The tests from the instantiation above will have these names: // // * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" // * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" // * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" // * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" // // Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests // in the given test case, whether their definitions come before or // AFTER the INSTANTIATE_TEST_CASE_P statement. // // Please also note that generator expressions (including parameters to the // generators) are evaluated in InitGoogleTest(), after main() has started. // This allows the user on one hand, to adjust generator parameters in order // to dynamically determine a set of tests to run and on the other hand, // give the user a chance to inspect the generated tests with Google Test // reflection API before RUN_ALL_TESTS() is executed. // // You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc // for more examples. // // In the future, we plan to publish the API for defining new parameter // generators. But for now this interface remains part of the internal // implementation and is subject to change. // // // A parameterized test fixture must be derived from testing::Test and from // testing::WithParamInterface, where T is the type of the parameter // values. Inheriting from TestWithParam satisfies that requirement because // TestWithParam inherits from both Test and WithParamInterface. In more // complicated hierarchies, however, it is occasionally useful to inherit // separately from Test and WithParamInterface. For example: class BaseTest : public ::testing::Test { // You can inherit all the usual members for a non-parameterized test // fixture here. }; class DerivedTest : public BaseTest, public ::testing::WithParamInterface { // The usual test fixture members go here too. }; TEST_F(BaseTest, HasFoo) { // This is an ordinary non-parameterized test. } TEST_P(DerivedTest, DoesBlah) { // GetParam works just the same here as if you inherit from TestWithParam. EXPECT_TRUE(foo.Blah(GetParam())); } #endif // 0 #include "gtest/internal/gtest-port.h" #if !GTEST_OS_SYMBIAN # include #endif // scripts/fuse_gtest.py depends on gtest's own header being #included // *unconditionally*. Therefore these #includes cannot be moved // inside #if GTEST_HAS_PARAM_TEST. #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-param-util.h" #include "gtest/internal/gtest-param-util-generated.h" #if GTEST_HAS_PARAM_TEST namespace testing { // Functions producing parameter generators. // // Google Test uses these generators to produce parameters for value- // parameterized tests. When a parameterized test case is instantiated // with a particular generator, Google Test creates and runs tests // for each element in the sequence produced by the generator. // // In the following sample, tests from test case FooTest are instantiated // each three times with parameter values 3, 5, and 8: // // class FooTest : public TestWithParam { ... }; // // TEST_P(FooTest, TestThis) { // } // TEST_P(FooTest, TestThat) { // } // INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); // // Range() returns generators providing sequences of values in a range. // // Synopsis: // Range(start, end) // - returns a generator producing a sequence of values {start, start+1, // start+2, ..., }. // Range(start, end, step) // - returns a generator producing a sequence of values {start, start+step, // start+step+step, ..., }. // Notes: // * The generated sequences never include end. For example, Range(1, 5) // returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) // returns a generator producing {1, 3, 5, 7}. // * start and end must have the same type. That type may be any integral or // floating-point type or a user defined type satisfying these conditions: // * It must be assignable (have operator=() defined). // * It must have operator+() (operator+(int-compatible type) for // two-operand version). // * It must have operator<() defined. // Elements in the resulting sequences will also have that type. // * Condition start < end must be satisfied in order for resulting sequences // to contain any elements. // template internal::ParamGenerator Range(T start, T end, IncrementT step) { return internal::ParamGenerator( new internal::RangeGenerator(start, end, step)); } template internal::ParamGenerator Range(T start, T end) { return Range(start, end, 1); } // ValuesIn() function allows generation of tests with parameters coming from // a container. // // Synopsis: // ValuesIn(const T (&array)[N]) // - returns a generator producing sequences with elements from // a C-style array. // ValuesIn(const Container& container) // - returns a generator producing sequences with elements from // an STL-style container. // ValuesIn(Iterator begin, Iterator end) // - returns a generator producing sequences with elements from // a range [begin, end) defined by a pair of STL-style iterators. These // iterators can also be plain C pointers. // // Please note that ValuesIn copies the values from the containers // passed in and keeps them to generate tests in RUN_ALL_TESTS(). // // Examples: // // This instantiates tests from test case StringTest // each with C-string values of "foo", "bar", and "baz": // // const char* strings[] = {"foo", "bar", "baz"}; // INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings)); // // This instantiates tests from test case StlStringTest // each with STL strings with values "a" and "b": // // ::std::vector< ::std::string> GetParameterStrings() { // ::std::vector< ::std::string> v; // v.push_back("a"); // v.push_back("b"); // return v; // } // // INSTANTIATE_TEST_CASE_P(CharSequence, // StlStringTest, // ValuesIn(GetParameterStrings())); // // // This will also instantiate tests from CharTest // each with parameter values 'a' and 'b': // // ::std::list GetParameterChars() { // ::std::list list; // list.push_back('a'); // list.push_back('b'); // return list; // } // ::std::list l = GetParameterChars(); // INSTANTIATE_TEST_CASE_P(CharSequence2, // CharTest, // ValuesIn(l.begin(), l.end())); // template internal::ParamGenerator< typename ::testing::internal::IteratorTraits::value_type> ValuesIn(ForwardIterator begin, ForwardIterator end) { typedef typename ::testing::internal::IteratorTraits ::value_type ParamType; return internal::ParamGenerator( new internal::ValuesInIteratorRangeGenerator(begin, end)); } template internal::ParamGenerator ValuesIn(const T (&array)[N]) { return ValuesIn(array, array + N); } template internal::ParamGenerator ValuesIn( const Container& container) { return ValuesIn(container.begin(), container.end()); } // Values() allows generating tests from explicitly specified list of // parameters. // // Synopsis: // Values(T v1, T v2, ..., T vN) // - returns a generator producing sequences with elements v1, v2, ..., vN. // // For example, this instantiates tests from test case BarTest each // with values "one", "two", and "three": // // INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); // // This instantiates tests from test case BazTest each with values 1, 2, 3.5. // The exact type of values will depend on the type of parameter in BazTest. // // INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); // // Currently, Values() supports from 1 to 50 parameters. // template internal::ValueArray1 Values(T1 v1) { return internal::ValueArray1(v1); } template internal::ValueArray2 Values(T1 v1, T2 v2) { return internal::ValueArray2(v1, v2); } template internal::ValueArray3 Values(T1 v1, T2 v2, T3 v3) { return internal::ValueArray3(v1, v2, v3); } template internal::ValueArray4 Values(T1 v1, T2 v2, T3 v3, T4 v4) { return internal::ValueArray4(v1, v2, v3, v4); } template internal::ValueArray5 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) { return internal::ValueArray5(v1, v2, v3, v4, v5); } template internal::ValueArray6 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) { return internal::ValueArray6(v1, v2, v3, v4, v5, v6); } template internal::ValueArray7 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) { return internal::ValueArray7(v1, v2, v3, v4, v5, v6, v7); } template internal::ValueArray8 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) { return internal::ValueArray8(v1, v2, v3, v4, v5, v6, v7, v8); } template internal::ValueArray9 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) { return internal::ValueArray9(v1, v2, v3, v4, v5, v6, v7, v8, v9); } template internal::ValueArray10 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) { return internal::ValueArray10(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); } template internal::ValueArray11 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11) { return internal::ValueArray11(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); } template internal::ValueArray12 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12) { return internal::ValueArray12(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12); } template internal::ValueArray13 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13) { return internal::ValueArray13(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); } template internal::ValueArray14 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) { return internal::ValueArray14(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14); } template internal::ValueArray15 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) { return internal::ValueArray15(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15); } template internal::ValueArray16 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) { return internal::ValueArray16(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16); } template internal::ValueArray17 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17) { return internal::ValueArray17(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17); } template internal::ValueArray18 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18) { return internal::ValueArray18(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18); } template internal::ValueArray19 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) { return internal::ValueArray19(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19); } template internal::ValueArray20 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) { return internal::ValueArray20(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20); } template internal::ValueArray21 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) { return internal::ValueArray21(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21); } template internal::ValueArray22 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) { return internal::ValueArray22(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22); } template internal::ValueArray23 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) { return internal::ValueArray23(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23); } template internal::ValueArray24 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) { return internal::ValueArray24(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24); } template internal::ValueArray25 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) { return internal::ValueArray25(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25); } template internal::ValueArray26 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26) { return internal::ValueArray26(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26); } template internal::ValueArray27 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27) { return internal::ValueArray27(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27); } template internal::ValueArray28 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28) { return internal::ValueArray28(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28); } template internal::ValueArray29 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29) { return internal::ValueArray29(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29); } template internal::ValueArray30 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) { return internal::ValueArray30(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30); } template internal::ValueArray31 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) { return internal::ValueArray31(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31); } template internal::ValueArray32 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) { return internal::ValueArray32(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32); } template internal::ValueArray33 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33) { return internal::ValueArray33(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33); } template internal::ValueArray34 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34) { return internal::ValueArray34(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34); } template internal::ValueArray35 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) { return internal::ValueArray35(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35); } template internal::ValueArray36 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) { return internal::ValueArray36(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36); } template internal::ValueArray37 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37) { return internal::ValueArray37(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37); } template internal::ValueArray38 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) { return internal::ValueArray38(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38); } template internal::ValueArray39 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) { return internal::ValueArray39(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39); } template internal::ValueArray40 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) { return internal::ValueArray40(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40); } template internal::ValueArray41 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) { return internal::ValueArray41(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41); } template internal::ValueArray42 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42) { return internal::ValueArray42(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42); } template internal::ValueArray43 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43) { return internal::ValueArray43(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43); } template internal::ValueArray44 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44) { return internal::ValueArray44(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44); } template internal::ValueArray45 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) { return internal::ValueArray45(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45); } template internal::ValueArray46 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) { return internal::ValueArray46(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46); } template internal::ValueArray47 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) { return internal::ValueArray47(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47); } template internal::ValueArray48 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) { return internal::ValueArray48(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48); } template internal::ValueArray49 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49) { return internal::ValueArray49(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49); } template internal::ValueArray50 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) { return internal::ValueArray50(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50); } // Bool() allows generating tests with parameters in a set of (false, true). // // Synopsis: // Bool() // - returns a generator producing sequences with elements {false, true}. // // It is useful when testing code that depends on Boolean flags. Combinations // of multiple flags can be tested when several Bool()'s are combined using // Combine() function. // // In the following example all tests in the test case FlagDependentTest // will be instantiated twice with parameters false and true. // // class FlagDependentTest : public testing::TestWithParam { // virtual void SetUp() { // external_flag = GetParam(); // } // } // INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); // inline internal::ParamGenerator Bool() { return Values(false, true); } # if GTEST_HAS_COMBINE // Combine() allows the user to combine two or more sequences to produce // values of a Cartesian product of those sequences' elements. // // Synopsis: // Combine(gen1, gen2, ..., genN) // - returns a generator producing sequences with elements coming from // the Cartesian product of elements from the sequences generated by // gen1, gen2, ..., genN. The sequence elements will have a type of // tuple where T1, T2, ..., TN are the types // of elements from sequences produces by gen1, gen2, ..., genN. // // Combine can have up to 10 arguments. This number is currently limited // by the maximum number of elements in the tuple implementation used by Google // Test. // // Example: // // This will instantiate tests in test case AnimalTest each one with // the parameter values tuple("cat", BLACK), tuple("cat", WHITE), // tuple("dog", BLACK), and tuple("dog", WHITE): // // enum Color { BLACK, GRAY, WHITE }; // class AnimalTest // : public testing::TestWithParam > {...}; // // TEST_P(AnimalTest, AnimalLooksNice) {...} // // INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, // Combine(Values("cat", "dog"), // Values(BLACK, WHITE))); // // This will instantiate tests in FlagDependentTest with all variations of two // Boolean flags: // // class FlagDependentTest // : public testing::TestWithParam > { // virtual void SetUp() { // // Assigns external_flag_1 and external_flag_2 values from the tuple. // tie(external_flag_1, external_flag_2) = GetParam(); // } // }; // // TEST_P(FlagDependentTest, TestFeature1) { // // Test your code using external_flag_1 and external_flag_2 here. // } // INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, // Combine(Bool(), Bool())); // template internal::CartesianProductHolder2 Combine( const Generator1& g1, const Generator2& g2) { return internal::CartesianProductHolder2( g1, g2); } template internal::CartesianProductHolder3 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3) { return internal::CartesianProductHolder3( g1, g2, g3); } template internal::CartesianProductHolder4 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4) { return internal::CartesianProductHolder4( g1, g2, g3, g4); } template internal::CartesianProductHolder5 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5) { return internal::CartesianProductHolder5( g1, g2, g3, g4, g5); } template internal::CartesianProductHolder6 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6) { return internal::CartesianProductHolder6( g1, g2, g3, g4, g5, g6); } template internal::CartesianProductHolder7 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7) { return internal::CartesianProductHolder7( g1, g2, g3, g4, g5, g6, g7); } template internal::CartesianProductHolder8 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8) { return internal::CartesianProductHolder8( g1, g2, g3, g4, g5, g6, g7, g8); } template internal::CartesianProductHolder9 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9) { return internal::CartesianProductHolder9( g1, g2, g3, g4, g5, g6, g7, g8, g9); } template internal::CartesianProductHolder10 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9, const Generator10& g10) { return internal::CartesianProductHolder10( g1, g2, g3, g4, g5, g6, g7, g8, g9, g10); } # endif // GTEST_HAS_COMBINE # define TEST_P(test_case_name, test_name) \ class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ : public test_case_name { \ public: \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ virtual void TestBody(); \ private: \ static int AddToRegistry() { \ ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ GetTestCasePatternHolder(\ #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ #test_case_name, \ #test_name, \ new ::testing::internal::TestMetaFactory< \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ return 0; \ } \ static int gtest_registering_dummy_; \ GTEST_DISALLOW_COPY_AND_ASSIGN_(\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ }; \ int GTEST_TEST_CLASS_NAME_(test_case_name, \ test_name)::gtest_registering_dummy_ = \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() # define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ ::testing::internal::ParamGenerator \ gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ int gtest_##prefix##test_case_name##_dummy_ = \ ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ GetTestCasePatternHolder(\ #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ #prefix, \ >est_##prefix##test_case_name##_EvalGenerator_, \ __FILE__, __LINE__) } // namespace testing #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/gtest-param-test.h.pump000066400000000000000000000445541377520261000245450ustar00rootroot00000000000000$$ -*- mode: c++; -*- $var n = 50 $$ Maximum length of Values arguments we want to support. $var maxtuple = 10 $$ Maximum number of Combine arguments we want to support. // Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: vladl@google.com (Vlad Losev) // // Macros and functions for implementing parameterized tests // in Google C++ Testing Framework (Google Test) // // This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // #ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ // Value-parameterized tests allow you to test your code with different // parameters without writing multiple copies of the same test. // // Here is how you use value-parameterized tests: #if 0 // To write value-parameterized tests, first you should define a fixture // class. It is usually derived from testing::TestWithParam (see below for // another inheritance scheme that's sometimes useful in more complicated // class hierarchies), where the type of your parameter values. // TestWithParam is itself derived from testing::Test. T can be any // copyable type. If it's a raw pointer, you are responsible for managing the // lifespan of the pointed values. class FooTest : public ::testing::TestWithParam { // You can implement all the usual class fixture members here. }; // Then, use the TEST_P macro to define as many parameterized tests // for this fixture as you want. The _P suffix is for "parameterized" // or "pattern", whichever you prefer to think. TEST_P(FooTest, DoesBlah) { // Inside a test, access the test parameter with the GetParam() method // of the TestWithParam class: EXPECT_TRUE(foo.Blah(GetParam())); ... } TEST_P(FooTest, HasBlahBlah) { ... } // Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test // case with any set of parameters you want. Google Test defines a number // of functions for generating test parameters. They return what we call // (surprise!) parameter generators. Here is a summary of them, which // are all in the testing namespace: // // // Range(begin, end [, step]) - Yields values {begin, begin+step, // begin+step+step, ...}. The values do not // include end. step defaults to 1. // Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. // ValuesIn(container) - Yields values from a C-style array, an STL // ValuesIn(begin,end) container, or an iterator range [begin, end). // Bool() - Yields sequence {false, true}. // Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product // for the math savvy) of the values generated // by the N generators. // // For more details, see comments at the definitions of these functions below // in this file. // // The following statement will instantiate tests from the FooTest test case // each with parameter values "meeny", "miny", and "moe". INSTANTIATE_TEST_CASE_P(InstantiationName, FooTest, Values("meeny", "miny", "moe")); // To distinguish different instances of the pattern, (yes, you // can instantiate it more then once) the first argument to the // INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the // actual test case name. Remember to pick unique prefixes for different // instantiations. The tests from the instantiation above will have // these names: // // * InstantiationName/FooTest.DoesBlah/0 for "meeny" // * InstantiationName/FooTest.DoesBlah/1 for "miny" // * InstantiationName/FooTest.DoesBlah/2 for "moe" // * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" // * InstantiationName/FooTest.HasBlahBlah/1 for "miny" // * InstantiationName/FooTest.HasBlahBlah/2 for "moe" // // You can use these names in --gtest_filter. // // This statement will instantiate all tests from FooTest again, each // with parameter values "cat" and "dog": const char* pets[] = {"cat", "dog"}; INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); // The tests from the instantiation above will have these names: // // * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" // * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" // * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" // * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" // // Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests // in the given test case, whether their definitions come before or // AFTER the INSTANTIATE_TEST_CASE_P statement. // // Please also note that generator expressions (including parameters to the // generators) are evaluated in InitGoogleTest(), after main() has started. // This allows the user on one hand, to adjust generator parameters in order // to dynamically determine a set of tests to run and on the other hand, // give the user a chance to inspect the generated tests with Google Test // reflection API before RUN_ALL_TESTS() is executed. // // You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc // for more examples. // // In the future, we plan to publish the API for defining new parameter // generators. But for now this interface remains part of the internal // implementation and is subject to change. // // // A parameterized test fixture must be derived from testing::Test and from // testing::WithParamInterface, where T is the type of the parameter // values. Inheriting from TestWithParam satisfies that requirement because // TestWithParam inherits from both Test and WithParamInterface. In more // complicated hierarchies, however, it is occasionally useful to inherit // separately from Test and WithParamInterface. For example: class BaseTest : public ::testing::Test { // You can inherit all the usual members for a non-parameterized test // fixture here. }; class DerivedTest : public BaseTest, public ::testing::WithParamInterface { // The usual test fixture members go here too. }; TEST_F(BaseTest, HasFoo) { // This is an ordinary non-parameterized test. } TEST_P(DerivedTest, DoesBlah) { // GetParam works just the same here as if you inherit from TestWithParam. EXPECT_TRUE(foo.Blah(GetParam())); } #endif // 0 #include "gtest/internal/gtest-port.h" #if !GTEST_OS_SYMBIAN # include #endif // scripts/fuse_gtest.py depends on gtest's own header being #included // *unconditionally*. Therefore these #includes cannot be moved // inside #if GTEST_HAS_PARAM_TEST. #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-param-util.h" #include "gtest/internal/gtest-param-util-generated.h" #if GTEST_HAS_PARAM_TEST namespace testing { // Functions producing parameter generators. // // Google Test uses these generators to produce parameters for value- // parameterized tests. When a parameterized test case is instantiated // with a particular generator, Google Test creates and runs tests // for each element in the sequence produced by the generator. // // In the following sample, tests from test case FooTest are instantiated // each three times with parameter values 3, 5, and 8: // // class FooTest : public TestWithParam { ... }; // // TEST_P(FooTest, TestThis) { // } // TEST_P(FooTest, TestThat) { // } // INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); // // Range() returns generators providing sequences of values in a range. // // Synopsis: // Range(start, end) // - returns a generator producing a sequence of values {start, start+1, // start+2, ..., }. // Range(start, end, step) // - returns a generator producing a sequence of values {start, start+step, // start+step+step, ..., }. // Notes: // * The generated sequences never include end. For example, Range(1, 5) // returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) // returns a generator producing {1, 3, 5, 7}. // * start and end must have the same type. That type may be any integral or // floating-point type or a user defined type satisfying these conditions: // * It must be assignable (have operator=() defined). // * It must have operator+() (operator+(int-compatible type) for // two-operand version). // * It must have operator<() defined. // Elements in the resulting sequences will also have that type. // * Condition start < end must be satisfied in order for resulting sequences // to contain any elements. // template internal::ParamGenerator Range(T start, T end, IncrementT step) { return internal::ParamGenerator( new internal::RangeGenerator(start, end, step)); } template internal::ParamGenerator Range(T start, T end) { return Range(start, end, 1); } // ValuesIn() function allows generation of tests with parameters coming from // a container. // // Synopsis: // ValuesIn(const T (&array)[N]) // - returns a generator producing sequences with elements from // a C-style array. // ValuesIn(const Container& container) // - returns a generator producing sequences with elements from // an STL-style container. // ValuesIn(Iterator begin, Iterator end) // - returns a generator producing sequences with elements from // a range [begin, end) defined by a pair of STL-style iterators. These // iterators can also be plain C pointers. // // Please note that ValuesIn copies the values from the containers // passed in and keeps them to generate tests in RUN_ALL_TESTS(). // // Examples: // // This instantiates tests from test case StringTest // each with C-string values of "foo", "bar", and "baz": // // const char* strings[] = {"foo", "bar", "baz"}; // INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings)); // // This instantiates tests from test case StlStringTest // each with STL strings with values "a" and "b": // // ::std::vector< ::std::string> GetParameterStrings() { // ::std::vector< ::std::string> v; // v.push_back("a"); // v.push_back("b"); // return v; // } // // INSTANTIATE_TEST_CASE_P(CharSequence, // StlStringTest, // ValuesIn(GetParameterStrings())); // // // This will also instantiate tests from CharTest // each with parameter values 'a' and 'b': // // ::std::list GetParameterChars() { // ::std::list list; // list.push_back('a'); // list.push_back('b'); // return list; // } // ::std::list l = GetParameterChars(); // INSTANTIATE_TEST_CASE_P(CharSequence2, // CharTest, // ValuesIn(l.begin(), l.end())); // template internal::ParamGenerator< typename ::testing::internal::IteratorTraits::value_type> ValuesIn(ForwardIterator begin, ForwardIterator end) { typedef typename ::testing::internal::IteratorTraits ::value_type ParamType; return internal::ParamGenerator( new internal::ValuesInIteratorRangeGenerator(begin, end)); } template internal::ParamGenerator ValuesIn(const T (&array)[N]) { return ValuesIn(array, array + N); } template internal::ParamGenerator ValuesIn( const Container& container) { return ValuesIn(container.begin(), container.end()); } // Values() allows generating tests from explicitly specified list of // parameters. // // Synopsis: // Values(T v1, T v2, ..., T vN) // - returns a generator producing sequences with elements v1, v2, ..., vN. // // For example, this instantiates tests from test case BarTest each // with values "one", "two", and "three": // // INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); // // This instantiates tests from test case BazTest each with values 1, 2, 3.5. // The exact type of values will depend on the type of parameter in BazTest. // // INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); // // Currently, Values() supports from 1 to $n parameters. // $range i 1..n $for i [[ $range j 1..i template <$for j, [[typename T$j]]> internal::ValueArray$i<$for j, [[T$j]]> Values($for j, [[T$j v$j]]) { return internal::ValueArray$i<$for j, [[T$j]]>($for j, [[v$j]]); } ]] // Bool() allows generating tests with parameters in a set of (false, true). // // Synopsis: // Bool() // - returns a generator producing sequences with elements {false, true}. // // It is useful when testing code that depends on Boolean flags. Combinations // of multiple flags can be tested when several Bool()'s are combined using // Combine() function. // // In the following example all tests in the test case FlagDependentTest // will be instantiated twice with parameters false and true. // // class FlagDependentTest : public testing::TestWithParam { // virtual void SetUp() { // external_flag = GetParam(); // } // } // INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); // inline internal::ParamGenerator Bool() { return Values(false, true); } # if GTEST_HAS_COMBINE // Combine() allows the user to combine two or more sequences to produce // values of a Cartesian product of those sequences' elements. // // Synopsis: // Combine(gen1, gen2, ..., genN) // - returns a generator producing sequences with elements coming from // the Cartesian product of elements from the sequences generated by // gen1, gen2, ..., genN. The sequence elements will have a type of // tuple where T1, T2, ..., TN are the types // of elements from sequences produces by gen1, gen2, ..., genN. // // Combine can have up to $maxtuple arguments. This number is currently limited // by the maximum number of elements in the tuple implementation used by Google // Test. // // Example: // // This will instantiate tests in test case AnimalTest each one with // the parameter values tuple("cat", BLACK), tuple("cat", WHITE), // tuple("dog", BLACK), and tuple("dog", WHITE): // // enum Color { BLACK, GRAY, WHITE }; // class AnimalTest // : public testing::TestWithParam > {...}; // // TEST_P(AnimalTest, AnimalLooksNice) {...} // // INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, // Combine(Values("cat", "dog"), // Values(BLACK, WHITE))); // // This will instantiate tests in FlagDependentTest with all variations of two // Boolean flags: // // class FlagDependentTest // : public testing::TestWithParam > { // virtual void SetUp() { // // Assigns external_flag_1 and external_flag_2 values from the tuple. // tie(external_flag_1, external_flag_2) = GetParam(); // } // }; // // TEST_P(FlagDependentTest, TestFeature1) { // // Test your code using external_flag_1 and external_flag_2 here. // } // INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, // Combine(Bool(), Bool())); // $range i 2..maxtuple $for i [[ $range j 1..i template <$for j, [[typename Generator$j]]> internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine( $for j, [[const Generator$j& g$j]]) { return internal::CartesianProductHolder$i<$for j, [[Generator$j]]>( $for j, [[g$j]]); } ]] # endif // GTEST_HAS_COMBINE # define TEST_P(test_case_name, test_name) \ class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ : public test_case_name { \ public: \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ virtual void TestBody(); \ private: \ static int AddToRegistry() { \ ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ GetTestCasePatternHolder(\ #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ #test_case_name, \ #test_name, \ new ::testing::internal::TestMetaFactory< \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ return 0; \ } \ static int gtest_registering_dummy_; \ GTEST_DISALLOW_COPY_AND_ASSIGN_(\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ }; \ int GTEST_TEST_CLASS_NAME_(test_case_name, \ test_name)::gtest_registering_dummy_ = \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() # define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ ::testing::internal::ParamGenerator \ gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ int gtest_##prefix##test_case_name##_dummy_ = \ ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ GetTestCasePatternHolder(\ #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ #prefix, \ >est_##prefix##test_case_name##_EvalGenerator_, \ __FILE__, __LINE__) } // namespace testing #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/gtest-printers.h000066400000000000000000000755711377520261000233610ustar00rootroot00000000000000// Copyright 2007, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Google Test - The Google C++ Testing Framework // // This file implements a universal value printer that can print a // value of any type T: // // void ::testing::internal::UniversalPrinter::Print(value, ostream_ptr); // // A user can teach this function how to print a class type T by // defining either operator<<() or PrintTo() in the namespace that // defines T. More specifically, the FIRST defined function in the // following list will be used (assuming T is defined in namespace // foo): // // 1. foo::PrintTo(const T&, ostream*) // 2. operator<<(ostream&, const T&) defined in either foo or the // global namespace. // // If none of the above is defined, it will print the debug string of // the value if it is a protocol buffer, or print the raw bytes in the // value otherwise. // // To aid debugging: when T is a reference type, the address of the // value is also printed; when T is a (const) char pointer, both the // pointer value and the NUL-terminated string it points to are // printed. // // We also provide some convenient wrappers: // // // Prints a value to a string. For a (const or not) char // // pointer, the NUL-terminated string (but not the pointer) is // // printed. // std::string ::testing::PrintToString(const T& value); // // // Prints a value tersely: for a reference type, the referenced // // value (but not the address) is printed; for a (const or not) char // // pointer, the NUL-terminated string (but not the pointer) is // // printed. // void ::testing::internal::UniversalTersePrint(const T& value, ostream*); // // // Prints value using the type inferred by the compiler. The difference // // from UniversalTersePrint() is that this function prints both the // // pointer and the NUL-terminated string for a (const or not) char pointer. // void ::testing::internal::UniversalPrint(const T& value, ostream*); // // // Prints the fields of a tuple tersely to a string vector, one // // element for each field. Tuple support must be enabled in // // gtest-port.h. // std::vector UniversalTersePrintTupleFieldsToStrings( // const Tuple& value); // // Known limitation: // // The print primitives print the elements of an STL-style container // using the compiler-inferred type of *iter where iter is a // const_iterator of the container. When const_iterator is an input // iterator but not a forward iterator, this inferred type may not // match value_type, and the print output may be incorrect. In // practice, this is rarely a problem as for most containers // const_iterator is a forward iterator. We'll fix this if there's an // actual need for it. Note that this fix cannot rely on value_type // being defined as many user-defined container types don't have // value_type. #ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ #define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ #include // NOLINT #include #include #include #include #include "gtest/internal/gtest-port.h" #include "gtest/internal/gtest-internal.h" namespace testing { // Definitions in the 'internal' and 'internal2' name spaces are // subject to change without notice. DO NOT USE THEM IN USER CODE! namespace internal2 { // Prints the given number of bytes in the given object to the given // ostream. GTEST_API_ void PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count, ::std::ostream* os); // For selecting which printer to use when a given type has neither << // nor PrintTo(). enum TypeKind { kProtobuf, // a protobuf type kConvertibleToInteger, // a type implicitly convertible to BiggestInt // (e.g. a named or unnamed enum type) kOtherType // anything else }; // TypeWithoutFormatter::PrintValue(value, os) is called // by the universal printer to print a value of type T when neither // operator<< nor PrintTo() is defined for T, where kTypeKind is the // "kind" of T as defined by enum TypeKind. template class TypeWithoutFormatter { public: // This default version is called when kTypeKind is kOtherType. static void PrintValue(const T& value, ::std::ostream* os) { PrintBytesInObjectTo(reinterpret_cast(&value), sizeof(value), os); } }; // We print a protobuf using its ShortDebugString() when the string // doesn't exceed this many characters; otherwise we print it using // DebugString() for better readability. const size_t kProtobufOneLinerMaxLength = 50; template class TypeWithoutFormatter { public: static void PrintValue(const T& value, ::std::ostream* os) { const ::testing::internal::string short_str = value.ShortDebugString(); const ::testing::internal::string pretty_str = short_str.length() <= kProtobufOneLinerMaxLength ? short_str : ("\n" + value.DebugString()); *os << ("<" + pretty_str + ">"); } }; template class TypeWithoutFormatter { public: // Since T has no << operator or PrintTo() but can be implicitly // converted to BiggestInt, we print it as a BiggestInt. // // Most likely T is an enum type (either named or unnamed), in which // case printing it as an integer is the desired behavior. In case // T is not an enum, printing it as an integer is the best we can do // given that it has no user-defined printer. static void PrintValue(const T& value, ::std::ostream* os) { const internal::BiggestInt kBigInt = value; *os << kBigInt; } }; // Prints the given value to the given ostream. If the value is a // protocol message, its debug string is printed; if it's an enum or // of a type implicitly convertible to BiggestInt, it's printed as an // integer; otherwise the bytes in the value are printed. This is // what UniversalPrinter::Print() does when it knows nothing about // type T and T has neither << operator nor PrintTo(). // // A user can override this behavior for a class type Foo by defining // a << operator in the namespace where Foo is defined. // // We put this operator in namespace 'internal2' instead of 'internal' // to simplify the implementation, as much code in 'internal' needs to // use << in STL, which would conflict with our own << were it defined // in 'internal'. // // Note that this operator<< takes a generic std::basic_ostream type instead of the more restricted std::ostream. If // we define it to take an std::ostream instead, we'll get an // "ambiguous overloads" compiler error when trying to print a type // Foo that supports streaming to std::basic_ostream, as the compiler cannot tell whether // operator<<(std::ostream&, const T&) or // operator<<(std::basic_stream, const Foo&) is more // specific. template ::std::basic_ostream& operator<<( ::std::basic_ostream& os, const T& x) { TypeWithoutFormatter::value ? kProtobuf : internal::ImplicitlyConvertible::value ? kConvertibleToInteger : kOtherType)>::PrintValue(x, &os); return os; } } // namespace internal2 } // namespace testing // This namespace MUST NOT BE NESTED IN ::testing, or the name look-up // magic needed for implementing UniversalPrinter won't work. namespace testing_internal { // Used to print a value that is not an STL-style container when the // user doesn't define PrintTo() for it. template void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) { // With the following statement, during unqualified name lookup, // testing::internal2::operator<< appears as if it was declared in // the nearest enclosing namespace that contains both // ::testing_internal and ::testing::internal2, i.e. the global // namespace. For more details, refer to the C++ Standard section // 7.3.4-1 [namespace.udir]. This allows us to fall back onto // testing::internal2::operator<< in case T doesn't come with a << // operator. // // We cannot write 'using ::testing::internal2::operator<<;', which // gcc 3.3 fails to compile due to a compiler bug. using namespace ::testing::internal2; // NOLINT // Assuming T is defined in namespace foo, in the next statement, // the compiler will consider all of: // // 1. foo::operator<< (thanks to Koenig look-up), // 2. ::operator<< (as the current namespace is enclosed in ::), // 3. testing::internal2::operator<< (thanks to the using statement above). // // The operator<< whose type matches T best will be picked. // // We deliberately allow #2 to be a candidate, as sometimes it's // impossible to define #1 (e.g. when foo is ::std, defining // anything in it is undefined behavior unless you are a compiler // vendor.). *os << value; } } // namespace testing_internal namespace testing { namespace internal { // UniversalPrinter::Print(value, ostream_ptr) prints the given // value to the given ostream. The caller must ensure that // 'ostream_ptr' is not NULL, or the behavior is undefined. // // We define UniversalPrinter as a class template (as opposed to a // function template), as we need to partially specialize it for // reference types, which cannot be done with function templates. template class UniversalPrinter; template void UniversalPrint(const T& value, ::std::ostream* os); // Used to print an STL-style container when the user doesn't define // a PrintTo() for it. template void DefaultPrintTo(IsContainer /* dummy */, false_type /* is not a pointer */, const C& container, ::std::ostream* os) { const size_t kMaxCount = 32; // The maximum number of elements to print. *os << '{'; size_t count = 0; for (typename C::const_iterator it = container.begin(); it != container.end(); ++it, ++count) { if (count > 0) { *os << ','; if (count == kMaxCount) { // Enough has been printed. *os << " ..."; break; } } *os << ' '; // We cannot call PrintTo(*it, os) here as PrintTo() doesn't // handle *it being a native array. internal::UniversalPrint(*it, os); } if (count > 0) { *os << ' '; } *os << '}'; } // Used to print a pointer that is neither a char pointer nor a member // pointer, when the user doesn't define PrintTo() for it. (A member // variable pointer or member function pointer doesn't really point to // a location in the address space. Their representation is // implementation-defined. Therefore they will be printed as raw // bytes.) template void DefaultPrintTo(IsNotContainer /* dummy */, true_type /* is a pointer */, T* p, ::std::ostream* os) { if (p == NULL) { *os << "NULL"; } else { // C++ doesn't allow casting from a function pointer to any object // pointer. // // IsTrue() silences warnings: "Condition is always true", // "unreachable code". if (IsTrue(ImplicitlyConvertible::value)) { // T is not a function type. We just call << to print p, // relying on ADL to pick up user-defined << for their pointer // types, if any. *os << p; } else { // T is a function type, so '*os << p' doesn't do what we want // (it just prints p as bool). We want to print p as a const // void*. However, we cannot cast it to const void* directly, // even using reinterpret_cast, as earlier versions of gcc // (e.g. 3.4.5) cannot compile the cast when p is a function // pointer. Casting to UInt64 first solves the problem. *os << reinterpret_cast( reinterpret_cast(p)); } } } // Used to print a non-container, non-pointer value when the user // doesn't define PrintTo() for it. template void DefaultPrintTo(IsNotContainer /* dummy */, false_type /* is not a pointer */, const T& value, ::std::ostream* os) { ::testing_internal::DefaultPrintNonContainerTo(value, os); } // Prints the given value using the << operator if it has one; // otherwise prints the bytes in it. This is what // UniversalPrinter::Print() does when PrintTo() is not specialized // or overloaded for type T. // // A user can override this behavior for a class type Foo by defining // an overload of PrintTo() in the namespace where Foo is defined. We // give the user this option as sometimes defining a << operator for // Foo is not desirable (e.g. the coding style may prevent doing it, // or there is already a << operator but it doesn't do what the user // wants). template void PrintTo(const T& value, ::std::ostream* os) { // DefaultPrintTo() is overloaded. The type of its first two // arguments determine which version will be picked. If T is an // STL-style container, the version for container will be called; if // T is a pointer, the pointer version will be called; otherwise the // generic version will be called. // // Note that we check for container types here, prior to we check // for protocol message types in our operator<<. The rationale is: // // For protocol messages, we want to give people a chance to // override Google Mock's format by defining a PrintTo() or // operator<<. For STL containers, other formats can be // incompatible with Google Mock's format for the container // elements; therefore we check for container types here to ensure // that our format is used. // // The second argument of DefaultPrintTo() is needed to bypass a bug // in Symbian's C++ compiler that prevents it from picking the right // overload between: // // PrintTo(const T& x, ...); // PrintTo(T* x, ...); DefaultPrintTo(IsContainerTest(0), is_pointer(), value, os); } // The following list of PrintTo() overloads tells // UniversalPrinter::Print() how to print standard types (built-in // types, strings, plain arrays, and pointers). // Overloads for various char types. GTEST_API_ void PrintTo(unsigned char c, ::std::ostream* os); GTEST_API_ void PrintTo(signed char c, ::std::ostream* os); inline void PrintTo(char c, ::std::ostream* os) { // When printing a plain char, we always treat it as unsigned. This // way, the output won't be affected by whether the compiler thinks // char is signed or not. PrintTo(static_cast(c), os); } // Overloads for other simple built-in types. inline void PrintTo(bool x, ::std::ostream* os) { *os << (x ? "true" : "false"); } // Overload for wchar_t type. // Prints a wchar_t as a symbol if it is printable or as its internal // code otherwise and also as its decimal code (except for L'\0'). // The L'\0' char is printed as "L'\\0'". The decimal code is printed // as signed integer when wchar_t is implemented by the compiler // as a signed type and is printed as an unsigned integer when wchar_t // is implemented as an unsigned type. GTEST_API_ void PrintTo(wchar_t wc, ::std::ostream* os); // Overloads for C strings. GTEST_API_ void PrintTo(const char* s, ::std::ostream* os); inline void PrintTo(char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } // signed/unsigned char is often used for representing binary data, so // we print pointers to it as void* to be safe. inline void PrintTo(const signed char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } inline void PrintTo(signed char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } inline void PrintTo(const unsigned char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } inline void PrintTo(unsigned char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } // MSVC can be configured to define wchar_t as a typedef of unsigned // short. It defines _NATIVE_WCHAR_T_DEFINED when wchar_t is a native // type. When wchar_t is a typedef, defining an overload for const // wchar_t* would cause unsigned short* be printed as a wide string, // possibly causing invalid memory accesses. #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) // Overloads for wide C strings GTEST_API_ void PrintTo(const wchar_t* s, ::std::ostream* os); inline void PrintTo(wchar_t* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } #endif // Overload for C arrays. Multi-dimensional arrays are printed // properly. // Prints the given number of elements in an array, without printing // the curly braces. template void PrintRawArrayTo(const T a[], size_t count, ::std::ostream* os) { UniversalPrint(a[0], os); for (size_t i = 1; i != count; i++) { *os << ", "; UniversalPrint(a[i], os); } } // Overloads for ::string and ::std::string. #if GTEST_HAS_GLOBAL_STRING GTEST_API_ void PrintStringTo(const ::string&s, ::std::ostream* os); inline void PrintTo(const ::string& s, ::std::ostream* os) { PrintStringTo(s, os); } #endif // GTEST_HAS_GLOBAL_STRING GTEST_API_ void PrintStringTo(const ::std::string&s, ::std::ostream* os); inline void PrintTo(const ::std::string& s, ::std::ostream* os) { PrintStringTo(s, os); } // Overloads for ::wstring and ::std::wstring. #if GTEST_HAS_GLOBAL_WSTRING GTEST_API_ void PrintWideStringTo(const ::wstring&s, ::std::ostream* os); inline void PrintTo(const ::wstring& s, ::std::ostream* os) { PrintWideStringTo(s, os); } #endif // GTEST_HAS_GLOBAL_WSTRING #if GTEST_HAS_STD_WSTRING GTEST_API_ void PrintWideStringTo(const ::std::wstring&s, ::std::ostream* os); inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) { PrintWideStringTo(s, os); } #endif // GTEST_HAS_STD_WSTRING #if GTEST_HAS_TR1_TUPLE // Overload for ::std::tr1::tuple. Needed for printing function arguments, // which are packed as tuples. // Helper function for printing a tuple. T must be instantiated with // a tuple type. template void PrintTupleTo(const T& t, ::std::ostream* os); // Overloaded PrintTo() for tuples of various arities. We support // tuples of up-to 10 fields. The following implementation works // regardless of whether tr1::tuple is implemented using the // non-standard variadic template feature or not. inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo( const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } #endif // GTEST_HAS_TR1_TUPLE // Overload for std::pair. template void PrintTo(const ::std::pair& value, ::std::ostream* os) { *os << '('; // We cannot use UniversalPrint(value.first, os) here, as T1 may be // a reference type. The same for printing value.second. UniversalPrinter::Print(value.first, os); *os << ", "; UniversalPrinter::Print(value.second, os); *os << ')'; } // Implements printing a non-reference type T by letting the compiler // pick the right overload of PrintTo() for T. template class UniversalPrinter { public: // MSVC warns about adding const to a function type, so we want to // disable the warning. #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4180) // Temporarily disables warning 4180. #endif // _MSC_VER // Note: we deliberately don't call this PrintTo(), as that name // conflicts with ::testing::internal::PrintTo in the body of the // function. static void Print(const T& value, ::std::ostream* os) { // By default, ::testing::internal::PrintTo() is used for printing // the value. // // Thanks to Koenig look-up, if T is a class and has its own // PrintTo() function defined in its namespace, that function will // be visible here. Since it is more specific than the generic ones // in ::testing::internal, it will be picked by the compiler in the // following statement - exactly what we want. PrintTo(value, os); } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif // _MSC_VER }; // UniversalPrintArray(begin, len, os) prints an array of 'len' // elements, starting at address 'begin'. template void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) { if (len == 0) { *os << "{}"; } else { *os << "{ "; const size_t kThreshold = 18; const size_t kChunkSize = 8; // If the array has more than kThreshold elements, we'll have to // omit some details by printing only the first and the last // kChunkSize elements. // TODO(wan@google.com): let the user control the threshold using a flag. if (len <= kThreshold) { PrintRawArrayTo(begin, len, os); } else { PrintRawArrayTo(begin, kChunkSize, os); *os << ", ..., "; PrintRawArrayTo(begin + len - kChunkSize, kChunkSize, os); } *os << " }"; } } // This overload prints a (const) char array compactly. GTEST_API_ void UniversalPrintArray( const char* begin, size_t len, ::std::ostream* os); // This overload prints a (const) wchar_t array compactly. GTEST_API_ void UniversalPrintArray( const wchar_t* begin, size_t len, ::std::ostream* os); // Implements printing an array type T[N]. template class UniversalPrinter { public: // Prints the given array, omitting some elements when there are too // many. static void Print(const T (&a)[N], ::std::ostream* os) { UniversalPrintArray(a, N, os); } }; // Implements printing a reference type T&. template class UniversalPrinter { public: // MSVC warns about adding const to a function type, so we want to // disable the warning. #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4180) // Temporarily disables warning 4180. #endif // _MSC_VER static void Print(const T& value, ::std::ostream* os) { // Prints the address of the value. We use reinterpret_cast here // as static_cast doesn't compile when T is a function type. *os << "@" << reinterpret_cast(&value) << " "; // Then prints the value itself. UniversalPrint(value, os); } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif // _MSC_VER }; // Prints a value tersely: for a reference type, the referenced value // (but not the address) is printed; for a (const) char pointer, the // NUL-terminated string (but not the pointer) is printed. template class UniversalTersePrinter { public: static void Print(const T& value, ::std::ostream* os) { UniversalPrint(value, os); } }; template class UniversalTersePrinter { public: static void Print(const T& value, ::std::ostream* os) { UniversalPrint(value, os); } }; template class UniversalTersePrinter { public: static void Print(const T (&value)[N], ::std::ostream* os) { UniversalPrinter::Print(value, os); } }; template <> class UniversalTersePrinter { public: static void Print(const char* str, ::std::ostream* os) { if (str == NULL) { *os << "NULL"; } else { UniversalPrint(string(str), os); } } }; template <> class UniversalTersePrinter { public: static void Print(char* str, ::std::ostream* os) { UniversalTersePrinter::Print(str, os); } }; #if GTEST_HAS_STD_WSTRING template <> class UniversalTersePrinter { public: static void Print(const wchar_t* str, ::std::ostream* os) { if (str == NULL) { *os << "NULL"; } else { UniversalPrint(::std::wstring(str), os); } } }; #endif template <> class UniversalTersePrinter { public: static void Print(wchar_t* str, ::std::ostream* os) { UniversalTersePrinter::Print(str, os); } }; template void UniversalTersePrint(const T& value, ::std::ostream* os) { UniversalTersePrinter::Print(value, os); } // Prints a value using the type inferred by the compiler. The // difference between this and UniversalTersePrint() is that for a // (const) char pointer, this prints both the pointer and the // NUL-terminated string. template void UniversalPrint(const T& value, ::std::ostream* os) { // A workarond for the bug in VC++ 7.1 that prevents us from instantiating // UniversalPrinter with T directly. typedef T T1; UniversalPrinter::Print(value, os); } #if GTEST_HAS_TR1_TUPLE typedef ::std::vector Strings; // This helper template allows PrintTo() for tuples and // UniversalTersePrintTupleFieldsToStrings() to be defined by // induction on the number of tuple fields. The idea is that // TuplePrefixPrinter::PrintPrefixTo(t, os) prints the first N // fields in tuple t, and can be defined in terms of // TuplePrefixPrinter. // The inductive case. template struct TuplePrefixPrinter { // Prints the first N fields of a tuple. template static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { TuplePrefixPrinter::PrintPrefixTo(t, os); *os << ", "; UniversalPrinter::type> ::Print(::std::tr1::get(t), os); } // Tersely prints the first N fields of a tuple to a string vector, // one element for each field. template static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { TuplePrefixPrinter::TersePrintPrefixToStrings(t, strings); ::std::stringstream ss; UniversalTersePrint(::std::tr1::get(t), &ss); strings->push_back(ss.str()); } }; // Base cases. template <> struct TuplePrefixPrinter<0> { template static void PrintPrefixTo(const Tuple&, ::std::ostream*) {} template static void TersePrintPrefixToStrings(const Tuple&, Strings*) {} }; // We have to specialize the entire TuplePrefixPrinter<> class // template here, even though the definition of // TersePrintPrefixToStrings() is the same as the generic version, as // Embarcadero (formerly CodeGear, formerly Borland) C++ doesn't // support specializing a method template of a class template. template <> struct TuplePrefixPrinter<1> { template static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { UniversalPrinter::type>:: Print(::std::tr1::get<0>(t), os); } template static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { ::std::stringstream ss; UniversalTersePrint(::std::tr1::get<0>(t), &ss); strings->push_back(ss.str()); } }; // Helper function for printing a tuple. T must be instantiated with // a tuple type. template void PrintTupleTo(const T& t, ::std::ostream* os) { *os << "("; TuplePrefixPrinter< ::std::tr1::tuple_size::value>:: PrintPrefixTo(t, os); *os << ")"; } // Prints the fields of a tuple tersely to a string vector, one // element for each field. See the comment before // UniversalTersePrint() for how we define "tersely". template Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) { Strings result; TuplePrefixPrinter< ::std::tr1::tuple_size::value>:: TersePrintPrefixToStrings(value, &result); return result; } #endif // GTEST_HAS_TR1_TUPLE } // namespace internal template ::std::string PrintToString(const T& value) { ::std::stringstream ss; internal::UniversalTersePrinter::Print(value, &ss); return ss.str(); } } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/gtest-spi.h000066400000000000000000000233401377520261000222710ustar00rootroot00000000000000// Copyright 2007, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // Utilities for testing Google Test itself and code that uses Google Test // (e.g. frameworks built on top of Google Test). #ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_ #define GTEST_INCLUDE_GTEST_GTEST_SPI_H_ #include "gtest/gtest.h" namespace testing { // This helper class can be used to mock out Google Test failure reporting // so that we can test Google Test or code that builds on Google Test. // // An object of this class appends a TestPartResult object to the // TestPartResultArray object given in the constructor whenever a Google Test // failure is reported. It can either intercept only failures that are // generated in the same thread that created this object or it can intercept // all generated failures. The scope of this mock object can be controlled with // the second argument to the two arguments constructor. class GTEST_API_ ScopedFakeTestPartResultReporter : public TestPartResultReporterInterface { public: // The two possible mocking modes of this object. enum InterceptMode { INTERCEPT_ONLY_CURRENT_THREAD, // Intercepts only thread local failures. INTERCEPT_ALL_THREADS // Intercepts all failures. }; // The c'tor sets this object as the test part result reporter used // by Google Test. The 'result' parameter specifies where to report the // results. This reporter will only catch failures generated in the current // thread. DEPRECATED explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result); // Same as above, but you can choose the interception scope of this object. ScopedFakeTestPartResultReporter(InterceptMode intercept_mode, TestPartResultArray* result); // The d'tor restores the previous test part result reporter. virtual ~ScopedFakeTestPartResultReporter(); // Appends the TestPartResult object to the TestPartResultArray // received in the constructor. // // This method is from the TestPartResultReporterInterface // interface. virtual void ReportTestPartResult(const TestPartResult& result); private: void Init(); const InterceptMode intercept_mode_; TestPartResultReporterInterface* old_reporter_; TestPartResultArray* const result_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter); }; namespace internal { // A helper class for implementing EXPECT_FATAL_FAILURE() and // EXPECT_NONFATAL_FAILURE(). Its destructor verifies that the given // TestPartResultArray contains exactly one failure that has the given // type and contains the given substring. If that's not the case, a // non-fatal failure will be generated. class GTEST_API_ SingleFailureChecker { public: // The constructor remembers the arguments. SingleFailureChecker(const TestPartResultArray* results, TestPartResult::Type type, const string& substr); ~SingleFailureChecker(); private: const TestPartResultArray* const results_; const TestPartResult::Type type_; const string substr_; GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker); }; } // namespace internal } // namespace testing // A set of macros for testing Google Test assertions or code that's expected // to generate Google Test fatal failures. It verifies that the given // statement will cause exactly one fatal Google Test failure with 'substr' // being part of the failure message. // // There are two different versions of this macro. EXPECT_FATAL_FAILURE only // affects and considers failures generated in the current thread and // EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. // // The verification of the assertion is done correctly even when the statement // throws an exception or aborts the current function. // // Known restrictions: // - 'statement' cannot reference local non-static variables or // non-static members of the current object. // - 'statement' cannot return a value. // - You cannot stream a failure message to this macro. // // Note that even though the implementations of the following two // macros are much alike, we cannot refactor them to use a common // helper macro, due to some peculiarity in how the preprocessor // works. The AcceptsMacroThatExpandsToUnprotectedComma test in // gtest_unittest.cc will fail to compile if we do that. #define EXPECT_FATAL_FAILURE(statement, substr) \ do { \ class GTestExpectFatalFailureHelper {\ public:\ static void Execute() { statement; }\ };\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter:: \ INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ GTestExpectFatalFailureHelper::Execute();\ }\ } while (::testing::internal::AlwaysFalse()) #define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ do { \ class GTestExpectFatalFailureHelper {\ public:\ static void Execute() { statement; }\ };\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter:: \ INTERCEPT_ALL_THREADS, >est_failures);\ GTestExpectFatalFailureHelper::Execute();\ }\ } while (::testing::internal::AlwaysFalse()) // A macro for testing Google Test assertions or code that's expected to // generate Google Test non-fatal failures. It asserts that the given // statement will cause exactly one non-fatal Google Test failure with 'substr' // being part of the failure message. // // There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only // affects and considers failures generated in the current thread and // EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. // // 'statement' is allowed to reference local variables and members of // the current object. // // The verification of the assertion is done correctly even when the statement // throws an exception or aborts the current function. // // Known restrictions: // - You cannot stream a failure message to this macro. // // Note that even though the implementations of the following two // macros are much alike, we cannot refactor them to use a common // helper macro, due to some peculiarity in how the preprocessor // works. If we do that, the code won't compile when the user gives // EXPECT_NONFATAL_FAILURE() a statement that contains a macro that // expands to code containing an unprotected comma. The // AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc // catches that. // // For the same reason, we have to write // if (::testing::internal::AlwaysTrue()) { statement; } // instead of // GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) // to avoid an MSVC warning on unreachable code. #define EXPECT_NONFATAL_FAILURE(statement, substr) \ do {\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter:: \ INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ if (::testing::internal::AlwaysTrue()) { statement; }\ }\ } while (::testing::internal::AlwaysFalse()) #define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ do {\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, \ >est_failures);\ if (::testing::internal::AlwaysTrue()) { statement; }\ }\ } while (::testing::internal::AlwaysFalse()) #endif // GTEST_INCLUDE_GTEST_GTEST_SPI_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/gtest-test-part.h000066400000000000000000000145551377520261000234310ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: mheule@google.com (Markus Heule) // #ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ #define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ #include #include #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-string.h" namespace testing { // A copyable object representing the result of a test part (i.e. an // assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()). // // Don't inherit from TestPartResult as its destructor is not virtual. class GTEST_API_ TestPartResult { public: // The possible outcomes of a test part (i.e. an assertion or an // explicit SUCCEED(), FAIL(), or ADD_FAILURE()). enum Type { kSuccess, // Succeeded. kNonFatalFailure, // Failed but the test can continue. kFatalFailure // Failed and the test should be terminated. }; // C'tor. TestPartResult does NOT have a default constructor. // Always use this constructor (with parameters) to create a // TestPartResult object. TestPartResult(Type a_type, const char* a_file_name, int a_line_number, const char* a_message) : type_(a_type), file_name_(a_file_name == NULL ? "" : a_file_name), line_number_(a_line_number), summary_(ExtractSummary(a_message)), message_(a_message) { } // Gets the outcome of the test part. Type type() const { return type_; } // Gets the name of the source file where the test part took place, or // NULL if it's unknown. const char* file_name() const { return file_name_.empty() ? NULL : file_name_.c_str(); } // Gets the line in the source file where the test part took place, // or -1 if it's unknown. int line_number() const { return line_number_; } // Gets the summary of the failure message. const char* summary() const { return summary_.c_str(); } // Gets the message associated with the test part. const char* message() const { return message_.c_str(); } // Returns true iff the test part passed. bool passed() const { return type_ == kSuccess; } // Returns true iff the test part failed. bool failed() const { return type_ != kSuccess; } // Returns true iff the test part non-fatally failed. bool nonfatally_failed() const { return type_ == kNonFatalFailure; } // Returns true iff the test part fatally failed. bool fatally_failed() const { return type_ == kFatalFailure; } private: Type type_; // Gets the summary of the failure message by omitting the stack // trace in it. static std::string ExtractSummary(const char* message); // The name of the source file where the test part took place, or // "" if the source file is unknown. std::string file_name_; // The line in the source file where the test part took place, or -1 // if the line number is unknown. int line_number_; std::string summary_; // The test failure summary. std::string message_; // The test failure message. }; // Prints a TestPartResult object. std::ostream& operator<<(std::ostream& os, const TestPartResult& result); // An array of TestPartResult objects. // // Don't inherit from TestPartResultArray as its destructor is not // virtual. class GTEST_API_ TestPartResultArray { public: TestPartResultArray() {} // Appends the given TestPartResult to the array. void Append(const TestPartResult& result); // Returns the TestPartResult at the given index (0-based). const TestPartResult& GetTestPartResult(int index) const; // Returns the number of TestPartResult objects in the array. int size() const; private: std::vector array_; GTEST_DISALLOW_COPY_AND_ASSIGN_(TestPartResultArray); }; // This interface knows how to report a test part result. class TestPartResultReporterInterface { public: virtual ~TestPartResultReporterInterface() {} virtual void ReportTestPartResult(const TestPartResult& result) = 0; }; namespace internal { // This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a // statement generates new fatal failures. To do so it registers itself as the // current test part result reporter. Besides checking if fatal failures were // reported, it only delegates the reporting to the former result reporter. // The original result reporter is restored in the destructor. // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. class GTEST_API_ HasNewFatalFailureHelper : public TestPartResultReporterInterface { public: HasNewFatalFailureHelper(); virtual ~HasNewFatalFailureHelper(); virtual void ReportTestPartResult(const TestPartResult& result); bool has_new_fatal_failure() const { return has_new_fatal_failure_; } private: bool has_new_fatal_failure_; TestPartResultReporterInterface* original_reporter_; GTEST_DISALLOW_COPY_AND_ASSIGN_(HasNewFatalFailureHelper); }; } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/gtest-typed-test.h000066400000000000000000000240021377520261000235740ustar00rootroot00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ // This header implements typed tests and type-parameterized tests. // Typed (aka type-driven) tests repeat the same test for types in a // list. You must know which types you want to test with when writing // typed tests. Here's how you do it: #if 0 // First, define a fixture class template. It should be parameterized // by a type. Remember to derive it from testing::Test. template class FooTest : public testing::Test { public: ... typedef std::list List; static T shared_; T value_; }; // Next, associate a list of types with the test case, which will be // repeated for each type in the list. The typedef is necessary for // the macro to parse correctly. typedef testing::Types MyTypes; TYPED_TEST_CASE(FooTest, MyTypes); // If the type list contains only one type, you can write that type // directly without Types<...>: // TYPED_TEST_CASE(FooTest, int); // Then, use TYPED_TEST() instead of TEST_F() to define as many typed // tests for this test case as you want. TYPED_TEST(FooTest, DoesBlah) { // Inside a test, refer to TypeParam to get the type parameter. // Since we are inside a derived class template, C++ requires use to // visit the members of FooTest via 'this'. TypeParam n = this->value_; // To visit static members of the fixture, add the TestFixture:: // prefix. n += TestFixture::shared_; // To refer to typedefs in the fixture, add the "typename // TestFixture::" prefix. typename TestFixture::List values; values.push_back(n); ... } TYPED_TEST(FooTest, HasPropertyA) { ... } #endif // 0 // Type-parameterized tests are abstract test patterns parameterized // by a type. Compared with typed tests, type-parameterized tests // allow you to define the test pattern without knowing what the type // parameters are. The defined pattern can be instantiated with // different types any number of times, in any number of translation // units. // // If you are designing an interface or concept, you can define a // suite of type-parameterized tests to verify properties that any // valid implementation of the interface/concept should have. Then, // each implementation can easily instantiate the test suite to verify // that it conforms to the requirements, without having to write // similar tests repeatedly. Here's an example: #if 0 // First, define a fixture class template. It should be parameterized // by a type. Remember to derive it from testing::Test. template class FooTest : public testing::Test { ... }; // Next, declare that you will define a type-parameterized test case // (the _P suffix is for "parameterized" or "pattern", whichever you // prefer): TYPED_TEST_CASE_P(FooTest); // Then, use TYPED_TEST_P() to define as many type-parameterized tests // for this type-parameterized test case as you want. TYPED_TEST_P(FooTest, DoesBlah) { // Inside a test, refer to TypeParam to get the type parameter. TypeParam n = 0; ... } TYPED_TEST_P(FooTest, HasPropertyA) { ... } // Now the tricky part: you need to register all test patterns before // you can instantiate them. The first argument of the macro is the // test case name; the rest are the names of the tests in this test // case. REGISTER_TYPED_TEST_CASE_P(FooTest, DoesBlah, HasPropertyA); // Finally, you are free to instantiate the pattern with the types you // want. If you put the above code in a header file, you can #include // it in multiple C++ source files and instantiate it multiple times. // // To distinguish different instances of the pattern, the first // argument to the INSTANTIATE_* macro is a prefix that will be added // to the actual test case name. Remember to pick unique prefixes for // different instances. typedef testing::Types MyTypes; INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes); // If the type list contains only one type, you can write that type // directly without Types<...>: // INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, int); #endif // 0 #include "gtest/internal/gtest-port.h" #include "gtest/internal/gtest-type-util.h" // Implements typed tests. #if GTEST_HAS_TYPED_TEST // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the name of the typedef for the type parameters of the // given test case. # define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_ // The 'Types' template argument below must have spaces around it // since some compilers may choke on '>>' when passing a template // instance (e.g. Types) # define TYPED_TEST_CASE(CaseName, Types) \ typedef ::testing::internal::TypeList< Types >::type \ GTEST_TYPE_PARAMS_(CaseName) # define TYPED_TEST(CaseName, TestName) \ template \ class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ : public CaseName { \ private: \ typedef CaseName TestFixture; \ typedef gtest_TypeParam_ TypeParam; \ virtual void TestBody(); \ }; \ bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \ ::testing::internal::TypeParameterizedTest< \ CaseName, \ ::testing::internal::TemplateSel< \ GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \ GTEST_TYPE_PARAMS_(CaseName)>::Register(\ "", #CaseName, #TestName, 0); \ template \ void GTEST_TEST_CLASS_NAME_(CaseName, TestName)::TestBody() #endif // GTEST_HAS_TYPED_TEST // Implements type-parameterized tests. #if GTEST_HAS_TYPED_TEST_P // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the namespace name that the type-parameterized tests for // the given type-parameterized test case are defined in. The exact // name of the namespace is subject to change without notice. # define GTEST_CASE_NAMESPACE_(TestCaseName) \ gtest_case_##TestCaseName##_ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the name of the variable used to remember the names of // the defined tests in the given test case. # define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \ gtest_typed_test_case_p_state_##TestCaseName##_ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY. // // Expands to the name of the variable used to remember the names of // the registered tests in the given test case. # define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \ gtest_registered_test_names_##TestCaseName##_ // The variables defined in the type-parameterized test macros are // static as typically these macros are used in a .h file that can be // #included in multiple translation units linked together. # define TYPED_TEST_CASE_P(CaseName) \ static ::testing::internal::TypedTestCasePState \ GTEST_TYPED_TEST_CASE_P_STATE_(CaseName) # define TYPED_TEST_P(CaseName, TestName) \ namespace GTEST_CASE_NAMESPACE_(CaseName) { \ template \ class TestName : public CaseName { \ private: \ typedef CaseName TestFixture; \ typedef gtest_TypeParam_ TypeParam; \ virtual void TestBody(); \ }; \ static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \ GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\ __FILE__, __LINE__, #CaseName, #TestName); \ } \ template \ void GTEST_CASE_NAMESPACE_(CaseName)::TestName::TestBody() # define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \ namespace GTEST_CASE_NAMESPACE_(CaseName) { \ typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ } \ static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \ GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\ __FILE__, __LINE__, #__VA_ARGS__) // The 'Types' template argument below must have spaces around it // since some compilers may choke on '>>' when passing a template // instance (e.g. Types) # define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \ bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \ ::testing::internal::TypeParameterizedTestCase::type>::Register(\ #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName)) #endif // GTEST_HAS_TYPED_TEST_P #endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/gtest.h000066400000000000000000002545621377520261000215140ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) // // This header file defines the public API for Google Test. It should be // included by any test program that uses Google Test. // // IMPORTANT NOTE: Due to limitation of the C++ language, we have to // leave some internal implementation details in this header file. // They are clearly marked by comments like this: // // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // // Such code is NOT meant to be used by a user directly, and is subject // to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user // program! // // Acknowledgment: Google Test borrowed the idea of automatic test // registration from Barthelemy Dagenais' (barthelemy@prologique.com) // easyUnit framework. #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_H_ #include #include #include #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-string.h" #include "gtest/gtest-death-test.h" #include "gtest/gtest-message.h" #include "gtest/gtest-param-test.h" #include "gtest/gtest-printers.h" #include "gtest/gtest_prod.h" #include "gtest/gtest-test-part.h" #include "gtest/gtest-typed-test.h" // Depending on the platform, different string classes are available. // On Linux, in addition to ::std::string, Google also makes use of // class ::string, which has the same interface as ::std::string, but // has a different implementation. // // The user can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that // ::string is available AND is a distinct type to ::std::string, or // define it to 0 to indicate otherwise. // // If the user's ::std::string and ::string are the same class due to // aliasing, he should define GTEST_HAS_GLOBAL_STRING to 0. // // If the user doesn't define GTEST_HAS_GLOBAL_STRING, it is defined // heuristically. namespace testing { // Declares the flags. // This flag temporary enables the disabled tests. GTEST_DECLARE_bool_(also_run_disabled_tests); // This flag brings the debugger on an assertion failure. GTEST_DECLARE_bool_(break_on_failure); // This flag controls whether Google Test catches all test-thrown exceptions // and logs them as failures. GTEST_DECLARE_bool_(catch_exceptions); // This flag enables using colors in terminal output. Available values are // "yes" to enable colors, "no" (disable colors), or "auto" (the default) // to let Google Test decide. GTEST_DECLARE_string_(color); // This flag sets up the filter to select by name using a glob pattern // the tests to run. If the filter is not given all tests are executed. GTEST_DECLARE_string_(filter); // This flag causes the Google Test to list tests. None of the tests listed // are actually run if the flag is provided. GTEST_DECLARE_bool_(list_tests); // This flag controls whether Google Test emits a detailed XML report to a file // in addition to its normal textual output. GTEST_DECLARE_string_(output); // This flags control whether Google Test prints the elapsed time for each // test. GTEST_DECLARE_bool_(print_time); // This flag specifies the random number seed. GTEST_DECLARE_int32_(random_seed); // This flag sets how many times the tests are repeated. The default value // is 1. If the value is -1 the tests are repeating forever. GTEST_DECLARE_int32_(repeat); // This flag controls whether Google Test includes Google Test internal // stack frames in failure stack traces. GTEST_DECLARE_bool_(show_internal_stack_frames); // When this flag is specified, tests' order is randomized on every iteration. GTEST_DECLARE_bool_(shuffle); // This flag specifies the maximum number of stack frames to be // printed in a failure message. GTEST_DECLARE_int32_(stack_trace_depth); // When this flag is specified, a failed assertion will throw an // exception if exceptions are enabled, or exit the program with a // non-zero code otherwise. GTEST_DECLARE_bool_(throw_on_failure); // When this flag is set with a "host:port" string, on supported // platforms test results are streamed to the specified port on // the specified host machine. GTEST_DECLARE_string_(stream_result_to); // The upper limit for valid stack trace depths. const int kMaxStackTraceDepth = 100; namespace internal { class AssertHelper; class DefaultGlobalTestPartResultReporter; class ExecDeathTest; class NoExecDeathTest; class FinalSuccessChecker; class GTestFlagSaver; class StreamingListenerTest; class TestResultAccessor; class TestEventListenersAccessor; class TestEventRepeater; class UnitTestRecordPropertyTestHelper; class WindowsDeathTest; class UnitTestImpl* GetUnitTestImpl(); void ReportFailureInUnknownLocation(TestPartResult::Type result_type, const std::string& message); } // namespace internal // The friend relationship of some of these classes is cyclic. // If we don't forward declare them the compiler might confuse the classes // in friendship clauses with same named classes on the scope. class Test; class TestCase; class TestInfo; class UnitTest; // A class for indicating whether an assertion was successful. When // the assertion wasn't successful, the AssertionResult object // remembers a non-empty message that describes how it failed. // // To create an instance of this class, use one of the factory functions // (AssertionSuccess() and AssertionFailure()). // // This class is useful for two purposes: // 1. Defining predicate functions to be used with Boolean test assertions // EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts // 2. Defining predicate-format functions to be // used with predicate assertions (ASSERT_PRED_FORMAT*, etc). // // For example, if you define IsEven predicate: // // testing::AssertionResult IsEven(int n) { // if ((n % 2) == 0) // return testing::AssertionSuccess(); // else // return testing::AssertionFailure() << n << " is odd"; // } // // Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) // will print the message // // Value of: IsEven(Fib(5)) // Actual: false (5 is odd) // Expected: true // // instead of a more opaque // // Value of: IsEven(Fib(5)) // Actual: false // Expected: true // // in case IsEven is a simple Boolean predicate. // // If you expect your predicate to be reused and want to support informative // messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up // about half as often as positive ones in our tests), supply messages for // both success and failure cases: // // testing::AssertionResult IsEven(int n) { // if ((n % 2) == 0) // return testing::AssertionSuccess() << n << " is even"; // else // return testing::AssertionFailure() << n << " is odd"; // } // // Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print // // Value of: IsEven(Fib(6)) // Actual: true (8 is even) // Expected: false // // NB: Predicates that support negative Boolean assertions have reduced // performance in positive ones so be careful not to use them in tests // that have lots (tens of thousands) of positive Boolean assertions. // // To use this class with EXPECT_PRED_FORMAT assertions such as: // // // Verifies that Foo() returns an even number. // EXPECT_PRED_FORMAT1(IsEven, Foo()); // // you need to define: // // testing::AssertionResult IsEven(const char* expr, int n) { // if ((n % 2) == 0) // return testing::AssertionSuccess(); // else // return testing::AssertionFailure() // << "Expected: " << expr << " is even\n Actual: it's " << n; // } // // If Foo() returns 5, you will see the following message: // // Expected: Foo() is even // Actual: it's 5 // class GTEST_API_ AssertionResult { public: // Copy constructor. // Used in EXPECT_TRUE/FALSE(assertion_result). AssertionResult(const AssertionResult& other); // Used in the EXPECT_TRUE/FALSE(bool_expression). explicit AssertionResult(bool success) : success_(success) {} // Returns true iff the assertion succeeded. operator bool() const { return success_; } // NOLINT // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. AssertionResult operator!() const; // Returns the text streamed into this AssertionResult. Test assertions // use it when they fail (i.e., the predicate's outcome doesn't match the // assertion's expectation). When nothing has been streamed into the // object, returns an empty string. const char* message() const { return message_.get() != NULL ? message_->c_str() : ""; } // TODO(vladl@google.com): Remove this after making sure no clients use it. // Deprecated; please use message() instead. const char* failure_message() const { return message(); } // Streams a custom failure message into this object. template AssertionResult& operator<<(const T& value) { AppendMessage(Message() << value); return *this; } // Allows streaming basic output manipulators such as endl or flush into // this object. AssertionResult& operator<<( ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) { AppendMessage(Message() << basic_manipulator); return *this; } private: // Appends the contents of message to message_. void AppendMessage(const Message& a_message) { if (message_.get() == NULL) message_.reset(new ::std::string); message_->append(a_message.GetString().c_str()); } // Stores result of the assertion predicate. bool success_; // Stores the message describing the condition in case the expectation // construct is not satisfied with the predicate's outcome. // Referenced via a pointer to avoid taking too much stack frame space // with test assertions. internal::scoped_ptr< ::std::string> message_; GTEST_DISALLOW_ASSIGN_(AssertionResult); }; // Makes a successful assertion result. GTEST_API_ AssertionResult AssertionSuccess(); // Makes a failed assertion result. GTEST_API_ AssertionResult AssertionFailure(); // Makes a failed assertion result with the given failure message. // Deprecated; use AssertionFailure() << msg. GTEST_API_ AssertionResult AssertionFailure(const Message& msg); // The abstract class that all tests inherit from. // // In Google Test, a unit test program contains one or many TestCases, and // each TestCase contains one or many Tests. // // When you define a test using the TEST macro, you don't need to // explicitly derive from Test - the TEST macro automatically does // this for you. // // The only time you derive from Test is when defining a test fixture // to be used a TEST_F. For example: // // class FooTest : public testing::Test { // protected: // virtual void SetUp() { ... } // virtual void TearDown() { ... } // ... // }; // // TEST_F(FooTest, Bar) { ... } // TEST_F(FooTest, Baz) { ... } // // Test is not copyable. class GTEST_API_ Test { public: friend class TestInfo; // Defines types for pointers to functions that set up and tear down // a test case. typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; // The d'tor is virtual as we intend to inherit from Test. virtual ~Test(); // Sets up the stuff shared by all tests in this test case. // // Google Test will call Foo::SetUpTestCase() before running the first // test in test case Foo. Hence a sub-class can define its own // SetUpTestCase() method to shadow the one defined in the super // class. static void SetUpTestCase() {} // Tears down the stuff shared by all tests in this test case. // // Google Test will call Foo::TearDownTestCase() after running the last // test in test case Foo. Hence a sub-class can define its own // TearDownTestCase() method to shadow the one defined in the super // class. static void TearDownTestCase() {} // Returns true iff the current test has a fatal failure. static bool HasFatalFailure(); // Returns true iff the current test has a non-fatal failure. static bool HasNonfatalFailure(); // Returns true iff the current test has a (either fatal or // non-fatal) failure. static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } // Logs a property for the current test, test case, or for the entire // invocation of the test program when used outside of the context of a // test case. Only the last value for a given key is remembered. These // are public static so they can be called from utility functions that are // not members of the test fixture. Calls to RecordProperty made during // lifespan of the test (from the moment its constructor starts to the // moment its destructor finishes) will be output in XML as attributes of // the element. Properties recorded from fixture's // SetUpTestCase or TearDownTestCase are logged as attributes of the // corresponding element. Calls to RecordProperty made in the // global context (before or after invocation of RUN_ALL_TESTS and from // SetUp/TearDown method of Environment objects registered with Google // Test) will be output as attributes of the element. static void RecordProperty(const std::string& key, const std::string& value); static void RecordProperty(const std::string& key, int value); protected: // Creates a Test object. Test(); // Sets up the test fixture. virtual void SetUp(); // Tears down the test fixture. virtual void TearDown(); private: // Returns true iff the current test has the same fixture class as // the first test in the current test case. static bool HasSameFixtureClass(); // Runs the test after the test fixture has been set up. // // A sub-class must implement this to define the test logic. // // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. // Instead, use the TEST or TEST_F macro. virtual void TestBody() = 0; // Sets up, executes, and tears down the test. void Run(); // Deletes self. We deliberately pick an unusual name for this // internal method to avoid clashing with names used in user TESTs. void DeleteSelf_() { delete this; } // Uses a GTestFlagSaver to save and restore all Google Test flags. const internal::GTestFlagSaver* const gtest_flag_saver_; // Often a user mis-spells SetUp() as Setup() and spends a long time // wondering why it is never called by Google Test. The declaration of // the following method is solely for catching such an error at // compile time: // // - The return type is deliberately chosen to be not void, so it // will be a conflict if a user declares void Setup() in his test // fixture. // // - This method is private, so it will be another compiler error // if a user calls it from his test fixture. // // DO NOT OVERRIDE THIS FUNCTION. // // If you see an error about overriding the following function or // about it being private, you have mis-spelled SetUp() as Setup(). struct Setup_should_be_spelled_SetUp {}; virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } // We disallow copying Tests. GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); }; typedef internal::TimeInMillis TimeInMillis; // A copyable object representing a user specified test property which can be // output as a key/value string pair. // // Don't inherit from TestProperty as its destructor is not virtual. class TestProperty { public: // C'tor. TestProperty does NOT have a default constructor. // Always use this constructor (with parameters) to create a // TestProperty object. TestProperty(const std::string& a_key, const std::string& a_value) : key_(a_key), value_(a_value) { } // Gets the user supplied key. const char* key() const { return key_.c_str(); } // Gets the user supplied value. const char* value() const { return value_.c_str(); } // Sets a new value, overriding the one supplied in the constructor. void SetValue(const std::string& new_value) { value_ = new_value; } private: // The key supplied by the user. std::string key_; // The value supplied by the user. std::string value_; }; // The result of a single Test. This includes a list of // TestPartResults, a list of TestProperties, a count of how many // death tests there are in the Test, and how much time it took to run // the Test. // // TestResult is not copyable. class GTEST_API_ TestResult { public: // Creates an empty TestResult. TestResult(); // D'tor. Do not inherit from TestResult. ~TestResult(); // Gets the number of all test parts. This is the sum of the number // of successful test parts and the number of failed test parts. int total_part_count() const; // Returns the number of the test properties. int test_property_count() const; // Returns true iff the test passed (i.e. no test part failed). bool Passed() const { return !Failed(); } // Returns true iff the test failed. bool Failed() const; // Returns true iff the test fatally failed. bool HasFatalFailure() const; // Returns true iff the test has a non-fatal failure. bool HasNonfatalFailure() const; // Returns the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } // Returns the i-th test part result among all the results. i can range // from 0 to test_property_count() - 1. If i is not in that range, aborts // the program. const TestPartResult& GetTestPartResult(int i) const; // Returns the i-th test property. i can range from 0 to // test_property_count() - 1. If i is not in that range, aborts the // program. const TestProperty& GetTestProperty(int i) const; private: friend class TestInfo; friend class TestCase; friend class UnitTest; friend class internal::DefaultGlobalTestPartResultReporter; friend class internal::ExecDeathTest; friend class internal::TestResultAccessor; friend class internal::UnitTestImpl; friend class internal::WindowsDeathTest; // Gets the vector of TestPartResults. const std::vector& test_part_results() const { return test_part_results_; } // Gets the vector of TestProperties. const std::vector& test_properties() const { return test_properties_; } // Sets the elapsed time. void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } // Adds a test property to the list. The property is validated and may add // a non-fatal failure if invalid (e.g., if it conflicts with reserved // key names). If a property is already recorded for the same key, the // value will be updated, rather than storing multiple values for the same // key. xml_element specifies the element for which the property is being // recorded and is used for validation. void RecordProperty(const std::string& xml_element, const TestProperty& test_property); // Adds a failure if the key is a reserved attribute of Google Test // testcase tags. Returns true if the property is valid. // TODO(russr): Validate attribute names are legal and human readable. static bool ValidateTestProperty(const std::string& xml_element, const TestProperty& test_property); // Adds a test part result to the list. void AddTestPartResult(const TestPartResult& test_part_result); // Returns the death test count. int death_test_count() const { return death_test_count_; } // Increments the death test count, returning the new count. int increment_death_test_count() { return ++death_test_count_; } // Clears the test part results. void ClearTestPartResults(); // Clears the object. void Clear(); // Protects mutable state of the property vector and of owned // properties, whose values may be updated. internal::Mutex test_properites_mutex_; // The vector of TestPartResults std::vector test_part_results_; // The vector of TestProperties std::vector test_properties_; // Running count of death tests. int death_test_count_; // The elapsed time, in milliseconds. TimeInMillis elapsed_time_; // We disallow copying TestResult. GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); }; // class TestResult // A TestInfo object stores the following information about a test: // // Test case name // Test name // Whether the test should be run // A function pointer that creates the test object when invoked // Test result // // The constructor of TestInfo registers itself with the UnitTest // singleton such that the RUN_ALL_TESTS() macro knows which tests to // run. class GTEST_API_ TestInfo { public: // Destructs a TestInfo object. This function is not virtual, so // don't inherit from TestInfo. ~TestInfo(); // Returns the test case name. const char* test_case_name() const { return test_case_name_.c_str(); } // Returns the test name. const char* name() const { return name_.c_str(); } // Returns the name of the parameter type, or NULL if this is not a typed // or a type-parameterized test. const char* type_param() const { if (type_param_.get() != NULL) return type_param_->c_str(); return NULL; } // Returns the text representation of the value parameter, or NULL if this // is not a value-parameterized test. const char* value_param() const { if (value_param_.get() != NULL) return value_param_->c_str(); return NULL; } // Returns true if this test should run, that is if the test is not // disabled (or it is disabled but the also_run_disabled_tests flag has // been specified) and its full name matches the user-specified filter. // // Google Test allows the user to filter the tests by their full names. // The full name of a test Bar in test case Foo is defined as // "Foo.Bar". Only the tests that match the filter will run. // // A filter is a colon-separated list of glob (not regex) patterns, // optionally followed by a '-' and a colon-separated list of // negative patterns (tests to exclude). A test is run if it // matches one of the positive patterns and does not match any of // the negative patterns. // // For example, *A*:Foo.* is a filter that matches any string that // contains the character 'A' or starts with "Foo.". bool should_run() const { return should_run_; } // Returns true iff this test will appear in the XML report. bool is_reportable() const { // For now, the XML report includes all tests matching the filter. // In the future, we may trim tests that are excluded because of // sharding. return matches_filter_; } // Returns the result of the test. const TestResult* result() const { return &result_; } private: #if GTEST_HAS_DEATH_TEST friend class internal::DefaultDeathTestFactory; #endif // GTEST_HAS_DEATH_TEST friend class Test; friend class TestCase; friend class internal::UnitTestImpl; friend class internal::StreamingListenerTest; friend TestInfo* internal::MakeAndRegisterTestInfo( const char* test_case_name, const char* name, const char* type_param, const char* value_param, internal::TypeId fixture_class_id, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc, internal::TestFactoryBase* factory); // Constructs a TestInfo object. The newly constructed instance assumes // ownership of the factory object. TestInfo(const std::string& test_case_name, const std::string& name, const char* a_type_param, // NULL if not a type-parameterized test const char* a_value_param, // NULL if not a value-parameterized test internal::TypeId fixture_class_id, internal::TestFactoryBase* factory); // Increments the number of death tests encountered in this test so // far. int increment_death_test_count() { return result_.increment_death_test_count(); } // Creates the test object, runs it, records its result, and then // deletes it. void Run(); static void ClearTestResult(TestInfo* test_info) { test_info->result_.Clear(); } // These fields are immutable properties of the test. const std::string test_case_name_; // Test case name const std::string name_; // Test name // Name of the parameter type, or NULL if this is not a typed or a // type-parameterized test. const internal::scoped_ptr type_param_; // Text representation of the value parameter, or NULL if this is not a // value-parameterized test. const internal::scoped_ptr value_param_; const internal::TypeId fixture_class_id_; // ID of the test fixture class bool should_run_; // True iff this test should run bool is_disabled_; // True iff this test is disabled bool matches_filter_; // True if this test matches the // user-specified filter. internal::TestFactoryBase* const factory_; // The factory that creates // the test object // This field is mutable and needs to be reset before running the // test for the second time. TestResult result_; GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); }; // A test case, which consists of a vector of TestInfos. // // TestCase is not copyable. class GTEST_API_ TestCase { public: // Creates a TestCase with the given name. // // TestCase does NOT have a default constructor. Always use this // constructor to create a TestCase object. // // Arguments: // // name: name of the test case // a_type_param: the name of the test's type parameter, or NULL if // this is not a type-parameterized test. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase(const char* name, const char* a_type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc); // Destructor of TestCase. virtual ~TestCase(); // Gets the name of the TestCase. const char* name() const { return name_.c_str(); } // Returns the name of the parameter type, or NULL if this is not a // type-parameterized test case. const char* type_param() const { if (type_param_.get() != NULL) return type_param_->c_str(); return NULL; } // Returns true if any test in this test case should run. bool should_run() const { return should_run_; } // Gets the number of successful tests in this test case. int successful_test_count() const; // Gets the number of failed tests in this test case. int failed_test_count() const; // Gets the number of disabled tests that will be reported in the XML report. int reportable_disabled_test_count() const; // Gets the number of disabled tests in this test case. int disabled_test_count() const; // Gets the number of tests to be printed in the XML report. int reportable_test_count() const; // Get the number of tests in this test case that should run. int test_to_run_count() const; // Gets the number of all tests in this test case. int total_test_count() const; // Returns true iff the test case passed. bool Passed() const { return !Failed(); } // Returns true iff the test case failed. bool Failed() const { return failed_test_count() > 0; } // Returns the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. const TestInfo* GetTestInfo(int i) const; // Returns the TestResult that holds test properties recorded during // execution of SetUpTestCase and TearDownTestCase. const TestResult& ad_hoc_test_result() const { return ad_hoc_test_result_; } private: friend class Test; friend class internal::UnitTestImpl; // Gets the (mutable) vector of TestInfos in this TestCase. std::vector& test_info_list() { return test_info_list_; } // Gets the (immutable) vector of TestInfos in this TestCase. const std::vector& test_info_list() const { return test_info_list_; } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. TestInfo* GetMutableTestInfo(int i); // Sets the should_run member. void set_should_run(bool should) { should_run_ = should; } // Adds a TestInfo to this test case. Will delete the TestInfo upon // destruction of the TestCase object. void AddTestInfo(TestInfo * test_info); // Clears the results of all tests in this test case. void ClearResult(); // Clears the results of all tests in the given test case. static void ClearTestCaseResult(TestCase* test_case) { test_case->ClearResult(); } // Runs every test in this TestCase. void Run(); // Runs SetUpTestCase() for this TestCase. This wrapper is needed // for catching exceptions thrown from SetUpTestCase(). void RunSetUpTestCase() { (*set_up_tc_)(); } // Runs TearDownTestCase() for this TestCase. This wrapper is // needed for catching exceptions thrown from TearDownTestCase(). void RunTearDownTestCase() { (*tear_down_tc_)(); } // Returns true iff test passed. static bool TestPassed(const TestInfo* test_info) { return test_info->should_run() && test_info->result()->Passed(); } // Returns true iff test failed. static bool TestFailed(const TestInfo* test_info) { return test_info->should_run() && test_info->result()->Failed(); } // Returns true iff the test is disabled and will be reported in the XML // report. static bool TestReportableDisabled(const TestInfo* test_info) { return test_info->is_reportable() && test_info->is_disabled_; } // Returns true iff test is disabled. static bool TestDisabled(const TestInfo* test_info) { return test_info->is_disabled_; } // Returns true iff this test will appear in the XML report. static bool TestReportable(const TestInfo* test_info) { return test_info->is_reportable(); } // Returns true if the given test should run. static bool ShouldRunTest(const TestInfo* test_info) { return test_info->should_run(); } // Shuffles the tests in this test case. void ShuffleTests(internal::Random* random); // Restores the test order to before the first shuffle. void UnshuffleTests(); // Name of the test case. std::string name_; // Name of the parameter type, or NULL if this is not a typed or a // type-parameterized test. const internal::scoped_ptr type_param_; // The vector of TestInfos in their original order. It owns the // elements in the vector. std::vector test_info_list_; // Provides a level of indirection for the test list to allow easy // shuffling and restoring the test order. The i-th element in this // vector is the index of the i-th test in the shuffled test list. std::vector test_indices_; // Pointer to the function that sets up the test case. Test::SetUpTestCaseFunc set_up_tc_; // Pointer to the function that tears down the test case. Test::TearDownTestCaseFunc tear_down_tc_; // True iff any test in this test case should run. bool should_run_; // Elapsed time, in milliseconds. TimeInMillis elapsed_time_; // Holds test properties recorded during execution of SetUpTestCase and // TearDownTestCase. TestResult ad_hoc_test_result_; // We disallow copying TestCases. GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); }; // An Environment object is capable of setting up and tearing down an // environment. The user should subclass this to define his own // environment(s). // // An Environment object does the set-up and tear-down in virtual // methods SetUp() and TearDown() instead of the constructor and the // destructor, as: // // 1. You cannot safely throw from a destructor. This is a problem // as in some cases Google Test is used where exceptions are enabled, and // we may want to implement ASSERT_* using exceptions where they are // available. // 2. You cannot use ASSERT_* directly in a constructor or // destructor. class Environment { public: // The d'tor is virtual as we need to subclass Environment. virtual ~Environment() {} // Override this to define how to set up the environment. virtual void SetUp() {} // Override this to define how to tear down the environment. virtual void TearDown() {} private: // If you see an error about overriding the following function or // about it being private, you have mis-spelled SetUp() as Setup(). struct Setup_should_be_spelled_SetUp {}; virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } }; // The interface for tracing execution of tests. The methods are organized in // the order the corresponding events are fired. class TestEventListener { public: virtual ~TestEventListener() {} // Fired before any test activity starts. virtual void OnTestProgramStart(const UnitTest& unit_test) = 0; // Fired before each iteration of tests starts. There may be more than // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration // index, starting from 0. virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration) = 0; // Fired before environment set-up for each iteration of tests starts. virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0; // Fired after environment set-up for each iteration of tests ends. virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0; // Fired before the test case starts. virtual void OnTestCaseStart(const TestCase& test_case) = 0; // Fired before the test starts. virtual void OnTestStart(const TestInfo& test_info) = 0; // Fired after a failed assertion or a SUCCEED() invocation. virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0; // Fired after the test ends. virtual void OnTestEnd(const TestInfo& test_info) = 0; // Fired after the test case ends. virtual void OnTestCaseEnd(const TestCase& test_case) = 0; // Fired before environment tear-down for each iteration of tests starts. virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0; // Fired after environment tear-down for each iteration of tests ends. virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0; // Fired after each iteration of tests finishes. virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration) = 0; // Fired after all test activities have ended. virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0; }; // The convenience class for users who need to override just one or two // methods and are not concerned that a possible change to a signature of // the methods they override will not be caught during the build. For // comments about each method please see the definition of TestEventListener // above. class EmptyTestEventListener : public TestEventListener { public: virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, int /*iteration*/) {} virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {} virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} virtual void OnTestStart(const TestInfo& /*test_info*/) {} virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {} virtual void OnTestEnd(const TestInfo& /*test_info*/) {} virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {} virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, int /*iteration*/) {} virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} }; // TestEventListeners lets users add listeners to track events in Google Test. class GTEST_API_ TestEventListeners { public: TestEventListeners(); ~TestEventListeners(); // Appends an event listener to the end of the list. Google Test assumes // the ownership of the listener (i.e. it will delete the listener when // the test program finishes). void Append(TestEventListener* listener); // Removes the given event listener from the list and returns it. It then // becomes the caller's responsibility to delete the listener. Returns // NULL if the listener is not found in the list. TestEventListener* Release(TestEventListener* listener); // Returns the standard listener responsible for the default console // output. Can be removed from the listeners list to shut down default // console output. Note that removing this object from the listener list // with Release transfers its ownership to the caller and makes this // function return NULL the next time. TestEventListener* default_result_printer() const { return default_result_printer_; } // Returns the standard listener responsible for the default XML output // controlled by the --gtest_output=xml flag. Can be removed from the // listeners list by users who want to shut down the default XML output // controlled by this flag and substitute it with custom one. Note that // removing this object from the listener list with Release transfers its // ownership to the caller and makes this function return NULL the next // time. TestEventListener* default_xml_generator() const { return default_xml_generator_; } private: friend class TestCase; friend class TestInfo; friend class internal::DefaultGlobalTestPartResultReporter; friend class internal::NoExecDeathTest; friend class internal::TestEventListenersAccessor; friend class internal::UnitTestImpl; // Returns repeater that broadcasts the TestEventListener events to all // subscribers. TestEventListener* repeater(); // Sets the default_result_printer attribute to the provided listener. // The listener is also added to the listener list and previous // default_result_printer is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void SetDefaultResultPrinter(TestEventListener* listener); // Sets the default_xml_generator attribute to the provided listener. The // listener is also added to the listener list and previous // default_xml_generator is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void SetDefaultXmlGenerator(TestEventListener* listener); // Controls whether events will be forwarded by the repeater to the // listeners in the list. bool EventForwardingEnabled() const; void SuppressEventForwarding(); // The actual list of listeners. internal::TestEventRepeater* repeater_; // Listener responsible for the standard result output. TestEventListener* default_result_printer_; // Listener responsible for the creation of the XML output file. TestEventListener* default_xml_generator_; // We disallow copying TestEventListeners. GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); }; // A UnitTest consists of a vector of TestCases. // // This is a singleton class. The only instance of UnitTest is // created when UnitTest::GetInstance() is first called. This // instance is never deleted. // // UnitTest is not copyable. // // This class is thread-safe as long as the methods are called // according to their specification. class GTEST_API_ UnitTest { public: // Gets the singleton UnitTest object. The first time this method // is called, a UnitTest object is constructed and returned. // Consecutive calls will return the same object. static UnitTest* GetInstance(); // Runs all tests in this UnitTest object and prints the result. // Returns 0 if successful, or 1 otherwise. // // This method can only be called from the main thread. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. int Run() GTEST_MUST_USE_RESULT_; // Returns the working directory when the first TEST() or TEST_F() // was executed. The UnitTest object owns the string. const char* original_working_dir() const; // Returns the TestCase object for the test that's currently running, // or NULL if no test is running. const TestCase* current_test_case() const GTEST_LOCK_EXCLUDED_(mutex_); // Returns the TestInfo object for the test that's currently running, // or NULL if no test is running. const TestInfo* current_test_info() const GTEST_LOCK_EXCLUDED_(mutex_); // Returns the random seed used at the start of the current test run. int random_seed() const; #if GTEST_HAS_PARAM_TEST // Returns the ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. internal::ParameterizedTestCaseRegistry& parameterized_test_registry() GTEST_LOCK_EXCLUDED_(mutex_); #endif // GTEST_HAS_PARAM_TEST // Gets the number of successful test cases. int successful_test_case_count() const; // Gets the number of failed test cases. int failed_test_case_count() const; // Gets the number of all test cases. int total_test_case_count() const; // Gets the number of all test cases that contain at least one test // that should run. int test_case_to_run_count() const; // Gets the number of successful tests. int successful_test_count() const; // Gets the number of failed tests. int failed_test_count() const; // Gets the number of disabled tests that will be reported in the XML report. int reportable_disabled_test_count() const; // Gets the number of disabled tests. int disabled_test_count() const; // Gets the number of tests to be printed in the XML report. int reportable_test_count() const; // Gets the number of all tests. int total_test_count() const; // Gets the number of tests that should run. int test_to_run_count() const; // Gets the time of the test program start, in ms from the start of the // UNIX epoch. TimeInMillis start_timestamp() const; // Gets the elapsed time, in milliseconds. TimeInMillis elapsed_time() const; // Returns true iff the unit test passed (i.e. all test cases passed). bool Passed() const; // Returns true iff the unit test failed (i.e. some test case failed // or something outside of all tests failed). bool Failed() const; // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. const TestCase* GetTestCase(int i) const; // Returns the TestResult containing information on test failures and // properties logged outside of individual test cases. const TestResult& ad_hoc_test_result() const; // Returns the list of event listeners that can be used to track events // inside Google Test. TestEventListeners& listeners(); private: // Registers and returns a global test environment. When a test // program is run, all global test environments will be set-up in // the order they were registered. After all tests in the program // have finished, all global test environments will be torn-down in // the *reverse* order they were registered. // // The UnitTest object takes ownership of the given environment. // // This method can only be called from the main thread. Environment* AddEnvironment(Environment* env); // Adds a TestPartResult to the current TestResult object. All // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) // eventually call this to report their results. The user code // should use the assertion macros instead of calling this directly. void AddTestPartResult(TestPartResult::Type result_type, const char* file_name, int line_number, const std::string& message, const std::string& os_stack_trace) GTEST_LOCK_EXCLUDED_(mutex_); // Adds a TestProperty to the current TestResult object when invoked from // inside a test, to current TestCase's ad_hoc_test_result_ when invoked // from SetUpTestCase or TearDownTestCase, or to the global property set // when invoked elsewhere. If the result already contains a property with // the same key, the value will be updated. void RecordProperty(const std::string& key, const std::string& value); // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. TestCase* GetMutableTestCase(int i); // Accessors for the implementation object. internal::UnitTestImpl* impl() { return impl_; } const internal::UnitTestImpl* impl() const { return impl_; } // These classes and funcions are friends as they need to access private // members of UnitTest. friend class Test; friend class internal::AssertHelper; friend class internal::ScopedTrace; friend class internal::StreamingListenerTest; friend class internal::UnitTestRecordPropertyTestHelper; friend Environment* AddGlobalTestEnvironment(Environment* env); friend internal::UnitTestImpl* internal::GetUnitTestImpl(); friend void internal::ReportFailureInUnknownLocation( TestPartResult::Type result_type, const std::string& message); // Creates an empty UnitTest. UnitTest(); // D'tor virtual ~UnitTest(); // Pushes a trace defined by SCOPED_TRACE() on to the per-thread // Google Test trace stack. void PushGTestTrace(const internal::TraceInfo& trace) GTEST_LOCK_EXCLUDED_(mutex_); // Pops a trace from the per-thread Google Test trace stack. void PopGTestTrace() GTEST_LOCK_EXCLUDED_(mutex_); // Protects mutable state in *impl_. This is mutable as some const // methods need to lock it too. mutable internal::Mutex mutex_; // Opaque implementation object. This field is never changed once // the object is constructed. We don't mark it as const here, as // doing so will cause a warning in the constructor of UnitTest. // Mutable state in *impl_ is protected by mutex_. internal::UnitTestImpl* impl_; // We disallow copying UnitTest. GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); }; // A convenient wrapper for adding an environment for the test // program. // // You should call this before RUN_ALL_TESTS() is called, probably in // main(). If you use gtest_main, you need to call this before main() // starts for it to take effect. For example, you can define a global // variable like this: // // testing::Environment* const foo_env = // testing::AddGlobalTestEnvironment(new FooEnvironment); // // However, we strongly recommend you to write your own main() and // call AddGlobalTestEnvironment() there, as relying on initialization // of global variables makes the code harder to read and may cause // problems when you register multiple environments from different // translation units and the environments have dependencies among them // (remember that the compiler doesn't guarantee the order in which // global variables from different translation units are initialized). inline Environment* AddGlobalTestEnvironment(Environment* env) { return UnitTest::GetInstance()->AddEnvironment(env); } // Initializes Google Test. This must be called before calling // RUN_ALL_TESTS(). In particular, it parses a command line for the // flags that Google Test recognizes. Whenever a Google Test flag is // seen, it is removed from argv, and *argc is decremented. // // No value is returned. Instead, the Google Test flag variables are // updated. // // Calling the function for the second time has no user-visible effect. GTEST_API_ void InitGoogleTest(int* argc, char** argv); // This overloaded version can be used in Windows programs compiled in // UNICODE mode. GTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv); namespace internal { // FormatForComparison::Format(value) formats a // value of type ToPrint that is an operand of a comparison assertion // (e.g. ASSERT_EQ). OtherOperand is the type of the other operand in // the comparison, and is used to help determine the best way to // format the value. In particular, when the value is a C string // (char pointer) and the other operand is an STL string object, we // want to format the C string as a string, since we know it is // compared by value with the string object. If the value is a char // pointer but the other operand is not an STL string object, we don't // know whether the pointer is supposed to point to a NUL-terminated // string, and thus want to print it as a pointer to be safe. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // The default case. template class FormatForComparison { public: static ::std::string Format(const ToPrint& value) { return ::testing::PrintToString(value); } }; // Array. template class FormatForComparison { public: static ::std::string Format(const ToPrint* value) { return FormatForComparison::Format(value); } }; // By default, print C string as pointers to be safe, as we don't know // whether they actually point to a NUL-terminated string. #define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType) \ template \ class FormatForComparison { \ public: \ static ::std::string Format(CharType* value) { \ return ::testing::PrintToString(static_cast(value)); \ } \ } GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char); GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char); GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(wchar_t); GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const wchar_t); #undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_ // If a C string is compared with an STL string object, we know it's meant // to point to a NUL-terminated string, and thus can print it as a string. #define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \ template <> \ class FormatForComparison { \ public: \ static ::std::string Format(CharType* value) { \ return ::testing::PrintToString(value); \ } \ } GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::std::string); #if GTEST_HAS_GLOBAL_STRING GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::string); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::string); #endif #if GTEST_HAS_GLOBAL_WSTRING GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::wstring); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::wstring); #endif #if GTEST_HAS_STD_WSTRING GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::std::wstring); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::std::wstring); #endif #undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_ // Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc) // operand to be used in a failure message. The type (but not value) // of the other operand may affect the format. This allows us to // print a char* as a raw pointer when it is compared against another // char* or void*, and print it as a C string when it is compared // against an std::string object, for example. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. template std::string FormatForComparisonFailureMessage( const T1& value, const T2& /* other_operand */) { return FormatForComparison::Format(value); } // The helper function for {ASSERT|EXPECT}_EQ. template AssertionResult CmpHelperEQ(const char* expected_expression, const char* actual_expression, const T1& expected, const T2& actual) { #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4389) // Temporarily disables warning on // signed/unsigned mismatch. #endif if (expected == actual) { return AssertionSuccess(); } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif return EqFailure(expected_expression, actual_expression, FormatForComparisonFailureMessage(expected, actual), FormatForComparisonFailureMessage(actual, expected), false); } // With this overloaded version, we allow anonymous enums to be used // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums // can be implicitly cast to BiggestInt. GTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression, const char* actual_expression, BiggestInt expected, BiggestInt actual); // The helper class for {ASSERT|EXPECT}_EQ. The template argument // lhs_is_null_literal is true iff the first argument to ASSERT_EQ() // is a null pointer literal. The following default implementation is // for lhs_is_null_literal being false. template class EqHelper { public: // This templatized version is for the general case. template static AssertionResult Compare(const char* expected_expression, const char* actual_expression, const T1& expected, const T2& actual) { return CmpHelperEQ(expected_expression, actual_expression, expected, actual); } // With this overloaded version, we allow anonymous enums to be used // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous // enums can be implicitly cast to BiggestInt. // // Even though its body looks the same as the above version, we // cannot merge the two, as it will make anonymous enums unhappy. static AssertionResult Compare(const char* expected_expression, const char* actual_expression, BiggestInt expected, BiggestInt actual) { return CmpHelperEQ(expected_expression, actual_expression, expected, actual); } }; // This specialization is used when the first argument to ASSERT_EQ() // is a null pointer literal, like NULL, false, or 0. template <> class EqHelper { public: // We define two overloaded versions of Compare(). The first // version will be picked when the second argument to ASSERT_EQ() is // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or // EXPECT_EQ(false, a_bool). template static AssertionResult Compare( const char* expected_expression, const char* actual_expression, const T1& expected, const T2& actual, // The following line prevents this overload from being considered if T2 // is not a pointer type. We need this because ASSERT_EQ(NULL, my_ptr) // expands to Compare("", "", NULL, my_ptr), which requires a conversion // to match the Secret* in the other overload, which would otherwise make // this template match better. typename EnableIf::value>::type* = 0) { return CmpHelperEQ(expected_expression, actual_expression, expected, actual); } // This version will be picked when the second argument to ASSERT_EQ() is a // pointer, e.g. ASSERT_EQ(NULL, a_pointer). template static AssertionResult Compare( const char* expected_expression, const char* actual_expression, // We used to have a second template parameter instead of Secret*. That // template parameter would deduce to 'long', making this a better match // than the first overload even without the first overload's EnableIf. // Unfortunately, gcc with -Wconversion-null warns when "passing NULL to // non-pointer argument" (even a deduced integral argument), so the old // implementation caused warnings in user code. Secret* /* expected (NULL) */, T* actual) { // We already know that 'expected' is a null pointer. return CmpHelperEQ(expected_expression, actual_expression, static_cast(NULL), actual); } }; // A macro for implementing the helper functions needed to implement // ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste // of similar code. // // For each templatized helper function, we also define an overloaded // version for BiggestInt in order to reduce code bloat and allow // anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled // with gcc 4. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. #define GTEST_IMPL_CMP_HELPER_(op_name, op)\ template \ AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ const T1& val1, const T2& val2) {\ if (val1 op val2) {\ return AssertionSuccess();\ } else {\ return AssertionFailure() \ << "Expected: (" << expr1 << ") " #op " (" << expr2\ << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ << " vs " << FormatForComparisonFailureMessage(val2, val1);\ }\ }\ GTEST_API_ AssertionResult CmpHelper##op_name(\ const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // Implements the helper function for {ASSERT|EXPECT}_NE GTEST_IMPL_CMP_HELPER_(NE, !=); // Implements the helper function for {ASSERT|EXPECT}_LE GTEST_IMPL_CMP_HELPER_(LE, <=); // Implements the helper function for {ASSERT|EXPECT}_LT GTEST_IMPL_CMP_HELPER_(LT, <); // Implements the helper function for {ASSERT|EXPECT}_GE GTEST_IMPL_CMP_HELPER_(GE, >=); // Implements the helper function for {ASSERT|EXPECT}_GT GTEST_IMPL_CMP_HELPER_(GT, >); #undef GTEST_IMPL_CMP_HELPER_ // The helper function for {ASSERT|EXPECT}_STREQ. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual); // The helper function for {ASSERT|EXPECT}_STRCASEEQ. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual); // The helper function for {ASSERT|EXPECT}_STRNE. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2); // The helper function for {ASSERT|EXPECT}_STRCASENE. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2); // Helper function for *_STREQ on wide strings. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const wchar_t* expected, const wchar_t* actual); // Helper function for *_STRNE on wide strings. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const wchar_t* s1, const wchar_t* s2); } // namespace internal // IsSubstring() and IsNotSubstring() are intended to be used as the // first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by // themselves. They check whether needle is a substring of haystack // (NULL is considered a substring of itself only), and return an // appropriate error message when they fail. // // The {needle,haystack}_expr arguments are the stringified // expressions that generated the two real arguments. GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack); GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack); GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack); #if GTEST_HAS_STD_WSTRING GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack); #endif // GTEST_HAS_STD_WSTRING namespace internal { // Helper template function for comparing floating-points. // // Template parameter: // // RawType: the raw floating-point type (either float or double) // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. template AssertionResult CmpHelperFloatingPointEQ(const char* expected_expression, const char* actual_expression, RawType expected, RawType actual) { const FloatingPoint lhs(expected), rhs(actual); if (lhs.AlmostEquals(rhs)) { return AssertionSuccess(); } ::std::stringstream expected_ss; expected_ss << std::setprecision(std::numeric_limits::digits10 + 2) << expected; ::std::stringstream actual_ss; actual_ss << std::setprecision(std::numeric_limits::digits10 + 2) << actual; return EqFailure(expected_expression, actual_expression, StringStreamToString(&expected_ss), StringStreamToString(&actual_ss), false); } // Helper function for implementing ASSERT_NEAR. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2, const char* abs_error_expr, double val1, double val2, double abs_error); // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // A class that enables one to stream messages to assertion macros class GTEST_API_ AssertHelper { public: // Constructor. AssertHelper(TestPartResult::Type type, const char* file, int line, const char* message); ~AssertHelper(); // Message assignment is a semantic trick to enable assertion // streaming; see the GTEST_MESSAGE_ macro below. void operator=(const Message& message) const; private: // We put our data in a struct so that the size of the AssertHelper class can // be as small as possible. This is important because gcc is incapable of // re-using stack space even for temporary variables, so every EXPECT_EQ // reserves stack space for another AssertHelper. struct AssertHelperData { AssertHelperData(TestPartResult::Type t, const char* srcfile, int line_num, const char* msg) : type(t), file(srcfile), line(line_num), message(msg) { } TestPartResult::Type const type; const char* const file; int const line; std::string const message; private: GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData); }; AssertHelperData* const data_; GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); }; } // namespace internal #if GTEST_HAS_PARAM_TEST // The pure interface class that all value-parameterized tests inherit from. // A value-parameterized class must inherit from both ::testing::Test and // ::testing::WithParamInterface. In most cases that just means inheriting // from ::testing::TestWithParam, but more complicated test hierarchies // may need to inherit from Test and WithParamInterface at different levels. // // This interface has support for accessing the test parameter value via // the GetParam() method. // // Use it with one of the parameter generator defining functions, like Range(), // Values(), ValuesIn(), Bool(), and Combine(). // // class FooTest : public ::testing::TestWithParam { // protected: // FooTest() { // // Can use GetParam() here. // } // virtual ~FooTest() { // // Can use GetParam() here. // } // virtual void SetUp() { // // Can use GetParam() here. // } // virtual void TearDown { // // Can use GetParam() here. // } // }; // TEST_P(FooTest, DoesBar) { // // Can use GetParam() method here. // Foo foo; // ASSERT_TRUE(foo.DoesBar(GetParam())); // } // INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); template class WithParamInterface { public: typedef T ParamType; virtual ~WithParamInterface() {} // The current parameter value. Is also available in the test fixture's // constructor. This member function is non-static, even though it only // references static data, to reduce the opportunity for incorrect uses // like writing 'WithParamInterface::GetParam()' for a test that // uses a fixture whose parameter type is int. const ParamType& GetParam() const { GTEST_CHECK_(parameter_ != NULL) << "GetParam() can only be called inside a value-parameterized test " << "-- did you intend to write TEST_P instead of TEST_F?"; return *parameter_; } private: // Sets parameter value. The caller is responsible for making sure the value // remains alive and unchanged throughout the current test. static void SetParam(const ParamType* parameter) { parameter_ = parameter; } // Static value used for accessing parameter during a test lifetime. static const ParamType* parameter_; // TestClass must be a subclass of WithParamInterface and Test. template friend class internal::ParameterizedTestFactory; }; template const T* WithParamInterface::parameter_ = NULL; // Most value-parameterized classes can ignore the existence of // WithParamInterface, and can just inherit from ::testing::TestWithParam. template class TestWithParam : public Test, public WithParamInterface { }; #endif // GTEST_HAS_PARAM_TEST // Macros for indicating success/failure in test code. // ADD_FAILURE unconditionally adds a failure to the current test. // SUCCEED generates a success - it doesn't automatically make the // current test successful, as a test is only successful when it has // no failure. // // EXPECT_* verifies that a certain condition is satisfied. If not, // it behaves like ADD_FAILURE. In particular: // // EXPECT_TRUE verifies that a Boolean condition is true. // EXPECT_FALSE verifies that a Boolean condition is false. // // FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except // that they will also abort the current function on failure. People // usually want the fail-fast behavior of FAIL and ASSERT_*, but those // writing data-driven tests often find themselves using ADD_FAILURE // and EXPECT_* more. // Generates a nonfatal failure with a generic message. #define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") // Generates a nonfatal failure at the given source file location with // a generic message. #define ADD_FAILURE_AT(file, line) \ GTEST_MESSAGE_AT_(file, line, "Failed", \ ::testing::TestPartResult::kNonFatalFailure) // Generates a fatal failure with a generic message. #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") // Define this macro to 1 to omit the definition of FAIL(), which is a // generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_FAIL # define FAIL() GTEST_FAIL() #endif // Generates a success with a generic message. #define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") // Define this macro to 1 to omit the definition of SUCCEED(), which // is a generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_SUCCEED # define SUCCEED() GTEST_SUCCEED() #endif // Macros for testing exceptions. // // * {ASSERT|EXPECT}_THROW(statement, expected_exception): // Tests that the statement throws the expected exception. // * {ASSERT|EXPECT}_NO_THROW(statement): // Tests that the statement doesn't throw any exception. // * {ASSERT|EXPECT}_ANY_THROW(statement): // Tests that the statement throws an exception. #define EXPECT_THROW(statement, expected_exception) \ GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) #define EXPECT_NO_THROW(statement) \ GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) #define EXPECT_ANY_THROW(statement) \ GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) #define ASSERT_THROW(statement, expected_exception) \ GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) #define ASSERT_NO_THROW(statement) \ GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) #define ASSERT_ANY_THROW(statement) \ GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) // Boolean assertions. Condition can be either a Boolean expression or an // AssertionResult. For more information on how to use AssertionResult with // these macros see comments on that class. #define EXPECT_TRUE(condition) \ GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ GTEST_NONFATAL_FAILURE_) #define EXPECT_FALSE(condition) \ GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ GTEST_NONFATAL_FAILURE_) #define ASSERT_TRUE(condition) \ GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ GTEST_FATAL_FAILURE_) #define ASSERT_FALSE(condition) \ GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ GTEST_FATAL_FAILURE_) // Includes the auto-generated header that implements a family of // generic predicate assertion macros. #include "gtest/gtest_pred_impl.h" // Macros for testing equalities and inequalities. // // * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual // * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 // * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 // * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 // * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 // * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 // // When they are not, Google Test prints both the tested expressions and // their actual values. The values must be compatible built-in types, // or you will get a compiler error. By "compatible" we mean that the // values can be compared by the respective operator. // // Note: // // 1. It is possible to make a user-defined type work with // {ASSERT|EXPECT}_??(), but that requires overloading the // comparison operators and is thus discouraged by the Google C++ // Usage Guide. Therefore, you are advised to use the // {ASSERT|EXPECT}_TRUE() macro to assert that two objects are // equal. // // 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on // pointers (in particular, C strings). Therefore, if you use it // with two C strings, you are testing how their locations in memory // are related, not how their content is related. To compare two C // strings by content, use {ASSERT|EXPECT}_STR*(). // // 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to // {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you // what the actual value is when it fails, and similarly for the // other comparisons. // // 4. Do not depend on the order in which {ASSERT|EXPECT}_??() // evaluate their arguments, which is undefined. // // 5. These macros evaluate their arguments exactly once. // // Examples: // // EXPECT_NE(5, Foo()); // EXPECT_EQ(NULL, a_pointer); // ASSERT_LT(i, array_size); // ASSERT_GT(records.size(), 0) << "There is no record left."; #define EXPECT_EQ(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal:: \ EqHelper::Compare, \ expected, actual) #define EXPECT_NE(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) #define EXPECT_LE(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) #define EXPECT_LT(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) #define EXPECT_GE(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) #define EXPECT_GT(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) #define GTEST_ASSERT_EQ(expected, actual) \ ASSERT_PRED_FORMAT2(::testing::internal:: \ EqHelper::Compare, \ expected, actual) #define GTEST_ASSERT_NE(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) #define GTEST_ASSERT_LE(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) #define GTEST_ASSERT_LT(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) #define GTEST_ASSERT_GE(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) #define GTEST_ASSERT_GT(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) // Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of // ASSERT_XY(), which clashes with some users' own code. #if !GTEST_DONT_DEFINE_ASSERT_EQ # define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_NE # define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_LE # define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_LT # define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_GE # define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_GT # define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) #endif // C-string Comparisons. All tests treat NULL and any non-NULL string // as different. Two NULLs are equal. // // * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 // * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 // * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case // * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case // // For wide or narrow string objects, you can use the // {ASSERT|EXPECT}_??() macros. // // Don't depend on the order in which the arguments are evaluated, // which is undefined. // // These macros evaluate their arguments exactly once. #define EXPECT_STREQ(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) #define EXPECT_STRNE(s1, s2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) #define EXPECT_STRCASEEQ(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) #define EXPECT_STRCASENE(s1, s2)\ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) #define ASSERT_STREQ(expected, actual) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) #define ASSERT_STRNE(s1, s2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) #define ASSERT_STRCASEEQ(expected, actual) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) #define ASSERT_STRCASENE(s1, s2)\ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) // Macros for comparing floating-point numbers. // // * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual): // Tests that two float values are almost equal. // * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual): // Tests that two double values are almost equal. // * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): // Tests that v1 and v2 are within the given distance to each other. // // Google Test uses ULP-based comparison to automatically pick a default // error bound that is appropriate for the operands. See the // FloatingPoint template class in gtest-internal.h if you are // interested in the implementation details. #define EXPECT_FLOAT_EQ(expected, actual)\ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define EXPECT_DOUBLE_EQ(expected, actual)\ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define ASSERT_FLOAT_EQ(expected, actual)\ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define ASSERT_DOUBLE_EQ(expected, actual)\ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define EXPECT_NEAR(val1, val2, abs_error)\ EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ val1, val2, abs_error) #define ASSERT_NEAR(val1, val2, abs_error)\ ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ val1, val2, abs_error) // These predicate format functions work on floating-point values, and // can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. // // EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); // Asserts that val1 is less than, or almost equal to, val2. Fails // otherwise. In particular, it fails if either val1 or val2 is NaN. GTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2, float val1, float val2); GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, double val1, double val2); #if GTEST_OS_WINDOWS // Macros that test for HRESULT failure and success, these are only useful // on Windows, and rely on Windows SDK macros and APIs to compile. // // * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) // // When expr unexpectedly fails or succeeds, Google Test prints the // expected result and the actual result with both a human-readable // string representation of the error, if available, as well as the // hex result code. # define EXPECT_HRESULT_SUCCEEDED(expr) \ EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) # define ASSERT_HRESULT_SUCCEEDED(expr) \ ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) # define EXPECT_HRESULT_FAILED(expr) \ EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) # define ASSERT_HRESULT_FAILED(expr) \ ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) #endif // GTEST_OS_WINDOWS // Macros that execute statement and check that it doesn't generate new fatal // failures in the current thread. // // * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement); // // Examples: // // EXPECT_NO_FATAL_FAILURE(Process()); // ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; // #define ASSERT_NO_FATAL_FAILURE(statement) \ GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) #define EXPECT_NO_FATAL_FAILURE(statement) \ GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) // Causes a trace (including the source file path, the current line // number, and the given message) to be included in every test failure // message generated by code in the current scope. The effect is // undone when the control leaves the current scope. // // The message argument can be anything streamable to std::ostream. // // In the implementation, we include the current line number as part // of the dummy variable name, thus allowing multiple SCOPED_TRACE()s // to appear in the same block - as long as they are on different // lines. #define SCOPED_TRACE(message) \ ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ __FILE__, __LINE__, ::testing::Message() << (message)) // Compile-time assertion for type equality. // StaticAssertTypeEq() compiles iff type1 and type2 are // the same type. The value it returns is not interesting. // // Instead of making StaticAssertTypeEq a class template, we make it a // function template that invokes a helper class template. This // prevents a user from misusing StaticAssertTypeEq by // defining objects of that type. // // CAVEAT: // // When used inside a method of a class template, // StaticAssertTypeEq() is effective ONLY IF the method is // instantiated. For example, given: // // template class Foo { // public: // void Bar() { testing::StaticAssertTypeEq(); } // }; // // the code: // // void Test1() { Foo foo; } // // will NOT generate a compiler error, as Foo::Bar() is never // actually instantiated. Instead, you need: // // void Test2() { Foo foo; foo.Bar(); } // // to cause a compiler error. template bool StaticAssertTypeEq() { (void)internal::StaticAssertTypeEqHelper(); return true; } // Defines a test. // // The first parameter is the name of the test case, and the second // parameter is the name of the test within the test case. // // The convention is to end the test case name with "Test". For // example, a test case for the Foo class can be named FooTest. // // The user should put his test code between braces after using this // macro. Example: // // TEST(FooTest, InitializesCorrectly) { // Foo foo; // EXPECT_TRUE(foo.StatusIsOK()); // } // Note that we call GetTestTypeId() instead of GetTypeId< // ::testing::Test>() here to get the type ID of testing::Test. This // is to work around a suspected linker bug when using Google Test as // a framework on Mac OS X. The bug causes GetTypeId< // ::testing::Test>() to return different values depending on whether // the call is from the Google Test framework itself or from user test // code. GetTestTypeId() is guaranteed to always return the same // value, as it always calls GetTypeId<>() from the Google Test // framework. #define GTEST_TEST(test_case_name, test_name)\ GTEST_TEST_(test_case_name, test_name, \ ::testing::Test, ::testing::internal::GetTestTypeId()) // Define this macro to 1 to omit the definition of TEST(), which // is a generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_TEST # define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) #endif // Defines a test that uses a test fixture. // // The first parameter is the name of the test fixture class, which // also doubles as the test case name. The second parameter is the // name of the test within the test case. // // A test fixture class must be declared earlier. The user should put // his test code between braces after using this macro. Example: // // class FooTest : public testing::Test { // protected: // virtual void SetUp() { b_.AddElement(3); } // // Foo a_; // Foo b_; // }; // // TEST_F(FooTest, InitializesCorrectly) { // EXPECT_TRUE(a_.StatusIsOK()); // } // // TEST_F(FooTest, ReturnsElementCountCorrectly) { // EXPECT_EQ(0, a_.size()); // EXPECT_EQ(1, b_.size()); // } #define TEST_F(test_fixture, test_name)\ GTEST_TEST_(test_fixture, test_name, test_fixture, \ ::testing::internal::GetTypeId()) } // namespace testing // Use this function in main() to run all tests. It returns 0 if all // tests are successful, or 1 otherwise. // // RUN_ALL_TESTS() should be invoked after the command line has been // parsed by InitGoogleTest(). // // This function was formerly a macro; thus, it is in the global // namespace and has an all-caps name. int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_; inline int RUN_ALL_TESTS() { return ::testing::UnitTest::GetInstance()->Run(); } #endif // GTEST_INCLUDE_GTEST_GTEST_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/gtest_pred_impl.h000066400000000000000000000354511377520261000235410ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // This file is AUTOMATICALLY GENERATED on 10/31/2011 by command // 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! // // Implements a family of generic predicate assertion macros. #ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ #define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ // Makes sure this header is not included before gtest.h. #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ # error Do not include gtest_pred_impl.h directly. Include gtest.h instead. #endif // GTEST_INCLUDE_GTEST_GTEST_H_ // This header implements a family of generic predicate assertion // macros: // // ASSERT_PRED_FORMAT1(pred_format, v1) // ASSERT_PRED_FORMAT2(pred_format, v1, v2) // ... // // where pred_format is a function or functor that takes n (in the // case of ASSERT_PRED_FORMATn) values and their source expression // text, and returns a testing::AssertionResult. See the definition // of ASSERT_EQ in gtest.h for an example. // // If you don't care about formatting, you can use the more // restrictive version: // // ASSERT_PRED1(pred, v1) // ASSERT_PRED2(pred, v1, v2) // ... // // where pred is an n-ary function or functor that returns bool, // and the values v1, v2, ..., must support the << operator for // streaming to std::ostream. // // We also define the EXPECT_* variations. // // For now we only support predicates whose arity is at most 5. // Please email googletestframework@googlegroups.com if you need // support for higher arities. // GTEST_ASSERT_ is the basic statement to which all of the assertions // in this file reduce. Don't use this in your code. #define GTEST_ASSERT_(expression, on_failure) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (const ::testing::AssertionResult gtest_ar = (expression)) \ ; \ else \ on_failure(gtest_ar.failure_message()) // Helper function for implementing {EXPECT|ASSERT}_PRED1. Don't use // this in your code. template AssertionResult AssertPred1Helper(const char* pred_text, const char* e1, Pred pred, const T1& v1) { if (pred(v1)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. // Don't use this in your code. #define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ GTEST_ASSERT_(pred_format(#v1, v1), \ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use // this in your code. #define GTEST_PRED1_(pred, v1, on_failure)\ GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ #v1, \ pred, \ v1), on_failure) // Unary predicate assertion macros. #define EXPECT_PRED_FORMAT1(pred_format, v1) \ GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED1(pred, v1) \ GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT1(pred_format, v1) \ GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) #define ASSERT_PRED1(pred, v1) \ GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED2. Don't use // this in your code. template AssertionResult AssertPred2Helper(const char* pred_text, const char* e1, const char* e2, Pred pred, const T1& v1, const T2& v2) { if (pred(v1, v2)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. // Don't use this in your code. #define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use // this in your code. #define GTEST_PRED2_(pred, v1, v2, on_failure)\ GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ #v1, \ #v2, \ pred, \ v1, \ v2), on_failure) // Binary predicate assertion macros. #define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED2(pred, v1, v2) \ GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) #define ASSERT_PRED2(pred, v1, v2) \ GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED3. Don't use // this in your code. template AssertionResult AssertPred3Helper(const char* pred_text, const char* e1, const char* e2, const char* e3, Pred pred, const T1& v1, const T2& v2, const T3& v3) { if (pred(v1, v2, v3)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2 << "\n" << e3 << " evaluates to " << v3; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. // Don't use this in your code. #define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use // this in your code. #define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ #v1, \ #v2, \ #v3, \ pred, \ v1, \ v2, \ v3), on_failure) // Ternary predicate assertion macros. #define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED3(pred, v1, v2, v3) \ GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) #define ASSERT_PRED3(pred, v1, v2, v3) \ GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED4. Don't use // this in your code. template AssertionResult AssertPred4Helper(const char* pred_text, const char* e1, const char* e2, const char* e3, const char* e4, Pred pred, const T1& v1, const T2& v2, const T3& v3, const T4& v4) { if (pred(v1, v2, v3, v4)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ", " << e4 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2 << "\n" << e3 << " evaluates to " << v3 << "\n" << e4 << " evaluates to " << v4; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. // Don't use this in your code. #define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use // this in your code. #define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ #v1, \ #v2, \ #v3, \ #v4, \ pred, \ v1, \ v2, \ v3, \ v4), on_failure) // 4-ary predicate assertion macros. #define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED4(pred, v1, v2, v3, v4) \ GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) #define ASSERT_PRED4(pred, v1, v2, v3, v4) \ GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED5. Don't use // this in your code. template AssertionResult AssertPred5Helper(const char* pred_text, const char* e1, const char* e2, const char* e3, const char* e4, const char* e5, Pred pred, const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5) { if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ", " << e4 << ", " << e5 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2 << "\n" << e3 << " evaluates to " << v3 << "\n" << e4 << " evaluates to " << v4 << "\n" << e5 << " evaluates to " << v5; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. // Don't use this in your code. #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use // this in your code. #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ #v1, \ #v2, \ #v3, \ #v4, \ #v5, \ pred, \ v1, \ v2, \ v3, \ v4, \ v5), on_failure) // 5-ary predicate assertion macros. #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) #define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) #endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/gtest_prod.h000066400000000000000000000044241377520261000225260ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // Google C++ Testing Framework definitions useful in production code. #ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ #define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ // When you need to test the private or protected members of a class, // use the FRIEND_TEST macro to declare your tests as friends of the // class. For example: // // class MyClass { // private: // void MyMethod(); // FRIEND_TEST(MyClassTest, MyMethod); // }; // // class MyClassTest : public testing::Test { // // ... // }; // // TEST_F(MyClassTest, MyMethod) { // // Can call MyClass::MyMethod() here. // } #define FRIEND_TEST(test_case_name, test_name)\ friend class test_case_name##_##test_name##_Test #endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/000077500000000000000000000000001377520261000220135ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h000066400000000000000000000321651377520261000271730ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) // // The Google C++ Testing Framework (Google Test) // // This header file defines internal utilities needed for implementing // death tests. They are subject to change without notice. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ #include "gtest/internal/gtest-internal.h" #include namespace testing { namespace internal { GTEST_DECLARE_string_(internal_run_death_test); // Names of the flags (needed for parsing Google Test flags). const char kDeathTestStyleFlag[] = "death_test_style"; const char kDeathTestUseFork[] = "death_test_use_fork"; const char kInternalRunDeathTestFlag[] = "internal_run_death_test"; #if GTEST_HAS_DEATH_TEST // DeathTest is a class that hides much of the complexity of the // GTEST_DEATH_TEST_ macro. It is abstract; its static Create method // returns a concrete class that depends on the prevailing death test // style, as defined by the --gtest_death_test_style and/or // --gtest_internal_run_death_test flags. // In describing the results of death tests, these terms are used with // the corresponding definitions: // // exit status: The integer exit information in the format specified // by wait(2) // exit code: The integer code passed to exit(3), _exit(2), or // returned from main() class GTEST_API_ DeathTest { public: // Create returns false if there was an error determining the // appropriate action to take for the current death test; for example, // if the gtest_death_test_style flag is set to an invalid value. // The LastMessage method will return a more detailed message in that // case. Otherwise, the DeathTest pointer pointed to by the "test" // argument is set. If the death test should be skipped, the pointer // is set to NULL; otherwise, it is set to the address of a new concrete // DeathTest object that controls the execution of the current test. static bool Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test); DeathTest(); virtual ~DeathTest() { } // A helper class that aborts a death test when it's deleted. class ReturnSentinel { public: explicit ReturnSentinel(DeathTest* test) : test_(test) { } ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); } private: DeathTest* const test_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel); } GTEST_ATTRIBUTE_UNUSED_; // An enumeration of possible roles that may be taken when a death // test is encountered. EXECUTE means that the death test logic should // be executed immediately. OVERSEE means that the program should prepare // the appropriate environment for a child process to execute the death // test, then wait for it to complete. enum TestRole { OVERSEE_TEST, EXECUTE_TEST }; // An enumeration of the three reasons that a test might be aborted. enum AbortReason { TEST_ENCOUNTERED_RETURN_STATEMENT, TEST_THREW_EXCEPTION, TEST_DID_NOT_DIE }; // Assumes one of the above roles. virtual TestRole AssumeRole() = 0; // Waits for the death test to finish and returns its status. virtual int Wait() = 0; // Returns true if the death test passed; that is, the test process // exited during the test, its exit status matches a user-supplied // predicate, and its stderr output matches a user-supplied regular // expression. // The user-supplied predicate may be a macro expression rather // than a function pointer or functor, or else Wait and Passed could // be combined. virtual bool Passed(bool exit_status_ok) = 0; // Signals that the death test did not die as expected. virtual void Abort(AbortReason reason) = 0; // Returns a human-readable outcome message regarding the outcome of // the last death test. static const char* LastMessage(); static void set_last_death_test_message(const std::string& message); private: // A string containing a description of the outcome of the last death test. static std::string last_death_test_message_; GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest); }; // Factory interface for death tests. May be mocked out for testing. class DeathTestFactory { public: virtual ~DeathTestFactory() { } virtual bool Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test) = 0; }; // A concrete DeathTestFactory implementation for normal use. class DefaultDeathTestFactory : public DeathTestFactory { public: virtual bool Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test); }; // Returns true if exit_status describes a process that was terminated // by a signal, or exited normally with a nonzero exit code. GTEST_API_ bool ExitedUnsuccessfully(int exit_status); // Traps C++ exceptions escaping statement and reports them as test // failures. Note that trapping SEH exceptions is not implemented here. # if GTEST_HAS_EXCEPTIONS # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } catch (const ::std::exception& gtest_exception) { \ fprintf(\ stderr, \ "\n%s: Caught std::exception-derived exception escaping the " \ "death test statement. Exception message: %s\n", \ ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \ gtest_exception.what()); \ fflush(stderr); \ death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ } catch (...) { \ death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ } # else # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) # endif // This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*, // ASSERT_EXIT*, and EXPECT_EXIT*. # define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ const ::testing::internal::RE& gtest_regex = (regex); \ ::testing::internal::DeathTest* gtest_dt; \ if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \ __FILE__, __LINE__, >est_dt)) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ } \ if (gtest_dt != NULL) { \ ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \ gtest_dt_ptr(gtest_dt); \ switch (gtest_dt->AssumeRole()) { \ case ::testing::internal::DeathTest::OVERSEE_TEST: \ if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ } \ break; \ case ::testing::internal::DeathTest::EXECUTE_TEST: { \ ::testing::internal::DeathTest::ReturnSentinel \ gtest_sentinel(gtest_dt); \ GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \ gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ break; \ } \ default: \ break; \ } \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \ fail(::testing::internal::DeathTest::LastMessage()) // The symbol "fail" here expands to something into which a message // can be streamed. // This macro is for implementing ASSERT/EXPECT_DEBUG_DEATH when compiled in // NDEBUG mode. In this case we need the statements to be executed, the regex is // ignored, and the macro must accept a streamed message even though the message // is never printed. # define GTEST_EXECUTE_STATEMENT_(statement, regex) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } else \ ::testing::Message() // A class representing the parsed contents of the // --gtest_internal_run_death_test flag, as it existed when // RUN_ALL_TESTS was called. class InternalRunDeathTestFlag { public: InternalRunDeathTestFlag(const std::string& a_file, int a_line, int an_index, int a_write_fd) : file_(a_file), line_(a_line), index_(an_index), write_fd_(a_write_fd) {} ~InternalRunDeathTestFlag() { if (write_fd_ >= 0) posix::Close(write_fd_); } const std::string& file() const { return file_; } int line() const { return line_; } int index() const { return index_; } int write_fd() const { return write_fd_; } private: std::string file_; int line_; int index_; int write_fd_; GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag); }; // Returns a newly created InternalRunDeathTestFlag object with fields // initialized from the GTEST_FLAG(internal_run_death_test) flag if // the flag is specified; otherwise returns NULL. InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag(); #else // GTEST_HAS_DEATH_TEST // This macro is used for implementing macros such as // EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where // death tests are not supported. Those macros must compile on such systems // iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on // systems that support death tests. This allows one to write such a macro // on a system that does not support death tests and be sure that it will // compile on a death-test supporting system. // // Parameters: // statement - A statement that a macro such as EXPECT_DEATH would test // for program termination. This macro has to make sure this // statement is compiled but not executed, to ensure that // EXPECT_DEATH_IF_SUPPORTED compiles with a certain // parameter iff EXPECT_DEATH compiles with it. // regex - A regex that a macro such as EXPECT_DEATH would use to test // the output of statement. This parameter has to be // compiled but not evaluated by this macro, to ensure that // this macro only accepts expressions that a macro such as // EXPECT_DEATH would accept. // terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED // and a return statement for ASSERT_DEATH_IF_SUPPORTED. // This ensures that ASSERT_DEATH_IF_SUPPORTED will not // compile inside functions where ASSERT_DEATH doesn't // compile. // // The branch that has an always false condition is used to ensure that // statement and regex are compiled (and thus syntactically correct) but // never executed. The unreachable code macro protects the terminator // statement from generating an 'unreachable code' warning in case // statement unconditionally returns or throws. The Message constructor at // the end allows the syntax of streaming additional messages into the // macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH. # define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ GTEST_LOG_(WARNING) \ << "Death tests are not supported on this platform.\n" \ << "Statement '" #statement "' cannot be verified."; \ } else if (::testing::internal::AlwaysFalse()) { \ ::testing::internal::RE::PartialMatch(".*", (regex)); \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ terminator; \ } else \ ::testing::Message() #endif // GTEST_HAS_DEATH_TEST } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-filepath.h000066400000000000000000000226031377520261000251070ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: keith.ray@gmail.com (Keith Ray) // // Google Test filepath utilities // // This header file declares classes and functions used internally by // Google Test. They are subject to change without notice. // // This file is #included in . // Do not include this header file separately! #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ #include "gtest/internal/gtest-string.h" namespace testing { namespace internal { // FilePath - a class for file and directory pathname manipulation which // handles platform-specific conventions (like the pathname separator). // Used for helper functions for naming files in a directory for xml output. // Except for Set methods, all methods are const or static, which provides an // "immutable value object" -- useful for peace of mind. // A FilePath with a value ending in a path separator ("like/this/") represents // a directory, otherwise it is assumed to represent a file. In either case, // it may or may not represent an actual file or directory in the file system. // Names are NOT checked for syntax correctness -- no checking for illegal // characters, malformed paths, etc. class GTEST_API_ FilePath { public: FilePath() : pathname_("") { } FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { } explicit FilePath(const std::string& pathname) : pathname_(pathname) { Normalize(); } FilePath& operator=(const FilePath& rhs) { Set(rhs); return *this; } void Set(const FilePath& rhs) { pathname_ = rhs.pathname_; } const std::string& string() const { return pathname_; } const char* c_str() const { return pathname_.c_str(); } // Returns the current working directory, or "" if unsuccessful. static FilePath GetCurrentDir(); // Given directory = "dir", base_name = "test", number = 0, // extension = "xml", returns "dir/test.xml". If number is greater // than zero (e.g., 12), returns "dir/test_12.xml". // On Windows platform, uses \ as the separator rather than /. static FilePath MakeFileName(const FilePath& directory, const FilePath& base_name, int number, const char* extension); // Given directory = "dir", relative_path = "test.xml", // returns "dir/test.xml". // On Windows, uses \ as the separator rather than /. static FilePath ConcatPaths(const FilePath& directory, const FilePath& relative_path); // Returns a pathname for a file that does not currently exist. The pathname // will be directory/base_name.extension or // directory/base_name_.extension if directory/base_name.extension // already exists. The number will be incremented until a pathname is found // that does not already exist. // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. // There could be a race condition if two or more processes are calling this // function at the same time -- they could both pick the same filename. static FilePath GenerateUniqueFileName(const FilePath& directory, const FilePath& base_name, const char* extension); // Returns true iff the path is "". bool IsEmpty() const { return pathname_.empty(); } // If input name has a trailing separator character, removes it and returns // the name, otherwise return the name string unmodified. // On Windows platform, uses \ as the separator, other platforms use /. FilePath RemoveTrailingPathSeparator() const; // Returns a copy of the FilePath with the directory part removed. // Example: FilePath("path/to/file").RemoveDirectoryName() returns // FilePath("file"). If there is no directory part ("just_a_file"), it returns // the FilePath unmodified. If there is no file part ("just_a_dir/") it // returns an empty FilePath (""). // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath RemoveDirectoryName() const; // RemoveFileName returns the directory path with the filename removed. // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". // If the FilePath is "a_file" or "/a_file", RemoveFileName returns // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does // not have a file, like "just/a/dir/", it returns the FilePath unmodified. // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath RemoveFileName() const; // Returns a copy of the FilePath with the case-insensitive extension removed. // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns // FilePath("dir/file"). If a case-insensitive extension is not // found, returns a copy of the original FilePath. FilePath RemoveExtension(const char* extension) const; // Creates directories so that path exists. Returns true if successful or if // the directories already exist; returns false if unable to create // directories for any reason. Will also return false if the FilePath does // not represent a directory (that is, it doesn't end with a path separator). bool CreateDirectoriesRecursively() const; // Create the directory so that path exists. Returns true if successful or // if the directory already exists; returns false if unable to create the // directory for any reason, including if the parent directory does not // exist. Not named "CreateDirectory" because that's a macro on Windows. bool CreateFolder() const; // Returns true if FilePath describes something in the file-system, // either a file, directory, or whatever, and that something exists. bool FileOrDirectoryExists() const; // Returns true if pathname describes a directory in the file-system // that exists. bool DirectoryExists() const; // Returns true if FilePath ends with a path separator, which indicates that // it is intended to represent a directory. Returns false otherwise. // This does NOT check that a directory (or file) actually exists. bool IsDirectory() const; // Returns true if pathname describes a root directory. (Windows has one // root directory per disk drive.) bool IsRootDirectory() const; // Returns true if pathname describes an absolute path. bool IsAbsolutePath() const; private: // Replaces multiple consecutive separators with a single separator. // For example, "bar///foo" becomes "bar/foo". Does not eliminate other // redundancies that might be in a pathname involving "." or "..". // // A pathname with multiple consecutive separators may occur either through // user error or as a result of some scripts or APIs that generate a pathname // with a trailing separator. On other platforms the same API or script // may NOT generate a pathname with a trailing "/". Then elsewhere that // pathname may have another "/" and pathname components added to it, // without checking for the separator already being there. // The script language and operating system may allow paths like "foo//bar" // but some of the functions in FilePath will not handle that correctly. In // particular, RemoveTrailingPathSeparator() only removes one separator, and // it is called in CreateDirectoriesRecursively() assuming that it will change // a pathname from directory syntax (trailing separator) to filename syntax. // // On Windows this method also replaces the alternate path separator '/' with // the primary path separator '\\', so that for example "bar\\/\\foo" becomes // "bar\\foo". void Normalize(); // Returns a pointer to the last occurence of a valid path separator in // the FilePath. On Windows, for example, both '/' and '\' are valid path // separators. Returns NULL if no path separator was found. const char* FindLastPathSeparator() const; std::string pathname_; }; // class FilePath } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-internal.h000066400000000000000000001261611377520261000251330ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) // // The Google C++ Testing Framework (Google Test) // // This header file declares functions and macros used internally by // Google Test. They are subject to change without notice. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ #include "gtest/internal/gtest-port.h" #if GTEST_OS_LINUX # include # include # include # include #endif // GTEST_OS_LINUX #if GTEST_HAS_EXCEPTIONS # include #endif #include #include #include #include #include #include #include "gtest/gtest-message.h" #include "gtest/internal/gtest-string.h" #include "gtest/internal/gtest-filepath.h" #include "gtest/internal/gtest-type-util.h" // Due to C++ preprocessor weirdness, we need double indirection to // concatenate two tokens when one of them is __LINE__. Writing // // foo ## __LINE__ // // will result in the token foo__LINE__, instead of foo followed by // the current line number. For more details, see // http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6 #define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) #define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar class ProtocolMessage; namespace proto2 { class Message; } namespace testing { // Forward declarations. class AssertionResult; // Result of an assertion. class Message; // Represents a failure message. class Test; // Represents a test. class TestInfo; // Information about a test. class TestPartResult; // Result of a test part. class UnitTest; // A collection of test cases. template ::std::string PrintToString(const T& value); namespace internal { struct TraceInfo; // Information about a trace point. class ScopedTrace; // Implements scoped trace. class TestInfoImpl; // Opaque implementation of TestInfo class UnitTestImpl; // Opaque implementation of UnitTest // How many times InitGoogleTest() has been called. GTEST_API_ extern int g_init_gtest_count; // The text used in failure messages to indicate the start of the // stack trace. GTEST_API_ extern const char kStackTraceMarker[]; // Two overloaded helpers for checking at compile time whether an // expression is a null pointer literal (i.e. NULL or any 0-valued // compile-time integral constant). Their return values have // different sizes, so we can use sizeof() to test which version is // picked by the compiler. These helpers have no implementations, as // we only need their signatures. // // Given IsNullLiteralHelper(x), the compiler will pick the first // version if x can be implicitly converted to Secret*, and pick the // second version otherwise. Since Secret is a secret and incomplete // type, the only expression a user can write that has type Secret* is // a null pointer literal. Therefore, we know that x is a null // pointer literal if and only if the first version is picked by the // compiler. char IsNullLiteralHelper(Secret* p); char (&IsNullLiteralHelper(...))[2]; // NOLINT // A compile-time bool constant that is true if and only if x is a // null pointer literal (i.e. NULL or any 0-valued compile-time // integral constant). #ifdef GTEST_ELLIPSIS_NEEDS_POD_ // We lose support for NULL detection where the compiler doesn't like // passing non-POD classes through ellipsis (...). # define GTEST_IS_NULL_LITERAL_(x) false #else # define GTEST_IS_NULL_LITERAL_(x) \ (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1) #endif // GTEST_ELLIPSIS_NEEDS_POD_ // Appends the user-supplied message to the Google-Test-generated message. GTEST_API_ std::string AppendUserMessage( const std::string& gtest_msg, const Message& user_msg); #if GTEST_HAS_EXCEPTIONS // This exception is thrown by (and only by) a failed Google Test // assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions // are enabled). We derive it from std::runtime_error, which is for // errors presumably detectable only at run time. Since // std::runtime_error inherits from std::exception, many testing // frameworks know how to extract and print the message inside it. class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error { public: explicit GoogleTestFailureException(const TestPartResult& failure); }; #endif // GTEST_HAS_EXCEPTIONS // A helper class for creating scoped traces in user programs. class GTEST_API_ ScopedTrace { public: // The c'tor pushes the given source file location and message onto // a trace stack maintained by Google Test. ScopedTrace(const char* file, int line, const Message& message); // The d'tor pops the info pushed by the c'tor. // // Note that the d'tor is not virtual in order to be efficient. // Don't inherit from ScopedTrace! ~ScopedTrace(); private: GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace); } GTEST_ATTRIBUTE_UNUSED_; // A ScopedTrace object does its job in its // c'tor and d'tor. Therefore it doesn't // need to be used otherwise. // Constructs and returns the message for an equality assertion // (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. // // The first four parameters are the expressions used in the assertion // and their values, as strings. For example, for ASSERT_EQ(foo, bar) // where foo is 5 and bar is 6, we have: // // expected_expression: "foo" // actual_expression: "bar" // expected_value: "5" // actual_value: "6" // // The ignoring_case parameter is true iff the assertion is a // *_STRCASEEQ*. When it's true, the string " (ignoring case)" will // be inserted into the message. GTEST_API_ AssertionResult EqFailure(const char* expected_expression, const char* actual_expression, const std::string& expected_value, const std::string& actual_value, bool ignoring_case); // Constructs a failure message for Boolean assertions such as EXPECT_TRUE. GTEST_API_ std::string GetBoolAssertionFailureMessage( const AssertionResult& assertion_result, const char* expression_text, const char* actual_predicate_value, const char* expected_predicate_value); // This template class represents an IEEE floating-point number // (either single-precision or double-precision, depending on the // template parameters). // // The purpose of this class is to do more sophisticated number // comparison. (Due to round-off error, etc, it's very unlikely that // two floating-points will be equal exactly. Hence a naive // comparison by the == operation often doesn't work.) // // Format of IEEE floating-point: // // The most-significant bit being the leftmost, an IEEE // floating-point looks like // // sign_bit exponent_bits fraction_bits // // Here, sign_bit is a single bit that designates the sign of the // number. // // For float, there are 8 exponent bits and 23 fraction bits. // // For double, there are 11 exponent bits and 52 fraction bits. // // More details can be found at // http://en.wikipedia.org/wiki/IEEE_floating-point_standard. // // Template parameter: // // RawType: the raw floating-point type (either float or double) template class FloatingPoint { public: // Defines the unsigned integer type that has the same size as the // floating point number. typedef typename TypeWithSize::UInt Bits; // Constants. // # of bits in a number. static const size_t kBitCount = 8*sizeof(RawType); // # of fraction bits in a number. static const size_t kFractionBitCount = std::numeric_limits::digits - 1; // # of exponent bits in a number. static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount; // The mask for the sign bit. static const Bits kSignBitMask = static_cast(1) << (kBitCount - 1); // The mask for the fraction bits. static const Bits kFractionBitMask = ~static_cast(0) >> (kExponentBitCount + 1); // The mask for the exponent bits. static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask); // How many ULP's (Units in the Last Place) we want to tolerate when // comparing two numbers. The larger the value, the more error we // allow. A 0 value means that two numbers must be exactly the same // to be considered equal. // // The maximum error of a single floating-point operation is 0.5 // units in the last place. On Intel CPU's, all floating-point // calculations are done with 80-bit precision, while double has 64 // bits. Therefore, 4 should be enough for ordinary use. // // See the following article for more details on ULP: // http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ static const size_t kMaxUlps = 4; // Constructs a FloatingPoint from a raw floating-point number. // // On an Intel CPU, passing a non-normalized NAN (Not a Number) // around may change its bits, although the new value is guaranteed // to be also a NAN. Therefore, don't expect this constructor to // preserve the bits in x when x is a NAN. explicit FloatingPoint(const RawType& x) { u_.value_ = x; } // Static methods // Reinterprets a bit pattern as a floating-point number. // // This function is needed to test the AlmostEquals() method. static RawType ReinterpretBits(const Bits bits) { FloatingPoint fp(0); fp.u_.bits_ = bits; return fp.u_.value_; } // Returns the floating-point number that represent positive infinity. static RawType Infinity() { return ReinterpretBits(kExponentBitMask); } // Returns the maximum representable finite floating-point number. static RawType Max(); // Non-static methods // Returns the bits that represents this number. const Bits &bits() const { return u_.bits_; } // Returns the exponent bits of this number. Bits exponent_bits() const { return kExponentBitMask & u_.bits_; } // Returns the fraction bits of this number. Bits fraction_bits() const { return kFractionBitMask & u_.bits_; } // Returns the sign bit of this number. Bits sign_bit() const { return kSignBitMask & u_.bits_; } // Returns true iff this is NAN (not a number). bool is_nan() const { // It's a NAN if the exponent bits are all ones and the fraction // bits are not entirely zeros. return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0); } // Returns true iff this number is at most kMaxUlps ULP's away from // rhs. In particular, this function: // // - returns false if either number is (or both are) NAN. // - treats really large numbers as almost equal to infinity. // - thinks +0.0 and -0.0 are 0 DLP's apart. bool AlmostEquals(const FloatingPoint& rhs) const { // The IEEE standard says that any comparison operation involving // a NAN must return false. if (is_nan() || rhs.is_nan()) return false; return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_) <= kMaxUlps; } private: // The data type used to store the actual floating-point number. union FloatingPointUnion { RawType value_; // The raw floating-point number. Bits bits_; // The bits that represent the number. }; // Converts an integer from the sign-and-magnitude representation to // the biased representation. More precisely, let N be 2 to the // power of (kBitCount - 1), an integer x is represented by the // unsigned number x + N. // // For instance, // // -N + 1 (the most negative number representable using // sign-and-magnitude) is represented by 1; // 0 is represented by N; and // N - 1 (the biggest number representable using // sign-and-magnitude) is represented by 2N - 1. // // Read http://en.wikipedia.org/wiki/Signed_number_representations // for more details on signed number representations. static Bits SignAndMagnitudeToBiased(const Bits &sam) { if (kSignBitMask & sam) { // sam represents a negative number. return ~sam + 1; } else { // sam represents a positive number. return kSignBitMask | sam; } } // Given two numbers in the sign-and-magnitude representation, // returns the distance between them as an unsigned number. static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, const Bits &sam2) { const Bits biased1 = SignAndMagnitudeToBiased(sam1); const Bits biased2 = SignAndMagnitudeToBiased(sam2); return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1); } FloatingPointUnion u_; }; // We cannot use std::numeric_limits::max() as it clashes with the max() // macro defined by . template <> inline float FloatingPoint::Max() { return FLT_MAX; } template <> inline double FloatingPoint::Max() { return DBL_MAX; } // Typedefs the instances of the FloatingPoint template class that we // care to use. typedef FloatingPoint Float; typedef FloatingPoint Double; // In order to catch the mistake of putting tests that use different // test fixture classes in the same test case, we need to assign // unique IDs to fixture classes and compare them. The TypeId type is // used to hold such IDs. The user should treat TypeId as an opaque // type: the only operation allowed on TypeId values is to compare // them for equality using the == operator. typedef const void* TypeId; template class TypeIdHelper { public: // dummy_ must not have a const type. Otherwise an overly eager // compiler (e.g. MSVC 7.1 & 8.0) may try to merge // TypeIdHelper::dummy_ for different Ts as an "optimization". static bool dummy_; }; template bool TypeIdHelper::dummy_ = false; // GetTypeId() returns the ID of type T. Different values will be // returned for different types. Calling the function twice with the // same type argument is guaranteed to return the same ID. template TypeId GetTypeId() { // The compiler is required to allocate a different // TypeIdHelper::dummy_ variable for each T used to instantiate // the template. Therefore, the address of dummy_ is guaranteed to // be unique. return &(TypeIdHelper::dummy_); } // Returns the type ID of ::testing::Test. Always call this instead // of GetTypeId< ::testing::Test>() to get the type ID of // ::testing::Test, as the latter may give the wrong result due to a // suspected linker bug when compiling Google Test as a Mac OS X // framework. GTEST_API_ TypeId GetTestTypeId(); // Defines the abstract factory interface that creates instances // of a Test object. class TestFactoryBase { public: virtual ~TestFactoryBase() {} // Creates a test instance to run. The instance is both created and destroyed // within TestInfoImpl::Run() virtual Test* CreateTest() = 0; protected: TestFactoryBase() {} private: GTEST_DISALLOW_COPY_AND_ASSIGN_(TestFactoryBase); }; // This class provides implementation of TeastFactoryBase interface. // It is used in TEST and TEST_F macros. template class TestFactoryImpl : public TestFactoryBase { public: virtual Test* CreateTest() { return new TestClass; } }; #if GTEST_OS_WINDOWS // Predicate-formatters for implementing the HRESULT checking macros // {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED} // We pass a long instead of HRESULT to avoid causing an // include dependency for the HRESULT type. GTEST_API_ AssertionResult IsHRESULTSuccess(const char* expr, long hr); // NOLINT GTEST_API_ AssertionResult IsHRESULTFailure(const char* expr, long hr); // NOLINT #endif // GTEST_OS_WINDOWS // Types of SetUpTestCase() and TearDownTestCase() functions. typedef void (*SetUpTestCaseFunc)(); typedef void (*TearDownTestCaseFunc)(); // Creates a new TestInfo object and registers it with Google Test; // returns the created object. // // Arguments: // // test_case_name: name of the test case // name: name of the test // type_param the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. // value_param text representation of the test's value parameter, // or NULL if this is not a type-parameterized test. // fixture_class_id: ID of the test fixture class // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case // factory: pointer to the factory that creates a test object. // The newly created TestInfo instance will assume // ownership of the factory object. GTEST_API_ TestInfo* MakeAndRegisterTestInfo( const char* test_case_name, const char* name, const char* type_param, const char* value_param, TypeId fixture_class_id, SetUpTestCaseFunc set_up_tc, TearDownTestCaseFunc tear_down_tc, TestFactoryBase* factory); // If *pstr starts with the given prefix, modifies *pstr to be right // past the prefix and returns true; otherwise leaves *pstr unchanged // and returns false. None of pstr, *pstr, and prefix can be NULL. GTEST_API_ bool SkipPrefix(const char* prefix, const char** pstr); #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P // State of the definition of a type-parameterized test case. class GTEST_API_ TypedTestCasePState { public: TypedTestCasePState() : registered_(false) {} // Adds the given test name to defined_test_names_ and return true // if the test case hasn't been registered; otherwise aborts the // program. bool AddTestName(const char* file, int line, const char* case_name, const char* test_name) { if (registered_) { fprintf(stderr, "%s Test %s must be defined before " "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n", FormatFileLocation(file, line).c_str(), test_name, case_name); fflush(stderr); posix::Abort(); } defined_test_names_.insert(test_name); return true; } // Verifies that registered_tests match the test names in // defined_test_names_; returns registered_tests if successful, or // aborts the program otherwise. const char* VerifyRegisteredTestNames( const char* file, int line, const char* registered_tests); private: bool registered_; ::std::set defined_test_names_; }; // Skips to the first non-space char after the first comma in 'str'; // returns NULL if no comma is found in 'str'. inline const char* SkipComma(const char* str) { const char* comma = strchr(str, ','); if (comma == NULL) { return NULL; } while (IsSpace(*(++comma))) {} return comma; } // Returns the prefix of 'str' before the first comma in it; returns // the entire string if it contains no comma. inline std::string GetPrefixUntilComma(const char* str) { const char* comma = strchr(str, ','); return comma == NULL ? str : std::string(str, comma); } // TypeParameterizedTest::Register() // registers a list of type-parameterized tests with Google Test. The // return value is insignificant - we just need to return something // such that we can call this function in a namespace scope. // // Implementation note: The GTEST_TEMPLATE_ macro declares a template // template parameter. It's defined in gtest-type-util.h. template class TypeParameterizedTest { public: // 'index' is the index of the test in the type list 'Types' // specified in INSTANTIATE_TYPED_TEST_CASE_P(Prefix, TestCase, // Types). Valid values for 'index' are [0, N - 1] where N is the // length of Types. static bool Register(const char* prefix, const char* case_name, const char* test_names, int index) { typedef typename Types::Head Type; typedef Fixture FixtureClass; typedef typename GTEST_BIND_(TestSel, Type) TestClass; // First, registers the first type-parameterized test in the type // list. MakeAndRegisterTestInfo( (std::string(prefix) + (prefix[0] == '\0' ? "" : "/") + case_name + "/" + StreamableToString(index)).c_str(), GetPrefixUntilComma(test_names).c_str(), GetTypeName().c_str(), NULL, // No value parameter. GetTypeId(), TestClass::SetUpTestCase, TestClass::TearDownTestCase, new TestFactoryImpl); // Next, recurses (at compile time) with the tail of the type list. return TypeParameterizedTest ::Register(prefix, case_name, test_names, index + 1); } }; // The base case for the compile time recursion. template class TypeParameterizedTest { public: static bool Register(const char* /*prefix*/, const char* /*case_name*/, const char* /*test_names*/, int /*index*/) { return true; } }; // TypeParameterizedTestCase::Register() // registers *all combinations* of 'Tests' and 'Types' with Google // Test. The return value is insignificant - we just need to return // something such that we can call this function in a namespace scope. template class TypeParameterizedTestCase { public: static bool Register(const char* prefix, const char* case_name, const char* test_names) { typedef typename Tests::Head Head; // First, register the first test in 'Test' for each type in 'Types'. TypeParameterizedTest::Register( prefix, case_name, test_names, 0); // Next, recurses (at compile time) with the tail of the test list. return TypeParameterizedTestCase ::Register(prefix, case_name, SkipComma(test_names)); } }; // The base case for the compile time recursion. template class TypeParameterizedTestCase { public: static bool Register(const char* /*prefix*/, const char* /*case_name*/, const char* /*test_names*/) { return true; } }; #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P // Returns the current OS stack trace as an std::string. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in // the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. GTEST_API_ std::string GetCurrentOsStackTraceExceptTop( UnitTest* unit_test, int skip_count); // Helpers for suppressing warnings on unreachable code or constant // condition. // Always returns true. GTEST_API_ bool AlwaysTrue(); // Always returns false. inline bool AlwaysFalse() { return !AlwaysTrue(); } // Helper for suppressing false warning from Clang on a const char* // variable declared in a conditional expression always being NULL in // the else branch. struct GTEST_API_ ConstCharPtr { ConstCharPtr(const char* str) : value(str) {} operator bool() const { return true; } const char* value; }; // A simple Linear Congruential Generator for generating random // numbers with a uniform distribution. Unlike rand() and srand(), it // doesn't use global state (and therefore can't interfere with user // code). Unlike rand_r(), it's portable. An LCG isn't very random, // but it's good enough for our purposes. class GTEST_API_ Random { public: static const UInt32 kMaxRange = 1u << 31; explicit Random(UInt32 seed) : state_(seed) {} void Reseed(UInt32 seed) { state_ = seed; } // Generates a random number from [0, range). Crashes if 'range' is // 0 or greater than kMaxRange. UInt32 Generate(UInt32 range); private: UInt32 state_; GTEST_DISALLOW_COPY_AND_ASSIGN_(Random); }; // Defining a variable of type CompileAssertTypesEqual will cause a // compiler error iff T1 and T2 are different types. template struct CompileAssertTypesEqual; template struct CompileAssertTypesEqual { }; // Removes the reference from a type if it is a reference type, // otherwise leaves it unchanged. This is the same as // tr1::remove_reference, which is not widely available yet. template struct RemoveReference { typedef T type; }; // NOLINT template struct RemoveReference { typedef T type; }; // NOLINT // A handy wrapper around RemoveReference that works when the argument // T depends on template parameters. #define GTEST_REMOVE_REFERENCE_(T) \ typename ::testing::internal::RemoveReference::type // Removes const from a type if it is a const type, otherwise leaves // it unchanged. This is the same as tr1::remove_const, which is not // widely available yet. template struct RemoveConst { typedef T type; }; // NOLINT template struct RemoveConst { typedef T type; }; // NOLINT // MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above // definition to fail to remove the const in 'const int[3]' and 'const // char[3][4]'. The following specialization works around the bug. template struct RemoveConst { typedef typename RemoveConst::type type[N]; }; #if defined(_MSC_VER) && _MSC_VER < 1400 // This is the only specialization that allows VC++ 7.1 to remove const in // 'const int[3] and 'const int[3][4]'. However, it causes trouble with GCC // and thus needs to be conditionally compiled. template struct RemoveConst { typedef typename RemoveConst::type type[N]; }; #endif // A handy wrapper around RemoveConst that works when the argument // T depends on template parameters. #define GTEST_REMOVE_CONST_(T) \ typename ::testing::internal::RemoveConst::type // Turns const U&, U&, const U, and U all into U. #define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \ GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T)) // Adds reference to a type if it is not a reference type, // otherwise leaves it unchanged. This is the same as // tr1::add_reference, which is not widely available yet. template struct AddReference { typedef T& type; }; // NOLINT template struct AddReference { typedef T& type; }; // NOLINT // A handy wrapper around AddReference that works when the argument T // depends on template parameters. #define GTEST_ADD_REFERENCE_(T) \ typename ::testing::internal::AddReference::type // Adds a reference to const on top of T as necessary. For example, // it transforms // // char ==> const char& // const char ==> const char& // char& ==> const char& // const char& ==> const char& // // The argument T must depend on some template parameters. #define GTEST_REFERENCE_TO_CONST_(T) \ GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T)) // ImplicitlyConvertible::value is a compile-time bool // constant that's true iff type From can be implicitly converted to // type To. template class ImplicitlyConvertible { private: // We need the following helper functions only for their types. // They have no implementations. // MakeFrom() is an expression whose type is From. We cannot simply // use From(), as the type From may not have a public default // constructor. static From MakeFrom(); // These two functions are overloaded. Given an expression // Helper(x), the compiler will pick the first version if x can be // implicitly converted to type To; otherwise it will pick the // second version. // // The first version returns a value of size 1, and the second // version returns a value of size 2. Therefore, by checking the // size of Helper(x), which can be done at compile time, we can tell // which version of Helper() is used, and hence whether x can be // implicitly converted to type To. static char Helper(To); static char (&Helper(...))[2]; // NOLINT // We have to put the 'public' section after the 'private' section, // or MSVC refuses to compile the code. public: // MSVC warns about implicitly converting from double to int for // possible loss of data, so we need to temporarily disable the // warning. #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4244) // Temporarily disables warning 4244. static const bool value = sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; # pragma warning(pop) // Restores the warning state. #elif defined(__BORLANDC__) // C++Builder cannot use member overload resolution during template // instantiation. The simplest workaround is to use its C++0x type traits // functions (C++Builder 2009 and above only). static const bool value = __is_convertible(From, To); #else static const bool value = sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; #endif // _MSV_VER }; template const bool ImplicitlyConvertible::value; // IsAProtocolMessage::value is a compile-time bool constant that's // true iff T is type ProtocolMessage, proto2::Message, or a subclass // of those. template struct IsAProtocolMessage : public bool_constant< ImplicitlyConvertible::value || ImplicitlyConvertible::value> { }; // When the compiler sees expression IsContainerTest(0), if C is an // STL-style container class, the first overload of IsContainerTest // will be viable (since both C::iterator* and C::const_iterator* are // valid types and NULL can be implicitly converted to them). It will // be picked over the second overload as 'int' is a perfect match for // the type of argument 0. If C::iterator or C::const_iterator is not // a valid type, the first overload is not viable, and the second // overload will be picked. Therefore, we can determine whether C is // a container class by checking the type of IsContainerTest(0). // The value of the expression is insignificant. // // Note that we look for both C::iterator and C::const_iterator. The // reason is that C++ injects the name of a class as a member of the // class itself (e.g. you can refer to class iterator as either // 'iterator' or 'iterator::iterator'). If we look for C::iterator // only, for example, we would mistakenly think that a class named // iterator is an STL container. // // Also note that the simpler approach of overloading // IsContainerTest(typename C::const_iterator*) and // IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++. typedef int IsContainer; template IsContainer IsContainerTest(int /* dummy */, typename C::iterator* /* it */ = NULL, typename C::const_iterator* /* const_it */ = NULL) { return 0; } typedef char IsNotContainer; template IsNotContainer IsContainerTest(long /* dummy */) { return '\0'; } // EnableIf::type is void when 'Cond' is true, and // undefined when 'Cond' is false. To use SFINAE to make a function // overload only apply when a particular expression is true, add // "typename EnableIf::type* = 0" as the last parameter. template struct EnableIf; template<> struct EnableIf { typedef void type; }; // NOLINT // Utilities for native arrays. // ArrayEq() compares two k-dimensional native arrays using the // elements' operator==, where k can be any integer >= 0. When k is // 0, ArrayEq() degenerates into comparing a single pair of values. template bool ArrayEq(const T* lhs, size_t size, const U* rhs); // This generic version is used when k is 0. template inline bool ArrayEq(const T& lhs, const U& rhs) { return lhs == rhs; } // This overload is used when k >= 1. template inline bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N]) { return internal::ArrayEq(lhs, N, rhs); } // This helper reduces code bloat. If we instead put its logic inside // the previous ArrayEq() function, arrays with different sizes would // lead to different copies of the template code. template bool ArrayEq(const T* lhs, size_t size, const U* rhs) { for (size_t i = 0; i != size; i++) { if (!internal::ArrayEq(lhs[i], rhs[i])) return false; } return true; } // Finds the first element in the iterator range [begin, end) that // equals elem. Element may be a native array type itself. template Iter ArrayAwareFind(Iter begin, Iter end, const Element& elem) { for (Iter it = begin; it != end; ++it) { if (internal::ArrayEq(*it, elem)) return it; } return end; } // CopyArray() copies a k-dimensional native array using the elements' // operator=, where k can be any integer >= 0. When k is 0, // CopyArray() degenerates into copying a single value. template void CopyArray(const T* from, size_t size, U* to); // This generic version is used when k is 0. template inline void CopyArray(const T& from, U* to) { *to = from; } // This overload is used when k >= 1. template inline void CopyArray(const T(&from)[N], U(*to)[N]) { internal::CopyArray(from, N, *to); } // This helper reduces code bloat. If we instead put its logic inside // the previous CopyArray() function, arrays with different sizes // would lead to different copies of the template code. template void CopyArray(const T* from, size_t size, U* to) { for (size_t i = 0; i != size; i++) { internal::CopyArray(from[i], to + i); } } // The relation between an NativeArray object (see below) and the // native array it represents. enum RelationToSource { kReference, // The NativeArray references the native array. kCopy // The NativeArray makes a copy of the native array and // owns the copy. }; // Adapts a native array to a read-only STL-style container. Instead // of the complete STL container concept, this adaptor only implements // members useful for Google Mock's container matchers. New members // should be added as needed. To simplify the implementation, we only // support Element being a raw type (i.e. having no top-level const or // reference modifier). It's the client's responsibility to satisfy // this requirement. Element can be an array type itself (hence // multi-dimensional arrays are supported). template class NativeArray { public: // STL-style container typedefs. typedef Element value_type; typedef Element* iterator; typedef const Element* const_iterator; // Constructs from a native array. NativeArray(const Element* array, size_t count, RelationToSource relation) { Init(array, count, relation); } // Copy constructor. NativeArray(const NativeArray& rhs) { Init(rhs.array_, rhs.size_, rhs.relation_to_source_); } ~NativeArray() { // Ensures that the user doesn't instantiate NativeArray with a // const or reference type. static_cast(StaticAssertTypeEqHelper()); if (relation_to_source_ == kCopy) delete[] array_; } // STL-style container methods. size_t size() const { return size_; } const_iterator begin() const { return array_; } const_iterator end() const { return array_ + size_; } bool operator==(const NativeArray& rhs) const { return size() == rhs.size() && ArrayEq(begin(), size(), rhs.begin()); } private: // Initializes this object; makes a copy of the input array if // 'relation' is kCopy. void Init(const Element* array, size_t a_size, RelationToSource relation) { if (relation == kReference) { array_ = array; } else { Element* const copy = new Element[a_size]; CopyArray(array, a_size, copy); array_ = copy; } size_ = a_size; relation_to_source_ = relation; } const Element* array_; size_t size_; RelationToSource relation_to_source_; GTEST_DISALLOW_ASSIGN_(NativeArray); }; } // namespace internal } // namespace testing #define GTEST_MESSAGE_AT_(file, line, message, result_type) \ ::testing::internal::AssertHelper(result_type, file, line, message) \ = ::testing::Message() #define GTEST_MESSAGE_(message, result_type) \ GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type) #define GTEST_FATAL_FAILURE_(message) \ return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure) #define GTEST_NONFATAL_FAILURE_(message) \ GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure) #define GTEST_SUCCESS_(message) \ GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess) // Suppresses MSVC warnings 4072 (unreachable code) for the code following // statement if it returns or throws (or doesn't return or throw in some // situations). #define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ if (::testing::internal::AlwaysTrue()) { statement; } #define GTEST_TEST_THROW_(statement, expected_exception, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::ConstCharPtr gtest_msg = "") { \ bool gtest_caught_expected = false; \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } \ catch (expected_exception const&) { \ gtest_caught_expected = true; \ } \ catch (...) { \ gtest_msg.value = \ "Expected: " #statement " throws an exception of type " \ #expected_exception ".\n Actual: it throws a different type."; \ goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ } \ if (!gtest_caught_expected) { \ gtest_msg.value = \ "Expected: " #statement " throws an exception of type " \ #expected_exception ".\n Actual: it throws nothing."; \ goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \ fail(gtest_msg.value) #define GTEST_TEST_NO_THROW_(statement, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } \ catch (...) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \ fail("Expected: " #statement " doesn't throw an exception.\n" \ " Actual: it throws.") #define GTEST_TEST_ANY_THROW_(statement, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ bool gtest_caught_any = false; \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } \ catch (...) { \ gtest_caught_any = true; \ } \ if (!gtest_caught_any) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \ fail("Expected: " #statement " throws an exception.\n" \ " Actual: it doesn't.") // Implements Boolean test assertions such as EXPECT_TRUE. expression can be // either a boolean expression or an AssertionResult. text is a textual // represenation of expression as it was passed into the EXPECT_TRUE. #define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (const ::testing::AssertionResult gtest_ar_ = \ ::testing::AssertionResult(expression)) \ ; \ else \ fail(::testing::internal::GetBoolAssertionFailureMessage(\ gtest_ar_, text, #actual, #expected).c_str()) #define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \ fail("Expected: " #statement " doesn't generate new fatal " \ "failures in the current thread.\n" \ " Actual: it does.") // Expands to the name of the class that implements the given test. #define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ test_case_name##_##test_name##_Test // Helper macro for defining tests. #define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\ class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\ public:\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\ private:\ virtual void TestBody();\ static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\ GTEST_DISALLOW_COPY_AND_ASSIGN_(\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\ };\ \ ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\ ::test_info_ =\ ::testing::internal::MakeAndRegisterTestInfo(\ #test_case_name, #test_name, NULL, NULL, \ (parent_id), \ parent_class::SetUpTestCase, \ parent_class::TearDownTestCase, \ new ::testing::internal::TestFactoryImpl<\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h000066400000000000000000000176451377520261000254600ustar00rootroot00000000000000// Copyright 2003 Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: Dan Egnor (egnor@google.com) // // A "smart" pointer type with reference tracking. Every pointer to a // particular object is kept on a circular linked list. When the last pointer // to an object is destroyed or reassigned, the object is deleted. // // Used properly, this deletes the object when the last reference goes away. // There are several caveats: // - Like all reference counting schemes, cycles lead to leaks. // - Each smart pointer is actually two pointers (8 bytes instead of 4). // - Every time a pointer is assigned, the entire list of pointers to that // object is traversed. This class is therefore NOT SUITABLE when there // will often be more than two or three pointers to a particular object. // - References are only tracked as long as linked_ptr<> objects are copied. // If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS // will happen (double deletion). // // A good use of this class is storing object references in STL containers. // You can safely put linked_ptr<> in a vector<>. // Other uses may not be as good. // // Note: If you use an incomplete type with linked_ptr<>, the class // *containing* linked_ptr<> must have a constructor and destructor (even // if they do nothing!). // // Bill Gibbons suggested we use something like this. // // Thread Safety: // Unlike other linked_ptr implementations, in this implementation // a linked_ptr object is thread-safe in the sense that: // - it's safe to copy linked_ptr objects concurrently, // - it's safe to copy *from* a linked_ptr and read its underlying // raw pointer (e.g. via get()) concurrently, and // - it's safe to write to two linked_ptrs that point to the same // shared object concurrently. // TODO(wan@google.com): rename this to safe_linked_ptr to avoid // confusion with normal linked_ptr. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ #include #include #include "gtest/internal/gtest-port.h" namespace testing { namespace internal { // Protects copying of all linked_ptr objects. GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex); // This is used internally by all instances of linked_ptr<>. It needs to be // a non-template class because different types of linked_ptr<> can refer to // the same object (linked_ptr(obj) vs linked_ptr(obj)). // So, it needs to be possible for different types of linked_ptr to participate // in the same circular linked list, so we need a single class type here. // // DO NOT USE THIS CLASS DIRECTLY YOURSELF. Use linked_ptr. class linked_ptr_internal { public: // Create a new circle that includes only this instance. void join_new() { next_ = this; } // Many linked_ptr operations may change p.link_ for some linked_ptr // variable p in the same circle as this object. Therefore we need // to prevent two such operations from occurring concurrently. // // Note that different types of linked_ptr objects can coexist in a // circle (e.g. linked_ptr, linked_ptr, and // linked_ptr). Therefore we must use a single mutex to // protect all linked_ptr objects. This can create serious // contention in production code, but is acceptable in a testing // framework. // Join an existing circle. void join(linked_ptr_internal const* ptr) GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { MutexLock lock(&g_linked_ptr_mutex); linked_ptr_internal const* p = ptr; while (p->next_ != ptr) p = p->next_; p->next_ = this; next_ = ptr; } // Leave whatever circle we're part of. Returns true if we were the // last member of the circle. Once this is done, you can join() another. bool depart() GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { MutexLock lock(&g_linked_ptr_mutex); if (next_ == this) return true; linked_ptr_internal const* p = next_; while (p->next_ != this) p = p->next_; p->next_ = next_; return false; } private: mutable linked_ptr_internal const* next_; }; template class linked_ptr { public: typedef T element_type; // Take over ownership of a raw pointer. This should happen as soon as // possible after the object is created. explicit linked_ptr(T* ptr = NULL) { capture(ptr); } ~linked_ptr() { depart(); } // Copy an existing linked_ptr<>, adding ourselves to the list of references. template linked_ptr(linked_ptr const& ptr) { copy(&ptr); } linked_ptr(linked_ptr const& ptr) { // NOLINT assert(&ptr != this); copy(&ptr); } // Assignment releases the old value and acquires the new. template linked_ptr& operator=(linked_ptr const& ptr) { depart(); copy(&ptr); return *this; } linked_ptr& operator=(linked_ptr const& ptr) { if (&ptr != this) { depart(); copy(&ptr); } return *this; } // Smart pointer members. void reset(T* ptr = NULL) { depart(); capture(ptr); } T* get() const { return value_; } T* operator->() const { return value_; } T& operator*() const { return *value_; } bool operator==(T* p) const { return value_ == p; } bool operator!=(T* p) const { return value_ != p; } template bool operator==(linked_ptr const& ptr) const { return value_ == ptr.get(); } template bool operator!=(linked_ptr const& ptr) const { return value_ != ptr.get(); } private: template friend class linked_ptr; T* value_; linked_ptr_internal link_; void depart() { if (link_.depart()) delete value_; } void capture(T* ptr) { value_ = ptr; link_.join_new(); } template void copy(linked_ptr const* ptr) { value_ = ptr->get(); if (value_) link_.join(&ptr->link_); else link_.join_new(); } }; template inline bool operator==(T* ptr, const linked_ptr& x) { return ptr == x.get(); } template inline bool operator!=(T* ptr, const linked_ptr& x) { return ptr != x.get(); } // A function to convert T* into linked_ptr // Doing e.g. make_linked_ptr(new FooBarBaz(arg)) is a shorter notation // for linked_ptr >(new FooBarBaz(arg)) template linked_ptr make_linked_ptr(T* ptr) { return linked_ptr(ptr); } } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h000066400000000000000000005672601377520261000273370ustar00rootroot00000000000000// This file was GENERATED by command: // pump.py gtest-param-util-generated.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // Type and function utilities for implementing parameterized tests. // This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // // Currently Google Test supports at most 50 arguments in Values, // and at most 10 arguments in Combine. Please contact // googletestframework@googlegroups.com if you need more. // Please note that the number of arguments to Combine is limited // by the maximum arity of the implementation of tr1::tuple which is // currently set at 10. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ // scripts/fuse_gtest.py depends on gtest's own header being #included // *unconditionally*. Therefore these #includes cannot be moved // inside #if GTEST_HAS_PARAM_TEST. #include "gtest/internal/gtest-param-util.h" #include "gtest/internal/gtest-port.h" #if GTEST_HAS_PARAM_TEST namespace testing { // Forward declarations of ValuesIn(), which is implemented in // include/gtest/gtest-param-test.h. template internal::ParamGenerator< typename ::testing::internal::IteratorTraits::value_type> ValuesIn(ForwardIterator begin, ForwardIterator end); template internal::ParamGenerator ValuesIn(const T (&array)[N]); template internal::ParamGenerator ValuesIn( const Container& container); namespace internal { // Used in the Values() function to provide polymorphic capabilities. template class ValueArray1 { public: explicit ValueArray1(T1 v1) : v1_(v1) {} template operator ParamGenerator() const { return ValuesIn(&v1_, &v1_ + 1); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray1& other); const T1 v1_; }; template class ValueArray2 { public: ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray2& other); const T1 v1_; const T2 v2_; }; template class ValueArray3 { public: ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray3& other); const T1 v1_; const T2 v2_; const T3 v3_; }; template class ValueArray4 { public: ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3), v4_(v4) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray4& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; }; template class ValueArray5 { public: ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray5& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; }; template class ValueArray6 { public: ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray6& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; }; template class ValueArray7 { public: ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray7& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; }; template class ValueArray8 { public: ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray8& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; }; template class ValueArray9 { public: ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray9& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; }; template class ValueArray10 { public: ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray10& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; }; template class ValueArray11 { public: ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray11& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; }; template class ValueArray12 { public: ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray12& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; }; template class ValueArray13 { public: ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray13& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; }; template class ValueArray14 { public: ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray14& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; }; template class ValueArray15 { public: ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray15& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; }; template class ValueArray16 { public: ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray16& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; }; template class ValueArray17 { public: ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray17& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; }; template class ValueArray18 { public: ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray18& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; }; template class ValueArray19 { public: ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray19& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; }; template class ValueArray20 { public: ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray20& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; }; template class ValueArray21 { public: ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray21& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; }; template class ValueArray22 { public: ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray22& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; }; template class ValueArray23 { public: ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray23& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; }; template class ValueArray24 { public: ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray24& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; }; template class ValueArray25 { public: ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray25& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; }; template class ValueArray26 { public: ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray26& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; }; template class ValueArray27 { public: ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray27& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; }; template class ValueArray28 { public: ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray28& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; }; template class ValueArray29 { public: ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray29& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; }; template class ValueArray30 { public: ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray30& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; }; template class ValueArray31 { public: ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray31& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; }; template class ValueArray32 { public: ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray32& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; }; template class ValueArray33 { public: ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray33& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; }; template class ValueArray34 { public: ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray34& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; }; template class ValueArray35 { public: ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray35& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; }; template class ValueArray36 { public: ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray36& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; }; template class ValueArray37 { public: ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray37& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; }; template class ValueArray38 { public: ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray38& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; }; template class ValueArray39 { public: ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray39& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; }; template class ValueArray40 { public: ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray40& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; }; template class ValueArray41 { public: ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray41& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; }; template class ValueArray42 { public: ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray42& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; }; template class ValueArray43 { public: ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray43& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; }; template class ValueArray44 { public: ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray44& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; }; template class ValueArray45 { public: ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray45& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; }; template class ValueArray46 { public: ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_), static_cast(v46_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray46& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; }; template class ValueArray47 { public: ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_), static_cast(v46_), static_cast(v47_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray47& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; }; template class ValueArray48 { public: ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47), v48_(v48) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_), static_cast(v46_), static_cast(v47_), static_cast(v48_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray48& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; const T48 v48_; }; template class ValueArray49 { public: ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_), static_cast(v46_), static_cast(v47_), static_cast(v48_), static_cast(v49_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray49& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; const T48 v48_; const T49 v49_; }; template class ValueArray50 { public: ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {} template operator ParamGenerator() const { const T array[] = {static_cast(v1_), static_cast(v2_), static_cast(v3_), static_cast(v4_), static_cast(v5_), static_cast(v6_), static_cast(v7_), static_cast(v8_), static_cast(v9_), static_cast(v10_), static_cast(v11_), static_cast(v12_), static_cast(v13_), static_cast(v14_), static_cast(v15_), static_cast(v16_), static_cast(v17_), static_cast(v18_), static_cast(v19_), static_cast(v20_), static_cast(v21_), static_cast(v22_), static_cast(v23_), static_cast(v24_), static_cast(v25_), static_cast(v26_), static_cast(v27_), static_cast(v28_), static_cast(v29_), static_cast(v30_), static_cast(v31_), static_cast(v32_), static_cast(v33_), static_cast(v34_), static_cast(v35_), static_cast(v36_), static_cast(v37_), static_cast(v38_), static_cast(v39_), static_cast(v40_), static_cast(v41_), static_cast(v42_), static_cast(v43_), static_cast(v44_), static_cast(v45_), static_cast(v46_), static_cast(v47_), static_cast(v48_), static_cast(v49_), static_cast(v50_)}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray50& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; const T48 v48_; const T49 v49_; const T50 v50_; }; # if GTEST_HAS_COMBINE // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Generates values from the Cartesian product of values produced // by the argument generators. // template class CartesianProductGenerator2 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator2(const ParamGenerator& g1, const ParamGenerator& g2) : g1_(g1), g2_(g2) {} virtual ~CartesianProductGenerator2() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current2_; if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; ParamType current_value_; }; // class CartesianProductGenerator2::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator2& other); const ParamGenerator g1_; const ParamGenerator g2_; }; // class CartesianProductGenerator2 template class CartesianProductGenerator3 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator3(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3) : g1_(g1), g2_(g2), g3_(g3) {} virtual ~CartesianProductGenerator3() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current3_; if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; ParamType current_value_; }; // class CartesianProductGenerator3::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator3& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; }; // class CartesianProductGenerator3 template class CartesianProductGenerator4 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator4(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4) : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} virtual ~CartesianProductGenerator4() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current4_; if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; ParamType current_value_; }; // class CartesianProductGenerator4::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator4& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; }; // class CartesianProductGenerator4 template class CartesianProductGenerator5 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator5(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} virtual ~CartesianProductGenerator5() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current5_; if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; ParamType current_value_; }; // class CartesianProductGenerator5::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator5& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; }; // class CartesianProductGenerator5 template class CartesianProductGenerator6 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator6(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} virtual ~CartesianProductGenerator6() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current6_; if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; ParamType current_value_; }; // class CartesianProductGenerator6::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator6& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; }; // class CartesianProductGenerator6 template class CartesianProductGenerator7 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator7(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} virtual ~CartesianProductGenerator7() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current7_; if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; ParamType current_value_; }; // class CartesianProductGenerator7::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator7& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; }; // class CartesianProductGenerator7 template class CartesianProductGenerator8 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator8(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7, const ParamGenerator& g8) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8) {} virtual ~CartesianProductGenerator8() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin(), g8_, g8_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, g8_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7, const ParamGenerator& g8, const typename ParamGenerator::iterator& current8) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7), begin8_(g8.begin()), end8_(g8.end()), current8_(current8) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current8_; if (current8_ == end8_) { current8_ = begin8_; ++current7_; } if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_ && current8_ == typed_other->current8_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_), begin8_(other.begin8_), end8_(other.end8_), current8_(other.current8_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_, *current8_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_ || current8_ == end8_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; const typename ParamGenerator::iterator begin8_; const typename ParamGenerator::iterator end8_; typename ParamGenerator::iterator current8_; ParamType current_value_; }; // class CartesianProductGenerator8::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator8& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; const ParamGenerator g8_; }; // class CartesianProductGenerator8 template class CartesianProductGenerator9 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator9(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7, const ParamGenerator& g8, const ParamGenerator& g9) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9) {} virtual ~CartesianProductGenerator9() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, g8_.end(), g9_, g9_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7, const ParamGenerator& g8, const typename ParamGenerator::iterator& current8, const ParamGenerator& g9, const typename ParamGenerator::iterator& current9) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7), begin8_(g8.begin()), end8_(g8.end()), current8_(current8), begin9_(g9.begin()), end9_(g9.end()), current9_(current9) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current9_; if (current9_ == end9_) { current9_ = begin9_; ++current8_; } if (current8_ == end8_) { current8_ = begin8_; ++current7_; } if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_ && current8_ == typed_other->current8_ && current9_ == typed_other->current9_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_), begin8_(other.begin8_), end8_(other.end8_), current8_(other.current8_), begin9_(other.begin9_), end9_(other.end9_), current9_(other.current9_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_, *current8_, *current9_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_ || current8_ == end8_ || current9_ == end9_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; const typename ParamGenerator::iterator begin8_; const typename ParamGenerator::iterator end8_; typename ParamGenerator::iterator current8_; const typename ParamGenerator::iterator begin9_; const typename ParamGenerator::iterator end9_; typename ParamGenerator::iterator current9_; ParamType current_value_; }; // class CartesianProductGenerator9::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator9& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; const ParamGenerator g8_; const ParamGenerator g9_; }; // class CartesianProductGenerator9 template class CartesianProductGenerator10 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator10(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7, const ParamGenerator& g8, const ParamGenerator& g9, const ParamGenerator& g10) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9), g10_(g10) {} virtual ~CartesianProductGenerator10() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, g8_.end(), g9_, g9_.end(), g10_, g10_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7, const ParamGenerator& g8, const typename ParamGenerator::iterator& current8, const ParamGenerator& g9, const typename ParamGenerator::iterator& current9, const ParamGenerator& g10, const typename ParamGenerator::iterator& current10) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7), begin8_(g8.begin()), end8_(g8.end()), current8_(current8), begin9_(g9.begin()), end9_(g9.end()), current9_(current9), begin10_(g10.begin()), end10_(g10.end()), current10_(current10) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current10_; if (current10_ == end10_) { current10_ = begin10_; ++current9_; } if (current9_ == end9_) { current9_ = begin9_; ++current8_; } if (current8_ == end8_) { current8_ = begin8_; ++current7_; } if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_ && current8_ == typed_other->current8_ && current9_ == typed_other->current9_ && current10_ == typed_other->current10_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_), begin8_(other.begin8_), end8_(other.end8_), current8_(other.current8_), begin9_(other.begin9_), end9_(other.end9_), current9_(other.current9_), begin10_(other.begin10_), end10_(other.end10_), current10_(other.current10_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_, *current8_, *current9_, *current10_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_ || current8_ == end8_ || current9_ == end9_ || current10_ == end10_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; const typename ParamGenerator::iterator begin8_; const typename ParamGenerator::iterator end8_; typename ParamGenerator::iterator current8_; const typename ParamGenerator::iterator begin9_; const typename ParamGenerator::iterator end9_; typename ParamGenerator::iterator current9_; const typename ParamGenerator::iterator begin10_; const typename ParamGenerator::iterator end10_; typename ParamGenerator::iterator current10_; ParamType current_value_; }; // class CartesianProductGenerator10::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator10& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; const ParamGenerator g8_; const ParamGenerator g9_; const ParamGenerator g10_; }; // class CartesianProductGenerator10 // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Helper classes providing Combine() with polymorphic features. They allow // casting CartesianProductGeneratorN to ParamGenerator if T is // convertible to U. // template class CartesianProductHolder2 { public: CartesianProductHolder2(const Generator1& g1, const Generator2& g2) : g1_(g1), g2_(g2) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator2( static_cast >(g1_), static_cast >(g2_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder2& other); const Generator1 g1_; const Generator2 g2_; }; // class CartesianProductHolder2 template class CartesianProductHolder3 { public: CartesianProductHolder3(const Generator1& g1, const Generator2& g2, const Generator3& g3) : g1_(g1), g2_(g2), g3_(g3) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator3( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder3& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; }; // class CartesianProductHolder3 template class CartesianProductHolder4 { public: CartesianProductHolder4(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4) : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator4( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder4& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; }; // class CartesianProductHolder4 template class CartesianProductHolder5 { public: CartesianProductHolder5(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator5( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder5& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; }; // class CartesianProductHolder5 template class CartesianProductHolder6 { public: CartesianProductHolder6(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator6( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder6& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; }; // class CartesianProductHolder6 template class CartesianProductHolder7 { public: CartesianProductHolder7(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator7( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder7& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; }; // class CartesianProductHolder7 template class CartesianProductHolder8 { public: CartesianProductHolder8(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator8( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_), static_cast >(g8_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder8& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; const Generator8 g8_; }; // class CartesianProductHolder8 template class CartesianProductHolder9 { public: CartesianProductHolder9(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator9( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_), static_cast >(g8_), static_cast >(g9_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder9& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; const Generator8 g8_; const Generator9 g9_; }; // class CartesianProductHolder9 template class CartesianProductHolder10 { public: CartesianProductHolder10(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9, const Generator10& g10) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9), g10_(g10) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator10( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_), static_cast >(g8_), static_cast >(g9_), static_cast >(g10_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder10& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; const Generator8 g8_; const Generator9 g9_; const Generator10 g10_; }; // class CartesianProductHolder10 # endif // GTEST_HAS_COMBINE } // namespace internal } // namespace testing #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump000066400000000000000000000223101377520261000302750ustar00rootroot00000000000000$$ -*- mode: c++; -*- $var n = 50 $$ Maximum length of Values arguments we want to support. $var maxtuple = 10 $$ Maximum number of Combine arguments we want to support. // Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // Type and function utilities for implementing parameterized tests. // This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // // Currently Google Test supports at most $n arguments in Values, // and at most $maxtuple arguments in Combine. Please contact // googletestframework@googlegroups.com if you need more. // Please note that the number of arguments to Combine is limited // by the maximum arity of the implementation of tr1::tuple which is // currently set at $maxtuple. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ // scripts/fuse_gtest.py depends on gtest's own header being #included // *unconditionally*. Therefore these #includes cannot be moved // inside #if GTEST_HAS_PARAM_TEST. #include "gtest/internal/gtest-param-util.h" #include "gtest/internal/gtest-port.h" #if GTEST_HAS_PARAM_TEST namespace testing { // Forward declarations of ValuesIn(), which is implemented in // include/gtest/gtest-param-test.h. template internal::ParamGenerator< typename ::testing::internal::IteratorTraits::value_type> ValuesIn(ForwardIterator begin, ForwardIterator end); template internal::ParamGenerator ValuesIn(const T (&array)[N]); template internal::ParamGenerator ValuesIn( const Container& container); namespace internal { // Used in the Values() function to provide polymorphic capabilities. template class ValueArray1 { public: explicit ValueArray1(T1 v1) : v1_(v1) {} template operator ParamGenerator() const { return ValuesIn(&v1_, &v1_ + 1); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray1& other); const T1 v1_; }; $range i 2..n $for i [[ $range j 1..i template <$for j, [[typename T$j]]> class ValueArray$i { public: ValueArray$i($for j, [[T$j v$j]]) : $for j, [[v$(j)_(v$j)]] {} template operator ParamGenerator() const { const T array[] = {$for j, [[static_cast(v$(j)_)]]}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray$i& other); $for j [[ const T$j v$(j)_; ]] }; ]] # if GTEST_HAS_COMBINE // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Generates values from the Cartesian product of values produced // by the argument generators. // $range i 2..maxtuple $for i [[ $range j 1..i $range k 2..i template <$for j, [[typename T$j]]> class CartesianProductGenerator$i : public ParamGeneratorInterface< ::std::tr1::tuple<$for j, [[T$j]]> > { public: typedef ::std::tr1::tuple<$for j, [[T$j]]> ParamType; CartesianProductGenerator$i($for j, [[const ParamGenerator& g$j]]) : $for j, [[g$(j)_(g$j)]] {} virtual ~CartesianProductGenerator$i() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, $for j, [[g$(j)_, g$(j)_.begin()]]); } virtual ParamIteratorInterface* End() const { return new Iterator(this, $for j, [[g$(j)_, g$(j)_.end()]]); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, $for j, [[ const ParamGenerator& g$j, const typename ParamGenerator::iterator& current$(j)]]) : base_(base), $for j, [[ begin$(j)_(g$j.begin()), end$(j)_(g$j.end()), current$(j)_(current$j) ]] { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current$(i)_; $for k [[ if (current$(i+2-k)_ == end$(i+2-k)_) { current$(i+2-k)_ = begin$(i+2-k)_; ++current$(i+2-k-1)_; } ]] ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ($for j && [[ current$(j)_ == typed_other->current$(j)_ ]]); } private: Iterator(const Iterator& other) : base_(other.base_), $for j, [[ begin$(j)_(other.begin$(j)_), end$(j)_(other.end$(j)_), current$(j)_(other.current$(j)_) ]] { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType($for j, [[*current$(j)_]]); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return $for j || [[ current$(j)_ == end$(j)_ ]]; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. $for j [[ const typename ParamGenerator::iterator begin$(j)_; const typename ParamGenerator::iterator end$(j)_; typename ParamGenerator::iterator current$(j)_; ]] ParamType current_value_; }; // class CartesianProductGenerator$i::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator$i& other); $for j [[ const ParamGenerator g$(j)_; ]] }; // class CartesianProductGenerator$i ]] // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Helper classes providing Combine() with polymorphic features. They allow // casting CartesianProductGeneratorN to ParamGenerator if T is // convertible to U. // $range i 2..maxtuple $for i [[ $range j 1..i template <$for j, [[class Generator$j]]> class CartesianProductHolder$i { public: CartesianProductHolder$i($for j, [[const Generator$j& g$j]]) : $for j, [[g$(j)_(g$j)]] {} template <$for j, [[typename T$j]]> operator ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >() const { return ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >( new CartesianProductGenerator$i<$for j, [[T$j]]>( $for j,[[ static_cast >(g$(j)_) ]])); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder$i& other); $for j [[ const Generator$j g$(j)_; ]] }; // class CartesianProductHolder$i ]] # endif // GTEST_HAS_COMBINE } // namespace internal } // namespace testing #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-param-util.h000066400000000000000000000571771377520261000254040ustar00rootroot00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // Type and function utilities for implementing parameterized tests. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ #include #include #include // scripts/fuse_gtest.py depends on gtest's own header being #included // *unconditionally*. Therefore these #includes cannot be moved // inside #if GTEST_HAS_PARAM_TEST. #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-linked_ptr.h" #include "gtest/internal/gtest-port.h" #include "gtest/gtest-printers.h" #if GTEST_HAS_PARAM_TEST namespace testing { namespace internal { // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Outputs a message explaining invalid registration of different // fixture class for the same test case. This may happen when // TEST_P macro is used to define two tests with the same name // but in different namespaces. GTEST_API_ void ReportInvalidTestCaseType(const char* test_case_name, const char* file, int line); template class ParamGeneratorInterface; template class ParamGenerator; // Interface for iterating over elements provided by an implementation // of ParamGeneratorInterface. template class ParamIteratorInterface { public: virtual ~ParamIteratorInterface() {} // A pointer to the base generator instance. // Used only for the purposes of iterator comparison // to make sure that two iterators belong to the same generator. virtual const ParamGeneratorInterface* BaseGenerator() const = 0; // Advances iterator to point to the next element // provided by the generator. The caller is responsible // for not calling Advance() on an iterator equal to // BaseGenerator()->End(). virtual void Advance() = 0; // Clones the iterator object. Used for implementing copy semantics // of ParamIterator. virtual ParamIteratorInterface* Clone() const = 0; // Dereferences the current iterator and provides (read-only) access // to the pointed value. It is the caller's responsibility not to call // Current() on an iterator equal to BaseGenerator()->End(). // Used for implementing ParamGenerator::operator*(). virtual const T* Current() const = 0; // Determines whether the given iterator and other point to the same // element in the sequence generated by the generator. // Used for implementing ParamGenerator::operator==(). virtual bool Equals(const ParamIteratorInterface& other) const = 0; }; // Class iterating over elements provided by an implementation of // ParamGeneratorInterface. It wraps ParamIteratorInterface // and implements the const forward iterator concept. template class ParamIterator { public: typedef T value_type; typedef const T& reference; typedef ptrdiff_t difference_type; // ParamIterator assumes ownership of the impl_ pointer. ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {} ParamIterator& operator=(const ParamIterator& other) { if (this != &other) impl_.reset(other.impl_->Clone()); return *this; } const T& operator*() const { return *impl_->Current(); } const T* operator->() const { return impl_->Current(); } // Prefix version of operator++. ParamIterator& operator++() { impl_->Advance(); return *this; } // Postfix version of operator++. ParamIterator operator++(int /*unused*/) { ParamIteratorInterface* clone = impl_->Clone(); impl_->Advance(); return ParamIterator(clone); } bool operator==(const ParamIterator& other) const { return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_); } bool operator!=(const ParamIterator& other) const { return !(*this == other); } private: friend class ParamGenerator; explicit ParamIterator(ParamIteratorInterface* impl) : impl_(impl) {} scoped_ptr > impl_; }; // ParamGeneratorInterface is the binary interface to access generators // defined in other translation units. template class ParamGeneratorInterface { public: typedef T ParamType; virtual ~ParamGeneratorInterface() {} // Generator interface definition virtual ParamIteratorInterface* Begin() const = 0; virtual ParamIteratorInterface* End() const = 0; }; // Wraps ParamGeneratorInterface and provides general generator syntax // compatible with the STL Container concept. // This class implements copy initialization semantics and the contained // ParamGeneratorInterface instance is shared among all copies // of the original object. This is possible because that instance is immutable. template class ParamGenerator { public: typedef ParamIterator iterator; explicit ParamGenerator(ParamGeneratorInterface* impl) : impl_(impl) {} ParamGenerator(const ParamGenerator& other) : impl_(other.impl_) {} ParamGenerator& operator=(const ParamGenerator& other) { impl_ = other.impl_; return *this; } iterator begin() const { return iterator(impl_->Begin()); } iterator end() const { return iterator(impl_->End()); } private: linked_ptr > impl_; }; // Generates values from a range of two comparable values. Can be used to // generate sequences of user-defined types that implement operator+() and // operator<(). // This class is used in the Range() function. template class RangeGenerator : public ParamGeneratorInterface { public: RangeGenerator(T begin, T end, IncrementT step) : begin_(begin), end_(end), step_(step), end_index_(CalculateEndIndex(begin, end, step)) {} virtual ~RangeGenerator() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, begin_, 0, step_); } virtual ParamIteratorInterface* End() const { return new Iterator(this, end_, end_index_, step_); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, T value, int index, IncrementT step) : base_(base), value_(value), index_(index), step_(step) {} virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } virtual void Advance() { value_ = value_ + step_; index_++; } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const T* Current() const { return &value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const int other_index = CheckedDowncastToActualType(&other)->index_; return index_ == other_index; } private: Iterator(const Iterator& other) : ParamIteratorInterface(), base_(other.base_), value_(other.value_), index_(other.index_), step_(other.step_) {} // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; T value_; int index_; const IncrementT step_; }; // class RangeGenerator::Iterator static int CalculateEndIndex(const T& begin, const T& end, const IncrementT& step) { int end_index = 0; for (T i = begin; i < end; i = i + step) end_index++; return end_index; } // No implementation - assignment is unsupported. void operator=(const RangeGenerator& other); const T begin_; const T end_; const IncrementT step_; // The index for the end() iterator. All the elements in the generated // sequence are indexed (0-based) to aid iterator comparison. const int end_index_; }; // class RangeGenerator // Generates values from a pair of STL-style iterators. Used in the // ValuesIn() function. The elements are copied from the source range // since the source can be located on the stack, and the generator // is likely to persist beyond that stack frame. template class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface { public: template ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end) : container_(begin, end) {} virtual ~ValuesInIteratorRangeGenerator() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, container_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, container_.end()); } private: typedef typename ::std::vector ContainerType; class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, typename ContainerType::const_iterator iterator) : base_(base), iterator_(iterator) {} virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } virtual void Advance() { ++iterator_; value_.reset(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } // We need to use cached value referenced by iterator_ because *iterator_ // can return a temporary object (and of type other then T), so just // having "return &*iterator_;" doesn't work. // value_ is updated here and not in Advance() because Advance() // can advance iterator_ beyond the end of the range, and we cannot // detect that fact. The client code, on the other hand, is // responsible for not calling Current() on an out-of-range iterator. virtual const T* Current() const { if (value_.get() == NULL) value_.reset(new T(*iterator_)); return value_.get(); } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; return iterator_ == CheckedDowncastToActualType(&other)->iterator_; } private: Iterator(const Iterator& other) // The explicit constructor call suppresses a false warning // emitted by gcc when supplied with the -Wextra option. : ParamIteratorInterface(), base_(other.base_), iterator_(other.iterator_) {} const ParamGeneratorInterface* const base_; typename ContainerType::const_iterator iterator_; // A cached value of *iterator_. We keep it here to allow access by // pointer in the wrapping iterator's operator->(). // value_ needs to be mutable to be accessed in Current(). // Use of scoped_ptr helps manage cached value's lifetime, // which is bound by the lifespan of the iterator itself. mutable scoped_ptr value_; }; // class ValuesInIteratorRangeGenerator::Iterator // No implementation - assignment is unsupported. void operator=(const ValuesInIteratorRangeGenerator& other); const ContainerType container_; }; // class ValuesInIteratorRangeGenerator // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Stores a parameter value and later creates tests parameterized with that // value. template class ParameterizedTestFactory : public TestFactoryBase { public: typedef typename TestClass::ParamType ParamType; explicit ParameterizedTestFactory(ParamType parameter) : parameter_(parameter) {} virtual Test* CreateTest() { TestClass::SetParam(¶meter_); return new TestClass(); } private: const ParamType parameter_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory); }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // TestMetaFactoryBase is a base class for meta-factories that create // test factories for passing into MakeAndRegisterTestInfo function. template class TestMetaFactoryBase { public: virtual ~TestMetaFactoryBase() {} virtual TestFactoryBase* CreateTestFactory(ParamType parameter) = 0; }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // TestMetaFactory creates test factories for passing into // MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives // ownership of test factory pointer, same factory object cannot be passed // into that method twice. But ParameterizedTestCaseInfo is going to call // it for each Test/Parameter value combination. Thus it needs meta factory // creator class. template class TestMetaFactory : public TestMetaFactoryBase { public: typedef typename TestCase::ParamType ParamType; TestMetaFactory() {} virtual TestFactoryBase* CreateTestFactory(ParamType parameter) { return new ParameterizedTestFactory(parameter); } private: GTEST_DISALLOW_COPY_AND_ASSIGN_(TestMetaFactory); }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // ParameterizedTestCaseInfoBase is a generic interface // to ParameterizedTestCaseInfo classes. ParameterizedTestCaseInfoBase // accumulates test information provided by TEST_P macro invocations // and generators provided by INSTANTIATE_TEST_CASE_P macro invocations // and uses that information to register all resulting test instances // in RegisterTests method. The ParameterizeTestCaseRegistry class holds // a collection of pointers to the ParameterizedTestCaseInfo objects // and calls RegisterTests() on each of them when asked. class ParameterizedTestCaseInfoBase { public: virtual ~ParameterizedTestCaseInfoBase() {} // Base part of test case name for display purposes. virtual const string& GetTestCaseName() const = 0; // Test case id to verify identity. virtual TypeId GetTestCaseTypeId() const = 0; // UnitTest class invokes this method to register tests in this // test case right before running them in RUN_ALL_TESTS macro. // This method should not be called more then once on any single // instance of a ParameterizedTestCaseInfoBase derived class. virtual void RegisterTests() = 0; protected: ParameterizedTestCaseInfoBase() {} private: GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfoBase); }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // ParameterizedTestCaseInfo accumulates tests obtained from TEST_P // macro invocations for a particular test case and generators // obtained from INSTANTIATE_TEST_CASE_P macro invocations for that // test case. It registers tests with all values generated by all // generators when asked. template class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { public: // ParamType and GeneratorCreationFunc are private types but are required // for declarations of public methods AddTestPattern() and // AddTestCaseInstantiation(). typedef typename TestCase::ParamType ParamType; // A function that returns an instance of appropriate generator type. typedef ParamGenerator(GeneratorCreationFunc)(); explicit ParameterizedTestCaseInfo(const char* name) : test_case_name_(name) {} // Test case base name for display purposes. virtual const string& GetTestCaseName() const { return test_case_name_; } // Test case id to verify identity. virtual TypeId GetTestCaseTypeId() const { return GetTypeId(); } // TEST_P macro uses AddTestPattern() to record information // about a single test in a LocalTestInfo structure. // test_case_name is the base name of the test case (without invocation // prefix). test_base_name is the name of an individual test without // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is // test case base name and DoBar is test base name. void AddTestPattern(const char* test_case_name, const char* test_base_name, TestMetaFactoryBase* meta_factory) { tests_.push_back(linked_ptr(new TestInfo(test_case_name, test_base_name, meta_factory))); } // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information // about a generator. int AddTestCaseInstantiation(const string& instantiation_name, GeneratorCreationFunc* func, const char* /* file */, int /* line */) { instantiations_.push_back(::std::make_pair(instantiation_name, func)); return 0; // Return value used only to run this method in namespace scope. } // UnitTest class invokes this method to register tests in this test case // test cases right before running tests in RUN_ALL_TESTS macro. // This method should not be called more then once on any single // instance of a ParameterizedTestCaseInfoBase derived class. // UnitTest has a guard to prevent from calling this method more then once. virtual void RegisterTests() { for (typename TestInfoContainer::iterator test_it = tests_.begin(); test_it != tests_.end(); ++test_it) { linked_ptr test_info = *test_it; for (typename InstantiationContainer::iterator gen_it = instantiations_.begin(); gen_it != instantiations_.end(); ++gen_it) { const string& instantiation_name = gen_it->first; ParamGenerator generator((*gen_it->second)()); string test_case_name; if ( !instantiation_name.empty() ) test_case_name = instantiation_name + "/"; test_case_name += test_info->test_case_base_name; int i = 0; for (typename ParamGenerator::iterator param_it = generator.begin(); param_it != generator.end(); ++param_it, ++i) { Message test_name_stream; test_name_stream << test_info->test_base_name << "/" << i; MakeAndRegisterTestInfo( test_case_name.c_str(), test_name_stream.GetString().c_str(), NULL, // No type parameter. PrintToString(*param_it).c_str(), GetTestCaseTypeId(), TestCase::SetUpTestCase, TestCase::TearDownTestCase, test_info->test_meta_factory->CreateTestFactory(*param_it)); } // for param_it } // for gen_it } // for test_it } // RegisterTests private: // LocalTestInfo structure keeps information about a single test registered // with TEST_P macro. struct TestInfo { TestInfo(const char* a_test_case_base_name, const char* a_test_base_name, TestMetaFactoryBase* a_test_meta_factory) : test_case_base_name(a_test_case_base_name), test_base_name(a_test_base_name), test_meta_factory(a_test_meta_factory) {} const string test_case_base_name; const string test_base_name; const scoped_ptr > test_meta_factory; }; typedef ::std::vector > TestInfoContainer; // Keeps pairs of // received from INSTANTIATE_TEST_CASE_P macros. typedef ::std::vector > InstantiationContainer; const string test_case_name_; TestInfoContainer tests_; InstantiationContainer instantiations_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfo); }; // class ParameterizedTestCaseInfo // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // ParameterizedTestCaseRegistry contains a map of ParameterizedTestCaseInfoBase // classes accessed by test case names. TEST_P and INSTANTIATE_TEST_CASE_P // macros use it to locate their corresponding ParameterizedTestCaseInfo // descriptors. class ParameterizedTestCaseRegistry { public: ParameterizedTestCaseRegistry() {} ~ParameterizedTestCaseRegistry() { for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); it != test_case_infos_.end(); ++it) { delete *it; } } // Looks up or creates and returns a structure containing information about // tests and instantiations of a particular test case. template ParameterizedTestCaseInfo* GetTestCasePatternHolder( const char* test_case_name, const char* file, int line) { ParameterizedTestCaseInfo* typed_test_info = NULL; for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); it != test_case_infos_.end(); ++it) { if ((*it)->GetTestCaseName() == test_case_name) { if ((*it)->GetTestCaseTypeId() != GetTypeId()) { // Complain about incorrect usage of Google Test facilities // and terminate the program since we cannot guaranty correct // test case setup and tear-down in this case. ReportInvalidTestCaseType(test_case_name, file, line); posix::Abort(); } else { // At this point we are sure that the object we found is of the same // type we are looking for, so we downcast it to that type // without further checks. typed_test_info = CheckedDowncastToActualType< ParameterizedTestCaseInfo >(*it); } break; } } if (typed_test_info == NULL) { typed_test_info = new ParameterizedTestCaseInfo(test_case_name); test_case_infos_.push_back(typed_test_info); } return typed_test_info; } void RegisterTests() { for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); it != test_case_infos_.end(); ++it) { (*it)->RegisterTests(); } } private: typedef ::std::vector TestCaseInfoContainer; TestCaseInfoContainer test_case_infos_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseRegistry); }; } // namespace internal } // namespace testing #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-port.h000066400000000000000000002062741377520261000243070ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: wan@google.com (Zhanyong Wan) // // Low-level types and utilities for porting Google Test to various // platforms. They are subject to change without notice. DO NOT USE // THEM IN USER CODE. // // This file is fundamental to Google Test. All other Google Test source // files are expected to #include this. Therefore, it cannot #include // any other Google Test header. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ // The user can define the following macros in the build script to // control Google Test's behavior. If the user doesn't define a macro // in this list, Google Test will define it. // // GTEST_HAS_CLONE - Define it to 1/0 to indicate that clone(2) // is/isn't available. // GTEST_HAS_EXCEPTIONS - Define it to 1/0 to indicate that exceptions // are enabled. // GTEST_HAS_GLOBAL_STRING - Define it to 1/0 to indicate that ::string // is/isn't available (some systems define // ::string, which is different to std::string). // GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::string // is/isn't available (some systems define // ::wstring, which is different to std::wstring). // GTEST_HAS_POSIX_RE - Define it to 1/0 to indicate that POSIX regular // expressions are/aren't available. // GTEST_HAS_PTHREAD - Define it to 1/0 to indicate that // is/isn't available. // GTEST_HAS_RTTI - Define it to 1/0 to indicate that RTTI is/isn't // enabled. // GTEST_HAS_STD_WSTRING - Define it to 1/0 to indicate that // std::wstring does/doesn't work (Google Test can // be used where std::wstring is unavailable). // GTEST_HAS_TR1_TUPLE - Define it to 1/0 to indicate tr1::tuple // is/isn't available. // GTEST_HAS_SEH - Define it to 1/0 to indicate whether the // compiler supports Microsoft's "Structured // Exception Handling". // GTEST_HAS_STREAM_REDIRECTION // - Define it to 1/0 to indicate whether the // platform supports I/O stream redirection using // dup() and dup2(). // GTEST_USE_OWN_TR1_TUPLE - Define it to 1/0 to indicate whether Google // Test's own tr1 tuple implementation should be // used. Unused when the user sets // GTEST_HAS_TR1_TUPLE to 0. // GTEST_LANG_CXX11 - Define it to 1/0 to indicate that Google Test // is building in C++11/C++98 mode. // GTEST_LINKED_AS_SHARED_LIBRARY // - Define to 1 when compiling tests that use // Google Test as a shared library (known as // DLL on Windows). // GTEST_CREATE_SHARED_LIBRARY // - Define to 1 when compiling Google Test itself // as a shared library. // This header defines the following utilities: // // Macros indicating the current platform (defined to 1 if compiled on // the given platform; otherwise undefined): // GTEST_OS_AIX - IBM AIX // GTEST_OS_CYGWIN - Cygwin // GTEST_OS_HPUX - HP-UX // GTEST_OS_LINUX - Linux // GTEST_OS_LINUX_ANDROID - Google Android // GTEST_OS_MAC - Mac OS X // GTEST_OS_IOS - iOS // GTEST_OS_IOS_SIMULATOR - iOS simulator // GTEST_OS_NACL - Google Native Client (NaCl) // GTEST_OS_OPENBSD - OpenBSD // GTEST_OS_QNX - QNX // GTEST_OS_SOLARIS - Sun Solaris // GTEST_OS_SYMBIAN - Symbian // GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile) // GTEST_OS_WINDOWS_DESKTOP - Windows Desktop // GTEST_OS_WINDOWS_MINGW - MinGW // GTEST_OS_WINDOWS_MOBILE - Windows Mobile // GTEST_OS_ZOS - z/OS // // Among the platforms, Cygwin, Linux, Max OS X, and Windows have the // most stable support. Since core members of the Google Test project // don't have access to other platforms, support for them may be less // stable. If you notice any problems on your platform, please notify // googletestframework@googlegroups.com (patches for fixing them are // even more welcome!). // // Note that it is possible that none of the GTEST_OS_* macros are defined. // // Macros indicating available Google Test features (defined to 1 if // the corresponding feature is supported; otherwise undefined): // GTEST_HAS_COMBINE - the Combine() function (for value-parameterized // tests) // GTEST_HAS_DEATH_TEST - death tests // GTEST_HAS_PARAM_TEST - value-parameterized tests // GTEST_HAS_TYPED_TEST - typed tests // GTEST_HAS_TYPED_TEST_P - type-parameterized tests // GTEST_USES_POSIX_RE - enhanced POSIX regex is used. Do not confuse with // GTEST_HAS_POSIX_RE (see above) which users can // define themselves. // GTEST_USES_SIMPLE_RE - our own simple regex is used; // the above two are mutually exclusive. // GTEST_CAN_COMPARE_NULL - accepts untyped NULL in EXPECT_EQ(). // // Macros for basic C++ coding: // GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning. // GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a // variable don't have to be used. // GTEST_DISALLOW_ASSIGN_ - disables operator=. // GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=. // GTEST_MUST_USE_RESULT_ - declares that a function's result must be used. // // Synchronization: // Mutex, MutexLock, ThreadLocal, GetThreadCount() // - synchronization primitives. // GTEST_IS_THREADSAFE - defined to 1 to indicate that the above // synchronization primitives have real implementations // and Google Test is thread-safe; or 0 otherwise. // // Template meta programming: // is_pointer - as in TR1; needed on Symbian and IBM XL C/C++ only. // IteratorTraits - partial implementation of std::iterator_traits, which // is not available in libCstd when compiled with Sun C++. // // Smart pointers: // scoped_ptr - as in TR2. // // Regular expressions: // RE - a simple regular expression class using the POSIX // Extended Regular Expression syntax on UNIX-like // platforms, or a reduced regular exception syntax on // other platforms, including Windows. // // Logging: // GTEST_LOG_() - logs messages at the specified severity level. // LogToStderr() - directs all log messages to stderr. // FlushInfoLog() - flushes informational log messages. // // Stdout and stderr capturing: // CaptureStdout() - starts capturing stdout. // GetCapturedStdout() - stops capturing stdout and returns the captured // string. // CaptureStderr() - starts capturing stderr. // GetCapturedStderr() - stops capturing stderr and returns the captured // string. // // Integer types: // TypeWithSize - maps an integer to a int type. // Int32, UInt32, Int64, UInt64, TimeInMillis // - integers of known sizes. // BiggestInt - the biggest signed integer type. // // Command-line utilities: // GTEST_FLAG() - references a flag. // GTEST_DECLARE_*() - declares a flag. // GTEST_DEFINE_*() - defines a flag. // GetInjectableArgvs() - returns the command line as a vector of strings. // // Environment variable utilities: // GetEnv() - gets the value of an environment variable. // BoolFromGTestEnv() - parses a bool environment variable. // Int32FromGTestEnv() - parses an Int32 environment variable. // StringFromGTestEnv() - parses a string environment variable. #include // for isspace, etc #include // for ptrdiff_t #include #include #include #ifndef _WIN32_WCE # include # include #endif // !_WIN32_WCE #if defined __APPLE__ # include # include #endif #include // NOLINT #include // NOLINT #include // NOLINT #define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" #define GTEST_FLAG_PREFIX_ "gtest_" #define GTEST_FLAG_PREFIX_DASH_ "gtest-" #define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" #define GTEST_NAME_ "Google Test" #define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/" // Determines the version of gcc that is used to compile this. #ifdef __GNUC__ // 40302 means version 4.3.2. # define GTEST_GCC_VER_ \ (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) #endif // __GNUC__ // Determines the platform on which Google Test is compiled. #ifdef __CYGWIN__ # define GTEST_OS_CYGWIN 1 #elif defined __SYMBIAN32__ # define GTEST_OS_SYMBIAN 1 #elif defined _WIN32 # define GTEST_OS_WINDOWS 1 # ifdef _WIN32_WCE # define GTEST_OS_WINDOWS_MOBILE 1 # elif defined(__MINGW__) || defined(__MINGW32__) # define GTEST_OS_WINDOWS_MINGW 1 # else # define GTEST_OS_WINDOWS_DESKTOP 1 # endif // _WIN32_WCE #elif defined __APPLE__ # define GTEST_OS_MAC 1 # if TARGET_OS_IPHONE # define GTEST_OS_IOS 1 # if TARGET_IPHONE_SIMULATOR # define GTEST_OS_IOS_SIMULATOR 1 # endif # endif #elif defined __linux__ # define GTEST_OS_LINUX 1 # if defined __ANDROID__ # define GTEST_OS_LINUX_ANDROID 1 # endif #elif defined __MVS__ # define GTEST_OS_ZOS 1 #elif defined(__sun) && defined(__SVR4) # define GTEST_OS_SOLARIS 1 #elif defined(_AIX) # define GTEST_OS_AIX 1 #elif defined(__hpux) # define GTEST_OS_HPUX 1 #elif defined __native_client__ # define GTEST_OS_NACL 1 #elif defined __OpenBSD__ # define GTEST_OS_OPENBSD 1 #elif defined __QNX__ # define GTEST_OS_QNX 1 #endif // __CYGWIN__ #ifndef GTEST_LANG_CXX11 // gcc and clang define __GXX_EXPERIMENTAL_CXX0X__ when // -std={c,gnu}++{0x,11} is passed. The C++11 standard specifies a // value for __cplusplus, and recent versions of clang, gcc, and // probably other compilers set that too in C++11 mode. # if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L // Compiling in at least C++11 mode. # define GTEST_LANG_CXX11 1 # else # define GTEST_LANG_CXX11 0 # endif #endif // Brings in definitions for functions used in the testing::internal::posix // namespace (read, write, close, chdir, isatty, stat). We do not currently // use them on Windows Mobile. #if !GTEST_OS_WINDOWS // This assumes that non-Windows OSes provide unistd.h. For OSes where this // is not the case, we need to include headers that provide the functions // mentioned above. # include # include #elif !GTEST_OS_WINDOWS_MOBILE # include # include #endif #if GTEST_OS_LINUX_ANDROID // Used to define __ANDROID_API__ matching the target NDK API level. # include // NOLINT #endif // Defines this to true iff Google Test can use POSIX regular expressions. #ifndef GTEST_HAS_POSIX_RE # if GTEST_OS_LINUX_ANDROID // On Android, is only available starting with Gingerbread. # define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9) # else # define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS) # endif #endif #if GTEST_HAS_POSIX_RE // On some platforms, needs someone to define size_t, and // won't compile otherwise. We can #include it here as we already // included , which is guaranteed to define size_t through // . # include // NOLINT # define GTEST_USES_POSIX_RE 1 #elif GTEST_OS_WINDOWS // is not available on Windows. Use our own simple regex // implementation instead. # define GTEST_USES_SIMPLE_RE 1 #else // may not be available on this platform. Use our own // simple regex implementation instead. # define GTEST_USES_SIMPLE_RE 1 #endif // GTEST_HAS_POSIX_RE #ifndef GTEST_HAS_EXCEPTIONS // The user didn't tell us whether exceptions are enabled, so we need // to figure it out. # if defined(_MSC_VER) || defined(__BORLANDC__) // MSVC's and C++Builder's implementations of the STL use the _HAS_EXCEPTIONS // macro to enable exceptions, so we'll do the same. // Assumes that exceptions are enabled by default. # ifndef _HAS_EXCEPTIONS # define _HAS_EXCEPTIONS 1 # endif // _HAS_EXCEPTIONS # define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS # elif defined(__GNUC__) && __EXCEPTIONS // gcc defines __EXCEPTIONS to 1 iff exceptions are enabled. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__SUNPRO_CC) // Sun Pro CC supports exceptions. However, there is no compile-time way of // detecting whether they are enabled or not. Therefore, we assume that // they are enabled unless the user tells us otherwise. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__IBMCPP__) && __EXCEPTIONS // xlC defines __EXCEPTIONS to 1 iff exceptions are enabled. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__HP_aCC) // Exception handling is in effect by default in HP aCC compiler. It has to // be turned of by +noeh compiler option if desired. # define GTEST_HAS_EXCEPTIONS 1 # else // For other compilers, we assume exceptions are disabled to be // conservative. # define GTEST_HAS_EXCEPTIONS 0 # endif // defined(_MSC_VER) || defined(__BORLANDC__) #endif // GTEST_HAS_EXCEPTIONS #if !defined(GTEST_HAS_STD_STRING) // Even though we don't use this macro any longer, we keep it in case // some clients still depend on it. # define GTEST_HAS_STD_STRING 1 #elif !GTEST_HAS_STD_STRING // The user told us that ::std::string isn't available. # error "Google Test cannot be used where ::std::string isn't available." #endif // !defined(GTEST_HAS_STD_STRING) #ifndef GTEST_HAS_GLOBAL_STRING // The user didn't tell us whether ::string is available, so we need // to figure it out. # define GTEST_HAS_GLOBAL_STRING 0 #endif // GTEST_HAS_GLOBAL_STRING #ifndef GTEST_HAS_STD_WSTRING // The user didn't tell us whether ::std::wstring is available, so we need // to figure it out. // TODO(wan@google.com): uses autoconf to detect whether ::std::wstring // is available. // Cygwin 1.7 and below doesn't support ::std::wstring. // Solaris' libc++ doesn't support it either. Android has // no support for it at least as recent as Froyo (2.2). # define GTEST_HAS_STD_WSTRING \ (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS)) #endif // GTEST_HAS_STD_WSTRING #ifndef GTEST_HAS_GLOBAL_WSTRING // The user didn't tell us whether ::wstring is available, so we need // to figure it out. # define GTEST_HAS_GLOBAL_WSTRING \ (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) #endif // GTEST_HAS_GLOBAL_WSTRING // Determines whether RTTI is available. #ifndef GTEST_HAS_RTTI // The user didn't tell us whether RTTI is enabled, so we need to // figure it out. # ifdef _MSC_VER # ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled. # define GTEST_HAS_RTTI 1 # else # define GTEST_HAS_RTTI 0 # endif // Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled. # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302) # ifdef __GXX_RTTI // When building against STLport with the Android NDK and with // -frtti -fno-exceptions, the build fails at link time with undefined // references to __cxa_bad_typeid. Note sure if STL or toolchain bug, // so disable RTTI when detected. # if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \ !defined(__EXCEPTIONS) # define GTEST_HAS_RTTI 0 # else # define GTEST_HAS_RTTI 1 # endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS # else # define GTEST_HAS_RTTI 0 # endif // __GXX_RTTI // Clang defines __GXX_RTTI starting with version 3.0, but its manual recommends // using has_feature instead. has_feature(cxx_rtti) is supported since 2.7, the // first version with C++ support. # elif defined(__clang__) # define GTEST_HAS_RTTI __has_feature(cxx_rtti) // Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if // both the typeid and dynamic_cast features are present. # elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) # ifdef __RTTI_ALL__ # define GTEST_HAS_RTTI 1 # else # define GTEST_HAS_RTTI 0 # endif # else // For all other compilers, we assume RTTI is enabled. # define GTEST_HAS_RTTI 1 # endif // _MSC_VER #endif // GTEST_HAS_RTTI // It's this header's responsibility to #include when RTTI // is enabled. #if GTEST_HAS_RTTI # include #endif // Determines whether Google Test can use the pthreads library. #ifndef GTEST_HAS_PTHREAD // The user didn't tell us explicitly, so we assume pthreads support is // available on Linux and Mac. // // To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0 // to your compiler flags. # define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX \ || GTEST_OS_QNX) #endif // GTEST_HAS_PTHREAD #if GTEST_HAS_PTHREAD // gtest-port.h guarantees to #include when GTEST_HAS_PTHREAD is // true. # include // NOLINT // For timespec and nanosleep, used below. # include // NOLINT #endif // Determines whether Google Test can use tr1/tuple. You can define // this macro to 0 to prevent Google Test from using tuple (any // feature depending on tuple with be disabled in this mode). #ifndef GTEST_HAS_TR1_TUPLE # if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) // STLport, provided with the Android NDK, has neither or . # define GTEST_HAS_TR1_TUPLE 0 # else // The user didn't tell us not to do it, so we assume it's OK. # define GTEST_HAS_TR1_TUPLE 1 # endif #endif // GTEST_HAS_TR1_TUPLE // Determines whether Google Test's own tr1 tuple implementation // should be used. #ifndef GTEST_USE_OWN_TR1_TUPLE // The user didn't tell us, so we need to figure it out. // We use our own TR1 tuple if we aren't sure the user has an // implementation of it already. At this time, libstdc++ 4.0.0+ and // MSVC 2010 are the only mainstream standard libraries that come // with a TR1 tuple implementation. NVIDIA's CUDA NVCC compiler // pretends to be GCC by defining __GNUC__ and friends, but cannot // compile GCC's tuple implementation. MSVC 2008 (9.0) provides TR1 // tuple in a 323 MB Feature Pack download, which we cannot assume the // user has. QNX's QCC compiler is a modified GCC but it doesn't // support TR1 tuple. libc++ only provides std::tuple, in C++11 mode, // and it can be used with some compilers that define __GNUC__. # if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \ && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) || _MSC_VER >= 1600 # define GTEST_ENV_HAS_TR1_TUPLE_ 1 # endif // C++11 specifies that provides std::tuple. Use that if gtest is used // in C++11 mode and libstdc++ isn't very old (binaries targeting OS X 10.6 // can build with clang but need to use gcc4.2's libstdc++). # if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325) # define GTEST_ENV_HAS_STD_TUPLE_ 1 # endif # if GTEST_ENV_HAS_TR1_TUPLE_ || GTEST_ENV_HAS_STD_TUPLE_ # define GTEST_USE_OWN_TR1_TUPLE 0 # else # define GTEST_USE_OWN_TR1_TUPLE 1 # endif #endif // GTEST_USE_OWN_TR1_TUPLE // To avoid conditional compilation everywhere, we make it // gtest-port.h's responsibility to #include the header implementing // tr1/tuple. #if GTEST_HAS_TR1_TUPLE # if GTEST_USE_OWN_TR1_TUPLE # include "gtest/internal/gtest-tuple.h" # elif GTEST_ENV_HAS_STD_TUPLE_ # include // C++11 puts its tuple into the ::std namespace rather than // ::std::tr1. gtest expects tuple to live in ::std::tr1, so put it there. // This causes undefined behavior, but supported compilers react in // the way we intend. namespace std { namespace tr1 { using ::std::get; using ::std::make_tuple; using ::std::tuple; using ::std::tuple_element; using ::std::tuple_size; } } # elif GTEST_OS_SYMBIAN // On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to // use STLport's tuple implementation, which unfortunately doesn't // work as the copy of STLport distributed with Symbian is incomplete. // By making sure BOOST_HAS_TR1_TUPLE is undefined, we force Boost to // use its own tuple implementation. # ifdef BOOST_HAS_TR1_TUPLE # undef BOOST_HAS_TR1_TUPLE # endif // BOOST_HAS_TR1_TUPLE // This prevents , which defines // BOOST_HAS_TR1_TUPLE, from being #included by Boost's . # define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED # include # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000) // GCC 4.0+ implements tr1/tuple in the header. This does // not conform to the TR1 spec, which requires the header to be . # if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 // Until version 4.3.2, gcc has a bug that causes , // which is #included by , to not compile when RTTI is // disabled. _TR1_FUNCTIONAL is the header guard for // . Hence the following #define is a hack to prevent // from being included. # define _TR1_FUNCTIONAL 1 # include # undef _TR1_FUNCTIONAL // Allows the user to #include // if he chooses to. # else # include // NOLINT # endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 # else // If the compiler is not GCC 4.0+, we assume the user is using a // spec-conforming TR1 implementation. # include // NOLINT # endif // GTEST_USE_OWN_TR1_TUPLE #endif // GTEST_HAS_TR1_TUPLE // Determines whether clone(2) is supported. // Usually it will only be available on Linux, excluding // Linux on the Itanium architecture. // Also see http://linux.die.net/man/2/clone. #ifndef GTEST_HAS_CLONE // The user didn't tell us, so we need to figure it out. # if GTEST_OS_LINUX && !defined(__ia64__) # if GTEST_OS_LINUX_ANDROID // On Android, clone() is only available on ARM starting with Gingerbread. # if defined(__arm__) && __ANDROID_API__ >= 9 # define GTEST_HAS_CLONE 1 # else # define GTEST_HAS_CLONE 0 # endif # else # define GTEST_HAS_CLONE 1 # endif # else # define GTEST_HAS_CLONE 0 # endif // GTEST_OS_LINUX && !defined(__ia64__) #endif // GTEST_HAS_CLONE // Determines whether to support stream redirection. This is used to test // output correctness and to implement death tests. #ifndef GTEST_HAS_STREAM_REDIRECTION // By default, we assume that stream redirection is supported on all // platforms except known mobile ones. # if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN # define GTEST_HAS_STREAM_REDIRECTION 0 # else # define GTEST_HAS_STREAM_REDIRECTION 1 # endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN #endif // GTEST_HAS_STREAM_REDIRECTION // Determines whether to support death tests. // Google Test does not support death tests for VC 7.1 and earlier as // abort() in a VC 7.1 application compiled as GUI in debug config // pops up a dialog window that cannot be suppressed programmatically. #if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ (GTEST_OS_MAC && !GTEST_OS_IOS) || GTEST_OS_IOS_SIMULATOR || \ (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \ GTEST_OS_OPENBSD || GTEST_OS_QNX) # define GTEST_HAS_DEATH_TEST 1 # include // NOLINT #endif // We don't support MSVC 7.1 with exceptions disabled now. Therefore // all the compilers we care about are adequate for supporting // value-parameterized tests. #define GTEST_HAS_PARAM_TEST 1 // Determines whether to support type-driven tests. // Typed tests need and variadic macros, which GCC, VC++ 8.0, // Sun Pro CC, IBM Visual Age, and HP aCC support. #if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \ defined(__IBMCPP__) || defined(__HP_aCC) # define GTEST_HAS_TYPED_TEST 1 # define GTEST_HAS_TYPED_TEST_P 1 #endif // Determines whether to support Combine(). This only makes sense when // value-parameterized tests are enabled. The implementation doesn't // work on Sun Studio since it doesn't understand templated conversion // operators. #if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC) # define GTEST_HAS_COMBINE 1 #endif // Determines whether the system compiler uses UTF-16 for encoding wide strings. #define GTEST_WIDE_STRING_USES_UTF16_ \ (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX) // Determines whether test results can be streamed to a socket. #if GTEST_OS_LINUX # define GTEST_CAN_STREAM_RESULTS_ 1 #endif // Defines some utility macros. // The GNU compiler emits a warning if nested "if" statements are followed by // an "else" statement and braces are not used to explicitly disambiguate the // "else" binding. This leads to problems with code like: // // if (gate) // ASSERT_*(condition) << "Some message"; // // The "switch (0) case 0:" idiom is used to suppress this. #ifdef __INTEL_COMPILER # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ #else # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default: // NOLINT #endif // Use this annotation at the end of a struct/class definition to // prevent the compiler from optimizing away instances that are never // used. This is useful when all interesting logic happens inside the // c'tor and / or d'tor. Example: // // struct Foo { // Foo() { ... } // } GTEST_ATTRIBUTE_UNUSED_; // // Also use it after a variable or parameter declaration to tell the // compiler the variable/parameter does not have to be used. #if defined(__GNUC__) && !defined(COMPILER_ICC) # define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) #else # define GTEST_ATTRIBUTE_UNUSED_ #endif // A macro to disallow operator= // This should be used in the private: declarations for a class. #define GTEST_DISALLOW_ASSIGN_(type)\ void operator=(type const &) // A macro to disallow copy constructor and operator= // This should be used in the private: declarations for a class. #define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\ type(type const &);\ GTEST_DISALLOW_ASSIGN_(type) // Tell the compiler to warn about unused return values for functions declared // with this macro. The macro should be used on function declarations // following the argument list: // // Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_; #if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC) # define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) #else # define GTEST_MUST_USE_RESULT_ #endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC // Determine whether the compiler supports Microsoft's Structured Exception // Handling. This is supported by several Windows compilers but generally // does not exist on any other system. #ifndef GTEST_HAS_SEH // The user didn't tell us, so we need to figure it out. # if defined(_MSC_VER) || defined(__BORLANDC__) // These two compilers are known to support SEH. # define GTEST_HAS_SEH 1 # else // Assume no SEH. # define GTEST_HAS_SEH 0 # endif #endif // GTEST_HAS_SEH #ifdef _MSC_VER # if GTEST_LINKED_AS_SHARED_LIBRARY # define GTEST_API_ __declspec(dllimport) # elif GTEST_CREATE_SHARED_LIBRARY # define GTEST_API_ __declspec(dllexport) # endif #endif // _MSC_VER #ifndef GTEST_API_ # define GTEST_API_ #endif #ifdef __GNUC__ // Ask the compiler to never inline a given function. # define GTEST_NO_INLINE_ __attribute__((noinline)) #else # define GTEST_NO_INLINE_ #endif // _LIBCPP_VERSION is defined by the libc++ library from the LLVM project. #if defined(__GLIBCXX__) || defined(_LIBCPP_VERSION) # define GTEST_HAS_CXXABI_H_ 1 #else # define GTEST_HAS_CXXABI_H_ 0 #endif namespace testing { class Message; namespace internal { // A secret type that Google Test users don't know about. It has no // definition on purpose. Therefore it's impossible to create a // Secret object, which is what we want. class Secret; // The GTEST_COMPILE_ASSERT_ macro can be used to verify that a compile time // expression is true. For example, you could use it to verify the // size of a static array: // // GTEST_COMPILE_ASSERT_(ARRAYSIZE(content_type_names) == CONTENT_NUM_TYPES, // content_type_names_incorrect_size); // // or to make sure a struct is smaller than a certain size: // // GTEST_COMPILE_ASSERT_(sizeof(foo) < 128, foo_too_large); // // The second argument to the macro is the name of the variable. If // the expression is false, most compilers will issue a warning/error // containing the name of the variable. template struct CompileAssert { }; #define GTEST_COMPILE_ASSERT_(expr, msg) \ typedef ::testing::internal::CompileAssert<(static_cast(expr))> \ msg[static_cast(expr) ? 1 : -1] GTEST_ATTRIBUTE_UNUSED_ // Implementation details of GTEST_COMPILE_ASSERT_: // // - GTEST_COMPILE_ASSERT_ works by defining an array type that has -1 // elements (and thus is invalid) when the expression is false. // // - The simpler definition // // #define GTEST_COMPILE_ASSERT_(expr, msg) typedef char msg[(expr) ? 1 : -1] // // does not work, as gcc supports variable-length arrays whose sizes // are determined at run-time (this is gcc's extension and not part // of the C++ standard). As a result, gcc fails to reject the // following code with the simple definition: // // int foo; // GTEST_COMPILE_ASSERT_(foo, msg); // not supposed to compile as foo is // // not a compile-time constant. // // - By using the type CompileAssert<(bool(expr))>, we ensures that // expr is a compile-time constant. (Template arguments must be // determined at compile-time.) // // - The outter parentheses in CompileAssert<(bool(expr))> are necessary // to work around a bug in gcc 3.4.4 and 4.0.1. If we had written // // CompileAssert // // instead, these compilers will refuse to compile // // GTEST_COMPILE_ASSERT_(5 > 0, some_message); // // (They seem to think the ">" in "5 > 0" marks the end of the // template argument list.) // // - The array size is (bool(expr) ? 1 : -1), instead of simply // // ((expr) ? 1 : -1). // // This is to avoid running into a bug in MS VC 7.1, which // causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1. // StaticAssertTypeEqHelper is used by StaticAssertTypeEq defined in gtest.h. // // This template is declared, but intentionally undefined. template struct StaticAssertTypeEqHelper; template struct StaticAssertTypeEqHelper {}; #if GTEST_HAS_GLOBAL_STRING typedef ::string string; #else typedef ::std::string string; #endif // GTEST_HAS_GLOBAL_STRING #if GTEST_HAS_GLOBAL_WSTRING typedef ::wstring wstring; #elif GTEST_HAS_STD_WSTRING typedef ::std::wstring wstring; #endif // GTEST_HAS_GLOBAL_WSTRING // A helper for suppressing warnings on constant condition. It just // returns 'condition'. GTEST_API_ bool IsTrue(bool condition); // Defines scoped_ptr. // This implementation of scoped_ptr is PARTIAL - it only contains // enough stuff to satisfy Google Test's need. template class scoped_ptr { public: typedef T element_type; explicit scoped_ptr(T* p = NULL) : ptr_(p) {} ~scoped_ptr() { reset(); } T& operator*() const { return *ptr_; } T* operator->() const { return ptr_; } T* get() const { return ptr_; } T* release() { T* const ptr = ptr_; ptr_ = NULL; return ptr; } void reset(T* p = NULL) { if (p != ptr_) { if (IsTrue(sizeof(T) > 0)) { // Makes sure T is a complete type. delete ptr_; } ptr_ = p; } } private: T* ptr_; GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr); }; // Defines RE. // A simple C++ wrapper for . It uses the POSIX Extended // Regular Expression syntax. class GTEST_API_ RE { public: // A copy constructor is required by the Standard to initialize object // references from r-values. RE(const RE& other) { Init(other.pattern()); } // Constructs an RE from a string. RE(const ::std::string& regex) { Init(regex.c_str()); } // NOLINT #if GTEST_HAS_GLOBAL_STRING RE(const ::string& regex) { Init(regex.c_str()); } // NOLINT #endif // GTEST_HAS_GLOBAL_STRING RE(const char* regex) { Init(regex); } // NOLINT ~RE(); // Returns the string representation of the regex. const char* pattern() const { return pattern_; } // FullMatch(str, re) returns true iff regular expression re matches // the entire str. // PartialMatch(str, re) returns true iff regular expression re // matches a substring of str (including str itself). // // TODO(wan@google.com): make FullMatch() and PartialMatch() work // when str contains NUL characters. static bool FullMatch(const ::std::string& str, const RE& re) { return FullMatch(str.c_str(), re); } static bool PartialMatch(const ::std::string& str, const RE& re) { return PartialMatch(str.c_str(), re); } #if GTEST_HAS_GLOBAL_STRING static bool FullMatch(const ::string& str, const RE& re) { return FullMatch(str.c_str(), re); } static bool PartialMatch(const ::string& str, const RE& re) { return PartialMatch(str.c_str(), re); } #endif // GTEST_HAS_GLOBAL_STRING static bool FullMatch(const char* str, const RE& re); static bool PartialMatch(const char* str, const RE& re); private: void Init(const char* regex); // We use a const char* instead of an std::string, as Google Test used to be // used where std::string is not available. TODO(wan@google.com): change to // std::string. const char* pattern_; bool is_valid_; #if GTEST_USES_POSIX_RE regex_t full_regex_; // For FullMatch(). regex_t partial_regex_; // For PartialMatch(). #else // GTEST_USES_SIMPLE_RE const char* full_pattern_; // For FullMatch(); #endif GTEST_DISALLOW_ASSIGN_(RE); }; // Formats a source file path and a line number as they would appear // in an error message from the compiler used to compile this code. GTEST_API_ ::std::string FormatFileLocation(const char* file, int line); // Formats a file location for compiler-independent XML output. // Although this function is not platform dependent, we put it next to // FormatFileLocation in order to contrast the two functions. GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char* file, int line); // Defines logging utilities: // GTEST_LOG_(severity) - logs messages at the specified severity level. The // message itself is streamed into the macro. // LogToStderr() - directs all log messages to stderr. // FlushInfoLog() - flushes informational log messages. enum GTestLogSeverity { GTEST_INFO, GTEST_WARNING, GTEST_ERROR, GTEST_FATAL }; // Formats log entry severity, provides a stream object for streaming the // log message, and terminates the message with a newline when going out of // scope. class GTEST_API_ GTestLog { public: GTestLog(GTestLogSeverity severity, const char* file, int line); // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. ~GTestLog(); ::std::ostream& GetStream() { return ::std::cerr; } private: const GTestLogSeverity severity_; GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog); }; #define GTEST_LOG_(severity) \ ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ __FILE__, __LINE__).GetStream() inline void LogToStderr() {} inline void FlushInfoLog() { fflush(NULL); } // INTERNAL IMPLEMENTATION - DO NOT USE. // // GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition // is not satisfied. // Synopsys: // GTEST_CHECK_(boolean_condition); // or // GTEST_CHECK_(boolean_condition) << "Additional message"; // // This checks the condition and if the condition is not satisfied // it prints message about the condition violation, including the // condition itself, plus additional message streamed into it, if any, // and then it aborts the program. It aborts the program irrespective of // whether it is built in the debug mode or not. #define GTEST_CHECK_(condition) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::IsTrue(condition)) \ ; \ else \ GTEST_LOG_(FATAL) << "Condition " #condition " failed. " // An all-mode assert to verify that the given POSIX-style function // call returns 0 (indicating success). Known limitation: this // doesn't expand to a balanced 'if' statement, so enclose the macro // in {} if you need to use it as the only statement in an 'if' // branch. #define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ if (const int gtest_error = (posix_call)) \ GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ << gtest_error // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Use ImplicitCast_ as a safe version of static_cast for upcasting in // the type hierarchy (e.g. casting a Foo* to a SuperclassOfFoo* or a // const Foo*). When you use ImplicitCast_, the compiler checks that // the cast is safe. Such explicit ImplicitCast_s are necessary in // surprisingly many situations where C++ demands an exact type match // instead of an argument type convertable to a target type. // // The syntax for using ImplicitCast_ is the same as for static_cast: // // ImplicitCast_(expr) // // ImplicitCast_ would have been part of the C++ standard library, // but the proposal was submitted too late. It will probably make // its way into the language in the future. // // This relatively ugly name is intentional. It prevents clashes with // similar functions users may have (e.g., implicit_cast). The internal // namespace alone is not enough because the function can be found by ADL. template inline To ImplicitCast_(To x) { return x; } // When you upcast (that is, cast a pointer from type Foo to type // SuperclassOfFoo), it's fine to use ImplicitCast_<>, since upcasts // always succeed. When you downcast (that is, cast a pointer from // type Foo to type SubclassOfFoo), static_cast<> isn't safe, because // how do you know the pointer is really of type SubclassOfFoo? It // could be a bare Foo, or of type DifferentSubclassOfFoo. Thus, // when you downcast, you should use this macro. In debug mode, we // use dynamic_cast<> to double-check the downcast is legal (we die // if it's not). In normal mode, we do the efficient static_cast<> // instead. Thus, it's important to test in debug mode to make sure // the cast is legal! // This is the only place in the code we should use dynamic_cast<>. // In particular, you SHOULDN'T be using dynamic_cast<> in order to // do RTTI (eg code like this: // if (dynamic_cast(foo)) HandleASubclass1Object(foo); // if (dynamic_cast(foo)) HandleASubclass2Object(foo); // You should design the code some other way not to need this. // // This relatively ugly name is intentional. It prevents clashes with // similar functions users may have (e.g., down_cast). The internal // namespace alone is not enough because the function can be found by ADL. template // use like this: DownCast_(foo); inline To DownCast_(From* f) { // so we only accept pointers // Ensures that To is a sub-type of From *. This test is here only // for compile-time type checking, and has no overhead in an // optimized build at run-time, as it will be optimized away // completely. if (false) { const To to = NULL; ::testing::internal::ImplicitCast_(to); } #if GTEST_HAS_RTTI // RTTI: debug mode only! GTEST_CHECK_(f == NULL || dynamic_cast(f) != NULL); #endif return static_cast(f); } // Downcasts the pointer of type Base to Derived. // Derived must be a subclass of Base. The parameter MUST // point to a class of type Derived, not any subclass of it. // When RTTI is available, the function performs a runtime // check to enforce this. template Derived* CheckedDowncastToActualType(Base* base) { #if GTEST_HAS_RTTI GTEST_CHECK_(typeid(*base) == typeid(Derived)); return dynamic_cast(base); // NOLINT #else return static_cast(base); // Poor man's downcast. #endif } #if GTEST_HAS_STREAM_REDIRECTION // Defines the stderr capturer: // CaptureStdout - starts capturing stdout. // GetCapturedStdout - stops capturing stdout and returns the captured string. // CaptureStderr - starts capturing stderr. // GetCapturedStderr - stops capturing stderr and returns the captured string. // GTEST_API_ void CaptureStdout(); GTEST_API_ std::string GetCapturedStdout(); GTEST_API_ void CaptureStderr(); GTEST_API_ std::string GetCapturedStderr(); #endif // GTEST_HAS_STREAM_REDIRECTION #if GTEST_HAS_DEATH_TEST const ::std::vector& GetInjectableArgvs(); void SetInjectableArgvs(const ::std::vector* new_argvs); // A copy of all command line arguments. Set by InitGoogleTest(). extern ::std::vector g_argvs; #endif // GTEST_HAS_DEATH_TEST // Defines synchronization primitives. #if GTEST_HAS_PTHREAD // Sleeps for (roughly) n milli-seconds. This function is only for // testing Google Test's own constructs. Don't use it in user tests, // either directly or indirectly. inline void SleepMilliseconds(int n) { const timespec time = { 0, // 0 seconds. n * 1000L * 1000L, // And n ms. }; nanosleep(&time, NULL); } // Allows a controller thread to pause execution of newly created // threads until notified. Instances of this class must be created // and destroyed in the controller thread. // // This class is only for testing Google Test's own constructs. Do not // use it in user tests, either directly or indirectly. class Notification { public: Notification() : notified_(false) { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); } ~Notification() { pthread_mutex_destroy(&mutex_); } // Notifies all threads created with this notification to start. Must // be called from the controller thread. void Notify() { pthread_mutex_lock(&mutex_); notified_ = true; pthread_mutex_unlock(&mutex_); } // Blocks until the controller thread notifies. Must be called from a test // thread. void WaitForNotification() { for (;;) { pthread_mutex_lock(&mutex_); const bool notified = notified_; pthread_mutex_unlock(&mutex_); if (notified) break; SleepMilliseconds(10); } } private: pthread_mutex_t mutex_; bool notified_; GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification); }; // As a C-function, ThreadFuncWithCLinkage cannot be templated itself. // Consequently, it cannot select a correct instantiation of ThreadWithParam // in order to call its Run(). Introducing ThreadWithParamBase as a // non-templated base class for ThreadWithParam allows us to bypass this // problem. class ThreadWithParamBase { public: virtual ~ThreadWithParamBase() {} virtual void Run() = 0; }; // pthread_create() accepts a pointer to a function type with the C linkage. // According to the Standard (7.5/1), function types with different linkages // are different even if they are otherwise identical. Some compilers (for // example, SunStudio) treat them as different types. Since class methods // cannot be defined with C-linkage we need to define a free C-function to // pass into pthread_create(). extern "C" inline void* ThreadFuncWithCLinkage(void* thread) { static_cast(thread)->Run(); return NULL; } // Helper class for testing Google Test's multi-threading constructs. // To use it, write: // // void ThreadFunc(int param) { /* Do things with param */ } // Notification thread_can_start; // ... // // The thread_can_start parameter is optional; you can supply NULL. // ThreadWithParam thread(&ThreadFunc, 5, &thread_can_start); // thread_can_start.Notify(); // // These classes are only for testing Google Test's own constructs. Do // not use them in user tests, either directly or indirectly. template class ThreadWithParam : public ThreadWithParamBase { public: typedef void (*UserThreadFunc)(T); ThreadWithParam( UserThreadFunc func, T param, Notification* thread_can_start) : func_(func), param_(param), thread_can_start_(thread_can_start), finished_(false) { ThreadWithParamBase* const base = this; // The thread can be created only after all fields except thread_ // have been initialized. GTEST_CHECK_POSIX_SUCCESS_( pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base)); } ~ThreadWithParam() { Join(); } void Join() { if (!finished_) { GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0)); finished_ = true; } } virtual void Run() { if (thread_can_start_ != NULL) thread_can_start_->WaitForNotification(); func_(param_); } private: const UserThreadFunc func_; // User-supplied thread function. const T param_; // User-supplied parameter to the thread function. // When non-NULL, used to block execution until the controller thread // notifies. Notification* const thread_can_start_; bool finished_; // true iff we know that the thread function has finished. pthread_t thread_; // The native thread object. GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam); }; // MutexBase and Mutex implement mutex on pthreads-based platforms. They // are used in conjunction with class MutexLock: // // Mutex mutex; // ... // MutexLock lock(&mutex); // Acquires the mutex and releases it at the end // // of the current scope. // // MutexBase implements behavior for both statically and dynamically // allocated mutexes. Do not use MutexBase directly. Instead, write // the following to define a static mutex: // // GTEST_DEFINE_STATIC_MUTEX_(g_some_mutex); // // You can forward declare a static mutex like this: // // GTEST_DECLARE_STATIC_MUTEX_(g_some_mutex); // // To create a dynamic mutex, just define an object of type Mutex. class MutexBase { public: // Acquires this mutex. void Lock() { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_)); owner_ = pthread_self(); has_owner_ = true; } // Releases this mutex. void Unlock() { // Since the lock is being released the owner_ field should no longer be // considered valid. We don't protect writing to has_owner_ here, as it's // the caller's responsibility to ensure that the current thread holds the // mutex when this is called. has_owner_ = false; GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_)); } // Does nothing if the current thread holds the mutex. Otherwise, crashes // with high probability. void AssertHeld() const { GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self())) << "The current thread is not holding the mutex @" << this; } // A static mutex may be used before main() is entered. It may even // be used before the dynamic initialization stage. Therefore we // must be able to initialize a static mutex object at link time. // This means MutexBase has to be a POD and its member variables // have to be public. public: pthread_mutex_t mutex_; // The underlying pthread mutex. // has_owner_ indicates whether the owner_ field below contains a valid thread // ID and is therefore safe to inspect (e.g., to use in pthread_equal()). All // accesses to the owner_ field should be protected by a check of this field. // An alternative might be to memset() owner_ to all zeros, but there's no // guarantee that a zero'd pthread_t is necessarily invalid or even different // from pthread_self(). bool has_owner_; pthread_t owner_; // The thread holding the mutex. }; // Forward-declares a static mutex. # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ extern ::testing::internal::MutexBase mutex // Defines and statically (i.e. at link time) initializes a static mutex. // The initialization list here does not explicitly initialize each field, // instead relying on default initialization for the unspecified fields. In // particular, the owner_ field (a pthread_t) is not explicitly initialized. // This allows initialization to work whether pthread_t is a scalar or struct. // The flag -Wmissing-field-initializers must not be specified for this to work. # define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, false } // The Mutex class can only be used for mutexes created at runtime. It // shares its API with MutexBase otherwise. class Mutex : public MutexBase { public: Mutex() { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); has_owner_ = false; } ~Mutex() { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_)); } private: GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex); }; // We cannot name this class MutexLock as the ctor declaration would // conflict with a macro named MutexLock, which is defined on some // platforms. Hence the typedef trick below. class GTestMutexLock { public: explicit GTestMutexLock(MutexBase* mutex) : mutex_(mutex) { mutex_->Lock(); } ~GTestMutexLock() { mutex_->Unlock(); } private: MutexBase* const mutex_; GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock); }; typedef GTestMutexLock MutexLock; // Helpers for ThreadLocal. // pthread_key_create() requires DeleteThreadLocalValue() to have // C-linkage. Therefore it cannot be templatized to access // ThreadLocal. Hence the need for class // ThreadLocalValueHolderBase. class ThreadLocalValueHolderBase { public: virtual ~ThreadLocalValueHolderBase() {} }; // Called by pthread to delete thread-local data stored by // pthread_setspecific(). extern "C" inline void DeleteThreadLocalValue(void* value_holder) { delete static_cast(value_holder); } // Implements thread-local storage on pthreads-based systems. // // // Thread 1 // ThreadLocal tl(100); // 100 is the default value for each thread. // // // Thread 2 // tl.set(150); // Changes the value for thread 2 only. // EXPECT_EQ(150, tl.get()); // // // Thread 1 // EXPECT_EQ(100, tl.get()); // In thread 1, tl has the original value. // tl.set(200); // EXPECT_EQ(200, tl.get()); // // The template type argument T must have a public copy constructor. // In addition, the default ThreadLocal constructor requires T to have // a public default constructor. // // An object managed for a thread by a ThreadLocal instance is deleted // when the thread exits. Or, if the ThreadLocal instance dies in // that thread, when the ThreadLocal dies. It's the user's // responsibility to ensure that all other threads using a ThreadLocal // have exited when it dies, or the per-thread objects for those // threads will not be deleted. // // Google Test only uses global ThreadLocal objects. That means they // will die after main() has returned. Therefore, no per-thread // object managed by Google Test will be leaked as long as all threads // using Google Test have exited when main() returns. template class ThreadLocal { public: ThreadLocal() : key_(CreateKey()), default_() {} explicit ThreadLocal(const T& value) : key_(CreateKey()), default_(value) {} ~ThreadLocal() { // Destroys the managed object for the current thread, if any. DeleteThreadLocalValue(pthread_getspecific(key_)); // Releases resources associated with the key. This will *not* // delete managed objects for other threads. GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_)); } T* pointer() { return GetOrCreateValue(); } const T* pointer() const { return GetOrCreateValue(); } const T& get() const { return *pointer(); } void set(const T& value) { *pointer() = value; } private: // Holds a value of type T. class ValueHolder : public ThreadLocalValueHolderBase { public: explicit ValueHolder(const T& value) : value_(value) {} T* pointer() { return &value_; } private: T value_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder); }; static pthread_key_t CreateKey() { pthread_key_t key; // When a thread exits, DeleteThreadLocalValue() will be called on // the object managed for that thread. GTEST_CHECK_POSIX_SUCCESS_( pthread_key_create(&key, &DeleteThreadLocalValue)); return key; } T* GetOrCreateValue() const { ThreadLocalValueHolderBase* const holder = static_cast(pthread_getspecific(key_)); if (holder != NULL) { return CheckedDowncastToActualType(holder)->pointer(); } ValueHolder* const new_holder = new ValueHolder(default_); ThreadLocalValueHolderBase* const holder_base = new_holder; GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base)); return new_holder->pointer(); } // A key pthreads uses for looking up per-thread values. const pthread_key_t key_; const T default_; // The default value for each thread. GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal); }; # define GTEST_IS_THREADSAFE 1 #else // GTEST_HAS_PTHREAD // A dummy implementation of synchronization primitives (mutex, lock, // and thread-local variable). Necessary for compiling Google Test where // mutex is not supported - using Google Test in multiple threads is not // supported on such platforms. class Mutex { public: Mutex() {} void Lock() {} void Unlock() {} void AssertHeld() const {} }; # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ extern ::testing::internal::Mutex mutex # define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex class GTestMutexLock { public: explicit GTestMutexLock(Mutex*) {} // NOLINT }; typedef GTestMutexLock MutexLock; template class ThreadLocal { public: ThreadLocal() : value_() {} explicit ThreadLocal(const T& value) : value_(value) {} T* pointer() { return &value_; } const T* pointer() const { return &value_; } const T& get() const { return value_; } void set(const T& value) { value_ = value; } private: T value_; }; // The above synchronization primitives have dummy implementations. // Therefore Google Test is not thread-safe. # define GTEST_IS_THREADSAFE 0 #endif // GTEST_HAS_PTHREAD // Returns the number of threads running in the process, or 0 to indicate that // we cannot detect it. GTEST_API_ size_t GetThreadCount(); // Passing non-POD classes through ellipsis (...) crashes the ARM // compiler and generates a warning in Sun Studio. The Nokia Symbian // and the IBM XL C/C++ compiler try to instantiate a copy constructor // for objects passed through ellipsis (...), failing for uncopyable // objects. We define this to ensure that only POD is passed through // ellipsis on these systems. #if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC) // We lose support for NULL detection where the compiler doesn't like // passing non-POD classes through ellipsis (...). # define GTEST_ELLIPSIS_NEEDS_POD_ 1 #else # define GTEST_CAN_COMPARE_NULL 1 #endif // The Nokia Symbian and IBM XL C/C++ compilers cannot decide between // const T& and const T* in a function template. These compilers // _can_ decide between class template specializations for T and T*, // so a tr1::type_traits-like is_pointer works. #if defined(__SYMBIAN32__) || defined(__IBMCPP__) # define GTEST_NEEDS_IS_POINTER_ 1 #endif template struct bool_constant { typedef bool_constant type; static const bool value = bool_value; }; template const bool bool_constant::value; typedef bool_constant false_type; typedef bool_constant true_type; template struct is_pointer : public false_type {}; template struct is_pointer : public true_type {}; template struct IteratorTraits { typedef typename Iterator::value_type value_type; }; template struct IteratorTraits { typedef T value_type; }; template struct IteratorTraits { typedef T value_type; }; #if GTEST_OS_WINDOWS # define GTEST_PATH_SEP_ "\\" # define GTEST_HAS_ALT_PATH_SEP_ 1 // The biggest signed integer type the compiler supports. typedef __int64 BiggestInt; #else # define GTEST_PATH_SEP_ "/" # define GTEST_HAS_ALT_PATH_SEP_ 0 typedef long long BiggestInt; // NOLINT #endif // GTEST_OS_WINDOWS // Utilities for char. // isspace(int ch) and friends accept an unsigned char or EOF. char // may be signed, depending on the compiler (or compiler flags). // Therefore we need to cast a char to unsigned char before calling // isspace(), etc. inline bool IsAlpha(char ch) { return isalpha(static_cast(ch)) != 0; } inline bool IsAlNum(char ch) { return isalnum(static_cast(ch)) != 0; } inline bool IsDigit(char ch) { return isdigit(static_cast(ch)) != 0; } inline bool IsLower(char ch) { return islower(static_cast(ch)) != 0; } inline bool IsSpace(char ch) { return isspace(static_cast(ch)) != 0; } inline bool IsUpper(char ch) { return isupper(static_cast(ch)) != 0; } inline bool IsXDigit(char ch) { return isxdigit(static_cast(ch)) != 0; } inline bool IsXDigit(wchar_t ch) { const unsigned char low_byte = static_cast(ch); return ch == low_byte && isxdigit(low_byte) != 0; } inline char ToLower(char ch) { return static_cast(tolower(static_cast(ch))); } inline char ToUpper(char ch) { return static_cast(toupper(static_cast(ch))); } // The testing::internal::posix namespace holds wrappers for common // POSIX functions. These wrappers hide the differences between // Windows/MSVC and POSIX systems. Since some compilers define these // standard functions as macros, the wrapper cannot have the same name // as the wrapped function. namespace posix { // Functions with a different name on Windows. #if GTEST_OS_WINDOWS typedef struct _stat StatStruct; # ifdef __BORLANDC__ inline int IsATTY(int fd) { return isatty(fd); } inline int StrCaseCmp(const char* s1, const char* s2) { return stricmp(s1, s2); } inline char* StrDup(const char* src) { return strdup(src); } # else // !__BORLANDC__ # if GTEST_OS_WINDOWS_MOBILE inline int IsATTY(int /* fd */) { return 0; } # else inline int IsATTY(int fd) { return _isatty(fd); } # endif // GTEST_OS_WINDOWS_MOBILE inline int StrCaseCmp(const char* s1, const char* s2) { return _stricmp(s1, s2); } inline char* StrDup(const char* src) { return _strdup(src); } # endif // __BORLANDC__ # if GTEST_OS_WINDOWS_MOBILE inline int FileNo(FILE* file) { return reinterpret_cast(_fileno(file)); } // Stat(), RmDir(), and IsDir() are not needed on Windows CE at this // time and thus not defined there. # else inline int FileNo(FILE* file) { return _fileno(file); } inline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); } inline int RmDir(const char* dir) { return _rmdir(dir); } inline bool IsDir(const StatStruct& st) { return (_S_IFDIR & st.st_mode) != 0; } # endif // GTEST_OS_WINDOWS_MOBILE #else typedef struct stat StatStruct; inline int FileNo(FILE* file) { return fileno(file); } inline int IsATTY(int fd) { return isatty(fd); } inline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); } inline int StrCaseCmp(const char* s1, const char* s2) { return strcasecmp(s1, s2); } inline char* StrDup(const char* src) { return strdup(src); } inline int RmDir(const char* dir) { return rmdir(dir); } inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } #endif // GTEST_OS_WINDOWS // Functions deprecated by MSVC 8.0. #ifdef _MSC_VER // Temporarily disable warning 4996 (deprecated function). # pragma warning(push) # pragma warning(disable:4996) #endif inline const char* StrNCpy(char* dest, const char* src, size_t n) { return strncpy(dest, src, n); } // ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and // StrError() aren't needed on Windows CE at this time and thus not // defined there. #if !GTEST_OS_WINDOWS_MOBILE inline int ChDir(const char* dir) { return chdir(dir); } #endif inline FILE* FOpen(const char* path, const char* mode) { return fopen(path, mode); } #if !GTEST_OS_WINDOWS_MOBILE inline FILE *FReopen(const char* path, const char* mode, FILE* stream) { return freopen(path, mode, stream); } inline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); } #endif inline int FClose(FILE* fp) { return fclose(fp); } #if !GTEST_OS_WINDOWS_MOBILE inline int Read(int fd, void* buf, unsigned int count) { return static_cast(read(fd, buf, count)); } inline int Write(int fd, const void* buf, unsigned int count) { return static_cast(write(fd, buf, count)); } inline int Close(int fd) { return close(fd); } inline const char* StrError(int errnum) { return strerror(errnum); } #endif inline const char* GetEnv(const char* name) { #if GTEST_OS_WINDOWS_MOBILE // We are on Windows CE, which has no environment variables. return NULL; #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) // Environment variables which we programmatically clear will be set to the // empty string rather than unset (NULL). Handle that case. const char* const env = getenv(name); return (env != NULL && env[0] != '\0') ? env : NULL; #else return getenv(name); #endif } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif #if GTEST_OS_WINDOWS_MOBILE // Windows CE has no C library. The abort() function is used in // several places in Google Test. This implementation provides a reasonable // imitation of standard behaviour. void Abort(); #else inline void Abort() { abort(); } #endif // GTEST_OS_WINDOWS_MOBILE } // namespace posix // MSVC "deprecates" snprintf and issues warnings wherever it is used. In // order to avoid these warnings, we need to use _snprintf or _snprintf_s on // MSVC-based platforms. We map the GTEST_SNPRINTF_ macro to the appropriate // function in order to achieve that. We use macro definition here because // snprintf is a variadic function. #if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE // MSVC 2005 and above support variadic macros. # define GTEST_SNPRINTF_(buffer, size, format, ...) \ _snprintf_s(buffer, size, size, format, __VA_ARGS__) #elif defined(_MSC_VER) // Windows CE does not define _snprintf_s and MSVC prior to 2005 doesn't // complain about _snprintf. # define GTEST_SNPRINTF_ _snprintf #else # define GTEST_SNPRINTF_ snprintf #endif // The maximum number a BiggestInt can represent. This definition // works no matter BiggestInt is represented in one's complement or // two's complement. // // We cannot rely on numeric_limits in STL, as __int64 and long long // are not part of standard C++ and numeric_limits doesn't need to be // defined for them. const BiggestInt kMaxBiggestInt = ~(static_cast(1) << (8*sizeof(BiggestInt) - 1)); // This template class serves as a compile-time function from size to // type. It maps a size in bytes to a primitive type with that // size. e.g. // // TypeWithSize<4>::UInt // // is typedef-ed to be unsigned int (unsigned integer made up of 4 // bytes). // // Such functionality should belong to STL, but I cannot find it // there. // // Google Test uses this class in the implementation of floating-point // comparison. // // For now it only handles UInt (unsigned int) as that's all Google Test // needs. Other types can be easily added in the future if need // arises. template class TypeWithSize { public: // This prevents the user from using TypeWithSize with incorrect // values of N. typedef void UInt; }; // The specialization for size 4. template <> class TypeWithSize<4> { public: // unsigned int has size 4 in both gcc and MSVC. // // As base/basictypes.h doesn't compile on Windows, we cannot use // uint32, uint64, and etc here. typedef int Int; typedef unsigned int UInt; }; // The specialization for size 8. template <> class TypeWithSize<8> { public: #if GTEST_OS_WINDOWS typedef __int64 Int; typedef unsigned __int64 UInt; #else typedef long long Int; // NOLINT typedef unsigned long long UInt; // NOLINT #endif // GTEST_OS_WINDOWS }; // Integer types of known sizes. typedef TypeWithSize<4>::Int Int32; typedef TypeWithSize<4>::UInt UInt32; typedef TypeWithSize<8>::Int Int64; typedef TypeWithSize<8>::UInt UInt64; typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. // Utilities for command line flags and environment variables. // Macro for referencing flags. #define GTEST_FLAG(name) FLAGS_gtest_##name // Macros for declaring flags. #define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name) #define GTEST_DECLARE_int32_(name) \ GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name) #define GTEST_DECLARE_string_(name) \ GTEST_API_ extern ::std::string GTEST_FLAG(name) // Macros for defining flags. #define GTEST_DEFINE_bool_(name, default_val, doc) \ GTEST_API_ bool GTEST_FLAG(name) = (default_val) #define GTEST_DEFINE_int32_(name, default_val, doc) \ GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) #define GTEST_DEFINE_string_(name, default_val, doc) \ GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val) // Thread annotations #define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) #define GTEST_LOCK_EXCLUDED_(locks) // Parses 'str' for a 32-bit signed integer. If successful, writes the result // to *value and returns true; otherwise leaves *value unchanged and returns // false. // TODO(chandlerc): Find a better way to refactor flag and environment parsing // out of both gtest-port.cc and gtest.cc to avoid exporting this utility // function. bool ParseInt32(const Message& src_text, const char* str, Int32* value); // Parses a bool/Int32/string from the environment variable // corresponding to the given Google Test flag. bool BoolFromGTestEnv(const char* flag, bool default_val); GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val); const char* StringFromGTestEnv(const char* flag, const char* default_val); } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-string.h000066400000000000000000000154701377520261000246250ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) // // The Google C++ Testing Framework (Google Test) // // This header file declares the String class and functions used internally by // Google Test. They are subject to change without notice. They should not used // by code external to Google Test. // // This header file is #included by . // It should not be #included by other files. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ #ifdef __BORLANDC__ // string.h is not guaranteed to provide strcpy on C++ Builder. # include #endif #include #include #include "gtest/internal/gtest-port.h" namespace testing { namespace internal { // String - an abstract class holding static string utilities. class GTEST_API_ String { public: // Static utility methods // Clones a 0-terminated C string, allocating memory using new. The // caller is responsible for deleting the return value using // delete[]. Returns the cloned string, or NULL if the input is // NULL. // // This is different from strdup() in string.h, which allocates // memory using malloc(). static const char* CloneCString(const char* c_str); #if GTEST_OS_WINDOWS_MOBILE // Windows CE does not have the 'ANSI' versions of Win32 APIs. To be // able to pass strings to Win32 APIs on CE we need to convert them // to 'Unicode', UTF-16. // Creates a UTF-16 wide string from the given ANSI string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the wide string, or NULL if the // input is NULL. // // The wide string is created using the ANSI codepage (CP_ACP) to // match the behaviour of the ANSI versions of Win32 calls and the // C runtime. static LPCWSTR AnsiToUtf16(const char* c_str); // Creates an ANSI string from the given wide string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the ANSI string, or NULL if the // input is NULL. // // The returned string is created using the ANSI codepage (CP_ACP) to // match the behaviour of the ANSI versions of Win32 calls and the // C runtime. static const char* Utf16ToAnsi(LPCWSTR utf16_str); #endif // Compares two C strings. Returns true iff they have the same content. // // Unlike strcmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. static bool CStringEquals(const char* lhs, const char* rhs); // Converts a wide C string to a String using the UTF-8 encoding. // NULL will be converted to "(null)". If an error occurred during // the conversion, "(failed to convert from wide string)" is // returned. static std::string ShowWideCString(const wchar_t* wide_c_str); // Compares two wide C strings. Returns true iff they have the same // content. // // Unlike wcscmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); // Compares two C strings, ignoring case. Returns true iff they // have the same content. // // Unlike strcasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL C string, // including the empty string. static bool CaseInsensitiveCStringEquals(const char* lhs, const char* rhs); // Compares two wide C strings, ignoring case. Returns true iff they // have the same content. // // Unlike wcscasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL wide C string, // including the empty string. // NB: The implementations on different platforms slightly differ. // On windows, this method uses _wcsicmp which compares according to LC_CTYPE // environment variable. On GNU platform this method uses wcscasecmp // which compares according to LC_CTYPE category of the current locale. // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the // current locale. static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); // Returns true iff the given string ends with the given suffix, ignoring // case. Any string is considered to end with an empty suffix. static bool EndsWithCaseInsensitive( const std::string& str, const std::string& suffix); // Formats an int value as "%02d". static std::string FormatIntWidth2(int value); // "%02d" for width == 2 // Formats an int value as "%X". static std::string FormatHexInt(int value); // Formats a byte as "%02X". static std::string FormatByte(unsigned char value); private: String(); // Not meant to be instantiated. }; // class String // Gets the content of the stringstream's buffer as an std::string. Each '\0' // character in the buffer is replaced with "\\0". GTEST_API_ std::string StringStreamToString(::std::stringstream* stream); } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-tuple.h000066400000000000000000000670771377520261000244620ustar00rootroot00000000000000// This file was GENERATED by command: // pump.py gtest-tuple.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2009 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Implements a subset of TR1 tuple needed by Google Test and Google Mock. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ #include // For ::std::pair. // The compiler used in Symbian has a bug that prevents us from declaring the // tuple template as a friend (it complains that tuple is redefined). This // hack bypasses the bug by declaring the members that should otherwise be // private as public. // Sun Studio versions < 12 also have the above bug. #if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) # define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: #else # define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ template friend class tuple; \ private: #endif // GTEST_n_TUPLE_(T) is the type of an n-tuple. #define GTEST_0_TUPLE_(T) tuple<> #define GTEST_1_TUPLE_(T) tuple #define GTEST_2_TUPLE_(T) tuple #define GTEST_3_TUPLE_(T) tuple #define GTEST_4_TUPLE_(T) tuple #define GTEST_5_TUPLE_(T) tuple #define GTEST_6_TUPLE_(T) tuple #define GTEST_7_TUPLE_(T) tuple #define GTEST_8_TUPLE_(T) tuple #define GTEST_9_TUPLE_(T) tuple #define GTEST_10_TUPLE_(T) tuple // GTEST_n_TYPENAMES_(T) declares a list of n typenames. #define GTEST_0_TYPENAMES_(T) #define GTEST_1_TYPENAMES_(T) typename T##0 #define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1 #define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2 #define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3 #define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4 #define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5 #define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6 #define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6, typename T##7 #define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6, \ typename T##7, typename T##8 #define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6, \ typename T##7, typename T##8, typename T##9 // In theory, defining stuff in the ::std namespace is undefined // behavior. We can do this as we are playing the role of a standard // library vendor. namespace std { namespace tr1 { template class tuple; // Anything in namespace gtest_internal is Google Test's INTERNAL // IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. namespace gtest_internal { // ByRef::type is T if T is a reference; otherwise it's const T&. template struct ByRef { typedef const T& type; }; // NOLINT template struct ByRef { typedef T& type; }; // NOLINT // A handy wrapper for ByRef. #define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef::type // AddRef::type is T if T is a reference; otherwise it's T&. This // is the same as tr1::add_reference::type. template struct AddRef { typedef T& type; }; // NOLINT template struct AddRef { typedef T& type; }; // NOLINT // A handy wrapper for AddRef. #define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef::type // A helper for implementing get(). template class Get; // A helper for implementing tuple_element. kIndexValid is true // iff k < the number of fields in tuple type T. template struct TupleElement; template struct TupleElement { typedef T0 type; }; template struct TupleElement { typedef T1 type; }; template struct TupleElement { typedef T2 type; }; template struct TupleElement { typedef T3 type; }; template struct TupleElement { typedef T4 type; }; template struct TupleElement { typedef T5 type; }; template struct TupleElement { typedef T6 type; }; template struct TupleElement { typedef T7 type; }; template struct TupleElement { typedef T8 type; }; template struct TupleElement { typedef T9 type; }; } // namespace gtest_internal template <> class tuple<> { public: tuple() {} tuple(const tuple& /* t */) {} tuple& operator=(const tuple& /* t */) { return *this; } }; template class GTEST_1_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_() {} explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {} tuple(const tuple& t) : f0_(t.f0_) {} template tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_1_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) { f0_ = t.f0_; return *this; } T0 f0_; }; template class GTEST_2_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0), f1_(f1) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {} template tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {} template tuple(const ::std::pair& p) : f0_(p.first), f1_(p.second) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_2_TUPLE_(U)& t) { return CopyFrom(t); } template tuple& operator=(const ::std::pair& p) { f0_ = p.first; f1_ = p.second; return *this; } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; return *this; } T0 f0_; T1 f1_; }; template class GTEST_3_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} template tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_3_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; return *this; } T0 f0_; T1 f1_; T2 f2_; }; template class GTEST_4_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2), f3_(f3) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} template tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_4_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; }; template class GTEST_5_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_) {} template tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_5_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; }; template class GTEST_6_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} template tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_6_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; }; template class GTEST_7_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} template tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_7_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; }; template class GTEST_8_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} template tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_8_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; f7_ = t.f7_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; T7 f7_; }; template class GTEST_9_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} template tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_9_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; f7_ = t.f7_; f8_ = t.f8_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; T7 f7_; T8 f8_; }; template class tuple { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(), f9_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} template tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_10_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; f7_ = t.f7_; f8_ = t.f8_; f9_ = t.f9_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; T7 f7_; T8 f8_; T9 f9_; }; // 6.1.3.2 Tuple creation functions. // Known limitations: we don't support passing an // std::tr1::reference_wrapper to make_tuple(). And we don't // implement tie(). inline tuple<> make_tuple() { return tuple<>(); } template inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) { return GTEST_1_TUPLE_(T)(f0); } template inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) { return GTEST_2_TUPLE_(T)(f0, f1); } template inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) { return GTEST_3_TUPLE_(T)(f0, f1, f2); } template inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3) { return GTEST_4_TUPLE_(T)(f0, f1, f2, f3); } template inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4) { return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4); } template inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5) { return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5); } template inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6) { return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6); } template inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) { return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7); } template inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, const T8& f8) { return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8); } template inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, const T8& f8, const T9& f9) { return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9); } // 6.1.3.3 Tuple helper classes. template struct tuple_size; template struct tuple_size { static const int value = 0; }; template struct tuple_size { static const int value = 1; }; template struct tuple_size { static const int value = 2; }; template struct tuple_size { static const int value = 3; }; template struct tuple_size { static const int value = 4; }; template struct tuple_size { static const int value = 5; }; template struct tuple_size { static const int value = 6; }; template struct tuple_size { static const int value = 7; }; template struct tuple_size { static const int value = 8; }; template struct tuple_size { static const int value = 9; }; template struct tuple_size { static const int value = 10; }; template struct tuple_element { typedef typename gtest_internal::TupleElement< k < (tuple_size::value), k, Tuple>::type type; }; #define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element::type // 6.1.3.4 Element access. namespace gtest_internal { template <> class Get<0> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) Field(Tuple& t) { return t.f0_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) ConstField(const Tuple& t) { return t.f0_; } }; template <> class Get<1> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) Field(Tuple& t) { return t.f1_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) ConstField(const Tuple& t) { return t.f1_; } }; template <> class Get<2> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) Field(Tuple& t) { return t.f2_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) ConstField(const Tuple& t) { return t.f2_; } }; template <> class Get<3> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) Field(Tuple& t) { return t.f3_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) ConstField(const Tuple& t) { return t.f3_; } }; template <> class Get<4> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) Field(Tuple& t) { return t.f4_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) ConstField(const Tuple& t) { return t.f4_; } }; template <> class Get<5> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) Field(Tuple& t) { return t.f5_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) ConstField(const Tuple& t) { return t.f5_; } }; template <> class Get<6> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) Field(Tuple& t) { return t.f6_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) ConstField(const Tuple& t) { return t.f6_; } }; template <> class Get<7> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) Field(Tuple& t) { return t.f7_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) ConstField(const Tuple& t) { return t.f7_; } }; template <> class Get<8> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) Field(Tuple& t) { return t.f8_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) ConstField(const Tuple& t) { return t.f8_; } }; template <> class Get<9> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) Field(Tuple& t) { return t.f9_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) ConstField(const Tuple& t) { return t.f9_; } }; } // namespace gtest_internal template GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) get(GTEST_10_TUPLE_(T)& t) { return gtest_internal::Get::Field(t); } template GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) get(const GTEST_10_TUPLE_(T)& t) { return gtest_internal::Get::ConstField(t); } // 6.1.3.5 Relational operators // We only implement == and !=, as we don't have a need for the rest yet. namespace gtest_internal { // SameSizeTuplePrefixComparator::Eq(t1, t2) returns true if the // first k fields of t1 equals the first k fields of t2. // SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if // k1 != k2. template struct SameSizeTuplePrefixComparator; template <> struct SameSizeTuplePrefixComparator<0, 0> { template static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { return true; } }; template struct SameSizeTuplePrefixComparator { template static bool Eq(const Tuple1& t1, const Tuple2& t2) { return SameSizeTuplePrefixComparator::Eq(t1, t2) && ::std::tr1::get(t1) == ::std::tr1::get(t2); } }; } // namespace gtest_internal template inline bool operator==(const GTEST_10_TUPLE_(T)& t, const GTEST_10_TUPLE_(U)& u) { return gtest_internal::SameSizeTuplePrefixComparator< tuple_size::value, tuple_size::value>::Eq(t, u); } template inline bool operator!=(const GTEST_10_TUPLE_(T)& t, const GTEST_10_TUPLE_(U)& u) { return !(t == u); } // 6.1.4 Pairs. // Unimplemented. } // namespace tr1 } // namespace std #undef GTEST_0_TUPLE_ #undef GTEST_1_TUPLE_ #undef GTEST_2_TUPLE_ #undef GTEST_3_TUPLE_ #undef GTEST_4_TUPLE_ #undef GTEST_5_TUPLE_ #undef GTEST_6_TUPLE_ #undef GTEST_7_TUPLE_ #undef GTEST_8_TUPLE_ #undef GTEST_9_TUPLE_ #undef GTEST_10_TUPLE_ #undef GTEST_0_TYPENAMES_ #undef GTEST_1_TYPENAMES_ #undef GTEST_2_TYPENAMES_ #undef GTEST_3_TYPENAMES_ #undef GTEST_4_TYPENAMES_ #undef GTEST_5_TYPENAMES_ #undef GTEST_6_TYPENAMES_ #undef GTEST_7_TYPENAMES_ #undef GTEST_8_TYPENAMES_ #undef GTEST_9_TYPENAMES_ #undef GTEST_10_TYPENAMES_ #undef GTEST_DECLARE_TUPLE_AS_FRIEND_ #undef GTEST_BY_REF_ #undef GTEST_ADD_REF_ #undef GTEST_TUPLE_ELEMENT_ #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump000066400000000000000000000220121377520261000254160ustar00rootroot00000000000000$$ -*- mode: c++; -*- $var n = 10 $$ Maximum number of tuple fields we want to support. $$ This meta comment fixes auto-indentation in Emacs. }} // Copyright 2009 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Implements a subset of TR1 tuple needed by Google Test and Google Mock. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ #include // For ::std::pair. // The compiler used in Symbian has a bug that prevents us from declaring the // tuple template as a friend (it complains that tuple is redefined). This // hack bypasses the bug by declaring the members that should otherwise be // private as public. // Sun Studio versions < 12 also have the above bug. #if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) # define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: #else # define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ template friend class tuple; \ private: #endif $range i 0..n-1 $range j 0..n $range k 1..n // GTEST_n_TUPLE_(T) is the type of an n-tuple. #define GTEST_0_TUPLE_(T) tuple<> $for k [[ $range m 0..k-1 $range m2 k..n-1 #define GTEST_$(k)_TUPLE_(T) tuple<$for m, [[T##$m]]$for m2 [[, void]]> ]] // GTEST_n_TYPENAMES_(T) declares a list of n typenames. $for j [[ $range m 0..j-1 #define GTEST_$(j)_TYPENAMES_(T) $for m, [[typename T##$m]] ]] // In theory, defining stuff in the ::std namespace is undefined // behavior. We can do this as we are playing the role of a standard // library vendor. namespace std { namespace tr1 { template <$for i, [[typename T$i = void]]> class tuple; // Anything in namespace gtest_internal is Google Test's INTERNAL // IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. namespace gtest_internal { // ByRef::type is T if T is a reference; otherwise it's const T&. template struct ByRef { typedef const T& type; }; // NOLINT template struct ByRef { typedef T& type; }; // NOLINT // A handy wrapper for ByRef. #define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef::type // AddRef::type is T if T is a reference; otherwise it's T&. This // is the same as tr1::add_reference::type. template struct AddRef { typedef T& type; }; // NOLINT template struct AddRef { typedef T& type; }; // NOLINT // A handy wrapper for AddRef. #define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef::type // A helper for implementing get(). template class Get; // A helper for implementing tuple_element. kIndexValid is true // iff k < the number of fields in tuple type T. template struct TupleElement; $for i [[ template struct TupleElement { typedef T$i type; }; ]] } // namespace gtest_internal template <> class tuple<> { public: tuple() {} tuple(const tuple& /* t */) {} tuple& operator=(const tuple& /* t */) { return *this; } }; $for k [[ $range m 0..k-1 template class $if k < n [[GTEST_$(k)_TUPLE_(T)]] $else [[tuple]] { public: template friend class gtest_internal::Get; tuple() : $for m, [[f$(m)_()]] {} explicit tuple($for m, [[GTEST_BY_REF_(T$m) f$m]]) : [[]] $for m, [[f$(m)_(f$m)]] {} tuple(const tuple& t) : $for m, [[f$(m)_(t.f$(m)_)]] {} template tuple(const GTEST_$(k)_TUPLE_(U)& t) : $for m, [[f$(m)_(t.f$(m)_)]] {} $if k == 2 [[ template tuple(const ::std::pair& p) : f0_(p.first), f1_(p.second) {} ]] tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_$(k)_TUPLE_(U)& t) { return CopyFrom(t); } $if k == 2 [[ template tuple& operator=(const ::std::pair& p) { f0_ = p.first; f1_ = p.second; return *this; } ]] GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_$(k)_TUPLE_(U)& t) { $for m [[ f$(m)_ = t.f$(m)_; ]] return *this; } $for m [[ T$m f$(m)_; ]] }; ]] // 6.1.3.2 Tuple creation functions. // Known limitations: we don't support passing an // std::tr1::reference_wrapper to make_tuple(). And we don't // implement tie(). inline tuple<> make_tuple() { return tuple<>(); } $for k [[ $range m 0..k-1 template inline GTEST_$(k)_TUPLE_(T) make_tuple($for m, [[const T$m& f$m]]) { return GTEST_$(k)_TUPLE_(T)($for m, [[f$m]]); } ]] // 6.1.3.3 Tuple helper classes. template struct tuple_size; $for j [[ template struct tuple_size { static const int value = $j; }; ]] template struct tuple_element { typedef typename gtest_internal::TupleElement< k < (tuple_size::value), k, Tuple>::type type; }; #define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element::type // 6.1.3.4 Element access. namespace gtest_internal { $for i [[ template <> class Get<$i> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple)) Field(Tuple& t) { return t.f$(i)_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple)) ConstField(const Tuple& t) { return t.f$(i)_; } }; ]] } // namespace gtest_internal template GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_$(n)_TUPLE_(T))) get(GTEST_$(n)_TUPLE_(T)& t) { return gtest_internal::Get::Field(t); } template GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_$(n)_TUPLE_(T))) get(const GTEST_$(n)_TUPLE_(T)& t) { return gtest_internal::Get::ConstField(t); } // 6.1.3.5 Relational operators // We only implement == and !=, as we don't have a need for the rest yet. namespace gtest_internal { // SameSizeTuplePrefixComparator::Eq(t1, t2) returns true if the // first k fields of t1 equals the first k fields of t2. // SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if // k1 != k2. template struct SameSizeTuplePrefixComparator; template <> struct SameSizeTuplePrefixComparator<0, 0> { template static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { return true; } }; template struct SameSizeTuplePrefixComparator { template static bool Eq(const Tuple1& t1, const Tuple2& t2) { return SameSizeTuplePrefixComparator::Eq(t1, t2) && ::std::tr1::get(t1) == ::std::tr1::get(t2); } }; } // namespace gtest_internal template inline bool operator==(const GTEST_$(n)_TUPLE_(T)& t, const GTEST_$(n)_TUPLE_(U)& u) { return gtest_internal::SameSizeTuplePrefixComparator< tuple_size::value, tuple_size::value>::Eq(t, u); } template inline bool operator!=(const GTEST_$(n)_TUPLE_(T)& t, const GTEST_$(n)_TUPLE_(U)& u) { return !(t == u); } // 6.1.4 Pairs. // Unimplemented. } // namespace tr1 } // namespace std $for j [[ #undef GTEST_$(j)_TUPLE_ ]] $for j [[ #undef GTEST_$(j)_TYPENAMES_ ]] #undef GTEST_DECLARE_TUPLE_AS_FRIEND_ #undef GTEST_BY_REF_ #undef GTEST_ADD_REF_ #undef GTEST_TUPLE_ELEMENT_ #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-type-util.h000066400000000000000000005525021377520261000252550ustar00rootroot00000000000000// This file was GENERATED by command: // pump.py gtest-type-util.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Type utilities needed for implementing typed and type-parameterized // tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // // Currently we support at most 50 types in a list, and at most 50 // type-parameterized tests in one type-parameterized test case. // Please contact googletestframework@googlegroups.com if you need // more. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ #include "gtest/internal/gtest-port.h" // #ifdef __GNUC__ is too general here. It is possible to use gcc without using // libstdc++ (which is where cxxabi.h comes from). # if GTEST_HAS_CXXABI_H_ # include # elif defined(__HP_aCC) # include # endif // GTEST_HASH_CXXABI_H_ namespace testing { namespace internal { // GetTypeName() returns a human-readable name of type T. // NB: This function is also used in Google Mock, so don't move it inside of // the typed-test-only section below. template std::string GetTypeName() { # if GTEST_HAS_RTTI const char* const name = typeid(T).name(); # if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC) int status = 0; // gcc's implementation of typeid(T).name() mangles the type name, // so we have to demangle it. # if GTEST_HAS_CXXABI_H_ using abi::__cxa_demangle; # endif // GTEST_HAS_CXXABI_H_ char* const readable_name = __cxa_demangle(name, 0, 0, &status); const std::string name_str(status == 0 ? readable_name : name); free(readable_name); return name_str; # else return name; # endif // GTEST_HAS_CXXABI_H_ || __HP_aCC # else return ""; # endif // GTEST_HAS_RTTI } #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P // AssertyTypeEq::type is defined iff T1 and T2 are the same // type. This can be used as a compile-time assertion to ensure that // two types are equal. template struct AssertTypeEq; template struct AssertTypeEq { typedef bool type; }; // A unique type used as the default value for the arguments of class // template Types. This allows us to simulate variadic templates // (e.g. Types, Type, and etc), which C++ doesn't // support directly. struct None {}; // The following family of struct and struct templates are used to // represent type lists. In particular, TypesN // represents a type list with N types (T1, T2, ..., and TN) in it. // Except for Types0, every struct in the family has two member types: // Head for the first type in the list, and Tail for the rest of the // list. // The empty type list. struct Types0 {}; // Type lists of length 1, 2, 3, and so on. template struct Types1 { typedef T1 Head; typedef Types0 Tail; }; template struct Types2 { typedef T1 Head; typedef Types1 Tail; }; template struct Types3 { typedef T1 Head; typedef Types2 Tail; }; template struct Types4 { typedef T1 Head; typedef Types3 Tail; }; template struct Types5 { typedef T1 Head; typedef Types4 Tail; }; template struct Types6 { typedef T1 Head; typedef Types5 Tail; }; template struct Types7 { typedef T1 Head; typedef Types6 Tail; }; template struct Types8 { typedef T1 Head; typedef Types7 Tail; }; template struct Types9 { typedef T1 Head; typedef Types8 Tail; }; template struct Types10 { typedef T1 Head; typedef Types9 Tail; }; template struct Types11 { typedef T1 Head; typedef Types10 Tail; }; template struct Types12 { typedef T1 Head; typedef Types11 Tail; }; template struct Types13 { typedef T1 Head; typedef Types12 Tail; }; template struct Types14 { typedef T1 Head; typedef Types13 Tail; }; template struct Types15 { typedef T1 Head; typedef Types14 Tail; }; template struct Types16 { typedef T1 Head; typedef Types15 Tail; }; template struct Types17 { typedef T1 Head; typedef Types16 Tail; }; template struct Types18 { typedef T1 Head; typedef Types17 Tail; }; template struct Types19 { typedef T1 Head; typedef Types18 Tail; }; template struct Types20 { typedef T1 Head; typedef Types19 Tail; }; template struct Types21 { typedef T1 Head; typedef Types20 Tail; }; template struct Types22 { typedef T1 Head; typedef Types21 Tail; }; template struct Types23 { typedef T1 Head; typedef Types22 Tail; }; template struct Types24 { typedef T1 Head; typedef Types23 Tail; }; template struct Types25 { typedef T1 Head; typedef Types24 Tail; }; template struct Types26 { typedef T1 Head; typedef Types25 Tail; }; template struct Types27 { typedef T1 Head; typedef Types26 Tail; }; template struct Types28 { typedef T1 Head; typedef Types27 Tail; }; template struct Types29 { typedef T1 Head; typedef Types28 Tail; }; template struct Types30 { typedef T1 Head; typedef Types29 Tail; }; template struct Types31 { typedef T1 Head; typedef Types30 Tail; }; template struct Types32 { typedef T1 Head; typedef Types31 Tail; }; template struct Types33 { typedef T1 Head; typedef Types32 Tail; }; template struct Types34 { typedef T1 Head; typedef Types33 Tail; }; template struct Types35 { typedef T1 Head; typedef Types34 Tail; }; template struct Types36 { typedef T1 Head; typedef Types35 Tail; }; template struct Types37 { typedef T1 Head; typedef Types36 Tail; }; template struct Types38 { typedef T1 Head; typedef Types37 Tail; }; template struct Types39 { typedef T1 Head; typedef Types38 Tail; }; template struct Types40 { typedef T1 Head; typedef Types39 Tail; }; template struct Types41 { typedef T1 Head; typedef Types40 Tail; }; template struct Types42 { typedef T1 Head; typedef Types41 Tail; }; template struct Types43 { typedef T1 Head; typedef Types42 Tail; }; template struct Types44 { typedef T1 Head; typedef Types43 Tail; }; template struct Types45 { typedef T1 Head; typedef Types44 Tail; }; template struct Types46 { typedef T1 Head; typedef Types45 Tail; }; template struct Types47 { typedef T1 Head; typedef Types46 Tail; }; template struct Types48 { typedef T1 Head; typedef Types47 Tail; }; template struct Types49 { typedef T1 Head; typedef Types48 Tail; }; template struct Types50 { typedef T1 Head; typedef Types49 Tail; }; } // namespace internal // We don't want to require the users to write TypesN<...> directly, // as that would require them to count the length. Types<...> is much // easier to write, but generates horrible messages when there is a // compiler error, as gcc insists on printing out each template // argument, even if it has the default value (this means Types // will appear as Types in the compiler // errors). // // Our solution is to combine the best part of the two approaches: a // user would write Types, and Google Test will translate // that to TypesN internally to make error messages // readable. The translation is done by the 'type' member of the // Types template. template struct Types { typedef internal::Types50 type; }; template <> struct Types { typedef internal::Types0 type; }; template struct Types { typedef internal::Types1 type; }; template struct Types { typedef internal::Types2 type; }; template struct Types { typedef internal::Types3 type; }; template struct Types { typedef internal::Types4 type; }; template struct Types { typedef internal::Types5 type; }; template struct Types { typedef internal::Types6 type; }; template struct Types { typedef internal::Types7 type; }; template struct Types { typedef internal::Types8 type; }; template struct Types { typedef internal::Types9 type; }; template struct Types { typedef internal::Types10 type; }; template struct Types { typedef internal::Types11 type; }; template struct Types { typedef internal::Types12 type; }; template struct Types { typedef internal::Types13 type; }; template struct Types { typedef internal::Types14 type; }; template struct Types { typedef internal::Types15 type; }; template struct Types { typedef internal::Types16 type; }; template struct Types { typedef internal::Types17 type; }; template struct Types { typedef internal::Types18 type; }; template struct Types { typedef internal::Types19 type; }; template struct Types { typedef internal::Types20 type; }; template struct Types { typedef internal::Types21 type; }; template struct Types { typedef internal::Types22 type; }; template struct Types { typedef internal::Types23 type; }; template struct Types { typedef internal::Types24 type; }; template struct Types { typedef internal::Types25 type; }; template struct Types { typedef internal::Types26 type; }; template struct Types { typedef internal::Types27 type; }; template struct Types { typedef internal::Types28 type; }; template struct Types { typedef internal::Types29 type; }; template struct Types { typedef internal::Types30 type; }; template struct Types { typedef internal::Types31 type; }; template struct Types { typedef internal::Types32 type; }; template struct Types { typedef internal::Types33 type; }; template struct Types { typedef internal::Types34 type; }; template struct Types { typedef internal::Types35 type; }; template struct Types { typedef internal::Types36 type; }; template struct Types { typedef internal::Types37 type; }; template struct Types { typedef internal::Types38 type; }; template struct Types { typedef internal::Types39 type; }; template struct Types { typedef internal::Types40 type; }; template struct Types { typedef internal::Types41 type; }; template struct Types { typedef internal::Types42 type; }; template struct Types { typedef internal::Types43 type; }; template struct Types { typedef internal::Types44 type; }; template struct Types { typedef internal::Types45 type; }; template struct Types { typedef internal::Types46 type; }; template struct Types { typedef internal::Types47 type; }; template struct Types { typedef internal::Types48 type; }; template struct Types { typedef internal::Types49 type; }; namespace internal { # define GTEST_TEMPLATE_ template class // The template "selector" struct TemplateSel is used to // represent Tmpl, which must be a class template with one type // parameter, as a type. TemplateSel::Bind::type is defined // as the type Tmpl. This allows us to actually instantiate the // template "selected" by TemplateSel. // // This trick is necessary for simulating typedef for class templates, // which C++ doesn't support directly. template struct TemplateSel { template struct Bind { typedef Tmpl type; }; }; # define GTEST_BIND_(TmplSel, T) \ TmplSel::template Bind::type // A unique struct template used as the default value for the // arguments of class template Templates. This allows us to simulate // variadic templates (e.g. Templates, Templates, // and etc), which C++ doesn't support directly. template struct NoneT {}; // The following family of struct and struct templates are used to // represent template lists. In particular, TemplatesN represents a list of N templates (T1, T2, ..., and TN). Except // for Templates0, every struct in the family has two member types: // Head for the selector of the first template in the list, and Tail // for the rest of the list. // The empty template list. struct Templates0 {}; // Template lists of length 1, 2, 3, and so on. template struct Templates1 { typedef TemplateSel Head; typedef Templates0 Tail; }; template struct Templates2 { typedef TemplateSel Head; typedef Templates1 Tail; }; template struct Templates3 { typedef TemplateSel Head; typedef Templates2 Tail; }; template struct Templates4 { typedef TemplateSel Head; typedef Templates3 Tail; }; template struct Templates5 { typedef TemplateSel Head; typedef Templates4 Tail; }; template struct Templates6 { typedef TemplateSel Head; typedef Templates5 Tail; }; template struct Templates7 { typedef TemplateSel Head; typedef Templates6 Tail; }; template struct Templates8 { typedef TemplateSel Head; typedef Templates7 Tail; }; template struct Templates9 { typedef TemplateSel Head; typedef Templates8 Tail; }; template struct Templates10 { typedef TemplateSel Head; typedef Templates9 Tail; }; template struct Templates11 { typedef TemplateSel Head; typedef Templates10 Tail; }; template struct Templates12 { typedef TemplateSel Head; typedef Templates11 Tail; }; template struct Templates13 { typedef TemplateSel Head; typedef Templates12 Tail; }; template struct Templates14 { typedef TemplateSel Head; typedef Templates13 Tail; }; template struct Templates15 { typedef TemplateSel Head; typedef Templates14 Tail; }; template struct Templates16 { typedef TemplateSel Head; typedef Templates15 Tail; }; template struct Templates17 { typedef TemplateSel Head; typedef Templates16 Tail; }; template struct Templates18 { typedef TemplateSel Head; typedef Templates17 Tail; }; template struct Templates19 { typedef TemplateSel Head; typedef Templates18 Tail; }; template struct Templates20 { typedef TemplateSel Head; typedef Templates19 Tail; }; template struct Templates21 { typedef TemplateSel Head; typedef Templates20 Tail; }; template struct Templates22 { typedef TemplateSel Head; typedef Templates21 Tail; }; template struct Templates23 { typedef TemplateSel Head; typedef Templates22 Tail; }; template struct Templates24 { typedef TemplateSel Head; typedef Templates23 Tail; }; template struct Templates25 { typedef TemplateSel Head; typedef Templates24 Tail; }; template struct Templates26 { typedef TemplateSel Head; typedef Templates25 Tail; }; template struct Templates27 { typedef TemplateSel Head; typedef Templates26 Tail; }; template struct Templates28 { typedef TemplateSel Head; typedef Templates27 Tail; }; template struct Templates29 { typedef TemplateSel Head; typedef Templates28 Tail; }; template struct Templates30 { typedef TemplateSel Head; typedef Templates29 Tail; }; template struct Templates31 { typedef TemplateSel Head; typedef Templates30 Tail; }; template struct Templates32 { typedef TemplateSel Head; typedef Templates31 Tail; }; template struct Templates33 { typedef TemplateSel Head; typedef Templates32 Tail; }; template struct Templates34 { typedef TemplateSel Head; typedef Templates33 Tail; }; template struct Templates35 { typedef TemplateSel Head; typedef Templates34 Tail; }; template struct Templates36 { typedef TemplateSel Head; typedef Templates35 Tail; }; template struct Templates37 { typedef TemplateSel Head; typedef Templates36 Tail; }; template struct Templates38 { typedef TemplateSel Head; typedef Templates37 Tail; }; template struct Templates39 { typedef TemplateSel Head; typedef Templates38 Tail; }; template struct Templates40 { typedef TemplateSel Head; typedef Templates39 Tail; }; template struct Templates41 { typedef TemplateSel Head; typedef Templates40 Tail; }; template struct Templates42 { typedef TemplateSel Head; typedef Templates41 Tail; }; template struct Templates43 { typedef TemplateSel Head; typedef Templates42 Tail; }; template struct Templates44 { typedef TemplateSel Head; typedef Templates43 Tail; }; template struct Templates45 { typedef TemplateSel Head; typedef Templates44 Tail; }; template struct Templates46 { typedef TemplateSel Head; typedef Templates45 Tail; }; template struct Templates47 { typedef TemplateSel Head; typedef Templates46 Tail; }; template struct Templates48 { typedef TemplateSel Head; typedef Templates47 Tail; }; template struct Templates49 { typedef TemplateSel Head; typedef Templates48 Tail; }; template struct Templates50 { typedef TemplateSel Head; typedef Templates49 Tail; }; // We don't want to require the users to write TemplatesN<...> directly, // as that would require them to count the length. Templates<...> is much // easier to write, but generates horrible messages when there is a // compiler error, as gcc insists on printing out each template // argument, even if it has the default value (this means Templates // will appear as Templates in the compiler // errors). // // Our solution is to combine the best part of the two approaches: a // user would write Templates, and Google Test will translate // that to TemplatesN internally to make error messages // readable. The translation is done by the 'type' member of the // Templates template. template struct Templates { typedef Templates50 type; }; template <> struct Templates { typedef Templates0 type; }; template struct Templates { typedef Templates1 type; }; template struct Templates { typedef Templates2 type; }; template struct Templates { typedef Templates3 type; }; template struct Templates { typedef Templates4 type; }; template struct Templates { typedef Templates5 type; }; template struct Templates { typedef Templates6 type; }; template struct Templates { typedef Templates7 type; }; template struct Templates { typedef Templates8 type; }; template struct Templates { typedef Templates9 type; }; template struct Templates { typedef Templates10 type; }; template struct Templates { typedef Templates11 type; }; template struct Templates { typedef Templates12 type; }; template struct Templates { typedef Templates13 type; }; template struct Templates { typedef Templates14 type; }; template struct Templates { typedef Templates15 type; }; template struct Templates { typedef Templates16 type; }; template struct Templates { typedef Templates17 type; }; template struct Templates { typedef Templates18 type; }; template struct Templates { typedef Templates19 type; }; template struct Templates { typedef Templates20 type; }; template struct Templates { typedef Templates21 type; }; template struct Templates { typedef Templates22 type; }; template struct Templates { typedef Templates23 type; }; template struct Templates { typedef Templates24 type; }; template struct Templates { typedef Templates25 type; }; template struct Templates { typedef Templates26 type; }; template struct Templates { typedef Templates27 type; }; template struct Templates { typedef Templates28 type; }; template struct Templates { typedef Templates29 type; }; template struct Templates { typedef Templates30 type; }; template struct Templates { typedef Templates31 type; }; template struct Templates { typedef Templates32 type; }; template struct Templates { typedef Templates33 type; }; template struct Templates { typedef Templates34 type; }; template struct Templates { typedef Templates35 type; }; template struct Templates { typedef Templates36 type; }; template struct Templates { typedef Templates37 type; }; template struct Templates { typedef Templates38 type; }; template struct Templates { typedef Templates39 type; }; template struct Templates { typedef Templates40 type; }; template struct Templates { typedef Templates41 type; }; template struct Templates { typedef Templates42 type; }; template struct Templates { typedef Templates43 type; }; template struct Templates { typedef Templates44 type; }; template struct Templates { typedef Templates45 type; }; template struct Templates { typedef Templates46 type; }; template struct Templates { typedef Templates47 type; }; template struct Templates { typedef Templates48 type; }; template struct Templates { typedef Templates49 type; }; // The TypeList template makes it possible to use either a single type // or a Types<...> list in TYPED_TEST_CASE() and // INSTANTIATE_TYPED_TEST_CASE_P(). template struct TypeList { typedef Types1 type; }; template struct TypeList > { typedef typename Types::type type; }; #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ dlt-daemon-2.18.6/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump000066400000000000000000000221451377520261000262300ustar00rootroot00000000000000$$ -*- mode: c++; -*- $var n = 50 $$ Maximum length of type lists we want to support. // Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Type utilities needed for implementing typed and type-parameterized // tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // // Currently we support at most $n types in a list, and at most $n // type-parameterized tests in one type-parameterized test case. // Please contact googletestframework@googlegroups.com if you need // more. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ #include "gtest/internal/gtest-port.h" // #ifdef __GNUC__ is too general here. It is possible to use gcc without using // libstdc++ (which is where cxxabi.h comes from). # if GTEST_HAS_CXXABI_H_ # include # elif defined(__HP_aCC) # include # endif // GTEST_HASH_CXXABI_H_ namespace testing { namespace internal { // GetTypeName() returns a human-readable name of type T. // NB: This function is also used in Google Mock, so don't move it inside of // the typed-test-only section below. template std::string GetTypeName() { # if GTEST_HAS_RTTI const char* const name = typeid(T).name(); # if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC) int status = 0; // gcc's implementation of typeid(T).name() mangles the type name, // so we have to demangle it. # if GTEST_HAS_CXXABI_H_ using abi::__cxa_demangle; # endif // GTEST_HAS_CXXABI_H_ char* const readable_name = __cxa_demangle(name, 0, 0, &status); const std::string name_str(status == 0 ? readable_name : name); free(readable_name); return name_str; # else return name; # endif // GTEST_HAS_CXXABI_H_ || __HP_aCC # else return ""; # endif // GTEST_HAS_RTTI } #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P // AssertyTypeEq::type is defined iff T1 and T2 are the same // type. This can be used as a compile-time assertion to ensure that // two types are equal. template struct AssertTypeEq; template struct AssertTypeEq { typedef bool type; }; // A unique type used as the default value for the arguments of class // template Types. This allows us to simulate variadic templates // (e.g. Types, Type, and etc), which C++ doesn't // support directly. struct None {}; // The following family of struct and struct templates are used to // represent type lists. In particular, TypesN // represents a type list with N types (T1, T2, ..., and TN) in it. // Except for Types0, every struct in the family has two member types: // Head for the first type in the list, and Tail for the rest of the // list. // The empty type list. struct Types0 {}; // Type lists of length 1, 2, 3, and so on. template struct Types1 { typedef T1 Head; typedef Types0 Tail; }; $range i 2..n $for i [[ $range j 1..i $range k 2..i template <$for j, [[typename T$j]]> struct Types$i { typedef T1 Head; typedef Types$(i-1)<$for k, [[T$k]]> Tail; }; ]] } // namespace internal // We don't want to require the users to write TypesN<...> directly, // as that would require them to count the length. Types<...> is much // easier to write, but generates horrible messages when there is a // compiler error, as gcc insists on printing out each template // argument, even if it has the default value (this means Types // will appear as Types in the compiler // errors). // // Our solution is to combine the best part of the two approaches: a // user would write Types, and Google Test will translate // that to TypesN internally to make error messages // readable. The translation is done by the 'type' member of the // Types template. $range i 1..n template <$for i, [[typename T$i = internal::None]]> struct Types { typedef internal::Types$n<$for i, [[T$i]]> type; }; template <> struct Types<$for i, [[internal::None]]> { typedef internal::Types0 type; }; $range i 1..n-1 $for i [[ $range j 1..i $range k i+1..n template <$for j, [[typename T$j]]> struct Types<$for j, [[T$j]]$for k[[, internal::None]]> { typedef internal::Types$i<$for j, [[T$j]]> type; }; ]] namespace internal { # define GTEST_TEMPLATE_ template class // The template "selector" struct TemplateSel is used to // represent Tmpl, which must be a class template with one type // parameter, as a type. TemplateSel::Bind::type is defined // as the type Tmpl. This allows us to actually instantiate the // template "selected" by TemplateSel. // // This trick is necessary for simulating typedef for class templates, // which C++ doesn't support directly. template struct TemplateSel { template struct Bind { typedef Tmpl type; }; }; # define GTEST_BIND_(TmplSel, T) \ TmplSel::template Bind::type // A unique struct template used as the default value for the // arguments of class template Templates. This allows us to simulate // variadic templates (e.g. Templates, Templates, // and etc), which C++ doesn't support directly. template struct NoneT {}; // The following family of struct and struct templates are used to // represent template lists. In particular, TemplatesN represents a list of N templates (T1, T2, ..., and TN). Except // for Templates0, every struct in the family has two member types: // Head for the selector of the first template in the list, and Tail // for the rest of the list. // The empty template list. struct Templates0 {}; // Template lists of length 1, 2, 3, and so on. template struct Templates1 { typedef TemplateSel Head; typedef Templates0 Tail; }; $range i 2..n $for i [[ $range j 1..i $range k 2..i template <$for j, [[GTEST_TEMPLATE_ T$j]]> struct Templates$i { typedef TemplateSel Head; typedef Templates$(i-1)<$for k, [[T$k]]> Tail; }; ]] // We don't want to require the users to write TemplatesN<...> directly, // as that would require them to count the length. Templates<...> is much // easier to write, but generates horrible messages when there is a // compiler error, as gcc insists on printing out each template // argument, even if it has the default value (this means Templates // will appear as Templates in the compiler // errors). // // Our solution is to combine the best part of the two approaches: a // user would write Templates, and Google Test will translate // that to TemplatesN internally to make error messages // readable. The translation is done by the 'type' member of the // Templates template. $range i 1..n template <$for i, [[GTEST_TEMPLATE_ T$i = NoneT]]> struct Templates { typedef Templates$n<$for i, [[T$i]]> type; }; template <> struct Templates<$for i, [[NoneT]]> { typedef Templates0 type; }; $range i 1..n-1 $for i [[ $range j 1..i $range k i+1..n template <$for j, [[GTEST_TEMPLATE_ T$j]]> struct Templates<$for j, [[T$j]]$for k[[, NoneT]]> { typedef Templates$i<$for j, [[T$j]]> type; }; ]] // The TypeList template makes it possible to use either a single type // or a Types<...> list in TYPED_TEST_CASE() and // INSTANTIATE_TYPED_TEST_CASE_P(). template struct TypeList { typedef Types1 type; }; $range i 1..n template <$for i, [[typename T$i]]> struct TypeList > { typedef typename Types<$for i, [[T$i]]>::type type; }; #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ dlt-daemon-2.18.6/gtest-1.7.0/lib/000077500000000000000000000000001377520261000161745ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/lib/.dirstamp000066400000000000000000000000001377520261000200060ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/lib/.libs/000077500000000000000000000000001377520261000172035ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/lib/.libs/libgtest.a000066400000000000000000121647361377520261000212060ustar00rootroot00000000000000! / 1428496271 0 0 0 39338 ` ž™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î™î_ZNKSt5ctypeIcE8do_widenEc_ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev_ZN7testing8internal26ThreadLocalValueHolderBaseD1EvDeleteThreadLocalValue_ZN7testing4Test11DeleteSelf_Ev_ZN7testing4Test5SetupEv_ZN7testing8TestCase16RunSetUpTestCaseEv_ZN7testing8TestCase19RunTearDownTestCaseEv_ZN7testing11EnvironmentD2Ev_ZN7testing11EnvironmentD1Ev_ZN7testing11Environment5SetUpEv_ZN7testing11Environment8TearDownEv_ZN7testing11Environment5SetupEv_ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE_ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE_ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEv_ZN7testing22EmptyTestEventListenerD2Ev_ZN7testing22EmptyTestEventListenerD1Ev_ZN7testing4Test5SetUpEv_ZN7testing4Test8TearDownEv_ZNK7testing8TestCase30reportable_disabled_test_countEv_ZNK7testing8TestCase19disabled_test_countEv_ZNK7testing8TestCase21reportable_test_countEv_ZNK7testing8TestCase17test_to_run_countEv_ZNK7testing8TestCase16total_test_countEv_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEv_ZN7testing8internal24HasNewFatalFailureHelper20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD1Ev_ZN7testing8internal23DefaultDeathTestFactoryD2Ev_ZN7testing8internal23DefaultDeathTestFactoryD1Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD2Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD1Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD1Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD1Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev_ZN7testing8internal26ThreadLocalValueHolderBaseD0Ev_ZN7testing11EnvironmentD0Ev_ZN7testing8internal23DefaultDeathTestFactoryD0Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD0Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD0Ev_ZN7testing22EmptyTestEventListenerD0Ev_ZN7testing8internal17TestEventRepeaterD2Ev_ZTVN7testing8internal17TestEventRepeaterE_ZN7testing8internal17TestEventRepeaterD1Ev_ZN7testing8internal17TestEventRepeaterD0Ev_ZN7testing8internal18OsStackTraceGetter17CurrentStackTraceEii_ZN7testing8internal26GoogleTestFailureExceptionD2Ev_ZTVN7testing8internal26GoogleTestFailureExceptionE_ZN7testing8internal26GoogleTestFailureExceptionD1Ev_ZN7testing8internal26GoogleTestFailureExceptionD0Ev_ZN7testing8internal17TestEventRepeater18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal17TestEventRepeater11OnTestStartERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal17TestEventRepeater27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater9OnTestEndERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal17TestEventRepeater16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal17TestEventRepeater18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing8internal24XmlUnitTestResultPrinterD2Ev_ZTVN7testing8internal24XmlUnitTestResultPrinterE_ZN7testing8internal24XmlUnitTestResultPrinterD1Ev_ZN7testing8internal24XmlUnitTestResultPrinterD0Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Ev_ZTVN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD1Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Ev_ZNSt6vectorISsSaISsEED2Ev_ZNSt6vectorISsSaISsEED1Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD1Ev_ZN7testing8internal12AssertHelperC2ENS_14TestPartResult4TypeEPKciS5__ZN7testing8internal12AssertHelperC1ENS_14TestPartResult4TypeEPKciS5__ZN7testing8internal12AssertHelperD2Ev_ZN7testing8internal12AssertHelperD1Ev_ZN7testing8internal15UnitTestOptions15GetOutputFormatEv_ZN7testing18FLAGS_gtest_outputE_ZN7testing8internal15UnitTestOptions20PatternMatchesStringEPKcS3__ZN7testing8internal15UnitTestOptions13MatchesFilterERKSsPKc_ZN7testing8internal13GetTestTypeIdEv_ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_E_ZN7testing8internal20SingleFailureCheckerC2EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing8internal20SingleFailureCheckerC1EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing8internal35DefaultGlobalTestPartResultReporterC2EPNS0_12UnitTestImplE_ZTVN7testing8internal35DefaultGlobalTestPartResultReporterE_ZN7testing8internal35DefaultGlobalTestPartResultReporterC1EPNS0_12UnitTestImplE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC2EPNS0_12UnitTestImplE_ZTVN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC1EPNS0_12UnitTestImplE_ZNK7testing8internal12UnitTestImpl21total_test_case_countEv_ZNK7testing8internal12UnitTestImpl22test_case_to_run_countEv_ZNK7testing8internal12UnitTestImpl21successful_test_countEv_ZNK7testing8TestCase21successful_test_countEv_ZNK7testing8internal12UnitTestImpl17failed_test_countEv_ZNK7testing8TestCase17failed_test_countEv_ZNK7testing8internal12UnitTestImpl30reportable_disabled_test_countEv_ZNK7testing8internal12UnitTestImpl19disabled_test_countEv_ZNK7testing8internal12UnitTestImpl21reportable_test_countEv_ZNK7testing8internal12UnitTestImpl16total_test_countEv_ZNK7testing8internal12UnitTestImpl17test_to_run_countEv_ZN7testing8internal12UnitTestImpl28CurrentOsStackTraceExceptTopEi_ZN7testing8internal15GetTimeInMillisEv_ZN7testing8internal6String13CStringEqualsEPKcS3__ZN7testing15AssertionResultC2ERKS0__ZN7testing15AssertionResultC1ERKS0__ZN7testing16AssertionSuccessEv_ZN7testing16AssertionFailureEv_ZN7testing8internal6String17WideCStringEqualsEPKwS3__ZN7testing8internal6String28CaseInsensitiveCStringEqualsEPKcS3__ZN7testing8internal6String32CaseInsensitiveWideCStringEqualsEPKwS3__ZN7testing8internal6String23EndsWithCaseInsensitiveERKSsS3__ZN7testing8internal20StringStreamToStringEPSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNK7testing7Message9GetStringEv_ZN7testing15AssertionResult13AppendMessageERKNS_7MessageE_ZNK7testing10TestResult17GetTestPartResultEi_ZNK7testing10TestResult15GetTestPropertyEi_ZN7testing10TestResult20ClearTestPartResultsEv_ZN7testing10TestResult5ClearEv_ZNK7testing10TestResult6FailedEv_ZNK7testing8internal12UnitTestImpl26successful_test_case_countEv_ZNK7testing8internal12UnitTestImpl22failed_test_case_countEv_ZNK7testing10TestResult15HasFatalFailureEv_ZNK7testing10TestResult18HasNonfatalFailureEv_ZNK7testing10TestResult16total_part_countEv_ZNK7testing10TestResult19test_property_countEv_ZN7testing4TestC2Ev_ZTVN7testing4TestE_ZN7testing35FLAGS_gtest_also_run_disabled_testsE_ZN7testing28FLAGS_gtest_break_on_failureE_ZN7testing28FLAGS_gtest_catch_exceptionsE_ZN7testing17FLAGS_gtest_colorE_ZN7testing28FLAGS_gtest_death_test_styleE_ZN7testing31FLAGS_gtest_death_test_use_forkE_ZN7testing18FLAGS_gtest_filterE_ZN7testing8internal35FLAGS_gtest_internal_run_death_testE_ZN7testing22FLAGS_gtest_list_testsE_ZN7testing22FLAGS_gtest_print_timeE_ZN7testing23FLAGS_gtest_random_seedE_ZN7testing18FLAGS_gtest_repeatE_ZN7testing19FLAGS_gtest_shuffleE_ZN7testing29FLAGS_gtest_stack_trace_depthE_ZN7testing28FLAGS_gtest_stream_result_toE_ZN7testing28FLAGS_gtest_throw_on_failureE_ZN7testing4TestC1Ev_ZN7testing4TestD2Ev_ZN7testing4TestD1Ev_ZN7testing4TestD0Ev_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEv_ZNK7testing8TestCase11GetTestInfoEi_ZN7testing8TestCase18GetMutableTestInfoEi_ZN7testing8TestCase11ClearResultEv_ZN7testing8TestCase14UnshuffleTestsEv_ZN7testing8internal16GetAnsiColorCodeENS0_10GTestColorE_ZN7testing8internal14ShouldUseColorEb_ZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKcz_ZN7testing8internal27PrettyUnitTestResultPrinter24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter11OnTestStartERKNS_8TestInfoE_ZN7testing8internal29PrintFullTestCommentIfPresentERKNS_8TestInfoE_ZN7testing8internal27PrettyUnitTestResultPrinter16PrintFailedTestsERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater7ReleaseEPNS_17TestEventListenerE_ZN7testing8internal24XmlUnitTestResultPrinterC2EPKc_ZN7testing8internal24XmlUnitTestResultPrinterC1EPKc_ZN7testing8internal24XmlUnitTestResultPrinter26RemoveInvalidXmlCharactersERKSs_ZN7testing8internal24XmlUnitTestResultPrinter21OutputXmlCDataSectionEPSoPKc_ZN7testing18TestEventListenersC2Ev_ZN7testing18TestEventListenersC1Ev_ZN7testing18TestEventListenersD2Ev_ZN7testing18TestEventListenersD1Ev_ZN7testing18TestEventListeners7ReleaseEPNS_17TestEventListenerE_ZN7testing18TestEventListeners8repeaterEv_ZNK7testing18TestEventListeners22EventForwardingEnabledEv_ZN7testing18TestEventListeners23SuppressEventForwardingEv_ZNK7testing8UnitTest26successful_test_case_countEv_ZNK7testing8UnitTest22failed_test_case_countEv_ZNK7testing8UnitTest21total_test_case_countEv_ZNK7testing8UnitTest22test_case_to_run_countEv_ZNK7testing8UnitTest21successful_test_countEv_ZNK7testing8UnitTest17failed_test_countEv_ZNK7testing8UnitTest30reportable_disabled_test_countEv_ZNK7testing8UnitTest19disabled_test_countEv_ZNK7testing8UnitTest21reportable_test_countEv_ZNK7testing8UnitTest16total_test_countEv_ZNK7testing8UnitTest17test_to_run_countEv_ZNK7testing8UnitTest15start_timestampEv_ZNK7testing8UnitTest12elapsed_timeEv_ZNK7testing8UnitTest6PassedEv_ZNK7testing8UnitTest6FailedEv_ZNK7testing8UnitTest11GetTestCaseEi_ZNK7testing8UnitTest18ad_hoc_test_resultEv_ZN7testing8UnitTest18GetMutableTestCaseEi_ZN7testing8UnitTest9listenersEv_ZN7testing14TestPartResultD2Ev_ZN7testing14TestPartResultD1Ev_ZN7testing12TestPropertyD2Ev_ZN7testing12TestPropertyD1Ev_ZNK7testing8UnitTest20original_working_dirEv_ZNK7testing8UnitTest11random_seedEv_ZN7testing8UnitTest27parameterized_test_registryEv_ZN7testing8internal12UnitTestImpl32SuppressTestEventsIfInSubprocessEv_ZN7testing8internal30WriteToShardStatusFileIfNeededEv_ZN7testing8internal20ShouldRunTestOnShardEiii_ZN7testing8internal12UnitTestImpl23ListTestsMatchingFilterEv_ZN7testing8internal12UnitTestImpl25set_os_stack_trace_getterEPNS0_27OsStackTraceGetterInterfaceE_ZN7testing8internal12UnitTestImpl19current_test_resultEv_ZN7testing8internal12UnitTestImpl14UnshuffleTestsEv_ZN7testing8internal6IsTrueEb_ZN7testing8internal10AlwaysTrueEv_ZN7testing8internal10SkipPrefixEPKcPS2__ZN7testing8internal14ParseFlagValueEPKcS2_b_ZN7testing8internal13ParseBoolFlagEPKcS2_Pb_ZN7testing8internal15ParseStringFlagEPKcS2_PSs_ZN7testing8internal16InDeathTestChildEv_ZN7testing14ExitedWithCodeC2Ei_ZN7testing14ExitedWithCodeC1Ei_ZNK7testing14ExitedWithCodeclEi_ZN7testing14KilledBySignalC2Ei_ZN7testing14KilledBySignalC1Ei_ZNK7testing14KilledBySignalclEi_ZN7testing8internal20ExitedUnsuccessfullyEi_ZN7testing8internal23GetLastErrnoDescriptionEv_ZN7testing8internal9DeathTest11LastMessageEv_ZN7testing8internal9DeathTest24last_death_test_message_E_ZN7testing8internal9DeathTest27set_last_death_test_messageERKSs_ZN7testing8internal21StackLowerThanAddressEPKvPb_ZN7testing8internal14StackGrowsDownEv_ZNK7testing8internal8FilePath21FindLastPathSeparatorEv_ZNK7testing8internal8FilePath21FileOrDirectoryExistsEv_ZNK7testing8internal8FilePath15DirectoryExistsEv_ZNK7testing8internal8FilePath15IsRootDirectoryEv_ZNK7testing8internal8FilePath14IsAbsolutePathEv_ZNK7testing8internal8FilePath11IsDirectoryEv_ZNK7testing8internal8FilePath12CreateFolderEv_ZN7testing8internal8FilePath9NormalizeEv_ZN7testing8internal8FilePath13GetCurrentDirEv_ZNK7testing8internal8FilePath19RemoveDirectoryNameEv_ZN7testing8internal24GetCurrentExecutableNameEv_ZN7testing8internal17g_executable_pathE_ZNK7testing8internal8FilePath14RemoveFileNameEv_ZNK7testing8internal8FilePath27RemoveTrailingPathSeparatorEv_ZNK7testing8internal8FilePath28CreateDirectoriesRecursivelyEv_ZNK7testing8internal8FilePath15RemoveExtensionEPKc_ZN7testing8internal14GetThreadCountEv_ZN7testing8internal2RED2Ev_ZN7testing8internal2RED1Ev_ZN7testing8internal2RE9FullMatchEPKcRKS1__ZN7testing8internal2RE12PartialMatchEPKcRKS1__ZN7testing8internal8GTestLogD2Ev_ZN7testing8internal8GTestLogD1Ev_ZN7testing8internal14CapturedStream11GetFileSizeEP8_IO_FILE_ZN7testing8internal14CapturedStream14ReadEntireFileEP8_IO_FILE_ZN7testing8internal17GetCapturedStreamEPPNS0_14CapturedStreamE_ZN7testing8internal17GetCapturedStdoutEv_ZN7testing8internal17GetCapturedStderrEv_ZN7testing8internal18SetInjectableArgvsEPKSt6vectorISsSaISsEE_ZN7testing8internal18GetInjectableArgvsEv_ZN7testing8internal7g_argvsE_ZN7testing9internal220PrintBytesInObjectToEPKhjPSo_ZN7testinglsERSoRKNS_14TestPartResultE_ZNK7testing19TestPartResultArray17GetTestPartResultEi_ZNK7testing19TestPartResultArray4sizeEv_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev_ZN7testing7MessageC2Ev_ZN7testing7MessageC1Ev_ZN7testing8internal30GetBoolAssertionFailureMessageERKNS_15AssertionResultEPKcS5_S5__ZN7testing8internal10ParseInt32ERKNS_7MessageEPKcPi_ZN7testing8internal17Int32FromEnvOrDieEPKci_ZN7testing8internal14ParseInt32FlagEPKcS2_Pi_ZN7testing8internal16BoolFromGTestEnvEPKcb_ZN7testing8internal18StringFromGTestEnvEPKcS2__ZN7testing8internal17Int32FromGTestEnvEPKci_ZN7testing7MessageC2ERKS0__ZN7testing7MessageC1ERKS0__ZN7testing8internal11ShouldShardEPKcS2_b_ZN7testing8internal6String12FormatHexIntEi_ZN7testing8internal27FormatTimeInMillisAsSecondsEx_ZN7testing8internal6String15FormatIntWidth2Ei_ZN7testing8internal6String10FormatByteEh_ZN7testing8internal24XmlUnitTestResultPrinter9EscapeXmlERKSsb_ZN7testing8internal24XmlUnitTestResultPrinter29TestPropertiesAsXmlAttributesERKNS_10TestResultE_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev_ZN7testing8internal10scoped_ptrISsE5resetEPSs_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_b_ZNK7testing15AssertionResultntEv_ZN7testing16AssertionFailureERKNS_7MessageE_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZN7testing8internal15CodePointToUtf8Ej_ZN7testing8internal16WideStringToUtf8EPKwi_ZN7testing7MessagelsERKSbIwSt11char_traitsIwESaIwEE_ZN7testing8internal6String15ShowWideCStringEPKw_ZN7testing7MessagelsEPKw_ZN7testing7MessagelsEPw_ZN7testing8internal19UniversalPrintArrayEPKcjPSo_ZN7testing8internal7PrintToEPKcPSo_ZN7testing8internal13PrintStringToERKSsPSo_ZN7testing13PrintToStringIPKcEESsRKT__ZN7testing8internal14CmpHelperSTREQEPKcS2_S2_S2__ZN7testing8internal18CmpHelperSTRCASEEQEPKcS2_S2_S2__ZN7testing8internal19UniversalPrintArrayEPKwjPSo_ZN7testing8internal7PrintToEPKwPSo_ZN7testing8internal17PrintWideStringToERKSbIwSt11char_traitsIwESaIwEEPSo_ZN7testing13PrintToStringIPKwEESsRKT__ZN7testing8internal14CmpHelperSTREQEPKcS2_PKwS4__ZN7testing8internal17StreamingListener9UrlEncodeEPKc_ZN7testing8internal18StreamableToStringIiEESsRKT__ZN7testing8internal27PrettyUnitTestResultPrinter15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal27PrettyUnitTestResultPrinter20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal18StreamableToStringIxEESsRKT__ZN7testing8internal27PrettyUnitTestResultPrinter9OnTestEndERKNS_8TestInfoE_ZN7testing8internal27PrettyUnitTestResultPrinter13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8__ZN7testing8internal8FilePath11ConcatPathsERKS1_S3__ZN7testing8internal32FormatEpochTimeInMillisAsIso8601Ex_ZN7testing8internal8FilePath12MakeFileNameERKS1_S3_iPKc_ZN7testing8internal8FilePath22GenerateUniqueFileNameERKS1_S3_PKc_ZN7testing8internal18FormatFileLocationEPKci_ZN7testing8internal8GTestLogC2ENS0_16GTestLogSeverityEPKci_ZN7testing8internal8GTestLogC1ENS0_16GTestLogSeverityEPKci_ZN7testing8internal13CaptureStreamEiPKcPPNS0_14CapturedStreamE_ZN7testing8internal13CaptureStdoutEv_ZN7testing8internal13CaptureStderrEv_ZN7testing8internal17StreamingListener12SocketWriter14MakeConnectionEv_ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv_ZN7testing8internal5MutexD2Ev_ZN7testing8internal5MutexD1Ev_ZN7testing8internal9MutexBase6UnlockEv_ZN7testing8internal9MutexBase4LockEv_ZN7testing8internal17StreamingListener12SocketWriter4SendERKSs_ZN7testing8internal6Random8GenerateEj_ZN7testing8internal13DeathTestImpl6PassedEb_ZN7testing8internal17StreamingListener12SocketWriterD2Ev_ZTVN7testing8internal17StreamingListener12SocketWriterE_ZN7testing8internal17StreamingListener12SocketWriterD1Ev_ZN7testing8internal17StreamingListener12SocketWriterD0Ev_ZN7testing8internal17StreamingListenerD2Ev_ZTVN7testing8internal17StreamingListenerE_ZN7testing8internal17StreamingListenerD1Ev_ZN7testing8internal17StreamingListenerD0Ev_ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs_ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoE_ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing10TestResultC2Ev_ZN7testing10TestResultC1Ev_ZN7testing8internal18OsStackTraceGetterD2Ev_ZTVN7testing8internal18OsStackTraceGetterE_ZN7testing8internal18OsStackTraceGetterD1Ev_ZN7testing8internal18OsStackTraceGetterD0Ev_ZN7testing8internal12UnitTestImpl21os_stack_trace_getterEv_ZN7testing8internal12UnitTestImpl31SetGlobalTestPartResultReporterEPNS_31TestPartResultReporterInterfaceE_ZN7testing8internal12UnitTestImpl31GetGlobalTestPartResultReporterEv_ZNK7testing8UnitTest17current_test_caseEv_ZNK7testing8UnitTest17current_test_infoEv_ZN7testing8internal38DefaultPerThreadTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing10TestResultD2Ev_ZN7testing10TestResultD1Ev_ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal26GoogleTestFailureExceptionC2ERKNS_14TestPartResultE_ZN7testing8internal26GoogleTestFailureExceptionC1ERKNS_14TestPartResultE_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal25ReportInvalidTestCaseTypeEPKcS2_i_ZN7testing8internal37FormatCompilerIndependentFileLocationEPKci_ZN7testing8internal17AppendUserMessageERKSsRKNS_7MessageE_ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE_ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing15AssertionResultlsINS_7MessageEEERS0_RKT__ZN7testing15AssertionResultlsIA11_cEERS0_RKT__ZN7testing15AssertionResultlsISsEERS0_RKT__ZN7testing15AssertionResultlsIA2_cEERS0_RKT__ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT__ZN7testing15AssertionResultlsIA3_cEERS0_RKT__ZN7testing8internal13HasOneFailureEPKcS2_S2_RKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing15AssertionResultlsIPKcEERS0_RKT__ZN7testing11IsSubstringEPKcS1_S1_S1__ZN7testing14IsNotSubstringEPKcS1_S1_S1__ZN7testing11IsSubstringEPKcS1_RKSsS3__ZN7testing14IsNotSubstringEPKcS1_RKSsS3__ZN7testing11IsSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZN7testing14IsNotSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZN7testing11IsSubstringEPKcS1_PKwS3__ZN7testing14IsNotSubstringEPKcS1_PKwS3__ZN7testing15AssertionResultlsIA5_cEERS0_RKT__ZN7testing15AssertionResultlsIA7_cEERS0_RKT__ZN7testing8internal20DoubleNearPredFormatEPKcS2_S2_ddd_ZN7testing15AssertionResultlsIA12_cEERS0_RKT__ZN7testing8internal14CmpHelperSTRNEEPKcS2_PKwS4__ZN7testing8internal14CmpHelperSTRNEEPKcS2_S2_S2__ZN7testing8internal18CmpHelperSTRCASENEEPKcS2_S2_S2__ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5__ZN7testing7FloatLEEPKcS1_ff_ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5__ZN7testing8DoubleLEEPKcS1_dd_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED1Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED1Ev_ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EE_ZN7testing8TestCase12ShuffleTestsEPNS_8internal6RandomE_ZN7testing8internal12UnitTestImpl12ShuffleTestsEv_ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT__ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo_ZN7testing8internal7PrintToEhPSo_ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo_ZN7testing8internal7PrintToEaPSo_ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo_ZN7testing8internal7PrintToEwPSo_ZN7testing8internal10scoped_ptrIKSsE5resetEPS2__ZN7testing8TestInfoD2Ev_ZN7testing8TestInfoD1Ev_ZN7testing8TestCaseD2Ev_ZTVN7testing8TestCaseE_ZN7testing8TestCaseD1Ev_ZN7testing8TestCaseD0Ev_ZN7testing8internal12UnitTestImplD2Ev_ZTVN7testing8internal12UnitTestImplE_ZN7testing8internal12UnitTestImplD1Ev_ZN7testing8internal12UnitTestImplD0Ev_ZN7testing8UnitTestD2Ev_ZTVN7testing8UnitTestE_ZN7testing8UnitTestD1Ev_ZN7testing8UnitTestD0Ev_ZN7testing8TestCaseC2EPKcS2_PFvvES4__ZN7testing8TestCaseC1EPKcS2_PFvvES4__ZN7testing8TestInfoC2ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE_ZN7testing8TestInfoC1ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi_ZN7testing8TestCase11AddTestInfoEPNS_8TestInfoE_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal12UnitTestImpl24ConfigureStreamingOutputEv_ZN7testing8internal17TestEventRepeater6AppendEPNS_17TestEventListenerE_ZN7testing18TestEventListeners6AppendEPNS_17TestEventListenerE_ZN7testing18TestEventListeners23SetDefaultResultPrinterEPNS_17TestEventListenerE_ZN7testing8internal12UnitTestImplC2EPNS_8UnitTestE_ZTVN7testing8internal23DefaultDeathTestFactoryE_ZTVN7testing8internal27PrettyUnitTestResultPrinterE_ZN7testing8internal12UnitTestImplC1EPNS_8UnitTestE_ZN7testing8UnitTestC2Ev_ZN7testing8UnitTestC1Ev_ZN7testing8UnitTest11GetInstanceEv_ZN7testing8internal15UnitTestOptions27GetAbsolutePathToOutputFileEv_ZN7testing4Test15HasFatalFailureEv_ZN7testing4Test18HasNonfatalFailureEv_ZN7testing8internal31GetCurrentOsStackTraceExceptTopEPNS_8UnitTestEi_ZN7testing8internal14DeathTestAbortERKSs_ZN7testing8internal13DeathTestImpl26ReadAndInterpretStatusByteEv_ZN7testing8internal13DeathTestImpl5AbortENS0_9DeathTest11AbortReasonE_ZN7testing8internal16ForkingDeathTest4WaitEv_ZN7testing8internal15NoExecDeathTestD2Ev_ZTVN7testing8internal13DeathTestImplE_ZN7testing8internal15NoExecDeathTestD1Ev_ZN7testing8internal13ExecDeathTestD2Ev_ZN7testing8internal13ExecDeathTestD1Ev_ZN7testing8internal15NoExecDeathTestD0Ev_ZN7testing8internal13ExecDeathTestD0Ev_ZN7testing8internal9DeathTestC2Ev_ZTVN7testing8internal9DeathTestE_ZN7testing8internal9DeathTestC1Ev_ZN7testing8internal16ForkingDeathTestC2EPKcPKNS0_2REE_ZTVN7testing8internal16ForkingDeathTestE_ZN7testing8internal16ForkingDeathTestC1EPKcPKNS0_2REE_ZN7testing8internal9DeathTest6CreateEPKcPKNS0_2REES3_iPPS1__ZN7testing8internal15NoExecDeathTest10AssumeRoleEv_ZN7testing8internal23DefaultDeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE_ZTVN7testing8internal15NoExecDeathTestE_ZTVN7testing8internal13ExecDeathTestE_ZN7testing18TestEventListeners22SetDefaultXmlGeneratorEPNS_17TestEventListenerE_ZN7testing8internal12UnitTestImpl18ConfigureXmlOutputEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8UnitTest14AddEnvironmentEPNS_11EnvironmentE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal18StreamableToStringIPcEESsRKT__ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZTSN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZTIN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZTIN7testing8internal26ThreadLocalValueHolderBaseE_ZN7testing13PrintToStringIxEESsRKT__ZN7testing8internal11CmpHelperEQEPKcS2_xx_ZN7testing8internal11CmpHelperNEEPKcS2_xx_ZN7testing8internal11CmpHelperLEEPKcS2_xx_ZN7testing8internal11CmpHelperLTEPKcS2_xx_ZN7testing8internal11CmpHelperGEEPKcS2_xx_ZN7testing8internal11CmpHelperGTEPKcS2_xx_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tag_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag_ZN7testing8internal12UnitTestImpl11GetTestCaseEPKcS3_PFvvES5__ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_PKvPFvvES6_PNS0_15TestFactoryBaseE_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag_ZN7testing8internal15UnitTestOptions17FilterMatchesTestERKSsS3__ZN7testing8internal12UnitTestImpl11FilterTestsENS1_18ReactionToShardingE_ZN7testing14TestPartResult14ExtractSummaryEPKc_ZN7testing8internal17kStackTraceMarkerE_ZN7testing8internal19TypedTestCasePState25VerifyRegisteredTestNamesEPKciS3__ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT__ZN7testing8internal11g_help_flagE_ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPw_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT__ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPc_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZTSN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZTIN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv_ZTVN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZN7testing8internal12UnitTestImpl41GetTestPartResultReporterForCurrentThreadEv_ZN7testing8internal12UnitTestImpl41SetTestPartResultReporterForCurrentThreadEPNS_31TestPartResultReporterInterfaceE_ZN7testing8internal24HasNewFatalFailureHelperD2Ev_ZTVN7testing8internal24HasNewFatalFailureHelperE_ZN7testing8internal24HasNewFatalFailureHelperD1Ev_ZN7testing8internal24HasNewFatalFailureHelperD0Ev_ZN7testing32ScopedFakeTestPartResultReporterD2Ev_ZTVN7testing32ScopedFakeTestPartResultReporterE_ZN7testing32ScopedFakeTestPartResultReporterD1Ev_ZN7testing32ScopedFakeTestPartResultReporterD0Ev_ZN7testing8internal24HasNewFatalFailureHelperC2Ev_ZN7testing8internal24HasNewFatalFailureHelperC1Ev_ZN7testing32ScopedFakeTestPartResultReporter4InitEv_ZN7testing32ScopedFakeTestPartResultReporterC2EPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC1EPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC2ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC1ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZN7testing8internal13ExecDeathTest10AssumeRoleEv_ZN7testing8internal24XmlUnitTestResultPrinter18OutputXmlAttributeEPSoRKSsS4_S4__ZN7testing8internal24XmlUnitTestResultPrinter17OutputXmlTestInfoEPSoPKcRKNS_8TestInfoE_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlTestCaseEPSoRKNS_8TestCaseE_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlUnitTestEPSoRKNS_8UnitTestE_ZN7testing8internal24XmlUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs_ZN7testing8internal29ParseInternalRunDeathTestFlagEv_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEv_ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT__ZN7testing8internal18g_init_gtest_countE_ZN7testing14InitGoogleTestEPiPPc_ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT__ZN7testing14InitGoogleTestEPiPPw_ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6__ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv_ZN7testing8UnitTest17AddTestPartResultENS_14TestPartResult4TypeEPKciRKSsS6__ZTIN7testing8internal26GoogleTestFailureExceptionE_ZNK7testing8internal12AssertHelperaSERKNS_7MessageE_ZN7testing8internal20SingleFailureCheckerD2Ev_ZN7testing8internal20SingleFailureCheckerD1Ev_ZN7testing24ValidateTestPropertyNameERKSsRKSt6vectorISsSaISsEE_ZN7testing10TestResult20ValidateTestPropertyERKSsRKNS_12TestPropertyE_ZN7testing4Test19HasSameFixtureClassEv_ZN7testing8internal2RE4InitEPKc_ZN7testing8internal30ReportFailureInUnknownLocationENS_14TestPartResult4TypeERKSs_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc_ZN7testing4Test3RunEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc_ZN7testing8TestInfo3RunEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc_ZN7testing8TestCase3RunEv_ZN7testing8internal12UnitTestImpl11RunAllTestsEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKc_ZN7testing8UnitTest3RunEv_ZN7testing8UnitTest13PopGTestTraceEv_ZN7testing8internal11ScopedTraceD2Ev_ZN7testing8internal11ScopedTraceD1Ev_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8UnitTest14PushGTestTraceERKNS_8internal9TraceInfoE_ZN7testing8internal11ScopedTraceC2EPKciRKNS_7MessageE_ZN7testing8internal11ScopedTraceC1EPKciRKNS_7MessageE_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZN7testing8internal35DefaultGlobalTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing10TestResult17AddTestPartResultERKNS_14TestPartResultE_ZN7testing19TestPartResultArray6AppendERKNS_14TestPartResultE_ZN7testing32ScopedFakeTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing12TestPropertyES4_EET0_T_S6_S5__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZN7testing10TestResult14RecordPropertyERKSsRKNS_12TestPropertyE_ZN7testing8internal12UnitTestImpl14RecordPropertyERKNS_12TestPropertyE_ZN7testing8UnitTest14RecordPropertyERKSsS2__ZN7testing4Test14RecordPropertyERKSsS2__ZN7testing4Test14RecordPropertyERKSsi_ZN7testing8internal23kTestTypeIdInGoogleTestE_ZTSN7testing8internal26ThreadLocalValueHolderBaseE_ZTSN7testing8internal26GoogleTestFailureExceptionE_ZTIN7testing8internal9DeathTestE_ZTSN7testing8internal9DeathTestE_ZTIN7testing8internal16DeathTestFactoryE_ZTSN7testing8internal16DeathTestFactoryE_ZTSN7testing8internal23DefaultDeathTestFactoryE_ZTIN7testing8internal23DefaultDeathTestFactoryE_ZTIN7testing31TestPartResultReporterInterfaceE_ZTSN7testing31TestPartResultReporterInterfaceE_ZTSN7testing8internal24HasNewFatalFailureHelperE_ZTIN7testing8internal24HasNewFatalFailureHelperE_ZTSN7testing4TestE_ZTIN7testing4TestE_ZTSN7testing8TestCaseE_ZTIN7testing8TestCaseE_ZTIN7testing17TestEventListenerE_ZTSN7testing17TestEventListenerE_ZTIN7testing22EmptyTestEventListenerE_ZTSN7testing22EmptyTestEventListenerE_ZTSN7testing8UnitTestE_ZTIN7testing8UnitTestE_ZTSN7testing32ScopedFakeTestPartResultReporterE_ZTIN7testing32ScopedFakeTestPartResultReporterE_ZTIN7testing8internal27OsStackTraceGetterInterfaceE_ZTSN7testing8internal27OsStackTraceGetterInterfaceE_ZTSN7testing8internal18OsStackTraceGetterE_ZTIN7testing8internal18OsStackTraceGetterE_ZTSN7testing8internal35DefaultGlobalTestPartResultReporterE_ZTIN7testing8internal35DefaultGlobalTestPartResultReporterE_ZTSN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZTIN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZTSN7testing8internal12UnitTestImplE_ZTIN7testing8internal12UnitTestImplE_ZTIN7testing8internal17StreamingListener20AbstractSocketWriterE_ZTSN7testing8internal17StreamingListener20AbstractSocketWriterE_ZTIN7testing8internal17StreamingListener12SocketWriterE_ZTSN7testing8internal17StreamingListener12SocketWriterE_ZTIN7testing8internal17StreamingListenerE_ZTSN7testing8internal17StreamingListenerE_ZTSN7testing8internal27PrettyUnitTestResultPrinterE_ZTIN7testing8internal27PrettyUnitTestResultPrinterE_ZTSN7testing8internal17TestEventRepeaterE_ZTIN7testing8internal17TestEventRepeaterE_ZTSN7testing8internal24XmlUnitTestResultPrinterE_ZTIN7testing8internal24XmlUnitTestResultPrinterE_ZTSN7testing8internal13DeathTestImplE_ZTIN7testing8internal13DeathTestImplE_ZTSN7testing8internal16ForkingDeathTestE_ZTIN7testing8internal16ForkingDeathTestE_ZTSN7testing8internal15NoExecDeathTestE_ZTIN7testing8internal15NoExecDeathTestE_ZTSN7testing8internal13ExecDeathTestE_ZTIN7testing8internal13ExecDeathTestE_ZN7testing8internal18OsStackTraceGetter19kElidedFramesMarkerE_ZN7testing8internal18g_linked_ptr_mutexE_ZN7testing38FLAGS_gtest_show_internal_stack_framesEgtest-all.o/ 1428496271 1000 1000 100664 2641844 ` ELFČu4(ÛÜŨŪ&'ßāáâãäåæįčéę)*ëėíîīđņōķôõö÷øųúûüũū˙     89#$,-56 /0!"23>?ABDEGHJKMNPQTUWXZ[]^`ahicdklnoqrtuwxz{}~€ƒ„†‡‰ŠŒ’“•–˜™›œžŸĄĸ¤Ĩ§¨ĒĢ­Ž°ąŗ´ļˇšēŧŊŋĀÂÃÅÆČÉËĖÎĪŅŌÔÕרÚÛŨŪāáãäæįéęėíīđōķõöøúûũ˙    !#$&')*,-/0235689;<>?ABDEGHJKMNPQSTVWYZ\]_`bcefhiklnoqrtuwxz{‚„…‡ˆŠ‹Ž‘“”•—˜š›Ÿ ĸŖ¤Ļ§ŠĢŦ­¯°˛ŗĩļ¸ēģŊžĀÁÂÄÅĮČĘËÍÎĐŅĶÔÖØŲÛÜŪāâäæčęėîđōôöøúüūķÍ´&ŧ'ķÍ´&ŧ'S‹D$‹P ‹X1Ā9Út´&‹ €yt€yƒØ˙ƒÂ9Ķuę[ÃS‹D$‹P ‹X1Ā9Út´&‹ €yƒØ˙ƒÂ9Ķuđ[ÍļS‹D$‹P ‹X1Ā9Út´&‹ €yƒØ˙ƒÂ9Ķuđ[ÍļS‹D$‹P ‹X1Ā9Út´&‹ €yƒØ˙ƒÂ9Ķuđ[Íļ‹T$‹B+B ÁøÃfķÍ´&ŧ'‹T$‹D$ƒ:uÆ@‹@‹‰T$‰D$‹A˙āļŋU‰åWVSƒė ‹}‹w ‹_Į9Ūt t&‹…Āt ‹ƒė P˙RƒÄƒÃ9Ūuį‹w…öt‰ueô[^_]éü˙˙˙eô[^_]ËW‰Ã…Ōt ƒė Rčü˙˙˙ƒÄƒė Sčü˙˙˙vŧ'Sƒė‹\$Sčü˙˙˙‰\$ ƒÄ[éü˙˙˙t&Sƒė‹\$$D$PhSčü˙˙˙ƒÄ(‰Ø[´&ŧ'WVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R ‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R,‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹t$‹|$€~t:‹F‹^ )ÃÁûƒëx*Áãë vŧ'‹F‹ƒėƒë‹WP˙RƒÄƒûüuå[^_ÐWVS‹t$‹|$€~t:‹F‹^ )ÃÁûƒëx*Áãë vŧ'‹F‹ƒėƒë‹WP˙R0ƒÄƒûüuå[^_ÐWVS‹t$‹|$€~t:‹F‹^ )ÃÁûƒëx*Áãë vŧ'‹F‹ƒėƒë‹WP˙R$ƒÄƒûüuå[^_ÐWVS‹t$‹|$€~t:‹F‹^ )ÃÁûƒëx*Áãë vŧ'‹F‹ƒėƒë‹WP˙R(ƒÄƒûüuå[^_ÐWVS‹t$‹|$€~t:‹F‹^ )ÃÁûƒëx*Áãë vŧ'‹F‹ƒėƒë‹WP˙R8ƒÄƒûüuå[^_ÐUWVSƒė ‹l$ ‹\$$‹t$(€}t:‹U‹E )ĐÁø…Āt+1˙ļ‹ēƒėƒĮ‹VSP˙R ‹U‹E ƒÄ)ĐÁø9ĮrŨƒÄ [^_]Ѝt&UWVSƒė ‹t$ ‹|$$‹l$(€~t3‹F‹^ )ÃÁûƒëx#Áãëf‹F‹ƒėƒë‹UWP˙R4ƒÄƒûüuäƒÄ [^_]ÍļŋVS‰Æƒė‹Xl;Xpt‹ƒė ƒÃ‹ R˙QƒÄ;^puęÆFxƒÄ[^ÃUWVS‰Ãƒė‹‹K)ÁÁų…ÉtR‰ß‰Ķ‰Öƒã1í‰\$ 1ې´&‹T$ ‹ ¨‰đ…Ōt‹‹D0˙ƒė ƒÅQ˙ЋO˃Ä)ÁÁų9Ír҃ĉØ[^_]Ã1ÛëōvVS‰Ãƒė…ĀtXž1ö„Ōu-ëMvŧ'ƒė ƒÃƒÆRčü˙˙˙žƒÄ„Ōt*ūų/€ú uÚƒė ƒÃƒÆhčü˙˙˙žƒÄ„ŌuփÄ[^Í´&ƒė hčü˙˙˙ƒÄƒÄ[^Ívŧ'Sšƒė…Étš˙˙˙˙đÁH…É~ƒÄ[ËHY˙…ɉXîƒėRPčü˙˙˙ƒÄƒÄ[ÐU‰åWVS‰×1öƒė,‰EÔĮ vŧ'ƒėVj Wčü˙˙˙ƒÄ ‰Ãj h˙uÔčü˙˙˙ƒÄƒû˙tX‹ƒÃ‰Ú)ō‹@ô9Ƈ“EäRVWPčü˙˙˙XEäZP˙uÔčü˙˙˙‹EäƒÄƒč =u ‰Ū떍ļUā‰Ūč&˙˙˙넍t&‹‹@ô9Æwy]āj˙VWSčü˙˙˙Y^S˙uÔčü˙˙˙‹EāƒÄƒč =u ‹Eԍeô[^_]ÍUäčÜū˙˙‹Eԍeô[^_]ÃPVhhčü˙˙˙‰Ã‹Eԋƒč =tUßč§ū˙˙ƒė Sčü˙˙˙PVhhčü˙˙˙‰Ã‹Eāƒč =tĀUäčvū˙˙ëļ‰Ã‹Eäƒč =t§Uāč]ū˙˙띍t&ŧ'UWĐVS1í‰×ƒė,…ɉL$‹t$@\$ĮD$ÆD$‰D$ „†ļ‹D$ ļ(ƒÅPh+jSčü˙˙˙‰$čü˙˙˙ƒÄ PSVčü˙˙˙ƒÄ;l$tK…íD=tèuÆD$ ƒėjD$!PVčü˙˙˙ƒÄëĨt&ÆD$-ƒėjD$"PVčü˙˙˙ƒÄ농ļƒÄ,[^_]ÃVS‰Æ‰Ķƒė…Ōt+ƒė Rčü˙˙˙ƒÄ P‹SPRčü˙˙˙ƒÄ‰đƒÄ[^Í´&ƒėjh0‹ƒĀPčü˙˙˙ƒÄ‰đƒÄ[^Ѝ´&U‰åVSƒėjčü˙˙˙‰Ã‹E ƒÄ ‰‹E‰C‹E‰CE÷PC ˙uPčü˙˙˙‹EƒÄ‰eø[^]Ãƒė ‰ÆSčü˙˙˙‰4$čü˙˙˙´&Sƒė‹\$ ‹…Ōt‹B ƒč =uƒė Rčü˙˙˙ƒÄƒÄ[Ít&T$č—ü˙˙‹ëېfU‰åVSƒė‹‹u…ÛtKƒėj:Sčü˙˙˙ƒÄ…Āt!U÷)ØRPSVčü˙˙˙ƒÄeø‰đ[^]t&E÷ƒėPSVčü˙˙˙ëŨ´&E÷ƒėPhVčü˙˙˙ƒÄëÁƒė Pčü˙˙˙ëõ´&ŧ'VSƒė‹D$ ‹t$$XļļC˙K˙<*t7~<:t\ƒėhlVčü˙˙˙ƒÄ„Āu)ƒėh|Včü˙˙˙ƒÄ„Āuƒėh‚Včü˙˙˙ƒÄvƒÄ!Ø[^Ѝ´&€=đWVS‹\$t$t|ļȄĀtQ‹D$…ĀtI‹D$ƒčƒø‡š‹…čƒėPh–čü˙˙˙ƒÄ VS˙5čü˙˙˙Į$Ÿčü˙˙˙ƒÄ[^_ЃėVS˙5čü˙˙˙ƒÄ[^_Éöŧ'ƒė hđčü˙˙˙ƒÄ…Ā„l˙˙˙ƒė ˙5čü˙˙˙‰$čü˙˙˙…Ā•Āļ‰$čü˙˙˙‰ĮĸČĮ$đčü˙˙˙ƒÄ‰øé0˙˙˙t&1ĀéG˙˙˙´&ƒėhŖjčü˙˙˙Į$„čü˙˙˙Ą‰D$ ƒÄéü˙˙˙t&ƒėhŖjčü˙˙˙Į$¤čü˙˙˙Ą‰D$ ƒÄéü˙˙˙t&Sƒė‹\$hąjčü˙˙˙ƒÄ ˙s˙3hŋčü˙˙˙Į$ čü˙˙˙Ą‰D$ ƒÄ[éü˙˙˙ļŋWVSƒė‹T$ ‹B…Ā„›‹‹R …‰Æ•Á1˙1ۅŌt‹…Ā•É߉Éø„Āu„Éu ƒÄ[^_ÍvˆL$ƒė hÅčü˙˙˙ƒÄļL$„ÉtcƒėVhę hÎčü˙˙˙‰øƒÄ„ĀtŊƒė hÖčü˙˙˙ƒÄƒėShß hÎčü˙˙˙ƒÄƒÄ[^_Ãf‹R 1É1ö…Ō…j˙˙˙éz˙˙˙t&‰ø„ĀuÃék˙˙˙ļŋUW1ÉVSēƒė‹D$0‹@$‰D$ ƒĀTč/į˙˙…Ā„G‹D$0‹P$‹JT‹BX)ȃøŽ/ĮD$ ë5t&‹D$ ‹ƒ…Ûx6‹€{,u<‹JT‹BXƒD$ ‹t$ )ČÁø9ƍđ‹Z`‹Bd)ØÁø;D$ ŋļ, ļƒė Sčü˙˙˙ƒÄ…Āth‹s1í‰đ+C ƒøëW´&‰đ+C ƒÅÁø9Å}AƒėUSčü˙˙˙ƒÄ€x‰Įt܍@ƒė Pčü˙˙˙ƒÄ„Āu)‹sƒÅ‰đ+C Áø9Å|ƍ´&‹D$0‹P$é@˙˙˙t&ƒėhÜjčü˙˙˙ƒÄ ˙w˙shŋčü˙˙˙‰<$čü˙˙˙Į$ čü˙˙˙ƒÄ‹sé_˙˙˙´&ƒÄ[^_]Ѝ´&UWVSƒė ‹l$ ‹|$$‹E ‹]‰Æ)ŪÁū…öt!1É9;Suë%t&‰ĶƒÂ9zütƒÁ9ņuīƒÄ 1Ā[^_]Ѝt&S9Ât‰Á)҉ÎÁū…öu‰Âƒę‰ø‰U ƒÄ [^_]Ívŧ'ƒėQRSčü˙˙˙‹U ƒÄë͐ļŋU‰åWVSuįƒė ‹]CĮV˙u Pčü˙˙˙‹CƒÄ…Āt‹Pô…Ōu-˙5j jhČčü˙˙˙X˙5čü˙˙˙Į$čü˙˙˙eô[^_]ËK‰ĮAô=t‰ōč˛å˙˙ƒė Wčü˙˙˙´&U‰åWVSƒė$‹EĮ ‹E ‹˙pô˙učü˙˙˙‹E ƒÄ‹‹pô‰Ã…öuë~vV÷€úv#‹PôƒÃÂ9Ķtgļ3‰ņ‰ō€ųŸÁ€ú ”ÂŅtՋE‹‹Pôz;xøw‹Hü…É~ƒėW˙učü˙˙˙‹EƒÄ‹‹Pô‰ņˆ ‹E‹= u‹E ƒÃ‹‹PôÂ9Ķu™‹Eeô[^_]ÂĮ@ü‰xôÆ8ëŌ‰Ã‹E‹Aô=tUįčˇä˙˙ƒė Sčü˙˙˙´&ŧ'WVS‹|$‹\$ƒėj hęWčü˙˙˙ƒÄë#ƒė)ØPS^Wčü˙˙˙ƒÄ jhøWčü˙˙˙ƒÄƒėhôSčü˙˙˙ƒÄ…‰ÆuƃėSWčü˙˙˙ƒÄ jhôWčü˙˙˙ƒÄ[^_Ѝt&Sƒė‹\$jčü˙˙˙ĮÆ@Į@Į@ Į@‰ĮCĮCƒÄ[ЍļŋSƒė‹D$‹…Ût"‹‹@=uƒė Sčü˙˙˙‰\$ ƒÄ[éü˙˙˙ƒÄ[Ív‰\$ƒÄ[˙ā´&ŧ'‹D$‹T$9Pt39Pt‰T$‹‰D$éü˙˙˙´&Į@‰T$‹‰D$éü˙˙˙fĮ@‰T$‹‰D$éü˙˙˙vŧ'‹D$‹Ã´&‹D$‹ļ@Ѝt&‹D$‹Æ@Ѝt&‹D$‹@$‰D$éü˙˙˙‹D$‹@$‰D$éü˙˙˙‹D$‹P$‹BX+BTÁøЍ´&ŧ'‹D$‹@$‰D$éü˙˙˙ƒė ē1ɋD$‹@$ƒĀTč‡á˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTčgá˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTčGá˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTč'á˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTčá˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTčįā˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTčĮā˙˙ƒÄ Ðf‹D$‹@$‹ė‹€čÍļŋ‹D$‹@$‹ô‹€đÍļŋSƒė‹D$‹X$Sčü˙˙˙ƒÄ1Ō…Ā~ƒÄ‰Đ[Í´&ƒė ÃˆSčü˙˙˙ƒÄƒđ‰ÂƒÄ‰Đ[Ívŧ'Sƒė‹D$‹X$Sčü˙˙˙ƒÄ…Ā~ƒÄ¸[ÍļÃˆ‰\$ƒÄ[éü˙˙˙t&VS‹D$ ‹L$‹X$1Ā…Éx‹s`‹Sd)ōÁú9Ņ} ‹Ž…Ōx‹CT‹ˆ[^Í´&ŧ'‹D$‹@$ˆÃfVS‹D$ ‹\$‹H$1Ā…Ûx‹q`‹Qd)ōÁú9Ķ} ‹ž…Ōx‹AT‹[^Í´&ŧ'‹D$‹@$ĖÐf‹D$‹@$‹@Ѝt&‹D$‹@$‹€āÃf‹D$‹@$ƒĀlЍt&‹D$‹ø…Ōt ‹€ĖÆ@ķÍļSƒėh@ čü˙˙˙ƒÄ…‰Ãt!ƒėh Pčü˙˙˙ƒÄ…Ātƒė Pčü˙˙˙ƒÄƒÄ[Ãh@ Shėjčü˙˙˙X˙5čü˙˙˙Į$čü˙˙˙‰öŧ'‹D$ ™÷|$;T$”ĀЍ´&ŧ'UW1íVSƒė‹D$0‹HT‰D$ ‹@X‰L$‰D$)ČÁø…Ā„,t&‹D$1Û1ɋ<¨‹W‹G ‰Ö)ÆÁū…öuyéņ´&ƒė˙vhčü˙˙˙‹F ƒÄ…Āt-‹…Āt'ƒėhß hčü˙˙˙‹F ƒÄ…Ā„Ø‹čAŪ˙˙ƒė j čü˙˙˙‹G ‹WƒÄš‰ÖƒÃ)ÆÁū9ķsk‹4˜€~té„Éu†ƒė˙wh čü˙˙˙‹GƒÄ…Āt)‹…Ōt#ƒėhę hčü˙˙˙‹GƒÄ…Ātr‹čËŨ˙˙ƒė j čü˙˙˙ƒÄé1˙˙˙‰öŧ'‹D$ ‹HT‹@X‰L$‰D$‹D$+D$ƒÅÁø9Å‚Øū˙˙Ą‰D$0ƒÄ[^_]éü˙˙˙v1Āé#˙˙˙‰öŧ'1Ā댍ļŋVSƒė‹\$‹t$‹ƒØ9đt…Āt ƒė ‹P˙RƒÄ‰ŗØƒÄ[^Ѝļŋ‹T$‹Š„ÂˆA…ÉDÂЍļUWVS‹D$‹xT‹pX)ūÁū…öt6‹h`1ۍt&‹Ÿ‹H‹P1Ā)ĘÁú…Ōtt&‰ƒĀ9Đuö‰\ƒÃ9ķuĶ[^_]Í´&ŧ'ļD$Ívŧ'¸Ívŧ'UWVSƒė‹t$,‹|$0Včü˙˙˙‹/ƒÄ ‰ÃPVUčü˙˙˙ƒÄ1Ō…Āu ëē‰ƒÄ ‰Đ[^_]ÃSƒė \$‰D$Sh čü˙˙˙ƒÄ„ĀuƒėSh3čü˙˙˙ƒÄ„ĀtMƒėSh#čü˙˙˙ƒÄ„Āt1ƒÄ[ЃėSh7čü˙˙˙ƒÄ„ĀuåƒėSh>čü˙˙˙ƒÄƒÄ[Ѝt&ƒėSh5čü˙˙˙ƒÄ„Āužëą‰öŧ'U‰åWVSƒė,‹E‹] ‰EԋE…Ā„Ķ…Û„ˍuāEڃėPh Včü˙˙˙Y_VuäVčü˙˙˙ƒÄ jh7Včü˙˙˙X}ÜZVWčü˙˙˙‰$čü˙˙˙ƒÄ PSWčü˙˙˙‹EäƒÄƒč =u{‹Eāƒč =u~‹]܃ė1˙‹CôPS˙u‰EĐčü˙˙˙ƒÄ…ĀtCô=ueeô‰ø[^_]Ív‹UĐU€}Ôļt„‰×tԃÂŋ<=Dúëōt&eô1˙‰ø[^_]Ít&UÛčÛ˙˙éx˙˙˙v‰ōč Û˙˙év˙˙˙t&‰ōčųÚ˙˙뒉ËE܃č =tUÛčāÚ˙˙‹Eäƒč =tUÛčËÚ˙˙‹Eāƒč =tUÛčļÚ˙˙ƒė Sčü˙˙˙‰Ã‹Eäƒč =tĶUÜč–Ú˙˙ëɉÃ밉ÃëÁļŋƒėj˙t$˙t$čü˙˙˙ƒÄ…Āt'ļ‰Đƒāßū˙˙vŧ'U´EÄčåo˙˙‹E¸ƒėh´ƒĀPčü˙˙˙_X‹E¸hƒĀPčü˙˙˙‹EÄƒÄ ˙pôP‹E¸ƒĀPčü˙˙˙‹Eăăč =„Øũ˙˙éīū˙˙´&Uāč@o˙˙‰Øéū˙˙‰öŧ'Māƒė ƒĀ(jQjRPčü˙˙˙ƒÄ …Ā…ū˙˙ģéŒũ˙˙ļ‹E¸ƒėjh0ƒĀPčü˙˙˙éÍü˙˙t&UāčØn˙˙é‰ũ˙˙vU´EĐčo˙˙EÜƒė ‹[Pčü˙˙˙‰ŪƒÄƒæ„F<~&‹E܃ėhĐƒĀPčü˙˙˙_X‹EÜVƒĀPčü˙˙˙ƒÄã€t‹E܃ėhæƒĀPčü˙˙˙ƒÄE˃ė˙uÜPčü˙˙˙‹EÜƒÄ …Āt ‹ƒė P˙RƒÄ‹E¸ƒėhƒĀPčü˙˙˙‹E¸Y[ƒĀhõPčü˙˙˙‹EĖƒÄ ˙pôP‹E¸ƒĀPčü˙˙˙‹E¸ƒÄ jhrƒĀPčü˙˙˙‹E¸ƒÄ j hĒƒĀPčü˙˙˙‹EĐƒÄ ˙pôP‹E¸ƒĀPčü˙˙˙‹E˃ăč =u2‹EЃč =„ü˙˙é2ũ˙˙‹E܃ėļ÷hˇƒĀPčü˙˙˙ééū˙˙Uāčnm˙˙ëĉËE˃č =tUāčUm˙˙‹EЃč =u@‹U¸…Ōt ƒė ‹ R˙QƒÄ‹E´ƒč =tUŗč m˙˙ƒė Sčü˙˙˙‰Ã‹E؃č =tĀUāčm˙˙ëļ‰ÃëĨ‰Ã‹E܅Ātœƒė ‹P˙RƒÄ뎉ËEăč =tŒëĘƒė ‰ÆS‰ķčü˙˙˙ƒÄéu˙˙˙‰Ã‹Eŧƒč =„b˙˙˙렉ÃéY˙˙˙‰Ãée˙˙˙‰Ã‹Eƒč =„?˙˙˙éz˙˙˙‰Ã‹Eȃč =„'˙˙˙éb˙˙˙vŧ'U‰åWVSƒė$‹]jSčü˙˙˙ƒÄ…‰ÆuSÆCĮC ĮC$ĮC(ĮC,ĮC0ĮC4ĮC8ĮC<ĮC@eô[^_]Ѝ´&}ähuhDjWčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙‰<$čü˙˙˙ƒÄéS˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙fU‰åWVSƒė‹u‹†Ø…Āt eô[^_]Ãfƒė j(čü˙˙˙Į‰Ã@Y_jPčü˙˙˙ƒÄ…‰Įu ÆCĮC$‰Ø‰žØeô[^_]Ѝt&EähuhDjPčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙XZWhčü˙˙˙Eä‰$čü˙˙˙ƒÄ놉ƃė Sčü˙˙˙‰4$čü˙˙˙‰ÆEäƒė Pčü˙˙˙ƒÄëܐ´&U‰åWVSƒė8‹]s Včü˙˙˙ƒÄ…‰EÔu1čü˙˙˙‰C<‹E ƒė ÆC8‰CVčü˙˙˙ƒÄ…‰Ãumeô[^_]Ѝt&}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YX˙uÔhčü˙˙˙‰<$čü˙˙˙ƒÄés˙˙˙t&}ähHhDjWčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙ƒÄeô[^_]Ãƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ļŋU‰åWVSƒė8‹]s Včü˙˙˙ƒÄ…‰EÔu1čü˙˙˙ƒė ‰C<‹CÆC8V‰EÔčü˙˙˙ƒÄ…‰Ãum‹Eԍeô[^_]Ãf}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YX˙uÔhčü˙˙˙‰<$čü˙˙˙ƒÄés˙˙˙t&}ähHhDjWčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙‹Eԃčeô[^_]Ãƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙vŧ'U‰åWVSƒė8‹]sVčü˙˙˙ƒÄ…‰EÔu9čü˙˙˙‰C ‹C$ƒė ‹€€ÆCV‰EÔčü˙˙˙ƒÄ…‰Ãuo‹Eԍeô[^_]Ít&}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YX˙uÔhčü˙˙˙‰<$čü˙˙˙ƒÄék˙˙˙t&}ähHhDjWčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙‹Eԃčeô[^_]Ãƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙fU‰åWVSƒė8‹]sVčü˙˙˙ƒÄ…‰EÔu9čü˙˙˙‰C ‹C$ƒė ‹€„ÆCV‰EÔčü˙˙˙ƒÄ…‰Ãuo‹Eԍeô[^_]Ít&}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YX˙uÔhčü˙˙˙‰<$čü˙˙˙ƒÄék˙˙˙t&}ähHhDjWčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙‹Eԃčeô[^_]Ãƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙fU‰åWVSƒė8‹E‹X{ Wčü˙˙˙ƒÄ…‰Æu?čü˙˙˙ƒė ‰C<‹sÆC8Wčü˙˙˙ƒÄ…‰Ãu~ƒė‹˙u V˙PƒÄeô[^_]Í´&Eäh<hDjP‰EÔčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙Y˙uÔčü˙˙˙ƒÄéc˙˙˙fEähHhDjP‰Į‰EÔčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙ƒÄé#˙˙˙ƒė ˙uԉÃčü˙˙˙‰$čü˙˙˙ƒė ˙uԉÃčü˙˙˙‰$čü˙˙˙ļU‰åWVSƒė‹u‹~0‹^,9ßuë[´&‹ƒč =u,ƒÃ9ßt=‹Cƒč =tāUäčøc˙˙‹ƒč =t؍t&UäƒÃčŨc˙˙9ßuˉöŧ'‹~,…˙t ƒė Wčü˙˙˙ƒÄ‹~$‹^ 9ßu$ët‹C ƒč =u;‹Cƒč =uFƒÃ9ßtO‹Cƒč =tŌUäčzc˙˙‹C ƒč =tʐt&Uäč`c˙˙‹Cƒč =tŊvUäƒÃčEc˙˙9ßu˛‹~ …˙t ƒė Wčü˙˙˙ƒÄƒė Včü˙˙˙ƒÄ…‰Ãu eô[^_]ÍvuähyhDjVčü˙˙˙ƒÄ jhlhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeô[^_]Ãƒė ‰ÃVčü˙˙˙‰$čü˙˙˙U‰åWVS‰Ãŋ}ƒė,‹B‰Eԋ…ĀtˆîƒøŋŦā‹Bš‹pô…öuāDÁMäƒė˙rPQčü˙˙˙Včü˙˙˙‹EäƒÄ ˙pôP‹EāƒĀPčü˙˙˙‹EāƒÄ jh°ƒĀPčü˙˙˙‰<$čü˙˙˙ƒÄ P‹EāWƒĀPčü˙˙˙‹MԃÄ…Étx‹}Ô1ƒÉ˙ōŽR‰Č÷ЃčP‹Eā˙uԃĀPčü˙˙˙ļƒÄƒė˙uāSčü˙˙˙‹EāƒÄ …Āt ‹ƒė P˙RƒÄ‹Eäƒč =u>eô‰Ø[^_]Ít&ŋĩé˙˙˙ļ‹Eāƒėh0ƒĀPčü˙˙˙뚍vŧ'‰ōčYa˙˙eô‰Ø[^_]ÉËEäƒč =tUßč8a˙˙ƒė Sčü˙˙˙‰Ã‹Eā…ĀtŲƒė ‹P˙RƒÄëː´&U‰åVSEô]đƒė‹U ‹učWū˙˙EîƒėP˙uôSčü˙˙˙XZSVčü˙˙˙‹EđƒÄƒč =u‹Eôƒč =u)Įeø[^]Ít&Uīč¨`˙˙‹Eôƒč =tڍv‰Úč‘`˙˙Įeø[^]ÉËEôƒč =tUīčm`˙˙ƒė Sčü˙˙˙‰Ã‹Eđƒč =tĶUīčM`˙˙ëɐvŧ'U‰åSƒė‹U ‹ …Éu‹]üÉÍvEôč€ũ˙˙ƒė ˙uôčü˙˙˙X˙5čü˙˙˙‹EôƒÄƒč =uƒė ˙5čü˙˙˙ƒÄ‹]üÉÍvUķčØ_˙˙ëŨ‰Ã‹Eôƒč =tUķčŋ_˙˙ƒė Sčü˙˙˙ļU‰åVSEėƒė‹]Pčü˙˙˙‹EėƒÄ j$hĖƒĀPčü˙˙˙ƒÄ…Û„{ƒė Sčü˙˙˙ƒÄ P‹EėSƒĀPčü˙˙˙‹EėƒÄƒėjh‰ƒĀPčü˙˙˙‹EėƒÄ j?hôƒĀPčü˙˙˙‹EėƒÄ jh4ƒĀPčü˙˙˙ƒÄ…Û„1ƒė Sčü˙˙˙ƒÄ P‹EėSƒĀPčü˙˙˙‹EėƒÄƒėj hɃĀPčü˙˙˙‹EėƒÄ j>hTƒĀPčü˙˙˙‹EėƒÄ j=h”ƒĀPčü˙˙˙‹EėƒÄ j=hÔƒĀPčü˙˙˙‹EėƒÄ jChƒĀPčü˙˙˙‹EėƒÄ j hÖƒĀPčü˙˙˙YEô[˙uėPčü˙˙˙X]đ‹uôZ˙u˙u Sčü˙˙˙ƒÄ V˙uđhâ˙5čü˙˙˙‹EđƒÄƒč =uw‹Eôƒč =uZ‹Eė…Āt ƒė ‹P˙RƒÄeø[^]ËEėƒėh0ƒĀPčü˙˙˙é†ū˙˙´&‹Eėƒėh0ƒĀPčü˙˙˙éĐū˙˙´&‰Účš]˙˙띍´&Uëč¨]˙˙é|˙˙˙‰Ã‹Eđƒč =tUëčŒ]˙˙‹Eôƒč =tUëčw]˙˙‹Eė…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‰ÃëˉÃë܍vU¸ô‰åWVSuä}Üƒė ‹U ‹]V…ŌDĐRWčü˙˙˙‹EƒÄ…ĀxoEƒėPVčü˙˙˙‰<$}āWčü˙˙˙ƒÄ jh“Wčü˙˙˙ƒÄ VWSčü˙˙˙‹EāƒÄ ƒč =u[‹Eäƒč =u^‹E܃č =u+eô‰Ø[^_]t&ƒėWSčü˙˙˙‹E܃ăč =tՉōč\˙˙eô‰Ø[^_]vUÛčx\˙˙뛍ļ‰úči\˙˙뙉ËE܃č =tUÛčP\˙˙ƒė Sčü˙˙˙‰Ã‹Eāƒč =tUÛč0\˙˙‹Eäƒč =tžUÛč\˙˙ë´ëЉÃëãvU‰åWVSuāƒė$‹E‹]‹} ˙0Včü˙˙˙‹EāƒÄ ‹@ô…Āu&ƒėWSčü˙˙˙ƒÄ‹Eāƒč =uTeô‰Ø[^_]ƒėW}äWčü˙˙˙ƒÄ jhrWčü˙˙˙ƒÄ VWSčü˙˙˙‹EäƒÄ ƒč =t¯Ußč€[˙˙ëĨļUäčp[˙˙eô‰Ø[^_]‰ËEāƒč =tUßčM[˙˙ƒė Sčü˙˙˙‰Ã‹Eäƒč =tĶUßč-[˙˙ëÉëå‰öŧ'Uē:¸*‰åWVSMā}ԃė0ƒ}‹uQEÂPWčü˙˙˙E؉$čü˙˙˙‹^+ƒÄÁûiÛÍĖĖ˃û„8‹E؃ėhNƒĀPčü˙˙˙‹EÔƒÄ ˙pôP‹E؃ĀPčü˙˙˙X‹EØZhrƒĀPčü˙˙˙‹EØY_ƒĀhYPčü˙˙˙X‹EØZSƒĀPčü˙˙˙_X‹EØhdƒĀPčü˙˙˙‹F+ƒÄ1ۃø~P´&ƒėSVčü˙˙˙‰Į‹EØƒÄ jhrƒĀPčü˙˙˙X‹EØZWƒĀPčü˙˙˙‹F+ƒÃƒÄÁøiĀÍĖĖĖ9Ã|ˇE؃ėÆEāĮEäPEāPčü˙˙˙Y[P˙učü˙˙˙XEäZjPčü˙˙˙ƒÄ‹E؅Āt ‹ƒė P˙RƒÄ‹Eԃč =…Ĩ‹Eeô[^_]ƒėjVčü˙˙˙‰ÃƒÄ‹9EtXEāƒėÆEāhNĮEäPčü˙˙˙ZYWPčü˙˙˙Y^hrPčü˙˙˙_ZhnPčü˙˙˙Y^SPčü˙˙˙_ZP˙učü˙˙˙éP˙˙˙‹E ƒė˙0˙sčü˙˙˙ƒÄ…Āt'‹EÆĮ@é7˙˙˙UāčøX˙˙‹Eeô[^_]EāƒėÆEāhNĮEäPčü˙˙˙Y^WPčü˙˙˙u܉Į‰4$čü˙˙˙‹EÜƒÄ j hyƒĀPčü˙˙˙XZVWčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄƒė˙u Wčü˙˙˙^_h‡Pčü˙˙˙ZYhnPčü˙˙˙^_SPčü˙˙˙Y[P˙učü˙˙˙élū˙˙‰Ã‹E܅Āt ƒė ‹P˙RƒÄEäƒėjPčü˙˙˙ƒÄ‹E؅Āt ƒė ‹P˙RƒÄ‹Eԃč =tUāč÷W˙˙ƒė Sčü˙˙˙‰Ãëēëú‰ÃëØëô‰Ãëŋ´&ŧ'U‰åWVS‰Ãƒė<‹E‹u ‰Mċ‹…„…Ʉ¸ƒė‰UĀQPčü˙˙˙‹UƒÄ…Ā•Ā8„Ĩ„Ō¸ēŠDƒėĮEĐÉEԍEāh›ÆEāĮEäPčü˙˙˙YUÄ_RPčü˙˙˙_ZhrPčü˙˙˙ZYhYPčü˙˙˙Y_}ĐWPčü˙˙˙YZVPčü˙˙˙u؉E‰4$čü˙˙˙‹MØƒÄ jh‡APčü˙˙˙XZV˙uĀčü˙˙˙‹E؃Ä…Āt ‹ƒė P˙RƒÄƒėhN˙uĀčü˙˙˙YUÔ^RPčü˙˙˙u܉E‰4$čü˙˙˙‹MÜƒÄ jhAPčü˙˙˙XZV˙uĀčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄEƒėP˙uĀčü˙˙˙ZYhrPčü˙˙˙ZYhŸPčü˙˙˙ZYWPčü˙˙˙Y_˙uPčü˙˙˙_ZhÃPčü˙˙˙ZYPSčü˙˙˙‹}äƒÄ…˙t‹ƒč =uAƒė Wčü˙˙˙ƒÄeô‰Ø[^_]Ív9Č”Ā8Â…[ū˙˙ÆĮCeô‰Ø[^_]Í´&‰ōčÁU˙˙ëļ‰ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E܅Ātâƒė ‹P˙RƒÄëԉËE؅ĀtËƒė ‹P˙RƒÄëŊvŧ'Sēƒė D$$‹\$PD$$P˙t$$‰Ø‹L$$čzũ˙˙ƒÄ‰Ø[S1Ōƒė D$$‹\$PD$$P˙t$$‰Ø‹L$$čMũ˙˙ƒÄ‰Ø[t&U‰åWVS‰Ã‰×ƒė<‹u ‰Mċ˙pôjP˙učü˙˙˙ƒÄƒø˙‰ų•Ā8Á„š„ÉēŠ¸DƒėĮEĐÉEԍEāh›ÆEāĮEäPčü˙˙˙YUÄ_RPčü˙˙˙_ZhrPčü˙˙˙ZYhYPčü˙˙˙Y_}ĐWPčü˙˙˙YZVPčü˙˙˙u؉E‰4$čü˙˙˙‹MØƒÄ jh‡APčü˙˙˙XZV˙uĀčü˙˙˙‹E؃Ä…Āt ‹ƒė P˙RƒÄƒėhN˙uĀčü˙˙˙YUÔ^RPčü˙˙˙u܉E‰4$čü˙˙˙‹MÜƒÄ jhAPčü˙˙˙XZV˙uĀčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄEƒėP˙uĀčü˙˙˙ZYhrPčü˙˙˙ZYhŸPčü˙˙˙ZYWPčü˙˙˙Y_˙uPčü˙˙˙_ZhÃPčü˙˙˙ZYPSčü˙˙˙‹}äƒÄ…˙t‹ƒč =u3ƒė Wčü˙˙˙ƒÄeô‰Ø[^_]Ѝt&ÆĮCeô‰Ø[^_]Ít&‰ōč!S˙˙ëĉËE܅Āt ƒė ‹P˙RƒÄPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E؅Ātâƒė ‹P˙RƒÄëԉÃëЍvŧ'Sēƒė ‹\$˙t$$˙t$$˙t$$‹L$$‰Øčœũ˙˙ƒÄ‰Ø[vS1Ōƒė ‹\$˙t$$˙t$$˙t$$‹L$$‰Øčoũ˙˙ƒÄ‰Ø[ļU‰åWVS‰Æ‰Ķƒė<‹E ‰Mċ˙pôjP˙učü˙˙˙ƒÄƒø˙•Ā8Ã„Ė„ÛēŠ¸DƒėĮEĖ/‰EЍEāh›ÆEāĮEäPčü˙˙˙_ZUÄRPčü˙˙˙Y[hrPčü˙˙˙_ZhYPčü˙˙˙YMĖ[QPčü˙˙˙]ԉĮ‰$čü˙˙˙‹E ƒÄ‰Ų‹‹Pôčvĩ˙˙ƒėSWčü˙˙˙‹EԃÄ…Āt ‹ƒė P˙RƒÄƒėh‡Wčü˙˙˙_ZhNPčü˙˙˙YUĐ[RPčü˙˙˙]؉Į‰$čü˙˙˙‹EØƒÄ jhƒĀPčü˙˙˙XZSWčü˙˙˙‹E؃Ä…Āt ‹ƒė P˙RƒÄEƒėPWčü˙˙˙[_hrPčü˙˙˙ZYhŸPčü˙˙˙[MĖ_QPčü˙˙˙]܉Į‰$čü˙˙˙‹EƒÄ‰Ų‹‹Pô蛴˙˙ƒėSWčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄƒėhÃWčü˙˙˙ZYPVčü˙˙˙‹}äƒÄ…˙t‹ƒč =u6ƒė Wčü˙˙˙ƒÄeô‰đ[^_]Ѝ´&ÆĮFeô‰đ[^_]Ít&‰ÚčQP˙˙ëÁ‰ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E؅Ātâƒė ‹P˙RƒÄëԉËEԅĀtËƒė ‹P˙RƒÄëŊ‰Ã‹E܅Āt´ƒė ‹P˙RƒÄëĻvSēƒė ‹\$˙t$$˙t$$˙t$$‹L$$‰Øč\ũ˙˙ƒÄ‰Ø[vS1Ōƒė ‹\$˙t$$˙t$$˙t$$‹L$$‰Øč/ũ˙˙ƒÄ‰Ø[ļU‰åWVS‰Æ‰Ķƒė<‹E‹} ‰Mċ‹…Ā„…Ō„ƒėRPčü˙˙˙ƒÄ…Ā•Ā8Ä „ÛēŠ¸DƒėĮEČ/‰EĖEāh›ÆEāĮEäPčü˙˙˙YUÄ[RPčü˙˙˙[ZhrPčü˙˙˙ZYhYPčü˙˙˙YMČ[QPčü˙˙˙‰Ã‹}Љ<$‰EĀčü˙˙˙XZ˙uĀWčü˙˙˙Y_PSčü˙˙˙‹EЃÄ…Āt ‹ƒė P˙RƒÄ}ԃė Wčü˙˙˙‹EÔƒÄ jh‡ƒĀPčü˙˙˙XZWSčü˙˙˙‹EԃÄ…Āt ‹ƒė P˙RƒÄƒėhNSčü˙˙˙YUĖ[RPčü˙˙˙]؉Į‰$čü˙˙˙‹EØƒÄ jhƒĀPčü˙˙˙XZSWčü˙˙˙‹E؃Ä…Āt ‹ƒė P˙RƒÄEƒėPWčü˙˙˙Y[hrPčü˙˙˙_ZhŸPčü˙˙˙YMČ[QPčü˙˙˙‰Ã‹E}܋‰<$‰EĀčü˙˙˙XZ˙uĀWčü˙˙˙ZYPSčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄƒėhÃSčü˙˙˙ZYPVčü˙˙˙‹]äƒÄ…Ût‹ƒč =uEƒė Sčü˙˙˙ƒÄeô‰đ[^_]Í´&9Đ”Ā8Ã…÷ũ˙˙ÆĮFeô‰đ[^_]Í´&‰úč!M˙˙벉ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E܅Ātâƒė ‹P˙RƒÄëԉËE؅ĀtËƒė ‹P˙RƒÄëŊ‰Ã‹EԅĀt´ƒė ‹P˙RƒÄëĻ‰Ã‹EЅĀtƒė ‹P˙RƒÄ돍ļŋSēƒė D$$‹\$PD$$P˙t$$‰Ø‹L$$čęü˙˙ƒÄ‰Ø[S1Ōƒė D$$‹\$PD$$P˙t$$‰Ø‹L$$čŊü˙˙ƒÄ‰Ø[t&U‰åWVSƒėl‹]ŨEŨU˜ŨE ŨUŨE(ŨUˆŲĘŪáŲáŨU ŲÉßéŨØrÆĮCeô‰Ø[^_]vu´ƒė ÆEāĮEäVčü˙˙˙‹E´ƒÄ jhĒƒĀPčü˙˙˙Y_VuāVčü˙˙˙‹E´ƒÄ…Āt ‹ƒė P˙RƒÄE ƒėPVčü˙˙˙}¸‰Æ‰<$čü˙˙˙‹E¸ƒÄ jhփĀPčü˙˙˙XZWVčü˙˙˙‹E¸ƒÄ…Āt ‹ƒė P˙RƒÄEƒėPVčü˙˙˙Y^hÂPčü˙˙˙}ŧ‰Æ‰<$čü˙˙˙‹EŧƒÄ ˙u¤˙u ƒĀPčü˙˙˙XZWVčü˙˙˙‹EŧƒÄ…Āt ‹ƒė P˙RƒÄ}ƒė Wčü˙˙˙‹EĀƒÄ jhĮƒĀPčü˙˙˙YXWVčü˙˙˙‹EƒÄ…Āt ‹ƒė P˙RƒÄEƒėPVčü˙˙˙}ĉƉ<$čü˙˙˙‹EÄƒÄ jh؃ĀPčü˙˙˙XZWVčü˙˙˙‹EăÄ…Āt ‹ƒė P˙RƒÄE ƒėPVčü˙˙˙}Č‰Æ‰<$čü˙˙˙‹EČƒÄ jháƒĀPčü˙˙˙YXWVčü˙˙˙‹EȃÄ…Āt ‹ƒė P˙RƒÄ}˃ė Wčü˙˙˙‹EĖƒÄ ˙uœ˙u˜ƒĀPčü˙˙˙XZWVčü˙˙˙‹E˃Ä…Āt ‹ƒė P˙RƒÄƒėhđVčü˙˙˙ZYMQPčü˙˙˙}Đ‰Æ‰<$čü˙˙˙‹EĐƒÄ jháƒĀPčü˙˙˙YXWVčü˙˙˙‹EЃÄ…Āt ‹ƒė P˙RƒÄ}ԃė Wčü˙˙˙‹EÔƒÄ ˙u”˙uƒĀPčü˙˙˙XZWVčü˙˙˙‹EԃÄ…Āt ‹ƒė P˙RƒÄƒėhķVčü˙˙˙ZYMQPčü˙˙˙}؉Ɖ<$čü˙˙˙‹EØƒÄ jháPRčü˙˙˙YXWVčü˙˙˙‹E؃Ä…Āt ‹ƒė P˙RƒÄ}܃ė Wčü˙˙˙‹EÜƒÄ ˙uŒ˙uˆƒĀPčü˙˙˙XZWVčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄƒėhPVčü˙˙˙ZYPSčü˙˙˙‹uäƒÄ…ö„|ü˙˙‹ƒč =uƒė Včü˙˙˙ƒÄeô‰Ø[^_]´&‰účQH˙˙ëØ‰ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E´…Ātâƒė ‹P˙RƒÄëԉËE¸…ĀtËƒė ‹P˙RƒÄëŊ‰Ã‹Eŧ…Āt´ƒė ‹P˙RƒÄëĻ‰Ã‹EĀ…Ātƒė ‹P˙RƒÄ돉ËEąĀt†ƒė ‹P˙RƒÄéu˙˙˙‰Ã‹EȅĀ„h˙˙˙ƒė ‹P˙RƒÄéW˙˙˙‰Ã‹EĖ…Ā„J˙˙˙ƒė ‹P˙RƒÄé9˙˙˙‰Ã‹EЅĀ„,˙˙˙ƒė ‹P˙RƒÄé˙˙˙‰Ã‹EԅĀ„˙˙˙ƒė ‹P˙RƒÄéũū˙˙‰Ã‹E؅Ā„đū˙˙ƒė ‹P˙RƒÄéßū˙˙‰Ã‹E܅Ā„Ōū˙˙ƒė ‹P˙RƒÄéÁū˙˙´&ŧ'U‰åWVSƒė4˙u˙u‹]čü˙˙˙ƒÄ„ĀuÆĮCeô‰Ø[^_]t&EƒėuÔPEØPčü˙˙˙E‰$Včü˙˙˙EāĮ$úÆEāĮEäPčü˙˙˙ZU YRPčü˙˙˙Y_hPčü˙˙˙_ZURPčü˙˙˙ZYh Pčü˙˙˙Y_VPčü˙˙˙u܉Į‰4$čü˙˙˙‹EÜƒÄ jhƒĀPčü˙˙˙XZVWčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄE؃ėPWčü˙˙˙ZYPSčü˙˙˙‹}äƒÄ…˙t‹ƒč =uMƒė Wčü˙˙˙ƒÄ‹Eԃč =u$‹E؃č =„ãū˙˙UāčŗE˙˙éÖū˙˙ļUāč E˙˙ëŌļ‰ōč‘E˙˙ëĒ‰Ã‹E؃č =tUāčxE˙˙ƒė Sčü˙˙˙‰ÃPPEäjPčü˙˙˙‹Eԃăč =tÍUāčHE˙˙뚉ËE܅ĀtĐƒė ‹P˙RƒÄëÂë U‰åWVSƒė$˙u˙u‹]čü˙˙˙ƒÄ„ĀuÆĮCeô‰Ø[^_]t&EāƒėÆEāhúĮEäPčü˙˙˙YU ^RPčü˙˙˙_ZhPčü˙˙˙YU^RPčü˙˙˙}؉Ɖ<$čü˙˙˙‹EØƒÄ j hPRčü˙˙˙XZWVčü˙˙˙‹U؃Ä…Ōt ‹ƒė R˙PƒÄEƒėPVčü˙˙˙}܉Ɖ<$čü˙˙˙‹EÜƒÄ jh+HQčü˙˙˙YXWVčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄEƒėPVčü˙˙˙^ZhÃPčü˙˙˙ZYPSčü˙˙˙‹uäƒÄ…ö„íū˙˙‹ƒč =uƒė Včü˙˙˙ƒÄeô‰Ø[^_]‰účšC˙˙ëŪ‰ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E؅Ātâƒė ‹P˙RƒÄëԉËE܅ĀtËƒė ‹P˙RƒÄëŊfU‰åWVSƒė$˙u˙u‹]čü˙˙˙ƒÄ„ĀuÆĮCeô‰Ø[^_]t&EāƒėÆEāhúĮEäPčü˙˙˙ZU YRPčü˙˙˙}؉Ɖ<$čü˙˙˙‹EØƒÄ jhPRčü˙˙˙YXWVčü˙˙˙‹U؃Ä…Ōt ‹ƒė R˙PƒÄEƒėPVčü˙˙˙}܉Ɖ<$čü˙˙˙‹EÜƒÄ jh2HQčü˙˙˙XZWVčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄEƒėPVčü˙˙˙ZYh+Pčü˙˙˙YU^RPčü˙˙˙^ZhÃPčü˙˙˙ZYPSčü˙˙˙‹uäƒÄ…ö„íū˙˙‹ƒč =uƒė Včü˙˙˙ƒÄeô‰Ø[^_]‰úč B˙˙ëŪ‰ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E؅Ātâƒė ‹P˙RƒÄëԉËE܅ĀtËƒė ‹P˙RƒÄëŊfSƒė‹\$˙t$,˙t$,˙t$,˙t$,Sčü˙˙˙ƒÄ$‰Ø[‰öŧ'Sƒė ‹\$˙t$,˙t$,˙t$,˙t$,˙t$,˙t$,Sčü˙˙˙ƒÄ$‰Ø[ƒė ‹T$BP‹B+BÁøPj˙t$ čü˙˙˙ƒÄÍļŋWVS‹|$‹G|w`ŸäVƒĀPjSčü˙˙˙ƒÄV‹GX1ö+GTÁøP‹G|ƒĀPSčü˙˙˙‹WT‹GXƒÄ)ĐÁø…Āt/‹˛ƒÆBP‹B+BÁøPjSčü˙˙˙‹WT‹GXƒÄ)ĐÁø9ÆrŌ[^_Í´&ŧ'ļD$‰D$éü˙˙˙fžD$‰D$éü˙˙˙féü˙˙˙vŧ'U‰åVSƒė‹]‹C…Āt ‹ƒė P˙RƒÄCƒė Pčü˙˙˙‹s ƒÄ…öt‹ƒč =…Œƒė Včü˙˙˙ƒÄ‹s…öt‹ƒč =u]ƒė Včü˙˙˙ƒÄ‹Cƒč =u‹ƒč =u eø[^]ЍU÷čØ?˙˙‹ƒč =tät&U÷čĀ?˙˙eø[^]Éöŧ'U÷č¨?˙˙뙍ļU÷č˜?˙˙ég˙˙˙‰ÆPPC jPčü˙˙˙ZCYjPčü˙˙˙‹CƒÄƒč =tU÷č_?˙˙‹ƒč =tU÷čK?˙˙ƒė Včü˙˙˙‰ÆCƒė Pčü˙˙˙ƒÄ랐´&ŧ'U‰åWVSƒė‹E‹x‹X Į9ßt%t&‹3…ötƒė Včü˙˙˙‰4$čü˙˙˙ƒÄƒÃ9ßuߋEƒė ƒĀ8Pčü˙˙˙‹EƒÄ‹@…Āt ƒė Pčü˙˙˙ƒÄ‹E‹@ …Āt ƒė Pčü˙˙˙ƒÄ‹E‹X…Ût‹ƒč =u4ƒė Sčü˙˙˙ƒÄ‹E‹@ƒč =ueô[^_]ÍUįč_>˙˙eô[^_]ÍUįčO>˙˙ë‰ËEƒė ƒĀ8Pčü˙˙˙ƒÄ‹E‹@…Āt ƒė Pčü˙˙˙ƒÄ‹E‹@ …Āt ƒė Pčü˙˙˙ƒÄ‹EƒėjƒĀPčü˙˙˙‹EƒÄ‹@ƒč =tUįčá=˙˙ƒė Sčü˙˙˙‰Ã뛍t&Sƒė‹\$Sčü˙˙˙‰\$ ƒÄ[éü˙˙˙t&U‰åWVSƒė,‹u‹FX‹~TĮ9ø‰EÔu%ëO´&ƒė Sčü˙˙˙‰$čü˙˙˙ƒÄƒĮ9}Ôt,‹…Ûtō‹‹@=tԃė S˙ЃÄƒĮ9}ÔuŨ‰öŧ'‹~L‹^H9ßuëDt&ƒė Pčü˙˙˙ƒÄƒÃ9ßt-‹…Ātķ‹‹Rútڃė P˙ԃÃÄ9ßuŨvŧ'‹†Ø…Āt ‹ƒė P˙RƒÄ†ƒė Pčü˙˙˙‹†üƒÄ…Āt ‹ƒė P˙RƒÄ‹žø…Ût/‹C …Āx ƒė Pčü˙˙˙ƒÄ‹ƒč =…’ƒė Sčü˙˙˙ƒÄ‹žĖ…Ût$‹‹@=…Nƒė Sčü˙˙˙‰$čü˙˙˙ƒÄ†ˆƒė Pčü˙˙˙‹^l‹FpƒÄ9Øt$´&‹…Āt ‹ƒė P˙RƒÄƒÃ;^puæ‹Fl…Āt ƒė Pčü˙˙˙ƒÄ‹F`…Āt ƒė Pčü˙˙˙ƒÄ‹FT…Āt ƒė Pčü˙˙˙ƒÄ‹FH…Āt ƒė Pčü˙˙˙ƒÄƒė ˙v@čü˙˙˙ƒÄ…Āt ‹ƒė P˙RƒÄƒė ˙v@čü˙˙˙ƒÄ…‰Ãu(F ƒė Pčü˙˙˙‹FƒÄƒč =uqeô[^_]Ít&}ähÎhDjWčü˙˙˙ƒÄ jhYhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙ƒÄ끃ė S˙ЃÄé¸ū˙˙Uäčû:˙˙eô[^_]ÍUäčë:˙˙éaū˙˙‰Ã‹Fƒč =tUãčĪ:˙˙ƒė Sčü˙˙˙‰ÃFlƒė Pčü˙˙˙ƒÄ‹F`…Āt ƒė Pčü˙˙˙ƒÄ‹FT…Āt ƒė Pčü˙˙˙ƒÄ‹FH…Āt ƒė Pčü˙˙˙ƒÄF@ƒė Pčü˙˙˙ƒÄF ƒė Pčü˙˙˙ƒÄéu˙˙˙‰Ã†ˆƒė Pčü˙˙˙ƒÄé|˙˙˙‰ÃëĪ‹Vl‰Ã…Ō„z˙˙˙ƒė Rčü˙˙˙ƒÄéi˙˙˙‰Ã†øƒėjPčü˙˙˙ƒÄ‹†Ė…Āt§ƒė ‹P˙RƒÄ뙉ˆü…ĀtČƒė ‹P˙RƒÄëē‰Į‹ƒč =tUäčĀ9˙˙‰ûë´ƒė ‰ÃWčü˙˙˙ƒÄé<˙˙˙‰Ã†ƒė Pčü˙˙˙ƒÄëĨfSƒė‹\$Sčü˙˙˙‰\$ ƒÄ[éü˙˙˙t&U‰åVSƒė‹]‹s$Į…öt$‹‹@=…˜ƒė Včü˙˙˙‰4$čü˙˙˙ƒÄƒė ƒÃSčü˙˙˙ƒÄ…‰Ãueø[^]Ѝ´&uôhyhDjVčü˙˙˙ƒÄ jhlhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeø[^]Ít&ƒė V˙ЃÄén˙˙˙ƒė ‰ÃVčü˙˙˙‰$čü˙˙˙ƒė ƒÃ‰ÆSčü˙˙˙‰4$čü˙˙˙´&Sƒė‹\$Sčü˙˙˙‰\$ ƒÄ[éü˙˙˙t&U‰åWVSuäƒė0‹]‹}CĮV˙u Pčü˙˙˙ƒÄ…˙„0ƒė jčü˙˙˙ƒÄ ‰EÔVW‰ĮPčü˙˙˙ƒÄ‰{‹EƒėĮC ĮCĮCĮCĮC‰C$‹EĮC ÆC,ĮC0ĮC4‰C(C8jPčü˙˙˙ƒÄ…‰ĮuQÆCPĮCXĮC\ĮC`ĮCdĮChĮClĮCpĮCtĮCxeô[^_]ÍļhuhDjVčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙ZYWhčü˙˙˙‰4$čü˙˙˙ƒÄéX˙˙˙‰öŧ'ĮCéäū˙˙‰Æ‹C…Āt ƒė Pčü˙˙˙ƒÄ‹C …Āt ƒė Pčü˙˙˙ƒÄPPCjPčü˙˙˙ƒÄ‹Cƒč =tUãč—6˙˙ƒė Včü˙˙˙ƒė ‰ĮV‰ūčü˙˙˙ƒÄ뚃ė ˙uԉÆčü˙˙˙ƒÄ뾉ÆëēļU‰åWVSƒė4‹]˙u ‹}‹uSčü˙˙˙XCZ˙uPčü˙˙˙ƒÄ…˙„<ƒė jčü˙˙˙‰Á‰EԍEäƒÄ PW‰ĪQčü˙˙˙ƒÄ‰{…ö„˙ƒė jčü˙˙˙‰ĮEäƒÄ PVWčü˙˙˙ƒÄ‰{ ‹EƒėÆCÆCÆC‰C‹E ‰CCjPčü˙˙˙ƒÄ…‰ÆuPÆC4ĮC<ĮC@ĮCDĮCHĮCLĮCPĮCTĮCXĮC\eô[^_]Ѝt&}ähuhDjWčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙YXVhčü˙˙˙‰<$čü˙˙˙ƒÄéV˙˙˙ļĮC é˙˙˙t&ĮCéŨū˙˙‰ÆC RRjPčü˙˙˙ƒÄPPCjPčü˙˙˙ƒÄ‹Cƒč =tUãč­4˙˙‹ƒč =tUãč™4˙˙ƒė Včü˙˙˙ƒė ‰ÆWčü˙˙˙ƒÄ랉ÆëĪƒė ‰ÆWčü˙˙˙ƒÄ뚉Æë–ƒė ˙uԉÆčü˙˙˙ƒÄ딉ÆëfSƒė‹\$ ‹C;Ct@…Āt ‹T$$‰‹CƒĀ‰C‹C‰Â+SÁú;C ‰T$ t9…Āt‰ƒĀ‰CƒÄ[Ѝ´&ƒėT$(RPC Pčü˙˙˙ƒÄëŧ‰öŧ'ƒėƒÃT$RPSčü˙˙˙ƒÄëŧ´&Ą‹Hô…ÉuÍvU‰åWVSƒė0jj:hčü˙˙˙ƒÄƒø˙‰Ã„ uØPjhƒÃVčü˙˙˙ĄƒÄ‹@ô9ÇUEÜj˙ShPčü˙˙˙Į$čü˙˙˙Į‰ĮĮ$čü˙˙˙‰ÃXCZĮĮC˙˙˙˙VPčü˙˙˙^XEÜPC Pčü˙˙˙‰$čü˙˙˙‰_E׍]äƒÄ PhØSčü˙˙˙ZYS˙wčü˙˙˙‹EäƒÄƒč =…‚‹E‰}⋀ˋH ;H„Š…Ét‰9‹H ƒÁ‰H ‹E܃č =u^‹E؃č =u1eô[^_]Ѓė˙5h čü˙˙˙X˙5čü˙˙˙ƒÄëĶt&‰ÚčQ2˙˙ëÆ´&Uāč@2˙˙éq˙˙˙v‰Úč12˙˙뙍´&UāƒėƒĀRQPčü˙˙˙ƒÄél˙˙˙PShhčü˙˙˙‰Ã‹E؃č =tUÖčį1˙˙ƒė Sčü˙˙˙‰Ã‹Eäƒč =tUāčĮ1˙˙‹G…Āt ƒė ‹P˙RƒÄƒė Wčü˙˙˙ƒÄ‹E܃č =tŸUÖč“1˙˙땉ƃė S‰ķčü˙˙˙ƒÄëˉƋCƒč =táUäčh1˙˙ë׉Ãëē‰ÃëĒ‰Æ‹C ƒč =tŌUäčG1˙˙ëȉÃéw˙˙˙´&ŧ'ƒė ‹T$‹B ;Bt!…Āt ‹L$‰‹B ƒĀ‰B ƒÄ Ívŧ'ƒėƒÂL$QPRčü˙˙˙ƒÄëې´&ƒė‹D$ ‹L$$‹‰L$ ‹B ;Bt…Āt‰‹B ƒĀ‰B ƒÄÍt&ƒėƒÂL$QPRčü˙˙˙ƒÄëᐐ´&VSƒė‹t$ ‹\$$‹F9ØtAƒėPVčü˙˙˙ƒÄ…Āt ƒė ‹P˙RƒÄ…Û‰^t‹‰\$ ‹B ;Bt…Āt‰‹B ƒĀ‰B ƒÄ[^Ѝt&ƒėƒÂL$QPRčü˙˙˙ƒÄëې´&U‰åWVS}äƒė@‹]‹E ‰CCĮWhPčü˙˙˙C ĮC ‰[ĮC‰[‰CC ZYjP‰EĀčü˙˙˙ƒÄ…‰Æ…CƒėÆC8h‰EčEÔPčü˙˙˙ƒÄ…‰Æ…‹EԃėĮCHĮCLĮCPĮCTĮCX‰C@‹EÄĮC\ĮC`ĮCdĮCh‰CDƒˆĮClĮCpĮCtÆCxĮC|˙˙˙˙Įƒ€Įƒ„jP‰Eŧčü˙˙˙ƒÄ…‰Æ…ŗĖƒė ƃ Įƒ¨ĮƒŦĮƒ°Įƒ´Įƒ¸ĮƒŧĮƒĀĮƒÄĮƒČVčü˙˙˙ĮƒØÆƒÜĮƒāĮƒäĮƒčĮƒėĮƒđĮƒôĮƒøĮ$čü˙˙˙YZĮ‰ƒüEāhPčü˙˙˙ƒÄ…‰EÄ…ē‹Eāƒė ĮƒĮƒĮƒ ƃ‰ƒjčü˙˙˙ZYĮPVčü˙˙˙ƒÄeô[^_]Ѝ´&EĐhuhDjPčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙YXVhčü˙˙˙EЉ$čü˙˙˙ƒÄé„ũ˙˙vhčhDjWčü˙˙˙ƒÄ j1h8 hčü˙˙˙ƒÄ jhæhčü˙˙˙XZ˙uÄhčü˙˙˙‰<$čü˙˙˙ƒÄéíū˙˙´&EÜhuhDjPčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙YXVhčü˙˙˙E܉$čü˙˙˙ƒÄéŒũ˙˙vEØhčhDjPčü˙˙˙ƒÄ j1h8 hčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙E؉$čü˙˙˙ƒÄéŒü˙˙‰Æ‹Cƒč =tUĪčü+˙˙ƒė Včü˙˙˙‰ÆEЃė Pčü˙˙˙ƒÄëĪ‰Æ‹ƒü…Āt ƒė ‹P˙RƒÄPPƒøjPčü˙˙˙‹ƒĖƒÄ…Āt ƒė ‹P˙RƒÄƒė ˙uŧčü˙˙˙ƒÄClƒė Pčü˙˙˙‹C`ƒÄ…Āt ƒė Pčü˙˙˙ƒÄ‹CT…Āt ƒė Pčü˙˙˙ƒÄ‹CH…Āt ƒė Pčü˙˙˙ƒÄC@ƒė Pčü˙˙˙ƒÄƒė ˙uĀčü˙˙˙ƒÄé˙˙˙ƒė ‰ÆWčü˙˙˙ƒÄé6˙˙˙‰Æé|˙˙˙‰ÆE܃ė Pčü˙˙˙ƒÄéf˙˙˙‰Æëš‰ÆE؃ė Pčü˙˙˙ƒÄëĻ‰Æƒƒė Pčü˙˙˙ƒÄééū˙˙‰Æéøū˙˙‰Æé˙˙˙´&U‰åWVSƒė$‹]{ĮjWčü˙˙˙ƒÄ…‰Æu*ƒė ÆChčü˙˙˙‰ÆXZSVčü˙˙˙‰s$ƒÄeô[^_]ÍEähuhDjPčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙YXVhčü˙˙˙Eä‰$čü˙˙˙ƒÄéy˙˙˙‰ÃEäƒė Pčü˙˙˙‰$čü˙˙˙ƒė ‰ÃVčü˙˙˙ƒÄƒė Wčü˙˙˙‰$čü˙˙˙‰Ãëëvŧ'€=čt¸ ÃU‰åSƒėhččü˙˙˙ƒÄ…Āu¸ ‹]üÉÍļƒė h čü˙˙˙Į$ččü˙˙˙ƒÄ hh hčü˙˙˙ƒÄ¸ ‹]üÉÃƒė ‰Ãhččü˙˙˙‰$čü˙˙˙t&U‰åWVSƒėLĄ…Ā„ęƒėj:Pčü˙˙˙ƒÄ…Ā„ÜxuäE܃ė]ÄPWVčü˙˙˙XZVSčü˙˙˙‰$čü˙˙˙‹EäƒÄƒč =…ˆ‹EĀ8/„֍EāƒėPW}ĐWčü˙˙˙YXEÔWP‰Į‰E´čü˙˙˙‰<$čü˙˙˙ƒÄčü˙˙˙M܃ė}ČQ‹@$˙pWčü˙˙˙XEĖZWPčü˙˙˙Eˉ$čü˙˙˙}؍EĖƒÄ ˙u´PWčü˙˙˙‰<$Sčü˙˙˙‹E؃ăč =…]‹E˃č =… ‹Eȃč =… ‹Eԃč =… ‹EЃč =… ‹EċPô…Ōu/ƒėS˙učü˙˙˙ƒÄ‹Eăč =…o‹Eeô[^_]Âf€|˙/uʃė Včü˙˙˙Eā‹}äP‰E´čü˙˙˙EÜƒÄ W˙u´SPčü˙˙˙‹EāƒÄ ƒč =…ŧ‹Eäƒč =…›E܃ėP˙učü˙˙˙‹E܃ăč =„h˙˙˙‰ōč1'˙˙é\˙˙˙t&EĖ]܃ėPh} Sčü˙˙˙^Eā_SP‰Æ‰E´čü˙˙˙‰4$čü˙˙˙ƒÄčü˙˙˙UȃėR‹@$˙pEÔP‰Æčü˙˙˙Y}Ø[VWčü˙˙˙‰<$čü˙˙˙uäƒÄ ˙u´WVčü˙˙˙‰4$˙učü˙˙˙‹EäƒÄƒč =…÷‹E؃č =…‹Eԃč =…å‹Eāƒč =…ô‹E܃č =„”ū˙˙v‰ōčI&˙˙é…ū˙˙t&Uāč8&˙˙ékũ˙˙vEäƒėPh˙učü˙˙˙ƒÄéUū˙˙t&‰ōč &˙˙éčũ˙˙t&‰ōčų%˙˙ééũ˙˙t&‰ōčé%˙˙éęũ˙˙t&‰ōčŲ%˙˙éëũ˙˙t&‰ōčÉ%˙˙é—ũ˙˙t&‹U´č¸%˙˙éXū˙˙vUØč¨%˙˙é7ū˙˙vUĐč˜%˙˙éüū˙˙v‰ōč‰%˙˙é˙˙˙t&‰ōčy%˙˙éîū˙˙t&‰ōči%˙˙é˙˙˙‰Ã‹Eԃč =tUĐčM%˙˙‹Eāƒč =tUĐč8%˙˙‹E܃č =tUĐč#%˙˙ƒė Sčü˙˙˙‰ÃëɉËEāƒč =tĪUäč˙$˙˙ëʼnÃëÁ‰Ã‹Eäƒč =tUĐčâ$˙˙‹E؃č =„o˙˙˙UĐčÉ$˙˙éb˙˙˙‰Ã‹E؃č =t‰ōčŽ$˙˙‹E˃č =t‰ōčš$˙˙‹Eȃč =t‰ōč†$˙˙‹Eԃč =t‰ōčr$˙˙‹EЃč =u5‹Eăč =„1˙˙˙UÃčL$˙˙é$˙˙˙‰Ãë҉Ã둉ËE܃č =tˉōč)$˙˙ëÂëâ‰Ã‹Eăč =tUāč$˙˙‹Eäƒč =„Úū˙˙Uāčõ#˙˙éÍū˙˙‰Ã뇉ÃëډÃé˙ū˙˙‰Ã‹E؃č =„lū˙˙UäčÆ#˙˙é_ū˙˙‰Ã‹Eāƒč =tUØčĒ#˙˙‹Eäƒč =„4˙˙˙UØč‘#˙˙é'˙˙˙‰ÃëŪ‰Ãéûū˙˙ë÷‰ÃéŪū˙˙´&ƒė čü˙˙˙‹@$‹„ˆJ…ŌEÁƒė Pčü˙˙˙ƒÄЍt&ƒė čü˙˙˙‹@$‹„ˆJ…ŌEÁƒė Pčü˙˙˙ƒÄЍt&Sƒė‹\$čü˙˙˙ƒė‹L$QR˙p$Sčü˙˙˙ƒÄ‰Ø[ļSƒėčü˙˙˙‹@$‹€ø…Āt>ƒėh ˙p čü˙˙˙Y‰ÃXSjIčü˙˙˙XZS‹D$˙0čü˙˙˙‰$čü˙˙˙Į$čü˙˙˙PP˙5‹D$˙0čü˙˙˙Z˙5čü˙˙˙čü˙˙˙´&U‰åWVSĩÅū˙˙ėL‹]ë‰öŧ'čü˙˙˙ƒ8…ƒėjV˙sčü˙˙˙ƒÄƒø˙t܅Ā…uĮCë včü˙˙˙ƒ8u&ƒė ˙sčü˙˙˙ƒÄƒø˙tãĮC˙˙˙˙eô[^_]Ít&…Ôū˙˙ĩØū˙˙ƒėĮ…Ôū˙˙΍Čū˙˙PVčü˙˙˙X…Æū˙˙ZPh* Sčü˙˙˙ŊĖū˙˙ƒÄ hSWčü˙˙˙X…Đū˙˙Zh WPčü˙˙˙Y…Đū˙˙[Üū˙˙VPSčü˙˙˙Xĩāū˙˙Zh•SVčü˙˙˙_Ŋäū˙˙Xh VWčü˙˙˙Yĩčū˙˙[h# WVčü˙˙˙Včü˙˙˙t&…čū˙˙ƒė Ŋäū˙˙Pčü˙˙˙ƒÄ hËhjWčü˙˙˙Y^hŧ hčü˙˙˙‹•čū˙˙ƒÄ ˙rôRPčü˙˙˙‰<$čü˙˙˙‹…čū˙˙ƒÄƒč =„­ū˙˙‰úč¤ ˙˙éĄū˙˙ƒøu‚ļ…Åū˙˙ëū˙ëĮ‰ÃEЃė˙uØPčü˙˙˙‹EƒÄ…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‰Ã‹E˃č =tÍUČčõęū˙ëšëĩëŗ‰Ã‹Eȃč =tĻUÄčØęū˙뜃ė˙u˙u W‹]Ččü˙˙˙ƒÄ S˙uĖhâ˙5čü˙˙˙‹E˃ăč =tUÄč•ęū˙ƒė ˙5čü˙˙˙ƒÄčü˙˙˙‰Ã‹E˃č =tƒUÄčhęū˙év˙˙˙vU‰åWVS1˙ž@ƒėƒėj@Včü˙˙˙ƒÄ…‰Ã„¸EįjPSVčü˙˙˙ƒÄ ‰ÆPhWčü˙˙˙FôƒÄ=umļCs<@t2čü˙˙˙ƒė ‰C<‰EЋCÆC8W‰EÔčü˙˙˙‹EԉF‰<$čü˙˙˙ƒÄ…‰EĖ…¤‹EĐƒė ‰sÆC8‰C˙˙˙‰ÃéR˙˙˙‰Ãéf˙˙˙‰Ãéz˙˙˙‰Ã둉Ã먉Ãëŋ‰Ãéj÷˙˙‰Ãé~÷˙˙‰Ãé’÷˙˙‰ÃéĻ÷˙˙‰Ãé÷˙˙‰Ãé,÷˙˙‰Ãéīö˙˙‰Ãčü˙˙˙‹…Äū˙˙…Ā„÷ō˙˙ƒė Pčü˙˙˙ƒÄéæō˙˙ë U‰åWVS‰Ķƒė4‰EÔhĻ Rčü˙˙˙ƒÄ…Ā„ƒėhą Sčü˙˙˙ƒÄ…Ā„‹ƒėhģ Sčü˙˙˙ƒÄ…Ā„ZuähhŧjVčü˙˙˙_XhÄ hčü˙˙˙ZYhˆ Pčü˙˙˙‹ƒÄ ˙rôRPčü˙˙˙‰4$čü˙˙˙‹EԃÄĮĮ@Į@‹Eԍeô[^_]Ív‹}ԃė ĮĮGĮGjčü˙˙˙‰‰Ã‰EЃĀƒÄž ‰G}䍴&…ÛtƒėW˙6Sčü˙˙˙ƒÄƒÆƒÃū uߋEԉX‹Eԍeô[^_]Íļ‹}ԃė ĮĮGĮGj čü˙˙˙‰‰Ã‰EĐƒĀ ƒÄž ‰G}䍴&…ÛtƒėW˙6Sčü˙˙˙ƒÄƒÆƒÃū@ uߋEԉX농´&‹}ԃė ĮĮGĮGjčü˙˙˙‰‰Ã‰EЃĀƒÄžė ‰G}䍴&…ÛtƒėW˙6Sčü˙˙˙ƒÄƒÆƒÃū uߋEԉXé˙˙˙‰Ã‹Eԋ…Āt ƒė Pčü˙˙˙ƒÄƒė Sčü˙˙˙ƒė ‰ÃVčü˙˙˙‰$čü˙˙˙ë˃ė Pčü˙˙˙^_S˙uĐčü˙˙˙ƒÄčü˙˙˙뭉Ãčü˙˙˙ëσė Pčü˙˙˙XYS˙uĐčü˙˙˙ƒÄčü˙˙˙ƒė Pčü˙˙˙XYS˙uĐčü˙˙˙ƒÄčü˙˙˙‰Ãčü˙˙˙éb˙˙˙‰Ãčü˙˙˙éV˙˙˙´&U‰åWVSE܃ė<‹U ‹]‹učũ˙˙‹}āEăė jSW˙uÜPčü˙˙˙ƒÄ;}Ä„Ė}؃ėj˙uWčü˙˙˙XZjh°Včü˙˙˙‹ƒÄ ˙pôPVčü˙˙˙ƒÄ ‰Ãjh Pčü˙˙˙‹EØƒÄ ˙pôPSčü˙˙˙ƒÄ jhÃPčü˙˙˙‹E؃ăč =…Ũ‹uā‹]Ü9Ūu ë.vƒÃ9Ūt!‹ƒč =tí‰úƒÃč3ŋū˙9Ūu捴&‹u܅öt ƒė Včü˙˙˙ƒÄeô[^_]Ѝt&}ÔhĘ hŧjWčü˙˙˙YXhŦ hčü˙˙˙YZhŨ Pčü˙˙˙‹ƒÄ ˙rôRPčü˙˙˙ƒÄ ‰EĀjhč Pčü˙˙˙‹M ƒÄ ‹˙pôP˙uĀčü˙˙˙YZh Pčü˙˙˙‰<$čü˙˙˙ƒÄéŽū˙˙UÔčzžū˙é˙˙˙ƒė ‰ÃWčü˙˙˙ƒÄE܃ė Pčü˙˙˙‰$čü˙˙˙‰Ã‹E؃č =tŨUÔč<žū˙ë͉ÃëĪļU‰åWVSƒėp‹}G‰EEäPEœhģ Pčü˙˙˙XZh ˙učü˙˙˙Eāu¤ƒÄ P˙wVčü˙˙˙E܍] ƒÄ Ph% Sčü˙˙˙EœƒÄVSP˙učü˙˙˙‹E ƒÄƒč =…0‹E¤ƒč =…8‹G …Ātb‹…Āt\MāuŦƒėQPVčü˙˙˙E܍]¨ƒÄ Ph* Sčü˙˙˙EœƒÄVSP˙učü˙˙˙‹E¨ƒÄƒč =…†‹EŦƒč =…‚‹G…Ātb‹…Āt\Māu´ƒėQPVčü˙˙˙E܍]°ƒÄ Ph6 Sčü˙˙˙EœƒÄVSP˙učü˙˙˙‹E°ƒÄƒč =…‹E´ƒč =…ō€ē ¸ MāuŧDƒėQPVčü˙˙˙E܍]¸ƒÄ PhA Sčü˙˙˙EœƒÄVSP˙učü˙˙˙‹E¸ƒÄƒč =…‹Eŧƒč =…]ƒė˙w\˙wXSčü˙˙˙EāY^PEÄhH Pčü˙˙˙EăÄSPEœP˙učü˙˙˙‹Eăăč =…Ū‹Eƒč =…æEāƒėPEĖ˙u Pčü˙˙˙EÜƒÄ PEČhM Pčü˙˙˙E˃ÄPEČPEœP˙učü˙˙˙‹Eȃăč =… ‹E˃č =…¨E܃ė˙uPčü˙˙˙X‹EÜZ˙pôP˙učü˙˙˙‹E܃ăč =…‹G@+G<ƒøŽĒ1ÛĮE”駍t&‹Fē‹Hô…ÉDƒė˙vPEČPčü˙˙˙MČX‹F ZhrQMЉEŒQčü˙˙˙YXEĐ˙uŒPEĖPčü˙˙˙‹EĐƒÄ ƒč =…øEāƒėPEÔ˙uĖPčü˙˙˙E؍UÔƒÄ jRPčü˙˙˙XZjh_ ˙učü˙˙˙‹EØƒÄ ˙pôP˙učü˙˙˙ƒÄ j hx Pčü˙˙˙‹E؃ăč =…|‹Eԃč =…[Eȃė‹vhrPEāPčü˙˙˙YXEāVPEÜPčü˙˙˙‹EāƒÄ ƒč =…E܃ėPEäPčü˙˙˙Z˙uä˙učü˙˙˙‹EäƒÄƒč =…Īƒėj hƒ ˙učü˙˙˙‹E܃ăč =…™‹E˃č =u|‹Eȃč =u_‹G@+G<ƒÃÁøiĀÍĖĖĖ9ÍŃėS˙učü˙˙˙‰Æ‹ƒÄ…Āt΃E”‹E”ƒø…6ū˙˙ƒėh\ ˙učü˙˙˙ƒÄéū˙˙ļUäčXšū˙뗍ļUäčHšū˙éw˙˙˙vUäč8šū˙éZ˙˙˙vUāč(šū˙é$˙˙˙vUäčšū˙éäū˙˙vUäčšū˙é˜ū˙˙vUäčø¸ū˙éwū˙˙vUäčč¸ū˙éûũ˙˙v‹E”…Āt)ƒėh ˙učü˙˙˙‹EœƒÄƒč =u)eô[^_]ЃėhW ˙učü˙˙˙‹EœƒÄƒč =t׍Uä舸ū˙eô[^_]ÍUäčx¸ū˙‹E¤ƒč =„Čú˙˙Uäč_¸ū˙éģú˙˙UäčR¸ū˙‹Eŧƒč =„áû˙˙Uäč9¸ū˙éÔû˙˙Uäč,¸ū˙‹Eƒč =„ü˙˙Uäč¸ū˙é ü˙˙Uäč¸ū˙‹E˃č =„Xü˙˙Uäčíˇū˙éKü˙˙Uäčāˇū˙érü˙˙Uäč͎ū˙éû˙˙Uä诎ū˙éãú˙˙Uä蚡ū˙émú˙˙UäčŦˇū˙éqú˙˙‰Ã‹Eȃč =tUä萡ū˙‹E˃č =uB‹Eœƒč =tU›čnˇū˙ƒė Sčü˙˙˙‰Ã‹E¨ƒč =tUäčNˇū˙‹EŦƒč =tžUäč9ˇū˙봉ËE¸ƒč =tUäč ˇū˙‹Eŧƒč =tëЉÃëŋ‰Ã‹E ƒč =tUäčöļū˙‹E¤ƒč =„b˙˙˙ëĸ‰Ã‹Eäƒč =tUāčĖļū˙‹E܃č =tUāčˇļū˙‹E˃č =tUĐčĸļū˙‹Eȃč =„˙˙˙UÄč‰ļū˙é˙˙˙‰Ã봉ËEāƒč =tēUäčiļū˙밉ËE؃č =tUäčPļū˙‹Eԃč =tŒëЉÃëí‰Ã낉ËEЃč =tˆUäč"ļū˙é{˙˙˙‰Ãét˙˙˙‰Ã‹E܃č =„€ū˙˙éŊū˙˙‰Ãé˙˙˙‰Ãémū˙˙‰Ã‹Eăč =tUäčŲĩū˙‹Eƒč =„Eū˙˙é‚ū˙˙‰Ã‹E´ƒč =„-ū˙˙éjū˙˙‰Ãé„ū˙˙‰Ã‹E°ƒč =tԍUäčĩū˙ëʉÃéôũ˙˙‰Ãë§U‰åWVSEäƒė`‹u‹] PE°hą Pčü˙˙˙ƒÄ jh  Včü˙˙˙‹E°ƒÄ ˙pôPVčü˙˙˙EāƒÄ PE¸˙sPčü˙˙˙E܍}´ƒÄ Ph% Wčü˙˙˙E¸ƒÄPE°WPVčü˙˙˙‹E´ƒÄƒč =…î‹E¸ƒč =…öƒė Sčü˙˙˙‰EäEäY_PEŧPčü˙˙˙X}ĀEÜZPh9Wčü˙˙˙EŧƒÄPE°WPVčü˙˙˙‹EƒÄƒč =…Ž‹Eŧƒč =…ļƒė Sčü˙˙˙‰EäEäY_PEÄPčü˙˙˙X}ȍEÜZPh¤ Wčü˙˙˙EăÄPE°WPVčü˙˙˙‹Eȃăč =…n‹Eăč =…vƒė Sčü˙˙˙‰EäEäY_PEĖPčü˙˙˙X}ЍEÜZPh­ Wčü˙˙˙E˃ÄPE°WPVčü˙˙˙‹EЃÄƒč =….‹E˃č =…6Eā}؃ėPh:Wčü˙˙˙EÜƒÄ PEÔhļ Pčü˙˙˙EԃÄWPE°PVčü˙˙˙‹Eԃăč =…ķ‹E؃č =…ûE܃ė˙s4˙s0Pčü˙˙˙YXEāWhH Pčü˙˙˙E܃ÄPEāPE°PVčü˙˙˙‹EāƒÄƒč =…ŧ‹E܃č =…čC8ƒėPEäPčü˙˙˙X‹EäZ˙pôPVčü˙˙˙ƒÄ jh\ Pčü˙˙˙‹EäƒÄƒč =…Ž‹C1˙‰E¤+C ƒøëLv‹E¤+C ƒĮÁø9Į}9ƒėWSčü˙˙˙ƒÄ€xtŨƒėP˙sVčü˙˙˙‹CƒĮƒÄ‰E¤‹E¤+C Áø9Į|ĮƒėjhŊ Včü˙˙˙‹E°ƒÄ ˙pôPVčü˙˙˙ƒÄ jh\ Pčü˙˙˙‹E°ƒÄƒč =…ųeô[^_]ÍUäčûąū˙‹E¸ƒč =„ ũ˙˙Uäčâąū˙éũü˙˙UāčÕąū˙‹Eŧƒč =„Jũ˙˙Uāčŧąū˙é=ũ˙˙Uāč¯ąū˙‹Eăč =„Šũ˙˙Uā薱ū˙é}ũ˙˙Uā艱ū˙‹E˃č =„Ęũ˙˙Uāčpąū˙éŊũ˙˙Uäčcąū˙‹E؃č =„ū˙˙UäčJąū˙éøũ˙˙Uäč=ąū˙‹E܃č =„<ū˙˙Uäč$ąū˙é/ū˙˙Uāčąū˙éeū˙˙Uäč ąū˙eô[^_]ÉËEāƒč =tUäčë°ū˙‹E܃č =uB‹E°ƒč =tU¯čɰū˙ƒė Sčü˙˙˙‰Ã‹E´ƒč =tUä芰ū˙‹E¸ƒč =tžUä蔰ū˙봉ËEăč =tĨUāč{°ū˙뛉ËEЃč =tUāčb°ū˙‹E˃č =„s˙˙˙ëˉÃëé‰Ã‹Eäƒč =„Z˙˙˙ëŗ‰Ã뉉ÃéM˙˙˙‰Ã‹Eԃč =tUäč°ū˙‹E؃č =„%˙˙˙éb˙˙˙‰Ã‹Eŧƒč =„ ˙˙˙éc˙˙˙‰Ã‹Eȃč =„C˙˙˙Uāč˯ū˙é6˙˙˙‰Ã‹Eƒč =tģUā蝝ū˙뱉Ãéģū˙˙‰ÃëŽfU‰åWVSEäƒėp‹}PE hĻ Pčü˙˙˙Y[hWčü˙˙˙ƒÄ jh Wčü˙˙˙‹E ƒÄ ˙pôPWčü˙˙˙‹E ƒÄē1ɋ@$‰E”ƒĀTč:Žū˙‰Eäu¤EäƒėPVčü˙˙˙X]¨EÜZPh9Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹E¨ƒÄƒč =…ŧ‹E¤ƒč =…Æ‹E ē1ɋ@$‰E”ƒĀTčĮ­ū˙‰EäuŦEäƒėPVčü˙˙˙YEÜ[]°Ph¤ Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹E°ƒÄƒč =…s‹EŦƒč =…}‹E ē1ɋ@$ƒĀTčW­ū˙‰Eäu´EäƒėPVčü˙˙˙X]¸EÜZPh­ Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹E¸MāƒÄ‰M”ƒč =…'‹E´ƒč =…Luƒė˙u”h:Včü˙˙˙E܍]ŧƒÄ Phļ Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹EŧƒÄƒč =… ‹Eƒč =…‹E uăė‹@$˙°ė˙°čVčü˙˙˙Y[]Č˙u”hÄ Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹Eȃăč =…΋Eăč =…p‹E u˃ė‹@$˙°ô˙°đVčü˙˙˙X]ĐZ˙u”hH Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹EЃÄƒč =…)‹E˃č =…ū€=tg‹E uԃė‹@$‹€ā‰EäEäPVčü˙˙˙YEÜ[]ØPhÎ Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹E؃ăč =…’‹Eԃč =…t‹E ƒė‹@$‰EˆPEÜPčü˙˙˙X‹EÜZ˙pôPWčü˙˙˙‹E܃ăč =…ME؃ėPEähÚ Pčü˙˙˙‹u”EÔƒÄ Ph% Včü˙˙˙EäƒÄPE VPWčü˙˙˙‹EāƒÄƒč =…g‹Eäƒč =…oƒėh\ Wčü˙˙˙‹E ƒÄ1ۋp$‹VT‹FX)Ѓø~fvŧ'‹N`‹FdĮE”)ČÁø9Ã} ‹™…Āx‹š‰E”ƒė ˙u”čü˙˙˙ƒÄ…Ā~ƒė˙u”Wčü˙˙˙‹E ƒÄ‹p$‹VT‹FXƒÃ)ĐÁø9Ã|¤ƒėjhã Wčü˙˙˙‹E ƒÄ ˙pôPWčü˙˙˙ZYh\ Pčü˙˙˙‹E ƒÄƒč =…¯eô[^_]ËU”čãĒū˙éū˙˙‹U”čÖĒū˙éaū˙˙UäčÉĒū˙éõũ˙˙UäčŧĒū˙éƒũ˙˙Uäč¯Ēū˙éĘũ˙˙‹U”čĸĒū˙é§ü˙˙Uäč•Ēū˙‹Eƒč =„ëü˙˙Uäč|Ēū˙éŪü˙˙UäčoĒū˙é%ũ˙˙UÜčbĒū˙‹Eäƒč =„‘ū˙˙‹U”čIĒū˙é„ū˙˙Uäč<Ēū˙eô[^_]ÍMā‰Ęč*Ēū˙‹E¤ƒč =„:û˙˙Mā‰ĘčĒū˙é+û˙˙Mā‰ĘčĒū˙‹EŦƒč =„ƒû˙˙Mā‰ĘčåŠū˙étû˙˙‰ĘčŲŠū˙éÍû˙˙UäčĖŠū˙éĻũ˙˙‰Ã‹Eŧƒč =tUäč°Šū˙‹Eƒč =uB‹E ƒč =tUŸčŽŠū˙ƒė Sčü˙˙˙‰Ã‹Eȃč =tUäčnŠū˙‹Eăč =tžUäčYŠū˙봉ËE´ƒč =tĨUāč@Šū˙뛉ËE°ƒč =tUāč'Šū˙‹EŦƒč =„s˙˙˙ëˉÃëé‰Ã‹E؃č =t‹U”čų¨ū˙‹Eԃč =„E˙˙˙‹U”čā¨ū˙é8˙˙˙‰ÃëŪ‰Ã‹EЃč =tUäčū˙‹E˃č =„ ˙˙˙éI˙˙˙‰Ãëæ‰Ã‹E܃č =„đū˙˙é-˙˙˙‰Ã‹Eāƒč =tUÜčw¨ū˙‹Eäƒč =„Ãū˙˙UÜč^¨ū˙éļū˙˙‰ÃëŪ‰Ã‹E¸ƒč =„íū˙˙Uāč:¨ū˙éāū˙˙‰Ã‹E¤ƒč =„ū˙˙éÕū˙˙‰Ãésū˙˙‰Ã‹E¨ƒč =tԍUāč˙§ū˙ëʉÃéFū˙˙‰Ãéū˙˙´&ŧ'U‰åWVS ˙˙˙ėô‹uFPSčü˙˙˙‰$čü˙˙˙XŊ$˙˙˙ZSWčü˙˙˙Wčü˙˙˙ƒÄ„Āu5ƒė˙vhæ ˙5čü˙˙˙_˙5čü˙˙˙Į$čü˙˙˙´&ƒėh ˙včü˙˙˙ƒÄ…‰…˙˙˙tŽ…`˙˙˙ƒė Pčü˙˙˙‹ÆEԋ Į…`˙˙˙ĮEĐÆEՋCôĮEØĮEÜĮEāĮE䉝,˙˙˙‰Œ,˙˙˙Į…0˙˙˙…,˙˙˙CôY^jPčü˙˙˙XĄŊ4˙˙˙‹ Z‰…4˙˙˙‹@ôø‰jPčü˙˙˙‹5‹‹Fô‰”,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ ‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙YX…8˙˙˙Į…8˙˙˙Į…X˙˙˙Į…\˙˙˙ P…`˙˙˙Pčü˙˙˙XZ˙u Wčü˙˙˙ZŊ(˙˙˙…,˙˙˙YPWčü˙˙˙X˙ĩ˙˙˙˙ĩ(˙˙˙čü˙˙˙‹…(˙˙˙ƒÄƒč =…ōƒė ˙ĩ˙˙˙čü˙˙˙‹…\˙˙˙ƒÄĮ…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =…Ũ…T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙‹Fô‹ ‹‰Œ,˙˙˙Ą‹ ‰…4˙˙˙‹@ô‰”4˙˙˙‹Cô‰,˙˙˙‰Œ,˙˙˙…`˙˙˙Į…`˙˙˙‰$čü˙˙˙‹…$˙˙˙ƒÄƒč =uH‹… ˙˙˙ƒč =u eô[^_]Ѝ´&•˙˙˙čĨ¤ū˙éūū˙˙•,˙˙˙蕤ū˙eô[^_]Ѝt&•,˙˙˙č}¤ū˙ëĢv‰účq¤ū˙é˙˙˙‰Ã…,˙˙˙ƒė Pčü˙˙˙ƒÄ‹…$˙˙˙ƒč =t •˙˙˙č=¤ū˙‹… ˙˙˙ƒč =t •˙˙˙č"¤ū˙ƒė Sčü˙˙˙‰ÃëØ‰Ã‹… ˙˙˙ƒč =tፕ,˙˙˙čøŖū˙ëԉͅ`˙˙˙ƒė Į…`˙˙˙Pčü˙˙˙ƒÄé{˙˙˙‹Sô‹ ‰,˙˙˙‰Ã‰Œ,˙˙˙ëʼnÃéZ˙˙˙‰Ã‹…(˙˙˙ƒč =„2˙˙˙•˙˙˙葪ū˙é"˙˙˙‰Ã…8˙˙˙ƒė Pčü˙˙˙^…,˙˙˙_hPčü˙˙˙ƒÄél˙˙˙U‰åWVSƒėdhhčü˙˙˙ƒÄ…Ā„EĀ}ŧƒėĮE´˙˙˙˙ĮE¸˙˙˙˙P˙5WĮEĐĮEÔĮEØčü˙˙˙ƒÄĮEÜĮEāĮEä1Ûë ´&^ƒėSj|Wčü˙˙˙ƒÄƒø˙‰Æ„ƒ‹Eŧ‰ō)ڋ@ô9ÇšEĖRSWPčü˙˙˙ƒÄ‹Eā;Eät:…ĀtM˃ė]ÜQPčü˙˙˙‹EāƒÄƒĀ‰Eā‹E˃č =tUČčeĸū˙냍vMĖ]܃ėQPSčü˙˙˙ƒÄëЍvŧ'‹Eŧ‹@ô9Ø‚Žj˙S]ČWSčü˙˙˙ƒÄ‹Eā;Eä„Õ…ĀtƒėSP]Üčü˙˙˙‹EāƒÄƒĀ‰Eā‹Eȃč =…š‹E܋]ЋuԋUä‰EЋEā9ķ‰]܉uā‰EԋE؉U؉Eäuë1ļƒÃ9Ūt!‹ƒč =tíU˃Ã蚡ū˙9Ūuåļ‹]܅Ût ƒė Sčü˙˙˙ƒÄ‹Eŧƒč =…‹UЋEÔĮEĀ˙˙˙˙)ĐÁøƒøt&]ăėhh<Sčü˙˙˙Sčü˙˙˙eô1Ā[^_]ÍE´ƒėƒÂPRčü˙˙˙ƒÄ„ĀtÍE¸ƒėP‹EЃĀPčü˙˙˙ƒÄ„ĀtŠEƒėP‹EĐƒĀ Pčü˙˙˙ƒÄ„Āt‹EЃė j‰E čü˙˙˙‰Ã‹MĀ‹u¸XZ˙u S‰M¤‹}´čü˙˙˙‰{‰sƒÄ‹}ԋuЋE¤9÷‰C u ë+ƒÆ9÷t!‹ƒč =tíU܃Æ肠ū˙9÷uåļ‹}Ѕ˙t ƒė Wčü˙˙˙ƒÄeô‰Ø[^_]ÍUÜčS ū˙éâū˙˙UĖčF ū˙éYū˙˙ƒėS]ÜPSčü˙˙˙ƒÄé2ū˙˙v‰Ã‹Eăč =tUÜč ū˙EЃė Pčü˙˙˙‰$čü˙˙˙t&PShhčü˙˙˙]܉ƃė Sčü˙˙˙‹EŧƒÄƒč =tUÄčÁŸū˙‰ķëŦ‰Æ‹Eȃč =tĖUĖčϟū˙ëÂPShhčü˙˙˙ƒė ‰ÆS‰ķčü˙˙˙ƒÄém˙˙˙‰Æ‹E˃č =tUČčgŸū˙냉ÃéM˙˙˙´&ŧ'U‰åWVS‰ÃƒėƀÜčü˙˙˙‹ŗø‰Į9đt5…öt+‹F …Āx ƒė Pčü˙˙˙ƒÄ‹ƒč =uZƒė Včü˙˙˙ƒÄ‰ģø…˙t ‹ƒĖÆ@€{xt$ƒė Sčü˙˙˙‰$čü˙˙˙ƒÄeô[^_]Ѝ´&‰Øč‰ū˙ëĶ´&Uį訞ū˙뜋‰ÃAô=tUį萞ū˙ƒė Sčü˙˙˙ļ‹D$€¸ÜtķÐé˙˙˙t&ŧ'éü˙˙˙t&ŧ'éü˙˙˙vŧ'U‰åWVSEȃėX‹}Pčü˙˙˙‹EƒÄ ‹˙pôP‹EȃĀPčü˙˙˙G‰E´‰$čü˙˙˙‹G$‰$čü˙˙˙‹P+ƒÄ‰ĐÁøiĀĢĒĒĒ…Ā…:‹E‹…Āt ‹Hô…É…îEЃė˙uČPčü˙˙˙‹E UĮ[^‰EԋER‹]Đ…Ā¸EEPEØPčü˙˙˙X‹EZS‰E܍EāPčü˙˙˙YEä^uĖVSPčü˙˙˙‹EЃÄƒč =…Ô‹G$ƒė ]ԃĀ@Pčü˙˙˙‹_Z‹SP˙R‹u ƒÄ…öt(€=tĮ ļ€=…9ƒė Sčü˙˙˙X˙u´čü˙˙˙‹EȃÄ…Āt ƒė ‹P˙RƒÄeô[^_]Ív‹EȃėhƒĀPčü˙˙˙‹EƒÄ ‹˙pôP‹EȃĀPčü˙˙˙ƒÄéŪū˙˙t&‹EȃėhrƒĀPčü˙˙˙^X‹EČh[ƒĀPčü˙˙˙‹EČY[ƒĀh Pčü˙˙˙‹G$‰$čü˙˙˙‹P+ƒÄ‰ĐÁøiĀĢĒĒĒ…ĀŽaū˙˙\@ũÁãëfƒë ƒûô„Jū˙˙‹G$ƒė Pčü˙˙˙‹0EĖƒÄ Ū˙v˙6Pčü˙˙˙X‹EČZjhrƒĀPčü˙˙˙‹EĖƒÄ ˙pôP‹EȃĀPčü˙˙˙‹EČƒÄ jh°ƒĀPčü˙˙˙‹FƒÄ ˙pôP‹EȃĀPčü˙˙˙‹E˃ăč =„c˙˙˙UÔ苛ū˙éV˙˙˙‰ōč›ū˙é ū˙˙‰Ã‹E˃č =tUÔčc›ū˙ƒė ˙u´čü˙˙˙ƒÄ‹EȅĀt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‰Ãë≯ƒė S‰ķčü˙˙˙ƒÄë‰Ãëŧ‰Ã‹Eāƒč =t‰ōč ›ū˙‹E؃č =tUĖčôšū˙‹EЃč =t„UĖčߚū˙éw˙˙˙‰Ãë͉Ãëۃė jčü˙˙˙ZYSP‰Įčü˙˙˙ƒÄ hhWčü˙˙˙ƒė ‰ÆWčü˙˙˙ƒÄéd˙˙˙ļU‰åWVSuä]āƒė,‹}čü˙˙˙ƒėj˙p$Včü˙˙˙XZ˙u ‹ƒĀ PSčü˙˙˙‹ƒÄ ‹H‹P‹8‰MԉUĐčü˙˙˙ƒėVS˙uÔ˙uĐWPčü˙˙˙‹EāƒÄ ƒč =u‹Eäƒč =u#eô[^_]ÍvUßčšū˙‹Eäƒč =tāv‰Účé™ū˙eô[^_]ÉËEäƒč =tUßčʙū˙ƒė Sčü˙˙˙‰Ã‹Eāƒč =tĶUßčĒ™ū˙ëɐ´&U‰åWVSuāƒė0‹]CP˙s˙3h h h Včü˙˙˙ƒÄ€}āu`E܃ė Pčü˙˙˙‹EäƒÄ…Ā„€‹}؃ė Ph•hŧjWčü˙˙˙E܃ÄPWčü˙˙˙‰<$čü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄ‹}ä…˙t‹ƒč =uGƒė Wčü˙˙˙ƒÄ‹Cƒč =ueô[^_]Íļ¸éx˙˙˙ļ‰ō蚘ū˙eô[^_]ЍUÜ記ū˙ë¯ƒė ‰EÔWčü˙˙˙‹}ԃÄ‹E܅Āt ƒė ‹P˙RƒÄPPEäjPčü˙˙˙ƒÄ‹Cƒč =t‰ōč]˜ū˙ƒė Wčü˙˙˙‰Įë߉ĮëˉĮ봐´&U‰åWVSEԃė8‹u ‹^j˙uS˙6Pčü˙˙˙ƒÄ;]Ô„Eäƒė Pčü˙˙˙‹F‹ƒÄ‰Á)ŅÁų…É„Ņ1ۍ´&)ĐÁøƒč9Ä‘‹Eäƒė<šjhūƒĀPčü˙˙˙‹ƒÄ ˙pôP‹EäƒĀPčü˙˙˙‹EäƒÄ jhūƒĀPčü˙˙˙‹F‹ƒÃƒÄ‰Á)ŅÁų9Ųv^…Ût’ƒųv‹Eäƒėjh†ƒĀPčü˙˙˙‹‹FƒÄ)ĐÁøƒč9Ã…o˙˙˙‹Eäƒėjh ƒĀPčü˙˙˙ƒÄ‹éO˙˙˙´&Eāƒė˙uäPčü˙˙˙‹EäƒÄ …Āt ƒė ‹P˙RƒÄEäƒė Pčü˙˙˙‹EäY[ƒĀhhPčü˙˙˙‹EƒÄ ‹˙pôP‹EäƒĀPčü˙˙˙X‹EäZhžƒĀPčü˙˙˙‹EāƒÄ ˙pôP‹EäƒĀPčü˙˙˙‹Eä^_ƒĀh% Pčü˙˙˙‹EäY[ƒĀh[Pčü˙˙˙X‹EäZhÁƒĀPčü˙˙˙]ÜĮ$7 hhŧjSčü˙˙˙EäƒÄPSčü˙˙˙‰$čü˙˙˙‹EäƒÄ…Āt ‹ƒė P˙RƒÄ‹Eāƒč =ueô1Ā[^_]Íeô¸[^_]ÍUäčī•ū˙ë߉ËEāƒč =tUÛč֕ū˙ƒė Sčü˙˙˙ƒė ‰ÆS‰ķčü˙˙˙ƒÄ‹Eä…ĀtËƒė ‹P˙RƒÄëŊ‹Uä‰Ã…ŌtÉƒė ‹R˙PƒÄëģ‰ÃëАļŋU‰åWVS]܍u؃ė<‹U‰Øč‡Ō˙˙EփėP‹E ˙0Včü˙˙˙XZSVčü˙˙˙‰Į‹E؃ăč =u]‹Eā‹]Ü9؉EÄu ë1vƒÃ9]Ät ‹ƒč =tė‰ōƒÃč •ū˙9]Äu名t&‹E܉EċEąĀt ƒė Pčü˙˙˙ƒÄeô‰ø[^_]ÍU×čՔū˙뙉ƃė Sčü˙˙˙‰4$čü˙˙˙‰Æ‹E؃č =tāU×詔ū˙ë֐ļU‰åWVSƒė,čü˙˙˙‹@$‹€‹€„‹R ‹H‹p‹‹Z‹z9Ų‰}Ô„gû”ų”ÃĶ„Ŋ„Ō…Ĩ‰ķ‰ū}䋃ė W‰EÔčü˙˙˙‹MäƒÄ j?hôAPčü˙˙˙‹MäƒÄ j:hAPčü˙˙˙‹MäƒÄ jh> APčü˙˙˙‹EԃÄ…Ā„0‹Eäƒė˙uԃĀPčü˙˙˙‹EäƒÄƒėjhđƒĀPčü˙˙˙‹EäƒÄ jhV ƒĀPčü˙˙˙ƒÄ…ö„Ä‹EäƒėVƒĀPčü˙˙˙‹EäƒÄƒėjh\ ƒĀPčü˙˙˙‹EäƒÄ jhV ƒĀPčü˙˙˙ƒÄ…Û„Z‹EäƒėSƒĀPčü˙˙˙‹EäƒÄƒėj&hĖƒĀPčü˙˙˙‹EäƒÄ j=hôƒĀPčü˙˙˙‹EäƒÄ jhz ƒĀPčü˙˙˙uāĮ$7 hšhŧjVčü˙˙˙ƒÄWVčü˙˙˙‰4$čü˙˙˙‹EäƒÄ…Āt ƒė ‹P˙RƒÄ1ۍeô‰Ø[^_]Ѝt&‹]ÔéWū˙˙´&}äƒė ‹W‰EĐčü˙˙˙Y‹MäXhôAPčü˙˙˙‹MäXZAh4Pčü˙˙˙‹MЃÄ…ɄۋEäƒė˙uЃĀPčü˙˙˙‹EäƒÄƒėhđƒĀPčü˙˙˙X‹EäZh€ ƒĀPčü˙˙˙‹EԃÄ…Ā„ą‹Eäƒė˙uԃĀPčü˙˙˙‹EäƒÄƒėh’ ƒĀPčü˙˙˙ƒÄ…ö„=‹EäƒėVƒĀPčü˙˙˙‹EäƒÄƒėhrƒĀPčü˙˙˙‹EäY^ƒĀh4Pčü˙˙˙X‹EäZhtƒĀPčü˙˙˙‹EäY^ƒĀh´Pčü˙˙˙X‹EäZhôƒĀPčü˙˙˙uāĮ$7 hÅhŧjVčü˙˙˙ƒÄWVčü˙˙˙‰4$čü˙˙˙‹EäƒÄ…Ā„oū˙˙ƒė ‹P˙RƒÄeô‰Ø[^_]Ѝ´&eô쉨[^_]ЋEäƒėh0ƒĀPčü˙˙˙éũ˙˙´&‹Eäƒėh0ƒĀPčü˙˙˙é3ũ˙˙´&‹Eäƒėh0ƒĀPčü˙˙˙éÉü˙˙´&‹Eäƒėh0ƒĀPčü˙˙˙éēū˙˙´&‹Eäƒėh0ƒĀPčü˙˙˙éū˙˙´&‹Eäƒėh0ƒĀPčü˙˙˙éHū˙˙ƒė ‰ÃVčü˙˙˙ƒÄ‹Eä…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‰Ã‹Eä…Ātîƒė ‹P˙RƒÄëāƒė ‰ÃVčü˙˙˙ƒÄëۉÃëšfU‰åWVSƒėH‹] ‹uSčü˙˙˙‰‰$čü˙˙˙x ‰<$čü˙˙˙Sh  WP‰Į‰EÄčü˙˙˙FƒÄjWPčü˙˙˙ƒÄ…Ā”Ā„ĀˆFtN€;¸ EÃėjPF(Pčü˙˙˙ƒÄ…ĀĮEä”Ā„ĀˆFˆEāt&ƒė ˙uÄčü˙˙˙ƒÄeô[^_]Ѝt&ÆEāĮEäu܃ė Včü˙˙˙‹EÜƒÄ jh§ ƒĀPčü˙˙˙‰$čü˙˙˙ƒÄ P‹EÜSƒĀPčü˙˙˙‹EÜƒÄ j3h0ƒĀPčü˙˙˙EԍUāĮ$hŧ h RPčü˙˙˙]؃Ä˙uÔhĀhjSčü˙˙˙ƒÄVSčü˙˙˙‰$čü˙˙˙‹Eԃăč =uA‹E܅Āt ‹ƒė P˙RƒÄ‹]ä…Û„˙˙˙‹ƒč =u'ƒė Sčü˙˙˙ƒÄéķū˙˙ļ‰Úč9Žū˙ëļ´&‰ōč)Žū˙ëĐ‰Ã‹E܅Āt ƒė ‹P˙RƒÄPPEäjPčü˙˙˙‰$čü˙˙˙‰Ãëįƒė ‰ÆS‰ķčü˙˙˙ƒÄ‹Eԃč =tˇUĶčԍū˙뭉Ãë却&ŧ'U‰åSEō]ôƒėPhSčü˙˙˙ƒÄčü˙˙˙ƒėS˙u j˙j˙uPčü˙˙˙‹EôƒÄ ƒč =u ‹]üÉÍļUķčhū˙‹]üÉÉËEôƒč =tUķčLū˙ƒė Sčü˙˙˙fSƒėčü˙˙˙„Āu ƒÄ[Íļčü˙˙˙‹X$ƒė Sčü˙˙˙‹ƒÄ‹R ú…ƒhĖ jj ˙t$čü˙˙˙ƒÄčü˙˙˙„Āt5ƒė Sčü˙˙˙‹ƒÄ‹R úu\hâ jj ˙t$čü˙˙˙ƒÄƒÄ[Ãfƒė Sčü˙˙˙‹ƒÄ‹R úu7hÔ jj˙t$čü˙˙˙ƒÄ뛃ė P˙ԃÄéo˙˙˙fƒė P˙ԃÄ뙐t&ƒė P˙ԃÄ랐t&UWŊĶMbVS‰Ãƒė,čü˙˙˙‹p$‰ž„čü˙˙˙‹@$ƒė‹¸Ė‹SW˙PXZjD$$Pčü˙˙˙šč‰4$‰Č‹L$,÷l$(‰D$‰Č‰T$÷íÁųÁú)ʉЙ‰Ņ‰ÂT$L$‰T$‰L$čü˙˙˙‹ƒÄ‹R ú…āhdjj ˙sčü˙˙˙ƒÄ…‰Åt čü˙˙˙„Ā„Ąƒė Včü˙˙˙‹ƒÄ‹R ú…´1Ō¸hí RPUčü˙˙˙XZjD$$Pčü˙˙˙šč‰Č‹L$,÷l$(‰D$‰T$‰ČēĶMbÁų÷ęÁú)ʉЙD$T$+D$T$Y]‰CX‹SW‰S\˙P$ƒÄĮ†„ƒÄ,[^_]Ívƒė Učü˙˙˙ƒÄéN˙˙˙´&ƒė P˙ԃÄé˙˙˙vŧ'ƒė P˙ԃÄé>˙˙˙f‹D$€xuķÍt&éKū˙˙vŧ'UWVS‰Ãƒė<čü˙˙˙‹@$‰˜€‰D$ ‰Æčü˙˙˙‹@$ƒė‹¸Ė‹SW˙P‰4$čü˙˙˙‹ƒÄ‹R ú…_1Ō¸h RPSčü˙˙˙^]jD$4Pčü˙˙˙šč‹k‰Č‹L$<÷l$8‰D$ ‰T$$‰ČēĶMbÁų÷ęÁú‰Đ)ș‰Ņ‰ÂT$ L$$‰č+C 1ö‰T$ ‰L$$ƒÄƒøëCvŧ'‰č+C ƒÆÁø9Æ}*ƒėVSčü˙˙˙ƒÄ€xtŪčIũ˙˙‹kƒÆ‰č+C Áø9Æ|փėjD$4Pčü˙˙˙šč‰Č‹L$<÷l$8‰D$(‰T$,‰ČēĶMbÁų÷ęÁú‰Đ)șD$(T$,+D$ T$$Y˙t$‰C0‰S4čü˙˙˙‹ƒÄ‹R úuM¸1Ōh RPSčü˙˙˙X‹ZSW˙P(‹D$Į€€ƒÄL[^_]Ívŧ'ƒė P˙ԃÄé“ū˙˙fƒė P˙ԃÄ먐t&‹D$€x,uķÍt&éū˙˙vŧ'U‰åWVSƒė\‹ ‹]…É„ļ„Ā…ú€ģÜ„Åčü˙˙˙‹‹ø…É•Āƒė‰ĮļĀPhk hX čü˙˙˙^ƒđZļĀPSčü˙˙˙‰EČļƒÄ„Ā…Ž1Ā€=…v‰ƒāEāƒė‹ŗĖjPčü˙˙˙šč‰Č‹Mä÷mā‰EЉUԉČēĶMbÁų÷ęÁú‰Đ)șEĐUԉƒč‰“ėX‹Z˙sV˙P‰øƒÄ„Ā…IĄ‰Á‰E¸Áé…‰M¨„7ƒˆÆEŋĮEˉE¤´&‹{X‹CT9Įt!‰EЍv‹EЃė ˙0čü˙˙˙ƒEĐƒÄ‹EĐ9ĮuåEāƒėjPčü˙˙˙¸č‹Mä÷mā‰EЉUԉČēĶMbÁų÷ęÁú‰Đ)ș‰Ņ‰ÂUĐMԋEȃÄ…‰U‰MÄޤ€=…¯‹ƒė˙uĖ˙sV˙P X‹Z˙sV˙P‹CL‹{HƒÄ9øt0‰EĐë vƒĮ9}Đt ‹‹‹@=tęƒė ƒĮR˙ЃÄ9}Đuᐃė‹˙sV˙PƒÄčü˙˙˙„Ā…„‹CX‹ST‰Á)ЃøŽq1˙‰MĐé.´&ƒė‹˙uĖ˙sV˙P ƒÄEāƒėjPčü˙˙˙¸č‹Mä÷mā‰EЉUԉČēĶMbÁų÷ęÁú‰Đ)șEĐUÔ+EĀUÄƒÄ ‰ƒđ‹‰“ô˙uĖ˙sV˙P4‰$čü˙˙˙ƒÄ…ĀŽyÆEŋƒė Sčü˙˙˙ƒÄ€=…,ƒEĖ‹EĖ9E¸…4ū˙˙€}¨…*ū˙˙ļEŋƒđ‹ƒėˆEĐ˙sV˙R8ļEЃÄeô[^_]Ãė h„čü˙˙˙ƒÄeô1Ā[^_]ÃÆE¨ĮE¸éŋũ˙˙v‹š…Āx'‹‚€x,u(‹EЃĮ)ĐÁø9Į}9‹K`‹Cd)ČÁø9Į|Ōļ, č{ú˙˙‹CX‹STƒĮ‰EЋEĐ)ĐÁø9Į|ʍv‹ƒė˙sV˙P,‹CH‹{LƒÄ9øt7‰EĐë fƒī9}Đt(‹Wü‹‹@ =téƒė ƒīR˙ЃÄ9}Đuā´&ƒė‹˙sV˙P0ƒÄéNū˙˙t&‹ģāG˙=ž†w]ƒĮ¸˙Ÿ†Oø‰ģāé¨ū˙˙t&ƒė ˙u¤čü˙˙˙ƒÄ„Ā…qū˙˙épū˙˙t&‹ƒāƒė ‰ƒäSčü˙˙˙ƒÄé4ũ˙˙Eāh˜hËjPčü˙˙˙YXhđhčü˙˙˙YZh. Pčü˙˙˙YZWPčü˙˙˙YZhC Pčü˙˙˙YZhŸ†Pčü˙˙˙YZh§Pčü˙˙˙Eā‰$čü˙˙˙ƒÄé-˙˙˙‰ØčNä˙˙é/û˙˙‹ …ÉtDƒéē;Ƨ‰Č÷âÁęiŸ†)ÁAéaû˙˙ƒė ˆEĐSčü˙˙˙ļEЃÄeô[^_]øé¸ũ˙˙EāƒėjPčü˙˙˙‹MäēĶMbƒÄ‰ČÁų÷ę‰ĐÁø)ČiMāčÁ늉ÍEāƒė Pčü˙˙˙‰$čü˙˙˙fĄU‰åVS‹@ô…ĀtW1ö‹E1Ō‹H$ļˆ¸h(RPQčü˙˙˙ƒđƒÄ…öļØt€>t ƒė Včü˙˙˙ƒÄeø‰Ø[^]Í´&ƒė hV čü˙˙˙ƒÄ…‰Æt“€8tƒėh Pčü˙˙˙ƒÄ‰ÃPjjh:čü˙˙˙‰$čü˙˙˙ƒÄé^˙˙˙…ö‰Ãt€>t ƒė Včü˙˙˙ƒÄƒė Sčü˙˙˙vŧ'U‰åWVSƒė8‹]sVčü˙˙˙ƒÄ…‰EÔuačü˙˙˙‰C ‹C$ƒė ÆCPčü˙˙˙‹PƒÄJô‰H‹Büƒč =…įƒė ÆCVčü˙˙˙ƒÄ…‰Ãuqeô[^_]Éöŧ'}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YX˙uÔhčü˙˙˙‰<$čü˙˙˙ƒÄéC˙˙˙t&}ähHhDjWčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙ƒÄeô[^_]ÍvUä言ū˙é ˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ‰ÃVčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙vŧ'ƒė čü˙˙˙‰D$ƒÄ éü˙˙˙ļŋU‰åWVSƒė8‹]‹u {Wčü˙˙˙ƒÄ…‰EĐ…Ščü˙˙˙‰C ‹C$ƒė ÆCPčü˙˙˙‰Á‰EԃÄ‹@;A„!…Āt$‹ƒėƒÆƒĀ‰Pø‹Vü‰PüVPčü˙˙˙‹EԃÄ‹@‹UÔƒĀ ‰Bƒė ÆCWčü˙˙˙ƒÄ…‰Ãureô[^_]Ívŧ'Eäh<hDjP‰EÔčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙XZ˙uĐhčü˙˙˙Y˙uÔčü˙˙˙ƒÄé˙˙˙EähHhDjP‰Į‰EÔčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙ƒÄeô[^_]ÍļƒėVP˙uÔčü˙˙˙ƒÄéûū˙˙ƒė ˙uԉÃčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ˙uԉÃčü˙˙˙‰$čü˙˙˙ļU‰åS]čƒė,‹E ĮEô ‰Eė‹E‰Eđ‹E˙0Sčü˙˙˙Eô‰$Pčü˙˙˙‹EčƒÄƒč =u,čü˙˙˙UėƒėRPčü˙˙˙‹EôƒÄƒč =u‹]üÉЍt&Uįč(~ū˙ëʍļ‰Úč~ū˙‹]üÉÉËEôƒč =tUįčũ}ū˙ƒė Sčü˙˙˙‰Ã‹Ečƒč =tĶUįčŨ}ū˙ëɐvŧ'U‰åWVSƒė‹E‹} ‹@‹„°ˆJ…ŌEņ‹^$;^(tr…ÛtD‹ƒė‰GPCPčü˙˙˙‹G‰CYXG PC Pčü˙˙˙XGZPCPčü˙˙˙‹E‹^$ƒÄ‹@ƒÃ‰^$‹€Ėƒė‹WP˙R ƒÄeô[^_]Éöŧ'ƒėƒÆ WSVčü˙˙˙‹EƒÄ‹@ëÉƋCƒč =tUįč}ū˙ƒė Včü˙˙˙‰Æ‹C ƒč =tĶUįčā|ū˙ëɍ´&ŧ'U‰åWVSƒė‹}‹u ‹_$;_(tY…Ût>‹ƒė‰FPCPčü˙˙˙‹F‰CYXF PC Pčü˙˙˙XCƒÆZVPčü˙˙˙‹_$ƒÄƒÃ‰_$eô[^_]Éöŧ'G ƒėVSPčü˙˙˙ƒÄë܉ƋCƒč =tUįč6|ū˙ƒė Včü˙˙˙‰Æ‹C ƒč =tĶUįč|ū˙ëɍt&U‰åWVSƒė‹}‹u ‹_;_tY…Ût>‹ƒė‰FPCPčü˙˙˙‹F‰CYXF PC Pčü˙˙˙XCƒÆZVPčü˙˙˙‹_ƒÄƒÃ‰_eô[^_]Éöŧ'ƒėVSWčü˙˙˙ƒÄë߉ƋCƒč =tUįčy{ū˙ƒė Včü˙˙˙‰Æ‹C ƒč =tĶUįčY{ū˙ëɐļU‰åWVSƒė‹E‹u ‹x ‹_;_tV…Ût>‹ƒė‰FPCPčü˙˙˙‹F‰CYXF PC Pčü˙˙˙XCƒÆZVPčü˙˙˙‹_ƒÄƒÃ‰_eô[^_]ÍļƒėVSWčü˙˙˙ƒÄëâ‰Æ‹Cƒč =tUįčšzū˙ƒė Včü˙˙˙‰Æ‹C ƒč =tĶUįč™zū˙ëɐļU‰åWVSƒėD˙u˙u ‹]čü˙˙˙ƒÄ„Āueô[^_]Ívŧ'ƒė Sčü˙˙˙ƒÄ…‰Æ…Rčü˙˙˙‰CE˃ėÆCuĖP‹E˙0Včü˙˙˙XZVuĐVčü˙˙˙‹C0Y_‰EĀ‹C,VuØV‰Eŧčü˙˙˙XEāZVPčü˙˙˙_uÜXEāPVčü˙˙˙‹EāƒÄ}äƒč =…ƒƒėVWčü˙˙˙EÄÆ$W˙uĀ˙uŧPčü˙˙˙‹EäƒÄ‹uăč =…^‹E܃č =…]‹E؃č =…\‹EЃč =…[‹E˃č =…Z‹C09đ‰EĀ„´EāƒėP‹E˙pEÔPčü˙˙˙XEԃÆZPVčü˙˙˙‹Eԃăč =…#ƒė Sčü˙˙˙ƒÄeô[^_]Í´&}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YXVhčü˙˙˙‰<$čü˙˙˙ƒÄéTū˙˙ļ;s4„Ģ…öt*ƒė˙uVčü˙˙˙‹EY^ƒĀP‹EƒĀPčü˙˙˙‹C0ƒÄ‰EĀ‹EƒĀ‰C0é@˙˙˙v‰účIxū˙éqū˙˙t&Uāč8xū˙é•ū˙˙v‰úč)xū˙é—ū˙˙t&‰účxū˙é˜ū˙˙t&‰úč xū˙é™ū˙˙t&‰účųwū˙éšū˙˙t&‰účéwū˙éŅū˙˙C,ƒė˙uVPčü˙˙˙ƒÄéšū˙˙‰Æ‹Eāƒč =tUäčĩwū˙‹E؃č =tUÔč wū˙‹EЃč =tUÔč‹wū˙‹E˃č =tUÔčvwū˙ƒė Sčü˙˙˙‰4$čü˙˙˙‰Æ‹EĀ‹ƒč =tŪ‰účMwū˙ëÕƒė ‰ÃWčü˙˙˙‰$čü˙˙˙‰Æëž‰ÆëĨ‰ÆëŒ‰Æép˙˙˙‰Æ‹E܃č =„]˙˙˙Uāč wū˙éP˙˙˙‰Æ‹Eäƒč =tĶUāčîvū˙ëɉƋEԃč =„c˙˙˙냐ļU‰åVSƒė‹]ĮEô ‹“„…ŌtDuôƒėjhģ Včü˙˙˙‹›„ƒÄƒÃƒė˙u VSčü˙˙˙‹EôƒÄƒč =u8eø[^]Ћƒ€…Āt6uôƒėj hą Včü˙˙˙‹›€ƒÄƒÃ8밐t&Uķč8vū˙eø[^]ЍuôƒėhĻ Včü˙˙˙ƒÄÃˆé|˙˙˙‰Ã‹Eôƒč =tUķčúuū˙ƒė Sčü˙˙˙U‰åVS]đƒė˙u Sčü˙˙˙YEô^˙uPčü˙˙˙X‹EZS˙p$čü˙˙˙‹EôƒÄƒč =u‹Eđƒč =u#eø[^]Ít&Uīčuū˙‹Eđƒč =tāvUīčxuū˙eø[^]ÉËEđƒč =tUīčZuū˙ƒė Sčü˙˙˙ƒė ‰ÆSčü˙˙˙‰4$čü˙˙˙´&ŧ'ƒė čü˙˙˙ƒė˙t$˙t$Pčü˙˙˙ƒÄÐfU‰åSEėƒė Pčü˙˙˙X‹EėZ˙u ƒĀPčü˙˙˙YEđ[˙uėPčü˙˙˙X]ôEęZP˙uđSčü˙˙˙ƒÄčü˙˙˙ƒėS˙uPčü˙˙˙‹EôƒÄƒč =u*‹Eđƒč =u5‹Eė…Āt ƒė ‹P˙RƒÄ‹]üÉЍt&Uëčxtū˙‹Eđƒč =t΍v‰Účatū˙ë‰ËEė…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‰Ã‹Eôƒč =tUëč*tū˙‹Eđƒč =tĀUëčtū˙ëļ‰ÃëåļD$ÃķËD$…Āt‹‹B˙āķËD$…Āt‹‹B˙āķÃ1ĀËD$‹@$˙ā‹D$‹@(˙āķÃķÃķÃ1ĀÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃU‰åWVS}ä‰Ķ‰Æƒė8‰MÔWčü˙˙˙ƒÄ…Û‹EätSƒĀQQh|Pčü˙˙˙ƒÄ‰Ú‰øčĖ RRh˃ĀPčü˙˙˙ƒÄPP‹EähōXSčü˙˙˙‹UԃĉøčĖ ëƒĀSShŅPčü˙˙˙ëÉQQhP‹ƒÂRčü˙˙˙XZ˙uäVčü˙˙˙‹EäƒÄ …Āt,ƒė ‹P˙RƒÄë‰Ã‹Uä…Ōt ƒė ‹R˙PƒÄƒė Sčü˙˙˙eô‰đ[^_]ÐķÃķÃķÃķÃķÃķÃķÃķÃķÃéü˙˙˙éü˙˙˙éü˙˙˙éü˙˙˙éü˙˙˙éü˙˙˙éü˙˙˙éü˙˙˙˙˙,Xq˙˙''A€qĖą€ŧŗû€Ž€˙˙$Wo˙˙ 0DR˙˙ 0€Qwm˙˙ +@N˙˙6Yíœ˙˙ 5Ãun˙˙l•˜¤˙˙ B‘ĸĻ˙˙ Bh‚˙˙ iĐí˙˙5AQķ]ŒpŠî˙˙\e¯mÕĐ˙˙-Ž6•>°eА˙˙&›.Ô7ģQ›ļ˙˙5ÂAü[Âcâ–ÂŨ˙˙&'QxY˜“˙˙MVŅo˛Ė˙˙*%ē;|ž…׍đĮžĩ˙˙?\˛Ė˙˙ŒŲąœŗûö˙˙,B˙Ņ҇EŅę˙˙.wŊĩÖ˙˙IWm’ÖŧN“īĩĘ"ũ‡ĸ‹ĖN‡ŖĢÁ‡Ļ˙˙"8,Ĩvž˙˙A6ÆŠŋÆß˙˙*'2Ũi¤vÛ­ÄÜÛˆŨŋ˙˙+9ŽO)ÛŠBŽÖ’ōŠŽ‰˙˙,’ŗ ˇ˜ÉœŨ”Ëû˙˙o(hĄˆášĘƐ ŅŨ ķ Ĩˆ ŊøĘĮ Õ” ÷Į ĸ•ąŗžŲ ÉĻ įŲ Ž˙˙'đŠÕäŦˆ“ĘŽ§˙˙'“đģÉīĻČˆĄ˙˙-ōШ䐤÷æŦK÷‹Ķ˙˙-„ĸŦˆįĀ˧ŽÔS§ģƒ˙˙ a*›Áρ÷1Îü˙˙+E`ĶãĩЁĄ$ĶųĩŽÎ˙˙82ŠēŅåÜôĄ•ÜĒë%ē˜˙˙ +Ÿ@›oÜ‘ŸŊ›–˙˙+Ä1†@Šn†‰ÛĢÄĨ†Ö˙˙$Zt˙˙ %8R˙˙,Vp˙˙/qЏ˛ŧÂíŗ˙˙%\¤tŊ­¤č¸˙˙6Pēœ>˙˙ %Wr˙˙ %Wr˙˙I9b˙˙+Ũ‘ą üíD˙˙9ØŠÜŪÔ…ĐœŪÂĐí—ЍÍ˙˙FRĸgÂŊ˙˙FRĸgÂŊ˙˙9Š‰Ū……“œ‹É“ôŸ“Ō”˙˙FRĸgÂŊ˙˙"„ŽĩûÁÍČ˙˙!PAi˙˙+æ;ąDęWėá˙˙"0‚´Ī˙˙#ˇÍßí’Û˙˙%TEm˙˙l„’ĸ˙˙8F Ęwę•Ęå˙˙5$JärÅĶ…ņ?ēčāWÁËŪŋ˙˙ -G˙˙"'0é=ÕMŅVÍ^‰§b˙˙`?L… Yū f÷ xđ ’é Ŗâ ŗÛ ÄÔ ŅÍ âÆ ōŋ ƒ¸ “ą ¤Ē ŗäßË˙˙I-é<ĖHĸzé‚ЏßĶéæõķۇזĶĸí˙˙OŒYĢĻ˙˙."@´Lŗ\›j—sÔƒˇÚ´Ī˙˙AyäŨø˙˙)=?•Ūl¨‹•Ŗ,˙˙3%9Uƒäîõ(Š2”Ūüĸ˙˙.T}p‹˙˙0D&|mŠ˙˙8L&„u’˙˙@T&‡}•˙˙#&!V;ü”)ĖøčŒ˙˙EYjŸÆ/„˛­Ā˙˙,5ī Nuč Ō.ö  č ­ų Ķī Ąč ēaŽ Æč Ú.Ķ °č Áž É"č ú.­ đ[č Õ’ ūE– Ķ’ čp¤  – ô ˙˙ w§˙˙ ‚˛˙˙ 6¨œA˙˙ 6̤<˙˙+(‚T!Ô„;†Â3Ô„Đ Ôũ˙˙'ž:ĻHĸÖ˙˙'ž:ĻHĸÖ˙˙"?ŅJÕu•˙˙:#8ŋDåXÕdŨtĘ‚á–ŅŖŲąÆ•˙˙!†/Šē˙˙€”&ĘŊØ˙˙@T&Œ}š˙˙Pd&—Ĩ˙˙%xÂŒ&Õ¸ÂĐ˙˙#`t(Ÿ&Ô& ũ›Ž˙˙#`t(Ÿ&Ô&Ŗũžą˙˙#h|(˜§&Ü&Ģ…Ļš˙˙#h|(˜§&Ü&Ģ…Ļš˙˙$K-‡&Ÿą)é&´’¯Ä˙˙ĀÔ&ũ›˙˙0-™=‘i!™;•×FŦČŲ˙˙NTŅjuņīҝņė˙˙$Œ-Ŧ§˙˙ &jP:˙˙&%ŠŲŨÕôŖŋ%ŲĐ˙˙#"9éEšUˇ`‰Ĩé„˙˙/.ŦhåsĖĮ˙˙5#)%ŋ[šgŸwÃ…Ž‘ŖĄ˛¯ŊŠ˙˙5 &%ˇXąd—tģ‚ĻŽ›žĒŦĩĄ˙˙<)2&ƒe´qč˙Á›ŊĢģšäēƒß˙˙(&ė5ô[ėqđ“Íėĸ˙˙4äcč…Š!ä–˙˙'ÄVČxĨÄö˙˙4äcč…Š!ä–˙˙ ´O¸q•´æ˙˙4äcč…Š!ä–˙˙>&1¸_Ēžˇŧ与žļ<ļ˞øÛ–@˛­˙˙5äd膊!ä–˙˙"xN‘×ŋ÷0‘¸¨ØY‘Ŗ˙˙&fN˛Å›å0˛ĻņÆY˛–˙˙2dDĄĩĪÔ:ĄŸ¸ŊFĄæ¯Ąŗ˙˙:tIņÃÍáņ„ļĸ-ņāŸūNņŌˆđņƒ˙˙4äcč…Š!ä–˙˙4äcč…Š!ä–˙˙Zņpˆ‘ ņŸā-ņļģņŪÍü ņ­äË ņüūšņŧœ Ú-ņ˜ē ļņØØ ö-ņ´ö Ōņô” ’ņƒ˙˙4äcč…Š!ä–˙˙FRņmM‘Ëē鑌˙˙"O7é—€ĩ éæ—„)éû˙˙!Oé~€œ éÍ—ëBéû˙˙]­ė Õ§Ŧ˛đ ¨ô ĐüŠū­Ą×Ĩû>ŸÍŖķIŸģ đ ņ Ŧ÷˙˙]§œĪŨ‰Ų˛Ō¨ÎĐõŠņŗíŨé >¤Ķ  ų I¤Á Ō÷ Üä˙˙6d&œĒ˙˙ .ã]&č†ã¸˙˙$bFˇPÅ‹-ĮmɸÛî˙˙!Õû›Š—ŋ>‡Ęī[˙˙!Ú€ŖŸÄF”Ō÷[˙˙ޝŪų˙˙Ž%ŨŠ˙˙*ĶKČÃ˙˙S,§‡āĀø’“ÚÕ×īę”ô†đ§ĘØđė&ô•đŖ×å˙˙$,áp„&έÄáÜō˙˙% 5æEԍėĄ&ÂĘėŊ˙˙4$ā9ŠNøfôväü¤&ĐÍüË˙˙H"'hÂtÚˆŪŖ¯˛ÁēâŌûŨâΤÚŊÂŨ˙˙c%”Đ ÷É Ų° ũ¤&Đũí°(é Ŧ°Đü ä&ƒ ü °™ Ä& đ™ ˜˙˙"2â=Ã`t&­ žŨ˙˙ @u‡˙˙‹>GÄ O‹ €Ā ‘é ™¨ Ą¯ Ãą Ή áí ęėØ8Ā š¤ Ģī ßņ ˜Šŗąšš–ŨĖåĪ õČ €ˇ‡˙˙Ĩ7wŊÖ ŌČ æĪ üÆ ô ¤† ¸Ä žƒ ØíÍ ūķ ™Í ŽĒ:Ŧ úđ ‹@Å Îđ ūŲŦ ˆ™(ŗ ÄõŦ ¯ §į¯¯ Ē Á ˙˙8C0 ‘¤ĸ¨¯Ŧ°Ҏâžčí›˙˙9'c–„¨ŲšÕÆŅ×ÍčÉųÂ˙¤Ÿ˙˙/7EØWÔhĐxˉ­šŠ ĨĮ˙˙/7EØWÔhĐxˉ­šŠ ĨĮ˙˙0CQäcāt܄ؕšĻĩŦąĶ˙˙0CQäcāt܄ؕšĻĩŦąĶ˙˙ *=B]˙˙ô&kĘ Ą´ø Čč Đø ‹˜ ĀÔŖú ¸Ä Ëų Ü’ ęĢ ûÄ ‰ŋ Á ˛Ãà Øē ëä üæ Š⠛ü Šč ¯Ą 끠“Ā Ļž ĩŧ Æē ÔŨ Úßø$Ž ŗ  Ŧ Õ Ĩ á ž ō — €  † ‹ ˙˙Q IY‡j {šˆŌ™ëĻ„§yĨ…Œšî§ší÷ōé˙˙‹$K…’•™Ļ ĩŅČØÕßÛÁęûæ‹Ęž§ĢíąÍĘÛôíû€‚ĩ ŧąÃÂŽČßŧ˙˙# í6´AR´‰(íˆ˙˙5ˆYˆĄ˙%ÂÖ¯ģŪãî˙˙CW‰_*—˙˙'ØŠŽŨĒôܯŽĨ˙˙:FĘ[ęå˙˙+VbŦ}¨­‘Í8¨–š´¨Œ˙˙+:F¨a¤‘Ėą8¤úŦ˜¤Ÿ˙˙+:F¨a¤‘Ėą8¤úŦ˜¤Ÿ˙˙+:F¨a¤‘Ėą8¤úŦ˜¤Ÿ˙˙+:F¨a¤‘Ėą8¤úŦ˜¤Ÿ˙˙. ­;ŠJßVÜzÄ…šą­—˙˙2'î3ŌLv[ÛÖŽŸü´ŠH˙˙6%Õ1ŊDĩ—ąĻ¯Ëą××Î?ąĐ˙˙(iŦŦÚĖĮ˙˙ (eI\`˙˙E8~ôŊ1¤ĖŊ’€¤áĩŋžÁÚŸįÁūą¤Á˙˙0Aú™~˙˙0FŊ¯ÎØŊØ˙˙2JŪ¯ĐöŪų˙˙CW‰_*—˙˙g”&ĮŊÕ˙˙nœ&ĪÅŨ˙˙v¤&×Íå˙˙´&ęāû˙˙5ŸĀ&Šé,¤(÷ĪfÄ&í…˜Ģ˙˙%˙ĄžÁ$ņą‘Ŧŋ˙˙E ü—(ØÃ%÷(—Ŗ%Ô‚õ+ŦíËčũ’§˙€õ ŖŋŨ*áŲ*ũÕ*•Ņ*ąĘ*Á)Ō–)į’)üä/ĄŨ/ļÖ/ĘĪ/ŪČ/ķÁ/‡ē/ŗ/ąũ(Áö(Õī(ë…&°ø!ą “$š û# Jí#” ë/ŋ ´í#‡Ŗ4œœ4°•4ĀŽ4Ô‹)č„)î¯×ší#¤„3šũ2Íö2Ũī2ņ¸…‹‹ŋš…í#ŗë2Čį2Üã2ėė1€Š4”†4¨‚4Ž‹3Ķí#ėŋ6¸6•ą6ĨĒ6šÍ6ÍÆ6áÔ6į­$‹í#¤Ļ6šĸ6Íž6Ũ—6ņ6…‰6™‚6ŸĒ4ˇí#ĩÔí#íč1‚ ä1– ā1Ļ Ü1ē Õ1Î Î1Ô ‘0ķ í#Œ!é#Ą!å#ĩ!á#Å!Ũ#Ų!Ö#í!Ī#ķ!’""í#¨$Û6ũ*™+ą/Ž+¯/Ä+­/Ö+Ģ/ė+Š/‚,§/ˆ,š-Š,Å,Ŗ/Ú,Ÿ/đ,›/‚-”/˜-/Ž-†/´-/˙YNWw!ŧ›äĪ“ŅÜí‹øĖœû”ˇĘčī°Ģŧ˙˙%HÖWFŊ˜ÖŠU›Ö¸˙˙Į.šV˛gŖĒšŋŸĐË “š¨íšŒ€š•…Ļų ŨšņŦ…ĀŊšŌĨé‰ šŽšƒš“¯÷Öķčīų'ÉØķč°ŒŦ˜ÍžŦ’ ūšÆ ˙˙„,(Î dĘ vĀ ļÎ Ę‚ Üē ŠÎ °î š ‚Î –ą ¨‡ âÎ ÷Ú ‰Õ ĀÎ ŅĶ æū›Î Ēĩ “NÎ ģ ˙˙Ģ&Sƒˆë—ŠÔƒûŒ Šâ ăëÉ úËšƒÎŖŨŲ  ƒŗĒ› …ƒ˜ö §É ôƒˆÅ — ׃æú ƒ¤Įļ’é°ƒ– ˙˙B"Ë1Į7Q§ęĩđÔûôĸŽĮôø§Â˙A7' sÜÔđÚ“āÉØŖÆÁŠšÔī}˙˙JWûŠ1ųÕ<âļųÖŖœûĸ¸‡û Í¨ŖŪôYų˙˙ 2ĒpY˙˙$8EŒŌđš ęøX˙˙$@N×ō…¯"ę… ˙90,Ųžœ­ēËë!ƒĩĖčí˙˙O(‡FCĢęŊæÍĄķ‹Â‡×÷˝ŌGÆ‚ū–‘‹˙˙1¯IĪĘ˙˙(Ė=ĐfÔsúĐĮ˙˙-3|ŗ˜ŋĖĶß›¯‚ķŸĶî˙˙&­/Āģ˙˙9 gÆē Ėéé8¯ŗ“ įĒ ˆŋEē ŸE“ Ž ˙˙'%OēãĐRš¸ŽÂįėãŪ˙˙ ]x˙U>+hI”ÉžÅë†ģˇ­Ëķîū}}˙U>+hI”ËžĮíˆŋ’ģ¯Ī÷ō‚}}˙U>+hI”ÉžÅë†ģˇ­Ëķîū}}˙˙6äĻ B‡ î N˜ ˙U>+hI”ËžĮíˆŋ’ģ¯Ī÷ō‚}}˙˙ 5ĩŒI˙˙/7␤(ķĪ&„&Í­Ûî˙E88-¤*ãžĖáūįÉß­ĐË”Äßú}˙˙5>8ĸÃ×(ĩƒ'š&â€ĸ°Å˙˙#Œ/ŦDŒ§˙!3sHyWuŅØã}˙]R/D‘SČt‰˜šÎxĩÂá‹ö„…Û˜áĒߎ‚Ė8}˙˙AVšeŲ‰P˙˙*?ƒNŖy*˙˙*?€N v*˙˙-B€Q v*˙)T8V–›Ļ}˙YL'6 R^ęŠ<æ¨ÄîÕęų߈ۨ¤ũ#¨×ąļ}˙˙dbØn܆ā’äĄÄÂë֋ը䤁,ŧ&ÅåŒØĄĢˇØĻĶ˙˙ *‡ŋÚ˙˙+Ÿš˙˙ ą<ũDĪ€Ę...\n[ DEATH ] basic_string::substr%02X(null)\0autoTERMxtermxterm-colorxterm-256colorscreenscreen-256colorlinuxcygwinyestruet1[0;3%sm[----------] [ RUN ] %s.%s, where %s = %s and [ FAILED ] ]]>]]>Non-fatal failureSuccessFatal failure:: : Value of: Actual: Expected: ()" thrown in Unknown C++ exceptionWARNING: has value "". %s has value , which overflows. The value of flag --0Environment variable = , but have left unset. < , but you have =, . <>&'"&#x; (ignoring case) Which is: (Invalid Unicode 0x\'\\\a\b\f\r\t\v\x'\"" (no terminating NUL)NULL pointing to L"%testtests%s from %s, where %s = %s Google TestNote: %s filter = %s [==========] test casetest casesRunning %s from %s. [ OK ] (%s ms) %s from %s (%s ms total) TESTTESTS%s from %s ran. (%s ms total)[ PASSED ] %s. %2d FAILED %s YOU HAVE %d DISABLED %s %s, listed below: T_[WARNING][ INFO ][ FATAL ][ ERROR ]./src/gtest-port.ccOnly one stdoutstderr./src/gtest.cc./src/gtest-internal-inl.hfailed with error pthread_mutex_unlock(&mutex_)pthread_mutex_lock(&mutex_)Condition range > 0 failed. ) was requested, ).Death test: Result: failed to die. Error msg: Expected: Actual msg: Exited with exit status Terminated by signal (core dumped) ./src/gtest-death-test.ccevent=TestStart&name=event=TestCaseStart&name=event=TestProgramEnd&passed=event=TestPartResult&file=&line=&message=event=TestProgramStartFailure Unknown result type, you tried test cases.%s %sevent=TestEnd&passed=&elapsed_time=msevent=TestCaseEnd&passed=1 fatal failure1 non-fatal failureExpected: Actual: failures Actual: containing "" not a substring of Which is: The difference between is , which exceeds , where evaluates to , , and Expected: () != (), actual: vs ), actual: "" vs ") (ignoring case), actual: ") <= () pthread_key_delete(key_)Invalid shuffle range start : must be in range [0, ].Invalid shuffle range finish : must be in range [, 0xL' []unexpected status byte (, line posix::Close(read_fd()) != -1CHECK failed: File read_fd_ == -1pipe(pipe_fd) != -1child_pid != -1close(pipe_fd[0])close(pipe_fd[1])Death test count (fastUnknown death test style "" encounteredclose(args->close_fd)chdir("") failed: execve(, ...) in failed: xml) < () >= () > ( is listed more than once. No test named You forgot to list test Test @-h-?/?--help|stack != MAP_FAILEDtestsuitestestsuitetestcaseCondition false failed. Attribute is not allowed for element <>.="runnotrun > <failuresdisablederrors this->size() (which is %zu)vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)Global test environment set-up.Global test environment tear-downXML output file may not be null Could not write to the test shard status file "%s" specified by the %s environment variable. Invalid index (%d) into TestPartResultArray. C++ exception with description " is expected to be a 32-bit integer, but actuallyThe value of environment variable The default value %s is used. Invalid environment variables: you have Invalid environment variables: we require 0 <= Repeating all tests (iteration %d) . . . Note: This is test shard %d of %s. Note: Randomizing tests' orders with a seed of %d . capturer can exist at a time.Condition sockfd_ == -1 failed. MakeConnection() can't be called when there is already a connection.stream_result_to: getaddrinfo() failed: stream_result_to: failed to connect to Condition sockfd_ != -1 failed. CloseConnection() can be called only when there is a connection../include/gtest/internal/gtest-port.hpthread_mutex_destroy(&mutex_)Send() can be called only when there is a connection.stream_result_to: failed to stream to Cannot generate a number in the range [0, 0).Condition range <= kMaxRange failed. Generation of a number in [0, but this can only generate numbers in [0, Result: threw an exception. Result: illegal return in test statement. Result: died but not with expected error. Result: died but not with expected exit code: DeathTest::Passed somehow called before conclusion of testevent=TestIterationStart&iteration=pthread_mutex_init(&mutex_, NULL)Attempted redefinition of test case All tests in the same test case must use the same test fixture class. However, in test case to define a test using a fixture class different from the one used earlier. This can happen if the two fixture classes are from different namespaces and have the same name. You should probably rename one of the classes to put the tests into different event=TestIterationEnd&passed=Condition 0 <= begin && begin <= size failed. Condition begin <= end && end <= size failed. gtest_streaming_protocol_version=1.0WARNING: unrecognized streaming target "%s" ignored. pthread_key_create(&key, &DeleteThreadLocalValue)Error while reading death test internal: Death test child process reported Read from death test child process failed: posix::Write(write_fd(), &status_ch, 1)waitpid(child_pid_, &status_value, 0)Cannot run a death test outside of a TEST or TEST_F constructDeath tests use fork(), which is unsafe particularly in a threaded context. For this test, couldn't detect the number of threads.) somehow exceeded expected maximum (WARNING: unrecognized output format "%s" ignored. Condition typeid(*base) == typeid(Derived) failed. Condition !original_working_dir_.IsEmpty() failed. Failed to get the current working directory.basic_string::_S_construct null not valid can be found in this test case. pthread_setspecific(key_, holder_base)fcntl(pipe_fd[1], F_SETFD, 0) != -1sigaction( SIGPROF, &ignore_sigprof_action, &saved_sigprof_action)stack_size > kMaxStackAlignment && reinterpret_cast(stack_top) % kMaxStackAlignment == 0munmap(stack, stack_size) != -1sigaction(SIGPROF, &saved_sigprof_action, NULL)Unrecognized xml_element provided: Condition std::find(allowed_names.begin(), allowed_names.end(), name) != allowed_names.end() failed. Bad --gtest_internal_run_death_test flag: Reserved key used in RecordProperty(): class, so mixing TEST_F and TEST in the same test case is is defined using TEST. You probably want to change the TEST to TEST_F or move it to another test using two different test fixture classes. This can happen if the two classes are from different namespaces or translation units and have the same name. You should probably rename one of the classes to put the tests into different test cases." is not a valid POSIX Extended regular expression.the test fixture's constructor This test program did NOT call ::testing::InitGoogleTest before calling RUN_ALL_TESTS(). Please fix it.Condition 1 <= seed && seed <= kMaxRandomSeed failed. auxiliary test code (environments or event listeners)... Google Test internal frames ...U‰åVS‹u‹‹F9Ãt#´&‹…Āt ‹ƒė P˙RƒÄƒÃ9^uæ‹…Āt‰Eeø[^]éü˙˙˙vŧ'eø[^]ÉË…Ōt ƒė Rčü˙˙˙ƒÄƒė Sčü˙˙˙U‰åWVSƒė,‹]‹C…Āt]uä‹E ƒė˙0Včü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =ueô[^_]ÍļUãč\eô[^_]Ѝ´&ƒė jčü˙˙˙‹{ƒÄ‰EÔĮ 9øt†…˙uät‹uäƒč =uƒė Wčü˙˙˙ƒÄ‹EԉCé\˙˙˙‰ōč\ëā‰Ã‹Eäƒč =tUãč\ƒė Sčü˙˙˙Sƒė‹\$ ‹Cƒč =u#‹C ƒč =u.‹Cƒč =uAƒÄ[Ít&T$č\‹C ƒč =tÔfT$č\‹Cƒč =tɍvŧ'T$č\ƒÄ[ÃSƒė‹\$ ‹Cƒč =u‹ƒč =u'ƒÄ[Ívŧ'T$č\‹ƒč =t܍vT$č\ƒÄ[ÃSƒė‹\$ ‹C$Įƒč =uĮƒė ƒÃSčü˙˙˙ƒÄ([ÍļT$č\ëØU‰åWVSƒė8‹}hŧčü˙˙˙‰Ã@4‰$‰EÔčü˙˙˙‹5ƃ¨‹ ĮC4Įƒ¤ÆƒŠ‹FôĮƒŦĮƒ°Įƒ´Įƒ¸‰3‰ ĮCY‹NôXjŲQčü˙˙˙XĄZ‹‰C‹@ôD‰jPčü˙˙˙Ą‹s ‹@ô‰C(Į ĮC44ĮC ĮC ĮCĮCĮCĮCĮC ĮC$‰$čü˙˙˙ĮC ĮC,ĮC0 YXV˙uÔčü˙˙˙XZ‹U Eä‰˙2Pčü˙˙˙X‹EäZ˙pôP‹ƒĀPčü˙˙˙‹EäƒÄƒč =ueô[^_]ÍļUãč\eô[^_]ÉÆë‰Ãë8‰Įëd‰ÃëE‹Vô‹= ‰Æ‰<ƒė ĮC4˙uÔčü˙˙˙‰$čü˙˙˙‰4$čü˙˙˙‹Eäƒč =tUãč\‹…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙ƒė Včü˙˙˙Y^hS‰ūčü˙˙˙ƒÄë‘X^€^€^€^8^^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^đ]€^]0nPoPoPoPoPoPoPnpnn°nĐnđnoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPo0oPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPon”02unknown file./This program contains tests written using Google Test. You can use the following command line flags to control its behavior: Test Selection: @G--gtest_list_tests@D List the names of all tests instead of running them. The name of TEST(Foo, Bar) is "Foo.Bar". @G--gtest_filter=@YPOSTIVE_PATTERNS[@G-@YNEGATIVE_PATTERNS]@D Run only the tests whose name matches one of the positive patterns but none of the negative patterns. '?' matches any single character; '*' matches any substring; ':' separates two patterns. @G--gtest_also_run_disabled_tests@D Run all disabled tests too. Test Execution: @G--gtest_repeat=@Y[COUNT]@D Run the tests repeatedly; use a negative count to repeat forever. @G--gtest_shuffle@D Randomize tests' orders on every iteration. @G--gtest_random_seed=@Y[NUMBER]@D Random number seed to use for shuffling test orders (between 1 and 99999, or 0 to use a seed based on the current time). Test Output: @G--gtest_color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D Enable/disable colored output. The default is @Gauto@D. -@G-gtest_print_time=0@D Don't print the elapsed time of each test. @G--gtest_output=xml@Y[@G:@YDIRECTORY_PATH@G/@Y|@G:@YFILE_PATH]@D Generate an XML report in the given directory or with the given file name. @YFILE_PATH@D defaults to @Gtest_details.xml@D. @G--gtest_stream_result_to=@YHOST@G:@YPORT@D Stream test results to the given server. Assertion Behavior: @G--gtest_death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D Set the default death test style. @G--gtest_break_on_failure@D Turn assertion failures into debugger break-points. @G--gtest_throw_on_failure@D Turn assertion failures into C++ exceptions. @G--gtest_catch_exceptions=0@D Do not report exceptions as test failures. Instead, allow them to crash the program or throw a pop-up (on Windows). Except for @G--gtest_list_tests@D, you can alternatively set the corresponding environment variable of a flag (all letters in upper-case). For example, to disable colored text output, you can either specify @G--gtest_color=no@D or set the @GGTEST_COLOR@D environment variable to @Gno@D. For more information, please read the Google Test documentation at @Ghttp://code.google.com/p/googletest/@D. If you find a bug in Google Test (not one in your own code or tests), please report it to @G@D. GetParam()TypeParamthrow_on_failurestream_result_tostack_trace_depthshufflerepeatrandom_seedprint_timeoutputlist_testsfiltercolorcatch_exceptionsbreak_on_failurealso_run_disabled_testsinternal_run_death_testdeath_test_use_forkdeath_test_stylefastM % A H 6 * ­ ļ ¤ % 9H ­ ļ ¤ % Î 9H Ä GTEST_SHARD_STATUS_FILEGTEST_TOTAL_SHARDSGTEST_SHARD_INDEXtest_detail.xml**DeathTest:*DeathTest/*DISABLED_*:*/DISABLED_*` Stack trace: Sƒė‹\$ ‹C$Įƒč =u%Cƒė ĮPčü˙˙˙‰$čü˙˙˙ƒÄ([ÍļT$č\ëĐWVSƒė‹t$ ‹|$$‹9ût…Ût‹ƒč =uƒė Sčü˙˙˙ƒÄ‰>ƒÄ[^_Í´&T$č\ëŲU‰åWVSƒė‹u‹} ‹9ût1…Ût+‹C …Āx ƒė Pčü˙˙˙ƒÄ‹ƒč =uƒė Sčü˙˙˙ƒÄ‰>eô[^_]ÃfUįč\ëŪ‰Æ‹ Aô=tUįč\ƒė Včü˙˙˙U‰åVSƒė‹]‹u˙u Sčü˙˙˙‰4$čü˙˙˙ƒÄ PVSčü˙˙˙ƒÄeø‰Ø[^]‰Ƌ Aô=tU÷č\ƒė Včü˙˙˙U‰åWVSƒė8‹} ‹]‹uWčü˙˙˙YZ‰ÂĮ ‹‰UÔPôRSčü˙˙˙ƒÄ ˙uÔWSčü˙˙˙XZVSčü˙˙˙ƒÄeô‰Ø[^_]‰Ƌ Aô=tUįč\ƒė Včü˙˙˙U‰åWVSŊ`˙˙˙ėčWčü˙˙˙‹ÆEԋ Į…`˙˙˙ĮEĐÆEՋCôĮEØĮEÜĮEāĮE䉝,˙˙˙‰Œ,˙˙˙Į…0˙˙˙…,˙˙˙CôY^jPčü˙˙˙XĄZ‹‰Á‰…4˙˙˙…4˙˙˙Aô‰jPčü˙˙˙‹5‹ ‹Fô‰Œ,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ ‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙YX…8˙˙˙Į…8˙˙˙Į…X˙˙˙Į…\˙˙˙ PWčü˙˙˙‹E ƒÄ‹…Ā„•'˙˙˙ƒėRP…(˙˙˙Pčü˙˙˙‹…(˙˙˙4˙˙˙ƒÄ‹Pôč|p‹…(˙˙˙ƒč =… …8˙˙˙ƒėP˙učü˙˙˙‹…\˙˙˙ƒÄ Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =…ĸ…T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙‹Fô‹5‹‰´,˙˙˙Ą‰…4˙˙˙‹@ô‰”4˙˙˙‹Cô‰,˙˙˙‹ ‰<$‰œ,˙˙˙Į…`˙˙˙čü˙˙˙‹EƒÄeô[^_]Âļ…4˙˙˙ƒėhPčü˙˙˙ƒÄé˙˙˙t&•(˙˙˙č\éN˙˙˙´&•&˙˙˙č\éåū˙˙‰Ãë'‰Ãë:‰Ãë[ët‰Ã‹…(˙˙˙ƒč =t •&˙˙˙č\…,˙˙˙ƒė Pčü˙˙˙‰$čü˙˙˙…8˙˙˙ƒė Pčü˙˙˙X…,˙˙˙ZhPčü˙˙˙ƒÄƒė Į…`˙˙˙Wčü˙˙˙‰$čü˙˙˙‹Sô‹5 ‰,˙˙˙‰Ã‰´,˙˙˙ëËU‰åWVSŊ`˙˙˙ėøWčü˙˙˙‹ÆEԋ Į…`˙˙˙ĮEĐÆEՋCôĮEØĮEÜĮEāĮE䉝,˙˙˙‰Œ,˙˙˙Į…0˙˙˙X…,˙˙˙CôZjPčü˙˙˙ĄY^‰Á‰…4˙˙˙…4˙˙˙Aô‹5‰0jPčü˙˙˙‹5‹ ‹Fô‰Œ,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ ‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙X…8˙˙˙Į…8˙˙˙Į…X˙˙˙ZPWĮ…\˙˙˙ čü˙˙˙‹E ƒÄ‹…Ā„•'˙˙˙ƒėRP…(˙˙˙Pčü˙˙˙‹…(˙˙˙4˙˙˙ƒÄ‹PôčĖs‹…(˙˙˙Pôú‰•˙˙˙……8˙˙˙ƒėP˙učü˙˙˙‹…\˙˙˙ƒÄ Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =…Ŗ…T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙‹Fô‹‹5‰”,˙˙˙Ą‰…4˙˙˙‹@ô‰´4˙˙˙‹Cô‰,˙˙˙‹ ‰<$‰œ,˙˙˙Į…`˙˙˙čü˙˙˙‹EƒÄeô[^_]´&…4˙˙˙ƒėhPčü˙˙˙ƒÄé˙˙˙t&•(˙˙˙č\éM˙˙˙š…Ét/š˙˙˙˙đÁHü‰Č…Āßū˙˙…&˙˙˙ƒėP˙ĩ˙˙˙čü˙˙˙밍t&‹HüQ˙‰Pü‰ČëЉÃëëL‰Ãëb‰Ãë)‰Ãëk…8˙˙˙ƒė Pčü˙˙˙Z…,˙˙˙YhPčü˙˙˙ƒÄƒė Į…`˙˙˙Wčü˙˙˙‰$čü˙˙˙‰,˙˙˙‹Sô‹ ‰œ,˙˙˙‰Ãëˋ…(˙˙˙pôūu…,˙˙˙ƒė Pčü˙˙˙‰$čü˙˙˙ēHü…ŌtƒĘ˙đÁ…ŌŌPP…&˙˙˙PVčü˙˙˙ƒÄ뾋PüJ˙‰HüëŨU‰åSEôƒė ‹]Pčü˙˙˙YX‹E ˙0‹EôPRčü˙˙˙XZ˙uôSčü˙˙˙‹UôƒÄ …Ōt ƒė ‹R˙PƒÄ‰Ø‹]üɉËUô…Ōt ƒė ‹R˙PƒÄƒė Sčü˙˙˙U‰åSEôƒė ‹]Pčü˙˙˙‹E ƒÄ ˙p˙0‹EôPRčü˙˙˙XZ˙uôSčü˙˙˙‹UôƒÄ …Ōt ƒė ‹R˙PƒÄ‰Ø‹]üɉËUô…Ōt ƒė ‹R˙PƒÄƒė Sčü˙˙˙U‰åVSƒė‹]˙u Sčü˙˙˙XZ˙uSčü˙˙˙ƒÄeø‰Ø[^]‰Ƌ Aô=tU÷č\ƒė Včü˙˙˙U‰åVSƒė‹]‹Cƒø˙tƒė Pčü˙˙˙ĮC˙˙˙˙ƒÄeø[^]ÍvuôhahËjVčü˙˙˙ƒÄ j hÜhčü˙˙˙ƒÄ j@hhčü˙˙˙‰4$čü˙˙˙‹CƒÄ떉Ãė Včü˙˙˙‰$čü˙˙˙U‰åVSƒė˙učü˙˙˙ƒÄ…‰Ãueø[^]ÍuôhyhDjVčü˙˙˙ƒÄ jhlhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeø[^]ÉÃė Včü˙˙˙‰$čü˙˙˙U‰åVSƒė‹EÆ@Pčü˙˙˙ƒÄ…‰Ãu eø[^]ÍvuôhHhDjVčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeø[^]ÉÃė Včü˙˙˙‰$čü˙˙˙U‰åWVSƒė(‹]Sčü˙˙˙ƒÄ…‰Æučü˙˙˙ÆC‰Ceô[^_]Ѝ}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙‰<$čü˙˙˙ƒÄ딉Ãė Wčü˙˙˙‰$čü˙˙˙U‰åWVSƒė‹]‹Cƒø˙„‹U ƒė‹‹rôVRPčü˙˙˙ƒÄ9ÆtjuähUhËjVčü˙˙˙ƒÄ j&hÄhčü˙˙˙‹CƒÄ ˙pôPhčü˙˙˙ƒÄ ‰Įjh“Pčü˙˙˙‹C ƒÄ ˙pôPWčü˙˙˙‰4$čü˙˙˙ƒÄeô[^_]Ít&uähPhËjVčü˙˙˙ƒÄ j hÜhčü˙˙˙ƒÄ j5hŒhčü˙˙˙‰4$čü˙˙˙‹CƒÄé ˙˙˙‰Ãë‰Ãëƒė Včü˙˙˙‰$čü˙˙˙ƒė Včü˙˙˙‰$čü˙˙˙U‰åVSƒė‹]‹CĮƒø˙tƒė Pčü˙˙˙ƒÄĮC˙˙˙˙‹C ƒč =u‹Cƒč =u"eø[^]ÍvU÷č\‹Cƒč =távU÷č\eø[^]ÉƋC ƒč =tU÷č\‹KAô=tU÷č\ƒė Včü˙˙˙U‰åVSƒė‹]‹CĮƒø˙tƒė Pčü˙˙˙ƒÄĮC˙˙˙˙‹C ƒč =u'‹Cƒč =u2ƒė Sčü˙˙˙ƒÄeø[^]Í´&U÷č\‹Cƒč =tŅvU÷č\ëĉƋC ƒč =tU÷č\‹KAô=tU÷č\ƒė Včü˙˙˙U‰åVSƒė‹E‹XĮ…ÛtS‹‹@=ut‹CĮƒø˙tƒė Pčü˙˙˙ƒÄĮC˙˙˙˙‹C ƒč =u6‹Cƒč =uƒė Sčü˙˙˙ƒÄeø[^]ÍļU÷č\ëŨļU÷č\ëĀļƒė S˙ЃÄeø[^]ÉƋC ƒč =tU÷č\‹KAô=tU÷č\ƒė Včü˙˙˙U‰åVSƒė‹u‹^Į…ÛtS‹‹@=u|‹CĮƒø˙tƒė Pčü˙˙˙ƒÄĮC˙˙˙˙‹C ƒč =u>‹Cƒč =u!ƒė Sčü˙˙˙ƒÄƒė Včü˙˙˙ƒÄeø[^]ÃfU÷č\ëՍļU÷č\븍ļƒė S˙ЃÄëĀ‰Æ‹C ƒč =tU÷č\‹KAô=tU÷č\ƒė Včü˙˙˙U‰åWVSu܃ė$‹]‹‹x˙u Včü˙˙˙ƒÄ jhrVčü˙˙˙ƒÄ˙…ô‹Cƒø˙„˜‹U܃ė‹rôVRPčü˙˙˙ƒÄ9ÆtjuähUhËjVčü˙˙˙ƒÄ j&hÄhčü˙˙˙‹CƒÄ ˙pôPhčü˙˙˙ƒÄ ‰Įjh“Pčü˙˙˙‹C ƒÄ ˙pôPWčü˙˙˙‰4$čü˙˙˙ƒÄ‹E܃č =uieô[^_]ЍuāhPhËjVčü˙˙˙ƒÄ j hÜhčü˙˙˙ƒÄ j5hŒhčü˙˙˙‰4$čü˙˙˙ƒÄ‹Cé˙˙˙ƒėVS˙×뎍´&Uäč\eô[^_]ÉÃë‰Ãë ƒė Včü˙˙˙ƒÄ‹E܃č =tUÛč\ƒė Sčü˙˙˙‰Ãë‰Ãë‹E܃č =tâUäč\ëØƒė Včü˙˙˙ƒÄëĩU‰åVS]đƒė‹E ‹pEîPhSčü˙˙˙YXS]ôSčü˙˙˙‰4$čü˙˙˙ƒÄ PVSčü˙˙˙X‹EZS˙pčü˙˙˙‹EôƒÄƒč =u‹Eđƒč =u&eø[^]Í´&Uīč\‹Eđƒč =tŨv‰Úč\eø[^]ÉÃë‰Ãëëú‹Eôƒč =tUīč\‹Eđƒč =tUīč\ƒė Sčü˙˙˙U‰åVS]đƒė‹E ‹pEîPh2Sčü˙˙˙YXS]ôSčü˙˙˙‰4$čü˙˙˙ƒÄ PVSčü˙˙˙X‹EZS˙pčü˙˙˙‹EôƒÄƒč =u‹Eđƒč =u&eø[^]Í´&Uīč\‹Eđƒč =tŨv‰Úč\eø[^]ÉÃë‰Ãëëú‹Eôƒč =tUīč\‹Eđƒč =tUīč\ƒė Sčü˙˙˙U‰åWVSƒė(‹E ‹u‹X$Sčü˙˙˙ƒÄ…Ā~i¸:]ä}āƒėSPWčü˙˙˙ƒÄ WhLSčü˙˙˙‰$˙včü˙˙˙‹EäƒÄƒč =uQ‹Eāƒč =u\‹Fƒė ‹P˙R ƒÄeô[^_]Ѝt&ƒė ÃˆSčü˙˙˙ƒÄ„Āu¸”é|˙˙˙´&Ußč\‹Eāƒč =t§v‰Úč\뛉Ãë‰Ã‹Eäƒč =tUßč\‹Eāƒč =tUßč\ƒė Sčü˙˙˙U¸‰åWVSuāƒėD‹} ‹_‹Kô˙wV…ÉDØčü˙˙˙‹G}ԉEЍEЉ$Wčü˙˙˙Eĉ$Pčü˙˙˙X]ȍEÄZPhiSčü˙˙˙‰$]ĖSčü˙˙˙ƒÄ jh„Sčü˙˙˙EØƒÄ WSPčü˙˙˙YEØ[]Üh‹PSčü˙˙˙X}äZVSWčü˙˙˙‹E‰<$˙pčü˙˙˙‹EäƒÄƒč =…†‹E܃č =…•‹E؃č =…¤‹E˃č =…ŗ‹Eȃč =…‹Eăč =…Ņ‹Eԃč =…ā‹Eāƒč =…īeô[^_]Í´&UÃč\‹E܃č =„r˙˙˙´&‰úč\‹E؃č =„d˙˙˙´&‰úč\‹E˃č =„U˙˙˙´&‰úč\‹Eȃč =„F˙˙˙´&‰úč\‹Eăč =„7˙˙˙´&‰úč\‹Eԃč =„(˙˙˙´&‰úč\‹Eāƒč =„˙˙˙´&‰úč\eô[^_]ÉÃéļ‰Ãë‰ÃéɉÃë>‰Ãëy‰Ãë!‰Ãë\‰ÃëC‰Ãë~‹Eäƒč =tUÃč\‹E܃č =tUÃč\‹E؃č =tUÃč\‹E˃č =tUÃč\‹Eȃč =tUÃč\‹Eăč =tUÃč\‹Eԃč =tUÃč\‹Eāƒč =tUĐč\ƒė Sčü˙˙˙‹E˃č =t–Uäč\ëŒU‰åVSEuđ]ôƒėPVčü˙˙˙XZVh„Sčü˙˙˙‹E‰$˙pčü˙˙˙‹EôƒÄƒč =u‹Eđƒč =u'eø[^]Ѝ´&Uīč\‹Eđƒč =t܍v‰Úč\eø[^]ÉÃë‰Ã‹Eôƒč =tUīč\‹Eđƒč =tUīč\ƒė Sčü˙˙˙U‰åVSƒė‹EĮƒĀPčü˙˙˙ƒÄ…‰Ãu eø[^]ÍļuôhyhDjVčü˙˙˙ƒÄ jhlhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeø[^]ÉÃė Včü˙˙˙‰$čü˙˙˙U‰åWVSƒė(‹]CĮPčü˙˙˙ƒÄ…‰Æuƒė Sčü˙˙˙ƒÄeô[^_]Ѝ´&}ähyhDjWčü˙˙˙ƒÄ jhlhčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙‰<$čü˙˙˙ƒÄ덉Ãė Wčü˙˙˙‰$čü˙˙˙U‰åWVSE֍u؃ė0Ph•Včü˙˙˙‹E‹X‹‹xXZVuÜVčü˙˙˙ƒÄ jhrVčü˙˙˙ƒÄ˙…‹Cƒø˙„Ģ‹U܃ė‹rôVRPčü˙˙˙ƒÄ9ÆtjuähUhËjVčü˙˙˙ƒÄ j&hÄhčü˙˙˙‹CƒÄ ˙pôPhčü˙˙˙ƒÄ ‰Įjh“Pčü˙˙˙‹C ƒÄ ˙pôPWčü˙˙˙‰4$čü˙˙˙ƒÄ‹E܃č =…‹E؃č =useô[^_]ÍvuāhPhËjVčü˙˙˙ƒÄ j hÜhčü˙˙˙ƒÄ j5hŒhčü˙˙˙‰4$čü˙˙˙ƒÄ‹Cé˙˙˙´&ƒėVS˙×ép˙˙˙t&Uäč\eô[^_]ÍUäč\éc˙˙˙‰Ãë‰ÃëI‰Ãë\‰Ãë#‰Ãƒė Včü˙˙˙ƒÄ‹E܃č =tU×č\‹E؃č =tU×č\ƒė Sčü˙˙˙‹E܃č =tՍUäč\ë˃ė Včü˙˙˙ƒÄë¨U‰åWVSuԃėD‹] ‹CX‹S\ƒÃ‰EāEā‰UäPVčü˙˙˙Sčü˙˙˙ƒÄ ē:„”}ČEUÆRPWčü˙˙˙]ĖƒÄ WhčSčü˙˙˙‰$]ĐSčü˙˙˙ƒÄ jhūSčü˙˙˙}ØƒÄ VSWčü˙˙˙]܉<$Sčü˙˙˙ƒÄ jh Sčü˙˙˙X‹EZS˙pčü˙˙˙‹E܃ăč =uT‹E؃č =u_‹EЃč =uj‹E˃č =uu‹Eȃč =…|‹Eԃč =…ƒeô[^_]ÍvUĮč\‹E؃č =t¤v‰Úč\‹EЃč =tšt&‰Úč\‹E˃č =tt&‰Úč\‹Eȃč =tˆt&‰Úč\‹Eԃč =„}˙˙˙‰Úč\eô[^_]ÉÃëC‰Ãë‹E܃č =tUĮč\‹E؃č =tUĮč\‹EЃč =tUĮč\‹E˃č =tUĮč\‹Eȃč =tUĮč\‹Eԃč =tUĮč\ƒė Sčü˙˙˙‰Ã량Ãén˙˙˙‰Ãëžëķ‰Ãë͉ËEЃč =t”UÜč\ëŠU‰åWVSuԃėD‹] ‹C0‹S4‰EāEā‰UäPVčü˙˙˙Sčü˙˙˙ƒÄ ē:…”}ČOUÆRPWčü˙˙˙]ĖƒÄ WhSčü˙˙˙‰$]ĐSčü˙˙˙ƒÄ jhūSčü˙˙˙}ØƒÄ VSWčü˙˙˙]܉<$Sčü˙˙˙ƒÄ jh Sčü˙˙˙X‹EZS˙pčü˙˙˙‹E܃ăč =uO‹E؃č =uZ‹EЃč =ue‹E˃č =up‹Eȃč =u{‹Eԃč =…‚eô[^_]ÃfUĮč\‹E؃č =tŠv‰Úč\‹EЃč =tŸt&‰Úč\‹E˃č =t”t&‰Úč\‹Eȃč =t‰t&‰Úč\‹Eԃč =t‚t&‰Úč\eô[^_]ÉÃëC‰Ãë‹E܃č =tUĮč\‹E؃č =tUĮč\‹EЃč =tUĮč\‹E˃č =tUĮč\‹Eȃč =tUĮč\‹Eԃč =tUĮč\ƒė Sčü˙˙˙‰Ã량Ãén˙˙˙‰Ãëžëķ‰Ãë͉ËEЃč =t”UÜč\ëŠU‰åWVSuԃėD‹] ‹C$‹ô‹€đ‰EāEā‰UäPVčü˙˙˙‹[$Sčü˙˙˙ƒÄ…ĀŽîē:Eƍ}ȃėPRWčü˙˙˙]ĖƒÄ WhXSčü˙˙˙‰$]ĐSčü˙˙˙ƒÄ jhūSčü˙˙˙}ØƒÄ VSWčü˙˙˙]܉<$Sčü˙˙˙ƒÄ jh Sčü˙˙˙X‹EZS˙pčü˙˙˙‹E܃ăč =…†‹E؃č =…•‹EЃč =…œ‹E˃č =…Ģ‹Eȃč =…ē‹Eԃč =…ɍeô[^_]Ðƒė ÃˆSčü˙˙˙ƒÄ„Ā…øū˙˙ē”éķū˙˙t&UĮč\‹E؃č =„r˙˙˙´&‰Úč\‹EЃč =„d˙˙˙‰Úč\‹E˃č =„]˙˙˙´&‰Úč\‹Eȃč =„N˙˙˙´&‰Úč\‹Eԃč =„?˙˙˙´&‰Úč\eô[^_]ÉÃë‰Ãë?‹EЃč =tUÜč\‹E˃č =tUĮč\‹Eȃč =tUĮč\‹Eԃč =tUĮč\ƒė Sčü˙˙˙‰Ãë‰Ã밋E܃č =tUĮč\‹E؃č =tUĮč\‹EЃč =„u˙˙˙UĮč\éh˙˙˙‰Ãév˙˙˙막Ãë‰ÃëŅU‰åWVSE܍uāƒė(‹]Pčü˙˙˙‹EÜYxX‹E ˙0Včü˙˙˙X‹EāZ˙pôPWčü˙˙˙‹EāƒÄƒč =u^‹{…˙twEäƒė˙uÜPčü˙˙˙‹}äWčü˙˙˙ƒÄ PW˙sčü˙˙˙‹EäƒÄƒč =u2‹E܅Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ѝt&Uäč\똍ļ‰ōč\ëō´&ƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄée˙˙˙‰Ãë‰Ãë3‰Ã‹Eāƒč =tUäč\‹E܅Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‹Eäƒč =t׉ōč\ëÎU‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åVSEđƒė‹]Pčü˙˙˙‹E ƒÄ ‹˙pôP‹EđƒĀPčü˙˙˙‹sƒÄ…ötjEôƒė˙uđPčü˙˙˙‹uôVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EôƒÄƒč =u%‹Eđ…Āt ƒė ‹P˙RƒÄeø‰Ø[^]Éöŧ'Uīč\ëŅļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄér˙˙˙‰Ãë‰Ã‹Eôƒč =tUīč\‹Eđ…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åVSEđƒė‹]Pčü˙˙˙X‹EđZ˙u ƒĀPčü˙˙˙‹sƒÄ…ötaEôƒė˙uđPčü˙˙˙‹uôVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EôƒÄƒč =u‹Eđ…Āt ƒė ‹P˙RƒÄeø‰Ø[^]ÍUīč\ëڍļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé{˙˙˙‰Ãë‰Ã‹Eôƒč =tUīč\‹Eđ…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åVSEđƒė‹]Pčü˙˙˙‹E ƒÄ‹0…ötxƒė Včü˙˙˙ƒÄ P‹EđVƒĀPčü˙˙˙‹sƒÄ…öt|Eôƒė˙uđPčü˙˙˙‹uôVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EôƒÄƒč =u7‹Eđ…Āt ƒė ‹P˙RƒÄeø‰Ø[^]Ív‹Eđƒėjh0ƒĀPčü˙˙˙늍Uīč\ëŋļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé`˙˙˙‰Ãë‰Ã‹Eôƒč =tUīč\‹Eđ…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSėŦŲEŲEŲÉßéŨØw_‹E‰Ââ€ú€„_‹U‰Ņá€ų€tT‰Á‰ÃË€÷Ų…ĀIˉЉĶ÷Û €…ŌHÉË)ÉÂ)Ę9Á‰ØBƒøw'‹EÆĮ@‹Eeô[^_]t&÷Â˙˙t¤…¤ū˙˙ƒė Pčü˙˙˙‹ƅ˙˙˙‹5 Į…¤ū˙˙Į…˙˙˙ƅ˙˙˙‹CôĮ…˙˙˙Į… ˙˙˙Į…$˙˙˙Į…(˙˙˙‰pū˙˙‰´pū˙˙Į…tū˙˙…pū˙˙CôY^jPčü˙˙˙XĄĩxū˙˙‹=Z‰…xū˙˙‹@ôđ‰8jPčü˙˙˙Ą‹=‹@ô‰ŧpū˙˙…˜ū˙˙Į…pū˙˙ Į…¤ū˙˙4Į…xū˙˙ ‰$Į…|ū˙˙Į…€ū˙˙Į…„ū˙˙Į…ˆū˙˙Į…Œū˙˙Į…ū˙˙Į…”ū˙˙čü˙˙˙Y…¤ū˙˙Į…|ū˙˙Į…œū˙˙_Ŋ|ū˙˙Į… ū˙˙ WPčü˙˙˙‹…xū˙˙ŲE‹@ôŨ\$‰4$Į„|ū˙˙čü˙˙˙…`˙˙˙‰$čü˙˙˙ÆEԋ5 ‹CôĮ…`˙˙˙_ĮEĐÆEÕĮEØĮEÜĮEāĮE䉝,˙˙˙‰´,˙˙˙XĮ…0˙˙˙…,˙˙˙CôjPčü˙˙˙Ą‹=Y^‰…4˙˙˙‹@ôĩ4˙˙˙đ‰8jPčü˙˙˙Ą‹=‹@ô‰ŧ,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Ŋ8˙˙˙‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙X…`˙˙˙Į…8˙˙˙Į…X˙˙˙ZWPĮ…\˙˙˙ čü˙˙˙‹…4˙˙˙ŲE‹@ôŨ\$‰4$Į„8˙˙˙čü˙˙˙YŊ\ū˙˙…,˙˙˙^PWčü˙˙˙…pū˙˙‰$…`ū˙˙Pčü˙˙˙…hū˙˙Į$úƅhū˙˙Į…lū˙˙Pčü˙˙˙^ZU RPčü˙˙˙ZYhOPčü˙˙˙YU^RPčü˙˙˙ĩdū˙˙‰…Tū˙˙‰4$čü˙˙˙‹dū˙˙ƒÄ jhVAPčü˙˙˙XZV˙ĩTū˙˙čü˙˙˙‹…dū˙˙ƒÄ…Āt ‹ƒė P˙RƒÄƒėhY˙ĩTū˙˙čü˙˙˙ZY`ū˙˙QPčü˙˙˙ZYhPčü˙˙˙ZYWPčü˙˙˙ZYP˙učü˙˙˙‹Ŋlū˙˙ƒÄ…˙t‹ƒč =…ƒė Wčü˙˙˙ƒÄ‹…`ū˙˙ƒč =…§‹…\ū˙˙ƒč =…Ë…\˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =…w…T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙Ą‹5‹@ô‰´,˙˙˙Ą‹5‰…4˙˙˙‹@ô‰´4˙˙˙‹Cô‹5 ‰,˙˙˙‰´,˙˙˙…`˙˙˙Į…`˙˙˙‰$čü˙˙˙‹… ū˙˙ƒÄĮ…pū˙˙ Į…¤ū˙˙4Į…xū˙˙ Į…|ū˙˙ƒč =…ą…˜ū˙˙ƒė Į…|ū˙˙Pčü˙˙˙Ą‹5‹= ‹@ô‰´pū˙˙Ą‹5‰…xū˙˙‹@ô‰´xū˙˙‹Cô‰pū˙˙‰ŧpū˙˙…¤ū˙˙Į…¤ū˙˙‰$čü˙˙˙‹EƒÄeô[^_]vŧ'Š˙˙…ú˙˙é‘ų˙˙•hū˙˙č\éIū˙˙•,˙˙˙č\é?˙˙˙•hū˙˙č\éyū˙˙•hū˙˙č\é-ū˙˙‰ōč\éíũ˙˙‰Ãë ‰Ãëq‰ÃëQ‹Sô‹5 ‰pū˙˙‰Ã‰´pū˙˙…¤ū˙˙ƒė Į…¤ū˙˙Pčü˙˙˙‰$čü˙˙˙‹Sô‹5 ‰,˙˙˙‰Ã‰´,˙˙˙…`˙˙˙ƒė Į…`˙˙˙Pčü˙˙˙ƒÄ…pū˙˙ƒė Pčü˙˙˙‰$čü˙˙˙ëŗ‰Ãƒė Wčü˙˙˙_X…,˙˙˙hPčü˙˙˙ƒÄ먉Ãëc‰ÃëD‹…dū˙˙…Āt ƒė ‹P˙RƒÄPP…lū˙˙jPčü˙˙˙‹…`ū˙˙ƒÄƒč =t •hū˙˙č\‹…\ū˙˙ƒč =t •hū˙˙č\…,˙˙˙ƒė Pčü˙˙˙ƒÄéF˙˙˙‰Ã뜉Ãë‚éĖū˙˙‰Ãƒė Wčü˙˙˙X…pū˙˙ZhPčü˙˙˙ƒÄéžū˙˙U‰åWVSėŦŨEŨ•Pū˙˙ŨEŨ•Hū˙˙ßéŨ؇ ‹Tū˙˙‹…Pū˙˙‹•Tū˙˙áđųđ„´‹Lū˙˙‹ĩHū˙˙‹ŊLū˙˙áđųđ„ ‹Tū˙˙…Ɉ‹…Tū˙˙‹Pū˙˙ €‰Ã‹…Lū˙˙…Āˆ‘‹ŊLū˙˙‹…Hū˙˙Ī€‰ú9Ķs1)ČڃúwZƒøwUv‹EÆĮ@‹Eeô[^_]ļw9ÁrÉ)Á͉ȉÚëЍ´&‹Tū˙˙‹Pū˙˙ã˙˙ Ë„2˙˙˙…¤ū˙˙ƒė Pčü˙˙˙‹ƅ˙˙˙‹ Į…¤ū˙˙Į…˙˙˙ƅ˙˙˙‹CôĮ…˙˙˙Į… ˙˙˙Į…$˙˙˙Į…(˙˙˙‰pū˙˙‰”pū˙˙Į…tū˙˙…pū˙˙CôY^jPčü˙˙˙XĄĩxū˙˙Z‹‰…xū˙˙‹@ôđ‰jPčü˙˙˙Ą‹=‹@ô‰ŧpū˙˙…˜ū˙˙Į…pū˙˙ Į…¤ū˙˙4Į…xū˙˙ ‰$Į…|ū˙˙Į…€ū˙˙Į…„ū˙˙Į…ˆū˙˙Į…Œū˙˙Į…ū˙˙Į…”ū˙˙čü˙˙˙Y…¤ū˙˙Į…|ū˙˙Į…œū˙˙_Ŋ|ū˙˙Į… ū˙˙ WPčü˙˙˙‹…xū˙˙ƒÄ ‹@ô˙ĩTū˙˙˙ĩPū˙˙VĮ„|ū˙˙čü˙˙˙…`˙˙˙‰$čü˙˙˙ÆEԋ5 ‹CôĮ…`˙˙˙_ĮEĐÆEÕĮEØĮEÜĮEāĮE䉝,˙˙˙‰´,˙˙˙XĮ…0˙˙˙…,˙˙˙CôjPčü˙˙˙Ą‹=Y^‰…4˙˙˙‹@ôĩ4˙˙˙đ‰8jPčü˙˙˙Ą‹Ŋ8˙˙˙‹@ô‰”,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ ‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙X…`˙˙˙Į…8˙˙˙Į…X˙˙˙ZWPĮ…\˙˙˙ čü˙˙˙‹…4˙˙˙ƒÄ ‹@ô˙ĩLū˙˙˙ĩHū˙˙VĮ„8˙˙˙čü˙˙˙YŊ\ū˙˙…,˙˙˙^PWčü˙˙˙…pū˙˙‰$…`ū˙˙Pčü˙˙˙…hū˙˙Į$úƅhū˙˙Į…lū˙˙Pčü˙˙˙^ZU RPčü˙˙˙ZYhOPčü˙˙˙YU^RPčü˙˙˙ĩdū˙˙‰…Pū˙˙‰4$čü˙˙˙‹•dū˙˙ƒÄ jhVBPčü˙˙˙XZV˙ĩPū˙˙čü˙˙˙‹…dū˙˙ƒÄ…Āt ‹ƒė P˙RƒÄƒėhY˙ĩPū˙˙čü˙˙˙Z•`ū˙˙YRPčü˙˙˙ZYhPčü˙˙˙ZYWPčü˙˙˙ZYP˙učü˙˙˙‹Ŋlū˙˙ƒÄ…˙t‹ƒč =…1ƒė Wčü˙˙˙ƒÄ‹…`ū˙˙ƒč =…Ņ‹…\ū˙˙ƒč =…í‹…\˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =…Ą…T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙Ą‹5‹@ô‰´,˙˙˙Ą‹5‰…4˙˙˙‹@ô‰´4˙˙˙‹Cô‹5 ‰,˙˙˙‰´,˙˙˙…`˙˙˙Į…`˙˙˙‰$čü˙˙˙‹… ū˙˙ƒÄĮ…pū˙˙ Į…¤ū˙˙4Į…xū˙˙ Į…|ū˙˙ƒč =…ۍ…˜ū˙˙ƒė Į…|ū˙˙Pčü˙˙˙Ą‹=‹5‹@ô‰ŧpū˙˙Ą‰…xū˙˙‹@ô‰´xū˙˙‹Cô‰pū˙˙‹ ‰œpū˙˙…¤ū˙˙Į…¤ū˙˙‰$čü˙˙˙‹EƒÄeô[^_]t&‹Lū˙˙‹Hū˙˙ã˙˙ Ë…đų˙˙éAų˙˙‰đ‰ú÷؃Ō÷Úésų˙˙÷ØƒŌ‰Á÷ډĶéAų˙˙•hū˙˙č\éū˙˙•,˙˙˙č\é˙˙˙•hū˙˙č\éOū˙˙•hū˙˙č\éū˙˙‰ōč\éÃũ˙˙‰Ãë ‰Ãë=‰ÃëO‹Sô‹= ‰pū˙˙‰Ã‰ŧpū˙˙…¤ū˙˙ƒė Į…¤ū˙˙Pčü˙˙˙‰$čü˙˙˙‹…dū˙˙…Āt ƒė ‹P˙RƒÄPP…lū˙˙jPčü˙˙˙‹…`ū˙˙ƒÄƒč =t •hū˙˙č\‹…\ū˙˙ƒč =t •hū˙˙č\…,˙˙˙ƒė Pčü˙˙˙ƒÄ…pū˙˙ƒė Pčü˙˙˙‰$čü˙˙˙‰Ã븉ÃëΉÃëë=ƒė Wčü˙˙˙_X…,˙˙˙hPčü˙˙˙ƒÄ…`˙˙˙ƒė Į…`˙˙˙Pčü˙˙˙ƒÄ랋Sô‹= ‰,˙˙˙‰Ã‰ŧ,˙˙˙ëȉÃëĉÃéy˙˙˙‰ÃëéÆū˙˙ƒė Wčü˙˙˙X…pū˙˙ZhPčü˙˙˙ƒÄéēū˙˙U‰åVSƒė‹]˙3čü˙˙˙ƒÄ…Āt ƒė ‹P˙RƒÄƒė ˙3čü˙˙˙ƒÄ…‰Ãueø[^]ЍuôhÎhDjVčü˙˙˙ƒÄ jhYhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeø[^]ÉÃė Včü˙˙˙‰$čü˙˙˙U‰åWVSƒė8‹}˙7čü˙˙˙ƒÄ…Āt ‹ƒė P˙RƒÄƒė ˙7čü˙˙˙ƒÄ…‰ÃtUuähÎhDjVčü˙˙˙ƒÄ jhYhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄ‹w‹_9Ūuë1ļƒÃ 9Ūt!‹Cƒč =tėUäƒÃ č\9Ūu䐍t&‹w…öt ƒė Včü˙˙˙ƒÄeô[^_]ÉEÔë‰Ãƒė Včü˙˙˙‰]ԃÄ‹_‹w9ķt‹Fƒč =tUãč\ƒÆ 9ķuä‹_…Ût ƒė Sčü˙˙˙ƒÄƒė ˙uÔčü˙˙˙U‰åWVSƒė,‹}‹u ‹G+Áø9ƉEÔr…öxn‹EÔ9Eō;ué‹]‹E)ķ…ü˙˙˙ƒû~=‰Eԉu ´&ƒėS˙uƒëčü˙˙˙E ‹ƒÄ‹Uԃmԍʃû‹2‹‰0‰ uЍeô[^_]ÍEäh:hËjP‰EĐčü˙˙˙ƒÄ j.hxhčü˙˙˙ƒÄ jhrhčü˙˙˙XZVhčü˙˙˙ƒÄ ‰ÃjhPčü˙˙˙YX˙uÔSčü˙˙˙[Zh§Pčü˙˙˙Y˙uĐčü˙˙˙ƒÄ‹EÔ9EŽ˙˙˙Eäh=hËjP‰EĐčü˙˙˙ƒÄ j.h¨hčü˙˙˙ƒÄ jhĒhčü˙˙˙XZ˙uhčü˙˙˙ƒÄ ‰ÃjhČPčü˙˙˙YXVSčü˙˙˙ƒÄ ‰Ãjh†Pčü˙˙˙XZ˙uÔSčü˙˙˙ZYh§Pčü˙˙˙X˙uĐčü˙˙˙ƒÄérū˙˙‰Ãë‰Ãëƒė ˙uĐčü˙˙˙‰$čü˙˙˙ƒė ˙uĐčü˙˙˙‰$čü˙˙˙VSƒė‹D$ ‹‹sô…ötFļƒč0ƒø w;čü˙˙˙ƒėĮ‰Æj D$PSčü˙˙˙ƒÄ‹L$ €9u‹…Éu ‰ÃÁû9Út v1ƒÄ[^ËT$$‰¸ëíU‰åWVSƒė0‹] ‹ujhūSčü˙˙˙‰đƒÄ<\ļø‡¤˙$Ŋt&ƒėjhæSčü˙˙˙ƒÄt&ƒėjhūSčü˙˙˙ƒÄ jhžSčü˙˙˙XZWSčü˙˙˙F˙ƒÄ<‡éƒėjhÁSčü˙˙˙ƒÄeô[^_]Íļƒėjh7Sčü˙˙˙ƒÄ jhūSčü˙˙˙ƒÄë͍vƒėjhéSčü˙˙˙ƒÄéh˙˙˙´&ƒėjhėSčü˙˙˙ƒÄéH˙˙˙´&ƒėjhõSčü˙˙˙ƒÄé(˙˙˙´&ƒėjhSčü˙˙˙ƒÄé˙˙˙´&ƒėjhøSčü˙˙˙ƒÄéčū˙˙´&ƒėjhīSčü˙˙˙ƒÄéČū˙˙´&ƒėjhōSčü˙˙˙ƒÄé¨ū˙˙´&ƒėjhãSčü˙˙˙ƒÄéˆū˙˙´&G⃸^†EāƒėWP‰EÔčü˙˙˙YX‹EÔPEähûPčü˙˙˙X‹EäZ˙pôPSčü˙˙˙‹EäƒÄƒč =…§‹Eāƒč =…‰ƒėjhūSčü˙˙˙‰đƒÄ„Ā„Iū˙˙VjhžSčü˙˙˙XZWSčü˙˙˙ƒÄéū˙˙EäƒėWPčü˙˙˙Y^jhŨSčü˙˙˙‹EäƒÄ ˙pôPSčü˙˙˙‹EäƒÄƒč =„×ũ˙˙Ußč\éĘũ˙˙Uäč\éj˙˙˙Ußč\éL˙˙˙‰öŧ'‰đƒėˆEāEājPSčü˙˙˙ƒÄ jhūSčü˙˙˙‰đƒÄ„Ā„‰ũ˙˙QéLũ˙˙‰Ãë‰Ãë‹Eäƒč =tUßč\‹Eāƒč =uƒė Sčü˙˙˙‰Ã‹Eäƒč =tčUßč\ëŪ¨ĐĐĐĐĐĐĐđ0PpĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐаĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐ8U‰åWVSƒė0‹] ‹ujhūSčü˙˙˙‰đƒÄ<\žø‡¤ļĀ˙$…vŧ'ƒėjhæSčü˙˙˙ƒÄt&ƒėjhūSčü˙˙˙ƒÄ jhžSčü˙˙˙XZWSčü˙˙˙F˙ƒÄ<‡éƒėjhÁSčü˙˙˙ƒÄeô[^_]Íļƒėjh7Sčü˙˙˙ƒÄ jhūSčü˙˙˙ƒÄë͍vƒėjhéSčü˙˙˙ƒÄéh˙˙˙ƒėjhėSčü˙˙˙ƒÄéP˙˙˙´&ƒėjhõSčü˙˙˙ƒÄé0˙˙˙´&ƒėjhSčü˙˙˙ƒÄé˙˙˙´&ƒėjhøSčü˙˙˙ƒÄéđū˙˙´&ƒėjhīSčü˙˙˙ƒÄéĐū˙˙´&ƒėjhōSčü˙˙˙ƒÄé°ū˙˙´&ƒėjhãSčü˙˙˙ƒÄéū˙˙´&G⃸^† Eā‰ōƒėļŌRP‰EÔčü˙˙˙YX‹EÔPEähûPčü˙˙˙X‹EäZ˙pôPSčü˙˙˙‹EäƒÄƒč =…¯‹Eāƒč =…‘ƒėjhūSčü˙˙˙‰đƒÄ„Ā„Lū˙˙VjhžSčü˙˙˙XZWSčü˙˙˙ƒÄéū˙˙v‰ņEäƒėļņVPčü˙˙˙Y^jhŨSčü˙˙˙‹EäƒÄ ˙pôPSčü˙˙˙‹EäƒÄƒč =„Ōũ˙˙Ußč\éÅũ˙˙Uäč\éb˙˙˙Ußč\éD˙˙˙t&‰đƒėˆEāEājPSčü˙˙˙ƒÄ jhūSčü˙˙˙‰đƒÄ„Ā„‰ũ˙˙QéLũ˙˙‰Ãë‰Ãë‹Eäƒč =tUßč\‹Eāƒč =uƒė Sčü˙˙˙‰Ã‹Eäƒč =tčUßč\ëŪ°ĐĐĐĐĐĐØđ0PpĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐаĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐ@U‰åWVSƒė ‹] ‹ujhâSčü˙˙˙ƒÄ‰Ú‰đčÜmƒė‰ĮjhūSčü˙˙˙ƒÄ…öueô[^_]Í´&ƒėjhžSčü˙˙˙YXVSčü˙˙˙ƒÄƒ˙tF˙ƒøwƒėjhÁSčü˙˙˙ƒÄeô[^_]Ít&EäƒėVPčü˙˙˙XZjhŨSčü˙˙˙‹EäƒÄ ˙pôPSčü˙˙˙‹EäƒÄƒč =tĨUãč\뛉ËEäƒč =tUãč\ƒė Sčü˙˙˙WVSƒė‹t$ ‹|$$‹9ût…Ût‹ƒč =uƒė Sčü˙˙˙ƒÄ‰>ƒÄ[^_Í´&T$č\ëŲUWVSƒė‹t$0‹|$4‹l$8‹F;FtM…Āt‹Pü‰‹FP‰VPü‹])ú‰ŅÁų…Éu‰ƒÄ[^_]Ѝ´&ƒė)ĐRWPčü˙˙˙ƒÄë܍ļ‹)ЉÃÁû…Û„‡9Æŋ‰ųĮD$ü˙˙˙)҉L$ ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‰ÃŲt‹E‰‹‰ũ)ʼnéÁų…ÉuoL+‹n)ũ‰čÁø…Āu=‹ͅĀt ƒė Pčü˙˙˙ƒÄ‰\$‰n‰^éH˙˙˙´&‰ųĮD$)Ņë‚fƒėUWQ‰L$čü˙˙˙ƒÄ‹L$ ë̐´&ƒėUPSčü˙˙˙ƒÄé~˙˙˙=˙˙˙?‡6˙˙˙Áã‰ų‰\$)Ņ1ۅĀ„F˙˙˙é(˙˙˙UWVSƒė‹t$0‹|$4‹^;^tI…Ût‹Cü‰C‰F‹D$8‹0Cü)ø‰ÂÁú…Ōu‰7ƒÄ[^_]Ít&ƒė)ÃPWSčü˙˙˙ƒÄëāļ‹)ÃÁû…Û„ 9ˆĉúģü˙˙˙)‰T$ ƒė Sčü˙˙˙‰Å‹‰ų‰D$ƒÄ‹T$ )Áęt‹D$8‹‰‰ĘÁú…Ōuh‹VL )ú‰ĐÁø…Āu6‹<…Āt ƒė Pčü˙˙˙ƒÄë‰.‰~‰^éN˙˙˙f‰úģ)Â눐t&ƒėR‰T$WQ‰L$čü˙˙˙ƒÄ‹T$ ‹L$ëǃėQ‰L$˙t$Učü˙˙˙ƒÄ‹L$ éz˙˙˙ų˙˙˙?‡0˙˙˙‰úÁã)…É…*˙˙˙‰Ņ‰D$1íé=˙˙˙UWVSƒė‹t$0‹|$4‹l$8‹F;FtM…Āt‹Pü‰‹FP‰VPü‹])ú‰ŅÁų…Éu‰ƒÄ[^_]Ѝ´&ƒė)ĐRWPčü˙˙˙ƒÄë܍ļ‹)ЉÃÁû…Û„‡9Æŋ‰ųĮD$ü˙˙˙)҉L$ ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‰ÃŲt‹E‰‹‰ũ)ʼnéÁų…ÉuoL+‹n)ũ‰čÁø…Āu=‹ͅĀt ƒė Pčü˙˙˙ƒÄ‰\$‰n‰^éH˙˙˙´&‰ųĮD$)Ņë‚fƒėUWQ‰L$čü˙˙˙ƒÄ‹L$ ë̐´&ƒėUPSčü˙˙˙ƒÄé~˙˙˙=˙˙˙?‡6˙˙˙Áã‰ų‰\$)Ņ1ۅĀ„F˙˙˙é(˙˙˙U‰åWVSƒė<‹Eƒx˙Įueô[^_]ÃPPEÔĮEÔvuĮ}ČPEØPčü˙˙˙XZVh* Wčü˙˙˙]ĖƒÄ hWSčü˙˙˙Y_}Đh SWčü˙˙˙X]܍EØZPWSčü˙˙˙Y_}āh•SWčü˙˙˙X]äZh> WSčü˙˙˙Sčü˙˙˙‰Ãë‰Ãë‰Ãë*‹Eäƒč =tUÆč\‹Eāƒč =tUÆč\‹E܃č =tUÆč\‹EЃč =tUÆč\‹E˃č =tUÆč\‹Eȃč =tUÆč\‹E؃č =t‰ōč\ƒė Sčü˙˙˙‰Ã렉Ã뱉Ãë‰ÃëĶU‰åWVSƒė<‹Eƒx˙Įueô[^_]ÃPPEÔĮEÔvuĮ}ČPEØPčü˙˙˙XZVh* Wčü˙˙˙]ĖƒÄ hWSčü˙˙˙Y_}Đh SWčü˙˙˙X]܍EØZPWSčü˙˙˙Y_}āh•SWčü˙˙˙X]äZh> WSčü˙˙˙Sčü˙˙˙‰Ãë‰Ãë‰Ãë*‹Eäƒč =tUÆč\‹Eāƒč =tUÆč\‹E܃č =tUÆč\‹EЃč =tUÆč\‹E˃č =tUÆč\‹Eȃč =tUÆč\‹E؃č =t‰ōč\ƒė Sčü˙˙˙‰Ã렉Ã뱉Ãë‰ÃëĶU‰åWVSƒė<‹Eƒx˙Įuƒė Pčü˙˙˙ƒÄeô[^_]ÃPPEÔĮEÔvuĮ}ČPEØPčü˙˙˙XZVh* Wčü˙˙˙]ĖƒÄ hWSčü˙˙˙Y_}Đh SWčü˙˙˙X]܍EØZPWSčü˙˙˙Y_}āh•SWčü˙˙˙X]äZh> WSčü˙˙˙Sčü˙˙˙‰Ãë‰Ãë‰Ãë*‹Eäƒč =tUÆč\‹Eāƒč =tUÆč\‹E܃č =tUÆč\‹EЃč =tUÆč\‹E˃č =tUÆč\‹Eȃč =tUÆč\‹E؃č =t‰ōč\ƒė Sčü˙˙˙‰Ã렉Ã뱉Ãë‰ÃëĶU‰åWVSƒė<‹Eƒx˙Įuƒė Pčü˙˙˙ƒÄeô[^_]ÃPPEÔĮEÔvuĮ}ČPEØPčü˙˙˙XZVh* Wčü˙˙˙]ĖƒÄ hWSčü˙˙˙Y_}Đh SWčü˙˙˙X]܍EØZPWSčü˙˙˙Y_}āh•SWčü˙˙˙X]äZh> WSčü˙˙˙Sčü˙˙˙‰Ãë‰Ãë‰Ãë*‹Eäƒč =tUÆč\‹Eāƒč =tUÆč\‹E܃č =tUÆč\‹EЃč =tUÆč\‹E˃č =tUÆč\‹Eȃč =tUÆč\‹E؃č =t‰ōč\ƒė Sčü˙˙˙‰Ã렉Ã뱉Ãë‰ÃëĶUWVSƒė‹t$0‹|$4‹l$8‹F;FtM…Āt‹Pü‰‹FP‰VPü‹])ú‰ŅÁų…Éu‰ƒÄ[^_]Ѝ´&ƒė)ĐRWPčü˙˙˙ƒÄë܍ļ‹)ЉÃÁû…Û„‡9Æŋ‰ųĮD$ü˙˙˙)҉L$ ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‰ÃŲt‹E‰‹‰ũ)ʼnéÁų…ÉuoL+‹n)ũ‰čÁø…Āu=‹ͅĀt ƒė Pčü˙˙˙ƒÄ‰\$‰n‰^éH˙˙˙´&‰ųĮD$)Ņë‚fƒėUWQ‰L$čü˙˙˙ƒÄ‹L$ ë̐´&ƒėUPSčü˙˙˙ƒÄé~˙˙˙=˙˙˙?‡6˙˙˙Áã‰ų‰\$)Ņ1ۅĀ„F˙˙˙é(˙˙˙UWVSƒė‹t$0‹|$4‹l$8‹F;FtM…Āt‹Pü‰‹FP‰VPü‹])ú‰ŅÁų…Éu‰ƒÄ[^_]Ѝ´&ƒė)ĐRWPčü˙˙˙ƒÄë܍ļ‹)ЉÃÁû…Û„‡9Æŋ‰ųĮD$ü˙˙˙)҉L$ ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‰ÃŲt‹E‰‹‰ũ)ʼnéÁų…ÉuoL+‹n)ũ‰čÁø…Āu=‹ͅĀt ƒė Pčü˙˙˙ƒÄ‰\$‰n‰^éH˙˙˙´&‰ųĮD$)Ņë‚fƒėUWQ‰L$čü˙˙˙ƒÄ‹L$ ë̐´&ƒėUPSčü˙˙˙ƒÄé~˙˙˙=˙˙˙?‡6˙˙˙Áã‰ų‰\$)Ņ1ۅĀ„F˙˙˙é(˙˙˙U‰åVSEôƒė‹uPčü˙˙˙‹E ƒÄ‹…ÛtPƒė Sčü˙˙˙ƒÄ P‹EôSPRčü˙˙˙ƒÄƒė˙uôVčü˙˙˙‹UôƒÄ …Ōt ƒė ‹R˙PƒÄeø‰đ[^]ļ‹Eôƒėjh0ƒĀPčü˙˙˙ë˛‰Ã‹Uô…Ōt ƒė ‹R˙PƒÄƒė Sčü˙˙˙UWVSƒė‹t$0‹|$4‹l$8‹F;FtM…Āt‹Pü‰‹FP‰VPü‹])ú‰ŅÁų…Éu‰ƒÄ[^_]Ѝ´&ƒė)ĐRWPčü˙˙˙ƒÄë܍ļ‹)ЉÃÁû…Û„‡9Æŋ‰ųĮD$ü˙˙˙)҉L$ ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‰ÃŲt‹E‰‹‰ũ)ʼnéÁų…ÉuoL+‹n)ũ‰čÁø…Āu=‹ͅĀt ƒė Pčü˙˙˙ƒÄ‰\$‰n‰^éH˙˙˙´&‰ųĮD$)Ņë‚fƒėUWQ‰L$čü˙˙˙ƒÄ‹L$ ë̐´&ƒėUPSčü˙˙˙ƒÄé~˙˙˙=˙˙˙?‡6˙˙˙Áã‰ų‰\$)Ņ1ۅĀ„F˙˙˙é(˙˙˙UWVSƒė ‹\$$‹L$(‹t$ ‹l$,‹‰Ī‹C)×;Ct9Čt'ƒėUQSčü˙˙˙‹ƒÄ‰đú‰ƒÄ [^_]´&…Āt ‹U‰‹C‹ƒĀú‰C‰ƒÄ [‰đ^_]ÂWVSƒė‹\$$‹|$ …ÛuëDt&ƒė S‰ķčü˙˙˙ƒÄ…öt.ƒė˙s Wčü˙˙˙‹CƒÄ‹sƒč =tĪT$č\ëčt&ƒÄ[^_ÃUWVSƒė‹D$4‹pP‰T$ …ö„Ŗ‹D$8‰T$‹8‰đ‹oô‰î‰Åëļ‰l$‹m…ít-‹Eƒė‰ņ‹Xô9ķFË)ķQWPčü˙˙˙ƒÄ…ĀDÅĀyĪ‹m …íuĶ‹D$9D$ tF‹@ƒė‰ņ‹Xô9ķFËQPWčü˙˙˙‰ōƒÄ)څĀD…Āx‹D$0‹T$‰‹D$0ƒÄ[^_]ļ‹D$0‹T$ ‰‹D$0ƒÄ[^_]ÂU‰åWVSƒė‹E ‹pƒĀ‰E؅ö„Ą‹E‹‰Eā‹xôëļ‹Fš…Āt>‰Æ‹F‰ú‹Xô‰EÜ9ûF̓ėRP˙uā‰Uäčü˙˙˙‰ųƒÄ‹Uä)Ų…ĀDÁ…Āxŋ‹F 1ɅĀu‹E܄ɉu܉EäuAƒė)ûR˙uā˙uäčü˙˙˙ƒÄ…ĀDÅĀˆč‹E‰0Æ@‹Eeô[^_]‹u؍´&‹E 9p t.ƒė Včü˙˙˙‹}‹XƒÄ‰u܉Ƌ?‰]ä‹[ô‰}ā‹ô9û‰úFĶ뉉u܋uÜ9uØ„›‹E‹Vƒė‹‹rô‹Xô9Ū‰ŲFÎ)ķQRPčü˙˙˙ƒÄ…ĀDÃ1ö…Āxtƒė jčü˙˙˙‰Ã@ƒÄƒė˙uPčü˙˙˙‰đƒÄ˙uØļđ˙uÜSVčü˙˙˙‹E ƒÄƒ@‹E‰Æ@‹Eeô[^_]‹E܅Ā…f˙˙˙1öé˙˙˙ļžëŽëƒė žjčü˙˙˙ƒÄ‰Ã@녃ė Pčü˙˙˙‰$čü˙˙˙ƒÄčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åWVSƒė‹]…Ûtt‹‹@ü‹pūtG€>*tŋšQķĻt4uäh{hDjVčü˙˙˙ƒÄ j3h\ hčü˙˙˙‰4$čü˙˙˙ƒÄjhhSčü˙˙˙ƒÄeô[^_]Ãčü˙˙˙‰Ãƒė Včü˙˙˙‰$čü˙˙˙U‰åWVSŊ`˙˙˙ėØWčü˙˙˙‹ÆEԋ Į…`˙˙˙ĮEĐÆEՋCôĮEØĮEÜĮEāĮE䉝,˙˙˙‰Œ,˙˙˙Į…0˙˙˙X…,˙˙˙CôZjPčü˙˙˙ĄY‹ ‰Â‰…4˙˙˙…4˙˙˙Bô^‰jPčü˙˙˙Ą‹ĩ8˙˙˙‹@ô‰”,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ ‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙XZVWĮ…8˙˙˙Į…X˙˙˙Į…\˙˙˙ čü˙˙˙‹E ƒÄ ˙p˙0…4˙˙˙Pčü˙˙˙XZV˙učü˙˙˙‹…\˙˙˙ƒÄ Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =………T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙Ą‹5‹ ‹ ‹@ô‰´,˙˙˙Ą‰…4˙˙˙‹@ô‰Œ4˙˙˙‹Cô‰,˙˙˙‰<$‰”,˙˙˙Į…`˙˙˙čü˙˙˙‹EƒÄeô[^_]t&•+˙˙˙č\ék˙˙˙‰Ãë‰Ãë3‹Sô‹5 ‰,˙˙˙‰Ã‰´,˙˙˙ƒė Į…`˙˙˙Wčü˙˙˙‰$čü˙˙˙…,˙˙˙ƒė Pčü˙˙˙‰$čü˙˙˙‰Ãë밃ė Včü˙˙˙Y…,˙˙˙^hPčü˙˙˙ƒÄë§UWVSƒė ‹\$$‹|$(‹l$ ‹t$,)߉øÁ˙Áø…˙ŽÁįßë@ƒė˙sVčü˙˙˙ƒÄ…ĀtUƒė˙sVčü˙˙˙ƒÄ…ĀtJƒė˙sVčü˙˙˙ƒÄ…ĀtOƒÃ 9ßt`ƒė˙3Včü˙˙˙ƒÄ…Āuމ]ƒÄ ‰č[^_]´&ƒÃëåvƒÃ‰č‰]ƒÄ [^_]ļƒÃ‰č‰]ƒÄ [^_]ļ‹D$()øÁøƒøt2ƒøtƒøt=‹D$(‰EƒÄ ‰č[^_]ƒė˙7Včü˙˙˙ƒÄ…Āt*ƒĮƒė˙7Včü˙˙˙ƒÄ…ĀtƒĮƒė˙7Včü˙˙˙ƒÄ…Āuą‰}éF˙˙˙‹|$$ë”UWVSƒė ‹l$$‹t$()î‰đÁūÁø…öŽ—‹D$,Áæî‹‹{ôë.´&‹E9xôtP‹E9xôtx‹E 9xô„”ƒÅ9‹E9xôu҃ėWSPčü˙˙˙ƒÄ…Āuŋ‹D$ ‰(‹D$ ƒÄ [^_]vƒėWSPčü˙˙˙ƒÄ…Āuž‹D$ U‰‹D$ ƒÄ [^_]´&ƒėWSPčü˙˙˙ƒÄ…Ā…r˙˙˙‹D$ U‰랍´&ƒėWSPčü˙˙˙ƒÄ…Ā…V˙˙˙‹D$ U ‰és˙˙˙t&‹D$()đÁøƒøtƒøtVƒøtF‹D$ ‹L$(‰éH˙˙˙‹D$,‹(‹]ô‹9Xôt]ƒÆ‹9Xôu׃ėSUPčü˙˙˙ƒÄ…ĀuŋD$ ‰0é˙˙˙‹D$,‹(‹]ôëŅ‹L$,‹‹)‹Pô‹]ô9ÚtƒÆ밃ėRUPčü˙˙˙ƒÄ…ĀuéëŋƒėSUPčü˙˙˙ƒÄ…Āu‘ëĢ‹t$$éX˙˙˙UWVSƒė ‹\$$‹|$(‹l$ ‹t$,)߉øÁ˙Áø…˙Ž–Áįßf‹…Ātƒė˙6˙pčü˙˙˙ƒÄ…Ā„ę‹C…Ātƒė˙6˙pčü˙˙˙ƒÄ…Ā„ã‹C…Ātƒė˙6˙pčü˙˙˙ƒÄ…„܋C …Ātƒė˙6˙pčü˙˙˙ƒÄ…Ā„ŃÃ9û…z˙˙˙‹D$()ØÁøƒøt:ƒøtƒøtM‹D$(‰EƒÄ ‰č[^_]‹…Ātƒė˙6˙pčü˙˙˙ƒÄ…Āt=ƒÃ‹…Ātƒė˙6˙pčü˙˙˙ƒÄ…Āt ƒÃ‹…Āt­ƒė˙6˙pčü˙˙˙ƒÄ…Āu™v‰]ƒÄ ‰č[^_]‰öŧ'ƒÃ‰č‰]ƒÄ [^_]ļƒÃ‰]ë˃à ‰]ëÃUWVSƒė ‹t$ ‹D$$9Ætm…öu…Ātƒė hô čü˙˙˙´&ƒė)đ˙t$,j‰ÃPčü˙˙˙ƒÄƒû‰Įh t ƒėSVUčü˙˙˙ƒÄ˙u*ƒÄ ‰č[^_]ÃļˆG ëæ´&ƒÄ Ŋ [‰č^_]ÐĮG‰ÆD ëÆU‰åWVSƒė,‹E‹u ƒ8ŽŽģv‹ž‰EԍEäčlm‹}äƒėhh Wčü˙˙˙ƒÄ„Ātn‹E‹9Ët!‹EԍTŽDvŧ'‹8ƒĀ‰xø9Đuô‹Eƒéƒë‰‹Eäƒč =…@‹EƒÃ9z˙˙˙€=tčüeô[^_]Ít&ƒėhh~ Wčü˙˙˙ƒÄ„Ā…t˙˙˙ƒėhhm Wčü˙˙˙ƒÄ„Ā…V˙˙˙ƒėhhg Wčü˙˙˙ƒÄ„Ā…8˙˙˙ƒėhhĶ Wčü˙˙˙ƒÄ„Ā…˙˙˙ƒėhhŋ Wčü˙˙˙ƒÄ„Ā…üū˙˙ƒėhh` Wčü˙˙˙ƒÄ„Ā…Ūū˙˙ƒėhh§ Wčü˙˙˙ƒÄ„Ā…Āū˙˙ƒėhhU Wčü˙˙˙ƒÄ„Ā…ĸū˙˙ƒėhhN Wčü˙˙˙ƒÄ„Ā…„ū˙˙ƒėhhC Wčü˙˙˙ƒÄ„Ā…fū˙˙ƒėhh7 Wčü˙˙˙ƒÄ„Ā…Hū˙˙ƒėhh0 Wčü˙˙˙ƒÄ„Ā…*ū˙˙ƒėhh( Wčü˙˙˙ƒÄ„Ā… ū˙˙ƒėhh Wčü˙˙˙ƒÄ„Ā…îũ˙˙ƒėhh Wčü˙˙˙ƒÄ„Ā…Đũ˙˙ƒėhhô Wčü˙˙˙ƒÄ„Ā…˛ũ˙˙Eäƒėh‰ Pčü˙˙˙ƒÄ…Āu-´&‹EäÆƒč =„Āũ˙˙Uãč\éŗũ˙˙Eäƒėh€ Pčü˙˙˙ƒÄ…ĀtÍEäƒėhƒ Pčü˙˙˙ƒÄ…ĀtĢEäƒėh† Pčü˙˙˙ƒÄ…Āt“‰øčœ*„ĀuˆéJũ˙˙‰Ã‹Eäƒč =tUãč\ƒė Sčü˙˙˙U‰åWVSƒė,‹E‹} ƒ8ŽŽģv4ƒė7PEäPčü˙˙˙‹EäZYhh P‰EÔčü˙˙˙ƒÄ„Ātj‹E‹9ËtD7T‰öŧ'‹0ƒĀ‰pø9Đuô‹Eƒéƒë‰‹Eäƒč =…`‹EƒÃ9z˙˙˙€=tčüeô[^_]Ít&ƒėhh~ ˙uÔčü˙˙˙ƒÄ„Ā…v˙˙˙ƒėhhm ˙uÔčü˙˙˙ƒÄ„Ā…V˙˙˙ƒėhhg ˙uÔčü˙˙˙ƒÄ„Ā…6˙˙˙ƒėhhĶ ˙uÔčü˙˙˙ƒÄ„Ā…˙˙˙ƒėhhŋ ˙uÔčü˙˙˙ƒÄ„Ā…öū˙˙ƒėhh` ˙uÔčü˙˙˙ƒÄ„Ā…Öū˙˙ƒėhh§ ˙uÔčü˙˙˙ƒÄ„Ā…ļū˙˙ƒėhhU ˙uÔčü˙˙˙ƒÄ„Ā…–ū˙˙ƒėhhN ˙uÔčü˙˙˙ƒÄ„Ā…vū˙˙ƒėhhC ˙uÔčü˙˙˙ƒÄ„Ā…Vū˙˙ƒėhh7 ˙uÔčü˙˙˙ƒÄ„Ā…6ū˙˙ƒėhh0 ˙uÔčü˙˙˙ƒÄ„Ā…ū˙˙ƒėhh( ˙uÔčü˙˙˙ƒÄ„Ā…öũ˙˙ƒėhh ˙uÔčü˙˙˙ƒÄ„Ā…Öũ˙˙ƒėhh ˙uÔčü˙˙˙ƒÄ„Ā…ļũ˙˙ƒėhhô ˙uÔčü˙˙˙ƒÄ„Ā…–ũ˙˙Eäƒėh‰ Pčü˙˙˙ƒÄ…Āu-´&‹EäÆƒč =„ ũ˙˙Uãč\é“ũ˙˙Eäƒėh€ Pčü˙˙˙ƒÄ…ĀtÍEäƒėhƒ Pčü˙˙˙ƒÄ…ĀtĢEäƒėh† Pčü˙˙˙ƒÄ…Āt“‹EÔčœ*„Āu‡é)ũ˙˙‰Ã‹Eäƒč =tUãč\ƒė Sčü˙˙˙U‰åWVSƒė‹]…Ûtt‹‹@ü‹pūtG€>*tŋšVķĻt4uäh{hDjVčü˙˙˙ƒÄ j3h\ hčü˙˙˙‰4$čü˙˙˙ƒÄjhhSčü˙˙˙ƒÄeô[^_]Ãčü˙˙˙‰Ãƒė Včü˙˙˙‰$čü˙˙˙U‰åWVSƒė(‹u˙6čü˙˙˙ƒÄ…Ātƒė Pčü˙˙˙ƒÄeôƒĀ[^_]Í´&ƒė jčü˙˙˙Į‰Ã‹F‰CY_S˙6čü˙˙˙ƒÄ…‰Æu eôC[^_]Ãf}ähõhDjWčü˙˙˙ƒÄ j&hD hčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙‰<$čü˙˙˙ƒÄ뜉Ãė Wčü˙˙˙‰$čü˙˙˙VSƒė‹\$ ‹t$$9ķuë-t&ƒÃ9Ūt!‹ƒč =tíT$ƒÃč\9Ūu䐍t&ƒÄ[^ÃU‰åWVSƒė<‹}‹u ‹G;G„“…ĀtPüƒėRPčü˙˙˙‹GƒÄƒĀƒė‰GEä˙uPčü˙˙˙‹WƒÄBøZü)đÁø‰Á…Ā÷Ņ<Š~t&CøƒėƒëPSčü˙˙˙ƒÄ9ûuéEäƒėPVčü˙˙˙‹EäƒÄƒč =ueô[^_]ÍUãč\ëî‹)ČÁø…Ā…҉ķē)ˍ•‰U˃ė Pčü˙˙˙ƒÄ‰EĐ]Љ]Čtƒė˙u˙uČčü˙˙˙ƒÄ‹‹]Đ9ƉEÔt%t&…Ûtƒė˙uÔSčü˙˙˙ƒÄƒEԃËEÔ9ÆuߋOC‰EĉÃ9ΉMÔt't&…Ût ƒėVSčü˙˙˙ƒÄƒÃƒÆ9uÔuä‹G‰Eԋ7;uÔuëDt&ƒÆ9uÔt2‹ƒč =tėUäč\ëâ9ĐvP‰ķ¸ü˙˙˙ĮEĖ˙˙˙?)Ëé&˙˙˙‹‰EԋEԅĀt ƒė Pčü˙˙˙ƒÄ‹EЋMˉ_‰ˆ‰GéÄū˙˙ë2ëq‰ÃëH騁ú˙˙˙?w¨‰ķ)˅Ō…Íū˙˙ĮEĖĮEĐéĶū˙˙ƒė Pčü˙˙˙ZYS˙uÄčü˙˙˙ƒÄčü˙˙˙‹Eäƒč =tUãč\ƒė Sčü˙˙˙‰Ã錋MЉMăė Pčü˙˙˙‹EăÄ…Āt:ƒė˙uÄ˙uĐčü˙˙˙ƒÄ‹EЅĀt ƒė Pčü˙˙˙ƒÄčü˙˙˙čü˙˙˙ƒė Sčü˙˙˙ƒÄ‹Eȋƒč =tȍUäč\뾉Ãë(ƒė Pčü˙˙˙^_S˙uĐčü˙˙˙ƒÄčü˙˙˙čü˙˙˙‰Øén˙˙˙čü˙˙˙éN˙˙˙‰Ã뜡ƒĀƒøŖtЍt&U‰åWVSƒė,‹E‹…ŌŽ$}äƒė˙u Wčü˙˙˙‰<$hčü˙˙˙‹EäƒÄƒč =…!‹ ‹59ņ‰Ëuë.ļƒÃ9Ūt!‹ƒč =tí‰úƒÃ‰MÔč\9Ū‹MÔu␋E1ۉ ‹u ‹…Āuëzvŧ'‹EƒÃƒÆ9tcƒėVWčü˙˙˙ĄƒÄ ;ty…ĀtƒėWPčü˙˙˙ĄƒÄƒĀŖ‹Eäƒč =tŽUãƒÃƒÆč\‹E9uωöŧ'ƒė˙u ˙učü˙˙˙ƒÄčü˙˙˙‹@$€¸Üt&eô[^_]ÍļƒėWPhčü˙˙˙ƒÄ둍t&č hëĶUãč\éŌū˙˙‰Ãë‰Ãë‹Eäƒč =tUãč\ƒė Sčü˙˙˙‹Eäƒč =tUãč\ƒė Sčü˙˙˙U‰åWVSƒė,Ą‹}ƒĀƒøŖteô[^_]Ívŧ'‹…Ō~č‹E ]䋉ØčlmƒėShčü˙˙˙‹EäƒÄƒč =… Ą‹ 9ȉEԉÆt8‰}‰Īë ļƒÆ9÷t!‹ƒč =tí‰ÚƒÆč\9÷u捴&‹}‹EÔ1öŖ‹…Āu ëcvƒÆ97tY‹E ‹°‰ØčlmĄ;tw…ĀtƒėSPčü˙˙˙ĄƒÄƒĀŖ‹Eäƒč =t´UãƒÆč\97uŦt&ƒė˙u Wčü˙˙˙ƒÄčü˙˙˙‹@$€¸Ü…Ōū˙˙č héČū˙˙vŧ'ƒėSPhčü˙˙˙ƒÄ듍Uãč\éæū˙˙‰Ãëëú‹Eäƒč =tUãč\ƒė Sčü˙˙˙VSƒė‹\$ ‹t$$9ķuë-t&ƒÃ 9Ūt!‹Cƒč =tėT$ƒÃ č\9Ūuãt&ƒÄ[^ÃU‰åWVSƒė8‹E˙0čü˙˙˙ƒÄ…Āt&ƒė Pčü˙˙˙ƒĀƒÄ‰EԋEԍeô[^_]Éöŧ'ƒė jčü˙˙˙Į‰Â‰EЃĀƒÄ‰EԋE‹X+XĮBĮBĮB ‰ØÁøiĀĢĒĒĒ…Ā…ŅĮEĖ‹EĖ‹MĐÉA‰A‰Y ‹M‹y‹Y9ß„Éƍļ…öt‹ƒė‰‹C‰FCPFPčü˙˙˙ƒÄƒÃ ƒÆ 9ßuՋEЃė‰pP‹E˙0čü˙˙˙ƒÄ…‰Ã„ ˙˙˙uähõhDjVčü˙˙˙Y_hD hčü˙˙˙_ZhæPčü˙˙˙ZYSPčü˙˙˙‰4$čü˙˙˙ƒÄéÔū˙˙´&=UUUw ƒė Sčü˙˙˙‰E˃Äé˙˙˙‹uĖéh˙˙˙‰Ãë čü˙˙˙čü˙˙˙‹EЋ@…Āt ƒė Pčü˙˙˙ƒÄƒė ˙uĐčü˙˙˙‰$čü˙˙˙‰Ãëëƒė Včü˙˙˙‰$čü˙˙˙ƒė Pčü˙˙˙XZV˙uĖčü˙˙˙ƒÄčü˙˙˙‰Ãë›U‰åVSƒė‹u‹] čü˙˙˙‹@$u€¸töÃu9ƒė V˙̓čeø[^]Éöŧ'öÃu ƒė V˙Ķëāv‹ƒė ‹\˙V˙ĶëĪf‹‹\˙ëŋƒú„΃úuzƒė ]ôPčü˙˙˙‹‰$˙R‹M‰ÂƒÄ‰Øčü˙˙˙RRSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙ék˙˙˙‰Ãë‰Ãë‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙ƒė ]ôPčü˙˙˙‹MƒÄ1Ō‰Øčü˙˙˙PPSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙éųū˙˙‰Ãë‰Ãë&ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åVSƒė‹u‹] čü˙˙˙‹@$u€¸töÃu9ƒė V˙̓čeø[^]Éöŧ'öÃu ƒė V˙Ķëāv‹ƒė ‹\˙V˙ĶëĪf‹‹\˙ëŋƒú„Ōƒúu|ƒė ]ôPčü˙˙˙‹‰$˙R‹M‰ÂƒÄ‰Øčü˙˙˙RRSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙1Āéi˙˙˙‰Ãë‰Ãë‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙ƒė ]ôPčü˙˙˙‹MƒÄ1Ō‰Øčü˙˙˙PPSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙1Āéõū˙˙‰Ãë‰Ãë&ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åVSƒė‹u‹] čü˙˙˙‹@$u€¸töÃu9ƒė V˙̓čeø[^]Éöŧ'öÃu ƒė V˙Ķëāv‹ƒė ‹\˙V˙ĶëĪf‹‹\˙ëŋƒú„΃úuzƒė ]ôPčü˙˙˙‹‰$˙R‹M‰ÂƒÄ‰Øčü˙˙˙RRSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙ék˙˙˙‰Ãë‰Ãë‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙ƒė ]ôPčü˙˙˙‹MƒÄ1Ō‰Øčü˙˙˙PPSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙éųū˙˙‰Ãë‰Ãë&ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åVSƒė‹u‹] čü˙˙˙‹@$u€¸töÃu9ƒė V˙̓čeø[^]Éöŧ'öÃu ƒė V˙Ķëāv‹ƒė ‹\˙V˙ĶëĪf‹‹\˙ëŋƒú„Ōƒúu|ƒė ]ôPčü˙˙˙‹‰$˙R‹M‰ÂƒÄ‰Øčü˙˙˙RRSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙1Āéi˙˙˙‰Ãë‰Ãë‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙ƒė ]ôPčü˙˙˙‹MƒÄ1Ō‰Øčü˙˙˙PPSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙1Āéõū˙˙‰Ãë‰Ãë&ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åWVSƒė<‹}‹u ‹]‹G;G„Ō…Āt!‹Pôƒė‰‹Pø‰PPüƒĀRPčü˙˙˙‹GƒÄƒĀ ƒėƒÃ‰G‹Cø‰E܋CüS‰EāEäPčü˙˙˙‹WƒÄZčBđ)ķ‰Ų)ÚÁųzđiÉĢĒĒĒ…É~+‰öŧ'‹PėXôƒė‰Pø‹Pđ‰PüSPčü˙˙˙ƒÄ9û‰ØuŪ‹E܃ėƒÆ‰Fø‹Eā‰FüEäPVčü˙˙˙‹EäƒÄƒč =ueô[^_]ÍUÛč\ëî‹)ĐÁøiĀĢĒĒĒ…Ā… ‰đš)ЉEԍI‰MĖÁāƒė Pčü˙˙˙ƒÄ‰EЋEÔEЉEČt ‹‹MȃėƒÃ‰‹Cü‰AASPčü˙˙˙ƒÄ‹‹]Đ9ƉEÔt4…Ût"‹Mԃ닉‹A‰C‰ČƒĀPCPčü˙˙˙ƒÄƒEÔ ƒÃ ‹EÔ9ÆuĖ‹OC ‰EĉÃ9ΉMÔt<vŧ'…Ût‹ƒė‰‹F‰CFPCPčü˙˙˙ƒÄƒÃ ƒÆ 9uÔuԋG‰Eԋ7;uÔuëHt&ƒÆ 9uÔt6‹Fƒč =tëUÜč\ë፠9ČvV‰đĮEĖUUU)ЉEÔ¸ü˙˙˙éėū˙˙‹‰EԋEԅĀt ƒė Pčü˙˙˙ƒÄ‹EĖ‹MЉ_@‰‰Géū˙˙ë5ët‰ÃëKé܁ųUUUwĸ‰đ)ЅɉEÔ…Žū˙˙ĮEĖĮEĐé“ū˙˙ƒė Pčü˙˙˙ZYS˙uÄčü˙˙˙ƒÄčü˙˙˙‹Eäƒč =tUÛč\ƒė Sčü˙˙˙‰Ã鍋}Љ}ăė Pčü˙˙˙‹EăÄ…Āt:ƒė˙uÄ˙uĐčü˙˙˙ƒÄ‹EЅĀt ƒė Pčü˙˙˙ƒÄčü˙˙˙čü˙˙˙ƒė Sčü˙˙˙ƒÄ‹Eȋ@ƒč =tĮUÜč\ëŊ‰Ãë(ƒė Pčü˙˙˙^_S˙uĐčü˙˙˙ƒÄčü˙˙˙čü˙˙˙‰Øém˙˙˙čü˙˙˙éM˙˙˙‰Ãë›U‰åWVSƒė‹u‹} ‹]9ūtSvŧ'…Ût;‹ƒė‰FPCPčü˙˙˙YX‹F‰CF PC Pčü˙˙˙XFZPCPčü˙˙˙ƒÄƒÆƒÃ9÷uˇeô‰Ø[^_]Ãë4‰Æë‰ÆëY‹C ƒč =tUįč\‹Cƒč =tUįč\‰đƒė Pčü˙˙˙ƒÄ9]tƒė ˙učü˙˙˙ƒEƒÄ9]uéčü˙˙˙ëē‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åWVSƒė<‹u‹]‹~;~„{…˙t?‹Gėƒė‰GđPGPčü˙˙˙‹Gô‰GXGøZPG Pčü˙˙˙YXGüPGPčü˙˙˙‹~ƒÄ‹ƒėƒĮ‰~‰EԍCPEØPčü˙˙˙‹C‰EÜXC ZPEāPčü˙˙˙_XEäƒÃSPčü˙˙˙‹FƒÄHØ+M X܉Ę)ČÁúxÜiŌÍĖĖĖ…Ō~@‹Cčsėƒė‰CüVSčü˙˙˙X‹CđZ‰CCôPCPčü˙˙˙YXCøƒÃ PSčü˙˙˙ƒÄ9ū‰ķuĀ‹EԋM ƒė‰EØP‰ČƒĀPčü˙˙˙Y‹E܋M [‰AEāP‰ČƒĀ Pčü˙˙˙XEäZP‹E ƒĀPčü˙˙˙‹EäƒÄƒč =u"‹Eāƒč =u‹E؃č =ueô[^_]ÍUĶč\ëԍUĶč\ë׍UĶč\ëڋ)×Á˙iĮÍĖĖĖ…Ā…Í‹} š)׍‰‰MŧÁāƒė Pčü˙˙˙ƒÄ‰EÄ}Ät;‹ƒė‰CPGPčü˙˙˙YX‹C‰GC PG Pčü˙˙˙XGƒÃZSPčü˙˙˙ƒÄƒė˙uÄ˙u ˙6čü˙˙˙XƒÄ S˙v˙u čü˙˙˙‹~‹ƒÄ‰EĀ9ßu#ëo‹C ƒč =uV‹Cƒč =u?ƒÃ9ßtL‹Cƒč =tŌUÔč\ëȍ 9Ȇ‹} ¸đ˙˙˙ĮEŧĖĖĖ )×é%˙˙˙UÔč\뷍UÔč\렋>…˙t ƒė Wčü˙˙˙ƒÄ‹EĀ‹UĉF‹Eŧ‰€‚‰Fé•ū˙˙‰ÃëëRë~‹G ƒč =tUÔč\‹Gƒč =tUÔč\ƒė Sčü˙˙˙‹MăÄ…ÉtMƒė ˙uÄčü˙˙˙ƒÄčü˙˙˙ƒė Pčü˙˙˙ƒÄ…Ût*‹EÄ9ÉÆt-ƒė VƒÆčü˙˙˙ƒÄ9ķuíëƒė Pčü˙˙˙ƒÄƒė Wčü˙˙˙ƒÄ‹EąĀu ëŦ‰Ã錁ųĖĖĖ ‡îū˙˙‹} )ׅÉ…ū˙˙ĮEŧĮEÄéū˙˙‰Ãë‰ÃëEԃė Pčü˙˙˙‰$čü˙˙˙‹Eāƒč =tUĶč\‹E؃č =tUĶč\ƒė Sčü˙˙˙‰Ãéíū˙˙ë?‰ÃëՉÃëčü˙˙˙ëߋG ƒč =tUÔč\‹Gƒč =tŊUÔč\ëŗ‰ÃëЃė Pčü˙˙˙‹UăÄ…Ō…Ŋū˙˙é˙˙˙U‰åWVSƒė‹u‹} ‹]9ūt4vŧ'…ÛtƒėVSčü˙˙˙XFZPCPčü˙˙˙ƒÄƒÆƒÃ9÷u֍eô‰Ø[^_]Ãë‰Æ‹ƒč =tUįč\‰đƒė Pčü˙˙˙ƒÄ9]tƒė ˙učü˙˙˙ƒEƒÄ9]uéčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åWVSƒė,‹]‹u‹{;{„ä…˙t"GøƒėPWčü˙˙˙XGüZPGPčü˙˙˙‹{ƒÄEāƒėƒĮ‰{VƒÆPčü˙˙˙YEä_VPčü˙˙˙‹SƒÄBđ+E Áø…Ā~/÷Ѝrđ<Âf‰ķƒėƒîVSčü˙˙˙YXCüPCPčü˙˙˙ƒÄ9ûuۍEāƒėP˙u čü˙˙˙XEäZP‹E ƒĀPčü˙˙˙‹EäƒÄƒč =u‹Eāƒč =ueô[^_]ÍUßč\ëáUßč\ëä‹)ĮÁ˙…˙…Ũ‹M ē)Á‰ĪՉU˃ė Pčü˙˙˙ƒÄ‰EЉøEЉĮ‰EÔtƒėVPčü˙˙˙X‰øƒÆZƒĀVPčü˙˙˙ƒÄ‹;9} ‹uĐt4‰öŧ'…ötƒėWVčü˙˙˙YXGPFPčü˙˙˙ƒÄƒĮƒÆ9} uՃėƒÆV˙s˙u čü˙˙˙‰Į‹3‹CƒÄ9đt[‰EÔ닃č =u>ƒÆ9uÔt@‹Fƒč =tߍUāč\ëՍ?9×vJ‹M ĮEĖ˙˙˙)Á¸ø˙˙˙‰Īé˙˙˙Uāč\븋…Āt ƒė Pčü˙˙˙ƒÄ‹EЋMˉ{‰ȉCé§ū˙˙ú˙˙˙wŽ‹M )Á…ԉ΅Įū˙˙ĮEĖĮEĐéÍū˙˙‰Ãë‰ÃëEāƒė Pčü˙˙˙‰$čü˙˙˙‹Eāƒč =tUßč\ƒė Sčü˙˙˙‰Ãë닍Aô=tåUāč\ëۃė Pčü˙˙˙ƒÄ…ött‹EĐ9ƉÃtyƒė SƒÃčü˙˙˙ƒÄ9Ūuíëd‰Ãëë=‹Eԋƒč =tUāč\ƒė Sčü˙˙˙‹EЃÄ…Āt&ƒė ˙uĐčü˙˙˙ƒÄčü˙˙˙ƒė Pčü˙˙˙‹UЃÄ…Ōuڃė ˙uÔčü˙˙˙ƒÄ‹EЅĀuÅë҉Ãë‰Ãë ë čü˙˙˙é,˙˙˙‹ƒč =tUāč\‰Øƒė Pčü˙˙˙‹EЃÄ9đ‰Ãt‹EԉĮƒė SƒÃčü˙˙˙ƒÄ9ķuí‰}Ôčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙ƒÄér˙˙˙Sƒė$høčü˙˙˙ƒÄ hhøhčü˙˙˙XZjho čü˙˙˙Y[jh‡ ĸčü˙˙˙ĸXZjh˜ čü˙˙˙Y[h:hŠ ĸčü˙˙˙ƒÄ \$SPhčü˙˙˙ƒÄ hhhčü˙˙˙XZh h¯ čü˙˙˙ƒÄ SPhčü˙˙˙ƒÄ hhhčü˙˙˙YXhhļ čü˙˙˙ƒÄ SPhčü˙˙˙ƒÄ hhhčü˙˙˙XZjhŊ čü˙˙˙YĸXjhÎ čü˙˙˙ŖXZjhČ čü˙˙˙YŖXjhĪ čü˙˙˙ĸXZjdh× čü˙˙˙YŖXhhé čü˙˙˙ƒÄ SPhčü˙˙˙ƒÄ hhhčü˙˙˙XZjhú čü˙˙˙ƒÄ ĸĮ hhhčü˙˙˙YXhä h Įčü˙˙˙ƒÄ SPhčü˙˙˙ƒÄ hhhčü˙˙˙XZjhčü˙˙˙ƒÄ ĸShhčü˙˙˙ƒÄ hhhčü˙˙˙ƒÄ Į hhhčü˙˙˙ƒÄ ĮĮhhhĮčü˙˙˙ƒÄ([ÃN7testing8internal26ThreadLocalValueHolderBaseEN7testing8internal26GoogleTestFailureExceptionEN7testing8internal9DeathTestEN7testing8internal16DeathTestFactoryEN7testing8internal23DefaultDeathTestFactoryEN7testing31TestPartResultReporterInterfaceEN7testing8internal24HasNewFatalFailureHelperEN7testing4TestEN7testing8TestCaseEN7testing17TestEventListenerEN7testing22EmptyTestEventListenerEN7testing8UnitTestEN7testing32ScopedFakeTestPartResultReporterEN7testing8internal27OsStackTraceGetterInterfaceEN7testing8internal18OsStackTraceGetterEN7testing8internal35DefaultGlobalTestPartResultReporterEN7testing8internal38DefaultPerThreadTestPartResultReporterEN7testing8internal12UnitTestImplEN7testing8internal17StreamingListener20AbstractSocketWriterEN7testing8internal17StreamingListener12SocketWriterEN7testing8internal17StreamingListenerEN7testing8internal27PrettyUnitTestResultPrinterEN7testing8internal17TestEventRepeaterEN7testing8internal24XmlUnitTestResultPrinterEN7testing8internal13DeathTestImplEN7testing8internal16ForkingDeathTestEN7testing8internal15NoExecDeathTestEN7testing8internal13ExecDeathTestEN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderEN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderEzD+g  XÚaģē{…ļSstd=÷$2@‹'2‹'2§'2ŽŊ'2Ų'2˙'2‘(2’@(2“[(2”w(2•“(2–Š(2—ĩ(2˜Û(2™)2š!)2›L)2œg)2ž})2 ž)2Ąē)2ĸÕ)2¤õ)2§*2Ē:*2ŦZ*2Žu*2°*2ąļ*2˛Đ*2ŗę*2´+2ĩ+2ļ8+2ˇø+2¸,2š-,2ēL,2ģk,2ŧ–,2Ŋą,2ŋŌ,2Áí,2 -2Ã--2ÄM-2Ål-2Ƃ-2Įĸ-2ČÂ-2Éâ-2Ę.2Ë.2Ė0.2ÍN.2Îm.2Ī‹.2ĐĒ.2[‹2 v‹2 –‹Ũ3Så3\3^ ģ? ,4Y G4_)  †4c<  öä4gO ) G#O0ķ( ķ\8•v\8{\8\8\8\8 r*ŐĮvŐ{ŐŐŐŐ čĨ°Aųv°A{°A°A°A°A\ƒ"9v"9{"9"9"9"9 čļéđy™ë%dXė%5Îō›hdɋĪ‹4eqö&ü$†Ī‹Ī‹ltú$"ü$ŖĪ‹Ī‹ÛZŊĸ%ĮՋՋđēŠīđáՋF× FSՋՋđĪ‹‰!Ū:ۋ)ۋՋđ•h?ۋMۋՋđ5Î- ۋqۋđ4m:Ģ4‹á‹?Q ģ#?ĒĪ‹Ū5$ü$Éá‹á‹eof(øc?kH,Åv?á‹%5ŧ9%šŧ4Éy™6$%dX7'5Î=c;į‹í‹eqAM=ü$^í‹í‹ltE>ēü$|í‹í‹ÛZIÂM% ķ‹ķ‹đēMHđēķ‹F×QŨJķ‹Ūķ‹đ틉!Uoų‹ų‹ķ‹đ•hYĪBų‹&ų‹ķ‹đ5Î]Ģ ų‹Jų‹đmaWd˙‹Qe)Ńí‹Ū5iéü$ĸ˙‹˙‹eofm+>kHqĻT˙‹65Œ66267LęĀ7cëv5Ŋ%58\}ķ0æō8_đ@8`æK8cevĒ8dk;M8qDJƒ;M8sZeƒ‰ Âû8yqƒ%ņ8\‰2æō8_đK8cvĒ8d•;M8qÉĪ­;M8sßꭐŗ Âû8yö­%‚Ēp Œßh ņ!¨ū°*"ŒßCSš°*‰#Į\š%æōy$/6h!Ęž!˛Íxņ@zK{vĒ|(Îa4Rg€6ib‚ Cqƒ"  Ĩ| ”$ %ŗļ–h%¤g—h%¤q˜R %G ›Ø ķ&Vé%2&Øs%7ĸ'&9”%Bã'|9ĩ¤HҐ(˙xŋųõü$} ƒ ī(ÆÃĢü$š   ī)Ž€Į‘ŗ š ː)eQË´>Ė Ō ː)\˙Ī´Aå đ ːh(EŪ÷°* ː(jââú'°*$ 4 ː‰‰.ˇ%!ÁCːX hh‰)`íRk v ː‰*ĪW%ŧŽyŠ • ː‰+į;Ÿ=°*­ ŗ ː,%o°°*Į ː‰h+í$é°*đ ö ŋ+í(ų°*  Ő°*+Ų,ņ7ː1 7 ŋ+āŦ2#¸ÃO U ŋ+“6YÃm s ŋ*Ž: އ  Ő+ąÄAí´hĨ ĩ ŋhœ'*ÆÉK#7É Ū ŋhhœ'+I“S§2hö  ŋhh+Ä­[É$ü$ ) ŋœ'(dB_I °*œ'hoNmj‰i °*œ'hŒôv—J‰ °*h%#]ŠŠ °*ÃÃ#]ŽaÉ °*ĪĪ#]“OOé °*°*°*#]—°î °*œ'œ'Í œ™ß%( hh*Ę(%ÔwI< Q Őhhh*އ%ÆÅđe k Ő-|9¯ĄęҐ./ēŒ ’ Ő//%ąĸ ­ Ő‰/%ŠŊ Č Őא/%ˇØ í Őאhh/%Áũ Őאhh‰/%Í'<Őœ'h‰/%ÔL\Őœ'‰/%ÛlŐh%‰.,S"’Ő%01I*l/ŨļÁŐא01I2x{ŨÚåŐœ'01I=,ŨŨū Ő%0)fŽîÃ"(Ő0)qĩ5ĪAGŋ1endysÃ`fŐ1end„mĪ…ŋ0QēĶīįž¤Ő0Qē–ŗ;ÛŊÃŋ0(3ŸđįÜâŐ0(3¨đčÛûŋ0ķņÔu3h ŋ0ēÚOXh9?ŋ0ĩßĢXhX^ŋ2„#%L–sƒŐh%2„#úX˜ŖŐh0NThŧÂŋ2ūŦ%õH×âŐh2.y-FÉ÷ũŐ0•Ĩ5ģÆü$ŋ0ŽöD)¡5@ŋh0ŽöUÆņĢYdŐh1atkļąˇ|‡ŋh1atvĢŸĒŐh0žIĩ˛ōŨÃÎŐא0žIž`„ŨįōŐœ'0žIĮÔ|Ũ Ő%0åĖ%D5ßŨ/:Őא0åĖ%U‡šŨShŐאhh0åĖ%)åŨ‘Őœ'h0åĖ˙—ĒŨĒĩŐœ'0åĖ%ŒŨÎŪŐh%2ėq-!ķūŐ%35Î%ōzŨ!Őא05Î^=ŧŨ:OŐאhh05Î%Ā=ŨhxŐœ'h05Îz •Ũ‘œŐœ'05ΊˇęŨĩÅŐh%2w¸ŗK:ÚīŐÃh%0w¸ã­ŨŐhא0w¸ųî8Ũ1KŐhאhh0w¸%g&éŨdyŐhœ'h0w¸"6lŨ’ĸŐhœ'0w¸9čžŨģĐŐhh%0w¸KlĪÃéųŐÃ%0i—daUŨ"Őhh0i—të×Ã;FŐÃ0i—%†ͧÃ_oŐÃÃ0çåBŨˆŐhhא0ÃŊ—ŨļÕŐhhאhh0Ã%œŨîŐhhœ'h0Ãę:íŨ!6Őhhœ'0ÑŗŨOiŐhhh%0Ã×UŨ‚—ŐÃÃא0Ã'Ļ+Ũ°ĘŐÃÜ'h0Ã<[hŨãøŐÃÜ'0ÃQęŨŨ+ŐÃÃh%0Ãv4ÂŨD^ŐÃð*°*0ÀXAŨw‘ŐÃÜ'œ'0ËīEŨĒÄŐÃÃÃÃ0Õ¯BŨŨ÷ŐÃÃĪĪ+.#%›k|Ũ)Őhhh%+Rę%¨Ņ&ŨA[Őhhœ'hŨÜÔ°*h%‰4Ģ)%˜[ˆ°*ĸh%‰0•h%ŌŸ˜hģĐŋ°*hh2˛ %3åđŐŨ0d5Wûœ' ŋ013%pUœ'(.ŋ0ļ,'&“GMŋ0F×%āÖĘhf{ŋœ'hh0F×I§Ŗh”¤ŋאh0F×X­thŊÍŋœ'h0F×%÷8 hæöŋ%h0$KvO hŋאh0$K% |3h8Mŋœ'hh0$K”Ą™hfvŋœ'h0$K%k!hŸŋ%h06ŗχh¸Čŋאh06%/ūŗháöŋœ'hh06ŅÂhŋœ'h06ä /h8Hŋ%h0„¨ķThaqŋאh0„¨%>FwhŠŸŋœ'hh0„¨Ē˙h¸Čŋœ'h0„¨$īYháņŋ%h0¤$2äh ŋאh0¤$%Sōh3Hŋœ'hh0¤$QûHhaqŋœ'h0¤$%_V%hŠšŋ%h0’ąqŅhŗÃŋאh0’ą%jÆ÷hÜņŋœ'hh0’ąŦnh ŋœ'h0’ą%$h3Cŋ%h0rą`‡\lŋhh0ÛZÄ %…ŋא0ÛZ%“°:%Šžŋhhא0ÛZ%ĸtŲ%×öŋhhאhh0ÛZ%´ˇŸ%ŋœ'0ÛZ%ÃtÄ%3Hŋhhœ'0ÛZ%ĶJk%a{ŋhhœ'h$ 4‹%{Q°*ąâXœ'œ'œ'‰7đ˃*°*㛜'œ'œ'‰ė‹á§1°*›œ'œ'œ'‰<Â%ã)>CIœ'Őœ'œ'‰Ÿ47Č%{÷°*tâX°*°*°*‰ų‘ËŦO°*Ļ›°*°*°*‰ė7ČáDK°*Ķ›°*°*°*‰…Á%ãė CI°*Ő°*°*‰Ų!%5ņ(5Ļņ6čO6ŠbŸKpĩ6Œß ‚!¨ūų'"Œßh x õų'ŗ#Į õ%æōy•$/6Ļ  !Ęž!8 ˛Íx‚K{ĄvĒ|­ÎŸ8Rg¤8ib‚ĩ6Cqƒē6 Ĩ| ”=!%ŗļ– %¤g— %¤q˜R %G ›ņ" !&Vé%2Ļ &Øs%7;(&9”%Bã'|9ĩSĄ ‘(˙xŋˆZü$–!œ!‘(ÆÃäü$ŗ!š!‘)Ž€ĮfŸĖ!Ō!‘)eQˏå!ë!‘)\˙ĪԌū! "‘ (EŪ‹´ų' "&"‘(jââŖ2ų'="M"‘ŗŗ.ˇ%!b ‘q"  ŗ)`íL•„""‘ŗ*ĪW%ŧŽŖ"Ž"‘ŗ+į;–ôų'Æ"Ė"‘,%oŧ~ų'ā"‘ŗ +í$Œ•ų' ##û+í(ŒÎų''#2#‘ų'+Ų,=˛‘J#P#û+āŦ2-Ü h#n#û+“6ũ=Ü †#Œ#û*Ž:Ņ #Ļ#‘+ąÄAƒI ž#Î#û œ'*ÆÉK’Ŧâ#÷#û  œ'+I“SN $$û  +Ä­[ԃü$7$B$û5((d¯öb$ų'5( oNm#‚$ų'5( ŒôvlĀĸ$ų' $%#]ŠŠÅÂ$ų'Ü Ü #]ŽõĮâ$ų'č č #]“æF%ų'ų'ų'#]—Ģh"%ų'5(5(Í œ& %A%  *Ę(%ÔžĖU%j%‘   *އ%Æbķ~%„%‘-|9¯_  ‘./ēĨ%Ģ%‘//%ąģ%Æ%‘ŗ/%ŠÖ%á%‘‘/%ˇņ%&‘‘  /%Á&0&‘‘  ŗ/%Í@&U&‘5( ŗ/%Ôe&u&‘5(ŗ/%Û…&š&‘ $%ŗ.,S"Ģ&ļ&‘%01I*¯k‘Ī&Ú&‘‘01I2Ę‘ķ&ū&‘5(01I=P‘'"'‘$%0)fi?Ü ;'A'‘0)qč Z'`'û1endyö{Ü y''‘1end„M4č ˜'ž'û0Qē´!ˇ'Ŋ'‘0Qē–đ´ô Ö'Ü'û0(3Ÿąˇ!õ'û'‘0(3¨Ãāô ((û0ķņÔã3 3(9(û0ēÚŧŅ R(X(û0ĩßīū q(w(û2„#%ņŒ(œ(‘ $%2„#útMą(ŧ(‘ 0NÅú Õ(Û(û2ūŦ%õ˛æđ(û(‘ 2.y- ))‘0•Ĩ5ü$/)5)û0ŽöDCąĐ N)Y)û 0ŽöUØ Ä r)})‘ 1atkm4Đ •) )û 1atŗ Ä ¸)Ã)‘ 0žIĩĸÔ‘Ü)į)‘‘0žIžL‘* *‘5(0žIĮ‚ā‘$*/*‘$%0åĖ%DüÄ‘H*S*‘‘0åĖ%U`/‘l**‘‘  0åĖ%)Ũ#‘š*Ē*‘5( 0åĖ˙¸*‘Ã*Î*‘5(0åĖ%ü‚‘į*÷*‘ $%2ėq-ß ++‘$%35Î%ōø)‘/+:+‘‘05Î^÷1‘S+h+‘‘  05Î%‚e‘+‘+‘5( 05ÎzĨ‘Ē+ĩ+‘5(05Ί)^‘Î+Ū+‘ $%2w¸ŗëķ+,‘Ü  $%0w¸ãÂ]‘!,1,‘ ‘0w¸ųđ7‘J,d,‘ ‘  0w¸%gqē‘},’,‘ 5( 0w¸"ü ‘Ģ,ģ,‘ 5(0w¸90‘Ô,é,‘  $%0w¸KXŖÜ --‘Ü $%0i—dļ‘+-;-‘  0i—tk9Ü T-_-‘Ü 0i—%†8ĪÜ x-ˆ-‘Ü Ü 0Ã§Žž‘Ą-ļ-‘  ‘0ÃŊA5‘Ī-î-‘  ‘  0Ã%xy‘.!.‘  5( 0ÃęÉ‘:.O.‘  5(0ÃũG‘h.‚.‘   $%0Ãí˙‘›.°.‘Ü Ü ‘0Ã'Tx‘É.ã.‘Ü Ü 5( 0Ã<ʎ‘ü./‘Ü Ü 5(0ÃQ[@‘*/D/‘Ü Ü  $%0Ãvn&‘]/w/‘Ü Ü ų'ų'0À]Ą‘/Ē/‘Ü Ü 5(5(0Ë9¨‘Ã/Ũ/‘Ü Ü Ü Ü 0Õw˙‘ö/0‘Ü Ü č č +.#%›æŲ‘(0B0‘   $%+Rę%¨`‘Z0t0‘  5( ŨÜÃų'˜0 $%ŗ4Ģ)%˜ēúų'ģ0 $%ŗ0•h%Ō5¯ Ô0é0ûų'  2˛ %m!ū0 1‘‘0d5d°5("1(1û013%}R5(A1G1û0ļ,^¸ `1f1û0F×%ā㠍 1”1û5(  0F×I"ũ ­1Ŋ1û‘ 0F×XKœ Ö1æ1û5( 0F×%÷ŋž ˙12û$% 0$Kvûđ (282û‘ 0$K% í= Q2f2û5(  0$K”z 22û5( 0$K%ūč ¨2¸2û$% 06ŗw¯ Ņ2á2û‘ 06%/Ī­ ú23û5(  06Ņ€C (383û5( 06ä[a Q3a3û$% 0„¨ķŪ z3Š3û‘ 0„¨%>|[ Ŗ3¸3û5(  0„¨G⍠Ņ3á3û5( 0„¨$Đ­ ú3 4û$% 0¤$2‘P #434û‘ 0¤$%Sŀ L4a4û5(  0¤$Q-3 z4Š4û5( 0¤$%_R… Ŗ4ŗ4û$% 0’ąqĖn Ė4Ü4û‘ 0’ą%j $ õ4 5û5(  0’ąé& #535û5( 0’ą%lD L5\5û$% 0rąž[, u5…5û  0ÛZÄ %ž5Š5û‘0ÛZ%“Ûč%Â5×5û  ‘0ÛZ%ĸ.‹%đ56û  ‘  0ÛZ%´œ%(636û5(0ÛZ%Ã×%L6a6û  5(0ÛZ%ĶĄ%z6”6û  5( =!Ų!$%5ņû5Ļ‚66ÍË, ûR9>7 #!3^7 ^ \ ä˙ ÃP āŠ w$ ŽĀ (9€ [—€ væ€ ¯N€ ‡ € RI€ e°€Ā )0€€ 1Ö° –Ę S=„ ũ€€7ËŠ!g—7 kĘ CØ ՗ 9Đ ÖC ūž ŠU€€7íđ!Ä7 Ũ  Ä ,f •Ō Š €€7ģ!ĩë7 î‡ ¨Ē 1 €€8´ā:9˙€!J8:[w!R:Ä!ü$.˙€!+818F‘;ág!>8F‘%ņ!˙Ī6<”d!J—70ĩ‚!BGjJ8|8‡8,QJ80ĩ‚!SÔYJ8 8°8,QJ8J80Ŗ!vy’ĒūÉ8Ô8,QĒū0MĄ!ƒŊĒūí8ø8,QĒū<ą!i^7= !9J8>dec!9= !9>hex! 9=DĀ!9=˜ņ!9 >oct!9@==ą!9€?n !9?ü!"9?v!&9?đĒ!)9?ß(!,9?{I!/9 ?xā!39@=ôá!69°=ŗĸ!99J?ũŽ!<9=h8!N:V8=€A!Q:=i!V:=O!Y:>app!lY:ø8>ate!oY:= Ú!tY:>in!wY:>out!zY:=S !}Y: !‰Ä7>beg!Œž:Ŗ:>cur!ž:>end!’ž::RW‘:SL‘:T':\m‘:e‡‘:hĄ‘:iļ‘8%”¸=@­ŋ];/;?;ŠL%L.yŠ€P;`;ŠL%L3Ŗ€ĀwGËPx;ƒ;ŠL9%˙ČG;3Ŗ€līËP§;˛;ŠLŅ^3Ŗ€ÉĢGËPĘ;Õ;ŠL,3Ŗ€ÜYGËPí;ø;ŠL%3Ŗ€¤ĢËP<<ŠLôã3Ŗ€õqėËP3<><ŠL]3Ŗ€ācGËPV<a<ŠLU%Ų!%5ņ(3 O;ļ–nˑ‹<›<ŠLœ'Ēū3ú.;Ō^ˑŗ<š<ŠLAput;”ķAˑŅ<Ü<ŠLÜ<y™>%3Ë;? ¯ˑ ==ŦįG%ŠLG%3Ŗ€;imGˑ,=7=ŠL%3šƒ;?×íˑX=c=Ŧį%ŠL%3Ĩ";?!+ˑ„==Ŧį]ŠL]B@;?TžˑŦ=Ŧį,ŠL, š¸lš>C’ķpã=!iž7ž7ž7Cp>!ií9í9í9Cėvp!>!i|:|:|:Cėwp@>!i¤B¤B¤BCI-p_>!iP@P@P@C=p~>!iå@å@å@D˛žp!i5‘5‘5‘ É˙0WÉ?E€é0[¤B×>CI¤B!i¤B¤B¤B¤BE80[í9?CIí9!ií9í9í9í9E8.0[|:9?CI|:!i|:|:|:|:EÕz0[P@j?CIP@!iP@P@P@P@EĸĒ0[å@›?CIå@!iå@å@å@å@F@ž0[5‘CI5‘!i5‘5‘5‘5‘ īi@Ũ‘(1I<’áA“Aû‘)Ļs<œŧŲĻAŦAû‘)đú<ĻĒíŋAĘAû‘æ(l„<´>îü$áAėA’’('I<¸žü$BB’’(ņ(<ŋ_ü$%B0B’’(;I<Ã2]ü$GBRB’’(—W<Į}rü$iBtB’’J›ˆ<˙Æü$‡B’’1A ¯u<ÖYD 1AK<ØÉ?Î<ژBG¯u<ÜĪBÕB ’G¯u<ŪäBôB ’Ņ‘9%(ãā<âuâĩB CC’(tH<æ,ĒB(C.C’(SI<ę"Ÿ’ECKC ’(SI<ņ0žĩBbCmC ’%(eN<ųVõ’„CŠC ’+eN<õĩBĸC­C ’%+žI< ’ÅCĐC ’ø@+ëN< c’čCķC ’ø@+~H<ˇßĩB DD’ø@+žH<1ĩB.D9D’ø@,Žö<$wĒBMD’ø@˜B8]ëĀD@‚æ#g^D|DŒDÎL%L.nĩ#^D­DÎL%LŲ!%5ņ(8$|E04T">=JâDčDCJy™"%0d"čą-=J EECJ0*G"T<=J,E2ECJ@õí"ÅĀDGERE,L%.Ī"ĪcEiE,LŲ!%5ņ(8oF0ÜmaD˙ŠEžEŠEaR%*\FMu>¤Né#>˜O6FP^I>ŖFQ>ĸ$FRģ†>ø&Ü/>ú%I_TpFÄ6n9?ˆ; ‰Î$š…F%Ŗū$š% z§$מF%Ŗū$×%7+)ZˇF ųŌ + Í)\jG% k)ažFžr)^ž4%ŗ´)bĪF%ĐĀ)cĪF%üs)dĪF #ŋ)_Ä44ĻÚ)gÜ*ĪF"GĪF4ĻÚ)nŲ‰ūF;GūF4¸ņ)uŒ¤ĪFTGĪFS¸ņ)|Û6ūFūFˇF b*`ÚG%M€*ež4%e/*fž4GĶ*lĸG¨GĘ4GĶ*pˇGĮGĘ4Đ4Đ4I_T1ž4I_T2ž48ŖvwH1strG?HüGHĪã< JTø  H5HÛ4%Lø8U,ā4ÚGKH[HÛ4%LŲ!%5ņ(5Ļņ|HŖ)9D, u=8\Io9æō8_đoF8aF);M8qÂHČHé5;M8sØHãHé5ī5Âû8yķHūHé5%VĐũ8hūõ8i"IōđI‡H,b8\~Iõ;;M8qEIKI+6;M8s[IfI+616 Âû8yrI+6% l@vĻI8ˇœ'>ˇœ'3ũü$ī@oëI ~I+¸>@rá°ü$ŅIáIû5Ņ5Ņ5I_Tpœ'ĻI ÷)„RJ ˇF%y)‰œ'(ŗ¨)ŒBF)%J+J6(ŗ¨)Cú*‘BJHJ6ë0œ'đI"IW9,)ZëVX›R)Į K "I!:-)ÉĻI!U¨)ʡF!˜.)Ë K"ē_)Í´JēJ76"ē_)ŌĘJÚJ76=6C62˛)āörīJõJ76$ãĻIYŠü$<æō)nđKJč)]Ö;ZŦA)éiJ<žr)bž4<#ŋ)cÄ4<´‡)fœ'<Æ&)gœ'\K€XK)õŅ5oF)ö*‘Î)øëV9{)ũtX‹ )˙6"7Ŧ)ßXåX¯6]7Ŧ)õXY¯6ÄX"7Ŧ)YY¯6ĩ6ŽX+ãā) 2ŠŽX8Y>Yģ6+tH)râ˜XVY\Yģ6+öN)tWŖXtYzYģ6+SI)˜CÁ6’Y˜Y¯6+SI) _BšX°YģY¯6%+eN)(@“Á6ĶYŲY¯6+eN)/ΒšXņYüY¯6%+l„)7G>ü$ZZģ6Į6šX+ņ();Zü$D[÷[ũ[—60´…/AL/[\\—60ļ/E˜>([5\;\—60)/NÖĢ4[T\Z\—61end/WüF4[s\y\—60Qē/`KL[’\˜\—60(3/iXÕL[ą\ˇ\—60•Ĩ/”Ī1ü$Đ\Ö\—60ķņ/™í#X[ī\õ\—60ĩ/žÄSX[]]—62˛ /­Œ=)]4]6‘60w¸/ķ št_M]X]66[0w¸/í|4[v]†]6@[62i—/\Ũ9›]Ļ]64[0i—/l'X[ŋ]Ę]6Ŗ6øZ2i—/’^1ä]ô]64[4[2.y/k\ ^^60íŪ/ĢÜīX[(^3^—6Ŗ60F×/Ŋ…X4[L^W^6Ŗ60F×/ÁÔŋ@[p^{^—6Ŗ60†%/ŌÖl4[”^Ÿ^6Ŗ60†%/Ö+Œ@[¸^Ã^—6Ŗ60j%/âá94[Ü^į^6Ŗ60j%/æ$E@[_ _—6Ŗ60ŧŋ/û{ĐZ$_/_6Ŗ60ŧŋ/˙…ČĐZH_S_—6Ŗ632œ'5:tĻI5Ļ‡HÕZ ×Ņ*`ß_%M€*etX%e/*fü$GĶ*l§_­_Í6GĶ*pŧ_Ė_Í6Ķ6Ų6I_T1tXI_T2ü$tX*J8\ä`‹=æō8_đoF8aŐ">8bŋK8cŨvĒ8dא;M8qC`I`>7;M8sY`d`>7D7Âû8yt``>7%aœģ8hĄ`ūõ8iä_ōa>Z8hÃ`ūõ8iûÕōáÖ đ38wØ`ōáÖ>7éDä_ Ąˇ Hc !% Oa ä_%V,Ra%įĐSa%æ¤TaG!%V:a@aP7G!%ZOaZaP7V7)s˙eCmaxaP7\7#öPaP7%oFM-?a>ÔK@%ŦA¤õ`˛Ínä_(Ēeqë¸b7ÖaÜah7(ĒeuäV7ķaųan7(ļyÎÖ´abbn7GāČ|%b+bh7GāČ:bEbh7t7´aGāČ‚Ybdbh7đGāȆsbƒbh7đt7GŸ’bbh7%(5;§Ila´bŋbh7đ)<čŽNVŌbâbh7ađb)ˇŌãöbch7đI_TpĻä_é` Öģj֝bÖŋbÖ¨aÖÜaÖųaé`Æ&âoFãa">ä8?KåC?vĒæN?Îįw@Rgé–BibęģjCqëĀjæōėđ˛Íîä_9ķũãcécz7T9ķúcdz7€7ĮcT9ķ/d0dz7ģc†7€7Oc.9ķ>FdQdz7Œ7.ß§bdmdz7%31I§‚Ū’7…ddz7Œ725Îč2­Ĩdĩdz7ģc†70)#δ‹cÎdÔdz70),XR—cídķd˜71end5ˆ”‹c eez71end>VŲ—c+e1e˜70QēGŖL¯cJePez70QēPĒ-Ŗcieoe˜70(3Y>Ŧ¯cˆeŽez70(3bžGŖc§e­e˜70ķņŽ?ĸģcÆeĖe˜70ĩ“Iģcåeëe˜72„#ɰęffz7ģcOc0NŪÃFģc)f/f˜70•ĨįXÚü$HfNf˜7būŦAhpbfmfz7ģc0Žö „Ösc†f‘fz7ģc0Žö˙cĒfĩf˜7ģc2PB ĘfÕf˜7ģc1at6'úscíføfz7ģc1atHœŧcgg˜7ģc0õpSŦ6sc4g:gz70õp[ģËcSgYg˜70U‘cč•scrgxgz70U‘kŌc‘g—g˜7013z¨[c°gļgz7013‚wÉgcĪgÕg˜72ėq‘~Sęgõgz7†723ĩ\H hhz73w¸kt4‹c(h8hz7‹c†72w¸0žMhbhz7‹cģc†70i—}Š?‹c{h†hz7‹c0i—œ杋cŸh¯hz7‹c‹c2˛ ǞīÄhĪhz7’72.yģ Œähęhz72jÖS˙hiz7ģc†7bvXáBĮ#i3iz7đ†72ĻÁŗ™Hi]iz7‹cģc†72 ÕFæ-ri‚iz7‹cא0&—ŽŅŊģc›iĢi˜7ģcœ'2Í˙œl$ĀiËiz7[c3ĮO~?‹cãiîiz7‹c3ĮO™‹cjjz7‹c‹c.&Ä0jEj!i*‘z7*‘*‘ģc.BŌędjyjCI*‘z7*‘*‘ė.P:—“j¨jCI*‘z7*‘*‘€7I_Tp5Ļä_6 (6‹c sˇ$šėj%Žũ$š%Ų!%ũ;8\ĻkÂDæō8_đoF8až7">8bĒ7K8cĩ7vĒ8dģ7;M8qKkQkĶ7;M8saklkĶ7Ų7Âû8y|k‡kĶ7%V„D8hūõ8iėjō¤7ėj ¨9 HÖm !% OOl ėj%V,ROl%įĐSOl%æ¤TOlG!%Vüklå7G!%Zllå7ë7)s˙eĢ /l:lå7ņ7#öPClå7%oFMdF_l>ÔKJG%ŦA¤ˇk˛Ínėj(Ēeq4×÷7˜lžlũ7(Ēeu6ë7ĩlģl8(ļyŲĸvlŌlØl8GāČ|įlílũ7GāČülmũ7 8vlGāČ‚m&mũ7đGāȆ5mEmũ7đ 8GŸTm_mũ7%(5;§?&Olvmmũ7đ)<čŽ"Š”m¤mũ7Olđb)ˇ>3¸mÃmũ7đI_Tp¤7ĻėjĢk‡Í ÖëtÖ_mցmÖjl֞lÖģlĢkÆ&â¤7oFãOl">äoFKåzFvĒæ…FÎįiGRgéˆIibęëtCqëđtæōėđ˛Íîėj9ķũĨnĢn8T9ķŧnĮn88‰nT9ķ/Ũnōn8}n88n.9ķ>oo8!8.ß§$o/o8%31I§ōH'8GoRo8!825ÎčCÚgowo8}n80)#pMno–o80),ҟYn¯oĩo-81end5f–MnÎoÔo81end>˙Yníoķo-80QēGaŒqn pp80QēPlen+p1p-80(3Yi“qnJpPp80(3bÜfenipop-80ķņŽCĘ}nˆpŽp-80ĩ“Ņ}n§p­p-82„#ÉĩÂpŌp8}nn0NŪ}nëpņp-80•Ĩį'*ü$ qq-8būŦAŽŠ$q/q8}n0Žö ˇų5nHqSq8}n0Žö‘ÁAnlqwq-8}n2PB o/Œq—q-8}n1at6o5n¯qēq8}n1atHøAnŌqŨq-8}n0õpSŠ5nöqüq80õp[áAnrr-80U‘c›×5n4r:r80U‘k‚ˇAnSrYr-8013zđnrrxr8013‚Ũî)n‘r—r-82ėq‘ûŦrˇr8823ĩ ĖrŌr83w¸kAMnęrúr8Mn82w¸0ps$s8Mn}n80i—}˜éMn=sHs8Mn0i—œíOMnasqs8MnMn2˛ ĒĒM†s‘s8'82.yģZėĻsŦs82jÖrĘÁsŅs8}n8bvXáœâåsõs8đ82ĻÁc] tt8Mn}n82 ÕFåA4tDt8Mnģ70&—Ž“į}n]tmt-8}nœ'2Í˙œ}/‚tt8n3ĮOiLMnĨt°t8Mn3ĮO™ŠMnČtØt8MnMnI_Tp¤75Ļėj6›(6fđÛm ėŧ4¯1u@4ŗæoF4´ž7K4ĩĩ7ĩRž7 `Ę3oIuc3q ģ?Ėh8\v’Iæō8_đoF8a\8">8bb8K8ch8vĒ8dn8;M8q¨uŽu†8;M8sžuÉu†8Œ8Âû8yŲuäu†8%V†;8hūõ8iIuōëIu ¯x H3x !% OŦv Iu%V,RŦv%įĐSŦv%æ¤TŦvG!%VYv_v˜8G!%Znvyv˜8ž8)s˙eh<Œv—v˜8¤8#öP v˜8%oFM4Kŧv>ÔKL%ŦA¤v˛ÍnIu(ĒeqE?Ē8õvûv°8(Ēeu€ž8wwļ8(ļy´ŽĶv/w5wļ8GāČ|DwJw°8GāČYwdw°8ŧ8ĶvGāČ‚xwƒw°8đGāȆ’wĸw°8đŧ8GŸąwŧw°8%(5;§ üŦvĶwŪw°8đ)<čŽQÜņwx°8Ŧvđb)ˇLYx x°8đI_TpëĻIuv1I ÖMÖŧwÖŪwÖĮvÖûvÖwvÆ&âëoFãŦv">ä?KKåJKvĒæUKÎį]LRgé|NibęMCqëRæōėđ˛ÍîIu9ķũyyÂ8T9ķy$yÂ8Č8æxT9ķ/:yOyÂ8ÚxÎ8Č8nx.9ķ>eypyÂ8Ô8.ß§yŒyÂ8%31I§$Ú8¤y¯yÂ8Ô825ÎčēÄyÔyÂ8ÚxÎ80)#ŪĒxíyķyÂ80),ī-ļx zzā81end5v÷Ēx+z1zÂ81end>—’ļxJzPzā80QēGŒ8ÎxizozÂ80QēPrÂxˆzŽzā80(3Y' Îx§z­zÂ80(3bĄ—ÂxÆzĖzā80ķņŽXņÚxåzëzā80ĩ“ۍÚx{ {ā82„#ÉŽO{/{Â8Úxnx0NŪR‡ÚxH{N{ā80•Ĩᕞü$g{m{ā8būŦA×ä{Œ{Â8Úx0Žö Ū)’xĨ{°{Â8Úx0ŽöˆržxÉ{Ô{ā8Úx2PB )Qé{ô{ā8Úx1at6ķ¤’x ||Â8Úx1atH@Xžx/|:|ā8Úx0õpSČT’xS|Y|Â80õp[Ų§žxr|x|ā80U‘cz`’x‘|—|Â80U‘kÂÛžx°|ļ|ā8013zƒzxĪ|Õ|Â8013‚1†xî|ô|ā82ėq‘—Õ }}Â8Î823ĩģP)}/}Â83w¸k7ģĒxG}W}Â8ĒxÎ82w¸0p^l}}Â8ĒxÚxÎ80i—}˜1Ēxš}Ĩ}Â8Ēx0i—œaaĒxž}Î}Â8ĒxĒx2˛ ĒŊāã}î}Â8Ú82.y줺~ ~Â82jÖš~.~Â8ÚxÎ8bvXáâB~R~Â8đÎ82ĻÁSig~|~Â8ĒxÚxÎ82 ÕF47‘~Ą~Â8Ēxn80&—ŽÄÚxē~Ę~ā8Úxœ'2Í˙œ!ėß~ę~Â8zx3ĮOæ,Ēx Â8Ēx3ĮO™õ Ēx%5Â8ĒxĒxÚxI_Tpë5ĻIu6û6fû8xI-8\€›Pæō8_đoF8a"9">8b(9K8c.9vĒ8d49;M8qģÁL9;M8sŅÜL9R9Âû8yė÷L9%VF+8hūõ8i\ōģ\ ž HF‚ !% Oŋ€ \%V,Rŋ€%įĐSŋ€%æ¤Tŋ€G!%Vl€r€^9G!%Z€Œ€^9d9)s˙eŸ€Ē€^9j9#öPŗ€^9%oFM=RĪ€>ÔK#S%ŦA¤'€˛Ín\(ĒeqÂ0p9v9(Ēeuõd9%+|9(ļy‘æ€BH|9GāČ|W]v9GāČlwv9‚9æ€GāČ‚‹–v9đGāȆĨĩv9đ‚9GŸÄĪv9%(5;§Ęœŋ€æņv9đ)<čޝZ‚‚v9ŋ€đb)ˇÛ(‚3‚v9đI_TpģĻ\€+ Öe‰Ö΁ÖņÖڀցÖ+€Æ&âģoFãŋ€">äHRKåSRvĒæ^RÎįfSRgé’Uibęe‰Cqëj‰æōėđ˛Íî\9ķũƒƒˆ9T9ķ,ƒ7ƒˆ9Ž9ų‚T9ķ/Mƒbƒˆ9í‚”9Ž9‚.9ķ>xƒƒƒˆ9š9.ß§”ƒŸƒˆ9%31I§úņ 9ˇƒÂƒˆ9š925ÎčN†׃įƒˆ9í‚”90)#`ÔŊ‚„„ˆ90),ŧiɂ„%„Ļ91end5QČŊ‚>„D„ˆ91end>âÉ‚]„c„Ļ90QēGŖąá‚|„‚„ˆ90QēPe6Ղ›„Ą„Ļ90(3Y5á‚ē„Ā„ˆ90(3bP;ՂŲ„ß„Ļ90ķņŽQ)í‚ø„ū„Ļ90ĩ“ĪĐí‚……Ļ92„#ɡo2…B…ˆ9킁‚0NŪ›Ėí‚[…a…Ļ90•ĨįÜæü$z…€…Ļ9būŦAuŋ”…Ÿ…ˆ9í‚0Žö ‰ËĨ‚¸…Ã…ˆ9í‚0Žö‹|ą‚܅į…Ļ9í‚2PB Ύü…†Ļ9í‚1at6mXĨ‚†*†ˆ9í‚1atHfgą‚B†M†Ļ9í‚0õpSpOĨ‚f†l†ˆ90õp[Ÿlą‚…†‹†Ļ90U‘cüQĨ‚¤†Ē†ˆ90U‘kAą‚ÆɆĻ9013z‚â†č†ˆ9013‚á=™‚‡‡Ļ92ėq‘Ũ‡'‡ˆ9”923ĩ L<‡B‡ˆ93w¸kĻxŊ‚Z‡j‡ˆ9Ŋ‚”92w¸0ö‡”‡ˆ9Ŋ‚í‚”90i—}’iŊ‚­‡¸‡ˆ9Ŋ‚0i—œŋøŊ‚҇ᇈ9Ŋ‚Ŋ‚2˛ Ē @ö‡ˆˆ9 92.yģĨčˆˆˆ92jÖŊ¨1ˆAˆˆ9í‚”9bvXá Uˆeˆˆ9đ”92ĻÁ‹ˆzˆˆˆ9Ŋ‚í‚”92 ÕF82¤ˆ´ˆˆ9Ŋ‚490&—Ž#Qí‚͈ŨˆĻ9킜'2Í˙œlōˆũˆˆ9‚3ĮO'pŊ‚‰ ‰ˆ9Ŋ‚3ĮO™FāŊ‚8‰H‰ˆ9Ŋ‚Ŋ‚í‚Ŋ‚I_Tpģ5Ļ\6ž&6ųK‚ :8\.Š—Uæō8_đoF8aí9">8bķ9K8cū9vĒ8d:;M8q͉؉:;M8sé‰ô‰:":Âû8yŠŠ:%V+8hūõ8it‰ōÛ9t‰ ?à H^Œ !% O׊ t‰%V,R׊%įĐS׊%æ¤T׊G!%V„ŠŠŠ.:G!%Z™Š¤Š.:4:)s˙eØũˇŠÂŠ.:::#öPˊ.:%oFM9WįŠ>ÔKX%ŦA¤?ОÍnt‰(ĒeqŠ@: ‹&‹F:(Ēeuyá4:=‹C‹L:(ļyagūŠZ‹`‹L:GāČ|o‹u‹F:GāČ„‹‹F:R:ūŠGāČ‚Ŗ‹Ž‹F:đGāȆŊ‹Í‹F:đR:GŸÜ‹į‹F:%(5;§îk׊ū‹ ŒF:đ)<čŽz¤Œ,ŒF:׊đb)ˇR>@ŒKŒF:đI_TpÛ9Ļt‰3Š~[ Öx“Öį‹Ö ŒÖōŠÖ&‹ÖC‹3ŠÆ&âÛ9oFã׊">äDWKåOWvĒæZWÎįbXRgéZibęx“Cqë}“æōėđ˛Íît‰9ķũ-3X:T9ķDOX:^:T9ķ/ezX:d:^:™Œ.9ķ>›X:j:.ß§ŦˇX:%31I§æ0p:ĪÚX:j:25ÎčŪÍī˙X:d:0)#JՌŽŽX:0),Ŋ´áŒ7Ž=Žv:1end5L–ÕŒVŽ\ŽX:1end>4yáŒuŽ{Žv:0QēGb<ųŒ”ŽšŽX:0QēPKĻíŒŗŽšŽv:0(3Yņ~ųŒŌŽØŽX:0(3b—!íŒņŽ÷Žv:0ķņŽcuv:0ĩ“ؚ/5v:2„#ɘYJZX:™Œ0NŪ6Dsyv:0•ĨįÕ?ü$’˜v:būŦAFŦˇX:0Žö /ŊŒĐÛX:0ŽöŸ$Ɍô˙v:2PB Ũΐv:1at6lkŊŒ7BX:1atHK6ɌZev:0õpSĘsŊŒ~„X:0õp[..ɌŖv:0U‘cčžŊŒŧÂX:0U‘k/aɌېáv:013zŽûĨŒú‘X:013‚ʉąŒ‘‘v:2ėq‘k4‘?‘X:d:23ĩĮęT‘Z‘X:3w¸kŲ_Ռr‘‚‘X:Ռd:2w¸0ä—‘Ŧ‘X:Ռd:0i—}**ՌÅ‘Đ‘X:Ռ0i—œ{!Ռé‘ų‘X:ՌՌ2˛ ǎD’’X:p:2.yģŗÔ.’4’X:2jÖĘI’Y’X:d:bvXá“Ym’}’X:đd:2ĻÁØŊ’’§’X:Ռd:2 ÕFˆ”ŧ’Ė’X:Ռ:0&—Ž0 å’õ’v:œ'2Í˙œS€ ““X:ĨŒ3ĮOi(Ռ-“8“X:Ռ3ĮO™´ÕŒP“`“X:ՌՌI_TpÛ95Ļt‰6ē 6Ō-cŒųÚ8\A” \æō8_đoF8a|:">8b–'K8c‚:vĒ8dˆ:;M8qæ“ė“ :;M8sü“” :Ļ:Âû8y”"” :%V9G8hūõ8i‡“ō%‡“ iž Hq– !% Oę” ‡“%V,Rę”%įĐSę”%æ¤Tę”G!%V—””˛:G!%ZŦ”ˇ”˛:¸:)s˙e|ųƔՔ˛:ž:#öPŪ”˛:%oFMB^ú”>ÔK(_%ŦA¤R”˛Ín‡“(ĒeqˆĮÄ:3•9•Ę:(Ēeu€…¸:P•V•Đ:(ļy•m•s•Đ:GāČ|‚•ˆ•Ę:GāČ—•ĸ•Ę:Ö:•GāČ‚ļ•Á•Ę:đGāȆЕā•Ę:đÖ:GŸī•ú•Ę:%(5;§ Õę”––Ę:đ)<čŽú/–?–Ę:ę”đb)ˇw¯S–^–Ę:đI_Tp%Ļ‡“F”ą§ ֋Öú•Ö–Ö•Ö9•ÖV•F”Æ&â%oFãę”">äM^KåX^vĒæc^Îįk_RgéŠaibꋝCq됝æōėđ˛Í9ķũ@—F—Ü:T9ķW—b—Ü:â:$—T9ķ/x——Ü:—č:â:Ŧ–.9ķ>Ŗ—Ž—Ü:î:.ß§ŋ—Ę—Ü:%31I§ŒTô:â—í—Ü:î:25Îč˜˜Ü:—č:0)#0č–+˜1˜Ü:0),Ørô–J˜P˜ú:1end5}č–i˜o˜Ü:1end>°sô–ˆ˜Ž˜ú:0QēG0 —§˜­˜Ü:0QēP1—Æ˜Ė˜ú:0(3Yĩ —å˜ë˜Ü:0(3baq—™ ™ú:0ķņŽQŧ—#™)™ú:0ĩ“i —B™H™ú:2„#É'&]™m™Ü:—Ŧ–0NŪ —†™Œ™ú:0•ĨįÉ!ü$Ĩ™Ģ™ú:būŦA›ēŋ™Ę™Ü:—0Žö Ø+Жã™î™Ü:—0Žö8čܖššú:—2PB žH'š2šú:—1at6€ŧЖJšUšÜ:—1atHvjܖmšxšú:—0õpS6 Ж‘š—šÜ:0õp[ILܖ°šļšú:0U‘c˛õЖΚ՚Ü:0U‘k-°ܖîšôšú:013zp$¸– ››Ü:013‚NÁĖ,›2›ú:2ėq‘&<G›R›Ü:č:23ĩ]õg›m›Ü:3w¸kŽč–…›•›Ü:č–č:2w¸0šĒ›ŋ›Ü:č–—č:0i—}tPč–؛ã›Ü:č–0i—œÎ č–ü› œÜ:č–č–2˛ Ēæ<!œ,œÜ:ô:2.yģkAœGœÜ:2jÖĮ\œlœÜ:—č:bvXáM€œœÜ:đč:2ĻÁĨœēœÜ:č–—č:2 ÕF`ũΜߜÜ:č–ˆ:0&—Ž÷/—øœú:—œ'2Í˙œŧ€(Ü:¸–3ĮOĩGč–@KÜ:č–3ĮO™_Tč–csÜ:č–č–—I_Tp%5Ļ‡“6Ģ6<Žv–AvK’Aw|’A{X;An;A‚ƒ;Aƒ™;A„¯;A†Ø;A‰ķ;A‹ <AŽ$<A?<A_<A’<A˜Ą<Aš­<A›Ā<AœÚ<Aų<Až=A .=AĄN=Aņ­’AöĀaA÷i=Aų„=AúØ=Aûš=Aüš=Aũō=*›8\&ŸŪaæō8_đoF8aP@">8b\@K8cg@vĒ8dm@;M8qËžŅž…@;M8sážėž…@‹@Âû8yüžŸ…@%V]48hūõ8ilžōV@lž ŗŪ HVĄ !% OΟ lž%V,RΟ%įĐSΟ%æ¤TΟG!%V|Ÿ‚Ÿ—@G!%Z‘ŸœŸ—@@)s˙eQ¯ŸēŸ—@Ŗ@#öPß—@%oFM€cߟ>ÔKfd%ŦA¤7Ÿ˛Ínlž(ĒeqČPŠ@  ¯@(Ēeu”@5 ; ĩ@(ļyœėöŸR X ĩ@GāČ|g m ¯@GāČ| ‡ ¯@ģ@öŸGāČ‚› Ļ ¯@đGāȆĩ Å ¯@đģ@GŸÔ ß ¯@%(5;§¨HΟö Ą¯@đ)<čތĄ$Ą¯@Οđb)ˇÛË8ĄCĄ¯@đI_TpV@Ļlž+Ÿ 9 Öp¨Öß ÖĄÖęŸÖ Ö; +ŸÆ&âV@oFãΟ">ä‹cKå–cvĒæĄcÎįŠdRgéČfibęp¨Cqëu¨æōėđ˛Íîlž9ķũ%ĸ+ĸÁ@T9ķ<ĸGĸÁ@Į@ ĸT9ķ/]ĸrĸÁ@ũĄÍ@Į@‘Ą.9ķ>ˆĸ“ĸÁ@Ķ@.ß§¤ĸ¯ĸÁ@%31I§” Ų@ĮĸŌĸÁ@Ķ@25ÎčŊ‘ŲĄmŖsŖß@0QēG9ĮņĄŒŖ’ŖÁ@0QēPÃLåĄĢŖąŖß@0(3YgėņĄĘŖĐŖÁ@0(3bĖõåĄéŖīŖß@0ķņŽDøũĄ¤¤ß@0ĩ“—˜ũĄ'¤-¤ß@2„#ÉŒŲB¤R¤Á@ũĄ‘Ą0NŪR•ũĄk¤q¤ß@0•Ĩį`Šü$Ф¤ß@būŦAõZ¤¤¯¤Á@ũĄ0Žö ™ ĩĄȤͤÁ@ũĄ0ŽöhhÁĄė¤÷¤ß@ũĄ2PB ¯Ē ĨĨß@ũĄ1at6qqĩĄ/Ĩ:ĨÁ@ũĄ1atH/ÜÁĄRĨ]Ĩß@ũĄ0õpS/NĩĄvĨ|ĨÁ@0õp[jęÁĄ•Ĩ›Ĩß@0U‘cŖĩĄ´ĨēĨÁ@0U‘kÚåÁĄĶĨŲĨß@013zú`ĄōĨøĨÁ@013‚R”ŠĄĻĻß@2ėq‘Šë,Ļ7ĻÁ@Í@23ĩ=LĻRĻÁ@3w¸k[ÍĄjĻzĻÁ@ÍĄÍ@2w¸0ZČĻ¤ĻÁ@ÍĄũĄÍ@0i—}éßÍĄŊĻČĻÁ@ÍĄ0i—œ1FÍĄáĻņĻÁ@ÍĄÍĄ2˛ Ēßö§§Á@Ų@2.yģüŦ&§,§Á@2jÖėA§Q§Á@ũĄÍ@bvXá™2e§u§Á@đÍ@2ĻÁö~ЧŸ§Á@ÍĄũĄÍ@2 ÕF!=´§Ä§Á@ÍĄm@0&—ŽbĢũĄŨ§í§ß@ũĄœ'2Í˙œŗ/¨ ¨Á@Ą3ĮO…AÍĄ%¨0¨Á@ÍĄ3ĮO™ŅÍĄH¨X¨Á@ÍĄÍĄũĄI_TpV@5Ļlž6="JŖ a¨ĒGËdë¤ iŠddŌ nŠd@ oËoF p'ËK q2ËCq yÕ¨Û¨×C/Cq ë¨ö¨×C•¨Cq „ŠŠ×CŨC3­Í “°T•¨)Š/ŠãC3tH Ą|ūš¨GŠMŠãC3öN ­˙ ­¨eŠkŠãC3SI ļ8éCƒŠ‰Š×C3SI Â@6u¨ĄŠŦŠ×C%3eN ĪōSéCÄŠĘŠ×C3eN Ûˇ„u¨âŠíŠ×C%3~H čju¨ĒĒãCĄ¨3žI ōhŠéC(Ē3Ē×CĄ¨3žH ūÎu¨KĒVĒãCĄ¨0ëN *ūéCoĒzĒ×CĄ¨0Žö Fš¨“ĒžĒãCĄ¨ĩRŠd[ĄÖž8\gĢįhæō8_đoF8aå@">8bņ@K8cü@vĒ8dA;M8q ĢĢA;M8s"Ģ-ĢA AÂû8y=ĢHĢA%V8Ŧ8hūõ8i­Ēōë@­Ē !Ō H—­ !% OŦ ­Ē%V,RŦ%įĐSŦ%æ¤TŦG!%VŊĢÃĢ,AG!%ZŌĢŨĢ,A2A)s˙e÷ēđĢûĢ,A8A#öPŦ,A%oFM‰j Ŧ>ÔKok%ŦA¤x̞Ín­Ē(ĒeqŪ>AYŦ_ŦDA(ĒeuûF2AvŦ|ŦJA(ļyØ"7Ŧ“Ŧ™ŦJAGāČ|¨ŦŽŦDAGāČŊŦČŦDAPA7ŦGāČ‚ÜŦįŦDAđGāȆöŦ­DAđPAGŸ­ ­DA%(5;§F&Ŧ7­B­DAđ)<čŽ"<U­e­DAŦđb)ˇ¨Īy­„­DAđI_Tpë@Ļ­ĒlĢŗj Öļ´Ö ­ÖB­Ö+ŦÖ_ŦÖ|ŦlĢÆ&âë@oFãŦ">ä”jKåŸjvĒæĒjÎį˛kRgéŪmibęļ´Cqëģ´æōėđ˛Íî­Ē9ķũfŽlŽVAT9ķ}ވŽVA\AJŽT9ķ/žŽŗŽVA>ŽbA\AŌ­.9ķ>ÉŽÔŽVAhA.ß§åŽđŽVA%31I§˙]nA¯¯VAhA25Îčķ(¯8¯VA>ŽbA0)#ã.ŽQ¯W¯VA0),OįŽp¯v¯tA1end5–ÉŽ¯•¯VA1end>D˛Žޝ´¯tA0QēG#p2ŽÍ¯Ķ¯VA0QēPJæ&Žė¯ō¯tA0(3Y2Ž °°VA0(3b=F&Ž*°0°tA0ķņŽ’>ŽI°O°tA0ĩ“āB>Žh°n°tA2„#Éۘƒ°“°VA>ŽŌ­0NŪm=>ŽŦ°˛°tA0•ĨįŠmü$Ë°Ņ°tAbūŦA™å°đ°VA>Ž0Žö žõö­ ąąVA>Ž0ŽöãŽ-ą8ątA>Ž2PB IįMąXątA>Ž1at6oõö­pą{ąVA>Ž1atH\˜Ž“ąžątA>Ž0õpSqĒö­ˇąŊąVA0õp[\RŽֹܹtA0U‘cpYö­õąûąVA0U‘kĩųޞ˛tA013zІۭ3˛9˛VA013‚)ę­R˛X˛tA2ėq‘{Em˛x˛VAbA23ĩô˛“˛VA3w¸kÃJŽ̞ģ˛VAŽbA2w¸0ÉÁвå˛VAŽ>ŽbA0i—}DyŽū˛ ŗVAŽ0i—œOŽ"ŗ2ŗVAŽŽ2˛ Ē2GŗRŗVAnA2.yģVUgŗmŗVA2jÖj*‚ŗ’ŗVA>ŽbAbvXáĖĻŗļŗVAđbA2ĻÁČëËŗāŗVAŽ>ŽbA2 ÕF8_õŗ´VAŽA0&—Žģą>Ž´.´tA>Žœ'2Í˙œÂáC´N´VAŪ­3ĮO‚Žf´q´VAŽ3ĮO™ž–މ´™´VAŽŽ>ŽŽI_Tpë@5Ļ­Ē656ˆĄœ­g˛8\ĩ"pæō8_đoF8a°A">8bļAK8cŧAvĒ8dÂA;M8q$ĩ*ĩÚA;M8s:ĩEĩÚAāAÂû8yUĩ`ĩÚA%V•J8hūõ8iÅ´ō)ļÅ´ !ũ H¯ˇ !% O(ļ Å´%V,R(ļ%įĐS(ļ%æ¤T(ļG!%VÕĩÛĩėAG!%ZęĩõĩėAōA)s˙e,ļļėAøA#öPļėA%oFMÄq8ļ>ÔKĒr%ŦA¤ĩ˛ÍnÅ´(Ēeq\ūAqļwļB(ĒeuŽéōAŽļ”ļ B(ļy–ØOļĢļąļ BGāČ|ĀļÆļBGāČÕļāļBBOļGāČ‚ôļ˙ļBđGāȆˇˇBđBGŸ-ˇ8ˇB%(5;§|ĩ(ļOˇZˇBđ)<čŽEGmˇ}ˇB(ļđb)ˇH‘ˇœˇBđI_Tp)ļĻÅ´„ĩ= ÖÉžÖ8ˇÖZˇÖCļÖwļ֔ļ„ĩÆ&â)ļoFã(ļ">äĪqKåÚqvĒæåqÎįírRgé uibęÉžCqëΞæōėđ˛ÍîÅ´9ķũ~¸„¸BT9핏 ¸BBb¸T9ķ/ļ¸Ë¸BV¸"BBęˇ.9ķ>á¸ė¸B(B.ß§ũ¸šB%31I§*×.B š+šB(B25ÎčøĐ@šPšBV¸"B0)#šŖ&¸išošB0),Kš2¸ˆšŽš4B1end5Ģ&¸§š­šB1end>˜í2¸ÆšĖš4B0QēGšpJ¸åšëšB0QēPáŒ>¸ē ē4B0(3Y§ŒJ¸#ē)ēB0(3bÃÛ>¸BēHē4B0ķņŽÜV¸aēgē4B0ĩ“ËKV¸€ē†ē4B2„#ÉQ ›ēĢēBV¸ęˇ0NŪIGV¸ÄēĘē4B0•Ĩį.%ü$ãēéē4BbūŦAߥũēģBV¸0Žö ĸ!ģ,ģBV¸0Žö?q¸EģPģ4BV¸2PB ˛Åeģpģ4BV¸1at6]¸ˆģ“ģBV¸1atHxˇ¸Ģģļģ4BV¸0õpSÍ ¸ĪģÕģB0õp[F¸îģôģ4B0U‘cĨ#¸ ŧŧB0U‘kwĮ¸,ŧ2ŧ4B013z}ųöˇKŧQŧB013‚,F¸jŧpŧ4B2ėq‘i…ŧŧB"B23ĩ”šĨŧĢŧB3w¸kČŋ&¸ÃŧĶŧB&¸"B2w¸0U)čŧũŧB&¸V¸"B0i—}žČ&¸Ŋ!ŊB&¸0i—œĘt&¸:ŊJŊB&¸&¸2˛ Ē/_ŊjŊB.B2.yģÅŊ…ŊB2jÖĪEšŊĒŊBV¸"BbvX፞ŊÎŊBđ"B2ĻÁA;ãŊøŊB&¸V¸"B2 ÕF2° žžB&¸ÂA0&—ŽņņV¸6žFž4BV¸œ'2Í˙œÖz[žfžBöˇ3ĮOĩu&¸~ž‰žB&¸3ĮO™&¸ĄžąžB&¸&¸V¸I_Tp)ļ5ĻÅ´6ĶD6„ļ´ˇ žã4¯ŋ f4ą<@4ŗæoF4´"9K4ĩ.9ĩR"9 {3o2ŋc3q ģ? ŧ4ētŋ f4ŧ<@4žæoF4ŋŋK4ĀאĩRŋ YT3hŒŋc3j ģ?Œ8\FĀ5wæō8_đoF8a¤B">8bĒBK8cĩBvĒ8dģB;M8qëŋņŋĶB;M8sĀ ĀĶBŲBÂû8yĀ'ĀĶB%V_Ú8hūõ8iŒŋō;Œŋ ú† Hv !% OīĀ Œŋ%V,RīĀ%įĐSīĀ%æ¤TīĀG!%VœĀĸĀåBG!%ZąĀŧĀåBëB)s˙eŽ›ĪĀÚĀåBņB#öPãĀåB%oFM×x˙Ā>ÔKŊy%ŦA¤WžÍnŒŋ(ĒeqMs÷B8Á>ÁũB(ĒeuÖPëBUÁ[ÁC(ļy¯ÁrÁxÁCGāČ|‡ÁÁũBGāČœÁ§ÁũB CÁGāČ‚ģÁÆÁũBđGāȆÕÁåÁũBđ CGŸôÁ˙ÁũB%(5;§"ĀīĀÂ!ÂũBđ)<čŽÜ:4ÂDÂũBīĀđb)ˇŠ"XÂcÂũBđI_Tp;ĻŒŋKĀF‘ ֐ÉÖ˙ÁÖ!ÂÖ ÁÖ>ÁÖ[ÁKĀÆ&â;oFãīĀ">äâxKåíxvĒæøxÎįzRgé,|ibęÉCqë•Éæōėđ˛ÍîŒŋ9ķũEÃKÃCT9ķ\ÃgÃCC)ÃT9ķ/}ÒÃCÃCCąÂ.9ķ>¨ÃŗÃC!C.ß§ÄÃĪÃC%31I§Në'CįÃōÃC!C25Îč ÄÄCÃC0)#GšíÂ0Ä6ÄC0),“kųÂOÄUÄ-C1end5éîíÂnÄtÄC1end>Ē<ųēÄ-C0QēGŗ5ÃŦIJÄC0QēPÍÃËÄŅÄ-C0(3Yą`ÃęÄđÄC0(3b÷Xà ÅÅ-C0ķņŽlŽÃ(Å.Å-C0ĩ“šåÃGÅMÅ-C2„#ÉA}bÅrÅCÃąÂ0NŪáËőÅ-C0•ĨįÜķü$ĒŰÅ-CbūŦAä;ÄÅĪÅCÃ0Žö –KÕÂčÅķÅCÃ0ŽöŊáÂ ÆÆ-CÃ2PB ‹ã,Æ7Æ-CÃ1at6ŪÕÂOÆZÆCÃ1atHĘVáÂrÆ}Æ-CÃ0õpS 4Õ–ƜÆC0õp[éęáÂĩÆģÆ-C0U‘cMÕÂÔÆÚÆC0U‘kōáÂķÆųÆ-C013zåŊÂĮĮC013‚ fÉÂ1Į7Į-C2ėq‘aLĮWĮCC23ĩ`ĸlĮrĮC3w¸kW:íŠĮšĮCíÂC2w¸0i¯ĮÄĮCíÂÃC0i—}ŪÎíÂŨĮčĮCíÂ0i—œ‚›íÂČČCíÂíÂ2˛ ĒŦv&Č1ČC'C2.yģ=’FČLČC2jÖaČqČCÃCbvXáJØ…Č•ČCđC2ĻÁJĒČŋČCíÂÃC2 ÕFšÕÔČäČCíÂģB0&—ŽđŅÃũČ É-CÜ'2Í˙œėQ"É-ÉCŊÂ3ĮOÍÉíÂEÉPÉCíÂ3ĮO™íÂhÉxÉCíÂíÂÃI_Tp;5ĻŒŋ6~6‘×{ đ4¯ÖÉ@4ŗæoF4´¤BK4ĩĩBĩR¤B %3oîÉc3q ģ? Cœ4ē0Ę f4ŧ<@4žæoF4ŋœ'K4ĀkĩRœ' *-3hHĘc3j ģ? q\4ēĘ@4žæoF4ŋņ@K4ĀAĩRņ@ ØG4¯ÁĘ f4ą<@4ŗæoF4´å@K4ĩü@ĩRå@ ˇL3hŲĘc3j ģ? Ņ4¯Ë@4ŗæoF4´P@K4ĩg@ĩRP@ MS4ŖGË@4§ÄdoF4¨ŪdK4ŠŅdĩRŠd )4v”ËeÎ`ËfËßt—'<I_TpV@¯w%ņbP@*Kg@u¨8\SĖd~æō8_đoF8a5‘">8bīCK8cúCvĒ8dD;M8qøËūËD;M8sĖĖDDÂû8y)Ė4ĖD%VP8hūõ8i™Ëō°*™Ë e× HƒÎ !% OüĖ ™Ë%V,RüĖ%įĐSüĖ%æ¤TüĖG!%VŠĖ¯Ė*DG!%ZžĖÉĖ*D0D)s˙egŌÜĖįĖ*D6D#öPđĖ*D%oFM€ Í>ÔKė€%ŦA¤d˞Ín™Ë(ĒeqĪ4ä€Kå€vĒæ'€Îį/RgéNƒibęÕCqëĸÕæōėđ˛Íî™Ë9ķũRĪXĪTDT9ķiĪtĪTDZD6ĪT9ķ/ŠĪŸĪTD*Ī`DZDžÎ.9ķ>ĩĪĀĪTDfD.ß§ŅĪÜĪTD%31I§lDôĪ˙ĪTDfD25Îč;mĐ$ĐTD*Ī`D0)#aÃúÎ=ĐCĐTD0),‚ÕĪ\ĐbĐrD1end5 ęúÎ{ЁĐTD1end>Î\ĪšĐ ĐrD0QēGDˇĪšĐŋĐTD0QēP–>ĪØĐŪĐrD0(3Yà Ī÷ĐũĐTD0(3báŸĪŅŅrD0ķņŽņŸ*Ī5Ņ;ŅrD0ĩ“[*ĪTŅZŅrD2„#ÉrØoŅŅTD*ĪžÎ0NŪđV*Ī˜ŅžŅrD0•Ĩį1]ü$ˇŅŊŅrDbūŦA{,ŅŅÜŅTD*Ī0Žö ¤FâÎõŅŌTD*Ī0ŽöēîÎŌ$ŌrD*Ī2PB n9ŌDŌrD*Ī1at6ZÜâÎ\ŌgŌTD*Ī1atHîÎԊŌrD*Ī0õpSŽWâÎŖŌŠŌTD0õp[ĩCîÎÂŌČŌrD0U‘cøâÎáŌįŌTD0U‘kچîÎĶĶrD013z´ĘÎĶ%ĶTD013‚ÖÎ>ĶDĶrD2ėq‘)4YĶdĶTD`D23ĩ’%yĶĶTD3w¸kČ[úΗͧĶTDúÎ`D2w¸0hąŧĶŅĶTDúÎ*Ī`D0i—}=ÅúÎęĶõĶTDúÎ0i—œŨAúÎÔÔTDúÎúÎ2˛ ǰ3Ô>ÔTDlD2.yģÅSÔYÔTD2jÖĶĘnÔ~ÔTD*Ī`DbvXá=n’ÔĸÔTDđ`D2ĻÁÃmˇÔĖÔTDúÎ*Ī`D2 ÕFŗŨáÔņÔTDúÎD0&—Žŋq*Ī ÕÕrD*Īœ'2Í˙œ$…/Õ:ÕTDĘÎ3ĮObúÎRÕ]ÕTDúÎ3ĮO™aúÎuՅÕTDúÎúÎ*ĪI_Tp°*5Ļ™Ë6SŦ65šˆÎ •t4¯ãÕ@4ŗæoF4´5‘K4ĩúCĩR5‘ _U3oûÕc3q ģ?˜8\oÖXƒæō8_đoF8ašD;M8q6Ö<ÖãD;M8sLÖWÖãDéD Âû8ycÖãD% 6,@v—Ö8ˇ>ˇ3ũü$į@oÜÖ oÖ+¸>@r‰ü$ÂÖŌÖŗDאאI_Tp—Ö úÛ)„C× ˇF%y)‰(ŗ¨)Œ mŐ×ךD(ŗ¨)Ģŋ3×9×ŋDë0áÖûÕWĀ)ZôãXÃú)ĮØ ûÕ!:-)É—Ö!U¨)ʡF!˜.)ËØ"ē_)ÍĨ×Ģ×īD"ē_)Ōģ×Ë×īDõDûD2˛)āۆā׿×īDeōķ×ū×īD%$ã—ÖYŠü$<æō)nđ$ØJč)]4@ZŦA)éZ×<žr)bž4<#ŋ)cÄ4<´‡)f<Æ&)geØKØ—ڝÚE0Të)2o„ØļÚŧÚ E0Të) ’‘‘ØÕÚÛÚE0Á[)wá„ØôÚúÚ E0Á[)w„‘ØÛÛE[ÅÁ)ōfwØ4Û‘Ø[×)ÚאOÛ‘Ø[w$) ‘„ØjÛ>Ø[w$)$įg‘Ø…ÛKØ[(9)(wN„Ø Û>Ø[(9),[‘ØģÛKØ[ÅÁ)0wØÖÛKØ[×)4‚âאņÛKØ[ĻÚ)8Č_>Ø Ü>Ø[ĻÚ)<×!KØ'ÜKØ[¸ņ)@5[>ØBÜ>Ø[¸ņ)D^\KØ]ÜKØ+,?)›ũMoGu܀Ü EEXØ+G )ģČ|oGÜ¨Ü EE+Ôt)üĘ4oGĀÜĐÜ E¸ØE+RN)MzoGčÜøÜ E¸ØE+B )lôįĢØŨ%Ũ E>Ø>Øא+)…H´ĢØ=ŨMŨ E>Øא+tb)žIˆĢØeŨpŨ Eא+()ŗkÁ„؈Ũ˜Ũ E‘Ø„Ø*ĮO)×ĩpŦŨˇŨ E„Ø+žÉ)čârĢØĪŨäŨ E„Ø„Øא+žÉ)øčĩ¸ØüŨŪE‘Ø‘Øא+ą[)šnĢØ)Ū>Ū E„Ø„Øא+ą[)%´¸ØVŪkŪE‘Ø‘Øא.Qė)˜|Ū‚Ū E.Qė)š“ŪŖŪ EõD%EžØ.Qė)žšŪÄŪ E+E.‚u)ĘÕŪāŪ E%01I)G…F1EųŪß E+E0Äô)ŌôC—Öß#ßE0))ÖûĢØ<ßBß E0))Ũ]¸Ø[ßaßE1end)äiĢØz߀ß E1end)čv¸Ø™ßŸßE0Qē)īKķÅØ¸ßžß E0Qē)ķžMŌØ×ßŨßE0(3)÷ã"ÅØößüß E0(3)ûP¸ŌØāāE0•Ĩ)˙ü$4ā:āE0ķņ)t ØSāYāE0ĩ)­6ØrāxāE2˛ )e.Œā˜ā E1E0ŧ)Ņ\iįąāŧā Eא0Yb)ęޝĢØÕāāā Eא0Ûđ)7RĨĢØųā á E¸Øא0á)„ōĢØ"á2á E¸Øא*Ü;)D@›FáQá E¸Ø*Ü;)Rneáuá E¸Ø¸Ø2i—)išŠá•á EĢØ2i—)mxÂĒáĩá E¸Ø0i—)_ސØÎáŲá Eא2i—)Ɲîáūá EĢØĢØ2i—)ƒktâ#â E¸Ø¸Ø2i—)kģČ8âHâ Eŋŋ2.y)Ščč]âcâ E0F×)vžŦĢØ|â‡â Eא0F×)ƒö¸Ø âĢâEא0íŪ)@eØÄâĪâEא0†%)žöĢØčâķâ EE0†%)ĸ[¸Ø ããEE0j%)Ļ;ĢØ0ã;ã EE0j%)ǁV¸ØTã_ãEE0ŧŋ)*ē„Ôįxãƒã Eא0ŧŋ)IŲįœã§ãEא0ž—)žõˆü$ĀãÆãE32ë0EYđ:t—֐Ļä_ Û)Ŧ}åžr)ļĪF%¸=)îäK)¯ŨoF)°Å9{)ĩôã‹ )ˇšDG|˜)šRäXäÖF\|˜)ŊgäräÖF8ä(tH)Á(kä‰ääÜF(öN)ÅPß"äĻäŦäÜF(SI)É âFÃäÉäÖF(SI)ĐC5-äāäëäÖF%(eN)Ø\âFååÖF(eN)ß[-äå*åÖF%(l„)įī6ü$AåLåÜFčF-ä(ņ()ëSü$håsåÜFčFI_Tp ‹Q)ōZįžr)ūūF!¸=)>‰åK)õאoF)öŋÎ)øôã9{)ũ}å‹ )˙ŋD"7Ŧ)čåîåyE]7Ŧ)ūå æyEÍå"7Ŧ)æ$æyEEˇå+ãā) ÆFˇåAæGæ…E+tH)#ĻĄå_æeæ…E+öN).ĘŦå}æƒæ…E+SI)žV‹E›æĄæyE+SI) ŌUÂåšæÄæyE%+eN)(ÄĄ‹EÜæâæyE+eN)/(ĄÂåúæįyE%+l„)7ĘŦü$į(į…E‘EÂå+ņ();Āü$EįPį…E‘EI_Tp6™ķ6ˇ M× Ėš*`Ôį%M€*eôã%e/*fü$GĶ*lœįĸįîFGĶ*pąįÁįîFôFŲ6I_T1ôãI_T2ü$^U ^eōR÷/Z‘ė2¤/sM×%ęū/tęį´‡/gÆ&/h™ú/i—Ö?=/j—Ö˛Í/kä_Î/‚¸ØRg/ƒ¸ØCq/„ŌØæō/†Ø_set/Ž}čƒč7E`set/—“čŖč7EõD=E1č_set/ĸčÃč7ECE01I/ĮŋIEÜčįč7ECE0Äô/=ę@čééOE0´…/AÃņ%čé%éOE0ļ/EŌŲ1č>éDéOE0)/NÔI=č]écéOE1end/WĘ1=č|é‚éOE0Qē/`5ĪUč›éĄéOE0(3/i3UčēéĀéOE0•Ĩ/”Úü$ŲéßéOE0ķņ/™æačøéūéOE0ĩ/žĶačęęOE2˛ /­”Ŧ2ę=ę7EIE0w¸/ķ˙–ėVęaę7EUE č0w¸/¯=čęę7EIčUE2i—/\ĘN¤ę¯ę7E=č0i—/l`’ačČęĶę7E[Eč2i—/’îÄíęũę7E=č=č2.y/ ëë7E0íŪ/Ģ„+ač1ë<ëOE[E0F×/Ŋ2@=čUë`ë7E[E0F×/Á—BIčyë„ëOE[E0†%/ŌŊ8=čë¨ë7E[E0†%/ÖåÔIčÁëĖëOE[E0j%/â+o=čåëđë7E[E0j%/æ Ič ėėOE[E0ŧŋ/ûXËŲį-ė8ė7E[E0ŧŋ/˙dŲįQė\ėOE[EfäĢjėuė7E%325:t—Ö5Ļä_Ūį ôß*`í%M€*e}å%e/*fü$GĶ*lÉėĪė—EGĶ*pŪėîė—EEŲ6I_T1}åI_T2ü$ëV}å Qņ4¯Bí@4ŗæoF4´\8K4ĩh8ĩR\8 Ĩ?4ēyí@4žæoF4ŋb8K4Ān8ĩRb8 $Æ4ē°í@4žæoF4ŋķ9K4Ā:ĩRķ9 ąl4¯įí@4ŗæoF4´í9K4ĩū9ĩRí9 ˆH4¯î@4ŗæoF4´|:K4ĩ‚:ĩR|: Ũ˙4ēUî@4žæoF4ŋĒBK4ĀģBĩRĒB ģ”4¯Œî@4ŗæoF4´°AK4ĩŧAĩR°A Uč4ēÃî@4žæoF4ŋ\@K4Ām@ĩR\@ ۔4¯úî@4ŗæoF4´ÅK4ĩŨĩRŐôã Į@iīOHœ'3ũœ'uĖ@:ī ˙î+¸>@>EË5IīTīúFË5+¸>@Bō‰Ņ5līwīúFŅ5I_Tpœ'ī ŋI4Ŗ˛ī f4ĨS@4§ŽSĩRfS f4ŖŪī f4ĨąB@4§žBĩR–B íČ4Ŗ đ f4ĨÍk@4§ÚkĩR˛k ÅH8 :đ8Ą?\0đJ7J7Ļä_ t@iYđOH3ũ …@:ŧđ :đ+¸>@>}ņŨ„đđGŨ+¸>@BE א§đ˛đGאI_TpYđ k`FņCôĀdėđ!i\8\8\8CŅd ņ!i"9"9"9Cŧd*ņ!i°A°A°ADĮed!iŐŐŐĐŽ3‹mņg3cņ ģ?I_Tp\8 d+4ŅąņdŌ4Ķ\84įE4ԄÅyņņ\8ĩR\8YNEü$&)3‹Øņg3Îņ ģ?I_Tp"9 ü(4ŅōdŌ4Ķ"94įE4Ô­ūäņō"9ĩR"9YNEü$ 4ēHō f4ŧ<@4žæĩR*‘ \™0@ēķEb 0DŐ…ōCI–B!iŐ–B–BŐEąŪ0DŐļōCI*‘!iŐ*‘*‘ŐEƒ0DŐįōCIŐ!iŐŐŐŐEÚå0D°AķCI u!i°A u u°AEœ^0D°AIķCI°A!i°A°A°A°A4”z0Dņ\8~ķCI\8!i\8\8\8\8ElM0D"9¯ķCI"9!i"9"9"9"9Y›^ü$$–3‹áķg3×ķ ģ?I_Tpí9 ŋR4Ņ%ôdŌ4Ķí94įE4ÔRÖíķôí9ĩRí9YNEü$ņŲ3‹Lôg3Bô ģ?I_Tp|: @4ҐôdŌ4Ķ|:4įE4Ô‹Xô|ô|:ĩR|:YNEü$jS3‹ˇôg3­ô ģ?I_Tp¤B ôÖ4ŅûôdŌ4ͤB4įE4ÔkOÃôįô¤BĩR¤BYNEü$7¤3‹"õg3õ ģ?I_Tpz Õ°4ŅfõdŌ4Ķz4įE4ÔÚ".õRõzĩRzYNEü$č•3‹õg3ƒõ ģ?I_TpP@ hą4ŅŅõdŌ4ĶP@4įE4Ԁ˙™õŊõP@ĩRP@YNEü$đ*3‹øõg3îõ ģ?I_Tp°A ˛Y4Ņ<ödŌ4ͰA4įE4Ônŧö(ö°AĩR°AYNEü$Zž3‹cög3Yö ģ?I_Tpå@ b4ҧödŌ4Ķå@4įE4ÔeIoö“öå@ĩRå@YNEü$&3‹Îög3Äö ģ?I_Tp5‘ Ä4Ņ÷dŌ4Ķ5‘4įE4ÔņBÚöūö5‘ĩR5‘YNEü$S3‹9÷g3/÷ ģ?I_TpŐ Ĩd4Ņ}÷dŌ4ĶŐ4įE4ÔE÷i÷ŐĩRŐYNEü$ æ;4¯ŋ÷ f4ą<@4ŗæoF4´°*K4ĩeĩR°* ,4ēö÷@4žæoF4ŋļAK4ĀÂAĩRļA Ęų3høc3j ģ?Š+335øg35+ø ģ?I_Tp\8^|33\øg35Rø ģ?I_Tp"9§_33ƒøg35yø ģ?I_Tpí9ĸ33Ēøg35 ø ģ?I_Tp|:f;33Ņøg35Įø ģ?I_Tp¤B¤¨3:øøg3=îø ģ?I_Tpz  4Ų<ųdŌ4Ûz4įE4Üŧ&ų(ųzĩRzYNEü$}í33cųg35Yų ģ?I_TpP@N33Šųg35€ų ģ?I_Tp°AĒx33ąųg35§ų ģ?I_Tpå@3—33Øųg35Îų ģ?I_Tp5‘ū˜33˙ųg35õų ģ?I_TpŐQc5˙ú TH9í95úI_TpÛ9ķ9ķ9í9 Rg9|:^úI_Tp%–'–'|: ãh9¤B‡úI_Tp;ĒBĒB¤B ڐ9P@°úI_TpV@\@\@P@ ßÎ9å@ŲúI_Tpë@ņ@ņ@å@øĘ95‘I_Tp°*īCīC5‘Ķ)m˙û ŧ q¤B5ûI_Tp;ĒBĒB¤B Qqí9^ûI_TpÛ9ķ9ķ9í9 –$q|:‡ûI_Tp%–'–'|: íqP@°ûI_TpV@\@\@P@ ‰Úqå@ŲûI_Tpë@ņ@ņ@å@ôÉq5‘I_Tp°*īCīC5‘Ņß3‹&üg3ü ģ?I_Tp’g 33Müg35Cü ģ?I_Tp’–G33tüg35jü ģ?I_Tp˜B6æ86=8oíŧũ3.* ƒL˜V8ŸüĨüũIUH¤ ~üģüÆü[L%bøL —ģ%Úüåü[LV80ŧÎ lŅõũūüũũIy™ K%.ú Æ!ũ'ũ[L0Üm ģŖÕũ@ũKũũI%0ŧÎ €V+ũdũoũ[LũŲ!%5ņ(b.yB)&M•ũ ũ[LV8hĖõB~SҰũ[L,L~üĀDE M!OĪ6āũĪ6Ī6EjH!KĪ6úũĪ6Ī6E M!—7ū—7—7 +Pˑ8ūņ(ˑœ' +Pâˑ\ūņ(ˑ%ETh![÷PvūũPĪ6Ī6EM!WĪ6ūĪ6E¸9!_÷PĒūũPĪ6KéCbæ|E8Ŧ÷ãūBl„+xjü$×ū“R™Rēū ‡pŪ ü$˙Ų!%ņ(Ļņœ'א ēÔ Ë‘T˙Ų!%ņ(Ļņˑא ‡pę ü$Š˙Ų!%ņ(Ļņאœ' ÷ā Ļ…vŧ˙{%ŪmRå…vŪmŪm…vE8¸4ɒīÚ˙!&fS[wE:M4Éžīø˙!&–Btx ī ĻŌ|*{%ZRåŌ|ZZŌ|Eæ4ÉęīH!&˛kQ‚C„(ĻgI_TpŐ¤„¤„E7z .ƒ……~™|EaR ŨJˑ­Ų!%ņ(ˑE×$(/*‘ËI_Tp0‘Ņ58 S/ŽĻbäī'ø8iëaË '%Ų!%5ņ(5ĻņAstr~9%F@F^  JNE M!w^7m^7^7El$ÃlF‚%Ej…$ĐˑŽŲ!%ņ(ˑlFC ezÍ!iž7ž7ž7Cķp”ú!iž7I_Tp¤7ž7ž7ß7C!Tz!ií9í9í9C›–”F!ií9I_TpÛ9í9í9(:C`ze!i|:|:|:CĐÚ”’!i|:I_Tp%|:|:Ŧ:C7zą!i¤B¤B¤BC–a”Ū!i¤BI_Tp;¤B¤BßB į ĻJ˜{%,|RåJ˜,|,|J˜CF z/!iP@P@P@C‰<”\!iP@I_TpV@P@P@‘@C\z{!iå@å@å@C_픍!iå@I_Tpë@å@å@&A 6 ĻĻ›Ú{%ČfRåĻ›ČfČfĻ› ū $ü$ūĩRŠdŨCŨC H 0ü$"ĩRŠdŨCŨCC%DzA!i5‘5‘5‘CČŦ”n!i5‘I_Tp°*5‘5‘$DE_ŗ8…ü$‘I_Tp%‰‰ETŊ(/\8¯I_Tpëh8CÜŗ\ÉI_Tpë\8CŠKzč!i\8\8\8C`ĩ”!i\8I_Tpë\8\8’8Eyˆ(/"93I_Tpģ.9CD\MI_Tpģ"9C ›zl!i"9"9"9C{ĸ”™!i"9I_Tpģ"9"9X9EāC(/ŐˇI_TpŨCßë\ŅI_TpŐCĢ zđ!iŐŐŐCs>”!iŐI_TpŐŐJ7C:ˇOEI_T1I_T2ŐאE—Š0kŐvCI–B!iŐ–B–BŐ ß"0ŐļCI–B!iŐI_Tp–B–BŐJ7EwÜ Ÿ–BįĩR–BrÍŽ/–B–BŽ/EE;4ÉúÉ!&œ'Ņ5Eo-ZĘ-_Åœ'œ'œ'<Eëq-rĘPCIœ'œ'œ' S¤yņoĩR\8\8  I\8ĢYŗ{ü$v\8{\8\8\8\8 p!yņĘĩR\8\8 7ë[\8Yŗ{ü$v\8{\8\8\8\8EŲÛi)I_Tp9%ÛiÛi ŗũäņHĩR"9"9 ŌŽI"9„Yŗ{ü$v"9{"9"9"9"9 XĮ!äņŖĩR"9"9 wq["9ßYŗ{ü$v"9{"9"9"9"9E4ɉ÷{!&°*DEÂ&-Z”÷Ŗ_Ű*°*°*<E)ņ-r”÷ÆCI°*°*°*E„$á…FÛ%E'q$ĨĘjųŲ!%%Ej…$˛Ë‘%Ų!%ņ(ˑĘjEj…$îˑQŲ!%ņ(ˑ…FÚG ŅÕ ü$ŒŲ!%ņ(Ļņאœ'C›?(ĻĢI_Tp%‚:‚:CĖ=OĶI_T1I_T2œ'ŐŅ5Eœˆ0kŐCI*‘!iŐ*‘*‘Ő œĻ0ŐDCI*‘!iŐI_Tp*‘*‘ŐJ7EYŗ{ü$I_IIå@I_OIå@å@å@å@ LtŽå@zYŗ{ü$I_IIå@I_OIå@å@å@å@ Ô(Čå@ŦI_IIå@I_OIå@å@å@å@E;c0kå@ŨCIå@!iå@å@å@å@ ×0å@CIå@!iå@I_Tpë@å@å@å@&A A 0'å@]CIå@!iå@Ķ­Ēå@å@å@&A ž0vå@vå@{å@å@å@å@ 0ŋ5‘ËYŗ{ü$I_II5‘I_OI5‘5‘5‘5‘ NôŽ5‘Yŗ{ü$I_II5‘I_OI5‘5‘5‘5‘ ‹Č5‘9I_II5‘I_OI5‘5‘5‘5‘EŌí0k5‘jCI5‘!i5‘5‘5‘5‘ %v05‘ĒCI5‘!i5‘I_Tp°*5‘5‘5‘$D åV0'5‘ęCI5‘!i5‘Ķ™Ë5‘5‘5‘$D Đkv5‘ v5‘{5‘5‘5‘5‘&2?—ÚG ˞u ] Ų!%ņ(Ļņאœ' P4ˑ… Ų!%ņ(ˑ8‘žč .—x#>Ÿ ¯ aį%LUŊ˙#;… Å Õ aį%LŲ!%5ņ(jhex!­@‘ū @‘ xā!k@‘!@‘˞%´ī”N!Ų!%ņ(Ļņœ'א˞P ōHˆ!Ų!%ņ(Ļņאא ˞… ž!Ų!%ņ(Ļņא%4‘… pīĖfSø!_ÅfSrÍû.fSfSû.< _ŗĐ †"Ų!%אא4wÜ pŊ –BV"_Å–BrÍŽ/–B–BŽ/<4^  pøˆ˛k"_ŞkrÍņ/˛k˛kņ/< Ž^ ͞kÂ"{%˛krÍûͲk˛kûÍE^  Ÿ˛kķ"ĩR˛krÍņ/˛k˛kņ/ ¨¯ ģ–B%#{%–BI_Tp–B–Bא ØvŐW#vŐ{ŐŐŐŐyü Üv\8Ž#v\8{\8\8\8\8 ‹7 ĶfSĀ#{%fSrÍ ĩfSfS ĩE‘… ŸfSņ#ĩRfSrÍû.fSfSû.k§7e‚Q$ŪklQ1>‚ÎaFlT1Jô7đSŽDNtx:$œ'm4 ELZˑo$Ų!%ņ(ˑœ'ĒūËn> D8@4))Ļ‹#ž4˜$ž4úb)N‰9Ŋ$ü$ž4ž43e ÕRD?¨Ō$œ'4nE)Ŗß\Ä4ë$Ä4n‘D4›Žü$|&%ointw.$â€bQ°ˆ"$ ÅķŪÕ %>hF0n% 2Û”Gõî&%”Gö%%E÷Gû°*%īØGü°*% Gũ°* %oGū°*%^ĪG˙°*!¤SG°*!đG°*!|G°* !&TG°*$!ÕG°*(!xRG°*,!;cGR“0!įîG X“4!ChG %8!8“G%Jų'ų'ų'%Ķ'v$% ŽRJ÷'($%Ķ' SJ %5(5(Ķ'v;($% gæJK%[(Ķ'% = JR%w(Ķ'5(m ú1J{%“(Ķ'5(m ŗJę'Š(Ķ'wžeJđ' ų J'Õ(œ''Õ(v‹' +’Jm')ų'œ''Õ( a Ji%))v)‹' ԇJ˜'F)ų'F)'Õ(vœ' ŊwJø'g)$%Ķ' ũYJū'})$% @ J\%ž)ų''5(m bãJ…%ē)5(5(m ÕžJ'Õ)'Ķ' pJd%õ)Ķ'5(ų& Æ­Ją%*Ķ'5(ų& yJq%:*ų''5(ų& ÎíJŊ%Z*5(5(ų& BJl%u*5(ų& S§Jš%*5(ų& !yJr'°*°*$%Õ(v%EđŊJ›ų'Đ*ų'5(EžįJŖ%ę*5(5(Eŧ…JĀ%+5(5(EąņJ“ų'+ų'5(EjãJü'8+5(5( ĸXJW']+ų''5(]+vc+h+xtm,K…ø+%ņ@K‡%%Ļ.Kˆ%%v?K‰%%ŒũKŠ% %–CK‹%%hOKŒ%%9TK%%‹YKŽ%%K% %=1K’@%$%ŸÖK“œ'( J',5(ELJžų'-,ų'5('EurJĻ%L,5(5('EڐJ–ų'k,ų'5(' KJž',°*,'Õ(v5( ęJ'ą,5(5( ų#JÂ%Ė,5(Ė,vų' ŅJÉU%í,5(Ė, ŅJų' -ų'5(Ė, –ŅJÔ@%--5(Ė,% Ÿ_JŲG%M-5(Ė,%EķđJÄ'l-ų'5(' RRJŠ%‚-' f&JE%ĸ-5(5(' °JIų'Â-ų'5(' ËwJNų'â-ų'5(' qJRų'.ų'$%' áJY%.5(m 5KJ‚%0.5(m4ŲJāŲ5(N.5($%GJG5(m.5(5(4ŨJęŨ5(‹.5($%-øJ-ø5(Ē.5(5(™—J<™—5(Î.5($%'yųą2ō[‹2ø[‹2v‹2–‹yÔŌ,$å0 žf,܎/%<Ā,Ū ĩGĩ´,ā"/-/×E ĩzHN,æü$I/T/ĩRfS×EfSeĩ´a/l/×EŲ“e¤ęy/„/×E%rÍ ĩ Œ,´ņ/%Oņ,ļŨEGē,¸ĩ/Ā/âEאzW,žü$Ü/į/ĩR–BâE–B§y' Sū,܄0%<Ā,ŪûÍGĩ´,ā0#0ŗFûÍeĩ´00;0ŗF“œe¤ęH0S0ŗF%zN,æü$o0z0ĩR˛kŗF˛krÍûÍû.ņ/EåQ,Ď/Ŧ0§y' אE¸),ėņ/Ę0rÍûÍûÍF`ō,ėû.rÍ ĩ ĩ ,đ -æäL :„2æō =đoF ?°*"> @œ'K AevĒ Bkp OK1Q1qp Qa1l1qwī  V|1‡1q%3Y3 Y& 1Ÿ1Ē1}#13Y3 ][^1Â1Í1}/13ĨR c š 1å1õ1q˙0]bėF mÖU 22q 1˙03ĩ qqÂ˙01272}bsß XÄK2[2q 1kb.l …ō‘o2z2q 1I_Tp%ķ0˛Đ :4æō =đoF ?ų'"> @5(K AvĒ B•p Oá2į2›p Q÷23›Ąī  V33›%3Y3 Y7Ą253@3§š23Y3 ]6­2X3c3§Å23ĨR cĘ)Ą2{3‹3›•2]bėF mŦƒŸ3¯3›Ą2•23ĩ q_,•2Į3Í3§bsß ‰ūá3ņ3›Ą2•b.l …ĸ44›Ą2I_Tp$%‰2 “L7a4&I<L:%&$L;%&ģL?÷$&gwL@%§y%WPŠŀ6Z†ŗ Ȱ*<@ Đ”÷<K ŅĒ÷\Cö78PC›60~H ¤ €68%8VC›60ëN $\C>8I8PC›60žH ×n€6b8m8VC›60­Í  ˇŅ5†8Œ8VCĩRœ'āN6Œ6É ē,L7ë8&I<L:;‘&$L;;‘&ģL?÷$&gwL@%§yG% ˛ęL7-9&I<L:ĸ'&$L;ĸ'&ģL?÷$&gwL@%§y% Ë L7o9&I<L:x”&$L;x”&ģL?÷$&gwL@%§y+%üT :;æō =đoF ?F)"> @*‘K AË5vĒ BŅ5p OĮ9Í9×5p QŨ9č9×5Ũ5ī  Vø9:×5%3Y3 YŠc‡9:&:ã5Ÿ93Y3 ]÷“9>:I:ã5Ģ93ĨR cA‡9a:q:×5{9]bėF mĪQ…:•:×5‡9{93ĩ q01{9­:ŗ:ã5bsß æŅĮ:×:×5‡9Ņ5b.l …‹ë:ö:×5‡9I_Tpœ'o9 dM_õ;oFMŦĻHæōMąšH4ĨRMĩ\Ŧ;E;õ5;ėFM¸:Ļd;õ5;;.lMŋî~;õ5;4ĩM6;—;ī54ŗúMÅHrī5°;ī5¯,MĮĶĘ;õ5õ5 ĐũMĪë;ūõMĐII_TpđIĻ‡HEâ :†=æō =đoF ?6"> @6K A 6vĒ B6p OM<S<6p Qc<n<66ī  V~<‰<6%3Y3 Yäs <Ą<Ŧ<%6%<3Y3 ]ĩ–<Ä<Ī<%61<3ĨR c— <į<÷<6<]bėF m—5 ==6 <<3ĩ q<3=9=%6bsß žEM=]=6 <6b.l …/Õq=|=6 <I_TpđIõ;ē} :?æō =đoF ?Ő"> @ŋK AŨvĒ Bאp Oã=é=,7p Qų=>,727ī  V>>,7%3Y3 Y¯Ŗ=7>B>87ģ=3Y3 ]E{¯=Z>e>87Į=3ĨR cHŖ=}>>,7—=]bėF m*Ą>ą>,7Ŗ=—=3ĩ q˛1—=É>Ī>87bsß ocã>ķ>,7Ŗ=אb.l …%ä??,7Ŗ=I_Tp‹= ĻËM_w@oFMŦ`">M­`KM¯`vĒM°'`æōMą÷_4ĨRMĩ‡Š-?‚?J7Y?ėFM¸ÉôĄ?J7-?Y?.lMŋŸžģ?J7-?4ĩMÂLVY?Ô?D74ŗúMÅÆšD7í?D7¯,MĮ_@J7J7 œģMĪ(@ūõMЌ`I_Tp >ZMĪI@ūõMĐŽ`I_TpáÖCšMŧm@I_TpJ7-?אĻä_WV ŖBZ†ŗ ČŐ<@ ĐĪî<K Ņåîŋ<@ ĐIŋ<K Ņ_ŋ @Ē7K Aĩ7vĒ Bģ7p OE EÁ7p Q0E;EÁ7Į7ī  VKEVEÁ7%3Y3 Y.›ÚDnEyEÍ7ōD3Y3 ]0>æD‘EœEÍ7ūD3ĨR c¸OÚD´EÄEÁ7ÎD]bėF mĶyØEčEÁ7ÚDÎD3ĩ qUļÎDFFÍ7bsß eyF*FÁ7ÚDģ7b.l …Ņ>FIFÁ7ÚDI_Tp¤7ÂD HRM_iGoFMŦ k">M­kKM¯#kvĒM°/kæōMą˙j4ĨRMĩ´2dFšFß7FėFM¸D-ØFß7dFF.lMŋįōFß7dF4ĩMÂ÷ôF GŲ74ŗúMÅ­cŲ7$GŲ7¯,MĮa]>Gß7ß7 „DMĪ_GūõMАkI_Tp¤7ĻėjWå ňIZ†ŗ Čž7<@ Đu<K Ņu @b8K Ah8vĒ Bn8p OęIđIt8p QJ Jt8z8ī  VJ&Jt8%3Y3 YĩQĒI>JIJ€8ÂI3Y3 ]'ļIaJlJ€8ÎI3ĨR c>8ĒI„J”Jt8žI]bėF müj¨J¸Jt8ĒIžI3ĩ qyÉžIĐJÖJ€8bsß ŋáęJúJt8ĒIn8b.l …@āKKt8ĒII_Tpë’I <M_]LoFMŦhu">M­tuKM¯€uvĒM°ŒuæōMą\u4ĨRMĩË4K‰K’8`KėFM¸Ÿr¨K’84K`K.lMŋ‰ ÂK’84K4ĩM‰`KÛKŒ84ŗúMŒōŒ8ôKŒ8¯,MĮîWL’8’8 †;MĪ/LūõMĐíuI_TpëC¯UMŧSLI_Tpë’84Kn8ĻIuWX Å|NZ†ŗ Č\8<@ Đí<K Ņ-í @(9K A.9vĒ B49p OķPųP:9p Q QQ:9@9ī  V$Q/Q:9%3Y3 YWĶŗPGQRQF9ËP3Y3 ]0ĢŋPjQuQF9×P3ĨR cüęŗPQQ:9§P]bėF mšąQÁQ:9ŗP§P3ĩ q §PŲQßQF9bsß {ņķQR:9ŗP49b.l …9ņR"R:9ŗPI_Tpģ›P •‚M_fSoFMŦ{">M­‡KM¯“vĒM°ŸæōMąo4ĨRMĩEĻ=R’RX9iRėFM¸ˇąRX9=RiR.lMŋÁüËRX9=R4ĩMÂ/iRäRR94ŗúMÅ6ˆR9ũRR9¯,MĮhOSX9X9 F+MĪ8SūõMЀI_TpģCøMŧ\SI_TpģX9=R49Ļ\Wî Å’UZ†ŗ Č"9< f Îäž<@ Đīž<K Ņŋ :(Wæō =đoF ?í9"> @ķ9K Aū9vĒ B:p OīUõU :p QVV ::ī  V V+V :%3Y3 Y&¯UCVNV:ĮU3Y3 ]lDģUfVqV:ĶU3ĨR c0ō¯U‰V™V :ŖU]bėF mUn­VŊV :¯UŖU3ĩ qíŖUÕVÛV:bsß >DīV˙V :¯U:b.l …Á<WW :¯UI_TpÛ9—U ņßM_bXoFMŦ“‰">M­Ÿ‰KM¯Ģ‰vĒM°ˇ‰æōMą‡‰4ĨRMĩWį9WŽW(:eWėFM¸°˜­W(:9WeW.lMŋ•)ĮW(:9W4ĩMÂŌ“eWāW":4ŗúMÅG1":ųW":¯,MĮÕX(:(: +MĪ4XūõMĐŠI_TpÛ9CZNMŧXXI_TpÛ9(:9W:Ļt‰Ws ŁZZ†ŗ Čí9<@ Đŧí<K ŅŌí @–'K A‚:vĒ Bˆ:p Oø\ū\Ž:p Q]]Ž:”:ī  V)]4]Ž:%3Y3 Yāø\L]W]š:Đ\3Y3 ]ĩKÄ\o]z]š:Ü\3ĨR cVļ¸\’]ĸ]Ž:Ŧ\]bėF mÁbļ]Æ]Ž:¸\Ŧ\3ĩ qš­Ŧ\Ū]ä]š:bsß ŒŲø]^Ž:¸\ˆ:b.l …^@^'^Ž:¸\I_Tp% \ ĖM_k_oFMŦĻ“">M­˛“KM¯ž“vĒM°Ę“æōMąš“4ĨRMĩ WB^—^Ŧ:n^ėFM¸ëIļ^Ŧ:B^n^.lMŋuÅĐ^Ŧ:B^4ĩMÂŽDn^é^Ļ:4ŗúMÅS#Ļ:_Ļ:¯,MĮ 0_Ŧ:Ŧ: 9GMĪ=_ūõMĐ+”I_Tp%C;Mŧa_I_Tp%Ŧ:B^ˆ:Ļ‡“W”Ö ÅŠaZ†ŗ Č|:<@ Đķí<K Ņ î @\@K Ag@vĒ Bm@p O6bM­—žKM¯ŖžvĒM°¯žæōMąž4ĨRMĩu€cÕc‘@ŦcėFM¸j~ôc‘@€cŦc.lMŋˆbd‘@€c4ĩMÂB$Ŧc'd‹@4ŗúMÅ{ũ‹@@d‹@¯,MĮMĀZd‘@‘@ ]4MĪ{dūõMĐŸI_TpV@C‘æMŧŸdI_TpV@‘@€cm@ĻlžWÕĀ ÅČfZ†ŗ ČP@<@ ĐåĘ<K ŅûĘ‚ũfug{g§F0SI íaŸ­F”gšg–F0SI ô‚žČfŗgžg–F%0eN ųę÷­F×gŨg–F0eN 7÷Čfögh–F%0Žö €đfh%h§Fãf0žI A­F>hIh–Fãf0~H äŪČfbhmh§Fãf0ëN ķi­F†h‘h–Fãf0žH Ū2ČfĒhĩh§Fãf0­Í ^hœFÎhÔh§FĩR\@āN[ĄžÃ :xjæō =đoF ?å@"> @ņ@K Aü@vĒ BAp O?iEiAp QUi`iAAī  Vpi{iA%3Y3 Yl­˙h“ižiAi3Y3 ]˛ß iļiÁiA#i3ĨR cĻŨ˙hŲiéiAķh]bėF mYĖũi jA˙hķh3ĩ qÚŌķh%j+jAbsß æ?jOjA˙hAb.l …zcjnjA˙hI_Tpë@įh xM_˛koFMŦĖĒ">M­ØĒKM¯äĒvĒM°đĒæōMąĀĒ4ĨRMĩ6(‰jŪj&AĩjėFM¸ĪĶũj&A‰jĩj.lMŋ „k&A‰j4ĩMÂXĐĩj0k A4ŗúMń× AIk A¯,MĮA7ck&A&A 8ŦMĪ„kūõMĐQĢI_Tpë@CĒļMŧ¨kI_Tpë@&A‰jAĻ­ĒWS ÅŪmZ†ŗ Čå@< f ΋Ę<@ Đ–Ę<K ŅŦĘ @ļAK AŧAvĒ BÂAp Ozp€pČAp Qp›pČAÎAī  VĢpļpČA%3Y3 Yĸ\:pÎpŲpÔARp3Y3 ]Œ$FpņpüpÔA^p3ĨR cĘ:pq$qČA.p]bėF m4Z8qHqČA:p.p3ĩ qYí.p`qfqÔAbsß Ė]zqŠqČA:pÂAb.l …×VžqŠqČA:pI_Tp)ļ"p ŸĪM_íroFMŦä´">M­đ´KM¯ü´vĒM°ĩæōM਴4ĨRMĩˆGÄqræAđqėFM¸įĶ8ræAÄqđq.lMŋķĨRræAÄq4ĩMÂęėđqkrāA4ŗúMÅX@āA„rāA¯,MĮ”žræAæA •JMĪŋrūõMĐiĩI_Tp)ļCŒ'MŧãrI_Tp)ļæAÄqÂAĻÅ´WÔ Å uZ†ŗ ȰA<@ Đaî<K Ņwî @ĒBK AĩBvĒ BģBp Ow“wÁBp QŖwŽwÁBĮBī  VžwÉwÁB%3Y3 YŽ!MwáwėwÍBew3Y3 ]Š’YwxxÍBqw3ĨR c%Mw'x7xÁBAw]bėF mamKx[xÁBMwAw3ĩ qHÁAwsxyxÍBbsß ÛxxÁBMwģBb.l …ęūąxŧxÁBMwI_Tp;5w AžM_zoFMŦĢŋ">M­ˇŋKM¯ÃŋvĒM°ĪŋæōMąŸŋ4ĨRMĩC ×x,yßByėFM¸ KyßB×xy.lMŋ‡eyßB×x4ĩMÂŋy~yŲB4ŗúMÅĖ‹ŲB—yŲB¯,MĮÚĒąyßBßB _ÚMĪŌyūõMĐ0ĀI_Tp;CˆMŧöyI_Tp;ßB×xģBĻŒŋWĩ Å,|Z†ŗ ȤB @īCK AúCvĒ BDp Oŧ~Â~Dp QŌ~Ũ~D Dī  Ví~ø~D%3Y3 Y,|~D”~3Y3 ]€:ˆ~3>D ~3ĨR cĘé|~VfDp~]bėF m%zŠD|~p~3ĩ q7Xp~ĸ¨Dbsß [<ŧĖD|~Db.l …ō”āëD|~I_Tp°*d~ M_/oFMŦ¸Ë">M­ÄËKM¯ĐËvĒM°ÜËæōMąŦË4ĨRMĩ]"€[€$D2€ėFM¸ˆz€$D€2€.lMŋ`’”€$D€4ĩMÂ÷ķ2€­€D4ŗúMÅĸÆDƀD¯,MĮ ā€$D$D PM΁ūõMĐ=ĖI_Tp°*CëāMŧ%I_Tp°*$D€DĻ™ËW(Ĩ ÅNƒZ†ŗ Č5‘<@ иÕ<K ŅÎÕ‚D‚~D0eN ™ķ/]‚h‚~D%0Žö Ā[W‚Œ‚DJ0žI ß•DĨ‚°‚~DJ0~H ~H/ɂԂDJ0ëN Æa•Dí‚ø‚~DJ0žH ö—/ƒƒDJ0­Í œ\„D5ƒ;ƒDĩR5‘āNˆÎ6Æ/8C :鄿ō =đoF ?šD"> @ŋDK AÅDvĒ BËDp O°ƒļƒŅDp Qƃ҃ŅD×Dī  VáƒėƒŅD%3Y3 YZ pƒ„„ŨDˆƒ3Y3 ] |ƒ'„2„ŨD”ƒ3ĨR c19pƒJ„Z„ŅDdƒ]bėF m#(n„~„ŅDpƒdƒ3ĩ qįųdƒ–„œ„ŨDbsß áÁ°„Ā„ŅDpƒËDb.l …~qԄ߄ŅDpƒI_TpáÖXƒ ŠëM_Ŋ…oFMŦÖæōMąÖ4ĨRMĩéEú„.…KG…ėFM¸ZsM…KGú„….lMŋVīg…KGú„4ĩMŸĐ…€…éD4ŗúMÅŗéD™…éD¯,MĮz ŗ…KGKGĻûÕ]L|NZbXk_,|írČfw@a4 u ;ŽN/ †˛N0ü${)Â0R&†tK%{ŋĨAR@†¤K%{ōĩNRZ†¤K% '† =ü$‡†ĩRž7āNÛmamam 3ŋ =ü$´†ĩRņ@āNœ­—t—t Ĩ =ü$á†ĩRb8āN8xQyQy É< =ü$‡ĩRķ9āNcŒÁzÁz Ÿ =ü$;‡ĩRœ'āNsŽsŽ ē ŽSh‡ĩR"9āNK‚[w[w Ü' =ü$•‡ĩRĒBāN{Âö—ö— ´* =ü$‡ĩR\@āN[ĄR›R› 0Ē Úkī‡ĩRå@āNœ­Q‚Q‚ vH /ü$ˆĩRP@āN[ĄSS č­ =ü$IˆĩRŋāNctxtx ƒz žBvˆĩRŋāNctxtx  =ü$ŖˆĩR5‘āNˆÎЎЎE&:N–ü$ÁˆŲĸ'œ' ›Ā =ü$îˆĩR¤BāN{—Į—Į   ’@‰ĩRŐāNcpÕpÕ  xLH‰ĩR\8āN8xļÛļÛ  su‰ĩR°AāN´ˇ%ā%āEįŨN–ü$“‰Ų%°* Ũž (z‰ĩR¤BāN{—Į—Į Ô =ü$í‰ĩRļAāN´ˇ•• Ō /ü$ŠĩR"9āNK‚[w[w w }XGŠĩRí9āNcŒ °> †_tŠĩR|:āNv–ss R2 ÄdĄŠĩRP@āN[ĄSS X /ü$ΊĩRå@āNœ­Q‚Q‚ . 6ü$‹Ļ`ņ@Cå@āNœ­—tQ‚ l7 J1‹ĩR5‘āNˆÎЎЎšg /ü$ĩR5‘āNˆÎЎЎ ‚"JË\%v‹5(Ė, ëđJã,–‹5(Ė,% û JęN%ļ‹5(Ė,%y•äO7ɋ|O8O}4}dvdv4}‹}};v;v}d z38P52%‹úP9°*%ũeP:°*%q0P@°*%í\PF°* %_ŋPG°*%ŋHPH°*%°ŧPI°*%/čPJ°*%JÄPK°* %¸PL°*$%ņPM%(%ī PN%)%@øPP%*%ŒĖPR%+%6PT%,%č PV%-%!+P]%.%UYP^%/%æPa%0%QPc%1%$,Pe%2%ū—Pg%3%đ>Pn%4%[Po%5ExÍP|°*L%œ'~›'PWvŒ†ÔQ(%EnQ7,awQ8N%–rQ|sĪģQ}9%QTQ~9%žQG%?`Q9%öûQ‚9%éCQƒ@%˰Q„h>Q…%t%ņuy'*Q‡@%‡ŠQ‹@%‰ÄQ@%p[Q™@%ŋųQž@%ZšQŦ%”ËQ¯@%ŪQē%oQŊ9%…ßKKü M Kx†Ž%Ÿ+Kzü%‚+K{5Ž$-R%֍tG%ĄŽuy' ŠSƎ%Ÿ+S ü%Ģ}S!ŽŖ2T%o{Tt+%%ŗ%Tu+%sŅNTysO+TzđŽ%˜ÄT^%%R9T_9%%å<T`%%ĪëTf% %IgTo9%‚s˜'T}s6ÅT~ģsjT@%t%ˏuy'X&T€ûŽ€TƒĸWús6ÅT„i'sjT…%•cT†Öt%uy'/NdT¤9%t%0uy't%@uy'ƒLŽv@ēU %vc„}%}ĸ'vķ0}„2v„2vņ}}}$%};(v‰2}4v4v‚}vv' vv$ }$ }' }t9%v{v8 vŋ6v, v=!}=!}ŋ6}, v”6*‘v0‘œ'v°*G%}ë7vô7˜™V4G%„@Vēb‘vh‘]E6˜V¯%‡‘'L‘EeuVŨ'Ą‘'W‘EöžVÚW‘ļ‘œ'EîVĢL‘ˑœ'};vÜ@vÉ?vį@}É?}į@vü$}ü$v1Av“B}“Bv˜BvYD}ĩBv÷$qWbČ K’%žLWc%†remWd%(We%’qWjĩ|’%žLWk@%†remWl@%ÂWmV’qWvRä­’%žLWw,†remWx,iWy‡’Ų!Xm*Žq€Y]ęܒ%ÎKY‘Ž3YҁZ%ܒbWåū’v“‡%“]]ˆ]OGš Œ˜ G R“%–GĄR“%uGĸX“%ŲGĻ%v!“vn%t%n“uy'v“t%„“uy''‡%”“Ž›ÃFOų& á<X[.x”%ī~[0~%§d[22%%Šs[5Ÿ %8G[:Ē%+[;ĩ%Že[@‰%ĀR[A”%”[E~ %Žd[G2%(%Yų[JĀ,%@ķ[NŽ0%72[PŽ4%Æ~[[aŽ8%#Ö[\aŽ@%F†[]aŽH%ŠI[mG%P%ģI[nG%T+%§T\ @Ž\KŽŽ%]*G%y! ]e€•!J°]j€•!¯+]mG%!‹,]pG%!Ĩį]s•” !d]x°*!._]~€•!ę›]'‰î]‡9%‰[ä]’9%‰Ā]–9%‰Ļ]š9%‰k]ž9%‰~H]Ą9%‰”]¤9%v%#’]§ ”s%]Ē%Š]ÅmŌĮ•!ú¯]Æ’•!|]Į’•ķâ]Čž•‹+ũž1‹DĀįûŒREHžy—!Ã9Õœ'!üuÖü$!MķÚ†•!y\Û†•(REĸ?–J–ž1¤1REĨ[–f–ž1Ē1RE­w–‚–ž1œ'~REŽ”–Ÿ–ž1%0 ßąČgœ'¸–ž–°1[+šēMEü$Ū–Ē1¤1[˛IŊšūü$ū–Ē1¤1[+šĖĢ4ü$—œ'¤1[˛IÍ Đü$>—œ'¤1*˙€Đ‰ÃR—]—ž1œ'L1IãĖ‚m—ž1¤1핎%ˆöĨ— yô  Ī 1 íõWŅW˜!P W˜.ŅЗå—ļ1~—œ'%. ]ö—˜ļ1%0Ö-×kŧ1˜ ˜ļ1"Ņ 0˜;˜ļ1Â1L1I ÕK˜ļ1Â1~—Ĩ—W7} 8û˜ZF_XˏZæ(_ü$ZĘP`Ǝ2‡8;÷ā­˜ŗ˜Č12ŋ+BC9ȘΘČ12Mž:ã˜é˜Î17}ô˜Č1a˜WŨŠ r~™a˜.ŨŠt%™+™Ô1.4•x<™G™Ô1%"ŨŠ}W™b™Ô1Ú1L1I}ƒr™Ô1Ú1™WZ9ƒ š!F_‹ā1TZ9…Ž™š™å1Č1.ēžˆʙՙå1%"Z9å™đ™å1ë1L1I@ôšå1ë1ƒ™üŊK5š:Ü/M÷$Y˙Ūü$WÚ¸T^šIntZ%<}-[9%W˛ `‡šIntf,<}-gN%Wģ@zˇ›!Ī•Û4T}Į~˛šŊšá4Û4.—ūΚؚá4%0tH‚į4ōšøší40öN‚´Û4››í41getƒZÛ40›6›í40S…mÛ4O›U›á42'$‹–™j›u›á4Û4"}Į—…››á4ķ4*1I—W_¤›¯›á4ķ4ITÚG‡š'^:‘KÕ^Elåœ'㛜'‘Ģ^fäÚü$œœ'œ'‘ Ā^l1ãÄ6œ5(‘ü‰^tĢėü$>œ5(5(‘•ß^|6¸ü$^œœ'œ'‘'B^‹^€ü$~œ5(5(‘ô8^žü$žœĒ1Ē1‘Ú^”ŪWÄ6šœ%‘f ^—GßÄ6Ԝ%‘f\^šĐņÄ6īœ%’'^ûœ-5ą; %NÚČÄ6ą=*035ą>@K3595/ą@[f35Ē131IDX[?5~‰3595“SetIČRžŠ35953ûRMmĒ1ÁĮE53d5N Fœ'ߝåE5”oíQÕם‘7˙WKם ž9595%œ'‘Ę\_1°@ž9595‘…ŧj Ąež9595œ'37Äoķrü$}žƒžE53qtŒt›žĄžE53ßŖ|īhšžŋžE532 „ZמŨžE536ŧŠú%õžŸE5œ'3ĐO-eü$ŸŸE53^2–”ü$6Ÿ<ŸE53悚6ü$TŸZŸE53v%ž÷‘ü$rŸxŸE53ėĖŖ[ü$Ÿ–ŸE53>ާo—ü$ޟ´ŸE536RĒŦJü$˟ԟE5) ÁâKåŸëŸ35(~Æ„œ'  E5•° 35%ī  œĨ ī   @ U t5œ'%56q Ļe p t5%Gī  Š Š t5z5H1I Š5Ú™ t5z5$ Ô& čĩĸ•@I Sß –† TU%–ČL Uß Ä˙ ėPš—úG ņ€5—?T ô€5—+C ø€5—œŪ ûĄß —˙ž ūĄ$•T Ą$͖ €5˜u_ zļ Tž‹ iĄtĄ…5‹5[uš ԝU%Ąß ™ũí &XUU%šMax +9&U%0q 0Yå–5ĖĄŌĄœ50[§ 3 !ß ëĄņĄœ50Áü 6Ž;ß  ĸĸœ500G 9tß )ĸ/ĸœ50y… <‚-ü$HĸNĸœ50•5 Heˇü$gĸrĸœ5ĸ5Æ? gF ß Œĸ–5{Đ s°mß Ģĸ–5–5åU%Ē × čŤ•@I Sīĸ–† T%–ČL UīĸÄ˙ ėyš—úG ņ€5—?T ô€5—+C ø€5—œŪ û/Ŗīĸ—˙ž ū/Ŗ$•T /Ŗ$͖ €5˜u_ zÆĸTž‹ yŖ„Ŗ¨5Ž5[uš .ą%ŸŖīĸ™ũí &;%šMax +˜Ņ%0q 0˛š5ÜŖâŖŋ50[§ 3GCīĸûŖ¤ŋ50Áü 6‚Zīĸ¤ ¤ŋ500G 9ę5īĸ9¤?¤ŋ50y… <@iü$X¤^¤ŋ50•5 Hy´ü$w¤‚¤ŋ5Å5Æ? g%Ėīĸœ¤š5{Đ syEīĸģ¤š5š5å%ēĸW,ô ũgĨ!Ų ü$!Ōš ÕZ.,ô ˙ĨĨŠ60žĻ ˆ\ü$!Ĩ;ĨŠ6œ'%œ'œ'›ęØ vmœ'QĨŠ6œ'%œ'W:’ ¤+Ļœ2Q Ļ7Ļ€€€€x!*Ö ą+ĻT:’ ¨ĨĨ°Ĩß6+Ļ2ļ ĒüIÅĨĐĨß6+Ļ0‚ ŽgČ+ĻéĨôĨß6+Ļ":’ ˛ĻĻß6å6L1I ˛mŽĻß6å6/ŧmPš+ĻgĨ”GEAĻ ¨žŪcmĻ Ũ@ ÁsžFfŽĻ Š  Ģ…ŸĶuG:iugÄ6[ģYü$ÕĻœ'°1œ'%ŖG.”GOæĻėĻđ6@æRAϧ §đ6% ęĮmIjRĻAĻ-§3§đ6 ųZpëD%AĻT§Z§đ6 FEyrãü$AĻ{§†§đ6ü$Ąö’|ŪûAĻŖ§ާđ6mĻ™ëX_éRœ'ĸēĢcmžاĒ1G”Gˆį§ō§đ6IH1Iˆų¨đ6I^¯ę?Š%ûūÄ6%˛˙%!8`%!¨ % ^¯ė[¨u¨ö6Ē1%%%Eķ…¨¨ö6%3ˇÎøéōĒ1¨¨ލü63 ųg%ƨˍü63áSú2â%ä¨ę¨ü635ZûUø%ŠŠü6"^¯Š#Šö67L1I;Û3Šö67 ¨Wk-&žkŠŖz&Āš+œ'&7Wūâ&Ō’ŠŖz&ÔôJ5(&7¤˛9 Ÿ’Š‘ĒŸĢģuGUA’ Ą’ŠÆŠŅФ7%KS ¤}ėL;’ŠōŠøŠîHKƒč ϝ@ˇ­’ŠĒĒîHĨĖĮ Ģ›e’Š=ĒCǤ7.˛9 ŽTĒZǤ7"˛9 ąjĒuǤ7ôHL1I ąC1…Ǥ7ôHWŠ ,<ĢU\ _Ûm!2ĩ ažĒ.Š .ČĒÎĒ38. , /ßĒęĒ38%2ĖĮ WœŸ˙ĒĢ38"Š cĢ Ģ3898L1I c¤Ĩ0Ģ3898‘ĒW^YzqŦ!Ī•ŐT}Į~lĢwĢø8Ő.—ūˆĢ“Ģø8%0tHlnŨŦ̞Ģū80öN‚ÖyŐËĢŅĢū81getƒqŐęĢđĢū80S…ėŠŐ ŦŦø82'$‹‘$Ŧ/Ŧø8Ő"}Į—?ŦJŦø89*1I—˜^ŦiŦø89ITAĢ\–pkšWŸz˛­!Ī•ŋT}Į~­Ŧ¸Ŧž9ŋ.—ūÉŦÔŦž9%0tH!אíŦķŦÄ90öN‚§ŋ ­­Ä91getƒŋ+­1­Ä90S…:ËŋJ­P­ž92'$‹ą`e­p­ž9ŋ"}Į—€­‹­ž9Ę9*1I—܃Ÿ­Ē­ž9Ę9IT' ‚Ŧ/ ]ˇ­¤I ˛Č­|ŽŸpŗuGUĄ' ´Č­ü­ŽÕ9%K%i ¸Ö\ZHČ­(Ž.ŽÕ9.I ģ?ŽEŽÕ9"I žUŽ`ŽÕ9IL1I ž-+pŽÕ9I¤ÁS vĀąv!—p ü$!Ŗ r {Â.ÁU ĀŽÆŽ;UŽ=w |ŽÜŽįŽ;%2ū{ ĻĘüޝ;;0Īn€ Ōf; ¯+¯;;0&1\ åGü$D¯J¯7H2•A] Ŋ†_¯j¯;ü$Ĩtö  Xz|Žˆ¯“¯;HĨA[¯ @|Žą¯Á¯;H%Ĩ”cĄ ˇ¸|Ž߯ę¯;HĨ›ōĻ ŧq|ް°;HĨˆĸ ė:|Ž1°<°;+HĨ†ŽŖ &ƒ|ŽZ°e°;į9ĨŪ4¤ 6f|Žƒ°ް;n8Ĩ q¨ ę |ŽŦ°ˇ°;į9Ĩ]?Š ~¸ |ŽÕ°ā°;+HĨ†ĒĨ Åė |Žū° ą;HĨ†/§ ŧN |Ž'ą2ą;HĨŒl¸ ? |ŽPą`ą;H%ĨUđĒ ;ß|Ž~ą‰ą;H"Át ™ą¤ą;=HL1It šN´ą;=HWV ģ9ŗߚ͉˛!æôÔĨ!ˇÎÕ0‘! Ö%!-B×\F "ߚβ8˛;÷œ'%œ'.ߚÚI˛T˛;$;21IÚNQi˛t˛;$;#@Ö}˛;%Íą!ˇŨ*;.V žŦ˛Æ˛/;÷œ'%œ'.;Âײâ˛/;%21IÆCÍ÷˛ŗ5;5"V ßŗŗ/;;;L1Iß-[-ŗ/;;;Āąü’ _`ãŗ%î_hA;%I _iĨ%Ô_jīŗü’_c~ŗ“ŗF;ė8÷L;Ų2_fŖŗŽŗF;%Gü’_lŊŗČŗF;R;H1I_lž×ŗF;R;ûRhÄ6ãŗ>ŗˇU<Ą˙´%=õĪü$%Đü$%'šŅü$%ųŽŌÄ6%4ˆĶÄ6%VĘÔü$ %ķjÕÄ6%_¨ÖÄ6%ĸD×ü$% 8ØÄ6%ô™Ųü$ %<ÎÚ˙´$%CÛ˙´(%UxÜü$,%™¸Ũ˙´0%ãZŪÄ64%ûLßü$8ˇU¤á´į´ @ ŸBšķ´ @%ÂglBšW9Z•ĩ!gÄ6T9_6ĩAĩ@Ē10¸>b¯Tü$Zĩeĩ@49f9sĩ~ĩ@ōcÎÁ‰ĩ@% ĩW˙ãt)UyIÎÄ6™ō›~4ĀÄ6[@‡Qü$ëĩœ'œ'[S‹4Ėü$ ļĒ1Ē1ωW™q%ü$Ē1œ'5B Ōēļ!ˇÎĶœ'! Ô%!-BÕÄ6e5Bjļuļ°AÂAeŽÕ‚ļļ°A%§1IŧAŸļĒļ°AÂA#5Bŗļ°A¨ŸüēļßŋŠ2nÖéļ b` ÎîŸĶ>uG!6äG!Ļ:!D=VŲ !Īe?Ú!į2B&@!ēÄE™ !AvIßŋ@!1ƒM[ĄH!īQœ­T!H™Wv–`!Ļā\‘Ēl!īÁ_ü$x!8Vc%|!ŅHië@€!đ0oÛ9„!h&y´ˆ!Ŗ }ÂĖ!ƒīGØ!Ŧ8†ü$Ü!<Ή%ā!ā•ŒgĨä!kvŦč!ė`“vŦđ!õ$˜Âø!~‘™9ÃüĒĩBÅĒ'šĄü$TŸši¸t¸­DéGUŧŠÁēļЏ•¸­D%0Ī Ģ &@ޏ´¸­D2ŦšąoFɸÔ¸­D&@0¨Žšá&@í¸ķ¸­D2qōžœšš­D&@0Æ<Äž%,š2šõG0ERÉ­ˆ%KšQšõG0îiÎgF%jšpšõG0×oÔbę%‰ššõG0f3Ųg %¨šŽšõG0ĪfŪU %ĮšÍšõG0 ã͇%æšėšõG0Ųé…R%ē ēõG0@î0%$ē*ēõG0R]ķ @%CēIēõG0ŊĶøS^%bēhēõG0ÕĖ:ņėvŦē‡ēõG0ž =ĀCvŦ ēĻēõG0FE@úŖü$ŋēÅēõG0EDŖ/ü$ŪēäēõG0g˙JĀzCũēģõG%0nQnŒë@!ģ,ģ­D%0D‹WeË ;EģKģ­D0†ōz‡Ŧ9dģjģ­D0ø^QY˛9ƒģ‰ģõG2îŋŨA2žģŠģ­DīG0 +čŊ‘īGÂģČģ­D0ÁΈŖÄ6áģėģ­D%0g˙MßĮë@ŧŧ­Dœ'œ'ļÃ2âÄŽb?4ŧIŧ­DļÃÛ90Kȧs5ûGbŧhŧ­D2Æ:­š}ŧˆŧ­Dë@2•…´œ ŧ¨ŧ­DÛ92uēīÎ$ŊŧÃŧ­D0éū~…Dü$Üŧâŧ­D2\WĮšŊ÷ŧũŧ­D2DųĖmjŊŊ­D2leĐ֒-Ŋ8Ŋ­D4909\g4%QŊ\Ŋ­DÍļ2ģŗ2qŊwŊ­D0TgæVŅzCŊ–ŊõG0Ÿ°įG˙Û9¯ŊĩŊ­D0Ÿ°č˛Iá9ÎŊÔŊõG0uQė#ŪŲ@íŊķŊ­D05jīė‚.B žž­D05jō×Õ(B+ž1žõG2rŌ÷#"FžLž­D0g+ūĸü6ežkžõG0ú’A„žŠž­D20äēŸžĨž­D2*õė¯ĒēžĀž­D2’šûĐ/ÕžÛž­D2ËĄĞđžöž­D0Oĩ%%ŋŋõG0EV!qøß6.ŋ4ŋ­D2ú=ųN+IŋOŋ­D2ˆÕHdŋjŋ­D0 ,ōLü$ƒŋ‰ŋõG*Ũķ3…Sŋ¨ŋ­Dü$"ŸŖ¸ŋÃŋ­DHL1IŖöĶŋ­DHW)’Á˙Á!ú@!šû!@¤EŪØQŌŊĀQŌ!†ß&@TEŪÚ=ĀHĀQG2@0oFÜ8@aĀgĀQG"EŪāwĀ‚ĀQGWG*1Iāū3–ĀĄĀQGWGĢâDĀąĀQG%.å1ÃÎĀÔĀ,@Tå1ÅåĀđĀ,@2@.ū ČÁ Á,@%0oFŅÎÍ8@%Á+Á,@0oFŌ.>@DÁJÁD@1getĶD"2@cÁiÁD@ŦsetÔATÁŠÁ,@2@-îĘãH‰+æ‘ėđN8@˛Á¸ÁD@"å1ũČÁĶÁ,@J@*1IũųUįÁōÁ,@J@ĀIT&@ßŋWoz4Ã!Ī•ö6T}Į~/Â:ÂzAö6.—ūKÂVÂzA%0tH2™€AoÂu†A0öN‚čMö6ŽÂ”†A1getƒ•“ö6­ÂŗÂ†A0S…Âąö6ĖÂŌÂzA2'$‹™;įÂōÂzAö6"}Į—à ÃzAŒA*1I—Jd!Ã,ÃzAŒAIT ¨ÂWÖlziÄ!Ī•’AT}Į~dÃoØA’A.—ū€Ã‹Ã˜A%0tHØjžA¤ÃĒäA0öN‚ é’AÃÃÉäA1getƒG”’AâÃčäA0S…9’AÄĘA2'$‹HlÄ'ĘA’A"}Į—7ÄBĘAĒA*1I—•VÄaĘAĒAITiĝĖ9ŒiÄÅŸWĩuGfĖ9”ÄŸÄ’AúHfĖ9­ÄŗÄ’A@mvŽiÄČÄĶÄ’A%­ģG'ü$iÄđÄ’Aœ'°1œ'%ŖG9Ã)ļWqĖÁ:Į!ú@!šûĶž¤EŪØQŌøÅQŌ!†ß´ˇTEŪÚxŃÅ]G(B0oFÜėŧBœÅĸÅ]G"EŪā˛ÅŊÅ]GcG*1IāūTŅÅÜÅ]GcGĢâDAÅėÅ]G%.å1Ã ÆÆ:BTå1Å Æ+Æ:B(B.ū Č<ÆGÆ:B%0oFҁB`ÆfÆ:B0oFŌRč4BÆ…Æ@B1getĶŨÚ(BžÆ¤Æ@BŦsetÔĨ ēÆÅÆ:B(B-îĘãûϐ+æ‘ė{BíÆķÆ@B"å1ũĮĮ:BFB*1IũT "Į-Į:BFBAÅIT´ˇÅWoĮzoČ!Ī•LBT}Į~jĮuĮRBLB.—ū†Į‘ĮRB%0tHĸcXBĒĮ°Į^B0öN‚9ŲLBÉĮĪĮ^B1getƒ_ÎLBčĮîĮ^B0S…œLBČ ČRB2'$‹Īü"Č-ČRBLB"}Į—=ČHČRBdB*1I—L\ČgČRBdBITČ¤”Ę.vAÍŽ‰1Č{ÉŸĩEuGf‰ŽČšČLB˛Hf‰ĮČÍČLB¯1IŠXBäČīČLB˛HU23ČÉÉLB%ĨĪ6¨3Č.É9ÉLBL;ĨÎ9XČWÉ]ÉLB°‚ŋ<:ÖoÉLBL;\)!&¸AÍŽķĸBČ¯ĘČ! h%!9øiīŗ!!Ŧjīŗ .ķĸDáÉņÉĻHL;L;U /IÉĘĘĻH%ĨĪO1ėÉ0Ę;ĘĻHL;*Sn f;OĘUĘĻHąÎ`%ÉrĘxĘĻH"ķĸlˆĘ“ĘĻHŦHL1IlúBŖĘĻHŦH[†&[ e'ãŗĘĘœ'.”ĘrÛĘëĘšHL;L;T”ĘuüĘËšHLBĨtöxØ oČ%Ë0ËšHHĨUđ|CtoČNËYËšHHĨA[…āloČwˇ˚HH%ĨŒlŠŸŧ oČĨËĩËšHH%ĨˆŅ.oČĶËŪËšH+HĨ]?”Ņ oČüËĖšH+HĨ†Žš‹*oČ%Ė0ĖšHį9Ĩ qžĶ oČNĖYĖšHį9ĨŪ4ĨôoČwĖ‚ĖšHn8*‚ŋ°ÎY–ĖĄĖšHL;*?{´mæĩĖģĖšH+NíļˏãŗĶĖŪĖšHü$"”ĘēîĖųĖšH H*1Iē y ÍÍšH HiôoČ+Í6ÍšH%ÉČ?ĮŽCö mÍ " c† Å8 +ŦWÄ'Č öÍ!ČŪ 0‘TÄ'Ę ˜ÍŖÍbCœ'.{4× ´ÍŋÍbC%"Ä'ā ĪÍÚÍbChCL1I⠚ÚęÍbChCmÍWË2…Î!õ/>Ä6TË5&Î1ÎnCĒ10¸>9}(ü$JÎUÎtCzCfËcÎnÎnCŠi˛SyÎnC%ûͲQ$ŠÎ7…™ôŋÎ - ž4 ĻO û čuW-_ wmĪ!ŧ”ˆÎ.-_yęÎđÎxD.Ž}Ī ĪxD%2Qƒ<Ø!Ī,ĪxDœ'0¨NMīCEĪKĪxD;ŋōˆaĪIStrxDŒ7ÎB™•Ī!$šīC!d•›%WķK ŒĐ˜fd_N%!+ÖO%!×QÄ6TķKÛοΛD%.a#4÷ĪĐ›D%0-˛8ûÄ6Đ!Đ›D™3ITŦÄ6;ĐĄD2ŦL~Ļ'UĐĄD"ķKSeĐpĐ›D§DL1IS—ô€Đ›D§D•Ī7e|°Đ ôŖ ũ° ĩü-Gį¨Ō=­DWŽo&CōĐĸz&O&ęĐא&7ITW6Ũ&C$Ņĸz&O—ÖŅ‘&7IT, W'å ’FŅ$b ›ü$IT›WEIKŅ[ÍM`ĶÄ6nҝE­K,;‰,WČĐ íŅ$Ü/ 5÷$-s9 1^]õ} ķŖ%ÅŅ]õ} ‘ŽGÛŅmȝ]ITo]WÄ&ŠŌĸz&ĢÂŌ¯E&7IT,Wéy&CQŌĸz&OK›IŌ¯E&7IT,¤ŗ˜QŌŨŌŸo‹uGfŗ}ŌˆŌIIfŗ–ŌœŌI¯1IEO$IŗŌžŌIIŗĶšQŌŅŌI%a3 ĄWžĶW%œŠü$%Ē&@a3YĶ#Ķ…G@¸“`ŨŌ8ĶCĶ…G%ĄÖ¤eÔ0ŨŌ`ĶkĶ…Gn83ļ$§&ü$ƒĶ‰Ķ‹GGa3Ŧ˜ĶŖĶ…G‘GH1IŦÎ˛Ķ…G‘GŨŌîî”iÄdÔiÄfîîéĶôĶ—GGfîîÔÔ—GK쁎Ōü$ÃĶ)ÔHÔ—Gœ'°1œ'%ŖGĢ=ÃĶXÔ—G%Ãͤ˜†,dAĻ3Õ3Õ!ûq0‘$!˛s%(f˜†ĒÔĩÔŠG¯G.˜†fÆÔāÔŠGœ'°1œ'%KęĮL_ÆRĻiÔÕÕŠG-“îlD'cĢŠ iÔ'ÕŠG%¤Ũˆ$AĻöÕ–Ö!MĮ†Ž fŨˆgÕrÕÁGĮG.ŨˆƒÕ“ÕÁGœ'°1KųZŌø%3Õ´ÕēÕÁG2Ž  ĪÕÚÕÁG†ŽĢ˜-3ÕęÕÁG%iÔ¤ž´$-AĻ‘Ö3Õfž´"Ö-ÖĩGģG.ž´/>ÖNÖĩGœ'°1KęĮ6x™RĻûÕoÖuÖĩGĢ5ûÕ…ÖĩG%ûÕ¤{. jAĻLŲAĻ!TÆ‘0‘!lˇ”ÍG!'ž–ü$ !nm˜%! Ųš”Î!’Žž%!¨ ĸ%f{.×#×ŌGØG.{.l4×D×ŌGœ'°1UīTv–ÖZ×e×ŌG%Ĩö’ÖNv–փ׎×ŌGmĻKFEÅü$–Ö¯×ē×ŌGü$0“0{QŪœ'Ķ×Ų×ŪG0a |øú°1ō×ø×ŪG0Đî}Eöü$ØØŪG2Đķ~/,Ø7ØŌGü$0s č%%PØVØŪG2(€^CkØvØŌG%0ûjÄ5”ΏؕØŪG2āw‚PĒØĩØŌG”Î0Qaƒ{e%ÎØÔØŪG2Dm„íéØôØŌG%05Z…ą°% ŲŲŪG2ũ\†!(Ų3ŲŌG%°=ŠûEŲŌG3Õ–Ö¤ĪÚWÚW!RãlHTĪ˜Ų˜Ų}H­DĨÖ¤›AĪVŲļŲÁŲ}Hn8"ĪåŅŲÜŲ}HƒH*1IåÔđŲûŲ}HƒHĢŊXVŲ Ú}H%¤ ęWØÚW!RķlHT ĄNÚYÚqH­DĨÖ¤¤žÚwÚ‚ÚqHn8" õ’ڝÚqHwH*1IõŠëąÚŧÚqHwHĢoJÚĖÚqH%¤N‰ĄØÚēÛŸ$×uG.N‰ŖÛ ÛīGUΤØÚ#Û.ÛīG%K5'Ŧŧ_ãŗØÚOÛ_ÛīG%%Ĩ÷ŊąĸčØÚ}ÛƒÛīG"N‰´“ÛžÛīG¸HL1I´lŽÛīG¸Hēļg@ ׸4ņ+ ظ4¤'t(¸ØÚŲÜØÚ$0mà 0‘!F_Æ™!ëĖŽ$.'tē(Ü.ÜHK5'¸ ąãŗ×ÛOÜ_ÜH%%Ĩ÷Ŋž œ×Û}܃ÜH"'tΓܞÜHH*1IÎ~U˛ÜŊÜHHĢĀF×ÛÍÜH%×Û¤DÃÄ võŪ\)!‚į \FTDà Ũ Ũ%Hœ'ĨŒl aų ŪÜ>ŨNŨ%HH%Ĩ Í <8ü$hŨ%ë]Ō ™öü$‚Ũ%ƒÚC RÄ6ĄŨĒ1ü$*âq gLÄ6ģŨĒ1iā ŨCÄ6ÕŨĒ1"å vÄ6īŨœ'O<Á tđŪ&7Ē1Ē1Ē1  Ž ’"/Ū&7œ'+’Ķ ¸hOŪ&7œ'į9õģ ņöjŪ&7+Hf õ‡…Ū&7HåaG ėXÄ6ŸŪ¸9"Dà ¯ŪēŪ%H1H*1I ūiÎŪŲŪ%H1HĢ"+ŪÜéŪ%H%ŪÜ|ޤ>„ vļávf>&ß1ßCHIH.>† BßHßCHĸîu‡ Ŗđeßœ'œ'ĨtöŒ O#˙ŪƒßŽßCHHĨA[Ÿ Ņ˙ŪŦßŧßCHH%Ĩ”c Í˙ŪÚßåßCHHĨ›ō ø¤˙ŪāāCHHĨˆÉ ĄJ˙Ū,ā7āCH+HĨ†ŽÖ Z ˙ŪUā`āCHį9ĨŪ4Ū $¨˙Ū~ā‰āCHn8Ĩ qé 9é ˙Ū§ā˛āCHį9Ĩ]?ü -ü ˙ŪĐāÛāCH+HĨ†Ē åx ˙ŪųāáCHHĨ†/– ų ˙Ū"á-áCHHĨŒl( ›Ž ˙ŪKá[áCHH%ĨUđ˜ OÆ˙Ūyá„áCHHJ 9ŅšáHĢQõ˙ŪĒáCH%˙ŪųŗÚVŲoČØÚ’ŠiÄAĻČ­p ”yüQâtüfpââ IITpü*â5â In8Ģ)ęčáEâ I%čáQŌ QG‡ü$qâ%‹:ĸņã ĨúÕü$”âSS™âßÜËŸ“ ŒuĐ%Āâœ'œ' FĮœ'Öâœ' ôÍ%ėâĄD %āÎ%ã% ĄíėĄDãœ'œ' Å4Ī%8ãœ'/^´ö’ .ūœ'Wã% eIũ%mã% Uõ%ƒãĄD dŖ÷%Ŗã%Ž9% ž ķĄDžã%œ' dÖú%Ūã%]9%Ė)Ͱ*œ'wÖ0 vŦ LUŋü$ä$%$% ëôÅ+Ļ3ä$%$% āe ü$Iäü$ &ë œ'_äFÍ Fs(ü$uäü$w_…*ü${|\ü$–ä% Ũ— Ąˇ­ŽäIT›ŗä6^Š ĢĶ.%ßäIE%î:%%ĩ ī  åIT›ļpĮZHNqœ' _ú ZH9åITČ­pĮZHÕ9Čqœ'ĩEę cåITļpĮë@Irœ' ú  ü$“åITēļpĮü$­DDsœ' Iģ%Āå9Ęœ­‘?ÕuhAÕuĩ1Â'ęå9Ęœ­FQ…vhA…v X%æ9Ę8x‘?™yÔ8™y ŅD%Dæ9ĘcŒ‘? {j: {ˇęKü$[æzCˇ (Pü$ræzCĩg¯'œæ9ĘcŒFQŌ|j:Ō|ĩ2ã'Ææ9Ę{ÂFQJ˜!CJ˜wŪąŒ7›š c% r eŌæûæIC,@% X +Ļį0ä%EĖ—…ü$+į$% )ۍü$Aį%{ŊˑĐ[į%&7 ŨJ]yįITo]]ĩåX‘įĒ1&7ĩz"&ĐŠįĒ1&7ĩq&đČįITא&7 )ېü$Ūį$%ĩĄŪdöį!5&7ĩz"&Ūč!5&7ĩ0W&đ-čIT, ‘&7 Ŋvü$Cč%ĩ‚˛ŸVčŽĩá°'€č9Ę[ĄFQĻ›Ķ@Ļ›Ūžƒ™ĩOLĢčIE%ß6Ü:wžŗÄ6 ûÃ\ü$×č%%% ¯ ˜%íč%w­ēVˇ­E.œķÄ6éITų'Ŗū¸°ĐwŠü ”ü$~~ž€'´žh“´G´äŊw8Š5‘w1IÜü$ĩ´5_}é|:5‘ĩ´5b•é|:Ė,{sH.*œ'Ēéœ'vŦšw<ü$ĩ•v&OåéIT,Ōæåé¯E&7rųQšĩŨ&aęIT,¯E&7ĩü&đ/ęIT,¯E&7 !'—Ä6ZęIT1,IT2,¯E¯Eēx¨¸węĒ1%z7ē‚ž ęœ'%ˇ ŌA%ĢęhAš)篺žęœ'{3ŲÄ6Ķę'ēŲŠSíęITv;ˇņíÄ6ëĒ1ˇ!ōVü$ëzC0{XbÄ65ë b"`= d QëFÍœ'm؞p ģ{gëį9ģ†|-0¤›7gØü$“ëœ'F)ˇ÷Ÿü$Ēëœ'ČļEŌãœ'Îëœ'œ'ü$mŽkĨãü$ōëœ'œ'ī‘ôRü$ėœ'œ'šŗ'ĸ5‚´ü$4?˛Đ/uü$>ė%- y0QpÄ6!ד4iė]ī‘-J>yū۝  „Œ=Ä6“ėJŲ- ę˜¸Ä6ĀWĢVšė˜7#ú˙qÄ6âė9œ'œ'œ'ˇ\ėÄ6ūėœ'œ'{ŽÔǚü$"í5œ'ŋķ˙´%ÄJC÷˙´Fíœ'˙´ÍR|0Gü$jíœ'œ'ŋķˇ;mÅÄ6íœ'…ū?!ü$ íœ'ü$ɘœ'ŋíœ'œ'ŌŖØĖ˙´Ūíœ'˙´đ5(>ü$îœ'œ'ü$O §†Ä6îvŦ ˛čUÄ Jîœ'œ'Ē1Ē1ü$Čœ&Ä6dî+ĻOŠÜvXÄ6ƒî5(%ēžox î5('5{<öŽ‘ĐĖ$%§$%$%&7{Ŋŧ‘Đæî$%&7ŧ¤ø˙ ī^ž%œ''&7ēĻ'1ī^ž%œ''&7#2+nQīœ''&7z"6=#līœ'&7…šŒãĸÄ •īœ'œ'œ'œ':SœŽŪÄ žīœ'œ'œ'œ'ŧŽ-˙ãī^ž$%5('&7ē:< đ^ž$%5('&7#21”’)đ5('&7z"GûpDđ5(&7…š īXÄ mđœ'œ'5(5(4&–ķé>Ä6đIT%ˆ:4s5ķķÄ6­đIT,¯E#ī• Ė8Ä6ĮđvŦüaČ•ŸÄ6æđœ'%y {j5ņ%œ'JŲģų@Ž&{ļÄ6(ņ%ˇĻÁØ Ä6?ņn8ēS„â Rņn8vœš&Ũrņœ'œ'%ÆqÚėģÄ6‘ņœ'%đÃŽ­­Ä6°ņĒ15wšakŊÄ ãņœ'œ'œ'ō8÷L;žDĘÔÄ ōœ'œ'œ'%%%%9˜1Ä ?ōœ'œ'5(5(%9Ŧá•Ä hōœ'œ'œ'œ'ēēØˇÄ ‘ōœ'œ'œ'œ'Ã%Â‡Ä ÃōåU%œ'œ'U%U%UŽ%üvÄ õōå%œ'œ'%%G7w!ķIE%ß6%%Ü:Ë ęk:ü$I퉅%Ē1|:{8ēŽ‘Đuķœ%§%%&7[ŲÕŨ–Ąķœ%§%%&7‘Đz"í"KĀķ%&7{KVŽ‘Đėķœ%§%%&7\ÕīDôœ%§%%&7z"đđ2ô%&7˜‘Õæ^ôœ$%§$%$%&7z"öũŗxô$%&7ēpNS’ôITËÛ9ē÷SŦôITë@ē?ƒSÆôITV@kĖÄ6åôéG%ĩĄûˇ•úôĒ1ēÔK8 õ%ˇ1•°%$õŽ4Å(ķˆiÄ6DõIT°*Dëy,K]Gpõ%AÅ \QŌImZá‹Ä ™õœ'œ'™õ™õāq,û/{é[Ä Îõœ'œ'™õ™õĐ*~ęvÄ ÷õœ'œ'™õ™õ[+ÆŲÄ  öœ'œ'™õ™õŽ„ŊļÄ Iöœ'œ'™õ™õ‡å€Ä röœ'œ'™õ™õ â¨1QÛ9¯öœ'œ'œ'œ'ˇ­ŋÛËÛÕ9 (8 )Ä6Åöœ' , œ'Ûöœ'Ęč‰ŋ˙ö^ž$%|:Ė,4Ø‘#÷^ž%|:5‘õByöŦQGO÷%Ā \QŌIˇX[ꆎk÷īC%-PmLö6´'kH`Ÿ÷^ž%|:5‘2Kk,Ã÷^ž$%|:Ė,iŖ†–Ū÷÷Ē1 &Î øIT›ļpĮZHNqœ'*&d0ZH?øITČ­pĮZHÕ9Čqœ'üØ&Ü,løITļpĮë@Irœ'EV­‡%ø˙´ēTÉr”øV@ēŪ“s§øV@EŽa—%ŧø%& &(Õü$đøITēļpĮü$­DDsœ'Ŋę”ĻįcžÎŧ5ų˙˙˙˙˙˙˙™õŊ­.;ÚU%ŋy*ąļĮËY ۋkąk%Ä6Ÿ2čY 7Āfā3ųY ÛĀŽ 4 Z ŊŊyõr™ a˜ŊÔF\\íĀ_ŠY3Z ̚ĀąZDZ šĀFˆ[UZ  Ā0`\fZ ņĄĀo]wZ ŸsĀŠķ^ˆZ øņĀŽ_™Z Ą7ĀŪ|`ĒZ íĀ*MaģZ OĀ-‡bĖZ ãėĀžcŨZ WÅĀ6*dîZ ™ĀFŧe˙Z xÚĀ"f[ ØîÁöi%Ÿ†k/mĩ[™ü$Ŋ¯u[9Ä6Âa)‚7ĻÃp)…7Ļ˙Ã)ˆ7Ļ˙˙ÄŽ)‹7Ļ˙˙Å(Sm d[ ÅDn u[ n!Å1Õ˜[ t{lĘa{ü$ÆßÁæĸ'LÆ]įĸ'RÆŸöčĸ'TÆȕéĸ'IĮŽ ¨5‘ÆĨ”Vĸ'/Č pWØ[ /ČZŧXé[ ./ÆwFQ%ÆíR%Å×Ä\ ÁBPššw›DP{6x›DP" ¨˜7Ģ´Uā†ss_⎛<+Yų4Ģ´]ü!ü5Ģ´`1ü<ü55/Ģ´eLüWü5œ'3Ŗ€Ĩš5oüzü5ü3Ŗ€Ģhé5’üü5ü$3Ŗ€ą•u5ĩüĀü55(3Ŗ€˛,;5Øüãü5ų'3Ŗ€ˇ˜ø5ûüũ5!535béÉā!s5™˙¤˙IT¤é5´éÉ&6s5Ā˙Ë˙ITë5n8Érjs5į˙ō˙IT2ę5BęÉR“s5ITģ5„ęÉ =s55@ITÆę5ÖęÉ*Os5\gITë5(ëÉŲ s5ƒŽITjë5zëÉ $s5ĒĩITŧë5ĖëÉß?s5ŅÜITė5ėÉGs5øIT€ė5ėÉqÕs5*ITŌė5âėÉü5s5FQIT$í54íÉĐâs5mxITXķ5hķÉđ1s5”ŸITĒķ5ēķÉ;Ŗs5ģÆITüķ5 ôÉžs5âíITNô5^ôɇfs5 IT ô5°ôÉφs50;ITōô5õÉ1s5WbITDõ5TõÉåjs5~‰IT–õ5ĻõÉųXs5Ĩ°ITi'5Đöɲs5Ė×ITJ÷5Z÷É˙{s5ķūITÎ÷5Ū÷ÉŌęs5%IT'ø57øÉqis5ALITyø5‰øÉ‰ps5hsITËø5ÛøÉÜAs5šIT;ų5KųÉ ¨s5ļÁITt“5ųɸs5ŨčITĪų5ßųÉ{s5IT!ú51úÉŅ8s5+6IT05súÉ`¯s5R]ITĩú5ÅúÉ”4s5y„ITû5ûÉ^s5 ĢITYû5iûÉ#s5ĮŌITĢû5ģûÉäHs5îųIT5ũûÉĖ.s5 ITÍü5ŨüÉAËs5<GITĘ 5Ú Éŧs5cnIT 5TÉäs5Š•IT”5¤Étús5ąŧITæ5öĘŽRs5ÔITQ5aįû(1`žV%ē`Æ%/(1`Ā 7%3¸>`ÁҘü$0;7%H1I`Äâ#J77å§Ä`ĖŽ%˛_`Ņ%/§Ä`΃Ž7%B¸>`ĪÚü$ĸ 7%[y 7&nëŲnk2ŨeQ'&7Ƹ&€52Ãw/÷žŽ{3   \4 áÆ%I g÷%^ŨoÄ6%Pr%%%*sÄ6 %0tÄ6Ãw<d~\8÷œ'%œ'3æôH r÷–œb83ėLCåœ'´ēb83¨ÃR"%ŌØb83×>Uđíœ'đöb83-BX$œ'b83ã[3íü$,2b83—Î^ĸĐü$JPb83îmaĶü$hnb83da'ü$†Œb84Ňká Ä6Ĩœ'÷f0i¸Ã\8%fÃwŅÜ\8n8Ë1Ih8ë\8n8ëQ* ~ŋ %ūĩŒ8xQ*€$ * æ8būƒēŌ> I æ8n83Ū7†%n8a l ė8%3ķņ‰ÚF%„ Š ė8GQ*Ž™ ¤ æ8ō8H1IŽ›ŗ æ8ō8üW7š–!˛@0ü$!05AĢ.7šü   99T7š #  9ü$0C ŽDü$< B 902H MíÄ [ a 90-BŊGœ'z € 90Ä4ĩœ'™ Ÿ 90Ŗ€!ŋĢ9¸ à  9ų4*÷^)›k× â  95*1I7Ŧ™ö   99fģĮ   9%Ė´î97 B IT5( 9eūĖĸ9_ j ITįû 95ĖÎá9‡ ’ IT 9א0I#c9˛ Ŋ ITĄį 9ąį0Yíß9Ũ č ITG 9 é0&6@9  ITë 9n8Ėā!90 ; IT¤é 9´é˧ŗ9X c ITÔ> 9bé0Ø@îĪ9ƒ Ž ITœ' 9Ņ5Ėü59Ģ ļ IT$í 94íĖ~19Ķ Ū IT,  9‘Ė*O9û  ITë 9(ëĖ $9# . ITŧë 9ĖëĖR“9K V ITģ 9„ęĖ =9s ~ ITÆę 9ÖęĖk§9› Ļ IT% 9Ž5ˉ@9à Î ITĮč 9×čĖŲ 9ë ö ITjë 9zëĖß?9ITė 9ė0˙´T9>IIT9č 9IčĖG9fqIT€ė 9ėÍqÕ9ŠITŌė 9âėÄ ¤4ø[›ģNí<ÂĐ\F!õ/Ņ\F! Ô˛­!–ײ­ !Z{Øí!eŲü$!y/Úü$!ØÛü$!:DŨĐ9!3â´.ŒrqkvÛ9%0¨ãtEœ'•á903w *œ'Ž´á90ÕŠ{ßåœ'ÍĶá90¤Cƒ˜8œ'ėōá90đR™Úü$ á90jËœŧ"ü$*0á903’¤įS˛9IOá9"ëÖē_ƒÛ9Ē1Ē1œ'œ'ˇ­Õ9+ŊrÃB%›ĄÛ9ĪRunÉ72ļŧÛ9š$Ë ßŌÛ9"ëÖäâíÛ9į9L1IäUũÛ9į9ˤđōŦÂNí<šŸiĸuGU;`¯KVV@%ĨÁͲÎ~tzV@ĨûöĩM˜žV@ŌĀ<ē9šÜHģV@WË: v!ŋK;!qQM;!ē.O;.Ë:   ;.mX ) ;%2ū €>I ;;0Īnå;bm ;;0„{MŊ;†Œ;0P 'Ô;ĨĢ;+|Á5Ą—;ÃÉ ;*…ę<¤äŨč ;;*_XCŠ ü ;;+1RG4ü$%;*ļáH¤9? ;"Ë:ROZ ;;L1IRĒj ;;¤rŋv Ÿ}ßuGfrĸ­;ĐHfrģÁ;¯1IEMÖHØã;ĐHU‘¨Ávų;%ĨtöÄūZv"-;HĨA[É;ŸvK[;H%Ĩ”cÍ‹Ivy„;HĨ›ōĐŠvĸ­;HĨˆĶzŌvËÖ;+HĨ†ŽÖŲ—vô˙;į9ĨŪ4Ųzv(;n8Ĩ qÜČt vFQ;į9Ĩ]?ßnv voz;+HĨ†Ēâąí v˜Ŗ;HĨ†/åX vÁĖ;HĨŒlč?Đ vęú;H%ĶUđėWv;Hį!_3WWžOę_7Q %œ …ÃW%WØ_Rd6%>–_S&@%3_T‰H Tį!’ŽHæ8.į!'ŽžŽH6æ8Uܗ;%ÔߎH%ĨÖ¤FIl%ũŽHn8*˙€.ˆ"ŽHGį!_V1<ŽH”HH1I_VüâKŽH”Hš,’WŸĪ uGfš,‚&@âHfš,›Ą&@¯1I“PčH¸Ã&@âH@¸=”WØã&@%ÔÖ¤–XWü&@n8¤°g|ęå"Ÿ´‰uG!õ/ƒÄ6! †˛­!Wæ‰cŒ !:v–!N/ļ$![ž‘Ã(!e“ü$,!ė`•ē0!h&˜´8.°gV ŦÆë@œ'œ'ļÃUb Üįë@%03tœ'zC0ÕŠ˛Įœ'%zC0đR z0ü$>DzC0f3+ ˙›%]czC0Īf0 3Y%|‚zC0 5 gž%›ĄzC0Ų: [Z%ēĀzC0@? ˜§%ŲßzC0ŊĶD >%øūzC0R]I ˆī%  zC0FE#Gü$6 < zC0E&Ö%ü$U [ zC0ž ) Éēt z zC0ˆ8i Má9“ ž zC%0ø1ßI¸9ˇ Ŋ zC+S`8%p:Õ Û ë@+S`;âj:ķ ų zC+nPp [Û9!!ë@%*ā-Dū0!;!ë@ü$*âÄw xûO!Z!ë@Û9*įâ™ ĩn!t!ë@ŒÕN"|Š!ë@ĪRun} ‹Ÿ!Ĩ!ë@*,W§š!ŋ!ë@*Zv[ē‚Ķ!Ų!ë@ÄW^46ü$ķ!á9?Äc]öü$ "á9xËiĨCü$'"á9øĖnCLü$A"á9esH-ü$["á9Ȥx)kü$u"á9*ú=Ÿ X_‰"”"ë@ß6*ˆÕ¤ #p¨"Ž"ë@"°g›ž"É"ë@+HL1I›Ų"ë@+HO}$8aFˇ–Ųâü$#–אאˇ!Áâü$;#–, ‘‘ŧeg;\#eQ''&7ŧŠûNx#eQ'&7ˇ•"Ōü$”#œ'œ'ˇØâėÄ Č#–œ'ü$œ'œ'Ņ5Ņ5ˇŦ-ėÄ ü#–ü$œ'œ'אאˇÖkėÄ 0$–, ü$œ'œ'‘‘ˇ•"Ųü$L$5(5(Õj=ėÄ –5(ü$œ'œ'eūeūQĘå"QÍå"|6å"/°Đ¤D(_ $W)Ÿá$uG!F_™!Į­D$™üÜ9ųũéG1Run ”%% %éG0^T˛œ'"%(%H0Tgd/ŽzCA%G%H0Ÿ°lŒá9`%f%H0OsŽ@%%…%H0KČy‚ûGž%¤%éG0Æ<ON%Ŋ%Ã%H0ERTļ¤%Ü%â%H0îiYÉ%û%&H0×o_ī2%& &H0f3d¨V%9&?&H0Īfi‚Í%X&^&H0 lad%w&}&H0ŲqÍ5%–&œ&H0@vޝ%ĩ&ģ&H0R]{v%Ô&Ú&H0ŊĶ~‘_%ķ&ų&H0ÕĖ‚…évŦ''H0ž ‡đvŦ1'7'H0FEŒ`kü$P'V'H0Eų–ü$o'u'H0g˙”ÂzCŽ'™'H%0øšÂi¸9˛'¸'H0D‹Ļԝ HŅ'×'éG+O\´V@ī'ú'éGV@*„GÁ.,(-(éG÷œ'%Ē1Ē1*ležA(Q(éGĒ1Ē1+n ,ûë@i(t(éG%+ÄįV­DŒ(’(éG+ÄčRcõGĒ(°(H"D€Ā(Æ(éGÖZŖ… $Ü(į(éG%*¨¸‹]û()éGÂA*"G’Âŧ) )éG"D0);)éGHL1IąÖK)éGH $¤Iĩôv˙+vfIĩƒ)Ž)žHÄHfIĩœ)ĸ)žH¯1IZĘHš)Ä)žHÄHĨtööį\)â)í)žHHĨA[÷†B\) **žHH%Ĩ”cųéĢ\)9*D*žHHĨ›ōúû \)b*m*žHHĨˆûrß\)‹*–*žH+HĨ†Žü}Ü\)´*ŋ*žHį9ĨŪ4ũŊ\)Ũ*č*žHn8Ĩ qūß \)++žHį9Ĩ]?˙Đ \)/+:+žH+HĨ†Ēg \)X+c+žHHĨ†/Ã6 \)+Œ+žHHĨŒlŸ \)Ē+ē+žHH%ĨUđĀS\)Ø+ã+žHHĢã*\)ķ+žH%›%\)vWwOũÍÄ w,ąČÄ ˇ¤Ä œ'G,÷ˇüāŧ Ä6^,%ˇĢīˇ Ä6u,%×mšœ' ß>ųcĄ,Y¯g%¤ °CųcÁ,Y¯g%âēˇ7@ü$Ũ,n8ˇ0Jü$ô,n84Ŗ€:Ošŧ1-ŧ1n8EŖ€čŧ1,-ŧ15OũĶē2Ä F-5?N&O_ÔÄ6g-ITœ'Ņ5†H&OŨ Ä6ˆ-IT5(eūˇŲ¯ Ä6Š-%œ'œ'ãĖ8ōÄ Ō-œ'œ'œ'œ'}ĸ°Ä û-œ'œ'œ'œ'ãĖ“Ä $.œ'œ'Ē1Ē1}!}Ä M.œ'œ'Ē1Ē1ãĖ(ÜÄ v.œ'œ'!5!5}.R.Ä Ÿ.œ'œ'!5!5ãĖ UĐÄ Č.œ'œ'5(5(}›âÄ ņ.œ'œ'5(5(–oJëÄ /œ'œ'U%U%KhQ)#Ä C/œ'œ'%%u&OLøÄ6d/IT,¯Eˇ9@ũc{/Ē1ėi7–/|:5‘ė“9ą/|:Ė,ˇ¤j Ä6Č/Œ7K#†ü$į/Ē1Œ7kūâU'ęÄ6k53ŊīĀü$kđšÂl{ü$k°Įņúü$kĮ ͞&Ä6k ŨÕxÉÄ6kâ Ū§nü$k‚á^ēÄ6k—{í0ü$kúļķÍ˙´kœ`ųģĻ˙´kîo˙Š+ü$ŊŅBŧü$ŊŸ pĶ˙´ŊŒüĒ—ü$ŊbᏠÄ6Æœî“%dkjú^âÆü$ĀĘ ™ãX æãĀō“žôX ”nȲ'ĄY *Ā ¨¤Y MÔĀ;§'Y ‹+ĀĀŠ8Y ’ Ā•<ĢIY ×ģPzøØZY P^.åkY P‹ī|Y Ā}ÖSY 3Gví•}y—}\Fvy—vĨ—}aF}\˜va˜vû˜v™}~™Č1vƒ™} šØ@įa 2sî›a"%sÕpa#Žįa$ņ1Iža:ņq€a?Ŗ=4rtaFĪ3aKa2%âCaL֍%M<aM‰ aR2%”aS%%"eaT%% BaU2 aZŊ2%âCa[֍%M<a\‰% Ba]2ab3%âCac֍%M<ad‰%Ē5ae%%õâaf 2 %™aag 2al%3%ūamŽ%c/an+%asG3%8įat@%%â•au% azu3%„a{Ž%ĸGa|%%šwa}9%s—ĻaG4sŦaN?2sULaVa2Ų_rta^2s–ģahŊ2s+ao3sŅPav%3sNļa~G3%/a@%%°aA%%đ aC%%§ía72 t%4uy'91a€+2Į#bU&4v,4ƒ84% AŒc”4rcc4snõc4sH`c!°4%%”c#D4%K=c+ܒ%™ŗc.%„%i=c1¸4ˆƒĒ4%Ē4Žv4v”4Úvļ4vˇFvjGvoG}Ö4ž4vÚGv‡š}ÚGvˇ›}ˇ›v˙4‡ŧ15ŧ1vįû}ā}įû}wHvāvŧ›v} }v y8÷=a568V5v[5ÛabiuĻK5v$ }Ĩ 'vĒ }‘5U%}Ąvĩĸ}ĩĸvēĸ}´5%}/ŖvŤ}Ť}œ'}0‘vo9};v;v‡H}I}‡HvëIvđIvRJ}đI}RJvõ;}†=v†=v"I}WJviJ}ëI}K}iK}Kv\Jv[Z}5K}wO}šQ}[Z}\JvÕZ}š[}o_}ÕZvo_}X]}Ę]vʤvtX}Yvß_}šX}Zvt_}ß_}÷$vgĨ}<Ļđ6vAĻv ¨v?Š}?ŠvåvV}Vv[vŽvaFv‹=}?v?vä_}ä`}ä_võ`}˜a}õ`}avé`vc}Ebvc}d}0d}Åj}cvÅjv¤7v’Šv°7¤7}¤7}°7vÂD}SFvSFvėj}Ļk}ėjvˇk}Zl}ˇk}_lvĢkvÖm}mvÛm}Įn}ōn}õt}Ûmvõtv‘Ē}<ĢviG}K8ž7vI}iGvëv÷}ë}÷v’I}#Kv#KvIu}v}Iuvv}ˇv}v}ŧvvvv3x}dwv8x}$y}Oy}W}8xvWvüvŋ }ŋ vAĢvqŦ}qŦvÄ }–v–}Ä vģv¯}ģ}¯v›P},Rv,Rv\}€}\v'€}ʀ}'€}Ī€v€vF‚}wvK‚}7ƒ}bƒ}o‰}K‚vo‰v´vÆ}Æv‚Ŧv˛­}˛­Õ9vČ­vËv } vÛ9vų9Û9}Û9}ų9v—U}(Wv(Wvt‰}.Š}t‰v?Š}âŠ}?Š}įŠv3Šv^Œ}‹vcŒ}O}z}‚“}cŒv‚“v%}%}%v \}1^v1^v‡“}A”}‡“vR”}õ”}R”}ú”vF”vq–}ĸ•vv–}b—}—}•}v–v•v|ŽvvvÂv } vÍą}‰˛;vĀąv9ŗ}9ŗė8v>ŗ}īŗ}ôŗ Ë-W%n;¸4E!Md%ƒ;œ' ´MW%™;œ' šMW@%¯;œ'EAįeŽØ;]]''ō’jdivWK’ķ;%% ØW4°* <œ' W|’$<@%@% šųW^%?<œ'' ėWi'_<ų'œ'' ĢWa%<ų'œ''ĩíĸWüĄ<Ž''ō’wĖ>Wv%ĩYķWxĀ<9%Eø›W¤%Ú<œ'5‘EŊWˇ@%ų<œ'5‘%EtWģG%=œ'5‘% xKWĖ%.=œ' OWl'N=°*5(' {âWe%i=°*$% ņāW­’„=,, ¯W$,š=œ'ERŖWŅ,š=œ'5‘%E WÖN%Ø=œ'5‘%EĐWŦU%ō=œ'5‘EWW¯\% >œ'5‘Ž1f3> âm ŋw Ũ¯ ,č ŨÖg7X>%‘¨g9%%Ö#g:%v3>7EŅh¤> Z Ėä ēJ Õ œĶ eŠ Â – €€ ߀Ō>i2% #j•Ô>%–Ũj—¤>%Ņ_j˜Ô>t%ä>uy' ÜjŦ}? ]Ë ŌX ­P Ĩ ǁ Ą  Dv ¤lĀ H € Ā.€ ~€ ŗ?€ +€ Ö4€ Îs€Ā €€ ÚW€€ 49€€ Ŧ¸€€€€ ÷Æ€€€€œĩ k7ķ?!–ök9%!$k:%!Nžk;%!‹Ök<% !Q4k=‰”!Ē1k>ķ?!…šk?°*!ÅRk@ų?v¯>v}?v@}?vųŗv ĩv•ĩ&@vWvßŋ}!@v&@v!@v˙Á}˙ÁvV@vvb@V@}V@}b@vŪa}ocvocvlž}&Ÿ}lžv7Ÿ}ڟ}7Ÿ}ߟv+ŸvVĄ}‡ v[Ą}Gĸ}rĸ}¨Ē}[Ąv¨Ēvë@vv÷@ë@}ë@}÷@vįh}xjvxjv­Ē}gĢ}­ĒvxĢ}Ŧ}xĢ} ŦvlĢv—­}ČŦvœ­}ˆŽ}ŗŽ}Ā´}œ­vĀ´vÂ} ¨v4Ã}4ÃviÄv9Ã}iÄvÅ}Åv)ļvÅ})ļ}Åv"p}ŗqvŗqvÅ´}ĩ}Å´vĩ}3ļ}ĩ}8ļv„ĩv¯ˇ}āļv´ˇ} ¸}˸}Ķž}´ˇvĶžvÅv:Į}:ĮvČv?Į}ČvAÍ}AÍvfS}vB"9v+w}fSv–B}“Bŋv0w}–Bv;v°B;};}°Bv5w}ÆxvÆxvŒŋ}FĀ}ŒŋvWĀ}úĀ}WĀ}˙ĀvKĀvvÂ}§Áv{Â}gÃ}’Ã}šÉ}{ÂvšÉvz}?C¤BvK~}zv€6vP~}€6vmÍ}öÍvûÍv…Îv$vŪm}ŒCņ@vU~}Ūmv˛k}ŠCå@vZ~}˛kvŠd}ÆCP@v_~}Šdvu¨}”Ëv”Ë}u¨võC°*}°*}õCvd~}õvõv™Ë}SĖ}™ËvdĖ}Í}dĖ} ÍvXĖvƒÎ}´ÍvˆÎ}tĪ}ŸĪ}§Õ}ˆÎv§ÕvŋÎv/}ŠD5‘vSƒ}/v•Īvc%}ŒĐvēļvÜÖváÖvC×}áÖ}C×vXƒ}é„vé„vûÕ}H×vZ×}ÜÖ}Ø}rØ}$ØvM×vdį}>Ø}€Ü}ŖŪ}dį}M×vŪį}Ŗč}‘ė}Ūįv‘ė}aę}ĶęvëVví}$W}CXv}å}$æví}Âå}(įv–ė}ív`Z}í}ĩE,v]L}ÆE\8vŊ…}]Lvû.אvŽ/v|N}ôEb8v…}|NvZ}Fķ9vĮ…}ZvbX}.Fí9vĖ…}bXvk_}KF|:vŅ…}k_v,|}hFĒBvօ},|vír}…F°Avۅ}írvČf}ĸF\@vā…}Čfvņ/vw@}ÅFŐvå…}w@vôãvúî}-ä}Låviį}úîvīt%Guy'}Gvŧđva4vę…}a4v u}:GļAvī…} u}ûÕvĀ}ōÁvAÅ}-Į‡%uGmv{GpgiGvŨŌvžĶ}žĶvÃĶ}dÔvđ6viÔ}öÕvûÕ}‘Öv3Õ}LŲ°1v–Ö}QŲvQŲéGv $vØÚvēÛ}‘Ē}ēÛvW)}Â}W)v×Û}ŲÜvŪÜ}$}õŪvúŪ}úŪv˙Ū}ļáTHvģáv›v­}˙+­DvÚ}ĀávVŲ}Åáæ8v%},voČ}ĘávÉ}6Í};Í}Īáv\)} ,}\)},}vv },}WvÔá}Ôá}Ųá}Ūá}ãávčá}QâvQŌ}Vâ}QŌŨōŽNœ'WIŪrNœ'ŪÆNœ'ߨ fIqIā ”“Bß €I‹Iā ”“BßšIĨIā ”“Bßņ"´IŋIā ”ŋIûß2#ĶIŪIā ”ŋI߃ íIøIā ”øIīvŧũ߇üJJā ”JũIáW =Jâã__pēŽvčDvÁũßÉDXJcJā ”cJCJßôDwJ‚Jā ”cJßE‘JœJā ”cJßš ĢJļJā ”ļJːßĘJÕJā ”“BßžŌäJųJā ”ųJāļÄ%IäĄĀØK%Kā ”%KāļÄ%QGß59KNKā ”b@āļÄ%åXēl÷%oKâæClųoKŽvzKįRá †¤Kč/0tKčÎK0%vRá&†ŨKč/A¤KčÎKA%âæDCRá@†Lč/N¤KčÎKN%ßX L'Lā ”ļJé__aí'L‰vĀDß2EALVLā ”VLāļÄ%,Lv~üßĨüpL…Lā ”…LāļÄ%[Lv;v]ß;ĨLÄLā ”ÄLāļÄ%āŊŦÉLŠLLv^DßgDãLMā ”MāļÄ%āŊŦMÎLLß?;M:Mā ”ÄLāļÄ%āŊŦ:MLß{NMsMā ”“BŪß1IsMŪp÷Ihאß(‡M’Mā ”ŋIß(1ĄMŦMā ”ŋIß”1ģMāMā ”ŋIŪß1IāMŪp÷I ‘áp!Nâã__pēŽßq"N&Nā ”&Né__aí+N‘ŗę5â ”ANVNā ”VNāļÄ% Iߍ jNNā ”“BŪp÷Ahë__sAœ'áJŗNč•ĪōŗNčšĪō¸NɋĪ‹ßđ ĖN×Nā ”ļJßŌ æNũNā ”ļJé__nĪhßŖ OOā ”“BáĮ0Oë__sՋá)cOŪƒۋŪÜՋë__nđá) –Oë__dd°*ë__sdœ'ë__ndhėš77’ŽšOđé__p7’Žís7˜ŅOŽŽáÆũõOé__a!OĪ6é__b!OĪ6áāũPé__a!KĪ6é__b!KĪ6áúũ=Pé__a!—7é__b!—7߯üLPcPā ”…LčŪ —V8áū’Pņ(Ū!å’Pë__sœ'ˑá8ūÆPņ(Ū!åâÆPë__câ%ˑ}ƒ;ß`;āP÷Pā ”ÄLé__nĀ9%}vū}Ī6á\ū'Qé__a!['Qé__b![Ī6ũPvë7ßc8AQiQā ”iQŪ*!BJ8âî*Ē!DJ8,Qá{ū†Qé__a!WĪ6áūĒQé__a!_ĒQé__b!_Ī6ũP߇8žQķQā ”iQŪ*!SJ8ŪŊW!SJ8âî*Ē!UJ8ß°8R*Rā ”iQŪœ¨!vĒūâî*Ē!xĒūßÔ89RaRā ”iQŪčØ!Ēūâî*Ē!Ēūvĩūß…EvRŽRā ”ŽRë__ca%aRvãū}ãūßÃūŽRÅRā ”ÅRčĀa+xĘR“R™Rߟ–ŪRéRā ”ÍGߘøRSā ”Sļ1á[â Sëch‡%Ũá<Ä%MSŪ<Äœ'ŪcÜÄMSvŸ“}”âá~âqSëstÕqSSSߝ…SSā ”ÅFŪß1*Sא߉ąSČSā ”ČSérhsIÍS3595ßđáSėSā ”“BßũûSTā ”“Bė¤äœ'0Té__säœ'é__cä%ßėĻ?TTTā ”ë6āļÄ%ßŗÄcTxTā ”xTāļÄ%’AęHÔ”ŽTŖTā ”ŖTāļÄ%—GßލˇTÂTā ”ÂTü6ßˍÖTáTā ”ÂTßę¨đTûTā ”ÂTß~ UUā ”ôEßē$U/Uā ”ôEß2>UIUā ”ôEßPXUcUā ”ôEßnrU}Uā ”ôEßÃŒUĄUā ”!@āļÄ%äŧÚęŗUČUā ”ČUāļÄ%qHäûŲÚßUôUā ”ôUāļÄ%}Hß# VVā ”V9ß'V2Vā ”2V˛9ß1FVQVā ”QVŦ9ßōeVpVā ”pVá9ß„VVā ”pVß%žVŠVā ”ŠVzCßãŊVŌVā ”°BāļÄ%äšá„ äVųVā ”ųVāļÄ%CHäã+ôW%Wā ”%WāļÄ%žHßt(9WDWā ”äGß’(SW^Wā ”^WHß ÛrW‡Wā ”‡WāļÄ%īGßhŧ›WŗWā ”lHŪŠā­ë@߈ŧÂWÚWā ”lHŪÖĮ´Û9ßwŊéWôWā ”ôWõGß–ŊXXā ”lHßĩŊ"X-Xā ”ôWßöžŽtAßđ°{a“aā ”“aë__n >ŽVAߔ§a˛aā ”˛a†Aä%,ÉaÔaā ”Ôa ;ßÉÃčaķaā ”ķa¤Aß0°bbā ”gaßQš!b,bā ”ôWߏš;bFbā ”ôWߎšUb`bā ”ôWßÍšobzbā ”ôWßėš‰b”bā ”ôWß ēŖbŽbā ”ôWß*ēŊbČbā ”ôWßIē×bâbā ”ôWá–äõbIT›á˙6cŲ!%ņ(ĻņŪĘnÔ 6cŪß1Õ ;cˑאßiũVcwcIT%ā ”ģ_évalswcâ…|cˆ:Ŗ€7ĩM–c–c%}Žäߐũ˛cĶcIT%ā ”ģ_évalsĶcâ…|ckß“Ģįcōcā ”5`}•ĩäeĩZ ddā ”dd@ōcáT˙edŲ!%ņ(ĻņŪ Lę edŪÕë œ'אß­eyd„dā ”„d˜7ß‘f˜d°dā ”„dë__nģcßĖzŋdĘdā ”Ędā8ß߄Ūdédā ”édĻ9ßۏũdeā ”eë__nv:ß÷Ž)e4eā ”eßÛ CeNeā ”ŠVß]eheā ”ŠVߡweeā ”eë__n X:ß ™ŖeŽeā ”Žeú:ßʙÂeÚeā ”Úeë__n —Ü:ß”"îefā ”÷@âīiĨ 'ßÅf!fā ”!f-CßĪÅ5fMfā ”Mfë__n ÃCßj¯af‡fā ”)[Ū|%  ‡fâīi  'HßÁ¯›fÁfā ”)[Ū|%Ą ÁfâīiĄ 'Hß°Õfûfā ”)[Ū|%ĸ ûfâīiĸ '+Hß<°g5gā ”)[Ū|%Ŗ 5gâīiŖ 'į9ße°Igogā ”)[Ū|%¤ ogâīi¤ 'n8ßā°ƒgŠgā ”)[Ū|%Ĩ ŠgâīiĨ 'Hßę¯Ŋgãgā ”)[Ū|%Ļ ãgâīiĻ %Hß ą÷ghā ”)[Ū|%§ hâīi§ %Hßް1hWhā ”)[Ū|%¨ Whâīi¨ %į9ߡ°kh‘hā ”)[Ū|%Š ‘hâīiŠ %+Hß`ąĨhËhā ”)[Ū|%Ē ËhâīiĒ %Hß“¯ßhiā ”)[Ūčǝ iŪ}Ͱ %âīi˛ 'Hß2ą&iYiā ”)[ŪčǏ YiŪ}Íš %âīiģ %HßHēmixiā ”xi4BßģŒi¤iā ”¤ië__n V¸B}…ÎäUÎ2ÁiŅiā ”ŅiÖinCŠi}ái9%ߡũüijIT9%ā ”ģ_évalsjâ…|cÛißÜŅ1jIjā ”Ijë__n *ĪTDßmf]jujā ”ujë__n ģcz7ß°{‰jĄjā ”Ędë__nÚxęl S˛jŊjā ”A;ęI IÎjåjā ”A;čáSI%ßU›ôj kā ” këp‹Û4á4ßŊšk3kā ” kāļÄ%ß;1BkMkā ”Mkqß4aklkā ”lkƒßl1€k•kā ”MkāļÄ%ße¤kškā ”lkāļÄ%߲Čklā ”*;ëtÎ÷Ūe—Īœ'Ū9Đ%ëmsgŅœ'áAãlŪé¤ū%ßŅ2-l8lā ”8l›ßšLlWlā ”Wl­ß3kl€lā ”8lāļÄ%ßęl¤lā ”WlāļÄ%ßÂGŗlËlā ”Ëlë__i ØĐl?8E8ßVIälīlā ”īlP8ßwommā ”m8ßŪG"m-mā ”īlßH¤mamamßęǏmŌmā ”Ōmâīit XMn38ߨŧæmņmā ”lHßî™nnā ”Žeë__n—á¸äNnIE%ëv.Nnëi.%Ū .%î:ß Čbnxnā ”xnëp‹LBRBßuĮŒnĄnā ”xnāļÄ%߲;°nĮnā ”ÄLé__nÉ,ßŪũŨnūnIT,ā ”ģ_évalsūnâ…|c¯EßÕ;o)oā ”ÄLé__fÜ%ßū?o`oIT%ā ”ģ_évals`oâ…|cŽ5ä5Uwo‚oā ”2Vß|‘oŠoā ”Ędë__nHÚxß0¸oÃoā ”pVßsŌoŨoā ”2VáŲ!öoŪž|^á9áķ!pŪž|cá9ßÅp6pā ”édë__ní‚äTZHpSpā ”2Vß*†bpzpā ”édë__nHí‚ßĖS‰pĄpā ”Ąpë__i ØĻpjBpBß`UēpÅpā ”Åp{BßüBŲpņpā ”ņpë__i Øöp‡BBße qqā ”„dßÔd$q/qā ”„dߐD>qIqā ”Iq˜B=rq! –b‚q!‘ķb%ō|q‚qZHvrqáßäČqIT›ļpĮŪwĻ ZHŪD: NqŪĀ œ'=ėq! – r!‘ķ %ķZHúqrÕ9vėqá åIrITČ­pĮZHŪwĻ Õ9ŪD: ČqŪĀ œ'=mr! –ˆ }r!‘ķˆ %ōwr}rë@vmrá9åÃrITļpĮŪwĻ ë@ŪD: IrŪĀ œ'ßfzŌręrā ”ęrë__i Øīr3C9CßŲ6ssā ”së__i Ø sPCŅ5ßm84s?sā ”?sVC=hs! –X|s!‘ķX%ķü$vs|s­DvhsácåÅsITēļpĮü$ŪwĻ ­DŪD: DsŪĀ œ'ßÄÔsęsā ”ęsëp‹’A˜Aßlūstā ”të__i ØtCŖCßŦm/t:tā ”:tŽCßËoNtYtā ”Yt‘CßSnmtxtā ”Ytß‘n‡t’tā ”’t€C}U~ᇆÕtĩRņ@āNœ­Ū L =ÕtŪÕ >Út—t—tvGËęSË4vötuā ”ußt߈u-uā ”-uë__i Ø2u~D„D߃FuQuā ”QuDߝÚeupuā ”pu Eß7n„uœuā ”’të__i Øœu†CßW¯°uģuā ”gaß•¯ĘuÕuā ”gavÛu‡ü$ëuzCá“å@v9Ęœ­‘?Õuëc@vŪô ÕuâîíŪ%âīitŽhAßÅēTv_vā ”ôWßĻēnvyvā ”ôWƒ…vë@vyváŠ˙Đv{%ŪmRå…vŪ† ĻŪmŪ:‡ ĻŪmë__f Ļ…váĀåw9Ęœ­FQ…vëc'wŪâØ'…vhAßJNw%wā ”%wËEßļL9wQwā ”Qwë__i ØVwēEĀE}+wáŧ˙{w!&fS{w[wßĶ=wšwā ”šw,7ß>ŽwÃwā ”šwāļÄ%ßd`Ōwįwā ”įwāļÄ%>7ß3`ûwxā ”įwß+ax xā ” xP7ßb4x?xā ”?xh7ßĻ/Sxjxā ”jxčģ?,¸oxâEא}0wáÚ˙”x!&–B”xtxßÕN¨xĀxā ”Āxë__i ØÅxčEîEßķyŲxäxā ”Ędß1zķxūxā ”ĘdßiP yyā ”yųEßņN,y7yā ”yß/OFyQyā ”Āx}…á´†yĩRb8āN8xŪ L =yŪÕ >”yQyQyvŸy‡ü$¯yn8áęåz9Ę8x‘?™yëczŪô ™yâîíŪ%âīitļxÔ8ßÚZz0zā ”0zë__i Ø5zF FߎIzTzā ”eß\Žcznzā ”eßn\}zˆzā ”ˆzFßöZœz§zā ”ˆzß4[ļzÁzā ”0z}Į…áá†˙zĩRķ9āNcŒŪ L =˙zŪÕ >{ÁzÁzv{‡ü${á9áæt{9ĘcŒ‘? {ëct{Ūô  {âîíŪ%âīitáŒj:ß< ˆ{“{ā ”ŠVß ĸ{­{ā ”ŠVáDæÆ{Ū[—KzCá[æß{Ū[—PzCß?&î{ų{ā ”^Wßu'||ā ”^Wëi”%ßū-|8|ā ”ŠVßâ%G|R|ā ”^Wá„áˇ|ŪčĒ ˇ|âîĪf %âīi %âî[— ŧ|âīj %âîž| Á|H+Hį9ƒŌ|Û9vÆ|áø˙}{%ZRåŌ|Ū† ρZŪ:‡ ρZë__f ĻŌ|ßÛV,}O}ā ”O}é__p ¯UčÎK T} ::á4X’}I_TpÛ9é__aMŧ’}é__pMŧ9WčĀaMŧ—}(::ßOZĢ}ļ}ā ”ļ}3FßģXĘ}â}ā ”â}ë__i Øį}"F(Fßä]û}~ā ”~é__p ¸\čÎK #~Ž:ˆ:á=_a~I_Tp%é__aMŧa~é__pMŧB^čĀaMŧf~Ŧ:ˆ:ßXaz~…~ā ”…~PFßÄ_™~ą~ā ”ą~ë__i Øļ~?FEFß…|Ę~â~ā ”â~ë__i Øį~\FbFßtÄû~ā ”!fß6Ä ā ”!fßyx/Rā ”Ré__p MwčÎK WÁBģBáŌy•I_Tp;é__aMŧ•é__pMŧ×xčĀaMŧšßBģBßú{Žšā ”šDCß"cÍđā ”đé__p öačÎK õs@m@á{d3€I_TpV@é__aMŧ3€é__pMŧ€cčĀaMŧ8€‘@m@ß–fL€W€ā ”W€ËCßek€ƒ€ā ”ƒ€ë__i ؈€ēCĀCß5Ŗœ€§€ā ”§€Á@ßÛ¨ģ€Ō€ā ”Ō€é__x •¨×Cß÷ĸæ€ņ€ā ”§€ä]ļԁā ”…FÂAßfq'Jā ”Jé__p :pčÎK OČAÂAáŋrI_Tp)ļé__aMŧé__pMŧÄqčĀaMŧ’æAÂAßÚtρąā ”ąŠFßFsŁŨā ”Ũë__i ØâyFFß!gö‚ā ”‚ë__i Ø‚–FœFßTŖ'‚2‚ā ”2‚ß@ßŖF‚Q‚ā ”2‚}Z~á*q‚!&˛kq‚Q‚ß+j…‚¨‚ā ”¨‚é__p ˙hčÎK ­‚AAá„kë‚I_Tpë@é__aMŧë‚é__pMŧ‰jčĀaMŧđ‚&AAߟeƒƒā ”ƒ€ßeƒ)ƒā ”W€ß,ū?ƒVƒIT%ā ”ģ_čoF•VƒDߨjƒƒā ”ƒé__p |~čÎK ’ƒDDáЃI_Tp°*é__aMŧЃé__pMŧ€čĀaMŧՃ$DDßĪ>éƒ „ā ”šwé__p Ŗ=čÎK  „אáI@J„I_Tpé__aMŧJ„é__pMŧ-?čĀaMŧO„J7אßdBc„n„ā ”n„ĘFßĐ@‚„š„ā ”š„ë__i ØŸ„šFŋF}ŐáHæ„I_TpŐé__a(Ļæ„é__b(Ļë„âæ'‡(¯Å¤„¤„áđ…… …J7J7áí?4…é__aMĮ4…é__bMĮ9…J7J7ßZaM…d…ā ” xé__xed…\7ßŋax…ƒ…ā ”?x}ĩūágĒ…~™|Eé__f .aRßåüš…ąā ”Já…ī…Ų!%ņ(ŪĘnJī…ˑß҃††ā ”†āļÄ%ŅDßWÖ,†A†ā ”A†āļÄ%ãDá…Û_†ë__x)(>ØáOÛx†ë__x) >Øßî准Ÿ†ā ”Ÿ†ë__x)ÍåyEßŧÚŗ†ž†ā ”ž†EßåXŌ†ę†ā ”ę†ë__x)ÄX¯6ß9Rū† ‡ā ” ‡[6ßwR‡(‡ā ” ‡á­I‡I_Tp0‘é__r(/I‡Ņ5ß+J]‡h‡ā ”h‡6ߏđ|‡”‡ā ””‡ë__x@B™‡GאßQ1­‡Ŋ‡ā ”MkŊ‡wßJ҇č‡ā ”lké__a8s臉ß.ü‡ˆā ”“BäSˆ.ˆā ”.ˆāļÄ%šßBˆWˆā ”ÅFāļÄ%ät˛Íiˆ~ˆā ”*;āļÄ%ßwĢˆĸˆā ”ę_āļÄ%ß°Įąˆŧˆā ”ŧˆ^BßÖJЈķˆā ”ķˆé__p ĒIčÎK øˆt8n8á/L6‰I_Tpëé__aMŧ6‰é__pMŧ4KčĀaMŧ;‰’8n8ßßQO‰r‰ā ”r‰é__p ŗPčÎK w‰:949á8Sĩ‰I_Tpģé__aMŧĩ‰é__pMŧ=RčĀaMŧē‰X949ß/Ήå‰ā ”å‰čŖ¨,ā ĩ×Eä~ĩZü‰Šā ”dāļÄ%ß‚Ė Š8Šā ”8ŠŪ-B°=ŠšHL;äŽ)ôTŠ_Šā ”%WäuļŌqІŠā ”…FāļÄ%ߊq•ŠŦŠā ”Jé__p …:pá8rЊé__aMŋЊé__pMŋÄqæAߐŧäŠīŠā ”¤iáWã‹ëfdũ%ß 0‹-‹ā ”-‹čŖ¨,āûÍŗFänÎ2D‹Y‹ā ”ŅiāļÄ%ß0h‹‹ā ”ČSérhs>‹95ę럃•‹¯‹ā ”°[âæ&„0‘ߝž‹ɋā ”ČSę ;ڋī‹ā ”ČSāļÄ%äxŸ'Œ Œā ”°[ßežŒ&Œā ”°[ߊ5Œ@Œā ”°[ámãXŒëfpõĄDß3gŒŒŒā ”.ˆŪžŒ°*ë__aŒŒ‰đk ß{ §Œ˛Œā ”ÅFß7'ÁŒˌā ”^WßģĖیķŒā ”8ŠŪÜ/ļü$ßRE ā ”VLßũ'ā ”…LvËßÔ<Sā ”Sč†öbø8'áS|é__a!w^7é__b!w^7ßĄš‹Ąā ” këp~Û4ámšé__n$Ã%á‚īŲ!%ņ(čĘn$Đīé__f$ĐlFˑß(ŽŽā ”“Bßõ6Ž(Žā ”?sáhŨ?ŽëcŌ %ß37NŽYŽā ”sßfhŽsŽā ”“B}P~ᇹŽĩRœ'āNŪ L =ąŽŪÕ >ļŽsŽsŽßÎʎâŽā ”ÅFë__sžœ'ßĒņŽ ā ”ÅFŪß1ĩ אßį2-ā ”8l-ĄßĪAXā ”Wlé__a8sXŗßG1lwā ”ŋIäx ‰žā ”žāļÄ%õß;E˛Įā ”ĮāļÄ%Á7ßlkۏđā ”đāļÄ%Ķ7áÄ=!iž7ž7ž7áŽA!iž7č†zž7č:‡zž7áÍ|!iž7I_Tp¤7膔ž7č:‡”ž7|ß7ß JĨā ”ķˆāļÄ%ßÉu´ɐā ”ɐāļÄ%†8äˆŌ˜āëā ”ųJßŌĄú‘ā ”‘œ5ßņĄ‘$‘ā ”‘árĸ=‘ësam g=‘–5áŒĸ…‘Ūi9 s…‘Ūv9 tŠ‘âî˙Ũ uĄîŪ vĄ–5–5ß/ĸž‘Б⠔‘ßâŖ¸‘Ñā ”Ñŋ5ߤבâ‘ā ”ÑႤû‘ësam gû‘š5ᜤC’Ūi9 sC’Ūv9 tH’âî˙Ũ u/ŖîŪ v/Ŗš5š5ß?¤\’g’ā ”ÑßQv’‹’ā ”r‰āļÄ%ßÜš’¯’ā ”¯’āļÄ%L9ßúJÒڒā ”ķˆé__p …ĒIá¨Kū’é__aMŋū’é__pMŋ4K’8ßčS““ā ”ÅpßAĩ,“D“ā ”D“Ūš bI“@49á;‡†“ĩR"9āNK‚Ū L †“ŪÕ ‹“[w[wß-/¨“ŋ“ĩRfSā ”å‰čįv,æfSß&TΓŲ“ā ”Ąp}„0ęT/,Üđ“”⠔剔ؓęl/,Ü”+”ā ”å‰āļÄ%ßR:”Q”ā ”r‰é__p …ŗPáąRu”é__aMŋu”é__pMŋ=RX9ßV‰”ž”ā ”O}āļÄ%ßô‰­””ā ””āļÄ%:áã=æ”!ií9í9í9áú•!ií9č†zí9č:‡zí9áN•!ií9I_TpÛ9膔í9č:‡”í9N•(:ß]b•w•ā ”~āļÄ%ß”†•›•ā ”›•āļÄ% :á>ŋ•!i|:|:|:áFė•!i|:č†z|:č:‡z|:áe'–!i|:I_Tp%膔|:č:‡”|:'–Ŧ:ß˙V;–R–ā ”O}é__p …¯Uá­Wv–é__aMŋv–é__pMŋ9W(:ß^Š–Ą–ā ”~é__p …¸\áļ^Ŗé__aMŋŖé__pMŋB^Ŧ:ߎwŲ–î–ā ”RāļÄ%ß Āũ–—ā ”—āļÄ%ĶBá!>6—!i¤B¤B¤Bá’c—!i¤Bč†z¤Bč:‡z¤Báąž—!i¤BI_Tp;膔¤Bč:‡”¤Bž—ßBß~˛—Ŋ—ā ”Ŋ—mFߥ|Ņ—ܗā ”Ŋ—ßß|ë—ö—ā ”â~}օáh‡4˜ĩRĒBāN{ÂŪ L =4˜ŪÕ >9˜ö—ö—ƒJ˜;v>˜áŪ•˜{%,|RåJ˜Ū† Ļ,|Ū:‡ Ļ,|ë__f ĻJ˜ßx¤˜ģ˜ā ”Ré__p …MwáKyߘé__aMŋߘé__pMŋ×xßBßīŖķ˜ū˜ā ”2‚ßFc ™$™ā ”đé__p …öaáôcH™é__aMŋH™é__pMŋ€c‘@ßWb\™q™ā ”đāļÄ%ßėž€™•™ā ”•™āļÄ%…@á@>š™!iP@P@P@áæ™!iP@č†zP@č:‡zP@á/!š!iP@I_TpV@膔P@č:‡”P@!š‘@ß`i5šJšā ”¨‚āļÄ%ß-ĢYšnšā ”nšāļÄ%Aá_>’š!iå@å@å@á\ŋš!iå@č†zå@č:‡zå@á{úš!iå@I_Tpë@膔å@č:‡”å@úš&Aßĩh››ā ”›§Fß=g-›8›ā ”›ß{gG›R›ā ”‚}ā…ᕇ›ĩR\@āN[ĄŪ L =›ŪÕ >•›R›R›ƒĻ›V@vš›á¨ņ›{%ČfRåϛۆ ĻČfŪ:‡ ĻČfë__f ĻĻ›ß4lœ œā ”:tß1Μ2œā ”2œŪ[—9zCtCá‡oœĩRå@āNœ­Ū L oœŪÕ tœQ‚Q‚ßrlˆœ“œā ”t}‰0ę#0,Üǜēœā ”-‹ēœ“œę;0,ÜМåœā ”-‹āļÄ%ßOjôœ ā ”¨‚é__p …˙háũj/é__aMŋ/é__pMŋ‰j&AߊCNā ”NãC}_~áĩRP@āN[ĄŪ L /‘ŪÕ 0–SSáÚʝĩRŠdë__x $ʝë__y %ĪŨCŨCß/Šãũā ”Nâæ'‡ ŖŠdßkŠ žžā ”Ō€áūFžĩRŠdë__x 0Fžë__y 1KžŨCŨCßŨ~_žtžā ”ƒāļÄ%ßĖƒž˜žā ”˜žāļÄ%Dá~>ŧž!i5‘5‘5‘á"éž!i5‘č†z5‘č:‡z5‘áA$Ÿ!i5‘I_Tp°*膔5‘č:‡”5‘$Ÿ$DßŅ8ŸCŸā ”CŸrDßĖWŸnŸā ”ƒé__p …|~áz€’Ÿé__aMŋ’Ÿé__pMŋ€$Dßķ>ϟŊŸā ”šwé__p …Ŗ=áĄ?áŸé__aMŋáŸé__pMŋ-?J7ájÛ˙Ÿë__x)$KØá Û ë__x),KØßXä' > ā ”> é__x)Ŋ8äÖFß#ßR ] ā ”puán| I_Tp%|  ‰‰ß E•   ā ”Įß;k¯ ē ā ”đßíkÉ Ô ā ”Ô å7ߨlč ķ ā ”ķ ũ7ß•nĄĄā ”mßÄE!Ą=Ąā ”Įé__p mÚDÎDášFmĄé__aM¸mĄé__pM¸dFé__nM¸Fß7߁mĄĻĄā ”ķ é__pŽOlé__nŽđôę:lOˇĄĖĄā ”Ô āļÄ%߁lÛĄæĄā ”ķ ßEmõĄ ĸā ”ķ āļÄ%ßoĸ.ĸā ”māļÄ%ßÚI=ĸHĸā ”ķˆß˜uWĸbĸā ”ɐßJvqĸ|ĸā ”|ĸ˜8ß5wĸ›ĸā ”›ĸ°8ß”J¯ĸËĸā ”ķˆé__p mĒIžIá‰Kûĸé__aM¸ûĸé__pM¸4Ké__nM¸`K’8ßŪwŖ4Ŗā ”›ĸé__pŽŦvé__nŽđôę—vOEŖZŖā ”|ĸāļÄ%á‘{ŖI_Tpëé__r(/{Ŗh8á¯ĄŖI_Tpëč ]\\8áÍđÎŖ!i\8č†d\8č:‡d\8áÉũŖ!i\8č†z\8č:‡z\8ôáč8¤!i\8I_Tpë膔\8č:‡”\88¤’8ßŪvL¤W¤ā ”›ĸßĸwf¤{¤ā ”›ĸāļÄ%ßĘ~Фĸ¤ā ”ĸ¤Ūp÷œzxÂ8ßî}ļ¤Á¤ā ”ĸ¤ßãPФÛ¤ā ”r‰ßĢę¤õ¤ā ”¯’ß]€ĨĨā ”Ĩ^9ßH#Ĩ.Ĩā ”.Ĩv9ߝQBĨ^Ĩā ”r‰é__p mŗP§Pá’RŽĨé__aM¸ŽĨé__pM¸=Ré__nM¸iRX9ßņĸĨĮĨā ”.Ĩé__pŽŋ€é__nŽđôęĒ€OØĨíĨā ”ĨāļÄ%áĻI_Tpģé__r(/Ļ.9á34ĻI_Tpģč ]\"9áėđaĻ!i"9č†d"9č:‡d"9áMĻ!i"9č†z"9č:‡z"9ôálËĻ!i"9I_Tpģ膔"9č:‡”"9ËĻX9ßņ€ßĻęĻā ”.Ĩßĩųϧ⠔.ĨāļÄ%ßŨˆ§5§ā ”5§Ūp÷œ‚ˆ9߈I§T§ā ”5§áræЧ9ĘcŒFQŌ|ëc'ЧŪâØ'Ō|j:á„ņ§§čįv4Ô\8áīņŋ§čįv4Ô"9ߍ>Χę§ā ”šwé__p mŖ=—=á‚?¨é__aM¸¨é__pM¸-?é__nM¸Y?J7ßŋb.¨S¨ā ”?xé__pŽaé__nŽđôęxaOd¨y¨ā ” xāļÄ%ᙚ¨I_Tpé__r(/š¨ŨáˇI_Tpč ]\ŐáŅī¨!iŐč†zŐč:‡zŐôáđ*Š!iŐI_Tp膔Őč:‡”Ő*ŠJ7߃b>ŠSŠā ”?xāļÄ%ßĢibŠzŠā ”ujŪp÷œ[cßé=‰Š™Šā ”šw™Š27ßI`­ŠÄŠā ”įwé__a8sÄŠD7ß@aØŠīŠā ” xé__aZīŠV7ßCĒĒā ”IqáDĒI_T1I_T2é__pOŐčģ?ODĒאßVCXĒcĒā ”ņpማĒĩRŋāNcŪ L =›ĒŪÕ > ĒtxtxáEöĒCI–B!iŐč†0k–Bč:‡0k–BčD0lŐâæDc0s÷$ávIĢCI–B!iŐI_TpŪ†0–BŪ:‡0–BŪD0ŐIĢJ7áŖĢŪƒՋŪÜՋë__nđáIˆšĢĩRŋāNcŪ L šĢŪÕ žĢtxtxßĀ/ÛĢōĢĩR–Bā ”jxčįv,ž–BáŽ0Ŧ§y' čÎK,ÄŦאáļZŦĩR–BrÍŽ/č† Ÿ–Bč:‡ Ÿ–BčŖ¨ ŸŽ/ßßUiŦtŦā ”O}ßɃŦŽŦā ””ßuŠŦ¨Ŧā ”¨Ŧ.:ß`‹ŧŦĮŦā ”ĮŦF:ß™VÛŦ÷Ŧā ”O}é__p m¯UŖUáŽW'­é__aM¸'­é__pM¸9Wé__nM¸eW(:ß Œ;­`­ā ”ĮŦé__pŽ×Šé__nŽđôęŠOq­†­ā ”¨ŦāļÄ%ß ‹•­ ­ā ”ĮŦß͋¯­Ä­ā ”ĮŦāļÄ%ßč\Ķ­Ū­ā ”~ß֓í­ø­ā ”›•߈”ŽŽā ”Ž˛:ßs•&Ž1Žā ”1ŽĘ:ßĸ]EŽaŽā ”~é__p m¸\Ŧ\á—^‘Žé__aM¸‘Žé__pM¸B^é__nM¸n^Ŧ:ß–ĨŽĘŽā ”1Žé__pŽę”é__nŽđôęՔOÛŽđŽā ”ŽāļÄ%ß•˙Ž ¯ā ”1Žß╝.¯ā ”1ŽāļÄ%áøķF¯čįv4Ôí9ácô^¯čįv4Ô|:ß}wm¯x¯ā ”RßÛŋ‡¯’¯ā ”—ßĀĄ¯Ŧ¯ā ”Ŧ¯åBßxÁ˯ā ”˯ũBß5Ã߯ę¯ā ”Mf߯Žų¯°ā ”)[ß7x°/°ā ”Ré__p mMwAwá,y_°é__aM¸_°é__pM¸×xé__nM¸yßBß!Âs°˜°ā ”˯é__pŽīĀé__nŽđôęÚĀOаž°ā ”Ŧ¯āļÄ%ß!ÁͰذā ”˯ßåÁį°ü°ā ”˯āļÄ%áœæ2ą9Ę{ÂFQJ˜ëc'2ąŪâØ'J˜!CßŗÃFą[ąā ”MfāļÄ%áÎôsąčįv4Ô¤Bá9õ‹ąčįv4Ôzá¤õŖąčįv4ÔP@ßāb˛ąÎąā ”đé__p möaęaáÕcūąé__aM¸ūąé__pM¸€cé__nM¸Ŧc‘@ߥ˛7˛ā ”7˛é__pŽĪŸé__nŽđô¯@ęēŸOM˛b˛ā ”b˛āļÄ%—@ß v˛˛ā ”7˛ßÅ ˛Ĩ˛ā ”7˛āļÄ%áöŊ˛čįv4Ô°Aß$q˞č˛ā ”Jé__p m:p.párŗé__aM¸ŗé__pM¸Äqé__nM¸đqæAßZˇ,ŗQŗā ”Qŗé__pŽ(ļé__nŽđôBß&beŗpŗā ”đßģžŗŠŗā ”•™ßmŸ™ŗ¤ŗā ”b˛ßX ŗŗžŗā ”7˛ß/iÍŗØŗā ”¨‚ßüĒįŗōŗā ”nšßŽĢ´ ´ā ” ´,Aß™Ŧ ´+´ā ”+´DAßéi?´[´ā ”¨‚é__p m˙hķháŪj‹´é__aM¸‹´é__pM¸‰jé__nM¸ĩj&AßB­Ÿ´Ä´ā ”+´é__pŽŦé__nŽđôęûĢOÕ´ę´ā ” ´āļÄ%ßBŦų´ĩā ”+´ß­ĩ(ĩā ”+´āļÄ%ß›p7ĩLĩā ”JāļÄ%ßEĩ[ĩpĩā ”pĩāļÄ%ÚAęļO†ĩ›ĩā ”›ĩāļÄ%ėAázö¸ĩčįv4Ôå@ßŦ~ĮĩŌĩā ”ƒßčËáĩėĩā ”˜žßšĖûĩļā ”ļ*Dß…Íļ%ļā ”%ļBDßf9ļUļā ”ƒé__p m|~p~á[€…ļé__aM¸…ļé__pM¸€é__nM¸2€$Dß.Ιļžļā ”%ļé__pŽüĖé__nŽđôęįĖOĪļäļā ”ļāļÄ%ß.Íķļūļā ”%ļßōÍ ˇ"ˇā ”%ļāļÄ%ß$Đ1ˇ<ˇā ”IjߤKˇVˇā ”Qußâeˇpˇā ”-ußbСЎā ”Ij}SƒávˆȡĩR5‘āNˆÎŪ L =ȡŪÕ >͡ЎЎßĀĪáˇöˇā ”IjāļÄ%áåö¸čįv4Ô5‘áP÷&¸čįv4ÔŐß ƒ5¸@¸ā ”†ß&ÖO¸Z¸ā ”A†ßË×i¸t¸ā ”t¸īDߕ׈¸“¸ā ”t¸ßkŪĸ¸­¸ā ”pußūØŧ¸Į¸ā ”ž†ßÃ`߸ī¸ōáÖā ”įwī¸éDßŲššā ”ž†áį(š!&œ'(šŅ5á_š_Åœ'č†-Zœ'č:‡-Zœ'<áŖˆ€šŲĸ'č3ĘN–œ'á-­šCIœ'č†-rœ'č:‡-rœ'áé āšë__p—°*ŪY'—œ'ŪÂO—œ'á€FēâXœ'č‰$%|œ'č4Ļ%|œ'é__a%|Fēõ<ēæ,%‡ã__r%ŠËâXœ'‰áąŽē›œ'Ū‰$Ëœ'Ū4ĻËœ'ë__aĖŽēėô‰áãŅē›œ'Ū‰$áœ'Ū4Ļáœ'ë__aáŅēô‰ßîēģCIœ'ā ”ÅFč‰$%äœ'č4Ļ%äœ'é__a%ä쉐ßeu1ģIģā ”Iģë__i ØNģ.G4Gß­šbģmģā ”xißoš|ģ‡ģā ”xiácÜģv\8{\8Ū†\8Ū:‡\8ŪD\8âī__níáPūģĩR\8Ūįv\8áo]ŧYŗ{ü$v\8{\8Ū†I\8Ū:‡I\8ŪDI\8âî8SN÷$áĢŧĩR\8Ūįv!\8áĘÎŧYŗ{ü$v\8{\8Ū†[\8Ū:‡[\8ŪD[\8߸JŨŧčŧā ”čŧ€8áÂKŊé__aMÂŊŒ8ßûvŊ$Ŋā ”$Ŋļ8ßëz8ŊCŊā ”ĘdápŊI_Tp9%é__aŲpŊé__bŲuŊÛiÛißlJ‰ŊĨŊā ”ķˆé__n cžI]ákKÉŊé__aMĩÉŊé__nMĩ`K’8ßŧwŨŊöŊā ”›ĸé__n§đôäaĪžžā ”vBž49á)?žĩR"9Ūįv"9áHžžYŗ{ü$v"9{"9Ū†I"9Ū:‡I"9ŪDI"9âî8SN÷$á„ĀžĩR"9Ūįv!"9áŖŋYŗ{ü$v"9{"9Ū†["9Ū:‡["9ŪD["9ßÁQŋ)ŋā ”)ŋF9áËRFŋé__aMÂFŋR9߁Zŋeŋā ”eŋ|9ßū„yŋ„ŋā ”édßuQ“ŋ¯ŋā ”r‰é__n c§P]átRĶŋé__aMĩĶŋé__nMĩiRX9ß΁įŋĀā ”.Ĩé__n§đô}%‘áß Ā!&*‘ ĀĀáũWĀ_Å*‘č†-Z*‘č:‡-Z*‘<á% yĀĩRí9Ūįví9áD ØĀYŗ{ü$ví9{í9Ū†Ií9Ū:‡Ií9ŪDIí9âî8SN÷$ဠúĀĩRí9Ūįv!í9០IÁYŗ{ü$ví9{í9Ū†[í9Ū:‡[í9ŪD[í9ßŊVXÁcÁā ”cÁ:áĮW€Áé__aM€Á":ß&‹”ÁŸÁā ”ŸÁL:ߏŗÁžÁā ”eßqVÍÁéÁā ”O}é__n cŖU]ápW Âé__aMĩ Âé__nMĩeW(:ßį‹!Â:Âā ”ĮŦé__n§đôáÛ \ÂĩR|:Ūįv|:áú ģÂYŗ{ü$v|:{|:Ū†I|:Ū:‡I|:ŪDI|:âî8SN÷$á6 ŨÂĩR|:Ūįv!|:áU ,ÃYŗ{ü$v|:{|:Ū†[|:Ū:‡[|:ŪD[|:߯];ÃFÃā ”FÚ:áĐ^cÃé__aMÂcÃĻ:ß9•wÂÃā ”‚ÃĐ:ß)™–ÃĄÃā ”Žeßz]°ÃĖÃā ”~é__n cŦ\]áy^đÃé__aMĩđÃé__nMĩn^Ŧ:ßú•ÄÄā ”1Žé__n§đôá‘ ?ÄĩR¤BŪįv¤Bá° žÄYŗ{ü$v¤B{¤BŪ†I¤BŪ:‡I¤BŪDI¤Bâî8SN÷$áė ĀÄĩR¤BŪįv!¤Bá ÅYŗ{ü$v¤B{¤BŪ†[¤BŪ:‡[¤BŪD[¤Bß[xÅ)Åā ”)ÅÍBáeyFÅé__aMÂFÅŲBß>ÁZÅeÅā ”eÅCß.ÅyÅ„Åā ”!fßx“ůÅā ”Ré__n cAw]áyĶÅé__aMĩĶÅé__nMĩyßBß˙ÁįÅÆā ”˯é__n§đôáųÆčįv4Üzá ûdÆI_Tp;Ū†qĒBŪ:‡qĒBŪDq¤BâîŽ/xG áL †ÆĩRzŪįvzák åÆYŗ{ü$I_II¤BI_OI¤BŪ†¤BŪ:‡¤BŪD¤Bâî8S†÷$á§ ĮĩRzŪįv!záÆ VĮYŗ{ü$I_IIzI_OIzŪ†ŽzŪ:‡ŽzŪDŽzßUÄeĮpĮā ”Mfߎ{Į—Įā ”šë__n (z}K~áÁˆÕĮĩR¤BāN{ÂŪ L =ÕĮŪÕ >ÚĮ—Į—Įá $ČI_IIzI_OIzŪ†ČzŪ:‡ČzŪDČzßÄ3Č>Čā ”MfßÄĮMČeČā ”MfŪâĸ}íÂá4 ‡ČĩRP@ŪįvP@áS æČYŗ{ü$vP@{P@Ū†IP@Ū:‡IP@ŪDIP@âî8SN÷$ᏠÉĩRP@Ūįv!P@ᎠWÉYŗ{ü$vP@{P@Ū†[P@Ū:‡[P@ŪD[P@ßcfÉqÉā ”qÉ@ádŽÉé__aMŽÉ‹@ß ĸÉ­Éā ”­Éĩ@ߤÁÉĖÉā ”2‚߸bÛÉ÷Éā ”đé__n cęa]áˇcĘé__aMĩĘé__nMĩŦc‘@ßß /ĘHĘā ”7˛é__n§đôäļŌZĘjĘā ”…FjĘÂAáę ‘ĘĩR°AŪįv°Aá đĘYŗ{ü$v°A{°AŪ†I°AŪ:‡I°AŪDI°Aâî8SN÷$áE ËĩR°AŪįv!°Aád aËYŗ{ü$v°A{°AŪ†[°AŪ:‡[°AŪD[°AßHqpË{Ëā ”{ËÔAßüpËĢËā ”Jé__n c.p]áûqĪËé__aMĩĪËé__nMĩđqæAß8ˇãËüËā ”Qŗé__n§đôáRrĖé__aMÂĖāAßwļ(Ė3Ėā ”3Ė BßgēGĖRĖā ”xiá  sĖI_Tp)ļé__r(/sĖŧAáž ™ĖI_Tp)ļč ]\°AáØ ČĖ!i°Ač†z°Ač:‡z°Aôá÷ Í!i°AI_Tp)ļ膔°Ač:‡”°AÍæAßZļÍ"Íā ”Qŗßˇ1ÍFÍā ”QŗāļÄ%äÜÅØXÍmÍā ”mÍāļÄ%]GßjpÍŒÍā ”Jßĩ›ÍĻÍā ”pĩ߯ĩĩÍĀÍā ”›ĩßąļĪÍÚÍā ”Qŗá$üÍĩRå@Ūįvå@áC[ÎYŗ{ü$vå@{å@Ū†Iå@Ū:‡Iå@ŪDIå@âî8SN÷$á}ÎĩRå@Ūįv!å@ážĖÎYŗ{ü$vå@{å@Ū†[å@Ū:‡[å@ŪD[å@ß jÛÎæÎā ”æÎAákĪé__aMÂĪ Aß_ŦĪ"Īā ”"ĪJAßO°6ĪAĪā ”gaßÁiPĪlĪā ”¨‚é__n cķh]áĀjĪé__aMĩĪé__nMĩĩj&Aß ­¤ĪŊĪā ”+´é__n§đôáÚßĪĩR5‘Ūįv5‘áų>ĐYŗ{ü$v5‘{5‘Ū†I5‘Ū:‡I5‘ŪDI5‘âî8SN÷$á5`ĐĩR5‘Ūįv!5‘áT¯ĐYŗ{ü$v5‘{5‘Ū†[5‘Ū:‡[5‘ŪD[5‘ߊžĐÉĐā ”ÉĐDᔀæĐé__aMÂæĐDßKÍúĐŅā ”ŅHDß;ŅŅ$Ņā ”CŸß>3ŅOŅā ”ƒé__n cp~]á=€sŅé__aMĩsŅé__nMĩ2€$Dß Î‡Ņ Ņā ”%ļé__n§đôá•õŅvŐ{ŐŪ†ŐŪ:‡ŐŪDŐâī__nĪîáŌĩRŐŪįvŐá¯vŌYŗ{ü$vŐ{ŐŪ†IŐŪ:‡IŐŪDIŐâî8SN÷$áë˜ŌĩRŐŪįv!Őá įŌYŗ{ü$vŐ{ŐŪ†[ŐŪ:‡[ŐŪD[Őßą>öŌĶā ”Ķ87ße>Ķ1Ķā ”šwé__n c—=]ád?UĶé__aMĩUĶé__nMĩY?J7ߝbiĶ‚Ķā ”?xé__n§đôßÜa‘ĶœĶā ”œĶn7áÔ?šĶé__aMÅšĶD7ßdbÍĶđĶā ”?xé__n†đé__a†đĶt7đÆæáģ?Ôé__aMÂÔD7ßĖe(Ô3Ôā ”„dáF„ÔCIŐ!iŐč†0kŐč:‡0kŐčD0lŐâæDc0s÷$áw×ÔCIŐ!iŐI_TpŪ†0ŐŪ:‡0ŐŪD0Ő×ÔJ7áˇ7ÕCIŐ!iŐĶä_Ū†0'ŐŪ:‡0(ŐŪD0)ŐŪ"0*7ÕJ7ßė@KÕVÕā ”n„ßĩdeÕpÕā ”uj}å…áÕĩRŐāNcŪ L ŽÕŪÕ ŗÕpÕpÕßķdĮÕŌÕā ”ujßĶcáÕėÕā ”uj߯hûÕÖā ”ujë__xĒÖ’7ßZ„'ÖCÖā ”†é__p mpƒdƒá.…sÖé__aM¸sÖé__pM¸ú„é__nM¸…KGßߨ‡Ö’Öā ”puß[ŲĄÖšÖā ”puë__p)„„Øß˙ÖČÖĶÖā ”ĶÖšDߟŲįÖ˙Öā ”puë__p)—„Øäæ×)Į×&×ā ”t¸āļÄ%ßÄŪ5×J×ā ”puāļÄ%á÷k×I_Tp' é__r(/k×אß×׊×ā ”Š×ŋDáÛ¨×ë__x)‘ØáģÛÁ×ë__x)0KØáî×I_Tp9%é__aÂî×é__bÂķ×ÛiÛiá .ØŪ¯`œhŪå÷œhâī__dž>á8oØŲ!%ņ(ĻņŪ L oØŪÕ tØאאßĒֈحØā ”­Øë__x@r˛Øë__y@rˇØŗDאאßÛÚËØÖØā ”puá4ÛīØë__x)‘Øß*åūØŲā ”Ųé__x)įŲÜFčFߨG.ŲQŲā ”QŲé__a*pVŲé__b*p[ŲĘ4Đ4Đ4ßëäoŲzŲā ”> áÖÛ“Ųë__x)4KØßäŨĸŲÔŲā ”ž†ë__x)ų‘Øë__y)ų‘Øë__k)úÔŲאßúÚčŲķŲā ”ž†ß€ßÚ Úā ”ž†ßįÚ4Úā ”4Úë__x)79Ú…E‘EántÚI_T1ëI_T2ëé__pO\8čģ?OtÚn8á–ĘÚCI\8!i\8č†0k\8č:‡0k\8čD0l\8âæDc0s÷$áĮÛCI\8!i\8I_TpëŪ†0\8Ū:‡0\8ŪD0\8Û’8á}ÛCI\8!i\8ĶIuŪ†0'\8Ū:‡0(\8ŪD0)\8Ū"0*}Û’8ßŌL‘ÛœÛā ”%wßÔyĢÛļÛā ”ĸ¤}Ŋ…á‰ôÛĩR\8āN8xŪ L ôÛŪÕ ųÛļÛļÛßz ÜÜā ”ĸ¤ßKģ'Ü2Üā ”lHäôŋDÜ\Üā ”QVŪ'Vŋ\Ün8äĢsÜ~Üā ”Ôaę* DÜĻÜā ”‰Hč3’DĻÜn8áGáÜI_T1ģI_T2ģé__pO"9čģ?OáÜ49áo7ŨCI"9!i"9č†0k"9č:‡0k"9čD0l"9âæDc0s÷$á ŠŨCI"9!i"9I_TpģŪ†0"9Ū:‡0"9ŪD0"9ŠŨX9áāęŨCI"9!i"9Ķ\Ū†0'"9Ū:‡0("9ŪD0)"9Ū"0*ęŨX9á 4Ūv"9{"9Ū†v"9Ū:‡v"9ŪDv"9ßįƒCŪNŪā ”5§ß%„]ŪhŪā ”5§áRžŪI_T1)ļI_T2)ļé__pO°Ačģ?OžŪÂAázôŪCI°A!i°Ač†0k°Ač:‡0k°AčD0l°AâæDc0s÷$áĢGßCI°A!i°AI_Tp)ļŪ†0°AŪ:‡0°AŪD0°AGßæAáë§ßCI°A!i°AĶÅ´Ū†0'°AŪ:‡0(°AŪD0)°AŪ"0*§ßæAá+ņßv°A{°AŪ†v°AŪ:‡v°AŪDv°Aßbsā āā ”ąßPšā%āā ”¤i}ۅáH‰cāĩR°AāN´ˇŪ L cāŪÕ hā%ā%āߎš|ā‡āā ”¤i߀p–āĻāā ”JĻāÎAß*ĩēāŅāā ”pĩé__a8sŅāāAßÛĩåāüāā ”›ĩé__aZüāōAáŪæáIC,@%á]3á!&°*3áDá{já_Ű*č†-Z°*č:‡-Z°*<áu‰‹áŲ%č3ĘN–°*áŖ¸áCI°*č†-r°*č:‡-r°*áÉ ëáë__p“°*ŪY'“°*ŪÂO“°*áCDââX°*č‰$%|°*č4Ļ%|°*é__a%|Dââæ,%‡ã__r%ŠË‰átŒâ›°*Ū‰$˰*Ū4Ļ˰*ë__aĖŒâėô‰áĻĪâ›°*Ū‰$á°*Ū4Ļá°*ë__aáĪâô‰ßĶėâãCI°*ā ”ÅFč‰$%ä°*č4Ļ%ä°*é__a%ä㉐áÆ8ãé__n$á%áÛYãŲ!%é__c$Ĩ%áųãŲ!%ņ(čĘn$˛ãé__f$˛Ęjˑá%ĘãŲ!%ņ(čĘn$îĘãé__f$î…FˑvQßãGäãīãā ”īãĪãvúã‡@‘ ä@‘ßø;ä0äā ”ÄLč<ôãv+ĻáûæjäŪq0äën%âî:‘7Ļáį€äéc…$%á+į˜äëch%áAįšäécË%éosË&7á[įØäITo]ëxJ]ß<įäūäā ”ÄLé__põ]áyį!åësX!åëosX&7Ē1á‘įIåës&ĐIåëos&Đ&7Ē1áÍĐsåŪÜ/&Osåëos&O&7אáŠįĻåITŪÜ/&Ļåëos&&7ôאáČįĶåëch$%âîÖë‘Ķå%áŪįûåësdûåëosd&7!5áöį#æës&Ū#æëos&Ū&7!5á˙ĐMæŪÜ/&OMæëos&O&7‘á耿IT, ŪÜ/&€æëos&&7ô‘ßš&”æŠæā ”ŠæāļÄ%‘ßōŊæÕæā ”ÅFë__cĮ%ß›äæīæā ”‰_äũ˛į įā ” į'5ßSū'įHįITįûā ”ģ_évalsHįâ…|c5ęzūU^įsįā ”ģ_āļÄ%đ,ä ŒįĄįā ”`āļÄ%t%ąįuy' }Ąįß“ūÍįîįITĄįā ”ģ_évalsîįâ…|cąįáV4čŲ!%ņ(ĻņŪ L 4čŪÕ œ'אt%Ičuy' }9čßēūeč†čIT9čā ”ģ_évals†čâ…|cIčßáūĄčÂčITā ”ģ_évalsÂčâ…|cאt%×čuy'}Įčß˙ķčéITĮčā ”ģ_évalséâ…|c×čđ$,}Gß/˙<é]éITGā ”ģ_évals]éâ…|c é}Ô>ßV˙~éŸéITÔ>ā ”ģ_évalsŸéâ…|cbét%´éuy'}¤éß}˙ĐéņéIT¤éā ”ģ_évalsņéâ…|c´éߤ˙ ę-ęITëā ”ģ_évals-ęâ…|cn8t%Bęuy' }2ęßË˙^ęęIT2ęā ”ģ_évalsęâ…|cBę}ģßō˙ ęÁęITģā ”ģ_évalsÁęâ…|c„ęt%Öęuy'}ÆęßōęëITÆęā ”ģ_évalsëâ…|cÖęt%(ëuy'}ëß@DëeëITëā ”ģ_évalseëâ…|c(ët%zëuy'}jëßg–ëˇëITjëā ”ģ_évalsˇëâ…|czët%Ėëuy'}ŧëߎčë ėITŧëā ”ģ_évals ėâ…|cĖët%ėuy'}ėßĩ:ė[ėITėā ”ģ_évals[ėâ…|cėŨOŦ'ą%€ėë__x'ą%t%ėuy' }€ėßÜŦėÍėIT€ėā ”ģ_évalsÍėâ…|cėt%âėuy'}ŌėßūėíITŌėā ”ģ_évalsíâ…|câėt%4íuy'}$íß*PíqíIT$íā ”ģ_évalsqíâ…|c4íáņ"Ĩí–Ū\uâĨíŪq‡ãĒíאאę<ŸĖĀíÚíā ”°[âæ(oĶ™âßéíîā ”“BŪp÷Dhá-čîëch%áCč2îŪˇ|ŸŽßn¸AîLîā ”¤iäšČ1^îiîā ”…XßYĮxîŽîā ”xnëp~LBߎ—î˛îā ”ÚeāļÄ%ß›ÁîÖîā ”eāļÄ%߸Ŧåîúîā ”úîāļÄ%ž9áVč5ī9Ę[ĄFQĻ›ëc'5īŪâØ'Ļ›Ķ@ßoÃIī^īā ”ęsāļÄ%ß:Âmī‚īā ”‚īāļÄ%zAä í ™īŽīā ”ÔaāļÄ%ßÔŽŊīŌīā ”“aāļÄ%ß“ĸáīöīā ”§€āļÄ%äŊܸđđā ”đāļÄ%Häé˜84đ?đā ”ā1ßōxNđYđā ”ĸ¤ßƒhđsđā ”5§ßœŦ‚đ˜đā ”úîëp~ŋß§đ˛đā ”eß0—ÁđĖđā ”ÚeäžŪđéđā ”QVßöÚøđņā ”‡WßÜņņā ”đßHĀ,ņ7ņā ”%Kß,ĀFņ^ņā ”%KŪÜ/Ú^ņ2@ß+Árņ}ņā ”}ņD@ßJÁ‘ņœņā ”}ņß ÁĢņļņā ”ļņ,@ßiÁĘņâņā ”ļņŪÜ/Ôâņ2@ߝ™öņōā ”ōŪ,…Č1å1ßš™"ō7ōā ”ōāļÄ%ß•¸Fōaōā ”lHâîˇŦ€čጝōI_Tp%é__a(Ļōé__b(Ļĸōâæ'‡(¯%‚:‚:áŒčŌōIE%ŪEVLß6ëvLÜ:ßŋáōėōā ”lHßu"ûōķā ”÷@ŪEVŸ ß6á0,,ķŪæôÄ ÷ß`ā;ķSķā ”ųVŪ3’ß Sķn8t%hķuy' }XķßQ„ķĨķITXķā ”ģ_évalsĨķâ…|chķt%ēķuy'}ĒķßxÖķ÷ķITĒķā ”ģ_évals÷ķâ…|cēķt% ôuy'$}üķߟ(ôIôITüķā ”ģ_évalsIôâ…|c ôt%^ôuy'?}Nô߯zô›ôITNôā ”ģ_évals›ôâ…|c^ôt%°ôuy'} ôßíĖôíôIT ôā ”ģ_évalsíôâ…|c°ôt%õuy'>}ōôßõ?õITōôā ”ģ_évals?õâ…|cõt%Tõuy'=}Dõß;põ‘õITDõā ”ģ_évals‘õâ…|cTõt%Ļõuy'C}–õßbÂõãõIT–õā ”ģ_évalsãõâ…|cĻõßī÷õöā ”2Vß[ ööā ”ŠVß&+ö6öā ”^WáG,OöŪRŧ %ßÚ&^öiöā ”^Wá^,‚öŪĖ;ˇ %ß'‘öœöā ”^Wß &Ģöļöā ”^Wß^&ÅöĐöā ”^W}i'߉ėö ÷ITi'ā ”ģ_évals ÷â…|cĐöß"!÷,÷ā ”õ`áģŨE÷ëstrā E÷Ē1t%Z÷uy'˙}J÷ß°v÷—÷ITJ÷ā ”ģ_évals—÷â…|cZ÷áƒãÎ÷ëfd÷%ëbuf÷ŽŪíŪ÷9%t%Ū÷uy'}Î÷ß×ú÷øITÎ÷ā ”ģ_évalsøâ…|cŪ÷đĢčt%7øuy'}'øßūSøtøIT'øā ”ģ_évalstøâ…|c7øt%‰øuy'.}yøß%ĨøÆøITyøā ”ģ_évalsÆøâ…|c‰øt%Ûøuy'2}ËøßL÷øųITËøā ”ģ_évalsųâ…|cÛøá§6ųŪ-Bc6ųĒ1t%Kųuy'4};ųßsgųˆųIT;ųā ”ģ_évalsˆųâ…|cKų}t“ßšŠųĘųITt“ā ”ģ_évalsĘųâ…|cųt%ßųuy'&}ĪųßÁûųúITĪųā ”ģ_évalsúâ…|cßųt%1úuy'1}!úßčMúnúIT!úā ”ģ_évalsnúâ…|c1ú}0ßú°úIT0ā ”ģ_évals°úâ…|csút%Åúuy'"}ĩúß6áúûITĩúā ”ģ_évalsûâ…|cÅút%ûuy'(}ûß]3ûTûITûā ”ģ_évalsTûâ…|cût%iûuy'}Yûß„…ûĻûITYûā ”ģ_évalsĻûâ…|ciût%ģûuy'}ĢûßĢ×ûøûITĢûā ”ģ_évalsøûâ…|cģû}ßŌü:üITā ”ģ_évals:üâ…|cũûßf%NüYüā ”^Wß!hü€üā ”÷@ŪČBDü$ßŊ üšüā ”÷@áˇčÍüŪ\%ŪŪ\%ŪīÆ\%t%Ũüuy'}ÍüßųųüũITÍüā ”ģ_évalsũâ…|cŨüá×č7ũëch˜%đu,đíčßXĄTũjũā ”jũëx oũ…5‹5ß><ƒũšũā ”ÄLé__fāU%ßhŖŠũŋũā ”ŋũëx Äũ¨5Ž5ß9(Øũãũā ”ŋIß 1ōũũũā ”ŋIäãüĄū'ūā ”ģ_Ū)yĄ'ū!5á#[ū–, Ū\uâ[ūŪq‡ã`ū‘‘}kū5(ß †ūžūIT5(ā ”`ŪÜ/žūeū}Šūų'áųčÍūITų'č7_ķÍūŖūáĢ˙I_T1I_T2œ'é__pOŐčģ?O˙Ņ5áĶ^˙CI*‘!iŐč†0k*‘č:‡0k*‘čD0lŐâæDc0s÷$áą˙CI*‘!iŐI_TpŪ†0*‘Ū:‡0*‘ŪD0Őą˙J7áDã˙CI*‘č†-r*‘č:‡-r*‘ßjû˙5!i*‘ā ”ujŪ†*‘Ū:‡*‘âī__nEjßJjMyCI*‘ā ”ujŪ†ę*‘Ū:‡ę*‘ėôß+bˆŸā ”?xé__aŸt7}Ētœ'ēuy'á,ŨY¯g%Ū0ųŨ¤}čtœ'øuy'áĄ,Y¯g%Ū0ųâߨ/:ā ”ôEßž ITā ”ŠVßœ&cnā ”^Wßų&}ˆā ”^Wß™'—ĸā ”^WágņYŗ{ü$I_II¤BI_OI¤BۆޤBŪ:‡Ž¤BŪDޤBáŖ6I_II¤BI_OI¤BۆȤBŪ:‡Č¤BŪDȤBáĻ>xCI¤B!i¤Bč†0[¤Bč:‡0[¤BčD0\¤BáÕÉCI¤B!i¤Bč†0k¤Bč:‡0k¤BčD0l¤BâæDc0s÷$áCI¤B!i¤BI_Tp;Ū†0¤BŪ:‡0¤BŪD0¤BßBáF|CI¤B!i¤BĶŒŋŪ†0'¤BŪ:‡0(¤BŪD0)¤BŪ"0*|ßBá†Æv¤B{¤BŪ†v¤BŪ:‡v¤BŪDv¤Bß‚zÕāā ”šá“‰ĩR¤BāN{ÂŪ L ŪÕ —Į—ĮßįŽ1Iā ”)[ŪFH{ ;ä)ķ [sā ”ÔaŪFHķ ;äÉ …ā ”ÔaŪFH ;ß|ŲŦÄā ”ôUŪčĒ™­Dß=ÚĶëā ”ČUŪčĒĸ­DßÔĀúā ”ļņŪÜ/Å2@ßĸ&1ā ”§€ßVŽ@Kā ”“aߡĒZeā ”Ōmß”ĨtŒā ”ŒŪ› ¨+Ļß6ß ļā ”‚īëp~ö6ęôĶ”ĮŌā ”ŖTßSÃá÷ā ”ęsëp~’AßøÅā ”:Bß1ß%0ā ”ųVáØ$Lâî›ĨI $ß %[fā ”^Wä´Ÿx“ā ”°[âî30‘ßfĸšā ”ČSérhsDš95đéß´¸Ôüā ”lHŪY ˛&@âîˇŗ€čßÔ¸ ā ”lHßķ¸%=ā ”lHŪY ŋ&@ßLžLWā ”ôWáŖã|ëfdķ%ŪY@ķœ'đéážãĩëfdú%ëbufú]ŪíŪú9%ßK¨Ä˙ā ”˙čeėčAí%č@Gî%čœdī%ö6Ē1äÚÕ0ā ”^āļÄ%äÕdBWā ”WāļÄ%ŠGäuÖ-nƒā ”ƒāļÄ%ĩGß#×—ŧā ”]ŪOlœ'Ū‘3l°1ßrÕËđā ”^ŪOœ'Ū‘3°1ßkž˙ ā ”lHđ'éđ2éđ;éđDéߨ5 M ā ”]Ū`§~ü$߃\ g ā ”ų9ߐ¨v  ā ”ÂTßĩԐ Ī ā ”WŪOfœ'Ū‘3f°1ŪˇÎgœ'Ū g%ß-ÖŪ  ā ”ƒŪO/œ'Ū‘3/°1đMéáYé3 âîũŽŨ%î3’Ūü$äčE ] ā ”ÔaŪFH;ß1žl w ā ”lHߊž† ‘ ā ”lHßÛž  Ģ ā ”lHßĪhē Å ā ”ujáeéë Ū#_|:Ū$_5‘á}é Ū#b|:Ū$bĖ,ß~„ + ā ”+ ŨDß2„? [ ā ”†é__n cdƒ]á… é__aMĩ é__nMĩ…KGß<Ų“ ž ā ”puß{Ų­ Õ ā ”puë__x)‰Õ âî'‡)‹„ØEßĸįé  ā ” é__a*p é__b*p îFôFŲ6ß æ* B ā ”Ÿ†Ūįv)B EßĪėV y ā ”y é__a*p~ é__b*pƒ —EEŲ6á•é  éstr.*œ'ßmč¯ ē ā ”ē 7EßëÎ æ ā ”æ ë__x/Ģë OE[Eß;\˙  ā ” —6ß>Y ) ā ”) ģ6ßzY= H ā ”ę†ßZ\W b ā ” ß$Zq ‰ ā ”) ë__x);‰ Į6ß=ę Å ā ”ē ë__x/ķÅ âī__p/õiįUEt%Ú uy'!}Ę ß ö ITĘ ā ”ģ_évalsâ…|cÚ ę\ė/Z-Bā ”ē āļÄ%ßųvQ\ā ”\?G߁up{ā ”\ßŋuЕ⠔Iģ}ī…á‰ĶĩRļAāN´ˇŪ L =ĶŪÕ >Ø••á¸.CI u!i°Ač†0k uč:‡0k učD0l°AâæDc0s÷$áéCI u!i°AI_Tp)ļŪ†0 uŪ:‡0 uŪD0°AæAákržé__aMŞāAß˙ļ˛Õā ”Qŗé__n†đé__a†ÕB߃Åéôā ”mÍßgÅā ”mÍŪÜ/Ú(BßGÆ/:ā ”ßķŊITā ”lH} ßGp‘IT ā ”ģ_évals‘â…|cT߀ Ĩ°ā ”Vß%ĩŋ×ā ”dëkey_×Ē1áí‰ĩR"9āNK‚Ū L /ŪÕ 0[w[wßT-8ā ”ÅpßAG_ā ”vBŪÜRã_Ē1á\ŠëkeyyŠŪÜ/yĒ1Ē1t%¤uy':}”ßnĀáIT”ā ”ģ_évalsáâ…|c¤t%öuy'}æß•3ITæā ”ģ_évals3â…|cöáŪãQësrcĶœ't%auy'3}Qßŧ}žITQā ”ģ_évalsžâ…|caß(˛Íā ”ÍâîÄ`lHZH߸'áėā ”äGß’ûā ”QVŪ"°1ēäĄü%gā ”ų9âîÄ lHî|Á ;îß Á,îĸŗ Íߊ!všā ”÷@âîÄ€ lHî|Áƒ ;îߊ Ēéâīi‹ %đ¯éßâŧĪÚā ”lHß°Ĩéā ”ŒŪ› Ē+ĻßąŖā ”§€ßsŖ*5ā ”§€á)z{%u¨Råϛۆ Ļu¨Ū:‡ Ļu¨ë__f ĻĻ›ßÃŧ‰ ā ”lHâîxc–ü$î†įœ÷$î „Ą÷$î—ΰü$î|Á˛;îãėš%î%ģ÷$âīiŧ%âîßÁĒéâîâģŲ%߉ŋ/Gā ”lHŪÜ/3ü$äĒļŌYdā ”…FyÔ&ՉDÍô&ÚIT,¯E&7áoŊIT,čÜ/&ÚŊéos&Ú&7â|&öŗ¯EáŧéøIT,ŌæåéŪÜ/&Qøëos&Q&7¯Eáņé)IT,ŪÜ/&a)ëos&a&7¯Eá,ŌSŪÜ/&OSëos&O&7¯Eáę†IT,ŪÜ/&đ†ëos&đ&7ô¯EáúҰŪÜ/&̰ëos&Ģ&7¯EáSŅÎŪÜ/MίEá/ęIT1,IT2,ŪÜ/˜¯E¯Eá5ûWI_TpÛ9Ū†qķ9Ū:‡qķ9ŪDqí9âîŽ/xG á[ļYŗ{ü$I_IIí9I_OIí9Ū†í9Ū:‡í9ŪDí9âî8S†÷$á—Yŗ{ü$I_IIí9I_OIí9Ū†Ží9Ū:‡Ží9ŪDŽí9áĶJI_IIí9I_OIí9Ū†Čí9Ū:‡Čí9ŪDČí9á×>ŒCIí9!ií9č†0[í9č:‡0[í9čD0\í9áŨCIí9!ií9č†0kí9č:‡0kí9čD0lí9âæDc0s÷$á60CIí9!ií9I_TpÛ9Ū†0í9Ū:‡0í9ŪD0í90(:ávCIí9!ií9Ķt‰Ū†0'í9Ū:‡0(í9ŪD0)í9Ū"0*(:áļÚví9{í9Ū†ví9Ū:‡ví9ŪDví9ß×Xéôā ”ļ}ß˙ā ”e}Ė…áŠLĩRí9āNcŒŪ L LŪÕ Qß=Žepā ”eá^ûŧI_Tp%Ū†q–'Ū:‡q–'ŪDq|:âîŽ/xG áčYŗ{ü$I_II|:I_OI|:Ū†|:Ū:‡|:ŪD|:âî8S†÷$á$jYŗ{ü$I_II|:I_OI|:Ū†Ž|:Ū:‡Ž|:ŪDŽ|:á`¯I_II|:I_OI|:Ū†Č|:Ū:‡Č|:ŪDČ|:á?ņCI|:!i|:č†0[|:č:‡0[|:čD0\|:á’BCI|:!i|:č†0k|:č:‡0k|:čD0l|:âæDc0s÷$áÕCI|:!i|:I_Tp%Ū†0|:Ū:‡0|:ŪD0|:•Ŧ:áõCI|:!i|:͇“Ū†0'|:Ū:‡0(|:ŪD0)|:Ū"0*õŦ:áC?v|:{|:Ū†v|:Ū:‡v|:ŪDv|:ßā_NYā ”…~ߘhsā ”Úe}Ņ…áGŠąĩR|:āNv–Ū L ąŪÕ ļssßP˜ĘÕā ”Úeá‡û!I_TpV@Ū†q\@Ū:‡q\@ŪDqP@âîŽ/xG áu€Yŗ{ü$I_IIP@I_OIP@Ū†P@Ū:‡P@ŪDP@âî8S†÷$áąĪYŗ{ü$I_IIP@I_OIP@Ū†ŽP@Ū:‡ŽP@ŪDŽP@áíI_IIP@I_OIP@Ū†ČP@Ū:‡ČP@ŪDČP@á9?VCIP@!iP@č†0[P@č:‡0[P@čD0\P@á§CIP@!iP@č†0kP@č:‡0kP@čD0lP@âæDc0s÷$áPúCIP@!iP@I_TpV@Ū†0P@Ū:‡0P@ŪD0P@ú‘@áZ CIP@!iP@ĶlžŪ†0'P@Ū:‡0(P@ŪD0)P@Ū"0*Z ‘@áФ vP@{P@Ū†vP@Ū:‡vP@ŪDvP@átŠÜ ĩRP@āN[ĄŪ L Ü ŪÕ á SSßÔŊõ !ā ”lHá°ûL!I_Tpë@Ū†qņ@Ū:‡qņ@ŪDqå@âîŽ/xG áĢ!Yŗ{ü$I_IIå@I_OIå@Ū†å@Ū:‡å@ŪDå@âî8S†÷$á>ú!Yŗ{ü$I_IIå@I_OIå@Ū†Žå@Ū:‡Žå@ŪDŽå@áz?"I_IIå@I_OIå@Ū†Čå@Ū:‡Čå@ŪDČå@áj?"CIå@!iå@č†0[å@č:‡0[å@čD0\å@áŦŌ"CIå@!iå@č†0kå@č:‡0kå@čD0lå@âæDc0s÷$áŨ%#CIå@!iå@I_Tpë@Ū†0å@Ū:‡0å@ŪD0å@%#&Aá…#CIå@!iå@Ķ­ĒŪ†0'å@Ū:‡0(å@ŪD0)å@Ū"0*…#&Aá]Ī#vå@{å@Ū†vå@Ū:‡vå@ŪDvå@ß8¯Ū#é#ā ”“aßv¯ø#$ā ”“a᥊;$ĩRå@āNœ­Ū L /;$ŪÕ 0@$Q‚Q‚ßÎT$l$ā ”ŅiŪ35l$Ē1ßęo‰$Ą$!&å@ā ”’të__i āĄ$Q‚áΊį$Ļ`ņ@Cå@āNœ­Ū L 6į$ŪÕ 7ė$—tQ‚ß@m%%ā ”:të__n ÚkáŲûd%I_Tp°*Ū†qīCŪ:‡qīCŪDq5‘âîŽ/xG áÃ%Yŗ{ü$I_II5‘I_OI5‘Ū†5‘Ū:‡5‘ŪD5‘âî8S†÷$áË&Yŗ{ü$I_II5‘I_OI5‘Ū†Ž5‘Ū:‡Ž5‘ŪDŽ5‘áW&I_II5‘I_OI5‘Ū†Č5‘Ū:‡Č5‘ŪDČ5‘á›?™&CI5‘!i5‘č†0[5‘č:‡0[5‘čD0\5‘á9ę&CI5‘!i5‘č†0k5‘č:‡0k5‘čD0l5‘âæDc0s÷$áj='CI5‘!i5‘I_Tp°*Ū†05‘Ū:‡05‘ŪD05‘='$DáĒ'CI5‘!i5‘Ķ™ËŪ†0'5‘Ū:‡0(5‘ŪD0)5‘Ū"0*'$Dáęį'v5‘{5‘Ū†v5‘Ū:‡v5‘ŪDv5‘á‹(ĩR5‘āNˆÎŪ L (ŪÕ $(ЎЎßBĪ8(C(ā ”Ijá1‹{(ĩR5‘āNˆÎŪ L /{(ŪÕ 0€(ЎЎß7C”(Ÿ(ā ”Iqßø‚Ž(Æ(ā ”Quë__n JáÕâ(âîQmcß,Īņ(ü(ā ”ü(xDáZęa)ëstr¸a)Ūŗv¸%Ūđ$šz7âîØēcīposģhâîëĄŊĒ1áwęš)ëstr œ'Ū(í %âīiĸ%=ž)! –BŌ)!‘ķB%ķ%Ė)Ō)zCvž)áę*Ū}A*ŪD:Bš)âīsumC%âīiD'hAáĢęd*ëstrŗœ'âîņĄ´FÍâīpģœ'īchÃĸ'ážę‹*če*Ų'âãmsgÚįûöDA¯*čč^.n%č)ˆ.n%ßļEž*Ö*ā ”ŽRë__c3%÷¯*Ģœō*+øž*‘øČ*‘÷ÕJâ`œ!+++øäJ‘ųîœZ+ú$îûü‘‘ũCœr+‘+ū ”Íûü‘‘ũ]œŠ+ˇ+˙ ”Í‘€Ĩ! œĪ+Ũ+˙ ”÷@‘€ŋ! œõ+,˙ ”÷@‘÷*Kû*œ,),ø9K‘ßV8,C,ā ”b@÷),Î~œ_,i,ø8,‘ßzx,ƒ,ā ”b@÷i,MœŸ,Š,øx,‘ũžœÁ,Ī,˙ ”b@‘ũÄ)œį,ū,˙ ”%W‘ū,‘Hũí)œ-;-˙ ”%W‘;-‘%‘Hũ*œX-o-˙ ”%W‘o-‘HũD*œŒ-Ŗ-˙ ”%W‘Ŗ-‘Hũm*œĀ-×-˙ ”%W‘×-‘+Hũ–*œô- .˙ ”%W‘ .‘į9ũŋ*œ(.?.˙ ”%W‘?.‘n8ũč*œ\.s.˙ ”%W‘s.‘į9ũ+œ.§.˙ ”%W‘§.‘+Hũ:+œÄ.Û.˙ ”%W‘Û.‘Hũc+œø./˙ ”%W‘/‘HũŒ+œ,/L/˙ ”%W‘L/‘%‘Hũē+œi/€/˙ ”%W‘€/‘Hũ9Éœ/Ģ/˙ ”…X‘÷ūVčĘœĮ/Ņ/øW‘ũ­œé/÷/˙ ”Í‘ũŅœ00˙ ”Í‘á "60Ūž|iá9ũ‚ 0œN0Į0˙ ”ŠV‘‚{+#6 ƒG{ø<{‘# Ÿ„+#…V{>„+#…e{]‚0:ú(0›á'"ā0Ūž|ná9ũĄP*œø0q1˙ ”ŠV‘‚{[; ƒG{ø<{‘# Ÿ„[…V{Ž„[…e{͂Į0húŌ0 áA"Š1Ūž|sá9ũĀ€*œĸ1˙1˙ ”ŠV‘‚{‹@ ƒG{ø<{‘# Ÿ„‹…V{*„‹…e{Iá["2Ūž|xá9ũß°*œ022˙ ”ŠV‘‚{ģE ƒG{ø<{‘# Ÿ„ģ…V{‡„ģ…e{Ļ÷|ˆīāœŠ2ß2ø-|‘‚eä J ø)e‘# Ÿø)e‘# Ÿũeßœ÷23˙ ”ųV‘3‘Hũåßœ+3B3˙ ”ųV‘B3‘Hũáœ_3v3˙ ”ųV‘v3‘Hũ[ᜓ3Ē3˙ ”ųV‘Ē3‘Hß_Üž3É3ā ”đ÷¯3œđœå3ī3øž3‘€CĶ#œ4&4ū ”&4ä†3’f+4ø…Gn8÷ūJZ‚œL4V4øK‘÷}TBúœr4|4øŽT‘÷ŌV¨7œ˜4ĸ4øäV‘÷ĄUžÎœž4Č4øŗU‘÷ÍU]œä4î4øßU‘÷ūJ˛œ 5(5øK‘‡á\ ü‘‘÷ÕJ¯œD5b5øäJ‘‡á\ ü‘‘÷*KŪöœ~5œ5ø9K‘‡á\ ü‘‘÷}T§œ¸5Ö5øŽT‘‡á\ ü‘‘÷ĄUPPœō56øŗU‘‡á\ ü‘‘÷ÍUvœ,6J6øßU‘‡á\ ü‘‘÷ŌVĀÄœf6„6øäV‘‡á\ ü‘‘÷ūVÎLœ 6ž6øW‘‡á\ ü‘‘áĶęÜ6ITvëxS;߯Žë67ā ”)[āļÄ%ˆÜ6Š0vœ79øë6‘‰ü°H$x 7ƒ$ąúą‚P˜H$(ƒ‡˜ƒz˜úm˜/‚ž6R ŦúĐ6zŠ7ąlw I8ƒFą‹ذlŠƒį°Œd°l ƒs°ƒ‰°ú}°Œ/°p˛ƒ:°ƒR°úF°ÃŒ°pMšƒ°ƒ)°ú°ÃŽá\ ‰7ąˆw 9ƒFą‚ذˆŠƒį°d° ƒs°ƒ‰°ú}°î„/°‘˛ƒ:°ƒR°úF°°‘Mšƒ°ƒ)°ú°šá\ Ļö\ ÷Ü6аœ.9L9øë6‘ž7ŽËá\ ũ.ÜĐ!œd9Š9˙ ”đ‘%‘%‘ ‘č÷0N!UœĻ9Ā9øAN‘ûü‘‘÷0NɁ!œÜ9:øAN‘’0N ” :úAN‘Ž!á\ ˆRfXzNœ1:–:øaf‘økf‘„6ƒkfƒaf„6…zf3‹f0  úfjúfjˆŒfˇ¸PNœ˛:;ø›f‘øĨf‘„d6ƒĨfƒ›f„d6…´f‚‹fdPĄ úfšúfšˆÆfė: Nœ3;˜;øÕf‘øßf‘„´6ƒßfƒÕf„´6…îfŅ‹f´pĸ úfúfˆg&ƒđNœ´;<øg‘øg‘„6ƒgƒg„6…(g ‹fŖ úfWúfWˆ:g6f@Nœ5<š<øIg‘øSg‘„T6ƒSgƒIg„T6…bgo‹fT°¤ úfĻúfĻˆtgÅėNœļ<=øƒg‘øg‘„¤6ƒgƒƒg„¤6…œgž‹f¤ĐĨ úfõúfõˆŽgŧqāOœ7=¤=øŊg‘øĮg‘„ô7úĮg úŊg,„ô7…ÖgK‚fôĻ úfƒúfƒˆčgŧN0OœĀ=->ø÷g‘øh‘„D7úh¨ú÷gĮ„D7…hæ‚fD§ úfúfˆ"hę€OœI>ļ>ø1h‘ø;h‘„”7ú;hCú1hb„”7…Jh‚f”¨ úfšúfšˆ\h~¸ĐOœŌ>??økh‘øuh‘„ä7úuhŪúkhũ„ä7…„h‚fäŠ úfTúfTˆ–h;ß Oœ[?Č?øĨh‘ø¯h‘„47ú¯hyúĨh˜„47…žhˇ‚f4Ē úfīúfīˆĐh@p[œä?X@øßh‘øéh‘øöh‘„Œ7ƒöhƒéhƒßh„Œ7…i‹fŒđ˛ úfKúfKˆi?ĐTœt@ô@ø&i‘ø0i‘ø=i‘„ė0ú=i`ú0isú&i†„ė0…Li™‚fėģ úfÎúfΓ×m00œ A­Aúæmりm7ōú¸m „7…ÄmC ‰ôl7 XŽAúm ‚¤l7$úŊl øŗlō;A‚-mE XúŠę¨B ƒ.¨úD¨ ú8¨%„Bę§F ˛ƒõ§ú ¨8ú¨Tŋ§F MšƒΧúä§8úاTOá\ ß‘LLā ”ÅFë__s˙œ'ßC+LPLā ”“BŪp÷ąhë__nąh›íę eœ`QœĄ7í`QgUQžretîÄ6ˇ8ŸPžatī' hŸ đ€5a‰ģŽŅņMúԎŧúʎä‚õKŅŋúLŧúLäāhŠLč˜öŗMúBL4ú5L’ú+LÆŠ[NčĀŗŦMúNīútN’újNÆŠ‹IčāCĄMúšIƐ $$‘ŠâŽ øöįMúûŽ'úņŽTŠ3ˆö_NúBˆtŠqI@#&Nú€It‹LX#úL‰úLžš:wBüRu`ŠL@xķ÷NúBLąú5LĶú+LņŠ[N@ŗđNúN6útNĶújNņ‰‹I@CåNúšIņĶ$$‘VŠâŽX¨ķ+OúûŽ^úņŽČaŠ3ˆaĀķŖOúBˆ ŠqIaā#jOú€I ‹Ljø#úL^úLšš„wBüRud‰3ˆÕķPúBˆč‰qIÕ#âOú€Ič‚LÛ#úLũúL*šęwBüRud‰3ˆîö“PøBˆudŸ‰qIî#ZPø€IudŸ‚Lô#úL=úLjš wBüRu`Ė͉˜Œ°îįPú§Œ}‚XŒ°ŧƒ~ŒƒqŒúgŒ}„ĸ úBˆĖ‰qIĸ#Qú€IĖ‚LĒ#úLāúL ššwBüRu_Âö\ Ē1vĶå›;# ĀœËR††G;eQ †ß;'A†íŪ<'m os<&7‘Ą98=ë‘[0ĸi>'ŒPĸj?€5Ģ’cPa IWRú„PéúwPü‰Oa LRú"Oéi 9] t :$’—PŽ DŠRú¸PúĢP;ž :$’—P­ FŊRú¸PNúĢPzŊ :$a Q] –Ž_Đ XœãRĨSú¤_øŽ_úŽ_Ÿ—cPŨ p™WSú„PĖúwPę‰OŨ LSú"Oːæ 9] ö :$„ ƒŽ_ú¤_ŒcP —ø„P0ŸúwP+ :$ßÎĒ´SØSā ”ŌmāļÄ%âīit 0MnˆĨSŗŒtœôSdVø´S‘™,ŊT…ĘSC‰ôl 0^Túm‚¤l$úŊløŗlō T‰Gm  1 TúVm´‚¤l 6úŊléƒŗl‚-m* 0úœZ¤3ĘZ‘¤ŸsĘœ'‘„ (ŸGkËœ';‰T ŌöYú#TeúTz ‹]  .YĒ1Ļ>ũÔ'0 œänŗˆ-Z_Zā ”_ZŪ9‰ė8ŪæôŠ÷Ūr‹dZF;L;÷Z,@ %œ…ZŧZú-Zú7ZŽøDZ‘øQZ‘ ûe ü‘‘ ÷—up œØZëZøŦ‘øļ‘÷Ä ŗ œ[[øĶ‘øŨ‘÷bgF° œ6[l[ø!b‘‚øa´ Īøb‘#TŸøb‘#TŸáë…[Ū[—VzCũpšĀ *œ[ú[˙ ”ôW‘‚ëuË Õƒvøv‘#TŸ„Ë …"vÂ„Ë …1vá÷,bg đ œ\5\ø;b‘š ­AüP‘#T÷FbU  œQ\p\øUb‘š& ­AüP‘#T÷`b͇0 œŒ\Ģ\øob‘šF ­AüP‘#T÷zb…RP œĮ\æ\ø‰b‘šf ­AüP‘#T÷”b0p œ]!]øŖb‘š† ­AüP‘#T÷Žb @ œ=]\]øŊb‘šĻ ­AüP‘#T÷ČbS^° œx]—]ø×b‘卑AüP‘#TũČģĐ !œ¯]Ķ]˙ ”lH‘¤Ũ%‘‘č §ÃX@OHœ^@¨ĐX‘h¨] Ŗã›lPDœH^Ĩlhslœ'‘Ĩrhslœ'‘mČ] äë ¸Z^r^ā ”`Ūūõ¸r^9÷H^Ī Sœ“^_øZ^‘ød^‘‰`˛ēÅ^ú*` ‰Å_Õŧī^úŪ_d úÔ_Ą År] ‘Аëá\ ķö\ §éŦœu_‚ī_ É•`øū_‘‚Å_•Ū_øÔ_‘#Ÿ§sį“? œÖ_‚ī_$ Ε`øū_‘‚Å_'•Ū_øÔ_‘#ŸŖœ@Dœ`Ĩlhs5(‘Ĩrhs5(‘]Đ*Ŗ>œ.Dœ€`Ĩlhs.œ'‘Ĩrhs.œ'‘‚;YŖ 3úRYÖ úFYõ ­â] Ŗ^œBā0œÂ`ĨlhsB5(‘ĨrhsC5(‘ũ] Ŗ~œZ4œßaŠstr[ßa!œī&[äa4!XŸļV\€5T!ŸƒW]€5Š!Š_Yp\{aúnY¨!‹qIÛú€I¨!‹WI-úfI¨!Š_Y¨]ĶaúnYČ!‹qIČÛú€IČ!‹WIČ-úfIČ!Ž9`Ē1Ē1ßŪøa bā ”ÅFë__c-%âîC/v ›ëP!œĶfĨss{ b‘āČfžstr|Ķfč!Ÿß}0‘1"žend~0‘D"Ē3’€Ä6‘ŠÕãV|Ábúäãž"l(‰ŌSl}ũbúáSč!‚WIlúfIč!‰_Yo~cúnY˛"‰˜Œr€ecú§Œû"‚XŒrŧƒ~ŒƒqŒúgŒû"™Ž‚dežch‚œ'#‰ģŽ˜„ÕcúԎE#ƒʎ‚õK˜ŋúLE#ƒL¨h‹Žæŧ0†úĮæ]#ƒŊæ‹éaŧ0Éúb]#ƒøa0…b†#‰‹Iŧ/sdƒšI‚qIŧÕƒ€I‚WIŧ-ƒfI‰Nį2dúĻNĨ#úšNŊ#‰qIė3Ņdƒ€I‚WIė-ƒfIŠ×NîH3VeúđNÕ#úæNé#„ûúđNū#úæN$’œJūÕ3eƒĢJN׃ĻNúšN'$ßŠ3ˆ`ŠÜeúBˆ@$‰qI#Ŗeú€I@$‹Lx#úL|$úL¸$š1wBüRuc™=EfƒBˆ‰qI=# fƒ€I‚LD#úLö$úL#%šSwBüRuc‰3ˆSŠŊføBˆudŸ‰qIS#„fø€IudŸ‚LY#úL6%úLc%šhwBüRuc‹Âqö\ Ē1÷īæc€œôfgøį‘”&bßà g/gā ”`ŪVĘ)/g5ßŦCgYgā ”ę_ëp‹Ő÷g›kãœugHjøg‘ø!g‘‰īæ,ągúįv%$&b‰ŌS$,ígúáS•%‚WI$úfI•%ŠõK',KhúLŪ%úL&‰O'@hú"OŪ%-9] :hŠ3ˆ:¨,ÃhúBˆ&ŠqI:Č#Šhú€I&‹LCā#úLW&úL“&š`wBüRucŠ4gzø+oiúMgĻ&úCgÅ&Š3ˆ”ŽdiúBˆÚ&‰qI”#+iú€IÚ&‹Lœ(#úLø&úL'šÁwBüRvŦá\ ‰˜Œƒ+ģiú§Œ4'‚XŒƒŧƒ~ŒúqŒS'úgŒ4'‰3ˆÅ,3jøBˆudŸ‰qIÅ#úiø€IudŸ‚LË#úL'úLŽ'šÚwBüRuczr] ãö\ ßÔ{Wjojā ”Ędë__n ÚxĢĒ BœŠjˆk˙ ”2V‘ĨiĒ%‘‰eo˛ĢëjúwoÁ'‚°d˛Vúŋd((úŋd((Š‚oÄ@­kkú›oM(ú‘ow(ŠHjÄ`JHkúajM(úWjw(â$$‹zjÆxKƒ‰jú“jī(‚ _ĐŦÕ^ ßį…—k¯kā ”édë__n í‚Ģ2ŗđBœĘkČl˙ ”2V‘Ĩiŗ%‘‰6p´+lúHp)‚Īd[úŪdi)úŪdi)ŠSpļĢlúlpŽ)úbp¸)Šˆk¨JˆlúĄkŽ)ú—k¸)2$$‚pKƒpú(p0*‚ _ ĩ%^ ęĒ/Ųlîlā ”ÆEāļÄ%ĢOē@›œ mao˙ ”QV‘‚§¤Kˆģúļ¤C*‚{¤N…ŧƒФú”¤h*‚ũŖQžƒ2¤ú&¤–*ú¤Š*ÎŖQ—ƒîŖƒâŖ„QĄŖQ~ƒÁŖúĩŖ×*Œ€Ŗ`Āgú”Ŗ +ŒČl`Ā]úŲl +—3ˆ`ā/nnúBˆE+ŠqI`ø#5nú€IE+‹Lf #úLg+úLš+šąwBüR‘_—3ˆm( /ånúBˆ×+ŠqImH #Ŧnú€I×+‹Ls` #úLų+úL3,šĖwBüR‘_3ˆ/úBˆQ,‰qI#oú€IQ,‚L‡#úL,úL÷,š—wBüR‘_äĪsoˆoā ”vBāļÄ%Ģi/āœŖoÔs˙ ”QV‘‰§¤ëˆ0ūqúļ¤%-‚{¤î…ŧƒФú”¤J-‚ũŖņžƒ2¤ú&¤i-ú¤|-ÎŖņ—ƒîŖƒâŖ„ņĄŖņ~ƒÁŖúĩŖ›-Œ€Ŗ€ gú”ŖŅ-ŒČl€ ]úŲlŅ-—3ˆ  / qúBˆ .ŠqI¸ #Ķpú€I .‹LĐ #úL+.úL}.šQwBüR‘_—3ˆ č /ƒqúBˆ›.ŠqI  #Jqú€I›.‹L #úLŊ.úL÷.šlwBüR‘_3ˆ!/úBˆ/‰qI!#Ŋqú€I/‚L'#úLQ/úLģ/š7wBüR‘_‚:§s`1úI§é/‹§s@ ŧƒ§ú'§0‚ĻyWžƒÅĻúšĻ00ú­Ļ0aĻyW—ƒĻƒuĻ„yW4ĻyW~ƒTĻúHĻC0ŒĻˆX gú'Ļy0ŒaoˆX ]úsoy0Š3ˆˆx ĪWsúBˆą0ŠqIˆ˜ #sú€Ią0‹L° #úLé0úL#1šĖwBüR‘_‚3ˆ›ĪúBˆA1‰qI›#’sú€IA1‚LĄ#úL}1úLĪ1šąwBüR‘_Ģ’7đ`œīsct˙ ”2V‘Đ ži8%ũ1Šeoûđ 8Wtúwo2‹°dûđ VúŋdR2úŋdR20ojũDPBœ{tdu˙ ”ŠV‘‹{R , ƒG{ú<{w2 …V{Ŧ2 …e{Ë2‰ŨojDuúčoí2„púčo3ŠÃop( _&uúŌoE3|Ôs‚Šos_ú¸o3‚§z„úļze3ũc Bœ|uIv˙ ”ŠV‘‹{ĸ@ 1 ƒG{ú<{}3@ …V{˛3@ …e{Ņ3‰öoē)vúpķ3„Āúp4‰ŠoÃdvú¸o4ĖÔs‚§zÔúļzK4ũšđDœavFw˙ ”ôW‘‹ëuōX Ńvúvc4X …"v™4X …1v¸4‰­{ &wú¸{Ú4„ ú¸{í4‚“{ Lúĸ{í4‚y{ #úˆ{í4du‚xt&ú‡t5ũ2š@Dœ^w'x˙ ”ôW‘‹ëuBp Ęƒvúv5p …"vN5p …1vm5‰Æ{ZxúŅ{5„` úŅ{ĸ5‚y{` Qúˆ{ĸ5idu‚xtvú‡tĩ5áÆ,@xŪ3’@@xn8ĢąE4œ`xŗxū ”2VÍ5‹¯y›ˆ Fƒ×yúĖyė5ˆ …æy6ˆ …õy<6áŨ,ĖxŪ3’JĖxn8ĢĐOĐ4œėx?yū ”2Vˆ6‹¯yÛ  Pƒ×yúĖy§6  …æyĖ6  …õy÷6÷eoiŨœ[y‘yøwo‘‚°dVøŋd‘# Ÿøŋd‘# Ÿ÷6púÖ0œ­yãyøHp‘‚Īd4 [øŪd‘#,ŸøŪd‘#,ŸßŅ´ōyũyā ”ũy @ß–zzā ”Í÷zŠ=@Šœ8z=€øz‘ŠãyX¸ d€úōyC7’˜ŒX¤Ģzú§Œ–7‚XŒXŧƒ~ŒúqŒ8úgŒ?8’˜Œ_¤özú§Œã8‚XŒ_ŧƒ~ŒúqŒ8úgŒ?8’˜Œh¤A{ú§Œ`9‚XŒhŧƒ~ŒúqŒ8úgŒ?8’˜Œo¤Œ{ú§ŒŨ9‚XŒoŧƒ~ŒúqŒZ:úgŒ†:’˜Œv¤×{ú§Œ;‚XŒvŧƒ~ŒúqŒš;úgŒÆ;’˜Œ}¤"|ú§ŒP<‚XŒ}ŧƒ~ŒúqŒÍ<úgŒP<—vSĄØ ¨X|øSŸú…Sų<ąū’vSļ Š‹|úSi=ú…S=Áū—vSĐø Ģž|úS×=ú…Sī=Ûū’vSā Ŧņ|úSR>ú…Sj>ëū—vSú Ž$}úSĀ>ú…SØ>ū—vS6( ´W}úS;?ú…SS?Aū’3ˆZ¤Î}øBˆs4Ÿ‰qIZ#•}ø€Is4Ÿ‚L`#úLļ?úLã?šowBüRuw’3ˆo¤E~øBˆsŸ‰qIo# ~ø€IsŸ‚Lu#úLö?úL#@š„wBüRuw’3ˆ„¤ŧ~øBˆsŸ‰qI„#ƒ~ø€IsŸ‚LŠ#úL6@úLc@š™wBüRuw’3ˆ™¤3øBˆsŸ‰qI™#ú~ø€IsŸ‚LŸ#úLv@úLŖ@šŽwBüRuw’3ˆŽ¤ĒøBˆsŸ‰qIŽ#qø€IsŸ‚L´#úLļ@úLã@šÃwBüRuw3ˆÃ¤øBˆsŸ‰qIÃ#äø€IsŸ‚LÉ#úLö@úL#AšØwBüRuwXr] áá\ éö\ ßį´L€a€ā ”ũyāļÄ%ßép€…€ā ”ÍāļÄ%÷a€‹!đ+œĄ€Ą‡øp€‘Š=€ @ iŒ‡úL€6A—vSX Ŋü€úSTAú…SŽA7ū’vS< ž/úSļAú…SãAGū—vSUx ĀbúS Bú…SEB`ū’vSe Á•úSmBú…SšBpū—vS~ ÃȁúSÂBú…SüB‰ū—vS¸¨ ÉûúS$Cú…S^CÃū—3ˆĪĀ šr‚úBˆ†C‰qIĪ#9‚ú€I†C‹LÕØ #úL¨CúLĘCš@wBüRuw—3ˆÜđ šé‚úBˆčC‰qIÜ#°‚ú€IčC‹Lâ #úL DúL,DšPwBüRuw—3ˆé š`ƒúBˆJD‰qIé#'ƒú€IJD‹Lī8 #úLlDúLŽDš`wBüRuw—3ˆöP š×ƒúBˆŦD‰qIö#žƒú€IŦD‹Lüh #úLÎDúLđDšpwBüRuw—3ˆ€ šN„úBˆE‰qI#„ú€IE‹L ˜ #úL0EúLREš€wBüRuw—3ˆ° šÅ„úBˆpE‰qI#Œ„ú€IpE‹LČ #úL’EúL´EšwBüRuw’3ˆ”š<…øBˆs4Ÿ‰qI”#…ø€Is4Ÿ‚Lš#úLŌEúL˙EšŠwBüRuw’3ˆŠšŗ…øBˆsŸ‰qIŠ#z…ø€IsŸ‚L¯#úLFúL?FšžwBüRuw’3ˆžš*†øBˆsŸ‰qIž#ņ…ø€IsŸ‚LÄ#úLRFúLFšĶwBüRuw’3ˆĶšĄ†øBˆsŸ‰qIĶ#h†ø€IsŸ‚LŲ#úL’FúLŋFščwBüRuw’3ˆčš‡øBˆsŸ‰qIč#߆ø€IsŸ‚Lî#úLŌFúL˙FšũwBüRuw3ˆũšøBˆsŸ‰qIũ#R‡ø€IsŸ‚L#úLGúL?GšwBüRuw(á\ ö\ ÷a€ƒ™ œŊ‡ۇøp€‘.…€Ž;á\ ÷×mÎ$@œ÷‡ˆúæmRG‡Oô@üP‘ũz `/œ-ˆވ˙ ”ŠV‘Ĩii %‘⠟áSj %qG‚nlj ˜@nø5n‘ø*n‘#Ÿ‚”es/ƒŖeƒŖeũų /œÆˆG‰˙ ”÷@‘Ĩip %‘ø ŸáSq %„G‚nœq ˜@nø5n‘ø*n‘#Ÿ‚”eŖ/ƒŖeƒŖeáŧ`‰Ūž|ËÛ9ũZ!Ā>œx‰Š˙ ”÷@‘‰T§Ø › ų‰ƒ|§úq§—G‚Ø|Ø (ƒ}ƒ}úõ|ŧG‚G‰ā ŦúR‰ûGņˆoŌˆo÷ße#p$œ ŠeŠøîe‘„…úe3H‹”eĨ úŖeRHúŖeRH§3Zvd0œ‡Šø>Z‘§’YõvP(œŪ‹øY‘('‹…ŦYjH‰ŌSU ūŠøáSŸ‚WIUøfIŸ`ž`ŗ`Č^HĶ‹úYˆHHŦŦYHŦģY…ČY›H‰yYĐ# Š‹ø„Y?ŸŨķ;ė^^^+^@^U^j^j`›5ë€÷œ;¤ņĄ= FÍ‘Šfmt= œ'ŽHm`ŸQ> ”“ÍHĒeÉD ÷$ȟá+F ÷$I‰ ZĖe ƒŒú&Z\^ Ė"] č"] r^ N’YaŒ^ ũŧ߀,œSˆ˙ ”ųV‘ˆ‘Ū‹›œ^ ŽŦ´^ HũÛā°,œĨڍ˙ ”ųV‘ڍ‘ŋŪ‹Ëœ^ ŽÜ´^ Hũ7āāDœ÷gŽ˙ ”ųV‘¤ž|Ö gŽ‘‰€ZôØ HŽú˜ZÂIú‹ZîI"] ôŪ‹ ] Ž$´^ į9›Që0ĶœŌ¤ž|p Ō‘ˆŸÕŠq 0‘JŸ¤Cr 0‘!JЧ`:¨q 0úļ`?J‰n`:|÷Žú}`jJ‚ŌSE}úáSŸJ‚WIEúfIŸJŠÁ`GČr ¨úĐ`ÁJŠn`Gđ„oú}`ėJ‚ŌSY …úáS!K‚WIY úfI!K‰"] ¨"] ž"] Ô"] į9ßäēæ ā ”ôWëiJ%âîáSK%§R|9ŅxœÎ’ø]|‘ސ…l|4K‹ß{( øî{‘‹Fb(iúUbGKš1­AüP‘\#T„C=ƒ]|„C=Ŧl|„C=…{|uKŠ8|CH $‘úG|ŦK‹bCHZú!bĀK‹øaCHĪúbâKúbâKhŦˆ|Šų{`€ ߑú| Lú|+L‹׏`€•úđ Lúæ?L€…ũVL‚n“Kú@n—Lú5n Lú*nŦL‚”e“/ƒŖeƒŖe™ĀĀŋ’…—|ĮLŠ|Ā˜ 1’ƒ-|‹eĀ˜J ƒ)eƒ)eČ…¤|ņL‰Šoü a’ú¸o%M‰Ão˙  ‹’úŌoNM ÔsņˆG Ū‹Z "] b lސn ] šduß-ÉŨ’ô’ā ”MfčâĸŽíÂũ¯ “œ “ؔ˙ ”)[‘¤FH€ ;‘āži 'ˆM‰fĨ  h“úf§Múf§M‰&fĀ ‚ ’“ú5fŧMú?fŅM‹>Čā ƒ ƒWČúMČũM‹Βā ~úį’/NúŨ’ũM’pĮ⠐”•‰ĮøĮōēŒßĮį ‘ƒČƒ ČƒüĮ‹Įį ŌƒHĮƒ;Įƒ.Į‹†Æį ˛úĮÆQNúēÆoNú­ÆN …ÖÆ¸N‹Æį ŒúFÆQNú9ÆoNú,ƍN …UÆØN!É^ ßŨį”˙”ā ”yCŪŸģ œ'÷ؔA0!‡œ•–øį”‘øņ”‘‰ŌSR! i•úáSūN‚WIR!úfIūN‰3ˆ˜! ߕøBˆsŸ‰qI˜!#¨•ø€IsŸ‚L !#øLVúL0OšŽ!wBüRv‘R!w!ë^ ƒ!´^ !_ ˇ!ö\ ›ĄŨĀ!ōœw™Ĩstrr w™‘8l™ĒĄ7s Ä6‘‰˜ŒÉ! s ™–ú§ŒCO‚XŒÉ! ŧƒ~ŒúqŒWOúgŒCO‰‹IŌ!t š–úšIxOPø˜žitu ĪŒOŠôâ!pu —úŽäO‹WIâ!prúfIäOŠ(Žø!v K—ú3ŽP‹ÅZø!¨Ķ úĐZPŠYŽ"Ču k—úhŽ7PŠ?Ž"ču ‹—úNŽWP‹éa#"w úbPƒøa…b¨P‰‹I#"/˜ƒšI‚qI#"Õƒ€I‚WI#"-ƒfI‰NQ"22˜úĻNÆPúšNîP‰qIV"3f˜ƒ€I‚WIV"-ƒfIŠ×N["3ë˜úđNQúæN$Q„€"úđNFQúæNYQ’œJ€"ÕȘƒĢJNŠ"׃ĻNúšNnQF"™’" a™ƒBˆ‰qI’"#(™ƒ€I‚Lš"#úL†QúLŗQšŠ"wBüRugâ!˛"ö\ Ē1›ŪĀ"{œŌš¤áėŽ &7‘¤13¯ œ'‘„Ë"lŸMY° œ'ÆQ‰cPË"ą šø„PęŸúwPRÛ":$™ā"Dšîŗ 0‘‰cPđ"ˇ Qšú„P3RúwPKR#:$Š*I#0ŗ ˆšøIIôŸúėP.<œŧļ‰lh. 1Ģļúlåcq.§_ Y.Ŋ_ ‘ƒ.˛ާ.œ§ųmž .œ ˇø(ų‘‚vSŖ.døS‘ø…SŸą.ū›NėĀ.œpˇĨptr×]‘¤3’×ī‘‘„Ã.ĒũŽØ%‘x§ – ā.œ°ˇ„ã.¨ ‘x¨$ ‘wō. ˇ÷„‹„/œĖˇ¸ø•‹‘„/ ŦĄ‹^/ „•"^/ú^øc/Č_ ÷¯í6 /œ/¸Ŗ¸øĀí‘„#/¨Ė푘5^#/ÔúM^ dú@^Ud‚ S#/Īú?S dú2SUd5/å_ °ZŸÚ@/5œŊ¸yš˙ ”°[‘„C/,ŗ3’Ûü$jdĄÍøâyš‘Ą(oî™â‘˜’5^C/ī\šúM^‰dú@^Ņd‚ SC/Īú?S‰dú2SŅdU/å_ YS^/ đúdSæd95°–Ÿø€/œ˜šöš˙ ”°[‘_Y€/˙ønY‘‚qI€/Ûø€I‘‚WI€/-øfI‘÷fŦJ / œēNēøx‘„ / ¨„‘‚[^Ļ/ øf^‘÷ī‹[°/œjēāēøŒ‘‹ėS°/Ø(øûS‘‹‹I°/Ø6øšI‘‚qI°/Õø€I‘‚WI°/-øfI‘ĢŸ@Đ/=œûē5ģ˙ ”°[‘đŸ3’I%üdä/` Ž 0Ŗ¸Ģԟ_0ŊœPģ÷ŧū ”ČSežsrcdœ'EeŸđ$eõCpeŸ\If°*še‰ŌS0`ĶģúáSÃe‚WI0úfIÃe‰_Y20gķģúnYųeŠq^0(ywŧúŠ^fú€^7f‹’ŗ0(3úĢŗfúĄŗ7fŠO0@}kŧú"Ofœ09] §0O‰q^ļ0a×ŧøŠ^Ÿú€^Vf‚’ŗļ03øĢŗŸúĄŗVfÆ0O00 ` F09` Žļ0W` ßKŊŊā ”ČSčãŠ@ŊĒ1´åeĐ0đœ ŋXŋĩcwdn ŋ‘ß_—÷ŧ11˜o˙ŊúŊufúŊũf’3ˆ§1@îŊøBˆV‰qI§1#´Ŋø€IV‚LŦ1#úLIgúLxgšž1wBüRuß_‘:1B15ģ—3ˆB1¸owžúBˆ‹gŠqIB1Ø#=žú€I‹g‹LN1đ#úLágúL!hšs1wBüRuß_’3ˆ1&oīžúBˆqh‰qI1 #ĩžú€Iqh‚LŠ1#úL‡húLļhšœ1wBüRuß_1l` ‘11Ĩ1ö\ t%ŋļy'°Ąž–Ā1Ęœ7ŋ™Á˙ ”°[‘ŽÁŗ&—0‘Éh’„‹Î1 —ēŋú•‹įh„Î1 ŦĄ‹^Î1 „•"^/ú^Mi×1Č_ —÷ŧô1(˜jĀúŊaiúŊÉi’3ˆr2@YĀúBˆ-j‰qIr2# Āú€I-j‚Lw2#úLLjúLyjš†2wBüRus‘û125ģ—3ˆ2H˜áĀúBˆŒjŠqI2h#¨Āú€IŒj‹L 2€#úLÄjúLķjšH2wBüRus’Y‹ 2 ˜Áúr‹kúh‹Įú€IHr‚LY4#úL[rúLˆršh4wBüRut‘Đ3Ø35ģ—3ˆØ3ČŠ˙ĮúBˆ›rŠqIØ3č#ÆĮú€I›r‹Lá3#úL×rúLsš4wBüRut’q^ø3§XČúŠ^Qsú€^is‚’ŗø33úĢŗQsúĄŗis 4O’3ˆ44 ŠĪČúBˆ‰s‰qI44#–Čú€I‰s‚L:4#úLžsúLËsšI4wBüRuo’3ˆn4ĨFÉøBˆutŸ‰qIn4# Éø€IutŸ‚Lt4#úLŪsúL tšƒ4wBüRuo‘Ē3R4ö\ ĢƒžU4˛œsÉ#Ė˙ ”°[‘‰ī‹ž4VĘúŒt‚ėSž4(úûSt‚‹Iž46úšIt‚qIž4Õú€It‚WIž4-úfIt‰Y‹ą4 X@Ęúr‹Ttúh‹st‘ģ4‰LĐ4 XwĘúBL†t•5Lú+LÉt‘Ũ4Š÷ŧŨ4X(ËúŊčtúŊ u’3ˆ*5@ËúBˆVu‰qI*5#ŪĘú€IVu‚L/5#úLuuúLĸuš>5wBüR‘o‘æ4î45ģŠ3ˆî48X ËúBˆĩuŠqIî4P#gËú€Iĩu‚L÷4#úLČuúLõuš5wBüR‘o‰3ˆ 5 XĖúBˆv‰qI 5#ßËú€Iv‚L5#úLvúLJvš5wBüR‘o(5ö\ ĢŸ/P5ęœ>ĖxĪ˙ ”°[‘hmĪĒŋ…8 ‘X‰ī‹^50õĖúŒ]v‚ėS^5(úûS]v‚‹I^56úšI]v‚qI^5Õú€I]v‚WI^5-úfI]vŠɋĢ5ˆ8ˆÍúڋ“vŒ3ˆĢ5¨;úBˆĻvŠqIĢ5Č#NÍú€IĻv‹L´5ā#úLŪvúLķvš6wBüRu_‰ɋÍ59Îúڋw3ˆÍ5;úBˆw‰qIÍ5#áÍú€Iw‚LĶ5#úL&wúL;wšá5wBüRw‰ɋ69ŽÎúڋNw3ˆ6;úBˆNw‰qI6#tÎú€INw‚L 6#úLcwúLxwš6wBüRw™#6:ĪøڋudŸ3ˆ#6;øBˆudŸ‰qI#6#Īø€IudŸ‚L)6#úL‹wúL¸wš86wBüRu_‰5Ŗ¸ĸ5XɐĢ5åĐÄ5#ːņ5āē!6ö\ °Ũžw@6ˆœ’ĪÉÔ˙ ”°[‘ąōwœ'‘øžÔĄJAx\F‘X——­^6 xŌĐúĘ­ËwúŊ­x ŦŨ­ŠõKk6@y YĐúLåxúLAy‰Ok6 NĐú"Oåxs69] €6h™O7ĘĐúBˆ´y‰qIO7#‘Đú€I´y‚LU7#úLÉyúLöyšd7wBüRu_‘j6X?ŅúBˆ zŠqI€6x#Ņú€I z‹L‰6#úLŽzúL{šH7wBüRu_—_Y§6¨{^ŅúnY/{’Lĩ6{—ŅúBL[{ú5L|{ú+L/{‘Á6—÷ŧÃ6Ā{CŌúŊ¨{úŊ×{’3ˆ˛7@2ŌøBˆW‰qI˛7#ųŅø€IW‚Lˇ7#úL|úL-|šÆ7wBüRu_‘Ę6Ō65ģ—3ˆŌ6ā{ēŌúBˆ@|ŠqIŌ6#Ōú€I@|‹LÛ6#úLb|úL„|š87wBüRu_—3ˆâ60}1ĶúBˆĸ|ŠqIâ6P#øŌú€Iĸ|‹Lč6p#úLÄ|úLæ|š#7wBüRs—Y‹7ˆ}`Ķúr‹}úh‹}‘ 7™d7ŋĶúBˆ+}‰qId7#˜Ķú€I+}‚Lj7#úL@}úLU}’3ˆ€7}6ÔúBˆh}‰qI€7#ũĶú€Ih}‚L†7#úL}}úL’}š•7wBüRu_’3ˆ™7{­ÔúBˆĨ}‰qI™7#tÔú€IĨ}‚LŸ7#úLē}úLį}šŽ7wBüRu_‘^6 6Â`z7ö\ Ļ ŲÂĐ7œę‚–ŒîÔÕā ”ÕāļÄ%ž1÷ŨÔ¸Wā77œ$ÕLÕøîÔ‘ú7‡` 8‡` Ž8 ` ´ū–™ 84œ¤Õ str™œ'‘ re™¤Õ‘„'8)ĄūžœĮ•‘hH8ŗ` ¤1§˜^ Đ`84œ&ÖøĨ^‘øą^‘™g8čÕŦž^„o8!úą^ú}úĨ^~„o8!¨ž^‘hˆ8ŗ` á] QÖŲ!%ņ(ŪĘn4QÖˑß'ũeÖ}Öā ”Jë__c ģ%ˆ_†9 8–œ™Öë×ø&_‘Šį^¤8 ņĢ׃_ƒö^Œ&Ö¤8 qƒCÖŠVÖŠ8Ā5uוoÖ ƒeÖŠ‰…˛8ā ŧ%×ú…-~69t$‹gRļ8ø ŧú€RK~úvR_~„đ8.ú€R}~úvR‘~ų8ņE‰ąÎ85Ÿ×úá…¤~Ö8›<Î8š<„9ú&_ˇ~‰ _,9ôßא19^ ,9´^ ˇ;ĐW@9œ&ؤˇÎWĄD‘R9î` Ž_9a ˇ!Đ]`9|œáؤˇÎ]ĄD‘ŸyŊ^€5Ë~ŸJ°_õCé~Ÿfa'Ÿk?b'1Ǥm\F‘s9ëא}9 ` Œ9î` ­9$a ‘Æ9Î9W` ßĐđØ!Ųā ”!ŲâîˇÎAЍî¤B\FâƒBˆ›DßæĪ5ŲJŲā ”!ŲāļÄ%v›D›yėā9ŅœpÛ¤p„JŲ‘(eÛǤ…\F‘ŠáØņ9@…¸ÚúđØP@…üØcŦ Ų‰ÜZ :AûŲøôZRŸúįZŒ0:B_ Š@Œ;:`C%ÚúKŒ A:]_ ™’:ŽÚƒBˆ‰qI’:#UÚƒ€I‚L™:#úLžúL뚨:wBüRug:´^  :Ia :da ;:&ØŠ&ŲJ:x‡ZÛú5ŲūŠ3ˆU:4OÛúBˆ€ŠqIU:¨#Ûú€I€‹LX:Ā#úL>€úL`€š:wBüRugU:za n:á\ ą:ö\ ›“ėĀ:œÛĶ:PŲ§ ø ā:œ˛Ûķ:PŲ›Ŗė;}œÆŨ¤O)Ģ˜7‘‰°I;J­ģŨúŋI~€‰ī¨;4¨Ũƒ$ŠúŠ‘€ú Ф€;4—ú⍑€úÔ¨¤€„;4ÔI;4~úôI‘€účIˇ€ŒŸ¨/;āgúŗ¨‌3ˆ/;ā]úBˆ qI/;#ĘÜú€I​L4;ø#úLúLTšG;wBüR‘_‚/ŠS;Šú>Šr¨S; ƒ.¨úD¨…ú8¨Ą„S;ę§W; ˛ƒõ§ú ¨´ú¨Ёŋ§W; MšƒΧúä§´úاЁ`;á\ l;á\ ĻõĶ,:€;œá\#3Ūč†GNeQčíŪN'éosO&7âæ,S€5æęT€5âæFY_€5›ž;¤œ)āą†GneQ‘ąíŪn'‘ oso&7‘ŒÚŨŸ;púũŨãúņŨ‚úåŨC‚¸ Ū„¸Ū@’ŅPŸ; QčŪúęP‚úāPぐŠ;č<’cPŠ;Qßø„PTŸúwPm‚š;:$™Ä;9Áß…$Ū€‚’cPÖ;]ißú„P§‚úwPŋ‚æ;:$šÖ;kQßüP‘üR0üQ@šú;kQüP‘üR ‘? ūüQ ‘‘? ū—cPũ;(bāú„PĶ‚úwP낇<:$ü‘iü‘1š/<kQüPwüR0üQsēô,@<„œå os:å‘ą3’: å‘’;_V<@°āúJ_ƒŌSV<XúáSLƒ‚WIV<úfILƒ’U_m<<>áúd_ŽƒėSm<MúûSă‚‹Im<6úšIă‚qIm<Õú€Iă‚WIm<-úfIă—cP~<@<âú„P„úwP1„‰O~<áú"Og„‹<9] ™H=( âú„P†„úwPš„‹=PJ=XúVP­„úLPÁ„’PR= ˜âú0P­„ú$PԄ_=ũš<:$’cP<LÁå>^ >"] Œzj>HOø‰j‘ø“jR÷ĄjÚF >œ æ8æø˛j‘°d$>Tøŋd‘øŋd‘ęī@Iæ^æā ”SāļÄ%÷8æČŗCœzæįøIæ‘—3ˆ`@úæúBˆzˆŠqI€#Áæú€Izˆ‹L˜#úLŦˆúL؈šAwBüR‘o2L@úAL÷ˆ‘-ßH+įWįā ”WįāļÄ%āŊŦ\įë__mø8Û4Lv… ߎ vį•įā ”•įāļÄ%āŊŦšįaįLߌDŽįÍįā ”MāļÄ%āŊŦÍįLä üäįīįā ”ģ_÷Ōįí.@>Ŧœ č†ęøäį‘ŠįS>°Ũé•Iįú+į‰Š S>ā`čúY‰‘`>Šgį`>  éúŠįωúvįĮ‰ŠŸį`>H #?ščƒÂįúŽįĮ‰Ņ> ũŠ MÖ>p #?éčƒ/MúM˙‰ö> ũ‚ÔLÜ?#?ƒ÷LøãLSŠ-?ˆ  éúFZŠú<zŠ—ķŒ?¨ cXéúzŠ‘Z?˜Œh?cú§ŒĮŠ‚XŒh?ŧƒ~ŒúqŒ‹úgŒĮЉaL›?ÆéúpL,‹‘Ģ?x? ũ‘Į?‘Ô?Š|x?Č ęú•A‹ú‹n‹Šš{?ā ’gęú⍎‹ú֍¤‹ŒķQ{?ø $ŌúRĪ‹ú Rė‹ø …RŒS>r] ŗ?á\ ģ?ö\ ēšėđ?īœĢđ¤áfĢđ‘¤M?œ'‘¤ņĐœ'‘ ¤cœ'‘! đŸaYœ'Œģmsgįû‘\ŠT`ų?0!}ëúc`JŒŠ`ų?P!Dëú*`jŒ‚ŌS@úáS’Œ‚WI@úfI’Œ‰ˇį!@čëú×į´ŒúÍį܌„!@…|cŒcP$@h!ƒú„P´ŒúwP 7@:$ŠŽ_:@€!ėúŽ_.ú¤_Ļ—cPB@ !™nėú„PՍúwP草OB@ cėú"OՍK@9] \@:$Ā!ƒŽ_ú¤_ސ|AcPŠOč\@Ø!ķėúoč-ŽƒečØ!…|cŒcPb@đ!ƒú„P-ŽúwPUސu@:$ŠŽ_x@"›íúŽ_uŽú¤_͎—cP€@("™yíú„PüŽúwP‰O€@ níú"Oüސ‰@9] š@:$H"ƒŽ_ú¤_?œAcPŠēéĨ@`" îúÚéTúĐél`"…|cŒcP¨@x"ƒú„PTúwPģ@:$ŠŽ_ŧ@˜" 6îúŽ_ąú¤_ɏĖ@cPŠ&éĖ@¸" ™îúFéŪƒ<鍸"…|cŒcPŌ@Đ"ƒú„PŪúwPöâ@:$‰Očå@ īúočúeč>„å@…|cŒcPč@č"ƒú„PúwPmû@:$ŠŽ_ū@# ŦīúŽ_ú¤_՗cPA#™Šīú„PôúwP‘‰OA īú"OôA9]  A:$8#ƒŽ_ú¤_7‘ŧAcPŠīæ#AP# ÖīúįL‘1A&bŠMį1Ah# 7đú^įn‘Œk1A€#Uúkn‘‹åj1A˜#úūj‘úôjn‘‰MįÁA •đø^įudŸkÁAUøkudŸ‚åjÁA•ūjøôjudŸ!@īįßAö\ 9ēâė圓ķœaėœ'¤‘œĀíœ'鑝°#ˆķĒ-Bîįû‘\‰nķ#đFņúŽķ0’ú„ķH’„#…|c3cP‰&é?đŒņúFé[’ú<és’„?…|cQcPŠOčTČ#ôÎņúo膒úečž’Č#…|cgcP‰Āķvōōúāķú’úÖķ“„v…|c†cP‰&éˆôZōúFé'“ú<éO“„ˆ…|cšcPŠīæœā#ö„ōúįb“Ĩ&bŠMįĨø#öåōú^į‘“ŒkĨ$Uúk‘“‹åjĨ($úūjĀ“úôj‘“‰MįŋöFķú^įā“kŋUúkā“‚åjŋúūjõ“úôjⓐīįš?ËRmķüPwüRsštËRüPwüRuTÛö\ á-ĩķéosčĩķésbčēķŧ15v˙´ēūėāA$œ˛˙¤%Ô˛˙‘ĨstrÔœ'‘¤Ü/Ôŋķ‘@$§˙ģendÖ°*‘PŸ{9ס˙ ”Ÿ3’æ"íO”x$ĀųģmsgÜįû‘TŠH꥗cP-F°*™hú„PvĄúwP‰Ą‰O-F ]ú"OvĄ6F9] GF:$Đ*ƒŽ_ú¤_šĄ¤FcPŠMįWFč*„ëú^įÎĄŒkWF+UúkÎĄ‹åjWF+úūjđĄúôjÎĄ‰MįĻF„Iø^įudŸkĻFUøkudŸ‚åjĻF•ūjøôjudŸ÷EސFīįWFÅķÄFö\ ējíĐFtœa œšŧÅœ'ĸ0+V ĒeÆ\F‘Xǝ|Éįû‘\‰ŌëæFĮ3øōë7Ÿúčëbĸ„æF…|cŒcPéFX+ƒø„P7ŸúwPĢĸüF:$ŠŽ_˙Fp+ĮŒúŽ_Îĸú¤_öĸˆ+ƒŽ_ú¤_LŖŨGcPGcPŠīæG +Į˛ƒį)G&bŠMį)G¸+Įú^įaŖŒk)GĐ+UúkˇŖ‹åj)Gč+úūj¤úôjˇŖ,žiĘ',¤Š_YKG,Ę„únYK¤‹qIKG0,Ûú€IK¤‹WIKGH,-úfIK¤Šũ`G`,ËŽú*ũ`¤mGa ‹œcmGx,˃ŧcú˛c‚¤x,…|cŒ—PvG˜,ƒú¸P—¤úĢPǤ‚G:$ŠīæG¸,Î8úįŊ¤œG&bŠMįœGĐ,É™ú^įų¤ŒkœGč,Uúkų¤‹åjœG-úūj5Ĩúôjų¤Š3ˆ˛G-ÎúBˆUĨ‰qI˛G#Øú€IUĨ‹L¸G0-#úL‘ĨúLÍĨšęGwBüRud‰3ˆöG ΉúBˆ ωqIöG#Pú€I Ļ‚LüG#úL ĻúLMϚ HwBüRu_‰MįHÉęú^į`ĻkHUúk`Ļ‚åjHúūjuĻúôj`Ļ™-HA ø^įudŸk-HUøkudŸ‚åj-H•ūjøôjudŸæFīįKGīįHö\ ›íPHjœv ¤šŧūœ'‘¤ ūü$‘H-ǝ|˙\F‘lîˆĪ0‘‰yYgH â ú„Y‰ĻsHķ;Š3ˆ‹Hh-Z øBˆ‘lŸ‰qI‹H#! ø€I‘lŸ‹L’H€-#úLĻúLĘϚąHwBüR‘kšgHsüP‘lüR‘› íĀHPœ‹ ¤šŧœ'‘¤ œ'‘˜-ǝ|\F‘lîÜ/ 0‘ŠyYŅH°- ÷ ú„YøĻŨHķ;Š3ˆäHČ-!o øBˆ‘lŸŠqIäHč-#6 ø€I‘lŸ‹LđH.#úL §úL9§š IwBüR‘kšŅHsüP‘lüR‘ēŋíIÁœr¤šŧœ'‘¤ ˙´‘.gǝ| \F‘LîˆĪ 0‘Ē3’˙´‘PŠyY'IH.  ú„Yg§2Iķ;ŠĀķNI`.‡ úāķ{§úÖķç`.…|cŒcPTI€.ƒú„P{§úwP÷§dI:$Š‹čdI .F úĢč¨úĄčF¨ .…|cŒõbdIĀ.ƒú(c¨úco¨‰‹IdIŲ 9 úšI¨‚qIdIÕú€I¨‚WIdI-úfI¨zI:$ŠMįˆIč.§ ú^į’¨ŒkˆI/Uúk썋åjˆI/úūj Šúôj썊3ˆĒI0/úBˆ5ЊqIĒIP/#æ ú€I5Š‹L°Ip/#úLWŠúLyК`JwBüRudŠ@cŪIˆ/aú`c—ŠúVcŋŠˆ/…|cëI=ŠīæėI /‹úįነųI&bŠ3ˆJ¸/úBˆNJqIJĐ/#Ęú€IĒ‚LJ#úLĒúL-ǚJwBüRw‰Mį Jdú^į@Ēk JUúk@Ē‚åj JúūjUĒúôj@ljMįmJÅú^įiĒkmJUúkiĒ‚åjmJúūj~Ēúôjilj3ˆ€J$=úBˆ’ljqI€J#ú€I’Ē‚L†J#úL§ĒúLÔǚ•JwBüRuS‰Mį¤Jžú^įįĒk¤JUúkįĒ‚åj¤JúūjüĒúôjįlj3ˆģJøBˆudŸ‰qIģJ#Ũø€IudŸ‚LÁJ#øLu\ŸúL̚ĪJwBüRwš'Is4üPuTüRuNIīįˆIÅķÜIīįJ"] AJ´^ žJö\ ß!ü˜ā ”ģ_émsg`˜5ˆr2œšÎø‘ø‹‘—įč/`••Iįú+į#̊ 0úũĢ‘&Šgį&00ÂúŠįYŦúvįyŦŠŸį&h0#?oƒÂįúŽįyŦ— ũŠ M˜˜0#?Ÿƒ/MúMH­¸ ũ‚ÔL #?ƒ÷LúãL#ފ-ð0XúF6Žú<bŽ—ķŒÃĐ0cúbŽ‘˜Œ*cú§ŒįŽ‚XŒ*ŧƒ~ŒúqŒp¯úgŒįމaLŽ~úpL„¯‘< ũ‘ ‘—īæ>đ0ažúᙝN&b’|D`įú•°ú‹š°—õbO1arú(c(ąúc~ą‰‹IOŲ gúšI(ą‚qIOÕú€I(ą‚WIO-úfI(ąb:$—3ˆb81aéúBˆ–ąŠqIbX1#°ú€I–ą‹Lkp1#úLŌąúL˛šˆwBüRuc’3ˆĐa`úBˆ!˛‰qIĐ#'ú€I!˛‚LÖ#úL6˛úLc˛šåwBüRuc’kå`Ĩúkv˛‚åjåúūj‰˛úôjv˛r] Čá\ Đö\ ö\ ēŪíāJKœÕ'¤öqœ'‘¤ˆÄœ'‘¤xcü$‘ˆ1Ę'Ÿ$"흲ŸŪ%"íō˛ 1Ũģmsg:ā‘X‰üpK;Ãú#ü&ŗúünŗ„pK…|cŒcPsKČ1ƒú„P&ŗúwPĸŗ†K:$ŠoûˆKā1<úûÅŗú…û ´ā1…|c™KcPŠÖö™Kø1<lúööA´úėö‰´ø1…|cŒcPŸK2ƒú„PA´úwPŊ´¯K:$ŠÁû¯K82<ĶúáûŨ´ú×û%ĩ82…|cŒcPĩKX2ƒú„PŨ´úwPYĩÅK:$Š:íÅKx2=:úZíyĩúPíÁĩx2…|cŒcPËK˜2ƒú„PyĩúwPõĩÛK:$ŠoûÛK¸2=Ąúûļú…û]ļ¸2…|cŒcPáKØ2ƒú„PļúwP‘ļņK:$Š&éņKø2=úFéąļú<éųļø2…|cŒcP÷K3ƒú„PąļúwP-ˇL:$Š@cL83=Jú`cMˇúVcĨˇ83…|cL=ŠēéLX3>ąúÚéŲˇúĐé!¸X3…|cŒcPLx3ƒú„PŲˇúwPU¸,L:$ŠÁû,L˜3>úáûu¸ú×ûŊ¸˜3…|cŒcP2L¸3ƒú„Pu¸úwPņ¸BL:$Š&éBLØ3>úFéšú<éYšØ3…|cŒcPHLđ3ƒú„PšúwPšXL:$Š@cZL4>Áú`c­šúVcõš4…|cgL=ŠēégL 4>(úÚé)ēúĐéqē 4…|cŒcPmL@4ƒú„P)ēúwPĨē}L:$ŠMį‰L`4>‰ú^įÅēŒk‰Lx4Uúkųē‹åj‰L4úūjRģúôjųē‰īæŸL ?ŗúįŠģĢL&bŠ3ˆļL¨4?+úBˆšģŠqIļLČ4#ōú€Išģ‹LŋLā4#úLÛģúLũģšŲNwBüRu\™*O…ú^įŧk*OUúkŧ‚åj*Oúūj0ŧúôjŧ™AOßú^įDŧkAOUúkDŧ‚åjAOúūjYŧúôjDŧ‰3ˆŋO?WúBˆmŧ‰qIŋO#ú€Imŧ‚LÅO#úL‚ŧúL¯ŧšÔOwBüRu\‰MįÔO"A¸ú^įÂŧkÔO"UúkÂŧ‚åjÔO"úūj×ŧúôjÂŧpKīᑉLļLŪ‹ØL´^ ø4z"ģmsg2ā‘TŠûôM539ú=ûëŧú3û3Ŋ5…|cNcPŠÁûN054{úáûgŊú×û¯Ŋ05…|cNcPŠÖöNP54ŊúööãŊúėö+žP5…|c-NcPŠ@c-Np54˙ú`c_žúVc§žp5…|c#?3ƒ/MúM(ՐžV ũ‚ÔLhY#?ƒ÷LúãLÕŠ-ÔV@>Į3úF—Õú<Ģ՗ķŒÔVh>c3úĢՑFW˜ŒiW cú§ŒւXŒiW ŧƒ~ŒúqŒmÖúgŒ։aLGY!í3úpL‚Ö‘`YyW ũ‘1Y‘DYŠYãyW€>f5ú‚ãąÖúvãČ֌Á1‹W¨>$´úÚ1×úĐ1׍¨>…é18׋Ē…‹WČ> ‚úš…׋V֐Xč> púoÖM×úeÖo׊‰…“X? ŧË4ú…×Yt$‹gRX(? ŧú€Rę×úvR ؍H?ú€RQØúvRsؐÁXņEŠ”ã™W`?f{5úŊã•ØúąãšØŒ*R™Wx?$đú9RŲúCR3Ų?…RRS؊ÕãēW¨?gĨ5úäã€ŲĘW(Š(ĘWČ?g7ú (˛ŲŠ8æĘWč?5}6úIæäŲ—3ˆĘW@@[6úBˆڊqIĘW(@#!6ú€IڋLūW@@#úLHÚúLzښëXwBüRuĢ~2L X@úAL˜Ú‘"X‰D("XA5ë6ƒg(úS(ŧڊ–L+XX@#;Č6ƒšLúĨLāڋÔL1Xp@#;ƒ÷LúãLۂaLcX5úpL(ۑ{XšW=‘Y Yö\ hYö\ ŧԜrYĻœ2>¤Ü/r%‘ˆ@>ģsss ‘¤~Šį–Y°@s@9•Iįú+įeۊ –YØ@Á7ú°Û‘ĢYŠgįĢYAm8úŠįÜúvį4܊ŸįĢY8A#?8ƒÂįúŽį4ܐZ ũŠ MZhA#?J8ƒ/MúMܐAZ ũ‚ÔL]#?ƒ÷LúãLņ܊-WZ€A9úFŨú<Ũ—ķŒWZ¨Acģ8úŨ‘ÉZ˜ŒėZ cú§Œ~Ũ‚XŒėZ ŧƒ~ŒúqŒŨŨúgŒ~Ũ‰aL÷\!)9úpLōŨ‘]üZ ũ‘á\‘ô\ŠYãūZĀAtW:ú‚ã!Ūúvã8یÁ1[čA$´úÚ1uŪúĐ1ŠŪčA…é1¨Ū‹Ē…[B ‚úš…ŠŪ‹VÖ8\(B púoÖŊŪúeÖßۊ‰…;\HB ŧ:ú…ũېˇ\t$‹gRE\hB ŧú€RZßúvR|ߍˆBú€RÁßúvRãߐi\ņEŠ”ã'[ Btˇ:úŊãāúąã)āŒ*R'[¸B$đú9RāúCRŧāĐB…RRÜāŠŅP*[čBuë:úęP÷āúāP&áa[č<‰ ä8[tŧ;ƒ#äúäqáÕ'A[„úā'ÕႯQA[!¯úÕQčáúČQ âúžQÕá„A[…äQ*₆QA[!VúQ>âú‘Q`âõOA[!`ú P>âúP*≠äG[tƒ<ƒ#äúäuâķ'G[„úū'Õá‚2QG[!múKQĀâúAQÕá„G[…ZQäâ‚QG[!EúQĀâúQ`âŅOG[!\účOĀâúÜOäâŠÕãb[Cv­<úäã˙âr[(Š(r[(Cv>ú (1ãŠ8ær[HC5…=úIæcã—3ˆr[hC@c=úBˆ•ãŠqIr[ˆC#)=ú€I•ã‹LĻ[ C#úLĮãúLųãš›\wBüRuĢ~2Lą[@úALä‘Ę[‰D(Ę[A5ķ=ƒg(úS(;䉖LÚ[#;Đ=ƒšLúĨL_ä‚ÔLõ[#;ƒ÷LúãLƒä‚aL \5úpL§ä‘#\‘Č\Đ\ö\ ]ö\ ē‚Ũ@]…œFĨstrD F‘¤TqD ü$‘¸C FģmE įû‘XØCEžiG 'ä䉋IY]G ī>úšIå‚qIY]Õú€Iå‚WIY]-úfIåđCžchH ĸ'8å‰.ë]"N p?úNë"æúDë:愐]"…|cŒcP“]Dƒú„P"æúwPOæĻ]:$Šœc˛] De ×?úŧcræú˛cŠæ D…|cŒ—P˛]8Dƒú¸PŸæúĢPžæÃ^:$‰.ëđ] K B@úNëŅæúDëéæ„đ] …|cŒcPķ]XDƒú„PŅæúwPūæ^:$‰Ōë^U ­@úōë!įúčë9į„^…|cŒcP^pDƒú„P!įúwPNį0^:$‰Üę8^ Q Aúüęqįúōę‰į„8^ …|cŒcP;^ˆDƒú„PqįúwPžįN^:$‰Ōë^^"[ ƒAúōëÁįúčëŲį„^^"…|cŒcPa^ Dƒú„PÁįúwPîįt^:$‰(Ž€^'` ŋAú3Žč‚ÅZ€^Ķ úĐZč‰œcĐ^ ] &Bƒŧcú˛c1č„Đ^ …|cŒ—PĶ^¸Dƒú¸PFčúĢPfčé^:$‰œcđ^ W Bƒŧcú˛cyč„đ^ …|cŒ—Pķ^ĐDƒú¸PŽčúĢPŽč _:$ŠÖö(_čDb ôBúööÁčúėöŲččD…|cŒcP,_Eƒú„PÁčúwPîč<_:$Š‹č<_(Eb ŗCúĢčéúĄč#é(E…|cŒõb<_HEƒú(céúc8鉋I<_Ų ĻCúšIé‚qI<_Õú€Ié‚WI<_-úfIéR_:$Š&éR_pEc DúFé[éú<ésépE…|cŒcPX_Eƒú„P[éúwPˆéh_:$Š3ˆh_°Eb ’DúBˆ¨éŠqIh_ČE#YDú€I¨é‚Lq_#úLŊéúLę隇_wBüR‘[‰3ˆ_b EúBˆę‰qI_#ŅDú€Ię‚L–_#úL-ęúLZęšĨ_wBüR‘['_47ŠīæŊ]āEk @EúįmęË]&bŠMįË]øEk ĄEú^į‚ęŒkË]FUúk‚ę‹åjË](Fúūj—ęúôj‚ę‰MįĨ_ k Fú^įĢękĨ_ UúkĢę‚åjĨ_ úūjĀęúôjĢęY]īįÁ_ö\ Ē1ē…ŪĐ_œ*M¤3’H *M‘@FMĒޏI įû‘T`F(LžiJ %ÔęŠ6på_€FJ ēFúHp,ë‹Īdå_€F[úŪdJëúŪdJ덨FŸ¯*K /My늎_`ØFL uGƒŽ_ú¤_—ë—cP`øF™SGú„PÆëúwPŲë‰O` HGú"OÆë `9] `:$GƒŽ_ú¤_ ėacPŠ&é`0GL ØGúFéėƒ<é0G…|cŒcP `PGƒú„PėúwPVė3`:$Š&é3`pGM ;HúFévėƒ<épG…|cŒcP9`Gƒú„PvėúwPŽėI`:$Š‹čI`°GM öHúĢčÎėƒĄč°G…|cŒõbI`ĐGƒú(cÎėúcũ뉋II`Ų éHúšIÎė‚qII`Õú€IÎė‚WII`-úfIÎė_`:$Š&é_`øGM YIúFé-íƒ<éøG…|cŒcPe`Hƒú„P-íúwPeíu`:$Š3ˆu`8HM ŅIúBˆ…íŠqIu`XH#˜Iú€I…í‹L~`pH#úL´íúLã횀awBüRu[Š3ˆ‰`ˆHM IJúBˆî‰qI‰`#Jú€Iî‹L`¨H#úL#îúLEîš+awBüRudŠ,÷Í`ČHM sJú7÷sîß`2>Š&éā`čHL ÚJúFéŌîú<éīčH…|cŒcPæ`Iƒú„PŌîúwPVīö`:$‰Û`ã`L &Kƒę`‚ŌSã`ÚƒáS‚WIã`ƒfI‰3ˆĨaM žKúBˆvī‰qIĨa#eKú€Ivī‚LĢa#úL‹īúL¸īšēawBüRu[‰3ˆēaM LúBˆËī‰qIēa#ŨKú€IËī‚LĀa#úLāīúL đšĪawBüRu[¸`¯k‘Í`Šīæ@aIO RLúį đNa&bŠMįNa0IO ŗLú^įBđŒkNaHIUúkBđ‹åjNa`IúūjdđúôjBđ‰Mį‡aO Mú^įxđk‡aUúkxđ‚åj‡aúūjđúôjxđå_īᐪaö\ ¸949÷8æY0KœPMNøIæ‘—8æxI@NúIæĄđ—3ˆI@îMúBˆËđŠqI°I#ĩMú€IËđ‹LČI#úLũđúL*ņšIwBüR‘o2L@úALHņ‘-5á\ ÷4g‘Kœ7NĖNøCg‘øMg‘Š3ˆāIŽÁNúBˆgņ‰qI#ˆNú€Igņ‹LøI#úL…ņúLŋņšIwBüR‘o-á\ ßB âNOITįûā ”`ŪÜ/OITįû5ēîāažœhZ¤Ŗčœ'‘¤ęŦéœ'‘¤üęhZ‘ ¤ĪAëmZ‘¤l"ėü$‘J]Zģmsgíįû‘L‰ˇįbîõOø×į›ŸúÍįŨņ„b…|cŒcPb(Jƒø„P›ŸúwP ōb:$ŠŽ_b@JîPúŽ_/ōú¤_‡ō—cP"bXJ™{Pú„PÃōúwPÖō‰O"b pPú"OÃō+b9] dåWú^įíųk>dUúkíų‚åj>dúūjúúôjíų6cīįzcg‰sį%c û\X‚ī_%c Îú`úúū_Bú‚Å_)cúŪ_~úúÔ_ĒúŠzįœc Mû@YúŒįæú‹~ˆœcĀMúˆû‹4gœcāMúMgDûúCgûŠ3ˆĻcNŽ3YúBˆdû‰qIĻc#úXú€Idû‹LĢcN#úL‚ûúL¤ûš7dwBüRvģcá\ ‰MįžcûĄYú^įÂûkžcUúkÂû‚åjžcúūjäûúôjÂû‰zįQdûįYúŒįøû‚~ˆQdúˆ ü^d4g‰Mįad"ûHZú^į:ükad"Uúk:ü‚åjad"úūjOüúôj:übīįœcw^}dö\ Ē1Ē1ßj ˆZ§ZITā ”`ŪÜ/§ZITאŊB Ā d#œĮZ‚_˙ ”V‘0Nw_ĒÁÄ ‘Šī_ądHNÁ<[ú`cüúū_{ü‚Å_ąd•Ū_úÔ_ŧü‰`¸dÂ\[ú*`ũŠrZÄd`NÃ;_ú’Z8ũúˆZLũŠ‹čĐdxN0\ƒĢčúĄč‚ũxN…|cŒõbĐd˜Nƒƒ(cúcąũ‰‹IĐdŲ #\ƒšI‚qIĐdÕƒ€I‚WIĐd-ƒfIåd:$ŠgådĀNn^ú!gÔũúgöũ‰īæīd,ƒ\úįūūd&b‰ŌSūd,ŋ\úáSCū‚WIūdúfICūŠõKeāN,]úLrūúL›ū‰Oe ]ú"Orūe9] ehŠ3ˆeøN,•]úBˆ¯ūŠqIeO#\]ú€I¯ū‹Le0O#úLŅūúLķūšPewBüRuo‰˜Œde+á]ú§Œ˙‚XŒdeŧƒ~ŒúqŒ<˙úgŒ˙‰3ˆ~e,Y^úBˆP˙‰qI~e# ^ú€IP˙‚L„e#úLe˙úL’˙š“ewBüRuober] te4g‰Mį$eĪ^ú^įĨ˙k$eUúkĨ˙‚åj$eúūjē˙úôjĨ˙‰Mį“e0_ú^įÎ˙k“eUúkÎ˙‚åj“eúūjã˙úôjÎ˙Đdīį„ĻeúŒį÷˙‚~ˆŠeúˆŗe4gģeö\ ē,-ĐeŖœpf¤-BĶpf‘ŠĖNÖeHOÔÕdúėN7úâNoŠįđe€OĘaú1įžú'į֍€O…|cŒ“ķøe¨OƒúŠķúžķJ—īæøeČOéR`úįf&b—õbfāOéŨ`ú(csúcŲ‰‹IfŲ Ō`úšIs‚qIfÕú€Is‚WIf-úfIsf:$—3ˆfPéTaúBˆŠqIf P#aú€I‹Lf8P#úL]úL™šČfwBüRu\3ˆ\géøBˆuXŸ‰qI\g#Žaø€IuXŸ‚Lbg#úLˇúLäšqgwBüRu\Šg)fPPdú!g÷úg3‰īæ4f,búįoCf&b‰ŌSCf,YbúáSĢ‚WICfúfIĢŠõKFfxP,ˇbúLîúL1‰OFf Ŧbú"OîOf9] ^fhŠ3ˆ^fP,/cúBˆQŠqI^f°P#öbú€IQ‹LgfČP#úL‰úL¸š×fwBüRv‰˜Œüf+{cú§ŒÖ‚XŒüfŧƒ~ŒúqŒúgŒÖ‰3ˆ-g,ķcúBˆ‰qI-g#ēcú€I‚L3g#úL*úL?šAgwBüRvúfr]  g4g‰Mįnfidú^įRknfUúkR‚åjnfúūjúôjR‰MįAgĘdú^įĄkAgUúkĄ‚åjAgúūjļúôjĄđeīįŠsįÜeāPÔ1e‹ī_ÜeāPΕ`úū_Ę‚Å_äe•Ū_úÔ_ųŠzįŽføPÔfúŒį(‹~ˆŽfQúˆW‹4gŽf8QúMg†úCgWŠ3ˆ˜fXQŽfúBˆĻ‰qI˜f#Īeú€IĻ‹LfpQ#úLÄúLæšįfwBüRw­fá\ ‰zįgÔ[fúŒį‚~ˆgúˆ#g4gŽfw^+gö\ 5ßŌ„fšfā ”‚īëp‹ö6ßu¨Šfžfā ”˙āļÄ%÷uf™;yœÚf0hø„f‘øŽf‘ŠšfˆQŽhúŠfF’īŠ õ4gúúŠd)da —3ˆ, QķĢgúBˆw‰qI,#rgú€Iw‹L1¸Q#úL•úLˇšXwBüRug3ˆ\ķøBˆS‰qI\#ágø€IS‚La#úLÕúLšpwBüRugAá\ yö\ §—­a.WœMiøŊ­‘øĘ­‘ĐQBi¨Ũ­‘‰õKy ĖhúLúLW‰O Áhú"O9] *h™:;iøBˆu‰qI:#iø€Iu‚L?#úLƒúL°šNwBüRuw‘Wö\ ›!uœkŲ!%ņ(Ļņ¤ L%´œ'‘¤Õ%ĩk‘čQk J%¸ø@%šhîC%ēËi˛iĒß1%ģĻi‘‰O %ē jú"OÐ9] ‰˜Œ%ģWjú§Œų‚XŒŧƒ~ŒúqŒ% úgŒų‰‹I"%ŧwjúšI9 ™XčjúBˆ{ ‰qIX#¯jú€I{ ‚L]#úL úLŧ šlwBüRug1>hGuö\ א›Jî€gĀœŒoœ2ŧœ+ĻĪ RoģstrĄë‘XŠ6äāgRĢkúNäW úAäk RŦ[äŠ6ääg0RŦÄkúNäƒ úAä— 0RŦ[䊗­.hHRžĻlúĘ­¯ úŊ­į HRŦŨ­ŠõK:hhRy -lúL úLE Ghh™īhžlúBˆe ‰qIīh#elú€Ie ‚Lôh#úLy úLĻ šiwBüRu[‘7hŠ3ˆGh€RžmúBˆš ŠqIGh R#ålú€Iš ‹LPh¸R#úL× úLų ščhwBüRu[‰3ˆ[h%ž–múBˆ ‰qI[h#]mú€I ‚Lah#úL, úLA šshwBüRvŠ6ä€hĐR§ÍmúNäT úAäh ĐRŦ[äŠ6ä hčR°núNä€ úAä” čR…[äŦ Š6äąhSą?núNä úAä SŦ[äŠ6äšh S˛vnúNä, úAä@  SŦ[ä‰3ˆižînúBˆX ‰qIi#ĩnú€IX ‚L i#úLm úLš šiwBüRu[‰3ˆi&žfoúBˆ­ ‰qIi#-oú€I­ ‚L i #úL úLī š/iwBüRu[‘´g hw(.hMi8iö\ ›dî@iÜœ-sĨstrÜ5(‘œĪÜ%8S"sĒáėā ‘¤~`S˜qžiá%ExSŸŠ&â+χŠõbĸi Sî˜pú(cšúcˉ‹IĸiŲ púšIš‚qIĸiÕú€Iš‚WIĸi-úfIšši:$Š3ˆšiĀSîqúBˆŠqIšiāS#×pú€I‹LÅiøS#úL;úLxšÚiwBüRu§~‰3ˆ˙jîŒqøBˆu¨~Ÿ‰qI˙j #Rqø€Iu¨~Ÿ‚Lk#úL–úLÅškwBüRu§~ĄikŠ(ōiTđsú (ØŠ8æōi0T5prúIæ —3ˆōiPT@NrúBˆ<ŠqIōipT#rú€I<‹L&jˆT#úLnúL šßjwBüRu¨~2L1j@úALž‘Jj‰D(JjK5Ūrƒg(úS(≖L_j#;ģrƒšLúĨL‚ÔLzj#;ƒ÷LúãL*‚aL•j5úpLN‘­j‘jiōi&bÉjø+‘õjũjö\ ›ƒî kÚœĩuœ)yx5(‹œēx'Šmsgy5ų TĒužiz'0Š‹č[kČT|LtúĢčrúĄč”ČT…|cŒõb[kāTƒú(crúc´‰‹I[kŲ ?túšIr‚qI[kÕú€Ir‚WI[k-úfIruk:$Š3ˆukU|ÄtúBˆÍŠqIuk U#‹tú€IÍ‹L~k8U#úLīúLšØkwBüRucŠœc kPU€'uƒŧcú˛c/PU…|cŒ—PŖkhUƒú¸PCúĢPWÁk:$‰3ˆÜk|ŸuøBˆudŸ‰qIÜk#fuø€IudŸ‚Lâk#úLzúL§šņkwBüRuc[kŒoúkö\ ÷ũũ˜ølœŅuNvøū‘øū‘ŠÉũlˆUĸ;vúØũē‹ÄIl UÛúĶIē‹ĨIl¸U-ú´Iēšl-süQsŖœõ lOœ†v¤įõ5(‘ú€I*‚Lrs#úL¤*úLš*š€swBüRv‰3ˆ”s ¨īúBˆĖ*‰qI”s#ļú€IĖ*‚Lšs#úLá*úL+šŠswBüRu_‰3ˆ´s¨g‘øBˆu`Ÿ‰qI´s#.‘ø€Iu`Ÿ‚Lēs#úL!+úLN+šÉswBüRu_s`;s †Gs †\sO˛sö\ ›žīĐsēœ““^ž$%œ)5(a+Šlen'+Šos&7š+„ŨsĸĒÃ40‘/ŸŸmÜü$å+‰cPŨs O’ø„P/ŸúwPš+ęs:$™ęs…^“ŸáS',¨[žcur;(N,‰ĢåtĒúļåx,„t…Äåx,-t¤a ŠcP8tĐ[ ø’ú„P—,úwP¯,Kt:$‰cPKt ,“ú„PÂ,úwPÚ,[t:$š tŊ€B“üRvšktŊ€üP‘\üRv‚cPotø„PßúwPí,t:$áãīΓ^ž$%Ū)5(ëlen'ëos&7› đtNœŠ”¤)15(‘Ĩlen1'‘Ĩos1&7‘‹““ tč[2úÁ“-ú´“D-ú§“z-ŠcPŗt\'t”ú„P°-úwPČ-ŽĐt:$šŗtš‘Š”üQs‡Ūtš‘üR‘1üQ‘›)đātaœŸ•ĨsG5(‘ĨosG&7‘‰Øäņt K•úņäį-úįä.ûtc=‰cPûtKB•ú„P;.úwPS. u:$‰cP(uIy•ø„PŸúwPf.8u:$uø+‡#uš‘üP‘üQ‘§Øå 5Puœ2–øã呸î告xMPu(\e–ø‡M‘‹ÄIPu@\ÕøĶI‘‹ĨIPuX\-ø´I‘‡buš‘üQ‘áxŠW–ëstr&Ô5(ëos&Ô&7›g-ĪœũIT5(¤Ü/&Oũ‘p\čģss&P ‘¤~Šį˜\&Pg˜•Iįú+į….Š Ā\č–úĐ.‘Šgįđ\”—úŠį/úvį8/ŠŸį ]#?A—ƒÂįúŽį8/† ũŠ M†P]#?q—ƒ/MúMƒ/Ž ũ‚ÔLW#?ƒ÷LúãL0Š-Äh]*˜úF0ú<Q0—ķŒĐ]câ—úQ0‘6˜ŒT cú§ŒÆ0‚XŒT ŧƒ~ŒúqŒ/1úgŒÆ0‰aL<P˜úpLD1‘Oc ũ‘&‘9Š2–k¨]&QNœúJ–Z1ú=–Ī1ŠRæŠØ]&Øž™úqæ2údæk2Ø]‹(æŠØ]&ôú@æ2ú3æk2‹æŠØ]&Xúæ2ú æk2‹ØåŠØ]&ßúîå2úãåk2‰xMŠe†™ú‡Mk2‚ÄIŠÕúĶIk2‚ĨIŠ-ú´Ik2šĄš‘üQu´~Š…æĄđ]&Øđšú”æš2ŠÄIĄ^#ų™úĶIš2‚ĨIĄ-ú´Iš2‹NĒ(^#úNŨ2úN3P^úND3úNZ3—ŨKĀh^öãšúôKo3účK„3™É ¨šúôKŲ3účKî3€KÉ Rú—KŲ3ú‹Kî3ĒKø TúÁK4úĩK4„ø …ĪK>4ō"Š…æq€^&Ø=œú”æQ4‰ÄIq #K›úĶIQ4‚ĨIq-ú´IQ4‹Nz˜^#úNu4úN™4„™6øNuĻ~ŸøNV—ŨK™°^ö0œ˜ôKøčKvŸ™Ĩú›úôKˇ4účKĖ4€KĨRú—Kˇ4ú‹KĖ4ĒKÄ T˜ÁKøĩKvŸ„Ä ¨ĪKRŋ"‘А¤cPŠÕãŧĐ^&Rxœúäãá4Î(Š(Îč^&Ráú (5Š8æÎ_5PúIæE5—3ˆÎ(_@.úBˆw5ŠqIÎH_#ôœú€Iw5‹L`_#úLŠ5úLÛ5šģwBüRu¨~2L @úALų5‘&ŠD(&x_5žƒg(úS(6Š–L/_#;›ƒšLúĨLA6‹ÔLQ¨_#;ƒ÷LúãLe6‹aL`Ā_5úpL‰6‘y‘‘Wö\ ™ö\ eū›Dđpuۜˠ¤Ŗ œ'‘¤ęŦ œ'‘¤üØ 5(‘ ¤Û 5(‘‰éŽu ¸ž‚ī_Žu Éú`­6úū_Á6‚Å_‘uúŪ_Ô6úÔ_č6Š3ˆÜuØ_0ŸúBˆũ6ŠqIÜuø_#÷žú€Iũ6‹Låu`#úL7úL%7švwBüRu_‰3ˆėu¨ŸúBˆC7‰qIėu#oŸú€IC7‚Lōu#úLX7úLm7švwBüRv‰3ˆv   úBˆ€7‰qIv#įŸú€I€7‚Lv#úL•7úLÂ7š)vwBüRu_‰3ˆ4v˜ øBˆu`Ÿ‰qI4v#_ ø€Iu`Ÿ‚L:v#úLÕ7úL8šIvwBüRu_‡uÖ_ģuW–ĮuW–ÜuO2vö\ ›¯ĘPvœiĨŠstr[ œ'8(`^ĨĒ3’\ ãŗ‘‰˜Œ_v\ WĄú§Œb8‚XŒ_vŧƒ~ŒúqŒv8úgŒb8@`ā¤žch^ %Š8Šéašvh`g áĸúbž8ƒøah`…bÜ8‰‹Išv/ōĄƒšI‚qIšvÕƒ€I‚WIšv-ƒfI‰NÅv2ĸúĻN9úšN/9‰qIČv3Pĸƒ€I‚WIČv-ƒfIŠ×NĘv€`3ÕĸúđNG9úæNg9„hwúđN‰9úæN9’œJkwÕ˛ĸƒĢJNuw ׃ĻNúšN˛9ŊvŠ3ˆw˜`d YŖúBˆË9ŠqIw¸`# Ŗú€IË9‹LwĐ`#úLí9úL:š`wwBüRu_Š3ˆ&wč`d ŅŖúBˆ-:‰qI&w#˜Ŗú€I-:‹L,wa#úLB:úLo:š>wwBüRud‰3ˆŸwd I¤úBˆ‚:‰qIŸw#¤ú€I‚:‚LĨw#úL—:úLÄ:š´wwBüRu_‰3ˆ´wd Á¤úBˆ×:‰qI´w#ˆ¤ú€I×:‚Lēw#úLė:úL;šÉwwBüRu_öv47 wMiw™€wIĨƒBˆ‰qI€w#Ĩƒ€I‚L…w#úL,;úLY;š”wwBüRu_kvr_ wvwö\ ēmđnœĶĻIT%ą7_ķĶĻ‘’@côØĨú`cl;úVc˜;„…|c&=—īæ(aôĻúįĮ;1&b—Mį10aôaĻú^įé;Œk1HaUúké;‹åj1`aúūj <úôjé;’MįRôžĻø^įutŸkRUøkutŸ‚åjR•ūjøôjutŸīįnö\ ˆ:›ˆ-Đwœ“ĒœíŪ¯ %<œ2° œ'n<¤0Āą œ'‘‰—­ôw˛ –§øĘ­°ŸúŊ­<„ôwŦŨ­‰õKxy ާúLû<úL#=xh‘xŠ—­xxaŗ ž¨úĘ­‹=úŊ­;>xaŦŨ­ŠõKx˜ay )¨úL˜>úLH?‰Ox ¨ú"O˜>!x9] ,xh™žx–¨øBˆW‰qIžx#]¨ø€IW‚LÃx#úL‡?úL´?šŌxwBüRu_‘xŠ3ˆ,x°a˛ ŠúBˆĮ?ŠqI,xĐa#Ũ¨ú€IĮ?‹L5xča#úL@úLU@š`xwBüRu_Š3ˆFŒk5čcUúk>F‹åj5dúūj`Fúôj>F’MįVô–˛ø^įutŸkVUøkutŸ‚åjV•ūjøôjutŸīįrö\ ¯Eũ‰āĐ{2œČ˛Ž´˙ ”ųV‘¤ž|é Ž´‘‰ŠoÛ{ę ŗú¸otF‰ÃoŪ{ę /ŗúŌoŦFä{Ôs‰€Z|ī cŗú˜ZĘFú‹ZG|"] Š3ˆY|dõ ÛŗúBˆGŠqIY|8d#ĸŗú€IG‹Lb|Pd#úL8GúLZGšā|wBüRuk‰3ˆä|õ S´øBˆulŸ‰qIä|#´ø€IulŸ‚Lę|#úLxGúLĨGšų|wBüRukū{Ū‹|ÔsK|ąY|"] w|´^ ’| ] ¯|Ū‹É|lސ}ö\ į9ũ˛ā}œË´@ˇ˙ ”ųV‘¤[—ü @ˇ‘hd5ˇĒĮ˙ \F‘`Š3ˆŒ}ˆd zĩúBˆ¸GŠqIŒ}¨d#Aĩú€I¸G‹L•}Ād#úLÍGúLâGšØ}wBüRugŠ3ˆĒ}Ød ōĩúBˆHŠqIĒ}đd#šĩú€IH‚Lŗ}#úLHúL*HšÅ}wBüRv‰3ˆÜ}  jļúBˆ=H‰qIÜ}#1ļú€I=H‚Lâ}#úLRHúLHšņ}wBüRup‰3ˆü} âļøBˆulŸ‰qIü}#Šļø€IulŸ‚L~#úL’HúLŋHš~wBüRug6}2šM}ØĻ ˇüPuhüQ4[}Ū‹v}ąŒ}"] Ē}´^ ú}ö\ +Hũ-á ~jœ]ˇ%Ā˙ ”ųV‘¤čĒ( %Ā‘%‘eĀŸ$ƒ6 %ŌHŸAë@ %I‰ö8~ - Ųˇú+ö:IA~…[‰6öA~- ¸úAöŗIšW~ØĻüPu`üQ‹ŠOöW~ e- [¸ú^öŅI‹ČbW~ e~ú×bJJo~­A‰ŌSd~- —¸úáSiJ‚WId~úfIiJ‰iöo~- ͏útö˜Jš†~ØĻüPu\üQ4Š3ˆ—~8e- KšúBˆļJŠqI—~Xe#šú€IļJ‹L ~pe#úL˙JúLHKšđ€wBüRu[Š3ˆĢ~ˆe- ÚúBˆvKŠqIĢ~ e#Ššú€IvK‹Lą~¸e#úL˜KúLēKšwBüRu\‰‚öÅ~0 ˙šú‘öØK‚H[Å~ˆúW[ LŠ3ˆø~Đe0 wēúBˆ!LŠqIø~đe#>ēú€I!L‹Lf#úLCLúLeLš€wBüRu[‰œö$4 ŊēúĢöƒL‚,b$eú;bÍL9­A‰iö94 ųēútöáLšPØĻüPu`üQ4Š3ˆ_ f4 qģúBˆ˙LŠqI_@f#8ģú€I˙L‹LhXf#úL;MúLwMšā€wBüRu\Šß{spf6 ˇģúî{•M‹FbspfiúUbžM…­AОŒˆˆf7 \ŧúÁŒŌM‹_vˆˆfŒúnvûM‹Evˆˆf@úTvûM™˜€(OŧúTv'N‰b[›€EDŧúq['N§€Ôs“Fw¨fžŸĪf8 %HNŠß{žČf8 Ŋŧúî{qN‹FbžČfiúUbN°­A‰iöÁ: ŊútöŖNš×ØĻüPu`üRwüQ4Š3ˆæāf: xŊúBˆÁNŠqIæg#?Ŋú€IÁN‹Līg#úLãNúLOš wBüRu\‰3ˆm: đŊúBˆ#O‰qIm#ˇŊú€I#O‚Ls#úL8OúLeOš‚wBüRu\ÁŪ‹æ"] €R|"€"] Šļö(€0g@ _žúÅöxO‹`b(€0gmúob‹O7€­AŠ3ˆ'Hg0 מúBˆĒO‰qI'#žžú€IĒO‹L-`g#úLŋOúLÔOšiwBüRu[‰3ˆ?- OŋúBˆįO‰qI?#ŋú€IįO‚LE#úLüOúL)PšTwBüRu[‰3ˆT - ĩŋúBˆāĄˇÎļÄ6‘ŧ’˜Œ/ˆļŪÖú§Œb‚XŒ/ˆŧƒ~ŒúqŒcúgŒb—vSaˆl¸×úS3cú…S…cmˆū—3ˆmˆl¸ˆ×úBˆģcŠqImˆ8l#O×ú€Iģc‹LyˆPl#úLŨcúLûcšį‰wBüRv’3ˆ„ˆ¸í×úBˆd‰qI„ˆ#Æ×ú€Id‚LŠˆ #úL.dúLCd’÷ŧ•ˆŊ&ØúŊVdúŊēd‘Ÿˆ§ˆ5ģ—ɋ´ˆhlŊ¸ØúڋeŒ3ˆ´ˆˆl;úBˆeŠqI´ˆ¨l#~Øú€Ie‹LŊˆĀl#úLfeúL¯ešŠwBüRu`—3ˆȈØlŊ/ŲúBˆÍe‰qIȈ#öØú€IÍe‹LΈđl#úL fúLFfš÷‰wBüRv—vS;‰mģbŲúS…fú…S×fG‰ū—3ˆG‰ mģŲŲúBˆ gŠqIG‰@m# Ųú€I g‹LS‰Xm#úL/gúLMgš§‰wBüRv—3ˆZ‰pmģPÚúBˆkg‰qIZ‰#Úú€Ikg‹L`‰ˆm#úLgúL¯gšˇ‰wBüRv—3ˆg‰ mēĮÚúBˆÍg‰qIg‰#ŽÚú€IÍg‹Lm‰¸m#úLīgúLhšĮ‰wBüRv—3ˆt‰Đmē>ÛúBˆ/h‰qIt‰#Ûú€I/h‹Lz‰čm#úLQhúLshš׉wBüRv’3ˆ‰ēĩÛúBˆ‘h‰qI‰#|Ûú€I‘h‚L‡‰#úLĻhúLģhš™‰wBüRv—3ˆŠnē,ÜúBˆÎh‰qIŠ#ķÛú€IÎh‹LŠn#úLãhúLøhšnŠwBüRud’3ˆ$Š ŊŖÜúBˆ i‰qI$Š#jÜú€I i‚L*Š#úL iúLMiš9ŠwBüRuC’3ˆDЏŨúBˆ`i‰qIDŠ#áÜú€I`i‚LJŠ#úLuiúLĸišYŠwBüRud’3ˆYŠ ¸ŨúBˆĩi‰qIYŠ#XŨú€Iĩi‚L_Š#úLĘiúLßi’ɋrŠŊŪúڋōi3ˆrŠ;úBˆōi‰qIrŠ#×Ũú€Iōi‚LxŠ#úLjúL4jš‡ŠwBüRu`’3ˆŠģˆŪúBˆGj‰qIŠ#OŪú€IGj‚L•Š#úL\júL‰jš¤ŠwBüRud’3ˆ¤Šģ˙ŪúBˆœj‰qI¤Š#ÆŪú€Iœj‚LNJ#úLąjúLŪjššŠwBüRud’3ˆšŠēvßúBˆņj‰qIšŠ#=ßú€Iņj‚LŋŠ#úLkúL3kšΊwBüRud’3ˆΊ6ēíßúBˆFk‰qIΊ#´ßú€IFk‚LԊ0#úL[kúLˆkšįŠwBüRudRˆ—­aˆ—­´ˆ”ÁøˆiĨ ‰—­‰*,‰—­;‰—­BŠö\ 9595Ŗ@ž‹Äœã¤Aã‘¤Ętĸ㑤ōœ'‘ 0n’ãĒŗs‘Ÿψ%›kН‹‹Pnėāúž‹æk‘+‹‰¯í8‹ váúĀíl„8‹ ¨Ė푈5^8‹ ÔúM^8lú@^jl‚ S8‹ Īú?S8lú2SjlE‹å_ ŠĸSg‹hnĪáúģS~lúąSžlŒvSg‹€nJúS~lú…Sžln‹ūŠɋn‹˜ncâúڋōlŒ3ˆn‹°n;úBˆōlŠqIn‹Čn#(âú€Iōl‚Lw‹#úL$múLomš†‹wBüRu™ž‹đâúڋ‚m3ˆž‹;úBˆ‚m‰qIž‹#ĩâú€I‚m‚LŖ‹#úL•múLÄmš˛‹wBüRu‰ɋŊ‹‡ãøڋuŸ3ˆŊ‹;øBˆuŸ‰qIŊ‹#Lãø€IuŸ‚LË#úL×múLnšŌ‹wBüRud‹'֐ģ‹ö\ 9595›Įđā‹Ņœ§é¤ˇÎČœ'‘¤ Č%‘ānœéĒėÉ\F‘PŠ—­%ŒoŅ×äúĘ­núŊ­QnoŦŨ­ŠõK4Œ0oy ^äúLŖnúLûnAŒh™}ĪäúBˆ:o‰qI}#–äú€I:o‚Lƒ#úLOoúLdoš‘wBüRv‘1ŒŠ—­OŒHoҎåúĘ­woúŊ­ŋoHoŦŨ­ŠõK[Œhoy @åúL púLEphŒh™™¯åøBˆu‰qI™#våø€Iu‚Lž#úLqpúLžpš­wBüRuW‘XŒŠ3ˆhŒ€oŅ/æúBˆąpŠqIhŒ o#öåú€Iąp‹LqŒ¸o#úLĪpúLņpšđŒwBüRuWŠ3ˆxŒĐoҧæúBˆq‰qIxŒ#næú€Iq‹L~Œčo#úL1qúLSqš˙ŒwBüRvŠ3ˆ…ŒpŅįúBˆqq‰qI…Œ#ææú€Iqq‹L‹Œp#úL“qúLĩqšwBüRvŠ3ˆ’Œ0pŅ—įúBˆĶqŠqI’ŒPp#^įú€IĶq‹L˜Œpp#úLõqúLrš֌wBüRv‰3ˆ ŅčúBˆ5r‰qI#Öįú€I5r‚L#úLJrúLwrš+wBüRuW‰3ˆ6Ņ‡čúBˆŠr‰qI6#Nčú€IŠr‚L<#úLŸrúLĖršKwBüRuW‰3ˆKŅ˙čúBˆßr‰qIK#Æčú€Ißr‚LQ#úLôrúL!sš`wBüRuW‰3ˆ`ŅwéúBˆ4s‰qI`#>éú€I4s‚Lf#úLIsúLvsšuwBüRuW‘Œ%ŒiĨOŒ*ŋŒ—­4ö\ äŋ—åšéûéā ”SŪ_hå~—ŪˇÎåœ'Ū å%âîHį0‘ˆ§é“AĀ}œę îøšé‘øÃ鑸Đ鑸Ũé‘ ˆpî…ėé‰sŠį^ޏpëXëƒ_ƒö^Œ&ÖޏpqƒCÖŠVÖ Žāp5"ë•oÖ ƒeÖŠ‰… Žq ŧŌęú…˛st$‹gR"Ž(q ŧú€RÛsúvRīs„°Ž8ú€R túvR!tšŽņE‰ą>Ž 5Lëúá…4tFŽ›<>Žš<‰ŌSŽė”ëúáSGt‚WIŽúfIGt‰cPKŽ ëČëú„PtúwPŽtTŽ:$‰cPWŽëüëú„P×túwP˙tdŽ:$ŠcPgŽ@qėŌėú„PuúwP;u‰OkŽ Oėú"OYutŽ9] XqĮėú„PluúwP€u‹=PŽpqúVP“uúLP§u’PōŽ ˜ģėú0P“uú$Pēu˙ށũŽ:$ŠcP‚ސqėíú„PÎuúwPöu’Ž:$Š3ˆ’ލqė~íúBˆvŠqI’ŽČq#Eíú€Iv‹L›Žāq#úLPvúLŒvšwBüRuc‰3ˆėöíøBˆudŸ‰qI#Ŋíø€IudŸ‚L%#úLĒvúL×vš4wBüRucާã=ö\ ßĘĪîOîā ”!Ųëfd%âîrŧ*'øîŖZ,%›æđ@ĪœŋņĨfd{%‘¤ĩb{œ'‘¤áė{JŲ‘‰cPn}Âîú„PęvƒwP‚:$ŠcP…øq}īú„PwƒwP‰O īú"O0w–9] r…īú„PCwƒwP‹=PĨ(rúVPWwúLPkw—PģPr ˜yīú0PWwú$P~wАũĨ:$‰cP¨~Āīú„P‘wƒwPŧ:$Š îĶhr€xņú%îŠwúîČw‰˜Œā5đú§Œũw‚XŒāŧƒ~ŒúqŒ/xúgŒũwˆrõđ¨3î‘D…@îCxŠq^) r-ĖđúŠ^nxú€^x‹’ŗ) r3úĢŗnxúĄŗxŠO)¸r}Āđú"OnxiO#ßa u´^ Ia Аda ‰3ˆęmņøBˆsŸ‰qIę#4ņø€IsŸ‚Lđ#øLuLŸúLĩxšūwBüRvāõa nûéď}ÖŅr] ā}֐čö\ ‘á\ ‘ö\ ›ņ‘œŪņ$‘Oî§ Á0‘œōD‘Oîũ;ĘP‘'œōØô˙ ”Øô‘ØršôĒ71r }?‘@ĒŨv ų?‘¸Ÿ8Ōz %Čx‰cPz‘o ’ōú„PæxƒwPŽ‘:$‰cP‘‘p Âōú„PyƒwPĸ‘:$™į‘„ķŸj5‚ ų?&y#’ b ?’*b R’da Šõbū’ør“ Œķú(c9yúcNy‰‹Iū’Ų ķúšI9y‚qIū’Õú€I9y‚WIū’-úfI9y“:$Šõb“s“ ôú(cayúcvy‰‹I“Ų ôúšIay‚qI“Õú€Iay‚WI“-úfIay+“:$z‘ûéĒ‘}֐ܑTb t’b ‘’’b ¨’û鐚’cP’cPʒ}֐í’ûéū’cP“cP3“}֐I“}֐\“}֐o“}֐Q“ö\ d“ö\ w“ö\ ĻHßUĘėô÷ôā ”Øô÷Ũô%œõ˛õøėô‘‰cPEaOõø„PÜŸƒwPY:$‰cP\bõú„P‰yƒwPm:$da Eûéu}֐ˆ}֐ö\ ß+™Áõæõā ”æõāļÄ%âî–Ôy%Ô1÷˛õĀœöÅöøÁõ‘(sēö…×õĄy‰cP5yWöø„PlŸƒwPI:$‰cPLy‡öú„PĘyƒwP]:$¨b 5ûéj=r}֐‡}֐ö\ ßŗ˜Ôöīöā ”ā1âî–ÔH%÷ÅöC9—œ ÷É÷øÔö‘Hsž÷…āöây‰cP=H[÷ø„PųŸƒwPQ:$‰cPTH‹÷ú„P zƒwPe:$Äb =ûér=z}֐}֐—ö\ ߘ˜Ø÷ķ÷ā ”ā1âî–Ô<%÷É÷÷āšœø×øøØ÷‘hsÂø…ä÷#z‰cPE<_øø„PŸƒwPY:$‰cP\<øú„PWzƒwPm:$Úb Eûéz=‚}֐’}֐ đb šö\ ßĘæøųā ”ØôŪ-BOųâīlenS%L;÷×ø1ė"œ/ųŨûøæø‘øđø‘€sČû…˙øozŠ_Y˜sS­ųúnY‚z‹qI°sÛú€I‚z‹WI°s-úfI‚zŠcPGČsVŨųú„P–zƒwP[:$Šõb[āsWeúú(cÎzƒc‰‹I[Ų ZúúšIÎz‚qI[Õú€IÎz‚WI[-úfIÎzo:$ŠcPtøsW™úú„PãzúwPûz:$ŠõbtW!ûú(c{ƒc‰‹IŲ ûúšI{‚qIÕú€I{‚WI-úfI{‘:$‰cPŊPQûú„P.{ƒwPŅ:$‰cPÔQûú„PV{ƒwPå:$+üb Gû鐙}֐Ŋûéí}֐ }֐}֐ö\ "ö\ ĢĐĨ#€“Eœøûū˙ ”Œ‘¤sÉ#+Ļ‘‰cPʓ)Eüú„Pn{ƒwPŪ“:$‰cPá“*uüú„P–{ƒwPō“:$‰ŅPô“*ĨüúęPŽ{ƒāP˙“č<‰cP”*Ųüú„PÁ{úwPŲ{”:$‰cP”+ ũú„Pí{úwP|$”:$‰ŅP&”+=ũúęP|ƒāP3”č<‰cP6” +qũú„P0|úwPH|C”:$‰cPu”'Ąũú„P[|ƒwP‰”:$‰cPŒ”(Ņũú„Pƒ|ƒwP”:$ʓûéK”}֐u”ûéĒ”}֐˛”ö\ Ŋ”}֐Ŕö\ áņ=ūčüļ%âãmˇįû¯Ž×Д&œUūŅ˙ ”]‘¤=Cü$‘(tÆĒ.\F‘ŦŸžü$›|ĒJ°įû‘°‰ øđ”Īū•PŲŠ–ė •Pt6˙úļė"}úŦėZ}Pt…|cŒcP•htƒú„P"}úwP¨}#•:$ŠŽ_&•€t˙˙ƒŽ_ú¤_Č}—cP.• t™¸˙ú„P~úwP)~‰O.• ­˙ú"O~7•9] H•:$ĀtƒŽ_ú¤_Z~ŒcPK•Øt—ú„Pp~úwPˆ~v˜:$Š&éH•øtbúFéŦ~ƒ<éøt…|cŒcPN•uƒú„PŦ~úwPô~a•:$Šnķ“•8u"¤úŽķú„ķ<8u…|c§•cPЖ덕Pu#æúļė`úŦėxPu…|cē•cPŠ‹čē•pu#ĨúĢčŽúĄčŖpu…|cŒõb畐uƒú(cŽúcš‰‹Iē•Ų ˜úšIŽ‚qIē•Õú€IŽ‚WIē•-úfIސЕ:$Š3ˆЕ¸u# úBˆęŠqIЕĐu#äú€Ię‚LŲ• #úL˙úL€ču¨ŸD•+÷$'€‰ŌS^–+búáS>€‚WI^–úfI>€Š˜^a–v+Ūúą^p€úĨ^§€™a–  Ŧž^„0˜úą^ŀúĨ^ņ€„0˜¨ž^‘XE˜ŗ` Šøy– v/ ú¯øúĨø, v…|c–cPŠ–ė–8v0búļėiúŦ끁8v…|cĸ–cPŠ&鯖Xv0¤úF鰁ú<éȁXv…|cĖcPŠ–ėƖpv1æúļ뿁úŦėūpv…|c֖cPŠ‹č֖ˆv1ĨúĢč‚úĄč&‚ˆv…|cŒõb֖¨vƒú(c‚úc9‚‰‹I֖Ų ˜úšI‚‚qI֖Õú€I‚‚WI֖-úfI‚ë–:$Š3ˆë–Đv1 úBˆQ‚ŠqIë–čv#äú€IQ‚‚Lô– #úLf‚úL{‚‰3ˆāš1oøBˆuHŸ‰qIāš#Jø€IuHŸ‚Læš#øLu`ŸøLPšv–PLüPuHüRu´š¯–ËRüPu¸üRsŠ3ˆ—w6 úBˆŽ‚ŠL—w#úLŖ‚úL¸‚š—wBüRu`‚qI¸™#ú€IŽ‚Šū›˜0w5Oú#ū˂0w¨1ū‘T’Āķŋ˜“úāķé‚úÖķƒ„ŋ˜…|c͘cP—ä÷͘PwĀÔúøƒúú÷.ƒPw…|cå™cP’@c՘Āƒ`cúVcCƒ„՘…|câ˜=’$ėí˜ÆZúDėXƒú:ėpƒ„혅|c™cP—īæ™pw˃úį…ƒ™&b—Mį™ˆwËãú^į§ƒŒk™ wUúk§ƒ‹åj™¸wúūjɃúôj§ƒ’MįhšËCú^į郏khšUúk郂åjhšúūjūƒúôj郐ǘīįŠáø)™Đw4‘úų„ú÷ø:„Đw…|c=™cPŠ–ė=™čw5Ķúļė^„úŦ놄čw…|cP™cPŠ‹čP™x5’ úĢčĒ„úĄčĖ„x…|cŒõbP™(xƒú(cĒ„úcđ„‰‹IP™Ų … úšIĒ„‚qIP™Õú€IĒ„‚WIP™-úfIĒ„f™:$Š&éf™Px5ų úFé!…ú<éI…Px…|cŒcPl™pxƒú„P!…úwPm…|™:$Š–ė|™x6` úļė…úŦėĩ…x…|cŒcP‚™°xƒú„P…úwPŲ…’™:$Ћ蒙Đx6 úĢčų…úĄč†Đx…|cŒõb’™đxƒú(cų…úc?†‰‹I’™Ų  úšIų…‚qI’™Õú€Ių…‚WI’™-úfIų…¨™:$Š3ˆ¨™y5— úBˆp†ŠqI¨™8y#^ ú€Ip†‹Lą™Py#úL’†úL´†šō™wBüRu`‰3ˆö™5 úBˆŌ†‰qIö™#Ö ú€IŌ†‚Lü™#úLį†úL‡š šwBüRu`‰3ˆ š 6u úBˆ'‡‰qI š#N ú€I'‡‚Lš#úL<‡úLQ‡Š=ø—hyˇ ú]ød‡úSøŒ‡hy…|c/—cPŠ–ė/—€yų úļė°‡úŦėȇ€y…|cB—cPŠ‹čB— y¸ úĢčŪ‡úĄčô‡ y…|cŒõbB—Āyƒú(cŪ‡úc ˆ‰‹IB—Ų Ģ úšIŪ‡‚qIB—Õú€IŪ‡‚WIB—-úfIŪ‡X—:$Š3ˆX—čyúBˆ;ˆŠqIX—z#÷ ú€I;ˆ‚La—#úLQˆúLfˆ‰øģ—&dú¯øyˆúĨøĄˆ„ģ—…|cĪ—cPŠ–ėŅ—z'ĻúļėňúŦėŨˆz…|câ—cPŠ‹čâ—0z'eúĢčķˆúĄč‰0z…|cŒõbâ—Pzƒú(cķˆúc‰‰‹Iâ—Ų XúšIķˆ‚qIâ—Õú€Iķˆ‚WIâ—-úfIķˆø—:$Š3ˆø—xz'ËúBˆO‰ŠqIø—z#¤ú€IO‰‚L˜#úLd‰úLy‰‰3ˆš'1úBˆŒ‰‰qIš# ú€IŒ‰‚L…š #úLĄ‰úL3ˆĨš#—úBˆɉ‰qIĨš#pú€Iɉ‚L̚#úL߉úLô‰‰3ˆȚ#ũúBˆŠ‰qIȚ#Öú€IŠ‚LΚ#úLŠúL1Љ•?'úįDАõ•&bŠųõ•¨z?wú(ų’Š‹vSõ•ĀzdúS’Šú…SāŠ–ūŠ3ˆ–Øz?īúBˆ(‹ŠqI–øz#ļú€I(‹‹L –{#úLk‹úL§‹šˆ˜wBüRu`‰Mį–Pú^įŋk–Uúkŋ‚åj–úūj÷‹úôjŋŠ3ˆ)–({@ČúBˆŒ‰qI)–#ú€IŒ‹L/–@{#úLIŒúLxŒš ˜wBüRu`‰Mįš)ú^į–ŒkšUúk–Œ‚åjšúūjŦŒúôj–Œ‰3ˆ+š @ĸúBˆŒ‰qI+š#hú€IŒ‚L1š#úL֌úLš@šwBüRuŗ‰3ˆKš?úBˆ‰qIKš#áú€I‚LQš#úL-úLBš`šwBüRu` •īįš“•PLBüPu@üRu´š—PLaüPuŧüRu´…—û鐖—cPž—}Öšģ—PLüPuDüRu´š›˜PLģüPuPüRu´›š}֐Išö\ ßņÉāõā ”ØôāļÄ%÷ҍrŦœ;øā‘‰ŨôKDúėôU"da Š3ˆ,X{IŧúBˆu‰qI,#ƒú€Iu‹L2p{#úLŊúLųšXwBüRuwŠ3ˆ9ˆ{I4úBˆ'ŽŠqI9 {#ûú€I'Ž‹L?¸{#úLOŽúLqŽšpwBüRuw‰3ˆyI˛øBˆu# Ÿ‰qIy#yø€Iu# Ÿ‚L#úLŽúLŧŽšŽwBüRuw‰3ˆŽI0øBˆu#Ÿ‰qIŽ#÷ø€Iu#Ÿ‚L”#úLĪŽúLüŽšŖwBüRuwŦö\ ÷ŅÖˇœW›øā‘ŠŅ Đ{L†úā‰ŨôKŠúėô-"da Š3ˆ,č{I!úBˆK‰qI,#čú€IK‹L2|#úLmúLœšhwBüRuwŠ3ˆ9|I™úBˆʏŠqI90|#`ú€Iʏ‹L?H|#úLėúLš€wBüRuw‰3ˆ„IøBˆs Ÿ‰qI„#Øø€Is Ÿ‚LŠ#úL,úLYš™wBüRuw‚3ˆ™IøBˆsŸ‰qI™#Lø€IsŸ‚LŸ#úLlúL™šŽwBüRuwOá\ ˇö\ äÍ.­Âā ”8ŠāļÄ%ˆ›øœŨœŪø­‘Š}n `|.vúŒnŦ‹Sn `|•lnúbnŦ‹Ņ$ˆ|ŽúāôŠŅ$¨|Liúāô‰Ũô2KŒúėô‘;da Š3ˆEČ|IúBˆ;‘‰qIE#Ëú€I;‘‹LKā|#úL]‘úL‘šwBüRuwŠ3ˆRø|I|úBˆ‘‰qIR#Cú€I‘‹LX}#úLŋ‘úLᑚ€wBüRuw‰3ˆĒIôøBˆs Ÿ‰qIĒ#ģø€Is Ÿ‚L°#úL˙‘úL,’šŋwBüRuw‚3ˆŋIøBˆsŸ‰qIŋ#/ø€IsŸ‚LÅ#úL?’úLl’šÔwBüRuwhá\ Ũö\ ˆ›˛Íāœfø­‘Š› (}.Qú­’‹}n @}.úŒnŠ’‹Sn @}•lnúbnŠ’‹Ņ$`}ŽúāےŠŅ$€}LCúāے‰Ũô2Kfúėô“;da Š3ˆE }IŪúBˆ"“‰qIE#Ĩú€I"“‹LK¸}#úLD“úLf“š˜wBüRuwŠ3ˆRĐ}IVúBˆ„“‰qIR#ú€I„“‹LXč}#úLĻ“úLȓšˆwBüRuw‰3ˆ­IÎøBˆs Ÿ‰qI­#•ø€Is Ÿ‚Lŗ#úLæ“úL”šÂwBüRuw‚3ˆÂIøBˆsŸ‰qIÂ# ø€IsŸ‚LČ#úL&”úLS”š×wBüRuwhá\ tá\ āö\ ß]Éuā ”…XŪ-B<L;ˆf:Ö¯œŽP$øu‘ø‘Š—­~=¨ øĘ­rŸúŊ­f”~ŦŨ­‰õKy / øLrŸúL-h™Š  úBˆ]•‰qIŠ#g ú€I]•‚L#úLr•úLŸ•šŸwBüRud‘Š×ø< ~=U#úđø˛•úæø– ~…˙øj–Š_YHH~S9!únY}–‚qIHÛú€I}–‚WIH-úfI}–ŠcPx`~Vi!ú„PŦ–ƒwP‰:$Šõb‰x~Wņ!ú(cä–ƒc‰‹I‰Ų æ!úšIä–‚qI‰Õú€Iä–‚WI‰-úfI䖐:$ŠcPĸ~W%"ú„Pų–úwP—¯:$Šõb¯¨~W­"ú(c/—ƒc‰‹I¯Ų ĸ"úšI/—‚qI¯Õú€I/—‚WI¯-úfI/—ŋ:$‰cPøPŨ"ú„PD—ƒwP :$‰cP Q #ú„P|—ƒwP:$Yüb uûéĮ}֐õûé%}֐a}֐Ē}ÖŠ3ˆĘĀ~=Í#úBˆ”—‰qIĘ#”#ú€I”—‹LĐØ~#úLЗúL ˜šHwBüRud‰3ˆd&=E$úBˆ*˜‰qId# $ú€I*˜‚Lj #úL?˜úLl˜šywBüRu[‚ö\ ũĖÛœh$'˙ ”8Š‘¤ž|š'‘‰LZ ›Ũ$ú[Z˜‚ŌS wúáSØ‚WI úfIØŠ—­ đ~›x%úĘ­™úŊ­D™đ~ŦŨ­ŠõK,y p%úL°™úLŲ™‰O, e%ú"O°™49] ?h‘,ŠŠ@ ›Ŧ%ú*Š[šú Š­šMfŠ3ˆM@›$&úBˆđšŠqIM`#ë%ú€Iđš‹LVx#úLB›úL~›š€wBüRuoŠ3ˆ]›œ&úBˆŦ›ŠqI]¨#c&ú€IŦ›‹LcĀ#úLΛúL—wBüRs‰3ˆ¨›'úBˆ œ‰qI¨#Û&ú€I œ‚LŽ#úL!œúLNœšŊwBüRuo‰3ˆŊ›Œ'øBˆupŸ‰qIŊ#S'ø€IupŸ‚LÃ#úLaœúLŽœšŌwBüRuo‘ Ûö\ į9ũĩËÛœē'ī*˙ ”8Š‘¤[—ī*‘‰ë[ ‘/(úú[Ąœ‚ŌS úáS圂WI úfI圊—­ Ø‘Ę(úĘ­=úŊ­fØŦŨ­ŠõK,đy Â(úLŌúLû‰O, ˇ(ú"OŌ49] ?h‘,ŠŠ@€‘ū(ú*Š}žú ŠĪžMfŠ3ˆM(€‘v)úBˆŸŠqIMH€#=)ú€IŸ‹LV`€#úLdŸúL Ÿš€wBüRuoŠ3ˆ]x€‘î)úBˆΟŠqI]€#ĩ)ú€IΟ‹Lc¨€#úLđŸúL š—wBüRs‰3ˆ¨‘f*úBˆ. ‰qI¨#-*ú€I. ‚LŽ#úLC úLp šŊwBüRuo‰3ˆŊ‘Ū*øBˆupŸ‰qIŊ#Ĩ*ø€IupŸ‚LÃ#úLƒ úL° šŌwBüRuo‘ Ûö\ +H¯0Ë œ +C.˙ ”8Š‘¤čĒ|C.‘ОŒĀ€Î+úÁŒà‹_vĀ€Œúnvã ‹EvĀ€@úTvã ™ˆÁ+úTvĄ‰b[‹Eļ+úq[Ą—ÔsFwŠˌ؀ú+ƒåŒúی0Ą‘5ŠŠDđ€.,ú*ŠCĄú Š“ĄOfŠ3ˆOĻ,úBˆŧĄŠqIO(#m,ú€IŧĄ‹LX@#úLôĄúL#ĸš¸wBüRu_Š3ˆ_X-úBˆQĸŠqI_p#å,ú€IQĸ‹Leˆ#úLqĸúL‘ĸšĪwBüRs‰ĸˆl‚>-úąˆ¯ĸ‰3ˆ×ļ-úBˆÄĸ‰qI×#}-ú€IÄĸ‚LŨ#úLŲĸúLŖšėwBüRu_‰3ˆė..øBˆu`Ÿ‰qIė#õ-ø€Iu`Ÿ‚Lō#úLŖúLFŖšwBüRu_DMi ö\ HũYĖ1œ`.8˙ ”8Š‘¤'VĨ8‘ 8ŸėĻœ'YŖ‰U_Ļ'/úd_‚ŖėSMúûSŨŖ‚‹I6úšIŨŖ‚qIÕú€IŨŖ‚WI-úfIŨŖŠ—­]ЁŠ 0úĘ­R¤úŊ­ǤЁŦŨ­ŠõKlđy /úL=ĨúLĨĨyh™0øBˆuLŸ‰qI#Č/ø€IuLŸ‚L #úLPĻúL}Ļš/wBüRud‘iŠŠ¨‚Ģ=0ú*АĻú иϐļfŠ3ˆļ ‚Ģĩ0úBˆH§ŠqIļ@‚#|0ú€IH§‹LŋX‚#úLš§úLاšXwBüRuCŠ3ˆĘp‚Ē-1úBˆ¨ŠqIʈ‚#ô0ú€I¨‹LĐ ‚#úL&¨úLF¨šwwBüRwŠ3ˆÛ¸‚ĒĨ1úBˆd¨ŠqIÛЂ#l1ú€Id¨‹Láč‚#úL†¨úL¨¨š—wBüRwŠ3ˆėƒŠ2úBˆƨŠqIėƒ#ä1ú€Iƨ‹Lō0ƒ#úLč¨úL ŠšˇwBüRwŠ3ˆũHƒŠ•2úBˆ(ŠŠqIũ`ƒ#\2ú€I(Š‹Lxƒ#úLJŠúLlŠš×wBüRwŠ3ˆƒŠ 3úBˆŠŠŠqI¨ƒ#Ô2ú€IŠŠ‹Lƒ#úLŦŠúLΊš÷wBüRwŠ3ˆ؃Ē…3úBˆėŠŠqIđƒ#L3ú€IėŠ‹L%„#úLĒúL0ĒšwBüRwŠ3ˆ0 „Ģũ3úBˆNĒŠqI08„#Ä3ú€INĒ‹L6P„#úLpĒúL’Ēš7wBüRw‰3ˆiĢu4úBˆ°Ē‰qIi#<4ú€I°Ē‚Lo#úLÅĒúLōĒš~wBüRuC‰3ˆ~Ēí4úBˆĢ‰qI~#´4ú€IĢ‚L„#úLĢúLGĢš“wBüRuC‰3ˆ“Ēe5úBˆZ̉qI“#,5ú€IZĢ‚L™#úLoĢúLœĢš¨wBüRuC‰3ˆ¨ŠŨ5úBˆ¯Ģ‰qI¨#¤5ú€I¯Ģ‚LŽ#úLÄĢúLņĢšŊwBüRuC‰3ˆŊŠU6úBˆŦ‰qIŊ#6ú€IŦ‚LÃ#úLŦúLFŦšŌwBüRuC‰3ˆŌŠÍ6úBˆYŦ‰qIŌ#”6ú€IYŦ‚LØ#úLnŦúL›ŦšįwBüRuC‰3ˆįĒE7úBˆŽŦ‰qIį# 7ú€IŽŦ‚Lí#úLÃŦúLđŦšüwBüRuC‰3ˆüĢŊ7úBˆ­‰qIü#„7ú€I­‚L#úL­úLE­šwBüRuP(Ë =iĨIË ]Mi‡*›—­¨*ö\ n8ũYËŋœ,8…:˙ ”8Š‘…:‘¤}Í…%‘ŠŠ&h„‡†8ú*ŠX­ú Š­4fŠ3ˆ4€„†ū8úBˆŽŠqI4 „#Å8ú€IŽ‹L=¸„#úLXŽúL”ŽšhwBüRuoŠ3ˆDЄ†v9úBˆÂŽŠqIDč„#=9ú€IÂŽ‹LJ…#úLâŽúL¯šwBüRs‰3ˆŒ†î9úBˆ ¯‰qIŒ#ĩ9ú€I ¯‚L’#úL5¯úLb¯šĄwBüRuo‰3ˆĄ†f:øBˆupŸ‰qIĄ#-:ø€IupŸ‚L§#úLu¯úLĸ¯šļwBüRuoiĨ&Miŋö\ Hß™™:´:ā ”æõâî–Ôu%÷Ėđ˜>›ŨœĐ:X<øŪ𑊊: ›… Ÿ;ú™:ĩ¯0……Ĩ:÷¯‰cP…›u;;ø„P¨ŸƒwP™›:$‰cPœ›uk;ú„P+°ƒwP­›:$›c …›ûéē›=›}֐՛}Ö‰?đ!› ö;úNđC°‚ĸ!›úĸC°bĸ!›}úqĸC°‰Yđ6› M<úhđx°‚Ĩ6›ú#Ĩx°õ¤6›}úĨx°Ũ›ö\ ÷öīâ Ÿœt<N=øđ‘ОõH…¸C=úÁõ­°H……×õą‰cPEyß<ø„PlŸƒwPY:$‰cP\y=ú„P.ąƒwPm:$¨b Eûéz=‚}֐—}֐Ÿö\ ÷öīž:Ēœj=j>øđ‘Šöī h…¸U>úđFą‹˛õ €…¸úÁõpą€……×õ­ą‰cPUyđ=ø„PlŸƒwPi:$‰cPly >ú„PáąƒwP}:$¨b Uû鐊=’}֐ĸ}֐-á\ Ēö\ ũŠģā›čœ‚>?˙ ”lH‘Šņ œ …ęn?úņųą‹Š:œČ…ēú™:-˛腅Ĩ:t˛‰cP`œu ?ú„P¨˛ƒwPqœ:$‰cPtœu9?ú„PвƒwP…œ:$œc ]œû鐒œ=œ}֐Ü}֐ œr] ­œá\ ĩœö\ ÷ÅoFМ3œŠ?ēAøÔ‘øŪ‘†ĨA…í貊įņܜ(†ŗÉ@úō&ŗøöņōí‹É÷ܜ(††úØ÷&ŗH†Ŋ@…ä÷\ŗ‰cP5<Z@ú„PļŗƒwPI:$‰cPL<Š@ú„PŪŗƒwP]:$åœÚb 5ûél=t}֐č}֐ôœđb ‹ōúœh†´ú"ōöŗ‹Åöúœh†ˆúÔö.´†…āöW´‰cP•H?Aú„P‹´ƒwPŠ:$‰cPŦHoAú„Pŗ´ƒwPŊ:$ Äb •ûéʝ=Ō}֐û}֐đö\ žö\ ÷7ō ž6œÖAŪCøFō‘¸†ÉC…RōË´Šįņžā†ŦíBúō ĩøöņōRō‹É÷žā††úØ÷ ĩ‡áB…ä÷?ĩ‰cPuž<~Bú„PĩƒwP‰ž:$‰cPŒž<ŽBú„PŠĩƒwPž:$%žÚb užûéŦž=´ž}֐+Ÿ}֐4žđb ‹ō4ž(‡­ú"ōÁĩ‹Åö4ž(‡ˆúÔöųĩ`‡…āö"ļ‰cP՞HcCú„PaļƒwPéž:$‰cPėžH“Cú„P‰ļƒwPũž:$JžÄb ՞ûé Ÿ=Ÿ}֐>Ÿ}֐3Ÿö\ FŸö\ ũ(%PŸ>œöC F˙ ”^W‘˜‡ôEŸˇf€čĄļŠįņ\ŸĀ‡fEúōßļøöņō D‹É÷\ŸĀ‡†úØ÷ßļ⇠E…ä÷ˇ‰cPŊŸ<ŠDú„PWˇƒwPҟ:$‰cPԟ<ŲDú„PˇƒwPåŸ:$eŸÚb ŊŸûéôŸ=üŸ}֐s }֐tŸđb ‹ōzŸˆgú"ō—ˇ‹ÅözŸˆˆúÔöΎ(ˆ…āöøˇ‰cP HŽEú„P7¸ƒwP1 :$‰cP4 HžEú„P_¸ƒwPE :$ŸÄb  ûéR =Z }֐† }֐{ ö\ Ž ö\ ũG% >œ!F4H˙ ”^W‘XˆHŸˇn€čw¸Šįņœ €ˆnCGúōĩ¸øöņō8F‹É÷œ €ˆ†úØ÷ĩ¸ ˆ7G…ä÷븉cPũ <ÔFú„P-šƒwPĄ:$‰cPĄ<Gú„PUšƒwP%Ą:$Ĩ Úb ũ ûé4Ą=<Ą}֐ŗĄ}֐´ đb ‹ōē Āˆoú"ōmš‹Åöē ĀˆˆúÔöĨš舅āöΚ‰cP]ĄHšGú„P ēƒwPqĄ:$‰cPtĄHéGú„P5ēƒwP…Ą:$Đ Äb ]Ąû鐒Ą=šĄ}ÖÆĄ}֐ģĄö\ ÎĄö\ ¯YÚĐĄIœLH€J˙ ”ČU‘¤3’Ĩ€J‘Š7ōߥ‰ĻkJúFōMē‰ŦRōŠįņߥ0‰ŦŽIúōēøöņōŽH‹É÷ߥ0‰†úØ÷ēX‰‚I…ä÷Ķē‰cPHĸ<Iú„PģƒwP\ĸ:$‰cP_ĸ<OIú„P:ģƒwPpĸ:$čĄÚb Hĸûé}ĸ=†ĸ}֐üĸ}֐öĄđb ‹ōöĄx‰­ú"ōRģ‹ÅööĄx‰ˆúÔöŠģ ‰…āö¨ģ‰cPĒĸHJú„PįģƒwPžĸ:$‰cPÁĸH4Jú„PŧƒwPŌĸ:$ ĸÄb Ēĸûéßĸ=įĸ}֐Ŗ}֐Ŗö\ Ŗö\ n8߃ƒ”JŠJā ”5§āļÄ%ßpy¸JÍJā ”ĸ¤āļÄ%ä¤ßJôJā ”QVāļÄ%÷ÍJXb Ŗ œK9QøßJ‘‰…J,Ŗw¤†Mú”J'ŧ‰Ļ2Ŗa¨ĶLƒÅĻúšĻIŧú­Ļ\ŧaĻ2Ŗa—ƒĻƒuĻ„2Ŗa4Ļ2Ŗa~ƒTĻúHĻoŧŒĻ@ŖČ‰gú'ĻšŧŒao@ŖČ‰]úsošŧŠ3ˆ@Ŗč‰ĪYLúBˆŌŧŠqI@ŖŠ# Lú€IŌŧ‹LEŖ Š#úL ŊúL,ŊšƒŖwBüRud‚3ˆSŖĪúBˆJŊ‰qISŖ#”Lú€IJŊ‚LYŖ#úL†ŊúLĀŊšhŖwBüRud‚ęĻ“ŖŠúųĻîŊ“Ĩ“Ŗ ƒĸĨú¸ĨžúŦĨ,ž„“Ŗ^Ĩ—Ŗ ˛ƒiĨúĨ?žúuĨ[ž3Ĩ—Ŗ MšƒBĨúXĨ?žúLĨ[ž Ŗá\ ‰ŠJŖŖ¤hPú¸Jnž‰ũŖŠŖz¨ĩOƒ2¤ú&¤žú¤ŖžÎŖŠŖz—ƒîŖƒâŖ„ŠŖzĄŖŠŖz~ƒÁŖúĩŖļžŒ€Ŗ°Ŗ@Šgú”ŖážŒČl°Ŗ@Š]úŲláž—3ˆ°Ŗ`Š/ÅNúBˆŋŠqI°ŖxŠ#ŒNú€Iŋ‹L敖Š#úL;ŋúL]ŋš¤wBüRud—3ˆŊŖ¨Š/å‰qI§#Đuú€I>å‚L­#úLSåúL€åšŧwBüRuG‰3ˆŧĄvúBˆ“å‰qIŧ#Hvú€I“å‚LÂ#úL¨åúLÕåšŅwBüRuG‰3ˆŅ ųvúBˆčå‰qIŅ#Āvú€Ičå‚L×#úLũåúL*æšæwBüRuG‰3ˆæŸqwúBˆ=æ‰qIæ#8wú€I=æ‚Lė#úLRæúLæšûwBüRuG‰3ˆûŸéwúBˆ’æ‰qIû#°wú€I’æ‚L#úL§æúLÔæšwBüRuG‰3ˆ5ĄaxúBˆįæ‰qI#(xú€Iįæ‚L/#úLüæúL)įš%wBüRuG(ą`MiŠ*.ö\ į9ũŪËTœ§xŠ€˙ ”8Š‘¤[—”Š€‘‰“{% • yúĸ{<į‚y{% #úˆ{<į+duŠˌ.X—•:yú匎įúیÅį‘KŠ—­]p—–zúĘ­!čúŊ­ičp—ŦŨ­ŠõKl—y ŖyúLüčúLTéyh™=zøBˆuPŸ‰qI=#Ûyø€IuPŸ‚LC#úLåéúLęšRwBüRu\‘iŠ—­‡¨——zúĘ­%ęúŊ­mꍨ—ŦŨ­ŠõK–Ā—y …zúLāęúL(ëŖh‘“ŠŠ¤Ø——Ázú*ŠĒëú ŠėąfŠ3ˆąø——9{úBˆVėŠqIą˜#{ú€IVė‹Lē0˜#úL¨ėúLäėšwBüRuGŠ3ˆÁH˜–ą{úBˆíŠqIÁ`˜#x{ú€Ií‹LĮx˜#úL2íúLRíš/wBüRsŠ3ˆΐ˜–)|úBˆpíŠqIؘ#đ{ú€Ipí‹LÔ˜#úL’íúL´íšGwBüRsŠ3ˆÛؘ•Ą|úBˆŌíŠqIÛđ˜#h|ú€IŌí‹Lá™#úLôíúLîš_wBüRsŠ3ˆč ™•}úBˆ4îŠqIč8™#ā|ú€I4î‹LîP™#úLVîúLxîšwwBüRsŠ3ˆõh™–‘}úBˆ–îŠqIõ€™#X}ú€I–î‹Lû˜™#úL¸îúLÚwBüRs‰3ˆŸ— ~úBˆøî‰qIŸ#Đ}ú€Iøî‚LĨ#úL īúL:īš´wBüRuG‰3ˆ´–~úBˆMī‰qI´#H~ú€IMī‚Lē#úLbīúLīšÉwBüRuG‰3ˆÉ–ų~úBˆĸī‰qIÉ#Ā~ú€Iĸī‚LĪ#úLˇīúLäīšŪwBüRuG‰3ˆŪ•qúBˆ÷ī‰qIŪ#8ú€I÷ī‚Lä#úL đúL9đšķwBüRuG‰3ˆķ•éúBˆLđ‰qIķ#°ú€ILđ‚Lų#úLađúLŽđšwBüRuG‰3ˆ5–a€úBˆĄđ‰qI#(€ú€IĄđ‚L/#úLļđúLãđšwBüRuG%ą]Mi‡*&ö\ +Hũ‡ËÅœ§€*‰˙ ”8Š‘¤čĒŠ*‰‘%‘‰‚ö ú‘ööđ‚H[ˆúW[!ņОŒ1°™ŒށúÁŒ5ņ‹_v1°™Œúnv`ņ‹Ev1°™@úTv`ņ™0ĄúTvŒņ‰b[3E–úq[Œņ?Ôs7FwŠˌBș‹ځƒåŒúی­ņ‘XŠ—­jč™Œŧ‚úĘ­ÁņúŊ­ōč™ŦŨ­ŠõKyšy C‚úLŦōúL퐆h™´‚úBˆŋķ‰qI#{‚ú€Iŋķ‚L #úLÔķúLôšwBüRu\‘vŠ—­” š-ƒúĘ­ôúŊ­lô šŦŨ­ŠõKŖ8šy %ƒúLßôúL7õ°h‘ ŠŠąPšaƒú*Ššõú Š öžfŠ3ˆžpš؃úBˆöŠqIžš# ƒú€Iö‹LĮ¨š#úLpöúLŦöš`wBüRuGŠ3ˆŌšŒQ„úBˆÚöŠqIŌØš#„ú€IÚö‹LØđš#úLúöúL÷šwBüRsŠ3ˆã›ŒɄúBˆ8÷ŠqI㠛#„ú€I8÷‹Lé8›#úLZ÷úL|÷š—wBüRsŠ3ˆôP›‹A…úBˆš÷ŠqIôh›#…ú€Iš÷‹Lú€›#úLŧ÷úLŪ÷šˇwBüRsŠ3ˆ˜›‹š…úBˆü÷ŠqI°›#€…ú€Iü÷‹L ț#úLøúL@øš×wBüRsŠ3ˆā›Œ1†úBˆ^øŠqIø›#ø…ú€I^ø‹Lœ#úL€øúLĸøš÷wBüRs‰3ˆ‹ІúBˆĀø‰qI#p†ú€IĀø‚L"#úLÕøúLųš1wBüRuG‰3ˆ1‹!‡úBˆų‰qI1#č†ú€Ių‚L7#úL*ųúLWųšFwBüRuG‰3ˆF&Œ™‡úBˆjų‰qIF#`‡ú€Ijų‚LL #úLųúLŦųš[wBüRuG‰3ˆlˆúBˆŋų‰qIl#؇ú€Iŋų‚Lr#úLÔųúLúšwBüRuG‰3ˆŒ‰ˆúBˆú‰qI#Pˆú€Iú‚L‡#úL)úúLVúš–wBüRuG‰3ˆ–/Œ‰úBˆiú‰qI–#Ȉú€Iiú‚Lœ)#úL~úúLĢúš¯wBüRuG.ąjMi”*dö\ HˆĖNU=œK‰mŽøâN‘øėN‘Šį (œX‹ú1įžúú'įöú(œ…|cŒ“ķ PœƒúŠķ%ûúžķ]û—īæ €œéā‰úį%û+&b—õb,¨œékŠú(c†ûúcÔû‰‹I,Ų `ŠúšI†û‚qI,Õú€I†û‚WI,-úfI†û::$—3ˆ:ȜéâŠúBˆũûŠqI:čœ#Њú€Iũû‹LC#úLKüúL”üš°wBüRud3ˆöéúBˆ˛ü‰qIö#‹ú€I˛ü‚Lü#úLĮüúLôüš wBüRudŠgJ–ú!gũúgPũ‰īæQ,Ģ‹úį„ũ`&b‰ŌS`,į‹úáSÍũ‚WI`úfIÍũŠõKc8,EŒúLūúLJū‰Oc :Œú"Oūi9] vhŠ3ˆvP,ŊŒúBˆ^ūŠqIvp#„Œú€I^ū‹Lˆ#úLūúLŧūšŋwBüRv‰˜ŒÔ+ ú§ŒÚū‚XŒÔŧƒ~ŒúqŒ˙úgŒÚū‰3ˆ',øBˆudŸ‰qI'#Hø€IudŸ‚L-#øLu`ŸúL˙š;wBüRvŌr] ä4g‰Mį†÷ú^į,˙k†Uúk,˙‚åj†úūjN˙úôj,˙‰Mį XŽú^įb˙k Uúkb˙‚åj úūjw˙úôjb˙īį'ö\ ¯’ œŒŽã’ITĄį˙ ”`‘¤Ü/ã’‘Šˇį Ņú×į‹˙úÍįÁ˙ …|c’o_ƒūŽú~_Á˙ŒcPĀƒú„Pđ˙úwP&‰O% Lú"OT.9] čÄú„PgúwP{‹=P<žúVPžúLP˛’PĄ ˜¸ú0Pžú$PŐށũ9:$Šg9 ž’ú!gŲúg‰īæC,$úįIR&b‰ŌSR,`úáS…‚WIRúfI…ŠõKU@ž,žúLÁúLę‰OU ŗú"OÁ[9] hhŠ3ˆhXž,6‘úBˆūŠqIhxž#ũú€Iū‹Lqž#úL-úL\š¸wBüRu_‰˜ŒĖ+‚‘ú§Œz‚XŒĖŧƒ~ŒúqŒĨúgŒz‰3ˆę,ú‘úBˆš‰qIę#Á‘ú€Iš‚Lđ#úLÎúLûš˙wBüRu_Ęr] Ü4g‰Mįxp’ú^įkxUúk‚åjxúūj0úôj‰Mį˙Βø^įu`Ÿk˙Uøku`Ÿ‚åj˙•ūjøôju`Ÿīįö\ ąįˆrZ›ûœ“į–øˆZ‘ø’Z‘Š‹č¨žՓúĢčDúĄčd¨ž…|cŒõbĀžƒú(cDúc“Š‹IāžŲ Č“úšID‹qIøžÕú€ID‹WIŸ-úfID,:$Šg,(Ÿ–ú!gļúgō‰īæ6,(”úį&E&b‰ŌSE,d”úáSb‚WIEúfIbŠõKHHŸ,”úLžúLĮ‰OH ˇ”ú"OžN9] [hŠ3ˆ[`Ÿ,:•úBˆÛŠqI[€Ÿ#•ú€IÛ‹Ld˜Ÿ#úL úL9š˜wBüRuo‰˜ŒŦ+†•ú§ŒW‚XŒŦŧƒ~ŒúqŒ‚úgŒW‰3ˆĘ,ū•úBˆ–‰qIĘ#ŕú€I–‚LĐ#úLĢúLØšßwBüRuoĒr] ŧ4g‰Mįkt–ú^įëkkUúkë‚åjkúūj úôjë‰MįßŌ–ø^įupŸkßUøkupŸ‚åjß•ūjøôjupŸīįûö\ ¯Ŋ œ—]›ITG˙ ”`‘¤Ü/]›‘Š&é°ŸK˜úFé!ú<éW°Ÿ…|c’o_ƒx—ú~_WŒcPПƒú„P†úwPŧ‰O% Ɨú"Oę.9] øŸ>˜ú„PũúwP‹=P< úVP4úLPH’PĄ ˜2˜ú0P4ú$P[ށũ9:$Šg90 ‰šú!goúg̉īæC,ž˜úįߐR&b‰ŌSR,ژúáS‚WIRúfIŠõKUP ,8™úLWúL€‰OU -™ú"OW[9] hhŠ3ˆhh ,°™úBˆ”ŠqIhˆ #w™ú€I”‹Lq  #úLÃúLōš¸wBüRu_‰˜ŒĖ+ü™ú§Œ ‚XŒĖŧƒ~ŒúqŒ; úgŒ ‰3ˆę,tšúBˆO ‰qIę#;šú€IO ‚Lđ#úLd úL‘ š˙wBüRu_Ęr] Ü4g‰Mįxęšú^ᤠkxUúk¤ ‚åjxúūjÆ úôj¤ ‰Mį˙H›ø^įu`Ÿk˙Uøku`Ÿ‚åj˙•ūjøôju`Ÿīįö\  é¯č 뜁›ōžITë˙ ”`‘¤Ü/ōž‘Šö鸠ā›úęÚ ú ęú ¸ …|c%)āŠg%Đ žú!g) úge ‰īæ/,3œúį™ >&b‰ŌS>,oœúáSÕ ‚WI>úfIÕ ŠõKAđ ,͜úL úL: ‰OA œú"O G9] ThŠ3ˆTĄ,EúBˆN ŠqIT(Ą# ú€IN ‹L]@Ą#úL} úLŦ šˆwBüRuo‰˜Œœ+‘ú§ŒĘ ‚XŒœŧƒ~ŒúqŒõ úgŒĘ ‰3ˆē, žúBˆ ‰qIē#Нú€I ‚LĀ#úL úLK šĪwBüRuošr] Ŧ4g‰Mįdžú^į^ kdUúk^ ‚åjdúūj€ úôj^ ‰MįĪŨžø^įupŸkĪUøkupŸ‚åjĪ•ūjøôjupŸīįëö\ n8ß  Ÿ,ŸIT¤éā ”`ŪÜ/,ŸIT¤é´éˆ÷žj-œMŸ™Ŗø Ÿ‘øŸ‘ŠēéXĄ‡ úÚé” úĐéĘ XĄ…|c’o_ƒ´Ÿú~_Ę ŒcPxĄƒú„Pų úwP/ ‰O%  ú"O] .9]  Ąz ú„Pp úwP„ ‹=P<¸ĄúVP§ úLPģ ’PĄ ˜n ú0P§ ú$PÎ ށũ9:$Šg9ØĄÅĸú!gâ úg‰īæC,Ú úįRR&b‰ŌSR,ĄúáSŽ‚WIRúfIŽŠõKUøĄ,tĄúLĘúLķ‰OU iĄú"Oʐ[9] hhŠ3ˆhĸ,ėĄúBˆŠqIh0ĸ#ŗĄú€I‹LqHĸ#úL6úLeš¸wBüRu_‰˜ŒĖ+8ĸú§Œƒ‚XŒĖŧƒ~ŒúqŒŽúgŒƒ‰3ˆę,°ĸúBˆÂ‰qIę#wĸú€I‚Lđ#úL×úLš˙wBüRu_Ęr] Ü4g‰Mįx&Ŗú^įkxUúk‚åjxúūj9úôj‰Mį˙„Ŗø^įu`Ÿk˙Uøku`Ÿ‚åj˙•ūjøôju`Ÿīįö\ ß; ¯ŖĮŖITÔ>ā ”`ŪÜ/ĮŖbéē°ņ@ŦBœŨ­œ'‘œ'‘œ'‘ ¤9dŨ­‘¤æôe÷‘¤rfâ­‘`ĸŌ­ĒüØg\F‘Lģmsgjįû‘Pžrtį­MŠĄjvŦ˜ĸkФú˛jŒŒ°dvŦ˜ĸTúŋdŒúŋdŒŠˇįŦ°ĸlë¤ú×įûúÍį#°ĸ…|c¤ŦcPŠ‹č¤ŦČĸlĒĨúĢčEúĄčrČĸ…|cŒõb¤Ŧčĸƒú(cEúc”‰‹I¤ŦŲ ĨúšIE‚qI¤ŦÕú€IE‚WI¤Ŧ-úfIEēŦ:$Š&éģŦŖlėĨúFéˇú<éߍŖ…|cÍŦcPЎįÍŦ0Ŗm.Ļú×įúÍį)0Ŗ…|cāŦcPŠ@cáŦPŖmlĻƒ`cúVcKPŖ…|cīŦ=ŠHęņŦhŖmŽĻúhęmú^ę•hŖ…|c­cP€ŖĀ§žin%ˇŠĄj­˜Ŗn §ú˛jÖŒ°d­˜ŖTúŋdÖúŋdÖŠ&é$­¸Ŗos§úFéôú<é ¸Ŗ…|cŒcP*­ØŖƒú„PôúwP!:­:$Šöé;­øŖoĩ§úęAú ęTøŖ…|cI­)ā"­Ŋj‰sįg­ q"¨‚ī_g­ Îú`iúū_‰‚Å_k­úŪ_ÃúÔ_ãŠzįˆ­¤|h¨úŒį‹~ˆˆ­0¤úˆ”­4g‰Mį—­jɨú^į:k—­Uúk:‚åj—­úūjvúôj:Š3ˆĒ­H¤‚AŠúBˆ–‰qIĒ­#Šú€I–‹L°­`¤#úLŌúLšhŽwBüRu`Šsįå­x¤vŖŠ‹ī_å­x¤Îú`Lúū_l‚Å_î­úŪ_ĻúÔ_Ɖ*I7Ž{׊úIIčú¯4g‰MįA¯jŠŦú^į*kA¯Uúk*‚åjA¯úūj?úôj*‰3ˆT¯.‚!­úBˆS‰qIT¯#čŦú€IS‚LZ¯(#úLhúL•ši¯wBüRu`‘kŦvŦīį|­ĖN‡­w^Ķ­Ŋjû­mސŽrZŽį–Žmސ'Žb›2Žw^‘ŽmސšŽrZčŽrZõŽ÷ž¯mސ ¯b›¯w^r¯ö\ ō8L;n8¯c œ ޞITœ'˙ ”`‘¤Ü/˛‘ŠŽ_@ĨõŽúŽ_¨ú¤_Ô—cP `Ĩ™ŽŽú„PúwP‰O ŖŽú"O)9] ::$€ĨƒŽ_ú¤_FŒcP=˜Ĩ—ú„P[úwPsŽ:$Šg:¸Ĩ3ąú!g–úgŌ‰īæD,H¯úįS&b‰ŌSS,„¯úáSB‚WISúfIBŠõKVØĨ,â¯úL~úL§‰OV ׯú"O~\9] ihŠ3ˆiđĨ,Z°úBˆģŠqIiĻ#!°ú€Iģ‹Lr(Ļ#úLęúLš¸wBüRuo‰˜ŒĖ+ϰú§Œ7‚XŒĖŧƒ~ŒúqŒbúgŒ7‰3ˆę,ąúBˆv‰qIę#å°ú€Iv‚Lđ#úL‹úL¸š˙wBüRuoĘr] Ü4g‰Mįy”ąú^įˏkyUúkË‚åjyúūjíúôjˉMį˙ōąø^įupŸk˙UøkupŸ‚åj˙•ūjøôjupŸīįö\ Ņ5áx#2˛Ū\uŌœ'Ūq‡Ōœ'ߎ H˛`˛IT$íā ”`ŪÜ/`˛4íē”#¯Vœ´¸–œ'œ˛íü$œŖĒîœ';¤šãîœ'‘¤\uī´¸‘¤q‡īš¸‘@ĻŠ¸Ÿ™ķ÷$ŠĒûô0‘‘HŠ ˛¨¯hĻđYŗú$˛Ēú˛Õ‹*I¸¯€ĻÖúIIķúš(¯ĸĪú^įÛ8Œk>š@¯Uúk"9‹åj>šX¯úūjŒ9úôj"9‰MįqēĐú^į¸9kqēUúk¸9‚åjqēúūjÍ9úôj¸9šīį>šgŠpūŒšp¯úŅƒūú†ūá9ŠMį°šˆ¯žĐú^į :Œk°š ¯Uúk :‹åj°š¸¯úūjB:úôj :‰MįZē˙Đú^įb:kZēUúkb:‚åjZēúūjw:úôjb:œšīᐧš†v°šgŠzįŨšĐ¯öŌúŒį‹:‹~ˆŨšđ¯úˆē:‹4gŨš°úMgé:úCgē:Š3ˆįš0°ŽõŅúBˆ ;‰qIįš#ŧŅú€I ;‹LėšH°#úL';úLI;š?ēwBüRwüšá\ ‰éē ņdŌ‚ī_ē Éú`g;úū_{;‚Å_ ēúŪ_™;úÔ_­;‰zįCēöĒŌúŒįĪ;‚~ˆCēúˆä;Pē4gI¸mސU¸ė­b¸į–o¸mސ{¸ė­šmސšė­ašė­nšį–{šmސ‡šė­Ôšį–Ũšw^Xēö\ eūeū›Ÿ.Āē/œšĶ¤ŖĒ œ'‘¤šã œ'‘œ\u 5(<œq‡ 5(J<šæēËüPsüR1üQ‘›Č.đē,œ0Ô¤ŖĒœ'‘¤šãœ'‘œ\u5(<œq‡5(É<šģËüPsüR0üQ‘ßŪ FÔeÔITëā ”`ŪÜ/eÔITë(ëˆ0Ô„9œ†ÔŌØøFÔ‘øPÔ‘Š.ë`°ĀÕúNë=úDëE=`°…|c’o_ƒíÔú~_E=ŒcP€°ƒú„Pt=úwPĒ=‰O% ;Õú"OØ=.9] ¨°ŗÕú„Pë=úwP˙=‹=P<°úVP">úLP6>’PĄ ˜§Õú0P">ú$PI>ށũ9:$Šg9ā°ū×ú!g]>úg™>‰īæC,ÖúįÍ>R&b‰ŌSR,OÖúáS ?‚WIRúfI ?ŠõKUą,­ÖúLE?úLn?‰OU ĸÖú"OE?[9] hhŠ3ˆhą,%×úBˆ‚?ŠqIh8ą#ėÖú€I‚?‹LqPą#úLą?úLā?š¸wBüRu_‰˜ŒĖ+q×ú§Œū?‚XŒĖŧƒ~ŒúqŒ)@úgŒū?‰3ˆę,é×úBˆ=@‰qIę#°×ú€I=@‚Lđ#úLR@úL@š˙wBüRu_Ęr] Ü4g‰Mįx_Øú^į’@kxUúk’@‚åjxúūj´@úôj’@‰Mį˙ŊØø^įu`Ÿk˙Uøku`Ÿ‚åj˙•ūjøôju`Ÿīįö\ ß čØŲITŧëā ”`ŪÜ/ŲITŧëĖëˆŌØ-Ųœ(ŲtŨøčØ‘øōØ‘ŠŌëhąbÚúōëČ@účëū@hą…|c’o_ƒŲú~_ū@ŒcPˆąƒú„P-AúwPcA‰O% ŨŲú"O‘A.9] °ąUÚú„P¤AúwP¸A‹=P<ČąúVPÛAúLPīA’PĄ ˜IÚú0PÛAú$PBށũ9:$Šg9čą Üú!gBúgRB‰īæC,ĩÚúį†BR&b‰ŌSR,ņÚúáSÂB‚WIRúfIÂBŠõKU˛,OÛúLūBúL'C‰OU DÛú"OūB[9] hhŠ3ˆh ˛,ĮÛúBˆ;CŠqIh@˛#ŽÛú€I;C‹LqX˛#úLjCúL™Cš¸wBüRu_‰˜ŒĖ+Üú§ŒˇC‚XŒĖŧƒ~ŒúqŒâCúgŒˇC‰3ˆę,‹ÜúBˆöC‰qIę#RÜú€IöC‚Lđ#úL DúL8Dš˙wBüRu_Ęr] Ü4g‰MįxŨú^įKDkxUúkKD‚åjxúūjmDúôjKD‰Mį˙_Ũø^įu`Ÿk˙Uøku`Ÿ‚åj˙•ūjøôju`Ÿīįö\ ß. ŠŨĸŨITģā ”`ŪÜ/ĸŨ„ęßV ŊŨÕŨITÆęā ”`ŪÜ/ÕŨÖęß~ đŨŪIT%ā ”`ŪÜ/ŪŽ5ßĻ #Ū;ŪITĮčā ”`ŪÜ/;Ū×čßÎ VŪnŪITjëā ”`ŪÜ/nŪzëßö ‰ŪĄŪITėā ”`ŪÜ/ĄŪėēãņ ģ2œņ¤zœ'‘¤zœ'‘¤6œ'‘ ¤âX%‘¤įX%‘¤kē%‘ p˛ ņŸG´5D‰`ėBģUßúrėŸD‰éOģ ˇß‚ī_Oģ Éú`šDúū_ÍD‚Å_RģúŪ_āDúÔ_ôDŠtŨh쐞!áø”ŨĒŸúŠŨ EŠŠęģ°˛JāúĒęPEú ęxE°˛…|cŒcP…ģȲƒú„PPEúwPÛE•ģ:$ŠMįĄģā˛Ģāú^įûEŒkĄģø˛Uúk;F‹åjĄģŗúūjíGúôj;F‰Mį*ŋ áú^į Hk*ŋUúk H‚åj*ŋúūj#Húôj HģīįĄģg‰sįnģ }á‚ī_nģ Ε`úū_7H‚Å_rģ•Ū_úÔ_~HЧŨÄģ(ŗäâúĮŨ­HúŊŨÕHŠÜęŅģHŗ âúüęūHúōę&IHŗ…|cŒcP×ģ`ŗƒú„PūHúwP|Iįģ:$ŠMįđģxŗnâú^įœIŒkđ쐺UúkįI‹åjđ썺úūj}KúôjįI‰MįAŋĪâú^įKkAŋUúkK‚åjAŋúūjŗKúôjKŅģīįđģgŠÚŨ ŧĀŗGäúúŨĮKúđŨīKŠ)o-ŧāŗpãƒIoú?oLāŗ…|cŒo3ŧøŗƒúonLúoĒLBŧ7=ŠMįKŧ´Ņãú^įĘLŒkKŧ(´UúkM‹åjKŧ@´úūj„NúôjM‰MįXŋ2äú^į¤NkXŋUúk¤N‚åjXŋúūjēNúôj¤N-ŧīįKŧgŠ ŪaŧX´Žåú-ŪÎNú#ŪöNŠŨčmŧp´×äúũčOúķčæú ëŲQú–ëRĩ…|cŒcPÂŧ ĩƒú„PŲQúwPSRŌŧ:$ŠMįÛŧ8ĩŸæú^įsRŒkÛŧPĩUúkēR‹åjÛŧhĩúūjŨSúôjēR‰Mį†ŋįú^įũSk†ŋUúkũS‚åj†ŋúūjTúôjũSŧŧīįÛŧgŠsŪūŧ€ĩ|čú“Ū&Tú‰ŪNTŠ$ė Ŋ ĩĨįúDėwTú:ėŸT ĩ…|cŒcPŊ¸ĩƒú„PwTúwPņT!Ŋ:$ŠMį*ŊĐĩčú^įUŒk*ŊčĩUúkXU‹åj*ŊļúūjVVúôjXU‰Mį ŋgčú^įvVk ŋUúkvV‚åj ŋúūj‹VúôjvV Ŋīį*ŊgŠÚŨ@ŊļßéúúŨŸVúđŨĮVŠ)oLŊ0ļéƒIoú?oåV0ļ…|cŒoRŊHļƒúo7WúosWaŊ7=ŠMįjŊ`ļiéú^į“WŒkjŊxļUúkÚW‹åjjŊļúūjŗXúôjÚW‰MįžŋĘéú^įĶXkžŋUúkĶX‚åjžŋúūjčXúôjĶXLŊīįjŊgŠsŪšŊ¨ļFëú“ŪüXú‰Ū$YŠ$ė§ŊČļoęúDėMYú:ėuYČļ…|cŒcP­Ŋāļƒú„PMYúwPĮYŊŊ:$ŠMįÆŊøļĐęú^įįYŒkÆŊˇUúk.Z‹åjÆŊ(ˇúūjâZúôj.Z‰MįÜŋ1ëú^į[kÜŋUúk[‚åjÜŋúūj[úôj[§ŊīᐯŊgŠÚŨÜŊ@ˇŠėúúŨ+[úđŨS[Š)očŊXˇŌëƒIoú?oq[Xˇ…|cŒoîŊpˇƒúoÃ[úo˙[ũŊ7=ŠMįžˆˇ3ėú^į\Œkž ˇUúkf\‹åjž¸ˇúūjõ\úôjf\‰Mįúŋ”ėú^į]kúŋUúk]‚åjúŋúūj*]úôj]čŊīįžgŠsŪ6žĐˇîú“Ū>]ú‰Ūf]Š$ėCžđˇ9íúDė]ú:ėˇ]đˇ…|cŒcPIž¸ƒú„P]úwP ^Yž:$ŠMįbž ¸šíú^į)^Œkbž8¸Uúkp^‹åjbžP¸úūjÚ^úôjp^‰MįĀûíú^įú^kĀUúkú^‚åjĀúūj_úôjú^CžīįbžgŠÚŨxžh¸pīúúŨ#_úđŨK_Š)o„ž€¸œîƒIoú?oi_€¸…|cŒoŠž˜¸ƒúoŦ_úoč_™ž7=ŠMįĸž°¸ũîú^į`ŒkĸžČ¸Uúk`‹åjĸžā¸úūj@`úôj`‰Mį6Ā[īø^įu\Ÿk6ĀUøku\Ÿ‚åj6Ā•ūjøôju\Ÿ„žīįĸžgŠzįĪžø¸TđúŒįT`‹~ˆĪžšúˆƒ`‹4gĪž8šúMg˛`úCgƒ`Š3ˆŨžXšŽGđúBˆÆ`‰qIŨž#đú€IÆ`‹Lâžpš#úLä`úLašŋwBüRwōžá\ ‰zįŋšđúŒį1a‚~ˆŋúˆFa ŋ4gÄģ뭐ŧ뭐 ŧ0Ԑ¯ŧ뭐ūŧ뭐ŽŊ÷žšŊ뭐*žŌؐ6žė­Æžį–Īžw^(ŋö\ ¯œ3ņŠõIT9č˙ ”`‘¤Ü/Šõ‘ŠOčˆšxōúočsaúečŠaˆš…|c’o_ƒĨņú~_ŠaŒcP¨šƒú„PØaúwPb‰O% ķņú"OøÄ#úL#†úLU†šËwBüRuč|2LI@úALs†‘b‰D(bF5ģƒg(úS(ŗ†‰–Lw#;˜ƒšLúĨL冂ÔL’#;ƒ÷LúãL‡‹aL¨Å5úpLI‡‘ĀŠ(Ā(ÅCGú (ģ‡Š8æĀPÅ5ļúIæí‡—3ˆĀpÅ@”úBˆˆŠqIÅ#Zú€Iˆ‹Lô¨Å#úLQˆúLƒˆšģwBüRuŦ~2L˙@úALĄˆ‘‰D(F5$ƒg(úS(ňŠÔL#ĀÅ#;ƒ÷LúãL鈂–L3#;ƒšLúĨL ‰‚aL^5úpL1‰‘v‰zįŋAúŒįn‰‚~ˆŋúˆ‰Ī4g‰3ˆĪBúBˆˉŠqIĪØÅ#Ėú€Iˉ‹LÕđÅ#úLâ‰úLŠšíwBüRuč|‰3ˆíCúBˆ$ЉqIí #Eú€I$Š‚Lö#úL:ŠúLiŠšwBüRuč|Į&bÜ&bņ 뭐Ԩ%뭐Œmސ›rZ¨0ԐąrZŧw^‘t‘1ö\ |ö\ ›ņ. Å'œn¤zJœ'‘¤zJœ'‘¤âXKU%‘ ¤įXKU%‘žÅōß^¤}•ā ”Ñërhs H•Å5ēÃō œķ%å%¤z%œ'‘¤z&œ'‘¤âX'%‘ ¤įX(%‘ÆŪ%īlhs/Ťīrhs/ŤĒāĨ8 ‘č|Ē,Ú< ‘¤~Šn(0Æ0”ú‡|Šú}¤ŠŠM’(PÆ KÂú\’¤Š‰Š‘( ?Ĩú¸‘¤Š‹ȑhÆ ?úבˊŠM’L€Æ Kú\’äŠ‰Š‘L ?ú¸‘䊋ȑ Æ ?úב‹‹’p¸Æ Mú ’4‹ú’l‹¸ÆŦ'’Ŧ4’Šâ‘pØÆ uuú푤‹‹â‘‘đÆ vúí‘ü‹‰éČ +ö‚ī_Č Éú`4Œúū_HŒ‚Å_ÎúŪ_gŒúÔ_{ŒŠįĮ8ÄúIį Œú+įŒŠ 0ĮEú<‘)Šgį)XĮņúŠį4ŽúvįlŽŠŸį)ˆĮ#?žƒÂįúŽįlސŦ ũŠ M­¸Į#?΃/MúM莐Ԡũ‚ÔL¨#?ƒ÷LúãLWŠ-éĐĮ‡úFmú<ą—ķŒéøĮc?úą‘[˜Œ} cú§Œ•‚XŒ} ŧƒ~ŒúqŒ…‘úgŒ•‰aLĀ!­úpL§‘‘ؐޠũ‘ë‘ūŠšŽČ9$úâ֑ú֍’ŒķQ—0Č$ŌúRo’ú RĪ’HȅR“Šoš`Č9Xúoc“úo…“ˇ7=ŠįˇxČ<&úIįŪ“ú+į"”Š ˇ˜Č§ú°”‘ÅŠgįɸČSúŠį>•úvį^•ŠŸįÉčČ#?ƒÂįúŽį^•- ũŠ M-É#?0ƒ/MúM땐U ũ‚ÔL´.#?ƒ÷LúãLw–Š-p(ÉéúF–ú<Ũ–—ķŒpPÉcĄúŨ–‘⏘Œ cú§Œh—‚XŒ ŧƒ~ŒúqŒų—úgŒh—‰aL–úpL˜‘¯ ũ‘€‘“ŠšhÉ=†úâ=˜ú֍‹˜ŒķQˆÉ$ŌúRō˜ú R%™ É…Ri™Šo¸É=ēúoš™úođ™87=‰sįoA‚ī_oÎú`Wšúū_š‚Å_v úŪ_öšúÔ_.›Š÷žĢØÉAƒúŸ|›ú ŸěŠēéŋøÉŦúÚéŲ›úĐé!œøÉ…|cŒcPČĘƒú„PŲ›úwPŠœØ:$ŠMįæ(Ę ú^įǜŒkæ@ĘUúkǜ‹åjæXĘúūjũœúôjǜ‰Mįánú^įkáUúk‚åjáúūj3úôjŋīᐿgŠzįBpĘAg úŒįG‹~ˆBĘúˆy‹4gB°ĘúMgĢúCgyŠ3ˆOĐĘŽZ úBˆ˝‰qIO#! ú€I˝‹LTčĘ#úLéúL žš—wBüRvhá\ Š3ˆkËBā úBˆ+ž‰qIk #Ļ ú€I+ž‹LtË#úL]žúLžš[wBüRuč|Š3ˆ0ËCY!úBˆ­ž‰qI #!ú€I­ž‹LˆHË#úLߞúLŸš‹wBüRuč|Š(“`Ë<Â"ú (/ŸŠ8æ“€Ë51"úIæaŸ—3ˆ“ Ë@"úBˆ“ŸŠqI“ĀË#Õ!ú€I“Ÿ‹LÄØË#úLáŸúL š{wBüRuč|2LĪ@úAL1 ‘č‰D(čF5Ÿ"ƒg(úS(q ‰–Lũ#;|"ƒšLúĨLŖ ‚ÔL#;ƒ÷LúãLÕ ‹aL.đË5úpLĄ‘FŠ(FĖC+$ú (yĄŠ8æF0Ė5š#úIæĢĄ—3ˆFPĖ@x#úBˆŨĄŠqIFpĖ#>#ú€IŨĄ‹LzˆĖ#úLĸúLAĸškwBüRuŦ~2L…@úAL_ĸ‘ž‰D(žF5$ƒg(úS(ƒĸŠ–LŠ Ė#;å#ƒšLúĨL§ĸ‚ÔLÎ#;ƒ÷LúãLËĸ‚aLä5úpLīĸ‘ü‰zį÷Aq$úŒį,Ŗ‚~ˆ÷úˆ[Ŗ4g‰3ˆBę$úBˆŠŖŠqI¸Ė#°$ú€IŠŖ‹L ĐĖ#úL ŖúLĪŖš%wBüRuč|‰3ˆ%Cc%úBˆâŖ‰qI% #)%ú€IâŖ‚L.#úLøŖúL'¤š@wBüRuč|M&bb&b†ņ’뭐ŸŌؐĢ뭐mސ!rZ.0Ԑ7rZBw^‘O‘aáö\ iö\ ›/ĐÅ/œR&¤zQœ'‘¤zQœ'‘¤âXR%‘ ¤įXR%‘öŚßđĀa&†&ā ”ļņāļÄ%âî–ÔÎ%ˆR& b¯œĸ&Š'øa&‘‰îĘË&ú$î:¤čĖu'…w&M¤‰cPUÎ'ø„PYŸƒwPi:$‰cPlÎB'ú„Pv¤ƒwP}:$/^c Uû鐊=’}֐§}֐tc ¯ö\ ß+Æ™'ž'ā ”āļÄ%âî–ÔÎ%ˆŠ'u=œÚ'Ŋ,ø™'‘‰îĘ(ú$îޤÍĒ(…¯'Ą¤‰cPQÎG(ú„PʤƒwPb:$‰cPeÎw(ú„Pō¤ƒwPv:$0^c Nû鐃=‹}֐ķ}Ö‰æDŽMĪĢ*úõD Ĩ‰ČĖ”7¨ø)ƒũĖúņĖĨúåĖ2Ĩ™Ė”7—úšĖĨú­Ė2Ĩ„”7 E”7~ú*EĨúEEĨŒx˧ ÍgúŒĖpĨŒ_Ч Í]úqŠpĨ‹3ˆ§ ÍŌúBˆ¨Ĩ‰qI§#š)ú€I¨Ĩ‹L­8Í#úLäĨúLĻšŋwBüRud‚"ÍËŠú1Í<ĻŗË ƒ,ŗúBŗQĻú6ŗmĻ„Ëč˛Ī ˛ƒķ˛ú ŗ€Ļú˙˛œĻŊ˛Ī Mšƒ˞úⲀĻúÖ˛œĻØá\ ‰æDųD΍,øõDwŸ‰ČĖ˙#¨÷+ƒũĖúņ˝ĻúåĖÂĻ™Ė˙#—úšĖ¯Ļú­ĖÂĻ„˙# E˙#~ú*E¯ĻøEVxĖgúŒĖÕĻ_Š]úqŠÕĻ‚3ˆŌúBˆõωqI#¸+ú€IõĻ‚L #úL§úLD§šwBüRuc‚"Í"Šø1ÍwŸŗ" ƒ,ŗúBŗW§ø6ŗS„"č˛&˛ƒķ˛ú ŗs§ú˙˛§Ŋ˛&Mšƒ˞úâ˛s§úÖ˛§/á\ tc =ö\ ›õōķœ!0IE%¤EV7ß6‘¤)7%‘Ĩend7%‘Ĩv8Ü:‘ PÍ 0Ÿķņ9%ĸ§Š”ehÍ9[-úŖeاúŖeا™7Q-.ŸÍIC%¨€ÍîĀÛD%Ÿq§E%G¨Šŗeo¨ÍFĀ-ƒÂeƒĖe‰ŗevFâ-ƒÂeƒĖe‰aō~F!.úōk¨úuō~¨„~…ō‘¨gŨû‰cP¨:].ú„P¤¨ƒwPŧ:$‰cPŋ;.ú„PܨƒwPĐ:$‰cPâ;Á.ú„Pô¨úwP Аī:$‰cP8=ņ.ú„P*ŠƒwPL:$‰cPO>!/ú„PbŠƒwP`:$‰cPt>U/ú„PzŠúwP’А:$‰cP?‰/ú„P°ŠúwPČŠœ:$¨ûéŨ=ú=cP}֐8ûéo=Š=§=´cPŊ}֐Ø}֐ë}֐āö\ ķö\ ÷ėōX_Æ$œ=0Ą0øûō‘øķ‘‚§ō Æ  úÆōæŠøšō‘‰”e Æ M•0ƒŖeƒŖe ÆŊ,ũ4ŋ0Ƃœš0á1˙ ”lH‘‰Ōō=Æûæ0úáō.ĒŠøaTÆĀÍ˙1úbYĒúbYĒØÍĖ1ži'qĒŠøapÆđÍS1úb¨Ēúb¨Ē‚ėō†ÆúķĀĒúûōĶĒ‚§ō‰Æ  úÆōæĒúšōĀlj”eŠÆ Mŋ1ƒŖeƒŖeœÆŊ,PÆŊ,mÆŊ,›!ķmœ3‰…%Ĩstrę3‘¤ψę|:‘Îģendķ°*‘l˙N%ŸØQ2Ģ42ŸOĄ÷$FĢŸ3’ %f̉ėSîč2øûS‘‚‹I6øšI‘‚qIÕø€I‘‚WI-øfI‘‰îî3ú îĢ"Ŋ_ :š=Ē1áIķV3œ%§%écŽ%éosŽ&7›uķcœX;œ%§% cÕ%‘ osÕ&7‘0ÎM;æˇãØĄķ’cP ×ã3ø„PūŸúwP¤Ģ:$—#3HÎØÅ8úJ3Ŧú@3lŦ’cP8—>4ú„PÉ­úwP᭐H:$’cP¨‘q4ú„Pô­úwP ސ¸:$’cPĐ š¤4ú„PŽúwP7ސā:$’cPđ ×4ú„PJŽúwPbސ:$’cP Š 5ú„PuŽúwPŽ :$’cP0 Ŗ=5ú„P ŽúwP¸Ž@:$’cPP Ŧp5ú„PËŽúwP㎐`:$’cPp  Ŗ5ú„PöŽúwP¯€:$’cP ĻÖ5ú„P!¯úwP9¯ :$’cP° ” 6ú„PL¯úwPd¯Ā:$’jäĐ¯(6úuäw¯—õb€Îŗŗ6ú(cī¯úcC°‰‹IŲ ¨6úšIqIÕú€IWI-úfI:$—3ˆ Îŗ*7úBˆ„°ŠqIĀÎ#ņ6ú€I„°‹LØÎ#úLž°úLø°šŌwBüR‘[—3ˆ#đÎŗĄ7úBˆą‰qI##h7ú€Ią‹L)Ī#úL6ąúLpąšÅwBüR‘`’—Pâ°Ô7ú¸PŽąúĢPšąô:$’3ˆŗK8úBˆĖą‰qI#8ú€IĖą‚L%#úLáąúL˛š4wBüR‘[’3ˆ4ŗ°8úBˆ!˛‰qI4#‰8ú€I!˛‚L:#úL5˛úLJ˛ėw(Mi—cPP ĪŲ9ú„P]˛úwPĩ˛`:$Č:$D:$:$—cP`HĪāS9ú„P ŗúwPTŗp:$_:$’cP‡ę†9ú„P”ŗúwPŦŗ—:$—cP}hĪčš9ú„PŋŗúwPẐŒ:$—õbŒ€Īč@:ú(c´ƒc‰‹IŒŲ 5:úšI´‚qIŒÕú€I´‚WIŒ-úfI´œ:$—3ˆœ Īčˇ:úBˆ&´ŠqIœ¸Ī#~:ú€I&´‚LĨ#úL;´úLh´š¸wBüR‘[’3ˆLč.;úBˆ{´‰qIL#õ:ú€I{´‚LR#úL´úLĨ´šawBüR‘[y=h=}w(Jö\ ›ĻķĀÆœ;žcí%¸´ osí&7‘‡ÎÆV3ü‘‘áĀķĐ;œ%§%écŽ%éosŽ&7›ėķkœŌCœ%§% cÕ%‘ osÕ&7‘ĐĪĮCæˇãØĄķ’cP ×]<ø„PūŸúwP×´:$—;čĪØ?AúÄ;;ĩúē;Ÿĩ’cP@—¸<ú„PAļúwPYļP:$’cP°‘ë<ú„PlļúwP„ļĀ:$’cPØš=ú„P—ļúwP¯ļč:$’cPđ Q=ú„PÂļúwPÚļ:$’cP Š„=ú„PíļúwPˇ :$’cP0 Ŗˇ=ú„PˇúwP0ˇ@:$’cPP Ŧę=ú„PCˇúwP[ˇ`:$’cPp  >ú„PnˇúwP†ˇ€:$’cP ĻP>ú„P™ˇúwPąˇ :$’cP° ”ƒ>ú„PġúwPܡĀ:$’jäĐ¯ĸ>úuäõb Đŗ-?ú(c]¸úcą¸‰‹IŲ "?úšI]¸‚qIÕú€I]¸‚WI-úfI]¸:$—3ˆ@Đŗ¤?úBˆō¸ŠqI`Đ#k?ú€Iō¸‹LxĐ#úL,šúLfššßwBüR‘[—3ˆ(Đŗ@úBˆ„š‰qI(#â?ú€I„š‹L.¨Đ#úL¤šúLŪššŌwBüR‘`’—Pę°N@ú¸PüšúĢP'ēü:$’3ˆ'ŗÅ@úBˆ:ē‰qI'#Œ@ú€I:ē‚L-#úLOēúL|ēš<wBüR‘[’3ˆ<ŗ*AúBˆē‰qI<#Aú€Iē‚LB#úLŖēúL¸ēņw(Mi—cPXĀĐؐAú„PËēúwP#ģh:$Đ:$I:$ :$—cPhčĐāÍAú„PzģúwPÂģx:$d:$’cPęBú„PŧúwPŧŸ:$—cPŠŅč3Bú„P-ŧúwPUŧ™:$—õb™ ŅčēBú(cŧƒc‰‹I™Ų ¯BúšIŧ‚qI™Õú€Iŧ‚WI™-úfIŧŠ:$—3ˆŠ@Ņč1CúBˆ”ŧŠqIŠXŅ#øBú€I”ŧ‚L˛#úLŠŧúLÖŧšÅwBüR‘[’3ˆTč¨CúBˆéŧ‰qIT#oCú€Iéŧ‚LZ#úLūŧúLŊšiwBüR‘[=m=Šw(Rö\ ›ôĐÆœDžcđ%&Ŋ osđ&7‘‡ŪÆĐ;ü‘‘›2ôūœ/Gœ$%§$% cÕ$%‘ osÕ&7‘pŅ$GŗˇãØĄķEŊ’cP רDø„PâŸúwPyŊ:$—cP(ŅŲŪDø„PūŸúwPÆŊ::$’cPPāEø„PžŸúwPž`:$’cPyęGEú„P=žúwPUž‰:$—cPĨ¨Ņč}Eø„PŨŸúwPhž´:$—õb´ĀŅčFú(c‡žƒc‰‹I´Ų ųEúšI‡ž‚qI´Õú€I‡ž‚WI´-úfI‡žÄ:$—3ˆÄāŅč{FúBˆœžŠqIÄøŅ#BFú€Iœž‚LÍ#úLąžúLŪžšÜwBüRuc’3ˆāčōFøBˆudŸ‰qIā#šFø€IudŸ‚Læ#úLņžúLŋšõwBüRucš(¤{GüPvüRsi=Ĩw(ūö\ ›^ôāÆœ}G wcö$%‘ osö&7‘‡åÆDü‘‘ü‘‘ßP­ŒGĸGā ”úîëp‹ŋ÷}Gą`KœžGSHøŒG‘ø–G‘Š3ˆŌŽHHúBˆ1ŋ‰qI#Hú€I1ŋ‹L(Ō#úLOŋúL‰ŋšIwBüR‘o-á\ äZ“eHzHā ”ų9āļÄ%ˆSHo8đÆAœ–H‚LøeH‘ŠÖîĮ@Ō“gIúåî§ŋ‹}GĮ@Ōú–GÖŋúŒG§ŋŠ3ˆ$Į`ŌŽ[IúBˆęŋ‰qI$Į#"Iú€Ięŋ‹L)ĮxŌ#úLĀúL*ĀšČĮwBüRuw=Įá\ ŠÖî@ĮŌ“/JúåîHĀ‹}G@ĮŌú–GwĀúŒGHĀŠ3ˆGĮ¨ŌŽ#JúBˆ‹Ā‰qIGĮ#ęIú€I‹Ā‹LLĮĀŌ#úLŠĀúLËĀš¸ĮwBüRuw\Įá\ Š3ˆ_ĮØŌ“§JúBˆé‰qI_Į#nJú€IéĀ‹LeĮđŌ#úL ÁúLGÁšˆĮwBüRuwŠ3ˆlĮĶ“KúBˆuÁŠqIlĮ Ķ#æJú€IuÁ‹LqĮ8Ķ#úL“ÁúLĩÁš ĮwBüRuwŠÖîĪĮPĶ“IKúåîĶÁÜĮ}GŠÖîÜĮhĶ“sKúåîéĮ}G‰3ˆéĮ“ëKúBˆ-ŠqIéĮ€Ķ#˛Kú€I-‹LėĮ˜Ķ#úLBÂúLošČwBüRuw‰3ˆČ“cLúBˆ‚‰qIČ#*Lú€I‚‚LČ#úL•ÂúLšČwBüRuwĮôJČö\ ,ČôJáxô LITËëxSÛ9߯¯LÄLā ”÷@āļÄ%÷ LžU@ČLœāL°Rø¯L‘‰T§XČ)d gMƒ|§úq§Õ‚Ø|XČ)(ƒ}ƒ}úõ|ę‚‚LbČ Ŧú”L5ÐoČzHwČá\ ŠŽîČ°Ķb 9NúîSË ¯Č°ĶŠú¯SÏ–ޙȠƒĨŽúģŽxÃú¯ŽšÃ„™ČaŽČ ˛ƒlŽú„Ž­ÃúxŽĪÏ6ŽČ MšƒEŽú[Ž­ÃúOŽĪÐĻČá\ ‰˛îŠČb OúÁîâ ­ŠČŠú¯­âÏ,­¯Č ƒ;­úQ­úÃúE­Ä„¯Č÷ŦŗČ ˛ƒ­ú­/Äú­QďĖŦŗČ MšƒÛŦúņŦ/ÄúåŦQĐŧČá\ ŠÖîŋČČĶb ĶOúåîdÄ‹}GŋČČĶú–GŒÄúŒGdÄŠ3ˆÉČāĶŽĮOúBˆ Ä‰qIÉČ#ŽOú€I Ä‹LÎČøĶ#úLžÄúLāÄšÉwBüRugŪČá\ Š3ˆáČÔb KPúBˆūĉqIáČ #Pú€IūÄ‹LęČ(Ô#úLFÅúL‚ÅšÉwBüRug‰Žî'Éb Qúî•Å‚ ¯'ÉŠú¯•ŏ–Ž-É ƒĨŽúģŽ­Åú¯ŽĪÅ„-ɏaŽ1É ˛ƒlŽú„ŽâÅúxŽÆ6Ž1É MšƒEŽú[ŽâÅúOŽÆ:Éá\ ‰˛î=Éb īQúÁîÆ‚ ­=ÉŠú¯­Æ,­CÉ ƒ;­úQ­/ÆúE­QÆ„Cɏ÷ŦGÉ ˛ƒ­ú­dÆú­†ÆĖŦGÉ MšƒÛŦúņŦdÆúåŦ†ÆPÉá\ ŠÖîVÉ@Ôb Rúåî™ÆdÉ}G‰3ˆdÉ(b ‘RúBˆÉÆŠqIdÉXÔ#XRú€IÉÆ‹LgÉpÔ#úLáÆúLĮšÉwBüRugČôJ$ÉôJˆÉö\ ÷ LbüÉœĖRęRø¯L‘žÉÄLŽĢÉá\ á’ôSITëxSë@áŦô&SITëxSV@ßt¸5SJSā ”lHāļÄ%ˆ&S9‡°ÉœfSaø5S‘‰ĐvČÉ^à Tƒøvúív!Į‚‹vČÉ^(ƒÂvƒĩvú¨vSĮ‹ęRØÉˆÔ ŦúüR­Į‚ LØÉTú¯LËĮáÉÄLéÉá\ ‰˙î&ĘJÆ™Tƒ'īúīŪĮ‚Ŧ›&ĘJ(ƒã›ƒ֛úɛVČ‹S0Ę Ô ŦúSŖČ‚*K0ĘTú9KÁȐ9Ęá\ Š:ī•ʸÔÁßTúIīÔČ‹Ås•ʸÔúŪs>ÉúÔsÔČŠ^īŽĘĐÔÁbVúmī‚É‹ufŽĘĐÔúŽfėÉú„f‚ÉŠšf¸ĘđÔŽVVúŠf0Ę’īŠŋĘ õkUúúŠYʐČĘda —3ˆËĘÕķâUúBˆlʉqIËĘ#ŠUú€IlĘ‹LĐĘ(Õ#úLŠĘúLŦĘšuĖwBüRud3ˆŒÍķúBˆĘʉqIŒÍ#Vú€IĘĘ‚L‘Í#úLŨĘúL Ëš ÍwBüRudäĘá\ ЇīįĘ@ÕÁ˛Vú™īË‚Ü6Ëí úë6‡Ë Ë7Ëá\ ŠĨS$ËXÕÁ+Yú´SšËxՊW…ĘSöˉôl$Ë 0+WúmšË‚¤l$Ë$úŊlšËúŗl%ˉGm'Ë 1mWúVmšË‚¤l'Ë6úŊl}Ėƒŗl‚-mJË 0úŅr] ‘SҐkŅr] ‘{ҐĐŌö\ īŌá\ Ķá\ á úÉlI_TpÛ9Ū†9ķ9Ū:‡9ķ9ŪD9í9âîŽ/@G ßĖ’Øl mā ”eë__nŽë__sŽœ'âîC“`“ũ§’hœ%mŲt˙ ”e‘œâĸGՌ)ÚĨ__xGŲt‘ĀמnŸęĨQÛ9SÚ‰Y} LŅmúm}qÚú…}Úúy}¤Ú} MŊú,}qÚúB}Úú6}¤Ú‹•3Ø×SúˎÚúŋåÚú˛"Û‹úĀ3Ø×‚ú;ÁˇÚú.ÁåÚú!Á"Û‹yĀ3Ø×_úēŽÚú­ĀåÚú Ā"ۍØ×…ÉĀ@Û‹}l3Ø×VúĢlˇÚúžlåÚú‘l"ۍØ×…ēl`ې]É^ „hîC^`“Ÿ0=``“†ÛŸYWaĨŒËÛŸ€obĨŒõÛŠÉlhđ×_’oøīlōŠc •âløØlVđׅūl]܉eh koƒ)eƒ)e‚CŊq“øcŊō*oƒWŊŠ„Ø`¸oƒ>ú1‡ÜŠÂ”(Øa;pú!¯܃+(؏éÁ”ĒúôÁØÜƒÂžÁ”MļúÍÁØÜúãÁë܃×Á r] ‰Y}Š ižpúm}˙Üú…}Ũúy}HŨ}Š MŊú,}˙ÜúB}Ũú6}HŨŠ5´@Ørirƒ‚úukŨúh•Ũú[ŗŨ‹Ũ´@Ø0.ƒ*úkŨú•ŨúŗŨ‹Œ´@Ø0úÁkŨúĩ•ŨúŠŗŨ@؅ĪŅŨŒJ´@Ø0~úkŨús•ŨúgŗŨŒ´@Ø0]ú<kŨú/•Ũú"ŗŨ‹ļ´@ØŌú÷kŨúę•ŨúŨŗŨ‹W´@Ø˛ú˜kŨú‹•Ũú~ŗŨ@؅§ŅŨ‹ ´@ØŒú9kŨú,•ŨúŗŨ@؅HņŨ;É^ Š5ÅXØy4tƒ‚úuŪúhAŪú[aŪ‹ŨÅXØ0.ƒ*úŪúAŪúaŪ‹ŒÅXØ0úÁŪúĩAŪúŠaŪX؅ĪŪŒJÅXØ0~úŪúsAŪúgaŪŒÅXØ0]ú<Ūú/AŪú"aŪ‹ļÅXØŌú÷ŪúęAŪúŨaŪ‹WÅXØ˛ú˜Ūú‹AŪú~aŪX؅§Ū‹ ÅXØŒú9Ūú,AŪúaŪX؅HŸŪÉ^ ‚,­×Šú;­ÅŪúQ­ØŪúE­ķŪ„×÷ŦÛ ˛ú­ßú­ßú­4ߏĖŦÛ MšúÛŦßúņŦßúåŦ4ߐäá\ :á5ú*uI_Tp%Ū†9–'Ū:‡9–'ŪD9|:âîŽ/@G ßߜ9unuā ”Žeë__nŽ—ë__sŽœ'âîC“sũēœfœ†u:}˙ ”Úe‘œâĸGč–GßĨ__xG:}‘xØwŸęĨQ%|߉(~ L2vú<~šßúT~ÅßúH~úߏė} MŊúû}šßú~Åßú~úß‹ú/ØSú1+āú$\āúŠā‹ŨÂ/Ø‚úÃ+āúÃ\āúÊā‹\Â/Ø_úÂ+āúÂ\āúƒÂŠāØ…ŦÂĮā‹Ūt/ØVú u+āú˙t\āúōtŠāØ…uįāUÉ^ „bîC^sŸ0=`s áŸYWa¸–Rៀob¸–páŠ*ub¨Ø_ķwøPuōŠc •Cuø9uV¨Ø…_uØá‰”ebĖwƒŖeƒŖe‚CŊg“øcŊō‹wƒWŊŠyzĀØ`xƒŖú–âŠõÇčØaœxúÄ?âƒÄč؏ĖÇĒú×ÃhâƒãÏĄÃ‡Mļú°ÃhâúÆÃ{âƒēАr] ‰(~Ŗ i˙xú<~âúT~­âúH~Íâė}Ŗ MŊúû}âú~­âú~Í⊚¯ŲrĘzƒįúÚđâúÍãúĀ,ã‹B¯Ų0.ƒú‚đâúuãúh,ã‹ņ¯Ų0ú&đâúãú,ãŲ…4X㌯¯Ų0~úäđâúØãúĖ,ãŒj¯Ų0]úĄđâú”ãú‡,㋯ŲŌú\đâúOãúB,ã‹ŧ¯Ų˛úũđâúđãúã,ãŲ… Xã‹p¯ŲŒúžđâú‘ãú„,ãŲ…­xã2É^ Šš¸ Ųy•|ƒįúÚŽãúÍØãúĀä‹B¸ Ų0.ƒú‚ŽãúuØãúhä‹ņ¸ Ų0ú&ŽãúØãúä Ų…4!䌯¸ Ų0~úäŽãúØØãúĖäŒj¸ Ų0]úĄŽãú”Øãú‡ä‹¸ ŲŌú\ŽãúOØãúBä‹ŧ¸ Ų˛úũŽãúđØãúãä Ų… !ä‹p¸ ŲŒúžŽãú‘Øãú„ä Ų…­AäÉ^ ‚–ŽĪŠúĨŽwäúģŽŠäú¯ŽĨä„ĪaŽĶ ˛úlޏäú„ŽËäúxŽæä6ŽĶ MšúEޏäú[ŽËäúOŽæäÜá\ ˆ:ß‘N}f}ā ”eë__x‘f}d:ß2›z}’}ā ”Úeë__x‘’}č:ũ;!͇œ¯}"˙ ”÷@‘œž|w Û9ųäŠ?}ĶHŲx d~úX}1åúN}^å‰Y} Ķ •Y~úm} åú…}ĩåúy}Ęå} Ķ MŊú,} åúB}ĩåú6}ĘårĶ m‰”e6Ķy Ž~úŖeŨåúŖeŨå‹k}>ĶhŲy ú„}æúz}Yæ‰(~GĶ•ú<~›æúT~°æúH~Åæė}GĶMŊúû}›æú~°æú~Åæ’Ķnuá^únI_Tp;Ū†9ĒBŪ:‡9ĒBŪD9¤BâîŽ/@G ßäČ}˛ā ”!fë__nŽÃë__sŽœ'âîC“xÉũŋČhœĘ~‡˙ ”Mf‘œâĸGíÂäæĨ__xG~‡‘ŲcŸęĨQ;į‰\ Lv€úp,įúˆJįú|_į  MŊú/,įúEJįú9_዁3¨ŲSú¸rįúĢ įúžŨį‹ĀÄ3¨Ų‚úÅrįúôÄ įúįÄŨį‹?Ä3¨Ų_ú€ÄrįúsÄ įúfÄŨį¨Ų…Äûį‹"3¨ŲVúPrįúC įú6Ũį¨Ų…_č]É^ „hîC^xɟ0=`xÉAčŸYWaŊ†čŸ€obŊ°čŠnhĀŲ_7‚ø”ōŠc •‡ø}VĀŲ…Ŗé‰fh ‚ƒfƒf‚CŊq“øcŊō΁ƒWŊŠā„ØŲ`]‚ƒ úũBéŠØÅ”øŲaā‚úįÅjéƒņōøŲ¯Å”ĒúēÅ“éƒÆÅ„Å”Mļú“Å“éúŠÅĻ郝Ő r] ‰\Š iCƒúpēéúˆØéú|ę Š MŊú/ēéúEØéú9ęŠ!´Úr…ƒnúa&ęúTPęúGnę‹É´Ú0.ƒú &ęúüPęúīnę‹x´Ú0ú­&ęúĄPęú•nęڅģŒęŒ6´Ú0~úk&ęú_PęúSnęŒņ´Ú0]ú(&ęúPęúnę‹ĸ´ÚŌúã&ęúÖPęúÉnę‹†Æ´Ú˛úĮÆ&ęúēÆPęú­ÆnęڅÖÆŒę‹Æ´ÚŒúFÆ&ęú9ÆPęú,ÆnęڅUÆŦę;É^ Š!Å(ÚyŲ†ƒnúaŌęúTüęúGë‹ÉÅ(Ú0.ƒú Ōęúüüęúīë‹xÅ(Ú0ú­ŌęúĄüęú•ë(څģ:ëŒ6Å(Ú0~úkŌęú_üęúSëŒņÅ(Ú0]ú(Ōęúüęúë‹ĸÅ(ÚŌúãŌęúÖüęúÉ닆ÆÅ(Ú˛úĮÆŌęúēÆüęú­Æë(څÖÆ:ë‹ÆÅ(ÚŒúFÆŌęú9Æüęú,Æë(څUÆZëÉ^ ‚d°×Šús°€ëú‰°“ëú}°Žë„׏/°Û ˛ú:°ÁëúR°ÔëúF°īë°Û Mšú°Áëú)°Ôëú°īëäá\ ģBßĘĘ’‡ˇ‡ā ”8ŠŪÎrˇ‡ŪŽWrŧ‡L;L;ßĐÉЇõ‡ā ”ØôŪÎDõ‡ŪŽWDú‡L;L;ßĄĖˆˆā ”8Šß7Į(ˆ@ˆā ”Mfë__x‘@ˆC¯Āž Ķ‚œ]ˆîū ”lHėHÚãĒ?_ü‰ėS ĶũˈøûSŸ‚‹I Ķ6øšIŸhڞposū€5ėŠLÕĶ€Ú‰úBLfėú5L ėú+LĀė‘é͊Lé͘Ú´‰úBLčėú5L íú+L3íŠ[NéͰÚŗ­‰úN[íútN íújN3튋IéĶČÚCĸ‰úšI3íbÕ$$‘ Ԋƒ‡ÔāÚėŒúЇƒíúœ‡üíú’‡fîŠÁ‡0ÔÛs!‹úᇰîúڇ)īúЇˆī‰3ˆãÕ!E’ŠúBˆÔī‰qIãÕ#YŠú€IÔī‚LéÕ#úLéīúLđšøÕwBüRud‰3ˆÖE ‹úBˆ)đ‰qIÖ#Ҋú€I)đ‚L Ö#úL>đúLkđšÖwBüRud‘HԑWԐ_Ôō‰iî_ÔsG‹ƒ‚îúxî~đŠ˙‡bÔ8Ûs‘ŒúˆēđŠŠyÔ`Û´š‹ú*Šîđú Š$ņ‚ÔfŠ3ˆ‚ÔxÛ´ŒúBˆMņŠqI‚Ô˜Û#Ų‹ú€IMņ‹L‹Ô°Û#úLkņúLņš ÕwBüRu`‰3ˆ„Õ´ŠŒúBˆĢņ‰qI„Õ#QŒú€IĢņ‚LŠÕ#úLĀņúLíņš™ÕwBüRu`‘wԉ}n™Õs׌úŒnō‚Sn™Õúlnōúbnō-Ôr] ÜÕá\ ŠI–ÔČÛĪúe)ōú[Rō‹"ĸÔāÛô ú;ōú1Ģō‹ˆĸÔøÛ| ú2ˆæōú(ˆķ‰\ŽÔ •úpVķúˆkķú|€ķ ŽÔ MŊú/VķúEkķú9€ķIÕ˛Š3ˆŊÔÜGŽúBˆ“ķ‰qIŊÔ#Žú€I“ķ‹LÃÔ0Ü#úLÂķúLņķš/ÕwBüRsŠ3ˆĘÔHÜŋŽúBˆô‰qIĘÔ#†Žú€Iô‹LĐÔ`Ü#úL1ôúLSôšÕwBüRs‰3ˆdÕ 7úBˆqô‰qIdÕ#ūŽú€Iqô‚LjÕ#úL†ôúLŗôšyÕwBüRuV‰3ˆ¸Õ¯úBˆÆô‰qI¸Õ#vú€IÆô‚LžÕ#úLÛôúLõšÍÕwBüRuVĮĶ͐Ôr] ķÔ"] ˙Ô´^ ĩÕá\ ‚Õö\ Ē1÷"ĻĘ0ÖGœļø1‘ú;õ‹ˆ7ÖxÜ| ú2ˆSõú(ˆ€õ‰\?Ö •ǐúpÂõúˆ×õú|ėõ ?Ö MŊú/ÂõúE×õú9ėõrÖ˛÷I €€ÖGœŌž‘ø[‘øe‘‹"‘Ö˜Üô ú;˙õú1)ö‹ˆ‘Ö°Ü| ú2ˆaöú(ˆŽö‰\™Ö •‘‘úpĖöúˆáöú|öö ™Ö MŊú/ĖöúEáöú9ööÂÖ˛ˆs¤äĐÖwœē‘Ւø…‘ø‘ĐÜʒú ÷ú…'÷‹I×ĐÜúe ÷ú['÷‹"×čÜô ú;E÷ú1c÷‹ˆ×Ũ| ú2ˆš÷ú(ˆÔ÷‰\× •ŧ’úpøúˆ&øú|;ø × MŊú/øúE&øú9;øBײîÖā›áŠÁ“âīkeyäâî–Ôį%áÅÆ-“âīkeyäâî–Ôį%ßX¸<“T“ā ”lHŪŋ…šéGˆ-“ ËP×Wœp“—žø<“‘øF“‘Н‹V× ŨŊ¨“úž‹Nø‘z׉}× ŊŌ“úúŦų‰Ä‡× Ŋü“úŨ}ųúĶĖųŠŠ:—×@ŨŊŋ”ú™:úpŨ…Ĩ:ˆú‰cPčŲu[”ú„PŌúƒwPųŲ:$‰cPüŲu‹”ú„PúúƒwP Ú:$¤×c åŲûéÚ=%Ú}֐{Û}ÖŠë´×˜ŨŊĒ•ƒúúû‹Ւ´×ØŨōØŨ¨â’‘LŪ…ņ’tû‰cPÛįD•ú„PžûƒwPÛ:$‰cPÛįt•ú„PæûƒwP-Û:$Ė×Ĩc Ûûé:Û=EÛ}֐{Ü}ÖŠĖđÜ×8ŪŊ7—úŪđūûŠŠ:Ü×pŪ Œ–ú™:ūû¨Ū…Ĩ:mü‰cP¨Úu(–ú„PˇüƒwPšÚ:$‰cPŧÚuX–ú„PßüƒwPÍÚ:$lØc ĨÚûéÚÚ=åÚ}֐aÜ}Ö‰?đ‰Ø ã–úNđ÷ü‚ĸ‰Øúĸ÷übĸ‰Ø}úqĸ÷ü‚Yđ§Ø úhđsũ‚Ĩ§Øú#Ĩsũõ¤§Ø}úĨsũ‰ß×ŊŽ—ú&īũ‚¤ŗß×úŗŗīũŠŗß×}ú™ŗīũŠ1ôרŪŊå—ú@mū‹´ôרŪú ´mūŒōŗôרŪ}ú´mū‰˛đØŊ<˜úÁđëū‚ŽØú&Žëūø­Ø}úŽëū‰K-ØŊ¯˜úZi˙‚ø -Ø .úĄi˙‚Ų -Øúč i˙ē -Ø}úÉ i˙‰eŲ Ŋؘú~æ˙út*‰‘6Ų Ŋ™úǧú ë‰ļNŲē#™úĮh‰ŌTŲŊM™úëˆúᨊ÷ZŲđŪŊ‰šú%Š“ZŲ ßÃ5š ߨ“‘X@߅“ĸ‰cPEÚįЙú„PƒwPVÚ:$‰cPYÚįšú„P0ƒwPjÚ:$hŲĨc BÚûéyÚ=Ú}֐DÜ}Ö‚2î|ŲÄúAîH‚ĀÍ|ŲúĪÍHĻÍ|Ų}úĩÍH‰°ŲžКú%›‰ɋOÛ Ŋ<›úڋŽ3ˆOÛ ;úBˆŽ‰qIOÛ#›ú€IŽ‚LUÛ#úLÃúLđšdÛwBüRuO‰:ī‚ÛŊ‚›úIī‚Ås‚ÛúŪsúÔsŠ^ī˜Û`ßŊŦ›úmī-¨Ûuf‰‡ī¨ÛŊĖ›ú™ī\‰ŽîÛÛŊžœúîr‚ ¯ÛÛŠú¯r–ŽŪÛ ƒĨŽúģŽˆú¯ŽĻ„ŪۏaŽåÛ ˛ƒlŽú„ŽšúxŽ×6ŽåÛ MšƒEŽú[ŽšúOŽ×îÛá\ ‰ŽīņÛŊpúŊīę‚ĩņÛŠúĩꏐ´ôÛ ƒŸ´úĩ´úŠ´„ôۏ[´øÛ ˛ƒf´ú~´1úr´O0´øÛ Mšƒ?´úU´1úI´OÜá\ ‰ŌīÜŊBžúáīb‚˛ÜŠú˛b˛Ü ƒ˛ú(˛xú˛–„܏α Ü ˛ƒŲąúņąŠúåąĮŖą Ü Mšƒ˛ąúČąŠúŧąĮÜá\ éØīšLŲr] ŽŲr] ŊŲsmÛö\ ĖÛôJ‘Ûۑ#ܑ1ܑ‘Üß°(Ļžąžā ”äG÷—ž!T°ÜæœÍžԟøĻž‘ŠŠ:ÅÜx߀™Ÿú™:ڍ˜ß…Ĩ:ø‰cPŨu5Ÿú„P7ƒwP)Ũ:$‰cP,ŨueŸú„POƒwP=Ũ:$ÍÜc ŨûéJŨ=UŨ}֐kŨ}֐įÜr] ōÜT“sŨö\ ~Ũá\ ‘ŠŨ’Ũö\ §0ųũ ŨŒœY °ß ¨= ÁŨr^ åŨąž$ŪÆc ™åŨ&N ¨= ņŨŒ^ ŪÖc ,Ūö\ Ŗšĩ”0Ū¸œMļØßBļŸ6•0‘gî륙0‘ĒHŊ ‘ŧĒ3’­‘T‰ŌS9Ū•û øáSŸ‚WI9ŪøfIŸ‰TFŪ™/Ąú#T”úTÐQŪ‹] Š÷ŧhŪđß āĄúŊÖúŊ ’3ˆ=ã@ĪĄúBˆ\‰qI=ã#–Ąú€I\‚LCã#úLqúLžšRãwBüR‘\‘|ې„Ū5ģāMĸúBˆąŠqI„Ū8ā#ĸú€Ią‹LŪPā#úL úLå š(áwBüR‘\‰f˜ŪĄēĸúx „˜Ū…„ ‚ŌS˜ŪúáS ‚WI˜ŪúfI ‰÷ŧˇŪĻôĸúŊ. úŊ› ‘ÆŪÎŪ5ģ‰LāŪĻgŖú[ ‚–[āŪ_úĨ[2 ŌSāŪNúáS2 ‚WIāŪúfI2 Š÷ŧíŪhāĻĄŖúŊJ úŊ§ ‘øŪß5ģŠ“߈⍤úŦ8 úĸa ŒĸS߈āEúģS8 úąSa ŒvSß āJúS8 ú…Sa ßūŠɋ߸āϞ¤úڋ— Œ3ˆߨā;úBˆĩ ŠqIßøā#x¤ú€Iĩ ‹L(ßá#úLúL%š—áwBüRvŠɋ3ß(áĻEĨúڋCŒ3ˆ3ß@á;úBˆe‰qI3ß# Ĩú€Ie‹L9ßXá#úLĄúLŋšWáwBüRvŠ3ˆDßpáĻŊĨúBˆŨ‰qIDß#„Ĩú€IŨ‹LJ߈á#úL˙úLšgáwBüRvŠɋUß áĻPĻúڋ;Œ3ˆU߸á;úBˆ;‰qIUß#Ļú€I;‹L[ßĐá#úL]úL{šwáwBüRvŠ3ˆfßčáĻČĻúBˆ™‰qIfß#Ļú€I™‹Llßâ#úLģúLŲš‡áwBüRvŠī‹zßâĒ §úŒ÷‚ėSzß(úûS÷‚‹Izß6úšI÷Šɋß0â°ŗ§úڋhŒ3ˆßHâ;úBˆh‰qIß#y§ú€Ih‹L–ß`â#úL{úLŽšáwBüRv‰ŌSÃ߯ī§úáSĄ‚WIÃßúfIĄxâw¨úڋÕŒ3ˆāߘâ;úBˆŠqIā߸â#=¨ú€I‹LéßĐâ#úLMúL”š¸áwBüR‘TŠ3ˆôßčâ¯ņ¨úBˆ˛‰qIôß#ļ¨ú€I˛‹Lúßã#úLÛúL š¨áwBüR‘°Šɋā㯄Šúڋ(Œ3ˆā0ã;úBˆ(ŠqIāHã#JŠú€I(‚Lā#úL=úLPš/āwBüRvŠ÷ŧMā`ãž5ĒúŊcúŊå’3ˆLâ@$ĒúBˆ\‰qILâ#ëŠú€I\‚LRâ#úLoúLœšaâwBüR‘`‘^āfā5ģ‰Luāž¨Ēú[¯‚–[uā_úĨ[ŌSuāNúáS‚WIuāúfIŠ÷ŧ‡āxãžYĢúŊÚúŊD’3ˆã @HĢúBˆx‰qIã#Ģú€Ix‚L‡ã#úL‹úL¸ššãwBüR‘`‘’āšā5ģŠɋĩā ãžėĢúڋËŒ3ˆĩāĀã;úBˆéŠqIĩāāã#˛Ģú€Ié‹Lžāøã#úL7úLqšČáwBüR‘LŠɋÉāäžŦúڋŒ3ˆÉā(ä;úBˆ­‰qIÉā#EŦú€I­‹LĪā@ä#úLåúLšįáwBüRvŠ3ˆÚāXäž÷ŦúBˆ!‰qIÚā#žŦú€I!‹Lāāpä#úLPúLyš×áwBüRvŠɋëāˆäžŠ­úڋ—Œ3ˆëā ä;úBˆ—‰qIëā#P­ú€I—‹Lņā¸ä#úLšúLך÷áwBüRv‰3ˆüāžđ­úBˆõ‰qIüā#É­ú€Iõ‚Lá#úL úL‰3ˆūážhŽúBˆ0‰qIūá#/Žú€I0‚Lâ#úLEúLršâwBüR‘L‰ɋâžûŽúڋ…3ˆâ;úBˆ…‰qIâ#ÁŽú€I…‚Lâ#úLšúLĮš(âwBüR‘L‰3ˆ(â$žs¯úBˆÚ‰qI(â#:¯ú€IÚ‚L.â#úLīúLš=âwBüR‘L‰ɋiâž°úڋ/3ˆiâ;úBˆ/‰qIiâ#˝ú€I/‚Loâ#úLBúLoš~âwBüR‘L‰ɋ~â ž™°úڋ‚3ˆ~â ;úBˆ‚‰qI~â#_°ú€I‚‚L„â#úL•úLš—âwBüR‘L‰ɋžâĻ,ąúڋՏ3ˆžâ;úBˆÕ‰qIžâ#ō°ú€IÕ‚L¤â#úLčúLûš˛âwBüRv‰ɋ˛âĻŋąúڋ3ˆ˛â;úBˆ‰qI˛â#…ąú€I‚L¸â#úL#úL6šÆâwBüRv‰3ˆÆâĻ7˛úBˆI‰qIÆâ#ūąú€II‚LĖâ#úL^úLqšÚâwBüRv‰ɋÚâĻʲúڋ„3ˆÚâ;úBˆ„‰qIÚâ#˛ú€I„‚Lāâ#úL™úLŦšîâwBüRv‰3ˆîâ Ļ0ŗúBˆŋ‰qIîâ# ŗú€Iŋ‚Lôâ#úLÔúLį‰ɋûâ(°Äŗúڋú3ˆûâ(;úBˆú‰qIûâ#‰ŗú€Iú‚Lã"#úLúL>šãwBüR‘ŋ‰ɋ#ã¯W´úڋQ3ˆ#ã;úBˆQ‰qI#ã#´ú€IQ‚L)ã#úLfúLyš7ãwBüRv™Rã/Č´úBˆŒ‰qIRã#´ú€IŒ‚LXã)#úLŸúLĖškãwBüR‘\™ĄãTĩúڋߏ3ˆĄã;úBˆß‰qIĄã#ĩú€Iß‚L§ã#úLôúL!šļãwBüR‘T™ļã2ÅĩúBˆ4‰qIļã#Œĩú€I4‚Lŧã,#úLGúLtšĪãwBüR‘T‘sŪ‘ĩېÖŪ0‘ėېߔÁ‘ßĀß[XĪߙÁāßSā‘ā‘Mānā0‘†āĒā”Á‘ĩā‘DáFâö\ ›&đã+œŦļ‰žķãtļøã0‰ÜûãtĄļú'܇äEx›8 ä+œ ˇ‰ž#äzāļ(ä0‰Ü+äzˇú'ܨGäŅx›ÆôPä*œcˇéG‘¤Ũ%‘‰žXäXˇ]ä0qä—]›åô€äxœĒ¸ą-BûǏ‘„„ätŗšŧ˙ÂTɉž„䎐‰ä0‰=‰ä üˇúLį‚˜a‰ä ˙ú§a™–ä>t¸îŋ…ĄDŠW–äĐäK¸ún-úbEĻäôc ˛äd Āä*d Čä´^ ÔäGd ‰ _ķä ”¸øä^ įä*d ķä´^ Ē1áúôšëfd8%âîīģ9įûîJ°:J÷îÃ;;%âî^G%¯3Ųå]œšžÆ˙ ”]‘čäÆĒšŧĒ%‘Ŋ}Ÿk?Ģ%Y‰œ÷.å˛š•Ā÷úŗ÷‚ú§÷<åZd ‰2]Lå ļˇšúA]úK]/å%žŸ‹Î%C‰īŠbå ÎüšúúŠamåda ‰3ˆöéÎuēúBˆ‰qIöé #;ēú€I‚L˙é#úL—úLÆšęwBüR‘Ã}‰3ˆęÎîēúBˆŲ‰qIę #´ēú€IŲ‚Lę#úLīúLš,ęwBüR‘Ã}‰3ˆ,ęÎgģúBˆ1‰qI,ę #-ģú€I1‚L5ę#úLGúLvšGęwBüR‘Ã}‰3ˆGęÎāģúBˆ‰‰qIGę #Ļģú€I‰‚LPę#úLŸúLΚbęwBüR‘Ã}‰3ˆbę&ÎYŧúBˆá‰qIbę #ŧú€Iá‚Lkę#úL÷úL&šęwBüR‘Ã}‰3ˆˆę+ÎŌŧúBˆ9‰qIˆę #˜ŧú€I9‚L‘ę"#úLOúL~š§ęwBüR‘Ã}‰3ˆëÎKŊúBˆ‘‰qIë #Ŋú€I‘‚Lë#úL¤úLĶš ëwBüR‘Ã}‰3ˆ ë=ÎÄŊúBˆæ‰qI ë #ŠŊú€Iæ‚L)ë4#úLųúL( š?ëwBüR‘Ã}]åŊ_ ŽåiĨ‘Âå×嗭ë嗭æ*旭)旭=旭Cæcˇ‰s]uåĪOžú‚]; úŒ]O Šõbƒæ(åĖÛžú(cd úcz ‰‹IƒæŲ ĐžúšId ‚qIƒæÕú€Id ‚WIƒæ-úfId –æ:$Š3ˆžæ@åĖSŋúBˆ ŠqIžæXå#ŋú€I ‚LĒæ#úLŖ úLļ šŧæwBüRw‰2]įæ Ŋ}ŋúA]É úK]Ũ Н¸ûæpåÃÅúē¸ņ på¨ȸ‘Ė}¨Õ¸‘ā}…â¸;!‰œ÷ į>ūŋúĀ÷o!úŗ÷Ģ!ú§÷""/įZd ˆåáÁ…ņ¸l"Šõbį¨åIžĀú(c›"úcŋ"‰‹IįŲ “ĀúšI›"‚qIįÕú€I›"‚WIį-úfI›"Ŗį:$Š3ˆĶįĀåIÁúBˆŌ"ŠqIĶįāå#ŨĀú€IŌ"‹Lßįøå#úLö"úL3#šbéwBüR‘ā}‰3ˆĶé#IÁúBˆQ#‰qIĶé #VÁú€IQ#‚LÜé#úLg#úL–#šîéwBüR‘ā}dįmļįû鐐įcP°įcPžį=ËįcPĶį}֐Đé}ÖŠīæåčæE ÂúįŠ#úč&bŠõbé(æE“Âú(cÛ#ƒc‰‹IéŲ ˆÂúšIÛ#‚qIéÕú€IÛ#‚WIé-úfIÛ#,é:$Š3ˆ4é@æE ÃúBˆ˙#ŠqI4éXæ#ŌÂú€I˙#‚L@é#úL$úL($šRéwBüRv‰3ˆuéE„ÃúBˆ;$‰qIué #JÃú€I;$‚L~é#úLQ$úL€$šéwBüR‘Ø}‰Mįęį&JåÃú^į“$kęį&Uúk“$‚åjęį&úūjŠ$úôj“$‰`÷čN@pÄú€÷Ŋ$úv÷Đ$„čN…|cŒcPčpæƒú„PŊ$úwPæ$ŠO萿cÄú"OŊ$^č:$‰Mįé5JŅÄú^į˙$ké5Uúk˙$‚åjé5úūj%úôj˙$įīįHįŊ_ éûé4é}֐ré}Ö‰2]fč Ā/ÅúA])%úK]=%‰ŅP­č ČcÅúęPQ%úāPd%´čč<‰2]Ņč ēÅúA]w%úK]‹%‰3ˆĪę$ĖÆúBˆŸ%‰qIĪę #ĖÅú€IŸ%‚LØę#úLĩ%úLä%šîęwBüR‘Ü}%åŊ_ ]æmļræû鐃æcPžæ}֐čû鐞čcPĢčcPÁčcPÉč}֐žę}֐ūę}֐¯éö\ ¸éŊ_ Æęö\ ũe×`ëÅœļÆƒË˙ ”]‘¤JpÖmĻ‘°æxËĒmáÚĸ'‘šČæmËŸ‹Ū%÷%‰ƒšëŪDĮ•§úš&úŽ6&¨ëüb ‰3ˆOėŪŊĮúBˆJ&‰qIOė#ƒĮú€IJ&‚LUė#úL_&úLŽ&šdėwBüR‘ŋ‰3ˆdėŪ6ČúBˆĄ&‰qIdė#üĮú€IĄ&‚Ljė#úL´&úLã&šyėwBüR‘ŋ‰3ˆyėŪ¯ČúBˆö&‰qIyė#uČú€Iö&‚Lė#úL 'úL:'šŽėwBüR‘ŋ‰3ˆŽėŪ(ÉúBˆM'‰qIŽė#îČú€IM'‚L”ė#úLb'úL‘'šŖėwBüR‘ŋ‰3ˆŖėŪĄÉúBˆ¤'‰qIŖė#gÉú€I¤'‚LŠė#úLš'úLč'š¸ėwBüR‘ŋ‰3ˆ¸ėŪĘúBˆû'‰qI¸ė#āÉú€Iû'‚Lžė#úL(úL?(šÍėwBüR‘ŋ‰3ˆÍėŪ“ĘúBˆR(‰qIÍė#YĘú€IR(‚LĶė#úLg(úL–(šâėwBüR‘ŋ‰3ˆâėCŪ ËúBˆŠ(‰qIâė#ŌĘú€IŠ(‚Lčė=#úLž(úLí(š÷ėwBüR‘ŋ•ëŊ_ ĶëiĨ‘äëö뗭ė—­ė*%ė—­6ė—­Gė—­MėcˇēëGd íö\ ũ“Õ0íŨœ›ËQĐ˙ ”^‘āæFĐĒ™Á%%‘¸įĐŸ‹&%)‰3ˆ6î &WĖúBˆ)‰qI6î#Ėú€I)‚L<î#úL3)úLb)šKîwBüR‘ģ‰3ˆVî&ĐĖúBˆu)‰qIVî#–Ėú€Iu)‚L\î#úLŠ)úLš)škîwBüR‘ģ‰3ˆkî&IÍúBˆĖ)‰qIkî#Íú€IĖ)‚Lqî#úLß)úL*š€îwBüR‘ģ‰3ˆ€î&ÂÍúBˆ!*‰qI€î#ˆÍú€I!*‚L†î#úL6*úLe*š•îwBüR‘ģ‰3ˆ•î&;ÎúBˆx*‰qI•î#Îú€Ix*‚L›î#úL*úLŧ*šĒîwBüR‘ģ‰3ˆĒî&´ÎúBˆĪ*‰qIĒî#zÎú€IĪ*‚L°î#úLä*úL+šŋîwBüR‘ģ‰3ˆŋî&-ĪúBˆ&+‰qIŋî#ķÎú€I&+‚LÅî#úL;+úLj+šÔîwBüR‘ģ‰3ˆÔî9&ĻĪúBˆ}+‰qIÔî#lĪú€I}+‚LÚî3#úL’+úLÁ+šíîwBüR‘ģmíŊ_ €ízd ēíiĨ‘ËíŨ헭î헭ûí* .4îcˇ‰ė\‹í';Đúû\Ô+ú]ķ+\횐Tîö\ ßD×`ĐuĐā ”]āļÄ%÷\¨j\œ‘ĐuÔøn‘Š  į-jÔú,‹QĐ įú`Đ,‰3ˆąvLŅúBˆ1,‰qIą#Ņú€I1,‚Lˇ#úLF,úLs,šÆwBüRuF‰3ˆÆvÄŅúBˆ†,‰qIÆ#‹Ņú€I†,‚LĖ#úL›,úLČ,šÛwBüRuF‰3ˆÛv<ŌúBˆÛ,‰qIÛ#Ōú€IÛ,‚Lá#úLđ,úL-šđwBüRuF‰3ˆđv´ŌúBˆ0-‰qIđ#{Ōú€I0-‚Lö#úLE-úLr-šwBüRuF‰3ˆv,ĶúBˆ…-‰qI#ķŌú€I…-‚L #úLš-úLĮ-šwBüRuF‰3ˆv¤ĶúBˆÚ-‰qI#kĶú€IÚ-‚L #úLī-úL.š/wBüRuF‰3ˆ/-vÔúBˆ/.‰qI/#ãĶú€I/.‚L5'#úLD.úLY.šCwBüRv<iĨ‘J\—­m—­}*ޗ­Ÿ—­ĨcˇLö\ ÷0˙†\œ‘ÔuØøB‘Š  8įdjØúl.‹QĐ 8įú`Đl.‰3ˆąvLÕúBˆ—.‰qIą#Õú€I—.‚Lˇ#úLŦ.úLŲ.šÆwBüRuF‰3ˆÆvÄÕúBˆė.‰qIÆ#‹Õú€Iė.‚LĖ#úL/úL./šÛwBüRuF‰3ˆÛv<ÖúBˆA/‰qIÛ#Öú€IA/‚Lá#úLV/úLƒ/šđwBüRuF‰3ˆđv´ÖúBˆ–/‰qIđ#{Öú€I–/‚Lö#úLĢ/úLØ/šwBüRuF‰3ˆv,×úBˆë/‰qI#ķÖú€Ië/‚L #úL0úL-0šwBüRuF‰3ˆv¤×úBˆ@0‰qI#k×ú€I@0‚L #úLU0úL‚0š/wBüRuF‰3ˆ/-vØúBˆ•0‰qI/#ã×ú€I•0‚L5'#úLĒ0úLŋ0šCwBüRv<iĨ‘J\—­m—­}*ޗ­Ÿ—­ĨcˇLö\ ÷\ōthœ‘Ø›Üøn‘Š\ Pį-†ÜúnŌ0‹  Pį-úŌ0‹QĐ Pįú`ĐŌ0‰3ˆŊvgŲúBˆ 1‰qIŊ#.Ųú€I 1‚LÃ#úL51úLb1šŌwBüRuF‰3ˆŌvßŲúBˆu1‰qIŌ#ĻŲú€Iu1‚LØ#úLŠ1úLˇ1šįwBüRuF‰3ˆįvWÚúBˆĘ1‰qIį#Úú€IĘ1‚Lí#úLß1úL 2šüwBüRuF‰3ˆüvĪÚúBˆ2‰qIü#–Úú€I2‚L#úL42úLa2šwBüRuF‰3ˆvGÛúBˆt2‰qI#Ûú€It2‚L#úL‰2úLļ2š&wBüRuF‰3ˆ&vŋÛúBˆÉ2‰qI&#†Ûú€IÉ2‚L,#úLŪ2úL 3š;wBüRuF‰3ˆ;-v7ÜúBˆ3‰qI;#ūÛú€I3‚LA'#úL33úLH3šOwBüRvHiĨ‘Vh—­y—­‰*𗭐̗­ącˇ!á\ Xö\ ÷0ahœˇÜÁāøB‘Š0 hįdŦāúB[3‹  hįdú[3‹QĐ hįú`Đ[3‰3ˆŊvŨúBˆŠ3‰qIŊ#TŨú€IŠ3‚LÃ#úLž3úLë3šŌwBüRuF‰3ˆŌvŪúBˆū3‰qIŌ#ĖŨú€Iū3‚LØ#úL4úL@4šįwBüRuF‰3ˆįv}ŪúBˆS4‰qIį#DŪú€IS4‚Lí#úLh4úL•4šüwBüRuF‰3ˆüvõŪúBˆ¨4‰qIü#ŧŪú€I¨4‚L#úLŊ4úLę4šwBüRuF‰3ˆvmßúBˆũ4‰qI#4ßú€Iũ4‚L#úL5úL?5š&wBüRuF‰3ˆ&våßúBˆR5‰qI&#Ŧßú€IR5‚L,#úLg5úL”5š;wBüRuF‰3ˆ;-v]āúBˆ§5‰qI;#$āú€I§5‚LA'#úLŧ5úLŅ5šOwBüRvHiĨ‘Vh—­y—­‰*𗭐̗­ącˇ!á\ Xö\ ßÕĻĐāëāā ”ë6âîŖÃPų9÷Áā+MībœáÔáøĐā‘€įÉáŦÜā‰ž īP@á%ī0‰3ˆTīS¸áøBˆutŸ‰qITī#áø€IutŸ‚LZī#úLä5úL6šiīwBüRus‘JīRīcˇrīö\ ÷ŧč8€īNœđáDâøË‘øÕ‘øâ‘‹ˆˆī˜įøŽ‘øĄ‘ú—$6ŽīëāēĻĻĐī2œã¤“0Yœ'‘¤a Y°1‘¤ˇÎZœ'‘¤ Z%‘ ¤ĸŗZŖG‘‰žĶī[ČâØī0‹đØī°į[ú˙C6‹ŲaØī°įúčab6¯NÖđœãķ˙ ”ƒ‘Čįķîe*7€5Ēŋ#<ፑXŸJķ‰6Šd*đč9‚æ•o*č¨}*‘X—Qų%đ čÛõãøqųx Ÿúgų§6 č…|cŒcP(đ8čƒø„Px ŸúwP÷6;đ:$—“ų;đXčÜ[äúŗų7úŠųR7Xč…|cŒcPAđxčƒú„P7úwP¯7Qđ:$—OčQđ˜čÜÁäúočĪ7úeč8˜č…|cŒcPWđ¸čƒú„PĪ7úwPd8gđ:$—&égđØčÜ'åúFé„8ú<éŧ8Øč…|cŒcPmđøčƒú„P„8úwP9}đ:$—åų}đéŪåúú99úûųq9é…|cŒcPƒđ8éƒú„P99úwPÎ9“đ:$—īæ”đXéáļåúįî9Ąđ&b—MįĄđxéáæú^įK:ŒkĄđéUúkK:‹åjĄđ¨éúūj¨:úôjK:’MįZöávæú^įÔ:kZöUúkÔ:‚åjZöúūjį:úôjÔ:%đīįŠõbÉđĀé9 įú(cû:ƒc‰‹IÉđŲ ˙æúšIû:‚qIÉđÕú€Iû:‚WIÉđ-úfIû:Ũđ:$Š3ˆåđØé9‚įúBˆž<ŠqIåđøé#Iįú€Iž<‹Lîđę#úLi>úLČ>š_ķwBüRvŠų ņ(ę?Ōįú(ųæ>‹vS ņ@ędúSæ>ú…S˙?-ņūŠ3ˆ-ņXę?JčúBˆg@ŠqI-ņxę#čú€Ig@‹L6ņę#úL€AúLmBšPķwBüR‘T‰ Aņ@jčUņOî‰ Uņ HŠčaņ´^ ¨ę韋N%‹B…ņŊ_ •ņda $ōiĨ‘8ōMō—­`ō—­qō*ō—­ō—­žō—­¤ōcˇ‰ŗ]ņO:éúÂ]ŠBúĖ]ČB‰žŖņVZ鐨ņ0Ўa¨ņĀęV éúÉaÜB‚[˛ņ -ú[Cú[CØęîퟋZ%GC‰3ˆVõZ4ęúBˆeC‰qIVõ#úéú€IeC‚L\õ#úL{CúLĒCškõwBüR‘ˇ‰3ˆkõ Z­ęúBˆŊC‰qIkõ#sęú€IŊC‚Lqõ#úLŌCúLDš„õwBüR‘ˇ‰3ˆ‹õZ&ëúBˆD‰qI‹õ#ėęú€ID‚L‘õ#úL)DúLXDš õwBüR‘ˇ‰3ˆ¤õZŸëúBˆkD‰qI¤õ#eëú€IkD‚LĒõ#úL€DúL¯DššõwBüR‘ˇ‰3ˆŊõZėúBˆÂD‰qIŊõ#Ūëú€IÂD‚LÃõ#úL×DúLEšŌõwBüR‘ˇ‰3ˆÖõ$Z‘ėúBˆE‰qIÖõ#Wėú€IE‚LÜõ#úL.EúL]EšëõwBüR‘ˇ‰3ˆúõZ íúBˆpE‰qIúõ#Đėú€IpE‚Lö#úLƒEúL˛EšöwBüR‘ˇ‰3ˆ3ö'ZƒíúBˆÅE‰qI3ö#Iíú€IÅE‚L9ö!#úLÚEúL FšHöwBüR‘ˇÕņŊ_ éņda ĮōiĨ‘Øōíō—­ķ—­ķ*헭0ķ—­>ķ—­DķcˇŠs]ņņë[îú‚]FúŒ];F‰& ôņ\Bîú? OFú5 cF‰Ų]tņLlîúč]‚Fúō]G‰3ˆņķKåîúBˆ)G‰qIņķ#Ģîú€I)G‚L÷ķ#úL>GúLmGšôwBüR‘¸‰3ˆôK^īúBˆ€G‰qIô#$īú€I€G‚L ô#úL“GúLÂGšôwBüR‘¸‰3ˆôK×īúBˆÕG‰qIô#īú€IÕG‚L!ô#úLęGúLHš0ôwBüR‘¸‰3ˆ0ôKPđúBˆ,H‰qI0ô#đú€I,H‚L6ô#úLAHúLpHšEôwBüR‘¸‰3ˆEôKÉđúBˆƒH‰qIEô#đú€IƒH‚LKô#úL˜HúLĮHšZôwBüR‘¸‰3ˆZôKBņúBˆÚH‰qIZô#ņú€IÚH‚L`ô#úLđHúLIšoôwBüR‘¸‰3ˆoô!KģņúBˆ2I‰qIoô#ņú€I2I‚Luô#úLGIúLvIš„ôwBüR‘¸‰3ˆö ?3ōúBˆ‰I‰qIö#úņú€I‰I‚Lö#úLžIúLËIš,öwBüR‘TÉđûéåđ}֐ņ™d ‘ ņfņ¯d €ķiĨ‘–퐍헭ģķ—­Ęķ*Ûķ—­éķ—­īķcˇŦôiĨ‘Ãô×ô—­ęô—­öô*õ—­õ—­õcˇƒö}֐ôö\ †ŽũÔ öœ,ķÛū˙ ”ŖT‘¤“0œ'‘¤a °1‘¤ˇÎ‚œ'‘ ¤ ‚%‘¤ĸŗƒŖG‘ëÆūŸÄ„lHŪIŸšŧ…ÂTņIĒ­‡%‘@‰žŠö„åķŽö0‰=ˇö†!ôúLŪI‚˜aˇö˙ú§a0JŠM ŊöPëˆ]ôú\ FJ‹7VŊöPëÄúFVYJŠų>÷h돭ôú(ųnJ‹vS>÷€ëdúSnJú…S¤JK÷ūŠ3ˆK÷˜ë%õúBˆÜJŠqIK÷¸ë#ėôú€IÜJ‹LT÷Đë#úLúJúLKš˜ųwBüRuGŠ3ˆ_÷č돝õúBˆ:K‰qI_÷#dõú€I:K‹Le÷ė#úLiKúL˜Kš§ųwBüRsŠ3ˆp÷ėŽöúBˆļK‰qIp÷#Üõú€IļK‹Lv÷0ė#úLåKúLLšˇųwBüRsŠ3ˆ÷HėöúBˆ2L‰qI÷#Töú€I2L‹L‡÷`ė#úLaLúLLšĮųwBüRsŠ3ˆ’÷xė÷úBˆŽL‰qI’÷#Ėöú€IŽL‹L˜÷ė#úLĐLúLōLš‡ųwBüRs‰3ˆŖ÷k÷úBˆM‰qIŖ÷#D÷ú€IM‚LŠ÷ #úL%MúL:M‰$dĀ÷ “Ÿ÷úWdMMúJdyMĖ÷ö‰$døŖĶ÷úWd—MúJdßMøö‰$døĨøúWd'NúJdoN/øö‰Ī BøDĻĨøúõ ˇNúč ËNúŪ ßN‹ŧBø¨ė0úâˇNúÕËNúËßN‹ˆBøĀėúގNúĄËNú—ßNJøëāŠųŋøØėŽõøú(ųO‹vSŋøđėdúSOú…S3OĖøūŠ3ˆĖøíŽmųúBˆ[OŠqIĖø(í#4ųú€I[O‹LÕø@í#úLyOúL›OšÔųwBüRu\‰3ˆāø(­åųúBˆšO‰qIāø#Ŧųú€IšO‚Læø"#úLÎOúLãOš˙øwBüRs‰ ųP¤—úúÁ öOú´ Pú§ *Púš >Pú RP‹ŧųXíhúâ*PúÕ>PúËRP‹ˆųpíúŽ*PúĄ>Pú—RPųëā‰3ˆÛųŽûúBˆŠP‰qIÛų#Öúú€IŠP‚Láų#úLŸPúLĖPšđųwBüRu\‰3ˆđų"­‡ûúBˆßP‰qIđų#Nûú€IßP‚Löų#úLôPúL!QšúwBüRu\‰3ˆ)ú˙ûúBˆ4Q‰qI)ú#Æûú€I4Q‚L/ú#úLIQúLvQš>úwBüRuG‰3ˆBúwüúBˆ‰Q‰qIBú#>üú€I‰Q‚LHú#úLžQúLËQšWúwBüRuG‰3ˆ[úīüúBˆŪQ‰qI[ú#ļüú€IŪQ‚Laú#úLķQúL RšpúwBüRuG‰3ˆtúŽgũúBˆ3R‰qItú#.ũú€I3R‚Lzú#úLHRúLuRš‰úwBüRuG‰3ˆúßũúBˆˆR‰qIú#Ļũú€IˆR‚L“ú#úLRúLĘRšĸúwBüRuG‰3ˆĻúWūøBˆudŸ‰qIĻú#ūø€IudŸ‚LŦú#úLŨRúL SšģúwBüRuGōöiĨūöiĨ÷Mi ÷—­-÷*>÷—­@ør] ąøMiŋø—­ųr] úá\ úö\ %úö\ › õĀú œ> ¤Uŋ°Ž‘™Đúų3 ŸQą> SŸģŗˇ0‘jSˆí}Ÿ‹˛%žS‰3ˆĄũ˛Ã˙úBˆÜS‰qIĄũ#‰˙ú€IÜS‚L§ũ#úLņSúL TšļũwBüR‘ŋ‰3ˆļũ˛<úBˆ3T‰qIļũ#ú€I3T‚Lŧũ#úLFTúLuTšËũwBüR‘ŋ‰3ˆËũ˛ĩúBˆˆT‰qIËũ#{ú€IˆT‚LŅũ#úL›TúLĘTšāũwBüR‘ŋ‰3ˆāũ˛.úBˆŨT‰qIāũ#ôú€IŨT‚Læũ#úLōTúL!UšõũwBüR‘ŋ‰3ˆõũ˛§úBˆ4U‰qIõũ#mú€I4U‚Lûũ#úLIUúLxUš ūwBüR‘ŋ‰3ˆ ū˛ úBˆ‹U‰qI ū#æú€I‹U‚Lū#úL UúLĪUšūwBüR‘ŋ‰3ˆū˛™úBˆâU‰qIū#_ú€IâU‚L%ū#úL÷UúL&Vš4ūwBüR‘ŋ‰3ˆ4ū•˛úBˆ9V‰qI4ū#Øú€I9V‚L:ū#úLNVúL}VšMūwBüR‘ŋÕúŊ_ éúda üiĨ‘ ü2ü—­Eü—­Rü*eü—­vü—­‡ü—­ücˇŠLöú¨í¸đú[V‹–[öúČí_úĨ[ŖVŒŌSöúčíNúáSŖV‹WIöúîúfIŖV‰3ˆüģhúBˆČV‰qIü#/ú€IČV‚L•ü#úLŨVúL Wš¤üwBüR‘L‰3ˆ¤üģāúBˆW‰qI¤ü#§ú€IW‚LĒü#úL0WúL]WššüwBüR‘L‰3ˆšüģXúBˆpW‰qIšü#ú€IpW‚Lŋü#úL…WúL˛WšÎüwBüR‘L‰3ˆÎüģĐúBˆÅW‰qIÎü#—ú€IÅW‚LÔü#úLÚWúLXšãüwBüR‘L‰3ˆãü ģHúBˆX‰qIãü#ú€IX‚Léü#úL-XúLZXšøüwBüR‘L‰3ˆũĮĀúBˆmX‰qIũ#‡ú€ImX‚L ũ#úL‚XúL¯XšũwBüR‘D‰3ˆũĮ8úBˆÂX‰qIũ#˙ú€IÂX‚Lũ#úLÕXúLYš-ũwBüR‘D‰3ˆ-ũưúBˆY‰qI-ũ#wú€IY‚L3ũ#úL*YúLWYšBũwBüR‘D‰3ˆBũÆ(úBˆjY‰qIBũ#īú€IjY‚LHũ#úLYúLŦYšWũwBüR‘D‰3ˆWũÆ úBˆŋY‰qIWũ#gú€IŋY‚L]ũ#úLÔYúLZšlũwBüR‘D‰3ˆlũÆ úBˆZ‰qIlũ#ßú€IZ‚Lrũ#úL)ZúLVZšũwBüR‘D‰3ˆũ Į úBˆiZ‰qIũ#W ú€IiZ‚L‡ũ#úL|ZúLŠZššũwBüR‘Döú0ûģd 'ûŅd /ûmļ‘JûZû—­kû—­zû—­û—­šû* ûcˇ¯ûmļ‘ĀûĐû—­ãû—­đû*öûcˇũö\ C vmĪˆ3 Š Đūwœe € øE ‘øO ‘(îu úO ŧZúE ÚZ‹I˙(î"úeŧZú[ÚZ‹"˙@îô ú;øZú1[‹ˆ˙Xî| ú2ˆM[ú(ˆ‡[‰\˙ •g úpÄ[úˆŲ[ú|î[ ˙ MŊú/Ä[úEŲ[ú9î[B˙˛îūā›ũĨžP˙8œ˜ é˙ ”lH‘xîŪŸđ3íé\‰$da˙î÷ øWd ŸúJd\n˙ö‰ŌSƒ˙đ3 úáSx\‚WIƒ˙úfIx\Š|[–˙ îđS ú‹[§\Š3ˆ§˙¸îđË úBˆŌ\ŠqI§˙Øî#’ ú€IŌ\‹L°˙đî#úLô\úL]š8wBüRuoŠ3ˆˇ˙īõC úBˆ4]ŠqIˇ˙(ī# ú€I4]‹LŊ˙Hī#úLV]úLx]š wBüRut‰ķįĐ˙ņ ú&č–]účŽ]‚$dĐ˙ úWd–]úJdŽ]Ū˙ö‰3ˆ?õúBˆÃ]‰qI?#Ü ú€IÃ]‚LE#úLØ]úL^šTwBüRuo‰3ˆmđúBˆ^‰qIm#Tú€I^‚Ls#úL-^úLZ^š‚wBüRuoa˙[X˙Y ‹˙r] –˙˙”§˙3 õ˙"] ´^ já\ ]ö\ Ē1á‡ú:I_TpV@Ū†9\@Ū:‡9\@ŪD9P@âîŽ/@G ßħI~ā ”2‚ë__nŽũĄë__sŽœ'âîC“X¨ũŸ§hœ–J˙ ”§€‘œâĸGÍĄm^Ĩ__xGJ‘`ī/ŸęĨQV@—^‰ú LBú€ĩ^ú&€Ķ^ú€č^ž MŊúÍĩ^úãĶ^ú×č^‹_ 3xīSú– û^ú‰ )_ú| f_‹É3xī‚úIÉû^ú<É)_ú/Éf_‹‡Č3xī_úČČû^úģČ)_úŽČf_xī…×Č„_‹î3xīVúû^ú)_úf_xī…+¤_]É^ „hîC^X¨Ÿ0=`X¨Ę_ŸYWaĄ`Ÿ€obĄ9`Š:hī_ø`ōŠc •SøIVī…oĄ`‰ä˜h Üƒķ˜ƒķ˜‚CŊq“øcŊō›ƒWŊФ „¨ī`)ƒÎ úÁ Ë`Š Ę”ČīaŦú/Ęķ`ƒ9ʍČī÷É”ĒúĘaƒĘĖÉ”MļúÛÉaúņÉ/aƒåɐ r] ‰úŠ iú€Caú&€aaú€ŒažŠ MŊúÍCaúãaaú׌aŠ˙´āīrÚƒL ú? ¯aú2 Ųaú% ÷a‹§´āī0.ƒôúį¯aúÚŲaúÍ÷a‹V´āī0ú‹¯aúŲaús÷aāī…™bŒ´āī0~úI¯aú=Ųaú1÷aŒĪ´āī0]ú¯aúųŲaúė÷a‹€´āīŌúÁ¯aú´Ųaú§÷a‹!´āī˛úb¯aúUŲaúH÷aāī…qb‹Õ´āīŒú¯aúöŲaúé÷aāī…5b;É^ Š˙ÅøīyĨƒL ú? [bú2 …bú% Ĩb‹§Åøī0.ƒôúį[búÚ…búÍĨb‹VÅøī0ú‹[bú…búsĨbøī…™ÃbŒÅøī0~úI[bú=…bú1ĨbŒĪÅøī0]ú[búų…búėĨb‹€ÅøīŌúÁ[bú´…bú§Ĩb‹!Åøī˛úb[búU…búHĨbøī…qÃb‹ÕÅøīŒú[búö…búéĨbøī…ãbÉ^ ‚˛×Šú˛ cú(˛cú˛7c„×ÎąÛ ˛úŲąJcúņą]cúåąxcŖąÛ Mšú˛ąJcúČą]cúŧąxcäá\ m@ßĻ^vā ”§€ë__x‘vÍ@ũ×'Sœ“e˙ ”äG‘Šenv´V@‹cŠOĸđšHúhÃcú^ũc‰úĒ •=ú€?dú&€Udú€jdžĒ MŊúÍ?dúãUdú×jdÚ~‚æ Ëšúõ }dá°úąI_Tpë@Ū†9ņ@Ū:‡9ņ@ŪD9å@âîŽ/@G ß´Āõā ”gaë__nŽ>Žë__sŽœ'âîC“™´ũāŗhœ Á ˙ ”“a‘œâĸGޏdĨ__xGÁ ‘8đĻŸęĨQë@âd‰˛‚ LšúƂeúŪ‚eúŌ‚3ev‚ MŊú…‚eú›‚eú‚3e‹Š#3PđSúÁ#Feú´#teú§#ąe‹}Î3Pđ‚úžÎFeúąÎteú¤Îąe‹üÍ3Pđ_ú=ÎFeú0Îteú#ÎąePđ…LÎĪe‹e3PđVú“Feú†teúyąePđ…ĸīe]É^ „hîC^™´Ÿ0=`™´fŸYWaŪ­ZfŸ€obŪ­„fŠąhhđ_zø×ōŠc •ĘøĀVhđ…æėf‰øah Sƒbƒb‚CŊq“øcŊōƒWŊŠ7œ„€đ` ƒaœúTœgЕΔ đa#ú¤Ī>gƒŽĪ đlĪ”ĒúwĪggƒƒĪAĪ”MļúPĪggúfĪzgƒZΐ r] ‰˛‚Š i†úƂŽgúŪ‚ŦgúŌ‚×gv‚Š MŊú…‚Žgú›‚Ŧgú‚×gŠ*#´¸đrQƒw#új#úgú]#$húP#Bh‹Ō"´¸đ0.ƒ#ú#úgú#$húø"Bh‹"´¸đ0úļ"úgúĒ"$húž"Bh¸đ…Ä"`hŒ?"´¸đ0~út"úgúh"$hú\"BhŒú!´¸đ0]ú1"úgú$"$hú"Bh‹Ģ!´¸đŌúė!úgúß!$húŌ!Bh‹L!´¸đ˛ú!úgú€!$hús!Bh¸đ…œ!`h‹!´¸đŒú.!úgú!!$hú!Bh¸đ…=!€h;É^ Š*#ÅĐđy ƒw#új#Ļhú]#ĐhúP#đh‹Ō"ÅĐđ0.ƒ#ú#Ļhú#Đhúø"đh‹"ÅĐđ0úļ"ĻhúĒ"Đhúž"đhĐđ…Ä"iŒ?"ÅĐđ0~út"Ļhúh"Đhú\"đhŒú!ÅĐđ0]ú1"Ļhú$"Đhú"đh‹Ģ!ÅĐđŌúė!Ļhúß!ĐhúŌ!đh‹L!ÅĐđ˛ú!Ļhú€!Đhús!đhĐđ…œ!i‹!ÅĐđŒú.!Ļhú!!Đhú!đhĐđ…=!.iÉ^ ‚´×ŠúŸ´Tiúĩ´giúŠ´‚i„׏[´Û ˛úf´•iú~´¨iúr´Ãi0´Û Mšú?´•iúU´¨iúI´Ãiäá\ Aē$õĻœˇ"IT°*ą7_ķˇ"‘—)ƒđđôĀ!úIƒÖiú?ƒöi—cP ņ™u!ú„P%júwP8j‰O j!ú"O%j)9] ::$(ņúIƒhjú?ƒ|jŒcP:@ņ—ú„P‘júwPŠj†:$—īæ=`ņôå!ƒįI&b—MįIxņôE"ú^įĖjŒkIņUúkĖj‹åjI¨ņúūjîjúôjĖj’MįŠôĸ"ø^įutŸkŠUøkutŸ‚åjŠ•ūjøôjutŸīįĻö\ DáŲú#I_Tp°*Ū†9īCŪ:‡9īCŪD95‘âîŽ/@G ßņÔ#L#ā ”CŸë__nŽ*Īë__sŽœ'âîC“…ÕũĖÔhœd#+˙ ”Ij‘œâĸGúÎkĨ__xG+‘Āņũ$ŸęĨQ°*,k‰—ƒ L$ú̃JkúÃhkúˇƒ}k[ƒ MŊújƒJkú€ƒhkútƒ}k‹ĸ'3ØņSúŲ'kúĖ'žkúŋ'ûk‹`Đ3Øņ‚úĄĐkú”Đžkú‡Đûk‹ßĪ3Øņ_ú АkúĐžkúĐûkØņ…/Đl‹ŧ"3ØņVúę"kúŨ"žkúĐ"ûkØņ…ų"9l]É^ „hîC^…ÕŸ0=`…Õ_lŸYWaĘΤlŸ€obĘÎÎlŠ#hđņ_Ņ%ø.#ōŠc •!#ø#Vđņ…=#6m‰)Ÿh Ē%ƒ8Ÿƒ8Ÿ‚CŊq“øcŊōi%ƒWŊŠį'„ō`÷%ƒ(ú(`mŠxŅ”(ōaz&ú‡Ņˆmƒ‘Ņ(ōOŅ”ĒúZŅąmƒfŅ$Ņ”Mļú3ŅąmúIŅÄmƒ=Ґ r] ‰—ƒŠ iŨ&ú̃ØmúÃömúˇƒ!n[ƒŠ MŊújƒØmú€ƒömútƒ!nŠB'´@ōr¨(ƒ'ú‚'Dnúu'nnúh'Œn‹ę&´@ō0.ƒ7'ú*'Dnú'nnú'Œn‹™&´@ō0úÎ&DnúÂ&nnúļ&Œn@ō…Ü&ĒnŒW&´@ō0~úŒ&Dnú€&nnút&ŒnŒ&´@ō0]úI&Dnú<&nnú/&Œn‹Ã%´@ōŌú&Dnú÷%nnúę%Œn‹d%´@ō˛úĨ%Dnú˜%nnú‹%Œn@ō…´%Ēn‹%´@ōŒúF%Dnú9%nnú,%Œn@ō…U%Ęn;É^ ŠB'ÅXōys*ƒ'ú‚'đnúu'oúh':o‹ę&ÅXō0.ƒ7'ú*'đnú'oú':o‹™&ÅXō0úÎ&đnúÂ&oúļ&:oXō…Ü&XoŒW&ÅXō0~úŒ&đnú€&oút&:oŒ&ÅXō0]úI&đnú<&oú/&:o‹Ã%ÅXōŌú&đnú÷%oúę%:o‹d%ÅXō˛úĨ%đnú˜%oú‹%:oXō…´%Xo‹%ÅXōŒúF%đnú9%oú,%:oXō…U%xoÉ^ ‚Šļ׊ú™ļžoú¯ļąoúŖļĖo„׏UļÛ ˛ú`ļßoúxļōoúlļ p*ļÛ Mšú9ļßoúOļōoúCļ päá\ DũĶtœ5+N,˙ ”Ij‘†âĸoúÎ p __xoN,‘ xōĸ__nr…ÕJp’"ˇr¸+ú1ˇpp‚u$úuppƒu—į'˜ōrā+ƒ(ø(ōB+’—ƒPvB,ú̃ĻpúÃÅpúˇƒäp[ƒPMŊújƒĻpú€ƒÅpútƒäp4L#`Dũ˜Ũ_œk,î-˙ ”pu‘Š__x)Ø„Ø÷p°ōī__y)Ū„ØŠØÖČō)ßâ-úįÖ-qúņÖKq‰’Ö )šP-úĄÖuqúĢÖˆq‚CÖ )…ƒNÖúfÖ§qúZÖˆqÖ Mšƒ'Öú=Ö§qú1Öˆq#á\ ‚—Ÿ6")™ƒϟú°Ÿģq3ˆ6" …úBˆģqŠqI6āō#Ģ-ú€Iģq‹L9øō#ƒLúLíqšRwBüR‘o6S,ßlũ-L.ā ”“BŪß1ÄL.âî6ÅÆî‚KĮîCȁī__rĘ%אũ‡âØœi.2˙ ”ž†‘Ĩ__k)„2‘ķž__j)†¸ØrŠŲŲ(ķ)†Ŋ.účŲ#rŠ“Ų@ķ)†c0úĸŲNrúÆŲyrúšŲ™rúŦŲÃr‚yØC")ũúˆØėrúŸØsú’Øs‚.ØC"@súaØsúTØs‚î-C" ú.súũ-s„C"….Fs…#.esŦ0.…=.ŽsŠ‹ICXķÆų/úšIs‚qICÕú€Is‚WIC-úfIsŠNĢFpķĘ30ƒsĢúfĢŦsúYĢĘs]ņd ‹ø×SˆķĖƒØƒØˆķŦ؉yØz$)ˆĪ1úˆØėrúŸØŨsú’Øt‚.Øz$@súaØŨsúTØt‚î-z$ ú.Ũsúũ-t„z$….t…#.)tŦ0.…=.Øë__p)p>Øë__v)pŲ2âîÉ)sü$ī__z)w„Øאũ˜āķœö2a:˙ ”pu‘Ĩ__v)Õa:‘đķV:Ÿœ)ŲoGĮtŠ2ô)ÚI6ú128uú'2Xuô…@2xu…M2ĸu…Z2×u…g21vŠŧØ(ô) Ĩ3úËØTvŠyØ>@ô)Ĩ 5úˆØĪvúŸØãvú’Øøv‹.Ø>@ô@súaØãvúTØøv‹î->@ô ú.ãvúũ-øv@ô…. w…#.wŦ0.…=.=w‰‹I>Į¤4úšIãv‹qI>XôÕú€Iãv‹WI>Xô-úfIãvŠNĢNpôĘŪ4ƒsĢúfĢ[wúY̆w^ņd ‹ø×^ˆôĖƒØƒØˆôŦ؉y؇)°!6úˆØĻwúŸØēwú’ØÎw‚.؇@súaØēwúTØÎw‚î-‡ ú.ēwúũ-Îw„‡….âw…#.õwŦ0.…=.xŠṄ ôĘō5ƒsĢúfĢ1xúYĢ]x˜ņd ‹ø×ЏôĖƒØƒØ¸ôŦØ‚`ŲĐ.)ŽúoŲ‰xŲ$‰Ú ¨ )áu6ƒ˙ ƒķ úé ĄxŠ{2Đô)ß-:úŽ2ĀxúĄ2āxú”2yúŠ27yĐô…Ŋ2WyŦĘ2‰yØ *)tŒ8úˆØĸyúŸØļyú’ØŪy‚.Ø *@súaØļyúTØŪy‚î- * ú.ļyúũ-Ūy„ *….ōy…#.zŦ0.…=.$zŠ‹I đôÆË7úšIŪy‹qI õÕú€IŪy‹WI õ-úfIŪyŠ‹I(õĮ#8úšIBz‚qIÕú€IBz‚WI-úfIBzŠNĢ@õĘ]8ƒsĢúfĢjzúYĢ}z/ņd ‹ø×%XõĖƒØƒØXõŦØŠž =põ)w!:ƒ­ úˇ zpõŦÆ Š„ =˜õ)‹:9ƒ“ ‹[ =˜õ)ƒf úr ČzŒ0 =˜õMļúI Čzƒ? úU čzGr] Ār] ŠšÖIĀõ)V9ƒČÖŠڃOāõ)Œ9ƒéƒú˙ƒ{úķƒ@{‘[‰’ÖĶ):ƒĄÖƒĢÖ‚CÖĶ)…ƒNÖ•fÖƒZ֏ÖĶMšƒ'Ö•=Öƒ1֐Ûá\ Ķe ã'e ę-e p˜$‹Ú søõ)߃˙ ƒķ úé ^{ķö\ א›Dõœœ3;%AÅ \QŌ¤­ÍyI‘‰ŸR{Æ:úŽR}{ú¸R{‰cPH{ö:ú„P¸{ƒwP\:$Hûéd}֐y9e ‰\e ”}֐œö\ ›C/Ņœ*@IT,¤Ü/&O*@‘ö@ģss&P ‘¤~Šį8ö&PC=•Iįú+įā{Š höÄ;ú+|‘Šgį˜öp<úŠįs|úvį“|ŠŸįĐö#?<ƒÂįúŽį“|† ũŠ M†÷#?M<ƒ/MúMŪ|Ž ũ‚ÔL`#?ƒ÷LúãLE}Š-É(÷=úF[}ú<“}—ķŒÉH÷cž<ú“}‘;˜ŒS cú§Œü}‚XŒS ŧƒ~ŒúqŒo~úgŒü}‰aLx,=úpL„~‘‹b ũ‘š‘ĖŠ‹b`÷&Q{>ú–š~úŖŪ~‹Xb`÷&Ŧújš~úwŪ~`÷‹.b`÷&ôú9š~úFŪ~‹ũb`÷&Xúš~úŪ~‹Âb`÷&xúëŪ~úŪš~ƒŲúÔE‹‰b`÷&Rƒ›ú§Ū~`÷|&öŗŒĄnb`÷&õúēnqú°nŪ~y=ŠÕã{x÷&RĨ>úäㅐ„(Š(„÷&R@ú (ˇŠ8æ„°÷5}?úIæé—3ˆ„Đ÷@[?úBˆ#€ŠqI„đ÷#!?ú€I#€‹L¸ø#úLU€úL‡€šSwBüRuĢ~2LÃ@úALĨ€‘ÜŠD(Ü ø5ë?ƒg(úS(ɀŠ–Lį8ø#;Č?ƒšLúĨL퀋ÔLíPø#;ƒ÷LúãL‹aLpø5úpL5‘4‘ĸ“ö\ Ēö\ ¯E›põđœzC¤ŖZœ'‘¤ęŦ[œ'‘¤üØ\™õ‘ ¤Û]™õ‘ŠĶˆøfĶ@úûYú‹ĩˆø™úĀ•/3;ŠĶ% øf#Aúû܁úî ‚‹ĩ% ø™úĀ ‚;3;Š3ˆP¸øf›AúBˆR‚ŠqIPØø#bAú€IR‚‹LYđø#úLŠ‚úLš‚š¸wBüRu_Š3ˆ`ųfBúBˆׂ‰qI`#ÚAú€Iׂ‹Lf ų#úLƒúL5ƒš§wBüRv‰é€ _uB‚ī_€ Éú`Sƒúū_gƒ‚Å_ƒúŪ_…ƒúÔ_™ƒ‰3ˆŧ fíBúBˆģƒ‰qIŧ#´Bú€Iģƒ‚LÂ#úLЃúLũƒšŅwBüRu_‰3ˆÜfeCøBˆu`Ÿ‰qIÜ#,Cø€Iu`Ÿ‚Lâ#úL„úL=„šņwBüRu_POÚö\ ēĨõ0œ\K¤z{œ'‘¤z{œ'‘¤âX{™õ‘ ¤įX{™õ‘‰é, {0D‚ī_, Éú`P„úū_d„‚Å_/úŪ_w„úÔ_‹„ŠĶH8ų{€Dúû „úîÄ‹ĩH8ų™úĀĐ[3;ŠĶNPų{ŅDøûu¸Ÿúî …‹ĩNPų™úĀ …g3;‰sįq {3E‚ī_q Îú`7…úū_W…‚Å_uúŪ_‘…úÔ_ą…ŠŌØŽhų{šFúōØĶ…účØû…ŠŌ뜈ųÃEúōë†účë8†ˆų…|cŒcPĸ ųƒú„P†úwPc†˛:$ŠMįŊ¸ų$Fú^įƒ†ŒkŊĐųUúkŖ†‹åjŊčųúūjč†úôjŖ†‰Mį…Fú^įü†kUúkü†‚åjúūj‡úôjü†œīįŊgŠ0Ôøú{HúPÔ%‡úFÔ=‡Š.ë ú*GúNëf‡úDë~‡ ú…|cŒcP 8úƒú„Pf‡úwP‘‡:$ŠMį$Pú‹Gú^įą‡Œk$húUúką‡‹åj$€úúūjćúôją‡‰MįģėGú^į؇kģUúk؇‚åjģúūjí‡úôj؇īį$gŠzįP˜ú{åHúŒįˆ‹~ˆP¸úúˆˆ‹4gPØúúMg+ˆúCgˆŠ3ˆZøúŽØHúBˆ?ˆ‰qIZ#ŸHú€I?ˆ‹L_û#úL]ˆúLˆšˇwBüRvoá\ Š3ˆr(û{]IúBˆˆ‰qIr#$Iú€Iˆ‹Lx@û#úL˛ˆúLĮˆš¨wBüRu`‰3ˆ!{ÕIúBˆåˆ‰qI#œIú€I刂L…#úLúˆúL'‰š˜wBüRu`‰zįÎ {JúŒį:‰‚~ˆÎ úˆg‰Û4g‰3ˆÛ{“JúBˆ”‰ŠqIÛXû#ZJú€I”‰‹LŪpû#úLЉúL։šķwBüRu`‰3ˆķ { KúBˆé‰‰qIķ#ŌJú€I鉂Lų#úLū‰úL+ŠšwBüRu`‚ņŽė­â뭐īņørZGrZPw^ö\ ēÎõ0Cœ:S¤z~œ'‘¤z~œ'‘¤âX~™õ‘ ¤įX~™õ‘ŠĶ\ˆû~Lúû>ŠúîoŠ‹ĩ\ˆû™úĀoАo3;ŠĶb û~PLúûĊúî芋ĩb û™úĀ芐{3;‰sį… ~˛L‚ī_… Îú`"‹úū_Z‹‚Å_‰úŪ_Ž‹úÔ_æ‹ŠŌØĸ¸û~NúōØ"ŒúčØZŒŠŌë°ØûBMúōëoŒúčë§ŒØû…|cŒcPļđûƒú„PoŒúwPėŒÆ:$ŠMįŅüŖMú^į ŒkŅ üUúkF‹åjŅ8üúūj–úôjF‰MįūNú^įkūUúk‚åjūúūj׍úôj°īįŅgŠ0Ô Pü~}OúPÔëúFÔ#ŽŠ.ëpüŠNúNëLŽúD넎pü…|cŒcPˆüƒú„PLŽúwP­Ž/:$ŠMį8 ü Oú^į͎Œk8¸üUúk͎‹åj8ĐüúūjëŽúôj͎‰Mį^hOø^įu\Ÿk^Uøku\Ÿ‚åj^•ūjøôju\Ÿīį8gŠzįdčü~aPúŒį ‹~ˆdũúˆ-‹4gd(ũúMgOúCg-Š3ˆnHũŽTPúBˆo‰qIn#Pú€Io‹Ls`ũ#úLúL¯š÷wBüRvƒá\ Š3ˆ†xũ~ŲPúBˆ͏‰qI†# Pú€I͏‹LŒũ#úLīúLščwBüRu`‰3ˆ“~QQúBˆ/‰qI“#Qú€I/‚L™#úLDúLqš¨wBüRu`‰é˛ ~ŗQ‚ī_˛ Éú`„úū_˜‚Å_ĩúŪ_̐úÔ_ŋ‰zį ~ųQúŒįԐ‚~ˆ úˆ‘4g‰3ˆ~qRúBˆ.‘ŠqI¨ũ#8Rú€I.‘‹L!Āũ#úLC‘úLp‘š6wBüRu`‰3ˆ6(~éRúBˆƒ‘‰qI6#°Rú€Iƒ‘‚L<"#úL˜‘úLőšKwBüRu`–ņĸ뭐ö뭐ņ rZ[rZdw^Tö\ ē÷õ€Cœ[¤zœ'‘¤zœ'‘¤âX™õ‘ ¤įX™õ‘ŠĶŦØũŪSúûؑúî ’‹ĩŦØũ™úĀ ’ŋ3;ŠĶ˛đũ.Túû^’úî‚’‹ĩ˛đũ™úĀ‚’Ë3;‰sįÕ T‚ī_Õ Îú`ŧ’úū_ô’‚Å_ŲúŪ_H“úÔ_€“ЧŨōū÷UúĮŨŧ“úŊŨô“ŠÜę(ū Uúüę ”úōęA”(ū…|cŒcP@ūƒú„P ”úwP†”:$ŠMį!XūUú^įĻ”Œk!pūUúk┋åj!ˆūúūj0•úôj┉MįNâUú^į\•kNUúk\•‚åjNúūjq•úôj\•īį!gŠ0Ô\ ū[WúPÔ…•úFÔŊ•Š.ëiĀū‡VúNëæ•úD떍Āū…|cŒcPoØūƒú„Pæ•úwPG–:$ŠMįˆđūčVú^įg–Œkˆ˙Uúkg–‹åjˆ ˙úūj…–úôjg–‰MįŽFWø^įu\ŸkŽUøku\Ÿ‚åjŽ•ūjøôju\ŸiīįˆgŠzį´8˙?XúŒįĨ–‹~ˆ´X˙úˆĮ–‹4g´x˙úMgé–úCgĮ–Š3ˆž˜˙Ž2XúBˆ —‰qIž#ųWú€I —‹Lð˙#úL'—úLI—šGwBüRvĶá\ Š3ˆÖČ˙ˇXúBˆg—‰qIÖ#~Xú€Ig—‹LÜā˙#úL‰—úLĢ—š8wBüRu`‰3ˆã/YúBˆɗ‰qIã#öXú€Iɗ‚Lé#úLŪ—úL ˜šøwBüRu`‰é ‘Y‚ī_ Éú`˜úū_2˜‚Å_úŪ_E˜úÔ_Y˜‰zįa ×YúŒįn˜‚~ˆa úˆ›˜n4g‰3ˆnOZúBˆȘŠqInø˙#Zú€IȘ‹Lq#úLŨ˜úL ™š†wBüRu`‰3ˆ†(ĮZúBˆ™‰qI†#ŽZú€I™‚LŒ"#úL2™úL_™š›wBüRu`æņō뭐F뭐Sņ\rZĢrZ´w^¤ö\ ē öĐCœöb¤z„œ'‘¤z„œ'‘¤âX„™õ‘ ¤įX„™õ‘ŠĶü(„ŧ[úûr™úîŖ™‹ĩü(™úĀŖ™ 3;ŠĶ @„ \úûø™úîš‹ĩ @™úĀš 3;‰sį%  „n\‚ī_%  Îú`Všúū_Žš‚Å_) úŪ_âšúÔ_›ŠŌØB X„Õ]úōØV›účØŽ›ŠŌëP xū\úōëŖ›účëۛx…|cŒcPV ƒú„PŖ›úwP œf :$ŠMįq ¨_]ú^į@œŒkq ĀUúkzœ‹åjq ØúūjƜúôjzœ‰Mįž Ā]ú^įöœkž Uúköœ‚åjž úūj úôjöœP īįq gŠ0ÔŦ đ„9_úPԝúFÔWŠ.ëš e^úN뀝úD븝…|cŒcPŋ (ƒú„P€úwPáĪ :$ŠMᨠ@Æ^ú^įžŒkØ XUúkž‹åjØ púūjžúôjž‰Mįū $_ø^įu\Ÿkū Uøku\Ÿ‚åjū •ūjøôju\Ÿš īᐨ gŠzį ˆ„`úŒį?ž‹~ˆ ¨úˆaž‹4g ČúMgƒžúCgažŠ3ˆ čŽ`úBˆŖž‰qI #×_ú€IŖž‹L #úLÁžúLãžš— wBüRv# á\ Š3ˆ& „•`úBˆŸ‰qI& #\`ú€IŸ‹L, 0#úL#ŸúLEŸšˆ wBüRu`‰3ˆ3 „ aúBˆcŸ‰qI3 #Ô`ú€IcŸ‚L9 #úLxŸúLĨŸšH wBüRu`‰éR  „oa‚ī_R  Éú`¸Ÿúū_˟‚Å_U úŪ_ߟúÔ_ķŸ‰zįą  „ĩaúŒį ‚~ˆą  úˆ5 ž 4g‰3ˆž „-búBˆb ŠqIž H#ôaú€Ib ‹LÁ `#úLw úL¤ šÖ wBüRu`‰3ˆÖ („ĨbúBˆˇ ‰qIÖ #lbú€Iˇ ‚LÜ "#úLĖ úLų šë wBüRu`6 ņB 뭐– 뭐Ŗ ņŦ rZû rZ w^ô ö\ ēIö CœÔj¤z‡œ'‘¤z‡œ'‘¤âX‡™õ‘ ¤įX‡™õ‘ŠĶL x‡šcúû Ąúî=Ą‹ĩL x™úĀ=Ą_ 3;ŠĶR ‡ęcúû’ĄúîļĄ‹ĩR ™úĀļĄk 3;‰sįu  ‡Ld‚ī_u  Îú`đĄúū_(ĸ‚Å_y úŪ_|ĸúÔ_´ĸЧŨ’ ¨‡ŗeúĮŨđĸúŊŨ(ŖŠÜę  ČÜdúüę=ŖúōęuŖČ…|cŒcPĻ āƒú„P=ŖúwP窐ļ :$ŠMįÁ ø=eú^įÚŖŒkÁ Uúk¤‹åjÁ (úūjd¤úôj¤‰Mįî žeú^ᐤkî Uúk¤‚åjî úūjĨ¤úôj¤  īįÁ gŠ0Ôü @‡gúPÔš¤úFÔņ¤Š.ë `CfúNëĨúDëRĨ`…|cŒcP xƒú„PĨúwP{Ĩ :$ŠMį( ¤fú^į›ĨŒk( ¨Uúk›Ĩ‹åj( ĀúūjšĨúôj›Ĩ‰MįN gø^įu\ŸkN Uøku\Ÿ‚åjN •ūjøôju\Ÿ īį( gŠzįT ؇ûgúŒįŲĨ‹~ˆT øúˆûĨ‹4gT úMgĻúCgûĨŠ3ˆ^ 8ŽîgúBˆ=ωqI^ #ĩgú€I=Ļ‹Lc P#úL[ĻúL}Ļšį wBüRvs á\ Š3ˆv h‡shúBˆ›Ļ‰qIv #:hú€I›Ļ‹L| €#úLŊĻúLßĻšØ wBüRu`‰3ˆƒ ‡ëhúBˆũωqIƒ #˛hú€IũĻ‚L‰ #úL§úL?§š˜ wBüRu`‰éĸ  ‡Mi‚ī_ĸ  Éú`R§úū_f§‚Å_Ĩ úŪ_y§úÔ_§‰zį  ‡“iúŒįĸ§‚~ˆ  úˆΧ 4g‰3ˆ ‡ júBˆü§ŠqI ˜#Ōiú€Iü§‹L °#úL¨úL>¨š& wBüRu`‰3ˆ& (‡ƒjúBˆQ¨‰qI& #Jjú€IQ¨‚L, "#úLf¨úL“¨š; wBüRu`† ņ’ 뭐æ 뭐ķ ņü rZK rZT w^D ö\ ›ž!Eœo_ÅfSrÍû.ą† pfS‘ą:‡ pfS‘ąŖ¨ qû.‘ <‘Čŗö? tīύ—N“  tvkøx“ōújøk“ō k’“0 |ôkú˛“ę¨ú¨“›Š“0 ,įú6“įŠú,“›Š‚ú`0 cú-a›Šú a‚ǐ<ö’“C €rlú˛“ŽĒú¨“=Ģ“C ,įú6“‰Ģú,“=Ģ‚ú`C cú-a=Ģú aŦOö’“V „đlú˛“2Ŧú¨“‘Ŧ“V ,įú6“ÆŦú,“‘Ŧ‚ú`V cú-a‘Ŧú a­bö’“p xnmú˛“E­ú¨“ũ­“p ,įú6“IŽú,“ũ­‚ú`p cú-aũ­ú a鎐{ö—ŋ“‚0 zmúΓ¯—ŋ“ H ~ŦmúΓ=¯—ŋ“¸` ‚ËmúΓe¯’“û ŒInú˛“¯ú¨“ĸ¯“û ,įú6“ĩ¯ú,“ĸ¯‚ú`û cú-aĸ¯ú aȝö’ŋ“  ŽhnúΓô¯’“ ænú˛“ °ú¨“!°“ ,įú6“4°ú,“!°‚ú` cú-a!°ú aG°ö’ŋ“" ’oúΓs°“% ”ú˛“‹°ú¨“ °“% ,įú6“ŗ°ú,“ °‚ú`% cú-a °ú aư0öáø!°oŲ!%Ū LĐ °oŪÕŅ ĩoאא›"Áœlw_Å–BrÍŽ/ą† p–B‘ą:‡ p–B‘ąŖ¨ qŽ/‘ <‘xŗö? tÉīō°—Ģ ˜ t[pøĢĢōāoøžĢōīo—ÃĢ8° |;qúåĢ6ąúÛĢ–ąŒo8°,ŋúĸožąú•oŪą‰‹I8Ō ˙púšIŪą‚qI8Õú€IŪą‚WI8-úfIŪą‚NĢÔ úsĢ2˛úfĢE˛úYĢX˛›ņd —ÃĢ@Č €rúåĢk˛úÛ̝˛Œo@Č,ŋúĸoײú•o÷˛‰‹I@Ō ßqúšI÷˛‚qI@Õú€I÷˛‚WI@-úfI÷˛‚NĢĀÔ úsĢ3ŗúfĢFŗúYĢYŗËņd —ÃĢHā „ûrúåĢlŗúṴ̂ŗŒoHā,ŋúĸoØŗú•oøŗ‰‹IHŌ ŋrúšIøŗ‚qIHÕú€Iøŗ‚WIH-úfIøŗ‚NĢčÔ úsĢ4´úfĢG´úYĢZ´ķņd ’ÃĢ_ xÛsúåĢm´úÛĢÖ´o_,ŋúĸoū´ú•oĩ‰‹I_Ō ŸsúšIĩ‚qI_Õú€Iĩ‚WI_-úfIĩ‚NĢgÔ úsĢyĩúfĢŒĩúYĢŸĩrņd ’IĒĸ zúsúXǞĩ’IĒÖ ~túXĒÚĩ’IĒū ‚8túXĒļ—ÃĢ@ø uúåĢ*ļúÛĢLļŒo@ø,ŋúĸotļú•o”I@Ō ÜtúšI”ļ‚qI@Õú€I”ļ‚WI@-úfI”ļ‚NĢ¤Ô ús̞ļúfĢÅļúY̨ņd ’IĒG ’7uúXĒëļ’ÃĢJ ”vúå̎úÛ̎oJ,ŋúĸo0ˇú•oDˇ‰‹IJŌ ÛuúšIDˇ‚qIJÕú€IDˇ‚WIJ-úfIDˇ‚NĢQÔ úsĢWˇúfĢjˇúYĢ}ˇ\ņd —ÃĢy ŒOwúå̐ˇúÛĢÁˇŒoy,ŋúĸoŲˇú•oíˇŠ‹Iy(Ō ģvúšI¸‹qIyHÕú€I¸‹WIyH-úfI¸Š‹I}`Ō wúšIíˇ‚qI}Õú€Iíˇ‚WI}-úfIíˇ‚NĢÔ úsĢ,¸úfĢ?¸úYĢR¸›ņd IĒ‹ ŽúXĒe¸ßS0„w›wĩR˛kā ”-‹čįv,æ˛k›V"xœ"{_ŞkrÍņ/ą† p˛k‘ą:‡ p˛k‘ąŖ¨ qņ/‘ <‘xŗö? tõī}¸—7œ ° t=xøaœōÁwøTœōĐw’lw0 x‘xƒŽwú„wŖ¸ œ2,įú$œظúœë¸CČ] ’lwN |åxƒŽwú„w š œQ,įú$œUšúœhšbČ] ’lwm €9yƒŽwú„wš œp,įú$œģšúœΚČ] ’lwŒ" „yƒŽwú„wėš œ,įú$œ ēúœē Č] ’lwá ŒáyƒŽwú„w;ē œã,įú$œNēúœaēôČ] ’yœû Žzúˆœtē’lwū TzƒŽwú„wŒē œ,įú$œŸēúœ˛ēČ] ’yœ ’szúˆœÅē’lw ”ĮzƒŽwú„wŨē œ,įú$œđēúœģ.Č] —yœPĐ zæzúˆœģ’yœh ~{úˆœ>ģyœp ‚úˆœfģá"g{{%˛krÍûÍŪ† ͞kŪ:‡ ͞kŪŖ¨ ÔûÍáŦ0ˆ{rÍûÍčŖ¨,ėûÍáÂ"Ę{ĩR˛krÍņ/č† Ÿ˛kč:‡ Ÿ˛kčŖ¨ Ÿņ/ß“˛Ų{ |ā ”“ačâĸoŽé__xo |âã__nr™´bAßX˛|7|ā ”“aë__x‘7|bAũėģp |œT|lˆ˙ ”lH‘¤¨ãMœ'‘¤ÕŠNœ'‘¤ŗWOļ‘ ¤?YPѝčWˆŸ[—Rž´ŽģĒ:ÁZ÷@‘XŠE$‰ Tü|ú^$ŊģúT$)ŧ‘• Šé#• (T>}úø#Ōŧ‹īs• (6útXŊƒūs‰Ī#  T€}úŪ#$ž‚īs  $útœžƒūsŠ"{Ļ @TcƒúY{HŋúL{Ųŋú?{cĀŠ¯iĻ p Ũã}úËiHŋúÁiŦĀ‘° Šg{ą ˆ Ũ¨ú{{?Á—¯ią °,í1~úËi?ÁúÁi Á‘ŋ —‹Á Č,í…~ú ‹Âú‹pÂŒ¯iÁ Č,áúËiÂúÁipÂ‘Ë —2‹Ë ā,íúD‹Ū‹3ˆË 2úBˆFÊqIË  #Ū~ú€IFËL× 8#úLäÃúLqÄšwBüRs2‹Î,íøD‹u`Ÿ‚3ˆÎ2øBˆu`Ÿ‰qIÎ#mø€Iu`Ÿ‚LÔ#úLÄúLŧÄšįwBüRudŠˆ{â P Ũā€úŊ{Īăą{ƒĨ{’™œâ  ĸ'€ú´œĪÄúǜJŏ¯iâ  ,ÜúËiĪÄúÁiJÅ‘ī —ŋœh ĸՀúМ­ÅŒ2‹ˆ,ÜúD‹Æ‹3ˆ¨2úBˆšÆŠqIČ#š€ú€IšÆ‹Lā#úL ĮúLmĮš—wBüRv›wŠŋœ  ŨúМ‹ĮŒ2‹ ,ÜúD‹‹Į‹3ˆ0 2úBˆûĮ‰qI#Tú€IûĮ‹LH #úLQČúLÁČš'wBüRsŠ2‹)`  Ũ#‚úD‹īČ‹3ˆ)x 2úBˆÉŠqI) #éú€IÉ‹L/¨ #úLMÉúLoÉšGwBüRs‰2‹Q Ũˇ‚úD‹É‚3ˆQ2úBˆÉ‰qIQ#}‚ú€IÉ‚LW#úLĸÉúLĪÉšfwBüRuO‚ŋœļ ŨúМâɏ2‹ļ,ÜúD‹âÉ‚3ˆļ2úBˆâɉqIļ#'ƒú€IâÉ‚Lŧ#úL÷ÉúL ĘšĘwBüRvŠ2‹:Ā T÷ƒúD‹Ę‹3ˆ:Ø 2úBˆĘŠqI:đ #Ŋƒú€IĘ‹L@ #úLAĘúLcĘšgwBüRsŠ3ˆK To„úBˆĘŠqIK8 #6„ú€IĘ‹LQP #úLŖĘúLÅĘš‡wBüRsŠ3ˆąh _į„úBˆãĘŠqIąˆ #Ž„ú€IãĘ‹Lē  #úLËúL[ËšwBüRu\Šņ$Ö¸ f …ú %y˃%ŠĘ{ęĐ fž…úī{ŌËúã{ôËúŲ{-ĖĐ …ũ{[Ė’˛‚: v˛…úƂœĖúŪ‚¯ĖúŌ‚ÄĖv‚: MŊú…‚œĖú›‚¯Ėú‚ÄːõŠ| č iU†ú)|×Ėú|ųˉ˛‚Ģ •J†úƂ/ÍúŪ‚GÍúŌ‚\͏v‚Ģ MŊú…‚/Íú›‚GÍú‚\͐õ‰”eÃl†úŖeoÍúŖeoÍŠk}Ņ l‡ú„}ŖÍúz}Ō͉(~Ų• ‡ú<~ÎúT~,ÎúH~AΏė}ŲMŊúû}Îú~,Îú~Aΐ5nu‰2‹fTLJúD‹c΂3ˆf2úBˆcΉqIf#p‡ú€Ic΂Ll#úLxÎúLĨΚ{wBüRuO‰3ˆ{&T"ˆúBˆ¸Î‰qI{#é‡ú€I¸Î‚L #úLÍÎúLúʐwBüRuO‘‰ zr] c‘ĸ¯pYŦá\ ™ö\ ´ö\ ßŧ{ˆ­ˆā ”lHŪŗWŽļŪ?YÃŪž|Û9›röđōœĪޤ¨ãŠœ'‘¤3Ēœ'‘¤ÕŠĢœ'‘¤¤CŦœ'‘ ¤Ôx­ˇ­‘¤ŗWŽŋÛ‘¤?Y¯ËÛ‘¤dˇ°Õ9‘0 ēŽŸž|ąų9 ĪŠ3ˆAP ŗԉúBˆAĪŠqIAp #›‰ú€IAĪ‹LJˆ #úL„ĪúLĀĪšXwBüRu_Š3ˆU  ŗLŠúBˆŪΉqIU#Šú€IŪĪ‹L[¸ #úL'ĐúLpĐšGwBüRv‰žf ´lАk0ŠlˆqĐ ´ŸúŸˆŽĐú’ˆÍĐú…ˆŅú{ˆ=҉ Œq˜‹úŒŒŅėSqoúûSņŅ‚‹Iq6úšIņŅŠ§`{ø Ąx‹úļ`FŌ‰n`{|?‹ú}`oŌ‚ŌS†}úáSžŌ‚WI†úfIžŌŠĸSÁ ™Ņ‹úģSąŌúąSāŌŒvSÄ( JúSąŌú…SāԐĐūŠɋĐH ™dŒúڋ3ĶŒ3ˆĐh ;úBˆ3ĶŠqIĐˆ #*Œú€I3Ķ‹LŲ  #úLUĶúLwĶšgwBüRw‰ ŒäšģŒúŒ•ĶėSäoúûS•Ķ‚‹Iä6úšI•͉ɋČ™NúڋŊĶ3ˆČ;úBˆŊ͉qIČ#ú€IŊĶ‚LÎ#úLŌĶúLįĶšÜwBüRwœ<|Ļ—}Á"ŊûécP!cP)}֐w}Ö‰3ˆŗŽúBˆú͉qI#Ūú€IúĶ‚L•#úLÔúL<Ôš¤wBüRu_‰3ˆ¤$ŗŽúBˆOÔ‰qI¤#VŽú€IOÔ‚LĒ#úLdÔúL‘ÔššwBüRu_‘ ‘(r] A˛hŒá\ ö\ Âö\ §āšQ œ2‘øôš‘øē‘ø ē‘øē‘ ¸ ,Ŧ#ēŦ/ē(Ŋ$Đ ƒēú ē¤ÔúēÄÔúôšīԍР…#ē$Õ…/ē{Õ—€š3đ %ˆžú šÄÔú”šīÔŒ-š3đ -vúMšÄÔúAšīÔ—­šC %ŒúŌšÔÕúÅšôÕú¸š)Ö‹cOC ™úˆO]Öú{OôÕúnO)Ö‰0OPi]úUOŠÖúHOŧÖú;OĪ֐[fe ‚Ns gƒĻNúšNâÖ’ŊNK%Œ úĖN{Õ—×N^( %’%‘úđNõÖúæN6ׄøđNSøæNW’œJÕũƒĢJN™׃ĻNøšNws"# ŸC4 ŖëĩāđÕœķœ¤¨ãāķœ‘¤aáøœ‘@ čœŸß#âũœnמpæ0‘á×îŽ0į0‘Ē/čÄ6‘TĒX]éÄ6‘XŠ—­öh â7’øĘ­PŸúŊ­G؍h ŦŨ­ŠõK ˆ y /’øLPŸúLsؐh‘ ‰ŌSüâs’úáS%Ų‚WIüúfI%ŲŠ—­  â“úĘ­QŲúŊ­zŲ  ŦŨ­ŠõK&Č y “úLÚúLHÚ‰O& û’ú"Oڐ.9] 9h™§w“øBˆuXŸ‰qI§#>“ø€IuXŸ‚L­#úLģÚúLčÚšĀwBüRu`‘&Š3ˆ9ā â÷“úBˆûÚŠqI9#ž“ú€IûÚ‹LB#úLˆÛúLëÛšwBüRu`‰ŌSMæ3”úáS Ü‚WIMúfI ÜŠTS0įg”ú#TQÜúTáאa‹] ‰˜Œhčŗ”ú§ŒÜ‚XŒhŧƒ~ŒúqŒŨúgŒ5Ũ‰˜Œoé˙”ú§Œ˛Ũ‚XŒoŧƒ~ŒúqŒŨúgŒ˛ŨŠÖēHîߕúģ"ŪúģƒŪúøēŅŪúîēß—“ē`%厕úÁē"Ūú´ēƒŪú§ēŅŪ`‹Kē`äúyē"ŪúlēƒŪú_ēŅŪ`ŒāšXŒ%åƒ~ŒƒqŒúgŒ^ߊvSxî–úS^ßú…S§ß›ūŠ3ˆ›˜î‹–úBˆûߊqI›¸#R–ú€Iûß‹L¤Đ#úL*āúLYāšwBüRuWŠvSÁčīŋ–úSwāú…SĻāĖūŠ3ˆĖī7—úBˆāāŠqIĖ(#ū–ú€Iāā‹LÕ@#úLáúL>áš(wBüRuW‰ėSāđĢ—úûS\á‚‹Iā6úšI\á‚qIāÕú€I\á‚WIā-úfI\á‰ŌSųį—úáS~á‚WIúfI~áŠ3ˆXé_˜úBˆ“áŠqIx#&˜ú€I“á‹L #úLĩáúL×ášowBüRsŠ3ˆ¨čטúBˆõáŠqIĀ#ž˜ú€Iõá‹LØ#úLâúL9⚇wBüRsŠ3ˆđųO™úBˆWâŠqI#™ú€IWâ‹L# #úLyâúL›âšŸwBüRs‰q^° ōŠ™úŠ^šâú€^Ņâ‚’ŗ° 3úĢŗšâúĄŗŅâÃOŠq^Đ8ë-šúŠ^ūâú€^ã‹’ŗĐ83úĢŗūâúĄŗã‰OĐ }!šú"OūâŲ9] ęOŠq^ęPė‡šúŠ^Jãú€^bã‹’ŗęP3úĢŗJãúĄŗbãũO‰3ˆ/âíšúBˆ‚ã‰qI/#ƚú€I‚ã‚L5#úL—ãúLŦã‰3ˆIīe›úBˆŋã‰qII#,›ú€Iŋã‚LO#úLÔãúLäš^wBüRuW‰3ˆ^éŨ›úBˆä‰qI^#¤›ú€Iä‚Ld#úL)äúLVäšswBüRuW‰3ˆsčUœúBˆiä‰qIs#œú€Iiä‚Ly#úL~äúLĢ䚈wBüRu`‰3ˆˆų͜úBˆžä‰qIˆ#”œú€Ižä‚LŽ#úLĶäúLč䚝wBüRu`‘øpYMpYEö\ Ē1Ē1Ē1ũ8ŊĐeœLĄ˙ ”lH‘¤ĸagÍļ‘hAĄŸh"íûäŸŪj"íåŸS]q%^åŸ"¯r%ē坈,Ąžis'æŠøa¨sȝúb}æúb}æĀŸ[—t÷@ņ柨ãuLĄįā  žjx'VįŠedx+žƒ)eƒ)e(Ÿž|yų9™įĒaz\F‘\Ÿ<¤}÷$ÍįŸũ„÷$čŸ°q‰÷$YčŸlK÷$y艚üšʞúŋü™čú˛ü­čúĨüÁčŠYüēH–ôžúrüÕčúhü éŠ3ˆŊ`—lŸúBˆ)éŠqIŊ€#3Ÿú€I)é‹Là#úLKéúLméš wBüRu_‰3ˆ—äŸøBˆudŸ‰qI#̟ø€IudŸ‚L$#úL‹éúL¸éš3wBüRu_‘pY/2‘apY‰Yüjv4 úrüËéúhüëéŠ3ˆ¨¸˜Ŧ úBˆę‰qI¨#s ú€Ię‹LŽĐ#úLCęúLręščwBüRud‰3ˆū ˜$ĄúBˆę‰qIū#ë ú€Ię‚L#úLĨęúLŌęšwBüRud‘aũŧ˙ŧ˙ö\ Ē1´Œ3@gœˇĸą-B3œ'‘čŦĸæÄâ40‘’*IN4ÂĄøIIŸúëúģ…ëúøē˜ëúîēÎë—“ē`%åyĸúÁē>ëú´ē…ëú§ē˜ë‹Kē`äúyē>ëúlē…ëú_ē˜ëmāšXŒm%åƒ~ŒúqŒ÷ëúgŒ"ė‘ŽĨö\ á¯öāĸëstr )œ'âîŧ& *œ'áÅö Ŗëstr œ'âîŧ& œ'ŋ;Ĩ.3°Mœ#ŖW˛˙ ”W˛‘ąˇÎ.4œ'‘ą .4%‘†2.4œ'@ėL˛Ū‡.5@[Ą˜$.<įû‘¸ĄR].=Ūį‘HŗÅŽ.`\˛Tė—ˆ Č8.:æŖú“ vėSË.+úS–ė×„e ’  í#.=X¤ú¯ ĩė“¸í#/úĸ¸ĩė‚y¸í#)˜úˆ¸ĩė‹Z¸íP)Đúi¸ríhŅĢŗkē.>œ'/FĢĄ3.@\F‘Dŗe.Fü$pî—ˇĸ .@ęĨúÂĸœî ŦŅĸ‰T *ö¤•#T,úTœî‹] ‰Öē& +âĨúģÅîúģōîúøēīúîēī’“ē&%åļĨúÁēÅîú´ēōîú§ēī„&‚Kē&äúyēÅîúlēōîú_ēī„&3āšXŒ9%åƒ~ŒúqŒ8īúgŒKī‘’ŋ < .AĻúØ ^īúÎ ĒīMQ.—Üę\¸.BƒĻúüęvđúōęŽđ¸…|cŒcP_Đƒú„PvđúwP¤đr:$—‹črđ.BA§úĢčČđúĄčÛđđ…|cŒõbrƒú(cČđúcņđ‰‹IrŲ 4§úšIČđ‚qIrÕú€IČđ‚WIr-úfIČđˆ:$—=øˆ8.B§§ú]øņúSø-ņ8…|cŒcPŽPƒú„PņúwPCņž:$—3ˆžh.V ¨úBˆcņŠqIž#å§ú€Icņ‹L§¸#úL¯ņúLō—ā ĄĐ.Tr¨ú9ōúö QōĐ…|cŒcPĄđƒú„P9ōúwPgōÂ:$™8#Šĸit.GhŖ‡ō’H .HʨúW Ãō‚‡/Xú‡Ãō—. (.Gķ¨ú= Ûō1Ō$$d;.JúWdķōúJdķGö—Ž N(.QcŠú§ 2ķú Eķ(Ŧļ _Ū2’3ˆs .CŽŠƒBˆ‚Ls #ƒLƒLš{wBüR‘D—$ė€@.SĒúDėrķú:ėŠķ@…|cŒcPƒXƒú„PrķúwP ķ–:$—‹č–x.SŌĒúĢčÄķúĄč×ķx…|cŒõb–˜ƒú(cÄķúcí퉋I–Ų ÅĒúšIÄķ‚qI–Õú€IÄķ‚WI–-úfIÄķŦ:$3ˆV.VúBˆô‰qIV# Ģú€Iô‚L\#úL$ôúLQôškwBüR‘Dāĸ˛>.>úëĸdô„˛>…úĸwôŠT˛Ā ¨Ģú#TŠôúTdôŊ‹] ‚SĶ #úSšôß„e ™Íę'Žĸit.XhŖØô’H Í.Y)ŦúW .õ‚‡Í/Xú‡.õ—. đØ.XRŦú= FõųŌ$—ŋ đ.[…ŦúØ ^õúÎ |õ'Q.—3ˆ'.[üŦúBˆÁõŠqI'0#ÃŦú€IÁõ‹L*H#úLßõúLũõšœwBüRw’ä÷A.\f­úøöúú÷Cö„A…|cŒcPDhƒú„PöúwPgöW:$—Ž_]€.\ž­úŽ_‹öú¤_­ö ŗ­ƒŽ_ú¤_ŅöĩcPqcP—ēéq¸.\ ŽúÚéįöƒĐ鍸…|cŒcPwĐƒú„PįöúwP˙öŠ:$‘’.`PŽúį÷Æ&b’ķįÆ.aŠŽú&čC÷účTė‚$dÆ úWdC÷úJdTėĶö—3ˆŪč.` ¯úBˆk÷‰qIŪ#įŽú€Ik÷‹Lä#úL€÷úLĢ÷š"wBüRw’ë.=d¯ú-É÷&×ë/Zú5×É÷úS,’Mįú.hįú^įö÷kúUúkö÷‚åjúúūj øúôjö÷’&.=°ú- ø&×&/Zú5× ø5S,’Mį5!.hh°ú^įMøk5!UúkMø‚åj5!úūjcøúôjMø’3ˆs.`ß°úBˆwø‰qIs#ϰú€Iwø‚Ly#úLŒøúLšøšˆwBüR‘@’ŌS”.cąøáS‘ ‚WI”øfI‘ —3ˆŗ.c‘ąúBˆĖøŠqIŗ0#Xąú€IĖø‚Lŧ#úLßøúL ųšËwBüR‘@’ _Ü.e°ąá^ ’3ˆã.c#˛øBˆW‰qIã#ęąø€IW‚Lé#úLųúLLųšøwBüR‘@íīįœ§ãŗBc Ų´^ Tö\ Š6Ē1ų!*œ´ú,*_ųH’´…;*˜ųPŦJ*…U*âųŠThģÚ˛•#T@úT ú‹] ŠÖē(€Á‹ŗúģ)úúģcúúøēŒúƒîēŒ“ē(€%åúÁē)úú´ēcúú§ēŒú€‹Kē(€äúyē)úúlēcúú_ēŒú€5āšŠ3ˆF˜ÁûŗƒBˆ‰qIF#Âŗƒ€I‹LL¸#úLŸúúL´úšČwBüRuf‰3ˆüÁr´ƒBˆ‰qIü#2´ƒ€I‚L˙#úLėúúLûšwBüPvtüRufFŪ‹žŪ‹īŪ‹ö\ ›Ûö]œC¸^ž$%¤#|:‘¤$Ė,‘Đ.¸ži%9ûđ[ŋŗ[[+ŗĒM_\F‘\žarg0‘cû‰ŌS5nĩúáSŒû‚WI5úfIŒû™R*ŒĩžjB%Žû‰$d LĀĩúWdÁûúJdéûąö‰$dåLôĩúWd#üúJd;üöö‰$dũM(ļúWd˜üúJd°üö‰$dM\ļúWdõüúJd ũ&öŠ3ˆ‡ÔļúBˆ:ũŠqI‡(#›ļú€I:ũ‹LH#úL\ũúL~ũšāwBüRuc‰3ˆ?LˇøBˆudŸ‰qI?#ˇø€IudŸ‚LE#úLœũúLÉũšTwBüRucš5~zpˇüPudĀĀūs2$v"K+ŗĶ+ŗņ+ŗŋŗ-ŋŗK+ŗiŋŗ‡ŋŗĨ+ŗÃŋŗá+ŗ˙;+ŗYwŋŗ•+ŗš45­üPw´a˛]ö\ §ë ÄX œ‹¸øö ‘ø ‘‡%´ü‘‘ü‘‘›˙ö~œŧ^ž%¤#|:‘¤$5‘‘`ŧži%Üũ€[ŋŗ[[+ŗĒM_\F‘\žarg0‘ūŠŌS7˜\šúáS1ū‹WI7˜úfI1ū™V&zšžjB%Sū‰$dĀLŽšúWdfūúJdŽūŅö‰$dLâšúWdČūúJdāūö‰$dMēúWd=˙úJdU˙.ö‰$d5MJēúWdš˙úJd˛˙FöŠ3ˆ‡°ÂēúBˆß˙ŠqI‡Đ#‰ēú€Iß˙‹Lđ#úLúL#šwBüRuc‰3ˆ`:ģøBˆudŸ‰qI`#ģø€IudŸ‚Lf#úLAúLnšuwBüRuc7Æ O+ŗÕ+ŗõ+ŗŋŗ5ŋŗU+ŗuŋŗ•ŋŗĩ+ŗÕŋŗõ+ŗ5U+ŗu•ŋŗĩ+ŗšU5­üPuT´a˛~ö\ §Å ‘F0œ`ŧøĐ ‘øŨ ‘‡5‹¸ü‘‘ü‘‘›#÷œœ-Ŋ%Ā \QŌ¤­ÍyI‘‰ŸR{ĀŧúŽRú¸R”‰cPH{đŧú„PŧƒwP\:$Hûéd}֐y9e ‰\e ”}֐œö\ ßšÁ<ŊŊā ”}ņâî*íųJîãWķ%Kî\ôųJâî–Ôõ%÷-ŊđNÚœŊ ŋø<Ŋ‘ŋ…HŊä…UŊ…bŊ‰ņ)đîŊú,ņ-Š7ņB8ķžúPņMúFņ’Pž…qŊȉcP…õ_žø„PD ŸƒwP™:$‰cPœõžú„PüƒwP­:$Z™e …ûéē=Â}֐Ō}Ö‰ņföâžú,ņtc #`ŧBr] Úö\ ÷üá@âœ(ŋëĀø ‘Š‚ņLhēāĀú‘ņ4‹cņLhĶúrņ4‹-ŊLhŌú<Ŋ4h…HŊ¨…UŊÆ…bŊƉņdđĘŋú,ņäŠ7ņ‚ˆķôŋúPņúFņJ žĀ…qŊs‰cPÍõ;Āø„PD ŸƒwPá:$‰cPäõkĀú„P§ƒwPõ:$›™e Íûé= }֐}Ö‰ņ¤öžĀú,ņŋTtc d`ŧ‚r] "ö\ ÷œ0ęœÁāÂø%‘ø/‘Šģņ<¸ĀÕÂøÔņō/úĘņŌ‹œņ<ØÔúĢņŌ‹-Ŋ<ØŅú<ŊŌØ…HŊF…UŊd…bŊd‰ņWđŋÁú,ņŠ7ņzķéÁúPņ¯úFņõ “Â…qŊ+‰cPÅõ0Âø„PD ŸƒwPŲ:$‰cPÜõ`Âú„P_ƒwPí:$“™e Åûéú= }֐ }Ö‰ņŸöŗÂú,ņwDtc T`ŧzr]  ö\ ß#ĶīÂÃā ”&4āļÄ%÷āÂŅę œ Ã4Åøī‘’ž5 bHÐ: 0—= 8b)Åú/—ú%Ø‹ģņ= 8ĀøÔņō\ÃúĘņö‹œņ= XÔúĢņö‹-Ŋ= XŅú<ŊöX…HŊ…UŊ8…bŊ8ŠņX €đÄú,ņcŠ7ņz ˜ķ<ÄúPņƒúFņ™°æÄ…qŊΉcPÅ õƒÄø„PD ŸƒwPŲ :$‰cPÜ õŗÄú„PƒwPí :$“ ™e Å ûéú =!}֐!}Ö‰ņœ öÅú,ņH tc X `ŧz r]  !ö\ ÷āÂr !œPÅnŸ.!ÃŽ;!á\ ßž}ÅĸÅā ”ĸÅāļÄ%âîÄ<lHŽH÷nÅi–@!0œÃÅĘø}Å‘ČâÉ…“Å;‰žR!<ƐW!0Š`!č@ÜĮú/‰ú%˛‹ģņ`!čĀúÔņĐúĘņ‹œņ`!ÔúĢņ‹-Ŋ`!Ņú<Ŋ…HŊ,…UŊJ…bŊJ‰ņ‚!đČÆú,ņuŠ7ņĒ"8ķōÆúPņˆúFņžP™Į…qŊÔ‰cPõ"õ6Įú„P ƒwP #:$‰cP #õfĮú„P; ƒwP#:$Æ"™e õ"ûé*#=2#}֐h#}Ö‰ņĪ"öšĮú,ņS n!tc ‚!`ŧĒ"r] ‹Å›!p>úŪg úÔĒ pŦíŠįņ›!˜ŗÉúōí úöņ ‹É÷›!˜†úØ÷í ĀøČ…ä÷> ‰cPU"<•Čú„PŒ ƒwPi":$‰cPl"<ÅČú„P´ ƒwP}":$Ē!Úb U"û鐌"=”"}֐B#}֐Ŋ!đb ‹ōÃ!č´ú"ōĖ ‹ÅöÃ!čˆúÔöô …āö ‰cPņ!HzÉú„P; ƒwP":$‰cP"HĒÉú„Pc ƒwP":$Ķ!Äb ņ!ûé&"=."}֐U#}֐J#ö\ ]#ö\ p#ö\ ÷nÅИp#œĘ;Ęø}Å‘~#§ÅŽ‹#á\ ß ĶJĘUĘā ”&4÷;Ę™˛#ÄœqĘ×ÍøJĘ‘’žĻ#\™ĘĢ#0—üŽ#(\Ėú { ‹‚ņŽ#Pēú‘ņ¤ ‹cņŽ#PĶúrņ¤ ‹-ŊŽ#PŌú<Ŋ¤ P…HŊÖ …UŊô …bŊô ‰ņÉ#đLËú,ņ Š7ņ$xķvËúPņ0 úFņT ŅË…qŊˆ 3$™e õ$ûé%cP%cP%=&%}֐L%}Ö‰ņA$öņËú,ņĘ š#tc É#`ŧ$r] ’žÔ#]3ːŲ#0—Ü#°]ÂÍú/Ũ ú%) ‹ģņÜ#°ĀúÔņR úĘņŠ ‹œņÜ#ØÔúĢņŠ ‹-ŊÜ#ØŅú<ŊŠ Ø…HŊŧ …UŊÚ …bŊÚ Šņ÷#đúĖú,ņŠ7ņZ$ ķ$ÍúPņ0úFņT8Í…qŊ•s$™e Ĩ$ûéļ$cPÃ$cPÎ$=Ö$}֐9%}Ö‰ņ}$öŸÍú,ņãį#tc ÷#`ŧZ$r] A%ö\ T%ö\ ũ`%,œīÍųĶ˙ ”ĸÅ‘XĐĶŸÄ/lH‰žl%/7ΐq%0Šüz%x4ŗĪú ‹‚ņz% ēú‘ņŗ‹cņz% Ķúrņŗ‹-Ŋz% Ōú<Ŋŗ …HŊķ…UŊ…bŊ‰ņ™%đëÎú,ņ:Š7ņZ&ČķĪúPņMúFņāpĪ…qŊŗs&™e ¨'û鐚'cPÆ'cPŅ'=Ú'}֐o(}Ö‰ņ&öĪú,ņõ…%tc ™%`ŧZ&r] ŠĄ%5CŅú/ú%H‹ģņĄ%ĀúÔņfúĘņŽ‹œņĄ%0ÔúĢņŽ‹-ŊĄ%0Ņú<ŊŽ0…HŊŌ…UŊđ…bŊđ‰ņÃ%đ{Đú,ņŠ7ņš&`ķĨĐúPņ,úFņBxŅ…qŊvŗ&™e (ûé(cP(cP'(=0(}֐Z(}Ö‰ņĀ&ö Ņú,ņĩ¯%tc Ã%`ŧš&r] Š7ōØ%˜1ŌúFōȍ˜ŦRōŠįņÛ%¸ŦeŌúō#úöņW‹É÷Û%¸†úØ÷#čYŌ…ä÷Ÿ‰cPH'<öŅú„PáƒwP\':$‰cP_'<&Ōú„P ƒwPp':$ä%Úb H'ûé'=ˆ'}֐„(}֐÷%đb ‹ō÷%­ú"ō!&Åö‹Å&(2úŪYúÔ‚(ŦíŠįņ&Hŗ§ĶúōÅúöņî‹É÷&H†úØ÷ōp…ä÷&‰cPč&<BĶú„PtƒwPü&:$‰cP˙&<rĶú„PœƒwP':$&Úb č&ûé'=('}֐E(}Ö‹ō/&´ú"ō´B&ÅöM(ö\ b(ö\ w(ö\ Œ(ö\ ßÔ Ôā ”ĸÅŪ3’æ8÷ųĶ!$(%œ<ÔYÔøÔ‘øÔ‘ą(×ÍߝhԍÔā ”ĸÅŪõ(6Ū3’(æ8÷YÔUĀ(%œŠÔĪÔøhÔ‘ørÔ‘øÔ‘á(×ͧÔI8Fœ‰ÕúčIĖøôI‘ŒŸ¨¨gúŗ¨Œ3ˆ¨]úBˆ‰qI#NÕú€I‹L$Ā#úL;úLuš7wBüR‘oßŲÎ˜ÕŖÕā ”ü(ßD͞ÕĘÕā ”Ijë__x‘ĘÕ`Dß5dŪÕöÕā ”ujë__x>öÕŒ7ßâb Ö!Öā ”?xé__nˇđáTōrÖCI–B!iŐč†0D–Bč:‡0D–BčD0EŐâæŅ>0GŐßKĪŠÖ°ÖIStrā ”ü(ŪČĶˆ°Öâīi‰—cŒ7ß ĪÄÖÜÖā ”ü(Ūp\ƒœ'áO÷˛×Ū$ęīCŪd•ę%âîQëmĪîė†Žî84îvl84îæ÷$õX×%õ ×îĐ9÷$îŽa€5îH/!oKîÕ+€5îž,oKâ@%ßđÎÁ×ä×ā ”ü(āļÄ%âīi~úÎũāÔđ(œü×û˙ ”W‘ØđŸÄMôW“ŸšŧNÂTĻîŖÃPpVĒ­Q%‘čzĒŋ#Xፑ }Ēŧ%^\F‘ėzĒ;la\F‘đzĒQfŋΑ°}îrķ‰žü(MÄØ)0‰= )OŲúL“‚˜a )˙ú§aš‰ŗ] )T*ŲúÂ]ĪúĖ]ã‰LZz)`‚Ųú[Z‚ŌSz)wúáS‚WIz)úfI‰fZ})`ÚŲúuZ-‚ŌS})túáS-‚WI})úfI-HÚúBˆ@ŠqI6* #Úú€I@‹LB*8#úLúLLšá5wBüR‘œ}PˇÚúBˆj‰qIM* #|Úú€Ij‹LV*h#úLĻúLšŅ5wBüR‘Ôz€&ÛúBˆ!‰qIa* #ëÚú€I!‹Lj*˜#úL]úLēšÁ5wBüR‘Ôz°•ÛúBˆØ‰qIu* #ZÛú€IØ‹L~*Č#úLúLqšą5wBüR‘ÔzāÜúBˆ‰qI‰* #ÉÛú€I‹L’*ø#úLúL^šĄ5wBüR‘Ôz sÜúBˆ|‰qI* #8Üú€I|‹LĻ*( #úL¸úLš‘5wBüR‘Ôz@ âÜúBˆ3ŠqIā+` #§Üú€I3‹Lė+x #úLÉúLš5wBüR‘Ôz QŨúBˆ0‰qI÷+ #Ũú€I0‹L,¨ #úL~úLĮšq5wBüR‘ÔzĀ ĀŨúBˆå‰qI , #…Ũú€Iå‹L,Ø #úL3úL|ša5wBüR‘Ôzđ /ŪúBˆš‰qI, #ôŨú€Iš‹L(,!#úLčúL1šQ5wBüR‘Ôz !žŪúBˆO‰qI3, #cŪú€IO‹L<,8!#úLúL暁6wBüR‘ÔzP! ßúBˆ ‰qIG, #ŌŪú€I ‹LP,h!#úL` úLļ šq6wBüR‘Ôz€!|ßúBˆÔ ‰qI[, #Aßú€IÔ ‹Ld,˜!#úL0!úL†!ša6wBüR‘Ôz°!ëßúBˆ¤!‰qIo, #°ßú€I¤!‹Lx,Č!#úL"úLV"šQ6wBüR‘Ôzā!ZāúBˆt"‰qIƒ, #āú€It"‹LŒ,ø!#úLĐ"úL&#šA6wBüR‘Ôz"ÉāúBˆD#‰qI—, #Žāú€ID#‹L ,("#úL #úLö#š16wBüR‘Ôz@"8áúBˆ$‰qIĢ, #ũāú€I$‹L´,X"#úLp$úLÆ$š!6wBüR‘Ôzp"§áúBˆä$‰qIŋ, #láú€Iä$‹LČ,ˆ"#úL@%úL–%š6wBüR‘ÔzŠ3ˆĶ, "e!âúBˆ´%‰qIĶ, #æáú€I´%‹LÜ,¸"#úL)&úL&šA5wBüR‘ÔzЉÕį,Đ"f9ãú˜Õ&ŠŖÕį,đ"ztâúŧÕķ&ú˛ÕI'%-L#Š)(đ,#yËâú8(&‹ ļđ,#úļ&Œėĩđ,#}úûĩ&‚Ōˇę9yúáˇŸ'‚ūļę9Šú ˇŸ'Šļđ9  ƒ™ļú¯ļ´'úŖļÖ'Áđ9 ŠÆ(%-0#gŖæ0#ŦĶ(ÂõĶ%-p#m‹ĪÕ7-ˆ#múčÕé'úŪÕ(ŠžĶ7-Ā#@šäúãĶu(ú×Ķž(úÍĶô(—ûÕ7-đ#ˆtäúÖž(ú Öô(ŒZĶ7-$šƒiĶúsĶž($Œ1Ķ5($ǃ<ĶúHĶW)ŒĶ5($MļƒĶú+Ķ“)úĶW),5r] :ë$ÉŠ>-‡úâŠu(úØŠô(Šjd9-@$@ŧäƒydƒydŠöĒˆ-X$DîåƒCĢú6Ģŗ)ƒ)ĢƒĢ‹ĨĒˆ-X$0úÚĒŗ)ƒÎĒƒÂĒX$…čĒį)Œ!Öˆ-X$0~úVÖŗ)ƒJÖú>Ö[*X$…dÖŠ*’Ē˜-0Kåú7ĒÉ*ú+Ē˙*‘Ļ-’ ; 0PËåúā¨5+úÔ¨S+„ ; ;ÔI ;e ;'e RD-e ‚/ŠRD@ø>Š‘Ėz¨XD ƒ.¨úD¨q+ú8¨“+„XDę§`D˛ƒõ§ú ¨Ļ+ú¨Č+ŋ§`DMšƒΧúä§Ļ+úاČ+iDá\ ‰rÖÕ-Pg\įú”ÖÛ+úŠÖe,„Õ-P…ŖÖī,‰8ā- Œ įúC<-ę-´e ŠŸ(đ-x$Œ0įú¸(\-ƒŽ(‰IĒ.‰PįúXĒ|-.+аI%.$g?éúŋI¤-Šī¨%.¨$¨Œčƒ$ŠúŠĶ-ú Šū-Œ%.¨$—úā¨Ķ-úÔ¨ū-¨$ŒÔI%.¨$~úôIĶ-účI).Ÿ¨G.%gúŗ¨T.3ˆG.%]úBˆT.‰qIG.#Lčú€IT.‚LL. #úLŒ.úLŽ.š^.wBüR‘Ôz‚/Šl.Šú>ŠÁ.¨l. ƒ.¨úD¨>/ú8¨`/„l.ę§p. ˛ƒõ§ú ¨s/ú¨•/ŋ§p. MšƒΧúä§s/úا•/y.á\ ‰ĩÖ|.;hÃéúÎÖ¨/úÄÖŊ/‰8|.„’éúC¨/Š.´e ŠŸ(.Ā$„¸éú¸(:0ƒŽ(ˇ.+ŠĩÖˇ.Ø$iGęúÎÖŽ0úÄÖÃ0‰8ˇ. „ęúCŽ0Â.´e ŠŸ(Č.đ$„<ęú¸(@1ƒŽ(ã.+Šųū.%k—ęú(ų´1‹vSū. %dúS´1ú…S[2 /ūŠ3ˆ /8%këúBˆķ2ŠqI /X%#Öęú€Iķ2‹L/p%#úL3úL 4š6wBüR‘Ôz‰  /m1ë4/Oî‰ 4/ pQë@/´^ ŠÜÖ@/ˆ%rGúôÖ*4úįÖ?4ˆ%¨×‘¨}…×U4¨×‘Č}¨*בÔ~…7×^5ā%æī…Jד5‰3ˆC?ėúBˆĮ5‰qIC #ėú€IĮ5‚L%C#úLÜ5úL 6š7CwBüR‘ü|‰3ˆ7C¸ėúBˆ6‰qI7C #~ėú€I6‚L@C#úL46úLc6šRCwBüR‘ü|‰3ˆRC1íúBˆv6‰qIRC #÷ėú€Iv6‚L[C#úL‹6úLē6šmCwBüR‘ü|‰3ˆmCĒíúBˆÍ6‰qImC #píú€IÍ6‚LvC#úLã6úL7šˆCwBüR‘ü|‰3ˆˆC#îúBˆ%7‰qIˆC #éíú€I%7‚L‘C#úL;7úLj7šŖCwBüR‘ü|‰3ˆŖCœîúBˆ}7‰qIŖC #bîú€I}7‚LŦC#úL“7úLÂ7šžCwBüR‘ü|‰3ˆžCīúBˆÕ7‰qIžC #Ûîú€IÕ7‚LĮC#úLë7úL8šŲCwBüR‘ü|‰3ˆŲCt{īúBˆ-8‰qIŲC #Tīú€I-8‚LâCk#úLC8úLX8•/Ŋ_ Ē/Ée €4iĨ‘™4Ž4—­Â4—­Ō4*æ4—­ú4—­5—­5cˇ&Jû…k×k8…xן8……×Ū8…’×N9¨^×”‰ ¨2cđ„¨2¨ ‘ŧ}¨$ ‘œ}ŧ2 ˇ‰3ˆĄ64ŨđúBˆ‘9‰qIĄ6 #ĸđú€I‘9‚LĒ6#úL§9úLŧ9šŧ6wBüR‘Čz‰3ˆŧ64WņúBˆĪ9‰qIŧ6 #ņú€IĪ9‚LÅ6#úLâ9úL÷9š×6wBüR‘Čz‰3ˆ×64ŅņúBˆ :‰qI×6 #–ņú€I :‚Lā6#úL :úL5:šō6wBüR‘Čz‰3ˆō64KōúBˆH:‰qIō6 #ōú€IH:‚Lû6#úL^:úLs:š 7wBüR‘Čz‰3ˆ 74ÅōúBˆ†:‰qI 7 #Šōú€I†:‚L7#úLœ:úLą:š(7wBüR‘Čz‰3ˆ(74?ķúBˆÄ:‰qI(7 #ķú€IÄ:‚L17#úLÚ:úLī:šC7wBüR‘Čz‰3ˆC74ĨķúBˆ;‰qIC7 #~ķú€I;‚LL7 #úL;úL-;‰3ˆ}7/ôúBˆ@;‰qI}7 #äķú€I@;‚L†7#úLV;úLk;š˜7wBüR‘Čz‰3ˆ˜7/™ôúBˆ~;‰qI˜7 #^ôú€I~;‚LĄ7#úL”;úLŠ;šŗ7wBüR‘Čz‰3ˆŗ7/õúBˆŧ;‰qIŗ7 #Øôú€Iŧ;‚Lŧ7#úLŌ;úLį;šÎ7wBüR‘Čz‰3ˆÎ7/õúBˆú;‰qIÎ7 #Rõú€Iú;‚L×7#úL<úL%<šé7wBüR‘Čz‰3ˆé7/öúBˆ8<‰qIé7 #Ėõú€I8<‚Lō7#úLN<úLc<š8wBüR‘Čz‰3ˆ8/möúBˆv<‰qI8 #Föú€Iv<‚L 8 #úLŒ<úLĄ<‰3ˆ18$/įöúBˆ´<‰qI18 #Ŧöú€I´<‚L:8#úLĮ<úLÜ<šP8wBüR‘Čz‰3ˆA#a÷úBˆī<‰qIA #&÷ú€Iī<‚L A#úL=úL=šAwBüR‘Čz‰3ˆA#Û÷úBˆ-=‰qIA # ÷ú€I-=‚L'A#úL@=úLU=š9AwBüR‘Čz‰3ˆ9A#UøúBˆh=‰qI9A #øú€Ih=‚LBA#úL~=úL“=šTAwBüR‘Čz‰3ˆTA#ĪøúBˆĻ=‰qITA #”øú€IĻ=‚L]A#úLŧ=úLŅ=šoAwBüR‘Čz‰3ˆoA#IųúBˆä=‰qIoA #ųú€Iä=‚LxA#úLú=úL>šŠAwBüR‘Čz‰3ˆŠA#ÃųúBˆ">‰qIŠA #ˆųú€I">‚L“A#úL8>úLM>šĨAwBüR‘Čz‰3ˆĨA9#)úúBˆ`>‰qIĨA #úú€I`>‚LŽA0#úLv>úL‹>Ņ/úe æ/f -04f 80_f c0iĨ‘|0‘0—­Ĩ0—­ĩ0*É0—­Ũ0—­ã0cˇ2iĨ‘2.2—­B2—­R2*f2—­z2—­€2cˇ2r^ Ô2Œ^ É8iĨ‘â8÷8—­ 9—­9*/9—­C9—­I9cˇH&…˙…ĸמ>‰3ˆ;@ØûúBˆĮ>‰qI; #ûú€IĮ>‚L(;#úLŨ>úLō>š:;wBüR‘Čz‰3ˆ:;@RüúBˆ?‰qI:; #üú€I?‚LC;#úL?úL-?šU;wBüR‘Čz‰3ˆU;@ĖüúBˆ@?‰qIU; #‘üú€I@?‚L^;#úLV?úLk?šp;wBüR‘Čz‰3ˆp;@FũúBˆ~?‰qIp; # ũú€I~?‚Ly;#úL”?úLŠ?š‹;wBüR‘Čz‰3ˆ‹;@ĀũúBˆŧ?‰qI‹; #…ũú€Iŧ?‚L”;#úLŌ?úLį?šĻ;wBüR‘Čz‰3ˆĻ;@:ūúBˆú?‰qIĻ; #˙ũú€Iú?‚L¯;#úL@úL%@šÁ;wBüR‘Čz‰3ˆÁ;@´ūúBˆ8@‰qIÁ; #yūú€I8@‚LĘ;#úLN@úLc@šÜ;wBüR‘Čz‰3ˆÜ;@˙úBˆv@‰qIÜ; #ķūú€Iv@‚Lå;#úLŒ@úLĄ@1Ŋ_ 1Ée Č3iĨ‘á3ö3—­ 4—­4*.4—­B4—­V4—­\4cˇŠ3ˆ8h&D˙˙úBˆ´@ŠL8€&#â˙úLĘ@úLß@š#8wBüR‘Ėz‚qIĻ: #ú€I´@‰3ˆ:DyúBˆō@‰qI: #>ú€Iō@‚L :#úLAúLAš:wBüR‘Čz‰3ˆ:DķúBˆ0A‰qI: #¸ú€I0A‚L(:#úLCAúLXAš::wBüR‘Čz‰3ˆ::DmúBˆkA‰qI:: #2ú€IkA‚LC:#úLAúL–AšU:wBüR‘Čz‰3ˆU:DįúBˆŠA‰qIU: #Ŧú€IŠA‚L^:#úLŋAúLÔAšp:wBüR‘Čz‰3ˆp:DaúBˆįA‰qIp: #&ú€IįA‚Ly:#úLũAúLBš‹:wBüR‘Čz‰3ˆ‹:DÛúBˆ%B‰qI‹: # ú€I%B‚L”:#úL;BúLPBšĻ:wBüR‘Čzu/yf í0¯d 2Ûūh9iĨ‘9–9—­Ē9—­ē9*Î9—­â9—­č9cˇ˜&Ÿ‹s%cB‰3ˆŪAsÜúBˆB‰qIŪA #Ąú€IB‚LįA#úL—BúLŦBšųAwBüR‘Đz‰3ˆųAsVúBˆŋB‰qIųA #ú€IŋB‚LB#úLÕBúLęBšBwBüR‘Đz‰3ˆBsĐúBˆũB‰qIB #•ú€IũB‚LB#úLCúL(Cš/BwBüR‘Đz‰3ˆ/BNsJúBˆ;C‰qI/B #ú€I;C‚L8BE#úLQCúLfCšNBwBüR‘Đz‰3ˆ}BsÄúBˆyC‰qI}B #‰ú€IyC‚L†B#úLCúL¤Cš˜BwBüR‘Đz‰3ˆ˜Bs>úBˆˇC‰qI˜B #ú€IˇC‚LĄB#úLĘCúLßCšŗBwBüR‘Đz‰3ˆŗBs¸úBˆōC‰qIŗB #}ú€IōC‚LŧB#úLDúLDšÎBwBüR‘Đz‰3ˆÎBNs2úBˆ0D‰qIÎB #÷ú€I0D‚L×BE#úLCDúLXDšíBwBüR‘Đz51Ŋ_ L1da 3iĨ‘(3=3—­Q3—­a3*u3—­‰3—­3—­Ŗ3cˇŠŲ]T1¸&tÃúč]kDƒō]Šs]W1Đ&uíú‚]—DúŒ]ÃDО×c1đ&fĸ úÁרD'Ķ…××E‰"ˇc1~fú1ˇØD‚uc1$úuØDúuRE‰pˇp1~¨úˇØD‚up16úuŠEƒu‰Vˇ…1~ČúeˇŖE1 ` ‚Ōˇž1}úáˇģE‚ūļž1Šú ˇģEŠļž1 ƒ™ļú¯ļęEúŖļ F„ž1Uļĸ1 ˛ƒ`ļúxļFúlļAF*ļĸ1 Mšƒ9ļúOļFúCļAFĢ1á\ ‰& i1vĖ ú? TFú5 €FŠ3ˆŽ1 'eF úBˆŦF‰qIŽ1 # ú€IŦF‹Lˇ18'#úLŪFúL Gšņ5wBüR‘ÔzŠ3ˆÂ1P'wĀ úBˆ+G‰qIÂ1 #… ú€I+G‹LË1h'#úLOGúLqGšį2wBüR‘ÔzО×W7€'f/ úÁ׏G™W7&h …×׹G‰"ˇW7~= ú1ˇG‚uW7$úuGúuīGŠVˇn7˜'~] úeˇHv7 ` ‚ŌˇU8}úáˇ/H‚ūļU8Šú ˇ/HŠļ[8 ƒ™ļú¯ļDHúŖļfH„[8Uļ_8 ˛ƒ`ļƒxļúlļyH*ļ_8 Mšƒ9ļƒOļúCļyHh8á\ ‰3ˆk8e¨ úBˆŒH‰qIk8 #n ú€IŒH‚Lt8#úLĸHúLŅHš†8wBüR‘¨{‰3ˆ†8$w! úBˆäH‰qI†8 #į ú€IäH‚L8#úLúHúL)IšĄ8wBüR‘ëz™÷;” úBˆ#úLĪMúLūMš>wBüR‘œ}™>;¤úBˆN‰qI> #jú€IN‚L>2#úL&NúLUNš5>wBüR‘œ}‰3ˆĢ?\úBˆhN‰qIĢ? #ãú€IhN‚L´?#úL{NúLĒNšÆ?wBüR‘”}‰3ˆÆ?\–úBˆŊN‰qIÆ? #\ú€IŊN‚LĪ?#úLĶNúLOšá?wBüR‘”}‰3ˆá?\úBˆO‰qIá? #Õú€IO‚Lę?#úL+OúLZOšü?wBüR‘”}‰3ˆü?\ˆúBˆmO‰qIü? #Nú€ImO‚L@#úLƒOúL˛Oš@wBüR‘”}‰3ˆ@\úBˆÅO‰qI@ #Įú€IÅO‚L @#úLÛOúL Pš2@wBüR‘”}‰3ˆ2@\zúBˆP‰qI2@ #@ú€IP‚L;@#úL3PúLbPšM@wBüR‘”}‰3ˆM@\ķúBˆuP‰qIM@ #šú€IuP‚LV@‡#úL‹PúLēPšl@wBüR‘”}‰3ˆŨ@&kmúBˆÍP‰qIŨ@ #2ú€IÍP‚Læ@#úLãPúLøPšü@wBüR‘ÔzG)™d e)”f ‘Ÿ)´)—­Ö)—­ō)—­ *—­&*—­6*—­Į*iĨÜ*iĨņ*iĨ‘+++—­?+—­S+—­h+—­|+—­’+*Ļ+—­ļ+*Ę+—­ā+*Ā‘ü.‘û:r>iĨ‘Ž>Ŗ>—­š>—­Ë>*á>—­÷>—­ũ>cˇ?iĨ‘:?O?—­e?—­w?*?—­Ŗ?—­Š?cˇĒ8ö\ ßyjGCI*‘ā ”ujŪ†—*‘Ū:‡—*‘ë__a˜Gô€7á…ōCI*‘!iŐč†0D*‘č:‡0D*‘čD0EŐâæŅ>0GŐ›d/€DČœ'œĖsū' Q‰$dŽD ˙ųøWdĻ ŸúJdæQ™Dö‰$d¤D-úWdÁRúJd)S˛Dö‰$dŊDaúWdØSúJd0TËDöŠõb E°'íú(cŸTúcĀT‰‹I EŲ âúšIŸT‚qI EÕú€IŸT‚WI E-úfIŸTE:$‰ŌÕ E DúáÕĶT‚%x Eú4xĶTx E}úxĶTŠøHEČ'1 ú ōT‹ûHEā'úƒ7ú**UúōTúbUŠyHEø'™ßƒ’úˆbUŒÉŠHEø'€ƒâŠúØŠbU(‹5KE(úd™UúWŅUúM V(‹ã˙KE(īú™UúŅUúû˙ V(…&@VŠZĶKE0(čúiĶ VúsĶ@V0(Œ1ĶKE0(Ēú<Ķ VúHĶ@VŒĶKE0(MļúĶ Vú+ĶlVúĶ@ViEr] ‹^˙~EX( ƒĢ˙úž˙˜Vú‘˙ĪVú„˙W‹ ˙~EX(0úB˙˜Vú6˙ĪVú*˙WX(…P˙?WŒL~EX(0~ú˜VúuĪVúikWX(…™W’Ōū~E0KÉúûūÂWúīūíW‘˜E’ÚF 0P úā¨#XúÔ¨AX„ÚF åFÔIÚFe íF'e öF-e ŠøŠEp(Ô#ú aX‹ûŠE˜(úƒ7ú*™XúaXúŅXĀ(Ų"‹5ŠEĀ(údũXúW5YúMmYĀ(‹ã˙ŠEĀ(īúũXú5Yúû˙mYĀ(…&™YŠZĶ3Fø(’!úiĶmYúsĶ™Yø(Œ1Ķ3Fø(Ēú<ĶmYúHĶ™YŒĶ3Fø(MļúĶmYú+ĶÅYúĶ™YQFr] ‹^˙fF ) ƒĢ˙úž˙ņYú‘˙(Zú„˙`Z‹ ˙fF )0úB˙ņYú6˙(Zú*˙`Z )…P˙˜ZŒLfF )0~úņYúu(ZúiÄZ )…ũZ’ŌūfF0Ks"úûū&[úīū\[‘€F’G 0Pą"ú⍒[úÔ¨°[„G (GÔIGe 0G'e CG-e Šy0F@)™ #ƒ’úˆŅXŒÉŠ0F@)€ƒâŠúØŠŅX‚/ŠžF™ú>ŠĐ[¨ŖF ƒ.¨úD¨ä[ú8¨\„ŖFę§§F˛ƒõ§ú ¨\ú¨7\ŋ§§FMšƒΧúä§\úا7\°Fá\ ŠēĀEX)Á&úĪJ\‹ûĀEx)úƒ7ú*’\úJ\úÚ\ŠyĀE˜)™o$ƒ’úˆÚ\ŒÉŠĀE˜)€ƒâŠúØŠÚ\°)‹5ÃE°)úd]úWY]úMĄ]°)‹ã˙ÃE°)īú]úY]úû˙Ą]°)…&Ø]ŠZĶÃEØ)x%úiĶĄ]úsĶØ]Ø)Œ1ĶÃEØ)Ēú<ĶĄ]úHĶØ]ŒĶÃEØ)MļúĶĄ]ú+Ķ^úĶØ]áEr] ‹^˙öE* ƒĢ˙úž˙H^ú‘˙^ú„˙ˇ^‹ ˙öE*0úB˙H^ú6˙^ú*˙ˇ^*…P˙ī^ŒLöE*0~úH^úu^úi_*…T_’ŌūöE0KY&úûū}_úīūŗ_‘F’G 0P—&úā¨é_úÔ¨`„G  GÔIGe G'e 7G-e ëDûéüDcP EcP E}֐ŧFö\ ĮF}֐ĪFö\ Ē1áķ"R'{%–BI_TpŪ† ģ–BŪ:‡ ģ–BŪÎK ŧR'א›īŨPGÚœ‡.¤áė &7‘¤à ‡.‘¤3Ä Œ.‘¤Ü/Å ‘.‘  *|.ŸyÆ –.'`‰ 'mGÉ ((úD'V`ú7'–`ú*'¸`‚ŦmG ăMŦƒAŦƒ5Ŧ€Gēo‰,÷ŒGÎ R(ú7÷Î`G2>ŠcPŸGH*Î †(ú„Pú`úwP2aŦG:$ŠõbŦG`*Î )ú(c[aƒc‰‹IŦGŲ )úšI[a‚qIŦGÕú€I[a‚WIŦG-úfI[aģG:$ŠcPĀGx*Î B)ú„PnaúwP–aÍG:$ŠõbÍG*Î Ę)ú(cŋaƒc‰‹IÍGŲ ŋ)úšIŋa‚qIÍGÕú€Iŋa‚WIÍG-úfIŋaŨG:$ŠcPāG¨*Î ū)ú„P÷aúwPbíG:$Š3ˆíGĀ*Î v*úBˆ2bŠqIíGā*#=*ú€I2b‹LöGø*#úLjbúL™bšæHwBüRuT‰°IHJÎ [,úŋIˇb‰ī¨H4¨¨+ƒ$ŠúŠŲbú ŠėbH4—úā¨ŲbúÔ¨ėb„H4ÔIH4~úôIŲbúčI˙bŒŸ¨H+gúŗ¨*cŒ3ˆH+]úBˆ*c‰qIH#j+ú€I*c‹LH(+#úLbcúL„cš-HwBüRw‚/Š;HŠú>Šĸc¨;H ƒ.¨úD¨Äcú8¨āc„;Hę§?H ˛ƒõ§ú ¨ķcú¨dŋ§?H MšƒΧúä§ķcúاdHHá\ Šõb‹H@+Ë į,ú(c"dúc5d‰‹I‹HŲ Ü,úšI"d‚qI‹HÕú€I"d‚WI‹H-úfI"dšH:$ŠcPHX+Ë -ú„PHdúwP`d­H:$Šõb­Hp+Ë Ŗ-ú(cdƒcŠ‹I­Hˆ+Ų ˜-úšId‹qI­H +Õú€Id‹WI­H¸+-úfIdÁH:$‰3ˆIÎ .úBˆ“d‰qII#â-ú€I“d‚LI#úL¨dúLÕdš$IwBüRuTšjG9.üPu\üRu mHûé~HcP‹HcPÎHcPÖH}֐öH}Ö‘I Iö\ Ē1Ē1Ē1Œ7›/Ū0I°œ%I¤áėĶ &7‘¤¨ãÔ œ'‘¤ž|Õ %I‘Đ+Iî3’Ö *IĒ5q× \F‘”Ÿņ1ë %čd‰Šoô īŗ‘DĒ zø īŗ‘T‰U_Lķ 8úd_ÚqėSLMúûSr‚‹IL6úšIr‚qILÕú€Ir‚WIL-úfIrŠ ŠcPŸL¸0õ 49ú„P—súwPīsŽL:$ŠõbŽLĐ0ö ŧ9ú(ctƒc‰‹IŽLŲ ą9úšIt‚qIŽLÕú€It‚WIŽL-úfItĀL:$ŠcPÃLč0÷ đ9ú„PKtúwP“tĐL:$Š3ˆĐL1ö h:úBˆĻtŠqIĐL 1#/:ú€IĻt‹LŲL81#úLâtúLušhNwBüRudŠ3ˆäLP1ö ā:úBˆúBˆ`x‰qIP#>ú€I`x‚L…P#úLuxúLĸxš”PwBüRu`‰3ˆ”Pø ŗ>úBˆĩx‰qI”P#z>ú€Iĩx‚LšP#úLĘxúL÷xšŠPwBüRu`‰3ˆŠPô +?úBˆ y‰qIŠP#ō>ú€I y‚L¯P#úLyúLLyšžPwBüRuP‰3ˆžP$ú Ŗ?úBˆ_y‰qIžP#j?ú€I_y‚LÄP#úLtyúLĄyš×PwBüRuD™âP@úBˆ´y‰qIâP#Û?ú€I´y‚LčP#úLÉyúLŪyš÷PwBüRud‰3ˆûPö Œ@úBˆņy‰qIûP#S@ú€Iņy‚LQ#úLzúL3zšQwBüRud‰3ˆQö ō@úBˆFz‰qIQ#Ë@ú€IFz‚LQ#úL[zúLpz™)Q#cAúBˆƒz‰qI)Q#*Aú€Iƒz‚L/Q#úL˜zúLÅzš>QwBüRud8LáiRL—­dL—­‘‹L M—­M—­AM–MM|™ōMcPĮMojŠ3ˆ—Nč2 >BúBˆØzŠqI—N3#Bú€IØz‹L N83#úLüzúL{šØNwBüRud‰3ˆģOč ļBúBˆ<{‰qIģO#}Bú€I<{‚LÁO#úLQ{úL~{šĐOwBüRud‰3ˆĐO č CúBˆ‘{‰qIĐO#õBú€I‘{‚LÖO#úLĻ{úLģ{‰3ˆŨO  •CúBˆÎ{‰qIŨO#[Cú€IÎ{‚LãO#úLä{úL|šōOwBüRu›‰3ˆũOŪ DúBˆ&|‰qIũO#ÔCú€I&|‚LP#úL<|úLi|šPwBüRud‰3ˆP Ū sDúBˆ||‰qIP#LDú€I||‚LP#úL’|úL§|Š3ˆPP3é ëDúBˆē|ŠLPh3#ÎDúLĪ|úLä|š'PwBüRud‚qILQ#ú€Iē|‰3ˆ+På cEúBˆ÷|‰qI+P#*Eú€I÷|‚L1P#úL }úL:}š@PwBüRud‰3ˆ@På ÉEúBˆM}‰qI@P#ĸEú€IM}‚LFP#úLc}úLx}‰3ˆUPÚ AFúBˆ‹}‰qIUP#Fú€I‹}‚L[P#úLĄ}úLÎ}šjPwBüRud‰3ˆjPÚ §FúBˆá}‰qIjP#€Fú€Iá}‚LpP#úL÷}úL ~‰3ˆrQį GúBˆ~‰qIrQ#æFú€I~‚LxQ#úL4~úLa~š‡QwBüRud‰3ˆ‡Qį …GúBˆt~‰qI‡Q#^Gú€It~‚LQ#úL‰~úLž~‰3ˆŸQá ëGúBˆą~‰qIŸQ#ÄGú€Ią~‚LĨQ#úLĮ~úLÜ~‰3ˆžQ"á cHúBˆī~‰qIžQ#*Hú€Iī~‚LÄQ#úLúL2šĶQwBüRud‘TIcIcP‘vI‘‹IœIW'‘ßI‘ôIJW'‘HJ‘]JnJW'‘ĩJ‘ĘJÛJW'KÕ-‘&K:KW'‘rK‘‡KžKW'ŌKF—NcPĀNcPûOö\ į9¸9n8›OŪāQŪœZ¤áė &7‘¤[— Z‘€3ZĒĻņ \F‘¨ŠcPR¨3 ēIø„P  ŸúwPER:$ŠõbRĀ3 BJú(cnƒc‰‹IRŲ 7JúšIn‚qIRÕú€In‚WIR-úfIn!R:$Š3ˆ[Rā3 ēJúBˆņŠqI[R4#Jú€Iņ‹LdR4#úLq€úLԀšeUwBüRudŠ3ˆoR04 2KúBˆŠqIoRH4#ųJú€I‹LuR`4#úL&úLHš~UwBüRudŠ3ˆÁRx4 ĒKúBˆfŠqIÁR˜4#qKú€If‹LĘR°4#úL‚úL’‚š‹UwBüRu`Š3ˆÕRČ4 "LúBˆĀ‚ŠqIÕRā4#éKú€IĀ‚‹LÛRø4#úLä‚úLƒš¤UwBüRu`Š3ˆ'S5 šLúBˆ$ƒŠqI'S05#aLú€I$ƒ‹L0SH5#úLǃúL„šąUwBüRu`Š3ˆ;S`5 MúBˆH„ŠqI;Sx5#ŲLú€IH„‹LAS5#úLj„úLŒ„šĘUwBüRu`Š3ˆS¨5 ŠMúBˆĒ„ŠqISČ5#QMú€IĒ„‹L–Sā5#úL0…úL …š×UwBüRu`Š3ˆĄSø5 NúBˆ΅ŠqIĄS6#ÉMú€I΅‹L§S(6#úLđ…úL†šđUwBüRu`Š3ˆîS@6 zNúBˆ0†ŠqIîS`6#ANú€I0†‹L÷Sx6#úL“†úLö†šũUwBüRudŠ3ˆT6 ōNúBˆ$‡ŠqIT¨6#šNú€I$‡‹LTĀ6#úLD‡úLf‡šVwBüRudŠ3ˆKTØ6 jOúBˆ„‡ŠqIKTø6#1Oú€I„‡‹LTT7#úL͇úLˆš#VwBüRudŠ3ˆ_T(7 âOúBˆDˆŠqI_T@7#ŠOú€IDˆ‹LeTX7#úLfˆúLˆˆš#¨dú€IąĄ‹L„[(>#úLíĄúL)ĸšū\wBüRu\Š3ˆ[@>; [eúBˆWĸŠqI[X># eú€IWĸ‹L•[p>#úLyĸúL›ĸš]wBüRu”™´[xĸfži> %šĸŠ8|ŧ[ˆ>> ÚeúG|Øĸ‹bŧ[ˆ>Zú!bŖ‹øaŧ[ˆ>Īúb%Ŗúb%Ŗ‰ų{Ķ[ ? fú|NŖú|nŖ‚׏Ķ[ •úđNŖú揂Ŗ„Ķ[ …ũ™Ŗ‹nĶ[¨>Kú@n˛Ŗú5nNŖú*nĮŖ‹”eĶ[Ā>/ƒŖeƒŖeū[Š1\4IŠcP,\Ø>B Öfú„PâŖúwP ¤<\:$Šõb<\đ>B ^gú(c(¤ƒc‰‹I<\Ų SgúšI(¤‚qI<\Õú€I(¤‚WI<\-úfI(¤L\:$Š3ˆY\?B ÖgúBˆh¤ŠqIY\(?#gú€Ih¤‹Lb\@?#úL¨¤úL䤚$]wBüRud‰3ˆ›]- NhúBˆĨ‰qI›]#hú€IĨ‚LĄ]#úLĨúLEĨš°]wBüRud‰3ˆ°] - ´húBˆXĨ‰qI°]#hú€IXĨ‚Lļ]#úLmĨúL‚Ĩ‰3ˆŊ] B -iúBˆ•Ĩ‰qIŊ]#ķhú€I•Ĩ‚LÃ]#úLĢĨúLÚĨšŌ]wBüRuŸ‰3ˆŨ]0 ĨiúBˆíĨ‰qIŨ]#liú€IíĨ‚Lã]#úLĻúL/Ļšō]wBüRud‰3ˆō] 0 júBˆBωqIō]#äiú€IBĻ‚Lø]#úLWĻúLlĻŠ3ˆ˙]X?9 ƒjúBˆĻŠL˙]p?#fjúL”ĻúLŠĻš^wBüRud‚qIŧ^#ú€Iω3ˆ ^, ûjúBˆŧωqI ^#Âjú€IŧĻ‚L^#úLŌĻúLįĻš ^wBüRu`‰3ˆ$^) skúBˆúωqI$^#:kú€IúĻ‚L*^#úL§úL=§š9^wBüRu`‰3ˆ9^) ŲkúBˆP§‰qI9^#˛kú€IP§‚L?^#úLf§úL{§‰3ˆR^6 SlúBˆާ‰qIR^#lú€Iާ‚LX^#úLŖ§úL¸§šg^wBüRu”‰3ˆg^$6 ÍlúBˆ˧‰qIg^#’lú€I˧‚Lm^#úLā§úLõ§š€^wBüRu”‰3ˆ‹^2 EmúBˆ¨‰qI‹^# mú€I¨‚L‘^#úL¨úLJ¨š ^wBüRud‰3ˆ ^2 ĢmúBˆ]¨‰qI ^#„mú€I]¨‚LĻ^#úLr¨úL‡¨‰3ˆÔ^; #núBˆš¨‰qIÔ^#ęmú€Iš¨‚LÚ^#úL¯¨úLܨšé^wBüRu\‰3ˆé^$; ›núBˆī¨‰qIé^#bnú€ILī^#úLŠúL1Šš_wBüRu\‰3ˆ _ , oúBˆDЉqI _#Únú€IDŠ‚L_#úLZŠúL‡Šš&_wBüRu`‰3ˆ-_' yoúBˆšŠ‰qI-_#Roú€IšŠ‚L3_#úL°ŠúLÅŠ‰3ˆL_%' ņoúBˆØŠ‰qIL_#¸oú€IØŠ‚LR_#úLîŠúLĒša_wBüRu`‘ŪWëWcP9XiĨ‘MX\XW'ŦXiĨ‘ĀXĪXW'YiĨ‘0Y?YW'‘~Y‘“YĸYW'åY÷Æ‘øYZW'JZÕ-‘]ZlZW'šZiĨ‘ÍZÜZW'[F‘T[‘i[{[W'Ž[cPY\cPÛ]ö\ Hũ Ũ€_€œqNy˙ ”yC‘¤čĒ Ny‘%‘ˆ?CyŸjĖ ĄD.ĒĒŸģ ‘˜~ĒvĢ ‘œ~Ēáė1  ‘¤~Š÷ŧ†_°? 6rúŊĀĒúŊzĢ’3ˆMc@%rúBˆŦ‰qIMc #ëqú€IŦ‚LVc#úL)ŦúLXŦšhcwBüRuŦ~‘Ÿ_§_5ģŠÜZø_Ø? jrúôZkŦúįZŖŦ`B_ Šį`đ?1 8túIįˇŦú+įãŦŠ `@šrú­‘$`Šgį$`8@esúŠįŽúvį;ŽŠŸį$`h@#?sƒÂįúŽį;ސ’` ũŠ M“`˜@#?Bsƒ/MúM׎ē` ũ‚ÔLc##?ƒ÷LúãLb¯Š-Đ`°@ûsúFx¯ú<˜¯—ķŒĐ`Đ@cŗsú˜¯‘Ba˜Œ^a cú§Œ%°‚XŒ^a ŧƒ~ŒúqŒްúgŒ%°‰aLlc!!túpLð‘…cua ũ‘åc‘øcŠ3ˆ§ač@3 ątúBˆō°ŠqI§aA#wtú€Iō°‹Lŗa A#úLSąúLĄąšģbwBüRuŸ~Š(Ėa8A1 vú (ŋąŠ8æĖa`A5ˆuúIæ ˛—3ˆĖa€A@fuúBˆ[˛ŠqIĖa A#-uú€I[˛‹Lb¸A#úLОúL÷˛šībwBüRw2L b@úALŗ‘$b‰D($bA5öuƒg(úS(cŗŠ–L-bĐA#;ĶuƒšLúĨLąŗ‹ÔL?bđA#;ƒ÷LúãL˙ŗ‹aLebB5úpLM´‘}bŠɋ}b B ­vúڋ´´Œ3ˆ}b@B;úBˆĩŠqI}b`B#rvú€Iĩ‹L‰bxB#úL^ĩúLŦĩšãbwBüRuŦ~ŠɋbB4 AwúڋĘĩŒ3ˆb¨B;úBˆĘĩ‰qIb #wú€IĘĩ‹L™bĀB#úL ļúLJļšËbwBüRuŦ~‰ɋc Õwúڋhļ3ˆc;úBˆhļ‰qIc #šwú€Ihļ‚Lc#úL~ļúL­ļš#cwBüRuŸ~‰ɋ#c*4 ixúڋĀļ3ˆ#c*;úBˆĀļ‰qI#c #.xú€IĀļ‚L,c!#úLÖļúLˇš>cwBüRuŸ~‰3ˆ°c&3 âxúBˆˇ‰qI°c #¨xú€Iˇ‚Lšc#úL.ˇúL]ˇšĪcwBüRuŸ~ļ_åĐŧ_#ːŲ_Bc å_´^ ņ__ €a$Z•a&b§a*d Ėa]_ ‘cGcö\ Há%#˜yvŐ{ŐŪ†vŐŪ:‡vŐŪDvŐß‚i§yÜyā ”„dë__nŽģcë__sŽœ'âîC“Ejáļō-zCIŐ!iŐč†0DŐč:‡0DŐčD0EŐâæŅ>0GŐũ]iķœEzi…˙ ”uj‘œâĸG‹cpˇĨ__xGi…‘ØB#}ĒęĨQ‘\Š„øBLözú%„įˇú=„ûˇú1„¸ŒڃøBMŊúéƒįˇú˙ƒûˇúķƒ¸‘,ŠSyJCSü{úŠy.¸ú}yA¸ƒpy‹˜ŌJC‚úŲŌ.¸úĖŌA¸ƒŋŌ‹ŌJC_úXŌ.¸úKŌA¸ƒ>ŌC…gŌa¸‹ ŅJCVú×Ņ™¸úĘҏƒŊŅC…æŅš‹vSk(CúSšú…S:šxūŠvS@CW,|úSMšƒ…SŒūŠ3ˆŒXCW¤|úBˆ‡šŠqIŒxC#k|ú€I‡š‹L•C#úLŠšúLËššŦwBüRuc‰3ˆ(%W}úBˆéš‰qI(#ã|ú€Iéš‚L.#úLūšúL+ēš=wBüRuc‘G¨C^…îC^EjŸ0=`Ej>ēŸYWa[csēŸ€ob[cˇēŠ˜yŽĀC_ö}úžyrģúąyĒģú§yÖģĀC…Íyŧ‰jdސŌ}ƒydƒyd‚CŊĩ“úcŊ7ŧƒWŊŠvÕŊčC`~ƒ Õú“ÕoŧŠZĶĐDaŖ~úiĶĮŧƒsĶD1ĶĐĒú<ĶķŧƒHĶĶĐMļúĶķŧú+ĶŊúĶŊŲr] Š„ß(Di ú%„/Ŋú=„CŊú1„oŊŒڃß(DMŊúéƒ/Ŋú˙ƒCŊúķƒoŊ‘õŠÜÔú@Drp€ƒ)ÕúÕņŊƒÕúÕdž‹„Ôú@D0.ƒŅÔúÄÔņŊƒˇÔúĒÔdž‹3Ôú@D0úhÔņŊƒ\ÔúPÔdž@D…vÔwžŒÜyú@D0~úzņŊƒzúųyßž@D…z9ŋ’Ē0K€ú7ĒLŋƒ+Ē‘’Æ 0PL€ƒā¨úÔ¨ŋ„Æ ŅÔI”-e Æe Ų'e ŠÜÔ2hDyāƒ)ÕúÕŧŋúÕ ĀƒÕ‹„Ô2hD0.ƒŅÔúÄÔŧŋúˇÔ ĀƒĒÔ‹3Ô2hD0úhÔŧŋú\Ô ĀƒPԍhD…vÔZĀŒÜy2hD0~úzŧŋúz ĀúųyžĀhD…zŨĀ’Ē@0K~ú7ĒÁú+ĒhÁ‘N’ 0Pŧúā¨ŠÁúÔ¨ĮÁ„  ÔIe ('e Ū-e ‰ī¨d*ˆķ‚ƒ$ŠúŠķÁú ŠÂd*—úā¨ķÁúԨ„d*ÔId*~úôIķÁúčI&Ÿ¨xgúŗ¨D3ˆx]úBˆD‰qIx#ĩ‚ú€ID‚L}#úL|ÂúLÚŒwBüRud‰¨¯Š‚ƒƒ.¨ƒD¨ú8¨Ö„¯ę§ļ ˛ƒõ§ƒ ¨ú¨ęŋ§ļ MšƒΧƒä§úاęŋá\ ‰ī¨f„ėƒƒ$ŠúŠūÂú ŠÃf—úā¨ūÂúԨÄftÔI‰¨w…{„ƒ.¨ƒD¨ú8¨1Äwę§~ ˛ƒõ§ƒ ¨ú¨]Ïŋ§~ MšƒΧƒä§úا]Їá\ ‰ŊŸ 5…ƒȟúԟqÏ—Ÿ Mƒϟú°ŸqÏ3ˆ  …úBˆqÉqI #ú„ú€IqÂL¨#úL…ÃúL˛ÃšˇwBüRud\e 'e e ę-e Fö\ אßÕg}…•…ā ”ujë__x‘•…†7›k÷dœ“D “Ē %‘ŦĒáS%‘°Ēec‘HĒ5Z%‘¸‰$d d5†øWdŸøJdŸdö‰ŌÕBdŒ†úáÕÅÂ%xBdú4x ďxBd}úx ÄŠ)_dĀD{Žú) Åú&)OÅú )‹ÅĀD¨5)‘T…B)ķʼnŌÕ_dē/‡úáÕbÆ‚%x_dú4xbƏx_d}úxbƝđD˜‹…Q)iĮŠLd EÂۇúBLßĮú5L-Čú+LVČŠ[Nd@EŗԇúNŠČútN-ČújNVČŠ‹Id`ECɇúšIVȐyg$$‘ģdŠn…ždxEÂxˆú‡…ŌČú}…1ɉ„Æd•mˆú%„Éú=„ŽÉú1„ÛɏڃÆdMŊú郁Éú˙ƒŽÉúķƒÛÉ‘Úde-z‰3ˆædÂđˆúBˆîɉqIæd#ˇˆú€IîÉ‚Lėd#úLĘúLJĘšûdwBüRuLŠL eEŋˆ‰úBL]Ęú5LŒĘú+LÎĘŠ[N e¨Eŗ‰úN+ËútNŒĘújNÎʉ‹I eCv‰úšIÎʐÍg$$‘;eŠn…>eĀEŋ%Šú‡…cËú}…˙ˉ„Je•Šú%„žĖú=„ëĖú1„͏ڃJeMŊú郞Ėú˙ƒëĖúķƒÍ‘[e-g-zŠ3ˆgeØEŋŠúBˆ*͉qIge#dŠú€I*Í‹LmeđE#úLsÍúLėÍšgwBüR‘H‰3ˆĨgŋ‹úBˆ ΉqIĨg#܊ú€I ΂LĢg#úLÎúLLΚēgwBüR‘H‰3ˆäg‹úBˆ_ΉqIäg#T‹ú€I_΂Lęg#úLtÎúLĄÎšųgwBüR‘DdÍŠėÕxeFÆ’ŒúÖ´ÎúûÕEĪ‹>…xeF¯úW…´ÎúM…EĪ—Ē„xe Fg Œúʄ´Îúž„EĪ F…؄ŽĪ—Ē„~e@FhZŒúʄĄĪúž„8Ѝ@F…؄ĐŒĒ„e`FiúʄĩĐúž„LŅ`F…؄•ŅŠ°IŠexFÆsŽúŋI¨ŅŠī¨ŠeF¨Āƒ$ŠúŠ9Ōú ŠmŌŒŠeF—úā¨9ŌúÔ¨mŌFŒÔIŠeF~úôI9ŌúčI€ŌŒŸ¨¯e¨Fgúŗ¨ĢŌŒ3ˆ¯e¨F]úBˆĢŌ‰qI¯e#‚ú€IĢŌ‹L´eĀF#úLãŌúLĶšÆewBüRuP‚/ŠĶeŠú>Š;Ķ¨Ķe ƒ.¨úD¨æĶú8¨Ô„Ķeę§×e ˛ƒõ§ú ¨?Ôú¨[ԏŋ§×e MšƒΧúä§?Ôúا[Ԑāeá\ ‘‡gŠ3ˆãeØFķŽúBˆnÔ‰qIãe#ēŽú€InÔ‹LéeđF#úLËÔúL\Õš gwBüR‘XŠjd÷eG/úydzÕúydzÕ‰Nj7f0Gú]jÃÕúgjōÕ‰NjOf1qú]jÖúgjAÖ‰Njif2›ú]jaÖúgjÖŠĩ–f G9éúō°ÖúæęÖúÚ×úÎ>×úÄmבĨfаIŽfHG9ʑúŋIĸ×Šī¨ˇfpG¨‘ƒ$ŠúŠÄ×ú Š×׌ˇfpG—úā¨Ä×úÔ¨×׍pGŒÔIˇfpG~úôIÄ×účIę׌Ÿ¨ĮfˆGgúŗ¨ØŒ3ˆĮfˆG]úBˆØ‰qIĮf#ؐú€IØ‹LĖf G#úLMØúL‡ØšŪfwBüRu`‚/ŠëfŠú>ŠĨ؏¨ëf ƒ.¨úD¨ĮØú8¨ãØ„ëfę§īf ˛ƒõ§ú ¨öØú¨Ųŋ§īf MšƒΧúä§öØúاؐøfá\ ‰3ˆ:g4B’úBˆ%Ų‰qI:g# ’ú€I%Ų‚L@g#úL:ŲúLgŲšOgwBüR‘X‰3ˆ‡gē’úBˆzŲŠqI‡g¸G#’ú€IzŲ‹LŠgĐG#úLŲúLēŲšŸgwBüR‘@‘\d!fMi'fcˇAfá1[fá1ufá1Œfr] ‘[gÚgá\ cgö\ –‘ hÉœ0“z•ú  ÍŲŠ] "hčGĮ”úl ÚŠuf'hHøŧ”úŽfWÚú„f€ÚŠšf7h HŽą”úŠfÆÚ’īŠ>h õʓúúŠäڐGhda —3ˆJh8HķA”úBˆ÷Ú‰qIJh#”ú€I÷Ú‹LOhPH#úLÛúL7Ûš¸hwBüRug3ˆēhķøBˆV‰qIēh#w”ø€IV‚LÁh#úLUÛúL‚ÛšĐhwBüRug_há\ 'hš…‰w hh)•ú† •Û‚ˇalh æúÉaÁÛ‚[lh -ú[×Ûú[ëÛŠ×mvhhH[•úæmÜš§hô@üPs…h€ hEˆŲhö\ ÷‘ Ğāhœ–•Ē•ø  ‘Žõh“›{÷ĐœŦš^ž%œ#k|:,Üœ$k5‘@ÜŠvS=€Hs–úSTÜú…SrܐJūŠ3ˆJ˜Hs•–úBˆšÜŠqIJ¸H#\–ú€IšÜ‹LSĐH#úLÎÜúL Ũš‡wBüRucŠĢ ^čHwæ—úē (Ũ‹SŠdIŧƒbŠúlŠpŨ‚ī¨j6žƒ$ŠúŠƒŨú Š–Ũj6—úā¨ƒŨúÔ¨–Ũ„j6ÔIj6~úôIƒŨúčIŠŨŒŸ¨Igúŗ¨ßŨŒ3ˆI]úBˆßŨ‰qI#Ļ—ú€IßŨ‹L„8I#úLŪúL9Ūš˜wBüRwXI—™žix%WŪŠn…׀Iyœ˜ú‡…¤Ūú}…íŪ‰„į•‘˜ú%„Eßú=„]ßú1„rߏڃįMŊúéƒEßú˙ƒ]ßúķƒrß‘õo-zŠ3ˆ˜Iy™úBˆ…߉qI#ۘú€I…ß‹L °I#úL§ßúLáßš wBüRuc‰3ˆ˛yŒ™øBˆudŸ‰qI˛#S™ø€IudŸ‚L¸#úLāúL<āšĮwBüRucׯ ‰Å 0~˙úŨ OāúĐ {ā>‹¸‰ž> 뙐F0Š‘ IČIšú  ›ā}“‰3ˆ”sšúBˆšā‰qI”#Tšú€Išā‚Lš#úLÎāúLûāšŠwBüRuc=Æ ˛ö\ Đö\ ›{/iœūš¤#|:‘¤$5‘‘‡iĒ•ü‘‘ü‘‘›Ÿ÷Ĩœ¨Ÿ^ž$%¤#k|:‘¤$kĖ,‘ŠvSEāIsr›úSáø…SŸSūŠ3ˆSøIsę›úBˆFáŠqISJ#ą›ú€IFá‹L\0J#úLdáúL†áš|wBüRucŠĢ gHJw7úē ¤á‹SŠl`JŧƒbŠúlŠĖá‹ī¨r€Jžƒ$ŠúŠ÷áú ŠĖግr€J—úā¨÷áúÔ¨ĖፀJŒÔIr€J~úôI÷áúčI⌟¨˜Jgúŗ¨KâŒ3ˆ˜J]úBˆKâ‰qI#÷œú€IKâ‹L”°J#úLƒâúLĨâšĨwBüRsČJ˙žžix%ÃâŠn…ÜđJyíú‡…ãú}…L㉄é•âú%„”ãú=„Ŧãú1„ÁãڃéMŊú郔ãú˙ƒŦãúķƒÁã‘÷o-zŠ3ˆKyežúBˆÔã‰qI#,žú€IÔã‹L  K#úLöãúL0äšwBüRuc‰3ˆ‡yŨžøBˆudŸ‰qI‡#¤žø€IudŸ‚L#úLNäúL{äšœwBüRucšÜ~züPsĀĀūv2$u "‰ë ( ~3Ÿú Žäúö ēä4´‰ž4 SŸ<0‰‘ ?!}Ÿú  ÍäQ“šE~zŸüPsĀĀūu Ĩö\ ›–/iœúŸ¤#“|:‘¤$“Ė,‘‡iūšü‘‘ü‘‘§ E˜FœĐ úEāäø*E‘ŒxĖ8KgúŒĖåŒ_Š8K]úqŠå‹3ˆ8KŌúBˆOå‰qI#” ú€IOå‹L%PK#úL‹åúLÅåš8wBüR‘oßиß ÷ ā ”¤ië__x>÷ (Bß}ˇ Ą"Ąā ”Qŗé__nˇđáįōsĄCI u!i°Ač†0D uč:‡0D učD0E°AâæŅ>0G°AũÕÆņœ‹ĄĻ˙ ”Ļ‘hKúĨŸ*íųJãåŸãWķmÍæŸ\ôųJæŠÚ#€KđõĄúé8æŠôJ˜KķoĨú Xæú€æ‹Đ XČKÚúé Øæúß įŠŖXøK@JŖúČįúŧGįø˛uT—ü X(Lˆ%ŖúĄGįø ĄuTŒÔËXPLšƒãËúíËGįPLŒĢË``LǃļËúÂËČįŒ€Ë``LMļƒËúĨË(čú™ËČįpr] Œë$Öāg‡úīāįøåāuTŠ^i^xL@lŖƒmiƒmiŠ.°LDģ¤ƒ{únHčƒaƒT‹Ũ°L0úHčƒƒúL… ŠčŒ"Ą°L0~úWĄHčƒKĄú?ĄÂ荐L…eĄäč’hŪĀ$0KZ¤ƒ‘Ūú…Ū.éņ€Ä Sƒ úoé‘Ū’™ĖÚ 0P˜¤úšĖŖéú­ĖÁé„Ú å E‘-e Úe í'e ‚"Í‘@ú1Íáéŗ— ƒ,ŗúBŗõéú6ŗę„—č˛› ˛ƒķ˛ú ŗ(ęú˙˛HęŊ˛› Mšƒ˞úâ˛(ęúÖ˛Hꐤá\ ¸LŅĨŸ–Ôõ%[ę˙™e !ûé2cP?cPH=P}֐É}֐tc #f:Jr] ˛á\ ēö\ Ņö\ @BßT#Ļ^Ļā ”ÆEč V<÷čm=œ'čČ%>%čVĘ?œ'¯ú' iŠœvĻ ŗ˙ ”äG‘¤r1Â÷‘¤ėÜ'‘¤¨ÃÄ%‘ ¤-BÅ ŗ‘¤ĶWÆ%ŗ‘ØLŗģmsgĮįû‘@ŸˇĘ€č„ęĒ3’Ú÷‘L‰‹č5iČ˧øĢ葸Ąč‘DŸ„5i…|cŒõb5iøLƒø(c‘úcˇęŠ‹I5iMŲ ŋ§øšI‘‹qI5i(MÕø€I‘‹WI5i@M-øfI‘Mi:$‰įņSiʨúōÚęúöņë[iÉ÷Š:[iXMËF¨úI/ë‹ cipMđú/QëkisĄŠ^ikiˆMËp¨úmiuëúmiuë‰&éĀjĖļ¨úFé“ëú<éģë„Āj…|cÔjcPŠOčÖj MĖø¨úočŨëúečė M…|cįjcPŠZįj¸MĖ:Šúz'ėúpOė¸M…|cújcPĐM†­žiÎ%qėŠ:újčMΙŠúI„ė‹ kNđú/Ļė ksĄŠ^i kNÎÊúmiĘėúmiĘė0Nî}JĐ*ŗŠ:ĒƒŒiƒ–iŠ&éck˜NŅĨĒúFé#íú<é[퍘N…|cŒcPgk¸Nƒú„P#íúwPŠíwk:$Š‹čwkØNŅdĢúĢčĒíúĄčĖíØN…|cŒõbwkøNƒú(cĒíúcî퉋IwkŲ WĢúšIĒí‚qIwkÕú€IĒí‚WIwk-úfIĒ퐍k:$Š&ék OŌËĢúFéîú<é9î O…|cŒcP“k@Oƒú„PîúwP[îŖk:$Š‹čŖk`OŌŠŦúĢč{îúĄčî`O…|cŒõbŖk€Oƒú(c{îúcŋIŖkŲ }ŦúšI{î‚qIŖkÕú€I{î‚WIŖk-úfI{k:$Š3ˆšk¨OŅ­úBˆâîŠqIškĀO#ÉŦú€Iâî‚LÂk#úLīúL>īšÕkwBüR‘P‰3ˆčkŅz­úBˆQī‰qIčk#A­ú€IQī‚Lîk#úLfīúL“īšũkwBüR‘Pbk§ã‰ŌS†iÖ­úáSĻī‚WI†iúfIĻīŠīæšiØOÜė­úįŪīŠi&bŠĻŠiđOÜ8¯úQĻđúEĻYđú9Ļđú-Ļāđú#Ļņ’3ˆClDĒŽúBˆŽņ‰qICl#qŽú€IŽņ‚LIl#úLŖņúLļņšWlwBüRv’3ˆWlD!¯úBˆÉņ‰qIWl#čŽú€IÉņ‚L]l#úLŪņúL ōšllwBüR‘H‘ĐiâiQĄ‘ōi‰ŌS¸iÜt¯úáSō‚WI¸iúfIōŠ3ˆōi PÜė¯úBˆZōŠqIōi@P#ŗ¯ú€IZō‹LûiXP#úL–ōúLÛōšákwBüRv‰üjŨN°ú ųō‹‚ņ jpPēú‘ņķ‹cņ jpPĶúrņķj-ŊŠō^jPĘx°ú"ō=ķgjÅöŠMįgj¨PüŲ°ú^įUķŒkgjĀPUúkUķ‹åjgjØPúūjjķúôjUķŠ$ėˆjđP׹úDė~ķú:ė–ķđP…|cœjcPŠ‹čœjQ×ÚąúĢčĢķúĄčŋķQ…|cŒõbœj Qƒú(cĢķúcÔķŠ‹Iœj@QŲ ÍąúšIĢķ‹qIœjXQÕú€IĢķ‹WIœjpQ-úfIĢ퐴j:$‰ōũkʲú"ō÷ķlÅö‰Mį l"üe˛ú^įôk l"Uúkô‚åj l"úūj$ôúôjô™ll"Ö˛úBˆ8ô‰qIll#˛ú€I8ô‚Lrl#úLMôúLzôšlwBüR‘H5iīį‘^j‘8l˜l¯f Ŗlę\ļlÃf ÁlŨf 'lö\ Ē1Ē1ÂAĢâ˛gĐlčœJŗ„ĩ˙ ”„ĩ‘¤-Bg‰ĩ‘Š3ˆ0mˆQnßŗúBˆôŠqI0m¨Q#Ļŗú€Iô‹L9mĀQ#úLßôúLõš`mwBüRu_Š3ˆ@mØQnW´úBˆIõŠqI@mđQ#´ú€IIõ‹LFmR#úLiõúL‰õšwmwBüRs‰3ˆm nĪ´úBˆ§õ‰qIm#–´ú€I§õ‚L‡m#úLŧõúLéõš–mwBüRu_‰3ˆĄmnGĩøBˆu`Ÿ‰qIĄm#ĩø€Iu`Ÿ‚L§m#úLüõúL)öšļmwBüRu_įl0õl—]m mm00m^ϐŸmö\ 5;5䓺” ĩÅĩā ”_ZāļÄ%âîG•–ˆŽĩFĀmXœáĩĩšø ĩ‘ R珍ļĩ‘XŠ–nHR•‘ļúĨ<ö‹T`nHRúc`<ö‰`nWļú*`pö‚ŌSnúáSŦö‚WInúfIŦö‰Mį@n•ōļú^įŋök@nUúkŋö‚åj@núūjÔöúôjŋöŠzįVnhR•ÖˇúŒįčö‹~ˆVn€Rúˆ1÷‹4gVn˜RúMgz÷úCg1÷Š3ˆ]n°RŽɡúBˆš÷‰qI]n#ˇú€Iš÷‹LbnČR#úL¸÷úLÚ÷š¸nwBüRu\rná\ ‰MįĖn•7¸ú^įø÷kĖnUúkø÷‚åjĖnúūj øúôjø÷‰zįßn•}¸úŒį!ø‚~ˆßnúˆ6øėn4gímĖŖnīį+nēV8n/ŗ@n—WÆn—WŠ3ˆunāR”2šúBˆcø‰qIun#ų¸ú€Icø‹L{nøR#úL…øúLÁøš§nwBüRv‰3ˆīn)”ĒšúBˆßø‰qIīn#qšú€Ißø‚Lõn##úLôøúL ųšowBüRv oö\ áą/ėšŪŌj ėšâî’ įûâīi'Œ7ēČ/ oŗœÃ¤cqѤ*{#Ã‘Š '&oS‡ēúD'ųú7'Hųú*'jų‹Ŧ&oS ăMŦƒAŦƒ5Ŧ@oēoŠĩšLo(S{žúĀš€ų(S¨Īš‘\™]oãƒŊ…ŪšžųŠjd`o@SīēƒydƒydŠjdxoXSģƒydƒydŠ&éˆopSxģúFéŊųú<éÕųpS…|cŒcP‹oSƒú„PŊųúwPęųĄo:$‰‰dŽožģƒ˜dúĸd úŠ‹čĄo¸SIŧƒĢčúĄč*ú¸S…|cŒõbĄoØSƒƒ(cúc?ú‰‹IĄoŲ <ŧƒšI‚qIĄoÕƒ€I‚WIĄo-ƒfIļo:$Š&éļoT°ŧúFéoúú<é‡úT…|cŒcPŧo Tƒú„PoúúwPœúĖo:$‰ēéëoŊúÚéŧúúĐéÔú„ëo…|cŒcPîo@Tƒú„PŧúúwPéúp:$‚.ëp'úNëûúDë1û„p'…|cŒcPpXTƒú„PûúwPFû/p:$Šīæ@ppT­ŊúįvûOp&bŠMįOpˆTžú^įŋûŒkOp TUúkü‹åjOp¸TúūjQüúôjü‰Mį¸qožú^į‰ük¸qUúk‰ü‚åj¸qúūjžüúôj‰üXoīįŠ“ųqpĐTŊžúŗų˛üúŠųúüĐT…|c„pcPŠ‹č„pđThŋƒĢčúĄč[ũđT…|cŒõb„pUƒƒ(cúc¯ũŠ‹I„p8UŲ [ŋƒšI‹qI„pPUÕƒ€I‹WI„phU-ƒfIœp:$Šēép€UĒŋúÚéßũúĐéū€U…|c¯pcPŠ‹č¯p UiĀúĢčkūúĄč§ū U…|cŒõb¯pĀUƒú(ckūúcûū‰‹I¯pŲ \ĀúšIkū‚qI¯pÕú€Ikū‚WI¯p-úfIkūÅp:$ŠoûÅpčU ĢĀúû+˙ú…ûc˙čU…|cØpcPŠOčØpV íĀúočˇ˙úečī˙V…|cëpcPŠ&éėp(V /ÁúFéCú<é{(V…|cūpcP‰Mį/qÁú^įĪk/qUúkĪ‚åj/qúūjūúôjĪŠ3ˆEq@VÂúBˆ‰qIEq#ĪÁú€I‹LKqXV#úLMúL|šqqwBüRud‰3ˆuq€ÂúBˆš‰qIuq#GÂú€Iš‚L{q#úL¯úLÜšŠqwBüRu[‰MįŖqáÂú^įīkŖqUúkī‚åjŖqúūjúôjīqpīįqēV'q/ŗ/q—W“qö\  q—WĒ1Œ7ŖÕ(āqŲœoƤĖs(oÆ‘¤š )tÆ‘Š3ˆrpV+×ÃúBˆŠqIrV#žÃú€I‹Lr¨V#úLPúLš‹rwBüRuW‰°I&rS+¸ÅúŋIŠī¨,rĀV¨Åƒ$ŠúŠŋú ŠŪŒ,rĀV—úā¨ŋúÔ¨ŪĀVŒÔI,rĀV~úôIŋúčIņŒŸ¨@rØVgúŗ¨Œ3ˆ@rØV]úBˆ‰qI@r#ĮÄú€I‹LErđV#úLTúLvšVrwBüRv‚/ŠfrŠú>Š”¨fr ƒ.¨úD¨ļú8¨Ō„frę§mr ˛ƒõ§ú ¨ōú¨ŋ§mr MšƒΧúä§ōúاvrá\ ‰3ˆĸr+0ÆøBˆuXŸ‰qIĸr#÷Åø€IuXŸ‚L¨r#úL"úLOšˇrwBüRuWšųqNÆüPsüRu‘ rrņš‘˜r rö\ Ē149ēõĀržœQĶWFĶŸÄšlHbî[—›ŠVŸÄ|žpVuŸē,Ÿí“ŸE\ 0‘Ŋî5'ŖpVŸkƒ¤í.Ÿœ Ĩ0‘W‰žÉrš7ĮÎr0ŠLZãr0WĨĮú[Z—‹ŌSãr0WwúáSĀ‹WIãr0WúfIĀŠLZërHW įĮú[Zī‹ŌSërHWwúáS ‹WIërHWúfI pWŸNÄŠ÷$IŸ?˜Ģ÷$g˜WyÎî đ´0‘ŸY/ļ0‘•ŠfZ"sĀWŧČúuZŗ‹ŌS"sĀWtúáSŗ‹WI"sĀWúfIŗŠdô0sØWēöČú„ôÆúzôØW…|cŒcP3sđWƒú„PÆúwPBFs:$ŠĒFsXģ]ÉúĘeúĀX…|cŒcPLs0Xƒú„PeúwPƐ\s:$ŠŠę\sPXŧÄÉúĒęæú ęPX…|cŒcPbspXƒú„PæúwPGrs:$ŠŽ_rsXŧĘúŽ_gú¤_ŋ¸XĘƒŽ_ú¤_čÄvcP’scPŠēé’sĐXŊ€ĘúÚéũƒĐéĐX…|cŒcP˜sđXƒú„PũúwP5 Ģs:$ŠÜęĢsYžãĘúüęU ƒōęY…|cŒcPąs(Yƒú„PU úwP Ás:$ŠŽ_Äs@Yž<ËúŽ_gú¤_­ `Y1˃Ž_ú¤_Ü ¤vcPÜscPŠüÜsxYžŸËúņ ƒxY…|cŒcPâs˜Yƒú„Pņ úwP) õs:$ŠÜęõs¸YŋĖúüęI ƒōꍸY…|cŒcPûsĐYƒú„PI úwP  t:$ŠŽ_tčYŋ[ĖúŽ_Ą ú¤_Ų ZPĖƒŽ_ú¤_ „vcP&tcPŠåų&t ZŋžĖúú ƒûų Z…|cŒcP,t@Zƒú„P úwPE ?t:$ŠZõ?t`ZĀ!Íúzõe ƒpõ`Z…|cŒcPEt€Zƒú„Pe úwP Ut:$ŠÜęUt ZÁ„Íúüę­ ƒōꍠZ…|cŒcP[t¸Zƒú„P­ úwPÕ kt:$‰Mį™tēåÍú^įõ k™tUúkõ ‚åj™túūj úôjõ ‰Mį7wēFÎú^į k7wUúk ‚åj7wúūj3 úôj 0sīᐇtēV‘t/ŗ™t—W4w—WŠfZÖtĐZČŅÎúuZG ‹ŌSÖtĐZtúáSG ‹WIÖtĐZúfIG ŠdôátčZÆĪú„ôZ úzô’ čZ…|côtcPŠļôôt[ĮUĪúÖôÕ úĖô […|cucPŠŽ_u [ČŽĪúŽ_P ú¤_¨ H[ŖĪƒŽ_ú¤_ë wcP'ucPŠēé'u`[ČėĪúÚéƒĐé`[…|c>ucPŠoû?u€[É*ĐúûHƒ…û€[…|cQucPŠŽ_Qu [ɃĐúŽ_P ú¤_Č[xĐƒŽ_ú¤_ؐ$wcPqucPЎįquā[ĘÁĐú×įîƒÍįā[…|cˆucPŠŽ_‹uø[ĘŅúŽ_&ú¤_^\ŅƒŽ_ú¤_šävcPŖucPŠ&éŖu0\ĘXŅúF鯃<é0\…|cēucPŠõēuP\Ë–Ņú(õ׃õP\…|cÍucPŠZõÎup\ĖÔŅúzõ˙ƒpõp\…|cāucPŠõāu\ÍŌú(õ'ƒõ\…|cķucPŠĒôu°\ÎPŌúĘOƒĀ°\…|cvcP‰Mį4vÆąŌú^įwk4vUúkw‚åj4vúūj™úôjw‰MįUwÆĶú^į­kUwUúk­‚åjUwúūjÂúôj­átīį"vēV,v/ŗ4v—Wuw—WSwö\ ŋ>—Ē€wœkĶŲ˙ ”Õ‘ąa ǜ'‘Č\÷Øŗ¤Ô¯€5ÖŗļP°õCõ’8wĢÚĶúC6•w´e ā\˙ĶŗĮpŊ0‘_ôwíf ]ÄØĄ…Ā–‘X—ī_ųw(]ĀgÔú`Šúū_Š‹Å_ųwH]úŪ_ãúÔ_—ãü?x`]ÁÍÔúũ%úųüM`]…|cŒcPExx]ƒú„P%úwPUx:$—Ž_Ux]ÁOÕúŽ_°ú¤_ØŒcPUx¨]™ú„PúwP!‰OUx CÕú"O]x9] nx:$—gnxĐ]ÂąÕú‡Qƒ}Đ]…|cŒcPtxč]ƒú„PQúwPy„x:$—3ˆĪx^Ā(ÖúBˆ™ŠqIĪx^#īÕú€I™‹LŌx0^#úLŽúLæš'ywBüRs’MįßxÁˆÖú^įkßxUúk‚åjßxúūj&úôj—zįōxP^Âk×úŒįF‹~ˆōxh^úˆh‹4gōx€^úMgŠúCghŠ3ˆũx˜^Ž^×úBˆĒ‰qIũx#%×ú€IĒ‹Ly°^#úLČúLęš7ywBüRvyá\ ’Mį;yÁË×ú^įk;yUúk‚åj;yúūjúôj’zįNyÂØúŒį1‚~ˆNyúˆF[y4g’3ˆwy‡ØúBˆs‰qIwy#NØú€Is‚L}y#úLˆúLĩšŒywBüRuS?xīįĸx†ęŊxēVĮx/ŗĪx—Wty—WŸwr_ Ēw ` ŧwQ] Ëwíf xW` cyö\ ›Ã÷ y}œKÚ¤r1†÷‘¤-B‡KÚ‘Š3ˆÕyČ^ŽŲúBˆČŠqIÕyč^#uŲú€IČ‹LŪy_#úLúLVšøywBüRus‰3ˆ˙y&ÚøBˆutŸ‰qI˙y#íŲø€IutŸ‚Lz#úLiúL–šzwBüRus‘šyÁy0Õy^ϐzö\ Ē1ēŪ÷ƒœŨŨIT›ļpĮ¤wĻ'ZH‘œD:'NqФĀ'œ'‘ ‰ž ?Âڐ0Šˆq"_BöÚúēqíú­q%ú q™vzJÜžeHŨŨĮŠ3ˆŖ0_K‹ÛúBˆÚŠqIŖH_#RÛú€IÚ‚LŦ#úLíúLšģwBüRus‰3ˆÍKÜúBˆ-‰qIÍ#ĘÛú€I-‚LĶ#úLBúLošâwBüRus‚e š™°đ+ÜüPsüQuŖŲĀ-e į-e Š3ˆ`_OÂÜúBˆ‚ŠqIx_#‰Üú€I‚‚L#úL•úLš-wBüRus_ņÜÃčŨHe P'e z-e ‰3ˆPOiŨúBˆÕ‰qIP#0Ũú€IÕ‚LV#úLęúLšewBüRusÄ\sđö\ üe š °đĒŨüPsüR0üQuŲ2-e j-e sö\ ƒö\ âŨ}W#IˆŖĖĖ zëœ ŪšŪø˛‘™$z 1ŪŦž)zyƍ¨_ø˛‘¨_…ž*‰ž8z`pې=z0Izj>ozPڐwzMzj>ĻzPڐšzj>ÛzPÚē ø‡œEâITČ­pĮZH¤wĻ'Õ9‘œD:'ČqH¤Ā'œ'‘ ‰ž ?.ߐ0Šr"Ā_Bbßú;rŒú.rÄú!r.Ø_˛āžeHEâfŠ3ˆŖđ_KķßúBˆyŠqIŖ`#ēßú€Iy‚LŦ#úLŒúLššģwBüRus‰3ˆĪKkāúBˆĖ‰qIĪ#2āú€IĖ‚LÕ#úLáúLšäwBüRus‚e š™°đ“āüPsüQuŖŲĀ-e é-e Š3ˆ `O*áúBˆ!ŠqI8`#ņāú€I!‚L #úL4úLaš/wBüRusP`YáÃJâLe T'e ~-e ‰3ˆTOŅáúBˆt‰qIT#˜áú€It‚LZ#úL‰úLļšiwBüRusÄ\sōö\ ūe š °đâüPsüR0üQuŲ4-e n-e wö\ ‡ö\ âŨI“{žœgâ×ãú%ɍh`…1Ŧ>ŦK…XŠÃX{ˆ` Į⍈`¨ĐX‘XR{¨] ‰ž{ įâ#{0‰ŗW&{ ãúÂWúĖWRŠaÜ1{¨` 1ãúsÜ~‰ÃX|A eã„|A¨ĐX‘X|¨] ‰ŗW[| % ãúÂWĨúĖW¸1{0”{j>š{šŪĮ{M{j>|Pڐy|Ŗ÷72°|œķã.äø%‘™´| #äŦ1Ŧ>ŦKŦXŽÅ|Oâē?øƒœģįITļpĮ¤wĻ'ë@‘œD:'IrˤĀ'œ'‘ ‰ž ? ä0Šƒr"Ā`BÔäúĩrú¨rHú›r˛™vz(æžeHģįęŠ3ˆŖØ`KiåúBˆũŠqIŖđ`#0åú€Iũ‚LŦ#úLúL=šģwBüRus‰3ˆÍKáåúBˆP‰qIÍ#¨åú€IP‚LĶ#úLeúL’šâwBüRus‚e š™°đ æüPsüQuŖŲĀ-e į-e Š3ˆaO æúBˆĨŠqI a#gæú€IĨ‚L#úL¸úLåš-wBüRus8aĪæÃĀįHe P'e z-e ‰3ˆPOGįúBˆø‰qIP#įú€Iø‚LV#úL úL:šewBüRusÄ\sđö\ üe š °đˆįüPsüR0üQuŲ2-e j-e sö\ ƒö\ âŨI“gĐ|ËœŨįåéúvMPa…‚„ŦŦœ‰žŲ|€ #čŪ|0‰ŒWá|  Mčú›W„úĨWĮŠaÜō|haƒ mčúsÜķŠÃX5}€aŠ č€a¨ĐX‘XC}¨]  aSé…Ģ Š|H}Āa‹ ÷čú-|9 ‹eH}ĀaJ ú)ee ú)ee ‰ŧ}Œ Héú%z ™ŧ}=éŦ1Ŧ>ŦKŦXĮ}O␚}ވ‰ÃXŲ}BŽ ‡é„Ų}B¨ĐX‘Xč}¨] ‰ŒW`~• ąéú›W˜ úĨW­ ō|0 }j>5}.ä3~j>W~.ä÷g‹ ~œę6ęøv‘™¤~ +ęŦ‚ŦŦœŽĩ~ÅįáløięčÍû‡˙´âæčėˆáiæŅ Ž%át!‚ęŪ[—Në@áø›ęëenvrV@á”ø´ęëenvsV@á§øÛęč›—%âæĖP›%ˆz…DĀ~œ÷ęæņø‰‘đa?ëŦ•ŦĸŦ¯ŦŧŦÉŦÖŦãøœ^ bÛņú‰Á b…•!…ĸu!…¯ˆ!…ŧī!ŦÉ…ÖB"…ã–"Š‘ é~8bÍëú  Á šƒ“üPsŠÃXWPb´ũëPb¨ĐX‘Xk¨] ‰aÜ]˛ėúsÜÛ"hbKņ…ō,# bŦ˙Š_vÔČbėÂėúnv‡#‹EvÔČb@úTv‡#đbļėúTvÍ#Šb[ÔcEĢėúq[Í#ƒÔs„Fw‰Āö%ŋRíúĪā#‚Đvö%Čƒøvúív$‚‹vö%(ƒÂvƒĩvú¨v_$‚ię€ Ŧútęĸ$ €`‰ŠÃX€(cÁ‚í(c¨ĐX‘X)€¨] ‰˙7Ķėíƒ'īúīÃ$‚Ŧ›™€7(ƒã›ƒ֛úɛį$‚‚검 Ŧúę4%@cī…R%Šbė€XcŲFîú!bq%‹øaė€XcĪúb%úb%Ššĸ‚€cÛĪîúŗĸŗ%úŠĸë%€c…Āĸū%‹n‚˜cRú@nD&ú5nŗ%ú*nY&‚”e:‚/ƒŖeƒŖe‹g"‚°cÛƒvČcīŦ‚ŦŦœU‚Åį‰|‚âmīúo&‚׀|‚Zúæ€o&‚\€|‚$úu€o&ƒk€‰‚âËīú*…&‚€‚Húœ€…&‚\€‚6úu€›&ƒk€‰5‚‚>âBđƒlƒ_ƒRŠũ‚āc Ģ%đƒ žŒõ‚‚āc ¸ƒƒ‹›ę›‚øc ŦúĻęą&‰ÃX"9ævđ„"9¨ĐX‘X0¨] Š´ęŪ‚dúņúŋęĪ&d…Íę'ZƒûékƒcPxƒcPƒ=ŽƒcP›ƒ=¨ƒcPŗƒ}֐U„}ÖŠÚ(ƒ0dÅ+ņúķ'úé8'ä€MļœŲ̐=ƒĄ0Š6ę̓Hd­ąņúAęN'Hd…Oęl'…[ęŒ'ŒÃX„`d‰`d¨ĐX‘X#„¨] û~§Î-üƒè]„ö\ ēŧø‡œrõITēļpĮü$¤wĻ'­D‘œD:'DsŦ'¤Ā'œ'‘ ‰ž ?[ō0Š‚s"xdBōúˇsđ'úĒs((ús’(dßķžeHrõĘ(Š3ˆŖ¨dK ķúBˆŨ(ŠqIŖĀd#įōú€IŨ(‚LŦ#úLđ(úL)šģwBüRus‰3ˆĪK˜ķúBˆ0)‰qIĪ#_ķú€I0)‚LÕ#úLE)úLr)šäwBüRus‚e š™°đĀķüPsüQuŖŲĀ-e é-e Š3ˆØdOWôúBˆ…)ŠqIđd#ôú€I…)‚L #úL˜)úLÅ)š/wBüRuse†ôÃwõLe T'e ~-e ‰3ˆTOūôúBˆØ)‰qIT#Åôú€IØ)‚LZ#úLí)úL*šiwBüRusÄ\sōö\ ūe š °đ?õüPsüR0üQuŲ4-e n-e wö\ ‡ö\ âŨI߇͋õŗõā ”ŗõŪ‡BĘ œ'âî‰QŅ ĄDbCßŖÍĮõÜõā ”ŗõāļÄ%ũę$`„Õœôõ”÷˙ ”äG‘ e‰÷ŸSJ÷$-*îŲ='ö͉_Y`„LöønYŸ‰ {„ -vöú9E*ú/\*Џõ „@eY öúĮõo*ĩ„za ŠyYȄXe)Ęöú„Y‡*Մķ;Š|õՄpe)Q÷ú•õŸ*ú‹õŊ*„ã„2…¤õÕ*ŠÜZㄈeŅ ;÷úôZķ*úįZ +ņ„B_ … g  …]_ ‰¸õ… Y~÷øĮõōö)…za š„æņ5…ö\ ũ)@…†œŦ÷3û˙ ”äG‘ eûŸˇ”€č)+ŠįņO…Āe”ÎøúōX+øöņōÃ÷‹É÷O…Āe†úØ÷X+čeÂø…ä÷+‰cPՅ<_øú„PÛ+ƒwPé…:$‰cPė…<øú„P,ƒwPũ…:$U…Úb Յûé †=†}֐ž†}֐d…đb Š:g…f•ųúI,‹ j…(fđú/H,|…sĄŠՊ|…Hf•úúäŠi,‹ŦŠˆ…hf¸úˇŠ|,úʏ,Œ†Šˆ…hfMĀú•Š|,úŸŠ,Œ_Šˆ…hf …úqŠ,‹3ˆˆ…hfŌúBˆ­,‰qIˆ…#Ņųú€I­,‹LŽ…€f#úLĪ,úL-šˆ†wBüRudŠō™…˜f•íúú"ō6-‹Åö™…˜fˆúÔön-¸f…āö—-‰cP5†Hˆúú„PË-ƒwPI†:$‰cPL†H¸úú„Pķ-ƒwP]†:$Ļ…Äb 5†ûéj†=r†}֐˜†}Ö‚ō †•ú"ō .̆Åö †ö\ ŗ†ö\ Ɔö\ äU Š EûZûā ”ZûāļÄ%t5÷3û YІœ{û™ûøEû‘؆0Žä†”÷áĮîûv°A{°AŪ†°AŪ:‡°AŪD°Aâī__naîßžũû2üā ”xië__nŽV¸ë__sŽœ'âîC“ąžáķƒüCI°A!i°Ač†0D°Ač:‡0D°AčD0E°AâæŅ>0G°AũøŊ~œ›ü ˙ ”¤i‘œâĸG&¸#.Ĩ__xG ‘āf@ ĒęĨQ)ļ‘T‰T%LqũúhĨ.ú€š.útë.%MŊú'Ĩ.ú=š.ú1ë.ņ€"! ‚ú /úI/‘=Šņ€FgQũƒ úu/‘eŠŦßhgSÉūúãßą/úÖßã/ƒÉß‹Ëhg‚úSËą/úFËã/ƒ9Ë‹‘Ęhg_úŌĘą/úÅĘã/ƒ¸Ęg…áĘ-0‹™ûhgVúĐûe0úÃûą0ƒļûg…ßû1‚HʐúdĘ(1úZĘJ1‹vS–0gŌúSl1ú…S1ŠūŠHʲHgW˙údĘŸ1ƒZĘ‹vSĩ`gŌúSÁ1ƒ…SÎūŠ_Š΀gW¯˙úqŠû1‹3ˆΠgŌúBˆ2ŠqIÎĀg#u˙ú€I2‹Lרg#úL?2úLa2šîwBüRu[‚_О%WúqŠ2‚3ˆ˛%ŌúBˆ”2‰qI˛# ú€I”2‚L¸#úLŠ2úLÖ2šĮwBüRu[đg îC^ąžŸ0=`ąžé2ŸYWaöˇ/3Ÿ€oböˇs3Šîûđh_ úü.4úüf4úũû’4h…#üž4‰^iđ ī ƒmiƒmi‚CŊũ“úcŊķ4ƒWŊŠ+ā0h`9 ƒUāúHā+5ŠÔË`haĀ úã˃5ƒíˍ`hĢËĒúļ˯5ƒÂˏ€ËMļúË¯5úĨËÃ5ú™Ë×5#r] ŠT)€hiN úhë5ú€˙5útE6Œ)€hMŊú'ë5ú=˙5ú1E6Œņ€4˜h ‚ú Ļ6úė6‘QŠLßV°hrĶ ƒ™ßúŒß#7ƒßúrß–7‹ôŪV°h0.ƒAßú4ß#7ƒ'ßúß–7‹ŖŪV°h0úØŪ#7ƒĖŪúĀŪ–7°h…æŪŠ7Œ2üV°h0~úgü#7ƒ[üúOü8°h…uük8’hŪ`&0Ku ú‘Ū~8ƒ…Ūņ€d"Sú Â8ƒ‘ƒ’™ĖQ 0P¯ ƒšĖú­Ė9„Q \ E-e Qe d'e ŠLߝØhy\ ƒ™ßúŒß29ú߁9ƒrß‹ôŪØh0.ƒAßú4ß29ú'߁9ƒß‹ŖŪØh0úØŪ29úĖہ9ƒĀŪØh…æŪĐ9Œ2üØh0~úgü29ú[ü9ƒOüØh…uü:’hŪ°!0Kú ƒ‘Ūú…ŪS:ņ€´Sƒ ú”:‘Î’™ĖŸ 0P8 úšĖČ:ú­Ėæ:„Ÿ Ē EŸe ˛'e i-e ‰ČĖä+ˆ‹ ƒũĖúņĖ;úåĖ2;™Ėä+—úšĖ;ú­Ė2;„ä+ Eä+~ú*E;úEE;xĖøgúŒĖc;_Šø]úqŠc;‚3ˆøŌúBˆ›;‰qIø#L ú€I›;‚Lū#úL×;úL<š wBüRu\‰ŗ3Š ƒ,ŗƒBŗú6ŗ1<„3č˛: ˛ƒķ˛ƒ ŗú˙˛E<Ŋ˛: Mšƒ˞ƒâ˛úÖ˛E<Cá\ ‰ČĖđ„„ ƒũĖúņĖY<úåĖx<™Ėđ—úšĖY<ú­Ėx<„đū E‰ŗ… ƒ,ŗƒBŗú6ŗŒ<„č˛ ˛ƒķ˛ƒ ŗú˙˛¸<Ŋ˛ Mšƒ˞ƒâ˛úÖ˛¸<á\ ‰ŦŠ*é ƒˇŠúÊĖ<†Š*Mƒ•ŠúŸŠĖ<_Š* …úqŠĖ<‚3ˆ*ŌúBˆā<‰qI* #­ ú€Iā<‚L3#úLø<úL%=šBwBüRu\æe 'e 'e u-e Đö\ ÂAßpŧ1 I ā ”¤ië__x‘I "Bũį(đ†Ęœf Å ˙ ”äG‘¤}J‹Å ‘iĻ Ÿˇ€č8=Šįņ‡ i˜ úōt=øöņō ‹É÷‡ i†úØ÷t=HiŒ …ä÷¨=‰cP¸‡<) ú„P>ƒwPˇ:$‰cP·<Y ú„P*>ƒwPā‡:$‡Úb ¸‡ûéī‡=ø‡}֐˛ˆ}֐‡đb Š:‡hiŽŪ úIB>‹ !‡€iđú/o>3‡sĄŠ" ;‡˜iŽ  ú; >ú1 ģ>‰TG‡(•• úh?ú€3?útS?G‡(MŊú'?ú=3?ú1S?ņ€K‡$ ‚ú ?úŸ?‘f‡uˆƒüŠōx‡°iŽ ú"ōË?‹Åöx‡°iˆúÔö@Đi…āö!@‰cPˆH ú„PU@ƒwP.ˆ:$‰cP1ˆHJ ú„P}@ƒwPBˆ:$…‡Äb ˆûéOˆ=Wˆ}ÖŠˆ}Ö‚ō’ˆŽú"ō•@ˆÅö’ˆö\ Ĩˆö\ ēˆö\ ÂAä0 ž Ü  ā ”ZûŪˇÎž œ'Ū ž %Ū-Bž  âî}J  )ļ5÷Ę ŋûˆÅœ? t øÜ ‘øæ ‘øķ ‘ø ‘ øii ¨ ‘dŠīæĈ jŖ   úį­@čˆ&b‰G͈   úYũ@‚˜Œ͈Ōú§ŒFA‚XŒ͈ŧƒ~ŒúqŒ§AúgŒFAŠvSčˆ8jŖ < úSģAú…S%BôˆūŠ3ˆôˆPjŖ ´ úBˆ†BŠqIôˆpj#{ ú€I†B‹Lũˆˆj#úLØBúLCš8‰wBüRugŠ_Љ jĨ H úqŠ2C‹3ˆ‰ĀjŌúBˆnCŠqI‰āj# ú€InC‹L‰øj#úLĒCúLæCšG‰wBüRs‰_ŠN‰ Ĩ Ü úqŠD‚3ˆN‰ ŌúBˆD‰qIN‰#ĸ ú€ID‚LT‰#úL.DúL[Dšc‰wBüRug‰3ˆn‰Ŗ T øBˆuhŸ‰qIn‰# ø€IuhŸ‚Lt‰#úLnDúL›Dšƒ‰wBüRug ‰0‰N l‰ö\ ęÃ/… • ā ”ÆE• n8›Iķčœú CI\8!i\8††0D\8ŽDą:‡0D\8‘ąD0E\8‘kī ŗŅ>0G\8ãD—>Ú (k0KV úgÚ Eú[ÚCEŒt $@kSú nEú… —E’3ˆ}/Ë úBˆĩE‰qI}#’ ú€IĩE‚Lƒ#úLĘEúL÷Eš’wBüRug’3ˆ’/B úBˆ F‰qI’#  ú€I F‚L˜#úLFúLLFš§wBüRug‘8‘M‘\’ÎŖ˛0PĐ úîŖ_FúâŖ}F„˛ĄŖ˛~úÁŖ_FúĩŖ‘F€Ŗē gú”ŖŊF‘Ő˛e Ö'e ß-e čö\ á\#? v\8{\8Ū†v\8Ū:‡v\8ŪDv\8ęÜ/P ` ā ”ÆE` n8ߥ~t Š ā ”Ędë__nŽÚxë__sŽœ'âîC“5ũ|~hœÁ g# ˙ ”ĸ¤‘¤âĸGĒx‘Ĩ__xGg# ‘XkĒ ĒęĨQë‘LŠũˆ€kL ú‰ŨFú)‰ Gú‰8GŒÁˆ€kMŊúЈŨFúæˆ Gúڈ8GŒt ˜k ‚ú aGú… G’3ˆ/ úBˆšG‰qI#Ë ú€IšG‚L"#úLÎGúLûGš1wBüRuT’3ˆ1/{ úBˆH‰qI1#B ú€IH‚L7#úL#HúLPHšFwBüRuT‘4‘I‘XŠt ^°kQē ú cHú… ›H’3ˆŅ/0 úBˆ×H‰qIŅ#÷ ú€I×H‚L×#úLėHúLIšæwBüRuS’3ˆæ//§ úBˆ,I‰qIæ#n ú€I,I‚Lė)#úLAIúLnIšûwBüRuS‘y‘Ž‘‰ú ĻZSc ú1 Iú$ ĻIú äI‚ŧĻZ‚úĀŧIúŗŧĻIúĻŧäI‚ūģĻZ_ú?ŧIú2ŧĻIú%ŧäI„ĻZ…NŧøI‚‡ģĻZVúžģ0Júąģ|Jú¤ģäI„ĻZ…ÍģáJ‚? Ā:úZ ôJúP #K—vSÆØk/ú úSRKú…SeKĶū’vSŪ/- úS’Kú…SņKčūvSđ /úS8Lú…SrL÷ūŠ? økW" úZ ŸLúP ÁL—vSl/ŋ úSāLú…S2Mū—vS%8l/ō úSbMú…S´M4ūŒvS5Xl/úSÔMú…SNFūŠČlF€lWŖ úŲlIN—3ˆF l/¸ úBˆkNŠqIFĀl# ú€IkN‹LOØl#úLNúL¯Nš€wBüRuS—3ˆVđl// úBˆÍN‰qIV#ö ú€IÍN‹L\m#úLīNúLOšŠwBüRuSŒ3ˆc m/úBˆ/O‰qIc#i ú€I/O‹Li8m#úLQOúLsOš”wBüRuS‘ɝPmR# îC^5Ÿ0=`5‘OŸYWazxÆOŸ€obzx PŠe –pm_} ú‹ ŸPú~ įPút Qpm…š KQ‰°d– Y ƒŋdƒŋd‚CŊŖ“úcŊ€QƒWŊŠŧÛĢ˜m`Ŗ ƒæÛúŲÛČQŠÎŊžĀma* úŨŊ0RƒįŊĀmĨŊžĒú°Ŋ\RƒŧŊzŊžMļú‰Ŋ\RúŸŊpRú“Ŋ„RĮr] ŠũˆÍØmi˛ ú‰™Rú)‰­Rú‰ûRŒÁˆÍØmMŊúЈ™Rú戭RúڈûRŒt Ōđm ‚ú KSú… ™S’3ˆã/& úBˆØS‰qIã#í ú€IØS‚Lé#úLíSúLTšøwBüRuT’3ˆø/ úBˆ-T‰qIø#d ú€I-T‚Lū#úLBTúLoTš wBüRuT‘æ‘û‘ Š"Û nra ƒoÛúbÛ‚TúUÛēTƒHÛ‹ĘÚ n0.ƒÛú Û‚TúũÚēTƒđÚ‹yÚ n0úŽÚ‚TúĸÚēTƒ–ڍn…ŧÚæTš Š"Û# ny ƒoÛúbÛUƒUÛúHÛGU‹ĘÚ# n0.ƒÛú ÛUƒũÚúđÚGU‹yÚ# n0úŽÚUƒĸÚú–ÚGU n…ŧÚgU/š ŠũŖ:8nˆ! ƒ2¤ú&¤ŸUú¤ŊUŒÎŖ:8n—ƒîŖƒâŖ8nŒĄŖ:8n~ƒÁŖúĩŖĐUŒ€Ŗ@Pngú”ŖîUŒČl@Pn]úŲlîU—3ˆ@pn/, úBˆ1V‰qI@#ķ ú€I1V‹LFˆn#úLmVúLVšĢwBüRuT—3ˆM n/Ŗ úBˆ­V‰qIM#j ú€I­V‹LS¸n#úLéVúLWšĄwBüRuT3ˆa/úBˆ6W‰qIa#Ũ ú€I6W‚Lg#úLWúLÆWšvwBüRuT‰Ŗ¯ŠĢ! ƒŖƒ%ŖúŖŲW„¯Ëĸŗ ˛ƒÖĸƒîĸúâĸėW ĸŗ Mšƒ¯ĸƒÅĸúšĸėWŧá\ ŠŖ Đn…6" ƒŖƒ%ŖúŖ˙WĐnËĸ ˛ƒÖĸƒîĸúâĸX ĸ Mšƒ¯ĸƒÅĸúšĸX+á\ ‰ũŖC„Č" ƒ2¤ƒ&¤ƒ¤ÎŖC—ƒîŖƒâŖ„CĄŖC~ƒÁŖúĩŖ'XŒ€ŖLčngú”ŖjX‘X‰ڒm # ƒå’úņ’–X´’m MƒÒú͒–X‘ve 3'e <e je -e Ue Ņö\ ö\ n8ßô|{# “# ā ”ĸ¤ë__x‘“# Î8¯˜Ų‰ōœ°# ú% ˙ ”ôU‘¤3’œú% ‘‰Üĸ‰í# ú'ÜŠXŠ2Üļ‰oĪ% úNÜÖXúDÜôX‹l# ļ‰oĀú…# ÖXú{# 5YŠũˆž‰8o•Ã% ú‰|Yú)‰ĢYú‰ÉYŒÁˆž‰8oMŊúЈ|YúæˆĢYúڈÉYŒt ‰Po ‚ú įYú… Z’3ˆKŠ /7% úBˆ#Z‰qIKŠ#ū$ ú€I#Z‚LQŠ#úL8ZúLeZš`ŠwBüRug’3ˆkŠ/Ž% øBˆs Ÿ‰qIkŠ#u% ø€Is Ÿ‚LqŠ#úLxZúLĨZš€ŠwBüRug‘։‘뉑ú‰>ŠŠ ‰aÜ Šžī% úsܸZiŠö\ n8÷2Ü\LŠŧœ& ô' øDÜ‘øNÜ‘Šl# ŸŠhoĀé' ú…# ÎZú{# [Šũˆ§Š€o•Ū' ú‰^[ú)‰€[ú‰Â[ŒÁˆ§Š€oMŊúЈ^[ú戀[úڈÂ[Œt ̊˜o ‚ú ā[ú… "\’3ˆ‹ /R' úBˆ@\‰qI‹#' ú€I@\‚L‹#úLU\úL‚\š*‹wBüRug’3ˆ5‹/É' øBˆs Ÿ‰qI5‹#' ø€Is Ÿ‚L;‹#úL•\úLÂ\šJ‹wBüRug‘ŋŠ‘Ԋ‘㊐‹Š 3‹ö\ ÷~ÜēŌP‹šœ( č) øÜ‘ø™Ü‘—l# _‹°oEŨ) ú…# Õ\ú{# #]Šũˆg‹Čo•Ō) ú‰Y]ú)‰w]ú‰š]ŒÁˆg‹ČoMŊúЈY]úæˆw]úڈš]Œt k‹āo ‚ú ×]ú… ^’3ˆŌ‹ /F) úBˆ7^‰qIŌ‹# ) ú€I7^‚L؋#úLL^úLy^šį‹wBüRug’3ˆō‹/Ŋ) øBˆs Ÿ‰qIō‹#„) ø€Is Ÿ‚Lø‹#úLŒ^úLš^šŒwBüRug‘‹‘”‹‘Ŗ‹ˋŠ đ‹ö\ ũߌšœ* , ˙ ”ĸÅ‘¤3’G , ‘Š~Ü"ŒøoHū+ ú™ÜĖ^úÜ_Œl# "ŒpEú…# Ė^ú{# _Šũˆ*Œ(p•ō+ ú‰8_ú)‰V_ú‰˜_ŒÁˆ*Œ(pMŊúЈ8_úæˆV_úڈ˜_Œt .Œ@p ‚ú ļ_ú… ø_’3ˆ’Œ /f+ úBˆ`‰qI’Œ#-+ ú€I`‚L˜Œ#úL+`úLX`š§ŒwBüRug’3ˆ˛Œ/Ũ+ øBˆs Ÿ‰qI˛Œ#¤+ ø€Is Ÿ‚L¸Œ#úLk`úL˜`šĮŒwBüRug‘BŒ‘WŒ‘fŒ‹ŒŠ °Œö\ n8á~ķu, CI"9!i"9č†0D"9č:‡0D"9čD0E"9õb, æŅ>0G"9CI"9!i"9ä˜Ī‡, —, ā ”vB—, 49§, ō;ĢœZ. ú+, Ģ`ø7, ‘øC, ‘XpO. …U, Õ`—ĢÜ pp0Kļ- úÔÜ˙`úČÜ*aŒu, $ˆpSú‘, Uaú‡, sa‰3ˆX΍- úBˆ‘a‰qIX#o- ú€I‘a‚L]#úL¤aúLŅašlwBüRug‘.‘=’aĻw0P0. úĻäaúuĻ÷a„w4Ļw~úTĻäaúHĻ bĻ gú'Ļ7b‘Аwe ›'e ĸ-e Ģö\ áų¯. v"9{"9Ū†"9Ū:‡"9ŪD"9âī__nīžß´ˆž. ķ. ā ”édë__nŽí‚ë__sŽœ'âîC“H‰ũˆÎœ / ˜= ˙ ”5§‘¤âĸGŊ‚‘Ĩ__xG˜= ‘ p%4 ĒęĨQģ‘XŠ|‰ĀpL^0 ú‰Wbú¨‰ƒbúœ‰ĘbŒ@‰ĀpMŊúO‰Wbúe‰ƒbúY‰ĘbŒu, Øp ‚ú‘, ķbú‡, :c‰3ˆĻĪO0 úBˆcc‰qIĻ#0 ú€Icc‚LĢ#úLvcúLŖcšēwBüRu`‘,‘;Šu, AđpQ 1 ú‘, ļcú‡, d‰3ˆ‚$Ī˙0 úBˆBd‰qI‚#Æ0 ú€IBd‚Lˆ#úLWdúL„dš—wBüRu_‘W‘c‰īŨl9S„2 ú&Ū—dúŪÂdú Ūúd‚Āžl9‚úŋ—dúôžÂdúįžúd‚?žl9_ú€ž—dúsžÂdúfžúd„l9…že‚Z. l9Vú‘. —dú„. Feúw. úd„l9… . ˜e‚öŊ‚úžšeúžÛe‰vS‚ĪM2 úSųeú…S fū‚vS” ĪúSfú…S4fžūŠöŊĨqW3 úžIfúžƒfŠvSĨ0qĪá2 úSIfú…Sƒf´ū‹vSĩHqĪúSŖfú…SčfÆūŠaoÆpqW4 úsogŠ3ˆƐqĪŠ3 úBˆ:gŠqIưq#p3 ú€I:g‹LĪČq#úL\gúL~gšķwBüRu_‹3ˆÖāqĪúBˆœg‰qIÖ#ä3 ú€Iœg‹LÜøq#úLžgúLāgšũwBüRu_‘zrƒ= îC^H‰Ÿ0=`H‰ūgŸYWa‚3hŸ€ob‚khН. ˙(r_ø4 úÕ. ūhúČ. 6iúž. bi(r…ä. Ži‰Īd˙Ô4 ƒŪdƒŪd‚CŊ“úcŊÃiƒWŊŠN“Pr`5 ƒx“úk“ûiŠØŋ$€raĨ5 úįŋSjƒņŋ€r¯ŋ$ĒúēŋjƒÆŋ„ŋ$Mļú“ŋjúŠŋ“júŋ§j-r] Š|‰3 rią6 ú‰ģjú¨‰Ījúœ‰kŒ@‰3 rMŊúO‰ģjúe‰ĪjúY‰kŒu, ?¸r ‚ú‘,  kú‡, đk‰3ˆđĪĸ6 úBˆ$l‰qIđ#i6 ú€I$l‚Lø#úL8lúLelšwBüRu`‘I‘ZŠŨ_Đrr9 ƒÜŨúĪŨxlúÂŨČlúĩŨÜl‹7Ũ_Đr0.ƒ„ŨúwŨxlújŨČlú]ŨÜl‹æÜ_Đr0úŨxlúŨČlúŨÜlĐr…)ŨīlŒ, _Đr0~úC, xlú7, Člú+, ?mĐr…U, ~m—ĢÜpčr0Kn8 úÔÜÚmúČÜnŒu, tsSú‘, Fnú‡, on‰3ˆkĪ`8 úBˆ˜n‰qIk#'8 ú€I˜n‚Lp#úLĢnúLØnšwBüRu`‘~‘’aĻŠ'0Pã8 øĻVøuĻuP„Š'4ĻŠ'~øTĻVúHĻënŒĻ›sgú'Ļ.o‘§Še ļ'e Ŋ-e ŠŨ›0syļ9 ƒÜŨúĪŨZoƒÂŨúĩŨƒo‹7Ũ›0s0.ƒ„ŨúwŨZoƒjŨú]Ũƒo‹æÜ›0s0úŨZoƒŨúŨƒo0s…)ŨŖo­, АώPsˆM; ƒÅĻúšĻÛoú­ĻpŒaώPs—ƒĻƒuĻPsŒ4ώPs~ƒTĻúHĻpŒĻģhsgú'Ļ7pŒaoģhs]úso7pŠ3ˆģˆsĪĶ: úBˆzpŠLģ s#ļ: úLÃpúL qšéwBüRu`‚qIÔ#ú€Izp‹3ˆĀ¸sĪúBˆq‰qIĀ#; ú€Iq‹LÅĐs#úLUqúLwqšwBüRu`‰“ĨŠÜ; ƒĸĨƒ¸ĨúŦĨ•q„^Ĩ ˛ƒiĨƒĨúuĨ¨q3Ĩ MšƒBĨƒXĨúLĨ¨q#á\ ‰ĻĖ$„n< ƒÅĻƒšĻƒ­ĻaĻĖ$—ƒĻƒuĻ„Ė$4ĻĖ$~ƒTĻúHĻģqŒĻÕčsgú'Ļūq‘ናĨt…ų< ƒĸĨƒ¸ĨúŦĨ*rt^Ĩ˛ƒiĨƒĨúuĨ>r3ĨMšƒBĨƒXĨúLĨ>r%á\ ‰Q”@F= ƒ\”úh”Rr+”@Mƒ:”úD”Rr‘KÅe e -'e 6e f-e Æe ‚ö\  ö\ 49áŽ#â= {%fSrÍ ĩŪ† ĶfSŪ:‡ ĶfSŪŖ¨ Ô ĩáĘ0> rÍ ĩčŖ¨,ė ĩáĀ#E> ĩRfSrÍû.č† ŸfSč:‡ ŸfSčŖ¨ Ÿû.߇T> l> ā ”5§ë__x‘l> ”9ĢąÆЌšœŒ> lL ˙ ”QV‘¤ĖsÆlL ‘¤š ĮqL ‘tWL ŸˇË€čfrŸ›SĖM‰ŖrŠįņ@tËß? úōírøöņōÃ> ‹É÷@t†úØ÷írhtĶ? …ä÷"s‰cP}Ž<p? ú„PasƒwP‘Ž:$‰cP”Ž< ? ú„P‰sƒwPĨŽ:$ Úb }Žû鐲Ž=ēŽ}֐ }֐đb а9ˆtÎ@ úÉĄsúŋ t‘CŠNŪC tÎQ@ ú]Ū‘t‹zpC t6ú“pÍtƒ‰pŠ4ŪK¸tΓ@ úCŪ u‹zpK¸t$ú“p uƒ‰pŠ= NĐtÎ$G úÔ= EuúĮ= šuúē= ÚuŠøcNu Ũö@ údEuú d:v‘[Šâ= \ u ŨģB úö= ąv—øc\Hu,íDA údąvú dw‘g—ŋ‰hhu,í˜A ú؉|wúΉŨwŒøchhu,áúd|wú dŨw‘v—ę‰vˆu,í+B úü‰„x‹3ˆv¨uZúBˆÍxŠqIvČu#ņA ú€IÍx‹L‚āu#úLŋyúL zšwBüRwę‰–,íúü‰+z‚3ˆ–ZúBˆ+z‰qI–#€B ú€I+z‚Lœ#úL@zúLmzšĢwBüRudŠ> øu ŨĄD ú8> €zƒ,> ƒ > ’ߓ ĸ:C úú“€zúđ“Özøc ,Üúd€zú dÖz‘——”Ģv ĸčC ú”,{Œę‰Ģ8v,Üúü‰‚{‹3ˆĢXvZúBˆō{ŠqIĢxv#­C ú€Iō{‹Lˇv#úL–|úLė|š(wBüRu`’”] ĸ–D ú” }ę‰],Üúü‰ }‚3ˆ]ZúBˆ }‰qI]#[D ú€I }‚Lc#úL}úLL}šrwBüRu`ĢÔjŠ”¨v ŨPE ú”_}Œę‰Āv,Üúü‰_}‹3ˆØvZúBˆĩ}‰qI#E ú€Iĩ}‹Lȍđv#úL?~úL•~š7wBüRwŠę‰Ķw ŨäE úü‰ŗ~‹3ˆĶ wZúBˆ ‰qIĶ#ĒE ú€I ‹LŲ8w#úLyúLĪšGwBüRw‰ę‰Ģ ŨxF úü‰í‚3ˆĢZúBˆí‰qIĢ#>F ú€Ií‚Lą#úL€úL/€šĀwBüRuT‚”= Ũú”B€ę‰= ,Üúü‰B€‚3ˆ= ZúBˆB€‰qI=#čF ú€IB€‚LC#úLW€úL„€šVwBüRu`Šę‰äPwθG úü‰—€‹3ˆähwZúBˆ—€‰qIä#~G ú€I—€‹Lę€w#úLí€úLCšWwBüRwŠ3ˆõ˜wÎ0H úBˆa‰qIõ#÷G ú€Ia‹Lû°w#úLˇúL ‚šgwBüRwŠNŪŽČwĪrH ú]Ū+‚‹zpŽČw6ú“pt‚ƒ‰pŠ8+ŽāwĶÄH úQŊ‚ƒG‹vS+ŽxäúSŊ‚ƒ…S9ŽūŠ3ˆ9Ž xĶ ȎpxĐ”J ú^> qƒúT> ЃŠ|‰Ņސx•‰J ú‰؃ú¨‰úƒúœ‰&„Œ@‰ŅސxMŊúO‰؃úe‰úƒúY‰&„Œu, Վ¨x ‚ú‘, 9„ú‡, e„‰3ˆũĪzJ úBˆx„‰qIũ#SJ ú€Ix„‚L#úLŒ„úLĄ„‘᎑öސŒķ. ‰ę‰ĀÎ(K úü‰´„‚3ˆĀZúBˆ´„‰qIĀ#îJ ú€I´„‚LƏ#úLɄúLö„šՏwBüRuT‰3ˆՏΠK úBˆ …‰qIՏ#gK ú€I …‚Lۏ#úL…úLK…šęwBüRuT‰ōęĶĘK ú"ō^…ķÅöŠ3ˆ ĀxĶ@L øBˆuTŸŠL Øx##L øLudŸøLPšwBüRw‚qIv#ø€IuTŸįŒ(Ñ7‘*ސûö\ (ö\ Ē149ũŊßœŽL O ˙ ”lH‘¤š ĐO ‘đxO ĒĖsŅÄ6‘lŸæHŌŦ9v…‰˜Œ›Ņ"M ú§ŒŸ…‚XŒ›ŧƒ~ŒúqŒ†úgŒŸ…Šq^ŦyÕ|M úŠ^8†ú€^P†‹’ŗŦy3úĢŗ8†úĄŗP†ŋOŠ3ˆؐ(yŪôM úBˆp†ŠqIؐHy#ģM ú€Ip†‹Lá`y#úLŦ†úL膚(‘wBüRusŠq^úxyØNN úŠ^‡ú€^‡‹’ŗúxy3úĢŗ‡úĄŗ‡ ‘O‰q^0‘Û‚N úŠ^>‡ú€^V‡A‘’ŗ‰3ˆQ‘ŪúN øBˆutŸ‰qIQ‘#ÁN ø€IutŸ‚LW‘#úLv‡úLŖ‡šf‘wBüRusؐq> o‘ö\ 49ßâ$O IO ā ”vBŪĄYÔIO ŪŠŪÔNO Ē1Ē1ũ-(p‘˛œkO Q ˙ ”äG‘ĨkeyQ ‘¤Ü/†Q ‘ŠO u‘yPP ú;O ļ‡ú.O ú‡ú$O >ˆ‰3ˆņ‘ÕCP úBˆˆ‰qIņ‘# P ú€Iˆ‚L÷‘#úLՈúL‰š’wBüRuo‘„‘‘’‘Šao ‘¸y\Q úso‰Š3ˆ ‘ØyĪįP úBˆg‰ŠqI ‘øy#ŽP ú€Ig‰‹LŠ‘z#úLŖ‰úL߉šБwBüRuo‹3ˆ°‘(zĪúBˆ ŠŠqI°‘@z#"Q ú€I Š‹Lļ‘Xz#úL-ŠúLOŠšč‘wBüRuo ‘vL ’ö\ ‘’"’ö\ Ē1Ē1§dË,0’œĘQ øo‘ø|‘8’0I’SO ēyP’œƒU Ĩkey~ƒU ‘¤Ü/~%‘pzxU Ēßõįû‘dŠ@c`’z€]R ø`cōîQ úVcmŠz…|cq’=Šīær’¨z‡R úįœŠ’&bŠd”’ČzÅR ú|؊úo(‹™’0Ļ’SO Š3ˆĻ’āz=S úBˆ`‹ŠqIĻ’{#S ú€I`‹‹L¯’{#úL˜‹úLĮ‹šč’wBüRukŠ3ˆļ’0{ĩS úBˆõ‹ŠqIļ’H{#|S ú€Iõ‹‹Lŧ’`{#úLŒúL7Œš˙’wBüRs‰MįҁT ú^įUŒkÒUúkUŒ‚åjÒúūjwŒúôjUŒ‰MᓁwT ú^į‹Œk“Uúk‹Œ‚åj“úūj Œúôj‹Œ‰3ˆ!“īT úBˆ´Œ‰qI!“#ļT ú€I´Œ‚L'“#úLɌúLöŒš6“wBüRuk‰3ˆ6“gU úBˆ ‰qI6“#.U ú€I ‚L<“#úLúLKšK“wBüRuk`’īį‘‘’“ö\ Ē1Åú1ĒœâW ‹*Ą.n•–*Æĸ*˙˙‰˜Œŗ u V ø§ŒŸ‚XŒŗ ŧƒ~ŒúqŒ^úgŒ„‰˜ŒR g\V ø§ŒŸ‚XŒR ŧƒ~ŒúqŒŦøgŒŸŠŌÕsx{ĻŧV øáÕŸ‹%xsx{ø4xŸŒxsx{}øxŸ‘%Öc 3a Fa Ya ov ‘‚™Öc Ēv ‘šĐÖc áv ‘đÖc a (‹ ;‹ Na a‹ wv ‘†Öc Ģa ŅÖc ėv ‘ûÖc  a ‘8OÖc pÖc ĨÖc ĮĢF¨X“ĮÖFŠX“ĮžčFĒX“ČĄŪŽÉį/Éö/É0É0É#0É20ÉA0ÉP0É_0Én0É}0ÉŒ0É›0ÉŦ0ÉŊ0ÉÎ0Ęß0dÉė0ģÉû0§ ģÉ 1 GÉ1 $íÉ)1} YûÉ91k ĢûÉI1X ģÉY1@ ĒÉi1 čÉu1 čɁ1ė ëɍ1ä ĘŨ2ÉđøËų˙˙˙˙˙˙˙ÉųėÉ,ųÉ@ųĮčÉOųĶ 0É_ųŋ ģÉoų§ ÉųɐųģÉĄų ĮčÉąų~ ĮčÉÁųm ÆęÉŅųg ŧëÉáų` ĄįÉņųU ŧëÉúN ĄįÉúC 9čÉ!ú7 ŧëÉ1ú0  ÉAú( YûÉQú ĮčÉaú ĮčÉqúô ˁúŸ†É‘úÉ úĘąúÍŋú˙ÍÎú˙˙ĖŨú˙˙2ęÉîúę ĄįÉ˙úß t%˜[ ļy'ž †[ Éû@É!ûāĘ,ûLĘ9ûRĘFûTĘSûIĘmû/GÉzû5¤éɈûĘ—ûʤû€ėÉąûôÉÂûÔÉÎûĐÉÚûĖÉ$øÎ)FĪ+4aP€€€€xĐ64ŌĶ˙˙˙ŅÖ8}õ Ņ9“€Ī99ęÄ€€~ŌD9*H˙ĶšĻŦôĶđÛ*=ŅFF‡AĶ1Ņ<ŅŽŅ60s7„7Dö\ ŽÔĘÆ‡ö ] ŽÕØĀi§%"] % CFj%9] œ'mÕŽ˜͝9%Q] œ' [°F‚%r] °*'œ'm4š77€Ë9Ž‹] đՑƤ°*¨] œ'%EĮŋgG%Â] Â] X>vĄŽEœ/%â] œ'œ' ;†%ũ] œ'œ'E ŅJŦ%^ 5(5(vo$´ļ%W Ō”Fs%F^ ĄDœ'ų& SvFZ%\^ ĄD \ %r^ %Öķ5%†^ †^ v,אøœ^ †^ ÕŨŧ‘%´^ œ'E^ōFō%É^ ĄDÕԑü}Žë^ Ž]9%ÕÃ'/9%_ ]''ĄDĩtôW%_ %ÕmSōް*B_ œ'œ' ÄFĄD]_ œ'œ'E*°Fí%r_ ĄD ͝Ž'ˆ_ œ'Ež÷“%§_ œ'œ'' •čœ°*Ŋ_ %~>m2|:Õĩe6D°*å_ œ'% đ%` %œ'MS G4@% ` œ'Ē4Ú7‚~OŽ9` đÖNļŽW` Ž%y'Æ7†žHl` Ž {ŋ\˙°*‡` °*'ĩ€3]>š` š` v†•ĩØķWãŗ` Ž •Ø]6%Ũ` Ũ` œ''č` %vã` †•vĮ• gvFí%a ĄD@%% ZFō@%$a ĄD K*FÅ'Ia Ž''ĄD Lē\%da %% lØ\a%za %EÛXF˛%a œ'Eg‹n%¤a %E;•nx%ša %EH•KķÎa Îa Ôa vh+vÚa VŽ ŸÄWk%õa °*jdup\% b %E*oq%*b %%%EĢúo‰%Ib %Ib ‰”vOb ¯> ™dk–%yb œ'œ'˙?yb vų?ĩ<“kœ’b ų? sokŸœ'¨b % Zpô%žb žb vˏ š\p%Úb žb "Îpü%đb žb wņpƎ O\n¸’c %]' ¸pī%7c žb 7c v=c ú ŋGFd%^c ĄDœ'm Öp^%tc  kIpaŽŠc Øžvector::_M_insert_aux ˆ^pY%Āc Āc Lv×<+Öc †^ Ö5%ôc LŽŽ $F2ĄDd %œ' dHF=%*d %ĄDÕ*ÁėH%Gd œ'ĄDĩOĐ\[Zd % 7\h¸’zd %Ž'EÕÖqˆÖ™d ֍|:% \Ą%¯d |:wAS\ô֍ č›\ņ%Ņd œ' Ãa\'%ņd œ'īCīCÕ¨p֖%e ]]9%ÖŽ'e ŽŲ‡)Ųũ}ˇFÖá*Ž\e ]a5a5%Ú|`™RÖNŽŽ„e Ž]y'EŸ2nv%™e % ō+pd%´e ]E7¯°*Ée œ' Ab%ée %ée ôe vīe 84v84wn\Ō%E\dr9Ž4f Ž'%%%ĀEöÄsQ%Yf Yf Ž%Žmv„“E^'rL%yf Ž'ET„b×%Žf Žf vį’EŠTt %¯f %%mÖÚŽÃf 9%מ)Ũf ŽŽL×ĩ(íf Ž ø]2% g š` œ'%/FË']''ĄD% U$ > 9: ; : ; : ; : ;  : ; : ; (  : ;  I8 9: ; .?: ;I</II.?: ;I<: ; I.?: ; n<&I.?: ; nI<.?: ;nI<.?: ;nI<.?: ;nI<: ;I.?: ;n<.?: ;nI< : ; I8 2 : ; I2 .?: ; 2 <dI4 .?: ; 2 <d! : ;I8 ".?: ;<d#.?4<d$ : ;I?2 <% : ; I8 & : ; I?<'.?: ; nI<(.?: ; nI<d).?: ; n<d*.?: ;n<d+.?: ;nI<d,.?: ;nI<d-.?: ;nI<..?: ;2 <d/.?: ; 2 <cd0.?: ;nI2 <d1.?: ;nI2 <d2.?: ;n2 <d3.?: ; nI2 <d4.?: ; nI<5/I6<7 : ; 8<9 : ;2 : : ;I?<;.?: ;2 <d<: ;I2 = : ;I?2 < > : ;I?2 < ? : ;I?2 <@.?: ; L 2 <dA.?: ; nI2 <dB.?: ; nI2 <dC.?: ; <D.?: ; <E.?: ; I<F.?: ; I<G.?: ; <dH.?: ; n<dI/IJ.?: ; nI<dK.?: ;nIL M2 <dL.?: ;n<dM : ; N : ;O9P4: ;I<Q:: ;R : ; S.?: ; nI<T.?: ;2 <cdU.?: ;L 2 <dV : ; 2 W : ;X : ;2 Y0I Z : ;I8 2 [.?: ;nI2 <\.?: ; <cd].?: ;<cd^<_.?: ; 2 <d`.?: ; 2 <cda : ; 2 b.?: ; n2 <dc : ; d : ; I8 2 e.?4<df.?42 <dg : ;h.?: ; n2 <di.?L 42 <dj.?: ;I<k4: ; nI?<l4: ; I<mn.?: ; n<o$ > p Iq : ; nr : ; s : ; ItIu!I/ v Iw.?: ;I<x : ; y9: ; z.?: ; I<d{.: ; I<|:: ; } I~.?: ; I< € : ; n : ; ‚ I8 ƒ„&…!† : ; I8 ‡Iˆ: ; ‰ : ;I 8 Š : ;n‹9: ;Œ : ;.?: ;2 <dŽ : ;.?42 <d: ;I2 ‘.?: ; nI2 <’.?: ; <d“.?: ; n2 <d”.?: ; nI2 <• : ;– : ;I— : ; I?2 <˜ : ;I8 ™.?: ;nI2 <š.?: ;nI2 <›.?: ;nI2 <dœ : ;I?2 <  : ; ž : ; 2 Ÿ I8 42  .?: ; nIL M2 <dĄ.?: ; nL M2 <dĸ.?: ;n2 <Ŗ.?: ;n2 <¤ : ;Ĩ.?: ;nL M2 <dĻ.?: ;nI2 <§.?I4<d¨ : ;Š : ;2 Ē : ;I8Ģ.?L 42 <dŦ.?: ;n2 <d­.?: ; nIL M2 <dŽ : ;2 ¯.?nI42 <d°.?: ;n2 <dą.?: ;nL M<d˛9ŗ.?: ;L 2 <d´.?: ;<ĩ.?: ;<ļ/ˇ.: ;I<¸.G<š.: ;I<ē.: ;<ģ.?: ;n<ŧ.: ; <Ŋ4: ;nI?<ž4: ;I<ŋ4: ; nI?<Ā4: ; I<Á4: ; I<Â4: ;I< Ã4: ;I<Ä4: ;I<Å4: ;I<Æ4: ; I< Į4: ;I?<Č4: ; I<É.?: ; I2 <dĘ.?: ; I2 <dË.?I42 <dĖ.?: ;I2 <dÍ.?: ;I2 <dÎ.?: ;n2 <Ī.?: ;n<dĐ.?: ;nIL M<dŅ.?I42 <dŌ.?: ;nIL M<dĶ.?: ;nL M2 <dÔ.?: ; nL M2 <dÕ.: ;I<Ö.?: ;L <d×.: ; I<Ø : ; Ų : ; IÚÛ: ;Ü : ; Ũ.?: ;I Ū: ;Iß.G dāI4á.G â ã4: ; Iä.G: ; då.: ; I æ4: ; Iį5Ič: ; Ié: ; Ię.G: ; dë: ;Iė.?: ; I í.?: ; î4: ;Iī4: ;Iđ.G ņ.G: ; ōdķIdô õ ö.4 ÷.1n@d—Bø1ų.1@—Bú1û‰‚•BüŠ‚‘Bũ.G@d—BūI4˙I4€.G@dI‚1X Yƒ1„ …41†: ; I‡‰‚•B1ˆ.1n@d–B‰1X YŠ1RUX Y‹1RUX YŒ1RUX Y  Uމ‚•B11X Y ‰‚1‘‰‚’1X Y “.1@d–B”.1@–B•1 –.1@d—B—1RUX Y ˜1 ™ š‰‚1›.G@—Bœ: ;I Už4: ;IŸ4: ;I : ; IĄ4: ; Iĸ4: ; IŖ.G: ;@—B¤: ;IĨ: ;IĻ.1n@—B§.1n@—B¨41Š: ;IĒ4: ;IĢ.G: ;@d—BŦ41­.1n@dŽ4: ;I ¯.G@d–B°.G: ; @d—Bą: ; I˛.G@—Bŗ4: ; I´.G: ; @—Bĩ4: ; Iļ!I/ˇ.G;@—B¸41 š‰‚1ē.G@–Bģ4: ;Iŧ.G: ;@–BŊ.G: ;@d–Bž: ; Iŋ.G: ; @d–BĀŠ‚1‘BÁ Â1RUX YÃ4Iĉ‚“BÅ.4@—BÆ1Į4: ; I?<Č4I?4<É4GĘ4G Ë4GĖ4GÍ4GÎ4GĪ4Gn Đ4GnŅ4Gn Ō4GnĶ4GnÔ.?n4<Õ.?nI4<Ö.?I4<×.?4<Ø6Ų.?4<Ú.?I4<‘P‘P%10Ÿ1NP(1R“1GR“GJrŸ“JNR“:NQUa0ŸaxPXaR“aqR“qtrŸ“txR“atrtxQ…‘0Ÿ‘¨Pˆ‘R“‘ĄR“Ą¤rŸ“¤¨R“ĩÁ0ŸÁØP¸ÁR“ÁŅR“ŅÔrŸ“ÔØR“‘‘"RHLu#ŸHLS“LbS“besŸ“elS“ˆS“R^PlxVxzuz~‘…VpxVxzuz~‘™R‘™RS ‘"0Ÿ"1S18sŸ8JSJ‘#Ÿar0ŸrSˆsŸˆšSdš‘#ŸąÂ0ŸÂŅSŅØsŸØęS´ę‘#Ÿ0Ÿ!S!(sŸ(:S:‘#ŸQb0ŸbqSqxsŸxŠSTŠ‘#ŸĄ˛0Ÿ˛ÁSÁČsŸČÚS¤Ú‘#Ÿņ‘+Wņ‘+Vü˙sŸ˙S‘# p2&1Ÿô‘#Ÿ+vŸAV‘V{WAV‘V{VLOsŸOTSTV‘# p2&1ŸDV‘#ŸV{vŸ‘Ļ‘ĻËW‘Ļ‘ĻËVœŸsŸŸ¤S¤Ļ‘# p2&1Ÿ”Ļ‘#ŸĻËvŸáö‘öWáö‘öVėīsŸīôSôö‘# p2&1Ÿäö‘#ŸövŸ1F‘FkW1F‘FkV<?sŸ?DSDF‘# p2&1Ÿ4F‘#ŸFkvŸ‰š0ŸšŠWŠąwŸąÃWŒÃuŸéUéWéVô÷sŸ÷üSüū v p2&1ŸėvŸ0?P?_V_`ķPŸ0?pėŸ?_vėŸ_`ķP#lŸ:HS“HNs|Ÿ“N^S“NVō;A`kPk{S{ŋWŋÉķPŸÉËSËÍķPŸ`”R“Q“ŋÍR“Q“`ˆ0ŸˆŋSÉÍ0Ÿ`ˆ0ŸˆŠUŠąuŸąŋUÉÍ0Ÿk{S{ŋWŋÉķPŸÉËSËÍķPŸĐæPæöSösŸS/sŸ/7S9TSÛæ0ŸæųVų˙vŸ˙V)v~Ÿ)3V9UV`–P–ŸķPŸ`–R–ŸķRŸ`–pŸ–ŸķP#Ÿm{ ˙Ÿm{pŸ€ ˙Ÿ€pŸƒQ pŸ-‘#Ÿ$‘oŸ$(R(-‘oŸ(P(S()‘)FSFG‘(sŸ()‘#Ÿ)FsŸFG‘#Ÿ4‘oŸ48R8G‘oŸ#P)8PawŸab‘#ŸKVS;S;@stŸ@_S#S#'stŸ';S;DstŸ#sŸ#'s|Ÿ';sŸ;Ds|Ÿ'‘oŸ-8‘oŸ8?R?K‘oŸ'P-?PKawŸab‘#ŸKS w w<ŸK`VOS w w<ŸO[V jWjk‘jwŸjk‘#ŸKVS;S;@stŸ@hS#S#'stŸ';S;DstŸ#sŸ#'s|Ÿ';sŸ;Ds|Ÿ'‘oŸ-8‘oŸ8?R?K‘oŸ'P-?PKjwŸjk‘#ŸKS w w<ŸKiVOS w w<ŸO[VBVS2S27s|Ÿ7VSSs|Ÿ2S2;s|Ÿ‘oŸ$/‘oŸ/6R6B‘oŸP$6PBXWXY‘BJ ww4ŸBWVFJ ww4ŸFRV ļRļzWz|ķRŸ|WķRŸ W ļpļ{uT{|tP|ŽuTŽtP uTļ&V&*S*5V:XVĸVÂĶVė VŅßPßíSí<sŸ<LS sŸÂĶSėîsŸŅ ŸÂ ŸŅ{uT{|tP|ŽuTŽtP uT uTņR(svŸ*5svŸŸRŸ svŸėîsvŸņ(V*5V Vė Vņ<W Wė Wņ<Ÿ Ÿė Ÿ P<udŸė udŸ <uTė uT<udŸ<u`Ÿ9P< ˙ŸÂė ˙Ÿ<XVÂĶV<zWz|ķRŸ|WķRŸÂėW<ŸÂėŸXxSx{u`Ÿ{|t\Ÿ|‹S‹Žu`ŸŽt\ŸĶÕSÕėu`ŸX{uT{|tP|ŽuTŽtPĶėuTgxSx{u`Ÿ{|t\Ÿ|‹S‹Žu`ŸŽt\Ÿj{udŸ{|t`Ÿ|ŽudŸŽt`ŸjtPtxs<Ÿx{u`<Ÿ{|t\<Ÿ|ƒPÕėu`ŸÛåudŸåéRéėudŸÛéPôūu`Ÿū R  u`Ÿô P°ļPļ{uT{|tP|ŽuTŽtP uTĸÂuTĒ´u_Ÿ´¸R¸Âu_ŸĒ¸P  P Đ ķPŸ B RB Î WÎ Đ ķRŸ B QB Đ ‘H8 B 0Ÿt  Uƒ — P— Ŗ uw"ŸŖ ļ Pļ  uw"Ÿa  Sa  VŽ — ‘Y—  p Ŗ ‘Y‰ Ŗ V­ ļ ‘Zļ ŧ pŧ  ‘ZŖ  VĐ å På V  P ' V' ( PŨ å Rå ˙ SŨ á p#Ÿ  P ' V' ( P p#Ÿ -S“-?S“FTS“WYS“u@VFUVWtV u@VFUVWtV u#Ÿ4vŸWtvŸ*4ō T4@VFUV4; vv4ŸFU vv4Ÿ4EPFWP8; vv4Ÿ8EP[c vv4Ÿ[gR_c vv4Ÿ_gRA s us t tt ‡ uA s us t tt ‡ uA s us t t t ‡ uA s u s t tt ‡ u A D PD q Sq t pt ‡ Sž Ģ Rŧ Ä RÄ Č sž Ģ r Ÿŧ Ä r ŸÄ Č s# Ÿ¤ ˇ ‘oŸŧ Ä ‘oŸÄ Č RČ Í ‘oŸ¤ Ģ Pŧ Č PŪ  S R Så  :Ÿ ( :ŸG R :Ÿå  S ( SG R Sû ˙ ‘˙  S ( S˙  :Ÿ˙  S@ \ ‘\ d pxŸ@ ` ‘Å Ņ 0ŸŅ č PČ Ņ R“Ņ á R“á ä rŸ“ä č R“šÄpŸÄßu #Ÿßāt#Ÿāķu #ŸÕÜSÜŨvŨßu#ßāt#ÕŨvŸŨßu#Ÿßāt#ŸŖŦRŦĩ‘ŖŦPŦĩ‘3‘9D‘-‘9D‘ )P)-rt9BPBDrt#8Q9DQ3‘9D‘ -‘9D‘l&udŸ&)‘\Ÿ):udŸ:=‘\Ÿ=qudŸo”S†ŠRŠ”V”&uT&)‘L):uT:=‘L=quTS”u o&udŸ&)‘\Ÿ):udŸ:=‘\Ÿ=qudŸ†”uŽøSøsŸ#S)7S”Ģ7ŸŧžPžõVõQĘĪQĪuPįōdįîpr"ŸîuPîptŸõuPõptŸpuP"Ÿ&udŸ&)‘\Ÿ):udŸ:=‘\Ÿ&ucŸ&)‘[Ÿ):ucŸ:=‘[Ÿ"P"&ud<Ÿ&)‘\<Ÿ)0PDNucŸNRRRqucŸDRPYcucŸcgRgqucŸYgPu #P$QudŸQR‘\ŸRgudŸgh‘\ŸÃãudŸ'OVReVÃãV'(s@QudŸQR‘\ŸRgudŸgh‘\ŸCQucŸQR‘[ŸRgucŸgh‘[ŸC_P‰–P–ÃuT‰ÃsŸ”¯WēÃWœ¯VēÃVœŖPēĀPƒ–P–ÃuT‰–p–ŖuTēĀuTËÕucŸÕŲRŲãucŸËŲP¯ĩPĩĖtĖĐtÕÖtÖ×tרtØŨtŨât ˛ĩp ŸĩÄt# ŸÄĐRÕáRáât$ÄĖt# ŸĖĐt# ŸÕÖt# ŸÖ×t# Ÿ×Øt# ŸØŨt# ŸŨât # ŸÆĐR˙Ptt%&t&'t'(t(-t-2t p,Ÿt#,ŸR%1R12t$t#,Ÿt#,Ÿ%&t#,Ÿ&'t#,Ÿ'(t#,Ÿ(-t#,Ÿ-2t #,ŸRKŲw ŸŲÛ‘# ŸNØVØŲw$ŲÛ‘#$QÚUQØVØŲw$ŲÛ‘#$QYVYĮSĮĖslŸĖ×SY}S}slŸĮSĮĐslŸYms Ÿ—¤s Ÿf‘_ŸŦ‘_ŸŦ°R°Ä‘_ŸÄËRËĐ‘_ŸfpP°PmzsŸąžsŸs‘_ŸˇÄ‘_ŸÄËRËĐ‘_ŸsPˇËPY}sŸ}s|ŸĮsŸĮĐs|ŸY‘_Ÿ‡’‘_Ÿ’–R–Ŧ‘_ŸŦ°R°Ä‘_ŸÄËRËĐ‘_ŸYcPcms<Ÿ‡–Pëív Ÿíđ‘# ŸîyWyv$ņvUņyWyv$ņųWųgSglslŸl}SųS!slŸ!gSgpslŸų s Ÿ7Ds Ÿ!‘_Ÿ=L‘_ŸLPRPd‘_ŸdkRkp‘_ŸP=PP sŸQ^sŸ!‘_ŸWd‘_ŸdkRkp‘_Ÿ!PWkPųsŸ!s|Ÿ!gsŸgps|Ÿų!‘_Ÿ'2‘_Ÿ26R6L‘_ŸLPRPd‘_ŸdkRkp‘_ŸųP s<Ÿ'6Psív,Ÿíđ‘#,ŸyîWîđ‘#0yīUyWĮSĮĖsxŸĖėS—S—›sxŸ›ĮSĮĐsxŸ—S—›sxŸąĮSĮĐsxŸ›‘_ŸļÄ‘_ŸÄËRËĐ‘_Ÿ›PļËP—sŸ—›s|Ÿ›ĮsŸĮĐs|Ÿ›‘_ŸĄŦ‘_ŸŦ°R°Ä‘_ŸÄËRËĐ‘_ŸŠPŠ”s<ŸĄ°Pđ0ŸBSûCVCD‘DOVOP‘ûCv ŸCD‘# ŸYŒ‘# ŸŒ‘w Ÿ‘’‘# ŸYa0ŸaŒV\‡S“‡S“jvRvwsw{rdŸpvRvwsw{rdŸpvrŸv{R„ŒōŋtŠÜ‘# ŸÜáw Ÿáâ‘# ŸŠą0ŸąÜVŦ×S“×ßS“ēÆRÆĮsĮËrdŸĀÆRÆĮsĮËrdŸÔÜōĀuų.‘#TŸ.2vԟ24‘#TŸų0Ÿ.Wü)S“)1S“ RR&.ōĨvI~‘#TŸ~‚vԟ‚„‘#TŸIQ0ŸQ~WLyS“yS“ZhR`hRv~ōĸwĀ‘ĀÄR•Ā‘# ŸĀÄr Ÿ•Ą0ŸĄĀRĀÄ0Ÿ˜ĄP“ĄŗP“ŗĩplŸ“ĀÂP“ÂÄr “Đ‘RÕ‘# Ÿr ŸÕá0ŸáR0ŸØáP“áķP“ķõplŸ“P“r “h‹P‹USUVvVWu#WXt#XéSh‹pŸ‹ĻsŸĻ°P°UsŸUVv#ŸVW u##ŸWX t##ŸXésŸh‹p‹ĻsĻĢphopŸovpŸv}pŸ}‹p4Ÿ‹6s4Ÿ6@P@Us4ŸUVv#4ŸVW u##4ŸWX t##4ŸXés4Ÿh‹pŸ‹ĩsŸĩĀPĀUsŸUVv#ŸVW u##ŸWX t##ŸXésŸh‹pŸ‹ĐsŸĐÚPÚUsŸUVv#ŸVW u##ŸWX t##ŸXésŸo‹pŸ‹ßsŸßęPęUsŸUVv#ŸVW u##ŸWX t##ŸXésŸo‹p‹ĻsĻĢpovpŸv}pŸ}‹p4Ÿ‹6s4Ÿ6@P@Us4ŸUVv#4ŸVW u##4ŸWX t##4ŸXés4Ÿv‹pŸ‹úsŸúPUsŸUVv#ŸVW u##ŸWX t##ŸXésŸv‹p‹ĻsĻĢpv}pŸ}‹p4Ÿ‹6s4Ÿ6@P@Us4ŸUVv#4ŸVW u##4ŸWX t##4ŸXés4Ÿ}‹p4Ÿ‹6s4Ÿ6@P@Us4ŸUVv#4ŸVW u##4ŸWX t##4ŸXés4Ÿ}‹p‹ĻsĻĢpĄĻsŸĻ°P°UsŸUVv#ŸVW u##ŸWX t##ŸXésŸļXŸļĀPĀUsŸUVv#ŸVW u##ŸWX t##ŸÍXŸÍĐsŸĐÚPÚUsŸUVv#ŸVW u##ŸWX t##ŸāXŸāęPęUsŸUVv#ŸVW u##ŸWX t##Ÿ÷XŸ÷úsŸúPUsŸUVv#ŸVW u##ŸWX t##Ÿ3XŸ36s4Ÿ6@P@Us4ŸUVv#4ŸVW u##4ŸWX t##4Ÿ`juwŸjnRnéuwŸ`nPuuwŸƒRƒéuwŸuƒPŠ”uwŸ”˜R˜éuwŸŠ˜PŸŠuwŸŠ­R­éuwŸŸ­P´žuwŸžÂRÂéuwŸ´ÂPÉĶuwŸĶ×R×éuwŸÉ×P +S2S),sŸ,6P6+sŸ2sŸ)+Ÿ2Ÿ<FPF+sŸ2’sŸ<+Ÿ2’ŸRUsŸU_P_+sŸ2’sŸR+Ÿ2’ŸeoPo+sŸ2’sŸe+Ÿ2’Ÿ{~sŸ~ˆPˆ+sŸ2’sŸ{+Ÿ2’Ÿĩ¸s4Ÿ¸ÂPÂ+s4Ÿ2’s4Ÿĩ+Ÿ2’ŸĪ+s4Ÿ2’s4ŸÕ+uwŸ2’uwŸÕÜP2?PÜ+sŸB’sŸâ+uwŸB’uwŸâéPBOPé+sŸR’sŸī+uwŸR’uwŸīöPR_Pö+sŸb’sŸü+uwŸb’uwŸüPboP+sŸr’sŸ +uwŸr’uwŸ PrP+sŸ‚’sŸ+uwŸ‚’uwŸP‚Pš¤uwŸ¤¨R¨uwŸš¨P¯šuwŸšŊRŊuwŸ¯ŊPÄÎuwŸÎŌRŌuwŸÄŌPŲãuwŸãįRįuwŸŲįPîøuwŸøüRüuwŸîüP uwŸ RuwŸP@O‘ORP‚ŒR˛ŧRŌØs ŸØū‘# ŸÕØs “ØßS“ßčS“čņs|Ÿ“ßčsčëPëės|ėđpdŸ0Ÿ"P"‘#Ÿ[‹VŒßVĐvSpuP€‘wS’íVíī‘ŸīV‘ŸwV§ī1Ÿī0Ÿkw1ŸĖíVíī‘ŸĖī‘īV‘ŸīS‘6=Pôúsúütü‘dôúsGYPŪô0ŸdfPfjS6Ū‘ŪãRã‘6Ū‘#ŸŪãrŸã‘#ŸEGPGY‘#GŪ‘ŪãRã‘GY‘# ŸŪãr Ÿãô‘# ŸYjR1=P),P,0‘#$0Y‘\9[0Ÿ[‘\ƒVy ‘\9y ‘@[Rƒ‘#$C[rԟƒ ‘#$#TŸ[‘\y ‘\[y ‘ƒ‘#$[g‘\2$s"gt ‘\2$rā"Ē´ p2$rā"[y  ˙Ÿƒ ‘#$#`ŸĀŅ0ŸŅ! U4 y UŅįWú˙P˙! W4 y Wü˙P˙! W4 y Wü˙pŸ˙ P ! wŸ4 y wŸ ģ 0Ÿģ Ņ QĨ Ņ uŸ° Ņ uŸ° ģ 0Ÿģ Í QÍ Ņ qŸā !uŸ!!‘#Ÿ!#!uŸā !S“!#!S“į ö S!#!Sį ö P!!Pį ö R!!R!#!sŸį ö 1Ÿ!#!1Ÿë ö q4Ÿ!!q4ŸR!”!sŸ”!˜!‘#Ÿ˜!ˇ!sŸ !­!PÃ!õ!uŌ!Õ!pÕ!Ũ!uŌ!õ!u ī!õ!P“õ!"S“"h"S“h"j"sŸ“j"z"S“€""S“č!ę!Pę!õ!u õ! "V"b"Vb"s"Q€""Qī!A"u j"s"u " "ōÖj"s"ōÖ#"b"Vb"s"Q€""Q."s"W€""WQ"b"ōœ—€"Š"ōœ—Q"Y"pr"Ÿ["s"W€""W["e"ptŸ€""ptŸ€""W€""ptŸŠ""pw"Ÿš"¤"ugŸ¤"¨"R¨"˛"ugŸš"¨"PË"ā"‘ā"ę"Sę"ë"të"ī"‘`#8#SË"#‘#:#W:#;#‘đ"#øŸđ"#‘ā"ę"Sę"ë"të"ī"‘`#8#S$#:#W:#;#‘#Ė#‘Ē#ģ#Sģ#ŋ#‘ā#ü#‘$$P$$‘$-$P-$1$‘ā#ö#‘ö#$R$$R$5$R`$j$‘j$k$Pp${$‘€$‹$‘°$ģ$‘Ņ$Ô$PÔ$Ø$‘#$ņ$ô$Pô$ø$‘#$%%P%%‘#$1%4%P4%8%‘#$Q%T%PT%X%‘#$q%t%Pt%x%‘#$‘%”%P”%˜%‘#$ë%&S&&S&%&sø~Ÿ&&S&%&sø~Ÿ;&Q&SR&^&S^&f&sø~Ÿf&j&‘ˆŸR&^&S^&f&sø~Ÿf&j&‘ˆŸ}& &S &ĸ&‘#$’&Ÿ&‘2$v"}& &s⟠&ĸ& ‘#$#`Ÿå&ī&R3sŸ34‘#Ÿ4}sŸ}~‘#Ÿ<‘oŸ<@R@T‘oŸTXRXt‘oŸtxRx~‘oŸP"s<Ÿ4@P"s ŸANs Ÿ4‘oŸGT‘oŸTXRXt‘oŸtxRx~‘oŸ%PGXP"/sŸYfsŸ(4‘oŸ_t‘oŸtxRx~‘oŸ(4P_xP%sŸ%&‘#Ÿ&UsŸUV‘#Ÿ4‘oŸ48R8L‘oŸLPRPV‘oŸP!s<Ÿ&8P%S%&‘9USUV‘&‘oŸ>L‘oŸLPRPV‘oŸ&P>PPN'X'‘#ĖŸN'X'0ŸN'X'‘#Ė…'”'P'Ž'Pw'˜' Ÿ'Į' Ÿw'„'P„'˜'S'Į'Sđ'(0Ÿ(H)U])t)U ((‘#TŸ(H)‘\#TŸ])t)‘\#TŸ+(H)W])t)W+(A(0ŸA(§(1Ÿ§(Â(QÂ()1Ÿ)')Q])t)1Ÿ+(A(0ŸA(2)S])t)SA(Š(V¸()V])t)VX(§(V])g)VX(§(v Ÿ])g)v Ÿz((V])g)Vz((v Ÿ])g)v Ÿˆ(Š(PŌ()Wg)t)WŌ()wŸg)t)wŸô()Wg)t)Wô()wŸg)t)wŸū()Pä)ü)0Ÿü)-*Së)-*‘#TŸ* *P *)*s2$w")*-*s2$w"**0Ÿ*"*P* *pŸ *"* s2$w"#Ÿ|*ƒ*Pƒ**S *ļ*Pļ*î*sî*ī*tpī*+s++tp+7+så+é+Pé+,uP,,tL,,,uP\,i,uP, ,R ,,,rŸz+,,7Ÿ<,Ô,7Ÿz+€+V€++t+…+t…+,u`Ÿ,,t\Ÿ,,,u`Ÿ<,Ô,u`Ÿ‰+,,7Ÿ<,•,7Ÿŗ,Đ,7Ÿ‰+,V,,udŸ,,t`Ÿ,,,V<,•,Vŗ,Đ,Vĩ,Ė,udŸģ,Å,u\ŸÅ,É,RÉ,Ė,u\Ÿģ,É,P›+Õ+SÕ+,u ,,t,,,u <,\,S\,i,u i,k,Sk,•,u Ė,Î,SÎ,Đ,u ›+,V,,udŸ,,t`Ÿ,,,V<,•,VĖ,Đ,Vĸ+Õ+SÕ+,u ,,t,,,u <,\,S\,i,u i,k,Sk,€,u ĸ+Ú+WÚ+,u\Ÿ,,tXŸ,,,u\Ÿ<,\,W\,i,u\Ÿi,€,Wk,€,u\Ÿq,{,u[Ÿ{,,R,€,u[Ÿq,,Pģ+,V,,udŸ,,t`Ÿ,,,V<,i,Vž+,u[Ÿ,,tWŸ,,,u[Ÿ<,i,u[Ÿž+Å+P<,G,PÅ+,u`Ÿ,,t\Ÿ,,,u`ŸM,i,u`ŸË+,udŸ,,t`Ÿ,,,udŸM,i,udŸË+Ō+PM,V,PŌ+,u\Ÿ,,tXŸ,,,u\Ÿ\,i,u\Ÿņ+,u\Ÿ,,tXŸ\,i,u\Ÿô+,udŸ,,t`Ÿ\,i,udŸô+û+Pû+,stŸ\,f,Pf,i,stŸ€,•,udŸ†,,u[Ÿ,”,R”,•,u[Ÿ†,”,P•,ŗ,u`Ÿ›,Ĩ,u[ŸĨ,Š,RŠ,ŗ,u[Ÿ›,Š,Pō,ū,P-"-PE-J-PJ-q-SN-m-SN-m-‘ -­-Ÿh.p.R//‘#/'/‘˜Ÿ'/,/P,/./t./4/‘„4/>/‘˜Ÿ#/(/‘@/o/0Ÿo/u/RC/G/‘˜ŸG/L/PL/N/tN/T/‘„T/u/‘˜ŸC/H/‘^/o/‘˜Ÿä/ô/Pö/ 0P0ļ0‘ļ0Ė0WĖ0Í0‘!0T0ST0_0sŸ_0¯0S2040P40°0V°0ĩ0‘2040P40T0VT0›0P0Ž0‘Ž0ą0Wļ0Ė0WĖ0Í0‘20Ž0‘Ž0ą0W–0°0V°0ĩ0‘–0Ž0‘Ž0ą0Wļ0Ė0WĖ0Í0‘11[1S[1^1uā_Ÿ^1a1tÜ_Ÿa1y1Sy1|1uā_Ÿ|11tÜ_Ÿ11S1Ĩ1uā_ŸĨ1§1S§1Ā1uā_Ÿ11\1V\1a1Pa1z1Vz1|1u|11t1Ā1VŦ1š1uß_Ÿš1Ŋ1RŊ1Ā1uß_ŸŦ1Ŋ1PK1[1S[1^1uā_Ÿ^1a1tÜ_Ÿa1y1Sy1|1uā_Ÿ|11tÜ_ŸN1^1uß_Ÿ^1a1tÛ_Ÿa1|1uß_Ÿ|11tÛ_ŸN1Z1PZ1[1s<Ÿ[1^1uā_<Ÿ^1a1tÜ_<Ÿa1r1P1Ĩ1uā_ŸŠ1—1uß_Ÿ—1›1R›1Ĩ1uß_ŸŠ1›1PÚ1ņ1P2)2PË1į1Vį12u 22t242V4252u 5282t82P2u U2Š2u Ë1Đ1vô12V22utŸ22tpŸ82J2VU2W2VW2n2utŸp2r2Vr2Š2utŸô12S22u22t82J2SU2W2SW2n2up2ˆ2Sˆ2Š2ur2ˆ2Sˆ2Š2uw22usŸ2…2R…2Š2usŸw2…2P 22V22utŸ22tpŸ82J2V 22usŸ22toŸ82J2usŸ 22P82G2P242V4252u 5282t232S3282PW2n2utŸ]2g2usŸg2k2Rk2n2usŸ]2k2P“2™2u`Ÿ™2ū2Wū2˙2u`Ÿ˙23‘XŸ3'3W'3(3u`Ÿ(3+3t\Ÿ+3f3WŽ2ü2Sü2˙2udŸ˙23‘\Ÿ3%3S%3(3udŸ(3+3t`Ÿ+3-3S-3K3udŸK3M3SM3d3udŸd3f3SÅ2ü2Sü2˙2udŸ˙23‘\Ÿ3%3S%3(3udŸ(3+3t`ŸÅ2ū2Wū2˙2u`Ÿ˙23‘XŸ3'3W'3(3u`Ÿ(3+3t\ŸŌ2ü2Sü2˙2udŸ˙23‘\Ÿ3%3S%3(3udŸ(3+3t`ŸŌ2ė2Sė2˙2u`Ÿ˙23‘XŸ33S3(3u`Ÿ(3+3t\ŸÕ2˙2u_Ÿ˙23‘WŸ3(3u_Ÿ(3+3t[ŸÕ2Ü2P33Pė2˙2u`Ÿ˙23‘XŸ3(3u`Ÿ(3+3t\Ÿī2˙2udŸ˙23‘\Ÿ3(3udŸ(3+3t`Ÿī2û2Pû2˙2u`<Ÿ˙23‘X<Ÿ33P-3K3u`Ÿ33=3u_Ÿ=3A3RA3K3u_Ÿ33A3PM3d3udŸS3]3u_Ÿ]3a3Ra3d3u_ŸS3a3P‹3Š3Pķ3 4P~3‡3P‡3Ę3u ķ34u #424u l4…4u €3¤3V¤3Ĩ3tĨ3Š3tķ3û3V‹3°3upŸ°3Æ3VÆ3đ3upŸđ3ķ3‘hŸķ3 4upŸ 4#4‘hŸ#424V24l4upŸl4…4V”3Š3upķ3 4upŦ3°3V°3ą3tą3ĩ3tĩ3Æ3utŸ#424utŸl4…4utŸŦ3°3upŸ°3Æ3V#424Vl4…4Vŧ3Æ3utŸ#424utŸŋ3Æ3uoŸ#424uoŸŋ3Æ3P#4/4PÆ3đ3upŸđ3ķ3‘hŸ4 4upŸ 4#4‘hŸR4l4upŸÆ3î3Sî3ķ3P44S4#4PR4j4ST4j4SY4c4utŸc4g4Rg4l4utŸY4g4PŪ3đ3upŸđ3ķ3‘hŸ4 4upŸ 4#4‘hŸá3đ3utŸđ3ķ3‘lŸ4 4utŸ 4#4‘lŸá3í3Pí3đ3up<Ÿđ3ķ3‘h<Ÿ44Pķ34Ÿķ3û3upŸû34V44R4upŸ:4D4uoŸD4H4RH4R4uoŸ:4H4Pt4~4uoŸ~4‚4R‚4…4uoŸt4‚4P›4ē4Pē4É4‘É4Ü4PÜ4B5‘ą4ē4Pē4ž4‘ą4ž4SÉ4Ô4VÔ4Ö4tÖ4×4t×4Ø4tØ4Ü4t É4Ü4PÜ4B5‘Ũ4 5V 5(5‘pŸ(5*5V*5B5‘pŸŨ4 5S 5(5‘(5@5S@5B5‘*5@5S@5B5‘/595‘oŸ95=5R=5B5‘oŸ/5=5Pô45V÷45‘oŸ55R55‘oŸ÷45P 5(5‘pŸ55‘oŸ55R5(5‘oŸ55P^5u5Vu5w5uw5x5tx5:6Vą56Wą5Í5WÍ5ã5u`Ÿã56W66u`Ÿ´56u_Ÿ´5ģ5Pø5˙5PÍ5ã5u`ŸĶ5ã5udŸĶ5ā5P66u`Ÿ 66udŸ 66P)636u_Ÿ3676R76:6u_Ÿ)676P^6ø6uø6û6t û6,7u,7/7t /7u7uz7Č7u^6õ6Sõ6ø6udŸø6û6t`Ÿû6)7S)7,7udŸ,7/7t`Ÿ/7O7SO7z7udŸz7|7S|7~7udŸ~7€7S€7—7udŸ—7™7S™7°7udŸ°7˛7S˛7Č7udŸk6ø6uø6û6t û6,7u,7/7t /7d7u~77u—7Č7uk6ö6Vö6ø6u`Ÿø6û6t\Ÿû6*7V*7,7u`Ÿ,7/7t\Ÿ/7d7V~77V—7Č7VO7d7u`ŸU7_7u_Ÿ_7c7Rc7d7u_ŸU7c7P†6õ6Sõ6ø6udŸø6û6t`Ÿû6)7S)7,7udŸ,7/7t`Ÿ/7M7S~7€7S€77udŸ—7™7S™7°7udŸ°7˛7S˛7Č7udŸ‰6ø6u_Ÿø6û6t[Ÿû6,7u_Ÿ,7/7t[Ÿ/7M7u_Ÿ~77u_Ÿ—7Č7u_Ÿ‰6”6P:7G7P§6ī6u /7:7u —7Č7u §6ļ6u <u`<Ÿ§6ī60Ÿ/7:70Ÿ—7Č70ŸÃ6ī6udŸ/7:7udŸ—7Č7udŸÃ6ī6W/7:7W—7Č7Wˇ7Á7u_ŸÁ7Å7RÅ7Č7u_Ÿˇ7Å7PØ6ī6udŸ/7:7udŸÛ6ī6u_Ÿ/7:7u_ŸÛ6â6P/777Pâ6ī6u`Ÿ77u`Ÿč6ī6udŸ77udŸč6ô6P7"7Pû67u û67Wd7q7udŸj7q7u_Ÿj7q7P€77u`Ÿ†77u_Ÿ†77P™7°7udŸŸ7Š7u_ŸŠ7­7R­7°7u_ŸŸ7­7Po8u8Ru88‘o88‘˛8æ8Sį869Sļ819:Ÿļ8æ8Sį819Sį89:Ÿį89SÎ8Õ8P919‘x9|9P|9Ų9U‚9‹9P‹9×9V‚9‘90Ÿ‘9œ9P­9ē9P‚9‘90Ÿ‘9Ö9Sņ92:S2:3:P3:C:S’:–:S :(:s;:C:S’:–:S™:Ŗ:ugŸŖ:§:R§:ą:ugŸ™:§:PJ:q:Sƒ:’:SU:q:sŸƒ:’:sŸ^:q:ugŸƒ:’:ugŸ^:e:Pƒ::P;o;U;S;V;%;S;B;SB;G;s|ŸG;o;S%;+;S+;/;s|Ÿ/;B;SB;K;s|Ÿ%;/;‘_Ÿ4;?;‘_Ÿ?;F;RF;S;‘_Ÿ%;/;P4;F;PS;o;US;[; uu4ŸS;o;VW;[; uu4ŸW;c;VŸ;<‘<<V<<‘<4<VŸ; <‘ <<S<4<SŸ;<‘<<W<4<WŠ;¸;Pķ;ų;Rų;ũ; ‘? ūŸÖ;ũ;cŸÖ;ũ;‘ũ;<iŸũ;<‘<<V<<‘T<Š<PŠ<B=‘B=J=PJ=Ä=‘T<Š<pŸŠ<B=‘#ŸB=J=pŸJ=Ä=‘#Ÿs<Š<PŠ<B=‘B=J=PJ=Ä=‘s<Š<pŸŠ<B=‘#ŸB=J=pŸJ=Ä=‘#Ÿ~<Š<RŠ<<‘\B=g=0Ÿ~<ģ<Sģ<6=‘B=g=Sg=Ä=‘~<Š<RŠ<<‘\B=g=0ŸB=g=SR=g=1ŸR=^=RR=Y=r<B=“Ÿg=Ä=“Ÿ<ģ<Sģ<6=‘g=Ä=‘ģ<B=•Ÿg=Ä=•Ÿģ<Į<PĮ<:=Sg=Ä=SČ<=Vž=ŋ=VČ<:=Sg=Ä=SÛ<B=˜Ÿg=Ä=˜ŸÛ<:=Sg=Ä=Së<<=Wg=Ä=Wë<:=Sg=Ä=Sö< =Wž=ŋ=0Ÿž=ŋ=SĒ=ŋ=1ŸĒ=ļ=RĒ=ą=r =:=Sg=ž=Sŋ=Ä=S =B=:Ÿg=ž=:Ÿŋ=Ä=:Ÿ =(= ss<"Ÿg=x=sp"Ÿŋ=Ã=sp"Ÿ=;=Vg=ž=Vŋ=Ä=V=B=:Ÿg=ž=:Ÿ=;=Vg=ž=Vg=ž=:Ÿg=ž=V2=A=Pß=ä=Pä=ķ=‘>>‘á=ä=Pä=ķ=‘>>‘ķ=>‘ķ=>R>>‘'s$Ÿ'2‘#$Ÿ2Cs$Ÿ<‘oŸ<@R@C‘oŸP2@P'S'2‘X>_>P_>•?S•?˜?u˜?™?t™?ė?SX>~?W~?•?s4Ÿ•?˜?u#4Ÿ˜?™?t#4Ÿ™?ė?WÎ?Ī?tĪ?Ķ?uŧļ>•?S•?˜?u˜?™?t™?ė?Sá>æ>Pæ>é>Qé>˜?ud˜?™?t`ģ?Á?udÁ?Ü?sŸÜ?ė?ud!?™?HŸģ?Ü?HŸ!?–?V–?˜?u# Ÿ˜?™?t# Ÿģ?×?V×?Ü?s Ÿh?–?v$Ÿ–?˜?u#0Ÿ˜?™?t#0Ÿģ?×?v$Ÿ×?Ü?s0Ÿo?r?s0›?ģ?s4Ÿ?•?S•?˜?u˜?™?t?˜?u˜?™?tƒ?™?AŸ“ƒ?—?W—?˜?ud˜?™?t`ƒ?‘? wud<"Ÿƒ?™?AŸƒ?‘? wud<"#@QAuTQATAtPdAßAuTķ?l@u TAAu ķ?l@u #ŸTAAu #Ÿ@@P@@u #!@TA›ŸdAßA›Ÿ!@QAudŸQATAt`ŸdAßAudŸ!@1@ud#Ÿ1@6@P:@x@ōĒęx@Ā@ōēęĀ@å@ōäęū@TAōĘędAAōĒęAĄAōēęĄAÁAōĘę:@QAudŸQATAt`ŸdAÁAudŸB@\@WB@J@ud#ŸR@V@pŸV@[@PdAAudŸb@TAĻŸAÁAĻŸb@o@pŸo@t@Px@Ā@ōēęĀ@å@ōäęū@TAōĘęAĄAōēęĄAÁAōĘęx@QAudŸQATAt`ŸAÁAudŸ€@š@V€@„@ud#Ÿ@”@pŸ”@™@PAĄAudŸĨ@å@žŸĨ@å@udŸĨ@­@ud#Ÿ­@ĩ@pŸĩ@ē@PĀ@å@ōäęĀ@å@udŸŌ@å@ÁŸŌ@Ü@pŸÜ@á@På@TA˛ŸĄAÁA˛Ÿå@QAudŸQATAt`ŸĄAÁAudŸå@í@ud#Ÿí@õ@pŸõ@ú@Pū@TAōĘęĄAÁAōĘęū@QAudŸQATAt`ŸĄAÁAudŸA ASA Aud#ŸAApŸAAPĄAÁAudŸ#AQAudŸQATAt`Ÿ7AQAudŸQATAt`Ÿ7ATA0ŸRQSQvķRŸvySyåķRŸQUuTUvķQŸvˆuTˆåķQŸ#Q|Ÿ#QW?Qß?HPTvÅŸˆŊÅŸÛåÅŸTvudŸˆŊudŸÛäudŸäåt`ŸvˆŅŸvˆudŸˆŊPŸÛåPŸˆ™PœŊudŸÛäudŸäåt`ŸĢŊudŸÛäudŸäåt`ŸĢŊ0ŸÛå0ŸŋÛudŸŋÛ0Ÿ˙A&BP&B+Br+B3BP:CCCPCCKCr€€€xŸ B&BP&B+Br:CCCPCCKCr€€€xŸvSvwvtŸwyuT4ŸyztP4ŸzŒSŒvtŸuT4ŸtP4Ÿ”–S–˜vtŸœžSž vtŸĐvtŸ>xWxyuyztzŽWŽut”˜Wœ WĐWSyudŸyzt`ŸzudŸt`Ÿ”˜udŸĐåudŸSVw#ŸhyudŸyzt`ŸzudŸt`ŸkyucŸyzt_ŸzucŸt_Ÿk‡PĐåudŸÖāucŸāäRäåucŸÖäPåWå0ŸKKPKØLVåL"MVáMPNVŅNŪNV*OXOVŊOôOV K&KP&KYLSåL‚MSáM NSpKØLDŸŅNŪNDŸ*OXODŸŊOôODŸpKØLWŅNŪNW*OXOWŊOôOWpK€Kw#Ÿ€K…KPˆKØLk ŸŅNŪNk Ÿ*OAOk ŸŊOôOk ŸˆKØLWŅNŪNW*OAOWŊOôOWŸKØLpŸŅNŪNpŸ*OAOpŸŊOôOpŸŸKØLWŅNŪNW*OAOWŊOôOWŸKŠKpŸŠKŽKPĩKØLX ŸŅNŪNX Ÿ*OAOX ŸŊOôOX ŸĩKØLWŅNŪNW*OAOWŊOôOWĩKŋKpŸŋKÄKPËKØLtŸŅNŪNtŸ*OAOtŸŊOôOtŸËKØLWŅNŪNW*OAOWŊOôOWËKÕKpŸÕKÚKPáKØLk ŸŅNŪNk Ÿ*OAOk ŸŊOôOk ŸáKØLWŅNŪNW*OAOWŊOôOWáKëKpŸëKđKP÷KØL„ŸŅNŪN„Ÿ*OAO„ŸŊOôO„Ÿ÷KØLWŅNŪNW*OAOWŊOôOW÷KLpŸLLP LZLō-ZLØLōŅNŪNō*OAOōŊOôOō LØLWŅNŪNW*OAOWŊOôOWLØL†ŸŅNŪN†Ÿ*OAO†ŸŊOôO†ŸLØLWŅNŪNW*OAOWŊOôOWL&LpŸ&L+LP2LØLX ŸŅNŪNX Ÿ*OAOX ŸŊOôOX Ÿ2LØLWŅNŪNW*OAOWŊOôOW2LY?Yt?YCYtmV‹VuŦ~Ÿ‹VŽVPŽVˆXuŦ~ŸˆX‹X‘¤~Ÿ‹X†YuŦ~Ÿ´V…Wu´~Ÿ…W‹WV‹WˆXu´~ŸˆX‹X‘Ŧ~Ÿ‹XGYu´~ŸhY‚Yu´~ŸhY‚YuŦ~ŸøVGYHŸøVMWu¸~ŸMWiWPiWtWttWxWtxWˆXu¸~ŸˆX‹X‘°~Ÿ‹XGYu¸~ŸaWiWp$ŸiWtWt#$ŸtWxWt#$ŸxWˆXuÜ~ŸˆX‹X‘Ô~Ÿ‹XGYuÜ~ŸsWxWuÜ~GYMYuā~ŸMY_YP_YhYuā~ŸˆW Y0Ÿ“ˆW‹WV‹WˆXu´~ŸˆX‹X‘Ŧ~Ÿ‹X Yu´~Ÿ‹W Y0Ÿ‹W†XV‹X YV•W™Wvô‹XŪX ŸđXY Ÿ‹XŪXVđXYV›XŠXQŠX˛Xu¤~˛XĀXRĀXŪXu¤~đXYu¤~YYQYYu¤~XŪX ŸđXY ŸXŠXQŠX˛Xu¤~˛XĀXRĀXŪXu¤~đXYu¤~˛XŪX ŸđXY Ÿ˛XŪXu¤~đXYu¤~™W‹X2Ÿ“ŪXđX2Ÿ“™WŗWu´~ŸŗW¸WP¸WˆXu´~ŸˆX‹X‘Ŧ~ŸŪXđXu´~Ÿ™WœW upt"ĖŸœWŗW up"ĖŸ™W‹X2ŸŪXđX2Ÿ™WœW upt"ÄœWĸWup"ÄÁWˆXuŦ~ŸˆX‹X‘¤~ŸŪXđXuŦ~ŸĶWˆXuŦ~ŸˆX‹X‘¤~ŸŪXđXuŦ~ŸņWˆXu¸~ŸˆX‹X‘°~ŸŪXđXu¸~ŸûWˆXuÜ~ŸˆX‹X‘Ô~ŸŪXđXuÜ~ŸūWˆXuĢ~ŸˆX‹X‘Ŗ~ŸŪXđXuĢ~ŸūW XPŪXęXP XˆXu¸~ŸˆX‹X‘°~Ÿ"XˆXuŦ~ŸˆX‹X‘¤~Ÿ>XˆXu´~ŸˆX‹X‘Ŧ~ŸSXˆXuŦ~ŸˆX‹X‘¤~ŸcXiXuā~ŸiXzXPzXˆXuā~ŸˆX‹X‘Ø~Ÿ“Y ZuŦ~Ÿ ZZPZ0\uŦ~Ÿ0\3\‘¤~Ÿ3\6]uŦ~Ÿ“YœYuā~ŸœYĒYPĒYėZuā~ŸėZûZPûZ0\uā~Ÿ0\3\‘Ø~Ÿ3\6]uā~Ÿî\ī\tī\ķ\tīY ZuŦ~Ÿ ZZPZ0\uŦ~Ÿ0\3\‘¤~Ÿ3\6]uŦ~Ÿ Z.Zu´~Ÿ.Z1ZP1Z[u´~Ÿ[[V[0\u´~Ÿ0\3\‘Ŧ~Ÿ3\÷\u´~Ÿ]2]u´~Ÿ]2]uŦ~Ÿ{Z÷\HŸ{ZĐZu¸~ŸĐZėZPėZ÷Zt÷ZûZtûZ0\u¸~Ÿ0\3\‘°~Ÿ3\÷\u¸~ŸäZėZp$ŸėZ÷Zt#$Ÿ÷ZûZt#$ŸûZ0\uÜ~Ÿ0\3\‘Ô~Ÿ3\÷\uÜ~ŸöZûZuÜ~÷\ũ\uā~Ÿũ\]P]]uā~Ÿ[Đ\0Ÿ“[[V[0\u´~Ÿ0\3\‘Ŧ~Ÿ3\Đ\u´~Ÿ[Đ\0Ÿ[.\V3\Đ\V#['[vô3\†\ Ÿ \ˇ\ Ÿ3\†\V \ˇ\VC\Q\QQ\Z\u ~Z\h\Rh\†\u ~ \˛\u ~˛\ļ\Qļ\ˇ\u ~E\†\ Ÿ \˛\ ŸE\Q\QQ\Z\u ~Z\h\Rh\†\u ~ \˛\u ~Z\†\ Ÿ \˛\ ŸZ\†\u ~ \˛\u ~'[3\2Ÿ“†\ \2Ÿ“'[>[u´~Ÿ>[A[RA[U[u´~ŸU[`[P`[0\u´~Ÿ0\3\‘Ŧ~Ÿ†\ \u´~Ÿ'[8[ upt"ĖŸ8[>[ ur"ĖŸ'[3\2Ÿ†\ \2Ÿ'[8[ upt"ÄO[0\u¤~0\3\‘œ~†\ \u¤~O[U[u´~ŸU[`[P`[0\u´~Ÿ0\3\‘Ŧ~Ÿ†\ \u´~Ÿ8[>[u´~Ÿ>[A[RA[U[u´~ŸU[`[P`[0\u´~Ÿ0\3\‘Ŧ~Ÿ†\ \u´~ŸA[`[RA[3\JŸ†\ \JŸA[3\8Ÿ†\ \8ŸA[O[r A[3\ ĩŸ†\ \ ĩŸA[`[r ŸA[U[u´~ŸU[`[P`[0\u´~Ÿ0\3\‘Ŧ~Ÿ†\ \u´~ŸA[3\ @Ÿ†\ \ @ŸA[O[ r  ĩ8!Ÿi[0\uŦ~Ÿ0\3\‘¤~Ÿ†\ \uŦ~Ÿ{[0\uŦ~Ÿ0\3\‘¤~Ÿ†\ \uŦ~Ÿ™[0\u¸~Ÿ0\3\‘°~Ÿ†\ \u¸~ŸŖ[0\uÜ~Ÿ0\3\‘Ô~Ÿ†\ \uÜ~ŸĻ[0\uĢ~Ÿ0\3\‘Ŗ~Ÿ†\ \uĢ~ŸĻ[ą[P†\š\Pą[0\u¸~Ÿ0\3\‘°~ŸĘ[0\uŦ~Ÿ0\3\‘¤~ŸÚ[0\u´~Ÿ0\3\‘Ŧ~Ÿõ[0\uŦ~Ÿ0\3\‘¤~Ÿ \\uā~Ÿ\"\P"\0\uā~Ÿ0\3\‘Ø~ŸY]g]0Ÿg]Ŋ]Sî]_SY]é]Vé]î]‘î]Å_Vz]Ĩ]RĨ]Ŋ]‘Sî]^R^^‘S^/^R/^5^‘S5^M^RM^S^‘SS^s^Rs^y^‘Sy^–^R–^§^ps"§^Č^‘SČ^Ö^RÖ^î^‘Sî^ö^Rö^_‘S__ps"_Ĩ_‘S]Ļ]‘Ÿ]Ļ]‘\Ÿ] ]‘\#Ÿ ]Ĩ]P§^Č^ōõ>§^Č^‘\Ÿž^Â^QÂ^Č^‘Zē^Â^Pî]^ŒŸî]^‘\Ÿî]^‘\#Ÿ^^P^5^œŸ^5^‘\Ÿ^*^‘\#Ÿ*^/^P5^S^–Ÿ5^S^‘\Ÿ5^H^‘\#ŸH^M^P^^y^ŖŸ^^y^‘\Ÿ^^n^‘\#Ÿn^s^Py^Č^‘S_Ĩ_‘SČ^î^‘\Ÿã^č^rč^î^‘Yã^č^Pî^_‘\Ÿ__r__‘X__P,_Ĩ_ĒŸ,_Ĩ_‘\Ÿ,_6_pŸ6_;_PB_Ž_‘`ŸB_Ž_‘\ŸB_L_‘\#ŸL_Q_PX_Ž_ŽŸX_Ž_‘\ŸX_b_pŸb_g_Pn_Ž_‘`Ÿq_‚_‘[Ÿ‚_†_R†_Ž_‘[Ÿq_z_Pz__‘`<Ÿ_†_P_Ĩ_‘`Ÿ–_ _‘[Ÿ _¤_R¤_Ĩ_‘[Ÿ–_¤_PŊ]î]‘\ŸŅ]î]‘\ŸŅ]î]0ŸĨ_Á_‘\ŸĨ_Á_0Ÿå_ū_0Ÿū_&aS&a+asŸ+acWųcdWPb~bĻŸPb~buTŸPbXbuT#ŸXb`bpŸ`bebPkb~bWkb~buTŸkbnbuT#ŸrbubpŸubzbP~bŪc˛Ÿųcad˛Ÿ}dšd˛Ÿ~bÛcuTŸÛcŪctPŸųcaduTŸ}dšduTŸ~b†buT#Ÿ†bŽbpŸŽb“bP—bŪcōOųcadōO}dšdōO—bÛcuTŸÛcŪctPŸųcaduTŸ}dšduTŸŸbšbSŸbŖbuT#Ÿ¯bŗbpŸŗb¸bPųcduTŸÂbÛb˛ŸÂbÛbuTŸÂbĘbuT#ŸĘbŌbpŸŌb×bPÛb"cSîbcßîbcuTŸîböbuT#ŸöbūbpŸūbcP ccuTŸ ccuT#ŸccpŸccP0cÛcuTŸÛcŪctPŸdaduTŸ}dšduTŸ0cÛcu`ŸÛcŪct\Ÿdadu`Ÿ}dšdu`Ÿ>cÛcuTŸÛcŪctPŸdQduTŸdšduTŸ>ctcStcuctucyctycÛcuXŸÛcŪctTŸd-dS-dQduXŸdƒdSƒdšduXŸEcÛcuTŸÛcŪctPŸdQduTŸdšduTŸEcÚcWdQdWdšdWOcŲcVŲcÛcu\ŸÛcŪctXŸddQduXŸ>dQd0ŸcŪc0Ÿdad0Ÿ}dšd0ŸcÛcu`ŸÛcŪct\Ÿdadu`Ÿ}dšdu`Ÿ)cŪc0Ÿdad0Ÿ}dšd0Ÿ)cÛcudŸÛcŪct`ŸdadudŸ}dšdudŸĸcÛcu`ŸÛcŪct\Ÿ-du¸~Ÿ>bPbu¸~Ÿ‚t´~Ÿ‚Øu¸~ŸŪ7u¸~ŸRbp$ŸbuÜ~Ÿ‚tØ~Ÿ‚ØuÜ~ŸŪ7uÜ~Ÿ\buÜ~7Ruā~Ÿk–u´~Ÿ– Q u´~Ÿ‚t°~Ÿ‚Ôu´~ŸŪu´~Ÿk„P„…t…‰t‚ŽPŽ–u ™ Q ĩu´~Ÿ¸Đu´~ŸŪûu´~Ÿ™ĩu¨~Ÿ¸Đu¨~ŸŪûu¨~ŸĄĩu¨~Ÿ¸Đu¨~ŸĒĩuĻ~Ÿ¸ĐuĻ~ŸĒĩP¸ĘPāûu¨~ŸéöuĻ~ŸöúRúûuĻ~ŸéúPĩuŦ~Ÿ‚t¨~Ÿ¤¸uŦ~ŸĐuŦ~Ÿ‚t¨~Ÿ¤¸uŦ~Ÿîu¸~Ÿ‚t´~Ÿ¤¸u¸~ŸøuÜ~Ÿ‚tØ~Ÿ¤¸uÜ~Ÿûu¨~Ÿ‚t¤~Ÿ¤¸u¨~ŸûP¤˛Pu¸~Ÿ‚t´~ŸuŦ~Ÿ‚t¨~Ÿ5u´~Ÿ‚t°~ŸJuŦ~Ÿ‚t¨~Ÿcuā~Ÿ‚tÜ~Ÿ.r8r1Ÿ.r8rS1r8r0Ÿ1r8rsŸ‚r˛rV…r˛ru_Ÿ…rŒrPĸr¯rPŒrĸrudŸ’rĸru`Ÿ’rŸrP´rŌrudŸērÄru_ŸÄrČrRČrŌru_ŸērČrPÚräru_ŸärčrRčrëru_ŸÚrčrPss1ŸssSss0ŸsssŸbs’sVes’su_ŸeslsP‚ssPls‚sudŸrs‚su`ŸrssP”s˛sudŸšs¤su_Ÿ¤s¨sR¨s˛su_Ÿšs¨sPēsÄsu_ŸÄsČsRČsËsu_ŸēsČsPĐsésPés‰tU‰tŠtķPŸĐsésRésˆtWˆtŠtķRŸĐsésQés‡tV‡tŠtķQŸęsös0Ÿ ttp1)Ÿktotp1)Ÿęsös0Ÿ t>tS>tktsŸktotSôs tQt,tQ,tot‘\t,tQ,tot‘\8totŸ8totVKtot/ŸKtotVot‡tV‡tŠtķQŸ tËtSËtĪt‘ĐtŲtSŲtŪt‘œt˛tR˛tĮt‘ĐtØtRØtŪt‘œt˛tP˛tˇt‘ĐtŨtPŨtŪt‘ŗtĐtŸŗtËtSËtĪt‘ņtuSu"uP"u#u‘ņtuVu"uQ"u#u‘ût#u!Ÿût uP#u@uV@uAu‘zuŦ~Ÿz}P}†uŦ~Ÿ†‰t¨~Ÿ‰ĪuŦ~Ÿ uā~Ÿ …W…†uā~Ÿ†‰tÜ~Ÿ‰ĪW34t48t\zuŦ~Ÿz}P}†uŦ~Ÿ†‰t¨~Ÿ‰ĪuŦ~Ÿ›u´~Ÿ›žPž–u´~Ÿ– Q †u´~Ÿ†‰t°~Ÿ‰u´~Ÿ<u´~ŸWĪu´~ŸWquŦ~Ÿč HŸ HŸ<HŸqĪHŸč=u¸~Ÿ=bPb†u¸~Ÿ†‰t´~Ÿ‰ u¸~Ÿ u¸~Ÿ<u¸~ŸqĪu¸~ŸQbp$Ÿb†uÜ~Ÿ†‰tØ~Ÿ‰ uÜ~Ÿ uÜ~Ÿ<uÜ~ŸqĪuÜ~Ÿ^buÜ~<Wuā~Ÿk–u´~Ÿ– Q †u´~Ÿ†‰t°~Ÿ‰u´~Ÿ u´~Ÿu´~ŸqĪu´~Ÿk„P„…t…‰t‰–P–žu ™ Q ŧu´~ŸĀu´~Ÿ u´~Ÿq‚u´~Ÿ™Īu´~Ÿ™ŧu¨~ŸĀu¨~Ÿ u¨~Ÿq‚u¨~Ÿ™Īu¨~ŸĄŧu¨~ŸĀu¨~ŸļŧuĻ~ŸĀuĻ~ŸļŧRĀÕRÕôu”~ôūRūu”~ĀuĻ~ŸĀu”~Ā ˙ŸĀÕp|ŸÕņu¨~4Ÿņôu”~#Ÿôp|Ÿu¨~4ŸÉÕ ˙ŸÉÕp|Ÿô ˙Ÿôp|Ÿu¨~4ŸûQq‚u¨~Ÿ™Īu¨~Ÿz‚uĻ~Ÿ™ĪuĻ~Ÿz‚V™ĪVĨŦ ˙ŸĨŦvŸŧ†uŦ~Ÿ†‰t¨~ŸŦĀuŦ~Ÿ×†uŦ~Ÿ†‰t¨~ŸŦĀuŦ~Ÿõ†u¸~Ÿ†‰t´~ŸŦĀu¸~Ÿ˙†uÜ~Ÿ†‰tØ~ŸŦĀuÜ~Ÿ†u¨~Ÿ†‰t¤~ŸŦĀu¨~Ÿ PŦēP †u¸~Ÿ†‰t´~Ÿ&†uŦ~Ÿ†‰t¨~Ÿ<†u´~Ÿ†‰t°~ŸQ†uŦ~Ÿ†‰t¨~Ÿj†uā~Ÿ†‰tÜ~ŸŽu˜u1ŸŽu˜uS‘u˜u0Ÿ‘u˜usŸâuvVåuvu_ŸåuėuPvvPėuvudŸōuvu`Ÿōu˙uPv2vudŸv$vu_Ÿ$v(vR(v2vu_Ÿv(vP:vDvu_ŸDvHvRHvKvu_Ÿ:vHvPPvzv‘zv9wV9w>wvŸ>wOwVTw~wVwĪwVSv†vuevfvwzvÕvSÛv÷vSAwNwSbw~wSšvÕvSbw~wS¨v­vQ­vÕvuTbw~wuTÅvÕvō†Ąbwuwō†ĄÅvĘvpr"ŸĘvÕvuTbw~wuTĘvÕvptŸbw~wptŸbw~wuTbw~wptŸuw~wpuT"ŸwEwudŸTwbwudŸwEwu_ŸTwbwu_Ÿw&wPTw_wP&wEwu`Ÿ,w6wudŸ6w=wR=wEwudŸ,w=wPŸw´wudŸĨw¯wu_Ÿ¯wŗwRŗw´wu_ŸĨwŗwP´wËwu`ŸēwÄwu_ŸÄwČwRČwËwu_ŸēwČwP…wwu_Ÿw“wR“wwu_Ÿ…w“wPMu MP‘P_u MutŸMP‘lŸPnutŸ(MutŸMP‘lŸ7MutŸMP‘lŸ7P0ŸĐwķwRķwRxuTRxSxtPSx€xuT€xxtPxÔxuTĐwčwQčwÔxķQŸôwúwVúwûwtûw˙wt˙wRxu`ŸRxSxt\ŸSx€xu`Ÿ€xxt\ŸxÔxu`Ÿx˜x°ŸēxÔx°ŸxPxVPxRxudŸRxSxt`ŸSx~xV~x€xudŸ€xxt`Ÿx˜xVēxÔxVxOxSOxRxķQuķR1)(ŸRxSxķQtķR1)(ŸSx}xS}x€xķQuķR1)(Ÿ€xxķQtķR1)(ŸēxžxSžxÔxķQuķR1)(ŸxPxVPxRxudŸRxSxt`ŸSx~xV~x€xudŸ€xxt`ŸēxÔxVxOxSOxRxķQuķR1)(ŸRxSxķQtķR1)(ŸSx}xS}x€xķQuķR1)(Ÿ€xxķQtķR1)(ŸŧxžxSžxÔxķQuķR1)(ŸxQxWQxSxPSxxWxxPŧxÔxWÃxÍxu_ŸÍxŅxRŅxÔxu_ŸÃxŅxP2xPxVPxRxudŸRxSxt`ŸSx~xV~x€xudŸ€xxt`Ÿ5xRxu_ŸRxSxt[ŸSx€xu_Ÿ€xxt[Ÿ5x?xP?xIxv<ŸSx_xPuwŸ>BRBLuwŸ4BPœģPģ&‚u &‚)‚t)‚;‚P;‚H‚u H‚K‚tK‚”‚u ™‚ƒu ŧ)‚/ŸK‚ƒ/ŸŧÕVՁ&‚u\Ÿ&‚)‚tXŸK‚y‚u\Ÿy‚{‚V{‚å‚u\Ÿå‚ƒVí‚÷‚udŸ÷‚û‚Rû‚ƒudŸí‚û‚Pâ$‚V$‚&‚udŸ&‚)‚t`ŸK‚y‚V™‚›‚V›‚Æ‚udŸŨ‚á‚Vâ#‚S#‚&‚u&‚)‚tK‚y‚S™‚ą‚Są‚Æ‚uŨ‚ß‚S߂á‚u›‚ą‚S ‚Ē‚u[ŸĒ‚Ž‚RŽ‚ą‚u[Ÿ ‚Ž‚Pų$‚V$‚&‚udŸ&‚)‚t`ŸK‚y‚Vü&‚u[Ÿ&‚)‚tWŸK‚y‚u[Ÿü‚PY‚g‚P‚&‚u`Ÿ&‚)‚t\ŸK‚Y‚u`Ÿj‚y‚u`Ÿ ‚&‚udŸ&‚)‚t`ŸK‚Y‚udŸj‚y‚udŸ ‚‚Pj‚v‚P‚&‚u\Ÿ&‚)‚tXŸK‚Y‚u\Ÿ‚&‚udŸ&‚)‚t`ŸK‚Y‚udŸ‚‚PK‚V‚P)‚H‚uH‚K‚t )‚E‚SE‚K‚P{‚™‚u\Ÿ‚‹‚u[Ÿ‹‚‚R‚™‚u[Ÿ‚‚Pą‚Æ‚udŸˇ‚Á‚u[ŸÁ‚Å‚RłƂu[Ÿˇ‚Å‚PƂŨ‚u`ŸĖ‚Ö‚u[ŸÖ‚Ú‚RڂŨ‚u[ŸĖ‚Ú‚P@ƒNƒPNƒ“ƒVW…c…Pc……VˆˆVN„Q…SQ…T…u`ŸT…W…t\Ÿ„…t†SQ„T…uŖŸT…W…tŸŸ„…t†uŖŸQ„\„P„……P\„T…u\ŸT…W…tXŸ•…t†u\Ÿb„T…u`ŸT…W…t\Ÿ•…t†u`Ÿb„m„P•…ž…Pm„T…uTŸT…W…tPŸ¤…t†uTŸs„T…u`ŸT…W…t\Ÿ¤…t†u`Ÿs„~„P¤…Ž…P~„T…uPŸT…W…tLŸ´…t†uPŸ„„T…u`ŸT…W…t\Ÿ´…t†u`Ÿ„„„P´…ž…P„T…uHŸT…W…tDŸÄ…t†uHŸ•„T…u`ŸT…W…t\ŸÄ…t†u`Ÿ•„ „Pą΅P „T…uDŸT…W…t@ŸÔ…t†uDŸĻ„T…u`ŸT…W…t\ŸÔ…t†u`ŸĻ„ą„PÔ…Ū…Pą„T…uŧŸT…W…t¸Ÿä…t†uŧŸˇ„T…u`ŸT…W…t\Ÿä…t†u`Ÿˇ„„Pä…î…P„T…u¸ŸT…W…t´Ÿô…t†u¸ŸČ„T…u`ŸT…W…t\Ÿô…t†u`ŸČ„Ķ„Pô…ū…PĶ„T…u°ŸT…W…tŦŸ†t†u°ŸŲ„T…u`ŸT…W…t\Ÿ†t†u`ŸŲ„ä„P††Pä„T…uŦŸT…W…t¨Ÿ†t†uŦŸę„T…u`ŸT…W…t\Ÿ†t†u`Ÿę„õ„P††Põ„T…u´ŸT…W…t°Ÿ$†t†u´Ÿû„T…u`ŸT…W…t\Ÿ$†t†u`Ÿû„…P$†.†P…T…u@ŸT…W…tŧŸ4†t†u@Ÿ …T…u`ŸT…W…t\Ÿ4†t†u`Ÿ ……P4†>†P…T…uLŸT…W…tHŸD†t†uLŸ…T…u`ŸT…W…t\ŸD†t†u`Ÿ…(…PD†N†P(…T…uXŸT…W…tTŸT†t†uXŸ.…T…u`ŸT…W…t\ŸT†t†u`Ÿ.…9…PT†^†P9…T…udŸT…W…t`Ÿd†t†udŸ?…T…u`ŸT…W…t\Ÿd†t†u`Ÿ?…J…Pd†n†Pv†‹†u`Ÿ|†††uŖŸ††Š†RІ‹†uŖŸ|†Š†P‹† †u\Ÿ‘†›†uŖŸ›†Ÿ†RŸ† †uŖŸ‘†Ÿ†P †ĩ†uTŸĻ†°†uŖŸ°†´†R´†ĩ†uŖŸĻ†´†Pĩ†Ę†uPŸģ†Å†uŖŸÅ†É†RɆʆuŖŸģ†É†Pʆ߆uHŸĐ†Ú†uŖŸÚ†Ū†Rۆ߆uŖŸĐ†Ū†P߆ô†uDŸå†ī†uŖŸī†ķ†Rķ†ô†uŖŸå†ķ†Pô† ‡uŧŸú†‡uŖŸ‡‡R‡ ‡uŖŸú†‡P ‡‡u¸Ÿ‡‡uŖŸ‡‡R‡‡uŖŸ‡‡P‡3‡u°Ÿ$‡.‡uŖŸ.‡2‡R2‡3‡uŖŸ$‡2‡P3‡H‡uŦŸ9‡C‡uŖŸC‡G‡RG‡H‡uŖŸ9‡G‡PH‡]‡u´ŸN‡X‡u¨ŸX‡\‡R\‡]‡u¨ŸN‡\‡P]‡r‡u@Ÿc‡m‡u¨Ÿm‡q‡Rq‡r‡u¨Ÿc‡q‡Pr‡‡‡uLŸx‡‚‡u¨Ÿ‚‡†‡R†‡‡‡u¨Ÿx‡†‡P‡‡œ‡uXŸ‡—‡u¨Ÿ—‡›‡R›‡œ‡u¨Ÿ‡›‡Pœ‡ē‡udŸĸ‡Ŧ‡u¨ŸŦ‡°‡R°‡ē‡u¨Ÿĸ‡°‡P#ˆgˆuDŸgˆ•ˆW•ˆâˆuDŸâˆåˆ‘ŧŸåˆŲ‰uDŸŲ‰ė‰Wė‰ŠuDŸŠŠt@ŸŠBŠuDŸBŠYŠWYŠ‹uDŸ6ˆQˆuDåˆ÷ˆuDaˆgˆWgˆhˆthˆlˆtlˆ•ˆuLŸŲ‰ė‰uLŸBŠYŠuLŸaˆgˆuDŸgˆ•ˆWŲ‰ė‰WBŠYŠWsˆ•ˆuLŸŲ‰ė‰uLŸyˆ•ˆVŲ‰ė‰Vyˆ„ˆPŲ‰æ‰P„ˆ•ˆuHŸŠˆ•ˆudŸŠˆ•ˆP•ˆâˆuDŸâˆåˆ‘ŧŸė‰ŠuDŸŠŠt@ŸŠŠuDŸpЉŠuDŸ˙Š‹uDŸ•ˆâˆudŸâˆåˆ‘\Ÿė‰ŠudŸŠŠt`ŸŠŠudŸpЉŠudŸ˙Š‹udŸēˆâˆudŸâˆåˆ‘\Ÿė‰ŠudŸŠŠt`ŸŠŠudŸŊˆâˆu`Ÿâˆåˆ‘XŸė‰Šu`ŸŠŠt\ŸŠŠu`ŸŊˆČˆPŠŠPȈâˆuDŸâˆåˆ‘ŧŸė‰ŠuDŸŠŠt@ŸÎˆâˆudŸâˆåˆ‘\Ÿė‰ŠudŸŠŠt`ŸÎˆŪˆPۈâˆuD<Ÿâˆåˆ‘ŧ<Ÿė‰ö‰P;‰A‰WA‰B‰tB‰F‰tF‰’‰u`Ÿž‰Ų‰u`ŸŠ¤Šu`Ÿ;‰A‰uDŸA‰’‰Wž‰Ų‰WŠ¤ŠWM‰’‰u`Ÿž‰Ų‰u`ŸS‰’‰Vž‰Ų‰VS‰Z‰Pž‰Ļ‰PZ‰’‰u\ŸŠ‰Ų‰u\Ÿ`‰’‰udŸŠ‰Ų‰udŸ`‰g‰PЉļ‰Pg‰’‰uXŸš‰Ų‰uXŸm‰’‰udŸš‰Ų‰udŸm‰t‰Pš‰Æ‰Pt‰’‰uPŸÉ‰Ų‰uPŸz‰’‰udŸÉ‰Ų‰udŸz‰‰Pɉ։P‰’‰uTŸ‡‰’‰udŸ‡‰’‰PŠ$ŠuTŸŠ$ŠudŸŠ$ŠP$ŠBŠuDŸ*Š4ŠuCŸ4Š8ŠR8ŠBŠuCŸ*Š8ŠPDŠYŠuLŸJŠTŠudŸTŠXŠRXŠYŠudŸJŠXŠPYŠfŠuHŸ_ŠfŠudŸ_ŠfŠPrЉŠudŸxŠ‚Šu`Ÿ‚ІŠR†Š‰Šu`ŸxІŠPŠ¤Šu`Ÿ•ŠŸŠudŸŸŠŖŠRŖŠ¤ŠudŸ•ŠŖŠP¤ŠšŠu\ŸĒŠ´ŠudŸ´Š¸ŠR¸ŠšŠudŸĒЏŠPšŠÎŠuXŸŋŠÉŠudŸÉŠÍŠR͊ΊudŸŋŠÍŠPΊėŠuPŸÔŠâŠudŸâŠæŠRæŠėŠudŸÔŠæŠP+‹2‹0Ÿ2‹N‹WN‹W‹RW‹ˆ‹Wˆ‹œ‹Rœ‹Ô‹W‹—‹V—‹œ‹Pœ‹Ô‹V2‹N‹Vˆ‹—‹V—‹œ‹P2‹N‹uŸˆ‹™‹uŸ™‹œ‹tŒŸ2‹<‹v2‹N‹uŸg‹™‹uŸ™‹œ‹tŒŸģ‹Ô‹uŸ2‹N‹Vg‹—‹V—‹œ‹Pģ‹Ô‹V2‹N‹uŸt‹™‹uŸ™‹œ‹tŒŸ2‹N‹uŸw‹‹uŸ‹…‹R…‹™‹uŸ™‹œ‹t‹Ÿw‹…‹Pž‹ģ‹VŖ‹­‹uŸ­‹ą‹Rą‹ģ‹uŸŖ‹ą‹PË͋uŸÍ‹Ņ‹RŅ‹Ô‹uŸÃ‹Ņ‹P%ŒŸŒ“ŸâŒ“Ÿ4ą“Ÿ%Œ+ŒW+Œ,Œt,Œ0Œt0ŒŸŒuXŸâŒuXŸ4ąuXŸ4ŒŸŒ“ŸâŒ“Ÿ4`“Ÿw““Ÿ—ą“Ÿ4ŒŸŒW⌍W4`Ww“W—ąW}“u\Ÿƒ“udŸƒPOŒŸŒ“ŸâŒ“Ÿ4K“Ÿ—ą“ŸOŒŸŒV⌍V46V6KudŸ—™V™ąudŸ[ŒŸŒ“ŸâŒ“Ÿ—ą“Ÿ[ŒŸŒu⌍u—ąuž¨uWŸ¨ŦRŦąuWŸžŦPnŒŸŒV⌍VqŒŸŒuWŸâŒuWŸqŒxŒPâŒīŒPxŒŸŒu\ŸōŒu\Ÿ~ŒŸŒudŸōŒudŸ~Œ…ŒPōŒūŒP…ŒŸŒu`Ÿu`Ÿ‹ŒŸŒudŸudŸ‹Œ’ŒPP’ŒŸŒuXŸÅŒĪŒuXŸ˜ŒŸŒudŸČŒĪŒudŸ˜Œ¤ŒPȌՌP4uXŸ&uWŸ&*R*4uWŸ*P6KudŸ<FuWŸFJRJKuWŸ<JPK`u\ŸQ[uWŸ[_R_`uWŸQ_P`wu`ŸfpuWŸptRtwuWŸftPô§ŽVĒŽV=VŽKŽSĒŽåŽSS"Ž:Ÿ"ŽKŽSĒŽåŽSĒŽåŽ:ŸĒŽåŽS>ŽEŽPŽŠŽudŸŠŽĒŽt`ŸĒŽudŸt`Ÿ=udŸIާŽV厏VIŽSŽPSŽĻŽS厏SWŽĒްŸåŽ°ŸWŽĻŽS厏SgލŽW厏WgŽĻŽS厏SkŽŽW厏0ŸåŽSōŽ1ŸōŽūŽRōŽųŽr‚ŽĒŽ•Ÿ•Ÿ‚ŽĻŽSS˜ŽŠŽudŸŠŽĒŽt`ŸudŸt`Ÿ›ŽŠŽucŸŠŽĒŽt_ŸucŸt_Ÿ›ŽĒŽPP%/ucŸ/3R3=ucŸ%3PnĮ¤Ÿ¨č¤Ÿ…ĮS¨ÕSĨS¨Õ0ŸģÕ1ŸÆĪPƐɐR¨ĮüŸĶÛuۏߏPĶÖP֏“S“•w萑SꏓsŸ“•w#Ÿč‘sŸęņs)+P+–uD–—t@)–uLŸ–—tHŸ)“sŸ“•w#ŸđũPܑį‘P…’’Pz‘­‘ŸQ“d“Ÿ‘‘­‘@Ÿî‘k’S“;“vŸ“ “P!“;“v Ÿ!“*“P\}Ÿ4P4yS|~SL|æŸ<P<S„†ST„æŸP,V/DPDšV\‡æŸ#5V%u GœÄŸüÄŸ"ÄŸaœsŸrœ“Ÿr€P€œW‡œs ŸŊüÜŸÜŸÔøŒŸĘ“C”ŸŸ”˛”Ÿá“C”DŸô“C”S”C”PŸ””uT”C”dŸ”C”uT&”C”@K$Ÿ6”C”bŸ6”B”Pu”Ÿ”3Ÿ˛”Å”3ŸŒ”Ÿ”ėŸ•æ•0Ÿæ•<–S<–D–PD–˜0Ÿ˜'˜S'˜{˜0Ÿ{˜˜S˜š0ŸIšKšSbš¸š0ŸÆšöš0Ÿ•+šeŸIšŋšeŸÆšöšeŸ•C–u¸ŸC–D–t´ŸD–+šu¸ŸIšŋšu¸ŸÆšöšu¸Ÿ••pŸ•"•P&•C–u¸ŸC–D–t´ŸD–šu¸ŸIš¸šu¸ŸÆšöšu¸Ÿ.•H•V.•6•u¸#Ÿ>•B•pŸB•G•PZ˜{˜u¸ŸZ˜{˜0ŸZ˜p˜u¸#Ÿp˜u˜PN•Z˜rŸ{˜šrŸIš¸šrŸÆšöšrŸN•[•pŸ[•`•P“•䕐ŸÆšŪšŸ“•ä•u¸ŸÆšŪšu¸ŸŦ•䕐ŸŦ•ä•u¸ŸĀ•ä•u@ŸĀ•ä•u¸ŸĀ•Õu¸#ŸĮ•Ę•pŸĘ•Ī•P֕ä•u@ŸŲ•ä•u`ŸŲ•ä•PH˜Z˜p0)Ÿ^–˙–u´Ÿ'˜Z˜u´ŸŪšöšu´Ÿa–k–P'˜9˜P9˜<˜s<˜D˜pXŸa–k–R'˜D˜R'˜9˜P9˜<˜s<˜D˜pXŸ'˜D˜R~–˙–äŸŪšöšäŸ~–Ĩ–u¸ŸĨ–Ž–PŽ–˙–u¸ŸŪšöšu¸Ÿ”–˙–Ÿ”–Ĩ–u¸ŸĨ–Ž–PŽ–˙–u¸Ÿ´–˙–rŸ´–ģ–Pģ–˙–SƖ˙–ĒŸÆ–˙–Sܖ˙–uHŸÜ–˙–Sܖߖs#Ÿņ–˙–uHŸô–˙–u`Ÿô–˙–P¸™Î™uPŸž™Î™u`Ÿž™Î™P¤˜ë˜SΙę™Sŋ˜Ķ˜ĐŸŋ˜Ķ˜u\Ÿ×™ę™ˇŸ×™ę™u\ŸÕ˜å˜u\Ÿí˜™æŸí˜™u\Ÿ™Î™u\Ÿę™ šu\Ÿ™Î™u\Ÿę™ šu\Ÿ™Î™0Ÿę™ š0Ÿhš}šu\Ÿhš}š0Ÿ)™Î™Ÿę™ šŸ)™Î™u¸Ÿę™ šu¸ŸB™Î™õŸę™ô™õŸB™Î™u¸Ÿę™ô™u¸ŸV™Î™uLŸę™ô™uLŸV™Î™u¸Ÿę™ô™u¸ŸV™Y™u¸#Ÿ]™`™pŸ`™e™Pl™Î™rŸę™ô™rŸl™Î™u¸Ÿę™ô™u¸Ÿl™v™pŸv™{™P‚™Î™ĒŸę™ô™ĒŸ‚™Î™u¸Ÿę™ô™u¸Ÿ‚™Œ™pŸŒ™‘™P˜™Î™uPŸę™ô™uPŸ˜™Î™u¸Ÿę™ô™u¸Ÿ˜™›™u¸#ŸŸ™ĸ™pŸĸ™§™PŽ™Î™uLŸę™ô™uLŸą™Î™u`Ÿę™ô™u`Ÿą™¸™Pę™ņ™Pö™ šuLŸü™šu`Ÿš šR š šu`Ÿü™ šP ššuPŸššu`ŸššP—n—tŸŖš¸štŸ—n—u¸ŸŖš¸šu¸Ÿ4—n—Ÿ4—n—u¸ŸH—n—uŧŸH—n—u¸ŸH—K—u¸#ŸO—R—pŸR—W—P^—n—uŧŸa—n—u`Ÿa—n—Pģ—˜´Ÿ}šŽš´Ÿģ—˜u¸Ÿ}šŽšu¸ŸŅ—˜ŸŅ—˜u¸Ÿč—˜uDŸč—˜u¸Ÿč—ë—u¸#Ÿī—ō—pŸō—÷—Pū—˜uDŸ˜˜u`Ÿ˜˜PšŽšuDŸ…šŽšu`Ÿ…šŽšPĨš¸šuŧŸĢš¸šu`ŸĢš¸šPȚۚu@ŸÎšŪšu`ŸÎšŪšPæ•C–u¸ŸC–D–t´Ÿ˜'˜u¸Ÿ{˜˜u¸ŸIšXšu¸Ÿõ•A–VA–C–uXŸC–D–tTŸ˜'˜V{˜˜VIšXšVõ•D–Ÿ˜'˜Ÿ{˜˜ŸIšXšŸ–A–VA–C–uXŸC–D–tTŸ˜'˜V{˜˜V –C–u`ŸC–D–t\Ÿ˜'˜u`Ÿ{˜˜u`Ÿ ––P{˜‡˜P–C–u¸ŸC–D–t´Ÿ˜'˜u¸Ÿ–D–0Ÿ˜'˜0Ÿ)–C–u´ŸC–D–t°Ÿ˜'˜u´Ÿ/–C–u`ŸC–D–t\Ÿ˜'˜u`Ÿ/–<–P˜˜Pš+šu¸Ÿš+š0Ÿ+šIšu´Ÿ1š;šuŗŸ;š?šR?šIšuŗŸ1š?šPKšXšuXŸQšXšu`ŸQšXšP,uwŦu,Lu# ŸLMt# ŸMvu# Ÿvwt# Ÿ2LuwŸLMtsŸMvuwŸvwtsŸ2<P<Fs <ŸMWP9Fu#ŸXeu#Ÿ?FuwŸ^euwŸ?MP^oP‰uwŸ‰RŦuwŸP”žuwŸžĸRĸŦuwŸ”ĸP VSYˇS,S‚ˇS,Vs ŸY‚s Ÿ2XuwŸXY‘oŸY‚uwŸ2<P<Fs <ŸYgP9FsŸhusŸ?FuwŸnuuwŸ?FPnPŠ”uwŸ”˜R˜ˇuwŸŠ˜PŸŠuwŸŠ­R­ˇuwŸŸ­Pcu#Ÿr§u#Ÿ§¨t#Ÿ¨Ũu#Ÿ$kSr’S¨ŨS2ES¨ŨSEks Ÿr’s ŸKkuwŸr’uwŸKRP‚PRksŸr‚sŸXkuwŸr‚uwŸX_PrP°ēuwŸēžRžŨuwŸ°žPÅĪuwŸĪĶRĶŨuwŸÅĶP |V~­V­āu|vŸ~­vŸ­āu#Ÿ$kS~šSĢāS2ESĢāSEks Ÿ~šs ŸKkuwŸ~šuwŸKRPŠ—PRksŸ~ŠsŸXkuwŸ~ŠuwŸX_P~‡PŗŊuwŸŊÁRÁāuwŸŗÁPČŌuwŸŌÖRÖāuwŸČÖPSu ß9u PTu X\u ‚†u ŠĄu HVHŪu\ŸŪß‘TŸßãVã0u\Ÿ09V9Ou\ŸOP‘TŸP‚u\Ÿ‚†V†Šu\ŸŠĄVĄ¯u\ŸŠĄu\ŸšudŸšžRžĄudŸžP<HVHĮu\ŸßãVã0u\ŸPTu\ŸXdu\Ÿ†Šu\ŸĄ¯u\Ÿ<ĮSß0SPRSRTuX\u†ˆSQcVHĮu\Ÿ†Šu\ŸĄ¯u\ŸxĮÄŸ†ŠÄŸĄ¯ÄŸĮsŸ Į“Ÿ ŽPŽĮWĩĮs Ÿø0ÜŸPTÜŸXdÜŸ 0ŒŸĘŪu\ŸŪß‘TŸ9Ou\ŸOP‘TŸĐŪudŸŪß‘\Ÿ9OudŸOP‘\ŸĐßP9GPdyu\Ÿjtu[ŸtxRxyu[ŸjxPpu pqtqu ž‘žÖu pu #Ÿpqt#Ÿqu #Ÿž‘#ŸžÖu #Ÿ oVqœVžÛV &S&'t'+t+pupŸpqtlŸqupŸž‘hŸžÛupŸ,oVqœVĸŊV,nSnputŸpqtpŸq›S›utŸž‘lŸĸ¤S¤ĻutŸĻ¨S¨ŊutŸDnSnputŸpqtpŸq›S›utŸž‘lŸDLPLpupqtquž‘SnSnputŸpqtpŸq›S›utŸž‘lŸVpuoŸpqtkŸquoŸž‘gŸV`P`js<ŸqP]jupŸ€upŸcjS†utŸcqP†–P¨ŊutŸŽ¸uoŸ¸ŧRŧŊuoŸŽŧPÃÍuoŸÍŅRŅÛuoŸÃŅPpu pqtqu žtžÖu pu #Ÿpqt#Ÿqu #Ÿžt#ŸžÖu #Ÿ oVqœVžÛV &S&'t'+t+pupŸpqtlŸqupŸžtlŸžÛupŸ,oVqœVĸŊV,nSnputŸpqtpŸq›S›utŸžtpŸĸ¤S¤ĻutŸĻ¨S¨ŊutŸDnSnputŸpqtpŸq›S›utŸžtpŸDLPLpupqtqužtSnSnputŸpqtpŸq›S›utŸžtpŸVpuoŸpqtkŸquoŸžtkŸV`P`js<ŸqP]jupŸ€upŸcjS†utŸcqP†–P¨ŊutŸŽ¸uoŸ¸ŧRŧŊuoŸŽŧPÃÍuoŸÍŅRŅÛuoŸÃŅP.u ƒ¨u Sƒ‘S‘¨sø~Ÿƒ‘S‘¨sø~Ÿ$VDS‚udŸ‚ƒ‘\Ÿ¨ŅSÕ×S×ėudŸD€V¨ŅVÕėVUS‚udŸ‚ƒ‘\Ÿ¨ŅSX‚u_Ÿ‚ƒ‘WŸ¨Ņu_ŸXbPbls<Ÿ¨ˇP_lW¸Åu`ŸelSžÅudŸelPžÎPl€vŸ×ėudŸŨįu_ŸįëRëėu_ŸŨëPōüu_ŸüR u_ŸōP#MS?ASegS.W.Hu HItI>u >?‘?u 1u .wŸ.Hu #ŸHIt#ŸI>u #Ÿ>?‘#Ÿ?u #Ÿ1u #Ÿ]?„ŸFU„ŸYe„ŸiŌ„Ÿ1„Ÿ]cScdtdhthHuHŸHItDŸI>uHŸ>?‘@ŸFUuHŸYeuHŸiŌuHŸ1uHŸl?„ŸFU„ŸY]„Ÿae„ŸiŊ„Ÿ1„ŸlŒSŒHuLŸHItHŸI>uLŸ>?‘DŸFJuLŸJLSLUuLŸY]uLŸacSceuLŸiŊuLŸ1uLŸ *udŸ*.R.1udŸ .P¨GWGHudŸHIt`ŸI=W=>udŸ>?‘\ŸFJWi~W¨HuHItI>u>?‘FJui~uŧGWGHudŸHIt`ŸI=W=>udŸ>?‘\ŸŋHuCŸHItŋŸI>uCŸ>?‘ģŸŋÍPÍÛw<ŸIWPĘÛSXiu\ŸĐÛW^iudŸĐŪP^vPÛėuXŸwˆuXŸáėudŸ}ˆudŸáīP}–PėũuLŸ—¨uLŸōũudŸ¨udŸōPļPũuHŸˇČuHŸudŸŊČudŸPŊÖPuDŸ×čuDŸudŸŨčudŸ"PŨöP0uTŸ÷uTŸ%0udŸũudŸ%3PũP0Au`Ÿ(u`Ÿ6AudŸ(udŸ6IP6Pi~udŸoyuCŸy}R}~uCŸo}P~“u\Ÿ„ŽuCŸŽ’R’“uCŸ„’P“¨uXŸ™ŖuCŸŖ§R§¨uCŸ™§P¨ŊuLŸŽ¸uCŸ¸ŧRŧŊuCŸŽŧPŊŌuHŸÃÍuCŸÍŅRŅŌuCŸÃŅPŌįuDŸØâuCŸâæRæįuCŸØæPįüuTŸí÷uCŸ÷ûRûüuCŸíûPüu`Ÿ uPŸ RuPŸP&USUWutŸWXtpŸXƒSƒ…utŸ…†tpŸŠŒSŒĄutŸ&WuWXtX…u…†tŠĄu:USUWutŸWXtpŸXƒSƒ…utŸ…†tpŸ=WuoŸWXtkŸX…uoŸ…†tkŸ=GPGQs<ŸXgPDQVhuupŸJQSnuutŸJXPn~PŒĄutŸ’œuoŸœ R ĄuoŸ’ P§ąuoŸąĩRĩŋuoŸ§ĩP ›d›Sd›g›ug›h›th›Ī›SĪ›Đ›u››P›e›Vh›„›P„›Ũ›Vœ›Ę›æŸ!›d›s Ÿd›g›u# Ÿg›h›t# Ÿ6›d›s,Ÿd›g›u#,Ÿg›h›t#,Ÿ)u#Ÿ)*t#Ÿ*‹u#Ÿ‹Œt#ŸŒ’u#Ÿ!DPD‰SŒŽS\ŒæŸ 4S8™S™uP4sŸ8™sŸ™u#Ÿ"$P$5V8TPTĒVl—柜œPœ?œS?œCœPCœČœSœœpŸœœPœ?œsŸ?œCœpŸCœČœsŸ&œ(œP(œAœWCœKœPKœČœW`œĸœ¨ŸĩœČœ¨ŸtœĸœæŸÜœßœs Ÿ“ߜV“ÚV“ŨžV“ܜߜs ŸßœVÚVŨžVíœīœPīœuTtP4P4ÜuTܝŨ‘LŨžuT5|ŸŨđŸL|æŸōí|Ũōíđžō흝V|ÚVđžVP|”P”ŲSđõS•ŨųŸđžųŸŦŨæŸžžs Ÿ“ž[žV“^žŸV“ ŸFŸV“žžs Ÿž[žV^žŸV ŸFŸV-ž/žP/žEžuT^žtžPtžŧžuT Ÿ3ŸuTužŧžŸ Ÿ3ŸŸŒžŧžæŸEž^žōRōŧž ŸōRō3ŸFŸōRōEž[žVŧžŸV3ŸFŸVQžVžPVžZžSŧžÔžPԞŸS3Ÿ8ŸS՞ ŸųŸ3ŸFŸųŸėž ŸæŸ\Ÿ_ŸsŸ“_ŸĄŸV“¤Ÿe V“h Ž V“\Ÿ_ŸsŸ_ŸĄŸV¤Ÿe Vh Ž VmŸoŸPoŸ‹ŸuT¤ŸŧŸPŧŸ uTh { uTŊŸ Ÿh { ŸÔŸ æŸ‹Ÿ¤Ÿō D h ō D{ Ž ō D‹ŸĄŸV e V{ Ž V—ŸœŸPœŸ ŸS  P d S{ € S h ųŸ{ Ž ųŸ4 h æŸœ Ÿ sŸ“Ÿ á V“ä ĨĄV“¨ĄÎĄV“œ Ÿ sŸŸ á Vä ĨĄV¨ĄÎĄV­ ¯ P¯ Ë uTä ü Pü DĄuT¨ĄģĄuTũ DĄŸ¨ĄģĄŸĄDĄæŸË ä ō8FDĄ¨Ąō8FģĄÎĄō8FË á VDĄĨĄVģĄÎĄV× Ü PÜ ā SDĄ\ĄP\Ą¤ĄSģĄĀĄS]Ą¨ĄųŸģĄÎĄųŸtĄ¨ĄæŸßĄĸSĸĸw`Ÿ)ĸŽĸSŽĸĸĸw`Ÿīĸ÷ĸS÷ĸŖw`ŸßĄâĄs ŸâĄĸW)ĸĸĸWīĸŖWīĄņĄPņĄ˙ĄV)ĸ3ĸP3ĸŽĸVīĸŖVHĸŽĸŸīĸŖŸ_ĸŽĸæŸ˙Ą)ĸōŽHŽĸīĸōŽHŖŖōŽH˙ĄĸWŽĸĸĸWĸĸPĸ%ĸSŽĸ“ĸP“ĸīĸSŖ ŖSĒĸīĸųŸŖŖųŸÁĸīĸæŸ,ŖJ¤v,ŸM¤S¤v,Ÿ2Ŗ“ŖW2Ŗ8ŖS2Ŗ~ŖS~ŖƒŖsxŸƒŖŠŖS8ŖOŖSOŖSŖsxŸSŖ~ŖS~Ŗ‡ŖsxŸ8ŖOŖSOŖSŖsxŸhŖ~ŖS~Ŗ‡ŖsxŸEŖLŖudŸmŖtŖudŸEŖSŖPmŖ‚ŖP8ŖOŖsŸOŖSŖs|ŸSŖ~ŖsŸ~Ŗ‡Ŗs|Ÿ8ŖSŖudŸYŖcŖudŸcŖgŖRgŖ“ŖudŸ8ŖBŖPBŖLŖs<ŸYŖgŖP“ŖJ¤v,ŸM¤S¤v,Ÿ“Ŗ›Ŗ v4v,8Ÿ“ŖĻŖW—Ŗ›Ŗ v4v,8Ÿ—ŖŖŖWŖŖJ¤v ŸM¤S¤v ŸŠŖ#¤WŠŖ¯ŖSŠŖ¤S¤¤slŸ¤C¤S¯ŖÍŖSÍŖŅŖslŸŅŖ¤S¤¤slŸ¯ŖŊŖs ŸæŖķŖs ŸļŖŊŖudŸėŖķŖudŸļŖĀŖPėŖ˙ŖPŊŖĘŖsŸ¤ ¤sŸÃŖĘŖudŸ¤ ¤udŸÃŖŅŖP¤¤P¯ŖÍŖsŸÍŖŅŖs|ŸŅŖ¤sŸ¤¤s|Ÿ¯ŖŅŖudŸ×ŖáŖudŸáŖåŖRåŖ#¤udŸ¯ŖŗŖPŗŖŊŖs<Ÿ×ŖåŖP#¤J¤v ŸM¤S¤v Ÿ#¤+¤ v(v DŸ#¤K¤WM¤Ģ¤W­¤Ā¤W'¤+¤ v(v DŸ'¤3¤W3¤J¤VM¤S¤VC¤d¤Pd¤Š¤S­¤˛¤S|¤­¤æŸ,V,-t-1t1uXŸtTŸuXŸ€tTŸ€uXŸhulu‘•u™ŖuŪõuhu#Ÿlu#Ÿ‘•u#Ÿ™Ŗu#ŸŪõu#Ÿ!,V,-t-1t1uXŸtTŸuXŸ€tTŸ€uXŸ!S|S€S‘“S•—S™›SŸS&,V,-t-1t1uXŸtTŸuXŸ€tTŸ€uXŸ5™rŸĀrŸŪrŸ5]V]u\ŸtXŸ V Xu\ŸXlVlu\Ÿ€tXŸ€‘u\Ÿ‘•V•™u\ŸĀu\ŸŪõVõu\ŸŪõu\ŸäîudŸîōRōõudŸäōPQ]V]Üu\Ÿ V Xu\Ÿ•™u\ŸĢu\Ÿõu\ŸQÜSXS•—SŸSfxV]Üu\Ÿ•™u\Ÿõu\ŸÜÄŸ•™ÄŸõÄŸ¤ÜsŸĩÜ“ŸĩÃPÃÜWĘÜs Ÿ XÜŸĢÜŸ4XŒŸßu\ŸtXŸlu\Ÿ€tXŸ€u\ŸåudŸt`ŸludŸ€t`Ÿ€udŸåđP€‡PĢĀu\ŸąģuWŸģŋRŋĀuWŸąŋPđuXŸtTŸluXŸ€tTŸöudŸt`ŸludŸ€t`ŸöPlwPĀŪuXŸÆĐuWŸĐÔRÔŪuWŸÆÔP¤ĨRĨĖĨķRŸĖĨÚĨRÚĨHĻķRŸÖ¤ ĨrĖĨÚĨP¤ĨrŸĨĖĨķR#ŸĖĨÚĨrŸÚĨHĻķR#Ÿđ¤ĨRĨĖĨķRŸÚĨHĻķRŸđ¤ĨrŸĨĖĨķR#ŸÚĨHĻķR#ŸĨËĨudŸËĨĖĨt`ŸÚĨĻudŸĻĻt`Ÿ1ĻHĻudŸĨÉĨVÉĨËĨu`ŸËĨĖĨt\ŸÚĨĻVĻĻu`ŸĻĻt\Ÿ1ĻHĻVĨ)Ĩv#Ÿ)Ĩ.ĨP5ĨĖĨ°ŸÚĨϰŸ5ĨÉĨVÉĨËĨu`ŸËĨĖĨt\ŸÚĨĻVĻĻu`ŸĻĻt\Ÿ5Ĩ?ĨpŸ?ĨDĨPEĨÉĨVÉĨËĨu`ŸËĨĖĨt\ŸÚĨĻVĻĻu`ŸĻĻt\ŸEĨkĨWÚĨöĨWEĨLĨv#ŸTĨXĨpŸXĨ]ĨPdĨÉĨVÉĨËĨu`ŸËĨĖĨt\ŸÚĨĻVĻĻu`ŸĻĻt\ŸhĨpĨQpĨrĨWrĨŠĨuThĨ„Ĩv#Ÿ„Ĩ‰ĨPÚĨöĨu`ŸĨĨËĨu`ŸËĨĖĨt\ŸöĨĻu`ŸĻĻt\ŸĨĨĖĨ0ŸöĨĻ0ŸĩĨËĨudŸËĨĖĨt`ŸöĨĻudŸĻĻt`ŸģĨËĨu`ŸËĨĖĨt\ŸöĨĻu`ŸĻĻt\ŸģĨĮĨPĮĨËĨud<ŸËĨĖĨt`<ŸöĨĻPĻ1ĻudŸĻ#Ļu_Ÿ#Ļ'ĻR'Ļ1Ļu_ŸĻ'ĻPˆĻŠĻSŠĻĢĻupŸĢĻŦĻ‘hŸŦĻŲĻSŲĻÛĻupŸÛĻÜĻ‘hŸ‹ĻĢĻuoŸĢĻŦĻ‘gŸŦĻÛĻuoŸÛĻÜĻ‘gŸ‹Ļ•ĻP•ĻŸĻs<ŸŦώĻP’ĻŸĻutŸ¸ĻÅĻutŸ˜ĻŸĻSžĻÅĻupŸ˜ĻŦĻPžĻÎĻPŪĻüĻutŸäĻîĻuoŸîĻōĻRōĻüĻuoŸäĻōĻP§§uoŸ§§R§§uoŸ§§P5§|§u|§}§t}§Ĩ§u5§?§R?§|§u |§}§t}§Ĩ§u @§|§utŸ|§}§tpŸ}§Ē§utŸ]§|§utŸ|§}§tpŸ}§Š§utŸ`§|§usŸ|§}§toŸ}§Š§usŸ`§g§P}§‡§P’§œ§usŸœ§ §R §Ē§usŸ’§ §Pħ_ŠulŸ_Š`ŠthŸ`Š ĒulŸÄ§Ô§ul#ŸÔ§Ų§PŨ§éŠō)aĒ Ēō)aŨ§_ŠulŸ_Š`ŠthŸ`ŠéŠulŸĒ ĒulŸå§˙§Så§í§ul#Ÿõ§ų§pŸų§ū§P`ŠyŠulŸ¨`ЉŸyŠéЉŸĒ ljŸ¨¨pŸ¨¨P¨`ŠôŸyŠéŠôŸĒ ĒôŸ¨(¨pŸ(¨-¨P4¨`Š4ŸyŠéŠ4ŸĒ Ē4Ÿ4¨>¨pŸ>¨C¨PG¨`Šō)ayŠéŠō)aĒ Ēō)aG¨_ŠulŸ_Š`ŠthŸyŠéŠulŸĒ ĒulŸO¨i¨SO¨S¨ul#Ÿ_¨c¨pŸc¨h¨PyŠ™ŠulŸo¨`ŠÉŸ™ŠéŠÉŸĒ ĒÉŸo¨|¨pŸ|¨¨Pˆ¨`ŠTŸ™ŠéŠTŸĒ ĒTŸˆ¨’¨pŸ’¨—¨Pž¨`Š”Ÿ™ŠéŠ”ŸĒ Ē”Ÿž¨¨¨pŸ¨¨­¨P´¨`ŠÔŸ™ŠéŠÔŸĒ ĒÔŸ´¨ž¨pŸž¨Ã¨Pʨ`ŠŸ™ŠéŠŸĒ ĒŸĘ¨Ô¨pŸÔ¨Ų¨Pā¨`ŠÖŸ™ŠéŠÖŸĒ ĒÖŸā¨ę¨pŸę¨ī¨Põ¨_ŠulŸ_Š`ŠthŸ™ŠéŠulŸĒ ĒulŸŠ_ŠutŸ_Š`ŠtpŸ™ŠéŠutŸĒ ĒutŸ/Š]ŠS]Š_ŠupŸ_Š`ŠtlŸ™ŠŊŠS2Š_ŠukŸ_Š`ŠtgŸ™ŠŊŠukŸ2Š9ŠPŠŠˇŠP9Š_ŠutŸ_Š`ŠtpŸ™ŠŠŠutŸ?Š_ŠupŸ_Š`ŠtlŸ™ŠŠŠupŸ?ŠFŠP™ŠĻŠPFŠ_ŠulŸ_Š`ŠthŸFŠ`Š0ŸŋŠÔŠupŸÅŠĪŠukŸĪŠĶŠRĶŠÔŠukŸÅŠĶŠPÔŠéŠutŸÚŠäŠukŸäŠčŠRčŠéŠukŸÚŠčŠPéŠĒulŸéŠĒ0ŸNǟĒ“ŸŨĒųĒ“ŸĢMĢ“ŸNĒTĒWTĒUĒtUĒYĒtYǟĒu\ŸŨĒųĒu\ŸĢMĢu\Ÿ]ǟĒ“ŸŨĒųĒ“ŸĢ0Ģ“ŸGĢIĢ“Ÿ]ǟĒWŨĒųĒWĢ0ĢWGĢIĢW{ǟĒWŨĒųĒW~ǟĒu[ŸŨĒųĒu[Ÿ~Ē…ĒPŨĒįĒP…ĒŸĒudŸęĒųĒudŸ‹ĒŸĒu`ŸęĒųĒu`Ÿ‹Ē’ĒPęĒöĒP’ĒŸĒu\ŸĀĒĘĒu\Ÿ˜ĒŸĒudŸÃĒĘĒudŸ˜Ē¤ĒPÃĒĐĒPûĒĢu\ŸĢ Ģu[Ÿ ĢĢRĢĢu[ŸĢĢPĢ0Ģu`Ÿ!Ģ+Ģu[Ÿ+Ģ/ĢR/Ģ0Ģu[Ÿ!Ģ/ĢP0ĢGĢudŸ6Ģ@Ģu[Ÿ@ĢDĢRDĢGĢu[Ÿ6ĢDĢPSĢĢuĢ Ģ‘ ĢųĢuųĢüĢ‘üĢŦuŦ7Ŧu‡ĢĢu`ŸĢ Ģ‘XŸâĢųĢu`ŸųĢüĢ‘XŸĢĢudŸĢ Ģ‘\ŸâĢųĢudŸųĢüĢ‘\ŸĢ™ĢP™ĢĢu`<ŸĢ Ģ‘X<ŸâĢīĢP ĢâĢrŸŦ7ŦrŸ Ģ§ĢW§Ģ¨Ģt¨ĢŦĢtŦĢâĢu Ŧ7Ŧu °ĢâĢrŸŦ7ŦrŸ°ĢâĢWŦ7ŦWÎĢâĢWŅĢÛĢu_ŸÛĢßĢRßĢâĢu_ŸŅĢßĢPūĢŦu`ŸŦŦu_ŸŦŦRŦŦu_ŸŦŦPŦ5ŦudŸ$Ŧ.Ŧu_Ÿ.Ŧ2ŦR2Ŧ5Ŧu_Ÿ$Ŧ2ŦP1=p Ÿ1utžužŸtŸu.?uC\u`ûūŸ.9ūŸ=?ūŸC\ūŸ`fSfgtgkuŦkuLŸtHŸžuLŸžŸtHŸŸûuLŸ.9uLŸ=?uLŸC\uLŸoŸūŸŖæūŸ.9ūŸ=?ūŸC\ūŸoSuPŸtLŸžuPŸžŸtLŸŖæuPŸ.0S09uPŸ=?uPŸCESE\uPŸKUu\ŸUYRY\u\ŸKYPŠŸ ŸŖŅ Ÿ29 Ÿ=? ŸŠWuXŸtTŸWžuXŸžŸtTŸŖŅW29W=?W™Ÿ Ÿ§ŧ Ÿ29 Ÿ=? Ÿ™Su\ŸtXŸ›S›žu\ŸžŸtXŸ§ŧu\Ÿ24S49u\Ÿ=?SĢSu\ŸtXŸ›S›žu\ŸžŸtXŸ=?SĢŗPŗutžužŸt=?uēSu\ŸtXŸ›S›žu\ŸžŸtXŸŊuGŸtCŸžuGŸžŸtCŸŊĮPĮŅs<ŸPÄŅW -uXŸĘŅS&-u\ŸĘÔP&6PŅŪuPŸ7DuPŸ×Ūu\Ÿ=Du\Ÿ×áP=NPŪëuLŸO\uLŸäëu\ŸU\u\ŸäîPUfPëüuHŸgtuHŸņüu\Ÿmtu\Ÿņ˙Pm~Pü uTŸuTŸ u\Ÿ…u\ŸP…–P§ŧu\Ÿ­ˇuGŸˇģRģŧuGŸ­ģPŧŅuXŸÂĖuGŸĖĐRĐŅuGŸÂĐPŅæuPŸ×áuGŸáåRåæuGŸ×åPæûuLŸėöuGŸöúRúûuGŸėúPûuHŸ uGŸ RuGŸP.uTŸ uGŸ $R$.uGŸ$P%NSN u t–u –—t—!u &7u 79S9Tu .:p0)Ÿ. u t–u–—t—u&7u;Tu]ķūŸ&1ūŸ57ūŸ;TūŸ]cScdtdhth uLŸ tHŸ–uLŸ–—tHŸ—ķuLŸ&1uLŸ57uLŸ;TuLŸl—ūŸ›ŪūŸ&1ūŸ57ūŸ;TūŸlŠSŠ uPŸ tLŸ–uPŸ–—tLŸ›ŪuPŸ&(S(1uPŸ57uPŸ;=S=TuPŸCMu\ŸMQRQTu\ŸCQP‡— Ÿ›É Ÿ*1 Ÿ57 Ÿ‡ W  uXŸ tTŸ•W•–uXŸ–—tTŸ›ÉW*1W57W–— ŸŸ´ Ÿ*1 Ÿ57 Ÿ– S  u\Ÿ tXŸ“S“–u\Ÿ–—tXŸŸ´u\Ÿ*,S,1u\Ÿ57S¨ S  u\Ÿ tXŸ“S“–u\Ÿ–—tXŸ57S¨°P° u t–u–—t57uˇ S  u\Ÿ tXŸ“S“–u\Ÿ–—tXŸē uGŸ tCŸ–uGŸ–—tCŸēÄPÄÎs<ŸPÁÎW%uXŸĮÎS%u\ŸĮŅP.PÎÛuPŸ/<uPŸÔÛu\Ÿ5<u\ŸÔŪP5FPÛčuLŸGTuLŸáču\ŸMTu\ŸáëPM^PčõuHŸ_luHŸîõu\Ÿelu\ŸîøPevPõuTŸw„uTŸûu\Ÿ}„u\ŸûP}ŽPŸ´u\ŸĨ¯uGŸ¯ŗRŗ´uGŸĨŗP´ÉuXŸēÄuGŸÄČRČÉuGŸēČPÉŪuPŸĪŲuGŸŲŨRŨŪuGŸĪŨPŪķuLŸäîuGŸîōRōķuGŸäōPķuHŸųuGŸRuGŸųP&uTŸuGŸR&uGŸP1S1Qu /Tu (s$.1S1Qu /Tu 1BS/9S9Tsø~Ÿ/9S9Tsø~ŸBGuj/ūŸTūŸ1ūŸd´ūŸģÅūŸjpSpqtqutu.uLŸ./tHŸTūuLŸū˙tHŸ˙uLŸ1uLŸd´uLŸģÅuLŸy/ūŸTūŸūŸdhūŸl´ūŸģÅūŸy—S—.uPŸ./tLŸTūuPŸū˙tLŸ˙SuPŸuPŸdhuPŸl´uPŸģÁuPŸÁÃSÃÅuPŸuPŸ u\ŸRu\Ÿ P”/ ŸT˙ Ÿdh Ÿl– ŸģÁ Ÿ”-W-.uXŸ./tTŸTũWũūuXŸū˙tTŸdhWl–WģÁWŖ/ ŸT˙ Ÿdh Ÿl ŸģŊ ŸŖ+S+.u\Ÿ./tXŸTûSûūu\Ÿū˙tXŸdfSfhu\Ÿlu\ŸģŊSĩ+S+.u\Ÿ./tXŸTûSûūu\Ÿū˙tXŸĩŊPÄ+S+.u\Ÿ./tXŸTûSûūu\Ÿū˙tXŸĮ.uGŸ./tCŸTūuGŸū˙tCŸĮÕPÕãs<ŸT_PŌãW`quXŸØãSfqu\ŸØæPf~PãôuPŸuPŸéôu\Ÿ…u\Ÿé÷P…–PôuLŸ—¨uLŸúu\Ÿ¨u\ŸúPļPuHŸˇČuHŸ u\ŸŊČu\Ÿ PŊÖP'uTŸ×čuTŸ'u\ŸŨču\Ÿ/PŨöP1uLŸ",uGŸ,0R01uGŸ"0P1FuHŸ7AuGŸAEREFuGŸ7EPFduTŸLVuGŸVZRZduGŸLZPlu\Ÿr|uGŸ|€R€uGŸr€P–uXŸ‡‘uGŸ‘•R•–uGŸ‡•P–´uPŸœĒuGŸĒŽRŽ´uGŸœŽPZu Ŗ˛u Áėu ô u ĸu\ŸĸŖtXŸŖ=u\ŸZu Ŗ˛u Áėu ô u MWŖ˛Wô W0 V ĸu`ŸĸŖt\ŸŖėVđ V'=V0MWŖ˛Wô W@ V ĸu`ŸĸŖt\ŸŖėVđôV'=VCĸudŸĸŖt`ŸŖėudŸđôudŸ'=udŸCJPŖ¯Pö u`ŸüudŸ R  udŸü PJĸu\ŸĸŖtXŸ˛ėu\Ÿđôu\Ÿ'=u\ŸJŸSŸŖP˛ėSđōSQĸu\ŸĸŖtXŸ˛Áu\Ÿđôu\Ÿ'=u\Ÿ`ĸudŸĸŖt`Ÿ˛ÁudŸđôudŸ'=udŸcĄW˛ÁWđôW'=Wcds|ĸudŸĸŖt`Ÿ˛ÁudŸĸu`ŸĸŖt\Ÿ˛Áu`Ÿ†P˛žPÔŪPŪßtßãtÚÛp-:P†ĸu\ŸĸŖtXŸ†Ŗ0Ÿ 'u\Ÿ '0Ÿ<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0Ÿ?u šÄu †upŸ†‡tlŸ‡ûupŸ&up#Ÿ&+P2†upŸ†‡tlŸ‡ÄupŸČßupŸ2„S„‡P‡ÄSČĘS6†upŸ†‡tlŸ‡šupŸČßupŸE†utŸ†‡tpŸ‡šutŸČßutŸH…V‡šVČßVHIsa†utŸ†‡tpŸ‡šutŸd†uoŸ†‡tkŸ‡šuoŸdkP‡—PŦļPļˇtˇģt˛ŗpĘßutŸĐÚuoŸÚŪRŪßuoŸĐŪPk†upŸ†‡tlŸk‡0Ÿ<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0Ÿ8u Š´u upŸ€tlŸ€ëupŸ+upŸ€tlŸ€´upŸ¸ĪupŸ+}S}€P€´S¸ēS/upŸ€tlŸ€ŠupŸ¸ĪupŸ>utŸ€tpŸ€ŠutŸ¸ĪutŸA~V€ŠV¸ĪVABsZutŸ€tpŸ€ŠutŸ]uoŸ€tkŸ€ŠuoŸ]dP€‡PœĻPϧt§ĢtĸŖpēĪutŸĀĘuoŸĘÎRÎĪuoŸĀÎPdupŸ€tlŸd€0Ÿ<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0ŸØ­Ú­PÚ­`ŽSuŽ ¯S¯¯Sv¯x¯S~Ŧ‡­VČ­ŽVŽ7Žu7Ž`ŽVuŽ“ŽV“ŽâŽu¯*¯uv¯x¯u|¯‚¯VŦ‡­NŸ|¯~¯NŸŦ‡­uXŸ|¯~¯uXŸĒŦŌŦWŌŦ‡­uTŸ|¯~¯uTŸĒŦ‡­uXŸ|¯~¯uXŸĒŦ´ŦuX#Ÿ´ŦšŦPŋŦ‡­rŸ|¯~¯rŸŋŦ‡­uXŸ|¯~¯uXŸŌŦ‡­YŸ|¯~¯YŸŌŦ‡­uXŸ|¯~¯uXŸåŦ‡­uXŸ|¯~¯uXŸņŦ‡­dŸ|¯~¯dŸņŦ‡­uXŸ|¯~¯uXŸ ­­0Ÿ­a­S ­‡­V|¯~¯V*­a­rŸ*­a­uXŸ*­4­pŸ4­9­P?­a­W?­a­uXŸa­‡­0Ÿ|¯~¯0Ÿa­v­u`Ÿv­{­P{­‡­u`Ÿ|¯~¯u`Ÿk­‡­0Ÿ|¯~¯0Ÿk­‡­udŸ|¯~¯udŸŒ­—­u`ŸŒ­“­P“­—­udŸ—­Å­uXŸÅ­Č­tTŸ`ŽrŽuXŸrŽuŽtTŸ—­Č­0Ÿ`ŽuŽ0ŸĒ­Å­uTŸÅ­Č­tPŸ`ŽrŽuTŸrŽuŽtPŸ°­Å­u`ŸÅ­Č­t\Ÿ`ŽrŽu`ŸrŽuŽt\Ÿ°­ž­Pž­Å­uT<ŸÅ­Č­tP<Ÿ`ŽgŽPß­7Ž0Ÿv¯x¯0Ÿß­â­u`Ÿâ­ú­Pú­7Žu`Ÿv¯x¯u`Ÿé­7Ž0Ÿv¯x¯0Ÿé­7ŽudŸv¯x¯udŸ7Ž?Žu ?ŽBŽtBŽFŽt7Ž?ŽsNŽ`Ž1ŸNŽ`ŽuTŽ`Ž0ŸTŽ`Žu#ŸuŽ0¯0ŸuŽxŽu`ŸxސŽPŽ0¯u`ŸŽ0¯0ŸŽ0¯udŸŸŽ0¯yŸŸŽĻŽPĻŽęŽW¯0¯W­Ž0¯yŸ­ŽéŽV鎯u\Ÿ¯0¯V­ŽˇŽpŸˇŽŧŽPĖŽéŽV鎯u\ŸĖޝ0Ÿ¯0¯u\Ÿ¯0¯0Ÿ0¯A¯u`Ÿ0¯3¯udŸ3¯=¯P=¯A¯udŸA¯T¯uXŸA¯T¯0ŸT¯r¯uTŸZ¯d¯u`Ÿd¯h¯Rh¯r¯u`ŸZ¯h¯PDu •°u ēĶu ”upŸ”•tlŸ•upŸ :V (up#Ÿ04pŸ49P•°upŸ•°0Ÿ•¨up#Ÿ¨­P@”upŸ”•tlŸ°äupŸč˙upŸ@’S’•P°äSčęSD”upŸ”•tlŸ°ēupŸč˙upŸS”utŸ”•tpŸ°ēutŸč˙utŸV“V°ēVč˙VVWso”utŸ”•tpŸ°ēutŸr”uoŸ”•tkŸ°ēuoŸryP°ˇPĖÖPÖ×t×ÛtŌĶpę˙utŸđúuoŸúūRū˙uoŸđūPy”upŸ”•tlŸy•0Ÿ¯Ä¯RįmąķRŸmą}ąR}ąæąķRŸ¯¨¯Q¨¯ląuDląmąt@mąąuDą‘ąt@‘ąæąuDدmą0Ÿ‘ąæą0Ÿ¨¯Ä¯PmąuąPuą}ąu¨¯Ä¯Qmą}ąQž¯Ä¯Qž¯Ä¯Pô¯mą0Ÿ‘ąæą0Ÿô¯÷¯u`Ÿ÷¯ °P °ląu`Ÿląmąt\Ÿ‘ąæąu`Ÿ°mą0Ÿ‘ąæą0Ÿ°ląudŸląmąt`Ÿ‘ąæąudŸH°mą‡Ÿ‘ąĄą‡Ÿ¸ąæą‡ŸH°N°u@\°mą‡Ÿ‘ąĄą‡Ÿ¸ąæą‡Ÿ\°ĸ°Vĸ°ląuXŸląmątTŸ‘ąĄąuXŸ¸ąĪąuXŸĪąæąV\°f°qŸf°k°P}°ĸ°Vĸ°ląuXŸląmątTŸ‘ąĄąuXŸ¸ąĪąuXŸ}°ĸ°Vĸ°Ū°uXŸŪ°jąVjąląu\ŸląmątXŸ‘ąĄąV¸ąēąuXŸēąĪąu\Ÿ}°mą0Ÿ‘ąĄą0Ÿ¸ąĪą0ŸŠ°mąŸ‘ąĄąŸ¸ąĪąŸŠ°¯°u@Ŋ°mąŸ‘ąĄąŸ¸ąĪąŸŊ°jąVjąląu\ŸląmątXŸ‘ąĄąV¸ąĪąVŊ°Į°qŸĮ°Ė°PŪ°jąVjąląu\ŸląmątXŸ‘ąĄąVŪ°mą0Ÿ‘ąĄą0ŸēąĪąu\ŸēąĪą0ŸGąląu`Ÿląmąt\Ÿ‘ąĄąu`ŸGąląudŸląmąt`Ÿ‘ąĄąudŸGąmą0Ÿ‘ąĄą0ŸKącąW‘ąĄąWPącąu\Ÿ‘ąĄąu\ŸPąWąP‘ąžąP}ą‘ą1Ÿ}ąąSą‘ąP€ą‘ą0Ÿ€ąąsŸą‘ąpŸŖą¸ąu`ŸŖą¨ąudŸ¨ą¯ąP¯ą¸ąudŸđą˛‘ ˛ ˛p ˛˛‘`˛˛‘ đąũą‘ũą˛p˛˛t˛˛‘d˛˛‘ ˛3˛‘ 3˛:˛p:˛B˛‘`B˛L˛‘ ˛*˛‘*˛3˛p3˛4˛t4˛B˛‘dB˛L˛‘P˛r˛Rr˛†´ķRŸP˛r˛Qr˛ŋ˛uDŋ˛Æ˛rÆ˛´uD´´t@´3´uD3´4´t@4´†´uD†˛´0Ÿ4´†´0Ÿ`˛Cŗu´3´u3´4´t k´z´u`˛ų˛Vų˛Cŗu ´1´V1´3´u 3´4´tk´z´u ĸ˛´0Ÿ4´†´0Ÿĸ˛Ĩ˛u`ŸĨ˛ē˛P瞴u`Ÿ´´t\Ÿ4´†´u`ŸŽ˛´0Ÿ4´†´0ŸŽ˛´udŸ´´t`Ÿ4´†´udŸö˛´‡Ÿ4´V´‡Ÿk´‚´‡Ÿö˛ü˛u@ ŗ´‡Ÿ4´V´‡Ÿk´‚´‡Ÿ ŗPŗVPŗ´uXŸ´´tTŸ4´V´uXŸk´‚´V ŗŗqŸŗŗP+ŗPŗVPŗ´uXŸ´´tTŸ4´V´uXŸ+ŗPŗVPŗŒŗuXŸŒŗ´V´´u\Ÿ´´tXŸ4´A´VA´C´uXŸC´V´u\Ÿ+ŗ´0Ÿ4´V´0Ÿm´‚´uXŸm´‚´0ŸWŗ´Ÿ4´V´ŸWŗ]ŗu@kŗ´Ÿ4´V´Ÿkŗ´V´´u\Ÿ´´tXŸ4´V´VkŗuŗqŸuŗzŗPŒŗ´V´´u\Ÿ´´tXŸ4´A´VŒŗ´0Ÿ4´A´0ŸC´V´u\ŸC´V´0Ÿõŗ´u`Ÿ´´t\Ÿ4´A´u`Ÿõŗ´udŸ´´t`Ÿ4´A´udŸõŗ´0Ÿ4´A´0Ÿųŗ´W4´A´Wūŗ´u\Ÿ4´A´u\Ÿūŗ´P4´>´P´4´1Ÿ´0´S0´4´P#´4´0Ÿ#´0´sŸ0´4´pŸV´k´u`ŸV´[´udŸ[´b´Pb´k´udŸđ´ĩRĩmˇķRŸđ´ĩQĩ^ĩuD^ĩdĩrdĩįļuDįļčļt@čļˇuDˇˇt@ˇmˇuD$ĩčļ1Ÿˇmˇ1ŸĩŌĩučļˇuˇˇt ?ˇNˇuĩĩPĩŌĩu čļˇu ˇˇt?ˇNˇu @ĩčļ0Ÿˇmˇ0Ÿ@ĩCĩu`ŸCĩXĩPXĩįļu`Ÿįļčļt\Ÿˇmˇu`ŸLĩčļ0Ÿˇmˇ0ŸLĩįļudŸįļčļt`ŸˇmˇudŸĩŌĩu ?ˇNˇu ĩ—ĩP—ĩŲĩW?ˇVˇWžĩŌĩu ?ˇNˇu žĩęĩSęĩįļuTŸįļčļtPŸˇˇuTŸ(ˇ?ˇuTŸ?ˇAˇSAˇmˇuTŸēĩęĩSęĩįļuTŸįļčļtPŸˇˇuTŸ(ˇ?ˇuTŸVˇmˇuTŸēĩęĩSęĩ#ļuTŸ#ļAļSAļ•ļuXŸ•ļäļSäļįļu\ŸįļčļtXŸˇˇS(ˇ*ˇuTŸ*ˇ?ˇuXŸVˇXˇuXŸXˇmˇu\Ÿēĩčļ0Ÿˇˇ0Ÿ(ˇ?ˇ0ŸVˇmˇ0ŸAˇVˇuTŸAˇVˇ0ŸöĩčļŸˇˇŸ(ˇ?ˇŸVˇmˇŸöĩũĩPũĩBļW(ˇ?ˇWļčļŸˇˇŸ(ˇ?ˇŸVˇmˇŸļAļSAļįļuXŸįļčļtTŸˇˇuXŸ(ˇ*ˇS*ˇ?ˇuXŸVˇmˇuXŸļļpŸļļP#ļAļSAļįļuXŸįļčļtTŸˇˇuXŸVˇmˇuXŸ#ļAļSAļ•ļuXŸ•ļäļSäļįļu\ŸįļčļtXŸˇˇSVˇXˇuXŸXˇmˇu\Ÿ#ļčļ0Ÿˇˇ0ŸVˇmˇ0Ÿ*ˇ?ˇuXŸ*ˇ?ˇ0ŸkļrļPrļŋļWVˇmˇWyļäļSäļįļu\ŸįļčļtXŸˇˇSVˇXˇSXˇmˇu\Ÿ•ļäļSäļįļu\ŸįļčļtXŸˇˇS•ļčļ0Ÿˇˇ0ŸÂļįļu`Ÿįļčļt\Ÿˇˇu`ŸÂļįļudŸįļčļt`ŸˇˇudŸÂļčļ0Ÿˇˇ0ŸÆļŪļWˇˇWËļŪļu\Ÿˇˇu\ŸËļŌļPˇˇPčļˇ1ŸčļˇVˇˇPķļˇ0ŸķļˇvŸˇˇpŸˇ(ˇu`ŸˇˇudŸˇˇPˇ(ˇudŸĐˇęˇR꡴ēķRŸĐˇ¸Q¸ēuDē ēt@ ēēQē0ēuD0ē1ēt@1ē´ēuD¸ ē1Ÿ1ē´ē1Ÿęˇ¸P ēēPēēu꡸R ēēR0¸ ē0Ÿ1ē´ē0Ÿ0¸3¸u`Ÿ3¸H¸PH¸ēu`Ÿē ēt\Ÿ1ē´ēu`Ÿ<¸ ē0Ÿ1ē´ē0Ÿ<¸ēudŸē ēt`Ÿ1ē´ēudŸ}¸¸P¸ šS†ēˆēSēŸēS§¸ēuPŸē ētLŸ1ēAēuPŸXēēuPŸ§¸č¸uPŸč¸šWšDšuTŸDšcšScšļšuXŸļšēWēēu\Ÿē ētXŸ1ēAēWXēZēuXŸZēoēu\ŸoēqēuTŸqē†ēuXŸ†ēˆēuPŸˆēēuTŸ§¸ ē0Ÿ1ēAē0ŸXēē0Ÿˇ¸ ē‡Ÿ1ēAē‡ŸXēē‡Ÿˇ¸ šS†ēˆēSɸ ē‡Ÿ1ēAē‡ŸXēē‡ŸÉ¸šWšēuTŸē ētPŸ1ēAēuTŸXē†ēuTŸ†ēēWɏ͏pŸĶ¸Ø¸P踚WšēuTŸē ētPŸ1ēAēuTŸXē†ēuTŸč¸šWšDšuTŸDšcšScšļšuXŸļšēWēēu\Ÿē ētXŸ1ēAēWXēZēuXŸZēoēu\ŸoēqēuTŸqē†ēuXŸč¸ ē0Ÿ1ēAē0ŸXē†ē0ŸˆēēuTŸˆēē0Ÿš ēŸ1ēAēŸXē†ēŸššPšošWoē†ēW%š ēŸ1ēAēŸXē†ēŸ%šcšScšēuXŸē ētTŸ1ēAēuXŸXēoēuXŸoēqēSqē†ēuXŸ%š/špŸ/š4šPDšcšScšēuXŸē ētTŸ1ēAēuXŸXēoēuXŸDšcšScšļšuXŸļšēWēēu\Ÿē ētXŸ1ēAēWXēZēuXŸZēoēu\ŸDš ē0Ÿ1ēAē0ŸXēoē0Ÿqē†ēuXŸqē†ē0Ÿ‰šŒšPŒšāšSXēZēSļšēWēēu\Ÿē ētXŸ1ēAēWļš ē0Ÿ1ēAē0ŸZēoēu\ŸZēoē0Ÿãšēu`Ÿē ēt\Ÿ1ēAēu`ŸãšēudŸē ēt`Ÿ1ēAēudŸãš ē0Ÿ1ēAē0Ÿįš˙šS1ēAēSėš˙šu\Ÿ1ēAēu\ŸėšķšP1ē>ēPē1ē1Ÿē.ēV.ē1ēP ē1ē0Ÿ ē.ēvŸ.ē1ēpŸCēXēu`ŸCēHēudŸHēOēPOēXēudŸĀēÖē‘ ÖēŨēpŨēåē‘`åēīē‘ ĀēÍē‘ÍēÖēpÖē×ēt×ēåē‘dåēīē‘đēģ‘ ģ ģp ģģ‘`ģģ‘ đēúē‘úēģpģģtģģ‘dģģ‘<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0Ÿ<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0ŸIģYģ[eģ~ģ[@ģBģõ %õ %ŸOģYģ1ŸOģYģSRģYģ0ŸRģYģsŸyģ›ģu`Ÿ›ģÉģVÉģūžu`Ÿūžŋt\ŸŋRĀu`Ÿ…ģŋĒŸ(ŋRĀĒŸ…ģ›ģV›ģœģtœģ ģt ģūžu´Ÿūžŋt°Ÿŋŋu´Ÿ(ŋRĀu´Ÿ…ģģpŸģ”ģP§ģūžu´Ÿūžŋt°Ÿŋŋu´Ÿ?ŋRĀu´Ÿ§ģöģu´Ÿöģ#ŧW#ŧQŧu¸ŸQŧdŧWdŧ’ŧuŧŸ’ŧ˛ŧW˛ŧáŧu@ŸáŧŊWŊ0ŊuDŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋW?ŋAŋu´ŸAŋXŋu¸ŸXŋoŋuŧŸoŋ†ŋu@Ÿ†ŋ ŋuDŸ ŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿ§ģŋ0Ÿ?ŋRĀ0Ÿ*ŋ?ŋu´Ÿ*ŋ?ŋ0Ÿeģ›ģu`Ÿ›ģÉģVÉģūžu`Ÿūžŋt\ŸŋRĀu`ŸrģūžudŸūžŋt`ŸŋRĀudŸÉģŋ֟?ŋRĀ֟ÉģĐģPĐģŧV?ŋVŋV×ģŋ֟?ŋRĀ֟×ģ#ŧW#ŧūžu¸Ÿūžŋt´Ÿŋŋu¸Ÿ?ŋVŋWVŋRĀu¸Ÿ×ģáģpŸáģæģPöģ#ŧW#ŧūžu¸Ÿūžŋt´Ÿŋŋu¸ŸVŋRĀu¸Ÿöģ#ŧW#ŧQŧu¸ŸQŧdŧWdŧ’ŧuŧŸ’ŧ˛ŧW˛ŧáŧu@ŸáŧŊWŊ0ŊuDŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWVŋXŋu¸ŸXŋoŋuŧŸoŋ†ŋu@Ÿ†ŋ ŋuDŸ ŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿöģŋ0ŸVŋRĀ0ŸAŋVŋu¸ŸAŋVŋ0Ÿ%ŧŋō$ßVŋRĀō$ß%ŧ,ŧP,ŧ´ŧVVŋ„ŋV3ŧdŧWdŧūžuŧŸūžŋt¸ŸŋŋuŧŸVŋmŋWmŋRĀuŧŸ3ŧūžu ūžŋtœŋŋu VŋRĀu 3ŧ<ŧpŸ<ŧAŧPQŧdŧWdŧūžuŧŸūžŋt¸ŸŋŋuŧŸmŋRĀuŧŸQŧdŧWdŧ’ŧuŧŸ’ŧ˛ŧW˛ŧáŧu@ŸáŧŊWŊ0ŊuDŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWmŋoŋuŧŸoŋ†ŋu@Ÿ†ŋ ŋuDŸ ŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\ŸQŧŋ0ŸmŋRĀ0ŸXŋmŋuŧŸXŋmŋ0ŸaŧŋĮŸmŋRĀĮŸaŧ´ŧVmŋ„ŋVsŧŋĮŸmŋRĀĮŸsŧ˛ŧW˛ŧūžu@ŸūžŋtŧŸŋŋu@Ÿmŋ„ŋW„ŋRĀu@Ÿsŧ}ŧpŸ}ŧ‚ŧP’ŧ˛ŧW˛ŧūžu@ŸūžŋtŧŸŋŋu@Ÿ„ŋRĀu@Ÿ’ŧ˛ŧW˛ŧáŧu@ŸáŧŊWŊ0ŊuDŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋW„ŋ†ŋu@Ÿ†ŋ ŋuDŸ ŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿ’ŧŋ0Ÿ„ŋRĀ0Ÿoŋ„ŋu@Ÿoŋ„ŋ0Ÿ´ŧŋØŸ„ŋRĀØŸ´ŧģŧPģŧŊV„ŋžŋVÂŧŋØŸ„ŋRĀØŸÂŧŊWŊūžuDŸūžŋt@ŸŋŋuDŸ„ŋžŋWžŋRĀuDŸÂŧĖŧpŸĖŧŅŧPáŧŊWŊūžuDŸūžŋt@ŸŋŋuDŸžŋRĀuDŸáŧŊWŊ0ŊuDŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWžŋ ŋuDŸ ŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿáŧŋ0ŸžŋRĀ0Ÿ†ŋžŋuDŸ†ŋžŋ0ŸŊŋ៞ŋRĀáŸŊ ŊP ŊŸŊVžŋÚŋVŊŋ៞ŋRĀáŸŊCŊWCŊūžuHŸūžŋtDŸŋŋuHŸžŋŧŋWŧŋRĀuHŸŊŊpŸŊ ŊP0ŊCŊWCŊūžuHŸūžŋtDŸŋŋuHŸŧŋRĀuHŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWŧŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿ0Ŋŋ0ŸŧŋRĀ0Ÿ ŋŧŋuHŸ ŋŧŋ0Ÿ@ŊŋōęŪŧŋRĀōęŪ@ŊŸŊVŧŋÚŋVRŊŊWŊūžuLŸūžŋtHŸŋŋuLŸŧŋÚŋWÚŋRĀuLŸRŊūžu˜ūžŋt”ŋŋu˜ŧŋRĀu˜RŊ[ŊpŸ[Ŋ`ŊPpŊŊWŊūžuLŸūžŋtHŸŋŋuLŸÚŋRĀuLŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWÚŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\ŸpŊŋ0ŸÚŋRĀ0ŸžŋÚŋuLŸžŋÚŋ0ŸŸŊŋáŸÚŋRĀ៟ŊĻŊPĻŊ;žVÚŋĀV­ŊŋáŸÚŋRĀ៭ŊßŊWßŊūžuPŸūžŋtLŸŋŋuPŸÚŋøŋWøŋRĀuPŸ­ŊˇŊpŸˇŊŧŊPĖŊßŊWßŊūžuPŸūžŋtLŸŋŋuPŸøŋRĀuPŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWøŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\ŸĖŊŋ0ŸøŋRĀ0ŸÜŋøŋuPŸÜŋøŋ0ŸÜŊŋōúŪøŋRĀōúŪÜŊ;žVøŋĀVîŊ9žW9žūžuTŸūžŋtPŸŋŋuTŸøŋĀWĀRĀuTŸîŊūžuūžŋtŒŋŋuøŋRĀuîŊ÷ŊpŸ÷ŊüŊP ž9žW9žūžuTŸūžŋtPŸŋŋuTŸĀRĀuTŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWĀĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿ žŋ0ŸĀRĀ0ŸúŋĀuTŸúŋĀ0Ÿ;žŋáŸĀRĀáŸ;žBžPBžŌžVĀRĀVIžŋáŸĀRĀáŸIž{žW{žūžuXŸūžŋtTŸŋŋuXŸĀ4ĀW4ĀRĀuXŸIžSžpŸSžXžRhž{žW{žūžuXŸūžŋtTŸŋŋuXŸ4ĀRĀuXŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋW4Ā6ĀuXŸ6ĀRĀu\Ÿhžŋ0Ÿ4ĀRĀ0ŸĀ4ĀuXŸĀ4Ā0Ÿxžŋō ß4ĀRĀō ßxžŌžV4ĀRĀVŠžũžWũžūžu\ŸūžŋtXŸŋŋW4ĀRĀWŠžūžuˆūžŋt„ŋŋuˆ4ĀRĀuˆŠž“žpŸ“ž˜žP¨žũžWũžūžu\ŸūžŋtXŸŋŋW¨žŋ0ŸÕžūžu`Ÿūžŋt\Ÿŋŋu`ŸÕžūžudŸūžŋt`ŸŋŋudŸÕžŋ0ŸŨžüžVŋŋVâžūžu\ŸūžŋtXŸŋŋu\ŸâžéžPŋŋPŋ(ŋu`ŸŋŋudŸŋŋPŋ(ŋudŸ<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0Ÿ~ˆĀ1Ÿ~ˆĀSĀˆĀ0ŸĀˆĀsŸˇĀŅÁ0ŸņÁ1Â0ŸˇĀēĀu`ŸēĀŅĀPŅĀŅÁu`ŸņÁ1Âu`ŸÅĀŅÁ0ŸņÁ1Â0ŸÅĀŅÁudŸņÁ1ÂudŸÁŅÁŸÂ1ŸÁÁPÁhÁWÂ1ÂW ÁŅÁŸÂ1Ÿ ÁŅÁVÂ1ÂV Á*ÁpŸ*Á/ÁP?ÁŅÁV?ÁŅÁ0ŸkÁŅÁu`ŸkÁŅÁudŸkÁŅÁ0ŸoÁ‡ÁWÂÁŅÁWtÁ‡Áu\ŸÂÁŅÁu\ŸtÁ{ÁPÂÁÎÁP‡ÁÂÁuTŸÁÂÁu`ŸÁ”ÁP˛ÁŋÁP”Á˛ÁuXŸšÁ¨Áu`Ÿ¨ÁŦÁRŦÁ˛Áu`ŸšÁŦÁPĶÁņÁuXŸŲÁãÁu`ŸãÁįÁRįÁņÁu`ŸŲÁįÁPķÁÂu`ŸÂÂRÂÂu`ŸķÁøÁudŸøÁ˙ÁP˙ÁÂudŸÂÂuTŸ ÂÂu`ŸÂÂRÂÂu`Ÿ ÂÂP^ÂhÂ1Ÿ^ÂhÂSaÂhÂ0ŸaÂhÂsŸxÂ{Âu`Ÿ{“ÂP“œÃu`ŸœÃŸÃt\ŸŸÃîÃu`Ÿ‚œÃudŸœÃŸÃt`ŸŸÃîÃudŸžÂŠÃŸĀÃîßžÂÅÂPÅ ÃVĀÃ×ÃVĖŠÃŸĀÃîÃŸĖ ÃW ÜÃuXŸœÃŸÃtTŸŸÃŠÃuXŸĀÃ×ÃW×ÃîÃuXŸĖÂÖÂpŸÖÂÛÂRë ÃW ÜÃuXŸœÃŸÃtTŸŸÃŠÃuXŸ×ÃîÃuXŸë ÃW Ã:ÃuXŸ:ÛÃW›ÃœÃu\ŸœÃŸÃtXŸŸÃŠÃW×ÃŲÃuXŸŲÃîÃu\ŸëŠÃ0Ÿ×ÃîÃ0ŸÂÃ×ÃuXŸÂÃ×Ã0Ÿ ÊÃ+Ÿ×ÃîÃ+Ÿ ÃÃPÃXÃV×ÃîÃVÊÃ+Ÿ×ÃîÃ+ŸÛÃW›ÃœÃu\ŸœÃŸÃtXŸŸÃŠÃW×ÃîÃWÃ%ÃpŸ%Ã*ÃQ:ÛÃW›ÃœÃu\ŸœÃŸÃtXŸŸÃŠÃW:ÊÃ0ŸsÜÃu`ŸœÃŸÃt\ŸŸÃŠÃu`ŸsÜÃudŸœÃŸÃt`ŸŸÃŠÃudŸsÊÃ0Ÿ{ÚÃVŸÃŠÃV€ÃœÃu\ŸœÃŸÃtXŸŸÃŠÃu\Ÿ€Ã‡ÃPŸÃĻÃPĢÃĀÃu`ŸĢðÃudŸ°ÃˇÃPˇÃĀÃudŸÄÄ1ŸÄÄSÄÄ0ŸÄÄsŸ(Ä+Äu`Ÿ+ÄCÄPCÄLÅu`ŸLÅOÅt\ŸOŞÅu`Ÿ2ÄLÅudŸLÅOÅt`ŸOŞÅudŸUÄYÅŸpŞÅŸUÄ\ÄP\ĤÄVpŇÅVcÄYÅŸpŞÅŸcÄĸÄWĸÄLÅuXŸLÅOÅtTŸOÅYÅuXŸpŇÅW‡ÅžÅuXŸcÄmÄpŸmÄrÄR‚ÄĸÄWĸÄLÅuXŸLÅOÅtTŸOÅYÅuXŸ‡ÅžÅuXŸ‚ÄĸÄWĸÄŅÄuXŸŅÄKÅWKÅLÅu\ŸLÅOÅtXŸOÅYÅW‡Å‰ÅuXŸ‰ÅžÅu\Ÿ‚ÄYÅ0Ÿ‡ÅžÅ0ŸrŇÅuXŸrŇÅ0Ÿ¤ÄYÅ2Ÿ‡ÅžÅ2Ÿ¤ÄĢÄPĢÄÅV‡ÅžÅV˛ÄYÅ2Ÿ‡ÅžÅ2Ÿ˛ÄKÅWKÅLÅu\ŸLÅOÅtXŸOÅYÅW‡ÅžÅW˛ÄŧÄpŸŧÄÁÄQŅÄKÅWKÅLÅu\ŸLÅOÅtXŸOÅYÅWŅÄYÅ0Ÿ#ÅLÅu`ŸLÅOÅt\ŸOÅYÅu`Ÿ#ÅLÅudŸLÅOÅt`ŸOÅYÅudŸ#ÅYÅ0Ÿ+ÅJÅVOÅYÅV0ÅLÅu\ŸLÅOÅtXŸOÅYÅu\Ÿ0Å7ÅPOÅVÅP[ÅpÅu`Ÿ[Å`ÅudŸ`ÅgÅPgÅpÅudŸyōf“RōfyōY“RōY1yōf“ ōfDyōYDyōfDUōYUyōfUyōfy“1Ÿyu“P“0Ÿu#Ÿ“pŸ †HŸ RHŸ %uđ|Ÿ%(P(Íuđ|ŸÍÖPÖ×t×ÛtÛƒuđ|Ÿƒ†‘č|Ÿ Ruđ|Ÿ Ļu¤}ŸĻŽPŽču¤}ŸčP7u¤}Ÿ7=uā~Ÿ=DPDiuā~ŸiŽPŽƒuā~Ÿƒ†‘Ø~Ÿ ėuā~Ÿėđu¤}Ÿôøuā~Ÿø1u¤}Ÿ1euā~Ÿ|'uā~Ÿ'Ru¤}Ÿ–—t—›tDEtEIt%uđ|Ÿ%(P(Íuđ|ŸÍÖPÖ×t×ÛtÛƒuđ|Ÿƒ†‘č|Ÿ Ruđ|ŸEOVOƒuø|Ÿƒ†‘đ|Ÿ ėuø|Ÿđøuø|ŸøVuø|Ÿ1'uø|Ÿ'RVøuđ|Ÿ“†HŸ ėHŸđøHŸ1'HŸ,RHŸ“uü|Ÿ]W]uü|Ÿu¸~ŸšWšƒu¸~Ÿƒ†‘°~Ÿ ėu¸~Ÿôøuü|Ÿ1Iuü|Ÿ|~uü|Ÿ~ŠWŠ'u¸~Ÿ,RWüu }Ÿ]w$Ÿ]u }ŸuÜ~Ÿšw$ŸšƒuÜ~Ÿƒ†‘Ô~Ÿ ėuÜ~Ÿôøu }Ÿ1Iu }Ÿ|~u }Ÿ~Šw$ŸŠ'uÜ~Ÿ,Rw$Ÿ u }ŠŽuÜ~u¤}Ÿ(P(1u¤}Ÿ†8Ÿ“ ė8Ÿ“đø8Ÿ“1'8Ÿ“OVOƒuø|Ÿƒ†‘đ|Ÿ ėuø|Ÿđøuø|Ÿ1'uø|Ÿ$uv<" ˆŸŸ uv<"ĖŸ†8Ÿ ė8Ÿđø8Ÿ1'8Ÿ$ uv<" „Ÿ uv<"Č2ƒuƒ†‘  ėuđøu1eu|Āu'u2OVOƒuø|Ÿƒ†‘đ|Ÿ ėuø|Ÿđøuø|Ÿ1'uø|Ÿ7†HŸ ėHŸôøHŸ1eHŸ|'HŸ7ĸuŦ~ŸĸĨPĨŋuŦ~ŸŋÆPƃuŦ~Ÿƒ†‘¤~Ÿ ėuŦ~ŸôøuŦ~Ÿ1euŦ~Ÿ|'uŦ~Ÿ7=uā~Ÿ=DPDiuā~ŸiŽPŽƒuā~Ÿƒ†‘Ø~Ÿ ėuā~Ÿôøuā~Ÿ1euā~Ÿ|'uā~Ÿ–—t—›t„ĸuŦ~ŸĸĨPĨŋuŦ~ŸŋÆPƃuŦ~Ÿƒ†‘¤~Ÿ ėuŦ~ŸôøuŦ~Ÿ1euŦ~Ÿ|'uŦ~ŸēÉu´~ŸÉĀVĀƒu´~Ÿƒ†‘Ŧ~Ÿ ėu´~Ÿ1:V:Iu´~Ÿ|ĄVĄ'u´~Ÿ1IuŦ~Ÿ†HŸ ėHŸ~'HŸu¸~ŸšWšƒu¸~Ÿƒ†‘°~Ÿ ėu¸~Ÿ~ŠWŠ'u¸~Ÿ}šw$ŸšƒuÜ~Ÿƒ†‘Ô~Ÿ ėuÜ~Ÿ~Šw$ŸŠ'uÜ~ŸŠŽuÜ~IOuā~ŸOaPaeuā~Ÿ†8Ÿ“ ė8Ÿ“Ą'8Ÿ“ĀVĀƒu´~Ÿƒ†‘Ŧ~Ÿ ėu´~ŸĄ'u´~ŸŸ uv<"ĖŸ†8Ÿ ė8ŸĄ'8ŸŸ uv<"Č­ƒuƒ†‘ ėuĄĀu'u­ĀVĀƒu´~Ÿƒ†‘Ŧ~Ÿ ėu´~ŸĄ'u´~ŸÜ†0Ÿ ė0ŸŠí0Ÿ'0ŸÜâuč|Ÿâ˙P˙ƒuč|Ÿƒ†‘ā|Ÿ ėuč|ŸŠíuč|Ÿ'uč|Ÿđ†0Ÿ ė0ŸŠí0Ÿ'0Ÿđƒuė|Ÿƒ†‘ä|Ÿ ėuė|ŸŠíuė|Ÿ'uė|Ÿ%†VŸ ėVŸŠŋVŸ#'VŸ%1uÔ|B†VŸ ėVŸŠŋVŸ#'VŸBmVmƒuä|Ÿƒ†‘Ü|Ÿ °V°Āuä|ŸĀėVŠŋV#'VBLqŸLQPimVmƒuä|Ÿƒ†‘Ü|Ÿ °V°Āuä|ŸĀėVi†0Ÿ ė0ŸŠŋuä|ŸŠŋ0ŸÅƒuč|Ÿƒ†‘ā|Ÿ ėuč|ŸÅƒuė|Ÿƒ†‘ä|Ÿ ėuė|ŸÅ†0Ÿ ė0ŸÉåWāėWÎåuä|Ÿāėuä|ŸÎŲPāæPåƒuā|Ÿƒ†‘Ø|Ÿ āuā|Ÿîƒuč|Ÿƒ†‘ā|Ÿ āuč|ŸîųP ĒPųƒuÜ|Ÿƒ†‘Ô|Ÿ°āuÜ|Ÿƒuč|Ÿƒ†‘ā|Ÿ°āuč|Ÿ PĐÚP ƒuŦ~Ÿƒ†‘¤~Ÿ°ĐuŦ~Ÿ1ƒu¸~Ÿƒ†‘°~Ÿ°Đu¸~Ÿ;ņuÜ~Ÿņƒu }Ÿƒ†‘˜}Ÿ°Āu }ŸĀĐuÜ~Ÿ>ƒuč|Ÿƒ†‘ā|Ÿ°Đuč|Ÿ>IPĀĘPI˙u¸~Ÿ˙ƒuü|Ÿƒ†‘ô|Ÿ°Āu¸~ŸbƒuŦ~Ÿƒ†‘¤~Ÿ°ĀuŦ~Ÿwƒu´~Ÿƒ†‘Ŧ~Ÿ°Āu´~Ÿ’ƒuŦ~Ÿƒ†‘¤~Ÿ°ĀuŦ~Ÿ¨Žuā~ŸŽŋPŋ^uā~Ÿ^du¤}ŸduPuƒu¤}Ÿƒ†‘œ}Ÿ°Āuā~ŸÉƒuđ|Ÿƒ†‘č|Ÿ°Āuđ|Ÿįƒuü|Ÿƒ†‘ô|Ÿ°Āuü|Ÿņƒu }Ÿƒ†‘˜}Ÿ°Āu }ŸôƒuŦ~Ÿƒ†‘¤~Ÿ°ĀuŦ~Ÿô˙P°ēP˙ƒuü|Ÿƒ†‘ô|Ÿƒuđ|Ÿƒ†‘č|ŸNƒuđ|Ÿƒ†‘č|Ÿ3ƒuø|Ÿƒ†‘đ|Ÿ^du¤}ŸduPuƒu¤}Ÿƒ†‘œ}Ÿŋčuč|ŸčėRėíuč|ŸŋĮuė|ŸĮÎPÎíuė|ŸĪíuā|ŸÛčuč|ŸčėRėíuč|ŸÛėPíuÜ|Ÿöuč|ŸRuč|ŸöP(Åōâ ō(Åōâ ōøōLÅōâøō Pō /ōpÅōâøō/PōpÅōâøō/Pōp‘ō‘Åōâøō/@ō@Pō‘Åōâøō/@ōÅâ1ŸÅßußâPÎâ0ŸÎßu#ŸßâpŸ HŸP HŸŸuđ|ŸŸĸPĸSuđ|ŸS\P\]t]ata uđ|Ÿ  tė|ŸP uđ|Ÿ u¤}Ÿ (P(bu¤}ŸbPˇu¤}ŸˇŊuā~ŸŊÄPÄéuā~ŸéP uā~Ÿ  tÜ~ŸPœuā~Ÿœ u¤}Ÿ ¨uā~Ÿ¨áu¤}ŸáRuā~ŸiŌuā~ŸŲ u¤}ŸŽtŽ’tøųtųũt‚Ÿuđ|ŸŸĸPĸSuđ|ŸS\P\]t]ata uđ|Ÿ  tė|ŸP uđ|ŸšĪVĪ uø|Ÿ  tô|ŸPœuø|Ÿ ¨uø|Ÿ¨ĀVáŲuø|ŸŲ V¨Āuđ|Ÿ  HŸPœHŸ ¨HŸáŨHŸâ HŸ }uü|Ÿ}ŨWŨ”uü|Ÿ”?W? u¸~Ÿ  t´~ŸPœu¸~Ÿ ¨u¸~ŸáRu¸~Ÿiqu¸~ŸquWuwuü|ŸwW–u¸~Ÿ´Ōuü|ŸŲŨWâ Wv}u }Ÿ}Ũw$ŸŨ”u }Ÿ”?w$Ÿ? uÜ~Ÿ  tØ~ŸPœuÜ~Ÿ ¨uÜ~ŸáRuÜ~ŸiquÜ~Ÿquw$Ÿuwu }Ÿww$Ÿ–uÜ~Ÿ´Ōu }ŸŲŨw$Ÿâ w$Ÿ‡u } uÜ~ĀÆu¤}ŸÆØPØáu¤}Ÿ— AŸ“PœAŸ“ ¨AŸ“áŲAŸ“—ĪVĪ uø|Ÿ  tô|ŸPœuø|Ÿ ¨uø|ŸáŲuø|Ÿ—š upt" ˆŸš uv<" ˆŸ upt"ĖŸ! uv<"ĖŸ— AŸPœAŸ ¨AŸáŲAŸ—š upt" „š  uv<" „ upt"Č! uv<"ȲˇuĐ|iŌuĐ|˛ĪVĪ uø|Ÿ  tô|ŸPœuø|Ÿ ¨uø|ŸáŲuø|Ÿˇ HŸPœHŸ ¨HŸáRHŸiŌHŸˇ"uŦ~Ÿ"%P%EuŦ~ŸELPL uŦ~Ÿ  t¨~ŸPœuŦ~Ÿ ¨uŦ~ŸáRuŦ~ŸiŌuŦ~ŸˇŊuā~ŸŊÄPÄéuā~ŸéP uā~Ÿ  tÜ~ŸPœuā~Ÿ ¨uā~ŸáRuā~ŸiŌuā~ŸŽtŽ’t"uŦ~Ÿ"%P%EuŦ~ŸELPL uŦ~Ÿ  t¨~ŸPœuŦ~Ÿ ¨uŦ~ŸáRuŦ~ŸiŌuŦ~Ÿ:Iu´~ŸIFVF u´~Ÿ  t°~ŸPœu´~Ÿ ¨u´~ŸáRu´~Ÿiqu´~Ÿq–V´ÎV´ÎuŦ~Ÿ” HŸPœHŸ ¨HŸáRHŸiuHŸw–HŸ”?W? u¸~Ÿ  t´~ŸPœu¸~Ÿ ¨u¸~ŸáRu¸~Ÿiqu¸~ŸquWwW–u¸~Ÿũ?w$Ÿ? uÜ~Ÿ  tØ~ŸPœuÜ~Ÿ ¨uÜ~ŸáRuÜ~ŸiquÜ~Ÿquw$Ÿww$Ÿ–uÜ~Ÿ uÜ~–œuā~ŸœŽPŽ´uā~Ÿ AŸ“PœAŸ“ ¨AŸ“áRAŸ“iqAŸ“FVF u´~Ÿ  t°~ŸPœu´~Ÿ ¨u´~ŸáRu´~Ÿiqu´~Ÿ upt"ĖŸ! uv<"ĖŸ AŸPœAŸ ¨AŸáRAŸiqAŸ upt"Č! uv<"Č3 uČ|  tÄ|PœuČ| ¨uČ|áøuČ|iquČ|3FVF u´~Ÿ  t°~ŸPœu´~Ÿ ¨u´~ŸáRu´~Ÿiqu´~Ÿb 0ŸPœ0Ÿ ¨0Ÿá%0Ÿbhuč|Ÿh…P… uč|Ÿ  tä|ŸPœuč|Ÿ ¨uč|Ÿá%uč|Ÿv 0ŸPœ0Ÿ ¨0Ÿá%0Ÿv uė|Ÿ  tč|ŸPœuė|Ÿ ¨uė|Ÿá%uė|ŸĢ VŸPœVŸ ¤VŸá÷VŸĢˇuĐ|Č VŸPœVŸ ¤VŸá÷VŸČķVķ uä|Ÿ  tā|ŸP`V`puä|ŸpœV ¤Vá÷VČŌrŸŌ×PīķVķ uä|Ÿ  tā|ŸP`V`puä|ŸpœVī 0ŸPœ0Ÿá÷uä|Ÿá÷0ŸK uč|Ÿ  tä|ŸPœuč|ŸK uė|Ÿ  tč|ŸPœuė|ŸK 0ŸPœ0ŸOkWœWTkuä|Ÿœuä|ŸT_P–Pk uā|Ÿ  tÜ|ŸPuā|Ÿt uč|Ÿ  tä|ŸPuč|ŸtPPZP uÜ|Ÿ  tØ|Ÿ`uÜ|Ÿˆ uč|Ÿ  tä|Ÿ`uč|Ÿˆ“P€ŠP“ uŦ~Ÿ  t¨~Ÿ`€uŦ~Ÿˇ u¸~Ÿ  t´~Ÿ`€u¸~ŸÁwuÜ~Ÿw u }Ÿ  tœ}Ÿ`pu }Ÿp€uÜ~ŸÄ uč|Ÿ  tä|Ÿ`€uč|ŸÄĪPpzPĪ…u¸~Ÿ… uü|Ÿ  tø|Ÿ`pu¸~Ÿč uŦ~Ÿ  t¨~Ÿ`puŦ~Ÿũ u´~Ÿ  t°~Ÿ`pu´~Ÿ uŦ~Ÿ  t¨~Ÿ`puŦ~Ÿ.4uā~Ÿ4EPEäuā~Ÿäęu¤}ŸęûPû u¤}Ÿ  t }Ÿ`puā~ŸO uđ|Ÿ  tė|Ÿ`puđ|Ÿm uü|Ÿ  tø|Ÿ`puü|Ÿw u }Ÿ  tœ}Ÿ`pu }Ÿz uŦ~Ÿ  t¨~Ÿ`puŦ~Ÿz…P`jP… uü|Ÿ  tø|Ÿž uđ|Ÿ  tė|Ÿš uø|Ÿ  tô|ŸÎ uđ|Ÿ  tė|Ÿäęu¤}ŸęûPû u¤}Ÿ  t }Ÿ÷ uč|Ÿ $R$%uč|Ÿ÷˙uė|Ÿ˙P%uė|Ÿ%uā|Ÿ uč|Ÿ $R$%uč|Ÿ$P%@uÜ|Ÿ.;uč|Ÿ;?R?@uč|Ÿ.?P!P6TPT™SœžSlœæŸ"P7MPM”SčęSQŽYŸčųYŸeŽæŸŽáwŸ”ËV”šS”ēSēŋstŸŋßSšŖSŖ§stŸ§ēSēÃstŸšŖsŸŖ§s|Ÿ§ēsŸēÃs|Ÿš§udŸ­ˇudŸˇžRžËudŸš§P­žPËáwŸËĶ w w<ŸËāVĪĶ w w<ŸĪÛV˙"S˙VV"vtŸvŸ"v|Ÿ ucŸR"ucŸ P"* w w<Ÿ&* w w<Ÿ&2S.P.NuT“P“ķuT7u-uÅÉuÍĶu?bSbftf‚sŸ‚ŒSgjpu "ŸjyP{ˆR{ˆP‚ˆQ¨xŸÅÉxŸÍāxŸŋrŸāŸāîPîûS8ŨŸÉͨŸāķ¨ŸOÅĒŸrÅČŸr€P€SÅ†Ÿ›P›ÅSÆ ÆrŸ ÆÆPÆÆtÆÆ‘hÆ$Æ‘#Ÿ=ÆŽÆ‘ŽÆąÆW௞Æ‘PÆŽÆ‘#TŸmÆÆ0ŸƆÆV†ÆœÆvŸœÆŽÆVpÆŽÆ‘#TŸƒÆŽÆSƒÆ›ÆRƒÆ‰ÆrŸ‰ÆÆPÆ”Æt”ƛƑh:UP“R“`dP“R“LU1Ÿ`m1ŸLUP`kPkmr!s žSžĸ‘ĸS‘SJ‘JLSLc‘&žSžĸ‘ĸS‘SJ‘JLSLc‘&GPG‡V‡ WĸˇPˇÍVÍßPßčVč˙P˙VP(V(?P?HVH_P_hVhPˆVˆŸPŸ¨V¨ŋPŋČVČĶPĶQVQ^P^pWpVŊWŊVPAVAcW8KæŸ8KSĸÍ7ŸĸÍSÍčéŸÍčSčėŸčS(õŸ(S(HŸ(HSHhøŸHhShˆīŸhˆSˆ¨ōŸˆ¨S¨Č㟨ČSČĶp˙ŸĶQv˙ŸQ^p˙Ÿ^pw˙ŸŊv˙Ÿp˙ŸAv˙Ÿp‘`ŸŊĀ‘`ŸĀÄRÄב`Ÿ‘`Ÿ4‘`ŸpSŊ×SS‘4‘p‘`ŸŊĀ‘`ŸĀÄRÄב`Ÿp‘[ŸŊÍ‘[ŸÍŅRŅב[Ÿ#PĘŅP#p‘PŊĘ‘P)p‘`ŸŊĀ‘`ŸĀÄRÄĘ‘`Ÿ)4PŊÄPčëPëķpķ‘\×S4‘`Ÿ%/‘[Ÿ/3R34‘[Ÿ%3P4A‘P:A‘[Ÿ:APKĸūŸ¸ÍūŸ4ŊūŸôūŸJYūŸKžSžĸ‘¸ÍS4ŊSôSJLSLY‘`šžŸQŊžŸžŸJYžŸ`šSQŊSSJLSLY‘‡šÁŸ‡šS}ŊŨŸJYŨŸ}ŊSJLSLY‘’Ŋ‘`ŸĸŊ‘`ŸĨŗ‘[ŸŗˇRˇŊ‘[ŸĨˇPLY‘`ŸRY‘[ŸRYPĀÆÉÆ‘ÉÆÍÆP ĻSĻĒ‘Ē!S!#‘#%S%R‘RTSTk‘&ĻSĻĒ‘Ē!S!#‘#%S%R‘RTSTk‘&/P/V¨WĒVVVcPcuWuƒVƒ‰Q‰ŒVŒĘWĘVPIVIkW@SæŸ@SSĒÕ7ŸĒÕSÕđéŸÕđSđėŸđS(õŸ(S(HŸ(HSHhøŸHhShˆīŸhˆSˆ¨ōŸˆ¨S¨Č㟨ČSČVvH$H&ŸVcpH$H&ŸcuwH$H&ŸĘvH$H&ŸpH$H&ŸIvH$H&Ÿ u‘`ŸĘÍ‘`ŸÍŅRŅä‘`Ÿ#‘`Ÿ'<‘`Ÿ uSĘäS!S!#‘'<‘u‘`ŸĘÍ‘`ŸÍŅRŅä‘`Ÿu‘[ŸĘÚ‘[ŸÚŪRŪä‘[Ÿ(P×ŪP(u‘PĘבP.u‘`ŸĘÍ‘`ŸÍŅRŅב`Ÿ.9PĘŅPđķPķûpû‘\äS'<‘`Ÿ-7‘[Ÿ7;R;<‘[Ÿ-;P<I‘PBI‘[ŸBIPSĒūŸĀÕūŸ9ĘūŸüūŸRaūŸSĻSĻĒ‘ĀÕS9ĘSüSRTSTa‘hĸžŸVĘžŸžŸRažŸhĸSVĘSSRTSTa‘ĸÁŸĸSŠĘŨŸRaŨŸŠĘSRTSTa‘ŸĘ‘`Ÿ¯Ę‘`Ÿ˛Ā‘[ŸĀÄRÄĘ‘[Ÿ˛ÄPTa‘`ŸZa‘[ŸZaPĐÆŲÆ‘ŲÆŨÆP-9P9GWI’W”ūW ESEHu HItIS”āSāųu -ESEHu HItIS”āSāųu IS”āSāųu y”ÁŸySĨāSāųu ēŪudŸĘŪudŸÍ×ucŸ×ÛRÛŪucŸÍÛPæđucŸđôRôūucŸæôP0S9KS0‘oŸ9D‘oŸDHRHK‘oŸ$P9HP Į|Įs ŸĮ¤Įs Ÿ§ĮÍĮs Ÿ ĮÍĮ0Ÿ$Į@ĮVēĮÍĮV)Į@ĮuwŸēĮÍĮuwŸ)Į4ĮPēĮĮĮP@Į|ĮsŸĮ¤ĮsŸ§ĮēĮsŸ@ĮēĮ0ŸGĮ_ĮV§ĮēĮVLĮ_ĮuwŸ§ĮēĮuwŸLĮSĮP§ĮˇĮP_Į|ĮsŸĮ¤ĮsŸeĮ~ĮuwŸ~ĮĮtsŸĮĻĮuwŸĻĮ§ĮtsŸeĮnĮPnĮxĮs<ŸĮ‡ĮPlĮ|ĮSˆĮ¤ĮSqĮxĮuwŸĮ”ĮuwŸqĮĮPĮŸĮPĪĮÔĮs ŸÔĮÛĮPÛĮČs ŸÜĮāĮsŸāĮčĮPčĮČsŸéĮČsŸōĮüĮuwŸüĮČRČČuwŸōĮČPČČSČČuwŸČČRČČuwŸČČPXČ\Čp ŸXČ\ČS“\ČzČS“zČ}ČsŸ“}ȁČS“ÉÉS“bȁČVÉ'ÉV–Č™ČpŸ™ČĄČu#Ÿ™ČĄČu# u#4Ÿ™ČĨČPČĄČu# u#4ŸČĨČPŠČˇČu# Ÿ¯ČˇČu#u# 4Ÿ¯ČģČPŗČˇČu#u# 4ŸŗČģČPŋČŲČu#Ÿ ÉÉu#ŸŋČÉ0ŸÉČáČS ÉÉSÎČáČugŸ ÉÉugŸÎČÕČP ÉÉPáČøČu#ŸøČųČ‘#ŸųČÉu#ŸÉ Ét#ŸęČøČugŸøČųČ‘_ŸųČÉugŸÉ ÉtcŸęČÉP'É5Éu#Ÿ-É5Éu# u#4Ÿ-É9ÉP1É5Éu# u#4Ÿ1É9ÉP=ÉKÉu# ŸCÉKÉu#u# 4ŸCÉOÉPGÉKÉu#u# 4ŸGÉOÉPSÉ[Éu#Ÿ[É^ÉpŸ^ÉcÉPdɃÉu#ŸpÉzÉugŸzÉ~ÉR~ɈÉugŸpÉ~ÉPČÉņËvԟôËjĖvԟmĖÍÍvԟÍÉėÉW“ėÉīÉwŸ“īÉôÉW“ôÉĘW“ĘĘwŸ“ĘĘW“ŅÉôÉSöÉĘSŅÉėÉSĘņËvȟôËjĖvȟmĖ|ĖvȟšĖœĖvȟÍ Ívȟ ÍDÍvȟpÍrÍvȟŠÍˇÍvȟ&Ę<ĘS“<Ę?ĘsŸ“?ĘCĘS“CĘ_ĘS“_ĘbĘs|Ÿ“,Ę8ĘPEĘ[ĘP,Ę8ĘPžĘņËvüŸôËjĖvüŸmĖ|ĖvüŸšĖœĖvüŸÍ ÍvüŸ ÍDÍvüŸŠÍˇÍvüŸžĘ|Ė0ŸšĖœĖ0ŸÍ Í0Ÿ ÍDÍ0ŸŠÍˇÍ0ŸŽĘņËvøŸôËjĖvøŸmĖ|ĖvøŸšĖœĖvøŸÍ ÍvøŸ ÍBÍvøŸŠÍˇÍvøŸŽĘ|Ė0ŸšĖœĖ0ŸÍ Í0Ÿ ÍBÍ0ŸŠÍˇÍ0Ÿ¸ĘįĘSmĖzĖSŠÍĸÍSŋĘĮĘPËĘįĘSmĖzĖSĐĘįĘudŸmĖzĖudŸĐĘÛĘPmĖtĖPŒÍĸÍS‘Í›ÍudŸ›ÍŸÍRŸÍ¤ÍudŸ‘ÍŸÍPįĘņËvĖŸôËjĖvĖŸzĖ|ĖvĖŸšĖœĖvĖŸÍ ÍvĖŸ ÍBÍvĖŸ¤ÍˇÍvĖŸËËS-ËņËvėŸôËOĖvėŸ]ĖjĖvėŸzĖ|ĖvėŸ ÍBÍvėŸ¤ÍˇÍvėŸ-ËMËS“MËÎËS“$Í)ÍS“-ËOĖōÛV]ĖmĖōÛVzĖ|ĖōÛV ÍBÍōÛV¤ÍˇÍōÛV-ËUËvđŸ$ÍBÍvđŸJËUËōÛVUËņËvėŸôËOĖvėŸ]ĖjĖvėŸzĖ|ĖvėŸ Í$ÍvėŸ¤ÍˇÍvėŸUË]Ë vôvė4ŸUËaËPYË]Ë vôvė4ŸYËaËP)ÍBÍvėŸ)Í5Í vôvė4Ÿ)Í9ÍR1Í5Í vôvė4Ÿ1Í9ÍReËņËvāŸôËOĖvāŸ]ĖjĖvāŸzĖ|Ėv⟠Í$ÍvāŸ¤ÍˇÍvāŸhËpË včvā4ŸhËtËPlËpË včvā4ŸlËtËPxËņËvԟôËOĖvԟ]ĖjĖvԟzĖ|Ėvԟ Í$Ívԟ¤ÍˇÍvԟ{ËƒË vÜvÔ4Ÿ{ˇËPËƒË vÜvÔ4ŸˇËP‹ËņËvȟôËOĖvȟ]ĖjĖvȟzĖ|Ėvȟ Í$Ívȟ¤ÍˇÍvȟŽË–Ë vĐvČ4ŸŽËšËP’Ë–Ë vĐvČ4Ÿ’ËšËPžËņËvŸôËOĖvŸ]ĖjĖvŸzĖ|ĖvŸ Í$ÍvŸ¤ÍˇÍvŸŠË¸ËPÎËĐËPĐËđËSôË ĖP ĖOĖS]ĖiĖSzĖ|ĖS¤ÍŠÍSĖOĖYŸ¤ÍˇÍYŸ$ĖOĖæŸâËņËvŸ]ĖjĖvŸåËķËudŸķËôËt`Ÿ]ĖlĖudŸlĖmĖt`ŸåËôËP]ĖdĖP|˚ĖvŸ‚ĖŒĖucŸŒĖĖRĖšĖucŸ‚ːĖPĢĖķĖvāŸŽĖļĖ včvā4ŸŽĖēĖP˛ĖļĖ včvā4Ÿ˛ĖēĖPžĖķĖvԟÁĖÉĖ vÜvÔ4ŸÁĖÍĖPÅĖÉĖ vÜvÔ4ŸÅĖÍĖPŅĖķĖvȟÔĖÜĖ vĐvČ4ŸÔĖāĖPØĖÜĖ vĐvČ4ŸØĖāĖPDÍJÍvøŸJÍTÍPTÍXÍvøŸXÍpÍvĖŸr͊ÍvüŸr͊Í0ŸÎ,ÎV,Î2ÎsŸ2Î?ÎS?ÎdÎPdΊÎSžÎÃÎSeÎŦÎlŸžÎŅÎlŸ|ÎŦÎæŸ]Ī`ĪWgĐ|Đ0Ÿ]Ī`ĪsŸgĐ|ĐsŸ¨ĪŽĪs8ŸŽĪĩĪPĩĪĐs8Ÿ ĐgĐs8Ÿ|Đ´Đs8ŸŌĐäĐs8ŸŊĪŋĪPŋĪĐW Đ!ĐP!ĐgĐW|Đ~ĐWŌĐ×ĐW%ĐgШŸŌĐäШŸ9ĐgĐæŸÃĪĐs؟ØĪĐsäŸ`ĪĐs Ÿ ĐgĐs Ÿ|Đ´Đs ŸŌĐäĐs Ÿ{ĪĐsŸ ĐgĐsŸ|Đ´ĐsŸŌĐäĐsŸ~Đ´ĐsŸĐ‰Đ s s4ŸĐĐP…ЉРs s4Ÿ…ЍĐP‘Đ´Đs Ÿ”ĐœĐ ss 4Ÿ”Đ ĐP˜ĐœĐ ss 4Ÿ˜Đ ĐP¤ĐŠĐsŸŠĐ°ĐP°Đ´ĐsŸ´ĐŌĐsŸēĐÄĐucŸÄĐČĐRČĐŌĐucŸēĐČĐPVŅYŅWlŌ|Ō0ŸVŅYŅsŸlŌ|ŌsŸ~ҁŅWZŌlŌ0Ÿ~ҁŅs ŸZŌlŌs ŸœŅŸŅsŸŸŅĻŅPĻŅ÷ŅsŸûŅZŌsŸ|ŌŽŌsŸĐŌāŌsŸŽŅ°ŅP°ŅøŅVûŅŌPŌZŌV|Ō~ŌVĐŌÕŌVŌZŌ¨ŸĐŌāŌ¨Ÿ,ŌZŌæŸ´Ņ÷Ņs<ŸÉŅ÷Ņsȟ~ԁŌs ŸŌŠŌPŠŌŽŌs ŸŽŌ“ŌsŸ“ŌšŌPšŌžŌsŸžŌŗŌsŸ¤ŌŽŌucŸŽŌ˛ŌR˛ŌŗŌucŸ¤Ō˛ŌPŗŌĐŌS¸ŌÂŌucŸÂŌÆŌRÆŌĐŌucŸ¸ŌÆŌP‘FWHhW3@SHbS@VHbV'p|Ÿ'P3>PHUPUWv4Ÿ35R5>p|ŸHUp|ŸUWv8Ÿ3@WHbW3@1ŸHb1Ÿ5>r4ŸH\r4Ÿ”Ÿq4ŸŸŠ‘\4Ÿ q4ŸYhq4ŸŠíSíøvCSОS˛Á0ŸÁÅsu"ŸÅĶQ×øUQ(‘\(C0Ÿ|Pø1ŸChP„Cō2mWhō2møV CVYhV”ŠV”Š0ŸŠøVCVŠļUļø‘C‘ŠĢsq"ŸĢēQ´íSíøvCS´øWCW´ÁP(:P´ø1ŸC1Ÿ¸Ču4Ÿ(Cu4ŸÅĶQQ(‘\ÅĶvvÅøW(WÅø1Ÿ(1ŸĘ×u4Ÿ(u4Ÿ×øV×ß vp4Ÿ×ãPÛįVÛß vp4ŸÛãP‘BWDĪWîfW,<VDZV,V,<‘DZ‘:s|ŸDMs|ŸMO ‘#8Ÿ:SDMSMO ‘#4Ÿ,:SDMSMO ‘#4Ÿ,/s|Ÿ/1P1:s|ŸDMs|ŸMO ‘#8Ÿ,<WDZW,<1ŸDZ1Ÿ1:p4ŸDTp4Ÿ‡r4ŸŖ‘\4Ÿųûr4ŸQfr4ŸŖîUû>UŖ¯U¯¸0Ÿ¸ŋuq"ŸŋĘQĪîWûQ ‘X >0ŸrƒQîû1Ÿ>[Q[f vp2&1$Ÿz>ō“uOfō“uƒîVų>VQfV‡ŖV‡Ŗ0ŸŖîVû>VŖî‘û>‘ŖĨur"ŸĨąR¯îUû>U¯ĪWû>W¯Ę‘Xû‘X >‘X¯î1Ÿû>1Ÿ¯¸q4Ÿ 1q4Ÿ1>‘\4ŸŋĘQûQ ‘XŋÁRÁĘvû vŋĪWû Wŋî1Ÿû 1ŸÁĘr4Ÿûr4Ÿ ‘\4ŸĪîVĪ× vp4ŸĪÛPĶßVĶ× vp4ŸĶÛPĶ*Ķ‘XĶgĶ‘gĶqĶrqĶwĶ‘ĶgĶ‘ŸgĶqĶRqĶ—Ķ‘ŸĶSĶs ŸSĶXĶ‘# ŸX͆Ķs Ÿ†Ķ—Ķ‘# Ÿ Ķ3Ķs Ÿ Ķ3Ķ‘Ÿ Ķ-ĶP6ĶSĶsŸSĶXĶ‘#Ÿw͆ĶsŸ†Ķ—Ķ‘#ŸEĶXĶ‘lŸw͊Ķ‘lŸŠĶ‘ĶR‘Ķ—Ķ‘lŸEĶSĶsŸSĶXĶ‘#Ÿw͆ĶsŸ†Ķ—Ķ‘#ŸGĶSĶsŸGĶSĶ‘lŸGĶPĶPPĶSĶs‘FWHhW3@SHbS@VHbV'p|Ÿ'P3>PHUPUWv4Ÿ35R5>p|ŸHUp|ŸUWv8Ÿ3@WHbW3@1ŸHb1Ÿ5>r4ŸH\r4Ÿ”Ÿq4ŸŸŠ‘\4Ÿ q4ŸYhq4ŸŠíSíøvCSОS˛Á0ŸÁÅsu"ŸÅĶQ×øUQ(‘\(C0Ÿ|Pø1ŸChP„Cō×WhōאøV CVYhV”ŠV”Š0ŸŠøVCVŠļUļø‘C‘ŠĢsq"ŸĢēQ´íSíøvCS´øWCW´ÁP(:P´ø1ŸC1Ÿ¸Ču4Ÿ(Cu4ŸÅĶQQ(‘\ÅĶvvÅøW(WÅø1Ÿ(1ŸĘ×u4Ÿ(u4Ÿ×øV×ß vp4Ÿ×ãPÛįVÛß vp4ŸÛãP ĶąĶ‘ĪĶčĶPčĶ/ÔsŸßÔōÔPōÔÕSQÕdÕsŸūÕÖsŸÕĶčĶPčĶ/ÔsŸQÕdÕsŸūÕÖsŸÕĶ×Ô0ŸÕ"Ö0ŸÕĶ×ÔŸÕ"ÖŸéĶ×Ô ˙ŸÕ"Ö ˙ŸéĶ/ÔSQÕdÕSūÕÖSéĶ×ÔŸÕ"ÖŸéĶ×ÔŸÕ"ÖŸ!ÔMÔu\ŸMÔQÔPQÔRÔtRÔVÔtVÔ×Ôu\ŸÕQÕu\Ÿ‚Õ¸Õu\ŸĪÕúÕu\ŸūÕ"Öu\Ÿ!ÔIÔVIÔ×ÔuXŸÕQÕuXŸ‚Õ¸ÕuXŸĪÕŅÕVŅÕúÕuXŸūÕÖVÖ"ÖuXŸ!Ô,ÔP,Ô×ÔWÕQÕW‚Õ¸ÕWĪÕúÕWūÕ"ÖW4ÔMÔu\ŸMÔQÔPQÔRÔtRÔVÔtVÔ×Ôu\ŸÕQÕu\Ÿ‚ÕŦÕu\ŸĪÕúÕu\ŸÖ"Öu\Ÿ4ÔIÔVIÔ×ÔuXŸÕQÕuXŸ‚ÕŦÕuXŸĪÕŅÕVŅÕúÕuXŸÖ"ÖuXŸ4ÔhÔShÔlÔwĪÕ×ÕS×ÕÛÕtáÕúÕSÖÖSãÕúÕsŸéÕķÕudŸķÕ÷ÕR÷ÕúÕudŸéÕ÷ÕPÖÖs Ÿ ÖÖudŸÖÖRÖÖudŸ ÖÖPkÔ×ÔwŸÕQÕwŸ‚ÕŦÕwŸÖ"ÖwŸkÔ×ÔWÕQÕW‚ÕŦÕWÖ"ÖWyÔ×ÔSÕQÕS‚Õ„ÕS„Õ™ÕudŸyÔ×ÔWÕQÕW‚Õ™ÕWˆÔ×ÔSÕQÕS‹Ô×Ôu`ŸÕQÕu`Ÿ‹Ô–ÔPÕÕP„Õ™ÕudŸŠÕ”Õu`Ÿ”Õ˜ÕR˜Õ™Õu`ŸŠÕ˜ÕP™ÕŦÕwŸ™ÕŦÕ0Ÿ–Ô×ÔWÕÕW%ÕQÕW–Ô×Ôu#ĖŸÕÕu#ĖŸ%ÕQÕu#ĖŸĸÔŊÔW1ÕQÕWĸÔŊÔP1ÕAÕPAÕBÕu#ĖBÕHÕpxŸĸÔ×Ôu`ŸÕÕu`Ÿ%ÕQÕu`ŸĸÔŊÔpŸ1ÕAÕpŸAÕBÕ u#Ė#ŸBÕHÕPŽÔŊÔpŸŽÔŊÔu`ŸŽÔˇÔQŊÔ×Ôu\ŸÕÕu\Ÿ%Õ1Õu\ŸÃÔ×ÔudŸÕÕudŸ%Õ1ÕudŸÃÔĘÔP%Õ.ÕPĘÔ×ÔuXŸÕÕuXŸĐÔ×ÔudŸÕÕudŸĐÔ×ÔPÕÕPdՂÕuXŸjÕtÕuVŸtÕxÕRxՂÕuVŸjÕxÕP¸ÕĪÕu\ŸžÕČÕuVŸČÕĖÕRĖÕĪÕuVŸžÕĖÕP0ÖIÖ‘VÖjÖ‘jÖqÖqqÖwÖ‘7ÖjÖ‘ŸjÖqÖQqÖwÖ‘Ÿ7ÖRÖrŸRÖVÖ‘#ŸVÖfÖrŸfÖwÖ‘#Ÿ?ÖRÖrŸ?ÖRÖ‘Ÿ?ÖLÖP‘Ö¨ÖQŦÖēÖQēÖĮÖ‘Ö¨ÖRŦÖļÖRļÖģÖ‘ģÖÁÖrxŸ‘ÖēÖ‘lŸēÖÁÖQÁÖĮÖ‘lŸ‘Ö¨ÖrŸŦÖļÖrŸļÖģÖ‘#ŸģÖÁÖR™Ö¨ÖrŸ™Ö¨Ö‘lŸ™ÖĸÖP×%×S+×G×S×%×V+×G×V×%×S+×G×S ×%×R+×6×R6×;×v;×A×rxŸ×%בlŸ+×:בlŸ:×A×QA×GבlŸ×%×rŸ+×6×rŸ6×;×v#Ÿ;×A×R×%×rŸ×%בlŸ××Pe×h×sŸh×y×Py×ÄŲsŸÄŲÅŲvŧ~ŸÅŲĮŲu@HŸĮŲČŲt¸€ŸČŲ§ÜsŸz×ÄŲSÄŲÅŲv´~ŸÅŲĮŲu@ ŸĮŲČŲt¸ˆŸČŲ§ÜSz×}×s Ÿ}ח×P—×›×s›×ÄŲs ŸÄŲÅŲvĀ~ŸÅŲĮŲu@DŸĮŲČŲt¸|ŸČŲ§Üs Ÿ‡×ÄŲSÄŲÅŲv´~ŸÅŲĮŲu@ ŸĮŲČŲt¸ˆŸČŲ§ÜS‡×ÄŲsŸÄŲÅŲvČ~ŸÅŲĮŲu@<ŸĮŲČŲt¸tŸČŲ§ÜsŸŸ×Ŗ×PŖ×ĮŲu@ĮŲČŲtŧČŲOÛu@OÛmÛs ŸmۙÛu@™Û9Üs Ÿ9ܧÜu@Ģ׹×Pą×Ķ×VČŲĶŲPĶŲ-ÚVMÛOÛVmÛoÛVčŲ-Ú¨ŸmۀÛ¨ŸüŲ-ÚæŸÃ×ÄŲsŸÄŲÅŲvô~ŸÅŲĮŲu@# ŸĮŲČŲt¸HŸ-ÚMÛsŸ€Û§ÜsŸĶ×Ų×PŲ×sØVíÚķÚPķÚMÛViÜkÜVmÜoÜVÛMÛ8 Ÿm܀Ü8 ŸÛMÛæŸaØkØPkØĮŲuŧĮŲČŲt¸-ÚíÚuŧ€Û™Ûuŧ™Û&ÜsˆŸ9ÜiÜuŧ€Ü§ÜuŧsØyØPyØØV‰Ú“ÚP“ÚíÚVLÜNÜVSÜUÜV¨ÚíÚ¨ŸSÜiܨŸŧÚíÚæŸ‰ØĮŲuŧ# ŸĮŲČŲt¸# Ÿ-ډÚuŧ# Ÿ€Û™Ûuŧ# Ÿ™ÛĪÛs¨Ÿ9ÜLÜuŧ# Ÿ€Ü§Üuŧ# Ÿ§ØĮŲuŧ#,ŸĮŲČŲt¸#,Ÿ-ډÚuŧ#,Ÿ€Û™Ûuŧ#,Ÿ™ÛĪÛs´Ÿ9ÜLÜuŧ#,Ÿ€Ü§Üuŧ#,Ÿ'ØÄŲsȟÄŲÅŲvü~ŸÅŲĮŲu@#(ŸĮŲČŲt¸@Ÿ-ÚíÚsȟ€Û&Üsȟ9ÜiÜsȟ€Ü§Üsȟ'ØÄŲsԟÄŲÅŲvˆŸÅŲĮŲu@#4ŸĮŲČŲt¸4Ÿ-ÚíÚsԟ€Û&Üsԟ9ÜiÜsԟ€Ü§Üsԟ'ØÄŲsāŸÄŲÅŲv”ŸÅŲĮŲu@#@ŸĮŲČŲt¸(Ÿ-ÚíÚsāŸ€Û&ÜsāŸ9ÜiÜsāŸ€Ü§ÜsāŸ'ØÄŲsėŸÄŲÅŲv ŸÅŲĮŲu@#LŸĮŲČŲt¸LŸ-ÚíÚsėŸ€Û&ÜsėŸ9ÜiÜsėŸ€Ü§ÜsėŸŲČŲ0Ÿ-ډÚ0Ÿ€ÛÁÛ0Ÿ9ÜLÜ0Ÿ€Ü Ü0ŸŲÄŲsäŸÄŲÅŲvŸÅŲĮŲu@#ÄŸĮŲČŲt¸#\Ÿ-ډÚs䟀ÛÁÛsäŸ9ÜLÜs䟀ܠÜsäŸ6ŲČŲ0Ÿ-ډÚ0Ÿ€ÛÁÛ0Ÿ9ÜLÜ0Ÿ€Ü Ü0Ÿ6ŲÄŲsøŸÄŲÅŲv,ŸÅŲĮŲu@#ØŸĮŲČŲt¸#pŸ-ډÚsøŸ€ÛÁÛsøŸ9ÜLÜsøŸ€Ü ÜsøŸNŲ]ŲP]ŲbŲsüTŲ]ŲP]ŲbŲsüTŲÄŲsüŸÄŲÅŲv0ŸÅŲĮŲu@#ÜŸĮŲČŲt¸#tŸ-ډÚsüŸ€Û˜ÛsüŸ9ÜLÜsüŸ€Ü™ÜsüŸZŲÄŲs€ŸÄŲÅŲv4ŸÅŲĮŲu@#āŸĮŲČŲt¸#xŸ-ډÚs€Ÿ€Û˜Ûs€Ÿ9ÜLÜs€Ÿ€Ü™Üs€ŸpŲvŲPvŲĮŲuDĮŲČŲt@-ÚAÚPAډÚuD€Û˜ÛuD9ÜLÜuD€Ü™ÜuDEډÚ8 Ÿ9ÜLÜ8 ŸYډÚæŸ§ŲÄŲs„ŸÄŲÅŲv8ŸÅŲĮŲu@#äŸĮŲČŲt¸#|Ÿ€Ü™Üs„Ÿ°ŲŧŲPOÛmÛsŸUÛ_ÛuOŸ_ÛcÛRcÛmÛuOŸUÛcÛP‚Û˜ÛsüŸ‚Û˜Û0Ÿ˜Û ÛsøŸ Û§ÛP§ÛÁÛsøŸ¨ÛÁÛsĖŸÛÛ&ÜsāŸŪÛéÛ sčsā4ŸŪÛíÛPåÛéÛ sčsā4ŸåÛíÛPņÛ&ÜsԟôÛüÛ sÜsÔ4ŸôÛÜPøÛüÛ sÜsÔ4ŸøÛÜPÜ&ÜsȟÜÜ sĐsČ4ŸÜÜP ÜÜ sĐsČ4Ÿ ÜÜPŋÜūÜWŨ–ŨWÔÜÖÜPÖÜéÜVŨŨPŨsŨV’Ũ–ŨVŨsŨ¨Ÿ,Ũ]ŨæŸ>ŪPŪP-á3áP3áCáFŪĄß:ŸŽß-á:ŸLáčã:ŸFŪPŪPsŪĄßVŽß4āVá-áVLáŊáVœâxãVŸãčãVsŪĄßSŽß4āSá-áSLáŊáSœâžâSžâã‘@ŸããSãã‘@ŸããSã!ã‘@Ÿ!ã#ãS#ã9ã‘@Ÿ9ã=ãS=ãpã‘@ŸpãrãSrãtã‘@ŸtãvãSvãxã‘@ŸŸãĄãSĄãÔã‘@ŸÔãÖãSÖãØã‘@ŸØãÚãSÚãßã‘@ŸßãããSããčã‘@Ÿ=ãRã‘@ŸCãMã‘\ŸMãQãRQãRã‘\ŸCãQãPŠŪĄßVŽß4āVá-áVLáŊáVœâ;ãVpãtãVŸãčãVŪ§Ū‘\Ÿ§Ū´ŪP´ŪĄß‘\ŸŽßÃß‘\ŸÃßÎßPÎß4ā‘°á#á‘\Ÿ#á'áR'á-á‘\ŸLáœá‘\ŸœáŊá‘°œâ!ã‘\Ÿ!ã0ã‘°0ã;ã‘\Ÿpãtã‘\ŸŸãØã‘°Øãčã‘\ŸŪ˜ŪPá'áP˜ŪĄßSŽß4āSLáŊáSœâžâSžâã‘@ŸããSãã‘@ŸããSã!ã‘@Ÿ!ã#ãS#ã9ã‘@Ÿ9ã;ãSpãrãSrãtã‘@ŸŸãĄãSĄãÔã‘@ŸÔãÖãSÖãØã‘@ŸØãÚãSÚãßã‘@ŸßãããSããčã‘@Ÿ›Ū§ŪP§Ū´ŪsˇŪžŪWžŪÅŪtÅŪzß‘LŸLáœá‘LŸœâûâ‘LŸã!ã‘LŸ9ã;ã‘LŸØãčã‘LŸˇŪēŪ‘PŸēŪÅŪPÅŪßŪWßŪzß‘°Láœá‘°œâûâ‘°ããWã!ã‘°9ã;ã‘°Øãčã‘°ÖŪãŪPÖŪāŪp$#ŸņŪßWßzß‘DŸLáœá‘DŸœâÚâ‘DŸã!ã‘DŸ9ã;ãWáãčãWņŪ÷ŪP÷ŪûŪ‘HŸûŪßPß ß‘HŸ ßßPßzß‘HŸLáœá‘HŸœâÚâ‘HŸã!ã‘HŸ9ã;ã‘HŸáãčã‘HŸßzßWLáœáWœâ˛âWßzßSLáœáSœâžâSžâ˛â‘@Ÿ%ßzßWLáœáW%ß3ßW3ßUß‘HŸUßzß‘°Lálá‘HŸláŒá‘°ŒáœáW(ßzßVLáœáV(ß3ßPŒá–áP3ßzß‘HŸLáŒá‘HŸ3ßUß‘HŸUßzß‘°Lálá‘HŸláŒá‘°9ßzßVLáŒáV9ßDßPLáVáPDßzß‘DŸ\áŒá‘DŸJßzßV\áŒáVJßUßP\áfáPUßzß‘°láŒá‘°[ßzßVláŒáV[ßfßPláváPfßzß‘LŸ|áŒá‘LŸlßzßV|áŒáVlßwßP|á†áPzߥßSŽß4āSœáŊáS!ã#ãS#ã0ã‘@ŸŸãĄãSĄãÔã‘@ŸÔãÖãSÖãØã‘@ŸßĄßS–ߥßV–ߥßPĀß4āVœáŊáV!ã0ãVŸãØãVæß4ā‘°œáŊá‘°!ã0ã‘°æßā‘°ā4ā‘XŸœáŊá‘°!ã#ã‘°#ã0ã‘XŸéß4ā‘TŸœáŗá‘TŸŗáˇáRˇáŊá‘TŸ!ã0ã‘TŸéßôßP­áˇáPôß4āVœá­áV!ã0ãVúß4ā‘°œá­á‘°!ã0ã‘°úßāPœá§áPā4ā‘XŸā4āVā.āPMā‹āS‹ā á‘XŸŊá=â‘XŸFâHâSHâJâ‘XŸJâLâSLâcâ‘XŸcâeâSeâœâ‘XŸxãŸã‘XŸMāQā‘\ŸQā]āP]āāVā á‘°Ŋá=â‘°FâJâ‘°JâgâVgâœâ‘°xãŸã‘°LâcâVRâ\â‘`Ÿ\â`âR`âcâ‘`ŸRâ`âPnāxāPnāuāp$#Ÿ‹āāVā á‘PŸŊáüá‘PŸüáūáVūáâ‘PŸgâœâ‘PŸxãã‘PŸãŸãV‹ā áWŊáâWgâœâWxãŸãWãŸãW‡ã•ã‘`Ÿ•ã™ãR™ãŸã‘`Ÿ‡ã™ãPģā áVŊáüáVģāÉāVÉāëāWëā á‘°ŊáÍáVÍáėáWėáüá‘°žā á‘LŸŊáÃá‘LŸÃáĮáRĮáüá‘LŸžāÉāPŊáĮáPÉā áWÍáüáWÉāëāWëā á‘°ÍáėáWėáüá‘°Īā áVÍáüáVĪāÚāPÜáæáPÚā á‘PŸÍáÜá‘PŸėáüá‘PŸāā áVÍáÜáVėáüáVāāëāPÍáÖáPëā á‘°ėáüá‘°ņā áVėáüáVņāüāPėáöáPüā á‘XŸá áVá áPūáâ‘PŸââ‘LŸââRââ‘LŸââPâ(â‘°â#â‘LŸ#â'âR'â(â‘LŸâ'âP(â=â‘XŸ.â8â‘LŸ8â<âR<â=â‘LŸ.â<âPiâ~âVoâyâ‘LŸyâ}âR}â~â‘LŸoâ}âP~âœâW„â’â‘LŸ’â–âR–âœâ‘LŸ„â–âPžâ˛âW¤â˛âV¤âąâP˛âÆâ‘HŸ¸âÆâV¸âÅâPÆâÚâ‘DŸĖâÚâVĖâŲâPÚâîâ‘°āâîâVāâíâPîâûâ‘LŸôâûâVôâûâPûâã‘@Ÿãã‘ŋŸããRãã‘ŋŸããP#ã0ã‘XŸ)ã0ãV)ã0ãPRãpãVXãfã‘\ŸfãjãRjãpã‘\ŸXãjãPĄãļã‘°§ãąã‘TŸąãĩãRĩãļã‘TŸ§ãĩãPļãÔãVŧãĘã‘TŸĘãÎãRÎãÔã‘TŸŧãÎãPûãäPääpø~Ÿ+ä6äP6ä>äpø~Ÿ’äĨäPÔäÔäP‰äŒäp$Œä’äP‰äŒäp$#øŸŒä’äpøŸ–äÔä Ÿ–äžäp å$åP<åUåPÁæÍæPåUåVUåCæ‘Á}ŸCætæVtæÁæ‘Á}ŸÁæ įV įfč‘Á}ŸfčxčVxčŅč‘Á}ŸŅčŨčVŨč]ë‘Á}Ÿ.å3åsLåUå‘LåUå1ŸUå\åPmå„åPbåhåshålåtöé摨}Ÿ˙é ę‘Ã}Ÿ ęęRęę‘Ã}Ÿ˙éęPę,ę‘Ė}Ÿę'ę‘Ã}Ÿ'ę+ęR+ę,ę‘Ã}Ÿę+ęP,ęGę‘Č}Ÿ5ęBę‘Ã}ŸBęFęRFęGę‘Ã}Ÿ5ęFęPGębę‘Ä}ŸPę]ę‘Ã}Ÿ]ęaęRaębę‘Ã}ŸPęaęPbę†ę‘Ô}Ÿkę|ę‘Ã}Ÿ|ę€ęR€ę†ę‘Ã}Ÿkę€ęPˆęŦę‘Ü}Ÿ‘ęĸę‘Ã}ŸĸęĻęRĻęŦę‘Ã}Ÿ‘ęĻęPë ëVëë‘Ã}ŸëëRë ë‘Ã}ŸëëP ëDëW)ë:ë‘Ã}Ÿ:ë>ëR>ëDë‘Ã}Ÿ)ë>ëPuå„å‘uå„å ˙ŸŒæÁæ‘ä}ŸŒæ•æP§æÁæ‘ä}ŸĒæÁæWĒæģæPįæķæ‘įæķæ4ŸįĨįW čfčWŨčWéWgééW¯éÅéWŦęŗęW2įGįP ččPŨčëčPŗéˇéP įfč˙ŸŨčĻé˙Ÿ¯éôé˙ŸŦęŗę˙Ÿ įjįVjį č‘ä}Ÿ čfčVŨčéVéĻé‘ä}Ÿ¯éŗé‘ä}ŸŗéÅéVÅéôé‘ä}ŸŦęŗęV įĨįW čfčWŨčWéWgééW¯éÅéWŦęŗęWUįęį‘°}Wégé‘°}Åéôé‘°}™įęᑨ}ŸWég鑨}Ÿ™įĸįPÜįęᑨ}ŸWég鑨}Ÿßįęį‘ā}ŸWé]é‘ā}Ÿ]éaéRaégé‘ā}ŸßįęįPWéaéPĶéđ鑨}ŸÜééé‘ā}ŸééíéRíéđé‘ā}ŸÜéíéPåčWé‘Đ}Ÿgéé‘Đ}Ÿ¯éŗé‘Đ}ŸéWé‘ā}Ÿgéué‘ā}Ÿ=éWé‘ā}Ÿ@éWéV@éQéPuéé‘ā}Ÿ~é‹é‘Ø}Ÿ‹ééRéé‘Ø}Ÿ~ééPęį č‘Đ}Ÿęį č0ŸčfčVčfč‘Đ}Ÿč]č‘Đ}#ŸéĻé‘Đ}ŸéĻé0Ÿfčrč‘fčrč2Ÿ­čĩčW­čŗčPŅčŨč‘ŅčŨč3ŸĪęķę‘ä}ŸØęéę‘Ü}ŸéęíęRíęķę‘Ü}ŸØęíęP‹ë”ëP¨ëšëP‹ëĖëSĖë%í‘ŊŸšëŸëvOėdė‘`ŸUė_ė‘ŋŸ_ėcėRcėdė‘ŋŸUėcėPdėyėVjėtė‘ŋŸtėxėRxėyė‘ŋŸjėxėPyėŽė‘XŸė‰ė‘ŋŸ‰ėėRėŽė‘ŋŸėėPŽėŖė‘TŸ”ėžė‘ŋŸžėĸėRĸėŖė‘ŋŸ”ėĸėPŖė¸ė‘HŸŠėŗė‘ŋŸŗėˇėRˇė¸ė‘ŋŸŠėˇėP¸ėÍė‘DŸžėČė‘ŋŸČėĖėRĖėÍė‘ŋŸžėĖėPÍėâė‘@ŸĶėŨė‘ŋŸŨėáėRáėâė‘ŋŸĶėáėPâėí‘PŸčėōė‘ŋŸōėöėRöėí‘ŋŸčėöėPaílíP€í‹íP6îTî‘PŸ<îFî‘ģŸFîJîRJîTî‘ģŸ<îJîPVîkî‘`Ÿ\îfî‘ģŸfîjîRjîkî‘ģŸ\îjîPkî€îVqî{î‘ģŸ{îîRî€î‘ģŸqîîP€î•î‘XŸ†îî‘ģŸî”îR”î•î‘ģŸ†î”îP•îĒî‘TŸ›îĨî‘ģŸĨîŠîRŠîĒî‘ģŸ›îŠîPĒîŋî‘HŸ°îēî‘ģŸēîžîRžîŋî‘ģŸ°îžîPŋîÔî‘DŸÅîĪî‘ģŸĪîĶîRĶîÔî‘ģŸÅîĶîPÔîōî‘@ŸÚîčî‘ģŸčîėîRėîōî‘ģŸÚîėîP‹í’íS’í–í‘‹í–íP P GuL\uąÆudŸˇÁuFŸÁÅRÅÆuFŸˇÅPÆÛu`ŸĖÖuFŸÖÚRÚÛuFŸĖÚPÛđu\ŸáëuFŸëīRīđuFŸáīPđuPŸöuFŸRuFŸöPuLŸ uFŸRuFŸ P/uHŸ *uFŸ*.R./uFŸ .P/LuXŸ5LuGŸ5BP P GuL\uąÆudŸˇÁuFŸÁÅRÅÆuFŸˇÅPÆÛu`ŸĖÖuFŸÖÚRÚÛuFŸĖÚPÛđu\ŸáëuFŸëīRīđuFŸáīPđuPŸöuFŸRuFŸöPuLŸ uFŸRuFŸ P/uHŸ *uFŸ*.R./uFŸ .P/LuXŸ5LuGŸ5BP P +u+,t,,P,SuXhuŊŌudŸÃÍuFŸÍŅRŅŌuFŸÃŅPŌįu`ŸØâuFŸâæRæįuFŸØæPįüu\Ÿí÷uFŸ÷ûRûüuFŸíûPüuPŸ uFŸ RuFŸP&uLŸ!uFŸ!%R%&uFŸ%P&;uHŸ,6uFŸ6:R:;uFŸ,:P;XuXŸAXuGŸANP P +u+,t,,P,SuXhuŊŌudŸÃÍuFŸÍŅRŅŌuFŸÃŅPŌįu`ŸØâuFŸâæRæįuFŸØæPįüu\Ÿí÷uFŸ÷ûRûüuFŸíûPüuPŸ uFŸ RuFŸP&uLŸ!uFŸ!%R%&uFŸ%P&;uHŸ,6uFŸ6:R:;uFŸ,:P;XuXŸAXuGŸANPZīdīusŸdīhīRhīrīusŸZīhīPˆīÍīSÍīÎīÛīp$ÛīäīPØīÛīp$#üŸÛīäīpüŸfņ{ņPô“ôP%đņVņUķ‘\ŸUķŠķVŠķZö‘\ŸZöŠöVŠö‘ö‘\Ÿ%đ5đv#Ÿ5đ:đPAđ„ô° ŸôZö° Ÿxö‘ö° ŸAđņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\ŸAđKđpŸKđPđPWđ„ô[ŸôZö[Ÿxö‘ö[ŸWđņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\ŸWđađpŸađfđPmđ„ô°ŸôZö°Ÿxö‘ö°ŸmđņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\ŸmđwđpŸwđ|đPƒđ„ôØ ŸôZöØ Ÿxö‘öØ ŸƒđņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\ŸƒđđpŸđ’đP˜đņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\Ÿ§đņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\Ÿ§đ„ô0ŸôZö0Ÿxö‘ö0Ÿ_öxöV_öxö0ŸĪđÅņSÅņÉņ‘XŸÉņōSōō‘XŸōņķSņķ„ô‘XŸô"õS"õ'õ‘XŸ'õ)õS)õ.õ‘XŸ.õ0õS0õ5õ‘XŸ5õ7õS7õ<õ‘XŸ<õ>õS>õCõ‘XŸCõEõSEõJõ‘XŸJõVõSVõ‰õ‘XŸ‰õ‹õS‹õĸõ‘XŸĸõ¤õS¤õģõ‘XŸģõŊõSŊõÔõ‘XŸÔõÖõSÖõíõ‘XŸíõúõSúõö‘XŸ1ö3öS3öJö‘XŸJöUöSUöZö‘XŸxö}öS}öˆö‘XŸŠö‘öSëđÅņSÅņÉņ‘XŸÉņōSōō‘XŸōņķSņķ„ô‘XŸô"õS"õ'õ‘XŸ'õ)õS)õ.õ‘XŸ.õ0õS0õ5õ‘XŸ5õ7õS7õ<õ‘XŸ<õ>õS>õCõ‘XŸCõEõSEõJõ‘XŸJõVõSVõ‰õ‘XŸ‰õ‹õS‹õĸõ‘XŸĸõ¤õS¤õģõ‘XŸģõŊõSŊõÔõ‘XŸÔõÖõSÖõíõ‘XŸíõúõSúõö‘XŸ1ö3öS3öJö‘XŸJöUöSUöZö‘XŸŠö‘öSîđņVņUķ‘\ŸUķŠķVŠķ„ô‘\Ÿôö‘\Ÿ1öZö‘\ŸŠö‘ö‘\ŸîđųđPUķ^ķP ņÅņSÅņÉņ‘XŸÉņōSōō‘XŸōUķSô õSTõVõSVõ‰õ‘XŸ‰õ‹õS‹õĸõ‘XŸĸõ¤õS¤õģõ‘XŸģõŊõSŊõÔõ‘XŸÔõÖõSÖõíõ‘XŸōõúõSúõö‘XŸ1ö3öS3öJö‘XŸJöUöSUöZö‘XŸŠö‘öS ņUķŸô õŸTõíõŸōõöŸ1öZöŸŠö‘öŸ3ņÅņSÅņÉņ‘XŸÉņōSōō‘XŸōUķSô õSTõVõSVõ‰õ‘XŸ‰õ‹õS‹õĸõ‘XŸĸõ¤õS¤õģõ‘XŸģõŊõSŊõÔõ‘XŸÔõÖõSÖõíõ‘XŸōõúõSúõö‘XŸ1ö3öS3öJö‘XŸJöUöSUöZö‘XŸŠö‘öS6ņƒō‘TŸƒō¤ōW¤ō$ķ‘TŸ$ķDķWDķKķ‘TŸKķOķROķUķ‘TŸôúô‘TŸúô õWTõÔõ‘TŸÔõíõWōõøõ‘TŸøõöW1öJöWJöOö‘TŸOöSöWSöZö‘TŸŠöŒö‘TŸŒö‘öW6ņAņPDķOķP{ņ„ņP•ņ ņPņĮņWĮņÉņ‘ņ§ņ‘`¨ņĢņp$#ĖŸĢņ¸ņpĖŸ¨ņÉņ0Ÿ¨ņĢņp$#ĖĢņ¸ņpˏņÄņPÉņÔņPéņôņPVõkõ‘¸Ÿ\õfõ‘ˇŸfõjõRjõkõ‘ˇŸ\õjõPkõ‰õ‘Ŧqõõ‘ˇŸõƒõRƒõ‰õ‘ˇŸqõƒõP‹õĸõ‘°‘õ›õ‘ˇŸ›õŸõRŸõĸõ‘ˇŸ‘õŸõP¤õģõ‘@ŸĒõ´õ‘ˇŸ´õ¸õR¸õģõ‘ˇŸĒõ¸õPŊõÔõ‘LŸÃõÍõ‘ˇŸÍõŅõRŅõÔõ‘ˇŸÃõŅõPÖõíõ‘PŸÜõæõ‘ˇŸæõęõRęõíõ‘ˇŸÜõęõPúõöWö ö‘ˇŸ ööRöö‘ˇŸööP3öJö‘XŸ9öCö‘ˇŸCöGöRGöJö‘ˇŸ9öGöPņņōWōō‘ņņō‘\ûņō1ŸûņōWōō‘rņĮņWĮņÉņ‘ÉņōWōō‘ō)ōW)ō¤ō‘¤ō¸ōW¸ōDķ‘Tõíõ‘ōõö‘1öZö‘Šö‘ö‘rņ{ņPņķô‘XŸ÷ķô‘¸ŸôôRôô‘¸Ÿ÷ķôPôôW ôô‘¸ŸôôRôô‘¸Ÿ ôôPô0ô‘PŸ!ô+ô‘¸Ÿ+ô/ôR/ô0ô‘¸Ÿ!ô/ôP0ôEô‘DŸ6ô@ô‘¸Ÿ@ôDôRDôEô‘¸Ÿ6ôDôPEôZô‘@ŸKôUô‘¸ŸUôYôRYôZô‘¸ŸKôYôPZôoô‘ŧŸ`ôjô‘¸ŸjônôRnôoô‘¸Ÿ`ônôPoô„ô‘Ŧuôô‘¸ŸôƒôRƒô„ô‘¸ŸuôƒôPö1ö‘XŸö'ö‘TŸ'ö+öR+ö1ö‘TŸö+öPąöĀöPŊöëöSž÷í÷Sņ÷BøS•øĄøSųųSąöĀöpøŸŊöÔöRŊöÔörŸ>÷´÷SvųĖųS¤úĻúSĻúŊúudŸ>÷´÷ŸvųĖųŸ¤úŊúŸQ÷´÷SvųĖųST÷´÷uGŸvųĖųuGŸT÷_÷PŒų—ųP_÷´÷u`ŸvųŒųu`ŸųĖųu`Ÿe÷´÷udŸvųŒųudŸųĖųudŸe÷p÷PųĻųPp÷´÷uTŸvųŒųuTŸŦųĖųuTŸv÷´÷udŸvųŒųudŸŦųĖųudŸv÷÷PŦųļųP÷´÷uPŸvųŒųuPŸŧųĖųuPŸ‡÷´÷udŸvųŒųudŸŧųĖųudŸ‡÷’÷PŧųÆųP’÷´÷uLŸvųŒųuLŸ˜÷´÷udŸvųŒųudŸ˜÷Ŗ÷Pvų†ųPŖ÷´÷u\ŸŠ÷´÷udŸŠ÷´÷Pž÷đ÷uđ÷ņ÷tņ÷øuž÷í÷Sņ÷øSøņøEŸųvųEŸĖųúEŸú'úEŸøņøŸųvųŸĖųúŸú'úŸøņø¨ ŸĖųú¨ Ÿúú¨ Ÿ%ú'ú¨ ŸøņøŸĖųúŸúúŸ%ú'úŸBøEøuBøEøu BøIøPIø•øS%ú'úSŋøņøSĖųÛųSÛųđųudŸŋøņøŸĖųđųŸŌøņøSĖųŲųSÕøņøu\ŸĖųŲųu\ŸÕøāøPĖųĶųPāøņøu`ŸæøņøudŸæøņøPųuųuuųvų‘ųųuųųuųųu ųųPųrųSrųuųuuųvų‘ÛųđųudŸáųëųu\ŸëųīųRīųđųu\ŸáųīųPđųúu`Ÿöųúu\ŸúúRúúu\ŸöųúP)ú@úu\Ÿ/ú9úuGŸ9ú=úR=ú@úuGŸ/ú=úPBúYúuLŸHúRúuGŸRúVúRVúYúuGŸHúVúP[úrúuPŸaúkúuGŸkúoúRoúrúuGŸaúoúPtú‹úuTŸzú„úuGŸ„úˆúRˆú‹úuGŸzúˆúPú¤úu`Ÿ“úúuGŸúĄúRĄú¤úuGŸ“úĄúPŦúļúuGŸļúēúRēúŊúuGŸŦúēúPĖú4ûS4û û‘ ûŠûSŠûöû‘öûųûSųûÉū‘ûûPûöû‘°üøü‘°ũŸũ‘°Rūnū‘°Šū´ū‘°ÎúÔúPéúõúPĄũļũ‘`Ÿ§ũąũ‘ŋŸąũĩũRĩũļũ‘ŋŸ§ũĩũPļũËũVŧũÆũ‘ŋŸÆũĘũRĘũËũ‘ŋŸŧũĘũPËũāũWŅũÛũ‘ŋŸÛũßũRßũāũ‘ŋŸŅũßũPāũõũ‘TŸæũđũ‘ŋŸđũôũRôũõũ‘ŋŸæũôũPõũ ū‘HŸûũū‘ŋŸū ūR ū ū‘ŋŸûũ ūP ūū‘DŸūū‘ŋŸūūRūū‘ŋŸūūPū4ū‘@Ÿ%ū/ū‘ŋŸ/ū3ūR3ū4ū‘ŋŸ%ū3ūP4ūRū‘PŸ:ūHū‘ŋŸHūLūRLūRū‘ŋŸ:ūLūPöúųúPöúųúp$#Ÿųú˙úpŸü¤ü‘`Ÿ•üŸü‘LŸŸüŖüRŖü¤ü‘LŸ•üŖüP¤üšüWĒü´ü‘LŸ´ü¸üR¸üšü‘LŸĒü¸üPšüÎü‘TŸŋüÉü‘LŸÉüÍüRÍüÎü‘LŸŋüÍüPÎüãü‘PŸÔüŪü‘LŸŪüâüRâüãü‘LŸÔüâüPãüøüVéüķü‘LŸķü÷üR÷üøü‘LŸéü÷üPũũ‘`Ÿ ũũ‘DŸũũRũũ‘DŸ ũũPũ-ũWũ(ũ‘DŸ(ũ,ũR,ũ-ũ‘DŸũ,ũP-ũBũ‘TŸ3ũ=ũ‘DŸ=ũAũRAũBũ‘DŸ3ũAũPBũWũ‘PŸHũRũ‘DŸRũVũRVũWũ‘DŸHũVũPWũlũ‘LŸ]ũgũ‘DŸgũkũRkũlũ‘DŸ]ũkũPlũũ‘Ŧrũ|ũ‘DŸ|ũ€ũR€ũũ‘DŸrũ€ũPũŸũV‡ũ•ũ‘DŸ•ũ™ũR™ũŸũ‘DŸ‡ũ™ũP˙%˙S+˙G˙S˙%˙V+˙G˙V˙%˙S+˙G˙S ˙%˙R+˙6˙R6˙;˙v;˙A˙rxŸ˙%˙‘lŸ+˙:˙‘lŸ:˙A˙QA˙G˙‘lŸ˙%˙rŸ+˙6˙rŸ6˙;˙v#Ÿ;˙A˙R˙%˙rŸ˙%˙‘lŸ˙˙Pa˙˙S˙Ę˙upŸĘ˙Ë˙tlŸË˙S&upŸ&'tlŸ'=upŸ=?S?ˆupŸ˙ˇ˙utŸ'=utŸ]ˆutŸ›˙ ˙P ˙ˇ˙u'=u­˙ˇ˙utŸ'=utŸ°˙ˇ˙uoŸ'=uoŸ°˙ˇ˙P'7Pˇ˙Ä˙upŸupŸŊ˙Ä˙utŸ utŸŊ˙Ë˙P PË˙ŸË˙upŸ?]upŸEOuoŸOSRS]uoŸESPm„utŸs}uoŸ}R„uoŸsP‘FWHhW3@SHbS@VHbV'p|Ÿ'P3>PHUPUWv4Ÿ35R5>p|ŸHUp|ŸUWv8Ÿ3@WHbW3@1ŸHb1Ÿ5>r4ŸH\r4Ÿ”Ÿq4ŸŸŠ‘\4Ÿ q4ŸYhq4ŸŠíSíøvCSОS˛Á0ŸÁÅsu"ŸÅĶQ×øUQ(‘\(C0Ÿ|Pø1ŸChP„CōŖWhōŖøV CVYhV”ŠV”Š0ŸŠøVCVŠļUļø‘C‘ŠĢsq"ŸĢēQ´íSíøvCS´øWCW´ÁP(:P´ø1ŸC1Ÿ¸Ču4Ÿ(Cu4ŸÅĶQQ(‘\ÅĶvvÅøW(WÅø1Ÿ(1ŸĘ×u4Ÿ(u4Ÿ×øV×ß vp4Ÿ×ãPÛįVÛß vp4ŸÛãP°‘ÁŌ‘ŌŲpŲã‘ĸŊ‘ŸÁŌ‘ŸŌŲPŲ㑟ĸŊqȟÁÎqȟÎĶ ‘#$#HŸĶŲQĒŊqȟĒŊ‘ŸĒŗRĸŊQÁÎQÎĶ‘#$ĶŲq¸Ÿ‘FWHhW3@SHbS@VHbV'p|Ÿ'P3>PHUPUWv4Ÿ35R5>p|ŸHUp|ŸUWv8Ÿ3@WHbW3@1ŸHb1Ÿ5>r4ŸH\r4Ÿ”Ÿq4ŸŸŠ‘\4Ÿ q4ŸYhq4ŸŠíSíøvCSОS˛Á0ŸÁÅsu"ŸÅĶQ×øUQ(‘\(C0Ÿ|Pø1ŸChP„CōWhōøV CVYhV”ŠV”Š0ŸŠøVCVŠļUļø‘C‘ŠĢsq"ŸĢēQ´íSíøvCS´øWCW´ÁP(:P´ø1ŸC1Ÿ¸Ču4Ÿ(Cu4ŸÅĶQQ(‘\ÅĶvvÅøW(WÅø1Ÿ(1ŸĘ×u4Ÿ(u4Ÿ×øV×ß vp4Ÿ×ãPÛįVÛß vp4ŸÛãPCu jˆu gutŸgjtpŸjĻutŸ :S (ut#Ÿ04pŸ49Rjˆu jˆutŸjˆ0Ÿj€ut#Ÿ€…POgutŸgjtpŸOj0Ÿ‘FWHhW3@SHbS@VHbV'p|Ÿ'P3>PHUPUWv4Ÿ35R5>p|ŸHUp|ŸUWv8Ÿ3@WHbW3@1ŸHb1Ÿ5>r4ŸH\r4Ÿ”Ÿq4ŸŸŠ‘\4Ÿ q4ŸYhq4ŸŠíSíøvCSОS˛Á0ŸÁÅsu"ŸÅĶQ×øUQ(‘\(C0Ÿ|Pø1ŸChP„Cōq#Whōq#øV CVYhV”ŠV”Š0ŸŠøVCVŠļUļø‘C‘ŠĢsq"ŸĢēQ´íSíøvCS´øWCW´ÁP(:P´ø1ŸC1Ÿ¸Ču4Ÿ(Cu4ŸÅĶQQ(‘\ÅĶvvÅøW(WÅø1Ÿ(1ŸĘ×u4Ÿ(u4Ÿ×øV×ß vp4Ÿ×ãPÛįVÛß vp4ŸÛãP‘3QItQ Ew4ŸIpw4ŸCSCI‘IlSlt‘IlSlt‘IqUqt‘ I\P ‘ S"t#\S*W?TWS"t?TS*WS"t*1ŸsŸ"t#Ÿ?TsŸBQPpŦ‘X“ŦēR“ !P!Ŧ‘ēĘ‘!P!Ŧ‘ēĘ‘Ŧ‘ēĘ‘2R2?U?ē‘X.V.2P?ˇUzŦ‘2Ŧ‘2?uŸ?C‘X#ŸCluŸNUSUVpt2CVNSQSĩV2CPetP2CWNļWN\PzŦ‘X#ŸŦērŸzŦ‘zĩV…´SžĻP…‘P…ļWēĘ‘ēĘ‘\ĘØRēĘ‘ĘÎP¨ž“0Ÿ“0Ÿ“u\“0Ÿ“tX“ĸ0Ÿ“u\“ĸ­0Ÿ“V“­ķ0Ÿ“u\“*užÁu*u žÁu 8>Pv}PžÁuX P *uX<>PžÁP*1Ÿ*80Ÿ8>Q>m1Ÿmv0Ÿv‡QžÁ1ŸâūP“›ĸ0Ÿ“P*u *ģuX4ŸģžtT4ŸžÁu ÁuX4ŸtT4ŸķuX4Ÿ>Su <>pŸ>Su*‡W*>SF‡S*3PmtP*>u\N]P]‚u\*>u`N‡u`‡u ‡u›ĸ@Ÿ‡ŒS‡ēWĸW ¨P“P‡ģu`ģžt\ĸu`‡ģudģžt`ĸudĐūō{3¨ģuģžP)uĸ¯uu\tXĸ­V­ķu\0Ÿĸķ0Ÿ)u ĸ¯u =fVfoPo‹V¯ąVąĘ1ŸĘķV )u =u\#ŸąĘu\#Ÿ )u'S'(pt9V7=PąŋP=u\#ŸąĘu\#Ÿ.R.P=UuUVtVZtąĘu=1Ÿ¯ķ1Ÿ=0Ÿ¯ķ0ŸLUuUVtVZtČĘuLZPČĘPzuPGP„Ÿ‰œŸHg\ Ÿ‰œ\ ŸzuŦ~Ÿz}P}AuŦ~ŸAD‘¤~ŸDŅuŦ~Ÿ uā~Ÿ @W@Auā~ŸAD‘Ø~ŸDŅWÆĮtĮËt\zuŦ~Ÿz}P}AuŦ~ŸAD‘¤~ŸDŅuŦ~Ÿ¤su´~ŸsxPxAu´~ŸAD‘Ŧ~ŸDXu´~Ÿ\xu´~Ÿ“Ņu´~Ÿ`xuŦ~ŸíXHŸ\`HŸ“ŽHŸ°ŅHŸíįVįAu¸~ŸAD‘°~ŸDXV\`V“ŽV°ÁVÁŅu¸~ŸSįv$ŸįAuÜ~ŸAD‘Ô~ŸDXv$Ÿ\`v$Ÿ“Žv$Ÿ°Áv$ŸÁŅuÜ~Ÿ]auÜ~x“uā~ŸhAu AD‘DXu \`u “u hsu´~ŸsxPxAu´~ŸAD‘Ŧ~ŸDXu´~Ÿ\`u´~Ÿ“Ēu´~ŸhX0Ÿ\`0Ÿ“Ē0Ÿhkp{AuŦ~ŸAD‘¤~ŸDXuŦ~ŸAuŦ~ŸAD‘¤~ŸDXuŦ~ŸĢįVįAu¸~ŸAD‘°~ŸDXVĩAuÜ~ŸAD‘Ô~ŸDXuÜ~Ÿ¸AuĢ~ŸAD‘Ŗ~ŸDXuĢ~Ÿ¸ÃPDRPÃAu¸~ŸAD‘°~ŸÜAuŦ~ŸAD‘¤~ŸũAu´~ŸAD‘Ŧ~ŸAuŦ~ŸAD‘¤~Ÿ%Auā~ŸAD‘Ø~Ÿ/uPŸ/vuHŸvytDŸ–ķuHŸuHŸ.P.vuHŸvytDŸ–ķuHŸ/vuHŸvytDŸ–ķuHŸ/2uPŸ2:P:vuPŸvytLŸ–ķuPŸVtVtvu`Ÿvyt\Ÿ–ēVYvu_Ÿvyt[Ÿ–ēu_ŸY`PЎP`vudŸvyt`Ÿ–ŠudŸfvu`Ÿvyt\Ÿ–Šu`ŸfmP–ĻPy–1ŸyS–Pƒ–0ŸƒsŸ–pŸŧÚudŸÂĖu_ŸĖĐRĐÚu_ŸÂĐPâėu_ŸėđRđķu_ŸâđP,61Ÿ,6S/60Ÿ/6sŸH[u@Ÿ[0u¸ŸHKu¸ŸKUPUVtVZtZ0u¸Ÿ[^u@Ÿ^fPf0u@Ÿgķ0Ÿ,0Ÿgju`ŸjPķu`Ÿ,u`Ÿuķ0Ÿ,0ŸuķudŸ,udŸŽÎŸ(ŸŽ”u´ĸΟ(ŸĸņWņÎuXŸ(WĸŦqŸŦąPÃņWņÎuXŸÃņWņ*uXŸ*šVšģuXŸģÎu\ŸÃÎ0Ÿ(uXŸ(0ŸũΟũPSWšÎW Ο ÎV pŸP*šV*š0ŸģÎu\ŸģÎ0ŸVšu`ŸVšudŸVš0ŸZrWĒšW_ru\ŸĒšu\Ÿ_fPĒļPrĒuPŸxĒu`ŸxP§PuTŸ…“u`Ÿ“—R—u`Ÿ…—PÎîu`ŸîōRōķu`ŸÎĶudŸĶÚPÚķudŸÛķuPŸäîu`ŸîōRōķu`ŸäōPķuTŸųu`ŸRu`ŸųP\ou@ŸoĒu¸ŸÛsu¸Ÿ\_u¸Ÿ_iPijtjntnĒu¸ŸÛsu¸ŸoĒu¸ŸÛsu¸Ÿoru@ŸrzPzĒu@ŸÛsu@Ÿ{Ē0ŸÛ60ŸTX0Ÿ\s0Ÿ{~u`Ÿ~•P•Ēu`ŸÛ6u`ŸTXu`Ÿ\su`Ÿ‰Ē0ŸÛ60ŸTX0Ÿ\s0Ÿ‰ĒudŸÛ6udŸTXudŸ\sudŸĸĒOŸÛOŸ\sOŸĸ¨u´ļĒOŸÛOŸ\sOŸļWĒuXŸÛüuXŸüW\suXŸļĀqŸĀÅP×WĒuXŸÛüuXŸ\suXŸ×W>uXŸ>ĒVÛüV\^uXŸ^su\Ÿ×Ē0ŸÛü0Ÿ\s0ŸūuXŸū0ŸĒŸÛüŸ\sŸPgW\sWĒŸÛüŸ\sŸĒVÛüV\sV)pŸ).P>ĒVÛüV>Ē0ŸÛü0ŸjĒu`ŸÛüu`ŸjĒudŸÛüudŸjĒ0ŸÛü0Ÿn†WęüWs†u\Ÿęüu\ŸszPęöP†ĒuPŸÛęuPŸŒĒu`ŸÛęu`ŸŒ“PÛįP“ĒuTŸ™Ŗu`ŸŖ§R§Ēu`Ÿ™§P˛ŧ1Ÿ˛ŧSĩŧ0ŸĩŧsŸ1u`Ÿ15R56u`ŸudŸP6udŸ6uPŸ'1u`Ÿ15R56u`Ÿ'5P6TuTŸ<Fu`ŸFJRJTu`Ÿ<JPŦŋu@Ÿŋúu¸Ÿ+Ãu¸ŸŦ¯u¸Ÿ¯šPšētēžtžúu¸Ÿ+Ãu¸Ÿŋúu¸Ÿ+Ãu¸ŸŋÂu@ŸÂĘPĘúu@Ÿ+Ãu@ŸËú0Ÿ+†0Ÿ¤¨0ŸŦÃ0ŸËÎu`ŸÎåPåúu`Ÿ+†u`Ÿ¤¨u`ŸŦÃu`ŸŲú0Ÿ+†0Ÿ¤¨0ŸŦÃ0ŸŲúudŸ+†udŸ¤¨udŸŦÃudŸōú! Ÿ+a! ŸŦÃ! Ÿōøu´ú! Ÿ+a! ŸŦÃ! ŸUWUúuXŸ+LuXŸLaWŦÃuXŸqŸP'UWUúuXŸ+LuXŸŦÃuXŸ'UWUŽuXŸŽúV+LVŦŽuXŸŽÃu\Ÿ'ú0Ÿ+L0ŸŦÃ0ŸNauXŸNa0ŸaúŸ+LŸŦßahPhˇWŦÃWoúŸ+LŸŦßoúV+LVŦÃVoypŸy~PŽúV+LVŽú0Ÿ+L0Ÿēúu`Ÿ+Lu`ŸēúudŸ+LudŸēú0Ÿ+L0ŸžÖW:LWÃÖu\Ÿ:Lu\ŸÃĘP:FPÖúuPŸ+:uPŸÜúu`Ÿ+:u`ŸÜãP+7PãúuTŸéķu`Ÿķ÷R÷úu`Ÿé÷P 1Ÿ S 0Ÿ sŸau`Ÿ…R…†u`ŸafudŸfmPm†udŸn†uPŸwu`Ÿ…R…†u`Ÿw…P†¤uTŸŒ–u`Ÿ–šRš¤u`ŸŒšPü u@Ÿ J u¸Ÿ{  u¸Ÿü˙u¸Ÿ˙ P  t  t J u¸Ÿ{  u¸Ÿ J u¸Ÿ{  u¸Ÿ  u@Ÿ  P J u@Ÿ{  u@Ÿ J 0Ÿ{ Ö 0Ÿô ø 0Ÿü  0Ÿ  u`Ÿ 5 P5 J u`Ÿ{ Ö u`Ÿô ø u`Ÿü  u`Ÿ) J 0Ÿ{ Ö 0Ÿô ø 0Ÿü  0Ÿ) J udŸ{ Ö udŸô ø udŸü  udŸB J ' Ÿ{ ą ' Ÿü  ' ŸB H u´V J ' Ÿ{ ą ' Ÿü  ' ŸV Ĩ WĨ J uXŸ{ œ uXŸœ ą Wü  uXŸV ` qŸ` e Pw Ĩ WĨ J uXŸ{ œ uXŸü  uXŸw Ĩ WĨ Ū uXŸŪ J V{ œ Vü ū uXŸū  u\Ÿw J 0Ÿ{ œ 0Ÿü  0Ÿž ą uXŸž ą 0Ÿą J Ÿ{ œ Ÿü  Ÿą ¸ P¸  Wü  Wŋ J Ÿ{ œ Ÿü  Ÿŋ J V{ œ Vü  Vŋ É pŸÉ Î PŪ J V{ œ VŪ J 0Ÿ{ œ 0Ÿ J u`Ÿ{ œ u`Ÿ J udŸ{ œ udŸ J 0Ÿ{ œ 0Ÿ & WŠ œ W & u\ŸŠ œ u\Ÿ  PŠ – P& J uPŸ{ Š uPŸ, J u`Ÿ{ Š u`Ÿ, 3 P{ ‡ P3 J uTŸ9 C u`ŸC G RG J u`Ÿ9 G PR \ 1ŸR \ SU \ 0ŸU \ sŸą Ņ u`ŸŅ Õ RÕ Ö u`Ÿą ļ udŸļ Ŋ PŊ Ö udŸž Ö uPŸĮ Ņ u`ŸŅ Õ RÕ Ö u`ŸĮ Õ PÖ ô uTŸÜ æ u`Ÿæ ę Rę ô u`ŸÜ ę PL _ u@Ÿ_ š u¸ŸË c u¸ŸL O u¸ŸO Y PY Z tZ ^ t^ š u¸ŸË c u¸Ÿ_ š u¸ŸË c u¸Ÿ_ b u@Ÿb j Pj š u@ŸË c u@Ÿk š 0ŸË & 0ŸD H 0ŸL c 0Ÿk n u`Ÿn … P… š u`ŸË & u`ŸD H u`ŸL c u`Ÿy š 0ŸË & 0ŸD H 0ŸL c 0Ÿy š udŸË & udŸD H udŸL c udŸ’ š . ŸË  . ŸL c . Ÿ’ ˜ u´Ļ š . ŸË  . ŸL c . ŸĻ õ Wõ š uXŸË ė uXŸė  WL c uXŸĻ ° qŸ° ĩ PĮ õ Wõ š uXŸË ė uXŸL c uXŸĮ õ Wõ . uXŸ. š VË ė VL N uXŸN c u\ŸĮ š 0ŸË ė 0ŸL c 0Ÿî  uXŸî  0Ÿ š ŸË ė ŸL c Ÿ  P W WL c W š ŸË ė ŸL c Ÿ š VË ė VL c V  pŸ  P. š VË ė V. š 0ŸË ė 0ŸZ š u`ŸË ė u`ŸZ š udŸË ė udŸZ š 0ŸË ė 0Ÿ^ v WÚ ė Wc v u\ŸÚ ė u\Ÿc j PÚ æ Pv š uPŸË Ú uPŸ| š u`ŸË Ú u`Ÿ| ƒ PË × Pƒ š uTŸ‰ “ u`Ÿ“ — R— š u`Ÿ‰ — Pĸ Ŧ 1Ÿĸ Ŧ SĨ Ŧ 0ŸĨ Ŧ sŸ ! u`Ÿ! % R% & u`Ÿ  udŸ  P & udŸ & uPŸ ! u`Ÿ! % R% & u`Ÿ % P& D uTŸ, 6 u`Ÿ6 : R: D u`Ÿ, : P,W,0 ‘s5&Ÿ?CWCE ‘s5&Ÿ0lsŸ“lpshŸ“‘›sŸ“›S“ŖsŸ“ŖŦsxŸ“Ŧ˛p8Ÿ“˛ģsŸ“ģÄspŸ“ÄĘp@Ÿ“ĘŲshŸ“0pV‘­V­˛‘ ˛ÅVÅĘ‘ ĘŲV0lsŸlpshŸ‘›sŸ›SŖsŸŖŦsxŸŦ˛p8Ÿ˛ģsŸģÄspŸÄĘp@ŸĘŲshŸ06s67t7;‘PClsŸ“lpspŸ“ŖsŸ“ŖŦS“Ŧ˛p“˛ģsŸ“ģÄsxŸ“ÄĘp8Ÿ“ĘŲspŸ“CpV­V­˛‘ ˛ÅVÅĘ‘ ĘŲVClsŸlpspŸŖsŸŖŦSŦ˛p˛ģsŸģÄsxŸÄĘp8ŸĘŲspŸCIsIJtJN‘PVlsŸ“lpsxŸ“˛ģsŸ“ģÄS“ÄĘp“ĘŲsxŸ“VpV˛ÅVÅĘ‘ ĘŲVVlsŸlpsxŸ˛ģsŸģÄSÄĘpĘŲsxŸV\s\]t]a‘P0lS“lps`Ÿ“p‚S“‘›S“›sxŸ“ŖS“ŖŦspŸ“Ŧ˛p@Ÿ“˛ģS“ģÄshŸ“ÄĘpHŸ“ĘŲs`Ÿ“0…V‘­V­˛‘ ˛ÅVÅĘ‘ ĘŲV0lSlps`Ÿp‚S‘›S›sxŸŖSŖŦspŸŦ˛p@Ÿ˛ģSģÄshŸÄĘpHŸĘŲs`Ÿpusuvtvz‘P0pōúj‘ŲōújCpōújŲōújVpōúj˛ŲōújûW“ûVûWûwt‘P ōúj%W“%V%Wwt‘P"%ōúj%7W“%7V%7W%*w*+t+/‘P(V(1 ‘u4&Ÿ¸ŧVŧÁ ‘u4&Ÿ1WuŸ“W_utŸ“ļuŸ“ļšR“š uŸ“ utŸ“1_ōūoōūo1_‘ ‘ 1WuŸW_utŸļuŸļšRš uŸ utŸĩWŗSšP@WuŸ“W_uxŸ“š uŸ“ uxŸ“@_ōūošōūo@_‘ š‘ @WuŸW_uxŸš uŸ uxŸšáWšáSšĘPHWu Ÿ“W_u|Ÿ“á u Ÿ“ u|Ÿ“H_ōūoáōūoH_‘ á‘ HWu ŸW_u|Ÿá u Ÿ u|Ÿá Wá SáōP1WU“W_upŸ“_U“ļU“ļšr|Ÿ“š U“ upŸ“1ōūoōūo1‘ ‘ 1WUW_upŸ_UļUļšr|Ÿš U upŸgWgSgqP1_ōāoōāo@_ōāošōāoH_ōāoáōāo@JV“¤¸V“@Jōūo¤¸ōūo@J‘ ¤¸‘ @JV¤¸V¤¸S¤¸U¤ŽPGJōāoJcV“JcōūoJc‘ JcVQcSQcUQ[PyŽV“ސv|Ÿ“¤V“y¤ōūoy¤‘ yŽVސv|Ÿ¤V„¤‘ šR¤UšP‹ōāo,W,. ‘s4&Ÿ.ŋVG]V]b‘ bxV2BP2ŋVG]V]b‘ bxVNŋVG]V]b‘ bxVQaPQŋVG]V]b‘ bxVmŋVbxVp€PpŋVbxVŒŋVpxVŸPŋVpxVáūVãķPãūVûūōÁwūVPVōÁw5V-P5VNŋōÁwGxōÁwmŋōÁwbxōÁwŒŋōÁwpxōÁw:lW“nƒW“GŒW“‰  S  t ” t” muPŸmntLŸnōuPŸōķtLŸķėuPŸ‰  uTŸ Ā SĀ muTŸmntPŸnōuTŸōķtPŸķOuTŸOQSQ™uTŸ™›S›uTŸŸSŸėuTŸš  pԟ mu#TŸmnt#TŸnču#TŸķ(u#TŸ:{u#TŸ™u#TŸĄėu#TŸš  p؟ mu#XŸmnt#XŸnyp؟yíu#XŸíqŸĀu#XŸķq؟$u#XŸ:OqŸO{u#XŸ™u#XŸĄėu#XŸ  mu#TŸmnt#TŸnču#TŸķ(u#TŸ:{u#TŸ™u#TŸĄėu#TŸ  mu#TŸmnt#TŸnâu#TŸâęqԟęQĀu#TŸķ$u#TŸ:OQO{u#TŸ™u#TŸĄėu#TŸĻ Ā SĀ muTŸmntPŸnōuTŸōķtPŸķOuTŸOQSQ{uTŸ™›S›uTŸĄėuTŸĻ Ē u#X“Ē mu@“mntŧ“nÅu@“œu@“ u@“O{u@“™u@“Ąėu@“Ļ  W“W“O{W“™W“´ėW“Ļ Š uXŸŠ ¯ P¯ ˇ uXŸˇ ž Pž muXŸmntTŸnōuXŸōķtTŸķ{uXŸ™uXŸĄėuXŸ¸ ž Pž muXŸmntTŸnōuXŸōķtTŸķfuXŸĄėuXŸ¸ kVkmu`Ÿmnt\ŸnđVđōu`Ÿōķt\ŸķfVĄėVÁ kVkmu`Ÿmnt\ŸnđVđōu`Ÿōķt\ŸķOVĄėVÁ Ä u\ŸÄ Ę PĘ mu\ŸmntXŸnōu\ŸōķtXŸķOu\ŸĄėu\ŸŅ kVkmu`Ÿmnt\ŸnđVđōu`Ÿōķt\ŸķOVĄĖVŅ  V udŸ)u\Ÿ):uXŸ:KuTŸV'u\Ÿ'8uXŸGXuTŸŒœudŸ´ļVļĖu\Ÿ× jSjmudŸmnt`ŸnīSīōudŸōķt`ŸķOSĄĻSĻ´udŸ´ļSļĖudŸ× â PPÔâudŸâæRæėudŸÔæPâ å u\Ÿå î Pî mu\ŸmntXŸnu\Ÿōu\ŸōķtXŸķOu\ŸĄĖu\Ÿâ mudŸmnt`ŸnudŸōudŸōķt`ŸķOudŸĄĖudŸ mudŸmnt`ŸnudŸōudŸōķt`ŸķOudŸĄ´udŸ udŸmu\ŸmntXŸnu\ŸŒu\ŸŒœudŸœōu\ŸōķtXŸķOu\ŸĄ´u\Ÿ udŸ)u\Ÿ):uXŸ:KuTŸ'u\Ÿ'8uXŸGXuTŸŒœudŸ mu`Ÿmnt\Ÿnu`Ÿōu`Ÿōķt\ŸķOu`ŸĄ´u`Ÿ PŒ–Pmu\ŸmntXŸnu\ŸŒu\Ÿœōu\ŸōķtXŸķOu\ŸĄ´u\Ÿ)u\Ÿ):uXŸ:KuTŸ'u\Ÿ'8uXŸGXuTŸmudŸmnt`ŸnudŸŒudŸœōudŸōķt`ŸķOudŸĄ´udŸ,P,:u\<Ÿ&P):uXŸ'8uXŸ):uXŸ:KuTŸ'8uXŸGXuTŸ/:udŸ-8udŸ/=P-FPQfuXŸWauOŸaeRefuOŸWePļĖu\ŸŧĖu`ŸŧÉP:KuTŸGXuTŸ@KudŸMXudŸ@NPMfPK\uPŸgxuPŸQ\udŸmxudŸQ\Pm†PąudŸœōudŸōķt`ŸķOudŸēu\Ÿœōu\ŸōķtXŸķOu\ŸēÅP PâįPįęqüęípüíu#|u@#Ÿ:Owüęu`Ÿ:Ou`ŸęR“:AR“AC wü2$q"Ÿ“ęQu#TŸ:OQę rq4Ÿ:A rq4ŸAC wü2$4Ÿ:OQ:Ou`Ÿ:FPœĀu`Ÿķ u`ŸœĀu#TŸķqԟ u#TŸĢĀu#TŸĢĀu`ŸĢˇPÉâqāŸâču#`Ÿ$4qāŸ×ōudŸōķt`Ÿ$:udŸ×âqāŸâču#`Ÿ$4qāŸŲâqāŸâču#`ŸŲčudŸŲåPåču#df{uTŸlvuOŸvzRz{uOŸlzP{™uPŸ‹uOŸ‹R™uOŸPG¯S¯ŗPŗqSÆČSG°V°˛udŸ˛ŗt`ŸŗVÆŪVJ˛u_Ÿ˛ŗt[Ÿŗu_ŸÆŪu_ŸJUPLWPU˛u`Ÿ˛ŗt\ŸŗLu`Ÿ]u`ŸÆŪu`Ÿ[˛udŸ˛ŗt`ŸŗLudŸ]udŸÆŪudŸ[fP?FPq¯S¯ŗPŗ?S]qSÆČSqŽu ŗ?u ]ru ÆŪu qŽuŗ?u]ruÆŪuqtPt˛uT˛ŗtPŗ?uT]uTÆŪuTqtpŸt˛uT#Ÿ˛ŗtP#Ÿŗ?uT#Ÿ]uT#ŸÆŪuT#ŸqtpŸt{uT#Ÿŗ1uT#Ÿ]uT#ŸÆŪuT#Ÿ{¯S¯ŗP1?S{¯sŸ¯ŗpŸ1?sŸ†ˆPÁ1udŸ]udŸÆŪudŸÁĘuT#ŸĘĪPĪ1uT#Ÿ]uT#ŸÆŪuT#ŸÖ1udŸ]udŸŲ1u`Ÿ]u`ŸŲäP]fPä1uT#ŸluT#ŸČŪudŸÎŪu`ŸÎÛP¤udŸ•Ÿu_ŸŸŖRŖ¤u_Ÿ•ŖP¤šu`ŸĒ´u_Ÿ´¸R¸šu_ŸĒ¸P(x‘ ‘(5P5x‘ ‘(mVmp‘pxV V=BPBlSlm‘vŸmp‘‘ŸpxS SKZPZnWnoutŸopptŸpsPsxW WNx‘ ‘NmVmp‘pxV VNoUopPpxU UNlSlm‘vŸmp‘‘ŸpxS SP^SP^VP^UsxU^lSlm‘vŸmp‘‘Ÿ S^nWnoutŸopptŸ W?4W45uXŸ56tTŸ6ŠWŠĒuXŸĒĢtTŸĢ-WG•WŸĨWS`R`uDĢÎuDÎØRØ˙uD -uDG•uDŸĨuDōuĢ@uEÅu 2S25udŸ56t`Ÿ6§S§ĒudŸĒĢt`ŸĢ/S/EudŸEISIŸudŸŸŖSŖĨudŸĨ§S§ÅudŸķōu Ģ@u EÅu hV˙ VĨÅV2S25udŸ56t`Ÿ6§S§ĒudŸĒĢt`ŸĢ-SGISI•udŸŸŖSŖĨudŸĨ§S§ÅudŸ&hV˙ VĨÅV&4W45uXŸ56tTŸ6ŠWŠĒuXŸĒĢtTŸĢ-WG•WŸÅW­ģu`ŸģŋRŋÅu`Ÿ­ŋP?2S25udŸ56t`Ÿ6§S§ĒudŸĒĢt`ŸĢ-SGISI•udŸŸŖSŖĨudŸB5u`Ÿ56t\Ÿ6Ēu`ŸĒĢt\ŸĢ-u`ŸG•u`ŸŸĨu`ŸBMP˙PM˙Ÿ -ŸG•ŸŸĨŸS˙-Ÿ --ŸG•-ŸŸĨ-Ÿh“u\Ÿ“šPš5u\Ÿ56tXŸ6Ēu\ŸĒĢtXŸĢ˙u\Ÿ -u\ŸG•u\ŸŸĨu\Ÿo‹u\ÎØu`hou\Ÿo5u`Ÿ56t\Ÿ6Ēu`ŸĒĢt\ŸĢ˙u`Ÿ -u`ŸG•u`ŸŸĨu`Ÿo5u`Ÿ56t\Ÿ6Ēu`ŸĒĢt\ŸĢ˙u`Ÿ -u`ŸG•u`ŸŸĨu`Ÿ‚uVŸ‚‹P‹îuVŸĢÃuVŸ -uVŸG^uVŸŸĄuVŸ‚P‚¸V¸ãvŸ V-vŸŸĄVîuDĢÃuD -uDG^uDŸĄuDîudŸĢÃudŸ -udŸG^udŸŸĄudŸ”îudŸĢÃudŸ -udŸG^udŸŸĄudŸ”šPšîu\ŸĢÃu\Ÿ -u\ŸG^u\ŸŸĄu\ŸĄîudŸĢÃudŸ -udŸ¤îuWŸĢÃuWŸ -uWŸ¤¯P PÅîudŸĢÃudŸ-udŸÅËPËîu`ŸĢÃu`Ÿ-u`ŸŌîudŸĢÃudŸ-udŸÕîuWŸĢÃuWŸ-uWŸÕāP'Pāîu\ŸĢÃu\Ÿ6au`Ÿ u`ŸWau`Ÿ udŸZaudŸ PZnPu\Ÿr|u\ŸudŸu|udŸ Pu†P*uXŸ‡”uXŸ#*udŸ”udŸ#.PžPĢÍ ŸĢŗu\ŸŗÂPÂÃu\ŸÎØRØ˙uDÎãu\ŸãéPé˙u\Ÿđ˙ŸđüPü˙u`Ÿ/<udŸ5<u`Ÿ5<PI^udŸOYuWŸY]R]^uWŸO]P^•u`ŸdnuWŸnrRr•uWŸdrPs•u\Ÿyƒu`Ÿƒ‡R‡•u`Ÿy‡Pˆ•uXŸŽ•u`ŸŽ•P  P uHßuLßā‘DāûuLûütHü5uLB0ŸB˛uPÛ}uPŋßuPßā‘Hęü0Ÿü5uPB0ŸBÎuDÛ‡uDŋßuDßāPęü0Ÿü5uDB0ŸBŧu@ŋŪWŪßu@ß⑏āęu@ęü0Ÿü5u@pԟUu#TŸŋÅpԟÅßu#TŸßā‘#TŸęûu#TŸûüt#TŸQŋWāęWü5Waßu`Ÿßā‘XŸāęu`Ÿü5u`Ÿn„0Ÿ„ØuTÛčQčĨuTü5uT„čSņĨSüūSS„ÎQÎčVJVhŸQŸĨV5V„PÎs2EPEJshŸs¯1Ÿh•1Ÿ¯Î0Ÿh•1Ÿš¯uPš¯uLš¯uHēĀPĀÎw,yƒPƒ•sēčWyĨWŊÎudŸ€•udŸÃÎu_ŸŠ•u_ŸÃÎPŠŸP$.u_Ÿ.2R25u_Ÿ$2Paę0Ÿü50ŸaŋWāęWü5WĨßu`Ÿßā‘XŸāęu`ŸŽßudŸßā‘\ŸāęudŸŽĩPāįPūu`ŸudŸRudŸPKyVyzu z}t}˜V˜™u ™œ‘œ§V`cuwŸclRlzuwŸz}tsŸĨ§uwŸ`lP`yVyzu z}tĨ§V`xSx}PĨ§SrwPwxsx}prxSx}P°į‘ Æ$‘ qũ‘ ÂVũ‘”ËŌvŌÖPí?‘LŸ?GPGHtHLtLT‘LŸT^R^‘LŸ!P!"t"&t&î‘LŸîųPų)‘LŸ)4P4ũ‘LŸ?‘LŸ?GPGHtHLtLT‘LŸT^R^‘LŸ!P!"t"&t&î‘LŸîųPų)‘LŸ)4P4ũ‘LŸÄVëĮVĮ$0ŸToVoũ0Ÿ N0ŸNs1Ÿ€Į0ŸÄVëĮVToV&)‘DŸ)2R2<‘DŸ&2P&<V&6‘HŸ6<W9<P9<W<ëW W‘HŸ$WTmWoũW<?‘LŸ?GPGHtHLtLë‘LŸ T‘LŸT^R^‘LŸ!P!"t"&t&î‘LŸîųPų$‘LŸTm‘LŸoũ‘LŸ\žx Ÿ\ž‘ŧŸ\l‘ŧ#ŸlqPxžWxž‘ŧŸx‚‘ŧ#Ÿ‚‡PŽž4 ŸŽž‘ŧŸŽ˜pŸ˜P¤ëWe€WĮW‘HŸ$WoũW§ë‘DŸhv‘DŸvzRz€‘DŸĮØ‘DŸØæPæ$‘ oũ‘ §˛PhzP˛Į Ÿ˛Į‘ŧŸ˛ŧpŸŧÁP9S“9;P“;sS“€ĮS“s‘#Ÿ";ō€¨;AsABtBFt"sWNsWNT‘LŸT^R^s‘LŸ€ĮP Ÿ€Į‘ŧŸ€‘ŧ#Ÿ•PœĮWœĮ‘ŧŸœĻ‘ŧ#ŸĻĢPVmW\f‘DŸfjRjm‘DŸ\jP˛ÄVĐëV˛ë,ŸĮ$,Ÿoũ,ŸĶÚvÚŪPÍS“P“S“$S“oqS“Š—S“͡‘#ŸæōßĢæVˇVæ‘LŸ!P!"t"&t&ˇ‘LŸæV0ˇVæW3ˇW3:P’›PA’_ ŸĄˇ_ ŸA’‘ŧŸĄˇ‘ŧŸAQ‘ŧ#ŸQVPZ’sŸĄˇsŸZ’‘ŧŸĄˇ‘ŧŸĄˇ‘ŧŸw’‰Ÿw„pŸ„‰Pˇ$‘ŧŸqũ‘ŧŸÆ$ŸqũŸŪ$‘ äW‘HŸ$WäëP!Pëî‘LŸîųPų‘LŸú‘ŧŸú0Ÿ&)‘LŸ)4P4T‘LŸ5T‘ŧŸ5T0ŸsŠ‘ yƒ‘@Ÿƒ‡R‡Š‘@Ÿy‡PšáWŧÆ‘@ŸÆĘRĘá‘@ŸŧĘPéķ‘@Ÿķ÷R÷ũ‘@Ÿé÷P@Ÿ:VZēVĘ÷VzW|…W‡ĩWēÕWÚøWúWWPĻēPĘÚP:VÚ÷V(+ugŸ+4P4ÚugŸúugŸ(+P+ÚSúüS(:VLÚufŸLSPSZvtŸēĮPĮĘvtŸ˙ ufŸ  R ufŸ˙ P vtŸ1ŸĻSŧ?S8fWŧØWå]W5ĻudŸŧ]udŸRfS Ø‰ Ÿå=‰ Ÿ ŖudŸŖ°P°ØudŸå=udŸå=€ ŸåčudŸčõPõudŸ P udŸ%P%=udŸũ=ƒ ŸũudŸ P udŸ%P%=udŸ=† ŸudŸ%P%=udŸ‡˜udŸĘØudŸ˜ucŸÍØucŸ˜PÍßPEOucŸOSRS]ucŸESP1ŸĻSŧ`SJNPNĻuTŧ~uT7ĻudŸŧ~udŸVgSĀø‰ Ÿ^‰ ŸĀÃudŸÃĐPĐøudŸ^udŸ^€ ŸudŸP udŸ -P-8udŸ8EPE^udŸ^ƒ Ÿ udŸ -P-8udŸ8EPE^udŸ5^† Ÿ58udŸ8EPE^udŸ‡˜udŸęøudŸ˜ucŸíøucŸ˜Pí˙PfpucŸptRt~ucŸftPGP„Ÿ‰œŸHg\ Ÿ‰œ\ Ÿ"P1APPjSjnp|ŸnÉS#,P,1p|ŸJavŸamu#Ÿmnt#ŸnÍu#ŸJMPMjSjnp|ŸnÉSacPckVn„P„ÚVœĮæŸcjSjnp|ŸLqvŸqsu#@Ÿstt#@ŸtĸvŸĸ°u#@Ÿ°ąt#@Ÿąu#@ŸTcPtP­SąSdgPglp|ŸŠĸvğĸ°u#DŸ°ąt#DŸąu#DŸŠP­SąSĸ¤P¤ŽVąĖPĖ"VäæŸ¤­S<dvŸdfu#@Ÿfgt#@ŸgšvŸšĢu#@ŸĢŦt#@ŸŦ u#@ŸDSPgyPˆ¨S¨Ŧp|ŸŦ STZPZgp|Ÿ‚švğšĢu#DŸĢŦt#DŸŦ u#DŸ‚…P…¨S¨Ŧp|ŸŦ SšœPœŠVŦÄPÄ VÜ æŸœ¨S¨Ŧp|Ÿ= e Ve h ph Ļ VĻ Š pŠ  !V= f Wh š W= f wŸh š wŸH W Ph y Pˆ Ĩ SĨ Š p|ŸŠ  !SX [ P[ h p|Ÿ‚ š wğ‚ … P… Ĩ SĨ Š p|ŸŠ  !Sš œ Pœ § WŠ ŗ Pŗ  !WÜ  !柜 Ĩ SĨ Š p|Ÿ^!ˆ!S’!Ú!SÚ!6"v`Ÿ9"Í"S7#<#S<#]#v`Ÿf!Š!Vœ"7#V]#p#Vf!ˆ!Sœ"Í"Sf!Š!ōÆœ"7#ōÆ]#p#ōÆf!ˆ!sŸœ"Í"sŸn!!Pœ"Š"Pģ"Å"RÅ"7#uT]#p#uT‚!ˆ!Pĩ"Í"sğĩ"¸"P¸"Å"RÅ"7#uT]#p#uTÍ"Ī"PĪ"Ú"SÚ"ô"Pô"7#S]#b#Sõ"7#D Ÿ]#p#D Ÿ #7#æŸĪ"Ú"uTĨ!Š!PŠ!8"uT8"9"tP9"œ"uT7#]#uTĨ!Ú!SÚ!6"v`Ÿ9"œ"S7#<#S<#]#v`ŸĨ!6"V9"œ"V7#]#VĨ!œ"ōČ7#]#ōȲ!¸!P¸!8"uP8"9"tL9"T"PT"œ"uP7#]#uPU"œ"Ÿ7#J#Ÿl"œ"æŸÍ!9"ōČJ#]#ōČÍ!6"VJ#]#VÚ!đ!Pđ!5"SJ#O#Sņ!9"ųŸJ#]#ųŸ"9"柎#Ī#W$A$WÛ$ã$WŽ#Ī#wŸ$A$wŸÛ$ã$wŸš#Č#P$$P($F$VÛ$.%VA%T%VÉ#Ī#P"$A$wğÛ$ã$wğ"$%$P%$F$VÛ$.%VA%T%V;$A$PA$F$uTÛ$ô$Pô$.%uTA%T%uTA$F$VÜ#$S$$pF$†$S†$Š$pŠ$Û$S.%3%SÜ#$WF$}$WŠ$“$WÜ#$ōGĖF$Û$ōGĖ.%A%ōGĖÜ#$wŸF$}$wŸŠ$“$wŸį#ö#PF$Y$Ph$‡$V‡$Š$p|ŸŠ$Û$V.%A%V÷#ú#Pú#$p|Ÿb$}$wğŠ$“$wğb$e$Pe$‡$V‡$Š$p|ŸŠ$Û$V.%A%V{$}$P}$‰$uT‰$Š$tPŠ$¤$P¤$Û$uT.%A%uT}$‡$V‡$Š$p|Ÿt%É%SĶ%I&SI&K&w`ŸM&ē&SČ&â'S8(@(S@(M(w`Ÿb(j(Sw((S(Œ(w`Ÿz%É%SM&ē&S'â'Sb(j(Sz%É%sŸM&ē&sŸ'â'sŸb(j(sŸ…%˜%PM&Y&Ph&‰&W'â'Wb(w(W™%Ÿ%Pb&‰&sğ'â'sğb(j(sğb&e&Pe&‰&W'â'Wb(w(W{&&P&‰&uP'“'P“'â'uPb(w(uP&‰&W§%Đ%VĐ%Ķ%p‰&Č&Vâ'8(VM(b(V§%É%S‰&ē&S§%Ķ%ōČΉ&Č&ōČĪâ'8(ōČĪM(b(ōČΧ%É%sŸ‰&ē&sŸ¯%Â%P‰&™&P¨&Č&Wâ'8(WM(b(WÃ%É%Pĸ&ē&sğĸ&Ĩ&PĨ&Č&Wâ'8(WM(b(Wē&Ā&PĀ&Č&Sâ'ë'Pë'8(SM(U(SĀ&Č&WĶ%I&SI&K&w`ŸČ&'S8(@(S@(M(w`Ÿw((S(Œ(w`ŸÛ%K&WČ&'W8(M(Ww(Œ(WÛ%M&ōhŅČ&'ōhŅ8(M(ōhŅw(Œ(ōhŅė%ō%Pō%&uP0'3'P3''uPw(Œ(uPH''Ÿw(Œ(Ÿ_''æŸ÷%M&ōhŅČ&0'ōhŅ8(M(ōhŅ&J&VČ&0'V8(M(V&I&SI&K&w`ŸČ&0'S8(@(S@(M(w`Ÿ&K&WČ&0'W8(M(W&M&ō¸ŌČ&0'ō¸Ō8(M(ō¸Ō&&,&P,&L&uLL&M&tHČ&Ķ&PĶ&0'uL8(M(uLč&0'Ÿ8(M(Ÿ˙&0'æŸ5&M&ō¸Ō ‘ 2S27s|Ÿ7DSSs|Ÿ2S2;s|Ÿ‘oŸ$/‘oŸ/6R6;‘oŸP$6P))P)F)R))pøŸ )3)‘ ).)P.)3)‘#q))Vq))vŸ}))V?*Í*WÍ*†5‘Ôz†5æ5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘ÔzB*í4‘œ}Ÿí45S5Ü5‘œ}ŸÜ5ā5Rā5Ą8‘œ}ŸĒ8=‘œ}ŸŖ@C‘œ}ŸCCSCōC‘œ}ŸōCôCSôCųC‘œ}ŸųCûCSûCqD‘œ}ŸB*M*PÖ5ā5PM*Ö5‘Đzæ5Ą8‘ĐzĒ8=‘ĐzŖ@qD‘ĐzV*Í*WÍ*†5‘Ôz†5Ö5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘ÔzV*a*PÆ5Đ5Pa*Æ5‘Ėzæ5Ą8‘ĖzĒ8=‘ĖzŖ@qD‘Ėzj*Í*WÍ*†5‘Ôz†5Æ5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘Ôzj*u*Pļ5Ā5Pu*ļ5‘Øzæ5Ą8‘ØzĒ8=‘ØzŖ@qD‘Øz~*Í*WÍ*†5‘Ôz†5ļ5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘Ôz~*‰*PĻ5°5P‰*0‘Ŧ}Ÿ0,0Q,0†2‘Ŧ}Ÿ†2Ž2PŽ2Ļ5‘Ŧ}Ÿæ5Ą8‘Ŧ}ŸĒ8=‘Ŧ}ŸŖ@qD‘Ŧ}Ÿ’*Í*WÍ*†5‘Ôz†5Ļ5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘Ôz’**P–5 5P*–5‘Čzæ5Ą8‘ČzĒ8=‘ČzŖ@qD‘ČzĻ*Í*WÍ*†5‘Ôz†5–5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘ÔzĻ*ą*P†55Pé+<-V<-65‘¤{Ÿ65†5Væ56‘¤{Ÿ6†6V†6†8‘¤{ŸĒ8č9‘¤{Ÿč9ũ9Vũ9õ;‘¤{Ÿt=‚=‘¤{ŸÛ@qD‘¤{Ÿė+†5‘Ôzæ5†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôzė+÷+Pv5€5P÷+v5‘ {Ÿæ5†8‘ {ŸĒ8õ;‘ {Ÿt=‚=‘ {ŸÛ@qD‘ {Ÿ,v5‘Ôzæ5†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz, ,Pf5p5P ,f5‘˜{Ÿæ5†8‘˜{ŸĒ8õ;‘˜{Ÿt=‚=‘˜{ŸÛ@qD‘˜{Ÿ,f5‘Ôzæ5†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz,,PV5`5P,V5‘”{Ÿæ5†8‘”{ŸĒ8õ;‘”{Ÿt=‚=‘”{ŸÛ@qD‘”{Ÿ(,V5‘Ôzæ5†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz(,3,PF5P5P3,F5‘Œ{Ÿæ5†8‘Œ{ŸĒ8õ;‘Œ{Ÿt=‚=‘Œ{ŸÛ@qD‘Œ{Ÿ<,F5‘Ôzæ5†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz<,G,Pv6€6PG,F5‘ˆ{Ÿæ5v6‘ˆ{Ÿ†6†8‘ˆ{ŸĒ8õ;‘ˆ{Ÿt=‚=‘ˆ{ŸÛ@qD‘ˆ{ŸP,F5‘Ôzæ5v6‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘ÔzP,[,Pf6p6P[,F5‘„{Ÿæ5f6‘„{Ÿ†6†8‘„{ŸĒ8õ;‘„{Ÿt=‚=‘„{ŸÛ@qD‘„{Ÿd,F5‘Ôzæ5f6‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôzd,o,PV6`6Po,F5‘€{Ÿæ5V6‘€{Ÿ†6†8‘€{ŸĒ8õ;‘€{Ÿt=‚=‘€{ŸÛ@qD‘€{Ÿx,F5‘Ôzæ5V6‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôzx,ƒ,PF6P6Pƒ,F5‘üzŸæ5F6‘üzŸ†6†8‘üzŸĒ8õ;‘üzŸt=‚=‘üzŸÛ@qD‘üzŸŒ,F5‘Ôzæ5F6‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘ÔzŒ,—,P66@6P—,F5‘øzŸæ566‘øzŸ†6†8‘øzŸĒ8õ;‘øzŸt=‚=‘øzŸÛ@qD‘øzŸ ,F5‘Ôzæ566‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz ,Ģ,P&606PĢ,F5‘{Ÿæ5&6‘{Ÿ†6†8‘{ŸĒ8õ;‘{Ÿt=‚=‘{ŸÛ@qD‘{Ÿ´,F5‘Ôzæ5&6‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz´,ŋ,P6 6Pŋ,F5‘œ{Ÿæ56‘œ{Ÿ†6†8‘œ{ŸĒ8õ;‘œ{Ÿt=‚=‘œ{ŸÛ@qD‘œ{ŸČ,F5‘Ôzæ56‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘ÔzČ,Ķ,P66PĶ,F5‘¨{Ÿæ56‘¨{Ÿ†68‘¨{Ÿ8…8R…8†8‘¨{ŸĒ8õ;‘¨{Ÿt=‚=‘¨{ŸÛ@qD‘¨{ŸÜ,F5‘Ôzæ56‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘ÔzÜ,į,P65@5Pį,65‘Øzæ56‘Øz†6†8‘ØzĒ8õ;‘Øzt=‚=‘ØzÛ@qD‘Øz -65‘Ôzæ56‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz -65‘Øzæ56‘Øz†6†8‘ØzĒ8õ;‘Øzt=‚=‘ØzÛ@qD‘Øzę9ũ9‘Øzđ9ũ9‘Øz#‘Øz4Ÿđ9ũ9P7-‚-S565Sũ9:S7-65‘Ėzæ56‘Ėz†6_8‘ĖzĒ8č9‘Ėzũ9õ;‘Ėzt=‚=‘ĖzÛ@qD‘Ėza-‚-S565Sũ9:Sa-i-Pi-k-v2&Ÿ5+5P+565v2&Ÿũ9:P::v2&Ÿa-65‘Ėzæ56‘Ėz†6_8‘ĖzĒ8č9‘Ėzũ9õ;‘Ėzt=‚=‘ĖzÛ@qD‘Ėz5+5P+565v2&Ÿũ9:P::v2&Ÿ5650Ÿũ9:0Ÿˆ-Ī-W†6Ÿ6W;;WKDqDWˆ-51Ÿæ561Ÿ†6W71Ÿ{7U81ŸĒ8č91Ÿ:Ũ:1Ÿä:õ;1Ÿt=‚=1ŸÛ@qD1Ÿ’-Š-S“;;S“KDMDS“ˆ-’-W’-Ũ-V†6Ÿ6W;;VKDqDV’-¯-S¯-Ŋ-s|Ÿ;;SKDMDS’-Ŧ-VŦ-Ũ-v|Ÿ;;VKDqDV ;;VKDqDV ;;WKDqDWXDdD‘Ėz#‘Ėz4ŸXDhDP`DdD‘Ėz#‘Ėz4Ÿ`DhDPÉ-5‘Ėzæ56‘Ėz’6W7‘Ėz{7U8‘ĖzĒ8č9‘Ėz:Ũ:‘Ėzä:;‘Ėz;õ;‘Ėzt=‚=‘ĖzÛ@KD‘ĖzÉ-5‘Øzæ56‘Øz’6W7‘Øz{7U8‘ØzĒ8č9‘Øz:Ũ:‘Øzä:;‘Øz;õ;‘Øzt=‚=‘ØzÛ@KD‘ØzÉ-.S“..s|Ÿ“.5.S“’6Ÿ6‘Ä}“ä:ö:S“Ũ-å-så-é-tđ-l.1Ÿä:;1Ÿ.l.ōÖæä:ë:ōÖæ%.l.‘Ėz’6Ÿ6‘Ėzä:ë:‘Ėz%.5.S’6Ÿ6‘Ä}ä:ë:S%.7.W’6Ÿ6‘Ä}ä:ë:W%.l.W’6Ÿ6‘Ä}ä:ë:W7.C.WC.G.w|ŸG.`.W`.l.w|Ÿ7.G.‘ÔzL.l.‘ÔzL.].Pl.5‘Ėzæ56‘ĖzŸ6W7‘Ėz{7U8‘ĖzĒ8č9‘Ėz:Ũ:‘Ėz;õ;‘Ėzt=‚=‘ĖzÛ@KD‘Ėzl.t.‘Ėz#‘Ėz4Ÿl.ĸ.Vp.t.‘Ėz#‘Ėz4Ÿp.|.V|.‰.‘đz|.5‘Øzæ56‘ØzŸ6W7‘Øz{7U8‘ØzĒ8č9‘Øz:Ũ:‘Øz;õ;‘Øzt=‚=‘ØzÛ@KD‘Øz.51Ÿæ561ŸŸ6W71Ÿ{7U81ŸĒ8č91Ÿ:Ũ:1Ÿ;õ;1Ÿt=‚=1ŸÛ@KD1Ÿˇ.Á.‘ôzˇ.5‘Øzæ56‘ØzŸ6W7‘Øz{7U8‘ØzĒ8č9‘Øz:Ũ:‘Øz;õ;‘Øzt=‚=‘ØzÛ@KD‘ØzČ.51Ÿæ561ŸŸ6W71Ÿ{7U81ŸĒ8č91Ÿ:Ũ:1Ÿ;õ;1Ÿt=‚=1ŸÛ@KD1Ÿū.ˆ/Sˆ/5‘Ŧ{Ÿæ5ö5‘Ŧ{Ÿö56SŸ6W7‘Ŧ{Ÿ{7U8‘Ŧ{ŸĒ8č9‘Ŧ{Ÿ:Ũ:‘Ŧ{Ÿ;õ;‘Ŧ{Ÿt=‚=‘Ŧ{ŸÛ@Ũ@SŨ@KD‘Ŧ{Ÿū.5Ÿæ56ŸŸ6W7Ÿ{7U8ŸĒ8č9Ÿ:Ũ:Ÿ;õ;Ÿt=‚=ŸÛ@KDŸ/ˆ/Sˆ/5‘Ŧ{Ÿæ5ö5‘Ŧ{Ÿö56SŸ6W7‘Ŧ{Ÿ{7U8‘Ŧ{ŸĒ8č9‘Ŧ{Ÿ:Ũ:‘Ŧ{Ÿ;õ;‘Ŧ{Ÿt=‚=‘Ŧ{ŸAKD‘Ŧ{Ÿ/5‘Ôzæ56‘ÔzŸ6W7‘Ôz{7U8‘ÔzĒ8č9‘Ôz:Ũ:‘Ôz;õ;‘Ôzt=‚=‘ÔzAKD‘Ôz/ /Pö56P@/t/‘¤}@/t/‘Øzc//0 ˙Ÿ/000P00‚0Sã0ņ0 ˙Ÿņ0÷0P÷0i1Si1z1‘# ā1€2 ˙Ÿ2Ü2 ˙Ÿî2ö2SŖ3Ę3S\45 ˙Ÿ{78 ˙Ÿ(8U8 ˙ŸĒ8I9 ˙ŸI9‡9SŲ:Û:SAÜA ˙Ÿ_B{B ˙ŸCCSCD ˙Ÿ˛/Ė/ã0ė02œ2/”/PĒ/Ė/Pã0ė0P2œ2PC7C‘Čz%C2C‘ü|Ÿ2C6CR6C7C‘ü|Ÿ%C6CP7CRC‘œ}Ÿ@CMC‘ü|ŸMCQCRQCRC‘ü|Ÿ@CQCPRCmC‘Äz[ChC‘ü|ŸhClCRlCmC‘ü|Ÿ[ClCPmCˆC‘”}ŸvCƒC‘ü|ŸƒC‡CR‡CˆC‘ü|ŸvC‡CPˆCŖC‘ˆ}Ÿ‘CžC‘ü|ŸžCĸCRĸCŖC‘ü|Ÿ‘CĸCPŖCžC‘„}ŸŦCšC‘ü|ŸšCŊCRŊCžC‘ü|ŸŦCŊCPžCŲC‘€}ŸĮCÔC‘ü|ŸÔCØCRØCŲC‘ü|ŸĮCØCPŲCōC‘}ŸâCōC‘ĖzâCōCPÖ/å/På/j0Vā1æ1VĒ8Đ8Vî/ū/Pū/J0Wā12WĒ8ļ8PtB{BWô/ã0@Ÿā1€2@ŸŸ6W7@Ÿ{78@Ÿ(8U8@Ÿt=‚=@Ÿ_B{B@ŸūBC@Ÿ00wp"Ÿ0,0Pā1æ1v@r””0.(w"ŸĄ6ŧ6‘ŧ|ŸĒ6ŧ6‘ČzĒ6ģ6Pŧ6×6VÅ6×6‘ČzÅ6Ö6P×6ō6‘´|Ÿā6ō6‘Čzā6ņ6Pō6 7‘¨|Ÿû6 7‘Čzû6 7P 7(7‘¤|Ÿ7(7‘Čz7'7P(7C7‘ |Ÿ17C7‘Čz17B7PC7W7‘°|ŸL7W7‘ĖzL7W7P}7˜7‘Ø|Ÿ†7˜7‘Čz†7—7P˜7ŗ7‘Ô|ŸĄ7ŗ7‘ČzĄ7˛7Pŗ7Î7‘Č|Ÿŧ7Î7‘Čzŧ7Í7PÎ7é7‘Ä|Ÿ×7é7‘Čz×7č7Pé78‘Ā|Ÿō78‘Čzō78P88‘Đ|Ÿ 88‘Ėz 88P18U8V:8U8‘Čz:8O8PAA‘ü|Ÿ AA‘Čz AAPA9AV'A9A‘Čz'A8AP9ATA‘ô|ŸBATA‘ČzBASAPTAoA‘č|Ÿ]AoA‘Čz]AnAPoAŠA‘ä|ŸxAŠA‘ČzxA‰APŠAĨA‘ā|Ÿ“AĨA‘Čz“A¤APĨAžA‘đ|ŸŽAžA‘ĖzŽAžAP˙01P1-1PI9U9P;:;‘œ|Ÿ(;:;‘Čz(;9;P:;U;VC;U;‘ČzC;T;PU;p;‘”|Ÿ^;p;‘Čz^;o;Pp;‹;‘|Ÿy;‹;‘Čzy;Š;P‹;Ļ;‘„|Ÿ”;Ļ;‘Čz”;Ĩ;PĻ;Á;‘€|Ÿ¯;Á;‘Čz¯;Ā;PÁ;Ü;‘ü{ŸĘ;Ü;‘ČzĘ;Û;PÜ;õ;‘Œ|Ÿå;õ;‘Ėzå;õ;PĻ:ŋ:‘ė{Ÿ¯:ŋ:‘Ėz¯:ŋ:P::‘ø{Ÿ ::‘Čz ::P:::V(:::‘Čz(:9:P::U:‘đ{ŸC:U:‘ČzC:T:PU:p:‘ä{Ÿ^:p:‘Čz^:o:Pp:‹:‘ā{Ÿy:‹:‘Čzy:Š:P‹:Ļ:‘Ü{Ÿ”:Ļ:‘Čz”:Ĩ:P-141PO1W1PŪAųA‘¸{ŸįAųA‘ĐzįAøAPųAB‘´{ŸBB‘ĐzBBPB/B‘°{ŸB/B‘ĐzB.BP/BSB‘ŧ{Ÿ8BSB‘Đz8BMBP}B˜B‘Ė{Ÿ†B˜B‘Đz†B—BP˜BŗBVĄBŗB‘ĐzĄB˛BPŗBÎB‘Ä{ŸŧBÎB‘ĐzŧBÍBPÎBōBW×BōB‘Đz×BėBPT1ā1‘Ü2î2‘æ5ö5‘]1ā1‘Ü2î2‘æ5ö5‘]1z1‘¤}p1ā1‘ØzÜ2î2‘Øzæ5ö5‘Øzp1ˆ1S“ˆ11s|Ÿ“1Ü1S“Ü2î2S“æ5ö5S“p1ā1ōÜ2î2ōæ5ö5ōp1ž1‘Øz#Ÿ1ž1ōž1ā1‘ØzÜ2î2‘Øzæ5ö5‘Øzž1Ļ1‘Øz#‘Øz4Ÿž1Ē1Pĸ1Ļ1‘Øz#‘Øz4Ÿĸ1Ē1Pp1ā11ŸÜ2î21Ÿæ5ö51Ÿp1ā1‘Ü2î2‘æ5ö5‘Ž1ā1‘ôzŸÜ2î2‘ôzŸæ5ö5‘ôzŸˇ1ā1‘ÔzÜ2î2‘Ôzæ5ö5‘Ôzˇ1Â1Pæ5đ5PÂ1ā1‘đzŸÜ2î2‘đzŸË1ā1‘ÔzÜ2î2‘ÔzË1Ø1PÜ2æ2PW7{7‘ØzU8_8‘Øz]7q7V“q7v7v|Ÿ“v7{7V“U8_8V“W7{7ōí U8_8ōí v7{7ōí U8_8‘Øz[8_8‘Øz#‘Øz4Ÿ[8_8P_8g8Pk8†8‘ôzŸt88‘¨{Ÿ8…8R…8†8‘¨{Ÿt8…8P†8Ą8‘đzŸ8œ8‘ëzŸœ8 8R 8Ą8‘ëzŸ8 8P÷;<V<<‘Ôz<<P<-<‘ {Ÿ<-<‘Ôz<,<P-<H<‘˜{Ÿ6<H<‘Ôz6<G<PH<c<‘”{ŸQ<c<‘ÔzQ<b<Pc<~<‘Œ{Ÿl<~<‘Ôzl<}<P~<™<‘ˆ{Ÿ‡<™<‘Ôz‡<˜<P™<´<‘„{Ÿĸ<´<‘Ôzĸ<ŗ<P´<Ī<‘€{ŸŊ<Ī<‘ÔzŊ<Î<PĪ<ę<‘üzŸØ<ę<‘ÔzØ<é<Pę<=‘øzŸķ<=‘Ôzķ<=P= =‘{Ÿ= =‘Ôz==P =;=‘œ{Ÿ)=;=‘Ôz)=:=P;=_=‘¨{ŸD=_=‘ÔzD=Y=P=Ē=W˜=Ĩ=‘œ}ŸĨ=Š=RŠ=Ē=‘œ}Ÿ˜=Š=PĒ=Å=‘Đzŗ=Ā=‘œ}ŸĀ=Ä=RÄ=Å=‘œ}Ÿŗ=Ä=PÅ=ā=‘ĖzÎ=Û=‘œ}ŸÛ=ß=Rß=ā=‘œ}ŸÎ=ß=Pā=û=‘Øzé=ö=‘œ}Ÿö=ú=Rú=û=‘œ}Ÿé=ú=Pû=>‘Ŧ}Ÿ>>‘œ}Ÿ>>R>>‘œ}Ÿ>>P>:>‘Čz>0>‘œ}Ÿ0>4>R4>:>‘œ}Ÿ>4>PĢ?Æ?W´?Á?‘”}ŸÁ?Å?RÅ?Æ?‘”}Ÿ´?Å?PÆ?á?‘Ė}ŸĪ?Ü?‘”}ŸÜ?ā?Rā?á?‘”}ŸĪ?ā?Pá?ü?‘Ā}Ÿę?÷?‘”}Ÿ÷?û?Rû?ü?‘”}Ÿę?û?Pü?@‘ }Ÿ@@‘”}Ÿ@@R@@‘”}Ÿ@@P@2@‘œ}Ÿ @-@‘”}Ÿ-@1@R1@2@‘”}Ÿ @1@P2@M@‘˜}Ÿ;@H@‘”}ŸH@L@RL@M@‘”}Ÿ;@L@PM@q@‘´}ŸV@g@‘”}Ÿg@k@Rk@q@‘”}ŸV@k@PŨ@A‘Ŧ{Ÿæ@A‘Ôzæ@û@P€D˜DR˜DAESAEEEķRŸEEmESmEēEķRŸēEåESåE)FķRŸ)FUFSUFœFķRŸœFžFSžFŧFķRŸŧFÁFSÁFĪFķRŸĪFŅFSŅFíFķRŸíFīFSīFHGķRŸŽD˜DR˜DAESAEEEķRŸEEmESmEēEķRŸēEåESåE)FķRŸ)FUFSUFœFķRŸœFžFSžFŧFķRŸŧFÁFSÁFĪFķRŸĪFŅFSŅFíFķRŸíFīFSīFHGķRŸ¤D¯Eą Ÿ)FœFą ŸŧFíFą ŸīFøFą ŸG0Gą ŸGSiF†FV†FœFv|ŸG0GVGSG0GSGSG0GuPSP>SLSw<ŸŠU°UP;SLSuDŸąUÂUuDŸASLSu`ŸˇUÂUu`ŸASLSPˇUÉUP“S¸SW¸S\UuPŸ\U]UtLŸĪUõUWõU]VuPŸ]V^VtLŸ^V‚VuPŸW*WuPŸ5WbWuPŸŗWžWuPŸ–S\Uu`Ÿ\U]Ut\ŸĪU]Vu`Ÿ]V^Vt\Ÿ^V‚Vu`ŸW*Wu`Ÿ5WbWu`ŸŗWžWu`Ÿ–S¤SP¤S˛Sw<ŸĪUÖUPĄS˛SuLŸ×UčUuLŸ§S˛Su`ŸŨUčUu`Ÿ§S˛SPŨUīUPôS\UuTŸ\U]UtPŸõU]VuTŸ]V^VtPŸ^V‚VuTŸW*WuTŸŗWēWuTŸ÷S\UudŸ\U]Ut`ŸõU]VudŸ]V^Vt`Ÿ^V‚VudŸW*WudŸŗWēWudŸ÷STPTTuT<ŸõUüUPTTWũUVuXŸTTudŸVVudŸTTPVVPQT\Uu`Ÿ\U]Ut\ŸV]Vu`Ÿ]V^Vt\ŸW*Wu`ŸTT\UudŸ\U]Ut`ŸV]VudŸ]V^Vt`ŸW*WudŸTTbTPbTpTu`<ŸV"VP_TpTu\Ÿ#V4Vu\ŸeTpTudŸ)V4VudŸeTpTP)V;VPpTYUSAVZVSWWSW*Wu …T\UudŸ\U]Ut`ŸAV]VudŸ]V^Vt`ŸW*WudŸ…TZUVAV[VVW*WV’T]U\ ŸAV^V\ Ÿ’TžTPĨT\UudŸ\U]Ut`ŸAV]VudŸ]V^Vt`Ÿ¨T\Uu`Ÿ\U]Ut\ŸAV]Vu`Ÿ]V^Vt\Ÿ¨TŗTPAVHVPŗTÅT0ŸÅTUWŗTYUSNVZVSŗTUs ŸU]UŊ ŸNV^VŊ ŸUZUVNV[VV'U\Uu°Ÿ\U]UtŦŸNV]Vu°Ÿ]V^VtŦŸ4U]U\ ŸNV^V\ Ÿ4U@UPGU\Uu°Ÿ\U]UtŦŸNV]Vu°Ÿ]V^VtŦŸJU\UudŸ\U]Ut`ŸNV]VudŸ]V^Vt`ŸJU]UPNVUVP`VuVu`ŸfVpVudŸpVtVRtVuVudŸfVtVPuV‚Vu\Ÿ{V‚VudŸ{V‚VP‚V Vu°ŸˆV’Vu¯Ÿ’V–VR–V Vu¯ŸˆV–VPĸVˇVu´Ÿ¨V˛VudŸ˛VļVRļVˇVudŸ¨VļVPˇVÄVu¸ŸŊVÄVudŸŊVÄVPĐVŨVuDŸÖVŨVu`ŸÖVŨVPW*WudŸW*Wu`ŸW*WPéVūVuPŸīVųVu`ŸųVũVRũVūVu`ŸīVũVPūVWuLŸWWu`ŸWWP7WLWuTŸ=WGWudŸGWKWRKWLWudŸ=WKWPLWbWuXŸRWbWudŸRWbWPdWzWuŧŸjWzWu`ŸjWzWP|WšWuHŸ‚WWu`ŸW”WR”WšWu`Ÿ‚W”WPœWŗWu@ŸĸWŦWu`ŸŦW°WR°WŗWu`ŸĸW°WPîWŊ] ŸÛ]C_ ŸJ_q_ ŸîWs\Wu\*]W,]Ŋ]WÛ]C_WJ_q_WXPXu ŸPX[XP[Xt\u Ÿt\u\tœŸu\+]u Ÿ+],]tœŸ,]Ŋ]u ŸÛ]C_u ŸJ_q_u ŸXXPX[u u\ö\u ,]Œ]u ™]Ŋ]u Û]˙]u ^ē^u _C_u J_q_u X!XP!X%Xu #$%X‘Xu”,]V]u”+_C_u”J_c_u”bXąXSąXt\u¨Ÿt\u\t¤Ÿu\+]u¨Ÿ+],]t¤Ÿ,]V]SV]Ŋ]u¨ŸÛ]^u¨Ÿ"^+_u¨Ÿc_q_u¨ŸeXt\u`Ÿt\u\t\Ÿu\+]u`Ÿ+],]t\Ÿ,]Ŋ]u`ŸÛ]^u`Ÿ"^+_u`Ÿc_q_u`ŸeXsXPsXXs<Ÿ,]5]PpXXV6]G]u¤ŸvXXu`Ÿ<]G]u`ŸvXXP<]P]PX[u u\ö\u V]Œ]u ™]Ŋ]u Û]˙]u ^^u "^ē^u _+_u c_q_u ‘X”XP”X˜Xu #$˜XKYu”V]€]u” ^^u”"^P^u” _+_u”ÕX YS Yt\u°Ÿt\u\tŦŸu\+]u°Ÿ+],]tŦŸV]€]S€]Ŋ]u°ŸÛ]^u°ŸP^+_u°Ÿc_q_u°ŸØXt\u`Ÿt\u\t\Ÿu\+]u`Ÿ+],]t\ŸV]Ŋ]u`ŸÛ]^u`ŸP^+_u`Ÿc_q_u`ŸØXæXPæXôXs<ŸV]_]PãXôXV`]q]uŦŸéXôXu`Ÿf]q]u`ŸéXôXPf]z]PôX[u u\ö\u €]Œ]u ™]Ŋ]u Û]˙]u ^^u P^ē^u _+_u c_q_u YKYu” ^^u” _+_u”HY„YS„Yt\u¸Ÿt\u\t´Ÿu\ļ\u¸Ÿļ\Ã\SÃ\+]u¸Ÿ+],]t´Ÿ€]Œ]SŒ]Ŋ]u¸ŸÛ] ^u¸ŸP^ _u¸Ÿc_q_u¸ŸNYYYQYYÆ[u”Æ[t\u`Ÿt\u\t\Ÿu\]u”]+]u`Ÿ+],]t\Ÿ€]†]Q†]Ŋ]u”Û] ^u”P^ _u”c_q_u”NYYYP€]†]PYYt\u´Ÿt\u\t°Ÿu\+]u´Ÿ+],]t°ŸŒ]Ŋ]u´ŸÛ] ^u´ŸP^ _u´Ÿc_q_u´Ÿ_Yt\u`Ÿt\u\t\Ÿu\+]u`Ÿ+],]t\ŸŒ]Ŋ]u`ŸÛ] ^u`ŸP^ _u`Ÿc_q_u`Ÿ_YjYPļ\Ŋ\P¨YįYSįYt\uŧŸt\u\t¸Ÿu\ļ\uŧŸÃ\é\Sé\+]uŧŸ+],]t¸ŸŒ]™]uŧŸÛ]˙]uŧŸP^ _uŧŸj_q_uŧŸĢYt\udŸt\u\t`Ÿu\ļ\udŸÃ\+]udŸ+],]t`ŸŒ]™]udŸÛ]˙]udŸP^ _udŸj_q_udŸĢYšYPšYĮYs<ŸÃ\Ę\PļYĮYVË\Ü\u@ŸŧYĮYudŸŅ\Ü\udŸŧYĮYPŅ\ã\PĮY[u u\ļ\u é\ö\u Û]˙]u P^ē^u j_q_u ĮYŲYu #$ŲYäYP ZNZSNZt\uHŸt\u\tDŸu\œ\uHŸœ\Š\SŠ\ļ\uHŸé\ö\Sö\+]uHŸ+],]tDŸŒ]™]uHŸP^ _uHŸZt\udŸt\u\t`Ÿu\ļ\udŸé\+]udŸ+],]t`ŸŒ]™]udŸP^ _udŸZZPé\đ\PZt\uDŸt\u\t@Ÿu\ļ\uDŸö\+]uDŸ+],]t@ŸŒ]™]uDŸP^ _uDŸ!Zt\udŸt\u\t`Ÿu\ļ\udŸö\+]udŸ+],]t`ŸŒ]™]udŸP^ _udŸ!Z,ZPœ\Ŗ\P,Z[u u\œ\u Š\ļ\u P^ē^u ,Z>Zu #$>ZIZPrZžZSžZt\uPŸt\u\tLŸu\\uPŸ\œ\SŠ\ļ\Sö\+]uPŸ+],]tLŸŒ]™]uPŸP^‰^uPŸē^ _uPŸuZt\udŸt\u\t`Ÿu\œ\udŸŠ\ļ\udŸö\+]udŸ+],]t`ŸŒ]™]udŸP^‰^udŸē^ _udŸuZ€ZPŠ\°\P€Zt\uLŸt\u\tHŸu\œ\uLŸö\+]uLŸ+],]tHŸŒ]™]uLŸP^‰^uLŸē^ _uLŸ†Zt\udŸt\u\t`Ÿu\œ\udŸö\+]udŸ+],]t`ŸŒ]™]udŸP^‰^udŸē^ _udŸ†Z‘ZP\–\PâZ[Su\\SåZ[u`Ÿu\\u`ŸåZđZP‚\‰\PđZ[uTŸu\‚\uTŸöZ[u`Ÿu\‚\u`ŸöZ[Pu\|\P[[u [[u #$[t\ut\u\tŒö\+]u+],]tŒŒ]™]uē^ _u![t\u\Ÿt\u\tXŸö\+]u\Ÿ+],]tXŸŒ]™]u\Ÿē^ _u\Ÿ![s\Wö\*]WŒ]™]Wē^ _W1[t\u\Ÿt\u\tXŸö\+]u\Ÿ+],]tXŸŒ]™]u\ŸŌ^ _u\Ÿ4[t\udŸt\u\t`Ÿö\+]udŸ+],]t`ŸŒ]™]udŸŌ^ _udŸ4[?[PŒ]“]P[t\u`Ÿt\u\t\Ÿö\+]u`Ÿ+],]t\Ÿ„[t\u\Ÿt\u\tXŸö\+]u\Ÿ+],]tXŸ„[’[P’[ [u`<Ÿö\ũ\P[ [udŸū\]udŸ•[ [u`Ÿ]]u`Ÿ•[ [P]]P´[Æ[0ŸÆ[,\S´[ŋ[Pŋ[ų[u #\,\u š[Æ[V#\,\u #$ŧ[Æ[vԟ#\,\ u #$#TŸÆ[#\S#\,\sŸÆ[ų[u #\,\u #$æ[ķ[s2$q"Æ[,\ ˙Ÿ#\,\ u #$#`Ÿ,\u\㠟],]㠟,\s\W]*]WB\t\u Ÿt\u\tœŸ]+]u Ÿ+],]tœŸ_\t\u Ÿt\u\tœŸ]+]u Ÿ+],]tœŸb\t\udŸt\u\t`Ÿ]+]udŸ+],]t`Ÿb\u\P]#]P›]°]uŧŸĄ]Ģ]udŸĢ]¯]R¯]°]udŸĄ]¯]P°]Ŋ]u@Ÿļ]Ŋ]udŸļ]Ŋ]PŊ]Û]u ŸÃ]Í]uŸŸÍ]Ņ]RŅ]Û]uŸŸÃ]Ņ]PŨ]ō]uHŸã]í]udŸí]ņ]Rņ]ō]udŸã]ņ]Pō]˙]uDŸø]˙]udŸø]˙]Pŧ^Ō^u\ŸÂ^Ō^udŸÂ^Ō^P ^^u´Ÿ^^u`Ÿ^^P$^9^u°Ÿ*^4^u`Ÿ4^8^R8^9^u`Ÿ*^8^P9^L^uŦŸ?^L^u`Ÿ?^L^PR^g^uXŸX^g^u`ŸX^f^Pg^…^uTŸm^…^u`Ÿm^^P‹^ ^uPŸ‘^›^udŸ›^Ÿ^RŸ^ ^udŸ‘^Ÿ^P ^ļ^uLŸĻ^ļ^udŸĻ^ļ^PÔ^é^u`ŸÚ^ä^u\Ÿä^č^Rč^é^u\ŸÚ^č^Pé^_udŸī^ũ^u\Ÿũ^_R__u\Ÿī^_P _+_u¸Ÿ_!_u`Ÿ!_%_R%_+_u`Ÿ_%_P-_C_u¤Ÿ3_C_u`Ÿ3_C_PL_c_u¨ŸR_\_u`Ÿ\_`_R`_c_u`ŸR_`_P€_Ã_0Ÿņ_ `0Ÿ ``P`§bu”~§b¨bt~¨bŌbu”~ŌbĶbt~Ķbcu”~Gcjc0Ÿjc§cu”~Žcdu”~•_˜_vŸ˜_ž_Pž_Š`vŸŠ`§bu#Ÿ§b¨bt#Ÿ¨bŌbu#ŸŌbĶbt#ŸĶbcu#ŸGcjcvŸjc€cu#Ÿc§cu#ŸŽcdu#Ÿƒ_Œ_u ~ŸŒ_*`S*`§bu ~Ÿ§b¨btœ~Ÿ¨bŌbu ~ŸŌbĶbtœ~ŸĶbGcu ~ŸGcIcSIcKcu ~ŸKcMcSMcdu ~ŸMcjcu ~ŸVcccuŦ~ŸccgcRgcjcuŦ~ŸVcgcPņ_c Ÿjc§c ŸŽcd Ÿņ_`v`cHŸjc§cHŸŽcdHŸ`…`uŦ~Ÿ…`ˆ`Pˆ`auŦ~Ÿa”aP”a§buŦ~Ÿ§b¨bt¨~Ÿ¨bŌbuŦ~ŸŌbĶbt¨~ŸĶbcuŦ~Ÿjc§cuŦ~ŸŽcduŦ~Ÿ``uā~Ÿ`#`P#`oauā~ŸoataPta§buā~Ÿ§b¨btÜ~Ÿ¨bŌbuā~ŸŌbĶbtÜ~ŸĶbcuā~Ÿjc§cuā~ŸŽcduā~Ÿōcķctķc÷cth`…`uŦ~Ÿ…`ˆ`Pˆ`auŦ~Ÿa”aP”a§buŦ~Ÿ§b¨bt¨~Ÿ¨bŌbuŦ~ŸŌbĶbt¨~ŸĶbcuŦ~Ÿjc§cuŦ~ŸŽcduŦ~ŸĨ`‡aW‡a§bu´~Ÿ§b¨bt°~Ÿ¨bŌbu´~ŸŌbĶbt°~ŸĶbcu´~Ÿc§cWŽcÔcu´~ŸÔcícWícdu´~Ÿc§cuŦ~Ÿô`cHŸŽcdHŸô`Jau¸~ŸJaoaPoapatpatatta§bu¸~Ÿ§b¨bt´~Ÿ¨bŌbu¸~ŸŌbĶbt´~ŸĶbcu¸~ŸŽcdu¸~Ÿ^aoap$Ÿoapat#$Ÿpatat#$Ÿta§buÜ~Ÿ§b¨btØ~Ÿ¨bŌbuÜ~ŸŌbĶbtØ~ŸĶbcuÜ~ŸŽcduÜ~ŸhatauÜ~lcrcuā~Ÿrc„cP„ccuā~Ÿ°aĻbWĻb§bu¨~Ÿ§b¨bt¤~Ÿ¨bŅbWŅbŌbu¨~ŸŌbĶbt¤~ŸĶbôbWŗa§buŸ~Ÿ§b¨bt›~Ÿ¨bŌbuŸ~ŸŌbĶbt›~ŸĶbôbuŸ~ŸŗažaP¨bēbPÕa§buŦ~Ÿ§b¨bt¨~ŸĀbŌbuŦ~ŸŌbĶbt¨~ŸĶbôbuŦ~Ÿķa§bu¸~Ÿ§b¨bt´~ŸĀbŌbu¸~ŸŌbĶbt´~ŸĶbôbu¸~Ÿũa§buÜ~Ÿ§b¨btØ~ŸĀbŌbuÜ~ŸŌbĶbtØ~ŸĶbôbuÜ~Ÿb§bu¨~Ÿ§b¨bt¤~ŸĀbŌbu¨~ŸŌbĶbt¤~ŸĶbôbu¨~Ÿb bPåbîbP b§bu¸~Ÿ§b¨bt´~ŸĀbŌbu¸~ŸŌbĶbt´~ŸĶbåbu¸~Ÿ$b§buŦ~Ÿ§b¨bt¨~ŸĀbŌbuŦ~ŸŌbĶbt¨~ŸĶbåbuŦ~Ÿ:b§bu´~Ÿ§b¨bt°~ŸĀbŌbu´~ŸŌbĶbt°~ŸĶbåbu´~ŸUb§buŦ~Ÿ§b¨bt¨~ŸĀbŌbuŦ~ŸŌbĶbt¨~ŸĶbåbuŦ~Ÿebkbuā~Ÿkb|bP|b§buā~Ÿ§b¨btÜ~ŸĀbŌbuā~ŸŌbĶbtÜ~ŸĶbåbuā~Ÿ†b§bu¤~Ÿ§b¨bt ~ŸĀbŌbu¤~ŸŌbĶbt ~ŸĶbåbu¤~Ÿ†bbu¤~Ÿb§bu ~Ÿ§b¨btœ~ŸĀbŌbu ~ŸŌbĶbtœ~ŸĶbåbu¤~Ÿ‰b§buŦ~Ÿ§b¨bt¨~ŸĀbŌbuŦ~ŸŌbĶbt¨~ŸĶbåbuŦ~Ÿ‰bbPĶbâbPb§bu ~Ÿ§b¨btœ~ŸĀbŌbu ~ŸŌbĶbtœ~Ÿ™b§buŦ~Ÿ§b¨bt¨~ŸĀbŌbuŦ~ŸŌbĶbt¨~Ÿ™b¨bPĀbĘbPc#cu¤~ŸccuŸ~Ÿc"cR"c#cuŸ~Ÿc"cP#c>cu ~Ÿ,c9cuŸ~Ÿ9c=cR=c>cuŸ~Ÿ,c=cP°cÔcu¨~ŸšcĘcuŸ~ŸĘcÎcRÎcÔcuŸ~ŸšcÎcP‘ĄV¤;VbdVŽĒVÚ V(FVMV ĮVåīVAu"p|Ÿ"+R+PScSSUPUcrxŸSœ0Ÿ¤Ž0ŸÜā0Ÿ(=0ŸSœS¤ŽSÜŪSSUPUcrxŸcks|ŸkwPws|ŸXcPqwPws|ŸqS‚udŸ‚‹P‹œudŸ¤ŽudŸ’œudŸ¤ŽudŸ•œucŸ¤ŽucŸ•œP¤ĢP(=udŸ.8ucŸ8<R<=ucŸ.<PÆßs4ŸĨĒs4Ÿņ s4ŸßŽuPĒÜuPāåuP (uPFķuPßøuPø)0Ÿ2;P;buDØÚuDÚÜuPāå0Ÿ (uDFMuDMSuPSwuDš0ŸŊŲ0ŸŲåuDīķ0ŸŽÜōŠc ā(ōŠc FķōŠc ŽÜ1Ÿā(1ŸFķ1ŸŽíuŽĒuå uŊÆ1ŸÆØR‘ĒRå RĩÜōŒ}ā(ōŒ}FķōŒ}ŊŽōRz•ÜōRzāåōRzí(ōRzFķōRzÆíuĨĒuņ uĐßuĐß0ŸĐßuLßíußíuíđtđôtßâuPs"ŸâũSũŽuHĒÚuHÚÜSāåuH (uHFMuHMSSSķuHSŽuPĒÚuPāåuP (uPFMuP uPŊåuPīķuPPŽ1ŸĒÚ1Ÿāå1Ÿ (1ŸFM1Ÿ 1ŸŊå1Ÿīķ1ŸPuT%/PāåuT uTŊŲuTīķuTSuTāåuT uTŊŲuTīķuT uPÆŲuPīķuP9;P;ŽuDĒÚuD (uDFMuDŲåuD9;Q;buTØÚuT (uTFMuTŲåuT9Ž1ŸĒÚ1Ÿ (1ŸFM1ŸŲå1Ÿ;QVØÚV (VFMVŲåV9;P;ŽSĒÚS (SFHS;WVWbv|ŸØÚV (VFMVŲåV;TSTbs|ŸØÚS (SFHS(SFHS(uDFMuDŲåuDdŽuTǝuTdkVdŽVĒØVksVsxv|ŸxŽVǝv|ŸkxudŸ}‡udŸ‡‹R‹ŽudŸĒ¯udŸ}‹P¯ØuTļÂuTfsPswuDfwuPwuPšŊuPåīuP~ŠuP šuH¨˛udŸ˛ļRļšudŸ¨ļP:d'fuTŸ1fguTŸgRg‘LŸRgZgPZgh‘LŸ:d_duTŸ_dĶdu`ŸĶdādSādeu`ŸeeSeVeu`ŸVeaeSae'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR g&g‘XŸ&g5gS5gJg‘XŸJgNgRNgOg‘XŸcg|g‘XŸ|gŧgSŧgâg‘XŸâgûgS_d'f|Ÿ1fOg|Ÿcgûg|Ÿ_d'fuTŸ1fguTŸgOg‘LŸcgûg‘LŸ_d'fW1f fW fgu@Ÿgg‘¸ŸgOgWcgÍgWÍgâg‘¸ŸâgûgWtdxd0ŸƒdĶdSũdeSe4eS4e5et5e6et6e:etcgygSŧgÍgS_dĶdu`ŸĶdādSādeu`ŸeeSeVeu`ŸVeaeSae'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR g&g‘XŸ&g5gS5gJg‘XŸJgNgRNgOg‘XŸcg|g‘XŸ|gŧgSŧgâg‘XŸâgûgSxdƒdV’d dP deVe#eP#eeVg5gVcgygVŖgĨgVŧgÍgVâgägV¤dēdRēdĶdvsŸũdevsŸcgxgRxgygvsŸ¤dĶdSũdeScgygSxdƒdW¤deWcgygWâgûgWxdƒdŸ¤deŸcgygŸâgûgŸxdƒduPŸždÍduPŸÍdŲdQŲdeuPŸeeQeeuPŸâgûg‘HŸxdƒdu`ŸždĶdu`ŸĶdādSādeu`ŸeeSâgûgSÆdĶdu`ŸĶdādSādædu`ŸÆdÍduPŸÍdŲdQŲdæduPŸÆdŲdPxdƒduPŸædũduPŸxdƒduLŸėdöduLŸödúdRúdũduLŸėdúdPe'f ˙Ÿ1fOg ˙ŸŖgâg ˙Ÿe4eS4e5et5e6et6e:etŧgÍgSe'fW1f fW fgu@Ÿgg‘¸ŸgOgWŖgÍgWÍgâg‘¸Ÿe'fŸ1fOgŸŖgâgŸ>eVeSVeZetZe'fuLŸ1fguLŸgg‘DŸg&gS&g'gt'g(gt(g,gt,gOg‘DŸŖgŧg‘DŸÍgâg‘DŸ>eVeu`ŸVeaeSae'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR g&g‘XŸ&g5gS5gJg‘XŸJgNgRNgOg‘XŸŖgŧgSÍgâg‘XŸJeVeu`ŸVeaeSaegeu`ŸJeVeSVeZetZegeuLŸJeZePge'fuLŸ1fguLŸgg‘DŸ5gOg‘DŸÍgâg‘DŸmežeuPŸžeÅeRÅe'fuPŸ1fguPŸgg‘HŸggRgg‘HŸ5gOg‘HŸÍgâg‘HŸmexePggPĨgŧg‘DŸĢgĩg‘HŸĩgšgRšgŧg‘HŸĢgšgPägûg‘HŸęgôg‘DŸôgøgRøgûg‘DŸęgøgPxe'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR gg‘XŸ5gJg‘XŸJgNgRNgOg‘XŸÍgâg‘XŸxe'fuTŸ1fguTŸgg‘LŸ5gOg‘LŸÍgâg‘LŸ~eĸeSe'fudŸ1fÖfudŸÖfŨfrŸŨfgudŸgg‘\Ÿg grŸ gg‘\Ÿ5gJg‘\ŸJgNgrŸNgOg‘\ŸÍgâg‘\Ÿe'fuXŸ1fguXŸgg‘PŸ5gOg‘PŸÍgâg‘PŸe'fV1f”fVggV5gOgV’e'fuhŸ1fÖfuhŸÖfŨfrŸŨfguhŸgg‘`Ÿg grŸ gg‘`Ÿ5gJg‘`ŸJgNgrŸNgOg‘`ŸÍgâg‘`Ÿ’e'fu\Ÿ1fgu\Ÿgg‘TŸ5gOg‘TŸÍgâg‘TŸ˜eĸePže'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR gg‘XŸ5gJg‘XŸJgNgRNgOg‘XŸÍgâg‘XŸže'fV1f”fVggV5gOgVžeĸeSžeÁeSÁeÆes|ŸÆeĶeSĸeĢeSĢe¯es|Ÿ¯eÁeSÁeĘes|Ÿĸe¯euPŸ´ežeuPŸžeÅeRÅeĶeuPŸĸe¯eP´eÅePĶe'fu`Ÿ1fÖfu`ŸÖfŨfRŨfëfu`ŸëfguTŸgg‘LŸgg‘XŸg gR gg‘XŸ5gJg‘XŸJgNgRNgOg‘XŸÍgâg‘XŸĶeÛe uhu`4Ÿëfķf u\uT4ŸĶefS1fŽfSggS×eÛe uhu`4Ÿ×eãeSãe'fW1f fW fgu@Ÿgg‘¸ŸggW5gOgWÍgâg‘¸Ÿée'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR gg‘XŸ5gJg‘XŸJgNgRNgOg‘XŸÍgâg‘XŸéeôePg gP÷e'fuTŸ1fguTŸgg‘LŸ5gOg‘LŸÍgâg‘LŸ1fguTŸgg‘LŸÍgâg‘LŸ1fg1ŸÍgâg1ŸHfguTŸgg‘LŸÍgâg‘LŸHfg2ŸÍgâg2ŸbfguTŸgg‘LŸÍgâg‘LŸbfg3ŸÍgâg3Ÿ f¤fQ¤fgu¨gg‘ Ígâg‘  f´fV´fĀfsÍgŌgV fąfWąfĀfsÍgâgW fgu¤gg‘œÍgâg‘œ fgSggPÍgÕgSÕgŲgtŧfguTŸgg‘LŸŧfëfWŧfĀfVŧfŲfVŲfŪfv|ŸŪfgVĀfÃfVÃfĮfv|ŸĮfŲfVŲfâfv|ŸĀfĮfu`ŸĖfÖfu`ŸÖfŨfRŨfëfu`ŸĀfĮfPĖfŨfPëfguTŸgg‘LŸëfķf u\uT4ŸëfgWīfķf u\uT4ŸīfûfW:gOg‘@Ÿ@gJg‘XŸJgNgRNgOg‘XŸ@gNgP‡gŖgWgšg‘@ŸšgžgRžgŖg‘@ŸgžgPh&hP&h”hS”h˜hķPŸ˜hžhSžhŲhķPŸ"h&hP&h”hS”h˜hķPŸ˜hžhSžhŲhķPŸ/h:hP:h–hW˜hŲhW/h”hsøŸ”h˜hķP#øŸ˜hžhsøŸžhŲhķP#øŸ7hbhVŠhŲhV>hFhPJhbhVŠhēhVOhbhugŸŠhēhugŸOhVhPŠhˇhPÁhËhugŸËhĪhRĪhŲhugŸÁhĪhPhh”hS”h˜hķPŸ˜hŠhSlhvhsĖŸlhvh0ŸlhvhsĖvh”hS”h˜hķPŸ˜hŠhS‘‘=RWZĐW=RŸZĐŸPRWZŒW”W˛ĐWSRucŸZŒucŸ”ucŸ˛ĐucŸS^P†P^RŸZŸ”Ÿ˛ĐŸdrQjŽVjrQjrQrSs|ŸĨSr{S{s|ŸSŸs|ŸrudŸ„ŸudŸrP„—PĢļ0ŸļS sŸ 'SZtS’SļÍudŸ×'udŸZtudŸ”udŸ˛ĐudŸļÍŸ×'ŸZtŸ”Ÿ˛ĐŸįŸįudŸįôPļÍudŸ'udŸļÍucŸ ucŸR'ucŸļÃPÃÍud<Ÿ P¸ÂucŸÂÆRÆĐucŸ¸ÆP'6u 69t9=t'6u9=tIRPt|P”˛udŸš¤ucŸ¤¨R¨˛ucŸš¨PEƒSƒ…udŸ…‡S‡ĨudŸYS…‡S\ucŸ…‡ucŸ\gPt{PgtŸ…‡Ÿw‚P‚tuT…‡uTw‚Q‚ŗWw‚P‚ V Ĩv|ŸĨ¸V‚‹V‹v|Ÿ V Šv|Ÿ‚udŸ”ŗudŸ‚P”¤PŊÅ0ŸÅVvŸ#VVtV…‡VÅĪudŸÜ#udŸVtudŸ…‡udŸÅĪŸÜ#ŸVtŸ…‡ŸéŸéudŸéöPÅĪudŸ#udŸÅĪucŸ ucŸR#ucŸÅĪP P—ucŸ—›R›ĨucŸ›P#.u ./t/3t#VW?PP ‘ 3S38stŸ8DSSstŸ3S3<stŸsŸs|Ÿ3sŸ3<s|Ÿ‘oŸ%0‘oŸ07R7<‘oŸP%7P"P7IPôøPøXuPēžuPĀŅuP#&P&,p|ŸUēu#ŸXŒu#ŸUXPX–R–XuPXoRo‡uP‡‹R‹ņuP^ēu#ŸXŒu#Ÿ^aPaņuT‡ēu#ŸXŒu#Ÿ‡–P–ž s2&ĢÕĒÕzŸXoPo{ s2&ĢÕĒÕzŸƒ… s2&ĢÕĒÕzŸ‡‹P‹Œ s2&ĢÕĒÕzŸXoPo{ s2&ĢÕĒÕzŸƒ… s2&ĢÕĒÕzŸ‡‹P‹Œ s2&ĢÕĒÕzŸX{0ŸƒŒ0Ÿ°ēPēXuL{ƒPŒ§uLēņuL°X1Ÿ{ƒ1ŸŒ§1Ÿēņ1Ÿ°ēS“{ƒS“°ēPēëV{ƒPŒ§VžĀVŅņVēįVįëvtŸŒ§VžĀVŅņVÄáVŒ§VžĀVŅņVŒ§VÚņVŒ§uLÚņuL‘§uT—ŸuT#uT<Ÿ—ŖP›ŸuT#uT<Ÿ›ŖP P XSēŧSSiZiP“Zi l‘°“+lÉl‘°“5iGi‘D#ŸGiLiPSiZiPZi l‘°+lÉl‘°Si lōíĻ+lÉlōíĻ[ifiw$fijip€~Ÿ[iciw$#€ŸcijiPsiuiPkkPŧjÚkrŸækũkrŸŧjÚk‘DŸækũk‘DŸÖjÚk[Ÿækũk[ŸÖjÚk‘DŸækũk‘DŸėjÚk Ÿækũk ŸėjÚk‘DŸækũk‘DŸk.kPújkw$k kp€~Ÿújkw$#€Ÿk kPkkP ŸovÉv> Ÿ)w7w> ŸbsątWovÉvW)w7wWbslsqŸlsqsPÄstō&ČtątōČov‰vōȉvŠvō&Č)w7wōČxsątWovÉvW)w7wWŠvÉvudŸ˜sątđŸovŠvđŸ)w7wđŸ˜sĨspŸĨsĒsPąsątV ŸovŠvV Ÿ)w7wV ŸąsģspŸģsĀsPÄsątudŸovŠvudŸ)w7wudŸ‰vŠvudŸâsąt\ Ÿov‰v\ Ÿ)w7w\ ŸâsīspŸīsôsPûsątV Ÿov‰vV Ÿ)w7wV ŸûstpŸt tPtątōČov‰vōČ)w7wōČtątudŸov‰vudŸ)w7wudŸov‰vudŸ,tątĖŸ)w7wĖŸ,t9tpŸ9t>tPEtątôŸ)w7wôŸEtOtpŸOtTtP[tątz Ÿ)w7wz Ÿ[tetpŸetjtP™tątudŸ™tąt0Ÿ7wJwudŸ7wJw0ŸĐtØtPátXvôŸÉv)wôŸSwzwôŸátVvWVvWvudŸWvXvt`ŸÉv)wWSwzwWųtXv4ŸÉv)w4Ÿjwzw4ŸųtVvWVvWvudŸWvXvt`ŸÉv)wWjwzwWWu‹uōׯ‹uXvōĮÉvévōĮ w)wōׯjwzwōĮ uVvWVvWvudŸWvXvt`ŸÉv)wWjwzwWév wudŸ-uXvđŸÉvévđŸ w)wđŸjwzwđŸCuXv€ ŸÉvév€ Ÿ w)w€ Ÿjwzw€ ŸWuWvudŸWvXvt`ŸÉvévudŸ w)wudŸjwzwudŸ w)wudŸwuXv’ ŸÉvév’ Ÿjwzw’ Ÿ‹uXvōĮÉvévōĮjwzwōĮ‹uWvudŸWvXvt`ŸÉvévudŸjwzwudŸÉvévudŸŠuXvrŸjwzwrŸŋuXv4Ÿjwzw4ŸŌuXvtŸjwzwtŸåuXv´Ÿjwzw´ŸøuXvôŸjwzwôŸ4vWvudŸWvXvt`Ÿ4vXv0ŸUwjwudŸUwjw0Ÿĸw´wW´wģwtˇwģwPģw!xW!x"xuD"x#xt@#x’yWŒw xS#xĨxS9y;ySåwîwPîwīwtīwķwtx xP#x3x0Ÿx xu`Ÿ#xŠxu`ŸŠxĄxRĄx’yu`Ÿ x#x0Ÿ,x’y0Ÿ x xudŸ,x’yudŸExNy§ Ÿgy’y§ ŸEx;yV;yNyu\ŸgylyVlyŽyu\ŸŽy’yVExOxpŸOxTxPUx9yōxĶgy’yōxĶUx9yVgylyVlyŽyu\ŸŽy’yVUxĨxSUxXxv#ŸdxhxpŸhxmxPtx9y0Ÿgy’y0Ÿtx~xpŸ~xƒxPĪx9yuTŸØxõxSõxyuXŸy)yS)y9yuXŸØxßxPy&yPßxyu\Ÿ)y9yu\Ÿßxy0Ÿ)y9y0Ÿōxyu`Ÿ)y9yu`ŸōxyudŸ)y9yudŸōxy0Ÿ)y9y0ŸũxyS)y9ySyyu\Ÿ)y9yu\Ÿy yP)y6yP;yNyu\Ÿ;yNy0ŸNycyu`ŸNySyudŸSyZyPZycyudŸwyŽyuTŸ}y‡yuSŸ‡y‹yR‹yŽyuSŸ}y‹yPÛyčySčyéyutŸéyęytpŸęyûySûyüyutŸüyũytpŸŪyéyusŸéyęytoŸęyüyusŸüyũytoŸŪy÷yPzzusŸzzRzzusŸzzP‘S“V“"-S“V“^fS“V“"-u^ëuđnusƒu"-u “V“^ëu “V“ëđ“V“đnu “V“ns“V“sƒu “V“"-u^ëuđnusƒu‚‰PŠÅSŦļusŸļēRēÅusŸŦēPÍâutŸĶŨusŸŨáRáâusŸĶáP7S(usŸ(,R,7usŸ,PPeutŸV`usŸ`dRdeusŸVdP@z­zSŽz {S‘S“V“"-S“V“^fS“V“"-u^íuōruw‡u"-u “V“^íu “V“íō“V“ōru “V“rw“V“w‡u “V“"-u^íuōruw‡u‚‰PŠĮSŦļusŸļēRēĮusŸŦēPĪäutŸÕßusŸßãRãäusŸÕãP;S *usŸ*.R.;usŸ .PTiutŸZdusŸdhRhiusŸZhP{"{P"{i|Si|m|ķPŸm|Ž|S&{j|Vm|Ž|VĀ{Æ{PÆ{K|Um||U–|Ž|U&{i|Si|m|ķPŸm|Ž|S1{4{p$#ĖŸ4{?{pĖŸX|j|VX|m|0Ÿ‘S“V“"-S“V“^fS“V“"-u^ëuđnusƒu"-u “V“^ëu “V“ëđ“V“đnu “V“ns“V“sƒu “V“"-u^ëuđnusƒu‚‰PŠÅSŦļusŸļēRēÅusŸŦēPÍâutŸĶŨusŸŨáRáâusŸĶáP7S(usŸ(,R,7usŸ,PPeutŸV`usŸ`dRdeusŸVdPĐ|Ũ|PŨ|r~Sr~v~ķPŸv~›~Së|ņ|Pņ|6}V6}v~‘ŧv~Ž~VŽ~›~‘ŧë|r~Sr~v~ķPŸv~›~Sō|õ|p$#ĖŸõ|}pĖŸŒ}–}0Ÿ–}Ų}VŒ}r~Sr~v~ķPŸŽ~›~SŒ}Ų}s Ÿ–}ĸ}Pŧ}Æ}P`~v~‘ŧ`~v~0Ÿé~ãS‚„S„ „u „ „t „I„SI„]„u¤ˆŸû~ 0Ÿ PŧWŧÁPÁčW‚‚PĮƒ „W „G„W"P07p0.Ÿ7ãuH0.Ÿ‚ģƒuH0.ŸĮƒ „uH0.Ÿ „ „tD0.Ÿ „]„uH0.ŸWč0Ÿč́uŋ‚‚0Ÿ‚ģƒuŋ „„0ŸG„]„uŋÆÔPỐu¸‚ģƒu¸ „„P„„G„]„u¸ÎÔQỐu¨‚ģƒu¨ „„QG„]„u¨WãsĖŸ‚ģƒsĖŸ „„sĖŸG„I„sĖŸI„]„u¤#DŸÎč0Ÿč°uLŗʁPʁ́uL‚ģƒuL „„0ŸG„]„uL|́SԂ#ƒSEƒģƒSG„I„SI„]„u¤ˆŸƒ#ƒSč́S‚ģƒSG„I„SI„]„u¤ˆŸč́sԟ‚ģƒsԟG„I„sԟI„]„u¤4ŸöũP“ũ €uP“ €€uP#Ÿ“€€uP“ũ€uP€ €t“€ sȟ‚Ԃsȟ™€Ĩ€W“Ĩ€Ģ€wŸ“Ģ€°€W“°€ĀW“Āʀw|Ÿ“Ĩ€°€R˛€ƀRė€ 0Ÿ‚m‚Wė€ S‚m‚Sō€ sԟ‚m‚sԟ‚.‚W.‚7‚wŸ7‚^‚W^‚m‚wŸ‚m‚S‚"‚P"‚.‚w2$q".‚7‚w2$q"O‚T‚w2$q"‚m‚ ˙Ÿ‚m‚sāŸ|‚Ԃsȟ‚Ԃsȟ‚Ԃs˟Ž‚˜‚R›‚¯‚RŪ‚ë‚Wë‚ų‚wŸEƒģƒWG„]„Wë‚ų‚W#ƒ8ƒsā8ƒ<ƒP#ƒEƒsäŸÍƒ҃Q„"„Q҃ԃQԃčƒqŸčƒëƒqŸëƒđƒP‘S“V“"-S“V“^fS“V“"-u^íuōruw‡u"-u “V“^íu “V“íō“V“ōru “V“rw“V“w‡u “V“"-u^íuōruw‡u‚‰PŠĮSŦļusŸļēRēĮusŸŦēPĪäutŸÕßusŸßãRãäusŸÕãP;S *usŸ*.R.;usŸ .PTiutŸZdusŸdhRhiusŸZhPh„i„pt0.Ÿ{„“„{„™„QĨ„Á„ōöÁ„…V ŸÜ„đ„Pđ„…V܄…ōöö„…P……Sã„… Ÿã„đ„Pđ„…VO…´…V“ˇ…z†V“}†ƆV“O…´…Vˇ…z†V}†ƆV]…_…P_…ļ…uTļ…ˇ…‘Lˇ…ԅPԅ|†uT|†}†tP}†ƆuTՅ†Ÿŗ†ƆŸė…†æŸq…v…Pv…w…s$w…{…p€~Ÿq…v…p€Ÿv…{…P‚…‹…Pˆ…‹…Pˆ…™…Q}†‡†Qˆ…™…qŸ}†‡†qŸŽ…ļ…udŸļ…ˇ…‘\Ÿ†|†udŸ|†}†t`Ÿ}† †udŸŽ…™…P}†‡†P™…ˇ…ōÃ÷†}†ōÃ÷† †ōÃ÷™…´…V†z†V† †V­…ˇ…P†4†P4†y†S†’†S5†}†ųŸ† †ųŸL†}†æŸĨ†ŗ†ōÃ÷‘ÉVđžVŅ×VâäV.Va–V˛ĐV×V*RVpzVYu6ptŸ67w<Ÿ7<plŸ6P67w7<pxŸ"6ptŸ67w<Ÿ7<plŸ"6P67w7<pxŸOŪu\Ÿæđu\Ÿcgu\Ÿ˛Įu\ŸhwrtŸw}w<Ÿ}‡pŸhnrhŸnsSswrhŸw}wHŸ}‡pxŸhŪ0Ÿæđ0Ÿcg0Ÿ˛Į0ŸhwrtŸw}w<Ÿ}‡pŸ‡¨pxŸ¨˛sŸhnrhŸnsSswrhŸw}wHŸ}‡pxŸ‡¨plŸ¨˛sxŸƒ‡Q‡¨plŸ¨˛sxŸ‡¨pxŸ¨˛sŸĸ˛Sĸ¨P¨˛s Ÿ˛Ūu\Ÿæđu\ŸÄĮudŸĮÍPÍŪudŸæđudŸÔŪu\Ÿæđu\ŸÔŪudŸæđudŸ×Ūu[Ÿæđu[Ÿ×ŪPæíP˛Įu\Ÿ˛ĮudŸ¸Âu[ŸÂÆRÆĮu[Ÿ¸ÆP)uT<Ÿ$)p<Ÿ).uT<Ÿ}–p<Ÿ)uP.cuPgluP–˛uPĐ~uP)TuPT”0ŸĻPĻâuD_auDacuPgl0Ÿ–˛uDĐ×uD×ŨuPŨuDD0ŸHd0ŸdpuDz~0ŸđcōŠc g˛ōŠc Đ~ōŠc đc1Ÿg˛1ŸĐ~1ŸđKu.ul–u1Ÿ"Q.Ql–QũcōŠ g˛ōŠ Đ~ōŠ ō¨ücō¨üglō¨üt˛ō¨üĐ~ō¨üKu$.u}–u)u)0Ÿ)uL)Ku)?S?KuKTsxŸacsxŸ×ŨsxŸ)/uPuT"Ÿ/6P6uH.cuHgluH–˛uHĐ~uH4?S?KuKTsxŸacsxŸ×ŨsxŸ46P6TuHacuH×ŨuH^`S`uP.auPgluP–˛uPĐ×uP*uPHpuPz~uP^`P^1Ÿ.a1Ÿgl1Ÿ–˛1ŸĐ×1Ÿ*1ŸHp1Ÿz~1Ÿ^`P`ŠuTšPgluT*uTHduTz~uT^`S`ŠuTgluT*uTHduTz~uTd†uTgluT*uTHduTz~uT*uPQduPz~uP¤ĻPĻuD.auD–˛uDĐ×uDdpuD¤ĻQĻâuT_auT–˛uTĐ×uTdpuT¤1Ÿ.a1Ÿ–˛1ŸĐ×1Ÿdp1Ÿ¤ĻPĻS.aS–˛SĐŌSĻÔSÔâstŸ_aS–˛SĐŌS´ŅS_aS–˛SĐŌSŸ˛SĐŌSŸ˛uDĐ×uDdpuDäuT.3uTäëVäV._VëķVķøvtŸøV.3vtŸëķvŸķøv|ŸøvŸ.3v|Ÿëøu\Ÿūu\Ÿ R u\Ÿ.3u\Ÿū P3_uT:FuTđũPũuDđuPuPDHuPpzuPuP*DuH*DuH#Ÿ3=u\Ÿ=ARADu\Ÿ3AP‡”‡W“–‡ˆW“bˆ}ˆW“’ˆēˆW“‡”‡W–‡ˆWbˆ}ˆW’ˆēˆW‡‡P‡•‡uP•‡–‡tL–‡Ŗ‡PŖ‡aˆuPaˆbˆ‘HbˆēˆuP¸‡ˆŸĨˆēˆŸĪ‡ˆæŸ(‡-‡P-‡.‡s$.‡2‡p€~Ÿ(‡-‡p€Ÿ-‡2‡P;‡S‡VS‡o‡vxŸbˆ}ˆV;‡>‡P>‡e‡Qe‡•‡uT•‡–‡tPˆˆuTbˆtˆQtˆ}ˆuTG‡e‡Qe‡x‡uTG‡S‡VS‡o‡vxŸG‡V‡PV‡`‡q`‡e‡pxŸK‡S‡VS‡o‡vxŸK‡V‡PV‡`‡q`‡e‡pxŸx‡–‡ō ˆbˆō }ˆ’ˆō x‡”‡WˆˆWŒ‡–‡PˆˆPˆ^ˆS}ˆ…ˆSˆbˆųŸ}ˆ’ˆųŸ1ˆbˆæŸ—ˆĨˆō Ũˆ*‰u*‰+‰‘ +‰K‰uK‰L‰tL‰g‰ul‰…‰uÈ*‰ulŸ*‰+‰‘dŸ+‰K‰ulŸK‰L‰thŸL‰…‰ulŸÃˆëˆutŸëˆķˆPķˆ*‰utŸ*‰+‰‘lŸ+‰K‰utŸK‰L‰tpŸL‰…‰utŸÔˆįˆutčˆ)‰S)‰*‰uhŸ*‰+‰‘`Ÿ+‰J‰SJ‰K‰uhŸK‰L‰tdŸl‰n‰Sn‰…‰uhŸčˆëˆutŸëˆķˆPķˆ*‰utŸ*‰+‰‘lŸ+‰K‰utŸK‰L‰tpŸl‰…‰utŸúˆ)‰S)‰*‰uhŸ*‰+‰‘`Ÿ+‰J‰SJ‰K‰uhŸK‰L‰tdŸũˆ*‰ugŸ*‰+‰‘_Ÿ+‰K‰ugŸK‰L‰tcŸũˆ‰P+‰7‰P‰*‰ulŸ*‰+‰‘dŸ:‰K‰ulŸK‰L‰thŸ‰*‰utŸ*‰+‰‘lŸ:‰K‰utŸK‰L‰tpŸ‰*‰uhŸ*‰+‰‘`Ÿ:‰K‰uhŸK‰L‰tdŸ‰+‰P:‰F‰PN‰l‰ulŸN‰l‰utŸT‰^‰ugŸ^‰b‰Rb‰l‰ugŸT‰b‰Pt‰~‰ugŸ~‰‚‰R‚‰…‰ugŸt‰‚‰P ‘ pVswVy{VuiSsÚSbVbivlŸswVy{VeSeislŸsÚS$_VswVy{V$_SsÚS}’s ŸƒugŸ‘R‘’ugŸƒ‘P’ŠsŸ˜ĸugŸĸĻRĻŠugŸ˜ĻP˛ÖSØÚS˛ēu˛ĀuĀÄtÉŅuēĀuĀÄtpuuLu[wlŸwlŸLwlŸ[WWLW[wlŸwlŸLwlŸ[WWLW1w Ÿ",uTŸ,0R01uTŸ"0P1HwŸ7AuTŸAEREHuTŸ7EPi–S–ŦspŸšģspŸ SipuTŸx–uTŸĩûuTŸ uTŸŅæu`Ÿ×áuSŸáåRåæuSŸ×åPæûuXŸėöuSŸöúRúûuSŸėúP °plŸ°ĀvDŸ ĻpXŸĻŠQаpXŸ°Āv(Ÿ Āu  p0Ÿx–0Ÿĩš0ŸŊŅ0Ÿ °plŸ°ĀvDŸĀđs|ŸđūspŸūvŸ ĻpXŸĻŠQаpXŸ°Āv(ŸĀđshŸđūs\Ÿūv|ŸŧĀRĀđshŸđūs\Ÿūv|ŸĀđs|ŸđūspŸūvŸĖVĖđSđūstŸūvŸÛŪstŸŪâPâãtãįtįđstŸđūshŸūvŸÛâsŸâįPįđsŸđūs|ŸūvŸęísxŸíöPöūslŸūv Ÿęđs ŸđūSūv ŸpuTŸx–uTŸu Q uXŸPttpuXŸx–uXŸ u #ŸqŸP%(u`Ÿ(+P+/t/3t3pu`Ÿx–u`Ÿ%.q Ÿ.3P9=P=AtAEtEpudŸx–udŸ9:u #Ÿ=@pŸ@EPLpuTŸx–uTŸLpudŸx–udŸOpuSŸx–uSŸOVPxPVpu`Ÿ‚–u`Ÿ\puSŸ‚–uSŸ\cP‚‰PcpuXŸŒ–uXŸipuSŸŒ–uSŸipPŒ“PĩÍwDŸ”™wDŸšĩwDŸÍxuD™‰uD uDuDLhuDÍ uD #0Ÿ#4S7:u@ÛßuDßáSáã0Ÿã uD3aSam0Ÿ uDLhuD–ĩōŠc  ōŠc ōŠc LhōŠc –ĩ1Ÿ 1Ÿ1ŸLh1Ÿ–Ũux™u‰ĩuĢĩ1ŸĩÆQ{™Q‰ĩQŖĩō  ō ō Lhō ĢxōÎ ƒ‰ōÎ •ĩōÎ  ōÎ ōÎ LhōÎ ĩŨu”™ušĩužÍužÍ0ŸžÍuŧÍŨuÍS spŸÛŨspŸS  SLhSÍĐuDw"ŸĐ2WÛ‰W WWLhWŌS spŸÛŨspŸS  SLhSŌ WÛßWã W WLhWãøw ŸéķuTŸķ÷R÷øuTŸé÷Pø wŸūuTŸ R  uTŸū P xuD™ÛuDßãuD3muD u tt x1Ÿ™Û1Ÿßã1Ÿ3m1Ÿ#4SßáS3aS#$u *.t#x1Ÿ™Û1Ÿßá1Ÿ3a1Ÿ7xW™¯W7@S7xS™ÛS@]S]aslŸaxS™­S­¯slŸ@]s Ÿ]asxŸ™­s Ÿ­¯sxŸFauTŸ™¯uTŸFMPŖĒPM]sŸ]aspŸ™ŖsŸ­¯spŸSauTŸ™ŖuTŸ­¯uTŸSZP™ P@]sŸ]as|ŸaxsŸ™­sŸ­¯s|Ÿ@auTŸgquTŸquRuxuTŸ™¯uTŸguP¯ÛWŗŋWy‚uD .uDCLuDLSVSWtWXvlŸXaVLSVSWtWavlŸmyWĸ‰ĉPĉ͉u#'Š=ŠPļ‰%ŠW'Š‚ŠWļ‰ ŠV'Š6ŠV6ŠIŠv`ŸIŠKŠViŠkŠVļ‰ Šv Ÿ'Š6Šv Ÿ6ŠIŠVIŠKŠv ŸiŠkŠv Ÿž‰ Šv ŸIŠKŠv ŸiŠkŠv Ÿž‰ ŠWIŠ‚ŠWž‰ŠSIŠ‚ŠS‰ŠWIŠ‚ŠW‰ŠSIŠ‚ŠSKŠiŠsŸQŠ[ŠugŸ[Š_ŠR_ŠiŠugŸQŠ_ŠPqŠ{ŠugŸ{ŠŠRŠ‚ŠugŸqŠŠP ŠŠpĖŸŸŠۊVۊöŠu öŠ÷Št÷Š‹V‹.‹u 3‹L‹u œŠõŠw ŸõŠöŠu# ŸöŠ÷Št# Ÿ÷ŠL‹w Ÿ§ŠīŠw Ÿ‹L‹w Ÿ§ŠۊVۊīŠu ‹‹V‹.‹u 3‹L‹u §ŠæŠS‹L‹S̊ۊVۊéŠu ‹‹V‹.‹u 3‹L‹u ̊æŠS‹L‹S‹3‹sŸ‹%‹ugŸ%‹)‹R)‹3‹ugŸ‹)‹P;‹E‹ugŸE‹I‹RI‹L‹ugŸ;‹I‹P_‹›‹V›‹ļ‹u ‹tˇ‹Ō‹VŌ‹ë‹u đ‹ Œu \‹ĩ‹Wĩ‹ļ‹u‹tˇ‹ ŒWg‹¯‹WЋ ŒWg‹›‹V›‹¯‹u ЋŌ‹VŌ‹ë‹u đ‹ Œu g‹Ļ‹SЋ ŒSk‹›‹V›‹Š‹u ЋŌ‹VŌ‹ë‹u đ‹ Œu k‹Ļ‹SЋ ŒSŌ‹đ‹sŸØ‹â‹ugŸâ‹æ‹Ræ‹đ‹ugŸØ‹æ‹Pø‹ŒugŸŒŒRŒ ŒugŸø‹ŒP"Œ^ŒV^ŒyŒu yŒzŒtzŒ’ŒV’Œ̌u °ŒɌu "ŒxŒWzŒɌW*ŒrŒWŒɌW*Œ^ŒV^ŒrŒu Œ’ŒV’Œ̌u °ŒɌu *ŒiŒSŒɌS.Œ^ŒV^ŒlŒu Œ’ŒV’Œ̌u °ŒɌu .ŒiŒSŒɌS’Œ°ŒsŸ˜ŒĸŒugŸĸŒόRό°ŒugŸ˜ŒόP¸ŒŒugŸÂŒƌRƌɌugŸ¸ŒƌP ‘ QVTXVuJSTSCVCJvxŸTXVFSFJsxŸTS$@VTXV$@STSXnS]gugŸgkRknugŸ]kPwSwuw…u…‰tŽ–u…u…‰tNu ¤uĻŧu"wxŸ"+P+>wxŸ ¤wxŸĻŧwxŸ>W ¤WĻŧW"wxŸ"+P+>wxŸ ¤wxŸĻŧwxŸ>W ¤WĻŧWĻŧWĢĩu`ŸĩšRšŧu`ŸĢšPMQVQRtRVtV{v|Ÿjnv|Ÿ‚—v|ŸMVPVãu`Ÿë˙u`Ÿf—u`Ÿ‚—u`Ÿˆ’u_Ÿ’–R–—u_Ÿˆ–Pf~rxŸ~ˆVˆĨSflrpŸloPo{rpŸ{~Vf~u fã0Ÿë˙0Ÿfj0Ÿn‚0ŸflrpŸloPo{rpŸ{~V~ˆvpŸˆĨspŸrxPx~p Ÿ‚ˆvpŸˆĨspŸ‚ˆVˆĨSˆĨVˆĨS‘Ĩs|Ÿ‘ĨsŸĨ¨u`Ÿ¨ŗPŗãu`Ÿë˙u`ŸĨŦu ¯ŗtšŊPŊÁtÁÅtÅãudŸë˙udŸšēu #ŸŊĀpŸĀÅPĖãu`Ÿë˙u`ŸĖãudŸë˙udŸĪãu_Ÿë˙u_ŸĪÖPëōPÖãu`Ÿõ˙u`ŸÜãu_Ÿõ˙u_ŸÜãPõüP3w8Ÿ q8ŸMfq8Ÿ3ëuP <uP¤ĻuPŧÎuP3]uP]›0ŸĄąVˇëW <W¤ĻVŧęVęuP-@uP@N0Ÿ[a0ŸkÎ0Ÿ˙fōŠc ¤ĻōŠc ŧÎōŠc ˙f1Ÿ¤Ļ1ŸŧÎ1Ÿ˙Cuë u<fu1Ÿ,Rî R<fRfōŽ4 ¤ĻōŽ4 ŧÎōŽ4 ëō/ ō<ō/ Dfō/ ¤Ļō/ ŧÎō/ Cu uMfu$3u$30Ÿ$3uL3Cu3OVO]v|Ÿęîv|ŸîđVđv|Ÿ-@V38uPw"Ÿ8HPH_W_žuT¤ĻuTŧęuTęW-@W[auTkąuT?OVO]v|Ÿęîv|ŸîđVđv|Ÿ-@V?HPH]WęW-@WđuTøu`ŸRu`ŸøP_ëuP <uP¤ĻuPŧęuP[auPkÎuP_gu _gW_ë1Ÿ <1Ÿ¤Ļ1Ÿŧę1Ÿ[a1ŸkÎ1Ÿ_¯W¤ĻWŧęW[aWk›W_guPgĄVĄąvxŸ¤ĻvxŸŧęvxŸ[aVkÎVg“W“›wxŸ[aWk›Wg–V–›vxŸ[aVkÎVtW[aWk›WtV[aVkÎVkVpzu`Ÿz~R~u`Ÿp~PŠ›uP›ĸSĸĻtϧsxŸ§¸S›ĸSĸĻtĻąsxŸĄąV¤ĻVŧęVĄĸu ¨ŦtĄë1Ÿ <1Ÿ¤Ļ1Ÿŧę1ŸˇĀPĀëuT uTˇĀVˇëV <VĀĪVĪÔvxŸÔëV VvxŸĀĪvŸĪÔv|ŸÔëvŸ vŸv|ŸĀÔu`ŸÚäu`ŸäčRčëu`Ÿ u`ŸÚčPĀĪVĪÔvxŸ VvxŸÅÔu`Ÿ u`ŸÅĖP P"P"PĖÕuPÕÜSÜātāásxŸáęSÕÜSÜātāęsxŸNWuP(uP@NuT]ŽS“aސS“u“(‰S“ Ž1ŽVMŽ^ŽVŽæŽV˙Ž V|”V(*V]ŽSaސSu(‰SP+VaŽ|ŽP|ŽŽV(V}ŽŽŸ(Ÿ”ŽŽæŸ9=V=>t>BtB`ŽuLŸ`ŽaŽtHŸÂŽęuLŸûuLŸ,‰uLŸ9=uPŸ=RVRStSZtZ`ŽuPŸ`ŽaŽtLŸÂŽęuPŸûuPŸ,.V.‰uPŸH]Žs,ŸÂŽՏs,Ÿûs,Ÿ0‰s,ŸHMŽs0ŸÂŽՏs0Ÿûs0Ÿ0‰s0ŸK]Žs,ŸÂŽՏs,Ÿûs,Ÿ0‰s,ŸVZtZ`ŽuPŸ`ŽaŽtLŸÂŽՏuPŸûuPŸ0‰uPŸVŽu@“ lu@“”Տu@“0tu@“VZP“Z`Žuŧ“`ŽaŽt¸“ŽՏuŧ“ûuŧ“0‰uŧ“VkVk`ŽuXŸ`ŽaŽtTŸÂŽՏuXŸûuXŸ02V24uXŸ46V6‰uXŸ`kVk`ŽuXŸ`ŽaŽtTŸÂŽĀuXŸûuXŸ46V6‰uXŸ`fPfou`ŸouPu`Žu`Ÿ`ŽaŽt\ŸÂŽĀu`Ÿûu`Ÿ4‰u`Ÿlou`ŸouPu`Žu`Ÿ`ŽaŽt\ŸÂŽĢu`Ÿûu`Ÿ;‰u`Ÿl´V´`Žu\Ÿ`ŽaŽtXŸÂŽ u\Ÿ V”u\Ÿ”–V–Ģu\Ÿûu\Ÿ;=V=[u\Ÿ[]V]‰u\Ÿ|`Žu`Ÿ`ŽaŽt\ŸÂŽ”u`Ÿûu`Ÿ;‰u`Ÿ|ąu`ŸąudŸÂĶu\ŸĶäuXŸä`ŽuPŸ`ŽaŽtLŸÂŽ uPŸ u`Ÿ-udŸ-<u\Ÿ<LuXŸL”uPŸûuPŸ;=u`Ÿ=[u\Ÿ[]u`Ÿ]tudŸt‰uPŸ‚_ŽW_Ž`ŽudŸ`ŽaŽt`ŸÂŽ”WûW;‰W‚P P–Ģu`ŸœĻudŸĻĒRĒĢudŸœĒP`Žu\Ÿ`ŽaŽtXŸÂŽ u\Ÿ”u\Ÿûu\Ÿ;‰u\Ÿ`ŽudŸ`ŽaŽt`ŸÂŽ udŸ”udŸûudŸ;‰udŸą`ŽudŸ`ŽaŽt`ŸÂŽ udŸ”udŸûudŸt‰udŸąudŸÂ`Žu\Ÿ`ŽaŽtXŸÂŽ u\Ÿ-udŸ-”u\Ÿûu\Ÿt‰u\ŸąudŸÂĶu\ŸĶäuXŸä`ŽuPŸ`ŽaŽtLŸÂŽ uPŸ-udŸ-<u\Ÿ<LuXŸL”uPŸûuPŸt‰uPŸˇ`Žu`Ÿ`ŽaŽt\ŸÂŽ u`Ÿ”u`Ÿûu`Ÿt‰u`ŸˇP'P]tudŸcmu`ŸmqRqtu`ŸcqP`Žu\Ÿ`ŽaŽtXŸÂŽ u\Ÿ-”u\Ÿûu\Ÿt‰u\ŸÂĶu\ŸĶäuXŸä`ŽuPŸ`ŽaŽtLŸÂŽ uPŸ-<u\Ÿ<LuXŸL”uPŸûuPŸt‰uPŸČ`ŽudŸ`ŽaŽt`ŸÂŽ udŸ-”udŸûudŸt‰udŸČĶP-6PĶ`ŽuXŸ`ŽaŽtTŸÂŽ uXŸ<”uXŸûuXŸt‰uXŸĶäuXŸä`ŽuPŸ`ŽaŽtLŸÂŽ uPŸ<LuXŸL”uPŸûuPŸt‰uPŸŲ`ŽudŸ`ŽaŽt`ŸÂŽ udŸ<”udŸûudŸt‰udŸŲäP<FPĢĀuXŸąģuTŸģŋRŋĀuTŸąŋP=[u\ŸCQu`ŸQURU[u`ŸCUPä`ŽuPŸ`ŽaŽtLŸÂŽ uPŸL”uPŸûuPŸt‰uPŸę`ŽudŸ`ŽaŽt`ŸÂŽ udŸL”udŸûudŸt‰udŸęõPLVPõ`ŽuLŸ`ŽaŽtHŸÂŽ uLŸ\”uLŸûuLŸt‰uLŸû`ŽudŸ`ŽaŽt`ŸÂŽ udŸ\”udŸûudŸt‰udŸûŽP\fPŽ]Žs,ŸÂŽ s,Ÿl”s,Ÿûs,Ÿt‰s,ŸŽMŽs0ŸÂŽ s0Ÿl”s0Ÿûs0Ÿt‰s0Ÿ2Ž8ŽP8ŽMŽuTŸl|uTŸt‰uTŸ?ŽMŽuTŸl|uTŸBŽMŽudŸl|udŸBŽMŽPlvPMŽaŽōÃ> Žێuێ܎t܎āŽt|…uŽ s,Ÿ|”s,Ÿû s,ŸŅŽ s,Ÿû s,ŸŅŽێuێ܎t܎āŽtŅŽæŽVՎێuێ܎t܎āŽtՎæŽVũ u@ udŸ PĀՏuPŸÆЏuTŸĐԏRԏՏuTŸÆԏPՏęuLŸÛåuTŸåéRéęuTŸÛéPęûōÃ> ːėS‘,‘SJ‘O‘S“¯utŸ¯ːVːîutŸîī‘lŸī.‘utŸ.‘/‘tpŸ/‘o‘utŸĸ¯ut¯žvī ‘ut/‘@‘utŦːģ ŸŦ¯utŸ¯ːVېîutŸîī‘lŸ‘.‘utŸ.‘/‘tpŸáîusŸîī‘kŸ‘.‘usŸ.‘/‘toŸáīP‘'‘Pú‘ą ŸúũutŸũ‘V/‘O‘Ļ Ÿ/‘3‘utŸ3‘O‘VW‘a‘usŸa‘e‘Re‘o‘usŸW‘e‘Ps‘ÑuÑđt đî‘uî‘ī‘t ī‘"’us‘Ñu Ñđtđî‘u î‘ī‘tī‘"’u s‘x‘upŸx‘Á‘SÁ‘ÑupŸÃ‘đtlŸÄ‘ė‘Sė‘î‘upŸî‘ī‘tlŸī‘ņ‘Sņ‘’upŸ’"’Sņ‘’upŸ÷‘’uoŸ’’R’’uoŸ÷‘’PĻ‘Á‘SÁ‘ÑupŸÃ‘đtlŸÄ‘ė‘Sė‘î‘upŸî‘ī‘tlŸĻ‘ÑutŸÃ‘đtpŸÄ‘î‘utŸî‘ī‘tpŸŠ‘ÑuoŸÃ‘đtkŸÄ‘î‘uoŸî‘ī‘tkŸŠ‘ŗ‘Pŗ‘Ŋ‘ut<ŸÄ‘Ī‘P°‘Ŋ‘SБŨ‘upŸļ‘Ŋ‘uoŸÖ‘Ũ‘uoŸļ‘đP֑į‘P`’ڒulŸÚ’ے‘dŸÛ’Q“ulŸv’ڒulŸÚ’ے‘dŸÛ’“ulŸ“Q“ulŸ”’Ų’SŲ’ڒutŸÚ’ے‘lŸÛ’“S“!“S!“6“utŸ”’ڒuڒے‘Û’“u“6“uŦ’Ų’SŲ’ڒutŸÚ’ے‘lŸÛ’“S¯’ڒukŸÚ’ے‘cŸÛ’“ukŸ¯’š’Pš’Òs<ŸÛ’į’Pļ’ÒupŸč’õ’upŸŧ’ÒSî’õ’utŸŧ’ÒPî’ū’PÒڒulŸÚ’ے‘dŸÃ’ے0Ÿ““ulŸ““0Ÿ!“6“utŸ'“1“ukŸ1“5“R5“6“ukŸ'“5“P6“M“upŸ<“F“ukŸF“J“RJ“M“ukŸ<“J“PŊĐ\oŗOŸOĒŸ\oÄQ“ !-GbkYtã~VCåKKyWulĪnrL—š"ŦˇŨā¯ÛÛ 1ŋŸĒ\TÅ=ûëR ¯=ķmckūKhfh\\hhhhĻht_ØķœŅEÁx ]~œÚFķĐĨFņƒ‡ƒ‡~čhĢÎĒlsz€psz€;>AFdl‹Ž‘–´ŧÛŪáæ +.16T\{~†¤ŦËÎŅÖŒ”´ˇēŋkŋÉÍksŦ¯ļģÛ3@Pafiw€†ˆ‹€†ˆ‹€†ˆ‹  ) )09 09 09 ['8;@-8;@ ['8;@-8;@/27$/27¨Ē°q|„ ¨ĒĀq|„ĸ Ā(0q|„ĸ číņ   ĸčíņüĸčíņô   &035@&035@@XÂÕ@IÂÕXadgadgq|„adgjjq|„    + Č     < Č H P S t } Č Ũ ę ė í đ ų    4;AP8;APA e h k ž Ģ Ā Í ¤ Ģ Ā Í Ø Ū á   R  C34@  #VY\_b)1=qVY\_blŧõû îõû )1)1':=@:=@JX`:=@CCJX`z€‰Å”ŖēŜŖēÅÄÉĖĪÕâÄÆÕâÆÉĖĪ%2%2`zÄĮĖ`m—ą`f—fmąmząÄĮĖmsąˇszˇÄĮĖ!dgl 7Q7= =Q Qdgl QWWdglsvyĶˆ”›ÄĮĖˆ”ąÄĮĖˆąļ”ļÄĮĖōôû9<Aû"RT\Œpsv|ĸ¤ŦÜōôü.BDL~›žĀÂÛūXfhNZØĄŖĻ˛ĩļĐÜßāú 6AHK 8,8;<Uade~ŠŽ¸ÃĮĘĪÜ8HÕÜ8HÜéHXâéHXéöXhīöXhöhxühxxˆ xˆˆ”ˆ”bdlŒ’”œŧ  U[_†ĐĐpsu€‡Žëđw:n|×ā:GLQåįGLQdāåįøGLāã)C)1CHwzƒˆ`w“€ `n“°ĀÃÅĘØŨāã  į 8 € Ĩ Ņ ā ū !#!ā ų û ū !#!į ö !#!É!s"€"˛"â!å!č!s"€"’"â!å!č!ę!í!ī!ø!""#"ø!û!""""""""j"o"""e"j"#"e"€"’"["e"€"’"####Ē#ˇ#ģ#Ā#ë%ú%&&;&H&X&b&f&k&X&b&f&k&8A8A"AYAG"GY"/Yy"(Y_(/_y0909!9Q9>!>Qd'˜''Į'd'n's'u'w'•''Į'ō'ô'(Q)X)t)ō'ô'(H)`)t)((2):)=)@) (2)`)t)$(((+(2)`)t)+(8(§(Š(Ŧ(ą(H(§(ĩ(2)`)t)z(Š(`)p)ô()p)t)* * **R+û+,0,3,5,@,Ô,z+—+š+›+ĩ,Ô,‰+—+š+›+—+š+›+ĩ+¸+ģ+k,€,ĸ+ĩ+¸+ģ+ĩ+¸+ģ+Å+@,P,ĩ+¸+ģ+ž+ž+Å+@,P,Å+Ō+P,`,Ë+Ō+P,`,Ō+Õ+Ú+Ũ+â+å+ņ+û+`,k,ô+û+`,k,ã,- -"-°/ļ/¸/ģ/Ø/ė/000 00Ž0ą0É00“0–0§00“0–0Ÿ0Ņ0Ø0Ü0â0ã0é0ī0ų0ü0U1h1s11Ā111B1H1K1§1Ā1B1H1K1U1h1s1B1H1K1N1N1U1h1s1Î12 2-2@2Š2ô122 2r2Š222 22@2W222 2 2 22@2W2–2œ2ĸ2ö233-3f3–2œ2ĸ2Ž2Å2Ė2Ī2Ō2Å2Ė2Ī2Ō2Ė2Ī2Ō2Ü233Ė2Ī2Ō2Ü233Ė2Ī2Ō2Õ2Õ2Ü233æ2é2ė2ö233æ2é2ė2ö233æ2é2ė2ī2ī2ö233x3{3~3č3ø34(4…4x3{3~3‹3x3{3~3€3Ŧ3ļ3š3ŧ3ļ3š3ŧ3Æ3(444ļ3š3ŧ3ŋ3ŋ3Æ3(444Æ3Ø3Û3Ū3T4n4Ø3Û3Ū3č344Ø3Û3Ū3á3á3č344Ũ4î4ņ4ô4*5B5î4ņ4ô4 5î4ņ4ô4÷4V5X5^5n5€5:6Ģ5Ž5ą5ģ5ø56Ģ5Ž5ą5ģ5ø56Ģ5Ž5ą5´5´5ģ5ø56F6L6R6ī67#707Č7^6€6ƒ6†6O7d7k6€6ƒ6†6€6ƒ6†6”6@7O7€6ƒ6†6‰6‰6”6@7O7§6Ē6­6¯6Ã6Ō6Õ6Ø6˛7Č7Ō6Õ6Ø6â607@7Ō6Õ6Ø6Û6Û6â607@7â6ī6 777#7â6č6 7777č6ī67#77 777¤8Ö8đ891969Š8Ā8đ891969˛8ļ81969ļ8Ā8đ89d9f9m9Î9ī9w:ˆ:ą:ņ9A:C:F:’:ą:;:A:C:F:J:e:ˆ:’:U:e:ˆ:’:U:X:[:^:X:[:^:e:ˆ:’:/;?;B;G;4;?;B;G;Ÿ;<<4<ũ;<< <~<<H=p=J=M=R=p=ļ<š<ģ<Č<ë< = =ŋ=ĸ=Ĩ=Ē=ŋ= =6===H=p= =ŋ=Ä==(=p= =ŋ=Ä===ŋ=Ä==(=p= =2=6===H=>>>> 8C 8CS>V>X>x?~??›?Ģ?ģ?ė?S>V>X>`>f>m>s>‹>Ž>ļ>`>f>m>s>‹>Ž>ļ>?? ?Ü?ė?`>f>m>s>‹>Ž>ļ>Ķ>Ö>Ü>á>ö>?? ? ?!?o??? ? ?!?Z?x?{??ƒ?{?~?ƒ?‘?{?~?†?‘?ų?ü?@GAXAßAų?ü?@@XAhAų?ü?@@$@.@1@:@:@\@_@b@hAˆAB@O@R@S@V@\@_@b@hAˆA\@_@b@x@b@l@o@x@x@š@@ @ˆA¨A€@@@‘@”@š@@ @ˆA¨AĨ@ŧ@ŋ@Ā@¨@˛@ĩ@ŧ@ŋ@Ā@ŧ@ŋ@Ā@Ė@Ī@Ō@Ė@Ī@Ō@å@Ō@Ų@Ü@å@č@ō@õ@ū@ū@#A¨AÁAAAAAA A A#A¨AÁA#A1A4A7A1A4A7AGA1A4A7AGA1A4A7AGA ÛTgjmœĨ¨ĢĨ¨ĢŋĨ¨ĢŋĨ¨ĢŋæAéAīAB!B&B0B0C3C5C@CE0BCPDD¸DíDFAFGFGFJFFĻFWFZF]FtFWFZF]FtFWFZF]FtFØFÛFāFŋGÉGęGöGDHéFķFöF˙F˙FGÉGâGGGÉGâGG)G,G/G)G,G/G?G)G,G/G?G)G,G/G?GKGNGQGGKGNG‚G…GKGNG‚G…GKGNG‚G…G`GmGpGvGmGpGvG‚G…GˆGvGyG|G‚G…GˆGGœGŸGĸGœGŸGĸG˛GœGŸGĸG˛GœGŸGĸG˛G˛GŋGâGęG¸GŋGâGęGVH^HbH™H¨HąH‹H™H¨HąH’H™H¨HąHÄH÷HI IŅHŨHāHâHäHčHíH÷HI IäHčHíHđHđH÷HI IIIII"IģIĐI`JmJŅJ'I2I7I9INIQITIdIgIjITI[I^IdIgIjIdIgIjIzI}I€IdIgIjInItIzI}I€IˆI‹II IˆI‹II IˆI‹II IĒIģIDJGJJJ`JĒI°IDJGJJJMJ°IģIMJ`JŪIėIīIđIėIīIđIúIJ J J JJ J JJ> Ā&,39QT|&,39QT|ÃÆĖ Ž&,39QT|˜ž˜ž¸ÃÆĖĪã1ÃÆĖĪã>DFORSORSW\behbehr€ˆbehkkr€ˆéJņJK+PdKØLŅNŪN*OXOŋOöOsK}K€KˆKˆK™KœKŸK™KœKŸK¯K˛KĩKŸKĻKŠK¯K˛KĩK¯K˛KĩKÅKČKËKĩKŧKŋKÅKČKËKÅKČKËKÛKŪKáKËKŌKÕKÛKŪKáKÛKŪKáKņKôK÷KáKčKëKņKôK÷KņKôK÷KL L L÷KūKLL L LL L LLLLLLL,L/L2LL#L&L,L/L2L,L/L2LBLELHL2L9LXSX1X7XSXcX–YœYĨY#\&\)\8\6]–YœYĨYüZ[[Ō\6]–YœYĨYĢYąYĩYģYĐYĶYīYĢYąYĩYģYĐYĶYīYWZ]6]ĢYąYĩYģYĐYĶYīYZZ ZZZ ZAZWZ]Z{ZÉZĐZäZėZöZWZ]Z{ZÉZūZ[['[8\\ \š\['[8\\ \š\[#[8\\ \š\8\Q\`\\ \š\;\=\C\E\˛\š\E\Q\`\\ \˛\`\\ \˛\'[*[-[8['[*[-[8['[*[-[8[*[-[O[b[h[i[b[h[i[r[x[{[r[x[{[#\\ \r[x[™[Ę[\ \r[x[Ŗ[ą[\ \r[x[Ŗ[Ļ[Ļ[ą[\ \F]I]S]á]đ]Å_Y]Ŋ]đ]Ĩ_p]ĩ]đ]Ĩ_“]] ]˛]˛]ĩ]§^Đ^˛]ĩ]Ž^ˇ^ē^Đ^ķ]ũ]^^^'^*^8^;^E^H^X^a^k^n^€^Ķ^ā^ã^đ^ķ^___(_+_,_<_?_B_,_3_6_<_?_B_<_?_B_R_U_X_<_?_B_F_L_R_U_X_R_U_X_h_k_n_X___b_h_k_n_h_k_n__h_k_n_q_Ŋ]Ë]Î]Ņ]Ë]Î]Ņ]á]Ë]Î]Ņ]á]Ë]Î]Ņ]á]Ö_Ų_ß_daxaÕaå_@axa‡aĨaÕaå_ë_š` `Ŗ`Ļ`+a4a`š`Ž`#a&a+axa‡aĨaÕa``` `ų` a` `````` `a a`` `3`6`9` `*`-`3`6`9`3`6`9`I`L`O`9`@`C`I`L`O`I`L`O`_`b`e`I`L`O`S`Y`_`b`e`_`b`e`u`x`{`e`l`o`u`x`{`u`x`{`‰`xa‡au`x`{`~`~`‰`xa‡a‰`š` a#a&a+a`š` a#a&a+aÍ`Đ`Ķ`ā`å`æ`ā`ã`æ`ų`æ`í`đ`ų`@aNaQaTaNaQaTadaNaQaTadaNaQaTada-@K @K @K$@K$@KøaŅcācždbbbbb?bācd"b/b2b3b6bdQdƒdžd7c=c>cmc d0dƒdžd7c:c>cBcEcmc d0dƒdžd7c:c>cBcEcJcMcOcJcMcOcYc\c_cYc\c_cmc d0dYc\c_cbcbcmc d0dzc}c€cczc}c€cczc}c€ccœcŸcĸcžc0d>dœcŸcĸcžc0d>dœcŸcĸcžc0d>dĻc˛c0d>dĢc˛c0d>dŽd7eHeÃeąd¸dĀdÂdÄd7eHeĻeĐdŌdÕdådčdëdĐdŌdÕdŲdßdådčdëdådčdëd$eHe“eeeeeeee$eHeXeeeeee$eHeXeÖeŲeãeäeëefĀfāfđfg-gsgđeķeõe)fĀfĐf\gsgøe)fĀfĐf\gsgøef f ff f fffffff)fĀfĐffffff)fĀfĐf)fnfĐfāfđfg-gAgFf^fafdf^fafdfnfĐfāf^fafdfgfgfnfĐfāfÜeāeäeëeŽf‘f”f°fāfđfŽf‘f”f°fāfđfŽf‘f”f°fāfđf˜f¤fāfđff¤fāfđf8Py,8P\18P\-:WJXugˇgČg@iāgägįgígägįgđgķg.hGhJhMhīhi:hGhJhMhGhJhMh[hāhīhGhJhMhPhPh[hāhīh€h…h‰hŒh h¤h¨hŽhąh´hˇhšhŧhŋhšhŧhÅhČhLiPiSi­j°jŗjĀjkjiāi˙jktiˆiiŌiÕiÚi˙jkĸi¨iŠišiŋiÂišiŋiÂiŌiÕiÚišiŋiÂiÅiÅiŌiÕiÚiōiøiûi­jÔjæjōiøijJjÔjæjōiøi#j1jÔjæjōiøi#j&j&j1jÔjæj&k(k/k1k4k–k kúk[kukxk{k[kdkokukxk{kukxk{kˆkĐkÜkukxk{k~k~kˆkĐkÜk k­k°kÁkŖk­k˛kĩkģkÁkll llll llll ll†lšll l†ll”lšll lšll lĒl¸lĀlšll lŖlŖlĒl¸lĀlmmm mmmmmm mmm m*m8m@mmm m#m#m*m8m@m‘m™mœmŸm™mœmŸm¯m™mœmŸm¯m™mœmŸm¯mwozo{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ĩo1qZq_qhqkqmqoqtqFqZq_qhqđqôqøqúqđqôqøqúqđqôqøqúq ruxˆl cfil "(=@\"(=@\ÄRl"(=@\‡Œ‡ŒŽÄĘč6>\ÄĘč6kĩˆ¨ĀûŠ–™ĄĄĩĀāĒĩĀāĩĮÍĐĮÍĐr¨ĀĮÍî¨ĀĮÍø¨ĀĮÍøûû¨ĀY\c(.5JJY\cY\cr|rr‚rŒr¨r´r|rr‚r…r…rŒr¨r´r\s_sbslsˆs”s\s_sbseseslsˆs”sņstt tt;t>tkt8t;t>tKt tĮtËtĐtĶtØtŲtŪtŗtĮtËtĐtPuTuXuZuPuTuXuZuPuTuXuZu y|Ī cfiq "(=@\"(=@\ÄWq"(=@\†‹†‹ŽÄĘč6=QT^ÄĘč6kŧ°Āq‚™ĪŠ–™ĄĄŧ¤°ĀĄĒ°ļǰļŧ¤°Ā¤°ĀĀÕøq‚™Īz‚™Ī™žĄŦÄĪŧÎÔ×ÎÔ×y°ĀÎÔõ&°ĀÎÔ˙ °ĀÎÔ˙ °Ā&`cj/5<QQ`cj`cjyÜußuâuėuvvÜußuâuåuåuėuvv_vHwXwĪwwvzv}vHwXw€wŸwĪwšvÕvhw€wĘvÕvhw€wwww&wXwhwwwwww&wXwhw&w6w9w>w,w6w9w>w(147147G147G147Gx,x/x2xžxÔxx,x/x2x,x/x2x“w“ū’“““““!“+“ u~(}†— 0š œ¨"# G[^a[^att„‡„‡‘Ҕ͔á”į”đ”<–H–öš • ••&••••&•&•H•K•N•`˜€˜.•;•>•?•B•H•K•N•`˜€˜K•N•c˜m˜p˜€˜H•K•N•a•d•g•N•X•[•a•d•g•“•¨•Ģ•Ŧ•¨•Ģ•Ŧ•ē•Ŋ•Ā•ē•Ŋ•Ā•Đ•Ķ•Ö•ē•Ŋ•Ā•Ä•Ę•Đ•Ķ•Ö•Đ•Ķ•Ö•ä•Đ•Ķ•Ö•Ų•^–—0˜`˜āšöša–k–0˜H˜y––’–”––’–”–ĸ–Ĩ–¨–¯–˛–´–Æ–Æ–Ö–Ų–Ü–Ö–Ų–Ü–ë–î–ņ–Ö–Ų–Ü–ā–å–ë–î–ņ–ë–î–ņ–—ë–î–ņ–ô–——¸™Î™——ž™Î™›˜)™Î™ę™hššĶ˜Õ˜Î™Ô™×™ę™™™™™™™™)™™™™)™™™™)™)™=™@™B™=™@™B™P™S™V™P™S™V™f™i™l™P™S™V™Z™`™f™i™l™f™i™l™|™™‚™l™s™v™|™™‚™|™™‚™’™•™˜™‚™‰™Œ™’™•™˜™’™•™˜™¨™Ģ™Ž™’™•™˜™œ™ĸ™¨™Ģ™Ž™¨™Ģ™Ž™¸™ę™ö™¨™Ģ™Ž™ą™ą™¸™ę™ö™—/—2—4—/—2—4—B—E—H—B—E—H—X—[—^—B—E—H—L—R—X—[—^—X—[—^—p—X—[—^—a—Ņ—â—å—č—â—å—č—ø—û—ū—â—å—č—ė—ō—ø—û—ū—ø—û—ū—˜ø—û—ū—˜õ•–––õ•–––––––€˜˜––– – ––€˜˜)–:–˜ ˜/–:–˜ ˜,9PX29PX9FXp9?X^?F^p F`ˇ,9`h29`h9Fh„9?hn?Fn„ kxĄĒŨ$kx˜ĒŨ$_x˜ĒŨERˆ˜KRˆ˜R_xˆX_xˆ k€ā k€ā$k€ ­ā$_€ ­āER KR R_€X_€ <ŠĄ<Įā0XdĄ¯HKNQx‰Œ‰Œĸĸ¯˛ĩ¯˛ĩŋĘ×@HĐ×@H @CD,@CD@CDMPSMPS]x€MPSVV]x€]j€—]c€†cj†— @CD,@CD@CDMPSMPS]x€MPSVV]x€]j€—]c€†cj†—ˆž5ž°DORUORU_°¸ORUXX_°¸_l¸×_e¸želž× AP7i1]y|1ly|¨ļšŧļšŧĘPXļšŧŋŋĘPXĘÛXwĘĐX^ĐÛ^wÛėw—Ûáw}áė}—ėũ—ˇėō—ōũˇũˇ×ũˇŊŊ××÷×ŨŨ÷0÷%÷ũ%0ũ0A7066A7&47:47:D`h47:==D`hDQhDJhnJQn ›!›p›Ũ› ››p›Ũ›#0…ŽŸ $@Ē $@Ē œœœ3œHœ¤œˇœČœœ,œHœ¤œˇœČœœ(œHœ¤œˇœČœÜœ ÕŨžÜœ÷œ €ŨđÜœīœ €Ũđúœ€Õđžúœũœ€ÕđžžSž`žŸŸŸ ŸFŸž4ž7ž:ž`žĀž Ÿ3Ÿž/ž`žĀž Ÿ3Ÿ4ž7ž=žBžEžSžĀžŸŸŸ3ŸFŸ4ž7žAžBžEžSžĀžŸŸŸ3ŸFŸ\Ÿ™Ÿ¨ŸZ ] ` h Ž \ŸzŸ¨Ÿ h { \ŸoŸ¨Ÿ h { zŸ™Ÿ Z ] ` { Ž zŸƒŸ‡Ÿ™Ÿ Z ] ` { Ž œ Ų č šĄĄ Ą¨ĄÎĄœ ē č HĄ¨ĄģĄœ ¯ č HĄ¨ĄģĄē Ų HĄšĄĄ ĄģĄÎĄē Ã Į Ų HĄšĄĄ ĄģĄÎĄßĄĸ0ĸŖßĄöĄųĄüĄ0ĸĸīĸŖßĄņĄ0ĸĸīĸŖöĄųĄ˙ĄĸĸīĸŖŖöĄųĄĸĸĸīĸŖŖ@ŖLŖSŖ{Ŗ~ŖƒŖ@ŖLŖhŖ{Ŗ~ŖƒŖ@ŖEŖhŖmŖEŖLŖmŖ{Ŗ~ŖƒŖ°ŖĘŖŅŖ¤¤¤°ŖŊŖæŖ¤°ŖļŖæŖėŖļŖŊŖėŖ¤ŊŖĘŖ¤¤¤¤ŊŖÃŖ¤¤ÃŖĘŖ¤¤¤¤3¤E¤P¤Ĩ¤­¤Ā¤đp€ĀŪ!đp€ĀŪ&QŪõQÜ`ŸĢõ]`cfžĄ¤žĄ¤ˇˇÄĮĘÄĮĘÔßđ€Ÿåđ€ŸđũpxöũpxȤ֤ͤđ¤ĐĨāĨđ¤ũ¤ĨĨĨĨĨ/Ĩ2Ĩ5ĨĨĨĨ#Ĩ)Ĩ/Ĩ2Ĩ5Ĩ/Ĩ2Ĩ5ĨEĨ5Ĩ<Ĩ?ĨEĨEĨ^ĨaĨdĨEĨQĨTĨUĨXĨ^ĨaĨdĨ^ĨaĨdĨ“ĨāĨĻhĨ{Ĩ~ĨĨ„ĨĨhĨrĨsĨzĨĨ“ĨāĨĻ“ĨŸĨĸĨĨĨŸĨĸĨĨĨĩĨŸĨĸĨĨĨĩĨŸĨĸĨĨĨĩĨĩĨÂĨĻĻģĨÂĨĻĻ‚Ļ…ĻˆĻ’Ļ°Ļ¸Ļ‚Ļ…ĻˆĻ‹Ļ‹Ļ’Ļ°Ļ¸Ļ’ĻŸĻ¸ĻĪĻ’Ļ˜Ļ¸ĻžĻ˜ĻŸĻžĻĪĻ8§x§€§Ē§8§g§€§Ē§W§Z§]§g§€§Œ§W§Z§]§`§`§g§€§Œ§ĩ§¸§ž§YŠ`Š ĒĮ§Ņ§Ô§Ũ§Ũ§˙§¨¨`Š€Šå§ō§õ§ö§ų§˙§¨¨`Š€Š˙§¨¨¨¨¨¨¨¨¨¨¨¨¨¨.¨1¨4¨¨%¨(¨.¨1¨4¨.¨1¨4¨G¨4¨;¨>¨G¨G¨i¨l¨o¨€Š ŠO¨\¨_¨`¨c¨i¨l¨o¨€Š Ši¨l¨o¨‚¨…¨ˆ¨o¨y¨|¨‚¨…¨ˆ¨‚¨…¨ˆ¨˜¨›¨ž¨ˆ¨¨’¨˜¨›¨ž¨˜¨›¨ž¨Ž¨ą¨´¨ž¨Ĩ¨¨¨Ž¨ą¨´¨Ž¨ą¨´¨Ä¨Į¨Ę¨´¨ģ¨ž¨Ä¨Į¨Ę¨Ä¨Į¨Ę¨Ú¨Ũ¨ā¨Ę¨Ņ¨Ô¨Ú¨Ũ¨ā¨Ú¨Ũ¨ā¨ņ¨ô¨õ¨ā¨į¨ę¨ņ¨ô¨õ¨ņ¨ô¨õ¨˙¨ŠŠ)Š,Š/Š9аŠŋŠ)Š,Š/Š2Š2Š9аŠŋŠ9ŠFРаŠ?ŠFРаŠĒĒĒ!Ē*ǟǰĒŅĒāĒMĢuĒxĒ{Ē…ĒāĒđĒuĒxĒ{Ē~Ē~Ē…ĒāĒđĒ…Ē’ĒđĒûNjǒĒđĒûĒ’ĒŸĒēĒŊĒĀĒŅĒ’Ē˜ĒēĒŊĒĀĒÃǘǟĒÃĒŅĒVĢYĢ\Ģ_Ģe̠̔ĢđĢūĢ7ŦVĢYĢ\Ģ_ĢeĢṁ̔ĢčĢđĢĢ”ĢčĢđĢČĢËĢÎĢčĢČĢËĢÎĢŅĢ1NQT`|‚E\o|‚ЧĒĢ™§Ȩ̄ĒĢ´ˇē´ˇēÄ ´ˇēŊŊÄ ÄŅ 7ÄĘ &ĘŅ&7ŅŪ7OŅ×7=×Ū=OŪëOgŪäOUäëUgëügëņgmņümü —ü… …—.KNQ]y|=Tly|‡¤§¨–¤§¨¤§¨ą´ˇą´ˇÁą´ˇēēÁÁÎ/ÁĮĮÎ/ÎÛ/GÎÔ/5ÔÛ5GÛčG_ÛáGMáčM_čõ_wčî_eîõewõwõûw}û}1B0JBX[^JXj†‰Œy†‰Œ”ą´ĩŖą´ĩą´ĩžÁÄžÁÄŌX`žÁÄĮĮŌX`Ōã`ŌØ`fØãfãô—ãé…éô…—ô—ˇôú—úˇˇ× ˇŊ Ŋ×'×÷×Ũ'Ũ÷ J¨¸ö  J¨¸ö  ,/0,/0:=@:=@J¨¸:=@CCJ¨¸J†¸ö'=cvy|vy|†¸Čvy|†¸Č9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°Ā,/2 &,/2,/2kßH[^a[^ak [^addk 9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°Ā%(+%(+d€ĪATWZTWZd€TWZ]]d€9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°ĀAŦKŦPŦVŦYŦ]Ŧ`Ŧģ­Č­hŽuŽ‚¯vŦ{Ŧ~Ŧ‡ŦŦ¤Ŧ§ŦĒŦ¤Ŧ§ŦĒŦģŦžŦŋŦ¤Ŧ§ŦĒŦŽŦ´ŦģŦžŦŋŦģŦžŦŋŦÍŦĐŦŌŦÍŦĐŦŌŦáŦäŦåŦáŦäŦåŦņŦņŦ­­ ­­­ ­a­­­I­N­T­]­$­'­*­;­>­?­*­1­4­;­>­?­;­>­?­I­Q­T­ˆ­‹­Œ­”­ˆ­‹­Œ­”­Ē­ģ­`Žhް­ģ­`ŽhŽå­é­î­õ­{ŽŽ„Ž‹ŽšŽŽŸŽÜޝ0¯§ŽĒŽ­Žŋޭ޴ގŽŋŽÆŽÉŽĖŽÜŽÆŽÉŽĖŽÜŽÆŽÉŽĖŽÜŽ:=@˜° -014:=@˜°=@›Ĩ¨°:=@y°˙Viloiloy°Āilorry°Ā›¯ž¯¤¯cąpą‡ą˜ąæą¨¯Đ¯pąuą¸¯Å¯Č¯Ë¯H°K°N°°ŅąæąV°Y°\°n°\°c°f°n°w°z°}°°w°z°}°°w°z°}°°Š°Ŧ°¯°î°ēąŅąˇ°ē°Ŋ°Ī°Ŋ°Ä°Į°Ī°Ø°Û°Ū°î°Ø°Û°Ū°î°Ø°Û°Ū°î°AąDąGącą˜ąŖąAąDąGącą˜ąŖąAąDąGącą˜ąŖąKąWą˜ąŖąPąWą˜ąŖąc˛´ ´*´8´†´c˛y˛{˛~˛ö˛ų˛ü˛;ŗm´†´ŗŗ ŗŗ ŗŗŗŗ%ŗ(ŗ+ŗ;ŗ%ŗ(ŗ+ŗ;ŗ%ŗ(ŗ+ŗ;ŗWŗZŗ]ŗœŗC´V´eŗhŗkŗ}ŗkŗrŗuŗ}ŗ†ŗ‰ŗŒŗœŗ†ŗ‰ŗŒŗœŗ†ŗ‰ŗŒŗœŗīŗōŗõŗ´8´C´īŗōŗõŗ´8´C´īŗōŗõŗ´8´C´ųŗ´8´C´ūŗ´8´C´ũ´ĩĩŪļđļúļˇmˇũ´ĩĩĩũ´ĩĩĩũ´ĩĩĩũ´ĩĩĩũ´ĩĩĩ‹ĩŽĩĩĘĩAˇXˇ˜ĩ›ĩžĩĒĩ˜ĩ›ĩ ĩĸĩ˜ĩ›ĩ ĩĸĩ˜ĩ›ĩ ĩĸĩ´ĩˇĩēĩĘĩ´ĩˇĩēĩĘĩ´ĩˇĩēĩĘĩņĩôĩöĩ3ļ*ˇAˇūĩļļļļ ļļļļ ļ#ļ3ļļ ļ#ļ3ļļ ļ#ļ3ļfļiļkļĨļXˇmˇsļvļyļ…ļsļvļ{ļ}ļsļvļ{ļ}ļsļvļ{ļ}ļļ’ļ•ļĨļļ’ļ•ļĨļļ’ļ•ļĨļŧļŋļÂļŪŧļŋļÂļŪŧļŋļÂļŪÆļŌËļŌŨˇāˇæˇ˙šē'ē8ē´ēęˇ ¸ē珎¸Ÿē´ēĄ¸¤¸§¸ˇ¸Ą¸¤¸§¸ˇ¸Ą¸¤¸§¸ˇ¸ˇ¸ø¸ˆēŸēÃ¸Æ¸É¸Û¸É¸Đ¸Ķ¸Û¸â¸å¸č¸ø¸â¸å¸č¸ø¸â¸å¸č¸ø¸šššTšqēˆēš"š%š7š%š,š/š7š>šAšDšTš>šAšDšTš>šAšDšTšŒšÆšZēqē°šŗšļšÆš°šŗšļšÆš°šŗšļšÆšŨšāšãš˙š8ēCēŨšāšãš˙š8ēCēŨšāšãš˙š8ēCēįšķš8ēCēėšķš8ēCē9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°Ā9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°Ā@ģYģhģõžŋRĀhģnģyģˇģ*ŋAŋģ‚ģ…ģ—ģ…ģŒģģ—ģĄģ¤ģ§ģˇģĄģ¤ģ§ģˇģĄģ¤ģ§ģˇģÄģĮģÉģŧAŋXŋŅģÔģ×ģéģ×ģŪģáģéģđģķģöģŧđģķģöģŧđģķģöģŧ ŧ#ŧ%ŧaŧXŋoŋ-ŧ0ŧ3ŧDŧ3ŧ9ŧ<ŧDŧKŧNŧQŧaŧKŧNŧQŧaŧKŧNŧQŧaŧaŧĸŧoŋ†ŋmŧpŧsŧ…ŧsŧzŧ}ŧ…ŧŒŧŧ’ŧĸŧŒŧŧ’ŧĸŧŒŧŧ’ŧĸŧ¯ŧ˛ŧ´ŧņŧ†ŋ ŋŧŧŋŧÂŧÔŧÂŧÉŧĖŧÔŧÛŧŪŧáŧņŧÛŧŪŧáŧņŧÛŧŪŧáŧņŧūŧŊŊ@Ŋ ŋžŋ ŊŊŊ#ŊŊŊŊ#Ŋ*Ŋ-Ŋ0Ŋ@Ŋ*Ŋ-Ŋ0Ŋ@Ŋ*Ŋ-Ŋ0Ŋ@Ŋ@Ŋ€ŊžŋÜŋLŊOŊRŊcŊRŊXŊ[ŊcŊjŊmŊpŊ€ŊjŊmŊpŊ€ŊjŊmŊpŊ€ŊšŊŊŸŊÜŊÜŋúŋ§ŊĒŊ­ŊŋŊ­Ŋ´ŊˇŊŋŊÆŊÉŊĖŊÜŊÆŊÉŊĖŊÜŊÆŊÉŊĖŊÜŊÜŊžúŋĀčŊëŊîŊ˙ŊîŊôŊ÷Ŋ˙Ŋž ž žžž ž žžž ž žž6ž9ž;žxžĀ6ĀCžFžIž[žIžPžSž[žbžežhžxžbžežhžxžbžežhžxžxž¸ž6ĀRĀ„ž‡žŠž›žŠžž“ž›žĸžĨž¨ž¸žĸžĨž¨ž¸žĸžĨž¨ž¸žĪžŌžÕžõžŋŋĪžŌžÕžõžŋŋĪžŌžÕžõžŋŋŨžéžŋŋâžéžŋŋ9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°Ā ÁÁÁOÁÂ1ÂÁÁ Á2Á Á'Á*Á2Á9Á<Á?ÁOÁ9Á<Á?ÁOÁ9Á<Á?ÁOÁeÁhÁkÁ‡ÁČÁĶÁeÁhÁkÁ‡ÁČÁĶÁeÁhÁkÁ‡ÁČÁĶÁoÁ{ÁČÁĶÁtÁ{ÁČÁĶÁ‡Á”Á¸ÁČÁÁ”Á¸ÁČÁ  ÂÂ~‚‡Ž¹ÂŧžÂûÂÂÃŲÃÆÂÉÂĖÂŪÂĖÂĶÂÖÂŪÂåÂčÂëÂûÂåÂčÂëÂûÂåÂčÂëÂûÂà à ÃJÃŲÃîÃÃÃÃ-ÃÃ"Ã%Ã-Ã4Ã7Ã:ÃJÃ4Ã7Ã:ÃJÃ4Ã7Ã:ÃJÃmÃpÃsÓàÃĢÃmÃpÃsÓàÃĢÃmÃpÃsÓàÃĢÃ{ÇàÃĢÀÇàÃĢÃ.Ä2Ä7Ä>ÄPÄSÄUĒÄrʼnÅ]Ä`ÄcÄuÄcÄjÄmÄuÄ|ÄĂĒÄ|ÄĂĒÄ|ÄĂĒğÄĸĤÄáĉŞÅŦĝĞÄÄIJĚÄŧÄÄÄËÄÎÄŅÄáÄËÄÎÄŅÄáÄËÄÎÄŅÄáÄÅ Å#ÅCÅPÅ[ÅÅ Å#ÅCÅPÅ[ÅÅ Å#ÅCÅPÅ[Å+Å7ÅPÅ[Å0Å7ÅPÅ[Å †˜vy|Rt˜  4  ø1.R ¯ĩŧÂŨā¯ĩŧÂŨāoø¯ĩŧÂŨā3DE3DEZou“áčü ou“á '2 '2 '2 '2771e€Š7IR\]„IR\]„ę1IIR\]„­¸ē­¸ēÕęđbi}€Šęđb•˜›ĸ­˜›ĸ­˜›ĸ­•˜›ĸ­ŗŋĀ%+1yŠŋ9?BTBILT`fiy`fiy`fiyŧÂÅåāøŧÂÅåāøŧÂÅåāøÉŲāøÎŲāøåų °îų °ų Đā Đā ĀÆÉĀĐ 1bĀĐ ;IĀĐ ;>>IĀĐ¨ĀÆÉĀÆÉvy|°ĀĀÆį°ĀĀÆņ˙°ĀĀÆņôô˙°Ā#)N^ĪÕØÛÕØÛíÕčü˙ (ģčP(L Lp""pģč0Pp‘@P‘ŗ0@Ž”—¨áâ )/6<WZ‚)/6<WZ‚é¨Ā)/6<WZ‚­¸š­¸šÔéī [bv}‡éī [Ž”—š§˛—š§˛—š§˛š§˛ˇˇwâˇÉŌÜŨÉŌÜŨ`fp´âÉŌÜŨ-8:-8:Upv”âéũ pv”â(3(3(3(39EFĢąˇ˙á÷ŋÅČÚČĪŌÚæėī˙æėī˙æėī˙BHKk¨BHKk¨BHKk¨O_¨T_¨kP`tP`“€ˆ“€“FLOp€“™ˇčp€“™ÁĪp€“™ÁÄÄĪp€.FLOFLOü˙`pFLmž`pFLw…`pFLwzz…`pНšÎ  %%8@•ž¯&Žęų§ˇēŋ­ˇēŋˆķX_blo{~†ovy{TÆWÆYÆ_ÆWÆYÆpÆŽÆpÆsÆvÆ{ƟÆĸÆĨÆĒÆZ`mš¨c#&P¨¸Đ4ŊôL#Ęâ#Ęâ#4ŊĘ)4ŊĘP`¸Đ4Dô`pQ_}Œ’Œ’œŸĸœŸĸŊœŸĸĨĸ°k#&X°ĀØ9Ęü'T  (×ę(×ę(9Ę×.9Ę×XhĀØ9Iü hxVd'Š™œŸ™œŸŠŦ¯ŠŦ¯ĘŠŦ¯˛APŒ˜ū(+-:Ĩ´ˇē´ˇēÄĮĘÄĮĘāÄĮĘÍ$@K$@KĮĮ Į@ĮĀĮĪĮ$Į4ĮĀĮĪĮ)Į4ĮĀĮĪĮ@Į_Į°ĮĀĮGĮSĮ°ĮĀĮLĮSĮ°ĮĀĮ_ĮlĮ€ĮˆĮeĮlĮ€ĮˆĮlĮxĮˆĮ ĮlĮqĮˆĮĮqĮxĮĮ ĮĪĮŅĮÔĮÜĮÜĮŨĮāĮéĮéĮėĮīĮōĮėĮīĮōĮȐȓȖȩČŋČáČ ÉÉÉČÕČ ÉÉÎČÕČ ÉÉáČņČųČÉęČņČųČÉVÉ[É^ÉdÉdÉgÉjÉpÉgÉjÉpɌɨÉīÉöÉĘ0Ę?ĘEĘbʕʛʞʮʮĘįĘmĖ|ĖŒÍ¤Í¸ĘÛĘmĖ|ĖŒÍ¤ÍËĘÛĘmĖ|ĖĐĘÛĘmĖ|ĖįĘËOĖ]Ė$Ë*Ë-ËeË$ÍDÍ$Ë*Ë-ËU˞ËĐËøËOĖ¤ÍšÍŧËĐËøËOĖ¤ÍšÍÜËßËâËėË]ĖeĖÜËßËâËåËåËėË]ĖeĖ,ÎAÎPÎĨΞÎŅÎ]Ī`ĪpĐ~ĐcĪfĪĢĪĐĐpĐŌĐäĐcĪfĪĢĪÃĪĐpĐŌĐäĐcĪfĪĢĪŋĪĐpĐŌĐäĐ{Ī‰ĪĪ–Ī¤ĐĻĐŠĐ´ĐVŅYŅpŌ~Ō~ҁŅ`ŌpŌ„Ņ‡ŅœŅķŅŌ`ŌĐŌäŌ„Ņ‡ŅœŅ´ŅŌ`ŌĐŌäŌ„Ņ‡ŅœŅ°ŅŌ`ŌĐŌäŌŽŌŌ“ŌžŌ@Ph3>Phh„CQ„”QY”ŠYh´Á0CÅĶÕ×0<Hb/:Hbbz>Jz‡đJQY[‡ŖQY[f¯¸ >¸ģŋĘĖĪ Ķ6Ķ`ĶiĶlĶ€Ķ>ĶAĶEĶSĶ€ĶƒĶ†Ķ—Ķ@Ph3>Phh„CQ„”QY”ŠYh´Á0CÅĶÕ×0 ĶŦĶšĶ×ÔāÔ"ÖšĶ×ÔāÔ"ÖÕĶāĶãĶéĶéĶ ÔQÕdÕéĶüĶQÕdÕéĶîĶņĶôĶÔÔ!ԖÔÕ(ՄÕŦÕŅÕ"Ö0Ô3Ô4Ô_ÔhÔkÔãÕ"ÖbÔhÔkԖÔÕ(ՄՙÕyԂԅԈԂԅԈԖÔÕ(ՂԅԈԋԋԖÔÕ(ՖÔŊÔ8ÕQÕĸÔŊÔ8ÕQÕĸÔŊÔ8Õ>ÕAÕQÕŊÔĘÔ(Õ8ÕÃÔĘÔ(Õ8ÕĘÔ×ÔÕÕĐÔ×ÔÕÕ7ÖRÖ`ÖcÖfÖwְ֑֨ÖĮÖ‘Ö¨Ö°ÖŗÖļÖĮÖ×%×0×G××%×0×G××%×0×3×6×G×V×Y×e×h×n×zחלןױ׷×ģ×ĐŲ0ÚoÛ‚Û—×œ×Ÿ×ą×ĐŲ0ÚoÛ‚Û´×ˇ×ģ×Ā×Ã×ÜרØ$Ø'ØđÚOÛo܂ܴ׷×ģ×Ā×Ã×Ü×đÚOÛo܂ܴ׷×ģ×Ā×Ã×Ų×đÚOÛo܂ÜÜ×ß×'Ø-ØaØy؂ØãؐÚđÚUÜoÜÜ×ß×'Ø-ØaØy؂؉ؐÚđÚUÜoÜÜ×ß×'Ø-ØaØyؐÚđÚUÜoÜô×ØØØZŲyŲ|ŲšŲĄŲ§Ų0ڐÚ9ÜUÜZŲyŲ0ڐÚ9ÜUÜZŲvŲ0ڐÚ9ÜUܘۚ۠ۨÛÅÜÖÜŲÜŨÜŨsŨÅÜÖÜŨsŨ ŨŠŨˇŨČŨØŨåŨŪ,Ū9ŪĄß°ßčãhŪkŪsŪ„Ū‡ŪŠŪ=ãRã„Ū‡ŪŠŪ˜Ū á0á„Ū‡ŪŠŪŪŪ˜Ū á0áíŪđŪņŪß ß ßßß"ß%ßßß"ß%ßß"ß%ß3ߐá áß"ß%ß3ߐá áß"ß%ß(ß(ß3ߐá á3ßDßPá`á3ßDßPá`á9ßDßPá`áDßUß`ápáJßUß`ápáUßfßpá€áUßfßpá€á[ßfßpá€áfßz߀áálßz߀ááz߁߰ߡߐߥßá áßĄßá á–ߥßá áāßãßæßôß°áĀáāßãßæßôß°áĀáāßãßæßéßéßôß°áĀáôßā á°áúßā á°áāāā8āāāā8āāāāāMāiāLâiâ‡āŠā‹āšāā āãĄãĩā¸āģāÉāĀáĐáĩā¸āģāÉāĀáĐáĩā¸āģāžāžāÉāĀáĐáÉāÚāāáđáÉāÚāāáđáĪāÚāāáđáÚāëāĐáāáāāëāĐáāáëāüāđáūáëāüāđáūáņāüāđáūá–äĻä§äŠä å|åˆå]ëXåuåˆåHæöéŗęë]ëƒæ‰æŒæ–æžæ¤æ§æÁæžæ¤æ§æĒæûæfčŨčöéUįęįWégéÅéöéį–į™įĨįĶįŲįÜįęįWégéĶįŲįÜįßįßįęįWégéåčúčééééé,é4é:é=éWé4é:é=é@éčEčKčSčVčfččEčKčNčQčSčaëfëtë%íë°ëēë%í1í3í>íDíPíŽí í īhíˆí í ī  \  \ ,h ,h ī2ī7īrīˆīšīÆīÉīØīÛīŪīäīđđđŧņŋņÄņĐņûņūņōō‘öđđđˇđZöxö%đ;đ>đAđ(đ2đ5đ;đ>đAđ;đ>đAđQđTđWđAđHđKđQđTđWđQđTđWđgđjđmđWđ^đađgđjđmđgđjđmđ}đ€đƒđmđtđwđ}đ€đƒđ}đ€đƒđ”đ—đ˜đƒđŠđđ”đ—đ˜đ”đ—đ˜đĄđ¤đ§đĄđ¤đ§đˇđĄđ¤đ§đˇđĄđ¤đ§đˇđÉđĖđĪđŨđåđčđëđųđXķdķåđčđëđîđîđųđXķdķ ņ-ņ0ņ3ņ ņ-ņ0ņ3ņ-ņ0ņ3ņAņHķXķ-ņ0ņ3ņ6ņ6ņAņHķXķ€ņņō¨ō¨ņĢņ˛ņŧņĐņņņ¨ōHķVõö3öZöņņôņøņûņŠöļ÷Ā÷ä÷į÷ė÷ø÷iųlųqų€ųŊúŊöÃöÅöČö>÷K÷N÷Q÷>÷K÷N÷Q÷K÷N÷Q÷_÷ų ųK÷N÷Q÷T÷T÷_÷ų ų_÷p÷ ų°ųe÷p÷ ų°ųp÷÷°ųĀųv÷÷°ųĀų÷’÷ĀųĖų‡÷’÷ĀųĖų’÷Ŗ÷€ųų˜÷Ŗ÷€ųųBø}øƒø†øBøvøƒø†øŋøĖøĪøŌøŋøĖøĪøŌøĖøĪøŌøāøĖųÛųĖøĪøŌøÕøÕøāøĖųÛųųOųUųXųųHųUųXųĐúņúöûüĄũÉūöúųúüú˙úûûöúųúüú˙úûûöúųúüú˙úûûöúųúüú˙úûû˙%˙0˙G˙˙%˙0˙G˙˙%˙0˙3˙6˙G˙U˙X˙[˙Ä˙Đ˙ 0ˆ–˙™˙›˙ ˙§˙Ē˙­˙ˇ˙0?§˙Ē˙­˙°˙°˙ˇ˙0?ˇ˙Ä˙ ˇ˙Ŋ˙ Ŋ˙Ä˙  @Ph3>Phh„CQ„”QY”ŠYh´Á0CÅĶÕ×0ĸŊČËÎá@Ph3>Phh„CQ„”QY”ŠYh´Á0CÅĶÕ×0=pŠ -014::=pŠ:=s}€Š=ILOILO_ILO_ILO_@Ph3>Phh„CQ„”QY”ŠYh´Á0CÅĶÕ×09;?Ph #*X#6X69?B9?BXŦĀĘ!8!8pCFKSFKU`SU`ez}‚Š}‚Š’”—’”—žąžƒķ¨žžČ>cfm>CFNN^`c^`fm‡ŠŒ›ŠŒ› svz¨ķ % '2%'27=[]`ą´šķ=Ią´šĀÃÅIOĀÃÅĘO[]`svzƒ 47:HŅ beh`“°Ņ "(=@\"(=@\šŋÉ`x"(=@\†‹ŒŖ¤†‹ŒŖ¤ŽÉĪí;?]ÉĪí;beh{{„Š„Š4H`„ŠĢÜH`„ŠĩÃH`„Šĩ¸¸ÃH`Ü%įíũíķ%%4%(/%(/;PSV`°ŧPSVYY`°ŧ`m °fm °HNQ[NQ[gŽ‘”Ķ0œŸĸ´ĸŠŦ´ŊĀÃĶŊĀÃĶŊĀÃĶøûũ:ģÎ  $'*:$'*:$'*:PSVr°ģPSVr°ģPSVr°ģZf°ģ_f°ģr °x °ÛŪáäŪáäķ\beobeo{ĸĨ¨įū°ŗļČļŊĀČŅÔ×įŅÔ×įŅÔ×į N^s1&)18;>N8;>N8;>Ndgj†đūdgj†đūdgj†đūnzđūszđū†“āđŒ“āđ!$'!$'6Ŧ˛ĩŋ˛ĩŋËōõø7Na !$'7!$'7!$'7\_ažŽÃiloovyˆ‹Žžˆ‹Žžˆ‹Žž´ˇēÖ@N´ˇēÖ@N´ˇēÖ@NžĘ@NÃĘ@NÖã0@Üã0@nqtwqtw†ü       B E H ‡ ž ą P S V h V ] ` h q t w ‡ q t w ‡ q t w ‡ Ŧ ¯ ą î ū  š ŧ ŋ Ņ ŋ Æ É Ņ Ø Û Ū î Ø Û Ū î Ø Û Ū î    &  ž    &  ž    &  ž    ž    ž & 3 €  , 3 €  ž Á Ä Į Á Ä Į Ö L R U _ R U _ k ’ • ˜ × î    Ŗ Ļ ¸ Ļ ­ ° ¸ Á Ä Į × Á Ä Į × Á Ä Į × ü ˙  > N c    !    ! ( + . > ( + . > ( + . > T W Z v ā î T W Z v ā î T W Z v ā î ^ j ā î c j ā î v ƒ Đ ā | ƒ Đ ā        &  …˜ŖĨ¨¸ģŊĀŲīûE !‚…˜  ŖĨ¨¸ģŊĀ ĢĀÁ 8@ĸ@HĀÖHWčū@G¤¸y‹¤y}„‡y}}„ Õá;PSUXhx !PSUXv |  fpëķė‰ • ˜ š • ˜ š   Ļ :G QfļėĻ ą ˇ ¸ ą ˇ ¸ â  Îėą ˇ ¸ Á Á Ë Î Ô Ë Î Ô â  Ë Î Ô â  Ë Î Ô × × â  â            ) ') ') ') '):'G):'G)/'-/:-G:KGg:KGg:@GM@KMgK\gKQgmQ\mą´ˇÅ$ą´ˇēēÅ$ÖŲâåę:Q ÃķøūŅÔ×č$)/:ö˙ЏâADGUP`ADGJJUP`Uf@P[f@PqϏ@`Čâ{ˆ8@ÁĐĶÖÄĮĘĐĶÖĐĶÖä`lĐĶÖä`lĐĶÖŲŲä`l0ƒˆ0fs€ 35;=CIN^s€^f öųü*@Ÿ°Åöų 9<?§Å&9<?9<?M9<?BBMSdfh“”“”“”›žĄ›žĄ¯ ›žĄ¤¤¯ ÁÄÅĖĪŌĖĪŌā /ĖĪŌÕÕā / WrWZ Zrr‡ruu‡*‡Ÿ#‡#*ŸĐęíđęíđŲÕāņū5Õāęū5%ÂÍH¸āęū5djn¨5dgnsŅÔÛāˆŅč¨5ēŊ}€ŊŅ€ƒ‡¨ŊÀƒ‡ŠÃŅŠ¨¨¸āꎸāęNr€‘`moršŧŋũČŪäįíđÍVs˛đÍVs<đ\rux_ilruxruxˆ‹Žrux|‚ˆ‹Žˆ‹ŽžŽ•˜žžĄ¤˛_besžĄ¤§_beh§˛hsĄ¤Ŧ¯˛ÍĄ¤˛šŧÍ(479N_be€–™œƒ–™œ–™œŦ¯˛–™œ ĻŦ¯˛˛ĀÂÄđü˙'-0'-0:’Ą'*03*-3:’ĄDNQ]]qtwĄˇtwĄˇqtw’w„’Ūë&äë&ŗļšËŗļšŧ ōü "(58:FILSĀĐLSĀĐ ĻĀ] ˜Ā]‡˜ĀÃĘ凍ĀÃĘ͍˜Íå ĻĀ~ ˜Ā~7:GJ‡˜āãę‡āãę퍘í &),8cfipÚBHJPPcpÚLjx§¸"‚ˆŠ¤¸"<_p¤° <TW]pœŸĸ° z€‚ˆˆœ° = ` p Ą °  != [ ] ` p Ÿ °  !X [ ] ` z € ‚ ˆ ˆ œ °  !R!Š!˜!1"@"p#`!c!f!Š! "7#]#p#`!c!f!ˆ! "7#]#p#Ē"°"ĩ"ģ"ģ"Ī"ā"7#]#p#›!ĸ!Ĩ!1"@" "7#]#›!ĸ!Ĩ!Ā!@" "7#J#›!ĸ!Ĩ!¸!@" "7#J#Ã!Ę!Í!1"J#]#Ã!Æ!Í!1"J#]#Ž#Ņ#$P$ā$.%A%T%Ž#Ī#$P$ā$.%A%T%$ $"$($($A$ā$.%A%T%Ü#˙#P$‚$$ā$.%A%Ü#ú#ü#˙#P$€$$ā$.%A%÷#ú#ü#˙#Z$`$b$h$h$}$$ā$.%A%l%Ë%Ø%E&P&Œ(z%Ą%P&&'č'b(w(z%Ÿ%P&&'č'b(w(Z&`&b&h&h&&'č'b(w(Ą%¤%§%Ë%&Đ&č'8(M(b(Ą%¤%§%É%&Đ&č'8(M(b(š& &ĸ&¨&¨&Ā&č'8(M(b(Ø%&0''w(Œ(Û%÷%ú%&&&0''w(Œ(Û%ō%0''w(Œ(÷%ú%&& &&&E&Đ&0'8(M(&/&5&<&Đ&0'8(M(&,&Đ&0'8(M(/&2&<&E&/27$/27ü(&))).)8)Ø1ā1qD6*<*?*M*Ö5æ56*<*?*B*B*M*Ö5æ5M*a*Æ5Ö5V*a*Æ5Ö5a*u*ļ5Æ5j*u*ļ5Æ5u*‰*Ļ5ļ5~*‰*Ļ5ļ5‰**–5Ļ5’**–5Ļ5*ą*†5–5Ļ*ą*†5–5ā+æ+é+÷+v5†5ā+æ+é+ė+ė+÷+v5†5÷+ ,f5v5, ,f5v5 ,,V5f5,,V5f5,3,F5V5(,3,F5V53,G,v6Œ6<,G,v6Œ6G,[,f6v6P,[,f6v6[,o,V6f6d,o,V6f6o,ƒ,F6V6x,ƒ,F6V6ƒ,—,66F6Œ,—,66F6—,Ģ,&666 ,Ģ,&666Ģ,ŋ,6&6´,ŋ,6&6ŋ,Ķ,66Č,Ķ,66Ķ,į,65F5Ü,į,65F5į,%-*---ę9ũ9į,đ,ú,- -%-*---đ,ú,--%-*---Õ-565Œ6Ą6ũ9:;;MDqD%-*---7-7-Õ-565Œ6Ą6ũ9:;;MDqD7-9->-\-a-ˆ-565ũ9:7-9-a-ˆ-565ũ9:7-9-a-i-565ũ9:9->-\-a-ˆ-Ã-;;MDRDđ-ö-ú-ũ-%.|.ä:ë:%.l.ä:ë:.–.Ŧ.¯.ˇ.ä.ę.ë.Č.Î.Ø.Û.ū. ///ū. /// /// /ö56 ///// /ö56@/01ā1Ü2¨35Ą6W7}7U8Ē8ę9:ä:;÷;AŪACMD/˛/`45CMDŋ/č0ā1€22Ü2Ą6W7}7818U8Ē8I9AŪA1#1¨3`4;÷;818Ļ:ä:818¯:ä:01T1đ2¨3ŪACT1W1Z1]1W1Z1]1c1m1p1c1i1p1Ž1c1i1p1ž1Ž1Â1æ5ö5ˇ1Â1æ5ö5Â1Ö1Ü2į2Ë1Ö1Ü2į2W7}7U8k8n7q7v7}7 E EEEHEŠEŅFøFHEŠEŅFøFHEKENEbEKENEbEŠEŅFøFKENEbEiEkEpEsEvE~EŠEŅFøFŠE¯E!FŧFG2G>GHGŠE¯E!FŧFG2G>GHGŠE¯E!F0F3F6FJFžFG2G>GHG3F6FJFQFSFXF[F^FfF‘FG2G>GHG0F3F6FJFĀE!FøFG2G>GĀE!FøFG2G>GĀEÃEÆEÚEÃEÆEÚE!FøFG2G>GÃEÆEÚEáEãEčEëEîEöE!FøFG2G>GVGYG\G_GeGKHXH*IŸGŦGŽGąGŦGŽGąGĀGĀGÍGĐGĶGÍGĐGĶGāGāGíGđGķGíGđGķGHŪHëHíGđGķGöGöGHŪHëHH%H(H-HH%H(H-H‹HHHHH­H°HŗH­H°HŗHÃH­H°HŗHĩH­H°HŗHĩH­H°HŗHĩHeŧgÍg e.eŧgÍg>egeg:ggexeggmexeggxeŠeŒežexe~e„e‡eŒee~ee‡eŠee•ee„e•ežeŠeŒežeãeŠeŒežeĶe¯ežeÁeÆe´ežeÁeÆeãe÷eggée÷egg÷eúeff–fšf fŽf´fˇfšfŧfŽf´fˇfšfŧfûfūfgˇfšfŧfëfĮfÖfŲfŪfĖfÖfŲfŪf‡gŠgggŠgggĨg"hhh°hŲh'h-h/hhh°hŲh7hVh°hŲhJhVh°hēhOhVh°hēhvh|h h°h=JMPJMP^”JMPSS^”^ ĨŽd ĨŽ“˜š„“˜š ĨŽ0`x˛Đ×`x   IRxESVYSVYgt‡SVY\\gt‡gļ¸Ŋltwļ¸Ŋrtwŗ Ĩ” Ĩļ¸Ŋ(`t‡ĨÜ`t 038%038 ,@ņ#&),JPUîņô`§ŅņX[^îņô`§ŅņX[g|‡°`{‡ŒX[‡°`{‡ŒX[‡–`{‡Œ^g|‡°ë{‡Œ‘Ņņîņô`ĀŅ&i)i/i}jˆjÉl5iAiGiMi5i8i;i=i5i8i;i=i5i8i;i=i[ikipisicikipisikipisi~iÖjįjęjėjįjęjėjújújÚkčkũkúj kkkk kkk kkkktuple iosfwdstl_function.hcstdlibbasic_ios.tccpostypes.hfunctexcept.hostream_insert.hstdio.hlibio.hstdarg.h stddef.h wchar.htime.hnumeric_traits.halloc_traits.htype_traits.hdebug.h locale.htypes.hsched.htime.hpthreadtypes.hatomic_word.h wctype.hstdlib.htypes.h sigset.hselect.h stat.hunistd.hregex.hgtest-string.hgtest-spi.hgtest-death-test.hsiginfo.hsignal.hsigaction.hstdlib-float.hstdlib-bsearch.hfcntl-linux.htime.h socket_type.hsockaddr.hsocket.hnetdb.hgthr-default.h errno.hctype.hsocket.h pthread.hwait.h mman.h sched.hfcntl.hcxxabi.h˛™ ž KJ Ŧ‚ ÂÖ Ú Žą´šõöøųúûüũū˙€ƒ¸ķîøĀō éožÉË.ļ{fœ™J1 äožŅČą{.œžJ… ßožæœŖJ… Úožæœ¨J…ÆrJŧ ô<§eōƒYKŽ֐ ´äƒ¨e. ×.†dt ŊJ‹< õit‹f¨j‚X ŊJ‰ÖJLÁtJKķä{t<īm‘‚īmÖ‘<īm<‘XŸ<îm’‚îmÖ’<îm<’XŸ<ím“‚ímÖ“<ím<“XŸ<ėm”‚ėmÖ”<ėm<”XŸ<ëm•‚ëmÖ•<ëm<•XŸ<ęm–‚ęmÖ–<ęm<–XŸ<ém—‚4<čm˜‚4<įm™‚4<æmš‚4<åm›‚4tģŪmŖ‚ģe=ÜmŦŖ<Ũm<ŖXNËtģÕmŦ‚å˙†°z< ęst ˙~Ü~JŠÖJņo/0ŸOnsž JƒufŗJ' X¯tœ~īÖOs<.ú‚0ōP ,K´K,ŦAJÁ@ Ę|žæœ¸J…=/Ą=/Ą>/Ą=/Ą=/Ą=/Ą=/ žJLķw- SX,<ģ./Č<ƒLL!§]ŠÉōjG<9<ģB.?<€ äžzJø<Ėt#šzJø<Ņt˛ <ƒLL!§]Š*ō<ƒL Jâ~ČY¨\Ēō<ƒ’k  OĘu ļēƒfK/ŸģōÍwfŗ<Íw<ŗ<Íw<Ũ}žļ<¸|<ë f?c[ƒ€{ž€.ƒĸu°.Ú<=;=‘Ây<2X­.° tÔtfv< t< JĢuJCf› tĸuäCt=äCfÂ'JKģöē<ƒäwtœÖ÷xJy.“<íx<“<ę ‹xXž<ƒÛwtĨ‚îxJy.œ<áČ‹xX—žt‚|Jâ<Ču<ĮäCf=tCfö~tĮtCf=ōCf=<Cfö~Čš ē<ķČt{Jâ<Ču<ĮäCf=tCfö~tĮtCf=ōCf=<Cfö~Čš ē;ž~<Ēw<ĮäCXö~tĮtCf=ōCXö~Öš ē“įwŸYo3ÖLõ\öē™ÖYë[.ę<Ÿmä[qĘ.ˇ{X†3öQtŊ”öKäģ#PJ2 ŪžKsKÍ ŗtēå-ČôČ<ē~Öōä>åØ?æĸyÖū<Č>ōú<Ž~ Zjė<Š~ æ št‡-Zf„,hĄ Ķ~f¯fJi­.Ķ|<J„J JŊ†9MG‚<FJ;.‡öŒ}."[ <su“ ŦäZ;Ydž§{ē”<ė|ž”<ė|f”<ė|.°<ōzäŽ<Ļ ÔlžŦ<Ôl<C<“Ŧ”<ė|ž”<ė|f”<ė|ž”<‚}fū<‚}.jž<ū<ė|t”<œtä|<œ ­~žÍ|Čŗ<Í|<C<ņŦĢÖæ~<š¯U1i˙[ē”<ė|ž”<˙|ņJē‚} ū<‚} ū<€}fî#<‡bČų<‡b”}Čė<”}<ēĸi ĸ<ŧ.ļl ė|t”<˙|ƒŗ"Åj‚ģélēYÖ'<Y<=Äz.ŧ.Ųz. ēv.ž<ĒkJÖfŅlf¯<Ņl<‰Jōzäb<ûĢzžÕ<Ģz<C<œtv7ēæzōhēf>Cfœävōzē˙<Ô'Čzf¸<ŗz<ÍJČz<㠝{tč~X˜<č~.°<ōzäŽ<Ļ ÔlžŦ<Ôl<C<:Ŧ‰Ŧōzäb<ûēĢzēÕ<Ģz<C<œtvÆē¸ČČ<¸<Ą{JCXžtĮēÖz@hēfÔ<Ž{fCfœÖvŸ{<CfŦ Ȑg‡YK<=ožiē-/e<d<<;L;>;rČÚČŠuēĢzČÕ<Ģz<C<=ŦCfĄ Ö/<kJ<;=;jŦ/.bJ=<a<<b<‚>^< <>;ûvōCX=Cf=äCfė äģI=iĄ9… tˇvŦÉ fë ÔlōŦfÔl<C<ņ ČÖŊv à fÅx<‹|ČížC<"VŦ#õ‚ĸzJ# ž ŦžŨ t;=mČ&Ŋv‚C‰tg-u-=ģ‘Š{ ´<ĒkfÖŦÔlfŦ<Ôl<C<žu;Q˙yžā<žž‚z<ā. }<āfžfy<ŗ{tCfąČ„{JüJ„{Jũ. Ņ‚JƒLåũ[ž{žK;=;={f´<ĒkfÖXÔlfŦ<Ôl<C<Št”{ÖCfĒōK;=;=Š{f´<ĒkfÖXÔlfŦ<Ôl<C<Ŧt‘{ÖCfõg;uŋY‚'<Ys->-FXŠuäö äotûŦĢz‚Õ<Ģz<C<=tCfÄtųnfCfÄųnēCf=äCf=äCXŲēt>ģļqōĘ<¸p< |JŠ.M,@ÚlÖĻ<Úl<C<ät§ŪlÖCf°$ƒs=/ƒmfƒf‡ŪÎĨäŨvŧr‚Ŧ|žÔ<ŋ ‚†īlÖ‘<īl<C<=ŦCfĪŦ×j#v%Üx¨tØx<¨X ûl? Cf=Cfųž‚ģo<ā~<æf­ č 1’¸l*Č<¸l<C<‰t×ũvtčŧl$CfŒ&ƒs= .zēģįc#Šl)×<Šl<C<•t¨lÖØ<¨l<C<=)Cf=CfšȐ=ļēŨvŧrXŦ|ČÔ<ŋ ‚õ€lÖ€<€l<C<=ŦCfžŦnķ<ũk0ƒ<ũk<C<ÂŦŸ§oÖŪ Jüfųkä‡<ųk<C<īŦæ~Jš<æ~.šÚ Ļo<Ú.˙|ē‚Xķkä<ķk<C<ËŦ’¨o%Üä¤o.Ü..‘Põ×ųmÖ<gfūÖęk0Cf=1Cf= Cf =ä Cf=.CfS琒fī{.ŽÃfŊn<ÃtģŊnžÃ<Ŋn<ų~ž‘ė‚”~<ė<C<=tCf=tCfXtö~.Šä å< Cf=CX=Cf=äCf=žCfĨ#’RŽV0 fÔÕĮš,ō/äČ!;!ēō!;!ēō/ä!;!ƒižũ<ƒi<C<=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCfģŦwX <w< <‚iüCf=äCf=äCf=äCf=äCf=äCf=äCf=äCf=äCf =ä Cf =ä Cf=äCf=äCf=äCf=äCfE~’:Ū<¤tƒķ#‚~ēū<‚~fC<=ŦCfĐ~ŦŸüŦđž<đ<C<=ŦCfNŦā0!;!äđä‚~ēū<‚~fC<=tCf=tCf=tCf=tCfNpīäCf=tCf=Cf=äCf=.Cf=fCf=äCf=äCf=äCf+<ĸ~fŪ<<ĸ~<ā䊞Ø~ČY-/Œ‚‚~tū<‚~<C<2‚ ÖCX=CfØē!WYe:>¯rČŅ <¯r<C<=tCfŽt¯r‚CfŽ ¯rä Cf=CfīŦt>lũ}‚ƒģĮnŦš<Įn<C<ötÆl<CfĘČY;<=Čof”<ė|ž”<˙|ņ‚ē‚} ū<‚} ū<ė|f<€<ė|ž”<ė|f”<ė|ž”<ė|f”<ė|ž”<˙|ņ‚ē‚} ū<‚} ū<ė|f<€<ė|ž”<ė|f”<ė|ž”<ė|f”<ė|ž”<ė|f”<ė|ž”<ė|f”<ė|ž”<ė|f”<ė|ž”<œtä|<œ ” žŪp<Ž<” æp#š<æp<C<=tCfœtvē ēĪot–_Cf =ä Cf œävÍ|ä!WYe‚ņt{<ņ‚ņt{<ņ‚ņt{<ņ‚ņt{<ņ‘†¸>rē!;!ē!;!œ{‚‚~Čū<‚~<C<=ŦCf=ŦCf=ŦCf=ŦCf=ŦCfŋŦ2š ž¨uēs„c<XaēØ ‚ˇu É Ŧšu uÍyē§4tÃ|fŗ< XÃg;ķũzÖ‚~Čū<‚~<C<=ŦCf´"Īyē§4Ît‹|fõ<ŧēX;YúxjCf=äCfļŦ‡yfCf=.Cf=.Cf=.Cf=.Cf=.CfĀ<v*Ö4ízX•<ëz<•<ëz •< ō0:æ+ä!;!ÖÉsf0.Évf < .Č.ûz‚Cf=äCf =ä Cf =ä Cf=äCf=Cf=äCf=äCf=äCf =ä Cf =ä Cf=äCf=Cf=äCf=äCf=äCf=äCf!=ä!Cf#=ä#Cf%=ä%CfĢ–Xƒwŧ-=S.Ÿkf īy‚•fųjŦß<Ąp<ΐY;=˙sf‚ ōLĩbÖË<įdō™<įd.™XŊbtÃ<Ŋb<C<=tCf†tösē… LšbŦĮ<šb<C<†XˇbÖCf€tŊbōCfÄē=†Úit īy‚•ȤfâiŦĪ~<ą<.Ŗk䐟đ‚˜~ÖĮyJš<Įy<C<=tCf÷tŸy.ø<étÆy2Cf=Cf‹Ȑ‹y#ø<ũtĶ ­~Ö‹yžøJũt y ā< y<č~‚˜<ü<ė|t”<„~‚ņ{<ņ¤bäŦ‚Ÿ=;=šb.é<Ėc<Ë~JéXJ…Pž1ē”?¯c‚é{<CfŸÖé<—btéXƒ=;=7%?28@ö?w.äWG˛cJé{<æ <š_JC<=ČCfƒ!žœbžäŦ'‚XJ(t“_ČCf=CfÃ~Ŧ‚fæ}Ö™ JÄtČŧ .čr<Õ.Ķ’:>vÜ <.ŖsäJof<)¨fk<J;=~X ÅÖ¤ ‚Ät./™<×{ä”<ė|ž”<Ž~fō<Â<ĒkJÖfĒkfÖ<žn<ė|t”<–~fę<–~<C<vŦ ēÖÆ}. ē.Ŋå< ›wäŪ)Ā&.Üzf)Ôē.Ŧ~ē)Ô<.Ŧ~.Ĩ..Ūlä/ŦJˇ~/É<ˇ~<C<“t”<ė|ž”<Ž~fō<Â<ĒkJÖfĒkfÖ<žn<ė|t”<)Ô.ízf)Ãē.Ŋ~ē)Ã<.Ŋ~.i/Ņä.¯{</Ņ<}ŦC</ŧ<}<C<.ë~t(t”<ė|ž”<˙|ēMjō<€<ė|ž”<€}ēœXš äČ.õl<Ė‚Cf)ÛtÁä .Ûyē)âXÁä Ÿ{fCf=fCf.ķ~ž.ž~<ĘŦ.ļ~<Ę<C<.ô~ä´ •ttCfÃ#fgsŗ\<Ö#ÖĒ\.Ö#.“hfōČŽh<ō.ė\ē”#<¯\<Ķ#tK=LLLLMxž„îęæoōå<Ú\žC<ō$ōîŲ^ōĩ<ƒulŪyf/¸ēgžfg.fg<Ūy,hŗzXōf]<#X#až"ĄËÆyēXWŦ/XŦÍyōŗfÍy<C<=ŦC=ŦC=ŦC=ŦC=ŦCõŦWIg;ģeX)<!e!Č<X</Ö<!š!Čy‚¸fČy<C<=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC­ŦēyÆžēy‚Ŗ<#ž•~XëX˜~<õ{žå.Ė{X´Č›|X‚,gg0 ō0w÷Č ĘŦšyž Šföf ŠJö< ã~t<9ŨyžĮ"CXAä ŊJå ēąyÖ ’fîf ’Xî<Ī‚ąyŦ ’fîf ’žî<ᐙ~fį Ā{.‚~Ŧūf‚~<C<¤Ŧ€<Wē(fXŦ( Kן"ÉÉ[91ķe/ f"/…Zšz#/Č,֝}Xô|<Œ<ô|< ÕfĨ}fP Õ<Ĩf  ī~X‘tŲ$Œ 8 J <ō<<<MŦV¸ Īx¸¯ŲélJC= C= C= C= C= C= C éŦĨfŧ ī~X‘< ī~Xž|tC= C= C= C= C= C=$Cąžf ŊJŋēC= Cŗž!ŸŨxĄf ĩČĮtC= C= C= C= C= C= Cö~5t0įwt00SÜžC= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C=KC= C= C= C= C= Cė2R X   XXcRX   XXÔy‚C= C= C= C= C= C= C=‡C=ēC= C= C= C= C= C= C =0 C"= "C$= $C&= &C=EC= C= C= C=EC= C= C= C= C= C= C= C0Ū~kĶXf Ŋ‚ äŦî<“zŦíŦ•zÖëŦ—zÖ¯Ÿt3á .Ķ<­xžŅr‚ŗ ŅrÖ  <s<  <Ÿ t áv.  X āv<  <Ëv‚0wēŋ ցfŅr  <s<  <Ÿ t áv.  X āv<  <Ëv‚0wēŋ ÖŌvä  <s<  <Ÿ t áv.  X āv<  <Ëv‚0wēŋ Ö˜wČX ŊJ˜ J0ČrJ00SŦˇ0ō0SŦ00SŦ›÷Čh:>:h Ûg‚§.˜~ēļl.Ž~Čō.Â<žnäŽ~Čō<Â<žnČ–~Čę<–~<C<šŦŊ}fĮōCXö~ËX ŊJáē zČ&0ÚhŦĻ.Ž|<žžn<Ž~ōō<Ž~<´.ķÖŠ +ßhXCf垐Īk<ŗf"åe=ÖĶh­<Ķh<C<=ŦCf“Ŧ~<Ą}Jˇ.L&Īhą<Īh<C<=ŦCf“Ŧų}<Š}Jģ.K&Ėh´<Ėh<C<=ŦCfõŦ"JČh¸<Čh<C<=ŦCf÷Ŧ&Æh<ē<Æh<C<=ŦCføŦ(Åhfģ<Åh<C<=ŦCfųŦŧhōÄ<đ{ ÔlēŦ<Ôl<C<ŸŦŨfšhž¨~<ĻČķ;˛h Îöjfˆ€jJŽ~ōō<Â<žnČ–~Čę<–~<C<ŦŦ‘hōCf=äCf=äCf=äCf=äCf=äCfŦ-‘hžCf=äCf=tCf=Cf =ä Cf=.Cf=.Cf=äCf=.Cf=Cf=äCf= Cf= Cf=Cf°Čg;<=æôiōŽ~Čō<Â<–pō¸J'†häú<†h<C<=ŦCfīÖĘJ'„häü<„h<C<=ŦCfõÖĮ 'hä˙fhfC<=ŦCfŊŦ)€hä€<€h<C<=ŦCfĘŦö<Šjfö<%ũgäƒ<ũg<C<=ŦCfÍŦõ<‹jfõ<%ûgä…<ûg<C<=ŦCfÄŦŧ0÷gä‰<÷g<C<=ŦCfîŦÛ<Ĩj<ÛŦėgŦ”< { ÔlžŦ<Ôl<C<ËŦ*ōg Ž<ōg<C<=ŦCfĖŦ>Ņj‚¯XŅj Ŋ<Ãt }XJķČ!Ījt¯<Ņj<¯XŲiJŽ~ōō<Â<éēëgŦ•<ëg<C<ĶŦęg^Cf=-CfĶäęg Cf=$Cf=5Cf=äCf=tCf=Cf=äCf=.Cf=.Cf=äCf=.Cf=äCf=ČCf=äCf=XCf= Cf=äCf=ČCf=Cf=‚Cf¨.¨hfØff>ĻhP "iČŦm„|ü<„|rîx‚ Ÿ{ēCf´ t91Y‰tCfŽ tîxōvԒ›Öhd>%‚t.ū <‚t<C<štŊ}fÃ.Ŋ}<ĮäCXö~Ët Ŋtž ēW‚t.CfŠ txõY fw. ,Č<ē<2­ÁōøJÃztBē><Ö<ė|t”<đ}fŦ‚} ū<‚} ū<ė|f”<ė|ž”<Š}f<rí‚C<=<C<œtv¸Ą{ŦCXžt2vqēÁz‚íōCf— #RxfDžs(â <žs<C<  tsCfížKšvŦ¸ ‚ģ" ē„Kut„zf ōxō—ōŊt.à X­utŒ~‚Î f X‚v<ū <‚vf˛tt×Ņ X¯t<Ņ 5‡T2ëŧœt<×å 3…+?G?\<¸s<ņ žpŦtttbōK€ŦŦt…~‚Õ ē Xw<˙<wfuްs<×Ö~XĒ<Ö~2ü XŽs.Ō ‚„r<ü X„r<ü šrč Öp  ōmōK€Ŧ’d>ŠŠä€Č_°824#'‹eJĖf´jfƒû-ģ°",>=-=ĸcfÛfĨcŦ ͤiž ܍iž×‹/õd‚‹f .é Ų{gÆ. š|tŠfžˇcōĘžtëd ×­+i9i+iÜbž¨. J’DōÂō[‚‚Éũ<ƒ<ũ.ēXHö`ä¤<Ģt‘rfĘ<ļc<ĘXļct }‚ĪJÛJļcfĘ‚{ ųcē Ōf ĐhÖ °‘;ág¯k<=ŗ{‚á<í~<˛{JáXÂ{Ö īyēĐJÅ$ą;KĮä­k ÛytĨ* ČĪyą*ĮXŽhÖĢJĀJ´.âž•lJëĒf˙Ũy<{ Cf=CfÔ~JĪf īy‚­Jč>¯yfא{ Cf=Cf×t‘;=Ë< īy‚­Jč>˛}fÔ֐{ Cf=Cf× t‘e= ēč| Y‘‚đ|fJ‘u úž†}< ú.}f ˙X}<XēSä-<SfC<ęŦ Č~ž‹< õ~<‹fC<=ŦCf=ŦCf=ŦCf=ŦCf éŦö< Šx.öÛyJ(Ĩ.Î=Õyē¯<Ņy<ļ.ų<åÂ{JŽ~<ō<Â<žn.Ž~Čō<Â<ürž°wēĮ{Jš(žČ‚=;gXģČytCf=tCfÜtáy CfÜ áyCf=äCfČ‚=;gXģČytCf=tCfÜtáy"Cf=XCf=äCf­‚Ū~<ĸ<Ū~fLŧē;gXģČytCf=tCfÜtbēā~- ˙yCf=äCf­‚Ū~<ĸ<Ū~fLŧē;gXģČytCf=tCfÜtbēā~5Ÿ{ČCf=äCfģŧ fÄu<<=ģ XŠuÎÖÕyē¯<‡}<ų<åÂ{tŽ~ō<Â<žn.Ž~Čō<Â<üržh‚đy<CfÎtĮ{tš%m.uōŨyēCf=äCfå™ Y;‹y<öfŨ äoēûŦސŌ~<Ž ũxƒ<ũx<C<=tCfŦt‘yXCfŦ‘yCf=äCf Y;•y<ėfį äoēûŦސŌ~<Ž ũxƒ<ũx<C<=tCfĸt›yXCfĸ›yCf=äCfûēÉ{fņČIX1äũxŦƒ<ũx<C<=tCf’t€<‘Â{ō<gfņČ÷xCf=‚Cf=äCf¤ #U^z<<€y<ƒ}X_ē!<_<ã ēŠuä”Čė~<”<⠂ŠuäŽÖŌ~<Ž ũxƒ<ũx<C<=tCf=tCf=tCf=tCf=tCf¨Ŧ•y Cf=Cf= Cf= Cf= Cf¨ •yōCf=äCf=äCf=äCf=äCf=äCf=/Cf‰ h:<ŗ{<Ī<š{ÖņUX+<U<í ēŠuäŠČö~<Š<ė ‚ŠuäŽÖŌ~<Ž ũxƒ<ũx<C<=ŦCf=ŦCf=ŦCf=ŦCf=ŦCfžŦˇ{<gfņ÷xXCf=‚Cf= Cf=Cf=CfžŸyōCf=äCf=äCf=äCf=äCf=äCf=äCf)™g˜<įz<<=č~f°<Đy °<ōzČŽ<Ļ ÔlžŦ<Ôl<C<:t‰tōzäb<ûĢzžÕ<Ģz<C<œtv{ē/hēfŽCfœävŸ{JCf™g;Vt../ÉxJ(ˇ.YĮ >Vt...ÉxtˇX.Ûw<Ŋ}fĮ.Cfö~žË< ŊJá ēãÛwäŊ}fĮJCfö~ä˞ ŊJfĢ}‚Õ.Ģ}<iPôr>œÉ<ˇ|ē(í~<-//’.3r‚Ũt(¤~.ÜōĨ~äĒŦŊČÚt(§~.Ų ¨~äØē¨~äĒŦ1éģzXÉf”tėzf[Xq<‚Ėēmdē!.bgԐÂfÁ}ȡ.ÉXˇ<ˆ É}8•7A˛‚Ô}.ŦÖī|¨)<”ō%Ž<Ļ ÔlžŦ<Ôl<C<=ŦCf§ŦĮ}ōšČÉ}Ö¯ČŽ~äō<Â<ÔlžŦ<Ôl<C<ķ=4 Į}ōšČ–~ÖCf=äCf= CfԐÂfÁ}ȡ.ÉXˇ<ˆÉ}8•7A˛‚Ô}.ŦÖī| )<”ō*Ž<Ļ ÔlžŦ<Ôl<C<=ŦCf§ŦĮ}ōšČÉ}ÖD¯ Ž~äō<Â<ÔlžŦ<Ôl<C<ķ84 Į}ōšČ–~ÖCf=äCf= CfԐÂfÁ}ČŋēÁ}<ŋ.Į}Č tŦäÉ}ō•‚˛‚Ô}.ˇ¯ČŽ~äō<Â<ÔlžŦ<Ôl<C<=.CfŠfƒhŸ{JCXžtŧ0Åtž ¸~‚Íēj:ī ū{ē˜zt č‚˜z. Åtž ¸~‚Íēj:īJ+€x‚‚Y€Jœ{Jä<­N}t&Î ų|f&‡f ų|f#—f é~f#—J é~f#—J é~<#—ŦgĄ~.#ßXĄ~ #ßfĄ~ #žžÜ}Ŧ#¤f"“}žČf"¸ČÉNČ|J°<ˆž¯}XŅ<¯}<ū.å}›fm<‹|ČížC<"VŦ#õ‚ĸzŦ# fĶfĸzž# J Ŧ#Ô~< Ŧt&ŋä;=#•z& Ŧt&žžČ}ē! ī ĸŦ ŪyJ ĸ‚ âyJ ž< äy<ęä œmēät  mēāt ¤mēržęJ ˜mŦ ÷t Ŧ{< Ô. Ŧ{Ŧ Ô. Ŧ{< Ôō Ŧ{< Ô. Ŧ{<n‚ävÅē ŦmŦ ãtņ < °mŦ ßtņ < ´mŦua‚ ī ĸŦ ây‚ ž< äy<¯Ö¯<ŅnX¯<ŅnX¯< ĸm睂¯<¯nXŅÖ ĨmJ"fčŅÖ ›rJ Ŧ{čJŅÖ ›r‚ ’{‚ŅÖ ›r‚ –{$äŒt¯. ›rXļ|<¯.¯nXŅÖ ÁmJX°‚˙ f ›rJ”|XŅÖ¯nfŅÖ ĸmf  ī ĸŦ ŪyJ ĸ‚ âyJ ž< äy<,ņäĶ.,­aŦĶ<,­aŦĶ<,­aŦĶ< ŧ`Öäv,ĖēĶ. ĩet,ø{<Ķ. ĩet,ø{<Ķ. Û`žB ÔJ Ŧ{< Ô. Ŧ{< Ôō ’{f î. –{f%út‡NƒO-V<%*.-Vf%*.Üf%¤~fÕ.‡<­.ŋÖ%B‚ßČ%ĄČm<X8‚ t.˜&‘;=Š\J˙#<WJɁOj8æ[.CfĒ$Ŧ;֔ZKēU‡SˆzXŠxX ‚vX ‚uX ‚sX‚rX‚qX‚pX‚oX‚nX‚mX‚kX‚iX‚gXÉm‚ā<á[ē¤$<Ü[tC<ütā< mJā< mJā<Lrá[ŦCf˜&‘;=Š\f˙#<\Č˙#<J‘Oj8æ[.CfĒ$Ŧ;֔ZKēq‡oˆztŠxt ‚vt ‚ut ‚st‚rt‚qt‚pt‚ot‚nt‚mt‚kt‚it‚gtÉm‚ā<á[ē¤$<Ü[tC<ütā< mJā< mJā<L€á[ŦCfø>J+€x‚‚Y€Jœ{Jä<­N}të >uuÁe<<ļgžfg.f0e<<rĸxJ(Ū.ãX„Į CXö~ŦŐj ¸~ēĖJ ´~<Íō>:>ŧË<ĩ~<ËfK <t< <sž J‚~Čū<‚~<C<Ątū Ī|t ´‚. ˙{X Öyēäķ‚0Õ}.ĢX0Õ}< f0w.˛Ö70Ķ}f˛J0Î}< t0wŋŨ}.Į<CXŖ = ū{JŸz ŊtŸē>;;0…t ū{‚˜zJ0¤ž00SŦÜ‚Cf ’Öüf’ū}ž3 Ŋt˜ē0Č}X°X¯ēC‚0Ū~J00SŦ°ēę&…9[.kf–ʸ]ä‚~Čū<‚~<C<ĖŦâfČufĮJCXö~’&.§dXŲ×š`ž īyō•X–{‚Cfˆ%žhžÉ`ÖéŦ`֐{4Cf=tCfę&‘W=?9[.q h¸]ä‚~Öū<‚~<C<ĖŦâXČufÖ.Ēw<ĮtCXö~š XŲ<§d.ŲX!š`Č īyČ•X–{‚Cfˆ%žkÆ`ēéŦ‹gō{'CfãX„Į Cfö~Ŧôë ’Ÿul<l<<8gžfgXĐu<° <ĩy<Ė{´J›|Ŧäh,==0ē ō˙J0ø|ä÷t´ <Ėv<´ <t3 đttw0_< ē0hXĶXf ŊJ… ē„0Ųt00SŦ Ĩ‚ƒwf– Ŧ_8Ŧ>đXŦHō*X?9idäqžœ<äq<C<Øäåq CfØäÚ?9iâāqž <āq<C<Üäw ”æq‚CfÜäwōĨ‚ƒwf– Ŧ_8Ŧ>đXŦHō*X?9idäqžœ<äq<C<Øä XÜqäCfØäÚ?9iâāqž <āq<C<Üä]r䔿q‚CfÜäwōĨ‚ƒwf– Ŧ_8Ŧ>đXŦHō*X?9idäqžœ<äq<C<Øäåq CfØäÚ?9iâāqž <āq<C<Üäw ”æq‚CfÜäwōĨ‚ƒwf– Ŧ_8Ŧ>đXŦHō*X?9idäqžœ<äq<C<Øä XÜqäCfØäÚ?9iâāqž <āq<C<Üä]r䔿q‚CfÜäwōŐ” ¸~ēĐJũ~ōƒ<ũ~fƒ<XË<ĩ~<Ëf´ÖŲf§<ؐsž´fŲ<§<Ųē‚~žū<‚~<C<Ątū Ī|Č ´‚. ˙{X ÖyÖäĐŦŖä0Õ}.ĢX0Õ}< .˙J0ø|"˛Ö70Ķ}f˛J0Î}< ē˙J0ø|ēŋŨ}.Į<CfŖ = ū{JŸzē ŊtĄē:==:0…t ū{‚˜zJ č.˜z<0¤‚00SŦÜ‚CfâÖŦf’ū}ž3 Ŋt˜ē0Č}X°X¯ēC0Ū~J00SŦ°ē0Ðl \J0; žÚ<Cf=äCf0Ū~w‚ Ŧ0kēÅj ¸~ē­J Dā}f¤4Ü}<¤<Ë<‘|üf„|<ü<„|‚ü<„| üfsŦ‘|füf„|<ü.„|JüX„|tüf„| ü<„|JüX„|ēüf‚~fū<‚~<C<=tCf=tCfĄtū&Ī|Č ´‚< ˙{X ÖyŦä­X0Ī;ųō0‡~<‹ä0õ}XhfĮfCf=tCfö~tĮtCfŖ = ū{‚Ÿz, ŊJ ē;==:0žXCf=äCfŽä’ î}ž˜ÖxX’æ}tw Jw< X˜ ‡~ē,ēã ō ū{ē˜zX­#V<Cf=äCfŽ)¯tCf=äCfŽJ’0Ðl üJ0û|Ŧ žÚÖCX0Ū~w‚ Ŧ0kēqŐj ¸~ēÍJ€(€f„Xü<„<Ë<= .sÖ J¤JÜf‚~fū<‚~<C<=tCfĄtūŦĪ|t ´‚< ˙{X ÖyÖäÍēĻČ0Õ}. üJ0û|Ŧ4Ŧų<0‡~<‹Ö0õ}Xh<ĮCXö~tĮ‚CfŖ = ū{JŸz$ ŊJŸē>;;0…Ŧ ū{‚˜zX č.˜z.­ōV<Cf=ČCXŽ’æ}tw Jw< XĮäC‚Žä’ î}ž˜ÖxX’ …~ž,ÖÍ.¯žCX0Ū~w Jw< X0kžq°X.í1\Jķōۋ]ŖÜzē^/ 7 7Üz ^& Öu  X&Üz ^6ŪÖĸ<Tâžā}<‡ēų{ž + Ös< Xü'Ŧ<Ԟŋ<ą{<Ī<ą{äĪž.Č{Xnext_segmentline_ZNSt6vectorIiSaIiEE6assignEjRKi__sigset_tPrettyUnitTestResultPrinter_ZN7testing22EmptyTestEventListeneraSERKS0_current_test_resultbreak_on_failureCStringEquals_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE10deallocateEPS2_jiterator_traits_ZNK7testing8internal24HasNewFatalFailureHelper21has_new_fatal_failureEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE2atEjPrintAsStringLiteralTotesting_internalRawType_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmiEi_ZNSt11char_traitsIcE4copyEPcPKcj_ZNSt6vectorIPcSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6__S_oct_ZN7testing8TestCase11ClearResultEv_TypestartPrintStringTo__copy_move_backwardread_ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_E_ZN7testing8internal24HasNewFatalFailureHelperD0Ev_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKw_ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolder7pointerEv_ZNK7testing8internal13FloatingPointIfE8sign_bitEv_ZN7testing8TestCase16RunSetUpTestCaseEvstrtof_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKw__alloc_traits >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_S_keyEPKSt13_Rb_tree_nodeIS1_E_ZN7testing32ScopedFakeTestPartResultReporter4InitEvstrtoloperator<< _ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE10_S_on_swapERS4_S6__ZN7testing8internal13DeathTestImpl12set_write_fdEi_ZN7testing8TestInfoaSERKS0___haystackIsNotSubstringallocatorgetwcconstruct >ImplicitCast__ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE2atEjgtest_arline_number__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE2atEj_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEptEvCheckedDowncastToActualType >::ValueHolder, testing::internal::ThreadLocalValueHolderBase>socklen_t_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE7reserveEj_Rb_tree_node_base__niter_base_ZNKSt6vectorIiSaIiEE8capacityEvHandleExceptionsInMethodIfSupported_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEi_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5frontEv__copy_move_backward_a_ZN7testing8internal27PrettyUnitTestResultPrinter11OnTestStartERKNS_8TestInfoE_ZN7testing18TestEventListeners22SetDefaultXmlGeneratorEPNS_17TestEventListenerEHandleSehExceptionsInMethodIfSupportedMSG_EOR_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_rightmostEv_ZN7testing8internal12UnitTestImpl21set_current_test_infoEPNS_8TestInfoE_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmIEiswprintftype__ZNKSs5rfindERKSsj__uninit_copy<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*>si_codebasic_stringstreamsockfd__ZNKSt3setISsSt4lessISsESaISsEE11upper_boundERKSs_ZNKSt9_IdentityISsEclERKSsmbsinit_ZNKSt6vectorIiSaIiEE8max_sizeEv~ExecDeathTest_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EEixEj__numeric_traits_integerfrac_digits_ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestEoperator<< last_errorfailbitUniversalPrint >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt17_Rb_tree_iteratorISsEuninitialized_copybreak_on_failure__ZNK7testing8internal10scoped_ptrIKSsEdeEv_ZNSbIwSt11char_traitsIwESaIwEEpLEPKwTestEventListenerswap*>expected_expressiondata_internal_run_death_test__rhsactual_ZNKSt17_Rb_tree_iteratorIPKcEdeEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4rendEv_ZNK7testing8internal8FilePath21FileOrDirectoryExistsEv11__mbstate_tIsPathSeparator_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE13_M_deallocateEPS2_j_ZN7testing8internal17StreamingListener12SocketWriterD0Ev_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE15_M_erase_at_endEPS1_si_errno_ZN7testing8internal12UnitTestImpl21set_current_test_caseEPNS_8TestCaseE_ZNK7testing8internal10scoped_ptrIKSsE3getEv_ZN7testing8internal13DeathTestImpl11set_spawnedEbpair_ZN7testing19TestPartResultArrayaSERKS0_impl__normal_iterator, std::allocator > >vector >_ZNKSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE13get_allocatorEvcopy_backward*, std::basic_string*>_ZNSt6vectorISsSaISsEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EES5_should_run__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_insert_equalERKS1_FloatingPointLE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_S_keyEPKSt13_Rb_tree_nodeISsETypeIdfor_each<__gnu_cxx::__normal_iterator >, void (*)(testing::Environment*)>_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_erase_auxESt23_Rb_tree_const_iteratorIS1_ES9_StrError_Destroy_ZNKSbIwSt11char_traitsIwESaIwEE13get_allocatorEv_M_insert_lower_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8pop_backEv~StreamingListeneroperator- >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSsTEST_ENCOUNTERED_RETURN_STATEMENT_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEE4baseEv_ZN7testing4Test14RecordPropertyERKSsiiterator_traits<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE10_S_on_swapERS4_S6__ZNSt11char_traitsIwE11eq_int_typeERKjS2___cxa_begin_catchsrc_texterror_message_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5beginEvoperator delete_ZNKSt12_Vector_baseIPcSaIS0_EE13get_allocatorEv_ZNSt6vectorIPcSaIS0_EE4dataEv_Allocator_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE2atEjoriginal_reporter__ZN9__gnu_cxx13new_allocatorISsE10deallocateEPSsj_ZN7testing8internal23kTestTypeIdInGoogleTestE_ZN9__gnu_cxx13new_allocatorIPKcE7destroyEPS2_operator<< , std::allocator >file__ZN7testing8TestCaseaSERKS0_AssertHeld_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4dataEv_ZNK9__gnu_cxx17__normal_iteratorIPcSsE4baseEv_ZN7testing8internal17TestEventRepeaterD2Ev_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_S_leftEPKSt18_Rb_tree_node_basereverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >TestPartResultTypeToString_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE8max_sizeERKS4__ZN7testing8UnitTest14AddEnvironmentEPNS_11EnvironmentE_ZNSs7reserveEj_ZNSt12_Vector_baseIPcSaIS0_EE17_M_create_storageEj_Iter_equals_val, std::allocator > >InitGoogleTestRETURNED_ZNKSt12_Vector_baseIiSaIiEE13get_allocatorEvregistered_testsoperator booluser_msg_string_ZN7testing8internal13ExecDeathTestD0EvAbstractSocketWriter__ino_toriginal_working_dir_iterator_traits, std::allocator >*>_ZN7testing8internal12UnitTestImpl31GetGlobalTestPartResultReporterEvregex_ZNK7testing8internal12UnitTestImpl21successful_test_countEv_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEplEinormalized_seed_ZN7testing14TestPartResult14ExtractSummaryEPKcStackLowerThanAddress_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmiEitest_propertiesmove_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7addressERS3__CharToperator<< _ZN7testing14ExitedWithCodeC2Eiunsigned int_ZN7testing8internal12UnitTestImpl34InitDeathTestSubprocessControlInfoEvignoring_casePrintTowcstold_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE17_M_create_storageEj_ZNSt10_Iter_baseIN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS4_SaIS4_EEEELb0EE7_S_baseES9__ZN9__gnu_cxx14__alloc_traitsISaIiEE17_S_select_on_copyERKS1_copy_backward_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwj_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjj_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE8max_sizeERKS4__ZN9__gnu_cxx17__normal_iteratorIPKcSsEmIEiClearTestResult_ZNKSs11_M_disjunctEPKc_vptr.UnitTestdestinternal_run_death_test_flag_size_t_ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv_M_destroy_noderegoff_tparameterlower_bound_ZNSt6vectorIPcSaIS0_EE8pop_backEv_ZNK7testing8internal12UnitTestImpl11random_seedEv_ZNK7testing8internal13DeathTestImpl6statusEvlast_sep_ZN7testing8internal16UniversalPrinterISsE5PrintERKSsPSopthread_mutex_tad_hoc_test_result_bool_ZN7testing8internal15CodePointToUtf8Ejunicode_code_pointcomma__distanceFloatingPoint_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjFormatForComparisonFailureMessage_ZNK7testing14TestPartResult14fatally_failedEvString_Category~TestFactoryBasekUniversalFilter__builtin_fwrite_ZN7testing8internal13GetTestTypeIdEv_ZNSs4_Rep7_M_grabERKSaIcES2__M_copyreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >argvs_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___cxa_throw_ZN9__gnu_cxx13new_allocatorIwE8allocateEjPKv_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_summary_rdstatekStackTraceDepthFlagfreadTestPartResultArraythread_count__copy_move_b*, std::basic_string*>operator!= >_S_blackos_stack_trace_getter_ZNSo9_M_insertIPKvEERSoT___cxa_guard_abort_ZN7testing8internal12UnitTestImpl12ShuffleTestsEv_sigfaultGTEST_SHARD_INDEXMSG_CONFIRM__is_normal_iterator_ZNSt6vectorIiSaIiEEixEjTearDownTestCaseFunc__miter_basekThresholdint_n_cs_precedesbinary_function, std::allocator >, std::basic_string, std::allocator >, bool>_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc_M_key_compareallocator_ZN7testing15AssertionResultlsIA3_cEERS0_RKT_~ForkingDeathTest_ZNKSt6vectorISsSaISsEE6rbeginEvatexitreverse_iterator<__gnu_cxx::__normal_iterator > > >kReservedTestSuiteAttributesDeathTestImpl_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS1_E_ZN7testing7MessageC2Evfwrite_ZNKSs13find_first_ofEcj_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmmEisi_addr_lsb_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_range_checkEj_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmIEi_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_equal_ESt23_Rb_tree_const_iteratorIS1_ERKS1__ZNSt6vectorIiSaIiEE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmmEv_Valcurrent_test_info_operator<< GTEST_ERRORforwarding_enabledsiginfo_t_ZN7testing8internal29ParameterizedTestCaseInfoBaseaSERKS1_kColorEncodedHelpMessage_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_jjstringstream_Key_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNSbIwSt11char_traitsIwESaIwEE4_Rep7_M_grabERKS1_S5_~SingleFailureChecker_ZNK7testing8UnitTest22test_case_to_run_countEvpop_backrend_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjsuccessful_test_count_ZNKSs5rfindEPKcjjname_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEpLEioutput_format_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderaSERKS5_rebind~ScopedPrematureExitFileoperator<< _ZN7testing8internal2RE9FullMatchEPKcRKS1_MSG_RSTOnTestPartResult_ZN7testing4Test15HasFatalFailureEv__cxa_atexit_ZN7testing8internal17PrintWideStringToERKSbIwSt11char_traitsIwESaIwEEPSocur_addr_ZN7testing8internal12UnitTestImpl27parameterized_test_registryEv_ZNKSs5beginEv_ZNK7testing8internal13DeathTestImpl7outcomeEv__cxa_guard_acquirefind_first_ofn_cs_precedes__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_output_ZN7testing8internal27PrettyUnitTestResultPrinterD2EvGetTestPartResult_ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_jjoutput_GetPrefixUntilComma_ZN7testing8internal24XmlUnitTestResultPrinter24IsNormalizableWhitespaceEcLock_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6rbeginEvCOLOR_GREENoperator<< _ZN7testing8internal16ForkingDeathTestC2EPKcPKNS0_2REEline_num_S_right_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE8allocateEjPKvMakeFrom_S_empty_rep_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS__Znwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEpLEi__is_null_pointermethod_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc_ZNK9__gnu_cxx13new_allocatorIPcE7addressERKS1__ZNKSs7compareEjjRKSsset_current_test_case_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE13_M_deallocateEPS2_j_ZN7testing7MessagelsEPw__iterator_category__is_normal_iterator_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2_iterator_traitsallocatorUniversalPrintCharArray_ZN9__gnu_cxx13new_allocatorIPcE9constructEPS1_RKS1___alloc_traits >operator!= >__destroy__elems_beforevalue_compare_ZNSt11char_traitsIwE2eqERKwS2__ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE8capacityEv9siginfo_t~TestEventRepeater_ZN7testing10TestResultaSERKS0__ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4dataEv_ZNK7testing8TestCase17test_to_run_countEvseekdirGetCurrentExecutableNametest_case_name__Destroy*, std::basic_string >operator- >_vptr.UnitTestImpl_ZN9__gnu_cxx17__normal_iteratorIPKcSsEpLEi_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEvexpression_textOnTestCaseEndbytes_readtm_hour_ZNSt6vectorISsSaISsEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EESignAndMagnitudeToBiasedoperator<< __trip_countreportable_test_count_M_insert_ZNSt3setISsSt4lessISsESaISsEE4findERKSs_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_jw_ZNK7testing8internal29ParameterizedTestCaseInfoBase17GetTestCaseTypeIdEvCaptureStdout_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3___addressof >_ZNKSt3setISsSt4lessISsESaISsEE4findERKSsunknown fileExecDeathTestArgs_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE8max_sizeEv__gthread_active_ptrkExponentBitCountstatus_ok_ZNK7testing8internal13FloatingPointIdE13exponent_bitsEv_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwj_ZNKSt6vectorIPcSaIS0_EE5frontEv_S_out_ZN7testing8internal24XmlUnitTestResultPrinter18EscapeXmlAttributeERKSs_Destroystrrchr_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE9constructEPS3_RKS3__ZN7testing8internal12UnitTestImpl11RunAllTestsEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4swapERS4__ZN7testing8internal9DeathTest4WaitEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmmEi_HasBase_ZN7testing18TestEventListenersD2Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE9push_backERKS2__vptr.AbstractSocketWriter_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmmEv_ZNK7testing8internal8FilePath5c_strEvdo_widen_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4rendEv_ZN7testing8internal12UnitTestImpl31SetGlobalTestPartResultReporterEPNS_31TestPartResultReporterInterfaceE_ZNK7testing19TestPartResultArray4sizeEv_ZNK7testing8TestCase6PassedEvPopGTestTracesign_bitrebind_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE13_M_deallocateEPS2_jDeathTest_ZNKSt6vectorISsSaISsEE4rendEv_ZNK7testing15AssertionResult7messageEv_ZNK7testing8internal17TestEventRepeater18forwarding_enabledEva_value_paramoperator!__iterator_categoryfputcoperator&operator*operator+iterator_traitsoperator-_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE11_M_allocateEjfputs_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_operator<operator=operator>FormatForComparison_ZNSs9_M_mutateEjjj_ZN7testing17TestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZNKSt3setISsSt4lessISsESaISsEE5beginEv_ZN7testing8internal6Random6ReseedEj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE17_M_insert_unique_ESt23_Rb_tree_const_iteratorIS1_ERKS1_rebindSOCK_RAW_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal7PrintToEhPSo_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcEis_selectedsystemwcsrtombsTestProperty_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EEixEj__valFailFromInternalError_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS1_ESA_RKS1__timer_ZN7testing10TestResult17AddTestPartResultERKNS_14TestPartResultEquot_ZNSt6vectorISsSaISsEE6rbeginEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE6rbeginEvthrow_on_failure_operator|operator~atof_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmIEiatoiatol_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6rbeginEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE3endEvPrintToStringconstruct_ZN7testing4Test13SetUpTestCaseEv_ZN7testing8internal17TestEventRepeateraSERKS1__ZNSt3setISsSt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsEgoodbitwcstombswrite_Rb_tree_iterator_ZN7testing8internal26ThreadLocalValueHolderBaseaSERKS1__Znaj_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEpLEi__k2_M_eraseCreateDirectoriesRecursively_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EES9_exit_status_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EEfull_pattern_S_hexowner__sigpoll_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_M_endEvint_p_sep_by_spacekMaxRangeGetStringFunctor_ZN7testing8internal12AssertHelper16AssertHelperDataaSERKS2__Rb_tree_const_iterator, std::allocator > >_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE15_M_erase_at_endEPS2_IsAbsolutePathfailed_test_case_count_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5frontEv_ZNSs4_Rep10_M_disposeERKSaIcEfputwc_Iterator_Iter_base_M_clone_nodeParseStringFlagFilterMatchesTestfputwsMakeConnection~basic_stringCmpHelperSTRCASEEQiterator_traits<__gnu_cxx::__normal_iterator > > >index_ZNK7testing8TestInfo6resultEv_ZNKSs12find_last_ofERKSsj_ZN7testing8UnitTestC2Ev_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorIiSaIiEEaSERKS1_fcntl_ZNK7testing8internal17TestPropertyKeyIsclERKNS_12TestPropertyE~DeathTestImpl_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderaSERKS7__ZN7testing8internal13FloatingPointIfE8InfinityEv_S_ios_openmode_end_ZN7testing8TestCaseD2EvGTestFlagSaverGetOutputFormat_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcj_ZN7testing8internal18SetInjectableArgvsEPKSt6vectorISsSaISsEErandom_ZN9__gnu_cxx14__alloc_traitsISaISsEE8max_sizeERKS1__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11upper_boundERKSs_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE2atEjstrtold_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEdeEvoperator<< suffix_len_ZNSt6vectorIPcSaIS0_EE5frontEvportset_up_tc__maskTestPassed_M_destroyMSG_MOREnew_holder_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE10_S_on_swapERS3_S5__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE2atEj_M_fill_assign_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE4findERKS1_operator<< _ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPwoperator<< _ZNKSs7_M_iendEv_ZN7testing8internal11ScopedTraceD2Evresume_pos_ZNK7testing8internal12UnitTestImpl18ad_hoc_test_resultEvtm_yday_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_fill_assignEjRKS2__ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_putwcharftell__miter_base<__gnu_cxx::__normal_iterator > >SOCK_STREAM_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_icomparestream_result_to__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE7reserveEj_ZN7testing8internal12AssertHelperaSERKS1_ExecDeathTestSpawnChild__blksize_t_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjj_M_upper_bound_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEixEiPrintCharAndCodeTo_ZN7testing14TestPartResultD2EvAddEnvironment_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_maximumEPKSt18_Rb_tree_node_basepthread_mutex_unlock_ZNKSt6vectorIPcSaIS0_EE3endEvint_curr_symbolset_write_fd~GTestLog_ZN7testing8UnitTest14PushGTestTraceERKNS_8internal9TraceInfoEnum_runnable_tests_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEixEi_ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5beginEv_ZN7testing8internal12AssertHelperD2Ev_ZNK9__gnu_cxx13new_allocatorIcE7addressERKcpthread_key_create_TrivialValueTypesfind_if<__gnu_cxx::__normal_iterator >, testing::internal::TestCaseNameIs>translate_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_wcstoul__is_normal_iteratorsa_data_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_index___mode_t_ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT___cxa_bad_typeid_DestroyFLAGS_gtest_repeat__n1pair, std::_Rb_tree_const_iterator >_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_read_fd_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEpLEi_Destroysrc/gtest-all.cc~basic_stringbufFormatFileLocation_ZNSt6vectorIPcSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EE_M_insert_equalconst_reverse_iteratorwchar_t_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE7destroyERS4_PS3__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6rbeginEv_ZNK7testing7Message9GetStringEv_markers__assignable__copy_move_backwardOnEnvironmentsSetUpStart_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE17_S_select_on_copyERKS5___alloc_traits >_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEaSERKS3_iostatea_write_fd__pad1__pad2__pad3__copy_move_a__pad5a_filefieldssi_overrun_ZNK7testing8internal8FilePath28CreateDirectoriesRecursivelyEvRecordProperty_ZNK7testing8internal13DeathTestImpl7read_fdEv_M_get_Tp_allocatorgetwchar__destroy*>_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_rootEv_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmIEi_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4dataEv_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4rendEv_ZNKSt17_Rb_tree_iteratorIPKcEneERKS2_current_test_case_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE2atEj_ZN9__gnu_cxx3divExxkSizestdout_is_ttycopy_backward_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEplEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEE4baseEv_ZN7testing8internal24XmlUnitTestResultPrinter17OutputXmlTestInfoEPSoPKcRKNS_8TestInfoE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE9push_backERKS2__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZNK7testing8UnitTest18ad_hoc_test_resultEvtotal_test_case_count_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEplEioperator<< __copy_move_backward_aoperator<< _ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE10deallocateEPS2_jcur_pattern_ZN7testing4TestaSERKS0__ZNSt6vectorIPN7testing8TestInfoESaIS2_EE2atEj_ZN7testing15AssertionResult13AppendMessageERKNS_7MessageEIsSubstringImpl >__copy_move_a2_ZN7testing32ScopedFakeTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultEMSG_DONTWAITiterator_traits_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNSt13_Rb_tree_nodeISsE9_M_valptrEvkElidedFramesMarkerset_read_fdParseInternalRunDeathTestFlagstatus__ZN7testing8internal19TypedTestCasePState25VerifyRegisteredTestNamesEPKciS3__ZNSt6vectorIPcSaIS0_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEjRKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_erase_auxESt23_Rb_tree_const_iteratorISsES7_GetMutableTestCase*DeathTest:*DeathTest/*_ZNKSs16find_last_not_ofEPKcj__osRelease_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEmiEi_IO_write_base__distance_ZNSt3setISsSt4lessISsESaISsEE11upper_boundERKSs_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEptEvUniversalPrinter, std::allocator > >GoogleTestFailureException_ZN7testing8TestCase14UnshuffleTestsEvreason_ZN7testing8internal23GetLastErrnoDescriptionEv__miter_base__builtin_memcmp_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6rbeginEvfront_ZN7testing8internal7PrintToEPKwPSowmemsetsetfillkTestcase_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EEixEj__copy_move_backward_a2FormatCompilerIndependentFileLocationpush_backtotal_shards_envsubstr_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE6rbeginEv_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE17_S_select_on_copyERKS3__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EEixEjincrement_death_test_count_ZNKSt6vectorIiSaIiEE5beginEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13_Rb_tree_implIS5_Lb0EE13_M_initializeEv_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE10deallocateERS3_PS2_jst_ino_ZNKSt6vectorIiSaIiEE3endEvxml_element_S_terminal_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7addressERS4_OsStackTraceGetter_Compare_ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestEstrtouliterator_traits_ZNKSs4findEPKcjmbstate_t_ZN7testing17TestEventListener9OnTestEndERKNS_8TestInfoEPrintToString_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE8allocateERS4_jlast_death_test_message_~_Rb_treeStrCaseCmp_ZN7testing8internal35DefaultGlobalTestPartResultReporterC2EPNS0_12UnitTestImplETHREWPrintTestNameis_valid__ZN7testing8internal35DefaultGlobalTestPartResultReporterD0EvMSG_TRUNC_ZN7testing8internal13DeathTestImpl5AbortENS0_9DeathTest11AbortReasonEDefaultPrintTodelimiterIsDigit_ZNSt11char_traitsIcE7not_eofERKi__it__destroy_ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5__ZNKSs12find_last_ofEPKcjj__u_quad_t_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEiputwcTestPartResult__normal_iterator > >shuffle__ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEv_Vector_base >_M_is_leaked_ZN7testing8internal17StreamingListeneraSERKS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6assignEjRKS2__ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwj_ZN7testing8internal20ShouldRunTestOnShardEiii_ZNK7testing8internal10scoped_ptrISsEptEvPrint_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEioperator-*, std::vector > >__uninit_copyoperator<< reserved_names_SelfStart_ZNK9__gnu_cxx13new_allocatorISsE7addressERKSsThis program contains tests written using Google Test. You can use the following command line flags to control its behavior: Test Selection: @G--gtest_list_tests@D List the names of all tests instead of running them. The name of TEST(Foo, Bar) is "Foo.Bar". @G--gtest_filter=@YPOSTIVE_PATTERNS[@G-@YNEGATIVE_PATTERNS]@D Run only the tests whose name matches one of the positive patterns but none of the negative patterns. '?' matches any single character; '*' matches any substring; ':' separates two patterns. @G--gtest_also_run_disabled_tests@D Run all disabled tests too. Test Execution: @G--gtest_repeat=@Y[COUNT]@D Run the tests repeatedly; use a negative count to repeat forever. @G--gtest_shuffle@D Randomize tests' orders on every iteration. @G--gtest_random_seed=@Y[NUMBER]@D Random number seed to use for shuffling test orders (between 1 and 99999, or 0 to use a seed based on the current time). Test Output: @G--gtest_color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D Enable/disable colored output. The default is @Gauto@D. -@G-gtest_print_time=0@D Don't print the elapsed time of each test. @G--gtest_output=xml@Y[@G:@YDIRECTORY_PATH@G/@Y|@G:@YFILE_PATH]@D Generate an XML report in the given directory or with the given file name. @YFILE_PATH@D defaults to @Gtest_details.xml@D. @G--gtest_stream_result_to=@YHOST@G:@YPORT@D Stream test results to the given server. Assertion Behavior: @G--gtest_death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D Set the default death test style. @G--gtest_break_on_failure@D Turn assertion failures into debugger break-points. @G--gtest_throw_on_failure@D Turn assertion failures into C++ exceptions. @G--gtest_catch_exceptions=0@D Do not report exceptions as test failures. Instead, allow them to crash the program or throw a pop-up (on Windows). Except for @G--gtest_list_tests@D, you can alternatively set the corresponding environment variable of a flag (all letters in upper-case). For example, to disable colored text output, you can either specify @G--gtest_color=no@D or set the @GGTEST_COLOR@D environment variable to @Gno@D. For more information, please read the Google Test documentation at @Ghttp://code.google.com/p/googletest/@D. If you find a bug in Google Test (not one in your own code or tests), please report it to @G@D. BoolFromGTestEnv_ZNSt6vectorIPcSaIS0_EE15_M_erase_at_endEPS0__ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwjInteger__find_if<__gnu_cxx::__normal_iterator >, __gnu_cxx::__ops::_Iter_pred >strcasecmpst_ctim_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6assignEjRKS1__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4dataEvtuple_size >_ZNKSt6vectorIPcSaIS0_EE4backEv_Vector_base >_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE8capacityEv_M_leak_hardprefix_len_ZNKSs13find_first_ofERKSsj_ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5__ZN7testing4Test5SetupEvGTestLogSeverity_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE17_S_select_on_copyERKS3__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag_vptr.TestCase_ZNK7testing8UnitTest21total_test_case_countEv_ZNKSt9_IdentityIPKcEclERKS1__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EES9__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE7reserveEj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEv_ZN9__gnu_cxx17__normal_iteratorIPcSsEppEitoupper_vptr.ThreadLocalValueHolderBase_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_rightmostEv Stack trace: _ZN9__gnu_cxx17__normal_iteratorIPcSsEppEv__normal_iterator, std::allocator > >_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEixEi__datCodePointToUtf8_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_fill_assignEjRKS2_test_namenot_bol_ZNSs3endEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmIEi_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE8max_sizeEv_ZN7testing8internal12UnitTestImplD0EvIsRootDirectorymemcpyFloatingPointLE_ZN7testing8internal6RandomaSERKS1__ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperEz_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_range_checkEj_ZNSbIwSt11char_traitsIwESaIwEE4_Rep15_M_set_sharableEvFlushInfoLog_ZN7testing15AssertionResultlsIA12_cEERS0_RKT___s1construct_ZNSt3setISsSt4lessISsESaISsEE6insertESt23_Rb_tree_const_iteratorISsERKSsreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseERKSsHasFailurewcsncpy_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE3endEv_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT_back_ZNK7testing10TestResult6PassedEvcopy_ZN7testing8internal12UnitTestImpl21os_stack_trace_getterEv_S_construct_aux15pthread_mutex_tregex_tmbrtowcresultRandom~ParameterizedTestCaseInfoBase_ZNSt3setISsSt4lessISsESaISsEE5eraseERKSs_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7addressERKS3__ZN7testing8internal12UnitTestImpl14RecordPropertyERKNS_12TestPropertyE__numeric_traits_integerfreeaddrinfo_M_limitoperator<< _ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4rendEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt17_Rb_tree_iteratorIS1_ES9__ZNK7testing8internal8FilePath12CreateFolderEv_ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE3getEv_ZNSt6vectorISsSaISsEE3endEvkPathSeparator_ZN7testing12TestPropertyD2Evvfprintfiterator_traits, std::allocator >*>~Mutexisxdigitmatched_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_disposeERKS1__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_maximumEPSt18_Rb_tree_node_basesi_fd_ZNSt6vectorISsSaISsEE4backEv_next_S_basefieldStringType__is_move_iterator_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE3endEv__niter_base_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8___uninitialized_copy_a_S_scientificerase_ZNK7testing8internal8FilePath15IsRootDirectoryEv_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4rendEv_ZN7testing17TestEventListener11OnTestStartERKNS_8TestInfoEallocator, std::allocator > > >_ZNK7testing10TestResult15GetTestPropertyEi_ZN7testing32ScopedFakeTestPartResultReporterD0Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6resizeEjS2_is_wide_stringstack_trace_depth_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEdeEvchar_type_ZN7testing4TestD0Evwctype_t_ZNKSs5rfindEPKcj_ZNSt6vectorISsSaISsEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EEjRKSs_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPiS1_EEjRKi_DestroyReinterpretBitsai_canonnameConfigureStreamingOutputalso_run_disabled_tests_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEv_ZN7testing15AssertionResultlsISsEERS0_RKT__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_erase_auxESt23_Rb_tree_const_iteratorISsESkipPrefix_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEppEi_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_upper_boundEPSt13_Rb_tree_nodeIS1_ESA_RKS1__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEptEv_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE11_M_allocateEjsaved_sigprof_actionoperator<< low_bits_IteratorR_ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEjj_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11__rb_verifyEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt17_Rb_tree_iteratorISsES7_successspawned__ZNSt13_Bit_iteratorppEi__sigchld_clock_ttear_down_tc__Vector_base >_ZNKSt5ctypeIcE13_M_widen_initEv__destroy_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEvmatchFLAGS_gtest_stack_trace_depth_ZNSt13_Bit_iteratorppEv_ZN7testing17TestEventListener20OnTestIterationStartERKNS_8UnitTestEikDeathTestStyleFlag_ZN7testing8internal18FormatFileLocationEPKci_ZN7testing15AssertionResultlsIA2_cEERS0_RKT__ZNKSt6vectorIPcSaIS0_EE4sizeEvcatch_exceptionsg_injected_test_argvs_ZNKSs4findEcj_M_get_insert_equal_pos_ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv_ZN7testing28FLAGS_gtest_stream_result_toEreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE28_M_get_insert_hint_equal_posESt23_Rb_tree_const_iteratorIS1_ERKS1_PostFlagParsingInit_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE7reserveEj_ZNK7testing8internal12UnitTestImpl28internal_run_death_test_flagEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8pop_backEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5beginEv__positionqsortSocketWriter_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEplEi_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEw_ZNKSs4findERKSsj_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5beginEvkAsIs_ZNK7testing8internal12UnitTestImpl6PassedEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_ES9__ZNSt18_Rb_tree_node_base10_S_maximumEPS__ZNK7testing8UnitTest22failed_test_case_countEv_M_end_of_storage_ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE17_M_insert_unique_ESt23_Rb_tree_const_iteratorISsERKSs__exchange_and_add_singleTearDownTestCase__x_copy_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE7destroyERS4_PS3__ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE8allocateERS3_j_Alloc_pad__uninitialized_copy_a*, std::basic_string >_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE9CreateKeyEvgettervwscanfexponent_bitsputcharselected_Setwoperator<< _ZNK7testing8TestCase21reportable_test_countEvdeath_test_count__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5frontEv_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4rendEv_M_headerinternal_run_death_test_SplitStringfind_last_of~TestEventListener__is_normal_iterator<__gnu_cxx::__normal_iterator > > >WideStringToUtf8_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5emptyEvuninitialized_copy<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*>__oldoperator- >_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5frontEvneedle_expr_ZN7testing8internal12UnitTestImpl18ConfigureXmlOutputEvunit_test__uninitialized_move_if_noexcept_a >reverse_iterator<__gnu_cxx::__normal_iterator > > >~set_ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_Rb_tree_const_iteratorfabs_ZN7testing8internal14CapturedStream14ReadEntireFileEP8_IO_FILE_ZNSt3setISsSt4lessISsESaISsEE4swapERS3___vtt_parm_Destroy_M_ibeginactual_expression_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5clearEv_ZNSt6vectorISsSaISsEE6assignEjRKSsGetRandomSeedFromFlag_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7addressERS3__ZN7testing8internal17AppendUserMessageERKSsRKNS_7MessageEoperator!=*, std::vector > >__enable_if__throw_out_of_range_fmt_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4sizeEvGetTestPartResultReporterForCurrentThread__copy_move_backward_a_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmIEiInternalRunDeathTestFlag_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_j_ZNK7testing8UnitTest21reportable_test_countEvF_OWNER_PGRP_ZNSt6vectorISsSaISsEE5eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EES5__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing14IsNotSubstringEPKcS1_S1_S1___off64_t_Iter_base<__gnu_cxx::__normal_iterator > >, false>__copy_move_a_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE12_M_check_lenEjPKc__gnu_cxx__typeEqFailureexpected_to_be_substringGetCapturedStringExitedUnsuccessfully_ZNK7testing8UnitTest20original_working_dirEvDeleteThreadLocalValue_ZN7testing8internal24HasNewFatalFailureHelperC2Evoperator+, std::allocator >_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC2EPNS0_12UnitTestImplEoperator==_vptr.TestFactoryBase_M_current_ZNSs7replaceEjjjc_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5clearEv_Destroy_ZNKSs13find_first_ofEPKcjj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNK7testing8internal13FloatingPointIdE12AlmostEqualsERKS2__Iter_pred__copy_move_aoperator<< _ZNSt6vectorIiSaIiEE4rendEvtest_case_infos__ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEE4baseEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS1_Earray___copy_move_backward_a2_sigsys_ZN9__gnu_cxx13new_allocatorIiE8allocateEjPKvreverse_iterator<__gnu_cxx::__normal_iterator > > >_S_create_Arg1_Arg2_ZNSt6vectorIPcSaIS0_EE6rbeginEv_ZNK7testing8internal13FloatingPointIfE12AlmostEqualsERKS2__Vector_base, std::allocator >, std::allocator, std::allocator > > >_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4rendEvattributesstack_trace_depth_MSG_FASTOPEN_Destroy_aux_ZN7testing8internal17StreamingListener10FormatBoolEbdefault__ZN7testing14KilledBySignalC2EiFullMatchreverse_iterator<__gnu_cxx::__normal_iterator > > >g_captured_stderrSetGlobalTestPartResultReporterpair, std::allocator > >, bool>PrintAsCharLiteralToabs_errorRegisterParameterizedTests_ZNKSt6vectorIPcSaIS0_EEixEjGetTestTypeId/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0__copy_move_a2 >, __gnu_cxx::__normal_iterator > >test_indexValidateTestPropertyargs__M_insert_uniqueoperator<< UInt32RemoveExtensionkStreamResultToFlagkCurrentDirectoryStringname_template_ZNSt6vectorIiSaIiEE2atEjflag_ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEiiterator_traits_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEdeEv_ZN7testing8internal13HasOneFailureEPKcS2_S2_RKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZNKSt6vectorISsSaISsEE12_M_check_lenEjPKcbool_constantkShuffleFlag_ZNKSt18_Bit_iterator_baseltERKS___uninit_copyCharType_ZNK7testing8TestCase30reportable_disabled_test_countEv_ZN9__gnu_cxx14__alloc_traitsISaISsEE7destroyERS1_PSsungetwcoperator- >__copy_move_achild_argcurrency_symbol_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEptEvgettimeofday_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4findERKS1_locationShowWideCString__wchb_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE11_M_allocateEj_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjwoperator!= >_ZN7testing35FLAGS_gtest_also_run_disabled_testsEIsSubstringPred >_ZNKSt6vectorIiSaIiEE4dataEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_copyEPKSt13_Rb_tree_nodeISsEPS7__S_value~TestPropertyKeyIs_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE9constructEPS2_RKS2___exchange_and_addbasic_string__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >_ZNSt6vectorIPcSaIS0_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmIEinew_allocator_ZNK9__gnu_cxx13new_allocatorIiE7addressERi_Iter_base_M_range_initializefirst_is_TEST_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEi_M_checkglobal_test_part_result_reporter_mutex_AddTestInfo_ZNSt3setISsSt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsES5___size_ZNSt6vectorIPcSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EE_ZNSt10_Iter_baseIPN7testing14TestPartResultELb0EE7_S_baseES2__ZNK7testing10TestResult18HasNonfatalFailureEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZNKSt18_Bit_iterator_basegeERKS__ZNKSs5emptyEv__builtin_unwind_resume_ZN7testing31FLAGS_gtest_death_test_use_forkEunary_function_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6rbeginEvResult_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4backEv_ZNK7testing8TestCase10type_paramEva_current_test_infoAssumeRole_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS2_EES8__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE3endEv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11equal_rangeERKS1__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseEPKSsS7___ostream_type__insert_left_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_S_leftEPSt18_Rb_tree_node_base_ZNKSt6vectorISsSaISsEE4dataEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE3endEv_M_check_length_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_insert_equal_lowerERKS1__ZNKSt23_Rb_tree_const_iteratorISsEptEvdeath_test_use_fork__S_app_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE18_M_fill_initializeEjRKS3__ZNKSs4findEPKcjj_ZN7testing22EmptyTestEventListenerD2Ev_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE8allocateERS3_jMSG_OOB_ZN7testing8internal12UnitTestImpl9listenersEv__syscall_slong_t__alloc_traits, std::allocator > > >__alloc_traits >_ZN7testing8internal15UnitTestOptions17FilterMatchesTestERKSsS3__Identityp_sep_by_space_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE8capacityEvstart_timestampappendIsDirectoryTestDisabled_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE6rbeginEv_ZNK7testing8internal12AssertHelperaSERKNS_7MessageEsetlocale_ZNK7testing8UnitTest17failed_test_countEvbase_ZN7testing8internal17StreamingListenerD0Ev_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6assignEjRKS2_host_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmiEi_Setprecisionfailed_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev__copy_move_bbasic_streambufDefaultGlobalTestPartResultReporter_ZNKSt3setISsSt4lessISsESaISsEE6rbeginEv_IO_write_ptr_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEcGTEST_WARNING_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_rightEPSt18_Rb_tree_node_base_ZN7testing8internal2RE12PartialMatchEPKcRKS1__S_in_ZN7testing17TestEventListener18OnTestIterationEndERKNS_8UnitTestEicopynew_allocator_mode_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE8max_sizeEvwcscasecmpGTestLog_ZN7testing12TestProperty8SetValueERKSs__socket_type_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZN7testing8internal13FloatingPointIdE3MaxEvminpair, bool>SumOverTestCaseList_Vector_base >_ZNSt12_Vector_baseIPcSaIS0_EE12_Vector_impl12_M_swap_dataERS3__ZNK9__gnu_cxx17__normal_iteratorIPKcSsEptEv__ops_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE8max_sizeEvpair_ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE_ZN7testing8internal19FormatForComparisonIxxE6FormatERKx_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11equal_rangeERKS1__ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE10deallocateERS4_PS3_j_Tp_alloc_typetest_detail.xml_Constructfull_regex_len_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5clearEv_ZNKSt3setISsSt4lessISsESaISsEE11lower_boundERKSsSOCK_RDM_ZNSt12_Vector_baseIiSaIiEE11_M_allocateEjCloneCString_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4rendEv_ZNKSt6vectorIPcSaIS0_EE5beginEv_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEcoperator!=, std::allocator >_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEplEiWrite_M_fill_initializekDefaultDeathTestStyle__normal_iterator > >waitpidtimezonetest_property_count_ZNK7testing10TestResult19test_property_countEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EEaSERKS4__Vector_base >reverse_iterator<__gnu_cxx::__normal_iterator > > >an_outcome_S_ate_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_fill_assignEjRKS2_regexecmatches_filter__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11equal_rangeERKS1_expected_posoutcome__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EEaSERKS7__ZNKSt6vectorISsSaISsEE3endEv_ZNKSs7compareEjjRKSsjj_ZN9__gnu_cxx13new_allocatorIiE9constructEPiRKi_ZNSt18_Bit_iterator_base12_M_bump_downEv_ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw_ZNKSt3setISsSt4lessISsESaISsEE5emptyEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6assignEjRKS3__ZN7testing8internal23ScopedPrematureExitFileaSERKS1__Destroy_ZN7testing8internal6String13CStringEqualsEPKcS3__Rb_tree_iterator, std::allocator > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_get_Node_allocatorEvlast_in_range_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4sizeEv_ZNSt6vectorIPcSaIS0_EE2atEj__find_if<__gnu_cxx::__normal_iterator*, std::vector > >, __gnu_cxx::__ops::_Iter_equals_val > >_ZNSsaSEcUniversalPrinter, std::allocator > >_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEv_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc_ZN7testing8internal12UnitTestImpl12environmentsEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4findERKS1_kSignBitMaska_value__uninit_copy*>countlong long unsigned int_ZN7testing8TestInfo15ClearTestResultEPS0__ZNSs6appendERKSs_ZN7testing8internal6String12FormatHexIntEiconstruct_vptr.TestEventListenerCaseInsensitiveCStringEquals_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7addressERKS3_pair, std::allocator > >, bool>kDeathTestUseForkuppercase_ZNSbIwSt11char_traitsIwESaIwEEpLEwparameterized_test_registry__ZNKSbIwSt11char_traitsIwESaIwEE4rendEvconstructFormatTestCaseCount_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5frontEvFLAGS_gtest_stream_result_to_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE8capacityEv_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE9constructEPS2_RKS2_MakeAndRegisterTestInfounsigned char_ZNK7testing8internal24InternalRunDeathTestFlag5indexEv_M_grab_ZNKSt23_Rb_tree_const_iteratorIPKcEdeEv_ZN7testing14IsNotSubstringEPKcS1_PKwS3_stack_traceoperator<< ClearResultregmatch_tFLAGS_gtest_death_test_style_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EEixEj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEi_ZN7testing8internal13ParseBoolFlagEPKcS2_Pb_ZN7testing8internal14ParseFlagValueEPKcS2_bUnitTestOptions_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEv_ZN9__gnu_cxx17__normal_iteratorIPcSsEmmEi__gnu_debug_ZN9__gnu_cxx17__normal_iteratorIPcSsEmmEvSOCK_DGRAM_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE7reserveEj__is_char__outTypeIdHelper_ZNK7testing14TestPartResult9file_nameEv_ZN7testing8internal6String12CloneCStringEPKc_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE8max_sizeEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4backEv_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE9constructEPS3_RKS3_test_info_list_fwide_ZN7testing8internal17StreamingListener5StartEv__iterator_category<__gnu_cxx::__normal_iterator > >_ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5beginEvoutput_file_for_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestEventListener*)>F_OWNER_GID_ZNKSt6vectorIiSaIiEEixEj_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE7pointerEv_ZN7testing8internal27OsStackTraceGetterInterface16UponLeavingGTestEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5clearEv_ZNSs6insertEjPKcj_ZN7testing8internal27PrettyUnitTestResultPrinter9OnTestEndERKNS_8TestInfoE_ZNK7testing8UnitTest15start_timestampEv_ZNKSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE19_M_get_Tp_allocatorEvkChunkSize_ZNSt6vectorIPcSaIS0_EE3endEv~GoogleTestFailureExceptionHandleSehExceptionsInMethodIfSupportedSetDefaultResultPrinterwcsspn~_Iter_pred_ZNSt6vectorISsSaISsEE6resizeEjSsoperator<< _ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5frontEvGetAnsiColorCode__copy_move_backward_a2__alloc_traits, std::allocator > > > >_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE18_M_fill_initializeEjRKS2__Rb_tree_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5clearEv_ZN7testing8internal6String17WideCStringEqualsEPKwS3_streamraw_seed_ZNK7testing8internal12UnitTestImpl15start_timestampEvmax_length_ZNK7testing14TestPartResult6passedEv_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE8max_sizeEvFOpen_sifields_ZN7testing17TestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestEInfinitycan_be_nullwctyperesults_GetTestProperty__copy_move_backward_a_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13_M_clone_nodeEPKSt13_Rb_tree_nodeIS1_E_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4dataEv_Destroy_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE7destroyERS3_PS2_HandleSehExceptionsInMethodIfSupported_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5countERKS1_TEST_name__xstat_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEi_ZN7testing8internal24XmlUnitTestResultPrinter18OutputXmlAttributeEPSoRKSsS4_S4__ZNSs12_M_leak_hardEv_M_insert_unique__Ios_Iostate_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEviterator_traits_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE9constructEPS2_RKS2__ZNSsixEj_ZN7testing8internal6String10FormatByteEh_ZNSt6vectorIN7testing12TestPropertyESaIS1_EEaSERKS3__ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE8allocateEjPKvSetTestPartResultReporterForCurrentThreadOnEnvironmentsSetUpEnd_ZNSspLERKSsAddArguments >size_typeEnvironment_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEvfull_regex_srand_Destroy__delta_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmmEifreeset_catch_exceptionspart_ZN9__gnu_cxx14__alloc_traitsISaIPcEE8max_sizeERKS2_TypedTestCasePState_ZN7testing8internal14GTestMutexLockaSERKS1__ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmmEv_ZN7testing8internal9DeathTest24last_death_test_message_EtypeCreateCodePointFromUtf16SurrogatePair_ZNSt13_Bit_iteratormmEiConfigureXmlOutputalso_run_disabled_tests__ZNSt13_Bit_iteratormmEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE2atEj_ZNSt6vectorIPN7testing8TestCaseESaIS2_EEixEjinit_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEvother_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs_ZNK7testing8internal13DeathTestImpl7spawnedEvOnTestProgramStart_Unwind_Resumeai_flagskDeathTestThrew_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj_ZN7testing11EnvironmentD0EvTearDown_Rb_tree_node_ZNSs4_Rep10_M_refdataEv__cxxabiv1_ZN7testing8internal17Int32FromEnvOrDieEPKci__pos_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE3endEvtype_info_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmiEi_ZNSt6vectorIPcSaIS0_EE4backEvwcsstrTesthost_name__ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4sizeEvkReservedTestSuitesAttributes_ZN7testing7MessagelsERKSbIwSt11char_traitsIwESaIwEEpath_ZN7testing8internal16ForkingDeathTest4WaitEv_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5emptyEvClearAdHocTestResultst_size_ZN7testing8internal24XmlUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4backEv_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE8max_sizeEv_ZNSt6vectorISsSaISsEE2atEj_ZNKSt13_Rb_tree_nodeIPKcE9_M_valptrEvFLAGS_gtest_death_test_use_fork_ZN7testing8internal12UnitTestImpl18death_test_factoryEv_Rb_tree_impl, std::allocator > >, false>_ZN7testing8UnitTest18GetMutableTestCaseEi_ZNKSs5c_strEvreverse_iterator<__gnu_cxx::__normal_iterator > > >exit_code_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE11_M_allocateEjtest_properties__ZN7testing8TestCaseD0Ev_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_rootEvfraction_bits_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE5resetEPS3_testing_Result_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEpLEitm_mday_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEdeEv__niter_baseAppend_ZNKSt12_Vector_baseIPcSaIS0_EE19_M_get_Tp_allocatorEv_Iter_predsi_addr_ZN9__gnu_cxx13new_allocatorIwE9constructEPwRKw_ZN7testing8internal2RE12PartialMatchERKSsRKS1_RunAllTests__miter_base_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE3endEvGetTestCase_M_swap_data_ZNSt10_Iter_baseIPPN7testing11EnvironmentELb0EE7_S_baseES3_~basic_iostream_M_erase_at_enditerator_traitschild_pidallocator_ZNK9__gnu_cxx13new_allocatorIPcE7addressERS1__ZNK7testing8internal8FilePath11IsDirectoryEv_ZNKSt4lessISsEclERKSsS2_precisioncopy<__gnu_cxx::__normal_iterator >, __gnu_cxx::__normal_iterator > >MSG_NOSIGNALkOutputFlag_ZN7testing7MessagelsEPFRSoS1_E_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6assignEjRKS1_ad_hoc_test_result_ZNSt3setISsSt4lessISsESaISsEE5clearEvsingular_form_Iter_base_ZN7testing31TestPartResultReporterInterface20ReportTestPartResultERKNS_14TestPartResultEoperator<< _ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEpLEi__are_samebinary_function__resoperator<< kTestTotalShardsiterator_traits_ZN9__gnu_cxx17__normal_iteratorIPcSsEpLEibasic_streambuf >_ZNSt6vectorISsSaISsEE18_M_fill_initializeEjRKSs_call_addroriginal_working_dir_ZN7testing18TestEventListeners23SuppressEventForwardingEv_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw_ZNKSs7compareERKSsExitSummary_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEE4baseEvtimeval_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4sizeEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EEixEj_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE9push_backERKS3___normal_iterator > >~DeathTest_ZNSbIwSt11char_traitsIwESaIwEE6resizeEjwvector, std::allocator >, std::allocator, std::allocator > > >fopen_ZNSbIwSt11char_traitsIwESaIwEEaSEPKw_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4dataEvdifference_typerebind_ZNSo5flushEvsetprecision_M_value_field_ZN9__gnu_cxx14__alloc_traitsISaIPcEE10deallocateERS2_PS1_j_S_badbit~OsStackTraceGetterInterfacecaller_frame__ZNSs7_M_dataEPcwcslenline_endtype_param__ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj_ZNK7testing8internal12UnitTestImpl17failed_test_countEvenvironSOCK_CLOEXEClisteners_kInternalRunDeathTestFlag5div_tGetGlobalTestPartResultReporterScopedTracewcstoullboolalpha_ZN7testing8internal16ForkingDeathTest13set_child_pidEi_ZN7testing8internal13FloatingPointIfE24SignAndMagnitudeToBiasedERKj_Link_type_ZN7testing8internal14StackGrowsDownEv_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6resizeEjS2_Normalizetest_propertywrite_fd_swapreverse_iterator, std::allocator > > >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE12_M_check_lenEjPKcscientificCaptureStream_S_showposGTEST_TOTAL_SHARDS_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE3setERKS5_predicate_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEdeEvpair, std::allocator > >, std::_Rb_tree_iterator, std::allocator > > >_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5beginEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEPKw_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwDelete_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_valueEPKSt18_Rb_tree_node_baselldiv_t_ZN7testing8internal30GetBoolAssertionFailureMessageERKNS_15AssertionResultEPKcS5_S5_~_Alloc_hider_M_create_nodedeath_test_count_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEpLEi_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5frontEv_ZN7testing8UnitTest27parameterized_test_registryEv_ZNSbIwSt11char_traitsIwESaIwEE5eraseEjj_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEpLEiBiggestConvertible_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4dataEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE3endEvMSG_TRYHARD_ZN7testing8internal18OsStackTraceGetter17CurrentStackTraceEii_IO_buf_basematches_filter_ZNSt13_Bit_iteratorpLEi__FILE__pthread_internal_slist~InternalRunDeathTestFlag_ZNKSt18_Bit_iterator_baseneERKS__ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEixEifilename__ZNSt18_Bit_iterator_base10_M_bump_upEv_ZNSbIwSt11char_traitsIwESaIwEE5clearEv_S_endTestBody_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4backEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEdeEvget_allocator_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE12_M_check_lenEjPKc_ZNSt14_Bit_reference4flipEv_ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE8allocateEjPKvcaptured_stream_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEixEikUnknownFile_ZNKSt12_Vector_baseISsSaISsEE19_M_get_Tp_allocatorEv_ZNSt6vectorIPcSaIS0_EEaSERKS2_test_indices_operator!=<__gnu_cxx::__normal_iterator > >_ZNK9__gnu_cxx13new_allocatorISsE7addressERSsPrintTo_ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_uniqueERKS1__ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEikStdErrFileno_ZN7testing8internal13DeathTestImpl26ReadAndInterpretStatusByteEv~DefaultDeathTestFactory_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEv_ZNKSt13_Rb_tree_nodeISsE9_M_valptrEv_ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7destroyEPS4_SuppressTestEventsIfInSubprocessAddArgument_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEppEv_M_initializefastmap_accurate_ZNSbIwSt11char_traitsIwESaIwEE7_M_leakEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSs7replaceEjjPKcjkBreakOnFailureFlaglong unsigned int__uninitialized_copy_a_ZN7testing8internal20SingleFailureCheckerC2EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSsword_list_ZN7testing8internal12UnitTestImpl41SetTestPartResultReporterForCurrentThreadEPNS_31TestPartResultReporterInterfaceEtm_isdst_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE8max_sizeEvint_n_sign_posn_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE9push_backERKS2_operator!= >HasGoogleTestFlagPrefix_ZNKSt6vectorIPcSaIS0_EE2atEj_ZNKSbIwSt11char_traitsIwESaIwEE9_M_ibeginEv_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE3getEv_ZN7testing8internal16InDeathTestChildEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE9push_backERKS1_TypeParam_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEixEiegptr_ZNKSt9type_infoeqERKS__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE__intptr_tClearTestPartResultsoperator==<__gnu_cxx::__normal_iterator > >CharFormatvfwprintf_ZN7testing17TestEventListener16OnTestPartResultERKNS_14TestPartResultE_ZNK7testing8UnitTest11GetTestCaseEi_ZN7testing8internal7g_argvsE_ZNSt14_Bit_referenceaSERKS_EscapeXmlText_ZNSbIwSt11char_traitsIwESaIwEE6insertEjjw_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11lower_boundERKSsstrchr_ZNKSt5ctypeIcE8do_widenEc__normal_iterator > >fixed_IO_read_base_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4rendEv__find_if<__gnu_cxx::__normal_iterator >, __gnu_cxx::__ops::_Iter_pred >_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEptEv_ZNSbIwSt11char_traitsIwESaIwEE4swapERS2__ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4rendEv_ZNKSt6vectorIiSaIiEE5emptyEvScopedFakeTestPartResultReporterkThrowOnFailureFlag__alloc_ZNSt11char_traitsIcE2ltERKcS2__ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE3getEvIsSubstringPred_M_insert_ZNK7testing8TestInfo13is_reportableEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4rendEvsockaddr_ZN7testing8DoubleLEEPKcS1_dd__debug_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4backEvfull_name_Swallow_assignwcstod_ZNK7testing14TestPartResult7messageEvreset_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE8max_sizeEv_ZNSt6vectorIiSaIiEE4dataEv_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7addressERKS3___addressofuninitialized_copy_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv_ZN7testing8internal15UnitTestOptions13MatchesFilterERKSsPKcreg_syntax_t_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate_ZNK7testing8internal8FilePath15RemoveExtensionEPKc_vptr.Test_ZN7testing8internal13FloatingPointIfE3MaxEvwmemcmp_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S5_S5_value_type_ZNSs15_M_replace_safeEjjPKcjsuffix_Const_Link_type_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseERKS1_this_test_info_ZN7testing8internal13ExecDeathTest32GetArgvsForDeathTestChildProcessEvconstructInitGoogleTestImpl_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmiEi_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE10deallocateEPS2_j_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEStreamableToStringskipwshas_owner_operator!=_Iter_base__is_move_iterator_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4sizeEv__cxa_rethrow_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE7destroyERS4_PS3__ZNSt6vectorIN7testing14TestPartResultESaIS1_EEixEjsocket_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEi_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE18_M_fill_initializeEjRKS2_property_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKw~EmptyTestEventListener_ZN7testing11EnvironmentD2Ev_ZNK7testing10TestResult17GetTestPartResultEirebind_Iter_base_Rb_tree_colortv_sec_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcjuse_color_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5clearEv_ZN7testing8UnitTest17AddTestPartResultENS_14TestPartResult4TypeEPKciRKSsS6__ZNSt6vectorIPcSaIS0_EE7reserveEj_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE12_Vector_impl12_M_swap_dataERS5_test_properites_mutex__unused2IN_PROGRESSpid_t__are_same__destroyUniversalTersePrinterPrintCharsAsStringToIsSubstringImpl >GetStreamset_should_run_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5beginEvbtowc_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5frontEv_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__M_node_counttm_ming_init_gtest_countMSG_WAITALLoperator<< _ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5beginEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE8max_sizeERKS3__ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_jjbasic_stringstrcmp_ZNK7testing8internal12UnitTestImpl6FailedEv_ZN7testing8internal12UnitTestImpl24ConfigureStreamingOutputEv_ZNSt6vectorIiSaIiEE6rbeginEv_ZN7testing8internal30WriteToShardStatusFileIfNeededEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc_ZN7testing8internal24HasNewFatalFailureHelper20ReportTestPartResultERKNS_14TestPartResultE_ZNK9__gnu_cxx13new_allocatorIPKcE8max_sizeEv_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_ES7_ai_addr_ZNK9__gnu_cxx13new_allocatorISsE8max_sizeEv__strThreadLocalfailuresfwscanf~AbstractSocketWriter_DestroyCreateFolder_ZN7testing9internal220PrintBytesInObjectToEPKhjPSoisspace_ZNKSs8_M_limitEjj_ZN7testing16AssertionFailureERKNS_7MessageEglobal_test_part_result_repoter__ZNSs4swapERSs_ZNKSt3setISsSt4lessISsESaISsEE4rendEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE17_M_create_storageEj__uninitialized_move_if_noexcept_a >_ZN7testing8internal12UnitTestImpl11FilterTestsENS1_18ReactionToShardingE_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEplEifailure_message_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_lower_boundEPKSt13_Rb_tree_nodeIS1_ESB_RKS1__ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jjStreamableToStringAlmostEqualsInDeathTestChild_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6rbeginEvShouldShardoperator<< _ZNK9__gnu_cxx13new_allocatorIwE7addressERKw_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEppEi_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8max_sizeEv_ZNKSt17_Rb_tree_iteratorISsEeqERKS0__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_get_Node_allocatorEv_ZN7testing14InitGoogleTestEPiPPcfind_if<__gnu_cxx::__normal_iterator >, testing::internal::TestPropertyKeyIs>GetEnviron_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEppEvdefault_val_ZNK7testing8TestInfo11value_paramEv_ZNSt3setISsSt4lessISsESaISsEE11lower_boundERKSs_ZNSs6insertEjRKSsjj_ZN7testing14InitGoogleTestEPiPPwCmpHelperSTRNEMSG_WAITFORONE_ZN7testing8internal9MutexBase6UnlockEv_ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EEoperator&=pattern_DeathTestFactory_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_E_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7addressERS3__ZN7testing8internal24XmlUnitTestResultPrinterD2Ev_ZN7testing8internal18OsStackTraceGetterD0EvTestEventListeners_ZNSt11char_traitsIcE4moveEPcPKcj~AssertHelperkTestShardIndex_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11upper_boundERKSs_ZN7testing8internal17StreamingListener12SocketWriter14MakeConnectionEv_ZNK7testing8internal13FloatingPointIfE13fraction_bitsEv_M_refcopy_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing12TestPropertyES4_EET0_T_S6_S5_si_uid_ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv_Destroy_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7destroyEPS3__ZN7testing8internal26GoogleTestFailureExceptionC2ERKNS_14TestPartResultEsa_mask_S_floatfieldsizetypeIsSubstringImpl_ZN7testing4TestC2Ev_ZNSs4_Rep10_M_refcopyEv~TestPartResultReporterInterfacepremature_exit_file_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwjj__errno_location_ZNSt11char_traitsIwE3eofEv_ZNKSt23_Rb_tree_const_iteratorIPKcEeqERKS2_new_allocator_ZNKSt6vectorIPcSaIS0_EE6rbeginEvoperator()_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_rightmostEv_ZNK7testing10TestResult6FailedEv_M_get_insert_unique_pos_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE19_M_get_Tp_allocatorEv_ZN7testing16AssertionFailureEvMSG_SYN__value_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEi_ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT__ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE17_S_select_on_copyERKS4_success_scoped_ptr, std::allocator > >sigactiondirectory_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEveofbit_ZNSt3tr110tuple_sizeINS_5tupleIIEEEE5valueE_ZNSs4_Rep26_M_set_length_and_sharableEj_ZNSt6vectorIPcSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6_CaseInsensitiveWideCStringEquals_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8key_compEv_ZNSt13_Rb_tree_nodeIPKcE9_M_valptrEvgtest_trace_stack_should_ZNSt11char_traitsIwE4copyEPwPKwj_ZNSt10_Iter_baseIPPcLb0EE7_S_baseES1_printf_ZNSt12_Vector_baseISsSaISsEE12_Vector_impl12_M_swap_dataERS2__ZN7testing8internal13DeathTestImpl10set_statusEi__lentm_monrepeat__ZN7testing8TestCase22TestReportableDisabledEPKNS_8TestInfoEsi_pid__off_t_M_get_Node_allocator__resultdefault_global_test_part_result_reporter_factory_new_allocatorrebindDoubleNearPredFormatreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_valueEPKSt13_Rb_tree_nodeIS1_Eflag_str_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE8allocateERS3_j_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPc_ZNKSt23_Rb_tree_const_iteratorISsE13_M_const_castEv_ZNKSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE19_M_get_Tp_allocatorEv_M_rightmostIsSpace_ZNSolsEd_ZNSolsEf_ZNSolsEi_ZNSolsEjdiffobj_bytesShuffleRange_syscall_ZNSolsEx_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EEkBitCountmarker__wch_ZN7testing8internal12UnitTestImpl14UnshuffleTestsEvlistener_Arg__copy_move_boperator== >_ZdaPv__alloc_swap, std::allocator > >, true>StackGrowsDownFloatingPointUnionoperator++ignore_ZNSt10_Iter_baseIPPN7testing8TestCaseELb0EE7_S_baseES3_operator+=__glibc_reserved4__glibc_reserved5range_width~Test_ZNK7testing8TestCase18ad_hoc_test_resultEv__string_typePrintFailedTestsallocator, std::allocator > >trace_ZNKSt14_Bit_referenceltERKS__ZN7testing8internal27PrettyUnitTestResultPrinter15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal21UniversalTersePrinterIPKwE5PrintES3_PSoInitGoogleTestImpl_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmIEibasic_string, std::allocator >flag_lenCapturedStreamwcsncat__lhs_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEaSERKS4__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEnew_allocatorsetstate_ZNSt6vectorIiSaIiEE14_M_fill_assignEjRKi_ZN7testing8internal9DeathTestC2Ev_ZN7testing8internal9Arguments4ArgvEv_ZNSbIwSt11char_traitsIwESaIwEE6resizeEj_ZNK7testing8TestCase11GetTestInfoEi_ZNSt11char_traitsIwE7compareEPKwS2_j_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEptEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5frontEvoperator--Delete_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8max_sizeEv__elision_data_Containeroperator-=operator->FormatTimeInMillisAsSecondsShuffleoperator<< _ZN7testing8internal15GetTimeInMillisEvtm_year_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5frontEvLIVED_ZNSs16_S_construct_auxIPcEES0_T_S1_RKSaIcESt12__false_typereverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >GetMutableTestInfo_ZNK9__gnu_cxx17__normal_iteratorIPcSsEdeEvMSG_DONTROUTE_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8pop_backEv~_Vector_impl_M_widen_initargsto_int_type_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE12_M_check_lenEjPKc_M_set_sharableenvironments_ZSt7nothrow_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE12_Vector_impl12_M_swap_dataERS5___iter_equals_val >unit_test__ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmIEi_ZNKSbIwSt11char_traitsIwESaIwEE4dataEvallocateoperator<< ai_nextParseInt32Flagnew_value_ZN9__gnu_cxx17__normal_iteratorIPcSsEmIEi__is_move_iterator, std::allocator >*>__builtin_strstr_ZNSt6vectorISsSaISsEE9push_backERKSs_IO_write_end~TestCaseNameIs__uninitialized_copy_a_IO_save_basepptrtm_wday_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE3setERKS3_kExponentBitMask_ZNSt11char_traitsIwE7not_eofERKj_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5frontEv_ZN7testing32ScopedFakeTestPartResultReporterC2ENS0_13InterceptModeEPNS_19TestPartResultArrayE__are_same_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_minimumEPKSt18_Rb_tree_node_base_ZN7testing8internal18g_init_gtest_countE_ZN7testing8UnitTest4implEva_typetest_part_resultlast_death_test_case__ZNSt12_Vector_baseISsSaISsEE13_M_deallocateEPSsj_ZNK9__gnu_cxx17__normal_iteratorIPcSsEixEi_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7destroyEPS3__ZNKSt6vectorIPcSaIS0_EE8capacityEv_ZNSt11char_traitsIwE12to_char_typeERKjdistance__new_start_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_S_keyEPKSt18_Rb_tree_node_baseSetInjectableArgvsos_stack_trace_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEE4baseEv_ZNK9__gnu_cxx13new_allocatorIPcE8max_sizeEvint_type~TestEventListeners_ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEvMSG_PEEKremoveval1val2_ZN7testing8internal24XmlUnitTestResultPrinter29TestPropertiesAsXmlAttributesERKNS_10TestResultEsegmentn_sign_posnactual_message_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4backEva_key_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_rightEPKSt18_Rb_tree_node_base_ZNK7testing8internal8FilePath14RemoveFileNameEvwrite_fdrebind, std::allocator > > >captured_fd_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE13_M_deallocateEPS1_jWait_ZN7testing17TestEventListener18OnTestProgramStartERKNS_8UnitTestEOnTestIterationStartuninitialized_copy*, std::basic_string*>_ZNKSt6vectorIPcSaIS0_EE8max_sizeEv_M_end_ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE19_M_get_Tp_allocatorEvFormatByteiterator_traits_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEE4baseEv_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_basekDeathTestReturned_S_copy_chars_ZNKSt6vectorIPcSaIS0_EE5emptyEvtotal_test_count_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEjRKS3_IsValidXmlCharacter_ZNSt6vectorIPN7testing8TestCaseESaIS2_EEaSERKS4__ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E8MakeFromEv_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEpLEiArgumentsstreamable_ZNSs7_M_copyEPcPKcj_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEaSERKS7_signum__Rb_tree_impl_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_minimumEPSt18_Rb_tree_node_baseColoredPrintfkColorFlag~Environmentsa_sigaction_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmIEi_IteratorL_ZN7testing8internal10scoped_ptrIKSsE5resetEPS2__ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE9push_backERKS2__ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwjstack_sizesi_stimeshard_testsGetNextRandomSeed__arg_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmIEi_Iter_baseallocator >_ZN7testing10TestResultD2Ev_M_insert_equal_lowerreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_ZNSt13_Bit_iteratormIEi_ZN7testing15AssertionResultlsIA11_cEERS0_RKT__ZNK7testing8UnitTest4implEv_ZN9__gnu_cxx13new_allocatorISsE9constructEPSsRKSs_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEdeEv_ZNSt11char_traitsIcE3eofEvfastmap_ZNKSt3setISsSt4lessISsESaISsEE11equal_rangeERKSspthread_key_tmmap_ZNK7testing8UnitTest30reportable_disabled_test_countEvgetaddrinfo_Iter_base, std::allocator >*, false>TestReportablefull_flag__niter_base*>_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5countERKSs_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwjst_uid__builtin_strrchrstr_valdefault_per_thread_test_part_result_reporter_thousands_sep_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_destroy_nodeEPSt13_Rb_tree_nodeISsE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_insert_lowerEPSt18_Rb_tree_node_baseRKS1__ZN7testing8internal17TestEventRepeater7ReleaseEPNS_17TestEventListenerE_ZNK7testing8internal24InternalRunDeathTestFlag4lineEv__copy_move_bPrintByteSegmentInObjectTo_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4rendEvInt32_ZNK7testing8internal2RE7patternEv_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmmEv_ZNSt6vectorISsSaISsEED2Ev_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKccopya_test_case_name_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS5___copy_move_bEscapeXmlAttribute_ForwardIterator_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEE4baseEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_Bit_reference_ZN7testing8internal24XmlUnitTestResultPrinteraSERKS1_gtest_trace_stack_ZNSt8ios_base4setfESt13_Ios_Fmtflags_ZN7testing8internal12UnitTestImpl20ClearAdHocTestResultEv_ZN7testing8internal15NoExecDeathTestD2Evwords_ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEdeEvstart_timestamp__ZNKSt17_Rb_tree_iteratorISsEdeEv_ZNKSs7compareEjjPKcj_ZNK7testing8UnitTest6PassedEv_Destroy_aux_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5beginEvcopy_backward_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE11_M_allocateEjdestroy_ZNSs6insertEjPKc_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE5resetEPS2__ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6rbeginEv_ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEig_help_flagFlagToEnvVar_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEppEia_file_name_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5emptyEvwidenF_OWNER_TIDnonfatally_failed_ZN7testing8internal19UniversalPrintArrayEPKcjPSoReactionToSharding__quad_tenable_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE10deallocateEPS3_j_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_upper_boundEPSt13_Rb_tree_nodeISsES8_RKSs_ZNSt3setIPKcSt4lessIS1_ESaIS1_EEaSERKS5_file_stat_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_beginEvgai_strerror__new_finishcopy_backwardtest_case_to_run_countFLAGS_gtest_show_internal_stack_framesnew_allocator_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6rbeginEvgtest_flag_saver__ZNSt6vectorISsSaISsEE7reserveEjoperator<< kPathSeparatorString_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsEOnTestEndbitsRemoveTrailingPathSeparator~ScopedTracereverse_iteratoris_attribute_ZNKSt6vectorIiSaIiEE4rendEv_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7destroyEPS2__ZNKSt6vectorIPcSaIS0_EE12_M_check_lenEjPKcdistance__normal_iterator > >wcsncmp_ZNKSt18_Bit_iterator_baseleERKS__ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE10deallocateERS3_PS2_j_ZNK7testing8internal8FilePath7IsEmptyEv__normal_iterator > >_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEdeEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5frontEv_M_right_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4findERKS1___copy_move_a2_ZNK7testing8internal8FilePath27RemoveTrailingPathSeparatorEvbase_name_M_get_insert_hint_unique_pos_ZN7testing8internal15NoExecDeathTestD0Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Evtowctrans_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_beginEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSs2atEj__uninitialized_copy_afilenoRunTearDownTestCase_ZN7testing17TestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4swapERS4__ZN7testing8internal11CmpHelperLEEPKcS2_xxcharoperator- >_S_refcount__digits_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_get_Node_allocatorEv__normal_iterator > >_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwj__is_normal_iteratorfixture_class_id_ZN7testing8internal27PrettyUnitTestResultPrinter27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEvswprintf_Value_ZNSs4_Rep10_M_destroyERKSaIcE_ZN7testing4Test8TestBodyEvUniversalPrinterdetailexpr1expr2_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE28_M_get_insert_hint_equal_posESt23_Rb_tree_const_iteratorISsERKSs__uninit_copy_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE15_M_erase_at_endEPS2___are_samefixture_class_id__ZN7testing28FLAGS_gtest_break_on_failureEFLAGS_gtest_print_timeType_IsMove_ZN7testing8internal29PrintFullTestCommentIfPresentERKNS_8TestInfoEoperator<< __copy_move_backward_a__is_normal_iterator_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EEixEjtest_info_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE23_M_get_insert_equal_posERKSs_ZNSt6vectorIiSaIiEE3endEvMutexBase_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6resizeEjS2__ZN7testing14IsNotSubstringEPKcS1_RKSsS3_tv_usec_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE3endEvHelpermemmoveFindLastPathSeparatorpair, std::_Rb_tree_iterator >_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE10deallocateERS4_PS3_j_ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_j_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4rendEvCOLOR_DEFAULT_ZNK7testing8internal12UnitTestImpl21reportable_test_countEvto_char_type_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7destroyEPS3_length_ZN7testing8internal13CaptureStderrEvwide_c_str_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_equal_ESt23_Rb_tree_const_iteratorISsERKSs_ZN7testing8internal6String32CaseInsensitiveWideCStringEqualsEPKwS3_operator<<_M_set_leaked_ZNSt6vectorIiSaIiEE15_M_erase_at_endEPi_ZN7testing8internal11CmpHelperGTEPKcS2_xx_M_clonesigset_t_ZNK7testing14TestPartResult11line_numberEvcapacityoperator()<__gnu_cxx::__normal_iterator*, std::vector > > >_ZN7testing8internal26GoogleTestFailureExceptionD0Ev_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmiEi_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Evsetf_ZN7testing8TestCase19RunTearDownTestCaseEvFileOrDirectoryExists_ZNSbIwSt11char_traitsIwESaIwEE6appendEjw_ZN7testing8internal17TestEventRepeater11OnTestStartERKNS_8TestInfoEthis_fixture_id_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEdeEv_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKwsetwhas_tests_to_run_ZNK7testing8internal8FilePath21FindLastPathSeparatorEvsigemptyset_ZNSspLEPKcoperator==_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_M_endEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmmEi_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmIEiis_nan_ZNKSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEvvalue_compparent_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEpLEi__first_ZN7testing24ValidateTestPropertyNameERKSsRKSt6vectorISsSaISsEECOLOR_RED__copy_move_backward_a2ExecDeathTestoperator<< _ZN7testing8internal17TestEventRepeater22set_forwarding_enabledEb_ZN7testing8internal13ExecDeathTestD2Ev__tmpkRepeatFlag_ZN7testing8internal12UnitTestImplD2Ev_ZNKSs6substrEjjhaystack_ZN7testing8internal12UnitTestImpl19current_test_resultEvkey_type_M_rootExtractSummarymbsrtowcsDefinedTestIter_S_beg_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlUnitTestEPSoRKNS_8UnitTestE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_insert_equal_lowerERKSsoperator>=number_ZNK7testing8internal12UnitTestImpl22failed_test_case_countEvvalue_str_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11__rb_verifyEvOtherOperand_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE9CreateKeyEv_ZN7testing8internal13PrintStringToERKSsPSo_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4dataEvWideCStringEquals_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5frontEvkAlsoRunDisabledTestsFlagbasic_ostream_ZN9__gnu_cxx14__alloc_traitsISaISsEE8allocateERS1_j~UnitTestImpl_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEi_S_construct_ZNSt10_Iter_baseIPiLb0EE7_S_baseES0_listeners_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEixEi_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEv_ZN7testing8internal11CmpHelperEQEPKcS2_xx_ZNSt6vectorISsSaISsEE5clearEv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6rbeginEv_ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEixEi__pid_tAbortReason_ConstructkReservedTestCaseAttributes_ZNK7testing8internal10scoped_ptrIKSsEptEv_ZNKSt6vectorISsSaISsEE4backEvint_frac_digits_ZNSt12_Vector_baseIPcSaIS0_EE11_M_allocateEj_ZNK7testing8UnitTest17current_test_caseEv_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEppEi_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKw_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5emptyEv_ZNKSt17_Rb_tree_iteratorIPKcEptEv_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEppEv_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5___is_normal_iterator_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEdeEv__copy_move_b_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseERKS1_vector >PrintCharAndCodeTo_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE3endEv_ZN9__gnu_cxx13new_allocatorIcE7destroyEPcs1_expressionOutputXmlTestInfo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5clearEv_ZNSt8ios_base9precisionEi_ZN7testing8internal19UniversalPrintArrayEPKwjPSo_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4dataEv__uninitialized_move_if_noexcept_a >_M_iend_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE3getEvTearDownEnvironmentkDeathTestCaseFiltersi_tidnewline_anchorst_rdev__sigaction_handler_S_empty_rep_storage__copy_move_a2_ZN7testing8UnitTest3RunEviterator_traitsg_argvs_ZN9__gnu_cxx13new_allocatorIPcE7destroyEPS1__ZNSs6assignEPKcExecDeathTestChildMainlocaltime_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE8capacityEv_ZNKSbIwSt11char_traitsIwESaIwEE7_M_dataEv_ZN7testing8internal14DeathTestAbortERKSs_ZN7testing8internal14CmpHelperSTRNEEPKcS2_S2_S2_value_param___pfnStreamableToStringold_reporter__ZNSs6resizeEjcTimeInMillis_ZN7testing32ScopedFakeTestPartResultReporterD2Ev_DestroykMaxUlpsmemcmp_ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSoforwarding_enabled__M_check_len__is_normal_iterator_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11lower_boundERKS1___rb_verify_ZN7testing28FLAGS_gtest_throw_on_failureE_S_bin~ScopedFakeTestPartResultReporterint_n_sep_by_space_ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6__ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE2atEj_IO_marker_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE8max_sizeEv_ZNK7testing14ExitedWithCodeclEi_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEdeEvtest_case_indices__ZN7testing8internal11g_help_flagE_FacetDeathTestOutcome_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE5resetEPS6_print_time__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE18_M_fill_initializeEjRKS1__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5beginEv_ZNSs6appendERKSsjjIsNotContainer_ZN7testing8internal10ParseInt32ERKNS_7MessageEPKcPiAssertHelperDataFLAGS_gtest_break_on_failure_Destroy_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7addressERS4__ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE12_Vector_impl12_M_swap_dataERS5_re_nsubGetAbsolutePathToOutputFilehas_new_fatal_failure_INTERCEPT_ONLY_CURRENT_THREADiterator_traits_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEdeEvDefaultPerThreadTestPartResultReporter_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4swapERS4_bytes_last_read_BI1_BI2_ZNKSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE19_M_get_Tp_allocatorEvptr__ZN7testing8UnitTest9listenersEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEE4baseEvai_socktype__is_move_iterator_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEiPrintFullTestCommentIfPresentwctrans_S_truncscoped_ptr, std::allocator > >_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEv_ZNKSs7compareEPKc__pad4_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5beginEvset_elapsed_time_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEixEi_S_ios_iostate_end_ZN7testing8internal17GetCapturedStderrEvFLAGS_gtest_coloroperator<< ~new_allocator~ThreadLocal_ZN7testing8internal8FilePath22GenerateUniqueFileNameERKS1_S3_PKcwidth_ZNSbIwSt11char_traitsIwESaIwEE4_Rep12_S_empty_repEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx13new_allocatorIwE7destroyEPw_ZNKSt6vectorISsSaISsEE4sizeEv__uninitialized_move_if_noexcept_a >_ZNKSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13get_allocatorEvoperator<< strtoll~UnitTestReadReportFailureInUnknownLocation_ZN7testing8internal12UnitTestImpl28CurrentOsStackTraceExceptTopEi__baseInt32FromGTestEnv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEdeEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >user_msgerrnum_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEixEi__copy_move_backward_a2emptyinstance_ZN7testing8internal29ParameterizedTestCaseRegistryaSERKS1_val1_ss__copy_move_b__end_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE10deallocateERS3_PS2_jobject_ZN7testing8internal14CapturedStream11GetFileSizeEP8_IO_FILE_ZN7testing18FLAGS_gtest_repeatE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEdeEv__mbstate_t_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_maximumEPKSt18_Rb_tree_node_baseDeleteSelf___normal_iterator > >_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S6_S6_tz_minuteswestkDefaultOutputFile_M_valptr_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE18_M_fill_initializeEjRKS1__ZN7testing8internal17TestEventRepeaterD0Ev_ZNKSt23_Rb_tree_const_iteratorIPKcE13_M_const_castEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEpLEitype_param_S_internal_ZN7testing8internal10scoped_ptrISsE7releaseEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEdeEvconst_referenceOnEnvironmentsTearDownStart__uninit_copy_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE10_S_on_swapERS4_S6__ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7addressERKS2_output_dir_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE3endEvset_last_death_test_message_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5beginEv_ZN7testing16AssertionSuccessEvport_num_COLOR_YELLOWrebindreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSsreservedeath_test_index_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEixEi_M_disjunct_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwj_M_leak_ZNSs7_M_leakEv~Arguments_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEv_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPiS1_EERKierrors_str__is_move_iteratorfloatfieldg_executable_path_ZNKSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE13get_allocatorEvForEach, void (*)(testing::TestInfo*)>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_insert_equalERKSsrm_so_ZNSt6vectorIPcSaIS0_EE4swapERS2_elapsedfclose_ZN7testing8internal8FilePath11ConcatPathsERKS1_S3__S_unitbuf_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEixEi_ZNKSt4lessIPKcEclERKS1_S4_kHexEscapeFLAGS_gtest_internal_run_death_testAssertionSuccessright_ZNKSbIwSt11char_traitsIwESaIwEEixEj_ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEjRKS0__ZNKSs2atEj_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE7releaseEv_ZNK7testing8internal13FloatingPointIdE4bitsEv_ZNKSbIwSt11char_traitsIwESaIwEE6_M_repEvallocatorline__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5emptyEvoperator< , std::allocator >_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE17_S_select_on_copyERKS3__ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEixEioriginal_dir_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZN7testing8internal7PrintToEwPSo_ZNSbIwSt11char_traitsIwESaIwEE6rbeginEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_insert_lowerEPSt18_Rb_tree_node_baseRKSsMessage_M_parent_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5beginEv_ZNKSbIwSt11char_traitsIwESaIwEE6rbeginEv6ldiv_t_ZNKSt17_Rb_tree_iteratorIPKcEeqERKS2_EmptyTestEventListener_Destroyaddrinfoiterator_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_lower_boundEPKSt13_Rb_tree_nodeISsES9_RKSsmemset_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE8max_sizeEv_M_length_ZN7testing8internal11CmpHelperGEEPKcS2_xxchar_traitsFLAGS_gtest_random_seed_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE10deallocateERS3_PS2_jfactoryregex__Setfill_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4backEvreverse_iterator >pthread_mutex_init_ZNKSs9_M_ibeginEv_ZN7testing8internal6String28CaseInsensitiveCStringEqualsEPKcS3_insert_ZN7testing8internal17TestEventRepeater13OnTestCaseEndERKNS_8TestCaseE__miter_baseTypeWithSize<4u>_ZNSt12_Vector_baseISsSaISsEE19_M_get_Tp_allocatorEv_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE6insertERKS1__ZN7testinglsERSoRKNS_14TestPartResultEHasOneFailureCmpHelperSTREQ_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8pop_backEvdefined_test_names__ZNK7testing10TestResult15test_propertiesEvCmpHelperSTRCASENE_ZN7testing8UnitTestD2Ev_ZNSt11char_traitsIwE2ltERKwS2__ZN7testing18FLAGS_gtest_outputE_Iter_equals_valexit_code__ZNSt6vectorIiSaIiEE7reserveEj_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEi_Ios_SeekdirListTestsMatchingFilter_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_rebind, std::allocator > >_ZN7testing8internal37FormatCompilerIndependentFileLocationEPKci_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEvGenerateUniqueFileName_ZNKSt6vectorISsSaISsEE2atEjchar_traitskMaxBiggestInt__builtin_puts_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolder7pointerEvoutput_name__addressoffile_size_ZNSt8ios_base5widthEi_ZN7testing8internal12UnitTestImpl23ClearNonAdHocTestResultEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___alloc_traits >GetThreadCount_ZN7testing8UnitTest14RecordPropertyERKSsS2_~GTestMutexLock_M_dataplusallocator__uninitialized_move_if_noexcept_a >_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE7reserveEj~basic_ostreamequal_range_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_plural_form_M_predinternal_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE10_S_on_swapERS4_S6__ZNK7testing8internal12UnitTestImpl11GetTestCaseEi_M_left__builtin_putcharnothrow_t__destroyTestEventRepeater__builtin_fputsnew_test_case_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE8max_sizeEv_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEixEjkDeathTestLivedparameterized_tests_registered_ldiv_t_ZNKSs13find_first_ofEPKcjForEach, void (*)(testing::TestCase*)>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsE_ZNSs18_S_construct_aux_2EjcRKSaIcE_ZN7testing10TestResult20ValidateTestPropertyERKSsRKNS_12TestPropertyE_Vector_base >INTERCEPT_ALL_THREADSva_listinfoline_number_ZN7testing8TestInfoC2ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseEShouldRunTestOnShard_S_synced_with_stdioInt32FromEnvOrDieIsEmptyTestFailedpositive_sign_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKcshard_index_env__lockmkstempKilledBySignal__in_chrg_ZN7testing8internal27PrettyUnitTestResultPrinterD0Evclone_ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2__ZNSt11char_traitsIwE11to_int_typeERKw__normal_iterator, std::allocator > >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_range_checkEj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_Estatement__ZN7testing8internal13ExecDeathTest10AssumeRoleEv__builtin_strchr_ZN9__gnu_cxx14__alloc_traitsISaIPcEE17_S_select_on_copyERKS2_kFatalFailuretest_idMSG_CMSG_CLOEXEC_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEdeEvGetEnvchild_pid___miter_basescoped_ptr_ZNSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEv~AssertionResultRegisterTests_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS1_ERKS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNK7testing8TestCase12elapsed_timeEv_ZNSs5clearEvSetUpEnvironmentin_color_moderange_ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE8max_sizeEv_M_lower_bound_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE__ptrContainer_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4sizeEvStreamingListener_ZN7testing8internal17TestEventRepeater6AppendEPNS_17TestEventListenerECreateKey__copy_move_b_ZN7testing8internal12UnitTestImplC2EPNS_8UnitTestEoperator<< _ZNSt3setISsSt4lessISsESaISsEE11equal_rangeERKSs_ZNSt6vectorIN7testing12TestPropertyESaIS1_EEixEj_ZNKSt6vectorISsSaISsEE5frontEv_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE17_M_create_storageEj_ZN7testing8internal13FloatingPointIdE24SignAndMagnitudeToBiasedERKyxmloutThreadLocal > >_ZN7testing8internal17Int32FromGTestEnvEPKci_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_upper_boundEPKSt13_Rb_tree_nodeIS1_ESB_RKS1__Predicateiterationvector >_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE3getEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt17_Rb_tree_iteratorIS1_E_ZN7testing15AssertionResultC2ERKS0__ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_string_value__c1__c2__alloc_traits >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_range_checkEj_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEixEi_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE8max_sizeERKS4__ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE8max_sizeERKS3__M_finishactual_predicate_valuewcstof_ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE_ZNK7testing8internal12UnitTestImpl17current_test_caseEvwcstokwcstol_ZNKSs16find_last_not_ofERKSsj_ZNKSbIwSt11char_traitsIwESaIwEE6lengthEv_ZN9__gnu_cxx13new_allocatorIPKcE9constructEPS2_RKS2_operator== >iterator_typeInitDeathTestSubprocessControlInfo_S_failbit__normal_iterator__ch_ZN7testing8internal23DefaultDeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE_vptr.DeathTest_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_create_nodeERKS1__ZN7testing29FLAGS_gtest_stack_trace_depthESOCK_SEQPACKETGetElementOrtest_to_run_count_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE10deallocateERS4_PS3_j_ZN7testing8internal35DefaultGlobalTestPartResultReporteraSERKS1__ZN7testing13PrintToStringIPKcEESsRKT___int32_t__normal_iterator > >kMaxStackAlignment_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7destroyEPS4_operator<< UnshuffleTests_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE9push_backERKS1__ZNK7testing8internal12UnitTestImpl17gtest_trace_stackEvpthread_key_deletest_mtimuncaptured_fd__ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs_ZNSt6vectorISsSaISsEEixEjtm_zone_Bit_type_ZN7testing8UnitTestaSERKS0__ZNKSt12_Vector_baseISsSaISsEE13get_allocatorEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5beginEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE19_M_get_Tp_allocatorEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4backEv_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE__distance_ZN7testing8internal9Arguments11AddArgumentEPKcclose_ZNSt6vectorIPcSaIS0_EE6resizeEjS0__ZNKSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE13get_allocatorEvfunctorVerifyRegisteredTestNamesFormatCountableNounPrintBytesInObjectTo_ZN7testing15AssertionResultlsIA7_cEERS0_RKT_PrintCharAndCodeTo_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6resizeEjS2__ZN7testing8internal11CmpHelperLTEPKcS2_xx__is_move_iteratorbinary_ZNK7testing8TestInfo10should_runEv_ZN7testing8internal11ScopedTraceaSERKS1_rebindEscapeXmlFormatIntWidth2_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEptEvallocator_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE17_M_create_storageEj__uninitialized_copy_a_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4backEv_Rb_tree_node, std::allocator > >_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE13_M_deallocateEPS1_jcopy_backwardStatStruct__pthread_mutex_sGetInstance_S_construct_aux_2skip_count_ZN7testing8internal25ReportInvalidTestCaseTypeEPKcS2_ifile_name__ZNK7testing10TestResult16total_part_countEvsa_familyFLAGS_gtest_filter_ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_shard_index_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmIEi__dso_handle_ZN7testing8internal18CmpHelperSTRCASEEQEPKcS2_S2_S2__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEplEi_ZN7testing8internal17TestEventRepeater16OnTestProgramEndERKNS_8UnitTestEtime_t_Alloc_hider_ZNSs10_S_compareEjj_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmiEi_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_a_current_test_case_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4swapERS3_for_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestCase*)>_ZNKSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE19_M_get_Tp_allocatorEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE15_M_erase_at_endEPS2__ZNK7testing8TestCase14test_info_listEvRemoveInvalidXmlCharactersnew_allocator >_ZNKSt13_Bit_iterator13_M_const_castEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_fill_assignEjRKS3__ZN7testing32ScopedFakeTestPartResultReporteraSERKS0_ForEach, void (*)(testing::TestEventListener*)>_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_range_checkEj_ZNSt12_Vector_baseISsSaISsEE17_M_create_storageEj_ZNKSs17find_first_not_ofERKSsj_ZN9__gnu_cxx13new_allocatorISsE7destroyEPSs7lldiv_tregs_allocated_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEi_ZN7testing18TestEventListeners23SetDefaultResultPrinterEPNS_17TestEventListenerErandom_access_iterator_tag_M_offset_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4dataEv_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEvuninitialized_copy_ZNK7testing8TestInfo10type_paramEvint_p_cs_precedes_ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE6rbeginEv__uninitialized_copy_a<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*, testing::internal::TraceInfo>bsearch_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_range_checkEjshould_shard_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE12_M_check_lenEjPKc_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEplEimon_grouping_M_deallocate_Node_allocator_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmmEiParseGoogleTestFlagsOnlyImpl_ZNKSs4rendEv_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmmEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EETestCasePassed_offset_ZN7testing28FLAGS_gtest_death_test_styleE_M_replace_safe_ZNK7testing8internal12UnitTestImpl22test_case_to_run_countEvGetCapturedStdout__numeric_traits_integer_ZN7testing8internal24HasNewFatalFailureHelperD2Ev_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEjw_M_beginbasic_istream >_ZN7testing8internal38DefaultPerThreadTestPartResultReporteraSERKS1___kindlow_byte_Destroy >_old_offsetfile_namembstowcs_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE15_M_erase_at_endEPS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4rendEv_ZNKSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE13get_allocatorEvrepeat_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE8max_sizeERKS4__ZNSs7replaceEjjPKcFormatBooloperator<< basic_ios >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE3endEvuninitialized_copy~basic_streambuf_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE7destroyERS3_PS2__ZNKSt18_Bit_iterator_baseeqERKS__cur_column_ZN7testing4Test18HasNonfatalFailureEvGetArgvsForDeathTestChildProcessoperator<< spawnedthrow_on_failure_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE3endEvFormatEpochTimeInMillisAsIso8601_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_leftmostEv_ZNSt11char_traitsIcE6lengthEPKcFormatTestCount_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE23_M_get_insert_equal_posERKS1__ZN7testing8internal7PrintToEaPSo_S_construct_auxOnTestProgramEndreverse_iterator<__gnu_cxx::__normal_iterator > > >_M_value_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4sizeEvpthread_self_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Evsizelist_tests~_Rb_tree_implextension_Tp1ShouldRunTestCase_ZNK7testing10TestResult16death_test_countEv__pred_iter_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE17_S_select_on_copyERKS3__ZNK7testing8internal24InternalRunDeathTestFlag4fileEv__copy_move_b_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv__destroyset_spawned_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5emptyEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8pop_backEv__copy_move_a2exitGTEST_INFOtime_structFileNo_ZN7testing8internal14CapturedStreamaSERKS1_key_compDefaultPrintNonContainerTo_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE8max_sizeERKS5__ZNSt6vectorIiSaIiEE8pop_backEv_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE_ZNSt6vectorIiSaIiEE4backEvcopyvalue_messageGTEST_FATAL_ZNKSs4_Rep12_M_is_leakedEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11lower_boundERKSs_ZN7testing8TestCase10TestFailedEPKNS_8TestInfoEoperator[]_ZN7testing8internal24XmlUnitTestResultPrinter19IsValidXmlCharacterEc_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4swapERS4__ZN7testing10TestResult5ClearEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx13new_allocatorIPKcE7addressERKS2_strncmp_ZNKSs16find_last_not_ofEPKcjj__n2_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEvp_cs_precedeswint_t_ZNK7testing8internal24InternalRunDeathTestFlag8write_fdEv__cxa_guard_releasePrintCharsAsStringTo_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZNSt12_Vector_baseIiSaIiEE12_Vector_impl12_M_swap_dataERS2_mblen__blkcnt_t__are_samebasic_iosGetBoolAssertionFailureMessage_ZN7testing8internal23DefaultDeathTestFactoryD2Evoperator<< decimal_pointkey_compareIsDirconnect_S_select_on_copy_ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv_ZN7testing28FLAGS_gtest_catch_exceptionsE__uninitialized_copy_a_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_get_nodeEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4dataEv_ZN7testing8internal11ScopedTraceC2EPKciRKNS_7MessageE__nlink_tUniversalPrintexpected_value_ZN7testing8internal27PrettyUnitTestResultPrinter13OnTestCaseEndERKNS_8TestCaseE_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4sizeEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE7destroyERS3_PS2__S_ios_fmtflags_end_ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_jAssertionFailure_ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi_M_c__niter_base_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE12_Vector_impl12_M_swap_dataERS5__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmIEi~scoped_ptr_M_n_M_p_ZNSt10_Iter_baseIPN7testing12TestPropertyELb0EE7_S_baseES2__M_t_ZNKSbIwSt11char_traitsIwESaIwEE8max_sizeEv_ZNKSt6vectorISsSaISsEEixEjMakeFileName_ZNKSt5ctypeIcE5widenEc_M_set_length_and_sharable_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_NS4_IPKwS2_EES9___next_Rb_tree_const_iterator~_Vector_base_ZNKSbIwSt11char_traitsIwESaIwEE5beginEv__pfa_line_ZNSt11char_traitsIwE6lengthEPKw_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSt3setISsSt4lessISsESaISsEE8max_sizeEv_ZN7testing8TestCase14set_should_runEb_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEi_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEvdisabled_test_count_M_dataintercept_mode~TestCase_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8capacityEvexpected_predicate_value_IO_buf_endshort unsigned int_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEpLEi_IO_backup_base_ZNSs6appendEPKcj_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tagTestPartFatallyFailed_ZN7testing11Environment8TearDownEv_ZNK7testing8internal10scoped_ptrISsE3getEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_key_reportable_disabled_test_count_M_create_storageconstruct_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5beginEv__copy_move_a2_ZN7testing8internal6String23EndsWithCaseInsensitiveERKSsS3__ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE9constructEPS3_RKS3_iterator_traits_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEpLEi_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8max_sizeEv_ZN7testing8internal13CaptureStdoutEv__normal_iterator > >StringFromGTestEnv__s2_M_insert_equal__ZNKSs17find_first_not_ofEPKcjj_S_ios_seekdir_end_ZN7testing8internal35FLAGS_gtest_internal_run_death_testE_M_disposeGetCurrentOsStackTraceExceptTopreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >ios_base__copy_move_backward_a2_ZNSt17_Rb_tree_iteratorISsEppEv_shortbuf_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE8allocateERS4_j_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EEaSERKS4_kDisableTestFilter_S_goodbitn_sep_by_space_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_create_nodeERKSs_M_insert_timespecAssertHelper_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5countERKS1__ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE12_Vector_impl12_M_swap_dataERS6__ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE10deallocateERS4_PS3_j_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4sizeEvTypeWithSize<8u>kTestsuites_vptr.TestPartResultReporterInterface_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7addressERS2_this_test_name_Destroy*>_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_fill_assignEjRKS1_ChopLowBits_ZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczFDOpenIsNormalizableWhitespaceelapsed_timeParseNaturalNumber_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjjTEST_THREW_EXCEPTION_ZNSt6vectorIN7testing14TestPartResultESaIS1_EEaSERKS3_FormatCxxExceptionMessage_ZN7testing8internal24XmlUnitTestResultPrinter13EscapeXmlTextEPKcnegative_signoperator delete []__miter_basebegin_string_quoteoperator!= >__copy_move_a2showpointtermdouble_ZNK7testing8UnitTest17current_test_infoEvlock__destroy_ZN7testing18TestEventListeners7ReleaseEPNS_17TestEventListenerE_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7addressERS3__ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestEkProtobufOneLinerMaxLength_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmmEiset_statusresult__ZN7testing8internal13FloatingPointIdE8InfinityEvCmpHelperEQallowed_names_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE7destroyERS4_PS3__ZNK7testing14KilledBySignalclEi_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5beginEvresults_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmiEioperator<< _ZNK7testing15AssertionResult15failure_messageEvuse_forklesselement_namefatally_failedallocatorStringStreamToStringFailed_ZN7testing8internal29ParseInternalRunDeathTestFlagEvGeneratecopy_ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE8max_sizeEvpassed_ZN7testing8internal17TestEventRepeater9OnTestEndERKNS_8TestInfoE_ZNKSt13_Bit_iteratordeEv_ZN7testing8internal20SingleFailureCheckerD2Evtuple<>case_listcondition_ZN7testing8internal10scoped_ptrISsE5resetEPSs_ZN7testing8internal5MutexD2Ev~vector_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE7destroyERS5_PS4__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_mbtowccopy_backward_ZNSs4rendEv__cxa_end_catch__normal_iterator > >_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE19_M_get_Tp_allocatorEv__is_move_iterator_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEpLEi_ZNSs7replaceEjjRKSsjjCmpHelperGE_ZN7testing8internal12UnitTestImpl32SuppressTestEventsIfInSubprocessEvmax_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE18_M_fill_initializeEjRKS2___compar_fn_t__copy_move_backward_a*, std::basic_string*>CmpHelperGT_ZN7testing8internal24HasNewFatalFailureHelperaSERKS1_parent_ldivtable_sizetotal_shardsholder__pid_type__pathGTestColoroperator()<__gnu_cxx::__normal_iterator > >_ZN7testing8internal26ThreadLocalValueHolderBaseD0Evoperator<< _ZN7testing8internal14CapturedStream17GetCapturedStringEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4rendEv__align__alloc_traits >_ZN7testing17TestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestEiterator_traits_ZNSt11char_traitsIcE11eq_int_typeERKiS2__ZN9__gnu_cxx13new_allocatorISsE8allocateEjPKv_ZNKSt13_Bit_iteratorixEi_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE8allocateEjPKvstdoutflush >_ZNKSt6vectorISsSaISsEE14_M_range_checkEjmutex_ZN7testing8internal12UnitTestImpl23ListTestsMatchingFilterEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5beginEv~MessageSetValue_ZNK7testing14TestPartResult17nonfatally_failedEv_ZN7testing8internal15ParseStringFlagEPKcS2_PSs~NoExecDeathTest_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE7reserveEj_ZNSs6assignERKSs_ZNSs6appendEjc_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEvregistered___normal_iterator > >_ZNSs4_Rep8_M_cloneERKSaIcEj_ZN7testing23FLAGS_gtest_random_seedE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6assignEjRKS2_st_nlink_ZNK7testing18TestEventListeners22EventForwardingEnabledEvkFilterFlag__copy_move_backward_a2_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE18_M_fill_initializeEjRKS2_basic_stringbuf, std::allocator >_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEEaSERKS6_MSG_PROXY_ZNSt11char_traitsIwE6assignEPwjw_S_compare_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_M_insert_EPSt18_Rb_tree_node_baseS9_RKS1__ZN7testing8internal16BoolFromGTestEnvEPKcb_ZNKSs5rfindEcj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_minimumEPKSt18_Rb_tree_node_base__miter_base_ZN9__gnu_cxx14__alloc_traitsISaIPcEE8allocateERS2_j_ZN7testing8internal24XmlUnitTestResultPrinter21OutputXmlCDataSectionEPSoPKc__uninitialized_copy_a<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*, std::basic_string >_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwjpipe_fd__sighandler_ttz_dsttime_M_put_node_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4sizeEv__max_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEpLEi_S_leftai_family__begfdopen__copy_mfind_first_not_ofhas_new_fatal_failure_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE10deallocateEPS3_jlong double_Vector_impl_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5emptyEvupper_boundDirectoryExistsa_status_ZN7testing8TestCase14test_info_listEvabortfilter_flaga_line_number_ZNK7testing8TestCase6FailedEv_ZNK9__gnu_cxx17__normal_iteratorIPcSsEplEi_Iter_ZNKSs13get_allocatorEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE11_M_allocateEj_ZN7testing17FLAGS_gtest_colorEreverse_iterator<__gnu_cxx::__normal_iterator > > >__k1munmap_ZN7testing8internal17StreamingListener9UrlEncodeEPKclocaleconvUniversalPrintCharArrayScopedPrematureExitFileoperator!= >_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE8allocateERS4_j_ZNK7testing8internal14TestCaseNameIsclEPKNS_8TestCaseE__cxa_free_exception_M_mutatecopy_Rb_tree_decrement_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_leftmostEvkMaxCodePoint1kMaxCodePoint2kMaxCodePoint3kMaxCodePoint4beginwstring_S_construct__pred_iter__copy_move_backward_a__clock_t__fmtfl_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5emptyEvkStackTraceMarker_ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoECmpHelperLE_ZNSt18_Rb_tree_node_base10_S_minimumEPS_rebindp_sign_posn_ZN7testing8internal15TestFactoryBaseaSERKS1_CmpHelperLTinternal_run_death_test_flag_ZNKSt3setISsSt4lessISsESaISsEE5countERKSsallocated_ZN7testing8internal21UniversalTersePrinterIPKcE5PrintES3_PSos2_expression_ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT__Rb_tree, std::less, std::allocator >_S_on_swapfirst_fixture_id_ZN7testing4Test14RecordPropertyERKSsS2___copy_move_a__copy_move_backward_a2_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE10deallocateERS5_PS4_j_ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs__uninit_copy_ZN7testing14IsNotSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEpLEi_M_get_nodeflush__mempositive_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4swapERS4__ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE10value_compEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE15_M_erase_at_endEPS3_valuetest_part_results_name_CmpHelperNEmessage_TestPartNonfatallyFailed_S_uppercase_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E5valueEgrouping_ZNK7testing8TestCase10should_runEvcopy_backwardGetTimeInMillis_ZNSt6vectorIPN7testing8TestInfoESaIS2_EEaSERKS4__ZNKSt6vectorIiSaIiEE6rbeginEv_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEplEiresult_typeoperator<< >_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcE_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5emptyEv_GLOBAL__sub_I__ZN7testing8internal17kStackTraceMarkerEflip_ZN7testing8TestInfo3RunEvoperator- >_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_fill_assignEjRKS2__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmiEiFLAGS_gtest_also_run_disabled_testsaddressHasNewFatalFailureHelperlconvregfreeflag_enda_regexReadEntireFile_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEptEv_ZNKSbIwSt11char_traitsIwESaIwEE4sizeEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5frontEvmkdir_ZNKSbIwSt11char_traitsIwESaIwEE3endEv_ZNSt6vectorISsSaISsEE6insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSsDIEDkQuoteBegin_ZNSt12_Vector_baseIPcSaIS0_EE19_M_get_Tp_allocatorEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE10deallocateEPS4_jeq_int_type_ZNK7testing8internal13FloatingPointIdE8sign_bitEvgtest_output_flagnpos_ZN7testing8TestCase10TestPassedEPKNS_8TestInfoE_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE6rbeginEvabs_error_expr_ZNSt6vectorISsSaISsEE5frontEvHasFatalFailure_ZNSt18_Rb_tree_node_base10_S_maximumEPKS_strdupinternal2__uninitialized_copy_aoperator- >_ZN7testing4Test10HasFailureEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmiEi_ZNKSs6_M_repEv__uninit_copytext_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE8allocateEjPKv__normal_iteratorpost_flag_parse_init_performed__ZN7testing8internal32FormatEpochTimeInMillisAsIso8601ExTestPropertyKeyIs_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE7releaseEv_ZN7testing8internal17g_executable_pathE_ZN7testing15AssertionResultlsIA5_cEERS0_RKT_ParameterizedTestCaseInfoBasestack_grows_down_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11upper_boundERKS1_posix_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE3endEvvector_ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT_allocator_ZNK7testing8internal9MutexBase10AssertHeldEv_ZN7testing8internal17TestEventRepeater15OnTestCaseStartERKNS_8TestCaseE_M_allocate_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSs6rbeginEvnum_readtest_countpstr_M_erase_aux_Construct_ZNSt6vectorIiSaIiEE9push_backERKi__minOutputXmlAttribute_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6rbeginEvkTestShardStatusFile_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE3endEv__ownerSetup_should_be_spelled_SetUpoperator<< _ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal17GetCapturedStreamEPPNS0_14CapturedStreamE_Construct, char const*>_ZNKSbIwSt11char_traitsIwESaIwEE7_M_iendEv_ZN7testing8internal11ShouldShardEPKcS2_b_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE17_M_create_storageEj_ZN7testing10TestResultC2Ev_ZNSs4_Rep15_M_set_sharableEvsa_family_t_M_bump_up_ZN7testing8internal18StreamableToStringIiEESsRKT__ZN7testing8internal17TestEventRepeater18OnTestIterationEndERKNS_8UnitTestEi_ZNSbIwSt11char_traitsIwESaIwEE5beginEvPredicateswapiterator_traits_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5emptyEv_ZSt16__throw_bad_castv_ZNK7testing8internal12UnitTestImpl16total_test_countEv_vtable_offsetSetUpTestCaseFuncTestResultwctrans_t_ZNK7testing8UnitTest11random_seedEv__addressofOVERSEE_TEST_ZNKSt3setISsSt4lessISsESaISsEE8key_compEv_ZN7testing8internal24XmlUnitTestResultPrinterC2EPKcdot_extension_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_set_forwarding_enabled_M_impl_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Evsi_sigvalvwprintf_ZN7testing8TestInfo26increment_death_test_countEv_M_range_check_ZNSt23_Rb_tree_const_iteratorIPKcEppEipremature_exit_filepath~GTestFlagSaver_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5_CheckedDowncastToActualType::ValueHolder, testing::internal::ThreadLocalValueHolderBase>_ZNSt23_Rb_tree_const_iteratorIPKcEppEv_ZNK7testing8internal12UnitTestImpl12elapsed_timeEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8key_compEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE8capacityEv_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7addressERKS3__ZNK7testing15AssertionResultcvbEvCountIf, bool (*)(const testing::TestInfo*)>_ZNK7testing8TestInfo14test_case_nameEvPassed_ZN7testing8internal2RE9FullMatchERKSsRKS1__ZN7testing8internal13FloatingPointIdE38DistanceBetweenSignAndMagnitudeNumbersERKyS4__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE18_M_fill_initializeEjRKS2__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEdeEvpointerkStdOutFileno_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEEaSERKS5__ZNKSt6vectorISsSaISsEE8capacityEv_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS3_S3_forward_iterator_tagfastst_modean_index_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8capacityEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE8allocateERS4_jiterator_traits_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE_ZNSt6vectorISsSaISsEE8pop_backEv_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEplEi_ZNKSt6vectorIiSaIiEE14_M_range_checkEjtest_result_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEaSERKS5__InputIterator_S_skipwsdest_ptrClosepthread_getspecificTestFactoryBase_ZNKSt6vectorISsSaISsEE8max_sizeEv_ZNK7testing8internal12UnitTestImpl17current_test_infoEv_ZN9__gnu_cxx14__alloc_traitsISaIiEE10deallocateERS1_Pij__copy_move_backward_a2_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__M_leftmost_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE6rbeginEv_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8max_sizeEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8pop_backEv_ZN7testing8TestCase12TestDisabledEPKNS_8TestInfoE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEixEibits__ZN7testing22EmptyTestEventListenerD0Ev__uninitialized_move_if_noexcept_a >allocator_ZN7testing17TestEventListeneraSERKS0___uninit_copy_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4swapERS5__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE24_M_get_insert_unique_posERKSs_M_get_insert_hint_equal_pos_M_move_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_rightEPSt18_Rb_tree_node_base__niter_base_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv_ZNSs13_S_copy_charsEPcS_S__ZNSt10_Iter_baseIPPN7testing17TestEventListenerELb0EE7_S_baseES3__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6resizeEjS1__ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEE4baseEvoperator<< >_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_jnext_seed_ZNKSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE19_M_get_Tp_allocatorEv_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_range_checkEjcerrdefault_result_printer_pfile_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag_ZN9__gnu_cxx13new_allocatorIPKcE10deallocateEPS2_jtest_case_count_ZN7testing8internal24XmlUnitTestResultPrinter9EscapeXmlERKSsbwctob_ZNKSt6vectorISsSaISsEE5beginEv_IO_save_end_ZNK7testing8internal12UnitTestImpl19disabled_test_countEvst_gidrelative_path__throw_logic_error_ZN7testing8internal9DeathTest11LastMessageEv__normal_iterator > >_ZN7testing8internal12UnitTestImpl20set_catch_exceptionsEb_ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE__ioinit_ZNKSs8capacityEv_DestroykFractionBitCount__gid_t__are_same, std::allocator >*, std::basic_string, std::allocator >*>new_allocatorFClose_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_bIsUtf16SurrogatePair_ZNSs5eraseEjj_ZNKSs4dataEv_ZN7testing8internal18OsStackTraceGetteraSERKS1_construct_ZNSt23_Rb_tree_const_iteratorISsEppEi_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEEaSERKS4_PrintAsCharLiteralTo_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmIEistr_len_ZNSt23_Rb_tree_const_iteratorISsEppEv__uninitialized_move_if_noexcept_a >UniversalPrint >ClearNonAdHocTestResult_ZNKSt23_Rb_tree_const_iteratorIPKcEptEv_ZN7testing17TestEventListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal6String15FormatIntWidth2Eioperator== >_ZNKSs6lengthEvSetDefaultXmlGenerator_ZN7testing8internal16WideStringToUtf8EPKwiwcsftime_ZNKSs8max_sizeEv~DefaultGlobalTestPartResultReporter_FwdIterator_ZN7testing8internal14CmpHelperSTREQEPKcS2_PKwS4__ZN7testing8internal6IsTrueEbtear_down_tc_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE17_M_create_storageEj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6resizeEjS2__ZN7testing8internal17StreamingListener6SendLnERKSs_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEplEi_ZNK7testing8TestCase19disabled_test_countEv_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_leakedEv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZNSt17_Rb_tree_iteratorISsEmmEi_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_maximumEPSt18_Rb_tree_node_base_ZN7testing8TestCase18GetMutableTestInfoEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEplEiBaseholder_base_ZNSt17_Rb_tree_iteratorISsEmmEv_ZNSt12__alloc_swapISaISsELb1EE8_S_do_itERS0_S2_argumentpartial_regex__ZN7testing8internal19TypedTestCasePState11AddTestNameEPKciS3_S3_ConcatPaths_ZN7testing8internal15TestFactoryBase10CreateTestEv__pointer_ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Evtestsnegative_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE10_S_on_swapERS5_S7__ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE9constructEPS3_RKS3__S_boolalpha_ZNSbIwSt11char_traitsIwESaIwEE6assignEjw_ZNK7testing8internal12UnitTestImpl17test_to_run_countEvtest_shard_file__uninit_copy__initialize_pAppendMessage_ZN9__gnu_cxx14__alloc_traitsISaISsEE10_S_on_swapERS1_S3_targetmutex_arg_string_ZN7testing8TestCase12ShuffleTestsEPNS_8internal6RandomE_ZNK7testing8UnitTest17test_to_run_countEv_ZN7testing8internal27OsStackTraceGetterInterface17CurrentStackTraceEii__copy_move_backward_anew_allocatortest_info_listHONOR_SHARDING_PROTOCOL_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4backEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4rendEvelapsed_time__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4dataEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4backEv_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_execveg_in_fast_death_test_childTestPropertiesAsXmlAttributesdummy__ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev_ZN7testing8internal20StringStreamToStringEPSt18basic_stringstreamIcSt11char_traitsIcESaIcEEstream_name_ZN9__gnu_cxx13new_allocatorIiE10deallocateEPij_Pointer_Rb_tree_insert_and_rebalance_ZNSt11char_traitsIwE6assignERwRKwuninitialized_copyin_subprocess_for_death_testpthread_mutexattr_t_ZNK9__gnu_cxx13new_allocatorIPKcE7addressERS2_for_each > >, void (*)(testing::Environment*)>_ZN7testing8internal16GetAnsiColorCodeENS0_10GTestColorE_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmIEifound_Destroy_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEdeEv_ZN7testing8internal29ParameterizedTestCaseInfoBase13RegisterTestsEvShouldUseColorcopy_backwarditerator_categoryPrintXmlUnitTest_S_eofbit_ZN7testing8internal17TestEventRepeater16OnTestPartResultERKNS_14TestPartResultEoperator<< _Iter_predfailed_test_countassertion_result_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_valueEPKSt13_Rb_tree_nodeISsE__nusersconst_iterator_ZNKSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE13get_allocatorEv_M_capacityTestCaseoperator== >~Init_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_S_leftEPKSt18_Rb_tree_node_baseFILE_filenoDoubleLEoperator|=severity_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EEixEj_ZNSt11char_traitsIcE6assignERcRKcCaptureStderrallocator_ZNK7testing8internal8FilePath19RemoveDirectoryNameEvCreateTest~TestPartResult_ZNK7testing8internal13FloatingPointIdE6is_nanEvoperator<< _ZN7testing8internal18StreamableToStringIPcEESsRKT__ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmIEi_ZN7testing8internal9DeathTest10AssumeRoleEv_ZNKSt6vectorIiSaIiEE2atEjHasNonfatalFailureFormatWordListvector >filter_outcome_ZNSt6vectorIiSaIiEE5clearEv_M_color_ZN7testing8TestCase13ShouldRunTestEPKNS_8TestInfoE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEixEi_ZNSbIwSt11char_traitsIwESaIwEEaSERKS2__ZN7testing8internal8GTestLog9GetStreamEv_ZN7testing8internal27OsStackTraceGetterInterfaceaSERKS1_internal_flag_ZNSt12_Vector_baseISsSaISsEE11_M_allocateEjignore_sigprof_actionOnTestIterationEnd_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5frontEvscoped_ptr_ZNKSs3endEv_ZNK7testing8internal8FilePath6stringEv_ZNSt6vectorIPcSaIS0_EE6assignEjRKS0__ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE10deallocateEPS3_j_ZN7testing8internal13FloatingPointIfE38DistanceBetweenSignAndMagnitudeNumbersERKjS4_getpagesize_ZNKSt6vectorIPcSaIS0_EE14_M_range_checkEj_ZNSt6vectorIPcSaIS0_EE14_M_fill_assignEjRKS0__ZNK7testing8internal10scoped_ptrISsEdeEv_ZNSo5writeEPKci_ZN7testing22FLAGS_gtest_list_testsE_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_jctype__socklen_t_ZNSt11char_traitsIwE4moveEPwPKwj_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEplEiFloatLEStreamWideCharsToMessage_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6resizeEjS1__ZN7testing10TestResult26increment_death_test_countEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEoperator==, std::allocator >partial_regexsival_ptrHasSameFixtureClass_Destroyproperty_name_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE2atEj_M_refcountis_runnable_ZN7testing8internal17TestEventRepeater22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZNK7testing14TestPartResult4typeEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEplEi~TestInfo__dev_t_Base_ptr_ZN7testing8internal17StreamingListener12SocketWriterD2Ev_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_lower_boundEPSt13_Rb_tree_nodeISsES8_RKSsIsTrue_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE19_M_get_Tp_allocatorEvfilter_M_bump_downfull_pathnameEXECUTE_TESTMSG_ERRQUEUE__uninitialized_copy_a*, std::basic_string*, std::basic_string >new_allocator_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsES7__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZN7testing8internal20ExitedUnsuccessfullyEineedle_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4sizeEv_ZN7testing7MessagelsEPKw_Bit_iterator_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmIEi_ZNK7testing8UnitTest16total_test_countEvper_thread_test_part_result_reporter_fseek~DeathTestFactory_ZN7testing18TestEventListenersC2Evbasic_stringstream, std::allocator >ptrdiff_t_ZN7testing8internal14ShouldUseColorEb_ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EEset, std::allocator >_Distance_archF_OWNER_PIDwmemmove~TestResultset_outcome__destroy__alloc_traits >_ZNK9__gnu_cxx17__normal_iteratorIPcSsEmiEi_ZSt24__throw_out_of_range_fmtPKczbasic_iostream_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_GetLastErrnoDescriptionwcrtombwstrclear_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE3endEv_ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE9constructEPS4_RKS4_failure_ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE10deallocateEPS4_j__check_facet >_ZN7testing8internal17TestEventRepeater18OnTestProgramStartERKNS_8UnitTestE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEplEi_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv__espins_ZNSsaSEPKcdefault_result_printer_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEplEi_ZNSbIwSt11char_traitsIwESaIwEE3endEvrm_eo_ZN7testing8TestCase19ClearTestCaseResultEPS0_operator<< _ZNSs14_M_replace_auxEjjjcWriteToShardStatusFileIfNeeded_Rep_baseenv_varvalue_holderfirst_test_info_ZNSspLEckPrintTimeFlag_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE6insertESt23_Rb_tree_const_iteratorIS1_ERKS1__ZN7testing10TestResult20ClearTestPartResultsEv__copy_move_backward_anew_allocator, std::allocator > >MSG_FINreverse_iterator<__gnu_cxx::__normal_iterator > > >st_atim_ZN7testing11Environment5SetUpEvst_dev_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmIEi__is_signedcountsCloseConnection__state_ZNKSt3setISsSt4lessISsESaISsEE4sizeEv_ZN7testing18TestEventListeners6AppendEPNS_17TestEventListenerEfirst_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE15_M_erase_at_endEPS2__ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjjInit_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE7pointerEvGetTestCaseName_ZNKSt14_Bit_referenceeqERKS__ZNKSbIwSt11char_traitsIwESaIwEE5emptyEvMSG_CTRUNC__normal_iterator > >_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEptEv__alloc_traits >_ZN7testing8internal2REaSERKS1__ZN7testing8internal12UnitTestImpl17gtest_trace_stackEvnum_failuresenvironments_Delete__copy_move_b_M_insert_ZN9__gnu_cxx13new_allocatorIwE10deallocateEPwj_ZN7testing8internal10scoped_ptrIKSsEaSERKS3__ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE7destroyERS4_PS3_PrintTestPartResult__copy_move_backward_a2*, std::basic_string*>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11equal_rangeERKSsgtest_ar__Identity, std::allocator > >AlwaysTrueoperator<< >set_current_test_infoTEST_DID_NOT_DIEwcscollopenmode_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_leftmostEvvalue_~TestPropertyoperator!= >_ZN7testing8internal27FormatTimeInMillisAsSecondsEx_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13_Rb_tree_implIS3_Lb0EE13_M_initializeEv__last_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEdeEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEptEv_ZNK7testing8internal12UnitTestImpl30reportable_disabled_test_countEvOnTestCaseStart__prioritydeath_test_style_kCatchExceptionsFlag_ZNSs12_S_constructEjcRKSaIcE__addressofuninitialized_copy*>ForkingDeathTestdeath_test_factory_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE8max_sizeERKS3_OsStackTraceGetterInterface_ZNSs7_M_moveEPcPKcj__copy_move_backward_a_ZNSt18_Rb_tree_node_base10_S_minimumEPKS_ParameterizedTestCaseRegistry_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13_M_deallocateEPS3_j__time_t_ZN7testing8internal17StreamingListener20AbstractSocketWriteraSERKS2_signumMutexpathname__miter_base*>_ZN7testing8TestCase3RunEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_jj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_valueEPKSt18_Rb_tree_node_baseFloatingPoint_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE17_S_select_on_copyERKS4_fgetwc_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4swapERS5__ZN7testing8internal12UnitTestImpl18GetMutableTestCaseEi_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4rendEv_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6rbeginEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4dataEvrelease_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZNK7testing8internal12UnitTestImpl26successful_test_case_countEvnew_allocator_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEiParseBoolFlagParseInt32OnTestStartread_fd__ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEistrstrcolor__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEv_ZNSs6resizeEj__vtbl_ptr_typeGTestIsInitialized_Is_pod_comparator__destroy_ZN7testing19FLAGS_gtest_shuffleEGetInjectableArgvsFormatDeathTestOutput_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11equal_rangeERKSs_ZNSbIwSt11char_traitsIwESaIwEEaSEwunary_function, std::allocator >, std::basic_string, std::allocator > >puts_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_S_leftEPSt18_Rb_tree_node_base__gnuc_va_listdeath_test_factory__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_beginEv__builtin_memmoveGetOrCreateValue_ZNK7testing8internal8FilePath15DirectoryExistsEvThreadLocal_ZN9__gnu_cxx14__alloc_traitsISaIPcEE7destroyERS2_PS1__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE3endEv_ZNSt23_Rb_tree_const_iteratorIPKcEmmEiAbortSingleFailureChecker_ZN7testing11IsSubstringEPKcS1_RKSsS3__flags2_ZNSt23_Rb_tree_const_iteratorIPKcEmmEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_get_Node_allocatorEv~HasNewFatalFailureHelper_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE8max_sizeERKS4__flagsthisbasic_ostream >_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4dataEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEplEiclose_fd_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEikDeathTestInternalErrorrandom___is_move_iterator_ZN7testing8internal30ReportFailureInUnknownLocationENS_14TestPartResult4TypeERKSs_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE3endEv_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7addressERKS4__ZNK7testing8UnitTest6FailedEv_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE8allocateEjPKvtest_casesrcfile__miter_basewmemchr_ZN7testing18TestEventListeners8repeaterEvIsPrintableAsciiGetTypeId_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmiEiiswctypethis_is_TEST_ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv_Rb_tree_iterator__builtin_strlen_ZNKSs4copyEPcjj_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE10deallocateERS4_PS3_j__is_normal_iterator, std::allocator >*>__uninitialized_copy_ZN7testing8internal15NoExecDeathTest10AssumeRoleEv_ZN7testing15AssertionResultaSERKS0__ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEplEicatch_exceptions__ZN7testing11Environment5SetupEv__ssize_t__niter_base<__gnu_cxx::__normal_iterator > >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE8max_sizeEv_InIteratorseedgtest_msgallocator_ZN7testing8internal16UniversalPrinterIxE5PrintERKxPSo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_chdirsival_intstrtod_ZNK7testing8TestCase21successful_test_countEvStreamableToString_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjReportInvalidTestCaseTypeUnsignedChar_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE7releaseEv_ZN7testing8internal17StreamingListenerD2Ev_ZNKSs16find_last_not_ofEcjPatternMatchesString_ZN7testing15AssertionResultlsINS_7MessageEEERS0_RKT_gtest_retval_ZN7testing8internal18StringFromGTestEnvEPKcS2_Fromstrlen_ZN7testing8internal13FloatingPointIfE15ReinterpretBitsEjstack_top_ZN7testing8internal38DefaultPerThreadTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultEPrintOnOneLinebasic_iostream >_ZNKSbIwSt11char_traitsIwESaIwEE4findEwj_ZNSs6insertEjjc__fmtkFractionBitMaskUnitTestImpl_ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi_ZNSbIwSt11char_traitsIwESaIwEE4_Rep13_M_set_leakedEv_ZN7testing8internal29ParameterizedTestCaseRegistry13RegisterTestsEv_ZNKSt6vectorIPcSaIS0_EE4rendEvkSuccessOutputXmlCDataSectionGetCapturedStreamRemoveFileName__uninitialized_move_if_noexcept_a >_ZNSbIwSt11char_traitsIwESaIwEE2atEj_ZNSbIwSt11char_traitsIwESaIwEEixEj_ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKw_ZNSt23_Rb_tree_const_iteratorISsEmmEiparse_success_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwS8_DeathTestAbort_ZNSt23_Rb_tree_const_iteratorISsEmmEvcoloncolor__uninitialized_move_if_noexcept_a >_vptr.Environment_Destroybasefield_ZNSt11char_traitsIcE7compareEPKcS2_j_ZN7testing8internal14CmpHelperSTREQEPKcS2_S2_S2__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4backEvreverse_iterator<__gnu_cxx::__normal_iterator > > >RemoveDirectoryName_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperES3__Rep_typeis_disabled~basic_ios__niter_base_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE13_M_deallocateEPS2_jcontentShouldRunTestReportTestPartResultcurrent_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE2atEj__normal_iterator > >_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmiEi_ZNKSt23_Rb_tree_const_iteratorISsEdeEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE6rbeginEv_M_fill_insertbasic_stringbufAddTestName_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEvnothrow_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmiEiis_spawnedoperator<< _ZN7testing8internal23DefaultDeathTestFactoryD0Evvector >_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2_Argvoperator<< _ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestPartResultERKNS_14TestPartResultE_ZSt19__throw_logic_errorPKc__prec__pred_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_beginEv_ZN7testing4Test16TearDownTestCaseEv_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE19_M_get_Tp_allocatorEvSecretSOCK_DCCP_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEptEv_Ios_OpenmodeDelete_ZN7testing4Test5SetUpEv_ZN7testing18TestEventListenersaSERKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_put_nodeEPSt13_Rb_tree_nodeISsE_ZNSs6appendEPKc_S_cur_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_range_checkEjshowposSetUpTestCasestdin__pthread_slist_t_ZNKSs4_Rep12_M_is_sharedEv_ZNSt11char_traitsIcE12to_char_typeERKi_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE12_M_check_lenEjPKc_ZNSolsEPFRSt8ios_baseS0_E_ZN7testing15AssertionResultlsEPFRSoS1_E_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseEPKS1_S9_GetFileSize_ZNSt6vectorISsSaISsEE4rendEv_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE8allocateERS3_j_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc_ZNKSt23_Rb_tree_const_iteratorISsEeqERKS0__ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZNK9__gnu_cxx13new_allocatorIiE8max_sizeEvvfwscanf_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwjj_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1_reverse_iterator<__gnu_cxx::__normal_iterator > > >_ZSt17__throw_bad_allocv_ZNKSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE13get_allocatorEvdummyatoll_ZNSo9_M_insertImEERSoT_num_selected_tests_ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwjjoperator<< _ZNSt12_Vector_baseIiSaIiEE17_M_create_storageEjfind<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string >_ZNKSt6vectorIiSaIiEE4backEvbuffershort intsnprintf_ZNKSbIwSt11char_traitsIwESaIwEE5c_strEvwmemcpy~FilePathcurrent_test_info_ZNK7testing8internal13DeathTestImpl8write_fdEvForEach, void (*)(testing::Environment*)>_ZN7testing8internal13FloatingPointIdE15ReinterpretBitsEy_Iter_basefind_last_not_of_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6rbeginEv_ZNK7testing10TestResult12elapsed_timeEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_rootEv_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE3endEvuninitialized_copy<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*>ThreadLocalValueHolderBase__normal_iterator, std::allocator > >sa_flagstestoperator<< GetCapturedStderr_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_upper_boundEPKSt13_Rb_tree_nodeISsES9_RKSs_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refdataEvNoExecDeathTest_ZNSt6vectorISsSaISsEE5beginEv_ZNKSs8_M_checkEjPKc_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6resizeEjS3__vptr.DeathTestFactorybasic_istream_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE11_M_allocateEj_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEixEi__exchange_and_add_dispatchReseed_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEptEvcopy_backwardconstructParseFlagValue_ZN7testing8internal24XmlUnitTestResultPrinterD0Ev_ZNK9__gnu_cxx17__normal_iteratorIPKcSsE4baseEv_Construct, std::basic_string >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE2atEj_ZNSbIwSt11char_traitsIwESaIwEE4rendEv_ZN7testing8internal18CmpHelperSTRCASENEEPKcS2_S2_S2__ZN7testing8internal17GetCapturedStdoutEv__iterator_category<__gnu_cxx::__normal_iterator > >PushGTestTrace_ZN7testing8internal17TestEventRepeater24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN9__gnu_cxx13new_allocatorIcE8allocateEjPKvAssertionResult_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5beginEvuninitialized_copy_ZN9__gnu_cxx14__alloc_traitsISaISsEE17_S_select_on_copyERKS1_operator- >dup2rbegin__gthread_active_pnames_ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKwj_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEE4baseEv_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE12_Vector_impl12_M_swap_dataERS5_CountIf, bool (*)(const testing::TestCase*)>_sigchldoutput_file_vptr.ParameterizedTestCaseInfoBase__uid_tGTEST_SHARD_STATUS_FILEerrorPrintXmlTestCase_ZN9__gnu_cxx17__normal_iteratorIPKcSsEppEicode_point_ZNSs6assignERKSsjj_ZNKSt6vectorIiSaIiEE4sizeEv_ZNSt10_Iter_baseIPN7testing8internal9TraceInfoELb0EE7_S_baseES3_mon_thousands_sep_ZN7testing8UnitTest13PopGTestTraceEv_ZN9__gnu_cxx17__normal_iteratorIPKcSsEppEv_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EEixEj_ZNK7testing18TestEventListeners22default_result_printerEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmiEiLogToStderrwcscatUponLeavingGTest_Vector_base >_ZNSo9_M_insertIxEERSoT__ZN7testing8internal9DeathTest27set_last_death_test_messageERKSs_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_MutexLock_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4backEvrepeater__Const_Base_ptroperator!= >getcwdSendLn_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT__ZNSt3setISsSt4lessISsESaISsEEaSERKS3_set_os_stack_trace_getter_ZNKSt23_Rb_tree_const_iteratorISsEneERKS0__ZN7testing8internal15UnitTestOptions27GetAbsolutePathToOutputFileEv_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEE4baseEv__normal_iterator > >pair, bool>repeaterbasic_stringstatus_valuePrintTestPartResultToStringa_name_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSsixEj_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1__ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv_ZN7testing8internal21UniversalTersePrinterIxE5PrintERKxPSo_ZN7testing8internal14GetThreadCountEvreplace_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EjwRKS1_XmlUnitTestResultPrinter_ZNK9__gnu_cxx17__normal_iteratorIPcSsEptEv_ZN7testing8internal2RE4InitEPKc_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7addressERKS3_AppendUserMessageUniversalTersePrinter_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13get_allocatorEv_ZNKSs7compareEjjPKc__suseconds_t_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmiEi_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5clearEvshuffle_RandomAccessIterator_ZN9__gnu_cxx14__alloc_traitsISaIiEE7destroyERS1_Pi_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIS3_S2_EES6_PrintColorEncoded_M_is_sharediterator_traits_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmiEi_ZNSt6vectorIiSaIiEE18_M_fill_initializeEjRKi_ZNSt6vectorISsSaISsEE14_M_fill_assignEjRKSsscoped_ptr_ZN7testing8internal17kStackTraceMarkerE_ZN7testing8internal12UnitTestImpl11GetTestCaseEPKcS3_PFvvES5_premature_exit_filepath__S_constructparameterized_test_registry_ZN7testing8internal6Random8GenerateEj_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEi_Vector_baseiterator_traits<__gnu_cxx::__normal_iterator > > >_ZN7testing18FLAGS_gtest_filterE_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmiEi__copy_m_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEva_message__are_same_ZNSt6vectorIPcSaIS0_EE18_M_fill_initializeEjRKS0_TestCaseNameIs_M_insert_M_mask_ZN7testing8internal10scoped_ptrIKSsE7releaseEvis_reportableTestReportableDisabled_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEE4baseEvreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE10deallocateEPS3_j_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj_ZN7testing4Test3RunEvIsSubstring_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tagallocator_typeSetUp__comp_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE7pointerEvpthread_mutex_lockassignrandom_seed__ZN7testing8internal15UnitTestOptions15GetOutputFormatEv_ZSt4cerr_ZNSbIwSt11char_traitsIwESaIwEE7_M_dataEPwfilefillCurrentOsStackTraceExceptTop_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZN7testing8internal35DefaultGlobalTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE17_M_create_storageEj_ZN7testing15AssertionResultlsIPKcEERS0_RKT__ZNSt12_Vector_baseIPcSaIS0_EE13_M_deallocateEPS0_j_exit_ZN7testing11IsSubstringEPKcS1_PKwS3_DistanceBetweenSignAndMagnitudeNumbers_ZNK7testing14TestPartResult6failedEvImplicitlyConvertible_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6assignEjRKS2__ZN7testing8internal27PrettyUnitTestResultPrinter16PrintFailedTestsERKNS_8UnitTestE_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE12_M_check_lenEjPKcerror_num_M_initialize_dispatch10regmatch_t_ZN7testing17TestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing19TestPartResultArray6AppendERKNS_14TestPartResultE_S_red~ThreadLocalValueHolderBase_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE10_S_on_swapERS3_S5__ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7addressERS2__ZN7testing10TestResult16set_elapsed_timeExarguments_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxEoperator!= >_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5beginEvgtest_error_ZNSbIwSt11char_traitsIwESaIwEEpLERKS2__ZN7testing8internal20DoubleNearPredFormatEPKcS2_S2_ddd_ZN7testing8internal8GTestLogaSERKS1__ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKcClearTestCaseResult_M_insert_aux~TraceInfo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_state__S_adjustfield~AssertHelperData_ZNSt10_Iter_baseIPPN7testing8TestInfoELb0EE7_S_baseES3_ai_protocol_ZN7testing8internal16UniversalPrinterISbIwSt11char_traitsIwESaIwEEE5PrintERKS5_PSoTestInfo_Iter_base_vptr.OsStackTraceGetterInterfacefind_ZN7testing8internal8FilePath12MakeFileNameERKS1_S3_iPKc_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE17_S_select_on_copyERKS4__ZN7testing8internal8FilePath13GetCurrentDirEvparsedgetenv_ZNSt17_Rb_tree_iteratorIPKcEppEiParseGoogleTestFlagsOnlyImplintercept_mode__ZN7testing8internal10SkipPrefixEPKcPS2__Bit_iterator_base_ZNSt17_Rb_tree_iteratorIPKcEppEv_ZNK7testing12TestProperty5valueEv__wide_IO_read_endHandleExceptionsInMethodIfSupported_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEptEvwcschrIsSubstringPred >__builtin_va_list_ZNKSt3setISsSt4lessISsESaISsEE13get_allocatorEv__cxa_allocate_exceptionoperator new []val2_ss_ZNSt14_Bit_referenceaSEbpathname__ZNKSt6vectorISsSaISsEE5emptyEvstream_result_to__copy_m_S_minimumnew_allocator_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE3getEvIsXDigit_IO_FILE_ZN7testing8internal24InternalRunDeathTestFlagaSERKS1_uninitialized_copy_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4rendEv_ZN7testing8internal24GetCurrentExecutableNameEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE2atEj__statbufis_previous_hex_ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13get_allocatorEvservinfo__false_typewcsrchr__uninitialized_move_if_noexcept_a*, std::basic_string*, std::allocator > >_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE8allocateEjPKv__is_null_pointerbiased1biased2_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_jValueHolder_ZNK7testing8internal13DeathTestImpl9statementEv_ZNSt6vectorISsSaISsEEaSERKS1_PrintWideStringTo_Vector_base >bool_valuepattern_ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE_ZNKSt17_Rb_tree_iteratorISsEptEv_ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZNKSt13_Bit_iteratorplEi__is_move_iterator__alloc_traits >IsATTY~basic_stringstream_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7destroyEPS2__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13_M_clone_nodeEPKSt13_Rb_tree_nodeISsE_M_const_castlldiv_ZN7testing8internal9MutexBase4LockEv_ZN7testing8internal12UnitTestImpl41GetTestPartResultReporterForCurrentThreadEvstatus_ch_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_M_endEvSuppressEventForwardingoperator<< >adjustfield_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_fill_assignEjRKS1__ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjwctomb_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_S_keyEPKSt18_Rb_tree_node_baseIsSubstringImplsi_utimeUniversalTersePrinter_Key_compare_ZN7testing8internal6String15ShowWideCStringEPKwswscanfwcscspn_ZN7testing8internal9DeathTest6PassedEbhaystack_exprtest_case_nameformatiterator_traitsDISABLED_*:*/DISABLED_*Clear_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___uninitialized_copy_a_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmiEi_Funct_ZNK7testing8internal13FloatingPointIfE4bitsEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEv__uninit_copy<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*>_S_showbase~basic_istreamconstruct_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5emptyEvsigval_t_ZNKSt14_Bit_referencecvbEvsi_bandsigvalGetUnitTestImpl_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE8allocateERS4_jwcscmpsyntax_ValueT_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEptEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_M_insert_EPSt18_Rb_tree_node_baseS7_RKSsiterator_traitsGetTestCaseTypeIdstrerrorstderr_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5clearEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2__ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEptEvstreamsize_S_max_size_lock_ZN7testing7MessagelsEb__uninit_copy_ZN9__gnu_cxx13new_allocatorIPcE8allocateEjPKv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEE4baseEvInterceptMode10__sigset_t_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5frontEv_ZNSs12_S_empty_repEv_ZNSs6assignEjc_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8pop_backEv_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE8allocateEjPKvnum_disabled_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EEaSERKS4__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE9push_backERKS2__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZN7testing8internal17StreamingListener12SocketWriter4SendERKSs_ZNSolsEPKv_ZNK7testing8internal29ParameterizedTestCaseInfoBase15GetTestCaseNameEv_ZN7testing8internal17TestEventRepeater27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal13DeathTestImpl11set_read_fdEi_ZNK7testing15AssertionResultntEvGetCurrentDir__is_normal_iterator_ZNSt18_Bit_iterator_base7_M_incrEivswscanf_ZNSo9_M_insertIdEERSoT__ZNK7testing14TestPartResult7summaryEv__normal_iterator > >_ZNSs5beginEvkMaxStackTraceDepth_ZNSs13_S_copy_charsEPcPKcS1_IGNORE_SHARDING_PROTOCOL_chainDefaultDeathTestFactoryfor_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestInfo*)>_ZNK7testing8TestCase16total_test_countEv_ZNSt6vectorISsSaISsEE4swapERS1__ZNSs6rbeginEvuninitialized_copy_ZNK7testing8UnitTest12elapsed_timeEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZN7testing8internal27PrettyUnitTestResultPrinter13PrintTestNameEPKcS3_wcstollwcsxfrm_ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_jdistance_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7destroyEPS2__ZNKSt9_IdentityISsEclERSsleftfmtflagskTestsuitewcscpy_S_maximum_ZNKSt3setISsSt4lessISsESaISsEE10value_compEv_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE12_M_check_lenEjPKc_ZN7testing11IsSubstringEPKcS1_S1_S1_fflushpair, std::allocator > >, std::_Rb_tree_const_iterator, std::allocator > > >vectorst_blksize_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6rbeginEvkListTestsFlagreverse_iterator, std::allocator > > >_ZNK7testing12TestProperty3keyEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEE4baseEv_M_assign_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refcopyEv_ZN9__gnu_cxx14__alloc_traitsISaISsEE10deallocateERS1_PSsj_ZNKSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE19_M_get_Tp_allocatorEv~PrettyUnitTestResultPrintersa_handlerg_linked_ptr_mutex_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_rootEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4rendEvkMaxRandomSeed_ZN7testing8internal12UnitTestImplaSERKS1_PrintAsCharLiteralTo_ZN7testing8internal10AlwaysTrueEv__mode_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlTestCaseEPSoRKNS_8TestCaseE_IO_read_ptrset, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > > >_ZN7testing13PrintToStringIxEESsRKT__ZN7testing8internal12UnitTestImpl6randomEvconstruct_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEptEvfalse_type_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4dataEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEixEj_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEvHandleSehExceptionsInMethodIfSupported_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEjwRKS1__M_incr_ZNK7testing8internal13DeathTestImpl5regexEv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEptEv_ZN7testing8TestCase11AddTestInfoEPNS_8TestInfoEPrintBytesInObjectToImpl~allocatorrandom_seed_flag_ZN7testing8internal9DeathTest5AbortENS1_11AbortReasonEshowbase__copy_move_a_ZN7testing4Test19HasSameFixtureClassEvFLAGS_gtest_throw_on_failureAlwaysFalsekSpecialEscape_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEdeEv_Vector_base >_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE17_S_select_on_copyERKS4_rebind >_ZN7testing8UnitTest11GetInstanceEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_minimumEPSt18_Rb_tree_node_base_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEdeEv_ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7destroyEPS3_new_allocator_ZN7testing8internal12UnitTestImpl17current_test_infoEv_ZNSt3setISsSt4lessISsESaISsEE6insertERKSs_ZNKSs12find_last_ofEPKcjBits__uninitialized_copy_S_fixed_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_RKS2_UnitTest_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4backEv_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEdeEvmax_size_ZN7testing8internal20SingleFailureCheckeraSERKS1__Traits_ZN7testing8internal9DeathTestaSERKS1_default_valuesigned char_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_get_nodeEvisattybidirectional_iterator_tag_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKwj_ZN7testing8internal27PrettyUnitTestResultPrinter20OnTestIterationStartERKNS_8UnitTestEiHandleExceptionsInMethodIfSupportedFLAGS_gtest_output_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEaSERKS3_FloatingPoint__copy_m_ZN9__gnu_cxx14__alloc_traitsISaIPcEE10_S_on_swapERS2_S4_wcspbrka_statement_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEixEioperator<< Sendsubstr__ZN7testing11IsSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7_negation_ZNSt11char_traitsIcE2eqERKcS2__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEixEi_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEptEvHandleExceptionsInMethodIfSupported_M_refdataendl >_ZNK7testing8TestCase4nameEv__throw_bad_alloc_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_leftmostEvprint_timeregcomp_ZNSt10_Iter_baseIPSsLb0EE7_S_baseES0__ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7addressERKS2_scoped_ptrChar_kill_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7addressERKS2_severity_pthread_mutex_destroy_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEjRKS3__ZNSolsEPFRSoS_Evprintf_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE12_Vector_impl12_M_swap_dataERS4_operator<< _sbuf_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11equal_rangeERKS1_FLAGS_gtest_catch_exceptions_ZN7testing8internal27PrettyUnitTestResultPrinter24OnEnvironmentsSetUpStartERKNS_8UnitTestEdef_optional_ZNSt6vectorIiSaIiEE5frontEvtruncreporter_ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEjjRKS1__ZN7testing8internal18g_linked_ptr_mutexE_ZNSt6vectorIPcSaIS0_EE4rendEv_ZN7testing8internal18OsStackTraceGetterD2Ev_ZNKSbIwSt11char_traitsIwESaIwEE7compareERKS2___throw_bad_cast__uninitialized_copy_a_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6assignEjRKS2_strtoull__ostream_insert >fwprintf_Destroy__is_normal_iterator_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE7destroyERS3_PS2__ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestElong int_ZNSt11char_traitsIcE6assignEPcjc_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_copyEPKSt13_Rb_tree_nodeIS1_EPS9_ToUppervector >_ZN7testing13PrintToStringIPKwEESsRKT_operator-*, std::vector > >default_xml_generatorFormatHexIntstatus_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE10_S_on_swapERS3_S5__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorIiSaIiEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPiS1_EEjRKi_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE7releaseEv_ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE8allocateEjPKv_ZN7testing4Test8TearDownEvarray_ZNKSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE19_M_get_Tp_allocatorEv_ZNSt6vectorISsSaISsEE6insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EEjRKSs_ZNKSs7_M_dataEv_ZNSt12_Vector_baseIiSaIiEE13_M_deallocateEPijiteratoroperator!= >__destroy_ZN7testing8internal18StreamableToStringIxEESsRKT_socket_writer__ZN9__gnu_cxx17__normal_iteratorIPKcSsEmmEidescriptionGetDefaultFilter_ZN9__gnu_cxx17__normal_iteratorIPKcSsEmmEvbasic_string, std::allocator >_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEplEi_ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEvIsContainerTest_ZNSs4_Rep13_M_set_leakedEvreverse_iterator >_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_sharedEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8___uninit_copy*, std::basic_string*>_ZN7testing8internal13DeathTestImpl6PassedEb_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4backEv_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE7pointerEv_ZN7testing8internal5MutexaSERKS1_no_sub_ZNSs6insertEjRKSs_Rb_tree, std::allocator >, std::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >_ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEjjPKwj_ZN7testing8internal10scoped_ptrISsEaSERKS2__ZNSt6vectorIPcSaIS0_EE5clearEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE24_M_get_insert_unique_posERKS1__ZN7testing8internal17TestEventRepeater20OnTestIterationStartERKNS_8UnitTestEi_S_do_ituninitialized_copySOCK_NONBLOCK_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE8max_sizeEvRunSetUpTestCase_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8pop_backEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE3endEv_ZN7testing8UnitTestD0Ev_ZN7testing8internal31GetCurrentOsStackTraceExceptTopEPNS_8UnitTestEi_ZN7testing8internal9DeathTest6CreateEPKcPKNS0_2REES3_iPPS1_random_seed_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmiEiFilePath_Atomic_wordimpl_Format_ZNK7testing18TestEventListeners21default_xml_generatorEvos_stack_trace_getter__ZN9__gnu_cxx13new_allocatorIPcE10deallocateEPS1_j_ZN7testing17TestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE__is_normal_iterator_ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultEpipe_ZNKSt6vectorIPcSaIS0_EE4dataEvsi_signo_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEptEvCreateSOCK_PACKETiterator_S_keyTestRoleless, std::allocator > >allocator_KeyOfValue_ZN7testing8internal15UnitTestOptions20PatternMatchesStringEPKcS3__ZNKSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE19_M_get_Tp_allocatorEvwprintf_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEE4baseEvvector >_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEpLEi_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_fill_assignEjRKS2_operator- >__normal_iterator > >floatdeath_test_use_forktest_cases__ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorISsSaISsEE4dataEv__needlenum_chars_M_repBiggestInt_ZN7testing7FloatLEEPKcS1_ff_Iter_base<__gnu_cxx::__normal_iterator > >, true>set_child_pid__copy_mFLAGS_gtest_list_testsmbrlen_ZNSs9push_backEc_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEiGetParam()re_pattern_buffer_ZN7testing4TestD2Ev_ZNK7testing8internal13FloatingPointIfE13exponent_bitsEvssize_t_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNKSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE13get_allocatorEvargc_Ios_Fmtflags_M_replace_aux_ZN7testing8internal7PrintToEPKcPSo~CapturedStream__niter_baseresize_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZNSt11char_traitsIcE11to_int_typeERKc_ZN7testing14ExitedWithCodeaSERKS0_argvoperator<< _ZN7testing32ScopedFakeTestPartResultReporterC2EPNS_19TestPartResultArrayE_ZNSt6vectorISsSaISsEE15_M_erase_at_endEPSserrors_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EEixEj_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEvDerivedforever_ZNK7testing19TestPartResultArray17GetTestPartResultEi_ZNKSs17find_first_not_ofEcjseconds_IIter__niter_base_ZN7testing7MessageaSERKS0___elision_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_erase_auxESt23_Rb_tree_const_iteratorIS1_E_ZNSt6vectorIiSaIiEE6resizeEji_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE11_M_allocateEjUrlEncode_ZNK9__gnu_cxx13new_allocatorIcE7addressERc_ZNSt10_Iter_baseIN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS4_SaIS4_EEEELb1EE7_S_baseES9_CurrentStackTrace_ZN7testing8internal16DeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE__data_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEdeEvtest_part_resultsTestCaseFaileddiv_t__normal_iterator > >reverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt17_Rb_tree_iteratorIPKcEmmEi_ZN7testing4Test11DeleteSelf_EvStrDup__copy_move_ZNK7testing8TestInfo4nameEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSs16_S_construct_auxIPKcEEPcT_S3_RKSaIcESt12__false_type_ZNSt17_Rb_tree_iteratorIPKcEmmEv__dynamic_cast__is_move_iterator~XmlUnitTestResultPrinterBasicNarrowIoManip__list_ZNSt9basic_iosIcSt11char_traitsIcEE4fillEctv_nsec_ZN7testing38FLAGS_gtest_show_internal_stack_framesEUnlock_ZNK7testing10TestResult15HasFatalFailureEvpthread_setspecific__dnewinput_iterator_tag~ParameterizedTestCaseRegistryprinted_test_case_name_M_start_ZNK9__gnu_cxx13new_allocatorIwE8max_sizeEvusedSkipCommaTestPartResultReporterInterface__numeric_traits_integer_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZN7testing8TestCase14TestReportableEPKNS_8TestInfoEUInt_ZNK7testing8internal13FloatingPointIfE6is_nanEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEplEioperator!= >_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEixEidefault_xml_generator__ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE_ZNSt6vectorIPN7testing8TestInfoESaIS2_EEixEjstackset_up_tc_TEST_F_namesecond_ZNSsaSERKSsis_disabled_OnEnvironmentsTearDownEnd~SocketWriter_Num_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE15_M_erase_at_endEPS2__ZNKSt6vectorIiSaIiEE12_M_check_lenEjPKc_ZN9__gnu_cxx14__alloc_traitsISaIiEE10_S_on_swapERS1_S3__ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Evdashstatement_ZN7testing22FLAGS_gtest_print_timeE_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE19_M_get_Tp_allocatorEv_ZNKSt13_Bit_iteratormiEiExitedWithCodehintstm_gmtoff_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE17_S_select_on_copyERKS4__ZN7testing8internal14CmpHelperSTRNEEPKcS2_PKwS4__ZNKSt3setISsSt4lessISsESaISsEE3endEvoperator<< _ZN7testing7MessageC2ERKS0_UniversalPrintArrayst_blocks_ZN7testing8internal12UnitTestImpl25set_os_stack_trace_getterEPNS0_27OsStackTraceGetterInterfaceEpthread_tprefix_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE8allocateERS5_jDeathTestThreadWarningdata_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEppEv_ZNKSs4sizeEv__miter_base_ZN7testing8internal17StreamingListener20AbstractSocketWriter4SendERKSsallocator > >_ZNSt6vectorIPcSaIS0_EE9push_backERKS0_ai_addrlenkNonFatalFailure_ZNKSbIwSt11char_traitsIwESaIwEE2atEj_ZN7testing8internal21StackLowerThanAddressEPKvPbStat_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISsERKSs_ZNSt17_Rb_tree_iteratorISsEppEic_str_ZN7testing8internal13CaptureStreamEiPKcPPNS0_14CapturedStreamEsi_statusParseGoogleTestFlagsOnly_ZNK7testing8UnitTest19disabled_test_countEv__niter_baseoperator<< _ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE2atEjg_captured_stdout_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE8max_sizeERKS3__ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestEdeath_test_style_ZNKSs15_M_check_lengthEjjPKc_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE10_S_on_swapERS4_S6__ZNK9__gnu_cxx13new_allocatorIwE7addressERwoperator new_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEi__class_type_info_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEptEvbadbit_ZN7testing8TestInfoD2EvGetTestInfo_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEvruntime_errorEndsWithCaseInsensitivevector >__countGTestMutexLocksam1ostreamsam2long_value_ZN7testing8internal8GTestLogD2Ev_Vector_base >_ZN7testing8internal18GetInjectableArgvsEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEppEi_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEpLEi_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4rendEvrebind_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEppEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE7reserveEj_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE13_M_deallocateEPS2_j_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE12_Vector_impl12_M_swap_dataERS4_Setupsuccessful_test_case_countstat_ZNSt6vectorIiSaIiEE4swapERS1_exceptionReadAndInterpretStatusByte_ZN7testing8internal18OsStackTraceGetter19kElidedFramesMarkerEsa_restorerallocator_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE4swapERS5__M_node_ZNSs6assignEPKcj_ZN7testing8internal15GetUnitTestImplEvShuffleTests__iterator_categoryconst_pointer_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7addressERKS4_fgetws_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE13get_allocatorEvrand__cursummaryArrayAsVector<8>int_p_sign_posn_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_E_ZN7testing8internal12UnitTestImpl11AddTestInfoEPFvvES3_PNS_8TestInfoE_ZNSt6vectorISsSaISsEE5eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EE_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE9constructEPS3_RKS3_GetReservedAttributesForElementmode_ZN9__gnu_cxx13new_allocatorIiE7destroyEPioperator<< _ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4swapERS3_operator<< tm_sec__size_typekMaxParamLength_ZN9__gnu_cxx13new_allocatorIPKcE8allocateEjPKv__static_initialization_and_destruction_0new_allocator_ZN7testing8internal8GTestLogC2ENS0_16GTestLogSeverityEPKciactual_valueoperator<< _ZNSo3putEc_ZNK7testing10TestResult17test_part_resultsEvmessageTraceInfo__normal_iterator > >_ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEiFLAGS_gtest_shuffle_ZNSs7replaceEjjRKSs_ZN7testing8internal17StreamingListener12SocketWriteraSERKS2_new_allocator, std::allocator > > >value_paramArrayAsVector<6>_ZNSs4_Rep9_S_createEjjRKSaIcE__addressof >kValueParamLabel_Destroy_ZdlPv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE8key_compEv_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwjlist_tests__ZN9__gnu_cxx14__alloc_traitsISaIiEE8max_sizeERKS1_~ValueHolder_ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11upper_boundERKS1_term_supports_color_Rb_tree_increment_ZNKSt9_IdentityIPKcEclERS1__ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE9constructEPS4_RKS4__S_base_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4dataEv_ZNK7testing8internal12UnitTestImpl21total_test_case_countEv_ZNSt6vectorIPcSaIS0_EEixEj~OsStackTraceGetterkTestTypeIdInGoogleTestdeallocatemask_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE3endEv_Reppbase_ZN7testing8internal14ParseInt32FlagEPKcS2_Pi_ZN7testing8TestCaseC2EPKcS2_PFvvES4_AddTestPartResult__is_normal_iteratorfprintf_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_M_endEvtotal_part_count_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE17_M_create_storageEjnot_eofSkipSpacesnot_eolPrintToString_ZNSs4_Rep12_S_empty_repEvmon_decimal_pointcurrent_test_case_operator<< _ZNKSs17find_first_not_ofEPKcjoperator<< vector >unitbuf_ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEjPKcPartialMatchiterator_traits<__gnu_cxx::__normal_iterator > > >in_death_test_child_process~DefaultPerThreadTestPartResultReporter_ZNSs9_M_assignEPcjc_ZNK7testing8internal8FilePath14IsAbsolutePathEv_ZNSt11char_traitsIwE4findEPKwjRS1_ValidateTestPropertyNamereferencerfind_Referencewscanf_ZN7testing8internal12AssertHelperC2ENS_14TestPartResult4TypeEPKciS5___osize_DestroyToPrint_ZNK9__gnu_cxx13new_allocatorIiE7addressERKi_ZN7testing8internal8FilePath9NormalizeEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEppEi_ZNKSt6vectorIiSaIiEE5frontEv_ZN7testing8internal24XmlUnitTestResultPrinter26RemoveInvalidXmlCharactersERKSs__are_same_ZNK7testing8internal12UnitTestImpl16catch_exceptionsEvkRandomSeedFlag__iterator_category<__gnu_cxx::__normal_iterator*, std::vector > > >_ZlsRKN7testing8internal6SecretEi_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEppEv_ZNK7testing8UnitTest26successful_test_case_countEvoperator()<__gnu_cxx::__normal_iterator > >_S_showpoint_ZN7testing8internal17TestEventRepeater25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11upper_boundERKS1__IO_lock_t_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE10_S_on_swapERS3_S5__ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE8allocateEjPKv_ZN7testing8internal13DeathTestImpl11set_outcomeENS0_16DeathTestOutcomeE_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE_ZN7testing31TestPartResultReporterInterfaceaSERKS0__ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE19_M_get_Tp_allocatorEv__copy_m_ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_PKvPFvvES6_PNS0_15TestFactoryBaseEnew_allocator_ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7addressERS2__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4backEvEventForwardingEnabled__alloc_traits >_Rb_tree_impl, false>_ZN7testing8internal8FilePath3SetERKS1_should_runstring_ZNKSt17_Rb_tree_iteratorISsEneERKS0_kTypeParamLabel__simplefork_ZNSt11char_traitsIcE4findEPKcjRS1___is_move_iteratorproperty_with_matching_keylong long int_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE8max_sizeEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmmEv_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5_intptr_t_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEE4baseEv_ZN7testing8internal26GoogleTestFailureExceptionD2Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5clearEv_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11upper_boundERKS1__ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6rbeginEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEpLEi_ZNK7testing8UnitTest21successful_test_countEv_ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7destroyEPS3__ZN9__gnu_cxx14__alloc_traitsISaIiEE8allocateERS1_jcopyMatchesFilteroperator<=19pthread_mutexattr_t_ZN7testing8internal2RED2Ev_ZN7testing10TestResult14RecordPropertyERKSsRKNS_12TestPropertyECountIf, bool (*)(const testing::TestPartResult&)>_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE2atEjGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2LastMessage_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4rendEv_ZNK7testing8TestCase17failed_test_countEvscoped_ptr, std::allocator > >_Iter_basegtest_color_ZNKSs12find_last_ofEcj_ZNKSt23_Rb_tree_const_iteratorIPKcEneERKS2__ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE10deallocateEPS3_j_ZNK7testing8internal13FloatingPointIdE13fraction_bitsEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4swapERS7__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_rightEPKSt18_Rb_tree_node_base_ZN7testing8internal8FilePathaSERKS1_vector >_ZNKSbIwSt11char_traitsIwESaIwEE6substrEjj_ZN7testing8internal11CmpHelperNEEPKcS2_xx_S_dec_DestroyFilterTestsfirst_test_nameTestCaseInfoContainer_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5clearEva_type_param_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7addressERS3__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_rightmostEv_ZNKSt18_Bit_iterator_basegtERKS_GCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ0DXl€ ” ¨ŧĐäø  4H\p„˜ŦĀÔčü$8L 0AƒnÃhP*AƒhÄ€*Aƒhà°*AƒhÃŧāĐäø  đ4#H\p„˜ŦĀÔčü$8zPLR| ˆ@$0vA…B F‡†ƒc.[ ÃAÆAĮAÅ F D ÃAÆAĮAÅ A °°AƒCE LAÃ(ÔĐ!AƒC$I(E,A0HCà !AƒCK LAÃ48NA‡A †AƒkFA LJà AÆAĮ4pPNA‡A †AƒkFA LJà AÆAĮ4¨ NA‡A †AƒkFA LJà AÆAĮ4āđNA‡A †AƒkFA LJà AÆAĮ4@NA‡A †AƒkFA LJà AÆAĮ4PNA‡A †AƒkFA LJà AÆAĮ4ˆāOA‡A †AƒvFA FFà AÆAĮ4Ā0OA‡A †AƒvFA FFà AÆAĮ4ø€OA‡A †AƒvFA FFà AÆAĮ40ĐOA‡A †AƒvFA FFà AÆAĮ4h OA‡A †AƒvFA FFà AÆAĮH p[A…A ‡A†AƒC o$F(A,A0L LAÃAÆ AĮAÅHėĐTA…A ‡A†AƒC r$F(A,A0F HAÃAÆ AĮAÅ0800A†A ƒENF FL AÃAÆDl`mA…A ‡A†AƒE0}A‡A †AƒPBA HJAA HIà AÆAĮÄ 0 Ø @ %ė p    ° ( Ā *AƒhÃD đ CV\  CVt 0 CVŒ P CV¤ p CVŧ  CVÔ ° CV(ė Đ !AƒC$I(E,A0HCÃ$HAƒH8BA†A ƒCH NJG HG AÃAÆ $´0ĖČP(A†A ƒCOA HGEA HG  AÃAÆE CEA HGEA HGEA HHE HAEA HGEA HGEA HGEA HGEA HGEA HGEA HF CÃAÆt˜€÷H‡A †AƒwAE HAAF TA à AÆAĮB CAAF HA à AÆAĮJ CE HKF s€,CEB ]0°,CEB ]0PāDAƒCIB HCBE ]AÃt„0ĶA‡A †AƒC { Aà AÆAĮD G,E0H L$A(E,E0J G,E0H C$A(E,E0H C Aà AÆAĮC püxA…A ‡C†AƒH0•(H&CAƒC `,D0HAÃG ƒ4,"@>ŦŪA…B F‡†ƒƒ.É ÃAÆAĮAÅ A 4d"đ?īũA…B F‡†ƒy. ÃAÆAĮAÅ G <œ"åA…B C‡†ƒh.L.R.c.R.`ÃAÆAĮAÅ @Ü"āA$2A…B I‡†ƒ{ ÃAÆAĮAÅ F ].é ÃAÆAĮAÅ G @ #EÃA…B F‡†ƒo.O ÃAÆAĮAÅ F G ÃAÆAĮAÅ A @d#āEä•A…B F‡†ƒx.W ÃAÆAĮAÅ E F ÃAÆAĮAÅ G @¨#ĐFt˛A…B C‡†ƒa.Î ÃAÆAĮAÅ A g ÃAÆAĮAÅ A L4(PHjA‡A †AƒC T,D0H f Cà AÆAĮG LCà AÆAĮ0„(ĀHPAƒC P,D0H Z CÃC LCÃDp$IÁāA…B I‡†ƒm.y ÃAÆAĮAÅ K — ÃAÆAĮAÅ A D¸$A…B F‡†ƒ‰.ä ÃAÆAĮAÅ G L ÃAÆAĮAÅ A 4%āJK?A…B F‡†ƒL ÃAÆAĮAÅ H .48%0Pī˛A…B O‡†ƒo.Ø ÃAÆAĮAÅ D 4p% SãŨA…B C‡†ƒ.Ä ÃAÆAĮAÅ F 8¨%VvA…B O‡†ƒo.ô ÃAÆAĮAÅ H r.8ä%YĻ9A…B O‡†ƒr. ÃAÆAĮAÅ H z.4 &@]…jA…B I‡†ƒU.G ÃAÆAĮAÅ E 4X&Đ_ŽA…B I‡†ƒy.V ÃAÆAĮAÅ J (Ø*KAƒC ],G0PAÃG ƒ<+KA‡A †AƒC a,A0H E Aà AÆAĮH 4ü&āažŊA…B F‡†ƒi.Æ ÃAÆAĮAÅ E 04' d#ųA…B E†ƒc.r ÃAÆAÅ I 4h'ĐeŖA…B I‡†ƒO.Ë ÃAÆAĮAÅ G 4 'yLA…B F‡†ƒ[.f ÃAÆAĮAÅ C 0Ø'WXA…B E†ƒ].N ÃAÆAÅ C 4 (uhA…B F‡†ƒc.d ÃAÆAĮAÅ C 4D(€gĀtA…B F‡†ƒt ÃAÆAĮAÅ H a.4|(@iÜ“A…B I‡†ƒP. ÃAÆAĮAÅ F 4´( kÚĩA…B C‡†ƒJ.j ÃAÆAĮAÅ C 4-lAƒCWCÃHT- lOAƒC O$B(A,A0E,C E AÃK C$E(E,A0H EAÃ4X)plwĮA…B Gƒ[.[ Åà H N ÃÅ A 4)đlw×A…B Gƒ[.[ Åà H N ÃÅ A 4Č)pmgįA…B C‡†ƒT.k ÃAÆAĮAÅ A 4*ām5ûA…B C‡†ƒ~ ÃAÆAĮAÅ I A.@€. p\CMBEA HE K C M CBEA HHxÄ.€p–A…A ‡C†AƒG$B(E,A0H ^,A0H G$B(E,A0H$B(E,A0H S$B(E,A0H CAÃAÆ AĮAÅ4@/ qTA†A ƒCx  AÃAÆI C CÃAÆ\x/€qaA†A ƒCOAA HBEA P GÃAÆJƒ†CBEA HC AÃAÆØ/đq<¤+lA…B C‡†ƒ{..f.ē ÃAÆAĮAÅ I 4ä+rÛRA…B F‡†ƒe ÃAÆAĮAÅ G Z.U. 4,đrÛiA…B F‡†ƒe ÃAÆAĮAÅ G Z.U. xœ0ĐsēA…A ‡C†AƒG4B8EJ A…B F‡†ƒG ÃAÆAĮAÅ E d.˜ ÃAÆAĮAÅ A D`8 >q A…B F‡†ƒG ÃAÆAĮAÅ E d.˜ ÃAÆAĮAÅ A 4¨8ĐĄI˜ A…B F‡†ƒL ÃAÆAĮAÅ H g.Dā8 Ŗ Ā A…B F‡†ƒ  ÃAÆAĮAÅ D d.u ÃAÆAĮAÅ A D(9Ų A…B F‡†ƒd.Ô ÃAÆAĮAÅ D t ÃAÆAĮAÅ A Dp9¤ˆ A…B C‡†ƒN.´ ÃAÆAĮAÅ E } ÃAÆAĮAÅ A <¸9PĻÅ0 A…B E†ƒ\.u ÃAÆAÅ E i ÃAÆAÅ A 4ø9 §ŠG A…B DƒM Åà D N.v ÃÅ D 00:°§]W A…B H†ƒZ.ˆ ÃAÆAÅ A @d:Ē= A…G C‡†ƒn.\ ÃAÆAĮAÅ H g ÃAÆAĮAÅ F @¨:PĢ፠A…B C‡†ƒi.[ ÃAÆAĮAÅ C V ÃAÆAĮAÅ C Dė:\Ä A…B C‡†ƒc.č ÃAÆAĮAÅ D ƒ ÃAÆAĮAÅ A D4;Tũ A…B C‡†ƒ`.ä ÃAÆAĮAÅ C ƒ ÃAÆAĮAÅ A D|;Å6A…B C‡†ƒl.ų ÃAÆAĮAÅ B Ë ÃAÆAĮAÅ A 4Ä;=vA…B F‡†ƒ].y ÃAÆAĮAÅ F 4ü;ĸA…B I‡†ƒh.] ÃAÆAĮAÅ D 04<ûÄA…B H†ƒ\.] ÃAÆAÅ J 4h<åA…B I‡†ƒh.] ÃAÆAĮAÅ D 0 <ëA…B H†ƒU.] ÃAÆAÅ A 4Ô<(A…B I‡†ƒh.] ÃAÆAĮAÅ D D =@ŦBJA…L F‡†ƒ^.Q ÃAÆAĮAÅ C § ÃAÆAĮAÅ C 0T=ŒA…B H†ƒj.] ÃAÆAÅ D Dˆ=¯VŽA…B C‡†ƒr.a ÃAÆAĮAÅ D ] ÃAÆAĮAÅ H (Bđą/AƒHIED NCÃ(DB ˛,AƒEIED NCÃD(>P˛6ÔA…B C‡†ƒ`.a ÃAÆAĮAÅ F P ÃAÆAĮAÅ E (¸B´-AƒHHDD NCÃ(äBĀ´*AƒEHDD NCÃPČ>đ´}ūA…B C‡†ƒ^.Q.J.Ņ.J.Z ÃAÆAĮAÅ I P ÃAÆAĮAÅ E (dCpˇ-AƒHHDD NCÃ(C ˇ*AƒEHDD NCÃDt?Сä4A…B C‡†ƒn.Á ÃAÆAĮAÅ H ] ÃAÆAĮAÅ H (DĀē/AƒHIED NCÃ(0Dđē,AƒEIED NCÃ4@rA…B I‡†ƒh.] ÃAÆAĮAÅ D 4L@”A…B I‡†ƒh.] ÃAÆAĮAÅ D D„@ ģ2ļA…B F‡†ƒv ÃAÆAĮAÅ F R. ÃAÆAĮAÅ J 4Ė@HA…B I‡†ƒh.] ÃAÆAĮAÅ D 4A`ĀŅjA…B F‡†ƒe ÃAÆAĮAÅ G Z.D"A…B I‡†ƒZ.{.S.`.S.].S.Z ÃAÆAĮAÅ A ŗ ÃAÆAĮAÅ A DÄ]€_€î"A…B C‡†ƒ\. ÃAÆAĮAÅ I _ ÃAÆAĮAÅ F 8 ^ķ4#A…B F‡†ƒj.m ÃAÆAĮAÅ A .DH^dx#A…B F‡†ƒN.Ö ÃAÆAĮAÅ A Đ ÃAÆAĮAÅ A 4^hÉÆ#A…B C‡†ƒl.R ÃAÆAĮAÅ I cāh4Ü^Đ×#Y…B F‡†ƒd. ÃAÆAĮAÅ G \ci4(_Ĩ˙#A…B F‡†ƒY ÃAÆAĮAÅ K ^.¨ci(ŧcFA†A ƒC ~ AÃAÆ8 _ņ($A…B F‡†ƒj ÃAÆAĮAÅ J ™.Ž.4Ü_ iŠd$A…B I‡†ƒ\.9 ÃAÆAĮAÅ D H`Đlčˇ$A…B C‡†ƒk.X.R. f ÃAÆAĮAÅ D c ÃAÆAĮAÅ A L``ĀmXÎ$A…B C‡†ƒb. U.i. M.S ÃAÆAĮAÅ G [ ÃAÆAĮAÅ B H°` oŗņ$A…B I‡†ƒp.y. M.v ÃAÆAĮAÅ A I ÃAÆAĮAÅ A 4ü`āqŲ"%A…B C‡†ƒ`.y ÃAÆAĮAÅ A `4aĀrž9%A…B F‡†ƒx.A. J.k ÃAÆAĮAÅ F ]. J.m ÃAÆAĮAÅ I K ÃAÆAĮAÅ B <˜a€wv%A…B F‡†ƒ– ÃAÆAĮAÅ F R.c. e.4Øa y}Ą%A…B Dƒi. Y Åà G L ÃÅ A @bƒ´%A…B E†ƒc.I ÃAÆAÅ J T.J.h.J.{.Œœf zëAƒCL AÃG KA JTBBD HLA JPBBD HC AÃC CA JPBBD HEA EJA EJA E@äb‡ &A…B E†ƒc.I ÃAÆAÅ J T.J.j.J.}.°pg{žA…A ‡F†AƒE@YHILAPDLAHBLEPL@TDBHBLCPH@VLAPJ@[DAHALAPFLAHBLEPALAHFLAPI@M AÃAÆ AĮAÅD CLAPH@OLAPE@RLAPE@$h°|@đcƒd&A…B E†ƒc.I ÃAÆAÅ J T.J.h.J.{.´|hĐ|ËA…A ‡A†AƒEP_XI\A`PP[TAXA\A`F\AXB\E`QPcXA\A`HP`XB\E`A\D`PPWTAXA\A`F\CXA\A`TAÃAÆ AĮAÅKPƒ…†‡C\A`EPJ\A`EP4i ~TeĀ~ŧ&A…B F‡†ƒ ÃAÆAĮAÅ A V ÃAÆAĮAÅ A a.Ą ÃAÆAĮAÅ A @Xe‡Ø&A…B E†ƒc.I ÃAÆAÅ J T.J.j.J.}.0œe`„Õ0'F…B B†ƒk.i ÃAÆAÅ H @Đe@…†>'A…B F‡†ƒn.| ÃAÆAĮAÅ J š ÃAÆAĮAÅ D \jІCL8,f~t'A…B F‡†ƒ›.~ ÃAÆAĮAÅ A Į.Dhfđ†Ęŧ'A…B F‡†ƒu.d ÃAÆAĮAÅ K ž ÃAÆAĮAÅ G 8°fˆÅõ'A…B Aƒ_.a.M.Y Åà F [ ÃÅ A 8ėfč(A…B F‡†ƒj.| ÃAÆAĮAÅ A ^.8(gh4(A…B F‡†ƒ{.0 ÃAÆAĮAÅ A ļ.4dg‰ō”(A…B F‡†ƒM.} ÃAÆAĮAÅ J 4œgŠŧĢ(A…B F‡†ƒv.d ÃAÆAĮAÅ J 4ÔgP‹šÁ(A…B F‡†ƒv.d ÃAÆAĮAÅ J 4 hŒš×(A…B F‡†ƒy.d ÃAÆAĮAÅ G 8DhĢđ(A…B F‡†ƒ`.g ÃAÆAĮAÅ A B.8€hÎ)A…B F‡†ƒm.ą ÃAÆAĮAÅ A =.HŧhЌšl)A…B F‡†ƒY ÃAÆAĮAÅ K r.t. .x ÃAÆAĮAÅ H <ißÔ)A…B E†ƒb.r ÃAÆAÅ B | ÃAÆAÅ B <Hip‘˛ã)A…B B†ƒX.t ÃAÆAÅ E d ÃAÆAÅ A Đm0’CHDDA H0ŦiP’ų)A…B GƒR.h.M.y Åà F ”(nĒAƒC,E0H$E(E,E0F,A(B,E0F,A(B,E0P,A(B,E0F,A(E,E0M$E(A,E0H$E(E,E0F,A(E,E0H$A(A,E0H$E(E,E0F,A(E,E0H$A(A,E0H$E(E,E0F,A(B,E0F,F(B,E0K,A(B,E0F,F(B,E0K,A(B,E0F,F(E,E0H$A(A,E0H$E(E,E0F,A(B,E0H$T(E,E0F,A(E,E0R$A(A,E0H$E(E,E0F,A(B,E0H$F(E,E0H$E(E,E0H$O(E,E0H$Y(E,E0RAÃ.symtab.strtab.shstrtab.rel.text.data.bss.text.unlikely._ZNKSt5ctypeIcE8do_widenEc.text._ZNKSt5ctypeIcE8do_widenEc.text.unlikely._ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev.text._ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev.text.unlikely.DeleteThreadLocalValue.text.DeleteThreadLocalValue.text.unlikely._ZN7testing4Test11DeleteSelf_Ev.text._ZN7testing4Test11DeleteSelf_Ev.text.unlikely._ZN7testing4Test5SetupEv.text._ZN7testing4Test5SetupEv.text.unlikely._ZN7testing8TestCase16RunSetUpTestCaseEv.text._ZN7testing8TestCase16RunSetUpTestCaseEv.text.unlikely._ZN7testing8TestCase19RunTearDownTestCaseEv.text._ZN7testing8TestCase19RunTearDownTestCaseEv.text.unlikely._ZN7testing11EnvironmentD2Ev.text._ZN7testing11EnvironmentD2Ev.text.unlikely._ZN7testing11Environment5SetUpEv.text._ZN7testing11Environment5SetUpEv.text.unlikely._ZN7testing11Environment8TearDownEv.text._ZN7testing11Environment8TearDownEv.text.unlikely._ZN7testing11Environment5SetupEv.text._ZN7testing11Environment5SetupEv.text.unlikely._ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE.text.unlikely._ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEi.text._ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEi.text.unlikely._ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE.text.unlikely._ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestE.text.unlikely._ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE.text._ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE.text.unlikely._ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE.text._ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE.text.unlikely._ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultE.text._ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultE.text.unlikely._ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE.text._ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE.text.unlikely._ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE.text._ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE.text.unlikely._ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestE.text.unlikely._ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE.text.unlikely._ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi.text._ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi.text.unlikely._ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE.text.unlikely._ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEv.text._ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEv.text.unlikely._ZN7testing22EmptyTestEventListenerD2Ev.text._ZN7testing22EmptyTestEventListenerD2Ev.rel.text.unlikely.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE.text._ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE.text._ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE.text._ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE.text._ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE.text.unlikely._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Ev.text._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Ev.text.unlikely._ZN7testing8internal23DefaultDeathTestFactoryD2Ev.text._ZN7testing8internal23DefaultDeathTestFactoryD2Ev.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinterD2Ev.text._ZN7testing8internal27PrettyUnitTestResultPrinterD2Ev.text.unlikely._ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev.text._ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev.text.unlikely._ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Ev.text._ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Ev.text.unlikely._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev.rel.text._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev.text.unlikely._ZN7testing8internal26ThreadLocalValueHolderBaseD0Ev.rel.text._ZN7testing8internal26ThreadLocalValueHolderBaseD0Ev.text.unlikely._ZN7testing11EnvironmentD0Ev.rel.text._ZN7testing11EnvironmentD0Ev.text.unlikely._ZN7testing8internal23DefaultDeathTestFactoryD0Ev.rel.text._ZN7testing8internal23DefaultDeathTestFactoryD0Ev.text.unlikely._ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev.rel.text._ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev.text.unlikely._ZN7testing8internal35DefaultGlobalTestPartResultReporterD0Ev.rel.text._ZN7testing8internal35DefaultGlobalTestPartResultReporterD0Ev.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinterD0Ev.rel.text._ZN7testing8internal27PrettyUnitTestResultPrinterD0Ev.text.unlikely._ZN7testing22EmptyTestEventListenerD0Ev.rel.text._ZN7testing22EmptyTestEventListenerD0Ev.rel.gcc_except_table.rodata.str1.1.text.unlikely._ZN7testing8internal26GoogleTestFailureExceptionD2Ev.rel.text._ZN7testing8internal26GoogleTestFailureExceptionD2Ev.text.unlikely._ZN7testing8internal26GoogleTestFailureExceptionD0Ev.rel.text._ZN7testing8internal26GoogleTestFailureExceptionD0Ev.text.unlikely._ZN7testing8internal24XmlUnitTestResultPrinterD2Ev.rel.text._ZN7testing8internal24XmlUnitTestResultPrinterD2Ev.text.unlikely._ZN7testing8internal24XmlUnitTestResultPrinterD0Ev.rel.text._ZN7testing8internal24XmlUnitTestResultPrinterD0Ev.text.unlikely._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Ev.rel.text._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Ev.text.unlikely._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Ev.rel.text._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Ev.text.unlikely._ZNSt6vectorISsSaISsEED2Ev.rel.text._ZNSt6vectorISsSaISsEED2Ev.rodata.str1.4.text.unlikely._ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev.rel.text._ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev.text.unlikely._ZN7testing15AssertionResult13AppendMessageERKNS_7MessageE.rel.text._ZN7testing15AssertionResult13AppendMessageERKNS_7MessageE.text.unlikely._ZN7testing14TestPartResultD2Ev.rel.text._ZN7testing14TestPartResultD2Ev.text.unlikely._ZN7testing12TestPropertyD2Ev.rel.text._ZN7testing12TestPropertyD2Ev.text.unlikely._ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev.rel.text._ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev.text.unlikely._ZN7testing7MessageC2ERKS0_.rel.text._ZN7testing7MessageC2ERKS0_.rel.rodata.text.unlikely._ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev.rel.text._ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev.text.unlikely._ZN7testing8internal10scoped_ptrISsE5resetEPSs.rel.text._ZN7testing8internal10scoped_ptrISsE5resetEPSs.text.unlikely._ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2_.rel.text._ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2_.text.unlikely._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3_.rel.text._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3_.text.unlikely._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_.rel.text._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_.text.unlikely._ZN7testing13PrintToStringIPKcEESsRKT_.rel.text._ZN7testing13PrintToStringIPKcEESsRKT_.text.unlikely._ZN7testing13PrintToStringIPKwEESsRKT_.rel.text._ZN7testing13PrintToStringIPKwEESsRKT_.text.unlikely._ZN7testing8internal18StreamableToStringIiEESsRKT_.rel.text._ZN7testing8internal18StreamableToStringIiEESsRKT_.text.unlikely._ZN7testing8internal18StreamableToStringIxEESsRKT_.rel.text._ZN7testing8internal18StreamableToStringIxEESsRKT_.text.unlikely._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_.rel.text._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_.text.unlikely._ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv.rel.text._ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv.text.unlikely._ZN7testing8internal5MutexD2Ev.rel.text._ZN7testing8internal5MutexD2Ev.text.unlikely._ZN7testing8internal9MutexBase6UnlockEv.rel.text._ZN7testing8internal9MutexBase6UnlockEv.text.unlikely._ZN7testing8internal9MutexBase4LockEv.rel.text._ZN7testing8internal9MutexBase4LockEv.text.unlikely._ZN7testing8internal17StreamingListener12SocketWriter4SendERKSs.rel.text._ZN7testing8internal17StreamingListener12SocketWriter4SendERKSs.text.unlikely._ZN7testing8internal17StreamingListener12SocketWriterD2Ev.rel.text._ZN7testing8internal17StreamingListener12SocketWriterD2Ev.text.unlikely._ZN7testing8internal17StreamingListener12SocketWriterD0Ev.rel.text._ZN7testing8internal17StreamingListener12SocketWriterD0Ev.text.unlikely._ZN7testing8internal17StreamingListenerD2Ev.rel.text._ZN7testing8internal17StreamingListenerD2Ev.text.unlikely._ZN7testing8internal17StreamingListenerD0Ev.rel.text._ZN7testing8internal17StreamingListenerD0Ev.text.unlikely._ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs.rel.text._ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs.text.unlikely._ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoE.rel.text._ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoE.text.unlikely._ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE.rel.text._ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE.text.unlikely._ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestE.rel.text._ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestE.text.unlikely._ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE.rel.text._ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE.text.unlikely._ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEi.rel.text._ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEi.text.unlikely._ZN7testing8internal18OsStackTraceGetterD2Ev.rel.text._ZN7testing8internal18OsStackTraceGetterD2Ev.text.unlikely._ZN7testing8internal18OsStackTraceGetterD0Ev.rel.text._ZN7testing8internal18OsStackTraceGetterD0Ev.text.unlikely._ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestE.rel.text._ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestE.text.unlikely._ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE.rel.text._ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE.text.unlikely._ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE.rel.text._ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE.text.unlikely._ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEi.rel.text._ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEi.text.unlikely._ZN7testing15AssertionResultlsINS_7MessageEEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsINS_7MessageEEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA11_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA11_cEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsISsEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsISsEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA2_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA2_cEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA3_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA3_cEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIPKcEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIPKcEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA5_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA5_cEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA7_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA7_cEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA12_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA12_cEERS0_RKT_.text.unlikely._ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5_.rel.text._ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5_.text.unlikely._ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5_.rel.text._ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5_.text.unlikely._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev.rel.text._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev.text.unlikely._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Ev.rel.text._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Ev.text.unlikely._ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EE.rel.text._ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EE.text.unlikely._ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT_.rel.text._ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT_.text.unlikely._ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo.rel.text._ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo.rel.rodata._ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo.text.unlikely._ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo.rel.text._ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo.rel.rodata._ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo.text.unlikely._ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo.rel.text._ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo.text.unlikely._ZN7testing8internal10scoped_ptrIKSsE5resetEPS2_.rel.text._ZN7testing8internal10scoped_ptrIKSsE5resetEPS2_.text.unlikely._ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.rel.text._ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.text.unlikely._ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi.rel.text._ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi.text.unlikely._ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.rel.text._ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.text.unlikely._ZN7testing8internal15NoExecDeathTestD2Ev.rel.text._ZN7testing8internal15NoExecDeathTestD2Ev.text.unlikely._ZN7testing8internal13ExecDeathTestD2Ev.rel.text._ZN7testing8internal13ExecDeathTestD2Ev.text.unlikely._ZN7testing8internal15NoExecDeathTestD0Ev.rel.text._ZN7testing8internal15NoExecDeathTestD0Ev.text.unlikely._ZN7testing8internal13ExecDeathTestD0Ev.rel.text._ZN7testing8internal13ExecDeathTestD0Ev.text.unlikely._ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.rel.text._ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.text.unlikely._ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.rel.text._ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.text.unlikely._ZN7testing8internal18StreamableToStringIPcEESsRKT_.rel.text._ZN7testing8internal18StreamableToStringIPcEESsRKT_.text.unlikely._ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_.rel.text._ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_.text.unlikely._ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_.rel.text._ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_.text.unlikely._ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE.rel.text._ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE.text.unlikely._ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs.rel.text._ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs.text.unlikely._ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs.rel.text._ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs.text.unlikely._ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0_.rel.text._ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0_.text.unlikely._ZN7testing13PrintToStringIxEESsRKT_.rel.text._ZN7testing13PrintToStringIxEESsRKT_.text.unlikely._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tag.rel.text._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tag.text.unlikely._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag.rel.text._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag.text.unlikely._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag.rel.text._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag.text.unlikely._ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag.rel.text._ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag.text.unlikely._ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT_.rel.text._ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT_.text.unlikely._ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT_.rel.text._ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT_.text.unlikely._ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0_.rel.text._ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0_.text.unlikely._ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv.rel.text._ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv.text.unlikely._ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3_.rel.text._ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3_.text.unlikely._ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs.rel.text._ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs.text.unlikely._ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT_.rel.text._ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT_.text.unlikely._ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT_.rel.text._ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT_.text.unlikely._ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6_.rel.text._ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6_.text.unlikely._ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv.rel.text._ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv.text.unlikely._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc.rel.text._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc.text.unlikely._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc.rel.text._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc.text.unlikely._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc.rel.text._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc.text.unlikely._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKc.rel.text._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKc.text.unlikely._ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.rel.text._ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.text.unlikely._ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5_.rel.text._ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5_.text.unlikely._ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_.rel.text._ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_.text.unlikely._ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing12TestPropertyES4_EET0_T_S6_S5_.rel.text._ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing12TestPropertyES4_EET0_T_S6_S5_.text.unlikely._ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_.rel.text._ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_.rel.text.startup.rel.init_array.bss._ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_E.rel.rodata._ZTIN7testing8internal26ThreadLocalValueHolderBaseE.rodata._ZTSN7testing8internal26ThreadLocalValueHolderBaseE.rel.rodata._ZTIN7testing8internal26GoogleTestFailureExceptionE.rodata._ZTSN7testing8internal26GoogleTestFailureExceptionE.rel.rodata._ZTIN7testing8internal9DeathTestE.rodata._ZTSN7testing8internal9DeathTestE.rel.rodata._ZTIN7testing8internal16DeathTestFactoryE.rodata._ZTSN7testing8internal16DeathTestFactoryE.rodata._ZTSN7testing8internal23DefaultDeathTestFactoryE.rel.rodata._ZTIN7testing8internal23DefaultDeathTestFactoryE.rel.rodata._ZTIN7testing31TestPartResultReporterInterfaceE.rodata._ZTSN7testing31TestPartResultReporterInterfaceE.rodata._ZTSN7testing8internal24HasNewFatalFailureHelperE.rel.rodata._ZTIN7testing8internal24HasNewFatalFailureHelperE.rodata._ZTSN7testing4TestE.rel.rodata._ZTIN7testing4TestE.rodata._ZTSN7testing8TestCaseE.rel.rodata._ZTIN7testing8TestCaseE.rel.rodata._ZTIN7testing17TestEventListenerE.rodata._ZTSN7testing17TestEventListenerE.rel.rodata._ZTIN7testing22EmptyTestEventListenerE.rodata._ZTSN7testing22EmptyTestEventListenerE.rodata._ZTSN7testing8UnitTestE.rel.rodata._ZTIN7testing8UnitTestE.rodata._ZTSN7testing32ScopedFakeTestPartResultReporterE.rel.rodata._ZTIN7testing32ScopedFakeTestPartResultReporterE.rel.rodata._ZTIN7testing8internal27OsStackTraceGetterInterfaceE.rodata._ZTSN7testing8internal27OsStackTraceGetterInterfaceE.rodata._ZTSN7testing8internal18OsStackTraceGetterE.rel.rodata._ZTIN7testing8internal18OsStackTraceGetterE.rodata._ZTSN7testing8internal35DefaultGlobalTestPartResultReporterE.rel.rodata._ZTIN7testing8internal35DefaultGlobalTestPartResultReporterE.rodata._ZTSN7testing8internal38DefaultPerThreadTestPartResultReporterE.rel.rodata._ZTIN7testing8internal38DefaultPerThreadTestPartResultReporterE.rodata._ZTSN7testing8internal12UnitTestImplE.rel.rodata._ZTIN7testing8internal12UnitTestImplE.rel.rodata._ZTIN7testing8internal17StreamingListener20AbstractSocketWriterE.rodata._ZTSN7testing8internal17StreamingListener20AbstractSocketWriterE.rel.rodata._ZTIN7testing8internal17StreamingListener12SocketWriterE.rodata._ZTSN7testing8internal17StreamingListener12SocketWriterE.rel.rodata._ZTIN7testing8internal17StreamingListenerE.rodata._ZTSN7testing8internal17StreamingListenerE.rodata._ZTSN7testing8internal27PrettyUnitTestResultPrinterE.rel.rodata._ZTIN7testing8internal27PrettyUnitTestResultPrinterE.rodata._ZTSN7testing8internal17TestEventRepeaterE.rel.rodata._ZTIN7testing8internal17TestEventRepeaterE.rodata._ZTSN7testing8internal24XmlUnitTestResultPrinterE.rel.rodata._ZTIN7testing8internal24XmlUnitTestResultPrinterE.rodata._ZTSN7testing8internal13DeathTestImplE.rel.rodata._ZTIN7testing8internal13DeathTestImplE.rodata._ZTSN7testing8internal16ForkingDeathTestE.rel.rodata._ZTIN7testing8internal16ForkingDeathTestE.rodata._ZTSN7testing8internal15NoExecDeathTestE.rel.rodata._ZTIN7testing8internal15NoExecDeathTestE.rodata._ZTSN7testing8internal13ExecDeathTestE.rel.rodata._ZTIN7testing8internal13ExecDeathTestE.rel.rodata._ZTIN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE.rodata._ZTSN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE.rel.rodata._ZTIN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE.rodata._ZTSN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE.rel.rodata._ZTVN7testing8internal26GoogleTestFailureExceptionE.rel.rodata._ZTVN7testing8internal9DeathTestE.rel.rodata._ZTVN7testing8internal17StreamingListener12SocketWriterE.rel.rodata._ZTVN7testing8internal17StreamingListenerE.rel.rodata._ZTVN7testing32ScopedFakeTestPartResultReporterE.rel.rodata._ZTVN7testing8internal35DefaultGlobalTestPartResultReporterE.rel.rodata._ZTVN7testing8internal38DefaultPerThreadTestPartResultReporterE.rel.rodata._ZTVN7testing4TestE.rel.rodata._ZTVN7testing8TestCaseE.rel.rodata._ZTVN7testing8internal27PrettyUnitTestResultPrinterE.rel.rodata._ZTVN7testing8internal17TestEventRepeaterE.rel.rodata._ZTVN7testing8internal24XmlUnitTestResultPrinterE.rel.rodata._ZTVN7testing8internal18OsStackTraceGetterE.rel.rodata._ZTVN7testing8UnitTestE.rel.rodata._ZTVN7testing8internal12UnitTestImplE.rel.rodata._ZTVN7testing8internal13DeathTestImplE.rel.rodata._ZTVN7testing8internal16ForkingDeathTestE.rel.rodata._ZTVN7testing8internal15NoExecDeathTestE.rel.rodata._ZTVN7testing8internal13ExecDeathTestE.rel.rodata._ZTVN7testing8internal23DefaultDeathTestFactoryE.rel.rodata._ZTVN7testing8internal24HasNewFatalFailureHelperE.rel.rodata._ZTVN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE.rel.rodata._ZTVN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE.rodata.cst4.rel.debug_info.debug_abbrev.rel.debug_loc.rel.debug_aranges.rel.debug_ranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame.group¯n4 ˝n@ܯnT Νn` Đ¯nl ҝnx Ō¯n„ ͝nŨ¯n¤ Ö¯n° ׯnŧ دnČ Ų¯nÔ Ú¯nā Û¯nė ܯnø Ũ¯n Ū¯n ߯n ā¯n( á¯n4 â¯n@ ã¯nL ä¯nX å¯nd æ¯npŪ¯n„ đ¯n ņ¯nœ ō¯n¨ ķ¯n´ß¯nČā¯nÜá¯nđâ¯nã¯nä¯n,å¯n@æ¯nT į¯n` č¯nl p¯nx é¯n„ ę¯në¯n¤ ė¯n° Y¯nŧ ]¯nČ ^¯nÔ _¯nā m¯nė s¯nø y¯n |¯n ¯n —¯n( í¯n4 ›¯n@ ¯nL  ¯nXî¯nlī¯n€ Ŧ¯nŒ ­¯n˜ ޝn¤ ¯¯n° °¯nŧ ą¯nČđ¯nÜ Á¯nč Ɲnô ˯n ˝n  ͯn ίn$ Νn0 Đ¯n< ҝnH Ō¯nT Ô¯n` ā¯nl á¯nx ã¯n„ į¯n é¯nœ ņ¯n¨ ō¯n´ ņ¯nĀ ô¯nĖö¯nÜø¯nė ú¯nø ü¯n ¯n ¯n ¯n(ķ¯n<ô¯nP I¯n\ K¯nh L¯nt M¯n€ N¯nŒ O¯n˜ P¯n¤ R¯n° X¯nŧ ^¯nČ e¯nÔ f¯nā g¯nė j¯nø u¯n x¯n z¯n }¯n( ‘¯n4 Ą¯n@ ¤¯nL §¯nX Нnd ǝnp š¯n| ŧ¯nˆ ž¯n” Á¯n  ƯnŦ Ɲn¸ ˯nÄ Đ¯nĐ Ņ¯nÜG¯nä[¯nėŨ¯nô­¯nü߯ná¯n â¯nã¯nä¯n$å¯n,æ¯n4į¯n<č¯nDé¯nLę¯nTë¯n\ė¯ndí¯nlî¯ntī¯n|đ¯n„ņ¯nŒō¯n”ķ¯nœô¯n¤õ¯nŦö¯n´÷¯nŧø¯nÄų¯nĖú¯nÔû¯nÜü¯näũ¯nėū¯nô˙¯nü¯n¯n ¯n¯n¯n$¯n,¯n4¯n<¯nD ¯nL ¯nT ¯n\ ¯nd ¯nl¯nt¯n|¯n„¯nŒ¯n”¯nœ¯n¤Z¯nŦY¯n´|¯nŧ{¯nįnĖ8¯nÔĨ¯nÜŠ¯n䇯nėL¯nôO¯nü~¯n ¯n ¯n  ¯n '¯n$ ļ¯n, ¯n4 ¯n< 1¯nD ;¯nL B¯nT C¯n\ ¯nd ƒ¯nl ,¯nt ~€ Q“ $`ž×%Ҝ+āœų 0āœZāœ{æœŋđœúōœ =l ’2ē@ŲDP @Z{` ­jŲpür,€S‚†°’ā ¤^°Ŧ˛ĀW´НŌcāĩ❠đTō¤žëžGžšžį ž+ "ž} 0žÆ 2ž& @ž} BžÛ Pž0 Ržˆ `ž× bž, pžx ržØ €ž/ ‚žf ž˜ ’žæ” „Ąx§ xŸ €Ÿh‚ŸŅŸ1’Ÿ ŸĸŸc°ŸŊ˛Ÿ'ŸˆŸÉПԟFāŸ‚âŸŌđŸōŸf Ē   üĄ$y Á  Ŋ ĸ'ü& ,0 ( ĸ*O6 ”@  ĸ-ĖF  P  ĸ0gV ¸` ´ $ĸ3üf Ep A ,ĸ6v ŧ€ ¸ 4ĸ9*ę <ĸ@;2ĸĘ4ÖØWāØS |ĸ?’đØÚđØ!Ö ŒĸBŲ[ Ų-W ¤ĸE”NŲÚPŲGÖ ŧĸ(H˜Ų| Ųbx äĸ KØÚAÚk= Ŗ(N|ÚË€ÚYĮ ,ŖQė2ÜÚ„û`ėF`ėtB DŖU„ÔėŌāėãÎ \ŖhXÄíFĐí~B ÄŖ@[lNîPîV™ ¤(^ÁĻî °îC ,¤(aDôîsīo T¤d™@ņĶ @• dĨfĄ˙é ˙Kå ôŠ0i$l˙fp˙Kb $Ēl›ŧ˙ûĀ˙y÷ <Ē8oN 9˜ @W” tĒ0rÕ —! u! ¤Ē@u\!–! l’! äǐxÃ!Œũ!Īų! tŦ {*"_p"`nl" Ž ~Š"Îī"Đrë" 4Ž (#B p#P Ll# TŽ(„Ģ#œ $  $ |Ž`‡V$0 ˆ$0 „$ ÜŽpŠ­$Ā č$Ā —ä$ L¯p%X O%` šK% ŧ¯x{%ú Î% "Ę% 4°Č“&" a&0 Ŧ]& ü°`–Ą&Ü î&ā ˇę& \ąh™.'˜m' Ũi' ÄąpœŸ'~Ū'€āÚ' 4˛xŸ(`m(`¯i( Ŧ˛ĸŊ()Û) ŧŗ€Ĩ`)ėŧ)đÛ¸) <´€¨ *Ėh*Đ d* ŧ´Ģ¸*Ú+ā1+ LĩĀŽs+Õ+ ŋŅ+ ˇpą*,āj,āŸf, |ˇx´,€Ũ,€ĒŲ, ôˇ€ˇ-*o-0k- t¸@ēÁ-4.@\. ´šxŊ^.œ¸. T´. ,ģxĀ/ô e/!Åa/ ¤ŧ€Ã¸/Æ#0Đ#=ũ/ $žÆ=0%0%{0 ´žxÉ´0,&ķ00&ûī0 ,ŋhĖ%1,'f10'b1 ”ŋxĪš1L(ë1P(ëį1 ĀhŌ/2<)p2@)l2 tĀxÕ¤2\*ä2`*ā2 ėĀ€Ø3|+X3€+T3 lÁxÛŒ3œ,Í3 ,É3 äÁxŪ4ŧ-C4Ā-?4 \Âxáx4Û.Õ4ā.RŅ4 Ԑä%527‚5@7 ~5 dƐįŌ5F@36P@¯/6 ôÉxę‡6Aã6A=ß6 lʨí27=B‘7@Bķ7 Ë@đã73D+8@Dm'8 TĖķf8­DŽ8°DcĒ8 dĖāöí8Hté8 DÎčø*9ˆIr9Ikn9 ,Ņāûą9üLt­9 Ķčũî9pN6:pNū2: ôÕ˜q:nOĩ:pOKą: ŒÖė:ŧOf;ĀOhb; ¤Ö(Ķ;(Q4<0Qf0< ĖÖ( ˆ<–R = Rh= ôÖ( ƒ=TĀ=T\ŧ= ×čđ=lU+>pU\'> ØčY>ĖV–>ĐVh’> ėØđÆ>8X?@Xhũ> ÜŲđ/?¨Y­?°YhŠ? ĖÚ(@[˜@ [h”@ ôÚ(Aˆ\LA\ĻHA Û8!†A6]îA@]hęA TÛ($IB¨^ŠB°^tĨB |Û'üB$_eC0__aC „Û *ÁC_D_ØD ¤Û-\Dh`ŧDp`ķ¸D ´Ûh0EcbÁEpbœŊE Üp3fF cžFcŅšF ŒÜ`6ÉFáeŸGđeE›G ėŨ89hH5gI@gÁ I $Ū8<ŠIixJixtJ \Ū8?:KˆjKj ‰K ”Ū0BĶK0k$L0k] L ÄŪ0EhLnšLn~ĩL ôā0HũLr´Mrœ°M $ãpK^NŦrĐN°rÚĖN ”ãN5OŠsxOsFtO $äQŽOÖsPāsķP 4äTkPĶv˛PāvĐŽP 4åøWėP°x3Q°xĨ/Q ,æāZmQUzËQ`zFĮQ į]RĻz‰R°zņ…R įĐ`éRĄ|VS°|ƒRS ėįČcļS3~9T@~‡5T ´čČf¯TĮ UĐƒU |éČi„USûU`‡÷U DęČleVč‚čVđ‚~äV ëo^Wn†ÎWp†čĘW ė`r1XX‡ąX`‡h­X lė¸u$Yȋ’YЋĢŽY $îHxķY|ŒqZ€ŒÎmZ lîx{æZPĒâZ äīh}øZü’ôZ Lķ[“C[“?[ Tķ‚[ “0 ŋ[P“ ģ[ dķ…û[`“0 ;\“7\ |ķˆe\˜““\¸“\ Œķ‹Å\Ā“& ÷\”- 4]0” 0] œķq]<”m] ´ķ‘Š]`”, á] ”. ^Д ^ Äķ•Y^ܔy^ė”u^ Üķ˜•^ô”š^•ĩ^ ėķ›Ũ^•Ų^ üķ_•5_8• 1_ ô d_`•# “_ƒ•ˇ_˜•ŗ_ $ô¤×_ •- `Е ` 4ô§Q`ܕM` LôŠŽ`–1 Ë`@–( ah– ˙` \ô­7a€–9 €aŧ– |a tô°Åaā–< b—  b ŒôŗYb@—" ‹bd—‡b ¤ôļŊbl—šb ´ô¸c€—= ScĀ— Oc Äôģ”cā—5 Ųc˜ Õc Üôž d@˜' ?d€˜1 €d´˜ |d ôôÂŊd˜' ôdč˜ đd õÅ'e™. ee0™ ae $õČŸe@™# Ōed™ Îe <õËf€™& 7f¨™ 3f TõÎifĀ™% žfč™ šf lõŅĪfš# g$š ūf „õÔ5g0š 1g œõÖ’g@šQ@ķg”š īg ´õŲUhšV@ģh›ˇh Ėõ Üûh@› ÷h ėõ(Ū)i`›%i ö(āni€›D@ji <ö€âĨițĄi ŧö äâiā›Ūi Üö æ+jø›'j üö čwj œ sj ÷(ę—j@œ“j D÷ėģj€œD@ˇj \÷€îüjD@øj Ü÷€đ3k€D@/k \ø€ōqkȝmk Üø(ôŠkāĨk ųöÍkđÉk ųø˙kž ûk 4ų(ú2l ž .l \ų(ühl@ž dl „ų8ūl`ž ™l ŧų8Đl€žĖl ôų  m˜ž m ú Km°žGm 4úŦmĀž¨m LúnОnԞ/g n dúø0 +n \=n_ Í9n \+ ÜLn"ĒČHn t&¸_nęŽH€[n , &@'qn2/Ÿ mn l3(°}n0Ņ9T]ˆn0%—-‘nR—ĨnT—ŧoĄn 8(˜ļnxō°aĖ (TüŽņ˙×ŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙      !"#$&')*,-/0235689;=>?AB00×X`m×ŊІ×ö`?×DEGHJKMNPQS e×N Ā׍Đ X×TUWXšč fÅđÚČÚ]ę f…ß fZ[]^Ž@ fŌ *—×āÚ8fhĐڒÔÚŧĖÚ`aęå"ĐFt×cdJk fiX ffhiklnoqrtu‰ kÚ×Ëpmg×ām5×P p\׃€p–×wxŧĐsē×z{}~õĐw׍ f€ƒ„?ô f†‡‰ŠŒ’“•–˜™›œžŸĄĸ¤Ĩ§¨ĒĢ­Ž°ąŗ´ļˇšēd¤ˆ×ŧŊŋĀÂÃÅÆČÉËĖÎĪŅŌÔÕרސ¯V×P˛6×Uđ´}×ÂСä×ÚÛŨŪāáãäæįéęėíīđōķõöøúûũ˙   čÚG (Úv} f˜Āú × !#$&')*,-/0235689;<>?ɏ fABí§ f ×J @Ÿ fDE{  f­ ~ fŲ m f g f) Ķ fU ŋ f ` fŖ § fÕ U fü N f C fG 7 fo 0 f“ ( f¸  få  f ô fGHJKMNPQ= Øڈ ”ÚŅ €DČ×  f0 f] ė fSTˆ hÉ×VWYZ\]_`bcefË {ž×hiī Đ|Ë×klnoqrtuwxz{}Ē}KøÚZä f‚„…‡ˆŠ‹Ž‘“”•—˜š›Ÿ ĸŖ¤Ļ§ŠĢŦ­¯°˛ŗĩļ¸ēģŊžĀÁÂÄÅĮČĘËÍÎĐŅĶÔÖØŲÛÜŪāâäæčęėîđōôöøúüū   €ĩŌúU ‡!Ŋ"ū#<$q%¤&ú'(M*m+‹,Ā-Ü8û<5=aDŽUÜV%`Oa      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖw"ܒ"ŪĮ"Ūü"ā"â3"äL "æu "čĄ"ęž"ęÛ"ėü"î "đA"ō‰"ôÔ"ö""øn"úŗ"üô"ūA""Â""b"Ģ" ņ" B"j"’×Ģ×Į 0×˙P*×,€*×[°*׆ā×°""`"Ŋ"đ×N#×Ē""`"’"Ä"ú"0" q" ˛""đ""."$‰"'Å"*â"- "0U "3“ "6É "9ņ 0v×!2!D!đ]!l!0vט!°×Ä!Đ!×"""?K"!Ü"˜""?Í"!"B#N×N#PN× # N×é#đN×.$@N×$N×Ô$āO×$%0O×w%€Oך%ĐO×& O×J&p[י&ĐT׿&î&õ&'-"EG'D!ōy'›'-"EÎ'G"H(b"KW(!Ŧ(b"K)k"NX)Y"Qs)Y"QŽ))¯)ž)Đ)ķ)ü)*Q*t"U‰*t"UÁ*0 W×+ +0 W×S+ =×z+ =ץ+Đ ‚×Ú+€Úû+,,` ‹×Y,đ >ז,0 ×ŧ,Ąō,@ %×X-e-@ %×Ë-p ×.!æY.p ×Ē. ×ū.!č>/ ג/° ×Ī/Ā *× 0đ ×J0PB×y0 ײ0 B×Ũ00 ×#1P ×^1p כ1 ×Ķ1° × 2Đ !×O2H×w2„2PD×ļ2Ŋ2 S×â2 S×3×'3 ×G3@D×}3„3D×Å3Đ3ā0×4 44×]4P!×ē4ō45€×#5ã"X^5 B׌5’5đBמ5@›×î5ā×6đ`×06đD×r6@D×°64×Ü6Đ4× 7×870×h7@Š×}7 !ę‘7’ÚÃ7‘Úî7Ú8ŒÚ98K8Úv8Ú¤8ˆÚÅ8Ú9„Ú%9|ÚJ9xÚp9tڑ9pÚŗ9lÚß9hÚ :dÚ5:@Š×J:đ+×_:đ+×t: ׉:@×Ę:`/×ī:/×;Ā>×>;$×e;0מ;P(×Å;Ė;€÷×< <<*<1<8<L<€,ר<­<´<°,×=āD×b=0Ķ×Ļ=x×ú= “×C>K>0!‡׀>‡>Ž>“>0!‡×Č>Ā!ō×?Ā"{×e?v?}?ĩ?@#C×Ų?@#C×ũ?#B×!@#B×E@ā#V׆@@$׹@P$ ×ė@`$ ×'Ap$×[A€$׋A$×ēA°$×ęAĀ$×Bā$×DB%×|B %׊B@%רB`%×C€%×-C %×VCĀ%×|Cā%FכC0&;×ēCp&2×ßC°& × DĀ&2×6D' ×WD~"[wD~"[—DV"^ĩDV"^ĶD' ×E '×&E0' ×ZE@'ץE`'gרEŪEåEĐ'×Fđ'„×RF€)3×´FĀ)×îFā)R×#G@*×AGP*×dG`*@׍G•G@+”×ÂGā,F×īG0-B×H1H€-3×ZHmHĀ- ׍HĀ- ×­HĐ-×ÎHđ- ×îHđ- ×I.!×/I0.×\IP.<׌IIĻI.×ÔI ÚJ .×OJĀ.ׁJā.רJ/×āJčJ /× K(K@/5×ZK€/׌K / ×ŊK°/×ëKĐ/=×L L0Ŋ×JLPLWL^LĐ0đ׍L”LĀ1Ę×ĘL2Ö×ûL Ú$Mp3×UM4˛דMP5ę×ŌM@6ˆ×NĐ7×-Nā77×INQNVNā77×rN 84םNĨN`84×ÔN 8–×öNO OO;OSO 8–×uO@9ײO¸OžO`9|×ūOPā9Ņ×DPIPOPVPĀ:׀Pā:×ĒP;}×éP€;×Q Ú2Q;¤×fQQ@<„×§QąQíQĐ=J×$R >×MRC"a‚R´RáRōRC"a'S@>Ŧ×?SRS‡S­SōS'T8TKTUT@>Ŧ×mTđ?ī×ÃTāA$×øT˙TEÃ×,UāEä×ZUbUPHj׎UĀHPמUIÁ×ëU"dV"d#VāJK×MV0Pī×yVąV Sã×åVūVVv×-WYĻ×WW@]…זWĐ_×÷WK"i,XK"l[Xāaž׉X d#×ĢXĐeŖרXy"o%YW"r\Yu"u“Y€gĀ×ģY@iÜ×įY/Z6Zl×kZ lOלZplw×ļZđlw×ĪZØZ qT× [€qa×.[I[đq×u[l"xœ[rÛ×Î[đrÛ×\tN×6\āta×Z\Puפ\Ī"{Ë\ö\2]i]puÛכ]Pv×Ņ]n"~^āxÔ×W^Āy×°^r"ã^ü^Đ{2×H_}י_ ~j×đ_L"„%`q×Y`i`r`ƒ ×Ģ`ĩ` ˆä×î`‹Ä×0aā‹Ņ×^aĀ}ךaĀ}×Öa@Ī×bb"b‘×Hb0‘×nbP‘'×ļbÂbÉbŅbŪbëb"‡4c"ŠScic"Šˆc—"°cÅcš"ëcūc d""“KdQd€“E×xdД&×ĨdŦ"–ßd!āeŦ"–Reˇ"™ŒeŨ"œ¸eD!âãeŨ"œfā"Ÿ;f¯"ĸ…fÛ"ĨĘfÛ"¨g "Ģ]g1"ŽŽgŋ"ąũg›Ũ×h,h›Ũ×HhŸ"´uh!ôĄhŸ"´ÎhĒ"ˇûhā›č×7iМ3×ĸiž6×čiPŸ>×j >×>jĐĄIרj Ŗ ×Äj Ŗ ×āj"ē,kPĻÅ×vk’kPĻÅ×Ük §Š×7l°§]×olwlĒ=׸lPĢį×ķl\"Ŋ5mT"Ā|mÅ"ÃÉm="Æ˙m"É.nû"ĖZn"Īˆnë"ŌÆn"Õôn@ŦB×Zo"؇ođą/×­o ˛,×Öočo´-×pĀ´*×9peppˇ-×Ļp ˇ*×ępņpĀē/×qđē,×@q"Ûnq"Ūœq ģ2×Ôq"ár`ĀŅ×5r@ÂŽ×grđÃŽםrR"äįr Å'×s "įNsĐÅ/×ls¯"ęēsÎsás¯"ę/t="íxt="íÁtķ"đ uÆ$×Fu0Ƃ×yum"ķŽuˇuc"öėuĀÆ×vk"ûCvĐÆ×evū"švāÆ×ŧvK"ívđÆA×wđÆA×w@ČL×8w!ėPw@ČL×iwÉׂw°É׊w!øĪw°É×öwĐÍ×xđÍ÷×6x!öNxđÍ÷×gxđÎ׀xĪę×ĻxĪę×ĖxŅ×yŅ×Zyh"Áyf" z͇×@zh" ąz Ķ‚×đz0ÖG×8{€ÖG×x{ĐÖw×Ę{P×W×ū{|!B|D!îw|P×W×Ģ|°Üæ×Ä|°Üæ×Ũ| ŨŒ×}}}-}0Ū¸×r}đã+ז} ä+×Ŋ}Pä*×~€äx×-~4~:~@~F~å]׈~~`ëÅ×Ô~0íŨ× \"4 !ú[\"…\"­\"Õh"˙h"'€īb×J€ !Ūl€īb׏€€īNׯ€ !üđ€€īN×'Đī2×dđטĸ ö×ú !ū#‚ !J‚P‚X‚_‚Đūw×°‚P˙8×é‚h"TƒS׌ƒh"ķƒĻ"!'„h"$|„t"'Ʉ_"*…Ø"-`…g…ķ"0´…ä…&†8†F†V†œ"3õ†Q!ØJ‡ !ÖŸ‡!‚͇â‡ķ‡Ņ"6ˆđ×Cˆ0×nˆ0Cיˆ€C×ĈĐC×īˆ C׉E"9Ũ‰Á"<qŠx"?-‹p |×l‹đō×ɋ "B Œ&ŒEŒLŒđÕ׍ŒĐe×׌@g×Ä f0°M×}…ļ]"Eô“ÚŽ ×LŽ~"HŠŽ0×ŋŽœ"KcV!ÛŊ !ؐÚ"Nv!Аä@â×4‘0ę׊‘ ×ܑ!’ ×A’ !×t’@!0×Ļ’!äג@!0× “p#×;“#Ä×n“#Äץ“`%,×֓(%×!”(%×l”Ā(%×˔Ā(%×*•F"QZ•đ(׌•’•™•Ĩ•¯•ģ•Ā•ƕ͕æ•PGÚ×7–0I°׏–āQŪ×ã–ĀWą×7—€_€׋—ķ"TŨ—dטāh×M˜Đ"W˜`Ú̘i×͘Ĩ"Z™i×#™F"]n™ņ"`ș iŠ×š.š !…bšnšƒšĐlč׸šĀmX×įšĀmX×› oŗ×V›āqŲם›Āržל€w׿›y}×Aœƒ"c›œŦœ zë×܇"f3°|×Nƒ"iŦ ~×ĮĀ~×ų‡"l]ž`„Õ×xž@…†מžĐ†×ĞІ×ęž~"oZŸđ†ĘיŸĀˆÅ×ĐŸĀˆÅ× č"rd h"uŅ ‰ō×8ĄŠŧ×zĄP‹šךĄŒš×ĸĢ"xoĸÎ"{ÚĸЌš×Ŗß×cŖtŖp‘˛ץŖ0’×ĘŖP’×ņŖ ¤!¤+¤ÚZ¤€¤0!„´¤Ũ¤0!‡Ĩ'Ĩ!ˆIĨ!ŠkĨ!‹•Ĩ&!ŋĨ-!ŽđĨ !!Ļ!‘QĻ,!“Ļ.!”ŗĻ !•åĻ!—ųĻ!˜ §!š%§!›=§!_§!Ÿ§ ! ¨§#!ĸΧ!Ŗį§!¤˙§-!Ļ0¨ !§a¨!Š–¨1!Ģ˨(!Ŧ÷¨ !­#Š9!¯`Š !°Š<!˛ŨŠ !ŗĒ"!ĩCĒ!ļiĒ!¸ĒĒ=!ēëĒ !ģ$Ģ5!Ŋ]Ģ !žˆĢ'!ĀŗĢ1!ÁčĢ !ÂŦ'!ÄHŦ !ÅsŦ.!ĮĨŦ !Č×Ŧ#!ĘūŦ !Ë%­&!ÍO­ !Îy­%!Đĸ­ !ŅË­#!Ķō­ !ÔŽ6ŽIŽĀ fˆŽ@ Ú˛ŽqÚįŽ gtest-all.cc_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEv.part.102_ZN7testing8internalL19SumOverTestCaseListERKSt6vectorIPNS_8TestCaseESaIS3_EEMS2_KFivE.constprop.389_ZN7testing8internalL14PrintOnOneLineEPKci.constprop.390_ZNSs4_Rep10_M_disposeERKSaIcE.part.7_ZN7testing8internalL21FormatDeathTestOutputERKSs_ZN7testing12_GLOBAL__N_126PrintByteSegmentInObjectToEPKhjjPSo_ZN7testing7MessagelsIKcEERS0_RKPT_.isra.62CSWTCH.1179_ZGVZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczE13in_color_mode_ZZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczE13in_color_mode_ZN7testing8internalL15kTypeParamLabelE_ZN7testing8internalL16kValueParamLabelE_ZN7testingL20kTestShardStatusFileE_ZN7testing8internalL23HasGoogleTestFlagPrefixEPKc_ZN7testing8internalL26g_in_fast_death_test_childE_ZN7testing8internalL23kCurrentDirectoryStringE_ZN7testing8internalL17g_captured_stdoutE_ZN7testing8internalL17g_captured_stderrE_ZN7testing8internalL21g_injected_test_argvsE_ZN7testing8internalL25FormatCxxExceptionMessageEPKcS2__ZN7testing8internalL12FlagToEnvVarEPKc_ZN7testingL15kTestShardIndexE_ZN7testingL16kTestTotalShardsE_ZN7testing8internalL24StreamWideCharsToMessageEPKwjPNS_7MessageE_ZN7testing8internal18StreamableToStringIPwEESsRKT_.isra.349_ZN7testing8internalL20PrintAsCharLiteralToIwwEENS0_10CharFormatET0_PSo_ZN7testing8internalL22PrintAsStringLiteralToEwPSo_ZN7testing8internalL20PrintCharsAsStringToIcEEvPKT_jPSo_ZN7testing8internalL20PrintCharsAsStringToIwEEvPKT_jPSo_ZN7testingL19FormatCountableNounEiPKcS1__ZN7testingL16kUniversalFilterE_ZN7testing8internalL12kUnknownFileE_ZN7testing8internalL27PrintTestPartResultToStringERKNS_14TestPartResultE_ZN7testing12_GLOBAL__N_115IsSubstringImplIPKcEENS_15AssertionResultEbS3_S3_RKT_S7__ZN7testing12_GLOBAL__N_115IsSubstringImplISsEENS_15AssertionResultEbPKcS4_RKT_S7__ZN7testing12_GLOBAL__N_115IsSubstringImplISbIwSt11char_traitsIwESaIwEEEENS_15AssertionResultEbPKcS8_RKT_SB__ZN7testing12_GLOBAL__N_115IsSubstringImplIPKwEENS_15AssertionResultEbPKcS6_RKT_S9__ZGVZN7testing8UnitTest11GetInstanceEvE8instance_ZZN7testing8UnitTest11GetInstanceEvE8instance_ZN7testingL18kDefaultOutputFileE_ZN7testing8internalL22ExecDeathTestChildMainEPv_ZN7testingL20kDeathTestCaseFilterE_ZN7testingL18kDisableTestFilterE_ZN7testing8internalL17PrintColorEncodedEPKc.constprop.388_ZN7testing8internalL24kColorEncodedHelpMessageE_ZN7testing8internalL25kAlsoRunDisabledTestsFlagE_ZN7testing8internalL19kBreakOnFailureFlagE_ZN7testing8internalL20kCatchExceptionsFlagE_ZN7testing8internalL10kColorFlagE_ZN7testing8internalL19kDeathTestStyleFlagE_ZN7testing8internalL17kDeathTestUseForkE_ZN7testing8internalL11kFilterFlagE_ZN7testing8internalL25kInternalRunDeathTestFlagE_ZN7testing8internalL14kListTestsFlagE_ZN7testing8internalL11kOutputFlagE_ZN7testing8internalL14kPrintTimeFlagE_ZN7testing8internalL15kRandomSeedFlagE_ZN7testing8internalL11kRepeatFlagE_ZN7testing8internalL12kShuffleFlagE_ZN7testing8internalL20kStackTraceDepthFlagE_ZN7testing8internalL19kStreamResultToFlagE_ZN7testing8internalL19kThrowOnFailureFlagE_ZGVZN7testing8internalL23ExecDeathTestSpawnChildEPKPciE16stack_grows_down_ZZN7testing8internalL23ExecDeathTestSpawnChildEPKPciE16stack_grows_down_ZN7testingL31GetReservedAttributesForElementERKSs_ZN7testingL28kReservedTestSuiteAttributesE_ZN7testingL29kReservedTestSuitesAttributesE_ZN7testingL27kReservedTestCaseAttributesE_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEv.part.358_ZN7testing8TestInfo3RunEv.part.366_ZN7testing8TestCase3RunEv.part.367_GLOBAL__sub_I__ZN7testing8internal17kStackTraceMarkerE_ZStL8__ioinit_ZN7testingL22kDefaultDeathTestStyleE_ZN7testing8internal26ThreadLocalValueHolderBaseD5Ev_ZN7testing11EnvironmentD5Ev_ZN7testing22EmptyTestEventListenerD5Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD5Ev_ZN7testing8internal23DefaultDeathTestFactoryD5Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD5Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD5Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD5Ev_ZN7testing8internal26GoogleTestFailureExceptionD5Ev_ZN7testing8internal24XmlUnitTestResultPrinterD5Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD5Ev_ZNSt6vectorISsSaISsEED5Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD5Ev_ZN7testing14TestPartResultD5Ev_ZN7testing12TestPropertyD5Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED5Ev_ZN7testing7MessageC5ERKS0__ZN7testing8internal5MutexD5Ev_ZN7testing8internal17StreamingListener12SocketWriterD5Ev_ZN7testing8internal17StreamingListenerD5Ev_ZN7testing8internal18OsStackTraceGetterD5Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED5Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED5Ev_ZN7testing8internal15NoExecDeathTestD5Ev_ZN7testing8internal13ExecDeathTestD5Ev_ZNKSt5ctypeIcE8do_widenEc_ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev_ZN7testing8internal26ThreadLocalValueHolderBaseD1EvDeleteThreadLocalValue_ZN7testing4Test11DeleteSelf_Ev_ZN7testing4Test5SetupEv_ZN7testing8TestCase16RunSetUpTestCaseEv_ZN7testing8TestCase19RunTearDownTestCaseEv_ZN7testing11EnvironmentD2Ev_ZN7testing11EnvironmentD1Ev_ZN7testing11Environment5SetUpEv_ZN7testing11Environment8TearDownEv_ZN7testing11Environment5SetupEv_ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE_ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE_ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEv_ZN7testing22EmptyTestEventListenerD2Ev_ZN7testing22EmptyTestEventListenerD1Ev_ZN7testing4Test5SetUpEv_ZN7testing4Test8TearDownEv_ZNK7testing8TestCase30reportable_disabled_test_countEv_ZNK7testing8TestCase19disabled_test_countEv_ZNK7testing8TestCase21reportable_test_countEv_ZNK7testing8TestCase17test_to_run_countEv_ZNK7testing8TestCase16total_test_countEv_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEv_ZN7testing8internal24HasNewFatalFailureHelper20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD1Ev_ZN7testing8internal23DefaultDeathTestFactoryD2Ev_ZN7testing8internal23DefaultDeathTestFactoryD1Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD2Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD1Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD1Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD1Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev_ZdlPv_ZN7testing8internal26ThreadLocalValueHolderBaseD0Ev_ZN7testing11EnvironmentD0Ev_ZN7testing8internal23DefaultDeathTestFactoryD0Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD0Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD0Ev_ZN7testing22EmptyTestEventListenerD0Ev_ZN7testing8internal17TestEventRepeaterD2Ev__gxx_personality_v0_ZTVN7testing8internal17TestEventRepeaterE_Unwind_Resume_ZN7testing8internal17TestEventRepeaterD1Ev_ZN7testing8internal17TestEventRepeaterD0Ev_ZN7testing8internal18OsStackTraceGetter17CurrentStackTraceEii_ZNSsC1EPKcRKSaIcE_ZN7testing8internal26GoogleTestFailureExceptionD2Ev_ZTVN7testing8internal26GoogleTestFailureExceptionE_ZNSt13runtime_errorD2Ev_ZN7testing8internal26GoogleTestFailureExceptionD1Ev_ZN7testing8internal26GoogleTestFailureExceptionD0Ev_ZN7testing8internal17TestEventRepeater18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal17TestEventRepeater11OnTestStartERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal17TestEventRepeater27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater9OnTestEndERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal17TestEventRepeater16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal17TestEventRepeater18OnTestIterationEndERKNS_8UnitTestEiputcharprintf_ZNSs4_Rep10_M_destroyERKSaIcE_ZN7testing8internal24XmlUnitTestResultPrinterD2Ev_ZTVN7testing8internal24XmlUnitTestResultPrinterE_ZNSs4_Rep20_S_empty_rep_storageE_ZN7testing8internal24XmlUnitTestResultPrinterD1Ev_ZN7testing8internal24XmlUnitTestResultPrinterD0Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Ev_ZTVN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD1Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Ev_ZNSt6vectorISsSaISsEED2Ev_ZNSt6vectorISsSaISsEED1Ev_ZNKSs4findEcj_ZNSs6appendEPKcj_ZNSsC1ERKSsjj_ZNSs6appendERKSs_ZSt24__throw_out_of_range_fmtPKczsnprintfstrlen_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i_ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD1Ev_ZN7testing8internal12AssertHelperC2ENS_14TestPartResult4TypeEPKciS5__Znwj_ZN7testing8internal12AssertHelperC1ENS_14TestPartResult4TypeEPKciS5__ZN7testing8internal12AssertHelperD2Ev_ZN7testing8internal12AssertHelperD1Ev_ZN7testing8internal15UnitTestOptions15GetOutputFormatEv_ZN7testing18FLAGS_gtest_outputEstrchr_ZNSsC1EPKcjRKSaIcE_ZN7testing8internal15UnitTestOptions20PatternMatchesStringEPKcS3__ZN7testing8internal15UnitTestOptions13MatchesFilterERKSsPKc_ZN7testing8internal13GetTestTypeIdEv_ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_E_ZN7testing8internal20SingleFailureCheckerC2EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZNSsC1ERKSs_ZN7testing8internal20SingleFailureCheckerC1EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing8internal35DefaultGlobalTestPartResultReporterC2EPNS0_12UnitTestImplE_ZTVN7testing8internal35DefaultGlobalTestPartResultReporterE_ZN7testing8internal35DefaultGlobalTestPartResultReporterC1EPNS0_12UnitTestImplE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC2EPNS0_12UnitTestImplE_ZTVN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC1EPNS0_12UnitTestImplE_ZNK7testing8internal12UnitTestImpl21total_test_case_countEv_ZNK7testing8internal12UnitTestImpl22test_case_to_run_countEv_ZNK7testing8internal12UnitTestImpl21successful_test_countEv_ZNK7testing8TestCase21successful_test_countEv_ZNK7testing8internal12UnitTestImpl17failed_test_countEv_ZNK7testing8TestCase17failed_test_countEv_ZNK7testing8internal12UnitTestImpl30reportable_disabled_test_countEv_ZNK7testing8internal12UnitTestImpl19disabled_test_countEv_ZNK7testing8internal12UnitTestImpl21reportable_test_countEv_ZNK7testing8internal12UnitTestImpl16total_test_countEv_ZNK7testing8internal12UnitTestImpl17test_to_run_countEv_ZN7testing8internal12UnitTestImpl28CurrentOsStackTraceExceptTopEi_ZN7testing8internal15GetTimeInMillisEvgettimeofday_ZN7testing8internal6String13CStringEqualsEPKcS3_strcmp_ZN7testing15AssertionResultC2ERKS0__ZN7testing15AssertionResultC1ERKS0__ZN7testing16AssertionSuccessEv_ZN7testing16AssertionFailureEv_ZN7testing8internal6String17WideCStringEqualsEPKwS3_wcscmp_ZN7testing8internal6String28CaseInsensitiveCStringEqualsEPKcS3_strcasecmp_ZN7testing8internal6String32CaseInsensitiveWideCStringEqualsEPKwS3_wcscasecmp_ZN7testing8internal6String23EndsWithCaseInsensitiveERKSsS3__ZN7testing8internal20StringStreamToStringEPSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv_ZNSs7reserveEj_ZNK7testing7Message9GetStringEv_ZN7testing15AssertionResult13AppendMessageERKNS_7MessageE_ZNK7testing10TestResult17GetTestPartResultEiabort_ZNK7testing10TestResult15GetTestPropertyEi_ZN7testing10TestResult20ClearTestPartResultsEv_ZN7testing10TestResult5ClearEv_ZNK7testing10TestResult6FailedEv_ZNK7testing8internal12UnitTestImpl26successful_test_case_countEv_ZNK7testing8internal12UnitTestImpl22failed_test_case_countEv_ZNK7testing10TestResult15HasFatalFailureEv_ZNK7testing10TestResult18HasNonfatalFailureEv_ZNK7testing10TestResult16total_part_countEv_ZNK7testing10TestResult19test_property_countEv_ZN7testing4TestC2Ev_ZTVN7testing4TestE_ZN7testing35FLAGS_gtest_also_run_disabled_testsE_ZN7testing28FLAGS_gtest_break_on_failureE_ZN7testing28FLAGS_gtest_catch_exceptionsE_ZN7testing17FLAGS_gtest_colorE_ZNSs6assignERKSs_ZN7testing28FLAGS_gtest_death_test_styleE_ZN7testing31FLAGS_gtest_death_test_use_forkE_ZN7testing18FLAGS_gtest_filterE_ZN7testing8internal35FLAGS_gtest_internal_run_death_testE_ZN7testing22FLAGS_gtest_list_testsE_ZN7testing22FLAGS_gtest_print_timeE_ZN7testing23FLAGS_gtest_random_seedE_ZN7testing18FLAGS_gtest_repeatE_ZN7testing19FLAGS_gtest_shuffleE_ZN7testing29FLAGS_gtest_stack_trace_depthE_ZN7testing28FLAGS_gtest_stream_result_toE_ZN7testing28FLAGS_gtest_throw_on_failureE_ZN7testing4TestC1Ev_ZN7testing4TestD2Ev_ZN7testing4TestD1Ev_ZN7testing4TestD0Ev_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEv_ZNK7testing8TestCase11GetTestInfoEi_ZN7testing8TestCase18GetMutableTestInfoEi_ZN7testing8TestCase11ClearResultEv_ZN7testing8TestCase14UnshuffleTestsEv_ZN7testing8internal16GetAnsiColorCodeENS0_10GTestColorE_ZN7testing8internal14ShouldUseColorEbgetenv_ZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczstdoutvfprintf__cxa_guard_acquirefilenoisatty__cxa_guard_release_ZN7testing8internal27PrettyUnitTestResultPrinter24OnEnvironmentsSetUpStartERKNS_8UnitTestEputsfflush_ZN7testing8internal27PrettyUnitTestResultPrinter27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter11OnTestStartERKNS_8TestInfoE_ZN7testing8internal29PrintFullTestCommentIfPresentERKNS_8TestInfoE_ZN7testing8internal27PrettyUnitTestResultPrinter16PrintFailedTestsERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater7ReleaseEPNS_17TestEventListenerEmemmove_ZN7testing8internal24XmlUnitTestResultPrinterC2EPKcstderrfwriteexit_ZN7testing8internal24XmlUnitTestResultPrinterC1EPKc_ZN7testing8internal24XmlUnitTestResultPrinter26RemoveInvalidXmlCharactersERKSs_ZN7testing8internal24XmlUnitTestResultPrinter21OutputXmlCDataSectionEPSoPKc_ZNSo5writeEPKcistrstr_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc_ZN7testing18TestEventListenersC2Ev_ZN7testing18TestEventListenersC1Ev_ZN7testing18TestEventListenersD2Ev_ZN7testing18TestEventListenersD1Ev_ZN7testing18TestEventListeners7ReleaseEPNS_17TestEventListenerE_ZN7testing18TestEventListeners8repeaterEv_ZNK7testing18TestEventListeners22EventForwardingEnabledEv_ZN7testing18TestEventListeners23SuppressEventForwardingEv_ZNK7testing8UnitTest26successful_test_case_countEv_ZNK7testing8UnitTest22failed_test_case_countEv_ZNK7testing8UnitTest21total_test_case_countEv_ZNK7testing8UnitTest22test_case_to_run_countEv_ZNK7testing8UnitTest21successful_test_countEv_ZNK7testing8UnitTest17failed_test_countEv_ZNK7testing8UnitTest30reportable_disabled_test_countEv_ZNK7testing8UnitTest19disabled_test_countEv_ZNK7testing8UnitTest21reportable_test_countEv_ZNK7testing8UnitTest16total_test_countEv_ZNK7testing8UnitTest17test_to_run_countEv_ZNK7testing8UnitTest15start_timestampEv_ZNK7testing8UnitTest12elapsed_timeEv_ZNK7testing8UnitTest6PassedEv_ZNK7testing8UnitTest6FailedEv_ZNK7testing8UnitTest11GetTestCaseEi_ZNK7testing8UnitTest18ad_hoc_test_resultEv_ZN7testing8UnitTest18GetMutableTestCaseEi_ZN7testing8UnitTest9listenersEv_ZN7testing14TestPartResultD2Ev_ZN7testing14TestPartResultD1Ev_ZN7testing12TestPropertyD2Ev_ZN7testing12TestPropertyD1Ev_ZNK7testing8UnitTest20original_working_dirEv_ZNK7testing8UnitTest11random_seedEv_ZN7testing8UnitTest27parameterized_test_registryEv_ZN7testing8internal12UnitTestImpl32SuppressTestEventsIfInSubprocessEv_ZN7testing8internal30WriteToShardStatusFileIfNeededEvfopenfclose_ZN7testing8internal20ShouldRunTestOnShardEiii_ZN7testing8internal12UnitTestImpl23ListTestsMatchingFilterEv_ZN7testing8internal12UnitTestImpl25set_os_stack_trace_getterEPNS0_27OsStackTraceGetterInterfaceE_ZN7testing8internal12UnitTestImpl19current_test_resultEv_ZN7testing8internal12UnitTestImpl14UnshuffleTestsEv_ZN7testing8internal6IsTrueEb_ZN7testing8internal10AlwaysTrueEv_ZN7testing8internal10SkipPrefixEPKcPS2_strncmp_ZN7testing8internal14ParseFlagValueEPKcS2_b_ZN7testing8internal13ParseBoolFlagEPKcS2_Pb_ZN7testing8internal15ParseStringFlagEPKcS2_PSs_ZNSs6assignEPKcj_ZN7testing8internal16InDeathTestChildEv_ZNKSs7compareEPKc_ZN7testing14ExitedWithCodeC2Ei_ZN7testing14ExitedWithCodeC1Ei_ZNK7testing14ExitedWithCodeclEi_ZN7testing14KilledBySignalC2Ei_ZN7testing14KilledBySignalC1Ei_ZNK7testing14KilledBySignalclEi_ZN7testing8internal20ExitedUnsuccessfullyEi_ZN7testing8internal23GetLastErrnoDescriptionEv__errno_locationstrerror_ZN7testing8internal9DeathTest11LastMessageEv_ZN7testing8internal9DeathTest24last_death_test_message_E_ZN7testing8internal9DeathTest27set_last_death_test_messageERKSs_ZN7testing8internal21StackLowerThanAddressEPKvPb_ZN7testing8internal14StackGrowsDownEv_ZNK7testing8internal8FilePath21FindLastPathSeparatorEvstrrchr_ZNK7testing8internal8FilePath21FileOrDirectoryExistsEv__xstat_ZNK7testing8internal8FilePath15DirectoryExistsEv_ZNK7testing8internal8FilePath15IsRootDirectoryEv_ZNK7testing8internal8FilePath14IsAbsolutePathEv_ZNK7testing8internal8FilePath11IsDirectoryEv_ZNK7testing8internal8FilePath12CreateFolderEvmkdir_ZN7testing8internal8FilePath9NormalizeEv_Znajmemset_ZdaPv_ZN7testing8internal8FilePath13GetCurrentDirEvgetcwd_ZNK7testing8internal8FilePath19RemoveDirectoryNameEv_ZN7testing8internal24GetCurrentExecutableNameEv_ZN7testing8internal17g_executable_pathE_ZNK7testing8internal8FilePath14RemoveFileNameEv_ZNK7testing8internal8FilePath27RemoveTrailingPathSeparatorEv_ZNK7testing8internal8FilePath28CreateDirectoriesRecursivelyEv_ZNK7testing8internal8FilePath15RemoveExtensionEPKc_ZN7testing8internal14GetThreadCountEv_ZN7testing8internal2RED2Evregfreefree_ZN7testing8internal2RED1Ev_ZN7testing8internal2RE9FullMatchEPKcRKS1_regexec_ZN7testing8internal2RE12PartialMatchEPKcRKS1__ZN7testing8internal8GTestLogD2Ev_ZSt4cerr_ZNSo3putEc_ZNSo5flushEv_ZNKSt5ctypeIcE13_M_widen_initEv_ZSt16__throw_bad_castv_ZN7testing8internal8GTestLogD1Ev_ZN7testing8internal14CapturedStream11GetFileSizeEP8_IO_FILEfseekftell_ZN7testing8internal14CapturedStream14ReadEntireFileEP8_IO_FILEfread_ZN7testing8internal17GetCapturedStreamEPPNS0_14CapturedStreamEdup2closeremove_ZN7testing8internal17GetCapturedStdoutEv_ZN7testing8internal17GetCapturedStderrEv_ZN7testing8internal18SetInjectableArgvsEPKSt6vectorISsSaISsEE_ZN7testing8internal18GetInjectableArgvsEv_ZN7testing8internal7g_argvsE_ZN7testing9internal220PrintBytesInObjectToEPKhjPSo_ZNSo9_M_insertImEERSoT__ZN7testinglsERSoRKNS_14TestPartResultE_ZNSolsEi_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate_ZNK7testing19TestPartResultArray17GetTestPartResultEi_ZNK7testing19TestPartResultArray4sizeEv_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE_ZTVSt15basic_streambufIcSt11char_traitsIcEE_ZNSt6localeD1Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev_ZN7testing7MessageC2Ev_ZNSt8ios_baseC2Ev_ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZTVSt9basic_iosIcSt11char_traitsIcEE_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNSt6localeC1Ev_ZNSt8ios_baseD2Ev_ZNSdD2Ev_ZN7testing7MessageC1Ev_ZN7testing8internal30GetBoolAssertionFailureMessageERKNS_15AssertionResultEPKcS5_S5__ZN7testing8internal10ParseInt32ERKNS_7MessageEPKcPistrtol_ZN7testing8internal17Int32FromEnvOrDieEPKci_ZN7testing8internal14ParseInt32FlagEPKcS2_Pitoupper_ZN7testing8internal16BoolFromGTestEnvEPKcb_ZN7testing8internal18StringFromGTestEnvEPKcS2__ZN7testing8internal17Int32FromGTestEnvEPKci_ZN7testing7MessageC2ERKS0__ZN7testing7MessageC1ERKS0__ZN7testing8internal11ShouldShardEPKcS2_b_ZN7testing8internal6String12FormatHexIntEi_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev_ZN7testing8internal27FormatTimeInMillisAsSecondsEx_ZNSo9_M_insertIdEERSoT__ZN7testing8internal6String15FormatIntWidth2Ei_ZN7testing8internal6String10FormatByteEh_ZN7testing8internal24XmlUnitTestResultPrinter9EscapeXmlERKSsb_ZN7testing8internal24XmlUnitTestResultPrinter29TestPropertiesAsXmlAttributesERKNS_10TestResultE_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev_ZN7testing8internal10scoped_ptrISsE5resetEPSs_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_b_ZNK7testing15AssertionResultntEv_ZN7testing16AssertionFailureERKNS_7MessageE_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZN7testing8internal15CodePointToUtf8Ej_ZN7testing8internal16WideStringToUtf8EPKwi_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmodewcslen_ZN7testing7MessagelsERKSbIwSt11char_traitsIwESaIwEE_ZN7testing8internal6String15ShowWideCStringEPKw_ZN7testing7MessagelsEPKw_ZN7testing7MessagelsEPwisxdigit_ZN7testing8internal19UniversalPrintArrayEPKcjPSo_ZN7testing8internal7PrintToEPKcPSo_ZNSo9_M_insertIPKvEERSoT__ZN7testing8internal13PrintStringToERKSsPSo_ZN7testing13PrintToStringIPKcEESsRKT__ZN7testing8internal14CmpHelperSTREQEPKcS2_S2_S2__ZN7testing8internal18CmpHelperSTRCASEEQEPKcS2_S2_S2__ZN7testing8internal19UniversalPrintArrayEPKwjPSo_ZN7testing8internal7PrintToEPKwPSo_ZN7testing8internal17PrintWideStringToERKSbIwSt11char_traitsIwESaIwEEPSo_ZN7testing13PrintToStringIPKwEESsRKT__ZNSbIwSt11char_traitsIwESaIwEEC1EPKwRKS1__ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1__ZN7testing8internal14CmpHelperSTREQEPKcS2_PKwS4__ZN7testing8internal17StreamingListener9UrlEncodeEPKc_ZN7testing8internal18StreamableToStringIiEESsRKT__ZN7testing8internal27PrettyUnitTestResultPrinter15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal27PrettyUnitTestResultPrinter20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal18StreamableToStringIxEESsRKT__ZNSo9_M_insertIxEERSoT__ZN7testing8internal27PrettyUnitTestResultPrinter9OnTestEndERKNS_8TestInfoE_ZN7testing8internal27PrettyUnitTestResultPrinter13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8__ZN7testing8internal8FilePath11ConcatPathsERKS1_S3__ZNSs6appendEjc__divdi3_ZN7testing8internal32FormatEpochTimeInMillisAsIso8601Exlocaltime_ZN7testing8internal8FilePath12MakeFileNameERKS1_S3_iPKc_ZN7testing8internal8FilePath22GenerateUniqueFileNameERKS1_S3_PKc_ZN7testing8internal18FormatFileLocationEPKci_ZN7testing8internal8GTestLogC2ENS0_16GTestLogSeverityEPKci_ZN7testing8internal8GTestLogC1ENS0_16GTestLogSeverityEPKci_ZN7testing8internal13CaptureStreamEiPKcPPNS0_14CapturedStreamEdupmkstemp_ZN7testing8internal13CaptureStdoutEv_ZN7testing8internal13CaptureStderrEv_ZN7testing8internal17StreamingListener12SocketWriter14MakeConnectionEvgetaddrinfosocketconnectfreeaddrinfogai_strerror_ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv_ZN7testing8internal5MutexD2Evpthread_mutex_destroy_ZN7testing8internal5MutexD1Ev_ZN7testing8internal9MutexBase6UnlockEvpthread_mutex_unlock_ZN7testing8internal9MutexBase4LockEvpthread_mutex_lockpthread_self_ZN7testing8internal17StreamingListener12SocketWriter4SendERKSswrite_ZN7testing8internal6Random8GenerateEj_ZN7testing8internal13DeathTestImpl6PassedEb_ZN7testing8internal17StreamingListener12SocketWriterD2Ev_ZTVN7testing8internal17StreamingListener12SocketWriterE_ZN7testing8internal17StreamingListener12SocketWriterD1Ev_ZN7testing8internal17StreamingListener12SocketWriterD0Ev_ZN7testing8internal17StreamingListenerD2Ev_ZTVN7testing8internal17StreamingListenerE_ZN7testing8internal17StreamingListenerD1Ev_ZN7testing8internal17StreamingListenerD0Ev_ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs_ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoE_ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing10TestResultC2Evpthread_mutex_init_ZN7testing10TestResultC1Ev_ZN7testing8internal18OsStackTraceGetterD2Ev_ZTVN7testing8internal18OsStackTraceGetterE_ZN7testing8internal18OsStackTraceGetterD1Ev_ZN7testing8internal18OsStackTraceGetterD0Ev_ZN7testing8internal12UnitTestImpl21os_stack_trace_getterEv_ZN7testing8internal12UnitTestImpl31SetGlobalTestPartResultReporterEPNS_31TestPartResultReporterInterfaceE_ZN7testing8internal12UnitTestImpl31GetGlobalTestPartResultReporterEv_ZNK7testing8UnitTest17current_test_caseEv_ZNK7testing8UnitTest17current_test_infoEv_ZN7testing8internal38DefaultPerThreadTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing10TestResultD2Ev_ZN7testing10TestResultD1Ev_ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal26GoogleTestFailureExceptionC2ERKNS_14TestPartResultE_ZNSt13runtime_errorC2ERKSs_ZN7testing8internal26GoogleTestFailureExceptionC1ERKNS_14TestPartResultE_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal25ReportInvalidTestCaseTypeEPKcS2_ifprintf_ZN7testing8internal37FormatCompilerIndependentFileLocationEPKci_ZN7testing8internal17AppendUserMessageERKSsRKNS_7MessageE_ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE_ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing15AssertionResultlsINS_7MessageEEERS0_RKT__ZN7testing15AssertionResultlsIA11_cEERS0_RKT__ZN7testing15AssertionResultlsISsEERS0_RKT__ZN7testing15AssertionResultlsIA2_cEERS0_RKT__ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT__ZN7testing15AssertionResultlsIA3_cEERS0_RKT__ZN7testing8internal13HasOneFailureEPKcS2_S2_RKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing15AssertionResultlsIPKcEERS0_RKT__ZN7testing11IsSubstringEPKcS1_S1_S1__ZN7testing14IsNotSubstringEPKcS1_S1_S1__ZNKSs4findEPKcjj_ZN7testing11IsSubstringEPKcS1_RKSsS3__ZN7testing14IsNotSubstringEPKcS1_RKSsS3__ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjj_ZN7testing11IsSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZN7testing14IsNotSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7_wcsstr_ZN7testing11IsSubstringEPKcS1_PKwS3__ZN7testing14IsNotSubstringEPKcS1_PKwS3__ZN7testing15AssertionResultlsIA5_cEERS0_RKT__ZN7testing15AssertionResultlsIA7_cEERS0_RKT__ZN7testing8internal20DoubleNearPredFormatEPKcS2_S2_ddd_ZN7testing15AssertionResultlsIA12_cEERS0_RKT__ZN7testing8internal14CmpHelperSTRNEEPKcS2_PKwS4__ZN7testing8internal14CmpHelperSTRNEEPKcS2_S2_S2__ZN7testing8internal18CmpHelperSTRCASENEEPKcS2_S2_S2__ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5__ZN7testing7FloatLEEPKcS1_ff_ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5__ZN7testing8DoubleLEEPKcS1_dd_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Evpthread_getspecificpthread_key_delete_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED1Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED1Ev_ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EE_ZN7testing8TestCase12ShuffleTestsEPNS_8internal6RandomE_ZN7testing8internal12UnitTestImpl12ShuffleTestsEv_ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT_strtoull_ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo_ZN7testing8internal7PrintToEhPSo_ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo_ZN7testing8internal7PrintToEaPSo_ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo_ZN7testing8internal7PrintToEwPSo_ZN7testing8internal10scoped_ptrIKSsE5resetEPS2__ZN7testing8TestInfoD2Ev_ZN7testing8TestInfoD1Ev_ZN7testing8TestCaseD2Ev_ZTVN7testing8TestCaseE_ZN7testing8TestCaseD1Ev_ZN7testing8TestCaseD0Ev_ZN7testing8internal12UnitTestImplD2Ev_ZTVN7testing8internal12UnitTestImplE_ZN7testing8internal12UnitTestImplD1Ev_ZN7testing8internal12UnitTestImplD0Ev_ZN7testing8UnitTestD2Ev_ZTVN7testing8UnitTestE_ZN7testing8UnitTestD1Ev_ZN7testing8UnitTestD0Ev_ZN7testing8TestCaseC2EPKcS2_PFvvES4__ZN7testing8TestCaseC1EPKcS2_PFvvES4__ZN7testing8TestInfoC2ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE_ZN7testing8TestInfoC1ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi_ZN7testing8TestCase11AddTestInfoEPNS_8TestInfoE_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal12UnitTestImpl24ConfigureStreamingOutputEv_ZN7testing8internal17TestEventRepeater6AppendEPNS_17TestEventListenerE_ZN7testing18TestEventListeners6AppendEPNS_17TestEventListenerE_ZN7testing18TestEventListeners23SetDefaultResultPrinterEPNS_17TestEventListenerE_ZN7testing8internal12UnitTestImplC2EPNS_8UnitTestEpthread_key_create_ZTVN7testing8internal23DefaultDeathTestFactoryE_ZTVN7testing8internal27PrettyUnitTestResultPrinterE_ZN7testing8internal12UnitTestImplC1EPNS_8UnitTestE_ZN7testing8UnitTestC2Ev_ZN7testing8UnitTestC1Ev_ZN7testing8UnitTest11GetInstanceEv__dso_handle__cxa_atexit__cxa_guard_abort_ZN7testing8internal15UnitTestOptions27GetAbsolutePathToOutputFileEv_ZN7testing4Test15HasFatalFailureEv_ZN7testing4Test18HasNonfatalFailureEv_ZN7testing8internal31GetCurrentOsStackTraceExceptTopEPNS_8UnitTestEi_ZN7testing8internal14DeathTestAbortERKSsfdopenfputcfputs_exit_ZN7testing8internal13DeathTestImpl26ReadAndInterpretStatusByteEvread_ZN7testing8internal13DeathTestImpl5AbortENS0_9DeathTest11AbortReasonE_ZN7testing8internal16ForkingDeathTest4WaitEvwaitpid_ZN7testing8internal15NoExecDeathTestD2Ev_ZTVN7testing8internal13DeathTestImplE_ZN7testing8internal15NoExecDeathTestD1Ev_ZN7testing8internal13ExecDeathTestD2Ev_ZN7testing8internal13ExecDeathTestD1Ev_ZN7testing8internal15NoExecDeathTestD0Ev_ZN7testing8internal13ExecDeathTestD0Ev_ZN7testing8internal9DeathTestC2Ev_ZTVN7testing8internal9DeathTestE_ZN7testing8internal9DeathTestC1Ev_ZN7testing8internal16ForkingDeathTestC2EPKcPKNS0_2REE_ZTVN7testing8internal16ForkingDeathTestE_ZN7testing8internal16ForkingDeathTestC1EPKcPKNS0_2REE_ZN7testing8internal9DeathTest6CreateEPKcPKNS0_2REES3_iPPS1__ZN7testing8internal15NoExecDeathTest10AssumeRoleEvpipefork_ZN7testing8internal23DefaultDeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE_ZTVN7testing8internal15NoExecDeathTestE_ZTVN7testing8internal13ExecDeathTestEchdirenvironexecve_ZN7testing18TestEventListeners22SetDefaultXmlGeneratorEPNS_17TestEventListenerE_ZN7testing8internal12UnitTestImpl18ConfigureXmlOutputEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8UnitTest14AddEnvironmentEPNS_11EnvironmentE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal18StreamableToStringIPcEESsRKT__ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSsmemcmp_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS___cxa_begin_catch__cxa_rethrow__cxa_end_catch_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZTSN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZTIN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZTIN7testing8internal26ThreadLocalValueHolderBaseE__dynamic_cast__cxa_bad_typeid_ZN7testing13PrintToStringIxEESsRKT__ZN7testing8internal11CmpHelperEQEPKcS2_xx_ZN7testing8internal11CmpHelperNEEPKcS2_xx_ZN7testing8internal11CmpHelperLEEPKcS2_xx_ZN7testing8internal11CmpHelperLTEPKcS2_xx_ZN7testing8internal11CmpHelperGEEPKcS2_xx_ZN7testing8internal11CmpHelperGTEPKcS2_xx_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tag_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag_ZN7testing8internal12UnitTestImpl11GetTestCaseEPKcS3_PFvvES5__ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_PKvPFvvES6_PNS0_15TestFactoryBaseE_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag_ZSt19__throw_logic_errorPKc_ZNSs4_Rep9_S_createEjjRKSaIcEmemcpy_ZN7testing8internal15UnitTestOptions17FilterMatchesTestERKSsS3__ZN7testing8internal12UnitTestImpl11FilterTestsENS1_18ReactionToShardingE_ZN7testing14TestPartResult14ExtractSummaryEPKc_ZN7testing8internal17kStackTraceMarkerE_ZN7testing8internal19TypedTestCasePState25VerifyRegisteredTestNamesEPKciS3_isspace_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT__ZN7testing8internal11g_help_flagE_ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPw_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT__ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPc_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZTSN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZTIN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv_ZTVN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderEpthread_setspecific_ZN7testing8internal12UnitTestImpl41GetTestPartResultReporterForCurrentThreadEv_ZN7testing8internal12UnitTestImpl41SetTestPartResultReporterForCurrentThreadEPNS_31TestPartResultReporterInterfaceE_ZN7testing8internal24HasNewFatalFailureHelperD2Ev_ZTVN7testing8internal24HasNewFatalFailureHelperE_ZN7testing8internal24HasNewFatalFailureHelperD1Ev_ZN7testing8internal24HasNewFatalFailureHelperD0Ev_ZN7testing32ScopedFakeTestPartResultReporterD2Ev_ZTVN7testing32ScopedFakeTestPartResultReporterE_ZN7testing32ScopedFakeTestPartResultReporterD1Ev_ZN7testing32ScopedFakeTestPartResultReporterD0Ev_ZN7testing8internal24HasNewFatalFailureHelperC2Ev_ZN7testing8internal24HasNewFatalFailureHelperC1Ev_ZN7testing32ScopedFakeTestPartResultReporter4InitEv_ZN7testing32ScopedFakeTestPartResultReporterC2EPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC1EPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC2ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC1ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZN7testing8internal13ExecDeathTest10AssumeRoleEvfcntlstrdupsigemptysetsigactiongetpagesizemmapclonemunmap_ZSt17__throw_bad_allocv_ZN7testing8internal24XmlUnitTestResultPrinter18OutputXmlAttributeEPSoRKSsS4_S4__ZN7testing8internal24XmlUnitTestResultPrinter17OutputXmlTestInfoEPSoPKcRKNS_8TestInfoE_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlTestCaseEPSoRKNS_8TestCaseE_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlUnitTestEPSoRKNS_8UnitTestE_ZN7testing8internal24XmlUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs_ZN7testing8internal29ParseInternalRunDeathTestFlagEv_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEv_ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT__ZN7testing8internal18g_init_gtest_countE_ZN7testing14InitGoogleTestEPiPPc_ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT__ZN7testing14InitGoogleTestEPiPPw_ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6__ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv_ZN7testing8UnitTest17AddTestPartResultENS_14TestPartResult4TypeEPKciRKSsS6___cxa_allocate_exception_ZTIN7testing8internal26GoogleTestFailureExceptionE__cxa_throw__cxa_free_exception_ZNK7testing8internal12AssertHelperaSERKNS_7MessageE_ZN7testing8internal20SingleFailureCheckerD2Ev_ZN7testing8internal20SingleFailureCheckerD1Ev_ZN7testing24ValidateTestPropertyNameERKSsRKSt6vectorISsSaISsEE_ZN7testing10TestResult20ValidateTestPropertyERKSsRKNS_12TestPropertyE_ZN7testing4Test19HasSameFixtureClassEv_ZN7testing8internal2RE4InitEPKcregcomp_ZN7testing8internal30ReportFailureInUnknownLocationENS_14TestPartResult4TypeERKSs_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc_ZTISt9exception_ZN7testing4Test3RunEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc_ZN7testing8TestInfo3RunEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc_ZN7testing8TestCase3RunEv_ZN7testing8internal12UnitTestImpl11RunAllTestsEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKc_ZN7testing8UnitTest3RunEv_ZN7testing8UnitTest13PopGTestTraceEv_ZN7testing8internal11ScopedTraceD2Ev_ZN7testing8internal11ScopedTraceD1Ev_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8UnitTest14PushGTestTraceERKNS_8internal9TraceInfoE_ZN7testing8internal11ScopedTraceC2EPKciRKNS_7MessageE_ZN7testing8internal11ScopedTraceC1EPKciRKNS_7MessageE_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZN7testing8internal35DefaultGlobalTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing10TestResult17AddTestPartResultERKNS_14TestPartResultE_ZN7testing19TestPartResultArray6AppendERKNS_14TestPartResultE_ZN7testing32ScopedFakeTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing12TestPropertyES4_EET0_T_S6_S5__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZN7testing10TestResult14RecordPropertyERKSsRKNS_12TestPropertyE_ZN7testing8internal12UnitTestImpl14RecordPropertyERKNS_12TestPropertyE_ZNSs6assignEPKc_ZN7testing8UnitTest14RecordPropertyERKSsS2__ZN7testing4Test14RecordPropertyERKSsS2__ZN7testing4Test14RecordPropertyERKSsi_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitD1Ev_ZNSsD1Ev_ZN7testing8internal23kTestTypeIdInGoogleTestE_ZTVN10__cxxabiv117__class_type_infoE_ZTSN7testing8internal26ThreadLocalValueHolderBaseE_ZTVN10__cxxabiv120__si_class_type_infoE_ZTSN7testing8internal26GoogleTestFailureExceptionE_ZTISt13runtime_error_ZTIN7testing8internal9DeathTestE_ZTSN7testing8internal9DeathTestE_ZTIN7testing8internal16DeathTestFactoryE_ZTSN7testing8internal16DeathTestFactoryE_ZTSN7testing8internal23DefaultDeathTestFactoryE_ZTIN7testing8internal23DefaultDeathTestFactoryE_ZTIN7testing31TestPartResultReporterInterfaceE_ZTSN7testing31TestPartResultReporterInterfaceE_ZTSN7testing8internal24HasNewFatalFailureHelperE_ZTIN7testing8internal24HasNewFatalFailureHelperE_ZTSN7testing4TestE_ZTIN7testing4TestE_ZTSN7testing8TestCaseE_ZTIN7testing8TestCaseE_ZTIN7testing17TestEventListenerE_ZTSN7testing17TestEventListenerE_ZTIN7testing22EmptyTestEventListenerE_ZTSN7testing22EmptyTestEventListenerE_ZTSN7testing8UnitTestE_ZTIN7testing8UnitTestE_ZTSN7testing32ScopedFakeTestPartResultReporterE_ZTIN7testing32ScopedFakeTestPartResultReporterE_ZTIN7testing8internal27OsStackTraceGetterInterfaceE_ZTSN7testing8internal27OsStackTraceGetterInterfaceE_ZTSN7testing8internal18OsStackTraceGetterE_ZTIN7testing8internal18OsStackTraceGetterE_ZTSN7testing8internal35DefaultGlobalTestPartResultReporterE_ZTIN7testing8internal35DefaultGlobalTestPartResultReporterE_ZTSN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZTIN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZTSN7testing8internal12UnitTestImplE_ZTIN7testing8internal12UnitTestImplE_ZTIN7testing8internal17StreamingListener20AbstractSocketWriterE_ZTSN7testing8internal17StreamingListener20AbstractSocketWriterE_ZTIN7testing8internal17StreamingListener12SocketWriterE_ZTSN7testing8internal17StreamingListener12SocketWriterE_ZTIN7testing8internal17StreamingListenerE_ZTSN7testing8internal17StreamingListenerE_ZTSN7testing8internal27PrettyUnitTestResultPrinterE_ZTIN7testing8internal27PrettyUnitTestResultPrinterE_ZTSN7testing8internal17TestEventRepeaterE_ZTIN7testing8internal17TestEventRepeaterE_ZTSN7testing8internal24XmlUnitTestResultPrinterE_ZTIN7testing8internal24XmlUnitTestResultPrinterE_ZTSN7testing8internal13DeathTestImplE_ZTIN7testing8internal13DeathTestImplE_ZTSN7testing8internal16ForkingDeathTestE_ZTIN7testing8internal16ForkingDeathTestE_ZTSN7testing8internal15NoExecDeathTestE_ZTIN7testing8internal15NoExecDeathTestE_ZTSN7testing8internal13ExecDeathTestE_ZTIN7testing8internal13ExecDeathTestE_ZNKSt13runtime_error4whatEv__cxa_pure_virtual_ZN7testing8internal18OsStackTraceGetter19kElidedFramesMarkerE_ZN7testing8internal18g_linked_ptr_mutexE_ZN7testing38FLAGS_gtest_show_internal_stack_framesE__pthread_key_createD –ĸ ē Ū]äû# ]%$D]I$b“%˛(Č1Ô]Ü234 (R3]4k(’]—pœ5Ģ(ž Å]ĘpĪ5Ü(õ(U ]] 6e 7p 8š 8š 8â 7ō 8 ] 8; <a { ƒ  Ĩ (° Ú Aė B C" 8 ]> L  Æ D B D1 Gz Lš Oô T V4 ëT ėt í” ī´ îŪ ]ä ^i`Á<ĖIįī YfŠhjhmt(‡nž]¤2Ûnī((E(Z(m lŅrŲpŪ5!r)p.5g(t(ˆ(ž(¸(((((>(X(Ž(ĸ(ˇ(,qxvČvVeVM~T<[(b(k(r(y(€(‡€š§‚­ƒˇ„ŊƒÆ…Ņ†×ƒá‡įƒđˆûAƒ ‰Š‹$Œ,7Ž=ƒDa(v(‹( (ĩ(Ę(Ũå ~€%.‚3ƒ>„CƒN…W†\ƒg‡lƒwˆ€A…ƒ‰˜Š ‹ŠŒąēŽŋƒËÖ(ã(đ(ũ( (($›(°(Å(Ú(ī(( *‘ÎuíuAW‚`]fgu]{g”]šgŠ]¯gž]Ä_Ô]Ų›â]č_÷]ũ_ ]_!]'_6]<_K]Q_`]f_‚—ēÃ]Č$ĶØžß]ä$÷üžŸ-2 :ĄJšQX]ĸ„]‹œ’p—¤œ´]ģœÂpĮ¤Ėé]đœũ]$#€]…$šŸ]¤$ĩ]ē$ƐË]Đ$VĩVí• v< ]C œQ ]V $^ ¨j #!ĢD!'N!e!­n!ps!Žz!­!Ĩ‹!¯Ą!(ŗ! Î!(Ū!nB"n\"(›"(Ž" Ņ"]×"8ė"ŗö"]ü"8#] #´ #ĩ*#]0#8K#<Q# ¤#¯# Ä$Tä$V%ë$%ėD%íd%ī„%îí%x&v=&xe'j'›{']'Ú‘'Ûž'¤'pĢ'œ˛'ˇ'ĨÃ'¯O(]T($l(q(]v($•(#É(]Î($æ(ë(]đ($ )#I)q*7€*äŽ*]ŗ*ãÃ*]Č*ãØ*]Ũ*ãõ*]ú*ã +]+ã%+]*+ãp+]v+‚+IŒ+]’+2ž+IĻ+7ą+2ŋ+(Ė+(æ+äõ+(r,(‡,(œ,(¯, ŧ,(î,å?-åS-7a-č„-]‰-„Ž-ęš-Ą-‡U.ķ`.]m.ô.‘.ö¨.ö­.ƒî.ø /û1/ũQ/ũā/,0B0˜07Ŗ0čŧ0]Â0č 1 1]-161I>1O1(‹1(Ą1 ­1(Ķ1ûî1÷1I˙1 2(&2IQ2 ^2(x2(¤2]Ē2ą2 ˇ2Iŋ2Č2ƒÖ2(â2 đ2(43(G3 T3(„3û3(Ļ3C˛3ƒĀ3(Ė3IÔ3â3(44č;4(N4 Z4(u4(ˇ4IŲ43â4Ię4ø4(5($5 05(…5ūž5§5 ĩ5(Ā5Ô5(í5 6(6 *6(T6]Z6f6Io67|62Š6(œ6kŊ63Æ6IÎ6Ü6(é6(7I7(V7(k7(v7 ‡7( 7(¸7(ö78D8„8Ĩ8Ž8Å8Ę8Ō8õ89Ė#9­(9Ĩ-9r29N9!o9 y9ˆ9!Š9$Â9CĘ9ũ9Ĩ :&:'$:],:Ú7:#=:ÛQ:(_:(j:š:(­: É:Ī:%é:ī:% ;5;(\;h;q;;†;-Ĩ;/¯;]ĩ;8Ü;]â;8 <]E<]a<]f<]‡<7–<8Ŗ<]Š<8˛<1ž<]Ä<8Ė<7×<8á<]į<8û<7=8.=[=2u=ˆ=Ėŗ=2Ā=ø=pũ=$>rO><\>;b><o><v>=Í>>Ø><â><ō>>÷><ũ><??????$?7V?@]?6k?(t?>Ą?=§?A¯?ˇ? Ã?9Ę?<Đ?Bá?<@:*@]3@8G@7X@8h@]q@8…@7–@8Ž@]ˇ@8Č@ĩÕ@]Ū@8î@]÷@8 A7A8-Al[A]oA]xAĩA]˜Aĩ¯A]¸AĩÛA ûAF8B:EB]NB8dBlsB8B(”BpB8ĒB]ŗB8ÂBĩĪB]ØB8æBlīB]ôB$C(CCĨHC:UC]^C8tClƒC8‘C(¤Cp­C8ēC]ÃC8ŌCĩßC]čC8öCl˙C]D$D(D"DĨ‡D ”D(ŋD(ØD(ôD(E›3E:@EpIE8QE7bE8pEEąE¯ĪE ķEå F:F]"F82F7CF8SFE—F] FĩĀF âF:īF]øF8Gĩ%GlGG:iGI~G8˜GlšG(ĐG]ŲGĩũG(H oH›{H]“H(ŲH›ņH(.I›JI:WI]`I8vI8„IEąI(ØI:įI1õIlūIpJ$J(8J=JĨNJ(‡J(šJ ÂJ( KGKGlK:yKp‚K8ŒK•KĩĸK]ĢK8¸KÁK8ÎK]×K8äKíK8úK]L8L1L](L85L>L8KL]TL8cL1pL]yL8…LN§Ll˛LœĀL(ĪLÔLĨáL¯đL:ũLpM8MMĩ&M],Mĩ;M1HM]QM8^MgM8tM]}M8‰MNĢMlļMœÄM(ĶMØMĨđM:úMpNĩNNĩ N])Nĩ8N1BN]KNĩUN^NĩkN]qNĩ}NNŸNlĒNœ¸N(ÃNČNĨO O(ÆO(ũO(DP;JP<TP<^P=˛P>¸P<ÄP<ÚP>āP<æP<Q? Q?Q?!Q7bQ@tQ6ˆQ(•Q>šQ1ĘQmŨQ?įQ?ņQ?ûQ6R(R7"R8+R<1R<=R<CR<sR={RAąR=ˇRAŋR ĐRQØR éR9öR<üRBS<FS;LS<VS<`S=´S>šS<ŋS<ÜS>áS<įS<T? T?T?(T7iT@wT6‹T(T>ĸTŌŽTSšTmĖT?ÖT?āT?ęT6ōT( U7U8U<U<"U<(U<7U<dU=iUA›U=ĄUAŠU ēUQÂU ÍU9ÚU<āUBîU<$V;*V<4V<>V=’V>—V<žV<ēV>ĀV<ÆV<āV?ęV?ôV?W7BW@SW6oW(uW>ĩW1ÆWmŲW?ãW?íW?÷W6˙W(X7X8'X<-X<3X<?X<oX=wXAŊXĐXĖYYQY -Y9:Y<@YBVY=\YAdY sY<§Y;­Y<ˇY<ÁY=Z>Z<3Z<=Z>CZ<IZ<cZ?mZ?wZ?„Z7ÅZ@ÖZ6ōZ(øZ>][/n[m[?‹[?•[?Ÿ[6§[(Ā[7Æ[8Ī[<Û[<á[<\<\=\Ae\x\Ėŗ\Ä\QĖ\ Ũ\9ę\<đ\B]= ]A] #]<U]:‰]™]]ĸ]8Į]lų]]^8#^],^8A^]J^8g^]p^8ŋ^8å^8_8#_U/_]8_8N_8[_]d_8r_(—_(Ŋ_ á_:`7`8&`]/`8<`]E`8[`8h`]q`8`(`(´`sÉ`Û`Vé`]ō`8a]aĩJalŸa Ŧa(Áa(ũa: b]b8'b78b8EbęYb]bb8wb8‡b]b8¤b7ĩb8Ëb]Ôb8ãbę÷b]c8c82c:FclUc8cc(vcp˜caŦc(ˇcįc]đcĩd]dĩZdYyd Šd(Ėd:ád8údle7e2e(^e<fe(peY…e(¯eYˇe ėe:flf8f(?flKf7Zf2hf(Šfažf(Šföf<ūf(gYgY'g 4g(cg(°ghP$h]*h_3hI=h]Ch2Qh(bh(õh( i(!i(4i fibi`ĩi8Æi(îilj? j?j?j6'j(@j7Fj8Kj<Qj<`j<fj<{j<j<Ąj=ŠjAÅjcņjQųj  k(Wkaqk8k(Ŋk8ãk(ök 8laYl]_l‚le–l8¤l(Đl(ãl mem8$m(Pm(cm ‚m:‹mg•mlĶm ÷mn] n86n]Š KŠ(`Š(yŠ(–Š(̊(Š(Պ(!‹]'‹A‹ũ`‹‡j‹ƒx‹(¤‹(ˇ‹ ċ(⋐Œ!Œy-ŒI7Œ]=Œ2KŒTŒI^Œ]dŒ2rŒ(Œ(ŒŒ(™Œ(´Œ]ģŒ^Ɍ((0 =(R(g(„(Ÿ(Į]Ū]č]í]Ž‰ŽŽ5Ž:ŽBŽPŽ8ZŽ]`Ž8pŽ7{Ž8ˆŽ]ŽŽ8œŽ(ĩŽȎĖûŽ2&(9 b]jŠt]y~8’7œĄ8Žpŗ¸8Ā͏<܏ã(ŽečqĨ}&†'ąŊː2ܐä ņ(‘ ‘ ‘‘] ‘Œ4‘9‘]@‘Œn‘]v‘Š€‘p…‘Š‘8”‘p™‘ž‘8Ļ‘ؑ’’“;’”N’'p’•’–œ’]¤’ŠĢ’p°’ĩ’ĩž’ĩƒá’]é’Šđ’põ’ú’ĩ “8“]“ĩ'“8/“E“M“ X“`“ k“s“ ž“]ƓŠГpՓړ8ä“pé“î“8ö“û“/”]”8”p ”8/”/9”]?”8G”i”]q”Š{”]€”…”8”p””™”8ϔޔ š”Á” ÷”ũ”%•:•]•83•7D•8T•]]•8š•pŖ•ĩ­•]ļ•ĩĖ•8ڕ(ņ•lų•öū•ƒ –(0–(‚–p‹–ĩ˜–]ž–ĩĩ–]Ā–ĩĮ–]Ō–ĩį–8õ–("—]+—ĩ8—]>—ĩT—8b—(y—]—Šˆ—p—’—ĩš——p˗ĩ՗]Ū—ĩô—8˜(A˜i˜]r˜8Ϙ:Ƙ]Θĩۘ1ô˜]ũ˜ĩ™l0™p9™ĩF™]L™ĩb™8o™]x™8…™]Ž™8¤™8˛™(ŋ™(ؙ]á™ĩũ™(š(2š(Eš Rš(†š(—šŦš(Κ(įš(›ŗy›p›Š‹›p›•›8Ÿ›]¤›Š›8ą›ļ›1ž›Ņ›Ų› œ< œļœŗQœpYœŠcœphœmœ8wœ]|œœ8‰œŽœ1™œМąœ ŋœáœžđœŸœ)p1Š;]@E8O]TY8ch1p‰p‘Š›] Ĩ8¯]´š8ÁƝ1Νäė ÷˙ !žž0žŸFžœižpqžŠ{ž]€ž…ž8ž]”ž™ž8Ŗž¨ž1°žɞpŅžŠ۞]āžåž8īž]ôžųž8ŸŸ1Ÿ'Ÿ/Ÿ :ŸBŸ aŸžpŸŸŒŸœąŸpšŸŠß]ȟ͟8ן]ܟáŸ8ëŸđŸ1øŸ p Š# ]( - 87 ]< A 8I N 1V o w  ‚ Š  Ą ž° ŸĖ œņ pų ŠĄ]Ą Ą8Ą]Ą!Ą8+Ą0Ą18ĄQĄpYĄŠcĄ]hĄmĄ8wĄ]|ĄĄ8‰ĄŽĄ1–Ą¯ĄˇĄ ÂĄĘĄ 䥞ōĄŸĸœ9ĸpDĸŠNĸ]SĸXĸ8bĸ]gĸlĸ8tĸyĸ1‚ĸ™ĸpĻĸаĸ]ĩĸēĸ8Äĸ]ÉĸÎĸ8ÖĸÛĸ1ãĸøĸŖ  ŖŖ FŖ(ZŖ(nŖ(œŖˇŖ(ÄŖ(ØŖ(íŖ(¤(,¤8¤™Y¤pa¤Šk¤pp¤u¤8¤]„¤‰¤8‘¤–¤1ž¤´¤ŧ¤ ɤ]æ¤]Ĩ‰Ĩ:+Ĩ88Ĩ]AĨ8IĨ7ZĨ8†Ĩ8›ĨlŧĨ(ŅĨ]įĨ]đĨĩĻ(-Ļ uĻ~ĻÃŒĻ(™Ļ(ĄĻŋĻ(ŅĻåĻ(øĻ §(G§¤N§S§Ĩa§(l§q§Ĩ“§(ϧ §:ͧpÖ§8ę§7û§8 ¨]¨8!¨p*¨87¨p@¨8T¨7e¨8u¨]~¨8‹¨p”¨8Ą¨pǍ8ˇ¨p8ͨpÖ¨8ã¨]ė¨8ú¨lЉŠ] Š­%ŠĮ3Š(@Š(gŠ]pŠĩ‡Š]ŠĩÆŠ(ÛŠ(Ē Ē3ĒJĒyVĒI`Ē]fĒ2qǁĒ(ŒĒ(™Ē(ļĒIÄĒ(Ģ(Ģ "Ģ(7Ģ(iĢl€ĢIŽĢ(ŠĢIŗĢ]šĢ2Ä́ŌĢ(Ŧ(Ŧ %Ŧ(BŦ]GŦ]gŦrŦ:—Ŧ] ŦĩļŦ8ĀŦ]ÉŦĩÖŦ]ÜŦĩëŦ1õŦ]ūŦĩ­3-­]6­8E­0x­Íƒ­a­Yą­(Ī­3ę­]÷­ÎŽĪŽ] ŽĐŽ]ŽÎ#ŽŅ.ŽaCŽ´€Ž]ŽÎ–ŽĪŖŽ:°Ž]šŽ8ÂŽpäŽĪëŽ]ņŽŌøŽ]ūŽÎ¯Ņ¯a:¯Y[¯(n¯ Á¯´Û¯]ā¯]í¯]ø¯] °Î°Ô°]"°Đ)°]/°Î;°ÔD°ÔR°:_°]h°8s°p‘°]™°ÎĨ°Ôŗ°:°]ɰ8Ô°pų°Ôą]ąĐ ą]ąÎąÔ'ąÔ.ą]4ąĐ=ąaQą(\ąŦąY´ą o˛×‰˛]ޞ]›˛]Ϟ]ˇ˛ÎÃ˛Ôʲ]вĐײ]Ũ˛Îé˛Ôō˛Īŗ: ŗ]ŗ8!ŗp?ŗ]GŗÎSŗÔaŗ:nŗ]wŗ8‚ŗp§ŗÔŽŗ]´ŗĐģŗ]ÁŗÎĘŗÔÕŗĪÜŗ]âŗĐëŗa˙ŗ( ´_´Yg´ ĩÚ'ĩ],ĩ]9ĩ]Dĩ]UĩÎaĩÔhĩ]nĩĐuĩ]{ĩ·ĩÔ”ĩ:°ĩpÎĩ]ÔĩŌÛĩ]áĩÎíĩÔúĩ:ļ]ļ8ļp<ļÔCļ]IļĐPļ]VļÎbļÔoļ:‹ļpŠļ]¯ļиļaĖļ(×ļˇY$ˇ ¸Ũ¸]¸])¸]4¸]E¸ÎQ¸ÔX¸]^¸Đe¸]k¸Îw¸Ô‰¸:”¸f¸pŋ¸:ˏ]Õ¸8Ū¸pü¸]šÎšÔš:(š]1š8:šp]šÔdš]jšĐqš]wšÎƒšÔ˜š:ŖšfŦšpĘš]ĐšĐŲšaíš(øšLēYTē {ģ:ˆģ]‘ģ8ģpĀģÔÍģ:Úģ]ãģ8ėģpŧÔŧ]ŧā)ŧ:>ŧSGŧpiŧ:vŧ]ŧ8ˆŧpĢŧÔ¸ŧ:Åŧ]Îŧ8×ŧpúŧÔŊ:Ŋ]Ŋ8&ŊpHŊ:]ŊSfŊp„Ŋ]ŠŊŌ–ŊÔŖŊ:°Ŋ]šŊ8ÂŊpäŊ:ųŊSžp ž]&žá2žÔ?ž:Lž]Už8^žp€ž:•žSžžpŧž]žĐËžaãž(îžŋY$ŋ sĀe§ĀsŗĀsŊĀ]ÎĀãÚĀÔáĀ]įĀáķĀÔúĀ]Áã ÁĪÁ:#Á],Á85ÁpXÁĪaÁauÁ(€ÁŽÁ(›Á(ÚÁ(íÁ üÁY Â(SÂ_ƒÂ]ÂãœÂÔŖÂ]ŠÂáĩÂÔÂÂ:ĪÂ]ØÂ8áÂpÃÔÃ:Ã]'Ã80ÃpSÃÔZÃ]`ÃĐiÃaÃ(ŒÃ´ÃYŧà Äg3Ä]@ÄãLÄÔYÄ:fÄ]oÄ8xÄp›ÄÔ¨Ä:ĩÄ]žÄ8ĮÄpęÄÔņÄ]÷ÄáÅÔ Å]ÅĐÅa1Å(<ÅdÅYlÅ ēÅįōÅéÆņLÆņiÆņ˜ÆņĮŋ*Į(9ĮMĮ(XĮfĮ(rĮ(ŽĮ(ØĮüåĮüķĮ(Č(Č (ČŋTČkČũsČŒČŋĸȸČĪČ(ÚČëČ( Éŋ6ÉLÉ`ÉüqÉ(„É šÉ˙ÄÉŨÉ˙åÉĘ5ĘPĘ‘ĘđÄĘ'ŅĘ(āĘ÷ĘË Ë Ëŋ^Ëq˄˗ËĨËėÃËíØËšæË(Ėp ĖŠĖ]ĖĖ8'Ė],Ė1Ė89Ė>Ė1FĖƒĖ(–Ė ¤Ė:ˇĖĘĖŨĖėĖîûĖšÍŋ6ÍQÍ]’Í(ĢÍÄÍđÚÍÎÎÎ%Î4ΙYÎpaΊkÎppÎuÎ8Î]„ΉÎ8‘ΖÎ1žÎÅÎÍÎ ÛΚãÎ úÎ'Ī1ĪFĪ<VΞκĐpĐŠ(Đp-Đ2Đ8<Đ]AĐFĐ8NĐSĐ1[ЩНЭĐüģĐ(ÎĐ ÛĐíĐŅI%ŅI:Ņ<OŅgŅ<wŅŖŅŗ ŌpŌŠŌp Ō%Ō8/Ō]4Ō9Ō8AŌFŌ1NŌ‡Ōü—ŌüĨŌ(šŌ(ĖŌ ×ŌëŌĶnĶŽĶĄĶŽžĶŽÃĶ1ÜĶŽåĶ3ęĶŽÔŽ Ô3Ô<ÔŠ)Ô<6ÔĨDÔISÔI[Ô‘mÔpsÔ~ÔŦŒÔ(ÄÔ(ŅÔ(åÔŽęÔpīÔ$öԝûÔĨEÕTÕ]YÕp^Õ5kÕ(~Õ ‹Õ(ąÕŋÕ(ØÕęÕ( Ö(nÖžÖęÖē>×j×p×]v×€×LŠ×O ×ŗŧ×ĪČ×hØŗåØļHŲ<PŲ^ŲĪdŲĒŲ<˛ŲšŲŲŲpáŲŠëŲpđŲõŲ8˙Ų]Ú Ú8ÚÚ1!Ú6Úp>ÚŠHÚpMÚRÚ8\Ú]aÚfÚ8pÚuÚ1}Ú™ÚpĄÚŠĢÚp°ÚĩÚ8ŋÚ]ÄÚÉÚ8ŅÚÖÚ1áÚųÚpÛŠ ÛpÛÛ8Û]$Û)Û81Û6Û1AÛVÛ(iÛ wÛ¤Û]ČÛŋ×Û:ęÛũÛÜÜî-Üš@Ü]Üw܍ÜđÁÜÉÜŗãÜ<îÜ ŨpŨŠŨp Ũ%Ũ8/Ũ]4Ũ9Ũ8AŨFŨ1QŨgŨoŨ zŨ†ŨšŽŨ ĸŨĒŨ¸ŨŊŨŸÉŨÜŨáŨčŨíŨĸõŨúŨ˙Ũ Ū  ŪŪ Ū!(Ū :ŪAMŪBoŪxŪI€ŪŽŪ(ąŪÂŪIĘŪŌŪčŪôŪI˙Ū߂߃)ß(:ß(Kß(\ß(mß(‰ßI—ß(ŧß@Ëß Ü߈ęß(ûß(āIā(CāIāZāIbājā‚āŽāI–āĻā‚ąāIŋā(Đā(áā(ōā(á(8á]@áâ(â(/â(Bâ Sâ(pâ(…â(Ĩâ(šâ(Íâ(áâ(õâ(ã(*ã(Dã(Yã(ˆã(¨ã(Ŋã(ôãäy$äCäzYämä\…äšä]ĸä'Žä(ŧä)ÄäĨĐä*Øä­ãä)ęä­īäĨôär!åķ8å,Yåķiå'Ēåy¸å]žåĖå]Ķå^āå]įå^ũå æ]æ^æ]%æ^2æ]9æ^?æ&Yæōfæ]næŠuæpzææĩ’æ8šæĢæ(į:+į,Dįķ`įōsį]{įŠ‚įp‡įŒįĩŸį8Ļį]Ŧįĩēį1Áį]ĮįĩĪįāį(Zč8~č]‰čАčp•čščĩĄč]§čĩ°č/ˇč]ŊčĩÅčöčl é]éŠ#é(é80éAé(néé(Ģé ´éķĖéŨé(ę(ę(6ę(Qę(lę(’ę(ēęÂę Ųę(úęë(*ë(‘ëķ¤ëĄļë*ĪëyÚë]āëëë]ōë^üë]ė^ėė]!ė^+ėp2ė^<ė]Cė^Iė&Vė(kė(€ė(•ė(Ēė(ŋė(Ôė(éė(üė Xí+iíķ|í/ļíyÁí]ĮíŌí]Ųí^ãí]ęí^÷íî]î^îpî^#î]*î^0î&=î(Pî ]î(rî(‡î(œî(ąî(Æî(Ûî(ī8!ī@īpFīNī&[ī(nī Šī7ģī;Ôī!đ:.đp7đ8DđpMđ8Zđ]cđ8pđ]yđ8†đpđ8đlŊđ]ÅđŠÔđŲđ8áđīđ(ūđ?ņ]ņ$ņö)ņƒ7ņ(EņJņ]QņŒ]ņĨbņ@ņķ‘ņ'¤ņ­ņŅņķåņ' ōy.ō]4ō?ō]Iō^Sō]\ō^mōtō]{ō^…ō]Œō^“ō]šō^ ō&ÃōyÎō]Ôōßō]éō^ķō]üō^ ķķ]ķ^%ķ],ķ^3ķ]:ķ^@ķ&|ķyŒķ]’ķķ]¤ķ^Žķ]ˇķ^ÆķĐķ]×ķ^Ūķ]åķ^ëķ&øķ( ô("ô(7ô(Lô(aô(vô(‰ô ¨ôyļô]ŋôĘô]Ķô^Ũô]æô^ōôüô]õ^ õ]õ^õ&]õ(rõ(’õ(Ģõ(Äõ(Ũõ(ö(ö(:ö(öĒöîöyúöy÷] ÷_÷p÷^)÷3÷]:÷^B÷öG÷ƒU÷(f÷(w÷(ˆ÷(™÷(Ē÷(Č÷ęø] ø„øę!ø]&ø„+øę<ø<Fø7øBĸø„§ø]­ø_´ø]ģø^ÃøöČøƒÖø(įø(ų<ų7QųCâų(÷ų( ú ú!ú 0ú(Iú(bú({ú(”ú(­ú(Ņúķåú'ōúûDûE#ûF+ûō=û]FûVû^`û]gû^vû^€û]‰û^–ûœû&Ģûōļû]ŧûĖû^Öû]ßû^ėûōû& üyü]ü'ü].ü^8ü]Aü^NüXü]aü^kü]rü^|ü]ƒü^‰ü&–ü(Ģü(Āü(Õü(ęü(ũü  ũ(ũ(4ũ(Iũ(^ũ(sũ(ˆũ(¨ũ(Ŋũ(Ōũ(įũ(üũ(ū(&ū(;ū(ęūē>˙]˙@d˙]j˙ę}˙"‡˙<’˙ŦŖ˙Gą˙(ž˙(Ô˙]Ú˙ęė˙pņ˙$ø˙ũ˙Ĩ (F(Y ft(ÖI+^7^LZZ(g(Ã(Ö ã(W^c^m]~ãŠÔ˜:Ĩ]Ž8špŪÔå]ëãôĪ:]8 pCĪLa`(ky(†(×Yå(ú(  k^w^]’ãžÔŦ:š]Â8ÍpōÔų]˙ãĪ:"]+84pWĪ`at((š(Y((=(P ģ^Į^Ņ]âãîÔü: ]8pBÔI]OãXĪe:r]{8„p§Ī°aÄ(ĪŨ(ę(jYx((   ^ ^! ]2 ã> ÔL :Y ]b 8m p’ Ô™ ]Ÿ 㨠Īĩ : ]Ë 8Ô p÷ Ī a ( - (: (ē YČ (Ũ (đ  [ ^g ^q ]‚ ㎠Ԝ :Š ]˛ 8Ŋ pâ Ôé ]ī ãø Ī : ] 8$ pG ĪP ad (o } (Š ( Y (- (@  … ‘ IŦ Iģ IĮ IØ (ë Iũ g((0(A(R(v<‹ žĨĢEģ(K.(N(n(K1X(m(‚(• ¨° Ŋ(Õ($<= K(\(g˜hĸŊĖƒÚ(÷]˙Šp ĩpĩ%s{ ˆ–(Ģ(ž Ī(I]2"I*752C(O†]Bk(r(ˆj—ƒĨ(ŧČƒÖ(ôE (($(IE[(v(Ž(šŋčÕ7æčķ]ųč6(A P(e(z((Ž(ôųG G]Ä(ũ E+n6W]E‹(¯(( %(OqU´ijŠĄ Ķsé:B/jIPe]n8„8‘]š8¨(šBÛsũ-tCę[Ri(‰]’8¨8ĩpž8õt#P4(J]S8mĩ}]†8¨]ąĩÂlÉ]Īęå(öO1OP ](z(˜‰¤]Ē­¯ĮŊ(Đ­ÕĨŨrę( B1j<]BœM(”]šœå]ëœ( Pė`z~<„~—ÁpÉŠĶpØŨ8į]ėņ8ųū1 @ėPzv<|~špÁŠËpĐÕ8ß]äé8ņö1ū   . ƒ6 D ėT zv <| ~ š pÁ ŠË pĐ Õ 8ß ]ä é 8ņ ö 1!!! *!‚N!‡S!j!ė~!zĻ!žš!ŸĪ!œå!pí!Š÷!]ü!"8 "]""8"""1*"I"pQ"Š["]`"e"8o"]t"y"8ƒ"ˆ"1"Ļ"<Ŧ"~Â"é"pņ"Šû"p##8#]##8!#&#1.#>#F# Q#Y# d#l# z#†ž#ƒ§#ĩ#ėÅ#zÕ#ã#ėķ#z$<$~/$V$<\$~o$™$pĄ$Ѝ$p­$˛$ĩš$]ŋ$ĩĘ$1Ō$é$pņ$Šø$pũ$%ĩ %]%ĩ%1"%5%=% H%P% m%%ė•%zĢ%ėŋ%zā%žķ%Ÿ &›&ž>&›V&<\&~o&–&<œ&~¯&Ų&pä&Šî&]ķ&ø&8']' '8''1$'9'pD'ŠN']S'X'8b']g'l'8v'{'1„'™'p¤'ŠĢ'p°'ĩ'ĩŧ']Â'ĩÍ'1Ö'ņ'pü'Š(p( (ĩ(](ĩ#(1,(A(I( V(^( k(s( €(ˆ( (‡­(ŒÔ(‡Ũ(Œũ(C)?a)“)]›)Š)]°)^Ã)Ō)^ß)]î)^*^*]"*^2*^C*(W*(k*(*(“*(§*(Ã*yØ*yí*y+]+ +]'+^4+;+^H+]O+^d+^q+]x+^Ž+›+]ĸ+^˛+ŋ+]Æ+^Ü+í+(,(,(),(=,(Q,(e,(y,(,(Ą,(ĩ,(É,(Ũ,(!-M&-.--ĸ-Iæ-” .NM.(u.†.”ŗ.Nž.”ß.Nō.]ø./ö/ƒ/($/)/]0/Œ2^N2[2]b2^o2pv2^|2&”2™2Ÿ¸2øÆ2Ë2Đ2ĸ 3y3]$323]93^F3]M3^]3j3]q3^~3]…3^’3]™3^Ÿ3&Ä3y×3]Ũ3ë3]ō3^˙3]4^4#4]*4^74p>4^K4]R4^X4&|4y4]•4Ŗ4]Ē4^ˇ4]ž4^Î4Õ4]â4^ī4pö4^5] 5^5&(5<Ģ6(Æ6(á6(ü6(7(27(M7(r7‡7(ĸ7(Ŋ7(Ø7(ķ7(8(;8(d8u8(8(Ļ8 Å8yØ8]Ū8ė8]ķ8^9]9^9$9]+9^89]?9^E9&d9yw9]}9‹9]’9^Ÿ9]Ļ9^ļ9Ã9]Ę9^×9]Ū9^ä9&ū9›:():(D:(_:(z:(•:(°:(÷:0;U;‘;V);(D;(_;(z;(•;(°;(Ë;(æ;(<(<(7<(R<(m<(ˆ<(Ŗ<(ž<(Ų<(ô<(=(*=(E=(™=(´=(Ī=(ę=(>( >(n>y‚>]Š>˜>]Ÿ>^Ŧ>]ĩ>^Į>Ô>]Ũ>^ę>pķ>^ų>&?y.?]6?D?]K?^X?]a?^s?€?]‰?^–?]Ÿ?^Ĩ?&ĩ?(Đ?(ë?(@(!@(<@(W@(į@( A((A(CA(^A(yA(”A(¯A(čA(B(B(9B(‡B(ĸB(ŊB(ØB(&C(AC(\C(wC(’C(­C(ČC(ãC(NDWeDD]•Dę¨D]ŽDęÁD]ĮDęßD]įDŠîD]ķDøDĩ˙DpEĩE8EeE<wE”EŖEŨE<īE FFMF<_F|F‹FŦF¸F ÃFËF ÖFUáF‘éFVōFWũFUG‘GVGU$G‘,GV3GW?GW|Gf™GVĸG]¨G8ˇG8ÃG]ÉG8ŲG8ãG]éG8÷G(H(DHaH]iHŠpHpuHzHĩH]‡Hĩ–H8ŖH]ŠH8ŊH8ÄH]ĘHĩŌHōHI0 I I(JI]PIWI]_IĩrII]‡I˜IœĻI(ˇI(ÛIęI]đIJœJ( J(DJSJ]YJjJœxJ(‰J(˜J]J]ąJĀJ]ÆJ×JœåJ(öJ(KRK]"K6KœDK(UK(nK}K]ƒKšKœ¨K(šK(ÎKWßK8íK(4LČAL]NL^`L^nL(‡L™LVĸL]ĒL8ŧL8ÆL]ĖL8ÚL(ëL(˙L] M^M^'M(=MąIM˛WM(gM]oM8}M(ŽM(›M(ÃMqæM]îMĩ‹N]“NĩĄN(´N]ŧNĩĘN(īN(O(;O(aO(ÂO(×O(äO(÷O P(P(2P(GP(\P(qP(†P(›P(°P(ÅP(éP(Q(Q(0Q(SQ(yQ(ŽQ(ĻQ(ÅQ(÷Q]ũQR] R8R80R?R]ERWRœeR(vR(…Rí—RyĨR]ĢRŊRœËR(ÜR(ëRVũRy S]S#Sœ1S(BS(QSëcSyqS]wS‰Sœ—S(¨S(ŊS]ÃSŌS]ØSęSœøS( T(!TR,T]2TGTœUT(fT(|TW‹T8•T]›T8ŠT(ŪT•ôTU]U8-U87U]=U8KU(lU(’U(¸U(ŪU(V(*V(gV(|V(‰V(œV ŠV(žV(×V(đV(W(W(>W(SW(kW(ƒW(ŖW(ÔW]ÚWáWpįWĩņW]÷W8X8Xí5XyCX]IXXXœfX(wX(…XV¨XyļX]ŧXËXœŲX(ęX(øXëYy&Y],Y;YœOY(`Y(tY]zY‰Y]YžYœŦY(ŊY(áY…îY]ôYZœZ("Z(FZRSZ]YZhZœvZ(‡Z(“ZŒĩZyÃZ]ÉZØZœæZ(÷Z([W'[85[(J[]P[_[]e[w[œ…[(–[(¤[]Ē[ĩú[í \ž2\]8\8H\8O\]U\ĩc\(Ō\(](=](g](ĸ](ˇ](Ä](×] ä](ų](^(+^(@^(Y^(n^(’^(§^(Ã^(Û^(đ^(_(4_(S_(›_IŖ_˛_ ¸_Ę_]Đ_­Õ_ĮÜ_­á_Ĩí_¯ü_]`Ú `;&`<0`<:`=Ž`>”`< `<ļ`>ŧ`<Â`<Ü`?æ`?đ`?ũ`7>a@Pa6da(qa>|aŸ‘alŖa)´a(ČaÛÛa?åa?īa?ųa6b(b7 b8)b</b<;b<Ab<qb=ybAŠb(šb(cQc(-c(Cc Wc({c=cA’c<ēc(ác9îc<ôcB d]d‡dę=d‡Xd‹d1ˇd3ÖdIíd( eĄ7e3WeIne(ĩe(Üeęe(f‡fpf_#f&=fôWfôqfôˆf<ĄfIÍf(ôf)gĄAg(Wg0_g kg]pgpug5ƒg0‘g(Ŧg(ŋg]ÄgpÉg5Ögëg(#hĸCh'Ph([hhH‰hÂh(Õh 1i:Ii8WigiĒĨilži]ĖiŪipîiüi(j}/j€JjZjŌcj›jq˜jĩ°j8Įj]ĐjĩÚj]ãjĩđj]öjĩkĒIkĒ^k‰jk]sk8‰k8–k]Ÿk8ĩk8Ãk(īk(l›#l 4lŌJl(^l(sl(”lŦŸl§lŦl­˛lŽŊl¯ãlņl\mÉm,mĢ:m(Gm(gm(ˆm(›m ¨m(Ųm]Ūm]ãm]émĶūm:n]'n;4n°cn(nn|n(‘n]Ân>čnYön(o Lq(|q(q œq>rrŗ r(Fr(rr”r0œr Šr(ĘrûrGsG,s:9spBs8OspXs8es]ns8Žsĩžs]§s8´s]Ŋs8Øsĩčs]ņs8ūs]t8"tĩ2tp;t8HtpQt8^t]gt8qt]{t]ƒt;t°•t>Ũt:įtpđtĩũtpuĩ#uĩ1u]:uĩDu]Muĩmuĩ{u]„uĩŸuĩ­u]ļuĩÃupÉuĩĶupÜuĩéupīuĩųupvĩ v]v]v;(v°0v>wv]€vĩ—v] vĩˇv]Āvĩ×v]āvĩ÷v]wĩw] wĩ0w>Ow qw>‘w”›w7ĻwŦw]¸w6ĮwˇŪw]đwˇx;x:Hx]Qx8Yx7jx8wxp€x8x]’x]—x]žxDąx]šx;Ãx°Ëx>Ųx(y(yWyY_y py>~y(¯y]ĩyŊyŅyĢßy(z(z %zĩ9zEzšSzô^z]kzšsz#€zšŽzô•z]ĸzšĩzšÃzôĘz]×zš{-{N{^{šž{ôŠ{pĩ{ŧÃ{#Ô{šâ{ôī{Đô{]ü{š |^u|ģÚ|î| }š}ô$}Ō)}]1}ž?}^ĩ}–ä}^/~š=~ôD~ĶK~]S~žË~ĨŨ~v÷~ؐO)o3ˆFŒg^Ŋ‹ €—%€^n€Œ¸€Öā€#,^€x˜āĄŒīpô¤Ą‚׃v9ƒķNƒ]VƒŠ]ƒpbƒgƒĩnƒ]tƒĩ}ƒ1„ƒ]Šƒĩ—ƒ1žƒ]¤ƒĩ¯ƒɃŠøƒŨ„^Q„Y„ a„‡~„‰„ĀŽ„p–„Áą„(Ė„]Ņ„›į„]í„Úü„]…Ž …Û%…(1… Q…ž`…Ÿx…Ē…(ĸ…œɅpŅ…Šۅ]ā…å…8ī…]ô…ų…8††1†)†p1†Š;†]@†E†8O†]T†Y†8a†f†1n†”†œ† §†›¯† 熆 Ԇ‡ž‡Ÿ/‡Ēb‡I‡œЇp´‡Šž‡]Çȇ8Ō‡]ׇ܇8æ‡ë‡1ô‡ ˆpˆŠ ˆ]%ˆ*ˆ84ˆ]9ˆ>ˆ8FˆKˆ1SˆqˆÆ†ˆŽˆ ™ˆ›Ąˆ ވļˆ Ј(äˆlđˆƒūˆ(‰‰Į ‰(U‰(h‰ u‰(Ō‰Iį‰Iö‰I:ŠËRŠ(eŠ rŠ(ģŠIЊIߊI ‹Ë‹(/‹ <‹({‹I‹IŸ‹IĮ‹ËŲ‹(ė‹ ų‹(>ŒISŒIbŒI‡ŒË™Œ(ŦŒ šŒ(㌴žŸ3?IWIcIrIƒ(“I§e¸(ɍ(ڍ(ë(ü(&Ž5ŽƒCŽ(RŽ›qŽpyŽŠƒŽ]ˆŽŽ8—Ž]œŽĄŽ8ŠŽŽŽ1ļŽŨŽIōŽIˆŅ(˛(Į(܏(ī›÷ ($ D(d(}(ž(ĩ]ģčԐŌâ(‘] ‘č7‘]=‘ÔX‘(k‘ €‘IŽ‘Iœ‘ĶĒ‘(ˇ‘(ב(ø‘( ’ ’Ô’ 4’E’Õ\’:m’1{’l’•’ĸ’Õ°’(Ŋ’(ī’(“ (“(=“({Įa I5g7¨ĨØĨ Ĩŧ#ũ#Ē$Ē2$Ē|$wŒ$xŧ$Rg&vY)Ĩ 0ū˛08[9"<8>=`q8Ėt8ĘÆöÚÆøáÆú§ÉįÍĪ!u1x7!‡#i¤i§ā†Ã:)p/ĩ;B]MĩZ]cĩp|]‚ĩ‹]–ĩĄl× &ē&­\&ē`&­´&ē¸&­('ē,'­   '(% '( 5>,.(<T,.(<T`%(3Kdp B l)762D(\v<…((¨ŊĖ(Öß (()(=H(U`(u((5?(M 6(7)8=<";(<5<<=“>™< <´>š<ŋ<Ņ?Ø?ß?æ7@6-(8>Jl^8l(„Ĩ<´=ŧAÄĖ ×(áü 9 <B  $(,048<@DHLPTX\`dhlptx|€„ˆŒ”˜œ ¤¨Ŧ°´¸ŧĀÄČĖĐÔØÜāäčėđôøü  $(,048<@DHLPTX\`dhlptx|€„ˆŒ”˜œ ¤¨Ŧ°´¸ŧĀÄČĖĐÔØÜāäč]ė]đ]ė ]đ ]ô ]ø ]ü ] ] ] ] ] ] ] ] ]$ ]( ], ]0 ]4 ]8 ]< ]Ā p 6(#7)81E()E%'2(=Tb(lu I7&2@(JS 7(-n:2C4^(hq ;<$<.=‚>ˆ<<Ē>°<ļ<Đ?Ú?ä?ņ72@D6X(_>†Ģ(ÃmÖ?ā?ę?ô6ü(78$<*<6<U<i=nA’]˜ĩ¯Įę(÷Q 9*<0B@=FAN W<;<$<.=‚>‡< <Ē>°<ļ<Đ?Ú?ä?ņ72@C6Z(_>†tŦuĘmŨ?į?ņ?û6(7"8+<1<=<\<p=uAš] ĩˇÁîv"9/<5BE=KAS b<|uQ• šģv:"1-lj :&}1ln I45(?H '9]AŠKpPU8_pdi8q„Œ  ™)p1Š;p@E8O]TY8af1nƒ‹ œ1p9ŠC]HM8W]\a8in1v‹“ žŸ9pAŠK]PU8_]di8qv1~Ž– 'Ą;]CŠMpRW8fk8w]}88•ą]šŠÃpČÍ8×pÜá8é   Ĩ'3(@(T_(l€(Š•(Ÿ¨ Ĩ'3(@(Kdo(|‹(• (Ēŗ Ч)Ĩ7'L(Y(d|Œą(ģÆ(ĐŲ Š§)Ĩ7'L(Y(dp„”´(žÉ(ĶÜ I#])22 UĄi]qŠ{p€…8”™8Ĩ]Ģ8ģ8ÃŅ(é]ņŠûp8p8!D]k(u~ ‘(›Ļ](I07;2IŦW(d(|‡(“¯(šÄ(Î× ](I07;2IŦW(d(|‡(“¯(šÄ(Î× x ]1:]@_KŦY(f(“vŸ]´ŋ(ËŪ(čķ(ũ ]$x9yExS]Y_eIo]u2ƒ]—^¤˛ŦĀ(Ņ(â(ķ(((&(7(T_(s~(“ž(ŗž(ĶŪ(ķū((3p(z…(š(¤¯(šÄ(ÎŲ(ãî(ø(  !(+yp"_0Ŧ>(K(do({“(¨(˛ģ  ļ™9pAŠKpPU8_]di8qv1~“› ļ™)IpQŠ[p`e8o]ty8†1ŽžĻ ].I8]>2G jĄ~]†Šp•š8ŠŽ8ē]Ā8Đ8Øæ(÷(]Š#p(-87p<A8It„¤˛(ŧĮ(ŅÚ å(īú$|*v2]9]JV]\_hIr]x2†’Iœ]ĸ2°Ŧž(Ë(Ø(å(ō(('(3>(KV(cn({†(“Ž(¸Ã(ÍØ(âí(÷( (!* L(V!|'V/]6]GS]Y_eIo]u2ƒI™]Ÿ2­Ŧģ(Č(Õ(â(ī(ü((+6(CN([f(s~(‹Ļ(°ģ(ÅĐ(Úå(īú((" D(N*|3xC]T`pf_rI|]‚2œIĻ]Ŧ2ēŦČ(Ų(ę(û( ((;vK]\g({†(“ž(ŗž(ĶŪ(ķ(#(-8(BM(W` s(}ˆ(’(Ģ:'l68D(\le7r2€(ŦģÎ<Ö(āYũ(# .(7:*758NlW7d2r(Ē2´Æ<Î(ØYņ(û :(8AlJ7W2e(”Ļ<Ž(¸YŅ(Û÷ :*758NlW7d2r(Ē2´Æ<Î(ØYņ(û :!0:lC7P2^(„–<ž(¨YÁ(Ëį :*758NlW7d2r(Ē2´Æ<Î(ØYņ(û :%768OlX7e2s(Ą]Ē8´Æ<Î(ØYņ(û :*758NlW7d2r(Ē2´Æ<Î(ØYņ(û :*758NlW7d2r(Ē2´Æ<Î(ØYņ(û :*758NlW7d2r(Ē2´Æ<Î(ØYņ(û Ģ;ą<ž<Č=.>4<@<V>[<a<{?…??œ7Ũ@î6 (>3SA;K<X=Š>Ž<´<Ņ>Ö<Ü<ö?? ?7^@o6†(‹>ŽSÃlØlå]üãÔ]á!Ô5:E]N8\p}]ˆÎ—Īž]¤ā­Ī¸aĪ(Ūī((?#?-?76?(X7^8c<i<x<~<—<´=ŧAĪ?Ų?ã?í6õ(78<<%<4<:<j=rA§ˇĮ×ãũ<=%A- 6<X=^ApQx …9’<˜BËYÜ(é÷(Q39@<FB%;+<8<B=¨>Ž<ģ<Đ>Õ<Û<õ?˙? ?7W@h6ƒ(Š>ŗSÁ;Ë<Ø=)>.<4<Q>V<\<|?†??7Ū@ī6( >4SIl^lk]‚ãŽÔ•]›á§Ôģ:Ë]Ô8âp]ÎĪ$]*ā3Ī>aU(du(‰(Ÿ?Š?ŗ?Ŋ6Å(Ū7ä8é<ī<ū<<<:=BAU?_?i?s6{(”7š8Ÿ<Ĩ<Ģ<ē<Ų<đ=øAWgw‡“­<Ī=ÕAŨ Y(!/(<KQ]Qe |9‰<BĨ=ĢAš<į9ô<úBė+íIpQŠ[]`e8o]ty8†1ŽŖĢ ė,íBpJŠT]Y^8h]mr8z1‡Ž(ģÔī (+9 cĸ™]¤ŠŽpŗ¸8Â]ĮĖ8ÔŲ1å]ë8ö1ũ]ĩ )]4Š>pCH8R]W\8fk1w]}8†1’]˜8Ŗ1Ē]°ĩšÔÜ įī ķ6õ]8/˙>]D8V]\8f]l8u1]“8Ž]´8ž]Ä8Ö]Ü8ö]ü8]86]<8V]\8v]|8–]œ8ļ]ŧ8čPö]ü_ 8(*(:]@8U][8d1yP‚]ˆ8˜8Ļ(´ÁÎđ8ú]8&(0;(F S(]ūūū ūūūūū ū$ū(ū,ū0ū4ū8ū<ū@ūDūHūLūPūTūXū\ū`ūdūhūlūpūtūxū|ū€ū„ūˆūŒūū”ū˜ūœū ū¤ū¨ūŦū°ū´ū¸ūŧūĀūÄūČūĖūĐūÔūØūÜūāūäūčūėūđūôūøūüūūūū ūūūūū ū$ū(ū,ū0ū4ū8ū<ū@ūDūHūLūPūTūXū\ū`ūdūhūlūpū]82F]L8^]d8n]t8}1•]›8ļ]ŧ8Æ]Ė8Ū]ä8ö]ü8]86]<8V]\8v]|8–]œ8ļ]ŧ8íPû]_8(/(?]E8Z]`8i1†P]•8Ĩ8ŗ(ÁÎÛø8]8.(8C(N [(e  $(,048<@DHLPTX\`dhlptx|€„ˆŒ”˜œ ¤¨Ŧ°´¸ŧĀÄČĖĐÔØÜāäčėđôøü  $(,048<@DHLPTX\`dhlp]8$0]68V]\8e1]…8ĄPĒ]°8Ā8Î(Øį(ņú ()EYĢœ<āĢ7ĢQĢŒ<ØĢ.ĢYĢœ<āĢ7Ģ18y@]FQ]X^b]i^yƒ]Š^”]›^Ą&¸(ÂÍ(×â(ė÷( (!(+6(?H 18y@]FQ]X^b]i^yƒ]Š^”]›^Ą&¸(ÂÍ(×â(ė÷( (!(+6(?H 1DyL]R]]d^n]u^…]–^ ]§^­&Ä(ÎŲ(ãî(ø( ("-(7B(KT 1DyL]R]]d^n]u^…]–^ ]§^­&Ä(ÎŲ(ãî(ø( ("-(7B(KT YĢœ<āĢ7ĢYĢœ<āĢ7Ģ:%768Ely]‚8ĸ YĢœ<āĢ7Ģ0M2OC(NYQŽQZQ”QÕS+QC<WIlTŧ<ĪU×ßVæWī Y&Y<pDŠNpSX8`jZo[u\…]˜ ;<$<.=‚>‡<Ž<Ē>¯<ĩ<Õ?ß?é?ö77@E6Y(^>u}€m“??§?ą6š(Ō7Ø8Ũ<ã<é<ī<ū<+=0AOe<=‡A žQĻ ĩ9Â<ČB8ęKę^ęwęęę,ęnQ—QĮQīQXQ—QĢQ?`^`}`œ`đ` `*`p$k?lWm`(„(1<AGæŽ(¨v°Ä€ÉĪæâįí悐 į„#)į<…AGæZ†_eįx‡}ƒį–ˆ›Ąæ´AšŋįԉאŨæđŠõûH‹H,Œ17æJOUHhŽmsį†‹‘æ§]­ęÅvÎ(Üė]ōę] ę]"ę0F(PY 3L=BKæŽ(¨v°Ä€ÉŅæäéņæ‚ į$„)1įD…IQæd†iqᄇ‰‘į¤ˆŠąæÄAɐŅįä‰éņæŠ H$‹)1HDŒIQædiqH„މ‘į¤ŠąæĮ]Íęåvî(ü ]ę$]*ę<]BęQg(qz {&{<pDŠNpSX8`j|o[u\…]˜ ėz><D~VypŠ‹p•8Ÿ]¤Š8ąļ1žÎÖ %(3(ICItƒˆƒ–(¨Õ<ņIIJI~(ˆģU‘$V/(9B XUp‘ƒ‹VW™UŠ(ŗÂUÍ‘ÕVÚWæWĨ Ĩ9LA FƒT(`-f-…(”§-ĶLØ-á-ņIö-- (:xBf-kĄyƒ›(ĨŽ š(ÃĖ  ĨĨAJ Oƒ](h-n-•(Ąš-ØŨ-ã-ķIø--(0u8Mf-kĄxŽ(˜Ą &(4ėXF<L,ÚIûpŠ$p).ĩ5];ĩD1Ll<ˆ›W Žļ ÅÍ ÖUáŠéV~U•9Ÿ¸­(ˇŧWÔ(ŪãWė øU9¸().WDULVW(afWo vW ~U•9Ÿ¸­(ˇŧWÖ(āåWî úU 9¸!(+0WHUPV[(ejWs zWƒ ~U•9Ÿ¸­(ˇŧWÔ(ŪãWė øU9¸().WDULVW(afWo vW ~U•9Ÿ¸­(ˇŧWÖ(āåWî úU 9¸!(+0WHUPV[(ejWs zWƒ 9IaIĨƒĘƒØ(ę<MIIĘI˙( ?›UĻŠŽVš(ÃĖ âUúŠ VW#U4(>MUXŠ`VeWqW4IIIXI„(Ž™(ŖŽUÁŌŌVÛWä 0IEITIuIŠI™IĪƒäƒķƒƒ0ƒBƒP(](j(|†Ã<âI÷IIĘ+ĘG(T(h(r§¸ę(ô˙( U'/V8UTŌfUrŌÅŌÍ Ø(âí(÷ W#(-8(BQU*I9I^(hsU†Ô—VžW§ (I7ISI_I‹ƒšƒ°ƒÂƒĐ(Ũ(īų)<EIVIzI‰IŠĐÆ(Û(åvÔ~ ‰(“œ Ŧ(ļÁUŨÔų( U!)V2UGÔbWq({†UŖÔ˛VšWÂU ØŲ! *]/J8]=BJG€P]UJ\]a]fkKy‚~†‹‚Ú• œĄ]ĻK°†ĩŊ†ĮÚĖ Ķ]Ø]ŨKįAėôųAūÚ  ]J‰]$L)Š2]7L=‹E]JJOŒX]]Lci]n]sK}Ž‚ŠŽ”Ú™ ĸ]§J¯ĩ š(žÃ ČÚÍ ÔŲ]ßÛãGčKō„÷˙„ Ú ]J$…*]/‡4<A‡FÚK TöX(]bögÚl u--ˆ-’0˜-Ą yÜŨŪßāÜâÜäŪåãÜčŪéįÜëÜíÜđŪōīÜķŪõįÜøŪų÷ŪûįŪũįÜ˙ÜŪŪņŪīŪ īŪ ņŪ áŪŪŪŪY[Ū{[­ áĻ § —Ē ĢÁąÛÜ Ž$­(°,Ę0Ë4â8ã<Ė@¯öˆ ‰Īü˙ Ėūũ žėéęŅî û đ{Ŗņ z$§(Å,~04Ļ8ō<€@ķ   ! $(,048<"@  ) *ŲÚÛÜ Ũ$Ū(ß,ā0á4â8ã< @åúˇ ¸ôô    Ŗ-.Ŗ-2 5>.Ŗ-4 6’.Ŗ-æų Aę„ …õZ- .|÷ Ô ŲŲŲ×!Ø(Ų/ŲíŲõŲŲŲŲ*Ų=ŲPŲWŲdŲtŲ}Ų–ŲĻŲ¯ŲČŲØŲáŲúŲŲŲ)Ų5Ų@ŲKŲQŲoŲŒŲ¤ŲĢŲČŲĪŲâŲéŲŲ Ų*Ų1ŲNŲUŲrŲyŲ‘Ų˜ŲĢŲ˛ŲŅŲÚŲáŲņŲüŲ ŲŲ!Ų(ŲGŲeŲ}Ų„ŲĄŲ¨ŲģŲÂŲßŲæŲŲ Ų'Ų.ŲKŲRŲjŲqŲ„Ų‹ŲĒŲŗŲēŲßŲįŲōŲŲŲŲ)Ų5ŲKŲfŲƒŲ–ŲĸŲŽŲēŲĐŲëŲŲŲ'Ų4ŲTŲiŲuŲ‡Ų”Ų ŲŦŲ¸ŲÄŲĐŲÜŲčŲôŲ Ų Ų Ų% Ų7 ŲB ŲM ŲX Ų^ Ųg Ųm Ų„ ŲŠ ŲĄ Ų§ Ųē ŲĀ ŲĶ ŲŲ Ųņ Ų÷ Ų Ų Ų5 Ų< ŲY Ų_ Ųw Ų~ Ų– Ų Ų´ Ųģ ŲŲ Ųā Ų÷ Ųū Ų Ų! Ų8 Ų? ŲV Ų] Ųt Ų{ ŲŽ Ų• Ųļ ŲŊ Ųß Ųæ Ų Ų Ų* Ų1 ŲJ ŲQ Ųj Ųq ŲŠ Ų‘ ŲĒ Ųą ŲĘ ŲŅ Ųę Ųņ Ų Ų Ų) Ų0 ŲR ŲY Ųl Ųs Ų| Ų“ ŲŽ ŲÉ Ųî ŲŲ=Ų]Ų‚ŲžŲĨŲÂŲÉŲæŲíŲ ŲŲ)Ų0ŲOŲnŲ†ŲŲĨŲŦŲÄŲËŲãŲęŲŲ Ų!Ų(Ų@ŲGŲ_ŲfŲ„Ų‹Ų¤ŲĢŲÃŲĘŲãŲęŲūŲŲŲ$ŲAŲHŲkŲŽŲĢŲ˛ŲĪŲÖŲķŲúŲŲŲ;ŲBŲiŲpŲ’Ų™ŲļŲŊŲßŲæŲ˙ŲŲ"Ų)ŲPŲWŲyŲ€ŲŲ¤ŲÆŲÍŲđŲ÷ŲŲ ŲLŲSŲz؁تŲĒŲŅŲØŲúŲŲ#Ų*ŲGŲNŲpŲwŲžŲĨŲÖŲŨŲ ŲŲ7Ų>ŲjŲqŲ˜ŲŸŲËŲŌŲųŲŲ,Ų3Ų_ŲfŲ’Ų™ŲÅŲĖŲøŲ˙Ų*Ų1Ų\ŲcŲ€Ų†ŲŖŲĒŲŅŲØŲņŲøŲŲŲ/Ų6ŲNŲUŲ|ŲƒŲĨŲŦŲÎŲÕŲ÷ŲūŲ Ų'ŲNŲUŲwŲ~Ų Ų§ŲÉŲĐŲ÷ŲūŲ Ų'ŲIŲPŲrŲyŲ Ų§ŲÉŲĐŲōŲųŲŲ"ŲIŲPŲrŲyŲ›ŲĸŲÄŲËŲōŲųŲŲ"ŲDŲKŲmŲtŲ‘Ų˜ŲŋŲÆŲ÷ŲūŲŲ"ŲIŲPŲŲ‡Ų”Ų˛ŲšŲÆŲäŲëŲøŲŲ!ŲDŲJŲWŲuŲ|Ų‰Ų§ŲŽŲģŲÔŲäŲ Ų Ų Ų Ų# Ų- Ų9 ŲL ŲY Ųy ŲŽ Ųš ŲŦ Ųš ŲÅ ŲŅ ŲŨ Ųé Ųõ Ų!Ų !Ų!Ų%!Ų1!Ų>!ŲP!Ų[!Ųf!Ųq!Ųw!Ų€!Ų†!Ų!ŲŖ!Ųē!ŲĀ!ŲĶ!ŲŲ!Ųė!Ųō!Ų "Ų"Ų'"Ų-"ŲN"ŲU"Ųr"Ųx"ؐ"Ų—"Ų¯"Ųļ"ŲÍ"ŲÔ"Ųō"Ųų"Ų#Ų#Ų3#Ų:#ŲQ#ŲX#Ųo#Ųv#Ų#Ų”#Ų§#ŲŽ#ŲĪ#ŲÖ#Ųø#Ų˙#Ų $Ų'$ŲC$ŲJ$Ųc$Ųj$Ųƒ$ŲŠ$ŲŖ$ŲĒ$ŲÃ$ŲĘ$Ųã$Ųę$Ų%Ų %Ų#%Ų*%ŲB%ŲI%Ųk%Ųr%Ų…%ŲŒ%Ų•%ŲŦ%ŲĮ%Ųâ%Ų&Ų1&ŲV&Ųv&Ų›&Ųˇ&Ųž&ŲÛ&Ųâ&Ų˙&Ų'Ų#'Ų*'ŲB'ŲI'Ųh'Ų‡'ŲŸ'ŲĻ'Ųž'ŲÅ'ŲŨ'Ųä'Ųü'Ų(Ų(Ų"(Ų:(ŲA(ŲY(Ų`(Ųx(Ų(Ų(Ų¤(ŲŊ(ŲÄ(ŲÜ(Ųã(Ųü(Ų)Ų)Ų)Ų6)Ų=)ŲZ)Ųa)Ų„)Ų§)ŲÄ)ŲË)Ųč)Ųī)Ų *Ų*Ų0*Ų7*ŲT*Ų[*Ų‚*Ų‰*ŲĢ*Ų˛*ŲĪ*ŲÖ*Ųø*Ų˙*Ų+Ų+Ų;+ŲB+Ųi+Ųp+Ų’+Ų™+Ųļ+ŲŊ+Ųß+Ųæ+Ų ,Ų,Ų2,Ų9,Ųe,Ųl,Ų“,Ųš,Ųŧ,ŲÃ,Ųę,Ųņ,Ų-Ų-Ų<-ŲC-Ų`-Ųg-Ų‰-ؐ-Ųˇ-Ųž-Ųī-Ųö-Ų".Ų).ŲP.ŲW.Ųƒ.ŲŠ.Ųą.Ų¸.Ųä.Ųë.Ų/Ų/ŲE/ŲL/Ųx/Ų/ŲĢ/Ų˛/ŲŪ/Ųå/Ų0Ų0ŲC0ŲJ0Ųu0Ų|0Ų™0ŲŸ0Ųŧ0ŲÃ0Ųę0Ųņ0Ų 1Ų1Ų)1Ų01ŲH1ŲO1Ųg1Ųn1Ų•1Ųœ1Ųž1ŲÅ1Ųį1Ųî1Ų2Ų2Ų92Ų@2Ųg2Ųn2ؐ2Ų—2Ųš2ŲĀ2Ųâ2Ųé2Ų3Ų3Ų93Ų@3Ųb3Ųi3Ų‹3Ų’3Ųš3ŲĀ3Ųâ3Ųé3Ų 4Ų4Ų44Ų;4Ųb4Ųi4Ų‹4Ų’4Ų´4Ųģ4ŲŨ4Ųä4Ų 5Ų5Ų45Ų;5Ų]5Ųd5Ų†5Ų5ŲĒ5Ųą5ŲØ5Ųß5Ų6Ų6Ų46Ų;6Ųb6Ųi6Ųš6ŲŖ6ŲŦ6Ųļ6Ųģ6ŲÅ6ŲĐ6ŲÜ6Ųâ6Ųč6Ųî6Ųô6Ųú6Ų7Ų7Ų7Ų7Ų7Ų#7Ų*7Ų17Ų97ŲA7ŲH7ŲO7ŲV7Ų_7Ųk7Ųq7Ųw7Ų}7Ųƒ7Ų‰7Ų7Ų˜7Ų¤7ŲĒ7Ų°7Ųļ7Ųŧ7ŲÅ7ŲŅ7Ų×7ŲŨ7Ųã7Ųė7Ųõ7Ų8Ų8Ų8Ų28ŲK8ŲW8Ųd8Ųk8Ųˆ8Ų8Ųą8Ų¸8ŲÕ8ŲÜ8Ųų8Ų9Ų'9ŲC9ŲQ9Ųm9Ų{9ŲŠ9Ų™9Ų¨9Ųˇ9ŲÆ9ŲÕ9Ųä9Ųō9Ų:Ų:Ų":Ų0:Ų>:Ųm:Ų–:Ų¤:Ų;Ų;Ų@;Ųa;Ųg;Ų„;ؐ;Ų–;Ųŗ;Ųš;ŲÖ;ŲÜ;Ųų;Ų˙;Ų<Ų"<Ų?<ŲE<Ųb<Ųk<Ųt<Ųz<Ųœ<Ųĸ<ŲĀ<ŲŨ<Ųé<Ųī<Ų=Ų=Ų=Ų8=Ų>=ŲP=Ųd=Ųj=Ų|=ؐ=Ų–=Ų¤=Ųš=ŲÅ=ŲĐ=Ųä=Ųī=Ų>Ų>Ų">Ų->ŲA>ŲL>Ų`>Ųk>Ų>Ų†>Ų›>Ų§>Ųļ>Ųŋ>ŲØ>Ųį>Ųđ>Ų ?Ų?Ų!?Ų:?ŲI?ŲR?Ųk?Ųz?Ųƒ?Ųœ?Ų§?Ų°?ŲĘ?ŲÖ?Ųâ?Ųî?Ų @Ų"@Ų(@Ų?@ŲE@Ųa@Ųg@Ųƒ@Ų‰@ŲĨ@ŲĢ@ŲĮ@ŲÍ@ŲŨ@Ųí@Ųų@ŲAŲAŲAŲ(AŲ2AŲDAŲPAŲ\AŲ{A؁AŲ”AŲšAŲ­AŲŗAŲËAŲŅAŲíAŲķAŲBŲBŲ1BŲ7BŲSBŲYBŲuBŲ{BŲ™BŲĢBŲļBŲÁBŲÖBŲõBŲûBŲCŲCŲ/CŲ5CŲLCŲRCŲnCŲtCŲ‹CŲ’CŲŽCŲĩCŲŅCŲØCŲôCŲûCŲDŲDŲ:DŲADŲ_DŲhDŲDŲŽDŲˇDŲÁDŲĘDŲŅDŲéDŲõDŲüDŲEŲEŲ3EŲSEŲjEŲsEŲ}EŲ†EŲEŲĒEŲˇEŲžEŲãEŲōEŲųEŲFŲFŲ*FŲ?FŲGFŲbFŲmFŲyFŲ†FŲ’FŲŸFŲĢFŲąFŲ¸FŲÄFŲĐFŲÛFŲįFŲķFŲ˙FŲ GŲGŲ#GŲ)GŲÄŲ]ÄŲ|ÄŲ”ÄŲ›ÄŲŗÄŲēÄŲŌÄŲŲÄŲņÄŲøÄŲÅŲÅŲ/ÅŲ6ÅŲNÅŲUÅŲsÅŲzÅŲ’ÅŲ™ÅŲąÅŲˇÅŲĐÅŲ×ÅŲôÅŲûÅŲÆŲÆŲ>ÆŲaÆŲ~ÆŲ…ÆŲÆŲ¤ÆŲŧÆŲÃÆŲÛÆŲâÆŲúÆŲĮŲĮŲ ĮŲ8ĮŲ?ĮŲXĮŲ_ĮŲsĮŲyĮŲ›ĮŲĸĮŲÅĮŲĖĮŲéĮŲđĮŲČŲČŲ2ČŲ9ČŲMČŲTČŲrČŲxČŲ–ČŲČŲĀČŲĮČŲåČŲėČŲÉŲÉŲ.ÉŲ4ÉŲQÉŲWÉŲ‡ÉŲ‘ÉŲ–ÉŲ ÉŲŦÉŲˇÉŲÂÉŲÍÉŲ×ÉŲįÉŲīÉŲûÉŲĘŲĘŲĘŲ'ĘŲ1ĘŲAĘŲIĘŲUĘŲ`ĘŲkĘŲvĘŲ€ĘŲŒĘŲ—ĘŲĸĘŲ­ĘŲ¸ĘŲÂĘŲŌĘŲÚĘŲæĘŲņĘŲüĘŲËŲËŲËŲ(ËŲ3ËŲ>ËŲHËŲTËŲgËŲyËŲ‚ËŲ‹ËŲšËŲ­ËŲšËŲÅËŲŅËŲŨËŲéËŲ˙ËŲĖŲ5ĖŲ>ĖŲIĖŲYĖŲeĖŲwĖŲƒĖŲĖŲ›ĖŲ°ĖŲĘĖŲĐĖŲčĖŲũĖŲ ÍŲÍŲ$ÍŲ/ÍŲ5ÍŲLÍŲRÍŲiÍŲoÍŲ†ÍŲ›ÍŲēÍŲÔÍŲķÍŲ ÎŲÎŲ/ÎŲ5ÎŲRÎŲXÎŲzÎŲ‰ÎŲŋÎŲËÎŲ×ÎŲãÎŲīÎŲûÎŲĪŲĪŲĪŲ+ĪŲ7ĪŲCĪŲYĪŲzĪŲĨĪŲÁĪŲŨĪŲãĪŲĐŲĐŲ%ĐŲ,ĐŲDĐŲKĐŲjĐŲ‰ĐŲĄĐŲ¨ĐŲĀĐŲĮĐŲßĐŲæĐŲūĐŲŅŲŅŲ$ŅŲ<ŅŲCŅŲ[ŅŲbŅŲ€ŅŲ‡ŅŲŸŅŲĻŅŲžŅŲÄŅŲŨŅŲäŅŲŌŲŌŲ%ŌŲ,ŌŲKŌŲnŌŲ‹ŌŲ’ŌŲĒŌŲąŌŲÉŌŲĐŌŲčŌŲīŌŲĶŲĶŲ&ĶŲ-ĶŲEĶŲLĶŲeĶŲlĶŲ€ĶŲ†ĶŲ¨ĶŲ¯ĶŲŌĶŲŲĶŲöĶŲũĶŲÔŲ&ÔŲ?ÔŲFÔŲZÔŲaÔŲÔŲ…ÔŲŖÔŲĒÔŲÍÔŲÔÔŲōÔŲųÔŲÕŲ"ÕŲ;ÕŲAÕŲ^ÕŲdÕŲ”ÕŲžÕŲŖÕŲ­ÕŲšÕŲÄÕŲĪÕŲÚÕŲäÕŲôÕŲüÕŲÖŲÖŲ'ÖŲ=ÖŲXÖŲpÖŲ|ÖŲ…ÖŲŽÖŲ˜ÖŲĢÖŲ˛ÖŲâÖŲôÖŲ×Ų×Ų×Ų#×Ų:×ŲN×Ų[×Ųo×Ų|×Ų‰×Ų–×ŲŦ×ŲĖ×ŲĶ×Ųį×Ų˙×ŲØŲØŲ%ØŲ1ØŲ?ØŲLØŲYØŲfØŲxØŲ…ØŲ’ØŲŸØŲŦØŲšØŲÆØŲĶØŲāØŲįØŲ˙ØŲŲŲŲŲ%ŲŲ=ŲŲDŲŲ\ŲŲcŲŲ|ŲŲƒŲŲ ŲŲ§ŲŲĀŲŲĮŲŲäŲŲëŲŲÚŲ ÚŲ"ÚŲ)ÚŲAÚŲHÚŲ`ÚŲgÚŲÚŲ†ÚŲžÚŲĨÚŲŊÚŲÄÚŲÜÚŲãÚŲûÚŲÛŲÛŲ!ÛŲ5ÛŲ<ÛŲPÛŲWÛŲkÛŲrÛŲ†ÛŲÛŲĄÛŲ¨ÛŲŧÛŲÃÛŲ×ÛŲŪÛŲōÛŲųÛŲ ÜŲÜŲ(ÜŲ/ÜŲCÜŲJÜŲ^ÜŲeÜŲ†ÜŲÜŲŠÜŲ°ÜŲŅÜŲØÜŲųÜŲŨŲ&ŨŲ-ŨŲNŨŲUŨŲqŨŲxŨŲ™ŨŲ ŨŲ¸ŨŲŋŨŲåŨŲėŨŲŪŲŪŲ?ŪŲFŪŲlŪŲƒŪŲŠŪŲÅŪŲáŪŲčŪŲßŲ ßŲ$ßŲ+ßŲCßŲJßŲißŲˆßŲ ßŲ§ßŲŋßŲÆßŲŪßŲåßŲũßŲāŲāŲ#āŲ;āŲBāŲZāŲaāŲyāŲ€āŲ™āŲ āŲŊāŲÄāŲáāŲčāŲ áŲáŲ3áŲ:áŲRáŲYáŲváŲ}áŲ–áŲáŲļáŲŊáŲÚáŲááŲ˙áŲâŲ$âŲ+âŲIâŲPâŲdâŲkâŲˆâŲâŲŦâŲŗâŲĐâŲ×âŲôâŲûâŲãŲãŲ<ãŲCãŲ`ãŲgãŲ„ãŲ‹ãŲ¨ãŲ¯ãŲĮãŲĐãŲŲãŲâãŲëãŲõãŲäŲ äŲäŲ#äŲ.äŲ9äŲDäŲYäŲsäŲyäؐäŲ–äŲ­äŲŗäŲĘäŲĐäŲėäŲōäŲ åŲåŲ+åŲ1åŲRåŲXåŲ~åŲŠåŲ•åŲĸåŲ­åŲ¸åŲÃåŲÎåŲŲåŲīåŲ æŲ*æŲ1æŲHæŲOæŲfæŲmæŲ„æŲ‹æŲĸæŲŠæŲÅæŲĖæŲãæŲęæŲįŲ įŲ.įŲ5įŲ[įŲ`įŲjįŲvįŲ‚įŲŽįŲŖįŲÕįŲÚįŲßįŲëįŲöįŲčŲčŲčŲ&čŲ2čŲ>čŲJčŲVčŲbčŲÄčŲËčŲččŲīčŲéŲéŲ&éŲ-éŲEéŲLéŲkéŲƒéŲŠéŲĸéŲŠéŲÁéŲČéŲāéŲįéŲ˙éŲęŲęŲ%ęŲ>ęŲEęŲgęŲnęؐęŲ—ęŲ°ęŲˇęŲŲęŲāęŲūęŲëŲëŲ ëŲ=ëŲDëŲaëŲhëŲ…ëŲŒëŲŠëŲ°ëŲÍëŲÔëŲņëŲøëŲėŲėŲ9ėŲ@ėŲ]ėŲvėŲėŲˆėŲ—ėŲŖėŲ¯ėŲģėŲĐėŲ íŲíŲ#íŲ.íŲ9íŲCíŲOíŲZíŲeíŲpíŲzíŲ†íŲ‘íŲœíŲ§íŲąíŲŊíŲČíŲĶíŲŪíŲčíŲôíŲ˙íŲ îŲîŲîŲ+îŲ6îŲAîŲLîŲVîŲbîŲmîŲxîŲƒîŲîŲ™îŲ¤îŲ¯îŲēîŲÄîŲĐîŲÛîŲæîŲņîŲīŲ īŲīŲīŲ2īŲ9īŲUīŲ\īŲ‡īŲ“īŲžīŲŠīŲŗīŲŋīŲĘīŲÕīŲßīŲëīŲöīŲđŲ đŲđŲđŲ1đŲ;đŲGđŲPđŲZđŲmđŲtđؐđŲ—đŲÂđŲÎđŲŲđŲíđŲøđŲ ņŲņŲ+ņŲ2ņŲGņŲ]ņŲnņŲzņŲ…ņŲ‹ņŲžņŲ§ņŲ˛ņŲČņŲŲņŲåņŲđņŲöņŲ ōŲōŲōŲ)ōŲ4ōŲ?ōŲIōŲUōŲdōŲmōŲ†ōŲ•ōŲžōŲˇōŲÆōŲĪōŲčōŲ÷ōŲķŲķŲ(ķŲ1ķŲJķŲPķŲ]ķŲfķŲķŲŽķŲ—ķŲ°ķŲģķŲŅķŲâķŲîķŲųķŲ˙ķŲôŲôŲ&ôŲ<ôŲMôŲYôŲdôŲjôŲ}ôŲ†ôŲ‘ôŲ§ôŲ¸ôŲÄôŲĪôŲÕôŲčôŲņôŲüôŲõŲ#õŲ/õŲ:õŲ@õŲSõŲ\õŲgõŲ}õŲŽõŲšõŲĨõŲĢõŲžõŲĮõŲŌõŲčõŲųõŲöŲöŲöŲ)öŲ2öŲ=öŲSöŲdöŲpöŲ{ö؁öŲ”öŲöŲ¨öŲžöŲĪöŲÛöŲæöŲėöŲ˙öŲ÷Ų÷Ų)÷Ų:÷ŲF÷ŲQ÷ŲW÷Ųj÷Ųs÷Ų~÷ŲŠ÷Ų•÷Ų ÷ŲĢ÷Ųļ÷ŲĀ÷ŲĖ÷Ų×÷Ųâ÷Ųí÷Ų÷÷ŲøŲøŲ%øŲ6øŲLøŲ]øŲsøŲ„øŲšøŲĢøŲÁøŲŌøŲčøŲųøŲųŲųŲųŲ)ųŲ2ųŲ=ųŲSųŲdųŲzųŲ‹ųŲĄųŲ˛ųŲČųŲŲųŲīųŲúŲ úŲ6úŲ_úŲˆúŲąúŲÚúŲûŲ ûŲ6ûŲ_ûŲˆûŲąûŲÚûŲüŲüŲ'üŲ=üŲNüŲdüŲuüŲzüŲüŲˆüŲŽüŲĻüŲĮüŲÍüŲæüŲíüŲũŲũŲ(ũŲ/ũŲLũŲSũŲpũŲyũŲ‚ũŲˆũŲĄũŲ§ũŲĮũŲáũŲûũŲūŲ%ūŲ9ūŲIūŲ]ūŲ|ūŲ‘ūŲĢūŲģūŲÄūŲĘūŲéūŲųūŲ˙Ų ˙Ų˙Ų/˙Ų8˙ŲA˙ŲU˙Ųe˙Ųn˙Ųw˙Ų‹˙Ų›˙Ų¤˙ŲŊ˙ŲĖ˙ŲÛ˙Ųę˙Ųų˙Ų ŲŲ+Ų:ŲIŲhŲwŲ†Ų–ŲŸŲŽŲĖŲÕŲđŲŲŲ Ų/ŲGŲTŲnŲƒŲ’Ų›Ų¯ŲēŲÎŲŲŲûŲŲŲ%ŲGŲRŲfŲqŲ“ŲžŲ˛ŲŊŲßŲīŲøŲŲŲ0Ų;Ų]ŲhŲ|Ų‡ŲŠŲšŲÂŲÛŲëŲ˙ŲŲ#Ų.ŲBŲMŲoŲ’Ų°ŲĘŲÕŲéŲôŲŲ4ŲNŲYŲmŲxŲšŲ¸ŲŌŲŨŲņŲüŲŲFŲUŲ^Ųw؇ؐ؎دŲĪŲčŲ÷ŲŲŲ.Ų=ŲQŲaŲpŲ€ŲŠŲ“ŲŦŲŧŲËŲÛŲåŲîŲŲ*Ų:ŲIŲYŲcŲlŲ…Ų•Ų¤Ų´ŲžŲĮŲāŲīŲūŲ Ų& Ų6 ŲE ŲU Ų_ Ųh ؁ Ų‘ Ų  Ų° Ųē Ųà ŲÜ Ųė Ųû Ų Ų Ų Ų7 ŲG ŲV Ųf Ųp Ųy Ų’ Ųĸ Ųą ŲÁ ŲË ŲÔ Ųí Ųũ Ų Ų Ų& Ų/ ŲM Ų] Ųl Ų| Ų¨ Ų¸ ŲĮ Ų× Ų Ų5 ŲE ŲT Ųd Ųn Ųw ؐ Ų  Ų¯ Ųŋ ŲÉ ŲŌ Ųë Ųû Ų Ų Ų$ Ų- ŲF ŲV Ųe Ųu Ų Ųˆ ŲĄ Ųŋ ŲŲ Ųä Ųø ŲŲ%Ų5ŲDŲTŲ^ŲgŲ€ŲŲŸŲ¯ŲšŲÂŲÛŲëŲúŲ ŲŲŲ6ŲFŲUŲeŲoŲxŲ‘ŲĄŲ°ŲĀŲĘŲĶŲėŲüŲ ŲŲ%Ų.ŲGŲVŲ_ŲxŲˆŲ‘Ų¸ŲČŲŅŲÚŲøŲŲ9ŲIŲRŲ[ŲoŲ—ŲĻŲ¯ŲČŲØŲáŲŲŲ!Ų*ŲHŲpŲŲˆŲĄŲąŲēŲáŲņŲúŲŲ!Ų1Ų:ŲSŲ{ŲŠŲ“ŲŦŲŧŲÅŲėŲüŲŲŲ,Ų<ŲEŲ^ŲmŲ|Ų‹Ų¤ŲŗŲĮŲÜŲëŲúŲ ŲŲ&Ų5Ų>ŲWŲgŲpŲyŲŲŦŲÔŲãŲėŲŲŲŲEŲTŲhŲxŲ¤ŲÖŲåŲîŲŲŲ ŲGŲWŲ`ŲiŲ‡Ų—Ų ŲšŲČŲŅŲęŲúŲŲ*Ų:ŲCŲ\ŲlŲ˜Ų¨ŲÔŲŲŲŲ7ŲGŲPŲw؇ؙؐ؎ŲĮŲĐŲéŲųŲ%Ų5ŲaŲ“ŲĸŲĢŲÄŲÔŲŨŲŲŲŲ&ŲDŲTŲ]ŲvŲ†Ų˛ŲÂŲîŲ Ų/Ų8ŲQŲaŲjŲ‘ŲĄŲĒŲŗŲŅŲáŲęŲŲŲ?ŲOŲ{Ų­ŲŧŲÅŲŪŲîŲ÷ŲŲ.Ų7Ų@Ų^ŲnŲwؐؠŲĖŲÜŲŲ:ŲIŲRŲkŲ{Ų„ŲĢŲģŲÄŲÍŲëŲûŲ Ų Ų( Ų8 ŲA ŲJ Ų^ Ųn Ųw Ų† Ų Ų° ŲÖ Ųß Ų˙ Ų!Ų!Ų)!Ų2!Ų;!ŲO!ŲV!Ųc!Ųl!Ųu!Ų‰!Ų™!Ųĸ!ŲĢ!Ųŋ!ŲÅ!ŲŌ!ŲÛ!Ųų!Ų "Ų"Ų#"Ų0"Ų9"ŲW"Ų]"Ųj"Ųs"Ų‘"ŲĄ"ŲĒ"ŲÃ"ŲŌ"ŲÛ"Ųô"Ų#Ų&#Ų6#Ų?#Ų]#Ųm#Ųv#Ų#ŲŸ#Ų¨#ŲÁ#ŲĐ#ŲŲ#Ųō#Ųø#Ų$Ų $Ų$Ų%$Ų+$Ų;$ŲA$ŲN$ŲW$Ųu$Ų{$Ų€$Ų†$Ų™$Ų $Ųž$ŲÄ$ŲĶ$ŲŲ$Ųė$Ųō$Ų˙$Ų%Ų%Ų %Ų'%Ų.%Ų5%Ų<%ŲC%ŲJ%ŲQ%ŲX%Ų_%Ųd%Ųo%Ų{%Ų‡%Ų“%ŲŸ%ŲĢ%Ųˇ%ŲÃ%ŲĐ%ŲŨ%Ųę%Ų÷%Ų&Ų&Ų&Ų+&Ų8&ŲE&ŲR&Ų_&Ųl&Ųy&Ų†&Ų“&Ų &Ų­&Ųē&ŲĮ&ŲÔ&Ųá&Ųī&Ųú&Ų'Ų'Ų'Ų)'Ų:'ŲE'ŲQ'Ų]'Ų|'؁'ŲŒ'Ų¨'Ųž'ŲÚ'Ų(Ų(ŲA(Ų\(Ųx(Ų”(ŲĒ(Ųļ(ŲÜ(Ų)Ų")ŲM)Ųh)Ų~)ŲŸ)Ųģ)ŲÖ)Ųö)Ų*Ų;*Ų[*Ųv*Ų‘*Ųˇ*ŲŅ*Ųë*Ų+Ų+Ų9+Ųt+Ų€+ŲŒ+Ų˜+Ų¤+Ų°+Ųŧ+ŲČ+ŲÔ+Ųā+Ųė+Ųų+Ų,Ų.,ŲM,Ųl,Ų—,Ų˛,ŲĶ,Ųî,Ų-Ų.-ŲN-Ųm-Ųƒ-ŲŖ-ŲÃ-Ųã-Ų.Ų.Ų1.Ų7.ŲO.ŲV.Ųn.Ųt.ŲŒ.Ų“.ŲĢ.Ų˛.ŲĪ.Ųņ.Ųü.Ų/Ų/Ų./ŲA/ŲU/Ųm/Ų…/Ų/Ų›/Ų§/ŲÁ/ŲÔ/Ųč/Ųō/Ųū/Ų 0Ų$0Ų<0ŲT0Ųg0Ų{0Ų0Ųž0Ų­0Ųŧ0ŲË0ŲÖ0Ųô0Ų1Ų 1Ų1Ų$1Ų01Ų<1ŲR1Ųm1Ųˆ1ŲŽ1ŲĢ1Ųą1ŲÎ1ŲÔ1Ųö1Ųü1Ų2Ų 2Ų82Ų>2Ų\2Ųb2ŲŠ2Ų–2Ųĸ2ŲŽ2Ųē2ŲÆ2ŲŌ2Ųč2Ų3Ų3Ų$3ŲA3ŲG3Ųd3Ųj3ŲŒ3Ų’3Ų°3Ųļ3ŲÎ3ŲÔ3Ųō3Ųø3Ų 4Ų,4Ų74ŲB4ŲM4ŲX4Ųb4Ųo4Ų}4ŲŠ4Ų—4Ų¤4Ųģ4Ų×4ŲŪ4Ųö4Ųũ4Ų5Ų5Ų45Ų;5ŲX5Ų_5Ųw5Ų~5Ų›5Ųĸ5Ųŋ5ŲÆ5Ųã5Ųę5Ų6Ų6Ų+6Ų26ŲO6ŲV6Ųn6Ųw6؁6ŲŽ6Ųœ6ŲŠ6Ųļ6ŲÃ6ŲÚ6Ųö6Ųũ6Ų7Ų7Ų47Ų;7ŲS7ŲZ7Ųw7Ų~7Ų–7Ų7Ųē7ŲÁ7ŲŪ7Ųå7Ų8Ų 8Ų&8Ų-8ŲJ8ŲQ8Ųn8Ųu8Ų8Ų–8Ų 8ŲĨ8ŲĒ8Ųļ8ŲÁ8ŲĖ8Ų×8Ųâ8Ųė8Ųø8Ų9Ų9Ų9Ų$9Ų.9Ų:9ŲE9ŲP9Ų[9Ųf9Ųp9Ų|9Ųˆ9Ų”9Ų 9ŲŦ9Ų¸9ŲÎ9Ųé9Ų:Ų :Ų':Ų-:ŲJ:ŲP:Ųr:Ųx:Ų–:Ųœ:Ų´:Ųē:ŲØ:ŲŪ:Ų;Ų;Ų;Ų(;Ų.;ŲF;ŲL;Ųe;Ųk;Ų;Ų…;Ų˜;Ųž;Ųą;Ųˇ;ŲË;Ų×;Ųė;Ųö;Ų<Ų<Ų<Ų&<Ų2<Ų><ŲT<Ųo<ŲŠ<ؐ<Ų­<Ųŗ<ŲĐ<ŲÖ<Ųø<Ųū<Ų=Ų"=Ų:=Ų@=Ų^=Ųd=ŲŒ=Ų˜=Ų¤=Ų°=Ųŧ=ŲČ=ŲÔ=Ųę=Ų>Ų >Ų&>ŲC>ŲI>Ųf>Ųl>ŲŽ>Ų”>Ų˛>Ų¸>ŲĐ>ŲÖ>Ųô>Ųú>Ų"?Ų.?Ų9?ŲD?ŲO?ŲZ?Ųe?Ųk?Ųƒ?Ų‰?Ųĸ?Ų¨?Ųŧ?ŲÂ?ŲÕ?ŲÛ?Ųî?Ųô?Ų@Ų@Ų)@Ų5@ŲJ@Ųn@Ųx@Ų…@Ų“@Ų @Ų­@Ųē@ŲŅ@Ųí@Ųô@Ų AŲAŲ+AŲ2AŲJAŲQAŲnAŲuAŲAŲ”AŲąAŲ¸AŲÕAŲÜAŲųAŲBŲBŲ$BŲABŲHBŲeBŲlBŲ„BŲBŲ—BŲ¤BŲ˛BŲŋBŲĖBŲŲBŲæBŲũBŲCŲ CŲ8CŲ?CŲWCŲ^CŲvCŲ}CŲšCŲĄCŲšCŲĀCŲŨCŲäCŲDŲDŲ%DŲ,DŲIDŲPDŲmDŲtDŲ‘DŲ˜DŲ°DŲšDŲÃDŲĪDŲÛDŲįDŲķDŲ˙DŲ EŲ!EŲRŲIRŲTRŲ_RŲjRŲuRŲ{RŲ“RŲ™RŲ˛RŲ¸RŲĖRŲŌRŲåRŲëRŲūRŲSŲSŲ$SŲ9SŲ]SŲgSŲtSŲ‚SŲSŲœSŲŠSŲļSŲÍSŲéSŲđSŲTŲTŲ'TŲ.TŲFTŲMTŲjTŲqTŲ‰TؐTŲ­TŲ´TŲŅTŲØTŲõTŲüTŲUŲ UŲ=UŲDUŲaUŲhUŲ€UŲ‰UŲ“UŲ˜UŲ¤UŲ°UŲŧUŲČUŲÔUŲāUŲöUŲVŲ,VŲ2VŲOVŲUVŲrVŲxVŲšVŲ VŲžVŲÄVŲÜVŲâVŲWŲWŲ.WŲ:WŲEWŲPWŲ[WŲfWŲqWŲwWŲWŲ•WŲŽWŲ´WŲČWŲÎWŲáWŲįWŲúWŲXŲXŲ XŲ5XŲYXŲcXŲpXŲ~XŲ‹XŲ˜XŲĨXŲŧXŲØXŲßXŲ÷XŲūXŲYŲYŲ5YŲ_Ųb_Ųl_Ųy_Ų‡_Ų”_ŲĄ_ŲŽ_ŲÅ_Ųá_Ųč_Ų`Ų`Ų`Ų&`Ų>`ŲE`Ųb`Ųi`؁`Ųˆ`ŲĨ`ŲŦ`ŲÉ`ŲĐ`Ųí`Ųô`ŲaŲaŲ5aŲeŲEeŲ]eŲdeŲ|eŲƒeŲ eŲ§eŲŋeŲÆeŲãeŲęeŲfŲfŲ+fŲ2fŲOfŲVfŲsfŲzfŲ—fŲžfŲļfŲŋfŲÉfŲÖfŲäfŲņfŲūfŲ gŲ"gŲ>gŲEgŲ]gŲdgŲ|gŲƒgŲ›gŲĸgŲŋgŲÆgŲŪgŲågŲhŲ hŲ&hŲ-hŲJhŲQhŲnhŲuhŲ’hŲ™hŲļhŲŊhŲÕhŲŪhŲčhŲôhŲiŲ iŲiŲ$iŲ0iŲFiŲaiŲ|iŲ‚iŲŸiŲĨiŲÂiŲČiŲęiŲđiŲjŲjŲ,jŲ2jŲPjŲVjŲ~jŲŠjŲ•jŲ jŲĢjŲļjŲÁjŲĮjŲßjŲåjŲūjŲkŲkŲkŲ1kŲ7kŲJkŲPkŲdkŲpkŲ…kŲŠkŲŗkŲĀkŲÎkŲÛkŲčkŲõkŲlŲlŲ5lŲxŲ\xŲbxŲzxŲ€xŲžxŲ¤xŲĖxŲØxŲãxŲîxŲųxŲyŲyŲyŲ-yŲ3yŲLyŲRyŲfyŲlyŲyŲ…yŲ˜yŲžyŲ˛yŲžyŲĶyŲ÷yŲzŲzŲzŲ)zŲ6zŲCzŲPzŲgzŲƒzŲŠzŲĸzŲŠzŲÁzŲČzŲāzŲįzŲ{Ų {Ų#{Ų*{ŲG{ŲN{Ųk{Ųr{Ų{Ų–{Ųŗ{Ųē{Ų×{ŲŪ{Ųû{Ų|Ų|Ų#|Ų-|Ų:|ŲH|ŲU|Ųb|Ųo|Ų†|Ųĸ|ŲŠ|ŲÁ|ŲČ|Ųā|Ųį|Ų˙|Ų}Ų#}Ų*}ŲB}ŲI}Ųf}Ųm}ŲŠ}Ų‘}ŲŽ}Ųĩ}ŲŌ}ŲŲ}Ųö}Ųũ}Ų~Ų!~Ų9~ŲB~Ųe~Ųq~Ų}~Ų‰~Ų•~ŲĄ~Ų­~ŲÃ~ŲŪ~Ųų~Ų˙~ŲŲ"Ų?ŲEŲgŲmŲ‹Ų‘ŲŠŲ¯ŲÍŲĶŲûŲ€Ų€Ų€Ų(€Ų3€Ų>€ŲD€Ų\€Ųb€Ų{€Ų€Ų•€Ų›€ŲŽ€Ų´€ŲĮ€Ų̀Ųá€Ųí€ŲŲ&Ų0Ų=ŲKŲXŲeŲrŲ‰ŲĨŲŦŲāŲˁŲãŲęŲ‚Ų ‚Ų&‚Ų-‚ŲE‚ŲL‚Ųi‚Ųp‚Ų‚Ų”‚Ųą‚Ų¸‚ŲՂŲ܂Ųų‚ŲƒŲƒŲ$ƒŲ<ƒŲEƒŲOƒŲYƒŲeƒŲqƒŲ}ƒŲ‰ƒŲ•ƒŲĄƒŲˇƒŲԃŲíƒŲķƒŲ„Ų„Ų3„Ų9„Ų[„Ųa„Ų„Ų…„Ų„ŲŖ„ŲÁ„ŲĮ„Ųī„Ųû„Ų…Ų…Ų…Ų/…Ų5…ŲN…ŲT…Ųh…Ųn…؁…Ų‡…Ųš…Ų …Ų´…Ųõ…Ų†Ų †Ų'†ŲA†Ų[†Ųk†Ųt†Ųˆ†Ų˜†ŲĄ†Ųĩ†ŲņŲΆŲâ†Ųō†Ųû†Ų‡Ų‡Ų(‡Ų<‡ŲL‡ŲU‡Ųi‡Ųy‡Ų‚‡Ų–‡ŲχŲ¯‡ŲÇŲ͇Ų܇Ųđ‡ŲˆŲ ˆŲˆŲ-ˆŲ6ˆŲJˆŲZˆŲcˆŲwˆŲ‡ˆŲˆŲ¤ˆŲŗˆŲˆŲԈŲۈŲīˆŲ˙ˆŲ‰Ų‰Ų,‰Ų5‰ŲI‰ŲY‰Ųb‰Ųv‰Ų…‰Ų”‰Ų¤‰Ų­‰ŲÁ‰Ų҉ŲډŲî‰Ųū‰ŲŠŲŠŲ+ŠŲ4ŠŲHŠŲXŠŲaŠŲuŠŲ…ŠŲŽŠŲĸŠŲ˛ŠŲģŠŲΊŲߊŲčŠŲņŠŲ‹Ų‹Ų‹Ų2‹Ų>‹ŲG‹Ų\‹Ųw‹Ų—‹Ųˇ‹ŲŒŲŒŲŒŲ*ŒŲ6ŒŲBŒŲNŒŲZŒŲfŒŲrŒŲ~ŒŲŠŒŲ–ŒŲĸŒŲތŲēŒŲƌŲԌŲیŲęŒŲöŒŲŲŲŲ&Ų3ŲMŲ^ŲiŲtŲŲŠŲ•Ų ŲĢŲļŲÁŲĖŲ׍ŲōŲũŲŽŲŽŲ ŽŲ+ŽŲ6ŽŲAŽŲLŽŲWŽŲbŽŲnŽŲzŽŲ‡ŽŲĸŽŲŽŽŲēŽŲĮŽŲŌŽŲŪŽŲņŽŲŲ Ų&Ų2Ų?ŲJŲVŲbŲnŲzŲ†ŲšŲĨŲ°ŲĖŲۏŲäŲīŲûŲŲSŲM‘ŲX‘Ųn‘Ųˆ‘Ųĸ‘Ųˇ‘Ų)’Ų2’ŲL’ŲZ’Ųc’Ų}’Ų‹’Ų”’ŲŽ’Ųš’ŲĮ’ŲВŲŨ’Ųč’Ųķ’Ų“Ų"“Ų.“Ų:“ŲF“Ų•“Ų “ŲŦ“Ų¸“ŲēŲГŲܓŲč“Ųô“Ų”Ų ”Ų”Ų$”Ų0”Ų<”ŲH”ŲT”Ų`”Ųl”Ų~”ŲŠ”Ų–”ŲĄ”ŲŽ”Ųģ”ŲȔŲՔŲâ”Ųī”Ųü”Ų •Ų•Ų,•Ų=•ŲN•Ų_•Ųp•Ų‡•Ų“•Ų¤•Ų­•Ųē•ŲȕŲՕŲâ•Ųû•Ų–Ų–Ų"–Ų –Ų§–Ųŋ–ŲƖŲߖŲæ–Ų˙–Ų—Ų—Ų&—Ų?—ŲF—Ų^—Ųe—Ų€—Ų—Ų“—Ų™—ŲŸ—ŲĻ—Ųŗ—ŲĀ—Ųæ—Ų˜Ų ˜Ų!˜Ų<˜ŲC˜Ųb˜Ųo˜Ų}˜Ų‹˜Ų™˜Ų ˜Ų´˜Ųģ˜ŲΘŲ֘Ųë˜Ų™Ų™Ų,™ŲH™Ųc™Ųj™Ų„™Ų‘™Ųž™Ųē™Ų֙Ųņ™Ųø™ŲšŲšŲ+šŲ6šŲQšŲ_šŲzšŲˆšŲ•šŲĸšŲžšŲښŲášŲųšŲ›Ų›Ų7›Ų>›ŲV›Ų]›Ųv›Ų‘›Ų˜›ŲŊ›ŲʛŲЛŲå›Ųë›ŲœŲ œŲ œŲ&œŲ@œŲFœŲ`œŲfœŲ€œŲ†œŲ œŲϜŲģœŲÁœŲ֜ŲܜŲņœŲŲŲŲ1ŲLŲgŲmŲ‘ŲĒŲ°ŲȝŲΝŲįŲíŲøŲūŲ"žŲ(žŲBžŲHžŲfžŲlžŲ„žŲŠžŲĸžŲ¨žŲĀžŲƞŲŪžŲäžŲŸŲŸŲŸŲ%ŸŲ=ŸŲCŸŲ[ŸŲaŸŲyŸŲŸŲ—ŸŲŸŲĩŸŲģŸŲ͟Ų؟ŲėŸŲōŸŲ  Ų% Ų1 ŲV Ųq Ų‹ Ų‘ ŲĢ Ų¸ ŲÆ ŲĶ Ųā Ųí Ųú ŲĄŲĄŲ&ĄŲ2ĄŲ?ĄŲYĄŲuĄŲ|ĄŲ‘ĄŲ˜ĄŲĒĄŲ´ĄŲģĄŲĶĄŲÚĄŲōĄŲųĄŲĸŲĸŲ0ĸŲ7ĸŲOĸŲVĸŲsĸŲzĸŲĸŲ”ĸŲŦĸŲģĸŲČĸŲÖĸŲãĸŲđĸŲũĸŲ ŖŲŖŲ$ŖŲ6ŖŲBŖŲOŖŲiŖŲ…ŖŲŒŖŲĄŖŲ¨ŖŲēŖŲÄŖŲËŖŲãŖŲęŖŲ¤Ų ¤Ų!¤Ų(¤Ų@¤ŲG¤Ų_¤Ųf¤Ųƒ¤ŲФŲ¤Ų¤¤Ųŧ¤ŲˤŲؤŲå¤Ųō¤Ų ĨŲĨŲ=ĨŲDĨŲhĨŲvĨŲˆĨŲ•ĨŲąĨŲ¸ĨŲŅĨŲØĨŲõĨŲĻŲĻŲ,ĻŲCĻŲTĻŲaĻŲgĻŲoĻŲ|ĻŲ‚ĻŲˆĻؐĻŲ›ĻŲ§ĻŲŽĻŲÖĻŲíĻŲ§Ų§Ų5§Ų;§Ų\§Ųb§Ųˆ§ŲާŲ°§Ųˇ§Ų§ŲɧŲŲ§Ųķ§Ųų§Ų¨Ų¨Ų&¨Ų2¨Ų?¨ŲL¨Ųv¨Ų‘¨Ų—¨Ų¯¨Ųĩ¨ŲͨŲ͍Ųë¨Ųņ¨Ų ŠŲ$ŠŲ+ŠŲEŠŲSŠŲZŠŲlŠŲzŠŲŠŲ”ŠŲĻŠŲąŠŲŌŠŲŲŠŲųŠŲĒŲ!ĒŲ(ĒŲDĒŲ[ĒŲvĒŲ}ĒŲ’ĒŲŸĒŲĢĒŲ¸ĒŲĪĒŲëĒŲōĒŲĢŲ!ĢŲ(ĢŲBĢŲOĢŲ\ĢŲxĢŲ”ĢŲ›ĢŲŗĢŲēĢŲŲĢŲņĢŲøĢŲŦŲŦŲ0ŦŲKŦŲRŦŲwŦŲƒŦؐŦŲŦŲšŦŲÕŦŲÜŦŲôŦŲûŦŲ­Ų2­Ų9­ŲQ­ŲX­Ųq­ŲŒ­Ų“­Ų¸­ŲĘ­ŲÜ­Ųį­ŲŽŲŽŲ/ŽŲFŽŲaŽŲhŽŲ~ŽŲ–ŽŲŖŽŲ°ŽŲĮŽŲčŽŲīŽŲ¯Ų¯Ų,¯Ų3¯ŲK¯ŲR¯Ųl¯Ųs¯Ų•¯Ųœ¯ŲïŲƝŲė¯Ųķ¯Ų°Ų°Ų>°ŲE°Ųg°Ųn°Ų°Ų—°Ųš°Ų°Ųâ°Ųé°Ų ąŲąŲ4ąŲ;ąŲbąŲiąŲŠąŲĨąŲŦąŲÁąŲÎąŲÛąŲčąŲõąŲ˛Ų˛Ų9˛ŲU˛Ų\˛Ųu˛Ų˛Ųœ˛ŲĮ˛Ųã˛Ųę˛ŲŗŲŗŲ%ŗŲ?ŗŲKŗŲWŗŲcŗŲoŗŲ”ŗŲ¯ŗŲÉŗŲĪŗŲäŗŲúŗŲ´Ų´Ų´Ų*´Ų6´ŲB´ŲN´ŲZ´Ųf´Ųr´Ų~´ŲŠ´Ų–´Ųĸ´ŲŽ´Ųē´ŲÆ´ŲŌ´Ųč´ŲĩŲ ĩŲĩŲ&ĩŲBĩŲIĩŲfĩŲ€ĩŲ›ĩŲŠĩŲ°ĩŲģĩŲÂĩŲĖĩŲĶĩŲėĩŲķĩŲ ļŲļŲ*ļŲ7ļŲDļŲQļŲ^ļŲvļŲļŲĢļŲŧļŲĪļŲŨļŲãļŲëļŲöļŲˇŲˇŲˇŲ*ˇŲ7ˇŲDˇŲQˇŲ^ˇŲkˇŲxˇŲ…ˇŲ’ˇŲŸˇŲŦˇŲšˇŲÆˇŲ͎ŲāˇŲíˇŲúˇŲ¸Ų¸Ų!¸Ų.¸Ų<¸ŲK¸ŲY¸Ųu¸Ų–¸Ų¸Ųĩ¸Ųŧ¸ŲÕ¸ŲܸŲô¸Ųû¸ŲšŲšŲ3šŲ:šŲRšŲYšŲqšŲxšŲšŲ—šŲ¯šŲļšŲΚŲÕšŲíšŲôšŲ ēŲēŲ+ēŲ2ēŲJēŲQēŲiēŲpēŲˆēŲēŲ§ēŲŽēŲÆēŲÍēŲåēŲėēŲ ģŲģŲ-ģŲ4ģŲLģŲSģŲkģŲrģŲŠģŲ‘ģŲĒģŲąģŲÉģŲĐģŲíģŲôģŲ ŧŲ'ŧŲJŧŲQŧŲiŧŲpŧŲ‰ŧؐŧŲŠŧŲ°ŧŲÄŧŲËŧŲãŧŲęŧŲūŧŲŊŲŊŲ ŊŲ9ŊŲ@ŊŲ]ŊŲdŊŲxŊŲŊŲ—ŊŲžŊŲļŊŲŊŊŲÕŊŲÜŊŲôŊŲûŊŲžŲžŲ2žŲ9žŲMžŲTžŲlžŲsžŲ‹žŲ’žŲĻžŲ­žŲÁžŲČžŲÜžŲãžŲ÷žŲūžŲŋŲŋŲ5ŋŲ<ŋŲPŋŲWŋŲkŋŲrŋŲŠŋŲ‘ŋŲŠŋŲÄŋŲËŋŲāŋŲíŋŲúŋŲĀŲ ĀŲ-ĀŲIĀŲPĀŲhĀŲƒĀŲŠĀŲŖĀŲžĀŲÕĀŲņĀŲ ÁŲÁŲ,ÁŲ3ÁŲRÁŲrÁŲ‹ÁŲ’ÁŲ›ÁŲĸÁŲšÁŲÔÁŲÛÁŲÂŲÂŲÂŲ;ÂŲWÂŲ^ÂŲvÂŲ}ÂŲœÂŲ´ÂŲģÂŲĶÂŲÚÂŲķÂŲÃŲÃŲ:ÃŲGÃŲTÃŲpÃŲŒÃŲ“ÃŲĢÃŲ˛ÃŲŅÃŲéÃŲđÃŲÄŲÄŲ(ÄŲCÄŲJÄŲkÄŲ|ÄŲ‡ÄŲ ÄŲ´ÄŲÕÄŲÛÄŲÅŲ(ÅŲ5ÅŲCÅŲ[ÅŲhÅŲ„ÅŲ‹ÅŲŖÅŲžÅŲÅÅŲŪÅŲųÅŲÆŲ,ÆŲHÆŲOÆŲgÆŲnÆŲÆŲ­ÆŲÆÆŲÍÆŲÖÆŲŨÆŲôÆŲĮŲĮŲ@ĮŲMĮŲZĮŲvĮŲ’ĮŲ™ĮŲąĮŲ¸ĮŲ×ĮŲīĮŲöĮŲČŲČŲ.ČŲIČŲPČŲqČŲƒČŲ–ČŲĄČŲēČŲĪČŲĶČŲđČŲÉŲÉŲ;ÉŲBÉŲ_ÉŲfÉŲƒÉŲ‘ÉŲĒÉŲˇÉŲÄÉŲŅÉŲōÉŲĘŲĘŲ<ĘŲCĘŲWĘŲ^ĘŲyĘŲ”ĘŲ›ĘŲ°ĘŲˇĘŲËĘŲėĘŲ ËŲËŲ2ËŲ9ËŲ[ËŲbËŲ‰ËؐËŲˇËŲžËŲāËŲįËŲ ĖŲĖŲ2ĖŲ9ĖŲ[ĖŲbĖŲƒĖŲŠĖŲĸĖŲŠĖŲŧĖŲÃĖŲßĖŲúĖŲÍŲÍŲHÍŲUÍŲ[ÍŲaÍŲgÍŲnÍŲ{ÍŲˆÍŲ¤ÍŲĀÍŲÛÍŲâÍŲüÍŲ ÎŲÎŲ2ÎŲ9ÎŲVÎŲpÎŲ•ÎŲĄÎŲ§ÎŲ­ÎŲŗÎŲšÎŲĀÎŲÍÎŲÚÎŲņÎŲ ĪŲĪŲ-ĪŲ4ĪŲLĪŲnĪŲ{ĪŲˆĪŲ–ĪŲąĪŲžĪŲËĪŲįĪŲĐŲ ĐŲ"ĐŲ)ĐŲ<ĐŲCĐŲVĐŲqĐŲxĐŲ’ĐŲžĐŲ¤ĐŲĒĐŲąĐŲ¸ĐŲÁĐŲĪĐŲÖĐŲķĐŲŅŲŅŲ%ŅŲ2ŅŲGŅŲTŅŲ[ŅŲoŅŲxŅŲ‚ŅŲŅŲœŅŲŖŅŲŦŅŲŗŅŲÆŅŲÍŅŲÜŅŲîŅŲüŅŲŌŲ ŌŲ.ŌŲ5ŌŲSŌŲeŌŲpŌŲ‰ŌŲžŌŲĸŌŲĀŌŲßŌŲöŌŲĶŲĶŲ$ĶŲEĶŲKĶŲlĶŲrĶŲŠĶŲ¤ĶŲĒĶŲÅĶŲÜĶŲõĶŲ ÔŲÔŲJÔŲkÔŲƒÔؐÔŲÔŲļÔŲáÔŲčÔŲÕŲÕŲÕŲ5ÕŲMÕŲZÕŲsÕŲ”ÕŲ›ÕŲģÕŲÂÕŲÜÕŲũÕŲÖŲ.ÖŲOÖŲVÖŲwÖŲ˜ÖŲ°ÖŲŊÖŲĘÖŲ×ÖŲäÖŲņÖŲūÖŲ ×Ų$×ŲE×Ųg×Ųn×Ų×Ų–×Ųģ×ŲÂ×ŲÚ×Ųá×Ųų×ŲØŲØŲØŲ8ØŲ?ØŲWØŲ^ØŲwØŲ~ØŲ–ØŲØŲļØŲŊØŲÕØŲÜØŲõØŲüØŲŲŲŲŲ5ŲŲ<ŲŲXŲŲpŲŲ}ŲŲšŲŲĄŲŲÂŲŲŨŲŲäŲŲũŲŲÚŲ1ÚŲ>ÚŲ[ÚŲbÚŲƒÚŲžÚŲĨÚŲžÚŲÚÚŲėÚŲ÷ÚŲÛŲ/ÛŲ6ÛŲaÛŲhÛŲ„ÛŲŸÛŲĻÛŲĀÛŲĖÛŲŲÛŲņÛŲūÛŲ ÜŲÜŲ/ÜŲ6ÜŲaÜŲhÜŲ„ÜŲŸÜŲĻÜŲŋÜŲāÜŲøÜŲŨŲ"ŨŲ)ŨŲOŨŲVŨŲiŨŲpŨŲƒŨŲŠŨŲĸŨŲŠŨŲŧŨŲÃŨŲÖŨŲŨŨŲđŨŲ÷ŨŲŪŲŪŲ0ŪŲ7ŪŲPŪŲWŪŲkŪŲrŪŲ†ŪŲŪŲ ŪŲģŪŲÂŪŲÛŪŲßŲßŲ2ßŲJßŲQßŲgßŲnßؐßŲ—ßŲžßŲÅßŲįßŲîßŲāŲāŲ9āŲ@āŲbāŲiāŲ‹āŲ’āŲ´āŲģāŲŨāŲäāŲáŲ áŲ/áŲ6áŲ]áŲdáŲ…áŲŒáŲœáŲęáŲâŲâŲ7âŲ\âŲsâŲâŲšâŲĻâŲÁâŲ×âŲíâŲãŲãŲ:ãŲBãŲXãŲnãŲ„ãŲ¤ãŲŋãŲßãŲōãŲūãŲäŲ4äŲJäŲ`äŲväŲ‚äŲ—äŲ´äŲšäŲáäŲõäŲ åŲ!åŲ;åŲOåŲdåŲ{åŲ”åŲ¤åŲ­åŲÂåŲÎåŲ×åŲëåŲûåŲæŲæŲ(æŲ1æŲFæŲ]æŲtæŲ€æŲ‰æŲžæŲĒæŲŗæŲĮæŲĶæŲßæŲüæŲįŲ,įŲBįŲ\įŲ{įŲ“įŲĢįŲÉįŲāįŲøįŲčŲ.čŲEčŲXčŲdčŲmč؁čŲŽčŲŦčŲ¸čŲØčŲîčŲúčŲéŲ(éŲ4éŲ=éŲFéŲNéŲZéŲgéŲéŲ–éŲąéŲžéŲæéŲķéŲęŲ0ęŲ\ęŲyęŲ‘ęŲ­ęŲŋęŲÕęŲīęŲëŲëŲ#ëŲ6ëŲ=ëŲRëŲYëŲiëŲpëŲuëŲ|ëŲ•ëŲĢëŲ˛ëŲĪëŲÖëŲķëŲúëŲėŲėŲ&ėŲ,ėŲ?ėŲFėŲOėŲVėŲjėŲqėŲzė؁ėŲ”ėŲ›ėŲ¤ėŲĢėŲēėŲÁėŲäėŲ˙ėŲíŲ(íŲ/íŲGíŲNíŲlíŲ‚íŲ‰íŲĄíŲ¨íŲĀíŲĮíŲßíŲæíŲîŲ îŲîŲ$îŲKîŲRîŲeîŲlîŲ…îŲĄîŲ°îŲšîŲÍîŲčîŲķîŲ īŲīŲ2īŲ9īŲRīŲYīŲmīŲtīŲ–īŲīŲĀīŲËīŲåīŲņīŲ đŲđŲ*đŲ1đŲEđŲLđŲnđŲtđŲŽđŲ”đŲŽđŲĩđŲČđŲĪđŲįđŲîđŲņŲņŲņŲ*ņŲAņŲSņŲZņŲsņŲzņŲ’ņŲ™ņŲąņŲ¸ņŲäņŲëņŲōŲōŲ@ōŲGōŲiōŲpōŲ’ōŲ™ōŲĻōŲÄōŲËōŲØōŲöōŲũōŲ"ķŲ)ķŲ6ķŲJķŲYķŲbķŲvķŲ|ķŲ…ķŲŽķŲ§ķŲ­ķŲÁķŲĐķŲŲķŲíķŲķķŲüķŲôŲôŲôŲ3ôŲ9ôŲBôŲKôŲ_ôŲeôŲzôŲ”ôŲŽôŲĮôŲÎôŲæôŲėôŲüôŲõŲ%õŲ+õŲEõŲLõŲYõŲbõŲqõŲxõŲšõŲĻõŲ­õŲĪõŲÖõŲøõŲ˙õŲ!öŲ(öŲJöŲQöŲsöŲzöŲ°öŲÆöŲÜöŲãöŲėöŲ÷Ų÷Ų÷Ų$÷Ų+÷Ų8÷ŲA÷ŲQ÷Ųl÷Ųs÷Ų|÷Ųƒ÷ŲŒ÷Ų ÷Ų§÷Ų°÷ŲÄ÷ŲË÷Ųß÷Ųæ÷Ų÷÷Ų øŲøŲ'øŲ@øŲGøŲXøŲmøŲƒøŲ–øŲ¨øŲŊøŲÄøŲØøŲōøŲųøŲųŲųŲ$ųŲ.ųŲ4ųŲ<ųŲAųŲGųŲQųŲ[ųŲaųŲkųŲqųŲ{ų؁ųŲˆųŲ’ųŲ™ųŲŖųŲ­ųŲŗųŲŊųŲÃųŲÍųŲĶųŲŨųŲãųŲíųŲķųŲũųŲúŲ úŲúŲúŲ#úŲ-úŲ3úŲ=úŲCúŲMúŲSúŲ]úŲcúŲmúŲsúŲ}úŲƒúŲ’úŲ˜úŲĸúŲŠúŲŗúŲÁúŲĐúŲßúŲđúŲûúŲûŲ ûŲûŲûŲ"ûŲ.ûŲ;ûŲHûŲUûŲbûŲoûŲ|ûŲŠûŲ™ûŲĻûŲŗûŲžûŲÃûŲĪûŲÛûŲčûŲüŲ üŲ"üŲ=üŲXüŲ^üŲ{ü؁üŲžüŲ¤üŲÁüŲĮüŲäüŲęüŲũŲ ũŲ%ũŲ+ũŲDũŲkũŲ’ũŲšũŲāũŲūŲ.ūŲUūŲ{ūŲ•ūŲŧūŲãūŲ ˙Ų1˙ŲX˙Ų˙ŲĻ˙ŲÍ˙Ųô˙ŲŲBŲiؐ؎ŲŪŲŲ,ŲSŲzŲĄŲČŲīŲŲ=ŲdŲ‹Ų˛ŲŲŲŲ'ŲNŲuŲœŲÃŲęŲŲ8Ų_Ų†Ų­ŲÔŲûŲ"ŲIŲpŲ—ŲžŲæŲōŲūŲŲŲ<ŲBŲ\ŲhŲtŲŲ•Ų´ŲŋŲÅŲßŲėŲųŲŲ ŲŲŲ%Ų1Ų=ŲIŲUŲŲ…ŲŲŖŲģŲÁŲŲŲßŲ÷ŲũŲŲŲ3Ų9ŲQŲWŲoŲuŲŲ“ŲĢŲÄŲŪŲũŲ Ų Ų+ Ų1 ŲJ ŲP Ųm Ųs Ų‹ ŲĨ ŲĢ ŲÅ ŲŌ Ųß Ųė Ų Ų$ Ų+ ŲC ŲJ Ųb Ųi ؁ Ųˆ Ų  Ų§ ŲÄ ŲË Ųã Ųę Ų Ų ŲD Ųl Ų“ Ųš Ųž ŲÅ Ųé Ųđ Ų Ų= Ųd Ųk ؐ Ų¸ Ųā Ų Ų0 ŲX Ų€ Ų¨ ŲĐ Ųø ŲŲ&ŲKŲsŲŲŽŲˇŲÄŲŌŲŨŲęŲ ŲŲŲ!Ų(Ų/Ų:ŲAŲLŲSŲ^ŲeŲ{Ų‚Ų—Ų¯ŲļŲĶŲÚŲöŲũŲŲŲ1ŲDŲKŲ_ŲfŲ…Ų Ų§ŲŧŲÉŲÖŲãŲ Ų#Ų*ŲBŲIŲcŲ€ŲšŲĩŲÂŲĪŲÜŲéŲöŲŲŲ6Ų=ŲUŲ\ŲtŲ{Ų“ŲšŲ˛ŲšŲŅŲØŲđŲ÷ŲŲŲ3Ų:ŲWŲ^ŲuŲ|Ų“ŲšŲ˛ŲšŲÖŲŨŲõŲüŲŲŲ2Ų9ŲPŲWŲjŲqŲ„ŲŸŲĻŲģŲĖŲŲŲæŲķŲŲ ŲŲ'Ų4ŲAŲNŲ[ŲwŲ~Ų–ŲŲĩŲŧŲÔŲÛŲķŲúŲŲŲ1Ų8ŲPŲ„Ų‹ŲĒŲŊŲÄŲĶŲîŲõŲŲ!Ų+Ų6ŲXŲ_Ų|ŲƒŲ Ų§ŲÃŲĐŲŨŲęŲ÷ŲŲ*Ų1ŲJŲQŲnŲuŲŲ”ŲŦŲŗŲĘŲŅŲéŲđŲŲŲ&Ų-Ų@Ų[ŲbŲxŲŠŲ•ŲŽŲÃŲĮŲäŲŲ Ų/Ų6Ų]ŲdŲ†ŲŲ¯ŲļŲØŲßŲŲŲ*Ų1ŲSŲZŲ|ŲƒŲĨŲŦŲÎŲÕŲüŲŲ'Ų8ŲEŲKŲYŲjŲvŲ‚ŲžŲŋŲáŲčŲ ŲŲ#Ų=ŲCŲYŲjŲuŲŽŲŖŲ§ŲÄŲåŲëŲ ŲŲ'Ų4ŲAŲNŲ[ŲhŲuŲ‚ŲŲœŲĮŲčŲīŲŲŲ&Ų-ŲEŲLŲdŲkŲƒŲŠŲĸŲŠŲÁŲČŲāŲįŲ˙Ų Ų Ų% Ų= ŲD Ų\ Ųc Ų{ Ų‚ ŲŸ ŲĻ Ųž ŲÅ ŲÜ Ųã Ųú Ų!Ų!Ų$!ŲŲ>Ų!>Ų'>Ų->Ų4>Ų@>ŲL>Ų_>Ųk>Ųq>Ųw>Ų}>Ųƒ>Ų‰>Ų>Ų•>Ų>ŲĨ>Ų°>Ųŧ>ŲČ>Ųî>Ųô>Ųú>Ų?Ų?Ų ?Ų?Ų?Ų?Ų&?Ų-?Ų4?Ų;?ŲB?ŲI?ŲQ?ŲY?Ųa?Ųi?Ųs?Ų~?Ų‹?Ų˜?ŲĨ?Ų˛?Ųŋ?ŲĖ?ŲŲ?Ųæ?Ų}GŲ,IŲ>IŲKIŲhIŲ‚IŲœIŲļIŲÕIŲīIŲJŲZJŲyJŲ“JŲ­JŲĖJŲæJŲđJŲKŲKŲ;KŲEKŲPKŲcKŲKŲ™KŲˇKŲÃKŲŅKŲęKŲöKŲLŲCLŲMLŲrLŲ|LŲ§LŲąLŲģLŲåLŲīLŲųLŲMŲ'MŲ1MŲPMŲZMŲgMŲ‰MŲŖMŲŊMŲĮMŲÔMŲNŲCNŲMNŲlNŲvNŲœNŲ¨NŲÎNŲčNŲOŲ=OŲJOŲ˜OŲģOŲNPŲXPŲoPŲyPŲŖPŲ­PŲâPŲCQŲMQŲ\QŲĀQŲĘQŲ×QŲæQŲRŲRŲRŲ;RŲERŲTRŲxRŲ°RŲēRŲāRŲúRŲ"SŲ4SŲASŲ‡SŲ‘SŲŗSŲãSŲũSŲTŲATŲKTŲeTŲoTؐTŲšTŲšTŲØTŲōTŲ UŲ&UŲ@UŲZUŲtUŲŽUŲ˜UŲĩUŲŋUŲáUŲëUŲ VŲ)VŲHVŲgVŲ†VŲ VŲŋVŲÉVŲæVŲđVŲWŲWŲ;WŲUWŲtWŲ~WŲWŲ§WŲÄWŲÎWŲëWŲ XŲ$XŲ>XŲXXŲrXŲ|XŲžXŲēXŲėXŲųXŲYŲYŲ.YŲpYŲ†YŲŸYŲŽYŲŊYŲĘYŲåYŲ ZŲZŲ(ZŲ@ZŲ]ZŲwZŲZŲšZŲˇZŲéZŲöZŲ[Ų[Ų?[ŲY[Ųs[Ų[Ų§[ŲÆ[Ųâ[Ųü[Ų\Ų8\ŲB\Ųe\Ųo\ؐ\Ų¯\ŲÉ\Ųã\Ųũ\Ų]Ų)]ŲC]ŲM]Ųj]Ų„]ŲĒ]ŲÄ]Ųę]Ųô]Ų^ŲB^Ų‚^ŲĀ^Ųø^Ų_Ų(_Ų2_ŲL_Ųf_Ų€_ŲĻ_Ų°_ŲÖ_Ų`Ų `Ų,`ŲK`Ųe`Ų`Ųž`Ų¸`ŲŌ`Ųė`ŲaŲaŲaŲ"aŲ/aŲQaŲ}aŲŠaŲËaŲęaŲ bŲ#bŲ=bŲWbŲqbŲ‹bŲĨbŲŋbŲŲbŲcŲ cŲcŲcŲ*cŲXcŲ}cŲƒcŲ´cŲécŲ dŲ0dŲ9dŲBdŲLdŲYdŲ{dŲšdŲÁdŲādŲ˙dŲ+eŲEeŲ_eŲyeŲĨeŲÄeŲđeŲfŲ7fŲcfŲmfŲfŲ§fŲ×fŲáfŲgŲgŲKgŲUgŲ…gŲgŲŋgŲÉgŲųgŲhŲ3hŲ=hŲmhŲwhŲ§hŲąhŲáhŲëhŲøhŲ(iŲ2iŲ?iŲoiŲŽiŲÃiŲūiŲ3jŲ_jŲ‹jŲ´jŲĐjŲÚjŲöjŲ kŲ*kŲDkŲckŲ‚kŲŒkŲĻkŲ°kŲĘkŲßkŲėkŲlŲ/lŲNlŲmlŲwlŲ‘lŲ›lŲĩlŲælŲmŲ$mŲ>mŲXmŲsmŲ|mŲ†mŲ“mŲēmŲčmŲnŲBnŲdnŲŽnŲ˜nŲ˛nŲßnŲoŲAoŲyoŲ“oŲēoŲÔoŲęoŲpŲ pŲJpŲdpŲ‹pŲŧpŲÛpŲ qŲ&qŲ@qŲXqŲeqŲœqŲĸqŲ¯qŲŧqŲŌqŲßqŲrŲ#rŲ0rŲ=rŲSrŲ`rŲ—rŲrŲĒrŲˇrŲÔrŲsŲ6sŲNsŲ[sŲ•sŲŸsŲŦsŲšsŲÖsŲtŲ1tŲPtŲotŲ‰tŲŠtŲ˛tŲŧtŲÉtŲøtŲuŲHuŲguŲ†uŲ˛uŲĖuŲ÷uŲvŲvŲ$vŲVvŲpvŲ—vŲ vŲĒvŲˇvŲÜvŲåvŲúvŲwŲ;wŲmwŲ‘wŲ°wŲēwŲÔwŲŪwŲũwŲxŲ6xŲUxŲ_xŲ†xŲĒxŲÛxŲõxŲyŲ.yŲHyŲcyŲlyŲvyŲƒyŲģyŲÄyŲŲyŲčyŲzŲKzŲezŲzŲžzŲ¸zŲĶzŲÜzŲæzŲķzŲ+{Ų4{ŲI{ŲX{ŲŠ{Ų¤{Ųē{ŲĶ{Ųđ{Ų |Ų/|ŲI|Ų_|Ųn|ŲŠ|ŲĻ|Ųä|Ųí|Ų÷|Ų}Ų.}ŲD}Ų‡}Ų­}ŲĖ}Ųũ}Ų~ŲV~Ų|~Ų›~ŲĖ~Ųũ~ŲŲ1ŲGŲŠŲ°ŲĪŲåŲ(€ŲN€Ųm€Ųž€ŲŊ€Ųč€ŲŲ)Ų?Ų‚Ų¨ŲĮŲøŲ)‚ŲH‚Ųc‚Ų‡‚Ų‚Ųā‚ŲƒŲ ƒŲAƒŲKƒŲlƒŲ‚ƒŲŃŲëƒŲ„Ų?„Ųe„Ų„„ŲڄŲO…Ųz…Ų•…Ųģ…ŲЅŲŲ…Ųã…Ų†Ų†Ų.†Ų8†Ų‰†Ųĩ†ŲԆŲ‡Ų‡Ų_‡Ų~‡Ų¯‡Ų͇Ųū‡ŲˆŲ%ˆŲDˆŲNˆŲkˆŲuˆŲˆŲ™ˆŲŗˆŲԈŲčˆŲ+‰ŲQ‰Ųg‰ŲljŲЉŲډŲū‰ŲŠŲ"ŠŲ,ŠŲVŠŲsŠŲ}ŠŲ—ŠŲæŠŲ‹Ų"‹ŲF‹ŲP‹Ųj‹Ų—‹ŲŖ‹ŲĀ‹Ų܋Ųæ‹ŲŒŲŒŲ7ŒŲiŒŲsŒŲЌŲÌŲŨŒŲįŒŲŲŲ>ŲHŲŲōŲ΍Ų؍ŲŽŲŽŲPŽŲjŽŲ…ŽŲŽŽŲ˜ŽŲĨŽŲĖŽŲķŽŲũŽŲŲCŲnŲ‹Ų•Ų´ŲžŲŨŲįŲŲ Ų*Ų6ŲMŲ`ŲlŲ’ŲœŲļŲŲâŲüŲ‘ŲO‘Ų\‘Ųk‘Ųx‘Ų ‘Ųē‘ŲŲ‘Ų ’Ų’Ų)’Ų6’Ų^’Ųx’Ų‚’Ųœ’ŲĻ’ŲŒŲ“Ų.“Ų8“ŲZ“Ųc“Ųm“Ųz“Ų “ŲǓش“ŲГŲō“Ų”Ų"”Ų<”Ų‹”Ų•”Ų¯”Ųš”ŲĶ”Ųō”Ųü”Ų•Ų•Ų2•Ų>•Ųd•Ųn•Ųˆ•Ų’•ŲŦ•Ų˕ŲՕŲá•Ųø•Ų –Ų–Ų=–ŲŒ–ŲۖŲå–Ų˙–Ų —Ų#—ŲB—ŲL—ŲX—Ųo—Ų‚—ŲŽ—Ų´—ŲĶ—Ųí—Ų˜Ų˜Ų˜Ų(˜Ų\˜Ųe˜Ųo˜Ų|˜ŲϘŲõ˜Ų™Ų^™Ųh™Ų‚™ŲŒ™ŲĻ™ŲřŲĪ™ŲۙŲō™ŲšŲšŲ7šŲAšŲ[šŲešŲšŲžšŲ¨šŲ´šŲ˚ŲۚŲęšŲ›Ų/›ŲI›Ųd›Ųm›Ųw›Ų„›Ų¸›ŲÁ›Ų˛Ų؛ŲœŲœŲ&œŲCœŲLœŲVœŲcœŲŠœŲŦœŲԜŲܜŲöœŲEŲeŲnŲxŲ…Ų§ŲåŲņŲžŲ#žŲažŲkžŲ…žŲžŲŠžŲȞŲŌžŲŪžŲõžŲŸŲŸŲ:ŸŲYŸŲ¨ŸŲ) ŲT Ų— Ųą ŲË Ųę Ų ĄŲ#ĄŲƒĄŲšĄŲÃĄŲŨĄŲ÷ĄŲĸŲĸŲ%ĸŲ?ĸŲYĸŲsĸŲ’ĸŲąĸŲŖŲGŖŲQŖŲ–ŖŲ­ŖŲˇŖŲÃŖŲÚŖŲäŖŲđŖŲ ¤Ų¤Ų(¤ŲN¤Ųh¤Ųr¤ŲŒ¤Ų–¤Ų¸¤ŲŌ¤Ųė¤ŲĨŲ%ĨŲDĨŲ¤ĨŲÚĨŲäĨŲ)ĻŲ@ĻŲJĻŲVĻŲmĻŲwĻŲƒĻŲœĻŲ¯ĻŲģĻŲáĻŲûĻŲ§Ų§Ų)§ŲK§Ų`§Ųi§Ų~§Ųœ§Ų´§ŲЧŲ0¨Ųf¨Ųp¨Ųĩ¨ŲˍŲÖ¨Ųâ¨Ųû¨ŲŠŲŠŲ@ŠŲJŠŲdŠŲnŠŲ‹ŠŲ¯ŠŲÚŠŲĒŲ9ĒŲZĒŲoĒŲxĒŲ‚ĒŲĒŲąĒŲēĒŲÄĒŲĐĒŲÜĒŲęĒŲĢŲ ĢŲĢŲ+ĢŲ8ĢŲ[ĢŲhĢŲĢŲ–ĢŲ ĢŲ­ĢŲĶĢŲŨĢŲįĢŲūĢŲŦŲ$ŦŲ-ŦŲ7ŦŲCŦŲOŦŲkŦŲ…ŦŲŸŦŲžŦŲŨŦŲ=­Ųs­Ų}­Ų—­Ųą­Ųģ­ŲÕ­Ųī­Ų ŽŲ(ŽŲGŽŲ§ŽŲŨŽŲįŽŲ¯Ų¯Ų%¯Ų;¯ŲS¯Ųo¯Ų‰¯ŲŖ¯Ų¯Ųá¯Ųû¯Ų°Ųu°Ų̰Ųĩ°ŲΰŲé°Ųķ°ŲąŲąŲ&ąŲHąŲRąŲhąŲ€ąŲ˜ąŲ´ąŲ˛ŲO˛ŲY˛Ųx˛Ų’˛Ųœ˛Ų˛˛ŲβŲ.ŗŲgŗŲŗŲ›ŗŲĩŗŲĪŗŲéŗŲ´Ų"´ŲA´ŲĄ´Ų×´Ųá´Ųû´ŲĩŲĩŲ9ĩŲCĩŲ]ĩŲgĩŲˆĩŲ’ĩŲ­ĩŲÉĩŲãĩŲũĩŲļŲ;ļŲ›ļŲŅļŲÛļŲõļŲˇŲˇŲ3ˇŲMˇŲgˇŲˇŲœˇŲĨˇŲ¯ˇŲŧˇŲãˇŲíˇŲ¸Ų¸Ų7¸ŲQ¸Ųk¸ŲЏŲ¤¸Ųž¸Ų׸Ųá¸ŲšŲšŲ9šŲCšŲOšŲkšŲušŲŒšŲ–šŲĸšŲĮšŲÔšŲėšŲöšŲēŲ%ēŲ=ēŲWēŲaēŲnēŲŸēŲŠēŲļēŲæēŲđēŲúēŲģŲ3ģŲdģŲ~ģŲ“ģŲœģŲĻģŲŗģŲĀģŲčģŲōģŲ ŧŲŧŲŧŲ'ŧŲ4ŧŲAŧŲPŧŲiŧŲsŧŲ‹ŧŲ•ŧŲžŧŲ¨ŧŲĩŧŲÂŧŲßŧŲŊŲ:ŊŲ‹ŊŲßŊŲ žŲ)žŲ3žŲKžŲUžŲ^žŲhžŲužŲ‚žŲ‘žŲĒžŲ´žŲĖžŲÖžŲßžŲéžŲöžŲŋŲ ŋŲ\ŋŲ{ŋŲ•ŋŲéŋŲĀŲ1ĀŲ;ĀŲGĀŲcĀŲmĀŲ…ĀŲĀŲ˜ĀŲĸĀŲ¯ĀŲŧĀŲËĀŲäĀŲîĀŲÁŲÁŲÁŲ#ÁŲ0ÁŲ=ÁŲZÁŲ–ÁŲĩÁŲĪÁŲ#ÂŲFÂŲPÂŲhÂŲrÂŲ{ÂŲ…ÂŲ’ÂŲŸÂŲŽÂŲĮÂŲŅÂŲéÂŲķÂŲüÂŲÃŲÃŲ ÃŲ=ÃŲyÃŲ˜ÃŲ˛ÃŲÄŲ)ÄŲ3ÄŲKÄŲUÄŲ^ÄŲhÄŲuÄŲ‚ÄŲ‘ÄŲĒÄŲ´ÄŲĖÄŲÖÄŲßÄŲéÄŲöÄŲÅŲ ÅŲ\ÅŲ{ÅŲ•ÅŲéÅŲ ÆŲ.ÆŲ;ÆŲHÆŲWÆŲpÆŲzÆŲ’ÆŲ¯ÆŲŧÆŲÉÆŲØÆŲņÆŲûÆŲĮŲ0ĮŲ=ĮŲJĮŲgĮ؁ĮŲŠĮŲ˛ĮŲŧĮŲÉĮŲūĮŲ ČŲČŲ5ČŲOČŲYČŲqČŲ{ČŲ“ČŲČŲĻČŲ°ČŲŊČŲĘČŲŲČŲōČŲüČŲÉŲÉŲ'ÉŲ1ÉŲ>ÉŲKÉŲhÉŲ¤ÉŲÃÉŲŨÉŲ1ĘŲ\ĘŲ{ĘŲ…ĘŲĘŲ§ĘŲ°ĘŲēĘŲĮĘŲÔĘŲãĘŲüĘŲËŲËŲ(ËŲ1ËŲ;ËŲHËŲUËŲrËŲ‘ËŲåËŲ*ĖŲIĖŲŽĖŲĨĖŲ¯ĖŲģĖŲÔĖŲįĖŲķĖŲÍŲ3ÍŲ=ÍŲZÍŲdÍŲƒÍŲÍŲˇÍŲŅÍŲæÍŲđÍŲÎŲÎŲÎŲ%ÎŲ2ÎŲ?ÎŲNÎŲgÎŲqÎŲ‰ÎŲ“ÎŲœÎŲĻÎŲŗÎŲĀÎŲŨÎŲĪŲ8ĪŲRĪŲĻĪŲÉĪŲĶĪŲëĪŲõĪŲūĪŲĐŲĐŲ"ĐŲ1ĐŲJĐŲTĐŲlĐŲvĐŲĐŲ‰ĐŲ–ĐŲŖĐŲĀĐŲüĐŲŅŲ5ŅŲ‰ŅŲŦŅŲĩŅŲŋŅŲĖŅŲŲŅŲŌŲ ŌŲ#ŌŲ-ŌŲ6ŌŲ@ŌŲMŌŲZŌŲiŌŲ‚ŌŲŒŌŲ¤ŌŲŽŌŲˇŌŲÁŌŲÎŌŲÛŌŲøŌŲĶŲkĶŲ“ĶŲĪĶŲ*ÔŲ?ÔŲHÔŲRÔŲ^ÔŲjÔŲxÔؐÔŲ™ÔŲŦÔŲšÔŲÆÔŲčÔŲņÔŲúÔŲÕŲÕŲÕŲ+ÕŲMÕŲgÕŲ‚ÕŲ‹ÕŲ•ÕŲĸÕŲÉÕŲãÕŲũÕŲ)ÖŲ‰ÖŲŖÖŲĘÖŲéÖŲ×Ų×Ų7×ŲA×؁×ŲØŲØŲ:ØŲCØŲLØŲVØŲcØŲŠØŲÍØŲŲŲ0ŲŲqŲŲ¤ŲŲęŲŲÚŲÚŲiÚŲ…ÚŲŽÚŲ˜ÚŲ¤ÚŲ°ÚŲžÚŲÖÚŲßÚŲōÚŲ˙ÚŲ ÛŲ.ÛŲ7ÛŲ@ÛŲJÛŲWÛŲdÛŲqÛŲ“ÛŲ­ÛŲČÛŲŅÛŲÛÛŲčÛŲÜŲ)ÜŲFÜŲPÜŲuÜŲ‘ÜŲ›ÜŲÖÜŲōÜŲûÜŲŨŲŨŲŨŲ+ŨŲCŨŲLŨŲ_ŨŲlŨŲyŨŲ›ŨŲ¤ŨŲ­ŨŲˇŨŲÄŨŲŅŨŲŪŨŲûŨŲŪŲŪŲŪŲ(ŪŲEŪŲ_ŪŲ“ŪŲ¯ŪŲ¸ŪŲÂŪŲÎŪŲÚŪŲčŪŲßŲ ßŲßŲ)ßŲ6ßŲXßŲaßŲjßŲtß؁ßŲŽßŲ›ßŲ¸ßŲÁßŲËßŲØßŲåßŲāŲāŲ7āŲ@āŲJāŲWāŲ~āŲ˜āŲŧāŲįāŲ%áŲDáŲNáŲZáŲváŲ€áŲ—áŲĄáŲ­áŲŌáŲßáŲ÷áŲâŲ âŲ,âŲUâŲ_âŲlâŲâŲ§âŲ´âŲäâŲîâŲøâŲãŲDãŲeãŲnãŲxãŲ ãŲŠãŲŗãŲæãŲäŲ%äŲCäŲ]äŲéäŲ[åŲŒåŲÆåŲ5æŲfæŲ–æŲ æŲŋæŲææŲįŲ)įŲ`įŲjįŲŽįŲ˜įŲĪįŲ˙įŲčŲčŲčŲ(čŲgčŲŖčŲõčŲ>éŲ€éŲŌéŲęŲ`ęŲĸęŲôęŲFëŲ˜ëŲęëŲ<ėŲbėŲŽėŲíŲRíŲ‚íŲŒíŲ™íŲÂíŲÎíŲëíŲõíŲ&îŲCîŲ`îŲzîŲŸîŲŠîŲÃîŲÍîŲįîŲņîŲ īŲīŲ)īŲKīŲUīŲoīŲyīŲ›īŲĨīŲŋīŲÉīŲãīŲíīŲ đŲđŲ6đŲPđŲjđŲ„đŲŠđŲÃđŲāđŲúđŲņŲ.ņŲHņŲRņŲtņŲ“ņŲ­ņŲĖņŲÖņŲøņŲōŲ$ōŲ.ōŲHōŲTōŲ‘ōŲģōŲãōŲũōŲķŲ ķŲ=ķŲGķŲ†ķŲØķŲ*ôŲ|ôŲÎôŲ õŲrõŲÄõŲųõŲöŲ-öŲCöŲ`öŲvöŲ“öŲ­öŲĮöŲîöŲ#÷Ųx÷ŲÂ÷Ųü÷ŲUøŲ§øŲųøŲ*ųŲiųŲĢųŲũųŲOúŲ‘úŲãúŲ5ûŲ‡ûŲŲûŲüŲPüŲjüŲtüŲ‘üŲ§üŲ´üŲÁüŲûüŲVũŲ…ũŲĢũŲÚũŲôũŲūŲūŲ8ūŲBūŲOūŲˆūŲ’ūŲÂūŲũūŲ˙Ų"˙Ų,˙Ų8˙ŲD˙ŲR˙Ųj˙Ųs˙Ų†˙Ų“˙Ų ˙ŲÂ˙ŲĖ˙ŲØ˙Ųķ˙Ųũ˙ŲŲŲEŲOŲYŲfŲŠŲÆŲŅŲŲŲ1ŲKŲeŲŲ™ŲŽŲËŲØŲåŲŲŲ*ŲBŲKŲUŲaŲmŲ„ŲŲ—ŲŖŲ¯ŲŊŲÕŲŪŲņŲūŲ Ų-Ų6Ų?ŲIŲVŲcŲpŲŲ–Ų Ų­ŲēŲ×ŲėŲõŲ˙Ų Ų3Ų=Ų]ŲgŲ‡Ų‘ŲŽŲ¸ŲÕŲßŲüŲŲ(ŲBŲ\ŲvŲ€ŲĸŲÉŲãŲŲ'Ų?Ų]ŲzŲ†Ų¤ŲÖŲāŲīŲ Ų'Ų1ŲNŲpŲŠŲÆŲĐŲÜŲčŲôŲŲ'ŲDŲNŲpŲzŲ™ŲŖŲ°ŲÍŲ×ŲäŲ Ų7 ŲA Ų^ Ųx Ų’ Ųœ ŲŠ Ųļ Ųà Ųā Ųę Ų÷ Ų Ų& ŲG ŲQ Ųn Ųˆ Ųĸ Ųŧ ŲŌ Ųß Ųø Ų Ų" ŲA Ų• Ų¯ ŲČ Ųë Ų, Ų6 ŲX Ųą ŲĐ Ų Ų Ų? ŲY Ųs ŲŸ Ųø Ų/Ų9ŲSŲrŲŒŲ§Ų°ŲēŲĮŲéŲōŲüŲŲŲ"Ų:ŲCŲVŲcŲpŲ´ŲëŲŲŲ1ŲKŲrŲ§ŲÁŲčŲņŲûŲŲ/ŲIŲSŲ~ŲÂŲŲŲ´ŲĀŲãŲũŲŲ'Ų3Ų@ŲMŲZŲxŲ„Ų‘ŲžŲŅŲëŲõŲŲ,ŲAŲJŲTŲaŲ‹Ų—Ų¤ŲąŲžŲËŲØŲåŲŲŲ1Ų;Ų[ŲeŲpŲŲāŲŲ;ŲlŲ˜ŲÂŲđŲ!Ų.Ų;ŲJŲcŲ€ŲŲšŲŠŲÂŲßŲėŲųŲ$Ų1Ų>ŲVŲ_ŲiŲuŲŲ˜ŲĄŲĢŲˇŲÃŲŅŲéŲōŲŲŲŲAŲJŲSŲ]ŲjŲwŲ„ŲĄŲĒŲ´ŲÁŲÎŲëŲŲ Ų)Ų3Ų@ŲgŲ†Ų“Ų Ų¯ŲČŲåŲōŲ˙ŲŲ'ŲDŲQŲ^Ų‰Ų–ŲŖŲģŲÄŲÎŲÚŲæŲũŲŲŲŲ(Ų6ŲNŲWŲjŲwŲ„ŲĻŲ¯Ų¸ŲÂŲĪŲÜŲéŲŲŲŲ&Ų3ŲPŲjŲ…ŲŽŲ˜ŲĨŲĖŲëŲøŲŲŲ-ŲJŲWŲdŲsŲŒŲŠŲļŲÃŲîŲûŲŲ Ų)Ų3Ų?ŲKŲbŲkŲuŲŲŲ›ŲŗŲŧŲĪŲÜŲéŲ Ų Ų Ų' Ų4 ŲA ŲN Ųk Ųt Ų~ Ų‹ Ų˜ Ų° Ųš Ųà ŲĐ Ų÷ Ų!Ų#!Ų0!Ų?!ŲX!Ųu!Ų‚!Ų!Ųž!Ųˇ!ŲÔ!Ųá!Ųî!Ų"Ų&"Ų3"ŲK"ŲT"Ų^"Ųj"Ųv"Ų"Ų–"Ų "ŲŦ"Ų¸"ŲÆ"ŲŪ"Ųį"Ųú"Ų#Ų#Ų6#Ų?#ŲH#ŲR#Ų_#Ųl#Ųy#Ų–#ŲŸ#ŲŠ#Ųļ#ŲÃ#Ųā#Ųú#Ų$Ų$Ų"$Ų/$ŲV$Ų`$؁$Ų‹$Ų˛$Ųģ$ŲÄ$ŲÎ$ŲÛ$Ų%Ų.%Ų;%ŲH%ŲW%Ųp%Ų%Ųš%Ų§%Ųļ%ŲĪ%Ųė%Ųų%Ų&Ų1&Ų>&ŲK&Ųc&Ųl&Ųv&Ų‚&ŲŽ&ŲĨ&ŲŽ&Ų¸&ŲÄ&ŲĐ&ŲŪ&Ųö&Ų˙&Ų'Ų'Ų,'ŲN'ŲW'Ų`'Ųj'Ųw'Ų„'Ų‘'ŲŽ'Ųˇ'ŲÁ'ŲÎ'ŲÛ'Ųķ'Ųü'Ų(Ų(Ų:(ŲO(ŲX(Ųb(Ųo(Ų–(Ų°(ŲÕ(Ųķ(Ų)Ų()Ų7)ŲS)Ų€)Ų¤)Ųą)Ųå)Ųō)Ų=*Ųq*Ų*Ų˜*Ų¤*ŲĀ*ŲÜ*Ųā* +Ų+1+ E+ÕK+ `+ t+Ų|+Õ‚+ —+Ģ+ŲŊ+Ņ+Ųã+÷+Ų ,Ų ,:,ŲI,ŲM,z,Ų‰,Ų,¯,Ã,ŲÕ,é,Ų --ŲF- Z-Ųz-"Ž-ŲŽ-$Â-Ųâ-&ö-Ų.(*.ŲJ.*^.Ų~.,’.Ų˛..Æ.Ųæ.0ú.Ų/2./ŲW/4k/Ų‹/6Ÿ/Ųą/Ųĩ/8×/ë/Ųũ/0Ų*0Ų<0P0Ųa000Õ•0Ŗ0Õ­0ž0ÕÔ0Ųæ0ú0Ų 1+191Õ?1M1ÕW1h1Õ~1ؐ1¤1Ųĩ1Õ1ã1Õé1÷1Õ 2Ų222ŲC2c2q2Õw2…2Õ“2Ų—2¸2å2;ų2Ų3=-3ŲM3?a3؁3A•3ŲĀ3ŲĪ3ŲĶ3õ3 4Ų4Õ4Ų!4Õ64Ų:4C\4Ų`4E‚4Ų†4G¨4ŲŦ4IÎ4ŲŌ4Kô4Ųø4M5M.5Ų25OO5Oh5Ųl5Q‰5Qĸ5ŲĻ5SÃ5SÜ5Ųā5Uũ5U6Ų6W76WP6ŲT6Yq6YŠ6ŲŽ6[Ģ6[í6Ų÷6Ų7Ų 7+7F7ÕP7m7Õw7ˆ7Õ•7™7×°7´7×Į7Ë7×ã7Õé7×ķ7÷7×8Õ88×58Õ;8O8j888ÕŖ8ą8Í8Õ×8ķ8Õų8 99Ų999C9R9f9Ų…99Ų”9_ą9_Æ9ŲĘ9aë9a˙9Õ:a :a:Ų:E:[:i:Õs:w:ׄ:ÕŽ:Õœ:Ų :Æ:Ü:ę:Õô:ø:×;Õ;Õ;Ų!;G;];k;Õu;y;׆;Ր;Õž;Ųĸ;Č;Ū;ė;Õö;ú;×<Õ<Õ<Ų#<I<_<m<Õw<{<׈<Õ’<Õ <Ų¤<Ę<ā<î<Õø<ü<× =Õ=Õ!=Ų%=K=Y=Õc=Õi=w=Ձ=’=Õœ=ÕĒ=ŲŽ=Ô=â=Õė=Õō=>Õ >>Õ%>Õ3>Ų7>]>k>Õu>Õ{>‰>Õ“>¤>ÕŽ>Õŧ>ŲĀ>æ>ô>Õū>Õ??Õ?-?Õ7?ÕE?ŲI?o?}?Õ‡?Ս?›?ÕĨ?ļ?ÕĀ?ÕÎ?ŲŌ?@@+@Õ5@9@×F@ÕP@Õ^@Ųb@‘@Ÿ@ÕŠ@Õŗ@Õš@Į@ÕŅ@â@Õė@Õú@AÕA-AÕ3AAAÕKA`AÕjA{AÕ‡AĶ”AĨAÕŗAĮAÕŅAÕ×A×áAÕįAõAÕ˙AB×BÕBÕ(BaÕHaLa×YaÕcaga×taՁa…a×–aÕ a¤a׹aÕģaŋa×ĖaÕÕaúaŲbŲ,bKb×`bÕfbŲqbÕ‚bÕˆbŲbĄbײbÕ¸bĮbÜbÕæb÷bÕccÕ#c8cÕBc_cÕgccÕ‰cžcÕŽcŋcÕËcÛcßc×ėcÕücd× dÕd×#dÕ-dHd_dydŽdÕ˜dÕŖdžd×dÛd×ėdÕödÕüd eÕeÕe9eOeÕXejene×eÕ‰ežeÕŠe­e×ēeÕÄeÕĘeŪeöef#fÕ-fÕ3fKfjfŠf›fÕĨfÕĢfŋfĘfŪfŲâf˙fgŲ#gŲEgŲ_gŲcgwgwĸgÕ¨gwˇgwĖgÕÖgwįgÕķgw÷g×hÕhÕhw1hÕ7hwBhwQhwUh×fhÕphwth×…hՐhw”hץhÕĢhÕąhwÉhwÍh×ŪhÕčhÕōhwöh×iÕiw&iÕ1iw5i×BiÕLiÕRiwfiwuiwŠiÕ”iwĢiÕĩiÕÁiwāiwjwjÕjÕ!jw5jw?jwYjŲxjŒjŲĢjĀjÕĘjÛjÕåjÕņjõj×kÕkÕkk×/kÕ9kÕ?kNkRk×ekÕqk~k™kŲ¸kĖkŲëklÕ llÕ%lÕ1l5l×FlÕPlÕZl^l×olÕylÕlŽlĨlÕąlžlÛlŲålŲ÷l mŲm-mÕ7mNmÕXmomÕymÕƒm›mŠmŋmÕÉmÍm×ŲmÕãmįm×ķmÕũmn×nÕnn×0nÕ;n?n×LnÕVnÕ\ntnxn׈nÕ’n–n×§nÕ˛nļn×ÃnÕÍnÕĶnënûnÕooÕ%o6oÕ@oÕFouoŲoŲ‘oĨoŲļoËoÕÕoėoÕöo pÕpÕ!p9pGp]pÕgpkp×wpՁp…pבpÕ›pŸpׯpÕšpŊp×ÎpÕŲpŨp×ępÕôpÕúpqq×&qÕ0q4q×EqÕPqTq×aqÕkqÕqq‰q™qÕŖq¸qÕÃqÔqÕŪqÕäqrrÕr#r×6rÕ@rWrÕarÕkrƒr‘r§rÕąrĩr×ÁrÕËrĪr×ÛrÕårér×úrÕss×sÕ$s(s×5sÕ?sÕEs]snsÕxssÕ˜sŠsÕŗsÕšsŨsņsŲūs× tÕtt×,tÕ6t:t×GtÕQtÕYtit}tŲŽt’t×ĨtÕĢt×ĩtÕģt×ÅtÕĪtätÕętøtÕuu×uÕu,u=uÕJu[uÕju~uŲu“u×ĻuÕŦu×ļuÕŧuׯuÕĐuåuÕëuųuÕvvÕv/v@vÕOvcvŲtvxv׋vÕ‘v×›vÕĄv×ĢvÕĩvĘvÕĐvŪvÕčvųvÕwwÕw,w=wÕLw`wŲqwuw׈wÕŽwטwÕžwרwÕ˛wĮwÕÍwÛwÕåwöwÕüw xxÕ4xŲNxbxŲjxÕtxxx׋xÕ‘x×›xÕĄx×ĢxÕĀxŲÚxîxŲöxÕyy×yÕy×'yÕ-y×7yÕEyŲIyjy—yŲ›yŧyôyŲzŲ"zŲ&zGzKz×\zÕfzzzÕ„z›zÕĨzÕązÅzÕĪzæzÕđzÕüz{Õ{1{Õ;{ÕG{[{Õe{|{Õ†{Õ’{Ļ{Õ°{Į{ÕŅ{ÕŨ{ņ{Õû{|Õ|Õ(|,|×>|‚I|ÕO|^|r|Õ||Õ‚|‘|•|×Ĩ|Õ¯|Õĩ|Ä|Ø|Õâ|Õč|÷|û|× }Õ}Õ}*}.}×>}ÕH}ÕN}]}{}›}Ŧ}Õļ}Õŧ}Ô}ō}~#~Õ-~Õ3~K~i~‰~š~Õ¤~ÕĒ~Â~ā~ÕÕ!9WwˆÕ’Õ˜°ĘęûÕ€Õ € €*€4€N€ŲX€Ųr€Ų|€Ų‹€Ų€°€´€×ŀÕ΀̀×ã€Õí€Õ퀁Õ Õ&59×IÕSÕYh|Õ†ÕŒ›Ÿ×¯ÕšÕŋ΁ԁ×âÕėÕō‚‚ׂՂ4‚Õ?‚C‚×P‚ÕZ‚Õ`‚x‚|‚׌‚Õ–‚Ģ‚Õļ‚ē‚×Į‚ÕŅ‚Õׂī‚ķ‚×ƒÕ ƒ"ƒÕ-ƒ1ƒ×>ƒÕHƒÕNƒfƒjƒ×zƒÕ„ƒ™ƒÕ¤ƒ¨ƒ×ĩƒÕŋƒÕŃŨƒáƒ×ņƒÕûƒ„Õ„„×,„Õ6„Õ<„T„X„×h„Õr„‡„Õ’„–„×Ŗ„Õ­„Õŗ„˄é„ ……Õ$…Õ*…B…`…€…‘…Õ›…ÕĄ…š…ׅ÷…†Õ†Õ†0†N†n††Õ‰†Õ†§†ņå†ö†Õ‡Õ‡‡8‡X‡i‡Õs‡Õy‡އ˜‡§‡Ų̇ȇŌ‡á‡Ųå‡ũ‡Õˆˆ/ˆŲJˆ×PˆŲ[ˆÕeˆ“ˆ´ˆȈŲãˆ×éˆŲôˆÕūˆ,‰T‰Ųf‰z‰Ų‹‰ωÕ°‰͉Õ׉č‰Õî‰û‰ ŠŲŠ+Š9ŠÕCŠGŠ×TŠÕ^ŠÕkŠŲoŠŠŲ‘ŠNJ׸ŠÕŠ؊‚äŠ÷Š‚‹ ‹‹‹)‹×7‹Õ=‹×I‹×Y‹Õc‹z‹]‹Œ‹–‹ ‹Ē‹´‹ž‹ȋՋä‹ô‹ŲŒÕŒ×ŒŲ'ŒÕ-ŒŲ:Œ@ŒŲKŒÕUŒjŒÕtŒÕzŒ‰ŒžŒÕ¨ŒÕތŊŒԌãŒøŒÕūŒ '1AUŲku“§ŲŊĮŅåųŲŽŲŽ/ŽÕ9ŽÕ?ŽJŽTŽ^ŽrŽ‚ŽŲ’Ž×˜ŽŲŖŽÕŠŽŲ´ŽÕžŽŽ×ĶŽÕŨŽōŽÕũŽÕ)Õ6:×KÕUY×jÕu†ÕĄÕĒ´žȏčŲ˙ŲŲ/×=ÕGK×ae×rÕx °žÕȐː×ŨÕįë×øÕ‘‘בՑÕ&‘×6‘:‘×K‘ÕU‘Õ_‘c‘×p‘Õz‘Õ€‘׊‘Õ”‘Ĩ‘Õ¯‘Õš‘ÕÑá‘ķ‘Õũ‘’×’’×3’×=’ÕG’\’Õg’|’Õ‚’’—’Ą’Ģ’ĩ’Á’ߒŲé’Ųú’“Ų“Ų+“×:“ÕD“Y“Õc“Õn“ƒ“Ս“Õ˜“œ“ׯ“Õš“Ŋ“×ʓÕԓÕŪ“û“Ķ” ”×)”-”×L”P”×]”Õg”Õq”Õw”ׁ”Õ‹””ל”Õϔհ”Õļ”×Ā”ÕƔé”Ųķ”Ų•Ų •3•H•ÕR•c•Õo•ޕޕĮ•Õ͕á•į•ņ•û•––4–×>–ŲS–h–Õr–‰–Õ“–ÕŸ–´–Õģ–×Ī–ÕŲ–Ũ–×î–Õø–ü–× —Õ——×*—Õ4—8—×E—ÕQ—U—×f—Õq—u—׆—Õ‘—•—×ĸ—ÕŽ—׸—Õ—Ũ—ô—˜#˜Õ-˜Õ8˜S˜l˜p˜×˜Õ‹˜Õ‘˜Ÿ˜ÕИÕŗ˜Θä˜Õí˜ú˜™.™?™ÕI™ÕO™c™n™‚™’™Ųĸ™Ų˛™ŧ™ŲĮ™ÕŅ™č™]ķ™Õų™ššŲ#š8šÕBšÕHšWš[š×nš]yšÕšŠš”šŖšļš]ÁšÕĮšæšŲõšŲųš›0›K›f›€››Ų“›Ģ›Õĩ›š›×ƛÕĖ›֛é›ũ›ŲœÕ œŲœÕœ&œ0œ?œŲCœhœ|œŲ“œŲ—œ¸œМÕܜđœŲøœÕūœ !Ų)Õ/>ŲBc|ĻŲĒÕȝםŲ۝ü žÕž#žŲ'žHžYžÕ_žožŲsž”žĨžÕĢžģžĪžŲāžņžÕ÷žŸŲ Ÿ,Ÿ=ŸÕCŸSŸgŸŲxŸ‰ŸÕŸŸŸŲŖŸğ՟Õ۟ëŸŲīŸ / Ų3 T s Ųw ˜ œ ×Š Õŗ ˇ ×Ä ÕĘ Ü Õæ û ÕĄ ĄĄ2ĄŲCĄGĄ×TĄÕZĄ×hĄÕrĄ‡ĄÕŽĄ™ĄŠĄŲ­ĄץņĄÕ÷ĄĸÕĸ0ĸÕ:ĸ\ĸŲ`ĸĸĢĸŲÂĸŲÕĸéĸŲŖ&Ŗ4ŖÕ>ŖjŖŒŖŲŖąŖĐŖŲÔŖ~õŖ~ųŖ× ¤Õ¤~(¤Õ3¤~7¤×D¤ÕN¤ÕT¤~l¤~p¤×€¤ÕФ~ޤן¤ÕǤ~ޤ×ģ¤ÕŤÕˤ~ã¤~į¤×ķ¤Õũ¤~Ĩ×ĨÕĨ~!Ĩ×.ĨÕ8ĨÕ>Ĩ~WĨŲ[Ĩ€|Ĩ€€ĨבĨÕ›Ĩ€°ĨÕģĨ€ŋĨ×ĖĨÕÖĨÕÜĨ€ôĨ€øĨ×ĻÕĻ€Ļ×$ĻÕ/Ļ€3Ļ×@ĻÕJĻÕPĻ€iĻŲmĻŽĻ¯ĻĪĻôĻظϧ.§Ų?§^§Ųb§ƒ§”§Õž§¯§Õš§ÕƧÖ§×ܧŲí§ņ§×¨ ¨¨×¨Ų'¨Õ1¨F¨ÕP¨ÕV¨a¨k¨u¨¨•¨Ų™¨ɨŨ¨Ųę¨×đ¨Ųū¨×ŠÕŠŠ×0ŠÕ:ŠÕAŠ×GŠŲRŠÕXŠŲcŠÕiŠ×xŠÕ‚ІŠ× Š×ĻŠŲąŠÕģŠĐŠÕÚŠëŠÕ÷ŠûŠ× ĒÕĒ+ĒÕ6ĒGĒÕQĒbĒÕoĒ„ĒÕŽĒŸĒÕĢǝĒ×ĀĒÕĘĒßĒÕęĒûĒÕĢĢÕĢ)Ģ3Ģ=ĢGĢQĢ[ĢeĢsĢƒĢ—ĢŲ¤ĢŲšĢŲŊĢßĢķĢŲŦŦÕŦ2ŦÕ<ŦÕGŦXŦÕ^ŦlŦÕvŦzŦׇŦÕ‘ŦÕ ŦŲ¤ŦÂŦŲÆŦÖŦæŦŲöŦŲ­­Ų­Õ!­+­;­V­Õ\­f­p­z­„­Ž­Ŗ­ŲŦ­Ųĩ­Ųŋ­ŲĖ­Ųß­Ųõ­Ųū­ŲŽŲŽ;ŽŲKŽŲ[Ž×eŽŲuŽŲ€ŽÕ†ŽŲ‘ŽÕ›ŽŸŽ×°ŽÕēŽÕĀŽ×ĐŽÔŽ×åŽÕīŽÕõޝ¯Õ¯1¯Õ<¯M¯ÕW¯Õ]¯q¯}¯¯×’¯Õœ¯Õĸ¯×˛¯ļ¯×Į¯ÕҝÕÛ¯đ¯Õö¯° °°Õ(°=°ÕH°Y°Õc°Õi°}°…°×“°Õ°Ą°×˛°ÕŊ°Á°×ΰÕذÕŪ°ō°×ąÕ ąąÕ*ą.ą×;ąÕEąÕKącągą×xąÕ‚ą“ąÕąŽąÕģąŋą×ĐąÕÚąīąÕúąūą× ˛Õ˛Õ˛/˛A˛ÕK˛`˛Õk˛|˛Õ†˛ÕŒ˛ ˛˛˛Õŧ˛ҞÕܲí˛Õ÷˛Õũ˛ŗŗ"ŗ1ŗQŗŲaŗŲqŗ×wŗŲ‚ŗÕˆŗŖŗŲÅŗåŗŲõŗŲ´´Ų´Õ$´9´ÕC´ÕM´^´Õh´Õr´‡´Õ´˜´¤´´´Č´Ū´]ë´„ō´ĩĩÕĩ,ĩÕ9ĩŲ=ĩhĩŲlĩ¤ĩŲŽĩŲÄĩŲČĩõĩ ļŲļŲ/ļ?ļŲRļsļ‡ļœļÕĸļ­ļˇļÂļŌļŲÖļķļˇöˇ&ˇFˇŲVˇ`ˇŲvˇŲzˇЎώļˇŲēˇסëˇ¸Õ¸¸Ų¸:¸R¸b¸Õl¸Õv¸‡¸Õ‘¸Õ—¸̏ŋ¸ŲˏÖ¸Ųā¸Õæ¸Ųõ¸Ų ššÕ'šÕ1šBšÕLšÕRšbšršÕ†šššŲĢšÄšŪšüšŲēē5ēTēŲXēyē}ēדē—ē×­ēĮēéēũēŲ ģ×ģŲģÕ!ģ+ģ>ģRģŲZģÕ`ģ×qģÕwģŲ‚ģÕˆģŲ“ģ՝ģ˛ģÕŧģÍģÕŲģîģÕųģũģ×ŧÕŧÕ"ŧ&ŧ×3ŧÕ=ŧÕGŧKŧ×\ŧÕbŧmŧ}ŧ”ŧ]ŸŧÕŠŧŧŧ]ĮŧÕÍŧŲŧãŧíŧŊŲŊŲ*Ŋ:Ŋ×XŊ\Ŋ×lŊÕvŊÕ€ŊœŊēŊËŊÕÕŊÕÛŊđŊöŊž ž×žÕ#ž'ž×8žÕCžGž×TžÕ^žÕdž}ž‘žÕ›ž°žÕģžĖžÕÖžÕÜžņžûžŋ%ŋ9ŋŲFŋ×PŋŲZŋÕdŋxŋÕ~ŋ’ŋŠŋÕ¯ŋĀŋÄŋ×ÔŋÕŪŋÕčŋüŋÕĀĀÕ&Ā7ĀÕAĀÕGĀ[ĀaĀpĀtĀׄĀÕŽĀ’Ā×ŖĀÕŽĀ˛Ā×ŋĀÕÉĀÕĪĀįĀûĀÕÁÕ ÁÁ*ÁÕ4ÁIÁÕTÁeÁÕoÁÕuÁ‰ÁÁŸÁ¯ÁךÁŲÍÁŅÁ×âÁÕčÁķÁ  ÂÕÂ!Â0Â4Â×EÂÕOÂÕYÂ]Â×iÂÕsÂÕy‰ÂמÂÕ¨ÂŦÂ׸ÂÕÂÂÆÂ××ÂÕâÂæÂ×ķÂÕũÂÕÃà Ã×1ÃÕ;Ã?Ã×KÃÕUÃYÃ×jÃÕuÃyÃ׆ÃՐÃՖïÃÄÃÕÎÃŪÃÕčÃũÃÕÄÄÕ#ÄÕ)ÄBÄWÄÕaÄqÄÕ{ĐÄÕ›ÄŦÄÕļÄÕŧÄŅÄÜÄíÄÅŲÅ×ÅŲ"ÅÕ;Å?Å×OÅÕUÅ×eÅiÅ×yÅՃŇÅדÅÕÅĄÅ׎ÅÕģÅŌÅÕØÅéÅũÅÕÆÆÕ(ÆÕ4Æ8Æ×HÆÕRÆÕXÆgÆkÆ×{ÆÕ…ƉÆ×šÆÕĨÆŠÆ×ļÆÕĀÆÕÆÆŪÆâÆ×ōÆÕüÆÕĮĮÕ$Į9ĮÕDĮUĮÕ_ĮÕeĮyĮĮŽĮ’Į×ĸĮÕŦĮ°Į×ÁĮÕĖĮĐĮ×ŨĮÕįĮÕíĮČČÕ#ČÕ-Č>ČÕHČÕNČ^ČrČÕ|Č‘ČÕœČ­ČÕˇČÕŊČÕČķČÉ$ÉÕ.ÉÕ4ÉHÉOÉaÉuÉ؆ɛÉÕĨÉļÉÕĀÉŅÉÕÛÉėÉÕöÉĘÕĘ+ĘÕ5ĘÕ;ĘFĘ[ĘÕlĘÕrĘ}ʁĘ×’ĘÕœĘÕĻĘēĘÕÄĘŲĘÕäĘõĘÕ˙ĘÕËËË.Ë2Ë×CËÕMËQË×bËÕmË~ËÕˆËÕŽËĻËģËÕÅËÚËÕåËöËÕĖÕĖĖ,Ė@ĖŲMĖ×WĖŲkĖ€ĖÕŠĖ›ĖÕĨĖļĖÕĀĖŅĖÕÛĖėĖÕûĖ˙Ė×ÍÕÍÍ×*ÍÕ4Í8Í×IÍÕTÍXÍ×eÍÕoÍÕuÍŽÍŖÍÕ­ÍŊÍÕĮÍÜÍÕįÍøÍÕÎÕÎ!Î6ÎÕ@ÎPÎÕZÎoÎÕz΋ÎÕ•Î՛ΰÎĖÎæÎĪĪÕ!ĪÕ'Ī<ĪFĪPĪZĪdĪo΀ΔĪŲĄĪŲ°Ī×ēĪŲÍĪŅĪ×áĪÕëĪÕņĪ×ĐĐ×ĐÕ ĐÕ*Đ?ĐÕEĐPĐ[ĐmĐÕwĐŒĐÕ—Đ¨ĐÕ˛ĐÕ¸ĐĖĐÔĐ×âĐÕėĐđĐ×ŅÕ ŅŅ×ŅÕ'ŅÕ-ŅEŅIŅ×YŅÕdŅxŅÕ‚ŅÕŒŅÕ’ŅŅĄŅ׹ŅÕģŅÕÅŅáŅ˙ŅŌÕŌÕ Ō4Ō:ŌIŌMŌ×]ŌÕgŌkŌ×|ŌÕ‡Ō‹ŌטŌÕĸŌÕ¨ŌĀŌÄŌ×ÔŌÕŪŌâŌ×ķŌÕūŌĶ×ĶÕĶÕĶ7Ķ;Ķ×KĶÕUĶÕ[ĶbĶtĶÕ~Ķ“ĶÕžĶ¯ĶÕšĶÕÅĶŲĶÕãĶøĶÕÔÔÕÔÕ$Ô<ÔPÔÕZÔoÔÕzÔ‹ÔÕ•ÔÕ›Ô¯ÔĩÔĀÔĪÔŲĶÔđÔŲúÔŲÕŲÕ/Õ9ÕCÕTՁՋÕŲšÕ¯ÕŲŗÕÕÕęÕøÕÕÖÕÖÖ2ÖŲ;ÖŲEÖŲgÖŲƒÖŲ‡Ö¨ÖŦÖ×ÉÖÍÖ×ßÖãÖ×××××Õ×+×/××<×ÕF×ÕL×Z×Õd×Õj×{א×Õ–×Ą×­×ģ×ÕÅ×Ö×á×ķרبØ.Ø>ØŲNØ×TØŲ_ØÕeØŲpØÕvØŲØÕ‡ØŲ’ØÕ˜ØŲŠØŗØŊØĮØŅØרōØŲūØŲ ŲŲ7ŲŲAŲŲVŲfŲŲvŲ×€ŲŲ•Ų™Ų×ĒŲÕ°Ų×ēŲÕĘŲáŲ]ėŲÕōŲÚÚ×ÚÕÚ'Ú?Ú[ÚlÚÕvÚÕ|ڐښڤڎڞÚÂÚ×ĶÚÕŨÚáÚ×ōÚÕüÚÛ×ÛÕÛ Û×-ÛÕ7ÛÕ=ÛQÛ\ÛgÛvÛ†Û•ÛŲ™ÛŠÛ¸ÛČÛŲÜÛņÛÕûÛÜÕ ÜÕ*Ü:ÜÕDÜÕJÜXÜhÜÕrÜÕ|Ü€Ü׌ÜÕ–ÜšÜ×ĻÜÕ°ÜÅÜÕĐÜÔÜ×áÜÕëÜÕņÜŨŨÕ)Ũ?ŨÕIŨÕOŨ]ŨsŨÕ}ŨÕ‡ŨŨÕ§ŨÕ­ŨŊŨĖŨŲĐŨįŨŲķŨŲ ŪŲŪŲ&ŪŲ9ŪIŪŲXŪŲyŪ}Ū׉ŪÕ“Ū՝ŪÕŖŪ×ģŪĪŪÕŲŪÕßŪîŪß]ßÕß ß2ßÕ<ßPßÕZßÕ`ßkߏßĮßËß×ÛßÕåßÕëßúß] ā/āMāŲ`ātāÕ~āŽāÕ˜āŠāÕļāĘāÕÔāäāÕîā˙āÕ ááÕ$á5áÕDáHá×XáÕbáÕlááÕ‡á’á¤áÕŽáÕ¸áŧá×ÉáÕĶáÕŨáņáÕûáÕâââ1âÕ;âÕAâPâTâ×dâÕnâÕtâƒâ—âÕĄâÕĢâĀâÕÆâŅâāâôâÕūâÕããã×'ãÕ1ãÕ;ãPãÕVãaãsãÕ}ãÕ‡ã‹ãטãÕĸãÕŦãĀãÕĘãÕŅãŨãėãđã× ää×äÕ&ä*ä×;äÕEäÕOäSä×däÕjäyä}ä׊äÕ”äÕšä¨äÕ˛äÕ¸äÉäÍä×ŪäÕääīäûäåŲåBåVåÕ`åpåÕzåÕ‚å”åÕžåÕ¨å¸åÃåŌåÖå×õåŲųåæKæŲUæŲdæŲh扉才æ×æÕ§æ‰Ģæ×ŧæÕĮæ‰Ëæ×ØæÕâæÕ迉į‰įÕį‰-įŲ7įŲAįŲxįŲ‚įŲŒįŲ°įŲēįŲÄįŲæįŲõįŲųįčč×6čÕ@čDč×UčÕ[čfčjč×{čÕ…čՏč“č×ĒčÕ°čŋčÃč×ÚčÕāčīčéé×%éÕ/éÕ9é=é×MéÕSé^énéÕxééÕ™éÕĻéģéÕÁéČéŌéØéãéįé×øéÕęÕ ęę×"ęÕ,ęÕ6ę:ę×FęÕPęÕVę×`ęÕięsę}ęŒęœęŲŦęŲŧęŲĖęŲÜę׿ęŲņęÕ ëë× ëÕ*ë.ë×?ëÕJë[ëÕeëvëÕƒë˜ëÕĸëÕ¨ëŊëÁë×ÍëÕ×ëÕŨëîëōë×ėÕ ėÕėė×+ėÕ5ėÕ?ėTėÕZėeėpė×€ėÕ†ė–ėšė×ĢėÕˇė×ČėĖėרėÕâėÕčėųėũė×íÕíÕ"í&í×6íÕ@íÕJí_íÕeípí{í׋íÕ‘íĄíĨí×ļíÕĀíÕÆí××íÛí×įíÕņíÕ÷íî î×îÕ'îÕ-î<î@î×QîÕ]î×nîrî×~îÕˆîÕŽîŸî´îÕžîÕÄîŲîŨî×éîÕķîÕųî īī×īÕ)īÕ3ī7ī×GīÕQīÕ[īpīÕvīīŒīלīÕĸī˛īļī×ĮīÕÍīÜīāī×ņīÕûī˙ī× đÕđđ×&đÕ0đÕ=đ\đvđ—đĸđļđ9ÆđŲŅđÕ×đŲâđÕčđ×ōđŲņ9ņÕ%ņÕ+ņ9<ņ9Lņ9aņÕkņÕqņ9‚ņ9’ņ9–ņ×§ņÕąņÕˇņ×Äņ9Ôņ9éņÕķņÕųņ9 ō9ō9/ōÕ9ōÕ?ō9Pō9`ō9dō×uōÕ{ō9Šō9ŽōןōÕŠō9­ōךōÕÃō9Įō×ÔōÕŪōÕëō9ķÕ ķ9ķÕ$ķ95ķÕ?ķÕHķ9Rķ9oķ9Šķ9ËķÛķŲûķŲ ô×%ôŲ0ôÕ6ôŲAôÕGô×eôiô×zôÕ„ôÕŠô×›ôŸô×ĢôÕĩôÕģôĖôĐô×áôÕëôÕņô×õõ×õÕõÕ&õ*õ×:õÕ@õOõSõ×cõÕmõÕwõŒõÕ–õ§õÕąõÂõÕËõÚõŪõ×îõÕøõüõ× öÕöö×)öÕ3öÕ9öQöaöÕkö€öÕ‹öœöÕĻöÕŦöĮöËö×ÜöÕæöÕėö×ũö÷× ÷Õ÷Õ÷.÷2÷×C÷ÕM÷ÕS÷×d÷h÷×t÷Õ~÷Õ„÷•÷™÷×Ē÷Õ´÷Õē÷É÷Í÷×Ū÷Õę÷×û÷˙÷× øÕøÕø,ø0ø×AøÕGøVøZø×køÕuøyø×ŠøÕ•ø™ø×ĻøÕ°øÕļøÎøãøÕíøũøÕųųÕ"ųÕ/ųDųÕNųcųÕnųųÕ‰ųՏųŖų­ųˇųÂų×āųäų×õųÕ˙ųú×úÕúú×*úÕ4úÕAúEú×VúÕ`úÕfú×wú{úׇúÕ‘úÕ—ú¨úŦú×ŊúÕĮúÕÍú×Ūúâú×îúÕøúÕûû×ûÕû+û/û×?ûÕIûÕSûhûÕrûƒûՍûžûÕ§ûļûēû×ĘûÕÔûØû×éûÕôûøû×üÕüÕü-üGügüxüÕ‚üÕˆüŖü§ü׸üÕÂüÕČü×ŲüŨü×éüÕķüÕųü ũũ×ũÕ)ũÕ/ũ×@ũDũ×PũÕZũÕ`ũqũuũ׆ũՐũÕ–ũĨũŠũ×ēũÕÆũ××ũÛũ×įũÕņũÕ÷ũū ū×ūÕ#ū2ū6ū×GūÕQūUū×fūÕqūuūׂūÕŒūÕ’ūĒūŋūÕÉūŪūÕéūúūÕ˙Õ ˙"˙7˙ÕA˙Q˙Õ[˙l˙Õv˙Õ˙‰˙“˙ž˙Š˙Â˙â˙Ųō˙×ü˙Ų Ų!×2Õ8G\ÕfÕl…×‘Õ›ÕĄ˛ļ×ĮÕŅÕÛß×ëÕõÕ˙Õ%59×JÕTX×dÕnr×Õ‰Õ–ĩĪđú>ŲNŲ^×hŲsÕ}’ÕœÕĸˇģ×ĮÕŅÕ×čė×ũÕÕ×%Õ/Õ9NÕT_j×zÕ€”×ĨÕ¯ŗ×ŋÕÉÍ×ÚÕäÕņ*KU_jy‰Ų”Õš×¤Ų´ŲČß]ęÕđ ×]"Õ(9=×NÕXÕ^×rÕxƒ’–׊¸ŧ×ÍÕ×Û×įÕņõ×Õ Õ×(Õ26×GÕQU×bÕlp×}ÕŠŽ×ŸÕĨ´¸×ËÕŅ×âæ×ōÕüÕ×)Õ/>B×SÕ]a×mÕw{׈Ւ՟Ŗ×´ÕžĶÕŪâ×īÕųÕ˙,Õ6KÕVgÕqÕw¤ÕŽžÕČŲÕãÕė " C M X g w Ų‡ Ų— ם Ų­ Ųž Ķ ÕŲ č ė × ' + ×8 ÕB ÕH \ | Œ Ųœ ŲŦ ײ Ų ŲĶ × ×č Õî ũ  ×  ×< @ ×M ÕW Õ] q ‘ Ą Ųą ŲÁ ×Ë ŲÛ Ųč Ųü  × Õ & * ×; ÕE ÕK ×\ ` ×l Õv Õ|  ‘ ×ĸ ÕŦ Õ˛ ×à Į ×Ķ ÕŨ Õį ü Õ  Õ! 2 Õ; L P ×a Õk o ×{ Õ… ‰ ×– Õ  Õ­ ą × ÕĖ Đ ×á Õė đ ×ũ ÕÕ %)×:ÕDÕJ×Wgk×|Õ‚‘•×ĻÕ°´×ÅÕĐáÕëÕņ Õ(8ÕBSÕ]ÕjÕ‰™ÕŖ´ÕžÕËāÕę˙Õ Õ%Õ+CXÕbrÕ|Õ—Õ¤ÃãūÕ6@JT^iƒŲŖŲ§ŅÕ×ėÕöú× Õ ×1Õ;ÕEI×`ÕfuyאՖĨŧÕȍĖ×ŨÕįÕņõ×Õ &Õ0GÕQÕ^sÕy€Š›Ÿ×¯ÕĩÄØÕâÕíņ×Õ Õ*Õ4EÕO`Õix|׌Ֆš×ĢÕļē×ĮÕŅÕ׍īÕ "Õ->ÕHÕNfzÕ„•ÕŸÕ§ąģÅÔäŲôŲŲ×Ų)Õ/Ų:Õ@×^sÕ}Õƒ˜œ×¨Õ˛Õ¸ÉÍ×ŪÕčÕî×û × Õ*Õ0×AE×QÕ[ÕarvׇՑ՗רŦ׸ÕÂÕČŲŨ×îÕøÕū××Õ)Õ/@D×UÕ_Õe×vz׆ՐՖ§Ģ×ŧÕÆÕĖ×Ũá×íÕ÷Õũ×#Õ-Õ3×@PT×eÕoÕu׆Š×–Õ Õώģ×ĖÕÖÕÜ×íņ×ũÕÕ "×3Õ=ÕC×TX×dÕnÕt…‰×šÕ¤ÕĒסĮË×ÜÕæÕė×ũ× ÕÕ.2×CÕMQ×]Õgk×xՂՏ¤ÕĒšŊ×ÎÕØÜ×íÕøü× ÕÕ-?ÕIYÕctÕ~Õ‡™ÕŖŗÕŊÎÕØÕåúÕÕ$5Õ?ÕE]rÕ|ŒÕ–§ÕąÕēÄĘÔß×ũ×ÕÕ"×/?C×TÕ^Õd×q…×–Õ ÕĻ×ŗÃĮרÕâÕč×õ ×Õ$Õ*×7GK×\ÕfÕl×y‰×žÕ¨ÕŽ×ģËĪ×āÕęî×úÕ  × Õ Õ, A ÕG V Z ×k Õu y ׊ Õ• ™ ×Ļ Õ° Õļ Ę Ü Õæ ö Õ!!Õ!Õ$!6!Õ@!P!ÕZ!k!Õu!Õ‚!—!ÕĄ!ļ!ÕÁ!Ō!ÕÜ!Õâ!ú!"Õ")"Õ3"D"ÕN"ÕW"a"g"q"|"ך"ž"ׯ"Õš"Õŋ"×Đ"Ô"×ā"Õę"Õđ"##×#Õ #Õ&#×3#C#G#×X#Õb#Õh#×u#…#‰#ך#Õ¤#ÕĒ#ס#Į#Ë#×Ü#Õæ#Õė#×ũ#$× $Õ$Õ$.$2$×C$ÕM$ÕS$×d$h$×t$Õ~$Õ„$•$™$×Ē$Õ´$Õē$×Ë$Ī$×Û$Õå$Õë$ü$%×%Õ%%×+%Õ5%9%×F%ÕP%Õ]%r%Õx%‡%‹%ל%ÕĻ%Ē%×ģ%ÕÆ%Ę%××%Õá%Õį%û% &Õ&'&Õ1&B&ÕL&ÕU&g&Õq&&Õ‹&œ&ÕĻ&Õŗ&Č&ÕŌ&į&Õō&'Õ 'Õ'+'@'ÕJ'Z'Õd'u'Õ'Õˆ'’'œ'ĸ'Ŧ'ˇ'Á'Ė'â'Ų(Ų"(Ų,(Ų6(ŲU(Ų_(Ųi(Ų€((Ų (מ(Â(×Ú(Õä(č(×ų(Õ˙( ))×)Õ))Õ3)7)×N)ÕT)c)g)×~)Õ„)“)ˇ)ģ)×Ė)ÕÖ)Õā)ä)×ô)Õú)**Õ*6*Õ@*ÕM*b*Õh*o*y**Š*Ž*×Ĩ*Õ¯*ŋ*ÕÉ*Ú*Õä*Õî*Õô*+Õ ++Õ'+Õ1+A+ÕK+Õ[+v+Õ€++Õš+Ģ+Õĩ+Õģ+É+ÕĶ+ä+Õî+Õø+,Õ,Õ",&,×7,Õ=,L,P,×a,Õk,o,×€,ÕŠ,Ž,מ,Õ¨,Ŧ,×Ŋ,ÕČ,Ė,×Ų,Õã,Õé,--Õ-$-?-ÕI-M-×d-Õo-s-׆-Õ’-Ŗ-ÕŠ-ą-ģ-Â-Ė-Û-ú-×..×4.Õ>.B.×S.ÕY.d.h.×y.Õƒ.Ս.‘.ר.ÕŽ.Ŋ.Á.ר.ÕŪ.í.//×&/Õ0/Õ:/>/×N/ÕT/_/o/Õy//Õš/Õ§/ŧ/ÕÂ/É/Ķ/Ų/ä/č/×ų/Õ0Õ 000×-0Õ30B0F0×W0Õa0e0×v0Õ€0„0×”0Õž0ĸ0×ŗ0Õž0Â0×Ī0ÕŲ0Õß0ø01Õ111×51Õ?1C1×Z1Õe1i1×|1Õˆ1Œ1×™1ÕŸ1§1Ž1¸1Ō1ŲÜ1Ųë1Ų22Ų!2×?2C2×[2Õe2i2×z2Õ€2‹22× 2ÕĒ2Õ´2¸2×Ī2ÕÕ2ä2č2×˙2Õ33+3Õ73;3×L3ÕV3Õ`3d3×t3Õz3…3•3ÕŸ3ļ3ÕĀ3ÕÍ3â3Õč3ī3ų3˙3 44×4Õ)4Õ3474×C4ÕM4ÕS4×]4Õg4k4×x4Õ‚4†4ד4՝4Õ§4Ģ4×ŧ4ÕÂ4Ņ4Õ4×â4Õė4Õō4×ü4Õ5Õ 5!5%5×65Õ@5ÕJ5N5×Z5Õd5Õj5×t5Ձ5…5×–5Õœ5Ģ5¯5×Ā5ÕĘ5Î5×ß5Õé5í5×ũ5Õ6 6×6Õ'6+6×86ÕB6ÕH6a6q6Õw6ƒ6ž6Õ¨6Ŧ6×Ã6ÕÎ6Ō6×å6Õņ67Õ777!7+7=7M7Ų]7×{77×—7ÕĄ7Ĩ7×ļ7Õŧ7Į7Ë7×Ü7Õæ7Õđ7ô7× 8Õ8 8$8×;8ÕA8P8g8Õs8w8׈8Õ’8Õœ8 8×°8Õļ8Á8Ņ8ÕÛ8ō8Õü8Õ 99Õ$9+959;9F9J9×[9Õe9Õo9s9×9Õ‰9Տ9×™9ÕŖ9§9×´9Õž9Â9×Ī9ÕŲ9Õã9į9×ø9Õū9 ::×:Õ(:Õ.:×8:ÕB:ÕH:]:a:×r:Õ|:Õ†:Š:×–:Õ :ÕĻ:×°:ÕŊ:Á:×Ō:ÕÜ:Õâ:ņ: ;Õ;&;Õ0;A;ÕK;ÕU;Õ[;i;Õs;„;ÕŽ;Õ˜;¨;Õ˛;ÕÂ;Ũ;Õį;÷;Õ<<Õ<Õ"<0<Õ:<K<ÕU<Õ_<o<Õy<Õ‰<<מ<Õ¤<ŗ<ˇ<×Č<ÕŌ<Ö<×į<Õņ<õ<×=Õ==×$=Õ/=3=×@=ÕJ=ÕP=i=y=Õ=‹=Ļ=Õ°=Ë=ÕÖ=í=Õų= >Õ>>>)>8>X>Ųh>×€>ד>՝>˛>Õŧ>Í>Õ×>č>Õņ>×?Õ ? ?Õ*?Õ0?E?I?×U?Õ_?Õe?v?z?׋?Õ•?Õ›?×Ŧ?°?×ŧ?ÕÆ?ÕĖ?Ũ?ō?Õü?Õ@@@×'@Õ1@Õ7@H@]@Õg@Õm@‚@†@×’@Õœ@Õĸ@ŗ@Č@ÕŌ@ÕØ@í@ņ@×ũ@ÕAÕ AA3AÕ=AÕCAXA\A×hAÕrAÕxA‰AžAÕ¨AšAÕÅAāAÕæAûA˙A× BÕBÕB,BGBÕMBbBfB×rBÕ|BÕ‚B“B—BרBÕ˛BÕ¸B×ÉBÍB×ŲBÕãBÕéBúBūB×CÕCÕC×0C4C×@CÕJCÕTCiCÕsC„CÕŽCŸCÕ¨CšCŊC×ÎCÕØCÕŪC×īCķC×˙CÕ DÕD D$D×5DÕ?DCD×TDÕ_DpDÕzDÕ€D˜D­DÕˇDĖDÕ×DčDÕōDÕøD EE E×1EÕ7EFEJE×[EÕeEiE×uEÕEƒEאEÕšEÕ§EŧEÕÆEÖEÕāEņEÕûEÕFF#F3FŲCF×MFŲ]F×pFÕzF~F׏FÕ™FF×ĒFÕ´FÕŧF×ÂFŲÍFÕ×FÛF×ōFÕüFG×GÕGÕ$G9GÕ?GJGUG×eGÕkG{GGאGÕœG×­GąG×ŊGÕĮGÕÍGŪGâG×ķGÕ˙G×HH× HÕ*HÕ0HAHEH×VHÕbH×sHwH׃HՍHÕ—HŦHÕļHĮHÕŅHâHÕëHüHI×IÕI×.I2I×>IÕHIÕNI_IcI×tIÕ~I‚IדIÕžIĸIׯIÕšIÕŋI×IÛI×ėIÕöI JÕJJ×'JÕ1JÕ7JOJSJ×dJÕjJyJ}J׎JÕ˜JÕžJׯJŗJ×ŋJÕÉJÕĪJāJûJK,KAKÕKK`KÕkK|KÕ†KÕŒK¤KšKÕÃKØKÕãKôKÕūKÕLL"L.L2L×CLÕILXL\L×mLÕwL{LׇLÕ‘L•L×ĸLÕŦLÕšLÎLÕØLčLÕōLMÕ MÕM!M:MŲ>M’_M’cM×sMÕ}M’MבMÕ›M’ŸM×°MÕģM’ŋM×ĖMÕÖMÕÜM’ôM’NÕ N’N’!NŲ%N”ON”SN×dNÕnN”ƒNÕŽN”’NןNÕŠNÕ¯N”ÃN”äNŲîNŲ OOŲ,OŲWÕHWLW×XWÕbWfW×sWÕ}WÕŠWŸWÕŠWšWÕÃWÔWÕŪWÕįWņWXX&XÕ0XÕ:XKXÕUXÕbXfX×wXՁX…X×’XÕœX X×­XÕˇXÕÁXÅX×ÖXÕāXõXÕYY×YÕYÕ!Y5YFY[YÕeYuYÕYYÕšYÕ§YŧYÕÆY×YÕŨYíYZÕ ZZÕ&Z7ZÕAZÕJZTZ_ZŠZŲ”ZŲĩZÉZŲÖZ×āZŲõZųZ× [Õ[Õ[6[ÕB[W[Õb[f[×w[Ձ[Õ‹[[×Ļ[ÕŦ[×Ŋ[Á[×Ķ[ÕŨ[ø[\%\6\:\×K\ÕU\Õ_\t\Õz\‰\ž\Õ¨\š\ÕÅ\É\×Ú\Õä\Õî\]Õ ]]#]']×8]ÕB]F]×W]Õb]f]×s]Õ}]Õƒ]›]°]Õē]Ņ]ÕÛ]Õį]ü]Õ^^Õ&^7^ÕA^ÕG^[^e^t^‰^Õ“^Ŗ^Õ­^ž^ÕČ^ÕÕ^ę^Õô^_Õ__Õ)_Õ2_=_K_ÕU_f_Õl_y_ˆ_˜_ŲŦ_°_×Á_ÕË_ÕÕ_Ų_×ę_Õô_Õú_× ``×`Õ%`Õ/`3`×C`ÕI`X`\`×l`Õv`Õ€`•`ÕŸ`°`Õē`Ë`ÕÔ`ã`į`×÷`Õaa×aÕ!a%a×2aÕg×NgÕXg–mgÕxg–|g׉gÕ“gÕ™g–ąg–Ég–įg–øgÕhÕh–h–'h–6hŲ:h˜\h×th˜‰hÕ“h՝h˜˛hÕ¸h˜Ãh˜Îh˜éh˜i˜iÕ#iÕ)i˜=i˜Di˜SišbiŲkiŲtiŲ~iŲŽiŲži×§iŲŗiŲĀiŲŌiŲįišüiÕjšjš&jÕ0jšGjÕQjÕ]jšrjÕyjš‹jÕ•jšĒjÕĩjšÆjÕĐjÕÖjšęjšôjšūjš kšk-kŲ8kÕ>k×\k`k×qkÕ{kՁkדk—kרkÕ˛kÕ¸k×ĘkÎk×ßkÕékÕīk×˙kl×lÕlÕ$l/lAlÕKl`lÕkl|lÕ†lÕŒl lŦl°l×ÁlÕËlĪl×ālÕëlīl×ülÕmÕ m$m9mÕCmXmÕcmtmÕ~mÕ„mœm m׹mÕģmÕÁm×Ķm×m×čmÕōmÕøm×nÕnn×#nÕ-nÕ3n×EnIn×ZnÕdnÕjn×|n‘nÕ›n°nÕģnĖnÕÖnÕÜnôn oÕo(oÕ3oDoÕNoÕTohonoxoƒo’o˛oŲŊoÕÃo×ÍoŲŪo×ņoÕ÷o×ũoŲpÕpp×'pÕ1pÕ;pPpÕZpkpÕup†pՏpžpĸp×ŗpÕŊpÁp×ŌpÕŨpáp×îpÕøpÕūpq7qXqiqÕsqÕyqŽqžqĸq×ŗqÕŊqÁq×ŌqÕÜqāq×đqÕúqūq×rÕrr×+rÕ5rÕ;rTrdrÕjrvr‘rÕ›rļrÕÁrØrÕärõrÕûrs sss$s3sCsŲNsÕTsŲ_sÕpsÕvs׉sÕ“s—sרsÕ˛sÕ¸s×ÉsÍs×ŲsÕãsÕístÕ ttÕ't8tÕAtRtVt×gtÕqtut׆tÕ‘t•t×ĸtÕŦtÕ˛tĘtÎt×åtÕët×ütu× uÕuÕu-uLulu}uÕ‡uՍuĄuŦuģuŲŋuéuíu×ūuÕv v×vÕ#v'v×4vÕ=vWvgvŲwvvvŖvŲ°vŲÄvČv×ŲvÕãvÕév×úvūv× wÕwÕw3wÕ=wNwÕXwiwÕrwƒw‡wטwÕĸwĻwסwÕÂwÆw×ĶwÕŨwÕãwûwx:xKxÕUxÕ[xoxyx‹xŸxŲŦxŲĀxÄx×ÕxÕßxÕåx×öxúx×yÕyÕy/yÕ9yJyÕTyeyÕnyyƒy×”yÕžyĸy×ŗyÕžyÂy×ĪyÕŲyÕßy÷yz6zGzÕQzÕWzkzuz„zĨzŠzךzÕŋzÎzŌz×âzÕėzđz×üzÕ{ {×{Õ!{Õ.{L{f{‡{‘{›{Ē{š{ŲÂ{ŲÔ{Õã{Õí{|Õ |Õ| |4|Õ>|ÕD|S|g|Õq|Õw|†|š|Õ¤|ÕĒ|š|Í|Õ×|ÕŨ|ė|}Õ }Õ}}3}Õ=}ÕC}R}f}Õp}Õv}…}™}ÕŖ}ÕŠ}¸}Ė}ÕÖ}ÕÜ}ë}˙}Õ ~~×~Õ(~Õ2~G~ÕQ~b~Õl~}~Õ†~•~™~׊~Õŗ~ˇ~×Č~ÕĶ~×~×ä~Õî~Õô~ × Õ*?ÕJN×[ÕeÕkƒ—ÕĄÕ§ļĘÕÔéÕô€Õ€Õ€-€A€ÕK€`€Õk€|€Õ†€ÕŒ€ €Ē€´€ÀۀÕę€Õô€ÕÕ'=]HÕNYhwŲŲŒÕÕ­ÕŗŊŲʁ]ҁŲ܁Õæũ]‚Õ‚‚'‚Ų2‚Õ8‚M‚ÕW‚l‚Õr‚‚–‚Õ ‚ÕĻ‚ĩ‚ʂÕԂÕڂé‚ú‚ÕƒÕ ƒ*ƒ=ƒ]HƒÕNƒeƒŲoƒŲšƒǃŲŨƒáƒ×îƒÕøƒÕ„Õ „„×!„Õ+„Õ1„<„F„a„’„§„Õą„Õˇ„ƄۄÕå„Õë„ú„…]…Õ"…-…7…W…Ų[…………ן…Ŗ…ך…Ŋ…×Ō…†Ą&†Ų6†×T†ĄX†×p†Õz†Ą~†×†Õ•†Ą †Ą¤†×ĩ†Õŋ†ÕɆĄÍ†×ä†Õꆥų†Ąũ†×‡Õ‡Ą)‡ĄM‡ĄQ‡×b‡Õl‡Õv‡Ąz‡×ЇÕ‡Ą›‡ĄĢ‡Õĩ‡ĄĖ‡ÕևÕã‡Ąø‡Õū‡ĄˆĄˆĄˆĄ ˆĄ$ˆ×5ˆÕ?ˆÕIˆĄMˆ×^ˆÕhˆÕnˆ×xˆĄ|ˆ×‰ˆÕ“ˆÕˆĄĄˆ×ވÕ¸ˆÕˆĄÆˆ×͈ÕŨˆÕįˆĄüˆÕ‰Ą‰Õ!‰Ą2‰Õ;‰ĄW‰Ą[‰×l‰Õv‰Ą‹‰Õ–‰Ąš‰×§‰Õą‰Õˇ‰ĄĐ‰Ąå‰Õī‰ĄŠÕŠĄ ŠÕ*ŠÕ0ŠĄEŠĄKŠĄZŠĄ^Š×oŠÕuŠĄ„ŠĄˆŠ×™ŠÕŖŠĄ§Š×¸ŠÕŠĄÆŠ×֊ÕāŠĄäŠ×õŠÕ‹Ą‹×‹Õ‹Õ!‹Ą:‹ĄJ‹ÕP‹Ą\‹Ą`‹×w‹Õ‹Ą…‹×œ‹Õ§‹ĄĢ‹×ž‹ÕʋĄÎ‹×ۋÕዥ鋥đ‹Ąú‹ĄŒŒŲ.ŒŲ>ŒŲNŒŲbŒwŒˆŒÕ’ŒÕœŒ­ŒÕˇŒÕČȌ×،ÕãŒįŒ×øŒÕ×ÕÕ$<QÕ[pÕ{ŒÕ–Õœ´ɍÕĶčÕķŽÕŽÕŽ,ŽKŽkŽ|ŽÕ†ŽÕŒŽ ŽĒŽ´ŽžŽȎ׎įŽŲ÷ŽŲŲŲ+@QÕ[ÕevÕ€Õ‘×ĸÕŦ°×ÁÕĖЏ×ŨÕįÕ폐Õ$9ÕDUÕ_Õe}’ÕœąÕŧ͐ÕאÕŨõ‘4‘E‘ÕO‘ÕU‘i‘s‘}‘‡‘‘‘ ‘¯‘Ųš‘ŲđÕՑÕå‘Õë‘õ‘Ų’] ’Ų’Õ’5’]@’ÕF’Q’_’Ųj’Õp’ׁ’Õ‹’ ’ÕĻ’´’Õē’ʒΒ×ߒÕé’Õī’ū’“Õ“Õ#“.“D“d“w“]‚“Õˆ“Ÿ“ŲŠ“Ųԓä“Ų””×(”Õ2”Õ<”ÕF”J”×[”Õe”Õk”v”Œ”¯”ā”õ”Õ˙”Õ••)•Õ3•Õ9•H•_•]j•Õp•{•…•Ĩ•ŲŠ•Ε͕×í•ņ•×– –× –]–¤t–Ų„–×ĸ–¤Ļ–מ–ÕȖ¤Ė–×Ũ–Õ㖤ō–×—Õ —Õ—¤—×2—Õ8—¤G—¤K—×b—Õh—¤w—¤Ž—Õš—¤ž—ׯ—Õš—ÕפĮ—×חÕŨ—¤č—¤ø—Õ˜¤˜Õ#˜Õ0˜¤E˜ÕK˜¤R˜¤\˜¤b˜¤m˜¤q˜×‚˜ÕŒ˜Õ–˜¤š˜×̘Õĩ˜Õģ˜×Ř¤É˜×֘Õā˜Õę˜¤î˜×û˜Õ™Õ™¤™× ™Õ*™Õ4™¤I™ÕS™¤d™Õn™¤™Õˆ™¤¤™¤¨™×š™ÕÙ¤Į™×ؙÕ♤ķ™Õ˙™¤š×šÕšÕ š×*šÕ4šÕ>š¤Bš×RšÕ\šÕbš¤tšÕ~šÕˆš¤˜šÕĸšÕޚ¤žšÕȚÕΚ¤ÜšÕ嚤öš¤úš× ›Õ›¤*›Õ4›¤E›ÕQ›¤U›×b›Õl›Õr›¤“›¤—›×´›¤Æ›ÕЛÕڛ¤ę›Õô›Õœ¤œ¤2œ¤?œ¤Eœ¤Tœ¤Xœ×iœÕoœ¤~œ¤‚œ×“œÕœ¤Ąœ×˛œÕŧœ¤Āœ×МÕڜ¤Ūœ×īœÕúœ¤ūœ× ÕÕ¤4¤DÕJ¤V¤Z×qÕ{¤×–ÕĄ¤Ĩ×¸Õĝ¤Č×՝Õ۝¤ã¤ę¤ô¤žžŲ(žŲ8žŲHžŲ\žqž‚žÕŒžÕ–ž§žÕąžÕžžž×ĶžÕŨžáž×ōžÕũžŸ×ŸÕŸÕŸ6ŸKŸÕUŸjŸÕuŸ†ŸÕŸÕ–ŸޟßÕ͟âŸÕíŸūŸÕ Õ & E e v Õ€ Õ† š ¤ Ž ¸  Ņ ė Õō ×ü ŲĄ&ĄÕ0ĄGĄÕQĄÕYĄ×mĄÕwĄ{Ą×ŒĄÕ˜Ą×ĸĄÕŦĄĮĄŪĄøĄ ĸÕĸÕ"ĸ=ĸVĸZĸ×kĸÕuĸÕ{ĸ‰ĸÕ“ĸ՝ĸ¸ĸÎĸÕ×ĸįĸëĸ×üĸÕŖ Ŗ×ŖÕ&Ŗ*Ŗ×7ŖÕAŖÕGŖ_ŖcŖ×tŖÕ~Ŗ“ŖÕžŖĸŖ×¯ŖÕšŖÕŋŖ×ŖėŖÕöŖ ¤Õ¤'¤Õ1¤Õ7¤O¤d¤Õn¤ƒ¤ÕޤŸ¤ÕФÕ¯¤äͤפâ¤ú¤Ĩ'ĨÕ1ĨÕ7ĨKĨUĨ`ĨoĨφĨŲ™ĨĻ­ĨÕˇĨÕŊĨĻÎĨĻŪĨĻâĨ×ōĨÕøĨĻĻĻ Ļ×ĻÕ%ĻĻ)Ļ×5ĻÕ?ĻĻCĻ×PĻÕZĻÕgĻĻ…ĻϟĻĻĀĻĻĘĻĻŪĻîĻŲųĻÕ˙ĻŲ §Õ§Ų$§;§]F§ÕL§`§u§Õ§Õ…§§œ§ §×ą§Õģ§ÕÁ§×ҧէ׿§Õđ§Õú§¨Õ¨ ¨+¨E¨c¨t¨Õ~¨Õ„¨˜¨¤¨¨¨×š¨ÕèĮ¨×بÕã¨į¨×ô¨Õū¨ÕŠŠ Š×1ŠÕ;Š?Š×PŠÕ[Š_Š×lŠÕvŠÕ|Š”ŠŠŠÕŗŠČŠÕĶŠäŠÕîŠÕôŠ Ē!ĒÕ+Ē@ĒÕKĒ\ĒÕfĒÕlĒ€ĒŠĒ™Ē­ĒŲēĒŲĘĒ×ÔĒŲčĒėĒ×ũĒÕĢĢÕ'Ģ8ĢÕBĢSĢÕ`ĢdĢ×uĢÕĢƒĢ×”ĢÕŸĢŖĢ×°ĢÕēĢÕĀĢØĢ÷ĢŦ(ŦÕ2ŦÕ8ŦLŦVŦoŦ]vŦ€ŦŠŦ”ŦžŦŠŦŊŦŅŦŲŪŦŲîŦŲūŦ×­Ų­Õ­4­†?­R­†[­i­Ųt­Õ~­‚­×“­Õ™­¤­Ž­Ŋ­Ō­ÕØ­į­ü­ÕŽŽ]#Ž'Ž×8ŽÕBŽFŽ×SŽÕYŽiŽ~ŽÕˆŽ™ŽÕĨŽēŽÕĀŽÕŽ]áŽåŽ×öŽÕ¯¯×¯Õ ¯$¯×1¯Õ;¯ÕA¯Y¯]¯×n¯Õx¯¯Õ˜¯œ¯×НÕŗ¯Õš¯ҝæ¯Õđ¯°Õ°!°Õ+°Õ1°I°h°ˆ°™°ÕŖ°ÕаŊ°Į°ҰÛ°å°ī°ų°ąą"ąĒ9ąŲLąĒ`ąÕjąÕpąĒ…ąlją×•ąÕŸąÕĨąĒļąĒēą×ĘąÕĐąĒßąĒãą×ķąÕũąĒ˛× ˛Õ˛Ē˛×(˛Õ2˛Õ?˛Ē]˛Ēw˛ǘ˛Ēĸ˛Ēļ˛ʲŲײŲë˛ŗÕ ŗ ŗÕ&ŗ5ŗJŗÕTŗÕZŗiŗmŗ×~ŗÕˆŗŒŗ×ŗÕ¨ŗŦŗ×šŗÕÃŗÕÉŗáŗ´ ´1´Õ;´ÕA´U´_´i´s´}´‡´‘´›´Ĩ´š´Í´ŲÚ´Ųę´×ô´Ųĩ ĩ×ĩÕ'ĩ+ĩ×<ĩÕGĩKĩ×XĩÕbĩÕhĩ€ĩ„ĩוĩÕŸĩŖĩ×´ĩÕŋĩĐĩÕÚĩÕāĩøĩ ļÕļ,ļÕ7ļHļÕRļÕXļpļļ¯ļĀļÕĘļÕĐļäļîļˇ]ˇˇ"ˇ,ˇ7ˇKˇ_ˇŲlˇŲ…ˇ×ˇŲšˇÕ ˇŲ̎ÕĩˇʡÕСߡôˇÕúˇ¸]¸¸×0¸Õ:¸>¸×K¸ÕQ¸a¸v¸Õ€¸‘¸Õ¸˛¸Õ¸¸͸]Ų¸Ũ¸×î¸Õø¸ü¸× šÕšš×)šÕ3šÕ9šQšUš×fšÕpštš×…šÕš”š×ĄšÕĢšÕąšÉšŪšÕčšųšÕē ē×ēÕ$ē(ē×9ēÕDēHē×UēÕ_ēÕeē}ē’ēÕœē­ēÕŗēÃēØēÕŪēķē]˙ēģ×ģÕģ"ģ×3ģÕ>ģBģ×OģÕYģÕ_ģwģ{ģ׌ģÕ–ģšģ×§ģÕ­ģŊģÁģ×ŌģÕÜģāģ×íģÕ÷ģûģ×ŧÕŧ ŧÕ*ŧ?ŧÕFŧQŧ^ŧ×hŧŲsŧÕ}ŧŧ×’ŧÕœŧ ŧ×­ŧÕŗŧÃŧØŧÕŪŧúŧ]Ŋ Ŋ×ŊÕ%Ŋ)Ŋ×:ŊÕEŊIŊ×VŊÕ`ŊÕfŊ~Ŋ“Ŋ՝Ŋ˛ŊÕŊŊÎŊÕØŊÕŪŊōŊüŊžžž#ž×4žÕ>žBž×OžÕUžežiž×zžÕ„ž™žÕ¤ž¨ž×ĩžÕŋžÕÅžŨžōžÕüžŋÕŋ-ŋÕ7ŋÕ=ŋUŋjŋÕtŋ‰ŋÕ”ŋĨŋÕ¯ŋÕˇŋÁŋËŋÕŋßŋéŋķŋũŋĀĀĀ0ĀŦ?ĀŲHĀŲQĀŲ[ĀŲkĀŲ{Ā×…ĀŲ–ĀŦąĀŦĐĀŦáĀÕëĀÕņĀŦÁŦ ÁŦÁŦ5ÁŲ>ÁŲGÁŲQÁŲ^ÁŲlÁŲyÁŲœÁŦÁŲģÁŲĘÁ×įÁûÁÕÂÂÕÂ0ÂÕ=ÂAÂ×QÂÕ[ÂÕaÂ×m‰ŠÂēÂÕÄÂÕĘÂŪÂäÂôÂøÂ×ÃÕÃÕÃ0ÃÕ:ÃOÃÕZÃkÃÕuÃÕ{ÏÕäèÃ׸ÃÕÂÃÆÃ××ÃÕâÃæÃ×ķÃÕũÃÕÄÄÄ×/ÄÕ9ÄNÄÕYÄ]Ä×jÄÕtÄÕzÄ’Ä–Ä×ĻÄÕ°Ä´Ä×ĀÄÕĘÄßÄÕęÄîÄ×ûÄÕÅÕ Å$Å8ÅÕBÅÕHÅSÅgÅÕqŁÅÕ‹Å ÅÕĢÅŧÅÕÆÅÕĖÅåÅųÅÕÆÆÕ#Æ4ÆÕ>ÆÕDÆ\ÆpÆÕzƏÆÕšÆĢÆÕĩÆÕģÆĪÆŲÆäÆũÆĮ×&ĮŲ7ĮŲBĮÕLĮPĮ×aĮÕkĮoĮ×€ĮÕ‹ĮĮלĮÕĻĮÕŦĮÅĮÉĮ×ÚĮÕäĮųĮÕČČ×ČÕČÕ%Č=ČAČ×RČÕ\ČqČÕ|Č€Č׍ČÕ—Č՝ČĩČšČ×ĘČÕÔČéČÕôČøČ×ÉÕÉÕÉ-É1É×BÉÕLÉaÉÕlÉpÉ×}ÉÕ‡ÉՍÉĨÉŠÉ×ēÉÕÄÉŲÉÕäÉčÉ×õÉÕ˙ÉÕĘĘ!Ę×2ĘÕ<ĘQĘÕ\Ę`Ę×mĘÕwĘÕ}ʕʙĘ×ĒĘÕ´ĘÉĘÕÔĘØĘ×åĘÕīĘÕõĘ ËË×"ËÕ,ËAËÕLËPË×]ËÕgËÕm˅ˉËךËդ˚ËÕÄËČË×ÕËÕßËÕåËũËĖ×ĖÕĖ1ĖÕ<Ė@Ė×MĖÕWĖÕ]ĖuĖyĖ׊ĖÕ”ĖŠĖմˏĖ×ÅĖÕĪĖÕÕĖíĖņĖ×ÍÕ Í!ÍÕ,Í0Í×=ÍÕGÍÕMÍeÍiÍ×zÍÕ„Í™ÍդͨÍ×ĩÍÕŋÍÕÅÍŨÍáÍ×ōÍÕüÍÎÕÎ Î×-ÎÕ7ÎÕ=ÎUÎjÎÕtΉÎÕ”ÎĨÎÕ¯ÎÕĩÎÎÎãÎÕíÎĪÕ ĪĪÕ(ĪÕ.ĪGĪ\ĪÕfĪ{ĪՆΗĪÕĄĪÕ§ĪĀĪÕĪÕßĪôĪÕ˙ĪĐÕĐÕ Đ9ĐNĐÕXĐmĐÕxЉĐÕ“ĐÕ™Đ˛ĐĮĐÕŅĐæĐÕņĐŅÕ ŅÕŅ+Ņ@ŅÕJŅ_ŅÕjŅ{ŅÕ…ŅÕ‹Ņ¤ŅšŅÕÃŅØŅÕãŅôŅÕūŅÕŌŌ2ŌÕ<ŌQŌÕ\ŌmŌÕwŌÕ}Ō–ŌĢŌÕĩŌĘŌÕÕŌæŌÕđŌÕöŌĶ$ĶÕ.ĶCĶÕNĶ_ĶÕiĶÕoĶˆĶĶÕ§ĶŧĶÕĮĶØĶÕâĶÕčĶÔÔÕ Ô5ÔÕ@ÔQÔÕ[ÔÕaÔzԏÔÕ™ÔŽÔÕšÔĘÔÕÔÔÕÚÔķÔÕÕÕ'ÕÕ2ÕCÕÕMÕÕSÕhÕrÕ|ՆՐ՚դՎոÕÂÕĖÕÖÕāÕęÕôÕūÕÖÖÖ/Ö?ÖŲNÖŲ]ÖŲlÖŲ{Ö×…ÖŲ™Ö­ÖÕˇÖÎÖÕØÖÕäÖčÖ×øÖÕ×Õ××××+×Õ5×9××J×ÕU×Y××f×Õp×Õv׎×ĸ×ÕŦ×Á×ÕĖ×Ũ×Õį×ÕķרըըØ,Ø0Ø×@ØÕJØNØ×ZØÕdØhØ×yØÕ„؈Ø×•ØÕŸØÕĨØžØÂØ×ŌØÕÜØņØÕüØŲ× ŲÕŲÕŲ5Ų9Ų×IŲÕSŲÕYŲhŲlŲ×|ŲÕ†ŲŠŲ×›ŲÕĻŲĒŲסŲÕÁŲÕĮŲßŲãŲ×ķŲÕũŲÚÕÚ!Ú×.ÚÕ8ÚÕ>ÚVÚZÚ×jÚÕtÚ‰ÚÕ”Ú˜Ú×ĨÚÕ¯ÚÕĩÚÍÚŅÚ×áÚÕëÚÛÕ ÛÛ×ÛÕ&ÛÕ,ÛDÛXÛÕbÛwÛÕ‚Û“Û՝ÛÕŖÛģÛŋÛ×ĪÛÕŲÛîÛÕųÛũÛ× ÜÕÜÕÜ2ÜFÜÕPÜeÜÕp܁ÜÕ‹ÜÕ‘ÜŠÜŊÜÕĮÜÜÜÕįÜøÜÕŨÕŨ Ũ4ŨÕ>ŨSŨÕ^ŨoŨÕyŨÕ…Ũ™ŨÕŖŨŗŨÕŊŨŌŨÕŨŨîŨÕøŨÕūŨŪ+ŪÕ5ŪJŪÕUŪfŪÕpŪÕvŪŽŪĸŪÕŦŪÁŪÕĖŪŨŪÕįŪÕíŪßßÕ#ß8ßÕCßTßÕ^ßÕdß|ߐß՚߯ßÕēßËßÕÕßÕÛßīßųßā āā!ā+ā5ā@ā\ālāŲ|āŲŒāŲœā×ĻāŲˇāŲÂāÕĖāĐā×áāÕįāōāáÕ á%á5áÕ?áÕIáZáÕdáÕjá|á€áבáÕ›áÕĨáŠá×ĩáÕŋáÕÅáÕáŲá×ęáÕôáøá×âÕââ×#âÕ.â?âÕIâÕOâeâwâՁâ‘âÕ›â°âÕģâĖâÕÖâÕÜâöâã1ãRãcãÕmãÕsã‰ã”ã­ãŊãŲÍãŲŨã×įãŲûã˙ã×äÕäÕ ä×0ä4ä×EäÕOäÕUä`äräÕ|ä‘äÕœä­äÕˇäÕŊäŅäŨäáä×ōäÕüäÕå×åå×'åÕ1åÕ7åBå]å|ååÕ—å՝åąåŊåÁå×ŌåÕÜåāå×ņåÕüåæ× æÕæÕæ5æ9æ×JæÕTæiæÕtæxæ×…æÕæÕ•æ­æąæ×ÂæÕĖæáæÕėæđæ×ũæÕįÕ į%į)į×:įÕDįHį×YįÕdįhį×uįÕįÕ…įį˛įÕŧįŅįÕÜįíįÕ÷įÕũįč*čÕ4čIčÕTčečÕočÕuččĸčÕŦčÁčÕĖčŨčÕįčÕíčééÕ$é9éÕDéUéÕ_éÕeéyéé‰é“éžéģéŲÅéŲŌéŲßéŲîéŲęŲę=ę×KęÕUęYę×vęzę׌ęę׎ę˛ę×ÃęÕÉęØęÜę×éęÕķęÕųęëÕëÕë(ë=ëÕCëNë^ësëÕ}ëŽëÕšë¯ëÕšëÕŋëÎëãëÕíëÕķëėė×ėÕ!ėÕ+ė@ėÕFėQė×_ėÕiėÕsėwėׄėÕŽėÕ˜ėŦėÕļėÕŊėÉėØėÜė×íėÕ÷ėÕũė íí×!íÕ+í/í×@íÕKíOí×\íÕfíÕlí„íŖíÃíÔíÕŪíÕäíøíîîŲ5îŲBîŲUîtîŲ„îŲ˜î­îÕšîČîĖî×ŨîÕíîīÕīī×!īÕ1ī5ī×BīÕLīÕVīZī×jīÕtīÕ{ī‡ī–īĢīÕˇīÆīĘī×ÛīÕåīÕīīđÕđ%đÕ/đÕ7đ×NđÕXđ\đ×mđÕwđՁđ…đ×’đÕœđÕĻđĒđ×ģđÕÂđÎđØđâđėđûđņ:ņUņÕ[ņoņzņ„ņŽņ˜ņĸņŦņļņÅņÕņäņŲčņøņōōŲ(ō×2ōŲBōŲSōŲ^ōÕhō}ōÕ‰ō˜ō­ōÕšōÄōŌōŲŨōÕãōíō÷ōķ ķ×ķÕ%ķÕ/ķDķÕNķ_ķÕiķzķÕƒķ’ķ–ķ×§ķÕąķÕģķĐķÕÚķëķÕõķôÕôô$ô.ô8ôBôLôVô`ôjôtô~ôˆô’ôœôĻô°ôģôÅôĪôîôŲũôŲõ¯"õ¯9õpFõ¯Uõ¯jõÕvõ¯õ¯‹õ¯•õ¯Ÿõ¯Šõ¯ÃõŲÍõŲŲõŲņõŲõõąö× öÕ*öąAöpNöą]öąröÕ~öą‰öą“öąöą§öąąöąŧöąÖöŲâöŲõöŲųöŗ÷×$÷Õ.÷ŗE÷]R÷ŗa÷ŗv÷Õ‚÷ŗ÷ŗ—÷ŗĄ÷ŗĢ÷ŗĩ÷ŗĀ÷ŗÚ÷Ųæ÷Ųų÷Ųũ÷ĩø×(øÕ2øĩIø]VøĩeøĩzøÕ†øĩ‘øĩ›øĩĨøĩ¯øĩšøĩÄøĩÎøĩčøŲōøŲųŲųˇCų×QųÕ[ųˇ_ų×pųÕzųˇ~ų׋ųÕ•ųˇ™ų×ĻųÕŗųˇˇų×ČųÕÔųˇãųˇįų×øųÕúˇúÕ'úˇ8úÕBúˇSúÕ\úˇkúˇoú×€úÕŠúՐúˇŸúˇŖú×´úÕÄúˇŲúÕãúˇôúÕūúˇûÕûˇ'ûˇ<ûÕHûˇWûˇlûÕxûˇƒûˇûˇ—ûˇĄûˇĢûˇĩûˇŋûˇĘûˇÔûˇæûúûŲüŲü0üÕ<üKü`üÕlü{üüÕœüĢüĀüÕĘüÕĐüßüôüÕūüÕũũ(ũÕ4ũCũXũÕbũÕhũwũŒũÕ˜ũ§ũŧũÕČũĶũŨũįũņũûũūū%ūŲCūWūŲdūŲtū×~ūŲūŲšūÕ ūŲĩūÆūÕūŲū×ęūÕôūÕúū× ˙˙×˙Õ%˙Õ+˙<˙@˙×W˙Õa˙e˙×u˙Õ˙Õ‰˙ž˙Õ¤˙¯˙ē˙×Ę˙ÕÔ˙Ø˙×ä˙Õî˙Õô˙ ×Õ&×7;×GÕQÕWhl×}Õ‡Õ×šĒŽ×ŋÕÉÕĪ×Üėđ×Õ Õ×"&×2Õ<ÕF[ÕevÕ€‘ÕšĢ¯×ĀÕĘÎ×ßÕęûÕÕ ×Ų"Õ,AÕK\Õhl×}ՇՍĸ°ÕēÕĀĶäč×ųÕÕ ×&*×;ÕEÕK×Xhl×}Õ‡Õ×šĒŽ×ŋÕÉÕĪ×Üėđ×Õ Õ×"&×2Õ<ÕF[ÕevÕ€‘ÕšĢ¯×ĀÕĘÎ×ßÕęûÕÕ0PqŽ˛×ÃÕÍŅ×âÕėÕō Õ&*×;ÕA×ThÕrÕx‰™×­ÕˇÕŊ×ĘÚôÕú /Õ9Õ?P`d×tÕz‰×Õ§ĢסÕÁÅ×ŌÕÜÕéũÕÕ!2Õ<ÕEUY×jÕtÕzׇ—›×ŦÕļÕŧ×ÉŲŨ×îÕøÕū×  × Õ) Õ3 H ÕR c Õm ~ Õ‡ ˜ œ ×­ Õˇ ÕŊ ×Î Ō ×Ū Õč Õî ˙  × Õ Õ$ ×5 9 ×E ÕO ÕU f j ×{ Õ… Õ‹ ל   ×Ŧ Õļ ÕĀ Õ Õß đ Õú  Õ % ) ×: ÕD H ×Y Õd h ×u Õ Õ…  ˛ Õŧ Ņ ÕÜ í Õ÷ Õũ  * Õ4 I ÕT e Õo Õ{  א Õš Õ  ×­ Ŋ Á ×Ō ÕÜ Õâ ×ī ˙  × Õ Õ$ ×5 9 ×E ÕO ÕY n Õx ‰ Õ“ ¤ Õ­ ž  ×Ķ ÕŨ á ×ō Õũ ÕÕ$9ÕCÕIZjn×ՉՏלŦ°×ÁÕËÕŅ×âæ×ōÕüÕÕ%6Õ@QÕZko×€ÕŠŽ×ŸÕĒģÕÅÕŅæÕđÕ!Õ+Õ7LÕVkÕv‡Õ‘՝˛ÕŧŅÕÜíÕ÷ÕÕ-1×BÕLP×]ÕgÕm}×’Õœ ×ąÕŧĀ×ÍÕ×ÕŨõ Õ$Õ.?ÕIÕVZ×kÕuŠÕ•™×ĻÕ°ÕļÎãÕíũÕÕ"Õ/DÕNcÕnՉՏ¨ŊÕĮÜÕįøÕÕ&DcmwŸŊČâŲėŲûŲ˙š š5Õ;šJšN×_Õiš~Õ‰š×šÕ¤ÕĒšÂšÆ××Õášå×öÕš×ÕÕ"š:š\ššÕšÕ š¸šÚšũšÕÕš2šAŲEģfģj×{Õ…ģšÕ ģ¯ģŗ×ÄÕÎģãÕîģō×˙Õ Õģ'ģ+×<ÕFģJ×[Õfģj×wՁՇģŸģžģŪģīÕųÕ˙ģģ2ģRģcÕmÕsģˆģ’ģ¯ŲšŲČŲĖŊíŊņ×Õ Ŋ×$Õ.Ŋ2×?ÕIŊM×^ÕhŊ}ÕƒŊ’Ŋ–×§ÕąŊÆÕŅŊÕ×âÕėÕōŊ Ŋ×Õ)Ŋ>ÕIŊM×ZÕdÕjŊ‚ŊĄŊÁŊŌÕÜÕâŊúŊŊ5ŊFÕPÕVŊkŊxŊ‡Ų‹ŋŦŋ°×ÁÕËŋĪ×ÜÕæŋę×ūÕŋ ×Õ#ŋ'×8ÕBŋWÕ]ŋlŋpׁՋŋ ÕĢŋ¯×ŧÕÆÕĖŋäŋč×ųÕŋÕ#ŋ'×4Õ>ÕDŋ\ŋ{ŋ›ŋŦÕļÕŧŋÔŋīŋŋ Õ*Õ0ŋEŋSŋ]ŋwŲŲ˜ŲœÁÆÁĘ×Ũ]čÕî×ūÁ ] Õ& Á1 ÁC ÕM Áb Õm Á~ Õˆ ÕŽ Áĸ ÁŽ Á˛ ×à ÕÍ ÕĶ ×Ũ Õį Áë ×ü Õ!Á!Õ!!Á2!Õ?!ÁC!×T!Õ`!Áo!Ás!ׄ!Õ”!ÁŠ!Õŗ!ÁÄ!ÕÎ!Áß!Õč!Á÷!Áû!× "Õ"Õ"Á+"Á/"×@"ÕP"Áe"Õo"Á€"ÕŠ"Á›"Õ¤"Áŗ"ÁČ"ÕÔ"Áã"Áø"Õ#Á#Á#Á##Á-#Á7#ÁA#ÁK#Á[#Á_#×p#Õz#Á#Õš#Áž#×Ģ#Õĩ#Õģ#ÁĶ#Áč#Õō#Á$Õ$Á#$Õ-$Õ3$ÁG$ÁV$Ãj$Ųw$Ų‹$à$ÕĒ$Ãģ$ÕÅ$ÃÖ$Õã$Ãį$×ø$Õ%Õ%×%Ã%×-%Õ7%ÕA%ÃV%Õ\%Ãg%Ãr%Ã~%Â%ד%՝%ÕŖ%Ã˛%Ãļ%×Į%ÕŅ%ÃÕ%׿%Õņ%Ãõ%×&Õ &Õ&Ã*&Ã.&×?&ÕI&ÃM&×^&Õi&Ãm&×z&Õ„&ÕŠ&Ãĸ&Ãˇ&ÕÁ&ÃÖ&Õá&Ãō&Õü&Õ'Ã'Ã9'ÃY'Ãj'Õt'Õz'Î'Ô'è'Åŧ'ŲÉ'ŲŨ'Åō'Õü'Å (Õ(Å((Õ5(Å9(×J(ÕT(ÕZ(×j(Ån(×(Õ‰(Õ“(Ũ(ÕŽ(Åš(ÅÄ(ÅĐ(ÅÔ(×å(Õī(Õõ(Å)Å)×)Õ#)Å')×8)ÕC)ÅG)×T)Õ^)Õd)Å|)ŀ)ב)Õ›)ş)×°)Õģ)Åŋ)×Ė)ÕÖ)ÕÜ)Åô)Å *Õ*Å(*Õ3*ÅD*ÕN*ÕT*Ål*ŋ*ÅĢ*Åŧ*ÕÆ*ÕĖ*Åā*Åæ*Åú*Į+Ų+Ų/+Į3+×D+ÕN+ĮR+×_+Õi+Įm+×z+Õ€+Į’+Õœ+Įą+Õ¸+ĮÃ+ĮÔ+ĮØ+×ī+Õõ+Į,Į,×,Õ,Õ%,Į4,Į8,×I,ÕS,ĮW,×h,Õs,Įw,ׄ,ÕŽ,Õ”,ĮŦ,Į°,×Á,ÕË,ĮĪ,×ā,Õë,Įī,×ü,Õ-Õ -Į$-Į9-ÕD-ĮY-Õc-Įx-Õƒ-Į”-Õž-Õ¤-Įŧ-ĮÛ-Įû-Į .Õ.Õ.Į0.Į:.ĮN.Éb.Ųo.Ų.׉.Ų”.Õž.Éŗ.ÕŊ.ÉÍ.Õ×.Éč.Õō.É/Õ /É/Õ-/É1/×B/ÕL/ÕR/×b/Éf/×w/Ձ/Õ‡/ɒ/ÉŽ/ÉÎ/Éß/Õé/Õī/É0É0É0×$0Õ.0Õ40ÉC0ÉG0×X0Õb0Éf0×w0Õ‚0Ɇ0ד0՝0ÕŖ0Éģ0Éŋ0×Đ0ÕÚ0ÉŪ0×ī0Õú0Éū0× 1Õ1Õ1É31É71×H1ÕR1ÉV1×g1Õr1Év1׃1Ս1Õ“1ÉĢ1ɯ1×Ā1ÕĘ1ÉÎ1×ß1Õę1Éî1×û1Õ2Õ 2É#2É'2×82ÕB2ÉF2×W2Õb2Éf2×s2Õ}2Õƒ2ɛ2ɟ2×°2Õē2Éž2×Ī2ÕÚ2ÉŪ2×ë2Õõ2Õû2É3É3×(3Õ23É63×G3ÕR3ÉV3×c3Õm3Õs3ɋ3ɏ3× 3ÕĒ3ÉŽ3×ŋ3ÕĘ3ÉÎ3×Û3Õå3Õë3É4É4Õ"4É74ÕB4ÉS4Õ]4Õc4É{4ɐ4Õš4ɯ4Õē4ÉË4ÕÕ4ÕÛ4Éķ4É5Õ5É'5Õ25ÉC5ÕM5ÕS5Ék5ɀ5ÕŠ5ɟ5ÕĒ5Éģ5ÕÅ5ÕË5Éã5Éø5Õ6É6Õ"6É36Õ=6ÕC6É[6Ép6Õz6ɏ6Õš6ÉĢ6Õĩ6Õģ6ÉĶ6Éč6Õō6É7Õ7É#7Õ-7Õ37ÉK7É`7Õj7É7ÕŠ7ɛ7ÕĨ7ÕĢ7Éŋ7ÉÉ7ÉĶ7ÉŨ7Éį7Éņ7Éû7É8É8Ë.8ŲD8ŲX8Ë\8×m8Õw8Õ}8ˌ8ː8ץ8ÕĢ8˯8×Ā8ÕË8ËĪ8×Ü8Õæ8Õė8Ë9Ë9×9Õ#9Ë'9×89ÕC9ËG9×T9Õ^9Õd9Ë|9ˑ9Õ›9˰9Õģ9ËĖ9ÕÖ9ÕÜ9Ëô9Ë:Ë3:ËD:ÕN:ÕT:Ëh:Ër:Ë|:˛:Ų§:Ųē:Ųž:ß:ã:×ô:Õú:×;Õ;%;p2;A;V;Õb;m;w;;‹;•;Ĩ;ē;ÕÄ;Õ;Õß;ī;Õü;<Õ<,<Õ6<F<ÕO<^<Ųb<̓<͇<ט<Õž<ר<Õ˛<ÍÉ<pÖ<Íå<Íú<Õ=Í=Í=Í%=Í/=Í9=ÍE=ÍT=ŲX=Īy=Ī}=׎=Õ˜=Μ=׊=Õ¯=ך=ÕÃ=ĪÚ=pį=Īö=Ī >Õ>Ī">Ī,>Ī6>Ī@>ĪJ>ĪW>Īa>Īp>„>Ų•>™>×Ē>Õ´>¸>×Å>ÕË>×Õ>Õß>ô>Õ??$?Õ0?;?E?O?Y?c?p?z?„?“?Ų—?Ŋ?×Ë?ÕÕ?Ų?×ę?Õö?Ķ@@×@Õ@×&@Õ0@E@ÕQ@`@u@Ձ@Œ@–@ @Ē@´@ŋ@Ī@Ķ@×ā@Õę@î@×û@ÕA× AÕA*AÕ6AEAZAÕfAqA{A…AA™A§AąAĀAŲÄAáA×īAÕųAũA×BÕBĶ%B)B×6BÕKYKÕcKÕmK…K“KŠKÕŗKˇK×ÃKÕÍKŅK×ŨKÕįKëK×üKÕL L×LÕ&L*L×7LÕALÕGL_LpLÕzLLÕšLĢLÕĩLÕģLŲLęLÕôL MÕMÕM(M>MÕHMÕRMhMÕrMÕxMŒMĄMÕĢMÆMÕĐMÕÚMōMNNÕ N$N×0NÕ:N>N×JNÕTNXN×hNÕrNvNׇNÕ’N–N×ŖNÕ­NÕŗNËNĪN×ßNÕéNíN×ūNÕ O O×OÕ$OÕ*OBOROÕ\OqOÕ|OOÕ—O՝OģOĖOÕÖOėOÕöOÕüO P PÕ*PÕ4PJPÕTPÕZPnPrP׃PÕ‰PדP՝P´PpÁPĐPåPÕņPüPQQQ$Q0Q?QŅSQŲmQŅqQׂQÕŒQÕ–QŅĢQÕļQŅēQ×ĮQÕŅQÕÛQŅßQ×ōQ]ũQÕR×RŅ(RÕ2RÕ8RŅCRŅURÕ_RŅtRÕRҐRÕšRÕ RŅ´RŅĀRŅÄR×ÕRÕßRÕåR×īRÕųRŅũR×SÕSŅ)SÕ3SŅDSÕQSŅUS×fSÕrSҁSŅ…S×–SÕĻSŅģSÕÅSŅÖSÕāSŅņSÕúSŅ TŅ T×TÕ(TÕ.TŅ=TŅAT×RTÕbTŅwTՁTŅ’TÕœTŅ­TÕļTŅÅTŅÚTÕæTŅõTŅ UÕUŅ!UŅ+UŅ5UŅ?UŅIUŅSUŅ]UŅmUŅqUׂUÕŒUŅĄUÕŦUҰU×ŊUÕĮUÕÍUŅåUŅöUÕVŅVÕ VŅ1VÕ;VÕAVŅ[VŅ_V×pVÕzVŅVÕšVŅžV×ĢVÕĩVÕģVŅĶVŅčVÕōVŅWÕWŅ#WÕ-WÕ3WŅGWŅMWŅaWqWŲ|WÕ†WŠW×›WÕĻWģWÕÅWÕWÕßWđWÕũWX×XÕX,XÕ6XGXÕQXbXÕlX}XÕŒXXץXÕĢXÕąX×ÂXÆX×ŌXÕÜXÕæXûXÕYYÕ Y1YÕ:YKYOY×`YÕjYÕpYׁY…YבYÕ›YÕĄY˛YļY×ÍYÕ×YÛY×įYÕņYÕûYZÕZ!Z1Z5Z×LZÕVZZZ×jZÕtZÕ~Z‚ZדZÕšZĨZ×ĩZÕģZËZĪZ×âZņZõZ×[Õ[[× [Õ*[.[×;[ÕE[ÕR[V[×g[Õq[†[Õ‘[•[×ĸ[ÕŦ[Õ˛[Ę[ß[Õé[ū[Õ \\Õ$\Õ*\B\a\{\œ\Ļ\°\Ī\ŲŲ\Ųđ\Ųô\]"]×3]Õ=]A]×R]Õ]]a]×n]Õx]Õ~]–]š]×Ģ]Õĩ]š]×Ę]ÕÕ]Ų]׿]Õđ]Õö]^#^Õ-^B^ÕM^^^Õh^Õn^†^Ĩ^Å^Ö^Õā^Õæ^ú^__$_:_ŲI_Ųf_Ųj__מ_Õ¨_Õ˛_ļ_×Į_ÕÍ_××_Õá_å_×ö_Õ``×`Õ `$`×1`Õ;`ÕA`Y`x`˜`Š`Õŗ`Õš`Í`ë`õ`a aa+aŲ;aŲKaŲ[a×eaŲyaap›aÕĄaļaēa×ČapĶaÕŲaęaîa×˙aÕ bÕbb×'bÕ1bÕ;bPbÕVbablb×|bÕ‚b’b–b×§bÕŗb×ÄbČb×ÔbÕŪbÕäbõbųb× cÕc×'c+c×7cÕAcÕGcXc\c×mcÕyc׊cŽcךcÕ¤cÕĒcģcŋc×ĐcÕÚcÕäcčc×øcÕdÕ d!dÕ'd2d=d×MdÕSdcdgd×xdÕ„dוd™d×ĨdÕ¯dÕĩdÆdĘd×ÛdÕįd×ødüd×eÕeÕe)e-e×>eÕJe×[e_e×keÕueÕ{eŒeeץeÕ­eמeÂe×ÎeÕØeÕŪeīeķe×fÕf×!f%f×1fÕ;fÕAfRfVf×gfÕsfׄfˆf×”fÕžfÕ¤fĩfšf×ĘfÕĐfßfôfÕūfgÕgg×0gÕ:g>g×OgÕZg^g×kgÕugÕ{g“g—gרgÕ˛gĮgÕŌgÖg×ãgÕígÕķg h hÕ*h:hÕDhUhÕ_hÕlhhÕ‹h hÕĢhŧhÕÆhÕĖhähųhÕiiÕ#i4iÕ>iÕDi\iqiÕ{i‹iÕ•iĻiÕ°iÕšiÃiÍiØiįi÷iŲjŲj×!jŲ5jJjÕTjÕZjnjƒjՍjÕ“jžjĒjŽj×ŋjÕÉjÍj×ŪjÕéjíj×újÕkÕ k"k&k×7kÕAkVkÕakek×rkÕ|kÕ‚kškžkׯkÕškŊk×ÎkÕŲkŨk×ękÕôkÕúkl'lÕ1lFlÕQlblÕllÕrlŠlŸlÕŠlžlÕÉlÚlÕälÕęlmmÕ!m6mÕAmRmÕ\mÕbmvm|m†mm—mĻmļmŲÆmŲÖm×āmŲômøm× nÕnn"n×3nÕ=nRnÕ]nan×nnÕxnÕ~n–nĢnÕĩnÕģnĪnänÕînÕôn˙n oo× oÕ*o.o×?oÕJo[oÕeoÕkoƒo˜oÕĸoˇoÕÂoĶoÕŨoÕãoûopÕp/pÕ:pKpÕUpÕ[popup€p™pÔ­pŲēpŲÎpÔępÔqÔqÔq×%qÕ/qÕ5qÔ@qÔDq×UqÕ_qÕeq×uqÔyq׊qÕ”qÕšqÔĨqÔÁqÔáqÔōqÕüqÕrÔrÔ"rÔ&r×7rÕArÕGr×WrÔ[r×lrÕvrÕ|rԇrԓrԗrרrÕ˛rÕ¸rÔĮrÔËr×ÜrÕærÔęr×ûrÕsÔ s×sÕ!sÕ'sÔ?sÔCs×TsÕ^sÔbs×ssÕ~sԂs׏sÕ™sÕŸsÔˇsÔģs×ĖsÕÖsÔÚs×ësÕösÔús×tÕtÕtÔ/tÔ3t×DtÕNtÔRt×ctÕntÔrt×tÕ‰tՏtÔ§tÔĢt×ŧtÕÆtÔĘt×ÛtÕætÔęt×÷tÕuÕuÔuÔ#u×4uÕ>uÔBu×SuÕ^uÔbu×ouÕyuÕuԗuÔŦuÕļuÔËuÕÖuÔįuÕņuÕ÷uÔvÔ$vÕ.vÔCvÕNvÔ_vÕivÕovԇvԜvÕĻvÔģvÕÆvÔ×vÕávÕįvÔ˙vÔwÕwÔ3wÕ>wÔOwÕYwÕ_wÔwwԌwÕ–wÔĢwÕļwÔĮwÕŅwÕ×wÔīwÔxÕxÔ#xÕ.xÔ?xÕIxÕOxÔcxÔmxÔwxԁxԕxÖŠxŲļxŲĘxÖßxÕéxÖúxÕyÖyÖy×%yÕ/yÕ5yÖ@yÖDy×UyÕ_yÕey×uyÖyy׊yÕ”yÕšyÖĨyÖÁyÖáyÖōyÕüyÕzÖzÖ"zÖ&z×7zÕAzÕGz×WzÖ[z×lzÕvzÕ|zևz֓z֗zרzÕ˛zÕ¸zÖĮzÖËz×ÜzÕæzÖęz×ûzÕ{Ö {×{Õ!{Õ'{Ö?{ÖC{×T{Õ^{Öb{×s{Õ~{ւ{׏{Õ™{ÕŸ{Öˇ{Öģ{×Ė{ÕÖ{ÖÚ{×ë{Õö{Öú{×|Õ|Õ|Ö/|Ö3|×D|ÕN|ÖR|×c|Õn|Ör|×|Õ‰|Տ|Ö§|ÖĢ|×ŧ|ÕÆ|ÖĘ|×Û|Õæ|Öę|×÷|Õ}Õ}Ö}Ö#}×4}Õ>}ÖB}×S}Õ^}Öb}×o}Õy}Õ}֗}ÖŦ}Õļ}ÖË}ÕÖ}Öį}Õņ}Õ÷}Ö~Ö$~Õ.~ÖC~ÕN~Ö_~Õi~Õo~և~֜~ÕĻ~Öģ~ÕÆ~Ö×~Õá~Õį~Ö˙~ÖÕÖ3Õ>ÖOÕYÕ_Öw֌Õ–ÖĢÕļÖĮÕŅÕ×ÖīÖ€Õ€Ö#€Õ.€Ö?€ÕI€ÕO€Öc€Öm€Öw€ց€֕€ØŠ€Ųļ€ŲĶ€Øč€Õō€ØÕØ×$Õ.Ø2×?ÕIØM×ZÕ`ØrÕ|ؑÕ˜ØŖØ´ظ×΁ÕՁØāØä×õÕ˙Õ‚ׂ؂×*‚Õ4‚Õ:‚ØE‚ØW‚Õa‚Øv‚Ձ‚ؒ‚Õœ‚Õĸ‚Øļ‚ØÂ‚ØÆ‚×ׂÕá‚Õį‚×÷‚Øû‚× ƒÕƒÕƒØ'ƒØ3ƒØ7ƒ×HƒÕRƒÕXƒØgƒØkƒ×|ƒÕ†ƒ؊ƒ×›ƒÕσØĒƒ×ˇƒÕÁƒÕĮƒØßƒØãƒ×ôƒÕūƒØ„ׄՄØ"„×/„Õ9„Õ?„ØW„Ø[„×l„Õv„Øz„׋„Õ–„ؚ„×§„Õą„Õˇ„ØĪ„ØĶ„×ä„Õî„Øō„×…Õ…Ø…×…Õ)…Õ/…ØG…ØK…×\…Õf…Øj…×{…Õ†…؊…×—…ÕĄ…Õ§…Øŋ…ØÃ…×ԅÕŪ…Øâ…×ķ…Õū…؆׆ՆՆØ7†ØL†ÕV†Øk†Õv†؇†Õ‘†Õ—†د†ØÄ†ÕΆØã†Õî†Ø˙†Õ ‡Õ‡Ø'‡Ø<‡ÕF‡Ø[‡Õf‡Øw‡Õ‡Õ‡‡؟‡Ø´‡Õž‡ØĶ‡ÕŪ‡Øī‡Õų‡Õ˙‡ØˆØ,ˆÕ6ˆØKˆÕVˆØgˆÕqˆÕwˆ؏ˆؤˆÕވØÃˆÕΈØßˆÕéˆÕīˆØ‰Ø ‰Ø‰Ø!‰Ø5‰Ų9‰Úc‰Úg‰×x‰Õ‚‰Õˆ‰×™‰ڝ‰×ЉÕŗ‰ÕŊ‰ÚÁ‰×҉Õ׉Úæ‰Úę‰×ú‰ÕŠÕŠÚ#ŠÕ-ŠÚ>ŠÕHŠÚYŠÕbŠÚqŠÚuŠ×…ŠÕŠړŠ×¤ŠÕ¯ŠÚŗŠ×ŠÕƊÕЊÚčŠÚøŠÕ‹Ú‹Õ"‹Ú3‹Õ=‹ÕC‹Ú^‹Úb‹×s‹Õ}‹Õ‡‹ڜ‹Õĸ‹Úą‹ÚÆ‹ÕЋÚá‹Õí‹Úņ‹×ŒÕ ŒÕŒÚ+ŒÕ1ŒÚ<ŒÚKŒÚOŒ×`ŒÕjŒÚnŒ×ŒÕŠŒڎŒ×›ŒÕĨŒÕ̌ÚÌÚØŒÕâŒÚųŒÕÕÚ.ÚNÚiÕoڃڍڜÚąÕģÚˍÕՍÚæÕđÕũÚŽÕŽÚ,ŽÕ6ŽÚGŽÕQŽÕZŽÚdŽÚsŽ܎ŽŲ›ŽŲ¯ŽÜŗŽ×ĎÕΎÕԎ×åŽÜųŽÕÜ×ÕÕ(Ü=ÕCÜN×\ÕfÕpÜt×Õ‹Õ•ÜŠÕŗÕēÜƏÜ׏Üۏ×ėÕöÕÜÕÜ*Ü?ÕIÜZÕfÜj×{Õ…ÕܤÕǐÜĩÜĐÜȐ×ؐÕãÜį×øÕ‘ܑבՑÕ$‘Ü<‘ÜQ‘Õ[‘Ür‘Õ|‘Õˆ‘ܝ‘Õ§‘Üŧ‘ÕĮ‘ÜØ‘Õâ‘Õč‘Üü‘Ü’Ü’Ü*’Õ4’ÜD’ÕN’Ü_’Õi’Õv’ܕ’ܯ’ÜВÜڒÜî’Ųō’Ū“Ū “×1“Õ;“ÕA“×R“ŪV“×b“Õl“Õv“Ūz“׋“Õ•“Ū™“×ϓհ“Ū´“×Á“ÕʓŪۓŪߓ×đ“Õú“Õ”Ū”Õ”Ū.”ŪC”ÕM”Ū^”Õj”Ūn”×”Õ‰”Õ“”Ū¨”ÕŽ”Ūš”ŪȔŪĖ”×Ũ”Õį”Ūë”×ü”Õ•Ū •וÕ"•Õ(•Ū@•ŪU•Õ_•Ūv•Õ€•ÕŒ•ŪĄ•ÕĢ•ŪĀ•Õ˕ŪܕÕæ•Õė•Ū–Ū –Ū–Ū.–Õ8–ŪH–ÕR–Ūc–Õm–Õz–Ū™–Ūŗ–ŪԖŪŪ–Ūí–ā—Ų—Ų)—ā-—×>—ÕH—ÕN—×_—ās—Õ~—ā‚—×Ž—Õ˜—Õĸ—⎗ÕŊ—āȗ×֗Õā—Õę—āî—×û—Õ˜Õ˜ā#˜Õ-˜Õ4˜ā@˜āQ˜āU˜×f˜Õp˜Õz˜ā˜Õ•˜⤘āš˜ÕØāԘÕā˜āä˜×õ˜Õ˙˜Õ ™ā™Õ$™ā/™ā>™āB™×S™Õ]™āa™×r™Õ}™⁙׎™Õ˜™Õž™āļ™ā˙Õՙāė™Õö™ÕšāšÕ!šā6šÕAšāRšÕ\šÕbšāvšā€šāš⤚ÕޚāžšÕȚāؚÕãšÕđšā›ā)›āJ›āT›āh›⃛ؐ›Ų¤›⨛ך›ÕÛÕɛ×֛âæ›âę›×û›ÕœÕœâ$œÕ*œâ9œâNœÕXœâiœÕuœâyœ×ŠœÕ”œÕžœâŗœÕšœâĜâ͜âל×čœÕōœâöœ×Õâ×#Õ-Õ3âKâ`Õj⁝Õ‹Õ—âŦÕļâ˝Õ֝âįÕņÕ÷⠞âžâ$žâ9žÕCžâSžÕ]žânžÕxžÕ…ž⤞⾞âߞâéžâŸŲŸŲ7ŸŲ;ŸäeŸäiŸ×zŸÕ„ŸÕŠŸ×›Ÿ䯟ÕēŸ侟×ƟÕԟÕ۟äķŸÕųŸä × Õ Õ& ä* ×7 ÕA ÕK ä_ Õi Õp ä| 䍠䑠×ĸ ÕŦ Õļ äË ÕŅ äā äõ Õ˙ äĄÕĄä Ą×1ĄÕ;ĄÕEĄäZĄÕ`ĄäkĄäzĄä~Ą×ĄÕ™Ą䝡׎ĄÕšĄäŊĄ×ĘĄÕÔĄÕÚĄäōĄäĸÕĸä(ĸÕ2ĸÕ>ĸäSĸÕ]ĸärĸÕ}ĸäŽĸÕ˜ĸÕžĸä˛ĸäŧĸäËĸäāĸÕęĸäúĸÕŖäŖÕŖÕ,ŖäKŖäeŖ䆪䐪äąŖŲģŖŲŌŖũŖŲ ¤Ų¤Ų-¤×7¤Ų`¤Õj¤n¤×¤Õ‰¤¤×™¤ÕŖ¤Õ¯¤ŗ¤×ĤÕΤÕÔ¤×á¤ņ¤õ¤×ĨÕĨÕĨ×'Ĩ+Ĩ×7ĨÕAĨÕKĨ`ĨÕjĨ{ĨÕ…Ĩ–ĨÕŸĨ°Ĩ´Ĩ×ÅĨÕĪĨÕÕĨ×âĨōĨöĨ×ĻÕĻÕĻ×$Ļ4Ļ8Ļ×OĻÕUĻ×bĻrĻvĻׇĻÕ‘ĻÕ—ĻפϰĻ×ÃĻÕÍĻŅĻ×âĻÕėĻđĻ×üĻÕ§Õ§§×'§Õ1§Õ7§×H§L§×X§Õb§Õh§y§}§×ާÕ˜§Õž§×̧ˇ§ƧÛ§ė§Õö§Õ¨¨Õ¨Õ(¨,¨×=¨ÕG¨K¨×X¨Õ^¨n¨ƒ¨Õ¨¨Õ§¨¸¨Õ¨Õ΍͍×ä¨ÕՊŠ×ŠÕ)ŠÕ/ŠGŠKŠ×\Š`Š×mŠÕwŠÕŠ’ŠÕœŠÕŠŠžŠÕČŠÕΊŨŠōŠĒÕ ĒÕĒ(ĒÕ2ĒÕ?ĒCĒ×TĒXĒ×eĒÕoĒÕyĒŠĒÕ”ĒÕĄĒĨĒ×ļĒÕĀĒÕĘĒÎĒ×ßĒÕéĒÕīĒ×ĢĢ×ĢÕĢÕ Ģ1Ģ5Ģ×FĢÕPĢTĢ×`ĢÕjĢnĢ×{ĢÕ…ĢՒ̧ĢÕąĢÁĢÕËĢÜĢÕæĢÕīĢųĢŦŦÕ'Ŧ8ŦÕ>ŦNŦcŦÕmŦ}ŦÕ‡Ŧ˜ŦÕĸŦÕ¯ŦÄŦÕÎŦãŦÕîŦ˙ŦÕ ­Õ­#­)­3­=­G­Q­[­e­o­y­ƒ­­—­Ą­Ģ­ĩ­ŋ­É­Ô­ō­æ ŽŲŽŲ.Žæ2Ž×CŽÕMŽÕWŽæ[Ž×kŽÕuŽÕŽ攎ÕšŽæĨŽæ°Ž×ĀŽÕĘŽæÎŽ×ÚŽÕäŽÕęŽæûŽæ˙Ž×¯Õ¯Õ$¯æ9¯Õ?¯æN¯æc¯Õm¯æ~¯ÕН掯ן¯ÕНÕŗ¯æČ¯ÕίæŲ¯æč¯æė¯×ũ¯Õ°æ °×°Õ'°æ+°×8°ÕB°ÕH°æ`°æu°Õ°新Õ °ÕŦ°æÁ°Õ˰æā°Õë°æü°ÕąÕ ąæ ąæ*ąæ9ąæNąÕXąæhąÕrąæƒąÕąÕšąæšąæĶąæôąæū࿞Ų&˛ŲJ˛ŲT˛Ųk˛z˛Ų„˛Ų˛Õ•˛Ų ˛ÕϞŲļ˛ŲÆ˛ŲÖ˛×ā˛Ųë˛Õņ˛Ųŗ ŗ×ŗÕ$ŗÕ.ŗ2ŗ×?ŗÕIŗÕOŗ_ŗtŗ…ŗÕŗÕ™ŗĒŗÕ´ŗÕÁŗÅŗ×ÖŗÕāŗÕęŗîŗ×˙ŗÕ ´Õ´× ´$´×0´Õ:´Õ@´Q´U´×f´Õp´t´×€´ÕŠ´Ž´×›´ÕĨ´Õ˛´Ņ´ë´ ĩĩ%ĩ)ĩ×:ĩÕDĩÕNĩRĩ×cĩÕmĩÕsĩׄĩˆĩ×”ĩÕžĩÕ¤ĩĩĩšĩ×ĘĩÕÔĩØĩ×äĩÕîĩōĩ×˙ĩÕ ļÕļ+ļÕ5ļEļÕOļ`ļÕjļÕsļ}ļŒļļץļÕĢļ¯ļ×ŧļÕÆļĘļ××ļÕáļÕëļīļ×ˇÕ ˇˇÕ*ˇ.ˇ×;ˇÕEˇÕKˇ_ˇpˇ…ˇ–ˇÕ ˇÕǎģˇÕŎÕŌˇįˇÕņˇ¸Õ¸¸¸(¸2¸<¸F¸P¸Z¸d¸n¸x¸‚¸Œ¸–¸ ¸̏ĸÔ¸Ųä¸Ųô¸Ų˙¸ÕšŲšÕš;šKšŲ[šŲkšŲvšÕ|šŲ‡šÕš˛šÁšŲËšŲÖšÕÜšŲįšÕíšŲũšŲ ēŲē×'ēŲ2ēÕ8ēŲLēPē×aēÕkēÕuēēÕ—ēÕĄēļēÕĀēŅēÕÛēėēÕõēģģ+ģÕ5ģÕ?ģPģÕZģÕgģkģ×|ģÕ†ģՐģ”ģ×ĨģÕ¯ģÕĩģׯģĘģ×ÖģÕāģÕæģ÷ģûģ× ŧÕŧŧ×&ŧÕ0ŧ4ŧ×AŧÕKŧÕXŧmŧÕwŧ‡ŧÕ‘ŧĸŧÕŦŧÕĩŧŋŧÎŧŌŧ×ãŧÕíŧÕ÷ŧûŧ× ŊÕŊÕŊ×-Ŋ1Ŋ×=ŊÕGŊÕMŊ^ŊbŊ×sŊÕ}ŊŊ׍ŊÕ—Ŋ›ŊרŊÕ˛ŊÕŋŊÔŊÕŪŊîŊÕøŊ žÕžÕž&ž5ž9ž×JžÕTžXž×ežÕožsž×€žÕŠžÕ”ž˜ž×ŠžÕŗžČžÕĶžמ×äžÕîžÕôžŋŋ.ŋ?ŋÕIŋÕSŋdŋÕnŋÕ{ŋŋÕšŋĢŋÕąŋŊŋĮŋŅŋÛŋåŋīŋųŋĀ ĀĀ!Ā+Ā5Ā?ĀIĀTĀmĀ}ĀŲĀŲĀŲ­ĀŲŊĀėĀüĀŲ ÁŲÁŲ,ÁŲ<Á}ÁŲ‡ÁŲžÁ­ÁŲˇÁŲÂÁÕČÁŲĶÁÕŲÁŲéÁŲųÁŲ Â×ÂŲÂÕ$ÂŲ8Â<Â×MÂÕWÂÕaÂeÂ×yÂÕƒÂՍ‘Â×ĸÂÕŦ°Â×ŊÂÕĮÂËÂרÂÕáÂņÂÃÃÕ!ÃÕ+Ã<ÃÕFÃÕSÃWÃ×hÃÕrÃÕ|ÀÃבÃÕ›ÃÕĨÊÃ×ēÃÕÄÃČÃ×ÕÃÕßÃãÃ×đÃÕųÃÄÄ×%ÄÕ/Ä3Ä×?ÄÕIÄMÄ×ZÄÕdÄÕqĆÄՐĠÄÕĒÄģÄÕÅÄÕÎÄØÄįÄëÄ×üÄÕÅÕÅÅ×%ÅÕ/ÅÕ5Å×FÅJÅ×VÅÕ`ÅÕfÅwÅ{Å׌ÅÕ–ÅšÅ×ĻÅÕ°Å´Å×ÁÅÕËÅÕØÅíÅÕ÷ÅÆÕÆ"ÆÕ,ÆÕ5Æ?ÆNÆRÆ×iÆÕsÆwÆ×ŽÆÕ˜ÆœÆ×ŗÆˇÆ×ĘÆÎÆ×āÆ÷ÆûÆ× ĮÕĮĮ×&ĮÕ0Į4Į×AĮÕKĮÕXĮwĮ‘Į˛ĮŧĮËĮĪĮ×āĮÕęĮîĮ×ûĮÕČ Č×ČÕ ČÕ*Č.Č×?ČÕIČ^ČÕiČmČ×zČÕ„ČÕŠČžČ¯ČÄČÕČÕßČÕéČúČÕÉÕÉ&ÉÕ0ÉAÉÕGÉSÉ]ÉgÉqÉ{É…ÉÉ™ÉŖÉ­ÉˇÉÁÉËÉÕÉāÉųÉ ĘŲĘŲ)ĘŲ9ĘŲIĘxĘˆĘŲ˜ĘŲ¨ĘŲ¸ĘŲČĘūĘŲ ËŲË,ËŲ6ËŲAËÕGËŲRËÕXËŲhËŲxËŲˆË×’ËŲËÕŖËŲˇËģË×ĖËÕÖËÕÜËëËĖĖÕĖÕ%Ė6ĖÕ@ĖÕMĖQĖ×hĖÕrĖvĖׇĖÕ‘Ė•ĖץĖÕĢ˝Ė×ŧĖÕÆĖÕĶĖōĖ Í-Í7ÍAÍPÍTÍ×eÍÕoÍÕyÍ}Í׎ÍÕ˜ÍÕžÍ×¯ÍŗÍ×ŋÍÕÉÍÕĪÍāÍäÍ×õÍÕ˙ÍÎ×ÎÕÎÎ×*ÎÕ4ÎÕAÎVÎÕ`ÎpÎÕz΋ÎÕ•ÎÕžÎ¨ÎˇÎģÎ×ĖÎÕÖÎÕāÎäÎ×õÎÕ˙ÎÕĪ×ĪĪ×&ĪÕ0ĪÕ6ĪGĪKĪ×\ĪÕfĪjĪ×vĪՀ΄ĪבĪÕ›ĪÕ¨ĪŊĪÕĮĪ×ĪÕáĪōĪÕüĪÕĐĐĐ"Đ×9ĐÕCĐGĐ×XĐÕbĐfĐ×rĐÕ|Đ€Đ׍ĐÕ—ĐÕ¤ĐšĐÕÃĐĶĐÕŨĐîĐÕøĐÕŅ ŅŅ$Ņ(Ņ×9ŅÕCŅGŅ×TŅÕ^ŅbŅ×oŅÕyŅÕƒŅ‡ŅטŅÕĸҎŅÕÂŅÆŅ×ĶŅÕŨŅÕãŅ÷ŅŌŌ.ŌÕ8ŌÕBŌSŌÕ]ŌÕjŌŌÕ‰ŌšŌÕ ŌŦŌļŌĀŌĘŌÔŌŪŌčŌōŌüŌĶĶĶ$Ķ/ĶHĶXĶŲhĶŲxĶŲƒĶÕ‰ĶŲ”ĶÕšĶŋĶĪĶŲßĶŲīĶŲúĶÕÔŲ ÔÕÔHÔŲRÔŲpÔŲtÔėžÔėĸÔ×ŗÔÕŊÔÕÃÔ×ÔÔėčÔÕķÔė÷Ô×ÕÕ ÕÕÕė,ÕÕ2Õė=Õ×KÕÕUÕÕ_ÕėcÕ×pÕÕzÕÕ„Õė˜ÕÕĸÕÕŠÕėĩÕėÆÕėĘÕ×ÛÕÕåÕÕīÕėÖÕ ÖėÖė.ÖÕ8ÖėIÖÕUÖėYÖ×jÖÕtÖÕ~Öė“ÖÕ™Öė¤ÖėŗÖėˇÖ×ČÖÕŌÖėÖÖ×įÖÕōÖėöÖ××Õ ×Õ×ė+×ė@×ÕJ×ėa×Õk×Õw×ėŒ×Õ–×ėĢ×Õļ×ėĮ×ÕŅ×Õ××ėë×ėõ×ėØėØÕ#Øė3ØÕ=ØėNØÕXØÕeØ넨ėžØėŋØėÉØėęØŲôØŲŲŲŲî@ŲîDŲ×UŲÕ_ŲÕeŲ×vŲîŠŲÕ•Ųî™Ų×ĨŲÕ¯ŲÕšŲîÎŲÕÔŲîßŲ×íŲÕ÷ŲÕÚîÚ×ÚÕÚÕ&Úî:ÚÕDÚÕKÚîWÚîhÚîlÚ×}ÚÕ‡ÚÕ‘ÚîĻÚÕŦÚîģÚîĐÚÕÚÚîëÚÕ÷ÚîûÚ× ÛÕÛÕ Ûî5ÛÕ;ÛîFÛîUÛîYÛ×jÛÕtÛîxÛ׉ÛÕ”Ûî˜Û×ĨÛÕ¯ÛÕĩÛîÍÛîâÛÕėÛîÜÕ ÜÕÜî.ÜÕ8ÜîMÜÕXÜîiÜÕsÜÕyÜîÜî—ÜîĻÜîģÜÕÅÜîÕÜÕßÜîđÜÕúÜÕŨî&Ũî@ŨîaŨîkŨîŒŨŲ–ŨŲŋŨŲÉŨŲōŨŲüŨŲ%ŪŲ/ŪŲXŪŲbŪŲ‹ŪŲ•ŪŲŦŪŧŪŲĖŪŲÜŪŲėŪŲüŪŲ ßŲß×&ßŲ1ßÕ;ßPßÕ[ßp߁ßÕ‹ßÕ•ßĻßÕ°ßÕŊßÁß×Ôß]ßßÕéßíß×ūßÕāÕā×ā#ā×/āÕ9āÕ?āPāTā×eāÕoāsā×āÕ‰āāךāÕ¤āÕąāÆāÕĐāāāÕęāûāÕáÕáá'á<áTáÕ^áváÕƒá‡áטáÕĸáÕŦá°á×ÁáÕËáÕŅá×âáæá×ōáÕüáÕâââ×(âÕ2â6â×BâÕLâPâ×]âÕgâÕtâ‰âÕ“âŖâÕ­âžâÕČâÕŅâÛâęâîâ×˙âÕ ãÕãã×.ãÕ4ã×EãIã×UãÕ_ãÕeãvãzã׋ãÕ•ã™ã×ĨãÕ¯ãŗã×ĀãÕĘãÕ×ãėãÕöãäÕä!äÕ+äÕ4ä>äMäQä×bäÕläÕväzä׋äÕ•äÕ›ä×Ŧä°ä×ŧäÕÆäÕĖäŨäáä×ōäÕüäå× åÕåå×'åÕ1åÕ>åSåÕ]åmåÕwåˆåÕ’åÕ›åĨå´å¸å×ÉåÕĶåÕŨåáå×ōåÕüåտ׿æ×#æÕ-æÕ3æDæHæ×YæÕcægæ×sæÕ}ææ×ŽæÕ˜æÕĨæēæÕÄæÔæÕŪæīæÕųæÕį įįį×0įÕ:įÕDįHį×YįÕcįÕiį×zį~į׊įÕ”įÕšįĢį¯į×ĀįÕĘįÎį×ÚįÕäįčį×õįÕ˙įÕ č!čÕ+č;čÕEčVčÕ`čÕičsč‚č†č×—čÕĄčÕĢč¯čׯčÕĖč×Ũčáč×íčÕ÷čÕũčéé×#éÕ-é1é×=éÕGéKé×XéÕbéÕoé„éÕŽéžéÕ¨éšéÕÃéÕĖéÖéåééé×úéÕęÕęę×#ęÕ-ęÕ3ę×DęHę×TęÕ^ęÕdęuęyę׊ęÕ”ę˜ęפęÕŽę˛ę×ŋęÕÉęÕÖęëęÕõęëÕë ëÕ*ëÕ3ë=ëLëPë×aëÕkëÕuëyëאëÕ–ë×§ëĢëסëÕÁëÕĮëØëÜë×íëÕ÷ëûë×ėÕėė×"ėÕ,ėÕ9ėNėÕXėhėÕrėƒėՍėÕ–ė ė¯ėŗė×ÄėÕÎėÕØėÜė×íėÕ÷ėÕũė×íí×íÕ(íÕ.í?íCí×TíÕ^íbí×níÕxí|í׉íÕ“íÕ íĩíÕŋíĪíÕŲíęíÕôíÕũíîîî×+îÕ5îÕ?îCî×ZîÕ`î×qîuîׁîÕ‹îÕ‘îĸîĻîסîÕÁîÅî×ŅîÕÛîßî×ėîÕöîÕī"ī<ī]īgīvīzī׋īÕ•ī™ī×ĻīÕ°ī´ī×ÁīÕËīÕÕīŲī×ęīÕôī đÕđđ×%đÕ/đÕ5đIđZđođÕyđŠđՐđœđĻđ°đēđÄđÎđØđâđėđöđņ ņņđ5ņŲBņŲVņđZņ×kņÕuņÕ{ņ׌ņđ ņÕĢņđ¯ņ×ģņÕÅņÕĪņđäņÕęņđõņ×ōÕ ōÕōđō×(ōÕ2ōÕ<ōđPōÕZōÕaōđmōđ~ōđ‚ōדō՝ōÕ§ōđŧōÕÂōđŅōđæōÕđōđķÕ ķđķ×"ķÕ,ķÕ6ķđKķÕQķđ\ķđkķđoķ×€ķÕŠķđŽķןķÕĒķđŽķ×ģķÕÅķÕËķđãķđøķÕôđôÕ#ôÕ/ôđDôÕNôđcôÕnôđôÕ‰ôՏôđŖôđ­ôđŧôđŅôÕÛôđëôÕõôđõÕõÕõđ<õđVõđwõđõđ•õĨõŲĩõŲįõüõ öÕöÕ!ö2öÕ<öÕIö^öoöÕyöÕƒö”öÕžöÕĢö¯ö×ĀöÕĘöÕÔöØö×éöÕķöÕųö× ÷÷×÷Õ$÷Õ*÷;÷?÷×P÷ÕZ÷^÷×j÷Õt÷x÷×…÷Տ÷Õœ÷ģ÷Õ÷ö÷øøø×$øÕ.ø2ø×?øÕIøMø×ZøÕdøÕnørø×ƒøÕøĸøÕ­øąø×žøÕČøÕÎøâøķø÷ø×ųÕų'ųÕ2ų6ų×CųÕMųÕSųkų€ųÕŠųŸųÕĒųģųÕÅųÕËųãųøųÕúúÕ"ú3úÕ=úÕCú[úpúÕzú‹úÕ‘úĄúļúÕĀúÄú×ÕúÕāúäú×ņúÕûúÕûûû)û3û=ûGûQû[ûeûoûyûƒû¤ûŲŽûŲÅûÕûŲåûŲü,ü=üÕGüÕQübüÕlüÕyü}ü׎ü’ü×ĻüÕ°üČüÕÕüŲü×ęüÕôüÕūüũ×ũÕũÕ#ũ×4ũ8ũ×DũÕNũÕTũeũiũ×zũÕ„ũˆũ×”ũÕžũĸũׯũÕšũÕÆũÛũÕåũõũÕ˙ũūÕūÕ#ū-ū<ū@ū×QūÕ[ūÕeūiū×zūÕ„ūÕŠū×›ūŸū×ĢūÕĩūÕģūĖūĐū×áūÕëūīū×ûūÕ˙ ˙×˙Õ ˙Õ-˙L˙f˙‡˙‘˙ ˙¤˙×ĩ˙Õŋ˙Ã˙×Đ˙ÕÚ˙Ū˙×ë˙Õõ˙Õ˙˙×Õ3Õ>B×OÕYÕ_s„™ÕŖ´ÕēÆĐÚäîø  AŲKŲbrŲ‚Ų´ÉÚÕäÕî˙Õ Õ×+/×CÕMeÕrvׇՑ՛Ÿ×°ÕēÕĀ×ŅÕ×áÕëÕņ×Õ!%×1Õ;?×LÕVÕcxÕ‚’Õœ­ÕˇÕĀĘŲŨ×îÕøÕ×Õ!Õ'×8<×HÕRÕXim×~ÕˆŒ×˜ÕĸĻ×ŗÕŊÕĘé$.=A×RÕ\`×mÕw{׈Ւ՜ ×ąÕģĐÕÛß×ėÕöÕü!6Õ@QÕWcmw‹•ŸŠŗŊ×ŲøōŲŲ!Ų1ŲAŲQ×uŲ†Ų›ōŸ×°ÕēÕÄōČ×ŲÕãōôÕōÕō0Õ<ōMÕWÕ]ōwōŒÕ—ō¨ÕļōËōÜÕæÕđō Õ Õ ō ×- Õ7 ÕA ōE ×V Õ\ ōg ōk ×| Õ† Ր ō” ×Ģ Õą ōĀ ōÄ ×Û Õá ōđ ō Õ ō ×( Õ2 Õ< ō@ ×P ÕV ōa ōq Õ{ ō’ Õœ ÕŠ ōž ÕÄ ōË ōÕ ōÛ ōæ ōę ×û Õ Õ ō × Õ) Õ/ ×9 ÕF ōJ ×[ Õe Õk ōz ō~ ׏ Õ™ ÕŖ ō§ ׸ Õž ōÉ ōÍ ×Ū Õč Õō ōö × Õ ō" ō& ×= ÕC ōR ōi Õu ōy ׊ Õ” Õž ōĸ ײ Õ¸ ōà ōĶ ÕŨ ōô Õū Õ ō Õ& ō- ō7 ō= ōH ōL ×] Õg Õq ōu ׁ Õ‹ Õ‘ ×› Õ¨ ōŦ ×Ŋ ÕĮ ÕÍ ōÜ ōņ ōÕ Õō'Õ1Õ>ōB×SÕ]Õgōk×|ՆՌםōĄ×­ÕˇÕŊōÎōŌ×ãÕíōņ×ũÕō ×Õ"Õ/ōDÕNō^ÕhōyÕƒÕŒō–ōĨōŠ×ēÕÄōČ×ÕÕßōã×đÕúÕō×Õ#ō8ÕCōG×TÕ^Õdōxō‰ō×žÕ¨ōŊÕČōĖ×ŲÕãÕéōō×Õ!ō6ÕAōE×RÕ\Õbō{ōא՚ōž×¯ÕšōŊ×ÍÕ×ōÛ×ėÕ÷ōû×ÕÕō1ōAÕGōSōnÕxō“ÕžōĩÕÁōÅ×ŌÕØōäōč×ųÕō×Õ"ō&×6Õ@ōD×UÕ`ōd×qÕ{ՁōšōĒÕ°ōŧō×Õáōå×üÕōÕ*ō;ÕAōMōbÕlō}Õƒō“ō¨Õ˛ōļ×ĮÕŌōÖ×ãÕíÕķō ō!Õ+ō@ÕKō\ÕfÕlōō‹ō•ōŸōŠōŗōŊōĮōŅōÛōåōīōõōüōō%Ų5ŲEŲUŲeŲ ô¯ŲšŲÉŲŲŲéŲų×Ų.ŲCôG×XÕbÕlôpׁՋô ÕĢô¯×ŧÕČôĖ×ŨÕįôüÕô ×Õ$ô(×5Õ?ÕE×[ô_×pÕ{ô׌՚ô¯ôĀÕĘÕÔôåÕīÕüô×ÕÕ%ô)×:Õ@ôKôO×`ÕjÕtôx׏Օô¤ô¨×ŋÕÅôÔôëÕ÷ôû× ÕÕ ô$×4Õ:ôEôUÕ_ôvՀՍôĸÕ¨ô¯ôšôŋôĘôÎ×ßÕéÕķô÷×Õ Õ×Õ*ô.×?ÕIÕOô^ôb×sÕ}Õ‡ô‹×œÕĸô­ôą×ÂÕĖÕÖôÚ×ņÕ÷ôô ×!Õ'ô6ôMÕYô]×nÕxÕ‚ô†×–Õœô§ôˇÕÁôØÕâÕīôÕ ôôô!ô,ô0×AÕKÕUôY×eÕoÕu×ÕŒô×ĄÕĢÕąôĀôÕôæÕđÕúô ÕÕ"ô&×7ÕAÕKôO×`ÕjÕpׁô…×‘Õ›ÕĄô˛ôļ×ĮÕŅôÕ×áÕëôī×üÕÕô(Õ2ôBÕLô]ÕgÕpôzô‰ô×žÕ¨ôŦךÕÃôĮ×ÔÕŪÕčôė×ũÕ ô Õ' ô+ ×8 ÕB ÕH ô\ ôm ôq ׂ ÕŒ ôĄ ÕŦ ô° ×Ŋ ÕĮ ÕÍ ôæ ôę ×û Õ!ô!Õ%!ô)!×6!Õ@!ÕF!ô_!ôc!×t!Õ~!ô‚!ד!՝!ôĄ!׹!Õģ!ôŋ!×Đ!ÕÛ!ôß!×ė!Õö!Õü!ô"ô%"Õ+"ô7"ôR"Õ\"ôw"Õ‚"ô™"ÕĨ"ôŠ"×ļ"Õŧ"ôČ"ôĖ"×Ũ"Õį"ôë"×ü"Õ#ô #×#Õ$#ô(#×9#ÕD#ôH#×U#Õ_#Õe#ô~#ôŽ#Õ”#ô #ôģ#ÕÅ#ôÉ#×ā#Õë#ô$Õ$ô$Õ%$ô1$ôF$ÕP$ôa$Õg$ôw$ôŒ$Õ–$ôš$×Ģ$Õļ$ôē$×Į$ÕŅ$Õ×$ôđ$ô%Õ%ô$%Õ/%ô@%ÕJ%ÕP%ôe%ôo%ôy%ôƒ%ô%ô—%ôĄ%ôĢ%ôĩ%ôŋ%ôÉ%ôĶ%ôŲ%ôā%ôę%ôų% &Ų&Ų)&Ų9&ŲI&c&Ųm&Ųy&ŲŒ&ؐ&öą&öÆ&ÕÍ&×Û&Õå&öü&] 'ö'ö-'Õ9'öD'öN'öX'öb'öl'öw'ö'ö›'ŲĨ'Ųą'ŲÄ'ŲČ'øé'øū'Õ(×(Õ(ø2(Õ>(øM(øb(Õn(øy(øƒ(ø(ø—(øĄ(ø°(øÅ(ÕĪ(øę(Õô(Õū(ø)Õ)Õ)ø,)ø<)ÕF)ÕP)øT)×`)Õj)øn)×z)Õ„)øˆ)ו)ÕŸ)ø´)Õŋ)øÃ)×Đ)ÕÚ)Õā)øū)ø*Õ*ø/*Õ9*Õ?*øM*øc*Õm*Õw*ø*Õ—*՝*øą*øĐ*øë*Õõ*Õ˙*ø+Õ+Õ+ø-+ø=+ÕO+ø_+Õi+øy+Õƒ+ø”+Õž+øŗ+Õž+øĪ+ÕŲ+Õß+øũ+ø,ø.,Õ<,øJ,ø`,Õj,Õt,øŠ,Õ”,Õš,øĒ,ø´,øÃ,úÚ,Ųę,Ų-×"-Ų--Õ7-ú;-×L-ÕV-Õ]-úk-Ųv-Õ|-ׂ-Ų-Ųš-Õ¤-ú¨-ׯ-úč-úũ-Õ.Õ .ú.Õ#.ú3.úH.ÕT.úc.úx.Õ„.ú“.ú¨.Õ˛.Õ¸.úĮ.úÜ.Õč.ú÷.ú /Õ/ú'/úÕ>Õ>#>7>ÕA>ÕG>V>j>Õt>Õz>‰>>Õ¨>Ŧ>×ŧ>ÕÆ>ÕĐ>å>Õī>?Õ ??Õ$?3?7?×G?ÕQ?U?×f?Õq?u?ׂ?ÕŒ?Õ’?Ē?Ž?מ?ÕČ?Ũ?Õč?ė?×ų?Õ@Õ @!@5@Õ?@ÕE@T@h@Õr@‡@Õ’@Ŗ@Õ­@Õŗ@Ë@ß@Õé@ū@Õ AAÕ$AÕ,A6AEAIA×YAÕcAÕiAsA}A‡A–AšA×ĒAÕ´AÕēAÄAĶAįAÕņAÕ÷AB B×BÕ$BÕ*B9B=B×MBÕ]BrBÕ|BBÕ—B¨BÕąBĀBÄB×ÔBÕŪBâB×ķBÕūBCÕCÕC7CKCÕUCjCÕuC†CՐCÕ–CĒC´CžCÉCØCđCÕDD,DŲ5DŲZD×dDŲnDÕxDŽD]™DÕŸDŽD˛D×ÄD]ĪDÕÕDäDúD]EÕ EE.EÕ8EÕ>EMEQE×cE]nEÕtEƒE‡E×—EÕ§EŧEÕÆE×EÕáEōEÕûE FF×FÕ(F,F×=FÕHFYFÕcFÕiFFŸFŋFĐFÕÚFÕāFôFGG&G5GaGŽGŲ¨GŲŦGÖGÚG×ëGÕõG HÕHH×&HÕ0HÕ6HJHgHŲqHŲ€HŲ„HĨHŠH×ēHÕÄHČH×ÕHÕßHÕéHíH×ūHÕIIÕ(I,I×9IÕCIÕII]ImIqIׂIÕŒIIםIÕ§IÕąIĩIׯIÕĐIåIÕđIôI×JÕ JÕJ%J5J9J×JJÕTJiJÕtJxJ×…JՏJÕ•J­JąJ×ÂJÕĖJĐJ×áJÕėJđJ×ũJÕKÕ K%K)K×:KÕ@KOKSK×dKÕjKyKŽKÕ˜KœK×­KÕ¸KŧK×ÉKÕĶKÕŲKņKLÕL%LÕ0LALÕKLÕQLeLoLyLąLŲģLŲĘLŲÎLīL MÕM1MÕ;MLMÕRM\MmMqMׂMÕŒMMםMÕ§MŊMÕĮMÕÍMÛMņMÕûMÕNNÕ%NÕ+N?NTNÕ^NoNÕyNNÕ™NÕŸN­NÃNÕÍNÕ×NíNÕ÷NÕũNOO×&OÕ0O4O×AOÕKOÕUOYO×jOÕtO‰OÕ”O˜O×ĨOÕ¯OÕĩOÉOŲOŨO×îOÕøO PÕPP×)PÕ3PÕ9PQPfPÕpPPÕ‹PĄPÕĢPÕąPŋPÕPÕßPÕéP˙PÕ QÕQ#Q8QÕBQSQÕ]QsQÕ}QÕƒQ‘Q§QÕąQÕģQŅQÕÛQÕáQõQųQ× RÕRR4RÕ>RBR×SRÕ^RbR×oRÕyRÕR“RR§RļRŲēR×RáR7SŲASŲPSŲTSuSSÕšSˇSÕÁSÅS×ŌSÕÜSíSÕķSũST*TÕ4TQTÕ[T_T×lTÕvT‡TՍTŸTŖT×´TÕžTÂT×ĪTÕŲTÕåTéT×úTÕUU×UÕUÕ)U-U×>UÕHU\UÕbUqUuU×…UՏU¤UÕ¯UŗU×ĀUÕĘUÕĐUčUøUÕVVÕ"V3VÕ=VÕCVXVhVlV×}VÕ‡V˜VÕžV¨V¸VŧV×ÍVÕĶV×áVÕëVWÕ WWÕ%WÕ1WFWÕPWaWÕsW„WՐWĨWÕ¯WĀWÕĘWāWÕęWÕđWūWXÕXÕ(X>XÕHXÕNXbXsXÕ}XŽXÕ˜XŽXÕ¸XÕžXĖXâXÕėXÕöX YÕYÕY1YFYÕPYaYÕkYYÕ‹YÕ‘YŸYĩYÕŋYÕÉYßYÕéYÕīYZZÕ"Z3ZÕ=ZSZÕ]ZÕcZqZ‡ZÕ‘ZÕ›ZąZÕģZÕÁZÕZęZÕôZ[Õ[%[Õ/[Õ5[C[Y[Õc[Õm[ƒ[Ս[Õ“[§[Ģ[×ŧ[ÕÆ[Û[Õâ[×đ[Õú[\Õ\*\?\ÕK\V\`\j\t\~\‰\˜\œ\×­\Õˇ\ģ\×Į\ÕŅ\Õ\׿\Õņ\õ\×]Õ ]Õ]+]@]ÕJ]Z]Õd]y]Õ„]•]ÕŸ]ÕĨ]ž]Ķ]ÕŨ]î]Õø]^Õ^Õ^,^B^ÕL^ÕV^l^Õv^Õ|^^Ĩ^Õ¯^Ā^ÕĘ^ā^Õę^Õđ^ū^_Õ_Õ(_>_ÕH_ÕN_b_w_Ձ_’_Õœ_˛_Õŧ_ÕÂ_Đ_æ_Õđ_Õú_`Õ`Õ `4`I`ÕO`^`s`Õ~`“`՝`Ž`Õ¸`ÕĀ`Æ`Đ`Ö`ā`æ`ė`ō`ü`aŲ a(a2aLaŲVaŲeaŲiaŠaŸaÕĨa¯ažaÂa×ĶaÕŲa×ãaÕíabÕbb2bÕ>bIbSb]bgbqb}b‡bbœbŲ bŊbĮbábŲëbŲøbŲcŲcŲ$cŲ(cmcqcׂcÕŒcÕ—c›c×ŦcÕļcēc×ËcÕŅc×ÛcÕåcúcÕdd*dÕ6dAdKdUd_didydŽdÕ˜dŠdÕŗdÃdÕĐdádÕëdüdÕeeÕ$e9eÕCeTeÕ^eneÕ{eeאeÕšeže×ĢeÕĩeše×ÅeÕŌeįeÕņefÕ f"fÕ,fÕ2f@fVfÕ`fÕjf€fÕŠfՐf¤fšfÕÃfÔfÕŪfôfÕūfÕgg(gÕ2gÕy By×UyÕ_yÕiyÕsy wyׄyÕŽyÕ˜yÕžyרyÕ˛y ļy×ÂyÕĖyÕÖyÕāy äy×đyÕúyÕzÕz z×zÕ)zÕ3zÕ=z Az×NzÕXzÕbzÕhz×rzÕ|z €z׍zÕ—zÕĄzÕ§z׹zÕˇz Đz Ôz×ëzÕõzÕ˙zÕ {  {× {Õ*{Õ4{Õ>{ B{×O{ÕY{Õc{Õi{×s{Õ}{ {׍{Õ—{ÕĄ{ÕĢ{ ¯{×ģ{ÕÅ{ÕĪ{ÕŲ{ Ũ{×ę{Õô{Õū{Õ|  |×|Õ#|Õ-|Õ3|×=|ÕG| K|×X|Õb|Õl|Õr|×||Õ‚| ›| Ŧ|Õļ|ÕĀ|ÕÆ| Ô| ä|Õî|Õø|Õ} }Õ}Õ&}Õ,} P}Ų|}Ų}ą}Ųž}ŲÉ}ÕĶ}×}×č}Õō}Õü}~Õ~Õ%~Õ/~?~ÕI~ÕS~Õ[~j~~Õ‰~Õ”~˜~×Ĩ~Õ¯~Õš~Î~ÕØ~Õâ~Õė~ü~ÕÕÕ8ŲEŲRŲaŲŲĨŲ¸ ĖŲŲŲäÕú×€Ų€Õ€ .€Õ8€ÕB€ÕL€ \€Õf€Õp€Õ|€ €€×€Õ—€ÕĄ€ÕĢ€ ¯€×ŧ€ÕƀÕЀÕڀ Ū€×ë€Õõ€Õ˙€Õ×Õ ×*Õ4Õ>ÕD×NÕT e oŲ|Ų‡ÕŲ˜ÕžŲЁÕŗ ˇ×ʁĶā×ęÕô ‚ )‚Ķ=‚ A‚×X‚Õc‚ g‚×x‚Õ„‚׎‚ ž‚ÕŽ‚ ž‚ÕȂÕԂ æ‚ û‚ÕƒÕƒÕƒ )ƒÕ3ƒÕ=ƒÕIƒ Mƒ×dƒÕnƒÕxƒÕ‚ƒ †ƒ×™ƒÕŖƒÕ­ƒÕˇƒ ģƒ×ȃÕԃÕ܃Õâƒ×ėƒÕöƒ úƒ×„Õ„Õ„Õ$„ („×4„Õ>„ÕH„ÕR„ V„×c„Õm„Õw„Ձ„ …„×’„Õœ„ÕĻ„ÕŦ„×ļ„ÕĀ„ Ą×Ņ„ÕۄÕå„Õë„×õ„Õû„ … …×/…Õ9…ÕC…ÕM… Q…×d…Õn…Õx…Õ‚… †…ד…՝…Õ§…Õ­…ס…ÕÁ… Ņ×Ņ…ÕۅÕå…Õī… ķ…×˙…Õ †Õ†Õ† !†×.†Õ8†ÕB†ÕL† P†×]†Õg†Õq†Õw†×†Õ‹† †×œ†ÕφÕ°†Õļ†×†ÕƆ ߆ đ†Õú†Õ‡Õ ‡ ‡ (‡Õ2‡Õ<‡ÕF‡ V‡Õ`‡Õj‡Õp‡ ”‡Ųž‡Ų̇ŲŌ‡Ų܇Ųé‡ŲˆŲ*ˆŲKˆ_ˆŲgˆÕmˆ×wˆŲ„ˆŽˆψŽąˆĈŽ͈×ۈÕčˆėˆ×ũˆÕ‰Õ‰Õ‰"‰&‰×7‰ÕA‰ÕK‰ÕU‰Y‰×j‰Õt‰Õ~‰Õˆ‰Œ‰×‰Õ¤‰¯‰ē‰ž‰×ΉÕŲ‰Õã‰Õí‰ņ‰×ŠÕ ŠÕŠÕ Š5ŠÕ?ŠTŠÕ_ŠpŠÕzŠÕ€Š˜Š­ŠÕˇŠˊÕ׊čŠÕōŠÕøŠ ‹‹‹'‹B‹ÕM‹Q‹×b‹Õl‹p‹×‹Õ‹‹Õ‘‹ ‹¤‹×ĩ‹Õŋ‹Ë×ԋÕߋã‹×đ‹Õú‹ÕŒŒ-ŒÕ7ŒLŒÕWŒhŒÕrŒÕxŒŒŒ—ŒŦŒÕļŒĮŒÕҌÕ،ãŒōŒöŒ×ÕÕ×,Õ6Õ@D×QÕ[ÕezÕ„ÕŽÕ˜¨Õ˛ÕŧÕčՍŲ×ęÕô ŽÕŽŽ×%ŽÕ/ŽÕ5ŽMŽQŽ×bŽÕlށŽÕŒŽŽ×ŽÕ§ŽÕ­ŽŎڎÕäŽųŽÕÕÕ%=RÕ\qÕ|Õ—ÕąģŏĪŲåųŲũÕ(,×9ÕCÕMbÕlÕvÕ€ÕšÕ¤ÕŦŧŲęî×ûÕ‘Õ‘‘× ‘Õ*‘Õ4‘I‘ÕS‘Õ]‘Õg‘w‘Ձ‘Õ‹‘Õ“‘¤‘Ų¨‘Α×ܑÕæ‘Õđ‘ô‘×’Õ ’Õ’’×&’Õ0’Õ:’>’×K’ÕU’Õ_’t’Õ~’Õˆ’Õ’’ĸ’ÕŦ’Õļ’Õž’Ė’ķ’Ų“Ų>“ŲH“ŲZ“Ų^“ˆ“Œ“ם“ÕŖ“Ž“ÓÕ͓Õؓí“Õ÷“Õ””×”Õ”×'”Õ1”F”ÕR”a”v”Õ‚””—”Ą”Ģ”ĩ”Ŕɔ×ā”Õę”î”×÷”ווՕ/•Õ;•J•_•Õk•v•€•Š•”•ž•°•´•×ŕÕΕ͕×ä•Õę•×ô•Õū•–Õ–.–C–ÕO–Z–d–n–x–‚–’–§–Õą––ÕĖ–ܖÕé–ú–Õ——Õ—/—Õ=—R—Õ\—m—Õw—‡—Õ”—˜—׊—Õŗ—ˇ—×ėÕΗŌ—×Ū—Õë—˜Õ ˜˜Õ%˜5˜ÕB˜W˜Õa˜r˜Õ|˜˜Õ—˜§˜Õĩ˜ʘÕԘÕߘô˜Õū˜Õ ™™Õ)™>™ÕH™ÕS™W™×h™Õr™v™×ƒ™×’™×œ™ÕĻ™ģ™ÕĮ™֙ë™Õ÷™š šš š*š;šLšÕVšgšÕqššÕš¤šÕ¯šĚÕΚۚÕčšũšÕ››Õ#›Õ)›B›W›Õa›r›Õ|›Õˆ›Œ›×›ÕŖ›˛›Į›ÕŌ›į›Õņ›œÕ œ"œÕ,œÕ2œ@œVœÕ`œÕjœ€œÕŠœÕœ¤œšœÕÜԜÕۜôœÕūœÕ(Õ2Õ<RÕ\Õbv‹Õ•ĻÕ°ƝÕНÕ֝äúÕžÕž$žÕ.žÕ4žDžNžXžbžlžvž€ž†žŒž’ž¨žŲˇžŲģžܞāž×ņžÕ÷ž×ŸÕ Ÿ ŸÕ,Ÿ;ŸPŸÕ\ŸgŸqŸ{Ÿ…ŸŸ›ŸĨŸ¯ŸšŸßɟ؟ŲܟėŸ×üŸ    ! 5 ; E P b r ×| Ų‡ Õ Ųš ŲĢ Ųŋ Ö Aá ô AĄĄÕ ĄÕ&Ą5Ą9Ą×JĄÕTĄÕ^ĄrĄÕ|Ą‘ĄÕœĄ­ĄÕˇĄÕŊĄŅĄץâĄ×đĄÕúĄūĄ×ĸÕĸĸ×+ĸÕ5ĸÕ;ĸSĸhĸÕnĸ|ĸÕ†ĸ—ĸÕĄĸ˛ĸÕĀĸÕĸÕßĸÕåĸëĸúĸŖÕŖ*ŖÕ4ŖDŖÕNŖ_ŖÕmŖqŖ×‚ŖÕŒŖÕ’Ŗ˜Ŗ§ŖĢŖ×ŧŖÕÆŖÕĐŖÔŖ×āŖÕęŖÕôŖøŖ×¤Õ¤Õ¤%¤)¤×:¤ÕD¤H¤×T¤Õ^¤b¤×s¤Õ~¤‚¤×¤Õ™¤ÕŸ¤¸¤ŧ¤×ͤÕפÛ¤×į¤Õņ¤ĨÕĨĨ×"ĨÕ,ĨÕ2ĨKĨOĨ×`ĨÕjĨĨÕŠĨŽĨ×›ĨÕĨĨÕĢĨÃĨĮĨרĨÕâĨæĨ×ōĨÕüĨĻÕĻ Ļ×-ĻÕ7ĻÕ=ĻVĻZĻ×kĻÕuĻŠĻÕ•Ļ™Ļ×ĻĻÕ°ĻÕļĻÎĻŌĻ×ãĻÕíĻūĻÕ§§Õ&§*§×;§ÕE§I§×U§Õ_§t§Õ§ƒ§×§Õš§Õ §š§ΧÕاé§Õņ§×˙§Õ ¨ ¨×¨Õ#¨'¨×8¨ÕC¨G¨×T¨Õ^¨Õd¨}¨¨×’¨Õœ¨ą¨Õŧ¨×ͨÕרÕŨ¨÷¨û¨× ŠÕŠŠ×&ŠÕ0Š4Š×EŠÕPŠaŠÕkŠÕqŠŠŠŽŠ×ŸŠÕŠŠÕŗŠĮŠÕŅŠæŠÕņŠĒÕ ĒÕĒ&Ē,Ē;ĒPĒÕZĒkĒÕuĒ…ĒÕĒ ĒÕŽĒ˛Ē×ÃĒÕÍĒÕ×ĒëĒÕõĒ ĢÕĢ&ĢÕ0ĢÕ6ĢJĢPĢ_ĢcĢ×tĢÕ~Ģ‚Ģ׎ĢÕ˜ĢœĢ×­ĢÕ¸ĢŧĢ×ÉĢÕĶĢÕŲĢōĢöĢ×ŦÕŦŦ×!ŦÕ+Ŧ@ŦÕKŦOŦ×\ŦÕfŦÕlŦ…Ŧ‰ŦךŦÕ¤ŦšŦÕÄŦČŦ×ÕŦÕßŦÕåŦũŦ­×­Õ­ ­×,­Õ6­K­ÕV­Z­×g­Õq­Õw­­Ĩ­Õ¯­Ä­ÕĪ­ā­Õę­Õö­ ŽÕŽ*ŽÕ5ŽFŽÕPŽÕVŽnŽƒŽÕŽŽÕ§ŽŧŽÕĮŽØŽÕâŽÕčŽ¯¯Õ ¯5¯Õ@¯Q¯Õ[¯Õa¯y¯ޝÕ˜¯¨¯Õ˛¯Į¯ÕŌ¯ã¯Õí¯Õķ¯ °!°Õ+°;°ÕE°Z°Õe°v°Õ€°Õ†°Ÿ°´°Õž°ΰÕذí°Õø° ąÕąÕą2ąGąÕQąaąÕką€ąÕ‹ąœąÕĻąÕŦąÅąÚąÕäąųąÕ˛˛Õ˛Õ%˛=˛R˛Õ\˛l˛Õv˛‹˛Õ–˛§˛Õą˛Õˇ˛вå˛Õպ ŗÕ*ŗÕ6ŗKŗÕUŗeŗÕoŗ„ŗÕŗ ŗÕĒŗÕ°ŗĘŗßŗÕéŗųŗÕ´´Õ#´4´Õ>´ÕD´Y´k´Õu´Š´Õ•´Ļ´Õ°´Õļ´Ę´Ü´Õæ´ö´ÕĩĩÕ ĩ1ĩÕ;ĩÕAĩVĩhĩÕrĩ‡ĩÕ’ĩŖĩÕ­ĩÕŗĩĮĩÍĩĶĩŨĩãĩíĩķĩũĩļļļļ'ļ-ļ7ļ=ļDļSļgļxļ‡ļœļÕŖļ˛ļÆļ×ļæļûļÕˇˇ*ˇŲ>ˇOˇZˇiˇyˇŲˆˇ’ˇŲœˇÕώˇˇÆˇÛˇÕåˇöˇÕūˇ ¸Ų¸!¸×2¸Õ<¸ÕB¸M¸W¸a¸k¸z¸‹¸–¸ ¸ʸŲ׸Ųä¸Ųķ¸ŲššŲ(š×2šŲCšŲNšÕXštšÕ~šÕ„š“š¨šÕ˛šÕšš×ÚŲΚÕØšíšÕķšēēÕ!ē6ēÕAēRēÕ\ēÕbē{ēēÕšē¯ēÕēēËēÕÕēÕÛēôē ģÕģ(ģÕ3ģDģÕNģÕTģmģ‚ģÕŒģĄģÕŦģŊģÕĮģÕÍģæģûģÕŧŧÕ%ŧ6ŧÕ@ŧÕFŧ_ŧtŧÕ~ŧ“ŧÕžŧ¯ŧÕšŧÕŋŧØŧíŧÕ÷ŧ ŊÕŊ(ŊÕ2ŊÕ8ŊQŊfŊÕpŊ…ŊՐŊĄŊÕĢŊÕąŊÆŊĐŊÚŊāŊęŊôŊūŊžžž+ž@žÕJžÕUžYž×jžÕtžÕ~ž“žÕžŽžÕ¸žÉžÕŌžážåž×öžÕŋŋ×ŋÕ ŋ1ŋÕ;ŋÕAŋYŋnŋÕxŋÕƒŋ‡ŋטŋÕžŋ×ŧŋÕÆŋÛŋÕåŋÕīŋÕõŋĀ×ĀÕĀĀ×-ĀÕ7ĀÕAĀVĀÕ`ĀqĀÕ{ĀŒĀՕ¤ĀךĀÕÃĀĮĀרĀÕãĀįĀ×ôĀÕūĀÕÁÁ2ÁÕ<ÁQÁÕ\ÁmÁÕwÁÕ}Á’ÁœÁĻÁ°ÁēÁÄÁÎÁØÁįÁëÁ×üÁÕÂÂÂ×&ÂÕ6ÂKÂÕUÂfÂÕpÂՊ™Â׎ÂÕ¸ÂŧÂ×ÍÂÕØÂéÂÕķÂÕųÂÃ&ÃÕ0ÃEÃÕPÃaÃÕkÃÕqÊßÃՊÚÃÕÃÃÔÃÕŪÃÕëÃÄÕ ÄÕÄ%Ä)Ä×5ÄÕ?ÄÕIÄMÄ×^ÄÕeÄvÄ‹ÄÕ•ÄĨÄÕ¯ÄĀÄÕĘÄÕĶÄŨÄįÄņÄûÄ Å ÅÕ*ÅÕ5ÅJÅÕTÅÕZÅiÅ~ÅÕˆÅՓŨÅÕ˛ÅĮÅÕŌÅãÅÕíÅÕķÅÆÆÆ&Æ0Æ:ÆDÆNÆXÆbÆlÆvƁƋƕƤƸÆŲÅÆŲÕÆ×߯ŲđÆ×úÆŲĮÕĮ+ĮÕ5ĮÕ;ĮJĮ_ĮÕiĮ~ĮÕ‰ĮšĮÕ¤ĮÕĒĮÃĮØĮÕâĮ÷ĮÕČČÕČÕ#Č<ČQČÕ[ČpČÕ{ČŒČÕ–ČÕœČĩČĘČÕÔČéČÕôČÉÕÉÕÉ.ÉCÉÕMÉbÉÕmÉ~ÉÕˆÉՎɧÉŧÉÕÆÉÛÉÕæÉ÷ÉÕĘÕĘ Ę5ĘÕ?ĘTĘÕ_ĘpĘÕzĘÕ€Ę™ĘŽĘÕ¸ĘÍĘÕØĘéĘÕķĘÕųĘËË"Ë(Ë2Ë<ËFËPËZËdËoËzˉ˝ËŲĒË×´ËŲÅË×ĪËŲÚËÕäËųËÕĖĖÕ#Ė4ĖÕ>ĖÕDĖ]ĖrĖÕ|Ė‘ĖÕœĖ­ĖÕˇĖÕŊĖÖĖëĖÕõĖ ÍÕÍ&ÍÕ0ÍÕ6ÍOÍdÍÕn̓ÍÕŽÍŸÍÕŠÍÕ¯ÍČÍŨÍÕįÍüÍÕÎÎÕ"ÎÕ(ÎAÎVÎÕ`ÎuÎՀΑÎÕ›ÎÕĄÎēÎĪÎÕŲÎîÎÕųÎ ĪÕĪÕĪ3ĪHĪÕRĪgĪÕrĪƒĪՍĪՓ΍ΞĪŧĪÆĪĖĪÖĪāĪęĪôĪūĪĐĐ,ĐÕ6ĐÕ=ĐHĐbĐŲlĐŲ{ĐŲРФĐ×ĩĐÕŋĐÃĐ×ĐĐÕÚĐīĐÕųĐŅÕŅ*ŅÕ4ŅÕ:ŅRŅgŅÕq҆ŅÕ‘ŅĸŅÕŦŅÕ˛ŅĘŅßŅÕéŅūŅÕ ŌŌÕ$ŌÕ*ŌBŌWŌÕaŌvŌՁԒŌÕœŌÕĸŌēŌĪŌÕŲŌîŌÕųŌ ĶÕĶÕĶ2ĶGĶÕQĶfĶÕqĶ‚ĶÕŒĶÕ’ĶĒĶŋĶÕÉĶŪĶÕéĶúĶÕÔÕ ÔÔ(Ô.Ô8ÔBÔLÔVÔ`ÔlÔ{ÔŲÔ Ô¤Ô×ĩÔÕŋÔÃÔ×ĐÔÕÚÔīÔÕųÔÕÕÕ*ÕÕ4ÕÕ:ÕRÕgÕÕqÕ†ÕÕ‘ÕĸÕÕŦÕÕ˛ÕĘÕßÕÕéÕūÕÕ ÖÖÕ$ÖÕ*ÖBÖWÖÕaÖvÖՁ֒ÖÕœÖÕĸÖēÖĪÖÕŲÖîÖÕųÖ ×Õ×Õ×2×G×ÕQ×f×Õqׂ×ÕŒ×Õ’×Ē×ŋ×ÕÉ×Ū×Õé×ú×ÕØÕ ØØ(Ø.Ø8ØBØLØVØ`ØlØ{ØŲؠؤØ×ĩØÕŋØÃØ×ĐØÕÚØŪØ×ëØÕõØ ŲÕŲ)ŲÕ4ŲEŲÕOŲÕUŲmŲ‚ŲÕŒŲĄŲÕŦŲŊŲÕĮŲÕÍŲåŲúŲÕÚÚÕ$Ú5ÚÕ?ÚÕEÚ]ÚrÚÕ|Ú‘Ú՜ڭÚÕˇÚÕŊÚÕÚęÚÕôÚ ÛÕÛ%ÛÕ/ÛÕ5ÛMÛbÛÕlہÛՌ۝ÛÕ§ÛÕ­ÛÅÛÚÛÕäÛųÛÕÜÜÕÜÕ%Ü9ÜCÜIÜSÜ]ÜgÜqÜ{ÜˆÜ’ÜĄÜŲĨÜÆÜĘÜ×ÛÜÕåÜéÜ×öÜÕŨŨ×ŨÕŨ0ŨÕ:ŨOŨÕZŨkŨÕuŨÕ{Ũ“Ũ¨ŨÕ˛ŨĮŨÕŌŨãŨÕíŨÕķŨ Ū ŪÕ*Ū?ŪÕJŪ[ŪÕeŪÕkŪƒŪ˜ŪÕĸŪˇŪÕÂŪĶŪÕŨŪÕãŪûŪßÕß/ßÕ:ßKßÕUßÕ[ßs߈ßÕ’ß§ßÕ˛ßÃßÕÍßÕĶßëßāÕ āāÕ*ā;āÕEāÕKā_āiāoāyāƒāā—āĄāŽā¸āŌāŲŪāŲņāŲõāá×&á7áFáeá…á–áÕ áÕĻáēáĀáËáÚáŲŪáââ×4âÕ:âJâZâŲjâŲzâŲŠâŲšâŲŽâŋâÎâŌâ×ßâÕéâíâ×úâÕããŲ(ã×2ãŲ?ãŲOãŲZãÕdãhã×|ã׏ã“ã×Ĩãp°ãÕļã×ĮãËã×ŲãpäãÕęãûã˙ã×äÕäÕä×0ä4ä×@äÕJäÕPäaäeä×uäÕäÕ…ä×–äšä×ĻäÕ°äÕļäĮäËä×ÛäÕåäÕëä×üäå× åÕåÕå-å1å×AåÕKåÕQå×båfå×råÕ|åÕ‚å“å—å×§åÕ­åŧåĀå×ĐåÕÚåŪå×ęåÕôåøå׿տտ0æÕ:æJæÕTæeæÕoæÕxæˆæŒæ×æÕ­æÂæÕĖæŨæÕįæøæÕįįį×%įÕ/į3į×DįÕOįSį×`įÕjįÕpįˆįŒįםįÕ§įĢį׸įÕÂįÕČįØįÜį×íįÕ÷įûį× čÕčč×(čÕ2čÕ8čPčačpččŒč×–čŲĄčÕ§čąčģčÅčËčÕčßčéčķčũčéé+éÕ5éÕ@éQé`édé×uéÕééÕšéÕĸé×ŦéŲˇéÕÁéÖéÕāéõéÕęęÕęÕ!ę:ęOęÕYęnęÕyęŠęÕ”ęÕšęŗęČęÕŌęįęÕōęëÕ ëÕë,ëAëÕKë`ëÕkë|ëÕ†ëÕŒëĨëēëÕÄëŲëÕäëõëÕ˙ëÕėė3ėÕ=ėRėÕ]ėnėÕxėÕ~ė—ėŦėÕļėËėÕÖėįėÕņėÕ÷ėí%íÕ/íDíÕOí`íÕjíÕpí…íí™íŖíŠíŗíŊíĮíŅíÛíåíôíøí× îÕîÕî3îÕ=îÕHî]îÕgîÕrî‡îÕ‘îĻîÕąîÂîÕĖîÕŌîëîīÕ īīÕ*ī;īÕEīÕKīdīyīÕƒī˜īÕŖī´īÕžīÕÄīŨīōīÕüīđÕđ-đÕ7đÕ=đVđkđÕuđŠđÕ•đĻđÕ°đÕļđĪđäđÕîđņÕņņÕ)ņÕ/ņHņ]ņÕgņ|ņÕ‡ņ˜ņÕĸņÕ¨ņÁņÖņÕāņõņÕōōÕōÕ!ō5ō?ōIōSōYōcōmōsō}ō‡ō‘ō›ōĨō¯ōšōŋōÉōĶōŨōįōņōûōķķ.ķŲ;ķŲKķŲ[ķŲkķŲ{ķŲ‹ķוķŲ ķÕĻķŲąķÕˇķŲËķÜķëķôÕ ôôÕ'ô+ô×<ôÕFôJô×WôÕcôgô×xôÕ‚ô†ôדô՝ôÕŖôŗôˇô×ČôÕŌôÖô×įôÕōôöô×õÕ õÕõ+õ/õ×@õÕJõ_õÕjõnõ×{õÕ…õÕ‹õŖõ§õ׸õÕÂõ×õÕâõæõ×ķõÕũõÕööö×0öÕ:öOöÕZö^ö×köÕuöÕ{ö“ö—öרöÕ˛öĮöÕŌöÖö×ãöÕíöÕķö ÷ ÷Õ*÷?÷ÕJ÷[÷Õe÷Õq÷†÷Ր÷Õ–÷Ĩ÷ē÷ÕÄ÷ÕĘ÷Ų÷î÷Õø÷Õū÷ ø"øÕ,øÕ6øÕ@øDø×QøÕ[øÕeøÕoøsø×€øÕŠøÕ”øÕšøĢø¯ø×ĀøÕĘøÎø×ÛøÕåøÕëøûø˙ø×ųÕųų×/ųÕ:ų>ų×KųÕUųÕ[ųsųˆųÕ’ų§ųÕ˛ųÃųÕÍųÕĶųëųúÕ úÕúÕúÕ(úÕ2ú6ú×CúÕMúÕWúÕaúeú×rúÕ|úÕ†úÕŒúú˛úÕŧúŅúÕÜúíúÕ÷úÕũúû*ûÕ4ûIûÕTûeûÕoûÕuûûĸûÕŦûÁûÕĖûŨûÕįûÕíûüüÕ$ü9üÕDüUüÕ_üÕeü}ü’üÕœüąüÕŧüÍüÕ×üÕŨüõü ũÕũ)ũÕ4ũEũÕOũÕUũmũ‚ũÕŒũĄũÕŦũŊũÕĮũÕÍũåũū$ū5ūÕ?ūÕEūYūcūmūwūū‹ū•ūŸūŠūŗūŊūČūŌūáūņūŲ˙˙Ų˙Õ ˙Ų+˙Õ1˙×;˙ŲF˙ÕP˙e˙Õo˙„˙Տ˙ ˙ÕĒ˙Õ°˙É˙Ū˙Õč˙ũ˙ÕÕ#Õ)BWÕavՁ’ÕœÕĸģĐÕÚīÕú ÕÕ4IÕShÕs„ÕŽÕ”­ÂÕĖáÕėũÕÕ &;ÕEZÕevÕ€Õ†Ÿ´ÕžĶÕŪīÕųÕ˙(28BLV`jtƒ‡×˜ÕĸĻ×ŗÕŊÁ×ÍÕ×Û×čÕö Õ*Õ5FÕPÕVnƒÕĸÕ­žÕČÕÎæûÕÕ%6Õ@ÕF^sÕ}’՝ŽÕ¸ÕžÖëÕõ Õ&Õ0Õ6NcÕm‚ՍžÕ¨ÕŽÆÛÕåúÕÕ Õ&>SÕ]rÕ}ŽÕ˜ÕžļËÕÕęÕõÕÕ.CÕMbÕm~ÕˆÕŽĻģÕÅÚÕåöÕ Õ  3 Õ= R Õ] n Õx Õ~ ’ œ Ļ ° ē Ā Ę Ô Ū č ō ü     * 5 O ŲS y ׇ Õ‘ Õ› Ÿ ×Ŧ Õļ ÕĀ Ä ×Ņ ÕÛ Õå é ×ö Õ Õ  Õ) Õ3 Õ= M ÕW Õa Õi w † š Ų§ ׹ Ųŧ ÕÆ Ũ ]č Õî ũ  Õ - Õ9 = ×N ÕY ] ×n Õx | ׍ Õ˜ œ ׊ Õŗ Õš Ņ Õ ×æ Õđ ô × Õ  ×! Õ+ Õ1 I ^ Õh Õr ƒ Ս Õ“ Ŗ ¸ Õ × Õâ ķ Õũ Õ0Õ:OÕZkÕuÕ{™Ŗ­ˇÁËÕāŲŲŲ-ŲKŲqŲ„˜ŲĨŲ°ÕÆ×ĐŲÛÕåúÕÕÕ(Õ2Õ<ÕHL×YÕcÕmÕw{׈Ւ՜ÕĻĒסÕÁÕËÕŅ×ÛÕåé×öÕÕ Õ×Õ 1;ŲHŲSÕYŲdÕjŲuՃזĶŦ×ļÕĀâõĶ  ×$Õ/3×DÕP×ZjÕzŠÕ”Õ ˛ĮÕŅÕÛÕåõÕ˙Õ Õ×0Õ:ÕDÕNR×eÕoÕyÕƒ‡×”՞ըՎ׸ÕÂÆ×ŌÕÜÕæÕđô×Õ ÕÕ"×/Õ9ÕCÕMQ×^ÕhÕrÕxׂՌ×Õ§ÕąÕˇ×ÁÕĮāä×ûÕÕÕ×0Õ:ÕDÕNR×_ÕiÕsÕy׃Ս‘×Õ§ÕąÕģŋ×ËÕÕÕßÕéí×úÕÕÕ×)Õ3Õ=ÕC×MÕW[×hÕrÕ|Ղ׌ՒĢŧÕÆÕĐÕÖäôÕūÕÕ"Õ,Õ6Õ<`؁•Ų­Õˇģ×ĖÕÖÕāõÕ˙Õ Õ#Õ-Õ7Õ?N_Õ{ŲˆŲ•Ų¤ŲÂŲčŲûŲŲ'Õ=×GŲRÕ\qÕ{ՅՏŸÕŠÕŗÕŋÃ×ĐÕÚÕäÕîō×˙Õ ÕÕ!×.Õ8ÕBÕH×RÕ\`×mÕwՁՇב՗¨˛ŲŋŲĘÕĐŲÛÕáŲėÕöú× Ķ#×-Õ7YlĶ€„×›ÕĻĒ×ģÕĮ×ŅáÕņÕ Õ)>ÕHÕRÕ\lÕvÕ€ÕŒ×§ÕąÕģÕÅÉ×ÜÕæÕđÕúū× ÕÕÕ%×/Õ9=×IÕSÕ]Õgk×wՁՋՕ™×ĻÕ°ÕēÕÄČ×ÕÕßÕéÕī×ųÕ×ÕÕ(Õ.×8Õ>W[×rÕ|ՆՐ”×§ÕąÕģÕÅÉ×ÖÕāÕęÕđ×úÕ×ÕÕ(Õ26×BÕLÕVÕ`d×qÕ{ՅՏ“× ÕĒÕ´Õē×ÄÕÎŌ×ßÕéÕķÕų× Õ " 3 Õ= ÕG ÕM [ k Õu Õ Õ‰ ™ ÕŖ Õ­ Õŗ Ė ã Ųö ú × !Õ!Õ!"!×2!Õ"ÕK"i"ƒ"¤"Ž"Ō"Ųß"Ųė"Ųû"Ų#Ų?#ŲR# f#Ųs#Ų~#Õ”#מ#ŲŠ#Õŗ# Č#ÕŌ#ÕÜ#Õæ# ö#Õ$Õ $Õ$ $×'$Õ1$Õ;$ÕE$ I$×V$Õ`$Õj$Õt$ x$×…$Տ$Õ™$ÕŸ$׊$Õŗ$ ˇ$×Ä$ÕÎ$ÕØ$ÕŪ$×č$Õî$ ˙$  %Ų%Ų!%Õ'%Ų2%Õ8%ŲC%ÕM% Q%×d%Ķz%ׄ%ÕŽ% °% Ã%Ķ×% Û%×ō%Õũ% &×&Õ&×(& 8&ÕH& X&Õb&Õn& €& •&ÕŸ&ÕŠ&Õŗ& Ã&ÕÍ&Õ×&Õã& į&×ū&Õ'Õ'Õ'  '×3'Õ='ÕG'ÕQ' U'×b'Õl'Õv'Õ|'׆'Ր' ”'× 'ÕĒ'Õ´'Õž' Â'×Î'ÕØ'Õâ'Õė' đ'×ũ'Õ(Õ(Õ( (×,(Õ6(Õ@(ÕF(×P(ÕZ( ^(×k(Õu(Õ(Õ…(׏(Õ•( Ž( ˛(×É(ÕĶ(ÕŨ(Õį( ë(×ū(Õ)Õ)Õ)  )×-)Õ7)ÕA)ÕG)×Q)Õ[) _)×k)Õu)Õ)Õ‰) )×™)ÕŖ)Õ­)Õˇ) ģ)×Č)ÕŌ)ÕÜ)Õæ) ę)×÷)Õ*Õ *Õ*×*Õ%* )*×6*Õ@*ÕJ*ÕP*×Z*Õ`* y* Š*Õ”*Õž*Õ¤* ˛* Â*ÕĖ*ÕÖ*Õā* đ*Õú*Õ+Õ + #+"7+ŲD+ŲN+Õc+×s+Õ}+"‘+Õ›+"Ŧ+Õž+"Â+×Ú+Ķæ+"ú+Õ,Õ,Õ,"(,Õ2,Õ<,ÕD,"Y,$m,Ų…,Õ‹,×ĸ,$Ļ,ס,ÕÁ,ÕË,$ā,Õę,Õô,$ -Õ-Õ-$5-Õ?-ÕE-$V-$m-Õw-$‡-Õ‘-$•-×Ļ-Õą-$ĩ-×Č-ÕÎ-$ä-$˙-Ų .Ų.Ų%.Ų2.ŲW.&k.Ųˆ.×™.ÕŖ.&§.׸.ÕÃ.&Į.ר.Õâ.Õė.Õö.Õ/&/Õ/Õ%/Õ//&@/ÕJ/ÕT/&e/Õo/Õu/&ƒ/Ս/՝/Õ§/&Ģ/×ŧ/ÕÆ/&×/Õá/&ō/Õ˙/&0×0Õ$0Õ*0&90&=0×R0×i0&~0Õˆ0Õ’0Õœ0&­0Õˇ0ÕÁ0&Ō0ÕÜ0Õâ0&đ0Õú0Õ 1Õ1&1×)1Õ31&D1ÕN1&_1Õl1&p1ׇ1Õ‘1Õ—1&Ļ1&Ē1×ŋ1×Õ1&æ1Õđ1&2Õ 2Õ)2Ų\2ŲŒ2Ųŋ2Ųä2(ø2Ų3×3Ų*3Õ43(83×I3ÕS3ÕY3×c3Õm3Õw3Ձ3Õ‹3(3× 3ÕĢ3(¯3×Ā3ÕĘ3ÕÔ3ÕŪ3(â3×ī3Õų3Õ4(4×4Õ4Õ$4×.4Õ84ÕH4ÕR4(g4Õq4(u4ׂ4ÕŒ4(4ם4ÕĒ4(Ž4×Å4ÕĪ4ÕÕ4(ä4(č4×ũ4×5((5Õ25Õ<5ÕF5(W5Õa5Õk5(|5Õ†5ÕŒ5(š5Õ¤5Õ´5Õž5(Â5×Ų5Õã5Õé5(ø5(ü5×6×'6(86Õ>6(O6(p6Õ{6(6א6Õš6Õ¤6ÕŽ6Õ´6מ6ÕÎ6(ã6Õí6Õ÷6Õ7(7Õ7Õ&7(77ÕA7ÕG7(U7Õ_7Õo7Õy7(}7׎7Õ˜7(œ7׊7Õŗ7(ˇ7×Ä7ÕŅ7(Õ7׿7Õđ7(8Õ 8(8Õ)8(-8×D8ÕN8ÕT8(c8(g8×|8×’8(–8×­8Õŗ8×Ã8(Į8×Ū8(â8×õ8Õ˙8(9×9Õ9Õ%9(/9(@9(D9×\9(`9×w9Ձ9Õ‡9(’9(ŗ9(×9(ö9(:( :(:(#:(3:(7:×P:ÕX:(l:*{:Ų„:ŲŽ:Ųĸ:*ˇ:ÕÁ:ÕĖ:*á:Õí:*ø:*;* ;*;* ;**;*9;,P;Ų`;×~;,‚;ך;Õ¤;,¨;ך;Õŋ;,Ę;,Î;×ß;Õé;Õķ;,÷;×<Õ<,#<,'<×><ÕD<,S<,j<Õv<,z<׋<Õ•<ÕŸ<,Ŗ<×ŗ<Õš<,Ä<,Ô<ÕŪ<,õ<Õ˙<Õ =,!=Õ'=,.=,8=,>=,I=,M=×^=Õh=Õr=,v=׃=Ս=Õ“=ם=,Ą=׎=Õ¸=ÕÂ=,Æ=×Ķ=ÕŨ=Õį=,ë=×ø=Õ>Õ>Õ>, >×3>Õ9>×J>,N>×Z>Õd>Õj>,>,…>×–>Õœ>,Ģ>,¯>×Ā>ÕĘ>,Î>×ß>Õé>,í>×ũ>Õ?, ?×?Õ'?,+?×8?ÕB?ÕH?,a?,q?Õw?,ƒ?,‡?מ?Õ¨?,Ŧ?×Ã?ÕÎ?,Ō?×å?Õņ?,õ?×@Õ@,@,@,!@,5@E@ŲU@Ųe@Ųu@Ų‰@@מ@Õ¨@Õ˛@ļ@×Ã@ÕÉ@Ų@Ũ@×î@Õø@ÕAA×AÕA)A-A×>AÕHALA×]AÕhAlA×yAÕƒAÕ‰AĄAĨA×ļAÕĀAÕAÕāAäA×ņAÕûAÕBB.B?BÕIBÕSBdBÕnBÕ{BBÕšB¯BÕēBËBÕÕBÕÛBķBC2CCCÕMCÕSCgCqC€CCŲ CŲ°CŲĀCŲÔCéCúCÕDÕDDÕ)DÕ6D:D×KDÕUDÕ_DcD×pDÕvD†DŠD×ĻDÕ°D´D×ÁDÕĮD×DėDũDÕEÕE"EÕ,EÕ9E=E×NEÕXEÕbEfE×wEՁEÕ‡EטEœEרEÕ˛EÕ¸EÉEÍE×ŪEÕčEėE×øEÕFF×FÕFÕ*F?FÕIFYFÕcFtFÕ~FÕ‡F‘F F¤F×ĩFÕŋFÕÉFÍF×ŪFÕčFÕîF×˙FG×GÕGÕG0G4G×EGÕOGSG×_GÕiGmG×zGÕ„GÕ‘GĻGÕ°GĀGÕĘGÛGÕåGÕîGøGH H×HÕ&H*H×7HÕAHEH×RHÕ\HÕfHjH×{HÕ…HšHÕĨHŠH×ļHÕĀHÕÆHÚHëHīH×IÕ IIÕ*I.I×;IÕEIÕKIcIxIÕ‚I—IÕĸIŗIÕŊIÕÃIÛIđIÕúI JÕJ!J6JÕ@JDJ×UJÕ`JdJ×qJÕ{JՁJ™JŽJÕ¸JÍJÕØJéJÕķJÕųJ KK!K+K5K?KIKSKbKrKŲ‚KŲ’KŲĸKŲļKēK×ËKÕÕKÕßKãK×đKÕöKL L×LÕ%LÕ/L3L×@LÕFLVLkL|LÕ†LՐLĄLÕĢLÕ¸LŧL×ÍLÕ×LÕáLåL×öLÕMÕM×MM×'MÕ1MÕ7MHMLM×]MÕgMkM×wMՁM…M×’MÕœMÕŠMžMÕČMØMÕâMķMÕũMÕNNN#N×4NÕ>NÕHNLN×]NÕgNÕmN×~N‚N׎NÕ˜NÕžN¯NŗN×ÄNÕÎNŌN×ŪNÕčNėN×ųNÕOÕO/OIOjOtOƒO‡OטOÕĸOĻO×ŗOÕŊOÁO×ÎOÕØOÕâOæO×÷OÕPPÕ!P%P×2PÕRBR×ORÕYRÕ_RwRŒRÕ–RĢRÕļRĮRÕŅRÕ×RëRõR˙R SSS'S1S@SPSŲ`SŲpSŲ€SŲ”S˜S׊SÕŗSÕŊSÁS×ÎSÕÔSäSčS×ųSÕTÕ TT×TÕ$T4TITZTÕdTÕnTTÕ‰TÕ–TšT×ĢTÕĩTÕŋTÃT×ÔTÕŪTÕäT×õTųT×UÕUÕU&U*U×;UÕEUIU×UUÕ_UcU×pUÕzUÕ‡UœUÕĻUļUÕĀUŅUÕÛUÕäUîUũUV×VÕVÕ&V*V×;VÕEVÕKV×\V`V×lVÕvVÕ|VV‘V×ĸVÕŦV°V×ŧVÕÆVĘV××VÕáVÕîV W'WHWRWaWeW×vWÕ€W„WבWÕ›WŸW×ŦWÕļWÕĀWÄW×ÕWÕßWôWÕ˙WX×XÕXÕ X4XEXIX×ZXÕdXyXÕ„XˆXוXÕŸXÕĨXŊXŌXÕÜXņXÕüX YÕYÕY5YJY[YÕeYÕoY€YÕŠYÕ—YŦYÕļYĮYÕÍYŨYōYÕüYZ×ZÕZ Z×-ZÕ7ZÕ=ZUZjZÕtZ‰ZÕ”ZĨZÕ¯ZÕĩZÉZĶZŨZįZņZûZ[[[.[Ų>[ŲN[Ų^[Ųr[v[ׇ[Õ‘[Õ›[Ÿ[×Ŧ[Õ˛[Â[Æ[××[Õá[Õë[ī[×ü[Õ\\'\8\ÕB\ÕL\]\Õg\Õt\x\׉\Õ“\՝\Ą\ײ\Õŧ\ÕÂ\×Ķ\×\×ã\Õí\Õķ\]]×]Õ#]']×3]Õ=]A]×N]ÕX]Õe]z]Õ„]”]Õž]¯]Õš]ÕÂ]Ė]Û]ß]×đ]Õú]Õ^^×^Õ#^Õ)^×:^>^×J^ÕT^ÕZ^k^o^×€^ÕŠ^Ž^ך^Õ¤^¨^×ĩ^Õŋ^ÕĖ^ë^_&_0_?_C_×T_Õ^_b_×o_Õy_}_׊_Õ”_Õž_ĸ_×ŗ_ÕŊ_Ō_ÕŨ_á_×î_Õø_Õū_`#`'`×8`ÕB`W`Õb`f`×s`Õ}`Õƒ`›`°`Õē`Ī`ÕÚ`ë`Õõ`Õû`a(a9aÕCaÕMa^aÕhaÕuaŠaÕ”aĨaÕĢaģaĐaÕÚaŪa×īaÕúaūa× bÕbÕb3bHbÕRbgbÕrbƒbՍbÕ“b§bąbģbÅbĪbŲbãbíbüb cŲcŲ,cŲn.On.cnÕnn.‚nÕŒnÕ–n.ĻnÕ°nÕēn.ËnÕÕnÕÛn.ėn.oÕ o.oÕ%oÕ/o.?oÕIoÕSo.doÕnoÕto.oŲ—oŲ¤oŲĀo0ĪoŲØoŲâoŲņoŲpŲp×pŲ(pÕ2p06p×HpĶUpĶap0ep×upÕpÕ‰p0p×™pÕŖpÕ­p0ÂpÕĖp0ŨpÕįp0øpÕq0qÕ qÕ*qÕ0q0Aq0Eq×UqÕ_qÕiq0mq×yqÕƒqՍq0ĸqÕŦq0ŊqÕĮq0ØqÕåq0öqÕrÕ rÕr0!r0%r×5rÕ?rÕIr0Mr×YrÕcrÕmr0‚rÕŒr0rÕ§r0¸rÕÅr0ÖrÕārÕęrÕđr0s0sÕsÕ)s09sÕCsÕMs0bsÕls0}sÕ‡s0˜sÕĨs0ļsÕĀsÕĘsÕĐs0ás0õsÕt0tÕt03tÕ>t0Bt×RtÕ\tÕft0jt×vtÕ€tÕŠt0ŸtÕŠt0ētÕÄt0ÕtÕât0ķtÕũtÕuÕ u0u02uÕ=u0QuÕ[uÕeu0uuÕuÕ‰u0žuÕ¨u0šuÕÃu0ÔuÕáu0ōuÕüuÕvÕ v0v0!v×1vÕ;vÕEv0Iv×UvÕ_vÕiv0mv×~vÕˆv0Œv×™vÕŖv0§v×´vÕÁv0Åv×ÖvÕāv0ņvÕûv0 wÕw0*wÕ4wÕ>wÕDw0Uw0ewÕ|wŲ†wؐwŲĄw2°wŲšwŲÃwŲŌwŲáwŲúw×xŲ xÕx2x×*xĶ7xĶCx2]xÕgx2wxՁxÕ‡x2—x2ąxÕģx2ËxÕÕxÕÛx2ëx2yÕy2yÕ)yÕ/y2?y2YyÕcy2syÕ}yÕƒy2“y2­yÕˇy2ĮyÕŅyÕ×y2įy2ûyÕz2 zÕ*z2:zÕDzÕJz2Zz2nzÕyz2“z՝z2­zÕˇzÕŊz2Íz2Ņz×ázÕėz2{Õ {2{Õ.{Ų7{ŲA{ŲN{Ų[{Ųs{Ų}{Ų”{Ų{Ų§{Ųŗ{Ųŋ{ŲÛ{Ųå{Ų!|ŲB|V|Ųc|Ųs|Ųƒ|Ų“|ŲŖ|×­|Ų¸|Õž|ŲŌ|Ö|×į|Õņ|Õ÷|}}×}Õ!}%}×2}ÕD}Y}Õc}t}Õ†}Š}×›}ÕĨ}Õ¯}Õš}Ŋ}×Î}ÕØ}ÕŪ}é}í}×ū}Õ~ ~×~Õ&~Õ,~7~;~×K~ÕU~Õ_~c~×o~Õy~Õ~‹~~ן~ÕŠ~­~×ē~ÕÄ~Č~×Ų~Õä~č~×õ~Õ˙~Õ8Ss„ÕŽÕ”Ž˛×ÃÕŲíÕ÷Õ€€Õ€Õ!€-€1€×A€ÕK€O€×[€Õe€i€×v€Õ€€„€×•€Õ €¤€×ą€Õģ€ÕÁ€׀æ€ę€×û€Õ ×Õ#×0Õ:OÕZ^×kÕuÕ{•™×ǁÕ´¸×ŁÕ΁́×äÕīķ×‚Õ ‚Õ‚)‚>‚ÕH‚Y‚Õc‚x‚Õƒ‚”‚Õž‚Õ¤‚Ŋ‚΂Õ؂č‚Õō‚ƒÕ ƒ"ƒÕ-ƒ>ƒÕHƒÕNƒiƒmƒ×~ƒÕˆƒŒƒ×™ƒÕŖƒ§ƒ×¸ƒÕÃĮƒ×ԃÕۃÕäƒũƒ„ׄՄ „×1„Õ<„@„×M„ÕW„Õ]„u„y„׊„Õ”„˜„׊„Õ´„¸„×ńÕĪ„ÕՄí„ņ„×…Õ……×(…Õ2…Õ<…ÕB…×L…ÕV…j…Õt…Õ~…Õˆ…˜…Õĸ…ÕŦ…Õ´…ąȅ×Ų…Õã…Õí…†Õ †Õ†Õ †0†Õ:†ÕD†ÕL†[†p†Õz†Õ…†‰†×š†Õ¤†ÕކÆÕ͆Õ׆Õá†ņ†Õû†Õ‡Õ ‡‡1‡Õ;‡L‡ÕV‡k‡Õv‡‡‡Õ‘‡Õ—‡°‡ŇÕ·ä‡Õī‡ˆÕ ˆÕˆ$ˆ*ˆ4ˆ>ˆDˆNˆYˆcˆ}ˆŲ‡ˆŲ”ˆŲĄˆŲŗˆÈŲ͈ŲãˆŲķˆŲ‰Ų‰Ų#‰Ų3‰ŲC‰×M‰ŲX‰Õb‰f‰×w‰Õ‰…‰×–‰ÕĄ‰Ĩ‰×˛‰Õŧ‰Õ‰ډŪ‰×ī‰Õų‰ŠÕŠŠ×*ŠÕ4ŠÕ:ŠRŠcŠrŠvŠ×‡ŠÕ‘ŠÕ›ŠÕĨŠÕ¯ŠĊÕΊۊÕčŠųŠÕ‹ ‹×‹Õ%‹:‹ÕE‹V‹Õ`‹q‹Õ~‹‚‹×“‹Õ‹Õ§‹Ģ‹×ˇ‹ÕÁ‹ÕĮ‹׋ۋ×ė‹Õö‹ú‹×ŒÕŒŒ×%ŒÕ0Œ4Œ×AŒÕKŒÕQŒjŒŒÕ‰Œ™ŒÕŖŒ´ŒÕÁŒ֌ÕāŒđŒÕúŒÕ+Õ5Õ;PZdnx‚Œ–ĨēÕčŲÕäõÕ˙ÕŽŽ2ŽÕ<ŽQŽÕ\ŽmŽÕwŽÕ}Ž‘Ž—ŽŽ§ŽąŽŧŽƎՎŲŲŽ5 ×#5.×>ÕHÕRÕX×bÕlÕv5z×ŠÕ”Õž5ĸ×ŽÕ¸Õď5ȏ×؏ÕâÕėÕö5ú×ÕÕÕ%5:ÕDÕNÕT5c5zÕ‡5›Õϐ5ǐ×ēÕĐÕʐ5č5‘5'‘5;‘K‘Ų[‘Ųk‘×u‘Ų€‘Տ‘Õ•‘Ųĸ‘Ų˛‘ŲƑʑ×Ũ‘]č‘Õî‘×ū‘’×’] ’Õ&’1’=’R’Õ\’m’Õy’}’׎’Õ˜’Õž’׎’˛’×ÒÕ͒Õגė’Õō’ũ’“$“D“U“Õ_“Õe“y“…“‰“ך“Õ¤“¨“ך“Õēȓ×ՓÕߓÕå“ũ“”Õ”-”Õ9”=”×N”ÕX”Õ^”m”‚”ÕŒ”Ŗ”Õ­”Õš”ΔÕؔī”Õų”Õ• •וÕ$•Õ.•Õ8•ÕB•F•×V•Õ`•Õj•Õp•×z•~•׋•Õ••ÕŸ•ÕĨ•×Ģ•Ŋ•Ų•Õå•é•×ú•Õ–Õ –––×.–Õ8–<–×M–ÕX–\–×i–Õs–Õy–‘–•–×Ļ–Õ°–Õļ–Ŗɖ×ږÕä–č–×ų–Õ——×—Õ—Õ%—=—R—Õ\—m—Õw—ˆ—Õ’—Ŗ—Õą—ƗÕЗá—Õí—ņ—×˜Õ ˜˜×!˜Õ,˜0˜×=˜ÕG˜ÕM˜e˜i˜×z˜Õ„˜ˆ˜×™˜Õ¤˜¨˜×ĩ˜Õŋ˜ÕŘŨ˜á˜×ō˜Õü˜™×™Õ™ ™×-™Õ7™Õ=™U™j™Õt™Õ~™™Õ™™ÕŸ™¯™ŗ™×ęÕΙÕؙܙ×é™Õķ™Õũ™šÕš#š3š7š×HšÕRšÕ\š`š×mšÕwšÕ}ššĸšÕŦšÁšÕ˚ŨšÕįšÕķš›Õ›'›Õ2›C›ÕM›ÕS›k›€›ÕŠ›Ÿ›ÕĒ›ģ›ÕśÕ˛ã›ø›ÕœœÕ"œ3œÕ=œÕCœ[œpœÕzœœÕšœ̜ÕĩœÕģœΜ՜ߜęœŲ)Ų9×CŲNÕTŲ_ÕeŲpÕvŲÕ‡×šÕ¤¨×šÕÝÕʝ×НŲ۝ÕáŲėÕō×žÕžž×-ž×3žŲ>žÕDžŲTžŲ_žÕežŲpžÕvžŲžÕ‡žŲ’žÕœžąžÕģžÕŞÕОԞ×åžÕīžÕúžūž×ŸÕŸŸ×.ŸÕ9Ÿ=Ÿ×JŸÕTŸÕZŸrŸ‘ŸąŸŸÕ˟ÕԟæŸėŸöŸ  % Õ/ Õ: > ×O ÕY n Õy } ×Š Õ” Õš ˛ Į ÕŅ æ Õņ ĄÕ ĄÕĄ&Ą.Ą8ĄCĄYĄiĄŲxĄ×‚ĄŲ’Ą¨ĄqŗĄÕšĄČĄÜĄÕæĄÕđĄÕúĄÕĸĸ×ĸÕ"ĸÕ,ĸÕ2ĸ×<ĸ@ĸ×MĸÕWĸÕaĸÕgĸ×mĸĸ•ĸÕŸĸÕ§ĸŽĸĶĸŲüĸŲŖ%ŖŲ2ŖŲAŖŲPŖŲZŖÕ`Ŗ×iŖŲuŖŲ…ŖŲ”ŖŲžŖÕ¨ŖŦŖ×ŧŖÕÆŖÖŖÕÜŖėŖ¤Õ ¤¤Õ$¤5¤Õ?¤C¤×P¤ÕZ¤×d¤Ųn¤Õt¤×~¤Ų¤Ų—¤ÕĄ¤Ĩ¤×ĩ¤Õģ¤×ˤį¤Õí¤ü¤ĨÕĨÕ%ĨÕ/ĨÕ9ĨMĨÕWĨÕaĨÕgĨuĨ†ĨՐĨÕšĨÕ ĨĒĨŧĨŌĨÕÜĨÕäĨđĨĻÕĻÕĻ#Ļ'Ļ×7ĻÕAĻÕGĻ×XĻ\Ļ×hĻÕrĻÕxĻ‰ĻĻםĻÕ§ĻÕ­ĻמĻÂĻ×ÎĻÕØĻÕâĻ÷ĻÕ§§Õ§-§Õ6§G§K§×[§Õe§Õk§×|§€§×Œ§Õ–§Õœ§­§ą§×Á§Õ˧Χ×ā§Õë§ī§×ü§Õ¨Õ¨¨×&¨Õ0¨Õ6¨×G¨K¨×W¨Õa¨Õg¨t¨‹¨Õ•¨ЍÕŗ¨ĨÕШÔ¨×ä¨Õę¨ų¨ ŠÕŠÕŠ)Š-Š×=ŠÕGŠÕMŠ×YŠiŠƒŠœŠ´Š¸Š×ČŠÕŌŠÕØŠ×éŠíŠ×ųŠÕĒÕ ĒĒĒ×.ĒÕ8ĒÕ>Ē×OĒSĒ×_ĒÕiĒÕsĒˆĒÕ’ĒŖĒÕ­ĒžĒÕĮĒØĒčĒÕōĒĢÕĢ#ĢÕ-ĢÕ3ĢLĢ\ĢÕbĢpĢÕzĢ~Ģ׏ĢÕ™ĢÕŸĢŽĢŋĢÕÅĢĶĢęĢÕôĢŦÕŦ#ŦÕ/Ŧ3Ŧ×CŦÕIŦXŦ\Ŧ×lŦÕvŦÕ|Ŧ‹ŦŦןŦÕŠŦ­ŦמŦÕÉŦÍŦ×ÚŦÕäŦÕęŦ­­Õ ­Õ&­;­?­×K­ÕU­Õ[­l­p­×€­ÕЭՐ­×¤­ÕĒ­ĩ­Ä­Č­×Ø­Õä­×õ­ų­×ŽÕŽÕŽ"Ž-ŽAŽÕGŽVŽjŽÕtŽÕ~ŽŽÕ™ŽÕŸŽ¯ŽŗŽ×ÃŽÕÍŽâŽÕíŽņŽ×ūŽÕ¯Õ¯&¯:¯ÕD¯T¯ÕZ¯j¯~¯Õˆ¯˜¯Õĸ¯ŗ¯ÕŊ¯ÕƝŪ¯Õ蝸¯Õū¯°"°Õ,°<°ÕF°W°Õa°Õn°‚°ÕŒ°Ą°ÕŦ°Ŋ°ÕĮ°ÕͰå°ą ą$ą×4ąÕ>ąBą×SąÕ^ąoąÕyąÕą—ą§ąļąŌąđą˛Õ ˛Õ˛%˛/˛9˛C˛N˛g˛{˛Õ˛×˛Õ•˛×Ĩ˛Õ¯˛ŗ˛×˲ÕҞā˛ä˛×õ˛Õ˙˛Õ ŗÕŗŗ×)ŗÕ3ŗÕ=ŗÕCŗ×MŗQŗ×^ŗÕhŗÕrŗÕxŗ×~ŗ‘ŗ•ŗ×ŦŗČŗĖŗ×ŲŗÕãŗÕéŗ´´8´I´ÕS´ÕY´t´~´ˆ´”´Ŗ´:˛´Ųŧ´ŲĖ´ŲÜ´×ī´Õõ´×ĩŲ.ĩÕ8ĩ:MĩÕWĩ:hĩÕpĩ:‡ĩÕ’ĩ:§ĩÕąĩÕˇĩ:Æĩ:ÛĩÕåĩÕëĩ:úĩ:ļÕļÕļ:.ļ:CļÕMļÕSļ:bļ:fļ×wļՁļ:…ļ×–ļÕĄļ:ĨļײļÕŧļÕÂļ:Úļ:ųļ:ˇ:*ˇÕ4ˇÕ:ˇ:Nˇ:rˇ:|ˇ:†ˇ:ˇ:šˇ:¤ˇ:ގ:¸ˇ:¡:ˎ:Öˇ:āˇ:ęˇ:ôˇ:ūˇ:¸:¸:¸:0¸::¸:I¸ŲM¸o¸‘¸M ¸ŲǏŲē¸Ųʸ×Ũ¸Õã¸×šŲšÕ&šM*š×;šÕEšMIš×VšÕ^šMušÕ€šM•šÕŸšÕĨšM´šMÉšÕĶšÕŲšMčšMũšÕēÕ ēMēM1ēÕ;ēÕAēMPēMTē×eēÕoēMsēׄēՏēM“ē× ēÕĒēÕ°ēMČēMįēMģMģÕ"ģÕ(ģM<ģMFģMPģMZģMdģMnģMxģM‚ģMŒģM–ģM ģMĒģM´ģMžģMČģMŌģMÜģMæģMđģMŧMŧMŧŲ"ŧDŧfŧOuŧŲ~ŧŲˆŧŲœŧOąŧÕģŧÕÆŧOÛŧÕįŧOōŧOüŧOŊOŊOŊO$ŊO>ŊŲJŊŲWŊŲdŊŲsŊŲ‡ŊŲ‹ŊQ¨Ŋ×ļŊÕĀŊÕĘŊÕÔŊQéŊÕôŊQøŊ× žÕžÕž×(žÕ2žQIžpVžQežQzžÕ†žQ‘žQ›žQĨžQ¯žQšžQČžQŨžÕäžQîžQøžQŋQŋŲŋ7ŋ;ŋ×LŋÕVŋZŋ×gŋÕqŋuŋׂŋÕˆŋ×’ŋÕœŋÕĻŋÕ°ŋÅŋÕĐŋÔŋ×åŋÕīŋÕöŋ×ĀÕĀ%Āp2ĀAĀVĀÕbĀmĀwĀĀ‹Ā•Ā¤ĀšĀÕĀĀĘĀÔĀâĀņĀŲõĀÁ#Á×6ÁĶAÁÕKÁOÁ×\ÁÕfÁjÁ×wÁÕ}ÁׇÁÕ‘ÁÕ›ÁÕĨÁēÁÕÅÁÉÁ×ÚÁÕäÁÕëÁ×ųÁÕÂÂp'Â6ÂKÂÕWÂbÂlÂv€Š™ŽÂÕĩÂŋÂÉÂ×ÂņÂŲûÂŲ ÃŲÃ/Ã?ÃNÃRÃ×bÃÕlÃÕvÃzÃ׉ÃĶ”ÃÕžÃĸÃׯÃÕšÃŊÃ×ĘÃÕĐÃ×ÚÃÕäÃÕîÃÕøÃüÃ× ÄÕÄÄ×-ÄÕ7ÄÕ>Ä×LÄÕVÄmÄpzĉĞÄÕĒÄĩÄŋÄÉÄĶÄŨÄėÄÅÕÅÅÅ+Å:ÅŲ>Å[ÅeÅÅŲ‰ÅŲ•ÅŲ­ÅŲąÅÎÅ×ÜÅÕæÅ÷ÅÆ Æ×ÆÕ%ÆÕ/Æ3Æ×@ÆÕJÆÕTÆXÆ×eÆÕoÆsÆ×€ÆÕ†Æ×ÆÕšÆÕ¤ÆÕŽÆÃÆÕÎÆŌÆ×ãÆÕíÆÕôÆ×ĮÕ Į!ĮÕ-Į<ĮQĮÕ]ĮhĮrĮ|Į†ĮĮŸĮ´ĮÕģĮÅĮĪĮâĮæĮ×ķĮÕũĮÕČ×ČČ×(ČÕ2ČÕ<Č@Č×MČÕSČ×aČÕkČ€ČÕŒČ›Č°ČÕŧČĮČŅČÛČåČīČúČ ÉÉ×ÉÕ%É)É×6ÉÕ<É×FÉÕPÉeÉÕqɀɕÉÕĄÉŦÉļÉĀÉĘÉÔÉäÉîÉøÉĘŲ Ę(Ę2ĘLĘŲ[ĘŲ_Ę€ĘĘŸĘŖĘ×ŗĘÕŊĘÁĘ×ÎĘÕØĘÜĘ×éĘÕķĘ÷Ę×ËÕ Ë×ËÕËÕ(ËÕ2ËGËÕRËVË×gËÕqËÕxË׆ËՌ˖ˠËĒË´ËžËČË×ËėËÕķËũËĖĖ*Ė9Ė=Ė×MĖÕWĖÕaĖeĖ×rĖÕ|ĖÕ†ĖŠĖ×—ĖÕĄĖĨĖײĖÕ¸Ė×ÂĖÕĖĖÕÖĖÕāĖäĖ×õĖÕÍÍ×ÍÕÍÕ&Í×4ÍÕ:ÍDÍNÍXÍbÍlÍvÍ…ÍšÍÕĄÍĢÍĩÍÄÍÎÍŨÍņÍŲūÍ×ÎŲÎÕÎ.Î=ÎAÎ×RÎÕ\Î`Î×mÎÕwÎ{Î׈ÎՒΖÎ×ŖÎÕŠÎ×ŗÎÕŊÎÕĮÎÕŅÎæÎÕņÎõÎ×ĪÕĪÕĪ×%ĪÕ+Ī5Ī?ĪIĪSĪ]ĪgĪvĪ‹ĪÕ’ĪœĪĻĪšĪŊĪ×ÎĪÕØĪÕâĪæĪ×ķĪÕũĪÕĐ Đ×ĐÕ"Đ&Đ×3ĐÕ9Đ×CĐÕMĐÕWĐÕaĐvĐÕĐ…Đ×–ĐÕ ĐÕ§Đ×ĩĐÕģĐÅĐĪĐŲĐãĐíĐ÷ĐŅŅÕ"Ņ,Ņ6ŅIŅMŅ×^ŅÕdŅ×tŅxŅ׉ŅÕ“ŅÕŅĄŅ׎ŅÕ´Ņ×ÂŅÕĖŅáŅÕíŅüŅŌÕŌ(Ō2Ō<ŌFŌPŌ[ŌkŌoŌ×|ŌÕ‚Ō“Ō—ŌפŌÕŽŌÕ´Ō×ÄŌČŌ×ŲŌÕãŌÕíŌņŌ×ūŌÕĶ×ĶÕĶ-ĶÕ9ĶHĶ]ĶÕiĶtĶ~ĶˆĶ’ĶœĶ­ĶąĶמĶÕÄĶŌĶÜĶæĶđĶ ÔŲÔŲ&ÔŲ*ÔPÔjÔŲtÔ؁ÔŲ“ÔŲ—ÔÆÔÕÔŲŲÔSíÔÕÕSÕ×ÕÕÕSÕ×*ÕÕ4ÕSIÕÕTÕSXÕ×eÕÕoÕÕuÕSšÕŲ´ÕŲāÕŲ ÖŲ-ÖŲ6ÖŲ@ÖŲLÖŲXÖŲfÖŲŒÖŲ–ÖŲÆÖŲĐÖŲéÖŲöÖŲ×Ų×Ų×Ų,×Ų9×ŲL×Ų`×Ųm×Ųz×Ų‡×Ų”×Ų¤×ŲÃ×ŲÍ×Ųę×ū×Ų Ø×ØŲ ØÕ&ØŲ1ØÕ7ØŲDØŲUØŲfØŲwØŲˆØŲ™ØŲĒØģØĘØߨÕéØúØÕŲŲÕ%ŲÕ0ŲEŲÕOŲ`ŲÕjŲ{ŲÕˆŲŲÕ§Ų¸ŲÕÂŲĶŲÕÜŲ×ęŲÕôŲøŲ× ÚÕÚÚ×%ÚÕ/ÚÕ5ÚJÚ×XÚÕbÚwÚÕ‚Ú†ÚדÚ՝ÚÕŖÚšÚ×ĮÚÕŅÚæÚÕņÚõÚ×ÛÕ ÛÕÛ(Û×6ÛÕ@ÛUÛÕ`ÛdÛ×qÛÕ{ÛՁۗÛ×ĨÛÕ¯ÛÄÛÕĪÛĶÛ×āÛÕęÛÕđÛÜ×ÜÕÜ3ÜÕ>ÜBÜ×OÜÕYÜÕ_ÜuÜ׃ÜՍܑÜ×ĸÜÕ­ÜąÜמÜÕČÜÕÎÜäÜ×ōÜÕüÜŨÕŨ Ũ×-ŨÕ7ŨÕ=ŨSŨ×aŨÕkŨ€ŨÕ‹ŨŨלŨÕĻŨÕŦŨÂŨ×ĐŨÕÚŨīŨÕúŨūŨ× ŪÕŪÕŪ1Ū×?ŪÕIŪ^ŪÕiŪmŪ×zŪÕ„ŪÕŠŪ Ū׎ŪÕ¸ŪÍŪÕØŪÜŪ×éŪÕķŪÕųŪß×ßÕ'ß<ßÕGßKß×XßÕbßÕhß~ß׌ßÕ–ßĢßÕļßēß×ĮßÕŅßÕ×ßíß×ûßÕāāÕ%ā)ā×6āÕ@āÕFā\ā×jāÕtā‰āÕ”ā˜ā×ĨāÕ¯āÕĩāËā×ŲāÕãāøāÕáá×áÕáÕ$á:á×HáÕRágáÕrává׃áՍáÕ“á­áąá×ÂáÕĖáááÕėáđá×ũáÕâÕ â'â+â×<âÕFâJâ×[âÕeâÕkâzâ~â׏âÕ™ââ×ĒâÕ´â¸â×ÄâÕŅâââÕėâũâÕããÕ'ãÕ-ã?ãCã×Pã×`ãdã×qãuãׂãÕŒãÕ–ãšã×ĢãÕĩãÕŋãÕÉãÍã×ŨãÕįãÕņãõã×äÕ ä×ää×-äÕ7ä;ä×MäÕWäÕ]ägäzäŠäÕ”äÕ ä¤ä×ÂäÆä×ŨäÕķä÷ä×åÕå× åÕ*å.å×:åÕJåÕPå×ZåÕdåxåÕ‚åÕˆå“å§åÕąåÕˇåÁåÍå×åáåôåæ%æÕ/æÕ5æCæYæÕcæÕmæƒæÕæÕ“æŠæžæÕČæÕÎæÜæÕææûæÕįįį×%įÕ6įKįÕRįbįfį×wįՁį…įלįÕĻįÕ°į´į×ĀįÕĘįÕĐį×ÚįŪį×ęįÕôįÕūįčÕč(čÕ2čGčÕRčcčÕmčÕsč’čŖčÕ­čÃčÕÍčÕĶčáč÷čÕéÕ é!éÕ+éÕ1éEéZéÕdéÕnéƒéÕ‰é˜éœé×­éÕēéÉéÍé×ŪéÕčéÕōéęÕ ęę ę×1ęÕ>ęMęQę×bęÕlępę×}ęÕ‡ęՍęęĄęײęÕŧęĀę×ŅęÕÜęāę×íęÕ÷ęÕũęë(ë7ëHëWë[ë×lëÕvëÕ|ëאëÕŽëÕ´ë×ÂëÕĖëáëÕëëėÕ ėėÕ&ėÕ,ėEėZėÕdėyėÕ„ė•ėÕŸėÕĨėžėĶėÕŨėōėÕũėíÕíÕí7íLíÕVíkíÕví‡íÕ‘íÕ—í°íÅíÕĪíäíÕīíîÕ îÕî)î>îÕHî]îÕhîyîÕƒîÕ‰îĸîˇîÕÁîÖîÕáîōîÕüîÕīī0īÕ:īOīÕZīkīÕuīÕ}ī‡ī‘ī›īĄīĢīĩīŋīÉīĶīŨīčī×öīÕđÕ đÕđÕ đ*đ;đYđiđ~đÕˆđđÕ¨đšđÕÃđÕÉđãđøđÕņņÕ"ņ3ņÕ=ņÕCņ]ņrņÕ|ņ‘ņÕœņ­ņÕˇņÕŊņ×ņėņÕöņ ōÕō'ōÕ1ōÕ7ōQōfōÕpō…ōՐōĄōÕĢōÕąōËōāōÕęō˙ōÕ ķķÕ%ķÕ+ķEķZķÕdķyķÕ„ķ•ķÕŸķÕĢķĀķÕĘķßķÕęķûķÕôÕ ô%ô:ôÕDôYôÕdôuôÕôÕ…ôŸô´ôÕžôĶôÕŪôīôÕųôÕ˙ôõ.õÕ8õMõÕXõiõÕsõÕyõ“õ¨õÕ˛õĮõÕŌõãõÕíõÕķõ ö"öÕ,öAöÕLö]öÕgöÕsöˆöÕ’ö§öÕ˛öÃöÕÍöÕĶöíö÷Õ ÷!÷Õ,÷=÷ÕG÷ÕM÷g÷|÷Õ†÷›÷ÕĻ÷ˇ÷ÕÁ÷ÕĮ÷á÷ö÷ÕøøÕ ø1øÕ;øÕAø[øpøÕzøøÕšøĢøÕĩøÕģøÕøęøÕôø ųÕų%ųÕ/ųÕ5ųOųdųÕnųƒųÕŽųŸųÕŠųÕ¯ųÉųŪųÕčųũųÕúúÕ#úÕ+ú5ú?úIúSú]úcúmúwúú‹ú•úŸúŠú¯úšúÃúÍú×úáúëúõú˙ú ûûû#û-û7ûAûLû×ZûÕdûyûÕƒû˜ûÕŖû´ûÕžûÕÄûŪûķûÕũûüÕü.üÕ8üÕ>üXümüÕwüŒüÕ—ü¨üÕ˛üÕ¸üŌüįüÕņüũÕũ"ũÕ,ũÕ2ũLũaũÕkũ€ũÕ‹ũœũÕĻũÕŦũÆũÛũÕåũúũÕūūÕ ūÕ&ū@ūUūÕ_ūtūÕūūÕšūÕ ūēūĪūÕŲūîūÕųū ˙Õ˙Õ˙&˙0˙:˙@˙J˙T˙^˙h˙r˙|˙‹˙˙× ˙ÕĒ˙Ž˙×ŋ˙ÕÉ˙ÕĪ˙č˙ų˙ÕÕ$9ÕDUÕ_Õe”ÕžŗÕžĪÕŲÕßųÕ-Õ8IÕSÕYsˆÕ’§Õ˛ÃÕÍÕĶíÕ !Õ,=ÕGÕMg|Õ†›ÕώÕÁÕĮŨįņû )3=I×SŲ^Õh}Õ‡œÕ§¸ÕÂÕČâ÷ÕÕ!2Õ<ÕB\qÕ{Õ›ŦÕļÕŧÖëÕõ Õ&Õ0Õ6PeÕo„Տ ÕĒÕ°ĘßÕéūÕ Õ$Õ*DYÕcxÕƒ”ÕžÕ¤žĶÕŨōÕũÕÕ4>HRXblv€Š”Ŗ§×¸ÕÉÍ×ŪÕčÕķ÷×Õ×Õ&;ÕEVÕ`ÕlÕ‹œÕŽÃÕĘŲęÕô Õ % Õ/ Õ5 C Y Õc Õm ƒ Ս Õ“ ¨ Ŋ ÕĮ ÕŌ Ö ×į Õņ  Õ  ×" Õ, Õ2 L P ×a Õk € Õ‹  ל ÕĻ ÕŦ Æ Ę ×Û Õá ķ Õũ  Õ - Õ7 ÕC G ×X Õ_ n  Õ‰ š Õ¤ ē ÕÄ ÕĘ Ø ô Õū  Õ 5 J ÕT i Õt … Տ Õ• Ž à ÕÍ â Õí ū Õ Õ # 5 Õ? T Õ_ p Õz Õ€ – ¨ Õ˛ Į ÕŌ ã Õí Õķ  Õ%:ÕEVÕ`Õf|ŽÕ˜­Õ¸ÉÕĶÕŲīÕ  Õ+<ÕFÕLbtÕ~“Õž¯ÕšÕŋÕįÕņÕ"Õ,Õ2HZÕdyÕ„•ÕŸÕĨģÍÕ×ėÕ÷ÕÕ.@ÕJ_Õj{Õ…Õ‹ĄŗÕŊŌÕŨîÕøÕū&Õ0EÕPaÕkÕq‡™ÕŖ¸ÕÃÔÕŪÕäú Õ+Õ6GÕQÕWl~ÕˆÕ¨šÕÃÕÉŪđÕúÕ+Õ5Õ;PbÕlÕŒÕ§Õ­ÂÔÕŪķÕūÕÕ4FÕPeÕpÕ‹Õ‘ĒŋÕÉŪÕéúÕÕ #8ÕBWÕbsÕ}ÕƒœąÕģĐÕÛėÕöÕü*Õ4IÕTeÕoÕuŽŖÕ­ÂÕÍŪÕčÕîÕ&;ÕFWÕaÕg€•ÕŸ´ÕŋĐÕÚÕāųÕ-Õ8IÕSÕYoyƒ‰“§ąģÅĪŲãéķũ%/9CMSYcis}‡‘›Ĩ¯ĩŋÉĶŨįō ŲŲŲ,ŲXŲaŲkŲwŲƒŲ‘ŲŖŗŲžÕČß]ęÕđ˙ÕÕ$3HÕRÕXgk×|ՆՐĨÕ¯ĀÕĘÛÕäķÕ#Õ-=ÕJN×_Õim×€ÕŠÕ”ÕžĸךÕÃĮ×ŲÕá×ëī×üÕÕÕ× $×1Õ;ÕEÕK×UÕ_c×tÕ~Մ׎’×žÕ¨Õ˛ļ×ÂÕĖÕÖÕÜîō×ÕÕÕ#'×4Õ>ÕHÕN×XÕbf×rÕ|ՆՌזՠ´ÕžÕÄĪãÕíÕķũ   7 ; ×L ÕV Z ×m Õw Ձ Õ‡ ו ™ ×Ļ Õ° Õē ÕĀ ×Ę Î ×Û Õå Õī Õõ ×˙ Õ ! !×!Õ(!Õ.!×8!/B/×S/Õ]/a/×r/Õ}//׎/Õ˜/Õž/ļ/ē/×Ë/ÕÕ/Ų/×ę/Õõ/ų/×0Õ0Õ0.0C0ÕM0b0Õm0~0Õˆ0™0ÕĻ0Ē0×ģ0ÕÅ0É0×Ú0Õå0é0×ö0Õ1Õ11"1×31Õ=1R1Õ]1a1×n1Õx1Õ~1–1Ģ1Õĩ1Ę1ÕÕ1æ1Õđ12Õ22×#2Õ-212×B2ÕM2Q2×^2Õh2Õn2†2Š2×›2ÕĨ2ē2ÕÅ2É2×Ö2Õā2Õæ2ū23×3Õ3!3×23Õ=3A3×N3ÕX3Õ^3v3z3׋3Õ•3™3×Ē3Õĩ3š3ׯ3ÕĐ3ÕÖ3î3ō3×4Õ 44×"4Õ-414×>4ÕH4ÕN4f4j4×{4Õ…4‰4ך4ÕĨ4Š4×ļ4ÕĀ4ÕÆ4Ū4â4×ķ4Õũ45×5Õ5!5×.5Õ85Õ>5V5Z5×k5Õu5y5׊5Õ•5™5×Ļ5Õ°5Õļ5Î5Ō5×ã5Õí5Õ÷5 6Õ6'6Õ16B6ÕK6Z6^6×o6Õy6}6׎6Õ™66×Ē6Õ´6Õē6Î6×á6Õë6ī6×7Õ 77×7Õ%7Õ-7×37Ų@7×J7ŲZ7Ųj7Ų~7“7՝7­7Õˇ7Č7ÕŌ7ã7Õí7ū7Õ 88×"8Õ,808×<8ÕF8J8×W8Õd8h8×y8Õƒ8‡8ט8ÕŖ8§8×´8Õž8ÕÄ8Ü8ā8×ņ8Õ÷89 9×9Õ%9Õ+9:9>9×O9Õ_9t9Õ~99Õ™9Ē9Õŗ9Â9Æ9××9Õá9Õį9ö9ú9× :Õ::×*:Õ5:9:×F:ÕP:ÕV:n:r:׃:Ս:ĸ:Õ­:ą:מ:ÕČ:ÕÎ:æ:û:Õ;;Õ;0;Õ=;A;×R;Õ\;`;×q;Õ|;€;׍;Õ—;՝;ĩ;š;×Ę;ÕÔ;Ø;×é;Õô;ø;×<Õ<Õ<-<1<×B<ÕL<ÕR<a<e<×v<Õ€<„<ו<Õ <¤<׹<Õģ<ÕÁ<Ų<Ũ<×î<Õø< =Õ==×)=Õ3=Õ9=Q=U=×f=Õp=…=Ր=”=ץ=ÕĢ=Õą=É=Ū=Õč=ũ=Õ>>Õ#>Õ)>A>V>Õ`>u>Õ€>‘>Õ›>ÕĄ>š>Î>ÕØ>í>Õø> ?Õ?Õ?1?F?ÕP?e?Õp??Õ‹?Õ‘?Ĩ?ˇ?ÕÁ?Ö?Õá?ō?Õü?Õ@@/@Õ9@N@ÕY@j@Õt@Õz@’@§@Õą@Æ@ÕŅ@â@Õė@Õô@AÕA%AÕ0AAAÕKAÕQAeAoAyAƒA‰A“AA§AąAŧAĖAĐA×áAÕëAīA×BÕ BB×BÕ&BÕ,BDBYBÕcBxBÕƒB”BÕžBÕ¤BŧBŅBÕÛBđBÕûB CÕCÕ"C7CÕACVCÕaCrCÕ|CÕ‚C›C°CÕēCĪCÕÚCëCÕõCÕûCD(DÕ2DGDÕRDcDÕmDÕyD}D׎DÕ˜DœD×­DÕˇDÕŊDÔDåDÕņDEÕE%EÕ0EAEÕKEÕQEiE~EÕˆEEÕ¨EšEÕÃEÕĪEäEÕîEFÕFFÕ)FÕ/FGF\FÕfF{FÕ†F—FÕĄFÕ­FÂFÕĖFáFÕėFũFÕGÕ G%G:GÕDGYGÕdGuGÕGÕ‹G GÕĒGŋGÕĘGÛGÕåGÕņGHÕH%HÕ0HAHÕKHÕQHeHkHuH{HH‹H‘H—HĄH§H­HˇHŊHÃHÍH×HŨHįHíHķHũHIII:IJIŲZIŲjI×tIŲ‰II× I]ĢIÕąIĀIÄI×ÕIÕåIúIÕJJÕJ0JÕ9JHJLJ×]JÕgJkJ×|JÕ‡J‹JטJÕĸJÕ¨JĀJÄJ×ÕJÕßJãJ×ôJÕ˙JK×KÕKÕ K8K\B\×O\ÕY\Õ_\w\Œ\Õ–\§\Õ­\É\Í\×Ū\Õč\ė\×ũ\Õ] ]×]Õ#]Õ)]A]E]×V]Õ`]d]×u]Õ€]„]ב]Õ›]ÕĄ]š]Î]ÕØ]é]Õī]˙]^×^Õ^"^×3^Õ>^B^×O^ÕY^Õ_^y^}^׎^Õ˜^­^Õ¸^ŧ^×É^ÕĶ^ÕŲ^ķ^÷^×_Õ__×'_Õ2_6_×C_ÕM_ÕS_k_o_×€_ÕŠ_Ž_ן_ÕĒ_Ž_×ģ_ÕÅ_ÕË_ã_į_×ø_Õ``×`Õ`#`×4`Õ>`B`×S`Õ^`b`×o`Õy`Õ`—`›`×Ŧ`Õļ`Ë`ÕÖ`Ú`×į`Õņ`Õ÷`aa×$aÕ.a2a×?aÕKaOa×`aÕjana×aÕŠaŽa×›aÕĨaÕĢaÃaĮaרaÕâa÷aÕbb×bÕbÕ#b;b?b×PbÕZb^b×obÕzb~b׋bÕ•bÕ›bĩbšb×ĘbÕÔbébÕôbøb×cÕcÕc/c3c×DcÕNcRc×_cÕkcoc×€cÕŠcÕ”cŠcÕŗcÄcÕÎcßcÕčc÷cûc× dÕdd×+dÕ6d:d×GdÕQdÕWdodsdׄdÕŽd’d×ŖdÕŽd˛d×ŋdÕÉdÕĪdįdëd×üdÕe e×eÕ&e*e×7eÕAeÕGe]eteÕ~e‚eדe՝eĄe׎eÕ¸eŧe×ÉeÕĶeÕāeõeÕ˙eÕ ffÕ$fÕ*f8fÕBfFf×SfÕ]fÕgfÕqfuf׏f™f¨fŦf×ŊfÕĮfÕÍfÜfāf×ņfÕggÕ g1gÕ;gLgÕUgdghg×ygÕƒg‡gטgÕŖg§g×´gÕžgÕÄgÜgņgÕûghÕh,hÕ6hÕnÕHn]nÕhnynÕƒnÕ‰nĄnļnÕĀnÕnÕānņnÕûnÕoo.oÕ8oMoÕXoioÕsoÕo”oÕžoŗoÕžoĪoÕŲoÕßoķoųop ppp'p-p7pApGpQpWp]pgpqpwpp‹p‘p›pĨpĢpĩpŋpÅpËpÕpßpępūpqŲqŲ8q×BqŲMqÕSqŲdqŲuqŲŠqŽqןqÕŠqÕŗqĮqÕŅqæqÕņqrÕ rÕr'r-rtBt×StÕ]tat×rtÕ}tt׎tÕ˜tÕžtˇtģt×ĖtÕÖtÚt×ëtÕõtųt× uÕuu×(uÕ3u7u×DuÕNuÕTulu|uÕ‚uŽuŠuÕŗuˇu×ÎuÕŲuŨu×đuÕüuv× vÕvv#v×4vÕ>vBv×NvÕXv\v×mvÕxv|v׉vÕ“vÕ™vŗvˇv×ČvÕŌvÖv×âvÕėvwÕ ww×wÕ'wÕ-wGw\wÕfwvwÕ€w•wÕ wąwÕģwÕÁwÛwđwÕúw xÕx)xÕ4xExÕOxÕUxox„xÕŽxŖxÕŽxŋxÕÉxÕĪxäxîxøxy yy y*y4y>yEy_yŲhyŲryŲyŲŒyŲŠyŲĪyŲčyŲņyŲûyŲzŲzŲ!zŲ3z[GzŲTzŲ_zÕuz×zŲ“z[—zרzÕ˛zÕŧzÕÆz[Ęz×ÖzÕāzÕęzÕđz[üz[{×{Õ{Õ+{[/{×<{ÕF{ÕV{[Z{×g{Õq{Õ}{ׇ{Õ‘{[•{×ĸ{ÕŦ{Õ¸{×Â{ÕĖ{[Đ{×Ũ{Õį{Õí{[|[|×|Õ#|[2|[6|×G|ÕQ|[U|×f|Õq|[u|ׂ|ÕŒ|Õ’|[Ē|[ŋ|ÕÉ|[Ū|Õé|[ú|Õ}Õ }[}[%}×/}Ų<}ŲG}ÕM}ŲX}Õ^}Ųi}Õs}[w}׈}Õ’}Õœ}Õĸ}×Ŧ}Õļ}[Ø}[é}Õü}[~×~Õ"~[&~×7~ÕC~×M~[]~Õm~[}~Õ‡~Õ‘~Õ—~[Š~[­~מ~ÕČ~ÕŌ~ÕÜ~[ā~×ė~Õö~ÕÕ[[×-Õ=ÕG[K×^ÕnÕx[|×‰Õ™ÕŸ×ŠÕŗ[ˇ×ÃÕĶÕŲ×ãÕí[€Õ €[€[2€Õ8€[B€[N€[X€[b€[v€[z€×‘€Õ›€ÕĢ€[¯€×€ÕĖ€Õ܀[ā€×í€Õ÷€Õ× Õ[×'Õ1Õ;ÕA×KÕU[iÕsÕy[„[˜ÕĸÕ¨[˛[ž[ȁ[ԁ[æ[‚Õ ‚Õ‚[%‚Õ/‚Õ5‚[C‚[S‚Õ]‚Õg‚[w‚Ձ‚[‘‚Õ›‚[°‚Õģ‚[Ė‚ÕւÕ܂[ų‚[ƒÕ ƒ[.ƒ[JƒÕTƒ[pƒÕvƒ[ˆƒ[ŖƒÕ­ƒÕˇƒ[ĮƒÕ҃Õ׃[áƒ[ōƒ[„Õ„['„[C„ÕM„[i„Õo„[„[œ„ÕĻ„[ŧ„ÕƄ[քÕā„[õ„Õ…[…Õ…Õ!…[7…[A…[K…[U…[`…[…Ų …°…×ē…Ų˅Ų܅Ųė…Ų††]%†‡,†;†P†ÕZ†k†Õu†…†Õ’†–†×§†Õą†Õģ†ÕÁ†×ԆÕŪ†ķ†Õũ†‡Õ‡(‡Õ1‡×?‡ÕI‡M‡×^‡Õh‡Õr‡Õ|‡€‡×‘‡Õ›‡ÕĨ‡Õ¯‡ŗ‡×ćÕˇևá‡å‡×ö‡ÕˆÕ ˆˆÕ)ˆÕ3ˆÕ=ˆMˆÕWˆÕaˆÕgˆoˆ~ˆ“ˆÕˆ˛ˆÕŊˆΈÕ؈Õۈöˆúˆ× ‰Õ‰Õ‰Õ)‰-‰×>‰ÕH‰ÕR‰Õ\‰q‰Õx‰ƒ‰މ’‰×Ŗ‰Õ­‰Õˇ‰ˉÕ։Õā‰Õę‰ú‰ÕŠÕŠÕŠŠ+Š/Š×@ŠÕJŠ_ŠÕjŠnŠ×{ŠÕ…ŠÕ‹ŠŖŠ¸ŠÕŠ׊ÕâŠķŠÕũŠÕ‹‹0‹Õ:‹O‹ÕZ‹k‹Õu‹Õ{‹‹ž‹ĸ‹×ŗ‹ÕŊ‹ÕĮ‹ˋ×؋Õâ‹Õė‹đ‹×ŒÕ ŒÕŒ×ŒÕ&Œ*Œ×:ŒÕDŒÕJŒ×TŒÕ`ŒdŒ×pŒÕzŒÕ€Œ×ŠŒÕ˜ŒœŒ×­ŒÕˇŒģŒ×ԌÕ܌ÕæŒęŒ×öŒÕÕ×× Õ*Õ48×DÕNR×^Õh}ÕˆŒ×™ÕŖÕŠƍ׍Õá÷ÕŽÕŽŽ+ŽÕ5ŽÕ?ŽUŽÕ_ŽÕeŽuށޅŽ×–ŽÕ ŽĩŽÕĀŽĎ×ŅŽÕێÕáŽųŽũŽ×ÕÕ#8ÕBÕMbÕlÕwŒÕ–ÕĄĨ×ļÕĀÕʏÕԏÕŪÕäīķ×Õ×)Õ3Õ=A×MÕWÕ]×gk×wÕÕ‹×›ÕĨА×ĩÕŋԐÕߐã×đÕúÕ‘‘.‘Õ8‘N‘ÕX‘Õ^‘l‘‚‘ÕŒ‘Õ–‘Ŧ‘Õļ‘Õŧ‘Бå‘Õī‘’Õ’ ’Õ*’Õ0’H’]’Õg’k’×|’Õ‡’‹’ט’Õĸ’Õ¨’ŧ’’Ė’֒ā’ę’ô’ū’“““6“Õ@“D“×U“Õ_“c“×t“Õ~“Õˆ“Œ“ם“Õ§“ģ“ÕÁ“Гԓ×ä“Õî“”Õ””×”Õ)”Õ/”G”_”}”Ž”Õ˜”Õž”ŗ”ž”͔â”Õė”ũ”Õ••Õ"•Õ/•3•×D•ÕJ•]•g•q•€•Ų„•Ą•°•^ŋ•ŲɕŲԕÕڕŲå•Õī•^ķ•×–Õ–Õ–^#–^'–×8–ÕB–^F–×W–Õb–^f–×s–Õ}–Õƒ–^›–^Ÿ–×°–Õē–^ž–×Ņ–Õۖ^ō–Õü–Õ—^—Õ —Õ&—^4—^D—ÕN—ÕX—^\—×h—Õr—^v—ׂ—ÕŒ—^Ą—ÕŦ—^°—×Ŋ—ÕĮ—Õ͗^č—×û—Õ˜^ ˜×˜Õ$˜Õ.˜^C˜ÕM˜ÕW˜Õa˜^q˜Õ{˜Õ…˜Õ‹˜^“˜^ĸ˜^Ϙס˜ÕÁ˜^֘Õá˜^å˜×ō˜Õü˜Õ™^™^9™^Y™^j™Õt™Õz™^Ž™^™^˛™Õŧ™Õ™^Ņ™^â™^ņ™^õ™×šÕ š^š^0šÕ:š^OšÕZš^kšÕušÕ{š^š^™š^Ŗš^˛ššŲԚŲâš›`›Ų›Ų-›ŲA›`E›×V›Õb› i›`x›`|›×›Õ—›`››×Ŧ›Õˇ›`ģ›×țÕŌ›Õ؛`đ›`ô›×œÕœ`œ×&œÕ0œ`4œ×GœÕQœÕ[œ`_œ×kœÕuœÕ{œ×…œ`‰œ×•œÕŸœÕМ`­œ×šœÕÜ`Įœ×͜ÕŨœ`ōœÕũœ`×ÕÕ`9×LÕV`Z×kÕuÕ`”ÕžÕ¨Õ˛`ÕĖÕ֝Õܝ`ä`ķ`÷×žÕž`'žÕ2ž`6ž×CžÕMžÕSž`kž`Šž`Ēž`ģžÕŞÕ˞`ߞ`Ÿ`ŸÕ$ŸÕ*Ÿ`9Ÿ`JŸ`YŸ`nŸÕtŸ`Ÿ`ŸŸ`ޟžŸŲΟŲ۟ Ų b Õ+ b/ ×; ÕE bI ×U Õ_ bc ×p Õz b Õš bž ×Ģ Õĩ Õģ bá Ų ĄŲ.ĄŲ7ĄŲAĄŲMĄŲYĄŲgĄŲyĄdĄŲšĄ×¤ĄŲ¯ĄÕĩĄŲĀĄÕÆĄŲŅĄÕÛĄdߥ×đĄÕûĄd˙Ą×ĸÕĸÕ$ĸd(ĸ×5ĸÕ?ĸÕIĸdMĸ×^ĸÕhĸÕ{ĸdĸ׏ĸÕĸĸdĻĸ׸ĸÕžĸ×ČĸdĖĸ×ŪĸÕčĸdėĸ×ūĸÕŖÕŖdŖd+Ŗd;ŖÕPŖdTŖ×rŖdvŖ×ŖÕŖŖd§Ŗ×´ŖÕÆŖ×ĐŖÕÚŖdŪŖ×ęŖÕúŖÕ¤× ¤Õ¤d.¤Õ8¤dN¤ÕT¤d`¤dt¤Õ~¤Õ„¤dޤdš¤d¤¤dޤdÁ¤dŌ¤Õܤdō¤Õü¤ÕĨdĨd&ĨÕ0ĨÕ:ĨdPĨÕZĨÕ`ĨdqĨ×{ĨŲ†ĨÕŒĨd–Ĩd ĨdĒĨd´ĨdžĨdČĨdĶĨdŨĨdįĨdņĨdüĨdĻd%ĻŲ/ĻŲ;ĻŲGĻŲSĻŲdĻxĻŲ…ĻŲ•ĻŲĨĻŲĩĻŲÅĻŲÕĻ×īĻŲúĻÕ§Ų§8§M§Q§×f§Õp§t§×ާ’§×¨§Ŧ§×Á§Ō§į§Õņ§Õ÷§¨ ¨×¨Õ%¨)¨×6¨Õ<¨L¨P¨×a¨Õk¨Õv¨‹¨Õ•¨Õ›¨Ŧ¨ŧ¨×ҍÕÛ¨Õá¨×î¨ū¨Š×ŠÕŠÕ#Š×0Š<Š×OŠÕYŠ]Š×nŠÕxŠ|Š×‰ŠÕŠŸŠŖŠ×´ŠÕžŠÕÅŠ×ËŠŲÜŠāŠ×ņŠÕûŠ˙Š× ĒÕĒ"Ē&Ē×DĒHĒ×YĒÕcĒÕiĒ×zĒ~Ē׊ĒÕ”ĒÕšĒĢǝĒ×ĀĒÕĘĒÕĐĒ×áĒåĒ×ņĒÕûĒÕĢĢÕ$Ģ5ĢÕ?ĢPĢÕYĢjĢnĢ×ĢÕ‰ĢՏĢנ̤Ģ×°ĢÕēĢÕĀĢŅĢÕĢ׿ĢÕđĢÕöĢ×Ŧ Ŧ×ŦÕ!ŦÕ+Ŧ@ŦÕJŦ[ŦÕeŦvŦÕŦŦ”Ŧ×ĨŦÕ¯ŦŗŦ×ÄŦÕĪŦāŦÕęŦÕđŦ­­Õ'­<­ÕG­X­Õb­Õh­|­Œ­Ą­ÕĢ­ŧ­ÕČ­Ė­×Ũ­Õã­ō­ö­×ŽÕŽÕŽÕ%ŽÕ/ŽÕ9ŽMŽÕWŽlŽÕwŽˆŽÕ’ŽÕ˜Ž°ŽÄŽÕÎŽãŽÕîŽ˙ŽÕ ¯Õ¯#¯)¯3¯>¯S¯Õ]¯n¯Õz¯~¯×¯Õ™¯¯×ޝÕš¯Ŋ¯×ƝÕÔ¯ÕÚ¯ō¯°Õ°°×"°Õ,°0°×=°ÕC°T°X°×i°Õo°~°‚°×“°Õ°Ą°×­°Õˇ°ģ°×ȰÕŌ°Õß°ã°×ô°Õū°Õą×ą!ą%ą×6ąÕ@ąÕFą×Wą[ą×gąÕqąÕ{ąą×ąÕšąžą×ĢąÕĩąšą×ÆąÕĪąāąõąÕûą ˛˛Õ)˛9˛ÕC˛T˛Õ^˛Õg˛y˛Õƒ˛˜˛ÕŖ˛´˛Õž˛ÕIJØ˛â˛č˛î˛ø˛ŗ ŗŗ8ŗLŗŲYŗŲmŗqŗ×‚ŗÕŒŗŗ×ĄŗÕŦŗ°ŗ×ŊŗÕĮŗÕÍŗåŗéŗ×úŗÕ´´×´Õ$´(´×5´Õ?´ÕE´]´r´Õ|´‘´Õœ´­´Õˇ´ÕŊ´Õ´ô´ĩ%ĩÕ/ĩÕ5ĩIĩSĩ]ĩgĩqĩ{ĩĸĩŲŦĩŲ¸ĩŲËĩŲĪĩėĩ×ļļ×ļÕ"ļ&ļ×3ļÕ=ļRļÕ]ļnļÕxļ‰ļÕ—ļŦļÕļļÆļÕĐļáļÕëļÕøļüļ× ˇÕˇˇ×(ˇÕ2ˇ6ˇ×CˇÕMˇÕWˇ[ˇ×lˇÕvˇ‹ˇÕ–ˇšˇ×§ˇÕąˇÕˇˇˡܡņˇÕûˇ ¸Õ¸&¸Õ0¸Õ=¸R¸Õ\¸m¸Õs¸¸‰¸“¸¸§¸ą¸ĸ×Õ¸Õ߸ô¸Õ˙¸š×šÕšÕ š8šMšÕWšlšÕwšˆšÕ’šÕ˜šŦššŲŅšŲ÷šēŲēŲ+ē/ē×@ēÕJēÕTēÕ^ēbē×}ēē‘ē×ĸēÕ¨ēסēÉēÕĶē×ē×õēųē×ģģ×,ģÕ6ģÕ<ģ×MģQģ×]ģÕgģÕmģ~ģ™ģÕ¤ģ¨ģ×ŋģÕÅģ×ÖģÚģ×ėģÕöģŧ(ŧ>ŧOŧSŧ×dŧÕnŧÕtŧ×…ŧ‰ŧוŧÕŸŧÕĨŧļŧËŧÕÕŧÕÛŧđŧôŧ×ŊÕ ŊÕŊ!Ŋ2ŊÕ<ŊÕBŊWŊ[Ŋ×gŊÕqŊÕwŊ‰ŊŊמŊÕ¤ŊŗŊˇŊ×ČŊÕŌŊÖŊ×âŊÕėŊđŊ×ũŊÕžÕž)žÕ3žCžÕMž^žÕhžÕqžž…ž×–žÕ žÕĻž×ŗžÞĮž×ŪžÕäž×õžųž× ŋÕŋŋ×0ŋ4ŋ×GŋKŋ×]ŋnŋrŋ׃ŋՍŋÕ“ŋ× ŋ°ŋ´ŋ×ÅŋÕĪŋÕÕŋ׿ŋęŋ×öŋÕĀÕ ĀĀÕ)Ā:ĀÕDĀUĀÕ^ĀoĀsĀׄĀÕŽĀÕ”Ā×ĄĀąĀĩĀׯĀÕĐĀÕÖĀ×ãĀķĀ÷Ā×ÁÕÁÕÁ×%Á5ÁJÁÕTÁdÁÕnÁÁÕ‰ÁÕ–ÁšÁ×ĢÁÕĩÁĘÁÕÕÁŲÁ׿ÁÕđÁÕöÁÂ#ÂÕ-ÂBÂÕMÂ^ÂÕhÂÕn†›ÂÕĨÂĩÂÕŋÂĐÂÕÚÂÕãÂíÂ÷Âà ÃÃ1ÃAÃŲQÃŲeÃiÃ×zÃՄÈÃ×™ÃդèÃ×ĩÃÕŋÃÕÅÃŨÃōÃÕüÃÄ×ÄÕ!ÄÕ+Ä/Ä×;ÄÕEÄÕKÄ×UÄYÄ×eÄÕoÄÕyÄ}Ä׉ÄÕ“Ä—Ä×ŖÄÕ­ÄÂÄÕÍÄŅÄ×ŪÄÕčÄÕîÄ ÅÅÕ&Å<ÅÕFÅÕLÅZÅpÅÕzÅÕ„ÅšÅÕ¤ÅÕĒÅžÅŨÅũÅÆÕÆÕÆ2ÆPÆVÆ`ÆfÆÆÆ×™ÆŲ¤ÆÕĒÆŲˇÆŲÂÆÕČÆŲĶÆÕŲÆŲäÆÕęÆŲ÷ÆŲĮÕĮŲĮÕĮ.Į=ĮAĮ×RĮÕ\Į`Į×mĮÕwĮ{Į׈ĮÕ•Į™Į×ĒĮÕ´Į¸Į×ÅĮÕĪĮĶĮ×āĮÕéĮ×īĮŲúĮÕČŲ ČÕČ×ČŲ(ČŲ3ČÕ=ČAČ×RČÕ\Č`Č×mČÕwČ{Č׈ČÕ•Č™Č×ĒČÕ´ČÕēČ×ËČĪČ×ÛČÕåČÕëČüČÉ×ÉÕÉÕ!É×2É6É×BÉÕLÉÕRÉcÉgÉ×xÉÕ‚ÉÕˆÉיɝÉ׊ÉÕŗÉÕšÉĘÉÎÉ×ßÉÕéÉÕīÉ×ĘÕ ĘĘ#Ę'Ę×8ĘÕDĘ×UĘYĘ×eĘÕoĘÕuʆʊĘ×›ĘÕ§Ę׸ĘŧĘ×ČĘÕŌĘÕØĘéĘíĘ×ūĘÕËÕË×"ËÕ(Ë3ËBËFË×WËÕcË×tËxËׄËÕŽËÕ”ËĨËŠË×ēËÕÆË××ËÛË×įËÕņËÕ÷ËĖ Ė×ĖÕ'ĖÕ-Ė×AĖÕGĖRĖaĖeĖ×vĖÕ‚Ėד˗Ė×ŖĖÕ­ĖÕŗĖÄĖČĖ×ŲĖÕåĖ×öĖúĖ×ÍÕÍÕÍ'Í+Í×<ÍÕHÍ×YÍ]Í×iÍÕsÍÕyÍŠÍŸÍÕŠÍšÍÕÃÍÔÍÕŪÍÕëÍÎÕ ÎÎÕ$Î5ÎÕ?ÎÕHÎRÎ\ÎfÎpÎ΃Î×”ÎÕžÎĸÎׯÎÕšÎŊÎ×ĘÎÕ×ÎÛÎ×ėÎÕöÎÕüÎ× ĪĪĪ×.ĪÕ8ĪÕ>Ī×KĪ[Ī_Ī×pĪÕzĪÕ€Ī×”ĪÕšĪĨδΏĪ×ÉĪÕÕĪ×âĪōĪöĪ×ĐÕĐ× Đ0Đ4Đ×EĐÕOĐÕUĐ×iĐÕoĐzĐ‰ĐĐמĐÕĒĐסĐĮĐËĐ×ÜĐÕæĐÕėĐ×ŅÕŅŅ Ņ$Ņ×5ŅÕAŅ×NŅ^ŅbŅ×sŅÕŅ×ŒŅœŅ Ņ׹ŅÕŊŅ×ĘŅÚŅŪŅ×īŅÕûŅ×ŌŌŌ×-ŌÕ9Ō×FŌVŌkŌÕuŌ…ŌÕŌ ŌÕĒŌÕˇŌĖŌÕÖŌæŌÕđŌĶÕ ĶÕĶĶ(Ķ2Ķ<ĶHĶYĶmĶŲzĶŲ‰ĶדĶŲĶÕŖĶŲ­ĶÕˇĶËĶÕŅĶÜĶ׿ĶŲđĶÕöĶÔ× ÔŲÔ"Ô×2ÔÕ<ÔÕFÔJÔ×WÔÕaÔÕmÔqÔׁÔÕ‹ÔÕ‘Ô×ĸÔĻÔײÔÕŧÔÕÂÔĶÔ×Ô×įÔÕņÔÕûÔ˙Ô× ÕÕÕÕÕ4ÕÕ:ÕEÕUÕYÕ×iÕÕuÕ׆ՊÕ×–ÕÕ ÕÕĻÕˇÕģÕ×ËÕÕÕÕŲÕ×ęÕÕõÕųÕ×ÖÕÖÕÖ.ÖBÖÕLÖ\ÖÕfÖwÖՁÖÕŽÖ’Ö×ĸÖÕŦÖ°Ö×ŊÖÕĮÖËÖרÖÕâÖÕėÖđÖ××Õ × ×Õ+×/××<×ÕF×ÕL×`×q×…×Տן×ÕŠ×ē×ÕÄ×ÕŅ×å×ÕīרըØ*ØÕ4ØIØÕTØeØÕoØÕuØ‰Ø“ØØ§ØąØģØÆØĐØÚØäØîØųØŲŲŲ(ŲŲ<Ų@Ų×QŲÕ[Ų_Ų×pŲÕ{ŲŲ׌ŲÕ–ŲÕœŲ´ŲĶŲķŲÚÕÚÕÚ(Ú.Ú8ÚBÚVÚfmÚŲsÚŲƒÚŲŽÚÕ”ÚŲ¨ÚfšÚfČÚfĖÚ×ŨÚÕįÚÕņÚÕøÚfÛÕÛfÛ×.ÛÕ8Ûf<Û×MÛÕXÛfiÛÕsÛÕyÛf‘ÛfĻÛÕ°ÛfÅÛÕĐÛfáÛÕëÛÕņÛfÜfÜf-Üf7ÜfAÜfPÜfTÜ×eÜÕoÜfsÜׄÜՏÜf ÜÕĒÜÕ°ÜfÄÜ×ÔÜfŪÜfčÜf÷Üf ŨÕŨf+ŨÕ6ŨfGŨÕQŨÕWŨfkŨftŨf~ŨfˆŨfŦŨfļŨfĀŨfĘŨfÔŨfķŨŲ÷ŨŪ(Ū3Ū×BŪ×LŪÕVŪgŪrŪ|Ū†ŪŪšŪ¤ŪŽŪŋŪhÕŪŲßŪŲīŪŲúŪÕßŲßh%ßh4ßh8ß×IßÕSßÕ]ßÕdß×wßՁßh…ß×–ßÕ ßh¤ß×ĩßÕĀßhŅßÕÛßÕáßhųßhāÕāh-āÕ8āhIāÕSāÕYāhmāhwāh•āhŸāhŠāh¸āhŧā×ÍāÕ×āhÛā×ėāÕ÷āháÕáÕáh,á×<áhFáhPáh_áhtáÕ~áh“áÕžáh¯áÕšáÕŋáhĶáhÜáhæáhđáhâhâh(âh2âh<âhUâmâÕsâ×}âÕ“â՝âĄâ׎â×ŊâÍâŪâíâãÕ ãÕãã×,ãÕ7ãHã[ãkã€ãÕŠãÕ‘ã›ãĨã¯ãšãÃãÍãŨãŲáãūã%ä4äkKäŲQäŲaäŲläÕräŲ†äk—äkĻäkĒä×ģäÕÅäÕĪäÕÖäkíäÕ÷äkûä× åÕåkå×+åÕ6åkGåÕQåÕWåkoåk„åÕŽåkŖåÕŽåkŋåÕÉåÕĪåkãåkíåk ækækæk.æk2æ×CæÕMækQæ×bæÕmæk~æÕˆæÕŽækĸæ×˛ækŧækÆækÕækęæÕôæk įÕįk%įÕ/įÕ5įkIįkRįk\įkfįkŠįk”įkžįk¨įk˛įkËįãįÕéį×ķįÕ čč)č>čÕHčÕSčWč×hčÕsčwčׄčדčŸč×­čÕˇčģč×ĖčÕÖčÚč×įčÕņčÕũčéÕé?éJéYéjé}ééĸéÕŦéÕŗéŊéĮéŅéÛéëéŲīé ę-ęCęŲQęŲ]ęŲvęŲÁęŲĪęŲáęŲåęë×6ëAë×OëÕUë×_ëÕiëÕsëÕ}ëՍëÕ—ëÕĄëĨë×ļëÕŧëĶë×ë×äë×ķëėėÕė×-ėÕ3ė×CėGė×XėÕbėfė×sėÕyėׇėÕ‘ė•ė×ĻėÕ­ė¸ėČėŨėÕįėūėÕí%íÕ/í@íÕFíXí\í×ií×xíˆíŖíÕ­íĘíÕÔíåíÕîí×üíÕî î×îÕ%î)î×6îÕ@îÕLîPî×aîÕkîÕqî×{îÕ…î‰î×–îÕ îÕĒîÕ´îÕîŲî×čî×īī*īÕ4īEīÕOī`īÕsīˆīÕ’īŖīÕ­īžīÕŅīøīüī×đđ×+đ/đ×<đÕHđYđlđ|đ€đבđÕ—đץđÕ§đąđģđÅđĪđŲđãđíđ÷đņ ņ×ņÕ&ņÕ-ņ7ņAņQņUņ×fņÕlņ×vņÕ€ņÕŠņŽņ×–ņ×ĨņŗņŊņĮņŅņŨņėņnōŲ ōŲōŲ'ōÕ-ōŲAōnRōnaōneō×vōÕ€ōÕŠōÕ‘ōפōÕŽōn˛ō×ÃōÕÍōnŅō×âōÕíōnūōÕķÕķn&ķn;ķÕEķnZķÕeķnvķÕ€ķÕ†ķnšķn¤ķnÂķnĖķnÖķnåķnéķ×úķÕônô×ôÕ$ôn5ôÕ?ôÕEônYô×iônsôn}ônŒônĄôÕĢônĀôÕËônÜôÕæôÕėônõn õnõnõnAõnKõnUõn_õniõnõŲ—õŲĻõŲÉõŲĶõŲâõöõŲö× öŲöÕöŲ/öFö‡RögöÕqöÕ|ö€öבöÕ—öĻöĒö×ģöÕÁöĐöÔö×åöÕīöÕõö÷Õ ÷÷×"÷Õ,÷Õ2÷=÷G÷W÷n÷Ķu÷€÷‹÷š÷Ž÷Ųģ÷×Å÷ŲĐ÷ÕÚ÷Ū÷×ī÷Õû÷Ķø ø×øÕø×+øÕ5øJøÕVøeøzøÕ†ø‘ø›øĨø¯øšøÄøÔøØø×éøÕķø÷ø×ųÕ ųųų×/ųÕ9ų=ų×JųÕTųÕ^ųbų×nųÕxųÕ‚ų†ų×’ųÕœų ų×­ųÕˇųĖųÕ×ųÛų×čųÕōųÕøųúú×)úÕ3ú7ú×DúÕJú×TúÕ^úsúÕúŽúŖúÕ¯úēúÄúÎúØúâúķúûÕ ûû û*ûGûŲQûŲeûŲiû†ûûĨûŲŽûŲ¸ûŲÅûŲŌûŲ˙ûŲ%üŲ>üŲGüŲQüŲ]üŲiüŲwüŲ‰üpüŲĒüŲĩüÕËü×ÕüŲéüpūüÕũÕũÕũp,ũÕ6ũÕ@ũÕJũpZũÕdũÕjũpwũp{ũ×’ũÕ˜ũpŖũp§ũ׸ũÕÂũÕŌũpÖũ×ãũÕíũÕũũpū×ūÕūÕ$ū×.ūÕ8ūp<ū×IūÕSūÕ_ū×iūÕsūp„ūÕŽūÕ˜ūpœū׊ūÕŗūÕšūpĪūpĶū×äūÕôūpøū×˙Õ˙p!˙p%˙×6˙Õ@˙pD˙×Q˙Õ[˙p_˙×p˙Õ{˙p˙׌˙Õ–˙Õœ˙pĩ˙pÆ˙ÕĐ˙pá˙Õë˙p Õ p Õ& Õ, pB ×L ŲY Ųd Õj Ųu Õ{ Ų† Ր p” ×Ĩ Õ¯ Õš Õŋ ×É ÕĶ põ p Õ p ×4 Õ? pC ×T Õ` ×j pz ÕŠ pš Õ¤ ÕŽ Õ´ pÆ pĘ ×Û Õå Õī Õų pũ ×  Õ Õ Õ' p+ ×7 ÕA ÕG pT pX ×o Õ Õ‰ p ×  Õ° Õē pž ×Ë ÕÛ Õá ×ë Õõ pų × Õ Õ ×% Õ/ pC ÕS pc Õo p{ p• Õ› pĨ pą pģ pÅ pŲ pŨ ×ô Õū Õ p ×% Õ/ Õ? pC ×P ÕZ Õf ×p Õz p~ ׊ Õ” Õ  ×Ē Õ´ pÎ ÕØ pî Õô p p Õ Õ$ p. p: pD pN pb p} Õ‡ Õ‘ pĄ ÕĢ Õą pŋ pĪ ÕŲ Õã pķ Õũ p  Õ p( Õ2 pG ÕR pc Õm Õs p‘ p˛ Õ¸ pÆ pâ Õė p Õ p  p; ÕE ÕO p_ Õi Õo py pŠ pĢ Õą pŋ pÛ Õå p Õ p p4 Õ> pT Õ^ pn Õx p‰ Õ“ p¨ Õŗ pÄ ÕÎ ÕÔ pë põ p˙ p p p3 ŲT h Ųu Ų… ׏ Ųš Õ¤ ¨ ך ÕÅ ĶĐ Ô ×á Õį ×õ Õ˙  Õ / D ÕP [ e o y ƒ Ž ž ĸ ×ŗ ÕŊ Á ×Î ÕÔ ä č ×ų Õ Õ " Õ, Õ6 Õ@ P ÕZ Õd Õn ~ Õˆ ÕŽ — Ļ Ē ×ģ ÕÅ É ×Ö ÕÜ ×æ Õđ  Õ  5 ÕA L V ` j t … – Õœ ¨ ˛ ŧ Ū Ųč Ųõ Ų Ų Ų) Ų- e ×| € ב Õ— Ļ ģ ÕÅ Ö Õā ÷ Õ Õ  ×# Õ- Õ3 B F ×W Õa e ×v Ձ … ×’ Õœ Õĸ ē ž ×Ī ÕŲ Ũ ×ę Õô ø ×  Õ  ×% Õ/ Õ5 N c Õm ~ Õˆ  Õ¨ š Õà ÕÉ â  ! 2 Õ< ÕB V ` k ‡ Ų  r¯ Ų¸ Ų ŲĖ ÕŌ Ųá Ųđ ×ú Ų Õ r ×" Õ, Õ6 r: ×F ÕP ÕZ rn Õx r Õ˜ rŠ Õŗ Õš rŅ rå Õī r Õ r  Õ* Õ0 rD rJ rP r\ rp Õz Õ€ rŽ rž Õ¨ Õ˛ r ÕČ rŌ rÜ ræ rņ r Ų Ų Ų& Ų3 ŲR Ųv Ųœ Ų¯ tà ŲĐ Ųđ ×ú Ų t ×# Õ- Õ7 ÕA tE ×Q Õ[ Õe Õo ts × Õ‰ Õ“ t§ Õą tÆ ÕŅ tâ Õė Õō t  t Õ( t= ÕH tY Õc Õi t} tƒ t‰ t– tš ×Ģ Õĩ Õŋ tĶ ÕŨ tō Õũ t Õ Õ t6 tJ ÕT ti Õt t… Տ Õ• tŠ t¯ tĩ tĀ tÕ Õß Õé Õķ t Õ Õ Õ" t3 Õ= ÕG ÕM t[ Õe tv Õ€ ÕŠ Ր tž Õ¨ tš Õà ÕÍ tŅ ×á Õë Õņ t t Õ Õ$ t3 tC ÕM ÕS ti tm ×~ Õˆ Õ’ t– ×Ļ Õ° Õļ tÅ tÉ ×Ų Õã Õé tø tü × Õ Õ t( t, ×= ÕG tK ×[ Õe ti ×z Õ… t‰ ×– Õ  ÕĻ tž t ×Ō ÕÜ tņ Õü t ×  Õ Õ t5 t9 ×E ÕO td Õo ts ×€ ÕŠ Ր tĨ tŦ ×ļ Ųà ŲÎ ÕÔ Ųß Õå Ųđ Õú tū × Õ Õ# Õ) ×3 Õ= t_ tp Õƒ t‡ מ ÕŠ t­ מ ÕĘ ×Ô tä Õô t Õ Õ Õ t0 t4 ×E ÕO ÕY Õc tg ×s Õ} Õ‡ Õ‘ t• ץ ÕĢ Õĩ tÉ ÕĶ tč Õķ t Õ Õ t, t@ ÕJ t_ Õj t{ Õ… Õ‹ tŸ tĨ tĢ t¸ tŧ ×Ķ ÕŨ Õí tņ × Õ Õ t" ×/ Õ9 ÕE ×O ÕU tg tk ׂ Õ’ Õœ t  ×ŗ Õà ÕÍ tŅ ×Ū Õî Õô ×ū Õ t t ×1 Õ; ÕE tI ×] ×g tk ×} Õ‡ t‹ ×— ÕĄ tĨ ׹ Õģ tŋ ×Ī ÕŲ tî Õų tũ × Õ Õ t2 t6 ×F ÕP te Õp tt ׁ Õ‹ Õ‘ tŠ tš Õà tØ Õã tô Õū Õ! t"! tC! ÕI! tW! ts! Õ}! t™! ÕŸ! tą! tĩ! ×Ō! ÕØ! ×â! tū! Õ" t$" Õ*" t<" tc" t{" t‰" tŸ" ÕŠ" t­" ך" Õŋ" tÎ" té" Õķ" t # Õ# t# t!# t+# t5# t?# tI# tT# t^# t}# Ųž# ˛# Ųŋ# ŲĶ# č# Õķ# ÷# ×$ Õ$ Õ$  $ ×-$ Õ7$ ÕA$ E$ ×V$ Õ`$ Õj$ Õt$ x$ ׄ$ ÕŽ$ Õ˜$ Õĸ$ Ļ$ ײ$ Õŧ$ ÕÆ$ Ú$ Õä$ ų$ Õ% % Õ% Õ%% =% [% {% Œ% Õ–% Õœ% °% ļ% ŧ% Å% Õ% ę% Õņ% & Ų & 3& 7& ×H& ÕR& Õ\& `& ×q& Õ{& Õ…& Տ& “& ן& ÕŠ& Õŗ& ÕŊ& Á& ×Í& Õ×& Õá& õ& Õ˙& ' Õ' 0' Õ:' Õ@' X' v' –' §' Õą' Õˇ' Ë' Ņ' ×' ā' ë' ú' Ųū' (( ,( ×<( ÕF( ÕP( T( ×e( Õo( Õy( Õƒ( ‡( ד( ՝( Õ§( Õą( ĩ( ×Á( ÕË( ÕÕ( é( Õķ( ) Õ) $) Õ.) Õ4) L) j) Š) ›) ÕĨ) ÕĢ) ŋ) Å) Ë) Ô) ß) î) * Ų* Ų#* '* ×8* ÕB* ÕL* P* ×\* Õf* Õp* t* ×…* Տ* Õ™* ÕŖ* §* ×ŗ* ÕŊ* ÕĮ* ÕŅ* Õ* ×á* Õë* Õõ*  + Õ+ (+ Õ3+ D+ ÕN+ ÕT+ l+ Š+ Ē+ ģ+ ÕÅ+ ÕË+ ß+ å+ ë+ ô+ , , Ų#, Ų-, Ų9, ŲE, ŲW, Ųc, Ųl, Ų‰, Ųĸ, ŲĻ, vē, ÕŌ, ×ā, Õę, vî, ×ū, Õ- Õ- v- ×"- Õ,- Õ6- vK- ÕU- vj- Õu- v†- Ր- Õ–- vĒ- v°- vŧ- vĐ- ÕÚ- Õā- vî- vū- Õ. Õ. v". Õ(. v2. v<. vF. vQ. vf. Ųo. Ųy. Ų†. Ų“. ŲĀ. Ųæ. Ųų. x / Ų/ Ų:/ ×D/ ŲX/ x\/ ×m/ Õw/ Ձ/ Õ‹/ x/ ×›/ ÕĨ/ Õ¯/ Õš/ xŊ/ ×É/ ÕĶ/ ÕŨ/ xō/ Õü/ x0 Õ0 x-0 Õ70 Õ=0 xQ0 xW0 xd0 xh0 ×y0 Õƒ0 Ս0 xĸ0 ÕŦ0 xÁ0 ÕĖ0 xŨ0 Õį0 Õí0 x1 x1 x1 x'1 Õ11 Õ;1 ÕE1 xV1 Õ`1 Õj1 Õt1 x…1 Տ1 Õ™1 ÕŸ1 x­1 Õˇ1 xČ1 ÕŌ1 ÕÜ1 Õâ1 xđ1 Õú1 x 2 Õ2 Õ2 x42 Õ>2 ÕD2 xS2 xd2 Õn2 Õt2 xŠ2 xŽ2 ן2 ÕŠ2 Õŗ2 xˇ2 ×Č2 ÕŌ2 ÕØ2 xį2 xë2 ×ø2 Õ3 Õ3 x3 x3 ×-3 Õ73 x;3 ×L3 ÕV3 xZ3 ×k3 Õv3 xz3 ׇ3 Õ‘3 Õ—3 x¯3 xŗ3 ×Ā3 ÕĘ3 xß3 Õę3 xî3 ×û3 Õ4 Õ 4 x 4 x'4 ×14 Ų>4 ŲI4 ÕO4 ŲZ4 Õ`4 Ųk4 Õu4 xy4 ׊4 Õ”4 Õž4 Õ¤4 ׎4 Õ¸4 xÚ4 xë4 Õū4 x5 ×5 Õ$5 x(5 ×95 ÕE5 ×O5 x_5 Õo5 x5 Õ‰5 Õ“5 Õ™5 xĢ5 x¯5 ×Ā5 ÕĘ5 ÕÔ5 ÕŪ5 xâ5 ×î5 Õø5 Õ6 Õ 6 x6 ×6 Õ&6 Õ06 xE6 ÕO6 xd6 Õo6 x€6 ÕŠ6 Ր6 x¤6 xĒ6 xˇ6 xģ6 ×Ō6 ÕÜ6 Õæ6 Õđ6 xô6 ×7 Õ7 Õ7 Õ%7 x)7 ×67 Õ@7 ÕJ7 ÕP7 ×Z7 Õd7 xh7 ×t7 Õ~7 Õˆ7 ÕŽ7 ט7 Õĸ7 xĻ7 ×ļ7 ÕĀ7 ÕĘ7 xÎ7 ×Ú7 Õä7 Õî7 x8 Õ 8 x"8 Õ-8 x>8 ÕH8 ÕN8 xb8 xh8 xt8 x•8 xŖ8 xģ8 ÕÅ8 xÉ8 ×Õ8 ÕÛ8 xå8 xī8 xų8 x 9 x9 ×(9 Õ89 ÕB9 xF9 ×Y9 Õi9 Õs9 xw9 ׄ9 Õ”9 Õš9 פ9 ÕĒ9 xŧ9 xĀ9 ××9 Õá9 Õë9 xī9 ×: × : x: ×#: Õ-: x1: ×=: ÕG: xK: ×W: Õa: xe: ×v: Õ€: x„: ו: ÕŸ: ÕĨ: xŧ: xÍ: ÕŲ: xŨ: ×ę: Õô: x ; Õ; x; ×%; Õ/; Õ5; xS; xt; Õz; xˆ; x¤; ÕŽ; xĘ; ÕĐ; xâ; x < x!< x/< xE< ÕO< xS< ×_< Õe< xt< xx< ו< Õ›< ×Ĩ< xÁ< ÕË< xį< Õí< x˙< x= Õ$= x:= Õ@= xH= xR= x\= xf= xp= xz= x…= x= xŠ= Ų˛= Ųŧ= ŲÉ= ŲÖ= Ųî= Ųø= Ų> Ų> Ų"> Ų.> Ų:> ŲV> Ųz> Ž> Ų›> ŲĢ> Ųģ> ×Å> ŲĐ> ÕÖ> Ųá> Õë> ī> ×? Õ ? Ķ? ? ×(? Õ.? ×N ÕDN TN iN ÕsN ÕyN ˆN §N ĮN ØN ÕâN ÕčN üN O &O Ų0O Ų=O ŲYO mO ŲŠO ŲžO ĸO ×ŗO ÕŊO ÕĮO ÕŅO æO ÕđO P ÕP !P Õ+P Õ1P EP KP VP ZP ×kP ÕuP yP ׊P Õ”P ˜P ׊P Õ´P ¸P ×ÅP ÕĪP ÕÕP íP ņP ×ūP ÕQ  Q ×Q Õ(Q ,Q ×9Q ÕCQ ÕIQ ^Q hQ rQ xQ ‘Q Ų•Q ˇQ ÁQ ĐQ đQ ŲR × R ŲR "R ×5R Ķ@R ÕFR ×SR cR gR ×xR Õ~R R ‘R ×ĸR ÕŦR Õ˛R ŧR ËR ĪR ×āR ÕęR îR ×˙R Õ S S ×S Õ%S Õ+S CS GS ×XS ÕbS fS ×wS Õ‚S †S דS ՝S ÕŖS ģS ĐS ÕÚS ęS ÕôS T ÕT ÕT 1T Õ;T KT ÕUT fT ÕpT Õ}T ’T ÕœT ąT ÕŧT ÍT Õ×T ÕŨT õT  U ÕU )U Õ4U EU ÕOU ÕUU iU sU zU ŠU ŲŽU yĸU yÁU yØU  ãU yúU ÕV ÕV y'V ö2V yIV ÕUV öbV yfV ×yV -„V yˆV ×—V -ĸV yĻV ×´V -žV yÄV yÎV yØV yâV yėV yöV yüV yW yW yW y W y*W y0W y:W yDW yNW yXW ybW ylW yvW y|W y†W yW yšW y¤W yĒW y´W yžW yÄW yÎW yØW yäW ŲđW ŲüW ŲX ŲX „$X 0X €BJN]ajnw{†Š›ŸŽ˛ēžÍŅÚŪįëöú *.6:IMVZcgrv‡‹“—ĻĒŗˇĀÄĪĶäčøü/3<@IMX\eiz~‘˜œ¤¨°´ÃĮÎŌÚŪîōaaa#a37?CJNW[jn‚†Ž’™ĻĒšŊŅÕŨáčėõų  $,07;DHW[os{†Š“—ĻĒžÂĘÎÕŲâæõų ,08<KOX\cgƒ‡“—¨Ŧ´¸ĮËĶ׿ęķ÷ū".2CGOSbfnr…Ž’™šŊÉÍŪâęîũ   )-48TXdhy}…‰˜œ¤¨ˇģÄČĪĶīķ˙ $+/8<KO`dsw†Š™ĻĒąĩÎŌãįîōųũ   ! + / C G P T _ c t x  ĶŒ  — › ĸ Ļ ­ ą ģ ŋ Æ Ę Ü ā ė đ       / 3 ; ? F J S W ^ b r v }  ˆ Œ – š Ą Ĩ ˇ ģ  Æ Í Ņ Ú Ū å é ō ö ũ      ' + 4 8 ? C L P W [ j n u y ‹  – š Ŧ ° š Ŋ Ņ Õ æ ę û ˙   % ) 8 g< gE gI g] ga gj gn gu gy gŠ gŽ g iĄ i¨ iŦ i´ i¸ iŋ ià iĶ i× iā iä iđ iô iũ i i i i" i& i- i1 iB iF iM iQ i` kd km kq k… k‰ k˜ kœ kĢ k¯ kļ kē kà kĮ kÖ kÚ ká kå kî kō kų kũ kkkkk(k,k5k9kJkNkWk[kdkhkoksk„kˆkk“kĸkĻk¯kŗkĮkËkãkįkökúkkk%m)m0m4mDmHmQmUmimmm|m€mm“mšmžm§mĢmēmžmÅmÉmŌmÖmŨmámōmöm˙mm mmmm.m2m;m?mHmLmSmWmhmlmsmwm†mŠm“m—mĢm¯mĮmËmÚmŪmömúm o oo o/o3o:o>oGoKoZo^oeoiorovo}oo’o–oŸoŖoŦo°oˇoģoĖoĐo×oÛoęoîoõoųo o o%o)o8o<oToXogkrv}‹–𤍎ģÃĮĐÔŨáęî÷û "&-18<CGNRaelpw{„ˆ“œ §ĢŧĀĮ]ĖĐ×]äčđôü  $48?COS_cjnz~’–Ą¨ŦŗˇÆĘŅÕÜāīķú]˙ ]]'+26?CTX`dtx‰žĸąĩžÂĶ×Ūâņõü #'6:A]FJQ]^bimvzƒ‡Ž’›Ÿ¨ŦŗˇČĖÔØāäėđøü $(15<@IM^bkox|…‰šžĨŠĩšÅÉÕŲčėũ *.=AJNUYjn}ˆŒ”˜ ¤Ŧ°¸ŧĖĐāäíņøü  $+/AELPW[mqx|Œ˜œĢ¯ļēÆĘŅÕéíü'+;?NRZ^fjz~‘˜œŖ§Ž˛šŊĖĐ×Ûęî +/CuGuPuTu]uaujunuuƒu‹uu–ušuĄuĨu´u¸uĀuÄuËuĪuÖuÚuéuíuųuũuu uuu&Ķ3u7u>uBuQuUueuiuu…uŒuuŸuŖuģuŋuÎuŌuęuîuũuuuu,08<DHX\dhpt„ˆ”œ °´ŧĀČĖÜāįëōöū '+;?HLUYmqz~‡‹’–§Ģ˛ļÅÉĐÔãįđôũ!(,;?GKRVeiz~‘™Ž˛ÂÆÎŌáåîōû˙   # , 0 < @ L P d h o s {  Š Ž Ą Ĩ Ž ˛ ž  Ö Ú á å õ ų !!!! !$!4!8!@!D!T!X!_!c!k!o!v!z!Š!Ž!•!™!¨!Ŧ!´!¸!Č!Ė!Ô!Ø!č!ė!õ!ų!""""" "1"5"D"H"O"S"Z"^"f"j"r"v"~"‚"Š"Ž"ž"ĸ"˛"ļ"ŋ"Ã"Ė"Đ"Ų"Ũ"æ"ę"û"˙"####'#+#2#6#E#I#P#]]#a#h#l#s#w#†#Š#‘#•#Ĩ#Š#°#ĶŊ#Á#Õ#Ų#é#í#ū#$$$'$+$@$D$M$Q$Z$^$g$k$|$€$‰$$–$š$Ŗ$§$¸$ŧ$Ã$Į$Ķ$×$ã$į$ö$ú$%%%%#%'%6%:%C%G%N%R%c%g%v%wz%w‚%w†%w•%w™%wĸ%wĻ%w¯%wŗ%wŧ%wĀ%wÉ%wÍ%wŪ%wâ%wé%wí%wô%wø%w&w &w&w&w(&w,&w5&w9&wB&wF&wW&w[&wd&wh&wq&wu&w~&w‚&w“&w—&wĻ&wĒ&wą&wĩ&wÅ&wÉ&wÚ&wŪ&wå&wé&wø&wü&w'w'w'w'w!'w%'w4'w8'w?'wC'wS'wW'w_'wc'wl'wp'w'w…'wŽ'w’'w™'w'wŽ'w˛'wÁ'Å'Ė'Đ'Ø'Ü'ä'č'đ'ô'ü'(( (((((,(5(9(M(Q(X(\(c(g(w({(‡(‹(—(›(§(Ģ(ˇ(ģ(Į(Ë(×(Û(ī(ķ()) ))))%)))1)5)=)A)I)M)U)Y)i)m)v)z)Ž)’)™))¤)¨)¸)ŧ)Č)Ė)Ø)Ü)č)ė)ø)ü)* ***0*4*C*G*P*T*h*l*s*w**ƒ*–*š*Š*­*´*¸*Ā*Ä*×*Û*â*æ*í*ņ*ú*ū* ++++%+)+0+4+E+I+R+V+g+k+t+x++…+Œ++™++¤+¨+š+Ŋ+Ä+Č+×+Û+ä+č+ų+ũ+, ,,,,",3,7,>,B,Q,U,^,b,k,o,x,|,,‘,š,ž,§,Ģ,˛,ļ,ŋ,Ã,Ę,Î,×,Û,â,æ,÷,û,----%-)-2-6-J-N-U-Y-i-m-|-€-‡-‹-›-Ÿ-Ļ-Ē-ą-ĩ-ž-Â-Ņ-Õ-Ü-ā-é-í-ô-ø- . ...+./.8.<.E.I.P.T.].a.h.l.}..ˆ.Œ.›.Ÿ.¨.Ŧ.Ŋ.Á.Ę.Î.×.Û.â.æ.÷.û.////"/&///3/2B2R2V2_2c2w2{2‡2‹2”2˜2Ŧ2°2¸2ŧ2Ë2Ī2Ø2Ü2í2ņ2ø2ü23333$3(30343E3I3R3V3e3i3p3Ķ}333‘3š3ž3˛3ļ3ž3Â3Ņ3Õ3Ū3â3ķ3÷3ū34 444#4*4.464:4K4O4V4Ķc4g4s4w44…4™44Ĩ4Š4¸4ŧ4Å4É4Ú4Ū4í4ņ455 5Ķ55(5,565:5N5R5Z5^5m5q5z5~55“5ĸ5Ļ5ĩ5š5Ā5ĶÍ5Ņ5Ų5Ũ5ė5đ5ü56666!6(6,6<6@6I6M6V6Z6e6i6r6v6ˆ6Œ6”6˜6§6Ģ6ˇ6ģ6Ė6Đ6Ø6Ü6ã6į6÷6û67777 7$7-717C7G7N7R7Y7]7e7i7t7x7ƒ7‡7–7š7Ŗ7§7°7´7ģ7ŋ7Č7Ė7Ø7Ü7ë7ī7ū78888#8+8/8?8C8L8P8Y8]8f8j8s8w8€8„8‹88˜8œ8¨8Ŧ8ģ8ŋ8Î8Ō8ã8į8đ8ô8ũ899 999%9)989<9K9O9`9d9m9q9z9~9…9‰9’9–9ĸ9Ļ9ĩ9š9Č9Ė9Ũ9á9ę9î9÷9û9:::::#:2:6:E:I:Z:^:f:j:r:v:†:Š:“:—: :¤:­:ą:ē:ž:Å:É:Ō:Ö:â:æ:õ:ų:; ;;!;*;.;7;;;B;F;O;S;_;c;r;v;…;‰;š;ž;Ļ;Ē;˛;ļ;Æ;Ę;Ķ;×;ā;ä;í;ņ;ø;ü;< <<<(<,<;<?<P<T<]<a<j<n<u<y<‚<†<’<–<Ĩ<Š<¸<ŧ<Í<Ņ<Ų<Ũ<å<é<ų<ũ<= ===="=.=2=A=E=T=X=i=m=t=„=…=Œ==™==Š=­=ŧ=Ā=×=Û=â=†ī=ķ=ü=>> >>>$>(>7>;>R>V>]>‡j>n>u>y>‚>†>’>–>Ĩ>Š>Ā>Ä>Ë>AØ>Ü>å>é>đ>ô>ũ>? ?? ?$?;???F?ŽS?W?`?d?k?o?x?|?ˆ?Œ?›?Ÿ?ļ?ē?Ã?Į?Î?Ō?ã?į?ö?ú?@@@@#@'@6@:@C@G@N@R@c@g@v@z@ƒ@‡@Ž@’@Ŗ@§@ļ@ē@Ã@Į@Î@Ō@ã@į@ö@ú@AAAA#A'A6A:AAAEATAXAaAeAlApAyA}AŽA’A™A‚žAĸAŠA‚ļAēAÁAÅAÎAŌAãAįAîA„ķA÷AūA„ BBBB#B'B0B4BEBIBPB†UBYB`B†mBqBxB|B…B‰BšBžBĨB‡ĒBŽBĩB‡ÂBÆBĪBĶBÚBŪBįBëBüBCCA CCCA$C(C1C5CR]KROR_RcRjRnRvRzR‚R†R•R™R R¤R´R¸RČRĖRĶR×RįRëRķR÷RūRS SSSS)S-S5S9S@SDSKSOS^SbSkSoS~S‚S’S–SĻSĒSēSžSÅSÉSÜSāSįSëSūST T T T$T+T/TBTFTMTQTdThToTsT†TŠT‘T•T¨TŦTŗTˇTžTÂTÔTØTßTãTõTųTUU UUUU2U6U=UAUKUOUdUhUoUsU†UŠU U¤UŽU˛UÉUÍUÜU~āU~éU~íU~ųU~ũU~V~ V~V~"V~+V~/V~6V~:V~CV~GV~NV~RV~[V~_V~fV~jV~{V~V~†V~ŠV~–V~šV~ŠV~­V~ļV~ēV~ËV~ĪV~ØV~ÜV~åV~éV~đV~ôV~ũV~W~W~ W~W~!W~(W~,W~;W~?W~HW~LW~]W~aW~jW~nW~wW~{W~‚W~†W~—W~›W~ĸW~ĻW~ĩW€šW€ÂW€ÆW€ŌW€ÖW€ßW€ãW€÷W€ûW€X€X€X€X€X€ X€'X€+X€aEaIaXa\aeaiaravaaƒa”a˜aĄaĨaŽa˛aģaŋaĐaÔaÛaßaîaōaûa˙ab bbb*b.b7b;bDbHbYb]bfbjbsbwbˆbŒb“b—b b¤bĢb¯bĀbÄbÕbŲbâbæbíbņbcccc*c.c7c;cBcFcWc[cjcncucycˆcŒc“c—cĻcĒcšcŊcÍcŅcØc‡åcécøcüc dddd&d*d2d6d?dCdUdYdjdndvdzd‰dd—d›dĸdĻdŽd˛dģdŋdŅdÕdædędüdee eee&e*e1e5eEeIePeTe]eaepete{ee†eŠešežeĨeŠe°e´eÃeĮeĪeĶeÚeŪeåeéeųeũef fff#f'f7f;fCfGfVfZfafefufyf€f„fŽf’fœf f§fĢfĩfšfÃfĮfÎfŌfÜfāfįfëfũfgg gggg"g*g.g6g:gIgMgWg[gbgfgxg|g‹gg–gšg¤g¨g˛gļgŊgÁgËgĪgágågīgķgũgh hh!h%h,h0hlBlIlMlVlZlclglnlrl{ll†lŠl“l—lĻlĒląlĩlžlÂlËlĪlÖlÚlãlįlølülmmmmm!m(m,m5m9mJmNmUmYmbmfmomsmzm~m‡m‹mœm m§mĢm´m¸mÁmÅmĖmĐmŲmŨmîmōmûm˙mn nnn*n.n5n9nHnLnUnYnbnfnonsn„nˆn‘n•nžnĸnĢn¯nĀnÄnËnĪnÛnßnënīnūnooo o$o+o/o@oDoSoWoholouoyo€o„o•o™o¨oŦoŗoˇoÆoĘoŅoÕoŨoáoéoíoõoųo p ppp p$p,p0p?pCpLpPpWp[pdphpqpup~p‚p‹pp–pšpŖp§pļpēpÂpÆpÖpÚpápåpípņpųpũpq qqq(q,q5q9q@qDqKqOq^qbqkqoq€q„qq‘qĸqĻq­qąqĀqÄqÍqŅqÚqŪqįqëqôqøq r rrrr#r*r.r5r9rHrLr[r_rhrlrsrwrˆrŒr›rŸr¨rŦrĩršrÂrÆr×rÛrärčrņrõrūrssss"s.s2s>sBsQsUs\sismsvszs‰ssžsĸsĢs¯sļsēsËsĪsŪsâsësīsösús ttt"t)t-t5t9t@tDtTtXt_tctstwt†tŠt‘t•ttĄtŠt­tĩtštÉtÍtÔtØtčtėtķt÷tuu uu u$u+u/u7u;uBuFuVuZuaueuuuyu‚u†uu‘uĸuĻuĩušuČuĖuÕuŲuāuäuõuųuv vv!v*v.v5v9vJvNv]vavhvlvtvxv€v„v“v—vĻvĒvąvĩvžvÂvÉvÍvŪvâvķv÷vūvwww&w*w;w?wNwRwcwgwxw|w‹ww˜wœwŖw§w¸wŧwËwĪw×wÛwãwįwīwķwûw˙wx xxx&x*x3x7x@xDxKxOxXx\xexixpxtx}xxˆxŒx•x™x x¤x­xąx¸xŧxÅxÉxĐxÔxåxéxņxõxũxy y yyy!y%y-y1yAyEyLyPyYy]yfyjyqyuy~y‚y‹yy–yšyĄyĨy´y¸yÉyÍyÖyÚyáyåyöyúy z zzz!z%z.z2z9z=zFzJzSzWz^zbzizmzvzzzz…zŽz’z™zzŽz˛zģzŋzČzĖzÕzŲzâzæzīzķzüz{{{{ {/{3{;{?{G{K{[{_{|{€{ˆ{Œ{”{˜{¨{Ŧ{ĩ{š{Â{Æ{×{Û{â{æ{í{ņ{|| ||||-|1|@|D|M|Q|b|f|o|s|„|ˆ||“|ĸ|Ļ|¯|ŗ|Ä|Č|Ņ|Õ|æ|ę|ņ|õ|}}}}+}/}@}D}U}Y}h}l}}}}’}–}Ĩ}Š}ē}ž}Į}Ë}Ō}Ö}į}ë}ú}ū}~ ~~~-~1~8~<~K~O~_~c~j~n~}~~‘~•~¤~¨~ˇ~ģ~Ë~Ī~Ö~Ú~é~í~ô~ø~ "15=APTcgnry}Œ ¤Ģ¯žÂËĪÖÚëīū€ € €€ €)€-€>€B€K€O€`€d€k€o€~€‚€‘€•€¤€¨€ˇ€ģ€€ƀĪ€Ķ€â€æ€í€ņ€ú€ū€ '+48?CTX_crv…‰ĄĨ´¸Ёԁãįīķúū‚ ‚‚‚%‚)‚0‚4‚C‚G‚O‚S‚Z‚^‚m‚q‚€‚„‚‹‚‚§‚Ģ‚˛‚]ŋ‚ÂĶ‚ׂŪ‚]ë‚ī‚÷‚û‚ƒƒƒƒ!ƒ%ƒ-ƒ1ƒ8ƒ<ƒLƒPƒYƒ]ƒiƒmƒvƒzƒŽƒ’ƒ™ƒƒĨƒЃ°ƒ´ƒăȃ҃Ճáƒåƒîƒōƒ„ „„„„!„1„5„<„@„H„L„S„W„g„k„r„v„†„Š„š„ž„­„ą„Á„ńԄ؄č„ė„ķ„]ø„ü„…]…………'…+…;…?…F…]K…O…V…]c…g…n…r…y…}…Œ……—…›…Ē…Ž…ĩ…š…ȅĖ…Ķ…]؅܅ã…]đ…ô…û…˙…††††,†0†7†;†J†N†]†a†q†u†„†ˆ†˜†œ†̆¯†ŋ†ÆʆΆՆŲ†č†ė†ô†ø†‡‡‡‡(‡,‡8‡<‡P‡T‡[‡_‡f‡j‡y‡}‡…‡‰‡™‡‡¤‡¨‡ˇ‡ģ‡ˇ·Ū‡â‡ņ‡õ‡ü‡ˆˆ ˆˆ ˆ'ˆ+ˆ3ˆ7ˆGˆKˆ[ˆ_ˆfˆjˆzˆ‰~ˆ‰‡ˆ‰‹ˆ‰—ˆ‰›ˆ‰Ŧˆ‰°ˆ‰šˆ‰Ŋˆ‰Äˆ‰Čˆ‰Ųˆ‰Ũˆ‰äˆ‰čˆ‰÷ˆ‰ûˆ‰‰‰‰‰‰‰!‰%‰,‰0‰9‰=‰F‰J‰Y‰]‰d‰h‰q‰u‰‚‰†‰“‰—‰ωlj˛‰ļ‰Į‰ˉŌ‰։߉ã‰ė‰đ‰˙‰Š ŠŠŠŠ!Š%Š-Š1Š9Š=ŠFŠJŠZŠ^ŠfŠjŠzŠ~Š…Š‰Š–ŠšŠ§Š̊˛ŠļŠĮŠˊԊ؊åŠéŠöŠúŠ‹‹‹‹,‹0‹A‹E‹L‹P‹Y‹]‹n‹r‹z‹~‹Ž‹’‹¤‹¨‹¯‹ŗ‹ģ‹ŋ‹Ī‹Ķ‹ė‹đ‹ŒŒŒ"Œ*Œ.Œ6Œ:ŒJŒNŒVŒZŒjŒnŒzŒ~Œ’Œ–ŒŒĄŒ´Œ¸ŒŋŒ]ČȌΌ]܌āŒéŒíŒöŒúŒ .29Ķ>BIĶNRYĶ^biĶnryĶ~‚‰ĶŽ’™ĶĻĒŗˇĀčՍŲčėøüŽ ŽŽŽ-Ž1Ž8Ž]=ŽAŽHŽ]UŽYŽbŽfŽuŽyŽ€ŽĶ…މސŽĶ•ޙޠŽĶĨŽŠŽ°ŽĶĩŽšŽĀŽĶ͎ŅŽڎŪŽįŽëŽüŽ#,0?CTX_]lp…‘•žĸąĩŧĶɏ͏Ūâé]öú!]&*1]>BKOX\mq}АސĄ¨Ķ­ą¸ĶŐɐԐ֐ߐãôø‘ ‘‘‘$‘(‘7‘;‘L‘P‘Y‘]‘n‘r‘{‘‘‘”‘¤‘9¨‘9¯‘9ŗ‘9ē‘9ž‘9ȑ9Ė‘9Ķ‘9ב9é‘9í‘9ô‘9ø‘9’9’9’9’9’9’90’94’9;’pH’9L’9[’9_’9f’]s’9w’9†’9Š’9‘’]–’9š’9Ą’]Ļ’9Ē’9ą’]ž’9’9˒9Ī’9ؒ9ܒ9å’9é’9ú’9ū’9“]“9“9'“9+“92“]7“9;“9B“]O“9S“9b“9f“9o“9s“9|“9€“9‘“9•“9ž“9ĸ“9Ģ“9¯“9Ā“9ē9Ė“9Г9ā“9ä“9õ“9ų“9 ” ””” ”$”+”/”6”:”O”S”Z”^”f”j”q”u”Дޔ•”]š”ž”Ĩ”]ǔޔĩ”]”ƔΔ͔ܔā”ņ”õ”•••• •$•,•0•@•D•M•Q•Z•^•o•s•{••‡•‹•›•Ÿ•ϕǕą•ĩ•ĕȕΕ͕ڕŪ•í•ņ•ø•ü•––––!–%–,–0–?–C–L–P–Y–]–n–r–y–}–Œ––Ą–Ĩ–Ž–˛–š–Ŋ–ΖŌ–á–å–ė–pņ–õ–ü–p—— —p——&—*—3—7—H—L—X—\—k—o—v—]{——†—]‹——–—]Ŗ—§—°—´—Ŋ—Á—Ō—֗ߗã—ō—ö—ũ—Ķ˜˜ ˜Ķ˜˜˜Ķ*˜.˜7˜;˜D˜H˜Y˜]˜d˜]i˜m˜t˜]y˜}˜„˜]‘˜•˜ž˜ĸ˜ą˜ĩ˜ž˜˜˘Θā˜ä˜í˜ņ˜™™™™$™(™/™3™B™F™W™[™k™o™€™„™•™™™¨™Ŧ™ĩ™š™ʙΙŪ™â™é™]î™ō™ų™]ū™š š]šš#š'š0š4šEšIšUšYšhšlštšxš€š„š”š˜šĄšĨšޚ˛šÚĮšΚ͚ۚߚīšķšúšūš› ›››#›'›.›2›A›E›L›P›W›[›j›n›u›y›ˆ›Œ›•›™›Ē›Ž›ĩ›š›țĖ›՛Ų›ā›ä›õ›ų›œ œœpœœ#œp0œ4œ=œAœRœVœbœfœuœyœ€œ]…œ‰œœ]œĄœǜޜŋœÜ˜МߜãœęœĶīœķœúœĶ )-4]9=D]QU^bqu~‚“—¨ŦŊÁȝĖ۝ߝđôž žžž-ž1žAžEžLžPžXž\ždžhžožsž{žž‡ž‹ž“ž—žžžĸž˛žļžŊžpžƞ͞pڞŪžåžéžōžöž˙žŸŸŸ"Ÿ&Ÿ5Ÿ9Ÿ@ŸĶEŸIŸPŸĶ]ŸaŸhŸlŸuŸyŸ‚Ÿ†Ÿ•Ÿ™Ÿ Ÿ¤ŸŦŸ°Ÿ¸ŸŧŸ˟ПܟāŸéŸíŸüŸ      ! % 4 8 @ D T X _ c j n u y € „ “ — ž ]Ŗ § Ž ]ģ ŋ Æ Ę Ķ × ā ä ķ ÷ ĄĄĄĄ!ĄĶ&Ą*Ą1ĄĶ>ĄBĄIĄMĄVĄZĄcĄgĄvĄzĄ‰ĄĄ™ĄĄĻĄĒĄšĄŊĄÎĄŌĄÛĄߥđĄôĄĸĸĸĸĸĸ(ĸ,ĸ3ĸ7ĸAĸEĸLĸPĸbĸfĸoĸsĸ|ĸ€ĸ‰ĸĸ–ĸšĸĢĸ¯ĸģĸŋĸÎĸŌĸŲĸĶŪĸâĸéĸĶöĸúĸŖŖŖŖŖ!Ŗ*Ŗ.Ŗ7Ŗ;ŖLŖPŖaŖeŖnŖrŖ{ŖŖˆŖŒŖ•Ŗ™ŖĸŖĻŖˇŖģŖÄŖČŖŅŖÕŖŪŖâŖëŖīŖ¤¤ ¤¤¤¤,¤0¤8¤<¤K¤O¤`¤d¤o¤s¤‚¤†¤—¤›¤ǤޤŊ¤Á¤ʤΤפÛ¤ä¤č¤ų¤ũ¤Ĩ ĨĨĨ Ĩ$Ĩ5Ĩ9ĨAĨEĨUĨYĨbĨfĨoĨsĨ|Ĩ€Ĩ‘Ĩ•ĨžĨĸĨĢĨ¯Ĩ¸ĨŧĨÍĨŅĨØĨÜĨčĨėĨøĨüĨ ĻĻ Ļ$Ļ-Ļ1Ļ8Ļ<ĻMĻQĻ`ĻdĻuĻyĻ‰ĻĻĻĄĻĒĻŽĻĩĻšĻĘĻÎĻÕĻŲĻåĻéĻøĻüĻ §§§§$§(§9§=§D§H§T§X§g§k§{§§†§]‹§§–§]›§Ÿ§ϧ]̧¯§ļ§]çĮ§ΧŌ§Ų§Ũ§ä§č§÷§û§¨¨¨¨$¨(¨1¨5¨F¨J¨Q¨U¨\¨`¨o¨s¨¨ƒ¨’¨–¨¨Ą¨¨¨Ŧ¨ģ¨ŋ¨ƨʨҍÕ¨Ū¨â¨é¨í¨ö¨ú¨ Š ŠŠŠ!Š%Š5Š9ŠBŠFŠWŠ[ŠdŠhŠyŠ}Š„ŠˆŠ—Š›ŠĸŠĶ§ŠĢОŠĶŋŠÊĖŠĐŠáŠåŠîŠōŠĒĒĒĒ-Ē1Ē@ĒDĒUĒYĒiĒmĒ~ǂǒǖǧĒĢǴǏĒŋĒÃĒÔĒØĒįĒëĒüĒĢĢĢ#Ģ'Ģ.Ģ2Ģ9Ģ=ĢFĢJĢWĢ[ĢhĢlĢsĢwĢ€Ģ„Ģ‘Ģ•ĢĸĢĻĢ­ĢąĢēĢžĢÅĢÉĢŌĢÖĢŨĢáĢęĢîĢũĢŦ ŦŦŦŦ!Ŧ%Ŧ-Ŧ1Ŧ9Ŧ=ŦEŦIŦYŦ]ŦeŦiŦyŦ}Ŧ„ŦˆŦ‘Ŧ•ŦĸŦĻŦŗŦˇŦžŦÂŦËŦĪŦÜŦāŦíŦņŦøŦüŦ­ ­­­­!­(­,­5­9­H­L­U­Y­b­f­s­w­„­ˆ­‘­•­ž­ĸ­¯­ŗ­Ā­Ä­Í­Ņ­Ú­Ū­į­ë­ô­ø­ŽŽŽŽ#Ž'Ž6Ž:ŽBŽFŽNŽRŽbŽfŽmŽqŽ~Ž‚ŽŽ“ŽšŽžŽĢŽ¯ŽŧŽĀŽĮŽËŽŌŽÖŽįŽëŽôŽøŽ¯¯¯¯!¯%¯1¯5¯A¯E¯N¯R¯[¯_¯p¯t¯„¯ˆ¯™¯¯¤¯¨¯°¯´¯ŧ¯Ā¯Č¯Ė¯Ô¯Ø¯ā¯ä¯ė¯đ¯°° °°°°)°-°:°>°E°I°R°V°c°g°t°x°°ƒ°Œ°°—°›°¤°¨°š°Ŋ°Ä°Č°Đ°Ô°Ü°ā°į°ë°ķ°÷°˙°ą ąąąą(ą,ą5ą9ąBąFąOąSą\ą`ąiąmą~ą‚ą–ąšąŖą§ą°ą´ąŊąÁąŌąÖąßąãąėąđąųąũą˛˛!˛%˛6˛:˛C˛G˛N˛R˛c˛g˛v˛z˛‰˛˛˛Ą˛¨˛Ŧ˛ŗ˛ˇ˛ž˛²ɲͲÔ˛Ø˛߲ã˛ō˛ö˛ũ˛ŗŗ ŗŗŗ&ŗ*ŗ1ŗp6ŗ:ŗAŗpFŗJŗQŗpVŗZŗaŗpnŗrŗyŗ}ŗ„ŗˆŗŗ“ŗĸŗĻŗ˛ŗļŗÅŗÉŗĐŗÕŗŲŗāŗåŗéŗđŗõŗųŗ´ ´´´´#´'´.´2´A´E´L´]Q´U´\´]a´e´l´]q´u´|´]‰´´”´˜´Ÿ´Ŗ´Ē´Ž´Ŋ´Á´Ę´δŨ´á´č´í´ņ´ø´ũ´ĩĩ ĩĩĩ%ĩ)ĩ0ĩ4ĩ;ĩ?ĩFĩJĩYĩ]ĩfĩjĩyĩ}ĩ„ĩ]‰ĩĩ”ĩ]™ĩĩ¤ĩ]Šĩ­ĩ´ĩ]ÁĩÅĩĖĩĐĩ×ĩÛĩâĩæĩõĩųĩļļļļ ļ%ļ)ļ0ļ5ļ9ļ@ļEļIļPļ]ļaļhļlļsļwļ~ļ‚ļ‘ļ•ļžļĸļąļĩļŧļ]ÁļÅļĖļ]ŅļÕļÜļ]áļåļėļ]ųļũˇˇˇˇ-ˇ1ˇ:ˇ>ˇMˇQˇXˇĶ]ˇaˇhˇĶmˇqˇxˇĶ}ˇˇˆˇĶˇ‘ˇ˜ˇĶĨˇЎ°ˇ´ˇģˇŋˇÆˇʡŲˇŨˇäˇ]éˇíˇôˇ]ųˇũˇ¸] ¸ ¸¸]!¸%¸,¸0¸7¸;¸B¸F¸U¸Y¸b¸f¸u¸y¸€¸…¸‰¸¸•¸™¸ ¸Ĩ¸Џ°¸Ŋ¸Á¸ȸˏ͏׸Ū¸â¸ņ¸õ¸ū¸šššš]!š%š,š]1š5š<š]AšEšLš]Yš]šdšhšošsšzš~šš‘šššžš­šąš¸šĶŊšÁšČšĶÍšŅšØšĶŨšáščšĶõšųšēē ēēēē)ē-ē4ē]9ē=ēDē]IēMēTē]Yē]ēdē]qēuē|ē€ē‡ē‹ē’ē–ēĨēŠē˛ēļēÅēÉēĐēÔēÛēßēæēęēųēũēģģģģģģ'ģ+ģ2ģ6ģ?ģCģRģVģ^ģbģjģnģvģzģŠģŽģ—ģ›ģ¤ģ¨ģšģŊģÆģĘģÛģßģčģėģũģŧŧ ŧŧŧ0ŧ4ŧDŧHŧYŧ]ŧmŧqŧ‚ŧ†ŧŧ“ŧšŧžŧ¯ŧŗŧÂŧÆŧ×ŧÛŧëŧīŧöŧpûŧ˙ŧŊp ŊŊŊpŊŊ&Ŋp3Ŋ7Ŋ>ŊBŊIŊMŊTŊXŊgŊkŊrŊwŊ{Ŋ‚Ŋ‡Ŋ‹Ŋ’Ŋ—Ŋ›ŊĸŊ¯ŊŗŊēŊžŊÅŊÉŊĐŊÔŊãŊįŊîŊ]ķŊ÷ŊūŊ]žžž]žžž]+ž/ž6ž:žAžEžLžPž_žcžjžĶožsžzžĶžƒžŠžĶž“žšžĶ§žĢž˛žļžŊžÁžČžĖžÛžßžæž]ëžīžöž]ûž˙žŋ] ŋŋŋ]#ŋ'ŋ.ŋ2ŋ9ŋ=ŋDŋHŋWŋ[ŋbŋgŋkŋrŋwŋ{ŋ‚ŋ‡ŋ‹ŋ’ŋŸŋŖŋĒŋŽŋĩŋšŋĀŋÄŋĶŋ×ŋŪŋ]ãŋįŋîŋ]ķŋ÷ŋūŋ]ĀĀĀ]ĀĀ&Ā*Ā1Ā5Ā<Ā@ĀOĀSĀZĀ^ĀeĀiĀpĀtĀƒĀ‡ĀŽĀ’Ā™ĀĀ¤Ā¨ĀąĀĩĀŧĀĀĀÉĀÍĀÜĀāĀčĀėĀôĀøĀÁÁÁÁ!Á%Á.Á2ÁCÁGÁPÁTÁeÁiÁrÁvÁ‡Á‹Á’Á–ÁĨÁŠÁēÁžÁÎÁŌÁãÁįÁ÷ÁûÁ ÂÂÂÂ$Â(Â9Â=ÂLÂPÂaÂeÂuÂy€Âp…‰Âp•™ ÂpĨаÂpŊÂÁÂČÂĖÂĶÂ×ÂŪÂâÂņÂõÂÃÃÃÃÐ$Ã(Ã/Ð4Ã8Ã?ÐDÃHÃOÐ\Ã`ÃgÃkÃrÃvÃ}ÁÐÔÛÃ] Ã¤ÃĢÃ]°Ã´ÃģÃ]ĀÃÄÃËÃ]ØÃÜÃãÃįÃîÃōÃųÃũà ÄÄÄĶÄ Ä'ÄĶ,Ä0Ä7ÄĶ<Ä@ÄGÄĶTÄXÄ_ÄcÄjÄnÄuÄyĈČēÄ]˜ÄœÄŖÄ]¨ÄŦÄŗÄ]¸ÄŧÄÃÄ]ĐÄÔÄÛÄßÄæÄęÄņÄõÄÅÅÅÅ$Å(Å/Ő4Å8Å?ŐDÅHÅOŐTÅXÅ_ŐlÅpÅwÅ{Å‚Å†ÅÅ‘Å Å¤Å­ÅąÅĀÅÄÅËÅ]ĐÅÔÅÛÅ]āÅäÅëÅ]đÅôÅûÅ]Æ ÆÆÆÆ"Æ)Æ-Æ<Æ@ÆIÆMÆ\Æ`ÆgÆkÆrÆvÆ}ƁƐƔƛƟÆĻÆĒÆąÆĩÆžÆÂÆÉÆÍÆÖÆÚÆéÆíÆõÆųÆĮĮ ĮĮ!Į%Į.Į2Į;Į?ĮPĮTĮ]ĮaĮrĮvĮĮƒĮ”Į˜ĮŸĮŖĮ˛ĮļĮĮĮËĮÛĮßĮđĮôĮČČČČ&Č*Č1Č5ČFČJČYČ]ČnČrČ‚Č†ČČ”Č›ČŸČŠČ­ČˇČģČÍČŅČÛČßČæČęČôČøČ˙ČÉ ÉÉÉÉ1É5É=ÉAÉQÉUÉ_ÉcÉjÉnÉxÉ|ɆɊɜɠɧÉĢÉĩÉšÉÃÉĮÉÎÉŌÉŲÉŨÉįÉëÉúÉūÉĘ ĘĘĘ(Ę,Ę3Ę7Ę?ĘCĘKĘOĘYĘ]ĘdĘhĘrĘvʀʄʎʒʤʨʹĘĩĘÁĘÅĘŅĘÕĘßĘãĘėĘđĘúĘūĘË ËËË,Ë0ËAËEËOËSËZË^ËpËtË{Ëˉˍ˗˛ËĸËĻËĩËšËČËĖËÕËŲËęËîËöËúË ĖĖĖ"Ė+Ė/Ė@ĖDĖUĖYĖ`ĖdĖnĖrĖ|Ė€Ė‡Ė‹ĖšĖžĖ¨ĖŦĖžĖÂĖŲĖŨĖįĖëĖõĖųĖ ÍÍÍÍ'Í+Í=ÍAÍKÍOÍYÍ]ÍoÍsÍ}ÍÍ‹ÍÍĄÍĨÍ¯ÍŗÍŊÍÁÍĶÍ×ÍŪÍâÍņÍõÍ˙ÍÎÎÎ#Î'Î9Î=ÎGÎKÎ]ÎaÎkÎo΁΅ΏΓΚΞΨÎŦΞÎÂÎĖÎĐÎ×ÎÛÎåÎéÎķÎ÷Î Ī ĪĪĪ"Ī&Ī0Ī4Ī>ĪBĪQĪUĪ]ĪaĪqĪuĪĪƒĪŠĪŽĪ˜ĪœĪĻĪĒĪŧĪĀĪĘĪÎĪÕĪŲĪãĪįĪîĪōĪüĪĐ ĐĐĐĐ.Đ2Đ:Đ>ĐNĐRĐ\Đ`ĐgĐkĐuĐyĐƒĐ‡ĐŽĐ’Đ™ĐĐ¯ĐŗĐŧĐĀĐĘĐÎĐØĐÜĐåĐéĐōĐöĐŅ ŅŅ!Ņ3Ņ7ŅRŅVŅ]ŅaŅ|Ņ€Ņ›ŅŸŅēŅžŅáŅåŅīŅķŅúŅūŅŌ ŌŌŌ$Ō(Ō:Ō>ŌHŌLŌVŌZŌlŌpŌzŌ~ŌˆŌŒŌžŌĸŌŠŌ­ŌˇŌģŌÅŌÉŌØŌÜŌæŌęŌôŌøŌ ĶĶĶĶ&Ķ*Ķ<Ķ@ĶGĶKĶZĶ^ĶhĶlĶ~Ķ‚ĶŒĶĶĸĶĻͰʹͯĶĘĶÔĶØĶęĶîĶøĶüĶÔÔÔ Ô'Ô+Ô5Ô9ÔCÔGÔYÔ]ÔgÔkÔrÔvԀԄԋԏԙԝԧÔĢÔŊÔÁÔÉÔÍÔŨÔáÔëÔīÔöÔúÔÕÕÕÕ(Õ,Õ6Õ:ÕAÕEÕOÕSÕ]ÕaÕkÕoՁՅ՗՛ÕĢÕ¯ÕšÕŊÕÄÕČÕĐÕÔÕÜÕāÕęÕîÕøÕüÕÖÖÖÖ+Ö/Ö;Ö?ÖIÖMÖWÖ[ÖmÖqÖ‚Ö†ÖÖ”Ö›ÖŸÖąÖĩÖČÖĖÖĶÖ×ÖáÖåÖīÖķÖ× ×××%×)×8×<×M×Q×Z×^×o×s×z×~׍בטל×Ĩ׊װ״×Ŋ×Á×Ę×Î×Õ×Ų×ę×î×÷×û× ØØØØ$Ø(Ø/Ø3Ø<Ø@ØQØUØ^ØbØsØwØ€Ø„Ø•Ø™ØŖØ§ØšØŊØĮØËØŌØÖØāØäØîØōØŲŲŲŲ3Ų7Ų?ŲCŲSŲWŲfŲjŲ€Ų„ŲŽŲ’ŲœŲ Ų˛ŲļŲĀŲÄŲÎŲŌŲäŲčŲōŲöŲÚÚÚÚ$Ú(Ú2Ú6ÚHÚLÚVÚZÚdÚhÚzÚ~Ú…Ú‰Ú˜ÚœÚĻÚĒÚŧÚĀÚĘÚÎÚāÚäÚîÚōÚÛÛÛÛ(Û,Û6Û:ÛAÛEÛOÛSÛeÛiÛsÛwÛ~ۂیېۚ۞۰۴۞ÛÂÛÉÛÍÛ×ÛÛÛâÛæÛđÛôÛūÛÜÜÜ Ü$Ü4Ü8ÜBÜFÜMÜQÜ[Ü_ÜiÜmÜ܃܍ܑܘܜÜĻÜĒÜąÜĩÜŋÜÃÜÍÜŅÜÛÜßÜņÜõÜŨ ŨŨŨ)Ũ-Ũ4Ũ8Ũ@ŨDŨLŨPŨZŨ^ŨhŨlŨ~Ũ‚Ũ‹ŨŨ›ŨŸŨĢŨ¯ŨšŨŊŨĮŨËŨŨŨáŨōŨöŨŪŪ ŪŪ!Ū%Ū8Ū<ŪCŪGŪQŪUŪ_ŪcŪuŪyŪŠŪŽŪ•Ū™Ū¨ŪŦŪŊŪÁŪĘŪÎŪßŪãŪęŪîŪũŪßß ßßß ß$ß-ß1ß:ß>ßEßIßZß^ßgßkß|ß€ß‡ß‹ß”ß˜ßŸßŖßŦß°ßÁßÅßÎßŌßãßįßđßôßā āāā)ā-ā7ā;āBāFāPāTā[ā_āiāmāwā{āā‘āĄāĨāŧāĀāČāĖāÜāāā÷āûāáááá&á*á4á8á?áCáMáQá[á_áqáuááƒáŠáŽá˜áœáŖá§áąáĩáŋáÃáÕáŲáčáėáõáųá ââââ*â.â>âBâKâOâ`âdâuâyâƒâ‡âŽâ’âœâ âĒâŽâĀâÄâÎâŌâäâčâ˙âã ãããã1ã5ã?ãCãMãQãcãgãqãuããƒã•ã™ãŖã§ãąãĩãĮãËãÕãŲãããįãųãũãääää%ä)ä;ä?äIäMä_äcämäqäƒä‡ä‘ä•ä§äĢäĩäšäĀäÄäÎäŌäääčäđäôäûä˙äåååå%å)å8å<åCåGåOåSåZå^åfåjåqåuå}ååˆåŒå”å˜åŸåŖåĢå¯åļåēåÅåÉåŅåÕåÜåāåčåėåķå÷å˙åæææ"æ&æ-æ]:æ>æOæSæ_æcærævæ}æĶп޿ŸæŖæĒæŽæžæÂæŅæÕæÜæ]éæíæūæįįį!į%į,į]9į=įNįRį^įbįqįuį|į]‰įįžįĸįŽį˛įÁįÅįĖį]ŲįŨįîįōįūįčččč!č1č5čFčJčRčVčfčjčyč}čŽč’čščžčŽč˛čÁčÅčĖč]ŲčŨčîčōčûč˙čéé#é'é8é<éHéLé[é_éfé]séwéˆéŒé•é™é¨éŦéŊéÁéĘéÎéÕéŲéęéîéõéųéę ęęę-ę1ę:ę>ęEęIęZę^ęmęqę‚ę†ę—ę›ęĢę¯ęĀęÄęÔęØęāęäęëęīęøęüęëëëëëë,ë0ë7ë;ëJëNëWë[ëdëhëyë}ë„ëˆë—ë›ë¤ë¨ëąëĩëÆëĘëŲëŨëéëíëöëúë ė ėė"ė)ė].ė2ė9ė]>ėBėIė]VėZėcėgėvėzėė]†ėŠė‘ė]–ėšėĄė]Žė˛ėģėŋėÎėŌėÛėßėčėėėũėí íííí-í1í8í]=íAíHí]MíQíXí]eíiíríví…í‰í’í–íŸíŖí´í¸íÁíÅíÎíŌíãíįíîíōíîîîî#î'î0î4îEîIîPîTî`îdîsîwî€î„î‹îî—î›îŖî§î°î´îŊîÁîŌîÖîŨî]âîæîíî]ōîöîũî]īī ī]īī'ī+ī4ī8īAīEīVīZīcīgīvīzī‹īī˜īœīŖī§ī¸īŧīËīĪīāīäīíīņīøīüī đđ đ$đ-đ1đBđFđOđSđdđhđxđ|đđ‘đĄđ’Ĩđ’Ŧđ’°đ’¸đ’ŧđ’Ëđ’Īđ’Øđ’Üđ’čđ’ėđ’ũđ’ņ’ ņ’ņ’ņ’ņ’*ņ’.ņ’5ņ’9ņ’Hņ’Lņ’Sņ’Wņ’gņ”kņ”rņ”vņ”…ņ”‰ņ”’ņ”–ņ”Ÿņ”Ŗņ”Ēņ”Žņ”ŋņ”Ãņ”Ęņ”Îņ”Ũņáņęņîņ÷ņûņ ōōō ō/ō3ō:ōĶ?ōCōJōĶOōSōZōĶ_ōcōjōĶoōsōzō͇ō‹ō”ō˜ōĄōĨōŽō˛ōÃōĮōÖōÚōæōęōķō÷ōķ ķķķ&ķ*ķ9ķ=ķDķHķWķ[ķbķ]oķsķ„ķˆķ”ķ˜ķĄķĨķ´ķ¸ķĮķËķÜķāķėķđķųķũķ ôôô]ô ô'ô],ô0ô7ô]DôHôQôUô^ôbôkôoô€ô„ôô”ôôĄô°ô´ôģôĶĀôÄôËôĶĐôÔôÛôĶčôėôõôųôõõõõ$õ(õ7õ;õGõKõTõXõgõkõ|õ€õ‡õ]”õ˜õŠõ­õšõŊõÆõĘõŲõŨõėõđõ÷õ]öööö)ö-ö6ö:öIöMö^öbönörö{ööŽö’ö›öŸö¨öŦöĩöšöĘöÎö×öÛöäöčöņöõö÷ ÷÷÷ ÷$÷-÷1÷B÷F÷M÷Q÷Y÷]÷e÷i÷r÷v÷÷ƒ÷Š÷Ž÷—÷›÷ĸ÷Ļ÷ˇ÷ģ÷Ä÷Č÷Ņ÷Õ÷Ū÷â÷ķ÷÷÷ū÷ø ø øø ø'ø+ø4ø8øAøEøLøPø_øcøjønøuøyøˆøŒø“ø—ø ø¤ø­øąøĀøÄøÍøŅøÚøŪøīøķøúøūø ųų"ų&ų/ų3ų:ų>ųOųSųbųfųoųsų|ų€ų‘ų•ųžųĸųĢų¯ų¸ųŧųÍųŅųŲųŨųíųņųúúúú"ú&ú.ú2úBúFúOúSú\ú`úiúmú~ú‚úŠúŽú–úšúĒúŽúˇúģúÄúČúŅúÕúæúęúķú÷úûûûû"û&û/û3ûDûHûPûTûdûhûoûsû‚û†ûû“û¤û¨û¯ûŗûÂûÆûĪûĶûäûčûøûüû üüüü%ü)ü:ü>üOüSücügü{üü†üŠü‘ü•üœü üŠü­üŧüĀüÉüÍüÖüÚüãüįüîüōüũũũũ ũ$ũ8ũ<ũLũPũWũ[ũbũfũoũsũ‚ũ†ũũ“ũœũ ũąũĩũÁũÅũÔũØũáũåũöũúũūūūū!ū%ū.ū2ūCūGūPūTū]ūaūrūvū}ūūˆūŒū›ūŸū¯ūŗūŧūĀūŅūÕūŪūâūķū÷ūūū˙˙˙˙ ˙(˙,˙<˙@˙P˙T˙e˙i˙r˙v˙}˙˙’˙–˙Ĩ˙Š˙ē˙ž˙Î˙Ō˙ã˙į˙÷˙û˙$(7;CGOS[_os|€‰žĸĒŽļēÂÆÖÚãįđôũ"*.6:JNUY`dsw~‚‹˜œŖ§°´ģŋÆĘŲŨäčīķ '+26?CJN]ajnw{„ˆ™¤¨ˇģÄČĪĶäč÷û"37@DMQZ^os|€‰–šĢ¯ļēÃĮĐÔÛßîōųũ !15=AQU\`imvz‰–𪧏ŧÃĮÖÚáåíņ*.?CRV_clp…‘ĄĨļēĘÎ×Ûäčųũ (,59BFW[dhqu†Š’–ĻĒąĩÄČŅÕæęņõ&*15F–J–Q–U–d–h–w–{–‚–†–•–™–ĸ–Ļ–ˇ–ģ–Â–Æ–Õ–Ų–â–æ–í–ņ–––˜˜ ˜$˜,˜0˜8˜<˜C˜G˜W˜[˜c˜g˜o˜s˜ƒ˜‡˜˜”˜›˜Ÿ˜°˜´˜ÃšĮšÎšŌšÚšŪšæšęšųšũš š š š š% š) š9 š= šD šH šP šT š\ š` šg šk š{ š š š“ šœ š  š§ šĢ šŧ šĀ šĪ Ķ Û ß į ë ķ ÷ ˙      ( , 3 7 C G W [ k o v Ķƒ ‡ — › ĸ ͝ ŗ ē ]ŋ à Ę ]Ī Ķ Ú ]į ë ō ö ũ     ! ( ]- 1 8 ]E I Q U e i y } † Š ‘ • Ļ Ē š Ŋ Ä Č × Û ä č ų ũ     , 0 A E T X h l s Ķ€ „ ” ˜ Ÿ ĶŦ ° ŧ Ā Į Ë × Û į ë      Ķ, 0 @ D K ĶX \ m q z ~ … ‰ š ž ­ ą  Æ Ī Ķ Ú Ū ī ķ &*15EIQU\`imtx‡‹šž¨ŦļēĖĐÚŪčėķ÷%);?IMW[bfx|ƒ‡–𤍝ŗÅÉØÜæęôø &*<@JNX\nr|€ŠŽ ¤Ģ¯žÂĖĐâæđô *.8<NR\`gkuy‹–šĄĨ¯ŗÂÆÍŅØÜæęųũ 04<@GKRV_crvƒ”˜ ¤´¸ÍŅÚŪīķü /3CGW[bfz~‡‹’–§ĢēžÅÉŲŨæęķ÷ "&-18<CGOS[_fjz~’–ŸŖŦ°šŊÎŌÛßčėõų %)59HLUY`duyˆŒ•™ĸϝŗŧĀŅÕÜāįëōöū )-AENR[_hl}ŠŽ—›¤¨šŊÄČÔØäč÷û$(7;JNUYbfw{‹–𤍝ŗŊÁČĖÖÚáåīķúū !%,0:>EISW^blpw{…‰”žĸŠ­ļēĖĐ×Ûâæđôû˙  '+26=AHLSW^bimtxƒŠŽ•™ ¤Ģ¯ļēÁÅĖĐÚŪåéû˙]"15<]IMTXgkr]ƒŠŽĄ¨]ĩšĀÄĶ×Ū]ëīöú  ]!%,0?CJ]W[bfuy€]‘˜œĢ¯ļ]ÃĮÎŌáåė]ųũ"&04;?HL^bim|€‡‹’–¨ŦģŋĐÔÛßîō#'6:AEMQaetx‰–šĄĨļēÉÍŪâëīöú ")-7;BFPT[_qu|€ŠŽ•™Ŗ§Ž˛ÄČĪ]Üāįëũ ")-48AEW[bfmqƒ‡Ž’™¯ŗģŋĘÎáåíņū   # ' / 3 ; ? N R Z ^ m q x ]… ‰ ˜ œ Ŗ ]° ´ à Į Ö Ú â æ õ ų !!!!!!%!-!1!8!4¤B4¤Q4¤U4¤_4¤c4¤u4¤y4¤ƒ4¤‡4¤™4¤4¤¤4¤¨4¤ˇ4¤ģ4¤Ė4¤Đ4¤á4¤å4¤ī4¤ķ4¤ũ4¤5¤5¤5¤!5¤%5¤/5¤35¤E5¤I5¤S5¤W5¤a5¤e5¤w5¤{5¤…5¤‰5¤“5¤—5¤Š5¤­5¤ˇ5¤ģ5¤Å5¤É5¤Û5¤ß5¤æ5¤ę5¤ų5¤ũ5¤6¤ 6¤6¤!6¤+6¤/6¤A6¤E6¤O6¤S6¤e6¤i6¤s6¤w6¤‰6¤6¤—6¤›6¤­6ą6Á6Å6Ô6Ø6č6ė6ũ6777%7)70747C7G7X7\7m7q7€7„7•7™7ĸ7Ļ7­7ą7Â7Æ7Õ7Ų7â7æ7í7ņ78888!8%8,80898=8D8H8O8S8b8f8v8z8Š8Ž8•8™8 8¤8Ģ8¯8ž8Â8É8Í8Ü8ā8į8ë8ķ8÷89 99Ķ99"9Ķ/939G9K9S9W9g9k9t9x9‰999Ą9˛9ļ9Ë9Ī9Ø9Ü9í9ņ9ú9ū9::::-:1:B:F:O:S:Z:^:o:s:‚:†:—:›:¤:¨:¯:ŗ:Ä:Č:×:Û:ė:đ:ų:ũ:;;;;,;0;9;=;D;H;Y;];l;Ļp;Ļx;Ļ|;Ļ„;ψ;Ϙ;Ϝ;ĻĨ;ĻŠ;Ϟ;Ļļ;ĻĮ;ĻË;ĻÔ;ĻØ;Ļé;Ļí;Ļö;Ļú;Ļ <Ļ<Ļ<#<*<.<6<:<B<F<N<R<Z<^<n<r<y<}<<“<š<ž<Ļ<Ē<˛<ļ<ŋ<Ã<Ė<Đ<Ų<Ũ<æ<ę<û<˙<=] ===]#='=.=2=;=?=H=L=S=W=`=d=m=q=x=|=‹==–=š=ą=ĩ=Ė=Đ=×=Û=ō=ö= >>>>;>?>F>J>S>W>`>d>k>o>x>|>…>‰>˜>œ>Ŗ>§>ž>Â>Ų>Ũ>ä>č>˙>???%?)?H?L?S?W?^?b?i?m?t?x?‡?‹?”?˜?Ÿ?Ŗ?´?¸?Į?Ë?Ō?Ö?ß?ã?ė?đ?÷?û?@@@@&@*@3@7@@@D@U@Y@`@d@p@t@ƒ@‡@@”@Ĩ@Š@°@´@Å@É@Đ@Ô@ã@į@ø@ü@A AAA%A)A8AFĒBFĒKFĒOFĒ`FĒdFĒtFxFFƒFŒFF—F›FŦF°FˇFģFĘFÎFÖFÚFâFæFîFōFGGGG#G'G8GIEIIIPITI[I_IgIkIrIvI~I‚I‰II”I˜I I¤IŗIˇIžIÂIŅIÕIÜIāIįIëIōIöIūIJ J JJJ J$J+J/J7J;JJJNJUJYJiJmJvJzJƒJ‡J˜JœJŖJ§JļJēJÃJĮJĐJÔJŨJáJęJîJ˙JK KKKK&K*K3K7KHKLKSKWKcKgKvKzKƒK‡K˜KœKĨKŠKēKžKÅKÉKØKÜKãKįKîKōKųKũK LL!L%L.L2LCLGLPLTLeLiLpLtLƒL‡LŽL’L™LL¤L¨L¯LŗLēLžLÍLŅLáLåLėLđL˙LM MMMM&M*M;M?MHMLMUMYMbMfMwM{M‚M†M•M™M M¤MĢM¯MžMÂMŌMÖMŨMáMčMėMûM˙MN NNN'N+N2N6NHNLNSNWN^NbNqNuN|N€NN“NŖN§NŽN˛NÁNÅNÎNŌNãNįNđNôNO OOO#O'O8OTGTKTTTXTiTmTtTxT‡T‹T“T—T§TĢT˛TļTÅTÉTÚTŪTįTëTōTöTU UUU/U3UaHaLaSaWaiama|a€a‘a•aŸaŖaĒaŽaĀaÄaĶa×ačaėaöaúabbbb*b.b?bCbMbQbXb\bnbrbb…bŽb’b™bbĻbĒb´b¸bÁbÅbĖbĐbŲbŨbæbębķb÷būbcccc#c3c7c>cBcJcNcVcZcccgcpctc…c‰c’c–ccĄc¨cŦcģcŋcČcĖcŨcácčcėcûc˙cd ddd.d2dCdGdVdZdcdgdqdud~d‚d‹dd˜dœdĨdŠdēdždĮdËdÔdØdádådîdōdûd˙de ee!e*e.e7e;eDeHeQeUefejesewe€e„ee‘ešeže¯eŗeēežeÍeŅeÚeŪečeėeõeųe ffff$f(f1f5fFfJfQfUfafefrfvf…f‰ff”fœf f¨fŦfĩfšfÂfÆf×fÛfäfčfīfķfúfūf gggg/g3g:g>gMgQgXg\gkgogxg|gg‘gšgžg¯gŗgēgžgÍgŅgÚgŪgīgķgüghhhh h/h3hoOoSodohowo{o‚o]‡o‹o’o]—o›oĸo]§oĢo˛o]ŋoÃoĘoÎoÕoŲoāoäoíoņoøoüo ppp]p!p(p]-p1p8p]EpIpQpUp]papqpup~p‚p‰ppžpĸpąpĩpŧpĀpĪpĶpÜpāpņpõpüpqqqq q1q5q>qBqSqWq^qbqqquq~q‚q“q—q q¤qĩqšqĀqÄqĶq×qāqäqõqųqrrrr"r&r5r9rJrNrWr[rbrfrwr{rŠrŽrŸrŖrŦr°rˇrģrĖrĐrßrãrôrørss ss!s%s4s8sIsMsVsZsasesvszs‰ss”s˜sŸsŖs˛sļsŊsÁsČsĖsÛsßsīsķsúsūs tt!t%t4t8tGtKtTtXtatetntrt{ttt”t›tŸtŽt˛tštŊtÄtČt×tÛtât]įtëtōt]˙tu uuu!u(u,u;u?uFuJuYu]ulupu€u„u“u—u§uĢuēužuÎuŌuŲu]Ūuâuéu]öuúuvvvv!v%v.v2v;v?vPvTv]vavjvnvwv{vŒvv—v›vĒvŽvˇvģvÂvÆv×vÛvęvîvõv]úvūvw]www!w0w4wCwGwWw[wkwow~w‚w‘w•wœwpŠw­wĩwšwČwĖwĶw×wŪwâwęwîwũwx xxxx/x3xCxGxNxRxZx^xnxrx{xxx”xxĄxĩxšxČxĖxĶx×xæxęxņxpöxúxypyyyp&y*y9y=yNyRyayeyvyzy‰y¯y¯”ypĄyąĨyąŦyą°yąˇyąģyąĘyąÎyąÕy]âyŗæyŗíyŗņyŗøyŗüyŗ zŗzŗz]#zĩ'zĩ.zĩ2zĩ9zĩ=zĩDzĩHzĩWzĩ[zĩbz]ozˇszˇ‚zˇ†zˇ–zˇšzˇĄzpĻzˇĒzˇązpļzˇēzˇÁzpÎzˇŌzˇãzˇįzˇîz]ûzˇ˙zˇ{ˇ {ˇ{ˇ{ˇ.{ˇ2{ˇ9{p>{ˇB{ˇI{pV{ˇZ{ˇa{pn{r{y{p~{‚{‰{p–{š{Ą{pŽ{˛{Á{Å{Ė{]Ų{Ũ{í{ņ{ø{p| |||0|4|;|]H|L|[|_|f|]k|o|v|]ƒ|‡|Ž|p›|Ÿ|§|Ģ|˛|ļ|Ŋ|Á|É|Í|Ô|Ø|ā|ä|ë|ī|÷|û|}}}}"}&}-}]2}6}=}]B}F}M}]Z}^}h}l}v}z}„}ˆ}’}–}¨}Ŧ}ĩ}š}Č}Ė}Ö}Ú}ä}č}ō}ö}~~~~)~-~:~>~G~K~Z~^~p~t~{~]ˆ~Œ~™~~Ŧ~°~ˇ~]ŧ~Ā~Į~]Ė~Đ~×~]Ü~ā~į~]ô~ø~p$(/p<@JN`dk]x|Ž’Ŗ§šŊĘÎ×Ûęî˙€€€'€+€>€B€L€P€Z€^€p€t€{€€†€Š€’€–€§€Ģ€˛€ļ€ŀɀЀԀ܀ā€ņ€õ€pp,0:>EISWimt]…“šž°´ģ]ȁˁׁ́æęņ]ū‚‚‚&‚*‚9‚=‚Q‚U‚f‚j‚{‚‚Ž‚’‚Ŗ‚§‚¸‚ŧ‚˂Ī‚ւڂé‚í‚ô‚]ƒƒƒƒ!ƒ].ƒ2ƒCƒGƒXƒ\ƒcƒ]pƒtƒ…ƒ‰ƒ’ƒ–ƒ§ƒ̃´ƒ¸ƒɃ̓Ճ؃éƒíƒūƒ„„„„p"„&„-„p:„>„H„L„^„b„i„]n„r„y„]†„Š„”„˜„DŽބˇ„ģ„Ė„ЄڄŪ„đ„ô„…………!…%…,…]1…5…<…]I…M…W…[…m…q…z…~……‘…˜…]…Ą…¨…]ĩ…š…ÅĮ…Ų…Ũ…æ…ę…ų…ũ…† †††)†-†?†C†P†T†]†a†p†t†}††’†–†Ÿ†Ŗ†´†¸†ŋ†ÆŌ†ֆį†ë†ô†ø†˙†‡‡‡'‡+‡<‡@‡Q‡U‡d‡h‡o‡]t‡x‡‡]Œ‡‡š‡ž‡°‡´‡ģ‡]ȇˇŪ‡â‡ô‡ø‡ ˆˆˆˆ(ˆ,ˆ;ˆ?ˆQˆUˆfˆjˆyˆ}ˆ„ˆp‰ˆˆ”ˆpĄˆĨˆ¯ˆŗˆňɈЈ]Ũˆáˆķˆ÷ˆ‰ ‰‰"‰/‰3‰<‰@‰O‰S‰d‰h‰y‰}‰Œ‰‰Ą‰Ĩ‰ļ‰ē‰ɉ͉߉ã‰ô‰ø‰Š ŠŠ Š1Š5ŠDŠHŠRŠVŠ`ŠdŠnŠrŠ|Š€Š’Š–ŠŠĄŠNJފˇŠģŠŠƊ͊ҊāŠäŠëŠöđŠôŠûŠö‹‹ ‹ö‹‹‹ö(‹,‹3‹7‹@‹D‹M‹Q‹X‹\‹k‹o‹x‹|‹…‹‰‹’‹–‹§‹Ģ‹˛‹ļ‹ŋɋĶ‹׋á‹å‹÷‹û‹ŒŒŒŒ%Œ)Œ3Œ7ŒIŒMŒVŒZŒcŒgŒxŒ|ŒƒŒ‡Œ–ŒšŒŦŒ°ŒŒČ֌ڌäŒčŒīŒķŒ -1BFUšYšašešušyš…š‰š•š™šĨšŠšŊšÁšĘšÎš×šÛšäščšųšũšŽšŽšŽšŽš'Žš+Žš7Žš;ŽšOŽšSŽš\Žš`ŽšqŽšuŽš|Žš€ŽšŽš“ŽšœŽš Žš§ŽšĢŽšŧŽšĀŽšĪŽšĶŽšÜŽšāŽšįŽšëŽšüŽššģģģģ-ģ1ģ8ģ<ģKģOģXģ\ģmģqģzģ~ģ‡ģ‹ģœģ ģ§ģĢģˇģģģʏģΏģ׏ģۏģėģđģųģũģģģģģ,ģ0ģ9ģ=ģDģHģYģ]ģlģpģyģ}섐숐왐ģģŦŊ°ŊŧŊŊːŊАŊܐŊāŊôŊøŊ˙Ŋ‘Ŋ ‘Ŋ‘Ŋ‘Ŋ!‘Ŋ(‘Ŋ,‘Ŋ;‘Ŋ?‘ŊH‘ŊL‘Ŋ]‘Ŋa‘Ŋj‘Ŋn‘Ŋ‘Ŋƒ‘ŊŠ‘ŊŽ‘Ŋ‘ŊĄ‘ŊĒ‘ŊŽ‘Ŋŋ‘ŊÑŊĖ‘ŊБŊá‘Ŋå‘Ŋė‘Ŋđ‘Ŋ˙‘Ŋ’Ŋ ’Ŋ’Ŋ’Ŋ’Ŋ,’Ŋ0’Ŋ?’ŊC’ŊL’ŊP’ŊW’Ŋ[’Ŋl’Ŋp’Ŋ’ŋƒ’ŋŠ’ŋŽ’ŋ•’ŋ™’ŋŠ’ŋ­’ŋļ’ŋē’ŋÒŋĮ’ŋےŋߒŋæ’ŋę’ŋņ’ŋõ’ŋ“ŋ“ŋ“ŋ“ŋ"“ŋ&“ŋ/“ŋ3“ŋD“ŋH“ŋQ“ŋU“ŋf“ŋj“ŋq“ŋu“ŋ„“ŋˆ“ŋ‘“ŋ•“ŋĻ“ŋĒ“ŋŗ“ŋˇ“ŋȓŋĖ“ŋĶ“ŋדŋæ“ŋę“ŋķ“ŋ÷“ŋū“ŋ”ŋ”ŋ”ŋ&”ŋ*”ŋ3”ŋ7”ŋ>”ŋB”ŋS”ŋW”ŋf”Áj”Ár”Áv”Á~”Á‚”ÁŠ”ÁŽ”Á–”Áš”Áĸ”ÁĻ”Áļ”Áē”ÁÁ”ÁŔÁΔÁŌ”Á۔ÁߔÁæ”Áę”Áķ”Á÷”Áū”Á•Á •Á•Á•Á•Á%•Á)•Á0•Á4•Á=•ÁA•ÁH•ÁL•Á]•Áa•Ár•Áv•Á•Áƒ•ÁŠ•ÁŽ•ÁŸ•ÁŖ•Á˛•Áļ•ÁŊ•ÁÁ•ÁʕÁΕÁՕÁŲ•Áâ•Áæ•Áī•Áķ•Áü•Á–Á –Á –Á–Á"–Á)–Á-–Á4–Á8–Á?–ÁC–ÁK–ÁO–ÁW–Á[–Áj–Án–Á}–Á–ÁŠ–ÁŽ–Á—–Á›–ÁŦ–Á°–Áˇ–pŧ–ÁĀ–ÁĮ–pĖ–ÁЖÁזpä–Áč–Áų–Áũ–Á—]—Á—Á—Á —Á/—Á3—ÁD—ÁH—ÁO—pT—ÁX—Á_—pd—Áh—Áo—p|—Á€—Á‡—p”—Á˜—ÁĄ—ÁĨ—ÁŽ—Á˛—Áģ—Áŋ—ÁЗÁԗÁŨ—Áá—Áę—Áî—Á÷—Áû—Á ˜Á˜Á˜Á˜Á*˜Á.˜Á?˜ÁC˜ÁL˜ÁP˜ÁW˜Á[˜Ál˜Áp˜Á˜Ø˘ϘטۘÃŖ˜ç˜ï˜Ãŗ˜ÃØÃĮ˜Ã͘ÃטÃã˜Ãį˜Ãķ˜Ã÷˜Ã™Ã™Ã™Ã™Ã&™Ã*™Ã1™Ã5™ÃD™ÃH™ÃO™ÃS™Ã[™Ã_™Ãg™Ãk™Ãt™Ãx™Á™řΙҙۙߙð™ô™Ãģ™Ãŋ™ÃÆ™ÃʙÃŲ™ÃŨ™Ãä™Ãč™Ãņ™Ãõ™Ãū™Ãšà šà šÃšÃšÃ#šÃ'šÃ.šÃ2šÃ;šÃ?šÃFšÃJšÃ[šÃ_šÃfšÃjšÃsšÃwšÀšĚ˚ϚؚܚíšÃąšøšÃŧšÃĚÃȚÃКÃԚÃܚÃāšÃđšÃôšÃûšÃ˙šÃ›à ›Ã›Ã›à ›Ã$›Ã-›Ã1›ÃB›ÃF›ÃO›ÃS›Ã\›Ã`›Ãi›Ãm›Ã~››ɛ͛ٛݛÃŦ›ð›ڛÃŊ›ÃΛÃŌ›ÃŲ›ÃŨ›Ãî›Ãō›Ãų›Ãũ›à œÃœÃ!œÃ%œÃ.œÃ2œÃ9œÃ=œÃNœÃRœÃaœÃeœÃnœÃrœÃyœÃ}œΜҜÃĄœÅĨœÅ­œÅąœÅšœÅŊœÅŜÅɜÅҜÅ՜ÅåœÅéœÅõœÅųœÅÅ ÅÅÅ%Å)Å=ÅAÅHÅLÅSÅWÅfÅjÅqÅuÅ}ŁʼnōŖŚÅŖŧ۝Å´ÅŊÅÁÅŌÅ֝ÅŨÅáÅčÅėÅûÅ˙ÅžÅ žÅžÅžÅ žÅ$žÅ+žÅ/žÅ8žÅ<žÅEžÅIžÅPžÅTžÅ]žÅažÅhžÅlžÅ}žŁžňžŌžŕžřžÅĸžÅĻžÅ­žÅąžÅēžÅžžÅĪžÅĶžÅڞÅŪžÅæžÅęžÅōžÅöžÅūžÅŸÅŸÅŸÅŸÅ!ŸÅ*ŸÅ.ŸÅ7ŸÅ;ŸÅBŸÅFŸÅOŸÅSŸÅdŸÅhŸÅqŸÅuŸÅ~ŸłŸŋŸŏŸÅ ŸŤŸÅ̟ůŸÅģŸÅŋŸÅΟÅԟÅ۟ÅߟÅđŸÅôŸÅûŸÅ˙ŸÅ Å Å Å Å. Å2 ÅC ÅG ÅP ÅT Å[ Å_ Åp Åt Ń Ň Ő Ŕ ś ş Ű Å´ ÅàĮĮ ĮĪ ĮĶ Įã Įį Įî Įō Įų Įũ ĮĄĮĄĮĄĮĄĮ0ĄĮ4ĄĮCĄĮGĄĮNĄĮRĄĮ[ĄĮ_ĄĮhĄĮlĄĮsĄĮwĄĮ~ĄĮ‚ĄĮ“ĄĮ—ĄĮžĄĮĸĄĮŠĄĮ­ĄĮŧĄĮĀĄĮĮĄĮËĄĮÔĄĮØĄĮáĄĮåĄĮôĄĮøĄĮĸĮĸĮĸĮĸĮ#ĸĮ'ĸĮ.ĸĮ2ĸĮ>ĸĮBĸĮQĸĮUĸĮ\ĸĮ`ĸĮqĸĮuĸĮ|ĸĮ€ĸĮ‘ĸĮ•ĸĮœĸĮ ĸĮ¯ĸĮŗĸĮÄĸĮČĸĮŲĸĮŨĸĮæĸĮęĸĮņĸĮõĸĮŖĮ ŖĮŖĮŖĮ&ŖĮ*ŖĮ1ŖĮ5ŖĮFŖĮJŖĮYŖÉ]ŖÉdŖÉhŖÉoŖÉsŖɂŖɆŖɍŖɑŖəŖɝŖÉĨŖÉŠŖÉąŖÉĩŖÉŊŖÉÁŖÉÉŖÉÍŖÉŨŖÉáŖÉęŖÉîŖÉúŖÉūŖÉ ¤É¤É¤É¤É*¤É.¤É:¤É>¤ÉR¤ÉV¤É]¤]b¤Éf¤Ém¤]r¤Év¤É}¤]‚¤Ɇ¤ɍ¤]’¤ɖ¤ɝ¤]ǤÉŽ¤Éĩ¤Éš¤ÉÁ¤ÉŤÉͤÉҤÉÚ¤ÉŪ¤Éį¤Éë¤Éô¤Éø¤ÉĨÉĨÉĨÉĨÉĨÉĨÉ(ĨÉ,ĨÉ=ĨÉAĨÉHĨ]MĨÉQĨÉXĨ]]ĨÉaĨÉhĨ]mĨÉqĨÉxĨ]}ĨɁĨɈĨ]ĨɑĨɘĨ]ĨĨÉŠĨɰĨÉ´ĨÉŊĨÉÁĨÉĘĨÉÎĨÉ×ĨÉÛĨÉäĨÉčĨÉņĨÉõĨÉüĨÉĻÉ ĻÉ ĻÉĻÉĻÉ!ĻÉ%ĻÉ.ĻÉ2ĻÉ;ĻÉ?ĻÉPĻÉTĻÉ]ĻÉaĻÉhĻÉlĻÉ}ĻɁĻɐĻɔĻɛĻɟĻɨĻÉŦĻÉĩĻÉšĻÉĀĻÉÄĻÉÍĻÉŅĻÉÚĻÉŪĻÉåĻÉéĻÉøĻÉüĻÉ§É§É§É§É§É §É(§É,§É4§É8§ÉH§ÉL§ÉS§ÉW§É`§Éd§Ém§Éq§Éx§É|§Ʌ§ɉ§ɚ§ɞ§ɧ§Ȩ́Éĩ§Éš§ɧÉÆ§ÉاÉܧÉã§Éį§Éķ§É÷§É¨É ¨É¨É¨É&¨É*¨É1¨É5¨ÉF¨ÉJ¨ÉQ¨ÉU¨Éd¨Éh¨Éq¨Éu¨Ɇ¨Ɋ¨ɓ¨ɗ¨ɨ¨ÉŦ¨Éŗ¨ɡ¨ÉƨÉʨÉ͍ÉרÉč¨Éė¨Éõ¨Éų¨É ŠÉŠÉŠÉŠÉ(ŠÉ,ŠÉ5ŠÉ9ŠÉJŠÉNŠÉWŠÉ[ŠÉlŠÉpŠÉwŠÉ{ŠɊŠɎŠɗŠɛŠÉŦŠɰŠÉšŠÉŊŠÉΊÉŌŠÉŲŠÉŨŠÉėŠÉđŠÉųŠÉũŠÉĒÉĒÉĒÉĒÉ0ĒÉ4ĒÉ;ĒÉ?ĒÉNĒÉRĒÉ[ĒÉ_ĒÉpĒÉtĒÉ}ĒɁĒɒĒɖĒɝĒÉĄĒɰĒÉ´ĒÉÅĒÉÉĒÉŌĒÉÖĒÉŨĒÉáĒÉōĒÉöĒÉĢÉ ĢÉĢÉĢÉ'ĢÉ+ĢÉ2ĢÉ6ĢÉGĢÉKĢÉZĢÉ^ĢÉoĢÉsĢÉ|ĢɀĢɇĢɋĢɜĢÉ ĢɯĢÉŗĢÉÄĢÉČĢÉŅĢÉÕĢÉÜĢÉāĢÉņĢÉõĢÉŦÉŦÉŦÉŦÉ&ŦÉ*ŦÉ1ŦÉ5ŦÉFŦÉJŦÉYŦÉ]ŦÉnŦÉrŦÉ{ŦÉŦɆŦɊŦɛŦɟŦÉŽŦɲŦÉÃŦÉĮŦÉĐŦÉÔŦÉÛŦÉßŦÉđŦÉôŦÉ­É­É­É­É%­É)­É0­É4­ÉE­ÉI­ÉX­Ë\­Ëc­Ëg­Ëp­Ët­Ë}­ˁ­ˈ­ˌ­˕­˙­Ëĸ­ËĻ­Ë­­Ëą­Ë­ËÆ­ËέËŌ­ËÚ­ËŪ­Ëæ­Ëę­Ëō­Ëö­ËŽË ŽËŽËŽËŽË"ŽË+ŽË/ŽË6ŽË:ŽËCŽËGŽËXŽË\ŽËeŽËiŽËrŽËvŽËŽ˃Ž˔Ž˘Ž˟ŽËŖŽ˯ŽËŗŽËÂŽËÆŽËÍŽËŅŽËâŽËæŽËíŽËņŽË¯Ë¯Ë ¯Ë¯Ë ¯Ë$¯Ë5¯Ë9¯ËB¯ËF¯ËM¯ËQ¯Ëb¯Ëf¯Ëu¯Ëy¯˂¯ˆ¯ˍ¯ˑ¯Ëĸ¯ËϝËĩ¯š¯į˝Đ¯دܯã¯į¯÷¯û¯°° °°°°+°/°6°]C°G°P°T°`°d°x°|°…°‰°•°™°­°Íą°ÍŊ°ÍÁ°ÍͰÍҰÍŨ°Íá°Íí°Íņ°ÍąÍ ąÍąÍąÍąÍąÍ.ąÍ2ąÍ9ą]FąĪJąĪQąĪUąĪ\ąĪ`ąĪpąĪtąĪ{ąĪąΈąΌąĪ•ąĪ™ąĪ­ąĪąąΏąĪŧąĪÃąĪĮąĪÎąĪŌąĪáąĪåąĪėą]ųąũą˛˛˛˛˛˛-˛1˛:˛>˛E˛I˛R˛V˛_˛c˛t˛x˛˛ƒ˛Оޞ•˛™˛¨˛Ŧ˛ŗ˛p¸˛ŧ˛Ã˛pвÔ˛Û˛]č˛ė˛÷˛û˛ŗŗŗŗ&ŗ*ŗ3ŗ7ŗ>ŗBŗIŗMŗ\ŗ`ŗgŗkŗsŗwŗŗƒŗŠŗŽŗ–ŗšŗĸŗĻŗļŗēŗÁŗ]ÆŗĘŗŅŗ]Ūŗâŗéŗ]öŗúŗ´Ķ´ ´´Ķ´´!´Ķ.´2´9´=´D´H´W´[´b´f´m´q´x´|´‹´´–´]›´Ÿ´Ļ´]ŗ´ˇ´ž´]Ë´Ī´Ú´Ū´į´ë´ô´ø´ ĩ ĩĩĩ!ĩ%ĩ,ĩ0ĩ?ĩCĩJĩNĩVĩZĩaĩeĩmĩqĩĩ…ĩŒĩ]‘ĩ•ĩœĩ]Šĩ­ĩ´ĩ]ÁĩÅĩĖĩĶŅĩÕĩÜĩĶáĩåĩėĩĶųĩũĩļļļļ"ļ&ļ-ļ1ļ8ļ<ļCļGļNļRļaļeļlļ]qļuļ|ļ]‰ļļ”ļ]ĄļĨļ°ļ´ļŊļÁļĘļÎļßļãļėļđļ÷ļûˇˇ ˇ$ˇ,ˇ0ˇ7ˇ;ˇCˇGˇWˇ[ˇbˇ]gˇkˇrˇ]ˇƒˇЎ]—ˇ›ˇĸˇĶ§ˇ̎˛ˇĶˇˇģˇ¡ĶΎ͎ÚˇŪˇåˇéˇøˇüˇ¸¸¸¸¸¸$¸(¸7¸;¸B¸]G¸K¸R¸]_¸c¸j¸]w¸{¸†¸Џ“¸—¸ ¸¤¸ĩ¸š¸¸Ƹ͸ҏظܸë¸ī¸ö¸ú¸šš šššš-š1š8š]=šAšHš]UšYš`š]mšqšxšĶ}ššˆšĶš‘š˜šĶĨšŠš°š´šģšŋšΚŌšŲšŨšäščšīšķšúšūš ēēē]ē!ē(ē]5ē9ē@ē]MēQēXē\ēeēiēpētē}ēēˆēŒēēĄēĒēŽēĩēšēĀēÄēĶē×ēŪēâēéēíēôēøē˙ēģģģģ]"ģ&ģ-ģ]:ģ>ģEģ]RģVģ]ģĶbģfģmģĶrģvģ}ģĶŠģŽģ•ģ™ģ¨ģŦģŗģˇģžģÂģÉģÍģÔģØģįģëģōģ]÷ģûģŧ]ŧŧŧ]'ŧ+ŧ4ŧ8ŧIŧMŧ\ŧ`ŧoŧsŧzŧ~ŧ‡ŧ‹ŧšŧžŧĨŧŠŧ˛ŧļŧŊŧÁŧŌŧÖŧŨŧáŧęŧîŧõŧųŧ ŊŊŊŊ,Ŋ0Ŋ7Ŋ;ŊJŊNŊWŊ[ŊdŊhŊqŊuŊ†ŊŠŊ“Ŋ—Ŋ Ŋ¤ŊĢŊ¯ŊĀŊÄŊËŊĪŊÛŊßŊîŊōŊûŊ˙Ŋžž,ž0ž?žCž[ž_žnžrž{žžž”žŖž§žļžēžÁžÅžΞŌžážåžėžđžųžũžŋŋŋŋ&ŋ*ŋ;ŋ?ŋHŋLŋ]ŋaŋhŋlŋ{ŋŋˆŋŒŋŋĄŋĒŋŽŋŋŋÃŋĘŋÎŋŨŋáŋęŋîŋ÷ŋûŋĀĀĀĀ&Ā*Ā3Ā7Ā>ĀBĀSĀWĀ^ĀbĀnĀrĀĀ…ĀŽĀ’ĀŖĀ§ĀŋĀÃĀĘĀÎĀÕĀŲĀčĀėĀÁÁÁÁ"Á&Á5Á9Á@ÁDÁKÁOÁ^ÁbÁiÁ]vÁŅzÁҁÁŅ…ÁŅÁŅ‘ÁŅ™ÁŅÁŅĻÁŅĒÁŅŗÁҎÁŅĀÁŅÄÁŅÍÁŅŅÁŅâÁŅæÁŅîÁŅōÁŅúÁŅūÁŅÂŅ ÂŅÂŅÂŅ&ÂŅ*ÂŅ6ÂŅ:ÂŅFÂŅJÂŅVÂŅZÂŅfÂŅjÂŅ~ÂŅ‚Â҉ÂŅÂŅ•ÂŅ™ÂŅĄÂŅĨÂŅŽÂҞÂŅģÂŅŋÂŅČÂŅĖÂŅÕÂŅŲÂŅęÂŅîÂŅõÂŅųÂŅÃŅÃŅ ÃŅÃŅÃŅÃŅ!ÃŅ%ÃŅ,ÃŅ0ÃŅ?ÃŅCÃŅJÃŅNÃŅVÃŅZÃŅbÃŅfÃŅoÃŅsÃŅ|ÃŅ€Ã҉ÃŅÃŅ–ÃҚÃŅĢÃҝÃŅļÃ]ģÃŅŋÃŅÆÃ]ËÃŅĪÃŅÖÃ]ãÃŅįÃŅîÃŅōÃŅûÃŅ˙ÃŅÄŅ ÄŅÄŅÄŅ ÄŅ$ÄŅ+ÄŅ/ÄŅ8ÄŅ<ÄŅEÄŅIÄŅRÄŅVÄŅ]ÄŅaÄŅjÄŅnÄŅwÄŅ{ÄŅ‚Ä҆ÄŅ—ÄŅ›ÄŅŦÄҰÄŅšÄŅŊÄŅÄÄŅČÄŅŲÄŅŨÄŅėÄŅđÄŅ÷ÄŅûÄŅÅŅÅŅÅŅÅŅÅŅ ÅŅ)ÅŅ-ÅŅ6ÅŅ:ÅŅKÅŅOÅŅVÅŅZÅŅaÅŅeÅŅlÅŅpÅŅÅ҃ÅŅ’ÅŅ–ÅҟÅŅŖÅŅŦÅҰÅŅÁÅŅÅÅŅĖÅpŅÅŅÕÅŅÜÅpáÅŅåÅŅėÅpųÅŅũÅŅÆŅÆŅÆ]&ÆŅ*ÆŅ1ÆŅ5ÆŅDÆŅHÆŅYÆŅ]ÆŅdÆpiÆŅmÆŅtÆpÆŅ…ÆҌÆp™ÆŅÆŅĻÆŅĒÆŅŗÆҎÆŅĀÆŅÄÆŅÍÆŅŅÆŅâÆŅæÆŅīÆŅķÆŅüÆŅĮŅ ĮŅ ĮŅĮŅĮŅ+ĮŅ/ĮŅ6ĮŅ:ĮŅIĮŅMĮŅ^ĮŅbĮŅkĮŅoĮŅvĮŅzĮŅ‹ĮŅĮŅžĮŅĸĮŅĢĮҝĮҏĮŅŧĮŅÅĮŅÉĮŅÚĮŅŪĮŅįĮŅëĮŅôĮŅøĮŅČŅČŅČŅČŅ!ČŅ%ČŅ4ČŅ8ČŅIČŅMČŅVČŅZČŅaČŅeČŅvČŅzČ҉ČČ”Č˜ČĸČĻČ­ČąČÃČĮČĪČĶČâČæČīČķČ˙ČÉ ÉÉ$É(É/É3É=ÉAÉSÉWÉ`ÉdÉpÉtɈɌɕəÉĸÉĻɝɺÉŧÉĀÉŅÉÕÉÜÉāÉéÉíÉöÉúÉĘĘĘĘĘĘ.Ę2Ę>ĘBĘQĘUĘ\Ę]aĘeĘlĘ]yĘ}Ę„ĘˆĘ‘Ę•ĘžĘĸĘŠĘ­ĘļĘēĘËĘĪĘØĘÜĘëĘīĘöĘúĘËËËËËË(Ë,Ë=ËAËHËLË[Ë_ËkËoËxË|Ë‹ËË–ËšËŖË§Ë°Ë´ËģËŋËČËĖËŨËáËčËėËķË÷ËĖ ĖĖĖ*Ė.Ė?ĖCĖLĖPĖYĖ]ĖfĖjĖ{ĖĖ‡Ė‹Ė›ĖŸĖ¨ĖŦĖĩĖšĖÂĖÆĖ×ĖÛĖäĖčĖņĖõĖūĖÍÍÍÍ"Í.Í2Í>ÍBÍQÍUÍfÍjÍsÍwÍ~͓͂͗ÍĻÍĒÍąÍĩÍžÍÂÍËÍĪÍÖÍÚÍãÍįÍøÍüÍÎ ÎÎÎÎ#Î4Î8Î?ÎCÎOÎSÎbÎfÎoÎsÎ„ÎˆÎÎ“Î¤Î¨Î¯ÎŗÎÂÎÆÎ×ÎÛÎäÎčÎīÎķÎĪĪĪĪ$Ī(Ī/Ī3ĪDĪHĪWĪ[ĪcĪgĪoĪsĪƒĪ‡ĪŽĪ’ĪšĪžĪĻĪĒĪēĪžĪĮĪËĪÔĪØĪéĪíĪöĪúĪĐĐĐĐ%Đ)Đ2Đ6ĐGĐKĐRĐVĐeĐiĐrĐvĐ}ЁВЖĐĨЊвĐļĐŋĐÃĐÔĐØĐäĐčĐ÷ĐûĐŅĶŅ ŅŅĶŅ#Ņ,Ņ0Ņ9Ņ=ŅFŅJŅ[Ņ_ŅnŅrŅ~Ņ‚Ņ‹ŅŅžŅĸŅŗŅˇŅžŅ]ÃŅĮŅÎŅ]ĶŅ×ŅŪŅ]ëŅīŅøŅüŅ ŌŌŌpŌŌ&Ōp+Ō/Ō6ŌpCŌGŌPŌTŌcŌgŌnŌpsŌwŌ~ŌpƒŌ‡ŌŽŌp›ŌŸŌ¨ŌŦŌģŌŋŌÆŌĶËŌĪŌÖŌĶÛŌßŌæŌĶķŌ÷ŌĶĶ ĶĶĶĶ/Ķ3ĶBĶFĶRĶVĶ_ĶcĶrĶv͇͋͒Ķ]—Ķ›ĶĸĶ]§ĶĢ͞Ķ]ŋĶÃĶĖĶĐĶßĶãĶęĶpīĶķĶúĶp˙ĶÔ ÔpÔÔ$Ô(Ô7Ô;ÔBÔpGÔKÔRÔpWÔ[ÔbÔpoÔsÔ|ԀԏԓԚÔpŸÔŖÔĒÔp¯ÔŗÔēÔpĮÔËÔÔÔØÔįÔëÔōÔp÷ÔûÔÕpÕ ÕÕpÕ#Õ,Õ0Õ?ÕCÕJÕ]OÕSÕZÕ]_ÕcÕjÕ]wÕ{Õ„ÕˆÕ—Õ›Õ¤Õ¨ÕąÕĩÕžÕÂÕĶÕ×ÕāÕäÕíÕņÕúÕūÕÖÖÖÖ'Ö+Ö4Ö8ÖGÖKÖTÖXÖaÖeÖvÖzÖÖ…Ö”Ö˜ÖĄÖĨÖŽÖ˛ÖÃÖĮÖĐÖÔÖŨÖáÖōÖöÖũÖ××××!×2×6×F×J×[×_×h×l×s×w׈׌כןװ״×Ŋ×Á×Č×Ė×Ũ×á×đ×ôר ØØØ$Ø])Ø-Ø4Ø]9Ø=ØDØ]QØUØ\Ø`ØhØlØtØxØØ…ØŽØ’ØŖØ§ØŽØ]ŗØˇØžØ]ÃØĮØÎØ]ĶØרŪØ]ëØīØöØúØŲŲ ŲŲŲ#Ų*Ų.Ų=ŲAŲJŲNŲ_ŲcŲjŲnŲ}ŲŲŠŲŽŲŸŲŖŲŦŲ°ŲÁŲÅŲĖŲĐŲßŲãŲėŲđŲÚÚÚÚ#Ú'Ú.Ú2ÚAÚEÚVÚZÚcÚgÚnÚrÚƒÚ‡Ú–ÚšÚĢÚ¯Ú¸ÚŧÚÃÚĮÚØÚÜÚëÚīÚÛÛ ÛÛÛÛ-Û1Û@ÛDÛLÛPÛXÛ\ÛdÛhÛpÛtÛ|Û€ÛÛ”ÛÛĄÛĒÛŽÛˇÛģÛĖÛĐÛŲÛŨÛæÛęÛķÛ÷ÛÜ ÜÜÜ#Ü'Ü3Ü7ÜFÜJÜQÜ]VÜZÜaÜ]nÜrÜyÜ}Ü…Ü‰Ü‘Ü•ÜÜĄÜąÜĩÜŧÜ]ÁÜÅÜĖÜ]ŲÜŨÜäÜčÜ÷ÜûÜ ŨŨŨŨ"Ũ&Ũ7Ũ;ŨJŨNŨ_ŨcŨlŨpŨwŨ{ŨŒŨŨŸŨŖŨ´Ũ¸ŨÁŨÅŨĖŨĐŨáŨåŨôŨÔøŨÔ ŪÔŪÔŪÔŪÔ"ŪÔ&ŪÔ.ŪÔ2ŪÔ:ŪÔ>ŪÔFŪÔJŪÔRŪÔVŪÔfŪÔjŪÔqŪ]vŪÔzŪԁŪ]†ŪԊŪԑŪ]–ŪԚŪÔĄŪ]ŽŪÔ˛ŪÔšŪÔŊŪÔÅŪÔÉŪÔŌŪÔÖŪÔßŪÔãŪÔėŪÔđŪÔųŪÔũŪÔßÔ ßÔßÔßÔ ßÔ$ßÔ-ßÔ1ßÔBßÔFßÔMß]RßÔVßÔ]ß]bßÔfßÔmß]rßÔvßÔ}ß]‚ßԆßԍß]šßԞßÔĨßÔŠßÔ˛ßÔļßÔŋßÔÃßÔĖßÔĐßÔŲßÔŨßÔæßÔęßÔņßÔõßÔūßÔāÔ āÔāÔāÔāÔ+āÔ/āÔ8āÔ<āÔCāÔGāÔXāÔ\āÔkāÔoāÔvā]{āÔāԆā]‹āԏāԖā]›āԟāÔĻā]ŗāÔˇāÔžāÔÂāÔËāÔĪāÔØāÔÜāÔãāÔįāÔđāÔôāÔũāÔáÔáÔ áÔáÔáÔ&áÔ*áÔ1á]6áÔ:áÔAá]FáÔJáÔQá]VáÔZáÔaá]náÔráÔyáÔ}áԆáԊáԓáԗáԞáÔĸáÔĢáÔ¯áÔ¸áÔŧáÔÅáÔÉáÔĐáÔÔáÔŨáÔááÔđáÔôáÔûáÔ˙áÔâÔ âÔâÔâÔ âÔ$âÔ-âÔ1âÔ:âÔ>âÔMâÔQâÔXâÔ\âÔdâÔhâÔpâÔtâÔ|âԀâԈâԌâԜâÔ âÔ§âÔĢâÔ´âÔ¸âÔÁâÔÅâÔĖâÔĐâÔŲâÔŨâÔîâÔōâÔûâÔ˙âÔãÔ ãÔãÔãÔ*ãÔ.ãÔ5ãÔ9ãÔEãÔIãÔXãÔ\ãÔcãÔgãÔxãÔ|ãԃãԇãԘãԜãÔŖãÔ§ãÔļãÔēãÔÃãÔĮãÔØãÔÜãÔåãÔéãÔúãÔūãÔäÔ äÔäÔäÔ%äÔ)äÔ:äÔ>äÔGäÔKäÔ\äÔ`äÔgäÔkäÔzäÔ~äԇäԋäԜäÔ äÔŠäÔ­äÔžäÔÂäÔÉäÔÍäÔÜäÔāäÔéäÔíäÔūäÔåÔ åÔåÔ åÔ$åÔ+åÔ/åÔ>åÔBåÔSåÔWåÔ`åÔdåÔkåÔoåԀåԄåԓåԗåÔ¨åÔŦåÔĩåÔšåÔĀåÔÄåÔÕåÔŲåÔčåÔėåÔũåÔæÔ æÔæÔæÔæÔ*æÔ.æÔ=æÔAæÔRæÔVæÔ_æÔcæÔjæÔnæÔæԃæԒæԖæÔ§æÔĢæÔ´æÔ¸æÔŋæÔÃæÔÔæÔØæÔįæÔëæÔüæÔįÔ įÔ įÔįÔįÔ)įÔ-įÔ<įÖ@įÖGįÖKįÖSįÖWįÖ_įÖcįÖkįÖoįÖwįÖ{įփįևį֏į֓į֚į֞įÖŽįÖ˛įÖÅįÖÉįÖŅįÖÕįÖŨįÖáįÖéįÖíįÖõįÖųįÖčÖčÖ čÖčÖ!čÖ%čÖ,č]1čÖ5čÖ<č]AčÖEčÖLč]QčÖUčÖ\č]ičÖmčÖtčÖxčրčքč֌č֐č֙č֝čÖĻčÖĒčÖŗčÖˇčÖĀčÖÄčÖÍčÖŅčÖÚčÖŪčÖįčÖëčÖüčÖéÖé] éÖéÖé]éÖ éÖ'é],éÖ0éÖ7é]<éÖ@éÖGé]TéÖXéÖ_éÖcéÖléÖpéÖyéÖ}éֆé֊é֓é֗éÖ éÖ¤éÖĢéÖ¯éÖ¸éÖŧéÖÅéÖÉéÖĐéÖÔéÖåéÖééÖōéÖöéÖũéÖęÖęÖęÖ%ęÖ)ęÖ0ę]5ęÖ9ęÖ@ę]EęÖIęÖPę]UęÖYęÖ`ę]męÖqęÖxęÖ|ęօę։ę֒ę֖ę֝ęÖĄęÖĒęÖŽęÖˇęÖģęÖÂęÖÆęÖÍęÖŅęÖāęÖäęÖëę]đęÖôęÖûę]ëÖëÖ ë]ëÖëÖë](ëÖ,ëÖ3ëÖ7ëÖ@ëÖDëÖMëÖQëÖXëÖ\ëÖeëÖiëÖrëÖvëÖëփë֊ë֎ë֗ë֛ëÖĒëÖŽëÖĩëÖšëÖÂëÖÆëÖĪëÖĶëÖÚëÖŪëÖįëÖëëÖôëÖøëÖėÖ ėÖėÖėÖėÖ"ėÖ*ėÖ.ėÖ6ėÖ:ėÖBėÖFėÖVėÖZėÖaėÖeėÖnėÖrėÖ{ėÖėֆė֊ė֓ė֗ėÖ¨ėÖŦėÖĩėÖšėÖÂėÖÆėÖĪėÖĶėÖäėÖčėÖīėÖķėÖ˙ėÖíÖíÖíÖíÖ!íÖ2íÖ6íÖ=íÖAíÖRíÖVíÖ]íÖaíÖpíÖtíÖ}íցí֒í֖í֟íÖŖíÖ´íÖ¸íÖŋíÖÃíÖŌíÖÖíÖßíÖãíÖôíÖøíÖîÖîÖîÖîÖ!îÖ%îÖ4îÖ8îÖAîÖEîÖVîÖZîÖcîÖgîÖxîÖ|îփîևî֖î֚îÖŖîÖ§îÖ¸îÖŧîÖÅîÖÉîÖÚîÖŪîÖåîÖéîÖøîÖüîÖ īÖīÖīÖīÖ%īÖ)īÖ:īÖ>īÖMīÖQīÖbīÖfīÖoīÖsīÖzīÖ~ī֏ī֓īÖĸīÖĻīÖˇīÖģīÖÄīÖČīÖĪīÖĶīÖäīÖčīÖ÷īÖûīÖ đÖđÖđÖđÖ$đÖ(đÖ9đÖ=đÖLđÖPđÖađÖeđÖnđÖrđÖyđÖ}đ֎đ֒đÖĄđÖĨđÖļđÖēđÖÃđÖĮđÖÎđÖŌđÖãđÖįđÖöđØúđØņØņØ ņØņØ!ņØ%ņØ5ņØ9ņØ@ņØDņØLņØPņØ`ņØdņØkņØoņØvņØzņ،ņؐņؗņ؛ņØ­ņØąņØÁņØÅņØĖņ]ŅņØÕņØÜņ]áņØåņØėņ]ņņØõņØüņ]ōØōØ ō]ōØōØ$ōØ(ōØ0ōØ4ōØ<ōØ@ōØIōØMōØVōØZōØcōØgōØpōØtōØ}ō؁ō؊ō؎ōؗō؛ōØŦōذōØˇō]ŧōØĀōØĮō]ĖōØĐōØ×ō]ÜōØāōØįō]ėōØđōØ÷ō]üōØķØķ]ķØķØķØ#ķØ,ķØ0ķØ9ķØ=ķØFķØJķØSķØWķØ^ķØbķØkķØoķØxķØ|ķ؅ķ؉ķؒķؖķ؟ķØŖķØĒķØŽķØŋķØÃķØÔķØØķØáķØåķØėķØđķØôØôØôØôØô]$ôØ(ôØ/ô]4ôØ8ôØ?ô]DôØHôØOô]TôØXôØ_ô]lôØpôØwôØ{ô؄ô؈ôؑôؕô؜ôØ ôØŠôØ­ôØļôØēôØÁôØÅôØĖôØĐôØßôØãôØęô]īôØķôØúô]˙ôØõØ õ]õØõØõ]õØ#õØ*õ]7õØ;õØBõØFõØOõØSõØ\õØ`õØgõØkõØtõØxõ؁õ؅õ،õؐõؙõ؝õØĻõØĒõØšõØŊõØÄõØČõØŅõØÕõØŪõØâõØéõØíõØöõØúõØ öØöØöØ"öØ)öØ-öØ6öØ:öØCöØGöØNöØRöØ[öØ_öØpöØtöØ}ö؁ö؊ö؎öؗö؛öØŦöذöØˇöØģöØĮöØËöØÚöØŪöØåöØéöØúöØūöØ÷Ø ÷Ø÷Ø÷Ø%÷Ø)÷Ø8÷Ø<÷ØE÷ØI÷ØZ÷Ø^÷Øg÷Øk÷Ø|÷؀÷؇÷؋÷ؚ÷؞÷ا÷ØĢ÷Øŧ÷ØĀ÷ØÉ÷ØÍ÷ØŪ÷Øâ÷Øé÷Øí÷Øü÷ØøØ øØ øØøØ"øØ+øØ/øØ@øØDøØKøØOøØ^øØbøØkøØoø؀ø؄ø؍øؑøØĸøØĻøØ­øØąøØĀøØÄøØÕøØŲøØâøØæøØíøØņøØųØųØųØųØ*ųØ.ųØ7ųØ;ųØBųØFųØWųØ[ųØjųØnųØų؃ų،ųؐųؗų؛ųØŦųذųØŋųØÃųØÔųØØųØáųØåųØėųØđųØúØúØúØúØ)úØ-úØ6úØ:úØAúØEúØVúØZúØiúØmúØ~ú؂ú؋ú؏úؖúؚúØĢúدúØžúÚÂúÚĘúÚÎúÚÖúÚÚúÚâúÚæúÚöúÚúúÚûÚûÚûÚûÚ%ûÚ)ûÚ1ûÚ5ûÚ=ûÚAûÚIûÚMûÚ]ûÚaûÚhûÚlûÚsûÚwûچûڊûڑûڕûڞûÚĸûÚĢûÚ¯ûÚļûÚēûÚÁûÚÅûÚÔûÚØûÚßûÚãûÚęûÚîûÚũûÚüÚüÚ üÚüÚüÚ"üÚ&üÚ-üÚ1üÚ8üÚ<üÚKüÚOüÚXüÚ\üÚeüÚiüÚrüÚvüÚüڃüڔüژüڟüÚŖüÚ˛üÚļüÚĮüÚËüÚÔüÚØüÚßüÚãüÚôüÚøüÚũÚ ũÚũÚũÚ!ũÚ%ũÚ.ũÚ2ũÚ;ũÚ?ũÚPũÚTũÚ[ũÚ_ũÚfũÚjũÚqũÚuũڄũڈũڑũڕũڞũÚĸũÚĢũÚ¯ũÚ¸ũÚŧũÚÍũÚŅũÚÚũÚŪũÚįũÚëũÚôũÚøũÚūÚūÚūÚūÚ!ūÚ%ūÚ,ūÚ0ūÚ7ūÚ;ūÚJūÚNūÚ^ūÚbūÚkūÚoūÚxūÚ|ūڍūڑūښūڞūÚ§ūÚĢūÚŧūÚĀūÚĮūÚËūÚÚūÚŪūÚåūÚéūÚņūÚõūÚ˙Ú ˙Ú˙Ú˙Ú,˙Ú0˙Ú9˙Ú=˙ÚN˙ÚR˙Úb˙Úf˙Úw˙Ú{˙ڋ˙܏˙ܖ˙ܚ˙Üĸ˙ÜĻ˙Ü­˙Üą˙ÜÁ˙ÜÅ˙ÜÎ˙ÜŌ˙ÜÛ˙Üß˙Üđ˙Üô˙Üû˙Ü˙˙ÜÜ ÜÜÜ&Ü*Ü1Ü5Ü<Ü@ÜTÜXÜgÜkÜ{Ü܆܊ܞÜĸܲÜļÜÅÜÉÜŲÜŨÜæÜęÜķÜ÷ÜÜÜÜÜ Ü$Ü+Ü/Ü6Ü:ÜIÜMÜVÜZÜcÜgÜpÜt܅܉ܒܖܟÜŖÜŦܰÜÁÜÅÜĖÜĐÜ×ÜÛÜęÜîÜūÜÜ ÜÜÜÜ-Ü1Ü:Ü>ÜGÜKÜ\Ü`ÜgÜkÜzÜ~܅܉ܑܕÜĨÜŠÜšÜŊÜÎÜŌÜÛÜßÜæÜęÜûÜ˙ÜÜÜÜÜ0Ü4ÜDŪHŪPŪTŪdŪhŪqŪuŪ~Ū‚Ū“Ū—ŪŖŪ§ŪļŪēŪÃŪĮŪĐŪÔŪŨŪáŪōŪöŪũŪŪŪ ŪŪŪ&Ū*Ū3Ū7Ū@ŪDŪMŪQŪbŪfŪoŪsŪ|Ū€Ū‰ŪŪžŪĸŪŠŪ­Ū´Ū¸ŪĮŪËŪÛŪßŪčŪėŪõŪųŪ ŪŪŪŪ$Ū(Ū9Ū=ŪDŪHŪWŪ[ŪbŪfŪnŪrŪ‚Ū†Ū–ۚŪĢŪ¯Ū¸ŪŧŪÃŪĮŪØŪÜŪëŪīŪøŪüŪ ŪŪ!ā%ā,ā0ā8ā<āCāGāWā[ādāhāqāuā†āŠā‘ā•āāĄā¨āŦāŧāĀāĮāËāŌāÖāęāîāũāāāāā ā4ā8āHāLā[ā_āoāsā|ā€ā‰āā–āšāĢā¯āļāēāÁāÅāĖāĐāßāãāėāđāųāũāā āāā(ā,ā5ā9āBāFāWā[ābāfāmāqā€ā„ā”ā˜āĄāĨāŽā˛āÃāĮāĐāÔāŨāáāōāöāũā ā ā ā ā ā' ā+ ā; ā? āO āS ād āh āq āu ā| †ā‘ ā• ⤠⍠āą āĩ ⯠āĘ āÚ âŪ âæ âę âú âū â â â â â) â- â6 â: âC âG âP âT âe âi âp ât â{ â ↠⊠♠❠âĻ âĒ âŗ ⡠âĀ âÄ âÕ âŲ ââ âæ âī âķ âü â â â â â â' â+ â: â> âN âR â[ â_ âh âl â} ⁠⊠⎠◠⛠âŦ â° ⡠âģ âĘ âÎ âÕ âŲ âá âå âõ âų â â â â" â+ â/ â6 â: âK âO â^ âb âk âo †℠┠ä˜ äŸ äŖ äĢ ä¯ äļ äē äĘ äÎ ä× äÛ ää äč äų äũ ä ä ä ä ä ä ä/ ä3 ä: ä> äE äI ä] äa äp ät ä„ äˆ ä ä“ ä§ äĢ äģ äŋ äÎ äŌ äâ äæ äī äķ äü ää ä ää"ä)ä-ä4ä8ä?äCäRäVä_äcäläpäyä}äŽä’ä›äŸä¨äŦäĩäšäĘäÎäÕäŲäāäääķä÷ää äää!ä%ä6ä:äCäGäPäTäeäiäpätäƒä‡äŽä’äšäžäŽä˛äÂäÆä×äÛäääčäīäķäääää$ä(ä9ä=äMQX\cgnry}Œ—›ĸĻŽ˛šŊÄČĐÔÜāčėû˙] ]#'04EIPT]arvƒ”˜¤¨ˇģÂ]ĮËŌ]ßãėđ ]])-6:KOX\mqx]}ˆ]•™ĸώģÃĮÖÚáåôø˙] !%.2AETXimuy‰–šĄĨޞÃĮĪĶãįđô %):>GKTXaevz‚†–šŖ§°´ŊÁŌÖßãėđųũ)-9=LPX\lpy}„ˆ‘•ĻǞļÆĘĶ×čėõų)-=AQUei}‘•žĸŠ­žÂŌÖįëō]˙ (,3]@DKOX\kox|‹–šĢ¯ŋÃÔØčėũ *.?CSWhluy€„•™¨æŦæ´æ¸æĀæÄæÔæØæáæåæîæōæææææ&æ*æ3æ7æFæJæ[æ_æf]sæwæƒæ‡æ–æšæŖæ§æ°æ´æŊæÁæŌæÖæŨæáæčæėæķæ÷ææ æææ æ$æ-æ1æBæFæOæSæ\æ`æiæmæ~æ‚æ‰ææ”æ˜æ§æĢæģæŋæČæĖæÕæŲæęæîæ÷æûæææææ$æ(æ7æ;æBæFæNæRæbæfævæzæ‹ææ˜æœæŖæ§æ¸æŧæËæĪæØæÜæíæņæ %);?FJRV^bjnvzŠŽ–šĒŽĩšĀÄÕŲāäķ÷ %)9=FJQU^bko€„Œ ¤­ąēžĪĶÚ]ßãę]īķú] &]+/6];?F]SW^bkox|…‰’–ĨОļÅÉĐÔŨáęî÷û $(/3<@IMTXaevz‚†Ž’ĸĻ­]˛ļŊ]ÂÆÍ]ÚŪîōų]ū  ]   ]& * 1 5 > B K O V Z i m v z ‰  ” ˜ Ą Ĩ Ž ˛ Á Å Í Ņ á å ö ú  !!!!$!(!9!=!F!J!S!W!h!l!t!x!ˆ!Œ!“!—!Ļ!Ē!ŗ!ˇ!Č!Ė!Ķ!×!æ!ę!ú!ū!" ""","0"9"="N"R"c"g"p"t"{"""”"œ" "¨"Ŧ"ĩ"š"É"Í"Õ"Ų"á"å"î"ō"û"˙"####'#+#4#8#H#L#T#X#`#d#m#q#z#~#Ž#’#™##¯#ŗ#ē#ž#Æ#Ę#Ō#Ö#Ū#â#ę#î#ö#ú#$$$$"$&$6$:$B$F$N$R$Z$^$n$r$y$}$…$‰$$”$œ$ $¨$Ŧ$ŧ$Ā$Č$Ė$Ü$ā$é$í$ô$ø$%%%%#%'%/%3%C%G%P%T%]%a%r%v%}%]‚%†%%]’%–%%]Ē%Ž%ž%Â%É%]Î%Ō%Ų%]Ū%â%é%]ö%ú%&&&&&&(&,&;&?&H&L&[&_&f&j&s&w&€&„&•&™& &¤&­&ą&¸&ŧ&Å&É&Ō&Ö&Ũ&á&ę&î&˙&' '''#'4'8'H'L'S']X'\'c']p't'„'ˆ'']”'˜'Ÿ']Ŧ'°'ˇ'ģ'Ä'Č'Ņ'Õ'ä'č'ņ'õ'((((( ()(-(<(@(H(L(\(`(q(u(…(‰(’(–(Ÿ(Ŗ(´(¸(Á(Å(Î(Ō(ã(į(ī(ķ())))!)%).)2)C)G)N)R)a)e)u)y)€)„)“)—)§)Ģ)´)¸)É)Í)Ū)â)ë)ī)ö)ú) ****,*0*7*;*C*G*O*S*[*_*g*k*s*w**ƒ*“*—*Ÿ*Ŗ*ŗ*ˇ*ŋ*Ã*Ë*Ī*×*Û*ë*ī*ö*ú*++++++.+2+:+>+N+R+[+_+f+j+s+w+€+„+•+™+Ą+Ĩ+ĩ+š+Â+Æ+Ī+Ķ+ä+č+đ+ô+,,,,,,-,1,9,=,M,Q,X,\,e,i,r,v,,ƒ,Œ,,—,›,Ŧ,°,ˇ,ģ,Ä,Č,Ņ,Õ,Ū,â,ë,ī,-- ----#-'-0-4-;-?-H-L-U-Y-`-d-m-q-z-~-‡-‹-œ- -¨-Ŧ-´-¸-Ā-Ä-Ô-Ø-é-í-ũ-..] ...].!.(.]-.1.8.]E.I.P.T.[._.n.r.y.]~.‚.‰.]Ž.’.™.]ž.ĸ.Š.]ļ.ē.Á.Å.Î.Ō.Û.ß.č.ė.ķ.÷.////"/&/5/9/@/D/M/Q/Z/^/g/k/|/€/‡/‹/”/˜/Ÿ/Ŗ/Ŧ/°/š/Ŋ/Ä/Č/Ņ/Õ/æ/ę/ō/ö/ū/000'0+0;0?0F0J0Q0U0d0h0o0s0|0€0‰00”0˜0Ÿ0Ŗ0´0¸0ŋ0Ã0Ė0Đ0Ų0Ũ0ė0đ0ø0ü0 1111&1*1;1?1H1L1U1Y1j1n1v1z1Š1Ž1•1™1¨1Ŧ1ĩ1š1Ę1Î1Õ1Ų1č1ė1ü122 222.222;2?2P2T2e2i2r2v2}22’2–22Ą2ŗ2ˇ2ž2Â2Ę2Î2Ö2Ú2á2å2í2ņ2ų2ũ2 3333-31383<3C3G3X3\3c3g3v3z3‚3†3–3š3Ŗ3§3Ž3˛3ģ3ŋ3Č3Ė3Ũ3á3é3í3ũ34 4444,40474;4B4F4M4Q4`4d4m4q4z4~4‡4‹4œ4 4Š4­4´4¸4Á4Å4Ė4Đ4Ų4Ũ4ä4č4ņ4õ4ū45 5 555#5'50545=5A5J5N5_5c5k5o5w5{5‹55–5]›5Ÿ5Ļ5]Ģ5¯5ļ5]Ã5Į5Î5Ō5á5å5ė5]ņ5õ5ü5]66 6]66$6(61656>6B6K6O6X6\6k6o6x6|6‹66–6š6Ŗ6§6°6´6Ŋ6Á6Ō6Ö6Ũ6á6ę6î6õ6ų677 7777'7+72767?7C7L7P7Y7]7n7r7z7~7†7Š7š7ž7¯7ŗ7Ã7Į7Î7]Ķ7×7Ū7]ã7į7î7]û7˙78 888$8(8/8]4888?8]D8H8O8]\8`8g8k8t8x88…8Ž8’8›8Ÿ8Ļ8Ē8ģ8ŋ8Č8Ė8Û8ß8æ8ę8ķ8÷899 99"9&9-919:9>9E9I9R9V9_9c9j9n9w9{9Œ99˜9œ9¤9¨9¸9ŧ9Í9Ņ9á9å9ė9đ9÷9û9 ::::":&:/:3:B:F:N:R:b:f:w:{:‹::˜:œ:Ĩ:Š:ē:ž:Į:Ë:Ô:Ø:é:í:õ:ų: ; ;;;';+;4;8;I;M;T;X;g;k;{;;†;Š;™;;­;ą;ē;ž;Ī;Ķ;ä;č;ņ;õ;ü;<<<<!<)<-<6<:<J<N<V<Z<b<f<o<s<|<€<<”<œ< <¨<Ŧ<ĩ<š<É<Í<Õ<Ų<á<å<î<ō<û<˙<=ė=ė=ė=ė&=ė*=ė1=ė5=ėE=ėI=ėR=ėV=ė_=ėc=ėt=ėx=ė=ėƒ=ė‹=ė=ė–=ėš=ėĒ=ėŽ=ėĩ=ėš=ėĀ=ėÄ=ėØ=ėÜ=ėë=ėī=ė˙=ė>ė >ė>ė">ė&>ė6>ė:>ėI>ėM>ė]>ėa>ėj>ėn>ėw>ė{>ė„>ėˆ>ė™>ė>ė¤>ė¨>ė¯>ėŗ>ėē>ėž>ėÍ>ėŅ>ėÚ>ėŪ>ėį>ėë>ėô>ėø>ė ?ė ?ė?ė?ė#?ė'?ė0?ė4?ėE?ėI?ėP?ėT?ė[?ė_?ėn?ėr?ė‚?ė†?ė?ė“?ėœ?ė ?ėą?ėĩ?ėž?ėÂ?ėË?ėĪ?ėā?ėä?ėë?ėī?ėū?ė@ė @ė @ė@ė@ė)@ė-@ė=@ėA@ėR@ėV@ė_@ėc@ėj@ėn@ė@ėƒ@ė’@ė–@ėŸ@ėŖ@ė´@ė¸@ėČ@îĖ@îĶ@î×@îß@îã@îę@îî@îū@îAî AîAîAîAî-Aî1Aî8AîRBRSRWR`RdRsRwR~R‚R‹RR˜RœRĨRŠRēRžRÅRÉRŌRÖRŨRáRęRîRõRųRSS SSSS%S)S2S6S=SASJSNSUSYSbSfSoSsSzS~S‡S‹S”S˜SĄSĨSŽS˛SģSŋSČSĖSŨSáSéSíSũSTTT&T*T1T]6T:TAT]NTRTYT]TdThTwT{T‚T]‡T‹T’T]ŸTŖTĒTŽTˇTģTÄTČTŅTÕTÜTāTņTõTūTUUUU U)U-U6U:UCUGUXU\UcUgUpUtU{UUˆUŒU“U—U U¤UĢU¯U¸UŧUÃUĮUĐUÔUÛUßUčUėUõUųUVV VVVV'V+V4V8VAVEVVVZVbVfVvVzV‹VVŸVŖVĒV͝VŗVēVĶĮVËVŌVÖVåVéVđVôVũVW WWWW"W&W7W;WDWHWQWUW^WbWsWwW€W„W“W—WžWĸWĢW¯W¸WŧWÅWÉWÚWŪWåWéWōWöWũWX XXXX"X&X-X1X:X>XEXIXRXVX_XcXjXnXwX{X„XˆX‘X•XžXĸXŗXˇXŋXÃXĶX×XčXėXüXYY] YYY]$Y(Y/Y3Y:Y>YMYQYXY]]YaYhY]uYyY€Y„YY‘YšYžY§YĢY˛YļYĮYËYÔYØYįYëYōYöY˙YZ ZZZZ.Z2Z9Z=ZFZJZQZUZ^ZbZiZmZvZzZZ…ZŽZ’Z›ZŸZĻZĒZŗZˇZĀZÄZÍZŅZâZæZîZōZ[[[[+[/[6[Ķ;[?[F[ĶS[W[^[b[q[u[|[€[‰[[–[š[Ŗ[§[Ž[˛[Ã[Į[Đ[Ô[Ũ[á[ę[î[˙[\ \\\#\*\.\7\;\D\H\Q\U\f\j\q\u\~\‚\‰\\–\š\Ą\Ĩ\Ž\˛\ģ\ŋ\Æ\Ę\Ķ\×\ā\ä\õ\ų\]]]]*].]>]B]I]]N]R]Y]]f]j]q]u]|]€]]“]š]]Ÿ]Ŗ]Ē]]ˇ]ģ]Â]Æ]Ī]Ķ]Ü]ā]é]í]ô]ø] ^ ^^^)^-^4^8^A^E^N^R^[^_^p^t^{^^ˆ^Œ^“^—^ ^¤^­^ą^¸^ŧ^Å^É^Ú^Ū^æ^ę^ú^ū^__#_'_._Ķ3_7_>_ĶK_O_V_Z_i_m_t_x__…_Ž_’_™__Ŧ_°_š_Ŋ_Æ_Ę_Ķ_×_č_ė_õ_ų_` ``` `$`-`1`@`D`T`X`a`e`n`r`ƒ`‡``”``Ą`˛`ļ`Æ`Ę`Ņ`Õ`ä`č`ņ`õ`ū`aaaa"a1a5aFaJaSaWa^abasađwađ~ađ‚ađŠađŽađ•ađ™ađŠađ­ađļađēađÃađĮađØađÜađãađįađīađķađúađūađbđbđbđbđ$bđ(bđcđBcđKcđOcđXcđ\cđmcđqcđzcđ~cđ‡cđ‹cđ”cđ˜cđŠcđ­cđ´cđ¸cđŋcđÃcđŌcđÖcđæcđęcđķcđ÷cđdđdđdđdđ"dđ&dđ/dđ3dđDdđHdđOdđSdđbdđfdđmdđqdđydđ}dđdđ‘dđĄdđĨdđļdđēdđÃdđĮdđÎdđŌdđãdđįdđödđúdđeđeđeđeđ,e0e@eDeSeWegeke|e€eˆeŒeœe eŠe­e´e¸eÁeÅeÖeÚeâeæeöeúeffff#f](f,f3f]@fDfKfOfVfZfifmftf]yf}f„f]‘f•fœf f¯fŗfŧfĀfĪfĶfâfæföfúf gg g$g4g8g?gCgRgVg_gcgtgxggƒg’g–g§gĢgŧgĀgĮgËgÚgŪgīgķgüghh hh h/h3hDhHhQhUh\h`hqhuh„hˆh‘h•hœh hąhĩhžhÂhÉhÍhŪhâhķh÷hii ii i$i3i7iGiKiZi^iniriƒi‡ii”i›iŸi¨iŦiĩišiĘiÎi×iÛiäičiųiũij] j jj]!j%j,j0j7j;jJjNjUj]Zj^jej]rjvj}jjŠjŽj—j›j¤j¨j¯jŗjÄjČjŅjÕjäjčjījķjüjk k kkk+k/k6k:kCkGkNkRk[k_khklkskwk€k„k•k™kĄkĨkĩkškĘkÎkŪkâkék]îkōkųk]l llll l/l3l:l]?lClJl]Wl[lblflolsl|l€l‡l‹lšlžl§lĢlēlžlÅlÉlŌlÖlßlãlōlölm mmm m$m5m9mBmFmOmSmdmhmxm|mƒm‡m–mšmŖm§m°m´mÅmÉmĐmÔmãmįmømümn nnn%n)n9n=nLnPn`ndnunyn‚n†nn‘nšnžn§nĢnŧnĀnÉnÍnÖnÚnënīnön]ûn˙no]ooo"o)o-o€ōN€ōR€ōY€ō]€ōg€ōk€ōu€ōy€ōƒ€ō‡€ō™€ō€ōĨ€ōŠ€ōą€ōĩ€ōŊ€ōÁ€ōŅ€ōՀō߀ōã€ōę€ōî€ōø€ōü€ōō ōōō"ō&ō8ō<ōDōHōPōTō\ō`ōpōtō~ō‚ōŒōōšōžō¨ōŦōžōōɁ]΁ōԁō؁]ہōâōé]îōōōų]‚ō ‚ō‚ō‚ō&‚]+‚ō/‚ō6‚];‚ō?‚ōF‚]K‚ōO‚ōV‚]c‚ōg‚ōn‚ōr‚ō|‚ō€‚ōŠ‚ōŽ‚ō•‚ō™‚ōŖ‚ō§‚ōŽ‚ō˛‚ōš‚ōŊ‚ōĖ‚ōЂōŲ‚ōŨ‚ōė‚ōđ‚ō÷‚ōû‚ōƒō ƒōƒōƒōƒō"ƒō,ƒō0ƒō?ƒōCƒōKƒōOƒō_ƒōcƒōuƒōyƒō‰ƒōƒō—ƒō›ƒōĨƒōЃōģƒōŋƒōɃō̓ō׃ōۃōíƒōņƒōųƒōũƒō „ō„ō„ō„ō+„ō/„ō9„ō=„ōO„ōS„ōZ„ō^„ōm„ōq„ō{„ō„ō‰„ō„ōŸ„ōŖ„ō­„ōą„ōģ„ōŋ„ōŅ„ōՄō܄ōā„ōī„ōķ„ōũ„ō…ō …ō…ō!…ō%…ō/…ō3…ō=…ōA…ōS…ōW…ō^…ōb…ōq…ōu…ō…ōƒ…ō…ō‘…ōŖ…ō§…ōą…ōĩ…ōŋ…ōÅōՅōŲ…ōã…ōį…ōņ…ōõ…ō˙…ō†ō †ō†ō#†ō'†ō1†ō5†ō?†ōC†ōU†ōY†ō`†ōd†ōs†ōw†ō†ō…†ō†ō“†ō†ōĄ†ōŗ†ōˇ†ōÁ†ōņōΆō͆ōå†ōé†ōķ†ō÷†ō‡ō‡ō‡ō‡ō%‡ō)‡ō3‡ō7‡ōI‡ōM‡ōW‡ō[‡ōb‡ōf‡ōp‡ōt‡ō~‡ō‚‡ō‰‡ō‡ō—‡ō›‡ōĨ‡ōЇōģ‡ōŋ‡ōɇō͇ōׇōۇōí‡ōņ‡ōû‡ō˙‡ō ˆō ˆōˆō#ˆō-ˆō1ˆō;ˆō?ˆōQˆōUˆō_ˆōcˆōmˆōqˆōƒˆō‡ˆōŽˆō’ˆōĄˆōĨˆō¯ˆōŗˆōňōɈō͈ō׈ōéˆōíˆō÷ˆōûˆō ‰ō‰ō‰ō‰ō1‰ō5‰ō?‰ōC‰ōJ‰ōN‰ōX‰ō\‰ōn‰ōr‰ō|‰ō€‰ō‡‰ō‹‰ō‰ōĄ‰ō̉ō¯‰ōļ‰ōē‰ōˉōЉōâ‰ōæ‰ōđ‰ōô‰ōû‰ō˙‰ōŠōŠō$Šō(Šō:Šō>ŠōHŠōLŠōSŠōWŠōiŠōmŠō|Šô€Šô‡ŠĶŒŠôŠô—ŠĶ¤Šô¨Šô¯ŠĶ´Šô¸ŠôŋŠĶˊôЊô׊ĶäŠôčŠôīŠĶôŠôøŠô˙ŠĶ‹ô‹ô‹Ķ‹ô ‹ô'‹Ķ4‹ô8‹ô?‹ĶD‹ôH‹ôO‹ĶT‹ôX‹ô_‹Ķl‹ôp‹ôw‹Ķ|‹ô€‹ô‡‹ĶŒ‹ô‹ô—‹Ķ¤‹ô¨‹ô¯‹Ķ´‹ô¸‹ôŋ‹ĶċôȋôĪ‹Ķԋô؋ôߋĶä‹ôč‹ôī‹Ķü‹ôŒôŒĶ ŒôŒôŒĶŒô Œô'ŒĶ4Œô8ŒôHŒôLŒôTŒôXŒôgŒôkŒô{ŒôŒô‹ŒôŒô Œô¤ŒôŦŒô°ŒôŒôČôΌôԌô،ôŨŒôįŒôëŒôōŒôöŒôūŒôô ôôôô&ô*ô<ô@ôJôNôUôYôcôgônôrô|ô€ôŠôŽô•ô™ôŖô§ôŽô˛ôŧôĀôʍô΍ô؍ô܍ôæôęôôôøôŽôŽôŽôŽôŽô"Žô4Žô8Žô@ŽôDŽôLŽôPŽôXŽô\ŽôlŽôpŽôzŽô~Žô…Žô‰Žô“Žô—ŽôžŽôĸŽôĒŽôŽŽôļŽôēŽôĎôȎôŌŽô֎ôčŽôėŽôķŽô÷Žôôôôôô!ô+ô/ô6ô:ôDôHôWô[ômôqôyô}ô…ô‰ô‘ô•ôôĄôąôĩôŋôÏôʏôΏô؏ô܏ôãôįôņôõô˙ôô ôôôô)ô-ô7ô;ôBôFôPôTô[ô_ôiômôwô{ô‚ô†ô•ô™ôŖô§ô°ô´ôžôôːôΐôؐôŨôįôëôõôųô‘ô‘ô‘ô‘ô‘ô#‘ô,‘ô0‘ô:‘ô>‘ôG‘ôK‘ôU‘ôY‘ôc‘ôg‘ôp‘ôt‘ô…‘ô‰‘ô’‘ô–‘ô§‘ôĢ‘ôĩ‘ôš‘ôĀ‘ôđô֑ôڑôä‘ôč‘ôō‘ôö‘ô’ô’ô’ô’ô!’ô%’ô/’ô3’ô=’ôA’ôK’ôO’ôY’ô]’ôo’ôs’ô„’ôˆ’ôœ’ô ’ô°’ô´’ôĪ’ôĶ’ôےôߒôį’ôë’ôķ’ô÷’ô“ô “ô“ô“ô2“ô6“ôE“ôI“ôc“ôg“ôp“ôt“ô…“ô‰“ô“ô”“ôž“ôĸ“ôŦ“ô°“ôē“ôž“ôȓôĖ“ôŪ“ôâ“ôę“ôî“ôö“ôú“ô”ô”ô”ô”ô"”ô&”ô0”ô4”ô;”ô?”ôI”ôM”ôT”ôX”ôb”ôf”ôp”ôt”ô~”ô‚”ôŒ”ô”ôš”ôž”ô°”ô´”ôž”ô”ôɔô͔ôהô۔ôâ”ôæ”ôđ”ôô”ôū”ô•ô •ô•ô•ô•ô(•ô,•ô>•ôB•ôJ•ôN•ô^•ôb•ôl•ôp•ôw•ô{•ô…•ô‰•ô•ô”•ôž•ôĸ•ôŦ•ô°•ôē•ôž•ôȕôĖ•ô֕ôڕôė•ôđ•ôú•ôū•ô–ô –ô–ô–ô!–ô%–ô/–ô3–ô=–ôA–ôK–ôO–ôY–ô]–ôd–ôh–ôw–ô{–ô–ô‘–ô™–ô–ôĨ–ôŠ–ôą–ôĩ–ôŊ–ôÁ–ôɖô͖ôŨ–ôá–ôč–ôė–ôö–ôú–ô—ô—ô—ô—ô —ô$—ô.—ô2—ô<—ô@—ôG—ôK—ôR—ôV—ôh—ôl—ôu—ôy—ôƒ—ô‡—ô‘—ô•—ôŸ—ôŖ—ô­—ôą—ôģ—ôŋ—ôɗô͗ô֗ôڗôã—ôį—ôų—ôũ—ô˜ô˜ô˜ô ˜ô'˜ô+˜ô=˜ôA˜ôK˜ôO˜ôY˜ô]˜ôg˜ôk˜ôu˜ôy˜ô‹˜ô˜ô–˜ôš˜ô¤˜ô¨˜ô˛˜ôļ˜ô˜ôĘôΘôԘôܘôā˜ôō˜ôö˜ô™ô ™ô%™ô)™ô1™ô5™ô=™ôA™ôI™ôM™ôU™ôY™ôi™ôm™ô|™ô€™ôš™ôž™ô§™ôĢ™ô´™ô¸™ôÁ™ôřôΙôŌ™ôۙôߙôđ™ôô™ôû™ô˙™ô šô šôšôšô%šô)šô3šô7šôAšôEšôWšô[šôcšôgšôošôsšô{šôšôšô“šôšôĄšô¨šôŦšôļšôēšôĚôȚôԚô֚ôāšôäšôöšôúšô›ô›ô›ô›ô›ô›ô.›ô2›ô<›ô@›ôJ›ôN›ôX›ô\›ôf›ôj›ô|›ô€›ô‡›]Œ›ô›ô—›]œ›ô ›ô§›]Ŧ›ô°›ôˇ›]ěôțôŲ›ôŨ›ôä›]é›ôí›ôô›]ų›ôũ›ôœ] œô œôœ]!œô%œô,œô0œô:œô>œôHœôLœôSœôWœôaœôeœôlœôpœôwœô{œôŠœôŽœô—œô›œôǜôޜôĩœôšœôÜôĮœôҜô՜ôܜôāœôęœôîœôũœôô ô ôô!ô3ô7ôGôKôUôYôcôgôyô}ô‡ô‹ô•ô™ôĢô¯ôˇôģô˝ôĪô֝ôڝôéôíô÷ôûô žôžôžôžô+žô/žô9žô=žôGžôKžô]žôažôkžôožôyžô}žôžô“žôšžôžžô­žôąžôģžôŋžôɞô͞ôߞôãžôížôņžôûžô˙žôŸôŸôŸô Ÿô/Ÿô3Ÿô=ŸôAŸôKŸôOŸôaŸôeŸôoŸôsŸô}ŸôŸô“Ÿô—ŸôĄŸôĨŸô¯ŸôŗŸôŊŸôÁŸô˟ôΟôáŸôåŸôīŸôķŸôũŸô ô ô ô ô" ô1 ô5 ô? ôC ôM ôQ ô[ ô_ ôq ôu ô ôƒ ô ô‘ ôŖ ô§ ôą ôĩ ôŋ ôàôÕ ôŲ ôã ôį ôņ ôõ ôĄô ĄôĄôĄô Ąô$Ąô.Ąô2Ąô<Ąô@ĄôGĄôKĄôUĄôYĄôcĄôgĄôyĄô}Ąô‡Ąô‹Ąô•Ąô™ĄôĢĄô¯ĄôšĄôŊĄôĮĄôËĄôŨĄôáĄôëĄôīĄôųĄôũĄôĸôĸôĸô!ĸô+ĸô/ĸôAĸôEĸôLĸôPĸô_ĸôcĸômĸôqĸôƒĸô‡ĸô‘ĸô•ĸô§ĸôĢĸôĩĸôšĸôËĸôĪĸôŲĸôŨĸôīĸôķĸôũĸôŖôŖô ŖôŖôŖô,Ŗô0Ŗô:Ŗô>ŖôEŖôIŖô[Ŗô_ŖôiŖômŖôtŖôxŖôŠŖôŽŖô Ŗô¤ŖôŽŖô˛ŖôšŖôŊŖôĪŖôĶŖôâŖôæŖôøŖôüŖô¤ô ¤ô¤ô¤ô'¤ô+¤ô:¤ö>¤öM¤öQ¤öX¤ö\¤öc¤ög¤öv¤öz¤ö¤]ޤø’¤øĄ¤øĨ¤øŦ¤ø°¤øˇ¤øģ¤øĘ¤øÎ¤øÕ¤]Ú¤øŪ¤øå¤]ō¤øö¤øũ¤] ĨøĨøĨø#Ĩø2Ĩø6ĨøEĨøIĨøPĨøTĨø]ĨøaĨøpĨøtĨø{ĨøĨøˆĨøŒĨø“Ĩø—Ĩø¨ĨøŦĨøĩĨøšĨøÂĨøÆĨøĪĨøĶĨøäĨøčĨøņĨøõĨøūĨøĻø Ļø ĻøĻø"Ļø)Ļø-Ļø<Ļø@ĻøQĻøUĻømĻøqĻø€Ļø„ĻøœĻø Ļø¯ĻøŗĻøÂĻøÆĻøÕĻøŲĻøāĻøäĻøõĻøųĻø§ø§ø§ø§ø$§ø(§ø/§ø3§øD§øH§øW§ø[§øs§øw§ø§ø“§øĸ§úϧú­§úą§úš§úŊ§úħúȧúاúܧúä§úč§úđ§úô§úü§ú¨ú¨ú¨ú¨ú¨ú'¨ú+¨ú4¨ú8¨úG¨úK¨úX¨ú\¨úk¨úo¨ú~¨ú‚¨ú‘¨ú•¨ú¤¨ú¨¨ú¯¨p´¨ú¸¨úŋ¨pĨúȨú΍pܨúā¨úį¨]ô¨úø¨ú˙¨] ŠúŠúŠúŠú*Šú.Šú5Šp:Šú>ŠúEŠpJŠúNŠúUŠpbŠúfŠúmŠ]zŠú~Šú…Š]’Šú–ŠúŠúĄŠú°Šú´ŠúģŠ]ČŠúĖŠúĶŠú׊úæŠęŠķŠ÷ŠūŠĒ ĒĒĒĒ.Ē2Ē:Ē>ĒEĒIĒYĒ]ĒqĒuĒ}ĒĒˆĒŒĒ•Ē™Ē¨ĒŦĒĀĒÄĒĶĒ×ĒæĒęĒķĒ÷ĒūĒĢ ĢĢĢü"Ģü.Ģü2ĢüFĢüJĢüRĢüVĢüfĢüjĢüqĢüuĢü|Ģü€ĢüĢü”Ģü¤Ģū¨Ģū¯ĢūŗĢūģĢūŋĢūÆĢūĘĢūŌĢūÖĢūŨĢūáĢūéĢūíĢūôĢūøĢūŦū ŦūŦūŦūŦū#Ŧū*Ŧū.Ŧū6Ŧū:ŦūAŦūEŦūMŦūQŦūXŦū\ŦūlŦūpŦūwŦū{Ŧū‚Ŧū†ŦūŦū‘Ŧū˜ŦūœŦūŖŦū§ŦūŽŦū˛ŦūšŦūŊŦūÄŦūČŦūĪŦūĶŦūÚŦūŪŦūåŦūéŦūđŦūôŦūûŦū˙Ŧū­ū ­ū­ū­ū­ū ­ū'­ū+­ū2­ū6­ū=­ūA­ūH­ūL­ūS­ūW­ū^­ūb­ūi­ūm­ūt­ūx­ū­ūƒ­ūŠ­ūŽ­ū•­ū™­ū ­ū¤­ūĢ­ū¯­ūļ­ūē­ūÉ­ūÍ­ūÔ­]á­ūå­ūô­ūø­ū˙­] ŽūŽūŽū#Žū*Ž]7Žū;ŽūJŽūNŽūUŽ]bŽūfŽūuŽūyŽū€Ž]Žū‘Žū Žū¤ŽūĢŽ]¸ŽūŧŽūËŽūĪŽūÖŽ]ãŽūįŽūöŽūúŽū¯]¯ū¯ū!¯ū%¯ū,¯]9¯ū=¯ūL¯ūP¯ūW¯]d¯ūh¯ūw¯ū{¯ū‡¯ū‹¯ū—¯ū›¯ū§¯ū̝ūˇ¯ūģ¯ūĮ¯ū˯ūׯūÛ¯ūī¯ūķ¯ūü¯ū°ū °ū °ū°ū°ū!°ū%°ū.°ū2°ūC°ūG°ūN°ūR°ūY°ū]°ūd°ūh°ūp°ūt°ū„°ūˆ°ū‘°ū•°ūž°ūĸ°ūаū­°ūž°ū°ū˰ūΰūذūܰūã°ūį°ūø°ūü°ūąūąūąūąū"ąū&ąū6ąū:ąūCąūGąūPąūTąū[ąū_ąūpąūtąū{ąūąūŽąū’ąū™ąūąūĨąūŠąūšąūŊąūĖąūĐąūáąūåąūîąūōąūųąūũąū˛ū˛ū!˛ū%˛ū5˛ū9˛ūJ˛ūN˛ū]˛ūa˛ūh˛]m˛ūq˛ūx˛]}˛ū˛ūˆ˛]˛ū‘˛ū˜˛]˛ūĄ˛ū¨˛]ĩ˛ūš˛ūžūIJū˞ūвūײūÛ˛ūâ˛ūæ˛ūí˛ūņ˛ūø˛ūü˛ū ŗūŗūŗ]ŗū ŗū'ŗ],ŗū0ŗū7ŗ]<ŗū@ŗūGŗ]TŗūXŗū_ŗūcŗūjŗūnŗūuŗūyŗū€ŗū„ŗū”ŗū˜ŗūŸŗ]Ŧŗū°ŗūŋŗūÃŗūĘŗ]ĪŗūĶŗūÚŗ]įŗūëŗūōŗūöŗūũŗū´ū´ū´ū&´ū*´ū;´ū?´ūH´ūL´ūS´ūW´ūh´ūl´ū{´ū´ū´ū”´ūĨ´ūŠ´ū¸´ŧ´Ä´Č´×´Û´â´æ´î´ō´ų´ũ´ĩ ĩĩĩĩ ĩ'ĩ+ĩ;ĩ?ĩFĩJĩRĩVĩ]ĩaĩiĩmĩtĩxĩ€ĩ„ĩ‹ĩĩŸĩŖĩĒĩŽĩĩĩšĩĀĩÄĩËĩĪĩÖĩÚĩáĩåĩėĩđĩ÷ĩûĩļļ ļļļļ#ļ'ļ.ļ2ļAļEļLļ]Yļ]ļlļpļwļ]„ļˆļ—ļ›ļĸļ]¯ļŗļÂļÆļÍļ]ÚļŪļíļņļøļ]ˇ ˇˇˇ#ˇ]0ˇ4ˇCˇGˇNˇ][ˇ_ˇnˇrˇyˇ]†ˇЎ™ˇˇ¤ˇ]ąˇĩˇġȡΎ]ܡāˇīˇķˇ¸¸¸¸"¸&¸3¸7¸D¸H¸]¸a¸j¸n¸w¸{¸‚¸†¸¸“¸œ¸ ¸ą¸ĩ¸ŧ¸Į¸˸Ō¸Ö¸Ū¸â¸ō¸ö¸˙¸š šššš,š0š9š=šFšJšQšUšfšjšqšuš„šˆšš”š¤š¨šąšĩšžššÉšÍšŪšâšéšíšüšēē ēēē'ē+ē:ē>ēOēSē\ē`ēgēkē|ē€ēē“ēŖē§ē¸ēŧēËēĪēÖē]Ûēßēæē]ëēīēöē]ûē˙ēģ] ģģģ]#ģ'ģ.ģ2ģ:ģ>ģEģIģPģTģ[ģ_ģfģjģzģ~ģ…ģ]ŠģŽģ•ģ]šģžģĨģ]ĒģŽģĩģ]ÂģÆģÍģŅģØģÜģãģįģîģōģŧŧ ŧ]ŧŧ-ŧ1ŧ8ŧ]=ŧAŧHŧ]UŧYŧ`ŧdŧkŧoŧŧƒŧ”ŧ˜ŧŠŧ­ŧļŧēŧÁŧÅŧÖŧÚŧéŧíŧūŧŊŊŊ&Ŋ*Ŋ2Ŋ6ŊEŊIŊPŊTŊ[Ŋ_ŊfŊjŊyŊ}Ŋ„ŊˆŊŊ”ŊœŊ Ŋ§ŊĢŊ˛ŊļŊÆŊĘŊŅŊÕŊŨŊáŊéŊíŊôŊøŊ˙Ŋžžžž"ž)ž-ž=žAžHž]UžYžhžlžsžwž‡ž‹žœž žąžĩžžžžÉžÍžŪžâžņžõžūžŋ ŋ ŋŋ"ŋ1ŋ5ŋ<ŋ@ŋOŋSŋ\ŋ`ŋiŋmŋtŋxŋ‰ŋŋ”ŋ˜ŋ§ŋĢŋ´ŋ¸ŋÁŋÅŋÖŋÚŋęŋîŋõŋųŋĀ ĀĀĀ*Ā.Ā5Ā9ĀHĀLĀUĀYĀbĀfĀwĀ{Ā‹ĀĀ–ĀšĀŠĀ­ĀļĀēĀËĀĪĀÖĀÚĀéĀíĀöĀúĀ ÁÁÁÁ%Á)Á2Á6ÁGÁKÁRÁVÁbÁfÁuÁyÁ€Á„Á“Á—Á Á¤ÁĩÁšÁĀÁÄÁĶÁ×ÁāÁäÁëÁīÁ ÂÂÂÂ-Â1ÂBÂFÂOÂSÂZÂ^ÂoÂs‚†•™ÂĸÂĻ­¹ÂÂÂÆÂÕÂŲÂęÂîÂ÷ÂûÂÃÃÃà Ã$Ã5Ã9Ã@ÃDÃSÃWÃ`ÃdÃxÃ|ÃšÃžÃ­ÃąÃĪÃĶÃâÃæÃúÃūÃÄ Ä/Ä3ÄQÄUÄdÄhÄtÄxČĐĠĤÄĢįĞÄÂÄËÄĪÄāÄäÄëÄīÄūÄÅÅÅÅ"Å.Å2ÅFÅJÅSÅWÅ`ÅdÅmÅqÅ‚Å†Å•Å™Å­ÅąÅĪÅĶÅâÅæÅÆÆÆÆ/Æ3ÆQÆUÆdÆhƆƊƙƝƊƭÆļÆēÆÉÆÍÆáÆåÆîÆōÆųÆũÆĮĮ!Į%Į/Į3Į=ĮAĮSĮWĮ`ĮdĮoĮsĮ|Į€Į‰ĮĮ˜ĮœĮ­ĮąĮ¸ĮŧĮËĮĪĮŪĮâĮėĮđĮúĮūĮČ ČČČ$Č(Č2Č6Č@ČDČVČZČcČgČrČvČČƒČŒČČŖČ§ČŽČ˛ČÁČÅČÔČØČâČæČđČôČūČÉ ÉÉÉÉ(É,É>ÉBÉJÉNÉVÉZÉbÉfÉnÉrɂɆɐɔɞÉĸÉŦɰÉēÉžÉČÉĖÉÖÉÚÉėÉđÉøÉüÉĘĘĘĘĘ Ę0Ę4Ę;Ę?ĘFĘJĘYĘ]ĘlĘpĘwĘ{ĘŠĘŽĘ—Ę›ĘŦʰʡĘģĘĘĘÎĘŨĘáĘęĘîĘõĘųĘ ËËË!Ë+Ë/Ë9Ë=ËGËKËUËYËcËgËqËuˇˋ˚˞˨ËŦËļËēËÄËČËŌËÖËāËäËöËúËĖĖĖĖ%Ė)Ė0ĖĶ5Ė9Ė@ĖĶEĖIĖPĖĶUĖYĖ`ĖĶeĖiĖpĖĶ}ĖĖ‹ĖĖĄĖĨĖŦĖĶšĖŊĖĮĖËĖÕĖŲĖãĖįĖņĖõĖ˙ĖÍÍÍ3Í7ÍFÍJÍdÍhÍwÍ{͍͑ÍĢͯ͞ÍÂÍÜÍāÍīÍķÍũÍÎ ÎÎÎÎ'Î+Î5Î9ÎKÎOÎiÎmÎ|΀ΚΞέιÎģÎŋÎÉÎÍÎ×ÎÛÎåÎéÎķÎ÷Î Ī Ī'Ī+Ī:Ī>ĪXĪ\ĪkĪoĪyĪ}Ī‡Ī‹Ī•Ī™ĪŖĪ§ĪąĪĩĪĮĪËĪåĪéĪøĪüĪĐĐ)Đ-Đ7Đ;ĐEĐIĐSĐWĐaĐeĐoĐsĐ…Đ‰Đ˜ĐœĐŖĐ§ĐŽĐ˛ĐšĐŊĐÄĐČĐĪĐĶĐÚĐŪĐíĐņĐøĐ]ũĐŅŅ]ŅŅ Ņ]-Ņ1Ņ:Ņ>ŅOŅSŅ\Ņ`ŅiŅmŅvŅzŅ‹ŅŅ–ŅšŅŠŅ­ŅžŅÂŅËŅĪŅÖŅÚŅëŅīŅūŅŌŌŌ2Ō6ŌEŌIŌcŌgŌvŌzŌŒŌŌĒŌŽŌŊŌÁŌÛŌßŌîŌōŌĶĶ"Ķ&Ķ5Ķ9ĶSĶWĶfĶjĶtĶxĶĶƒĶ•Ķ™ĶĢ͝ĶÁĶÅĶÕĶŲĶčĶėĶõĶųĶÔ ÔÔÔÔ"Ô1Ô5Ô<ÔpAÔEÔLÔpYÔ]ÔdÔ]qÔuÔ|Ô€ÔÔ”ÔÔĄÔ˛ÔļÔŋÔÃÔĘÔÎÔ×ÔÛÔäÔčÔņÔõÔÕ ÕÕÕÕ Õ'Õ+Õ2Õ6Õ=ÕAÕPÕTÕ[Õp`ÕdÕkÕpxÕ|ÕƒÕ]Õ”ÕĻÕĒÕŧÕĀÕÉÕÍÕÖÕÚÕãÕįÕøÕüÕÖ ÖÖÖÖ#Ö4Ö8ÖIÖMÖeÖiÖxÖ|Ö”Ö˜Ö§ÖĢÖŧÖĀÖØÖÜÖëÖīÖ× ×××'×+×2×6×G×K×\×`×i×m×t×x׉׍לנק×Ģ×ģ×ŋ×Č×Ė×Ũ×á×č×ė×üר Ø ØØ"Ø+Ø/Ø6Ø:ØCØGØPØTØ]ØaØrØvØ}؁؈،ؓؗ؞Øĸ؊حØŧØĀØĮØpĖØĐØרpäØčØīØ]üØŲŲŲ'Ų+Ų4Ų8Ų?ŲCŲTŲXŲaŲeŲlŲpŲŲ…Ų–ŲšŲŖŲ§ŲŽŲ˛ŲÃŲĮŲÖŲÚŲéŲíŲöŲúŲÚÚÚÚ)Ú-Ú5Ú9Ú@ÚDÚSÚWÚ^ÚbÚqÚuÚ|Ú€ÚÚ“Ú¤Ú¨ÚˇÚģÚÂÚÆÚÍÚŅÚåÚéÚđÚôÚũÚÛ ÛÛ"Û&Û-Û1Û@ÛDÛLÛPÛ`ÛdÛoÛsÛ†ÛŠÛ•Û™ÛĨÛŠÛ´Û¸ÛËÛĪÛÖÛÚÛâÛæÛõÛųÛÜÜ ÜÜÜ Ü'Ü+Ü2Ü6Ü=ÜAÜIÜMÜ]ÜaÜhÜlÜtÜx܇܋ܒÜĶ—Ü›ÜĸÜܺ͝ÜēÜžÜÅÜÉÜØÜÜÜëÜīÜ˙ÜŨ ŨŨŨ!Ũ(Ũ,Ũ4Ũ8ŨHŨLŨXŨ\ŨkŨoŨvŨzŨ‚Ũ†Ũ•Ũ™Ũ Ũ¤ŨŗŨˇŨžŨÂŨŅŨÕŨŨŨáŨņŨõŨŪŪŪŪ"Ū&Ū-Ū1ŪAŪEŪMŪQŪaŪeŪlŪpŪŪƒŪ‹ŪŪŸŪŖŪŽŪ˛ŪÅŪÉŪØŪÜŪķŪ÷Ūß ßßß4ß8ßGß Kß Sß Wß ^ß bß iß mß |ß €ß ‡ß ‹ß šß žß Ĩß Šß ąß ĩß Åß Éß Ōß Öß ßß ãß úß ūß ā  ā ā ā +ā /ā 6ā :ā Aā Eā \ā `ā iā mā tā xā ā …ā Žā ’ā Šā ­ā ´ā ¸ā Įā Ëā Ķā ×ā įā ëā öā úā  á á á  á ,á 0á ;á ?á Rá Vá ]á aá pá tá {á á ‡á ‹á —á ›á ĸá Ļá ­á ąá ¸á ŧá Äá Čá Øá Üá ãá įá īá ķá úá ūá â â "âĶ'â +â 2âĶ?â Câ Jâ Nâ Uâ Yâ hâ lâ {â â â “â šâ žâ ­â ąâ šâ Ŋâ Íâ Ņâ Ũâ áâ đâ ôâ ûâ ˙â ã ã ã ã ,ã 0ã 8ã <ã Dã Hã Xã \ã dã hã xã |ã ‡ã ‹ã –ã šã Žã ˛ã šã Ŋã Äã Čã Øã Üã ãã įã īã ķã ä ä ä ä !ä %ä -ä 1ä Aä Eä Pä Tä _ä cä wä {ä Šä Žä Ĩä Šä ¸ä ŧä Ëä Īä æä ęä ųäũäå åååå!å1å5å>åBåIåMå^åbåkåoå{ååˆåŒå å¤åĩåšåĘåÎåŨåáåęåîåúåūåæ ææ#æ,æ0æ9æ=æDæHæYæ]æfæjævæzæƒæ‡æ›æŸæ°æ´æÅæÉæĐæÔæäæ čæ đæ ôæ ûæ ˙æ į į į į ,į 0į 7į ;į Jį Nį _į cį rį vį }į į ˆį Œį  į ¤į Ģį ¯į ¸į ŧį Åį Éį Ũį áį čį ėį ûį ˙į č  č č č *č .č Ač Eč Pč Tč `č dč oč sč †č Šč ‘č •č č Ąč °č ´č ģč ŋč Įč Ëč ×č Ûč âč æč íč ņč øč üč é é é é #é 'é /é 3é Bé Fé MéĶRé Vé ]éĶjé né ué yé €é „é “é —é Ļé Ēé ēé žé Åé Éé Øé Üé ãé įé īé ķé ę ę ę ę &ę *ę 1ę 5ę =ę Aę Pę Tę [ę _ę nę rę yę }ę Œę ę ˜ę œę Ŧę °ę ģę ŋę Ōę Öę Ũę áę čę ėę üę ë ë  ë ë  ë 'ë +ë :ë >ë Fë Jë Zë ^ë ië më €ë „ë “ë —ë Žë ˛ë Áë Åë Ôë Øë īë ķë ėėėė!ė%ė.ė2ė9ė=ėDėHėQėUėfėjėqėuė~ė‚ė‹ėė ė¤ėŦė°ėĀėÄėËėŽĐėÔėÛėŽčėėėõėųė íííí í$í3í7í>íŽCíGíNíŽ[í_ífí]kíoíví]ƒí‡íí”í›íŸí§íĢíŗíˇíĀíÄíÍíŅíÚíŪíįíëíüíîî îîî!î%î.î2î9î=îFîJîQîUîfîjîqîuî|î€î‡î‹î’î–îîĄî°î´îŊîÁîČîĖîÔîØîāîäîíîņîúîūîī īīī)ī-ī4ī8īAīEīNīRī[ī_īfījīsīwīˆīŒī“ī—īŸīŖīĒīŽīļīēīÁīÅīÔīØīéīíīöīúīđđđđ)đ-đ>đBđKđOđVđZđkđođ~đ‚đ‹đđ˜đœđĨđŠđēđžđÅđÉđĐđÔđÛđßđîđōđųđũđņņņņ$ņ(ņ/ņ3ņ:ņ>ņMņQņXņ\ņkņoņxņ|ņņ‘ņ˜ņœņĢņ¯ņĀņÄņÍņŅņØņÜņíņņņōōōō)ō-ō4ō8ō?ōCōRōVōcōgōtōxōō‘ō˜ōœōĢō¯ōļōēōÁōÅōŅōÕōæōęōķō÷ōķķķķ"ķ&ķ/ķ3ķCķGķVķZķkķoķ€ķ„ķ“ķ—ķ ķ¤ķ­ķąķÂķÆķĪķĶķÜķāķņķõķüķôôôô ô1ô5ô>ôBôSôWô^ôbôqôuô†ôŠô“ô—ôžôĸôŗôˇôÆôĘôÛôßôčôėôķô÷ôõ õõõ'õ+õ3õ7õ?õCõSõWõ`õdõkõoõ€õ„õõ‘õõĄõĒõŽõÂõÆõ×õÛõėõđõ˙õö öööö)ö-ö4ö8ö?öCöLöPöaöeönöröyö}öŽö’ö›öŸö¨öŦöšöŊöĖöĐöáöåöööúö ÷ ÷÷÷'÷+÷2÷6÷E÷I÷P÷T÷c÷g÷n÷r÷y÷}÷…÷‰÷š÷ž÷§÷Ģ÷´÷¸÷ŋ÷Ã÷Ô÷Ø÷á÷å÷î÷ō÷ū÷øøø&ø*ø;ø?øNøRø[ø_øføjøsøwøø…ø‘ø•øŖø§ø¸øŧøÃøĮøŅøÕøâøæøôøøøų ųųųų#ų+ų/ų8ų<ųFųJųVųZųhųlų}ųųˆųŒų–ųšų§ųĢųšųŊųĖųĐųŲųŨųįųëų÷ųûų ú úú"ú)ú-ú5ú9úBúFúNúRú[ú_úgúkútúxúˆúŒú“ú—úžúĸúŠú­ú´ú¸úŋúÃúŌúÖúŨúpâúæúíúpúúūúû]ûû û$û.û2û>ûBûPûTû^ûbûtûxûûƒûŠûŽû•û™û û¤ûĢû¯ûžûÂûÉûpÎûŌûŲûpæûęûņû]ūûü ü üüü#ü'ü0ü4ü=üAüKüOüXü\ümüqüxü|üƒü‡üŽü’ü™üü¤ü¨üˇüģüÂüpĮüËüŌüpßüãüęü]÷üûüũ ũũũ*ũ.ũ;ũ?ũIũMũZũ^ũsũwũ„ũˆũ•ũ™ũĻũĒũˇũģũÅũÉũÖũÚũīũķũũũū ūūūū-ū1ū;ū?ūIūMūWū[ūmūqū{ūū‰ūū™ūūĢū¯ūšūŊūĮūËūÕūŲūëūīūųūũū˙ ˙˙˙)˙-˙7˙;˙E˙I˙S˙W˙i˙m˙w˙{˙…˙‰˙•˙™˙Ļ˙Ē˙´˙¸˙Â˙Æ˙Đ˙Ô˙æ˙ę˙ō˙ö˙ū˙ *.8<EIVZgkuyƒ‡‘•§ĢŗˇŋÃËĪ×Ûëīųũ (,6:DHRVhlswˆŒ“—¨ŦļēÃĮÔØåéķ÷%)37@DQUbfpt~‚ŒĸĻ­ąšŊÅÉĐÔÜāčėôø p#p04;]HLVZcgtx…‰›ŸŽ˛ÃĮĐÔÛßđô-1;?FJ\`rvˆŒĻĒšŊ×Ûęî"15OSbfx|–šŠ­ĮËÚŪåéøü$(7;BpOSZ]gkrv}ˆA”˜ĄĨޞÃĮÖÚáåėđ÷û  $+/6:AELPW[dhos|€‡‹”˜ŸŖŦ°ˇģÄČĪĶÜāįëôø˙ $(/3<@GK\`qu~‚‰žĸąĩŧĀĮËŌÖŨáčėķ÷     " + / 8 < C G P T ] a h l u y ‚ †  “ œ   Š ­ ļ ē à Į Đ Ô å é đ ô       $ ( / 3 < @ G K T X _ c l p w { „ ˆ  “ š ž § Ģ ˛ ļ ŋ à Ę Î × Û â æ ī ķ ú ū     . 2 9 = E I R V _ c l p y } † Š › Ÿ ¨ Ŧ ŗ ˇ ž  Ë Ī Ø Ü å é đ ô ũ     # 2 6 J N U Y b f o s | € ‰  ” ˜ § Ģ ˛ ļ ŋ à Ę Î × Û â æ ī ķ ü      # ' 8 < C G N R a e l p w { ‚ † — › ĸ Ļ ĩ š Ā Ä Í Ņ Ú Ū į ë ô ø  %)04CGPTeirvƒŒĄĨŦ°ŋÃĘÎŨáęî˙ !(,;?HL]ahl{†Š™ĻĒģŋÆĘŲŨäč÷û #'04;?HLSWhl{Ž’ĄĨŦ°ˇģÂÆÕŲâæīķ"+/8<MQZ^gkrvƒ”˜ŸŖ˛ļŊÁČĖÛßčėõų (,=APTcgnr{ˆŒ“— ¤Ģ¯¸ŧÃĮĐÔåéōöũ "&/3:>GK\`os|€‡‹œ ¯ŗÂÆÚŪåéōö˙ $(15DHOSZ^eix|‹˜œŖ§¸ŧËĪÖÚéíôø˙ "&7;DHQU\`qu|€“šž­ą¸ŧÅÉĐÔåéđô!%.2;?PT[_fjy}„ˆ—›¤¨šŊÄČ×Ûâæõų !04EIRV]arv…‰šž§Ģ˛ļĮËÚŪīķü  /3BFOSZ^os‚†•™ĸĻ­ąÂÆÕŲčėû˙#'6:IM^bqu„ˆ™Ŧ°ŋÃÔØįëúū!(,>BQUfjy}ŒŸŖŦ°ˇģĖĐßãôø !%48GKTX_ctx‡‹’–¨ŦŗˇÉÍÔØįëķ÷ -18]EIY]dhos‚†‘›ŸĻĒ´¸ŋÃÍŅØÜæęņõ /3CGNRaemq…—›Ĩа´ÆĘŲŨīķũ "15GKUY`dvz‰ŸŖ­ą¸ŧÎŌáå÷û &*9=OS]ahl~‚‘•¤¨˛ļŊÁĶ׿ęųũ    ( , ; ? O S d h z ~  ‘ Ŗ § ļ ē É Í Ũ á ņ õ ü !! !!!!!!(!,!;!?!F!J!Q!U!\!`!o!s!|!€!‰!!–!š!Ģ!¯!ļ!ē!Ä!Č!Ī!Ķ!Ú!Ū!č!ė!ö!ú!""""""&"-"1"8"<"C"G"N"R"Y"]"l"p"y"}"†"Š"›"Ÿ"Š"­"ŋ"Ã"Ō"Ö"ā"ä"ö"ú"#####!#3#7#>#B#Q#U#g#k#u#y#€#„#–#š#Š#­#ˇ#ģ#Å#É#Û#ß#é#í#˙#$$$($,$;$?$Q$U$_$c$j$n$€$„$“$—$Š$­$Ŋ$Á$Đ$Ô$æ$ę$˙$%%%)%-%=%A%Q%U%d%h%w%{%‹%%Ÿ%Ŗ%ĩ%š%Ã%Į%Î%Ō%ä%č%÷%û%&&&& &$&6&:&J&N&_&c&m&q&x&|&Ž&’&Ą&Ĩ&´&¸&Â&Æ&Í&Ņ&ã&į&ö&ú& ''''$'(':'>'M'Q'b'f'p't'{''‘'•'¤'¨'š'Ŋ'Į'Ë'Ō'Ö'č'ė'û'˙'((("()(-(?(C(R(V(g(k(u(y(€(„(–(š(Š(­(ž(Â(Ė(Đ(×(Û(í(ņ()) )))")3)7)A)E)L)P)b)f)u)y)Š)Ž)˜)œ)Ŗ)§)š)Ŋ)Ė)Đ)ß)ã)í)ņ)ø)ü)**!*%*6*:*D*H*O*S*e*i*x*|**‘*›*Ÿ*Ļ*Ē*ŧ*Ā*Ī*Ķ*ä*č*ō*ö*ũ*+++&+*+;+?+I+M+T+X+j+n+}++’+–+ +¤+Ģ+¯+Á+Å+Ô+Ø+ß+ã+ķ+÷+, ,,,,!,1,5,F,J,S,W,^,b,s,w,†,Š,›,Ÿ,¨,Ŧ,ŗ,ˇ,Č,Ė,Û,ß,đ,ô,ũ,-- --!-0-4-E-I-R-V-]-a-r-v-…-‰-š-ž-§-Ģ-˛-ļ-Į-Ë-Ú-Ū-ī-ķ-ü-.. .. ./.3.D.H.Y.].l.p.w.{.ƒ.‡.—.›.Ŧ.°.š.Ŋ.Ä.Č.Ų.Ũ.ė.đ.//////./2/A/E/V/Z/c/g/n/r/ƒ/‡/–/š/Ģ/¯/¸/ŧ/Ã/Į/Ø/Ü/ë/ī/00 0000-010@0D0U0Y0b0f0m0q0‚0†0•0™0Ē0Ž0ŋ0Ã0Ō0Ö0Ũ0á0é0í0õ0ų011 11 1$15191B1F1M1Q1b1f1u1y1Š1Ž1—1›1ĸ1Ļ1ˇ1ģ1Ę1Î1ß1ã1ė1đ1÷1û1 222#24282A2E2L2P2a2e2t2x2‰22–2š2Ą2Ĩ2ļ2ē2É2Í2Ū2â2ë2ī2ö2ú2 333"33373H3L3[3_3f3j3r3v3~3‚3‰33•3™3Š3­3ž3Â3Ë3Ī3Ö3Ú3ë3ī3ū3444 4$4+4/4@4D4S4W4h4l4u4y4€4„4•4™4¨4Ŧ4Ŋ4Á4Ę4Î4Õ4Ų4ę4î4ũ45555#5*5.5?5C5R5V5g5k5t5x55ƒ5”5˜5§5Ģ5ŧ5Ā5Ņ5Õ5ä5č5ņ5õ5ü5666$6(6/636C6G6O6S6b6f6s6w6‰66”6˜6§6Ģ6˛6ļ6ŋ6Ã6Ę6Î6×6Û6â6æ6÷6û67 777%7p*7.757p:7>7E7pR7V7]7a7j7n7u7y7‚7†77“7š7ž7¯7ŗ7ŧ7Ā7Ī7Ķ7Ú7]ß7ã7ę7]ī7ķ7ú7]8 8888#8*8.878;8D8H8O8S8d8h8q8u8„8ˆ88]”8˜8Ÿ8]¤8¨8¯8]ŧ8Ā8Į8Ë8Ô8Ø8ß8ã8ė8đ8ų8ũ89999&9*999=9D9pI9M9T9pY9]9d9pq9u9|9€9‰99”9˜9Ą9Ĩ9Ž9˛9š9Ŋ9Î9Ō9Û9ß9î9ō9ų9ũ9: ::::":+:/:6:::K:O:V:Z:c:g:n:r:{::ˆ:Œ:“:—:¨:Ŧ:´:¸:Ā:Ä:Ô:Ø:į:ë:û:˙:; ;;;;";+;/;6;:;C;G;N;R;[;_;f;j;s;w;~;‚;‹;;–;š;Ŗ;§;Ž;˛;ģ;ŋ;Æ;Ę;Ķ;×;Ū;â;ë;ī;ö;ú;<<<<<<&<*<3<7<><B<K<O<V<Z<c<g<n<r<{<<†<Š<“<—<ž<ĸ<Ģ<¯<ž<Â<É<Í<Ö<Ú<á<å<î<ō<ų<ũ<= ===="=)=-=6=:=A=E=N=R=Y=]=f=j=q=u=~=‚=‰==–=š=Ą=Ĩ=Ž=˛=š=Ŋ=Æ=Ę=Ņ=Õ=Ū=â=é=í=ö=ú=>>>>>>&>*>1>5>>>B>I>M>V>Z>i>m>t>x>>…>Œ>>™>>Ļ>Ē>ŗ>ˇ>Č>Ė>Ķ>×>æ>ę>ņ>õ>ū>? ? ???!?%?,?0?7?;?D?H?O?S?\?`?g?k?t?x??ƒ?Œ??—?›?¤?¨?¯?ŗ?ŧ?Ā?Į?Ë?Ô?Ø?ß?ã?ė?đ?˙?@ @ö@@@ö@#@*@ö/@3@:@ö?@C@J@öO@S@Z@ög@k@r@v@@ƒ@Š@Ž@—@›@ĸ@Ļ@­@ą@¸@ŧ@Å@É@Đ@Ô@Ũ@á@č@ė@õ@ų@AA AAAA%A)A0A4A=AAAHALAUAYA`AdAmAqA€A„AA‘A˜AœAĨAŠA°A´AŊAÁAČAĖAÕAŲAâAæAíAņAúAūAB BBBB!B(B,B5B9B@BDBMBQBZB^BmBqBxB|B‹BB–BšBŠB­B´B¸BČBĖBÜBāBíBņBCCCC'C+C4C8CGCKCRCVCeCiC{CC‰CC”C˜CĒCŽCŊCÁCŌCÖCāCäCëCīCDDDD)D-D7D;DBDFDXD\DkDoD€D„DŽD’D™DD¯DŗDÂDÆD×DÛDåDéDđDôDE EEE.E2EGBGLGPGWG[GmGqG€G„G“G—GĄGĨGŦG°GÂGÆGÕGŲGęGîGøGüGHHHH,H0HAHEHOHSHZH^HpHtHƒH‡H˜HœHĻHĒHąHĩHĮHËHÚHŪHđHôHūHI I II#I2I6IGIKIUIYI`IdIvIzI‰IIžIĸIĢI¯IļIēIËIĪIŪIâIņIõIüIJJ JJJJ!J0J4JFJJJYJ]JnJrJyJ}J„JˆJJ“J¤J¨J¯Jö´J¸JŋJöÄJČJĪJöÜJāJįJëJúJūJK KK K'K+K:K>KGKKKTKXKiKmKvKzKƒK‡K˜KœKŖK§KļKēKÃKĮKĐKÔKåKéKōKöK˙KLLLL#L2L6L?LCLLLPLaLeLnLrL{LLL”L›LŸLŽL˛LģLŋLĐLÔLŨLáLōLöLũLMMM%M)M:M>MMMQMYM]MeMiMyM}M„MˆM—M›MĸM]§MĢM˛M]ˇMģMÂM]ĮMËMŌM]ßMãMęM„īMķMúM„˙MN N„NNN„'N+N2N]7N;NBN]GNKNRN]WN[NbN]oNsNzN„NƒNŠN„N“NšN„ŸNŖNĒN„ˇNģNËNĪNßNãNęNîNõNųNO OOOO"O3O7O>OöCOGONOö[O_OfOjOyO}O†OŠO›OŸOĻOĒOšOŊOÎOŌOãOįOöOúOPPPP*P.P>PBPRPVP]PaPhPlPuPyPŠPŽPŸPŖPŦP°PˇPģPĖPĐPßPãPôPøPQQ QQ!Q%Q4Q8QIQMQVQZQaQeQvQzQ‰QQžQĸQĢQ¯QļQēQËQĪQŪQâQķQ÷QRR RR R$R3R7RHRLRURYR`RdRuRyRˆRŒRRĄRĒRŽRĩRšRĘRÎRŨRáRęRîRõRųR SSS!S(S,S4S8S?SCSKSOSVSZSjSnSuSyS‚S†SS“SœS SŠS­SžSÂSÉSÍSÜSāSņSõS˙ST TT T$T3T7TFTJTTTXT_TcTuTyTˆTŒT›TŸTŠT­T´T¸TĘTÎTŨTáTōTöTUU UU!U%U4U8UIUMUWU[UbUfUxU|U‹UU U¤UŽU˛UšUŊUĪUĶUâUæU÷UûUV VVV&V*V9V=VNVRV\V`VgVkV}VVV”VŖV§VŗVˇVČVĖVŨVáVęVîVõVųV WWW!W0W4W=WAWHWLW]WaWpWtW…W‰W’W–WWĄW˛WļWÅWÉWÚWŪWįWëWōWöWX XXX-X1X:X>XEXIXZX^XmXqX‚X†XX“XšXžX¯XŗXÂXÆXÕXŲXâXæXíXņXYYYY*Y.Y7Y;YBYFYWY[YjYnYYƒYŒYY—Y›YŦY°YŋYÃYÔYØYáYåYėYđYZZZZ)Z-Z6Z:ZAZEZVZZZiZmZ|Z€Z‰ZZ”Z˜ZŠZ­ZŧZĀZĮZËZÚZŪZåZéZøZüZ[[[[![%[,[0[8[<[M[Q[Z[^[g[k[r[v[‡[‹[”[˜[Ą[Ĩ[ą[ĩ[Ä[Č[Ų[Ũ[î[ō[\\ \\\\&\*\1\5\>\B\K\O\X\\\c\g\x\|\…\‰\’\–\§\Ģ\˛\ļ\ž\Â\Ō\Ö\ß\ã\ô\ø\]]]]!]%]4]8]A]E]V]Z]c]g]x]|]ƒ]‡]–]š]Ą]]Ž]˛]Ã]Į]Ø]Ü]å]é]đ]ô]^ ^^^-^1^:^>^E^I^Z^^^m^q^y^}^„^ˆ^—^›^ĸ^Ļ^ĩ^š^Ā^Ä^Ķ^×^č^ė^û^˙^_ ___)_-_4_8_A_E_N_R_f_j_q_u_„_ˆ__”_¤_¨_ŗ_ˇ_Ę_Î_Ų_Ũ_é_í_ø_ü_````&`*`9`=`D`H`P`T```d`k`o`v`z``…``‘`Ą`Ĩ`Ŧ`°`¸`ŧ`Ë`Ī`Ö`ĶÛ`ß`æ`Ķķ`÷`ū`a a aa a/a3aCaGaNaRaaaealapaxa|aŒaaœa a¯aŗaēažaÆaĘaŲaŨaäača÷aûabbbb!b%b5b9bDbHb[b_bfbjbqbub…b‰b‘b•bĨbŠb°b´bÃbĮbĪbĶbãbįbōböb c cc c7c;cJcNc]cacxc|c‹cc—c›cŖc§c¯cŗcÃcĮcĐcÔcŨcácčcėcũcd dddd,d0d?dCdUdYdjdnd}ddˆdŒd“d—dĸdĻd¸dŧdÄdČdĪdĶdâdædídņdee eee"e3e7eFeJeQeUe\e`etexeeƒeŒee™eeąeĩeŧeĀeĪeĶeÛeßeīeķeūefff$f(f4f8fCfGfZf^fefifqfuf„fˆff“f›fŸfĢf¯fļfēfÁfÅfĖfĐfØfÜfėfđf÷fûfgggg!gĶ&g*g1gĶ>gBgIgMgTgXgggkgzg~gŽg’g™ggŦg°gˇgģgÃgĮg×gÛgįgëgúgūgh hhh$h(h/h3hBhFhMhQh`hdhlhph€h„hh“hĻhĒhąhĩhŧhĀhĐhÔhÜhāhđhôhûh˙hiiii.i2i=iAiTiXigiki‚i†i•i™i¨iŦiÃiĮiÖiÚiâiæiöiúijjjj%j)j8jo Eo Io Xo \o do ho xo |o ‡o ‹o žo ĸo ąo ĩo Ėo Đo ßo ão ōo öo  p p  p"$p",p"0p"7p";p"Jp"Np"Yp"]p"pp"tp"{p"p"‡p"‹p"’p"–p"Ļp"Ēp"ąp"ĩp"Åp"Ép"Đp"Ôp"äp"čp"÷p$ûp$q$q$q$q$q$q$-q$1q$8q$r&Nr&Rr&Yr&]r&er&ir&yr&}r&…r&‰r&™r&r&¤r&¨r&¯r&ŗr&Ãr&Įr&Îr&Ōr&Ųr&Ũr&ėr&đr&s&s&s&s&!s&%s&1s&5s&Fs&Js&Qs&Us&es&is&ps&ts&{s&s&Žs&’s&™s&s&Ŧs&°s&ˇs&ģs&Ęs&Îs&Ũs&ás&ís&ņs&t&t&t&t&)t&-t&v(Bv(Tv(Xv(_v(cv(kv(ov({v(v(‹v(v(—v(›v(§v(Ģv(ˇv(ģv(Īv(Ķv(ãv(įv(øv(üv( w(w(w(#w(*w(.w(=w(Aw(Hw(Lw([w(_w(gw(kw(rw(vw(†w(Šw(’w(–w(Ļw(Ēw(ēw(žw(Îw(Ōw(âw(æw(õw(ųw(x(x(x(x(x("x(1x(5x(=x(Ax(Ix(Mx(]x(ax(ix(mx(ux(yx(‰x(x(”xĶĄx(Ĩx(­x(ąx(Āx(Äx(Ėx(Đx(āx(äx(ėx(đx(øx(üx(y(y(y(y(#y('y(7y(;y(Cy(Gy(Wy([y(by(fy(my(qy(xy(|y(ƒy(‡y(y(“y(ĸy(Ļy(ļy(ēy(Æy(Ęy(Ūy(ây(ōy(öy(ũy(z(z(z($z((z(/z(3z(Bz(Fz(Rz(Vz(jz(nz(}z(z(z(”z(œz( z(¨z(Ŧz(´z(¸z(Čz(Ėz(Ôz(Øz(čz(ėz(ôz(øz({( {({({( {(${(,{(0{(@{(D{(K{(O{(^{(b{(j{(n{(}{*{*{*”{*›{Z {*¤{*Ģ{Z¸{*ŧ{*Ã{pČ{*Ė{*Ķ{pā{,ä{,î{,ō{,ų{,ũ{,|, |,|,|,+|,/|,9|,=|,D|,H|,R|,V|,`|,d|,s|,w|,|,ƒ|,“|,—|,Ą|,Ĩ|,Ŧ|,°|,ē|,ž|,Č|,Ė|,Ū|,â|,ė|,đ|,÷|,û|,}, },},},!},%},/},3},E},I},[},_},g},k},s},w},},ƒ},“},—},ž},ĸ},Ŧ},°},ē},ž},Å},É},Đ},Ô},Û},ß},æ},ę},ü},~, ~, ~,~,~,%~,)~,2~,6~,?~,C~,L~,P~,Y~,]~,o~,s~,„~,ˆ~,š~,ž~,Ļ~,Ē~,˛~,ļ~,ž~,Â~,Ę~,Î~,Ū~,â~,ė~,đ~,÷~,û~,, ,,,!,%,/,3,E,I,Q,U,],a,q,u,…,‰,“,—,Ą,Ĩ,ˇ,ģ,Å,É,Ķ,×,é,í,ô,ø,€,€,€,€,#€,'€,1€,5€,?€,C€,U€,Y€,c€,g€,q€,u€,‡€,‹€,’€,–€,Ĩ€,Š€,ŗ€,ˇ€,ɀ,̀,׀,ۀ,í€,ņ€,û€,˙€,,,,#,5,9,C,G,Y]fjsw€„•™ĸρ­ąēžĮˁ܁āéíöú ‚‚‚‚#‚'‚0‚4‚=‚A‚R‚V‚]‚a‚j‚n‚w‚{‚Ђނ—‚›‚¤‚¨‚š‚Ŋ‚ĂȂׂۂä‚č‚ņ‚õ‚ƒ ƒƒƒ ƒ$ƒ5ƒ9ƒ@ƒDƒSƒWƒgƒkƒrƒvƒ…ƒ‰ƒ™ƒƒσǃģƒŋƒЃԃŨƒáƒčƒėƒũƒ„„„„!„(„,„=„A„P„T„d„h„w„{„‹„„ „¤„­„ą„ÄĮ„Ņ„Մ܄ā„č„ė„ô„ø„ …………"…&…7…;…C…G…W…[…d…h…o…s…|…€…‘…•……Ą…ą…ĩ…ž……Ķ…ׅŪ…]ã…į…î…]û…˙…†††] †$†+†]8†<†C†G†P†T†c†g†p†t†ƒ†‡†ކ’†Ŗ†§†ކ˛†ģ†ŋ†Ɔʆ͆׆č†ė†ü†‡‡‡%‡)‡0‡]=‡A‡H‡L‡S‡W‡f‡j‡q‡]~‡‚‡‘‡•‡ž‡ĸ‡ą‡ĩ‡ćȇ؇܇í‡ņ‡ˆˆˆˆ+ˆ/ˆ?ˆCˆJˆNˆ]ˆaˆjˆnˆˆƒˆŠˆŽˆˆĄˆ˛ˆļˆĮˆˈԈֈåˆéˆúˆūˆ‰ ‰‰‰'‰+‰:‰>‰G‰K‰R‰V‰g‰k‰t‰x‰‰ƒ‰”‰˜‰Љ­‰ļ‰ē‰Á‰ʼn։ډé‰í‰ū‰Š ŠŠŠŠ+Š/Š>ŠBŠKŠOŠYŠ]ŠoŠsŠ}ŠŠˆŠŒŠ”Š˜Š Š¤Šފ˛ŠĊȊԊ֊čŠėŠõŠųŠ‹‹ ‹‹"‹&‹.‹2‹:‹>‹F‹J‹Z‹^‹g‹k‹r‹v‹‹ƒ‹Œ‹‹™‹‹Ž‹˛‹ē‹ž‹ƋʋŌ‹֋æ‹ę‹ķ‹÷‹ŒŒ ŒŒ"Œ&Œ-Œ]2Œ6Œ=Œ]BŒFŒMŒ]ZŒ^ŒoŒsŒzŒ]ŒƒŒŠŒ]Œ“ŒšŒ]§Œ̌˛ŒļŒŋŒÌˌЌ׌یėŒđŒųŒũŒ $(15FJQU^bimtx…–šĸĻŽ˛ƍ׍ۍëīö]û˙Ž] ŽŽŽ]#Ž'Ž.Ž2Ž9Ž=ŽLŽPŽWŽ]\Ž`ŽgŽ]lŽpŽwŽ]„ŽˆŽŽ“ŽšŽžŽ­ŽąŽēŽžŽ͎ŅŽ؎܎ëŽīŽ÷ŽûŽ -1:>OS[_osz~‘šž¯ŗēž͏ŅڏŪīķü /3DHQU\`qu„ˆ˜œ̐¯ŋÐԐؐáåėđ‘‘‘‘‘‘.‘2‘C‘G‘P‘T‘[‘_‘p‘t‘ƒ‘‡‘˜‘œ‘Ĩ‘Š‘°‘´‘őɑܑؑå‘é‘ķ‘÷‘ ’ ’’’"’&’.’2’:’>’H’L’^’b’l’p’‚’†’’“’š’ž’§’Ģ’ŧ’Ā’ȒĖ’Ԓؒā’ä’ô’ø’““ ““““&“*“3“7“H“L“T“X“`“d“l“p“€“„““‘“š“ž“§“Ģ“ŧ“Ā“Į“]Ė“Гד]ܓā“į“]ô“ø“ ” ””]””$”])”-”4”]A”E”L”P”Y”]”f”j”q”u”†”Š”“”—”ϔǔą”ĩ”ž””˔Ī”ā”ä”ë””ü”••••••0•4•<•@•H•L•\•`•q•u•…•‰••]••™• •]Ĩ•Š•°•]Ŋ•Á•ȕ˕͕וæ•ę•ņ•]ö•ú•–]– ––]–"–)–-–4–8–G–K–T–X–g–k–r–v–…–‰–‘–•–Ĩ–Š–˛–ļ–Į–˖Ԗؖé–í–õ–ų– — ———'—+—4—8—I—M—T—X—g—k—t—x—‰——–—š—Ģ—¯—ļ—ē—ɗ͗Ū—â—ë—ī—ö—ú— ˜˜˜"˜2˜6˜E˜I˜Y˜]˜n˜r˜{˜˜†˜Š˜›˜Ÿ˜¨˜Ŧ˜ŗ˜ˇ˜Ș˘Ũ˜á˜ę˜î˜õ˜ų˜ ™™™!™2™6™?™C™J™N™_™c™r™v™™ƒ™™‘™Ŗ™§™ą™ĩ™ŧ™Ā™șĖ™ԙؙâ™æ™ø™ü™š šš š)š-š4š8šAšEšVšZšbšfšnšršzš~šŽš’š›šŸšϚǚŗšˇššĚ͚Қâšæšîšōšúšūš› ›››'›+›4›8›A›E›V›Z›a›]f›j›q›]v›z››]Ž›’›Ŗ›§›Ž›]ŗ›ˇ›ž›]ÛĮ›Λ]ۛߛæ›ę›ķ›÷›œœ œœ œ$œ-œ1œ@œDœKœOœXœ\œeœiœzœ~œ…œ‰œ’œ–œœĄœ¨œŦœĩœšœƜΜ֜ڜâœæœöœúœ #*]/3:]?CJ]W[bfmq€„‹]”›] ¤Ģ]¸ŧÝĮΝŌáåîōžž žžž#ž+ž/ž?žCžLžPžažežnžržƒž‡žž“žŖž§žŽž˛žÁžŞΞŌžãžįžîžōžŸŸŸŸ#Ÿ'Ÿ0Ÿ4ŸEŸIŸPŸTŸcŸgŸxŸ|Ÿ…Ÿ‰ŸŸ”ŸĨŸП¸ŸŧŸ˟ПߟãŸķŸ÷Ÿ       $ 5 9 B F M Q b f w { „ ˆ  “ ¤ ¨ ˇ ģ Ė Đ Ų Ũ ä č ų ũ  ĄĄĄĄ'Ą+Ą=ĄAĄKĄOĄVĄZĄbĄfĄnĄrĄ|Ą€Ą’Ą–Ą Ą¤ĄļĄēĄÃĄĮĄÎĄŌĄÛĄߥđĄôĄüĄĸĸ ĸĸĸ(ĸ,ĸ5ĸ9ĸ@ĸDĸMĸQĸZĸ^ĸgĸkĸ|ĸ€ĸˆĸŒĸ”ĸ˜ĸ ĸ¤ĸ´ĸ¸ĸÁĸÅĸÎĸŌĸÛĸßĸđĸôĸûĸ]ŖŖ Ŗ]ŖŖŖ](Ŗ,Ŗ=ŖAŖHŖ]MŖQŖXŖ]]ŖaŖhŖ]uŖyŖ€Ŗ„ŖŖ‘ŖšŖžŖĨŖŠŖēŖžŖĮŖËŖÚŖŪŖåŖéŖōŖöŖ˙Ŗ¤¤¤¤#¤,¤0¤7¤;¤B¤F¤O¤S¤d¤h¤p¤t¤|¤€¤¤”¤Ĩ¤Фš¤Ŋ¤Ĥ]ɤͤÔ¤]Ų¤Ũ¤ä¤]ņ¤õ¤ü¤ĨĨ ĨĨĨ%Ĩ]*Ĩ.Ĩ5Ĩ]:Ĩ>ĨEĨ]RĨVĨ]ĨaĨhĨlĨ{ĨĨˆĨŒĨ›ĨŸĨĻĨĒĨšĨŊĨÅĨÉĨŲĨŨĨæĨęĨûĨ˙ĨĻ ĻĻ!Ļ)Ļ-Ļ=ĻAĻHĻLĻ[Ļ_ĻhĻlĻ}ĻĻˆĻŒĻ›ĻŸĻ¨ĻŦĻŊĻÁĻĘĻÎĻßĻãĻęĻîĻũϧ§§§#§*§.§?§C§R§V§f§j§y§}§§‘§ĸ§ϧ¯§ŗ§ē§ž§Χͧܧā§į§ë§ü§¨¨¨¨"¨)¨-¨>¨B¨Q¨U¨f¨j¨s¨w¨~¨‚¨“¨—¨ύ.Ǎ.ą¨.ĩ¨.Ĩ.Ȩ.΍.͍.ę¨.î¨.ų¨.ũ¨.Š. Š.Š.Š.$Š.(Š.3Š.7Š.BŠ.FŠ.TŠ.XŠ.cŠ.gŠ.rŠ.vŠ.„Š.ˆŠ.›Š.ŸŠ.ĻŠ.ĒŠ.ąŠ.ĩŠ.ŊŠ.ÁŠ.ČŠ.ĖŠ.ÔŠ.ØŠ.įŠ.ëŠ.ôŠ.øŠ.Ē.Ē.Ē.Ē.Ē.Ē.&Ē.*Ē.3Ē.7Ē.CĒ.GĒ.PĒ.TĒ.]Ē.aĒ.mĒ.qĒ.‚Ē.†Ē.ŽĒ.’Ē.šĒ.žĒ.ŽĒ.˛Ē.ŊĒ.ÁĒ.ĖĒ.ĐĒ.ÛĒ.ßĒ.čĒ.ėĒ.öĒ.úĒ.Ģ. Ģ.Ģ.Ģ.&Ģ.*Ģ.=Ģ.AĢ.HĢ.LĢ.SĢ.WĢ._Ģ.cĢ.jĢ.nĢ.vĢ.zĢ.‰Ģ.Ģ.–Ģ.šĢ.ŖĢ.§Ģ.°Ģ.´Ģ.ģĢ.ŋĢ.ĮĢ.ËĢ.ÔĢ.ØĢ.áĢ.åĢ.ņĢ.õĢ.Ŧ. Ŧ.Ŧ.Ŧ.Ŧ."Ŧ.2Ŧ.6Ŧ.AŦ.EŦ.PŦ.TŦ._Ŧ.cŦ.lŦ.pŦ.zŦ.~Ŧ.‘Ŧ.•Ŧ.œŦ. Ŧ.§Ŧ.ĢŦ.ŗŦ.ˇŦ.ÆŦ.ĘŦ.ĶŦ.×Ŧ.āŦ.äŦ.íŦ.ņŦ.øŦ.üŦ.­.­.­.­.%­.)­.1­.5­.E­.I­.R­.V­.a­.e­.n­.r­.{­.­.Š­.Ž­.—­.›­.Ļ­.Ē­.¸­.ŧ­.Å­.É­.Ô­.Ø­.æ­.ę­.ũ­.Ž.Ž. Ž.Ž.Ž.Ž.#Ž.*Ž..Ž.6Ž.:Ž.IŽ.MŽ.TŽ.XŽ.aŽ.eŽ.lŽ.pŽ.wŽ.{Ž.„Ž.ˆŽ.Ž.“Ž.œŽ. Ž.ŦŽ.°Ž.ˇŽ.ģŽ.ÄŽ.ČŽ.ÔŽ.ØŽ.éŽ.íŽ.õŽ.ųŽ.¯.¯.¯.¯. ¯Ķ%¯.)¯.0¯Ķ=¯.A¯.H¯ĶM¯.Q¯.X¯Ķe¯.i¯.p¯Ķu¯.y¯.€¯Ķ¯.‘¯.ĸ¯.ϝ.ĩ¯.š¯.ȝ.˝.Ô¯.د.ā¯.ä¯.ô¯.ø¯.˙¯Ķ °.°.!°.%°.4°.8°.G°.K°.S°.W°._°.c°.s°.w°.~°Ķ‹°.°. °.¤°.ŗ°.ˇ°.ư.ʰ.Ō°.Ö°.Ū°.â°.ō°0ö°0ũ°0ą0ą0ą0ą0ą06ą0:ą0Eą0Ią0Tą0Xą0cą0gą0pą0tą0ą0ƒą0–ą0šą0ĄąĶĻą0Ēą0ąąĶžą0Âą0Ęą0Îą0Ūą0âą0ëą0īą0øą0üą0˛0 ˛0˛0˛0˛0!˛02˛06˛0E˛0I˛0X˛0\˛0k˛0o˛0z˛0~˛0‰˛0˛0˜˛0œ˛0¯˛0ŗ˛0ē˛Ķŋ˛0Ã˛0ʲĶײ0Û˛0ã˛0į˛0÷˛0û˛0ŗ0ŗ0ŗ0ŗ0ŗ0"ŗ03ŗ07ŗ0Fŗ0Jŗ0Yŗ0]ŗ0lŗ0pŗ0{ŗ0ŗ0Šŗ0Žŗ0™ŗ0ŗ0°ŗ0´ŗ0ģŗĶĀŗ0Äŗ0ËŗĶØŗ0Üŗ0äŗ0čŗ0øŗ0üŗ0´0 ´0´0´0´0#´04´08´0G´0K´0Z´0^´0m´0q´0z´0~´0‰´0´0–´0š´0Ŗ´0§´0˛´0ļ´0ŋ´0ô0Ö´0Ú´0á´Ķæ´0ę´0ņ´Ķū´0ĩ0 ĩ0ĩ0ĩ0"ĩ0)ĩ0-ĩ06ĩ0:ĩ0Aĩ0Eĩ0Lĩ0Pĩ0Yĩ0]ĩ0dĩ0hĩ0yĩ0}ĩ0Œĩ0ĩ0Ÿĩ0Ŗĩ0˛ĩ0ļĩ0ŊĩĶÂĩ0Æĩ0ÍĩĶÚĩ0Ūĩ0åĩĶęĩ0îĩ0õĩĶļ0ļ0 ļĶļ0ļ0ļĶ*ļ0.ļ07ļ0;ļ0Lļ0Pļ0WļĶ\ļ0`ļ0gļĶtļ0xļ0€ļ0„ļ0”ļ0˜ļ0Ÿļ0Ŗļ0˛ļ0ļļ0Åļ0Éļ0Øļ0Üļ0ëļ0īļ0öļ͎0ˇ0ˇ0ˇ0#ˇĶ0ˇ04ˇ0Dˇ0Hˇ0Wˇ0[ˇ0jˇ0nˇ0}ˇ0ˇ0ˇ0”ˇ0ˇ0Ąˇ0Ŧˇ0°ˇ0Áˇ0Ŏ0ˎĶŲˇ0Ũˇ0íˇ0ņˇ0øˇ0üˇ0¸0 ¸0¸0¸0,¸00¸0?¸0C¸0R¸0V¸0e¸0i¸0p¸Ķ}¸2¸2ˆ¸2Œ¸2Ŗ¸2§¸2ޏ2˛¸2š¸2Ŋ¸2Ÿ2ɸ2ظ2ܸ2ë¸2ī¸2ö¸2ú¸2š2š2 š2š2 š2$š2+š2/š26š2:š2Bš2Fš2Uš2Yš2hš2lš2sš2wš2~š2‚š2Šš2Žš2š2Ąš2¨š2Ŧš2ģš2ŋš2Κ2Ōš2Ųš2Ũš2ėš2đš2÷š2ûš2 ē2ē2ē2!ē2(ē2,ē2;ē2?ē2Nē2Rē2aē2eē2tē2xē2ēĶŒē2ē2Ÿē2Ŗē2˛ē2ļē2Åē2Éē2ĐēĶŨē2áē2đē2ôē2ģ2ģ2ģ2ģ2!ģĶ&ģ2*ģ21ģĶ>ģ2Bģ2IģĶNģ2Rģ2YģĶfģ2jģ2qģĶvģ2zģ2ģĶŽģ’ģ›ģŸģ¨ģŦģŊģÁģČģĖģÔģØģāģäģíģņģúģūģŧ ŧŧŧ)ŧ-ŧ6ŧ:ŧAŧEŧNŧRŧ[ŧ_ŧhŧlŧuŧyŧ‚ŧ†ŧŧ‘ŧšŧžŧĨŧŠŧ˛ŧļŧŊŧÁŧŌŧÖŧāŧäŧđŧôŧŊŊŊŊ Ŋ$Ŋ0Ŋ4Ŋ@ŊDŊXŊ\ŊfŊjŊvŊzŊ†ŊŠŊ”Ŋ˜Ŋ¤Ŋ¨ŊąŊĩŊÁŊÅŊĪŊĶŊßŊãŊėŊđŊüŊž žž$ž(ž4ž8žDžHžTžXždžhžtžxž„žˆžœž žŦž°žŧžĀžĖžĐžÚžŪžåžéžõžųžŋ ŋŋŋ ŋ$ŋ0ŋ4ŋHŋLŋSŋWŋ`ŋdŋmŋqŋzŋ~ŋ‡ŋ‹ŋ”ŋ˜ŋŸŋŖŋŦŋ°ŋˇŋģŋÄŋČŋŲŋŨŋęŋîŋøŋüŋĀ ĀĀĀ#Ā'Ā1Ā5Ā?ĀCĀMĀQĀcĀgĀpĀtĀ}ĀĀŠĀŽĀ—Ā›ĀŦĀ°ĀšĀŊĀÄĀČĀŅĀÕĀÜĀāĀéĀíĀöĀúĀÁÁÁÁÁ!Á*Á.Á?ÁCÁJÁNÁWÁ[ÁdÁhÁqÁuÁ~Á‚Á‹ÁÁ Á¤ÁĢÁ¯Á¸ÁŧÁÅÁÉÁĐÁÔÁŨÁáÁęÁîÁõÁųÁ Â Â$Â-Â1Â8Â<ÂEÂIÂRÂVÂ]ÂaÂpÂtÂ}ˆŒ•™ÂĸÂĻÂ¯ÂŗÂŧÂĀÂÉÂÍÂŪÂâÂéÂíÂöÂúÂÃÃÃÃÃÃ(Ã,Ã3Ã7ÃFÃJÃQÃUÃ^ÃbÃkÃoÃxÃ|Ã…Ã‰ÃÃ”ÃÃĄÃĒÃŽÃˇÃģÃÄÃČÃĪÃĶÃäÃčÃīÃķÃüÃÄ Ä ÄÄÄ!Ä%Ä.Ä2Ä9Ä=ÄDÄHÄQÄUÄ\Ä`ÄqÄuÄ|ĀďēĜĠħÄĢÄŧÄĀÄĪÄĶÄÜÄāÄįÄëÄôÄøÄÅÅÅÅÅÅ(Å,Å5Å9ÅJÅNÅWÅ[ÅdÅhÅqÅuÅ~Å‚Å‹ÅÅ˜ÅœÅ­ÅąÅēÅžÅĮÅËÅÔÅØÅáÅåÅîÅōÅûÅ˙ÅÆÆÆ!Æ*Æ.Æ7Æ;ÆDÆHÆQÆUÆ^ÆbÆkÆoÆxÆ|ƅƉƚƞƧÆĢƴƸÆÁÆÅÆÎÆŌÆÛÆ߯čÆėÆõÆųÆ ĮĮĮĮ$Į(Į1Į5Į>ĮBĮKĮOĮXĮ\ĮmĮqĮxĮ|Į‹ĮĮ˜ĮœĮĨĮŠĮ˛ĮļĮŋĮÃĮĖĮĐĮŲĮŨĮæĮęĮûĮ˙ĮČ ČČČ"Č&Č/Č3Č<Č@ČQČUČ^ČbČkČoČxČ|Č…Č‰Č’Č–ČŸČŖČŦȰČÁČÅČĖČĐČÜČāČīČķČüČÉÉÉÉ"É+É/É8É<ÉMÉQÉZÉ^ÉoÉsÉzÉ~ɍɑÉĸÉĻɝɺÉēÉžÉĪÉĶÉâÉæÉ÷ÉûÉ ĘĘĘ#Ę,Ę0ĘAĘEĘNĘRĘcĘgĘnĘrĘĘ…ĘŽĘ’ĘŖĘ§Ę°Ę´ĘÅĘÉĘĐĘÔĘãĘįĘđĘôĘũĘË ËËË#Ë,Ë0Ë9Ë=ËFËJË[Ë_ËfËjËyË}˄ˈˑ˕˞ËĸË­ËąËŊËÁËŌËÖËßËãËôËøËĖĖĖĖ-Ė1Ė8Ė<ĖHĖLĖ[Ė_ĖnĖrĖĖ…ĖœĖ Ė¯ĖŗĖÄĖČĖ×ĖÛĖäĖčĖųĖũĖ Í ÍÍÍ/Í3ÍGÍKÍ\Í`ÍoÍsÍ}ÍÍÍ‘ÍŖÍ§Í°Í´ÍŊÍÁÍŌÍÖÍāÍäÍđÍôÍÎ ÎÎÎ,Î0ÎAÎEÎLÎPÎcÎgÎxÎ|΅ΉΐΔÎĨΊθÎŧÎÍÎŅÎÚÎŪÎåÎéÎúÎūÎ ĪĪĪĪ#Ī'Ī.Ī2ĪAĪEĪLĪPĪYĪ]ĪfĪjĪqĪuĪ„ĪˆĪ‘Ī•ĪžĪĸĪĢΝĪĀĪÄĪËĪĪĪŪĪâĪëĪīĪøĪüĪĐ ĐĐĐ'Đ+Đ4Đ8ĐAĐEĐNĐRĐ[Đ_ĐpĐtĐ{ĐĐŽĐ’Đ™ĐĐ¤Đ¨Đ¯ĐŗĐēĐžĐÍĐŅĐŲĐŨĐåĐéĐņĐõĐŅ ŅŅŅŅ!Ņ)Ņ-Ņ=ŅAŅHŅLŅTŅXŅ`ŅdŅlŅpŅxŅ|ŅŒŅŅ™ŅŅŠŅ­ŅšŅŊŅÉŅÍŅŲŅŨŅņŅõŅūŅŌŌŌŌ"Ō.Ō2ŌFŌJŌQŌUŌ\Ō`ŌoŌsŌ|Ō€Ō‰ŌŌžŌĸŌąŌĩŌžŌÂŌËŌĪŌāŌäŌđŌôŌûŌ˙Ō ĶĶĶĶ3Ķ7Ķ@ĶDĶUĶYĶbĶfĶwĶ{͕͙͂͆ĶĨĶŠĶŊĶÁĶŌĶÖĶįĶëĶúĶūĶÔÔÔ Ô'Ô+Ô<Ô@ÔOÔSÔdÔhÔqÔuÔ|Ô€Ô‘Ô•Ô¤Ô5¨Ô5°Ô5´Ô5ÄÔ5ČÔ5ĪÔ5ĶÔ5ÛÔ5ßÔ5īÔ5ķÔ5úÔ5ūÔ5Õ5 Õ5Õ5Õ5$Õ5(Õ5/Õ53Õ5:Õ5>Õ5KÕ5OÕ5]Õ5aÕ5hÕ5lÕ5{Õ5Õ5†Õ5ŠÕ5‘Õ5•Õ5žÕ5ĸÕ5ĢÕ5¯Õ5ļÕ5ēÕ5ÁÕ5ÅÕ5ÔÕ5ØÕ5āÕ5äÕ5ôÕ5øÕ5˙Õ5Ö5 Ö5Ö5Ö5Ö5)Ö5-Ö54Ö58Ö5?Ö5CÖ5JÖ5NÖ5]Ö5aÖ5hÖ5lÖ5yÖ5}Ö5‹Ö5Ö5–Ö5šÖ5ŠÖ5­Ö5ŧÖ5ĀÖ5ĪÖ5ĶÖ5âÖ5æÖ5õÖ5ųÖ5×5×5×5×5#×5'×56×5:×5A×5E×5N×5R×5[×5_×5n×r×y×}׆׊דחמ×ĸ×Ģׯ׸×ŧ×Ã×Į×Î×Ō×á×å×ė×đ×ø×ü×ØØØØØØ'Ø+Ø3Ø7ØGØKØSØWØ_ØcØsØwØ~Ø‚Ø‹ØØ˜ØœØŖØ§Ø°Ø´ØŊØÁØČØĖØÕØŲØāØäØíØņØøØüØŲ ŲŲŲ%Ų)Ų1Ų5Ų=ŲAŲQŲUŲ\Ų`ŲgŲkŲzŲ~Ų…Ų‰Ų’Ų–ŲŸŲŖŲĒŲŽŲˇŲģŲÄŲČŲĪŲĶŲÚŲŪŲįŲëŲōŲöŲ˙ŲÚ ÚÚÚ#Ú*Ú.Ú5Ú9ÚHÚLÚSÚWÚ`ÚdÚmÚqÚxÚ|Ú…Ú‰Ú’Ú–ÚÚĄÚ¨ÚŦÚģÚŋÚČÚĖÚĶÚ×ÚčÚėÚûÚ˙ÚÛ ÛÛÛ Û$Û+Û/Û8Û<ÛEÛIÛPÛTÛ[Û_ÛhÛlÛsÛwۈیەۙÛĸÛĻÛ¯ÛŗÛŧÛĀÛÉÛÍÛÖÛÚÛëÛīÛöÛúÛ Ü Ü܆ÜÜ$܆)Ü-Ü4܆9Ü=ÜD܆QÜUÜ^ÜbÜkÜoÜxÜ|܍ܑܚܞÜĨ܊ܲÜļÜŋÜÃÜĖÜĐÜŲÜŨÜæÜęÜķÜ÷ÜŨŨŨŨ!Ũ%Ũ5Ũ9ŨBŨFŨOŨSŨ\Ũ`ŨiŨmŨvŨzŨƒŨ‡ŨŨ”ŨŨĄŨ˛ŨļŨŋŨÃŨĖŨĐŨŲŨŨŨæŨęŨķŨ÷ŨŪŪ ŪŪ"Ū&Ū/Ū3Ū:Ū>ŪGŪKŪTŪXŪaŪeŪnŪrŪƒŪ‡ŪŽŪ’Ū™ŪŪĻŪĒŪąŪĩŪžŪÂŪŅŪÕŪŨŪáŪéŪíŪõŪųŪßßßß"ß&ß/ß3ß<ß@ßIßMß^ßbßkßoßxß|߅߉ߒߖߧßĢ߲ßļßŋßÃßĖßĐßŲßŨßæßęßûß˙ßā āāā*ā.ā7ā;āDāHāYā]ādāhāwā{ā„āˆā‘ā•āĻāĒāąāĩāžāÂāËāĪāāāäāíāņāúāūāááá á)á-á>áBáIáMá\á`áiámá~á‚á“á—á á¤áĩášáÂáÆá×áÛáâáæáõáųáââââ$â(â9â=âDâHâWâ[âdâhâyâ}â†âŠâ›âŸâĻâĒâšâŊâÄâŅâÕâŪâââéâíâūâã ã ãã!ã*ã.ã5ã9ãJãNãUã]bãfãmãqã‚ã†ã—ã›ãŦã°ãŋãÃãÔãØãáãåãėãđãääää)ä-ä6ä:äAäEäVäZäiämä~ä‚ä‹ää–äšäĢä¯äžäÂäĶä×äčäėäûä˙äå ååå&å*å2å6å>åBåJåNå^åbåjånåvåzå‚å†åŽå’åšåžåĻåĒåēåžåÆåĘåŌåÖåŪåâåęåîåõåųåææææ!æ%æ-æ1æ8æ<æDæHæQæUæ]æaæiæmæ}ææ‹ææ›æŸæŠæ­æšæŊæÉæÍæŲæŨæņæõæüæįį įįį'į+į4į8įAįEįVįZįbįfįnįrįyį}į…į‰į™įį¤į¨į¯įŗįēįžįÍįŅįØįÜįãįįįîįōįųįũįčččč"č&č.č2č9č=čEčIčYč]čečičyč}č…č‰č™čč­čąčÁčÅčÕčŲčāčäčėčđč÷čûč éééé)é-é6é:éKéOéXé\éméqéxé|é‹éé˜éœéŖé§é¸éŧéËéĪé×éÛéëéīéöéúéęęęę!ę%ę.ę2ęCęGęPęTę]ęaęręvę}ęęę”ęĨęŠę˛ęļęŊęÁęŌęÖęåęéęđęôęüęëë ëëëë#ë+ë/ë>ëBëKëOëVëZëcëgëpëtë…ë‰ë˜ëœëŖë§ë¯ëŗëģëŋëÎëŌëŲëŨëäëčë÷ëûëėėėė"ė&ė-ė1ė@ėDėTėXėaėeėvėzėė…ė–ėšėĸėĻėĩėšėÂėÆėÍėŅėŲėŨėåėéėōėöėũėí íííí!í%í-í1í:í>íEíIíRíVí]íaírívííƒíŠíŽí–íšíĸíĻí¯íŗíēížíĮíËíŌíÖíŪíâíęíîí÷íûíîîîîîî/î3î:î>îEîIîQîUî\î`îpîtî|î€îˆîŒîœî î§îĢî˛îļîÅîÉîŌîÖîŨîáîōîöîī īīī%ī)ī8ī<īKīOī^ībīiīmītīxīī…īŒīī—ī›īĒīŽīˇīģīÂīÆīÎīŌīÚīŪīįīëīôīøī˙īđ đđđđ#đ'đ/đ3đ<đ@đGđKđTđXđađeđvđzđđ]Žđ’đ¤đ¨đĩđšđČđĖđÛđßđņđõđņņņņ ņ]-ņ1ņCņGņPņTņcņgņnņrņyņ}ņ„ņˆņ‘ņ•ņœņ ņ¯ņŗņŧņĀņÉņÍņÔņØņáņåņîņōņųņũņō ōōō&ō*ō9ō=ōDōpQōUōgōkōtōxō‡ō‹ō”ō˜ōĄōĨōŽō˛ōÃōĮōÛōßōæōĶķō÷ō˙ōķ ķķķ#ķ2ķ6ķEķIķRķVķ]ķaķrķvķ}ķ]ŠķŽķ ķ¤ķąķĩķÄķČķ×ķÛķíķņķūķôôô$ô(ô1ô5ô<ô@ôQôUôdôhôwô{ôŠôŽô—ô›ô¤ô¨ôšôŊôÅôÉôØôÜôåôéôōôöô˙ôõ õõõõ.õ2õFõJõQõĶ^õbõiõmõ|õ€õ‰õõ”õ˜õ õ¤õŦõ°õÁõÅõĖõĐõßõãõęõîõũõöö ööö&ö]+ö/ö6ö]CöGöQöUögököxö|ö‹öö˜öœö­öąöģöŋöŅöÕöįöëöōö]˙ö÷ ÷÷÷#÷-÷1÷C÷G÷N÷]S÷W÷^÷]k÷o÷€÷„÷‹÷÷˜÷œ÷Ģ÷¯÷ļ÷ē÷É÷Í÷Ö÷Ú÷á÷å÷ö÷ú÷ øø ø$ø-ø1ø8ø<øMøQøcøgøwø{øŒøø™øø¤ø¨øšøŊøĖøĐøßøãøėøđø÷øûø ųųų#ų,ų0ų7ų;ųLųPų_ųcųjųoųsųzų~ų…ų‰ų˜ųœųŖų§ųŽų˛ųšųŊųÄųČųĪųĶųâųæųíųņųøųüų úúúú)ú-ú6ú:úAúEúNúRúcúgúnúrúyú}úŒúúŸúŖú´ú¸úŋúÃúĖúĐú×úÛúėúđúųúũúûûûû$û(û9û:=û:Eû:Iû:Pû:Tû:cû:gû:nû:rû:yû:}û:Œû:û:™û:û:Žû:˛û:Áû:Åû:Ėû]Ņû:Õû:Üû]éû:íû:öû:úû:ü:ü:ü:ü:#ü:'ü:.ü];ü:?ü:Hü:Lü:Sü:Wü:`ü:dü:kü:oü:xü:|ü:ƒü:‡ü:˜ü:œü:Ŗü]°ü:´ü:Ŋü:Áü:Čü:Ėü:Õü:Ųü:āü:äü:õü:ųü:ũ] ũ:ũ:ũ:ũ:%ũ:)ũ::ũ:>ũ:Gũ:Kũ:\ũ:`ũ:iũ:mũ:~ũ:‚ũ:‰ũ:ũ:œũ: ũ:Šũ:­ũ:´ũ:¸ũ:Éũ:Íũ:ÜũMāũMčũMėũMķũM÷ũMūM ūMūMūMūM!ūM1ūM5ūM>ūMBūMSūMWūMfūMjūMqū]vūMzū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=˙MA˙MH˙]U˙MY˙Mb˙Mf˙Mm˙Mq˙Mz˙M~˙M…˙M‰˙Mš˙Mž˙MĨ˙]˛˙Mļ˙Mŋ˙MÃ˙MĘ˙MÎ˙Mß˙Mã˙Mė˙Mđ˙MMMMM#M'M.M2MAMEMNMRMYM]MnMrMO…O”O˜OŸ|¤O¨O¯|ŧOĀOĮpĖOĐO×päQčQīQķQQQ QQQQ-Q1Q8Q<QMQQQZQ^QjQnQzQ~Q’Q–QQĄQ¨QŦQĩQšQČQĖQĶQ×QŪQâQéQíQüQQ]QQQ#Q48BFRVbfpt€„”¨ŦŗˇÆĘŅÕäčīķ"&26JNUY`dsw~‚‰”˜§Ģ˛]ŋÃŌÖāäđô".2FJQUdhos|€“šž¯ŗŊÁÍŅŨáõų +/6:AELP_cj]w{‚†—›ĸĻŽ˛šŊÅÉØÜãįöú%)8<CGPTcgnrƒ‡™¤¨¯ŗŧĀĪĶÚŪåéđô]&*;?FJQU^bimtx‰”˜ŸŖ˛ļŊÁĐÔÛĶāäëĶđôûĶ ,07;JNUYaeuyˆŒžĸŠ­´¸ĀÄÔØßãęîõų     p# ' . p; ? F ]S W g k r v ~ ‚ Š Ž – š Ē Ž ĩ š  Æ Í Ņ Ø Ü í ņ ø ü     ! Ķ& * 1 Ķ> B I M U Y a e l p x | Œ  — ]œ   § ]´ ¸ ŋ ]Ė Đ × ĶÜ ā į Ķô ø ˙     ! ( , ; ? F ]K O V ]c g n ]{  † Š ‘ • ¤ ¨ ˛ ļ Ā Ä Ö Ú á å ô ø ˙     ! 0 4 > B T X _ c j n u y ˆ Œ “ — Ÿ Ŗ Ē Ž ļ ē Ę Î Ũ á č ė ô ø ˙      ) - 4 8 ? C R V ] Ķb f m Ķr v } ĶŠ Ž ˜ œ Ļ Ē ŧ Ā Į Ë Ú Ū å é ō ö ũ 04>BTX_cjnw{‚†•™ ¤Ŧ°¸ŧÃĮĪĶãįîō&*15<@GKTX_cjnƒŠŽ•™ ¤ŗˇÁÅĪĶŨáķ÷ū '+:>MQ[_imƒŠŽ•™ ¤ŗˇžÂĘÎÕŲáåõų #*.59HLSWfjqĶvzĶ†Š‘Ķ–šĄĶޞŧĀŌÖŨáđôû˙ ,0BFMQX\cgvz…Œ—›ĸĻĩšČĖĶ×āäëīöú#'.29=DHW[bĶgkrĶw{‚͇‹’ĶŸŖĒŽļēÁÅÍŅáåė]ņõü]  ]!%,Ķ15<ĶAELĶY]dhos‚†‘šžĨа´ÅÉĐÔÛßîōųĶū ĶĶ&*15=AIMTX`dtx]„ˆ]œ §]´¸ŋĶĖSĐSØSÜSãSįSđSôSSSSSSS&S*S;S?SHSLSUSYS`SdSuSyS€S„S“—ĻĒšŊĪĶãįîō -1@DKOX\cgpt}ˆŒĄĢ¯ļēÄČĪĶŨáëīųũ!+/6:LPW[jnw{„ˆ‘•ĻĒąĩžÂÉÍÖÚãįîō!%.2;?HL]ahluy€„‘šžĨŠēžÅÉØÜåéōö˙#,07;DHQU\`qu|€“Ą¨ŦļēÁÅĪĶŨáëī $(15>BIM^bim|€‰–𪧏ŧÃĮĐÔÛßčėõų $37>BLPW[eipt~‚Œ—›ĨŠŗˇÉÍÖÚãįđôũ!04>BLPZ^hl~‚‹˜œĨОļĮËŌÖåéķ÷!37@DMQZ^gk|€‡‹šž¨ŦļēÄČŌÖčėõų 15<@OS]akoy}‡‹ĄĒގģÄČŅÕæęņõ     $ . 2 < @ J N ` d m q z ~ ‡ ‹ ” ˜ Ą Ĩ ļ ē Á Å Ô Ø â æ đ ô ū ! !!!!0!4!=!A!J!N!W![!d!h!q!u!†!Š!‘!•!¤!¨!˛!ļ!Ā!Ä!Î!Ō!Ü!ā!ę!î!"" """"'"+"4"8"A"E"V"Z"a"e"t"x"‚"†""”"ž"ĸ"Ŧ"°"ē"ž"Đ"Ô"Ũ"á"ę"î"÷"û"####&#*#1#5#D#H#R#V#`#d#n#r#|#€#Š#Ž# #¤#­#ą#ē#ž#Į#Ë#Ô#Ø#á#å#ö#ú#$$$$"$&$0$4$>$B$L$P$Z$^$p$t$}$$Š$Ž$—$›$¤$¨$ą$ĩ$Æ$Ę$Ņ$Õ$ä$č$ō$ö$%%%%% %*%.%@%D%M%Q%Z%^%g%k%t%x%%…%–%š%Ą%Ĩ%´%¸%Â%Æ%Đ%Ô%Ū%â%é%í%÷%û%& &&&)&-&6&:&C&G&P&T&]&a&j&n&&ƒ&Š&Ž&&Ą&Ē&Ž&ˇ&ģ&Ä&Č&Ņ&Õ&Ū&â&ķ&÷&'' ''''''+'4'8'I'M'V'Z'c'g'p't'}''Š'Ž'Ÿ'Ŗ'´'¸'Ö'Ú'é'í'ô'ø'˙'((((#(,(0(9(=(F(J(S(W(`(d(u(y(€(„(‹((ž(ĸ(Š(­(¸(ŧ(Ã(Į(Ō(Ö(Ũ(á(ô(ø())))))(),)5)9)B)F)W)[)b)f)q)u)|)€)“)—)Ÿ)Ŗ)ŗ)ˇ)ž)Â)É)Í)Ô)Ø)į)ë)ķ)÷)˙)* ****#*'*/*3*;*?*G*K*[*_*h*l*u*y*Š*Ž*•*™* *¤*Ģ*¯*ļ*ē*É*Í*Ô*Ø*á*å*ė*đ*˙*+ ++++"+&+5+9+@+D+S+W+^+b+q+u+“+—+Ļ+Ē+Č+Ė+Û+ß+č+ė+õ+ų+,,,,, ,),-,6,:,C,G,P,T,e,i,r,v,,ƒ,Œ,,™,,Ļ,Ē,ŗ,ˇ,Ā,Ä,Í,Ņ,Ú,Ū,ī,ķ,ü,- ----'-+-<-@-H-L-\-`-h-l-|-€-‡-ĶŒ--—-ͤ-¨-ą-ĩ-ž-Â-Ķ-×-Ū-â-ë-ī-ū-. . ...).-.4.8.A.E.T.X._.c.l.p.w.{.Œ..™..Ž.˛.Á.Å.Î.Ō.Û.ß.č.ė.õ.ų.///// /)/-/>/B/`/d/s/w/•/™/¨/Ŧ/Ŋ/Á/Ę/Î/×/Û/ä/č/ņ/õ/ū/0 0000%0)0:0>0F0J0R0V0^0b0j0n0v0z0‚0†0Ž0’0š0ž0Ž0˛0Ã0Į0Đ0Ô0Ũ0á0ę0î0÷0û011111"1+1/1@1D1L1P1X1\1d1h1p1t1|1€1ˆ1Œ1”1˜1 1¤1´1¸1ŋ1Ã1Í1Ņ1Û1ß1æ1ę1ô1ø122222"2,202:2>2E2I2[2_2f2ök2o2v2ö{22†2ö‹22–2ö›2Ÿ2Ļ2öĢ2¯2ļ2öģ2ŋ2Æ2öË2Ī2Ö2öÛ2ß2æ2öķ2÷2ū23 3333%3)33373A3E3O3S3]3a3k3o3y3}33“3œ3 3Š3­3ļ3ē3Ã3Į3Đ3Ô3Ũ3á3ę3î3÷3û3 4444*4.4?4C4U4Y4b4f4m4q4x4|4…4‰44”4›4Ÿ4Ē4Ž4ˇ4ģ4Ä4Č4Ī4Ķ4Ú4Ū4į4ë4ô4ø4555555$5(51555>5B5I5M5^5b5i5…m5q5x5…|5€5‡5…“5—5ž5ĸ5Š5­5´5¸5Į5Ë5Ü5ā5ę5î5õ5ų5 666"64686B6F6M6Q6c6g6v6z6‹66™66¤6¨6ē6ž6Í6Ņ6ã6į6ņ6õ6ü6777%7)7;7?7I7M7T7X7j7n7}77“7—7Ą7Ĩ7Ŧ7°7Â7Æ7Õ7Ų7ë7ī7ų7ũ78888-818C8G8X8\8k8o8v8z88…8Œ88Ÿ8Ŗ8Ē8Ž8ĩ8š8Ā8Ä8Ë8Ī8Ū8â8ë8ī8ø8ü89 9999#9,90999=9N9R9^9b9i9m9x9‘9•9§9Ģ9ŧ9Ā9Ī9Ķ9â9æ9÷9û9 :: :$:5:9:H:L:^:b:s:w:†:Š:œ: :ą:ĩ:Ä:Č:Ú:Ū:ī:ķ:;;;;-;1;@;D;V;Z;k;o;~;‚;”;˜;Š;­;ŧ;Ā;Ō;Ö;į;ë;ú;ū;<<%<)<8<<<N<R<c<g<v<z<Œ<<Ą<Ĩ<´<¸<Į<Ë<Ü<ā<ī<ķ<= ===-=1=@=D=U=Y=h=l=~=‚=“=—=Ļ=Ē=ŧ=Ā=Ņ=Õ=ä=č=ú=ū=>>">&>8><>M>Q>`>d>v>z>‹>>ž>ĸ>Š>­>´>¸>Į>Ë>Ũ>á>ō>ö>? ???-?1?@?D?V?Z?k?o?~?‚?”?˜?Š?­?ŧ?Ā?Ō?Ö?į?ë?ú?ū?@@%@)@8@<@N@R@c@g@v@z@Œ@@Ą@Ĩ@´@¸@Ę@Î@ß@ã@ō@ö@A AA!A0A4ACAGAXA\AkAoAA…A–AšAŠA­AŋAÃAÔAØAįAëAũABBB%B)B;B?BPBTBcBgBnBrBB…B—B›BŦB°BŋBÃBÕBŲBęBîBũBCCC(C,C;C?CQCUCfCjCyC}CC“C¤C¨CˇCģCĘCÎCßCãCōCöCD DD!D0D4DCDGDXD\DkDoDwD{DƒD‡D—D›DŖD§D¯DŗDÃDĮDØDÜDåDéDōDöDE EEE#E'E0E4E=EAEREVE]EĶbEfEmEĶrEvE}EĶŠEŽEŖE§EŽEĶģEŋEČEĖEÕEŲEęEîE FFF#FAFEFTFXF`FdFlFpF€F„FŒFF˜FœFŦF°FēFžFČFĖFŪFâFëFīFøFüF GGGG+G/G9G=GOGSG\G`GqGuG|G€GG“GœG GąGĩGžGÂGÍGŅGÚGŪGīGķGúGĶ˙GH HĶHH"HĶ/H3HDHHHfHjHyH}HŒHHĸHĻH°H´HģHŋHŅHÕHäHčHúHūHI III)I-IQHQLQSQWQaQeQlQpQzQ~Q…Q‰Q“Q—QžQĸQŦQ°QˇQģQÅQÉQĐQÔQæQęQņQõQüQR RRRR#R'R.R2RUEUJUNUUUbUfUnUrUyU}U…U‰U™UU¤UŠU­U´UšUŊUÄUŅUÕUÜUáUåUėUņUõUüU V VVV V$V,V0V@VDVLVPVXV\VlVpVxV|V„VˆV˜VœVŖV§V¯VŗVģVŋVĪVĶVÚVßVãVęVīVķVúVW WWWW"W'W+W2W?WCWKWOWWW[WkWoWvW{WW†WŠW™WW¤W¨W¯WŗWÂWÆWÍWŅWÚWŪWíWņWøWüWX XXX#X'X.X2XAXEXMXQXaXeXlXqXuX|XX…XŒX™XX¤XŠX­X´XšXŊXÄXŅXÕXŨXáXéXíXũXYY YYYY!Y(Y5Y9Y@YEYIYPYUYYY`YmYqYyY}Y…Y‰Y™YYĨYŠYąYĩYÅYÉYŅYÕYŨYáYņYõYüYZZ ZZZ(Z,Z3Z8Z[B[I[M[\[`[g[k[t[x[[ƒ[’[–[[Ą[°[´[ŧ[Ā[Đ[Ô[ä[č[\\\\7\;\J\N\U\Z\^\e\j\n\u\z\~\…\’\–\\ĸ\Ļ\­\˛\ļ\Ŋ\Â\Æ\Í\Ú\Ū\æ\ę\ņ\õ\ũ\]]]]!]%],]1]5]<]A]E]L]Y]]]d]i]m]t]y]}]„]‰]]”]Ą]Ĩ]­]ą]¸]ŧ]Ä]Č]Ø]Ü]ä]č]đ]ô]ü]^^^^ ^(^,^4^8^H^L^S^W^_^c^k^o^^ƒ^Š^^“^š^Ÿ^Ŗ^Ē^ˇ^ģ^Â^Į^Ë^Ō^×^Û^â^ī^ķ^û^˙^_ ___&_+_/_6_:_A_E_T_X___c_j_n_}__ˆ_Œ_•_™_ _¤_ŗ_ˇ_ž_Â_Ë_Ī_Ö_Ú_é_í_ô_ø_` ```'`+`4`8`A`E`V`Z`a`e`l`p`w`{`ƒ`‡`–`š`Ŗ`§`¸`ŧ`Î`Ō`Ú`Ū`æ`ę`ú`ū`a] aaa]aa%a]2a6a=aAaHaLa[a_anaraya]~a‚a‰a]–ašaĄaĨaŦa°aŋaÃaĘaÎa×aÛaäača÷aûab]b bb]b#b2b6b=bAbJbNbWb[bjbnbwb{b„bˆb™bb¤b¨bˇbģbÄbČbŲbŨbėbđb˙bc cccc*c.c5c9cBcFcMcQcbcfcocsc„cˆcc“cĸcĻc¯cŗcÄcČcācäcķc÷cdd"d&d5d9dHdLdSd]`dddkdoddƒd“d—d¨dŦdĩdšdĀdÄdÕdŲdčdėdôdødee eeee.e2e9e=eJeNe[e_efejewe{eˆeŒe›eŸeĻeĒe´e¸eÂeÆeĐeÔeŪeâeéeíe÷eûef fff!f%f7f;fDfHfQfUf^fbfkfofxf|f…f‰f’f–fŸfŖf´f¸fŋfÃfĪfĶfâfæfífņfgggg%g)g0g4gCgGgNgRg_gcgpgtg{ggŒgggĄg¨gŦgŗgˇgžgÂgÉgÍgÜgāgégígúgūg hhhh)h-h:h>hGhKhThXhahehnhrhƒh‡hŽh’hĸhĻh­hąhĀhÄhÍhŅhâhæhíhņhiiii$i(i1i5iFiJiQiUidihioisi€i„i‘i•iœi i­iąižiÂiÉiÍiÔiØißiãięiîiũij jjjj,j0j9j=jJjNj[j_jhjljujyj‚j†jj“j¤j¨j¯jŗjÃjĮjÎjŌjájåjîjōjkkkk!k%k/k3kEkIkRkVkgkkkrkvk…k‰kk”kžkĸkŦk°kēkžkČkĖkĶk×kákåkīkķkũkl ll!l%l.l2l;l?lHlLlUlYlblflolsl|l€l‰llžlĸlŠl­lšlŊlĖlĐl×lÛlílņlúlūlmmmm-m1m:m>mGmKmTmXmamemnmrm{mmˆmŒmmĄmĒmŽmˇmģmÄmČmŅmÕmŪmâmëmīmømüm nnnn(n,n;n?nFnJn[n_nhnln}nnˆnŒn›nŸn¨nŦnĩnšnÂnÆnĪnĶnÜnānņnõnūno oooo%o)o2o6oGoKoRoVobofouoyo‚o†o—o›o¤o¨ošoŊoÄoČo×oÛoäočoņoõoūop pppp-p1p9p=pMpQpZp^pgpkptpxpp…pŽp’pŖp§p°p´pŊpÁpĘpÎp×pÛpäpčpųpũpqqqq#q'q.q2q9q=qDqHqOqSqZq^qeqiqpqtq{qqŽq’q›qŸq°q´qÁqÅqÚqŪqåqéqđqôqûq˙qrrrr(r,r5r9rJrNrUrYr`rdrkror~r‚r‹rr˜rœrĨrŠrēržrĮrËrÔrØrárårörúrsssss!s2s6s=sAsPsTs[s_shslsusys‚s†s—s›sĸs]§sĢs˛s]ˇsģsÂs]ĮsËsŌs]×sÛsâs]īsķsûs˙sttt t)t-t6t:tKtOtVt][t_tft]ktotvt]{tt†t]“t—tĻtĒtŗtˇtĀtÄtÍtŅtâtætītķtütu u uu"u)u-uwGwKw\w`wiwmw~w‚w‰wwœw wŠw­wžwÂwËwĪwāwäwëwīwūwx xx x$x-x1xBxFxMxQx`xdxuxyx‚x†xx‘xĸxĻxĩxšxĘxÎx×xÛxâxæx÷xûx yyy#y,y0y7y;yLyPy_ycytyxyy…yŒyyĄyĨy´y¸yÉyÍyŪyâyņyõyz zzzz"z3z7zFzJz[z_zpztzƒz‡z˜zœzĨzŠz°z´zÅzÉzØzÜzæzęzüz{ { {{"{){-{<{@{Q{U{^{b{i{m{~{‚{‘{•{Ļ{Ē{ģ{ŋ{Î{Ō{ä{č{ō{ö{ũ{|||&|*|<|@|I|M|T|X|i|m|||€|’|–|§|Ģ|ē|ž|Ī|Ķ|ä|č|÷|û| }}}}%})}:}>}M}Q}c}g}x}|}‹}}Ą}Ĩ}Ž}˛}š}Ŋ}Î}Ō}á}å}÷}û} ~~~#~4~8~A~E~L~P~a~e~t~x~‰~~ž~ĸ~ą~ĩ~Į~Ë~Ü~ā~ī~ķ~ !26EIPT[_nr|€‡‹•™Ŗ§ąĩŋÃÍŅÛßņõü€ €€€€#€'€1€5€?€C€M€Q€[€_€q€u€~€‚€‹€€˜€œ€Ĩ€Š€˛€ļ€ŋ€ÀԀ؀߀ã€ī€ķ€&*37HLSWfjqu~‚Œ—›¤¨˛ļŋÁˁЁ؁Ũæęķ÷‚ ‚‚‚"‚&‚/‚3‚<‚@‚I‚M‚V‚Z‚c‚g‚p‚t‚}‚‚’‚–‚‚Ą‚­‚ą‚Ā‚Ă΂Ō‚ä‚č‚ņ‚õ‚ƒ ƒƒƒ$ƒ(ƒ/ƒ3ƒ<ƒ@ƒIƒMƒTƒXƒaƒeƒnƒrƒ{ƒƒˆƒŒƒ•ƒ™ƒǃރˇƒģƒăȃ҃Ճۃâƒëƒīƒøƒüƒ„ „„„%„)„5„9„H„L„U„Y„j„n„w„{„Œ„„—„›„DŽބĩ„š„„Ƅ΄̈́ڄŪ„į„ë„ô„ø„………………0…4…=…A…J…N…W…[…d…h…q…u…~…‚…‹…… …¤…Ģ…¯…ģ…ŋ…΅Ō…ۅ߅đ…ô…ũ…††††!†0†4†=†A†J†N†W†[†d†h†q†u†~†‚†“†—† †¤†­†ą†ē†ž†Į†ˆԆ؆á†å†ö†ú†‡‡‡‡$‡(‡/‡3‡D‡H‡Q‡U‡f‡j‡q‡u‡„‡ˆ‡‘‡•‡ž‡ĸ‡̇¯‡¸‡ŧ‡͇҇ڇŪ‡į‡ë‡ô‡ø‡ˆˆˆˆ!ˆ%ˆ1ˆ5ˆDˆHˆQˆUˆfˆjˆsˆwˆˆˆŒˆ“ˆ—ˆψLjąˆĩˆŧˆˆĮˆˈۈ߈čˆėˆõˆųˆ‰‰‰‰$‰(‰/‰3‰:‰>‰M‰Q‰X‰]]‰a‰h‰]u‰y‰ˆ‰Œ‰•‰™‰ĸ‰ω¯‰ŗ‰ĉȉ҉ՉŪ‰â‰ë‰ī‰ŠŠ ŠŠŠ"Š*Š.Š=ŠAŠHŠLŠ[Š_ŠpŠtŠ{Š]€Š„Š‹Š]˜ŠœŠŖŠ§ŠļŠēŠĊȊԊ֊āŠäŠöŠúŠ‹]‹ ‹‹]‹"‹1‹5‹?‹C‹M‹Q‹[‹_‹q‹u‹~‹‚‹‹‹‹˜‹œ‹­‹ą‹¸‹ŧ‹ˋĪ‹ā‹ä‹í‹ņ‹ø‹ü‹ ŒŒ Œ$Œ5Œ9ŒJŒNŒ]ŒaŒsŒwŒŒ…ŒŒŒŒĸŒόĩŒšŒˌΌ،܌ãŒįŒøŒüŒ !%6:IM^bsw†Š›Ÿ°´ÍĮ؍܍åéđôŽ ŽŽŽ-Ž1ŽBŽFŽUŽYŽjŽnŽwŽ{ނކޗޛŽĒŽŽŽŋŽÎԎ؎įŽëŽũŽ%):>GKRVgkz~“œ §ĢŧĀĪĶڏ]ߏãę]īķú] !(,37FJTX_cmq{‰—›ĨАŗˇɐ͐Ԑؐāäėđøü‘‘‘‘‘ ‘(‘,‘<‘@‘G‘K‘V‘Z‘c‘g‘p‘t‘}‘‘’‘–‘‘Ą‘Ģ‘¯‘š‘Ŋ‘Į‘ˑՑŲ‘ā‘ä‘î‘ō‘ü‘’ ’’ ’$’-’1’:’>’G’K’T’X’a’e’n’r’{’’’”’›’Ÿ’Ģ’¯’ž’’ɒ͒ߒã’ė’đ’““ “““#“+“/“7“;“C“G“O“S“[“_“g“k“s“w““ƒ“““—“ž“ĸ“­“ą“ē“ž“Į“˓ԓؓá“å“ö“ú“”””””!”+”/”9”=”D”H”R”V”`”d”n”r”„”ˆ”‘”•”ž”ĸ”Ģ”¯”¸”ŧ”ŔɔŌ”֔ߔã”ô”ø”˙”•••"•&•-•1•C•G•P•T•e•i•p•t•ƒ•‡••“•›•Ÿ•§•Ģ•ŗ•ˇ•ŋ•Õ˕Ī•וەã•į•÷•û•––––&–*–1–5–?–C–M–Q–[–_–f–j–t–x–‚–†––‘–›–Ÿ–Š–­–ˇ–ģ–͖Ņ–ؖܖå–é–ō–ö–˙–— ————&—*—1—5—>—B—K—O—X—\—m—q—x—|—‹——™——§—Ģ—ĩ—š—×Į—Ņ—՗ߗã—í—ņ—˜˜˜˜˜!˜*˜.˜7˜;˜D˜H˜Q˜U˜^˜b˜s˜w˜~˜‚˜‘˜•˜œ˜ ˜ǘޘ¸˜ŧ˜ƘʘҘ՘ߘã˜í˜ņ˜û˜˙˜ ™ ™™™-™1™:™>™G™K™T™X™a™e™n™r™{™™ˆ™Œ™•™™™Ē™Ž™ĩ™š™řəؙܙã™į™ø™ü™š ššš%š)š8š<šDšHšPšTš\š`šhšlštšxšˆšŒš—š›šǚޚĩššššƚΚ͚ܚāšįšëšôšøš˙š› ››››&›*›;›?›H›L›U›Y›b›f›o›s›|›€›‰››ž›ĸ›Š›­›ŧ›Ā›ɛ֛͛ڛã›į›đ›ô›ũ›œ œœœ#œ,œ0œ9œ=œFœJœSœWœ`œdœmœqœ‚œ†œœ‘œ œ¤œŦœ°œ¸œŧœĜȜ؜ܜįœëœúœūœ #,07;BFOS\`imvz‹˜œĨŠ˛ļŋÝĖНŲŨæęķ÷ž žžž&ž*ž3ž7ž@žDžMžQžZž^žgžkžtžxžž…ž–žšžŖž§ž°ž´žŊžÁžʞΞמ۞äžčžņžõžŸ ŸŸŸ$Ÿ(Ÿ/Ÿ3ŸBŸFŸOŸSŸdŸhŸoŸsŸ‚Ÿ†ŸŸ“Ÿ¤Ÿ¨ŸąŸĩŸƟƟҟ՟äŸčŸøŸüŸ     ! % . 2 ; ? H L ] a j n w { „ ˆ ‘ • ž ĸ ŗ ˇ ž  É Í Ô Ø į ë ô ø ĄĄĄĄĄĄ(Ą,Ą=ĄAĄJĄNĄWĄ[ĄdĄhĄqĄuĄ~Ą‚Ą“Ą—ĄžĄĸĄąĄĩĄžĄÂĄËĄĪĄØĄÜĄíĄņĄúĄūĄĸ ĸĸĸ)ĸ-ĸ4ĸ8ĸDĸHĸWĸ[ĸdĸhĸyĸ}ĸ†ĸŠĸ›ĸŸĸĻĸĒĸšĸŊĸÅĸÉĸØĸÜĸãĸįĸīĸķĸŖŖŖŖ%Ŗ)Ŗ3Ŗ7ŖNŖRŖYŖ]ŖnŖrŖ‚Ŗ†Ŗ™ŖŖ˛ŖļŖĮŖËŖâŖæŖíŖ]ōŖöŖũŖ] ¤¤¤¤(¤,¤6¤:¤D¤H¤R¤V¤h¤l¤v¤z¤„¤ˆ¤’¤–¤¨¤Ŧ¤ĩ¤š¤¤ƤΤͤä¤č¤ī¤ķ¤ĨĨĨĨ%Ĩ)Ĩ0Ĩ4ĨEĨIĨXĨ\ĨmĨqĨ‚Ĩ†Ĩ•Ĩ™ĨĢĨ¯ĨšĨŊĨÄĨČĨÚĨŪĨíĨņĨĻĻĻĻĻĻ/Ļ3ĻBĻFĻWĻ[ĻlĻpĻĻƒĻ”Ļ˜ĻŠĻ­ĻŧĻĀĻŌĻÖĻįĻëĻúĻūϧ§§!§(§,§=§A§P§T§f§j§{§§ާ’§Ŗ§§§¸§ŧ§˧Χā§ä§õ§ų§¨ ¨¨!¨*¨.¨5¨9¨J¨N¨]¨a¨r¨v¨‡¨‹¨š¨ž¨¯¨ŗ¨ŧ¨Į¨˨ܨā¨ī¨ķ¨ŠŠŠŠŠ Š1Š5ŠDŠHŠZŠ^ŠgŠkŠrŠvŠ‡Š‹ŠšŠžŠ°Š´ŠÅŠÉŠØŠÜŠîŠōŠûŠ˙ŠĒ ĒĒĒ.Ē2Ē:Ē>ĒFĒJĒQĒUĒ^ĒbĒkĒoĒxĒ|Ē…Ē‰Ē’Ē–ĒžĒĸĒĢǝĒĀĒÄĒÍĒŅĒØĒÜĒåĒéĒõĒųĒĢ ĢĢĢ%Ģ)Ģ5Ģ9ĢBĢFĢRĢVĢbĢfĢzĢ~ĢˆĢŒĢ“Ģ—ĢĄĢĨ̝̺ĢŊĢÁĢËĢĪĢŲĢŨĢäĢčĢōĢöĢũĢŦŦŦ)Ŧ-Ŧ7Ŧ;ŦBŦFŦXŦ\ŦkŦoŦvŦ]{ŦŦ†Ŧ]‹ŦŦ–Ŧ]ŖŦ§ŦˇŦģŦÃŦĮŦĪŦĶŦãŦįŦņŦõŦüŦ­ ­­­­#­'­1­5­?­C­M­Q­[­_­i­m­­ƒ­­‘­˜­œ­Ļ­Ē­ą­ĩ­ŋ­íÍ­Ņ­Û­ß­é­í­÷­û­Ž ŽŽŽ'Ž+Ž;Ž?ŽIŽMŽTŽXŽbŽfŽmŽqŽ{ŽŽ‰ŽŽ—Ž›ŽĨŽŠŽŗŽˇŽÁŽÅŽ׎ÛŽâŽæŽđŽôŽūޝ ¯¯¯¯(¯,¯3¯7¯A¯E¯L¯P¯b¯f¯x¯|¯„¯ˆ¯˜¯œ¯ϝǝą¯ĩ¯Ŋ¯Á¯ɯͯׯÛ¯å¯é¯ķ¯÷¯°°°°%°)°2°6°B°F°R°V°`°d°n°r°|°€°аް˜°œ°ް˛°ðĮ°ҰÕ°ܰā°ō°ö°ũ°ą ąąąą$ą(ą2ą6ą@ąDąSąWąaąeąoąsą}ąą‹ąąĄąĨąŦą°ąŋąÃąÍąŅąÛąßąéąíą÷ąûą ˛˛˛˛)˛-˛7˛;˛E˛I˛[˛_˛i˛m˛w˛{˛…˛‰˛“˛—˛О­˛ˇ˛ģ˛Şɲ͞ײá˛å˛÷˛û˛ŗŗŗŗ#ŗ'ŗ1ŗ5ŗ?ŗCŗMŗQŗcŗgŗqŗuŗŗƒŗŗ‘ŗ›ŗŸŗąŗĩŗŋŗÃŗÍŗŅŗÛŗßŗéŗíŗ˙ŗ´ ´´´´)´-´7´;´M´Q´[´_´f´j´t´x´‚´†´´”´ž´ĸ´´´¸´´Æ´Đ´Ô´Ū´â´ė´đ´ĩĩĩĩĩ"ĩ,ĩ0ĩ:ĩ>ĩHĩLĩ^ĩbĩlĩpĩzĩ~ĩˆĩŒĩ–ĩšĩŦĩ°ĩˇĩģĩĘĩÎĩØĩÜĩæĩęĩôĩøĩ ļļļļ&ļ*ļ4ļ8ļJļNļUļYļhļlļ~ļ‚ļŒļļ—ļ›ļ­ļąļĀļÄļÖļÚļäļčļīļķļˇ ˇˇˇ.ˇ2ˇ<ˇ@ˇGˇKˇ]ˇaˇpˇ[tˇ[|ˇ[€ˇ[‡ˇ[‹ˇ[’ˇ[–ˇ[ˇ[Ąˇ[¨ˇ[Ŧˇ[ŗˇ[ˇˇ[žˇ[¡[ɡ[͡[Ôˇ[Øˇ[įˇ[ëˇ[ûˇ[˙ˇ[¸[ ¸[¸[¸[.¸[2¸[A¸[E¸[L¸[P¸[a¸[e¸[m¸[q¸[y¸[}¸[…¸[‰¸[™¸[¸[¤¸[¨¸[¯¸[ŗ¸[¸[Ƹ[͸[ҏ[Ú¸[Ū¸[į¸[ë¸[ō¸[ö¸[š[ š[š[š[%š[)š[:š[>š[Mš[Qš[Zš[^š[eš[iš[rš[vš[‡š[‹š[”š[˜š[Šš[­š[ļš[ēš[Ëš[Īš[Öš[Úš[éš[íš[ūš[ē[ ē[ē[ē[ē[+ē[/ē[>ē[Bē[Mē[Qē[\ē[`ē[sē[wē[ē[ƒē[‹ē[ē[—ē[›ē[Ŗē[§ē[ˇē[ģē[Ãē[Įē[Īē[Ķē[Úē[Ūē[æē[ęē[ōē[öē[ūē[ģ[ ģ[ģ[ģ[ģ["ģ[&ģ[.ģ[2ģ[:ģ[>ģ[Fģ[Jģ[Rģ[Vģ[^ģ[bģ[rģ[vģ[}ģĶ‚ģ[†ģ[ģĶ’ģ[–ģ[ģĶĒģ[Žģ[ļģ[ēģ[Âģ[Æģ[Öģ[Úģ[âģ[æģ[îģ[ōģ[ŧ[ŧ[ŧ[ŧ[ŧ[ŧ[$ŧ[(ŧ[7ŧ[;ŧ[BŧĶGŧ[Kŧ[RŧĶWŧ[[ŧ[bŧĶoŧ[sŧ[zŧĶŧ[ƒŧ[ŠŧĶŧ[“ŧ[šŧĶŸŧ[Ŗŧ[Ēŧ͝ŧ[ŗŧ[ēŧĶĮŧ[Ëŧ[Ķŧ[×ŧ[ßŧ[ãŧ[ķŧ[÷ŧ[Ŋ[ Ŋ[Ŋ[Ŋ[/Ŋ[3Ŋ[CŊ[GŊ[OŊ[SŊ[[Ŋ[_Ŋ[oŊ[sŊ[€Ŋ[„Ŋ[‹Ŋ[Ŋ[—Ŋ[›Ŋ[ŖŊ[§Ŋ[ŽŊ[˛Ŋ[ēŊ[žŊ[ÆŊ[ĘŊ[ŌŊ[ÖŊ[ŨŊ[áŊ[ņŊ[õŊ[üŊ[ž[ž[ ž[ž[ž[ ž[$ž[,ž[0ž[8ž[<ž[Dž[Hž[Pž[Tž[dž[hž[wž[{ž[ƒž[‡ž[ž[“ž[›ž[Ÿž[§ž[Ģž[ŗž[ˇž[ŋž[Þ[Ëž[Īž[ßž[ãž[ęž[îž[öž[úž[ŋ[ŋ[ ŋ[ŋ[ŋ[ŋ[%ŋ[)ŋ[9ŋ[=ŋ[Lŋ[Pŋ[Xŋ[\ŋ[dŋ[hŋ[pŋ[tŋ[|ŋ[€ŋ[ŋ[”ŋ[œŋ[ ŋ[¨ŋ[Ŧŋ[ŧŋ[Āŋ[Įŋ[Ëŋ[Ķŋ[×ŋ[ßŋ[ãŋ[ëŋ[īŋ[÷ŋ[ûŋ[ Ā[Ā[Ā[Ā["Ā[&Ā[.Ā[2Ā[:Ā[>Ā[FĀ[JĀ[ZĀ[^Ā[fĀ[jĀ[rĀ[vĀ[~Ā[‚Ā[ŠĀ[ŽĀ[žĀ[ĸĀ[ŠĀ[­Ā[´Ā[¸Ā[ŋĀ[ÃĀ[ĘĀ[ÎĀ[ŨĀ[áĀ[čĀ[ėĀ[ķĀ[÷Ā[ūĀ[Á[ Á[ Á[Á[ Á['Á[+Á[4Á[8Á[?Á[CÁ[JÁ[NÁ[UÁ[YÁ[hÁ[lÁ[sÁ[wÁ[€Á[„Á[‹Á[Á[–Á[šÁ[ŠÁ[­Á[´Á[¸Á[ĮÁ[ËÁ[ĶÁ[×Á[ßÁ[ãÁ[ķÁ[÷Á[˙Á[Â[Â[Â[&Â[*Â[1Â[5Â[DÂ[HÂ[OÂ[SÂ[\Â[`Â[gÂ[kÂ[|Â[€Â[‰Â[Â[–Â[šÂ[ĄÂ[ĨÂ[ŽÂ[˛Â[ÃÂ[ĮÂ[ÖÂ[ÚÂ[ęÂ[îÂ[ūÂ[Ã[ Ã[ Ã[Ã[!Ã[1Ã[5Ã[=Ã[AÃ[IÃ[MÃ[]Ã[aÃ[qÃ[uÃ[…Ã[‰Ã[’Ã[–Ã[Ã[ĄÃ[˛Ã[ļÃ[ÅÃÉÃŌÃÖÃßÃãÃėÃđÃ÷Ãûà ÄÄÄÄ&Ä*Ä1Ä5Ä>ÄBÄIÄMÄVÄZÄaÄeÄnÄrÄ{ÄĆĊēėĠĤÄĢįĸÄŧÄÃÄĮÄĐÄÔÄÛÄßÄčÄėÄõÄųÄÅÅ ÅÅ Å$Å-Å1Å:Å>ÅOÅSÅ\Å`ÅiÅmÅvÅzÅ‹ÅÅ–ÅšÅĄÅĨÅŽÅ˛ÅŧÅĀÅĮÅËÅŌÅÖÅāÅäÅķÅ÷Å˙ÅÆ ÆÆÆÆ Æ$Æ,Æ0Æ8Æ<ÆDÆHÆOÆSÆbÆfÆoÆsÆzÆ~Æ‡Æ‹Æ’Æ–ÆŸÆŖÆĒÆŽÆˇÆģÆÄÆČÆĪÆĶÆÜÆāÆéÆíÆôÆøÆĮĮ ĮĮĮĮ$Į(Į1Į5Į>ĮBĮIĮMĮVĮZĮiĮmĮtĮxĮĮƒĮŠĮŽĮ•Į™Į Į¤ĮĢĮ¯ĮļĮēĮÁĮÅĮĖĮĐĮßĮãĮęĮîĮúĮūĮ ČČČČ-Č1Č8Č<ČCČGČVČZČaČeČlČpČwČ{ČŠČŽČ•Č]šČžČĨČ]ĒČŽČĩČ]ēČžČÅČ]ŌČÖČßČãČėČđČ÷ČûČÉÉÉÉÉ É1É5É>ÉBÉKÉOÉVÉZÉcÉgÉnÉrÉÉ…ÉŽÉ’É™ÉÉŽÉ˛ÉģÉŋÉÆÉĘÉÛÉßÉîÉōÉûÉ˙ÉĘĘĘ!Ę*Ę.Ę5Ę9ĘJĘNĘ]ĘaĘjĘnĘwĘ{ĘŒĘĘ—Ę›ĘŖĘ§Ę¯ĘŗĘģĘŋĘÎĘŌĘŲĘŨĘäĘčĘņĘõĘ˙ĘË ËËËË+Ë/Ë6Ë];Ë?ËFË]KËOËVË]cËgËnËrËzË~Ë‡Ë‹Ë”Ë˜ËĄËĨËŦ˰˸ËŧËÄËČËĐËÔËŨËáËęËîË˙ËĖ ĖĖĖĖ$Ė(Ė1Ė5Ė<Ė@ĖIĖMĖVĖZĖaĖeĖnĖrĖyĖ}Ė†ĖŠĖ‘Ė•ĖžĖĸĖŠĖ­ĖžĖÂĖËĖĪĖÖĖÚĖëĖīĖöĖúĖÍÍÍÍ*Í.Í7Í;ÍDÍHÍQÍUÍ^ÍbÍsÍẁ̈́͋͏͘͜ÍĨ͊ͲÍļÍŊÍÁÍĘÍÎÍ×ÍÛÍėÍđÍ÷ÍûÍ ÎÎÎ#Î,Î0Î7Î;ÎLÎPÎ_ÎcÎtÎxÎÎ…ÎŒÎÎĄÎĨδθÎÁÎÅÎÎÎŌÎŲÎŨÎæÎęÎķÎ÷ÎūÎĪ ĪĪĪĪ#Ī'Ī0Ī4ĪEĪIĪRĪVĪ_ĪcĪlĪpĪyĪ}ĪŽĪ’ĪĄĪĨĪŽĪ˛ĪģĪŋĪČĪĖĪÕĪŲĪâĪæĪīĪķĪüĪĐ Đ ĐĐĐ#Đ'Đ8Đ<ĐEĐIĐRĐVĐ_ĐcĐlĐpĐĐ…ĐŒĐĐ—Đ›ĐĸĐĻĐĩĐšĐÂĐÆĐĪĐĶĐÜĐāĐéĐíĐöĐúĐŅŅŅŅŅ!Ņ*Ņ.Ņ7Ņ;ŅLŅPŅYŅ]ŅfŅjŅsŅwҀ҄ҕҙҍŅŦŅĩŅšŅÂŅÆŅÍŅŅŅÚŅŪŅįŅëŅōŅöŅ˙ŅŌ ŌŌŌŌ$Ō(Ō9Ō=ŌDŌHŌOŌSŌZŌ^ŌmŌqŌ€Ō„Ō‹ŌŌ˜ŌœŌĢŌ¯ŌļŌēŌÃŌĮŌÎŌŌŌãŌįŌđŌôŌũŌĶĶ ĶĶ!Ķ(Ķ,Ķ;Ķ?ĶHĶLĶUĶYĶ`ĶdĶmĶqĶzĶ~Ķ‡Ķ‹Ķ”Ķ˜ĶŸĶŖĶŦĶ°ĶšĶŊĶÄĶČĶŅĶÕĶæĶęĶúĶūĶÔÔ!Ô%Ô,Ô0Ô?ÔCÔ[Ô_ÔnÔrÔyÔ}Ô„ÔˆÔ‘Ô•ÔŸÔŖÔĒÔŽÔĩÔšÔËÔĪÔØÔÜÔåÔéÔđÔôÔũÔÕ ÕÕÕÕ"Õ&Õ/Õ3Õ:Õ>ÕGÕKÕ\Õ`ÕgÕkÕzÕ~Õ‡Õ‹Õ”Õ˜ÕĄÕĨÕŽÕ˛ÕÃÕĮÕĐÕÔÕŨÕáÕōÕöÕūÕÖÖÖÖ#Ö,Ö0ÖAÖEÖMÖQÖaÖeÖnÖrÖ{Ö֐ְִ֔֜֠ÖģÖŋÖČÖĖÖÕÖŲÖęÖîÖõÖųÖ×××××#×+×/×>×B×K×O×X×\×m×q×x×|׃ׇ׎ג×ĸ×Ļם׺×Ä×Č×××Û×ę×î×õ×ų×ØØØØ Ø$Ø-Ø1Ø8Ø<ØMØQØZØ^ØgØkØrØv؇؋ؒؖØĨØŠØ˛ØļØĮØËØãØįØöØúØŲŲ%Ų)Ų:Ų>ŲGŲKŲRŲVŲgŲkŲzŲ~ŲŲ‘ŲšŲžŲĨŲŠŲēŲžŲÍŲŅŲØŲÜŲãŲįŲņŲõŲüŲÚÚÚÚ!Ú(Ú,Ú6Ú:ÚAÚEÚWÚ[ÚbÚfÚmÚqÚ€Ú„ÚŽÚ’ÚŸÚŖÚ­ÚąÚÆÚĘÚŅÚÕÚäÚčÚ÷ÚûÚÛÛÛÛ"Û&Û7Û;ÛBÛFÛUÛYÛbÛfÛmÛqÛ‚Û†Û•Û™Û Û¤ÛŽÛ˛ÛÁÛÅÛ×ÛÛÛëÛīÛÜÜ ÜÜÜÜ,Ü^0Ü^@Ü^DÜ^TÜ^XÜ^_Ü^cÜ^rÜ^vÜ^}Ü ‚Ü^†Ü^Ü šÜ^žÜ^ĨÜ^ŠÜ^°Ü^´Ü^ģÜ^ŋÜ^ÎÜ^ŌÜ^ÛÜ^ßÜ^čÜ^ėÜ^õÜ^ųÜ^ Ũ^Ũ^Ũ^Ũ^(Ũ^,Ũ^3Ũ-8Ũ^<Ũ^CŨ-HŨ^LŨ^SŨ-XŨ^\Ũ^cŨ-pŨ^tŨ^ƒŨ^‡Ũ^–Ũ^šŨ^ŠŨ^­Ũ^´Ũ^¸Ũ^ŋŨ^ÃŨ^ĖŨ^ĐŨ^ßŨ^ãŨ^ęŨ^îŨ^÷Ũ^ûŨ^Ū^Ū^Ū^Ū^$Ū^(Ū^9Ū^=Ū^DŪ^HŪ^WŪ^[Ū^cŪ^gŪ^nŪ^rŪ^{Ū^Ū^†Ū^ŠŪ^‘Ū^•Ū^¤Ū^¨Ū^ąŪ^ĩŪ^žŪ^ÂŪ^ËŪ^ĪŪ^ØŪ^ÜŪ^íŪ^ņŪ^øŪ-ũŪ^ß^ß- ß^ß^ß-ß^!ß^(ß--ß^1ß^8ß-Eß^Iß^Pß-]ß^aß^rß^vß^…ß^‰ß^’ß^–ß^§ß^Ģß^´ß^¸ß^Áß^Åß^Ėß^Đß^áß^åß^ėß^đß^üß^ā^ā^ā^ā^ ā^'ā^+ā^<ā^@ā^Oā^Sā^[ā^_ā^gā^kā^{ā^ā^‡ā^‹ā^›ā^Ÿā^Ļā^Ēā^šā^Ŋā^Îā^Ōā^Ûā^ßā^æā^ęā^ûā^˙ā^á`á`á`á`&á`*á`1á`5á`Fá`Já`Qá`Uá`dá`há`qá`uá`†á`Šá`‘á`•á`¤á`¨á`¯á-´á`¸á`ŋá-Ėá`Đá`×á`Ûá`ãá`įá`÷á`ûá`â`â`â`â` â`$â`+â`/â`8â`<â`Kâ`Oâ`Vâ`Zâ`câ`gâ`nâ`râ`ƒâ`‡â`â`”â`Ĩâ`Šâ`°â`´â`Ãâ`Įâ`Īâ`Ķâ`Úâ`Ūâ`įâ`ëâ`ōâ`öâ`ũâ`ã`ã`ã`ã`!ã`*ã`.ã`7ã`;ã`Lã`Pã`Wã-\ã``ã`gã-lã`pã`wã-|ã`€ã`‡ã-”ã`˜ã`Ÿã-Ŧã`°ã`Áã`Åã`Ôã`Øã`áã`åã`öã`úã`ä`ä`ä`ä`ä`ä`0ä`4ä`;ä`?ä`Nä`Rä`[ä`_ä`fä`jä`{ä`ä`Žä`’ä`šä`žä`Ļä`Ēä`ēä`žä`Íä`Ņä`āäbääbėäbđäb÷äbûäbåbåbåbåb"åb&åb/åb3åb:åb>åbOåbSåb\åb`åbiåbmåbvåbzåb‹åbåb˜åbœåbĨåbŠåb°åb´åbÅåbÉåbĐåbÔåbãådįådîådōådædæd ædædædæd$æd(æd8æd<ædCædGædXæd\ædhædlæ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/įd3įdGįdKįdRįdVįdhįdlįdsįdwįd‰įdįdŸįdŖįdĒįdŽįdČįdĖįdĶįd×įdéįdíįd˙įdčd čdčd(čd,čd4čd8čdHčdLčdSčdWčd_čdcčdjčdnčdvčdzč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.éd2éd9éd=édFédJédQédUéd\éd`édoédsédzéd~éd…éd‰édéd”édŖéd§édŽéd˛édÁédÅédÍédŅédáédåédõédųédędęd(ęd,ędHędLęd[ęd_ędfędjędqęduęd„ęˆę‘ę•ę ę¤ęˇęģęĮęËęÚęŪęåęéęōęöęë ëëĶëë"ëĶ/ë3ë;ë?ëQëUëbëfëuëyë€ë„ë“ë—ëžë]Ŗë§ëŽë]ģëŋëČëĖëŨëáëčë]íëņëøë]ė ėėė'ė+ė2ė]7ė;ėBė]OėSė\ė`ėqėuė„ėˆėė”ėĻėĒėˇėģėĘėÎėŨėáėéėíė˙ėííí#í'í.í]3í7í>í]CíGíNí][í_íhílíuíyíŠíŽí—í›íĒíŽíˇíģíĖíĐíŲíŨíîíōíūíîîîî]!î%î,î]9î=îFîJî[î_îhîlî{îîˆîŒîîĄîĒîŽîŋîÃîĪîĶîâîæîīîķîīīīīī"ī)ī-ī>īBīQīUīfījīsīwī~ī‚ī“ī—īĻīĒī˛īļīžīÂīĘīÎīŪīâīëīīīøīüīđ đđđ%đ)đ0đ4đ;đ?đFđJđYđ]đeđiđqđuđ}đđ‰đđđĄđ¨đŦđ´đ¸đĀđÄđĖđĐđāđäđėđđđøđüđņņņņ%ņ)ņ0ņ4ņ=ņAņJņNņUņYņaņeņnņrņ{ņņŽņ’ņŖņ§ņļņēņÉņÍņŪņâņëņīņöņúņ ōōō"ō+ō/ō8ō<ōEōIōZō^ōgōkōtōxōō…ō–ōšōĄōĨōŽō˛ōšōŊōÆōĘōÛōßōæōęōųōũōķ ķķķ*ķ.ķ=ķAķHķĶUķYķjķnķ~ķ‚ķ‰ķq–ķšķĢķ¯ķŋķÃķÔķØķäķčķ÷ķûķôĶôô$ô(ô8ô<ôMôQôZô^ôeôiôzô~ôô‘ô˜ôœôĨôŠô˛ôļôŊôÁôĘôÎôßôãôėôđôųôũôõ õõõ&õ*õ6õ:õIõMõTõXõiõmõtõxõ‰õõ”õ˜õ§õĢõŧõĀõÉõÍõÔõØõéõíõüõö ö ööö)ö-ö<ö@öGöKöRöVö]öaöpötö}ööŠöŽö—ö›öŦö°öŋöÃöÔöØöčöėöõöųö÷÷÷÷÷ ÷1÷5÷>÷B÷K÷O÷X÷\÷e÷i÷z÷~÷†÷Š÷š÷ž÷Ĩ÷Š÷¸÷ŧ÷Å÷É÷Ú÷Ū÷å÷é÷ø÷ü÷ øø!ø%ø6ø:øCøGøNøRøcøgøpøtø…ø‰ø’ø–øŸøŖøŦø°øÁøÅøĖøĐøßøãøôøøø ų ųų ų(ų,ų4ų8ųHųLųUųYųjųnų€ų„ų‹ųųžųĸųĒųŽųŊųÁųČų]ÕųŲųęųîų÷ųûų úúúú*ú.ú?úCúOúSú\ú`úoúsúzú]‡ú‹úœú úŠú­úŧúĀúĮú]ÔúØúéúíúųúũúû ûûû$û]1û5ûFûJûVûZûcûgûvûzûƒû‡ûû”ûûĄûĒûŽûŋûÃûĖûĐûŲûŨûæûęûķû÷ûü üüü"ü&ü/ü3ü<ü@üQüUü]üaüiümüuüyü‰üüžüĸü˛üļüŊüpÂüÆüÍüpŌüÖüŨüpâüæüíüpúüūüũ ũũũũ#ũ,ũ0ũ9ũ=ũFũJũ[ũ_ũhũlũsũwũ€ũ„ũũ‘ũšũžũ¯ũŗũŋũÃũĖũĐũßũãũęũ]īũķũúũ]˙ũū ū]ūū$ū(ū/ū3ū<ū@ūIūMūVūZūkūoūxū|ū…ū‰ū’ū–ū§ūĢū´ū¸ūŋūÃūĖūĐūŲūŨūæūęūûū˙ū ˙˙˙˙+˙/˙6˙];˙?˙F˙]K˙O˙V˙]c˙g˙p˙t˙{˙˙ˆ˙Œ˙•˙™˙ĸ˙Ļ˙ˇ˙ģ˙Â˙]Į˙Ë˙Ō˙]×˙Û˙â˙]ī˙ķ˙ü˙ !%.2CGN]SW^]cgn]{ˆŒ“— ¤­ąēžĪĶÜāéíū "+/8<MQZ^gk|€‡‹šž¯ŗŧĀĮËÜāīķ#'04=APT]ajnƒŠŽĄĒŽŋÃĘÎŪâņõü   '+48?CTXaevz…”˜ĄĨļēŌÖŪâōö"&/3:>OSbfuy€„“—žĸŠ­ŊÁČĖÔØßãëī÷û.29=DHW[bfnry}„ˆ—›ĸĻ­ąĀÄÍŅÚŪīķúū '+48IMTXgktGz~‡G•™ ¤ŗˇÆĘŅpÖÚápæęņpöúp$(/3BFRVeippuy€p…‰pĄ¨ŦŗˇÆĘĶ׿ęņ]öú] ]")-48GKTXgkrĶw{‚͇‹’Ķ—›ĸ̞ͧĶŋÃĘÎÕŲčėũ  ]   ] ! ( ]5 9 B F U Y ` ]e i p ]u y € ] ‘ š ž ­ ą ē ž Į Ë Ü ā ņ õ ü ]   ]   ]) - 6 : I M T ]Y ] d ]i m t ] … Ž ’ Ą Ĩ Ŧ Ķą ĩ ŧ ĶÁ Å Ė ĶŲ Ũ æ ę ķ ÷    ! ( p- 1 8 pE I R V e i p pu y € p ‘ š ž ­ ą ¸ ]Ŋ Á Č ]Õ Ų â æ õ ų    " 3 7 G K Z ^ e pj n u pz ~ … p’ –  Ą Ē Ž ˇ ģ  Æ Õ Ų ā på é đ põ ų  p    % ) 2 6 = A P T [ Ķ` d k Ķp t { Ķ€ „ ‹ ͐ ” › ͍ Ŧ ŗ ˇ Ā Ä Í Ņ Ø Ü ë ī  ]] $+]04;]HLS]X\c]hls]x|ƒ]”ĄĒގģÄČŲŨîōų]ū ]]&*1Ķ6:AĶFJQĶ^bkox|…‰šž¯ŗē]ŋÃĘ]×Ûâpįëōp˙ pp'+2p7;BpOSZp_cjpw{„ˆ™­ąÂÆÖÚáåõų #'6:AELP_cjnvzŠŽ•™Š­ļēÃĮÎŌãįīķ%)0]59@]MQX\eipt}”Ą°´ģĶĀÄËĶØÜãįîōû˙!%15>BQU\paelpy}†Š™Ž˛šŊÆĘŅÕæęņõ&*26FJSWhluyŠŽ–šĒŽĩšČĖÕŲęîõų !15FJSW^bswˆŒ•™ ¤ĩšČĖĶ×āäíņøü '+48AEVZimvz…–šŠf­fĩfšfÅfÉfÕfŲfífņfųfũff fff%f)f6f:fGfKfVfZfgfkfvfzff“f›fŸf§fĢfŗfˇfĮfËfÚfŪfífņfúfūff fff-f1fBfFfOfSfZf^fofsf‚f†f•f™fĸfĻf­fąfÂfÆfÕfŲfęfîf÷fûfffff*.59HhLhThXhdhhhthxhŒhh˜hœh¤h¨h°h´hÄhČhÕhŲhæhęhõhųhh hhh.h2h:h>hFhJhRhVhfhjhyh}hŒhh™hh¤h¨hšhŊhĖhĐháhåhîhōhųhũhhh!h%h4h8hAhEhLhPhahehthxh‰hh–hšhĄhĨhļhēhÉÍÔØßãíņ ")-48?CRV]ako~‚“ĨЏŧĖkĐkØkÜkčkėkøkükkkk k(k,k4k8kHkLkYk]kjknkyk}kŠkŽk™kk˛kļkžkÂkĘkÎkÖkÚkękîkũkkkkk!k(k,k=kAkPkTkekikrkvk}kk’k–kĨkŠk¸kŧkÅkÉkĐkÔkåkékøkük kkkk%k)k:k>kMQX\cgqu„ˆ“šž§Ģ˛ļĮËŌÖāäķ÷    & * 9 = D H R V e i z ~ … ‰ ˜ œ ­ ą Á Å Ė Đ × Û ã į ī ķ ú ū !! !$!+!/!6!:!A!E!L!P!W![!b!f!u!y!ˆ!Œ!—!›!§!Ģ!ˇ!ģ!Į!Ë!×!Û!ī!ķ!û!˙!" """!"%"-"1"B"F"M"Q"Z"^"g"k"r"v"}"‹"…"–"š"Ą"Ĩ"Ž"˛"ģ"ŋ"Æ"Ę"Û"ß"é"í"÷"û"# ###,#0#8#<#D#H#O#S#[#_#g#k#s#w#‡#‹#’#–##Ą#¨#Ŧ#ŗ#ˇ#Í#Ņ#ā#ä#ë#ī#ö#ú#$$$$)$-$7$;$E$I$_$c$l$p$z$~$Œ$$ĸ$Ļ$¯$ŗ$Ã$Į$Ņ$Õ$į$ë$ô$ø$%%%%%!%4%8%?%C%R%V%^%b%q%u%|%€%%“%%Ą%ŗ%ˇ%ž%Â%Ë%Ī%Ö%Ú%ë%ī%ū%& & &&&+&/&D&H&Y&]&o&s&…&‰&›&Ÿ&ą&ĩ&ŧ&Ā&Ī&Ķ&Ú&Ū&į&ë&ō&ö&' '''%')'8'<'N'R'Y']'l'p'w'{'Œ''™''Ŧ'n°'n¸'nŧ'nČ'nĖ'nØ'nÜ'nđ'nô'nü'n(n(n (n(n(n((n,(n9(n=(nJ(nN(nY(n](nj(nn(ny(n}(n’(n–(nž(nĸ(nĒ(nŽ(nļ(nē(nĘ(nÎ(nŨ(ná(nđ(nô(nũ(n)n)n )n)n!)n0)n4)nE)nI)nR)nV)n])na)nr)nv)n…)n‰)n˜)nœ)nĨ)nŠ)n°)n´)nÅ)nÉ)nØ)nÜ)ní)nņ)nú)nū)n*n *n*n*n-*1*E*I*P*\*`*o*s*z*͇*‹*’*]Ÿ*Ŗ*Ē*Ž*Ŋ*Á*Č*ĶÕ*Ų*ā*ä*ķ*÷*ū*] ++++)+-+6+:+C+G+X+\+c+g+n+r++…+Œ++˜+œ+¤+¨+¯+ŗ+ģ+ŋ+Į+Ë+Û+ß+æ+]ë+ī+ö+],,,],,&,*,2,6,H,L,V,Z,i,m,|,€,,“,š,ž,­,ą,ē,ž,Ī,Ķ,Ü,ā,é,í,ö,ú,----#-'-6-:-A-ĶF-J-Q-ĶV-Z-a-Ķn-r-y-}-„-ˆ-—-›-ĸ-Ļ-­-ą-¸-ŧ-Ë-Ī-Ö-]Û-ß-æ-]ķ-÷-ū-] ...Ķ#.p'.p/.p3.p:.p>.pE.pI.pP.pT.p[.p_.pf.pj.pq.pu.p|.p€.p‡.p‹.p’.p–.pĨ.pŠ.pš.pŊ.pÆ.pĘ.pÖ.pÚ.pë.pī.pö.pú.p/p/p/p/p$/p(/p4/p8/pI/pM/pT/pX/p`/pd/pu/py/p‚/p†/p/p“/pœ/p /pą/pĩ/pž/pÂ/pÎ/pŌ/pã/pį/pđ/pô/pû/p˙/p0p 0p0p0p-0p10p90p=0pE0pI0pQ0pU0pe0pi0pr0pv0p‚0p†0p0p“0pœ0p 0pą0pĩ0pž0pÂ0pÉ0pÍ0pÖ0pÚ0pæ0pę0pķ0p÷0p1p1p1p1p(1p,1p51p91pJ1pN1pW1p[1pl1pp1p1pƒ1pŠ1pŽ1pŸ1pŖ1pŦ1p°1pÁ1pÅ1pÎ1pŌ1pŲ1pŨ1pæ1pę1pû1p˙1p2p 2p2p!2p*2p.2p?2pC2pL2pP2pa2pe2pl2pp2p2pƒ2p”2p˜2pŠ2p­2pļ2pē2pÁ2pÅ2pÖ2pÚ2pé2pí2pų2pũ2p3p 3p3p3p/3p33p;3p?3pG3pK3pS3pW3p_3pc3ps3pw3p3pƒ3p‹3p3p–3pš3pĸ3pĻ3pŽ3p˛3pē3pž3pÆ3pĘ3pŌ3pÖ3pŪ3pâ3pę3pî3pö3pú3p4p4p4p4p4p4p.4p24p94Ķ>4pB4pI4ĶN4pR4pY4Ķf4pj4pr4pv4p~4p‚4p’4p–4pž4pĸ4pĒ4pŽ4pž4pÂ4pĘ4pÎ4pÕ4pŲ4pā4pä4pķ4p÷4pū4Ķ5p5p5Ķ5p5p5Ķ+5p/5p65Ķ;5p?5pF5ĶK5pO5pV5Ķ[5p_5pf5Ķk5po5pv5Ķƒ5p‡5p5p“5p›5pŸ5p¯5pŗ5pÃ5pĮ5p×5pÛ5pë5pī5p˙5p6p 6p6p6p6p#6p'6p06p46pE6pI6pW6p[6pb6pf6pn6pr6pz6p~6p†6pŠ6p’6p–6pĻ6pĒ6pą6pĩ6pŊ6pÁ6pĘ6pÎ6p×6pÛ6pė6pđ6p÷6pû6p7p7p7p7p#7p'7p.7p27p:7p>7pF7pJ7pR7pV7p^7pb7pj7pn7pv7pz7p‚7p†7p–7pš7pŠ7p­7pĩ7pš7pÁ7pÅ7pÍ7pŅ7pŲ7pŨ7på7pé7pņ7põ7pũ7p8p8p8p8p 8p(8p,8p38p78p?8pC8pK8pO8pW8p[8pk8po8p~8p‚8pŠ8pŽ8p–8pš8pĸ8pĻ8pŽ8p˛8pÂ8pÆ8pÎ8pŌ8pÚ8pŪ8pæ8pę8pō8pö8p9p 9p9p9p9p"9p29p69p=9pA9pI9pM9pU9pY9pa9pe9pm9pq9p9p…9pŒ9p9p˜9pœ9p¤9p¨9p°9p´9pŧ9pĀ9pĐ9pÔ9pÜ9pā9pč9pė9pô9pø9p:p:p:p:p:p#:p*:p.:p5:p9:p@:pD:pS:pW:p^:pb:pk:po:pv:pz:p:p…:p”:p˜:pŸ:pŖ:pĒ:pŽ:pĩ:pš:pČ:pĖ:pĶ:p×:pæ:pę:pō:pö:pū:p;p;p;p;p";p2;p6;pE;pI;pP;pT;pc;pg;pn;pr;p{;p;p†;pŠ;p›;pŸ;p¨;pŦ;pĩ;pš;pÂ;pÆ;p×;pÛ;pä;pč;pņ;põ;pü;p<p <p <p<p"<p1<p5<pE<pI<pY<p]<pd<ph<px<p|<pŒ<p<p˜<pœ<p¤<p¨<p¸<pŧ<pĖ<pĐ<pā<pä<pø<pü<p=p =p=p=p%=p)=p8=<=E=I=R=V=_=c=t=x==ƒ=Š=Ž=•=™=¨=Ŧ=ŗ=ˇ=ŋ=Ã=Ë=Ī=Ö=Ú=â=æ=î=ō=>> >]>>>]*>.>5>]B>F>M>Q>Y>]>o>s>}>>>”>›>Ÿ>¨>Ŧ>ģ>ŋ>Æ>Ę>Ņ>Õ>Ũ>á>é>í>õ>ų>?????#?3?7?>?B?S?W?^?b?j?n??ƒ?Š?Ž?Ÿ?Ŗ?Ē?Ž?ļ?ē?Ë?Ī?Ö?ĶÛ?ß?æ?Ķë?ī?ö?Ķ@@@@!@%@,@0@7@;@B@F@U@Y@`@]e@i@p@]}@@ˆ@]•@™@ @Ķ­@ą@š@Ŋ@Å@É@Ņ@Õ@Ũ@á@é@í@ũ@A AAAA$A(A1A5AFAJASAWA^AbAkAoAxA|A…A‰A’A–A§AĢAģAŋAÆAĘAĶA×AāAäAëAīAøAüAB BBB%B)B2B6B=BABJBNBWB[BdBhBqBuB†BŠB‘B•BžBĸBĢB¯BļBēBÃBĮBØBÜBåBéBōBöB˙BCCCC#C2C6C?CCCLCPCYC]CnCrC{CCˆCŒC•C™CĒCŽCˇCģCÄCČCŅCÕCæCęCņCõCDDDD.D2D;D?DFDJD[D_DnDrD{DD†DŠD›DŸDŽDr˛DrēDržDrÅDrÉDrĐDrÔDrãDrįDrīDrķDrúDrūDr ErErErEr%Er)Er0Er4ErCErGErNErREr[Er_ErnErrEryEr}Er„ErˆEr—Er›ErĸErĻErĩEršErĘErÎEr×ErÛErâEræEr÷ErûEr FrFrFr#Fr,Fr0Fr7Fr;FrLFrPFr_FrcFrjFrnFr}FrFr‘Fr•FrFrĄFrŠFr­FrŊFrÁFrÉFrÍFrŨFtáFtéFtíFtõFtųFt Gt GtGtGt#Gt'Gt8GtVtBVtKVtOVtXVt\VtmVtqVtzVt~VtVt“VtšVtžVt­VtąVtēVtžVtĮVtËVtÔVtØVtéVtíVtöVtúVtWtWtWtWt#Wt'Wt6Wt:WtCWtGWtPWtTWt]WtaWtjWtnWtWtƒWtŒWtWt™WtWt¤Wt¨WtąWtĩWtÆWtĘWtŲWtŨWtėWtđWt˙WtXtXtXt'Xt+Xt3Xt7Xt>XtBXtJXtNXtWXt[XtjXtnXtuXtyXtXt…Xt–XtšXtŠX­X´X¸XÃXĮXÖXÚXáXåXôXøX˙XY YYYY"Y&Y5Y9YBYFYOYSYZY^YgYkY|Y€Y‰YY–YšYĢY¯YļYēYÉYÍYÔYØYįYëYōYöYZ ZZZ#Z'Z8Z]F]J]Y]]]d]h]w]{]‚]†]Ž]’]™]]Ĩ]Š]š]Ŋ]Ä]Č]×]Û]â]æ]î]ō]ų]ũ]^ ^^^$^(^7^;^L^P^Y^]^d^h^y^}^Œ^^™^^¤^¨^š^Ŋ^Ė^Đ^×^Û^ã^į^ī^ķ^ú^ū^_ ___%_)_8_<_C_G_V_Z_a_e_m_q_x_|_„_ˆ_˜_œ_Ŗ_§_ļ_ē_Á_Å_Í_Ņ_Ø_Ü_ä_č_ø_ü_````+`/`8`<`C`G`X`\`k`o`x`|`ƒ`‡`˜`œ`Ģ`v¯`vˇ`vģ`vÂ`vÆ`vÕ`vŲ`vá`vå`vė`vđ`v˙`vav avavavav*av.av5av9avBavFavUavYav`avdavsavwav~av‚av‘av•av¤av¨avąavĩavŧavĀavŅavÕaväavčav÷avûav bvbvbvbv#bv'bv7bv;bvCbvGbvWbx[bxcbxgbxobxsbxƒbx‡bxbx”bx›bxŸbx¨bxŦbxĩbxšbxĘbxÎbxÕbxŲbxābxäbxķbx÷bxcxcx cxcxcxcx%cx)cx:cx>cxEcxIcxPcxTcxccxgcxvcxzcxƒcx‡cxŽcx’cxŖcx§cxļcxēcxÁcxÅcxÍcxŅcxŲcxŨcxæcxęcxķcx÷cxdx dxdxdx dx$dx-dx1dxBdxFdxWdx[dxddxhdxodxsdx„dxˆdx—dx›dx¤dx¨dx¯dxŗdxÂdxÆdxĪdxĶdxÚdxŪdxįdxëdxúdxūdxexexexex&ex*ex2ex6exFexJexSexWex^exbexkexoexvexzexƒex‡ex˜exœexŖex§exšexŊexÆexĘexÛexßexæexęexųexũex fxfxfx#fx4fx8fxIfxMfxVfxZfxafxefxnfxrfxƒfx‡fxfx“fxŖfx§fxŽfx˛fxēfxžfxÆfxĘfxĶfx×fxčfxėfxøfxüfxgx gxgxgx%gx)gx:gx>gxGgxKgx\gx`gxigxmgx~gx‚gx‰gxgxœgx gxŠgx­gxžgxÂgxËgxĪgxāgxägxëgxīgxūgxhx hxhxhx hx3hx7hx?hxChxKhxOhxWhx[hxkhxohxwhx{hxƒhx‡hxŽhx’hx™hxhx¤hx¨hx¯hxŗhxēhxžhxÆhxĘhxŌhxÖhxŪhxâhxęhxîhxūhxix iĶixixiĶix"ix)iĶ6ix:ixBixFixNixRixbixfixnixrixzix~ixŽix’ixšixžixĨixŠix°ix´ixÃixĮixÎiĶĶix×ixŪiĶãixįixîiĶûix˙ixjĶ jxjxjĶjxjx&jĶ+jx/jx6jĶ;jx?jxFjĶSjxWjx_jxcjxkjxojxjxƒjx“jx—jx§jxĢjxģjxŋjxĪjxĶjxÚjxŪjxįjxëjxôjxøjx˙jxkx kxkxkx#kx0kx4kx;kx?kxFkxJkxRkxVkx^kxbkxjkxnkxukxykx€kx„kxŒkxkx kx¤kxĢkx¯kx¸kxŧkxÅkxÉkxĐkxÔkxŨkxákxđkxôkxûkx˙kxlx lxlxlx$lx(lx8lxrxBrxRrxVrxfrjrsrwr€r„rŽr’rŖr§rŽr˛ršrŊrÄrČrĪrĶrÚrŪrírņrørürssss"s&s-s1s8svEvIvRvVv_vcvlvpvyv}v„vˆv‘v•vœv vąvĩvŧvĀvÉvÍvÖvÚvãvįvđvôvûv˙vwwww(w,w3w7w@wDwMwQwZw^wgwkw|w€w‰ww”w˜wĄwĨwŽw˛wģwŋwČwĖwŨwáwčwėwõwųwxxxxxx'x+x2x6x?xCxLxPxWx[xdxhxoxsx„xˆx‘x•xžxĸxĢx¯x¸xŧxÍxŅxÚxŪxįxëxôxøxyyyyyy(y,y5y9yByFyOySy\y`yiymyvyzyƒy‡yy”yyĄyĒyŽyŋyÃyĘyÎy×yÛyäyčyīyķyúyūy zzzz+z/z@zDzMzQzXz\zmzqz€z„zz‘zšzžz§zĢz´z¸zÁzÅzÖzÚzãzįzđzôzũz{ {{{{,{0{9{={F{J{S{W{`{d{m{q{‚{†{{“{œ{ {Š{­{ļ{ē{Ã{Į{Đ{Ô{Ũ{á{ō{ö{˙{| ||||&|*|3|7|@|D|M|Q|Z|^|g|k|t|x||…|–|š|Ŗ|§|°|´|Ŋ|Á|Ę|Î|×|Û|ė|đ|÷|û| }}}#},}0}7};}L}P}_}c}l}p}y}}}†}Š}“}—} }¤}ĩ}š}Â}Æ}Ī}Ķ}Ü}ā}é}í}ö}ú}~~~~~!~*~.~?~C~L~P~Y~]~f~j~s~w~€~„~•~™~ ~¤~ŗ~ˇ~Ā~Ä~Í~Ņ~Ú~Ū~į~ë~ô~ø~  #'04=AJNW[dhy}†Š“— ¤­ąēžĪĶÚŪíņ€€€€€€/€3€B€F€W€[€d€h€o€s€„€ˆ€—€›€¤€¨€ą€ĩ€ž€€ˀĪ€؀܀í€ņ€ú€ū€ !%.2CGNRaenr{ˆŒ•™ĸρˇģāȁҁՁہâëīøü ‚‚‚‚+‚/‚8‚<‚E‚I‚R‚V‚_‚c‚t‚x‚‚…‚Ž‚’‚›‚Ÿ‚¨‚Ŧ‚Ŋ‚Á‚ȂĖ‚ՂŲ‚â‚æ‚÷‚û‚ƒƒƒƒ&ƒ*ƒ;ƒ?ƒFƒJƒYƒ]ƒdƒĶqƒuƒ}ƒƒ‰ƒƒ•ƒ™ƒЃ­ƒļƒēƒÃĮƒ؃܃åƒéƒúƒūƒ„ „„„&„*„9„=„E„I„Q„U„e„i„x„|„Œ„„Ą„Ĩ„´„¸„Ʉ̈́քڄá„å„ö„ú„ … ……"…+…/…6…:…K…O…^…b…i…Ķv…z…………Œ……Ÿ…Ŗ…Ŧ…°…ˇ…ģ…ąȅŅ…ՅŪ…â…ë…ī…†† ††††$†(†8†<†C†]P†T†]†a†p†t†}††Іކ—†›†Ŧ†°†š†Ŋ†Ɔʆ͆׆č†ė†ķ†÷†‡ ‡‡]‡"‡+‡/‡>‡B‡I‡]V‡Z‡c‡g‡v‡z‡ƒ‡‡‡އ’‡Ŗ‡§‡ļ‡ē‡‡Ƈ·Ō‡ڇŪ‡æ‡ę‡ú‡ū‡ˆ ˆˆˆˆ"ˆ*ˆ.ˆ>ˆBˆKˆOˆVˆZˆcˆgˆpˆtˆ{ˆˆˆˆŒˆ•ˆ™ˆ ˆ¤ˆ­ˆąˆˆĈՈ؈âˆæˆíˆņˆ‰‰‰‰ ‰$‰-‰1‰:‰>‰E‰I‰R‰V‰g‰k‰t‰x‰‰…‰މ’‰Ŗ‰§‰°‰´‰Ŋ‰Á‰ʉΉ߉ã‰ę‰î‰ú‰ū‰ ŠŠŠŠ-Š1Š:Š>ŠOŠSŠZŠ^ŠmŠqŠzŠ~Š‡Š‹ŠœŠ ŠЊ­ŠļŠēŠÊĮŠ؊܊ãŠįŠđŠôŠũŠ‹‹ ‹‹‹(‹,‹4‹8‹@‹D‹L‹P‹`‹d‹k‹o‹x‹|‹…‹‰‹˜‹œ‹Ĩ‹Š‹˛‹ļ‹Į‹ˋŌ‹֋â‹æ‹õ‹ų‹ŒŒŒŒ"Œ&Œ7Œ;ŒBŒFŒUŒYŒbŒfŒwŒ{Œ‹ŒŒ Œ¤Œ´Œ¸ŒɌ͌֌ڌáŒåŒöŒúŒ  "+/6:KO^ybyi myqyxö„yˆy ”y˜yŸöŦy°yˇöĶ ( 0 8@HPX`hpx€ ˆ"$˜& (¨*°,¸.Ā0Č2Đ4Ø6ā8č;đ=ø?ACEG I(K0M8O@QHSPUXW`Yh[p_xa€gˆik˜m o¨u°w¸~€ȉĐ9؍ā’č”đ–ø˜šĄ¤Ļ Ē(Ŧ0¯8ą@ŗHĩPˇXš`ģhŊpŋxÁ€ÈŐĮ˜É ˨ͰΏŅĀÔČÖĐØØÚāÜčŪđāøâäæėî đ(ō0ô8ö@øHúPüXū`hpx€ ˆ ˜ ¨°¸ĀČ Đ"Ø$ā&č(đ*ø,.025 :(M0O8Q@SH[P^X``bhdpfxh€kˆnp˜r t¨v°x¸y  $048<@DPTX\`dptx|€„”˜œ ¤°´¸ŧĀÄĐÔØÜāäđôøü(,048<HLPT`dhlptx|ˆŒ” ¤¨Ŧ¸gŧgĀgÄgĐgÔgØgÜgčiėiđiôiiii iii i$i(i,i8i<i@iDiPkTkXk\khklkpktk€k„kˆkŒk˜mœm m¤m°m´m¸mŧmČmĖmĐmÔmāoäočoėoøoüooo $(,8<@DHLPTX\hlptx|€„ˆŒ˜œ ¤¨Ŧ°´ĀÄČĖĐÔāäčėøü  $(,04@DHLX\`dhlx|€„”˜œ¨Ŧ°´ĀÄČĖĐÔāäčėøü $048<@DPTX\`dptx|€„”˜œ¨uŦu°u´uĀuÄuČuĖuØÜāäđôøü  $(,04@DHLX\`dptx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔāäčėđôøü $048<HLPT`dhlx|€„w”w˜wœw¨wŦw°w´w¸wŧwČwĖwĐwÔwāwäwčwėwøwüwwwwwww(w,w0w4w@DHLPT`dhlx|€„”˜œ¨Ŧ°´ĀÄČĖĐÔāäčėøü      ( , 0 4 8 < H L P T ` d h l p t € „ ˆ Œ  ”   ¤ ¨ Ŧ ¸ ŧ Ā Ä Đ Ô Ø Ü č ė đ ô ø ü      $ ( , 0 4 @ D H L X \ ` d h l x | € „ ˆ Œ ˜ œ   ¤ ° ´ ¸ ŧ Ā Ä Đ Ô Ø Ü ā ä đ ô ø ü       ( , 0 4 @ D H L X \ ` d p t x | ˆ Œ  ”   ¤ ¨ Ŧ ¸ ŧ Ā Ä Č Ė Ø Ü ā ä č ė ø ü       ( , 0 4 @ D H L X \ ` d h l x | € „  ” ˜ œ ¨ Ŧ ° ´ Ā Ä Č Ė Ø Ü ā ä đ ô ø ü      $ ( , 8 < @ D P T X \ h l p t € „ ˆ Œ ˜ œ   ¤ ° ´ ¸ ŧ Č Ė Đ Ô ā ä č ė ø ü (,048<HLPT`dhlptx|ˆŒ”˜œ¨Ŧ°´¸ŧČĖĐÔØÜāäđôøü (,048<HLPTX\hlpt€„ˆŒ˜œ ¤¨Ŧ°´¸ŧČĖĐÔāäčėđô  $(,8<@DPTX\`dptx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔØÜčėđô  $048<HLPT`dhlx|€„ˆŒ˜œ ¤°~´~¸~ŧ~Č~Ė~Đ~Ô~ā~ä~č~ė~ø~ü~~~~~~~(~,~0~4~@~D~H~L~X~\~`~d~p€t€x€|€ˆ€Œ€€”€ €¤€¨€Ŧ€¸€ŧ€Ā€Ä€Đ€Ô€Ø€Ü€čėđô  $048<@DPTX\`dptx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔØÜčėđôøü  $(,8<@DPTX\`dhlx|€„ˆŒ˜œ ¤°´¸ŧĀÄČĖØÜāäđôøü(,04@DHLX\`dptx|€„”˜œ¨Ŧ°´ĀÄČĖØÜāäđôøü(,04@DHLX\`dhlptx|€„ˆŒ˜œ ¤¨Ŧ¸ŧĀÄČĖØÜāäđôøü (,048<HLPTX\hlpt€„ˆŒ˜œ ¤¨Ŧ°´ĀÄČĖØÜāäđôøü (,048<HLPT`dhlx|€„ˆŒ˜œ ¤¨Ŧ¸ŧĀÄĐÔØÜčėđôøü(,04@DHLX\`dhlx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔØÜčėđô  $(,8<@DPTX\hlptx|ˆŒ”˜œ¨Ŧ°´¸ŧČĖĐÔāäčėøü  $(,04@DHLX\`dhlx|€„”˜œ¨Ŧ°´ĀÄČĖĐÔāäčėđô  $048<@DPTX\`dptx|ˆŒ” ¤¨Ŧ°´ĀÄČĖĐÔāäčėøü(,04@DHLPT`dhlx|€„”˜œ¨Ŧ°´ĀÄČĖĐÔāäčėøü(,04@DHLX\`dptx|ˆŒ” ¤¨Ŧ¸ŧĀÄČĖĐÔāäčėđô  $048<HLPT`‰d‰h‰l‰p‰t‰€‰„‰ˆ‰Œ‰˜‰œ‰ ‰¤‰°´¸ŧĀÄČĖĐÔāäčėđôøü       $ ( , 0 4 8 < H L P T X \ ` d p t x | ˆ Œ  ” ˜ œ ¨ Ŧ ° ´ ¸ ŧ Č Ė Đ Ô ā ä č ė ø ü !!!!!! !$!0!4!8!>> >>> >$>(>,>0>4>@>D>H>L>P>T>X>\>h>l>p>t>€>„>ˆ>Œ>>”>˜>œ>¨>Ŧ>°>´>¸>ŧ>Č>Ė>Đ>Ô>Ø>Ü>č>ė>đ>ô>ø>ü>? ?????(?,?0?4?8?>>>>>(>,>0>4>@>D>H>L>X>\>`>d>p>t>x>|>ˆ>Œ>>”>˜>œ>¨>Ŧ>°>´>Ā>Ä>Č>Ė>Ø>Ü>ā>ä>đ>ô>ø>ü>? ?????(?,?0?4?@?D?H?L?X?\?`?d?p?t?x?|?ˆ?Œ??”?˜?œ? ?¤?°?´?¸?ŧ?Ā?Ä?Č?Ė?Ø?Ü?ā?ä?đ?ô?ø?ü?@@@@@@ @$@(@,@8@<@@@D@H@L@P@T@X@\@h@l@p@t@x@|@€@„@ˆ@Œ@˜@œ@ @¤@°@´@¸@ŧ@Ā@Ä@Đ@Ô@Ø@Ü@č@ė@đ@ô@ø@ü@A AAA A$A(A,A8AîîÜî,ī|ī(đÔđPņ üņ"Fō$}ō&3ķ(dô*¯ô,÷õ.Ųö0ō÷2Õø5Kų:WúMnûOšûQ üS2ü[ėũ^˛ū`z˙bŸ˙dyfhÅkjnprmtĒvõxė y 4H \ p„˜ŦĀÔčü$ 8"L$`&t(ˆ*œ,°.Ä0Ø2ė468(<Plˆ¤ĀÔ;č=ü?A$8LC`EtGˆIœK°MÄOØQėSUW(Y<[[ py\´Ø_a<tŦäTŒÄü4l¤đ<p¸ D gd iœ kØ m oX a \œ  l uu \Ŧ ĩ \ā   \@ „ Č Ü đ   , H ` x  ¨ Ā Ø đ Dpy\¨ŧĐü(Lpy\´āwé\$Lt°đ4l¤Ü8\p„\¸Á\ė$Hl¤¸Ėœ4TˆtØá\\HÄč$8L`tˆœ°ÄÜô $<Tl€”Đ$8\p~œ€ČÜđh|4H€”¨ølu\°Ü @Th|¤Üđ(HhŒ°ÄØė ˜ Ą \ā é \ !)!\d!m!\¤!­!\Ø!á!\""\T"h"”"Ā"ė"<#h#Đ#Ų#\$4$`$°$Ä$,%&8&L&‰x&&\°&š&\č&9ņ&\('1'\l'u'\°'š'\ô'ũ'\8(ˆ(ŧ(Å(\) )\L)U)\„))\ŧ)Å)\ô)ũ)\0*9*\l*u*\¤*­*\Ü*’+”H+Q+\€+‰+\´+Ŋ+\ė+–õ+\$,˜-,\X,ša,\,™,\Č,Ņ,\- -\8-X-¤-­-\Ü-å-\..\L.U.\„.Č.D/|/Ü/đ/Ąų/\0090\h0q0\ 01H1¨1ŧ1¤Å1\ü12\42=2\l2Ļu2\˜2Ą2\Ü2å2\33\H3ĒQ3\t3}3\¨3ą3\Ü3å3\4Ŧ4\H4Q4\Œ4•4\Ô4Ũ4\5%5\X5a5\œ5Ĩ5\ä5í5\6<6\6e6\¤6¯­6\Ø6ąá6\7ŗ!7\X7ĩa7\7ˇ™7\Č7Ņ7\8 8\t8š}8\´8ģŊ8\č8Ŋņ8\(9ŋ19\\9Áe9\¤9í9\ä9Åí9\$:Į-:\\:Ée:\¤:Ë­:\ä:í:\;Í%;\\;Īe;\”;;\Ø;á;\<%<\d<m<\Ŧ<ĩ<\ô<ũ<\,=5=\t=Ņ}=\ŧ=Å=\> >\D>M>\|>…>\°>š>\ô>ũ>\8?ÔA?\€?։?\Č?ØŅ?\@Ú@\H@ÜQ@\€@Ū‰@\´@āŊ@\ė@âõ@\ Aä)A\XAaA\ AæŠA\ÔAŨA\BHBtB}B\ŧBčBCC\hC”CĀCÉC\D4D`DėiD\˜DîĄD\ĐDŲD\Eđ!E\PEYE\ˆE‘E\ĐEŲE\Fō!F\`F”FôF\ÜFGöG\TGø]G\ŒGú•G\ÄGčGDHü€Hū‰H\¸HĖHÕH\II!I\\IpI°IšI\đIųI\4JXJaJ\ JÄJÍJ\K(K1K\`KiK\˜KL ˜LÜL \MeM\”MĀMėMž@Š‡Ž AY܅ėQ˛B0ƒZ7: '[Mz ōËčŖdŦĀĮmCRJŠ=Ŏ„_įW&ī'R/dCkâ8+/QM€Ŧ’9tWžI€~*ebYޟCˆ!›@4:āMĐH ąŋ”Ŧ™ikvĻéĖ1ĘFøØˇí푞xb՛ŒK•Ĩ2üūĀž–y+DiÕp˜•5e§ēĒp^"yŦĀĮ °Éėú7bŋ(ņēŖRŗįäŽ÷ØÉížCEÕė#ô]Ą{Ņ į´žŖĐRĶÃĨĐi¤'†bíú$DX“yˇv$áPü‘¸A× ôĩ”,“„gĮ5FPwB¨´<힥OĒīĢ`ÖėŽļ˜ĨˆåĪšÄX”ĻŋXŒƒxĐennÃg]Ą­|ķq ”ĀžÚœŦUv+_üåėŒ~ ōôy':ô‘ÁI?ŽCR(ņtūį™K ĨKī;ŧč^ÁlîhR/Wöqå0˜4žŠĸ­üž§Á7Ë#‡m)n–Rƒ8:āĮ&Ŗ.Ôŋ^§ĩTôO¨$" bŨ‡`{Ĩ;â‘7›ŠáZwķ´™eî‹ —w|”-–Ō…T Đ´Ž´Dmúo'uˆžÉN?yWÍíž$2đpu;ĢuØ6čŦŖĐA ~ū ųCŌF uę'7ˆ(ŪKÔß ŗQĒy˛ƔL#%?ĒjÚī V÷õ@ížņŽļĖōSĐŇÕkĐŌŧZlGh›•sæÅ7†šÉÎNyų_žXęüĖA9ŎNHĀĀËđ]=]ĮV́, Û˜y´É øûN?Bą#j íëYī#CR×CTôqž.mŸ‰`ÛüŲ˙%ŲĢ8hiNMMg|ŨĄÂ<:ā]ëX™čLū˙čšTôa; é_žŒ3āU=Ú.Nņ>õVšáGdÁĘīÜ\Ę få?â‘ĨŲÁ#R-ņÂ˙‡Feîö’´¯`ÕōüsL– ž ĸ'IB8üX˛{Ŋŗ’Y÷XĢ%܄xđáā0×a°˛ž}‰•?€’Ėq¤ūMĘz$Y’ā{BÔėPŊBßÍU‰ }Ou]M&Y—3Ä=ŨhÚĀē;§¨ō…ŦŸĀî|Đ*i)ūĻgã,r8›äņwCR?HWîßŲ9ņĩz †ĸĀVW?EīEĻ$Ļ€ŨĄ4ąSĪŨđ7ū˜Ļ@>S9zÆ-ŽîĘ#Z=Ú?öWRʞZ‚'éyŌ“LĀ˜ŒxĒíWã›õų0{dظĮjw(Âzö‰…ņdÕōēŊt¸ ˆî"¯‹ŋNváDÁI hės ­€ <5`ʂŦXđx§Rd5įmôÂ}‰4tšúëhšīõ,‚Īvž•œœŠ:mf„ØėPĪÃæļød ’˜RßۙĒËĄÎN‚HSu] oëu°Ęæ\czĒģߞP ėøQđ¸.€[.wb͍>ėA,eą/ģāzžÔ*Š-ūgĶ!]¨éô‡ĨU~ †č„ŨĄ3ą } âûIĄū˛°ËC÷­Ņ¯¸wîb^=ÚÄņņVÃĪQ§üXO3ĩÖõø>?’FĐŖ‘9„ˆ-\ã›ā,ãZ´xĶ˙ęķĶpĨ𠅒ë_ôIME7͚éc¯‹öWäYųļOĀĮŊ]đÖ ¤Xqz…-tõBë+ÚÔ儺Öķ°Ļ<˜‰2}œ5Į}‰č×UĒÅÜėPJLUîņ SRđ]œ¤×HpøÎŊĮ= ŖVZ:S2ôĶš´éčBėɊ ņ×nūØ*ę1ū ™0¨ 9Gl=y;šuL;Ũ Ō‚Ã˜ē>ūb[Qųڜ{āŪÃoNÎCu@íې Üį‰Ĩū­ ”ē ÛųŠ’´éYOÅCC¤Ų ÷ušÖõ“1„ 1ãZ=Ä7f­,?īŖë_””öWĮVžF{ƒiŽß 6ãŠ+.âÍAZ˙Ī;ĩƒ%ŽORh`i=Ãŧ– ŊĨŅdœ9h_ŠŒ}JÂkÔŠAžĪūË= Tr“¨øu&8t!ŧUA.Õ\Ą˜ŠĮį"'€ĖŌŧLŲĕc3^{+Gė•@8{…YOĢzá ŌQ’ųđžzēŠ­Ąwŋo÷+CØ".xx ôã1žĐ#|?ڂĖŖŋ4ÉÜ?]UzārØe)YOĘâx.E—^ę´ŊÖõĖ)˙"6ŒĮɋdc5ãZ›ë_ĪŅŗŌ/ãFŨ}Ex úL=gÔü“^ĻH[ņ&K™Ŧ!Q: Ę]/팠I˛ĄĐ?Đ= ™5‡´…Ūy‹ŖPl`"ˇ0Č* +ú ŋwZQ‚ŠÆĮÃŗ­><ÄâŊå Ō„ Ë5›ąĀ€Y ¯ø\K>B$Zgē™õŒuÖģ@pöŋ3ÂŦØ-ËÄá?ēã’|I >°5øJWĸYļĖhé . ΋døÃ%Žáķũ‰ÎyHûjs+_”#ū=zR…W^úų[ûsuäā0w´= û­>AiŖŒ­úEŧėÔh_o”돖ūS§Øü“øĐŪkŋÉ'Qĩ›Iļ:ī:ķG|k[—žīĸÎCøĀā„ˆÆ9‘įĮR÷´åAx‹+˜(äšŠž|ķZÂŊÎú7Ō$¯Â7ĘLÚĨY7ŠĻ>ōČ5„ƒh2[@ÄâŲqXäkˆƒ#_ųtĶÛ"ˇ&h0ĩw‹ęĶ'iM˛]>[˙ņ6‘uÖjHŠú{Ļ?ŋ`bŽ”Šã?ŋúDpöNá#ĪąŊūE&Dƒ]PŪ&`J]ģō>îęq4Å“û\vˆZWYSôų.IŌ‹d´EíįU{´HĪņãĖ˨/Ļø/‚äą=rCxÚ(ö‚Ōl)i6ā‚UOk;É+6sDOK? <@[@5KÆ(*Šô7íX [ A@ #{wKé;5Eėu(öcŪ<6Dņ*՜Å;^l;$9ŠsÖDIØl´7!ƒw:TÎ< á+bh6]Åll ;čP2 æė‚j)1Q‹§O5O=<wMLaá()O–2Ĩč(܂§Gˆué*ëy+{‡2ŅF•F\‘ĢM75ûQO•myu‡<ŋ(đ@îCUqˆRíšļ ø—2đ*čœ9v@ž(Ú+=[qēsn /MÛ;˙A4Ėl!rˆ͜ Aé$¯yü4Ŧ*+9a9z>54ļ(Ģ!Ķl¨p}?/>ÎAjFdĶ‚ƒģOjĖyķj4Ŋ( ƒü(äcbAŖp(Í<~OŲ‚@Įb§Ē?L"Ī;Ųlg~IŽBMКZã!Ų^Pí3 Š ˙" }. V  ÁM0%Ļ" ‚0øŧ D@9M ä”P§!¸Š€æ &ÔˇÔ\€ŌÛ l’üĻ!*€Pę ŋQ¸Š!äRHŦ!tœ ˇ gm=$ 2p@A? Ō„°Ž2" oĐ2O BĀ3R ā.āV  ›°;" Ė02O Ã_Põ ôVāŧŪ /Žĸö" ÕE°‘q oyđ„š" œ\PJQ" ß>€tR $°.* cCĐ ‡" ŧ7°c+ 9_ ņ ‚”Ú-! •R  }ztx lR@ĩô ƒā; č P" Z" ū <. %}7 z•X§ !ÉLp"D" ŗP+" 9'K@ ŊDā‹‚ îû ļns3" D€˙" Ą_Āķ ˛=āq' D“§!ŧ 00 s$ņˇö˜ĀÜ.! ė@" $'`K( R”ãŲ! Āđ;* 9P" ž$đˇŧ€;" Š0. ŒM0%Ļ" Œ=. 0:‰ f " ŋ- V  Ŧ^@ë  tZPE|" >‚°~( Åm€Ŧ !<`o‡ 8ŦD!‹1Z  ;’đĻ !›lP1‹ ō… Î! ĐX" ƒwpå" P˙" GP’Ŋ iĐnC" x`ƒˆ" é°" fL0Ŧļ š1 Z eH ļ‘čĻ!t;@nA Ō™Ô§ !j”<§!Edj hŠ0å* ĩ†Đ•"  H" Á @" >KĄE 8 ?T Ē P" ļ>`t ŽnĐr)" H†PÎ! ņ‡@Ōä /1Đ€" ģZ@ČC ⓊŲ! c*pQ§ =ŒīN €2O Ŗ@. Ã0ĀY2 ¤“rŲ! 'IR ^č ŖE@‘a _đ h9Āfį F 0/% o˙" .`V  ͋0—" Z‰đŨô ņPđ˛â á@1N üK Ē å& GŅ T%čˇC ¨!ēp" ÷* RŖ #70c ā‘`Ø&! s­! ‚p~9 û$xˇ›tŪQ! Đu" â0­!pHĒ!v|ˇŅkP/\ ‡ˆ0Ø Ĩ ~P EuĖĻ!œš¨!f/@W  ŧT 4" rDđŠZ (°L@ ]`Ų= A;đmA bĀ" ⊠ë^ 0|pz! Ú Ā" ’ Ø-! ē/€W c`°úđ ëˆ@ŲÕ š{ķˇ*L0Ŧļ Û3 ] 1Đ€" b -āU  øQ0,%" ā/ WO ŽY°Å ßB°­" "@D4 Rr°wn" ‘ 4S ėm oy" (‘Ø0! 2[ Z›¨!xWđ<†" ā—˜§ !D" BX eP@*Æ" ™Č§ !Ė4@aO •veå jv bå ; mD –Û<! â6c# j5āa  Ķx€hŽ -$ Ē !Ļ•ĀÚ9! `Ē!JĀ:S øp3O Sg # KPĻé CF@+" ܀}] šfk’" ›`¨!‰ ÛË dn Ŧ !øĐ> ”…đ‘Ä" 70‡" †Ā“Ŧ" 5aM XŒĐž“" ,WĀ:-" Sā.* Ŗ;n˜ F 0N MĀ#š" Āv€p" ˆ“ §!Œk@)  `–p§ !~ƒ Ŧ  Ī9€ˇ& `" /°;" ;Š`äÄ ÁS00" )j°! K€P}7 Ë⎴eph’" BPq" …Q0,%" =D≠uh0m’" Bk'  #^€į’ sT°3ę" Đ˙" m oy" îU ¸N Ÿ'L/ đ/( 2ops3" Özti A4^O l3 ] P@*Æ" =S`/É" <#FP ėP}7 6Pb1 ›e( -ƒ`Ē2 U7Pc( J5āa  wā1N Z… Íũ *„ ģ‚ ō{‰Õ" Ę'0LL \{°…Ũ" éuāYā æY@BŽ" ’9” õj#ˆ Š5đa Ē€}] Y0Äß Œ0‡" Oā<. ¨.ĀV  Ā“(§!;pEN A&С ā" Đ) PV žœŅˇ|E` Ø" ũ " (™ŧ§ !ŋ"€D jS00" øi°! " “gĐR )TĀ1å" ˙/đWT Ņi€!( â‰Pã ú%ØˇNšĀŨ#! OM€$Ž" `8Pd  u>T  ū’§ !Ļ:ākĸ ĸ " ü[Îd žuĀX Ēi Õ >GpZ" ųa  4 ~#`FP 9Qā´) &ȡ đ> ‹ " j†p•`" ļŒāđ[ Ą}7 Ž`>b ːĀ×0! j] Ũ ū`n" ‡€ÎŠ X“^Ų! é `/ˆ u%pˇ }€ŪV! Ūn@s)" AātŪ փĀĩÛ Ŋ  " ˇR .ļ" ieđ“ "ĐAà Ŗ " ü7ācB ˘°§ !ˆ €" sG” šCđ…Ü ē&ġŋ›ˆŠ!.80d ) O> 3zpqŸ ( @" ¯I[" ė#ĀFT p“§!đ˙" ˜Ü'! Ė2 [´ ųE0’ ūĐ8d cĐa" m1P`" ]i Õ Äoā@` ¯Jā!Š" vĀ\å ?v°_å z6āb ¨6lˇˇŌ" ō 0" P-đU  íS@ļ  ã`n" G\¸6hĢ ŪI`" 6˜@Ü1! Z™Ũ#! đ?ātŪ ļ ˙" {~ {  ‘Š`å ‹-V  ũp=0 âJ í —0°Y  .qāŦ !”0§ !;\€Đû ”‘0Ø! |+đSĄ X[ĐĘ2 î0Z  „ipŦ!ƒbp * ~Hā–# ã•d§ !ŋ ˙" k@9M y0l/ ,+ĐR $…€Č‘ Ļ3@]R ŗ”D§ !r4_Ė IH`Ļ" bq°s’" ōGА" .lā0, ŖDP‹‚ ÷€.* WāŧŪ ēK@ŠÖ g:Āj åg0R ĶdH H>Ār” ų3°]C 8°ũ$ eN‰ Ŋ} zų 5œĀĻÚ:m O1P`" ;0ˇI=q+ …ap * >ˆÔĻ ! XĀžy ›R@ĩô ä§ v›Ā¨D!M " É$ėˇĨ‡Ō" if‡ Ũ=`ˇ ˜đ0N “āũÜ ŧ 0" Ą‰đŪ` N!P@I ĸL𭏠l°0, ,C` e" c&ˎm˙" ¯a W- " c}¨ !ƒIā" q‚PŽX" ™ ˙" ¸\PJQ" ą 3O 96bJ §—ĀÛ5! o_°ō *›x¨!Œdj __gmon_start___fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClasses_ZNKSt5ctypeIcE8do_widenEc_ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev_ZN7testing8internal26ThreadLocalValueHolderBaseD1EvDeleteThreadLocalValue_ZN7testing4Test11DeleteSelf_Ev_ZN7testing4Test5SetupEv_ZN7testing8TestCase16RunSetUpTestCaseEv_ZN7testing8TestCase19RunTearDownTestCaseEv_ZN7testing11EnvironmentD2Ev_ZN7testing11EnvironmentD1Ev_ZN7testing11Environment5SetUpEv_ZN7testing11Environment8TearDownEv_ZN7testing11Environment5SetupEv_ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE_ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE_ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEv_ZN7testing22EmptyTestEventListenerD2Ev_ZN7testing22EmptyTestEventListenerD1Ev_ZN7testing4Test5SetUpEv_ZN7testing4Test8TearDownEv_ZNK7testing8TestCase30reportable_disabled_test_countEv_ZNK7testing8TestCase19disabled_test_countEv_ZNK7testing8TestCase21reportable_test_countEv_ZNK7testing8TestCase17test_to_run_countEv_ZNK7testing8TestCase16total_test_countEv_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEv_ZN7testing8internal24HasNewFatalFailureHelper20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD1Ev_ZN7testing8internal23DefaultDeathTestFactoryD2Ev_ZN7testing8internal23DefaultDeathTestFactoryD1Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD2Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD1Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD1Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD1Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev_ZdlPv_ZN7testing8internal26ThreadLocalValueHolderBaseD0Ev_ZN7testing11EnvironmentD0Ev_ZN7testing8internal23DefaultDeathTestFactoryD0Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD0Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD0Ev_ZN7testing22EmptyTestEventListenerD0Ev_ZN7testing8internal17TestEventRepeaterD2Ev_ZTVN7testing8internal17TestEventRepeaterE_Unwind_Resume__gxx_personality_v0_ZN7testing8internal17TestEventRepeaterD1Ev_ZN7testing8internal17TestEventRepeaterD0Ev_ZN7testing8internal18OsStackTraceGetter17CurrentStackTraceEii_ZNSsC1EPKcRKSaIcE_ZN7testing8internal26GoogleTestFailureExceptionD2Ev_ZTVN7testing8internal26GoogleTestFailureExceptionE_ZNSt13runtime_errorD2Ev_ZN7testing8internal26GoogleTestFailureExceptionD1Ev_ZN7testing8internal26GoogleTestFailureExceptionD0Ev_ZN7testing8internal17TestEventRepeater18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal17TestEventRepeater11OnTestStartERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal17TestEventRepeater27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater9OnTestEndERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal17TestEventRepeater16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal17TestEventRepeater18OnTestIterationEndERKNS_8UnitTestEiputchar_ZNSs4_Rep10_M_destroyERKSaIcE_ZN7testing8internal24XmlUnitTestResultPrinterD0Ev_ZTVN7testing8internal24XmlUnitTestResultPrinterE_ZNSs4_Rep20_S_empty_rep_storageE_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Ev_ZTVN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD1Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Ev_ZNSt6vectorISsSaISsEED2Ev_ZNSt6vectorISsSaISsEED1Ev_ZNKSs4findEcj_ZNSs6appendEPKcj_ZNSsC1ERKSsjj_ZNSs6appendERKSs_ZSt24__throw_out_of_range_fmtPKczsnprintfstrlen_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i_ZN7testing8internal24XmlUnitTestResultPrinterD2Ev_ZN7testing8internal24XmlUnitTestResultPrinterD1Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD1Ev_ZN7testing8internal12AssertHelperC2ENS_14TestPartResult4TypeEPKciS5__Znwj_ZN7testing8internal12AssertHelperC1ENS_14TestPartResult4TypeEPKciS5__ZN7testing8internal12AssertHelperD2Ev_ZN7testing8internal12AssertHelperD1Ev_ZN7testing8internal15UnitTestOptions15GetOutputFormatEv_ZN7testing18FLAGS_gtest_outputEstrchr_ZNSsC1EPKcjRKSaIcE_ZN7testing8internal15UnitTestOptions20PatternMatchesStringEPKcS3__ZN7testing8internal15UnitTestOptions13MatchesFilterERKSsPKc_ZN7testing8internal13GetTestTypeIdEv_ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_E_ZN7testing8internal20SingleFailureCheckerC2EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZNSsC1ERKSs_ZN7testing8internal20SingleFailureCheckerC1EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing8internal35DefaultGlobalTestPartResultReporterC2EPNS0_12UnitTestImplE_ZTVN7testing8internal35DefaultGlobalTestPartResultReporterE_ZN7testing8internal35DefaultGlobalTestPartResultReporterC1EPNS0_12UnitTestImplE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC2EPNS0_12UnitTestImplE_ZTVN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC1EPNS0_12UnitTestImplE_ZNK7testing8internal12UnitTestImpl21total_test_case_countEv_ZNK7testing8internal12UnitTestImpl22test_case_to_run_countEv_ZNK7testing8internal12UnitTestImpl21successful_test_countEv_ZNK7testing8TestCase21successful_test_countEv_ZNK7testing8internal12UnitTestImpl17failed_test_countEv_ZNK7testing8TestCase17failed_test_countEv_ZNK7testing8internal12UnitTestImpl30reportable_disabled_test_countEv_ZNK7testing8internal12UnitTestImpl19disabled_test_countEv_ZNK7testing8internal12UnitTestImpl21reportable_test_countEv_ZNK7testing8internal12UnitTestImpl16total_test_countEv_ZNK7testing8internal12UnitTestImpl17test_to_run_countEv_ZN7testing8internal12UnitTestImpl28CurrentOsStackTraceExceptTopEi_ZN7testing8internal15GetTimeInMillisEvgettimeofday_ZN7testing8internal6String13CStringEqualsEPKcS3_strcmp_ZN7testing15AssertionResultC2ERKS0__ZN7testing15AssertionResultC1ERKS0__ZN7testing16AssertionSuccessEv_ZN7testing16AssertionFailureEv_ZN7testing8internal6String17WideCStringEqualsEPKwS3_wcscmp_ZN7testing8internal6String28CaseInsensitiveCStringEqualsEPKcS3_strcasecmp_ZN7testing8internal6String32CaseInsensitiveWideCStringEqualsEPKwS3_wcscasecmp_ZN7testing8internal6String23EndsWithCaseInsensitiveERKSsS3__ZN7testing8internal20StringStreamToStringEPSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv_ZNSs7reserveEj_ZNK7testing7Message9GetStringEv_ZN7testing10TestResult20ClearTestPartResultsEv_ZN7testing10TestResult5ClearEv_ZNK7testing10TestResult15HasFatalFailureEv_ZNK7testing10TestResult18HasNonfatalFailureEv_ZNK7testing10TestResult16total_part_countEv_ZNK7testing10TestResult17GetTestPartResultEi_ZNK7testing10TestResult6FailedEv_ZNK7testing8internal12UnitTestImpl26successful_test_case_countEv_ZNK7testing8internal12UnitTestImpl22failed_test_case_countEv_ZNK7testing10TestResult19test_property_countEv_ZNK7testing10TestResult15GetTestPropertyEi_ZN7testing4TestC2Ev_ZTVN7testing4TestE_ZN7testing35FLAGS_gtest_also_run_disabled_testsE_ZN7testing28FLAGS_gtest_break_on_failureE_ZN7testing28FLAGS_gtest_catch_exceptionsE_ZN7testing17FLAGS_gtest_colorE_ZNSs6assignERKSs_ZN7testing28FLAGS_gtest_death_test_styleE_ZN7testing31FLAGS_gtest_death_test_use_forkE_ZN7testing18FLAGS_gtest_filterE_ZN7testing8internal35FLAGS_gtest_internal_run_death_testE_ZN7testing22FLAGS_gtest_list_testsE_ZN7testing22FLAGS_gtest_print_timeE_ZN7testing23FLAGS_gtest_random_seedE_ZN7testing18FLAGS_gtest_repeatE_ZN7testing19FLAGS_gtest_shuffleE_ZN7testing29FLAGS_gtest_stack_trace_depthE_ZN7testing28FLAGS_gtest_stream_result_toE_ZN7testing28FLAGS_gtest_throw_on_failureE_ZN7testing4TestC1Ev_ZN7testing4TestD2Ev_ZN7testing4TestD1Ev_ZN7testing4TestD0Ev_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEv_ZNK7testing8TestCase11GetTestInfoEi_ZN7testing8TestCase18GetMutableTestInfoEi_ZN7testing8TestCase11ClearResultEv_ZN7testing8TestCase14UnshuffleTestsEv_ZN7testing8internal16GetAnsiColorCodeENS0_10GTestColorE_ZN7testing8internal14ShouldUseColorEbgetenv_ZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczstdoutvfprintf__cxa_guard_acquirefilenoisatty__cxa_guard_release__cxa_guard_abort_ZN7testing8internal27PrettyUnitTestResultPrinter24OnEnvironmentsSetUpStartERKNS_8UnitTestEfflush_ZN7testing8internal27PrettyUnitTestResultPrinter27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter11OnTestStartERKNS_8TestInfoE_ZN7testing8internal29PrintFullTestCommentIfPresentERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater7ReleaseEPNS_17TestEventListenerEmemmove_ZN7testing8internal24XmlUnitTestResultPrinterC2EPKcstderrfwrite_ZN7testing8internal24XmlUnitTestResultPrinterC1EPKc_ZN7testing8internal24XmlUnitTestResultPrinter26RemoveInvalidXmlCharactersERKSs_ZN7testing8internal24XmlUnitTestResultPrinter21OutputXmlCDataSectionEPSoPKc_ZNSo5writeEPKcistrstr_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc_ZN7testing18TestEventListenersC2Ev_ZN7testing18TestEventListenersC1Ev_ZN7testing18TestEventListenersD2Ev_ZN7testing18TestEventListenersD1Ev_ZN7testing18TestEventListeners7ReleaseEPNS_17TestEventListenerE_ZN7testing18TestEventListeners8repeaterEv_ZNK7testing18TestEventListeners22EventForwardingEnabledEv_ZN7testing18TestEventListeners23SuppressEventForwardingEv_ZNK7testing8UnitTest26successful_test_case_countEv_ZNK7testing8UnitTest22failed_test_case_countEv_ZNK7testing8UnitTest21total_test_case_countEv_ZNK7testing8UnitTest22test_case_to_run_countEv_ZNK7testing8UnitTest21successful_test_countEv_ZNK7testing8UnitTest17failed_test_countEv_ZNK7testing8UnitTest30reportable_disabled_test_countEv_ZNK7testing8UnitTest19disabled_test_countEv_ZNK7testing8UnitTest21reportable_test_countEv_ZNK7testing8UnitTest16total_test_countEv_ZNK7testing8UnitTest17test_to_run_countEv_ZNK7testing8UnitTest15start_timestampEv_ZNK7testing8UnitTest12elapsed_timeEv_ZNK7testing8UnitTest6PassedEv_ZNK7testing8UnitTest6FailedEv_ZNK7testing8UnitTest11GetTestCaseEi_ZN7testing8internal27PrettyUnitTestResultPrinter16PrintFailedTestsERKNS_8UnitTestE_ZNK7testing8UnitTest18ad_hoc_test_resultEv_ZN7testing8UnitTest18GetMutableTestCaseEi_ZN7testing8UnitTest9listenersEv_ZN7testing14TestPartResultD2Ev_ZN7testing14TestPartResultD1Ev_ZN7testing12TestPropertyD2Ev_ZN7testing12TestPropertyD1Ev_ZNK7testing8UnitTest20original_working_dirEv_ZNK7testing8UnitTest11random_seedEv_ZN7testing8UnitTest27parameterized_test_registryEv_ZN7testing8internal12UnitTestImpl32SuppressTestEventsIfInSubprocessEv_ZN7testing8internal30WriteToShardStatusFileIfNeededEvfopenfclose_ZN7testing8internal20ShouldRunTestOnShardEiii_ZN7testing8internal12UnitTestImpl23ListTestsMatchingFilterEv_ZN7testing8internal12UnitTestImpl25set_os_stack_trace_getterEPNS0_27OsStackTraceGetterInterfaceE_ZN7testing8internal12UnitTestImpl19current_test_resultEv_ZN7testing8internal12UnitTestImpl14UnshuffleTestsEv_ZN7testing8internal6IsTrueEb_ZN7testing8internal10AlwaysTrueEv__cxa_allocate_exception__cxa_throw_ZN7testing8internal10SkipPrefixEPKcPS2_strncmp_ZN7testing8internal14ParseFlagValueEPKcS2_b_ZN7testing8internal13ParseBoolFlagEPKcS2_Pb_ZN7testing8internal15ParseStringFlagEPKcS2_PSs_ZNSs6assignEPKcj_ZN7testing8internal16InDeathTestChildEv_ZNKSs7compareEPKc_ZN7testing14ExitedWithCodeC2Ei_ZN7testing14ExitedWithCodeC1Ei_ZNK7testing14ExitedWithCodeclEi_ZN7testing14KilledBySignalC2Ei_ZN7testing14KilledBySignalC1Ei_ZNK7testing14KilledBySignalclEi_ZN7testing8internal20ExitedUnsuccessfullyEi_ZN7testing8internal23GetLastErrnoDescriptionEv__errno_location_ZN7testing8internal9DeathTest11LastMessageEv_ZN7testing8internal9DeathTest24last_death_test_message_E_ZN7testing8internal9DeathTest27set_last_death_test_messageERKSs_ZN7testing8internal21StackLowerThanAddressEPKvPb_ZN7testing8internal14StackGrowsDownEv_ZNK7testing8internal8FilePath21FindLastPathSeparatorEvstrrchr_ZNK7testing8internal8FilePath21FileOrDirectoryExistsEv__xstat_ZNK7testing8internal8FilePath15DirectoryExistsEv_ZNK7testing8internal8FilePath15IsRootDirectoryEv_ZNK7testing8internal8FilePath14IsAbsolutePathEv_ZNK7testing8internal8FilePath11IsDirectoryEv_ZNK7testing8internal8FilePath12CreateFolderEvmkdir_ZN7testing8internal8FilePath9NormalizeEv_Znajmemset_ZdaPv_ZN7testing8internal8FilePath13GetCurrentDirEvgetcwd_ZNK7testing8internal8FilePath19RemoveDirectoryNameEv_ZN7testing8internal24GetCurrentExecutableNameEv_ZN7testing8internal17g_executable_pathE_ZNK7testing8internal8FilePath14RemoveFileNameEv_ZNK7testing8internal8FilePath27RemoveTrailingPathSeparatorEv_ZNK7testing8internal8FilePath28CreateDirectoriesRecursivelyEv_ZNK7testing8internal8FilePath15RemoveExtensionEPKc_ZN7testing8internal14GetThreadCountEv_ZN7testing8internal2RED2Evregfree_ZN7testing8internal2RED1Ev_ZN7testing8internal2RE9FullMatchEPKcRKS1_regexec_ZN7testing8internal2RE12PartialMatchEPKcRKS1__ZN7testing8internal8GTestLogD2Ev_ZSt4cerr_ZNSo3putEc_ZNSo5flushEv_ZNKSt5ctypeIcE13_M_widen_initEv_ZSt16__throw_bad_castv_ZN7testing8internal8GTestLogD1Ev_ZN7testing8internal14CapturedStream11GetFileSizeEP8_IO_FILEfseekftell_ZN7testing8internal14CapturedStream14ReadEntireFileEP8_IO_FILEfread_ZN7testing8internal17GetCapturedStreamEPPNS0_14CapturedStreamEdup2remove_ZN7testing8internal17GetCapturedStdoutEv_ZN7testing8internal17GetCapturedStderrEv_ZN7testing8internal18SetInjectableArgvsEPKSt6vectorISsSaISsEE_ZN7testing8internal18GetInjectableArgvsEv_ZN7testing8internal7g_argvsE_ZN7testing9internal220PrintBytesInObjectToEPKhjPSo_ZNSo9_M_insertImEERSoT__ZN7testinglsERSoRKNS_14TestPartResultE_ZNSolsEi_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate_ZNK7testing19TestPartResultArray4sizeEv_ZNK7testing19TestPartResultArray17GetTestPartResultEi_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE_ZTVSt15basic_streambufIcSt11char_traitsIcEE_ZNSt6localeD1Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev_ZN7testing7MessageC2Ev_ZNSt8ios_baseC2Ev_ZTVSt9basic_iosIcSt11char_traitsIcEE_ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNSt6localeC1Ev_ZNSt8ios_baseD2Ev_ZNSdD2Ev_ZN7testing7MessageC1Ev_ZN7testing8internal6String12FormatHexIntEi_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev_ZN7testing8internal27FormatTimeInMillisAsSecondsEx_ZNSo9_M_insertIdEERSoT__ZN7testing8internal6String15FormatIntWidth2Ei_ZN7testing8internal6String10FormatByteEh_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev_ZN7testing8internal10scoped_ptrISsE5resetEPSs_ZN7testing15AssertionResult13AppendMessageERKNS_7MessageE_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZN7testing8internal15CodePointToUtf8Ej_ZN7testing8internal16WideStringToUtf8EPKwi_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmodewcslen_ZN7testing7MessagelsERKSbIwSt11char_traitsIwESaIwEE_ZN7testing8internal6String15ShowWideCStringEPKw_ZN7testing7MessagelsEPKw_ZN7testing7MessagelsEPwisxdigit_ZN7testing8internal19UniversalPrintArrayEPKcjPSo_ZN7testing8internal7PrintToEPKcPSo_ZNSo9_M_insertIPKvEERSoT__ZN7testing8internal13PrintStringToERKSsPSo_ZN7testing13PrintToStringIPKcEESsRKT__ZN7testing8internal19UniversalPrintArrayEPKwjPSo_ZN7testing8internal7PrintToEPKwPSo_ZN7testing8internal17PrintWideStringToERKSbIwSt11char_traitsIwESaIwEEPSo_ZN7testing13PrintToStringIPKwEESsRKT__ZNSbIwSt11char_traitsIwESaIwEEC1EPKwRKS1__ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1__ZN7testing8internal17StreamingListener9UrlEncodeEPKc_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8__ZN7testing8internal8FilePath11ConcatPathsERKS1_S3__ZNSs6appendEjc_ZN7testing8internal17AppendUserMessageERKSsRKNS_7MessageE_ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo_ZN7testing8internal7PrintToEhPSo_ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo_ZN7testing8internal7PrintToEaPSo_ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo_ZN7testing8internal7PrintToEwPSo_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE5resetEPS6__ZN7testing15AssertionResultlsIA2_cEERS0_RKT__ZN7testing15AssertionResultlsISsEERS0_RKT__ZN7testing15AssertionResultlsIA11_cEERS0_RKT__ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT__ZN7testing8internal13HasOneFailureEPKcS2_S2_RKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing15AssertionResultlsIPKcEERS0_RKT__ZN7testing8internal18StreamableToStringIiEESsRKT__ZN7testing8internal27PrettyUnitTestResultPrinter15OnTestCaseStartERKNS_8TestCaseE__divdi3_ZN7testing8internal32FormatEpochTimeInMillisAsIso8601Exlocaltime_ZN7testing8internal8FilePath12MakeFileNameERKS1_S3_iPKc_ZN7testing8internal8FilePath22GenerateUniqueFileNameERKS1_S3_PKc_ZN7testing8internal18FormatFileLocationEPKci_ZN7testing8internal8GTestLogC2ENS0_16GTestLogSeverityEPKci_ZN7testing8internal8GTestLogC1ENS0_16GTestLogSeverityEPKci_ZN7testing8internal6Random8GenerateEj_ZN7testing8internal17StreamingListener12SocketWriter4SendERKSs_ZN7testing8internal9MutexBase4LockEvpthread_mutex_lockpthread_self_ZN7testing8internal9MutexBase6UnlockEvpthread_mutex_unlock_ZN7testing8internal5MutexD2Evpthread_mutex_destroy_ZN7testing8internal5MutexD1Ev_ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EE_ZN7testing8TestCase12ShuffleTestsEPNS_8internal6RandomE_ZN7testing8internal12UnitTestImpl12ShuffleTestsEv_ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv_ZN7testing8internal17StreamingListener12SocketWriter14MakeConnectionEvgetaddrinfosocketconnectfreeaddrinfogai_strerror_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Evpthread_getspecificpthread_key_delete_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED1Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED1Ev_ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT_strtoull_ZN7testing8internal13CaptureStreamEiPKcPPNS0_14CapturedStreamEmkstemp_ZN7testing8internal13CaptureStdoutEv_ZN7testing8internal13CaptureStderrEv_ZN7testing8internal17StreamingListener12SocketWriterD2Ev_ZTVN7testing8internal17StreamingListener12SocketWriterE_ZN7testing8internal17StreamingListener12SocketWriterD1Ev_ZN7testing8internal17StreamingListener12SocketWriterD0Ev_ZN7testing10TestResultC2Evpthread_mutex_init_ZN7testing10TestResultC1Ev_ZN7testing8internal18OsStackTraceGetterD2Ev_ZTVN7testing8internal18OsStackTraceGetterE_ZN7testing8internal18OsStackTraceGetterD1Ev_ZN7testing8internal18OsStackTraceGetterD0Ev_ZN7testing8internal17StreamingListenerD2Ev_ZTVN7testing8internal17StreamingListenerE_ZN7testing8internal17StreamingListenerD1Ev_ZN7testing8internal12UnitTestImpl21os_stack_trace_getterEv_ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs_ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal17StreamingListenerD0Ev_ZN7testing8internal12UnitTestImpl31SetGlobalTestPartResultReporterEPNS_31TestPartResultReporterInterfaceE_ZN7testing8internal12UnitTestImpl31GetGlobalTestPartResultReporterEv_ZN7testing8internal38DefaultPerThreadTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZNK7testing8UnitTest17current_test_infoEv_ZNK7testing8UnitTest17current_test_caseEv_ZN7testing10TestResultD2Ev_ZN7testing10TestResultD1Ev_ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoE_ZN7testing8internal37FormatCompilerIndependentFileLocationEPKci_ZN7testing8internal30GetBoolAssertionFailureMessageERKNS_15AssertionResultEPKcS5_S5__ZN7testing8internal26GoogleTestFailureExceptionC2ERKNS_14TestPartResultE_ZNSt13runtime_errorC2ERKSs_ZN7testing8internal26GoogleTestFailureExceptionC1ERKNS_14TestPartResultE_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal25ReportInvalidTestCaseTypeEPKcS2_i_ZN7testing8internal18StreamableToStringIxEESsRKT__ZNSo9_M_insertIxEERSoT__ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE_ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal27PrettyUnitTestResultPrinter9OnTestEndERKNS_8TestInfoE_ZN7testing8internal27PrettyUnitTestResultPrinter13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing8internal24XmlUnitTestResultPrinter9EscapeXmlERKSsb_ZN7testing8internal24XmlUnitTestResultPrinter29TestPropertiesAsXmlAttributesERKNS_10TestResultE_ZN7testing7MessageC2ERKS0__ZN7testing7MessageC1ERKS0__ZN7testing8internal13DeathTestImpl6PassedEb_ZN7testing8internal10ParseInt32ERKNS_7MessageEPKcPistrtol_ZN7testing8internal17Int32FromEnvOrDieEPKci_ZN7testing8internal11ShouldShardEPKcS2_b_ZN7testing8internal27PrettyUnitTestResultPrinter20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal14ParseInt32FlagEPKcS2_Pitoupper_ZN7testing8internal16BoolFromGTestEnvEPKcb_ZN7testing8internal18StringFromGTestEnvEPKcS2__ZN7testing8internal17Int32FromGTestEnvEPKci_ZN7testing16AssertionFailureERKNS_7MessageE_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_b_ZN7testing8internal14CmpHelperSTREQEPKcS2_S2_S2__ZN7testing8internal18CmpHelperSTRCASEEQEPKcS2_S2_S2__ZN7testing8internal14CmpHelperSTREQEPKcS2_PKwS4__ZNK7testing15AssertionResultntEv_ZN7testing8internal20DoubleNearPredFormatEPKcS2_S2_ddd_ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5__ZN7testing8DoubleLEEPKcS1_dd_ZN7testing8internal14CmpHelperSTRNEEPKcS2_PKwS4__ZN7testing8internal14CmpHelperSTRNEEPKcS2_S2_S2__ZN7testing8internal18CmpHelperSTRCASENEEPKcS2_S2_S2__ZN7testing11IsSubstringEPKcS1_S1_S1__ZN7testing14IsNotSubstringEPKcS1_S1_S1__ZNKSs4findEPKcjj_ZN7testing11IsSubstringEPKcS1_RKSsS3__ZN7testing14IsNotSubstringEPKcS1_RKSsS3__ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5__ZN7testing7FloatLEEPKcS1_ff_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjj_ZN7testing11IsSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZN7testing14IsNotSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7_wcsstr_ZN7testing11IsSubstringEPKcS1_PKwS3__ZN7testing14IsNotSubstringEPKcS1_PKwS3__ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE5resetEPS3__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1___cxa_begin_catch__cxa_rethrow__cxa_end_catch_ZN7testing8internal10scoped_ptrIKSsE5resetEPS2__ZN7testing8TestInfoC2ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE_ZN7testing8TestInfoC1ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE_ZN7testing8TestCaseC2EPKcS2_PFvvES4__ZTVN7testing8TestCaseE_ZN7testing8TestCaseC1EPKcS2_PFvvES4__ZN7testing8TestInfoD2Ev_ZN7testing8TestInfoD1Ev_ZN7testing8TestCaseD2Ev_ZN7testing8TestCaseD1Ev_ZN7testing8TestCaseD0Ev_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi_ZN7testing8TestCase11AddTestInfoEPNS_8TestInfoE_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal17TestEventRepeater6AppendEPNS_17TestEventListenerE_ZN7testing18TestEventListeners6AppendEPNS_17TestEventListenerE_ZN7testing18TestEventListeners23SetDefaultResultPrinterEPNS_17TestEventListenerE_ZN7testing18TestEventListeners22SetDefaultXmlGeneratorEPNS_17TestEventListenerE_ZN7testing8internal12UnitTestImpl24ConfigureStreamingOutputEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8UnitTest14AddEnvironmentEPNS_11EnvironmentE_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE5resetEPS2__ZN7testing8internal12UnitTestImplD2Ev_ZTVN7testing8internal12UnitTestImplE_ZN7testing8internal12UnitTestImplD1Ev_ZN7testing8internal12UnitTestImplD0Ev_ZN7testing8UnitTestD2Ev_ZTVN7testing8UnitTestE_ZN7testing8UnitTestD1Ev_ZN7testing8UnitTestD0Ev_ZN7testing8internal12UnitTestImplC2EPNS_8UnitTestE_ZTVN7testing8internal23DefaultDeathTestFactoryE_ZTVN7testing8internal27PrettyUnitTestResultPrinterE_ZN7testing8internal12UnitTestImplC1EPNS_8UnitTestE_ZN7testing8UnitTestC2Ev_ZN7testing8UnitTestC1Ev_ZN7testing8UnitTest11GetInstanceEv__cxa_atexit_ZN7testing8internal15UnitTestOptions27GetAbsolutePathToOutputFileEv_ZN7testing8internal12UnitTestImpl18ConfigureXmlOutputEv_ZN7testing4Test15HasFatalFailureEv_ZN7testing4Test18HasNonfatalFailureEv_ZN7testing8internal31GetCurrentOsStackTraceExceptTopEPNS_8UnitTestEi_ZN7testing8internal14DeathTestAbortERKSsfdopenfputcfputs_exit_ZN7testing8internal13DeathTestImpl26ReadAndInterpretStatusByteEv_ZN7testing8internal13DeathTestImpl5AbortENS0_9DeathTest11AbortReasonE_ZN7testing8internal16ForkingDeathTest4WaitEvwaitpid_ZN7testing8internal13DeathTestImplD2Ev_ZTVN7testing8internal13DeathTestImplE_ZN7testing8internal13DeathTestImplD1Ev_ZN7testing8internal13DeathTestImplD0Ev_ZN7testing8internal13ExecDeathTestD2Ev_ZTVN7testing8internal16ForkingDeathTestE_ZN7testing8internal13ExecDeathTestD1Ev_ZN7testing8internal13ExecDeathTestD0Ev_ZN7testing8internal15NoExecDeathTestD2Ev_ZN7testing8internal15NoExecDeathTestD1Ev_ZN7testing8internal15NoExecDeathTestD0Ev_ZN7testing8internal9DeathTestC2Ev_ZTVN7testing8internal9DeathTestE_ZN7testing8internal9DeathTestC1Ev_ZN7testing8internal16ForkingDeathTestC2EPKcPKNS0_2REE_ZN7testing8internal16ForkingDeathTestC1EPKcPKNS0_2REE_ZN7testing8internal9DeathTest6CreateEPKcPKNS0_2REES3_iPPS1__ZN7testing8internal15NoExecDeathTest10AssumeRoleEvpipefork_ZN7testing8internal23DefaultDeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE_ZTVN7testing8internal15NoExecDeathTestE_ZTVN7testing8internal13ExecDeathTestEchdirexecve_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal18StreamableToStringIPcEESsRKT__ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSsmemcmp_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS__ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZTSN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZTIN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZTIN7testing8internal26ThreadLocalValueHolderBaseE__dynamic_cast__cxa_bad_typeid_ZN7testing13PrintToStringIxEESsRKT__ZN7testing8internal11CmpHelperEQEPKcS2_xx_ZN7testing8internal11CmpHelperNEEPKcS2_xx_ZN7testing8internal11CmpHelperLEEPKcS2_xx_ZN7testing8internal11CmpHelperLTEPKcS2_xx_ZN7testing8internal11CmpHelperGEEPKcS2_xx_ZN7testing8internal11CmpHelperGTEPKcS2_xx_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tag_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag_ZN7testing8internal12UnitTestImpl11GetTestCaseEPKcS3_PFvvES5__ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_PKvPFvvES6_PNS0_15TestFactoryBaseE_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag_ZSt19__throw_logic_errorPKc_ZNSs4_Rep9_S_createEjjRKSaIcEmemcpy_ZN7testing8internal15UnitTestOptions17FilterMatchesTestERKSsS3__ZN7testing8internal12UnitTestImpl11FilterTestsENS1_18ReactionToShardingE_ZN7testing14TestPartResult14ExtractSummaryEPKc_ZN7testing8internal17kStackTraceMarkerE_ZN7testing8internal19TypedTestCasePState25VerifyRegisteredTestNamesEPKciS3_isspace_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT__ZN7testing8internal11g_help_flagE_ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPw_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT__ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPc_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZTSN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZTIN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZN7testing8internal12UnitTestImpl41GetTestPartResultReporterForCurrentThreadEv_ZTVN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderEpthread_setspecific_ZN7testing8internal12UnitTestImpl41SetTestPartResultReporterForCurrentThreadEPNS_31TestPartResultReporterInterfaceE_ZN7testing32ScopedFakeTestPartResultReporter4InitEv_ZN7testing32ScopedFakeTestPartResultReporterC2EPNS_19TestPartResultArrayE_ZTVN7testing32ScopedFakeTestPartResultReporterE_ZN7testing32ScopedFakeTestPartResultReporterC1EPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC2ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC1ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterD2Ev_ZN7testing32ScopedFakeTestPartResultReporterD1Ev_ZN7testing32ScopedFakeTestPartResultReporterD0Ev_ZN7testing8internal24HasNewFatalFailureHelperC2Ev_ZTVN7testing8internal24HasNewFatalFailureHelperE_ZN7testing8internal24HasNewFatalFailureHelperC1Ev_ZN7testing8internal24HasNewFatalFailureHelperD2Ev_ZN7testing8internal24HasNewFatalFailureHelperD1Ev_ZN7testing8internal24HasNewFatalFailureHelperD0Ev_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZN7testing8internal13ExecDeathTest10AssumeRoleEvfcntlstrdupsigemptysetsigactiongetpagesizemmapclonemunmap_ZSt17__throw_bad_allocv_ZN7testing8internal24XmlUnitTestResultPrinter18OutputXmlAttributeEPSoRKSsS4_S4__ZN7testing8internal24XmlUnitTestResultPrinter17OutputXmlTestInfoEPSoPKcRKNS_8TestInfoE_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlTestCaseEPSoRKNS_8TestCaseE_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlUnitTestEPSoRKNS_8UnitTestE_ZN7testing8internal24XmlUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs_ZN7testing8internal29ParseInternalRunDeathTestFlagEv_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEv_ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT__ZN7testing8internal18g_init_gtest_countE_ZN7testing14InitGoogleTestEPiPPc_ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT__ZN7testing14InitGoogleTestEPiPPw_ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6__ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8UnitTest13PopGTestTraceEv_ZN7testing8internal11ScopedTraceD2Ev_ZN7testing8internal11ScopedTraceD1Ev_ZN7testing8UnitTest17AddTestPartResultENS_14TestPartResult4TypeEPKciRKSsS6__ZTIN7testing8internal26GoogleTestFailureExceptionE__cxa_free_exception_ZNK7testing8internal12AssertHelperaSERKNS_7MessageE_ZN7testing8internal20SingleFailureCheckerD2Ev_ZN7testing8internal20SingleFailureCheckerD1Ev_ZN7testing24ValidateTestPropertyNameERKSsRKSt6vectorISsSaISsEE_ZN7testing10TestResult20ValidateTestPropertyERKSsRKNS_12TestPropertyE_ZN7testing10TestResult14RecordPropertyERKSsRKNS_12TestPropertyE_ZN7testing8internal12UnitTestImpl14RecordPropertyERKNS_12TestPropertyE_ZNSs6assignEPKc_ZN7testing8UnitTest14RecordPropertyERKSsS2__ZN7testing4Test14RecordPropertyERKSsS2__ZN7testing4Test14RecordPropertyERKSsi_ZN7testing4Test19HasSameFixtureClassEv_ZN7testing8internal2RE4InitEPKcregcomp_ZN7testing8internal30ReportFailureInUnknownLocationENS_14TestPartResult4TypeERKSs_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc_ZN7testing4Test3RunEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc_ZN7testing8TestInfo3RunEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc_ZN7testing8TestCase3RunEv_ZN7testing8internal12UnitTestImpl11RunAllTestsEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKc_ZN7testing8UnitTest3RunEv_ZN7testing8UnitTest14PushGTestTraceERKNS_8internal9TraceInfoE_ZN7testing8internal11ScopedTraceC2EPKciRKNS_7MessageE_ZN7testing8internal11ScopedTraceC1EPKciRKNS_7MessageE_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZN7testing19TestPartResultArray6AppendERKNS_14TestPartResultE_ZN7testing32ScopedFakeTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing10TestResult17AddTestPartResultERKNS_14TestPartResultE_ZN7testing8internal35DefaultGlobalTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitD1Ev_ZNSsD1Ev_ZN7testing8internal23kTestTypeIdInGoogleTestE_ZTVN10__cxxabiv117__class_type_infoE_ZTSN7testing8internal26ThreadLocalValueHolderBaseE_ZTVN10__cxxabiv120__si_class_type_infoE_ZTSN7testing8internal26GoogleTestFailureExceptionE_ZTISt13runtime_error_ZTIN7testing8internal9DeathTestE_ZTSN7testing8internal9DeathTestE_ZTIN7testing8internal16DeathTestFactoryE_ZTSN7testing8internal16DeathTestFactoryE_ZTSN7testing8internal23DefaultDeathTestFactoryE_ZTIN7testing8internal23DefaultDeathTestFactoryE_ZTIN7testing31TestPartResultReporterInterfaceE_ZTSN7testing31TestPartResultReporterInterfaceE_ZTSN7testing8internal24HasNewFatalFailureHelperE_ZTIN7testing8internal24HasNewFatalFailureHelperE_ZTSN7testing4TestE_ZTIN7testing4TestE_ZTSN7testing8TestCaseE_ZTIN7testing8TestCaseE_ZTIN7testing11EnvironmentE_ZTSN7testing11EnvironmentE_ZTIN7testing17TestEventListenerE_ZTSN7testing17TestEventListenerE_ZTIN7testing22EmptyTestEventListenerE_ZTSN7testing22EmptyTestEventListenerE_ZTSN7testing8UnitTestE_ZTIN7testing8UnitTestE_ZTSN7testing32ScopedFakeTestPartResultReporterE_ZTIN7testing32ScopedFakeTestPartResultReporterE_ZTIN7testing8internal27OsStackTraceGetterInterfaceE_ZTSN7testing8internal27OsStackTraceGetterInterfaceE_ZTSN7testing8internal18OsStackTraceGetterE_ZTIN7testing8internal18OsStackTraceGetterE_ZTSN7testing8internal35DefaultGlobalTestPartResultReporterE_ZTIN7testing8internal35DefaultGlobalTestPartResultReporterE_ZTSN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZTIN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZTSN7testing8internal12UnitTestImplE_ZTIN7testing8internal12UnitTestImplE_ZTIN7testing8internal17StreamingListener20AbstractSocketWriterE_ZTSN7testing8internal17StreamingListener20AbstractSocketWriterE_ZTIN7testing8internal17StreamingListener12SocketWriterE_ZTSN7testing8internal17StreamingListener12SocketWriterE_ZTIN7testing8internal17StreamingListenerE_ZTSN7testing8internal17StreamingListenerE_ZTSN7testing8internal27PrettyUnitTestResultPrinterE_ZTIN7testing8internal27PrettyUnitTestResultPrinterE_ZTSN7testing8internal17TestEventRepeaterE_ZTIN7testing8internal17TestEventRepeaterE_ZTSN7testing8internal24XmlUnitTestResultPrinterE_ZTIN7testing8internal24XmlUnitTestResultPrinterE_ZTSN7testing8internal13DeathTestImplE_ZTIN7testing8internal13DeathTestImplE_ZTSN7testing8internal16ForkingDeathTestE_ZTIN7testing8internal16ForkingDeathTestE_ZTSN7testing8internal15NoExecDeathTestE_ZTIN7testing8internal15NoExecDeathTestE_ZTSN7testing8internal13ExecDeathTestE_ZTIN7testing8internal13ExecDeathTestE_ZTVN7testing8internal26ThreadLocalValueHolderBaseE_ZNKSt13runtime_error4whatEv__cxa_pure_virtual_ZTVN7testing8internal16DeathTestFactoryE_ZTVN7testing31TestPartResultReporterInterfaceE_ZTVN7testing11EnvironmentE_ZTVN7testing17TestEventListenerE_ZTVN7testing22EmptyTestEventListenerE_ZTVN7testing8internal27OsStackTraceGetterInterfaceE_ZTVN7testing8internal17StreamingListener20AbstractSocketWriterE_ZN7testing8internal18OsStackTraceGetter19kElidedFramesMarkerE_ZN7testing8internal18g_linked_ptr_mutexE_ZN7testing38FLAGS_gtest_show_internal_stack_framesE__pthread_key_create_ZTISt9exceptionlibstdc++.so.6libm.so.6libc.so.6__environlibgcc_s.so.1_edata__bss_start_endlibgtest.so.0GCC_3.0GLIBC_2.0GLIBCXX_3.4.9GLIBCXX_3.4.11CXXABI_1.3GLIBCXX_3.4.20GLIBCXX_3.4GLIBC_2.1GLIBC_2.3.4GLIBC_2.1.3           &0P&y Zii bųœ`‰) laø—z͝k‰pø—”t)’Ŗii ¯ti šsi ŝii b0Ļ4Ļ8Ļ@Ļ`ĻdĻhĻlĻpĻtĻxĻ|Ļ€Ļ„ĻˆĻŒĻ Ļ¤Ļ¨ĻŦϰϴϏĻŧĻĀĻČĻÄĻTĖĻTāĻTčĻTüĻT§T§T §T(§T<§TP§T|§T„§TĐĻŨÔĻ~đĻ~§~0§~D§~X§~d§~p§~Œ§~˜§~¤§~°§~ŧ§~ȧ~Ô§~ā§~ė§~ø§~¨~ØĻ-ÜĻ`äĻėĻ>ôĻVøĻd¨§§É §ÂL§Âl§Âx§Â|¨Â§‹§á$§*,§$4§g8§ŒŦ§Œ¸§ŒĨŒ@§ķH§ÚT§Û\§Ž`§žŒŠžh§>t§9€§nˆ§i§`”§Â¤ŠÂœ§ü §ħDЍ§´§š§đ˧ЧāD¨āاčܧ4„Ŧ4ä§Ķč§ô§¤Ŧđ§Ÿü§B¨¯B¨J ¨J¨J\¯J¨äāŽä¨&¨ī$¨DØŽD$ˇD(¨Ģ¸ŽĢ,¨b0¨ĩP¨nT¨nX¨n\¨np¨nˆ¨nШnÔ¨nبnܨnā¨nä¨nč¨nė¨nđ¨nô¨nø¨nü¨nŠn˜ŠnœŠn°Šn¸ĒnŦn”Ŧn°Ŧn”¨V˜¨œ¨čŧŽč ¨ĩŦ¯ĩ¤¨ôŒ¯ô¨¨jHŠRLŠPŠŧŦŧTŠûŦûXІdžŦ†\Š˜Ē˜Ŧ˜`Šü ŦüdŠÁ$ŦÁhŠņ(ŦņlŠõ,ŦõpŠÜ0ŦÜtŠ;4Ē;4Ŧ;xŠ"8Ē"8Ŧ"|Šā€Šė@Ŧė´ŠŧŠęĀŠ%ÄŠėôŽėČŠä(¯äĖŠĸĒ1Ē^ ĒĒPĒ0 Ēi$ĒČ(Ēļ,Ēö0Ē˙<Ēš@ĒMLĒ,PĒETĒ XĒ;dĒ%hĒßlĒIpĒ|ĒX€ĒÃ„ĒˆĒ°¤Ēí°Ēø´Ē(ŧĒŗÄĒúČǰĖĒxĢĢ  ĢØĢÕĢjĢõĢ  Ģ$̐(Ģ,Ģ#0ĢË4ĢË8̉<Ģ @ĢĒ„ĢîˆĢ¨ŒĢnĢÁ”Ģ˘ĢSœĢΠĢN¤Ģ6¨ĢeŦĢʰĢ^´Ģ|¸Ģ'ŧĢ+ĀĢAŦ”ŦC Ŧ<ŦĨLŦãPŦ­TŦtXŦî\ŦãdŦhŦ_į_lŦtŦcxŦŅ|Ŧœ˜ŦÁ¸ŦÁØŦÁøŦÁœŦuŧŦuÜŦuüŦu´ŦĮÔŦĮôŦĮÄŦˆČŦĢĖŦoĐŦņäŦŦčŦėŦéđŦÚ­­ ­U­É­Ė ­@$­(­04­¤ėޤ8­L<­D­YĀŽYH­“L­[PŽTޝXŽ\ŽJ`ŽdŽhŽģlŽpއtŽãxޝ|Žä€Ž„ŽˆŽŌŽEŽZ”ŽÖ˜ŽœŽ9 ŽŠ¤Ž­¨ŽŦŽA°Ž-´Ž?ÄŽ:ČŽ<ĖŽpĐŽÄÔŽÜŽBäŽ"čŽEđŽWøŽÖüŽą¯Y¯ŋ¯} ¯I¯Į¯¯_¯V ¯a$¯=,¯ę0¯l4¯Ä8¯ <¯Q@¯īD¯øH¯ŅL¯ P¯MT¯?X¯ö`¯Zd¯„h¯fl¯:p¯t¯Žx¯Ž|¯v€¯’„¯žˆ¯D¯F”¯š˜¯oœ¯3 ¯ß¤¯ō°¯Ā´¯ޏ¯˛ŧ¯Ĩ1(ˇs,ˇ¨ °°°S°° °$°(°û,°Ū0°&4°¸8°<°Č@°D° H°đL°ŅP° T°.X°\° `° d°¯h°ßl° p° t°x°|°•€°=„°ˆ°.Œ°Š°”°5˜°Ėœ° °€¤°F¨°Ŧ°Ō°°´°2¸°Äŧ°H°ŧİĒȰH˰įаÔ°Cذ2ܰ+ā°ä°¯č°ė°äđ°ĩô°-ø°ü° ąąą ąąąŊąüą! ą$ą (ą,ą)0ą4ą!8ą <ąĻ@ą=Dą"Hą#LąPą$Tą%XąŅ\ą `ą&dąēhą§lą'pąÆtą˙xąU|ą(€ą)„ą*ˆą?Œą+ą,”ą¨˜ąŠœąí ąģ¤ąZ¨ą‚Ŧą.°ą/´ą¸ąNŧąbĀąhÄą&Čą0ĖąyĐą1Ôą2ØąÜą÷āą,äąčą/ėą)đą‹ôąúøą7üą3˛4˛é˛5 ˛‘˛6˛ƒ˛Ü˛7 ˛”$˛ļ(˛8,˛0˛â4˛38˛_<˛Ã@˛ÉD˛9H˛ąL˛;P˛:T˛tX˛ŋ\˛=`˛Ud˛Oh˛…l˛>p˛Kt˛?x˛u|˛Ö€˛„˛@ˆ˛AŒ˛˛k”˛Ī˜˛Cœ˛D ˛ؤ˛e¨˛Ŧ˛†°˛l´˛'¸˛cŧ˛Ļž´IJ ȲF˞rвÔ˛ÅØ˛GܲTā˛Hä˛I貸ė˛2đ˛™ô˛Jø˛Kü˛ųŗāŗsŗL ŗMŗNŗOŗ´ŗP ŗg$ŗQ(ŗ],ŗ0ŗR4ŗT8ŗS<ŗö@ŗÖDŗUHŗ LŗšPŗOTŗVXŗW\ŗį`ŗXdŗmhŗBlŗũpŗ[tŗZxŗˇ|ŗš€ŗ[„ŗûˆŗ\Œŗ ŗ]”ŗ^˜ŗ+œŗa ŗb¤ŗY¨ŗcŦŗ›°ŗ%´ŗd¸ŗ/ŧŗ0ĀŗLÄŗeČŗˇĖŗ\ĐŗfÔŗØŗgÜŗāŗēäŗhčŗqėŗqđŗiôŗjøŗĀüŗ~´×´•´k ´E´´´3´y ´Ų$´×(´m,´ø0´4´T8´5<´o@´D´°H´]L´pP´QT´#X´@\´ž`´…d´6h´!l´p´čt´Jx´q|´F€´r„´tˆ´uŒ´(´ņ”´v˜´wœ´ ´E¤´4¨´xŦ´y°´Ę´´’¸´zŧ´:Ā´{Ä´BČ´Ė´|Đ´}Ô´<Ø´×Ü´~ā´Lä´č´–ė´Ÿđ´€ô´æø´Oü´ĩˆĩ ĩŽ ĩĄĩ„ĩXĩ7ĩk ĩƒ$ĩĄ(ĩ,ĩ…0ĩ†4ĩ;8ĩ,<ĩ‡@ĩôDĩfHĩēLĩˆPĩÃTĩ‰Xĩ’\ĩŠ`ĩÔdĩhĩģlĩpĩĸtĩxĩ‹|ĩR€ĩŒ„ĩaˆĩŒĩĩ”ĩ*˜ĩ<œĩō ĩ¤ĩ‘¨ĩŪŦĩ“°ĩz´ĩ”¸ĩ•ŧĩ–Āĩ—Äĩ˜Čĩ™ĖĩrĐĩĀÔĩ!ØĩÆÜĩ›āĩØäĩœčĩ<ėĩžđĩÕôĩŸøĩžüĩ ļÅļ˜ļŽ ļūļĄļWļ4ļĸ ļŖ$ļ¤(ļĨ,ļ 0ļĻ4ļÚ8ļ<ļ@@ļßDļHļ§Lļ*PļŪTļ€Xļá\ļ9`ļŠdļŗhļõlļĶpļtļĒxļ\|ļQ„ļ̈ļŦŒļļ­”ļæ˜ļޜļW¤ļ¯¨ļwŦļ°°ļų´ļũ¸ļąŧļ˛ĀļåÄļPČļ§ĖļŗĐļmÔļ´Øļ5ÜļāļDäļļčļ"ėļđļôļ}øļüļᎎˇG ˇˇˇėˇˇ_ˇĮ ˇMSƒėčW ÃgŖ‹ƒ€ū˙˙…Ātč2ƒÄ[Ã˙ŗ˙Ŗ˙Ŗ héā˙˙˙˙ŖhéĐ˙˙˙˙ŖhéĀ˙˙˙˙Ŗhé°˙˙˙˙Ŗh é ˙˙˙˙Ŗ h(é˙˙˙˙Ŗ$h0é€˙˙˙˙Ŗ(h8ép˙˙˙˙Ŗ,h@é`˙˙˙˙Ŗ0hHéP˙˙˙˙Ŗ4hPé@˙˙˙˙Ŗ8hXé0˙˙˙˙Ŗ<h`é ˙˙˙˙Ŗ@hhé˙˙˙˙ŖDhpé˙˙˙˙ŖHhxéđū˙˙˙ŖLh€éāū˙˙˙ŖPhˆéĐū˙˙˙ŖThéĀū˙˙˙ŖXh˜é°ū˙˙˙Ŗ\h é ū˙˙˙Ŗ`h¨éū˙˙˙Ŗdh°é€ū˙˙˙Ŗhh¸épū˙˙˙ŖlhĀé`ū˙˙˙ŖphČéPū˙˙˙ŖthĐé@ū˙˙˙ŖxhØé0ū˙˙˙Ŗ|hāé ū˙˙˙Ŗ€hčéū˙˙˙Ŗ„hđéū˙˙˙Ŗˆhøéđũ˙˙˙ŖŒhéāũ˙˙˙ŖhéĐũ˙˙˙Ŗ”héĀũ˙˙˙Ŗ˜hé°ũ˙˙˙Ŗœh é ũ˙˙˙Ŗ h(éũ˙˙˙Ŗ¤h0é€ũ˙˙˙Ŗ¨h8épũ˙˙˙ŖŦh@é`ũ˙˙˙Ŗ°hHéPũ˙˙˙Ŗ´hPé@ũ˙˙˙Ŗ¸hXé0ũ˙˙˙Ŗŧh`é ũ˙˙˙ŖĀhhéũ˙˙˙ŖÄhpéũ˙˙˙ŖČhxéđü˙˙˙ŖĖh€éāü˙˙˙ŖĐhˆéĐü˙˙˙ŖÔhéĀü˙˙˙ŖØh˜é°ü˙˙˙ŖÜh é ü˙˙˙Ŗāh¨éü˙˙˙Ŗäh°é€ü˙˙˙Ŗčh¸épü˙˙˙ŖėhĀé`ü˙˙˙ŖđhČéPü˙˙˙ŖôhĐé@ü˙˙˙ŖøhØé0ü˙˙˙Ŗühāé ü˙˙˙Ŗhčéü˙˙˙Ŗhđéü˙˙˙Ŗhøéđû˙˙˙Ŗ héāû˙˙˙ŖhéĐû˙˙˙ŖhéĀû˙˙˙Ŗhé°û˙˙˙Ŗh é û˙˙˙Ŗ h(éû˙˙˙Ŗ$h0é€û˙˙˙Ŗ(h8épû˙˙˙Ŗ,h@é`û˙˙˙Ŗ0hHéPû˙˙˙Ŗ4hPé@û˙˙˙Ŗ8hXé0û˙˙˙Ŗ<h`é û˙˙˙Ŗ@hhéû˙˙˙ŖDhpéû˙˙˙ŖHhxéđú˙˙˙ŖLh€éāú˙˙˙ŖPhˆéĐú˙˙˙ŖThéĀú˙˙˙ŖXh˜é°ú˙˙˙Ŗ\h é ú˙˙˙Ŗ`h¨éú˙˙˙Ŗdh°é€ú˙˙˙Ŗhh¸épú˙˙˙ŖlhĀé`ú˙˙˙ŖphČéPú˙˙˙ŖthĐé@ú˙˙˙ŖxhØé0ú˙˙˙Ŗ|hāé ú˙˙˙Ŗ€hčéú˙˙˙Ŗ„hđéú˙˙˙Ŗˆhøéđų˙˙˙ŖŒhéāų˙˙˙ŖhéĐų˙˙˙Ŗ”héĀų˙˙˙Ŗ˜hé°ų˙˙˙Ŗœh é ų˙˙˙Ŗ h(éų˙˙˙Ŗ¤h0é€ų˙˙˙Ŗ¨h8épų˙˙˙ŖŦh@é`ų˙˙˙Ŗ°hHéPų˙˙˙Ŗ´hPé@ų˙˙˙Ŗ¸hXé0ų˙˙˙Ŗŧh`é ų˙˙˙ŖĀhhéų˙˙˙ŖÄhpéų˙˙˙ŖČhxéđø˙˙˙ŖĖh€éāø˙˙˙ŖĐhˆéĐø˙˙˙ŖÔhéĀø˙˙˙ŖØh˜é°ø˙˙˙ŖÜh é ø˙˙˙Ŗāh¨鐸˙˙˙Ŗäh°逸˙˙˙Ŗčh¸épø˙˙˙ŖėhĀé`ø˙˙˙ŖđhČéPø˙˙˙ŖôhĐé@ø˙˙˙ŖøhØé0ø˙˙˙Ŗühāé ø˙˙˙Ŗhčéø˙˙˙Ŗhđéø˙˙˙Ŗhøéđ÷˙˙˙Ŗ héā÷˙˙˙ŖhéĐ÷˙˙˙ŖhéĀ÷˙˙˙Ŗhé°÷˙˙˙Ŗh é ÷˙˙˙Ŗ h(é÷˙˙˙Ŗ$h0é€÷˙˙˙Ŗ(h8ép÷˙˙˙Ŗ,h@é`÷˙˙˙Ŗ0hHéP÷˙˙˙Ŗ4hPé@÷˙˙˙Ŗ8hXé0÷˙˙˙Ŗ<h`é ÷˙˙˙Ŗ@hhé÷˙˙˙ŖDhpé÷˙˙˙ŖHhxéđö˙˙˙ŖLh€éāö˙˙˙ŖPhˆéĐö˙˙˙ŖThéĀö˙˙˙ŖXh˜é°ö˙˙˙Ŗ\h é ö˙˙˙Ŗ`h¨éö˙˙˙Ŗdh°é€ö˙˙˙Ŗhh¸épö˙˙˙ŖlhĀé`ö˙˙˙ŖphČéPö˙˙˙ŖthĐé@ö˙˙˙ŖxhØé0ö˙˙˙Ŗ|hāé ö˙˙˙Ŗ€hčéö˙˙˙Ŗ„hđéö˙˙˙Ŗˆhøéđõ˙˙˙ŖŒhéāõ˙˙˙ŖhéĐõ˙˙˙Ŗ”héĀõ˙˙˙Ŗ˜hé°õ˙˙˙Ŗœh é õ˙˙˙Ŗ h(éõ˙˙˙Ŗ¤h0é€õ˙˙˙Ŗ¨h8épõ˙˙˙ŖŦh@é`õ˙˙˙Ŗ°hHéPõ˙˙˙Ŗ´hPé@õ˙˙˙Ŗ¸hXé0õ˙˙˙Ŗŧh`é õ˙˙˙ŖĀhhéõ˙˙˙ŖÄhpéõ˙˙˙ŖČhxéđô˙˙˙ŖĖh€éāô˙˙˙ŖĐhˆéĐô˙˙˙ŖÔhéĀô˙˙˙ŖØh˜é°ô˙˙˙ŖÜh é ô˙˙˙Ŗāh¨éô˙˙˙Ŗäh°é€ô˙˙˙Ŗčh¸épô˙˙˙ŖėhĀé`ô˙˙˙ŖđhČéPô˙˙˙ŖôhĐé@ô˙˙˙ŖøhØé0ô˙˙˙Ŗühāé ô˙˙˙Ŗhčéô˙˙˙Ŗhđéô˙˙˙Ŗhøéđķ˙˙˙Ŗ héāķ˙˙˙ŖhéĐķ˙˙˙ŖhéĀķ˙˙˙Ŗhé°ķ˙˙˙Ŗh é ķ˙˙˙Ŗ h(éķ˙˙˙Ŗ$h0é€ķ˙˙˙Ŗ(h8épķ˙˙˙Ŗ,h@é`ķ˙˙˙Ŗ0hHéPķ˙˙˙Ŗ4hPé@ķ˙˙˙Ŗ8hXé0ķ˙˙˙Ŗ<h`é ķ˙˙˙Ŗ@hhéķ˙˙˙ŖDhpéķ˙˙˙ŖHhxéđō˙˙˙ŖLh€éāō˙˙˙ŖPhˆéĐō˙˙˙ŖThéĀō˙˙˙ŖXh˜é°ō˙˙˙Ŗ\h é ō˙˙˙Ŗ`h¨éō˙˙˙Ŗdh°é€ō˙˙˙Ŗhh¸épō˙˙˙ŖlhĀé`ō˙˙˙ŖphČéPō˙˙˙ŖthĐé@ō˙˙˙ŖxhØé0ō˙˙˙Ŗ|hāé ō˙˙˙Ŗ€hčéō˙˙˙Ŗ„hđéō˙˙˙Ŗˆhøéđņ˙˙˙ŖŒhéāņ˙˙˙ŖhéĐņ˙˙˙Ŗ”héĀņ˙˙˙Ŗ˜hé°ņ˙˙˙Ŗœh é ņ˙˙˙Ŗ h(éņ˙˙˙Ŗ¤h0é€ņ˙˙˙Ŗ¨h8épņ˙˙˙ŖŦh@é`ņ˙˙˙Ŗ°hHéPņ˙˙˙Ŗ´hPé@ņ˙˙˙Ŗ¸hXé0ņ˙˙˙Ŗŧh`é ņ˙˙˙ŖĀhhéņ˙˙˙ŖÄhpéņ˙˙˙ŖČhxéđđ˙˙˙ŖĖh€éāđ˙˙˙ŖĐhˆéĐđ˙˙˙ŖÔhéĀđ˙˙˙ŖØh˜é°đ˙˙˙ŖÜh é đ˙˙˙Ŗāh¨éđ˙˙˙Ŗäh°é€đ˙˙˙Ŗčh¸épđ˙˙˙ŖėhĀé`đ˙˙˙ŖđhČéPđ˙˙˙ŖôhĐé@đ˙˙˙ŖøhØé0đ˙˙˙Ŗühāé đ˙˙˙Ŗhčéđ˙˙˙Ŗhđéđ˙˙˙Ŗhøéđī˙˙˙Ŗ héāī˙˙˙ŖhéĐī˙˙˙ŖhéĀī˙˙˙Ŗhé°ī˙˙˙Ŗh é ī˙˙˙Ŗ h(éī˙˙˙Ŗ$h0é€ī˙˙˙Ŗ(h8épī˙˙˙Ŗ,h@é`ī˙˙˙Ŗ0hHéPī˙˙˙Ŗ4hPé@ī˙˙˙Ŗ8hXé0ī˙˙˙Ŗ<h`é ī˙˙˙Ŗ@hhéī˙˙˙ŖDhpéī˙˙˙ŖHhxéđî˙˙˙ŖLh€éāî˙˙˙ŖPhˆéĐî˙˙˙ŖThéĀî˙˙˙ŖXh˜é°î˙˙˙Ŗ\h é î˙˙˙Ŗ`h¨éî˙˙˙Ŗdh°é€î˙˙˙Ŗhh¸épî˙˙˙ŖlhĀé`î˙˙˙ŖphČéPî˙˙˙ŖthĐé@î˙˙˙ŖxhØé0î˙˙˙Ŗ|hāé î˙˙˙Ŗ€hčéî˙˙˙Ŗ„hđéî˙˙˙Ŗˆhøéđí˙˙˙ŖŒh éāí˙˙˙Ŗh éĐí˙˙˙Ŗ”h éĀí˙˙˙Ŗ˜h é°í˙˙˙Ŗœh é í˙˙˙Ŗ h( éí˙˙˙Ŗ¤h0 é€í˙˙˙Ŗ¨h8 épí˙˙˙ŖŦh@ é`í˙˙˙Ŗ°hH éPí˙˙˙Ŗ´hP é@í˙˙˙Ŗ¸hX é0í˙˙˙Ŗŧh` é í˙˙˙ŖĀhh éí˙˙˙ŖÄhp éí˙˙˙ŖČhx éđė˙˙˙ŖĖh€ éāė˙˙˙ŖĐhˆ éĐė˙˙˙ŖÔh éĀė˙˙˙ŖØh˜ é°ė˙˙˙ŖÜh  é ė˙˙˙Ŗāh¨ éė˙˙˙Ŗäh° é€ė˙˙˙Ŗčh¸ épė˙˙˙ŖėhĀ é`ė˙˙˙ŖđhČ éPė˙˙˙ŖôhĐ é@ė˙˙˙ŖøhØ é0ė˙˙˙Ŗühā é ė˙˙˙Ŗhč éė˙˙˙Ŗhđ éė˙˙˙Ŗhø éđë˙˙˙Ŗ h éāë˙˙˙Ŗh éĐë˙˙˙Ŗh éĀë˙˙˙Ŗh é°ë˙˙˙Ŗh é ë˙˙˙Ŗ h( éë˙˙˙Ŗ$h0 é€ë˙˙˙Ŗ(h8 épë˙˙˙Ŗ,h@ é`ë˙˙˙Ŗ0hH éPë˙˙˙Ŗ4hP é@ë˙˙˙Ŗ8hX é0ë˙˙˙Ŗ<h` é ë˙˙˙Ŗ@hh éë˙˙˙ŖDhp éë˙˙˙ŖHhx éđę˙˙˙ŖLh€ éāę˙˙˙ŖPhˆ éĐę˙˙˙ŖTh éĀę˙˙˙ŖXh˜ é°ę˙˙˙Ŗ\h  é ę˙˙˙Ŗ`h¨ éę˙˙˙Ŗdh° é€ę˙˙˙Ŗhh¸ épę˙˙˙ŖlhĀ é`ę˙˙˙ŖphČ éPę˙˙˙ŖthĐ é@ę˙˙˙ŖxhØ é0ę˙˙˙Ŗ|hā é ę˙˙˙Ŗ€hč éę˙˙˙Ŗ„hđ éę˙˙˙Ŗˆhø éđé˙˙˙ŖŒh éāé˙˙˙Ŗh éĐé˙˙˙Ŗ”h éĀé˙˙˙Ŗ˜h é°é˙˙˙Ŗœh é é˙˙˙Ŗ h( éé˙˙˙Ŗ¤h0 é€é˙˙˙Ŗ¨h8 épé˙˙˙ŖŦh@ é`é˙˙˙Ŗ°hH éPé˙˙˙Ŗ´hP é@é˙˙˙Ŗ¸hX é0é˙˙˙Ŗŧh` é é˙˙˙ŖĀhh éé˙˙˙ŖÄhp éé˙˙˙ŖČhx éđč˙˙˙ŖĖh€ éāč˙˙˙ŖĐhˆ éĐč˙˙˙ŖÔh éĀč˙˙˙ŖØh˜ é°č˙˙˙ŖÜh  é č˙˙˙Ŗāh¨ éč˙˙˙Ŗäh° é€č˙˙˙Ŗčh¸ épč˙˙˙ŖėhĀ é`č˙˙˙ŖđhČ éPč˙˙˙ŖôhĐ é@č˙˙˙ŖøhØ é0č˙˙˙Ŗühā é č˙˙˙Ŗhč éč˙˙˙Ŗhđ éč˙˙˙Ŗhø éđį˙˙˙Ŗ h éāį˙˙˙Ŗh éĐį˙˙˙Ŗh éĀį˙˙˙Ŗh é°į˙˙˙Ŗh é į˙˙˙Ŗ h( éį˙˙˙Ŗ$h0 é€į˙˙˙Ŗ(h8 épį˙˙˙Ŗ,h@ é`į˙˙˙Ŗ0hH éPį˙˙˙Ŗ4hP é@į˙˙˙Ŗ8hX é0į˙˙˙Ŗ<h` é į˙˙˙Ŗ@hh éį˙˙˙ŖDhp éį˙˙˙ŖHhx éđæ˙˙˙ŖLh€ éāæ˙˙˙ŖPhˆ éĐæ˙˙˙ŖTh éĀæ˙˙˙ŖXh˜ é°æ˙˙˙Ŗ\h  é æ˙˙˙Ŗ`h¨ 鐿˙˙˙Ŗdh° 逿˙˙˙Ŗhh¸ épæ˙˙˙ŖlhĀ é`æ˙˙˙ŖphČ éPæ˙˙˙ŖthĐ é@æ˙˙˙ŖxhØ é0æ˙˙˙Ŗ|hā é æ˙˙˙Ŗ€hč éæ˙˙˙Ŗ„hđ éæ˙˙˙Ŗˆhø éđå˙˙˙ŖŒh éāå˙˙˙Ŗh éĐå˙˙˙Ŗ”h éĀå˙˙˙Ŗ˜h é°å˙˙˙Ŗœh é å˙˙˙Ŗ h( éå˙˙˙Ŗ¤h0 é€å˙˙˙Ŗ¨h8 épå˙˙˙ŖŦh@ é`å˙˙˙Ŗ°hH éPå˙˙˙Ŗ´hP é@å˙˙˙Ŗ¸hX é0å˙˙˙Ŗŧh` é å˙˙˙ŖĀhh éå˙˙˙ŖÄhp éå˙˙˙ŖČhx éđä˙˙˙ŖĖh€ éāä˙˙˙ŖĐhˆ éĐä˙˙˙ŖÔh éĀä˙˙˙ŖØh˜ é°ä˙˙˙ŖÜh  é ä˙˙˙Ŗāh¨ éä˙˙˙Ŗäh° é€ä˙˙˙Ŗčh¸ épä˙˙˙ŖėhĀ é`ä˙˙˙ŖđhČ éPä˙˙˙ŖôhĐ é@ä˙˙˙ŖøhØ é0ä˙˙˙Ŗühā é ä˙˙˙Ŗhč éä˙˙˙Ŗhđ éä˙˙˙Ŗhø éđã˙˙˙Ŗ héāã˙˙˙ŖhéĐã˙˙˙ŖhéĀã˙˙˙Ŗhé°ã˙˙˙Ŗh é ã˙˙˙Ŗ h(éã˙˙U‰åWVSuä‰Įč°Ã†ƒė8‰UÔVčžũ˙˙ƒÄƒ}ԋEätZ“\ ˙˙ƒĀQQRPč ė˙˙‹UԃĉđčķRR“K˙˙R‹ƒĀPčė˙˙ƒÄPPƒŸüū˙P‹EäƒĀPčgė˙˙‹UƒÄ‰đčē덓Ģüū˙ƒĀQQRPčFė˙˙ëÅRR“ĩúū˙R‹ƒÂRč0ė˙˙ZYVWčįü˙˙Į$Vč*é˙˙ƒÄeô‰ø[^_]ÉĮPPjVčé˙˙‰<$čYü˙˙ffffUWVSčĮÃׅƒė8ģXŗ@ö˙˙WčLč˙˙ƒÄ VW˙ŗÄū˙˙č ä˙˙Xƒą˙˙ZjPč<é˙˙‹“ŧ˙˙˙ˆƒÉ˙˙Y_jPč$é˙˙‹“@˙˙˙ˆ]XƒÚ˙˙jPč é˙˙‹“X˙˙˙ˆXƒ=øū˙ZPƒSøū˙Pčŋâ˙˙ƒÄ ‹Ģ\ū˙˙|$#WPUčzđ˙˙ƒÄ VU‹ĢÜū˙˙Uč‰ã˙˙YXƒ6$˙˙Pƒë˙˙Pč„â˙˙ƒÄ WP˙ŗœū˙˙čDđ˙˙ƒÄ V˙ŗœū˙˙UčTã˙˙XZƒTũū˙‰D$Pƒō˙˙PčKâ˙˙ƒÄ WP˙ŗ ˙˙˙č đ˙˙ƒÄ V˙ŗ ˙˙˙Učã˙˙YXƒų˙˙jPčKč˙˙‹‹˙˙˙ˆXƒ!˙˙ZjPčö˙˙‹‹„˙˙˙‰YXƒ˙˙jPčûõ˙˙‹‹°˙˙˙‰Xƒ ˙˙ZjPčč˙˙‹‹t˙˙˙ˆYXƒ˙˙jdPčËõ˙˙‹‹˙˙˙‰Xƒ%˙˙Z˙t$PčĄá˙˙ƒÄ WP˙ŗ”ū˙˙čaī˙˙ƒÄ V˙ŗ”ū˙˙Učqâ˙˙YXƒ6˙˙jPčĄį˙˙‹‹¤˙˙˙ˆ‹‹”˙˙˙‹ƒ`˙˙˙Q ‰T$ƒÄ ‰VPUč9â˙˙ƒÄčņâ˙˙‹‹˙˙˙ƒė‰ƒä#˙˙PƒG˙˙Pč#á˙˙ƒÄ WP˙ŗŦū˙˙čãî˙˙ƒÄ V˙ŗŦū˙˙Učķá˙˙XƒX˙˙ZjPč#į˙˙‹‹4˙˙˙ƒÄ ˆW‹ģtū˙˙˙t$Wč§î˙˙ƒÄ VWUčŧá˙˙‹ƒlū˙˙‹T$ƒÄ ‰VPUčĨá˙˙‹ƒP˙˙˙ƒÄ ĮĮ@Į@VP˙ŗ ˙˙˙č{á˙˙ƒÄ<[^_]Ãf‹$ÃffffffU‰åSčį˙˙˙Ã÷‚“0ƒ3)Ѝd$냸v‹ƒČū˙˙…Āt‰$˙Ѝd$[]Ít&U‰åSč§˙˙˙Ãˇ‚“0ƒ0)Ѝd$ėÁø‰ÁÁéČŅøt‹‹čū˙˙…Ét ‰D$‰$˙Ņd$[]Í´&U‰åSčW˙˙˙Ãg‚d$ė€ģ@u$‹ƒ´˙˙˙…Ātƒ@ö˙˙‰$č<ų˙˙č7˙˙˙ƃ@d$[]Éöŧ'U‰åSč˙˙˙Ã‚d$ėƒ<ö˙˙‹…Ōud$[]é6˙˙˙ļ‹“„ū˙˙…Ōtå‰$˙ŌëŪfffffffķÍ´&ŧ'ķÍ´&ŧ'V‹D$‹P ‹p1Ā9ōt´&‹ €yt€yƒØ˙ƒÂ9Öuę^ÃV‹D$‹P ‹p1Ā9ōt´&‹ €yƒØ˙ƒÂ9Öuđ^ÍļV‹D$‹P ‹p1Ā9ōt´&‹ €yƒØ˙ƒÂ9Öuđ^ÍļV‹D$‹P ‹p1Ā9ōt´&‹ €yƒØ˙ƒÂ9Öuđ^Íļ‹T$‹B+B ÁøÃfķÍ´&ŧ'ƒė ‹T$‹D$ƒ:uÆ@‹@ƒė‹RP˙QƒÄЍvŧ'U‰åWVSč…ũ˙˙Ã•€ƒė ‹M‹ƒ¸˙˙˙‹y ‹qƒĀ‰9÷t#t&‹…Āt ‹ƒė P˙RƒÄƒÆ9÷uį‹E‹x…˙t ƒė Wčdá˙˙ƒÄeô[^_]ÉƋE‹P…Ōt ƒė RčDá˙˙ƒÄƒė Včˆö˙˙´&VSčųü˙˙Ã €ƒė‹t$Včæâ˙˙‰4$čá˙˙ƒÄ[^Ѝ´&VSčÉü˙˙ÃŲƒėD$‹t$$PƒTũū˙PVčúę˙˙ƒÄ$‰đ[^ÂUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R ‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R,‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹|$‹l$€t:‹G‹w )ÆÁūƒîx*Áæë vŧ'‹G‹0ƒėƒî‹UP˙RƒÄƒūüuå^_]ÐUWV‹|$‹l$€t:‹G‹w )ÆÁūƒîx*Áæë vŧ'‹G‹0ƒėƒî‹UP˙R0ƒÄƒūüuå^_]ÐUWV‹|$‹l$€t:‹G‹w )ÆÁūƒîx*Áæë vŧ'‹G‹0ƒėƒî‹UP˙R$ƒÄƒūüuå^_]ÐUWV‹|$‹l$€t:‹G‹w )ÆÁūƒîx*Áæë vŧ'‹G‹0ƒėƒî‹UP˙R(ƒÄƒūüuå^_]ÐUWV‹|$‹l$€t:‹G‹w )ÆÁūƒîx*Áæë vŧ'‹G‹0ƒėƒî‹UP˙R8ƒÄƒūüuå^_]ÐUWV‹t$‹|$€~t=‹V‹F )ĐÁø…Āt.1íļ‹ǃėƒÅ‹W˙t$P˙R ‹V‹F ƒÄ)ĐÁø9ÅrÚ^_]Í´&ŧ'UWV‹t$‹l$€~t>‹V‹F )ĐÁøƒčx.<…ë ļ‹V‹:ƒėƒī‹ U˙t$R˙Q4ƒÄƒ˙üuá^_]Íļŧ'UW‰ÁVƒė‹Q‹D$ ‰Æ‰D$‹)ÂÁú…ŌtNƒæ‰Ī1í‰t$ 1öv‹L$ ‹¨‹D$…Ét ‹‹L$‹D˙ƒė ƒÅR˙ЋWƋƒÄ)ÂÁú9Õr˃ĉđ^_]Ã1öëķ´&ŧ'UW‰ĮVSčå÷˙˙Ãõzƒė …ĀtWž1íŗøū˙„Ōu*ëF´&ƒė ƒĮƒÅRčŨ˙˙žƒÄ„Ōt&ũų/€ú uÚƒė ƒĮƒÅVčËæ˙˙žƒÄ„ŌuÚƒÄ [^_]Éöŧ'ƒøū˙ƒė PčĄæ˙˙ƒÄƒÄ [^_]ÍļVSčI÷˙˙ÃYzƒė‹‹d˙˙˙…Étš˙˙˙˙đÁH…É~ƒÄ[^Ãf‹Hq˙…ɉpëƒėRPčŲá˙˙ƒÄƒÄ[^ÃU‰Á‰åWVS1˙čņö˙˙Ãzƒė,‰EЉUԋƒ”˙˙˙ƒĀ ‰ƒøū˙‰EĖļƒėWj ˙uÔčĒÜ˙˙ƒÄ ‰Æj ˙uĖ˙uĐčøî˙˙ƒÄƒū˙tX‹EԃƉō)ú‹‹@ô9Į‡šRW}ä˙uÔWč;ß˙˙XZW˙uĐčņ˙˙‹EäƒÄƒč ;ƒ”˙˙˙u‰÷듍vUā‰÷čūū˙˙넍t&‹Eԋ‹@ô9Į‡uāj˙W˙uÔVčéŪ˙˙Y_V˙uĐčžđ˙˙‹EāƒÄƒč ;ƒ”˙˙˙u ‹EЍeô[^_]ÍUäčĒū˙˙‹EЍeô[^_]ÃPƒøū˙WPƒl˙˙PčJØ˙˙‰Æ‹EЋƒč ;ƒ”˙˙˙tUßčpū˙˙ƒė Vč7ī˙˙Pƒøū˙WPƒl˙˙PčØ˙˙‰Æ‹Eāƒč ;ƒ”˙˙˙tēUäč:ū˙˙밉ƋEäƒč ;ƒ”˙˙˙t Uāč ū˙˙떍´&ŧ'UWVSčWõ˙˙Ãgxƒė,‹L$@‹|$DĮD$ÆD$…É„ĄЍt$‰T$‰$ƒ*øū˙1í‰D$D$‰D$ ‹$ļ(ƒÅP˙t$jVčÉí˙˙‰4$čÁâ˙˙ƒÄ PVWčÆī˙˙ƒÄ;l$@tM‹D$č…ítèuÆD$ ƒėjD$!PWčšī˙˙ƒÄëĨt&ÆD$-ƒėj˙t$Wč|ī˙˙ƒÄ뇍´&ƒÄ,[^_]Ѝ´&WV‰ĮS‰Öčtô˙˙Ã„w…Ōt*ƒė Rč1â˙˙ƒÄ P‹VPRč1ī˙˙ƒÄ‰ø[^_Ѝ´&ƒ/øū˙ƒėjP‹ƒĀPč ī˙˙ƒÄ‰ø[^_ÃU‰åWVSčô˙˙Ã%wƒė(jčåä˙˙‰Æ‹E ƒÄ ‰‹E‰F‹E‰FEįPF ˙uPč/â˙˙‹EƒÄ‰0eô[^_]Ãƒė ‰ĮVčô×˙˙‰<$č<í˙˙ļŋVSčŠķ˙˙Ãšvƒė‹t$ ‹…Ōt‹B ƒč ;ƒ”˙˙˙uƒė Rč¯×˙˙ƒÄƒÄ[^ÍļT$čü˙˙‹ëېfU‰åWVSčUķ˙˙Ãevƒė‹}‹ƒ ˙˙˙‹0…ötMƒėj:Vč"Ø˙˙ƒÄ…Āt#Uį)đRPVWč]ę˙˙ƒÄeô‰ø[^_]ļEįƒėPVWčJá˙˙ëې´&EįƒėPƒTũū˙PWč,á˙˙ƒÄëŊƒė PčNė˙˙ëõļŋWVS‹D$‹|$č°ō˙˙ÃĀupļļF˙N˙<*t6~<:tSÍ˙˙ƒÄeô[^_]ÍvƒėW˙u ˙6čbÕ˙˙ƒÄeô[^_]Í´&ƒPƒė P‰EäčÁ˙˙ƒÄ…Ā„g˙˙˙‹ŗx˙˙˙ƒė ˙6čƒŊ˙˙‰$čÛÉ˙˙…Ā•Āļ‰$čË˙˙Z˙u䈃(ˆEãč9Ę˙˙ƒÄļEãé.˙˙˙ƒė ˙u䉯čPÕ˙˙‰4$čØÖ˙˙´&SčJŨ˙˙ÃZ`ƒėƒĸøū˙PjčãĖ˙˙ƒđ˙˙‰$čUĶ˙˙X‹ƒx˙˙˙˙0čGČ˙˙ƒÄ[ÃfSč Ũ˙˙Ã`ƒėƒĸøū˙PjčŖĖ˙˙ƒ˙˙‰$čĶ˙˙X‹ƒx˙˙˙˙0čČ˙˙ƒÄ[ÃfVSčÉÜ˙˙ÃŲ_ƒė ƒ°øū˙‹t$Pjč^Ė˙˙ƒžøū˙ƒÄ ˙v˙6PčÚË˙˙Į$ čîÁ˙˙X‹ƒx˙˙˙˙0č°Į˙˙ƒÄ[^Ívŧ'UWVSčgÜ˙˙Ãw_ƒė‹D$0‹P…Ō„Ÿ‹‹@ …ԉוÁ1í1ö…Āt‹…‰Æ•Â„Ō‰Õu „ÉuƒÄ[^_]ÍƒÄøū˙ˆL$ƒė PčMË˙˙ƒÄļL$„Étiƒėƒę"˙˙WģÍøū˙PWč*Ë˙˙‰čƒÄ„ĀtšƒÕøū˙ƒė PčË˙˙ƒÄƒß"˙˙ƒėVPWčūĘ˙˙ƒÄƒÄ[^_]Ív‹@ 1É1˙…Ā…f˙˙˙ét˙˙˙t&‰č„Ā„f˙˙˙ģÍøū˙뷍ļUWVSčwÛ˙˙Ã‡^ƒė ‹D$ ‹l$$‹p‹@ ‰Į)÷Á˙…˙t&1É9.Vuë*vŧ'‰ÖƒÂ9jütƒÁ9ųuīƒÄ 1Ā[^_]Ѝt&V9Ât‰Á)҉ĪÁ˙…˙u‰Â‹D$ ƒę‰P ƒÄ ‰č[^_]ÍļƒėQRVčåĪ˙˙‹D$0ƒÄ‹P ëΐ´&U‰åWVS}įčÂÚ˙˙ÃŌ]ƒė0‹u‹ƒXū˙˙ƒĀ‰FW˙u PčîČ˙˙‹FƒÄ…Āt‹Pô…Ōu5‹ƒ˙˙˙˙0ƒ4˙˙j jPč%Ė˙˙X‹ƒ˙˙˙˙0č—Å˙˙Į$čģÔ˙˙veô[^_]ËN‰EԍAô;ƒ”˙˙˙t‰úččâ˙˙ƒė ˙uÔč­Ķ˙˙ļŋU‰åWVSčÚ˙˙Ã%]ƒė4‹u‹ƒ”˙˙˙ƒĀ ‰‹E ‹˙pôVčĐÕ˙˙‹E ƒÄ‹‹xô‰Æ…˙u#鎍vŧ'W÷€úv#‹PôƒÆÂ9Ötpļ>‰ų‰ú€ųŸÁ€ú ”ÂŅtՋE‹‹PôJ;Hø‰MÔw‹Hü…É~ƒė˙uÔ˙uč]Õ˙˙‹EƒÄ‹‹Pô‰ųˆ ‹E‹Pô;“”˙˙˙u%‹E ƒÆ‹‹PôÂ9Öu‹Eeô[^_]´&‹}ÔĮ@ü‰xôÆ8ëČ‰Æ‹E‹Aô;ƒ”˙˙˙tUįčģá˙˙ƒė Vč‚Ō˙˙fUWVSč÷Ø˙˙Ã\ƒė ‹t$4ƒčøū˙‹l$8j PVčˇĶ˙˙ƒÛøū˙ƒÄ‰D$ƒßøū˙‰D$ ë(ļƒė)čPUoVčhē˙˙ƒÄ j˙t$VčyĶ˙˙ƒÄƒė˙t$Uč™Ę˙˙ƒÄ…‰ĮuȃėUVč–Á˙˙ƒÄ j˙t$VčGĶ˙˙ƒÄ,[^_]Ѝ´&ŧ'VSčIØ˙˙ÃY[ƒė‹t$jčÉ˙˙‹“¸˙˙˙Æ@Į@Į@ Į@ƒÂ‰‰ĮFĮFƒÄ[^Ѝvŧ'VSčé×˙˙ÃųZƒė‹D$‹0…öt#‹“đü˙‹@9Đuƒė VčžŊ˙˙‰4$čæģ˙˙ƒÄƒÄ[^Ѝt&ƒė V˙ЃÄƒÄ[^А´&SčŠ×˙˙ÃšZƒė‹D$‹T$9Pt49PtƒėR˙0čÔÅ˙˙ƒÄ[Í´&ƒėĮ@R˙0čļÅ˙˙ƒÄ[ЃėĮ@R˙0čžÅ˙˙ƒÄ[А´&‹D$‹Ã´&‹D$‹ļ@Ѝt&‹D$‹Æ@Ѝt&SčęÖ˙˙ÃúYƒė‹D$˙p$čeĀ˙˙ƒÄ[ÃSčĘÖ˙˙ÃÚYƒė‹D$˙p$čåË˙˙ƒÄ[ÃSčĒÖ˙˙ÃēYƒė‹D$˙p$čåĖ˙˙ƒÄ[ÃSčŠÖ˙˙ÃšYƒė‹D$˙p$č%Ë˙˙ƒÄ[ÃSčjÖ˙˙ÃzYƒė‹D$˙p$čeĪ˙˙ƒÄ[ÃSčJÖ˙˙ÃZYƒė‹D$˙p$腷˙˙ƒÄ[ÃSč*Ö˙˙Ã:Yƒė‹D$˙p$č%Â˙˙ƒÄ[ÃSč Ö˙˙ÃYƒė‹D$˙p$č5Ę˙˙ƒÄ[ÃSčęÕ˙˙ÃúXƒė‹D$˙p$čĩˇ˙˙ƒÄ[ÃSčĘÕ˙˙ÃÚXƒė‹D$˙p$č5Ŋ˙˙ƒÄ[ÃSčĒÕ˙˙ÃēXƒė‹D$˙p$čõĩ˙˙ƒÄ[ËD$‹@$‹ė‹€čÍļŋ‹D$‹@$‹ô‹€đÍļŋVSčIÕ˙˙ÃYXƒė‹D$‹p$VčcĘ˙˙ƒÄ1Ō…Ā~ ƒÄ‰Đ[^Ãfƒė ÆˆVčaĪ˙˙ƒÄƒđƒÄ‰Â‰Đ[^ÐVSčųÔ˙˙Ã Xƒė‹D$‹p$VčĘ˙˙ƒÄ…Āē~ƒÄ‰Đ[^Í´&ƒė ÆˆVč Ī˙˙ƒÄ‰ÂƒÄ‰Đ[^ÍļŋWV‹D$ ‹L$‹p$1Ā…Éx‹~`‹Vd)úÁú9Ņ} ‹…Ōx‹FT‹ˆ^_Í´&ŧ'UWVSčWÔ˙˙ÃgWƒė(˙t$<čÉ˙˙‹ōøū˙ƒÄ…ĀĮD$‰L$ ué׍´&ƒD$ƒė ˙t$<č/Å˙˙ƒÄ9D$˛ƒė˙t$˙t$<čÉ˙˙ƒÄ€x,‰ĮtĮƒė 1öPčĩ˙˙ƒÄ…ĀuëŗvƒÆƒė Wčˇ˙˙ƒÄ9Æ}ƒėVWčS´˙˙ƒÄ€x‰Åt؍@ƒė PčėÍ˙˙ƒÄ„ĀtŃė˙t$jč7Ã˙˙ƒžøū˙ƒÄ ˙u˙wPč˛Â˙˙‰,$č ŧ˙˙Į$ 螸˙˙ƒÄ뉉öŧ'ƒÄ[^_]Ѝ´&‹D$‹@$ˆÃfWV‹D$ ‹t$‹H$1Ā…öx‹y`‹Qd)úÁú9Ö} ‹ˇ…Ōx‹AT‹^_Í´&ŧ'‹D$‹@$ĖÐf‹D$‹@$‹@Ѝt&‹D$‹@$‹€āÃf‹D$‹@$ƒĀlЍt&SčĒŌ˙˙ÃēUƒė‹D$‹ø…Ōtƒė ĖPčĨˇ˙˙ƒÄƒÄ[Íļŧ'WVSčhŌ˙˙ÃxUƒė ģé#˙˙WčSˇ˙˙ƒÄ…‰Æt#ƒųū˙ƒėPVč*Ā˙˙ƒÄ…Ātƒė Pčēž˙˙ƒÄ[^_̓X˙˙WVPjčÃÁ˙˙X‹ƒx˙˙˙˙0č5Ŋ˙˙Į$čYĖ˙˙‰öŧ'‹D$ ™÷|$;T$”ĀЍ´&ŧ'UWVSčĮŅ˙˙Ã×Tƒė‹D$0ĮD$‹@T‰Á‰D$‹D$0‹@X‰D$ )ȍ‹ųū˙Áø…‰ $„:´&‹D$‹L$1ö‹,ˆ1ɋU‹E ‰×)ĮÁ˙…˙uxéņvƒė˙w˙t$ č‰Ā˙˙‹G ƒÄ…Āt1‹…Āt+ƒß"˙˙ƒėPƒųū˙PčcĀ˙˙‹G ƒÄ…Ā„å‹čŲ˙˙ƒė j čdļ˙˙‹E ‹UƒÄš‰×ƒÆ)ĮÁ˙9ūsh‹<°€té„Éuƒƒųū˙ƒė˙uPč Ā˙˙‹EƒÄ…Āt-‹…Ōt'ƒę"˙˙ƒėPƒųū˙Pčãŋ˙˙‹EƒÄ…Āty‹čĸØ˙˙ƒė j ččĩ˙˙ƒÄé(˙˙˙‹D$0‹@T‰D$‹D$0‹@X‰D$ ‹D$ +D$ƒD$‹L$Áø9Á‚Îū˙˙‹ƒx˙˙˙ƒė ˙0čnģ˙˙ƒÄƒÄ[^_]Ív1Āé˙˙˙‰öŧ'1Ā녍ļŋWVƒė‹t$‹|$‹†Ø9øt…Āt ƒė ‹P˙RƒÄ‰žØƒÄ^_Ѝļŋ‹T$‹Š„ÂˆA…ÉDÂЍļWV1öS‹|$čĸĪ˙˙Ã˛R‹WT‹GX)ĐÁø…Āt+t&ƒė ˙4˛č­Ā˙˙‹G`‹WTƒÄ‰4°‹GXƒÆ)ĐÁø9ÆrÚ[^_Í´&ŧ'ļD$Ívŧ'Sč:Ī˙˙ÃJRƒėjč ž˙˙ƒÄ„Āu ƒÄ¸[Ãė jčÂ˙˙“Äö˙˙ƒÄ jRPčÍÄ˙˙ļŧ'UWVSčįÎ˙˙Ã÷Qƒė‹l$,Uč¤ŧ˙˙ƒÄ ‰Æ‹D$(‹8VUWč!Æ˙˙ƒÄ1Ō…Āu ‹D$$ūē‰0ƒÄ ‰Đ[^_]ÐVSč™Î˙˙ÃŠQƒė‰D$t$ƒx˙ū˙VPčËŊ˙˙ƒÄ„Āuƒy˙ū˙ƒėVPč´Ŋ˙˙ƒÄ„Āt]ƒųū˙ƒėVPčŊ˙˙ƒÄ„Āt1ƒÄ[^Ãļƒ%ųū˙ƒėVPčxŊ˙˙ƒÄ„ĀuŨƒ,ųū˙ƒėVPčaŊ˙˙ƒÄƒÄ[^Ѝ´&ƒ˙˙ƒėVPč@Ŋ˙˙ƒÄ„ĀuŒëĄ´&U‰åWVSčÕÍ˙˙ÃåPƒė,‹E‹u ‰EĖ‹E…Ā„ā…ö„؍Eڃė}āPƒx˙ū˙PWčéģ˙˙YXW}äWč-ĩ˙˙ƒ%ųū˙ƒÄ jPWčËÅ˙˙XEÜZWP‰EÔč ĩ˙˙‰4$č4ģ˙˙ƒÄ PV˙uÔč§Å˙˙‹E䋋”˙˙˙ƒÄƒč ‰MÔ9Čuy‹Eāƒč ;EÔu~‹u܃ė‹VôRV˙u‰UĐč€Ä˙˙ƒÄ1É…Ā‹UĐtFô;EÔudeô‰Č[^_]ÃfU€}Ėļt„‰Ņtڃš<=DĘëˍ´&eô1ɉČ[^_]Ít&UÛčpÕ˙˙éz˙˙˙v‰účaÕ˙˙év˙˙˙t&‰ú‰MÔčNÕ˙˙‹MÔ덉ƋE܋ģ”˙˙˙ƒč ‰}Ô9øtUÛč,Õ˙˙‹Eäƒč ;EÔtUÛčÕ˙˙‹Eāƒč ;EÔtUÛčÕ˙˙ƒė VčÍÅ˙˙‰Æ‹Eä‹ģ”˙˙˙ƒč ‰}Ô9øtĪUÜčāÔ˙˙ëʼnƋƒ”˙˙˙‰EÔëĨ‰Æ‹ƒ”˙˙˙‰EÔëĢt&Sč Ė˙˙ÃOƒė j˙t$˙t$čr¯˙˙ƒÄ…Āt+ļ‰Đƒāß/uëvƒÆļƒė ‹t$ƒ4PVčĸ˙˙ƒÄ‰đ[^t&UWVSč§ģ˙˙Ãˇ>ƒė,‹‹,;L$@tl…Éth‹y‹19÷t;D$‹Ģ”˙˙˙‰L$ ‰D$됃Æ9÷t‹ƒč 9čtđ‹T$ƒÆčÄ˙˙9÷uį‹L$ ‹9…˙t‰L$ƒė WčiŸ˙˙ƒÄ‹L$ƒė QčYŸ˙˙ƒÄ‹D$@‰ƒ,ƒÄ,[^_]Ít&čú5Á>‹,…Āt ķÉöŧ'‹P˙˙˙Éöŧ'UWVSč×ē˙˙Ãį=ƒė‹t$,‹|$0‹l$(VWčą˙˙“>ųū˙ƒÄ jRPč‰ĩ˙˙ƒÄūƒvVƒė1Ō‰čWj@č/Å˙˙ƒMųū˙ƒÄ jPWč]ĩ˙˙VÁXƒâū‰čY)ÖWVč Å˙˙ƒÄƒÚ˙˙ƒėjPWč5ĩ˙˙ƒÄ[^_]Ѝt&ƒė1Ō‰čWVčÚÄ˙˙ƒÄëΐt&UWVSč'ē˙˙Ã7=ƒė‹D$4‹|$0ŗeųū˙‹‹h…Ōtƒúŗmųū˙“Sųū˙Eō‹H‹P‰L$‹Jô…É„Đƒė R‰T$čŖ§˙˙ƒÄ P‹T$RW褴˙˙ƒÄƒV˙˙ƒėjPW菴˙˙XZ˙t$Wč͚˙˙‰ĮƒÍūū˙ƒÄ jPWčo´˙˙‰4$čW§˙˙ƒÄ PVWč\´˙˙ƒ^ūū˙ƒÄ jPWčJ´˙˙ƒÄ…턟ƒė Uč&§˙˙ƒÄ PUWč+´˙˙ƒÄ‹‹@ô‹t|…ö„–€~tAžF'ƒėPWčcŗ˙˙‰$č Ŧ˙˙ƒÄ,[^_]Ív‹ƒė‹Pôú‹BƒČPR芎˙˙ƒÄé0˙˙˙ƒė V觝˙˙‹ƒÄ‹P;“Ā˙˙˙¸ tĨƒėj V˙ԃÄžĀë•f‹ƒė‹Pôú‹BƒČPRčYŽ˙˙ƒÄéY˙˙˙čėš˙˙ļŋ‹T$‹B+ÁøiĀÍĖĖĖЍļŋVSči¸˙˙Ãy;ƒė‹t$…öxƒė ˙t$čü¨˙˙ƒÄ9Æ|ƒ¸˙˙ƒėVPču§˙˙čP˜˙˙‹D$ļ‹ƒÄ[^Ã´&ŧ'U‰åWVSč¸˙˙Ã;ƒė(hŧčŌ¨˙˙‰Æ@4‰$‰EäčԚ˙˙‹ģdū˙˙Ɔ¨Į†¤Æ†ŠĮ†ŦĮ†°G‹ģ˜ū˙˙Į†´Į†¸‰F4‹G‹W ‰‰Á‰Eā‹@ô‰U؉ĮFXZ‹QôjōRč4Š˙˙YX‹GN‹W‰MÜHô‰F‰jQčŠ˙˙‹G‹WN ‰Mā‹@ô‰‹ƒPū˙˙ĮFĮFĮFĮFP ĮF ĮF$‰P4ƒĀ ‰F‹ƒ€˙˙˙‰V4ƒĀ‰F F(‰$čLĻ˙˙‹ƒ`ū˙˙ĮF,ƒĀ‰F ‹ƒ”˙˙˙ƒĀ ‰F0XZ˙uā˙uä耨˙˙‹E‹}܃ĉ0‹F‹@ôĮDeô[^_]ÉĮ‹ƒdū˙˙ƒė ƒĀ‰F4˙uäčļŠ˙˙‰4$螚˙˙‰<$违˙˙ƒė ˙uā‰EÜčȞ˙˙XWYRVčŦĒ˙˙‹E܃ĉĮëĩ‹}ā‹Wô‹}؉<‰ĮëĨfU‰åWV…,˙˙˙Sčļ˙˙Ã/9ė‰Į‰…üū˙˙…`˙˙˙P‰…$˙˙˙čé˜˙˙‹ŗdū˙˙ÆEÔĮEĐÆEÕĮEØĮE܍F‹ŗ˜ū˙˙ĮEāĮE䉅`˙˙˙‹N ‹F‰Ę‰…,˙˙˙‰… ˙˙˙‰˙˙˙‰Á‹@ô‰”,˙˙˙Į…0˙˙˙X‹AôZjøPčJ§˙˙‹V…4˙˙˙Y‰…˙˙˙Bô‰•4˙˙˙_‹~‰•˙˙˙‰8jP‰Ŋ˙˙˙č§˙˙‹~‹V‹Gô‰Ŋ ˙˙˙‹ģPū˙˙‰•˙˙˙‰”,˙˙˙‹“€˙˙˙G Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙‰…,˙˙˙G4Į…L˙˙˙Į…P˙˙˙‰…`˙˙˙G ‰…4˙˙˙B•T˙˙˙‰…8˙˙˙‰$‰•˙˙˙č¤˙˙‹“`ū˙˙Į…X˙˙˙B‹“”˙˙˙‰…8˙˙˙B ‰…\˙˙˙XZ•8˙˙˙R˙ĩ$˙˙˙‰•˙˙˙č9Ļ˙˙^X‹…4˙˙˙‹˙˙˙‹PôʋB ƒāĩ @‰B ˙u Qčo•˙˙ZY˙ĩ˙˙˙˙učĒ˙˙G ƒÄ ‰…,˙˙˙G4‰…`˙˙˙G ‰…4˙˙˙‹ƒ`ū˙˙ƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ”˙˙˙…‹ƒ€˙˙˙ƒė ˙ĩ˙˙˙ƒĀ‰…8˙˙˙čĀ­˙˙‹… ˙˙˙‹ĩ˙˙˙‹˙˙˙‹@ô‰´,˙˙˙‹…˙˙˙‹ĩ˙˙˙‰…4˙˙˙‹@ô‰Œ4˙˙˙‹… ˙˙˙‰…,˙˙˙‹@ô‰´,˙˙˙‹ƒdū˙˙ƒĀ‰…`˙˙˙X˙ĩ$˙˙˙č§Ļ˙˙‹EƒÄeô[^_]´&•+˙˙˙čõģ˙˙éS˙˙˙‰Æ‹ƒdū˙˙ƒė ˙ĩ$˙˙˙ƒĀ‰…`˙˙˙čaĻ˙˙‰4$č™Ŧ˙˙ƒė ˙ĩüū˙˙‰Æč9Ģ˙˙‰4$čŦ˙˙ƒė ˙ĩ˙˙˙‰Įča›˙˙XF‰ūYP˙ĩüū˙˙č>§˙˙ƒÄ뛋 ˙˙˙‰Æ‰,˙˙˙‹Qô‹˙˙˙‰Œ,˙˙˙éx˙˙˙ļU‰åWVSŊ,˙˙˙蟞˙˙Ã¯5ė‹E ‹U‰Ŋėū˙˙‰…øū˙˙…`˙˙˙‰•üū˙˙P‰…˙˙˙čY•˙˙‹ŗdū˙˙ÆEÔĮEĐÆEÕĮEØĮE܍F‹ŗ˜ū˙˙ĮEāĮE䉅`˙˙˙‹N‹V ‹Aô‰,˙˙˙‰•˙˙˙‰˙˙˙‰”,˙˙˙Į…0˙˙˙yôXZjWčĀŖ˙˙‹VY4˙˙˙‹Bô‰•4˙˙˙‰• ˙˙˙‹V_ȉôū˙˙‰jP‰•˙˙˙苪˙˙‹~‹V‹Gô‰Ŋ˙˙˙‹ģPū˙˙‰•˙˙˙‰”,˙˙˙‹“€˙˙˙G Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙‰…,˙˙˙G4Į…L˙˙˙Į…P˙˙˙‰…`˙˙˙G ‰…4˙˙˙B•T˙˙˙‰…8˙˙˙‰$‰•đū˙˙菠˙˙‹“`ū˙˙Į…X˙˙˙B‹“”˙˙˙‰…8˙˙˙B ‰…\˙˙˙XZ•8˙˙˙R˙ĩ˙˙˙‰•˙˙˙č­ĸ˙˙ß­øū˙˙^ØŗØ.˙˙Ũ$˙ĩôū˙˙čB§˙˙ZY˙ĩ˙˙˙˙učĸĻ˙˙G ƒÄ ‰…,˙˙˙G4‰…`˙˙˙G ‰…4˙˙˙‹ƒ`ū˙˙ƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ”˙˙˙… ‹ƒ€˙˙˙ƒė ˙ĩđū˙˙ƒĀ‰…8˙˙˙čCĒ˙˙‹…˙˙˙‹ĩ˙˙˙‹@ô‰´,˙˙˙‹… ˙˙˙‹ĩ˙˙˙‰…4˙˙˙‹@ô‰´4˙˙˙‹…˙˙˙‹ĩ˙˙˙‰…,˙˙˙‹@ô‰´,˙˙˙‹ƒdū˙˙ƒĀ‰…`˙˙˙X˙ĩ˙˙˙č*Ŗ˙˙‹EƒÄeô[^_]vŧ'•+˙˙˙ču¸˙˙éP˙˙˙‰Æ‹ƒdū˙˙ƒė ˙ĩ˙˙˙ƒĀ‰…`˙˙˙čáĸ˙˙‰4$čŠ˙˙ƒė ˙ĩėū˙˙‰Æčš§˙˙‰4$čŠ˙˙ƒė ˙ĩ˙˙˙‰Įčá—˙˙XF‰ūYP˙ĩėū˙˙čžŖ˙˙ƒÄ뛋ĩ˙˙˙‰ĩ,˙˙˙‹Vô‹ĩ˙˙˙‰´,˙˙˙‰Æéx˙˙˙ļU‰åWVS`˙˙˙…,˙˙˙č¯˙˙Ã)2ė‰…˙˙˙‰$˙˙˙Qčë‘˙˙‹ģdū˙˙‹ŗ˜ū˙˙ÆEÔĮEĐÆEÕĮE؍G‹~‹V ĮEÜĮE≅`˙˙˙ĮEä‹Gô‰Ŋ,˙˙˙‰•˙˙˙‰”,˙˙˙Į…0˙˙˙X‹…˙˙˙GôZjPčR ˙˙YX‹F‰Â‰…4˙˙˙‰…˙˙˙…4˙˙˙‰… ˙˙˙Bô‹V‰jP‰• ˙˙˙č ˙˙‹V‹N‹Bô‰•˙˙˙‹“Pū˙˙‰˙˙˙‰Œ,˙˙˙Į…<˙˙˙B Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙‰…,˙˙˙B4Į…P˙˙˙‰…`˙˙˙B ‹“€˙˙˙‰…4˙˙˙B•T˙˙˙‰…8˙˙˙‰$‰•˙˙˙č!˙˙‹“`ū˙˙Į…X˙˙˙B‹“”˙˙˙‰…8˙˙˙B ‰…\˙˙˙XZ•8˙˙˙R˙ĩ$˙˙˙‰•˙˙˙č?Ÿ˙˙‹…4˙˙˙‹ĩ ˙˙˙ƒÄpô€~u„ÆFt0‹@ôƒė˙u ˙ĩ ˙˙˙Į„<˙˙˙č`Ž˙˙ZY˙ĩ˙˙˙˙učŖ˙˙‹ƒPū˙˙ƒÄ ƒĀ ‰…,˙˙˙‹ƒPū˙˙ƒĀ4‰…`˙˙˙‹ƒPū˙˙ƒĀ ‰…4˙˙˙‹ƒ`ū˙˙ƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ”˙˙˙…ė‹ƒ€˙˙˙ƒė ˙ĩ˙˙˙ƒĀ‰…8˙˙˙čŸĻ˙˙‹…˙˙˙‹˙˙˙‹@ô‰Œ,˙˙˙‹…˙˙˙‹ ˙˙˙‰…4˙˙˙‹@ô‰Œ4˙˙˙‹Gô‰Ŋ,˙˙˙‹Ŋ˙˙˙‰ŧ,˙˙˙‹ƒdū˙˙ƒĀ‰…`˙˙˙X˙ĩ$˙˙˙茟˙˙‹EƒÄeô[^_]t&‹N|…ɉüū˙˙tm‹üū˙˙€ytÆFuéÃū˙˙ļƒė QčĮ˙˙‹…üū˙˙ƒÄ‹‹@;ƒĀ˙˙˙u!‹…4˙˙˙ëʉöŧ'•+˙˙˙腴˙˙é˙˙˙ƒėj ˙ĩüū˙˙˙ЃÄëÍč Ž˙˙ƒė ˙ĩ˙˙˙‰ÆčŲŖ˙˙‰4$č!Ĩ˙˙ƒė ˙ĩ˙˙˙‰Įč”˙˙XF‰ūYP˙ĩ˙˙˙č۟˙˙ƒÄ‹ƒdū˙˙ƒė ˙ĩ$˙˙˙ƒĀ‰…`˙˙˙螞˙˙‰4$čÖ¤˙˙‰Ŋ,˙˙˙‹Wô‰Æ‹Ŋ˙˙˙‰ŧ,˙˙˙ëÁ‰ÆëŊ´&U‰åWVS`˙˙˙čĢ˙˙Ã/.ė‹E ‰$˙˙˙Q‰…˙˙˙…,˙˙˙‰…˙˙˙čâ˙˙‹ģdū˙˙‹ŗ˜ū˙˙ÆEÔĮEĐÆEÕĮE؍G‹~‹V ĮEÜĮE≅`˙˙˙ĮEä‹Gô‰Ŋ,˙˙˙‰•˙˙˙‰”,˙˙˙Į…0˙˙˙X‹…˙˙˙GôZjPčIœ˙˙YX‹F‰Â‰…4˙˙˙‰… ˙˙˙…4˙˙˙‰… ˙˙˙Bô‹V‰jP‰•˙˙˙čœ˙˙‹V‹N‹Bô‰•˙˙˙‹“Pū˙˙‰˙˙˙‰Œ,˙˙˙Į…<˙˙˙B Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙‰…,˙˙˙B4Į…P˙˙˙‰…`˙˙˙B ‹“€˙˙˙‰…4˙˙˙B•T˙˙˙‰…8˙˙˙‰$‰•üū˙˙č™˙˙‹“`ū˙˙Į…X˙˙˙B‹“”˙˙˙‰…8˙˙˙B ‰…\˙˙˙XZ•8˙˙˙R˙ĩ$˙˙˙‰•˙˙˙č6›˙˙‹…4˙˙˙‹ĩ ˙˙˙ƒÄļ˙˙˙pô‰˙˙˙€~u„5ÆFt0‹Pôƒė‹ ˙˙˙Į„<˙˙˙‹PôʋB ƒāĩ @‰B ˙ĩ˙˙˙QčcŸ˙˙ZY˙ĩ˙˙˙˙učãž˙˙‹ƒPū˙˙ƒÄ ƒĀ ‰…,˙˙˙‹ƒPū˙˙ƒĀ4‰…`˙˙˙‹ƒPū˙˙ƒĀ ‰…4˙˙˙‹ƒ`ū˙˙ƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ”˙˙˙…ī‹ƒ€˙˙˙ƒė ˙ĩüū˙˙ƒĀ‰…8˙˙˙črĸ˙˙‹…˙˙˙‹ĩ˙˙˙‹˙˙˙‹@ô‰´,˙˙˙‹… ˙˙˙‰…4˙˙˙‹@ô‰Œ4˙˙˙‹Gô‰Ŋ,˙˙˙‹Ŋ˙˙˙‰ŧ,˙˙˙‹ƒdū˙˙ƒĀ‰…`˙˙˙X˙ĩ$˙˙˙č_›˙˙‹EƒÄeô[^_]´&‹N|…ɉøū˙˙tm‹øū˙˙€ytÆFuéŠū˙˙ļƒė Q藌˙˙‹…øū˙˙ƒÄ‹‹@;ƒĀ˙˙˙u!‹…4˙˙˙ëʉöŧ'•+˙˙˙čU°˙˙é˙˙˙ƒėj ˙ĩøū˙˙˙ЃÄëÍčŲ‰˙˙ƒė ˙ĩ˙˙˙‰ÆčП˙˙‰4$čņ ˙˙ƒė ˙ĩ˙˙˙‰ĮčŅ˙˙XF‰ūYP˙ĩ˙˙˙讛˙˙ƒÄ‹ƒdū˙˙ƒė ˙ĩ$˙˙˙ƒĀ‰…`˙˙˙čnš˙˙‰4$čĻ ˙˙‰Ŋ,˙˙˙‹Wô‰Æ‹Ŋ˙˙˙‰ŧ,˙˙˙ëÁ‰ÆëŊ´&U‰åWVSčõĻ˙˙Ã*ƒė,‹U ‹uú˙˙wnƒúw)ÆEáˆUāE܃ėPEāPVč•˙˙ƒÄeô‰đ[^_]Âfú˙†Ŧú˙˙‡Ā‰Đ‰ŅÁę Áčƒá?ƒĘāƒā?ƒÉ€ÆEãƒČ€ˆMâˆUāˆEá랍E܃ė}āRP‰EÔč=“˙˙Xƒ{ųū˙Z˙uÔPWč[™˙˙‰<$Včâ˙˙ƒn˙˙ƒÄ jPV耞˙˙‹Eā‹‹”˙˙˙ƒÄƒč ‰MÔ9Č…~‹E܃č ;EÔ„I˙˙˙‰úč°Ž˙˙é=˙˙˙v‰ĐÁęÆEâƒā?ƒĘĀƒČ€ˆUāˆEáé ˙˙˙v‰Đ‰ŅÆEäƒā?ÁéƒČ€ƒá?ˆEã‰ĐÁęÁč ƒÉ€ƒĘđƒā?ˆMâˆUāƒČ€ˆEáéÍū˙˙´&UÛč@Ž˙˙éu˙˙˙‰Į‹‹ŗ”˙˙˙ƒč ‰uÔ9đtUÛčŽ˙˙‰ū‹Eāƒč ;EÔtUÛč Ž˙˙‹E܃č ;EÔtUÛč÷­˙˙ƒė V辞˙˙‰Æ‹ƒ”˙˙˙‰EÔë׉Ƌƒ”˙˙˙‰EÔ뷍t&U‰åWVSčĨ˙˙Ã%(ėėƒ}˙‹} „Œ…,˙˙˙ƒėjP‰…˙˙˙če”˙˙‹MƒÄ…É~{‹…Ātu(˙˙˙1ö‰˙˙˙됍t&ƒÆ;utX‹ˇ…ĀtQƒėP˙ĩ˙˙˙蒖˙˙X‹…(˙˙˙Z˙pôP…4˙˙˙PčjŸ˙˙‹…(˙˙˙ƒÄƒč ;ƒ”˙˙˙tļ•'˙˙˙ƒÆč­˙˙;uuĢvƒė˙ĩ˙˙˙˙učī™˙˙‹ƒPū˙˙ƒÄ P ‰•,˙˙˙P4ƒĀ ‰…4˙˙˙‹ƒ`ū˙˙‰•`˙˙˙ƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ”˙˙˙…Ģ‹ƒ€˙˙˙ƒė ƒĀ‰…8˙˙˙…T˙˙˙PčŲ˙˙‹ƒ˜ū˙˙‹P‹H‹Rô‰Œ,˙˙˙‹P‹H‰•4˙˙˙‹Rô‰Œ4˙˙˙‹P‹@ ‰•,˙˙˙‹Rô‰„,˙˙˙‹ƒdū˙˙ƒĀ‰…`˙˙˙…`˙˙˙‰$čʖ˙˙‹EƒÄeô[^_]vŧ'ƒė Wč‰˙˙ƒÄ‰Eé`ū˙˙•(˙˙˙čŦ˙˙éE˙˙˙‰Æƒė ˙ĩ˙˙˙čl›˙˙‰4$贜˙˙‰Æ‹…(˙˙˙ƒč ;ƒ”˙˙˙t׍•'˙˙˙čÆĢ˙˙ëʍt&U‰åWVSčŖ˙˙Ã&ƒė,‹E ‹8‹Gô…‰EÔtc1övˇ‹…Étg‹MԍUäƒė)ņQPRč,’˙˙‹EäYZ˙pôP‹E‹‰EЃĀP蒝˙˙‹EäƒÄƒč ;ƒ”˙˙˙uf‹Eԍ…ŌtQƒÆ9đuō‹Eeô[^_]Í´&‹EUâƒėÆEâƒÆ‹jR‰EЃĀPč7˙˙ƒÄ9uÔ…c˙˙˙ëŋ‰öŧ'‰EÔëįUãčãĒ˙˙‹EÔ떉ƋEäƒč ;ƒ”˙˙˙tUãčÆĒ˙˙ƒė V荛˙˙ļŋVSčųĄ˙˙Ã %ƒė‹D$$‹t$ …Ātƒėj˙PVč8‘˙˙ƒÄ ‰đƒÄ[^vƒėD$Pƒ/øū˙PVč˙˙ƒÄ‰đƒÄ[^ļU‰åVSEôƒė˙u ‹uP艡˙˙Ã™$čˆ˙˙‹EôZY˙pôP‹PRčJœ˙˙‹EôƒÄƒč ;ƒ”˙˙˙u eø‰đ[^]ÍUķčøŠ˙˙eø‰đ[^]ÉƋEôƒč ;ƒ”˙˙˙tUķč׊˙˙ƒė V螚˙˙´&ŧ'U‰åVSEôƒė˙u ‹uPčų ˙˙Ã $č~‡˙˙‹EôZY˙pôP‹PRčē›˙˙‹EôƒÄƒč ;ƒ”˙˙˙u eø‰đ[^]ÍUķčhŠ˙˙eø‰đ[^]ÉƋEôƒč ;ƒ”˙˙˙tUķčGŠ˙˙ƒė Včš˙˙´&ŧ'U‰åWVS‰Öčs ˙˙Ãƒ#ƒė,ƒø\‡Ņ‹Œƒ@˙˙˙␍t&ƒėƒ’ųū˙jt&PVč›˙˙ƒÄ¸eô[^_]Éöŧ'ƒėƒ6øū˙jëĶvƒėƒ•ųū˙jëÍvƒėƒ˜ųū˙jëŗvƒėƒĄųū˙jëŖvƒėƒøū˙j듍vƒėƒ¤ųū˙j냍vƒėƒ›ųū˙jép˙˙˙ƒėƒžųū˙jé`˙˙˙ƒėƒųū˙jéP˙˙˙Pāƒú^vx}āƒėPW‰}ԍ}äčUŒ˙˙YXƒ§ųū˙˙uÔPWčs’˙˙X‹EäZ˙pôPVč4š˙˙‹E䋺”˙˙˙ƒÄƒč 9đu‹Eāƒč 9đu ¸éüū˙˙‰účÖ§˙˙ëíUßč˧˙˙ëŲvŧ'ˆEäEäƒėjPVčŪ™˙˙ƒÄ1ĀéÃū˙˙‰Į‹E䋺”˙˙˙ƒč 9đtUß芧˙˙‹Eāƒč 9đtUßčx§˙˙ƒė Wč?˜˙˙‰Į‹ŗ”˙˙˙ëېt&SčĒž˙˙Ãē!ƒėƒø"t4ƒø'uƒäųū˙ƒėjPRče™˙˙ƒÄ1ƒÄ[ÍvƒÄ[éīũ˙˙´&ƒĒųū˙ƒėjPRč6™˙˙ƒÄ¸ƒÄ[Éöŧ'UW‰ÕVSč5ž˙˙ÃE!ƒė ‹|$4‰D$ƒK˙˙j‰D$PWčņ˜˙˙ƒÄ…í‹L$ti)qļ)‰D$ƒ­ųū˙‰D$ ëAt&ƒøļ.u1ƒė Učׄ˙˙ƒÄ…Āt!ƒėj˙t$W襘˙˙ƒÄ j˙t$W蒘˙˙ƒÄƒÆ‰ú‰ččķū˙˙;t$uĩƒėj˙t$Wčn˜˙˙ƒÄƒÄ[^_]ÍvVSčy˙˙Ã‰ ƒė‹T$‹D$‹t$…Ōt €|˙J˙t&ƒė Vč ˙˙˙ƒ°ųū˙ƒÄ jPVč˜˙˙ƒÄ[^Ѝt&‰t$ƒÄ‰Ę[^éāū˙˙WVS‹t$č˙˙Ã$ ‹|$…öt>ƒėVWčˁ˙˙“Ëųū˙ƒÄ j RPčʗ˙˙‰4$螊˙˙ƒÄ‰|$‰Â[‰đ^_éū˙˙´&ƒÆųū˙ƒėjPW薗˙˙ƒÄ[^_Ãë ‹D$‹L$‹‹Pô‰L$éJū˙˙vŧ'UW‰ÅVS‰Öčsœ˙˙Ãƒƒė ‹|$4‰T$ƒŲųū˙j‰D$PWč/—˙˙ƒÄ…ötxƒ­ųū˙‹M1ö‰D$ ‰öŧ'‰ú‰ČƒÆčtũ˙˙;4$tOƒø‹LĩuæļÁ9Áu߃ė Q‰L$čƒ˙˙ƒÄ…Ā‹L$tĮƒėj˙t$WčȖ˙˙ƒÄ j˙t$W蹖˙˙ƒÄ‹L$렍ƒK˙˙ƒėjPW螖˙˙ƒÄƒÄ[^_]ÍvVS詛˙˙Ãšƒė‹T$‹D$‹t$…Ōt‹Lü…Ét(ƒė Vč˙ū˙˙ƒ°ųū˙ƒÄ jPVčM–˙˙ƒÄ[^Í´&‰t$ƒÄƒę[^éĪū˙˙ë WVS‹t$č4›˙˙ÃD‹|$…öt>ƒėVWčė˙˙“Ëųū˙ƒÄ j RPčę•˙˙‰4$貀˙˙ƒÄ‰|$‰Â[‰đ^_éoū˙˙´&ƒÆųū˙ƒėjPWčļ•˙˙ƒÄ[^_Ãë ‹D$‹L$‹‹Pô‰L$é*ū˙˙vŧ'U‰åWVS蕚˙˙ÃĨƒė8‹U‹} ‹ƒ”˙˙˙ƒĀ ‰WčEˆ˙˙ZYƒĀP˙učG–˙˙ļ7ƒÄ‰đ„Ā„įƒÜųū˙‰EĐëdt&<%}h< td‹E‹‹PôJ;Hø‰MÔw‹Hü…É~ƒė˙uÔ˙učø•˙˙‹EƒÄ‹‹Pô‰ņˆ ‹E‹Pô;“”˙˙˙…¤ƒĮļ7‰đ„Ātx‰đ<&~š‰đ<=uœEāƒė‰Á‰đžđ‰MÔVQče„˙˙^uäX˙uÔ˙uĐVčČ˙˙‰4$˙učI”˙˙‹EäƒÄƒč ;ƒ”˙˙˙u8‹Eāƒč ;ƒ”˙˙˙t–‰ōƒĮč0ĸ˙˙ļ7‰đ„Āu´&‹Eeô[^_]vUßčĸ˙˙랍ļ‹UÔĮ@ü‰PôÆéF˙˙˙‰Æ‹E‹ƒč ;ƒ”˙˙˙tUßčĐĄ˙˙ƒė V藒˙˙‰Æ‹Eäƒč ;ƒ”˙˙˙tUßč¯Ą˙˙‹Eāƒč ;ƒ”˙˙˙tšUß虡˙˙믉ÆëäfU‰åWVSč՘˙˙Ãåƒė,‹E ‹u‹‹Rô…Ō„}܃ėPWčĖ‹˙˙‰<$}āWč@€˙˙ƒÄ j/jWčŖ…˙˙EäƒÄ ˙uWP‰EÔčāz˙˙X˙uÔVč€˙˙‰4$č^˙˙‹Eä‹ģ”˙˙˙ƒÄƒč 9øuS‹Eāƒč 9øuY‹E܃č 9øu/eô‰đ[^_]vƒė˙uVčĖ˙˙ƒÄeô‰đ[^_]t&‹UÔčĀ ˙˙ëĮļUÛč° ˙˙ëŖļ‹UÔč  ˙˙띋ģ”˙˙˙‰Æ‹E܃č 9øtUÛ脠˙˙ƒė VčK‘˙˙‰Eԋ‹ģ”˙˙˙ƒč 9øtUÛča ˙˙‹uԋEäƒč 9øtUÛčL ˙˙‹Eāƒč 9øtŦUÛč: ˙˙ëĸ‰Æ‹ģ”˙˙˙ëĐ‰Æ‹ģ”˙˙˙ëØ‰Æ‹Eā‹ģ”˙˙˙ƒč 9ø„x˙˙˙Uäč ˙˙ék˙˙˙U‰åWVS}āčB—˙˙ÃRƒė4˙u‹uWč ‘˙˙‹EāƒÄ ‹@ô…Āu0ƒė˙u Vč´~˙˙‹ģ”˙˙˙ƒÄ‹Eāƒč 9øuaeô‰đ[^_]t&Eäƒė˙u P‰EÔč~~˙˙ƒSũū˙ƒÄ jP˙uÔč˙˙ƒÄ W˙uÔVčy˙˙‹Eä‹ģ”˙˙˙ƒÄ ƒč 9øtŸUßčRŸ˙˙땍UäčHŸ˙˙eô‰đ[^_]‹ģ”˙˙˙‰Æ‹Eāƒč 9øtUßč"Ÿ˙˙ƒė Včé˙˙‰Æ‹Eä‹ģ”˙˙˙ƒč 9øtĶUßč˙ž˙˙ëÉëât&ŧ'Sč:–˙˙ÃJƒė˙t$ļD$Pč„˙˙ƒÄ[Íļŧ'Sč –˙˙Ãƒė˙t$žD$PčÂw˙˙ƒÄ[Íļŧ'Sčڕ˙˙Ãęƒė˙t$˙t$脑˙˙ƒÄ[Ãë U‰åWVSMāuŦ蟕˙˙Ã¯ƒėpƒ}‹}“öųū˙ƒæųū˙Q‰M”EÂPVčŃ˙˙E°‰E˜‰$‹ƒ”˙˙˙‰E¤č^˙˙‹ƒ”˙˙˙‰<$‰E¤čũ…˙˙ƒÄƒø„lƒė ‹ƒ”˙˙˙W‰E¤č߅˙˙Y‰ÆXƒwüū˙P‹E°ƒĀP‹ƒ”˙˙˙‰E¤č/~˙˙‹EŦƒÄ ˙pôP‹E°ƒĀP‹ƒ”˙˙˙‰E¤čЏ˙˙XƒSũū˙Z‰EœP‹E°ƒĀP‹ƒ”˙˙˙‰E¤čī}˙˙YXƒküū˙P‹E°ƒĀP‹ƒ”˙˙˙‰E¤čŅ}˙˙X‹E°ZVƒĀP‹ƒ”˙˙˙‰E¤čÉu˙˙ƒ úū˙Y^P‹E°ƒĀP‹ƒ”˙˙˙‰E¤č›}˙˙ƒÄ1öéTƒė‹ƒ”˙˙˙VW‰E¤č͋˙˙‹M°‰E ƒÄ ‹“”˙˙˙j˙uœA‰U¤Pč˙˙X‹E°Z˙u ƒĀP‹ƒ”˙˙˙‰E¤čC˙˙ƒÄƒÆƒė ‹ƒ”˙˙˙W‰E¤čģ„˙˙ƒÄ9Æ|”EĐƒė ‰EœP‹ƒ”˙˙˙‰E¤č,„˙˙E´uԉE P‹ƒ”˙˙˙‰E¤čԍ˙˙‹E´Y_xE¸˙u˜P‹ƒ”˙˙˙‰E¤č—˙˙X‹E¸Z˙pôPW舎˙˙‹E¸‹“”˙˙˙ƒÄƒč ‰U¤9Đ…š‹uԅö„ȍuԍEŧƒė˙u PčQ˙˙‹}ŧWč8˙˙ƒÄ PW˙uÔčĢ‹˙˙‹EŧƒÄƒč ;E¤…‹E´…Ātƒė jč‚˙˙ƒÄ„ĀuGƒė˙uœ˙uč#„˙˙_XjVčŠv˙˙ƒÄƒėj˙u˜č9y˙˙‹EŦƒÄƒč ;E¤… ‹Eeô[^_]‹E´…Āt˛‹ƒė P˙RƒÄ뤃ė‹ƒ”˙˙˙jW‰E¤č1Š˙˙‰ĮƒÄ‹9E„‹EØƒė ‹‹”˙˙˙P‰E ‰M¤čŲ‚˙˙ƒwüū˙‰$˙u čč‚˙˙ZYVPčŋx˙˙Z“Sũū˙YRPč°y˙˙Y“úū˙^RPčÁ‚˙˙^ZWP踍˙˙ZYP˙učMƒ˙˙EÜ^_jP‹ƒ”˙˙˙‰E¤čĮu˙˙‹ƒ”˙˙˙ƒÄ‰E¤é˙˙˙‹E ƒė˙0˙wč&„˙˙ƒÄ…Ātz‹ƒ”˙˙˙ƒė ˙u‰E¤č{ƒ˙˙‹ƒ”˙˙˙ƒÄ ‰E¤éÔū˙˙‹U”č’š˙˙‹Eeô[^_]‹U”č}š˙˙é:ū˙˙‹U”čpš˙˙érū˙˙ƒė uÔj莂˙˙‹}¤ZYW ‰PVč-u˙˙ƒÄéū˙˙‹ƒ”˙˙˙ƒė ˙u”‰E¤čÁ˙˙ƒwüū˙‰$‹ƒ”˙˙˙˙u”‰E¤čĮ˙˙ZYVP‹ƒ”˙˙˙‰E¤č•w˙˙‰ÆE‰E ‰$‹ƒ”˙˙˙‰E¤č<‹˙˙ƒúū˙ƒÄ j P‹EƒĀP‹ƒ”˙˙˙‰E¤čû‹˙˙‹FƒÄ…Ā„‹ƒ”˙˙˙‰E¤Eăė˙u PčՊ˙˙‹UÄR‰Uœčš~˙˙‹UœƒÄ PR˙vč)‰˙˙‹Eăăč ;E¤…‹EĀ…Āt$ƒė jč–˙˙ƒÄ„Āt‹EĀ…Āt ‹ƒė P˙RƒÄƒė˙u VčĐv˙˙‰ÆEȉE ‰$耊˙˙ƒM˙˙ƒÄ jP‹EȃĀPčH‹˙˙‹FƒÄ…Ā„ąE˃ė˙u Pč+Š˙˙‹UĖR‰Uœč~˙˙‹UœƒÄ PR˙včˆ˙˙‹E˃ăč ;E¤ua‹EȅĀt$ƒė jčđ~˙˙ƒÄ„Āt‹EȅĀt ‹ƒė P˙RƒÄƒúū˙ƒėPVčF€˙˙ZYWPč=‹˙˙Y^P˙učŌ€˙˙XEäZjPčUs˙˙é§ü˙˙UØčh˜˙˙땍UØč^˜˙˙éâū˙˙ƒė jč€˙˙ZY‹M¤Q ‰PFPčs˙˙ƒÄé)˙˙˙‰Æƒėj˙u č¤u˙˙ƒÄEäƒėjPčķr˙˙ƒÄƒėj˙u˜čƒu˙˙ƒÄ‹EŦƒč ;E¤tUĢčí—˙˙ƒė V贈˙˙‰Æ‹E˃č ;E¤tĻUØčĪ—˙˙뜉ƋEăč ;E¤tUØč¸—˙˙ƒėj˙u č+u˙˙ƒÄë…ƒė ‹ƒ”˙˙˙j‰E¤čÃ˙˙ZY‹‹”˙˙˙Q ‰M¤‰PFPčYr˙˙ƒÄéŊũ˙˙‰Æëĩ‰ÆéE˙˙˙‰ÆE܃ėjPč6r˙˙‹ƒ”˙˙˙ƒÄ‰E¤é5˙˙˙‰ĮƒėjV‰ūčr˙˙ƒÄé˙˙˙‰Æ‹E¸‹ģ”˙˙˙ƒč ‰}¤9øt‹U”č—˙˙‰÷uԃėj˙u čt˙˙ƒÄ뷉Įë扯éßū˙˙‰Į‹Eŧƒč ;E¤t֋U”čږ˙˙ëˉÆéŅū˙˙U‰åWVS}āčŽ˙˙Ã"ƒė4‰EЍEԃú‹u ‰UÔPWDučot˙˙‰<$}äWčƒu˙˙ƒĒūū˙ƒÄ jPWč!†˙˙XZW˙uĐčfu˙˙‰4$čŽ{˙˙ƒÄ PV˙uĐč†˙˙‹E䋺”˙˙˙ƒÄƒč 9đu‹Eāƒč 9đu,‹EЍeô[^_]Éöŧ'Ußč(–˙˙‹Eāƒč 9đtڍļ‰úč–˙˙‹EЍeô[^_]ÉĮ‹E䋺”˙˙˙ƒč 9đu-‹Eāƒč 9đtUßčâ•˙˙ƒė W詆˙˙‹ŗ”˙˙˙‰Į‹Eäƒč 9đtĶUßčŋ•˙˙ëɉĮ‹ŗ”˙˙˙ëŋ‰Į‹EЋŗ”˙˙˙‹ƒč 9đt΍Uß藕˙˙ëЍt&U‰åVSč֌˙˙Ãæƒė‹u Vč´}˙˙‹Ã˙˙ƒÄ‰ÂEôQ‹-úū˙Qč‰ū˙˙Xƒĸøū˙ZPjčI|˙˙ƒ2úū˙ƒÄ ˙v˙uôPčÄ{˙˙‹FƒÄ…ĀtZ‹…ĀtTƒėPƒę"˙˙Pƒ=úū˙Pč{˙˙‹ƒx˙˙˙ƒÄƒė ˙0čzw˙˙‹EôƒÄƒč ;ƒ”˙˙˙u eø[^]ÃfUķ訔˙˙eø[^]Ѓė j čvq˙˙ëˇ‰Æ‹Eôƒč ;ƒ”˙˙˙tUķčŦ”˙˙ƒė Včs…˙˙vU‰åWVSčå‹˙˙Ãõƒė|jhč˙u˙u čún˙˙‰E¤E¤‰$čs˙˙X}Ā˙v W‰}Œč.s˙˙E´‰Á‹F‰MƒĀ‰$Qčs˙˙‹FU¨uŦ‰$Vl‰•|˙˙˙‰E¨čˇq˙˙YU°_ģy˙ū˙‰U”WVRčQt˙˙Xu¸Z˙u˙u”Včpm˙˙YXEŧWVP‰Įč1t˙˙XuÄZ˙uŒWVčRm˙˙YƒXũū˙_}ČPVWčt˙˙XuĐZ˙uˆWVč0m˙˙YUÔ_ģV˙˙‰U”WVRčęs˙˙XuÜZ˙u„˙u”Vč m˙˙YXEāWVP‰E”‰ĮčĮs˙˙XZ˙u€W˙učél˙˙‹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eô[^_]EäƒėPƒTũū˙P˙učÚw˙˙‹EƒÄeô[^_]vŧ'UŖč’˙˙éņū˙˙v‹U”č’˙˙éīū˙˙v‹U”čø‘˙˙éíū˙˙v‹U”čč‘˙˙éëū˙˙v‹U”čؑ˙˙ééū˙˙v‹U”čȑ˙˙éįū˙˙v‹U”踑˙˙éåū˙˙v‹U”訑˙˙éãū˙˙v‹U”č˜‘˙˙éáū˙˙v‹U”čˆ‘˙˙éßū˙˙v‹U”čx‘˙˙éŨū˙˙v‹U”čh‘˙˙éÛū˙˙v‹U”čX‘˙˙éŲū˙˙v‹U”čH‘˙˙é×ū˙˙v‹U”č8‘˙˙éÕū˙˙‰Į‹E⋺”˙˙˙ƒč 9đtUŖč‘˙˙‹E܃č 9đtUŖč‘˙˙‹Eԃč 9đtUŖčõ˙˙‹EЃč 9đtUŖčã˙˙‹Eȃč 9đtUŖčҐ˙˙‹Eăč 9đtUŖčŋ˙˙‹Eŧƒč 9đtUŖč­˙˙‹E¸ƒč 9đtUŖč›˙˙‹E°ƒč 9đtUŖč‰˙˙‹EŦƒč 9đtUŖčw˙˙‹E´ƒč 9đt ‹•|˙˙˙čb˙˙‹Eƒč 9đtU¨čP˙˙‹E˃č 9đtU¨č>˙˙‹E؃č 9đtU¨č,˙˙‹Eäƒč 9đtU¨č˙˙ƒė Wčá€˙˙‰Į‹ŗ”˙˙˙éëū˙˙‰Į‹ŗ”˙˙˙éđū˙˙‰Į‹ŗ”˙˙˙éõū˙˙‰Į‹ŗ”˙˙˙éúū˙˙‰Į‹ŗ”˙˙˙é˙ū˙˙‰Į‹ŗ”˙˙˙é˙˙˙‰Į‹ŗ”˙˙˙é ˙˙˙‰Į‹ŗ”˙˙˙é˙˙˙‰Į‹ŗ”˙˙˙é˙˙˙‰Į‹ŗ”˙˙˙é˙˙˙‰Į‹ŗ”˙˙˙é ˙˙˙‰Į‹ŗ”˙˙˙é%˙˙˙‰Į‹ŗ”˙˙˙é*˙˙˙‰Į‹ŗ”˙˙˙é/˙˙˙vŧ'U‰åWVS蕆˙˙ÃĨ ƒėL‹M‹}‹ŗ”˙˙˙…ɍF ‰EÄ…˛Eȃė‰Áƒĩúū˙‰M´PWQč‰o˙˙X}ĖZ˙u˙u´Wčxo˙˙Eĉ<$P‰E´čŠz˙˙‹E˃č}äƒč 9đ…e‹Eȃč 9đ…ƒė˙u´WčĢm˙˙‰<$čķz˙˙ƒÄ W˙u ˙učÄf˙˙‹EäƒÄ ƒč 9đ…K‹Eăč 9đ…%‹Eeô[^_]´&Eԃė‰ÂE‰U°PRč+l˙˙YMĐXƒ ˙˙‰M´PWQčÅn˙˙X}ØZ˙u°˙u´Wčäg˙˙YXE܉ƒĩúū˙‰U´PWRčœn˙˙X}āZ˙u˙u´Wč‹n˙˙Eĉ<$P‰E´čŧy˙˙‹EāƒÄ}äƒč 9đu<‹E܃č 9đuB‹E؃č 9đuH‹EЃč 9đuN‹Eԃč 9đ„ųū˙˙‰ú蹍˙˙éíū˙˙t&‰ú詍˙˙ëģ´&‰ú虍˙˙ëĩ´&‰ú艍˙˙믍´&‰účy˙˙늍´&‰úči˙˙éū˙˙t&‰účY˙˙‹Eeô[^_]t&Uāč@˙˙é¨ū˙˙‰Į‹Eԃč 9đu9‹Eăč 9đtUÃč˙˙ƒė Wčä}˙˙‰Į‹E˃č 9đtUäč˙˙‹Eȃč 9đtĮUäčîŒ˙˙ëŊ‰Į‹Eäƒč 9đtąUā訌˙˙막ĮëŖ‰Į‹Eāƒč 9đtUä辌˙˙‹E܃č 9đtUäčŦŒ˙˙‹E؃č 9đtUä蚌˙˙‹EЃč 9đ„S˙˙˙Uä脌˙˙éF˙˙˙‰Įéx˙˙˙‰Įëļ‰ĮëĉĮëŌé{˙˙˙ļU‰åWVS}äčĸƒ˙˙Ã˛ƒė0‹uƒTũū˙WPVčØq˙˙EãƒÄ1Ō‰EĐëvƒė VčŸm˙˙ƒÄ„Ā‹UÔtEƒė B˙uR˙u˙u W‰EÔčLf˙˙ƒÄWVč˛w˙˙‹EäƒÄƒč ;ƒ”˙˙˙tš‹UĐčŲ‹˙˙믍´&eô‰đ[^_]‰Į‹ƒč ;ƒ”˙˙˙tUã譋˙˙ƒė Wčt|˙˙‰Į‹Eäƒč ;ƒ”˙˙˙tŌUã茋˙˙ëȍvŧ'U‰åWVSuä}Øčŋ‚˙˙ÃĪƒė@‹E “(˙˙V…ĀDÂPWčđp˙˙‹EƒÄ…ĀˆĸEāƒė‰ÁE‰MÄPQčũh˙˙‰<$}ÜWčj˙˙“V˙˙ƒÄ jRW‰UĀčŦz˙˙ƒÄ ˙uÄWVč¯d˙˙‰4$˙učäi˙˙ƒÄ j˙uĀ˙uč„z˙˙‹Eä‹ģ”˙˙˙ƒÄƒč 9øuq‹E܃č 9øuw‹Eāƒč 9øu}‹E؃č 9øu9‹Eeô[^_]ÂļƒV˙˙ƒėPW˙uč k˙˙‹E؋ģ”˙˙˙ƒÄ ƒč 9øtĮ‰ōčsŠ˙˙‹Eeô[^_]ļU×čXŠ˙˙녍ļ‰ōčIŠ˙˙é}˙˙˙t&‰ōč9Š˙˙éw˙˙˙‹ģ”˙˙˙‰Æ‹E؃č 9øtU×čŠ˙˙ƒė Včáz˙˙‹ģ”˙˙˙‰Æ‹Eäƒč 9øtU×č÷‰˙˙‹E܃č 9øtU×čå‰˙˙‹Eāƒč 9øt¯U×č͉˙˙ëĨ‰Æ‹ģ”˙˙˙ëЉEċE܋ģ”˙˙˙ƒč 9øt‰ō證˙˙‹uÄëÉƋģ”˙˙˙뚉ƋE‹ģ”˙˙˙‹ƒč 9øtU×肉˙˙ét˙˙˙ļŋU‰åWVSčĩ€˙˙ÃŃė,‹E ‹U‹Xúū˙…‰‰MĐtƒø„ƒø“lúū˙ƒbúū˙D‰EЍEäƒė˙u˙uPčwt˙˙‹Eä‹ģ°ū˙˙ƒÄ ‰Eԋ‹@ô‹t8|…ö„€~„žF'ƒėPWčoz˙˙‰$čs˙˙ƒÄ ‰Æj ˙uĐPč÷z˙˙ƒĒūū˙ƒÄ jPVčåz˙˙‹EԃÄ…Ā„—‹}ԃė Wčģm˙˙ƒÄ PWVčĀz˙˙ƒÄƒÍūū˙ƒėjPVčĢz˙˙‹EäƒÄƒč ;ƒ”˙˙˙uzeô[^_]Ãfƒė Včgd˙˙‹ƒÄ‹P;“Ā˙˙˙¸ „U˙˙˙ƒėj V˙ԃÄžĀéB˙˙˙vƒNúū˙‰EĐéņū˙˙vŧ'‹ƒė‹Pôō‹BƒČPRčųt˙˙éd˙˙˙t&Uãčč‡˙˙eô[^_]Ãč{a˙˙‰Æ‹Eäƒč ;ƒ”˙˙˙tUãčÇ˙˙ƒė VčŠx˙˙vŧ'U‰åWVSčõ~˙˙Ãƒė8‹u‹} imNÆA90%˙˙˙‰1Ā…˙•ĀPč§m˙˙ƒÄ„ĀuPƒvúū˙h'PEäjP‰EÔč†c˙˙‹ģ°ū˙˙ƒ…úū˙ƒÄ jPWčny˙˙ƒč˙˙ƒÄ j-PWč\y˙˙Y˙uÔč3w˙˙ƒÄƒė 1} €–ĀPč;m˙˙ƒÄ„Āt‹1Ō÷u eô[^_‰Đ]Ívƒvúū˙h)PEäjP‰EÔčc˙˙‹ģ°ū˙˙ƒ˙˙ƒÄ j%PWčîx˙˙ƒ@˙˙ƒÄ jPWčÜx˙˙XZ˙u WčQt˙˙‰Įƒĸúū˙ƒÄ jPWčŊx˙˙ƒ`˙˙ƒÄ j*PWčĢx˙˙ZYh€Wčt˙˙“´úū˙ƒÄ jRPčŒx˙˙X˙uÔčcv˙˙ƒÄéG˙˙˙ƒė ˙uԉÆčNv˙˙‰4$čw˙˙ƒė ˙uԉÆč9v˙˙‰4$čņv˙˙Sčj}˙˙Ãzƒė‹T$BP‹B+BÁøPj˙t$ čdd˙˙ƒÄ[Ѝ´&ŧ'UWVSč'}˙˙Ã7ƒė ‹l$ ‹E|}`ĩäWƒĀPjVč!d˙˙ƒÄW‹EX1˙+ETÁøP‹E|ƒĀPVčd˙˙‹UT‹EXƒÄ)ĐÁø…Āt#fƒėV˙4ēƒĮč!r˙˙‹UT‹EXƒÄ)ĐÁø9Įr៎ [^_]ЍļU1‰åWVSč“|˙˙ÃŖ˙ƒėX‹uƒ~˙”ĀPčZk˙˙ƒÄ„Ā„÷EȉE´1Ā‹M´ĮƒĀƒø rîEĀĮEĐĮEĀPQ˙v ˙vč§h˙˙ƒÄ…Ā… ƒ~˙‹}Ā”Â…˙•Ā ˆU´uëwt&ƒ~˙”Â„Ō‹tb…˙t^ƒė˙w ˙w˙wčŊg˙˙ƒÄƒø˙‰FļU´tՃė˙w˙wPč\˙˙ƒÄƒø˙uˇƒė ˙včLm˙˙ļU´ƒÄĮF˙˙˙˙‹„ŌuĨ´&‹}ƒė Wč´]˙˙ƒÄƒ~˙„Įeô[^_]Í´&ƒvúū˙ho PEČjP‰E´č>`˙˙‹ģ°ū˙˙ƒü˙˙ƒÄ j PWč&v˙˙ƒ ˙˙ƒÄ jDPWčv˙˙Y˙u´čës˙˙ƒÄéēū˙˙ƒė Pčši˙˙MĉE°ƒvúū˙ƒÄh} PjQ‰M´čÚ_˙˙‹ģ°ū˙˙ƒh ˙˙ƒÄ j(PWčÂu˙˙XZ˙u°Wč÷c˙˙Y˙u´čŽs˙˙ƒÄéšū˙˙ļƒvúū˙h’ PEÄjP‰Į‰E´č„_˙˙Xƒ” ˙˙ZP˙ŗ°ū˙˙č°c˙˙‹VƒÄ ˙rôRPč`u˙˙Z“V˙˙YRPč‘c˙˙‹V ƒÄ ˙rôRPčAu˙˙‰<$čs˙˙ƒÄeô[^_]Ãė ˙u´‰Æčs˙˙‰4$čšs˙˙ƒė ˙u´‰Æčėr˙˙‰4$č¤s˙˙ƒė ˙u´‰Æč×r˙˙‰4$čs˙˙ë U‰åWVSčõy˙˙Ãũƒė<‹E‹} ‹…Ā„TƒŖûū˙h}PEĖjP‰EÄčĸ^˙˙‹ŗ°ū˙˙ƒˇûū˙ƒÄ j PVčŠt˙˙ƒÄ…˙„'ƒė Wčfg˙˙ƒÄ PWVčkt˙˙ƒÄƒô ˙˙ƒėjPVčVt˙˙^˙uÄč-r˙˙ƒÄƒė j č@j˙˙‰Æ‹E‰‰$čQf˙˙‰F‹ƒ”˙˙˙ƒĀ ‰FĮEĖ/tmpY˙uÄĮEĐ/capĮEÔtureĮEØd_stĮEÜreamĮEā.XXXĮEäXXXčHd˙˙‰Į‹Eăĉ‹ ƒÂ˙ūūū÷Ņ!Č%€€€€tę‰ÁÁ銀€DÁJDŅ‹MăڍFƒė)ĘRQPčm˙˙Į$čác˙˙XZ˙6Wč‡d˙˙‰<$č/j˙˙‹EƒÄ‰0eô[^_]Í´&EˉEÄé˙˙˙t&‹ƒė‹Pôō‹BƒČPRčn˙˙éŅū˙˙ƒė ˙uĉÆčq˙˙‰4$čĮq˙˙‰Į‹Fƒč ;ƒ”˙˙˙t‹UÄč߀˙˙ƒė VčV\˙˙‰<$čžq˙˙´&ŧ'Sč x˙˙Ãûƒė ƒ0PƒÁûū˙Pjč|h˙˙ƒÄ[Í´&SčÚw˙˙Ãęúƒė ƒ4PƒČûū˙PjčLh˙˙ƒÄ[ЍļU‰åWVSčĨw˙˙Ãĩúƒė4‹ujVčág˙˙ƒÄ…‰ĮuPÆFĮF ĮF$ĮF(ĮF,ĮF0ĮF4ĮF8ĮF<ĮF@eô[^_]Ѝt&ƒ˙˙huPEäjP‰EÔčū[˙˙ƒ ˙˙ƒÄ j!P˙ŗ°ū˙˙čįq˙˙ƒîúū˙ƒÄ jP˙ŗ°ū˙˙čĐq˙˙ZYW˙ŗ°ū˙˙čX˙˙X˙uÔč™o˙˙ƒÄéI˙˙˙ƒė ˙uԉÆč„o˙˙‰4$čn˙˙ƒîúū˙ƒÄ jPWč,n˙˙ZYVWčsT˙˙X˙uÔčúk˙˙‹EЃÄeô[^_]Ãė ˙uԉÆčßk˙˙‰4$č—l˙˙ƒė ˙uԉÆčĘk˙˙‰4$č‚l˙˙fSčúr˙˙Ã öƒė‹D$˙pčU]˙˙ZY‹˙t$P˙RƒÄ[Ít&U‰åWVSčÅr˙˙ÃÕõƒė8‹uFP‰EĖče˙˙ƒÄ…‰EĐu;čžm˙˙‰F ‹F$ƒė ‹€„ÆF˙uˉEĐč€^˙˙ƒÄ…‰Æuw‹EЍeô[^_]Ít&ƒ˙˙h<PEäjP‰EÔč.W˙˙‹ģ°ū˙˙ƒŌúū˙ƒÄ jPWčm˙˙ƒîúū˙ƒÄ jPWčm˙˙XZ˙uĐWčIS˙˙_˙uÔčĐj˙˙ƒÄée˙˙˙´&ƒ˙˙hHPEäjP‰EÔčÆV˙˙‹ģ°ū˙˙ƒûū˙ƒÄ jPWčŽl˙˙ƒîúū˙ƒÄ jPWčœl˙˙ZYVWčãR˙˙X˙uÔčjj˙˙‹EЃÄeô[^_]Ãė ˙uԉÆčOj˙˙‰4$čk˙˙ƒė ˙uԉÆč:j˙˙‰4$čōj˙˙fU‰åWVSčeq˙˙Ãuôƒė8‹uFP‰EĖč-d˙˙ƒÄ…‰EĐu;č>l˙˙‰F ‹F$ƒė ‹€€ÆF˙uˉEĐč ]˙˙ƒÄ…‰Æuw‹EЍeô[^_]Ít&ƒ˙˙h<PEäjP‰EÔčÎU˙˙‹ģ°ū˙˙ƒŌúū˙ƒÄ jPWčļk˙˙ƒîúū˙ƒÄ jPWč¤k˙˙XZ˙uĐWčéQ˙˙_˙uÔčpi˙˙ƒÄée˙˙˙´&ƒ˙˙hHPEäjP‰EÔčfU˙˙‹ģ°ū˙˙ƒûū˙ƒÄ jPWčNk˙˙ƒîúū˙ƒÄ jPWčP‹E܃ĀPč a˙˙ƒH ˙˙ƒÄ j=P‹E܃ĀPča˙˙ƒˆ ˙˙ƒÄ j=P‹E܃ĀPčđ`˙˙ƒČ ˙˙ƒÄ jCP‹E܃ĀPčØ`˙˙ƒÎüū˙ƒÄ j P‹E܃ĀPčĀ`˙˙^XEäWPč´_˙˙Zuā‹EäY˙u˙u V‰EÔčÍY˙˙ƒÚüū˙ƒÄ ˙uÔ˙uāP‹ƒ˙˙˙˙0č W˙˙‹Eā‹‹”˙˙˙ƒÄƒč ‰MÔ9Čuz‹Eäƒč ;EÔu_ƒėjWč¤K˙˙ƒÄeô[^_]Éöŧ'ƒ/øū˙ƒėP‹E܃ĀPčjN˙˙ébū˙˙t&ƒ/øū˙ƒėP‹E܃ĀPčJN˙˙é˛ū˙˙t&‰ōčÉm˙˙똍´&UÛč¸m˙˙éy˙˙˙‰Æ‹Eā‹“”˙˙˙ƒč ‰UÔ9ĐtUÛč–m˙˙‹Eäƒč ;EÔtUÛčƒm˙˙PPjWčųJ˙˙‰4$čA^˙˙‰Æ‹ƒ”˙˙˙‰EÔëΉÆëŨU‰åWVSčĨd˙˙Ãĩįƒė(‹u ~Wčā^˙˙ƒÄ„Ā…ĩƒ"ũū˙ƒėPjč$T˙˙ƒÄƒžøū˙ƒė˙v˙6PčS˙˙‰<$čĨ^˙˙ƒÄ„Ā…š‹ƒ˙˙˙€8t_‹FX‹V\ƒė‰Eā‰UäE܍UāRPč#L˙˙Xƒ0ũū˙˙uÜPčSS˙˙‹E܃ăč ;ƒ”˙˙˙uj‹ƒx˙˙˙ƒė ˙0č"O˙˙ƒÄeô[^_]Í´&ƒė j č6I˙˙ƒÄëΐƒōøū˙ƒėPjčoS˙˙ƒÄéF˙˙˙´&ƒė VčGL˙˙ƒÄéU˙˙˙´&UÛč@l˙˙댉ƋE܃č ;ƒ”˙˙˙tUÛč&l˙˙ƒė Včí\˙˙ļŋU‰åWVSčUc˙˙Ãeæƒė<‹u ‹ƒ˙˙˙€8ueô[^_]Íļƒė VčT˙˙Y‹Ã˙˙‰ÂEØ_Q‹-úū˙QčíÔ˙˙Xƒĸøū˙‹ģ”˙˙˙ZPjč§R˙˙X‹F0‹ģ”˙˙˙Z‹V4‰EāE܉UäUāRP‰UÄčĶJ˙˙ƒ:ũū˙ƒÄ ˙uÜ˙v˙uØPčûQ˙˙‹E܋ģ”˙˙˙ƒÄƒč 9øu8‹ƒx˙˙˙ƒė ˙0čČM˙˙‹E؃ăč 9ø„I˙˙˙‹UÄč/k˙˙é<˙˙˙vŧ'U×čk˙˙랉ƋE؃č 9øtUāčk˙˙ƒė VčÉ[˙˙‰Æ‹E܋ģ”˙˙˙ƒč 9øtĶU×čßj˙˙ëɐļŋU‰åWVSčb˙˙Ã%åƒėD‹u ƒ`ũū˙PjčĢQ˙˙‰4$čSM˙˙_Z“nũū˙MāR“yũū˙‰MÔR‰Â‰Čč´Ķ˙˙‹}ā‰4$čųT˙˙Z“Ã˙˙Y‰UĐR“-úū˙MÜR‰UĖ‰Â‰Č‰MÄč„Ķ˙˙ƒƒũū˙ƒÄ W˙uÜPčŅP˙˙‹E܋ģ”˙˙˙ƒÄƒč 9ø…ú‹Eāƒč 9ø… ‹ƒ˙˙˙€8t=ƒė Včˆ[˙˙‰Eā‰UäXZ˙uÔ˙uÄčEI˙˙ƒ“ũū˙Y˙uÜPčuP˙˙‹E܃ăč 9ø…tƒė j čzF˙˙Xƒĸũū˙ZPjčēP˙˙‰4$čÂK˙˙YZ‰Â‹EÔ˙uĐ˙uĖčĐŌ˙˙YXƒa˙ū˙˙uāPčP˙˙‹EāƒÄƒč 9ø…>ƒė Vč•U˙˙‰4$‰EČčzG˙˙ƒÄ„Ā……ƒė VčvU˙˙Z“ōøū˙‰EĀYRjčCP˙˙X‹EĀZ˙uĐ˙uĖ‰Â‹EÔč^Ō˙˙YXƒ°ũū˙˙uāPč­O˙˙‹EāƒÄƒč 9ø…œƒė Vč#I˙˙‹}ȍ“Zũū˙ƒUũū˙ƒÄ ƒ˙EÂPƒÃũū˙WPčmO˙˙ƒÄƒė Vč‘G˙˙ƒÄ…‰Æt7‹ƒŧ˙˙˙€8u,‹EȅĀtf“Zũū˙ƒUũū˙ƒūEÂPƒĶũū˙VPjč”O˙˙ƒÄ‹ƒx˙˙˙ƒė ˙0čK˙˙ƒÄeô[^_]Íļ‹UÄčhh˙˙éW˙˙˙vUÛčXh˙˙éū˙˙vƒė j čöD˙˙ƒÄ닐‹UÄč8h˙˙éĩū˙˙vUÛč(h˙˙‹Eāƒč 9ø„ūũ˙˙vŧ'‹UÄčh˙˙éįũ˙˙‹ģ”˙˙˙‰Æ‹Eāƒč 9øu+ƒė Vč¸X˙˙‰Æ‹Eāƒč 9øtë‹UÄčÔg˙˙ëá‰Æ‹E܃č 9øtՍUÛčžg˙˙ëËëŌ‰Æ‹E܋ģ”˙˙˙ƒč 9øt­UÛč g˙˙ëŖ´&ŧ'U‰åWVSčÕ^˙˙Ãåáƒė8ļE‹} ˆE֍EāP‰EĐčļX˙˙‹ƒÄ‹Hô…ÉtW1ö´&ļ0JۈU׀ų‡Íļɋ”‹´˙˙ ˙áļƒėƒôũū˙jP‹EāƒĀPč@Y˙˙‹ƒÄƒÆ;pôrŗ‹}ЃėW˙uč$X˙˙Į$WčgD˙˙‹EƒÄeô[^_]´&ƒėƒīũū˙jëĻv€}Ö„ļƒėƒ˙ũū˙j댉öŧ'ƒėƒųũū˙jés˙˙˙€}Ötjƒėƒūū˙jé]˙˙˙vŧ'ļM×ƒé €ų–EՀ}× ļUÕ”ÁĘus€}׎>˙˙˙‹EāļM׍UۃėjRƒĀPˆMŪč]X˙˙é˙˙˙´&‹EāUŨƒėjÆEŨ"RƒĀPč7X˙˙éōū˙˙f‹EāU܃ėjÆEÜ'RƒĀPčX˙˙éŌū˙˙f€}Öt‘ļU׍EäƒėRPčšG˙˙Xƒ ūū˙ZjP‹EāƒĀPčâW˙˙‹EäƒÄ ˙pôP‹EāƒĀPčĖW˙˙ƒũũū˙ƒÄ jP‹EāƒĀPč´W˙˙‹EäƒÄƒč ;ƒ”˙˙˙u‹éaū˙˙Ußčde˙˙‹éRū˙˙‰Æ‹Eäƒč ;ƒ”˙˙˙tUßčEe˙˙ƒėj˙uĐč¸B˙˙‰4$čV˙˙‰ÆëįļŋU‰åWVSEÜ1öč`\˙˙Ãp߃ė8‰EĖPčNV˙˙ƒÄéĨļƒė WčJ˙˙ƒÄ P‹EÜWƒĀPčW˙˙ƒ ũū˙ƒÄƒėjP‹E܃ĀPčëV˙˙‹E܍ģK˙˙ƒÄ jWƒĀPčĶV˙˙‹EäƒÄ ˙pôP‹E܃ĀPčŊV˙˙‹EÜƒÄ jWƒĀPčĢV˙˙‹EäƒÄƒč ;ƒ”˙˙˙…ļ‹Eāƒč ;ƒ”˙˙˙…”ƒÆƒė ˙u čæ@˙˙ƒÄ9ƍ›ƒėV˙u čG˙˙‰ĮEÚƒÄ PEā˙wP‰EÔčˇI˙˙MäƒÄ j˙uÔQ‰MĐčSE˙˙XƒĒūū˙‹?ZjP‹E܃ĀPčV˙˙ƒÄ…˙…īū˙˙ƒ/øū˙ƒėP‹E܃ĀPč9D˙˙éîū˙˙t&‹UĐč¸c˙˙é_˙˙˙vUÛč¨c˙˙é=˙˙˙v‹u˃ėV˙učÁT˙˙Į$VčA˙˙‹EƒÄeô[^_]‰ƃėj˙uĖčå@˙˙‰4$č-T˙˙‰Æ‹Eä‹ģ”˙˙˙ƒč 9øtUÛčCc˙˙‹Eāƒč 9øtĮUÛč1c˙˙ëŊ‰Æ‹ģ”˙˙˙ë␍t&U‰åWVSčeZ˙˙ÃuŨƒėL‹E ‹M‰E´1Ā€y u eô[^_]ÍvEŧƒė P‰EŦčG˙˙EĀ‹ŗ”˙˙˙P‰E°čT˙˙‹EƒÄ ‹ŗ”˙˙˙‹xƒūū˙j P‹EƒĀPčÛT˙˙ƒÄ…˙„0ƒė WčˇG˙˙ƒÄ ‹ŗ”˙˙˙P‹EĀWƒĀPč°T˙˙‹EƒÄģSũū˙ƒė‹ŗ”˙˙˙jWƒĀPčT˙˙‹EƒÄ‹@ƒø„eŽīƒø„ƒø…Å‹UŦEȋŗ”˙˙˙čtb˙˙ƒ, ˙˙ƒėP‹EƒĀPč~B˙˙ƒ:ūū˙Y^P‹EƒĀPčiB˙˙‹EČƒÄ ˙pôP‹EƒĀPčT˙˙‹Eȋŗ”˙˙˙ƒÄƒč 9đ…M1˙Eāƒė˙u°P‰E´ččR˙˙˙u´čđA˙˙‹EāƒÄƒč 9đ…W‹UĀ…Ōt$ƒė jčžG˙˙ƒÄ„Āt‹EĀ…Āt ‹ƒė P˙RƒÄ‹Eŧƒč 9đ…eô[^_]Ít&ƒø…߀}´…Ĩ‹UŦE؋ŗ”˙˙˙č„a˙˙‹Eƒė ‹pEäP‰E´čoR˙˙‰đƒÄƒā‰EŦ„ÖļEŦƒĀ<~*ƒzūū˙ƒėP‹EäƒĀPč]A˙˙YX‹Eä˙uŦƒĀPč\9˙˙ƒÄæ€tƒūū˙ƒėP‹EäƒĀPč+A˙˙ƒÄ‹u´EԃėVPčØQ˙˙Į$Vč>˙˙Xƒ° ˙˙ZP‹EƒĀPčö@˙˙^XƒŸūū˙P‹EƒĀPčá@˙˙‹EÔƒÄ ˙pôP‹EƒĀPč‹R˙˙X‹EĀZWƒĀPčŧ@˙˙_XƒTūū˙P‹EƒĀPč§@˙˙‹EØƒÄ ˙pôP‹EƒĀPčQR˙˙‹Eԋŗ”˙˙˙ƒÄƒč 9đ…Ą‹E؃č 9đ„0ū˙˙‹U´čô_˙˙é#ū˙˙´&‹UŦEċŗ”˙˙˙č'`˙˙ƒūū˙ƒėP‹EƒĀPč1@˙˙_Xƒ:ūū˙P‹EƒĀPč@˙˙‹EÄƒÄ ˙pôP‹EƒĀPčÆQ˙˙‹Eċŗ”˙˙˙ƒÄƒč 9đ„ŗũ˙˙Uäčw_˙˙éĻũ˙˙fƒŦūū˙}Üh;‹ŗ”˙˙˙PjWčƒ;˙˙Yƒä ˙˙^P˙ŗ°ū˙˙č¯?˙˙‰<$‹ŗ”˙˙˙čAO˙˙ƒÄ1˙‹ŗ”˙˙˙éWũ˙˙‹UŦEĖ‹ŗ”˙˙˙č__˙˙ƒP ˙˙ƒėP‹EƒĀPči?˙˙Xƒ:ūū˙ZP‹EƒĀPčT?˙˙‹EĖƒÄ ˙pôP‹EƒĀPčūP˙˙‹EĖ‹ŗ”˙˙˙ƒÄƒč 9đ„ëü˙˙é3˙˙˙fUäč¨^˙˙‰øé=ũ˙˙‹Eƒė‹ŗ”˙˙˙˙p˙uŧč‰?˙˙ƒÄ„Ātrŋ‹ŗ”˙˙˙é¨ü˙˙fƒ/øū˙ƒė‹ŗ”˙˙˙P‹EƒĀPčÄ>˙˙éĪû˙˙´&Uäč@^˙˙éœü˙˙v‰đ‹UäƒėļĉEŦƒaūū˙PBPčŠ>˙˙é(ũ˙˙t&‹UŦEЋŗ”˙˙˙čO^˙˙‹Eƒė‹@‹0ƒ€ ˙˙P‹EƒĀPčQ>˙˙YXƒGūū˙P‹EƒĀPč<>˙˙‹E°ƒÄ‰ōč`˙˙ƒė‰ÆW‹ƒĀPč>˙˙XƒTūū˙ZP‹ƒĀPč >˙˙‹EĐƒÄ ˙pôP‹ƒĀPčĩO˙˙‹EЋŗ”˙˙˙ƒÄƒč 9đ„ĸû˙˙éęũ˙˙‹U´ča]˙˙éRũ˙˙‰Į‹Eȋŗ”˙˙˙ƒč 9đu6PPj˙u°čž:˙˙ƒÄ‹Eŧƒč 9đtUģč)]˙˙ƒė WčđM˙˙‰Į‹Eāƒč 9đtʍUäč ]˙˙ë‰Įëŧ‰ĮëĮQQ‰Įj˙u´čt:˙˙‹ŗ”˙˙˙ƒÄ‹E؃č 9đt—UāčŲ\˙˙덉Į‹EĖ‹ŗ”˙˙˙ƒč 9đ„w˙˙˙ëĢƒė ‰ÆW‰÷čÂL˙˙ƒÄ‹ŗ”˙˙˙éZ˙˙˙‰Į‹Eċŗ”˙˙˙ƒč 9đ„D˙˙˙éu˙˙˙‰Į‹ŗ”˙˙˙딉Į‹Eԋŗ”˙˙˙ƒč 9đt‚‹U´če\˙˙éu˙˙˙‰Į‹EЋŗ”˙˙˙ƒč 9đ„˙˙˙é1˙˙˙t&U‰åWVSEØč‚S˙˙Ã’Öƒė0ĮEØj P˙u č'=˙˙‹U؃Ä€:u$˙˙˙ƒúũ‡5‹U‰eô¸[^_]Ívu܃ė Vč,M˙˙ƒÆūū˙ƒÄ j P‹E܃ĀPčôM˙˙‹EÜY_xEä˙uP‰EÔčŨL˙˙X‹EäZ˙pôPWčÎM˙˙‹Eä‹ģ”˙˙˙ƒÄƒč 9ø…įƒ ˙˙ƒėj1P‹E܃ĀPčŸM˙˙ƒĐūū˙ƒÄ j P‹E܃ĀPč‡M˙˙Y˙u čn@˙˙ƒÄ P‹EÜ˙u ƒĀPčkM˙˙ƒŨūū˙ƒÄ jP‹E܃ĀPčSM˙˙XEāZVPčGL˙˙Xƒųū˙˙uāPč—A˙˙‹EāƒÄƒč 9ø…F‹ƒx˙˙˙ƒė ˙0čf=˙˙Y_jVč\8˙˙ƒÄeô1Ā[^_]Í´&u܃ė Vč L˙˙ƒÆūū˙ƒÄ j P‹E܃ĀPčÔL˙˙‹EÜY_xEä˙uP‰EÔčŊK˙˙X‹EäZ˙pôPWčŽL˙˙‹Eä‹ģ”˙˙˙ƒÄƒč 9ø…§ƒ ˙˙ƒėj1P‹E܃ĀPčL˙˙ƒáūū˙ƒÄ j P‹E܃ĀPčgL˙˙YX‹EÜ˙u ƒĀPč–:˙˙ƒíūū˙ƒÄ jP‹E܃ĀPč>L˙˙XEāZVPč2K˙˙Xƒųū˙˙uāPč‚@˙˙‹EāƒÄƒč 9øu‹ƒx˙˙˙ƒė ˙0čU<˙˙éęū˙˙‹UÔčČY˙˙ëáļUāč¸Y˙˙éL˙˙˙v‹UÔč¨Y˙˙é­ū˙˙vUāč˜Y˙˙é ū˙˙‰ĮRRjVč7˙˙‰<$čOJ˙˙‰EЋEāƒč 9øt‹UÔčjY˙˙‹}ĐPPjVčŨ6˙˙‰<$č%J˙˙‰Į‹Eäƒč ;ƒ”˙˙˙t´Uāč=Y˙˙ëljEЋEāƒč 9øt‹UÔč&Y˙˙‹}Đ됉Įëļ‰Į‹Eäƒč ;ƒ”˙˙˙tĻUāčY˙˙뜍vU‰åWVSčEP˙˙ÃUĶƒė8‹uVč35˙˙ƒÄ…‰Į„žEäƒė P‰EÔčJ˙˙‹M䍃T ˙˙ƒÄ j"PAPčßJ˙˙‰4$čĮ=˙˙‹UäƒÄ PVBPčÆJ˙˙EāƒÄ PW˙uÔč–J˙˙‹UäƒÄ‰Æ…Ōtƒė jč >˙˙ƒÄ„Āu‰đ„Āt6‹Eāeô[^_]Ѝ´&‹Eä…Ātāƒė ‹P˙RƒÄëŌv‹E eô[^_]Ãė jčĶI˙˙‰ÆPPj˙uÔč•5˙˙‰4$čŨH˙˙ļŧ'U‰åWVSčEO˙˙ÃUŌƒė,€}teô1Ā[^_]Ít&ƒėj˙˙uč[7˙˙‰ĮXZj˙˙u čM7˙˙ƒÄ‰Æƒ˙˙”Āƒū˙”Âu„Āuƒū˙t„Āu0ƒ˙˙t„Ō…‡‰đÁč„Ā…9÷Ž ƒ˙ŸĀeô[^_]ÍEäƒė P‰Į‰EÔčŦH˙˙YXƒx ˙˙P‹EäƒĀPčˇ7˙˙Xƒ$˙˙ZP‹EäƒĀPčĸ7˙˙YXƒ ųū˙P‹EäƒĀPč7˙˙X‹EäZVƒĀPčŽ/˙˙ƒ˙ū˙Y^P‹EäƒĀPči7˙˙Xƒ$˙˙ZP‹EäƒĀPčT7˙˙ƒ˙ū˙Y^P‹EäƒĀPč?7˙˙X‰ūZW}ØWča:˙˙YXjVč74˙˙XZWVčŪG˙˙X˙uäjčŖ=˙˙‹EäƒÄƒč ;ƒ”˙˙˙…s‹ƒx˙˙˙ƒė ˙0čū8˙˙ƒÄƒė jč!H˙˙Eäƒė P‰EÔč˛G˙˙Y‹MäXƒ¤ ˙˙PAPčŊ6˙˙XZ‹U䍋$˙˙Q‰MĖBPčĨ6˙˙‹UäYXƒ˙ū˙PBPč6˙˙X‹EäZ“$˙˙ƒĀRP‰UĐčx6˙˙YXƒ˙ū˙P‹EäƒĀPčc6˙˙‹MäXZA˙uĖPčR6˙˙YX‹E䍋 ũū˙Q‰M˃ĀPč:6˙˙X‹EäZVƒĀPč;.˙˙ƒQûū˙Y^P‹EäƒĀPč6˙˙XZ‹Uä˙uЍBPč6˙˙Y‹Mä^˙uĖAPčô5˙˙‹MäXZAWPčõ-˙˙‹Mä_XƒŪūū˙PAPčĐ5˙˙Y^‹uԍ}āVWčņ8˙˙XZjVčĮ2˙˙YXWVčnF˙˙Z˙uäjč3<˙˙‹EäƒÄƒč ;ƒ”˙˙˙…‹ƒx˙˙˙ƒė ˙0čŽ7˙˙é‹ū˙˙Eäƒė P‰Æ‰EÔčHF˙˙YXƒx ˙˙P‹EäƒĀPčS5˙˙Xƒ$˙˙ZP‹EäƒĀPč>5˙˙YXƒ ųū˙P‹EäƒĀPč)5˙˙X‹EäZWƒĀPč*-˙˙ƒ˙ū˙Y_P‹EäƒĀPč5˙˙Xƒ$˙˙ZP‹EäƒĀPčđ4˙˙ƒ˙ū˙Y_P‹EäƒĀPčÛ4˙˙X}ÜZVWč˙7˙˙YXjVčÕ1˙˙XZWVč|E˙˙X˙uäjčA;˙˙‹EäƒÄƒč ;ƒ”˙˙˙u/‹ƒx˙˙˙ƒė ˙0č 6˙˙éũ˙˙UāčT˙˙é€ũ˙˙UÜčT˙˙éãū˙˙UāčųS˙˙ëĮ‰Æ‹Eäƒč ;ƒ”˙˙˙tUāčßS˙˙PPjWčU1˙˙‰4$čD˙˙‰Æë扯PPjWč=1˙˙‰4$č…D˙˙‰ÆPPj˙uÔč'1˙˙‰4$čoD˙˙‰Æ‹Eäƒč ;ƒ”˙˙˙tUÜč‡S˙˙PPjWčũ0˙˙‰4$čED˙˙‰ÆëęQQ‰ÆjWčå0˙˙‰4$č-D˙˙WW‰Æj˙uÔčĪ0˙˙‰4$čD˙˙‰Æ‹Eäƒč ;ƒ”˙˙˙tUāč/S˙˙PPjWčĨ0˙˙‰4$číC˙˙‰Æë扯PPjWč0˙˙‰4$čÕC˙˙‰ÆPPj˙uÔčw0˙˙‰4$čŋC˙˙´&ŧ'U‰åWVSč%J˙˙Ã5̓ė,‹u ‹ƒ°˙˙˙ƒ8t‹EƒėƒĀPƒÔ ˙˙Pč89˙˙ƒÄ‹ƒœū˙˙ƒė‹8ƒ6$˙˙PWčM?˙˙ƒÄ„Ā„⍃$˙˙ģ$˙˙ƒėjPW‰EÔč§B˙˙ƒÄ„Ā…‹ƒt˙˙˙€8…͍ƒ`ũū˙ƒėPjč<9˙˙‰4$čä4˙˙_Y‹nũū˙‰ÂEäQ‹yũū˙QčJģ˙˙‹}ä‰4$č<˙˙Z“Ã˙˙uāYR“-úū˙R‰Â‰đč#ģ˙˙ƒQ˙ū˙ƒÄ W˙uāPčp8˙˙‹Eā‹ģ”˙˙˙ƒÄƒč 9ø…Á‹Eäƒč 9ø…Ŗ‹ƒx˙˙˙ƒė ˙0č+4˙˙ƒÄeô[^_]̓/˙ū˙WPƒ;˙ū˙PjčŠ8˙˙ƒÄé˙˙˙fƒė Vč×/˙˙ƒÄ Pƒ$˙˙Pjče8˙˙ƒÄé˙˙˙t&ƒėj˙˙uÔčÛ0˙˙‰<$‰EÔč-˙˙ƒÄP‹EԃĀPƒ˙˙Pjč'8˙˙ƒÄéÃū˙˙´&‰ōčQ˙˙éQ˙˙˙t&UßčQ˙˙é2˙˙˙‹ģ”˙˙˙‰Æ‹Eäƒč 9øtUßčáP˙˙ƒė Vč¨A˙˙‰Æ‹Eā‹ģ”˙˙˙ƒč 9øtĶUßčžP˙˙ëɍļŋU‰åWVSčõG˙˙Ã˃ė0‹u jV˙uč^+˙˙ƒÄ…‰Į„™Eäƒė P‰EÔčÂA˙˙ƒf˙ū˙ƒÄ jP‹EäƒĀPčŠB˙˙ƒÄ…öt{ƒė Včj5˙˙ƒÄ P‹EäVƒĀPčiB˙˙ƒÄƒė˙uW˙uÔč7B˙˙‹UäƒÄ‰Æ…Ōt$ƒė jčA6˙˙ƒÄ„Āt‹Eä…Āt ƒė ‹P˙RƒÄeô‰đ[^_]Ѝt&eô1ö‰đ[^_]Ít&ƒ/øū˙ƒėP‹EäƒĀPč20˙˙뇉ÆPPj˙uÔč2-˙˙‰4$čz@˙˙vŧ'U‰åWVS‰ÖčãF˙˙ÃķɃė8‰EЍEäP‰EÔčË@˙˙ƒ%ųū˙ƒÄ jP‹EäƒĀPč“A˙˙ƒÄ…ö„¸‹EäƒėVƒĀPč¸/˙˙‹}ԃčEāƒėWPče@˙˙Į$Wč¨,˙˙Y˙uÔčo@˙˙‹EāƒÄ1ö}Ū‹Pô…Ōt5t&ļ0ƒė PčĢ,˙˙‹MäƒÄ ˆEŪjWQRčA˙˙‹EāƒÄƒÆ;pôuЋ}ԃėW˙uĐčų?˙˙Į$Wč<,˙˙‹EāƒÄƒč ;ƒ”˙˙˙u&‹EЍeô[^_]̓/øū˙ƒėP‹EäƒĀPčú.˙˙é=˙˙˙‹UÔč}N˙˙‹EЍeô[^_]ÉƋEāƒč ;ƒ”˙˙˙tUßčZN˙˙ƒė Vč!?˙˙ƒė‰Æj˙uÔčÂ+˙˙ƒÄëÍëɃ뉯j˙uÔčŦ+˙˙‰4$čô>˙˙t&WVSčhE˙˙ÃxČƒė‹T$ D$ ‹|$$č^ū˙˙ƒė ˙t$čB*˙˙ƒÄ…Āt3ģ7øū˙‰ÆšķĻ•Ā‰Æ‹D$ ƒč ;ƒ”˙˙˙u(ƒÄ‰đ[^_Í´&‹D$ ‰ūƒč ;ƒ”˙˙˙tߍ´&T$ č—M˙˙ƒÄ‰đ[^_Í´&ŧ'VSčÉD˙˙ÃŲĮƒė‹T$ D$ čÃũ˙˙ƒė ˙t$č§)˙˙ƒÄ‰Æ…Ā‹D$ Dt$$ƒč ;ƒ”˙˙˙u ƒÄ‰đ[^Ít&T$ č'M˙˙ƒÄ‰đ[^Ãë U‰åWVSEÔčRD˙˙ÃbĮƒė<‹UčQũ˙˙ƒė ˙uÔč6)˙˙ƒÄ…‰Į„Y‹E ƒė ‹ŗ”˙˙˙‰E؍EÜP‰EÄč>˙˙‹M܍ƒ{˙ū˙ƒÄ jPAPčÖ>˙˙‹EԋMÜƒÄ ˙pôPAPčĀ>˙˙EØƒÄ PW˙uÄč>˙˙‰Į‹E܃Ä…Āt0ƒė ‹ŗ”˙˙˙jč”2˙˙ƒÄ„Āt‹E܅Āt‹ƒė ‹ŗ”˙˙˙P˙RƒÄ‰ø„Āt&‹Eԋŗ”˙˙˙‹}؃č 9đ…Žeô‰ø[^_]Ѝt&}āƒė ‹ŗ”˙˙˙WčV=˙˙‹EāY^ƒĀ˙u Pču$˙˙XEäZWPč=˙˙Xƒ\˙˙˙uäPči2˙˙‹E䋺”˙˙˙ƒÄƒč 9đuVƒėjWč;)˙˙‹ƒx˙˙˙_˙0č-.˙˙ƒÄ‹Eԋ} ƒč 9đ„r˙˙˙Uäč‘K˙˙eô‰ø[^_]Í´&‹ŗ”˙˙˙ëΐ´&‹UÄčhK˙˙렋ŗ”˙˙˙‰EÄPPjWčĶ(˙˙‹}ăÄ‹Eԃč 9đtUĶč;K˙˙ƒė Wč<˙˙‰EĀ‹E䋺”˙˙˙ƒč 9đt‹UÄčK˙˙‹E‰EÄ벉ĮëžQQ‰Įj˙uÄč}(˙˙ƒÄ‹ŗ”˙˙˙ëĨfU‰åWVSuä‰Įč0B˙˙Ã@Ńė8‰UÔVč<˙˙YX˙uÔVčķ$˙˙YZPWčę;˙˙‹UäƒÄ …Ōt$ƒė jčÖ0˙˙ƒÄ„Āt‹Eä…Āt ƒė ‹P˙RƒÄeô‰ø[^_]ÉĮPPjVčö'˙˙‰<$č>;˙˙´&ŧ'U‰åWVSEā}ÔčŸA˙˙Ã¯ÄƒėH‰EĀPčÍ1˙˙Wč‡;˙˙‹EÔY^pEØ˙u ‰EŧPEä‰EÄčJ;˙˙X‹EØZ˙pôPVč;<˙˙‹E؃ăč ;ƒ”˙˙˙…æ‹uä…ö„ëu܃ėEäWV‰EÄč;˙˙‹EÜP‰EÄčė.˙˙ƒÄ P˙uÄ˙uäč]9˙˙‹E܃ăč ;ƒ”˙˙˙…ˆ‹}ԅ˙t$ƒė jčĮ/˙˙ƒÄ„Āt‹EԅĀt ‹ƒė P˙RƒÄƒė˙uĀ˙učŋ1˙˙‹MäƒÄ…Ét1ƒė jč‹/˙˙ƒÄ„Āt ‹}ä…˙t‹ƒč ;ƒ”˙˙˙uxƒė Wčˇ$˙˙ƒÄ‹Eeô[^_]´&‹UŧčI˙˙ék˙˙˙vUÜčI˙˙é ˙˙˙vƒė Eäj‰EÄč 1˙˙ZY‹‹”˙˙˙Q ‰PEäP‰EÄčļ#˙˙ƒÄéãū˙˙ļ‰ōčÁH˙˙é|˙˙˙‰Æ‹E؃č ;ƒ”˙˙˙tUÜč¤H˙˙Eä‰EÄRRjWč&˙˙ƒÄPPj˙uÄče#˙˙‰4$čM9˙˙‰Æ‹E܃č ;ƒ”˙˙˙tɋUŧčeH˙˙ëŋ‰ÆëÁ‰ÆEä‰EÄëЍt&U‰åWVSč•?˙˙ÃĨƒėH‹E‹u ‹}‰EĀEÔP‰EÄčt9˙˙ƒ_üū˙ƒÄ j P‹EԃĀPč<:˙˙ƒÄ…˙„Qƒė Wč-˙˙ƒÄ P‹EÔWƒĀPč:˙˙ƒÄƒėW˙učX-˙˙ƒÄ…Āt3ƒjüū˙ƒėj P‹EԃĀPčé9˙˙‹EƒÄ ‹˙pôP‹EԃĀPčŅ9˙˙ƒÄƒvüū˙ƒėj P‹EԃĀPčļ9˙˙ƒÄ…ö„Ģƒė Vč’,˙˙ƒÄ P‹EÔVƒĀPč‘9˙˙ƒÄ€}Ātƒ‘˙ū˙ƒėjP‹EԃĀPčp9˙˙ƒÄƒėV˙učą,˙˙ƒÄ…Āt3ƒĸ˙ū˙ƒėj P‹EԃĀPčB9˙˙‹EƒÄ ‹˙pôP‹EԃĀPč*9˙˙ƒÄuāƒė Vč{.˙˙EØP‰EĀč/8˙˙Y‹EØ_}Ü˙uăĀW‰Eŧčø7˙˙X‹EÜZ˙pôP˙uŧčį8˙˙‹E܃ăč ;ƒ”˙˙˙…ƒė˙uĀVč–5˙˙‹E؃Ä…Ātƒė jč˛,˙˙ƒÄ„Ā…‡ƒėV˙učģ.˙˙‹EäƒÄ…Āt5ƒė jč‡,˙˙ƒÄ„Āt$‹uä…öt‹ƒč ;ƒ”˙˙˙…¸ƒė Vč¯!˙˙ƒÄ‹MԅÉt$ƒė jčK,˙˙ƒÄ„Āt‹EԅĀt ƒė ‹P˙RƒÄ‹Eeô[^_]t&‹E؅Ā„n˙˙˙‹ƒė P˙RƒÄé]˙˙˙t&ƒ/øū˙ƒėP‹EԃĀPč*&˙˙éTū˙˙t&ƒ/øū˙ƒėP‹EԃĀPč &˙˙éŽũ˙˙t&UĶčˆE˙˙éáū˙˙v‰účyE˙˙é<˙˙˙‰ÆPPj˙uÄčæ"˙˙‰4$č.6˙˙‰ÆEäRRjPč/ ˙˙ƒÄëØ‰Æ‹E܃č ;ƒ”˙˙˙tUĶč2E˙˙WWj˙uĀčĻ"˙˙ƒÄëʼnÆëëļŧ'U‰åWVSčU<˙˙Ãeŋƒė4˙u˙u‹učŽ1˙˙ƒÄ„ĀuoEäƒė}ā‰ÁE‰MÔPQčŸ.˙˙E‰$Wč“.˙˙Į$˙uÔW˙u˙u VčL'˙˙‹Eā‹“”˙˙˙ƒÄƒč ‰UÔ9ĐuF‹Eäƒč ;EÔu+eô‰đ[^_]´&ƒė Vč?-˙˙ƒÄ eô‰đ[^_]‰účYD˙˙ëĖ´&UßčHD˙˙밉Ƌƒ”˙˙˙‰EԋEäƒč ;EÔtUßč(D˙˙ƒė Včī4˙˙‰Æ‹Eā‹ģ”˙˙˙ƒč ‰}Ô9øtĪUßčD˙˙ëÅU‰åWVSčE;˙˙ÃUžƒė4˙u˙u‹učŽ5˙˙ƒÄ„ĀuoEäƒė}ā‰ÁE‰MÔPQč-˙˙E‰$Wčƒ-˙˙Į$˙uÔW˙u˙u Vč<&˙˙‹Eā‹“”˙˙˙ƒÄƒč ‰UÔ9ĐuF‹Eäƒč ;EÔu+eô‰đ[^_]´&ƒė Vč/,˙˙ƒÄ eô‰đ[^_]‰účIC˙˙ëĖ´&Ußč8C˙˙밉Ƌƒ”˙˙˙‰EԋEäƒč ;EÔtUßčC˙˙ƒė Včß3˙˙‰Æ‹Eā‹ģ”˙˙˙ƒč ‰}Ô9øtĪUßčōB˙˙ëÅU‰åWVSč5:˙˙ÃEŊƒė4˙u˙u‹uč~"˙˙ƒÄ„ĀuoEäƒė}ā‰ÁE‰MÔPQč/5˙˙E‰$Wč#5˙˙Į$˙uÔW˙u˙u Vč,%˙˙‹Eā‹“”˙˙˙ƒÄƒč ‰UÔ9ĐuF‹Eäƒč ;EÔu+eô‰đ[^_]´&ƒė Vč+˙˙ƒÄ eô‰đ[^_]‰úč9B˙˙ëĖ´&Ußč(B˙˙밉Ƌƒ”˙˙˙‰EԋEäƒč ;EÔtUßčB˙˙ƒė VčĪ2˙˙‰Æ‹Eā‹ģ”˙˙˙ƒč ‰}Ô9øtĪUßčâA˙˙ëÅU‰åWVSč%9˙˙Ã5ŧƒė,‹U ‹uļĮFƒđˆ‹B…‰EÔ„ĸ}āƒė Wčí2˙˙‹EÔƒÄ ‹˙pôP‹EāƒĀPF‰EÔč¯3˙˙‹FƒÄ…Ā„‰EäƒėWPF‰EÔčŽ2˙˙‹EäP‰EÔčr&˙˙ƒÄ P˙uÔ˙včã0˙˙‹EäƒÄƒč ;ƒ”˙˙˙u:‹Mā…Ét$ƒė jčQ'˙˙ƒÄ„Āt‹Eā…Āt ‹ƒė P˙RƒÄeô‰đ[^_]vUßčđ@˙˙ëŧļƒė Fj‰EÔč)˙˙Z‹“”˙˙˙YƒÂ ‰PFP‰EÔčž˙˙ƒÄéE˙˙˙‰EԋEäƒč ;ƒ”˙˙˙tUßč@˙˙N‹EԉMÔRRjW‰EĐč˙˙‹EЃÄ‰ĮPPj˙uÔčS˙˙‰<$č;1˙˙ëՉĮF‰EÔëāë U‰åWVSč•7˙˙ÃĨēƒė|ŨEŨUŨE ŨUˆŨE(ŨU€ŲĘŪáŲáŨU˜ŲÉßéŨ؃uāƒė }¨Vč–'˙˙WčP1˙˙ƒŽ˙ū˙ƒÄ jP‹E¨ƒĀPč2˙˙YXWVčß.˙˙XZjWčU˙˙_} XWVči˙˙‰ÆEŦ‰E¤‰$č 1˙˙ƒÕøū˙ƒÄ jP‹EŦƒĀPčŅ1˙˙XZ˙u¤Vč–.˙˙YXj˙u¤č ˙˙XEZPV‰E č˙˙‰ÆE°‰E¤‰$čģ0˙˙ƒÆ˙ū˙ƒÄ jP‹E°ƒĀPčƒ1˙˙YX˙u¤VčH.˙˙XZj˙u¤čŧ˙˙E´‰E¤‰$č~0˙˙‹E´ƒÄ ˙uœ˙u˜ƒĀPčé,˙˙YX˙u¤Vč.˙˙XZj˙u¤č‚˙˙E¸‰E¤‰$čD0˙˙ƒË˙ū˙ƒÄ jP‹E¸ƒĀPč 1˙˙XZ˙u¤VčŅ-˙˙YXj˙u¤čE˙˙XEZPV‰E˜čV˙˙uŧ‰E¤‰4$čø/˙˙ƒÜ˙ū˙ƒÄ jP‹EŧƒĀPčĀ0˙˙XZV˙u¤č…-˙˙YXjVčû˙˙XZW˙u¤č˙˙}Ā‰Æ‰<$čŗ/˙˙ƒå˙ū˙ƒÄ j‰E¤P‹EƒĀPčx0˙˙YXWVč?-˙˙XZjWčĩ˙˙}ĉ<$čz/˙˙‹EÄƒÄ ˙u”˙uƒĀPčå+˙˙YXWVč -˙˙XZjWč‚˙˙}ȉ<$čG/˙˙ƒô˙ū˙ƒÄ jP‹EȃĀPč0˙˙XZWVčÖ,˙˙YXjWčL˙˙XZ˙u Vča˙˙}Ė‰Æ‰<$č/˙˙‹EĖƒÄ j˙u¤ƒĀPčĐ/˙˙YXWVč—,˙˙XZjWč ˙˙}Љ<$čŌ.˙˙‹EĐƒÄ ˙uŒ˙uˆƒĀPč=+˙˙YXWVčd,˙˙XZjWčÚ˙˙}ԉ<$čŸ.˙˙ƒ÷˙ū˙ƒÄ jP‹EԃĀPčg/˙˙XZWVč.,˙˙YXjWč¤˙˙XZ˙u˜Včš˙˙u؉Į‰4$č\.˙˙‹EØƒÄ j˙u¤ƒĀPč(/˙˙YXVWčī+˙˙XZjVče˙˙u܉4$č*.˙˙‹EÜƒÄ ˙u„˙u€ƒĀPč•*˙˙YXVWčŧ+˙˙XZjVč2˙˙^Xƒĩúū˙PWč3˙˙ZYP˙učč$˙˙ZEäYjPčk˙˙‹EƒÄeô[^_]vƒė ˙uč=%˙˙‹EƒÄ eô[^_]‰ĮPPjV‰ūčĪ˙˙ƒÄPPEäjPč˙˙‰4$č-˙˙‰ĮPPjV‰ūčŠ˙˙ƒÄëØ‰ÆPPjWč˜˙˙ƒÄëĮQQ‰ÆjWč‡˙˙ƒÄëPPjWčv˙˙ƒÄëĨ‰ÆPPjWče˙˙ƒÄë”QQ‰ÆjWčT˙˙ƒÄ냉ÆPPjWčC˙˙ƒÄéo˙˙˙‰ĮPPjV‰ūč-˙˙ƒÄéY˙˙˙QQ‰Æj˙u¤č˙˙ƒÄéC˙˙˙QQ‰Æj˙u¤č˙˙ƒÄé-˙˙˙‰ÆPPj˙u¤čë˙˙ƒÄé˙˙˙‰ÆPPj˙u¤čÕ˙˙ƒÄé˙˙˙QQ‰ÆjWčÁ˙˙ƒÄéíū˙˙‰Æéæū˙˙fVSčy2˙˙Ã‰ĩƒė‹t$˙t$,˙t$,˙t$,˙t$,˙t$,˙t$,Vč(˙˙ƒÄ ‰đ[^t&U‰åWVSč52˙˙ÃEĩƒėT˙u˙uč˙˙ƒÄ„Ā„ÖE˃ė‰Â‰EŦEPRč1-˙˙EȉÁ‰E°E‰$Qč-˙˙uāVč$"˙˙}ĐWčÛ+˙˙ƒū˙ū˙ƒÄ j P‹EЃĀPčŖ,˙˙YXWVčj)˙˙XZjWčā˙˙_XE PVčô˙˙}ԉE´‰<$č–+˙˙ƒ˙˙ƒÄ jP‹EԃĀPč^,˙˙XZW˙u´č#)˙˙YXjWč™˙˙XEZP˙u´čĢ˙˙}؉E´‰<$čM+˙˙ƒ˙˙ƒÄ j P‹E؃ĀPč,˙˙YXW˙u´čÚ(˙˙XZjWčP˙˙_X˙u°˙u´čS˙˙}܉E´‰<$č+˙˙ƒ˙˙ƒÄ jP‹E܃ĀPčÍ+˙˙XZW˙u´č’(˙˙YXjWč˙˙XZ˙uŦ˙u´č ˙˙ZYP˙učĀ!˙˙‹UäƒÄ…Ō„bƒė jčˆ˙˙ƒÄ„ĀtQ‹Mä…ÉtJ‹‹“”˙˙˙ƒč ‰U´9Đ…„ƒė QčĢ˙˙ƒÄ‹Eȃč ;E´u]‹E˃č ;E´uB‹Eeô[^_]t&‹ƒ”˙˙˙‰E´ë͐t&ƒė ˙učĩ!˙˙‹EƒÄ eô[^_]t&‰ōčÉ8˙˙ëĩ´&‰ōčš8˙˙뚍´&‰ú‰M°čĻ8˙˙‹M°éj˙˙˙‰Æ‹ƒ”˙˙˙‰E´‹E˃č ;E´tUĮč€8˙˙ƒė VčG)˙˙QQ‰ÆjWčë˙˙ƒÄPPEäjPč;˙˙ƒÄ‹Eȋ‹”˙˙˙ƒč ‰M´9Čt˛UĮč=8˙˙먉ÆPPjWč¯˙˙ƒÄëÂQQ‰ÆjWčž˙˙ƒÄëąQQ‰ÆjWč˙˙ƒÄ렉ÆëŦ‰Æë˜U‰åWVSčE/˙˙ÃU˛ƒėD˙u˙u‹učž$˙˙ƒÄ„Ā„ÃEāƒė }ĖP‰EÄčQ˙˙Wč )˙˙‹MĖƒū˙ū˙ƒÄ j PAPčĶ)˙˙XZW˙uÄč˜&˙˙YXjWč˙˙XE ZP˙uÄč ˙˙}ЉEĉ<$čÂ(˙˙ƒ˙˙ƒÄ jP‹EЃĀPčŠ)˙˙YXW˙uÄčO&˙˙XZjWčÅ˙˙_XEP˙uÄč×˙˙}ԉEĉ<$čy(˙˙ƒ@˙˙ƒÄ j P‹EԃĀPčA)˙˙XZW˙uÄč&˙˙YXjWč|˙˙XEZP˙uÄčŽ˙˙}؉Eĉ<$č0(˙˙ƒ)˙˙ƒÄ jP‹E؃ĀPčø(˙˙YXW˙uÄčŊ%˙˙XZjWč3˙˙_XEP˙uÄčE˙˙}܉Eĉ<$čį'˙˙ƒK˙˙ƒÄ jP‹E܃ĀPč¯(˙˙XZW˙uÄčt%˙˙YXjWčę˙˙XZ˙uÄVč¯˙˙‹EäƒÄ…Āt9ƒė jč{˙˙ƒÄ„Āt(‹Eä…‰EÄt‹‰Eƒč ;ƒ”˙˙˙u:ƒė ˙uÄčŸ˙˙ƒÄeô‰đ[^_]ƒė Vč×˙˙ƒÄ eô‰đ[^_]´&‰účé5˙˙ëŊQQ‰ÆjWč[˙˙ƒÄPPEäjPčĢ˙˙‰4$č“&˙˙‰ÆPPjWč7˙˙ƒÄëÚQQ‰ÆjWč&˙˙ƒÄëɉÆëÅQQ‰ÆjWč˙˙ƒÄ봉ÆPPjWč˙˙ƒÄëŖt&ŧ'U‰åWVSčĩ,˙˙ÃůƒėD˙u˙u‹uč'˙˙ƒÄ„Ā„ÃEāƒė }ĖP‰EÄčÁ˙˙Wč{&˙˙‹MĖƒū˙ū˙ƒÄ j PAPčC'˙˙XZW˙uÄč$˙˙YXjWč~˙˙XE ZP˙uÄč ˙˙}ЉEĉ<$č2&˙˙ƒ˙˙ƒÄ jP‹EЃĀPčú&˙˙YXW˙uÄčŋ#˙˙XZjWč5˙˙_XEP˙uÄčG ˙˙}ԉEĉ<$čé%˙˙ƒ0˙˙ƒÄ jP‹EԃĀPčą&˙˙XZW˙uÄčv#˙˙YXjWčė˙˙XEZP˙uÄčū ˙˙}؉Eĉ<$č %˙˙ƒ)˙˙ƒÄ jP‹E؃ĀPčh&˙˙YXW˙uÄč-#˙˙XZjWčŖ˙˙_XEP˙uÄčĩ ˙˙}܉Eĉ<$čW%˙˙ƒK˙˙ƒÄ jP‹E܃ĀPč&˙˙XZW˙uÄčä"˙˙YXjWčZ˙˙XZ˙uÄVč˙˙‹EäƒÄ…Āt9ƒė jčë˙˙ƒÄ„Āt(‹Eä…‰EÄt‹‰Eƒč ;ƒ”˙˙˙u:ƒė ˙uÄč˙˙ƒÄeô‰đ[^_]ƒė VčG˙˙ƒÄ eô‰đ[^_]´&‰účY3˙˙ëŊQQ‰ÆjWčË˙˙ƒÄPPEäjPč˙˙‰4$č$˙˙‰ÆPPjWč§˙˙ƒÄëÚQQ‰ÆjWč–˙˙ƒÄëɉÆëÅQQ‰ÆjWč˙˙ƒÄ봉ÆPPjWčp˙˙ƒÄëŖt&ŧ'U‰åWVSč%*˙˙Ã5­ƒėL‰E´‹E‹M‹‹ …Ā„W…É„Oƒė‰U°QPč˙˙‹U°ƒÄ…Ā•Ā8„?ƒK˙˙„Ō“M˙˙uā‰EŦ‰EčƒTũū˙Dƒė V‰EČčķ˙˙ƒ_üū˙‰$Vč˙˙ZUYRPčč ˙˙uˉĮ‰4$č‹#˙˙ƒSũū˙ƒÄ j‰E¨P‹E˃ĀPčP$˙˙YXVWč!˙˙XZjVč˙˙^Xƒküū˙PWčŽ˙˙Z}ÄYWPč’ ˙˙ZY˙uPč‡ ˙˙uЉE°‰4$č)#˙˙‹MЍƒM˙˙ƒÄ jPAPčņ#˙˙YXV˙u°čļ ˙˙XZjVč,˙˙Yƒwüū˙^P˙u°čK˙˙^ZUČRPč/ ˙˙uԉE°‰4$čŅ"˙˙‹MԍƒR˙˙ƒÄ jPAPč™#˙˙XZV˙u°č^ ˙˙YXjVčÔ˙˙XE ZP˙u°čæ˙˙u؉E°‰4$čˆ"˙˙‹EØƒÄ j˙u¨ƒĀPčT#˙˙YXV˙u°č ˙˙XZjVč˙˙^XƒŖ˙ū˙P˙u°čŽ˙˙ZYWPč•˙˙Y^˙uPčŠ˙˙u܉Į‰4$č-"˙˙‹EÜƒÄ j˙uŦƒĀPčų"˙˙XZVWčĀ˙˙YXjVč6˙˙XZW˙u´čû˙˙‹}äƒÄ…˙t1ƒė jčĮ˙˙ƒÄ„Āt ‹}ä…˙t‹ƒč ;ƒ”˙˙˙u<ƒė Wčķ ˙˙ƒÄ‹E´eô[^_]Ѝt&9Č”Āéŋũ˙˙ļƒė ˙u´č˙˙ƒÄ ëЉōč90˙˙ëģ‰ĮPPjV‰ūčŠ ˙˙ƒÄPPEäjPčų ˙˙‰4$čá ˙˙‰ÆëįQQ‰ĮjV‰ūč ˙˙ƒÄëԉĮPPjV‰ūčl ˙˙ƒÄëÁ‰ĮPPjV‰ūčY ˙˙ƒÄëŽQQ‰ĮjV‰ūčF ˙˙ƒÄ뛐VēƒėD$ ‹t$PD$ P˙t$ ‰đ˙t$ čēü˙˙ƒÄ‰đ^V1ԃėD$ ‹t$PD$ P˙t$ ‰đ˙t$ čü˙˙ƒÄ‰đ^t&U‰åWVS‰ÖčŖ&˙˙ÃŗŠƒėL‰E´‹E‹˙pôjP˙uč¤˙˙ƒÄƒø˙‰ņ•Ā8Á„1ƒK˙˙“M˙˙„ɍuā‰EŦ‰EčƒTũū˙Dƒė V‰EČč…˙˙ƒ_üū˙‰$Vč–˙˙ZUYRPčz˙˙uˉĮ‰4$č ˙˙ƒSũū˙ƒÄ j‰E¨P‹E˃ĀPčâ ˙˙YXVWčŠ˙˙XZjVč ˙˙^Xƒküū˙PWč@˙˙Z}ÄYWPč$˙˙ZY˙uPč ˙˙uЉE°‰4$čģ˙˙‹MЍƒM˙˙ƒÄ jPAPčƒ ˙˙YXV˙u°čH˙˙XZjVčž ˙˙Yƒwüū˙^P˙u°čŨ˙˙^ZUČRPčÁ˙˙uԉE°‰4$čc˙˙‹MԍƒR˙˙ƒÄ jPAPč+ ˙˙XZV˙u°čđ˙˙YXjVčf ˙˙XE ZP˙u°čx˙˙u؉E°‰4$č˙˙‹EØƒÄ j˙u¨ƒĀPčæ˙˙YXV˙u°čĢ˙˙XZjVč! ˙˙^XƒŖ˙ū˙P˙u°č@˙˙ZYWPč'˙˙Y^˙uPč ˙˙u܉Į‰4$čŋ˙˙‹EÜƒÄ j˙uŦƒĀPč‹˙˙XZVWčR˙˙YXjVčČ ˙˙XZW˙u´č˙˙‹}äƒÄ…˙t1ƒė jčY˙˙ƒÄ„Āt ‹}ä…˙t‹ƒč ;ƒ”˙˙˙u.ƒė Wč…˙˙ƒÄ‹E´eô[^_]Í´&ƒė ˙u´čĩ˙˙ƒÄ ëŪ‰ōčŲ,˙˙ëɉĮPPjV‰ūčI ˙˙ƒÄPPEäjPč™˙˙‰4$č˙˙‰ĮPPjV‰ūč# ˙˙ƒÄëØQQ‰ĮjV‰ūč ˙˙ƒÄëʼnÆëÁQQ‰ĮjV‰ūčų ˙˙ƒÄ뮉ĮPPjV‰ūčæ ˙˙ƒÄ뛐Vēƒė‹t$˙t$ ˙t$ ˙t$ ˙t$ ‰đčÜü˙˙ƒÄ‰đ^vV1ԃė‹t$˙t$ ˙t$ ˙t$ ˙t$ ‰đč¯ü˙˙ƒÄ‰đ^ļVSčI#˙˙ÃYĻƒė‹t$˙t$,˙t$,˙t$,˙t$,Vč&˙˙ƒÄ ‰đ[^ļŋU‰åWVS‰Öč#˙˙ÃĻƒėL‰E´‹E‹˙pôjP˙učD ˙˙ƒÄƒø˙‰ņ•Ā8Á„aƒŲųū˙“M˙˙„ɍuā‰EŧƒTũū˙Dƒė V‰EĀčč˙˙ƒ_üū˙‰$Včų˙˙ZUYRPčŨ˙˙uĉĮ‰4$č€˙˙ƒSũū˙ƒÄ j‰EŦP‹EăĀPčE˙˙YXVWč ˙˙XZjVč‚˙˙^Xƒküū˙PWčŖ˙˙ZYMŧQP‰M°č„˙˙uȉĮ‰4$č'˙˙YX˙uVč\ ˙˙YZPWčÃ˙˙XZjVč9˙˙uˉ4$čū˙˙ƒM˙˙ƒÄ jP‹E˃ĀPčÆ˙˙XZVWč˙˙YXjVč˙˙Xƒwüū˙ZPWč$˙˙^UĀ_RPč˙˙uЉĮ‰4$čĢ˙˙ƒR˙˙ƒÄ jP‹EЃĀPčs˙˙XZVWč:˙˙YXjVč°˙˙XE ZPWčÄ˙˙uԉĮ‰4$čg˙˙‹EÔƒÄ j˙uŦƒĀPč3˙˙YXVWčú˙˙XZjVčp˙˙^XƒŖ˙ū˙PWč‘˙˙ZY˙u°Pčv˙˙u؉Į‰4$č˙˙YX˙uVčN ˙˙YZPWčĩ˙˙XZjVč+˙˙u܉4$čđ˙˙ƒK˙˙ƒÄ jP‹E܃ĀPč¸˙˙XZVWč˙˙YXjVčõ˙˙XZW˙u´čē˙˙‹}äƒÄ…˙t1ƒė jč†˙˙ƒÄ„Āt ‹}ä…˙t‹ƒč ;ƒ”˙˙˙u+ƒė Wč˛˙˙ƒÄ‹E´eô[^_]Ít&ƒė ˙u´čå˙˙ƒÄ ëá‰ōč )˙˙ëĖQQ‰ĮjV‰ūčy˙˙ƒÄPPEäjPčÉ˙˙‰4$čą˙˙‰ÆëįQQ‰ĮjV‰ūčO˙˙ƒÄëԉĮPPjV‰ūč<˙˙ƒÄëÁQQ‰ĮjV‰ūč)˙˙ƒÄ뮉ĮPPjV‰ūč˙˙ƒÄ뛉ĮPPjV‰ūč˙˙ƒÄëˆQQ‰ĮjV‰ūčđ˙˙ƒÄér˙˙˙´&Vēƒė‹t$˙t$ ˙t$ ˙t$ ˙t$ ‰đč|ü˙˙ƒÄ‰đ^vV1ԃė‹t$˙t$ ˙t$ ˙t$ ˙t$ ‰đčOü˙˙ƒÄ‰đ^ļU‰åWVSčE˙˙ÃUĸƒėL‰E´‹E‹u‹‹…Ā„—…É„ƒė‰U°QPčŌ˙˙‹U°ƒÄ…Ā•Ā8„ƒŲųū˙„Ō“M˙˙}ā‰EŧƒTũū˙Dƒė W‰EĀč˙˙ƒ_üū˙‰$Wč'˙˙ZUYRPč ˙ū˙}ĉE°‰<$č­˙˙‹Uč‹Sũū˙ƒÄ jQ‰M¨BPčr˙˙YXW˙u°č7˙˙XZjWč­˙˙_Xƒküū˙P˙u°čĖ˙˙ZYMŧQP‰MŦč­ūū˙‰Į‹uȉ4$‰E°čK˙˙YX˙u°VčĀ˙˙YZPWčį˙˙XZjVč]˙˙uˉ4$č"˙˙ƒM˙˙ƒÄ jP‹E˃ĀPčę˙˙XZVWčą˙˙YXjVč'˙˙Xƒwüū˙ZPWčH˙˙^UĀ_RPč,ūū˙uЉĮ‰4$čĪ˙˙ƒR˙˙ƒÄ jP‹EЃĀPč—˙˙XZVWč^˙˙YXjVčÔ˙˙XE ZPWččũū˙uԉĮ‰4$č‹˙˙‹EÔƒÄ j˙u¨ƒĀPčW˙˙YXVWč˙˙XZjVč”˙˙^XƒŖ˙ū˙PWčĩ ˙˙ZY˙uŦPčšũū˙‰Į‹Eu؋‰4$‰E°č5˙˙YX˙u°VčĒ˙ū˙YZPWčŅ˙˙XZjVčG˙˙u܉4$č ˙˙ƒK˙˙ƒÄ jP‹E܃ĀPčÔ˙˙XZVWč›˙˙YXjVč˙˙XZW˙u´čÖ ˙˙‹}äƒÄ…˙t1ƒė jčĸ ˙˙ƒÄ„Āt ‹}ä…˙t‹ƒč ;ƒ”˙˙˙u7ƒė WčÎ˙˙ƒÄ‹E´eô[^_]Ã9Č”Āéũ˙˙ļƒė ˙u´čõ ˙˙ƒÄ ëՉōč%˙˙ëĀQQ‰ĮjV‰ūč‰˙˙ƒÄPPEäjPčŲ˙ū˙‰4$čÁ˙˙QQ‰ĮjV‰ūčc˙˙ƒÄëØ‰ÆPPjWčR˙˙ƒÄëĮ‰ÆëÉĮPPjV‰ūč;˙˙ƒÄ밉ĮPPjV‰ūč(˙˙ƒÄëQQ‰ĮjV‰ūč˙˙ƒÄëŠQQ‰ĮjV‰ūč˙˙ƒÄét˙˙˙vŧ'VēƒėD$ ‹t$PD$ P˙t$ ‰đ˙t$ čJü˙˙ƒÄ‰đ^V1ԃėD$ ‹t$PD$ P˙t$ ‰đ˙t$ čü˙˙ƒÄ‰đ^t&U‰åWVSčU˙˙Ãežƒė4‹u˙u ‹}VčŨ˙˙XFZ˙uPčĪ˙˙ƒÄ…˙„„ƒė jčú ˙˙‰Á‰EԍEįƒÄ PW‰ĪQčU ˙˙‰~‹}ƒÄ…˙tfƒė jčÎ ˙˙‰ĮEįƒÄ P˙uWč, ˙˙ƒÄ‰~ ‹Eƒė ÆFÆFÆF‰F‹E ‰FFPčōüū˙ƒÄeô[^_]Í´&‹}ĮF…˙ušĮF ëŗ‰ĮF QQjPčz˙˙ƒÄPPFjPčj˙˙ƒÄ‹F‹“”˙˙˙ƒč ‰UÔ9ĐtUįčü"˙˙‹ƒč ;EÔtUįčę"˙˙ƒė Wčą˙˙ƒė ‰EÔWčUūū˙‹}ԃÄëωĮ‹ƒ”˙˙˙‰EÔëĉĮ땃ė ˙uԉĮč/ūū˙ƒÄ듉Į돍ļU‰åWVS}įčâ˙˙Ãōœƒė0‹u‹ƒ8˙˙˙ƒĀ‰FW˙u Pč˙˙‹UƒÄ…Ō„ˆƒė jč† ˙˙ƒÄ ‰EÔW˙uPčæ˙˙‹EԃĉF‹Eƒė ĮF ĮFĮFĮFĮF‰F$‹EĮF ÆF,ĮF0ĮF4‰F(F8Pčyûū˙ƒÄeô[^_]ÍļĮF뒉EԋF…Āt ƒė Pč<ũū˙ƒÄ‹F …Āt ƒė Pč)ũū˙ƒÄPPFjPčé˙˙ƒÄ‹Fƒč ;ƒ”˙˙˙t‰úč!˙˙ƒė ˙uÔčF˙˙ƒė ˙uԉEĐččüū˙‹EЃÄ‰EÔëĮ‰EÔ됍´&U‰åWVSč•˙˙ÃĨ›ƒė,‹u‹F…Āt ‹ƒė P˙RƒÄFƒė PčĒ ˙˙‹~ ƒÄ…˙tƒė jč6˙˙ƒÄ„Āug‹ģ”˙˙˙‹N…Ét9ƒė jč˙˙ƒÄ„Āt(‹F…‰EÔt‹‰EЃč 9ø…‡ƒė ˙uÔč<üū˙ƒÄ‹Fƒč 9øu_‹ƒč 9øuFeô[^_]Íļ‹F …‰EÔt‹Eԋģ”˙˙˙‹‰EЃč 9øuIƒė ˙uÔčîûū˙ƒÄém˙˙˙ļUįčX ˙˙eô[^_]ÍUįčH ˙˙뗍ļUįč8 ˙˙él˙˙˙vUįč( ˙˙뭉ĮPPFjPčg˙˙‰}ԋģ”˙˙˙ƒÄ‹Fƒč 9øtUįčų˙˙‹ƒč 9øtUįčč˙˙ƒė ˙uÔč­˙˙‰ĮFƒė Pč_ ˙˙ƒÄF RRjPč˙˙ƒÄ떉Įëę‰EÔëϐU‰åWVSčõ˙˙Ãšƒė,‹M‹ƒ8˙˙˙‹q ƒĀ‰‹A9đ‰EÔt#‹>…˙tƒė Wčüū˙‰<$čéúū˙ƒÄƒÆ9uÔuŪ‹Eƒė ƒĀ8Pčß˙˙‹EƒÄ‹@…Āt ƒė Pčšúū˙ƒÄ‹E‹@ …Āt ƒė PčŖúū˙ƒÄ‹E‹@…ĀtVƒė jč<˙˙ƒÄ„ĀtE‹E‹x…˙t;‹‹ŗ”˙˙˙ƒč 9đuGƒė Wčcúū˙‹EƒÄ‹@ƒč 9đt&UįčË˙˙eô[^_]Ív‹E‹ŗ”˙˙˙‹@ƒč 9đuڍeô[^_]ÍUįč˙˙믉ƋEƒė ƒĀ8Pč˙˙ƒÄ‹E‹@…Āt ƒė Pčôųū˙ƒÄ‹E‹@ …Āt ƒė PčŪųū˙ƒÄ‹EƒėjƒĀPčš˙˙ƒÄ‹E‹HAô;ƒ”˙˙˙tUįč.˙˙ƒė Včõ˙˙‰ÆëډÆë–ļŋVSčY˙˙Ãi˜ƒė‹t$Vč˙˙‰4$čnųū˙ƒÄ[^Ѝ´&VSč)˙˙Ã9˜ƒė‹t$ ‹F;Ft<…Āt ‹T$$‰‹FƒĀ‰F‹F‰Â+VÁú;F ‰T$ t-…Āt‰ƒĀ‰FƒÄ[^ÍvƒėT$(RPF Pčfûū˙ƒÄ됃ėƒÆT$RPVčŪ˙˙ƒÄëȐ´&Sčš˙˙ÃĒ—ƒė‹T$‹B ;Bt…Āt ‹L$‰‹B ƒĀ‰B ƒÄ[Ѝt&ƒėƒÂL$QPRčö˙˙ƒÄëߐSčJ˙˙ÃZ—ƒė˙t$‹D$˙0čBøū˙ƒÄ[ЍļŋWVS‹t$‹|$č˙˙Ã —‹F9øt1ƒėPVč9 ˙˙ƒÄ…Āt ƒė ‹P˙RƒÄ…˙‰~t ƒėWVč•˙˙ƒÄ[^_Í´&ŧ'WVS‹t$‹|$č°˙˙ÃĀ–‹F9øt1ƒėPVčŲ ˙˙ƒÄ…Āt ƒė ‹P˙RƒÄ…˙‰~t ƒėWVč5˙˙ƒÄ[^_Í´&ŧ'U‰åWVSčU˙˙Ãe–ƒė,‹ŗ”ū˙˙‹‹@ô…Āu eô[^_]Ѝt&ƒėjj:Včųū˙ƒÄƒø˙‰Į„PEÜjVƒĮP‰EĖčÂûū˙‹ƒÄ‹@ô9Į‡;Eāj˙WVP‰EĐčĸûū˙Į$‹ģ”˙˙˙č°˙˙‰Į‰EԋƒD˙˙˙ƒĀ‰Į$č”˙˙Y‰ÆX‹ƒĐū˙˙ĮF˙˙˙˙ƒĀ‰F˙uĖPč2úū˙XF Z˙uĐPč$úū˙‰4$č<õū˙EÛƒÄ ‰wuäPƒ|˙˙PVč˛˙˙‹EÔY_V˙pčô˙ū˙‹Eä‹ģ”˙˙˙ƒÄƒč 9ø…m‹Eƒė˙uÔĖPčé˙˙‹EāƒÄƒč 9øu\‹E܃č 9ø„Ņū˙˙‰ōčˇ˙˙éÅū˙˙fƒ¤˙˙ƒė˙6Pč/˙˙X‹ƒx˙˙˙˙0čũū˙ƒÄeô[^_]ÍļUÚčx˙˙뉍ļ‰ōči˙˙ë›Pƒøū˙WPƒl˙˙Pčôū˙‹ģ”˙˙˙‰Æ‹E܃č 9øtUÚč8˙˙ƒė Vč˙ ˙˙‹ģ”˙˙˙‰Æƒė ˙uÔčœõū˙ƒÄ‹Eāƒč 9øtōUÚč˙˙ë쉯ëč‹ģ”˙˙˙ƒė ‰EĐVčoõū˙‹EЃÄ‰Æëž‹ģ”˙˙˙‰Á‹Fƒč 9øtUä‰MĐčČ˙˙‹MЉČëÆ‰EЋF ‹ģ”˙˙˙ƒč 9øtUäčĻ˙˙‹MĐëĉƋEä‹ģ”˙˙˙ƒč 9øtUÚč‡˙˙‹EÔRRjƒĀPčį˙˙ƒÄéH˙˙˙‰Æ‹ģ”˙˙˙ëېt&SčĒ˙˙Ãē“ƒė‹D$…Āt"‹T$‹J$‹QL;QPt…Ōt ‰‹QL‹D$ƒÂ‰QLƒÄ[ÃfƒėƒÁHD$PRQč˙˙‹D$$ƒÄëېt&U‰åWVSčE˙˙ÃU“ƒė,‹M‹ƒäū˙˙‹yTƒĀ‰‹AX‹gũ˙‰MĐ9ø‰EÔu$ëFļƒė VčĮ˙˙‰4$č/ôū˙ƒÄƒĮ9}Ôt$‹7…ötō‹‹@;EĐtԃė V˙ЃÄƒĮ9}Ôuߍv‹E‹xL‹pH9÷uëAƒė Pčįķū˙ƒÄƒÆ9÷t-‹…Ātķ‹‹R;“ŧū˙˙tڃė P˙ԃƃÄ9÷uŨvŧ'‹E‹€Ø…Āt ‹ƒė P˙RƒÄ‹Eƒė Pč&˙˙‹EƒÄ‹¸ü…˙t*ƒė jčūū˙ƒÄ„Āt‹E‹€ü…Āt ‹ƒė P˙RƒÄ‹E‹°ø…ötƒė jčåũū˙ƒÄ„Ā…‹ģ”˙˙˙‹Eƒė ĖPč˙ū˙‹Eˆ‰$č˙˙‹EƒÄ‹pl‹@p9Æt&v‹…Āt ‹ƒė P˙RƒÄ‹EƒÆ;ppuã‹E‹@l…Āt ƒė PčĀōū˙ƒÄ‹E‹@`…Āt ƒė PčĒōū˙ƒÄ‹E‹@T…Āt ƒė Pč”ōū˙ƒÄ‹E‹@H…Āt ƒė Pč~ōū˙ƒÄ‹Eƒė ˙p@čÍųū˙ƒÄ…Āt ‹ƒė P˙RƒÄ‹Eƒė ˙p@čė˙˙ƒÄ…‰Æ…‹Eƒė ƒĀ PčP˙˙‹EƒÄ‹@ƒč 9ø…Íeô[^_]Ít&‹E‹°ø…ö„Õū˙˙‹F …Āx ƒė PčO˙ū˙ƒÄ‹‹ģ”˙˙˙ƒč 9ø…ƒė VčĐņū˙ƒÄé¤ū˙˙´&ƒ˙˙hÎPEäjP‰EÔčVōū˙ƒŠûū˙ƒÄ jP˙ŗ°ū˙˙č?˙˙ƒîúū˙ƒÄ jP˙ŗ°ū˙˙č(˙˙ZYV˙ŗ°ū˙˙čjîū˙X˙uÔčņ˙˙ƒÄé˙˙˙UäčŅ˙˙eô[^_]ÍUäčÁ˙˙éc˙˙˙‰Eԋ‹ģ”˙˙˙ƒč 9øtUäčĸ˙˙‹uԋEƒė ĖPčūüū˙ƒÄ‹Eƒė ˆPč ˙ū˙ƒÄ‹Eƒė ƒĀlPčØđū˙ƒÄ‹E‹@`…Āt ƒė PčŌđū˙ƒÄ‹E‹@T…Āt ƒė Pčŧđū˙ƒÄ‹E‹@H…Āt ƒė PčĻđū˙ƒÄ‹Eƒė ƒĀ@Pčäôū˙ƒÄ‹Eƒė ƒĀ Pčĸ˙˙ƒÄ‹E‹@ƒč 9øtUãčę˙˙ƒė Včą˙˙‰Į‹Eƒė‰ūjøPčúũū˙ƒÄ‹ģ”˙˙˙é˙˙˙‰Į‹EƒėjüPč×ųū˙ƒÄëÉƋģ”˙˙˙éöū˙˙‰Æë’‰Æéy˙˙˙‰Æ‹E‹Pl…Ō„˙˙˙ƒė Rčņīū˙ƒÄé˙˙˙‰Æéëū˙˙‰ÆéĐū˙˙ƒė ˙uԉÆč^˙˙ƒÄé5˙˙˙‰Į‹Eƒė PčS˙˙ƒÄéq˙˙˙vŧ'VSči ˙˙ÃyŽƒė‹t$Vč6ėū˙‰4$č~īū˙ƒÄ[^Ѝ´&U‰åWVSč5 ˙˙ÃEŽƒė,‹u‹ƒ˙˙˙‹~$ƒĀ‰…˙t'‹“€qũ˙‹@9Đ…œƒė WčÛëū˙‰<$č#īū˙ƒÄƒė ƒÆVčųū˙ƒÄ…‰Æu eô[^_]Ívƒ˙˙hyPEäjP‰EÔč–īū˙‹ģ°ū˙˙ƒ8˙˙ƒÄ jPWč~˙˙ƒîúū˙ƒÄ jPWčl˙˙ZYVWčŗëū˙X˙uÔč:˙˙ƒÄeô[^_]Í´&ƒė W˙ЃÄéj˙˙˙ƒė ˙uԉÆč ˙˙‰4$čÅ˙˙ƒė ƒÆ‰ĮVč‡˙ū˙‰<$č¯˙˙´&ŧ'VSč ˙˙Ã)ƒė‹t$Vč˙˙‰4$č.îū˙ƒÄ[^Ѝ´&U‰åWVSčå ˙˙ÃõŒƒėP‹u‹ƒäū˙˙~ ƒĀ‰‹E ‰FEäP‰EĀƒTũū˙PFPčū÷ū˙YXVWčÅöū˙XFZVP‰EÄč&˙˙YXF ‰~jP‰E´čĶųū˙ƒÄ…‰E¸…ĩE؃ėÆF8˙ŗĖū˙˙Pč?īū˙ƒÄ…‰E¸…Q‹E؃ė ĮFHĮFLĮFPĮFTĮFX‰F@‹EÄĮF\ĮF`ĮFdĮFh‰FD†ˆĮFlĮFpĮFtÆFxĮF|˙˙˙˙Į†€Į†„P‰E¸čëū˙†Ė‰Eĉ$čŋîū˙Į†ØÆ†ÜĮ†āĮ†äĮ†čĮ†ėĮ†đĮ†ôĮ†øĮ$č,ųū˙‹“H˙˙˙Y_ƒÂ‰‰†üEā˙ŗĖū˙˙Pč îū˙ƒÄ…‰Eŧ…ŧ‹Eāƒė Į†Į†Į† Ɔ‰†jčÄøū˙_Z‹“¨ū˙˙ƒÂ‰P˙uÄč>ķū˙ƒÄeô[^_]Ívƒ˙˙huPEÔjP‰Eŧč†ėū˙‹ģ°ū˙˙ƒ ˙˙ƒÄ j!PWčn˙˙ƒîúū˙ƒÄ jPWč\˙˙XZ˙u¸WčĄčū˙Y˙uŧč(˙˙ƒÄéëũ˙˙ƒ˙˙hčPj˙uĀč*ėū˙‹ģ°ū˙˙ƒÜ˙˙ƒÄ j1PWč˙˙ƒîúū˙ƒÄ jPWč˙˙XZ˙uŧWčEčū˙Y˙uĀčĖ˙ū˙ƒÄéčū˙˙t&ƒ˙˙hčPEÜjP‰EŧčÆëū˙‹ģ°ū˙˙ƒÜ˙˙ƒÄ j1PWčŽ˙˙ƒîúū˙ƒÄ jPWčœ˙˙XZ˙u¸Wčáįū˙X˙uŧčh˙ū˙ƒÄéOũ˙˙ƒė ˙uŧ‰ĮčS˙ū˙ƒÄ‹Fƒč ;ƒ”˙˙˙tUĶč*˙˙ƒė Wčņ˙ū˙‰Į†üQQjPč?ôū˙ƒÄPP†øjPč,øū˙Z˙uÄčcöū˙ƒÄƒė ˙u¸čuøū˙ƒÄFlƒė PčFęū˙‹F`ƒÄ…Āt ƒė PčCęū˙ƒÄ‹FT…Āt ƒė Pč0ęū˙ƒÄ‹FH…Āt ƒė Pčęū˙ƒÄF@ƒė Pč^îū˙ƒÄƒė ˙u´č ûū˙ƒÄé8˙˙˙ƒė ˙u‰Įč{ūū˙ƒÄéD˙˙˙‰Įëԃė ˙uŧ‰Įčbūū˙ƒÄë‰Įéd˙˙˙‰Įé˙ū˙˙‰Į†ƒė PčNũū˙ƒÄé˙˙˙‰Įé˙˙˙‰Įé(˙˙˙´&U‰åWVSčU˙˙Ãeˆƒė4‹u‹ƒ˙˙˙ƒĀ‰FjP‰EĐč€õū˙ƒÄ…‰Įu/ƒė ÆFhčöõū˙‰ĮXZVWč[îū˙‰~$ƒÄeô[^_]Ѝt&ƒ˙˙huPEäjP‰EÔčžéū˙ƒ ˙˙ƒÄ j!P˙ŗ°ū˙˙č§˙ū˙ƒîúū˙ƒÄ jP˙ŗ°ū˙˙č˙ū˙XZW˙ŗ°ū˙˙čŌåū˙Y˙uÔčYũū˙ƒÄéj˙˙˙ƒė ˙uԉÆčDũū˙‰4$čüũū˙ƒė ‰ÆWčĄčū˙ƒÄƒė ˙uĐčŗųū˙‰4$čÛũū˙‰Æë鐍ļU‰åWVSčE˙˙ÃU‡ƒė €ģHŗt eô‰đ[^_]ÍvģHƒė ŗWč[įū˙ƒÄ…Āt׃ė Vč+đū˙‰<$čŗđū˙ƒ@ö˙˙ƒÄ PV˙ŗÄ˙˙˙čMåū˙ƒÄeô‰đ[^_]Ãƒė ‰ÆWčĩûū˙‰4$č=ũū˙ļŋU‰åWVSčĨ˙˙Ãĩ†ƒė\‹ƒ ˙˙˙‹…Ā„üƒėj:Pčqčū˙ƒÄ…Ā„ŪxE܃ėP‰E°EäWP‰Æ‰EŦčĒņū˙YXVuÄVčîęū˙‰4$č6øū˙‹E䋋”˙˙˙ƒÄƒč ‰M´9Č…|ƒė Vč÷ū˙ƒÄ„Ā…ʍEāƒėPW}ĐWčWņū˙XEÔZWP‰Į‰E¨č–ęū˙‰<$čŪ÷ū˙ƒÄč†äū˙ƒė Pčmûū˙}ČƒÄ ˙u°PWčņū˙ZYW}ĖWčaęū˙‰<$čŠ÷ū˙EØƒÄ ˙u¨WP‰E¤čvãū˙X˙u¤Vč ÷ū˙‹E؃ăč ;E´…Z‹E˃č ;E´…[‹Eȃč ;E´…\‹Eԃč ;E´…í‹EЃč ;E´…Žƒė Včeūū˙ƒÄ„Ā„Šƒė ˙uŦčöū˙}ā‹EäW‰E¨čāųū˙ƒÄ ˙u¨WV˙u°č ũū˙‹EāƒÄ ƒč ;E´…ž‹Eäƒč ;E´…Ÿƒė˙u°˙učéū˙‹E܃ăč ;E´…‹Eăč ;E´…‹Eeô[^_]vƒėV˙učDéū˙ƒÄëЍ´&E˃ėuÜPƒ&$˙˙PVčŅīū˙Y_}āVWčéū˙‰<$č]öū˙ƒÄčãū˙ƒė Pčėųū˙UČƒÄ RPEÔP‰Æč™īū˙XEØZVP‰ÆčÛčū˙‰4$č#öū˙EäƒÄ WVP‰EŦčōáū˙X˙uŦ˙učļčū˙‹E䋋”˙˙˙ƒÄƒč ‰M´9Č…ü‹E؃č ;E´… ‹Eԃč ;E´…î‹Eāƒč ;E´…˙‹E܃č ;E´„˙˙˙‹UŦčh ˙˙éķū˙˙vUāčX ˙˙éwũ˙˙v‹UŦčH ˙˙éEū˙˙vEäƒėPƒTũū˙P˙učĘîū˙ƒÄé˛ū˙˙f‹UŦč ˙˙éū˙˙vUØč ˙˙éUū˙˙v‰účų˙˙éUū˙˙t&‹UŦčč˙˙édū˙˙v‹UŦčØ˙˙é™ũ˙˙v‹UŦčČ˙˙é˜ũ˙˙v‹UŦč¸˙˙é—ũ˙˙vUĐč¨˙˙é÷ū˙˙v‹UŦč˜˙˙é˙˙˙v‹UŦčˆ˙˙éæū˙˙v‹UŦčx˙˙éôū˙˙‰Æ‹ƒ”˙˙˙‰E´‹Eԃč ;E´tUĐčU˙˙‹Eāƒč ;E´tUĐčB˙˙‹E܃č ;E´tUĐč/˙˙ƒė Včöøū˙‰Æ‹ƒ”˙˙˙‰E´ëĉƋEā‹“”˙˙˙ƒč ‰U´9ĐtUäčü˙˙븉Ƌƒ”˙˙˙‰E´ëĢ‰Æ‹E䋓”˙˙˙ƒč ‰U´9ĐtUĐčĐ˙˙‹E؃č ;E´„Y˙˙˙UĐčš˙˙éL˙˙˙‰Æ‹E܃č ;E´…†‹Eăč ;E´„e˙˙˙UÃčŒ˙˙éX˙˙˙‰Æ‹ƒ”˙˙˙‰E´ëĒ‰Æ‹E؋“”˙˙˙ƒč ‰U´9Đ„ųū˙˙UäčY˙˙éėū˙˙‰Æ‹Eȃč ;E´t‹UŦč?˙˙‹Eԃč ;E´t‹UŦč,˙˙‹EЃč ;E´„z˙˙˙‹UŦč˙˙ém˙˙˙‰Æ‹E˃č ;E´tą‹UŦčû˙˙ë§ëቯ‹E؃č ;E´t܋UŦčâ˙˙ëŌ‰Æëëú‰Æé0˙˙˙‰ÆëŖ‰Æ‹Eċ“”˙˙˙ƒč ‰U´9ĐtUāč˛˙˙‹Eäƒč ;E´„tū˙˙Uāč›˙˙égū˙˙‰Æ‹ƒ”˙˙˙‰E´ë׉ƋEäƒč ;E´„Õū˙˙UØčp˙˙éČū˙˙‰Æ‹Eāƒč ;E´t׍UØčV˙˙ë͍t&U‰åWVSuāč’ũū˙Ãĸ€ƒė(Včsņū˙ƒb˙˙‰$Vč¤ëū˙ƒÄ…Āu]Eäƒė Pčaõū˙j‹}äč7îū˙‰ÆXZWVčLđū˙‹EZYĖVPčËäū˙‹E䋺”˙˙˙ƒÄƒč 9đ…„‹Eāƒč 9đu1eô[^_]ÃfƒTũū˙ƒėPVč0ëū˙ƒÄ…Āu)‹ŗ”˙˙˙‹Eāƒč 9đtĪUäč‘˙˙eô[^_]Éöŧ'ƒ˙˙ƒė˙uāPčūëū˙X‹ƒx˙˙˙˙0čāįū˙ƒÄ‹ŗ”˙˙˙벐t&UßčH˙˙éo˙˙˙‹ŗ”˙˙˙‰Į‹Eāƒč 9đtUßč)˙˙ƒė Wčđõū˙ƒė ‰ĮVč•āū˙ƒÄ‹E䋺”˙˙˙ƒč 9đtĮUßčú˙˙ëŊ‰Įëât&Sč:üū˙ÃJƒėčĖŨū˙ƒė ˙p$čķū˙‰$čįū˙ƒÄ[Ít&Sč üū˙ÃƒėčœŨū˙ƒė ˙p$čŅōū˙‰$čIāū˙ƒÄ[Ít&VSčŲûū˙Ãé~ƒė‹t$čgŨū˙ƒė‹L$QR˙p$VčŖæū˙ƒÄ‰đ[^‰öŧ'VSč™ûū˙ÃŠ~ƒėč+Ũū˙‹@$‹€ø…ĀtF“ųū˙ƒėR˙p č<åū˙ZYPjI‰Æčīū˙XZV‹D$˙0čbÛū˙‰4$čzæū˙Į$čîâū˙ļ‹ŗ˙˙˙ƒė˙6‹D$˙0č2Ûū˙X˙6čJæū˙č5Ûū˙t&U‰åWVSĩÅū˙˙č˙úū˙Ã~ėL‹}ëļčÛū˙ƒ8…‚ƒėjV˙wčŦãū˙ƒÄƒø˙t܅Ā…ī‹EĮ@‹ŗ”˙˙˙ëvŧ'č;íū˙„Ā…ŗ‹Eƒė ˙pčėū˙ƒÄƒø˙uŨč¨Úū˙ƒ8tā…Ôū˙˙ŊØū˙˙ƒėĮ…Ôū˙˙ÎPWčĶāū˙YX…Æū˙˙Pƒ˙˙P…Čū˙˙P‰…´ū˙˙ččū˙Ėū˙˙ƒŦūū˙ƒÄ P˙ĩ´ū˙˙Q‰´ū˙˙č?ãū˙X…Đū˙˙Z‰Âƒ“˙˙P˙ĩ´ū˙˙R‰•´ū˙˙čãū˙YÜū˙˙XW˙ĩ´ū˙˙Q‰´ū˙˙č1Üū˙XŊāū˙˙ƒÍūū˙ZP˙ĩ´ū˙˙Wčæâū˙YX…äū˙˙‰Âƒ›˙˙‰•´ū˙˙PWRčČâū˙XŊčū˙˙ƒã˙˙ZP˙ĩ´ū˙˙Wč­âū˙WčĮŨū˙‹…čū˙˙ƒÄƒč 9đ…û‹…äū˙˙ƒč 9đ…Ú‹…āū˙˙ƒč 9đ…š‹…Üū˙˙ƒč 9đ…˜‹…Đū˙˙ƒč 9đu{‹…Ėū˙˙ƒč 9đu^‹…Čū˙˙ƒč 9đuA‹…Øū˙˙ƒč 9đ„Xū˙˙‰účĄ˙˙čŒëū˙„Ā„Qū˙˙t&‹EĮ@˙˙˙˙eô[^_]Íļ‰účq˙˙ëļ´&‰úča˙˙뙍´&‰účQ˙˙éy˙˙˙t&‰účA˙˙é\˙˙˙t&‰úč1˙˙é;˙˙˙t&‰úč!˙˙é˙˙˙t&•Įū˙˙č ˙˙éõū˙˙…čū˙˙ƒė PčŲāū˙ƒŦūū˙ƒÄ hËP…äū˙˙jP‰Æ‰…´ū˙˙čŨū˙Xƒ”˙˙ZP˙ŗ°ū˙˙č0áū˙‹•čū˙˙ƒÄ ˙rôRPčŨōū˙‰4$čĩđū˙‹…čū˙˙ƒÄƒč ;ƒ”˙˙˙„+ũ˙˙‹•´ū˙˙č‚˙˙éũ˙˙ƒø…l˙˙˙ļ…Åū˙˙ƒėL‹} ĮE°˙˙˙˙ĮE´˙˙˙˙…˙„ö‹E‹PT‹@X‰EÔ)ĐÁø…Ā„GEäĮEŦĮE¸ĮEĉEĖEā‰Eȉöŧ'‹EŦƒė‹‚˙uĖ˙p˙uȉĮ‰EĐčDŠū˙‹G‹W ƒÄÆG,‰EÔ)ĐÁø…Ā„7Eß1˙‰Eŧ됍t&„Ā„åƒ} „æƒė˙uÄ˙u´˙u°čĨ›ū˙ƒÄ„Ā…ʸt&EċEĐÆFļ@,‹MЈA,‹Eäƒč ;ƒ”˙˙˙…ē‹EЃĮ‹P ‹@‰EÔ)ĐÁø9ĮƒŽ‹4ēƒė˙uŧ˙v˙uĖ芍ū˙XƒP$˙˙ZP˙uȉEĀ诞ū˙ƒÄ„ĀˆEÔuƒė˙uĀ˙uĖ莲ū˙ˆEԃÄļEԃėˆF˙uĖ˙uČčķĸū˙‹“ŧ˙˙˙ļMԃĈF: †˙˙˙1ĀéD˙˙˙t&ƒEăE¸¸ÆFé8˙˙˙vŧ'‹UŧčXÂū˙é9˙˙˙v‹Eāƒč ;ƒ”˙˙˙u+‹EƒEŦ‹}Ŧ‹PT‹@X‰EÔ)ĐÁø9Į‚bū˙˙‹E¸eô[^_]ËUĖčÂū˙ëˍƒ$˙˙ƒėj˙P茡ū˙Y‰E°ƒ$˙˙^j˙PčyĄū˙ƒÄ‰E´éÛũ˙˙‰Æ‹Eäƒč ;ƒ”˙˙˙t‹UŧčÆÁū˙‹Eāƒč ;ƒ”˙˙˙t‹UĖč°Áū˙ƒė Včw˛ū˙‰ÆëŨĮE¸‹E¸eô[^_]ÐU‰åWVSčÕ¸ū˙Ãå;ƒė$‹} ‹u˙ŗ¤ū˙˙WčĘĒū˙ƒÄ…Āt#UįjRPWč˛ū˙‰ƒÄeô‰đ[^_]t&EįƒėPWVčŌĻū˙ƒÄeô‰đ[^_]ƒė Pčęąū˙ëõ´&U‰åWVSčU¸ū˙Ãe;ƒė|‹E‹}ÆëƒĮļƒė Pčqœū˙ƒÄ…ĀuęEĀƒė ‰Ŋ|˙˙˙P‰E€č˛ū˙EÔĮEÔĮEØĮEäƒÄ‰E”‰E܉EāEЉEœvƒėj,Wč͜ū˙ƒÄ…Ā„ڍuČjVPWč%ąū˙‰EĖE˃ĉE¤E´ƒė˙u¤˙uœP‰Eč¨ū˙‹E”ƒÄ ;E´„Ŋƒķ˙˙ƒėjP‹EƒĀPč]˛ū˙‹EĖƒÄ ˙pôP‹EƒĀPčG˛ū˙ƒ¯˙˙ƒÄ jP‹EƒĀPč/˛ū˙‹EĖ‹“”˙˙˙ƒÄƒč ‰U 9Đ…Ƀėj,Wčœū˙ƒÄ…‰Į„t&ƒĮļƒė PčI›ū˙ƒÄ…Āuęé˙˙˙t&EŋƒėPEĖWP‰E¤č4Ĩū˙ƒÄé#˙˙˙t&‹E‹pƒĀ‰E 9Æuënļƒė Včg¤ū˙ƒÄ;E ‰ÆtUƒė˙v˙u¤čΤū˙ƒÄ…Āu؍E¨ƒė˙u¤˙uœPčϰū˙ƒÄ ‹EĖ‹‹”˙˙˙ƒč ‰M 9Č„7˙˙˙uȉōčŋū˙é(˙˙˙t&ƒË˙˙ƒėjP‹EƒĀPč ąū˙‹EĖƒÄ ˙pôP‹EƒĀPč ąū˙ƒÄ˙˙ƒÄ j!P‹EƒĀPčō°ū˙ƒÄ늋EuȋxƒĀ‰EŒ9Į„ĪEĉE˜ƒÚ˙˙‰Eˆët&ƒė W自ū˙ƒÄ;EŒ‰Į„ĸƒėV˙w˙u˜č ¤ū˙ƒÄ ˙u˜˙uœ˙učĻū˙‹EÄƒÄ ‹M´ƒč ;E uV;M”uŗ‹Eƒėj˙uˆƒĀPč_°ū˙‹GƒÄ…ĀtCƒėP‹EƒĀP腞ū˙ƒŪūū˙ƒÄƒėjP‹EƒĀPč*°ū˙ƒÄéb˙˙˙‹U¤‰M„čįŊū˙‹M„뚃ėƒ/øū˙ëĩƒė˙u€VčûŽū˙ƒTũū˙‰$Vč<Ŗū˙ƒÄ…Ā…™‹Eȃč ;E u+ƒė˙uØ˙uœč¸¨ū˙XZj˙u€č ›ū˙‹…|˙˙˙ƒÄeô[^_]ËU¤čsŊū˙ëˉƃė˙uØ˙uœč¨ū˙Y_j˙u€č՚ū˙‰4$čŽū˙‰Æ‹E˃č ;ƒ”˙˙˙t΍UČč5Ŋū˙ëÄëĀ랉ƋEȃč ;E tŗUÄčŊū˙늃ė˙u˙u ˙u¤‹uČčd¨ū˙ƒÄ ƒÚüū˙V‹ŗ˙˙˙˙uĖP˙6č9Ļū˙‹E˃ăč ;E tUÄčĶŧū˙ƒė ˙6čIŸū˙ƒÄč1”ū˙‰Æ‹E˃č ;E t‡UÄčŦŧū˙éz˙˙˙´&U‰åWVSčåŗū˙Ãõ6ƒė,ĮEԍƒųū˙ģ@˙˙‰EЍļƒėj@WčĨ˜ū˙ƒÄ…‰Æ„ĀEįjPVWčûŦū˙ƒÄ ‰ĮP˙uĐ˙uÔč:Ŗū˙ƒÄGô;ƒ”˙˙˙utļF~<@t9‹E´ƒč 9ø… ‹E“{˙˙€xƒ~˙˙Dƒė˙uˆPEŧP‰EŒčĶlū˙ƒ§˙˙u¸ƒÄ ˙ĩx˙˙˙PVčēlū˙ƒÄ˙uŒV˙u”˙uč8eū˙‹E¸ƒÄƒč 9ø…0‹Eŧƒč 9ø…;‹Euƒė˙p\˙pXVč4_ū˙YXƒ˙˙˙˙uˆPEÄP‰…d˙˙˙čYlū˙ƒÄV˙ĩd˙˙˙˙u”˙učÔdū˙‹Eăăč 9ø…õ‹Eƒč 9ø…E˃ė˙uˆ˙u P‰Æ‰…l˙˙˙č lū˙ƒŽ˙˙ƒÄ ˙ĩx˙˙˙PEČP‰E„čīkū˙ƒÄV˙u„˙u”˙učmdū˙‹Eȃăč 9ø…ˇ‹E˃č 9ø…ƒė˙u˙ĩx˙˙˙čŊiū˙X‹EÜZ˙pôP˙uč,xū˙‹E܃ăč 9ø…Ÿƒę˙˙ĮE”ĮE€‰…h˙˙˙鞍t&‹Fē‹Hô…ÉDƒė˙vP˙u„č)oū˙X‹F ‹Sũū˙ZQ˙u„‰…|˙˙˙EЉt˙˙˙P‰EŒčfū˙YX˙ĩ|˙˙˙˙uŒ˙ĩl˙˙˙čėeū˙‹EĐƒÄ ƒč 9ø…‹Eԃė˙uˆ˙uĖP‰…|˙˙˙čãjū˙EØƒÄ j˙ĩ|˙˙˙Pčfū˙Xƒ¸˙˙ZjP˙učLwū˙‹EØƒÄ ˙pôP˙uč:wū˙“Ņ˙˙ƒÄ j RPč(wū˙‹E؃ăč 9ø…G‹Eԃč 9ø…)‹vƒė˙ĩt˙˙˙˙u„˙uˆčBeū˙YXV˙uˆ˙ĩx˙˙˙č1eū˙‹EāƒÄ ƒč 9ø…@ƒė˙ĩx˙˙˙˙ĩp˙˙˙čü˙˙‹•p˙˙˙čQ‚ū˙é.ü˙˙‹•p˙˙˙čA‚ū˙éQü˙˙‹•p˙˙˙č1‚ū˙éĐú˙˙‹•p˙˙˙č!‚ū˙é˛ú˙˙‹•p˙˙˙č‚ū˙é5ú˙˙‹•p˙˙˙č‚ū˙é3ú˙˙‰Æ‹Eȃč 9øt ‹•p˙˙˙čåū˙‹E˃č 9øu<‹Eœƒč 9øtU›čɁū˙ƒė Včrū˙‰Æ‹E¨ƒč 9øt ‹•p˙˙˙芁ū˙‹EŦƒč 9øtċ•p˙˙˙蔁ū˙ëˇ‰Æ‹E¸ƒč 9øt ‹•p˙˙˙č{ū˙‹Eŧƒč 9øt–ëЉÆë‰ƋE ‹ģ”˙˙˙ƒč 9øt ‹•p˙˙˙čNū˙‹E¤ƒč 9ø„e˙˙˙량ƋEäƒč 9øt‹Uˆč*ū˙‹E܃č 9øt‹Uˆčū˙‹E˃č 9øt‹UŒčū˙‹Eȃč 9ø„˙˙˙‹•d˙˙˙čí€ū˙é ˙˙˙‰Æë牯‹Eāƒč 9øtĀ‹•p˙˙˙č̀ū˙ëŗ‰Æ‹E؃č 9øt ‹•p˙˙˙贀ū˙‹Eԃč 9øt’ëЉÆëđ‰Æëˆ‰Æ‹EЃč 9øtŽ‹•p˙˙˙艀ū˙끉Æéz˙˙˙‰Æ‹E܃č 9ø„•ū˙˙éĖū˙˙‰Æ‹ģ”˙˙˙é˙˙˙‰Æé|ū˙˙‰Æ‹Eăč 9øt ‹•p˙˙˙č@€ū˙‹Eƒč 9ø„Wū˙˙éŽū˙˙‰Æ‹E´ƒč 9ø„Bū˙˙éyū˙˙‰Æé–ū˙˙‰Æ‹E°ƒč 9øtڋ•p˙˙˙čúū˙ë͉Æé ū˙˙‰Æë­ļŋU‰åWVSEäč"wū˙Ã2úƒėp‰E˜‹} Pƒ,˙˙PE°P‰E čOeū˙^Xƒū˙˙‹‹”˙˙˙P˙u‰M¤č`ū˙‹U°ƒÄ ‹‹”˙˙˙˙rôRP‰M¤čŦqū˙MāƒÄ ‹“”˙˙˙Q‰M”M¸˙w‰U¤Q‰Mčúdū˙U܍ƒŗ˙˙u´ƒÄ RPV‰Uœčādū˙ƒÄ˙uV˙u ˙uč^]ū˙‹E´‹‹”˙˙˙ƒÄƒč ‰M¤9Č…ė‹E¸ƒč ;E¤…ôƒė Wčübū˙Z‰EäEŧY˙u˜P‰Eč¸\ū˙^uĀXƒÃ˙˙˙uœPVčsdū˙ƒÄ˙uV˙u ˙učņ\ū˙‹EƒÄƒč ;E¤…Ģ‹Eŧƒč ;E¤…ŗƒė Wč'Wū˙Z‰EäEÄY˙u˜P‰EčS\ū˙^uČXƒ úū˙˙uœPVčdū˙ƒÄ˙uV˙u ˙učŒ\ū˙‹Eȃăč ;E¤…j‹Eăč ;E¤…rƒė WčâXū˙Z‰EäEĖY˙u˜P‰Ečî[ū˙Yƒ˙˙^uĐ˙uœPVčŠcū˙ƒÄ˙uV˙u ˙uč'\ū˙‹EЃÄƒč ;E¤…)‹E˃č ;E¤…1ƒ7øū˙u؃ė˙u”PVč`cū˙ƒ ˙˙ƒÄ ˙uœPEÔP‰EčGcū˙ƒÄV˙u˙u ˙učÅ[ū˙‹Eԃăč ;E¤…ë‹E؃č ;E¤…ķƒė˙w4˙w0˙uœčÃUū˙XZV‹u”ƒ˙˙˙PVčđbū˙ƒÄ˙uœV˙u ˙učn[ū˙‹EāƒÄƒč ;E¤…¸‹E܃č ;E¤…ĀG8ƒėP˙u˜čž`ū˙‹EäY^˙pôP˙uč-oū˙^Z“ę˙˙RP‰U č[]ū˙‹EäƒÄƒč ;E¤…”1ö됍t&ƒÆƒė WčTWū˙ƒÄ9Æ}5ƒėVWčŖTū˙ƒÄ€xtڃėVWčTū˙ƒÄ P˙w˙uč!bū˙ƒÄëŧt&ƒ˙˙ƒėP˙učæ\ū˙‹U°ƒÄ ˙rôRPč–nū˙ZY˙u PčË\ū˙‹E°ƒÄƒč ;E¤ueô[^_]ËU”č=|ū˙é_˙˙˙‹U˜č0|ū˙eô[^_]ËU˜č |ū˙‹E¸ƒč ;E¤„ ũ˙˙‹U˜č |ū˙é˙ü˙˙‹U”čü{ū˙‹Eŧƒč ;E¤„Mũ˙˙‹U”čå{ū˙é@ũ˙˙‹U”čØ{ū˙‹Eăč ;E¤„Žũ˙˙‹U”čÁ{ū˙éũ˙˙‹U”č´{ū˙‹E˃č ;E¤„Īũ˙˙‹U”č{ū˙éÂũ˙˙‹U˜č{ū˙‹E؃č ;E¤„ ū˙˙‹U˜čy{ū˙éū˙˙‹U˜čl{ū˙‹E܃č ;E¤„@ū˙˙‹U˜čU{ū˙é3ū˙˙‰Æ‹Eԃč ;E¤t‹U˜č;{ū˙‹E؃č ;E¤u<‹E°ƒč ;E¤tU¯č{ū˙ƒė Včäkū˙‰Æ‹Eāƒč ;E¤t‹U˜č˙zū˙‹E܃č ;E¤tċU˜čėzū˙ë牯ë‹E´‹“”˙˙˙ƒč ‰U¤9Đt‹U˜čÉzū˙‹E¸ƒč ;E¤tŽëČ‰Æ‹ƒ”˙˙˙‰E¤ëæ‰Æ‹EЃč ;E¤t‹U”čšzū˙‹E˃č ;E¤„[˙˙˙‹U”čƒzū˙éN˙˙˙‰Æë≯‹Eȃč ;E¤t‹U”čezū˙‹Eăč ;E¤„&˙˙˙ëɉÆëë‰Æ‹Eŧƒč ;E¤„˙˙˙ë˛‰Æ‹Eäƒč ;E¤„üū˙˙량ƋEƒč ;E¤tĪ‹U”čzū˙ëʼnÆéŅū˙˙‰Æé˙˙˙t&U‰åWVSEäčBqū˙ÃRôƒÄ€‰Æ‰EŒPƒ!˙˙‹} PE P‰Ečm_ū˙Xƒ¸˙˙‹‹”˙˙˙ZP˙u‰M”č#Zū˙YXƒ˙˙‹‹”˙˙˙P˙u‰M”č Zū˙‹U ƒÄ ˙rôR‹“”˙˙˙P‰U”č°kū˙‹‹”˙˙˙‰<$‰M”čkū˙YM¤‰EäZ‹“”˙˙˙VQ‰M„‰U”č$Wū˙Xu¨ƒÃ˙˙ZUÜRPV‰UˆčÛ^ū˙ƒÄ˙u„V˙u˙učYWū˙‹E¨‹‹”˙˙˙ƒÄƒč ‰M”9Č…m‹E¤ƒč ;E”…uƒė Wčeū˙Y‰EäEŦ^˙uŒP‰E„čŗVū˙Xu°ƒ úū˙Z˙uˆPVčn^ū˙ƒÄ˙u„V˙u˙učėVū˙‹E°ƒÄƒč ;E”…,‹EŦƒč ;E”…6ƒė WčRWū˙Y‰EäE´^˙uŒP‰E„čNVū˙Xu¸ƒ˙˙Z˙uˆPVč ^ū˙ƒÄ˙u„V˙u˙uč‡Vū˙‹E¸ƒÄUā‰U„ƒč ;E”…é‹E´ƒč ;E”…ƒ7øū˙ƒė˙u„PEĀP‰E€čˇ]ū˙ƒ ˙˙uŧƒÄ ˙uˆPVčĄ]ū˙ƒÄ˙u€V˙u˙učVū˙‹EŧƒÄƒč ;E”…Ö‹Eƒč ;E”…Ūƒė Wčõdū˙uÄƒÄ RPVč×aū˙YXƒ˙˙˙u„PEČP‰E€č?]ū˙ƒÄV˙u€˙u˙učŊUū˙‹Eȃăč ;E”…˜‹Eăč ;E”…>ƒė Wčãhū˙uĖƒÄ RPVčĩOū˙Xƒ˙˙˙Z˙u„PEĐP‰E€čŨ\ū˙ƒÄV˙u€˙u˙uč[Uū˙‹EЃÄƒč ;E”…ø‹E˃č ;E”…Ī‹ƒt˙˙˙€8teƒė WčVUū˙Z‰EäEÔY˙uŒP‰E€č˛Tū˙^uØXƒ!˙˙˙uˆPVčm\ū˙ƒÄ˙u€V˙u˙učëTū˙‹E؃ăč ;E”…a‹Eԃč ;E”…Eƒė Wčacū˙ZYP˙uˆč6Zū˙^X‹EÜ˙pôP˙učĨhū˙‹E܃ăč ;E”…E؃ėPƒ-˙˙P˙uŒčí[ū˙EÔƒÄ ‹u„Pƒŗ˙˙PVčÖ[ū˙ƒÄ˙uŒV˙u˙učTTū˙‹EāƒÄƒč ;E”…<‹Eäƒč ;E”…Dƒę˙˙ƒėP˙u‰Eč^Vū˙ƒÄ1öë;´&ƒėVWč6bū˙‰$čÎYū˙ƒÄ…Ā~ƒėVWčbū˙ZYP˙učĸhū˙ƒÄƒÆƒė Wč^ū˙ƒÄ9Æ|ŧƒ˙˙ƒėP˙učúUū˙‹U ƒÄ ˙rôRPčĒgū˙ZY˙uPčßUū˙‹E ƒÄƒč ;E”…Ģeô[^_]ËU„čMuū˙éŽū˙˙‹U„č@uū˙é’ū˙˙‹UŒč3uū˙é$ū˙˙‹UŒč&uū˙éĩũ˙˙‹UŒčuū˙éûũ˙˙‹U„č uū˙é×ü˙˙‹UŒč˙tū˙‹Eƒč ;E”„"ũ˙˙‹UŒččtū˙éũ˙˙‹UŒčÛtū˙é[ũ˙˙‹UˆčÎtū˙‹Eäƒč ;E”„ŧū˙˙‹U„čˇtū˙é¯ū˙˙‹UŒčĒtū˙eô[^_]ÍUāčštū˙‹E¤ƒč ;E”„‹û˙˙Uāčƒtū˙é~û˙˙Mā‰Ęčttū˙‹EŦƒč ;E”„Ęû˙˙Mā‰Ęč[tū˙éģû˙˙čQtū˙é ü˙˙‹UŒčDtū˙éÜũ˙˙‰Æ‹Eŧƒč ;E”t‹UŒč*tū˙‹Eƒč ;E”u<‹E ƒč ;E”tUŸč tū˙ƒė VčĶdū˙‰Æ‹Eȃč ;E”t‹UŒčîsū˙‹Eăč ;E”tċUŒčÛsū˙ë牯‹E´ƒč ;E”t­UāčÄsū˙ëŖ‰Æ‹E°ƒč ;E”tUāč­sū˙‹EŦƒč ;E”tƒëԉÆë‹E؃č ;E”t‹U„č‡sū˙‹Eԃč ;E”„Y˙˙˙‹U„čpsū˙éL˙˙˙‰Æë≯‹EЃč ;E”t‹UŒčRsū˙‹E˃č ;E”„$˙˙˙é[˙˙˙‰Æë良‹E܃č ;E”„ ˙˙˙éA˙˙˙‰Æ‹Eāƒč ;E”t‹Uˆčsū˙‹Eäƒč ;E”„áū˙˙‹Uˆčørū˙éÔū˙˙‰Æë≯‹E¸ƒč ;E”„˙˙˙UāčÖrū˙éúū˙˙‰Æ‹ƒ”˙˙˙‰E”‹E¤ƒč ;E”„˜ū˙˙éæū˙˙‰ÆéŒū˙˙‰Æ‹E¨‹‹”˙˙˙ƒč ‰M”9ČtЍUāčŽrū˙ëÆ‰Æé[ū˙˙‰Æéū˙˙´&ŧ'U‰åWVSĩ ˙˙˙č¯iū˙Ãŋėė‹}GPVč6Qū˙‰4$č~^ū˙X…$˙˙˙ZVP‰…˙˙˙čÉbū˙˙ĩ˙˙˙‹ŗ”˙˙˙č¨Zū˙ƒÄ„ĀuAƒė˙w‹ģ˙˙˙ƒ6˙˙‹ŗ”˙˙˙P˙7čA[ū˙Y˙7‹ŗ”˙˙˙čcTū˙Į$č‡cū˙´&ƒųū˙ƒė‹ŗ”˙˙˙P˙wčøVū˙ƒÄ…‰…˙˙˙tš…,˙˙˙ƒė ‰Æ‰… ˙˙˙…`˙˙˙P‰…˙˙˙čČKū˙‹‹dū˙˙‹ģ˜ū˙˙ÆEÔĮEĐÆEÕĮE؍A‹O ĮEÜĮEāĮE䉅`˙˙˙‹G‰Ę‰˙˙˙‰…,˙˙˙‰Á‰…˙˙˙‹@ô‰”,˙˙˙Į…0˙˙˙X‹AôZjđPč)Zū˙‹WY^‹rô‰•4˙˙˙4˙˙˙‰•˙˙˙‹W‰đū˙˙ΉjV‰•üū˙˙čôYū˙‹W‹w‹Bô‰•øū˙˙‹“Pū˙˙‰ĩôū˙˙‰´,˙˙˙Į…<˙˙˙B Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙‰…,˙˙˙B4Į…P˙˙˙‰…`˙˙˙B ‹“€˙˙˙‰…4˙˙˙B•T˙˙˙‰…8˙˙˙‰$‰•ėū˙˙čøVū˙‹“`ū˙˙‹ŗ”˙˙˙Į…X˙˙˙B‰…8˙˙˙F ‰…\˙˙˙XZ•8˙˙˙R˙ĩ˙˙˙‰•čū˙˙čYū˙_X˙u ˙ĩđū˙˙čÖVū˙Y_Ŋ(˙˙˙˙ĩ ˙˙˙WčÂ\ū˙Z˙ĩ˙˙˙˙ĩ(˙˙˙č Gū˙‹…(˙˙˙ƒÄƒč 9đ… ƒė ˙ĩ˙˙˙č~Sū˙‹ƒPū˙˙ƒÄƒĀ ‰…,˙˙˙‹ƒPū˙˙ƒĀ4‰…`˙˙˙‹ƒPū˙˙ƒĀ ‰…4˙˙˙‹ƒ`ū˙˙ƒĀ‰…8˙˙˙‹…\˙˙˙ƒč 9đ…拃€˙˙˙ƒė ˙ĩėū˙˙ƒĀ‰…8˙˙˙čq`ū˙‹…øū˙˙‹ôū˙˙‹Ŋüū˙˙‹@ô‰Œ,˙˙˙‹…˙˙˙‹˙˙˙‰…4˙˙˙‹@ô‰ŧ4˙˙˙‹…˙˙˙‰…,˙˙˙‹@ô‰Œ,˙˙˙‹ƒdū˙˙ƒĀ‰…`˙˙˙X˙ĩ˙˙˙čXYū˙‹…$˙˙˙ƒÄƒč 9đu@‹… ˙˙˙ƒč 9đueô[^_]Ív•˙˙˙č•nū˙éäū˙˙‹• ˙˙˙č…nū˙eô[^_]Ѝt&‹• ˙˙˙čmnū˙ëŗv‰účanū˙é˙˙˙‰Įƒė ˙ĩ ˙˙˙čĖ]ū˙ƒÄ‹…$˙˙˙ƒč 9đt •˙˙˙č1nū˙‹… ˙˙˙ƒč 9đt •˙˙˙čnū˙ƒė Wčā^ū˙‰Į‹ŗ”˙˙˙ëՉƋ… ˙˙˙ƒč ;ƒ”˙˙˙t •,˙˙˙ččmū˙ƒė Vč¯^ū˙‹ŗ”˙˙˙‰Į‹ƒdū˙˙ƒė ˙ĩ˙˙˙ƒĀ‰…`˙˙˙čJXū˙ƒÄéi˙˙˙‰Į‹…˙˙˙‹˙˙˙‹ŗ”˙˙˙‰…,˙˙˙‹@ô‰Œ,˙˙˙ëĩ‰Įé<˙˙˙‰Į‹…(˙˙˙ƒč 9đ„˙˙˙•˙˙˙čgmū˙é˙˙˙ƒė ˙ĩčū˙˙‰…˙˙˙čMū˙XWYR˙ĩ ˙˙˙číXū˙‹Ŋ˙˙˙ƒÄéX˙˙˙ë U‰åWVSčedū˙ÃuįƒėdƒTũū˙P˙ŗtū˙˙čzRū˙ƒÄ…Ā„÷EƒėĮE´˙˙˙˙ĮE¸˙˙˙˙ĮEĐP‰Eœ‹ƒtū˙˙ĮEÔĮEØ˙0EŧP‰E¤čNRū˙E˃ÄĮEÜĮEāĮEä1ö‰E ët&wčpVū˙„Ā„ƒėVj|˙u¤čĒIū˙ƒÄƒø˙‰Į„„‰Â‹Eŧ)ō‹@ô9ƇęRV‹u ˙u¤VčLLū˙ƒÄ‹Eā;EätA…ĀtƒėVPuÜčKū˙‹EāƒÄƒĀ‰Eā‹E˃č ;ƒ”˙˙˙„z˙˙˙UČčúkū˙ém˙˙˙t&u܃ė˙u PVčāKū˙ƒÄëĮv‹Eŧ‹@ô9đ‚j˙VuČ˙u¤VčËKū˙ƒÄ‹Eā;Eä„6…ĀtƒėVPuÜč‹Jū˙‹EāƒÄƒĀ‰Eā‹Eȃč ;ƒ”˙˙˙tUĖčykū˙‰öŧ'‹E܋uЋUä‰EЋEԉu܉Á‹Eā9ΉMā‰EԋE؉U؉Eät9}ˉM¤ëļƒÆ9u¤t ‹ƒč ;ƒ”˙˙˙të‰úƒÆčkū˙9u¤uät&‹u܅öt ƒė Vč€Fū˙ƒÄ‹Eŧƒč ;ƒ”˙˙˙…[‹UЋEÔĮEĀ˙˙˙˙)ĐÁøƒø„âučƒā˙˙ƒė˙ŗtū˙˙PVčUū˙VčQFū˙‹Eăăč ;ƒ”˙˙˙…‹EЃė j‰E¤čŧRū˙ZY‹MĀ˙u¤P‹u¸‹}´‰E¤‰M čbIū˙‹E¤‹M ƒÄ‰x‰p‹}ԋuЉH 9÷t?M܉E ‰M¤ë vƒÆ9÷t!‹ƒč ;ƒ”˙˙˙tė‹U¤ƒÆč)jū˙9÷u䐍t&‹E ‹}ЉE¤…˙t ƒė WčŠEū˙ƒÄ‹E¤eô[^_]Ít&eô1Ā[^_]ÍE´ƒėƒÂPRčŪ[ū˙ƒÄ„Ā„˙˙˙E¸ƒėP‹EЃĀPčĀ[ū˙ƒÄ„Ā„åū˙˙‹EЃė˙uœƒĀ PčŖ[ū˙ƒÄ„Ā…üū˙˙éÃū˙˙vUÜčˆiū˙é˜ū˙˙UÜč{iū˙éÚū˙˙ƒėVuÜPVčhIū˙ƒÄéŅũ˙˙Pƒøū˙VPƒl˙˙Pč Cū˙u܉Įƒė Vč=Yū˙‹EŧƒÄƒč ;ƒ”˙˙˙tUÄč$iū˙‰ūEЃė PčYū˙‰4$čŪYū˙‰Į‹E˃č ;ƒ”˙˙˙t¸UČčöhū˙뎉ƋEăč ;ƒ”˙˙˙tUÜčÜhū˙븉Æë´‰Į‹Eȃč ;ƒ”˙˙˙t€UĖčžhū˙és˙˙˙Pƒøū˙VPƒl˙˙PčdBū˙ƒė ˙u¤‰ÆčDū˙ƒÄém˙˙˙´&ŧ'U‰åWVSčÅ_ū˙ÃÕâƒė,‹u€žÜteô[^_]Ѝ´&ƆÜčtXū˙9†ø‰ĮtXƒė jč`Nū˙ƒÄ„ĀtA‹†ø…‰EÔt4‹@ …Āx ƒė PčėPū˙ƒÄ‹Eԋ‰EЃč ;ƒ”˙˙˙uFƒė ˙uÔčkCū˙ƒÄ‰žøƒė Vči?ū˙‰4$čĄRū˙‰4$čéZū˙‰4$čĄZū˙ƒÄeô[^_]ÍļUįč¨gū˙밉ƋEԋAô;ƒ”˙˙˙tUįčŒgū˙ƒė VčSXū˙vSčĘ^ū˙ÃÚáƒė˙t$˙t$č$Hū˙ƒÄ[Ãë Sčš^ū˙ÃĒáƒė˙t$˙t$č´Zū˙ƒÄ[Ѝ´&ŧ'U‰åWVSče^ū˙ÃuáƒėH‹EƒĀP‰EĐč-Qū˙ƒÄ…‰EÔ…‡č:Yū˙‹Uƒė ‰B ‹B$ÆB˙°‰EČčŦIū˙ƒÄ…Ā„!ƒė PčhLū˙ƒĀƒÄ‰EĖ‹MĖ‹APô‰Q‹@üƒč ;ƒ”˙˙˙…I‹Eƒė Æ@˙uĐčĪIū˙ƒÄ…‰EÔumeô[^_]Ѝt&ƒ˙˙}äh<PjWčBū˙‹ŗ°ū˙˙ƒŌúū˙ƒÄ jPVčiXū˙ƒîúū˙ƒÄ jPVčWXū˙XZ˙uÔVčœ>ū˙‰<$č$Vū˙ƒÄé˙˙˙t&ƒ˙˙}ähHPjWč!Bū˙‹ŗ°ū˙˙ƒûū˙ƒÄ jPVč Xū˙ƒîúū˙ƒÄ jPVč÷Wū˙XZ˙uÔVč<>ū˙‰<$čÄUū˙ƒÄeô[^_]Éöŧ'ƒė jčÆMū˙‰Â‰Eċƒˆ˙˙˙ƒÄƒĀ‰B‰EĖ‹Eȋ°+°ĮBĮBĮB ‰đÁøiĀĢĒĒĒ…Ā…ŪĮEĀ‹EĀ‹MÄƉA‰A‰q ‹Mȋ‘‹ą9ō‰UÔ„Ų‰Įf…˙t‹ƒė‰‹F‰GFPGPčâCū˙ƒÄƒĮ ƒÆ 9uÔuԋEăė‰xP‹EČ˙°čŦVū˙ƒÄ…‰Æ„ū˙˙ƒ˙˙}ähõPjWčØ@ū˙YXƒč˙˙P˙ŗ°ū˙˙čEū˙YZ“îúū˙RPčõDū˙YZVPčü<ū˙‰<$č„Tū˙ƒÄéŊũ˙˙t&=UUUw{ƒė VčˆLū˙‰EƒÄé˙˙˙t&Uäč@dū˙éĒũ˙˙‹}ĀéO˙˙˙ƒė ‰ÆWč8Tū˙‰4$čđTū˙ƒė ‰ÆWč%Tū˙‰4$čŨTū˙‰Æƒė ˙uĐčOū˙‰4$čČTū˙‰Æƒė ˙uÄčk?ū˙ƒÄëÛčņQū˙ƒė ‰ÆWčæSū˙ƒÄëÆƒė Pč8Sū˙XYW˙uĀč=Kū˙ƒÄč5@ū˙‰ÆčžQū˙‹Eċ@…Ātރė Pč?ū˙ƒÄ렍ļSčÚZū˙ÃęŨƒėčl<ū˙ƒė PčsFū˙ƒÄ[Í´&ŧ'U‰åWVSEÄčĸZū˙Ã˛Ũƒėx‰E˜PčTū˙‹EƒÄ ‹˙pôP‹EăĀPčXUū˙‹EƒĀ‰E”‰$čįJū˙‹E‹@$‰E´‰$čÁUū˙‹P+ƒÄ‰ĐÁøiĀĢĒĒĒ…Ā…*‹E‹…Āt ‹Hô…É…áE˃ė˙u˜PčķSū˙‹E UÃ^_‰EԋER‹uĖ…ĀƒTũū˙EEPEØPč;Hū˙X‹EZV‰E܍EāPčéAū˙YEä_}ĐWVPčHū˙‹E˃ăč ;ƒ”˙˙˙…{‹Eƒė uÔ˙p$čS;ū˙_Z‹VP˙R‹M ƒÄ…Ét&‹ƒ@˙˙˙€8t Į ‹ƒ¤˙˙˙€8…=ƒė VčąTū˙Y˙u”čMū˙XZj˙u˜č|?ū˙ƒÄeô[^_]ËEăė˙ŗ¤ū˙˙ƒĀPčLBū˙‹EƒÄ ‹˙pôP‹EăĀPčôSū˙ƒÄéęū˙˙ƒSũū˙ƒėP‰E¤‹EăĀPčBū˙Xƒ/˙ū˙ZP‹EăĀPčūAū˙ƒP˙˙^_P‹EăĀPčéAū˙‹E‹@$‰E´‰$č#Tū˙‹P+ƒÄ‰ĐÁøiĀĢĒĒĒ…ĀŽbū˙˙D@ũÁā‰E°é°‰öŧ'ƒė Pč×Fū˙ƒĀƒÄ‰EŦ‹EŦ‹u°ƒė0EČ˙v˙6PčeLū˙X‹EÄZj˙u¤ƒĀPč"Sū˙‹EČƒÄ ˙pôP‹EăĀPč Sū˙ƒĒūū˙ƒÄ jP‹EăĀPčôRū˙‹FƒÄ ˙pôP‹EăĀPčŪRū˙‹Eȃăč ;ƒ”˙˙˙…qƒm° ‹E°ƒøô„Ŗũ˙˙‹Eƒė ‹@$˙°‰E¨čRCū˙ƒÄ…Ā…7˙˙˙ƒė jčHū˙‰Á‰E ‹ƒˆ˙˙˙ƒÄƒĀ‰A‰EŦ‹E¨‹°+°ĮAĮAĮA ‰đÁøiĀĢĒĒĒ…Ā…ũĮEœ‹Eœ‹U ƉB‰B‰r ‹U¨‹Š‹˛9ņ‰M´„ę‰Į‰öŧ'…˙t‹ƒė‰‹F‰GFPGPčĸ>ū˙ƒÄƒĮ ƒÆ 9u´uԋE ƒė‰xP‹E¨˙°člQū˙ƒÄ…‰Æ„aū˙˙ƒ˙˙}ĐhõPjWč˜;ū˙YXƒč˙˙P˙ŗ°ū˙˙čÄ?ū˙YZ“îúū˙RPčĩ?ū˙YZVPčŧ7ū˙‰<$čDOū˙ƒÄéū˙˙t&uԉōč_ū˙é€ū˙˙‰öŧ'=UUU‡îƒė Vč,Gū˙‰EœƒÄéëū˙˙‹}œéE˙˙˙‰účâ^ū˙éyü˙˙ƒė jč“Iū˙‰ĮXZVWčČIū˙ƒÄ ˙ŗ¸ū˙˙˙ŗØū˙˙WčĶKū˙ƒė PčNū˙XYW˙uœčFū˙ƒÄč;ū˙ƒė ‰E´Wč Jū˙‹}´ƒÄƒė V‰ūčQū˙ƒÄƒė ˙u”č|Iū˙ƒÄƒėj˙u˜čÜ;ū˙‰4$č$Oū˙‰Æč=Lū˙‹E ‹@…Āt ƒė Pčē9ū˙ƒÄƒė ˙u čŦ9ū˙ƒÄë°ƒė ‰ÆWč,Nū˙ƒÄë č"Lū˙‰Æë׉Į녉Æë‰Æë™‰Æ‹Eȃč ;ƒ”˙˙˙„w˙˙˙UÔčæ]ū˙éj˙˙˙‰Æ‹Eā‹“”˙˙˙ƒč ‰U´9Đt‰účÅ]ū˙‹E؃č ;E´tUĐč˛]ū˙‹E˃č ;E´„,˙˙˙UĐč›]ū˙é˙˙˙‰Æ‹ƒ”˙˙˙‰E´ëĉƋƒ”˙˙˙‰E´ëʍļŋU‰åWVS}äuāč¯Tū˙Ãŋ׃ė,čA6ū˙ƒėj˙p$Wčƒ?ū˙X‹EZ˙u ‹‰EÔƒĀ PVčėFū˙‹EƒÄ ‹‹H‹P‹‰MԉUЉEĖčū5ū˙ƒėWV˙uÔ˙uĐ˙uĖPčšEū˙‹Eā‹ģ”˙˙˙ƒÄ ƒč 9øu‹Eäƒč 9øu%eô[^_]Ѝt&UßčČ\ū˙‹Eäƒč 9øtáļ‰ōčą\ū˙eô[^_]Ëģ”˙˙˙‰Æ‹Eäƒč 9øtUßč\ū˙ƒė VčVMū˙‰Æ‹Eā‹ģ”˙˙˙ƒč 9øtĶUßčl\ū˙ëɍvŧ'U‰åWVS}āčĸSū˙Ã˛Öƒė0‹uFPƒX˙˙˙v˙6Pƒ`˙˙Pƒf˙˙PWčR7ū˙ƒÄ€}ā……E܃ė P‰EĐčVMū˙‹EäƒÄ…Ā„č‹ƒė Pƒvúū˙h•PEØjP‰EÔč¨8ū˙ƒÄ˙uĐ˙uÔčē5ū˙X˙uÔč‘=ū˙‹E܃Ä…Āt'ƒė jčŨAū˙ƒÄ„Āt‹E܅Āt‹ƒė P˙RƒÄv‹Mä…ÉtYƒė jč¯Aū˙ƒÄ„ĀtH‹Mä…ÉtA‹‹“”˙˙˙ƒč ‰UÔ9Đu_ƒė QčÖ6ū˙‹FƒÄƒč ;EÔt,‰účA[ū˙eô[^_]Éöŧ'‹ƒ”˙˙˙‰EԋFƒč ;EÔuԍeô[^_]Ít&ƒTũū˙é˙˙˙t&U܉MĐčõZū˙‹MĐ둉EԋFƒč ;ƒ”˙˙˙t‰účØZū˙ƒė ˙uÔčKū˙‰EÔRRj˙uĐč>8ū˙ƒÄPPEäjPčŽ5ū˙ƒÄëŧƒė ˙uԉEĖčk<ū˙‹E˃ĉEÔëÆ‰EÔëЍt&ŧ'U‰åWVSčÅQū˙ÃÕÔƒė8‹E ‹} ‹pEÔj˙uV˙7PčB5ū˙ƒÄ;uÔ„Eäƒė P‰EČč‡Kū˙‹E ƒÄ‹‹@‰Á)ŅÁų…É„ŨģÖøū˙1ö‰}Ėf)ĐÁøƒč9Æ„˛‹Uäģäųū˙ƒė‰EĐjBWPčLū˙‹EĐƒÄ ‹˙pôP‹EäƒĀPčúKū˙‹EäƒÄ jWƒĀPččKū˙‹E ƒÆƒÄ‹‹@‰Á)ŅÁų9ņv_…öt‹ƒųv†ƒQûū˙ƒėjP‹EäƒĀPčŽKū˙‹E ƒÄ‹‹@)ĐÁøƒč9Æ…c˙˙˙‹Eäƒėj˙u˃ĀPčKū˙‹E ƒÄ‹éB˙˙˙f‹}ȍEāƒėWPč`Jū˙Į$WčŖ6ū˙‰<$čkJū˙_Xƒ ˙˙P‹EäƒĀPčv9ū˙‹EƒÄ ‹˙pôP‹EäƒĀPčKū˙ƒ˙˙Y^P‹EäƒĀPčI9ū˙‹EāƒÄ ˙pôP‹EäƒĀPčķJū˙Xƒp˙˙ZP‹EäƒĀPč9ū˙_Xƒ/˙ū˙P‹EäƒĀPč 9ū˙ƒn˙˙Y^P‹EäƒĀPčô8ū˙ƒ‚˙˙u܉$ƒvúū˙hPjVč45ū˙‹}ȃÄWVčG2ū˙‰4$č:ū˙XZjWčÅ5ū˙‹EāƒÄƒč ;ƒ”˙˙˙ueô1Ā[^_]Íeô¸[^_]ËUČčXū˙ë߉ƋEāƒč ;ƒ”˙˙˙tUÛčûWū˙ƒė VčÂHū˙ƒė ‰ĮV‰ūčĩ9ū˙ƒÄƒėj˙uČčU5ū˙ƒÄëŋƒė‰Æj˙uČčA5ū˙‰4$č‰Hū˙‰Æë͐t&U‰åWVSuÜčōNū˙ÃŌƒė<‹U‰đčOÉ˙˙EփėP‹E ˙0EØP‰Į‰EÄč=ū˙XZVWčŒ1ū˙ˆEËE؃Ä‹‹”˙˙˙ƒč 9Ču]‹}ā‹uÜ9÷t7‹EĉEŧë t&ƒÆ9÷t!‹ƒč 9Čtđ‹UŧƒÆ‰MÄč"Wū˙9÷‹MÄuâv‹}܅˙t ƒė Wčˆ2ū˙ƒÄļEÍeô[^_]ÍU׉MŧčîVū˙‹Mŧ듉Įƒė VčŪFū˙‰<$čĻGū˙‰Į‹E؃č ;ƒ”˙˙˙tߍU×čžVū˙ëՍļŋU‰åWVSčõMū˙ÃŅƒėT˙u˙u čņEū˙ƒÄ„Āu eô[^_]Ãfƒė ˙učĨ@ū˙ƒÄ…‰Į…¸čŗHū˙‹MƒėuˉAEËÆAP‹E˙0Včä;ū˙Y_VuĐVč(5ū˙X‹EZ‹@0‰Eŧ‹E‹@,VuØV‰E¸č 5ū˙YEā_VP‰Į‰E´čų4ū˙XZW}ÜWčí4ū˙‹E⋺”˙˙˙UäƒÄ‰Uƒč 9đ…čƒėW‹}ĀWčÃ4ū˙EÄÆ$W˙uŧ˙u¸PčŸ2ū˙‹EăĉEŧ‹Eäƒč 9đ…Ā‹E܃č 9đ…‹E؃č 9đ…Ä‹EЃč 9đ…Æ‹E˃č 9đ…Č‹E‹x0;}ŧ„‹E}ԃė˙u´˙pWčė:ū˙X‹EŧZWƒĀPčũ@ū˙‹Eԃăč 9đ…”‹Eƒė Æ@Pčl8ū˙ƒÄ…‰Į„…ū˙˙ƒ˙˙hHPj˙uĀč)1ū˙‹ŗ°ū˙˙ƒûū˙ƒÄ jPVčGū˙ƒîúū˙ƒÄ jPVč˙Fū˙ZYWVčF-ū˙X˙uĀčÍDū˙ƒÄé+ū˙˙t&ƒ˙˙h<PEäjP‰EĀčÆ0ū˙‹ŗ°ū˙˙ƒŌúū˙ƒÄ jPVčŽFū˙ƒîúū˙ƒÄ jPVčœFū˙XZWVčã,ū˙X˙uĀčjDū˙ƒÄéęũ˙˙f‰Á‹Eŧ;A4„ˇ…Āt'ƒė˙uPč"3ū˙YX‹EƒĀPGPč3ū˙‹EƒÄ‹x0‹EƒĮ‰x0ƒė ˙uč?ū˙ƒÄéqũ˙˙včķSū˙éū˙˙ļ‹U´čāSū˙é3ū˙˙v‹UĀčĐSū˙é1ū˙˙v‹UĀčĀSū˙é/ū˙˙v‹UĀč°Sū˙é-ū˙˙v‹UĀč Sū˙é+ū˙˙v‹UĀčSū˙é_ū˙˙‹Eƒė˙u˙uŧƒĀ,PčÖAū˙ƒÄé`˙˙˙‰Į‹E⋺”˙˙˙ƒč 9đtUäčTSū˙‹E؃č 9đtUÔčBSū˙‹EЃč 9đtUÔč0Sū˙‹E˃č 9đtUÔčSū˙ƒė ˙uč#>ū˙‰<$čÛCū˙ƒė ˙u‰ÆčCū˙‰4$čÆCū˙‰Eŧ‹ƒč 9đt‹UĀčâRū˙‹}ŧëŋƒė ˙u‰ÆčāBū˙‰4$č˜Cū˙‰ĮëωĮ‹ŗ”˙˙˙늉Į‹ŗ”˙˙˙ék˙˙˙‰Į‹ŗ”˙˙˙éL˙˙˙‰Į‹E܃č 9đ„<˙˙˙‹U´čˆRū˙é/˙˙˙‰Į‹Eäƒč 9đtŲ‹U´čoRū˙ëΉĮ‹Eԃč 9đ„?˙˙˙‹UĀčURū˙é2˙˙˙U‰åWVSč•Iū˙ÃĨĖƒė,‹u‹ģ”˙˙˙‹–„G …Ō‰EätKƒ‡˙˙ƒėjPEäP‰EÔč;>ū˙‹ļ„ƒÄƒÆƒė˙u ˙uÔVčđBū˙‹EäƒÄƒč 9øuCeô[^_]Ív‹†€…Āt>ƒ,˙˙ƒėj PEäP‰EÔčæ=ū˙‹ļ€ƒÄƒÆ8느´&Uãč˜Qū˙eô[^_]̓!˙˙ƒėPEäP‰EÔčz,ū˙ƒÄÆˆém˙˙˙‰Æ‹Eäƒč 9øtUãčXQū˙ƒė VčBū˙´&ŧ'U‰åWVSuāč‚Hū˙Ã’˃ė$˙u Vč0ū˙YEä_˙uPč0ū˙X‹EZV˙p$č”=ū˙‹E䋺”˙˙˙ƒÄƒč 9đu‹Eāƒč 9đu'eô[^_]Í´&UßčĐPū˙‹Eāƒč 9đtߍļUßč¸Pū˙eô[^_]ÉƋEāƒč ;ƒ”˙˙˙tUßč˜Pū˙ƒė Vč_Aū˙ƒė ‰ĮVč´1ū˙‰<$čLAū˙ļŋSčēGū˙ÃĘĘƒėčL)ū˙ƒė˙t$˙t$Pčk8ū˙ƒÄ[ÍļU‰åWVSEÜč‚Gū˙Ã’Ęƒė8‰Į‰EÔPčnAū˙X‹EÜZ˙u ƒĀPč(ū˙YEā^WPč1Aū˙XuäEÚZP˙uāVč5ū˙Y_V˙uč„1ū˙‹Eä‹ģ”˙˙˙ƒÄƒč 9øuQ‹Eāƒč 9øu7‹U܅Ōt$ƒė jčæ5ū˙ƒÄ„Āt‹E܅Āt ƒė ‹P˙RƒÄeô[^_]Ít&‰ōč‰Oū˙ëĀ´&UÛčxOū˙ëĨ‰Æ‹Eä‹ģ”˙˙˙ƒč 9øtUÛč\Oū˙‹Eāƒč 9øtUÛčJOū˙PPj˙uÔčž,ū˙‰4$č@ū˙‰Æ‹ģ”˙˙˙ëЉÆëې´&U‰åWVSčeFū˙ÃuɃė,č÷'ū˙‹@$‹€‹¸„‹R ‹ ‹Q‹q‹O‰uЉUĖ9Ņ‹w‰MÔ„ļčQ(ū˙‹UĖ9”ˆUĖčA(ū˙‹MÔļUĖ9Á”ĀЈEÔ„Ú„Ō…Â‰uԋuЋ}äƒė W‰EĐčÛ?ū˙‹M䍃¨ ˙˙ƒÄ j?PAPčŖ@ū˙‹M䍃4˙˙ƒÄ j:PAPč‹@ū˙‹M䍃‰˙˙ƒÄ jPAPčs@ū˙‹EЃÄ…Ā„%‹Eäƒė˙uЃĀPč“.ū˙ƒô˙ū˙ƒÄƒėjP‹EäƒĀPč8@ū˙ƒŅ˙˙ƒÄ j‰EĐP‹EäƒĀPč@ū˙ƒÄ…ö„‹EäƒėVƒĀPčB.ū˙ƒĄ˙˙ƒÄƒėjP‹EäƒĀPčį?ū˙‹EäƒÄ j˙uЃĀPčĶ?ū˙‹MԃÄ…É„Ĩ‹Eäƒė˙uԃĀPčķ-ū˙ƒp˙˙ƒÄƒėj&P‹EäƒĀPč˜?ū˙ƒ˜˙˙ƒÄ j=P‹EäƒĀPč€?ū˙ƒŋ˙˙ƒÄ jP‹EäƒĀPčh?ū˙ƒ‚˙˙uā‰$ƒvúū˙hšPjVčč)ū˙ƒÄWVčū&ū˙‰4$čÖ.ū˙XZjWč|*ū˙ÆEԃÄļEԍeô[^_]Éöŧ'‹EЉEÔé9ū˙˙t&‹}äƒė W‰EĖč>ū˙‹M䍃¨ ˙˙ƒÄ j?PAPč×>ū˙‹M䍃č ˙˙ƒÄ jPAPčŋ>ū˙‹E˃Ä…Ā„ņ‹Eäƒė˙u˃ĀPčß,ū˙ƒô˙ū˙ƒÄƒėjP‹EäƒĀPč„>ū˙ƒÅ˙˙ƒÄ jP‹EäƒĀPčl>ū˙‹EЃÄ…Ā„ž‹Eäƒė˙uЃĀPčŒ,ū˙ƒ×˙˙ƒÄƒėj P‹EäƒĀPč1>ū˙ƒÄ…ö„F‹EäƒėVƒĀPčV,ū˙ƒSũū˙ƒÄƒėjP‹EäƒĀPčû=ū˙ƒØ˙˙ƒÄ j>P‹EäƒĀPčã=ū˙ƒ˙˙ƒÄ j=P‹EäƒĀPčË=ū˙ƒX˙˙ƒÄ j>P‹EäƒĀPčŗ=ū˙ƒ˜˙˙ƒÄ j:P‹EäƒĀPč›=ū˙ƒ‚˙˙uā‰$ƒvúū˙hÅPjVč(ū˙ƒÄWVč1%ū˙‰4$č -ū˙Y^jWč¯(ū˙ļEԃčeô[^_]ÃÆEÔļEԍeô[^_]̓/øū˙ƒėP‹EäƒĀPčj+ū˙éŌü˙˙t&ƒ/øū˙ƒėP‹EäƒĀPčJ+ū˙éRũ˙˙t&ƒ/øū˙ƒėP‹EäƒĀPč*+ū˙éãü˙˙t&ƒ/øū˙ƒėP‹EäƒĀPč +ū˙é¯ū˙˙t&ƒ/øū˙ƒėP‹EäƒĀPčę*ū˙éū˙˙t&ƒ/øū˙ƒėP‹EäƒĀPčĘ*ū˙é9ū˙˙ƒė ‰EÔVč,ū˙‹uԃÄPPjWčš'ū˙‰4$č;ū˙‰ÆRRjWčĨ'ū˙‰4$čí:ū˙ƒė ‰EÔVčá+ū˙‹uԃÄëډÆët&U‰åWVSčEAū˙ÃUăėH‹} Wčc:ū˙‹M‰‰<$čö.ū˙P ‰$‰UÄčØ2ū˙‹Uĉƍƒâ˙˙WPRVčÔ9ū˙‹EƒÄjVƒĀPčr,ū˙ƒÄ‹M…Ā”Ā„ĀˆAtP€?ƒm˙˙EĮƒėjP‰ČƒĀ(PčC,ū˙ƒÄ‹M…Ā”ĀĮEä„ĀˆEāˆAt"ƒė Včž5ū˙ƒÄeô[^_]ÍvÆEāĮEäE܃ė P‰EÄčv:ū˙‹M܍ƒé˙˙ƒÄ jPAPč>;ū˙‰<$č&.ū˙‹MÜƒÄ PWAPč%;ū˙‹M܍ƒÔ˙˙ƒÄ j3PAPč ;ū˙“øū˙Eԉ$“ū˙˙R“˙˙RUāRPčš*ū˙ƒŖûū˙}؃Ä˙uÔhĀPjWčl%ū˙ƒÄ˙uÄWč€"ū˙‰<$čX*ū˙‹Eԃăč ;ƒ”˙˙˙…cƒėj˙uÄčæ%ū˙‹MäƒÄ…É„˙˙˙ƒė jč~.ū˙ƒÄ„Ā„ėū˙˙‹}ä…˙„áū˙˙‹ƒč ;ƒ”˙˙˙u+ƒė Wčĸ#ū˙ƒÄéÃū˙˙vŧ'‰úč Hū˙딍´&‹UÄčøGū˙ëËƒė ‰ÆWčģ)ū˙ƒÄ‹Eԃč ;ƒ”˙˙˙tUĶčŌGū˙RRj˙uÄčF%ū˙ƒÄPPEäjPč–"ū˙‰4$č~8ū˙‰Æë‰ÆëԉÆëßfU‰åVSEōuôčā>ū˙ÃđÁƒėPƒTũū˙PVč-ū˙ƒÄča ū˙ƒėV˙u j˙j˙uPčũ/ū˙‹EôƒÄ ƒč ;ƒ”˙˙˙u eø[^]Ѝt&Uķč8Gū˙eø[^]ÉƋEôƒč ;ƒ”˙˙˙tUķčGū˙ƒė Včā7ū˙WVSčX>ū˙ÃhÁč]'ū˙„Āu [^_Ѝt&čÛū˙‹x$ƒė ŗ ü˙Wčš"ū˙‹ƒÄ‹R 9ō…‰ƒ˙˙Pjj ˙t$čU2ū˙ƒÄč)ū˙„Āt9ƒė Wč€"ū˙‹ƒÄ‹R 9ōudƒ$˙˙Pjj ˙t$č 2ū˙ƒÄ[^_Éöŧ'ƒė WčG"ū˙‹ƒÄ‹R 9ōu;ƒ˙˙Pjj˙t$čį1ū˙ƒÄë™fƒė P˙ԃÄéi˙˙˙fƒė P˙ԃÄ두t&ƒė P˙ԃÄëēt&UWVSčW=ū˙ÃgĀƒė‹t$0€~u ƒÄ[^_]Ít&čĶū˙‹h$‰ĩ„čÅū˙ƒė Pč4ū˙‰$č¤4ū˙‰ĮXZ‹VW˙PƒÄča0ū˙‰T$‰$ƒė Uč!ū˙‹‹ ü˙ƒÄ‰L$ ‹R 9Ę…§ƒ˙˙Pjj ˙včÔ,ū˙‰D$ƒÄ…Āt čÔ'ū˙„Āthƒė Uč7!ū˙‹ƒÄ‹R ;T$ uy‹ƒL˙˙˙‹/˙˙1ŌQRP˙t$čĪ0ū˙ƒÄč×/ū˙+$T$ƒė‰FX‹‰V\VW˙P$ƒÄĮ…„ƒÄ[^_]Ívƒė ˙t$čŦ-ū˙ƒÄ뇍´&ƒė P˙ԃÄéK˙˙˙fƒė P˙ԃÄéy˙˙˙fUWVSč<ū˙Ãŋƒė‹t$0€~,u ƒÄ[^_]Ít&čƒū˙‹@$‰°€‰D$‰Åčoū˙ƒė PčÆ2ū˙‰$čN3ū˙Y‰ĮX‹VW˙P‰,$č; ū˙‹‹ ü˙ƒÄ‰L$ ‹R 9Ę…Á‹ƒ,˙˙˙‹M˙˙1Ō1íQRPVčh(ū˙ƒÄčĐ.ū˙‰$‰T$덴&ƒėUVƒÅčC6ū˙‰$čģū˙ƒÄƒė Včū˙ƒÄ9Å|Øč“.ū˙+$T$ƒė ‰F0‰V4˙t$čĒū˙‹ƒÄ‹R ;T$ uL‹ƒđū˙˙‹]˙˙1ŌQRPVčå'ū˙X‹ZVW˙P(‹D$ƒÄĮ€€ƒÄ[^_]Ívƒė P˙ԃÄé1˙˙˙fƒė P˙ԃÄ느t&U‰åWVSčĨ:ū˙ÃĩŊƒė\‹u‹ƒpū˙˙‹8…˙„­‹ƒū˙˙ļ„Āt eô[^_]Ít&ƒė Včį5ū˙ƒÄčO*ū˙‹žø…˙•Āƒė‰ĮļĀPƒ$˙˙Pƒ$˙˙Pč(3ū˙ZƒđYļĀPVčÉ&ū˙‰Eŧ‹ƒh˙˙˙ƒÄļ„Ā…‹“t˙˙˙1Ā€:t*‹ƒ„˙˙˙‹…Ā„ H˙ē;Ƨ‰Č÷âÁęiŸ†)ÁA‰†ā†Ėƒė PčV1ū˙ƒÄ‰EĖč-ū˙‰–ė‹U˃뉆č‹˙vR˙P‰øƒÄ„Ā…Ķ‹ƒ°˙˙˙‹‰Â‰E´Áę…‰U˜„™ÆEģĮEАt&‹~X‹FT9Įt!‰Eԍv‹Eԃė ˙0čK2ū˙ƒEԃċEÔ9Įuåč˜,ū˙‹Mŧ‰E‰UąÉŽw‹ƒt˙˙˙€8…x‹}˃ė‹˙uĐ˙vW˙P X‹Z˙vW˙P‹FL‹~HƒÄ9øt>‰EÔë‰öŧ'ƒĮ9}Ôt(‹‹‹@;ƒŦ˙˙˙téƒė ƒĮR˙ЃÄ9}Ôuā´&‹M˃ė‹˙vQ˙PƒÄčš#ū˙„ĀuF1˙ë21Ō…˙x‹N`‹Fd)ČÁø9Į} ‹ š…Éx‹FT‹ˆƒė ƒĮRčâ0ū˙ƒÄƒė VčĻ.ū˙ƒÄ9Į|ŋ‹U˃ė‹˙vR˙P,‹FH‹~LƒÄ‹‹Œ˙˙˙9øt=‰EÔ됍´&ƒī9}Ôt(‹Wü‹‹@ 9Čtėƒė ‰MȃīR˙ЃÄ9}ԋMČuŨt&‹M˃ė‹˙vQ˙P0ƒÄëAƒ(˙˙ƒė Pčũ-ū˙ƒÄeô1Ā[^_]ÃÆE˜ĮE´é8ū˙˙‹M˃ė‹˙uĐ˙vQ˙P ƒÄčö*ū˙+EĀ‹MĖUăė‰†đ‹‰–ô˙uĐ˙vQ˙P4‰4$čš,ū˙ƒÄ…ĀŽŸÆEģƒė Včb%ū˙‹ƒt˙˙˙ƒÄ€8uDƒEĐ‹EĐ9E´…Ėũ˙˙€}˜…Âũ˙˙ļEģƒđˆEԋE˃ė‹˙vP˙R8ļEԃčeô[^_]Ãf‹žāƒė G˙=ž†–ĀļĀPčÃ%ū˙ƒÄ„ĀtYƒĮ¸˙Ÿ†Oø‰žāé|˙˙˙†ˆƒė Pč1ū˙ƒÄ„Ā…G˙˙˙éF˙˙˙‹†āƒė ‰†äVčÛ-ū˙ƒÄékũ˙˙ƒˇúū˙h˜PEäjP‰EÔčIū˙Xƒ”˙˙ZP˙ŗ°ū˙˙čuū˙Z“p˙˙YRPčfū˙ZYWPčmū˙Z“…˙˙YRPčNū˙ZYhŸ†PčQū˙Z“Tûū˙YRPč2ū˙Y˙uÔčÉ.ū˙ƒÄé%˙˙˙ƒė ˆEÔVčU#ū˙ƒÄļEÔémû˙˙čD)ū˙éęû˙˙¸é˛ū˙˙ƒė ˙uԉÆčˆ.ū˙‰4$č@/ū˙U‰åWVSčĩ5ū˙ÃŸƒė ‹ƒtū˙˙‹‹@ô…Āt]1˙‹EŗĖ˙˙1Ō‹H$‹ƒX˙˙˙‹ƒ˜˙˙˙VRPQčū˙ƒđƒÄ…˙ļđt€?t ƒė Wč¤'ū˙ƒÄeô‰đ[^_]Í´&ƒ˜˙˙ƒė Pč1ū˙ƒÄ…‰Įt‹€8tˆƒųū˙ƒėPWč#ū˙ƒÄ‰ÆPƒ7øū˙jjPč­&ū˙‰4$č…!ū˙ƒÄéR˙˙˙…˙‰Æt€?t ƒė Wč)'ū˙ƒÄƒė VčM.ū˙ļŋU‰åWVSčĩ4ū˙ÃŎƒėH‹EƒĀP‰EĖč}'ū˙ƒÄ…‰EÔ…¯čŠ/ū˙‹Uƒė ‰B ‹B$ÆB˙°‰EČčüū˙ƒÄ…Ā„Aƒė Pč¸"ū˙ƒĀƒÄ‰EЋMЋA;A„€…Āt'‹M ƒėƒĀ‹‰Pø‹Q‰PüQRPčžū˙‹EЃÄ‹@‹MĐƒĀ ‰A‹Eƒė Æ@˙uĖčúū˙ƒÄ…‰EÔupeô[^_]Ѝ´&ƒ˙˙}äh<PjWčŠū˙‹ŗ°ū˙˙ƒŌúū˙ƒÄ jPVč‘.ū˙ƒîúū˙ƒÄ jPVč.ū˙XZ˙uÔVčÄū˙‰<$čL,ū˙ƒÄéõū˙˙t&ƒ˙˙}ähHPjWčIū˙‹ŗ°ū˙˙ƒûū˙ƒÄ jPVč1.ū˙ƒîúū˙ƒÄ jPVč.ū˙XZ˙uÔVčdū˙‰<$čė+ū˙ƒÄeô[^_]Ѓė jčö#ū˙‰Â‰Eċƒˆ˙˙˙ƒÄƒĀ‰B‰EЋEȋ°+°ĮBĮBĮB ‰đÁøiĀĢĒĒĒ…Ā…ŪĮEĀ‹EĀ‹MċUČƉA‰A‰q ‹Š‹˛‰MÔ9ņ„ë‰Įf…˙t‹ƒė‰‹F‰GFPGPčū˙ƒÄƒĮ ƒÆ 9uÔuԋEăė‰xP‹EČ˙°čÜ,ū˙ƒÄ…‰Æ„đũ˙˙ƒ˙˙}ähõPjWčū˙YXƒč˙˙P˙ŗ°ū˙˙č4ū˙YZ“îúū˙RPč%ū˙YZVPč,ū˙‰<$č´*ū˙ƒÄéũ˙˙t&=UUU‡‰ƒė Vč´"ū˙‰EƒÄé ˙˙˙‰öŧ'ƒė˙u P˙uĐč!ū˙ƒÄéũ˙˙‹}Āé=˙˙˙ƒė ‰ÆWčV*ū˙‰4$č+ū˙ƒė ‰ÆWčC*ū˙‰4$čû*ū˙‰Æƒė ˙uĖč.%ū˙‰4$čæ*ū˙‰Æƒė ˙uÄč‰ū˙ƒÄëÛč(ū˙ƒė ‰ÆWč*ū˙ƒÄëÆƒė PčV)ū˙XYW˙uĀč[!ū˙ƒÄčSū˙‰Æčŧ'ū˙‹Eċ@…Ātރė Pč9ū˙ƒÄ렍t&U‰åWVS}Øčō0ū˙Ã´ƒė4˙u‹ŗ”˙˙˙WF ‰Eä‹E ‰E܋E‰Eāč¨*ū˙Eä‰<$Pč,%ū˙‹E؃ăč 9đu/čJū˙U܃ėRPčMū˙‹EäƒÄƒč 9đu eô[^_]Ѝ´&U×č(9ū˙ëĮļ‰úč9ū˙eô[^_]ÉĮ‹Eäƒč 9đtU×čũ8ū˙ƒė WčÄ)ū˙‰Į‹E؃č 9đtŲU×čā8ū˙ëĪ´&ŧ'U‰åWVSč0ū˙Ã%ŗƒė,‹E‹} ‹p;pt^…ötA‹ƒė‰GPFPč†ū˙‹G‰FYXG PF Pčqū˙XFƒĮZWPčbū˙‹EƒÄ‹p‹EƒÆ‰peô[^_]Ѝ´&ƒėWV˙uč“ū˙ƒÄëŪ‰Į‹ƒ”˙˙˙‰EԋFƒč ;EÔtUįč 8ū˙ƒė Wčį(ū˙‰Į‹F ‹‹”˙˙˙ƒč ‰MÔ9ČtĪUįčú7ū˙ëՍ´&Sč:/ū˙ÃJ˛ƒė˙t$‹D$˙p čū˙ƒÄ[ÍļŋU‰åWVSč/ū˙Ã˛ƒė,‹E‹} ‹p$;p(t^…ötA‹ƒė‰GPFPčvū˙‹G‰FYXG PF Pčaū˙XFƒĮZWPčRū˙‹EƒÄ‹p$‹EƒÆ‰p$eô[^_]Ѝ´&‹EƒėWVƒĀ Pčū˙ƒÄëډĮ‹ƒ”˙˙˙‰EԋFƒč ;EÔtUįč 7ū˙ƒė WčĶ'ū˙‰Į‹F ‹‹”˙˙˙ƒč ‰MÔ9ČtĪUįčæ6ū˙ëōt&WVS‹|$‹t$č .ū˙Ã0ąƒė ˙wčī$ū˙ZYVPčFū˙‹Gˉ$č†%ū˙_Z‹VP˙R ƒÄ[^_ÃfffļD$ÃfffffķÃfffffffƒė ‹D$…Āt ƒė ‹P˙RƒÄƒÄ Ãffƒė ‹D$…Āt ƒė ‹P˙RƒÄƒÄ Ãff1ĀÃffffffƒė ‹D$˙P$ƒÄ Ãfƒė ‹D$˙P(ƒÄ ÃfķÃfffffffķÃfffffffķÃfffffff1ĀÃffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffķÃfffffffSčŠ+ū˙ÃšŽƒė˙t$č¨ū˙ƒÄ[ÃfSčj+ū˙ÃzŽƒė˙t$čˆū˙ƒÄ[ÃfSčJ+ū˙ÃZŽƒė˙t$čhū˙ƒÄ[ÃfSč*+ū˙Ã:Žƒė˙t$čHū˙ƒÄ[ÃfSč +ū˙ÃŽƒė˙t$č(ū˙ƒÄ[ÃfSčę*ū˙Ãú­ƒė˙t$čū˙ƒÄ[ÃfSčĘ*ū˙ÃÚ­ƒė˙t$ččū˙ƒÄ[ÃfSčĒ*ū˙Ãē­ƒė˙t$čČū˙ƒÄ[ÃfSčŠ*ū˙Ãš­ƒė‹“l˙˙˙‹D$ƒÂ‰Pčŧū˙ƒÄ[ÃfffVSčY*ū˙Ãi­ƒė‹ƒl˙˙˙‹t$ƒĀ‰Vč‹ū˙‰4$čcū˙ƒÄ[^ÃffffffVSč*ū˙Ã)­ƒė‹ƒXū˙˙‹t$ ƒĀ‰‹Fƒč ;ƒ”˙˙˙uƒė Včū˙ƒÄ$[^Ít&T$č‡2ū˙ƒė Včū ū˙ƒÄ$[^ÃffffUWVSčˇ)ū˙ÃĮŦƒė,‹L$@‹ƒˆ˙˙˙‹y‹qƒĀ‰9÷tDD$‹Ģ”˙˙˙‰D$ ë t&ƒÆ 9÷t!‹Fƒč 9čtī‹T$ ƒÆ č2ū˙9÷u捴&‹L$@‹y…˙t ƒė Wčt ū˙ƒÄƒÄ,[^_]ÃffffUWVSč')ū˙Ã7Ŧƒė,‹L$@‹ƒˆ˙˙˙‹y‹qƒĀ‰9÷tDD$‹Ģ”˙˙˙‰D$ ë t&ƒÆ 9÷t!‹Fƒč 9čtī‹T$ ƒÆ čƒ1ū˙9÷u捴&‹L$@‹y…˙t‰L$ ƒė Wčā ū˙ƒÄ‹L$ ƒė QčĐ ū˙ƒÄ<[^_]ÃffffUWVSč‡(ū˙Ã—Ģƒė,‹D$@‹x‹09÷t7D$‹Ģ”˙˙˙‰D$ 됃Æ9÷t‹ƒč 9čtđ‹T$ ƒÆčô0ū˙9÷uį‹D$@‹8…˙t ƒė Wč] ū˙ƒÄƒÄ,[^_]ÃfVSč(ū˙Ã)Ģƒė‹“Xū˙˙‹D$ ƒÂ‰‹@Pô;“”˙˙˙u ƒÄ[^Ѝt&‹‹d˙˙˙…Ét&š˙˙˙˙đÁHü‰Č…ĀۃėD$PRčū˙ƒÄëȍv‹Hüq˙‰pü‰ČëŲfffffU‰åWVSč•'ū˙ÃĨĒƒė ‹}‹7‹G9Æt‹…Āt ‹ƒė P˙RƒÄƒÆ9wuæ‹…Āt ƒė Pč‡ ū˙ƒÄeô[^_]ÉƋ…Ōt ƒė Rčk ū˙ƒÄƒė Vč¯ ū˙fffffffWVSč'ū˙Ã(Ēƒė‹|$ ‹ŗ”˙˙˙‹Gƒč 9đu‹G ƒč 9đu)‹Gƒč 9đu7ƒÄ[^_ÍT$č‡/ū˙‹G ƒč 9đtܐt&T$čo/ū˙‹Gƒč 9đtΐt&T$čW/ū˙ƒÄ[^_ÃWVSč˜&ū˙Ã¨Šƒė‹|$ ‹ŗ”˙˙˙‹Gƒč 9đu‹ƒč 9đu"ƒÄ[^_ÍvT$č/ū˙‹ƒč 9đtäļT$č÷.ū˙ƒÄ[^_ÃVSč9&ū˙ÃIŠƒė‹ƒ`ū˙˙‹t$ ƒĀ‰‹F$ƒč ;ƒ”˙˙˙u#‹ƒ€˙˙˙ƒė ƒÆƒĀ‰FäVčëū˙ƒÄ$[^Ѝt&T$č—.ū˙ëŌffVSčŲ%ū˙Ãé¨ƒė‹ƒ`ū˙˙‹t$ ƒĀ‰‹F$ƒč ;ƒ”˙˙˙u+‹ƒ€˙˙˙ƒė ƒĀ‰FPčŒū˙‰4$čÄ ū˙ƒÄ$[^ÍļT$č/.ū˙ëĘffffffUWVSčg%ū˙Ãw¨ƒė‹t$0‹|$49>t3ƒė jč(ū˙ƒÄ„Āt ‹.…ít‹Eƒč ;ƒ”˙˙˙uƒė UčT ū˙ƒÄ‰>ƒÄ[^_]Í´&T$čˇ-ū˙ëØffU‰åWVSčõ$ū˙Ã¨ƒė‹u‹~…˙tREäƒė˙u Pčŗū˙‹}äWčšū˙ƒÄ PW˙vč ū˙‹EäƒÄƒč ;ƒ”˙˙˙u eô[^_]Ít&UãčH-ū˙eô[^_]Ãė jčfū˙‹‹”˙˙˙Q ‰ZYPFPč˙ū˙ƒÄ눉ƋEäƒč ;ƒ”˙˙˙tUãč-ū˙ƒė VčÉū˙ffffU‰åWVSč5$ū˙ÃE§ƒė,‹u‹} 9>tPƒė jčøū˙ƒÄ„Āt=‹…‰EÔt4‹@ …Āx ƒė Pčˆū˙ƒÄ‹Eԋ‰EЃč ;ƒ”˙˙˙u"ƒė ˙uÔčū˙ƒÄ‰>eô[^_]Ívŧ'Uįčh,ū˙ëԉƋEԋAô;ƒ”˙˙˙tUįčL,ū˙ƒė Včū˙fU‰åWVSč…#ū˙Ã•Ļƒė$‹u‹}˙u Vč ū˙‰<$č5ū˙ƒÄ PWVčĒū˙ƒÄeô‰đ[^_]‰Į‹Aô;ƒ”˙˙˙tUįčä+ū˙ƒė WčĢū˙fffffU‰åWVSč#ū˙Ã%Ļƒė8˙u ‹u‹}čÎū˙Y‰Á‹ƒ”˙˙˙Z‰MÔƒĀ ‰‹HôQVčĀū˙ƒÄ ˙uÔ˙u Vč!ū˙XZWVčhū˙ƒÄeô‰đ[^_]‰Į‹Aô;ƒ”˙˙˙tUįčR+ū˙ƒė Wčū˙ffffU‰åWVS`˙˙˙…,˙˙˙čy"ū˙Ã‰Ĩė‰… ˙˙˙‰˙˙˙QčKū˙‹ģdū˙˙‹ŗ˜ū˙˙ÆEÔĮEĐÆEÕĮE؍G‹~‹V ĮEÜĮE≅`˙˙˙ĮEä‹Gô‰Ŋ,˙˙˙‰•˙˙˙‰”,˙˙˙Į…0˙˙˙X‹… ˙˙˙GôZjPč˛ū˙YX‹F•4˙˙˙‰•˙˙˙Pô‰…4˙˙˙‰Đ‹V‰jPč‰ū˙‹F‹VŊ8˙˙˙‹@ô‰”,˙˙˙‹ƒPū˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙ƒĀ Į…L˙˙˙Į…P˙˙˙‰…,˙˙˙‹ƒPū˙˙ƒĀ4‰…`˙˙˙‹ƒPū˙˙ƒĀ ‰…4˙˙˙‹ƒ€˙˙˙ƒĀ‰…8˙˙˙…T˙˙˙‰$‰…˙˙˙č‡ū˙‹ƒ`ū˙˙Į…X˙˙˙ƒĀ‰…8˙˙˙‹ƒ”˙˙˙ƒĀ ‰…\˙˙˙XZW˙ĩ˙˙˙čąū˙‹E ƒÄ‹…Ā„1•'˙˙˙ƒėRP…(˙˙˙P‰…˙˙˙čū˙ZY˙ĩ˙˙˙˙ĩ˙˙˙čÁū˙‹…(˙˙˙ƒÄƒč ;ƒ”˙˙˙…ƒėW˙učmū˙‹ƒPū˙˙ƒÄ ƒĀ ‰…,˙˙˙‹ƒPū˙˙ƒĀ4‰…`˙˙˙‹ƒPū˙˙ƒĀ ‰…4˙˙˙‹ƒ`ū˙˙ƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ”˙˙˙…Š‹ƒ€˙˙˙ƒė ˙ĩ˙˙˙ƒĀ‰…8˙˙˙čüū˙‹F‹V‹@ô‰”,˙˙˙‹F‹V‰…4˙˙˙‹@ô‰”4˙˙˙‹F‹V ‰…,˙˙˙‹@ô‰”,˙˙˙‹ƒdū˙˙ƒĀ‰…`˙˙˙X˙ĩ˙˙˙čõū˙‹EƒÄeô[^_]t&ƒÆųū˙ƒėjP˙ĩ˙˙˙čiū˙ƒÄéøū˙˙•(˙˙˙č%(ū˙éG˙˙˙•&˙˙˙č(ū˙é×ū˙˙‰Æë,‰…˙˙˙ë:‰ÆëYë|‰Æ‹…(˙˙˙ƒč ;ƒ”˙˙˙t •&˙˙˙čā'ū˙ƒė ˙ĩ ˙˙˙čRū˙‰4$čšū˙ƒė Wčū˙_XFP˙ĩ ˙˙˙č`ū˙‹ĩ˙˙˙ƒÄ‹ƒdū˙˙ƒė ˙ĩ˙˙˙ƒĀ‰…`˙˙˙čū˙‰4$čRū˙‹Wô‹˙˙˙‰Æ‰Ŋ,˙˙˙‰Œ,˙˙˙ëÁffffU‰åWVS`˙˙˙…,˙˙˙č™ū˙ÃŠĄė‰… ˙˙˙‰˙˙˙Qčkū˙‹ģdū˙˙‹ŗ˜ū˙˙ÆEÔĮEĐÆEÕĮE؍G‹~‹V ĮEÜĮE≅`˙˙˙ĮEä‹Gô‰Ŋ,˙˙˙‰•˙˙˙‰”,˙˙˙Į…0˙˙˙X‹… ˙˙˙GôZjPčŌū˙YX‹F•4˙˙˙‰•˙˙˙Pô‰…4˙˙˙‰Đ‹V‰jPčŠū˙‹F‹ģPū˙˙‹V‹@ô‰”,˙˙˙G Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙‰…,˙˙˙G4Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙‰…`˙˙˙G ‰…4˙˙˙‹ƒ€˙˙˙ƒĀ‰…8˙˙˙…T˙˙˙‰$‰…˙˙˙čš ū˙‹ƒ`ū˙˙Į…X˙˙˙ƒĀ‰…8˙˙˙‹ƒ”˙˙˙ƒĀ ‰…\˙˙˙X…8˙˙˙ZP˙ĩ˙˙˙‰…˙˙˙č×ū˙‹E ƒÄ‹…Ā„'•'˙˙˙ƒėRP…(˙˙˙P‰…˙˙˙čjū˙XZ˙ĩ˙˙˙˙ĩ˙˙˙č§ū˙‹…(˙˙˙ƒÄPô;“˙˙˙…ƒė˙ĩ˙˙˙˙učŽū˙G ƒÄ ‰…,˙˙˙G4‰…`˙˙˙G ‰…4˙˙˙‹ƒ`ū˙˙ƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ”˙˙˙…Ŧ‹ƒ€˙˙˙ƒė ˙ĩ˙˙˙ƒĀ‰…8˙˙˙č/ū˙‹F‹V‹@ô‰”,˙˙˙‹F‹V‰…4˙˙˙‹@ô‰”4˙˙˙‹F‹V ‰…,˙˙˙‹@ô‰”,˙˙˙‹ƒdū˙˙ƒĀ‰…`˙˙˙X˙ĩ˙˙˙č(ū˙‹EƒÄeô[^_]´&ƒÆųū˙ƒėjP˙ĩ˙˙˙č™ū˙ƒÄé˙˙˙•(˙˙˙čU$ū˙éD˙˙˙‹‹d˙˙˙…Ét&š˙˙˙˙đÁHü‰Č…ĀĶū˙˙…&˙˙˙ƒėPRčr ū˙뷋Hü‰˙˙˙ƒé‰Hü‹˙˙˙‰Čë͉ĮëëU‰Æëk‰Æë(‰Æëtƒė ˙ĩ˙˙˙č§ū˙YXF‰ūP˙ĩ ˙˙˙č„ū˙ƒÄ‹ƒdū˙˙ƒė ˙ĩ˙˙˙ƒĀ‰…`˙˙˙čDū˙‰4$č|ū˙‹Wô‹˙˙˙‰Æ‰Ŋ,˙˙˙‰Œ,˙˙˙ëÁ‹(˙˙˙Aô;ƒ˙˙˙uƒė ˙ĩ ˙˙˙čķū˙‰4$č;ū˙ƒģd˙˙˙yütƒĘ˙đÁ…ŌĶRR•&˙˙˙RPč•ū˙ƒÄëŋ‹Qüz˙‰yüëŨffU‰åWVSčuū˙Ã…ƒė$‹u˙u Včū˙XZ˙uVčõū˙ƒÄeô‰đ[^_]‰Į‹Aô;ƒ”˙˙˙tUįčß"ū˙ƒė WčĻū˙fffU‰åWVSčū˙Ã%ƒė0‹E‹u j‰Į‰EЍƒäųū˙PV‰EÔčĪū˙‰øƒÄ<\ļø‡§‹„ģĖ$˙˙Ø˙āt&ƒ’ųū˙ƒėjPVčžū˙ƒÄvƒėj˙uÔVčŠū˙ƒÄ ƒ˙˙jPVčxū˙XZWVčŋúũ˙ļEЃÄƒč<‡íƒn˙˙ƒėjPVčKū˙ƒÄeô[^_]̓6øū˙ƒėjPVč.ū˙ƒÄ j˙uÔVč ū˙ƒÄëĶvƒ•ųū˙ƒėjPVčū˙ƒÄéf˙˙˙ļƒ˜ųū˙ƒėjPVčæū˙ƒÄéF˙˙˙ļƒĄųū˙ƒėjPVčÆū˙ƒÄé&˙˙˙ļƒøū˙ƒėjPVčĻū˙ƒÄé˙˙˙ļƒ¤ųū˙ƒėjPVč†ū˙ƒÄéæū˙˙ļƒ›ųū˙ƒėjPVčfū˙ƒÄéÆū˙˙ļƒžųū˙ƒėjPVčFū˙ƒÄéĻū˙˙ļƒųū˙ƒėjPVč&ū˙ƒÄé†ū˙˙ļG⃸^† EāƒėWP‰EĖčüū˙EäY‰Â‰EČX‹EĖPƒ§ųū˙PRč ū˙X‹EäZ˙pôPVčŌū˙‹E䋋”˙˙˙ƒÄƒč 9Č…¨‹Eāƒč 9Č…ƒėj˙uÔVčŸū˙ƒÄ€}Đ„Jū˙˙Pƒ˙˙jPVč‚ū˙XZWVčÉøũ˙ƒÄéū˙˙EäƒėWPčcū˙ƒŪųū˙Y_jPVčRū˙‹EäƒÄ ˙pôPVčBū˙‹EäƒÄƒč ;ƒ”˙˙˙„Đũ˙˙Ußčõū˙éÃũ˙˙‹UČččū˙éf˙˙˙U߉MĖčØū˙‹MĖéE˙˙˙ļEЃėjˆEāEāPVčęū˙ƒÄ j˙uÔVčÜū˙ƒÄ€}Đ„‡ũ˙˙QéBũ˙˙‰Æë ‰Æ‹‹”˙˙˙ë‹E䋋”˙˙˙ƒč 9ČtU߉MÔčpū˙‹MԋEāƒč 9Čuƒė Vč*ū˙‰Æ‹Eäƒč ;ƒ”˙˙˙tįUßčBū˙ëŨU‰åWVSč…ū˙Ã•™ƒė0‹u ‹}ƒäųū˙jPV‰EÔčDū˙‰øƒÄžĀ‰EЉø<\‡§ļĀ‹„ƒ@&˙˙Ø˙āƒ’ųū˙ƒėjPVčū˙ƒÄvƒėj˙uÔVčúū˙ƒÄ ƒ˙˙jPVččū˙XZ˙uĐVč-÷ũ˙G˙ƒÄ<‡˙ƒn˙˙ƒėjPVčŊū˙ƒÄeô[^_]Ãfƒ6øū˙ƒėjPVčžū˙ƒÄ j˙uÔVčū˙ƒÄëŅvƒ•ųū˙ƒėjPVčvū˙ƒÄéf˙˙˙ļƒ˜ųū˙ƒėjPVčVū˙ƒÄéF˙˙˙ļƒĄųū˙ƒėjPVč6ū˙ƒÄé&˙˙˙ļƒøū˙ƒėjPVčū˙ƒÄé˙˙˙ļƒ¤ųū˙ƒėjPVčöū˙ƒÄéæū˙˙ļƒ›ųū˙ƒėjPVčÖū˙ƒÄéÆū˙˙ļƒžųū˙ƒėjPVčļū˙ƒÄéĻū˙˙ļƒųū˙ƒėjPVč–ū˙ƒÄé†ū˙˙ļ‹EĐƒč ƒø^†!Eā‰ųƒėļŅRP‰EĖčdū˙Eä‰Á‰EČX‹EĖZPƒ§ųū˙PQčyū˙X‹EäZ˙pôPVč:ū˙‹E䋋”˙˙˙ƒÄƒč 9Č…ĩ‹Eāƒč 9Č…šƒėj˙uÔVčū˙‰øƒÄ„Ā„@ū˙˙ƒ˙˙WjPVčęū˙XZ˙uĐVč/õũ˙ƒÄéū˙˙´&Eä‰úƒėļúWPčžū˙ƒŪųū˙Y_jPVč­ū˙‹EäƒÄ ˙pôPVčū˙‹EäƒÄƒč ;ƒ”˙˙˙„šũ˙˙UßčPū˙éŦũ˙˙‹UČčCū˙éY˙˙˙U߉MĖč3ū˙‹MĖé8˙˙˙v‰øƒėˆEāEājPVčDū˙ƒÄ j˙uÔVč6ū˙‰øƒÄ„Ā„oũ˙˙Qé,ũ˙˙‰Æë ‰Æ‹‹”˙˙˙ë‹E䋋”˙˙˙ƒč 9ČtU߉MÔčĘū˙‹MԋEāƒč 9Čuƒė Vč„ ū˙‰Æ‹Eäƒč ;ƒ”˙˙˙tįUßčœū˙ëŨfffffU‰åWVSčÕū˙Ã啃ė0‹u ‹}ƒãųū˙jPVč— ū˙ƒÄ‰ō‰øč+rū˙‰Eԍƒäųū˙ƒėjPVčv ū˙ƒÄ…˙ueô[^_]Í´&ƒ˙˙ƒėjPVčN ū˙YXWVč•ķũ˙ƒÄƒ}ÔtG˙ƒøw$ƒn˙˙ƒėjPVč" ū˙ƒÄeô[^_]Í´&EäƒėWPč˙ũ˙XƒŪųū˙ZjPVčō ū˙‹EäƒÄ ˙pôPVčâ ū˙‹EäƒÄƒč ;ƒ”˙˙˙tUãč™ū˙듉ƋEäƒč ;ƒ”˙˙˙tUãčū˙ƒė VčF ū˙fffWVS‹t$č´ū˙ÃĔ‹|$9>t%ƒė jč|ū˙ƒÄ„Āt‹…Āt ƒė ‹P˙RƒÄ‰>[^_ÃffffffU‰åWVSEāčbū˙Ãr”ƒė8‹} ‰EÔP‹učJ ū˙‹EāƒÄ…˙P„™ƒė ‰UĐWčũūũ˙‹UĐƒÄ PWRč˙ ū˙‹FƒÄ…Ā„ĄEäƒė˙uÔPčâ ū˙‹}äWčÉūũ˙ƒÄ PW˙vč< ū˙‹EäƒÄƒč ;ƒ”˙˙˙u[‹Uā…Ōt$ƒė jčĒ˙ũ˙ƒÄ„Āt‹Eā…Āt ƒė ‹P˙RƒÄeô‰đ[^_]Íļ‹@ƒėPô‹BƒČPRč:ū˙éf˙˙˙t&Ußč(ū˙뛍ļƒė jčFū˙‹“”˙˙˙Y_ƒÂ ‰PFPčßķũ˙ƒÄé6˙˙˙‰Æë‰Æë‹Eäƒč ;ƒ”˙˙˙tUßčŲū˙PPj˙uÔčMöũ˙‰4$č• ū˙ffU‰åWVS}āčū˙Ã“ƒė8‹uWčđ ū˙‹E ƒÄ ‹˙pôP‹EāƒĀPč¸ ū˙‹NƒÄ…Ét~EäƒėWPčĄ ū˙‹EäP‰EÔč…ũũ˙ƒÄ P˙uÔ˙včöū˙‹EäƒÄƒč ;ƒ”˙˙˙u5‹Uā…Ōt$ƒė jčdūũ˙ƒÄ„Āt‹Eā…Āt ƒė ‹P˙RƒÄeô‰đ[^_]ÍUßčū˙ëÁļƒė jč&ū˙YZ‹“”˙˙˙ƒÂ ‰PFPčŋōũ˙ƒÄéY˙˙˙‰Æë‰Æ‹Eäƒč ;ƒ”˙˙˙tUßčģū˙PPjWč1õũ˙‰4$čyū˙ffffU‰åWVSEāčâū˙Ãō‘ƒė8‹} ‰EÔP‹učĘū˙‹EāƒÄ…˙P„™ƒė ‰UĐWč}üũ˙‹UĐƒÄ PWRč ū˙‹FƒÄ…Ā„ĄEäƒė˙uÔPčbū˙‹}äWčIüũ˙ƒÄ PW˙včŧū˙‹EäƒÄƒč ;ƒ”˙˙˙u[‹Uā…Ōt$ƒė jč*ũũ˙ƒÄ„Āt‹Eā…Āt ƒė ‹P˙RƒÄeô‰đ[^_]Íļ‹@ƒėPô‹BƒČPRčēū˙éf˙˙˙t&Ußč¨ū˙뛍ļƒė jčÆūũ˙‹“”˙˙˙Y_ƒÂ ‰PFPč_ņũ˙ƒÄé6˙˙˙‰Æë‰Æë‹Eäƒč ;ƒ”˙˙˙tUßčYū˙PPj˙uÔčÍķũ˙‰4$čū˙ffU‰åWVS}āč‚ ū˙Ã’ƒė8‹uWčpū˙X‹EāZ˙u ƒĀPčū˙‹NƒÄ…É„EäƒėWPč$ū˙‹EäP‰EÔčûũ˙ƒÄ P˙uÔ˙včyū˙‹EäƒÄƒč ;ƒ”˙˙˙u8‹Uā…Ōt$ƒė jčįûũ˙ƒÄ„Āt‹Eā…Āt ƒė ‹P˙RƒÄeô‰đ[^_]ÍvUßčˆū˙랍ļƒė jčĻũũ˙YZ‹“”˙˙˙ƒÂ ‰PFPč?đũ˙ƒÄéV˙˙˙‰Æë‰Æ‹Eäƒč ;ƒ”˙˙˙tUßč;ū˙PPjWčąōũ˙‰4$čųū˙ffffU‰åWVSEāčb ū˙Ãrƒė8‰EԋuPčMū˙‹E ƒÄ‹8…˙„ƒė Wčúũ˙ƒÄ P‹EāWƒĀPčū˙‹FƒÄ…Ā„ĨEäƒė˙uÔPčæū˙‹}äWčÍųũ˙ƒÄ PW˙vč@ū˙‹EäƒÄƒč ;ƒ”˙˙˙u_‹Uā…Ōt$ƒė jčŽúũ˙ƒÄ„Āt‹Eā…Āt ƒė ‹P˙RƒÄeô‰đ[^_]Ívŧ'ƒ/øū˙ƒėjP‹EāƒĀPčhū˙é`˙˙˙vUßč(ū˙뗍ļƒė jčFüũ˙‹“”˙˙˙Y_ƒÂ ‰PFPčßîũ˙ƒÄé2˙˙˙‰Æë‰Æë‹Eäƒč ;ƒ”˙˙˙tUßčŲū˙PPj˙uÔčMņũ˙‰4$č•ū˙ffU‰åWVSuäč ū˙ÃŽƒė(‹}Včđū˙X‹E Z˙0‹EäPRč ėũ˙YXVWč´ū˙‹UäƒÄ …Ōt$ƒė jč ųũ˙ƒÄ„Āt‹Eä…Āt ƒė ‹P˙RƒÄeô‰ø[^_]‰ĮPPjVčžđũ˙‰<$čū˙fffU1‰åWVSčs ū˙Ãƒƒė8‹uƒ~˙•ĀPč:ųũ˙ƒÄ„ĀuQƒˇúū˙}ähPPjWčīũ˙ƒŒ˙˙ƒÄ j P‹ƒ°ū˙˙P‰EÔčū˙ƒ°˙˙ƒÄ j5P˙uÔčíū˙‰<$čÅū˙ƒÄ‹E ƒė‹‹xôWP˙vč­īũ˙ƒÄ9Įtxƒˇúū˙}ähUPjWč¯îũ˙ƒč˙˙ƒÄ j&P‹ƒ°ū˙˙P‰EÔč”ū˙‹FƒÄ ˙pôP˙uÔč‚ū˙‰ÂƒV˙˙ƒÄ j‰UÔPRčkū˙‹F ƒÄ ˙pôP˙uÔčYū˙‰<$č1ū˙ƒÄeô[^_]ÉÆë‰Æëƒė Wčū˙‰4$čÍū˙ƒė Wčū˙‰4$čŧū˙ffffffU‰åWVSč% ū˙Ã5Œƒė8‹uVčķûũ˙ƒÄ…‰Įučū˙ÆF‰Feô[^_]Ãļƒ˙˙h<PEäjP‰EÔčļíũ˙ƒŌúū˙ƒÄ jP˙ŗ°ū˙˙čŸū˙ƒîúū˙ƒÄ jP˙ŗ°ū˙˙čˆū˙ZYW˙ŗ°ū˙˙čĘéũ˙X˙uÔčQū˙ƒÄ낉ƃė ˙uÔč?ū˙‰4$č÷ū˙fffU‰åWVSčeū˙Ãu‹ƒė8‹EÆ@PčOôũ˙ƒÄ…‰Æueô[^_]Ãļƒ˙˙hHPEäjP‰EÔčūėũ˙‹ģ°ū˙˙ƒûū˙ƒÄ jPWčæū˙ƒîúū˙ƒÄ jPWčÔū˙ZYVWčéũ˙X˙uÔčĸū˙ƒÄeô[^_]Éƃė ˙uÔčŠū˙‰4$čBū˙fU‰åWVSčĩū˙ÃŊƒė8˙učÄõũ˙ƒÄ…‰Æu eô[^_]Ívƒ˙˙hyPEäjP‰EÔčVėũ˙‹ģ°ū˙˙ƒ8˙˙ƒÄ jPWč>ū˙ƒîúū˙ƒÄ jPWč,ū˙ZYVWčsčũ˙X˙uÔčú˙ũ˙ƒÄeô[^_]Éƃė ˙uÔčâ˙ũ˙‰4$čšū˙fffffU‰åWVSčū˙ÃŠƒė8‹}‹G+Áø9E ‰EЋE ÷ĐžÂÁč!ĐPč¸õũ˙ƒÄ„Ā…Œƒˇúū˙h:PEäjP‰EÔč“ëũ˙‹ŗ°ū˙˙ƒX˙˙ƒÄ j.PVč{ū˙ƒûū˙ƒÄ jPVčiū˙YX˙u VčŽįũ˙‰Æƒ<ûū˙ƒÄ jPVčJū˙XZ˙uĐVčįũ˙“Tûū˙ƒÄ jRPč-ū˙Y˙uÔč˙ũ˙ƒÄƒė ‹EĐ9E‹užĀ1Ō9u žÂ!ĐPčõũ˙ƒÄ„Āt[‹u+u ‹Eƒū…ü˙˙˙~9‰Eԉ}ƒėV˙uƒîčņåũ˙‹}E ƒÄ‹UԃmÔ‹ʃū‹:‹‰8‰ u͍eô[^_]Ѝt&ƒˇúū˙h=PEäjP‰EÔč†ęũ˙‹ŗ°ū˙˙ƒˆ˙˙ƒÄ j.PVčnū˙ƒWûū˙ƒÄ jPVč\ū˙XZ˙uVčĄæũ˙‰Æƒuûū˙ƒÄ jPVč=ū˙YX˙u V肿ũ˙‰ÆƒQûū˙ƒÄ jPVčū˙XZ˙uĐVčcæũ˙Z“Tûū˙YRPčDîũ˙X˙uÔčÛũũ˙ƒÄéøū˙˙‰Æë‰Æëƒė ˙uÔčĀũũ˙‰4$čxūũ˙ƒė ˙uÔč­ũũ˙‰4$čeūũ˙ffU1‰åWVSčĶū˙Ã㇃ė(‹uƒ~˙•ĀPčšķũ˙ƒÄ„ĀuPƒˇúū˙}ähaPjWč|éũ˙ƒŒ˙˙ƒÄ j P˙ŗ°ū˙˙če˙ũ˙ƒ¸˙˙ƒÄ j@P˙ŗ°ū˙˙čN˙ũ˙‰<$č&ũũ˙ƒÄƒė ˙vččõũ˙ĮF˙˙˙˙ƒÄeô[^_]Éƃė Wčûüũ˙‰4$čŗũũ˙fU‰åWVSč%ū˙Ã5‡ƒė8‹E˙0čĸīũ˙ƒÄ…Āt ‹ƒė P˙RƒÄ‹Eƒė ˙0čÂúũ˙ƒÄ…‰Æt^ƒ˙˙}ähÎPjWč˛čũ˙ƒŠûū˙ƒÄ jP˙ŗ°ū˙˙č›ūũ˙ƒîúū˙ƒÄ jP˙ŗ°ū˙˙č„ūũ˙XZV˙ŗ°ū˙˙čÆäũ˙‰<$čNüũ˙ƒÄ‹E‹x‹p9÷tD‹‹”˙˙˙Eä‰EЉMÔë t&ƒÆ 9÷t!‹Fƒč ;EÔtî‹UĐƒÆ čû ū˙9÷u捴&‹E‹x…˙t ƒė Wč]įũ˙ƒÄeô[^_]ÉEÔë‰Æƒė WčŌûũ˙‰uԃÄ‹E‹p‹x9ūt1E㋋”˙˙˙‰EЋGƒč 9Čt‹UЉMĖčŽ ū˙‹M˃Į 9ūuá‹E‹p…öt ƒė Včņæũ˙ƒÄƒė ˙uÔč3üũ˙fU‰åWVSčĨū˙Ãĩ…ƒė8‹u˙6č"îũ˙ƒÄ…Āt ƒė ‹P˙RƒÄƒė ˙6čEųũ˙ƒÄ…‰Æu eô[^_]Ít&ƒ˙˙hÎPEäjP‰EÔč&įũ˙‹ģ°ū˙˙ƒŠûū˙ƒÄ jPWčũũ˙ƒîúū˙ƒÄ jPWčüüũ˙ZYVWčCãũ˙X˙uÔčĘúũ˙ƒÄeô[^_]Éƃė ˙uÔč˛úũ˙‰4$čjûũ˙fffffU‰åWVSčÕū˙Ã儃ė,‹E‹0‹Nô…É„„ļƒč0ƒø wyčÜáũ˙Į‰EԍEāƒėj PVč´ëũ˙‰Æ‹EāƒÄ‰×€8u5‹Eԋ…Ōu,ƒė jčRđũ˙ƒÄ„ĀtC‰đ™9×u,‹E ‰0¸ë"´&ƒė jč&đũ˙ƒÄ„ĀˆEĶtt&1Āeô[^_]ÍļÆEĶƒˇúū˙hPEäjP‰EÔčęåũ˙ƒŧ ˙˙ƒÄ j4P˙ŗ°ū˙˙čĶûũ˙X˙uÔčĒųũ˙ƒÄ€}Ķ…r˙˙˙ëŖ‰Æƒė ˙uÔčŽųũ˙‰4$čFúũ˙fffU‰åWVSčĩū˙ÃŃƒė,‹u‹ƒĐū˙˙ƒĀƒ~˙‰tvƒė jčnīũ˙ƒÄ„ĀuPƒˇúū˙}ähaPjWčPåũ˙ƒŒ˙˙ƒÄ j P˙ŗ°ū˙˙č9ûũ˙ƒ¸˙˙ƒÄ j@P˙ŗ°ū˙˙č"ûũ˙‰<$čúøũ˙ƒÄƒė ˙včŧņũ˙ƒÄĮF˙˙˙˙‹F ‹ģ”˙˙˙ƒč 9øu"‹Fƒč 9øueô[^_]ÍUäč¨ū˙eô[^_]ÍUäč˜ū˙ëԉEÔë‰EÔë ƒė W蓸ũ˙ƒÄ‹F ‹ģ”˙˙˙ƒč 9øtUãčhū˙‹Fƒč 9øtUãčVū˙ƒė ˙uÔčųũ˙fffffU‰åWVSč…˙ũ˙Ã•‚ƒė,‹u‹ƒĐū˙˙ƒĀƒ~˙‰tvƒė jč>îũ˙ƒÄ„ĀuPƒˇúū˙}ähaPjWč äũ˙ƒŒ˙˙ƒÄ j P˙ŗ°ū˙˙č úũ˙ƒ¸˙˙ƒÄ j@P˙ŗ°ū˙˙čōųũ˙‰<$čĘ÷ũ˙ƒÄƒė ˙včŒđũ˙ƒÄĮF˙˙˙˙‹F ‹ģ”˙˙˙ƒč 9øu2‹Fƒč 9øuƒė Vč˙âũ˙ƒÄeô[^_]Ít&Uäčhū˙ëŪļUäčXū˙ëĉEÔë‰EÔë ƒė WčS÷ũ˙ƒÄ‹F ‹ģ”˙˙˙ƒč 9øtUãč(ū˙‹Fƒč 9øtUãčū˙ƒė ˙uÔčÛ÷ũ˙fffffU‰åWVSčEūũ˙ÃUƒė8‹E‹“ˆū˙˙ƒĀƒÂ‰PüPčDėũ˙ƒÄ…‰Æu eô[^_]Ívƒ˙˙hyPEäjP‰EÔčÖâũ˙‹ģ°ū˙˙ƒ8˙˙ƒÄ jPWčžøũ˙ƒîúū˙ƒÄ jPWčŦøũ˙ZYVWčķŪũ˙X˙uÔčzöũ˙ƒÄeô[^_]Éƃė ˙uÔčböũ˙‰4$č÷ũ˙fffffU‰åWVSč…ũũ˙Ã•€ƒė8‹u‹ƒˆū˙˙ƒĀ‰FPč…ëũ˙ƒÄ…‰Įuƒė Včƒáũ˙ƒÄeô[^_]Ѝ´&ƒ˙˙hyPEäjP‰EÔčâũ˙ƒ8˙˙ƒÄ jP˙ŗ°ū˙˙čī÷ũ˙ƒîúū˙ƒÄ jP˙ŗ°ū˙˙čØ÷ũ˙ZYW˙ŗ°ū˙˙čŪũ˙X˙uÔčĄõũ˙ƒÄ뀉ƃė ˙uÔčõũ˙‰4$čGöũ˙fffU‰åWVSčĩüũ˙ÃŃė,‹u‹ƒD˙˙˙ƒĀ‰‹F…Ā„Ūƒė jčiëũ˙ƒÄ„„ɋv…ö„ž‹‹@;ƒôū˙˙…ē‹ƒĐū˙˙ƒĀƒ~˙‰tvƒė jč'ëũ˙ƒÄ„ĀuPƒˇúū˙}ähaPjWč áũ˙ƒŒ˙˙ƒÄ j P˙ŗ°ū˙˙čōöũ˙ƒ¸˙˙ƒÄ j@P˙ŗ°ū˙˙čÛöũ˙‰<$čŗôũ˙ƒÄƒė ˙včuíũ˙ƒÄĮF˙˙˙˙‹F ‹ģ”˙˙˙ƒč 9øuC‹Fƒč 9øu)ƒė Vččßũ˙ƒÄeô[^_]Ѝt&ƒė V˙ЃÄë萍t&Uäč@ū˙ë͍ļUäč0ū˙ëŗ‰EÔë‰EÔë ƒė Wč+ôũ˙ƒÄ‹F ‹ģ”˙˙˙ƒč 9øtUãčū˙‹Fƒč 9øtUãčîū˙ƒė ˙uÔčŗôũ˙fU‰åWVS}Üč"ûũ˙Ã2~ƒė4‹u‹‹@˙u W‰EÔčĨâũ˙ƒSũū˙ƒÄ jPWčCķũ˙ƒÄ‹EÔ;ƒ(˙˙˙…ƒė 1ƒ~˙•ĀPč¯éũ˙ƒÄ„ĀuPƒˇúū˙hPPEājP‰EÔčŽßũ˙‹ģ°ū˙˙ƒŒ˙˙ƒÄ j PWčvõũ˙ƒ°˙˙ƒÄ j5PWčdõũ˙Z˙uÔč;ķũ˙ƒÄ‹E܃ė‹xôWP˙vč%āũ˙ƒÄ9Įtrƒˇúū˙hUPEäjP‰EÔč$ßũ˙‹ģ°ū˙˙ƒč˙˙ƒÄ j&PWč õũ˙‹FƒÄ ˙pôPWčüôũ˙‰ĮƒV˙˙ƒÄ jPWččôũ˙‹F ƒÄ ˙pôPWčØôũ˙X˙uÔč¯ōũ˙ƒÄ‹E܃č ;ƒ”˙˙˙ueô[^_]Íļƒė‹EÔWV˙ĐëՍt&Uäčhū˙eô[^_]ÉÆë‰Æëƒė ˙uÔč]ōũ˙ƒÄ‹E܃č ;ƒ”˙˙˙tUÛč4ū˙ƒė Včûōũ˙‰Æë‰Æë‹E܃č ;ƒ”˙˙˙táUäč ū˙ë׃ė ˙uÔčōũ˙ƒÄëąfffffU‰åWVSuāč2ųũ˙ÃB|ƒė ‹E ‹xEŪPƒĪûū˙PVčbįũ˙YXVuäVčĻāũ˙‰<$čÎæũ˙ƒÄ PWVčCņũ˙X‹EZV˙pč…æũ˙‹Eä‹ģ”˙˙˙ƒÄƒč 9øu‹Eāƒč 9øu eô[^_]ÍUßčhū˙‹Eāƒč 9øtæļ‰ōčQū˙eô[^_]ÉƋģ”˙˙˙ë‰Æëëú‹Eä‹ģ”˙˙˙ƒč 9øtUßč!ū˙‹Eāƒč 9øtUßčū˙ƒė VčÖņũ˙fffU‰åWVSuäčBøũ˙ÃR{ƒė8˙u ‹}čîŪũ˙ƒÄ “7øū˙„Āƒč˙˙VDÂPEāP‰EÔč\æũ˙ƒéûū˙ƒÄ ˙uÔPVč ëũ˙‰4$˙wčŽåũ˙‹E䋋”˙˙˙ƒÄƒč ‰MÔ9Ču(‹Eāƒč ;EÔu5‹Gƒė ‹P˙R ƒÄeô[^_]ÍļUßčXū˙‹Eāƒč ;EÔtАt&‰ōčAū˙ë‰Ƌƒ”˙˙˙‰EÔë‰Æ‹Eä‹ģ”˙˙˙ƒč ‰}Ô9øtUßčū˙‹Eāƒč ;EÔtUßčū˙ƒė VčÉđũ˙ffffU‰åWVSč5÷ũ˙ÃEzƒėT‹} ƒTũū˙‹w‹Nô˙w…ÉDđEāP‰E°čŲãũ˙‹G}ԉEЍEЉ$W‰EŦčqŨũ˙Eĉ4$P‰E´č˛ãũ˙Xuȍƒüū˙Z˙u´PVčŨéũ˙‰4$uĖVčaŪũ˙ƒ!üū˙ƒÄ jPVč˙îũ˙EØƒÄ WVP‰Įč˙Øũ˙u܉<$Vč3Ūũ˙ƒ(üū˙ƒÄ j PVčŅîũ˙}äƒÄ ˙u°VWčŅØũ˙‹E‰<$˙pčäũ˙‹E䋺”˙˙˙ƒÄƒč 9đup‹E܃č 9đu~‹E؃č 9đ…ˆ‹E˃č 9đ…’‹Eȃč 9đ…œ‹Eăč 9đ…Ļ‹Eԃč 9đ…°‹Eāƒč 9đ…ēeô[^_]Ívŧ'UÃčˆūũ˙‹E܃č 9đtˆļ‰účqūũ˙‹E؃č 9đ„{˙˙˙v‰účYūũ˙‹E˃č 9đ„q˙˙˙v‰účAūũ˙‹Eȃč 9đ„g˙˙˙v‰úč)ūũ˙‹Eăč 9đ„]˙˙˙v‰účūũ˙‹Eԃč 9đ„S˙˙˙v‰účųũũ˙‹Eāƒč 9đ„I˙˙˙v‰účáũũ˙eô[^_]ÉĮ‹ŗ”˙˙˙ë‰Į‹ŗ”˙˙˙鄋E䋺”˙˙˙ƒč 9đtUÃčĒũũ˙‹E܃č 9đtUÃč˜ũũ˙‹E؃č 9đtUÃč†ũũ˙‹E˃č 9đtUÃčtũũ˙‹Eȃč 9đtUÃčbũũ˙‹Eăč 9đtUÃčPũũ˙‹Eԃč 9đtUÃč>ũũ˙‹Eāƒč 9đt‹UŦč,ũũ˙ƒė Wčķíũ˙‰Į‹ŗ”˙˙˙él˙˙˙‰Į‹E܋ŗ”˙˙˙ƒč 9đ„h˙˙˙Uäčøüũ˙é[˙˙˙‰Į‹ŗ”˙˙˙éN˙˙˙‰Į‹ŗ”˙˙˙éS˙˙˙‰Įë ‰Į‹ŗ”˙˙˙éT˙˙˙‹EĖ‹ŗ”˙˙˙ƒč 9đ„@˙˙˙UäčŦüũ˙é3˙˙˙‰Į‹ŗ”˙˙˙é8˙˙˙‰ĮéŅū˙˙fU‰åWVSčÕķũ˙Ãåvƒė,‹u‹ƒD˙˙˙‹VƒĀ‰…Ō„æƒė jč‰âũ˙ƒÄ„„ҋ~…˙„Æ‹‹@;ƒôū˙˙…Ō‹ƒĐū˙˙ƒĀƒ˙‰tzƒė jčGâũ˙ƒÄ„ĀuTƒˇúū˙haPEäjP‰EÔč&Øũ˙ƒŒ˙˙ƒÄ j P˙ŗ°ū˙˙čîũ˙ƒ¸˙˙ƒÄ j@P˙ŗ°ū˙˙čøíũ˙X˙uÔčĪëũ˙ƒÄƒė ˙wč‘äũ˙ƒÄĮG˙˙˙˙‹G ‹‹”˙˙˙ƒč ‰MÔ9ČuT‹Gƒč ;EÔu9ƒė Wč×ũ˙ƒÄƒė VčôÖũ˙ƒÄeô[^_]Éöŧ'ƒė W˙ЃÄëØt&UäčHûũ˙ëŊļUäč8ûũ˙ëĸ‰Æë‰Æëƒė ˙uÔč3ëũ˙ƒÄ‹G ‹“”˙˙˙ƒč ‰UÔ9ĐtUãčûũ˙‹Gƒč ;EÔtUãčōúũ˙ƒė Včšëũ˙ffffU‰åWVSE֍}Øčōũ˙Ã/uƒė@Pƒ2üū˙PWčXāũ˙‹EY‹p‹‹@‰EÄXW}ÜWčŽŲũ˙ƒSũū˙ƒÄ jPWč,ęũ˙ƒÄ‹EÄ;ƒ(˙˙˙…ƒė 1ƒ~˙•ĀPč˜āũ˙ƒÄ„ĀuPƒˇúū˙hPPEājP‰EÄčwÖũ˙‹ģ°ū˙˙ƒŒ˙˙ƒÄ j PWč_ėũ˙ƒ°˙˙ƒÄ j5PWčMėũ˙Z˙uÄč$ęũ˙ƒÄ‹E܃ė‹xôWP˙vč×ũ˙ƒÄ9Įtrƒˇúū˙hUPEäjP‰EÄč Öũ˙‹ģ°ū˙˙ƒč˙˙ƒÄ j&PWčõëũ˙‹FƒÄ ˙pôPWčåëũ˙‰ĮƒV˙˙ƒÄ jPWčŅëũ˙‹F ƒÄ ˙pôPWčÁëũ˙X˙uÄč˜éũ˙ƒÄ‹E܋ŗ”˙˙˙ƒč 9đu5‹E؃č 9đueô[^_]Ívƒė‹EÄWV˙ĐëĖt&UäčHųũ˙eô[^_]ÍUäč8ųũ˙ëÁ‰Įë"‰ĮëQ‰Įëg‰Į‹ŗ”˙˙˙ë(‰Įƒė ˙uÄč#éũ˙ƒÄ‹E܋ŗ”˙˙˙ƒč 9đtU×čøøũ˙‹E؃č 9đtU×čæøũ˙ƒė Wč­éũ˙‹E܋ŗ”˙˙˙ƒč 9đtՍUäčÅøũ˙ë˃ė ˙uÄčČčũ˙ƒÄëŖfU‰åWVSEuÔčīīũ˙Ã˙rƒėD}ØPVč\Öũ˙YXƒ8 ˙˙VPWčÜâũ˙‹E‹p‹‹@‰<$}ÜW‰EÄčR×ũ˙ƒSũū˙ƒÄ jPWčđįũ˙ƒÄ‹EÄ;ƒ(˙˙˙…&ƒė 1ƒ~˙•ĀPč\Ūũ˙ƒÄ„ĀuPƒˇúū˙hPPEājP‰EÄč;Ôũ˙‹ģ°ū˙˙ƒŒ˙˙ƒÄ j PWč#ęũ˙ƒ°˙˙ƒÄ j5PWčęũ˙Z˙uÄččįũ˙ƒÄ‹E܃ė‹xôWP˙včŌÔũ˙ƒÄ9Įtrƒˇúū˙hUPEäjP‰EÄčŅĶũ˙‹ģ°ū˙˙ƒč˙˙ƒÄ j&PWčšéũ˙‹FƒÄ ˙pôPWčŠéũ˙‰ĮƒV˙˙ƒÄ jPWč•éũ˙‹F ƒÄ ˙pôPWč…éũ˙X˙uÄč\įũ˙ƒÄ‹E܋ŗ”˙˙˙ƒč 9đuI‹E؃č 9đuW‹Eԃč 9đueô[^_]Ѝt&ƒė‹EÄWV˙ĐëĀt&Uäč÷ũ˙eô[^_]Ѝ´&Uäččöũ˙‹E؃č 9đt¯ļUäčĐöũ˙량Į‹ŗ”˙˙˙ë‰ĮëS‹E܋ŗ”˙˙˙ƒč 9đtUäč¨öũ˙‹E؃č 9đtUĶč–öũ˙‹Eԃč 9đtUĶč„öũ˙ƒė WčKįũ˙ƒė ˙uÄ耿ũ˙ƒÄ‹E܋ŗ”˙˙˙ƒč 9đtĩUĶčUöũ˙ë̉Į‹ŗ”˙˙˙ëŗ‰Įë ‰ĮëÆ‰Įéz˙˙˙ƒė ˙uÄč?æũ˙ƒÄëŊfffffU‰åWVS}Ôčbíũ˙Ãrpƒė@‹E ‹pEŌPƒIüū˙PWč’Ûũ˙XZW}ØWčÖÔũ˙‰4$čūÚũ˙ƒÄ PVWčsåũ˙‹EY^‹p‹‹@W}ÜW‰EÄčŠÔũ˙ƒSũū˙ƒÄ jPWčGåũ˙ƒÄ‹EÄ;ƒ(˙˙˙…%ƒė 1ƒ~˙•ĀPčŗÛũ˙ƒÄ„ĀuPƒˇúū˙hPPEājP‰EÄč’Ņũ˙‹ģ°ū˙˙ƒŒ˙˙ƒÄ j PWčzįũ˙ƒ°˙˙ƒÄ j5PWčhįũ˙Z˙uÄč?åũ˙ƒÄ‹E܃ė‹xôWP˙vč)Ōũ˙ƒÄ9Įtrƒˇúū˙hUPEäjP‰EÄč(Ņũ˙‹ģ°ū˙˙ƒč˙˙ƒÄ j&PWčįũ˙‹FƒÄ ˙pôPWčįũ˙‰ĮƒV˙˙ƒÄ jPWčėæũ˙‹F ƒÄ ˙pôPWčÜæũ˙X˙uÄčŗäũ˙ƒÄ‹E܋ŗ”˙˙˙ƒč 9đu@‹E؃č 9đuN‹Eԃč 9đueô[^_]Ít&ƒė‹EÄWV˙ĐëÁt&UäčXôũ˙eô[^_]ÍUäčHôũ˙‹E؃č 9đt¸ļUäč0ôũ˙먉Įë‰Įë]‰Į‹ŗ”˙˙˙ë&ƒė ˙uÄč!äũ˙ƒÄ‹E܋ŗ”˙˙˙ƒč 9đtUĶčöķũ˙‹E؃č 9đtUĶčäķũ˙‹Eԃč 9đtUĶčŌķũ˙ƒė Wč™äũ˙‹E܋ŗ”˙˙˙ƒč 9đtÍUäčąķũ˙빉Įë‰Įë‹E؋ŗ”˙˙˙ƒč 9đtŗUäčķũ˙늃ė ˙uÄč’ãũ˙ƒÄél˙˙˙‰Į‹ŗ”˙˙˙댉Įé[˙˙˙ffffU‰åWVSuäčĸęũ˙Ã˛mƒė(‹}Včäũ˙‹E ƒÄ ˙p˙0‹EäPRčšåũ˙YXVWčPäũ˙‹UäƒÄ …Ōt$ƒė jč<Ųũ˙ƒÄ„Āt‹Eä…Āt ƒė ‹P˙RƒÄeô‰ø[^_]‰ĮPPjVčZĐũ˙‰<$čĸãũ˙fU‰åWVS}Ôčęũ˙Ã"mƒėT‹u ‹FX‹V\ƒÆ‰EāEā‰UäPWčíŅũ˙Vč7äũ˙ƒÄ “7øū˙„Āƒč˙˙EUÆRPEČP‰E´čØũ˙uĖƒāüū˙ƒÄ ˙u´PVčŧÜũ˙‰4$uĐVč@Ņũ˙ƒöüū˙ƒÄ jPVčŪáũ˙EØƒÄ WVP‰ĮčŪËũ˙‰<$}ÜWčŅũ˙ƒũū˙ƒÄ jPWč°áũ˙X‹EZW˙pčōÖũ˙‹E܋ŗ”˙˙˙ƒÄƒč 9đu?‹E؃č 9đuM‹EЃč 9đu[‹E˃č 9đui‹Eȃč 9đuw‹Eԃč 9đ…eô[^_]ЍUĮč¨ņũ˙‹E؃č 9đtšļ‰úč‘ņũ˙‹EЃč 9đtŦ´&‰účyņũ˙‹E˃č 9đtž´&‰účaņũ˙‹Eȃč 9đt´&‰účIņũ˙‹Eԃč 9đt†´&‰úč1ņũ˙eô[^_]ÉĮ‹ŗ”˙˙˙ëF‰Į‹ŗ”˙˙˙ë‹E܋ŗ”˙˙˙ƒč 9đtUĮčũđũ˙‹E؃č 9đtUĮčëđũ˙‹EЃč 9đtUĮčŲđũ˙‹E˃č 9đtUĮčĮđũ˙‹Eȃč 9đtUĮčĩđũ˙‹Eԃč 9đtUĮčŖđũ˙ƒė Wčjáũ˙‰Į‹ŗ”˙˙˙ëĨ‰Įét˙˙˙‰Į‹ŗ”˙˙˙ë¸ëí‰Į‹ŗ”˙˙˙뾉Į‹EЋŗ”˙˙˙ƒč 9đtˆUÜčYđũ˙é{˙˙˙ffU‰åWVS}Ôč’įũ˙ÃĸjƒėT‹u ‹F0‹V4‰EāEā‰UäPWčpĪũ˙VčĒČũ˙ƒÄ “7øū˙…Āƒč˙˙OUÆRPEČP‰E´č•Õũ˙uĖƒũū˙ƒÄ ˙u´PVč?Úũ˙‰4$uĐVčÃÎũ˙ƒöüū˙ƒÄ jPVčaßũ˙EØƒÄ WVP‰ĮčaÉũ˙‰<$}ÜWč•Îũ˙ƒũū˙ƒÄ jPWč3ßũ˙X‹EZW˙pčuÔũ˙‹E܋ŗ”˙˙˙ƒÄƒč 9đuB‹E؃č 9đuP‹EЃč 9đu^‹E˃č 9đul‹Eȃč 9đuz‹Eԃč 9đ…„eô[^_]Ít&UĮč(īũ˙‹E؃č 9đtļļ‰účīũ˙‹EЃč 9đtŠ´&‰účųîũ˙‹E˃č 9đt›´&‰účáîũ˙‹Eȃč 9đt´&‰účÉîũ˙‹Eԃč 9đtƒ´&‰účąîũ˙eô[^_]ÉĮ‹ŗ”˙˙˙ëF‰Į‹ŗ”˙˙˙ë‹E܋ŗ”˙˙˙ƒč 9đtUĮč}îũ˙‹E؃č 9đtUĮčkîũ˙‹EЃč 9đtUĮčYîũ˙‹E˃č 9đtUĮčGîũ˙‹Eȃč 9đtUĮč5îũ˙‹Eԃč 9đtUĮč#îũ˙ƒė WčęŪũ˙‰Į‹ŗ”˙˙˙ëĨ‰Įét˙˙˙‰Į‹ŗ”˙˙˙ë¸ëí‰Į‹ŗ”˙˙˙뾉Į‹EЋŗ”˙˙˙ƒč 9đtˆUÜčŲíũ˙é{˙˙˙ffU‰åWVS}Ôčåũ˙Ã"hƒėX‹u Vč0ßũ˙Y‰Eā‰UäXEāPWčîĖũ˙Vč¨Ëũ˙ƒÄ “7øū˙„Āƒč˙˙DUÆRPEČP‰E´čĶũ˙uĖƒ ˙˙ƒÄ ˙u´PVčŊ×ũ˙‰4$uĐVčAĖũ˙ƒöüū˙ƒÄ jPVčßÜũ˙EØƒÄ WVP‰Įč߯ũ˙‰<$}ÜWčĖũ˙ƒũū˙ƒÄ jPWčąÜũ˙X‹EZW˙pčķŅũ˙‹E܋ŗ”˙˙˙ƒÄƒč 9đu@‹E؃č 9đuN‹EЃč 9đu\‹E˃č 9đuj‹Eȃč 9đux‹Eԃč 9đ…‚eô[^_]ÃfUĮč¨ėũ˙‹E؃č 9đt¸ļ‰úč‘ėũ˙‹EЃč 9đtĢ´&‰účyėũ˙‹E˃č 9đt´&‰účaėũ˙‹Eȃč 9đt´&‰účIėũ˙‹Eԃč 9đt…´&‰úč1ėũ˙eô[^_]ÉĮ‹ŗ”˙˙˙ëF‰Į‹ŗ”˙˙˙ë‹E܋ŗ”˙˙˙ƒč 9đtUĮčũëũ˙‹E؃č 9đtUĮčëëũ˙‹EЃč 9đtUĮčŲëũ˙‹E˃č 9đtUĮčĮëũ˙‹Eȃč 9đtUĮčĩëũ˙‹Eԃč 9đtUĮčŖëũ˙ƒė WčjÜũ˙‰Į‹ŗ”˙˙˙ëĨ‰Įét˙˙˙‰Į‹ŗ”˙˙˙ë¸ëí‰Į‹ŗ”˙˙˙뾉Į‹EЋŗ”˙˙˙ƒč 9đtˆUÜčYëũ˙é{˙˙˙ffU‰åWVSč•âũ˙ÃĨeƒė8hŧčbĶũ˙‰Æ@4‰$‰EÔčbÅũ˙‹ģdū˙˙Ɔ¨Į†¤Æ†ŠĮ†ŦĮ†°G‹ģ˜ū˙˙Į†´Į†¸‰F4‹O ‹G‰Ę‰‰EЉMˉÁ‹@ô‰ĮFXZ‹QôjōRčÂĶũ˙YX‹G‹W‰F‹@ôD‰jPčĻĶũ˙‹G‹WN ‰MЋ@ô‰‹ƒPū˙˙ĮFĮFĮFĮFP ĮF ĮF$‰P4ƒĀ ‰F‹ƒ€˙˙˙‰V4ƒĀ‰F F(‰$čÜĐũ˙‹ƒ`ū˙˙‹“”˙˙˙ĮF,ƒĀ‰F B ‰F0XZ˙uĐ˙uÔčĶũ˙‹EY_‰0Eä˙u Pč Ûũ˙‹EäZY˙pôP‹E‹‰EԃĀPčķÛũ˙‹EäƒÄƒč ;ƒ”˙˙˙ueô[^_]Ívŧ'Uãč˜éũ˙eô[^_]ÉĮë‰Æë;ëc‰ÆëK‹MЉĮ‹Qô‹Mˉ ‹ƒdū˙˙ƒė ƒĀ‰F4˙uÔčíĶũ˙‰4$čÕÄũ˙‰<$čÚũ˙‹Eäƒč ;ƒ”˙˙˙tUãč7éũ˙PPj˙učĢÆũ˙‰4$čķŲũ˙ƒė ˙uЉEĖčÕČũ˙XZWRVčšÔũ˙‹E˃ĉĮë‹fffffffU‰åWVSč5āũ˙ÃEcėüŨEŨ•@ū˙˙ŨEŨ•8ū˙˙ßéŨ؇틅Dū˙˙‹ĩ@ū˙˙‹ŊDū˙˙%đ=đ„‹<ū˙˙‹…8ū˙˙‹•<ū˙˙áđ‰…0ū˙˙ųđ‰•4ū˙˙„û‹…Dū˙˙…Āˆ-‹Dū˙˙‹ĩ@ū˙˙É€‰Ī‹…<ū˙˙…Āˆķ‹<ū˙˙‹…8ū˙˙É€‰Ę9ׂw†i)Æ׉đ‰úƒúw ƒø†3v…pū˙˙ƒė ‰Į‰…ū˙˙…¤ū˙˙P‰…0ū˙˙čÂũ˙‹ŗdū˙˙ƅ˙˙˙Į…˙˙˙ƅ˙˙˙Į…˙˙˙Į… ˙˙˙F‹ŗ˜ū˙˙Į…$˙˙˙Į…(˙˙˙‰…¤ū˙˙‹V‹N ‹Bô‰•pū˙˙‰(ū˙˙‰•,ū˙˙‰Œpū˙˙Į…tū˙˙YX‹BôjøPčmĐũ˙‹NŊxū˙˙XZ‹Qô‰xū˙˙‰$ū˙˙‹Nú‰ jR‰ ū˙˙č>Đũ˙‹V‹N‹Bô‰•ū˙˙‹“Pū˙˙‰ū˙˙‰Œpū˙˙Į…€ū˙˙B Į…„ū˙˙Į…ˆū˙˙Į…Œū˙˙Į…ū˙˙‰…pū˙˙B4Į…”ū˙˙‰…¤ū˙˙B ‹“€˙˙˙‰…xū˙˙B•˜ū˙˙‰…|ū˙˙‰$‰•ū˙˙čBÍũ˙‹‹`ū˙˙‹“”˙˙˙Į…œū˙˙AY‰…|ū˙˙B |ū˙˙‰… ū˙˙‰ū˙˙XQ˙ĩ0ū˙˙č`Īũ˙‹…xū˙˙ƒÄ ‹@ô˙ĩDū˙˙˙ĩ@ū˙˙WĮ„|ū˙˙čįĶũ˙…,˙˙˙‰Į‰…ū˙˙…`˙˙˙‰$‰…@ū˙˙č5Āũ˙‹‹dū˙˙‹•,ū˙˙ÆEÔĮEĐÆEÕĮE؍A‹(ū˙˙ĮEÜĮEāĮE䉅`˙˙˙‹Bô‰•,˙˙˙‰Œ,˙˙˙Į…0˙˙˙X‹BôYjøPčĻÎũ˙‹•$ū˙˙Y_‹Jô‰•4˙˙˙Ŋ4˙˙˙‹• ū˙˙ų‰jQč}Îũ˙‹•ū˙˙‹ū˙˙‹Bô‹“Pū˙˙‰Œ,˙˙˙B ‹‹€˙˙˙Į…<˙˙˙Į…@˙˙˙‰…,˙˙˙B4Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙‰…`˙˙˙B Į…P˙˙˙‰…4˙˙˙AT˙˙˙‰…8˙˙˙‰ $‰ū˙˙č‡Ëũ˙‹“`ū˙˙‹‹”˙˙˙Į…X˙˙˙B‰…8˙˙˙A ‰…\˙˙˙XZ•8˙˙˙R˙ĩ@ū˙˙‰• ū˙˙čĨÍũ˙‹…4˙˙˙ƒÄ ‹@ô˙ĩ<ū˙˙˙ĩ8ū˙˙WĮ„8˙˙˙č,Ōũ˙X…Pū˙˙Z˙ĩū˙˙P‰…8ū˙˙č2Ņũ˙X…Tū˙˙˙ĩū˙˙P‰… ū˙˙čŅũ˙Ŋhū˙˙W‰Ŋū˙˙č§Ëũ˙ĩXū˙˙Vč[Õũ˙ƒū˙ū˙ƒÄ j P‹…Xū˙˙ƒĀPč Öũ˙YXVWčįŌũ˙XZjVč]Áũ˙^XE PWčqģũ˙ĩ\ū˙˙‰Į‰4$čÕũ˙ƒ ˙˙ƒÄ jP‹…\ū˙˙ƒĀPčÖÕũ˙XZVWčŌũ˙YXjVčÁũ˙XEZPWč'ģũ˙ĩ`ū˙˙‰Į‰4$čĮÔũ˙ƒ7ũū˙ƒÄ jP‹…`ū˙˙ƒĀPčŒÕũ˙YXVWčSŌũ˙XZjVčÉĀũ˙^Xƒküū˙PWčęĘũ˙ZY˙ĩ ū˙˙PčŧĀũ˙ĩdū˙˙‰Į‰4$člÔũ˙ƒ˙˙ƒÄ jP‹…dū˙˙ƒĀPč1Õũ˙YXVWčøŅũ˙XZjVčnĀũ˙^X˙ĩ8ū˙˙WčpĀũ˙ZYP˙uč%Ëũ˙^…lū˙˙_jPčĨŊũ˙‹…Tū˙˙ƒÄƒč ;ƒ”˙˙˙…‹…Pū˙˙ƒč ;ƒ”˙˙˙…˜‹ƒPū˙˙ƒĀ ‰…,˙˙˙‹ƒPū˙˙ƒĀ4‰…`˙˙˙‹ƒPū˙˙ƒĀ ‰…4˙˙˙‹ƒ`ū˙˙ƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ”˙˙˙…W‹ƒ€˙˙˙ƒė ˙ĩū˙˙ƒĀ‰…8˙˙˙čjĶũ˙‹…ū˙˙‹ĩū˙˙‹Ŋ(ū˙˙Y‹@ô‰´,˙˙˙‹…$ū˙˙‹ĩ ū˙˙‰…4˙˙˙‹@ô‰´4˙˙˙‹…,ū˙˙‰…,˙˙˙‹@ô˙ĩ@ū˙˙‰ŧ,˙˙˙‹ƒdū˙˙ƒĀ‰…`˙˙˙čQĖũ˙‹ƒPū˙˙ƒÄƒĀ ‰…pū˙˙‹ƒPū˙˙ƒĀ4‰…¤ū˙˙‹ƒPū˙˙ƒĀ ‰…xū˙˙‹ƒ`ū˙˙ƒĀ‰…|ū˙˙‹… ū˙˙ƒč ;ƒ”˙˙˙…M‹ƒ€˙˙˙ƒė ˙ĩū˙˙ƒĀ‰…|ū˙˙čŌũ˙‹…ū˙˙‹ĩū˙˙‹Ŋ ū˙˙Z‹@ô‰´pū˙˙‹…$ū˙˙‹ĩ(ū˙˙‰…xū˙˙‹@ô‰ŧxū˙˙‹…,ū˙˙‰…pū˙˙‹@ô˙ĩ0ū˙˙‰´pū˙˙‹ƒdū˙˙ƒĀ‰…¤ū˙˙čwËũ˙‹EƒÄeô[^_]´&ƒė ˙uč•Éũ˙‹EƒÄ eô[^_]t&9ƃø˙˙)đúéŽø˙˙´&‹•Dū˙˙‹…@ū˙˙â˙˙ Â…~ø˙˙éŪ÷˙˙‰öŧ'‹<ū˙˙á˙˙‰Č‹8ū˙˙ Č…Tø˙˙éä÷˙˙´&‹…0ū˙˙‹•4ū˙˙÷؃Ō÷Úé ø˙˙÷ۃ×÷ßéÛ÷˙˙t&‹•ū˙˙čāũ˙éŖū˙˙‹•ū˙˙čāũ˙éSũ˙˙‹•ū˙˙čõßũ˙éXũ˙˙‹•ū˙˙čåßũ˙é™ũ˙˙‰Įë ‰Æé¤éPPjV‰ūčDŊũ˙ƒÄPP…lū˙˙jPč‘ēũ˙ƒÄ‹…Tū˙˙ƒč ;ƒ”˙˙˙t •Oū˙˙č’ßũ˙‹…Pū˙˙ƒč ;ƒ”˙˙˙t •Oū˙˙čvßũ˙ƒė ˙ĩū˙˙ččÎũ˙ƒÄƒė ˙ĩū˙˙č×Îũ˙‰4$čĐũ˙‹Ŋ,ū˙˙‰Æ‰Ŋpū˙˙‹Wô‹Ŋ(ū˙˙‰ŧpū˙˙‹ƒdū˙˙ƒė ˙ĩ0ū˙˙ƒĀ‰…¤ū˙˙č¤Éũ˙‰4$čÜĪũ˙‰ÆéD˙˙˙‰Įë‰Įë‰Įë(QQjV‰ūčmŧũ˙ƒÄé$˙˙˙PPjV‰ūčYŧũ˙ƒÄé˙˙˙PPjV‰ūčEŧũ˙ƒÄéüū˙˙‰Įë‰ÆéM˙˙˙ƒė ˙ĩū˙˙čdžũ˙XF‰ūZP˙ĩū˙˙čAĘũ˙ƒÄéX˙˙˙‰Æë‰Æ‹…,ū˙˙‹Ŋ(ū˙˙‰…,˙˙˙‹@ô‰ŧ,˙˙˙‹ƒdū˙˙ƒė ˙ĩ@ū˙˙ƒĀ‰…`˙˙˙čÚČũ˙ƒÄéŨū˙˙‰Įë‰ÆéÁū˙˙ƒė ˙ĩ ū˙˙čéŊũ˙YXF‰ūP˙ĩū˙˙čÆÉũ˙ƒÄëljÆéxū˙˙‰ÆéUū˙˙fU‰åWVSčEÕũ˙ÃUXėėŲEŲEŲÉßéŨ؇‹E‰Ââ€ú€„˜‹U‰Ņá€ų€„™‰Á‰ÆÎ€÷Ų…ĀIΉЉÖ÷Ū €…ŌHƉÎ)ƉÂ)Ę9Á‰đBƒø†(…pū˙˙ƒė ‰Į‰… ū˙˙…¤ū˙˙P‰…@ū˙˙荷ũ˙‹ŗdū˙˙ƅ˙˙˙Į…˙˙˙ƅ˙˙˙Į…˙˙˙Į… ˙˙˙F‹ŗ˜ū˙˙Į…$˙˙˙Į…(˙˙˙‰…¤ū˙˙‹F‹V ‰Á‰…pū˙˙‰…<ū˙˙‹@ô‰•8ū˙˙‰”pū˙˙Į…tū˙˙X‹AôZjøPčÛÅũ˙‹VY_‹JôŊxū˙˙‰•xū˙˙‰•4ū˙˙ų‰Č‹N‰jP‰0ū˙˙čĒÅũ˙‹V‹N‹Bô‰•,ū˙˙‹“Pū˙˙‰(ū˙˙‰Œpū˙˙Į…€ū˙˙B Į…„ū˙˙Į…ˆū˙˙Į…Œū˙˙Į…ū˙˙‰…pū˙˙B4Į…”ū˙˙‰…¤ū˙˙B ‹“€˙˙˙‰…xū˙˙B•˜ū˙˙‰…|ū˙˙‰$‰•ū˙˙čŽÂũ˙‹‹`ū˙˙‹“”˙˙˙Į…œū˙˙A|ū˙˙‰…|ū˙˙B ‰Dū˙˙‰… ū˙˙XZQ˙ĩ@ū˙˙čĖÄũ˙‹…xū˙˙ŲE‹@ôŨ\$‰<$Į„|ū˙˙čYÉũ˙…,˙˙˙‰Į‰…$ū˙˙…`˙˙˙‰$‰…Dū˙˙č§ĩũ˙‹‹dū˙˙ÆEԋ•8ū˙˙ĮEĐÆEÕĮE؍A‹<ū˙˙ĮEÜĮEāĮE䉅`˙˙˙‹Aô‰,˙˙˙‰”,˙˙˙Į…0˙˙˙X‹AôZjøPčÄũ˙‹•4ū˙˙Y_‹JôŊ4˙˙˙‰•4˙˙˙ų‰Č‹0ū˙˙‰jPčíÃũ˙‹•,ū˙˙‹(ū˙˙‹Bô‹“Pū˙˙‰Œ,˙˙˙B ‹‹€˙˙˙Į…<˙˙˙Į…@˙˙˙‰…,˙˙˙B4Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙‰…`˙˙˙B •T˙˙˙Į…P˙˙˙‰…4˙˙˙A‰$‰•ū˙˙‰…8˙˙˙č÷Āũ˙‹“`ū˙˙‹‹”˙˙˙Į…X˙˙˙B‰…8˙˙˙A 8˙˙˙‰…\˙˙˙‰ū˙˙XZQ˙ĩDū˙˙čÃũ˙‹…4˙˙˙ŲE‹@ôŨ\$‰<$Į„8˙˙˙čĸĮũ˙X…Pū˙˙Z˙ĩ$ū˙˙P‰…ū˙˙药ũ˙X…Tū˙˙˙ĩ ū˙˙P‰…ū˙˙čÆũ˙…hū˙˙P‰Į‰… ū˙˙čÁũ˙ĩXū˙˙VčĪĘũ˙ƒū˙ū˙ƒÄ j P‹…Xū˙˙ƒĀPč”Ëũ˙YXVWč[Čũ˙XZjVčŅļũ˙^XE PWčå°ũ˙ĩ\ū˙˙‰Į‰4$č…Ęũ˙ƒ ˙˙ƒÄ jP‹…\ū˙˙ƒĀPčJËũ˙XZVWčČũ˙YXjVč‡ļũ˙XEZPW蛰ũ˙ĩ`ū˙˙‰Į‰4$č;Ęũ˙ƒ7ũū˙ƒÄ jP‹…`ū˙˙ƒĀPčËũ˙YXVWčĮĮũ˙XZjVč=ļũ˙^Xƒküū˙PWč^Āũ˙ZY˙ĩū˙˙Pč0ļũ˙ĩdū˙˙‰Į‰4$čāÉũ˙ƒ˙˙ƒÄ jP‹…dū˙˙ƒĀPčĨĘũ˙YXVWčlĮũ˙XZjVčâĩũ˙^X˙ĩū˙˙Wčäĩũ˙ZYP˙uč™Āũ˙^…lū˙˙_jPčŗũ˙‹…Tū˙˙ƒÄƒč ;ƒ”˙˙˙…A‹…Pū˙˙ƒč ;ƒ”˙˙˙…<‹ƒPū˙˙ƒĀ ‰…,˙˙˙‹ƒPū˙˙ƒĀ4‰…`˙˙˙‹ƒPū˙˙ƒĀ ‰…4˙˙˙‹ƒ`ū˙˙ƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ”˙˙˙…û‹ƒ€˙˙˙ƒė ˙ĩū˙˙ƒĀ‰…8˙˙˙čŪČũ˙‹…,ū˙˙‹Ŋ(ū˙˙Y‹@ô‰ŧ,˙˙˙‹…4ū˙˙‹Ŋ0ū˙˙‰…4˙˙˙‹@ô‰ŧ4˙˙˙‹…<ū˙˙‹Ŋ8ū˙˙‰…,˙˙˙‹@ô˙ĩDū˙˙‰ŧ,˙˙˙‹ƒdū˙˙ƒĀ‰…`˙˙˙čÅÁũ˙‹ƒPū˙˙ƒÄƒĀ ‰…pū˙˙‹ƒPū˙˙ƒĀ4‰…¤ū˙˙‹ƒPū˙˙ƒĀ ‰…xū˙˙‹ƒ`ū˙˙ƒĀ‰…|ū˙˙‹… ū˙˙ƒč ;ƒ”˙˙˙…鋃€˙˙˙ƒė ˙ĩū˙˙ƒĀ‰…|ū˙˙čČũ˙‹…,ū˙˙‹Ŋ(ū˙˙‹ĩ8ū˙˙Z‹@ô‰ŧpū˙˙‹…4ū˙˙‹Ŋ0ū˙˙‰…xū˙˙‹@ô‰ŧxū˙˙‹…<ū˙˙‰…pū˙˙‹@ô˙ĩ@ū˙˙‰´pū˙˙‹ƒdū˙˙ƒĀ‰…¤ū˙˙čëĀũ˙‹EƒÄeô[^_]vƒė ˙uč ŋũ˙‹EƒÄ eô[^_]t&Š˙˙…­ø˙˙éXø˙˙´&÷Â˙˙…”ø˙˙éVø˙˙´&‹•$ū˙˙číÕũ˙é˙˙˙´&‹• ū˙˙čÕÕũ˙é¯ũ˙˙‹• ū˙˙čÅÕũ˙é´ũ˙˙‹• ū˙˙čĩÕũ˙éõũ˙˙‰Įë ‰Æé¤éPPjV‰ūčŗũ˙ƒÄPP…lū˙˙jPča°ũ˙ƒÄ‹…Tū˙˙ƒč ;ƒ”˙˙˙t •Oū˙˙čbÕũ˙‹…Pū˙˙ƒč ;ƒ”˙˙˙t •Oū˙˙čFÕũ˙ƒė ˙ĩ$ū˙˙č¸Äũ˙ƒÄƒė ˙ĩ ū˙˙č§Äũ˙‰4$čīÅũ˙‹Ŋ<ū˙˙‰Æ‰Ŋpū˙˙‹Wô‹Ŋ8ū˙˙‰ŧpū˙˙‹ƒdū˙˙ƒė ˙ĩ@ū˙˙ƒĀ‰…¤ū˙˙čtŋũ˙‰4$čŦÅũ˙‰ÆéD˙˙˙‰Įë‰Įë‰Įë(QQjV‰ūč=˛ũ˙ƒÄé$˙˙˙PPjV‰ūč)˛ũ˙ƒÄé˙˙˙PPjV‰ūč˛ũ˙ƒÄéüū˙˙‰Įë‰ÆéM˙˙˙ƒė ˙ĩDū˙˙č4´ũ˙YXF‰ūP˙ĩ ū˙˙čĀũ˙ƒÄéX˙˙˙‰Æë‰Æ‹…<ū˙˙‹Ŋ8ū˙˙‰…,˙˙˙‹@ô‰ŧ,˙˙˙‹ƒdū˙˙ƒė ˙ĩDū˙˙ƒĀ‰…`˙˙˙čĒžũ˙ƒÄéŨū˙˙‰Įë‰ÆéÁū˙˙ƒė ˙ĩū˙˙čšŗũ˙YXF‰ūP˙ĩ$ū˙˙č–ŋũ˙ƒÄëljÆéxū˙˙‰ÆéUū˙˙fU‰åWVSčËũ˙Ã%Nƒė,‹u‹E 9„æƒė jčÔšũ˙ƒÄ„„ˋ>…˙„‹‹@;ƒôū˙˙…ž‹ƒĐū˙˙ƒĀƒ˙‰tzƒė j蓹ũ˙ƒÄ„ĀuTƒˇúū˙haPEäjP‰EÔčr¯ũ˙ƒŒ˙˙ƒÄ j P˙ŗ°ū˙˙č[Åũ˙ƒ¸˙˙ƒÄ j@P˙ŗ°ū˙˙čDÅũ˙X˙uÔčÃũ˙ƒÄƒė ˙wčŨģũ˙ƒÄĮG˙˙˙˙‹G ‹‹”˙˙˙ƒč 9ČuC‹Gƒč 9Ču)ƒė WčPŽũ˙ƒÄ‹E ‰eô[^_]Ãė W˙ЃÄë萍t&Uäč¨Ōũ˙ë͍ļUä‰MÔč•Ōũ˙‹MÔ뭉Æë‰Æëƒė ˙uÔčÂũ˙ƒÄ‹G ‹‹”˙˙˙ƒč 9ČtUã‰MÔč_Ōũ˙‹MԋGƒč 9ČtUãčJŌũ˙ƒė VčÃũ˙U‰åWVSč…Éũ˙Ã•Lƒė<‹E‹u‹x;x„ø…˙t%GøƒėPWčų°ũ˙XGüZPGPčę°ũ˙‹EƒÄ‹x‹EƒĮƒė‰xEāVƒÆP‰EĐčŰũ˙YEä_VP‰EĖčļ°ũ˙‹EƒÄ‹PBđ+E Áø…Ā~6÷Ѝzđ‰EԐt&‰ūƒėƒīWVčQŊũ˙YXFüPFPčBŊũ˙ƒÄ;uÔuڃė˙uĐ˙u č,Ŋũ˙X‹E Z˙u˃ĀPčŊũ˙‹Eä‹ģ”˙˙˙ƒÄƒč 9øu‹Eāƒč 9øueô[^_]ÍUßč.Ņũ˙ëäUßč$Ņũ˙ëä‹E‹)ĮÁ˙…˙…‹} ē)ĮՉUȃė Pč#šũ˙ƒÄ‰EĐ}Љ}ÄtƒėVWč˯ũ˙XGƒÆZVPčŧ¯ũ˙ƒÄ‹E‹uЋ89} t/t&…ötƒėWV蚝ũ˙YXGPFP苝ũ˙ƒÄƒĮƒÆ9} uՋM‹} F‰EĖ‰Æ‹I9ΉMÔt9t&…ötƒėWVčR¯ũ˙XGZPFPčC¯ũ˙ƒÄƒÆƒĮ9}ÔuՋE‹@‰EԋE‹ģ”˙˙˙‹;MԍEā‰EĖti‰uĉÎ덴&‹ƒč 9øu=ƒÆ;uÔt?‹Fƒč 9øtå‹UĖčõĪũ˙ëۍ?9׆˜‹} ĮEČ˙˙˙)Į¸ø˙˙˙éÖū˙˙‹UĖčĘĪũ˙빋E‹uċ‰EԋEԅĀt ƒė Pč-Ģũ˙ƒÄ‹M‹EЉq‰‹MȍȋM‰AéPū˙˙‰Æë‰Æëƒė ˙uĐč̰ũ˙‰4$čCĀũ˙‹Eāƒč ;ƒ”˙˙˙tUßč]Īũ˙ƒė Vč$Āũ˙‰Æë,ú˙˙˙‡\˙˙˙‹} )Į…Ō…1ū˙˙ĮEČĮEĐé7ū˙˙‹Aô;ƒ”˙˙˙tēUāčĪũ˙밉Įë닃č ;ƒ”˙˙˙tUāčōÎũ˙‰øƒė PčWžũ˙‹E˃Ä9đ‰Įtƒė WƒĮč˙¯ũ˙ƒÄ9÷uíčCĢũ˙‰Æë ‰ĮëEé„ëU‹Eċƒč ;ƒ”˙˙˙tUāčœÎũ˙ƒė Včžũ˙‹EЃÄ…Ātjƒė ˙uĐčūŠũ˙ƒÄčöĒũ˙‹ƒč ;ƒ”˙˙˙tUāčaÎũ˙‰øƒė PčÆŊũ˙‹EЃÄ9đ‰Įtƒė WƒĮčn¯ũ˙ƒÄ9÷uíč˛Ēũ˙ƒė Pč™Ŋũ˙‹UЃÄ…Ōu–ƒė ˙uÄčD¯ũ˙ƒÄ‹EЅĀuë‰Æë‰Æë čëģũ˙é™ū˙˙čáģũ˙ƒė VčXŊũ˙‹M˃Ä…Étŋ‹EĐ9EˉÆtÃė VƒÆčøŽũ˙ƒÄ9uĖuė뭉Æč§ģũ˙ƒė VčŊũ˙ƒÄëŠffffUWVSčįÄũ˙Ã÷Gƒė‹t$0‹|$49>t3ƒė j荺ũ˙ƒÄ„Āt ‹.…ít‹Eƒč ;ƒ”˙˙˙uƒė UčÔ¨ũ˙ƒÄ‰>ƒÄ[^_]Í´&T$č7Íũ˙ëØffUWVSčwÄũ˙Ã‡Gƒė‹t$0‹|$4‹L$8‹F;FtJ…Āt‹Pü‰‹FP‰VPü‹1)ú‰ŅÁų…Éu‰7ƒÄ[^_]Íļƒė)ĐRWPčšũ˙ƒÄëŪļ‹)ĐÁø…‰Å„9ņ߉øĮD$ü˙˙˙)Љ‰L$ ‰T$ƒė ˙t$貴ũ˙ƒÄ‹L$ ‹T$‰Åęt‹‰‹‰ú)‰ŅÁų…Éu~L‹V)ú‰ĐÁø…ĀuD‹<…Āt ƒė Pčē§ũ˙ƒÄ‰.l$‰~‰né@˙˙˙ļ‰øĮD$)ЉÂéw˙˙˙t&ƒėR‰T$WQ‰L$čE¸ũ˙ƒÄ‹T$ ‹L$뜐´&ƒėR‰T$PUč!¸ũ˙ƒÄ‹T$ég˙˙˙=˙˙˙?‡˙˙˙Áå‰l$‰ũ)Չę1í…Ā„.˙˙˙é˙˙˙fffffffUWVSč×Âũ˙ÃįEƒė‹t$0‹|$4‹V;VtF…Ōt‹Bü‰B‰F‹D$8‹0Bü)ø‰ÁÁų…Éu ‰7ƒÄ[^_]Ѓė)ÂPWR胡ũ˙ƒÄëãļ‹)ÂÁú…Ō„‰ 9ƆˉúĮD$ü˙˙˙)‰T$ ƒė ˙t$č"ŗũ˙‰Å‹‰ų‰D$ƒÄ‹T$ )Áęt‹D$8‹‰‰ČÁø…Āuj‹VL )ú‰ĐÁø…Āu8‹<…Āt ƒė Pč&Ļũ˙ƒÄ‰.l$‰~‰néI˙˙˙f‰úĮD$)Âë€fƒėR‰T$WQ‰L$čŊļũ˙ƒÄ‹T$ ‹L$먃ėQ‰L$˙t$Učžļũ˙ƒÄ‹L$ éx˙˙˙ų˙˙˙?‡(˙˙˙Áâ‰T$‰ú)…É…!˙˙˙‰Ņ‰D$1íé7˙˙˙fffUWVSčWÁũ˙ÃgDƒė‹t$0‹|$4‹L$8‹F;FtJ…Āt‹Pü‰‹FP‰VPü‹1)ú‰ŅÁų…Éu‰7ƒÄ[^_]Íļƒė)ĐRWPčûĩũ˙ƒÄëŪļ‹)ĐÁø…‰Å„9ņ߉øĮD$ü˙˙˙)Љ‰L$ ‰T$ƒė ˙t$蒱ũ˙ƒÄ‹L$ ‹T$‰Åęt‹‰‹‰ú)‰ŅÁų…Éu~L‹V)ú‰ĐÁø…ĀuD‹<…Āt ƒė P蚤ũ˙ƒÄ‰.l$‰~‰né@˙˙˙ļ‰øĮD$)ЉÂéw˙˙˙t&ƒėR‰T$WQ‰L$č%ĩũ˙ƒÄ‹T$ ‹L$뜐´&ƒėR‰T$PUčĩũ˙ƒÄ‹T$ég˙˙˙=˙˙˙?‡˙˙˙Áå‰l$‰ũ)Չę1í…Ā„.˙˙˙é˙˙˙fffffffUWVSčˇŋũ˙ÃĮBƒė‹t$0‹|$4‹L$8‹F;FtJ…Āt‹Pü‰‹FP‰VPü‹1)ú‰ŅÁų…Éu‰7ƒÄ[^_]Íļƒė)ĐRWPč[´ũ˙ƒÄëŪļ‹)ĐÁø…‰Å„9ņ߉øĮD$ü˙˙˙)Љ‰L$ ‰T$ƒė ˙t$čō¯ũ˙ƒÄ‹L$ ‹T$‰Åęt‹‰‹‰ú)‰ŅÁų…Éu~L‹V)ú‰ĐÁø…ĀuD‹<…Āt ƒė Pčúĸũ˙ƒÄ‰.l$‰~‰né@˙˙˙ļ‰øĮD$)ЉÂéw˙˙˙t&ƒėR‰T$WQ‰L$č…ŗũ˙ƒÄ‹T$ ‹L$뜐´&ƒėR‰T$PUčaŗũ˙ƒÄ‹T$ég˙˙˙=˙˙˙?‡˙˙˙Áå‰l$‰ũ)Չę1í…Ā„.˙˙˙é˙˙˙fffffffWVS‹t$čžũ˙Ã$A‹|$9>t%ƒė jčÜŦũ˙ƒÄ„Āt‹…Āt ƒė ‹P˙RƒÄ‰>[^_ÃffffffU‰åWVSčÅŊũ˙ÃÕ@ƒė\‹M‹ƒp˙˙˙‹ŗ”˙˙˙ƒĀ‰ëgļ‹E˃č 9đ…j‹EЃč 9đ…t‹Eԃč 9đ…~‹E؃č 9đ…ˆ‹E܃č 9đ…š‹Eāƒč 9đ…Ŧčį¯ũ˙„Ā…ˇ‹Eƒė ƒx˙”ĀļĀPč Ŧũ˙ƒÄ„Āu֍Eä}āƒėĮEävPW苪ũ˙XEÆZPƒ˙˙PEÜP‰E¨čBĢũ˙M؍ƒŦūū˙ƒÄ P˙u¨Q‰MŦč Ļũ˙XEÔ˙uŦP‰E°či¤ũ˙ƒ“˙˙ƒÄ jP˙u°čĩũ˙UĐƒÄ W˙u°R‰U¤‰×čŸũ˙‰<$}ĖWč4¤ũ˙ƒÍūū˙ƒÄ jPWčŌ´ũ˙ZEČYWP‰E´č¤ũ˙ƒŗ˙˙ƒÄ jP˙u´č¯´ũ˙X˙u´čĻ ũ˙‹Eȃăč 9đ„Ĩū˙˙UĮčíÄũ˙‹E˃č 9đ„ū˙˙´&‹U´čĐÄũ˙‹EЃč 9đ„Žū˙˙f‰účšÄũ˙‹Eԃč 9đ„…ū˙˙v‹U¤č Äũ˙‹E؃č 9đ„zū˙˙f‹U°čˆÄũ˙‹E܃č 9đ„pū˙˙vŧ'‹UŦčhÄũ˙‹Eāƒč 9đ„^ū˙˙vŧ'‹U¨čHÄũ˙č3Žũ˙„Ā„Lū˙˙veô[^_]ÉƋģ”˙˙˙ët‰Æ‹Eȋģ”˙˙˙ƒč 9øtUĮč Äũ˙‹E˃č 9øtUĮčúÃũ˙‹EЃč 9øtUĮččÃũ˙‹Eԃč 9øtUĮčÖÃũ˙‹E؃č 9øtUĮčÄÃũ˙‹E܃č 9øtUĮč˛Ãũ˙‹Eāƒč 9øtUĮč Ãũ˙ƒė Včg´ũ˙él˙˙˙‰Æ‹ģ”˙˙˙éy˙˙˙‰Æë ‰Æ‹ģ”˙˙˙éz˙˙˙‹EĖ‹ģ”˙˙˙ƒč 9ø„f˙˙˙UČčXÃũ˙éY˙˙˙‰Æ‹ģ”˙˙˙é^˙˙˙‰Æë‰Æ‹ģ”˙˙˙é_˙˙˙‰Æ‹ģ”˙˙˙éd˙˙˙‹Eԋģ”˙˙˙ƒč 9ø„>˙˙˙UĐč Ãũ˙é1˙˙˙fffVSčIēũ˙ÃY=ƒė‹t$VčfĄũ˙‰4$č^žũ˙ƒÄ[^ÃffffSčēũ˙Ã*=ƒė‹“ ˙˙˙‹D$ƒÂ‰PčėŖũ˙ƒÄ[ÃfffVSčéšũ˙Ãų<ƒė‹ƒ ˙˙˙‹t$ƒĀ‰VčģŖũ˙‰4$čķũ˙ƒÄ[^ÃffffffSčĒšũ˙Ãē<ƒė‹“ ˙˙˙‹D$ƒÂ‰Pč|Ŗũ˙ƒÄ[ÃfffVSčyšũ˙Ã‰<ƒė‹ƒ ˙˙˙‹t$ƒĀ‰VčKŖũ˙‰4$胝ũ˙ƒÄ[^ÃffffffUWVSč7šũ˙ÃG<ƒė‹t$0‹|$4‹L$8‹F;FtJ…Āt‹Pü‰‹FP‰VPü‹1)ú‰ŅÁų…Éu‰7ƒÄ[^_]Íļƒė)ĐRWPčÛ­ũ˙ƒÄëŪļ‹)ĐÁø…‰Å„9ņ߉øĮD$ü˙˙˙)Љ‰L$ ‰T$ƒė ˙t$črŠũ˙ƒÄ‹L$ ‹T$‰Åęt‹‰‹‰ú)‰ŅÁų…Éu~L‹V)ú‰ĐÁø…ĀuD‹<…Āt ƒė Pčzœũ˙ƒÄ‰.l$‰~‰né@˙˙˙ļ‰øĮD$)ЉÂéw˙˙˙t&ƒėR‰T$WQ‰L$č­ũ˙ƒÄ‹T$ ‹L$뜐´&ƒėR‰T$PUčáŦũ˙ƒÄ‹T$ég˙˙˙=˙˙˙?‡˙˙˙Áå‰l$‰ũ)Չę1í…Ā„.˙˙˙é˙˙˙fffffffU‰åWVS}ä蒷ũ˙Ãĸ:ƒė(W胹ũ˙‹E ƒÄ‹0…ötgƒė Vč>Ĩũ˙ƒÄ P‹EäVƒĀPč=˛ũ˙ƒÄƒėW˙uč.ąũ˙‹UäƒÄ …Ōt$ƒė jčĻũ˙ƒÄ„Āt‹Eä…Āt ƒė ‹P˙RƒÄ‹Eeô[^_]vƒ/øū˙ƒėjP‹EäƒĀPčØąũ˙뙉ÆPPjWčũ˙‰4$čb°ũ˙fUWVSč×ļũ˙Ãį9ƒė‹t$0‹|$4‹L$8‹F;FtJ…Āt‹Pü‰‹FP‰VPü‹1)ú‰ŅÁų…Éu‰7ƒÄ[^_]Íļƒė)ĐRWPč{Ģũ˙ƒÄëŪļ‹)ĐÁø…‰Å„9ņ߉øĮD$ü˙˙˙)Љ‰L$ ‰T$ƒė ˙t$č§ũ˙ƒÄ‹L$ ‹T$‰Åęt‹‰‹‰ú)‰ŅÁų…Éu~L‹V)ú‰ĐÁø…ĀuD‹<…Āt ƒė Pčšũ˙ƒÄ‰.l$‰~‰né@˙˙˙ļ‰øĮD$)ЉÂéw˙˙˙t&ƒėR‰T$WQ‰L$čĨĒũ˙ƒÄ‹T$ ‹L$뜐´&ƒėR‰T$PUčĒũ˙ƒÄ‹T$ég˙˙˙=˙˙˙?‡˙˙˙Áå‰l$‰ũ)Չę1í…Ā„.˙˙˙é˙˙˙fffffffUWVSč7ĩũ˙ÃG8ƒė ‹t$$‹L$(‹l$,‹‰Ī‹V)Į;Vt9Ęt(ƒėUQVč5Ŧũ˙‹ƒÄ‹L$ ø‰ƒÄ ‰Č[^_]t&…Ōt ‹E‰‹V‹ƒÂ‰VëŌfUWVSčĮ´ũ˙Ã×7ƒė,‹|$DD$‹l$@‰D$ …˙uëH´&ƒė W‰÷čŘũ˙ƒÄ…öt.ƒė˙w UčR¨ũ˙‹GƒÄ‹wƒč ;ƒ”˙˙˙t΋T$ čŊũ˙ëÍvƒÄ,[^_]ÃffffUWVSčG´ũ˙ÃW7ƒė‹D$4‹xP‰T$ …˙„¨‹D$8‰T$‹‰D$‹hô됍t&‰|$‹…˙t0‹Gƒė‰é‹pô9îFÎ)îQ˙t$ P訕ũ˙ƒÄ…ĀDƅĀyĖ‹ …˙uЋD$9D$ tK‹@ƒė‰é‹pô9îFÎQP˙t$蠕ũ˙‰ęƒÄ)ō…ĀD…Āx ‹D$0‹T$‰‹D$0ƒÄ[^_]´&‹D$0‹T$ ‰‹D$0ƒÄ[^_]ÂffffU‰åWVSčUŗũ˙Ãe6ƒė,‹E ‹xƒĀ‰Eԅ˙„ˇ‹E‹‹Pô‰E܉Uä‰úëļ‹Bš…ĀtB‰Â‹z‹Eä‰Uā‹wô‰Á9ÆF΃ėQW˙u܉MØčߔũ˙‹MäƒÄ‹Uā)ņ…ĀDÁ…Āxģ‹B 1ɅĀuž‰ø„ɉ׉}ā‹Uä‰Eä‹EØuFƒė‰UØP˙uÜ˙uä蜔ũ˙‹U؃Ä)օĀDƅĀˆī‹E‰8Æ@‹Eeô[^_]‹}ԍļ‹E 9x t0ƒė WčW™ũ˙‰Á‹EƒÄ‰}ā‰Ī‹‹Pô‰E܋A‹pô‰Eä‰Đ9ÖFÆë‚‰}ā‹uā9uÔ„Ą‹E‹Vƒė‹‹rô‹xô9ū‰ųFÎ)÷QRPč˙“ũ˙ƒÄ…ĀDĮ1˙…Āxzƒė jč×ĸũ˙‰Æ@ƒÄƒė˙uP胙ũ˙‰øƒÄ˙uÔļø˙uāVWč^¤ũ˙‹E ƒÄƒ@‹E‰0Æ@‹Eeô[^_]ļ‹Eā…Ā…`˙˙˙1˙é˙ū˙˙ļŋëˆëƒė ŋjčXĸũ˙ƒÄ‰Æ@é|˙˙˙ƒė P肩ũ˙‰4$芕ũ˙ƒÄ肖ũ˙‰Æčë§ũ˙ƒė VčÂĒũ˙fU‰åWVSč5ąũ˙ÃE4ƒė‹E…Ā„¨‹E‹ģ¨˙˙˙‹‹@ü‹p9ū„ˆ1Ā€>*t šQķĻ”Āļƒė Pč˟ũ˙ƒÄ„Āt$j˙ŗėū˙˙˙ŗ\˙˙˙˙u辟ũ˙ƒÄeô[^_]Ívƒ˙˙uäh{PjV艕ũ˙ƒ˙˙ƒÄ j3P˙ŗ°ū˙˙črĢũ˙‰4$čJŠũ˙ƒÄ륐t&¸ë…褝ũ˙‰Įƒė Vč)Šũ˙‰<$čáŠũ˙U‰åWV…,˙˙˙SčO°ũ˙Ã_3ė‰Į‰…üū˙˙…`˙˙˙P‰…$˙˙˙č“ũ˙‹ŗdū˙˙ÆEÔĮEĐÆEÕĮEØĮE܍F‹ŗ˜ū˙˙ĮEāĮE䉅`˙˙˙‹N ‹F‰Ę‰…,˙˙˙‰… ˙˙˙‰˙˙˙‰Á‹@ô‰”,˙˙˙Į…0˙˙˙X‹AôZjøPčzĄũ˙XZ‹V4˙˙˙‰˙˙˙‹zô‰•4˙˙˙‰•˙˙˙‹VΉjW‰•˙˙˙čEĄũ˙‹V‹~‹Bô‰Ŋ˙˙˙‰• ˙˙˙‹“€˙˙˙‰ŧ,˙˙˙‹ģPū˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙G Į…L˙˙˙Į…P˙˙˙‰…,˙˙˙G4‰…`˙˙˙G ‰…4˙˙˙B•T˙˙˙‰…8˙˙˙‰$‰•˙˙˙čIžũ˙‹“`ū˙˙Į…X˙˙˙YB‹“”˙˙˙‰…8˙˙˙B •8˙˙˙‰…\˙˙˙‰•˙˙˙XR˙ĩ$˙˙˙čg ũ˙‹E ƒÄ ˙p˙0˙ĩ˙˙˙čÁŠũ˙ZY˙ĩ˙˙˙˙uča¤ũ˙G ƒÄ ‰…,˙˙˙G4‰…`˙˙˙G ‰…4˙˙˙‹ƒ`ū˙˙ƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ”˙˙˙…Ÿ‹ƒ€˙˙˙ƒė ˙ĩ˙˙˙ƒĀ‰…8˙˙˙č¨ũ˙‹… ˙˙˙‹ĩ˙˙˙‹˙˙˙‹@ô‰´,˙˙˙‹…˙˙˙‹ĩ˙˙˙‰…4˙˙˙‹@ô‰Œ4˙˙˙‹… ˙˙˙‰…,˙˙˙‹@ô‰´,˙˙˙‹ƒdū˙˙ƒĀ‰…`˙˙˙X˙ĩ$˙˙˙čé ũ˙‹EƒÄeô[^_]‰öŧ'•+˙˙˙č5ļũ˙éQ˙˙˙‰Æë"‰ÆëC‹ ˙˙˙‰Æ‰,˙˙˙‹Qô‹˙˙˙‰Œ,˙˙˙‹ƒdū˙˙ƒė ˙ĩ$˙˙˙ƒĀ‰…`˙˙˙č} ũ˙‰4$čĩĻũ˙ƒė ˙ĩüū˙˙čWĨũ˙‰4$čŸĻũ˙‰Įë륃ė ˙ĩ˙˙˙č{•ũ˙XF‰ūZP˙ĩüū˙˙čXĄũ˙ƒÄë™fUWVSčįŦũ˙Ã÷/ƒė ‹t$$‹l$(‹|$,)õ‰čÁũÁø…íŽ:ÁåõëI‰öŧ'ƒė˙vWčԚũ˙ƒÄ…Āt]ƒė˙vWčÁšũ˙ƒÄ…ĀtRƒė˙vW讚ũ˙ƒÄ…ĀtWƒÆ 9õtpƒė˙6W蕚ũ˙ƒÄ…ĀuŽ‹D$ ‰0‹D$ ƒÄ [^_]vŧ'ƒÆëŨv‹D$ ƒÆ‰0‹D$ ƒÄ [^_]‹D$ ƒÆ‰0‹D$ ƒÄ [^_]‰öŧ'‹D$()čÁøƒøt8ƒøtƒøtD‹D$ ‹T$(‰‹D$ ƒÄ [^_]ƒė˙uWčô™ũ˙ƒÄ…Āt,ƒÅƒė˙uWčŪ™ũ˙ƒÄ…ĀtƒÅƒė˙uWčșũ˙ƒÄ…ĀuŠ‹D$ ‰(é.˙˙˙‹l$$ë‰UWVSčwĢũ˙Ã‡.ƒė‹|$4‹t$8)ū‰ō‰đÁúÁø…ŌŽŽ‹D$<‹(‰ĐÁāø‹uô‰D$ ë-t&‹G9pôtP‹G9pôtx‹G 9pô„”ƒĮ9|$ „¯‹9pôuЃėVUPčíŒũ˙ƒÄ…Āuž‹D$0‰8‹D$0ƒÄ[^_]ÂfƒėVUPčŌũ˙ƒÄ…Āuž‹D$0W‰‹D$0ƒÄ[^_]´&ƒėVUP蕌ũ˙ƒÄ…Ā…r˙˙˙‹D$0W‰럍´&ƒėVUPčmŒũ˙ƒÄ…Ā…V˙˙˙‹D$0W ‰ét˙˙˙t&‹t$ ‹D$8)đÁøƒøtƒøtVƒøtF‹D$0‹L$8‰éE˙˙˙‹D$<‹‹jô‹9hôteƒÆ‹9hôu׃ėURPčŒũ˙ƒÄ…ĀuŋD$0‰0é˙˙˙‹D$<‹‹jôëŅ‹T$<‹‹‹Hô‹jô9étƒÆ밃ėQR‰T$PčŊ‹ũ˙ƒÄ…Ā‹T$ uá롃ėUR‰T$P衋ũ˙ƒÄ…Ā‹T$ uë›‹t$4éH˙˙˙fffffUWVS臩ũ˙Ã—,ƒė‹t$4‹D$8‹l$0‹|$<)đ‰ÂÁøÁú…ĀŽÁāđ‰D$ v‹…Ātƒė˙7˙pč Ŗũ˙ƒÄ…Ā„ō‹F…Ātƒė˙7˙pčîĸũ˙ƒÄ…Ā„ã‹F…Ātƒė˙7˙pčĪĸũ˙ƒÄ…„܋F …Ātƒė˙7˙pč°ĸũ˙ƒÄ…„ѯ;t$ …x˙˙˙‹T$8)ōÁúƒút:ƒútƒútM‹D$8‰EƒÄ‰č[^_]‹…Ātƒė˙7˙pčZĸũ˙ƒÄ…ĀtCƒÆ‹…Ātƒė˙7˙pč=ĸũ˙ƒÄ…Āt&ƒÆ‹…Āt­ƒė˙7˙pč ĸũ˙ƒÄ…Āu™‰öŧ'‰uƒÄ‰č[^_]ƒÆ‰č‰uƒÄ[^_]ÂļƒÆ‰uëĶƒÆ ‰uëËffffUWVSč÷§ũ˙Ã+ƒė‹|$0‹D$49Įtr…˙u…Ātƒ˜˙˙ƒė Pčkœũ˙vƒė)ø˙t$*t šVķĻ”Āļƒė Pč Žũ˙ƒÄ„Āt$j˙ŗĀū˙˙˙ŗ\˙˙˙˙učūũ˙ƒÄeô[^_]Ívƒ˙˙uäh{PjVčɃũ˙ƒ˙˙ƒÄ j3P˙ŗ°ū˙˙貙ũ˙‰4$芗ũ˙ƒÄ륐t&¸ë…čä‹ũ˙‰Įƒė Vči—ũ˙‰<$č!˜ũ˙UWVS藞ũ˙Ã§!ƒė,‹t$@‹|$DD$‹Ģ”˙˙˙‰D$ 9ūu ë"fƒÆ9÷t‹ƒč 9čtđ‹T$ ƒÆč§ũ˙9÷uįƒÄ,[^_]ÃffffU‰åWVSč5žũ˙ÃE!ƒė<‹E‹U‹@;B„ĸ…ĀtPüƒėRP詅ũ˙‹EƒÄ‹@‹MƒĀƒė‰AEä˙uP‰EÔ腅ũ˙‹EƒÄ‹PBø+E rüÁø‰Á…Ā÷Ņ<Š~t&FøƒėƒîPVč ’ũ˙ƒÄ9ūuéƒė˙uÔ˙u č ’ũ˙‹EäƒÄƒč ;ƒ”˙˙˙ueô[^_]ÍUãč*Ļũ˙ëî‹U‹)ĐÁø…Ā…į‹u š)֍‰M˃ė Pč)Žũ˙ƒÄ‰EĐuЉuČtƒė˙u˙uČč̈́ũ˙ƒÄ‹E‹uЋ89} t!t&…öt ƒėWVčĒ„ũ˙ƒÄƒĮƒÆ9} uä‹U‹} F‰EĉƋJ9ΉMÔt)t&…öt ƒėWVčr„ũ˙ƒÄƒÆƒĮ9}Ôuä‹E‹@‰EԋE‹‹”˙˙˙‹8;}ԍEä‰EČu ëIvƒĮ9}Ôt6‹ƒč 9Čtī‹UȉMÄč4Ĩũ˙‹MÄëߍ 9ČvY‹u ¸ü˙˙˙ĮEĖ˙˙˙?)Öé˙˙˙‹E‹‰EԋEԅĀt ƒė Pčz€ũ˙ƒÄ‹U‹EĐ‰Ņ‰‰r‹UĖ‰Aéĸū˙˙ë3ës‰ÆëIéہų˙˙˙?wŸ‹u )օÉ…Žū˙˙ĮEĖĮEĐé´ū˙˙ƒė Pč”ũ˙ZYV˙uÄčS‰ũ˙ƒÄč ũ˙‹Eäƒč ;ƒ”˙˙˙tUãču¤ũ˙ƒė Vč<•ũ˙‰Æé‹UЉUăė P诓ũ˙‹EăÄ…Āt:ƒė˙uÄ˙uĐčūˆũ˙ƒÄ‹EЅĀt ƒė PčĢũ˙ƒÄčŖ€ũ˙č’ũ˙ƒė V腓ũ˙ƒÄ‹Eȋƒč ;ƒ”˙˙˙tĮUäčúŖũ˙ëŊ‰Æë(ƒė Pč[“ũ˙_XV˙uĐ蠈ũ˙ƒÄčX€ũ˙čÑũ˙‰đém˙˙˙跑ũ˙éM˙˙˙‰Æë›fffffffU‰åWVSčõšũ˙Ãƒė,‹“pū˙˙‹ƒĀƒø‰t eô[^_]Ãf‹E‹…Ō~íEäƒė˙u P‰Į‰EĐčC}ũ˙‰<$˙ŗ`˙˙˙čũ˙‹EäƒÄƒč ;ƒ”˙˙˙…"‹ŗP˙˙˙‹‹F9Á‰Īt:‰MˉEÔ덴&ƒĮ9}Ôt ‹ƒč ;ƒ”˙˙˙të‹UЃĮčŖũ˙9}Ôuãv‹MĖ‹E 1˙‰N‰EԍEã‰EĖ‹E‹…Āuëy‰öŧ'‹EƒĮƒEÔ98tbƒė˙uÔ˙uĐč”|ũ˙‹FƒÄ ;Fty…Ātƒė˙uĐP艁ũ˙‹FƒÄƒĀ‰F‹Eäƒč ;ƒ”˙˙˙t¯‹U˃Įčtĸũ˙‹EƒEÔ98u§‰öŧ'ƒė˙u ˙uč"†ũ˙ƒÄč:{ũ˙ƒė ˙p$č•ũ˙ƒÄeô[^_]Ít&ƒė˙uĐPVč#‚ũ˙ƒÄ둍Uãčĸũ˙éŅū˙˙‰Æëëú‹Eäƒč ;ƒ”˙˙˙tUãčõĄũ˙ƒė Včŧ’ũ˙ffffffU‰åWVSč%™ũ˙Ã5ƒė,‹“pū˙˙‹ƒĀƒø‰t eô[^_]Ãf‹E‹…Ō~í‹M Eä‰Į‰EԋčĨVū˙ƒėW˙ŗ`˙˙˙čFũ˙‹EäƒÄƒč ;ƒ”˙˙˙… ‹ģP˙˙˙‹‹O9ȉEˉÆt5‰MĐ됍´&ƒÆ9uĐt ‹ƒč ;ƒ”˙˙˙të‹UԃÆč0Ąũ˙9uĐuãv‹EĖ1ö‰GEã‰EЋE‹…Āuëg´&‹EƒÆ90tV‹E ‹°‹EÔčVū˙‹G;Gtp…Ātƒė˙uÔPčČũ˙‹GƒÄƒĀ‰G‹Eäƒč ;ƒ”˙˙˙tļ‹UЃÆčŗ ũ˙‹E90uŽt&ƒė˙u ˙učǃũ˙ƒÄč‚yũ˙ƒė ˙p$čW“ũ˙ƒÄeô[^_]Ít&ƒė˙uÔPWčk€ũ˙ƒÄ뚍Uãč^ ũ˙éčū˙˙‰Æëëú‹Eäƒč ;ƒ”˙˙˙tUãč= ũ˙ƒė Vč‘ũ˙ffUWVSčw—ũ˙Ã‡ƒė,‹t$@‹|$DD$‹Ģ”˙˙˙‰D$ 9ūu ë*fƒÆ 9÷t!‹Fƒč 9čtī‹T$ ƒÆ čãŸũ˙9÷u捴&ƒÄ,[^_]ÃU‰åWVSč—ũ˙Ã%ƒė8‹E˙0蒂ũ˙ƒÄ…Āt#ƒė PčR…ũ˙ƒĀƒÄ‰EЋEЍeô[^_]Íļƒė j讇ũ˙‰Á‰EĖ‹ƒˆ˙˙˙ƒÄƒĀ‰A‰EЋE‹p+pĮAĮAĮA ‰đÁøiĀĢĒĒĒ…Ā…ÔĮEȋEȋUĖ‹MƉB‰B‰r ‹U‹q‹R9ō‰UÔ„‰Įv…˙t‹ƒė‰‹F‰GFPGPčŌ}ũ˙ƒÄƒĮ ƒÆ 9uÔuԋE˃ė‰xP‹E˙0蠐ũ˙ƒÄ…‰Æ„˙˙˙ƒ˙˙}ähõPjWčĖzũ˙Xƒč˙˙ZP˙ŗ°ū˙˙čø~ũ˙Z“îúū˙YRPčé~ũ˙ZYVPčđvũ˙‰<$čxŽũ˙ƒÄéĮū˙˙=UUUw ƒė V耆ũ˙‰EȃÄé˙˙˙‹}Čéi˙˙˙‰Æë čDŒũ˙čŒũ˙‹EĖ‹@…Āt ƒė Pčœyũ˙ƒÄƒė ˙uĖčŽyũ˙‰4$č֎ũ˙‰Æëëƒė WčŽũ˙‰4$čŋŽũ˙ƒė PčVũ˙Y^W˙uČč[…ũ˙ƒÄčSzũ˙‰Æë›fffffffU‰åWVSč•ũ˙Ãƒė<‹E‹M‹u‹@;A„Û…Āt$‹Pôƒė‰‹Pø‰PPüƒĀRPčh|ũ˙‹EƒÄ‹@‹MƒĀ ƒėƒÆ‰A‹Fø‰E܋FüV‰EāEäP‰EÔč7|ũ˙‹EƒÄ‹Prč+u Bđ‰ņ)ōÁųzđiÉĢĒĒĒ…É~#‹Pėpôƒė‰Pø‹Pđ‰PüVPčĮˆũ˙ƒÄ9ū‰đuŪ‹M ‹E܃뉋Eā‰A‰Č˙uԃĀP蟈ũ˙‹EäƒÄƒč ;ƒ”˙˙˙ueô[^_]ÍUÛ辜ũ˙ëî‹M‹ )ČÁøiĀĢĒĒĒ…Ā…‹} ē)ĪR‰UĖÁāƒė P踄ũ˙ƒÄ‰EĐ}Љ}Čt ‹‹MȃėƒÆ‰‹Fü‰AAVPčM{ũ˙ƒÄ‹E‹uЋ89} t1t&…öt‹ƒė‰‹G‰FGPFPč{ũ˙ƒÄƒĮ ƒÆ 9} uԋM‹} F ‰EĉƋI9ΉMÔt9t&…öt‹ƒė‰‹G‰FGPFPčŌzũ˙ƒÄƒÆ ƒĮ 9}ÔuԋE‹@‰EԋE‹‹”˙˙˙‹8;}ԍE܉EČu ëJvƒĮ 9}Ôt7‹Gƒč 9Čtî‹UȉMÄ蓛ũ˙‹MÄëŪ9ĐvZ‹} ¸ü˙˙˙ĮEĖUUU)Īéāū˙˙‹E‹‰EԋEԅĀt ƒė PčŲvũ˙ƒÄ‹EĖ‹MЋ}@‰‰w‰Gélū˙˙ë3ës‰ÆëIé܁úUUUwž‹} )Ī…Ō…~ū˙˙ĮEĖĮEĐéƒū˙˙ƒė PčlŠũ˙ZYV˙uÄčq‚ũ˙ƒÄčiwũ˙‹Eäƒč ;ƒ”˙˙˙tUÛč͚ũ˙ƒė V蚋ũ˙‰ÆéŽ‹MЉMăė Pč$Šũ˙‹EăÄ…Āt:ƒė˙uÄ˙uĐč‚ũ˙ƒÄ‹EЅĀt ƒė Pč vũ˙ƒÄčwũ˙člˆũ˙ƒė Včã‰ũ˙ƒÄ‹Eȋ@ƒč ;ƒ”˙˙˙tƍUÜčWšũ˙ëŧ‰Æë(ƒė P踉ũ˙_XV˙uĐčŊũ˙ƒÄčĩvũ˙č ˆũ˙‰đél˙˙˙čˆũ˙éL˙˙˙‰ÆëšfffffU‰åWVSčU‘ũ˙Ãeƒė‹}‹u čárũ˙‹@$}€¸t"÷Æu:ƒė W˙փčeô[^_]Éöŧ'÷Æuƒė W˙Öë܋ƒė ‹t0˙W˙ÖëÎf‹‹t0˙랃ú„̓úuzƒė uäPčîˆũ˙‹‰$˙RZ˙u‰Â‰đčųŒũ˙_XVjč˙ƒũ˙‹EäƒÄƒč ;ƒ”˙˙˙tUãčF™ũ˙č1‡ũ˙ék˙˙˙‰Æë‰Æë‹Eäƒč ;ƒ”˙˙˙tUãč™ũ˙č ‡ũ˙ƒė Včā‰ũ˙ƒė uäPčtˆũ˙Y˙u1Ō‰đ臌ũ˙XZVj荃ũ˙‹EäƒÄƒč ;ƒ”˙˙˙tUãčԘũ˙čŋ†ũ˙éųū˙˙‰Æë‰Æë'ƒė Pč)ˆũ˙ƒÄč1uũ˙‹Eäƒč ;ƒ”˙˙˙tUã蛘ũ˙膆ũ˙ƒė Vč]‰ũ˙‰Æčv†ũ˙ƒė VčM‰ũ˙ffffffU‰åWVSčĩũ˙ÃŃė‹}‹u čAqũ˙‹@$}€¸t"÷Æu:ƒė W˙փčeô[^_]Éöŧ'÷Æuƒė W˙Öë܋ƒė ‹t0˙W˙ÖëÎf‹‹t0˙랃ú„Ņƒúu|ƒė uäPčN‡ũ˙‹‰$˙RZ˙u‰Â‰đčY‹ũ˙_XVjč_‚ũ˙‹EäƒÄƒč ;ƒ”˙˙˙tUãčĻ—ũ˙葅ũ˙1Āéi˙˙˙‰Æë‰Æë‹Eäƒč ;ƒ”˙˙˙tUãč|—ũ˙čg…ũ˙ƒė Vč>ˆũ˙ƒė uäPčŌ†ũ˙Y˙u1Ō‰đčåŠũ˙XZVjčëũ˙‹EäƒÄƒč ;ƒ”˙˙˙tUãč2—ũ˙č…ũ˙1Āéõū˙˙‰Æë‰Æë'ƒė P腆ũ˙ƒÄčsũ˙‹Eäƒč ;ƒ”˙˙˙tUãč÷–ũ˙čâ„ũ˙ƒė V蹇ũ˙‰ÆčŌ„ũ˙ƒė V詇ũ˙ffffU‰åWVSčŽũ˙Ã%ƒė‹}‹u čĄoũ˙‹@$}€¸t"÷Æu:ƒė W˙փčeô[^_]Éöŧ'÷Æuƒė W˙Öë܋ƒė ‹t0˙W˙ÖëÎf‹‹t0˙랃ú„̓úuzƒė uäP讅ũ˙‹‰$˙RZ˙u‰Â‰đ蹉ũ˙_XVjčŋ€ũ˙‹EäƒÄƒč ;ƒ”˙˙˙tUãč–ũ˙čņƒũ˙ék˙˙˙‰Æë‰Æë‹Eäƒč ;ƒ”˙˙˙tUãčŪ•ũ˙čɃũ˙ƒė V蠆ũ˙ƒė uäPč4…ũ˙Y˙u1Ō‰đčG‰ũ˙XZVjčM€ũ˙‹EäƒÄƒč ;ƒ”˙˙˙tUã蔕ũ˙čƒũ˙éųū˙˙‰Æë‰Æë'ƒė Pčé„ũ˙ƒÄčņqũ˙‹Eäƒč ;ƒ”˙˙˙tUãč[•ũ˙čFƒũ˙ƒė Vč†ũ˙‰Æč6ƒũ˙ƒė Vč †ũ˙ffffffU‰åWVSčuŒũ˙Ã…ƒė‹}‹u čnũ˙‹@$}€¸t"÷Æu:ƒė W˙փčeô[^_]Éöŧ'÷Æuƒė W˙Öë܋ƒė ‹t0˙W˙ÖëÎf‹‹t0˙랃ú„Ņƒúu|ƒė uäPč„ũ˙‹‰$˙RZ˙u‰Â‰đčˆũ˙_XVjčũ˙‹EäƒÄƒč ;ƒ”˙˙˙tUãčf”ũ˙čQ‚ũ˙1Āéi˙˙˙‰Æë‰Æë‹Eäƒč ;ƒ”˙˙˙tUãč<”ũ˙č'‚ũ˙ƒė Včū„ũ˙ƒė uäP蒃ũ˙Y˙u1Ō‰đčĨ‡ũ˙XZVjčĢ~ũ˙‹EäƒÄƒč ;ƒ”˙˙˙tUãčō“ũ˙čŨũ˙1Āéõū˙˙‰Æë‰Æë'ƒė PčEƒũ˙ƒÄčMpũ˙‹Eäƒč ;ƒ”˙˙˙tUã跓ũ˙čĸũ˙ƒė Včy„ũ˙‰Æč’ũ˙ƒė Vči„ũ˙ffffU‰åWVSčՊũ˙Ãå ƒė,‹};} ‹utK…öt;‹ƒė‰GPFPčHrũ˙YX‹G‰FG PF Pč3rũ˙XGZPFPč$rũ˙ƒÄƒĮƒÆ9} uļeô‰đ[^_]Ãë8‰Įë‰Įë]‹F ‹‹”˙˙˙ƒč ‰MÔ9ČtUįč÷’ũ˙‹Fƒč ;EÔtUįčä’ũ˙‰øƒė PčI‚ũ˙ƒÄ9utƒė ˙učf…ũ˙ƒEƒÄ9uuéč5oũ˙‹ƒ”˙˙˙‰EÔëŗ‰Æč“€ũ˙ƒė Včjƒũ˙fffffU‰åWVSčՉũ˙Ãå ƒėL‹E‹}‹p;p„‹…ötB‹Fėƒė‰FđPFPčAqũ˙‹Fô‰FYXFøPF Pč,qũ˙XFüZPFPčqũ˙‹EƒÄ‹p‹EƒÆƒė‰p‹‰EԍGPEØP‰EĀčķpũ˙‹GY^‰E܍G PEāP‰EŧčÛpũ˙XEäƒĮZWP‰E¸čÉpũ˙‹EƒÄ‹@HØ+M p܉Ę)ČÁúƒč$iŌÍĖĖˉEąŌ~A‹Fč~ėƒė‰FüWVč]}ũ˙X‹FđZ‰FFôPFPčH}ũ˙YXFøƒÆ PVč9}ũ˙ƒÄ;}ĉūuŋ‹EԋM ƒė‰‰Č˙uƒĀPč}ũ˙Y‹E܋M ^‰A‰Č˙uŧƒĀ Pčũ|ũ˙X‹E Z˙u¸ƒĀPčė|ũ˙‹Eä‹ģ”˙˙˙ƒÄƒč 9øu‹Eāƒč 9øu‹E؃č 9øueô[^_]ÍUĶčõũ˙ëڍUĶčëũ˙ëڍUĶčáũ˙ëڋE‹)ÖÁūiÆÍĖĖĖ…Ā…į‹u š)֍‰‰M¸Áāƒė PčÛxũ˙ƒÄ‰EĀuĀt;‹ƒė‰GPFPč|oũ˙YX‹G‰FG PF Pčgoũ˙XFƒĮZWPčXoũ˙ƒÄ‹Eƒė˙uĀ˙u ˙0č˛lũ˙x‹EƒÄ W˙p˙u člũ˙‰E´‹EƒÄ‹H‹09ņ„Eԋģ”˙˙˙‰MĉEŧë"ļ‹F ƒč 9øuQ‹Fƒč 9øu=ƒÆ9uÄtI‹Fƒč 9øtڋUŧčâũ˙ëЍ 9Ȇ‹u ¸đ˙˙˙ĮE¸ĖĖĖ )Öé ˙˙˙‹Uŧ跏ũ˙빋Uŧ譏ũ˙ëĨ‹E‹…Ét ƒė Qčkũ˙ƒÄ‹M‹U‰ȉ‹M´‰H‹E¸€‚‹U‰Bémū˙˙‰EÄëëW逋F ‹ģ”˙˙˙ƒč 9øtUÔčNũ˙‹Fƒč 9øtUÔč<ũ˙ƒė ˙uÄčĄ~ũ˙‹MƒÄ…ÉtMƒė ˙uĀčœjũ˙ƒÄč”kũ˙ƒė Pč{~ũ˙ƒÄ…˙t*‹EĀ9Į‰Æt-ƒė VƒÆ菁ũ˙ƒÄ9÷uíëƒė PčM~ũ˙ƒÄƒė Včqũ˙ƒÄ‹EĀ…Āu ëŦ‰Æé ųĖĖĖ ‡Ũū˙˙‹u )օÉ…čũ˙˙ĮE¸ĮEĀéíũ˙˙‰Æë‰ÆëEԃė Pčũ˙‰4$čFũ˙‹Eā‹ģ”˙˙˙ƒč 9øtUĶč^Žũ˙‹E؃č 9øtUĶčLŽũ˙ƒė Včũ˙‰Eċģ”˙˙˙éįū˙˙ëV‰Æ‹ģ”˙˙˙ëˉEċģ”˙˙˙ëč |ũ˙ëˋF ‹ģ”˙˙˙ƒč 9øtUÔč˙ũ˙‹Fƒč 9øtUÔčíũ˙ƒė ˙uÄč˛~ũ˙‰EÄëÆƒė PčD}ũ˙‹UƒÄ…Ō…Ÿū˙˙éįū˙˙‹ $ÃSƒėč…ũ˙ÃƒÄ[Ã...\n[ DEATH ] basic_string::substr%02X(null)\023autoTERMxtermxterm-colorxterm-256colorscreenscreen-256colorlinuxcygwinyestrue[0;3%sm[----------] [ RUN ] %s.%s, where %s = %s and ]]>]]>]]> 0 failed. ) was requested, )../src/gtest-internal-inl.hpthread_mutex_lock(&mutex_)failed with error pthread_mutex_unlock(&mutex_)Invalid shuffle range start : must be in range [0, ].Invalid shuffle range finish : must be in range [pthread_key_delete(key_)./src/gtest-port.ccOnly one stdoutstderrevent=TestCaseStart&name=event=TestProgramEnd&passed=event=TestPartResult&file=&line=&message=event=TestProgramStartevent=TestStart&name=Value of: Actual: Expected: Failure Unknown result type thrown in Unknown C++ exception, you tried test cases.%s %sevent=TestEnd&passed=&elapsed_time=msevent=TestCaseEnd&passed=[ OK ] (%s ms) %s from %s (%s ms total) TESTTESTS[==========] test casestest case%s from %s ran. (%s ms total)[ PASSED ] %s, listed below: %2d FAILED %s YOU HAVE %d DISABLED %s <>&'"&#xDeath test: Result: failed to die. Error msg: Expected: Actual msg: Exited with exit status Terminated by signal (core dumped) ./src/gtest-death-test.ccWARNING: has value "". has value , which overflows. , but have left unset. < , but you have Google TestNote: %s filter = %s Running %s from %s. The value of flag --Environment variable (ignoring case) Which is: The difference between is , which exceeds , where evaluates to , , and Expected: () <= ( vs ) != (), actual: " vs ") (ignoring case), actual: "not a substring of xmlunexpected status byte (CHECK failed: File , line posix::Close(read_fd())read_fd_ == -1detected threads.pipe(pipe_fd) != -1child_pid != -1close(pipe_fd[0])close(pipe_fd[1])Death test count (fastUnknown death test style "" encounteredclose(args->close_fd)chdir("") failed: execve(, ...) in ) < () >= () > ( is listed more than once. No test named You forgot to list test Test @-h-?/?--help|stack != MAP_FAILEDtestsuitestestsuiteCondition false failed. Attribute is not allowed for element <>.notrun /> <disablederrors this->size() (which is %zu)vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)Global test environment set-up.Global test environment tear-downXML output file may not be null Could not write to the test shard status file "%s" specified by the %s environment variable. Invalid index (%d) into TestPartResultArray. Cannot generate a number in the range [0, 0).Condition range <= kMaxRange failed. Generation of a number in [0, but this can only generate numbers in [0, Condition sockfd_ != -1 failed. Send() can be called only when there is a connection.stream_result_to: failed to stream to ./include/gtest/internal/gtest-port.hpthread_mutex_destroy(&mutex_)Condition 0 <= begin && begin <= size failed. Condition begin <= end && end <= size failed. CloseConnection() can be called only when there is a connection.Condition sockfd_ == -1 failed. MakeConnection() can't be called when there is already a connection.stream_result_to: getaddrinfo() failed: stream_result_to: failed to connect to Condition sizeof(Integer) <= sizeof(parsed) failed. capturer can exist at a time.pthread_mutex_init(&mutex_, NULL)event=TestIterationStart&iteration=C++ exception with description "Attempted redefinition of test case All tests in the same test case must use the same test fixture class. However, in test case to define a test using a fixture class different from the one used earlier. This can happen if the two fixture classes are from different namespaces and have the same name. You should probably rename one of the classes to put the tests into different event=TestIterationEnd&passed= Result: threw an exception. Result: illegal return in test statement. Result: died but not with expected error. Result: died but not with expected exit code: DeathTest::Passed somehow called before conclusion of test is expected to be a 32-bit integer, but actuallyThe value of environment variable Invalid environment variables: you have Invalid environment variables: we require 0 <= Repeating all tests (iteration %d) . . . Note: This is test shard %d of %s. Note: Randomizing tests' orders with a seed of %d . The default value %s is used. gtest_streaming_protocol_version=1.0WARNING: unrecognized streaming target "%s" ignored. pthread_key_create(&key, &DeleteThreadLocalValue)WARNING: unrecognized output format "%s" ignored. Error while reading death test internal: Death test child process reported Read from death test child process failed: posix::Write(write_fd(), &status_ch, 1)waitpid(child_pid_, &status_value, 0)Cannot run a death test outside of a TEST or TEST_F constructDeath tests use fork(), which is unsafe particularly in a threaded context. For this test, couldn't detect the number of threads.) somehow exceeded expected maximum (Condition typeid(*base) == typeid(Derived) failed. Condition !original_working_dir_.IsEmpty() failed. Failed to get the current working directory.basic_string::_S_construct null not valid can be found in this test case. pthread_setspecific(key_, holder_base)fcntl(pipe_fd[1], F_SETFD, 0) != -1sigaction( SIGPROF, &ignore_sigprof_action, &saved_sigprof_action)stack_size > kMaxStackAlignment && reinterpret_cast(stack_top) % kMaxStackAlignment == 0munmap(stack, stack_size) != -1sigaction(SIGPROF, &saved_sigprof_action, NULL)Unrecognized xml_element provided: Condition std::find(allowed_names.begin(), allowed_names.end(), name) != allowed_names.end() failed. Bad --gtest_internal_run_death_test flag: Reserved key used in RecordProperty(): class, so mixing TEST_F and TEST in the same test case is is defined using TEST. You probably want to change the TEST to TEST_F or move it to another test using two different test fixture classes. This can happen if the two classes are from different namespaces or translation units and have the same name. You should probably rename one of the classes to put the tests into different test cases." is not a valid POSIX Extended regular expression.the test fixture's constructor This test program did NOT call ::testing::InitGoogleTest before calling RUN_ALL_TESTS(). Please fix it.Condition 1 <= seed && seed <= kMaxRandomSeed failed. auxiliary test code (environments or event listeners)... Google Test internal frames ...ĐÜü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙āÜü˙đÜü˙Ũü˙Ũü˙ Ũü˙0Ũü˙@Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙PŨü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙`Ũü˙ Üü˙ũ˙0ũ˙0ũ˙0ũ˙ũ˙āũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙0ũ˙Đũ˙0ũ˙xũ˙unknown file./This program contains tests written using Google Test. You can use the following command line flags to control its behavior: Test Selection: @G--gtest_list_tests@D List the names of all tests instead of running them. The name of TEST(Foo, Bar) is "Foo.Bar". @G--gtest_filter=@YPOSTIVE_PATTERNS[@G-@YNEGATIVE_PATTERNS]@D Run only the tests whose name matches one of the positive patterns but none of the negative patterns. '?' matches any single character; '*' matches any substring; ':' separates two patterns. @G--gtest_also_run_disabled_tests@D Run all disabled tests too. Test Execution: @G--gtest_repeat=@Y[COUNT]@D Run the tests repeatedly; use a negative count to repeat forever. @G--gtest_shuffle@D Randomize tests' orders on every iteration. @G--gtest_random_seed=@Y[NUMBER]@D Random number seed to use for shuffling test orders (between 1 and 99999, or 0 to use a seed based on the current time). Test Output: @G--gtest_color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D Enable/disable colored output. The default is @Gauto@D. -@G-gtest_print_time=0@D Don't print the elapsed time of each test. @G--gtest_output=xml@Y[@G:@YDIRECTORY_PATH@G/@Y|@G:@YFILE_PATH]@D Generate an XML report in the given directory or with the given file name. @YFILE_PATH@D defaults to @Gtest_details.xml@D. @G--gtest_stream_result_to=@YHOST@G:@YPORT@D Stream test results to the given server. Assertion Behavior: @G--gtest_death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D Set the default death test style. @G--gtest_break_on_failure@D Turn assertion failures into debugger break-points. @G--gtest_throw_on_failure@D Turn assertion failures into C++ exceptions. @G--gtest_catch_exceptions=0@D Do not report exceptions as test failures. Instead, allow them to crash the program or throw a pop-up (on Windows). Except for @G--gtest_list_tests@D, you can alternatively set the corresponding environment variable of a flag (all letters in upper-case). For example, to disable colored text output, you can either specify @G--gtest_color=no@D or set the @GGTEST_COLOR@D environment variable to @Gno@D. For more information, please read the Google Test documentation at @Ghttp://code.google.com/p/googletest/@D. If you find a bug in Google Test (not one in your own code or tests), please report it to @G@D. GetParam()TypeParamthrow_on_failurestream_result_tostack_trace_depthshufflerepeatrandom_seedprint_timeoutputlist_testsfiltercolorcatch_exceptionsbreak_on_failurealso_run_disabled_testsinternal_run_death_testdeath_test_use_forkdeath_test_stylefastGTEST_SHARD_STATUS_FILEGTEST_TOTAL_SHARDSGTEST_SHARD_INDEXtest_detail.xml**DeathTest:*DeathTest/*DISABLED_*:*/DISABLED_**N7testing8internal12_GLOBAL__N_123ClassUniqueToAlwaysTrueE Stack trace: cū˙¸dū˙¸dū˙¸dū˙¸dū˙¸dū˙¸dū˙¸cū˙Øcū˙øcū˙dū˙8dū˙Xdū˙xdū˙¸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ū˙ gū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hgū˙hgū˙ˆgū˙¨gū˙Čgū˙čgū˙hū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙(hū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙Hhū˙°fū˙N7testing8internal26ThreadLocalValueHolderBaseEN7testing8internal26GoogleTestFailureExceptionEN7testing8internal9DeathTestEN7testing8internal16DeathTestFactoryEN7testing8internal23DefaultDeathTestFactoryEN7testing31TestPartResultReporterInterfaceEN7testing8internal24HasNewFatalFailureHelperEN7testing4TestEN7testing8TestCaseEN7testing11EnvironmentEN7testing17TestEventListenerEN7testing22EmptyTestEventListenerEN7testing8UnitTestEN7testing32ScopedFakeTestPartResultReporterEN7testing8internal27OsStackTraceGetterInterfaceEN7testing8internal18OsStackTraceGetterEN7testing8internal35DefaultGlobalTestPartResultReporterEN7testing8internal38DefaultPerThreadTestPartResultReporterEN7testing8internal12UnitTestImplEN7testing8internal17StreamingListener20AbstractSocketWriterEN7testing8internal17StreamingListener12SocketWriterEN7testing8internal17StreamingListenerEN7testing8internal27PrettyUnitTestResultPrinterEN7testing8internal17TestEventRepeaterEN7testing8internal24XmlUnitTestResultPrinterEN7testing8internal13DeathTestImplEN7testing8internal16ForkingDeathTestEN7testing8internal15NoExecDeathTestEN7testing8internal13ExecDeathTestEN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderEN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderEzD;@ä-ũ˙\TJũ˙ØTDKũ˙”‡TOũ˙¨dOũ˙ŧtOũ˙ФOũ˙ėÔOũ˙Pũ˙$4Pũ˙@DPũ˙¤TPũ˙¸„Pũ˙|Qũ˙´DQũ˙ātQũ˙dÄQũ˙œRũ˙ÔdRũ˙ ´Rũ˙DSũ˙|TSũ˙´¤Sũ˙ėôSũ˙$DTũ˙\”Tũ˙”äTũ˙ĖDUũ˙¤Uũ˙D$Vũ˙„ÄVũ˙đWũ˙X´Xũ˙œ”Yũ˙ôYũ˙ädZũ˙´Zũ˙TT[ũ˙Œä[ũ˙ÔD\ũ˙(d\ũ˙<¤\ũ˙dÔ\ũ˙x]ũ˙Œ]ũ˙ D]ũ˙ŧt]ũ˙ô¤]ũ˙,Ô]ũ˙d^ũ˙œ4^ũ˙Ôd^ũ˙ ”^ũ˙D Ä^ũ˙x $_ũ˙° „_ũ˙ė ô_ũ˙$!`ũ˙8!4`ũ˙L!”`ũ˙ˆ!ô`ũ˙Ä!4aũ˙đ!taũ˙("Äbũ˙l"ôbũ˙ "Äcũ˙Ü"$eũ˙#deũ˙@#¤eũ˙d#Äeũ˙x#4fũ˙ŧ#”fũ˙ $äfũ˙P$4gũ˙”$„gũ˙Ø$Ôgũ˙%ägũ˙0%Dhũ˙t%$jũ˙Ŧ%„lũ˙ä%´lũ˙&ôlũ˙D&$mũ˙h&Tmũ˙Œ&¤mũ˙Ė&Ômũ˙ā&nũ˙ô&¤oũ˙ā'Äpũ˙((qũ˙T(Dqũ˙€(¤qũ˙Ä(”rũ˙H)Dsũ˙Ŧ)ôsũ˙ä)uũ˙*Äuũ˙ *$vũ˙Ė*„vũ˙+ôvũ˙l+wũ˙€+wũ˙”+$wũ˙¨+Dwũ˙Ė+dwũ˙đ+„wũ˙,¤wũ˙8,Äwũ˙\,äwũ˙€,xũ˙¤,$xũ˙Č,Dxũ˙ė,dxũ˙-„xũ˙4-¤xũ˙H-Äxũ˙\-yũ˙¤-tyũ˙ė-´yũ˙.Ôzũ˙¨.äzũ˙ŧ.${ũ˙ā.4{ũ˙|/D{ũ˙/T{ũ˙¤/d{ũ˙¸/¤{ũ˙ä/$|ũ˙D0D|ũ˙X0~ũ˙ä0D~ũ˙1d~ũ˙,1Ä~ũ˙d1Ô~ũ˙x1$ũ˙´1tũ˙24€ũ˙„2‚ũ˙Ė2d‚ũ˙3´‚ũ˙P3ƒũ˙„3ƒũ˙˜34ƒũ˙Ŧ3Dƒũ˙Ā3tƒũ˙Ô3´ƒũ˙4„ũ˙P4$„ũ˙d4T„ũ˙Œ4t„ũ˙¤4¤„ũ˙Ė4Ԅũ˙ô4…ũ˙ 5T…ũ˙P5t…ũ˙d5„…ũ˙x5¤…ũ˙Œ5ô…ũ˙Ø5Ԇũ˙d6ä‡ũ˙Ŧ6Ԉũ˙đ6ĉũ˙47ôŠũ˙|7ä‹ũ˙Ā7ũ˙ø7´Žũ˙<8Ďũ˙P8ũ˙ˆ8dũ˙Ā8´ũ˙ø8Tũ˙T9„ũ˙ˆ9‘ũ˙đ9’ũ˙(:4’ũ˙\:d’ũ˙:“ũ˙ā:4“ũ˙ô:ä“ũ˙Œ;„•ũ˙t<¤•ũ˙ˆ<–ũ˙=ä—ũ˙8=d›ũ˙p=äžũ˙¨=äĸũ˙ä=§ũ˙”?ô¨ũ˙Ė?Ģũ˙@Ŧũ˙<@tŦũ˙”@­ũ˙Ô@”­ũ˙Ad¯ũ˙LAÔ¯ũ˙ A”°ũ˙Bô°ũ˙lBtąũ˙ĐB”ąũ˙Cd˛ũ˙˜CÔ˛ũ˙čCTŗũ˙LDtŗũ˙˜D4ĩũ˙EÄļũ˙LEÔˇũ˙ČE¸ũ˙(F4¸ũ˙˜Fd¸ũ˙āGôŋũ˙˜H4Áũ˙ÜH$Âũ˙ItĮũ˙dIdĘũ˙ŦIDËũ˙čITÍũ˙0JĪũ˙xJ¤Đũ˙āKäĐũ˙ LtŅũ˙ŦLÔũ˙¨MÖũ˙āM4Öũ˙ NdÖũ˙´Nd×ũ˙ OtØũ˙(QÄŲũ˙pQÛũ˙¸QDÛũ˙čQ¤Üũ˙0RŪũ˙xRäßũ˙˜Sdáũ˙āS”ãũ˙TTåũ˙`T4æũ˙˜TÔæũ˙Udéũ˙V´ęũ˙TVôëũ˙ŒV4īũ˙ W¤ņũ˙DW¤ķũ˙ÄW„úũ˙4XÄũũ˙|XÄūũ˙ÄXäū˙Yū˙@Y$ū˙ˆY¤ū˙ĖYD ū˙Z´ ū˙\ZÔ ū˙¤Zd ū˙ÜZtū˙[´ū˙L[Äū˙”[Ôū˙Ü[äū˙$\tū˙\\”ū˙ė\Ôū˙0]Äū˙x]T!ū˙Ā]ä#ū˙^'ū˙@^4'ū˙l^d'ū˙˜^d*ū˙Đ^”*ū˙ü^Ä*ū˙p_+ū˙Ŧ_d.ū˙ä_”.ū˙`Ä.ū˙<`T2ū˙t`„2ū˙ `´2ū˙a$4ū˙Čat5ū˙b7ū˙Hb´8ū˙Œbä8ū˙¸ct9ū˙„dÄ9ū˙¸dô9ū˙ādT:ū˙0e´:ū˙€ed=ū˙HfÄ=ū˙ŧf¤Bū˙gÔBū˙0gôCū˙tg$Dū˙ g´Hū˙ØgÄIū˙hdJū˙ThtPū˙œhÔQū˙āhRū˙i4Rū˙0itRū˙hiSū˙ŧi[ū˙ôi4^ū˙jdaū˙hkbū˙œkdbū˙Ėk¤bū˙länū˙Ll$sū˙¤läyū˙đo{ū˙8pä}ū˙ppԀū˙¨păū˙āp´†ū˙q¤‰ū˙¤sTū˙đs„ū˙¨t”’ū˙đt4•ū˙4u´•ū˙xu$šū˙°ud›ū˙$v”›ū˙ˆvěū˙čvĜū˙,wԝū˙pw4žū˙Øwtžū˙üw´žū˙ xŸū˙pxDŸū˙œx”Ÿū˙Øxԟū˙ y ū˙ty„Čū˙ z„Ëū˙XzÄÍū˙zäÖū˙ØzÄÜū˙ {Täū˙h{¤éū˙ė{Dîū˙8|Dīū˙Ä|tīū˙4}¤īū˙~4ķū˙\~dķū˙„~Tųū˙Ā~dúū˙ Düū˙\˙ū˙¨˙˙āt˙˙ €„˙˙d€T˙˙¨€„˙˙Ԁ¤˙˙ Ä ˙˙p$˙˙°´˙˙,‚´˙˙ ƒ˙˙„d˙˙Ė„T˙˙`…T˙˙˜…˙˙ä…ô˙˙Ŧ†Ô˙˙ä†˙˙ ‡ä˙˙D‡4 ˙˙€D ˙˙”T ˙˙¨t ˙˙Č” ˙˙č¤ ˙˙ü´ ˙˙Ä ˙˙,Ô ˙˙@ä ˙˙Tô ˙˙h!˙˙|!˙˙$!˙˙¤4!˙˙¸D!˙˙ĖT!˙˙ād!˙˙ôt!˙˙„!˙˙”!˙˙0¤!˙˙D´!˙˙XÄ!˙˙lÔ!˙˙€ä!˙˙”ô!˙˙T"˙˙h"˙˙|$"˙˙4"˙˙ØD"˙˙ėT"˙˙d"˙˙t"˙˙(„"˙˙<¤"˙˙`Ä"˙˙„ä"˙˙¨#˙˙Ė$#˙˙đD#˙˙d#˙˙8„#˙˙´#˙˙8ô#˙˙4T$˙˙|ä$˙˙Ä„%˙˙ô%˙˙tt&˙˙Ŧô&˙˙ô.t'˙˙8/Ô'˙˙Č<4(˙˙ >¤(˙˙X>)˙˙¨>Ô)˙˙ė>„*˙˙$?ô*˙˙\?„+˙˙äBd/˙˙`D”3˙˙ĐDô3˙˙E„7˙˙đE4;˙˙PFT<˙˙ĀF¤<˙˙G>˙˙8G$?˙˙pG„@˙˙¨G¤A˙˙(HC˙˙`H”C˙˙°JäD˙˙čJ¤E˙˙ KTF˙˙dKG˙˙¨K4I˙˙tLäI˙˙ôLdK˙˙,M4L˙˙pMTM˙˙8N„N˙˙|NÄO˙˙ėN„P˙˙0OTQ˙˙hOäR˙˙äOÔT˙˙,PÄU˙˙pPÔV˙˙¨P4Z˙˙đPä[˙˙ĀR^˙˙S¤`˙˙PSdc˙˙TUôc˙˙ŒUtf˙˙ÔUôh˙˙ÄVtk˙˙|WÔm˙˙¤\Äx˙˙(_ô‚˙˙Ė`„„˙˙a$‰˙˙@a”‰˙˙¸b4‹˙˙8c´Œ˙˙dTŽ˙˙Čeô˙˙|fD˙˙djē˙˙œjô“˙˙Čj$”˙˙ėjd”˙˙k””˙˙ũ˙SA…A ‡A†AƒN Q(B,A0H J(B,A0H ICÃAÆ AĮAÅč >ũ˙$ü >ũ˙2AƒNXA HAÃ$8>ũ˙"8T>ũ˙"Lp>ũ˙`l>ũ˙*A†hÆ4|€>ũ˙.A‡A †CƒNKA KAà AÆAĮ4´x>ũ˙.A‡A †CƒNKA KAà AÆAĮ4ėp>ũ˙.A‡A †CƒNKA KAà AÆAĮ4$h>ũ˙.A‡A †CƒNKA KAà AÆAĮ4\`>ũ˙.A‡A †CƒNKA KAà AÆAĮ4”X>ũ˙.A‡A †CƒNKA KAà AÆAĮ4ĖP>ũ˙.A‡A †CƒNKA KAà AÆAĮ0H>ũ˙0A†A ƒN$I(G,A0H CÃAÆ48D>ũ˙WA‡A †FƒN8Bũ˙TAƒNSAA HH AÃK H AÃG 4” >ũ˙bĘhA…B C‡†ƒq.R ÃAÆAĮAÅ A äČ>ũ˙øÔ>ũ˙8 ā>ũ˙TAƒNSAA HH AÃK H AÃG 8H?ũ˙TAƒNSAA HH AÃK H AÃG („(?ũ˙=AƒNZAA HHAÃ4°AƒNGB TH HAÃ(¨Hũ˙>AƒNGB TH HAÃ@@ŧHũ˙VA†A ƒNKB NCBA RH H AÃAÆ€„ØHũ˙ęA…A ‡A†AƒN0y AÃAÆ AĮAÅA MDŒũ˙yœAA…B C‡†ƒB.c ÃAÆAĮAÅ J l ÃAÆAĮAÅ I 4ˆ>|ũ˙/{AA…B C‡†ƒC.S ÃAÆAĮAÅ I DĀ>tũ˙ļaAA…B C‡†ƒ\.Đ ÃAÆAĮAÅ K ~ ÃAÆAĮAÅ A 4?ėũ˙ß@A…B C‡†ƒÆ.p ÃAÆAĮAÅ A DčCĖŦũ˙!@A…B C‡†ƒK.n ÃAÆAĮAÅ F H ÃAÆAĮAÅ E @0D”­ũ˙|ö?A…B C‡†ƒr.Ä ÃAÆAĮAÅ A j ÃAÆAĮAÅ A LŒIĐŽũ˙’A‡A †AƒN T,D0H j Cà AÆAĮH dCà AÆAĮ<ÜI ¯ũ˙aA†A ƒN P,D0H [  CÃAÆE L CÃAÆDEP¯ũ˙U?A…B F‡†ƒD.ĸ ÃAÆAĮAÅ F  ÃAÆAĮAÅ H 4LE(ąũ˙‚A…B C‡†ƒB.W. l ÃAÆAĮAÅ J R ÃAÆAĮAÅ C D„Fđˇũ˙Į>A…B C‡†ƒB.W. l ÃAÆAĮAÅ J R ÃAÆAĮAÅ C 4ĖF¸¸ũ˙–>A…B C‡†ƒx.Ą ÃAÆAĮAÅ F DGēũ˙ƒ>A…B C‡†ƒE.„ ÃAÆAĮAÅ F U ÃAÆAĮAÅ C DLG(˙˙í ų>A…B C‡†ƒ˜.u ÃAÆAĮAÅ J U ÃAÆAĮAÅ H @ŦL žũ˙<A†A ƒNHDD D$D(D,A0E,C CÃAÆDØGœžũ˙đ˙>A…B C‡†ƒH.— ÃAÆAĮAÅ H e ÃAÆAĮAÅ H D HDÁũ˙…?A…B C‡†ƒz.Ē ÃAÆAĮAÅ C R ÃAÆAĮAÅ K DhHŒÃũ˙…?A…B C‡†ƒz.Ē ÃAÆAĮAÅ C R ÃAÆAĮAÅ K 4°HÔÅũ˙?A…B C‡†ƒ.đ ÃAÆAĮAÅ F (NŧČũ˙/A†HIEDF HCÆ(,NĀČũ˙,A†EIEDF HCÆ4@IÄČũ˙˙Ū>A…B C‡†ƒo.đ ÃAÆAĮAÅ H (NŒËũ˙-A†HHDDD JCÆ(ŧNËũ˙*A†EHDDD JCÆDĐI”˙˙- Ą>A…B C‡†ƒ:.o ÃAÆAĮAÅ F U ÃAÆAĮAÅ H 80OLËũ˙4A†A ƒNH D$D(D,A0E,C CÃAÆ4TJPËũ˙X¯>A…B C‡†ƒl.& ÃAÆAĮAÅ E (¤OxÎũ˙-A†HHDDD JCÆ(ĐO|Îũ˙*A†EHDDD JCÆ4äJ€Îũ˙†Š>A…B C‡†ƒ~.8 ÃAÆAĮAÅ A (4PØŅũ˙/A†HIEDF HCÆ(`PÜŅũ˙,A†EIEDF HCÆ4tK "˙˙f>A…B C‡†ƒb.¤ ÃAÆAĮAÅ A 8ŦKx#˙˙—S>A…B C‡†ƒ{.Å ÃAÆAĮAÅ A n.LQÜ'˙˙kA…A ‡A†AƒN0OA…B C‡†ƒf.‰ ÃAÆAĮAÅ H 4pLTŌũ˙H#>A…B C‡†ƒ.y ÃAÆAĮAÅ G D¨LlĶũ˙Ÿ>A…B C‡†ƒ^.Š ÃAÆAĮAÅ G D ÃAÆAĮAÅ A @đLÄÔũ˙“Ũ=A…B C‡†ƒt.¯ ÃAÆAĮAÅ D W ÃAÆAĮAÅ A (LR Öũ˙(A†A ƒNE P AÃAÆ|xRÔ&˙˙’A…A ‡A†AƒN0{ AÃAÆ AĮAÅG C4C8A’a‰˙˙ +7M]˙˙FbÄ˙˙$uĢēĖ˙˙ ]ĢŌÍ˙˙BLāƒ“˙˙-V€ž˙˙ +xû™˙˙BNŋ`“o˛„ĮŽ˙˙ep¸yáÜ˙˙6Å?ĨGĮuš ˙˙&:´BíMŅn´Ė˙˙#IâZ˜sâ{˙ŗâú˙˙!@šHÁuL˙˙Roû‰@Úö˙˙*&/ÎEk&Û—ō ‰ŲÛÉ˙˙$ChÂā˙˙§ÅÎÛĒĨ˙˙'ąđäׯė—Ä’Ē˙˙'ģđđ×ίé—Á’Ē˙˙-ŠôŪÚŧû÷ߤS÷ŠÕ˙˙-˛¤įŠÅŋ¨§ŒÔS§ē…˙˙ (>–uB˙˙#CЍ˙˙ 1E`˙˙ ;g‚˙˙:i°ÂšĪËõŊ˙˙6yÔ‘ėĖÔ‘į˙˙?Yâ´O˙˙ 1a}˙˙ 1a}˙˙BɘÁ§ŒũD˙˙9ŠŧŌĀĒ´×°ęÂŽ°Ö‚°ņš˙˙9ŠãŌŨ¤ŲŅįäߍįÃōį¯đ˙˙4§æįšō‰„˙˙ &:U˙˙"/;ōHė[âeØm•¯f˙˙7;āƒŽįâ˙˙!,ØšģŠˇÜAŠö‘e˙˙!'åĸŅąÍäNžŒ§e˙˙$™Éų•˙˙!L"­ŠĄá@­Ö˙˙3éeí‡Åé’˙˙!L"­ŠĄá@­Ö˙˙, ébí„Åé’˙˙¤6Mˆ^æę×›ôæƒ˛ēæĐņķ›’ęĸˆĶ›ę-ęŖ@ú ôAęũæĒęÄ0ķ  +ī Ō “ õ ;ķ à "­ ü ü › Cķ æ ęŒ ­ ÷ Č ī ˙˙H"­{Šã>­Ö˙˙.vK…˙˙,8“JĘU÷jō˙˙ BˆĖč˙˙aM]¸ mĢ }ž ”‘ ´„ Ę÷ Ûę ęŨ ųĐ Œà ›ļ ąŠ Âœ ԏ âíáŽ˙˙JBúSŅbŧú˜ä§äđú†•—ā¯ÜĀØĪūˇ˙˙#<(œiŧˇ˙˙/+NĖZØoš|¯‡ī—âîĖę˙˙TŒ‰•ą˙˙#4&múˆRígåØõŠ˙˙"!#Zšv;Į@žŠŽŋ˙˙Ul*¤š´˙˙Me ™‰Š˙˙E] ‘Ą˙˙$3*pSĮŖũoũđ“Ļ˙˙!#Všu¨˙˙5!ĄÕįđ6šŌÍ/‹4üÂâ÷Œ˙˙+3Žp*“Žø˙˙+?} ąĄÁ˙˙imč…ņ•˙˙9Q9¤Žķnšš¤´.˙˙-#ßbځߠ˙˙-#ībęī°˙˙¤*ßŌī˙˙Um Ą‘ą˙˙e|*´ĒÄ˙˙2t#ĮŠÂČĮœˆ˙˙5•įŦ*úÚįõ˙˙+&8ĩ\&„•€°<„˙9šŧ.„°˙˙)5§HĩVąå˙˙'RÁ]ÎŒ{˙˙A2JĄY—nÉz›Œ—œŠ¨ũēÚĘÍØÖČ˙˙2t&ŪŦÚĖŪ´ĸ˙˙$u"Ąŗ'í ļ‘ąÆ˙˙$u"¤ŗ'í š‘´É˙˙$}•"´ģ/ũ ÉĄÄŲ˙˙$}•"´ģ/ũ ÉĄÄŲ˙˙ũ• ÉšŲ˙˙0#=ļOŽs&ĒŦĀĮ<Ē–9˛Ķ7Ēū˙˙5/ŨIâ[ī&ė¸ëĶ<ėĸ9įßCė°˙˙;)5ĻHņbútö˜&°Ņōė<°ģ9õøB°Ō˙˙#1HXīlíyŗŋŽ˙˙1Iž›öŅE›Ē˙˙\b‚xwŖū‚ãŖž˙˙ 0™9Āģ˙˙ +6z_<˙˙;~ĶÁâ˙˙&3šŒū˙›ŊĮņ%Œú˙˙2zO‰˙˙6.4*ĶoĮ{§ŨļŠąģĀÉŅą˙˙6+1*ĶlĮx§ŠŨšļĻą¸ĀÆŅą˙˙r˜ĸšŠ˙˙4d)ú —Ãú’˙˙6 ,R*ÍŠ–Ãæū/ŧčÖLޔȠ˙˙63*ĶnĮz§ŒŨœļ¨ąēĀČŅą˙˙%{!ā¤ŪiāŲ3ŗÛ˙˙+E`ÃÕ4Ŧ˜ņą&ÊŦ—ž˙˙,ŠĀÅÎÛČîĘˆÄū¨˙˙†:Lš pŒ– 0Ä ã– ë€ š į– ü— ŽJž €— •jĄ Ä– Ú0ü Č– Üá ę'– ĸ0É ’ :–  ž œ – ē aĀ û ˙˙N_w­ëĖ]­´…Õ­ß%—ŸŊŖėRŸÉÁæŸŧæ˙˙4L.Ũ‹5î˙˙˜0t´‹û Äį Íã Øš ũ㠙ށŖ ´ Ŋ‹ Čáí‹ ƒ˜‰Ëώ¯ŗē‰ÛŗŽÆÜ† ž ´ Ū ö Œ ˙˙3“Ė!åûˆ°Ø˙˙!Q8đšéđ˙˙/ 83åsŽ|ãĩ"Īßã‘åĘ÷˙˙+Me+…§c–ǞŪЁŲ˙˙(nE}˙˙5$AũP¤ƒũžãÄ-€ëũŪ˙˙D'?ĻÜėōƒ¯”†ĩ¯Éōôܰņō‘%Üí˙˙$HĘ_ņœU˙˙$HĘ_ņœU˙˙$HĘ_ņœU˙˙!>÷\&õ˜Ēē÷ƒõđ˙˙šEK— cƒ v!— Ēí Á$— ø× — ˛Á É— īĢ †"— ģ• Đ— ƒ –— ļđÉ— ėß˙— ĢΞ— ŪŊņ— ”Ŧ§— Ķ™æ— †ķ™— Ā#”˙˙ž”Í›ĢŗÔˇåįŽë掏 ˛ ßÔ æā äû ëŽ !äÅ īØ !ä ķĸ 2äę ũ äĻ æĒˇ„'œß˙˙M%NŌWč`ėxÆ‹ėŊĩŌ!ė†ų› ėÎ×ãė“č†s˙˙M"@ßXôm!ߥãļ!ßęŊ˙!ßŗ™Č!ßüΑ߰I¸˙˙M"@ßXôm!ߥãļ!ßęŊ˙!ßŗ™Č!ßüΑ߰I¸˙˙Px‡ĪģŠÎ9ĪšŒ¯0Īōų‡!ΎæĖ7Ī’ĶĨĪÄWĘ˙˙O'DuÕŠėŧ9ÕˆŲ0Õā¯õ!ÕĨ‰ē7Õ€Â“Õ˛IĒ˙˙ĀÔņÛĪķō÷ƒ§ŽĢ†îŠōÜŸđĻü¤— ĢĒ !¤á ¯ô !¤Ģ ŗž 2¤† Đ™ ¤ ĻÆ ÷ #ÜŸ˙˙g'ArßĻöš0ßīã‚ßĨ¸-ßø¯‹ß¸œË,ßũ‰ßŗšÆßåFÚ˙˙hu„ŗšĸÎ7ŗ‹đžŗÁŨÔ-ŗ”ʧŗÔˇį4ŗĄ´ŗ×éęŗ‰RŠ˙˙'h&Ä ĀĀÄ”Š˙›eX2AėfuļĒ;˛Čā…īũ‘Š ŲˇčŗČ$øŧŸ‰‚ }˙˙(,ÃAæVÔmĐ¯Š×Ē˙˙-EÃUǞŅĨ˙˙$ķ1–EĒcšî˙˙:•\Ÿ‹†˙˙I8&yž‹‹§áɏ×ĢßĪųĄ‡ī˛‹ėšžÜ˙˙SDĸē õď"ŸÆŪčž ø— œö īËëŒÄÕīė*Ĩ šīš˙˙%@û… æÁÜûöŒ˙˙\=FÚĢĶŧ Ÿú‡áÅÚŨ"ĐƒÚĄ˙š"¨ß˙…Ŋ"ÁÃŊú˙˙#E…Pä}”*ĪÂ߀˙˙ P€Ž˙˙‘Q]Ę e‘ ˆ!† ĩ Ŋ€ Å„ ęŒ ōĐ …į é æ† ‹× ›õ ĘŦ ‡† ĒļæžĮÆ!ēđíøæ ‰Ų •ķą‰˙˙#'DØO°`Ø›UĢ˙˙Ģ?~Úũ ü¤ ŸŠēš ÕÛ ķķŽé””Ÿ¨įå û… –å Ļŋ4ũ‹ÖŸ?ĒáÖ‰ ÷ ũĢ ŋ ,—î ž ũģ ‰Ķ ÚÛ ‰ā ’Ĩ˙˙:@NŸĨļ‰Ë˙ŨõōëŠáŸ×ĨČ˜°˙˙:4j¯ŊÆāÛü혂´šĐ¯ėĩˆ¨¸˙˙G„AŲĐōË‚ž–ēĢ­ˇ˙ÉûØîėéõÚ¸ą˙˙ !6Zz–˙˙FŠÃūŽåÆĖåĖGŖ˜ŧÚÖÜčŪũā—ŦČø/ĒšĀÂ’ ĄĢ ¨Å ¯Ķ ļč Ņû Ձ ŲØ vÛ Žņ “‡ ˜˜ Ē Ÿŋ ŊŌ ŋØ ÁØ‚įŪũô“Ф ļļËĖŪâäøāņÕ˙˙_Nié|öˆƒšĒ‰ļâČūĐšĮ{Îį†–ĘœœåöÔŨŠ˙˙Š Gq… ‰ū Ąˇ °Ø ÃûÚ° íŦ ķß ’Däú ôö ‡Š –š œž žžŒ Îô á“ đĨ ƒĄ ’ ˜¤ ī ˙˙>ĒaŖĒš˙›%äø×㉎™˙˙PGŠĖąÚ˙˙'ąāæÅÄÁÚä˛Ļŧ˙˙JVŲm€¤\˙˙O:+t•}ĸ†ĻžĒąĻãģø!ĻŦĖÁ Ļôŋ‰Ļšĸ˙˙P82yĮ‚á‹ŨŖĖļŨčģũ!ŨąĒÆ ŨųîŽŨžáé˙˙P82yĮ‚á‹ŨŖĖļŨčģũ!ŨąĒÆ ŨųîŽŨžáé˙˙P82yĮ‚á‹ŨŖĖļŨčģũ!ŨąĒÆ ŨųîŽŨžáé˙˙P82yĮ‚á‹ŨŖĖļŨčģũ!ŨąĒÆ ŨųîŽŨžáé˙˙:+ņKÂ\”k‹–õ•ĒâŋÎ˧Î˙˙3%5ĸA‡\ĀŠ_ķ‹ž$Ņ­čģL˙˙7 2đAÕVãąßÃŨįßķ‘ž„ßë&˙˙‡ÖŌÁ‰Õ8Ō¯Z˙˙ 5vYmq˙˙FF–ŸŪ3Ã÷Ũŧ’ÃĄ¤ßĪá˙ž‡áĸĪÂá˙˙PaĸÅ{˙˙PhŧÕû¸ŧØ˙˙Kb´Ę폴Đ˙˙PGŠĖąÚ˙˙*pŦ*äÚô˙˙*€ŧ*ôę„˙›ŒĘö‚B’ŠBĒÉBÁéBßĘJ‚ņJˆ‘KÃ÷ĘąKæļKūģK•ĀKŗÅKÖĮKÜÉKëHĪ ËKō ōK™ ōOš ™PÚ šPī ŲPŽ ČOŠ ĪOÄ ŦOå ŗOû ēO‘ ÁOĻ ’Lģ ÅM× ėMė ŒNŦN–ĖNĢėNĀŒO’ÖOšëO™č9ęAäLëOŗÃAĐŊëOĸœCšĒCĪŖCäÆCúŋC¸CĻąCŦí<ĪŲëOŊŋAÔģAęˇA˙ŗA•ŦAĢĨAąá?ö \ëOį!Ũ?ū!Ų?”"…?Š"ÆJŋ"ÂJÕ"žJÛ"ÃIĻ%aëOœ&ŋIŗ&ģIÉ&ˇIŪ&ŗIô&ŦIŠ'ĨI'áG°(YëOž)ŨGĩ)ŲGË)ÕGā)ÎGö)ĮGŒ*ĀGĸ*šG¨*ŲEö-JëOÕ.ÕEė.ŅE‚/ÍE—/ÉE­/ÂEÃ/ģEÉ/÷Cđ0RëO×1đCî1éC„2âC™2ÛC¯2ÔCÅ2ÍCÛ2Ø>á2‡:ē6ëO9‰C‚:ß>ã<č<ëO˙›YO!LŧŲîų´•Ŧ#ÆŌüŗŽ—Ô%ÚŽĩÕæ˙˙ O*ķ‹m üķĻL†˙˙É8O'ĸŽ• •čĸ‘“ĀÕĸîĶ€īČĸáčķî§ĸ׊ĸŦˆž„îĸ˙€Ōĸųųā¸ÜĖØß)ĩšÜĘœī˜û  ˜Ø ˜ĸģ˙˙†,F@ö ›¤ ­ú ßö ˆ šļ Äö íŒ ˙æ Šö Ōâ äą ›ö ´Í Ɛ øö ‹Ô Ė Íö ŪŖ —nö Į ˙˙Ģ.HdΝŌՄέā ŋž éÎ’§ ¤‘äÎúôŒÁ ļÎÜûîũ ˜Îž Đ™ …ÎŽ• Āä ę렮 ŽÎō×Ü „Îø ˙˙B%-ęBāSeä â‘ —ž õŽ …”Ģë Í”Ŗä Û6˙›E82)‹˜ōŽ–ąœé”ā„˙Čø“Ž}˙˙V!mÆ›IÕûE’āÕ€ĘäÆęŦÆŠüŊ@ÆŗĘĐՍ÷Õ˙˙7oÚĸ[˙˙$HVŖ÷’ŸŲˆŸŋ˙˙$FU‹ëƒ‡Áđ‡§˙›90))éίÃĘãû!“ÅÜøũ˙›E8C6´-ŠŗŪˆ‘ŽŲ†Ōöņē놥}˙›i_c“Ęâ"í‡(Â"€į…“ŠĪ퓇ŋ§“èûު獿ë˙›ˆ3Ú ZCÖ Ā× ŌĘ â˙ ˆŌ ĶÚ ß˙ÜÖ éIŪ ūÖ Š­ ķÖ ‡š §Ö ßÎ “ É ¨ Ō Ä Œ ‡ É Î ˙˙?Į]ęå˙˙-9đUĐƒ“‘ˇš“ŽĐÜđŽ˙˙9D™ˇ°Øāíõ§Į¤ŽŦĮļí‰Â˙˙6Į?ÚÕ˙˙ygčsė‘öĸƒŽÂؐė­ßčîÃ˛Ę Ĩî,­ ĶŅųč‹ē¨ĩč ĩã˙˙ @–äü˙˙)7ąŦ˙˙.”LŠWĘ……˙˙K¨āī ƒ •ī ŸBôá— ÚË â— ėĄEī  E— ę ū ˙˙23ZÕÚíZÖßŌëŠķŌ•Ú­Í˙˙ "*o‹˙›U>:x\ĸØŦÔû”ĘžÆŧÚƒūŽ}}0$($˙›U>:x\ĸÚŦÖũ–Î ĘžŪ‡‚’}}Ø#Đ#˙›U>:x\ĸØŦÔû”ĘžÆŧÚƒūŽ}}€#x#˙˙DƒÖHÛ ĸ *ë ˙›U>:x\ĸÚŦÖũ–Î ĘžŪ‡‚’}} ##˙˙ L͍K˙›mec?ÅōŠ"Ÿ¯(ę"˛ĨÅɁ“ŧņĮÅįÚŠÅ­ĀÕėÚ˜˙˙3Ÿ?ŧQŸˇ˙›!3tHzWvÖæņ}˙›eX:Oį^Ž ˆ Ũ˛‚îvūā˙Û”ÍŖžšĨÎŖ÷Ë•8Š }˙˙5J’Yšˆ1˙˙5J–YŊŒ1ā- *-@Ļޞŗ˛§˛˙´œ˛˛ŗ ŗ Ēŗ˛ô˙´ŗ ŗ Ēŗ˛!ŗô˙´ŗĮ€Ôųœ&L   ä§0Ļ8Ļõū˙o8\L Ņ °0`ūØņˆ ū˙˙oøđ˙˙˙ođ˙˙o.ęú˙˙oP­Ö æ ö   & 6 F V f v † – Ļ ļ Æ Ö æ ö &6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö&6FVfv†–ĻļÆÖæö  & 6 F V f v † – Ļ ļ Æ Ö æ ö !!&!6!F!V!f!v!†!–!Ļ!ļ!Æ!Ö!æ!ö!""&"6"F"V"f"v"†"–"Ļ"ļ"Æ"Ö"æ"ö"##&#6#F#V#f#v#†#–#Ļ#ļ#Æ#Ö#æ#ö#$$&$6$F$V$f$v$†$–$Ļ$ļ$Æ$Ö$æ$ö$%%&%6%F%V%f%v%†%–%Ļ%ļ%Æ%Ö%æ%ö%&&&&6&F&V&f&v&†&–&Ļ&ļ&Æ&Ö&æ&ö&''&'6'F'V'f'v'†'–'Ļ'ļ'Æ'Ö'æ'ö'((&(6(F(V(f(v(†(–(Ļ(ļ(Æ(Ö(æ(ö())&)GCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)´0.ÚĐ˙ ˙0˙P˙p˙€˙˙ ˙°˙Ā˙Đ˙ā˙đ˙ 0@P`p€ °ĀĐāđ 0@P`€ Āā @`)3ĐX0‡Ā˜`nĐuPqĐ€P`°[c€k𡰭` eĐ ‡` Ø@+pZА`Ļ0C€[ā[`€ [ā!Šp"DĀ#š€$Ž0%Ļā%+(­Ā(}@*Æ+0,%`-5 .ļ`/É00Ā1å°3ę 4°5]9§Ā:-đ<†€?ˇ0)į@BŽĐB|PE|ĐG|PJQ°Lí  W- Đa`c—hkph’jzk’0m’ĐnC oy r(Đr)s3@s)ps3°s’Pužv’°wn xx xčy°{ߐ|m€ppå`ƒˆđ„š°…Ũ‰ÕpßPŽX°Ž2đ‘ÄĀ“Ŧp•`Еā—Ĩ›“0—О“p —ĸöŖĪ *ÍŪ… KĶŅ^’ĩēsp?std=%2@Ŗ'2‹1'2ŋ'2ŽÕ'2ņ'2(2‘2(2’X(2“s(2”(2•Ģ(2–Á(2—Í(2˜ķ(2™)2š9)2›d)2œ)2ž•)2 ļ)2ĄŌ)2ĸí)2¤ *2§-*2ĒR*2Ŧr*2Ž*2°¨*2ąÎ*2˛č*2ŗ+2´+2ĩ6+2ļP+2ˇ,2¸&,2šE,2ēd,2ģƒ,2ŧŽ,2ŊÉ,2ŋę,2Á-2Â%-2ÃE-2Äe-2ń-2ƚ-2Įē-2ČÚ-2Éú-2Ę.2Ë1.2ĖH.2Íf.2΅.2ĪŖ.2ĐÂ.2s‹2 Ž‹2 Ž‹mG3SôŪ3\3^ ­7Į4Y 6÷4_)  įî4c<  m4gO ) ūO0ĸ( įĻ8•’“Ļ8—“Ļ8Ļ8Ļ8Ļ8 )ŨĮ’“Ũ—“ŨŨŨŨ tl9ų’“l9—“l9l9l9l9ö›úA’“úA—“úAúAúAúA wŦéđvë'%ŦHė %'âōĶYdá‹į‹4eqö‡ņ%†į‹į‹ltúÛ%Ŗį‹į‹)C’ %Įí‹í‹đEŦäđáí‹ũ6 ?í‹í‹đį‹ī?+3ķ‹)ķ‹í‹đŗ&ôķ‹Mķ‹í‹đ'âfųķ‹qķ‹đ4ũuŠš4‹ų‹?ŠH {?Ēį‹0($%Éų‹ų‹eof([?U4,es?ų‹tX5ŧQ%2˛4Év6<%ŦH71''â=ēT;˙‹ŒeqAØ:%^ŒŒltEˇ¯%|ŒŒ)ITE %  Œ ŒđEŦMpôđē Œũ6Qŋ6 ŒŪ ŒđŒī?U#`ŒŒ Œđŗ&Y°:Œ&Œ Œđ'â]ŒJŒđũuaNdŒŠHeCēƒŒ0(iã%ĸŒŒeofm6U4q/LŒ65Œ66J67d<ļ7c˛g5Ŋ %zD8\} 1-8_đ˜8`æņ`8c}m 8dƒ×;8qDJ›×;8sZe›Ą Oé8yq› %ņīĘ8\Ą2-8_đņ`8c§m 8d­×;8qÉĪŐ×;8sßęŐː Oé8yöŐ %‚Üū p į h ņ!Đō Č*"į CSҐČ*Ą#æ\Ґ %- y$( h!C´ !=ŧ xņ˜ zņ` {m  |(ˆ y4;§ ˜6`_ ‚ f_ ƒ"  Um ”$ %BŦ –h%ęX —h%Šb ˜j 3 ›Ø ķ&(×%2&•p%7ē'&ĄŠ%Bû'D7 ĩŽ4é(Šu ŋSę%} ƒ ‘(ž´ Ãnš%š   ‘)7w ĮÃ˙ŗ š ã)÷H Ëz0Ė Ō ã)„ķ Ī•9å đ ãh(Ļō Ū°đČ* ã(dÜ â’&Č*$ 4 ãĄĄ˛%!Ã/ãX hhĄ)tû íāOk v ãĄ* U%ŧWpŠ • ãĄ+44 ‘5Č*­ ŗ ã,™w%o Č*Į ãĄh+ö $ũČ*đ ö א+ö (QČ*  ŨČ*+ē  ,C*ã1 7 א+Û§ 2Ŗ­ÃO U א+õ‰ 6VÃm s א*ųŖ :¤‡  Ũ+oŋ AôŖhĨ ĩ אh´'*}Ä K‘#É Ū אhh´'+; S+hö  אhh+ģŖ [#% ) א´'°& d’VI Č*´'hė? mâyi Č*´'h$â vy6‰ Č*h'%iT ŠDŠ Č*ÃÃiT Ž^É Č*ĪĪiT “Ė@é Č*Č*Č*iT —|Ü Č*´'´'& œ€Ô %( hh*Ü%ÔęF< Q Ũhhh* „%ƈęe k Ũ-D7 ¯mØé.~P ēŒ ’ Ũ/~P%ąĸ ­ ŨĄ~P%ŠŊ Č Ũī~P%ˇØ í Ũīhh~P%Áũ ŨīhhĄ~P%Í'<Ũ´'hĄ~P%ÔL\Ũ´'Ą~P%ÛlŨh'%Ą.}P "’Ũ %0¤F *õļÁŨī0¤F 2(lõÚåŨ´'0¤F =Q×õū Ũ'%0 ā fZÜÃ"(Ũ0 ā q—3ĪAGא1end yč‰Ã`fŨ1end „ ^Ī…א0:Š ‡Ũįž¤Ũ0:Š –„-ÛŊÃא01 Ÿn įÜâŨ01 ¨ŦŨÛûא0öŋ Ôúh א0EŦ ÚJh9?א0+× ß_JhX^א2D%´ŒsƒŨh'%2D ú”˜ŖŨh0íX ˜EhŧÂא2õĸ%õ<×âŨh2æi -Už÷ũŨ0Ŗ› 5yÁ%א0čę Dņ°ˇ5@אh0čę U|ëĢYdŨh1at kœ§ˇ|‡אh1at ĪlĢŸĒŨh0˜A ĩhėõÃÎŨī0˜A ž×zõįōŨ´'0˜A Į„mõ Ũ'%0Į%DTŲõ/:Ũī0Į%UېõShŨīhh0Į%)ųöõ‘Ũ´'h0Į ˙ũ™õĒĩŨ´'0Į%ņõÎŪŨh'%2Šn -Ö ķūŨ'%3'â%ōßõ!Ũī0'â ^Ģõ:OŨīhh0'â%ę)õhxŨ´'h0'â zˆ‹õ‘œŨ´'0'â ŠƒØõĩÅŨh'%2– ŗ8ÚīŨÃh'%0– ãßõŨhī0– ų_1õ1KŨhīhh0–%g ãõdyŨh´'h0– "+cõ’ĸŨh´'0– 9‹ŽõģĐŨhh'%0– KÔÉÃéųŨÃ'%0"M dGõ"Ũhh0"M tØĖÃ;FŨÃ0"M%†9—Ã_oŨÃÃ0Čą §ķ.õˆŨhhī0Čą Ŋ õļÕŨhhīhh0Čą%“õîŨhh´'h0Čą ęŨáõ!6Ũhh´'0Čą sŽõOiŨhhh'%0Čą °Aõ‚—ŨÃÃī0Čą 'M$õ°ĘŨÃô'h0Čą <]_õãøŨÃô'0Čą QØõ+ŨÃÃh'%0Čą vü°õD^ŨÃÃČ*Č*0Čą € 3õw‘ŨÃô'´'0Čą ‹ņ1õĒÄŨÃÃÃÃ0Čą •`4õŨ÷ŨÃÃĪĪ+î%›mõ)Ũhhh'%+ß%¨ˆõA[Ũhh´'h˛Ņ Ü ¸Č*h'%Ą4ˆ%˜yČ*ĸh'%Ą0ŗ&%ŌLjhģĐאČ*hh2|%y+åđŨõ0uv Ôô´' א0ö %$G´'(.א0Ä  ,Q“GMא0ũ6%āÅhf{א´'hh0ũ6 I˞h”¤אīh0ũ6 XWqhŊÍא´'h0ũ6%÷i›hæöא'%h0ü6 vĻ hאīh0ü6% c1h8Mא´'hh0ü6 ”•hfvא´'h0ü6%ÄhŸא'%h0é3 ŗ%„h¸Čאīh0é3%/āŽháöא´'hh0é3 ŅOˇhא´'h0é3 ä-h8Hא'%h0Ŗ ķQQhaqאīh0Ŗ%>æshŠŸא´'hh0Ŗ .íh¸Čא´'h0Ŗ $Ä:´'Ũ´'´'ĄŸ4Ūļ%{ ÷Č*t–JČ*Č*Č*Ąō Ë>GČ*Ļ‹Č*Č*Č*ĄėŪļ áˇHČ*Ķ‹Č*Č*Č*ĄM°%ãė Ä:Č*ŨČ*Č*Ą­ '%5^î(5ŖĄņ6zG6 Y@C pĩ6į  ‚!Đō ("į h x  ‘(ː#æ  ‘ %- y•$( Ļ  !C´ !8 =ŧ x‚ņ` {Ąm  |­ˆ ˇ8;§ ŧ8`_ ‚ĩ6f_ ƒē6 Um ”=!%BŦ – %ęX — %Šb ˜j 3 ›ņ" !&(×%2Ļ &•p%7S(&ĄŠ%Bû'D7 ĩa—%‘(Šu ŋ‘„""‘ː* U%ŧUŖ"Ž"‘ː+44 .â(Æ"Ė"‘,™w%oLu(ā"‘ː +ö $ô‹( ##‘+ö ( Ŋ('#2#‘(+ē  ,#¨‘J#P#‘+Û§ 2Ü h#n#‘+õ‰ 6Ã/Ü †#Œ#‘*ųŖ :Č #Ļ#‘+oŋ Ae5 ž#Î#‘ ´'*}Ä Kâ›â#÷#‘  ´'+; S˜˜ $$‘  +ģŖ [Kz%7$B$‘M(°& d@đb$(M( ė? mé‚$(M( $â v*ģĸ$( <%iT ŠP´Â$(Ü Ü iT ŽŦÂâ$(č č iT “ˆ8%(((iT —¨_"%(M(M(& œ~ %A%  *Ü%Ô)ģU%j%‘   * „%ÆŌį~%„%‘-D7 ¯›%‘.~P ēĨ%Ģ%‘/~P%ąģ%Æ%‘ː~P%ŠÖ%á%‘+‘~P%ˇņ%&‘+‘  ~P%Á&0&‘+‘  ː~P%Í@&U&‘M( ː~P%Ôe&u&‘M(ː~P%Û…&š&‘ <%ː.}P "Ģ&ļ&‘ %0¤F *´\1‘Ī&Ú&‘+‘0¤F 2"1‘ķ&ū&‘M(0¤F =Œ€1‘'"'‘<%0 ā f/1Ü ;'A'‘0 ā q;ôč Z'`'‘1end yĻlÜ y''‘1end „Ÿ&č ˜'ž'‘0:Š ŨŠ!ˇ'Ŋ'‘0:Š –ĻĒô Ö'Ü'‘01 ŸĒĻ!õ'û'‘01 ¨ÎÚô ((‘0öŋ Ô5& 3(9(‘0EŦ ڊƍ R(X(‘0+× ßķ q(w(‘2D%IŒ(œ(‘ <%2D úEą(ŧ(‘ 0íX íî Õ(Û(‘2õĸ%õ›Ôđ(û(‘ 2æi - ))‘0Ŗ› 5&r%/)5)‘0čę D)§Đ N)Y)‘ 0čę UnÄ r)})‘ 1at kō Đ •) )‘ 1at IÄ ¸)Ã)‘ 0˜A ĩūÂ1‘Ü)į)‘+‘0˜A ž|1‘* *‘M(0˜A ĮÚ1‘$*/*‘<%0Į%Dē1‘H*S*‘+‘0Į%Uû'1‘l**‘+‘  0Į%)¤"1‘š*Ē*‘M( 0Į ˙_#1‘Ã*Î*‘M(0Į%sy1‘į*÷*‘ <%2Šn -7ū ++‘<%3'â%ōŠ(1‘/+:+‘+‘0'â ^ë/1‘S+h+‘+‘  0'â%˜\1‘+‘+‘M( 0'â zO1‘Ē+ĩ+‘M(0'â ŠŌO1‘Î+Ū+‘ <%2– ŗ¸ßķ+,‘Ü  <%0– ãÁZ1‘!,1,‘ +‘0– ųŊ51‘J,d,‘ +‘  0–%gTŠ1‘},’,‘ M( 0– "’1‘Ģ,ģ,‘ M(0– 91‘Ô,é,‘  <%0– K|žÜ --‘Ü <%0"M dÄ 1‘+-;-‘  0"M tÜ1Ü T-_-‘Ü 0"M%†%ÄÜ x-ˆ-‘Ü Ü 0Čą §€­1‘Ą-ļ-‘  +‘0Čą Ŋ˛-1‘Ī-î-‘  +‘  0Čą%v1‘.!.‘  M( 0Čą ęđ1‘:.O.‘  M(0Čą Š91‘h.‚.‘   <%0Čą lí1‘›.°.‘Ü Ü +‘0Čą 'ũn1‘É.ã.‘Ü Ü M( 0Čą < …1‘ü./‘Ü Ü M(0Čą Qæ=1‘*/D/‘Ü Ü  <%0Čą v%1‘]/w/‘Ü Ü ((0Čą €ķ1‘/Ē/‘Ü Ü M(M(0Čą ‹;ž1‘Ã/Ũ/‘Ü Ü Ü Ü 0Čą •Ÿķ1‘ö/0‘Ü Ü č č +î%› Ô1‘(0B0‘   <%+ß%¨’1‘Z0t0‘  M( ˛Ņ ÜĐą(˜0 <%ː4ˆ%˜Gč(ģ0 <%ː0ŗ&%Ō…ž Ô0é0‘(  2|%Eū0 1‘1‘0uv ­ŸM("1(1‘0ö %JM(A1G1‘0Ä  ,X¸ `1f1‘0ũ6%ā΍ 1”1‘M(  0ũ6 IJņ ­1Ŋ1‘+‘ 0ũ6 X0Œ Ö1æ1‘M( 0ũ6%÷bŽ ˙12‘<% 0ü6 v¯Ū (282‘+‘ 0ü6% ß5 Q2f2‘M(  0ü6 ”‹v 22‘M( 0ü6%ēŨ ¨2¸2‘<% 0é3 ŗYĒ Ņ2á2‘+‘ 0é3%/ ú23‘M(  0é3 Ņ A (383‘M( 0é3 äX Q3a3‘<% 0Ŗ ķ6Ė z3Š3‘+‘ 0Ŗ%>{X Ŗ3¸3‘M(  0Ŗ NЍ Ņ3á3‘M( 0Ŗ $ĮŖ ú3 4‘<% 0ũ 2B #434‘+‘ 0ũ%Soq L4a4‘M(  0ũ Q1 z4Š4‘M( 0ũ%_ҁ Ŗ4ŗ4‘<% 0É  qŅ_ Ė4Ü4‘+‘ 0É %jĐ" õ4 5‘M(  0É  ˆ% #535‘M( 0É %n0 L5\5‘<% 0Än ą G, u5…5‘  0) ÄZ÷ %ž5Š5‘+‘0)%“­Ö %Â5×5‘  +‘0)%ĸy{ %đ56‘  +‘  0)%´Ã %(636‘M(0)%Á %L6a6‘  M(0)%Ķī %z6”6‘  M( =!­ <%5^îû5ŖĄ‚66Xē, „P9>7\a!3^7 ÅO aG cí N ן Đ cĀ đ6€ G“€ _Ô€ €:€ Ž€ Ķ:€ Qπ Õ"€€ Ä° ø‘Ę E5„ 6ņ€€71™!g—7 "Å mŌ )Ž ĄĘ aA • ÕR€€7¤!Ä7 ņũ  W ‚Į ž–€€7‹°!ĩë7 G~ š ?  &û€€8Čüā:9 !J8:n!j:0š!%. !+818^‘;Y!>8^‘ %<ß!˙Ī6<‹a!J—70,y!BDaJ8|8‡8vQJ80,y!SÛVJ8 8°8vQJ8J800É!všˆÂūÉ8Ô8vQÂū0ÍA!ü˛Âūí8ø8vQÂūdec!9=fí!9>hex! 9=ڟ!9=%ļ!9 >oct!9@=´j!9€?J“!9?bÔ!"9?ƒ:!&9?ą!)9?Ö:!,9?TĻ!/9 ?Ø"!39@=Ä!69°=û‘!99J?H5!<9=!N:V8=„W!Q:=…Į!V:=ôũ!Y:>app!lY:ø8>ate!oY:=ÃÎ!tY:>in!wY:>out!zY:=•!}Y: <Í;!‰Ä7>beg!Œž:Ŗ:>cur!ž:>end!’ž::Ro‘:Sd‘:T1':\…‘:eŸ‘:hš‘:iΑ8:„¸=@ĩ];/;?;ÔL %ÚL. ĩ€P;`;ÔL %ÚL3,wĀH?Qx;ƒ;ÔLQ%ļÃG;3,wl@õQ§;˛;ÔLs^3,wÉŦ?QĘ;Õ;ÔL,3,wÜ*?Qí;ø;ÔL%3,wôšQ<<ÔLā3,wõ=ÚQ3<><ÔLu3,wā4?QV<a<ÔLm%­ '%5^î(3f&;ļ›_ã‘‹<›<ÔL´'Âū3ūß;Ōļã‘ŗ<š<ÔLAput;”.ã‘Ņ<Ü<ÔLÜ<v>'%3 š;?Yžã‘ ==ŽÕ_%ÔL_%3,w;i>?ã‘,=7=ÔL %3?t;?ŖÛã‘X=c=ŽÕ%ÔL%3\;?)ã‘„==ŽÕuÔLuB¤=;?&­ã‘Ŧ=ŽÕ,ÔL, ŗlš>Cčpã=`č7č7č7CŲp>`7:7:7:CŒsp!>`Æ:Æ:Æ:Cŗhp@>`îBîBîBCę%p_>`š@š@š@Cœ:p~>`/A/A/ADô™p`M‘M‘M‘ Hí)WÉ?EL×)[îB×>Ä:îB`îBîBîBîBES*)[7:?Ä:7:`7:7:7:7:E˙ )[Æ:9?Ä:Æ:`Æ:Æ:Æ:Æ:EZw)[š@j?Ä:š@`š@š@š@š@E™ )[/A›?Ä:/A`/A/A/A/AFš)[M‘Ä:M‘`M‘M‘M‘M‘ ė`@õ‘(¤F*\FMķ>¤N >˜O6FPXA>ŖFQ>ĸ$FR:ƒ>ø&Üå>ú%I_TpFÄ6ĩ?ˆ; ,É$š…F%Ëō$š % uĸ$מF%Ëō$× %77$*ZˇF UÁ ”) ö{*\jG%%\*ažFņ­*^5%iĒ*bĪF%"ļ*cĪF%ąj*dĪF ë­*_54ãČ*gšĪF"GĪF4ãČ*nQzūF;GūF4Wß*u°ŸĪFTGĪFSWß*|-)ūFūFˇF h+`ÚG%|+e5%ų+f5GCÍ+lĸG¨G5GCÍ+pˇGĮG555I_T15I_T258jgwH1strG<HüGH÷ß<BT@Î H5H%5 %ÚLø8U?Î4ÚGKH[H%5 %ÚL­ '%5^î(5ŖĄņ|H€9D, ‰F8\I‡9-8_đģN8a^)×;8qÂHČH36×;8sØHãH3696Oé8yķHūH36 %VTë8hī8i"IŒæđI‡H0×8\~I <×;8qEIKIu6×;8s[IfIu6{6 Oé8yrIu6 % Äü@vĻI˛´'˛´'°ö%Ģ@oëI ~I+Ē6@rÍĻ%ŅIáIE666I_Tp´'ĻI •đ*„RJ ˇF%Ņ*‰´'(ĩž*Œp:^)%J+JK6(ĩž*ĀķB‘BJHJQ6ü.´'đI"IW*ZëVXl>*Į K "I!ļ+*ÉĻI!PŖ*ʡF!3'*Ë K"~æ*Í´JēJ6"~æ*ŌĘJÚJ6‡662Š*āŗoīJõJ6+ŅĻIYÆ%<-*nđKŅ;*]î;Z]3*éiJ<ņ­*b5<ë­*c5< ~*f´'<}*g´'\K€Xņ`*õ6ģN*öB‘ˆ*øëVžw*ũtXŗ*˙Q6"2§*ßXåXų6]2§*õXYų6ÄX"2§*YYų6˙6ŽX+öÎ* 4ŸŽX8Y>Y7+íE*lܘXVY\Y7+ˆF*(IŖXtYzY7+MA*I5 7’Y˜Yų6+MA* 4šX°YģYų6 %+÷E*(\ƒ 7ĶYŲYų6+÷E*/ƒšXņYüYų6 %+ãz*796%ZZ77šX+Ą!*;TE%FdQdÄ7Ö7.]§bdmdÄ7 %3¤F§ĖÜ7…ddÄ7Ö72'âč-¨ĨdĩdÄ7ģcĐ70 ā#ÕŖ‹cÎdÔdÄ70 ā,ĀC—cídķdâ71end5z‹c eeÄ71end>{Ķ—c+e1eâ70:ŠG J¯cJePeÄ70:ŠP×+Ŗcieoeâ701YŽ›¯cˆeŽeÄ701bEŖc§e­eâ70öŋŽM˜ģcÆeĖeâ70+ד;ģcåeëeâ72DÉ“äffÄ7ģcOc0íXŪe8ģc)f/fâ70Ŗ›įĻČ%HfNfâ7bõĸAIgbfmfÄ7ģc0čę qËsc†f‘fÄ7ģc0čęCķcĒfĩfâ7ģc24 mĘfÕfâ7ģc1at6¤ķscíføfÄ7ģc1atH˛cggâ7ģc0˛mSū(sc4g:gÄ70˛m[¨ĀcSgYgâ70ŽncڑscrgxgÄ70Žnk„c‘g—gâ70öz‰ [c°gļgÄ70ö‚.ÄgcĪgÕgâ72Šn‘KęgõgÄ7Đ721ĩé9 hhÄ73–kÆ&‹c(h8hÄ7‹cĐ72–0ĐüMhbhÄ7‹cģcĐ70"M}Î+‹c{h†hÄ7‹c0"MœĖĒ‹cŸh¯hÄ7‹c‹c2|ĒfŨÄhĪhÄ7Ü72æiģ>‚ähęhÄ72”ĐĢũ˙hiÄ7ģcĐ7b˛Uáéĩ#i3iÄ7đĐ72ũ•Á•Hi]iÄ7‹cģcĐ72üÃF­ ri‚iÄ7‹cī0zŽ˜¸ģc›iĢiâ7ģc´'2Jųœ,ĀiËiÄ7[c3M =‹cãiîiÄ7‹c3M™‹cjjÄ7‹c‹c.äž0jEj`B‘Ä7B‘B‘ģc.žĀędjyjÄ:B‘Ä7B‘B‘ė.?,—“j¨jÄ:B‘Ä7B‘B‘Ę7I_Tp5ŖĄä_6¸&6Ÿûc ķŦ$šėj%Öņ$š'%­ '%<8\ĻkÚD-8_đģN8ač7L*8bô7ņ`8c˙7m 8d8×;8qKkQk8×;8saklk8#8Oé8y|k‡k8 %VU<8hī8iėjŒæî7ėj ø% HÖm ‰H OOl ėj%ROl%ÔÅSOl%  TOlG‰HVükl/8G‰HZll/858)đøeŖū/l:l/8;8#ˆHCl/8 %ģNM|F_lhÎKbG%]3¤ˇk=ŧnėj(šbq!ĖA8˜lžlG8(šbuhü58ĩlģlM8(Ä yį˜vlŌlØlM8G.ô|įlílG8G.ôülmG8S8vlG.ô‚m&mG8đG.ô†5mEmG8đS8G-ôŸTm_mG8 %(-§iOlvmmG8đ)ŨŽ|z”m¤mG8Olđb=øˇ¯+¸mÃmG8đI_Tpî7ŖĄėjĢkt ÖëtÖ_mցmÖjl֞lÖģlĢk}âî7ģNãOlL*ä‡Fņ`å’Fm æFˆįG;§é I`_ęëtf_ëđt-ėđ=ŧîėj^ũĨnĢnY8T^ŧnĮnY8_8‰nT^/ŨnōnY8}ne8_8n.^>ooY8k8.]§$o/oY8 %3¤F§s:q8GoRoY8k82'âčhÔgowoY8}ne80 ā#ÕMno–oY80 ā,å•Yn¯oĩow81end5{†MnÎoÔoY81end>”øYníoķow80:ŠG“‚qn ppY80:ŠP‚cen+p1pw801Y[qnJpPpY801bĖcenipopw80öŋŽBŋ}nˆpŽpw80+דåų}n§p­pw82DÉ ¤ÂpŌpY8}nn0íXŪ"ö}nëpņpw80Ŗ›į% qqw8bõĸA ‡$q/qY8}n0čę Dį5nHqSqY8}n0čęŅļAnlqwqw8}n24 €-Œq—qw8}n1at6$5n¯qēqY8}n1atHuAnŌqŨqw8}n0˛mSN€5nöqüqY80˛m[ ÛAnrrw80ŽncˆĖ5n4r:rY80Žnk­AnSrYrw80özHnrrxrY80ö‚ č)n‘r—rw82Šn‘S˙ŦrˇrY8e821ĩšĖrŌrY83–k’>MnęrúrY8Mne82–0Áôs$sY8Mn}ne80"M}TŪMn=sHsY8Mn0"MœEMMnasqsY8MnMn2|Ē'?†s‘sY8q82æiģ4æĻsŦsY82”Đ)ÅÁsŅsY8}ne8b˛Uáƒ×åsõsY8đe82ũ•ÁŠT ttY8Mn}ne82üÃFp?4tDtY8Mn80zŽ_Ü}n]tmtw8}n´'2Jųœ>"‚ttY8n3MûCMnĨt°tY8Mn3M™†MnČtØtY8MnMnI_Tpî75ŖĄėj6U6đäÛm ŗˇ4¯1u˜4ŗæģN4´č7ņ`4ĩ˙7Pč7 ú¸3oIuc3q ­7c=8\vĒI-8_đģN8aĻ8L*8bŦ8ņ`8c˛8m 8d¸8×;8q¨uŽuĐ8×;8sžuÉuĐ8Ö8Oé8yŲuäuĐ8 %VÖ'8hī8iIuŒæ3Iu :u H3x ‰H OŦv Iu%RŦv%ÔÅSŦv%  TŦvG‰HVYv_vâ8G‰HZnvyvâ8č8)đøe¸(Œv—vâ8î8#ˆH vâ8 %ģNMLKŧvhÎK2L%]3¤v=ŧnIu(šbq77ô8õvûvú8(šbuœ“č8ww9(Ä yžĶv/w5w9G.ô|DwJwú8G.ôYwdwú89ĶvG.ô‚xwƒwú8đG.ô†’wĸwú8đ9G-ôŸąwŧwú8 %(-§ˆõŦvĶwŪwú8đ)ŨŽûĐņwxú8Ŧvđb=øˇKx xú8đI_Tp3ŖĄIuv5 ÖMÖŧwÖŪwÖĮvÖûvÖwv}â3ģNãŦvL*äWKņ`åbKm æmKˆįuL;§é”N`_ęMf_ëR-ėđ=ŧîIu^ũyy 9T^y$y 99æxT^/:yOy 9Úx99nx.^>eypy 99.]§yŒy 9 %3¤F§$9¤y¯y 992'âčûÄyÔy 9Úx90 ā#žŌĒxíyķy 90 ā,&ļx zz*91end5ņĒx+z1z 91end>΂ļxJzPz*90:ŠGT6Îxizoz 90:ŠPËnÂxˆzŽz*901Y˙Îx§z­z 901b‡“ÂxÆzĖz*90öŋŽâåÚxåzëz*90+דPŠÚx{ {*92DÉ+A{/{ 9Úxnx0íXŪ҃ÚxH{N{*90Ŗ›įS¨%g{m{*9bõĸAēہ{Œ{ 9Úx0čę Ž"’xĨ{°{ 9Úx0čęEožxÉ{Ô{*9Úx24 ĻBé{ô{*9Úx1at6q”’x || 9Úx1atH|Užx/|:|*9Úx0˛mSQL’xS|Y| 90˛m[Ôĸžxr|x|*90ŽncR’x‘|—| 90ŽnklĐžx°|ļ|*90öz.‰zxĪ|Õ| 90ö‚? †xî|ô|*92Šn‘„Ę }} 9921ĩMH)}/} 93–k°°ĒxG}W} 9Ēx92–0ļUl}} 9ĒxÚx90"M}Œ/Ēxš}Ĩ} 9Ēx0"MœSĒxž}Î} 9ĒxĒx2|ǤÕã}î} 9$92æiģ†Ž~ ~ 92”ĐT~.~ 9Úx9b˛UáĐB~R~ 9đ92ũ•Á+fg~|~ 9ĒxÚx92üÃF5‘~Ą~ 9Ēx¸80zŽŌ Úxē~Ę~*9Úx´'2JųœËāß~ę~ 9zx3M€Ēx  9Ēx3M™í˙Ēx%5 9ĒxĒxÚxI_Tp35ŖĄIu6ō6ãô8x’-8\€ŗP-8_đģN8al9L*8br9ņ`8cx9m 8d~9×;8qģÁ–9×;8sŅÜ–9œ9Oé8yė÷–9 %Ví#8hī8i\Œæũ\ ÚŦ HF‚ ‰H Oŋ€ \%Rŋ€%ÔÅSŋ€%  Tŋ€G‰HVl€r€¨9G‰HZ€Œ€¨9Ž9)đøeYõŸ€Ē€¨9´9#ˆHŗ€¨9 %ģNMURĪ€hÎK;S%]3¤'€=ŧn\(šbqLē9Ā9(šbuœâŽ9%+Æ9(Ä y’æ€BHÆ9G.ô|W]Ā9G.ôlwĀ9Ė9æ€G.ô‚‹–Ā9đG.ô†ĨĩĀ9đĖ9G-ôŸÄĪĀ9 %(-§˜ŋ€æņĀ9đ)ŨŽõQ‚‚Ā9ŋ€đb=øˇ˛Ī(‚3‚Ā9đI_TpũŖĄ\€  Öe‰Ö΁ÖņÖڀցÖ+€}âũģNãŋ€L*ä`Rņ`åkRm ævRˆį~S;§éĒU`_ęe‰f_ëj‰-ėđ=ŧî\^ũƒƒŌ9T^,ƒ7ƒŌ9Ø9ų‚T^/MƒbƒŌ9í‚Ū9Ø9‚.^>xƒƒƒŌ9ä9.]§”ƒŸƒŌ9 %3¤F§°ëę9ˇƒÂƒŌ9ä92'âč͂׃įƒŌ9í‚Ū90 ā#ŧÂŊ‚„„Ō90 ā,ŅZɂ„%„đ91end5ÃŊ‚>„D„Ō91end>!É‚]„c„đ90:ŠGÚ á‚|„‚„Ō90:ŠPˇ(Ղ›„Ą„đ901Y§ á‚ē„Ā„Ō901b 'ՂŲ„ß„đ90öŋŽ"í‚ø„ū„đ90+דËí‚……đ92DÉŧ`2…B…Ō9킁‚0íXŪCĮí‚[…a…đ90Ŗ›įÅÔ%z…€…đ9bõĸAĐ´”…Ÿ…Ō9í‚0čę vĀĨ‚¸…Ã…Ō9í‚0čę/są‚܅į…đ9í‚24 <‹ü…†đ9í‚1at6DĨ‚†*†Ō9í‚1atHDdą‚B†M†đ9í‚0˛mSGĨ‚f†l†Ō90˛m[¤]ą‚…†‹†đ90ŽncÍ=Ĩ‚¤†Ē†Ō90ŽnkO ą‚ÆɆđ90özi}‚â†č†Ō90ö‚l;™‚‡‡đ92Šn‘‡'‡Ō9Ū921ĩ‘=<‡B‡Ō93–k^iŊ‚Z‡j‡Ō9Ŋ‚Ū92–0%䇔‡Ō9Ŋ‚í‚Ū90"M}`Ŋ‚­‡¸‡Ō9Ŋ‚0"Mœ íŊ‚҇á‡Ō9Ŋ‚Ŋ‚2|ĒĀ,ö‡ˆŌ9ę92æiģwÖˆˆŌ92”Đŋž1ˆAˆŌ9í‚Ū9b˛Uá UˆeˆŌ9đŪ92ũ•Á …zˆˆŌ9Ŋ‚í‚Ū92üÃF0¤ˆ´ˆŌ9Ŋ‚~90zŽĩHí‚͈Ũˆđ9í‚´'2JųœrōˆũˆŌ9‚3M,aŊ‚‰ ‰Ō9Ŋ‚3M™-ÕŊ‚8‰H‰Ō9Ŋ‚Ŋ‚í‚Ŋ‚I_Tpũ5ŖĄ\6č68ŒK‚j68\.НU-8_đģN8a7:L*8b=:ņ`8cH:m 8dN:×;8q͉؉f:×;8sé‰ô‰f:l:Oé8yŠŠf: %Vã8hī8it‰Œæ%:t‰ x¸ H^Œ ‰H O׊ t‰%R׊%ÔÅS׊%  T׊G‰HV„ŠŠŠx:G‰HZ™Š¤Šx:~:)đøeōˇŠÂŠx:„:#ˆHˊx: %ģNMQWįŠhÎK7X%]3¤?Š=ŧnt‰(šbq|˜Š: ‹&‹:(šbu`Ö~:=‹C‹–:(Ä y§XūŠZ‹`‹–:G.ô|o‹u‹:G.ô„‹‹:œ:ūŠG.ô‚Ŗ‹Ž‹:đG.ô†Ŋ‹Í‹:đœ:G-ôŸÜ‹į‹: %(-§ëb׊ū‹ Œ:đ)ŨŽ”Œ,Œ:׊đb=øˇ0@ŒKŒ:đI_Tp%:ŖĄt‰3ŠËF Öx“Öį‹Ö ŒÖōŠÖ&‹ÖC‹3Š}â%:ģNã׊L*ä\Wņ`ågWm ærWˆįzX;§é™Z`_ęx“f_ë}“-ėđ=ŧît‰^ũ-3ĸ:T^DOĸ:¨:T^/ezĸ:Ž:¨:™Œ.^>›ĸ:´:.]§Ŧˇĸ: %3¤F§‰#ē:ĪÚĸ:´:2'âčČī˙ĸ:Ž:0 ā#^øՌŽŽĸ:0 ā,sĒáŒ7Ž=ŽĀ:1end58’ÕŒVŽ\Žĸ:1end>ėiáŒuŽ{ŽĀ:0:ŠG(.ųŒ”ŽšŽĸ:0:ŠPɕíŒŗŽšŽĀ:01YuųŒŌŽØŽĸ:01boíŒņŽ÷ŽĀ:0öŋŽPfĀ:0+ד䊍/5Ā:2DÉLKJZĸ:™Œ0íXŪį5syĀ:0Ŗ›į‘1%’˜Ā:bõĸAĢŦˇĸ:0čę ´ŊŒĐÛĸ:0čę_Ɍô˙Ā:24 ĘАĀ:1at6DhŊŒ7Bĸ:1atHĘ"ɌZeĀ:0˛mSjŊŒ~„ĸ:0˛m[É&ɌŖĀ:0Žnc°­ŊŒŧÂĸ:0ŽnkŅRɌېáĀ:0özļīĨŒú‘ĸ:0ö‚€ąŒ‘‘Ā:2Šn‘P4‘?‘ĸ:Ž:21ĩ“ØT‘Z‘ĸ:3–kØ\Ռr‘‚‘ĸ:ՌŽ:2–0íŅ—‘Ŧ‘ĸ:ՌŽ:0"M}äՌÅ‘Đ‘ĸ:Ռ0"MœÔՌé‘ų‘ĸ:ՌՌ2|Ē:B’’ĸ:ē:2æiģŨÎ.’4’ĸ:2”Đ#I’Y’ĸ:Ž:b˛UášVm’}’ĸ:đŽ:2ũ•ÁQŗ’’§’ĸ:ՌŽ:2üÃF„ŧ’Ė’ĸ:ՌN:0zŽbå’õ’Ā:´'2Jųœũp ““ĸ:ĨŒ3M !Ռ-“8“ĸ:Ռ3M™üŽÕŒP“`“ĸ:ՌՌI_Tp%:5ŖĄt‰6ë›6ø+cŒŧė8\A”¸\-8_đģN8aÆ:L*8bŽ'ņ`8cĖ:m 8dŌ:×;8qæ“ė“ę:×;8sü“”ę:đ:Oé8y”"”ę: %VŧD8hī8i‡“Œæ %‡“ Ģ™ Hq– ‰H Oę” ‡“%Rę”%ÔÅSę”%  Tę”G‰HV—””ü:G‰HZŦ”ˇ”ü:;)đøeČíƔՔü:;#ˆHŪ”ü: %ģNMZ^ú”hÎK@_%]3¤R”=ŧn‡“(šbq—ŧ;3•9•;(šbu÷{;P•V•;(Ä yø•m•s•;G.ô|‚•ˆ•;G.ô—•ĸ•; ;•G.ô‚ļ•Á•;đG.ô†Đ•ā•;đ ;G-ôŸī•ú•; %(-§JĪę”––;đ)ŨŽ,ũ/–?–;ę”đb=øˇĮžS–^–;đI_Tp %ŖĄ‡“F”— ֋Öú•Ö–Ö•Ö9•ÖV•F”}â %ģNãę”L*äe^ņ`åp^m æ{^ˆįƒ_;§éĸa`_ꋝf_됝-ėđ=ŧ^ũ@—F—&;T^W—b—&;,;$—T^/x——&;—2;,;Ŧ–.^>Ŗ—Ž—&;8;.]§ŋ—Ę—&; %3¤F§×Q>;â—í—&;8;2'âč ˜˜&;—2;0 ā#Ą.č–+˜1˜&;0 ā,•oô–J˜P˜D;1end5ļsč–i˜o˜&;1end>mpô–ˆ˜Ž˜D;0:ŠG( —§˜­˜&;0:ŠPģ#—Æ˜Ė˜D;01Yí¯ —å˜ë˜&;01b,h—™ ™D;0öŋŽ#Ģ—#™)™D;0+ד­ —B™H™D;2DÉį]™m™&;—Ŧ–0íXŪe—†™Œ™D;0Ŗ›įĄ%Ĩ™Ģ™D;bõĸA°ŋ™Ę™&;—0čę T*Жã™î™&;—0čęâܖššD;—24 K:'š2šD;—1at6LˇĐ–JšUš&;—1atH‹[ܖmšxšD;—0˛mS‡öЖ‘š—š&;0˛m[8ܖ°šļšD;0ŽncęЖΚ՚&;0Žnk}ŸܖîšôšD;0öz'¸– ››&;0ö‚ ŧĖ,›2›D;2Šn‘ė-G›R›&;2;21ĩČég›m›&;3–kv¤č–…›•›&;č–2;2–0i•Ē›ŋ›&;č–—2;0"M}ĖMč–؛ã›&;č–0"MœÆč–ü› œ&;č–č–2|Ē1)!œ,œ&;>;2æiģ\AœGœ&;2”Đģĩ\œlœ&;—2;b˛Uá“D€œœ&;đ2;2ũ•ÁOûĨœēœ&;č–—2;2üÃFˆņΜߜ&;č–Ō:0zŽ‹—øœD;—´'2JųœEw(&;¸–3Mļ?č–@K&;č–3M™@č–cs&;č–č–—I_Tp %5ŖĄ‡“6zĻ6Œv–Avc’Aw”’A{ĸ;A¸;A‚Í;Aƒã;A„ų;A†"<A‰=<A‹S<AŽn<A‰<AŠ<A’É<A˜ë<Aš÷<A› =Aœ$=AC=Ažb=A x=AĄ˜=AņŒAöØaA÷ŗ=AųÎ=Aú">Aûä=Aü>Aũ<>ÔQ8\&Ÿöa-8_đģN8aš@L*8bĻ@ņ`8cą@m 8dˇ@×;8qËžŅžĪ@×;8sážėžĪ@Õ@Oé8yüžŸĪ@ %V?28hī8ilžŒæ @lž ÎĖ HVĄ ‰H OΟ lž%RΟ%ÔÅSΟ%  TΟG‰HV|Ÿ‚Ÿá@G‰HZ‘ŸœŸá@į@)đøe!I¯ŸēŸá@í@#ˆHßá@ %ģNM˜cߟhÎK~d%]3¤7Ÿ=ŧnlž(šbq™<ķ@  ų@(šbu‘ į@5 ; ˙@(Ä yFáöŸR X ˙@G.ô|g m ų@G.ô| ‡ ų@AöŸG.ô‚› Ļ ų@đG.ô†ĩ Å ų@đAG-ôŸÔ ß ų@ %(-§!FΟö Ąų@đ)ŨŽ’Ą$Ąų@Οđb=øˇČĀ8ĄCĄų@đI_Tp @ŖĄlž+Ÿs% Öp¨Öß ÖĄÖęŸÖ Ö; +Ÿ}â @ģNãΟL*äŖcņ`åŽcm æšcˆįÁd;§éāf`_ęp¨f_ëu¨-ėđ=ŧîlž^ũ%ĸ+ĸ AT^<ĸGĸ AA ĸT^/]ĸrĸ AũĄAA‘Ą.^>ˆĸ“ĸ AA.]§¤ĸ¯ĸ A %3¤F§¨ũ#AĮĸŌĸ AA2'âčĮuįĸ÷ĸ AũĄA0 ā#ëËÍĄŖŖ A0 ā,6ŲĄ/Ŗ5Ŗ)A1end5 ,ÍĄNŖTŖ A1end>ũ‡ŲĄmŖsŖ)A0:ŠG÷ÁņĄŒŖ’Ŗ A0:ŠP)JåĄĢŖąŖ)A01YáņĄĘŖĐŖ A01bdãåĄéŖīŖ)A0öŋŽÆņũĄ¤¤)A0+דëŽũĄ'¤-¤)A2DÉEÎB¤R¤ AũĄ‘Ą0íXŪē‹ũĄk¤q¤)A0Ŗ›į[¤%Ф¤)AbõĸAôW¤¤¯¤ AũĄ0čę Ũ ĩĄȤͤ AũĄ0čę YÁĄė¤÷¤)AũĄ24 š ĨĨ)AũĄ1at6vbĩĄ/Ĩ:Ĩ AũĄ1atHcĘÁĄRĨ]Ĩ)AũĄ0˛mSÁEĩĄvĨ|Ĩ A0˛m[6ØÁĄ•Ĩ›Ĩ)A0Žnc›’ĩĄ´ĨēĨ A0ŽnkŊßÁĄĶĨŲĨ)A0özœRĄōĨøĨ A0ö‚g„ŠĄĻĻ)A2Šn‘VŲ,Ļ7Ļ AA21ĩoLĻRĻ A3–kž}ÍĄjĻzĻ AÍĄA2–0iŊĻ¤Ļ AÍĄũĄA0"M}ĐÔÍĄŊĻČĻ AÍĄ0"Mœ>ÍĄáĻņĻ AÍĄÍĄ2|Ē9ë§§ A#A2æiģ÷§&§,§ A2”ĐëåA§Q§ AũĄAb˛Uá%e§u§ AđA2ũ•ÁĻoЧŸ§ AÍĄũĄA2üÃFį.´§Ä§ AÍĄˇ@0zŽ˛šũĄŨ§í§)AũĄ´'2JųœG¨ ¨ AĄ3M?ÍĄ%¨0¨ AÍĄ3M™éŋÍĄH¨X¨ AÍĄÍĄũĄI_Tp @5ŖĄlž6 Вa¨Ē_ËdkŽiÁdQĮnÁd˜o4ËģNp?Ëņ`qJËf_yÕ¨Û¨!D/f_ë¨ö¨!D•¨f_„ŠŠ!D'D3ė1“a@•¨)Š/Š-D3íEĄėš¨GŠMŠ-D3ˆF­×­¨eŠkŠ-D3MAļ03DƒŠ‰Š!D3MAÂą.u¨ĄŠŦŠ!D %3÷EĪŦ?3DÄŠĘŠ!D3÷EÛ.{u¨âŠíŠ!D %3÷EčÜfu¨ĒĒ-DĄ¨3˜AōjŸ3D(Ē3Ē!DĄ¨3FūžČu¨KĒVĒ-DĄ¨0}FRō3DoĒzĒ!DĄ¨0čę§ņš¨“ĒžĒ-DĄ¨PÁd[Ą€ž8\gĢ˙h-8_đģN8a/AL*8b;Aņ`8cFAm 8dLA×;8q ĢĢdA×;8s"Ģ-ĢdAjAOé8y=ĢHĢdA %V/ĸ8hī8i­ĒŒæ5A­Ē KĖ H—­ ‰H OŦ ­Ē%RŦ%ÔÅSŦ%  TŦG‰HVŊĢÃĢvAG‰HZŌĢŨĢvA|A)đøeÚŠđĢûĢvA‚A#ˆHŦvA %ģNMĄj ŦhÎK‡k%]3¤xĢ=ŧn­Ē(šbq\ ˆAYŦ_ŦŽA(šbuĖ>|AvŦ|Ŧ”A(Ä yĻ7Ŧ“Ŧ™Ŧ”AG.ô|¨ŦŽŦŽAG.ôŊŦČŦŽAšA7ŦG.ô‚ÜŦįŦŽAđG.ô†öŦ­ŽAđšAG-ôŸ­ ­ŽA %(-§Ŧ7­B­ŽAđ)ŨŽr(U­e­ŽAŦđb=øˇžy­„­ŽAđI_Tp5AŖĄ­ĒlĢČ[ Öļ´Ö ­ÖB­Ö+ŦÖ_ŦÖ|ŦlĢ}â5AģNãŦL*äŦjņ`åˇjm æÂjˆįĘk;§éöm`_ęļ´f_ëģ´-ėđ=ŧî­Ē^ũfŽlŽ AT^}ވŽ AĻAJŽT^/žŽŗŽ A>ŽŦAĻAŌ­.^>ÉŽÔŽ A˛A.]§åŽđŽ A %3¤F§EU¸A¯¯ A˛A2'âčL(¯8¯ A>ŽŦA0 ā#~'ŽQ¯W¯ A0 ā,2áŽp¯v¯žA1end5MÄŽ¯•¯ A1end>{ĄŽޝ´¯žA0:ŠGg2ŽÍ¯Ķ¯ A0:ŠPÛ&Žė¯ō¯žA01Y 2Ž °° A01bĀC&Ž*°0°žA0öŋŽęū>ŽI°O°žA0+דk@>Žh°n°žA2DÉY”ƒ°“° A>ŽŌ­0íXŪø:>ŽŦ°˛°žA0Ŗ›įžd%Ë°Ņ°žAbõĸA å°đ° A>Ž0čę 4īö­ ąą A>Ž0čęūÜŽ-ą8ąžA>Ž24 ÜMąXąžA>Ž1at6īö­pą{ą A>Ž1atH°ŽŽ“ąžąžA>Ž0˛mSlĨö­ˇąŊą A0˛m[­OŽֹܹžA0ŽncŋPö­õąûą A0Žnk2ķŽ˛˛žA0öz ƒŪ­3˛9˛ A0ö‚ę­R˛X˛žA2Šn‘ūBm˛x˛ AŦA21ĩ‰č˛“˛ A3–k6HŽ̞잠AŽŦA2–0‘°в垠AŽ>ŽŦA0"M}íoŽū˛ ŗ AŽ0"MœÍŽ"ŗ2ŗ AŽŽ2|ĒN“GŗRŗ A¸A2æiģAgŗmŗ A2”Đ#‚ŗ’ŗ A>ŽŦAb˛UáÁ Ļŗļŗ AđŦA2ũ•Á”ŲËŗāŗ AŽ>ŽŦA2üÃF7\õŗ´ AŽLA0zŽŦ>Ž´.´žA>Ž´'2JųœŠÖC´N´ AŪ­3MgŽf´q´ AŽ3M™Š’މ´™´ AŽŽ>ŽŽI_Tp5A5ŖĄ­Ē6W'6–—œ­ōČ8\ĩ:p-8_đģN8aúAL*8bBņ`8cBm 8d B×;8q$ĩ*ĩ$B×;8s:ĩEĩ$B*BOé8yUĩ`ĩ$B %VH8hī8iÅ´ŒæAļÅ´ Ĩę H¯ˇ ‰H O(ļ Å´%R(ļ%ÔÅS(ļ%  T(ļG‰HVÕĩÛĩ6BG‰HZęĩõĩ6B ÖÉžÖ8ˇÖZˇÖCļÖwļ֔ļ„ĩ}âAļģNã(ļL*äįqņ`åōqm æũqˆįs;§é$u`_ęÉžf_ëΞ-ėđ=ŧîÅ´^ũ~¸„¸`BT^•¸ ¸`BfBb¸T^/ļ¸Ë¸`BV¸lBfBęˇ.^>á¸ė¸`BrB.]§ũ¸š`B %3¤F§TŅxB š+š`BrB2'âčTŋ@šPš`BV¸lB0 ā#Ũž&¸išoš`B0 ā,Ÿ2¸ˆšŽš~B1end5xĄ&¸§š­š`B1end>;â2¸ÆšĖš~B0:ŠGvmJ¸åšëš`B0:ŠP,}>¸ē ē~B01Yō|J¸#ē)ē`B01b÷É>¸BēHē~B0öŋŽDÖV¸aēgē~B0+דR=V¸€ē†ē~B2DɈ›ēĢē`BV¸ęˇ0íXŪÖ8V¸ÄēĘē~B0Ŗ›įz%ãēéē~BbõĸAũēģ`BV¸0čę ˙¸!ģ,ģ`BV¸0čęüm¸EģPģ~BV¸24 Ėēeģpģ~BV¸1at6Ú¸ˆģ“ģ`BV¸1atHqϏĢģļģ~BV¸0˛mS- ¸ĪģÕģ`B0˛m[T ¸îģôģ~B0Žnc\¸ ŧŧ`B0Žnk.¸,ŧ2ŧ~B0öz įöˇKŧQŧ`B0ö‚.2¸jŧpŧ~B2Šn‘če…ŧŧ`BlB21ĩ ¯ĨŧĢŧ`B3–k#ĩ&¸ÃŧĶŧ`B&¸lB2–0į'čŧũŧ`B&¸V¸lB0"M}ÍŊ&¸Ŋ!Ŋ`B&¸0"Mœže&¸:ŊJŊ`B&¸&¸2|ĒĐ!_ŊjŊ`BxB2æiģËŗŊ…Ŋ`B2”Đy7šŊĒŊ`BV¸lBb˛UᖉžŊÎŊ`BđlB2ũ•Á-ãŊøŊ`B&¸V¸lB2üÃFĢ žž`B&¸ B0zŽßV¸6žFž~BV¸´'2Jųœq[žfž`Böˇ3Mjl&¸~ž‰ž`B&¸3M™ą÷&¸Ąžąž`B&¸&¸V¸I_TpAļ5ŖĄÅ´6¤<6[ą´ˇ §Ņ4¯ŋ^W4ą<˜4ŗæģN4´l9ņ`4ĩx9Pl9 Čq3o2ŋc3q ­7 ›4ētŋ^W4ŧ<˜4žæģN4ŋאņ`4ĀīPא âE3hŒŋc3j ­78e8\FĀMw-8_đģN8aîBL*8bôBņ`8c˙Bm 8dC×;8qëŋņŋC×;8sĀ ĀC#COé8yĀ'ĀC %VĪ8hī8iŒŋŒæP;Œŋ yƒ Hv ‰H OīĀ Œŋ%RīĀ%ÔÅSīĀ%  TīĀG‰HVœĀĸĀ/CG‰HZąĀŧĀ/C5C)đøeŅ‘ĪĀÚĀ/C;C#ˆHãĀ/C %ģNMīx˙ĀhÎKÕy%]3¤WĀ=ŧnŒŋ(šbqHdAC8Á>ÁGC(šbuSB5CUÁ[ÁMC(Ä yĨÁrÁxÁMCG.ô|‡ÁÁGCG.ôœÁ§ÁGCSCÁG.ô‚ģÁÆÁGCđG.ô†ÕÁåÁGCđSCG-ôŸôÁ˙ÁGC %(-§āēīĀÂ!ÂGCđ)Ũޤ84ÂDÂGCīĀđb=øˇQ!XÂcÂGCđI_TpP;ŖĄŒŋK†‡ ֐ÉÖ˙ÁÖ!ÂÖ ÁÖ>ÁÖ[ÁKĀ}âP;ģNãīĀL*äúxņ`åym æyˆįz;§éD|`_ęÉf_ë•É-ėđ=ŧîŒŋ^ũEÃKÃYCT^\ÃgÃYC_C)ÃT^/}ÒÃYCÃeC_CąÂ.^>¨ÃŗÃYCkC.]§ÄÃĪÃYC %3¤F§ŲqCįÃōÃYCkC2'âč øÄÄYCÃeC0 ā#0¨íÂ0Ä6ÄYC0 ā,bųÂOÄUÄwC1end5sãíÂnÄtÄYC1end>p.ųēÄwC0:ŠG$.ÃŦIJÄYC0:ŠP­ĮÃËÄŅÄwC01YSRÃęÄđÄYC01bPDà ÅÅwC0öŋŽgŠÃ(Å.ÅwC0+ד}ßÃGÅMÅwC2DÉÛsbÅrÅYCÃąÂ0íXŪyÛËőÅwC0Ŗ›įLč%ĒŰÅwCbõĸA4(ÄÅĪÅYCÃ0čę üHÕÂčÅķÅYCÃ0čęæĢáÂ ÆÆwCÃ24 rØ,Æ7ÆwCÃ1at6ØÕÂOÆZÆYCÃ1atHTáÂrÆ}ÆwCÃ0˛mS]&Õ–ƜÆYC0˛m[ĖäáÂĩÆģÆwC0ŽncÃíÕÂÔÆÚÆYC0Žnk$áÂķÆųÆwC0özįŲŊÂĮĮYC0ö‚cÉÂ1Į7ĮwC2Šn‘YXLĮWĮYCeC21ĩ‘lĮrĮYC3–k§&íŠĮšĮYCíÂeC2–0‘ô¯ĮÄĮYCíÂÃeC0"M}:ŊíÂŨĮčĮYCíÂ0"Mœg‹íÂČČYCíÂíÂ2|ĒZm&Č1ČYCqC2æiģ}ˆFČLČYC2”Đ‘ aČqČYCÃeCb˛UátŌ…Č•ČYCđeC2ũ•Á<ĒČŋČYCíÂÃeC2üÃFÄÔČäČYCíÂC0zŽLĀÃũČ ÉwCô'2Jųœ=O"É-ÉYCŊÂ3MÖžíÂEÉPÉYCíÂ3M™LíÂhÉxÉYCíÂíÂÃI_TpP;5ŖĄŒŋ6Én6ģŅ{ b4¯Öɘ4ŗæģN4´îBņ`4ĩ˙BPîB }ü3oîÉc3q ­7 †’4ē0Ę^W4ŧ<˜4žæģN4ŋ´'ņ`4ƒP´' Ë%3hHĘc3j ­7 ˇS4ēĘ˜4žæģN4ŋ;Aņ`4ĀLAP;A e94¯ÁĘ^W4ą<˜4ŗæģN4´/Aņ`4ĩFAP/A =D3oŲĘc3q ­7 ˆ83hņĘc3j ­7 )ũ4¯(˘4ŗæģN4´š@ņ`4ĩą@Pš@ žP4Ŗ_˘4§ÜdģN4¨ödņ`4ŠédPÁd [ũ4vŦËeˆxË~Ëvr/&<I_Tp @vh %“Tš@7ą@u¨G~8\kĖ|~-8_đģN8aM‘L*8b9Dņ`8cDDm 8dJD×;8qĖĖbD×;8s&Ė1ĖbDhDOé8yAĖLĖbD %V¨8hī8iąËŒæČ*ąË Ņ H›Î ‰H OÍ ąË%RÍ%ÔÅSÍ%  TÍG‰HVÁĖĮĖtDG‰HZÖĖáĖtDzD)đøe‘ĖôĖ˙ĖtD€D#ˆHÍtD %ģNM€$ÍhÎK%]3¤|Ė=ŧnąË(šbq!'†D]ÍcÍŒD(šbu™÷zDz̀Í’D(Ä y};͗͝Í’DG.ô|ŦͲÍŒDG.ôÁÍĖÍŒD˜D;ÍG.ô‚āÍëÍŒDđG.ô†úÍ ÎŒDđ˜DG-ôŸÎ$ÎŒD %(-§3„Í;ÎFÎŒDđ)ŨŽwžYÎiÎŒDÍđb=øˇL}ΈÎŒDđI_TpČ*ŖĄąËpĖđų ÖĩÕÖ$ÎÖFÎÖ/ÍÖcÍրÍpĖ}âČ*ģNãÍL*ä)€ņ`å4€m æ?€ˆįG;§éfƒ`_ęĩÕf_ëēÕ-ėđ=ŧîąË^ũjĪpĪžDT^ĪŒĪžD¤DNĪT^/ĸΎĪžDBĪĒD¤DÖÎ.^>ÍĪØĪžD°D.]§éĪôĪžD %3¤F§(ļD ĐĐžD°D2'âč@^,Đ<ĐžDBĪĒD0 ā#žĪUĐ[ĐžD0 ā,ŦĪĪtĐzĐŧD1end5îãĪ“Đ™ĐžD1end>ÍYĪ˛Đ¸ĐŧD0:ŠG˛6ĪŅĐ×ĐžD0:ŠPˆ6*ĪđĐöĐŧD01Y÷6ĪŅŅžD01bw*Ī.Ņ4ŅŧD0öŋŽ3›BĪMŅSŅŧD0+דãRBĪlŅrŅŧD2DÉYÍ‡Ņ—ŅžDBĪÖÎ0íXŪyNBΰŅļŅŧD0Ŗ›įwT%ĪŅÕŅŧDbõĸA"%éŅôŅžDBĪ0čę Ļ2úÎ ŌŌžDBĪ0čęgĩĪ1Ō<ŌŧDBĪ24 _QŌ\ŌŧDBĪ1at6ÖúÎtŌŌžDBĪ1atHôĪ—ŌĸŌŧDBĪ0˛mSĘTúÎģŌÁŌžD0˛m[@AĪÚŌāŌŧD0Žnc•ņúÎųŌ˙ŌžD0ŽnkYƒĪĶĶŧD0özŽâÎ7Ķ=ĶžD0ö‚%îÎVĶ\ĶŧD2Šn‘Ž qĶ|ĶžDĒD21ĩF$‘Ķ—ĶžD3–kSΝĶŋĶžDĪĒD2–0N§ÔĶéĶžDĪBĪĒD0"M}ûŋĪÔ ÔžDĪ0"Mœž9Ī&Ô6ÔžDĪĪ2|ĒėĨKÔVÔžDļD2æiģ÷kÔqÔžD2”Đmš†Ô–ÔžDBĪĒDb˛UáB_ĒÔēÔžDđĒD2ũ•Á›jĪÔäÔžDĪBĪĒD2üÃF]ŌųÔ ÕžDĪJD0zŽŠhBĪ"Õ2ÕŧDBĪ´'2JųœŖGÕRÕžDâÎ3M_ĪjÕuÕžDĪ3M™ĪÕÕžDĪĪBĪI_TpČ*5ŖĄąË6Jĸ6 ´ Î ?q4¯ûÕ˜4ŗæģN4´M‘ņ`4ĩDDPM‘ čL3oÖc3q ­7J/8\‡Öpƒ-8_đģN8aE×;8qNÖTÖ-E×;8sdÖoÖ-E3E Oé8y{Ö-E % ˛*@v¯Ö˛˛°ö%ô@oôÖ ‡Ö+Ē6@rëų%ÚÖęÖũDīīI_Tp¯Ö ¤Đ*„[× ˇF%Ņ*‰(ĩž*ŒãiŨ.×4×E(ĩž*ĸאK×Q× Eü.ųÖÖWō*Z äX@ô*Į*Ø Ö!ļ+*ɯÖ!PŖ*ʡF!3'*Ë*Ø"~æ*ÍŊ×Ã×9E"~æ*ŌĶ×ã×9E?EEE2Š*ā€wø×ū×9Ee}æ ØØ9E %+ҝÖYÆ%<-*nđ<ØŅ;*]L@Z]3*ér×<ņ­*b5<ë­*c5< ~*f<}*g}Ø%€å‹å&G2GI_Tp ÜN*ōrįņ­*ūūF!â)*>Ąåņ`*õīģN*öאˆ*ø äžw*ũ•åŗ*˙ E"2§*ææÃE]2§*æ!æÃEåå"2§*1æ<æÃEÉEĪå+öÎ* —>ĪåYæ_æĪE+íE*Ą•šåwæ}æĪE+ˆF*åÄÄ啿›æĪE+MA*rHÕEŗæšæÃE+MA* †GÚåҿܿÃE %+÷E*(Z‘ÕEôæúæÃE+÷E*/žÚåįįÃE %+ãz*7œ%5į@įĪEÛEÚå+Ą!*;ĐŽ%]įhįĪEÛEI_Tp61á6ée× Ŗ´+`ėį%|+e ä%ų+f%GCÍ+l´įēį8GGCÍ+pÉįŲį8G>G#7I_T1 äI_T2%^|^āęä0ZŠė¸“0se×%ķ0tč ~0g}0hš+0i¯ÖĘ:0j¯Ö=ŧ0kä_ˆ0‚ĐØ;§0ƒĐØf_0„ęØ-0†*Ø_set0Ž•č›čE`set0—ĢčģčE?E‡EIč_set0ÄĐčÛčEE0¤F0Ž“Eôč˙čEE0/é0=›21čéé™E0+|0Abß=č7é=é™E0Ä 0E ČIčVé\é™E0 ā0NGGUčué{é™E1end0WTUč”éšé™E0:Š0`Émčŗéšé™E010iˆ+mčŌéØé™E0Ŗ›0”@Ô%ņé÷é™E0öŋ0™–pyčęę™E0+×0žûôyč/ę5ę™E2|0­§JęUęE“E0–0ķíŽėnęyęEŸE%č0–0î‹Uč—ę§ęEačŸE2"M0\0LŧęĮęEUč0"M0lRŽyčāęëęEĨEč2"M0’ŦŋëëEUčUč2æi0cû*ë0ëE0ģ%0ĢUyčIëTë™EĨE0ũ60ŊŊ=UčmëxëEĨE0ũ60Á"@ač‘ëœë™EĨE0Ęž0Ō.1UčĩëĀëEĨE0Ęž0ÖĪačŲëäë™EĨE0ŗX0âlUčũëėEĨE0ŗX0æW ač!ė,ė™EĨE0ĩ0ûEĀņįEėPėEĨE0ĩ0˙2[ņįiėtė™EĨEfßĻ‚ėėE %05äp¯Ö5ŖĄä_öį Ú+`í%|+e•å%ų+f%GCÍ+láėįėáEGCÍ+pöėíáEįE#7I_T1•åI_T2%ëV•å ë4¯Zí˜4ŗæģN4´Ļ8ņ`4ĩ˛8PĻ8 a14ē‘í˜4žæģN4ŋŦ8ņ`48PŦ8 Ë´4ēČí˜4žæģN4ŋ=:ņ`4ĀN:P=: ‰i4¯˙í˜4ŗæģN4´7:ņ`4ĩH:P7: F4¯6î˜4ŗæģN4´Æ:ņ`4ĩĖ:PÆ: Zų4ēmî˜4žæģN4ŋôBņ`4ĀCPôB #‹4¯¤î˜4ŗæģN4´úAņ`4ĩBPúA 7Ö4ēÛî˜4žæģN4ŋĻ@ņ`4Ž@PĻ@ ͐4¯ī˜4ŗæģN4´Ũņ`4ĩõPŨ ä ÎÁ@i6īI@´'°ö´',Į@:™ī ī+Ē6@>ƒ16aīlīDG6+Ē6@Bq†6„īīDG6I_Tp´'6ī Ą54ŖĘī^W4Ĩ™S˜4§ĻSP~S `4Ŗöī^W4ĨÉB˜4§ÖBPŽB ‡ˇ4Ŗ"đ^W4Ĩåk˜4§ōkPĘk ŋ@8 RđÁ8ĄîMHđ”7”7ŖĄä_ °€@iqđI@°öąu@:Ôđ Rđ+Ē6@>!ßõœđ§đ`Gõ+Ē6@B‰ īŋđĘđ`GīI_Tpqđ |b`^ņCFļdņ`Ļ8Ļ8Ļ8Cūd#ņ`l9l9l9C‘dBņ`úAúAúADˇbd`ŨŨŨĮ¤3‹…ņg3{ņ ­7I_TpĻ8 $4ŅÉņQĮ4ĶĻ84é14ÔBĀ‘ņĩņĻ8PĻ8YŅB%Ö!3‹đņg3æņ ­7I_Tpl9 Ŧ!4Ņ4ōQĮ4Ķl94é14ÔÕōüņ ōl9Pl9YŅB% ˇ4ē`ō^W4ŧ<˜4žæPB‘ g‰)@ŌķEé>)Dl9ōÄ:l9`l9l9l9l9Eš )DŨÎōÄ:ŽB`ŨŽBŽBŨEÖØ)DŨ˙ōÄ:B‘`ŨB‘B‘ŨEĩ)DŨ0ķÄ:Ũ`ŨŨŨŨEÃĶ)DúAaķÄ:$u`úA$u$uúAEEP)DúA’ķÄ:úA`úAúAúAúA4=q)D1†Ļ8ĮķÄ:Ļ8`Ļ8Ļ8Ļ8Ļ8Yš[%’3‹ųķg3īķ ­7I_Tp7: P4Ņ=ôQĮ4Ķ7:4é14ÔŽÄô)ô7:P7:YŅB%ĒÎ3‹dôg3Zô ­7I_TpÆ: ˜û4ҍôQĮ4ĶÆ:4é14ÔPpô”ôÆ:PÆ:YŅB%$?3‹Īôg3Åô ­7I_TpîB GÅ4ŅõQĮ4ĶîB4é14Ôč@Ûô˙ôîBPîBYŅB%Eš3‹:õg30õ ­7I_Tpz ˇĢ4Ņ~õQĮ4Ķz4é14ÔĄ!FõjõzPzYŅB%ũ…3‹Ĩõg3›õ ­7I_Tpš@ Ÿ 4ŅéõQĮ4͚@4é14ÔũøąõÕõš@Pš@YŅB%Ē3‹ög3ö ­7I_TpúA E4ŅTöQĮ4ĶúA4é14Ô@Ģö@öúAPúAYŅB%v”3‹{ög3qö ­7I_Tp/A GY4ŅŋöQĮ4Ķ/A4é14Ô_A‡öĢö/AP/AYŅB%¤ 3‹æög3Üö ­7I_TpM‘ Ęž4Ņ*÷QĮ4ĶM‘4é14ÔŌ:ōö÷M‘PM‘YŅB%šJ3‹Q÷g3G÷ ­7I_TpŨ ģ[4Ņ•÷QĮ4ĶŨ4é14ÔVķ]÷÷ŨPŨYŅB% Ž94¯×÷^W4ą<˜4ŗæģN4´Č*ņ`4ĩ}PČ* @ų4ēø˜4žæģN4ŋBņ`4Ā BPB î3h&øc3j ­7%*33Møg35Cø ­7I_TpĻ8s33tøg35jø ­7I_Tpl9Ļ\33›øg35‘ø ­7I_Tp7:¸33Âøg35¸ø ­7I_TpÆ:.933éøg35ßø ­7I_TpîBŸŖ3:ųg3=ų ­7I_Tpz Ū 4ŲTųQĮ4Û3z4é14Ü|ų@ųzPzYŅB%IÛ33{ųg35qų ­7I_Tpš@ކ33ĸųg35˜ų ­7I_TpúASo33Éųg35ŋų ­7I_Tp/A‡33đųg35æų ­7I_TpM‘ ‰33úg35 ú ­7I_TpŨH`5û N@97:MúI_Tp%:=:=:7: Z^9Æ:vúI_Tp %Ž'Ž'Æ: ā_9îBŸúI_TpP;ôBôBîB ‡9š@ČúI_Tp @Ļ@Ļ@š@ {É9/AņúI_Tp5A;A;A/Aåŋ9M‘I_TpČ*9D9DM‘mü ’ qîBMûI_TpP;ôBôBîB å<q7:vûI_Tp%:=:=:7: īqÆ:ŸûI_Tp %Ž'Ž'Æ: Nđqš@ČûI_Tp @Ļ@Ļ@š@ ÆČq/AņûI_Tp5A;A;A/AޏqM‘I_TpČ*9D9DM‘äÍ3‹>üg34ü ­7I_Tp7’Šø33eüg35[ü ­7I_Tp7’ˆ333Œüg35‚ü ­7I_Tp˜B6M%6Ō8âÔũ3Ā( ƒWˆV8ˇüŊüGJUΓ –üĶüŪüĨL %bŠD —rōüũüĨLV805Ŋ lbīũũũGJv K'%.Ī“ Æ9ũ?ũĨL0ēC ģÍĪũXũcũGJ'%05Ŋ €ũ|ũ‡ũĨLũ­ '%5^î(bæiB)ŒJ­ũ¸ũĨLV8hŸHB~}ËČũĨLvL–üĀDEsJ!OĪ6øũĪ6Ī6EãE!KĪ6ūĪ6Ī6EsJ!—7,ū—7—7 ¨Aã‘Pū^î(ã‘´' ¨Aâã‘tū^î(ã‘'%EŒY![AQŽūGQĪ6Ī6E}J!WĪ6¨ūĪ6E)2!_AQÂūGQĪ6×Cbæ|E8Ž$ûūBãz,xO%īūŨRãRŌū Œa Ū %6˙­ '%^î(ŖĄņ´'ī ´ Ô ã‘l˙­ '%^î(ŖĄņã‘ī Œa ę %ĸ˙­ '%^î(ŖĄņ' ŪÕ ĻtÔ˙;öm;ĶtömömtE1§4ÉĒīō˙K~SōtE 94ÉÖīKŽB v ēÜ ĻöyB;™Z;Ķöy™Z™ZöyE€ā4Éđ`KĘkuCĸ'ĻI_TpŨȁȁEįj .§‚Ō|EĢR HJã‘Å­ '%^î(ã‘EŽ'/B‘ãI_TpH‘68hk/ã^bü鉸8iâ^ã%é‰ %­ '%5^î(5ŖĄņAstr~đ^X^Ę| BNEsJ!w^7…^7^7EÄ$ÃlFš %Ev$Đã‘Æ­ '%^î(ã‘lFCaVzå`č7č7č7Cøa”`č7I_Tpî7č7č7)8CĒEz1`7:7:7:CöŒ”^`7:I_Tp%:7:7:r:CŒ]z}`Æ:Æ:Æ:CõÔ”Ē`Æ:I_Tp %Æ:Æ:ö:C1zÉ`îBîBîBC^”ö`îBI_TpP;îBîB)C rá Ļ •(;D|;Ķ •D|D| •CˆøzG`š@š@š@C{4”t`š@I_Tp @š@š@Û@ChGz“`/A/A/AC˙ė”Ā`/AI_Tp5A/A/ApA 0 Ļh˜ō;āf;Ķh˜āfāfh˜ ã$%PÁd'D'D V0%:PÁd'D'DC°AzY`M‘M‘M‘C甆`M‘I_TpČ*M‘M‘nDEAŽ8…%ŠI_Tp'%ĄĄEͲ'/Ļ8ĮI_Tp3˛8CžŽ\áI_Tp3Ļ8C[7z`Ļ8Ļ8Ļ8C˙Ē”-`Ļ8I_Tp3Ļ8Ļ8Ü8Ey'/l9KI_Tpũx9C0\eI_Tpũl9CP‘z„`l9l9l9C ’”ą`l9I_Tpũl9l9ĸ9Eâ/'/ŨĪI_TpõC“ā\éI_TpŨCŖz`ŨŨŨCū;”5`ŨI_TpŨŨ”7C3ĻO]I_T1I_T2ŨīE’¤)kŨŽÄ:ŽB`ŨŽBŽBŨ 8)ŨÎÄ:ŽB`ŨI_TpŽBŽBŨ”7EœÖ ŸŽB˙PŽB_ÂĻ/ŽBŽBĻ/E 94ÉúÉK´'6Eëk.ZĘE´´'´'´'<Eík.rĘhÄ:´'´'´' Ų“‘ņ‡PĻ8Ļ8 h IĻ8ÃYWr%’“Ļ8—“Ļ8Ļ8Ļ8Ļ8 >m!‘ņâPĻ8Ļ8 å[Ļ8YWr%’“Ļ8—“Ļ8Ļ8Ļ8Ļ8E ŲŽ!ōölPM‘M‘ Ü[M‘¨YWr%’“M‘—“M‘M‘M‘M‘ /\]÷ĮPŨŨ î IŨYWr%’“Ũ—“ŨŨŨŨ 7{!]÷"PŨŨ u[Ũ^YWr%’“Ũ—“ŨŨŨŨEœR)kŨÄ:Ũ`ŨŨŨŨ Īd)ŨĪÄ:Ũ`ŨI_TpŨŨŨ”7 KË)'ŨÄ:Ũ`ŨÍä_ŨŨŨ”7Eö?'/א-I_Tp' īEīËÂ)'Æ:[Ä:Æ:`Æ:͇“Æ:Æ:Æ:ö: DWvÆ:’“Æ:—“Æ:Æ:Æ:Æ: Ŗéš@ÉYWr%I_IIš@I_OIš@š@š@š@ ÛhŽš@YWr%I_IIš@I_OIš@š@š@š@ z¨Čš@7I_IIš@I_OIš@š@š@š@El¨)kš@hÄ:š@`š@š@š@š@ MŌ)š@¨Ä:š@`š@I_Tp @š@š@š@Û@ l˜)'š@čÄ:š@`š@Ílžš@š@š@Û@ 0 vš@’“š@—“š@š@š@š@ ^Ŧ/AVYWr%I_II/AI_OI/A/A/A/A kŽ/A’YWr%I_II/AI_OI/A/A/A/A ëTČ/AÄI_II/AI_OI/A/A/A/AEŨT)k/AõÄ:/A`/A/A/A/A ŧ)/A5Ä:/A`/AI_Tp5A/A/A/ApA ׏)'/AuÄ:/A`/AÍ­Ē/A/A/ApA A#v/A§’“/A—“/A/A/A/A ÷šM‘ãYWr%I_IIM‘I_OIM‘M‘M‘M‘ žčŽM‘YWr%I_IIM‘I_OIM‘M‘M‘M‘ ƒâČM‘QI_IIM‘I_OIM‘M‘M‘M‘Euâ)kM‘‚Ä:M‘`M‘M‘M‘M‘ Úl)M‘ÂÄ:M‘`M‘I_TpČ*M‘M‘M‘nD ™H)'M‘ Ä:M‘`M‘ÍąËM‘M‘M‘nD ÍbvM‘4 ’“M‘—“M‘M‘M‘M‘FÎ?—ÚG Ž­ u u ­ '%^î(ŖĄņ' ąō4㑝 ­ '%^î(ã‘84Ž!.;ų#>ˇ Į Æ× %ÚLU:ų#; Ũ í Æ× %ÚL­ '%5^î(jhex!­X‘!X‘ Ø"!kX‘,!X‘Ž­%´…f!­ '%^î(ŖĄņ´'īŽ­ P eF !­ '%^î(ŖĄņīī Ž­ … Ö!­ '%^î(ŖĄņī'%4‚ pzģ~S"´~S_Â/~S~S/< AŽ Đ †4"­ '%īī4œÖ pôŽBn"´ŽB_ÂĻ/ŽBŽBĻ/<46 pw…Ęk¨"´Ęk_ 0ĘkĘk 0< ­[ ĶĘkÚ";Ęk_ÂÎĘkĘkÎE6 ŸĘk #PĘk_ 0ĘkĘk 0 øž ģŽB=#;ŽBI_TpŽBŽBī ŲvŨo#’“Ũ—“ŨŨŨŨ ü/ Ķ~SĄ#;~S_Â#ĩ~S~S#ĩE‚ Ÿ~SŌ#P~S_Â/~S~S/‘ü GŅvĻ8 $’“Ļ8—“Ļ8Ļ8Ļ8Ļ8kI7eI$ŪkŊ1>ŊaFlE1Jô7đNŠDN;iR$´'m4XøEL”W㑇$­ '%^î(ã‘´'Âūãn‰÷D8Ä14æ*ĻK5°$5œT*NQ7Õ$%55„ sVD?å—ę$´'4p1*Ŗ%T5%5nōōD4ë%@ %oint'Ü ÜÜw_šŸœöŲu?ŲŲĘ  nЧF0†% †§”Gõ'%ˇĸGö %%ŨäGûČ*%=ĮGüČ*%ņGũČ* %ÜkGūČ*%ÆÉG˙Č*!-KGČ*!ū GČ*!öGČ* !¯KGČ*$!éöGČ*(!āCGČ*,!2`Gj“0!ŗÜG p“4!{YG  %8!TƒG %:-6ˇ93Ä% ]įëĢ9V:a:-6Ã93 - c4-Ÿ9y:‰:!6“9ub Ũ mGC:­:!6Ÿ9“93+× qž)“9Å:Ë:-6b‹ ĶÆß:ī:!6Ÿ96bU ……;;!6Ÿ9I_Tp´'‡9 aM_ <ģNMŦĻH-MąšH4 -MĩŦ›);];?64; ŨM¸Hœ|;?6);4;UMŋŠâ–;?6);4+×M #4;¯;964ÛîMÅo96Č;96vMĮxÁâ;?6?6 TëMĪ<īMĐII_TpđIŖĄ‡H,× :ž=- =đģN ?K6L* @Q6ņ` AW6m  B]6— Oe<k<c6— Q{<†<c6i6— V–<Ą<c6 %3Ä% YĄp%<š<Ä<o6=<3Ä% ]ʆ1<Ü<į<o6I<3 - c-‡%<˙<=c6<ub Ũ mé'#=3=c6%<<3+× q˙<K=Q=o6b‹  1e=u=c6%<]6bU …ʉ=”=c6%<I_TpđI <jn :4?- =đģN ?ŨL* @אņ` Aõm  B Oû=>v7— Q>>v7|7— V,>7>v7 %3Ä% YŊģ=O>Z>‚7Ķ=3Ä% ]ÄwĮ=r>}>‚7ß=3 - cēģ=•>Ĩ>v7¯=ub Ũ m$š>É>v7ģ=¯=3+× q@*¯=á>į>‚7b‹ …Zû> ?v7ģ=ībU … Ų?*?v7ģ=I_TpŖ= ]ÆM_@ģNMŦ`L*M­`ņ`M¯`m M°'`-Mą÷_4 -Mĩš€E?š?”7q? ŨM¸aâš?”7E?q?UMŋfšĶ?”7E?4+×MˆSq?ė?Ž74ÛîMů¨Ž7@Ž7vMĮŽP@”7”7 ąMĪ@@īMЌ`I_Tp „QMĪa@īMĐŽ`I_TpųÖC6Mŧ…@I_Tp”7E?Ąä_WŊÅŽBZhŽČŨ<˜Đįî<ņ`Ņũî<ģNŌōî.ĮÔâ@č@GTĮØų@AG G0íEå"ŧˇ@A#AG0ˆFé˜$Ä@ŋ<˜ĐIŋ<ņ`Ņ_ŋ<ģNŌTŋ.ĮÔCCŅBTĮØ%C0CŅB×B0íEå… ãBICOCâB0ˆFé9xđBhCnCâB0MAíö'čB‡CCŅB0MAô'ŽBĻCąCŅB %0÷Eųž.čBĘCĐCŅB0÷E6-ŽBéCôCŅB %0čę ãB DDâBÖB0˜A ÜLčB1DM_GģNMŦ kL*M­kņ`M¯#km M°/k-Mą˙j4 -Mĩ>|FŅF)8¨F ŨM¸ đF)8|F¨FUMŋe G)8|F4+×MÂbé¨F#G#84ÛîMŤ`#8Å IZhŽČč7<˜Đu<ņ`Ņu<ģNŌu.ĮÔÔGÚG‰8TĮØëGöG‰880íEåęœŠGHHš80ˆFéŖ—ļG.H4Hš80MAíÁ… 8MHSH‰80MAôš„GlHwH‰8 %0÷EųäŨ 8H–H‰80÷EŨG¯HēH‰8 %0čę\ĻŠGĶHŪHš8œG0˜A uų 8÷HI‰8œG0÷E TkGI&Iš8œG0}F c 8?IJI‰8œG0FJĩGcInIš8œG0ė1ŏ8‡IIš8Pč7rFÛm6‹ G_= :;K- =đģN ?Ļ8L* @Ŧ8ņ` A˛8m  B¸8— OJJž8— QJ#Jž8Ä8— V3J>Jž8 %3Ä% Y†=ÂIVJaJĘ8ÚI3Ä% ]}ķÎIyJ„JĘ8æI3 - c‹*ÂIœJŦJž8ļIub Ũ mÔgĀJĐJž8ÂIļI3+× q‚žļIčJîJĘ8b‹ šÛKKž8ÂI¸8bU …SÎ&K1Kž8ÂII_Tp3ĒI :M_uLģNMŦhuL*M­tuņ`M¯€um M°Œu-Mą\u4 -MĩĮÅLKĄKÜ8xK ŨM¸TiĀKÜ8LKxKUMŋËøÚKÜ8LK4+×M•yxKķKÖ84ÛîMÅįÖ8 LÖ8vMĮ*U&LÜ8Ü8 Ö'MĪGLīMĐíuI_Tp3CcGMŧkLI_Tp3Ü8LK¸8ŖĄIuWM Å”NZhŽČĻ8<˜Đ/í<ņ`ŅEí<ģNŌ:í.ĮÔČLÎLFTĮØßLęLF F0íEå_LM MF0ˆFé6ēĒL"M(MF0MAí°ęFAMGMF0MAôāéuL`MkMF %0÷Eų9F„MŠMF0÷Eĩ7uLŖMŽMF %0čęüLĮMŌMFL0˜A VFëMöMFL0÷E $žuLNNFL0}FVF3N>NFL0F=ņuLWNbNFL0ė1° F{NNFPĻ8rF8xW]tÅŗPZhŽČŦ8<˜Đfí<ņ`Ņ|í<ģNŌqí.ĮÔįNíN2FTĮØūN O2F8F0íEåōyŧN"O(OCF0ˆFéąæÉNAOGOCF0MAíĻąIF`OfO2F0MAô3°”NOŠO2F %0÷Eų<IFŖOŠO2F0÷EX~”NÂOÍO2F %0čꀁŧNæOņOCF¯N0˜A ]!IF PP2F¯N0÷E ļK”N.P9PCF¯N0}FpIFRP]P2F¯N0FH•”NvPPCF¯N0ė1A¯8FšP PCFPŦ8rF8xŽ- :DR- =đģN ?l9L* @r9ņ` Ax9m  B~9— O QQ„9— Q!Q,Q„9Š9— VTÅB0MAíTËBWT]T´B0MAô=d~SvTT´B %0÷Eųí^ËBšT T´B0÷E¨~SšTÄT´B %0čę ŗSŨTčTÅBĻS0˜A 6|ËBU U´BĻS0÷E ܉~S%U0UÅBĻS0}FöŌËBIUTU´BĻS0F~SmUxUÅBĻS0ė1ŠēB‘U—UÅBPl9rFK‚6Øf6 :@W- =đģN ?7:L* @=:ņ` AH:m  BN:— OV VT:— QV(VT:Z:— V8VCVT: %3Ä% YûĮU[VfV`:ßU3Ä% ]6ĶU~V‰V`:ëU3 - cæëĮUĄVąVT:ģUub Ũ mDeÅVÕVT:ĮUģU3+× qģUíVķV`:b‹ ÁAWWT:ĮUN:bU …ŗ4+W6WT:ĮUI_Tp%:¯U ÎM_zXģNMŦ“‰L*M­Ÿ‰ņ`M¯Ģ‰m M°ˇ‰-Mą‡‰4 -Mĩ9ÕQWĻWr:}W ŨM¸ģˆÅWr:QW}WUMŋE"ßWr:QW4+×MÂîƒ}WøWl:4ÛîMÅŅl:Xl:vMĮ+Xr:r: ãMĪLXīMĐŠI_Tp%:CĀKMŧpXI_Tp%:r:QWN:ŖĄt‰WŅiÅ™ZZhŽČ7:<˜ĐÔí<ņ`Ņęí<ģNŌßí.ĮÔÍXĶXlFTĮØäXīXlFrF0íEåĮ7ĸXYY}F0ˆFé…Q¯X'Y-Y}F0MAíétƒFFYLYlF0MAô tzXeYpYlF %0÷Eųž×ƒF‰YYlF0÷EķÕzX¨YŗYlF %0čęũ=ĸXĖY×Y}F•X0˜A ¸öƒFđYûYlF•X0÷E ˙zXZZ}F•X0}FīBƒF8ZCZlF•X0FĸzX\ZgZ}F•X0ė1ÁrF€Z†Z}FP7:rFcŒWļhŸ\ZhŽČ=:<˜Đí<ņ`Ņŗí<ģNŌ¨í.ĮÔėZōZOFTĮØ[[OFUF0íEåæwÁZ'[-[`F0ˆFé˛čÎZF[L[`F0MAힸfFe[k[OF0MAô5ˇ™Z„[[OF %0÷EųÜ fF¨[Ž[OF0÷E°Ā™ZĮ[Ō[OF %0čęƒÁZë[ö[`F´Z0˜A N'fF\\OF´Z0÷E nM™Z3\>\`F´Z0}FÜ-fFW\b\OF´Z0Fs–™Z{\†\`F´Z0ė1rLUFŸ\Ĩ\`FP=:rFcŒ¸ė :I^- =đģN ?Æ:L* @Ž'ņ` AĖ:m  BŌ:— O]]Ø:— Q&]1]Ø:Ū:— VA]L]Ø: %3Ä% YžžĐ\d]o]ä:č\3Ä% ]†7Ü\‡]’]ä:ô\3 - c-ąĐ\Ē]ē]Ø:Ä\ub Ũ mcTÎ]Ū]Ø:Đ\Ä\3+× qęœÄ\ö]ü]ä:b‹ ąĶ^ ^Ø:Đ\Ō:bU …~,4^?^Ø:Đ\I_Tp %¸\ ÆÆM_ƒ_ģNMŦĻ“L*M­˛“ņ`M¯ž“m M°Ę“-Mąš“4 -MĩųBZ^¯^ö:†^ ŨM¸r;Î^ö:Z^†^UMŋ´č^ö:Z^4+×M°0†^_đ:4ÛîMÅ"đ:_đ:vMĮ´4_ö:ö: ŧDMĪU_īMĐ+”I_Tp %COøMŧy_I_Tp %ö:Z^Ō:ŖĄ‡“WžĐÅĸaZhŽČÆ:<˜Đ î<ņ`Ņ!î<ģNŌî.ĮÔÖ_Ü_‰FTĮØí_ø_‰FF0íEå÷ˇĢ_``šF0ˆFéú%¸_0`6`šF0MAí؁ FO`U`‰F0MAôü€ƒ_n`y`‰F %0÷Eų"Ú F’`˜`‰F0÷EQŲƒ_ą`ŧ`‰F %0čę‰Ģ_Õ`ā`šFž_0˜A ¯ö Fų`a‰Fž_0÷E Ú#ƒ_a(ašFž_0}F0H FAaLa‰Fž_0F•Ôƒ_eapašFž_0ė1ēF‰aašFPÆ:rFv–6M.AÉŒAŲŗ=AäÎ=Aåä=Aæ>Ač">Aé<>divAÖxdŒöa,,ĐQ :‡c- =đģN ?š@L* @Ļ@ņ` Aą@m  Bˇ@— ONbTbŊ@— QdbobŊ@Ã@— VbŠbŊ@ %3Ä% Y†2bĸb­bÉ@&b3Ä% ]Y˛bÅbĐbÉ@2b3 - cbčbøbŊ@bub Ũ m% ccŊ@bb3+× qäb4c:cÉ@b‹ ,Nc^cŊ@bˇ@bU …5Nrc}cŊ@bI_Tp @öa ä M_ÁdģNMŦ‹žL*M­—žņ`M¯Ŗžm M°¯ž-Mąž4 -Mĩžq˜cícÛ@Äc ŨM¸út dÛ@˜cÄcUMŋ_&dÛ@˜c4+×M #Äc?dÕ@4ÛîMÅ˙ęÕ@XdÕ@vMĮŸĩrdÛ@Û@ ?2MĪ“dīMĐŸI_Tp @CzÔMŧˇdI_Tp @Û@˜cˇ@ŖĄlžW¯ÅāfZhŽČš@<˜ĐũĘ<ņ`ŅË<ģNŌË.ĮÔeeDTĮØ+e6eD D0íEåFédOeUeD0ˆFéųúödneteD0MAíįĸDe“eD0MAôŋÁdŦeˇeD %0÷EųMDĐeÖeD0÷EÁdīeúeD %0čęH–édffDÜd0˜A ™7D7fBfDÜd0÷E E`Ád[fffDÜd0}F›{DfŠfDÜd0F„ ÁdŖfŽfDÜd0ė1” DĮfÍfDPš@rF[ĄW`úÅ˙hZhŽČĻ@<˜Đ°î<ņ`ŅÆî<ģNŌģî.ĮÔ3g9gāFTĮØJgUgāFæF0íEå%gngtgņF0ˆFéãrgg“gņF0MAíu•÷FŦg˛gāF0MAôž”āfËgÖgāF %0÷EųDė÷FīgõgāF0÷E‘ëāfhhāF %0čęŽ g2h=hņFûf0˜A ŋ ÷FVhahāFûf0÷E ßĶāfzh…hņFûf0}F[÷FžhŠhāFûf0FI%āfÂhÍhņFûf0ė16eæFæhėhņFPĻ@rF[Ą|ž :j- =đģN ?/AL* @;Aņ` AFAm  BLA— OWi]iRA— QmixiRAXA— Vˆi“iRA %3Ä% Yg¨iĢiļi^A/i3Ä% ]ĮŲ#iÎiŲi^A;i3 - cÍËiņijRA iub Ũ mäēj%jRAi i3+× qÍ i=jCj^Ab‹ ķßWjgjRAiLAbU … v{j†jRAiI_Tp5A˙h ÛhM_ĘkģNMŦĖĒL*M­ØĒņ`M¯äĒm M°đĒ-MąĀĒ4 -MĩHĄjöjpAÍj ŨM¸ŧČkpAĄjÍjUMŋ¯t/kpAĄj4+×MÂEÅÍjHkjA4ÛîMÅŌÅjAakjAvMĮ¯#{kpApA /ĸMΜkīMĐQĢI_Tp5ACŖĨMŧĀkI_Tp5ApAĄjLAŖĄ­ĒW DÅömZhŽČ/A<^W΋Ę<˜Đ–Ę<ņ`ŅŦĘ<ģNŌĄĘ.ĮÔ*l0lįCTĮØAlLlįCíC0íEåžV˙kelkløC0ˆFé4l l„lŠløC0MAí –ūCŖlŠlįC0MAôˇvĘkÂlÍlįC %0÷EųœėūCælėlįC0÷EÉ"ĘkmmįC %0čęb\˙k)m4møCōk0˜A  ūCMmXmįCōk0÷E MĘkqm|møCōk0}F—WūC•m mįCōk0F ĘkšmÄmøCōk0ė1NOíCŨmãmøCP/ArFœ­WĮÅ:pZhŽČ;A<˜ĐTĘ<ņ`ŅjĘ<ģNŌ_Ę.ĮÔInOnĘCTĮØ`nknĘCĐC0íEåō™n„nŠnÛC0ˆFé~+nŖnŠnÛC0MAíqĶáCÂnČnĘC0MAôĢŌömánėnĘC %0÷Eųû$áCo oĘC0÷E4$öm$o/oĘC %0čęhŖnHoSoÛCn0˜A /BáClowoĘCn0÷E ;Đömo›oÛCn0}FČJáC´oŋoĘCn0FFŗömØoãoÛCn0ė1Å×ĐCüopÛC.Ō*Ũp'pK/AĘCuP;ArFœ­îČ :Ëq- =đģN ?úAL* @Bņ` ABm  B B— O’p˜pB— Q¨pŗpBB— VÃpÎpB %3Ä% YīGRpæpņpBjp3Ä% ]C^p qqBvp3 - cüûRp,qtÃF %0čęŠ-sWtbtÔF s0˜A vÚF{t†tÃF s0÷E KlsŸtĒtÔF s0}FĒfÚFÃtÎtÃF s0F3¸sįtōtÔF s0ė1ųŨÉF uuÔFPúArF´ˇWŦ˙ÅCwZhŽČB<˜Đã÷<ņ`Ņų÷<ģNŌî÷.ĮÔwu}uxGTĮØŽu™uxG~G0íEåHTLu˛u¸u‰G0ˆFéVĪYuŅu×u‰G0MA햏GđuöuxG0MAôí”$uvvxG %0÷Eų‘įG3v9vxG0÷EVæ$uRv]vxG %0čęeZLuvvv‰G?u0˜A f GšvĨvxG?u0÷E Ų,$užvÉv‰G?u0}FE GâvívxG?u0Fux$uww‰G?u0ė1ƒū~G*w0w‰GPBrF´ˇ~SŽB4e :Ūx- =đģN ?îBL* @ôBņ` A˙Bm  BC— OĨwĢw C— QģwÆw CC— VÖwáw C %3Ä% Yb ewųwxC}w3Ä% ]|Žqwx'xC‰w3 - c3 ew?xOx CYwub Ũ mf^cxsx CewYw3+× qˆļYw‹x‘xCb‹ īøĨxĩx CewCbU …nėÉxÔx CewI_TpP;Mw ēŗM_zģNMŦĢŋL*M­ˇŋņ`M¯Ãŋm M°Īŋ-MąŸŋ4 -MĩWũīxDy)Cy ŨM¸˙cy)CīxyUMŋT}y)Cīx4+×MÂŗy–y#C4ÛîMÅ|#C¯y#CvMĮŅ Éy)C)C ĪMĪęyīMĐ0ĀI_TpP;CĮ‹MŧzI_TpP;)CīxCŖĄŒŋWZrÅD|ZhŽČîB†žK %{ã  AjX†îK %{ë¤ Njr†îK % Ėv=%Ÿ†Pč7rFÛmkk û­=%ˆP;ArFœ­.r.r Š=%ų†PŦ8rF8xčvčv T:=%&‡P=:rFcŒXxXx Ņũ=%S‡P´'rF5‹5‹ ĻS€‡Pl9rFK‚ōtōt î=%­‡PôBrF{¸”¸” F)=%ڇPĻ@rF[Ą˜˜ +ĨōkˆP/ArFœ­uu p@/%4ˆPš@rF[Ąšš ã¨=%aˆPאrFc v v wÖBŽˆPאrFc v v ų=%ģˆPM‘rF ÎL´L´Eî7N–%؈Žē'´' Yģ=%‰PîBrF{ÂYÄYÄ =úĒ@3‰PŨrFc+Ō+Ō  L`‰PĻ8rF8xqØqØ  s‰PúArF´ˇMÜMÜEĖN–%̉Ž'%Č* ¤š@z؉PîBrF{ÂYÄYÄ `Â=%ŠPBrF´ˇÃà Į/%2ŠPl9rFK‚ōtōt Ãm•X_ŠP7:rFcŒ%% ;<ž_ŒŠPÆ:rFv–ŠŠ Ŋ$ÜdšŠPš@rF[Ąšš ÁI/%æŠP/ArFœ­uu Ÿ6%‹čW;A˜/ArFœ­.ru ž)bI‹PM‘rF ÎL´L´öX/%PM‘rF ÎL´L´ I!JËt%Ž‹M(ä, ŸŪJã,Ž‹M(ä, % GJęf%΋M(ä, %yxŪO7á‹|O8O}4}dvdv4}‹}};v;v}d Ė%8P5J%­4P9Č*%†ĢP:Č*%˙ÜP@Č*%ėYPFČ* %&ēPGČ*%Š4PHČ*%‚ĢPIČ*%ûÜPJČ*%jšPKČ* %ŖPLČ*$%#„PM'%(%'„PN'%)%ĶÚPP'%*%tNPR'%+%¤*PT'%,%VŽPV'%-%+P]'%.%DP^'%/%ĪÚPa'%0%pNPc'%1% *Pe'%2%RŽPg'%3%+Pn'%4%@Po'%5E ČP|Č*d %´'~ÅPovŒsÉQ( %4eQ7,tQ8f%›cQ|‹˛ĒQ}Q%ÚEQ~Q%}Q_%>]QQ%đQ‚Q%Ã;QƒX%­ĢQ„€pƒQ… %t % Žu‘'ōQ‡X%ázQ‹X%8ŗQX%oXQ™X% îQžX%eŠQŦ %KÆQ¯X%ÃQē %`QŊQ%ãzKKŽ RūKxžŽ%F$KzŽ%<K{MŽrƒR%ît_%šŽu‘' âūSŪŽ%F$S Ž%EtS!Ž-T<_% : TQ%ôTSvéŽ\šTT鎀T[ ŽĶ ”ŅT\ąrTqmTsV%lTtC%%sTuC%scFTy4s Tz%¸šT^ %%š%T_Q%%Ģ.T` %%ƒāTf % %žXToQ%‚,sXT} sôŋT~ĶsÜ TX%t'%ãu‘' ŽT€€TƒFCsôŋT„'sÜ T… %HCT†ît'%-u‘'/d[T¤Q%t'%Hu‘'t'%Xu‘'ƒd*ŽvX×U %v{„}'%}ē'v 1}œ2vœ2vņ}}}<%}S(vĄ2}24v24v‚}vv' vv$ }$ }' }tQ%‘…v{v8 vŋ6v, v=!}=!}ŋ6}, v”6B‘vH‘´'vČ*_%}ë7vô7ú”V4_%52Vēz‘v€‘uEAˆV¯ %Ÿ‘1'd‘ElVŨ1'š‘1'o‘ElVÚo‘Α´'ECˆVĢd‘ã‘´'};vÜ@vÉ?vį@}É?}į@v%}%v1Av“B}“Bv˜BvYD}ĩBv%qWb c’%JWc %†remWd %!We=’qWjĐĒ”’%JWkX%†remWlX%ŅĒWmn’qWv9ŲŒ%JWw,†remWx,:ŲWyŸ’gŠXmBŽq€Y)Øô’%4IYŠŽ+ØYے-ØZ%ô’ā Wå“v“‡ %1“uuˆ.;Gš āŽ G j“%ôGĄj“%ÆõGĸp“%ņGĻ %v9“v†%t'%†“u‘'v1“t'%œ“u‘''‡ %Ŧ“*Ž­FO' fX[.”%Ÿo[0–%ža[2J%%fp[5ˇ %Å8[:%„[;͍%Ä\[@Ą%(D[AŦ%…Š[E– %Ĩa[GJ%(%Öō[J؍,%Øā[N,Ž0%Á[P7Ž4%vo[[yŽ8%Ë[\yŽ@%ł[]yŽH%ŖA[m_%P%ĩA[n_%TC%Å\ XŽ`\cŽe]*_%O ]e˜•!Z]j˜•!GŲ]m_%!E]p_%!‡Õ]s­” !*[]xČ*!-\]~˜•!-’]&'‰Ųį]‡Q%‰BŲ]’Q%‰ˇ]–Q%‰Ø]šQ%‰ā‰]žQ%‰h4]ĄQ%‰vŠ]¤Q%v5%Ž]§¸”3$]Ē %Š]ÅÉĀߕ!æĨ]ÆĒ•!Ėl]ĮĒ•ËĀ]Čļ•‹¨öč1‹ڟ/üŒREHž‘—!42Õ´'!œrÖ%!íėÚž•!(NÛž•(REĸW–b–č1î1REĨs–~–č1ô1RE­–š–č1´'~REŽŦ–ˇ–č1 %0NąĘ^´'Ж֖ú1[´ē÷6%ö–ô1î1[”5Ŋ6ø%—ô1î1[´Ė2%6—´'î1[”5ÍrĘ%V—´'î1* Đ8˛j—u—č1´'L¤Fãqs…—č1î1–ޤ„öŊ— äč Ę +/ GęW Zo˜!Ąô o˜. Zč—ũ—2–—´' %. Z˜˜2 %0w&Ü\22˜8˜2" Z H˜S˜2 2L¤F ^Ãc˜2 2–—Ŋ—WŅs 8™Z™ŋXãZ–!_%Zš!`ŪŽ2>´; Īآ22yB´1ā˜æ˜22M,û˜™2Ņs ™2y˜W'‘ r–™y˜.'‘t=™C™2.&‘xT™_™2 %"'‘}o™z™2$2L¤F}ĩŠ™2$2™W4´ƒ$š!™ŋ‹*2T4´…ƙŅ™/22.3´ˆâ™í™/2 %"4´ũ™š/252L¤FÛíš/252›™øKMš:ÜåM%YÍ%WSŽTvšIntZ %<[Q%WĒ˙`ŸšIntf,<gf%W­8zĪ›!ë“•%5TĀō~ƚ՚+5%5.ŋōæšņš+5 %0íE†15 ››750ˆF‚ō%5)›/›751getƒ?%5H›N›750čė…Ÿû%5g›m›+52Ū‹ę‚››+5%5"Āō—›¨›+5=5*¤F—§Vŧ›Į›+5=5ITÚGŸšŌē^:‘uĪ^EOß´'û›´'‘:^f Õ%œ´'´'‘Éē^l8ŅÄ66œM(‘:^t…æ%VœM(M(‘ĒŲ^|ļ­%vœ´'´'‘:^‹įv%–œM(M(‘[%^˛ø%ļœô1ô1‘FĪ^”’IÄ6Ҝ %‘Ÿú^—fŲÄ6ėœ %‘ŦS^š†ëÄ65%’Ōē^w5ߟ;7 %œČČÄ6ߟ=BH}5ߟ>Xc}5ƒ5/ߟ@s~}5ô13¤FDĨF‰5–Ą}5ƒ5“SetI™>ļÁ}5ƒ53„PM^ô1Ųߝ53uvNC´'÷ũ5”;ÛQ#Ɲ‘_ķW™Å8žƒ5ƒ5 %´'‘yN_ĻXžƒ5ƒ5‘ūąj—}žƒ5ƒ5´'3Wšo¨i%•ž›ž53ögtAkŗžšž53e“|ZŅžמ53ȏ„SQīžõž53ˇŠą ŸŸ5´'3(Mb%0Ÿ6Ÿ53Ī*– %NŸTŸ53]yš<%lŸrŸ53cyž.‚%ŠŸŸ53”ĮŖŊų%¨Ÿޟ53ŗŠ§U“%Ɵ˟53‡OĒŽ6%äŸęŸ5)ĮÁŗ7ũŸ }5(tƓz´'   5۟+ }5 %h œŊ h  X m ž5´' %_5h Ļ} ˆ ž5 %Gh Š— ĸ ž5Ä5H¤F ŠîÎą ž5Ä5< s% čÍĸ•:A S÷ –ˇv Tm%–O> U÷ ╠ėhš—û? ņĘ5—ČE ôĘ5—ļ@ øĘ5—ÁØ û7Ą÷ —ĸŽ ū7Ą$L 7Ą$( Ę5˜u_ zΠT | ĄŒĄĪ5Õ5[ו wm%§Ą÷ ™Đį &ŖRm%šMax +đm%0Gö 0BĶā5äĄęĄæ50gĸ 3v÷ ĸ ĸæ50>ö 6û3÷ "ĸ(ĸæ50ŗD 9÷ AĸGĸæ50đ{ <%`ĸfĸæ50. H<˛%ĸŠĸæ5ė5Q= gˆ÷ ¤ĸā5מ sĩ^÷ Ãĸā5ā5šm% 8đ čŨ¤•:A SŖ–ˇv T%–O> UŖâ• ė‘š—û? ņĘ5—ČE ôĘ5—ļ@ øĘ5—ÁØ ûGŖŖ—ĸŽ ūGŖ$L GŖ$( Ę5˜u_ zŪĸT | ‘ŖœŖō5ø5[ו e %ˇŖŖ™Đį &%šMax +ÂË%0Gö 0ô§6ôŖúŖ 60gĸ 3Ō@Ŗ¤¤ 60>ö 6ĪEŖ2¤8¤ 60ŗD 9<(ŖQ¤W¤ 60đ{ <UZ%p¤v¤ 60. H[¯%¤š¤ 66Q= gÁŖ´¤6מ s#7Ŗͤ66š%ŌĸWĮí ũĨ!Cˇ %!K¯ ÕZ.Įí ˙Ĩ Ĩķ60 – 7N%9ĨSĨķ6´' %´'´'›ŅÍ Nj´'iĨķ6´' %´'W,Ž ¤CĻœƒN ĻOĻ€€€€x!†Ä ąCĻT,Ž ¨ŊĨČĨ)7CĻ2Ĩ ĒoGŨĨčĨ)7CĻ0 ގCĻĻ Ļ)7CĻ",Ž ˛Ļ'Ļ)7/7L¤F ˛ۊ7Ļ)7/7ûļmhšCĻĨČEYĻ%¨žëc…Ļ Ž2 ĩdžxƒfĻĻ Ŗ ú PvŸüĮŋG: rgÄ6[ŅYD%íĻ´'ú1´' %íG.ČOūϧ:7@>RYϧ$§:7 % ĄÂm^[jĻYĻE§K§:7 ?RpnB %YĻl§r§:7 ÔŪyqŅ%YĻ“§ž§:7%ĄT‘|kéYĻģ§Ƨ:7…Ļ™DD_rD´'ĸąĄc?­đ§ô1GČˆ˙§ ¨:7JIH¤Fˆfî¨:7JI-jęWŠ%láūÄ6%M¨˙ %!7] %!ß % -jės¨¨@7ô1 % % %S ķ¨¨¨@7 %3T@øYįô1ƨF73kôų#^ %Ū¨ä¨F73¸Ōú,Ü %ü¨ŠF73•aûĄė %Š ŠF7"-j0Š;Š@7L7L¤FoÉKŠ@7L7%¨W &&žƒŠŖ€7&Ā€´'p7WŅ&ŌĒŠŖ€7&Ô•BM(p7¤”ĒŸĒŠŠĒŸŽĒŋGU3ŽĄĒŠŪŠéŠî7 %Køq¤IÚ–;ĒŠ ĒĒ8IKeÖĻ:>Ī­ĒŠ1Ē7Ē8IĨÛŧĢđVĒŠUĒ[Ēî7.”ĒŽlĒrĒî7"”Ēą‚ĒĒî7>IL¤Fą7/Ēî7>IWÛ ,TĢĸG_Ûm! °aļĒ.Û.āĒæĒ}8.Ú/÷ĒĢ}8 %2ÛŧW2ĢĢ}8"Ûc-Ģ8Ģ}8ƒ8L¤Fc˛›HĢ}8ƒ8ŠĒWˇDz‰Ŧ!ë“•ŨTĀō~„ĢĢB9Ũ.ŋō ĢĢĢB9 %0íEq_õÄĢĘĢH90ˆF‚avŨãĢéĢH91getƒ…÷ŨŦŦH90čė…ãŸŨ!Ŧ'ŦB92Ū‹<ŦGŦB9Ũ"Āō—WŦbŦB9N9*¤F—ĘvŦŦB9N9ITYĢ|#pƒšW•zĘ­!ë“•אTĀō~ÅŦĐŦ:א.ŋōáŦėŦ: %0íEQ ­:0ˆF‚؃א$­*­:1getƒאC­I­:0čė…Åšאb­h­:2Ū‹ķW}­ˆ­:א"Āō—˜­Ŗ­::*¤F—tˇ­­::IT' šŦpÖ uĪ­¤XŽ ˛ā­”ŽŸRŽŋGU9& ´ā­ŽŽ: %K:Z ¸…N¤Hā­@ŽFŽ:.XŽ ģWŽ]Ž:"XŽ žmŽxŽ:PIL¤F žūˆŽ:PI¤:;S ¸Øą¸!fp %!ûr {Â.:;U ØŽŪŽJ;U9;w ”ŽôŽ˙ŽJ; %2’÷{ “ŋ¯¯J;P;0§k€ Ú]P;8¯C¯J;P;0J3\ ^E%\¯b¯H2F3] }w¯‚¯J;%Ĩđ  k”Ž ¯̝J;]HĨ‡R¯ r”ŽɯŲ¯J;]H %Ĩ‹`Ą °§”Ž÷¯°J;]HĨQėĻ Áb”Ž °+°J;]HĨžxĸ Ŋ,”ŽI°T°J;uHĨÉ~Ŗ y”Žr°}°J;1:ĨĀ2¤ ‹W”Ž›°ϰJ;¸8Ĩėg¨ h ”ŽİΰJ;1:Ĩč<Š ÷­ ”Ží°ø°J;uHĨ} Ĩ ‘Ú ”Žą!ąJ;]HĨ§ : ”Ž?ąJąJ;]HĨ‘]¸ â0 ”ŽhąxąJ;]H %ĨßäĒ 6Ô”Ž–ąĄąJ;]H":;t ąąŧąJ;‡HL¤Ft LĖąJ;‡HWN3ģQŗÄÍĄ˛!įŦÔí!T@ÕH‘!kôÖ%!ō¸×\F "ÄÎ6˛P˛h;?´' %´'.ÄÚa˛l˛h;n;2¤FÚŸN˛Œ˛h;n;#œÄ•˛h; %åą!ÕŨt;.N3žIJŪ˛y;?´' %´'.M3Âī˛ú˛y; %2¤FÆëĮŗŗ;_5"N3ß*ŗ5ŗy;…;L¤Fß,XEŗy;…;ØąÁ0 _`ûŗ%§"_h‹;%  _ií%5ņ_j´Á0_c–ŗĢŗ;69?–;Ā0_fģŗÆŗ; %GÁ0_lպ⺐;œ;H¤F_l+î;œ;„PhÄ6ûŗVŗQ4<Ąĩ%ĶîĪ%%?Đ%%2ŠŅ%%5ŌÄ6%ŲxĶÄ6% ÅÔ% %ĪŌÕÄ6%ZŖÖÄ6%¤0×%%í5ØÄ6%HŲ% %ēŧÚĩ$%w;Ûĩ(%ātÜ%,%pŗŨĩ0%âWŪÄ64%aJß%8Q4¤ų´˙´T@ P4š ĩT@ %üļlZšWŧZ­ĩ!øgÄ6Tŧ_NĩYĩZ@ô10Ē6búQ%rĩ}ĩ`@~9fŧ‹ĩ–ĩZ@{bŒŧĄĩZ@ %#ĩWâŨtAļ™SyĮŧÄ6™5’~üŽÄ6[%‡N %ļ´'´'[UP‹ëÆ%#ļô1ô1Ļ-C™(%ô1´' Ä ŌŌļ!T@Ķ´'!kôÔ %!ō¸ÕÄ6e Ä‚ļļúA Be ÄšļĨļúA %§¤FBˇļÂļúA B# ÄËļúA¨d<üŌļ÷ŋŠ!eÖˇ R šÜŸ^<ŋG!ƒ 6.H!…:!ę;=nŲ !å\?/Ú!X+Bp@!xŋE™ !í\I÷ŋ@!ÖsM[ĄH!Đ Qœ­T!œWv–`!ąÚ\ŠĒl!/ˇ_%x!ÁMc %|!ģ4i5A€!/o%:„! %yöˆ!û}Ė!$ƒ9HØ!ų*†%Ü!ēŧ‰ %ā!õ…ŒĨä!bŽŦč!ŽR“ŽŦđ!ŧ#˜Âø!ĩ™QÃüĒ–:2ÅĒ2ŠĄ%Td<š¸Œ¸÷D3HUî€ÁŌļĸ¸­¸÷D %0'Ģúp@Ƹˏ÷D2ƒ´ąōCá¸ė¸÷Dp@0ŖŠš0Īp@š š÷D2'ėž š+š÷Dp@0)Ä~ %DšJš?H0–OÉ˙~ %cšiš?H0ÆfÎi2 %‚šˆš?H0ÆfÔß %Ąš§š?H0M1Ų@ %ĀšÆš?H0$XŪ­ %ßšåš?H0øãxx %ūšē?H0)øéíC %ē#ē?H0Ž=îĀu %<ēBē?H0˜TķÜ1 %[ēaē?H0ĒČøüO %zē€ē?H0}Į:ÄæŽŦ™ēŸē?H0;–=q5ŽŦ¸ēžē?H0ÔŪ@Ÿ%×ēŨē?H0ŅD1(%öēüē?H0äøJīĩÄCģ ģ?H %0YkQš|5A9ģDģ÷D %0vWÆV;]ģcģ÷D0ZōĶ}ö9|ģ‚ģ÷D0Pû^XVü9›ģĄģ?H2ļŽŨËļģÁģ÷D9H0ēŽčļ9HÚģāģ÷D0‚û–™Ä6ųģŧ÷D %0äøM†ļ5Aŧ7ŧ÷D´'´'ø2 ŋއ+Lŧaŧ÷Dø%:0ōļ§U3EHzŧ€ŧ÷D2Ž8­ŋ•ŧ ŧ÷D5A2:v´ü ĩŧĀŧ÷D%:2LĩīŽÕŧÛŧ÷D0fø~B%ôŧúŧ÷D2IĮŗŊŊ÷D2ÁōĖja*Ŋ0Ŋ÷D2\bĐȎEŊPŊ÷D~90†Gg, %iŊtŊ÷Dåļ2˜°ŗ—‰ŊŊ÷D0’ÕæCÆÄC¨ŊŽŊ?H0ÂįËė%:ĮŊÍŊ÷D0Âč9;+:æŊėŊ?H0IėHØ#Až ž÷D02aī‘sxB$ž*ž÷D02aōÄĘrBCžIž?H2_Į÷ę ^ždž÷D08ūMF7}žƒž?H0‚yôÜAœžĸž÷D2'ä8 ˇžŊž÷D2ĀîėĒĨŌžØž÷D2ô•û^(ížķž÷D2üœšŋŋ÷D0•Ŧi$ %'ŋ-ŋ?H0S! æ)7FŋLŋ÷D2$*ųĘ)aŋgŋ÷D2uĘ @|ŋ‚ŋ÷D0|í,Ã8%›ŋĄŋ?H*xí3EĩŋĀŋ÷D%"d<ŖĐŋÛŋ÷DKHL¤FŖŠãëŋ÷DKHW`‚ÁÂ!øúf@!Ųŗûk@¤å0ØiŌÕĀiŌ!ˇvßp@Tå0ÚUĀ`Ā›G|@0ģNÜŊ‚@yĀĀ›G"å0āĀšĀ›GĄG*¤Fāā1ŽĀšĀ›GĄGĢä0ĀÉĀ›G %.—ÃæĀėĀv@T—ÅũĀÁv@|@.—ČÁ$Áv@ %0ģNŅSŧ‚@=ÁCÁv@0ģNŌ`ˆ@\ÁbÁŽ@1getĶû|@{ÁÁŽ@ŦsetÔĘK—ÁĸÁv@|@-Ûŋãš-+‚ėm@‚@ĘÁĐÁŽ@"—ũāÁëÁv@”@*¤Fũ­G˙Á Âv@”@ĀITp@÷ŋWÅķzLÃ!ë“•@7TĀō~GÂRÂÄA@7.ŋōcÂnÂÄA %0íEž”ĘA‡ÂÂĐA0ˆF‚zE@7ĻÂŦÂĐA1getƒũ‰@7ÅÂËÂĐA0čė…¨§@7äÂęÂÄA2Ū‹a9˙ ÃÄA@7"Āō—Ã%ÃÄAÖA*¤F—Aa9ÃDÃÄAÖAIT%¨ÂWÛ]zÄ!ë“•ÜATĀō~|ÇÃâAÜA.ŋō˜ÃŖÃâA %0íEÕačAŧÃÂÃîA0ˆF‚ŪÖÜAÛÃáÃîA1getƒ9ÜAúÃÄîA0čė…R+ÜAÄÄâA2Ū‹=c4Ä?ÄâAÜA"Āō—OÄZÄâAôA*¤F—öīnÄyÄâAôAITÄd¤ŒÄ(ÅŸ^¤ŋGfd¤ŦġÄÜADIfd¤ÅÄËÄÜA@4gށÄāÄëÄÜA %­Ņ%ÄÅÜA´'ú1´' %íGQÃAļW^ÁÁRĮ!øúf@!ŲŗûĶž¤å0ØiŌÆiŌ!ˇvß´ˇTå0ڐśŧGrB0ģNÜe˛`B´ÅēŧG"å0āĘÅÕŧG­G*¤FāIRéÅôŧG­GĢä0YÅÆ§G %.—Ã!Æ'Æ„BT—Å8ÆCÆ„BrB.—ČTÆ_Æ„B %0ģNŅŠq`BxÆ~Æ„B0ģNŌ5â~B—ƝƊB1getĶÉrBļÆŧÆŠBŦsetÔĖŌÆŨÆ„BrB-Ûŋãĸ-+‚ėÅk`BĮ ĮŠB"—ũĮ&Į„BB*¤Fũ­:ĮEĮ„BBYÅIT´ˇ2ÅWļz‡Č!ë“•–BTĀō~‚ĮĮœB–B.ŋōžĮŠĮœB %0íE¸ZĸBÂĮČĮ¨B0ˆF‚‡Į–BáĮįĮ¨B1getƒLÖBČȨB0čė…‚Œ–BČ%ČœB2Ū‹Lö:ČEČœB–B"Āō—UČ`ČœBŽB*¤F—ĸCtČČœBŽBIT™Č¤ī.¸YÍŽ>C1™Č“ÉŸ8CŋGf>CÆČŅČ–BüHf>CßČåČ–B¯¤FęzĸBüČÉ–BüHUs*3™ČÉ(É–B %Ĩ0ņ6- ™ČFÉQÉ–B–;Ĩ~p9äO™ČoÉuÉ–B°JŽ<'ˇɖB–;ž)!Xū¸YÍŽFCB™ČĮĘ™Č!O h %!ģņi´!ĸj´ .FCDųÉ ĘđH–;–;U4I§ÉĘ*ĘđH %Ĩ0ņOũŲ§ÉHĘSĘđH–;*nPn ŗ3gĘmĘđHą~p`Ú#§ÉŠĘĘđH"FCl ĘĢĘđHöHL¤Fl/ģĘđHöH[F[ ûŗâĘ´'.īrķĘËäH–;–;TīuËËäH–BĨđxų‡Č=ËHËäH]HĨßä|íp‡ČfËqËäH]HĨ‡R…Õc‡ČËŸËäH]H %Ĩ‘]Šfˇ ‡ČŊËÍËäH]H %Ĩžxk‡ČëËöËäHuHĨč<”üÅ ‡ČĖĖäHuHĨÉ~šh‡Č=ĖHĖäH1:ĨėgžHÍ ‡ČfĖqĖäH1:ĨĀ2Ĩë‡ČĖšĖäH¸8*Jް‚KŽĖšĖäH–;*Čx´PāÍĖĶĖäH+ņáļŖŗûŗëĖöĖäH%"īēÍÍäHęH*¤Fē—u%Í0ÍäHęHiî‡ČCÍNÍäH %§É™ČWĮŽĩ ö …Í ˛u Ķ| 6 "ĸW^2Č Î!ÅļŪ H‘T^2Ę °ÍģÍŦC´'.]2× ĖÍ×ÍŦC %"^2ā įÍōÍŦC˛CL¤Fā ŋÔÎŦC˛C…ÍWÄ6TÎIθCô10Ē69%bÎmΞCÄCfāÉÚÔÚģHÁHĢQ6/ÚäÚģH %¤}ÅĄđÚŌÛŸwÅŋG.}ÅŖÛ%Û9HU&¤đÚ;ÛFÛ9H %KõŦ^QûŗđÚgÛwÛ9H % %ĨÉŦą…âđÚ•Û›Û9H"}Å´ĢÛļÛ9HIL¤F´]ÆÛ9HIŌļ#2 ×5m* Ø5¤Ã2(¸đÚņÜđÚ$jà H‘!™ŋÆ™!CĖ*Ž$.Ã2ē@ÜFÜcHKõ¸ ŋ ûŗīÛgÜwÜcH % %ĨÉŦž īÛ•Ü›ÜcH"Ã2ÎĢÜļÜcHiH*¤FÎ2GĘÜÕÜcHiHĢÂ2īÛåÜcH %īÛ¤ŨÄ ¸ ßž)!eá \FTŨ -Ũ8ŨoH´'Ĩ‘] Ūō öÜVŨfŨoH]H %Í 6%€Ũ'%1UŌ ķę%šŨ'%<ĪC {CÄ6šŨô1%×q 88Ä6ĶŨô1 `ā hAÄ6íŨô1å aÄ6Ū´'.Á 7ę,Ūp7ô1ô1ô1 Ž ëGŪp7´'kˆĶ egŪp7´'1:ŌĒ ‰ä‚Ūp7uHpW N~Ūp7]H‡SG OPÄ6ˇŪ:"Ũ ĮŪŌŪoH{H*¤F û`æŪņŪoH{HĢÜöÜßoH %öܔޤęâ„ ¸Îá¸fęâ>ßIߍH“H.ę↠Zß`ߍHĸŽr‡ WŪ}ß´'´'ĨđŒ ß›ßĻߍH]HĨ‡RŸ 2īßÄßÔߍH]H %Ĩ‹` ößōßũߍH]HĨQė  ßā&āH]HĨžxÉ BBßDāOāHuHĨÉ~Ö ē ßmāxāH1:ĨĀ2Ū Š—ß–āĄāH¸8Ĩėgé ã ßŋāĘāH1:Ĩč<ü Uđ ßčāķāHuHĨ}  Žo ßááH]HĨ– kí ß:áEáH]HĨ‘]( Ū~ ßcásáH]H %Ĩßä˜ ö´ß‘áœáH]HB •ŋ˛á]HĢéâßÂáH %ß´/ÚnŲ‡ČđÚĒŠÄYĻā­ ä ”‘üiâŒüf ä&â1âVI\IT äüBâMâVI¸8Ģ äâ]âVI %âiŌ "?‡%‰â'%‹,ĸ ä ÍîÕ%ŦâSąâ‰Ņˡ“ ,rĐ %Øâ´'´' `ŧ´'îâ´' ûčÍ %ãëD 8ÎÎ %ã % tįėëD5ã´'´' J!Ī %Pã´'Ņ]´T‘ (ū´'oã % ĄFũ %…ã %  Fõ %›ãëD r™÷ %ģã %*ŽQ% –ķëDÖã %´' ŽĐú %öã %uQ%†ĶČ*´' ÕFŋ%$ä<%<% îÅCĻ?ä<%<% 5W %Uä%wv*%{‚\%vä'% č‡ ĄĪ­ŽäITŨ“ä6Ę ˜Č. %ŋäIE %8; % %ĩcé éäITŨļąö¤Ho´' ėį ¤HåITā­ąö¤H:‰o´'ĩ(ä CåITJļąö5A p´' Z  %såITŌļąö%÷Dq´' ,Ē % åsFœ­`Âls˛Alsĩjˇ'ĘåsFœ­—Nt˛At šC %÷åsF8x`Â0w90w ‚6 %$æsFcŒ` x´: xˇĖŪK%;æÄCˇÉP%RæÄCĩSĨ'|æsFcŒ—Nöy´:öyĩØ'ĻæsF{—N •kC •ī c'% ¤˙ eϿοIC,X% PCĻęæXā %Eׇ…%˙æ<% fɍ%į'%{rËŠĐ/į'%p7 ZJuMįITouuĩA!&Đeįô1p7ĩĄ &đ„įITīp7 fɐ%šį<%ĩA!&Ū˛įk5p7ĩäH&đŅįIT, +‘p7ĩ¯FLđįIE %)7&;ĩd­Ÿč*Žĩ '-čsF[Ą—Nh˜Ah˜ ]s%Cč'% čų˜'%Yč'%EŒķÄ6učIT(fø¸ČĐCK‘ûŒčô1w-ę ”%´ĩ‹´ļŦw…0ŠM‘{]4/*´'Ëč´'ŽŦšŗ<%EQ¨‡ %ōčĩĩ5s&OéIT,ĻæéųEp7oGQ)šĩŽ:úģöY“Jv9´›™ƒnÚeąÄ6ņ´' %eî˙Ä6EņZ9´'´'´'ˇn°Ø Ä6\ņ¸8ēøtâ oņ¸8ˇGėÄ6‹ņ´'´'[ŒšĐŅĢņ´'´' %4ä-ķ%ūÄ6ËņIT,ųE{wūļÄ6āņ %ž~Ôū%ō_5´'qĩEšJÔđĩ(ō´'ĩa.î/%Lō´'´'%VJ|"3%pō´'´'qˇ0dÅÄ6‡ō´'’ū˜%Ļō´'%ŨúG´'Åō´'´'ā™ÅÁĩäō´'ĩėŦč§F ķ´'´'ô1ô1%ūŽŒi’ ;ķ´'´'´'´'‹PœŠĶ dķ´'´'´'´'ūŽ ŖJ ķ´'´'M(M(<&à Āķ´'´'´'%%%Ê%œs ōķš%´'´'%%–1" ô´'´'M(M(–1ŦIŒ Dô´'´'´'´'‹¯ēŅĻ mô´'´'´'´'Ä%A„ Ÿôšm%´'´'m%m%ēFSšôIT %:ēSĶôITJ5AēäsSíôITP @ûūÄ6 õ3H %ē:I8õ %{¤ŲÄ64õ&'ˇ™‹° %Kõ*Ž4|!ķZÄ6kõITČ*JDhyŗ<§G—õĪYÅ­ĒiŌbI:Z‚ Āõ´'´'ĀõĀõK˛q,°"{6G õõ´'´'ĀõĀõ­~˜m ö´'´'ĀõĀõ,Î Gö´'´'ĀõĀõ, „LŦ pö´'´'ĀõĀõ@ ‡nw ™ö´'´'ĀõĀõܨ=%:Öö´'´'´'´'Ī­×ÛãÛ: õ5 )Ä6ėö´' J ´'÷´'†ŨQŽ&÷%š<%Æ:ä,3"bR?A÷Æ:ä,‚ÆVe÷%š'%Æ:M‘3"_b>€÷Æ:M‘Ļ4yFœ›GŦ÷ĪĀ­ĒiŌbIˇWXꞎČ÷9D %-(jß@7k kG]ü÷%š'%Æ:M‘ĶBkĖ ø%š<%Æ:ä,w™†(†;ø?ô1mō&ōÂhøITŨļąö¤Ho´'‹ī&ō(¤HœøITā­ąö¤H:‰o´'JĮ&X+ÉøITJļąö5A p´'ēcžrÜø @ēFŠsīø @EđX— %ų %†&„Ã%8ųITŌļąö%÷Dq´'ŊR‹ĻĖcžG˛5^ų˙˙˙˙˙˙˙ĀõŊH';cM %ŋVą]ļx ZˆkôĻk9ûÄ6ĀÚ2­x íÜĀ{Ú3žx ķķĀ4Īx §Ŋãräöy˜ŊÖ2\VÛ­ĀŸ€Yøx Ŧ%Z y ?‘Āëx[y |íĀrW\+y (\ĀČ]m )z Å0n :z DÅs/Õ]z ķwllS{%Æˇæē'LÆVTįē'RÆ0đčē'TÆŨ…éē'IĮæ¨M‘Æ—Vē'/ȁgWz /Č&ˇXŽz ./Æ8Q%ÆäR%Åå ÄÍz L@Pq´wåDPú"xåDPS›¨â7ĻPU(†ss_āĪ›öYC5ĻP]cüiüY5ĻP`yü„üY5_5/ĻPe”üŸüY5´'3,wĨōúe5ˇüÂüY5Hü3,wĢ4×e5ÚüåüY5%3,wą‚fe5ũüũY5M(3,w˛ô8e5 ũ+ũY5(3,wˇōe5CũNũY5k53NÄ`Ä6fũlũq5)¤FäWũŠũY5_5É{ĸ•e5ĻũąũITē'Y56Énse5ÍũØũIT %Y5Ō:ÉîUse5ôũ˙ũIT'%Y5ƒÉmse5ū&ūITQ%Y5Ŧ83ō¸Xˇ´'V\Ŧ83a[į%tzŦ83čd^ūž%’˜Ŧ83Ũda8%°ļŦ83ādd&%ÎÔŦ84~kēÄ6í´'?fEZ  Ļ8 %fy3 $ Ļ8¸8ˤF˛83 Ļ8¸83ã( ~ %Õ°Œ8xã(€l r 09b’÷ƒÁ† ‘ 09¸83Ģ5†ß¸8Š ´ 69 %3öŋ‰]D %Ė Ō 69Gã(Žá ė 09<9H¤FŽĄû 09<9D WËŧØ!¤80%!r5YĢ.ËŧD O T9Z9TËŧ` k T9%07 _6%„ Š `90ĢE Û Ŗ Š `90ō¸6E´' Č `905-z´'á į `90,w!›f9  T9C5* P)sh * T9_5*¤F7ˇ‰> I T9Z9fĘŧW b T9 %ĖWãf9 Š ITM(T9(øĖüáf9§ ˛ ITJGT9ČäĖáĪf9Ī Ú ITT9ī059Zf9ú  ITPãT9`ã0Ĩ" 8f9% 0 IT3T9¸8Ėúüf9M X IT/üT9_5Ėžĸf9u € IT?T9 åĖ´ f9 ¨ ITLåT9\å0ø,Jžf9Č Ķ IT´'T96ĖDf9đ û ITĶT9,æĖŅ.f9 # ITnæT9~æĖŧFf9@ K ITĀæT9ĐæĖŅ–f9h s IT%T9ø5ĖŠ,f9 › ITväT9†äĖí–f9¸ à ITįT9"įĖj=f9ā ë ITļįT9ÆįĖËf9ITdįT9tįĖÖ¯f90;ITčãT9øãĖ f9XcIT(čT98čĖ^Ęf9€‹ITzčT9ŠčĖm.f9¨ŗITĖčT9ÜčÍ!$f9ĖIT, T9+‘ ¤ë[ŨũNŗ.Â<#2a×ÛIV;P;+>G%ag\;*ÉĪHüũ{V;"ŅOR‘œV;b;L¤FR{™ŦV;b;¤˜Ųŋ¸bŸ’ŲŋGf˜ŲäīP;If˜ŲũP;¯¤FÂ> I%P;IUŒŖÁ¸;FP; %ĨđÄDR¸doP;]HĨ‡RÉ}š¸P;]H %Ĩ‹`ÍūF¸ģÆP;]HĨQėиäīP;]HĨžxĶ֏ P;uHĨÉ~Öŋ“¸6AP;1:ĨĀ2Ų_¸_jP;¸8ĨėgÜhq ¸ˆ“P;1:Ĩč<ßm ¸ąŧP;uHĨ} â„į ¸ÚåP;]HĨån ¸P;]HĨ‘]č§Ę ¸,<P;]H %ĶßäėQI¸VP;]H1Ž_3™™žØ_7“ h’ ž¸™%ĨÆ_RĻx%ό_Sp@%%_TĶH T1ŽÔߨH09.1Ž'đØHx09U0Ž;g!ØH %Ĩ\”F!ig?JØH¸8* .2^dØHG1Ž_Vs~ØHŪHH¤F_Vã׍ØHŪHÍ˙’™JŸĮ˙ŋGfÍ˙ÄĪp@,IfÍ˙Ũãp@¯¤Fd<2Iúp@,I@Ē5”™%p@ %Ô\”–°û™>p@¸8¤9†|ęJ'#Ÿ3†ŋG! ŌƒÄ6!r†Ę­!:ā‰cŒ !Hv–!âø$!™‘(!f“%,!ŽR•ü0! %˜ö8.9†V î5A´'´'øUöb J)5A %0ôÕō´'BHÄC0äGi´'agÄC0…& #%€†ÄC0M1+ ä‹ %ŸĨÄC0$X0 ŒD %žÄÄC0ø5 .š %ŨãÄC0)ø: L %ü ÄC0Ž=? “ĸ % ! ÄC0ĒČD ĸ; %: @ ÄC0˜TI <Ũ %Y _ ÄC0ÔŪ#†D%x ~ ÄC0Ņ&%—  ÄC0;–)/žüļ ŧ ÄC0ī$i /E+:Õ ā ÄC %0Pû1ŲA:ų ˙ ÄC+õQ8ŋē:!!5A+õQ;éÖ´:5!;!ÄC+Hp CM%:S!^!5A %*&D&õr!}!5A%* ŋw é‘!œ!5A%:*ÕÜ™ j°!ļ!5AčÃNŌlĖ!5AĪRun} ^{á!į!5A*^WQû!"5A*m[1y""5AU^†(%5"+:_šcˇę%O"+:ēi;%i"+: ĮnĘ=%ƒ"+:\sâ%"+:N”x.\%ˇ"+:*$*Ÿ úPË"Ö"5A)7*uʤ ālę"đ"5A"9†›# #5AuHL¤F›õ#5AuHOŋ$8aFˇäĮâ%X#’īīˇßģâ%}#’, +‘+‘ŧm^;ž#ŠF&'&'p7ŧ6éNē#ŠF&'p7ˇLŌ%Ö#´'´'ˇßĐė  $’´'%´'´'66ˇM&ė >$’%´'´'īīˇŽhė r$’, %´'´'+‘+‘ˇLŲ%Ž$M(M(Õ\5ė ’M(%´'´'(ø(øQĘ'#QÍ'#J|6'#/ČФŽ#(_â$™)Ÿ¨#ŋG!™ŋ™!ä÷D$™ĻŅ9}ë3H1Run‹ %E%K%3H0įũ^6­´'d%j%QH0’ÕdęFÄCƒ%‰%QH0Âlf+:ĸ%¨%QH0•Ŧs?2 %Á%Į%QH0ōļy EHā%æ%3H0)Oå9 %˙%&QH0–OTڟ %&$&QH0ÆfYB† %=&C&QH0Æf_Ö0 %\&b&QH0M1dB %{&&QH0$Xi*Č %š& &QH0ølw[ %š&ŋ&QH0)øqL" %Ø&Ū&QH0Ž=vĒ %÷&ũ&QH0˜T{g %''QH0ĒČ~3Q %5';'QH0}Į‚hãŽŦT'Z'QH0;–‡ĶŨŽŦs'y'QH0ÔŪŒ]b%’'˜'QH0Ґ‡%ą'ˇ'QH0äø”§ÄCĐ'Û'QH %0Pûššf:ô'ú'QH0vĻđ“WH((3H+NY´ @1(<(3H @*v3ÁÕ$P(o(3H?´' %ô1ô1*\b´ƒ(“(3Hô1ô1+Yk Šô5AĢ(ļ(3H %+`3įM÷DÎ(Ô(3H+`3čhZ?Hė(ō(QH"Ž#€))3HÖh™…â$)))3H %*Ą§‹Z=)H)3H B*ĨD’”Ģ\)b)3H"Ž#r)})3H]HL¤FžË)3H]Hâ$¤‹#ô¸A,¸f‹#Å)Đ)IIf‹#Ū)ä)I¯¤F.Iû)*IIĨđöęāž)$*/*I]HĨ‡R÷”.ž)M*]*I]H %Ĩ‹`ųäĻž){*†*I]HĨQėú3 ž)¤*¯*I]HĨžxû…Íž)Í*Ø*IuHĨÉ~üąĘž)ö*+I1:ĨĀ2ũĶž)+*+I¸8Ĩėgū%Í ž)H+S+I1:Ĩč<˙z ž)q+|+IuHĨ} < ž)š+Ĩ+I]HĨB# ž)Ã+Î+I]HĨ‘]ŗŽ ž)ė+ü+I]H %ĨßäIEž),%,I]HĢŠ#ž)5,I %Ũgž)¸™ˇ˜Ä ´'q,?ˇöÚŧ Ä6ˆ, %ˇ5äˇ Ä6Ÿ, %ןūš´' +ųcË,Yčã %gú ˛/ųcë,Yčã %Ĩúü-§ČøĄ -wņÍ…7 ˇK÷@%'-¸8ˇŧ"J%>-¸84,w:ČŽ2\-2¸8ĨK&OLÉÄ6}-IT´'6p4&OúÄ6ž-ITM((øE,wč2¸-2_5ˇëͯ Ä6Ų- %´'´'wņĶ++ ķ-_5ƒYQā .´'´'%%nģ×ß E.´'´'´'´''„Ģ n.´'´'´'´'nģ-ƒ —.´'´'ô1ô1'!t Ā.´'´'ô1ô1›`JÁ  é.´'´'m%m%nģ(=ņ /´'´'k5k5'.! ;/´'´'k5k5nģ ąž d/´'´'M(M('•Ü /´'´'M(M(Ąq&OäåÄ6Ž/IT,ųEˇ^,ũcÅ/ô1āÚ/ā/Æ:M‘ā“t1û/Æ:ä,ˇš[ Ä60Ö7ã6“|%10ô1Ö7káÜUÛŪÄ6k %Ŋ­ģ%k3‘Âr%köĮī%kۖÍČÄ6kJŌÕ¸Ä6k¸ ŪŦ_%kãīáׯÄ6k@rí'%k‰Ŧķ&ĩk›]ųɜĩkŨf˙D%Ŋß.ø%ŊFš ]ČĩŊęū%Ŋ\ÛĀ›Ä6ÆhÜ“%dkįķ^ Á%ĀŪũ™¨w ĪŅĀZŠžšw lkČJ&ĄĘw *Āĸž¤Ûw wÎĀ[3§ėw *ĀũŠũw šĀ[.Ģx ēĒPüņØx P„,å0x PŊƒīAx §ĐSRx Ā8v–}‘—}\Fv‘—vŊ—}aF}t˜vy˜v™v™}–™2v›™}$šØž3a _2sĶ‹a" %sÚaa#*ŽüÔa$;2‹™a: Žq€a?.;J4rtaF4aKĢ2%ŧ;aLî%?4aMĄ aRŲ2%oŠaS %%baT %%ģ3aU_2 aZ3%ŧ;a[î%?4a\Ą%ģ3a]_2abM3%ŧ;acî%?4adĄ%)"ae %%üĐafj2 %ÛXagj2alo3%ū÷am*Ž%t-anC%as‘3%!ÕatX%%ԑau % azŋ3%Üũa{*Ž%Ŗ?a| %%€ha}Q%sĒĄaGJ4sũķaN‰2sģIaVĢ2Ų_rta^Ų2syĒah3sũ)aoM3s"Navo3s%ąa~‘3%Ea@ %%ļaA %%G aC %%zįa2 t %Z4u‘'/;a€u2 bUp4vv4ƒ‚4 % WŒcŪ4rc­4sãce4sŠWc!ú4%Šc#Ž4%=5c+ô’%ĩĸc. %„%Ē)c15ˆƒô4 %ô4*ŽvZ4vŪ4Úv5vˇFvjGvoG} 55vÚGvŸš}ÚGvĪ›}Ī›vI5‡2Y52v/ü}(}/ü}wHv(vԛv}7 }v7 yÉđ=Ģ56†$ 5vĨ5ÛabiuĻ•5v< }Ŋ &'v }Û5m%}7ĄvÍĸ}ÍĸvŌĸ}ū5%}GŖvŨ¤}Ũ¤}´'}H‘v‡9};v;v‡H}I}‡HvëIvđIvRJ}đI}RJv <}ž=vž=v"I}WJviJ}ëI}K}iK}Kv\Jv[Z}5K}wO}šQ}[Z}\JvÕZ}š[}o_}ÕZvo_}X]}Ę]vâ¤vtX}Yvß_}šX}Zvt_}ß_}%vĨ}TĻ:7vYĻv%¨vWŠ}WŠv-vž}žvŖvövaFvŖ=}4?v4?vä_}ä`}ä_võ`}˜a}õ`}avé`vc}Ebvc}d}0d}Åj}cvÅjvî7vĒŠvú7î7}î7}ú7vÚD}kFvkFvėj}Ļk}ėjvˇk}Zl}ˇk}_lvĢkvÖm}mvÛm}Įn}ōn}õt}ÛmvõtvŠĒ}TĢvG}•8č7vĨI}Gv3v? }3}? vĒI};Kv;KvIu}v}Iuvv}ˇv}v}ŧvvvv3x}dwv8x}$y}Oy}W}8xvWvD v } vYĢv‰Ŧ}‰Ŧv }ØvØ} vũvņ}ũ}ņvŗP}DRvDRv\}€}\v'€}ʀ}'€}Ī€v€vF‚}wvK‚}7ƒ}bƒ}o‰}K‚vo‰vöv}všŦvĘ­}Ę­:vā­v vK}Kv%:vC:%:}%:}C:v¯U}@Wv@Wvt‰}.Š}t‰v?Š}âŠ}?Š}įŠv3Šv^Œ}‹vcŒ}O}z}‚“}cŒv‚“v %} %}%v¸\}I^vI^v‡“}A”}‡“vR”}õ”}R”}ú”vF”vq–}ĸ•vv–}b—}—}•}v–v•v”Žv¸vvb}bvåą}Ą˛h;vØąvQŗ}Qŗ69vVŗ}´} ´ û2W %¸;5E‡Jd%Í;´' KW %ã;´' KWX%ų;´'E Üe*Ž"<uu&'&' “jdivWc’=< % % YÆW4Č*S<´' ĪW”’n<X%X% îW^ %‰<´'&' ÂāWi&'Š<(´'&' ) Wa %É<(´'&'ĩžWüë<*Ž&'&' “w•Wv %ĩųėWx =Q%EŨ‹W¤%$=´'M‘EgWˇX%C=´'M‘ %E7qWģ_%b=´'M‘ % ëHWĖ %x=´' uLWl&'˜=Č*M(&' ‚ĐWe %ŗ=Č*<% ĪWŒÎ=,, SžW$,ä=´'E`™WŅ,>´'M‘ %EOøWÖf%">´'M‘ %EzWŦm%<>´'M‘E@TW¯t%V>´'M‘ŽŖ f}> Ņd †h ŋĒ â Ņg7ĸ>%“žg9 %%/g: %v}>7oËhî> ˆW ¯Ū -H AĪ ‰Č ˘ Ø î€€ €˜0iJ% ×j•?%@Ōj—î>%Đ\j˜?t'%.?u‘' ÜjŦĮ? Æ 5P ?H ŗ  Or ú är |iĀ ¨ € ['€ Án€ Ĩ7€ *€ ¸2€ Âd€Ā Ųú€€ U€€ Ĩ1€€ ƒŗ€€€€ ŧ€€€€2 k7=@!'đk9 %!Øk: %!j”k; %!įÄk< % !Ö k=Ą”!8*k>=@!į•k?Č*!NJk@C@vų>vĮ?vO@Į?v´v#ĩv­ĩ-p@v™v÷ŋ}k@vp@vk@vÂ}Âv @vPvŦ@ @} @}Ŧ@vöa}‡cv‡cvlž}&Ÿ}lžv7Ÿ}ڟ}7Ÿ}ߟv+ŸvVĄ}‡ v[Ą}Gĸ}rĸ}¨Ē}[Ąv¨Ēv5AvJvAA5A}5A}AAv˙h}jvjv­Ē}gĢ}­ĒvxĢ}Ŧ}xĢ} ŦvlĢv—­}ČŦvœ­}ˆŽ}ŗŽ}Ā´}œ­vĀ´vÂ}%¨vLÃ}LÃvÄvQÃ}Äv(Å}(ÅvAļv-Å}Aļ}-Åv:p}ËqvËqvÅ´}ĩ}Å´vĩ}3ļ}ĩ}8ļv„ĩv¯ˇ}āļv´ˇ} ¸}˸}Ķž}´ˇvĶžv2ÅvRĮ}RĮv™ČvWĮ}™ČvYÍ}YÍv~S}ĀBl9vCw}~SvŽB}ŨBאvHw}ŽBvP;vúBP;}P;}úBvMw}ŪxvŪxvŒŋ}FĀ}ŒŋvWĀ}úĀ}WĀ}˙ĀvKĀvvÂ}§Áv{Â}gÃ}’Ã}šÉ}{ÂvšÉvz}‰CîBvc~}zv˜6vh~}˜6v…Í}ÎvÎvÎvĪ$vöm}ÖC;Avm~}ömvĘk}ķC/Avr~}ĘkvÁd}Dš@vw~}Ádvu¨}ŦËvŦË}u¨v?DČ*}Č*}?Dv|~} €v €vąË}kĖ}ąËv|Ė}Í}|Ė}$ÍvpĖv›Î}ĖÍv Î}ŒĪ}ˇĪ}ŋÕ} ÎvŋÕv×ÎvG}ÔDM‘vkƒ}Gv­Īv{%}¤ĐvŌļvôÖvųÖv[×}ųÖ}[×vpƒ}…v…vÖ}`×vr×}ôÖ}7Ø}ŠØ}<Øve×v|į}VØ}˜Ü}ģŪ}|į}e×vöį}ģč}Šė}öįvŠė}yę}ëęvëVví}$W}CXv•å}<æví}Úå}@įvŽė}ív`Z}í}˙E,vuL}FĻ8vՅ}uLv/īvĻ/v”N}>FŦ8vڅ}”Nv™Z}[F=:v߅}™ZvzX}xF7:vä…}zXvƒ_}•FÆ:vé…}ƒ_vD|}˛FôBvî…}D|vs}ĪFúAvķ…}svāf}ėFĻ@vø…}āfv 0v@}GŨvũ…}@v ävī}Eä}dåvį}īv™īt'%ZGu‘'}JGvÔđvy4v†}y4v$u}„GBv†}$u}ÖvĀ} ÂvYÅ}EĮ‡ %ŋGmvÅGpŖŗGvõŌvÖĶ}ÖĶvÛĶ}|Ôv:7vÔ}ÖvÖ}ŠÖvKÕ}dŲú1vŽÖ}iŲviŲ3Hvâ$vđÚvŌÛ}ŠĒ}ŌÛv™)}}™)vīÛ}ņÜvöÜ}Ī$} ßvß}ßvß}ÎážHvĶávŨvī}A,÷Dv/Ú}ØávnŲ}Ũá09vg}F,v‡Č}âáv§É}NÍ}SÍ}įávž)}K,}ž)}P,}¸vb}U,}™vėá}ėá}ņá}öá}ûávâ}iâviŌ}nâ}iŌŨKN´'ĄIŪN´'Ū§ N´'ߨ °IģIā5„ŨBß ĘIÕIā5„ŨBßäIīIā5„ŨBßņ"ūI Jā5„ J‘ß2#J(Jā5„ J߃ 7JBJā5„BJ‘vÔũߟü\JgJā5„gJGJáW ‡Jâã__p ē*ŽvčDvŲũßÉDĸJ­Jā5„­JJßôDÁJĖJā5„­JßEÛJæJā5„­Jßš õJKā5„KãßKKā5„ŨBßÖŌ.KCKā5„CKāÖš%bIäšĀØZKoKā5„oKāÖš%›GßwƒK˜Kā5„Ŧ@āÖš%åAŠl÷ %šKâæĄ@lųšK*ŽvÄKįjá$†îKčÁ! 0žKč4I 0 %vjá>†'LčÁ! AîKč4I A %âæá; CjáX†KLčÁ! NîKč4I N %ßX ZLqLā5„Ké__a íqLĄvĀDß2E‹L Lā5„ LāÖš%vLv–üßŊüēLĪLā5„ĪLāÖš%ĨLv;vuß;īLMā5„MāÖš%⏧MÔLÚLv^DßgD-MLMā5„LMāÖš%⏧QMMÚLß?;eM„Mā5„MāÖš%⏧„MÚLß{˜MŊMā5„ŨBŪm* IŊMŪņ Ihīß(ŅMÜMā5„ Jß(1ëMöMā5„ Jß”1N*Nā5„ JŪm* I*NŪņ I +‘áp!JNâã__p ē*Žßq"YNpNā5„pNé__a íuN‘ːęMâ ”‹N Nā5„ NāÖš%VIߍ ´NŲNā5„ŨBŪņ Ahë__s A´'áJũNč‚ÄōũNč‡ÄōOá‹į‹ßđ O!Oā5„KßŌ 0OGOā5„Ké__n ĪhßŖVOaOā5„ŨBáĮzOë__sí‹á)­OŪ‹ķ‹Ūđúí‹ë__nđá) āOë__d dČ*ë__s d´'ë__n dhė'$7’*ŽPđé__p7’*Žím7˜P*Ž*ŽáŪũ?Pé__a!OĪ6é__b!OĪ6áøũcPé__a!KĪ6é__b!KĪ6áū‡Pé__a!—7é__b!—7ßŪü–P­Pā5„ĪLčŽp —V8á,ūÜP^î(ŪßÜPë__s´'ã‘áPūQ^î(ŪßâQë__câ'%ã‘}ƒ;ß`;*QAQā5„Mé__nĀQ%}Žū}Ī6átūqQé__a![qQé__b![Ī6GQvë7ßc8‹QŗQā5„ŗQŪü!BJ8âî%Ĩ!DJ8vQá“ūĐQé__a!WĪ6á¨ūôQé__a!_ôQé__b!_Ī6GQ߇8R=Rā5„ŗQŪü!SJ8ŪųT!SJ8âî%Ĩ!UJ8ß°8LRtRā5„ŗQŪ˜!vÂūâî%Ĩ!xÂūßÔ8ƒRĢRā5„ŗQŪ6Į!Âūâî%Ĩ!ÂūvÍūß…EĀRØRā5„ØRë__ca'%ĢRvûū}ûūßÛūøRSā5„SčY,xSŨRãRߡ–(S3Sā5„HߘBSMSā5„MS2ásâjSëch‡'%ŨfÄ %—SŪŽ Ä´'Ū—ĘÄ—Svˇ“}Ŧâá–âģSëstÕģSSߝĪSįSā5„GŪm* *įSīßĄûSTā5„TérhsIT}5ƒ5ßđ+T6Tā5„ŨBßũETPTā5„ŨBėĩģä´'zTé__sä´'é__cä %ß§‰TžTā5„57āÖš%ßËÄ­TÂTā5„ÂTāÖš%ÜAę`Ô”ØTíTā5„íTāÖš%áGßƨU Uā5„ UF7ßä¨ U+Uā5„ Uߊ:UEUā5„ U߯TU_Uā5„>FßnUyUā5„>FßzˆU“Uā5„>FߘĸU­Uā5„>FßļŧUĮUā5„>FßÖUëUā5„k@āÖš%äÔÚęũUVā5„VāÖš%ģHäÚÚ)V>Vā5„>VāÖš%ĮHßk RV]Vā5„]V`9ßUqV|Vā5„|Vü9ßsV›Vā5„›Vö9ß4¯VēVā5„ēV+:ßSÎVŲVā5„ēVßgčVķVā5„ķVÄCß%WWā5„úBāÖš%ä˛á„ .WCWā5„CWāÖš%Hä%,ôZWoWā5„oWāÖš%Ißļ(ƒWŽWā5„.HßÔ(W¨Wā5„¨WQHß%ÛŧWŅWā5„ŅWāÖš%9H߀ŧåWũWā5„ļHېխ5Aß ŧ X$Xā5„ļHŪÂ´%:ߏŊ3X>Xā5„>X?HߎŊRX]Xā5„ļHßÍŊlXwXā5„>Xßŋ†X‘Xā5„>Xß‚ŋ XĢXā5„>XßÉēXĪXā5„ĪXāÖš%–BäīŋæXņXā5„úBęĪ’Y Yā5„k@á ä3YŪ|ŋ<%Ūųŋ<%á$äiYŪ|Å<%ŪųÆ<%âîĀšĮOĻáŊâYës1Đ´'ës2Đ´'ß œY§Yā5„ŨBáØâĀYŪô´'á?äZŪd %âîá– H‘âîa# H‘î\1$ %áîâZŪT@ÍëDáã7ZëfdÎ %ėQõ$ %aZčœŽ$´'čY$'ß×pZ{Zā5„ēV߸ŠZ•Zā5„ēVá`ßģZŪšÕ‡ ´'Ū§‡ ´'ßC¯ĘZÕZā5„ÕZHáfŨņZëcÍ '%áã[Ū° ė´'Ū äė´'ßb¯&[>[ā5„>[Ū=e] %J;߀ēR[][ā5„>Xߟēl[w[ā5„>Xß‚ģ†[‘[ā5„>XßDģ [Ģ[ā5„ļHßߝē[Å[ā5„Å[5ßaŧŲ[ä[ā5„ļHęˇÄŒõ[\ā5„ÂTß)\\ā5„ķVīUäßŌ×0\;\ā5„;\(Hßņ×O\Z\ā5„;\ߨi\t\ā5„;\ßO؃\Ž\ā5„;\ßn؝\ĩ\ā5„ĩ\Ūļ€ %HߎØÉ\Ô\ā5„;\ß­Øã\û\ā5„ĩ\ŪbŌ‚ŦÎßÍØ ]]ā5„;\ßėØ$];]ā5„ĩ\ëfd„ %ß ŲJ]U]ā5„;\ß+Ųd]{]ā5„ĩ\ëfd† %ßŌÕŠ]ĸ]ā5„ĸ]Ūˆ žŽ HėÕ\˙´'Ņ]é__s˙´'é__c˙ %vąâá5ãũ]Ū° Ī´'ëbufĪŅ]áaä^éc\'%ßÁ"^:^ā5„Gë__s 2´'đ6—ĸn^éstrĸ´'éreĸn^âæ@šĨߕî1vy^‡Q‰^Qߏ;˜^¯^ā5„Mčdôls^īPãß>Å^Đ^ā5„>Fßäß^ę^ā5„>Fßņšų^_ā5„_75ߊũ_6_ITē'ā5„6_čģN•;_Y56ßsĢO_e_ā5„e_ëp~ŨB9ßO y_‘_ā5„‘_Ūë%T9ßéĢĨ_°_ā5„°_H9ßĘĢÄ_Ī_ā5„°_ߊ Ū_é_ā5„]Vß*­ø_`ā5„`:ß ­`"`ā5„`ßö1`<`ā5„ēVßK`V`ā5„ēVßEe`p`ā5„p`r9á˙ļ`­ '%^î(ŖĄņŪœC Ū ´'ŪÛ ß ļ`īßąĘ`â`ā5„â`ë__n>ŽžAßđ°ö`aā5„aë__n >Ž AßŦÂ"a-aā5„-aĐAßáÃAaLaā5„LaîAß0°`akaā5„â`ávä~aITŨá6˙ŋa­ '%^î(ŖĄņŪĸk Ô ŋaŪm* Õ Äaã‘īßąũßabIT %ā5„6_évalsbâ…bŌ:,w7†9bb %}Žäߨũ;b\bIT'%ā5„6_évals\bâ…bƒßĢĢpb{bā5„°_}­ĩä}ĩZ“bŖbā5„Ŗb¨bZ@{bál˙îb­ '%^î(ŖĄņŪœC ę îbŪÛ ë ´'īß­ec cā5„ câ7ß‘f!c9cā5„ cë__nģcßĖzHcScā5„Sc*9ß߄gcrcā5„rcđ9ßۏ†cžcā5„žcë__nĀ:ß÷ޞcŊcā5„žcß!Ėc×cā5„ķVßHæcņcā5„ķVߡddā5„dë__n ĸ:ß ™,d7dā5„7dD;ßʙKdcdā5„cdë__n —&;ßÅwd‚dā5„‚dwCßĪÅ–dŽdā5„Ždë__n ÃYCß‚¯Âdčdā5„>[Ū<$  čdâņi  &']HßŲ¯üd"eā5„>[Ū<$Ą "eâņiĄ &']Hß+°6e\eā5„>[Ū<$ĸ \eâņiĸ &'uHßT°pe–eā5„>[Ū<$Ŗ –eâņiŖ &'1:ß}°ĒeĐeā5„>[Ū<$¤ Đeâņi¤ &'¸8ßø°äe fā5„>[Ū<$Ĩ fâņiĨ &']Hß°fDfā5„>[Ū<$Ļ DfâņiĻ %]Hß!ąXf~fā5„>[Ū<$§ ~fâņi§ %]Hßϰ’f¸fā5„>[Ū<$¨ ¸fâņi¨ %1:ßΰĖfōfā5„>[Ū<$Š ōfâņiŠ %uHßxąg,gā5„>[Ū<$Ē ,gâņiĒ %]Hß̝@gsgā5„>[ŪãĨ¯ sgŪj° %âņi˛ &']HßJą‡gēgā5„>[ŪãĨ¸ ēgŪjš %âņiģ %]HßHēÎgŲgā5„Ųg~Bßģíghā5„hë__n V¸`B}ÎämÎ2"h2hā5„2h7h¸C h}BhQ%ß˙ũ]h~hITQ%ā5„6_évals~hâ…bjŪ÷šū %ßé2MjXjā5„Xjŗßšljwjā5„wjŐß3‹j jā5„XjāÖš%ßę¯jÄjā5„wjāÖš%ßÚGĶjëjā5„ëjë__iØđj‰88ßnIkkā5„kš8ßwo#k.kā5„.kY8ßöGBkMkā5„kß4H\kgkā5„ëjßĩovkkā5„.k}ĨIár†ŋkPč7rFÛmŪœC=ŋkŪÛ>ÄkkkßĢØkōkā5„ōkâņitXMn}8ßĀŧllā5„ļHßî™ l8lā5„7dë__n—á˜änlIE %ëv.nlëi. %Ūî. %8;ߍĮ‚l—lā5„—lāÖš%œB߲;ĢlÂlā5„Mé__nÉ,ß&ūØlųlIT,ā5„6_évalsųlâ…bųEßÕ; m$mā5„Mé__fÜ%ßMū:m[mIT%ā5„6_évals[mâ…bø5ß|om‡mā5„Scë__nHÚxßr–mĄmā5„ēVßĩ°mģmā5„|Vá"ÔmŪņ^+:á5"ímŪņc+:ßÅümnā5„rcë__ní‚ß*†#n;nā5„rcë__nHí‚ßäSJnbnā5„bnë__iØgn´BēBßxU{n†nā5„†nÅBßCšn˛nā5„˛në__iØˇnŅB×BßeËnÖnā5„ cßÔdånđnā5„ cߨD˙n oā5„ oâB=3o!ˆŒbCo!1íb %ō=oCo¤Hv3oáŋä‰oITŨļąöŪ…œ ¤HŪ 8 oŪ6 ´'=­o!ˆŒ Áo!1í %ķ¤HģoÁo:v­oáéä pITā­ąö¤HŪ…œ :Ū 8 ‰oŪ6 ´'=.p!ˆŒˆ >p!1íˆ %ō8p>p5Av.páå„pITJļąöŪ…œ 5AŪ 8  pŪ6 ´'ß~z“pĢpā5„Ģpë__iذp}CƒCßņ6ÄpÜpā5„Üpë__iØápšC6ß…8õpqā5„q C=)q!ˆŒX=q!1íX %ķ%7q=q÷Dv)qáCå†qITŌļąö%Ū…œ ÷DŪ 8 qŪ6 ´'ß0l•q­qā5„­që__iØ˛qįCíCßÄmÆqŅqā5„ŅqøCßãoåqđqā5„đqÛCßknrrā5„đqߊnr)rā5„)rĘC}m~ំlrP;ArFœ­ŪœC=lrŪÛ>qr.r.rv_ËękË4vr˜rā5„˜rvrß ŦrÄrā5„Ärë__iØÉrČDÎDß4ƒŨrčrā5„črŲDßĩÚürsā5„sWEßOns3sā5„)rë__iØ3sĐCßW¯GsRsā5„â`ß•¯aslsā5„â`vrs‡%‚sÄCáså×ssFœ­`Âlsëc×sŪlsâîģ% %âņitޞAßŨēësösā5„>Xßžēttā5„>Xƒt5Avtáĸ˙gt;öm;ĶtŪ‹| ĻömŪßw Ļömë__f Ļtá åtsFœ­—Ntëc'tŪÉÍ't˛AßbNątŧtā5„ŧtFßÎLĐtčtā5„čtë__iØítF F}CwáÔ˙uK~Suōtßë=&u1uā5„1uv7ß>EuZuā5„1uāÖš%ßd`iu~uā5„~uāÖš%ˆ7ß3`’uuā5„~uß+aŦuˇuā5„ˇuš7ßbËuÖuā5„Öu˛7ßž/ęuvā5„vč­7-¸v,Fī}Hwáō˙+vKŽB+v vßíN?vWvā5„Wvë__iØ\v2F8Fßķypv{vā5„Scß1zŠv•vā5„Sc߁P¤v¯vā5„¯vCFß OÃvÎvā5„¯vßGOŨvčvā5„Wv}څáˆ&wPŦ8rF8xŪœC=&wŪÛ>+wčvčvv6w‡%Fw¸8áĘå›wsF8x`Â0wëc›wŪ0wâîģ% %âņitļx9ßōZ¯wĮwā5„Įwë__iØĖwOFUFߎāwëwā5„žcß\Žúwxā5„žc߆\xxā5„x`Fß[3x>xā5„xßL[MxXxā5„Įw}߅áų†–xP=:rFcŒŪœC=–xŪÛ>›xXxXxvĻx‡%ļx+:á÷å ysFcŒ` xëc yŪ xâîģ% %âņitጴ:ß~ y*yā5„ķVß_ 9yDyā5„ķVá$æ]yŪšÕKÄCá;ævyŪšÕPÄCáœáÛyŪãĨ Ûyâî$X %âņi %âîšÕ āyâņj %âîņ åy]HuH1:ƒöy%:vęyáAz;™Z;ĶöyŪ‹| Ļ™ZŪßw Ļ™Zë__f ĻöyßķVPzszā5„szé__p ĮUč4I xzT:N:áLXļzI_Tp%:é__aMŧļzé__pMŧQWčYMŧģzr:N:ßgZĪzÚzā5„Úz}FßĶXîz{ā5„{ë__iØ {lFrFßü]{B{ā5„B{é__p Đ\č4I G{Ø:Ō:áU_…{I_Tp %é__aMŧ…{é__pMŧZ^čYMŧŠ{ö:Ō:ßpaž{Š{ā5„Š{šFßÜ_Ŋ{Õ{ā5„Õ{ë__iØÚ{‰FFߝ|î{|ā5„|ë__iØ |ĻFŦFßtÄ|*|ā5„‚dß6Ä9|D|ā5„‚dß‘xS|v|ā5„v|é__p ewč4I {| CCáęyš|I_TpP;é__aMŧš|é__pMŧīxčYMŧž|)CCß|Ō|Ũ|ā5„Ũ|ŽCß:cņ|}ā5„}é__p bč4I }Ŋ@ˇ@á“dW}I_Tp @é__aMŧW}é__pMŧ˜cčYMŧ\}Û@ˇ@ߎfp}{}ā5„{}Dße}§}ā5„§}ë__iØŦ}D Dß5ŖĀ}Ë}ā5„Ë} AßÛ¨ß}ö}ā5„ö}é__x•¨!Dß÷ĸ ~~ā5„Ë}äuļŌ'~7~ā5„ĪF7~ Bß~qK~n~ā5„n~é__p Rpč4I s~B Bá×rą~I_TpAļé__aMŧą~é__pMŧÜqčYMŧļ~0B BßōtĘ~Õ~ā5„Õ~ÔFß^sé~ā5„ë__iØÃFÉFß9g2ā5„2ë__iØ7āFæFßTŖKVā5„V)AßŖjuā5„V}r~áB•KĘk•ußCjŠĖā5„Ėé__p ič4I ŅRALAáœk€I_Tp5Aé__aMŧ€é__pMŧĄjčYMŧ€pALAߡe(€3€ā5„§}ß6eB€M€ā5„{}ßtūc€z€IT'%ā5„6_čģN•z€JDßĀŽ€ą€ā5„ą€é__p ”~č4I ļ€PDJDáô€I_TpČ*é__aMŧô€é__pMŧ€čYMŧų€nDJDßį> 0ā5„1ué__p ģ=č4I 0īáa@nI_Tpé__aMŧné__pMŧE?čYMŧs”7īß|B‡’ā5„’Gßč@ρžā5„žë__iØÁG G}Ũá` ‚I_TpŨé__a'Ļ ‚é__b'Ļ‚âæ‰}'¯Ũȁȁá.đ*‚*‚/‚”7”7á@X‚é__aMĮX‚é__bMĮ]‚”7”7ßZaq‚ˆ‚ā5„ˇué__xeˆ‚Ļ7ßŋaœ‚§‚ā5„Öu}Íūá΂Ō|Eé__f .ĢRßũüŨ‚č‚ā5„gJᝃ­ '%^î(ŪĸkJƒã‘ßéƒ'ƒ<ƒā5„<ƒāÖš%EßoÖPƒeƒā5„eƒāÖš%-EáÛƒƒë__x*(VØágÛœƒë__x* VØßæ̃Ãā5„Ãë__x*ååÃEßÔÚ׃âƒā5„âƒ]EßåXöƒ„ā5„„ë__x*ÄXų6ß9R"„-„ā5„-„Ĩ6ßwRA„L„ā5„-„áÅm„I_TpH‘é__r'/m„6ß+J„Œ„ā5„Œ„Q6ߧ𠄸„ā5„¸„ë__x@BŊ„`Gīßi1Ņ„á„ā5„miᄏßJõ„ …ā5„Œié__a8s …Ąß. …+…ā5„ŨBäS =…R…ā5„R…āÖš%Ґßf…{…ā5„GāÖš%äŒ˛Í…ĸ…ā5„t;āÖš%ßĢą…ƅā5„e_āÖš%ßČĮՅā…ā5„ā…¨BßîJô…†ā5„†é__p ÂIč4I †ž8¸8áGLZ†I_Tp3é__aMŧZ†é__pMŧLKčYMŧ_†Ü8¸8ß÷Qs†–†ā5„–†é__p ËPč4I ›†„9~9áPSŲ†I_Tpũé__aMŧŲ†é__pMŧURčYMŧŪ†ĸ9~9ß+/ō† ‡ā5„ ‡č ˜-ā#ĩ!Fä–ĩZ ‡5‡ā5„ŖbāÖš%ßšĖD‡\‡ā5„\‡Ūō¸°a‡äH–;äĐ)ôx‡ƒ‡ā5„oWäļŌ•‡LJā5„ĪFāÖš%ßĸqš‡Їā5„n~é__p …RpáPrô‡é__aMŋô‡é__pMŋÜq0Bߐŧˆˆā5„háoã+ˆëfdũ %ß!0:ˆQˆā5„Qˆč ˜-āÎũFä†Î2hˆ}ˆā5„2hāÖš%ßHŒˆŖˆā5„Térhs>Ŗˆƒ5ß2ˇˆˆā5„Tę  ;͈čˆā5„TāÖš%ß}ž÷ˆ‰ā5„Å[ßÁ‰‰ā5„Å[á…ã4‰ëfpõëDß3C‰h‰ā5„R…Ū=‰ Č*ë__a h‰Ąīk ß{ ƒ‰މā5„GßĶĖ‰ĩ‰ā5„\‡ŪÜåļ%ßREĉΉā5„ Lß(ũŪ‰é‰ā5„ĪLvãßėū‰Šā5„Ščäbø8é‰ák>Šé__a!w^7é__b!w^7ßššMŠcŠā5„Niëp~%5á…{Šé__n$à %ášąŠ­ '%^î(čĸk$ĐąŠé__f$ĐlFã‘ß(ŊЊā5„ŨBß 7ߊęŠā5„qá€Ũ‹ëcŌ '%ßK7‹‹ā5„Üpßf*‹5‹ā5„ŨB}h~á&‡s‹P´'rFŪœC=s‹ŪÛ>x‹5‹5‹ßÎŒ‹¤‹ā5„Gë__s ž´'ßĒŗ‹ˋā5„GŪm* ĩˋīß˙2ߋī‹ā5„Xjī‹šßĪŒŒā5„wjé__a8sŒːßG1.Œ9Œā5„ Jäx KŒ`Œā5„`ŒāÖš% ‘ßSEtŒ‰Œā5„‰ŒāÖš% 8ßlkŒ˛Œā5„˛ŒāÖš%8áÄ=֌`č7č7č7áÆ`č7č‹|zč7čßwzč7áå>`č7I_Tpî7č‹|”č7čßw”č7>)8ß#JRgā5„†āÖš%ßÉuv‹ā5„‹āÖš%Đ8ä Ō˜ĸ­ā5„CKßęĄŧĮā5„Įæ5ß ĸۍæā5„ĮáŠĸ˙ësam g˙ā5á¤ĸGŽŪÁ% sGŽŪÆ% tLŽâî&Ė u7Ąî.Ė v7Ąā5ā5ßGĸ`ŽkŽā5„ĮßúŖzŽ…Žā5„…Ž 6ߤ™Ž¤Žā5„…Žáš¤ŊŽësam gŊŽ6á´¤ŪÁ% sŪÆ% t âî&Ė uGŖî.Ė vGŖ66ßW¤)ā5„…Žß,Q8Mā5„–†āÖš%ßÜ\qā5„qāÖš%–9ßK…œā5„†é__p …ÂIáĀKĀé__aMŋĀé__pMŋLKÜ8ßTԏߏā5„†nßYĩā5„ŪŅb `@~9áS‡HPl9rFK‚ŪœCHŪېMōtōtßE/jP~Sā5„ ‡č‡s-æ~Sß>T›ā5„bn}œ0ęl/-ܲā5„ ‡›ę„/-Üؐíā5„ ‡āÖš%ßRü‘ā5„–†é__p …ËPáÉR7‘é__aMŋ7‘é__pMŋURĸ9ß(VK‘`‘ā5„szāÖš%ßô‰o‘„‘ā5„„‘āÖš%f:áã=¨‘`7:7:7:áՑ`7:č‹|z7:čßwz7:á1’`7:I_Tp%:č‹|”7:čßw”7:’r:ß1]$’9’ā5„B{āÖš%ß”H’]’ā5„]’āÖš%ę:á>’`Æ:Æ:Æ:á^Ž’`Æ:č‹|zÆ:čßwzÆ:á}é’`Æ:I_Tp %č‹|”Æ:čßw”Æ:é’ö:ßWũ’“ā5„szé__p …ĮUáÅW8“é__aMŋ8“é__pMŋQWr:ß ^L“c“ā5„B{é__p …Đ\áÎ^‡“é__aMŋ‡“é__pMŋZ^ö:߯w›“°“ā5„v|āÖš%ß Āŋ“ԓā5„ԓāÖš%Cá!>ø“`îBîBîBáĒ%”`îBč‹|zîBčßwzîBáÉ`”`îBI_TpP;č‹|”îBčßw”îB`”)Cß1~t””ā5„”ˇFßš|“”ž”ā5„”ß÷|­”¸”ā5„|}î…ဇö”PôBrF{ÂŪœC=ö”ŪÛ>û”¸”¸”ƒ •P;v•áöW•;D|;Ķ •Ū‹| ĻD|Ūßw ĻD|ë__f Ļ •ßĩxf•}•ā5„v|é__p …ewácyĄ•é__aMŋĄ•é__pMŋīx)CßīŖĩ•Ā•ā5„Vß^cĪ•æ•ā5„}é__p …bá d –é__aMŋ –é__pMŋ˜cÛ@ßob–3–ā5„}āÖš%ßėžB–W–ā5„W–āÖš%Ī@á@>{–`š@š@š@á(¨–`š@č‹|zš@čßwzš@áGã–`š@I_Tp @č‹|”š@čßw”š@ã–Û@ßxi÷– —ā5„ĖāÖš%ß-Ģ—0—ā5„0—āÖš%dAá_>T—`/A/A/Aát—`/Ač‹|z/Ačßwz/Aá“ŧ—`/AI_Tp5Ač‹|”/Ačßw”/Aŧ—pAßÍhЗۗā5„ۗņFßUgī—ú—ā5„ۗß“g ˜˜ā5„2}ø…á­‡R˜PĻ@rF[ĄŪœC=R˜ŪÛ>W˜˜˜ƒh˜ @v\˜áĀŗ˜;āf;Ķh˜Ū‹| ĻāfŪßw Ļāfë__f Ļh˜ßLl˜͘ā5„ŅqßIÎܘô˜ā5„ô˜ŪšÕ9ÄCžCáڇ1™P/ArFœ­ŪœC1™Ūې6™uuߊlJ™U™ā5„­q}Ą0ę;0-Ül™|™ā5„Qˆ|™U™ęS0-Ü’™§™ā5„QˆāÖš%ßgjļ™͙ā5„Ėé__p …iákņ™é__aMŋņ™é__pMŋĄjpAߊššā5„š-D}w~áˆSšPš@rF[ĄŪœC/SšŪÛ0XšššáōŒšPÁdë__x$Œšë__y%‘š'D'Dß/ŠĨšŋšā5„šâæ‰}ŖÁdßkŠΚؚā5„ö}á›PÁdë__x0›ë__y1 ›'D'Dßõ~!›6›ā5„ą€āÖš%ß1ĖE›Z›ā5„Z›āÖš%bDá~>~›`M‘M‘M‘á:Ģ›`M‘č‹|zM‘čßwzM‘áYæ›`M‘I_TpČ*č‹|”M‘čßw”M‘æ›nDß4Ņú›œā5„œŧDßäœ0œā5„ą€é__p …”~á’€Tœé__aMŋTœé__pMŋ€nDß ?hœœā5„1ué__p …ģ=áš?Ŗœé__aMŋŖœé__pMŋE?”7á‚ÛÁœë__x*$cØá¸Ûڜë__x*,cØßpä霝ā5„é__x*ŊPä Gß;ߝā5„sá†>I_Tp'%>CĄĄß"EWbā5„‰Œß;kq|ā5„˛Œßík‹–ā5„–/8ߨlĒĩā5„ĩG8ß•nɝԝā5„.kßÜEã˙ā5„‰Œé__p mōDæDáŅF/žé__aM¸/žé__pM¸|Fé__nM¸¨F)8߁mCžhžā5„ĩé__pŽOlé__nŽđôę:lOyžŽžā5„–āÖš%߁lž¨žā5„ĩßEmˇžĖžā5„ĩāÖš%ßo۞đžā5„.kāÖš%ßōI˙ž Ÿā5„†ß˜uŸ$Ÿā5„‹ßJv3Ÿ>Ÿā5„>Ÿâ8ß5wRŸ]Ÿā5„]Ÿú8ßŦJqŸŸā5„†é__p mÂIļIáĄKŊŸé__aM¸ŊŸé__pM¸LKé__nM¸xKÜ8ßŪwҟöŸā5„]Ÿé__pŽŦvé__nŽđôę—vO  ā5„>ŸāÖš%áŠ= I_Tp3é__r'/= ˛8áĮc I_Tp3čšN\Ļ8áåđ `Ļ8č‹|dĻ8čßwdĻ8ááŋ `Ļ8č‹|zĻ8čßwzĻ8ôáú `Ļ8I_Tp3č‹|”Ļ8čßw”Ļ8ú Ü8ßŪvĄĄā5„]Ÿßĸw(Ą=Ąā5„]ŸāÖš%ßĘ~LĄdĄā5„dĄŪņœzx 9ßî}xĄƒĄā5„dĄßûP’ĄĄā5„–†ßĢŦĄˇĄā5„qß]€ÆĄŅĄā5„ŅĄ¨9ßHåĄđĄā5„đĄĀ9ßĩQĸ ĸā5„–†é__p mËPŋPáĒRPĸé__aM¸Pĸé__pM¸URé__nM¸Rĸ9ßņdĸ‰ĸā5„đĄé__pŽŋ€é__nŽđôęĒ€Ošĸ¯ĸā5„ŅĄāÖš%á-ĐĸI_Tpũé__r'/Đĸx9áKöĸI_TpũčšN\l9áņ#Ŗ`l9č‹|dl9čßwdl9áeRŖ`l9č‹|zl9čßwzl9ôᄍŖ`l9I_Tpũč‹|”l9čßw”l9Ŗĸ9ßņ€ĄŖŦŖā5„đĄßĩģŖĐŖā5„đĄāÖš%ßŨˆßŖ÷Ŗā5„÷ŖŪņœ‚Ō9߈ ¤¤ā5„÷ŖáRæL¤sFcŒ—Nöyëc'L¤ŪÉÍ'öy´:áœņi¤č‡s4ÔĻ8áō¤č‡s4Ôl9ßĨ>¤Ŧ¤ā5„1ué__p mģ=¯=áš?ܤé__aM¸Ü¤é__pM¸E?é__nM¸q?”7ßŋbđ¤Ĩā5„Öué__pŽaé__nŽđôęxaO&Ĩ;Ĩā5„ˇuāÖš%áą\ĨI_Tpé__r'/\ĨõáĪ‚ĨI_TpčšN\ŨáéąĨ`Ũč‹|zŨčßwzŨôáėĨ`ŨI_Tpč‹|”Ũčßw”ŨėĨ”7߃bĻĻā5„ÖuāÖš%ßĢi$Ļ<Ļā5„ÖhŪņœ[cß>KĻ[Ļā5„1u[Ļ|7ßI`oφĻā5„~ué__a8s†ĻŽ7ß@ašĻąĻā5„ˇué__aZąĻ 7ß0CÅĻĐĻā5„ oá5§I_T1I_T2é__pOŨč­7O§īßnC§%§ā5„˛ná4ˆ]§PאrFcŪœC=]§ŪÛ>b§ v vá]¸§Ä:ŽB`Ũč‹|)kŽBčßw)kŽBčá;)lŨâæ;`)s%Ꭰ¨Ä:ŽB`ŨI_TpŪ‹|)ŽBŪßw)ŽBŪá;)Ũ ¨”7áŖC¨Ū‹í‹Ūđúí‹ë__nđáaˆ{¨PאrFcŪœC{¨Ūې€¨ v vߨ/¨´¨PŽBā5„vč‡s-žŽBáĻ0Õ¨Pp' č4I-ÄÕ¨īáΊPŽB_ÂĻ/č‹| ŸŽBčßw ŸŽBč ˜ ŸĻ/ß÷U+Š6Šā5„szßÉEŠPŠā5„„‘ßuŠ_ŠjŠā5„jŠx:ß`‹~ЉŠā5„‰Š:ßąVŠšŠā5„szé__p mĮUģUáĻWéŠé__aM¸éŠé__pM¸QWé__nM¸}Wr:ß ŒũŠ"Ēā5„‰Šé__pŽ×Šé__nŽđôęŠO3ĒHĒā5„jŠāÖš%ß ‹WĒbĒā5„‰Šß͋qdžĒā5„‰ŠāÖš%ß]•Ē Ēā5„B{ß֓¯ĒēĒā5„]’߈”ÉĒÔĒā5„ÔĒü:ßs•čĒķĒā5„ķĒ;ßē]Ģ#Ģā5„B{é__p mĐ\Ä\á¯^SĢé__aM¸SĢé__pM¸Z^é__nM¸†^ö:ß–gĢŒĢā5„ķĒé__pŽę”é__nŽđôęՔOĢ˛Ģā5„ÔĒāÖš%ß•ÁĢĖĢā5„ķĒßā•ÛĢđĢā5„ķĒāÖš%áôŦč‡s4Ô7:á{ô Ŧč‡s4ÔÆ:ß•w/Ŧ:Ŧā5„v|ßÛŋIŦTŦā5„ԓߍĀcŦnŦā5„nŦ/CßxÁ‚ŦŦā5„ŦGCß5ÃĄŦŦŦā5„ŽdßĮŽģŦÆŦā5„>[ßOxÕŦņŦā5„v|é__p mewYwáDy!­é__aM¸!­é__pM¸īxé__nM¸y)Cß!Â5­Z­ā5„Ŧé__pŽīĀé__nŽđôęÚĀOk­€­ā5„nŦāÖš%ß!Á­š­ā5„ŦßåÁŠ­ž­ā5„ŦāÖš%á|æô­sF{—N •ëc'ô­ŪÉÍ' •kCßŗÃŽŽā5„ŽdāÖš%áæô5Žč‡s4ÔîBáQõMŽč‡s4ÔzáŧõeŽč‡s4Ԛ@ßøbtސŽā5„}é__p mbbáícĀŽé__aM¸ĀŽé__pM¸˜cé__nM¸ÄcÛ@ߥԎųŽā5„ųŽé__pŽĪŸé__nŽđôų@ęēŸO¯$¯ā5„$¯āÖš%á@ß 8¯C¯ā5„ųŽßÅ R¯g¯ā5„ųŽāÖš%á'ö¯č‡s4ÔúAßb'°2°ā5„}ßģžA°L°ā5„W–ßmŸ[°f°ā5„$¯ßX u°€°ā5„ųŽßGi°š°ā5„ĖßüĒа´°ā5„0—ߎĢðΰā5„ΰvAß™Ŧâ°í°ā5„í°ŽAßjąąā5„Ėé__p mi iáöjMąé__aM¸Mąé__pM¸Ąjé__nM¸ÍjpAßB­aą†ąā5„í°é__pŽŦé__nŽđôęûĢO—ąŦąā5„ΰāÖš%ßBŦģąÆąā5„í°ß­Õąęąā5„í°āÖš%ßŗpųą˛ā5„n~āÖš%ßEĩ˛2˛ā5„2˛āÖš%$BęļOH˛]˛ā5„]˛āÖš%6Bá’öz˛č‡s4Ô/AßÄ~‰˛”˛ā5„ą€ßĖŖ˛ޞā5„Z›ß˛ĖŊ˛Ȳā5„ȲtDߝÍܲį˛ā5„į˛ŒDß~û˛ŗā5„ą€é__p m”~ˆ~ás€Gŗé__aM¸Gŗé__pM¸€é__nM¸J€nDßFÎ[ŗ€ŗā5„į˛é__pŽÍé__nŽđôę˙ĖO‘ŗĻŗā5„ȲāÖš%ßFÍĩŗĀŗā5„į˛ß ÎĪŗäŗā5„į˛āÖš%ß<Đķŗūŗā5„Ēhßŧ ´´ā5„črßú'´2´ā5„ÄrßzĐA´L´ā5„Ēh}kƒáŽˆŠ´PM‘rF ÎŪœC=Š´ŪÛ>´L´L´ßØĪŖ´¸´ā5„ĒhāÖš%áũöĐ´č‡s4ÔM‘áh÷č´č‡s4ÔŨß¸ƒ÷´ĩā5„<ƒß>Öĩĩā5„eƒßã×+ĩ6ĩā5„6ĩ9Eß­×JĩUĩā5„6ĩ߃Ūdĩoĩā5„sßŲ~ĩ‰ĩā5„âƒßÃ`ĄĩąĩŒæųÖā5„~uąĩ3Eß5ŲÅĩĐĩā5„âƒá˙ęĩK´'ęĩ6á!ļ´´'č‹|.Z´'čßw.Z´'<áģˆBļŽē'č<ŋN–´'áEoļÄ:´'č‹|.r´'čßw.r´'áé ĸļë__p —Č*Ūƒ —´'ŪM —´'အ–J´'čâ%|´'čBœ%|´'é__a%|ˇõūļæĀ%‡ã__r%Šã–J´'ĄáąPˇ‹´'Ūâ Ë´'ŪBœ Ë´'ë__a ĖPˇėôĄáã“ˇ‹´'Ūâ á´'ŪBœ á´'ë__a ᓡôĄß°ˇߡÄ:´'ā5„Gčâ%ä´'čBœ%ä´'é__a%äߡĄß}uķˇ ¸ā5„ ¸ë__iظxG~Gß­š$¸/¸ā5„Ųgßoš>¸I¸ā5„Ųgácž¸’“Ļ8—“Ļ8Ū‹|Ļ8ŪßwĻ8Ūá;Ļ8âņ__n/íáhPĻ8Ū‡sĻ8ᇚYWr%’“Ļ8—“Ļ8Ū‹|IĻ8ŪßwIĻ8Ūá;IĻ8âî÷>N%áÃAšPĻ8Ū‡s!Ļ8á␚YWr%’“Ļ8—“Ļ8Ū‹|[Ļ8Ūßw[Ļ8Ūá;[Ļ8ßĐJŸšĒšā5„ĒšĘ8áÚKĮšé__aMÂĮšÖ8ßûvÛšæšā5„æš9ßëzúšēā5„Scá2ēI_TpQ%é__aŲ2ēé__bŲ7ēN%ᜂģPl9Ū‡s!l9áģŅģYWr%’“l9—“l9Ū‹|[l9Ūßw[l9Ūá;[l9ßŲQāģëģā5„ëģ9áãRŧé__aMÂŧœ9߁ŧ'ŧā5„'ŧÆ9ßū„;ŧFŧā5„rcߍQUŧqŧā5„–†é__n cŋPuáŒR•ŧé__aMĩ•ŧé__nMĩRĸ9ß΁ŠŧÂŧā5„đĄé__n§đô}=‘á÷âŧKB‘âŧÂŧá Ŋ´B‘č‹|.ZB‘čßw.ZB‘<á= ;ŊP7:Ū‡s7:á\ šŊYWr%’“7:—“7:Ū‹|I7:ŪßwI7:Ūá;I7:âî÷>N%ᘠŧŊP7:Ū‡s!7:ᡠ žYWr%’“7:—“7:Ū‹|[7:Ūßw[7:Ūá;[7:ßÕVž%žā5„%ž`:áßWBžé__aMÂBžl:ß&‹Vžažā5„až–:ߏuž€žā5„žc߉VžĢžā5„szé__n cģUuáˆWĪžé__aMĩĪžé__nMĩ}Wr:ßį‹ãžüžā5„‰Šé__n§đôáķ ŋPÆ:Ū‡sÆ:á }ŋYWr%’“Æ:—“Æ:Ū‹|IÆ:ŪßwIÆ:Ūá;IÆ:âî÷>N%áN ŸŋPÆ:Ū‡s!Æ:ám îŋYWr%’“Æ:—“Æ:Ū‹|[Æ:Ūßw[Æ:Ūá;[Æ:ßŪ]ũŋĀā5„Āä:áč^%Āé__aMÂ%Āđ:ß9•9ĀDĀā5„DĀ;ß)™XĀcĀā5„7dß’]rĀŽĀā5„B{é__n cÄ\uá‘^˛Āé__aMĩ˛Āé__nMĩ†^ö:ßú•ÆĀßĀā5„ķĒé__n§đôአÁPîBŪ‡sîBáČ `ÁYWr%’“îB—“îBŪ‹|IîBŪßwIîBŪá;IîBâî÷>N%á ‚ÁPîBŪ‡s!îBá# ŅÁYWr%’“îB—“îBŪ‹|[îBŪßw[îBŪá;[îBßsxāÁëÁā5„ëÁCá}yÂé__aMÂÂ#Cß>ÁÂ'Âā5„'ÂMCß.Å;ÂFÂā5„‚dß'xUÂqÂā5„v|é__n cYwuá&y•Âé__aMĩ•Âé__nMĩy)Cß˙ÁŠÂÂÂā5„Ŧé__n§đôá'ųÚÂč‡s4Üzá$û&ÃI_TpP;Ū‹|qôBŪßwqôBŪá;qîBâîBx_ ád HÃPzŪ‡szრ§ÃYWr%I_IIîBI_OIîBŪ‹|îBŪßwîBŪá;îBâî÷>†%áŋ ÉÃPzŪ‡s!záŪ ÄYWr%I_IIzI_OIzŪ‹|ŽzŪßwŽzŪá;ŽzßUÄ'Ä2Äā5„ŽdßĻ{AÄYÄā5„Ũ|ë__n @z}c~á؈—ÄPîBrF{ÂŪœC=—ÄŪÛ>œÄYÄYÄá æÄI_IIzI_OIzŪ‹|ČzŪßwČzŪá;ČzßÄõÄÅā5„ŽdßÄĮÅ'Åā5„ŽdŪž}íÂáL IÅPš@Ū‡sš@ák ¨ÅYWr%’“š@—“š@Ū‹|Iš@ŪßwIš@Ūá;Iš@âî÷>N%á§ ĘÅPš@Ū‡s!š@áÆ ÆYWr%’“š@—“š@Ū‹|[š@Ūßw[š@Ūá;[š@ßc(Æ3Æā5„3ÆÉ@á&dPÆé__aMÂPÆÕ@ß dÆoÆā5„oÆ˙@ߤƒÆŽÆā5„VßĐbÆšÆā5„}é__n cbuáĪcŨÆé__aMĩŨÆé__nMĩÄcÛ@ßß ņÆ Įā5„ųŽé__n§đôäĨļŌĮ,Įā5„ĪF,Į Bá SĮPúAŪ‡súAá! ˛ĮYWr%’“úA—“úAŪ‹|IúAŪßwIúAŪá;IúAâî÷>N%á] ÔĮPúAŪ‡s!úAá| #ČYWr%’“úA—“úAŪ‹|[úAŪßw[úAŪá;[úAß`q2Č=Čā5„=ČBßqQČmČā5„n~é__n cFpuár‘Čé__aMĩ‘Čé__nMĩr0Bß8ˇĨČžČā5„°é__n§đôájrÖČé__aMÂÖČ*BßwļęČõČā5„õČTBßgē ÉÉā5„ŲgḠ5ÉI_TpAļé__r'/5ÉBáÖ [ÉI_TpAļčšN\úAáđ ŠÉ`úAč‹|zúAčßwzúAôáÅÉ`úAI_TpAļč‹|”úAčßw”úAÅÉ0BßZļŲÉäÉā5„°ßˇķÉĘā5„°āÖš%äôÅØĘ/Ęā5„/ĘāÖš%§Gß‚pCĘNĘā5„n~ßĩ]ĘhĘā5„2˛ßÆĩwĘ‚Ęā5„]˛ßąļ‘ĘœĘā5„°á<žĘP/AŪ‡s/Aá[ËYWr%’“/A—“/AŪ‹|I/AŪßwI/AŪá;I/Aâî÷>N%á—?ËP/AŪ‡s!/AáļŽËYWr%’“/A—“/AŪ‹|[/AŪßw[/AŪá;[/Aß%jË¨Ëā5„¨Ë^Aá/kÅËé__aMÂÅËjAß_ŦŲËäËā5„äË”AßO°øËĖā5„â`ßŲiĖ.Ėā5„Ėé__n c iuáØjRĖé__aMĩRĖé__nMĩÍjpAß ­fĖĖā5„í°é__n§đôáōĄĖPM‘Ū‡sM‘áÍYWr%’“M‘—“M‘Ū‹|IM‘ŪßwIM‘Ūá;IM‘âî÷>N%áM"ÍPM‘Ū‡s!M‘álqÍYWr%’“M‘—“M‘Ū‹|[M‘Ūßw[M‘Ūá;[M‘ßĸ€Í‹Íā5„‹Í\DáŦ€¨Íé__aM¨ÍhDßcÍŧÍĮÍā5„ĮÍ’DßSŅÛÍæÍā5„œßVõÍÎā5„ą€é__n cˆ~uáU€5Îé__aMĩ5Îé__nMĩJ€nDß$ÎIÎbÎā5„į˛é__n§đôᕡΒ“Ũ—“ŨŪ‹|ŨŪßwŨŪá;Ũâņ__nįîá¨ŲÎPŨŪ‡sŨáĮ8ĪYWr%’“Ũ—“ŨŪ‹|IŨŪßwIŨŪá;IŨâî÷>N%áZĪPŨŪ‡s!Ũá"ŠĪYWr%’“Ũ—“ŨŪ‹|[ŨŪßw[ŨŪá;[ŨßÉ>¸ĪÃĪā5„ÃĪ‚7ß}>×ĪķĪā5„1ué__n c¯=uá|?Đé__aMĩĐé__nMĩq?”7ߝb+ĐDĐā5„Öué__n§đôßÜaSĐ^Đā5„^и7áė?{Đé__aMÅ{ĐŽ7ßdbĐ˛Đā5„Öué__n†đé__a†˛Đž7áĶ?ĪĐé__aMÂĪĐŽ7ßĖeãĐîĐā5„ cá^?ŅÄ:Ũ`Ũč‹|)kŨčßw)kŨčá;)lŨâæ;`)s%ᏒŅÄ:Ũ`ŨI_TpŪ‹|)ŨŪßw)ŨŪá;)Ũ’Ņ”7áĪōŅÄ:Ũ`ŨÍä_Ū‹|)'ŨŪßw)(ŨŪá;))ŨŪĶ)*ōŅ”7ßAŌŌā5„’ßĩd Ō+Ōā5„Öh}ũ…á‰iŌPŨrFcŪœCiŌŪېnŌ+Ō+Ōßķd‚ŌŌā5„ÖhßĶcœŌ§Ōā5„Öh߯hļŌÎŌā5„Öhë__xĒÎŌÜ7ßr„âŌūŌā5„<ƒé__p mˆƒ|ƒáF….Ķé__aM¸.Ķé__pM¸…é__nM¸…•Gß÷ØBĶMĶā5„sßsŲ\ĶtĶā5„së__p*„œØß×ƒĶŽĶā5„ŽĶEߡŲĸĶēĶā5„së__p*—œØäū×*ĮĖĶáĶā5„6ĩāÖš%ßÜŪđĶÔā5„sāÖš%á&ÔI_Tp' é__r'/&Ôīß4×:ÔEÔā5„EÔ Eá1ÛcÔë__x*ŠØáĶÛ|Ôë__x*0cØá-ŠÔI_TpQ%é__aŠÔé__bÂŽÔáP*Õ­ '%^î(ŖĄņŪœC  *ÕŪÛ  /ÕīīßÂÖCÕhÕā5„hÕë__x@rmÕë__y@rrÕũDīīßķÚ†Õ‘Õā5„sáLÛĒÕë__x*ŠØßBåšÕĐÕā5„ĐÕé__x*įÕÕ&G2GߨGéÕ Öā5„ Öé__a+pÖé__b+pÖ555ßå*Ö5Öā5„áîÛNÖë__x*4cØßüŨ]֏Öā5„âƒë__x*ųŠØë__y*ųŠØë__k*úÖīßÛŖÖŽÖā5„âƒß˜ßŊÖČÖā5„âƒßį×ÖīÖā5„īÖë__x*7ôÖĪEÛEá†/×I_T13I_T23é__pOĻ8č­7O/׸8ᎅ×Ä:Ļ8`Ļ8č‹|)kĻ8čßw)kĻ8čá;)lĻ8âæ;`)s%áߨ×Ä:Ļ8`Ļ8I_Tp3Ū‹|)Ļ8Ūßw)Ļ8Ūá;)Ļ8Ø×Ü8á8ØÄ:Ļ8`Ļ8ÍIuŪ‹|)'Ļ8Ūßw)(Ļ8Ūá;))Ļ8ŪĶ)*8ØÜ8ßęLLØWØā5„ŧtßÔyfØqØā5„dĄ}Յá3‰¯ØPĻ8rF8xŪœC¯ØŪې´ØqØqØßzČØĶØā5„dĄá_ ŲI_T1ũI_T2ũé__pOl9č­7O Ų~9á‡_ŲÄ:l9`l9č‹|)kl9čßw)kl9čá;)ll9âæ;`)s%ḲŲÄ:l9`l9I_TpũŪ‹|)l9Ūßw)l9Ūá;)l9˛Ųĸ9áøÚÄ:l9`l9Í\Ū‹|)'l9Ūßw)(l9Ūá;))l9ŪĶ)*Úĸ9á8\Ú’“l9—“l9Ū‹|vl9Ūßwvl9Ūá;vl9ßįƒkÚvÚā5„÷Ŗß%„…ڐÚā5„÷ŖájÆÚI_T1AļI_T2Aļé__pOúAč­7OÆÚ Bá’ÛÄ:úA`úAč‹|)kúAčßw)kúAčá;)lúAâæ;`)s%áÃoÛÄ:úA`úAI_TpAļŪ‹|)úAŪßw)úAŪá;)úAoÛ0BáĪÛÄ:úA`úAÍÅ´Ū‹|)'úAŪßw)(úAŪá;))úAŪĶ)*ĪÛ0BáCÜ’“úA—“úAŪ‹|vúAŪßwvúAŪá;vúAßzs(Ü3Üā5„Õ~ßPšBÜMÜā5„h}ķ…á`‰‹ÜPúArF´ˇŪœC‹ÜŪېÜMÜMÜߎš¤Ü¯Üā5„hߘpžÜÎÜā5„n~ÎÜBß*ĩâÜųÜā5„2˛é__a8sųÜ*BßÛĩ Ũ$Ũā5„]˛é__aZ$Ũį_įITįā5„6_évals_įâ…b"įt'%tįu‘'}dįß֐įąįITdįā5„6_évalsąįâ…btįt'%Æįu‘'}ļįßũâįčITļįā5„6_évalsčâ…bÆįŨJ§(ą%(čë__x(ą%t'%8ču‘' }(čß$TčučIT(čā5„6_évalsučâ…b8čt'%Šču‘'}zčßKĻčĮčITzčā5„6_évalsĮčâ…bŠčt'%Üču‘'}ĖčßrøčéITĖčā5„6_évalséâ…bÜčá3#Mé’ŪŠ âMéŪãRéīīßĩ™fé~éā5„~éŪã…2/2ßŅ™’é§éā5„~éāÖš%ß`ĀļéÁéā5„oKßDĀĐéčéā5„oKŪÜåÚčé|@ßCÁüéęā5„ęŽ@ßbÁę&ęā5„ęß$Á5ę@ęā5„@ęv@߁ÁTęlęā5„@ęŪÜåÔlę|@ä™8ƒęŽęā5„*2ß۝ę¨ęā5„ŅWß/ܡęÂęā5„ÂęcHßōxÖęáęā5„dĄßƒđęûęā5„÷Ŗß´Ŧ ë ëā5„ ëëp~א:ßĐŦ4ëIëā5„ ëāÖš%ߍXëcëā5„dß0—rë}ëā5„cdߎ—ŒëĄëā5„cdāÖš%ß›°ëÅëā5„dāÖš%äÕܸ×ëėëā5„ÂęāÖš%á¤(ėI_Tp %é__a'Ļ(ėé__b'Ļ-ėâæ‰}'¯ %Ė:Ė:áŅį]ėIE %ہSL)7ëvL&;ß-ŋlėwėā5„ļHäŅČ1‰ė”ėā5„ĪXßqĮŖėšėā5„—lëp~–Bßn¸ČėĶėā5„háđįėėŪgmŸ*Žáč"ísF[Ą—Nh˜ëc'"íŪÉÍ'h˜A߇Ã6íKíā5„KíāÖš%âAßRÂ_ítíā5„tíāÖš%ÄAßÔŽˆííā5„aāÖš%ß“ĸŦíÁíā5„Ë}āÖš%ßĐíčíā5„ŨBŪņ Dhá-čîëch'%áZ,îŪįŦÄ ?ßxā(î@îā5„CWŪã;ß @î¸8t'%Uîu‘' }Eîß™qî’îITEîā5„6_évals’îâ…bUît'%§îu‘'}—îßĀÃîäîIT—îā5„6_évalsäîâ…b§ît'%ųîu‘'$}éîßįī6īITéîā5„6_évals6īâ…bųît'%Kīu‘'?};īßgīˆīIT;īā5„6_évalsˆīâ…bKīt'%īu‘'}īß5šīÚīITīā5„6_évalsÚīâ…bīt'%īīu‘'>}ßīß\ đ,đITßīā5„6_évals,đâ…bīīt'%Ađu‘'=}1đ߃]đ~đIT1đā5„6_évals~đâ…bAđt'%“đu‘'C}ƒđßǝđĐđITƒđā5„6_évalsĐđâ…b“đß1äđīđā5„|Vߝ ūđ ņā5„ķVáq,"ņŪOŧ %áˆ,;ņŪ2øˇ %}'ßŅWņxņIT'ā5„6_évalsxņâ…b;ņßdŒņ—ņā5„p`áĶŨ°ņëstrā °ņô1t'%Åņu‘'˙}ĩņßøáņōITĩņā5„6_évalsōâ…bÅņá›ã9ōëfd÷ %ëbuf÷*ŽŪģ%÷Q%t'%Iōu‘'}9ōßeō†ōIT9ōā5„6_évals†ōâ…bIōt'%›ōu‘'}‹ōßFˇōØōIT‹ōā5„6_évalsØōâ…b›ōt'%íōu‘'.}Ũōßm ķ*ķITŨōā5„6_évals*ķâ…bíōt'%?ķu‘'2}/ķß”[ķ|ķIT/ķā5„6_évals|ķâ…b?ķt'%‘ķu‘'4}ķßģ­ķÎķITķā5„6_évalsÎķâ…b‘ķ}Œ“ßâīķôITŒ“ā5„6_évalsôâ…bĶķt'%%ôu‘'&}ôß AôbôITôā5„6_évalsbôâ…b%ôt'%wôu‘'1}gôß0“ô´ôITgôā5„6_évals´ôâ…bwô}HßWÕôöôITHā5„6_évalsöôâ…bšôt'% õu‘'"}ûôß~'õHõITûôā5„6_évalsHõâ…b õt'%]õu‘'(}MõßĨyõšõITMõā5„6_évalsšõâ…b]õt'%¯õu‘'}ŸõßĖËõėõITŸõā5„6_évalsėõâ…b¯õt'%öu‘'}ņõßķö>öITņõā5„6_évals>öâ…bö}ß_ö€öITā5„6_évals€öâ…bCöß^!”öŦöā5„AAŪŠ:D%ß˙ ģöÆöā5„AAt'%Ööu‘'}ÆößAōö÷ITÆöā5„6_évals÷â…bÖöáCč0÷ëch˜'%īŸ,ßpĄF÷\÷ā5„\÷ëx a÷Ī5Õ5ß><u÷Œ÷ā5„Mé__fām%߀Ŗ›÷ą÷ā5„ą÷ëx ļ÷ō5ø5ß9(Ę÷Õ÷ā5„ Jß 1ä÷ī÷ā5„ JáX#ø’, ŪŠ âøŪã#ø+‘+‘}.øM(ßb IøaøITM(ā5„‘_ŪÜåaø(ø}lø(áY萸IT(č‡V퐸føáÃËøI_T1I_T2´'é__pOŨč­7OËø6áë!ųÄ:B‘`Ũč‹|)kB‘čßw)kB‘čá;)lŨâæ;`)s%átųÄ:B‘`ŨI_TpŪ‹|)B‘Ūßw)B‘Ūá;)Ũtų”7á\ĻųÄ:B‘č‹|.rB‘čßw.rB‘ßjžųøų`B‘ā5„ÖhŪ‹|B‘ŪßwB‘âņ__nEjßJjú<úÄ:B‘ā5„ÖhŪ‹|ęB‘ŪßwęB‘ėôß+bKúbúā5„Öué__abúž7}mút´'}úu‘'áĢ, úYčã %Ūbüų úgú}Ģút´'ģúu‘'áË,ŪúYčã %ŪbüųŪúĨúß ōúũúā5„>Fßā  ûûā5„ķVáfûYWr%I_IIîBI_OIîBŪ‹|ŽîBŪßwŽîBŪá;ŽîBáģĢûI_IIîBI_OIîBŪ‹|ČîBŪßwČîBŪá;ČîBáĻ>íûÄ:îB`îBč‹|)[îBčßw)[îBčá;)\îBáí>üÄ:îB`îBč‹|)kîBčßw)kîBčá;)lîBâæ;`)s%á‘üÄ:îB`îBI_TpP;Ū‹|)îBŪßw)îBŪá;)îB‘ü)Cá^ņüÄ:îB`îBÍŒŋŪ‹|)'îBŪßw)(îBŪá;))îBŪĶ)*ņü)Cáž;ũ’“îB—“îBŪ‹|vîBŪßwvîBŪá;vîBßšzJũUũā5„Ũ|á̉ũPîBrF{ÂŪœCũŪې’ũYÄYÄßėĀĻũžũā5„@ęŪÜåÅžũ|@ßĸŌũŨũā5„Ë}ßVŽėũ÷ũā5„aßĪĒūūā5„ōkßŦĨ ū8ūā5„8ūŪĩ ¨CĻ)7ß6ÂLūbūā5„tíëp~@7ę Ô”sū~ūā5„íTßkÍūŖūā5„Kíëp~ÜA߯˛ūŊūā5„Ŋū„BßIßŅūÜūā5„CWá%øūâIâ$ß~˙˙ā5„TérhsD˙ƒ5īučßdž9˙D˙ā5„>Xáģãi˙ëfdķ %Ū äķ´'á{č ˙čō¸û ˙âæfé˙ UâîlĒëDô1īŒčáÖãŪ˙ëfdú %ëbufúuŪģ%úQ%ßc¨í˙(ā5„(č bė-čiôí %čÍ8î %č“aī %@7ô1äōÕDYā5„ĸ]āÖš%ä/Õdk€ā5„€āÖš%ķGäÖ-—Ŧā5„ŦāÖš%˙Gß;×Āåā5„ĩ\Ū°đl´'Ūã%lú1߃žô˙ā5„ļHī˜čīĄčß/Ø4ā5„ĩ\ŪƖ~%ßÅCNā5„C:ߨ¨]hā5„ UßÍÔwļā5„€Ū°đf´'Ūã%fú1ŪT@g´'Ūkôg %ßEÖÅęā5„ŦŪ°đ/´'Ūã%/ú1īĒčßIž ā5„ļHßķž%ā5„ļHßĪh4?ā5„Öhß–„NYā5„Y'EßJ„m‰ā5„<ƒé__n c|ƒuá(…­é__aMĩ­é__nMĩ…•GßTŲÁĖā5„sß“ŲÛā5„së__x*‰âî‰}*‹œØKEßēį:ā5„:é__a+p?é__b+pD8G>G#7ß!æXpā5„ÃŪ‡s*pÉEßįė„§ā5„§é__a+pŦé__b+pąáEįE#7áļčÎéstr/*´'ß…čŨčā5„čEß0ëüā5„ë__x0Ģ™EĨEß;\-8ā5„8á6ß>YLWā5„W7ßzYkvā5„„ßZ\…ā5„8ß$ZŸˇā5„Wë__x*;ˇ7ßUęËķā5„čë__x0ķķâņ__p0õįŸEt'%u‘'!}øßh$EITøā5„6_évalsEâ…bętė0Z[pā5„čāÖš%ßwŠā5„ЉGß™užŠā5„Šß×u¸Ãā5„ ¸}†á؉PBrF´ˇŪœC=ŪÛ>ÃÃáĐ\Ä:$u`úAč‹|)k$učßw)k$učá;)lúAâæ;`)s%á¯Ä:$u`úAI_TpAļŪ‹|)$uŪßw)$uŪá;)úA¯0BáƒrĖé__aMÅĖ*Bß˙ļāā5„°é__n†đé__a†ZBß›Å"ā5„/ĘßÅ1Iā5„/ĘŪÜåÚIrBß_Æ]hā5„Ŋūß žw‚ā5„ļH}8ßžŋIT8ā5„6_évalsŋâ…b‚ßČ ĶŪā5„]Vß=ĩíā5„Ŗbëkey_ô1áŠBPl9rFK‚ŪœC/BŪÛ0GōtōtßT[fā5„†n߃uā5„ĀBŪeJãô1t'%ĸu‘':}’ßļžßIT’ā5„6_évalsßâ…bĸt'%ôu‘'}äßŨ 1 ITäā5„6_évals1 â…bôáöãO ësrcĶ´'t'%_ u‘'3}O ß{ œ ITO ā5„6_évalsœ â…b_ ßj° Ë ā5„Ë âî`3`ļH¤HßÔß ÷ ā5„›VŪĻ1üäãü K ā5„C:âî`3 ļHîD° P;î ë,î§ Ë ßĖ!Z  ā5„AAâî`3€ ļHîD°ƒ P;îŠ Ëčâņi‹ %īĐčáŨč× čZé‡ĩâæģæˆBhæĒŽ%ßúŧæ ņ ā5„ļHßČĨ  ā5„8ūŪĩ ĒCĻßąŖ' 2 ā5„Ë}ßsŖA L ā5„Ë}áA‘ ;u¨;Ķh˜Ū‹| Ļu¨Ūßw Ļu¨ë__f Ļh˜ßÛŧ  7 ā5„ļHâîU–%îRÜœ%î‚zĄ%îčd°%îD°˛P;î§]š%î×ģ%âņiŧ %âîÁËčâîŖŲ %ߥŋF ^ ā5„ļHŪÜå3%äÂļŌp { ā5„ĪFy‰&Õ  D8é&ÚIT,ųEp7á† Ô IT,čÜå&ÚÔ éos&Úp7â|&öûųEáōč IT,ĻæéŪÜå&Q ëos&Qp7ųEá'é@ IT,ŪÜå&a@ ëos&ap7ųEáDŌj ŪÜå&Oj ëos&Op7ųEáFé IT,ŪÜå&đ ëos&đp7ôųEáŌĮ ŪÜå&ĢĮ ëos&Ģp7ųEákŅå ŪÜåMå ųEáeéIT1,IT2,ŪÜå˜ųEųEáMûnI_Tp%:Ū‹|q=:Ūßwq=:Ūá;q7:âîBx_ ásÍYWr%I_II7:I_OI7:Ū‹|7:Ūßw7:Ūá;7:âî÷>†%á¯YWr%I_II7:I_OI7:Ū‹|Ž7:ŪßwŽ7:Ūá;Ž7:áëaI_II7:I_OI7:Ū‹|Č7:ŪßwČ7:Ūá;Č7:á×>ŖÄ:7:`7:č‹|)[7:čßw)[7:čá;)\7:áôÄ:7:`7:č‹|)k7:čßw)k7:čá;)l7:âæ;`)s%áNGÄ:7:`7:I_Tp%:Ū‹|)7:Ūßw)7:Ūá;)7:Gr:ᎧÄ:7:`7:Ít‰Ū‹|)'7:Ūßw)(7:Ūá;))7:ŪĶ)*§r:áÎņ’“7:—“7:Ū‹|v7:Ūßwv7:Ūá;v7:ßīX ā5„Úzß˙%ā5„d}ä…á2ŠcP7:rFcŒŪœCcŪېh%%ß=Ž|‡ā5„dávûĶI_Tp %Ū‹|qŽ'ŪßwqŽ'Ūá;qÆ:âîBx_ á2YWr%I_IIÆ:I_OIÆ:Ū‹|Æ:ŪßwÆ:Ūá;Æ:âî÷>†%á<YWr%I_IIÆ:I_OIÆ:Ū‹|ŽÆ:ŪßwŽÆ:Ūá;ŽÆ:áxÆI_IIÆ:I_OIÆ:Ū‹|ČÆ:ŪßwČÆ:Ūá;ČÆ:á?Ä:Æ:`Æ:č‹|)[Æ:čßw)[Æ:čá;)\Æ:áĒYÄ:Æ:`Æ:č‹|)kÆ:čßw)kÆ:čá;)lÆ:âæ;`)s%áÛŦÄ:Æ:`Æ:I_Tp %Ū‹|)Æ:Ūßw)Æ:Ūá;)Æ:Ŧö:á Ä:Æ:`Æ:͇“Ū‹|)'Æ:Ūßw)(Æ:Ūá;))Æ:ŪĶ)* ö:á[V’“Æ:—“Æ:Ū‹|vÆ:ŪßwvÆ:Ūá;vÆ:ßø_epā5„Š{ߘŠā5„cd}é…á_ŠČPÆ:rFv–ŪœCČŪې͊ŠßP˜áėā5„cdáŸû8I_Tp @Ū‹|qĻ@ŪßwqĻ@Ūá;qš@âîBx_ ፗYWr%I_IIš@I_OIš@Ū‹|š@Ūßwš@Ūá;š@âî÷>†%áÉæYWr%I_IIš@I_OIš@Ū‹|Žš@ŪßwŽš@Ūá;Žš@á+I_IIš@I_OIš@Ū‹|Čš@ŪßwČš@Ūá;Čš@á9?mÄ:š@`š@č‹|)[š@čßw)[š@čá;)\š@á7žÄ:š@`š@č‹|)kš@čßw)kš@čá;)lš@âæ;`)s%áhÄ:š@`š@I_Tp @Ū‹|)š@Ūßw)š@Ūá;)š@Û@á¨qÄ:š@`š@ÍlžŪ‹|)'š@Ūßw)(š@Ūá;))š@ŪĶ)*qÛ@áčģ’“š@—“š@Ū‹|vš@Ūßwvš@Ūá;vš@ጊķPš@rF[ĄŪœCķŪېøššßėŊ ā5„ļHáČûcI_Tp5AŪ‹|q;AŪßwq;AŪá;q/AâîBx_ áÂYWr%I_II/AI_OI/AŪ‹|/AŪßw/AŪá;/Aâî÷>†%áVYWr%I_II/AI_OI/AŪ‹|Ž/AŪßwŽ/AŪá;Ž/Aá’VI_II/AI_OI/AŪ‹|Č/AŪßwČ/AŪá;Č/Aáj?˜Ä:/A`/Ač‹|)[/Ačßw)[/Ačá;)\/AáÄéÄ:/A`/Ač‹|)k/Ačßw)k/Ačá;)l/Aâæ;`)s%áõ<Ä:/A`/AI_Tp5AŪ‹|)/AŪßw)/AŪá;)/A<pAá5œÄ:/A`/AÍ­ĒŪ‹|)'/AŪßw)(/AŪá;))/AŪĶ)*œpAáuæ’“/A—“/AŪ‹|v/AŪßwv/AŪá;v/Aß8¯õā5„aßv¯ā5„aᚊRP/ArFœ­ŪœC/RŪÛ0Wuuß-Îkƒā5„2hŪô5ƒô1ßp ¸K/Aā5„)rë__iā¸uáæŠūčW;A˜/ArFœ­ŪœC6ūŪÛ7.rußXm/ā5„Ņqë__n ōkáņû{I_TpČ*Ū‹|q9DŪßwq9DŪá;qM‘âîBx_ á§ÚYWr%I_IIM‘I_OIM‘Ū‹|M‘ŪßwM‘Ūá;M‘âî÷>†%áã)YWr%I_IIM‘I_OIM‘Ū‹|ŽM‘ŪßwŽM‘Ūá;ŽM‘ánI_IIM‘I_OIM‘Ū‹|ČM‘ŪßwČM‘Ūá;ČM‘á›?°Ä:M‘`M‘č‹|)[M‘čßw)[M‘čá;)\M‘áQÄ:M‘`M‘č‹|)kM‘čßw)kM‘čá;)lM‘âæ;`)s%á‚TÄ:M‘`M‘I_TpČ*Ū‹|)M‘Ūßw)M‘Ūá;)M‘TnDá´Ä:M‘`M‘ÍąËŪ‹|)'M‘Ūßw)(M‘Ūá;))M‘ŪĶ)*´nDá ū’“M‘—“M‘Ū‹|vM‘ŪßwvM‘Ūá;vM‘á‹6PM‘rF ÎŪœC6Ūې;L´L´ßZĪOZā5„ĒháI‹’PM‘rF ÎŪœC/’ŪÛ0—L´L´ßOCĢļā5„ o߃ÅŨā5„črë__nbáÕųâî¤HmcßDĪ  ā5„ ÂDáéx ëstr¸x ŪSs¸'%Ūˇ#šÄ7âîRÆēcņposģhâŊô1á­éą ëstr ´'Ūûæ  %âņiĸ %=Õ !ˆŒBé !1íB %ķ %ã é ÄCvÕ áÅé3!ŪûA3!Ū 8Bą âņsumC %âņiD&'˛Aááé{!ëstrŗ´'âî(\´^Íâņpģ´'ņchÃē'öd-Ÿ!č‘P/n %čÎx/n %ßļEŽ!Æ!ā5„ØRë__c3'%÷Ÿ!‰˙œâ!õ!øŽ!‘ø¸!‘÷K$X ˙œ""ø.K‘ųĶė0˙œ9"øŪė‘ú…P˙œQ"_"û5„Ë ‘üŸp˙œw"…"û5„Ë ‘úį!€˙œ"Ģ"û5„AA‘ú"˙œÃ"Ņ"û5„AA‘÷tKĸ# ˙œí"÷"øƒK‘ߘ##ā5„Ŧ@÷÷"~o°˙œ-#7#ø#‘ßŧF#Q#ā5„Ŧ@÷7#a÷Ā˙œm#w#øF#‘üāĐ˙œ##û5„Ŧ@‘ü*ā˙œĩ#Ė#û5„oW‘ũĖ#‘]Hü/*đ˙œé# $û5„oW‘ũ $‘ũ %‘]Hü]*œ&$=$û5„oW‘ũ=$‘]Hü†*œZ$q$û5„oW‘ũq$‘]Hü¯* œŽ$Ĩ$û5„oW‘ũĨ$‘uHüØ*0œÂ$Ų$û5„oW‘ũŲ$‘1:ü+@œö$ %û5„oW‘ũ %‘¸8ü*+Pœ*%A%û5„oW‘ũA%‘1:üS+`œ^%u%û5„oW‘ũu%‘uHü|+pœ’%Š%û5„oW‘ũŠ%‘]HüĨ+€œÆ%Ũ%û5„oW‘ũŨ%‘]HüÎ+œú%&û5„oW‘ũ&‘ũ %‘]Hüü+ œ7&N&û5„oW‘ũN&‘]HüQɰœk&y&û5„ĪX‘÷HWŸÅĀœ•&Ÿ&øZW‘üī0.œˇ&Å&û5„Ë ‘ü@.œŨ&ë&û5„Ë ‘áO"'Ūņi+:üÄP.0œ'•'û5„ķV‘ūļx[.#6 ˙ŪxøĶx‘# Ÿ€[.#íx€[.#üxūë&j.‚ö&]ái"Ž'Ūņn+:üã€.*œÆ'?(û5„ķV‘ūļx‹.; ˙ŪxøĶx‘# Ÿ€‹.íxp€‹.üxū•'˜.‚ 'Íáƒ"X(Ūņs+:ü °.*œp(Í(û5„ķV‘ūļxģ.@ ˙ŪxøĶx‘# Ÿ€ģ.íxė€ģ.üx á"æ(Ūņx+:ü! ā.*œū([)û5„ķV‘ūļxë.E ˙ŪxøĶx‘# Ÿ€ë.íxI€ë.üxhü@ /œs)­)û5„ķV‘ūŖc/ J ø˛c‘# Ÿø˛c‘# Ÿü}ßĐœÅ)Ü)û5„CW‘ũÜ)‘]Hüũßāœų)*û5„CW‘ũ*‘]Hüáđœ-*D*û5„CW‘ũD*‘]Hüsáœa*x*û5„CW‘ũx*‘]HßwÜŒ*—*ā5„Âę÷}* /œŗ*Ŋ*øŒ*‘ú[Ķ0/%œÕ*ō*û5„ō*‘ƒã;f÷*‘ĪG¸8÷HKŅxœ+"+øZK‘÷ĮT„î œ>+H+øØT‘÷Wu50œd+n+ø.W‘÷ëU:É@œŠ+”+øũU‘÷VÃNPœ°+ē+ø)V‘÷HKô`œÖ+ę+øZK‘„x”{ ÷K! €œ,,ø.K‘„˜”{ ÷tKođ œ6,J,øƒK‘„¸”{ ÷ĮTå–Āœf,z,øØT‘„Ø”{ ÷ëUÍAāœ–,Ē,øũU‘„ø”{ ÷VĻrœÆ,Ú,ø)V‘„”{ ÷Wāš œö, -ø.W‘„8”{ ÷HWU>@œ&-:-øZW‘„X”{ áôéX-IT¸ëxSP;ßŪŽg-|-ā5„>[āÖš%…X-~`/ˆœ˜-’/øg-‘†ž­ˆ/'x .˙æ­‚Û­Ļū•ˆ/'(˙I•˙<•‚/•žū:-’/ Ŧ‚L- †ų­¯/w É.˙Žūš­¯/Š˙Š­‡&­¯/ ˙5­˙K­‚?­€¯/‡ņŦŗ/ ˛˙üŦ˙­‚­/‡ÆŦŗ/ Mš˙ÕŦ˙ëŦ‚ßŦ/„ŧ/”{ †ų­É/w ‡/˙Žūš­É/Š˙Š­‡&­Ī/ ˙5­˙K­‚?­B€Ī/‡ņŦĶ/˛˙üŦ˙­‚­U‡ÆŦĶ/Mš˙ÕŦ˙ëŦ‚ßŦU„Ü/”{ „č/Š{ ÷X-Ÿđ/(œŽ/Č/øg-‘ˆ 0„0”{ üFÜ 00œā/0û5„Âę‘ũ %‘ũ %‘ ˆF0÷zNŌ@`)œ"020ø‹N‘ˆ„÷zN@x3œN0‡0ø‹N‘‰zN  ”|0‚‹Nhˆĩ„Ŋ”{ …ŗdkP0NœŖ01øÂd‘øĖd‘€d06˙Ėd˙Âd€d06Ûd‡Šhdd0  ‚wdž‚wdž…íd°§ 0Nœ$1‰1øüd‘øe‘€´06˙e˙üd€´06eÖŠhd´08Ą ‚wd ‚wd …'eŊ,đ0NœĨ1 2ø6e‘ø@e‘€16˙@e˙6e€16Oe%Šhd1Xĸ ‚wd\‚wd\…aey@1Nœ&2‹2øpe‘øze‘€T16˙ze˙pe€T16‰etŠhdT1xŖ ‚wdĢ‚wdĢ…›e‹W1Nœ§2 3øĒe‘ø´e‘€¤16˙´e˙Ēe€¤16ÃeÊhd¤1˜¤ ‚wdú‚wdú…Õe‘Úā1Nœ(33øäe‘øîe‘€ô16˙îe˙äe€ô16ũeŠhdô1¸Ĩ ‚wdI‚wdI…fÁb02OœŠ34øf‘ø(f‘€D27‚(fa‚f€€D277fŸūhdD2Ļ ‚wdׂwd×…If:€2Oœ24Ÿ4øXf‘øbf‘€”27‚bfü‚Xf€”27qf:ūhd”2§ ‚wdr‚wdr…ƒfhĐ2Oœģ4(5ø’f‘øœf‘€ä27‚œf—‚’fļ€ä27ĢfÕūhdä2¨ ‚wd ‚wd …Ŋf÷­ 3OœD5ą5øĖf‘øÖf‘€437‚Öf2‚ĖfQ€437åfpūhd43Š ‚wd¨‚wd¨…÷f6Ôp3OœÍ5:6øg‘øg‘€„37‚gÍ‚g뀄37g ūhd„3Ē ‚wdC‚wdC…1grĀ3RœV6Ę6ø@g‘øJg‘øWg‘€Ô3:˙Wg˙Jg˙@g€Ô3:fghŠhdÔ3Ø˛ ‚wdŸ‚wdŸ…xgâ0 4Sœæ6f7ø‡g‘ø‘g‘øžg‘€44;‚žgˇ‚‘gÖ‚‡gę€44;­g ūhd44ģ ‚wd)‚wd)ųī €4rœÖ7‚ú Nø!‘‹ø!‹%!ģŠQaˆ40D‚`aū‚`aūŒ} 5šœ+8‚ˆ 5 • ú‹X¤ Ž „?5Ŋ{ „e5Õ{ „5Õ{ ŽKL 5PœC89‚ZLč ‚dL ‰'L°5p öû8>L‚2L* ē5 Ä8‚>LO ‚2Ld ‡ĘKē5 R‚áKO ‚ÕKd ‘ôKĐ5 T‚ Ly ‚˙KŽ ‹¨LŖ „į5v äņŪÄ 9-9ā5„-9āÖš%oH÷9ĐĨĐXœN9:ø9‘’9āĀÄ ë9‚9ļ ŠW…īāÄ ‚f…ė †ģIī #ą9‚ĘIė ŠKLõø #‚dL. ‚ZL[ “+8”R‘o„”{ „"”{ ßė¸:$:ā5„hāÖš%á#ņZ:`úAč‹|dúAčßwdúA`úA÷Ęe30‡œv:…<øĘ‘Š:LØ‚:y †ŠÉWH¨Î;‚ŋÉy ‚ŗÉž ‚§Éą ‡[ÉWH—‚{Éž ‚oÉą €WH‡$:WH~‚D:ž ‚8:Ä ‘:É[(g‚NÉī ‘ƒ‡[(]‚•‡ī ŠW…[(Ō‚f…' ’KL[H #Ģ;‚dLc ‚ZLƒ “+8”R‘LūģIw #‚ĘI' ūäÉŸŠøķÉ‘#Ÿ‡߯Ÿ ˙°Ą ‚ø¯à €Ÿ‡ǝŖ ˛˙ĩ¯‚ͯÖ ‚Á¯ø ‡¯Ŗ Mš˙ޝ‚¤¯Ö ‚˜¯ø „Ŧ”{ ÷Ę'æĀ˜œĄ<Ō>øĘ‘†ĘÖqØĮ>‚Ę Š:ÜhØ‚:* †ŠÉįH¨>‚ŋÉ* ‚ŗÉO ‚§Éb ‡[ÉįH—‚{ÉO ‚oÉb €įH‡$:įH~‚D:O ‚8:u ‘:Éë€g‚NÉ  ‘ƒ‡ë€]‚•‡  ŠW…ë€Ō‚f…Ø ’KLë  #õ=‚dL‚ZL4“+8”R‘LūģI #‚ĘIØ ūäÉ/ŠøķÉ‘#Ÿ‡߯/ ˙°R‚ø¯t€/‡ǝ7˛˙ĩ¯˙ͯ‚Á¯‡‡¯7Mš˙ޝ˙¤¯‚˜¯‡„@”{ „P”{ ßQdá>ö>ā5„ÖhāÖš%áBņ,?`Ũč‹|dŨčßwdŨ`Ũ÷Ō>B_`nœH?Aøá>‘†ąĨ{;¨h@øæĨ‘‚ÚĨš‚ÎĨ­‡‚Ĩ{;—‚ĸĨš‚–Ĩ­€{;‡ö>{;~‚?š‚ ?Ā‘aĨĀg‚uĨë‘W…Ā]‚f…ë’KLā #F@‚dL#‚ZLC“Ŧ+8”R‘LūģI— #‚ĘIëūņĨļŠøĻ‘‡á¤ļ ˙đ¤‚Ĩa‚ú¤€ļ‡Ŧ¤ē ˛˙ˇ¤‚Τ”‚ä´‡¤ē Mš˙¤‚Ϥ”‚š¤´„Ã”{ ß‘)AAAā5„Gë__s ˙´'ßCPAuAā5„ŨBŪņ ąhë__n ąh•ęđ5’œ…F–īīí…FĮ—zF˜retîÄ6—(ÄE˜atī&'w‹X™iđĘ5æ’}‹6ˆņ@B‚–‹A‚Œ‹iŠA6ˆ ŋ‚3AA‚)Ai„H6h’AAP6 öØB‚gAš‚ZAį‚PA)’ĨNP6Ā ŗŅB‚ËNU‚žNį‚´N)’ÕIP6ā CÆB‚äI)„7<$ˆu6’¤‹w6øö C‚Ŋ‹‚ŗ‹Đ„€6’W…€6ö„C‚f…đ’ģI€68 #KC‚ĘIđŠKL‰6P #‚dL(‚ZL=“ĸ6+8”Ru`’AA¨6pķD‚gAP‚ZAr‚PA’ĨN¨6ˆ ŗD‚ËNÔ‚žNr‚´N†ÕI¨6 C D‚äI„N7<$ˆĮ6’¤‹É6 ķPD‚Ŋ‹ü‚ŗ‹f„Ō6’W…Ō6¸ķČD‚f…Ē’ģIŌ6Ø #D‚ĘIĒŠKLÛ6đ #‚dLü‚ZL8“ö6+8”Rud†W…P7ķ@E‚f…††ģIP7 #E‚ĘI†ūKLV7 #‚dL›‚ZLČ“f7+8”Rud†W…j7ö¸Eøf…udŸ†ģIj7 #EøĘIudŸūKLp7 #‚dLÛ‚ZL“€7+8”Ru`„66͆t‰6 î F‚ƒ‰ū4‰6 ŧ˙Z‰˙M‰‚C‰€7!‚f…u†ģI7 #@F‚ĘIuūKL 7 #‚dL‰‚ZLļ“07+8”Ru_„97Š{ ô1vĶá•}#7ØœīGš‡?;ŠFÉš;&'ęƒģ%<&'‘›os&'‹8j?Ę56‰áPØ7XFQG‚Qv‚õP‹„T8R$ž­P÷7IŽG‚ÎPž‚ÁPą†aO÷7 ŖG‚lOž„˙7ė{ „ 8R$žáP&8DáG‚QÄ‚õPđ„68R$„÷7| Ž _p8`œHÉH‚_ø)_ú)_Ÿ‰­P†8p™{H‚ÎPB‚ÁP`†aO†8 pH‚lOB„8ė{ „Ÿ8R$€°8˙)_‚_x‘­P°8—øÎP/¨Ÿ‚ÁPĄ„Į8R$÷9Ë2ĐuœåH9Jø9‘ŠW…ī¨Ä ‚f…á†ģIī #EI‚ĘIáūĄIī -‚°IáŠKLõĀ #‚dL‚ZL3€=‚dL\‚ZL‰‰'LØ ö+J>L‚2L§ õI‚>Lü‚2L‡ĘK R‚áKü‚ÕK‡ôK8 T L‚˙K&€8 ŸLQ„0v ßæĒHJlJā5„ōkāÖš%âņit0Mn…9Jå‚PqœˆJØLøHJ‘g%QK^JN†kg0ōJ‚#k}ūÄjg$‚Ũj}øĶjōŸJ†gki14K‚vk‘ūÄji6‚ŨjĨ˙ĶjūMk‚0‚\kŊ†ĖžŒ/L˙۞ū¨žŒŠ˙ˇž‡4žŒ ˙Cž˙Yž‚MžÕ€Œ‡˙ ˛˙ ž˙"ž‚žč‡ԝ Mš˙ã˙ų‚íč„™”{ †ĖžĻ/ÍL˙۞ū¨žĻŠ˙ˇž‡4ž¨ ˙Cž˙Yž‚Mžû€¨‡˙Ŧ˛˙ ž˙"ž‚ž‡ԝŦMš˙ã˙ų‚흄ĩ”{ „ÁŠ{ äŗ˛[ęL)Mā5„)MŪįŦ[?ŪT@\´'Ūkô] %Ūō¸^´'y;÷ØL 7Đ8dœJMäMøęL‘øôL‘øM‘øM‘ øM‘’Ųií8đ_ÅM‚j!‚ jM‚ũiy‚ōiĨ‚čiŅˆ9„ë8%| „,9”{ „49Š{ äŪ˛böM Nā5„)MāÖš%÷äM3[@9Mœ'NĪNøöM‘’{…Z9cÄN‚…ŠW…Z9Í‚f…0†ģIZ9 #ŠN‚ĘI0ŠKL`9  #‚dLb‚ZLœ“‰9+8”R‘o„q9”{  ŋĩˆ9”œĸO—8—O™o(‰H‘ēŒH‘†T§9‰POø+TāˇŸūĄI§9 ø°IāˇŸ†PTŗ9Œ„O‚mTØ‚aT„ž9>| ˆĶ9ˆö9ˆ:„":Š{  ãĩ¸0:‰œäOĄN¸´'‘ĸstrš´'‘„ž:ĸO #ļÉĀ:SœvPĄôĘvP‘Ą Ę´'‘€ā:)™hË´'0†PTā:ŌjP‚mTN‚aTc„ë:>| „;ĸOô1Ŗ%ę ;œä†ŗˆPĪPā5„ĪPŪÁ‰69ŪįŦŠ?ŪÄn‹ÔP;–;÷‹P@;2œõP QøP‘ø§P‘ø´P‘øÁP‘ ˆm;ß”Ų/QGQā5„>VŪãĨ™÷D÷ Q7r€;"œcQvQø/Q‘ø9Q‘ßUÚ…QQā5„VŪãĨĸ÷D÷vQí­°;"œšQĖQø…Q‘øQ‘üišā;œäQRû5„>X‘ūQaä; Īø`a‘#TŸø`a‘#TŸá5ę7RŪšÕVÄCüˆšđ;*œORŦRû5„>X‘ū‚sû;Õ˙ĒsøŸs‘#TŸ€û;šsv€û;Čs•ü§š <.œÄRįRû5„>X‘“G<f7”P‘#TüÆšP<.œ˙R"Sû5„>X‘“w<f7”P‘#Tü嚀<.œ:S]Sû5„>X‘“§<f7”P‘#Tüē°<.œuS˜Sû5„>X‘“×<f7”P‘#Tü#ēā<.œ°SĶSû5„>X‘“=f7”P‘#TüBē=.œëSTû5„>X‘“7=f7”P‘#Tüaē@=.œ&TITû5„>X‘“g=f7”P‘#Tüāģp=0œaT…Tû5„ļH‘ĄÅŅ %‘ˆ–=•Lę =WœģT‹P¤now7šŽ‘h„Â=[|  û›l>TœũTĸlhsl´'‘ĸrhsl´'‘„)>{| ä3 ¸U'Uā5„‘_Ūī¸'UZ9÷ũTÄ`>bœHUÉUøU‘øU‘†–_}>ēzU‚Ĩ_͆@_ĸ>ŧ¤U‚Y_‚O_U„>%| ˆœ>„ē>”{ „Â>Š{ •đ,Đ>œ&Vūj_Ô> ɍƒ_øy_‘ū@_×>Y_øO_‘#Ÿ•-đ>œƒVūj_ô> ΍ƒ_øy_‘ū@_÷>Y_øO_‘#Ÿ 6œ?TœÅVĸlhsM(‘ĸrhsM(‘„9?č* Vœ.p?Tœ-Wĸlhs.´'‘ĸrhs.´'‘ūiY? 3‚€YŠ‚tYŠ„™?•|  vœBĐ?=œoWĸlhsBM(‘ĸrhsCM(‘„@°|  –œZ@;œ„Xĸstr[„X‘ĄĻ[‰X‘‹h™jH\Ę5Č™ŋT]Ę5į’Y@€\#XøœY‘ŠģI@  ÛøĘI‘ŠĄI@  -ø°I‘’Y$@¸]xXøœY‘ūģI$@ ÛøĘI‘ūĄI$@ -ø°I‘„D@ÅVô1ô1ßŪXÅXā5„Gë__c -'%âîj; /v4 •\ęP@Iœt]ĸss{ÅX‘—Đi]˜str|t]ú™}H‘C˜end~H‘VĨã;€Ä6‘’ũßV@ø|fY‚ ā°„t@@†Tt@}ĸY‚+TúūĄIt@ ‚°Iú†Yw@~ÂY‚œYĆt‰„@€ Z‚ƒ‰ ū4‰„@ ŧ˙Z‰˙M‰‚C‰ —\˜ch‚´'! ’}‹›@(„vZ‚–‹W ˙Œ‹ŠA›@( ŋ‚3AW ˙)A„Ā@hІâÕ@H†‚Ÿâo ˙•⊎XÕ@H É‚§Xo ˙X‹HļXš †ÕIÕ@ /[˙äIūģIÕ@ Õ˙ĘIūĄIÕ@ -˙°I†ŲNA 2>[‚đN­ ‚äNÅ †ģI A 3r[˙ĘIūĄI A -˙°I’!OA` 3÷[‚:OŨ ‚0Ođ € A‚:O!‚0O#!žæJ A ÕÔ[˙õJ‡ŲN*A ×˙đN‚äN6!„ø@Â’W…0AxŠ}\‚f…N!†ģI0A #D\‚ĘIN!ŠKL6A #‚dLŠ!‚ZLÆ!“SA+8”RucbAæ\˙f…†ģIbA #­\˙ĘIūKLjA #‚dL"‚ZL1"“zA+8”Ruc†W…zAŠ^]øf…udŸ†ģIzA #%]øĘIudŸūKL€A #‚dLD"‚ZLq"“A+8”Ruc„›@„™AŠ{ ô1ĻNũ˛ A*œ”]Ŧ]û5„Ŧ]‘„ĀAËXq5ęō/Â]×]ā5„FāÖš%Ļ‘ēĐAÜō]L`û5„›V‘ūiĄâAŠģøxĄ‘# ŸŠ=ĄæA¨ŧ˙LĄ‚VĄ„"Šŋ đAČž˙ô ‚č ˛"‚Ü „"‘ đAČ—˙° ˙¤ ‹Č‘c đAČ~˙ƒ ‚w Å"‘B üAāg‚V  #‘ą]üAā]‚Â] #‰W…üA/W_‚f…B#’KLüA( #:_‚dL~#‚ZLž#“>B+8”R‘HūģI+B #‚ĘIB#‰W…BH/Ī_‚f…Ė#’ģIB` #•_‚ĘIĖ#ŠKLBx #‚dLî#‚ZL$“YB+8”R‘H‘W…B/‚f…,$’ģIB° # `‚ĘI,$ŠKL BČ #‚dLN$‚ZLn$“tB+8”R‘HäÁĪ^`s`ā5„ĀBāÖš%ĻĢ/ BXœŽ`Ãdû5„›V‘†iĄ˛BŠ0ëbøxĄ‘# ŸŠ=ĄļBčŧ˙LĄ‚VĄŒ$Šŋ ĀB ž˙ô ‚č ē$‚Ü Œ$‘ ĀB —˙° ˙¤ ‹ ‘c ĀB ~˙ƒ ‚w Í$‘B ĖB g‚V %‘ą]ĖB ]‚Â]%‰W…ĖBH /÷a‚f…J%’KLĖBh #Úa‚dL†%‚ZLĻ%“C+8”R‘HūģIûB #‚ĘIJ%‰W…āBˆ /ob‚f…Ô%’ģIāB  #5b‚ĘIÔ%ŠKLæB¸ #‚dLö%‚ZL&“)C+8”R‘H‘W…ęBĐ /‚f…4&’ģIęBđ #Šb‚ĘI4&ŠKLđB #‚dLV&‚ZLv&“DC+8”R‘HŠüŖ[C( 1‚ ¤”&ŠĐŖ[C@ ŧ˙ßŖ‚éŖÆ&ūRŖiCgž˙‡Ŗ‚{Ŗå&‚oŖÆ&‡#ŖiCg—˙CŖ˙7Ŗ€iCg‡öĸiCg~˙Ŗ‚ Ŗø&‘ÕĸmCh g‚éĸ:'‘L`mCh ]‚^`:'’W…mC ĪEd‚f…r'’KLmC° #(d‚dLŽ'‚ZLÎ'“ĢC+8”R‘HūģI˜C #‚ĘIr'ŠW…ˆCĐ Ī‚f…ü'’ģIˆCđ #€d‚ĘIü'ŠKLC #‚dL4(‚ZLT(“ÄC+8”R‘Há-ÜdŪã;@Üd¸8ĻķED4œüdOe§5„|Vr(ŠFw D( F˙nw‚cw‘(‹( }wļ(‹( Œwá(á'-heŪã;Jhe¸8ĻO@D4œˆeÛe§5„|V-)ŠFwKD@ P˙nw‚cwL)‹@ }wq)‹@ Œwœ)ĻwU€Dœöe0fû5„|V‘ū9c„DVøHc‘# ŸøHc‘# ŸßÔ{?fWfā5„Scë__n ÚxĻPĒ DdœrfZgû5„|V‘ĸiĒ %‘’`mÍDX ­/g‚ymč)‚om*’0fÍDx J g‚Ifč)‚?f*†9cÍD"g˙Hc˙Hc„E<$ŠÛhßD K˙ęh‚ôhP*†¯^đDŦOg„õDĐ| „ÃDÛeĻÔ7EYœug­gû5„|V‘‹¨ ˜i8 %{*„:EWf„OEÛeü†pENœÅgŽhû5„ķV‘ŠļxrEČ , ˙Ūx‚ĶxĨ*‹Č íxĘ*‹Č üxé*†ģm’EŽh‚Æm +€˜E‚Æm7+’Ąm˜Eā _ph‚°mc+„¤EZgū‡m›E_‚–m7+ū>xŦE‚Mxƒ+üĨĀENœÆh“iû5„ķV‘ŠļxÂEø 1 ˙Ūx‚Ķx›+‹ø íxĀ+‹ø üxß+†ÔmâEsi‚ßm,€čE‚ßm-,†‡mëEdgi‚–m-,„ôEZgū>xüE‚MxY,ü+šFPœĢijû5„>X‘Š‚sF Å˙Ēs‚Ÿsq,‹ šs—,‹ Čsļ,†Dy2Fpj‚OyØ,€8F ‚Oyë,ū*y8F L‚9yë,ūy8F #‚yë,„AFŽhūrNF‚rū,üJš`FPœ¨jqkû5„>X‘Š‚sbF( Ę˙Ēs‚Ÿs-‹( šs<-‹( Čs[-†]y‚FQk‚hy}-€ˆF ‚hy-ūyˆF Q‚y-„‘FŽhūržF‚rŖ-Ļ–Z°FœŒkÆkû5„|V‘ūXc´F [øgc‘#,Ÿøgc‘#,Ÿßį…Õkíkā5„rcë__n í‚ĻtŗĀFTœlđlû5„|V‘ĸiŗ %‘’níF@ ļÅl‚-nģ-‚#nņ-’ÆkíFX Jĸl‚ßkģ-‚Õkņ-†XcíF"—l˙gc˙gc„G<$ūímųFK˙üm‚n#.†¯^Gĩål„GĐ| „ãFqkßé´˙l mā5„ mT@ߨm)mā5„Ë ÷m|5 GŅœEm2søm‘’đlKGp ds‚˙lN.žt‰KG ¤´m‚ƒ‰Ą.ū4‰KG ŧ˙Z‰˙M‰‚C‰/žt‰WG¤ûm‚ƒ‰Ü/ū4‰WG ŧ˙Z‰˙M‰‚C‰L0žt‰ZG¤Bn‚ƒ‰đ0ū4‰ZG ŧ˙Z‰˙M‰‚C‰`1žt‰]G¤‰n‚ƒ‰÷1ū4‰]G ŧ˙Z‰˙M‰‚C‰g2žt‰`G¤Đn‚ƒ‰ņ2ū4‰`G ŧ˙Z‰˙M‰‚C‰a3žt‰cG¤o‚ƒ‰Ū3ū4‰cG ŧ˙Z‰˙M‰‚C‰Ū3‰ĀS‰Gˆ ¨MoøŲSėˇŸ‚ĪSN4„šGūžĀSŸGŠ€o‚ŲSž4‚ĪSÖ4„ĢGū‰ĀSŧG¨ Ģŗo‚ŲS,5‚ĪSD5„ČGūžĀSÍGŦæo‚ŲS§5‚ĪSŋ5„ŲGū‰ĀSęGĀ Žp‚ŲS6‚ĪS-6„öGū‰ĀS4HØ ´Lp‚ŲS6‚ĪS¨6„@HūžW…\H¤Ãpøf…v4Ÿ†ģI\H #ŠpøĘIv4ŸūKLbH #‚dL 7‚ZL87“rH+8”RugžW…rH¤:qøf…vŸ†ģIrH #qøĘIvŸūKLxH #‚dLK7‚ZLx7“ˆH+8”RugžW…ˆH¤ąqøf…vŸ†ģIˆH #xqøĘIvŸūKLŽH #‚dL‹7‚ZL¸7“žH+8”RugžW…žH¤(røf…vŸ†ģIžH #īqøĘIvŸūKL¤H #‚dLË7‚ZLø7“´H+8”RugžW…´H¤Ÿrøf…vŸ†ģI´H #frøĘIvŸūKLēH #‚dL 8‚ZL88“ĘH+8”Rug‡W…ĘH¤øf…vŸ†ģIĘH #ŲrøĘIvŸūKLĐH #‚dLK8‚ZLx8“āH+8”Rug„IG%| „éH”{ „ņHŠ{ ß˙´AsVsā5„ māÖš%ß+eszsā5„Ë āÖš%÷VsaIRœ–s–zøes‘’2s-Iđ iz‚As‹8‰ĀS6I Ŋņs‚ŲSŠ8‚ĪSã8„bIū‰ĀSgI( ž$t‚ŲS 9‚ĪS89„sIū‰ĀS„I@ ĀWt‚ŲS`9‚ĪSš9„Iū‰ĀS•IX ÁŠt‚ŲSÂ9‚ĪSī9„ĄIūžĀS˛IÃŊt‚ŲS:‚ĪSQ:„žIū‰ĀSüIp Éđt‚ŲSy:‚ĪSŗ:„Jū‰W…Jˆ šgu‚f…Û:’KLJ¨ #Ju‚dLũ:‚ZL;“€J+8”RugūģIJ #‚ĘIÛ:‰W…'JČ šŪu‚f…=;†ģI'J #Ĩu‚ĘI=;ŠKL-Jā #‚dL_;‚ZL;“J+8”Rug‰W…1Jø šUv‚f…Ÿ;†ģI1J #v‚ĘIŸ;ŠKL7J #‚dLÁ;‚ZLã;“ J+8”Rug‰W…;J(šĖv‚f…<†ģI;J #“v‚ĘI<ŠKLAJ@ #‚dL#<‚ZLE<“°J+8”Rug‰W…EJXšCw‚f…c<†ģIEJ # w‚ĘIc<ŠKLKJp #‚dL…<‚ZL§<“ĀJ+8”Rug‰W…OJˆšēw‚f…Å<†ģIOJ #w‚ĘIÅ<ŠKLUJ  #‚dLį<‚ZL =“ĐJ+8”RugžW…ÕJš1xøf…v4Ÿ’ģIÕJ¸ #øwøĘIv4ŸŠKLØJĐ #‚dL'=‚ZLT=“íJ+8”RugžW…íJš¨xøf…vŸ†ģIíJ #oxøĘIvŸūKLķJ #‚dLg=‚ZL”=“˙J+8”RugžW…˙Jšyøf…vŸ†ģI˙J #æxøĘIvŸūKLK #‚dL§=‚ZLÔ=“K+8”RugžW…Kš–yøf…vŸ†ģIK #]yøĘIvŸūKLK #‚dLį=‚ZL>“#K+8”RugžW…#Kš zøf…vŸ†ģI#K #ÔyøĘIvŸūKL)K #‚dL'>‚ZLT>“5K+8”Rug‡W…5Kšøf…vŸ†ģI5K #GzøĘIvŸūKL;K #‚dLg>‚ZL”>“GK+8”Rug„gJ”{ „RKŠ{ ÷Vså”`K(œ˛zĖzøes‘ˆzK„‚K”{ …÷kސK@œčzš{øl‘€ŸK+‚l§>ūÉkŸK'ō‚Økē>€ŸK'äkĐ>†kŸKXz{‚#kē>ūÄjŸK$‚Ũjē>‚Ķj?ūMkĩKX‚\k?üŧ ĐK/œ˛{3|û5„ķV‘ĸii %‘‹č™¸Ōj %1?ū8lÜKj `løUl‘øJl‘#ŸūdãK/˙,d˙,dü;!L/œK|Ė|û5„AA‘ĸip %‘‹™¸Ōq %D?ū8l Lq `løUl‘øJl‘#ŸūdL/˙,d˙,dáūå|ŪņË%:üœ!0LLœũ|Œ}û5„AA‘†¤TL$› }˙>¤ø3¤‘# ŸūüyTL$(˙3z˙&z‚zW?ūĖ|`L Ŧ‚×|Œ?„qLs`„NLs`üÖ"€L$œ¤}ō}û5„AA‘€‡L˜iĨ &'Ä?Šd‡LĨ ‚,dã?‚,dã?•vę°L@œ~–(\ ^Íû?¨ĀYŧgđLŽœpøËY‘—0¸~ÚY@’TM` ~ø+TėˇŸŠĄIM` ø°IėˇŸ„pMÅV„@NÅV„[NÅV„vNģT—xe‚ËYC@‹xŠÚY‹xéYa@öYŠ@†§Y$M# ‚˛Y@„3M=<„DMģT„ MģT„ˇMģT„ÎMģT„éMģT„NģT„NģT„MÅV•ę€Nœō€Ą(\= ^Í‘ĸfmt= ´'‘m—į€™¤H> Ŧ“Å@ĨtžD %(¸™ˆ$F %"A†7ZÖNe €‚TZBA‚HZoA„äNŲ| †7ZOK L€‚TZ›A‚HZČA„OŲ| †ZCO E v€‚ZôA„MOų| †ZMOE  €‚*ZB„UO} „ĮNō}„ÖNÕ{ „ōNÕ{ „2O%} „eOĀY„wO?} „OO} „˜OŠ{ üÔß O>œ ?û5„CW‘ũ?‘„ŊOp„ËO_} „ŲOw} ]HüķāāO>œ\‘û5„CW‘ũ‘‘„ũOp„ P_} „Pw} ]HüOā PVœŽ‚û5„CW‘ĄņÖ ‚‘†•ZBPØ ˙‚­ZB‚ ZGB„VPÕ{ „BPp„bPŊ{ „pPw} 1:•Ŧę€Pęœ‰ƒĄņp ‰ƒ‘‹¸™äGq H‘[B™ŸEr H‘zB’"`–PØq į‚‚1`B†é_–P|Ž‚‚ø_¸BūTĄP}‚+TíBūĄIĄP ‚°IíB’<`ŖPør _ƒ‚K`C’é_ŖP „&ƒ‚ø_:CūTĩP…‚+ToCūĄIĩP ‚°IoC„ãPÕ{ „QÕ{ „QÕ{ „2QÕ{ 1:ß-ɝƒ´ƒā5„Žd螎íÂü¯pQ§œĖƒž…û5„>[‘Ą@@€ P;‘‹8˜i &'‚C†hdQ („‚wdĄC‚wdĄC†‡d°Q‚ R„‚–dšC‚ dŅCŠÅĐQ`ƒ ˙ÅøÅ‘#ŸŠŽƒĐQ`~‚§ƒũCøƒ‘#Ÿž2ÄĐQĮ„KÄøAÄō‡„‘ĄÄ×Qx‘˙ØÄ˙ËÄ˙žÄŠÉÃ×QxŌ˙ Ä˙ũÃ˙đÊHÃ×Qx˛‚‰ÃD‚|Ã=D‚oÃ[D‹x˜Ã†DŠÚÂ×QxŒ‚ÃD‚ûÂ=D‚îÂ[D‹xÃĻD„ RŒ} ßŨ­…Ņā5„-9Ū‚Ē ´'÷ž…Æ2 RŖœá…Ԇø­…‘øˇ…‘†TRR /†‚+TĖDūĄIRR ‚°IĖD†W… R# Ĩ†øf…vŸ†ģI R #n†øĘIvŸūKLŠR #ødLW‚ZLūD“¸R+8”RwˆRR„{RŽ} „‰Rw} „•RÕ} „ÃRŠ{ •šŨĐRœ9Šĸstrr 9Š‘—.ŠĨīīs Ä6‘†t‰äRs [‡‚ƒ‰Eū4‰äR ŧ˙Z‰˙M‰‚C‰E†ÕIōRt {‡‚äI%E—¨ē‰˜itu Ī9E’ļŠSČu ҇‚Ŋ‘EŠĄISČ r‚°I‘E’ęŠ Sčv ˆ‚õаEŠÚZ SĶ ‚åZ°E’‹(S u -ˆ‚*‹äE’‹+S@u Mˆ‚‹FŠŽXKSXw ‚§X,F˙X‹XļXUF†ÕIKS /ʈ˙äIūģIKS Õ˙ĘIūĄIKS -˙°I†ŲN~S 2ôˆ‚đN€F‚äN¨F†ģIƒS 3(‰˙ĘIūĄIƒS -˙°I’!O‹Sp 3­‰‚:OĀF‚0OāF€¸S‚:O G‚0OGžæJģS Պ‰˙õJ‡ŲNÅS ×˙đN‚äN2G„sSÍS!#Š˙f…†ģIÍS #ę‰˙ĘIūKLÕS #‚dLKG‚ZLxG“åS+8”Rug„S„îSŠ{ ô1•,ŪđSĄœ‹Ą‡ Ž p7‘Ąö¯ ´'‘‹ˆ™° ´'‹G’­PT ą ŠøÎPč¨Ÿ‚ÁPÁG„TR$&TT[‹îŗ H‘’­P&T¸ˇ ‹‚ÎPāG‚ÁPøG„WTR$’tIZTĐŗ F‹ø“IÛ¨Ÿ‚†I H„gTč} „HTs<„zT­Pū­PzTž øÎPÛ¨Ÿ‚ÁPAH„‰TR$ä8į ĸ‹­‹ā5„­‹V;÷‹Fg TUœÎ‹LŒøĸ‹‘ģT$AŒøģŦPū’ŦÅTU øĄŦpŸūsŦÅTø‚ŦpŸ‡TŦÅT}øcŦpŸ„ģT%| äOí ^ŒsŒā5„­‹āÖš%…LŒÚBUWœŒŌø^Œ‘ūX-)Uí ‚g-`Hˆ2U„:U”{ Ļ‹ú `UgœāŒû5„­‹‘Ą@@ú P;‘„ŒU´ƒ„ĒU´ƒ„ÂU´ƒĻíĐUœ7Eû5„­‹‘ĻI(āU œ`nû5„n‘\;Ļg,đU œŽŋû5„­‹‘ū[đU -0[‚&[sHüæ%V œ×īû5„¨W‘„V“iü& V œŽŽû5„¨W‘„;Vjü$&@V œ7ŽOŽû5„¨W‘„[VĖQüC&`V œgŽŽû5„¨W‘„{V7Rüb&€V œ—ޝŽû5„¨W‘„›VŦRü& V œĮŽߎû5„¨W‘„ģVįRü &ĀV œ÷Žû5„¨W‘„ÛV"Süŋ&āV œ'?û5„¨W‘„ûV]SüŪ&W œWoû5„¨W‘„W˜Süũ& W œ‡Ÿû5„¨W‘„;WĶSü'@W œˇĪû5„¨W‘„[WTü;'`Wœįû5„¨W‘ūC[`WƒøR[‘#$üZ'€Wœ+Wû5„¨W‘ū][€Wˆøl[‘#$üy' WOœo‘û5„¨W‘ŠösˇWčŒ‚t“HŠÜsˇWč@‚ës“HĐWõ‚ësŋH†w[ĶWEꐂ†[ŋH„ßWZg„ŊWjü˜'đWTœ‘‘‘û5„¨W‘ŠÜsX‚ësāH(X…‘‚ës I†w[+XEz‘‚†[ I„7XZg„ Xjßüē ‘Ƒā5„>XëiJ %âî¸ŌK%üˇ'PX2œŪ‘~’û5„¨W‘ĸi” %‘ū‘‘]X"•øĒ‘‘‚ ‘-I€]X"ˇ‘OIū8l_XK`løUl‘‚JliIūdfX/˙,d˙,d¨vy•ŋXœÍ“øy‘—ž’y’I„ĢX¯Ž‹8˙y‹8Аy‹8ŸyĨI—Xŋ“ŦyšI—xĒ“ģyâI—˜Ÿ“ČyõI†‡mHY B“‚–mJ†ĄmKY  l“‚°mXūã¤ja 3‚ü¤+X‚ō¤>X†aOja }įĨ‚lO+X„saė{ „aO„_afŸ•¯ëaMœČĻž­bŸa‹LĻøāb3ŠŸøĶbxˇŸ„ąaö‡6TČaŒøETpˇŸūÕIČa 6øäIpˇŸūģIČa ÕøĘIpˇŸūĄIČa -ø°IpˇŸęE•ŲĻđĻā5„đĻč~õ• %R7÷ČĻĘ āa œ§$§øŲĻ‘øãĻ‘Ŧ`™đaœ>§[§û5„[§‘ƒĀM™ %‘X7ęģ§q§ˆ§ā5„ˆ§č0{§ %d7÷`§âŗb œŠ§ŧ§øq§‘ø{§‘ŦÖĢ b!œÖ§ķ§û5„ķ§‘ƒĀMĢ %‘j7•žëPb1œ,¨ƒĀMĐ %‘ˆlb„xb$§•×ëbJœ{¨†%jĩb 1j¨‚0jRX„žb˜~ „ĨbŽ~ ˆĐb•ƧābœÎ¨ūTëb`ø+TlˇŸūĄIëb ø°IlˇŸ•اc#œ%ŠĄō¸c%Š‘ūĀScdøŲS‘øĪSlˇŸ„cūô1•įë0cœzŠĸptr×u‘Ąã;×’‘€3cĨMžØ %‘x•ėPc(œÄŠ€_cĨMžŨ %‘lĨã;Ū%‘k„nc*ŠŦ ƒ€c!œŪŠ/Ēû5„Å[‘€c æĘ$„H‘‡§]c „Ä]/‚¸]eX„œcš~ ŦTŸ˰c+œIĒĮĒû5„Å[‘€ŋcœfĶąâ‘˜‡×]ŋcԂī]zX‚â]ÂXūjSŋcĪ‚‰SzX‚|SÂX„ŅcÖ~ ŦrŸÚācBœáĒĢû5„Å[‘€īc,­ã;Û%×Xœ° âĢ‘œfîąâ‘˜ž×]īcī€Ģ‚ī]öX‚â]>YūjSīcĪ‚‰SöX‚|S>Y„dÖ~ ‡ŖS d đ‚ŽSSYƒ5Ŧޟø0dœŧĢŦû5„Å[‘‡Y0d˙øœY‘ūģI0d ÛøĘI‘ūĄI0d -ø°I‘Ļ˟Pd œ5Ŧ|Ŧû5„Å[‘€Pd ĨôH‘‘ūũ]Vd ø^‘ϐŸ'`dœ—Ŧ­û5„Å[‘Š6T`d¨(øET‘ŠÕI`d¨ 6øäI‘ūģI`d ÕøĘI‘ūĄI`d -ø°I‘Ļ6Ÿ@€dNœ,­f­û5„Å[‘‹Ā™ã;I %iY„ dö~ „ÁdĮĒĻęŸ_Đdל­'¯û5„T‘‹Ø˜srcd´'‡Y™ˇ#e?D˛Y™ų:fČ*ĐY†Tæd`Ž‚+TųYūĄIæd ‚°IųY†Yeg#Ž‚œY/Z’^`eđy§Ž‚,^NZ‚"^aZŠã¤`eđ 3‚ü¤NZ‚ō¤aZ’aO`e }›Ž‚lONZ„leė{ „weO†^Šea¯ø,^T­Ÿ‚"^€Zū㤊e 3øü¤T­Ÿ‚ō¤€Z„œeO„e „e* „eH ßc6¯M¯ā5„TčŦd@M¯ô1Žũe°eœ=ą— 2ą¯cwdn=ą‘ß_‰'¯fXo1°‚@¯ŸZ‚6¯'[žW…“f@ °øf…u’ģI“fx #æ¯øĘIuŠKL–f #‚dLw[‚ZLĻ[“°f+8”Ruß_ˆ%f„.ff­‰W….f¨oа‚f…š[’ģI.fČ #o°‚ĘIš[ŠKL:fā #‚dL\‚ZLO\“[f+8”Ruß_žW…pf#o!ą‚f…Ÿ\†ģIpf #į°‚ĘIŸ\ūKLyf #‚dLĩ\‚ZLä\“ˆf+8”Ruß_„øe] ˆf„‘fŠ{ t'%Oą°‘'Ŧšž–Āfįœiąyŗû5„Å[‘—ønŗ­Ę$—H‘÷\‰'¯ũf˜@˛‚@¯]‚6¯}]žW…‰g@/˛‚f…á]’ģI‰g8 #öą‚ĘIá]ŠKL‹gP #‚dL^‚ZL-^“Ŗg+8”Rucˆg„ gf­‰W… gh˜ˇ˛‚f…@^’ģI gˆ #~˛‚ĘI@^ŠKLg  #‚dLx^‚ZL§^“Xg+8”Rucž}ˆ0g ˜æ˛‚–ˆÅ^‚Œˆđ^ˆ:gžW…pg˜]ŗ‚f…_†ģIpg #$ŗ‚ĘI_ūKLvg #‚dL#_‚ZLP_“ƒg+8”Ruc„āfÄŠˆûf„egŠ{ •ė°gīœÅļ—¸ēļĨã;z‘X’¨ˆļgāzÍŗ‚ˇˆc_ˆÛg†'¯Ûg ´ø@¯€ˇŸ‚6¯ŋ_ˆīg„÷gf­’ėSųgøc´‚TL`‚ûSž`‘ĀSųgJ‚ŲSL`‚ĪSž`„hū’ˆh(ö´‚͈Ö`‘W…hH;‚f…(a’ģIhh #ŧ´‚ĘI(aŠKLh€ #‚dLza‚ZLļa“Hh+8”Ru_’ˆ#h ‚‰ĩ‚͈Ôa‘W…#hĀ;‚f…Ôa’ģI#hā #Oĩ‚ĘIÔaŠKL,hø #‚dLb‚ZLLb“Wh+8”Rv†ˆfh‚ļ‚͈Šb‡W…fh;‚f…Šb†ģIfh #âĩ‚ĘIŠbūKLlh #‚dLŸb‚ZLĖb“xh+8”Ru_†ˆƒh¯ļ‚͈ßb‡W…ƒh;‚f…ßb’ģIƒh #uļ‚ĘIßbŠKL†h( #‚dLôb‚ZL!c“›h+8”Ru_„#hOą„hŠ{ ŦמĄ h.œßļæēû5„Å[‘—@Ûē­Ę$ĸH‘4c¯dirŖÄ6‘X‰t‰ŋhhŖ\ˇ‚ƒ‰_cŠ4‰ŋhh ŧ˙Z‰˙M‰‚C‰_c‰Ģ[Ōh€Ĩ˛ˇ‚ē[äc‘TŌh€N‚+TäcŠĄIŌh€ ‚°Iäc‰ĀSīh˜Ĩ厂ŲSd‚ĪSKd„˙hū‰W…˙h¸Ĩ\¸‚f…‚d’ģI˙hØ ##¸‚ĘI‚dŠKLiđ #‚dL¤d‚ZLÆd“€i+8”Ru_‰'¯ iŠ š‚@¯äd‚6¯-ežW…ĸi@û¸‚f…le†ģIĸi #¸‚ĘIleūKL§i #‚dLe‚ZLŦe“ŗi+8”Rudˆi„ if­‰W… i(Ѓš‚f…ŋe’ģI iH #Jš‚ĘIŋeŠKL)i` #‚dLûe‚ZL7f“hi+8”Rudž^@i §Üš‚,^uf‚"^fūã¤@i 3‚ü¤uf‚ō¤f„XiOžW…„iŠSē‚f…šf†ģI„i #ē‚ĘIšfūKLŠi #‚dLÎf‚ZLûf“–i+8”Ru_žW…ēiĨĘēøf…udŸ†ģIēi #‘ēøĘIudŸūKLĀi #‚dLg‚ZL;g“Ėi+8”Ru_„ŋhÄŠˆîh„ŸiŠ{ Ļ›žUĐiáœģNŊû5„Å[‘†Y÷iW.ģ‚œYNg†AA˙i Xhģ‚gA…g‚ZAĢg‚PANgˆ j’'¯ jxXŧ‚@¯Ëg‚6¯(hžW…“j@ŧ‚f…h’ģI“j˜ #Īģ‚ĘIhŠKL•j° #‚dL h‚ZLÍh“­j+8”Rucˆj„jf­’W…jČX‘ŧ‚f…āh’ģIjč #Xŧ‚ĘIāhŠKL&j #‚dLi‚ZLGi“hj+8”Ruc†}ˆ@j XÁŧ‚–ˆei‚ŒˆiˆJj†W…ujX9Ŋ‚f…Ži†ģIuj #Ŋ‚ĘIŽiūKL{j #‚dLÃi‚ZLđi“ˆj+8”Ruc„đi|Ŧ„‘jŠ{ ĻŸ/ĀjœiŊ?Āû5„Å[‘—4ĀĨlĒ87 ‘X†Yæj4°Ŋ‚œYj’ˆ4k08Cž‚͈Dj‘W…4kP;‚f…Xj’ģI4kp # ž‚ĘIXjŠKL=kˆ #‚dL’j‚ZL§j“˜k+8”Ru_†ˆWk)9מ‚͈Åj‡W…Wk);‚f…Åj†ģIWk #œž‚ĘIÅjūKL]k# #‚dLÚj‚ZLīj“pk+8”RuT†ˆœk!9kŋ‚͈k‡W…œk!;‚f…k†ģIœk #0ŋ‚ĘIkūKLĸk #‚dLk‚ZL,k“˛k+8”RuTŊk÷ŋø͈udŸ‡W…Ŋk;øf…udŸ†ģIŊk #ŊŋøĘIudŸūKLÃk #‚dL?k‚ZLlk“Ķk+8”Ru_„Ũj|Ŧ„ kĮĒ„*kæē„4kÅļ„NkNŊ„‰k­„ģkŠ{ ŦõžwākĸœYĀ’Åû5„Å[‘ƒ˙2w´'‘— ‡Åœû2x\F‘X‰čžúkČx™Á‚Ÿk‚ŸĪk‹ČŠ.Ÿ’Alđ y Á‚3A™l‚)Aõl†aOl Á‚lO™l„lė{ „*lh˙l‘Á‚f…um’ģI˙l #XÁ‚ĘIumŠKLm  #‚dLŠm‚ZLˇm“m+8”Ru_ˆl—8‚f…Ęm’ģI*lX #ÍÁ‚ĘIĘmŠKL-lp #‚dLon‚ZLŌn“øl+8”Ru_‰YWl{%‚œYđnžAAel{^‚gAo‚ZA=o‚PAđnˆql‰'¯sl¨{ Â@¯io‚6¯˜ožW…km@ûÂøf…u†ģIkm #ÂÂøĘIuūKLsm #‚dLÄo‚ZLņo“€m+8”Ru_ˆ|l„…lf­‰W……lČ{ƒÃ‚f…p’ģI…lč #JÂĘIpŠKLŽl #‚dL&p‚ZLHp“čl+8”Ru_‰W…“l}úÂf…fp’ģI“l8 #ÁÂĘIfpŠKL™lX #‚dLˆp‚ZLĒp“Ķl+8”Rv‰}ˆ°lp})Ä‚–ˆČp‚ŒˆÜpˆžlm#ˆÄ‚f…đp†ģIm #aÄ‚ĘIđpūKL m #‚dLq‚ZLqžW…=m}˙Ä‚f…-q†ģI=m #ÆÄ‚ĘI-qūKLCm #‚dLBq‚ZLWq“Pm+8”Ru_žW…Tm{vÅ‚f…jq†ģITm #=Å‚ĘIjqūKLZm #‚dLq‚ZLŦq“gm+8”Ru_ˆ l„PloW„.mŠ{ Ŗ"ėmœęš–ŒŗÅČÅā5„ČÅāÖš%č1÷ĸÅ\C mDœéÅÆøŗÅ‘„Æmx „Ņmx „Ūm‘ Ž—™đmAœiÆ›str™´'‘›re™iÆ‘€n)œ@šœß•‘h„$n¤ î1¨:^rĘ@nAœëÆøG^‘øS^‘Sn­ÆŠ`^€[n!‚S^ŋq‚G^Ūq€[n!Ÿ`^‘h„tn¤ áu Į­ '%^î(Ūĸk4Įã‘ß?ũ*ĮBĮā5„gJë__c ģ'%äũ—đTĮiĮā5„MSāÖš%…BĮÖ%n˜œ…ĮÂČøTĮ‘’‰^žnˆņ—Č˙ĸ^˙˜^‘ëÆžnˆq˙Į’ĮĻn¨5aȍ4Į ˙*Į’­‚­nČ ŧČ‚Á‚ōq„(oŒ$ŠąRąnā ŧ‚ĘRr‚ĀR$r€ān.‚ĘRBr‚ĀRVr„énņE†č‚Ån5‹Č‚ƒir„Ín›<„Ånš<†¯^oôˇČ„#oĐ| „ow} ąSĐW0o,œũČĄT@WëD‘„Noß „Vo˙ ą9Đ]`o‡œ¸ÉĄT@]ëD‘‹ø™ō˛^Ę5|r™Z_?Dšr™‚“a&'¸r™ö<b&'ârĨF”m\F‘„}oÂČ„‡o „™oß „¸o€ ˆŅo„ŲoH ßĐĮÉøÉā5„øÉâîT@Aí™îF”B\Fâ˙f…åDßūĪ Ę!Ęā5„øÉāÖš%våD•1ėđoåœGĖĄ~ „!Ę‘— <ĖĨF”…\F‘’¸É p( …Ë‚ĮÉs‹( ĶÉsŠāɆņZ8pAŌĘø [ŸŠŸ‚üZ=s„Jp~ ’‰WpH CüĘ‚'‰Qs„]p ~ ´p!eË˙f…†ģI´p #,Ë˙ĘIūKLŧp #‚dLos‚ZLœs“Ėp+8”Rug„pw} „%p:€ „.pU€ „WpũČ’ũÉfp` ‡1Ė‚ Ɲs’W…qpx 4&Ė‚f…Ís’ģIqp #íË‚ĘIÍsŠKLtp¨ #‚dLīs‚ZLt“°p+8”Rug„qpk€ „‹p”{ „ÕpŠ{ •Kėāp+œfĖ„q'Ę•[ėq+œ…Ė„1q'Ę•kė@qœœ–ÎĄT‹Ģâ7‘†Ō>bq\­‹Î‚á>/t†ąĨgq?¨āÍ‚æĨNt‚ÚĨmt‚ÎĨ€t‡‚Ĩgq?—‚ĸĨmt‚–Ĩ€t€gq?‡ö>gq?~‚?mt‚ ?“t‘aĨkqČ g‚uĨžt‘W…kqČ ]‚f…žt’KLkqč #žÍ‚dLöt‚ZLu“œq+8”R‘HūģI‡q #‚ĘIžtūņĨĻqŠ‚Ļ4u‡á¤Ļq ˙đ¤‚ĨSu‚ú¤ou€Ļq‡Ŧ¤Žq˛˙ˇ¤˙Τ‚ä‚u‡¤ŽqMš˙¤˙Ϥ‚š¤‚u„ˇq”{ „Įq”{ Ŗėāq'œáž#˙Îč‡?NŠFčģ%N&'éosOp7âæ•*SĘ5æããTĘ5âæMV_Ę5•rĢœĀĐƒ‡?nŠF‘ƒģ%n&'‘›osop7‘‘ĻÎ.r!p‚ÉΕu‚ŊÎŋu‚ąÎéu‹!˛Ö΄˛âÎ@žQ.rQ´Ī‚4Qŋu‚*Q•u„5rč<ž­P5rQęĪøÎP>ŠŸ‚ÁPv„GrR$Rr7rЁđÎ&vž­Par]5Đ‚ÎPMv‚ÁPev„srR$ŗarFQĐ”Pu”R0“†rF”Pu”R ‘? ūž­P‰rbĨĐ‚ÎPxv‚ÁPv„›rR$“ļrF”Pu”R0´>-Ār”œ›Õ›os:›Õ‘ƒã;: Õ‘žļ^âr@GŅ‚Å^¯v‡TârX‚+TåvūĄIâr ‚°IåvžĐ^ūr<ÕŅ‚ß^'w‡6TūrM‚ET]wūÕIūr 6‚äI]wūģIūr Õ‚ĘI]wūĄIūr -‚°I]w‰­Ps !<ŽŌ‚ÎPŸw‚ÁPĘw†aOs'Ō‚lOx„sė{ ās ŖŌ‚ÎPx‚ÁP3xЇPâs8!‚ PFx‚–PZxžcPęs ˜—Ō‚zPFx‚nPmx„÷s™ũ„,sR$ž­P/s<áŌ‚ÎPx‚ÁPŠx„AsR$ž­POs<Ķ‚ÎPÔx‚ÁPüx„asR$ž­Pas?qĶ‚ÎP%y‚ÁPCy†aOas fĶ‚lO%y„isė{ „tsR$ž­Pts?¤Ķ‚ÎPay‚ÁP‰y„†sR$‰­P†sP!@}Ô‚ÎP§y‚ÁPÅy†aO‘s öĶ‚lOãy„šsė{ 0trÔ‚ÎPöy‚ÁP zЇP2th!‚ Pz‚–P1zžcP:t ˜fÔ‚zPz‚nPDz„Gt™ũ„ĨsR$‰‰^¨s€!@Õ˙ĸ^˙˜^‘ëÆ¨s€!q‚ĮXz’ĮĒs !5ZÕ‚4Įz‚*Į­z’­‚ąsĀ! ŧ Õ‚Á‚éz„TtŒ$ŠąRšsØ! ŧ‚ĘR{‚ĀR2{€t0‚ĘRP{‚ĀRd{„ tņE†č‚Ís5„Õ‚ƒw{„Õs›<„Ísš<„Ms=2¸8Ŧ´ S`tœŋÕđÕû5„‹;‘‡9cdtTøHc‘øHc‘÷i߀tRœ ÖÖøi‘øi‘ĢtjÖ‚iŠ{‚iž{ž¯^ģtL_Ö„ĀtĐ| „ģtÕ{ ‰ÛhĀtđ!O’Öøęh‘‚ôhą{„¤tĨÕę@ŽÖÃÖā5„ŠāÖš%÷Ö†Š°[œßց׸ŽÖ‘‰W…Ī"@_ׂf…Đ{†ģIĪ #&ׂĘIĐ{ŠKLÕ " #‚dL|‚ZL/|“ +8”R‘o‡|LŨ@‚‹LM|ˆõßH×ŧ×ā5„ŧ×āÖš%⏧Á×ë__mø8%5ÚLv ßĻ Û×ú×ā5„ú×āÖš%⏧˙ׯ×ÚLߌDØ2Øā5„LMāÖš%⏧2ØÚLäSüIØTØā5„6_÷7Ø-ātŪœpØãÚøIØ‘’×u8":ڍŽ×‚×l|’Ήu`"ÅØ‚Ū‰¯|ˆu’Ė×Cux"kŲ˙īׂÛ×ķ|’ØCu "#?Ų˙'Ø‚Øķ|„Œu¸ũ’VMŽu¸"#?JŲ˙yM‚eM+}„Ēu¸ũūMŽv#?˙AMø-MV’uØ"ũŲ‚Š{}‚ū‰›}‰ĩ‰°u#cšŲ‚ĉ›}ˆv‡t‰'v c‚ƒ‰Ō}ū4‰'v ŧ˙Z‰˙M‰‚C‰Ō}†ĢLcv#Ú‚ēL ~ˆzv„@v¸ũˆ˜vˆ¤v’>Š@v8#dÚ‚WŠ~‚MŠL~’{ŠCvP#’ÄÚ‚¤Šl~‚˜Š‚~‘=RCvh#$Ō‚LR­~‚VRĘ~‹h#eRŪ~„ūt%| „‚v”{ „ŠvŠ{ á!üÚŪŲ™!­üÚX‘á!ÛŪŲ™!kÛX‘ß5H.ÛMÛā5„ŧ×āÖš%⏧MÛÚLßĮ aÛ€Ûā5„ú×āÖš%⏧€ÛÚL ҜkĀvzœÛāĄÜåk %‘—€#Æā¤ssl4 ‘¤~’×Åv¨#lŠŨŽ×‚×ü~’ΉÅvĐ#܂ۉgˆ÷v’Ė×wđ#ģÜ˙īׂÛׯ’Øw$#?gÜ˙'؂د„vw¸ũ’VMvw@$#?—Ü˙yM‚eM€„Šw¸ũūMz##?˙AMø-MuŦ~Ÿ’ī‰Ëw`$MŨ‚Š=€‚ū‰]€‰ĩ‰Ëwˆ$c Ũ‚ĉ]€ˆEx‘t‰Xx°$c‚ƒ‰˛€Š4‰Xx°$ ŧ˙Z‰˙M‰‚C‰˛€†ĢL˛y%sŨ‚ēLˆĪy„‡x¸ũˆ˙yˆz†2ā‰xm[Ū˙Kā‚Aā/‡ãÚšx„‚îÚkūųQšx!¯‚R~‚R ‚Rk€šx.RūĐQšx!V‚įQԁ‚ÛQö‡?Pšx!`‚VPԁ‚JP†2ā xm"ß˙Kā‚Aā ‚‡Û x„‚ Ûkū|Q x!m‚•QG‚‚‹Qk€ x¤Qk‚ūMQ x!E‚dQG‚‚XQö‡P x!\‚2PG‚‚&Pk‚’ũßŗxČ$nLß‚ ↂ„Áx@’ÛÁxā$nĩā‚.Ûĩ‚’Ößx%5$ā‚ŽÖ䂉W…îx%@ā‚f…ƒ†ģIîx #Čß‚ĘIƒŠKL÷x0% #‚dLEƒ‚ZLwƒ“Ģy+8”RuĢ~‡|Ly@‚‹L•ƒˆ y†RÛ yN5’ā˙uÛ‚aÛšƒ’āL,yH%#;oā˙M‚īLŨƒŠMByh%#;˙AM‚-M„ūĢLny5‚ēL%„ˆ‰y„ąx=ˆįy„×yŠ{ „īyŠ{ •‘ė@zzœŋäĸms ŽŦ‘—€%Ēä¤ssŽ 4 ‘¤~’×Fz¸%Ž Ü⍎ׂ×I„’ΉFzø%dá‚Ū‰‘„ˆ‡z’Ė×­z(& â˙īׂÛ×Ų„’Ø­zP&#?šá˙'Ø‚ØŲ„„{¸ũ’VM{x&#?éá˙yM‚eM…„5{¸ũūM—}##?˙AMø-MuŦ~Ÿ’ī‰W{˜&Ÿâ‚ŠZ…‚ū‰z…‰ĩ‰W{Ā&c[â‚ĉz…ˆŅ{‘t‰ä{č&c‚ƒ‰Ī…Š4‰ä{č& ŧ˙Z‰˙M‰‚C‰Ī…†ĢL2}%Åâ‚ēL6†ˆO}„|¸ũˆ}ˆ’}†ūl | ã‚mL†‚ mú†„.|7=’ũß0|' :ã‚ ā6‡„>|@’Û>|' Ŗä‚.Ûe‡’Ö\|8'5䂎֔‡‰W…k|P'@đã‚f…džģIk| #ļã‚ĘINJKLt|h' #‚dLõ‡‚ZL'ˆ“+}+8”RuĢ~‡|L€|@‚‹LEˆˆ|†R۝|N5€ä˙uÛ‚aÛiˆ†āLŗ|#;]ä˙M‚īLˆūMĪ|#;˙AM‚-MąˆūĢLë|5‚ēLՈˆ}ˆg}„W}Š{ „o}Š{ ßcũÎäöäā5„ĪLŪŸĮ €ũâî%Ĩ ‚ũĩļœdĀ}øœ*ęĄÜåd %‘—€'ę¤sse4 ‘¤~’×Æ}¨'eú捎ׂ×ųˆ’ΉÆ}Đ'ƒå‚Ū‰A‰ˆõ}’Ė×û}ø'+æ˙īׂÛ׉‰’Øû}((#?Øå˙'؂؉‰„n~¸ũ†VMp~3#?æ˙yM‚eM¸‰„Ŗ~¸ũūMš#?˙AM‚-M Š’ī‰Å~H(Ŋ悊#Š‚ū‰7Љĩ‰Å~x(cyæ‚ĉ7Šˆ?‘t‰R¨(c‚ƒ‰ŠŠ4‰R¨( ŧ˙Z‰˙M‰‚C‰ІĢLu%ãæ‚ēLՊˆ’„¸ũˆ_ˆr’ßĀ(fč‚Ēß늂žß‹‘ŋä“č($´‚Øä1‹‚ÎäF‹‹č(įäd‹Š΂“) ‚‚Ũ‚F‹ŠĮ¸€() p‚4Įy‹‚*Į›‹’­‚ģ€H) ŧÁį‚Á‚š‹„7Œ$ŠąRŀh) ŧ‚ĘRŒ‚ĀR8Œ‹ˆ)‚ĘR}Œ‚ĀRŸŒ„é€ņE’ŧߥ )fqč‚åßÁŒ‚Ųß匑tRĄ¸)$đ‚ƒR‚RF‹Đ)œRf’ũßÂč)g›č‚ ā“„Đ@’ÛĐ*gę‚.Ûō’Ö€ *5s邎Ö÷‰W…€8*@Qé‚f…)ކģI€ #é‚ĘI)ŽŠKL€P* #‚dL[Ž‚ZLŽ“+8”RuĢ~‡|L$€@‚‹LĢŽˆA€†RÛA€H5áé˙uÛ‚aÛĪŽ†āLW€#;žé˙M‚īLķŽūMs€#;˙AM‚-MūĢL‰€5‚ēL;ˆ¤€„Ā=ˆG„OŠ{ „šŠ{ ĩėœr(œ ņĄÜår5%‘—h* ņ¤sss4 ‘¤~’×Ɓ˜*s.ėŽ×‚×_’ΉƁČ*ˇę‚Ū‰§ˆū’Ėׂø*_ë˙īׂÛ×ī’Ø‚(+#? ë˙'Ø‚Øī„w‚¸ũ†VMy‚3#?<ë˙yM‚eM„Ŧ‚¸ũūMʅ#?˙AM‚-Ms’ī‰΂H+ņ낊‰‚ū‰‰ĩ‰΂x+c­ë‚ĉˆHƒ‘t‰[ƒ¨+c‚ƒ‰吊4‰[ƒ¨+ ŧ˙Z‰˙M‰‚C‰吆ĢLĨ…%ė‚ēL;‘ˆ…„Šƒ¸ũˆ…ˆĸ…’ßŠƒĀ+tEí‚ĒßQ‘‚žßh‘‘ŋäЃđ+$´‚Øä—‘‚ÎäŦ‘‹,įäʑŠ΂Ѓ0, ‚‚Ũ‚Ŧ‘ŠĮč„P, p‚4Įߑ‚*Į’’­‚ë„p, ŧõė‚Á‚’„g…Œ$ŠąRõ„, ŧ‚ĘR|’‚ĀRž’‹°,‚ĘR㒂ĀR“„…ņE’ŧߡƒČ,tĨí‚åß'“‚ŲßK“‘tRˇƒā,$đ‚ƒR}“‚RŦ“‹ø,œRĖ“’Qēƒ-uŲí‚4Qį“‚*Q”„íƒč<’2āŊƒ(-tĒî˙Kā‚AāH”‡ãÚ̓„‚îÚz”ūųQ̓!¯‚R”‚R¯”‚Rz”€̓.RĪ”ūĐQ̓!V‚įQ㔂ÛQ•‡?P̓!`‚VP㔂JPĪ”†2ā؃tqī˙Kā‚A╇Û؃„‚ Ûz”ū|Q؃!m‚•QL•‚‹Qz”€؃¤Qp•ūMQ؃!E‚dQL•‚XQ•‡P؃!\‚2PL•‚&Pp•’ũßīƒ@-v›ī‚ ā‹•„ũƒ@’ÛũƒX-vņ‚.ÛŊ•’Ö-„x-5sđ‚ŽÖW…<„-@Qđ‚f…!–†ģI<„ #đ‚ĘI!–ŠKLE„¨- #‚dLS–‚ZL…–“K…+8”RuĢ~‡|LQ„@‚‹LŖ–ˆn„†RÛn„H5áđ˙uÛ‚aÛĮ–’āLz„Ā-#;žđ˙M‚īLë–ūM „#;˙AM‚-M—ūĢLļ„5‚ēL3—ˆŅ„ˆw…„…Š{ „ʅŠ{ ÷Öícœ<ņōøŽÖ‘‰Ö Ø-@üņ‚ŽÖW—‰W…/ø-@Úņ‚f…—†ģI/ #Ąņ‚ĘI—ŠKL5. #‚dLŗ—‚ZLā—“q+8”R‘o‡|L=@‚‹Lū—ˆT„\”{ ß'Ŧō,ōā5„e_ëp‹Ũ÷ō€kœHōįōøō‘ø ō‘’W…ĩ(.ŽŌō‚f…˜†ģIĩ #™ō‚ĘI˜ŠKLģ@. #‚dL;˜‚ZLu˜“é+8”R‘_„¨ŝ„Ė”{ ß öōķā5„‘_Ūđ¸)ķ_5÷įōshđˇœ/ķ<õøöō‘øķ‘†T,}ķ‚+T“˜ūĄI ‚°I“˜’A X.,Ûķ‚3Aܘ‚)A™†aO  Đķ‚lOܘ„&ė{ „3h’W…3p.,Sô‚f…™’ģI3. #ô‚ĘI™ŠKL<¨. #‚dLU™‚ZL‘™“X+8”Ruc†t‰j +›ô‚ƒ‰¤™ū4‰j ŧ˙Z‰˙M‰‚C‰¤™†W…ˆ,õøf…udŸ†ģIˆ #ÚôøĘIudŸūKLŽ #‚dLĪ™‚ZLü™“ž+8”Ruc„y]„j%| „ō„§Š{ ßęÂKõaõā5„tíëp‹@7ߍ¨põ…õā5„(āÖš%÷<õa9°­œĄõ÷øKõ‘øUõ‘’aõčĀ.Žäö‚põšžˆī õûõ‚ˆFš„øU€ ‰W…ûØ.ķrö‚f…Yš†ģIû #9ö‚ĘIYšŠKL đ. #‚dLyš‚ZL›š“8 +8”Rug‡W…< !ķøf…uT†ģI<  #ĒöøĘIuTūKLD  #‚dLؚ‚ZL›“T +8”Rug„Øŝ„ ”{ „] Š{ ¨čžü&` eœ øøŸ‘øŸ‘—/øŸ.Ÿ‘†Aƒ  y Ÿ÷‚3A›‚)A[›†aOƒ  ”÷‚lO›„‹ ė{ „– h§ øøf…u†ģI§  #Õ÷øĘIuūKLŦ  #‚dL‡›‚ZL´›“ŧ +8”Rugˆƒ „Å Š{ •,!Đ ‡œåų­ '%^î(ŖĄņĄœC%´´'‘ĄÛ%ĩåų‘— /ÚųB%¸-%šh™j;%ēĸøĮ›…øĨm*%ģyø‘’aOä @/%ēâø‚lO œ„ō ė{ ’t‰õ `/%ģ*ų‚ƒ‰5œŠ4‰õ `/ ŧ˙Z‰˙M‰‚C‰5œ†ÕI %ŧJų‚äIaœ9 ģų‚f…Ŗœ†ģI9  #‚ų‚ĘIŖœūKL>  #‚dLˇœ‚ZL䜓N +8”Rug„ „ h„( „W Š{ Ģėđ…Üœ_ū–P%œCĻ÷œ—x/Tū¤strĄĀæ‘X’^āX†/Ģ`ú‚vā‚iā“‹/Šƒā’^ā\†¨/Ŧ—ú‚vāĢ‚iāŋ‹¨/Šƒā’čžĨ†Ā/žyû‚Ÿם‚Ÿž‹Ā/Š.Ÿ’Aކā/ y û‚3AEž‚)Amž„†hg‡qû‚f…ž’ģIg‡0 #8û‚ĘIžŠKLi‡0 #‚dLĄž‚ZLΞ“‡+8”Ru[ˆކ’W…†00žņû‚f…ធģI†P0 #¸û‚ĘIដKLÆh0 #‚dL˙ž‚ZL!Ÿ“`‡+8”Ru[†W…چžiü‚f…?Ÿ†ģIچ #0ü‚ĘI?ŸūKL↠#‚dLTŸ‚ZLiŸ“đ†+8”Rw’^āø†ˆ0§ ü‚vā|Ÿ‚iāŸ‹ˆ0Šƒā’^⇠0°Ûü‚vā¨Ÿ‚iāŧŸ‹ 0ƒāԟ’^ā)‡¸0ąũ‚vā( ‚iā< ‹¸0Šƒā’^ā1‡Ø0˛Iũ‚vāT ‚iāh ‹Ø0Šƒā†W…ƒ‡žÁũ‚f…€ †ģIƒ‡ #ˆũ‚ĘI€ ūKL‰‡ #‚dL• ‚ZL “–‡+8”Ru[†W…–‡6ž9ū‚f…Õ †ģI–‡ #ū‚ĘIÕ ūKLœ‡0 #‚dLꠂZLĄ“Ї+8”Ru[ˆ/†„“†…Û„Ĩ† ø„˛‡Š{ •ÅėЇ œĸstrÜM(‘–° Ü %*Ą—đ0õĨ‡ ā4 ‘¤~—1k˜iá %yĄ‹01™H%âCĻģĄ’~aOˆX1îk˙‚ąaÎĄ‚¤aĸ†ÕIOˆ Ų `˙‚äIÎĄūģIOˆ Õ‚ĘIÎĄūĄIOˆ -‚°IÎĄ„fˆR$’W…fˆx1îä˙‚f…Kĸ’ģIfˆ˜1 #Ē˙‚ĘIKĸŠKLrˆ°1 #‚dLoĸ‚ZLŦĸ“ˆˆ+8”Ru§~†W…ž‰î_øf…u¨~Ÿ†ģIž‰ #%øĘIu¨~ŸūKLĮ‰ #‚dLĘĸ‚ZLųĸ“ډ+8”Ru§~„Nˆęų’ÛĄˆČ1đÔ‚.Û Ŗ’Öŋˆč15C‚ŽÖ>Ŗ‰W…Ԉ2@!‚f…pŖ†ģIԈ #į‚ĘIpŖŠKLŨˆ 2 #‚dLĸŖ‚ZLÔŖ“Ÿ‰+8”Ru¨~‡|Léˆ@‚‹LōŖˆ‰†RÛ‰B5ą˙uÛ‚aÛ¤†āL‰#;Ž˙M‚īL:¤ūM3‰#;˙AM‚-M^¤ūĢLI‰5‚ēL‚¤ˆf‰ˆ ˆ„ĄˆËX„‰‰,ˆ´‰„ŧ‰Š{ áäėAŪáixM(ŪEŦx&'ëmsgyY5âņiz&'Ļ+ũĄā‰œ\=û5„6_‘ĄáiĄ=‘’ģ÷ô‰82ĸŅ‚Ę÷ŋ¤ūJô‰ Û‚Jŋ¤ūīIô‰ -‚ūIŋ¤’ü‰P2ĸ2‚%ͤ‚ᤂ ú¤‹P24Ĩ’:ä$Šp2|Ķ‚ZäZĨ‚Pä|Ĩ‹p2…b‘~a$Šˆ2ƒ‚ąaZĨ‚¤a›Ĩ†ÕI$Š Ų Æ‚äIZĨūģI$Š Õ‚ĘIZĨūĄI$Š -‚°IZĨ„>ŠR$’W…>Ѝ2|K‚f…´Ĩ’ģI>ŠČ2 #‚ĘI´ĨŠKLGŠā2 #‚dLÖĨ‚ZLøĨ“ŊŠ+8”Ruc’%bxŠø2€Ž˙Eb‚;bĻ‹ø2…b‘áP{Š3ƒ‚Q*Ļ‚õP>Ļ„™ŠR$†W…Ċ|&øf…udŸ†ģIĊ #íøĘIudŸūKLƊ #‚dLaĻ‚ZLŽĻ“ڊ+8”Ruc„$Š_ū„㊊{ k5 œõđŠZœzĄpvõM(‘„‹_ūˆ=‹Ļåü—P‹‚œ•vû5„6_‘Ąpv—M(‘’:är‹03˜q‚ZäĄĻ‚PäęĻ‹03…b‘~ar‹H3ƒ‚ąaĄĻ‚¤aB§†ÕIr‹ Ų d‚äIĄĻūģIr‹ Õ‚ĘIĄĻūĄIr‹ -‚°IĄĻ„†‹R$’W…†‹h3˜é‚f…Z§’ģI†‹ˆ3 #°‚ĘIZ§ŠKL‹ 3 #‚dL–§‚ZLŌ§“¨‹+8”Rus†W…ŗ‹˜aøf…utŸ†ģIŗ‹ #(øĘIutŸūKLš‹ #‚dL¨‚ZL=¨“ɋ+8”Rus„r‹B„Ō‹Š{ Ļũšā‹‚œ‘r û5„6_‘Ąpvš(‘’:䌸3›m‚ZäP¨‚P䙨‹¸3…b‘~aŒĐ3ƒ‚ąaP¨‚¤aņ¨†ÕIŒ Ų `‚äIP¨ūģIŒ Õ‚ĘIP¨ūĄIŒ -‚°IP¨„ŒR$’W…Œđ3›å‚f… Š’ģIŒ4 #Ŧ‚ĘI ЊKLŒ(4 #‚dLEŠ‚ZLŠ“8Œ+8”Rus†W…CŒ›] øf…utŸ†ģICŒ #$ øĘIutŸūKLIŒ #‚dLŋŠ‚ZLėŠ“YŒ+8”Rus„ŒB„bŒŠ{ •ípŒËœ1uŒ<%}Œ<%ļcŽ<%˙ŠļosŽp7@Ģž­P Œ—Ū ‚ÎPˇĢ‚ÁPĪ̉­P°Œ@4Ŧ ‚ÎPâĢ‚ÁPúĢ„ˇŒR$ž­PЌ‘: ‚ÎP Ŧ‚ÁP%Ŧž­PāŒšc ‚ÎP8Ŧ‚ÁPPŦž­PđŒŒ ‚ÎPcŦ‚ÁP{Ŧž­PŠĩ ‚ÎPŽŦ‚ÁPĻŦž­PŖŪ ‚ÎPšŦ‚ÁPŅŦž­P0  ‚ÎPäŦ‚ÁPüŦž­P@Ļ0 ‚ÎP­‚ÁP'­ž­PP”Y ‚ÎP:­‚ÁPR­ž’ā`¯x ‚āe­‰~aŽX4ŗ ‚ąaŦ­‚¤a×­†ÕIŽ Ų ø ‚äIŦ­ūģIŽ Õ‚ĘIŦ­ūĄIŽ -‚°IŦ­„œR$‰W…œx4ŗz ‚f…Ž’ģIœ˜4 #A ‚ĘIފKLŸ°4 #‚dL$Ž‚ZL9Ž“ԍ+8”Ru_‰W…¯Đ4ŗņ ‚f…WކģI¯ #¸ ‚ĘIWފKLĩč4 #‚dLlŽ‚ZLŽ“ʍ+8”RwžáP㍰$ ‚QŸŽ‚õPĘŽ„ōR$žW…ūŗ› ‚f…ŨŽ’ģIū5 #b ‚ĘIŨފKLŽ5 #‚dLōŽ‚ZL¯“Ž+8”Ru_žW…Ž%ŗ‚f…2¯†ģIŽ #Ų ‚ĘI2¯ūKLŽ #‚dLG¯‚ZLt¯“(Ž+8”Ru_„{…Û„ ø„1ŽŠ{ •-í@ŽgœÖļcŧ<%‡¯ļosŧp7Ú¯ž­PYŽŋ•‚ÎP-°‚ÁPE°„kŽR$ž­PˆŽÂËøÎPĒŠŸ‚ÁPf°„šŽR$ˇŽr •Gí°ŽŊœĖ%š'%– ā´'‡°Ģlen&'´°ĸosp7‘€ĖŽ–Ĩ'H‘K°Ÿ™ĄĘ%ā°†­PĖŽŠøÎPK°Ÿ‚ÁPą„ߎR$ߎt—™¸Ō&'1ą€÷ŽV˜curē'gą’­P÷Ž05 ø‚ÎP’ą‚ÁPĒą„/R$†¨ā "‚ŗāŊą„€€ †­P/ V‚ÎPÜą‚ÁPôą„>R$ūĀāD  ‚Õ➂Ë➓M1”Pu”Rwū­PSøÎPK°Ÿ‚ÁP9˛„bR$álí%š'%Ū ā´'ëlen&'ëosp7•’íp`œĪ– ā+´'X˛ĸlen+&'‘ĸos+p7‘ŠĖŒH5,‚úl˛‚íĸ˛‚⨞†­PŖ'Ž‚ÎPŗ‚ÁPŗ„ĩR$„ŖÖ¸ЏÖ”R‘1•˛íЏqœĀĢs6´'9ŗĢos6p7dŗ†áę :6‚áŗ‚ášŗ„ôc=†­Pô:j‚ÎPÍŗ‚ÁPåŗ„R$†­P(8ĄøÎPÆŠŸ‚ÁPøŗ„:R$„c~ ¸!Ö”‘‘•ÍíPœ_ĢsX_´ĸosXp7‘’ÕIPp5YJ‚äI´ŠģIPˆ5 Õ‚ĘI´ŠĄIP 5 -‚°I´¸fÖ”‘‘ô1áiЉëstr&Ā´'ëos&Āp7•\-` ØœIT´'ĄÜå&O‘—¸5 ¤ss&P4 ‘¤~’×f ā5&P’Ž×‚×+´’Ήf 6‚Ū‰s´ˆ• ’Ė×› 06Ã˙īׂÛ×ģ´’Ø› `6#?o˙'Ø‚Øģ´„ ¸ũ†VM '#?Ÿ˙yM‚eM괄7 ¸ũūM#?˙AMø-MuŦ~Ÿ’ī‰S €6U‚ŠLĩ‚ū‰lĩ‰ĩ‰S  6c‚ĉlĩˆŲ ‡t‰ō c‚ƒ‰ŋĩū4‰ō  ŧ˙Z‰˙M‰‚C‰ŋĩ†ĢLų %{‚ēLļˆ„ ¸ũˆß ˆđ ’d Ā6&Qo‚|.ļ‚ojļ’xá> ā6&ÄB‚—á­ļ‚ŠáÜļ‹ā6ŠNá> ā6&ô‚fá­ļ‚YáÜļŠ&á> ā6&X‚<á­ļ‚1áÜļ„O Ā’W…O ø6&Äģ‚f… ˇ’ģIO 7 #‚ĘI ˇŠKL[ 07 #‚dL-ˇ‚ZLQˇ“‹ +8”RuĻ~†­PP  &Âī‚ÎPoˇ‚ÁP‡ˇ„g R$†W…¤ &Äh‚f…ˇ†ģI¤  #.‚ĘIˇūKL­  #‚dLŗˇ‚ZLⷓĀ +8”RuĻ~ˆ< ’ũßg H7&R™‚ āõˇ„s @’Ûs `7&R‚.Û'¸’ÖŖ €75q‚ŽÖY¸‰W…˛ ˜7@O‚f…‹¸†ģI˛  #‚ĘI‹¸ŠKLģ °7 #‚dLŊ¸‚ZL{ +8”Ru¨~‡|LĮ @‚‹L šˆä †RÛä <5ß˙uÛ‚aÛ1š†āLô #;ŧ˙M‚īLUšūM #;˙AM‚-MyšūĢL 5‚ēLšˆ; ˆÎ „Ö Š{ „Š{ 6•čípÍœũ%š<%– āM(ÁšĢlen&'íšĸosp7‘€ސ¤Ĩ'H‘ŲŠŸ™ĄĘ%k熭Pސ×øÎPŲŠŸ‚ÁPŽē„ĄR$ĄČ™¸Ō&'­ē‹Č7˜curS(Ėē’­P¨č7 A‚ÎPöē‚ÁPģ„‘R$†Ģáڐ€‚ļá!ģ€ڐÄá!ģ„€ †­P‘ ´‚ÎP@ģ‚ÁPXģ„‘R$“ː1”Rwū­P ‘øÎPK°Ÿ‚ÁPkģ„2‘R$á î8%š<%Ū āM(ëlen&'ëosp7•3î@‘aœ– ā1M(Šģĸlen1&'‘ĸos1p7‘Šũ\‘82‚+žģ‚Ôģ‚ ŧ†­Pq‘'ß‚ÎP4ŧ‚ÁPLŧ„ƒ‘R$„q‘#¸Ą‘#”R‘1•Sî°‘qœņĢsGM(kŧĢosGp7–ŧ†áʑ Kg‚áÁŧ‚áëŧ„ԑc=†­PԑK›‚ÎP˙ŧ‚ÁPŊ„æ‘R$†­P’IŌøÎPÆŠŸ‚ÁP*Ŋ„’R$„î‘,¸’#”‘‘•nî0’œĢsdIŊĸosdp7‘’ÂM0’08e{‚ŅMIŊŠJ0’H8 Õ‚JIŊŠīI0’`8 -‚ūIIŊ¸F’#”‘‘k5ᐊēëstr&ÔM(ëos&Ôp7•}-@+œũ$ITM(ĄÜå&Oũ$‘—x8č$¤ss&P4 ‘¤~’×F 8&PŽ×‚×]Ŋ’ΉFČ8K‚Ū‰ĨŊˆu’Ė×{đ8ķ˙īׂÛ×íŊ’Ø{ 9#? ˙'Ø‚ØíŊ„î¸ũ†VMđ'#?Đ˙yM‚eMž„¸ũūMô#?˙AM‚-M~ž’ī‰0@9…‚Š”ž‚ū‰Ėž‰ĩ‰0`9cA‚ĉĖžˆ§‡t‰Āc‚ƒ‰;ŋū4‰Ā ŧ˙Z‰˙M‰‚C‰;ŋ†ĢLĪ%Ģ‚ēLÄŋˆė„é¸ũˆšˆĖ’•ņ€9&QN#‚­Úŋ‚ 0Ā’*â°9&Ør ‚IâsĀ‚<âŧĀ‹°9Šâ°9&ô‚âsĀ‚ âŧŠØá°9&X‚îásĀ‚ãáŧĀ„)ņ’]â)Č9&ØÄ!‚lâ.Á’J)đ9 #Í ‚J.ÁūīI) -‚ūI.ÁŠJN5: #‚cNyÁ‚YNÁ‹(:‚cNÆÁ‚YNÜÁ‰'LP@: öˇ!‚>LúÁ‚2LZ |!‚>LS‚2Lh‡ĘKZ R‚áKS‚ÕKh‡ôK€ T‚ L}‚˙K’€€L¸Â„~"†­P &Öø!‚ÎPä‚ÁPü„7R$’]âX:&ØG#‚lâÆJ #S"‚JÃūīI -‚ūIÊJNp: #‚cN6ÂYNZÀ56øcNuĻ~Ÿ‚YNƒÃ‰'L5ˆ: ö:#>L‚2LĄÃA#‚>LÃÂ2LØÃ‡ĘKA R‚áKÃÂÕKØÃ‡ôK` T Lø˙KpŸ€` ŸLR„["ˆ’ũßA¨:&Rx#‚ āíÄR@’ÛRĀ:&Rá$‚.ÛĒÖpā:5P$‚ŽÖQĉW…ø:@.$‚f…ƒÄ†ģI #ô#‚ĘIƒÄŠKLˆ; #‚dLĩĂZLįēK+8”Ru¨~‡|L”@‚‹Lňą†RÛą<5ž$˙uÛ‚aÛ)ņāLÁ#;›$˙M‚īLMÅūM×#;˙AM‚-MqÅūĢLí5‚ēL•ňˆ-„ôŠ{ „5Š{ (ø•ĮĘP’Ŋœœ)Ģstr[ ´'šÅ—(;‘)Ĩã;\ ûŗ‘’t‰d’H;\ Š%‚ƒ‰Ɗ4‰d’H; ŧ˙Z‰˙M‰‚C‰Ɨ`;)˜ch^ '%ƒŽX°’ˆ;g '‚§XĻÆ˙X‹ˆ;ļXĪÆ†ÕI°’ /%&˙äIūģI°’ Õ˙ĘIūĄI°’ -˙°I†ŲNã’ 2O&‚đNúƂäN"Į†ģIč’ 3ƒ&˙ĘIūĄIč’ -˙°I’!Ođ’ ; 3'‚:O:Į‚0OZĮ€ “‚:O’Į‚0OĻĮžæJŖ“ Õå&˙õJ‡ŲN­“ ×˙đN‚äNÆĮ„ؒÂ’W…G“¸;d Œ'‚f…ßĮ’ģIG“Ø; #S'‚ĘIßĮŠKLP“đ; #‚dL ȂZL,ȓ˜“+8”Ru_’W…X“<d (‚f…JȆģIX“ #Ë'‚ĘIJȊKL^“ < #‚dL_ȂZLtȓp“+8”Rv†W…ۓd |(‚f…‡Č†ģIۓ #C(‚ĘI‡ČūKLá“ #‚dLœČ‚ZLÉȓņ“+8”Ru_†W…ņ“d ô(‚f…ÜȆģIņ“ #ģ(‚ĘIÜČūKL÷“ #‚dLņȂZLɓ”+8”Ru_„+“*ę„<“ ø„G“¸“#|)˙f…†ģI¸“ #C)˙ĘIūKLĀ“ #‚dL1ɂZL^ɓГ+8”Ru_„{’c~ „‰’Â„Ų“Š{ •f!pZœ‘*­ '%^î(ŖĄņĄœC P ‘*‘ĄÛ Q –*‘—8<†*Ĩm* S ‘Ŧu*øf…u†ģIŦ #<*øĘIuūKLą #‚dLqɂZLžÉ“Á+8”Rugˆ„›„ĘŠ{ īīá !+­ '%^î(ŖĄņŪœC … +ŪÛ … '%âB ‡ îm* ‰ Ũ*â˙f…īŽ8žÂ”œa0ƒ9Âa0‘ƒ/DÃf0‘—P<V0¯dirÆ7 ‘Tžčˆ*”ÄŠ+‚÷ˆąÉ‡6T*”o‚ETąÉūÕI*” 6‚äIąÉ‰›*D”p<Į`,‚Î*ʂÁ*9ʋp<Šé*~•!N,øf…u`Ÿ’ģI~•< #,øĘIu`ŸŠKL•¨< #‚dL‹Ę‚ZL¸Ę“š•+8”RudˆP”„]”ĩ‰'¯q”Ā<Į-‚@¯Ëʂ6¯˞W…(•@˙,‚f…€Ë’ģI(•ā< #Æ,‚ĘI€ËŠKL*•ø< #‚dL“Ë‚ZLĀ˓?•+8”Ru[ˆz”„‚”f­‰W…‚”=Į‡-‚f…Ķ˒ģI‚”0= #N-‚ĘIĶˊKL…”H= #‚dL˙˂ZL.Ė“đ”+8”Ru[‰W…•”h=Į˙-‚f…LˆģI•” #Å-‚ĘILˊKL›”€= #‚dLˆĖ‚ZLÄĖ“•+8”RuT‰ˆŸ”˜=Į’.‚͈âĖ‘W…Ÿ”°=;‚f…âˆģIŸ” #W.‚ĘIâˊKLĨ”Č= #‚dL͂ZL@͓ā”+8”RuTž}ˆ¸”ÅÁ.‚–ˆ^͂Œˆ~͈Ĕžˆ •ĮS/‚͈œÍ‡W… •;‚f…œÍ†ģI • #/‚ĘIœÍūKL• #‚dLąÍ‚ZLŪ͓•+8”Ru[žW…B•ĮĘ/‚f…ņ͆ģIB• #‘/‚ĘIņÍūKLH• #‚dL΂ZL3ΓT•+8”Ru[žW…T•*ĮA0‚f…FΆģIT• #0‚ĘIFÎūKLZ•$ #‚dL[΂ZLˆÎ“f•+8”Ru[„D”æē„p”œ)„%•Š{ ƒ5ƒ5•‰î •œ43Ą&‹Ž43‘Ąîš93‘—ā=)3ĨE‘\F‘X’W…å•>–11‚f…›Î†ģIå• #ø0‚ĘI›ÎŠKLë•(> #‚dL×΂ZLĪ“X–+8”Rud†čž–)–Ļ1‚ŸQĪ‚ŸyĪ€–)Š.Ÿ’A–@> y ž1‚3A™Ī‚)AÁĪ„&–hˆ–’W…3–X>–2‚f…áĪ’ģI3–p> #å1‚ĘIáΊKL6–ˆ> #‚dLõĪ‚ZL"ГN–+8”Ru_†W…l–––2‚f…5ІģIl– #]2‚ĘI5ĐūKLr– #‚dLJЂZLwГ~–+8”Ru_†W…‰––3‚f…ŠĐ’ģI‰– > #Õ2‚ĘIŠĐŠKLŒ–¸> #‚dLŸĐ‚ZLĖГĄ–+8”Ru_„Õy]ˆܕ„3–œ)„‡–Š{ ô1_5á¨îq3uŒ5%}Œ5%écŽ5%éosŽp7•ÔîАœt;uŒ5%}Œ5%›cÕ5%‘›osÕp7‘—Đ>i;æŲ1Øī‰­Pęđ>×ū3øÎP䊟‚ÁPßЄR$‰>3?Øá8‚e3CŅ‚[3§Ņž­P —Y4‚ÎPÛŅ‚ÁPķŅ„2R$ž­P‘Œ4‚ÎPŌ‚ÁPŌ„ĸR$ž­P¸ šŋ4‚ÎP1Ō‚ÁPIŌ„ĘR$ž­PØ ō4‚ÎP\Ō‚ÁPtŌ„ęR$ž­Pø Š%5‚ÎP‡Ō‚ÁPŸŌ„ R$ž­P ŖX5‚ÎP˛Ō‚ÁPĘŌ„*R$ž­P8 Ŧ‹5‚ÎPŨŌ‚ÁPõŌ„JR$ž­PX  ž5‚ÎPĶ‚ÁP Ķ„jR$ž­Px Ļņ5‚ÎP3Ķ‚ÁPKĶ„ŠR$ž­P˜ ”$6‚ÎP^Ķ‚ÁPvĶ„ĒR$ž’⏝C6‚ā‰Ķ‰~ađ@?ŗÎ6‚ąaĩĶ‚¤aí͆ÕIđ Ų Ã6‚äIĩĶūģIđ Õ‚ĘIĩĶūĄIđ -‚°IĩĶ„ūR$‰W…ū`?ŗE7‚f….ԒģIū€? # 7‚ĘI.ԊKL˜? #‚dLNԂZLˆÔ“Č+8”R‘[‰W…¸?ŗŊ7‚f…ĻԆģI #ƒ7‚ĘIĻԊKLĐ? #‚dLČԂZLčԓ¸+8”R‘DžáPÔ°đ7‚QՂõP%ՄæR$žW…ŗg8‚f…8ՒģIč? #.8‚ĘI8ՊKL@ #‚dLLՂZLyՓ0+8”R‘[žW…3ŗĖ8‚f…ŒÕ†ģI3 #Ĩ8‚ĘIŒÕūKL9 #‚dL Õ‚ZLĩՄÔ…Û„ī ø‰­P8@Ų29‚ÎPČՂÁP քFR$„°R$„1R$„ôR$‰­PF@@āo9‚ÎPwւÁPŋքXR$„NR$ž­Psęĸ9‚ÎP˙ւÁPׄ…R$‰­Pm`@čÕ9‚ÎP*ׂÁPRׄ~R$‰~a~x@č\:‚ąa|×˙¤a†ÕI~ Ų Q:‚äI|×ūģI~ Õ‚ĘI|×ūĄI~ -‚°I|ׄŽR$‰W…Ž˜@čĶ:‚f…‘×’ģIް@ #š:‚ĘI‘×ūKL— #‚dLĻׂZLĶדĢ+8”R‘[žW…HčJ;‚f…æ×†ģIH #;‚ĘIæ×ūKLN #‚dLûׂZLؓ^+8”R‘[„a=„W=„m…Û„FŠ{ •ī°–#œŽ;›cí5%‘›osíp7‘„Ζq3áīá;uŒ5%}Œ.%écŽ.%éosŽp7•Kī`ĻœäCuŒ5%}Œ.%›cÕ.%‘›osÕp7‘—Č@ŲCæŲ1Øīž­Pz×n<øÎP䊟‚ÁP#؄ŒR$‰Ž;Žā@ØQA‚Õ;‡Ø‚Ë;ëØž­P°—É<‚ÎP‘Ų‚ÁPŠŲ„ÂR$ž­P ‘ü<‚ÎPŧŲ‚ÁPÔŲ„2R$ž­PH š/=‚ÎPįŲ‚ÁP˙Ų„ZR$ž­Ph b=‚ÎPڂÁP*ڄzR$ž­Pˆ Š•=‚ÎP=ڂÁPUڄšR$ž­P¨ ŖČ=‚ÎPhڂÁP€Ú„ēR$ž­PČ Ŧû=‚ÎP“Ú‚ÁPĢڄÚR$ž­Pč  .>‚ÎPžÚ‚ÁPÖڄúR$ž­P Ļa>‚ÎPéڂÁPۄR$ž­P( ””>‚ÎPۂÁP,ۄ:R$ž’āH¯ŗ>‚ā?ۉ~aˆAŗ>?‚ąaĀۂ¤aøÛ†ÕIˆ Ų 3?‚äIĀÛūģIˆ Õ‚ĘIĀÛūĄIˆ -‚°IĀۄ–R$‰W…–8Aŗĩ?‚f…9ܒģI–XA #|?‚ĘI9܊KL™pA #‚dLY܂ZL“Ü“m+8”R‘[‰W…­Aŗ-@‚f…ąÜ†ģI­ #ķ?‚ĘIąÜŠKLŗ¨A #‚dLĶ܂ZLķܓ]+8”R‘DžáPz°`@‚QŨ‚õP<Ũ„ŒR$žW…ģŗ×@‚f…OŨ’ģIģĀA #ž@‚ĘIOŨŠKLžØA #‚dLcŨ‚ZLŨ“Ö+8”R‘[žW…Ųŗį†aO2 N‚lOûæ„;ė{ „Jh’W…JE,œN‚f…Rį’ģIJ8E #cN‚ĘIRįŠKLSPE #‚dLį‚ZL°į“˜+8”Ru_†t‰Ŧ +äN‚ƒ‰Îįū4‰Ŧ ŧ˙Z‰˙M‰‚C‰Îį†W…Ī,\O‚f…ųį†ģIĪ ##O‚ĘIųįūKLÕ #‚dLč‚ZL;č“å+8”Ru_„/y]„Ē%| „Áō†ã[+æO‚ãNč‡*i[+U‚9iNčūqG[+‚ŠGpč‚€GNč„lŝ†ãå+Pøãu`Ÿ‡*iåUø9iu`Ÿ„īqGˆ„÷Š{ úÚ [œ[P{TITPãû5„‘_‘ĄÜå{T‘’fã&hE Q‚†ã„č‚|ãšč‹hE…bžę^&ƒÍP‚ų^šč‘­P)ˆEƒ‚ÎPōč‚ÁP'é’aO7°EQ‚lObé„Cė{ —ČE“Q‚ÎPué‚ÁP‰éЇPTāE‚ P­é‚–PÁéžcPŲ ˜‡Q‚zP­é‚nPÔ鄿™ũ„QR$’įōQFēS‚ķčé‚öō$ę†Tn,R‚+TMęūĄIn ‚°IMę’Aq F,cR‚3A–ę‚)AĘę†aOq XR‚lO–ę„wė{ „„h’W…„8F,ÛR‚f…Ūę’ģI„XF #ĸR‚ĘIŪęŠKLpF #‚dL ë‚ZL<ë“ø+8”Ru_’t‰ ˆF+#S‚ƒ‰ZëŠ4‰ ˆF ŧ˙Z‰˙M‰‚C‰Zë†W…1,›S‚f……ë†ģI1 #bS‚ĘI…ëūKL7 #‚dLšë‚ZLĮë“G+8”Ru_„ny]„ %| „!ō†ã•+%T‚ãÚë‡*i•+U‚9iÚëūqG•+‚ŠGüë‚€GÚë„Ļŝ†ãGjTøãu`Ÿ‡*iGUø9iu`Ÿ„SqGˆ&„[Š{ `ãú `œŸTŲWIT3û5„‘_‘ĄÜåŲW‘’žå€ FūT‚žåė‚´å0ė‹ F…b„‘ĀĐ’įō‘¸FW‚ķhė‚öōĢė†TŦ,cU‚+TßėūĄIŦ ‚°Ißė’A¯ØF,ÁU‚3Aí‚)A^í†aO¯ ļU‚lO털ė{ „Įh’W…ĮđF,9V‚f…rí’ģIĮG #V‚ĘIríŠKLĐ(G #‚dLĄí‚ZLĐí“ +8”Ru_†t‰,  +V‚ƒ‰îíū4‰,  ŧ˙Z‰˙M‰‚C‰îí†W…O ,ųV‚f…î†ģIO  #ĀV‚ĘIîūKLU  #‚dL.î‚ZL[î“e +8”Ru_„Ŧy]„* %| „A ō†ãØ+ƒW‚ãnî‡*iØ+U‚9inîūqGØ+‚ŠGî‚€Gnî„éŝ†ãe ČWøãu`Ÿ‡*ie Uø9iu`Ÿ„o qGˆ€„w Š{ ¸8ß0 ôW XIT/üā5„‘_ŪÜå X_5áž-3Xéosč3Xésbč8X2_5ßX SXkXIT?ā5„‘_ŪÜåkX å߀ †XžXITLåā5„‘_ŪÜåžX\å´×ī@—œękũ´'‘ũ´'‘ũ´'‘ ĄÁdęk‘ĄįŦe?‘ĄÄnfīk‘—@GßkĨ&Ķg\F‘¤¤msgj/ü‘¨˜rtôk¤î’fãŗpGlY‚†ããî‚|ã;ī‹pG…b„á—­P’:äá—ˆGl>Z‚Zä„ī‚PäŌī‹ˆG…b‘~aá—¨Gƒ‚ąa„ađ†ÕIá— Ų 1Z‚äI„īūģIá— Õ‚ĘI„īūĄIá— -‚°I„ī„˜R$’Îä˜ĐGl€Z‚îäLđ‚ää¤đ‹ĐG…b„!˜­P’fã#˜čGmÂZ‚†ãíđ‚|ãEņ‹čG…b„?˜­P’Éa@˜Hm[˙éa‚ßaŽņ‹H…b„W˜=’đåW˜ HmB[‚æ×ņ‚æ/ō‹ H…b„u˜­P€˜l\˜in %xō’Î䓘8HoÆ[‚îä‹ō‚ääŖō‹8H…b‘­Pĸ˜XHƒ‚ÎP‹ō‚ÁPšō„ŗ˜R$’žå´˜xHo\‚žåŲō‚´åîō‹xH…b„͘ĀĐ„“˜i„å˜ĨÕ’ŪW™Hq˙`‚ūWķ‚ôWRķ’Į♸H*^‚įâ›ķ‚Ũâé틏H…b‘X$™āHƒ‚'X2ô‚X€ô‰~a:™Ié+]‚ąa´ô‚¤aõ†ÕI:™ Ų ]‚äI´ôūģI:™ Õ‚ĘI´ôūĄI:™ -‚°I´ô„H™R$‰W…H™ Ié¤]‚f…6õ’ģIH™@I #i]‚ĘI6õŠKLK™XI #‚dLvõ‚ZL˛õ“#›+8”Ru”žW…tž é^‚f…Đõ’ģItžxI #â]‚ĘIĐõŠKLwžI #‚dLæõ‚ZLûõ“ž+8”Ru”„9™y]’įōb™¨IH`‚ķö‚öōNö†T™,^‚+TŠöūĄI™ ‚°IŠö’A‚™ČI,í^‚3AĘö‚)Aūö†aO‚™ â^‚lOĘö„ˆ™ė{ „•™h’W…•™āI,g_‚f…÷’ģI•™J #,_‚ĘI÷ŠKLž™J #‚dLP÷‚ZL÷“0›+8”Ru”’t‰B›0J+¯_‚ƒ‰÷Š4‰B›0J ŧ˙Z‰˙M‰‚C‰÷†W…ŗž,)`‚f…°÷†ģIŗž #î_‚ĘI°÷ūKLšž #‚dLÆ÷‚ZLÛ÷“ƞ+8”Ru”„™y]„B›%| „S›ō’ã§™HJŗ`‚ãî÷‘*i§™`JU‚9iî÷ŠqG§™xJ‚ŠGø‚€Gî÷„¸™ŝ†ã”žø`‚ã2ø‡*i”žU‚9i2ø„ĄžqGˆ™†)ãĪ™qEa‚;ãHøūĸ…Ī™‚ą…]ø„יō†)ã]žq‹a‚;ãrøūĸ…]ž‚ą…‡ø„jžō’)ãיJ|Ņa‚;ãœøŠĸ…י°J‚ą…ąø„+ō’ãڙĐJjb‚ãŅø‘*iڙčJU‚9iŅø„į™qG’W…į™K‚b‚f…ų’ģIį™ K #Ub‚ĘIųŠKLđ™8K #‚dLQų‚ZLų“›+8”Ru”’)ãŖšPKvÖb‚;ãÍųŠĸ…ŖšhK‚ą…âų„ššō†tIƚ{ c‚“Iú‚†I;ú„ښč} ’=X›€K|kf‚]XOú‚SXwú’å´› Kšc‚0åļú‚&åŪú‹ K…b‘­P´›ĀKƒ‚ÎPļú‚ÁP4û„՛R$’įō՛čK´e‚ķeû‚öōČû†Tû›,˙c‚+TüûūĄIû› ‚°Iüû’Aū›L,]d‚3Aü‚)AXü’aOū›0L Rd‚lOü„œė{ „œh’W…œHL,Õd‚f…lü’ģIœhL #œd‚ĘIlüŠKL œ€L #‚dLŽü‚ZL°ü“B+8”RuX†W…՝,Me‚f…Îü†ģI՝ #e‚ĘIÎüūKL۝ #‚dLãü‚ZLũ“č+8”RuX†t‰ž+•e‚ƒ‰#ũū4‰ž ŧ˙Z‰˙M‰‚C‰#ũ„û›y]„ ž%| „'žō†ã)œ+f‚ãNũ‡*i)œ+U‚9iNũūqG)œ+‚ŠG}ũ‚€GNũ„:œŝ†ãčdf‚ãŠũ‡*ičU‚9iŠũ„õqGˆ´›’pXbœ˜L}Ėi‚Xžũ‚†Xöũ’båpœĀLûf‚‚å5ū‚xåmū‹ĀL…b‘­PpœāLƒ‚ÎP5ū‚ÁPœū„ˆœR$’įōˆœMi‚ķÎū‚öōũū†TĨœ,`g‚+T1˙ūĄIĨœ ‚°I1˙’A¨œ8M,žg‚3AS˙‚)A€˙’aO¨œPM ŗg‚lOS˙„ąœė{ „Áœh’W…ÁœhM,6h‚f…”˙’ģIÁœˆM #ũg‚ĘI”˙ŠKLƜ M #‚dLŠ˙‚ZLž˙“8+8”RuX†t‰S+~h‚ƒ‰Ü˙ū4‰S ŧ˙Z‰˙M‰‚C‰Ü˙†W…ž,öh‚f…†ģIž #Ŋh‚ĘIūKLĝ #‚dL‚ZLI“Ņ+8”RuX„Ĩœy]„Q%| „eō†ãΜ+€i‚ã\‡*iΜ+U‚9i\ūqGΜ+‚ŠGq‚€G\„āœŝ†ãoÅi‚ã…‡*ioU‚9i…„|qGˆpœ†)ã|j‚;ãšūĸ…‚ą…¯„ō†ãjWj‚ã܇*iU‚9iÜ„qG†W… ‚Đj‚f…ō†ģI  #–j‚ĘIōūKLĻ #‚dL‚ZL7“ŗ+8”Rŭ)ã<ž!vk‚;ãJūĸ…<ž!‚ą…_„Jžōˆ{—ˆ’—„Ŗ—ĨÕ„Á—ĨÕ„™&Vˆ͙„/ši„Wš&V„hš‚€G„0"ŝžãX"ô˙pøãudŸ‡*iX"Uø9iudŸ„b"qGˆ"„"y]„j"Š{ Ō:•¸-О;œ6u–ģ%¯ %RĄŠû° ´'‘Ą‹ĩą ´'‘’čžŸO˛ 7røŸĒŽŸ‚ŸĄ‹OŠ.Ÿ’A Ÿ0O y Đq‚3A ‚)AE„ŸhœŸ/r‚f…ß’ģIœŸHO #r‚ĘIߊKLŸŸ`O #‚dLô‚ZL ˆ Ÿ’čž!ŸxOŗ As‚Ÿ‚Ÿį‹xOŠ.Ÿ’A*Ÿ˜O y Ęr‚3Ai‚)A †aO*Ÿ ŋr‚lOi„2Ÿė{ „?ŸhīŸ9søf…uP’ģIīŸ°O #søĘIuPŠKLōŸČO #‚dLR ‚ZL “  +8”Ru_ˆ*Ÿ’W…?ŸāO˛ šs‚f…’ ’ģI?ŸP #€s‚ĘI’ ŠKLBŸP #‚dLä ‚ZL “xŸ+8”Ru_’W…RŸ8P˛ 1t‚f…N ’ģIRŸPP #øs‚ĘIN ŠKLXŸhP #‚dLp ‚ZL “Ÿ+8”Rw†W…ŦŸ#˛ Št‚f…Ž †ģIŦŸ #pt‚ĘIŽ ūKL˛Ÿ #‚dLà ‚ZLđ “žŸ+8”Ru_†W…Ο ˛ !u‚f… †ģIΟ #čt‚ĘI ūKL՟ #‚dL ‚ZL- “áŸ+8”Ru_„Ÿâo„ĮŸŠ{ ü&ā íœNuKwû5„CW‘ĄšÕÉ Kw‘—€P@wĨwpĘ \F‘l’×cl  PÎ ũu‚æc@ †é_l Äu‚ø_` ūTv ‚+Tˆ ūĄIv  ‚°Iˆ ’W…Ļ ¸PĶ uv‚f…§ ’ģIĻ ØP #Ĩ+8”Ruü~†W…>ĨĻ q„‚f…Û†ģI>Ĩ #7„‚ĘIÛūKLDĨ #‚dLđ‚ZL“PĨ+8”Ru¨†W…PĨ§ ę„‚f…2†ģIPĨ #°„‚ĘI2ūKLVĨ #‚dLG‚ZLv“bĨ+8”Ru¨†W…bĨ¨ c…‚f…‰†ģIbĨ #)…‚ĘI‰ūKLhĨ #‚dLž‚ZLÍ“tĨ+8”Ru¨†W…tĨŅĒ Ü…‚f…ā†ģItĨ #ĸ…‚ĘIāūKLzĨË #‚dLõ‚ZL$“†Ĩ+8”Ru¨„4Ą•€ „RĄöä„bĄöä„rĄöä„‚Ąöä„™Ąö䄚Ąâo„ĪĄčž„āĄœ)„īĄčž„ūĄœ)„ĸčž„ ĸœ)„6ĸčž„Gĸœ)„Yĸčž„gĸœ)ˆfŖ„ĨŠ{ u+Žž˛PĻéœģƒ9˛ģ‘ƒkŗĀ‘ƒų´ %‘ ƒ˙2ĩ´'‘—XT°œT@ļÄ6‘ŧ‰t‰jĻ€TļP‡‚ƒ‰7Š4‰jĻ€T ŧ˙Z‰˙M‰‚C‰7‰ĀS¨Ļ˜T¸ƒ‡‚ŲSÚ‚ĪS„ˇĻū‰W…ˇĻ°T¸ú‡‚f…f’ģIˇĻĐT #Á‡‚ĘIfŠKLÃĻčT #‚dL“‚ZLą“7¨+8”RwžW…ËϏ_ˆ‚f…ΆģIËĻ #8ˆ‚ĘIĪūKLŅĻ #‚dLä‚ZLųž'¯ŲĻŊ˜ˆ‚@¯ ‚6¯pˆåĻ„íĻf­‰ˆüĻUŊ*‰‚͈Ķ‘W…üĻ U;‚f…Ķ’ģIüĻ@U #đˆ‚ĘIĶŠKL§XU #‚dL‚ZLe“`¨+8”Ru`‰W… §pUŊĄ‰‚f…ƒ†ģI § #h‰‚ĘIƒŠKL§ˆU #‚dLĀ‚ZLü“G¨+8”Rw‰ĀS•§ Uģԉ‚ŲS:‚ĪS„¤§ū‰W…¤§¸UģKŠ‚f…Æ’ģI¤§ØU #Š‚ĘIÆŠKL°§đU #‚dLķ‚ZL“÷§+8”Rw‰W…´§VģŠ‚f…/†ģI´§ #‰Š‚ĘI/ŠKLē§ V #‚dLQ‚ZLs“¨+8”Rw‰W…ž§8Vē9‹‚f…‘†ģIž§ #‹‚ĘI‘ŠKLħPV #‚dLŗ‚ZLÕ“¨+8”Rw‰W…ȧhVē°‹‚f…ķ†ģIȧ #w‹‚ĘIķŠKLΧ€V #‚dL‚ZL7“'¨+8”RwžW…Ō§ē'Œ‚f…U†ģIŌ§ #î‹‚ĘIUūKLا #‚dLj‚ZL“į§+8”Rw‰W…g¨˜VēžŒ‚f…’†ģIg¨ #eŒ‚ĘI’ŠKLm¨°V #‚dL§‚ZLŧ“˛¨+8”RudžW…q¨Ŋ‚f…ΆģIq¨ #܌‚ĘIĪūKLw¨ #‚dLä‚ZL “ƒ¨+8”RuCžW…ލ¸Œ‚f…$ †ģIލ #S‚ĘI$ ūKL”¨ #‚dL9 ‚ZLf “ ¨+8”RudžW… ¨ ¸ņ‚f…y †ģI ¨ #ʍ‚ĘIy ūKLύ #‚dLŽ ‚ZLŖ žˆļ¨ŊƒŽ‚͈ļ ‡W…ļ¨;‚f…ļ †ģIļ¨ #IŽ‚ĘIļ ūKLŧ¨ #‚dLË ‚ZLø “Ȩ+8”Ru`žW…ШģúŽ‚f… !†ģIШ #ÁŽ‚ĘI !ūKLÖ¨ #‚dL !‚ZLM!“â¨+8”RudžW…â¨ģq‚f…`!†ģI⨠#8‚ĘI`!ūKLč¨ #‚dLu!‚ZLĸ!“ô¨+8”RudžW…ô¨ēč‚f…ĩ!†ģIô¨ #¯‚ĘIĩ!ūKLú¨ #‚dLĘ!‚ZL÷!“Š+8”RudžW…Š3ē_‚f… "†ģIŠ #&‚ĘI "ūKL Š- #‚dL"‚ZLL"“Š+8”Rud„—Ļčž„¨Ļčž„üĻ+„E§âo„[§čž„l§œ)„„§čž„•§čž„Œ¨Š{ ƒ5ƒ5 Xž@ŠÖœŠ“Ą9Š“‘Ąk“‘Ą˙2´'‘ —ČV“Ĩ§d‘™ų %_"’¨ˆFŠčV^‘‚ˇˆš"ˆhŠ’ˆhŠWō‘‚͈â"‘W…hŠ0W;‚f…â"’KLhŠXW #ԑ‚dL#‚ZL@#“ĮŠ+8”RuPŠģIŽŠxW #‚ĘIâ"’ėS§ŠWK’‚TS#‚ûS#‘ĀS§Š¨WJ‚ŲSS#‚ĪS#„ŽŠūŪŠ ג‚͈Ã#‡W…ŪŠ ;‚f…Ã#†ģIŪŠ #’‚ĘIÃ#ūKL㊠#‚dLÖ#‚ZL$“ķŠ+8”Ruc†ˆūŠj“ø͈udŸ‡W…ūŠ;øf…udŸ†ģIūŠ #0“øĘIudŸūKLĒ #‚dL$‚ZLC$“Ē+8”Ruc„Š/Ē„¤Š†„üŠŠ{ ƒ5ƒ5•Dđ Ēœ”™ĄT@Č´'‘ĄkôČ %‘—ĀW‰™Ĩ”dÉ\F‘P’čžsĒčWŅĔ‚ŸV$‚ŸŽ$‹čWŠ.Ÿ’AĒX y K”‚3Aā$‚)A8%„”ĒhÜĢ(ŧ”‚f…Å%’ģIÜĢX #ƒ”‚ĘIÅ%ŠKLßĢ0X #‚dLÚ%‚ZLī%“ķĢ+8”RvˆĒ’螥ĒHXҤ•‚Ÿ&‚ŸJ&‹HXŠ.Ÿ’A¯ĒhX y -•‚3A˜&‚)AĐ&„ŧĒhŦœ•øf…u’ģIŦ€X #c•øĘIuŠKLŦ˜X #‚dLü&‚ZL)'“Ŧ+8”RuWˆŦĒ’W…ŧǰXŅ–‚f…<'’ģIŧĒĐX #ã•‚ĘI<'ŠKLŋĒčX #‚dLZ'‚ZL|'“HĢ+8”RuW’W…ĪĒYŅ”–‚f…š'†ģIĪĒ #[–‚ĘIš'ŠKLÕĒ Y #‚dLŧ'‚ZLŪ'“WĢ+8”Rv’W…ŲĒ8YŅ —‚f…ü'†ģIŲĒ #Ķ–‚ĘIü'ŠKLßĒPY #‚dL(‚ZL@(“gĢ+8”Rv’W…ãĒhYŅ„—‚f…^(’ģIãĒˆY #K—‚ĘI^(ŠKLéǍY #‚dL€(‚ZLĸ(“-Ģ+8”Rv†W…tĢ#Ņü—‚f…Ā(†ģItĢ #ׂĘIĀ(ūKLzĢ #‚dLÕ(‚ZL)“†Ģ+8”RuW†W…—ĢŅt˜‚f…)†ģI—Ģ #;˜‚ĘI)ūKLĢ #‚dL*)‚ZLW)“ŠĢ+8”RuW†W…ŠĢŅė˜‚f…j)†ģIŠĢ #ŗ˜‚ĘIj)ūKL¯Ģ #‚dL)‚ZLŦ)“ģĢ+8”RuW†W…ģĢ!Ņd™‚f…ŋ)†ģIģĢ #+™‚ĘIŋ)ūKLÁĢ #‚dLÔ)‚ZL*“ÍĢ+8”RuWˆPĒ„sĒâo„ĄĒœ)„Ģčž„ĢŠ{ äחåĻ™č™ā5„MSŪ—Yå–—ŪT@å´'Ūkôå %âîäŽįH‘…”™ŗ-0ŦļœšüøĻ™‘ø°™‘øŊ™‘øʙ‘ —ĀYņŲ™*’T‰ŦčYėxš‚+Td*ŠĄI‰ŦčY ‚°Id*’‰^ŒŦZë„›˙ĸ^˙˜^‘ëÆŒŦZq˙Į’Į’Ŧ(Z5N›‚4Įē*˙*Į’­‚’ŦPZ ŧūš‚Á‚Ú*„Å­Œ$ŠąRŠŦpZ ŧ‚ĘR+‚ĀR#+€@­8‚ĘRA+‚ĀRU+„I­ņE†č‚ÁŦ 5x›‚ƒh+„ÉŦ›<„ÁŦš<’­PÎŦˆZ븛‚ÎP{+‚ÁPŗ+„ŲŦR$’­PŲŦ Zë뛂ÎPÜ+‚ÁP,„ëŦR$’­PëŦĀZėœ‚ÎP",‚ÁP{,†aOųŦ?œ‚lO™,„­ė{ —āZˇœ‚ÎPˇ,‚ÁPË,ЇP­øZ‚ PŪ,‚–Pō,žcPš­ ˜Ģœ‚zPŪ,‚nP-„§­™ũ„­R$’­P­[ėöœ‚ÎP-‚ÁPA-„%­R$’W…%­0[ėn‚f…_-’ģI%­P[ #5‚ĘI_-ŠKL.­h[ #‚dL›-‚ZL×-“¸­+8”Ruc†W…Į­ėæøf…udŸ†ģIĮ­ #­øĘIudŸūKLÍ­ #‚dLõ-‚ZL".“Ũ­+8”Ruc„‰Ŧ”“„æ­Š{ ĻčĨ#đ­œž= û5„8ū‘Ąĩ#CĻ‘’­PJŽ€['dž‚ÎP5.˙ÁP„bŽR$’­PbŽ˜[(”ž‚ÎP].˙ÁP„tŽR$’­PĘŽ°[)Ğ‚ÎPu.˙ÁP„âŽR$’­PâŽČ[*ôž‚ÎP.˙ÁP„ôŽR$’QöŽā[*$Ÿ‚4QĨ.˙*Q„˙Žč<’­P¯ø[*XŸ‚ÎPŅ.‚ÁPé.„¯R$’­P¯\+ŒŸ‚ÎPü.‚ÁP/„%¯R$’Q'¯0\+ŧŸ‚4Q'/˙*Q„2¯č<’­P2¯H\+đŸ‚ÎP>/‚ÁPV/„D¯R$„)ŽŝˆJŽˆ}Ž„•ŽŝˆĘŽˆM¯ˆb¯„j¯Š{ ˆw¯„¯Š{ ß*ĘL t ā5„t Ūō¸Oy âņlenS%đH–;÷= ũŲp"Dœš :ŖøL ‘øV ‘—`\%Ŗe i/’­P´"€\Pđ ‚ÎP|/˙ÁP„Ī"R$’­PĪ"˜\Q Ą‚ÎP´/˙ÁP„ã"R$’Yî"°\SxĄ‚œYĖ/ŠģIî"Č\ Û‚ĘIĖ/ŠĄIî"Č\ -‚°IĖ/’­P!#ā\V¨Ą‚ÎPā/˙ÁP„<#R$’~a<#ø\W0ĸ‚ąa0˙¤a†ÕI<# Ų %ĸ‚äI0ūģI<# Õ‚ĘI0ūĄI<# -‚°I0„N#R$’­PP#]Wdĸ‚ÎP-0‚ÁPE0„e#R$’~ae#8]Wėĸ‚ąad0˙¤a†ÕIe# Ų áĸ‚äId0ūģIe# Õ‚ĘId0ūĄIe# -‚°Id0„w#R$„–"ŝˆ´"ˆë"„#ģ€ ˆ!#ˆ#ˆ›#ˆŦ#„Ŗ#Š{ „´#Š{ ß°˜IŖdŖā5„*2âîōÂ<%÷:Ŗ ĪĀ#šœ€Ŗ<¤øIŖ‘—P]'¤UŖy0’­P$h]<ĐŖøÎPŌĒŸ˙ÁP„1$R$’­P1$€]<¤‚ÎP­0˙ÁP„H$R$„Ũ#ۀ ˆ$„V$=ˆ_$ˆq$„ë#÷€ „y$Š{ ߢK¤f¤ā5„*2âîōÂH%÷<¤´1€$Žœ‚¤4ĨøK¤‘—˜])ĨW¤Å0’­PŌ$¸]HŌ¤øÎPĢŸ˙ÁP„ę$R$’­Pę$Đ]HĨ‚ÎPî0˙ÁP„ü$R$„Ą$ ˆŌ$„%=ˆ%ˆ&%„.%Š{ ßC™CĨhĨā5„hĨāÖš%âîōÂy%2÷4Ĩ>0%Ļœ‰Ĩ;ĻøCĨ‘—č]0ρYĨ1’­Pz%^yŲĨøÎP8¸Ÿ˙ÁP„’%R$’­P’% ^y Ļ‚ÎP/1˙ÁP„¤%R$„L% ˆz%„­%=ˆļ%ˆÎ%„Ö%Š{ •cđā%+œÅŠIE %ĄS7)7‘Ą ā7 %‘ĸend7 %‘ĸv8&;‘ —8^°Š™öŋ9%G1’d÷%P^9ŲĻ‚,d~1‚,d~1’­P=&h^: §‚ÎPļ1˙ÁP„U&R$’­PU&€^;9§‚ÎPî1˙ÁP„g&R$’­Pt&˜^;m§‚ÎP2‚ÁP2„†&R$’­P‘&°^:Ą§‚ÎP12‚ÁPI2„Ŗ&R$Õ&Ns¨™ĮAC %\2‹Č^îåÕD%™âHE%“2’͍‚ÎP3˙ÁP„t'R$’­P'8_>Š‚ÎP03‚ÁPH3„“'R$’­P 'P_?;Š‚ÎP[3‚ÁPs3„˛'R$„&ŝˆ=&„r&=„‘&=ˆŦ&„Î&ŝˆJ'„'=„ž'=„Ŋ'=„Ė'­PˆÕ'ˆđ'ˆ(„ø'Š{ „ (Š{ üˇ"€¯1œŨŠLĒû5„AA‘ĄSŸ )7‘ū2ė–¯  ‚Qė†3øD둆d—¯ M@Ē˙,d˙,d„Ŧ¯;ĻüLŋ‰œdĒĢû5„ļH‘†]ėܯû‘Ē‚lėÎ3’Qaķ¯h_˙ģĒ‚`aí3‚`aí3—€_ Ģ˜i&'4’Qa°˜_ūĒ‚`a:4‚`a:4„/°ÅŠ„ī¯;Ļ„ °;ĻßmĘ-Ģ8Ģā5„t ÷ĢÚ#(­œTĢîĢø-Ģ‘’­PT(Ā_aĢ‚ÎPP4˙ÁP„k(R$’­Pk(Ø_bŊĢ‚ÎPx4˙ÁP„‚(R$„6(ŝˆT(ˆŠ(„˜(U€ ˆĩ(„Ŋ(Š{ üSĘP°‘œŦŅŽû5„t ‘—đ_˛ŽĨÁr Į?‘@Ĩ:Ëv C@‘¸™”Āz %4İŦ™L3‚ C@Ž4„ą/ „!ąN „4ąU€ ’­P’ą`o ŊŦ‚ÎPÁ4˙ÁP„ĒąR$’­PĒą0`p íŦ‚ÎPé4˙ÁP„ŧąR$†­Pöą} ­‚ÎP5˙ÁP„˛R$’~a`˛H`“ Š­‚ąa)5‚¤a>5†ÕI`˛ Ų ž­‚äI)5ūģI`˛ Õ‚ĘI)5ūĄI`˛ -‚°I)5„p˛R$’~a˛h`“ 5Ž‚ąaQ5‚¤af5†ÕI˛ Ų *Ž‚äIQ5ūģI˛ Õ‚ĘIQ5ūĄI˛ -‚°IQ5„˛R$„v°ŝ„š°x „\ઁ ˆ’ąˆÅą„Öąļ ˆöą„˛­Pˆ"˛ˆL˛„`˛­P„˛­Pˆ—˛ˆ¯˛ˆIJˆŲ˛„ˇ˛Š{ „˞Š{ „ᲊ{ ßCÆāޝā5„ŊūāÖš%âîōÂÎ%…ŅŽŅkĀ(}œ!¯´øāŽ‘†ĶėŪ(ĘJ¯‚Ūėy5—€`寁öŽŒ5’­P)˜`Îޝ‚ÎPĩ5˙ÁP„5)R$’­P5)¸`Ξ¯‚ÎPŨ5˙ÁP„L)R$„ū(ˁ ˆ)„Z)=ˆb)ˆŪ)†:e)aĪëą‚:õ5†ŠÉn)H¨8ą‚ŋÉ 6‚ŗÉ%6‚§É86‡[Én)H—‚{É%6‚oÉ86€n)H‡$:n)H~‚D:%6‚8:K6‘:Éx)Đ`g‚NÉv6‘ƒ‡x)Đ`]‚•‡v6ŠW…x)Đ`Ō‚f…Ž6’KLx)đ` #ą‚dLę6‚ZL 7“Ĩ)+8”RuPūģI) #‚ĘIŽ6ūäÉļ)Š‚ķÉ*7‡߯ļ) ˙°B7‚ø¯d7€ļ)‡ǝē) ˛˙ĩ¯‚ͯw7‚Á¯™7‡¯ē) Mš˙ޝ‚¤¯w7‚˜¯™7„Ã)”{ †:ä)YĪíŗ‚:Ŧ7†ŠÉí)5¨<ŗ‚ŋÉÄ7‚ŗÉÜ7‚§Éī7‡[Éí)5—‚{ÉÜ7‚oÉī7€í)5‡$:í)5~‚D:Ü7ø8:W‡:Éņ)$g‚NÉ8‡ƒ‡ņ)$]‚•‡8ūW…ņ)$Ō‚f…"8’KLņ)a #ŗ‚dLD8‚ZLY8“*+8”RuPūģIũ) #‚ĘI"8ūäÉ"*Š‚ķÉl8‡߯"* ˙°„8øø¯V€"*‡ǝ&*˛˙ĩ¯‚ͯĻ8‚Á¯Č8‡¯&*Mš˙ޝ‚¤¯Ļ8‚˜¯Č8„/*”{ „Ū(⁠„=*Š{ ßÁ´6´ā5„@ęāÖš%âîōÂÎ%…´ŦS@*ÆœR´.ĩø´‘†Ķė^*Ę{´‚ŪėÛ8—(aĩ'´î8’­PĒ*HaδøÎPŠĢŸ˙ÁP„Â*R$’­PÂ*`aÎō´‚ÎP9˙ÁP„Ô*R$„{*ˁ ˆĒ*„Ũ*=ˆæ*ˆū*„^*⁠„+Š{ •đ+œÖļ‚ %ĸstręÖļ‘ĄųęÆ:‘—xaËļ¤endķČ*‘X, ˙f%™RÆĸĩ/9…ĩ™å%‡9™ã; %ŗ9†6T$+î=ļ‚ETį9ūÕI$+ 6‚äIį9ūģI$+ Õ‚ĘIį9ūĄI$+ -‚°Iį9†čí4+î]ļ‚ķí:†­Pæ+ļøÎPŧšŸ˙ÁP„ũ+R$„D+Ž~ „\+>„~+ŝ„Ē+ŝˆæ+ˆ,ˆ",„*,Š{ ô1ßâĪęļˇā5„øÉëfd %âî>ˇ*‹ōîéQ,%•ˇđđ˛âœēĸfd{ %‘ĄWT{´'‘Ą‡ {!Ę‘†­P.ŗ}‘ˇ‚ÎP':˙ÁP„FŗR$’­PIŗa}_¸‚ÎPO:˙ÁP†aOQŗ ⎂lOm:„Zŗė{ —¨aT¸‚ÎP€:˙ÁPЇPeŗĀa‚ P”:‚–P¨:žcP‚´ ˜H¸‚zP”:‚nPģ:„´™ũ„eŗR$†­Phŗ~¸‚ÎPĪ:˙ÁP„zŗR$’Ûļ’ŗāa€Dē‚ôļį:‚ęļ;†t‰ĸŗ š‚ƒ‰;;ū4‰ĸŗ ŧ˙Z‰˙M‰‚C‰;;—bĀšŸˇ‘Dˇm;’^ęŗb-—š‚,^€;‚"^ĸ;Šã¤ęŗb 3‚ü¤€;‚ō¤ĸ;’aOęŗ8b }‹š‚lO€;„3´O„čŗø „?´w} „I´:€ „Q´U€ †W…Ģ´9ēøf…vŸ†ģIĢ´ #˙šøĘIvŸūKLą´ #ødLuLŸ‚ZLĮ;“Á´+8”RuD„Ÿŗ‚ ˆ.ŗˆƒŗ„ŗ%| ˆĄ´„Š´Š{ „Ę´”{ „Ō´Š{ •×đā´)œžē„ĩˇ•äđĩ)œŊē„4ĩˇß ĘĖēáēā5„t āÖš%÷ŊēŖc0,%œũē‡ŊøĖē‘’ĢX,XbKŦģ‚-ĢÚ;’­P€,pbaUģ‚ÎPú;˙ÁP„—,R$’­P—,bb…ģ‚ÎP2<˙ÁP„Ž,R$„b,ŝˆ€,ˆļ,„Ä,U€ ˆ-’W…Î,¨bI$ŧ‚f…J<’ģIÎ,Āb #ëģ‚ĘIJ<ŠKLŅ,Øb #‚dLĸ<‚ZLë<“-+8”Rud’W…Ū,øbIœŧ‚f… =†ģIŪ, #cŧ‚ĘI =ŠKLä,c #‚dLQ=‚ZL=“ø,+8”Rud†W… -I Ŋ˙f…’ģI -(c #Ķŧ˙ĘIŠKL#-@c #‚dL =‚ZLÍ=“8-+8”Ruc†W…8-I|Ŋ˙f…†ģI8- #CŊ˙ĘIūKL>- #‚dLā=‚ZL >“J-+8”Ruc„U-Š{ ÷ŊēÜ`-5œŖŊcĀøĖē‘’Ŋēw-XcLNĀ‚Ėē >’Ģˆ-pcKqž‚-Ģ>>’­P°-ˆcaž‚ÎP\>˙ÁP„Į-R$’­PĮ-¨cbJž‚ÎP”>˙ÁP„Ū-R$„’-ŝˆ°-ˆæ-„ô-U€ ˆ].’W…ū-ĀcIéž‚f…Ŧ>’ģIū-Øc #°ž‚ĘIŦ>ŠKL.đc #‚dLÎ>‚ZLũ>“H.+8”Rud’W….dIaŋ‚f…?†ģI. #(ŋ‚ĘI?ŠKL.(d #‚dL=?‚ZLl?“8.+8”Rud†W…`.IŲŋøf…v Ÿ’ģI`.@d # ŋøĘIv ŸŠKLc.Xd #‚dLŠ?‚ZLˇ?“x.+8”RucūW…x.Iøf…vŸ†ģIx. #ĀøĘIvŸūKL~. #‚dLĘ?‚ZL÷?“Š.+8”Ruc„!.”{ „•.Š{ ß,™rĀĀā5„hĨâîōÂu%äDžŸĀĒĀā5„›V÷Ā^0@ĩôœÆĀBÂøŸĀ‘’cĀWĩpd ‰Á‚rĀ @‹ˆd~Ā@@’­PŌĩ du1ÁøÎPēŸ˙ÁP„éĩR$’­Péĩ¸duaÁ‚ÎPt@˙ÁP„ļR$„_ĩ$‚ ˆŌĩ„ļ=ˆļˆ,ļ†Įęlĩ āÁ‚ÖęŒ@ūCŸlĩ‚RŸŒ@‡$Ÿlĩ}‚3ŸŒ@†áęĩ 7‚đęÁ@ūÖĄĩ‚åĄÁ@‡ˇĄĩ}‚ÆĄÁ@„4ļŠ{ ÷Åë-÷ .ļœ^Â,Ãø×ë‘’4ĨŊ.Đd¸!ÂCĨö@‹ĐdYĨNA’­Pú.ødyÉÂøÎP8¸Ÿ˙ÁP„/R$’­P/eyų‚ÎPwA˙ÁP„$/R$„Ė. ˆú.„-/=ˆ6/ˆN/„V/Š{ ÷Åëū2`/ÉœHÃ<Äø×ë‘’Åëw/(e¸'Ä‚×ëAŠ4Ĩ‚/@e¸‚CĨšA‹@eYĨB’­PĘ/XeyÎÃøÎP8¸Ÿ˙ÁP„á/R$’­Pá/peyūÂÎP7B˙ÁP„ø/R$„‹/ ˆĘ/„0=ˆ0ˆ!0„/”{ „)0Š{ ä0Í.NÄcÄā5„\‡āÖš%ß%ČrĈÄā5„—lëp‹–B…<ÄŨŒ00œ¤ÄŅĮøNÄ‘’slR0ˆe.ÆĮ‚‚lOBŠcÄR0ˆe|Ä‚rÄOB’ŊēŽ0 eŽēĮ‚Ėē„B’ŊēŽ0¸eL¯Į‚Ėē„B’ĢŸ0ĐeKŌÅ‚-ĢĸB’­PĮ0čea{Å‚ÎPĀB˙ÁP„Ū0R$’­PŪ0fbĢÅ‚ÎPøB˙ÁP„õ0R$„Š0ŝˆĮ0ˆũ0„ 1U€ ˆ…1’W…1 fIJÆ‚f…C’ģI18f #Æ‚ĘICŠKL1Pf #‚dL2C‚ZLTC“p1+8”Rud’W…%1pfIÂÆ‚f…rC†ģI%1 #‰Æ‚ĘIrCŠKL+1ˆf #‚dL”C‚ZLļC“`1+8”Rud†W…ˆ1I:Įøf…v Ÿ’ģIˆ1 f #ĮøĘIv ŸŠKL‹1¸f #‚dLÔC‚ZLD“ 1+8”RucūW… 1Iøf…vŸ†ģI 1 #uĮøĘIvŸūKLĻ1 #‚dLD‚ZLAD“˛1+8”Ruc„81”{ „g0ŝ„Ŋ1Š{ üÁģ@ļ œéĮčČû5„ļH‘’¨ę|ļĐfęÉČ‚ˇęTDŠc‡ļøfē‚rĀˆD‹ g~ĀĪD’­PÚļ@gupČ‚ÎPE˙ÁP„ņļR$’­Pņļ`gu Č‚ÎP6E˙ÁP„ˇR$„”ļ$‚ ˆÚ=ˆˇˆGˇ„zļ%| „2ˇ”{ „:ˇŠ{ ßuÉ÷ČÉā5„ĪXŪō¸<É–;÷čČ'ËĀ1åœ0ÉÎÍø÷Č‘øÉ‘’čžÆ1xg=*ĘøŸS­Ÿ‚ŸNE‹xgŠ.Ÿ†Aë1$ y ąÉø3AS­Ÿ‚)AžE„ũ1h}3"Ę‚f…-F†ģI}3 #éÉ‚ĘI-FūKLƒ3 #‚dLBF‚ZLoF““3+8”Rudˆë1’= 2 g=ÉĖ‚V ‚F‚L ÖF‹ ge G’­PB2ĀgP“Ę‚ÎP*G˙ÁP„Z2R$’­PZ2āgQÃĘ‚ÎPbG˙ÁP„l2R$’Yx2øgSË‚œYzGūģIx2 Û‚ĘIzGūĄIx2 -‚°IzG’­PŦ2hVKË‚ÎPŠG˙ÁP„Ä2R$’~aÄ20hWĶË‚ąaáG˙¤a†ÕIÄ2 Ų ČË‚äIáGūģIÄ2 Õ‚ĘIáGūĄIÄ2 -‚°IáG„Ô2R$’­PÖ2PhWĖ‚ÎPöG‚ÁPH„č2R$’~ač2phWĖ‚ąa!H˙¤a†ÕIč2 Ų „Ė‚äI!HūģIč2 Õ‚ĘI!HūĄIč2 -‚°I!H„ø2R$„!2ŝˆB2ˆu2„‹2ģ€ ˆŦ2ˆ3ˆS3ˆ 3’W…3ˆh=AÍ‚f…6H†ģI3 #Í‚ĘI6HŠKL 3 h #‚dLrH‚ZLŽH“83+8”Rud†W…V3'=šÍ‚f…ĖH†ģIV3 #€Í‚ĘIĖHūKL\3! #‚dLáH‚ZLI“l3+8”Ru[š*3uT„u3Š{ üÍ˰3ęœæÍŅû5„\‡‘ĄšÕŅ‘†\Į3‘[΂\!IūTĮ3‚+TeIūĄIĮ3 ‚°IeI’čžŪ3¸h‘ö΂ŸŊI‚ŸæI‹¸hŠ.Ÿ’Aę3Đh y î΂3ARJ‚)ApJ†aOę3 ã΂lORJ„ō3ė{ „ũ3hˆę3’5‡ū3čh‘*Ī‚N‡ōJ‚D‡DK„ 4čČ’W… 4i‘ĸĪ‚f…‡K’ģI 4(i #iĪ‚ĘI‡KŠKL4@i #‚dLŲK‚ZLL“84+8”Ru_’W…4`i‘Đ‚f…CL’ģI4xi #áĪ‚ĘICLŠKL$4i #‚dLeL‚ZL…L“O4+8”Rv†W…g4‘’Đ‚f…ŖL’ģIg4¨i #YĐ‚ĘIŖLŠKLj4Āi #‚dL¸L‚ZLåL“4+8”Ru_†W…4‘ Ņøf…u`Ÿ†ģI4 #ŅĐøĘIu`ŸūKL…4 #‚dLøL‚ZL%M“‘4+8”Ru_ˆŪ3„š4Š{ uHúHË 4œ8ŅØĶû5„\‡‘ĄãĨ|ØĶ‘’މĻ4Øi…Ņ‚§‰8M‚‰KMˆä4’5‡÷4đišŅ‚N‡M‚D‡ŨM„5čČ’W…5j1Ō‚f…*N’ģI5(j #øŅ‚ĘI*NŠKL5@j #‚dLbN‚ZL‘N“H5+8”Ru_’W…5`jŠŌ‚f…ŋN’ģI5xj #pŌ‚ĘIŋNŠKL5j #‚dLáN‚ZLO“_5+8”Rv†ƅ#5‚ÉŌ‚ՅO†W…p5AĶ‚f…TO’ģIp5¨j #Ķ‚ĘITOŠKLs5Āj #‚dLiO‚ZL–O“‹5+8”Ru_†W…‹5šĶøf…u`Ÿ†ģI‹5 #€ĶøĘIu`ŸūKL‘5 #‚dLŠO‚ZLÖO“ž5+8”Ru_„Â4W„÷4 ø„§5Š{ ]Hüq˰5]œõĶ~Ūû5„\‡‘Ą°MĨ~Ū‘—ØjsŪ™”dĻ´'éO†Đ^Í5ĻŧÔ‚ß^P‡6TÍ5M‚ETmPūÕIÍ5 6‚äImPūģIÍ5 Õ‚ĘImPūĄIÍ5 -‚°ImP’čž#6øjŠžÕ‚ŸâP‚Ÿ*Q‹øjŠ.Ÿ’A/6k y %Õ‚3AąQ‚)A R„A6hØ85–Õ‚f…˛R’ģIØ88k #]Õ‚ĘI˛RŠKLÛ8Pk #‚dLĮR‚ZLôR“ô8+8”Rudˆ/6’čžQ6hkĒ€Ö‚ŸS‚ŸOS‹hkŠ.Ÿ’A]6ˆk y Ö‚3AíS‚)A5T„o6hŒ8LxÖ‚f…ĪT’ģIŒ8¨k #?Ö‚ĘIĪTŠKL8Āk #‚dLäT‚ZLU“¨8+8”Rudˆ]6’5‡6ØkĢ´Ö‚N‡$U‚D‡›U„6čČ’W…6đkĢ,ׂf…ëU’ģI6l #ķÖ‚ĘIëUŠKL6(l #‚dL=V‚ZL{V“7+8”RuC’W… 6HlǤׂf…ŠV’ģI 6`l #kׂĘIŠVŠKLĻ6xl #‚dLËV‚ZLëV“/7+8”Rw’W…Ē6lĒØ‚f… W’ģIĒ6¨l #ãׂĘI WŠKL°6Āl #‚dL+W‚ZLMW“G7+8”Rw’W…¸6ØlŠ”Ø‚f…kW’ģI¸6đl #[Ø‚ĘIkWŠKLž6m #‚dLW‚ZL¯W“_7+8”Rw’W…Æ6 mŠ Ų‚f…ÍW’ģIÆ68m #ĶØ‚ĘIÍWŠKLĖ6Pm #‚dLīW‚ZLX“w7+8”Rw’W…Ô6hmЄ؂f…/X’ģIÔ6€m #KŲ‚ĘI/XŠKLÚ6˜m #‚dLQX‚ZLsX“7+8”Rw’W…â6°mĒüŲ‚f…‘X’ģIâ6Čm #ÃŲ‚ĘI‘XŠKLč6ām #‚dLŗX‚ZLÕX“§7+8”Rw’W…đ6ømĢtÚ‚f…ķX’ģIđ6n #;Ú‚ĘIķXŠKLö6(n #‚dLY‚ZL7Y“ŋ7+8”Rw†W…Ū7ĢėÚ‚f…UY’ģIŪ7@n #ŗÚ‚ĘIUYŠKLá7Xn #‚dLjY‚ZL—Y“ö7+8”RuC†W…ö7ĒdÛ‚f…ĒY†ģIö7 #+Û‚ĘIĒYūKLü7 #‚dLŋY‚ZLėY“8+8”RuC†W…8ĒÜÛ‚f…˙Y†ģI8 #ŖÛ‚ĘI˙YūKL8 #‚dLZ‚ZLAZ“8+8”RuC†W…8ŠTÜ‚f…TZ†ģI8 #Ü‚ĘITZūKL 8 #‚dLiZ‚ZL–Z“,8+8”RuC†W…,8ŠĖÜ‚f…ŠZ†ģI,8 #“Ü‚ĘIŠZūKL28 #‚dLžZ‚ZLëZ“>8+8”RuC†W…>8ŠDŨ‚f…ūZ†ģI>8 # Ũ‚ĘIūZūKLD8 #‚dL[‚ZL@[“P8+8”RuC†W…P8ĒŧŨ‚f…S[†ģIP8 #ƒŨ‚ĘIS[ūKLV8 #‚dLh[‚ZL•[“b8+8”RuC†W…b8*Ģ6Ū‚f…¨[†ģIb8 #ûŨ‚ĘI¨[ūKLh8$ #‚dLŊ[‚ZLŌ[“t8+8”RuŦ„į5%„˙5âo„6%„#6 ø„Q6œ)„6œ)„}8Š{ ¸8…<ÄUČ9§œŸŪōáøNÄ‘’<Ä'9pn.Ũá‚NÄå[Šsl-9ˆn.‚‚l&\ŠcÄ-9ˆn|Ä‚rÄ&\’Ŋēn9¨nŽĐá‚Ėēu\’Ŋēn9ĀnLÅá‚Ėēu\’Ģ9ØnKčß‚-Ģ“\’­PĒ9đna‘ß‚ÎPą\˙ÁP„Á9R$’­PÁ9obÁß‚ÎPé\˙ÁP„Ø9R$„‰9ŝˆĒ9ˆá9„ī9U€ ˆ}:’W…ų9(oI`ā‚f…]’ģIų9@o #'ā‚ĘI]ŠKLü9Xo #‚dL#]‚ZLE]“h:+8”Rud’W… :xoIØā‚f…c]†ģI : #Ÿā‚ĘIc]ŠKL:o #‚dL…]‚ZL§]“X:+8”Rud†W…€:IPáøf…w Ÿ’ģI€:¨o #áøĘIw ŸŠKLƒ:Āo #‚dLÅ]‚ZLō]“›:+8”RucūW…›:Iøf…wŸ†ģI›: #‹áøĘIwŸūKLĄ: #‚dL^‚ZL2^“Ž:+8”Ruc„ :”{ „G9ŝ„,:”{ „ˇ:Š{ üˏPˇKœ âäû5„ļH‘Ą¤ö˛p@‘—Øoä™ēšŗņđE^’Wégˇøoŗ0ã‚pé¯^øféō1âŠ:Ŗgˇøo†‚IŖ¯^—p$ãUŖ _’­Pʡ8p<Íâ‚ÎPe_˙ÁP„âˇR$’­PâˇPp<ũâ‚ÎP_˙ÁP„ôˇR$„sˇۀ ˆʡ„˙ˇ=ˆ¸ˆ~¸„‚ˇ÷€ Šƒéˆˇhp´‚’éĨ_Š<¤ˆˇhpˆ‚K¤Ũ_‹pW¤!`’­P*¸¸pHĻã‚ÎPU`˙ÁP„B¸R$’­PB¸ĐpHÖã‚ÎP}`˙ÁP„T¸R$„šˇ ˆ*¸„]¸=ˆf¸ˆ“¸„†¸Š{ „›¸Š{ ü­¸ ¸Nœ-ä(æû5„ļH‘—čpæ™ēšŦņđ•`’W顸qŦCå‚pé˙`øféōDäŠ:Ŗˇ¸q†‚IŖ˙`—0q7åUŖ[a’­PšPq<āä‚ÎPa˙ÁP„2šR$’­P2šhq<å‚ÎPÅa˙ÁP„DšR$„øۀ ˆš„Oš=ˆXšˆŅš„Ō¸÷€ Šƒéظ€q­‚’éŨaŠ<¤ظ€qˆ‚K¤b‹°qW¤Yb’­PzščqHšå‚ÎP˜b˙ÁP„’šR$’­P’šrHéå‚ÎPĀb˙ÁP„¤šR$„긁 ˆzš„­š=ˆļšˆæš„ŲšŠ{ „{ úqÚđš,œ@æhæû5„V‘Ąã;Ĩhæ‘„ ēä¸8ü‰% ē^œ…æ€čû5„¨W‘—rkč™ēšnņđØb’Wé7ē@rn›į‚péBcøféōœæŠ:Ŗ7ē@r†‚IŖBc—`rįUŖžc’­Pĸē€r<8į‚ÎPāc˙ÁP„ēēR$’­Pēē˜r<hį‚ÎPd˙ÁP„ĖēR$„Cēۀ ˆĸē„×ē=ˆāēˆaģ„Rē÷€ ŠƒéXē°ro‚’é dŠ<¤Xē°rˆ‚K¤Xd‹ØrW¤œd’­P ģsHč‚ÎPÛd˙ÁP„"ģR$’­P"ģ sHAč‚ÎPe˙ÁP„4ģR$„pē ˆ ģ„=ģ=ˆFģˆvģ„iģŠ{ „~ģŠ{ üj%€ģ^œ˜č“ęû5„¨W‘—8s~ę™ēšfņđe’Wé—ģ`sfŽé‚pé…eøféō¯čŠ:Ŗ—ģ`s†‚IŖ…e—€sĸéUŖáe’­Pŧ s<Ké‚ÎP#f˙ÁP„ŧR$’­Pŧ¸s<{é‚ÎPKf˙ÁP„,ŧR$„Ŗģۀ ˆŧ„7ŧ=ˆ@ŧˆÁŧ„˛ģ÷€ Šƒé¸ģĐsg‚’écfŠ<¤¸ģĐsˆ‚K¤›f‹øsW¤ßf’­Pjŧ(tH$ę‚ÎPg˙ÁP„‚ŧR$’­P‚ŧ@tHTę‚ÎPFg˙ÁP„”ŧR$„Đģ ˆjŧ„ŧ=ˆĻŧˆÖŧ„ÉŧŠ{ „ŪŧŠ{ ߃ƒĸęˇęā5„÷ŖāÖš%ßpyÆęÛęā5„dĄāÖš%ä[¤íęëā5„›VāÖš%÷ÛęnYāŧŪœëHņøíꑆ“ęôŧ‚¤ší‚ĸę^g†RŖŊf¨į낇Ŗvg‚{ŖŽg‚oŖ­g‡#ŖŊf—˙CŖ˙7Ŗ€Ŋf‡öĸŊf~˙Ŗ‚ ŖĀg‘ÕĸŊXtg‚éĸëg‘L`ŊXt]‚^`ëg’W…ŊxtĪlė‚f…#h’KLŊt #Oė‚dL_h‚ZLh“;Ŋ+8”RuPūģI)Ŋ #‚ĘI#hŠW…Ŋ¨tĪ‚f…¯h’ģIŊČt #§ė‚ĘI¯hŠKLŊāt #‚dLįh‚ZL i“SŊ+8”RuPūŦŖfŊŠ‚ģŖ'i‡UĸfŊ ˙dĸ‚zĸ?i‚nĸai€fŊ‡ ĸjŊ ˛˙+ĸ‚Cĸti‚7ĸ–i‡õĄjŊ Mš˙ĸ‚ĸti‚ĸ–i„sŊ”{ †ˇęvŊ°¤ƒđ‚ÆęŠi†ŋ ‚Ŋ”¨Đī‚ô Ái‚č Ųi‚Ü øi‡ ‚Ŋ”—˙° ˙¤ €‚Ŋ”‡c ‚Ŋ”~˙ƒ ‚w  j‘B ŠŊug‚V 6j‘ą]ŠŊu]‚Â]6j‰W…ŠŊ u/Ūî‚f…nj’KLŠŊ8u #Áî‚dLĒj‚ZLĖj“ÎŊ+8”RuPūģIŧŊ #‚ĘInj‰W… ŊPu/Vī‚f…új’ģI Ŋhu #ī‚ĘIújŠKLĻŊ€u #‚dLk‚ZL>k“čŊ+8”RuP‘W…ĒŊ˜u/‚f…\k’ģIĒŊ¸u #ī‚ĘI\kŠKL°ŊĐu #‚dL~k‚ZL k“ž+8”RuPūĄžŠ‚(Ąžk‡Ÿž ˙ҟ‚įŸÖk‚۟øk€ž‡Ÿž ˛˙˜Ÿ‚°Ÿ l‚¤Ÿ-l‡bŸž Mš˙qŸ‚‡Ÿ l‚{Ÿ-l„#ž”{ ’4Ĩ&žđu¤=ņ‚CĨ@l‹đuYĨ`l’­PbžvyåđøÎP8¸Ÿ˙ÁP„zžR$’­Pzž(vyņ‚ÎP‰l˙ÁP„ŒžR$„1ž ˆbž„•ž=ˆžžˆļž„žžŠ{ üËĀ:-œ`ņe÷û5„\‡‘ũe÷‘’5‡č:@vydö‚N‡Ąl‚D‡ m’ƅč:hv°ŋņ‚ՅQmŠčČë:€v°‚ÉŠm‚÷Čn’čžë:°v=ÉōøŸS­Ÿ‚ŸŠm‹°vŠ.Ÿ’A;Đv y Pō‚3A_n‚)A—n„;hÃ<Áō‚f…(o’ģIÃ<čv #ˆō‚ĘI(oŠKLÆ<w #‚dL=o‚ZLjo“Û<+8”Rudˆ;’= &;w=hõ‚V }o‚L Äo‹we øo’­PY;8wP2ķ‚ÎP p˙ÁP„q;R$’­Pq;XwQbķ‚ÎP3p˙ÁP„ƒ;R$’Y;pwSēķ‚œYKpūģI; Û‚ĘIKpūĄI; -‚°IKp’­PÃ;ˆwVęķ‚ÎPzp˙ÁP„Û;R$’~aÛ;¨wWrô‚ąa˛p˙¤a†ÕIÛ; Ų gô‚äI˛pūģIÛ; Õ‚ĘI˛pūĄIÛ; -‚°I˛p„ë;R$’­Pí;ČwWĻô‚ÎPĮp‚ÁPßp„˙;R$’~a˙;čwW.õ‚ąaōp˙¤a†ÕI˙; Ų #õ‚äIōpūģI˙; Õ‚ĘIōpūĄI˙; -‚°Iōp„<R$„8;ŝˆY;ˆŒ;„ĸ;ģ€ ˆÃ;ˆ<ˆ<ˆč<’W…<x=āõ‚f…q’ģI<x #§õ‚ĘIqŠKL<0x #‚dLPq‚ZL™q“h<+8”Rud†W…<=Xö‚f…ˇq’ģI<Px #ö‚ĘIˇqŠKL“<hx #‚dLĖq‚ZLųq“¨<+8”RuWšJ<uD’W…+<€xyÜö‚f… r†ģI+< #Ŗö‚ĘI rŠKL1<˜x #‚dLHr‚ZL„r“X<+8”Rud†W…¨<yT÷‚f…ĸr†ģI¨< #÷‚ĘIĸrūKLŽ< #‚dLˇr‚ZLär“ē<+8”RuWˆč:„Ã<Š{ ]HüqËđ<†œ‚÷’ūû5„\‡‘ũ’ū‘ĄjÂ… %‘’5‡$=°x‡“ü‚N‡÷r‚D‡}s†ƅ$=°ņ÷‚ՅÍsŠčČ*=āx°‚É5t‚÷Čģt’čž/=y=øø‚Ÿu‚Ÿ5t‹yŠ.Ÿ’A>=0y y ø‚3A=u‚)A…u„P=hā>đø‚f…#v’ģIā>Hy #ˇø‚ĘI#vŠKLã>`y #‚dL8v‚ZLev“ø>+8”Rudˆ>=’= b=xy=—û‚V xv‚L ŋv‹xye ķv’­P•=˜yPaų‚ÎPw˙ÁP„­=R$’­P­=¸yQ‘ų‚ÎP>w˙ÁP„ŋ=R$’YË=ĐySéų‚œYVwūģIË= Û‚ĘIVwūĄIË= -‚°IVw’­P˙=čyVú‚ÎP…w˙ÁP„>R$’~a>zWĄú‚ąaŊw˙¤a†ÕI> Ų –ú‚äIŊwūģI> Õ‚ĘIŊwūĄI> -‚°IŊw„'>R$’­P)>(zWÕú‚ÎPŌw‚ÁPęw„;>R$’~a;>HzW]û‚ąaũw˙¤a†ÕI;> Ų Rû‚äIũwūģI;> Õ‚ĘIũwūĄI;> -‚°Iũw„K>R$„t=ŝˆ•=ˆČ=„Ū=ģ€ ˆ˙=ˆT>ˆ0?ˆq?’W…W>`z=ü‚f…x’ģIW>xz #Öû‚ĘIxŠKLZ>z #‚dL[x‚ZL¤x“¸>+8”Rud†W…3?3=‡ü‚f…Ōx’ģI3?°z #Nü‚ĘIŌxŠKL6?Čz #‚dLįx‚ZLy“K?+8”RuSš’>uD’W…g>āz† ũ‚f…'y’ģIg>øz #Ōü‚ĘI'yŠKLm>{ #‚dLIy‚ZLky“Đ>+8”Rud’W…q>({†ƒũ‚f…‰y†ģIq> #Jũ‚ĘI‰yŠKLw>@{ #‚dLÅy‚ZLz“ >+8”Rud†W…ø>†ûũ‚f…z†ģIø> #Âũ‚ĘIzūKLū> #‚dL4z‚ZLaz“ ?+8”RuS†W… ?†sū‚f…tz†ģI ? #:ū‚ĘItzūKL? #‚dL‰z‚ZLļz“?+8”RuS„=âo„$= ø„%?Š{ ]HüĖ€?ˇœ¯ū û5„\‡‘Ąņ𠑆aZ—?›$˙‚pZÉzūT—?w‚+T{ūĄI—? ‚°I{’螎?X{›0‚Ÿ{‚Ÿĩ{‹X{Š.Ÿ’Aē?x{ y ˇ˙‚3A!|‚)AJ|†aOē? Ŧ˙‚lO!|„Â?ė{ „Í?hųA(‚f…č|’ģIųA{ #ī˙‚ĘIč|ŠKLüA¨{ #‚dLũ|‚ZL*}“B+8”Rudˆē?’5‡Í?Ā{›‚N‡=}‚D‡Ũ}’ƅÍ?|°y‚Յ ~ŠčČÕ?|°‚Éu~‚÷Č’čžÚ?P|=€‚Ÿu‚ŸÍ‹P|Š.Ÿ’Aį?p| y ‚3AV€‚)Až€„ų?h×A"x‚f…v’ģI×Aˆ| #?‚ĘIvŠKLÚA | #‚dL‹‚ZL¸“īA+8”Rudˆį?’=  @¸|=‚V ˁ‚L ‚‹¸|e ^‚’­P>@Ø|Pé‚ÎPq‚˙ÁP„V@R$’­PV@ø|Q‚ÎPŠ‚˙ÁP„h@R$’Yt@}Sq‚œYÁ‚ūģIt@ Û‚ĘIÁ‚ūĄIt@ -‚°IÁ‚’­P¨@(}VĄ‚ÎPđ‚˙ÁP„Ā@R$’~aĀ@H}W)‚ąa(ƒ˙¤a†ÕIĀ@ Ų ‚äI(ƒūģIĀ@ Õ‚ĘI(ƒūĄIĀ@ -‚°I(ƒ„Đ@R$’­PŌ@h}W]‚ÎP=ƒ‚ÁPUƒ„ä@R$’~aä@ˆ}Wå‚ąahƒ˙¤a†ÕIä@ Ų Ú‚äIhƒūģIä@ Õ‚ĘIhƒūĄIä@ -‚°Ihƒ„ô@R$„@ŝˆ>@ˆq@„‡@ģ€ ˆ¨@ˆũ@ˆAˆB’W…A }=—‚f…}ƒ’ģIA¸} #^‚ĘI}ƒŠKLAĐ} #‚dLƃ‚ZL„“XA+8”Rud†W…’A=‚f…=„’ģI’Ađ} #Ö‚ĘI=„ŠKL•A~ #‚dLR„‚ZL„“ĒA+8”RuSš:AuD’W…A ~›“‚f…’„’ģIA8~ #Z‚ĘI’„ŠKLAP~ #‚dL´„‚ZLք“pA+8”Rud’W…Ah~› ‚f…ô„†ģIA #Ō‚ĘIô„ŠKL A€~ #‚dL0…‚ZLl…“HA+8”Rud†W…ĒA›ƒ‚f…Š…†ģIĒA #J‚ĘIŠ…ūKL°A #‚dLŸ…‚ZLĖ…“ŧA+8”RuS†W…ŧA›û‚f…߅†ģIŧA #‚ĘI߅ūKLÂA #‚dLô…‚ZL!†“ÎA+8”RuSˆŽ?„×AŠ{ 1:•ũđĀžyœŅ ĄT@Û´'‘ĄkôÛ %‘—˜~Æ Ĩ”dÜ\F‘T†čžŋ&áÔ‚Ÿ4†‚Ÿl†€ŋ&Š.Ÿ’AŋĀ~ y Ė‚3A§†‚)A1ŋhˆŋ’W…>ŋØ~áL‚f…4‡’ģI>ŋø~ #‚ĘI4‡ŠKLAŋ #‚dLT‡‚ZLv‡“ģŋ+8”Ru[’W…Qŋ0áÅ‚f…”‡†ģIQŋ #‹‚ĘI”‡ŠKLWŋH #‚dLZL؇“Ëŋ+8”RuT’W…[ŋ`á= ‚f…ö‡’ģI[ŋ€ # ‚ĘIö‡ŠKLaŋ  #‚dLˆ‚ZL:ˆ“žŋ+8”Rw†W…Øŋáĩ ‚f…Xˆ†ģIØŋ #| ‚ĘIXˆūKLŪŋ #‚dLmˆ‚ZLšˆ“ęŋ+8”Ru[†W…õŋá- ‚f…­ˆ’ģIõŋ¸ #ô ‚ĘI­ˆŠKLøŋĐ #‚dLˆ‚ZLīˆ“Ā+8”Ru[†W…Ā&áĨ ‚f…‰†ģIĀ #l ‚ĘI‰ūKLĀ #‚dL‰‚ZLD‰“(Ā+8”Ru[ˆöž„ ŋâo„>ŋœ)ˆ„ŋ„ķŋŠ{ ´ņ@Ā/œĄ6X‘ĄØ<´'‘ĄŪÅ´'‘ Ąwö´'‘—č™°P´'W‰¤msg/ü‘\’Ī_TĀ€Č ‚Ū_ƒ‰’–_TĀ(€ ‚Ĩ_Ŗ‰ūTeĀ‚+TˉūĄIeĀ ‚°Iˉ†fãvĀ3 ‚†ã퉂|㊀vĀ…b‘­PvĀ@€ƒ‚ÎP퉂ÁPMŠ„ŽĀR$’ _‘ĀX€Û ‚)_pŠ‚_芉­P™Āx€™š ‚ÎP ‹‚ÁP3‹†aO™Ā Ž ‚lO ‹„ĸĀė{ „ŗĀR$‹˜€˙)_‚_c‹„­P’ūãŗĀ°€> ‚äx‹˙ä‹°€…b‘­PŗĀЀƒ‚ÎPx‹‚ÁP ‹„ÎĀR$’ _ÎĀø€æ ‚)_Ћ‚_(Œ‰­PÜĀ ™Ä ‚ÎPWŒ‚ÁPjŒ†aOÜĀš ‚lOWŒ„įĀė{ „úĀR$‹@˙)_‚_šŒ„6­P†båÁ Q‚‚富‚xåĮŒ€Á…b‘­PÁXƒ‚ÎP¯Œ‚ÁP܌„ÁR$’ _Áp Ô‚)_ ‚_$‘­PÁˆ™‚ÎP9‚ÁPM†aOÁČ‚lO9„(Áė{ „9ÁR$’Îä9Á° 7‚îä}˙ää‹°…b‘­P9Áȁƒ‚ÎP}‚ÁP•„QÁR$’ūãTÁč ž‚äō‚äí‹č…b‘­PTÁ‚ƒ‚ÎPō‚ÁPŽ„lÁR$’ _lÁ ‚ F‚)_LŽ‚_tމ­PzÁ@‚™$‚ÎPŖŽ‚ÁPΎ†aOzÁ‚lOŖŽ„…Áė{ „˜ÁR$‹`‚˙)_‚_ūŽ„V­P’ã§Áx‚ ą‚㏑*i§Á‚U‚9iŠqG§Á¨‚‚ŠG5‚€G„ģÁŝ†ã] öøãudŸ‡*i]ÂUø9iudŸ„gÂqGˆvĀ„§Áy]„oŠ{ Z9´EņpÂļœk–°MŲ kI’ļ^‡ÂĀ‚Ū “‚Å^I‘T‡ÂĀ‚X‚+TƒŠĄI‡ÂĀ‚ ‚°Iƒ’îŠÂ؂Ũ ŗ‚ îŏ’Đ^ŽÂø‚Ü B‚ß^䏇6TŽÂM‚ETūÕIŽÂ 6‚äIūģIŽÂ Õ‚ĘIūĄIŽÂ -‚°I’:ä×ÂƒÜ ‚ZäH‚P䑐‹ƒ…b‘~a×Â0ƒƒ‚ąaH‚¤a‘†ÕI×Â Ų ô‚äIHūģI× ՂĘIHūĄI× -‚°IH„íÂR$’ÎäíÂXƒŨ h‚îä*‘‚ääR‘‹Xƒ…b‘­PíÂpƒƒ‚ÎP*‘‚ÁP¤‘„ÃR$’ _ЃŨ į˙)_‚_Į‘‘­P胙‚ÎP’‚ÁP7’†aOà ۂlO’„ Ãė{ „ÃR$’ _ÃЃŪ Ļ˙)_‚_g’‰­P,Ãđƒ™_‚ÎPš’‚ÁPã’’aO,ÄT‚lOš’„NÃR$‹(„˙)_‚_“‘­PPÃ@„—‚ÎP“‚ÁP3“„ØÃR$’ã_Ã`„Ü ‚ãV“‘*i_Ãx„U‚9iV“ŠqG_Є‚ŠG’“‚€GV“„sÃŝ’W…Ã¨„Ü ‰‚f…˛“†ģIÃ #P‚ĘI˛“ŠKL“ÃĀ„ #‚dLî“‚ZL*”“įÃ+8”Rv†W…ôÃÜ ‚f…h”†ģIôà #Č‚ĘIh”ūKLúà #‚dL}”‚ZLĒ”“ Ä+8”Ru_†ãÄÜ Føãu`Ÿ‡*iÄUø9iu`Ÿ„!ÄqG„Ņ”“ˆ×„_Ãy]„ÄŠ{ ¸8ß1â—ā5„ NŪũ—¸8÷pķ40Äßœ¸ßø‘ø‰‘’W…nÄ؄ūB‚f…Ŋ”’ģInÄø„ # ‚ĘIŊ”ŠKLqÄ… #‚dLõ”‚ZL$•“°Ä+8”Ru_’W…„Ä0…ūē‚f…R•’ģI„ÄH… #‚ĘIR•ŠKLŠÄ`… #‚dLt•‚ZL”•“ĮÄ+8”Rv†W…ÔÄū2‚f…˛•†ģIÔÄ #ų‚ĘI˛•ūKLÚÄ #‚dLĮ•‚ZLô•“įÄ+8”Ru_†W…ōÄūĒøf…u`Ÿ’ģIōÄx… #qøĘIu`ŸŠKLõĐ… #‚dL–‚ZL4–“ Å+8”Ru_ŗUÄČ”Pud”Ru ˆeĈnÄ„đÄŠ{ á\ņŪ°Mâ âîã;ã ¸8ô1÷śœ.Įø(î‘ø2î‘—¨…ŧ‚(îG–‚2îs–’ß8ÅĀ…å ą‚ęs–‹Ā…ųĒ–’W…YÅ؅æ ‚f…Ų–’ģIYÅø… #Ė‚ĘIŲ–ŠKLbņ #‚dL—‚ZL7—“ˆÅ+8”Rus†W…ŒÅæ }øf…utŸ†ģIŒÅ #DøĘIutŸūKL’Å #‚dLU—‚ZL‚—“ĸÅ+8”Rusŗ@Å›”Put”Ru „KÅ_} „YÅw} „tÅw} „ĢÅŠ{ •oņ0)įœN–“ūė´'•—Ą6í´'‘—(†CĨō¸î/ü‘\’[î^)H†đX‚{îܗ‚qîô—‹H†…b„p)­P†Îä})đž‚î䘂ä䘀})…b„‘)­P’ūã”)`†ôā‚ä2˜‚äZ˜‹`†…b„Š)­P†­î¸)ō&‚Í‚ÃîĄ˜€¸)…b„Ę)­P†ÎäĖ)ôl‚îäļ˜‚ääΘ€Ė)…b„ā)­P†ãé) öą‚ãᘇ*ié) U‚9iᘄö)qG†ã*ööøãudŸ‡*i*Uø9iudŸ„*qGˆR)ŗ})īG”Pv”RuTŗļ)īG8”Pv”Ru„é)y]„*Š{ •‹ņ°Åœž%Ą™_š´'‘ĄT@ē´'‘Ąkôē %‘—x†ŗ%ĨXģ/ü‘T†˙îĐÅŊøī€ēŸ‚ĐÅ…b‘­PĐ؆ƒøÎP€ēŸ‚ÁP;™„čÅR$’ _ëۆŊÅ‚)_^™‚_†™‰­PķÅІ™Ŗ‚ÎPə‚ÁPܙ†aOķÅ ˜‚lOə„üÅė{ „ ÆR$‹đ†˙)_‚_ š„ĻĮ­P’bå Æ‡Ŋ(‚‚å!š˙x勇…b‘­P Æ(‡ƒ‚ÎP!š‚ÁPYš„(ÆR$’Qī(ÆP‡ž‹‚qī‰š˙gī‹P‡…b‘­P(Æp‡ƒ‚ÎP‰š‚ÁPÁš„@ÆR$’Ŗī@Ƙ‡ŋî‚Ãīņš˙šī‹˜‡…b‘­P@ư‡ƒ‚ÎPņš‚ÁP)›„XÆR$’ _[ÆЇŋ– ‚)_Y›‚_‘›‰­PcÆđ‡™t ‚ÎP͛‚ÁP⛆aOcÆ i ‚lO͛„lÆė{ „}ÆR$‹ˆ˙)_‚_œ„ÆĮ­P’>č}Æ(ˆŋų ‚^č%œ˙Tč‹(ˆ…b‘­P}ÆHˆƒ‚ÎP%œ‚ÁP]œ„˜ÆR$’õī˜ÆpˆĀ\!‚đœ˙ đ‹pˆ…b‘­P˜Æˆƒ‚ÎPœ‚ÁPŜ„°ÆR$’Gđ°Æ¸ˆÁŋ!‚gđõœ˙]đ‹¸ˆ…b‘­P°Æ؈ƒ‚ÎPõœ‚ÁP-„ČÆR$’GđČÆ‰Â""‚gđ]˙]đ‹‰…b‘­PČÆ ‰ƒ‚ÎP]‚ÁP•„āÆR$’™đāÆH‰Ã…"‚šđŝ˙¯đ‹H‰…b‘­PāÆh‰ƒ‚ÎPŝ‚ÁPũ„øÆR$’ūãøÆ‰Äč"‚ä-ž˙䋐‰…b‘­PøÆ¨‰ƒ‚ÎP-ž‚ÁPež„ĮR$’T ĮȉĮ$#‚+T•žŠĄI Įȉ ‚°I•ž’W…PĮā‰Įœ#‚f…Ņž’ģIPĮŠ #c#‚ĘIŅžŠKLSĮŠ #‚dL Ÿ‚ZL8Ÿ“čĮ+8”Ru[’W…fĮ8ŠĮ$‚f…VŸ†ģIfĮ #Û#‚ĘIVŸŠKLlĮPŠ #‚dL…Ÿ‚ZL´Ÿ“×Į+8”Rv†ãqĮ ĮY$‚ãԟ‡*iqĮ U‚9iԟ„|ĮqG†W…īĮĮŅ$‚f…ôŸ’ģIīĮhŠ #˜$‚ĘIôŸŠKLōĮ€Š #‚dL  ‚ZL6 “ Č+8”Ru[†W… ČĮI%‚f…I †ģI Č #%‚ĘII ūKLČ #‚dL^ ‚ZL‹ “Č+8”Ru[†ãČ#ĮŽ%‚ãž ‡*iČ#U‚9iž „'ČqGˆĐÅ„Įy]„3Į”“„PĮJ‚ „/ČŠ{ ´Ģņ@BŽœ'IT,ƒ‡Vķ'‘žÂl`BôR&‚âlŗ ‚Ølß €`B…b‘œl`B˜Šƒ‚ĩlĄ‚Ģl,Ą„wB=‰ã€B°Šôŧ&‚ãOĄ‘*i€BȊU‚9iOĄŠqG€BāŠ‚ŠG|Ą‚€GOĄ„”BŝžãŧBô'øãudŸ‡*iŧBUø9iudŸ„ÆBqGˆ`B„€By]„ÎBŠ{ ųEüHĖĐB|œ8'/û5„\‡‘Ąņž/‘†‡mđB q'˙–m†ĄmC  —'˙°m„ CZg’މ CøŠŸĮ'‚§‰Ą‚‰ĻĄˆ.C’čžDC‹ Š(‚Ÿĸ‚ŸJĸ‹‹Š.Ÿ’APC0‹ y 0(‚3AŨĸ‚)A5Ŗ„bCh/EĄ(øf…uPŸ’ģI/EP‹ #h(øĘIuPŸŠKL2Eh‹ #‚dLōŖ‚ZL¤“GE+8”Ru\ˆPC’čžrC€‹ĸ)‚Ÿ2¤‚Ÿz¤‹€‹Š.Ÿ’A~C˜‹ y )‚3AĨ‚)AHĨ„Chˆ~C’5‡‘C¸‹ĸN)‚N‡ĘĨ‚D‡'Ļ„žCčČ’W…žC؋ĸÆ)‚f…vĻ’ģIžCø‹ #)‚ĘIvĻŠKLĄCŒ #‚dLČĻ‚ZL§“øC+8”RuG’W…ąC0ŒĄ>*‚f…2§’ģIąCHŒ #*‚ĘI2§ŠKLˇC`Œ #‚dLT§‚ZLt§“D+8”Rw’W…ģCxŒ ļ*‚f…’§’ģIģCŒ #}*‚ĘI’§ŠKLÁC¨Œ #‚dL´§‚ZLÖ§“'D+8”Rw’W…ÅCŒŸ.+‚f…ô§’ģIÅC، #õ*‚ĘIô§ŠKLËCđŒ #‚dL¨‚ZL8¨“?D+8”Rw’W…ĪCŸĻ+‚f…V¨’ģIĪC  #m+‚ĘIV¨ŠKLÕC8 #‚dLx¨‚ZLš¨“WD+8”Rw’W…ŲCPĄ,‚f…¸¨’ģIŲCh #å+‚ĘI¸¨ŠKLßC€ #‚dLÚ¨‚ZLü¨“oD+8”Rw†W…‹Dĸ–,‚f…Š’ģI‹D˜ #],‚ĘIŠŠKLŽD° #‚dL/Š‚ZL\Š“ŖD+8”RuG†W…ŖDĄ-‚f…oІģIŖD #Õ,‚ĘIoŠūKLŠD #‚dL„Š‚ZLąŠ“ĩD+8”RuG†W…ĩD †-‚f…ÄŠ†ģIĩD #M-‚ĘIÄŠūKLģD #‚dLŲŠ‚ZLĒ“ĮD+8”RuG†W…ĮDŸū-‚f…džģIĮD #Å-‚ĘIĒūKLÍD #‚dL.Ē‚ZL[Ē“ŲD+8”RuG†W…ŲDŸv.‚f…ndžģIŲD #=.‚ĘInĒūKLßD #‚dLƒĒ‚ZL°Ē“ëD+8”RuG†W…ëDDĄî.‚f…ÃdžģIëD #ĩ.‚ĘIÃĒūKLņD> #‚dLØĒ‚ZLĢ“ũD+8”RuG„Cž%„DC ø„rCœ)„EŠ{ 1:üöËPE|œ4/7û5„\‡‘ĄšÕ”7‘†*y€E •—/‚9yĢūy€E #‚yĢ„†EŽh’މ‰Eȍ•Į/‚§‰ŠĢ‚‰ĄĢˆĢE’čžÁEā–Š0‚ŸũĢ‚ŸEŦ‹āŠ.Ÿ’AÍEŽ y 00‚3AØŦ‚)A0­„ßEh¯GĄ0øf…uPŸ’ģI¯G Ž #h0øĘIuPŸŠKL˛G8Ž #‚dLí­‚ZLŽ“ĮG+8”Ru\ˆÍE’čžīEPŽ—1‚Ÿ-Ž‚ŸuŽ‹PŽŠ.Ÿ’AûEhŽ y 1‚3AûŽ‚)AC¯„ FhˆûE’5‡FˆŽ—N1‚N‡ů‚D‡"°„FčČ’W…F¨Ž—Æ1‚f…q°’ģIFȎ #1‚ĘIq°ŠKLFāŽ #‚dLð‚ZL˙°“xF+8”RuG’W….F–>2‚f…-ą’ģI.F #2‚ĘI-ąŠKL4F0 #‚dLOą‚ZLoą“F+8”Rw’W…8FH–ļ2‚f…ą’ģI8F` #}2‚ĘIąŠKL>Fx #‚dL¯ą‚ZLŅą“§F+8”Rw’W…BF•.3‚f…īą’ģIBF¨ #õ2‚ĘIīąŠKLHFĀ #‚dL˛‚ZL3˛“ŋF+8”Rw’W…LF؏•Ļ3‚f…Q˛’ģILFđ #m3‚ĘIQ˛ŠKLRF #‚dLs˛‚ZL•˛“×F+8”Rw’W…VF –4‚f…ŗ˛’ģIVF8 #å3‚ĘIŗ˛ŠKL\FP #‚dLÕ˛‚ZL÷˛“īF+8”Rw†W… G—–4‚f…ŗ’ģI Gh #]4‚ĘIŗŠKLG€ #‚dL*ŗ‚ZLWŗ“#G+8”RuG†W…#G–5‚f…jŗ†ģI#G #Õ4‚ĘIjŗūKL)G #‚dLŗ‚ZLŦŗ“5G+8”RuG†W…5G–†5‚f…ŋŗ†ģI5G #M5‚ĘIŋŗūKL;G #‚dLÔŗ‚ZL´“GG+8”RuG†W…GG•ū5‚f…´†ģIGG #Å5‚ĘI´ūKLMG #‚dL)´‚ZLV´“YG+8”RuG†W…YG•v6‚f…i´†ģIYG #=6‚ĘIi´ūKL_G #‚dL~´‚ZLĢ´“kG+8”RuG†W…kGD–î6‚f…ž´†ģIkG #ĩ6‚ĘIž´ūKLqG> #‚dLĶ´‚ZLĩ“}G+8”RuG„€Ež%„ÁE ø„īEœ)„†GŠ{ uHüĄā@ČCœ479û5„CW‘Ąņé 9‘†‡mWČę q7‚–mĩ†ĄmZČę ›7‚°mKĩ„`ČZg†•ZČī Ī7‚­Ziĩ‚ ZĄĩ„“ČÕ{ ’W…ŨČ˜õ G8‚f…ĩĩ’ģIŨȸ #8‚ĘIĩĩŠKLæČА #‚dL×ĩ‚ZLųĩ“`É+8”Ru[†W…dÉõ ŋ8øf…u\Ÿ†ģIdÉ #†8øĘIu\ŸūKLjÉ #‚dLļ‚ZLDļ“zÉ+8”Ru[„|Čp„›ČZg„ÍČž%„ŨČÕ{ „ūČw} „ÉŊ{ „1Ép„IÉ#‚„ƒÉŠ{ 1:üĘāÉ3œ79Ŗ;û5„CW‘ĄšÕü Ŗ;‘—萘;Ĩwp˙ \F‘P’W…5Ę‘ æ9‚f…Wļ’ģI5Ę ‘ #­9‚ĘIWļŠKL8Ę8‘ #‚dLlļ‚ZLļ“ˆĘ+8”RuW’W…XĘX‘ _:‚f…Ÿļ’ģIXĘp‘ #%:‚ĘIŸļūKLaĘ #‚dL´ļ‚ZLÉļ“qĘ+8”RuD†W…ŒĘ ×:‚f…Üļ†ģIŒĘ #ž:‚ĘIÜļūKL’Ę #‚dLņļ‚ZLˇ“žĘ+8”Ru`†W…ŠĘ O;øf…u\Ÿ’ģIŠĘˆ‘ #;øĘIu\ŸŠKLŦĘ ‘ #‚dL1ˇ‚ZL^ˇ“ÁĘ+8”RuW„ÉÉæ(ŗãÉqo;”PuX„ųÉp„Ęž%„5ĘÕ{ „XĘw} „§ĘŠ{ uHüEáĐĘ2œĀ;PBû5„CW‘ĄãĨ( PB‘ũ %‘—¸‘EB™És6 %qˇ™ Ų@ %ކ ņũĘ- E<‚ņ顓Ëq”PuT†TË- <‚+T¸ūĄIË ‚°I¸’"ņ(ËБ- ´<‚-ņ3¸“LËq”PuD’W…_Ëđ‘- ,=‚f…Q¸’ģI_Ë’ #ķ<‚ĘIQ¸ŠKLbË(’ #‚dL•¸‚ZLŪ¸“xÍ+8”Ru[’W…vËH’- Ĩ=‚f… š’ģIvË`’ #k=‚ĘI šŠKL|Ëx’ #‚dL.š‚ZLOš“˜Í+8”RuD’W…ģː’0 >‚f…mš’ģIģ˰’ #ä=‚ĘImšŠKLÄËȒ #‚dLš‚ZLąš“HÍ+8”Ru[†"ņîË4 P>‚-ņĪš“Ėq”PuT’W…Ėā’4 É>‚f…íš’ģIĖ“ #>‚ĘI횊KLĖ“ #‚dL6ē‚ZLē“hÍ+8”RuD—0“D@™$X8 %ē†"ņ]Ė: ?‚-ņÔē“rĖq”PuT”Ru@’W…ƒĖP“: ˜?‚f…ģ’ģIƒĖp“ #^?‚ĘIģŠKLŒĖˆ“ #‚dL"ģ‚ZLDģ“8Í+8”RuD†W…ēÍ: @‚f…bģ†ģIēÍ #×?‚ĘIbģūKLĀÍ #‚dLwģ‚ZLŒģ“ĖÍ+8”RuD„J˝ބ]Ėp„ƒĖÕ{ „Ėvy„ÃĖÕ{ †W…ĨÍ- Ē@‚f…Ÿģ†ģIĨÍ #ƒ@‚ĘIŸģūKLĢÍ #‚dL´ģ‚ZLÉģ†W…ĐÍ0 "A‚f…Üģ†ģIĐÍ #é@‚ĘIÜģūKLÖÍ #‚dLņģ‚ZLŧ“âÍ+8”Ru[†W…čÍ- šAøf…u\Ÿ’ģIčÍ “ #aAøĘIu\ŸŠKLë͸“ #‚dLŧ‚ZLFŧ“Î+8”Ru[„õĘp„ũĘOŽ„'ËŸ„_ËÕ{ „˜Ë„ĢËž%„ģËÕ{ „ÖËŊ{ „æËp„îËŽ„ĖÕ{ „+˝ބ6ĖW„ĪĖߎ„ Íp„Íw} „ZÍŊ{ „¸ÍŠ{ ]HüŸËĐG|œmB'Jû5„\‡‘ĄãĨŠ'J‘ũ %‘’މ HГ‹ÃB‚§‰Yŧ‚‰lŧˆ-H’čžCHč“ŒĨC‚ŸČŧ‚ŸŊ‹蓩.Ÿ’AOH” y ,C‚3AŖŊ‚)AûŊ„aHh/JCøf…uPŸ’ģI/J(” #dCøĘIuPŸŠKL2J@” #‚dL¸ž‚ZLåž“GJ+8”Ru\ˆOH’čžqHX”D‚Ÿøž‚Ÿ@ŋ‹X”Š.Ÿ’A}Hp” y D‚3AÆŋ‚)AĀ„Hhˆ}H’5‡H”JD‚N‡Ā‚D‡íĀ„HčČ’W…H°”ÂD‚f…<Á’ģIHД #‰D‚ĘI<ÁŠKL Hč” #‚dLŽÁ‚ZLĘÁ“øH+8”RuG’W…°H•Œ:E‚f…øÁ’ģI°H • #E‚ĘIøÁŠKLļH8• #‚dL‚ZL:“I+8”Rw’W…ēHP•Œ˛E‚f…XÂ’ģIēHh• #yE‚ĘIXŠKLĀH€• #‚dLz‚ZLœÂ“'I+8”Rw’W…ÄH˜•‹*F‚f…ēÂ’ģIÄH°• #ņE‚ĘIēŠKLĘHȕ #‚dLÜ‚ZLū“?I+8”Rw’W…ÎHā•‹ĸF‚f…Ã’ģIÎHø• #iF‚ĘIÊKLÔH– #‚dL>ÂZL`ÓWI+8”Rw’W…ØH(–ŒG‚f…~Ã’ģIØH@– #áF‚ĘI~ÊKLŪHX– #‚dL Ã‚ZLÂÓoI+8”Rw†W…‹I’G‚f…āÃ’ģI‹Ip– #YG‚ĘIāÊKLŽIˆ– #‚dLõÂZL"Ä“ŖI+8”RuG†W…ŖIŒ H‚f…5ĆģIŖI #ŅG‚ĘI5ÄūKLŠI #‚dLJÄ‚ZLwÄ“ĩI+8”RuG†W…ĩIŒ‚H‚f…ŠÄ†ģIĩI #IH‚ĘIŠÄūKLģI #‚dLŸÄ‚ZLĖÄ“ĮI+8”RuG†W…ĮI‹úH‚f…ßĆģIĮI #ÁH‚ĘIßÄūKLÍI #‚dLôÄ‚ZL!Å“ŲI+8”RuG†W…ŲI‹rI‚f…4ņģIŲI #9I‚ĘI4ÅūKLßI #‚dLIÅ‚ZLvÅ“ëI+8”RuG†W…ëIDŒęI‚f…‰Å†ģIëI #ąI‚ĘI‰ÅūKLņI> #‚dLžÅ‚ZLËÅ“ũI+8”RuG„đG„Hž%„HW„CH ø„qHœ)„JŠ{ ]H•šŨÎdœŠQĸstrD ŠQ‘ĄhD %‘— –Q¤mE /ü‘X—Ā–äP˜iG &'ŪņÕI:ÎG éJ‚äIÆūģI:Î Õ‚ĘIÆūĄI:Î -‚°IÆ‹ؖ˜chH ē'>Æ†ÖæxÎ N `K‚öæDĮ‚ėæ\Į€xÎ …b‡­PxÎ ƒ‚ÎPDĮ‚ÁPpĮ’zįƒÎđ–[ ĮK‚šį‰Į‚įĄĮ‹đ–…b‘­PƒÎ—ƒ‚ÎP‰Į‚ÁPĩĮ„ÎR$’%b’Î(—e .L‚EbÎĮ‚;bæĮ‹(—…b‘áP’Î@—ƒ‚QúĮ‚õPČ„sĪR$†ÖæĐÎK L‚öæ,Č‚ėæDČ€ĐÎ…b‡­PĐ΃‚ÎP,Č‚ÁPXȆzįęÎU đL‚šįqČ‚į‰Č€ęÎ…b‡­Pę΃‚ÎPqČ‚ÁPČ†„æĪQ QM‚¤æļČ‚šæÎȀ΅b‡­PĪƒ‚ÎPļČ‚ÁPâȆęŠ0Ī'` M‚õŠûČūÚZ0ĪĶ ‚åZûȆ%b€Ī ] ôM˙Eb‚;bÉ€€Ī …b‘áPƒĪ`—ƒ‚Q/É‚õPOÉ„™ĪR$†%b Ī W [N˙Eb‚;bbÉ€ Ī …b‘áPŖĪx—ƒ‚QvÉ‚õP–É„šĪR$’AņØĪ—b ÂN‚aņŠÉ‚WņÁÉ‹—…b‘­PØĪ°—ƒ‚ÎPŠÉ‚ÁPÕÉ„îĪR$’:äîĪؗb O‚ZäųÉ‚PäĘ‹ؗ…b‘~aîĪø—ƒ‚ąaųÉ‚¤a"ʆÕIîĪ Ų tO‚äIųÉūģIîĪ Õ‚ĘIųÉūĄIîĪ -‚°IųÉ„ĐR$’ÎäĐ ˜c čO‚îäFĘ‚ää^Ę‹ ˜…b‘­PĐ@˜ƒ‚ÎPFĘ‚ÁPrĘ„ĐR$’W…Đh˜b `P‚f…–Ę’ģIĐ€˜ #'P‚ĘI–ĘūKL%Đ #‚dLĢĘ‚ZLØĘ“<Đ+8”R‘[†W…EĐb ØP‚f…ˆģIEĐ #ŸP‚ĘIËūKLKĐ #‚dLË‚ZLHË“[Đ+8”R‘[„×Ī*ę†ãŦÎ k )Q‚ã[ˇ*iŦÎ U‚9i[Ë„šÎqG†ã[Đk nQ‚ãoˇ*i[ĐU‚9ioË„hĐqGˆ:΄ŦÎy]„pĐŠ{ ô1•Ū€Đûœ XĄã;H X‘—˜˜ūWĨeŗI /ü‘T—˜cW˜iJ %ƒË—ؘXW™ÖK XŦË’ _°Đø˜L ĨR˙)_‚_Ęˉ­P°Đ™™ƒR‚ÎPėË‚ÁP˙ˆaO°Đ xR‚lOėË„šĐė{ „ĘĐR$‹8™˙)_‚_/Ė„×Ņ­P’ÎäĘĐP™L S‚îäDĖ˙ää‹P™…b‘­PĘĐp™ƒ‚ÎPDĖ‚ÁPlĖ„åĐR$’ÎäåĐ˜™M kS‚îäœĖ˙ä䋘™…b‘­Pčи™ƒ‚ÎPœĖ‚ÁPÄĖ„ũĐR$’:äũĐā™M &T‚ZääĖ˙Pä‹ā™…b‘~aũĐšƒ‚ąaäĖ‚¤a͆ÕIũĐ Ų T‚äIäĖūģIũĐ Õ‚ĘIäĖūĄIũĐ -‚°IäĖ„ŅR$’ÎäŅ(šM ‰T‚îä6Í˙ää‹(š…b‘­PŅHšƒ‚ÎP6Í‚ÁP^Í„%ŅR$’W…%ŅhšM U‚f…~Í’ģI%Ņˆš #ČT‚ĘI~ÍŠKL.Ņ š #‚dL Í‚ZLÂÍ“øŅ+8”Ru[’W…:ҏšM zU‚f…ā͆ģI:Ņ #@U‚ĘIāÍŠKL@ŅК #‚dL΂ZL$ΓčŅ+8”RuP’—ņ‰ŅčšM ¤U‚ĸņB΄Ņ,J’ÎäžŅ›L V‚îän΂ääĻ΋›…b‘­PžŅ ›ƒ‚ÎPn΂ÁPÕ΄ļŅR$†V`¤ŅL WV˙e`ūT¤ŅÚ˙+TūĄI¤Ņ ˙°I†W…EŌM ĪV‚f…Ī’ģIEŌ@› #–V‚ĘIĪŠKLHŌX› #‚dLĪ‚ZLGĪ“]Ō+8”Ru[†W…]ŌM GW‚f…ZΆģI]Ō #W‚ĘIZĪūKLcŌ #‚dLoĪ‚ZLœĪ“oŌ+8”Ru[„qŅíkˆ‰Ņ„ZŅqk†ãŌ O ¨W‚ã¯Ī‡*iŌ U‚9i¯Ī„ŌqG†ã.ŌO íW‚ãŅ·*i.ŌU‚9iŅĪ„;ŌqGˆĸĐ„Ōy]„CŌŠ{ :~9ßiü"X9Xā5„6_émsg`9X_5÷X‘PJQœZX,\ø"X‘ø,X‘‰×pJp›`.ZŽ×‚×æĪ’ΉpJ˜›ˇX‚Ū‰ĢĐˆ~J’Ė×ŗJ°›_Y˙īׂÛ×‚Ņ’ØŗJ؛#? Y˙'Ø‚Ø‚Ņ„ūJ¸ũ†VMK#?аKhœ`WZ‚WŠ5Ô‚MŠŲÔ‰~aÃK€œaâZ‚ąa@Õ‚¤a–Õ†ÕIÃK Ų ×Z‚äI@ÕūģIÃK Õ‚ĘI@ÕūĄIÃK -‚°I@Õ„ŨKR$‰W…ŨK¨œaY[‚f…¯Õ’ģIŨKȜ # [‚ĘI¯ÕŠKLæK✠#‚dLëÕ‚ZL'Ö“L+8”RucžW…SLaĐ[‚f…:Ö†ģISL #—[‚ĘI:ÖūKLYL #‚dLOÖ‚ZL|Ö“iL+8”Rucž*iiL`ų[‚9iÖ„uLqG„nJ%| „ÃKy]„KL”{ „SLŠ{ „}LŠ{ áËņQ\č~õļ %âãmˇ/üúĻ×€ŌÛœi\qû5„ĩ\‘ĄČ@%‘—øœûpĨ(\F‘´™ë%¯ÖĨZ/ü‘¸†>čāŌ.]‚^č*ׂTčb×€āŌ…b‘­PāŌ ƒ‚ÎP*ׂÁPŌׄõŌR$’ _øŌ8Ō]˙)_‚_÷׉­PĶX™°]‚ÎPZØ‚ÁPm؆aOĶĨ]‚lOZØ„ Ķė{ „ ĶR$‹x˙)_‚_ŸØ„L×­P’Îä ͐5^‚îä´Ø˙ä䋐…b‘­P&Ͱƒ‚ÎP´Ø‚ÁPüØ„AĶR$’[î|ĶН"w^‚{îŲ‚qîDŲ‹Н…b„’Ķ­P’>č’Ķč#š^‚^čfŲ‚Tč~Ų‹č…b„§Ķ­P’:ä§Ķž#x_‚Zä“Ų‚Pä¨Ų‹ž…b‘~a§Ķ(žƒ‚ąa“Ų‚¤aŊŲ†ÕI§Ķ Ų k_‚äI“ŲūģI§Ķ Õ‚ĘI“ŲūĄI§Ķ -‚°I“Ų„ŊĶR$’W…ŊĶPž#Ū_‚f…íŲ’ģIŊĶhž #ˇ_‚ĘIíŲŠKLĀĶ€ž #‚dLÚ‚ZLÚ’,\oÔ˜ž5˛a‚7\*Ú‹˜žŸE\‘\ž­îÔÂQ`‚ÍîHÚ‚Ãî`Ú€Ô…b„ŗÔ­P‰OōŗÔĀžĀ’`‚oōuÚ‚eōÚ‹Āž…b„†×­PžÉaĩÔĀĶ`˙éa‚ßaĸÚ€ĩÔ…b„ÄÔ=žĖįĪÔÆa‚ėįˇÚ‚âįĪÚ€ĪÔ…b„åÔ­P‰ãøÔāžË\a‚ãäÚ‘*iøÔøžU‚9iäÚ„ÕqGžãžØË a‚ãÛ‡*ižØU‚9iÛ„ŦØqGˆÔ„øÔy]’EķÕŸ4ôa‚eķ(Û‚[ķ`Û‹Ÿ…b„Õ­P’>čÕ(Ÿ56b‚^čÛ‚TčˇÛ‹(Ÿ…b„/Õ­P’:ä/Õ@Ÿ5õb‚ZäŲÛ‚PäûÛ‹@Ÿ…b‘~a/Õ`Ÿƒ‚ąaŲÛ‚¤a܆ÕI/Õ Ų čb‚äIŲÛūģI/Õ Õ‚ĘIŲÛūĄI/Õ -‚°IŲÛ„EÕR$’ÎäFÕˆŸ57c‚îäMÜ‚ääuÜ‹ˆŸ…b„TÕ­P’>čVÕ Ÿ6yc‚^č—Ü‚TčŋÜ‹ Ÿ…b„iÕ­P’:äiÕ¸Ÿ68d‚ZäáÜ‚PäŨ‹¸Ÿ…b‘~aiÕ؟ƒ‚ąaáÜ‚¤a%Ũ†ÕIiÕ Ų +d‚äIáÜūģIiÕ Õ‚ĘIáÜūĄIiÕ -‚°IáÜ„ÕR$’W…Õ 5˛d‚f…UŨ’ģIÕ   #wd‚ĘIUŨŠKL‚Õ8  #‚dLwŨ‚ZL™Ũ“?Ø+8”Ru´†W…–Õ"6,e‚f…ˇŨ†ģI–Õ #ņd‚ĘIˇŨūKLœÕ #‚dLĖŨ‚ZLáŨ“ŦÕ+8”Ru´—X 3h™6‘+%ôŨ’W…!Ö€ 1ŋe‚f…Ū’KL!Ö   #ĸe‚dL'Ū‚ZL<Ū“)Ö+8”RudŠģIØĀ  #‚ĘIŪ†ķō¤×/f‚ķOŪ‚ ķwŪ€¤×…b„ŋ×­P’>čÁר 0Gf‚^č™Ū‚TčąŪ‹Ø …b„Ô×­P’Îäá×đ 0‰f‚îäÆŪ‚ääŪŪ‹đ …b„ō×­P’>čķץ1Ëf‚^čüŪ‚Tčß‹Ą…b„Ø­P’:äØ0Ą1Šg‚Zä'ß‚Pä<ß‹0Ą…b‘~aØPĄƒ‚ąa'ß‚¤aO߆ÕIØ Ų }g‚äI'ßūģIØ Õ‚ĘI'ßūĄIØ -‚°I'ß„ØR$†W…BŲ1îgøf…uPŸ’ģIBŲxĄ #ÉgøĘIuPŸŠKLEؐĄ #ødLudŸøZLP„×:^ŗĄ×uAh”PuP”RuŦ“á×īG”Pu°”Rv†W…ĩØ6Ģh‚f…g߆ģIĩØ #rh‚ĘIgßūKLģØ #‚dL|ß‚ZLŠß“ĮØ+8”Ru`†W…#Ų5%i‚f…ŧß’ģI#Ų¨Ą #ęh‚ĘIŧߊKL&ŲĀĄ #‚dLŅß‚ZLæß“;Ų+8”Ru´†ĄōÉÕki‚Áōųß‚ˇō!ā€ÉÕ…b„ßÕ­P’>čáÕØĄ­i‚^čCā‚Tč[⋨Ą…b„ôÕ­P’:äôÕđĄlj‚Zäpā‚Pä…ā‹đĄ…b‘~aôÕĸƒ‚ąap₤ašā†ÕIôÕ Ų _j‚äIpāūģIôÕ Õ‚ĘIpāūĄIôÕ -‚°Ipā„ ÖR$’W… Ö8ĸŌj‚f…Ęā’ģI ÖPĸ #Ģj‚ĘIĘāŠKL Öhĸ #‚dLßā‚ZLôā’ķō‘Ö€ĸ&k‚ķá‚ ķ/á‹€ĸ…b„§Ö­P’>č¨Ö˜ĸ'Vk‚^čQá‚Tčiዘĸ…b„ŧÖ­P’:äŧÖ¸ĸ'l‚Zä~á‚Pä“ዸĸ…b‘~aŧÖØĸƒ‚ąa~Ⴄa¨á†ÕIŧÖ Ų l‚äI~áūģIŧÖ Õ‚ĘI~áūĄIŧÖ -‚°I~á„ŌÖR$’W…ŌÖŖ'{l‚f…Øá’ģIŌÖŖ #Tl‚ĘIØáŠKLÕÖ0Ŗ #‚dLíá‚ZLâ†W…FØ#ál‚f…â’ģIFØHŖ #ēl‚ĘIâŠKLIØ`Ŗ #‚dL*â‚ZL?â†W…ËØ'Gm‚f…Râ’ģIËØxŖ # m‚ĘIRâŠKLÎØŖ #‚dLgâ‚ZL|â†W…ūØ%­m‚f…â’ģIūبŖ #†m‚ĘIâŠKLŲĀŖ #‚dL¤â‚ZLšâ’W…đĶØŖ?%n‚f…Ėâ’ģIđĶøŖ #ėm‚ĘIĖâŠKLųͤ #‚dLã‚ZLDã“`×+8”Rud†ãÔ+n‚ãbã‡*iÔ+U‚9ibãūqGÔ+‚ŠG’ã‚€Gbã„Ôŝ’W…,Ô(¤@o‚f…˛ã†ģI,Ô #Īn‚ĘI˛ãŠKL2Ô@¤ #‚dLäã‚ZL䓸Ö+8”Rud†ãVØMo‚ã1ä‡*iVØU‚9i1ä„bØqG†W…eØ@Æo‚f…Fä†ģIeØ #Œo‚ĘIFäūKLkØ #‚dL\ä‚ZL‹ä“wØ+8”Ruģ†W…‚Ø?>p‚f…žä†ģI‚Ø #p‚ĘIžäūKLˆØ #‚dLŗä‚ZLČä“”Ø+8”Rud„ŋŌfĖˆŅŌŗ|ĶuAmp”PuH”RuŦ„čĶy]„đĶΨŗlÔuA p”PuX”RuŦŗÉÕuAŋp”PuD”RuŦˆMÖ„aÖ­PˆoÖŗ‘ÖuAôp”PuL”RuŦˆîØ„€ØŠ{ vĩ•āņ`Ų=œ„|ĄÔ„|‘ĸstrÔ´'‘ĄÜåÔq‘—X¤o|¤endÖČ*‘P™Ë%׉|Ûä™ã;æō嗐¤ũv¤msgÜ/ü‘T’đåÄŲ°¤Ũ r‚æ:傿rå‹°¤…b‘­PÄŲȤƒ‚ÎP:å‚ÁP›å„ÜŲR$’ĮâÜŲč¤Ũís‚įâžå‚Ũâęå‹č¤…b‘XäŲĨƒ‚'Xæ‚X?æ‰~aôŲ0Ĩéōr‚ąa]悤a‰æ†ÕIôŲ Ų įr‚äI]æūģIôŲ Õ‚ĘI]æūĄIôŲ -‚°I]æ„ÚR$‰W…ÚPĨéis‚f…§æ’ģIÚpĨ #0s‚ĘI§æŠKLÚˆĨ #‚dLĶæ‚ZLį“Ü+8”Ru`žW…MÜéās‚f… į†ģIMÜ #§s‚ĘI įūKLSÜ #‚dL5į‚ZLbį“cÜ+8”Ru`„ķŲy]’}ôÚ¨ĨŪTt‚ôuį‚“ô­į‹¨Ĩ…b‘­PÚĀĨƒ‚ÎPuį‚ÁPÜį„1ÚR$’>č1ÚāĨßģt‚^č˙į‚Tč7č‹āĨ…b‘­P1ÚøĨƒ‚ÎP˙į‚ÁPfč„IÚR$’ _JÚĻß>u‚)_‰č‚_Áč‘­PJÚ0Ļ™‚ÎPđč‚ÁPé†aOJÚ 2u‚lOđč„RÚė{ „eÚR$’AņeÚXĻߥu‚aņLé˙Wņ‹XĻ…b‘­PeÚxĻƒ‚ÎPLé‚ÁP„é„}ÚR$’W…™Ú Ļāv‚f…§é’ģI™ÚĀĻ #āu‚ĘI§éŠKLĸÚØĻ #‚dLÉé‚ZLë铸Û+8”RuT†ãÜâ_v‚ã ę‡*iÜU‚9i ę„ÜqG†W…hÜāØv‚f…ę†ģIhÜ #žv‚ĘIęūKLnÜ #‚dL3ę‚ZLHę“zÜ+8”RuTˆÄŲ„‰Úy]„™ÚÕ{ „ēÚw} —đĻd|¤msgí/ü‘T†ãŧÚķ\w‚ã[ę‡*iŧÚU‚9i[ę„ÄÚqG’đåäÚ §îÃw‚æ}悿ĩę‹ §…b‘­PäÚ8§ƒ‚ÎP}ę‚ÁPŪę„üÚR$’ĮâüÚX§îŖy‚įâë‚Ũâ-ë‹X§…b‘XÛ€§ƒ‚'XVë‚X‚ë‰~aÛ §é¨x‚ąa ë‚¤aĖë†ÕIÛ Ų x‚äI ëūģIÛ Õ‚ĘI ëūĄIÛ -‚°I ë„"ÛR$‰W…"Û§éy‚f…ęë’ģI"Ûā§ #æx‚ĘIęëŠKL%Ûø§ #‚dL ė‚ZL,ė“čÛ+8”Ru`žW……Üé–yøf…udŸ†ģI…Ü #]yøĘIudŸūKL‹Ü #‚dLJė‚ZLwė“›Ü+8”Ru`„Ûy]’}ô9Û¨ī z‚ôŠė‚“ô˛ė‹¨…b‘­P9Û0¨ƒ‚ÎPŠė‚ÁPÔė„QÛR$’ūãQÛP¨đqz‚ä÷ė‚äí‹P¨…b‘­PQÛh¨ƒ‚ÎP÷ė‚ÁPAí„iÛR$’ _kÛˆ¨đĨz‚)_dí‚_Œí„zÛ­P’ŋôzÛ ¨đ{‚ßôŽí˙Õô‹ ¨…b‘­Pzۍƒ‚ÎPŽí‚ÁPÖí„’ÛR$’W…ŽÛč¨ņ{‚f…ųí’ģIŽÛŠ #G{‚ĘIųíŠKLˇÛ Š #‚dLî‚ZL#î“ØÛ+8”RuT†W…$Üņú{‚f…Aî†ģI$Ü #Ā{‚ĘIAîūKL*Ü #‚dLVî‚ZLkî“6Ü+8”RuT†ã9Üķ?|‚ã~î‡*i9ÜU‚9i~î„CÜqGˆäÚ„žÛy]„ŽÛÕ{ „ËÛw} „‰Ų$=„!ÜŠ{ „KÜŠ{ _5X%´ ō ÜķœÛ~ĸvarJ´'‘Ąũ0Jĩ‘—8ŠĐ~™Ũ\K´'“îĨã;Pĩ‘X’§YˇÜXŠK}‚˛YŨî„ŊÜ=<†õŲÜQ‚}‚1õZī‚'õ‚ī€ŲÜ…b‘­PÜÜpŠƒ‚ÎPZī‚ÁPĮī„ņÜR$’ _ņ܈ŠQ~‚)_ëī‚_đ‘­PņÜ Š™‚ÎPKđ‚ÁPŽđ’aOņÜČŠų}‚lOKđ„ųÜė{ „ ŨR$’ãŨāŠQp~‚ãŋđ‘*iŨĒU‚9iŋđŠqGŨ Ē‚ŠG÷đ‚€Gŋđ„0Ũŝ†ãŨQĩ~øãudŸ‡*iŨUø9iudŸ„‹ŨqGˆŲÜ„Ũ q„}ŨÕ} „“ŨŠ{ •(ō ŨœpĄŗn´'‘Ą¨š´'‘ĄU%‘—@Ē™– $ōņ™˛Ō%ōVņ—hĒ䄤msg:(‘X†Iö>ß;Ģ‚iö•ņ‚_öÍņ€>ß…b„Sß­P’ĩõU߈Ē<í‚Õõō‚ËõWō‹ˆĒ…b„kß­P’Aņkß Ē</€‚aņœō‚WņÔō‹ Ē…b„€ß­P’ößĀĒ<q€‚'öķ‚öQķ‹ĀĒ…b„˜ß­P’âčšßØĒ=ŗ€‚é–킸čÎ틨Džb„­ß­P’ĩõ­ßđĒ=õ€‚Õõô‚ËõKô‹đĒ…b„žß­P’ÎäĀßĢ=7‚îäô‚ääČô‹Ģ…b„Öß­P’Éa×ß Ģ=y‚éa õ‚ßaUõ‹ Ģ…b„åß=’bååß@Ģ>쁂‚åšõ‚xåŌõ‹@Ģ…b„úß­P’öüßXĢ>ũ‚'öö‚öOö‹XĢ…b„ ā­P’Îä āpĢ>?‚‚îä”ö‚ääĖö‹pĢ…b„ā­P’ÉaāĢ>‚‚éa÷‚ßaI÷‹Ģ…b„+ā=’bå+ā°Ģ>‚‚åŽ÷‚xåÆ÷‹°Ģ…b„@ā­P†ãQā >ƒ‚ã ø‡*iQā U‚9i ø„YāqG’W…māČĢ?€ƒ‚f…Pø’ģImāčĢ #Gƒ‚ĘIPøŠKLvāŦ #‚dLpø‚ZL’ø“šá+8”Ru\†W…â?øƒ‚f…°ø†ģIâ #ŋƒ‚ĘI°øūKL â #‚dLÅø‚ZLōø“â+8”Ru\†ãâA=„‚ãų‡*iâU‚9ių„#âqG/â{„‚ãų‡*i/âU‚9ių„;âqGCâš„‚ã/ų‡*iCâU‚9i/ų„QâqGˆ>߈Oā„bāy]„māp„’āw} —Ŧ툤msg2(‘T’cõ¨ā0Ŧ3@…‚ƒõDų‚yõlų‹0Ŧ…b„Ŋā­P’öžāHŦ4‚…‚'öõų‚öú‹HŦ…b„Ōā­P’AņÔā`Ŧ4ą‚aņ‚ú‚WņĒú‹`Ŧ…b„įā­P’ÉačāxŦ4†‚éaû‚ßa7û‹xŦ…b„öā=’Œäöā˜Ŧ5H†‚Ŧäœû‚ĸäÄû‹˜Ŧ…b„ á­P’ĩõ á¸Ŧ5І‚Õõ)ü‚ËõQü‹¸Ŧ…b„ á­P’(į áØŦ5ˆ‚Hįļü‚>įŪü‹ØŦ…b„5á­P†ãCá 5‡‚ãCũ‡*iCá U‚9iCũ„KáqG’W…_áøŦ6‰‡‚f…¨ũ’ģI_á­ #P‡‚ĘI¨ũŠKLhá0­ #‚dLÆũ‚ZLčũ“§á+8”Ru`†W…Ģá6ˆ‚f…ū†ģIĢá #ȇ‚ĘIūūKLąá #‚dLū‚ZLHū“Áá+8”Ru`†ãÁá8Fˆ‚ã[ū‡*iÁáU‚9i[ū„ËáqGŲᄈ‚ãpū‡*iŲáU‚9ipū„ãáqGíሂã…ū‡*iíáU‚9i…ū„ųáqGˆ¨āˆAá„Táy]„_áp„€áw} —H­¤msg*(‘P’cõDŪh­+I‰‚ƒõšū‚yõŌū‹h­…b„YŪ­P’ĩõZŪ€­,‹‰‚ÕõZ˙‚Ëõ’˙‹€­…b„nŪ­P’AņpŪ˜­,͉‚aņ ‚WņE‹˜­…b„ƒŪ­P’Éa„Ū°­,Š‚éaĀ‚ßaø‹°­…b„’Ū=’Œä’ŪĐ­-QŠ‚Ŧäs‚ĸäĢ‹Đ­…b„§Ū­P’ö¨Ūđ­-“Š‚'ö&‚ö^‹đ­…b„ŧŪ­P’(įŧŪŽ-Պ‚HįŲ‚>į‹Ž…b„ŅŪ­P†ãáŪ -‹‚㌇*iáŪ U‚9iŒ„éŪqG’W…ũŪ0Ž.’‹‚f…ü’ģIũŪPŽ #Y‹‚ĘIüŠKLßhŽ #‚dL‚ZL<“á+8”Ru`†W…[â. Œ‚f…Z†ģI[â #Ņ‹‚ĘIZūKLaâ #‚dLo‚ZLœ“qâ+8”Ru`†ãqâ0OŒ‚㯇*iqâU‚9i¯„{âqG‰âŒ‚ãć*i‰âU‚9iÄ„“âqGâˌøãudŸ‡*iâUø9iudŸ„ŠâqGˆDŪˆßŪ„ōŪy]„ũŪp„"ßw} „/ßÕ} „ÕŨŽ|„ãŨŽ|„ĶáŠ{ „ëáŠ{ „âŠ{ „+âŠ{ „CâŠ{ „YâŠ{ „ƒâŠ{ „›âŠ{ „ąâŠ{ üĻßĀâ$œˆj‘û5„CW‘ĄãĨ  j‘‘Ąj  %‘—€Ž_‘™ ¤ H‘Ų’Tû☎¤ Žø+TčˇŸŠĄIû☎ ø°IčˇŸHä1pŽ™˛ŌŽ ō÷’§YUä°Ž˛ [Ž‚˛Y „`ä=<„UäŽ|„yäp’ ņlãČŽž ĸŽ‚ņ#“†ãq”Pud†T†ãž ŪŽ‚+TAūĄI†ã ‚°IA’"ņ’ãāŽž ‚-ņp“­ãq”Pv’W…Ā㯞 ˆ‚f…Ž’ģIĀã ¯ #O‚ĘIŽŠKLÃã8¯ #‚dLÆ‚ZLõ“ ä+8”Ru_’W…×ãX¯ž ‚f…†ģI×ã #Į‚ĘIŠKLŨãp¯ #‚dLB‚ZLq“ä+8”Rv†W…­äž x‚f…†ģI­ä #?‚ĘIūKLŗä #‚dL¤‚ZLŅ“ŋä+8”Ru_†W…Ęäž đøf…u`Ÿ’ģIĘ䈯 #ˇøĘIu`ŸŠKLÍä ¯ #‚dLä‚ZL“âä+8”Ru_„øâÕ{ „ãģT„9ãÛ~„dãp„lãOŽ„‘㟏„ĀãÕ{ „õãw} „äp„)äe˜„;äp„ČäŠ{ ]H´Lōđäœˇ“ĸstr|´'‘Ąfé|´'‘ĄÜå|q‘—¸¯Ŧ“™=~H‘$†Üö.å„9’‚üöc‚ōö‹€.å…b‘­P.åدƒ‚ÎPc‚ÁPÄ„FåR$’ _Iåđ¯„á’‚)_č‚_‰­PMå°™ŋ’‚ÎP<‚ÁPO†aOMå ´’‚lO<„Våė{ „gåR$‹(°˙)_‚_€„Ūå­P’ãyå@°„L“‚ã•‘*iyåX°U‚9i•ŠqGyåp°‚ŠGˇ‚€G•„åŝ†ãâå„‘“øãudŸ‡*iâåUø9iudŸ„îåqG„åfŸˆ.å„yå q„öåŠ{ •pōæ|œ˙—–féÅ´'Ë—ˆ°ę—Ĩ%\Æ\F‘XĨ_mÉ/ü‘\†zį%æĮw”øšį%ŠŸ‚į) €%æ…b‘­P%樰ƒøÎP%ŠŸ‚ÁPm „=æR$’ _@æ°ĮД‚)_‘ ‚_Š —ā°Å”˙)_‚_í „į­P„Xæ­P†ãkæĮ•‚ã ‡*ikæU‚9i „xæqG—ø°–˜iĘ&'K ’YæąĘ†•‚œYj ŠģIæ(ą Û‚ĘIj ŠĄIæ@ą -‚°Ij ’÷˜æXąË°•‚#÷ „Ĩæf‚ Š%bĨæpąË˙Eb‚;bĄ ‹pą…b‘áPŽæąƒ‚Qļ ‚õPÉ „ēæR$’ã׿°ąÉU–‚ãÜ ‘*i׿ČąU‚9iÜ „äæqG’W…äæāąÎΖ‚f… ’ģI俞 #”–‚ĘI ŠKLíæ˛ #‚dLT ‚ZL “#į+8”RuT†W…0įÎF—‚f…Î †ģI0į # —‚ĘIÎ ūKL6į #‚dLã ‚ZL “Fį+8”Ru_†ãOįÉ‹—‚ã# ‡*iOįU‚9i# „^įqGeįɗøãudŸ‡*ieįUø9iudŸ„tįqGˆ%æ„kæy]ˆæ„׿y]„OįŠ{ „|įŠ{ •‡ō€į’œ™Ąféū´'‘Ąîū%‘‹0˛Ĩ_m˙\F‘l™uÄH‘8 †§Yĸį „˜‚˛YV „Žį=<’W…ÉįP˛ü˜‚f…j ’ģIÉįp˛ #Ø‚ĘIj ŠKLĐᐞ #‚dLŒ ‚ZLÆ “ č+8”R‘k“ĸ᎓”P‘l”R‘•Ļō čaœ1šĄfé´'‘Ąî´'‘‹¨˛Ĩ_m\F‘l™Üå H‘ä ’§Y=čž ™‚˛Y „Ič=<’W…P訞!šøf…‘lŸ’ģIPčø˛ #ܙøĘI‘lŸŠKL\čŗ #‚dL ‚ZLC “yč+8”R‘k“=術”P‘l”R‘´ÅōčœŦŸĄfé´'‘Ąîĩ‘—(ŗĄŸĨ_m \F‘L™uÄ H‘q Ĩã;ĩ‘P’§Y¯čPŗ ƚ‚˛YĨ „ēč=<’­îâčhŗ1›‚Íîš ‚Ãî‹hŗ…b‘­Påčˆŗƒ‚ÎPš ‚ÁP|„účR$’:äúč°ŗđ›‚Z䜂P䨋°ŗ…b‘~aúčĐŗƒ‚ąaœ‚¤a*†ÕIúč Ų ã›‚äIœūģIúč Õ‚ĘIœūĄIúč -‚°Iœ„éR$’ã"éøŗ[œ‚ãJ‘*i"é´U‚9iJŠqG"é(´‚ŠGœ‚€GJ„<éŝ’W…bé@´͜‚f…Ô’ģIbéh´ #šœ‚ĘIÔŠKLq鐴 #‚dLö‚ZL“ę+8”Rud’Éašé¨´‚éa6‚ßan‹¨´…b„Ģé=’W…ĮéČ´Ž‚f…ą’ģIĮéč´ #T‚ĘIąŠKLĘéĩ #‚dLĶ‚ZLõ“8ę+8”RuD’ãÚé ĩĶ‚ã‘*iÚé8ĩU‚9i„åéqG†ãCęž‚ã(‡*iCęU‚9i(„MęqG†W…Sꐞ‚f…=†ģISę #Wž‚ĘI=ūKLYę #‚dLR‚ZL“eę+8”RuS†W…qę$ Ÿ‚f…’’ģIqęPĩ #Īž‚ĘI’ŠKLtęhĩ #‚dL§‚ZLŧ“‰ę+8”RuD†ã•ęNŸøãu\Ÿ‡*i•ęUø9iu\Ÿ„ŖęqGŗ¯čˇ“lŸ”PuT”Ruˆâč„ é qˆšé„ˇéy]„ĮéÕ{ „ķéw} „nęŠ{ ųqø°ę‚œ  øƒøúƒøŸ‰ãæę€ĩô7 ‚ãĪ‘*iæę˜ĩU‚9iĪŠqGæę°ĩ‚ŠGü‚€GĪ„úęŝžã ëô{ øãudŸ‡*i ëUø9iudŸ„*ëqGˆŌę„Ũęv„æęy]„2ëŠ{ ´Ų-@ë œņĻĄō¸ĶņĻ‘’ŪWIëČĩÔĸĨ‚ūW‚ôW<’ĮâiëøĩÍĸ‚įâ‚‚Ũ⎋øĩ…b‘Xqë ļƒ‚'X ‚X5‰~a‡ë@ļéŌĄ‚ąa^‚¤aš†ÕI‡ë Ų ĮĄ‚äI^ūģI‡ë Õ‚ĘI^ūĄI‡ë -‚°I^„•ëR$‰W…•ë`ļéIĸ‚f…Ã’ģI•ë€ļ #ĸ‚ĘIÊKLžë˜ļ #‚dL˙‚ZL;“˜ė+8”Ru\žW…æėéĀĸ‚f…Y†ģIæė #‡ĸ‚ĘIYūKLėė #‚dLn‚ZL›“üė+8”Ru\„†ëy]’įōĒë°ļë¤‚ķŽ‚öō÷†TČë,2Ŗ‚+T@ūĄIČë ‚°I@’AËëØļ,Ŗ‚3A›‚)Aę†aOËë …Ŗ‚lO›„Ôëė{ „ãëh’W…ãëđļ, ¤‚f… ’ģIãëˇ #ĪŖ‚ĘI ŠKLėë(ˇ #‚dLN‚ZLŠ“ˆė+8”Ruŧ†t‰˛ė +R¤‚ƒ‰¨ū4‰˛ė ŧ˙Z‰˙M‰‚C‰¨†W…%í&,ˤ‚f…͆ģI%í #‘¤‚ĘIĶūKL+í #‚dLč‚ZLũ“;í+8”Ruŧ„Čëy]„°ė%| „Ęėō†ãøë+VĨ‚ã‡*iøë+U‚9iūqGøë+‚ŠG?‚€G„ ėŝ†ãí ›Ĩ‚ã_‡*ií U‚9i_„ íqGˆië’)ã1ė@ˇÔĻ‚;ãtŠĸ…1ė`ˇ‚ą…ŖŠō1뀎‚ ōŌ‚ōŖ’W…Sė ˇŽyĻ‚f…ō†ģISė #@Ļ‚ĘIōŠKLX돎 #‚dL‚ZL2“ßė+8”Rv„Eėŝ„iė”{ †)ãíÔÖĻ‚;ãPūĸ…킹…e„íō„cë&Vˆ1ė„#íŠ{ _5´äōPí3œĢąĄÁč´'‘Ąå§é´'‘ĄFđęĢą‘ Ąī-ë°ą‘Ą3!ė%‘—С ą¤msgí/ü‘L†fã|íîå§ø†ã_ŦŸ‚|ãz€|í…b‘­P|íčˇƒøÎP_ŦŸ‚ÁPņ„”íR$’ _—í¸î¨‚)_‚_m‰­PŸí¸™k¨‚ÎPׂÁPę†aOŸí `¨‚lOׄ¨íė{ „šíR$‹8¸˙)_‚_„đ­P†ĸãŧíīፂÕã0‚ČãNū­bŧí  ‚āb0‚ĶbN„Číö’ūãĪíP¸đNŠ‚äb‚äz‹P¸…b‘­PĪíh¸ƒ‚ÎPb‚ÁP„įíR$’:äį툸đųŠ˙Zä‚Päŋ‹ˆ¸…b‘~aįí ¸ƒ˙ąa‚¤aÔ’ÕIįí Ų ėŠ˙äIŠģIįíظ Õ˙ĘIŠĄIįíđ¸ -˙°I„˙íR$†ūãîķdĒ‚ä‚ä<€î…b‘­P‚ÎP‚ÁP…„îR$’ _î šķ Ģ‚)_ĩ‚_퉭P%î8š™ęĒ‚ÎP6‚ÁPI†aO%î ßĒ‚lO6„.îė{ „?îR$‹Xš˙)_‚_y„æī­P†ŒäHîõwĢ‚Ŧ䎂ĸäĻ€Hî…b‘­PHîpšƒ‚ÎPŽ‚ÁPģ„`îR$†ĸãcî÷ÉĢ‚Õãë˙Čãū­bcî  ‚ābë˙Ķb„oîö’ūãvø0Ŧ‚äū‚䋈š…b‘­Pvî šƒ‚ÎPū‚ÁP+„ŽîR$’:äŽîĀšøÛŦ˙Zä‚Pä[‹Āš…b‘~aŽîØšƒ˙ąa‚¤ap’ÕIŽîøš Ų ÎŦ˙äIŠģIŽîē Õ˙ĘIŠĄIŽî(ē -˙°I„ĻîR$’ŪWĩî@ēûĨ¯‚ūW ‚ôWé’ĮâÂîhē䎂į⁂ŨâĘ‹hē…b‘XÆîēƒ‚'X‚X(‰~aŲîĀēéé­‚ąa=‚¤a‹†ÕIŲî Ų Ū­‚äI=ūģIŲî Õ‚ĘI=ūĄIŲî -‚°I=„éîR$‰W…éîāēé`Ž‚f…Ô’ģIéîģ #'Ž‚ĘIÔŠKLōîģ #‚dL ‚ZLS “đ+8”RuSžW…Xđé׎‚f…q †ģIXđ #žŽ‚ĘIq ūKL^đ #‚dL† ‚ZLŗ “nđ+8”RuS„Øîy]’ã ī0ģO¯‚ãÆ ‘*i īPģU‚9iÆ ŠqG īpģ‚ŠG!‚€GÆ „īŝ†ãnđ”¯‚ã"!‡*inđU‚9i"!„zđqGˆÁî„ īįō’)ã5īģû“°‚;ã7!Šĸ…5ī°ģ‚ą…f!Šō5īĐģ‚ ō•!‚ōf!’W…WīđģŽ|°‚f…ĩ!†ģIWī #C°‚ĘIĩ!ŠKL\īŧ #‚dLĶ!‚ZLõ!“'đ+8”Rw„Iīŝ„qī”{ †ãtī+ûū°‚ã"‡*itī+U‚9i"ūqGtī+‚ŠG5"‚€G"„…īŝ†ã.đûCą‚ãI"‡*i.đU‚9iI"„:đqG†)ãDđû‰ą‚;ã^"ūĸ…Dđ‚ą…s"„Qđōˆ|í„ĩî&Vˆ5ī„BđŠ{ ô1ô1•ķđœ&´ĄÁŒ´'‘Ąå§´'‘Ą&ĶŽ´'‘ Ąá´'‘’W…ôđ ŧ˜˛‚f… "’ģIôđ@ŧ #H˛‚ĘI "ŠKL÷đXŧ #‚dLØ"‚ZL#“Xņ+8”Ru_’W… ņxŧ˜ų˛‚f…%#†ģI ņ #ž‚ĘI%#ŠKLņŧ #‚dLT#‚ZLƒ#“Gņ+8”Rw†W…eņ˜qŗ‚f…Ą#†ģIeņ #8ŗ‚ĘIĄ#ūKLkņ #‚dLļ#‚ZLã#“xņ+8”Ru_†W…ƒņ˜éŗøf…u`Ÿ’ģIƒņ¨ŧ #°ŗøĘIu`ŸŠKL†ņĀŧ #‚dLö#‚ZL#$“žņ+8”Ru_„˛đģT„Ņđ‰„Ũđ‰„ôđöĻ„1ņÉU„ņŠ{ •;ķ ņœ—ļĄÁœ´'‘Ąå§´'‘Ą&Ķž´'‘ ĄáŸ´'‘’W…ōØŧ¨ō´‚f…6$’ģIōøŧ #š´‚ĘI6$ŠKLōŊ #‚dLn$‚ZL$“hō+8”Ru_’W…ō0Ŋ¨jĩ‚f…ģ$†ģIō #1ĩ‚ĘIģ$ŠKL ōHŊ #‚dLę$‚ZL%“Wō+8”Rw†W…uō¨âĩ‚f…7%†ģIuō #Šĩ‚ĘI7%ūKL{ō #‚dLL%‚ZLy%“ˆō+8”Ru_†W…“ō¨Zļøf…u`Ÿ’ģI“ō`Ŋ #!ļøĘIu`ŸŠKL–ōxŊ #‚dLŒ%‚ZLš%“Žō+8”Ru_„ÂņÅV„áņ‰„íņ‰„ōöĻ„AōÉU„‘ōŠ{ •dķ°ōœšĄÁ ´'‘Ąå§ ´'‘Ą&Ķ M(‘ Ąá M(‘’W…ķŊcˇ‚f…Ė%’ģIķ°Ŋ #*ˇ‚ĘIĖ%ŠKLķČŊ #‚dL&‚ZL3&“xķ+8”Ru_’W…*ķčŊÛˇ‚f…Q&†ģI*ķ #ĸˇ‚ĘIQ&ŠKL0ķž #‚dL€&‚ZL¯&“gķ+8”Rw†W……ķS¸‚f…Í&†ģI…ķ #¸‚ĘIÍ&ūKL‹ķ #‚dLâ&‚ZL'“˜ķ+8”Ru_†W…Ŗķ˸øf…u`Ÿ’ģIŖķž #’¸øĘIu`ŸŠKLĻķ0ž #‚dL"'‚ZLO'“žķ+8”Ru_„ŌōƒV„ņōē„ũōē„ķöĻ„QķÉU„ĄķŠ{ ēŠ ĀĀķœ#š˜Ŋû5„]V‘—HžŊĨ~ņÁ ‘’j_Ũķ`žÁ˜š‚ƒ_b'‚y_z'ū@_ŨķY_‚O_š'†–_éķ¸š‚Ĩ_Â'’:L÷ķxžÃYŊ‚ZL÷'‚PL (’:äôžŒē˙Zä‚Pä+(‹ž…b‘~aô°žƒ˙ąa‚¤aT(’ÕIôØž Ų ē˙äIŠģIôđž Õ˙ĘIŠĄIôŋ -˙°I„!ôR$’įō!ô ŋĸŧ‚ķƒ(‚öōĄ(†TBô,ņē‚+TÁ(ūĄIBô ‚°IÁ(’AEô@ŋ,Kģ‚3Ađ(˙)A†aOEô @ģ‚lOđ(„Nôė{ „]ôh’W…]ôXŋ,Ãģ‚f…')’ģI]ôxŋ #Šģ‚ĘI')ŠKLfôŋ #‚dLI)‚ZLk)“°ô+8”Ru_’t‰Éô¨ŋ+ ŧ‚ƒ‰‰)Š4‰Éô¨ŋ ŧ˙Z‰˙M‰‚C‰‰)†W…íô,ƒŧ‚f…´)†ģIíô #Jŧ‚ĘI´)ūKLķô #‚dLÉ)‚ZLö)“õ+8”Ru_„Bôy]„Čô%| „âôō†ãnô+ Ŋ‚ã *‡*inô+U‚9i *ūqGnô+‚ŠG*‚€G *„ôŝ†ã õRŊ‚ã2*‡*i õU‚9i2*„õqGˆô€!õ ˙;ãūĸ…!õ ˙ą…„-õō„5õŠ{ ßĶ ŽŊÆŊITĶā5„‘_ŪÜåÆŊ,æßû áŊųŊITnæā5„‘_ŪÜåųŊ~æß# ž,žITĀæā5„‘_ŪÜå,žĐæßK Gž_žIT%ā5„‘_ŪÜå_žø5ßs zž’žITväā5„‘_ŪÜå’ž†äß› ­žÅžITįā5„‘_ŪÜåÅž"įßà āžøžITļįā5„‘_ŪÜåøžÆįßë ŋ+ŋITdįā5„‘_ŪÜå+ŋtį•ķPõœ!ŅĄšp´'‘Ąŋp´'‘Ąī(´'‘ ĄEP%‘ĄJP%‘ĄBĩ%‘ —ĀŋŅ™õtū5G*†čzõßŋ‚če*’˜Ŋ‘õđŋ Á‚¸Ŋ*‚ŽŊ§*’2æ õĀoĀ‚Ræų*‚Hæ1+‹Ā…b‘­P õ0Āƒ‚ÎPų*‚ÁP‡+„¸õR$’ãÃõPĀ´Ā‚ãĒ+‘*iÃõhĀU‚9iĒ+„ËõqG†ãSúųĀ‚ãõ+‡*iSúU‚9iõ+„_úqGˆ õ„Áõįō’ËŊŲõ€Ā5‚ëŊ ,‚áŊC,’„æįõ ĀšÁ‚¤æl,‚šæ¤,‹ Ā…b‘­Pįõ¸Āƒ‚ÎPl,‚ÁP -„˙õR$’ã öØĀßÁ‚ã1-‘*i öđĀU‚9i1-„öqG†ã?ú$‚ã~-‡*i?úU‚9i~-„KúqGˆįõ„ öįō’ūŊ'öÁ`ž”-‚žĖ-’Öæ5ö ÁÅ‚öæ .‚ėæC.‹ Á…b‘­P5ö8Áƒ‚ÎP .‚ÁPĢ.„MöR$†ãZö  ÂãĐ.‡*iZö U‚9iĐ.„döqG†ã)úOÂã/‡*i)úU‚9i/„5úqGˆ5ö„Xöįō’1ždöXÁ‡Ä‚Qž3/‚Gžk/’$mröpÁėÃ˙Dm‚:m”/‹pÁ…b‘ūlxöˆÁƒ‚mü/‚ m+0„‡ö7=†ã”ö 1Ä‚ãK0‡*i”ö U‚9iK0„žöqG†ãúvÄ‚ã˜0‡*iúU‚9i˜0„úqGˆrö„’öįō’džžö Á˛Å‚„žŽ0‚zžæ0’ŒäŦöĀÁÅ‚Ŧä1‚ĸä<1‹ĀÁ…b‘­PŦöØÁƒ‚ÎP1‚ÁP¤1„ÄöR$’ãŅöøÁ\Å‚ãÉ1‘*iŅöÂU‚9iÉ1„ÛöqG†ãûųĄÅ‚ã2‡*iûųU‚9i2„ úqGˆŦö„Īöįō’—žęö(ÂŨÆ‚ˇž,2‚­žd2’(įøöHÂBÆ‚Hį‘2‚>įÉ2‹HÂ…b‘­Pøö`ƒ‚ÎP‘2‚ÁP93„÷R$†ã÷ ‡Æ‚ã\3‡*i÷ U‚9i\3„%÷qG†ãįųĖÆ‚ã§3‡*iįųU‚9i§3„ķųqGˆøö„÷įō’Ęž0÷€ÂČ‚ęžŊ3‚āžõ3’Ėį=÷ ÂmĮ‚ėį44‚âįl4‹ Â…b‘­P=÷¸Âƒ‚ÎP44‚ÁPŋ4„X÷R$†ãc÷˛Į‚ãâ4‡*ic÷U‚9iâ4„k÷qG†ãĶų÷Į‚ã*5‡*iĶųU‚9i*5„ŨųqGˆ=÷„a÷įō’1žk÷ØÂ/É‚Qž?5‚Gžw5’$mv÷đ”Č˙Dm‚:m 5‹đÂ…b‘ūl|÷Âmō5‚ mo6„‹÷7=†ã–÷ŲČ‚ã6‡*i–÷U‚9i6„ž÷qG†ãĀųÉ‚ãÖ6‡*iĀųU‚9iÖ6„ĖųqGˆv÷„”÷įō’pXž÷ ÃZĘ‚Xë6‚†X#7’båŠ÷8ÃŋÉ‚‚åA7‚xåy7‹8Ã…b‘­PŠ÷PÂÎPA7‚ÁPË7„Á÷R$†ãĖ÷ Ę‚ãî7‡*iĖ÷ U‚9iî7„Ô÷qG†ãąųIĘ‚ã58‡*iąųU‚9i58„ģųqGˆŠ÷„Ę÷įō’Ęžß÷pÃ…Ë‚ęžJ8‚āž‚8’Ėįė÷ÃęĘ‚ėįÁ8‚âįų8‹Ã…b‘­Pō÷¨Ãƒ‚ÎPÁ8‚ÁPK9„øR$†ã ø/Ë‚ãk9‡*i øU‚9ik9„øqG†ã ųtË‚ã˛9‡*i ųU‚9i˛9„ĒųqGˆė÷„ øįō’1žøĀÃŦĖ‚QžĮ9‚Gž˙9’$møØÃĖ˙Dm‚:m(:‹ØÃ…b‘ūl$øđÂmz:‚ mĐ:„3ø7=†ã>øVĖ‚ãđ:‡*i>øU‚9iđ:„FøqG†ãų›Ė‚ã7;‡*iųU‚9i7;„™ųqGˆø„<øįō’ũžFøÄ×Í‚ŋL;‚ŋ„;’zįQø Ä<Í‚šįĸ;‚įÚ;‹ Ä…b‘­PQø8ă‚ÎPĸ;‚ÁP,<„iøR$†ãtø Í‚ãO<‡*itø U‚9iO<„|øqG†ã~ųÆÍ‚ã–<‡*i~ųU‚9i–<„ˆųqGˆQø„røįō’Ęž‡øXÄĪ‚ęžĢ<‚āžã<’ĖᔸxÄg΂ėį=‚âįO=‹xÄ…b‘­PšøÄƒ‚ÎP=‚ÁP­=„¨øR$†ãŗøŦ΂ãÍ=‡*iŗøU‚9iÍ=„ģøqG†ãkųņ΂ã>‡*ikųU‚9i>„wųqGˆ”ø„ąøįō’1žģø¨Ä)Đ‚Qž>‚GžD>’$mÆøĀÄŽĪ˙Dm‚:mb>‹ĀÄ…b‘ūlĖøØÄƒ‚mŗ>‚ mâ>„Ûø7=†ãæø ĶĪ‚ã?‡*iæø U‚9i?„îøqG†ãEųĐ‚ã/?‡*iEųU‚9i/?„QųqGˆÆø„äøįō’)ã ųđÄoĐ‚;ãD?Šĸ… ųÅ‚ą…f?„ųō†)ãTųĩĐ‚;ã“?ūĸ…Tų‚ą…¨?„aųō„šõ&V„×õųk„%öųk„ęöųk„0÷ųk„ß÷ųk„‡øųk„ũøĪGˆų„3ųÉU„iųŠ{ ßv¤0ŅHŅā5„…Žërhs HHŅ6ßcŅ{ŅITčãā5„‘_ŪÜå{Ņøã•Āķ°Lí œĒâš%Ąšp%´'‘Ąŋp&´'‘ĄEP'%‘ ĄJP(%‘— ŕâņlhs/Ũ¤ņrhs/Ũ¤Ĩî›84 ‘č|ĨzČ<4 ‘¤~’!ŅãLPÅ0‚Ķ‚:ŅÕ?‚0Ņũ?’ãLhÅ K¨Ō‚ũ?†kŽãL ?‹Ō‚zŽũ?ŠŠŽU€Å ?‚™Ž%@’M˜Å KĶ‚=@†kŽM ?įŌ‚zŽ=@ūŠŽ0U ?‚™Žu@ŠŽ5M°Å M‚͎@‚ڎÅ@‹°ÅéŽũ@öŽ5A’¤Ž5MĐÅ ucĶ‚¯Ž]AФŽWMčÅ v‚¯ŽĩA’× MÆ8HÕ‚Ž×íA‚× B’Ή M(ÆŅ͂ۉäBˆÃM’Ė×øM@ÆyÔ˙īׂÛ×˙C’ØøMhÆ#?&Ô˙'Ø‚Ø˙C„SN¸ũ’VMSNˆÆ#?VÔ˙yM‚eMŊD„‚N¸ũūMQV#?˙AM‚-MSE’N Æ Õ‚ŠiE‚ū‰ĄE‰ĩ‰¤NāÆcĮÔ‚ĉĄEˆO‘t‰$OĮc‚ƒ‰ŒFŠ4‰$OĮ ŧ˙Z‰˙M‰‚C‰ŒF†ĢLoV81Õ‚ēLGˆŒV„`O¸ũˆüVˆW’{Š`O0Į9¨Õ‚¤ŠĨG‚˜ŠH‘=RiOPĮ$Ō‚LRvH‚VRÖH‹hĮeR&I’ūllO€Į9ÜÕ‚m‚I‚ m—I„‰O7=’×‰O˜Į<ĸׂŽ× J‚×PJ’Ή‰O¸Į+Ö‚Ū‰'KˆĢO’Ė׹OØĮĶÖ˙īׂÛ×čK’ØąOČ#?€Ö˙'Ø‚ØčK„P¸ũ’VMP0Č#?°Ö˙yM‚eMĻL„CP¸ũūMW#?˙AM‚-MqM’ī‰bPHČeׂЇM‚ū‰ËM‰ĩ‰bPpČc!ׂĉËMˆŲP‘t‰ßP˜Čc‚ƒ‰ZNŠ4‰ßP˜Č ŧ˙Z‰˙M‰‚C‰ZN†ĢL9W0‹×‚ēLķNˆVW„Q¸ũˆwWˆŠW’{ŠQ°Č=Ø‚¤Š O‚˜ŠeO‘=R$QĐČ$Ō‚LRâO‚VRP‹čȁeReP’ūl'QÉ=6Ø‚m–P‚ mĢP„DQ7=’M҉Q ÉAaŲ‚mŅ(Q‚cŅpQ’ūã•Q8ÉÆØ‚ä.R‚ävR‹8É…b‘­P•QPɃ‚ÎP.R‚ÁP˙R„°QR$†ãģQ  Ų‚ã"S‡*iģQ U‚9i"S„ÃQqG†ã§VPŲ‚ã‰S‡*i§VU‚9i‰S„ŗVqGˆ•Q„šQįō’ũžĪQpÉAŒÚ‚ŋŸS‚ŋ÷S’zįßQ˜ÉņŲ‚šį T‚įxT‹˜É…b‘­PßQ°Éƒ‚ÎP T‚ÁPU„úQR$’ãRĐÉ6Ú‚ã$U‘*iRčÉU‚9i$U„ RqG†ãģV{Ú‚ã‹U‡*iģVU‚9i‹U„ĮVqGˆßQ„Rįō’pXRĘAˇÛ‚XĄU‚†XųU’bå)R ĘÛ‚‚å"V‚xåzV‹ Ę…b‘­P)R8Ęƒ‚ÎP"V‚ÁPõV„DRR$†ãOR aÛ‚ãW‡*iOR U‚9iW„WRqG†ãĪVĻÛ‚ãcW‡*iĪVU‚9icW„ÛVqGˆ)R„MRįō’ūŊtRXĘBâÜ‚žyW‚žąW’Öæ„RxĘGÜ‚öæÚW‚ėæX‹xĘ…b‘­P„RĘƒ‚ÎPÚW‚ÁPX„ŸRR$†ãĒR ŒÜ‚ãĸX‡*iĒR U‚9iĸX„˛RqG†ãĐUŅÜ‚ãßX‡*iĐUU‚9ißX„ÜUqGˆ„R„¨Rįō’)ãĖR°ĘA(Ũ‚;ãõXŠĸ…ĖRĐĘ‚ą…$Y„ÛRō’W…ÛRđĘBĸŨ‚f…aY’ģIÛRË #gŨ‚ĘIaYŠKLįR(Ë #‚dLY‚ZLŋY“›U+8”Ru€|’W…ķR@ËCŪ‚f…ŨY†ģIķR #áŨ‚ĘIŨYŠKLüRXË #‚dLZ‚ZL]Z“ĢU+8”Ru€|’ÛSpË<†ß‚.Û{Z’Ö5SË5õŪ‚ŽÖģZ‰W…DS¨Ë@ĶŪ‚f…ûZ†ģIDS #˜Ū‚ĘIûZŠKLMSĀË #‚dLI[‚ZL‰[“ģU+8”Ru€|‡|LYS@‚‹L§[ˆvS’RÛvSØË5cß˙uÛ‚aÛį[’M‚SøË#;@ß˙AM‚-M\ūāL“S#;˙M‚īLK\ŠĢLˆSĖ5‚ēL}\ˆßS’ÛßS@ĖCđā‚.ÛŊ\’ÖThĖ5_ā‚ŽÖī\‰W…T€Ė@=ā‚f…!]†ģIT #ā‚ĘI!]ŠKL'T˜Ė #‚dLS]‚ZL…]“‹U+8”Ru”|‡|L3T@‚‹LŖ]ˆPT’RÛPT°Ė5Íā˙uÛ‚aÛĮ]’āL\TĐĖ#;Ēā˙M‚īLë]ŠMsTđĖ#;˙AM‚-M^ŠĢLbTÍ5‚ēL3^ˆšT†)ãßUA6á‚;ãW^ūĸ…ßU‚ą…m^„īUō†W…ōUB¯á‚f…œ^†ģIōU #uá‚ĘIœ^ūKLûU #‚dL˛^‚ZLá^“V+8”RuĪ|†W…VC(â‚f…ô^†ģIV #îá‚ĘIô^ūKLV #‚dL _‚ZL9_“*V+8”RuĪ|„^QËX„wQËX„‰Q&V„ĪQųk„Rųk„fRčwūŅņî‚^č3m‚Tčkm‹Ņ…b‘­Pwū(Ņƒ‚ÎP3m‚ÁPŊm„ūR$’ãœūHŅ6ī‚ãām‘*iœū`ŅU‚9iām„¤ūqG†ãß˙{ī‚ã'n‡*iß˙U‚9i'n„é˙qGˆwū„šūįō’ũž˛ūxŅĩˇđ‚ŋ]qG†ã`S‚ãχ*i`U‚9iĻ„ `qGˆ]„4]įō’)ãX]XāAĒ‚;ã.ĻŠĸ…X]xā‚ą…]Ļ„g]ō’W…g]˜āB$‚f…šĻ’ģIg]¸ā #é‚ĘIšĻŠKLs]Đā #‚dLÉĻ‚ZLøĻ“Ë_+8”RuŒ|’W…]čāCž‚f…§†ģI] #c‚ĘI§ŠKLˆ]á #‚dLV§‚ZL–§“Û_+8”RuŒ|’Û”]á<‚.Û´§’ÖÁ]8á5w‚ŽÖô§‰W…Đ]Pá@U‚f…4¨†ģIĐ] #‚ĘI4¨ŠKLŲ]há #‚dL‚¨‚ZL¨“ë_+8”RuŒ|‡|Lå]@‚‹Lā¨ˆ^’RÛ^€á5å˙uÛ‚aÛ Š†āL^#;Â˙M‚īLRŠŠM5^ á#;˙AM‚-M„ŠŠĢL^¸á5‚ēLļŠˆk^’Ûk^āáCr‚.ÛöŠ’Ö›^â5ႎÖ(ljW…Ē^ â@ŋ‚f…ZdžģIĒ^ #„‚ĘIZĒŠKLŗ^8â #‚dLŒĒ‚ZLžĒ“ŗ_+8”Ru¤|‡|Lŋ^@‚‹LÜĒˆÜ^’RÛÜ^Pâ5O˙uÛ‚aÛĢ’Mč^pâ#;,˙AM‚-M$ĢūāLų^#;˙M‚īLHĢŠĢLî^â5‚ēLlĢˆE_†)ã`A¸‚;ãĢūĸ…`‚ą…ĻĢ„`ō†W…"`B1‚f…Õ̆ģI"` #÷‚ĘIÕĢūKL+` #‚dLëĢ‚ZLŦ“>`+8”RuĪ|†W…>`CĒ‚f…-Ŧ†ģI>` #p‚ĘI-ŦūKLG` #‚dLCŦ‚ZLrŦ“Z`+8”RuĪ|„č[ËX„\ËX„\&V„[\ųk„Ĩ\ųk„ō\ßŗĄ š IT, ā5„‘_ŪÜåš +‘•>$ā Xœ8+’, –öŦí%…ŦĄžĨî´'‘Ą™Ņî´'‘ĄŠ ī8+‘Ąī=+‘ —°â-+™”ķ%ĻŦĨæôH‘‘´’ī÷ų Čâđ"‚øÆŦ‚ø:­ūöMų äN‚N:­‚NÆŦ†ÂMų  K"‚ŅM:­ūJų  Õ‚J:­ūīIų  -‚ūI:­„ f1’ĪGc āâö<#‚īGŽ­‚åGæ­’Îäp ãĄ"‚î䎂ääGŽ‹ã…b‘­Pp ヂÎPŽ‚ÁPĨŽ„‹ R$†ã–  æ"‚ãČŽ‡*i–  U‚9iČŽ„ž qG†ãØ +#‚㯇*iØ U‚9i¯„ä qGˆp „” įō’‹ ŧ 8ã÷ $‚Ģ $¯‚Ą €¯†ãß Ē#‚ã´¯‡*iß U‚9i´¯„į qG†ãà ī#‚ã*ià U‚9iî¯„Ņ qGˆÉ „Ô A„Ũ įō’pXį Xã÷5%‚X°‚†X;°’båō xãš$‚‚åY°‚xå‘°‹xã…b‘­Pō ãƒ‚ÎPY°‚ÁPī°„ R$’ã °ãß$‚ãą‘*i ČãU‚9ią„ qG†ã" $%øãuLŸ‡*i" Uø9iuLŸ„0 qGˆō „ įō’zû8 āãų`&‚šûLą‚û„ą’âčE äÅ%‚é­ą‚øčåą‹ä…b‘­PE  䃂ÎP­ą‚ÁPC˛„] R$’ãh @ä &‚ãf˛‘*ih XäU‚9if˛„p qG†ã O&‚ã ˛‡*i U‚9i ˛„ qGˆE „f įō’ĪG| päų‹'‚īGĩ˛‚åGí˛’Îä‰ äđ&‚îäŗ‚ääNŗ‹ä…b‘­P ¨äƒ‚ÎPŗ‚ÁPŦŗ„ R$†ã¨  5'‚ãĖŗ‡*i¨  U‚9iĖŗ„° qG†ãū z'‚ã´‡*iū U‚9i´„ qGˆ‰ „Ļ įō’‹ Ę ĀäúY(‚Ģ ´‚Ą G´†ãí ų'‚ã{´‡*ií U‚9i{´„õ qG†ãé >(‚㨴‡*ié U‚9i¨´„÷ qGˆ× „â A„ë įō’ĪGõ āäú„)‚īGŊ´‚åGå´’Îä øäé(‚îäĩ‚ää+ĩ‹øä…b‘­P 僂ÎPĩ‚ÁPbĩ„ R$†ã#  .)‚ã…ĩ‡*i#  U‚9i…ĩ„+ qG†ã™ s)‚ãŖĩ‡*i™ U‚9iŖĩ„§ qGˆ „! įō’)ã6 0åör*‚;ã¸ĩŠĸ…6 På‚ą…ÚĩŠō6 på‚ ōüĩ‚ōÚĩ’W…X åŽ[*‚f…ļ†ģIX  #"*‚ĘIļŠKL] ¨å #‚dL:ļ‚ZLXļ“— +8”Rv„J ŝ„n ”{ †)ãĒ ö¸*‚;ãvļūĸ…Ē ‚ą…‹ļ„ˇ ō„H &V„W .‚㚸‡*iÄU‚9iš¸„ÎqGˆC„iįō’3ø—Pæ÷/˙Sø‚Iøθ†ãģš.‚㚇*iģU‚9iš„ÃqG†ãū.øãuHŸ‡*iUø9iuHŸ„qGˆĨ„°z„šįō’pXÃhæ÷D0‚XIš‚†X‘š’båΈæŠ/‚‚寚‚xå÷š‹ˆæ…b‘­PΠ惂ÎP¯š‚ÁPb焿R$’ãņĀæî/‚ã’ē‘*iņØæU‚9i’ē„ųqG†ãũ30‚ãŲē‡*iũU‚9iŲē„ qGˆÎ„īįō’zûđæųo1‚šûî炐û6ģ’âč!įÔ0‚é_삸č§ģ‹į…b‘­P!0įƒ‚ÎP_ģ‚ÁPŧ„9R$’ãDPį1‚ãBŧ‘*iDhįU‚9iBŧ„LqG†ãė^1‚ã‰ŧ‡*iėU‚9i‰ŧ„øqGˆ!„Bįō’ĪGX€įųš2‚īGžŧ‚åGæŧ’Îäe į˙1‚îäŊ‚ääWŊ‹ į…b‘­Pk¸įƒ‚ÎPŊ‚ÁPĩŊ„yR$†ã„ D2‚ãÕŊ‡*i„ U‚9iÕŊ„ŒqG†ãŲ‰2‚㞇*iŲU‚9iž„åqGˆe„‚įō’3øĢĐįúd3˙Sø‚Iø$ž†ãŅ3‚ãXž‡*iŅU‚9iXž„ŲqG†ã¯I3‚ã…ž‡*i¯U‚9i…ž„ŊqGˆģ„Æz„Īįō’ĪGŲčįú4‚īGšž‚åGž’Îääčô3‚îäāž‚ääŋ‹č…b‘­Päčƒ‚ÎPāž‚ÁP?ŋ„üR$†ã 94‚ãoŋ‡*i U‚9ioŋ„qG†ã‰~4‚ãŋ‡*i‰U‚9iŋ„—qGˆä„įō’)ã8čö}5‚;ãĸŋŠĸ…X肹…ÄŋŠōxč‚ ōæŋ‚ōÄŋ’W…<˜čŽf5‚f…†ģI< #-5‚ĘIĀŠKLA°č #‚dL$Ā‚ZLBĀ“‡+8”Rv„.ŝ„R”{ †)ãšöÃ5‚;ã`Āūĸ…š‚ą…uĀ„§ō„&V„)‚NÚ­Å‚AÚØÅ˙4Úū‚ģæc@‚‚Ãģ­Å‚ļģØÅ˙Šģūģæc@_‚Bģ­Å‚5ģØÅ˙(쀿c@QģÆūa:æc@V‚˜:­Å‚‹:HÆ˙~:€æc@§:šÆū¸ēd‚ÔēÎÆ‚ĘēđƆĀSdĪ•>‚ŲSĮ‚ĪS!Į„dūūĀSd Ī‚ŲS4Į‚ĪSIĮ„dū’¸ē&dxęWN?‚Ôē^Į˙Ęē’ĀS&dęĪ!?‚ŲS^Į˙ĪS„4dūŠĀS9d¨ęĪ‚ŲS€Į˙ĪS„Edū’L`EdČęWZ@‚^`ĸĮ’W…EdčęĪå?‚f…ÄĮ’ģIEdë #Ŧ?‚ĘIÄĮŠKLHd ë #‚dLæĮ‚ZLČ“rd+8”Ru_ŠW…Xd@ëĪ‚f…&ȆģIXd # @‚ĘI&ČŠKL^dXë #‚dLHČ‚ZLjČ“|d+8”Ru_ˆ%f—pë>Kîj;^H‰™ģ:`H‰ˆČ™ÅNa‚ŊČ™ofb‚éČ’ļ:~dë_4A‚Ü:°É‚Ī:čÉ‚Å:Ę‹ëë:@ʆXc~d A˙gc˙gcūēˆd“‚%ēuĘ˙璐d¸ë`ZA˙:‚-­Ę’šŧ¤dāëaáA‚ŠŧõĘ˙ŗŧ‹āë‡qŧ¤dĒ‚|ŧ!Ë˙ˆŧ‡Fŧ¤dMļ‚Uŧ!Ë‚kŧ5Ë‚_ŧIË„­d%| ’ †ŗdøëiíB‚´†]Ë‚ˆqË‚†´Ë‘d†ŗdøëMŊ‚s†]Ë‚‰†qË‚}†´Ë‘::ģdė ‚‚V:LĖ‚L:Ė†W…ėfĪŪB‚f…ΈģIėf #ĨB‚ĘIÎĖūKLôf #‚dLâĖ‚ZLÍ“g+8”Ru`ˆÅdˆÔd’ˇŲÚd(ėr,E˙Ú‚÷Ų"Í˙ęŲ‚ŨŲ•ÍŠ_ŲÚd(ė).˙ŦŲ‚ŸŲ"Í˙’Ų‚…Ų•ÍŠŲÚd(ė)‚CŲ"Í˙7Ų‚+Ų•Í‹(ėQŲ¨Í‘ú:Úd(ė)~‚/;"Í˙#;‚;΋(ė=;9Î‰ĶØčdPė)K–D‚üØd΂đؚΑ::ėdhėS‚V:ēÎ˙L:†W…*gĪˆD‚f…ãΆģI*g #OD‚ĘIãÎūKL/g #‚dLö΂ZL#Ī“?g+8”Ru`ˆödˆež#ŖJg)PE˙CŖ‚7Ŗ6Ī€Jg‡öĸJg~˙Ŗ‚ ŖVĪ‘ÕĸVg€ėg‚éĸ¤Īˆbg„Jg–‚ „ngĒ‚ „ég°‚ ’ˇŲ$e˜ėyoG˙Ú‚÷ŲĐĪ‚ęŲĐ˙ŨŲŠ_Ų$e˜ė).˙ŦŲ‚ŸŲĐĪ‚’ŲĐ˙…ŲŠŲ$e˜ė)‚CŲĐĪ‚7ŲĐ˙+Ų‹˜ėQŲVĐ‘ú:$e˜ė)~‚/;ĐĪ‚#;Đ˙;‹˜ė=;šĐ‰ĶØ0eĀė)KŅF˙üØ‚đØæĐ‘::4eØėS˙V:‚L:҆W…™fĪÃF‚f…E҆ģI™f #ŠF‚ĘIEŅūKLžf #‚dLXŅ‚ZL…Ņ“Žf+8”Ru`ˆ>eˆMež#Ŗšf)PKG‚CŖ˜Ņ‚7ŖļŅ€šf‡öĸšf~‚Ŗ˜Ņ‚ ŖâŅ‘ÕĸÅfđėg‚éĸ;ŌˆŅf„šf–‚ „ŨfĒ‚ „¯g°‚ ’RŖoeíˆI˙‡Ŗ‚{ŖgŌ‚oŖ‡Ō‘#Ŗoeí—˙CŖ˙7Ŗ‹í‘öĸoeí~˙Ŗ‚ ŖšŌ‘Õĸre íg‚éĸÃŌ‘L`re í]‚^`ÃŌ’W…reHíĪH‚f…Ķ’KLre`í #pH‚dLOĶ‚ZL~Ķ“Ģe+8”RuLūģI™e #‚ĘIĶŠW…ˆexíĪ‚f…‘͆ģIˆe #ČH‚ĘI‘ĶŠKLeí #‚dLÉĶ‚ZLëĶ“Öe+8”RuL†UĸãeŠ—I˙dĸ˙zĸ‚nĸ Ô€ãe‡ ĸęe ˛˙+ĸ˙Cĸ‚7ĸÔ‡õĄęe Mš˙ĸ˙ĸ‚ĸÔ„ķe”{ ’Uĸg¨í…"J˙dĸ˙zĸ‚nĸ1Ô‹¨í‡ ĸg˛˙+ĸ˙Cĸ‚7ĸEÔ‡õĄgMš˙ĸ˙ĸ‚ĸEÔ„"g”{ †‘goJ˙‘‚*‘Yԇ퐁gMĀ˙ü‚‘YÔˆŒg†RŖÂg"„K˙‡Ŗ˙{Ŗ˙oŖ‡#ŖÂg"—˙CŖ˙7Ŗ€Âg"‡öĸÂg"~˙Ŗ‚ ŖmÔ‘ÕĸĖgĀíg‚éĸ°ÔˆØg„ g–‚ „*gĒ‚ „wg–‚ „Ĩg°‚ „¸g–‚ „ōg–‚ „-fŠ{ „LfŠ{ ~9ßh­gK}Kā5„ ëëp‹א÷XKķWhkœ™K8LøgK‘øqK‘’W…5hØíŽ#L‚f…ÜÔ†ģI5h #ęK‚ĘIÜÔŠKL;hđí #‚dLúÔ‚ZL4Õ“ih+8”R‘_„(hŝ„Lh”{ 䑁JLŖLā5„C:Ū—_ŖLŪа‚¨LŪâGƒ´'ŪE„´'Ū}o…Ī­Ūy†:ô1ô1÷8LÔ¸jœÉLņNøJL‘øTL‘øaL‘ønL‘ ø{L‘øˆL‘ø•L‘’ûęëî2M‚ëRÕ‚ ërÕ’ûę î\M‚ë”Õ‚ ëŗÕ†%ël †M‚4ëÕÕ„vXK’%ëy8M‚4ëÖ„†XK†W…‰(N‚f…/Ö’ģI‰Pî #īM‚ĘI/ÖŠKLŒhî #‚dLDÖ‚ZLqÖ“¤+8”Rug†W…¤ N‚f…„Ö†ģI¤ #gN‚ĘI„ÖūKLŠ #‚dL—Ö‚ZLÄÖ“ļ+8”RugˆŗˆÁ„Ö%| ˆë„%| ˆˆ>„ŋŠ{ „Ë”{ „ņ”{ ßŨO?Oā5„AAŪаV ´'ŪâGV ´'ŪīTW øŪķJX ÷ņNP3Hœ[O×RøO‘ø O‘øO‘ø$O‘ ø1O‘’ûęZ€î^ ˛O‚ë×Ö‚ ë÷Ö†Iëi^ P‚Xë×ūoŠi‚~Š×‡PŠi}‚_Š×’cë~ î^ `P‚rë;׊ŲĒ~ î‚čĒ;בēĒ~ î}‚ÉĒ;׆}ëÔ^ 2Q‚Œë]×ūĖĢÔŠ‚ÛĢ]ׇXĢ× ˙gĢ‚}ĢrׂqĢŽ×€×‡#ĢÛ ˛˙.Ģ‚FĢĄ×‚:ĢŊׇøĒÛ Mš˙Ģ‚ĢĄ×‚ĢŊׄä”{ †Ąëį^ R‚°ëĐ×ūbĒįŠ‚qĒĐׇîŠę ˙ũŠ‚ĒåׂǨ€ę‡šŠî ˛˙ÄŠ‚ÜŠØ‚ĐŠ0Ø‡ŽŠî Mš˙Š‚ŗŠØ‚§Š0Ø„÷”{ ’%ëú¸î^ .R‚4ëCØ„XK†W…  ^ ĻR‚f…p؆ģI  #mR‚ĘIpØūKL #‚dL…Ø‚ZLšØ“+8”Rwˆ2„J%| ˆZˆˇ„*Š{ „8”{ 䜓éRūRā5„C:āÖš%…×RÖ$PŸœSWøéR‘’%ë†Đî“õS‚4ë­ØŠXK†Đî‚qK騂gK­Ø’W…øîŽßS‚f… Ų’ģIī #ĻS‚ĘI ŲŠKL(ī #‚dLLŲ‚ZLnŲ“x+8”Rug„šŝ„2”{ ’%ë§Hī“ĮT‚4ëŦŲŠXK§Hī‚qKčŲ‚gKŦŲ’W…É`īŽąT‚f…Ú†ģIÉ #xT‚ĘIÚŠKLŅxī #‚dLWÚ‚ZLyÚ“h+8”Rug„¸ŝ„ä”{ ’W…įī“?U‚f…ˇÚ†ģIį #U‚ĘIˇÚŠKLí¨ī #‚dLæÚ‚ZL/Û“X+8”Rug’W…ņĀU‚f…MÛ†ģIņ #~U‚ĘIMÛŠKLöØī #‚dLkÛ‚ZL§Û“H+8”Rug’%ë|đī“áU‚4ëÅÛ„‰XK†W…•“YV‚f…ōÛ†ģI• # V‚ĘIōÛūKL› #‚dLÜ‚ZL4Ü“§+8”Rug†W…§“ŅV‚f…G܆ģI§ #˜V‚ĘIGÜūKLŦ #‚dLZÜ‚ZL‡Ü“¸+8”Rug†%ëדûV‚4ëšÜ„áXKˆ†„Ê{ ˆŅáŸô0WIT ëxS%:ß?WTWā5„AAāÖš%÷0WéRđ“œpW>]ø?W‘†¤*d ķW˙>¤‚3¤ĮÜūüy*(˙3z˙&z‚zÜÜūW" Ŧ‚$W'Ũˆ/„7”{ ’}ëQđb ÅX‚ŒëEŨŠĖĢQđŠ‚ÛĢEŨ‡XĢZ ˙gĢ‚}ĢjŨ‚qĢŒŨ€Z‡#Ģ^ ˛˙.Ģ‚FĢŸŨ‚:ĢÁŨ‡øĒ^ Mš˙Ģ‚ĢŸŨ‚ĢÁŨ„g”{ †Ąëjb —Y‚°ëÔŨūbĒjŠ‚qĒÔŨ‡îŠp ˙ũŠ‚ĒėŨ‚ĒŪ€p‡šŠt ˛˙ÄŠ‚ÜŠ!Ū‚ĐŠCŪ‡ŽŠt Mš˙Š‚ŗŠ!Ū‚§ŠCŪ„}”{ ’%ë€ đb iZ‚4ëVŪŠXK€ đ‚qKžŪ‚gKVŪ’W…Ĩ@đŽSZ‚f…žŪ’ģIĨXđ #Z‚ĘIžŪŠKL§pđ #‚dLÜŪ‚ZLūŪ“+8”Rug„”ŝ„Ŋ”{ ’W…Ŋđb áZ‚f…ß’ģIŊ°đ #¨Z‚ĘIߊKLÉĐđ #‚dL^ß‚ZL€ß“Õ+8”Rug†}ëb ŗ[‚ŒëžßūĖĢŠ‚ÛĢžß‡XĢ ˙gĢ‚}Ģļß‚q̨߀‡#Ģ# ˛˙.Ģ‚FĢëß‚:Ģ ā‡øĒ# Mš˙Ģ‚Ģëß‚Ģ ā„,”{ †Ąë/b …\‚°ë āūbĒ/Š‚qĒ ā‡îŠ5 ˙ũŠ‚Ē8ā‚ĒZā€5‡šŠ9 ˛˙ÄŠ‚ÜŠmā‚ĐŠā‡ŽŠ9 Mš˙Š‚ŗŠmā‚§Šā„B”{ ’%ëHčđb ¯\‚4ëĸā„VXK†W…Y*b ']‚f…Ōā†ģIY #î\‚ĘIŌāūKLb! #‚dLęā‚ZLá“r+8”RugˆQˆ„{Š{ ÷0Wßõ(œZ]t]ø?W‘ˆĒ„˛”{ á$úĀ]I_Tp%:Ū‹|9=:Ūßw9=:Ūá;97:âîB@_ ßĖ’Ī]^ā5„žcë__nŽë__sŽ´'âîj;“`“ü§’ph’œ^āeû5„d‘–žGՌ*áĸ__xGāe‘—ņĩ_™ũ Q%:_á†}z–h LČ^‚‘z}ႊz¨á‚zŊá‡Az–h MŊ‚Pz}á‚fz¨á‚ZzŊáŠŦ­hņS‚ãĐá‚Öâ‚ÉAâŠŧŊ­hņ‚‚ũŊĐá‚đŊâ‚ãŊAâŠ;Ŋ­hņ_‚|ŊĐá‚oŊâ‚bŊAâ‹ņ‹Ŋ_âŠt]­hņV‚ĸ]Đá‚•]₈]Aâ‹ņą]â„ÕhŒ} €āh"îj;^`“™ģ:``“Ĩâ™ÅNaĨŒęâ™ofbĨŒã’Ā]āh0ņ_‰`øæ]ō{‚ Ų]øĪ]V‹0ņõ]|ã’ŖcāhHņb`˙˛c˙˛cŠēįh`ņ“ø%ēō!`˙ē’+ühxņ`¯`˙U‚Hĩã’Ôži˜ņa2a‚ãžŨã˙íž‹˜ņ‡ĢžiĒ‚ļžä˙ž‡€žiMļ‚žä‚Ĩžä˙™ž„i%| †}z+ii•a‚‘z-䂊zK䂝z^ä‡Az+iMŊ‚Pz-ä‚fzKä‚Zz^ä’L5i°ņrhc‚™ä‚ŒŸä‚Éä‚rįäŠô5i°ņ).‚Aä‚4Ÿä‚'Éä‚įäŠŖ5i°ņ)‚ØŸä‚ĖÉä‚Āįä‹°ņæå‘a5i°ņ)~‚–Ÿä‚ŠÉä‚~įä‘5i°ņ)]‚SŸä‚FÉä‚9įäŠÍ5i°ņŌ‚Ÿä‚Éä‚ôįäŠn5i°ņ˛‚¯Ÿä‚ĸÉä‚•įä‹°ņžåŠ"5i°ņŒ‚PŸä‚CÉä‚6įä‹°ņ_%å„ĪiŒ} ’LFiČņy;e‚™[傌y傪å‚rÃåŠôFiČņ).‚A[å‚4yå‚'Ŗå‚ÃåŠŖFiČņ)‚Øyå‚ĖŖå‚ĀÃå‹Čņæáå‘aFiČņ)~‚–y傊Ŗå‚~Ãå‘FiČņ)]‚Syå‚FŖå‚9ÃåŠÍFiČņŌ‚y傪å‚ôÃåŠnFiČņ˛‚¯yå‚ĸŖå‚•Ãå‹ČņžáåŠ"FiČņŒ‚Pyå‚CŖå‚6Ãå‹Čņ_æ„ĢiŒ} ūîŠYiŠ‚ũŠ7æ‚ĒJæ‚Ēeæ€Yi‡šŠ]i ˛‚ÄŠxæ‚ÜŠ‹æ‚ĐŠĻæ‡ŽŠ]i Mš‚Šxæ‚ŗŠ‹æ‚§ŠĻæ„fi”{ N:áMú1fI_Tp %Ū‹|9Ž'Ūßw9Ž'Ūá;9Æ:âîB@_ ßߜ@fufā5„7dë__nŽ—ë__sŽ´'âîj;“süēœjzœfQnû5„cd‘–žG薹æĸ__xGQn‘—čņ&h™ũ Q %îæ†L{2j L9g‚`{ į‚x{7į‚l{lį‡{2j MŊ‚{ į‚5{7į‚){lįŠJjōS‚Hį‚;Îį‚.čŠŸŋJjō‚‚āŋį‚ĶŋÎႯŋčŠŋJjō_‚_ŋį‚RŋÎį‚Eŋč‹ōnŋ9čŠåeJjōV‚fį‚fÎį‚ųeč‹ō"fYč„mjŒ} €zjîj;^s™ģ:`sč™ÅNa¸–Äč™ofb¸–îč’1fzjō_úhøWfō{‚ Jfø@fV‹ōffVé†dzjĶh˙,d˙,dūēj“ø%ēō’h˙璐’j0ō` i˙ē‚­•é’ˇĀĸjXōaŖi‚ÆĀŊé˙ĐĀ‹Xō‡ŽĀĸjĒ‚™Āæé˙Ĩ‡cĀĸjMļ‚rĀæé‚ˆĀųé˙|Ā„Žj%| †L{Áj ij‚`{ ę‚x{+ę‚l{Kę‡{Áj MŊ‚{ ę‚5{+ę‚){Kę’ąÍjxōrŲk‚ūyę‚ņ—ę‚äÁę‚×ßęŠYÍjxō).‚Ļyę‚™—ę‚ŒÁę‚ßęŠÍjxō)‚=—ę‚1Áę‚%ßę‹xōK ë‘ÆÍjxō)~‚û—ę‚īÁę‚ãßꑁÍjxō)]‚¸—ę‚ĢÁꂞßęŠ2ÍjxōŌ‚s—ę‚fÁę‚YßęŠĶÍjxō˛‚—ę‚Áę‚úßę‹xō# 늇ÍjxōŒ‚ĩ—ꂨÁę‚›ßę‹xōÄ+ë„RkŒ} ’ąÖjōyŦm‚ūaë‚ņë‚äŠë‚×ÔëŠYÖjō).‚Ļa낙낌Šë‚ÔëŠÖjō)‚=ë‚1Šë‚%Ô닐ōKōë‘ÆÖjō)~‚ûë‚īŠë‚ãÔ둁Öjō)]‚¸ë‚ĢŠë‚žÔëŠ2ÖjōŌ‚së‚fŠë‚YÔëŠĶÖjō˛‚낊ë‚úÔ닐ō#ō늇ÖjōŒ‚ĩ남Šë‚›Ô닐ōÄė„3kŒ} ūXĢíjŠ‚gĢHė‚}Ģ[ė‚qĢvė€íj‡#Ģņj ˛‚.̉ė‚FĢœė‚:̎뇸Ēņj Mš‚̉ė‚Ģœė‚̎ė„új”{ Ō:ß‘en}nā5„dë__x‘}nŽ:ß2›‘nŠnā5„cdë__x‘Šn2;ü}!‡œÆn9pû5„AA‘–ņw %:Ęė’VnÔ¸ōx {o‚oní‚en/í†}zÜ •po‚‘zq킊z†í‚z›í‡AzÜ MŊ‚Pzqí‚fz†í‚Zz›í„*^†dōy Ĩo‚,dŽí‚,dŽíŠ‚núØōy ‚›nđí‚‘n*î†L{•-p‚`{lî‚x{î‚l{–î‡{MŊ‚{lî‚5{î‚){–î„Bufávú…pI_TpP;Ū‹|9ôBŪßw9ôBŪá;9îBâîB@_ ßäČ”pÉpā5„‚dë__nŽÃë__sŽ´'âîj;“xÉüŋȐk’œápĨxû5„Žd‘–žGíÂĩîĸ__xGĨx‘—ķzr™ũ QP;ę|ļk Lq‚”|ī‚Ŧ|3ī‚ |Hī‡D|ļk MŊ‚S|ī‚i|3ī‚]|HīŠöüÍkķS‚-ũ[ī‚ ũŒī‚ũĖīŠ‚ÁÍkķ‚‚ÃÁ[ī‚ļÁŒī‚ŠÁĖīŠÁÍkķ_‚BÁ[ī‚5ÁŒī‚(ÁĖī‹ķQÁęīŠ9pÍkķV‚gp[ī‚ZpŒī‚MpĖī‹ķvp đ„õkŒ} €l"îj;^xəģ:`xÉ0đ™ÅNaŊÂuđ™ofbŊŸđ’…pl0ķ_NsøĢpō{‚ žpø”pV‹0ķēpņ’hdlHķ's˙wd˙wdŠēl`퓸%ēōær˙ē’Uũlxķ`ts˙ũ‚rũ@ņ’šÂ2l˜ķa÷s‚ŠÂhņ˙ŗÂ‹˜ķ‡qÂ2lĒ‚|‘ņ˙ˆÂ‡FÂ2lMļ‚U‘ņ‚k¤ņ˙_„>l%| †€|KliZt‚”|¸ņ‚Ŧ|Öņ‚ |éņ‡D|KlMŊ‚S|¸ņ‚i|Öņ‚]|éņ’–üUl°ķr-v‚ãü ō‚Öü*ō‚ÉüTō‚ŧürōŠ>üUl°ķ).‚‹ü ō‚~ü*ō‚qüTō‚dürōŠíûUl°ķ)‚"ü*ō‚üTō‚ ürō‹°ķ0üō‘ĢûUl°ķ)~‚āû*ō‚ÔûTō‚Čûrō‘fûUl°ķ)]‚û*ō‚ûTō‚ƒûrōŠûUl°ķŌ‚Xû*ō‚KûTō‚>ûrōŠHÃUl°ķ˛‚‰Ã*ō‚|ÃTō‚oÃrō‹°ķ˜ÃōŠÚÂUl°ķŒ‚Ã*ō‚ûÂTō‚îÂrō‹°ķÃ°ō„īlŒ} ’–üflČķyx‚ãüæō‚Öüķ‚Éü.ķ‚ŧüNķŠ>üflČķ).‚‹üæō‚~üķ‚qü.ķ‚düNķŠíûflČķ)‚"üķ‚ü.ķ‚ üNķ‹Čķ0ülķ‘ĢûflČķ)~‚āûķ‚Ôû.ķ‚ČûNķ‘fûflČķ)]‚û킐û.ķ‚ƒûNķŠûflČķŌ‚Xûķ‚Kû.ķ‚>ûNķŠHÃflČ힂‰Ãķ‚|Ã.ķ‚oÃNķ‹Čķ˜ÃlķŠÚÂflČķŒ‚Ãķ‚ûÂ.ķ‚îÂNķ‹ČķÃŒķ„ËlŒ} ū&­ylŠ‚5­Âķ‚K­Õķ‚?­đķ€yl‡ņŦ}l ˛‚üŦô‚­ô‚­1ô‡ÆŦ}l Mš‚ÕŦô‚ëŦô‚ßŦ1ô„†l”{ Cß7ĮšxŅxā5„Ždë__x‘ŅxeCü˙ŽPOœîx yû5„>[‘–@@{ P;DôŠĒxcčķ| ‚Ãx|ô‚šxŠô†€|k •”y‚”|ëô‚Ŧ|õ‚ |õ‡D|k MŊ‚S|ëô‚i|õ‚]|õ„šÉpĻkķ  #œģyãyû5„­‹‘Ą@@ķ P;‘„žÖxē  ĐRœūy0zû5„­‹‘Ą@@ P;‘„÷Ō„ yē*0RœKz}zû5„­‹‘Ą@@P;‘„WŌ„{ yßâĘŒzązā5„\‡ŪšČrązŪęTrļz–;–;ßčÉĘzīzā5„t ŪšČDīzŪęTDôz–;–;ßšĖ{{ā5„\‡üØžĢœ+{(‚û5„ļH‘—ô‚ĨčPü(‚ȡŸ†6T¤ũÖ{øETȡŸūÕI¤ 6øäIȡŸūģI¤ ÕøĘIȡŸūĄI¤ -ø°IȡŸ‹(ô˜posūĘ5(õ’AAÛ@ô'|‚gAŽõ‚ZAŪõ‚PAūõˆî’AAîXôŋ|‚gA&ö‚ZAHö‚PAfö’ĨNîpô ŗ¸|‚ËNŽö‚žNHö‚´Nfö’ÕIîˆô C­|‚äIfö„N<$ˆ’}z% ôß‚Ŗzļö‚–z_÷‚ŒzŊ÷’ģz@Āôs,~‚ázfø‚Ôzöø‚Ęz;ų†W…ÃE}‚f…pų†ģIà #d}‚ĘIpųūKLÉ #‚dL…ų‚ZL˛ų“Ø+8”Rud†W…âE~‚f…Åų’ģIâāô #Ü}‚ĘIÅųŠKLåøô #‚dLÚų‚ZLú“ú+8”Rudˆ^ˆl„tîĢ’ųztõsv‚{ú’5‡Ž8õ´~‚N‡Rú‚D‡ˆú„œčČ’W…œXõ´÷~‚f…ŋú’ģIœxõ #ž~‚ĘIŋúŠKLŸõ #‚dLŨú‚ZL˙ú“(+8”RuZ†W…´o‚f…û’ģI°õ #6‚ĘIûŠKLČõ #‚dL2û‚ZL_û“+8”RuZˆŽ†”ėzs ‚­ėrû‚Ŗė‘û’slāõsĘ‚‚lķû„)cÄ„<%| „ą”{ ’‘[ŗøõ˙‚ [#ü’W…Įöw€‚f…Cü’ģIĮ0ö #>€‚ĘICüŠKLĐHö #‚dLeü‚ZL‡ü“7+8”Rv†W…Ôf…Ĩü†ģIÔ #ĘIĨüūKLÚ #‚dLēü‚ZLĪü“é+8”Rv†W…V#g‚f…âü†ģIV #.‚ĘIâüūKL\ #‚dL÷ü‚ZL$ũ“h+8”RuZ†W…‡߁‚f…7ũ†ģI‡ #ρ‚ĘI7ũūKL #‚dLLũ‚ZLyũ“™+8”RuZ„ÍÍ„ %| „Į y„Õ{ „w} „„”{ „qŠ{ ô1áŸúy‚I_Tp @Ū‹|9Ļ@Ūßw9Ļ@Ūá;9š@âîB@_ ßħˆ‚Ŋ‚ā5„Vë__nŽũĄë__sŽ´'âîj;“X¨üŸ§0m’œÕ‚™Šû5„Ë}‘–žGÍĄŒũĸ__xG™Š‘—`ön„™ũ Q @Áũ†}Vm Lƒ‚2}ßũ‚J} ū‚>}ū‡â|Vm MŊ‚ņ|ßũ‚} ū‚û|ūŠvmmxöS‚­2ū‚ cū‚“ŖūŠĘÅmmxö‚‚ Æ2ū‚ūÅcū‚ņÅŖūŠIÅmmxö_‚ŠÅ2ū‚}Åcū‚pÅŖū‹xö™ÅÁūŠ-‚mmxöV‚[‚2ū‚N‚cū‚A‚Ŗū‹xöj‚áū„•mŒ} € m"îj;^X¨™ģ:`X¨˙™ÅNaĄL˙™ofbĄv˙’y‚ mö_B…øŸ‚ō{‚ ’‚øˆ‚V‹öŽ‚Ū˙’Ļ• m¨ö…˙ĩ•˙ĩ•Šē§mĀö“ø%ēōڄ˙ē’ģŧmØö`h…˙储’âÆŌmøöaë…‚ņÆ?˙ûÆ‹øö‡šÆŌmǂįh˙ĐÆ‡ŽÆŌmMļ‚Æh‚ŗÆ{˙§Æ„Ūm%| †}ëmiN†‚2}‚J}­‚>}‡â|ëmMŊ‚ņ|‚}­‚û|Ā’õm÷r!ˆ‚cã‚V‚I+‚<IŠžõm÷).‚ ã‚ū‚ņ+‚äIŠmõm÷)‚ĸ‚–+‚ŠI‹÷°g‘+õm÷)~‚`‚T+‚HI‘æõm÷)]‚‚+‚IŠ—õm÷Ō‚Ø‚Ë+‚žIŠ8õm÷˛‚y‚l+‚_I‹÷ˆgŠėõm÷Œ‚‚ +‚I‹÷)‡„nŒ} ’n(÷yô‰‚cŊ‚VÛ‚I‚<%Šžn(÷).‚ Ŋ‚ūÛ‚ņ‚ä%Šmn(÷)‚ĸÛ‚–‚Š%‹(÷°C‘+n(÷)~‚`Û‚T‚H%‘æn(÷)]‚Û‚‚%Š—n(÷Ō‚ØÛ‚Ë‚ž%Š8n(÷˛‚yÛ‚l‚_%‹(÷ˆCŠėn(÷Œ‚Û‚ ‚%‹(÷)c„knŒ} ūÅŽnŠ‚ÔŽ™‚ęŽŦ‚ŪŽĮ€n‡Žn ˛‚›ŽÚ‚ŗŽí‚§Ž‡eŽn Mš‚tŽÚ‚ŠŽí‚~Ž„&n”{ ˇ@ßĻ­ŠŊā5„Ë}ë__x‘ŊAü(@[œâŠ´‹û5„.H‘Ģenv´ @’žŠ^H÷š—‹‚ˇŠS‚­Š†}f •Œ‹‚2}Ī‚J}å‚>}ú‡â|f MŊ‚ņ|Ī‚}å‚û|ú„’Ŋ‚ūũƒš‚  ßÄËŲ‹ā5„Kíëp‹ÜA…´‹=cĐnCœõ‹ŒøË‘ø͋‘„ônŝášô0ŒITJëxS5AáĶôNŒITPëxS @ߌ¸]ŒrŒā5„ļHāÖš%…NŒ›} ÕœŽŒ}™ø]Œ‘†gtŅXÃ-˙t‚„tHū"tŅX(˙Yt˙Lt‚?tnŠŒāh÷ Ŧ‚$ŒČū0WāT‚?Wæˆé„ņ”{ †ėė)GÆŊ˙í‚ íųūn˜)G(˙Ĩ˜˙˜˜‚‹˜Š0Œ0€÷ Ŧ‚BŒ^ūtK0T‚ƒK|„9”{ ’'횘÷Á Ž‚6폊´‹š˜÷‚͋ļ‚ˏ„´ŝ’PíÔ°÷Áš‚_íâŠ<õÔ°÷‚Uõ.‚Kõâ’aõ!Đ÷Ž„‚põNžˆ( õ™Ž‚ˆl„1U€ ‰W…4č÷ķ‚f…’ģI4ø #׎‚ĘIŠKL6ø #‚dL‚ZLŋ“ß+8”Rud‡W…įķ‚f…Ũ’ģIį8ø #J‚ĘIŨŠKLéPø #‚dLđ‚ZL“ū+8”Rud„ëŝ„P”{ ’9JhøÁë‘‚HJ0—ˆør^JV’k ø0‚#k0ŠÄj ø$‚Ũj0‚Ķj…†gk&1U‚vkÍūÄj&6‚Ũjķ˙ĶjūMkE0‚\k†ĖžS/0‘˙۞ū¨žSŠ˙ˇž‡4žS ˙Cž˙Yž‚Mž1€S‡˙W ˛˙ ž˙"ž‚žD‡ԝW Mš˙ã˙ų‚íD„`”{ ūĖž!-/˙۞ū¨ž!-Š˙ˇž‡4ž!' ˙Cž˙Yž‚MžW€!'‡˙&!˛˙ ž˙"ž‚žj‡ԝ&!Mš˙ã˙ų‚íj„/!”{ †}ëcÁŊ’‚Œë}ūĖĢcŠ‚ÛĢ}‡XĢi ˙gĢ‚}Ģ•‚q̎€i‡#Ģm ˛˙.Ģ‚FĢĘ‚:Ģ뇸Ēm Mš˙Ģ‚ĢĘ‚Ģė„v”{ †yíyÁ“‚ˆí˙ūÆąyŠ‚Õą˙‡Rą ˙aą‚wą ‚ką9 €‡ąƒ ˛˙(ą‚@ąL ‚4ąn ‡ō°ƒ Mš˙ą‚ąL ‚ ąn „Œ”{ †íÁa”‚Ŧí ūC¯Š‚R¯ ‡ÅŽ• ˙ÔŽ‚ꎙ ‚ŪŽģ €•‡Ž™ ˛˙›Ž‚ŗŽÎ ‚§Žđ ‡eŽ™ Mš˙tŽ‚ŠŽÎ ‚~Žđ „ĸ”{ ’´Ĩ¸øÁF•‚´ †ĶėŗĘ ”‚Ūė —Øø;•'´. ’­PzøøÎ䔂ÎPx ˙ÁP„‘R$’­P‘ųΕ‚ÎP  ˙ÁP„¨R$„Ôˁ ˆz„ļ=ˆŋˆR!„ŗ⁠’ˆđ0ųÁŲ•‚͈¸ ‘W…đ0ų;‚f…¸ ’ģIđPų #Ÿ•‚ĘI¸ ŠKLühų #‚dL ‚ZLI “Ī+8”Rud†}ë; ÁĢ–‚Œëg ūĖĢ; Š‚ÛĢg ‡XĢA  ˙gĢ‚}Ģ ‚qĢĄ €A ‡#ĢE  ˛˙.Ģ‚FĢ´ ‚:ĢÖ ‡øĒE  Mš˙̴̂ ‚ĢÖ „N ”{ †yíQ Á}—‚ˆíé ūÆąQ Š‚Õąé ‡RąW  ˙aą‚wą ‚ką# €W ‡ą[  ˛˙(ą‚@ą6 ‚4ąX ‡ō°[  Mš˙ą‚ą6 ‚ ąX „d ”{ †íg ÁO˜‚Ŧík ūC¯g Š‚R¯k ‡ÅŽm  ˙ÔŽ‚ęŽƒ ‚ŪŽĨ €m ‡Žq  ˛˙›Ž‚ŗŽ¸ ‚§ŽÚ ‡eŽq  Mš˙tŽ‚ŠŽ¸ ‚~ŽÚ „z ”{ †ˆĄ  Á☂͈í ‡W…Ą  ;‚f…í †ģIĄ  #¨˜‚ĘIí ūKLĒ  #‚dL ‚ZL2 “ļ +8”Ruc’PíÄ €ųÁ ™‚_íE „Ö <õ’'íé ˜ųÁ6™‚6íw „ų ´‹ˆšˆ ˆˆđˆ ˆ& ˆ8 ˆŒ ˆž „ŋ Š{ ˆm!÷NŒŒŠ€!(œ™™ŗ™ø]Œ‘ˆš!„ĸ!”{ ß)™יā5„.HāÖš%…ŗ™ž¯°!œķ™ūšø™‘†NŒė!†,š‚]ŒŠ ˆõ!„ũ!”{ ’4Ĩ"°ų…ãš‚CĨŧ ‹°ųYĨÜ ’­P:"Đųy‹š‚ÎP˙ÁP„R"R$’­PR"čųyģš‚ÎP-˙ÁP„d"R$„ " ˆ:"„m"=ˆv"ˆŖ"„Ģ"Š{ ˆš"„Á"Š{ ÷ŗ™åĐ"(œ›4›ø™‘ˆę"„ō"”{ áĸÁ`›âņkeyä-âîōÂį%áŨÆŒ›âņkeyä-âîōÂį%ßp¸››ŗ›ā5„ļHŪlĒš3H÷Œ›úŋ#ˆœĪ›Ťø››‘øĨ›‘†¨ˆ+#Ŋœ‚ˇˆEˆB#’cĀb#úŊžœ‚rĀĄ‹0ú~Ā’­PJ%Xúufœ‚ÎPT˙ÁP„b%R$’­Pb%xúu–œ‚ÎP|˙ÁP„t%R$„m#$‚ ˆJ%„%=ˆˆ%ˆ]&’—ũ{#úŊ˙°ũ‚Ļũ”Š4›{#ČúÅ‹ČúŸA›‘P‹đúP›ö’­P &ûįC‚ÎP;˙ÁP„"&R$’­P"&8ûįs‚ÎPc˙ÁP„4&R$„‘#ļ‚ ˆ &„?&=ˆH&ˆN'†ÃũĨ#Ŋô‚Ōũ{ūf°Ĩ#‚u°{‡L°Ĩ#}‚[°{’Ũũē#PûŊKž‚ėũųŠͰē#Pû‚â°ų‘´°ē#Pû}‚ðų†cëÕ#Ŋĸž‚rëwūŲĒÕ#‚čĒw‡ēĒÕ#}‚ÉĒw†÷ũķ#ŊŸ‚ūõūēķ#.‚ɝõū›ķ#‚Ēõ‡|ķ#}‚‹õ†ū\$ Ŋ?Ÿ‚*ūs‚ ūˇ†=ūŽ$ ŊiŸ‚Vū)‚Lūm’bū¤$hûē‰Ÿ‚sū߆~ūą$ŊŗŸ‚—ū˙‚ū’Ŗūˇ$€ûŊã ‚˛ū‘’`›ˇ$°ûÏ ‹°ûŸm›‘X‹Đû|›’­PĻ%đûį6 ‚ÎPo˙ÁP„ž%R$’­Pž%üįf ‚ÎP—˙ÁP„Đ%R$„Æ$ļ‚ ˆĻ%„Û%=ˆä%ˆ5'ūšėÚ$Ä‚Čė¯ū‚ĘÚ$‚‘Ɲ‡hĘÚ$}‚wƝ†Âū% žĄ‚Ņū÷†ˆ`&!Ŋ–Ą‚͈ ‡W…`&!;‚f… †ģI`& #\Ą‚ĘI ūKLf& #‚dL‚ZLL“v&+8”RuS†'í‡& ŊĀĄ‚6í_„‘&´‹’Pí”&(üŊꥂ_펄¤&<õ†}ëĘ&Ŋŧĸ‚ŒëŊūĖĢĘ&Š‚ÛĢŊ‡XĢÍ& ˙gĢ‚}ĢĶ‚qĢņ€Í&‡#ĢÔ& ˛˙.Ģ‚FĢ‚:Ģ"‡øĒÔ& Mš˙̂̂Ģ"„Ũ&”{ †yíā&ŊŽŖ‚ˆí5ūÆąā&Š‚Õą5‡Rąã& ˙aą‚wąK‚kąi€ã&‡ąį& ˛˙(ą‚@ą|‚4ąš‡ō°į& Mš˙ą‚ą|‚ ąš„đ&”{ †íķ&Ŋ`¤‚Ŧí­ūC¯ķ&Š‚R¯­‡ÅŽö& ˙ÔŽ‚ęŽÃ‚ŪŽá€ö&‡Žú& ˛˙›Ž‚ŗŽô‚§Ž‡eŽú& Mš˙tŽ‚ŠŽô‚~Ž„'”{ ˆK#ˆZ#ˆ0$ˆA$„¤$%| „ %%| „"%ãy„&Š{ ˆ­&ˆģ&ˆĘ&ˆ'ˆ 'ˆr'ßō(Ô¤ߤā5„.H÷ŤlQ' œû¤đĨøÔ¤‘’cĀĩ'@ü€ģĨ‚rĀ%‹hü~Ā\’­P(ˆüucĨ‚ÎP›˙ÁP„)(R$’­P)( üu“Ĩ‚ÎPŗ˙ÁP„@(R$„Ā'$‚ ˆ(„N(=ˆW(ˆl(„Ú'%| ˆå'„t(Š{ „(”{ ˆ(„•(Š{ ¨Üū}ë (“œsĻ—¸ü9ĻŸéū¸„å(%} ˆõ(„+)O} õ(!hĻŸéū¸„ũ(?} „)ׂ „3)Š{  Ņĩ”@) œ˙ē—Øüôē™o(•H‘Ë™H‘ĨÁ˛ ‘ŧĨã;­‘T†TT)•§ø+TāˇŸūĄIT) ø°IāˇŸ†PTd)™I§‚mTø‚aT'„o)>| ’'¯–)đü ú§‚@¯:‚6¯›žW…Ķ.@é§‚f…ä’ģIĶ.ũ #°§‚ĘIäŠKLÖ.(ũ #‚dLų‚ZL&“î.+8”Ru`ˆĸ)„Ē)f­—@ũg¨‚f…9’ģIĒ)`ũ #.¨‚ĘI9ŠKL­)xũ #‚dLœ‚ZL˙“H,+8”Ru`’'¯ę)˜ũĻĄ¨‚@¯‚6¯—ˆú)„*f­’'¯%*°ũĻÛ¨‚@¯‚6¯‡ˆ/*„7*f­’øūK*Čũ¨YŠ‚˙Ū‚˙'‘ėSK*ČũE‚TŪ‚ûS'‘ĀSK*āũJ‚ŲSŪ‚ĪS'„T*ū’ˆT*øũĻ͈p‘W…T*ū;‚f…Ŧ’ģIT*8ū #˛Š‚ĘIŦŠKL]*Pū #‚dL‚ZLK“Č,+8”RuŦ’ˆf*hūĻƒĒ‚͈i‘W…f*€ū;‚f…Ĩ†ģIf* #GĒ‚ĘIĨŠKLl*˜ū #‚dLî‚ZL* “Ø,+8”RuŦ’W…u*°ūĻũĒ‚f…H †ģIu* #ÂĒ‚ĘIH ŠKL{*Čū #‚dL„ ‚ZLĀ “č,+8”RuŦ’ˆ„*āūĻ’Ģ‚͈Ū ‘W…„*øū;‚f…Ū †ģI„* #VĢ‚ĘIŪ ŠKLŠ*˙ #‚dL !‚ZL- #‚dL’(‚ZLŋ(“K-+8”RuP†ˆK-ž|ŗ‚͈Ō(‡W…K-;‚f…Ō(†ģIK- #Bŗ‚ĘIŌ(ūKLQ- #‚dLį(‚ZL)“^-+8”RuP†W…^-+žôŗ‚f…')†ģI^- #ģŗ‚ĘI')ūKLd-% #‚dL<)‚ZLi)“q-+8”RuP†ˆĩ-ž‡´‚͈|)‡W…ĩ-;‚f…|)’ģIĩ-  #M´‚ĘI|)ŠKL¸-¸ #‚dL‘)‚ZLž)“Đ-+8”RuP†ˆĐ-žĩ‚͈Ņ)‡W…Đ-;‚f…Ņ)†ģIĐ- #ā´‚ĘIŅ)ūKLÖ- #‚dLæ)‚ZL*“į-+8”RuP’ˆî-Đ¯¯ĩ‚͈&*‘W…î-č;‚f…&*†ģIî- #sĩ‚ĘI&*ŠKLô- #‚dL;*‚ZLP*“‹.+8”RuŦ†ˆũ-+°Bļ‚͈c*‡W…ũ-+;‚f…c*†ģIũ- #ļ‚ĘIc*ūKL.% #‚dLx*‚ZLĨ*“.+8”RuC†W…N.Ļŧļ‚f…¸*†ģIN. #ļ‚ĘI¸*ūKLT. #‚dLÍ*‚ZLâ*“a.+8”RuŦ†ˆa.ĻQˇ‚͈õ*‡W…a.;‚f…õ*†ģIa. #ˇ‚ĘIõ*ūKLg. #‚dL +‚ZL+“t.+8”RuŦ†W…t.ώˇ‚f…2+†ģIt. #ˇ‚ĘI2+ūKLz. #‚dLG+‚ZL\+†ˆ’.ĻL¸‚͈o+‡W…’.;‚f…o+†ģI’. #¸‚ĘIo+ūKL˜. #‚dL„+‚ZL™+“Ĩ.+8”RuŦ†ˆĢ.(ĻḂ͈Ŧ+‡W…Ģ.(;‚f…Ŧ+†ģIĢ. #Ĩ¸‚ĘIŦ+ūKLą." #‚dLÁ+‚ZLÖ+“ž.+8”RuŦî.+Rš‚f…é+†ģIî. #š‚ĘIé+ūKLô.% #‚dLū+‚ZL+,“/+8”Ru`/Ú‚f…>,†ģI/ #Šš‚ĘI>,ūKL/ #‚dLS,‚ZL€,“0/+8”RuX7/Oēø͈u`Ÿ‡W…7/;øf…u`Ÿ†ģI7/ #ēøĘIu`ŸūKL=/ #‚dL“,‚ZLĀ,“J/+8”RuXˆ–)„Í)Ŧˆé)„ *Üū„*ڗˆ#*„J*+„Ģ*|Ŧ„Á*ĪN„Đ*yŗ„ā*Őˆ+ˆL+ˆo+„‹+Üū„”+ڗˆ§+„Î++ˆÚ+ˆv,„z-Š{ üŊžP/\œģdžû5„ļH‘—Yž™Ō1ídžĶ,†­bm/îvģøābb°Ÿ‚ĶbĶ,„|/ö†T‘/đ˛ģ‚+TU-ūĄI‘/ ‚°IU-’‘[¤/@đŌģ‚ [„-’W…ĩ/XđJŧ‚f…¯-’ģIĩ/x #ŧ‚ĘI¯-ŠKL¸/ #‚dLŅ-‚ZLķ-“X0+8”Ru_’W…Ė/°õÂŧ‚f….’ģIĖ/Č #‰ŧ‚ĘI.ŠKLŌ/ā #‚dL3.‚ZLU.“0+8”Rud†ĸãā/ņŊ‚Õãs.‚Čã›.ū­bā/  ‚ābs.‚Ķb›.„đ/ö†W…e0õ”Ŋ‚f…Ŋ.†ģIe0 #[Ŋ‚ĘIŊ.ūKLk0 #‚dLŌ.‚ZL˙.“w0+8”Ru_†W…Ž0đ ž‚f…/’ģIŽ0ø #ĶŊ‚ĘI/ŠKL‘0 #‚dL'/‚ZLT/“Ļ0+8”Ru_„m/ĪN„/sĻ„™/%| ˆ¤/„ĩ/0z„20Õ{ „@0w} „‹0”{ „€0Š{ ô1•h°0,œ˛ž†#˙ŋ0tž„Ä0Üū„Ī0/„×0ád•zā0,œûž†#˙ī0zæž„ô0Üū„˙0/„1me•íô17œSŋũ3H‘ĄÅŅ %‘†#˙$1Hŋ„)1Üū„=1IT¨i˙ŒP1‹œ´Āøt˙‘`1XZ‚˙g/†#˙`1Ŧŋ„e1Üū†*˙e1 čŋ‚9˙…/ūae1 ˙‚"a¤/€r1F˙Ë/’D˙r1(0Ā‚[˙é/‚O˙0„„1õ‚ „1ƒ „ž1+ƒ „Ļ1w} „˛1Hƒ €¸1#øt˙‘€¸1#Š‚˙†¯^Ö1 Ā„Û1Đ| „Î1+ƒ „Ö1w} á õÁëfd8 %âîV9/üîZ:ĩņî”-; %âî– G%üKŲā1 œÁúŅû5„ĩ\‘—@ŅŅĨféĒ'%‘Ŋ}™ö<Ģ %0†ō2˛’Á+ō‚ō>0‚ōp0„$2[ƒ †Ô\42 ļ¸Á˙ã\‚í\„0—XįÉ™:Î %˜0’W…>2ˆÎL‚f…Ģ0’KL>2° #/‚dLÉ0‚ZLí0““4+8”RuĮ}ŠģIy3Đ #‚ĘIĢ0†ˆ]2Îv‚ˆ 1„k2U€ ’W…3čÎî‚f….1†ģI3 #ĩ‚ĘI.1ŠKL–3 #‚dLR1‚ZLv1“4+8”Rw’W…ž3ÎfÂf…”1†ģIž3 #-ÂĘI”1ŠKL§30 #‚dL¸1‚ZLÜ1“o4+8”Rw’W…¯3HÎŪÂf…ú1†ģI¯3 #ĨÂĘIú1ŠKL¸3` #‚dL2‚ZLB2“_4+8”Rw’W…Ā3xÎVÄ‚f…`2†ģIĀ3 #Ä‚ĘI`2ŠKLÉ3 #‚dL„2‚ZL¨2“O4+8”Rw’W…Í3¨ÎÎÄ‚f…Æ2†ģIÍ3 #•Ä‚ĘIÆ2ŠKLÖ3Ā #‚dLę2‚ZL3“?4+8”Rw’W…Ú3ØÎFÅ‚f…,3†ģIÚ3 # Å‚ĘI,3ŠKLã3đ #‚dLP3‚ZLt3“/4+8”Rw†W…į3Ξłf…’3†ģIį3 #…Å‚ĘI’3ūKLđ3 #‚dL¨3‚ZLž3“˙3+8”Rw†W… 8Î7Æ‚f…Ņ3†ģI 8 #ũÅ‚ĘIŅ3ūKL8 #‚dLį3‚ZL4“$8+8”RuĮ}†W…$8#ΰƂf…)4†ģI$8 #vÆ‚ĘI)4ūKL-8 #‚dL?4‚ZLn4“<8+8”RuĮ}†W…‚8Î)Į‚f…4†ģI‚8 #ĘI4ūKL‹8 #‚dL—4‚ZLÆ4“š8+8”RuĮ}†W…š8)ÎĸĮ‚f…Ų4†ģIš8 #hĮ‚ĘIŲ4ūKLŖ8 #‚dLī4‚ZL5“ļ8+8”RuĮ}†W…Ã83ÎČ‚f…15†ģIÃ8 #áĮ‚ĘI15ūKLĖ8* #‚dLG5‚ZLv5“Û8+8”RuĮ}†W…ö8ΔȂf…‰5’ģIö8 #ZČ‚ĘI‰5ŠKLü8  #‚dLŸ5‚ZLÎ5“9+8”RuĮ}†W…9Î É‚f…á5†ģI9 #ĶČ‚ĘIá5ūKL9 #‚dL÷5‚ZL&6“,9+8”RuĮ}†W…,93Άɂf…96†ģI,9 #LÉ‚ĘI96ūKL59* #‚dLO6‚ZL~6“D9+8”RuĮ}„x2Ž~ „2âoˆŋ2„á2čž„3čž„3œ)„:3čž„X3čž„s3čž„y3i˙’Ĩ˙P28ÎĘ„U2\„4\†]4 Ī7Ę˙$]‚.]‘6’~aā4PĖÃĘ‚ąaĻ6‚¤aŧ6†ÕIā4 Ų ¸Ę‚äIĻ6ūģIā4 Õ‚ĘIĻ6ūĄIā4 -‚°IĻ6„ķ4R$’W…û4hĖ=Ë‚f…Ī6’ģIû4€ #Ë‚ĘIĪ6ūKL5 #‚dLå6‚ZLø6“5+8”Ru´}†Ô\M5ŊcË˙ã\‚í\ 7’´Āg5˜ÃwĐ‚ŋĀ7‹˜ŸÍĀ‘Ė}ŸÚĀ‘ā}įĀN7†ō5>äË‚+ō‚7‚ōž7‚ōū7„¤5[ƒ —Āģ́öĀ-8’~a6āI„Ė‚ąa@8‚¤ad8†ÕI6 Ų yĖ‚äI@8ūģI6 Õ‚ĘI@8ūĄI6 -‚°I@8„6R$’W…F6IũĖ‚f…w8’ģIF6  #ÃĖ‚ĘIw8ŠKLR68 #‚dL›8‚ZLŋ8“˙7+8”Ruä}†W…˜9"IvÍ‚f…Ũ8†ģI˜9 #<Í‚ĘIŨ8ūKLĄ9 #‚dLķ8‚ZL"9“´9+8”Ruä}„Ķ5,¨ˆđ5„6­P„&6­P„/6=„>6­PˆF6ˆ•9’~a 7PEC΂ąa59˙¤a†ÕI 7 Ų 8΂äI59ūģI 7 Õ‚ĘI59ūĄI 7 -‚°I59„¸7R$’W…Ā7hEģ΂f…Y9’ģIĀ7€ #‚΂ĘIY9ūKLĖ7( #‚dLo9‚ZL‚9“ß7+8”Rw†W…Č9%E4Ī‚f…•9†ģIČ9 #ú΂ĘI•9ūKLŅ9 #‚dLĢ9‚ZLÚ9“ä9+8”RuÜ}†ã^6JyĪ‚ãí9‡*i^6U‚9ií9„n6qG†Ëņˆ6\@Đ‚ëņ:‚áņ:€ˆ6\…b‘­Pˆ6˜ƒ‚ÎP:‚ÁP/:’aOˆ6¸÷Ī‚lO:„Ü6R$†ã_9JIĐ‚ãH:‡*i_9U‚9iH:„o9qGˆ‹5„Ŋ5Ž~ „ƒ7y]ˆ 7ˆĀ7ˆÅ9†Ô\ä6ĀĐ˙ã\‚í\^:’Q57ØČŅĐ‚4Qr:‚*Q…:„<7č<†Ô\[7ē÷Đ˙ã\‚í\˜:†W…G8ĖpŅ‚f…Ŧ:†ģIG8 #6Ņ‚ĘIŦ:ūKLP8 #‚dLÂ:‚ZLņ:“c8+8”Ruā}„ 2Ž~ „§4,¨ˆĖ4„ā4­Pˆû4ˆ7„$7­P„37­P„K7­PˆS7ˆu8ˆ‚9„í7Ž~ „E8Š{ „w9Š{ „Š9Š{ ü}×đ9œŌÁÚû5„ĩ\‘ĄmÖ…Ļ‘—đļÚĨ€ĪÚē'‘š—Ú™:Ū %;’W…!:(ŪŨŌ‚f…;’KL!:P #ĀŌ‚dL5;‚ZLW;“<+8”RuCŠģI;p #‚ĘI;†Ŧ˙=:ŪĶĐ˙øÃ˙uAŸ‚ˇ˙u;„P:ģ€ ’W…+;ˆŪĶ‚f…Œ;†ģI+; #WĶ‚ĘIŒ;ŠKL1;  #‚dLŽ;‚ZLĐ;“˙;+8”Rw’W…9;¸ŪÔ‚f…î;†ģI9; #ĪĶ‚ĘIî;ŠKL?;Đ #‚dL<‚ZL2<“ī;+8”Rw’W…G;čŪ€Ô‚f…P<†ģIG; #GÔ‚ĘIP<ŠKLM;  #‚dLr<‚ZL”<“ß;+8”Rw’W…U; ŪøÔ‚f…˛<†ģIU; #ŋÔ‚ĘI˛<ŠKL[;0  #‚dLÔ<‚ZLö<“Ī;+8”Rw’W…_;H ŪpÕ‚f…=†ģI_; #7Õ‚ĘI=ŠKLe;`  #‚dL6=‚ZLX=“ŋ;+8”Rw’W…i;x ŪčÕ‚f…v=†ģIi; #¯Õ‚ĘIv=ŠKLo;  #‚dL˜=‚ZLē=“¯;+8”Rw†W…s;Ū`Ö‚f…Ø=†ģIs; #'Ö‚ĘIØ=ūKLy; #‚dLí=‚ZL>“ˆ;+8”Rw†W…<ŪØÖ‚f…>†ģI< #ŸÖ‚ĘI>ūKL#< #‚dL*>‚ZLW>“/<+8”RuC†W…:<ŪPׂf…j>’ģI:<¨  #ׂĘIj>ŠKL=<Ā  #‚dL>‚ZLŦ>“R<+8”RuC†W…R<ŪČׂf…ŋ>†ģIR< #×‚ĘIŋ>ūKLX< #‚dLÔ>‚ZL?“d<+8”RuC†W…d<Ū@Ø‚f…?†ģId< #Ø‚ĘI?ūKLj< #‚dL)?‚ZLV?“v<+8”RuC†W…v<Ū¸Ø‚f…i?†ģIv< #Ø‚ĘIi?ūKL|< #‚dL~?‚ZLĢ?“ˆ<+8”RuC†W…ˆ<Ū0Ų‚f…ž?†ģIˆ< #÷Ø‚ĘIž?ūKLŽ< #‚dLĶ?‚ZL@“š<+8”RuC†W…š<Ū¨Ų‚f…@†ģIš< #oŲ‚ĘI@ūKL < #‚dL(@‚ZLU@“Ŧ<+8”RuC†W…Ŧ<WŪ Ú‚f…h@†ģIŦ< #įŲ‚ĘIh@ūKL˛<Q #‚dL}@‚ZLĒ@“Â<+8”RuC„]:Ž~ „~:âoˆ”:„Ģ:čž„Ā:čž„Ō:œ)„į:čž„˙:čž„;čž„;i˙’Ĩ˙0:Ø ŪĢÚ„5:\„;\„ĸ;Hƒ „8<Š{ üĢÕ=$œŲÚzãû5„ĸ]‘—đ oãĨa°% %‘¸— ã™:& %Ŋ@’W…O=8 &•Û‚f…Đ@’KLO=`  #xÛ‚dLî@‚ZLA“H?+8”RuŋŠģIJ>€  #‚ĘIĐ@’W…[>˜ & Ü‚f…0A†ģI[> #ÔÛ‚ĘI0AŠKLa>°  #‚dLRA‚ZLtA“7?+8”Rw’W…i>Č &…Ü‚f…’A†ģIi> #LÜ‚ĘI’AŠKLo>ā  #‚dL´A‚ZLÖA“'?+8”Rw’W…w>ø &ũÜ‚f…ôA†ģIw> #ÄÜ‚ĘIôAŠKL}>  #‚dLB‚ZL8B“?+8”Rw’W……>( &uŨ‚f…VB†ģI…> #<Ũ‚ĘIVBŠKL‹>@  #‚dLxB‚ZLšB“?+8”Rw’W…>X &íŨ‚f…¸B†ģI> #´Ũ‚ĘI¸BŠKL•>p  #‚dLÚB‚ZLüB“÷>+8”Rw’W…™>ˆ &eŪ‚f…C†ģI™> #,Ū‚ĘICŠKLŸ>   #‚dL+8”Rw†W…Ŗ>&ŨŪ‚f…|C†ģIŖ> #¤Ū‚ĘI|CūKLŠ> #‚dL‘C‚ZLĻC“¸>+8”Rw†W…U?#&Vß‚f…šC†ģIU? #ß‚ĘIšCūKL[? #‚dLÎC‚ZLũC“g?+8”Ruŋ†W…x?&Īß‚f…D†ģIx? #•ß‚ĘIDūKL~? #‚dL%D‚ZLTD“Š?+8”Ruŋ†W…”?&Hā‚f…gD†ģI”? #ā‚ĘIgDūKLš? #‚dL|D‚ZLĢD“Ļ?+8”Ruŋ†W…°?&Áā‚f…žD†ģI°? #‡ā‚ĘIžDūKLļ? #‚dLĶD‚ZLE“Â?+8”Ruŋ†W…Ė?&:á‚f…E†ģIĖ? #á‚ĘIEūKLŌ? #‚dL*E‚ZLYE“Ū?+8”Ruŋ†W…č?&ŗá‚f…lE†ģIč? #yá‚ĘIlEūKLî? #‚dLE‚ZL°E“ú?+8”Ruŋ†W…@&,â‚f…ÃE†ģI@ #ōá‚ĘIÃEūKL @ #‚dLØE‚ZLF“@+8”Ruŋ†W…@&Ĩâøf…udŸ’ģI@¸  #kâøĘIudŸŠKL@Đ  #‚dLF‚ZLIF“2@+8”Ruŋ„€={ƒ „=Ž~ „Ž=âoˆÄ=„Û=čž„đ=čž„>œ)„>čž„/>čž„D>čž„J>i˙’Ĩ˙`=č &:ã„e=\„Ŋ>\†Ž\Ë>'dゝ\\F‚§\{F„I=Á„p?Š{ ß\׉ãžãā5„ĩ\āÖš%÷zã9A oyœēã˙ėø‰ã‘’W…=o v;ä‚f…ŽF’KL=o  #ä‚dL°F‚ZLęF“ŗp+8”RuGŠģIšp8  #‚ĘIŽF’W…PoP vĩä‚f…G’ģIPoh  #zä‚ĘIGŠKLVo€  #‚dL:G‚ZL\G“Đp+8”Ru´’W…^o˜ v-å‚f…zG’ģI^o°  #ôä‚ĘIzGŠKLdoČ  #‚dLœG‚ZLžG“įp+8”Rw’W…loā v§å‚f…ÜG’ģIloø  #lå‚ĘIÜGŠKLro  #‚dLūG‚ZL H“q+8”Ru¤’W…zo( v!æ‚f…>H’ģIzo@  #æå‚ĘI>HŠKL€oX  #‚dL`H‚ZL‚H“q+8”Ru°’W…ˆop v›æ‚f… H’ģIˆoˆ  #`æ‚ĘI HŠKLŽo   #‚dLÂH‚ZLäH“8q+8”RuŦ’W…–o¸ vį‚f…I’ģI–oĐ  #Úæ‚ĘIIŠKLœoč  #‚dL$I‚ZLFI“Xq+8”Ru¨’Ĩ˙¤ov?į„Šo\„]q\’čžpv!č‚ŸdI‚ŸŧI‹Š.Ÿ’A'p8 y ¨į‚3AJ‚)A]J„;phxr!čøf…uTŸ’ģIxrX #āįøĘIuTŸŠKL{rp #‚dLĻJ‚ZLĶJ“”r+8”RuPˆ'p’čžPpˆv邟æJ‚Ÿ.K‹ˆŠ.Ÿ’A\p¨ y Šč‚3AuK‚)AÍK„nph,rLûč‚f…>L’ģI,rČ #Âč‚ĘI>LŠKL/rā #‚dLSL‚ZL€L“Hr+8”RuHˆ\p’čžopøvt邟“L‚ŸÛL‹øŠ.Ÿ’A}p y lé‚3A)M‚)AqM„‘phˆ}p†W…|qvėé‚f…­M’ģI|q( #ŗé‚ĘI­MŠKLq@ #‚dLÂM‚ZLīM“”q+8”RuG†W…”qvdę‚f…N†ģI”q #+ę‚ĘINūKLšq #‚dLN‚ZLDN“Ļq+8”RuG†W…ĻqvÜę‚f…WN†ģIĻq #Ŗę‚ĘIWNūKLŦq #‚dLlN‚ZL™N“¸q+8”RuG†W…¸qvTë‚f…ŦN†ģI¸q #ë‚ĘIŦNūKLžq #‚dLÁN‚ZLîN“Ęq+8”RuG†W…ĘqvĖë‚f…O†ģIĘq #“ë‚ĘIOūKLĐq #‚dLO‚ZLCO“Üq+8”RuG†W…ÜqvDė‚f…VO†ģIÜq # ė‚ĘIVOūKLâq #‚dLkO‚ZL˜O“îq+8”RuG†W…îq>vŧė‚f…ĢO†ģIîq #ƒė‚ĘIĢOūKLôq8 #‚dLĀO‚ZLíO“r+8”RuG„Įoŝ„åoâoˆūo„pčž„Ppœ)„špi˙„ rŠ{ ÷zãԈ r(œí5íø‰ã‘ˆēr„Âr”{ ÷Ya}Đr)œQííøk‘Š2ßrXd‚DP„ôržã÷YUs3œí÷íøk‘’Yspdėí‚kPŠ2spd‚DP„%sžã„-s”{ ÷…Ĩa@s)œîCîø—‘Š2Osˆ-‚D>P„dsžã÷…§kps3œ_îšîø—‘’…€s -Žî‚—]PŠ2€s -‚D]P„•sžã„s”{ ßíĻČîãîā5„57âî“$PC:÷šîŊD@@›œ˙îHđøČî‘—¸=đÔî|P†#˙a@P<ī„f@Üū’W…Ÿ@ĐS´ī‚f…ˇP’ģIŸ@č #{ī‚ĘIˇPūKL¨@ #‚dLĘP‚ZL÷P“¸@+8”Rus†W…ŧ@S,đøf…utŸ†ģIŧ@ #ķīøĘIutŸūKLÂ@ #‚dL Q‚ZL7Q“Ō@+8”Rusˆ—@„Ÿ@i˙„Û@Š{ ߊÕWđ|đā5„ĸ]Ū°đ´'Ūã%ú1÷Hđ°6ā@`œ˜đėđøWđ‘øađ‘øn𑊹ô@ø×‘øĘ‘‚ĀJQ„ú@ãî´žĻ@A?œŠņĄ˛đY´'‘Ąå%Yú1‘ĄT@Z´'‘ĄkôZ %‘ Ą§ZíG‘†#˙OA[pņ„TAÜūŠåTA[‚ôiQŠ2aTA‚AaˆQáõĐņč÷(Ų&'âãmsgÚ/üúfÖ€A1 œčņŌû5„Ŧ‘—0Ŋ™÷(7Ę5¯QĨ<ų‘X™ˆ JŌR’Šņ¤A`9Iö‚´ņˆR‹`ŸÂņ‘X‰—ķŗA€ÛÅō‚ˇķŨR‚­ķES‹€…b‘­PŗA˜ƒ‚ÎPŨR‚ÁP›S„ËAR$‰ŲķËA¸Ü+ķ‚ųķĀS‚īķT‹¸…b‘­PËA؃‚ÎPĀS‚ÁPaT„ãAR$‰ūããAܑķ‚ä†T‚äŪT‹…b‘­PãA ƒ‚ÎP†T‚ÁP'U„ûAR$‰ÎäûAHÜ÷ķ‚îäLU‚ää¤U‹H…b‘­PûA`ƒ‚ÎPLU‚ÁPíU„BR$‰đåB€ā]ô‚æV‚æ*V‹€…b‘­PB˜ƒ‚ÎPV‚ÁP?V„6BR$‰Gh7B¸āÃô‚ghdV‚]h|V‹¸…b‘Q;BĐƒ‚4Q‘V‚*Q¤V„EBč<žđåHBā#õ‚æÄV‚æÜV€HB…b‡­PHBƒ‚ÎPÄV‚ÁPņV‰+ôPBčŪ‰õ‚Kô W‚Aô#W‹č…b‘­PPBƒ‚ÎP W‚ÁP8W„]BR$‰ãoB áķõ‚ãPW‘*ioB8U‚9iPWŠqGoBP‚ŠGŒW‚€GPW„ƒBŝžãCM$á7ö‚ãÄW‡*iCM$U‚9iÄW„RMqGˆŗA„oBy]’~aŗBh9Ņö‚ąaŲW˙¤a†ÕIŗB Ų Æö‚äIŲWūģIŗB Õ‚ĘIŲWūĄIŗB -‚°IŲW„ČBR$’W…ŅB€9K÷‚f…X’ģIŅB  #÷‚ĘIXŠKLÔB¸ #‚dL*X‚ZLLX“ÃK+8”Ru¨’W…øBØ=Å÷‚f…jX’ģIøBđ #Š÷‚ĘIjXŠKLūB #‚dLŒX‚ZLŦX“XD+8”RuŦ’W…C =?ø‚f…ĘX’ģIC8 #ø‚ĘIĘXŠKL CP #‚dLėX‚ZLY“xD+8”RuŦ’W…Ch=šø‚f…,Y’ģIC€ #~ø‚ĘI,YŠKLC˜ #‚dLNY‚ZLpY“˜D+8”RuŦ’W…"C°=3ų‚f…ŽY’ģI"CČ #øø‚ĘIŽYŠKL(Cā #‚dL°Y‚ZLŌY“¸D+8”RuŦ’W…0Cø=­ų‚f…đY’ģI0C #rų‚ĘIđYŠKL6C( #‚dLZ‚ZL4Z“ØD+8”RuŦ’W…>C@='ú‚f…RZ’ģI>CX #ėų‚ĘIRZŠKLDCp #‚dLtZ‚ZL–Z“øD+8”RuŦ’Ĩ˙LCˆ=Qú„QC\„ũD\’W…"D =Ęú‚f…´Z’ģI"D¸ #ú‚ĘI´ZūKL+D #‚dLŌZ‚ZL[“;D+8”Ruŧ’W…/EĐ?Bû‚f…=[’ģI/Eđ # û‚ĘI=[ŠKL8E #‚dLļ[‚ZL&\“ļK+8”RuX†˙EE Hbû„OEw} ’W…xE KÜû‚f…D\’ģIxE8 #Ąû‚ĘID\ŠKL~EP #‚dLf\‚ZLˆ\“¸F+8”RuŦ’W…†EhKVü‚f…Ļ\’ģI†E€ #ü‚ĘIĻ\ŠKLŒE˜ #‚dLČ\‚ZLę\“ØF+8”RuŦ’W…”E°KĐü‚f…]’ģI”EČ #•ü‚ĘI]ŠKLšEā #‚dL*]‚ZLL]“øF+8”RuŦ’W…ĸEøKJũ‚f…j]’ģIĸE #ũ‚ĘIj]ŠKL¨E( #‚dLŒ]‚ZLŽ]“G+8”RuŦ’W…°E@KÄũ‚f…Ė]’ģI°EX #‰ũ‚ĘIĖ]ŠKLļEp #‚dLî]‚ZL^“8G+8”RuŦ’W…žEˆK>ū‚f….^’ģIžE  #ū‚ĘI.^ŠKLÄE¸ #‚dLP^‚ZLr^“XG+8”RuŦ’Ĩ˙ĖEĐKhū„ŅE\„]G\’W…†FčKáū‚f…^’ģI†F #§ū‚ĘI^ūKLF #‚dL˛^‚ZLī^“ŸF+8”Ruŧ’{]hGL ˙‚Š]_‚”]1_—0`™:N %”_’W…]HXNŸ˙‚f…§_’ģI]Hx #e˙‚ĘI§_ŠKLfH #‚dLÖ_‚ZL`“˜K+8”Ruģ’W…nH¨N‚f…&`†ģInH #Ū˙‚ĘI&`ŠKLtHĀ #‚dLU`‚ZL„`“ˆK+8”RuŦ’W…|HØN“‚f…ĸ`†ģI|H #X‚ĘIĸ`ŠKL‚Hđ #‚dLŅ`‚ZLa“xK+8”RuŦ’W…ŠHN ‚f…a†ģIŠH #Ō‚ĘIaŠKLH  #‚dLMa‚ZL|a“hK+8”RuŦ’W…˜H8N‡‚f…ša†ģI˜H #L‚ĘIšaŠKLžHP #‚dLŧa‚ZLŪa“čJ+8”RuŦ’W…ĻHhN‚f…üa†ģIĻH #Æ‚ĘIüaŠKLŦH€ #‚dLb‚ZL@b“¸J+8”RuŦ’W…´H˜N{‚f…nb’ģI´H° #@‚ĘInbŠKLēHČ #‚dL’b‚ZL´b“ØJ+8”RuŦ†W…ÂHNõ‚f…Ōb†ģIÂH #ē‚ĘIŌbūKLČH #‚dLįb‚ZLüb“ØH+8”RuŦ„ GU€ „­GŽ~ „ÎGâoˆāG„öGčž„ Hčž„Hœ)„/Hčž„DHčž„WHčž„]Hi˙’Ĩ˙ˆGāNŠ„G\„ŨH\†U]åH O´‚d]c‚n]#c†#˙îHVÔ„ķHÜū’‘[ķHøVô‚ [7c— ™:Z %dc’W…éI8Zˆ‚f…‚c’ģIéIX #N‚ĘI‚cŠKLōIp #‚dL¤c‚ZLČc“XK+8”Ruģ’W…úIˆZ‚f…æc†ģIúI #Į‚ĘIæcŠKLJ  #‚dLd‚ZL*d“HK+8”RuŦ’W…J¸Z|‚f…Hd†ģIJ #A‚ĘIHdŠKLJĐ #‚dLjd‚ZLŒd“8K+8”RuŦ’W…JčZö‚f…Ēd†ģIJ #ģ‚ĘIĒdŠKLJ #‚dLĖd‚ZLîd“(K+8”RuŦ’W…$JZp‚f… e†ģI$J #5‚ĘI eŠKL*J0 #‚dL.e‚ZLPe“K+8”RuŦ’W…2JHZę‚f…ne†ģI2J #¯‚ĘIneŠKL8J` #‚dLe‚ZL˛e“K+8”RuŦ’W…@JxZd‚f…Đe†ģI@J #)‚ĘIĐeŠKLFJ #‚dLôe‚ZLf“øJ+8”RuŦ†W…NJZŪ‚f…4f†ģINJ #Ŗ‚ĘI4fūKLTJ #‚dLIf‚ZL^f“`J+8”RuŦ†W…`LZW‚f…qf†ģI`L #‚ĘIqfūKLfL #‚dL†f‚ZLĩf“rL+8”Ruģ†W…vLZĐ‚f…Čf†ģIvL #–‚ĘIČfūKL|L #‚dLŪf‚ZL g“ˆL+8”Ruģ†W…ŒLZI ‚f… g†ģIŒL # ‚ĘI gūKL’L #‚dL5g‚ZLdg“žL+8”Ruģ†W…ĸLZ ‚f…wg†ģIĸL #ˆ ‚ĘIwgūKL¨L #‚dLŒg‚ZLģg“´L+8”Ruģ†W…¸LZ; ‚f…Îg†ģI¸L # ‚ĘIÎgūKLžL #‚dLãg‚ZLh“ĘL+8”Ruģ†W…ÎLZ´ ‚f…%h†ģIÎL #z ‚ĘI%hūKLÔL #‚dL:h‚ZLih“āL+8”Ruģ†W…äLZ- ‚f…|h†ģIäL #ķ ‚ĘI|hūKLęL #‚dL‘h‚ZLĀh“öL+8”Ruģ†W…úLIZĻ ‚f…Ķh†ģIúL #l ‚ĘIĶhūKLMC #‚dLčh‚ZLi“ M+8”Ruģ„5IŽ~ „ZIâoˆlI„‚Ičž„˜Ičž„ŠIœ)„ģIčž„ĐIčž„ãIčž„éIi˙„{JU€ ’Ĩ˙`J¨Z; „eJ\„ŒJ\†]J [e ‚$]*i‚.]Ii† ™J\ ‚&ii‚}i†W…ĘKK ‚f…œi†ģIĘK #Î ‚ĘIœiūKLĐK #‚dLąi‚ZLāi“ÜK+8”Ruŧ†W…ÜKK ‚f…ķi†ģIÜK #G ‚ĘIķiūKLâK #‚dLj‚ZL7j“îK+8”Ruŧ†W…îKKú ‚f…Jj†ģIîK #Ā ‚ĘIJjūKLôK #‚dL_j‚ZLŽj“L+8”Ruŧ†W…LKs‚f…Ąj†ģIL #9‚ĘIĄjūKLL #‚dLļj‚ZLåj“L+8”Ruŧ†W…LKė‚f…øj†ģIL #˛‚ĘIøjūKLL #‚dL k‚ZLs‚Ķb†s„qOö’ļ‚OāĻ‚ÜÎs‚Īâs‚Åös„“O|đ’W…áOøŽ‡‚f…t’ģIáO #N‚ĘItŠKLäO0 #‚dL=t‚ZL_t“ÄP+8”Ru\†W…øO(­˙‚f…}t†ģIøO #Æ‚ĘI}tūKLūO" #‚dL’t‚ZL§t“P+8”Rw’h*PP¤Q‚¨ēt‚›Út‚Žút‚u‚w"u„;P|đ†W…ŅPŽÉ‚f…Zu†ģIŅP #‚ĘIZuūKL×P #‚dLou‚ZLœu“ãP+8”RuG†W…ãPA‚f…¯u†ģIãP #‚ĘI¯uūKLéP #‚dLÄu‚ZLņu“õP+8”RuG†W…õPš‚f…v†ģIõP #€‚ĘIvūKLûP #‚dLv‚ZLFv“Q+8”RuG†W…Q#1‚f…Yv†ģIQ #ø‚ĘIYvūKL Q #‚dLnv‚ZL›v“Q+8”RuG†W…*QŠ‚f…Žv†ģI*Q #p‚ĘIŽvūKL0Q #‚dLÃv‚ZLđv“Žë__sŽ´'âîj;“™´üāŗ°s’œG2 :û5„a‘–žGކĸ__xG :‘—¨!ā3™ũ Q5AH††ÖÖs Lķ2‚ęf†‚€‘†‚öφ‡šÖs MŊ‚Šf†‚ŋ‘†‚ŗφŠĄísĀ!S‚Øš†‚Ëꆂž*‡Š?ËísĀ!‚‚€Ëš†‚sËꆂfË*‡ŠžĘísĀ!_‚˙Ęš†‚ōĘꆂåĘ*‡‹Ā!ËH‡ŠŸ1ísĀ!V‚Í1š†‚Ā1ꆂŗ1*‡‹Ā!Ü1h‡„tŒ} € t"îj;^™´™ģ:`™´Ž‡™ÅNaۭ͇™ofbŪ­ũ‡’ë1 tØ!_´4ø2ō{‚ 2øú1V‹Ø! 2eˆ’Qa tđ!4˙`a˙`aŠē't"“ø%ēōL4˙ē’ų˜™ũ QČ* †ģ€6v L,=‚Ī€*‚į€U‚ۀj‡€6v MŊ‚Ž€*‚¤€U‚˜€jŠšMv`#S‚đ}‚㎍‚Ö"ÍMv`#‚‚cÍ}‚VÍŽ‚IÍĄĖMv`#_‚âĖ}‚ÕĖŽ‚ČĖ`#ņĖ ŽŠØ;Mv`#V‚<}‚ų;Ž‚ė;`#<,Ž„uvŒ} €€v"îj;^Õ™ģ:`ÕRŽ™ÅNaâǎ™ofbâÎÁŽ’$<€vx#_í>øJ<ō{‚ =<ø3<V‹x#Y<)’뛀v#Æ>˙ú›˙ú›Šē‡v¨#“ø%ēō…>˙ē’ūœvĀ#`?˙(‚b’:βvā#a–?‚IΊ˙S΋ā#‡Î˛vĒ‚Îŗ˙(·æÍ˛vMļ‚õÍŗ‚ ÎƏ˙˙Í„žv%| †ģ€Ëvių?‚Ī€ڏ‚း‚ۀ ‡€ËvMŊ‚Ž€ڏ‚¤€ø‚˜€ ’YÕvø#rĖA‚Ļ.‚™L‚Œv‚”ŠÕvø#).‚N.‚AL‚4v‚'”Š°Õvø#)‚åL‚Ųv‚Í”‹ø#ķ˛‘nÕvø#)~‚ŖL‚—v‚‹”‘)Õvø#)]‚`L‚Sv‚F”ŠÚÕvø#Ō‚L‚v‚”Š{Õvø#˛‚ŧL‚¯v‚ĸ”‹ø#Ë˛Š/Õvø#Œ‚]L‚Pv‚C”‹ø#lԐ„owŒ} ’Yæv$yŸC‚Ļ‘‚™&‘‚ŒP‘‚p‘Šæv$).‚N‘‚A&‘‚4P‘‚'p‘аæv$)‚å&‘‚ŲP‘‚Íp‘‹$ķŽ‘‘næv$)~‚Ŗ&‘‚—P‘‚‹p‘‘)æv$)]‚`&‘‚SP‘‚Fp‘ŠÚæv$Ō‚&‘‚P‘‚p‘Š{æv$˛‚ŧ&‘‚¯P‘‚ĸp‘‹$ËŽ‘Š/æv$Œ‚]&‘‚PP‘‚Cp‘‹$lŽ‘„KwŒ} ūLŗųvŠ‚[ŗä‘‚qŗ÷‘‚eŗ’€ųv‡ŗũv ˛‚"ŗ%’‚:ŗ8’‚.ŗS’‡ė˛ũv Mš‚û˛%’‚ŗ8’‚ŗS’„w”{ JDü—ͰwnœaDrEû5„Ēh‘šžoĪf’›__xorE‘ ‹0$__nrÕ›’žäŗÎwräD‚ķŗÁ’ūrÎw$‚ļrÁ’˙Ŧr‰ūĐwH$r E˙(øōnDžģ€xvfEøĪ€Vøį€U‚ۀë’‡€xMŊøŽ€Vø¤€U‚˜€ë’„ëwh<ĒDü°Ũ xxœEGû5„s‘Ģ__x*ØœØū’‹`$˜__y*ŪœØ4“’“Ķ6xˆ$*ßG‚ĸĶR“‚ŦĶp“’Yœ6x°$*™ƒF˙hœ‚rœš“‘W…6x°$ …‚f…š“’KL6xĐ$ #eF˙dL‚ZLĖ““‹x+8”R‘LŠģInxø$ #‚ĘIš“ūMĶPx *š‚\Ķߓ‚fĶō“ūūŌPx *…‚ Ķߓ‚!Ķ”‚Ķō“‡ĶŌPx Mš‚âŌߓ‚øŌ”‚ėŌō“„[x”{ „nxwEßl.G}Gā5„ŨBŪm* Ä}Gâîôŋ ƁîS7 Įîj; ȁņ__r Ę %īüŸâ xčœšG\{~d‚f…YŦ’ģI>\x- #Ed‚ĘIYŦŠKLA\- #‚dLnŦ‚ZL›Ŧ“Y\+8”RuG†W…Y\1{öd‚f…ŽŦ†ģIY\ #Ŋd‚ĘIŽŦūKL_\+ #‚dLÃŦ‚ZLđŦ“l\+8”RuG„ZÉU„bZ&V„ĸZųk„ëZųk„3[:L„{[:Lˆ†[„u\Š{ •õõĀ\åœEnĄšp~´'‘Ąŋp~´'‘ĄEP~Āõ‘ ĄJP~Āõ‘†ę ]~įe‚­‚'­ūĖ ]™‚× '­„*]ZT†ę *]~8føu¨Ÿ‚V­ūĖ *]™‚× V­„>]ZT’MŅG]¨-~cg‚mŅ…­‚cŅŊ­’ūãP]Ā-Čf‚äHŽ‚ä€Ž‹Ā-…b‘­PP]Ø-ƒ‚ÎPHŽ‚ÁPÅŽ„h]R$†ãs]  g‚ã莇*is] U‚9i莄{]qG†ãŒ_Rg‚ã"¯‡*iŒ_U‚9i"¯„˜_qGˆP]„q]įō’ũž‡]ø-~Žh‚ŋ7¯‚ŋo¯’zį•] .ķg‚šįœ¯‚įÔ¯‹ .…b‘­P•]8.ƒ‚ÎPœ¯‚ÁP°„­]R$’ãē]X.8h‚ã<°‘*iē]p.U‚9i<°„Â]qG†ã}_}h‚ãv°‡*i}_U‚9iv°„‡_qGˆ•]„¸]įō’MŅĐ]ˆ.~ši‚mŅ‹°‚cŅð’ūãŪ]¨.i‚äđ°‚ä(ą‹¨.…b‘­PŪ]Ā.ƒ‚ÎPđ°‚ÁP`ą„ö]R$†ã^ ci‚ãƒą‡*i^ U‚9iƒą„ ^qG†ãj_¨i‚ã°ą‡*ij_U‚9i°ą„v_qGˆŪ]„^įō’ūŊ^ā.~äj‚žÅą‚žíą’Öæ&^/Ij‚öæ'˛‚ėæO˛‹/…b‘­P&^/ƒ‚ÎP'˛‚ÁPm˛„>^R$†ãK^ Žj‚ã˛‡*iK^ U‚9i˛„S^qG†ã._Ķj‚ãŖ˛‡*i._U‚9iŖ˛„:_qGˆ&^„I^įō’)ãk^8/~Ōk‚;ã¸˛Šĸ…k^X/‚ą…˲Šōk^x/‚ ō➂ō˲’W…‘^˜/Žģk‚f…ô˛’ģI‘^°/ #‚k‚ĘIô˛ŠKL“^Č/ #‚dLŗ‚ZL=ŗ“_+8”Rw„ƒ^ŝ„Ŧ^”{ ’W…¯^č/~Jl‚f…[ŗ†ģI¯^ #l‚ĘI[ŗŠKLĩ^0 #‚dL}ŗ‚ZLŸŗ“ī^+8”Rv†W…ē^.~Âl‚f…Ŋŗ†ģIē^ #‰l‚ĘIŊŗūKLĀ^( #‚dLŌŗ‚ZLįŗ“Đ^+8”Rv†W…_~:m‚f…úŗ†ģI_ #m‚ĘIúŗūKL_ #‚dL´‚ZL<´“%_+8”RuG†)ã=_~€m‚;ãO´ūĸ…=_‚ą…d´„J_ō†W…M_~øm‚f…‘´’ģIM_0 #ŋm‚ĘI‘´ŠKLP_00 #‚dLĻ´‚ZLĶ´“h_+8”RuG„ũ\ÉU„G]&V„‡]ųk„Đ]ųk„^:L„`^:Lˆk^„._Š{ •ö°_åœGwĄšp´'‘Ąŋp´'‘ĄEPĀõ‘ ĄJPĀõ‘†ę `én‚æ´‚ ĩūĖ `™‚×  ĩ„`ZT†ę `:oøu¨Ÿ‚9ĩūĖ `™‚× 9ĩ„.`ZT’MŅ7`H0ep‚mŅhĩ‚cŅ ĩ’ūã@``0Ęo‚ä+ļ‚äcļ‹`0…b‘­P@`x0ƒ‚ÎP+ļ‚ÁP¨ļ„X`R$†ãc` p‚ãËļ‡*ic` U‚9iËļ„k`qG†ã|bTp‚ãˇ‡*i|bU‚9iˇ„ˆbqGˆ@`„a`įō’ËŊw`˜0q‚ëŊˇ‚áŊRˇ’„æ…`Ā0õp‚¤æˇ‚𿎎‹Ā0…b‘­P…`Ø0ƒ‚ÎPˇ‚ÁPüˇ„`R$’ãĒ`ø0:q‚㸑*iĒ`1U‚9i¸„˛`qG†ãmbq‚ãY¸‡*imbU‚9iY¸„wbqGˆ…`„¨`įō’MŅĀ`(1ģr‚mŅn¸‚cŅϏ’ūãÎ`H1 r‚ä͏‚ä š‹H1…b‘­PÎ``1ƒ‚ÎP͏‚ÁPCš„æ`R$†ãķ` er‚ãfš‡*iķ` U‚9ifš„û`qG†ãZbĒr‚㓚‡*iZbU‚9i“š„fbqGˆÎ`„ņ`įō’ūŊa€1æs‚ž¨š‚žĐš’Öæa 1Ks‚öæ ē‚ėæ2ē‹ 1…b‘­Pa¸1ƒ‚ÎP ē‚ÁPPē„.aR$†ã;a s‚ãsē‡*i;a U‚9isē„CaqG†ãbÕs‚ã†ē‡*ibU‚9i†ē„*bqGˆa„9aįō’)ã[aØ1Ôt‚;ã›ēŠĸ…[aø1‚ą…ŽēŠō[a2‚ ōÃē‚ōŽē’W…a82ŽŊt‚f…×ē’ģIaP2 #„t‚ĘI×ēŠKLƒah2 #‚dLģ‚ZL ģ“ōa+8”Rw„saŝ„œa”{ ’W…Ÿaˆ2Lu‚f…>ģ†ģIŸa #u‚ĘI>ģŠKLĨa 2 #‚dL`ģ‚ZL‚ģ“ßa+8”Rv†W…Ēa.Äu‚f… ģ†ģIĒa #‹u‚ĘI ģūKL°a( #‚dLĩģ‚ZLĘģ“Āa+8”Rv†W…b‚f…ĀÆģIōd #‚ĘIĀÃūKLød #‚dLÕÂZLÄ“e+8”RuG†)ãe„„‚;ãÄūĸ…e‚ą…*Ä„*eō†W…-e„ü‚f…WÄ’ģI-eX5 #ÂĘIWÄŠKL0ep5 #‚dLlÄ‚ZL™Ä“He+8”RuG„ŨbÉU„'c&V„gcųk„°cųk„øc:L„@d:LˆKd„eŠ{ •pöeåœK‰Ąšp‡´'‘Ąŋp‡´'‘ĄEP‡Āõ‘ ĄJP‡Āõ‘†ę åe‡í€‚ŦÄ‚ĐÄūĖ åe™‚× ĐÄ„úeZT†ę úe‡>øu¨Ÿ‚˙ÄūĖ úe™‚× ˙Ä„fZT’MŅfˆ5‡i‚‚mŅ.Å‚cŅfÅ’ūã f 5΁‚äņÅ‚ä)Æ‹ 5…b‘­P f¸5ƒ‚ÎPņÅ‚ÁPnÆ„8fR$†ãCf ‚‚ã‘Æ‡*iCf U‚9i‘Æ„KfqG†ã\hX‚‚ãËÆ‡*i\hU‚9iËÆ„hhqGˆ f„Afįō’ËŊWfØ5‡”ƒ‚ëŊ⯂áŊĮ’„æef6ų‚‚¤æEĮ‚šæ}Į‹6…b‘­Pef6ƒ‚ÎPEĮ‚ÁPÂĮ„}fR$’ãŠf86>ƒ‚ãåĮ‘*iŠfP6U‚9iåĮ„’fqG†ãMhƒƒ‚ãȇ*iMhU‚9iČ„WhqGˆef„ˆfįō’MŅ fh6‡ŋ„‚mŅ4Č‚cŅlČ’ūãŽfˆ6$„‚ä™Č‚äŅČ‹ˆ6…b‘­PŽf 6ƒ‚ÎP™Č‚ÁP É„ÆfR$†ãĶf i„‚ã,ɇ*iĶf U‚9i,É„ÛfqG†ã:hŽ„‚ãYɇ*i:hU‚9iYÉ„FhqGˆŽf„Ņfįō’ūŊčfĀ6‡ę…‚žnÉ‚ž–É’Öæöfā6O…‚öæĐɂ뿸ɋā6…b‘­Pöfø6ƒ‚ÎPĐÉ‚ÁPĘ„gR$†ãg ”…‚ã9ʇ*ig U‚9i9Ę„#gqG†ãūgŲ…‚ãLʇ*iūgU‚9iLĘ„ hqGˆöf„gįō’)ã;g7‡؆‚;ãaĘŠĸ…;g87‚ą…tĘŠō;gX7‚ ō‰Ę‚ōtĘ’W…agx7ŽÁ†‚f…Ę’ģIag7 #ˆ†‚ĘIĘŠKLcg¨7 #‚dLČĘ‚ZLæĘ“Ōg+8”Rw„Sgŝ„|g”{ ’W…gČ7‡P‡‚f…ˆģIg #‡‚ĘIËŠKL…gā7 #‚dL&Ë‚ZLHË“ŋg+8”Rv†W…Šg.‡ȇ‚f…fˆģIŠg #‡‚ĘIfËūKLg( #‚dL{Ë‚ZLË“ g+8”Rv†W…âg‡@ˆ‚f…ŖË†ģIâg #ˆ‚ĘIŖËūKLčg #‚dL¸Ë‚ZLåË“õg+8”RuG†)ã h‡†ˆ‚;ãøËūĸ… h‚ą… Ė„hō†W…h‡ūˆ‚f…:Ė’ģIhø7 #ň‚ĘI:ĖŠKL h8 #‚dLOĖ‚ZL|Ė“8h+8”RuG„ÍeÉU„f&V„Wfųk„ fųk„čf:L„0g:Lˆ;g„ūgŠ{ •Ö!€pœø´~S_Â/ƒ‹| p~S‘ƒßw p~S‘ƒ ˜ q/‘ ũ<‘‹(8­= tĩīĖ‰€`8 tí‰ø:ōq‰ø-ō€‰žR@€ |kŠ‚tĶĖ‚j„͇ߏ@€ -ႸĐ͂Íūu`@€ c‚¨`„Í‚›`k΄L€öžRS€ €éŠ‚t—΂j&·ߏS€ -ႸrĪ‚î&Īūu`S€ c‚¨`&Ī‚›`īĪ„_€öžRf€ „g‹‚tĐ‚jzЇߏf€ -Ⴘ¯Đ‚îzĐūu`f€ c‚¨`zĐ‚›`Ņ„r€öžR€€ xå‹‚t.Ņ‚jæŅ‡ߏ€€ -Ⴘ2Ō‚îæŅūu`€€ c‚¨`æŅ‚›`ŌŌ„‹€ö‰’€€8 zŒ‚ūŌž¸€ ~#Œ‚&ĶžЀ ‚BŒ‚NĶžR  ŒĀŒ‚tvĶ‚j‹Ķ‡ߏ  -ႸžĶ‚Ķūu`  c‚¨`‹Ķ‚›`ąĶ„,öž3 ŽßŒ‚ŨĶžR6 ]‚tõĶ‚j Ô‡ߏ6 -ႸÔ‚î Ôūu`6 c‚¨` Ô‚›`0Ô„BöžI ’|‚\Ô‡RL ”‚ttÔ‚j‰Ô‡ߏL -ႸœÔ‚Ôūu`L c‚¨`‰Ô‚›`¯Ô„Xöá"'Ž­ '%ŪœC Đ 'ŽŪÛ Ņ ,Žīī•4"påœã•´ŽB_ÂĻ/ƒ‹| pŽB‘ƒßw pŽB‘ƒ ˜ qĻ/‘ ũ<‘‹˜8­= táīÛÔ‰C¨†¸8 tŌŽøm¨ōWŽø`¨ōfމ…¨¸Ø8 |˛‚§¨ųÔ‚¨YÕ‘ø¸Ø8-ŋ‚ށՂ ŽĄÕ†ÕI¸ Ō v‚äIĄÕūģI¸ Õ‚ĘIĄÕūĄI¸ -‚°IĄÕū¨‚ Ô ‚5¨õÕ‚(¨Ö‚¨Ö„‚ōƒ ‰…¨đ8 €’‚§¨.Ö‚¨rÖ‘øđ8-ŋ‚ŽšÖ‚ ŽēÖ†ÕI Ō V‚äIēÖūģI Õ‚ĘIēÖūĄI -‚°IēÖū¨@‚ Ô ‚5¨öÖ‚(¨ ׂ¨×„K‚ōƒ ‰…¨ȁ9 „r‘‚§¨/ׂ¨sבøȁ9-ŋ‚ޛׂ Žģ׆ÕIȁ Ō 6‘‚äIģ×ūģIȁ Õ‚ĘIģ×ūĄIȁ -‚°Iģ×ū¨h‚ Ô ‚5¨÷ׂ(¨ Ø‚¨Ø„s‚ōƒ ž…¨á xR’‚§¨0Ø‚¨™Ø‡øá-ŋ‚ŽÁØ‚ Žá؆ÕIá Ō ’‚äIáØūģIၠՂĘIáØūĄIၠ-‚°IáØū¨č Ô ‚5¨<Ų‚(¨OŲ‚¨bŲ„ķōƒ ž §"‚ zq’‚§uŲž §V‚ ~’‚§Ųž §~‚ ‚¯’‚§ÅŲ‰…¨Ă 9 “‚§¨íŲ‚¨Ú‘øĂ 9-ŋ‚Ž7Ú‚ ŽWÚ†ÕIĂ Ō S“‚äIWÚūģIĂ Õ‚ĘIWÚūĄIĂ -‚°IWÚū¨0ƒ Ô ‚5¨uÚ‚(¨ˆÚ‚¨§Ú„?ƒōƒ ž §˂ ’Ž“‚§ēÚž…¨΂ ”Ž”‚§¨ŌÚ‚¨įÚ‡ø΂-ŋ‚Ž˙Ú‚ ŽÛ†ÕI΂ Ō R”‚äIÛūģI΂ Õ‚ĘIÛūĄI΂ -‚°IÛū¨Ղ Ô ‚5¨&Û‚(¨9Û‚¨LÛ„ā‚ōƒ ‰…¨ũ‚89 ŒÆ•‚§¨_Û‚¨Û‘øũ‚89-ŋ‚Ž¨Û‚ ŽŧÛ’ÕIũ‚P9 Ō 2•‚äIįÛŠģIũ‚p9 Õ‚ĘIįÛŠĄIũ‚p9 -‚°IįÛ’ÕIƒˆ9 Ō Š•‚äIŧÛūģIƒ Õ‚ĘIŧÛūĄIƒ -‚°IŧÛū¨ƒ Ô ‚5¨ûÛ‚(¨Ü‚¨8Ü„#ƒōƒ ‡ §ƒ Ž‚§KÜßk0û•–PĘkā5„Qˆč‡s-æĘk•n"`ƒˆœ™™´Ęk_ 0ƒ‹| pĘk‘ƒßw pĘk‘ƒ ˜ q 0‘ ũ<‘‹ 9­= t đc܉ų˜vƒØ9 t´–ø#™ō8–ø™ōG–žã• ƒ x—˙–‚û•‰Ü‡͘ĸƒ-Ⴟ˜žÜ‚ܘŅÜ„ŗƒ{| žã•žƒ |\—˙–‚û•Ũ‡͘Áƒ-Ⴟ˜;Ũ‚ܘNŨ„ԃ{| žã•Ũƒ €°—˙–‚û•ƒŨ‡͘āƒ-Ⴟ˜ĄŨ‚ܘ´Ũ„ņƒ{| žã•üƒ" „˜˙–‚û•ŌŨ‡͘˙ƒ-Ⴟ˜đŨ‚ܘŪ„„{| žã•S„ ŒX˜˙–‚û•!Ū‡͘U„-Ⴟ˜4Ū‚ܘGŪ„f„{| ž;™m„ Žw˜‚J™ZŪžã•p„ Ë˜˙–‚û•rŪ‡͘r„-Ⴟ˜…Ū‚ܘ˜Ū„ƒ„{| ž;™Š„ ’ę˜‚J™ĢŪžã•„# ”>™˙–‚û•ÃŪ‡͘„!-Ⴟ˜ÖŪ‚ܘéŪ„ „{| ‰;™Ā„ø9 z]™‚J™üŪž;™؄ ~|™‚J™$߇;™ā„ ‚‚J™Lßá¨"Ū™;Ęk_ÂÎŪ‹| ĶĘkŪßw ĶĘkŪ ˜ ÔÎáÄ0˙™_ÂÎč ˜-ėÎáÚ"AšPĘk_ 0č‹| ŸĘkčßw ŸĘkč ˜ Ÿ 0ß“˛Pš‚šā5„ačžoŽé__xo‚šâã__nr™´ŦAßX˛–šޚā5„aë__x‘ޚŦAüŧ€hŽœËšd§û5„ļH‘Ą™_M´'‘ĄäGN´'‘ĄīTOø‘ ĄķJP‘—:O§™šÕRž´tßĨzļZAA‘X’\¤h8:Ts›‚uŖß‚kāˆ°h’ąhP:Tĩ›‚”āŠ†qąhP:6‚Ÿq á˙•q†æģhT÷›‚õļáū†qģh$‚Ÿqâ˙•q’™™Áhh:T᥂Йēâ‚Ù'ã‚ļ™šã†hÁh ŨZœ‚,hēâ‚"hđãˆĐh’Ū™Ōh˜: Ũ ž‚ō™ä‰hŌh¸:-í¨œ‚,hä‚"hīäˆáh‰+ˆâhĐ:-íüœ‚Dˆ˜å‚:ˆæ‘hâhĐ:-á‚,h˜å‚"hæˆđh‰Vˆđhđ:-퐝‚hˆĻæŠW…đh;2‚f…üæ’ģIđh0; #U‚ĘIüæŠKLķhH; #‚dL į‚ZLč“?j+8”Ru@‡Vˆ l!-íøhˆu`ŸūW… l!2øf…u`Ÿ’ģI lh; #åøĘIu`ŸŠKLl€; #‚dL2č‚ZL_č“)l+8”Rud’˙™ i˜; ŨZŸ‚4šrč˙(š˙šž[™ i ĸŸž‚v™rč‚l™Õč‡h i-܂,hrč‚"hÕčˆi‰™/i°; ĸOŸ‚’™8é‘Vˆ/iĐ;-܂hˆ›éŠW…/iđ;2‚f…%ę’ģI/i< #Ÿ‚ĘI%ęŠKL2i(< #‚dL•ę‚ZLøę“¸j+8”Ru´„/i–’™CiH< Ũ  ‚’™ë‘VˆCi`<-܂hˆëŠW…Cix<2‚f…†ë†ģICi #Ο‚ĘI†ëŠKLIi< #‚dLÜë‚ZLLė“Pj+8”Ru@’VˆQi¨< ŨŸ ‚hˆzėŠW…QiĀ<2‚f…œė’ģIQiØ< #d ‚ĘIœėŠKLWiđ< #‚dLØė‚ZLúė“hj+8”Ru@†Vˆœk Ũ3Ą‚hˆíūW…œk2‚f…í†ģIœk #ų ‚ĘIíūKLĸk #‚dL-í‚ZLZ퓎k+8”RuOū™÷k Ũ‚’™mí‡Vˆ÷k-܂hˆmíūW…÷k2‚f…mí†ģI÷k #ŖĄ‚ĘImíūKLũk #‚dL‚í‚ZL—í“ l+8”Ru´’Vˆ_i=Tvĸ‚hˆĒíŠW…_i =2‚f…Ēí’ģI_i8= #;ĸ‚ĘIĒíŠKLeiP= #‚dLĖí‚ZLî퓈j+8”Ru@’W…mih=Tīĸ‚f… î’ģImi€= #ĩĸ‚ĘI îŠKLsi˜= #‚dL.î‚ZLPj+8”Ru@’W…Õi°=_iŖ‚f…nî’ģIÕiĐ= #.Ŗ‚ĘInîŠKLŪič= #‚dLĒî‚ZLæî“;k+8”Ruŧ†jfŖ‚!ī˙’Aš j>f@¤‚fšDī‚Zšfī‚PšŸī‹>tšÍīžÖ\k v4¤‚ęđ‚€!đ‚ö6đ‡š\k MŊ‚Šđ‚ŋ!đ‚ŗ6đ„,j/2’‡šĀj>iפ‚ šIđ‚–škđ†ÖËj•ˤ‚ęĄđ‚€šđ‚öÎđ‡šËjMŊ‚ŠĄđ‚ŋšđ‚ŗÎđ„)k/2†dæjlĨ‚,dáđ‚,dáđ’‚nôj8>l˜Ĩ‚›nņ‚‘n4ņ†L{üj•Ĩ‚`{Xņ‚x{nņ‚l{ƒņ‡{üjMŊ‚{Xņ‚5{nņ‚){ƒņ„Wkuf†W…yk#TĻ‚f…Ŗņ†ģIyk #×Ĩ‚ĘIŖņūKLk #‚dL¸ņ‚ZLåņ“‹k+8”RuO†VˆŽk T¤Ļ‚hˆøņūW…Žk 2‚f…øņ†ģIŽk #jĻ‚ĘIøņūKL´k #‚dL ō‚ZL:ō“Āk+8”RuO†W…Îk_§‚f…Mō†ģIÎk #ãĻ‚ĘIMōūKLÔk #‚dLbō‚ZLwō“āk+8”Ruŧˆ¤h„ši%| ˆ¯iˆÄi„ĶiäO„ík”{ „”kŠ{ „õkŠ{ ß7ŧs§Ĩ§ā5„ļHŪīTŽøŪķJŪņ%:•™ö0l/œÃ­Ą™_Š´'‘ĄôĒ´'‘ĄäGĢ´'‘ĄŸEŦ´'‘ Ą}o­Ī­‘ĄīTŽ×Û‘ĄķJ¯ãÛ‘Ąy°:‘—`>Ž­™ņąC:Šō’W…‘l€>ŗˍ‚f…žō’ģI‘l > #“¨‚ĘIžōŠKL”l¸> #‚dLķ‚ZL=ķ“Čm+8”Ru_’W…ĢlØ>ŗDŠ‚f…[ķ†ģIĢl # Š‚ĘI[ķŠKLąlđ> #‚dL¤ķ‚ZLí퓎m+8”Rw†#˙ēl ´dŠ„ŋlÜū’d§Ål?´—Ŧ‚—§ ô‚ЧJô‚}§‚ô‚s§ēô†čˆÅl˜øŠ‚÷ˆ õ‡6TÅlo‚ETnõūÕIÅl 6‚äInõ’"`Īl0?ĄpĒ‚1`Ãõ†é_Īl|7Ē‚ø_ėõūTÚl}‚+TöūĄIÚl ‚°Iö’ėSmH?™ÉĒ‚T.ö‚ûS]ö‘ĀSm`?J‚ŲS.ö‚ĪS]ö„(mū’ˆ(m€?™]Ģ‚͈°ö‘W…(m ?;‚f…°ö’ģI(mĀ? #"Ģ‚ĘI°öŠKL1mØ? #‚dLŌö‚ZLôö“Øm+8”RuT’čˆ:mđ?š´Ģ‚÷ˆ÷‘6T:mđ?o‚ET÷ŠÕI:mđ? 6‚äI÷†ˆ=n"™HŦ‚͈:÷‡W…=n";‚f…:÷†ģI=n # Ŧ‚ĘI:÷ūKLCn #‚dLO÷‚ZLd÷“Pn+8”RuT„đlŗš„úlŽn„mR¯„Smŝˆrm„†m­P„•m­Pˆmˆčm†W…nŗ­‚f…w÷’ģIn@ #ÖŦ‚ĘIw÷ŠKLn @ #‚dLŒ÷‚ZLš÷“n+8”Ru_†W…n"ŗ‡­‚f…Ė÷†ģIn #N­‚ĘIĖ÷ūKL!n #‚dLá÷‚ZLø“.n+8”Ru_ˆZlˆjl„vl%| ˆ‘l„ũm”{ „đmŠ{ „7nŠ{ ¨ĸļCđ„šœ&°øļÂÎÚļ‘ —8@ ŽŠåļŠņļ„%…Õ$‹X@˙Úļ‚Îļ!ø‚ÂļAø‚ļļlø‹X@åļĄøņļøø‰Bļ+…x@%ˆ˛Ž‚bļAø‚Vļlø‘īĩ+…x@.v‚ļAø‚ļlø‰oļ;…@%Œu¯‚”ļ7ų‚‡ļWų‚zļŒųŠ­O;…@ ™‚ŌOĐų‚ÅOWų‚¸OŒų†zOH… iQ¯‚ŸOú‚’O/ú‚…OBú„W…G„ ūŲNs… g˙đN‚äNaúžOC…%Œ”¯‚Oøø‰!O^…°@%’°‚:Otú‚0Oĩú€˜…ø:OVø0OUžæJ˜… Õņ¯˙õJ‡ŲNĸ… ×˙đNøäNuv"# Ÿ„;…4  ļā`nœŧĄ™_āŧ‘Ą™á#ŧ‘—Č@ ŧ™–â(ŧĶú˜pæH‘Kûî"įH‘ĨĮ!čÄ6‘TĨOéÄ6‘X’čžfnđ@âœąøŸĩĒŸ‚ŸŽû‹đ@Š.Ÿ’A…nA y #ąø3AĩĒŸ‚)AŌû„—nhŌp!”ą‚f…„ü†ģIŌp #[ą‚ĘI„üūKLØp #‚dL™ü‚ZLÆü“čp+8”Ru`ˆ…n†TwnâØą‚+TŲüūĄIwn ‚°IŲü’čž˜n0Aâ䲂Ÿũ‚ŸFũ‹0AŠ.Ÿ’AĻnXA y k˛‚3Aøũ‚)Aū†aOĻn `˛‚lOøũ„Žnė{ „ģnhEq!ܲøf…uXŸ’ģIEqpA #Ŗ˛øĘIuXŸŠKLHqˆA #‚dLŽū‚ZLģū“aq+8”Ru`ˆĻn’W…ģn Aâ\ŗ‚f…Îū’ģIģnĀA ##ŗ‚ĘIÎūŠKLžnØA #‚dL[˙‚ZLž˙“p+8”Ru`’TŌnøAæ˜ŗ‚+TÜ˙ŠĄIŌnøA ‚°IÜ˙’PTØnBįĖŗ‚mT$‚aTKû„čn>| ’t‰ín0Bč´‚ƒ‰`Š4‰ín0B ŧ˙Z‰˙M‰‚C‰†t‰ûné\´‚ƒ‰™ū4‰ûn ŧ˙Z‰˙M‰‚C‰™’˜ˇoHBî<ĩ‚Ōˇ ‚Æˇj‚ēˇš‚°ˇŲ‰Uˇo`B%åĩ‚ƒˇ ‚vˇj‚iˇš‹`BŠ ˇo`B ä‚;ˇ ‚.ˇj‚!ˇš‹`B„oĸļ‡4‰o%å˙Z‰˙M‰‚C‰"’ĀSoxBîpĩ‚ŲS"‚ĪSk„(oū’W…(o˜Bîčĩ‚f…ŋ’ģI(o¸B #¯ĩ‚ĘIŋŠKL1oĐB #‚dLî‚ZL“ p+8”RuW’ĀSNočBīļ‚ŲS;‚ĪSj„Xoū’W…XoCī”ļ‚f…ą’ģIXo C #[ļ‚ĘIąŠKLao8C #‚dLā‚ZL“°p+8”RuW†6Tiođˇ‚ET-ūÕIio 6‚äI-ūģIio Õ‚ĘI-ūĄIio -‚°I-’W…ŒoPC逡‚f…O’ģIŒopC #Gˇ‚ĘIOŠKL’oˆC #‚dLq‚ZL““âo+8”Rw’W…–o¨Cčøˇ‚f…ą’ģI–oĐC #ŋˇ‚ĘIąŠKLœođC #‚dLĶ‚ZLõ“úo+8”Rw’W… oDųp¸‚f…’ģI o0D #7¸‚ĘIŠKLĻoPD #‚dL5‚ZLW“p+8”Rw†^0p ōʸ‚,^u‚"^ūã¤0p 3‚ü¤u‚ō¤„DpO’^PphDëNš‚,^ĸ‚"^Ίã¤PphD 3‚ü¤ĸ‚ō¤Î†aOPp }Bš‚lOĸ„\pė{ „mpO’^mp€Dė¨š‚,^û‚"^Šã¤mp€D 3‚ü¤û‚ō¤„‚pO†W…Ŋpâē‚f…@†ģIŊp #įš‚ĘI@ūKLÃp #‚dLU‚ZLj†W…ķpī†ē‚f…}†ģIķp #Mē‚ĘI}ūKLųp #‚dL’‚ZLŋ“q+8”RuW†W…qéūē‚f…Ō†ģIq #Åē‚ĘIŌūKL q #‚dLį‚ZL“q+8”RuW†W…qčvģ‚f…'†ģIq #=ģ‚ĘI'ūKLq #‚dL<‚ZLi“)q+8”Ru`†W…)qųîģ‚f…|†ģI)q #ĩģ‚ĘI|ūKL/q #‚dL‘‚ZLĻ“;q+8”Ru`ˆLo„ƒoäO„ÆoäO„ĐpŠ{ „ņpŠ{ ô1ô1ô1üPŊpqŸœEŧ[Āû5„ļH‘ĄäXgåļ‘—˜DPĀ™– hōš™˛ŌjōŲ™RZq %" ™ržr %~ —°D;Ā˜is&'Ũ ’QaŖqĐDsķŧ‚`aI ‚`aI ‹čD™šÕtAAŊ ™™_u[Ā —Eŋ˜jx&'G ’Ŗcüq(Ex^Ŋ‚˛cq ‚˛cq ‹HE™ņyC:à Ĩ™z\F‘\™“}%÷ ™ „% ™ĩb‰%A ™ßH%a †…önr–ķŊ‚žö ‚”ö¯ ’W…trhE—mž‚f…Ú †ģItr #2ž‚ĘIÚ ŠKLzr€E #‚dLü ‚ZL “Hs+8”Ruŧ†W…Äs—įž‚f…< †ģIÄs #Ŧž‚ĘI< ūKLĘs #‚dLQ ‚ZLf “Ús+8”Ruŧ„Krō™ˆļr„ĘräO„âräO„ũr&°†…örvAŋ‚žöy ‚”ö™ ’W…Ps˜E˜ēŋ‚f…Ü †ģIPs #€ŋ‚ĘIÜ ŠKLVs°E #‚dL ‚ZL:“‘s+8”RuL†W…Ús#˜3Ā‚f…X†ģIÚs #ųŋ‚ĘIXūKLās #‚dLm‚ZL‚“đs+8”RuLˆüq„¤sŽ|„ˇsŽ|„ųsŠ{ ô1ŽÔ3txœÆÁƒō¸3´'‘—ČEģÁæBO4H‘žtI*t4ŅĀø“IŧÔŸ‚†I•„6tč} ž˜ˇ=t6´Á‚Ōˇî‚Æˇ5‚ēˇH‚°ˇ~‰Uˇ=tāE%åˆÁ‚ƒˇî‚vˇ5‚iˇH‹āEŠ ˇ=tāE ä‚;ˇî‚.ˇ5‚!ˇH‹āE„Jtĸļ‡4‰Jt%å˙Z‰‚M‰§‚C‰Ōˆnt„†tŠ{ áÖöīÁëstr )´'âî[% *´'áėöÂëstr ´'âî[% ´'ŦSĨ/3tiœ2Â%Ņû5„%Ņ‘ƒT@/4´'‘ƒkô/4 %‘š&/4´'đ—øEŅ7~/5@[œX/´'ø—hFyĘœô/@\F‘D­[V/F%9‰ÆÁuˆF/@íÄ‚ŅÁe‹ˆFŠāÁ†PTu *čmT,‚aTe„u>| †˜ˇu +åÄ‚ŌˇŽ‚ÆˇŽ‚ēˇÁ‚°ˇÔ‰Uˇu F%åŊÄ‚ƒˇŽ‚vˇŽ‚iˇÁ‹ FŠ ˇu F ä‚;ˇŽ‚.ˇŽ‚!ˇÁ‹ F„+uĸļ‡4‰+u%å˙Z‰˙M‰‚C‰ôˆ vží7u$/A Å‚‚üC„Lu‚G‰„æ[u¸F/B†Å‚¤æ‚šæ—‹¸F…b‘­P[uĐFƒ‚ÎP‚ÁPŦ„suR$‰:äsuđF/BDÆ‚ZäŅ‚Päæ‹đF…b‘~asuGƒ‚ąaŅ‚¤aû†ÕIsu Ų 7Æ‚äIŅūģIsu Õ‚ĘIŅūĄIsu -‚°IŅ„‰uR$‰Ąō‰u8G/BĒÆ‚Áō ‚ˇō8‹8G…b‘­P‰uXGƒ‚ÎP ‚ÁPM„ĄuR$‰W…Ąu€G/C!Į‚f…r’ģIĄu G #诂ĘIrŠKL¤u¸G #‚dL‡‚ZLœ“Žv+8”Rvv:ŌĮit/Gw¯žvv/HyĮ‚…ëū2„v0X‚A„ë‰\0vØG/GĸĮ‚k„9vę$‡­bCv/J‚āb‚ĶbG„QvöžŧXv/QČ‚Õ\‚Ëq€XvŠä„jvLžW…mv/V{Č‚f…†’ģImvđG #TČ‚ĘI†ŠKLpvH #‚dL›‚ZL°‰Ėį˜v H/SáČ‚ėįÂâįÛ‹ H…b‘­P˜v8Hƒ‚ÎPÂÁPđ„°vR$‰:ä°vXH/SŸÉ‚Zä‚Pä*‹XH…b‘~a°vxHƒ‚ąa‚¤a?†ÕI°v Ų ’É‚äIūģI°v Õ‚ĘIūĄI°v -‚°I„ÆvR$‰Æv H/TĘ‚.d‚$|‹ H…b‘­PÆv¸Hƒ‚ÎPd‚ÁP‘„ŪvR$‡W…Ux/V‚f…ļ†ģIUx #?Ę‚ĘIļūKL[x #‚dLË‚ZLø“kx+8”R‘D‡īÁģu=/>‚úÁ €ģu= Â’PTģuØH ÛĘ‚mT1‚aT „Æu>| ūRSÛu #‚]S`„įue„ ėvŨJ͝it/Xwžvėv/Y\Ë‚…Čū2„ėv0X‚A„ȉOōwđH/\ÂË‚oōā‚eō‹đH…b‘­PwIƒ‚ÎPā‚ÁP*„qwR$‰\w(I/XëË‚kO„wę$‰í9w@I/[Ė‚g‚ü‰„Gw‚G‰W…GwXI/[—Ė‚f…Ģ’ģIGwxI #\Ė‚ĘIĢŠKLJwI #‚dLÍ‚ZLī“šw+8”R‘ ‰ _ww°I/\áĖ‚)_ ‚_/‹ĐI˙)_‚_Q„‹w­P‰bå‹wđI/\CÍ‚‚åf˙xå‹đI…b‘­P‹wJƒ‚ÎPf‚ÁP~„ĻwR$ˆ6wžĸãÕw/aŖÍ‚ÕãŖ‚Čãū­bÕw  ‚ābŖ‚Ķb„äwö‰W…īw(J/`΂f…ˆģIīw #áÍ‚ĘIËŠKLõw@J #‚dLö‚ZL “-x+8”R‘ žJúw/=`΂[)‡áĶúw0Z‚đĶ)„xwEžãx /h¤Î‚ã>‡*ix U‚9i>„xqGžJ1x/=č΂[S‡áĶ1x0Z‚đĶS„?xwEžã?x/h,Ī‚ãh‡*i?xU‚9ih„KxqGžW…sx/`ŖĪ‚f…}†ģIsx #jĪ‚ĘI}ūKLyx #‚dL’‚ZLŋ“†x+8”R‘@žT”x/cŪĪ‚+TŌūĄI”x ‚°IŌ‰W…ˇxXJ/cUĐ‚f…ō’ģIˇxpJ #Đ‚ĘIōūKLĀx #‚dL‚ZL4“Íx+8”R‘@ž¯^Úx/etĐ„ßxĐ| žW…áx/cëĐøf…‘ †ģIáx #˛ĐøĘI‘ ūKLįx #‚dLG‚ZLt“ôx+8”R‘@ˆÛt„Õwy]„œx”“„ˇxJ‚ „×xw} „SxŠ{ ķ6ô1Œ8!y@œkĶ‚C!‡—ˆJ`́R!Ā‹ JŠa!l!’PT0y¸Jģ¨ŅmT@‚aTQ„;y>| ’˜ˇHyĐJÁYŌ‚Ōˇo‚ÆˇŠ‚ēˇŌ˙°ˇ‘UˇHyĐJ%傃ˇo‚vˇŠ‚iˇŌ‹ĐJŠ ˇHyĐJ ä‚;ˇo‚.ˇŠ‚!ˇŌ‹ĐJ„Uyĸļ’W…iyčJÁÉŌ˙f…†ģIiy #Ō˙ĘIŠKLlyK #‚dLå‚ZLú“đy+8”Ruf†W…$zÁ@Ķ˙f…†ģI$z #Ķ˙ĘIūKL'z #‚dL2‚ZL_“7z+8”Pwt”Ruf„fyp„Ęyp„zp„@zŠ{ •÷°…Ũœ×%š<%ĄéÆ:‘ĄÆä,‘—KūÖ˜i %‹8K[Ĩ[o‘[|¤ĨīP\F‘\˜argH‘Š’T†PK<Ô‚+TÔŠĄI†PK ‚°IԐ$†+ZÔ˜jB %ö†­bȈLŽÔ‚āb ‚Ķb1„ڈö†­b‰LÂÔ‚ābS‚Ķbk„"‰ö†­b)‰MöÔ‚āb€‚Ķb˜„;‰ö†­bB‰M*Õ‚āb­‚ĶbÅ„T‰ö’W…Z†hKĸÕ‚f…Ú’ģIZ†€K #iÕ‚ĘIÚŠKL`†˜K #‚dLü‚ZL“ ‰+8”Ruc†W…n‰Öøf…udŸ†ģIn‰ #áÕøĘIudŸūKLt‰ #‚dL<‚ZLi“„‰+8”Rucŗ†ŦŸ?Ö”PuLŧƒøv2$w"„†|¤„°†|¤„͆|¤„ö†Ĩ„‡Ĩ„<‡|¤„_‡Ĩ„‚‡Ĩ„Ĩ‡|¤„ȇĨ„ë‡|¤„ˆo‘„1ˆo‘„Tˆ|¤„wˆo‘„šˆĨ„Ŋˆ|¤“c‰†ž”PuP„І/Ņ„‰Š{ •&÷@z!œRץébÆ:‘ĄÆbä,‘„\zkĶ•A÷‰ÕœßÚ%š'%ĄéÆ:‘ĄÆM‘‘—°KĘÚ˜i %|‹ČK[Ĩ[o‘[|¤ĨīP\F‘\˜argH‘Ļ’Tā‰āK#Ø‚+TŅŠĄIā‰āK ‚°IҐū‰&AؘjB %톭b ŒLuØ‚āb‚Ķb.„˛Œö†­bčŒLŠØ‚ābP‚Ķbh„úŒö†­bMŨØ‚āb}‚Ķb•„ö†­bMŲ‚ābĒ‚Ķb„,ö’W…/ŠøK‰Ų‚f…×’ģI/ŠL #PŲ‚ĘI׊KL5Š(L #‚dLų‚ZL “ãŒ+8”Ruc†W…FÚøf…udŸ†ģIF #ČŲøĘIudŸūKLL #‚dL9 ‚ZLf “\+8”Ruc„ā‰:„÷‰|¤„ˆŠ|¤„̊|¤„ΊĨ„ņŠĨ„‹|¤„7‹Ĩ„Z‹Ĩ„}‹|¤„ ‹Ĩ„Ë|¤„æ‹o‘„ Œo‘„,Œ|¤„OŒo‘„rŒĨ„•Œ|¤“;†ž”PuT„_Š/Ņ„eŠ{ •e÷pz!œÛĄé_Æ:‘ĄÆ_M‘‘„ŒzRו€÷pßœéÛĪĀ­ĒiŌĄė1ybI‘’éR’@L{~Û‚øRy ‚Sˇ †­PŽ{ŽÛ‚ÎPß ˙ÁP„ŽR$„ōŝ„⍄ ˆŽˆ&Ž„<Ž=„ ˆGŽ„OŽŠ{ ߲ÁøÛ=Üā5„ęâîmmíCKîUķoKîÁMôCKâîōÂõ%ü돠zųœUÜŪû5„ļH‘’ ęˇz`LēŪ‚ę!Šíéˇz`LĶ‚üé!ŠéÛˇz`LŌ‚øÛ!‹`LÜ{!Ü™!Ü™!†§éĪzđûÜ‚ļéˇ!†Áéėzķ%Ũ‚Úé×!‚Đé"—€LÃŨ-ÜF"’­P:{˜LõlŨøÎPčÁŸ˙ÁP„Q{R$’­PQ{°LõœŨ‚ÎPz"˙ÁP„h{R$„{z„ ˆ:{„v{=ˆ{ˆ‘{†§é{öãŨ‚ļé’"„ŋz⁠„ĪzÛ„ęz%| „™{Š{ ü š { œ(Ūāû5„ļH‘Ą¤öŋp@‘’Eęˇ{ČLĀõßø^ęō5Ū‚TęĨ"Š&ęˇ{čLÔ‚5ęĨ"ŠéÛˇ{čLŅ‚øÛĨ"‹čLÜ#Ü7#Ü7#†§éŌ{đëŪ‚ļéb#†Áéô{ķß‚Úé‚#‚ĐéČ#—Mŗß-Üū#’­PJ|0Mõ\ßøÎPčÁŸ˙ÁP„a|R$’­Pa|HMõŒß‚ÎP2$˙ÁP„x|R$„|z„ ˆJ|„†|=ˆ|ˆĄ|†§é|öĶß‚ļéJ$„ŋ{⁠„Ī{Û„ō{%| „Š|Š{ üJ°|\œā†āû5„†ā‘‹`M™`3/ļHj$†#˙Â|/\ā„Į|Üū„Ų|=Ü„å|Ū„ų|ä„}ōáØHßÚā˛āā5„†āŪã;09÷‹āá}7œÎāëāøšā‘ø¤ā‘„B}āßßúāáā5„†āŪ ö(xŪã;(09÷ëā‰LP}7œ;áaáøúā‘øá‘øá‘„‚}āßpá•áā5„†āāÖš%âî`3<ļH÷aáȐ}]œąáâøpá‘‹xM†áˆ$†#˙¯}<ęá„´}Üū„É}Ū„ä}ōá÷aá'”đ}(œâ6âøpᑈ ~„~”{ ß%ĶEâPâā5„ō*÷6â{­ ~PœlâČâøE⑞#˙C~\”â„H~Üū‰#˙S~M]ŗâ„^~Üū„S~=Ü„j~Ūß;Ķ×âėâā5„ō*āÖš%÷Čâ…ßp~9œã;ãø×⑞#˙’~b0ã„—~Üū„Ŗ~Ū÷Čâ°~(œWãqãø×⑈Ę~„Ō~”{ ¨ö>NPŽXœ,ä‚ ?Ļ$ø?‘‘aĨjލMg‚uĨŨ$‘W…jލM]‚f…Ũ$’KLjŽČM # ä‚dL%‚ZL5%“œŽ+8”R‘LūģI‡Ž #‚ĘIŨ$ßņÎ;äFäā5„ ß\ĶUämäā5„Ēhë__x‘mäĒDß5dä™äā5„Öhë__x>™äÖ7ßâb­äÄäā5„Öué__nˇđáōåÄ:ŽB`Ũč‹|)DŽBčßw)DŽBčá;)EŨâæö*)GŨßcĪ-åSåIStrā5„ Ū$ˆSåâņi‰—cÖ7ß$Īgååā5„ ŪNƒ´'áŦ÷UæŪÆę9DŪy…ę %âî¤Hë…Īîˆ ėžŽîX˜‚4î{]‚4îūķ%õûåî: %õCæîŋ+%îĐXĘ5î>a!šKî Ę+Ę5,šKâî:@ %ßĪdæ‡æā5„ āÖš%âņi~ĪüøÔā~y(œŸæ_Hû5„€‘—čMTH™`3M>XS%™féN Uf%™“$PēVy%ĨũĸQ%‘čzĨXų‘ }Ĩæ^\F‘ėzĨ@]a\F‘đzĨ¤Hf×Α°}îˆ rŌ†#˙÷~Mkį„ü~Üū†*˙˙~O§į‚9˙S%ūa˙~˙‚"aÚ%†U]!TŅį‚d]đ%‚n]&’W…pNYKč‚f…=&†ģIp #č‚ĘI=&ŠKLy(N #‚dLo&‚ZLĄ&“+ƒ+8”RuØz’W……@NYÅč‚f…ŋ&†ģI… #Šč‚ĘIŋ&ŠKLŽXN #‚dL˙&‚ZL?'“;ƒ+8”RuØz’W…špNY?é‚f…]'†ģIš #é‚ĘI]'ŠKLŖˆN #‚dL'‚ZLÁ'“ƒ+8”RuØz’W…¯ NYšé‚f…ß'†ģI¯ #~é‚ĘIß'ŠKL¸¸N #‚dL(‚ZLC(“ ƒ+8”RuØz’W…ÄĐNY3ę‚f…a(†ģIÄ #øé‚ĘIa(ŠKLÍčN #‚dL“(‚ZLÅ(“û‚+8”RuØz’W…ŲOY­ę‚f…ã(†ģIŲ #rę‚ĘIã(ŠKLâO #‚dL)‚ZL+)“#+8”RuØz’Ĩ˙î0OY×ę„ķ\„(\’W…í€HOYPë‚f…I)’ģIí€`O #ë‚ĘII)ūKLų€ #‚dLr)‚ZLŊ)“+8”Ru˜}’W…@xO\Ęë‚f…Đ)†ģI@ #ë‚ĘIĐ)ŠKLIO #‚dL*‚ZL4*“‹‹+8”RuØz’W…U¨O\Dė‚f…R*†ģIU # ė‚ĘIR*ŠKL^ĀO #‚dL’*‚ZLŌ*“›‹+8”RuØz’W…jØO\žė‚f…đ*†ģIj #ƒė‚ĘIđ*ŠKLsđO #‚dL"+‚ZLT+“{‹+8”RuØz’W…P\8í‚f…r+†ģI #ũė‚ĘIr+ŠKLˆ P #‚dL¤+‚ZLÖ+“k‹+8”RuØz’W…”8P\˛í‚f…ô+†ģI” #wí‚ĘIô+ŠKLPP #‚dL&,‚ZLX,“[‹+8”RuØz’W…ЁhP\,î‚f…v,†ģIЁ #ņí‚ĘIv,ŠKL˛€P #‚dLš,‚ZLž,“Kƒ+8”RuØz’Ĩ˙ž˜P\Vî„Á\„Pƒ\’W…Á‚°P\Īî‚f…Ü,’ģIÁ‚ČP #•î‚ĘIÜ,ūKL͂# #‚dL-‚ZLi-“ä‚+8”Ru˜}’aZ`ƒāP`'ī‚pZ|-ŠT`ƒāPw‚+T‘-ŠĄI`ƒāP ‚°I‘-’{ZrƒøP`ī‚ŠZĒ-ŠTrƒøPt‚+TĒ-ŠĄIrƒøP ‚°IĒ-—Qíī‚f…ŋ-’ģIT„0Q #ŗī‚ĘIŋ-ŠKL`„HQ #‚dL".‚ZLŒ.“Jš+8”Ru }—`Q\đ‚f…Ē.†ģIl„ #!đ‚ĘIĒ.ŠKLu„xQ #‚dL"/‚ZLš/“Zš+8”RuØz—QËđ‚f…¸/†ģI„ #đ‚ĘI¸/ŠKLŠ„¨Q #‚dL00‚ZL¨0“jš+8”RuØz—ĀQ:ņ‚f…Æ0†ģI–„ #˙đ‚ĘIÆ0ŠKLŸ„ØQ #‚dL>1‚ZLļ1“zš+8”RuØz—đQŠņ‚f…Ô1†ģIĢ„ #nņ‚ĘIÔ1ŠKL´„R #‚dLL2‚ZLÄ2“Šš+8”RuØz— Rō‚f…â2†ģIĀ„ #Ũņ‚ĘIâ2ŠKLɄ8R #‚dLZ3‚ZLŌ3“šš+8”RuØz—PR‡ō‚f…đ3’ģI%†pR #Lō‚ĘIđ3ŠKL1†ˆR #‚dL‰4‚ZL5“ǚ+8”RuØz— Röō‚f…5†ģI=† #ģō‚ĘI5ŠKLF†¸R #‚dL—5‚ZL6“ēš+8”RuØz—ĐReķ‚f…-6†ģIR† #*ķ‚ĘI-6ŠKL[†čR #‚dLĨ6‚ZL7“ƚ+8”RuØz—SÔķ‚f…;7†ģIg† #™ķ‚ĘI;7ŠKLp†S #‚dLŗ7‚ZL+8“ښ+8”RuØz—0SCô‚f…I8†ģI|† #ô‚ĘII8ŠKL…†HS #‚dLÁ8‚ZL99“ęš+8”RuØz—`S˛ô‚f…W9†ģI‘† #wô‚ĘIW9ŠKLš†xS #‚dLĪ9‚ZLG:“úš+8”RuØz—S!õ‚f…e:†ģIφ #æô‚ĘIe:ŠKL¯†¨S #‚dLŨ:‚ZLU;“ ›+8”RuØz—ĀSõ‚f…s;†ģIģ† #Uõ‚ĘIs;ŠKLĆØS #‚dLë;‚ZLc<“›+8”RuØz—đS˙õ‚f…<†ģIІ #Äõ‚ĘI<ŠKLŲ†T #‚dLų<‚ZLq=“*›+8”RuØz— Tnö‚f…=†ģIå† #3ö‚ĘI=ŠKLî†8T #‚dL>‚ZL>“:›+8”RuØz—PTŨö‚f…>†ģIú† #ĸö‚ĘI>ŠKL‡hT #‚dL?‚ZL?“J›+8”RuØz—€TL÷‚f…Ģ?†ģI‡ #÷‚ĘIĢ?ŠKL‡˜T #‚dL#@‚ZL›@“Z›+8”RuØz’W…$‡°TeÆ÷‚f…š@†ģI$‡ #‹÷‚ĘIš@ŠKL-‡ČT #‚dL1A‚ZLŠA“j›+8”RuØz’,ä9‡āTfŪø‚;äĮA’Fä9‡øTzø‚_ä?B‚UäˇB„w‡h<’@B‡Uypø‚OĮAŠͲB‡U‚ܲĮA‘ޞB‡U}‚Ŋ˛ĮAū”´¸Ļy‚Ŗ´/CūĀŗ¸ĻЂκ/C‡LŗžĻ ˙[ŗ‚qŗEC‚eŗcCŊžĻ’Ũz‡0Ug9ü‹0UŠę’rä‡`Um-ü‚‹ävC‚äĒC’ķb‡˜U@Jų˙c˙c’€Đ†‡°U@Tú‚ĨĐD‚™Đ=D‚Đ“Dž‹Ļ†‡‡Ļų‚¤ĻD‚šĻ“D‘žäЇ¸Uˆ‚ˇä=D‚­ä“D‘ĐЇØUš˙+Đ‚5Đ=D‹ØU‘ķĪ ‹āUĒ˙ūĪ‚ ĐũD‘ČĪ ‹āUMļ˙×Ī‚íĪ9E‚áĪũD„´‹%| „M%’¸§ā‡øUDzû‚¨YE˙ø§˙ë§˙Ū§Šg§ā‡øU)˙œ§˙§˙„§‹øUǧÃE‘Ää⇸U)~˙ųä˙íä‚áäF‹øUå6FžĐĻđ‡)Kû‚ųĻjF‚íĻ Fˆū‡ž‚ĨŅ›)PWû‚ĸĨãF˙–Ĩ€Ņ›„ߛö>„Ņ›–‚ „į›Ē‚ „Fž°‚ ūņĨFž!@‚ĻG‡á¤Lž ˙đ¤‚ĨG‚ú¤5G€Lž‡Ŧ¤Tž˛˙ˇ¤‚ΤHG‚äfG‡¤TžMš˙¤‚ϤHG‚š¤fG„]ž”{ „‡–Άå-ˆUgōü‚7åyG‚-åĢG€-ˆUFåŨG†6 @ˆ Œ ü‚A  H„Jˆ•„ ’ļPˆVŒÆü‚Ī,H˙ņ §wˆ‰æü‚§LH„tˆID†X合9hvũ‚qådH‚gå…H†6 ˆ „Eũ‚A dH„œˆ•„ ’ļĸˆ0V„kũ‚Ī I˙Å„ɈID’XåɈHViúũ‚qågI‚gåˆI†6 Ɉ „Éũ‚A gI„Ԉ•„ ’ļڈ`V„īũ‚ĪJ˙Å„õˆID’W…‰xVktū‚f…jJ’ģI‰˜V #9ū‚ĘIjJŠKL$‰°V #‚dLK‚ZLŒK“Ļ›+8”RuØz†˙5‰ p”ū„?‰w} ’å?‰ČVrH,‚—åĒK‚ŠåŋK‹ČVŸĻ周}ŗåÔKŸĀå‘Č}ŸÍå‘Ô~ÚåĩL—WøíåÛL’W…‘Š8W‚˙‚f…îL’ģI‘ŠXW #H˙‚ĘIîLŠKLŠpW #‚dLM‚ZL6M“;Œ+8”Ru€}’W…ЊˆWü˙‚f…TM†ģIЊ #Á˙‚ĘITMŠKL˛Š W #‚dLxM‚ZLœM“+Œ+8”RuĖz’W…žŠ¸Wv‚f…ēM†ģIžŠ #;‚ĘIēMŠKLĮŠĐW #‚dLŪM‚ZLN“Œ+8”RuĖz’W…͊čWđ‚f… N†ģI͊ #ĩ‚ĘI NŠKL܊X #‚dLDN‚ZLhN“ Œ+8”RuĖz’W…čŠXj‚f…†N†ģIčŠ #/‚ĘI†NŠKLņŠ0X #‚dLĒN‚ZLÎN“û‹+8”RuĖz’W…ũŠHXä‚f…ėN†ģIũŠ #Š‚ĘIėNŠKL‹`X #‚dLO‚ZL4O“ë‹+8”RuĖz’W…‹xX^‚f…RO†ģI‹ ##‚ĘIROŠKL‹X #‚dLvO‚ZLšO“Ķ‹+8”RuĖz†W…'‹)Ø‚f…¸O†ģI'‹ #‚ĘI¸OūKL0‹ #‚dLÎO‚ZLäO“G‹+8”RuÔz†W…OQ‚f…÷O†ģIO #‚ĘI÷OūKLX #‚dL P‚ZL ‚f…ÉT†ģI˙Œ # ‚ĘIÉTŠKL€Y #‚dLíT‚ZLU“kŽ+8”RuĖz’W…˜Y#¸ ‚f…/U†ģI #} ‚ĘI/UŠKL°Y #‚dLSU‚ZLwU“[Ž+8”RuĖz’W…)ČY#2 ‚f…•U†ģI) #÷ ‚ĘI•UŠKL2āY #‚dLšU‚ZLŨU“KŽ+8”RuÔz†Ĩ˙>#R „C\’W…ŽøY#Ė ‚f…ûU’ģIŽZ #‘ ‚ĘIûUūKL"Ž #‚dLV‚ZL=V“9Ž+8”RuĖz’W…؎(Z/F ‚f…PV†ģI؎ # ‚ĘIPVŠKLáŽ@Z #‚dLtV‚ZL˜V“ģ+8”RuĖz’W…íŽXZ/Ā ‚f…ļV†ģIíŽ #… ‚ĘIļVŠKLöŽpZ #‚dLčV‚ZLW“ː+8”RuĖz’W…ˆZ/: ‚f…8W†ģI #˙ ‚ĘI8WŠKL  Z #‚dL\W‚ZL€W“̐+8”RuĖz’W…¸Z/´ ‚f…žW†ģI #y ‚ĘIžWŠKL ĐZ #‚dLÂW‚ZLæW“›+8”RuĖz’W…,čZ/. ‚f…X†ģI, #ķ ‚ĘIXŠKL5[ #‚dL(X‚ZLLX“‹+8”RuĖz’W…A[/¨ ‚f…jX†ģIA #m ‚ĘIjXŠKLJ0[ #‚dLŽX‚ZL˛X“{+8”RuÔz†Ĩ˙V/Č „[\’W…@H[/B‚f…ĐX’ģI@`[ #‚ĘIĐXūKLL$ #‚dLîX‚ZLY“c+8”RuĖz’W…‘x[4ŧ‚f…%Y†ģI‘ #‚ĘI%YŠKL‘[ #‚dLIY‚ZLmY“ë’+8”RuĖz’W…‘¨[46‚f…‹Y†ģI‘ #û‚ĘI‹YŠKL&‘Ā[ #‚dLŊY‚ZLīY“û’+8”RuĖz’W…2‘Ø[4°‚f… Z†ģI2‘ #u‚ĘI ZŠKL;‘đ[ #‚dL1Z‚ZLUZ“ے+8”RuĖz’W…G‘\4*‚f…sZ†ģIG‘ #ī‚ĘIsZŠKLP‘ \ #‚dL—Z‚ZLģZ“˒+8”RuĖz’W…\‘8\4¤‚f…ŲZ†ģI\‘ #i‚ĘIŲZŠKLe‘P\ #‚dLũZ‚ZL![“ģ’+8”RuĖz’W…q‘h\4‚f…?[†ģIq‘ #ã‚ĘI?[ŠKLz‘€\ #‚dLc[‚ZL‡[“Ģ’+8”RuÔz†Ĩ˙†‘4>„‹‘\’W…u’˜\4¸‚f…Ĩ[’ģIu’°\ #}‚ĘIĨ[ūKL’ #‚dLÃ[‚ZLį[“˜’+8”RuĖz†W…gž/2‚f…ú[†ģIgž #÷‚ĘIú[ūKLpž #‚dL\‚ZL&\“ƒž+8”RuĖz†W…ƒž/Ŧ‚f…9\†ģIƒž #q‚ĘI9\ūKLŒž #‚dLO\‚ZLe\“Ÿž+8”RuĖz†W…Ÿž$/‚f…x\†ģIŸž #ë‚ĘIx\ūKL¨ž #‚dLŽ\‚ZL¤\†W…Þ#Œ‚f…ˇ\†ģIÞ #Q‚ĘIˇ\ūKLĖž #‚dLÍ\‚ZLã\“ߞ+8”RuĖz†W…ߞ#‚f…ö\†ģIߞ #Ë‚ĘIö\ūKLčž #‚dL ]‚ZL"]“ûž+8”RuĖz†W…ûž#€‚f…5]†ģIûž #E‚ĘI5]ūKLŸ #‚dLK]‚ZLa]“Ÿ+8”RuĖz†W…Ÿ#ú‚f…t]†ģIŸ #ŋ‚ĘIt]ūKL Ÿ #‚dLŠ]‚ZL ]“3Ÿ+8”RuĖz†W…3Ÿ#t‚f…ŗ]†ģI3Ÿ #9‚ĘIŗ]ūKL<Ÿ #‚dLÉ]‚ZLß]“OŸ+8”RuĖz†W…OŸ#î‚f…ō]†ģIOŸ #ŗ‚ĘIō]ūKLXŸ #‚dL^‚ZL^“kŸ+8”RuĖz†W…kŸ:#T‚f…1^†ģIkŸ #-‚ĘI1^ūKLtŸ1 #‚dLG^‚ZL]^†W…Ãĸ4΂f…p^†ģIÃĸ #“‚ĘIp^ūKLĖĸ #‚dL†^‚ZLœ^“ßĸ+8”RuĖz†W…ßĸ4H‚f…¯^†ģIßĸ # ‚ĘI¯^ūKLčĸ #‚dLÅ^‚ZLÛ^“ûĸ+8”RuĖz†W…ûĸ4‚f…î^†ģIûĸ #‡‚ĘIî^ūKLŖ #‚dL_‚ZL_“Ŗ+8”RuĖz†W…Ŗ4<‚f…-_†ģIŖ #‚ĘI-_ūKL Ŗ #‚dLC_‚ZLY_“3Ŗ+8”RuĖz†W…3Ŗ4ļ‚f…l_†ģI3Ŗ #{‚ĘIl_ūKL<Ŗ #‚dL‚_‚ZL˜_“OŖ+8”RuĖz†W…OŖ40‚f…Ģ_†ģIOŖ #õ‚ĘIĢ_ūKLXŖ #‚dLÁ_‚ZL×_“kŖ+8”RuĖz†W…kŖ:4–‚f…ę_†ģIkŖ #o‚ĘIę_ūKLtŖ1 #‚dL`‚ZL`†W…ĨŖ/‚f…)`†ģIĨŖ #Õ‚ĘI)`ūKLŽŖ #‚dL?`‚ZLU`“ÁŖ+8”RuĖz†W…ÁŖ/Š‚f…h`†ģIÁŖ #O‚ĘIh`ūKLĘŖ #‚dL~`‚ZL”`“ŨŖ+8”RuĖz†W…ŨŖ/‚f…§`†ģIŨŖ #É‚ĘI§`ūKLæŖ #‚dLŊ`‚ZLĶ`“ųŖ+8”RuĖz†W…ųŖ3/~‚f…æ`†ģIųŖ #C‚ĘIæ`ūKL¤* #‚dLü`‚ZLa“¤+8”RuĖz„gŒ%} „wŒۄ „Œį„ „Yŝ„ˆâoˆĸ„ščž„Īčž„äœ)„účž„Žčž„Ži˙„ƒŝ„˛âoˆĖ„ãčž„ųčž„œ)„$čž„:čž„@i˙„ꐅ „§‘@… „¸‘ŝ„į‘âoˆ’„’čž„.’čž„C’œ)„Y’čž„o’čž„u’i˙„t›zŠ„ƒ›?} „t O} —Č\Ü$Eæ%a’W… ”č\@_‚f…8a’ģI ”] #$‚ĘI8aŠKL” ] #‚dLKa‚ZLaa“˔+8”RuĖz’W…%”8]@Ų‚f…a†ģI%” #ž‚ĘIaŠKL.”P] #‚dLŖa‚ZLĮa“+•+8”RuĖz’W…:”h]@S‚f…åa†ģI:” #‚ĘIåaŠKLC”€] #‚dL b‚ZL-b“•+8”RuĖz’W…O”˜]@Í‚f…Kb†ģIO” #’‚ĘIKbŠKLX”°] #‚dLob‚ZL“b“ •+8”RuĖz’W…d”Č]@G‚f…ąb†ģId” # ‚ĘIąbŠKLm”ā] #‚dLÕb‚ZLųb“û”+8”RuĖz’W…u”ø]@Á‚f…c†ģIu” #†‚ĘIcŠKL~”^ #‚dL;c‚ZL_c“ë”+8”RuĖz’W…†”(^@; ‚f…}c†ģI†” # ‚ĘI}cŠKL”@^ #‚dLĄc‚ZLÅc“۔+8”RuĖz†W…—”)@ĩ ‚f…ãc†ģI—” #z ‚ĘIãcūKL ” #‚dLųc‚ZLd“ˇ”+8”RuÔz†W…ģĄ@/!‚f…"d†ģIģĄ #ô ‚ĘI"dūKLÄĄ #‚dL8d‚ZLNd“ץ+8”RuĖz†W…ץ@Š!‚f…ad†ģIץ #n!‚ĘIadūKLāĄ #‚dLwd‚ZLd“ķĄ+8”RuĖz†W…ķĄ@#"‚f… d†ģIķĄ #č!‚ĘI dūKLüĄ #‚dLļd‚ZLĖd“ĸ+8”RuĖz†W…ĸ@"‚f…ßd†ģIĸ #b"‚ĘIßdūKLĸ #‚dLõd‚ZL e“+ĸ+8”RuĖz†W…+ĸ@#‚f…e†ģI+ĸ #Ü"‚ĘIeūKL4ĸ #‚dL4e‚ZLJe“Gĸ+8”RuĖz†W…Gĸ@‘#‚f…]e†ģIGĸ #V#‚ĘI]eūKLPĸ #‚dLse‚ZL‰e“cĸ+8”RuĖz†W…cĸ@ $‚f…œe†ģIcĸ #Đ#‚ĘIœeūKLlĸ #‚dL˛e‚ZLČe“ĸ+8”RuĖz†W…ĸD@q$‚f…Ûe†ģIĸ #J$‚ĘIÛeūKLˆĸ; #‚dLņe‚ZLf„/“Ē„ „<“Ž~ „i“âoˆƒ“„š“čž„°“čž„œœ)„ۓčž„ņ“čž„”čž„ ”i˙†Ĩ˙“@ü$„“\’W…X•X^Dv%‚f…f†ģIX• #;%‚ĘIfŠKLa•p^ #‚dL>f‚ZLbf“+—+8”RuĖz’W…m•ˆ^Dđ%‚f…€f†ģIm• #ĩ%‚ĘI€fŠKLv• ^ #‚dL˛f‚ZLäf“;—+8”RuĖz’W…‚•¸^Dj&‚f…g†ģI‚• #/&‚ĘIgŠKL‹•Đ^ #‚dL&g‚ZLJg“—+8”RuĖz’W…—•č^Dä&‚f…hg†ģI—• #Š&‚ĘIhgŠKL •_ #‚dLŒg‚ZL°g“ —+8”RuĖz’W…Ŧ•_D^'‚f…Îg†ģIŦ• ##'‚ĘIÎgŠKLĩ•0_ #‚dLōg‚ZLh“û–+8”RuĖz’W…Á•H_DØ'‚f…4h†ģIÁ• #'‚ĘI4hŠKLʕ`_ #‚dLXh‚ZL|h“ë–+8”RuÔz†Ĩ˙֕Dø'„ە\’W…Ž–x_Dr(‚f…šh’ģIŽ–_ #7(‚ĘIšhūKLē–& #‚dL¸h‚ZLÜh“Ņ–+8”RuĖz’W…(ž¨_Dė(‚f…īh’KL(žĀ_ #Ī(‚dLi‚ZLi“3ž+8”RuÔzūģIĄ #‚ĘIīh†W…Ų Df)‚f….i†ģIŲ  #+)‚ĘI.iūKLâ  #‚dLDi‚ZLZi“õ +8”RuĖz†W…õ Dā)‚f…mi†ģIõ  #Ĩ)‚ĘImiūKLū  #‚dLƒi‚ZL™i“Ą+8”RuĖz†W…ĄDZ*‚f…Ŧi†ģIĄ #*‚ĘIŦiūKLĄ #‚dLÂi‚ZLØi“-Ą+8”RuĖz†W…-ĄDÔ*‚f…ëi†ģI-Ą #™*‚ĘIëiūKL6Ą #‚dLj‚ZLj“IĄ+8”RuĖz†W…IĄDN+‚f…*j†ģIIĄ #+‚ĘI*jūKLRĄ #‚dL@j‚ZLVj“eĄ+8”RuĖz†W…eĄDČ+‚f…ij†ģIeĄ #+‚ĘIijūKLnĄ #‚dLj‚ZL•j“Ą+8”RuĖz„t‰Z… „ņ•ŝ„ –âoˆ:–„Q–čž„g–čž„|–œ)„’–čž„¨–čž„Ž–i˙„š°ƒ „š•„+šHƒ —Ø_n4™:s %¨j’W…F˜ø_sŨ,‚f…ģj’ģIF˜` #ĸ,‚ĘIģjŠKLR˜0` #‚dLÎj‚ZLäj“ ™+8”Ruāz’W…^˜H`sW-‚f…k†ģI^˜ #-‚ĘIkŠKLg˜`` #‚dL&k‚ZLJk“k™+8”Ruāz’W…s˜x`sŅ-‚f…hk†ģIs˜ #–-‚ĘIhkŠKL|˜` #‚dLŒk‚ZL°k“[™+8”Ruāz’W…ˆ˜¨`sK.‚f…Îk†ģIˆ˜ #.‚ĘIÎkŠKL‘˜Ā` #‚dLōk‚ZLl“K™+8”Ruāz’W…˜Ø`sÅ.‚f…4l†ģI˜ #Š.‚ĘI4lŠKLϘđ` #‚dLXl‚ZL|l“;™+8”Ruāz’W…˛˜as?/‚f…šl†ģI˛˜ #/‚ĘIšlŠKLģ˜ a #‚dLžl‚ZLâl“+™+8”Ruāz’W…Ø8asš/‚f…m†ģIØ #~/‚ĘImŠKL˘Pa #‚dL$m‚ZLHm“™+8”Ruāz†W…Ԙ,s30‚f…fm†ģIԘ #ø/‚ĘIfmūKLŨ˜# #‚dL|m‚ZL’m“ô˜+8”Ruāz†W…é›s­0‚f…Ĩm†ģIé› #r0‚ĘIĨmūKLō› #‚dLģm‚ZLŅm“œ+8”Ruāz†W…œs'1‚f…äm†ģIœ #ė0‚ĘIämūKLœ #‚dLúm‚ZLn“!œ+8”Ruāz†W…!œsĄ1‚f…#n†ģI!œ #f1‚ĘI#nūKL*œ #‚dL9n‚ZLOn“=œ+8”Ruāz†W…=œs2‚f…bn†ģI=œ #ā1‚ĘIbnūKLFœ #‚dLxn‚ZLŽn“Yœ+8”Ruāz†W…Yœs•2‚f…Ąn†ģIYœ #Z2‚ĘIĄnūKLbœ #‚dLˇn‚ZLÍn“uœ+8”Ruāz†W…uœs3‚f…ān†ģIuœ #Ô2‚ĘIānūKL~œ #‚dLön‚ZL o“‘œ+8”Ruāz†W…‘œs‰3‚f…o†ģI‘œ #N3‚ĘIoūKLšœ #‚dL5o‚ZLKo“­œ+8”Ruāz†W…­œs4‚f…^o†ģI­œ #Č3‚ĘI^oūKLļœ #‚dLto‚ZLŠo“ɜ+8”Ruāz„k—U€ „x—Ž~ „ĸ—âoˆŧ—„Ķ—čž„é—čž„ū—œ)„˜čž„*˜čž„@˜čž„F˜i˙†Ĩ˙P—sŽ4„U—\’{]p™hat´4‚Š]o˙”]’]y™€auŪ4‚$]ąo‚.]Åo’Uæ|™ af“6‚dæÚo—¸aÄ5zæp†äŗ|™~W5‚ķŗÚoūr|™$‚ļrÚo‚Ŧrep†2´’™~™5‚A´pūr’™6‚ļrŗp˙Ŧr†´Ĩ™~š5‚'´Ép„­™‘ ū”´ž™}‚Ŗ´ápūĀŗž™Š‚Īŗáp‡Lŗž™ ˙[ŗ‚qŗ!q‚eŗ?q€ž™‡ŗ™ ˛˙"ŗ‚:ŗRq‚.ŗpq‡ė˛™ Mš˙û˛‚ŗRq‚ŗpq„˙”{ † ‹™vŊ6‚&ƒq‚¯q’W…ΙĐae77‚f…Ãq†ģIΙ #ü6‚ĘIÃqŠKLיča #‚dLr‚ZLCr“–›+8”RuØz’W…ã™bwą7‚f…ar†ģIã™ #v7‚ĘIarŠKLė™b #‚dL“r‚ZLÅr“;š+8”RuØz†Uæɜ>fb9‚dæãrɜ.›8zæųr†äŗɜ~.8‚ķŗãrūrɜ$‚ļrãr‚Ŧr*s†2´Μ~p8‚A´BsūrΜ6‚ļrXs˙Ŧr†´ۜ~8‚'´ns„朑 ū”´÷œ}‚Ŗ´†sūĀŗ÷œŠ‚Īŗ†s‡Lŗ÷œ ˙[ŗ‚qŗœs‚eŗēs€÷œ‡ŗûœ ˛˙"ŗ˙:ŗ‚.ŗÍs‡ė˛ûœ Mš˙û˛˙ŗ‚ŗÍs„”{ †W…eÜ9‚f…ās†ģI #Ą9‚ĘIāsūKL #‚dLös‚ZL t“#+8”Ru¸z†W…#%wU:‚f…t†ģI# #:‚ĘItūKL, #‚dL5t‚ZLdt“?+8”Ruīz†W…ĨŸ%kĪ:‚f…wt†ģIĨŸ #”:‚ĘIwtūKLޟ #‚dLt‚ZLŖt“ş+8”RuØz†W…äŸ'\H;‚f…ļt†ģIäŸ #;‚ĘIļtūKLíŸ #‚dLĖt‚ZLût“ +8”Ru˜}†W…   \Á;‚f…u†ģI   #‡;‚ĘIuūKL  #‚dL$u‚ZLSu“' +8”Ru˜}†W…+  \:<‚f…fu†ģI+  #<‚ĘIfuūKL4  #‚dL|u‚ZLĢu“G +8”Ru˜}†W…K \ŗ<‚f…žu†ģIK  #y<‚ĘIžuūKLT  #‚dLÔu‚ZLv“g +8”Ru˜}†W…,¤'\,=‚f…v†ģI,¤ #ō<‚ĘIvūKL5¤ #‚dL,v‚ZL[v“L¤+8”Ru˜}†W…S¤ \Ĩ=‚f…nv†ģIS¤ #k=‚ĘInvūKL\¤ #‚dL„v‚ZLŗv“o¤+8”Ru˜}†W…s¤:\>‚f…Æv†ģIs¤ #ä=‚ĘIÆvūKL|¤1 #‚dLÜv‚ZL w“¤+8”Ru˜}­¤'>‚f…w†ģI­¤ #V>‚ĘIwūKLļ¤ #‚dL4w‚ZLcw“ͤ+8”Ru }Ô¤ ?‚f…vw†ģIÔ¤ #Č>‚ĘIvwūKLŨ¤ #‚dLŒw‚ZLģw“đ¤+8”Ru }ô¤u?‚f…Îw†ģIô¤ #:?‚ĘIÎwūKLũ¤ #‚dLäw‚ZLúw“Ĩ+8”RuØzĨč?‚f… x†ģIĨ #­?‚ĘI xūKLĨ #‚dL#x‚ZL9x“,Ĩ+8”RuØz,Ĩ[@‚f…Lx†ģI,Ĩ # @‚ĘILxūKL5Ĩ #‚dLbx‚ZLxx“HĨ+8”RuØzHĨÎ@‚f…‹x†ģIHĨ #“@‚ĘI‹xūKLQĨ #‚dLĄx‚ZLˇx“dĨ+8”RuØzdĨAA‚f…Ęx†ģIdĨ #A‚ĘIĘxūKLmĨ #‚dLāx‚ZLöx“€Ĩ+8”RuØz€Ĩ'´A‚f… y†ģI€Ĩ #yA‚ĘI yūKL‰Ĩ #‚dLy‚ZL5y“ Ĩ+8”RuØz§Ĩ''B‚f…Hy†ģI§Ĩ #ėA‚ĘIHyūKL°Ĩ #‚dL^y‚ZLty“ĮĨ+8”RuØzÎĨ šB‚f…‡y†ģIÎĨ #_B‚ĘI‡yūKL×Ĩ #‚dLy‚ZLŗy“ęĨ+8”RuØzîĨ C‚f…Æy†ģIîĨ #ŌB‚ĘIÆyūKL÷Ĩ #‚dLÜy‚ZLōy“ Ļ+8”RuØzĻ €C‚f…z†ģIĻ #EC‚ĘIzūKLĻ #‚dLz‚ZL1z“*Ļ+8”RuØz.Ļ ķC‚f…Dz†ģI.Ļ #¸C‚ĘIDzūKL7Ļ #‚dLZz‚ZLpz“JĻ+8”RuØzNĻ fD‚f…ƒz†ģINĻ #+D‚ĘIƒzūKLWĻ #‚dL™z‚ZL¯z“jĻ+8”RuØznĻJŲD‚f…Âz†ģInĻ #žD‚ĘIÂzūKLwĻA #‚dLØz‚ZLîz“ŠĻ+8”RuØzÔĻ'KE‚f…{†ģIÔĻ #E‚ĘI{ūKLŨĻ #‚dL{‚ZLF{“ôĻ+8”Ru }ûĻ ŊE‚f…Y{†ģIûĻ #ƒE‚ĘIY{ūKL§ #‚dLo{‚ZLž{“§+8”Ru }§ /F‚f…ą{†ģI§ #õE‚ĘIą{ūKL$§ #‚dLĮ{‚ZLö{“7§+8”Ru };§ŖFøf…uÜ~Ÿ†ģI;§ #iFøĘIuÜ~ŸūKLD§ #‚dL |‚ZL8|“W§+8”Ru }„€šƒ „€ŝ„A€âoˆ[€„w€čž„€čž„Ļ€œ)„Āčž„į€čž„í€i˙„Ũu… „îŝ„‚âoˆ/‚„K‚čž„c‚čž„z‚œ)„˜‚čž„ģ‚čž„Á‚i˙ˆ“ƒ„´ƒčž„׃čž„ūƒčž„„čž„?„čž„T„čž„ķ„âo„…âo„)…âoˆJ…„`…čž„v…čž„‹…čž„ …čž„ŧ…čž„Ņ…œ)„æ…čž„û…œ)„†čž„%†œ)ˆˆˆ‰„‰Ψ„5‰žēˆڟ„HŠ{ ßyjwHĢHÄ:B‘ā5„ÖhŪ‹|—B‘Ūßw—B‘ë__a˜ĢHôĘ7áÎōIÄ:B‘`Ũč‹|)DB‘čßw)DB‘čá;)EŨâæö*)GŨ•Ž/`§ōœvT–‰pūvTK|†­by§ ˙]Iøāb!˛Ÿ‚Ķb&}„†§ö†­b‘§‘I‚āb~‚ĶbY~„Ą§ö†­b¨§ÅI‚āb‚Ķb@„¸§ö†Ōا J‚œŌēūŧuا‚Ëuē‡uا}‚Ŧuē’ģú¨0b M‚ĐúŲŠ_H¨Pbú˙›H‚ŽH€‚HŲ‚wHI€’<ú¨pb™ˇJ˙Uú‚KúI€‘‹Ļ¨pb€˙¤Ļ‚šĻI€‹ˆbŠøų¨ˆb‚'úu€‚ú­€‚ú個ˆbŠĻų¨ˆbī‚Õųu€‚Čų­€‚žų個ˆbéų’Ш°bĀK‚+Đ倂5Ё‹°b‘ķ΍°bĒ‚ūĪ倂 Ё‘Č΍°bMļ‚×Ī倂íĪ=‚á΁„!¨%| Š!ų1¨Øb ‚nųi‚aų•‚Tųˁ‚Gų‚ŠĐø1¨Øb)‚ų•‚ųøˁ‚íø‚‹Øbų<‚‘°H1¨Øb)~‚åH•‚ŲHˁ‚ÍHh‚‹ØbķHĄ‚ž•ø@¨)KĨL‚žøʂ‚˛øƒˆS¨ž‚Ĩ⊠)PãL‚ĸĨ6ƒ‚–ĨTƒ€âŠ „íŠö>„⊖‚ „õŠĒ‚ „Aǰ‚ ’ģúa¨c´P‚ĐútƒŠ_Ha¨(cú˙›H‚ŽHœƒ‚Htƒ‚wHă—PcšOŠøųa¨Pc‚'úûƒ‚ú#„‚úK„‹PcŠĻųa¨Pcī‚Õųûƒ‚Čų#„‚žųK„‹Pcéų‚„’ĐCŠxcnN‚+ĐK„‚5Đ‚„‹xc‘ķĪCŠxcĒ‚ūĪK„‚ Đ‚„‘ČĪCŠxcMļ‚×ĪK„‚íĪĸ„‚áĪ‚„„aŠ%| Š!ųqŠ c ‚nų„‚aųî„‚Tų%…‚Gų]…ŠĐøqŠ c)‚ųî„‚ųø%…‚íø]…‹ cų•…‘°HqŠ c)~‚åHî„‚ŲH%…‚ÍHÁ…‹ cķHī…ž•ø€Š)KSO‚žø†‚˛øC†ˆ“Šž‚ĨĒ )P‘O‚ĸĨy†‚–Ĩ—†€Ē „ Ēö>„Ē–‚ „ĒĒ‚ „ǰ‚ ’<ú@ŠĀc™P˙Uú‚Kúă‘‹Ļ@ŠĀc€˙¤Ļ‚šĻăūņĨģŠ™‚ώ†‡á¤ĀŠ ˙đ¤‚Ĩˆ‚ú¤ë†€ĀЇŦ¤ÄО˙ˇ¤‚Τū†‚䇇¤ÄŠMš˙¤‚Ϥū†‚š¤‡„ÍŠ”{ ’}úx¨ØcĨS‚’ú1‡Š_Hx¨øcú˙›H‚ŽHy‡‚H1‡‚wHÁ‡’<úx¨d™OQ˙Uú‚KúÁ‡‘‹Ļx¨d€˙¤Ļ‚šĻÁ‡‹0dŠøų{¨0d‚'úø‡‚ú@ˆ‚úˆˆ‹0dŠĻų{¨0dī‚Õųø‡‚Čų@ˆ‚žųˆˆ‹0déųŋˆ’Đ{¨XdXR‚+Đˆˆ‚5Đŋˆ‹Xd‘ķĪ{¨XdĒ‚ūĪˆˆ‚ Đŋˆ‘ČĪ{¨XdMļ‚×Īˆˆ‚íĪ÷ˆ‚áĪŋˆ„™¨%| Š!ųЍ€d ‚nų/‰‚aų[‰‚Tų’‰‚GųʉŠĐøЍ€d)‚ų[‰‚ųø’‰‚íøʉ‹€dųŠ‘°HЍ€d)~‚åH[‰‚ŲH’‰‚ÍH.Š‹€dķH\Šž•ø)K=S‚žø…Š‚˛ø°Šˆ͍ž‚Ĩ'Ē )P{S‚ĸĨ抂–Ĩ‹€'Ē „2Ēö>„'Ē–‚ „:ĒĒ‚ „Mǰ‚ ’~a Ѝd1T‚ąa$‹‚¤a7‹†ÕI Š Ų &T‚äI$‹ūģI Š Õ‚ĘI$‹ūĄI Š -‚°I$‹„/ŠR$„ͧŝˆũ¨„Š­P„ Š­Pˆ7ŠˆąŠ„šŠŠ{ „ŲŠŠ{ ô1á #ĀT;ŽBI_TpŪ‹| ģŽBŪßw ģŽBŪ4I ŧĀTŪ`Ē2œ}\Ą‡  p7‘ĄŊà }\‘ĄôÄ ‚\‘ĄÜåÅ ‡\‘ —Ādr\™FÆ Œ\J‹†{T‡ĒÉ –U‚˛T‚‹‚ĨTĸ‹‚˜TŌ‹ūÚ¨‡Ē Ä˙Š˙Š˙÷¨„ŸĒ1Ž’%§ŸĒčdÉ ¸U˙O§˙B§’­PŲĒeÉ čU‚ÎPč‹˙ÁP„đĒR$’­PđĒ eË V‚ÎPŒ˙ÁP„ĢR$’~aĢ@eË  V‚ąa(Œ˙¤a†ÕIĢ Ų •V‚äI(ŒūģIĢ Õ‚ĘI(ŒūĄIĢ -‚°I(Œ„ĢR$’­PĢ`eË ÔV‚ÎP<Œ‚ÁPTŒ„2ĢR$’~a2Ģ€eË \W‚ąatŒ˙¤a’ÕI2Ģ e Ų QW‚äItŒŠģI2̏e Õ‚ĘItŒŠĄI2ĢĐe -‚°ItŒ„FĢR$’­PFĢčeĖ W‚ÎPˆŒ‚ÁP Œ„XĢR$’—ņdĢfÎ ēW‚ĸņŗŒ„xĢ,J’­PyĢfÎ îW‚ÎPߌ‚ÁP„‹ĢR$’~a‹Ģ8fÎ fX˙ąa˙¤a†ÕI‹Ģ Ų [X˙äIūģI‹Ģ Õ˙ĘIūĄI‹Ģ -˙°I„œĢR$’­PžĢXfÎ šX‚ÎP'‚ÁP?„°ĢR$’~a°ĢxfÎ "Y‚ąa]˙¤a†ÕI°Ģ Ų Y‚äI]ūģI°Ģ Õ‚ĘI]ūĄI°Ģ -‚°I]„ĀĢR$’­PĀĢ˜fÎ VY‚ÎP—‚ÁP¯„ŌĢR$’W…Ō̏fÎ ÎY‚f…’ģIŌĢØf #•Y‚ĘIŠKLÕĢđf #‚dLü‚ZL+Ž“NŦ+8”RuT†Ō>éĢRÎ š[‚á>IކąĨīĢ<¨[‚æĨkŽ‚ÚĨŽ‚ÎĨ Ž‡‚ĨīĢ<—‚ĸĨŽ‚–Ĩ Ž€īĢ<‡ö>īĢ<~‚?Ž‚ ?ŗŽ‘aĨŦgg‚uĨŪŽ‘W…Ŧg]‚f…ŪŽ†ģIŦ #ÆZ‚ĘIŪŽŠKL Ŧ0g #‚dL‚ZL8“Ŧ+8”RuŧūņĨ+ŦŠ‚ĻV‡á¤+Ŧ ˙đ¤‚Ĩx‚ú¤”€+Ŧ‡Ŧ¤/Ŧ ˛˙ˇ¤‚Τ§‚äχ¤/Ŧ Mš˙¤‚Ϥ§‚š¤Ï„8Ŧ”{ †W…hŦÎ 1\‚f…֏†ģIhŦ #ø[‚ĘI֏ūKLnŦ #‚dL돂ZL“~Ŧ+8”RuTŗ„ĒIO\”Pw”Ru „´ĒŝˆŲĒˆaĢˆ^ŦˆŦ„fŦŠ{ ô1ô1ô1Ö7•GŪ Ŧ œ/wĄ‡ Ķ p7‘Ą™_Ô ´'‘ĄņÕ /w‘—Pg$w™ã;Ö 4w+Ĩōm× \F‘”™Ísë %†‡mˇŦ Ö 2]‚–m됒W…E­pgÚ Ŧ]‚f…<‘’ģIE­g #q]‚ĘI<‘ŠKLH­¨g #‚dLؑ‚ZLU’“ģ˛+8”Ruđ~’W…\­ČgÚ &^‚f…ƒ’’ģI\­āg #ë]‚ĘIƒ’ŠKLb­øg #‚dLĻ’‚ZLȒ“Ô˛+8”Ruđ~†<`j­ Ü ž^‚K`æ’†é_j­„e^‚ø_“ūTt­…‚+Tf“ūĄIt­ ‚°If“’W…¸­hŪ _‚f…ˆ“’ģI¸­0h #Ũ^‚ĘIˆ“ŠKLÁ­Hh #‚dLĻ“‚ZLȓ“ŗ+8”Ruđ~’W…É­`hŪ ’_‚f…擆ģIÉ­ #W_‚ĘI擊KLĪ­xh #‚dL ”‚ZL,”“Ÿŗ+8”Ruđ~†"`×­ ā `‚1`J”†é_×­|Ņ_‚ø_^”ūTá­}‚+Tv”ūĄIá­ ‚°Iv”’W…%ސhá „`‚f…˜”’ģI%ްh #I`‚ĘI˜”ŠKL.ŽČh #‚dLZLؔ“ŗ+8”Ruđ~’W…6Žāhá ū`‚f…ö”†ģI6Ž #Ã`‚ĘIö”ŠKL<Žøh #‚dL•‚ZL<•“oŗ+8”Ruđ~’W…˜Žiå xa‚f…Z•’ģI˜Ž0i #=a‚ĘIZ•ŠKLĄŽHi #‚dLö•‚ZLs–“ä˛+8”Ruđ~’W…ŠŽ`iå ōa‚f…Ą–’ģIŠŽxi #ˇa‚ĘIĄ–ŠKL¯Ži #‚dLĖ‚ZLæ–“ũ˛+8”Ruđ~’W…üލiį lb‚f…—’ģIüŽČi #1b‚ĘI—ŠKL¯āi #‚dLt—‚ZLä—“ ŗ+8”Ruđ~’W… ¯øiį æb‚f…˜’ģI ¯j #Ģb‚ĘI˜ŠKL¯(j #‚dL4˜‚ZLV˜“&ŗ+8”Ruđ~’W…c¯@jč `c‚f…t˜’ģIc¯`j #%c‚ĘIt˜ŠKLl¯xj #‚dLʘ‚ZL ™“6ŗ+8”Ruđ~’W…t¯jč Úc‚f…P™’ģIt¯¨j #Ÿc‚ĘIP™ŠKLz¯Āj #‚dLp™‚ZL’™“Oŗ+8”Ruđ~’~a”¯Øjé fd‚ąa°™‚¤aš†ÕI”¯ Ų [d‚äI°™ūģI”¯ Õ‚ĘI°™ūĄI”¯ -‚°I°™„¤¯R$’W…¤¯øjé ād‚f…&š’ģI¤¯k #Ĩd‚ĘI&šŠKL­¯0k #‚dL|š‚ZLԚ“_ŗ+8”Ruđ~—HkĀo˜iė %đš—hkĩoîíí 9w—˜kĒoĨ6ō ´‘@Ĩü*ô ´‘DĨ˛pø ´‘T†Đ^دķ Ųe‚ß^E›‡6TدM‚ETš›ūÕIد 6‚äIš›ūģIد Õ‚ĘIš›ūĄIد -‚°Iš›’ãúø¯Čkô 0f‚ōúũ›‘Tø¯ČkU‚+TRœŠĄIø¯Čk ‚°IRœ’W…4°ākô Ēf‚f…ĩœ’ģI4°l #of‚ĘIĩœŠKL=°l #‚dLņœ‚ZL-“Ûą+8”Ruđ~’—ņ]°0lö Ôf‚ĸņK„q°,J’­Pr°Plõ g‚ÎP‡‚ÁPߝ„„°R$’~a„°plö g‚ąa˙˙¤a†ÕI„° Ų …g‚äI˙ūģI„° Õ‚ĘI˙ūĄI„° -‚°I˙„–°R$’­P–°l÷ Äg‚ÎP;ž‚ÁPƒž„¨°R$’W…¨°°lö >h‚f…–ž’ģI¨°Đl #h‚ĘI–žŠKLą°čl #‚dLŌž‚ZLŸ“ ˛+8”Ruđ~’W…š°mö ¸h‚f…,Ÿ†ģIš° #}h‚ĘI,ŸŠKLŋ°m #‚dLuŸ‚ZLžŸ“ûą+8”Ruđ~†ļ^Į°ø i‚Å^ܟ‡TĮ°X‚+TīŸūĄIĮ° ‚°IīŸ’W…ī°0mø ‰i‚f… ’ģIī°Pm #Ni‚ĘI ŠKLø°hm #‚dLM ‚ZL– “K˛+8”Ruđ~’W… ą€mų j‚f…´ ’ģI ą m #Či‚ĘI´ ŠKL)ą¸m #‚dLã ‚ZLĄ“8˛+8”Ruˆ’­P1ąĐmú 7j‚ÎP0Ą‚ÁPhĄ„EąR$’W…Eąčmø ąj‚f…ˆĄ’ģIEąn #vj‚ĘIˆĄŠKLNą n #‚dLˇĄ‚ZLæĄ“+˛+8”Ruđ~’W…Vą8nô +k‚f…ĸ†ģIVą #đj‚ĘIĸŠKL\ąPn #‚dL3ĸ‚ZLbĸ“˛+8”Ruđ~’W…dąhnú Ĩk‚f…€ĸ†ģIdą #jk‚ĘI€ĸŠKLją€n #‚dLĸĸ‚ZLÄĸ“ëą+8”Ruđ~†W…d´ų l‚f…âĸ†ģId´ #äk‚ĘIâĸūKLj´ #‚dL÷ĸ‚ZL Ŗ“v´+8”Ruˆ†W…v´ø ™l‚f…Ŗ†ģIv´ #^l‚ĘIŖūKL|´ #‚dL4Ŗ‚ZLIŖ“ˆ´+8”Ruˆ†W…ˆ´ô m‚f…\Ŗ†ģIˆ´ #Øl‚ĘI\ŖūKLŽ´ #‚dLqŖ‚ZL†Ŗ“š´+8”RuŒ†W…š´$ú m‚f…™Ŗ†ģIš´ #Rm‚ĘI™ŖūKL ´ #‚dLŽŖ‚ZLÃŖ“ŗ´+8”Ruä~ž´n‚f…ÖŖ†ģIž´ #Åm‚ĘIÖŖūKLÄ´ #‚dLëŖ‚ZL¤“Ķ´+8”Ruđ~†W…×´ö zn‚f…¤†ģI×´ #?n‚ĘI¤ūKLŨ´ #‚dL(¤‚ZL=¤“ė´+8”Ruđ~†W…ė´ö ān‚f…P¤†ģIė´ #šn‚ĘIP¤ūKLō´ #‚dLe¤‚ZLz¤ĩ So‚f…¤†ģIĩ #o‚ĘI¤ūKLĩ #‚dLĸ¤‚ZLˇ¤“ĩ+8”Ruđ~„÷¯„°čž„4°čžˆ]°„Ū°čž„ī°čž„ąԆ„ ą>Š„Ãą­P„—ąWf„}ąÛe’W…i˛˜n :p‚f…ʤ’ģIi˛Ān #˙o‚ĘIʤŠKLr˛čn #‚dLZLĨ“¨˛+8”Ruđ~†W…Ļŗč ´p‚f….Ĩ†ģIĻŗ #yp‚ĘI.ĨūKLŦŗ #‚dLCĨ‚ZLXĨ“ģŗ+8”Ruđ~†W…ģŗ č q‚f…kĨ†ģIģŗ #ķp‚ĘIkĨūKLÁŗ #‚dL€Ĩ‚ZL•Ĩ†W…Åŗ “q‚f…¨Ĩ†ģIÅŗ #Yq‚ĘI¨ĨūKLËŗ #‚dLžĨ‚ZLíĨ“×ŗ+8”Ru›†W…âŗŪ r‚f…φģIâŗ #Ōq‚ĘIĻūKLčŗ #‚dLĻ‚ZL+Ļ“÷ŗ+8”Ruđ~†W…÷ŗ Ū sr‚f…>φģI÷ŗ #Lr‚ĘI>ĻūKLũŗ #‚dLTĻ‚ZLiĻ’W…´oé ír‚f…|Ļ’KL´o #Đr‚dL‘Ļ‚ZLĻĻ“ ´+8”Ruđ~ūģI"ĩ #‚ĘI|φW…´å gs‚f…šĻ†ģI´ #,s‚ĘIšĻūKL´ #‚dLĪĻ‚ZLäĻ“%´+8”Ruđ~†W…%´å Ís‚f…÷φģI%´ #Ļs‚ĘI÷ĻūKL+´ #‚dL §‚ZL"§†W…7´Ú Gt‚f…5§’ģI7´0o # t‚ĘI5§ŠKL:´Ho #‚dLK§‚ZL`§“R´+8”Ruđ~†W…R´Ú ­t‚f…s§†ģIR´ #†t‚ĘIs§ūKLX´ #‚dL‰§‚ZLž§†W…Kĩį 'u‚f…৆ģIKĩ #ėt‚ĘIą§ūKLQĩ #‚dLƧ‚ZLÛ§“`ĩ+8”Ruđ~†W…`ĩį u‚f…ģI`ĩ #fu‚ĘIî§ūKLfĩ #‚dL¨‚ZL¨†W…uĩá ķu‚f…+¨†ģIuĩ #Ėu‚ĘI+¨ūKL{ĩ #‚dLA¨‚ZLV¨†W…‘ĩ"á mv‚f…i¨†ģI‘ĩ #2v‚ĘIi¨ūKL—ĩ #‚dL¨‚ZL”¨“Ļĩ+8”Ruđ~ˆŨŦ„ôŦ­Pˆ­ˆ3­„E­ÅTˆ­ˆĻ­„¸­ÅTˆú­ˆŽ„%ŽÅTˆmŽˆ†Ž„˜ŽÅT„ĖŽÛāˆįŽ„üŽÅTˆ5¯ˆQ¯„c¯ÅT„“¯Q„i˛­P„˛­P„āŗŠ{ 1::¸8•gŪĀĩÛœ€‡Ą‡  p7‘ĄšÕ €‡‘—`ou‡ĨEß \F‘¨’~a ļo x‚ąa§¨‚¤aQІÕI ļ Ų x‚äI§¨ūģI ļ Õ‚ĘI§¨ūĄI ļ -‚°I§¨„$ļR$’W…rļ°o “x‚f…dŠ’ģIrļĐo #Xx‚ĘIdŠŠKLuļčo #‚dL䊂ZLGĒ“€š+8”Ru˜’W…Œļp y‚f…uĒ’ģIŒļ p #Ōx‚ĘIuĒŠKL’ļ8p #‚dL˜Ē‚ZLēĒ“—š+8”Ru˜’W…ßļPp ‡y‚f…ØĒ’ģIßļpp #Ly‚ĘIØĒŠKLčļˆp #‚dLzĢ‚ZLŦ“¤š+8”Ru”’W…ņļ p z‚f…2Ŧ’ģIņļ¸p #Æy‚ĘI2ŦŠKL÷ļĐp #‚dLUŦ‚ZLwŦ“ģš+8”Ru”’W…Dˇčp {z‚f…•Ŧ’ģIDˇq #@z‚ĘI•ŦŠKLMˇ q #‚dL5­‚ZLŋ­“Čš+8”Ru”’W…Vˇ8q õz‚f…í­’ģIVˇPq #ēz‚ĘIí­ŠKL\ˇhq #‚dLŽ‚ZL1Ž“ßš+8”Ru”’W…Ў€q o{‚f…OŽ’ģIЎ q #4{‚ĘIOŽŠKL˛ˇ¸q #‚dLÕŽ‚ZLE¯“ėš+8”Ru”’W…ģˇĐq é{‚f…s¯’ģIģˇčq #Ž{‚ĘIs¯ŠKLÁˇr #‚dL•¯‚ZLˇ¯“ē+8”Ru”’W… ¸r c|‚f…Õ¯’ģI ¸8r #(|‚ĘIÕ¯ŠKL¸Pr #‚dLE°‚ZLĩ°“ē+8”Ru˜’W…¸hr Ũ|‚f…å°’ģI¸€r #ĸ|‚ĘIå°ŠKL#¸˜r #‚dLą‚ZL'ą“'ē+8”Ru˜’W…b¸°r W}‚f…Eą’ģIb¸Đr #}‚ĘIEąŠKLk¸čr #‚dL›ą‚ZLņą“4ē+8”Ru˜’W…t¸s Ņ}‚f…˛’ģIt¸s #–}‚ĘI˛ŠKLz¸0s #‚dLA˛‚ZLc˛“Kē+8”Ru˜†ũúƒ¸ ņ}‚ û˛’~a’¸Hs }~‚ąaǞ‚¤a힆ÕI’¸ Ų r~‚äIǞūģI’¸ Õ‚ĘIǞūĄI’¸ -‚°IǞ„Ŗ¸R$’W…ĩ¸`s ÷~‚f…ŗ’ģIĩ¸€s #ŧ~‚ĘIŗŠKLž¸˜s #‚dL[ŗ‚ZL—ŗ“cš+8”Ru”Į¸Q=˜i %ĩŗ„ܸ[)„í¸š{„šš{„š‘\’~a*š°s É‚ąaßŗ‚¤a´†ÕI*š Ų ž‚äIßŗūģI*š Õ‚ĘIßŗūĄI*š -‚°Ißŗ„:šR$’W…EšČs C€‚f…2´’ģIEščs #€‚ĘI2´ŠKLNšt #‚dLr´‚ZLŽ´“pš+8”Ru˜†W…Rē Ŋ€‚f…Ė´†ģIRē #‚€‚ĘIĖ´ūKLXē #‚dLá´‚ZLö´“eē+8”Ru˜†W…eē  #‚f… ĩ†ģIeē #ü€‚ĘI ĩūKLkē #‚dLĩ‚ZL3ĩ†W…pē œ‚f…Fĩ†ģIpē #b‚ĘIFĩūKLvē #‚dL\ĩ‚ZL‹ĩ“ƒē+8”Ru¯†W…Žē ‚‚f…žĩ†ģIŽē #ہ‚ĘIžĩūKL”ē #‚dLŗĩ‚ZLČĩ“Ąē+8”Ru˜†W…Ąē ‚‚f…Ûĩ†ģIĄē #U‚‚ĘIÛĩūKL§ē #‚dLđĩ‚ZLļ“´ē+8”Ru˜†W…ŧē ƒ‚f…ļ’ģIŧēt #Ī‚‚ĘIļŠKLŋē0t #‚dL.ļ‚ZLCļ“×ē+8”Ru˜†W…×ē pƒ‚f…Vļ†ģI×ē #Iƒ‚ĘIVļūKLŨē #‚dLlļ‚ZLļ†W…ķē ęƒ‚f…”ļ†ģIķē #¯ƒ‚ĘI”ļūKLųē #‚dLŠļ‚ZLžļ“ģ+8”Ru”†W…ģ P„‚f…Ņļ†ģIģ #)„‚ĘIŅļūKL ģ #‚dLæļ‚ZLûļ’W…ģHt ʄ‚f…ˇ’KLģ`t #­„‚dL#ˇ‚ZL8ˇ“ģ+8”Ru”ūģIeģ #‚ĘIˇ†W…(ģ D…‚f…Kˇ†ģI(ģ # …‚ĘIKˇūKL.ģ #‚dL`ˇ‚ZLuˇ“;ģ+8”Ru”†W…;ģ Ē…‚f…ˆˇ†ģI;ģ #ƒ…‚ĘIˆˇūKLAģ #‚dLˇ‚ZL˛ˇ†W…Rģ †‚f…Ŏ†ģIRģ #é…‚ĘIŎūKLXģ #‚dLÛˇ‚ZLđˇ†W…xģ# І‚f…¸†ģIxģ #O†‚ĘI¸ūKL~ģ #‚dL¸‚ZL-¸“‹ģ+8”Ru”ˆņĩ„ ļ­PˆFļˆ`ļ„rļÅT„¤ļX(„¸ļâoˆÍļ„ßļÅT„ ˇŽh„ˇâoˆ2ˇ„DˇÅT„nˇ'„‚ˇâoˆ—ˇ„ЎÅTˆāˇˆųˇ„ ¸ÅT„=¸ÛāˆP¸„b¸ÅT„’¸Q„ĩ¸­P„*š­P„Eš­P„ŒēŠ{ uH•‚Ū ģ‚œÍ›Ą‡  p7‘ĄãĨ ͛‘—xt›Ĩģ˙! \F‘˜’~aŧ¨t$ `ˆ‚ąa@¸‚¤aÁ¸†ÕIŧ Ų Uˆ‚äI@¸ūģIŧ Õ‚ĘI@¸ūĄIŧ -‚°I@¸„ ŧR$’W…wŧĀt' ؈‚f…Ô¸’ģIwŧāt #Ÿˆ‚ĘIÔ¸ŠKLzŧøt #‚dLbš‚ZLŌš“Á+8”Ru`’W…‘ŧu' P‰‚f…ē’ģI‘ŧ0u #‰‚ĘIēŠKL—ŧHu #‚dL#ē‚ZLEē“Á+8”Ru`’W…äŧ`u) ȉ‚f…cē’ģIäŧ€u #‰‚ĘIcēŠKLíŧ˜u #‚dLņē‚ZLaģ“,Á+8”Ru`’W…öŧ°u) @Š‚f…ģ’ģIöŧČu #Š‚ĘIģŠKLüŧāu #‚dL˛ģ‚ZLÔģ“EÁ+8”Ru`’W…IŊøu, °Š‚f…ōģ’ģIIŊv #Š‚ĘIōģŠKLXŊ0v #‚dL™ŧ‚ZLŊ„OÁ+8’W…aŊHv, *‹‚f…=Ŋ†ģIaŊ #īŠ‚ĘI=ŊŠKLgŊ`v #‚dLĩŊ‚ZL%ž“”Ā+8”Ru„’W…ąŊxv- ¤‹‚f…Cž’ģIąŊ˜v #i‹‚ĘICžŠKLēŊ°v #‚dLßž‚ZL\ŋ“ĄĀ+8”RuŒ’W…ÃŊČv- Œ‚f…Šŋ’ģIÃŊāv #ã‹‚ĘIŠŋŠKLÉŊøv #‚dLŦŋ‚ZLÎŋ“¸Ā+8”RuŒ’W…žw0 ˜Œ‚f…ėŋ’ģIž0w #]Œ‚ĘIėŋŠKLžHw #‚dLƒĀ‚ZLæĀ“ÅĀ+8”RuŒ’W…%ž`w0 ‚f…Á†ģI%ž #׌‚ĘIÁŠKL+žxw #‚dLgÁ‚ZLĘÁ“zĀ+8”RuŒ’W…užw2 Œ‚f…čÁ’ģIuž°w #Q‚ĘIčÁŠKL~žČw #‚dL‚ZLü“‡Ā+8”RuŒ’W…‡žāw2 Ž‚f…ÆģI‡ž #ˍ‚ĘIÊKLžøw #‚dLŠÃ‚ZLúÓmĀ+8”RuŒ’W…åžx6 €Ž‚f…Ä’ģIåž0x #EŽ‚ĘIÄŠKLîžHx #‚dL6Ä‚ZLXÄ“`Ā+8”Ru„’W…÷ž`x6 úŽ‚f…vĆģI÷ž #ŋŽ‚ĘIvÄŠKLũžxx #‚dL˜Ä‚ZLēÄ“SĀ+8”Ru„’~aŋx9 †‚ąaØÄ‚¤a.ņÕIŋ Ų {‚äIØÄūģIŋ Õ‚ĘIØÄūĄIŋ -‚°IØÄ„+ŋR$’W…+ŋ¨x9 ‚f…NÅ’ģI+ŋČx #ŏ‚ĘINÅŠKL4ŋāx #‚dL¤Å‚ZLúÅ“\Á+8”RuŒ’W…|ŋøx; z‚f…Æ’ģI|ŋy #?‚ĘIÆŠKL…ŋ0y #‚dLTÆ‚ZLÆ“ŌĀ+8”Ruˆ’W…ŽŋHy; ô‚f…žÆ’ģIŽŋ`y #š‚ĘIžÆŠKL”ŋxy #‚dL⯂ZLĮ“éĀ+8”Ru„ĀŋDD‘˜i> % Į„ĘŋƑ„ŌŋX(„ãŋƑ„îŋ>w„ũŋŽ’~ayB Б‚ąa>Į‚¤a~Į†ÕIĀ Ų Å‘‚äI>ĮūģIĀ Õ‚ĘI>ĮūĄIĀ -‚°I>Į„&ĀR$’W…1yB J’‚f…‘Į’ģI1ĀČy #’‚ĘI‘ĮŠKL:Āāy #‚dLŅĮ‚ZL Č“öĀ+8”RuŒ†W…cÁ- Ē‚f…+ȆģIcÁ #‰’‚ĘI+ČūKLiÁ #‚dLAČ‚ZLVČ“vÁ+8”RuŒ†W…vÁ - *“‚f…iȆģIvÁ #“‚ĘIiČūKL|Á #‚dL~Č‚ZL“ȆW…ÁB Ŗ“‚f…ĻȆģIÁ #i“‚ĘIĻČūKL‡Á #‚dLŧČ‚ZLëČ“”Á+8”RuŸ†W…ŸÁ0 ”‚f…ūȆģIŸÁ #â“‚ĘIūČūKLĨÁ #‚dLÉ‚ZL(É“˛Á+8”RuŒ†W…˛Á 0 ƒ”‚f…;ɆģI˛Á #\”‚ĘI;ÉūKL¸Á #‚dLPÉ‚ZLeÉ’W…ŊÁøy9 ũ”‚f…xÉ’KLŊÁz #│dLÉ‚ZLĸÉ“ÅÁ+8”RuŒūģIh #‚ĘIxɆW…ÉÁ, u•‚f…ĩɆģIÉÁ #<•‚ĘIĩÉūKLĪÁ #‚dLËÉ‚ZLāÉ“ÜÁ+8”Ru`†W…āÁ) í•‚f…ķɆģIāÁ #´•‚ĘIķÉūKLæÁ #‚dL Ę‚ZL6Ę“ķÁ+8”Ru`†W…ķÁ) S–‚f…IʆģIķÁ #,–‚ĘIIĘūKLųÁ #‚dL_Ę‚ZLtʆW…Â6 ͖‚f…‡Ę†ģI #’–‚ĘI‡ĘūKL  #‚dLœĘ‚ZLąĘ“Â+8”Ru„†W…Â"6 G—‚f…ÄʆģI # —‚ĘIÄĘūKL #‚dLŲĘ‚ZLîĘ“0Â+8”Ru„†W…;Â2 Á—‚f…ˆģI; #†—‚ĘIËūKLA #‚dLË‚ZL+Ë“NÂ+8”RuŒ†W…NÂ2 '˜‚f…>ˆģIN #˜‚ĘI>ËūKLT #‚dLSË‚ZLhˆW…~Â; Ą˜‚f…{ˆģI~ #f˜‚ĘI{ËūKL„ #‚dLË‚ZLĨË“‘Â+8”Ruˆ†W…‘Â"; ™‚f…¸Ë†ģI‘ #ā˜‚ĘI¸ËūKL— #‚dLÍË‚ZLâË“¨Â+8”Ruˆ†W…ŗÂ', “™‚f…õˆģIŗÂ #Z™‚ĘIõËūKLšÂ! #‚dL Ė‚ZL8Ė“ĘÂ+8”Ru`†W…ÚÂ' ų™‚f…KˆģIÚ #Ō™‚ĘIKĖūKLā #‚dLaĖ‚ZLvˆW…÷Â+' qš‚f…‰Ė’ģI÷Â(z #8š‚ĘI‰ĖŠKLúÂ@z #‚dLŸĖ‚ZLĖĖ“Ã+8”Ru`ˆĶģ„íģ­P„ŧ­P„1ŧ?„Lŧâoˆeŧ„wŧÅT„Šŧ¯Ž„ŊŧâoˆŌŧ„äŧÅT„Ŋߎ„"Ŋâoˆ7Ŋ„IŊÅTˆ‰ŊˆŸŊ„ąŊÅT„ÛŊĪ„éŊPwˆž„žÅT„=ž„KžÛāˆcž„užÅT„Ēže˜„žžâoˆĶž„åžÅT„ŋ͓„ŋQˆSŋˆjŋ„|ŋÅT„˛ŋ­P„Ā­P„1Ā­P„ÁŠ{ ]Hü8Ũ0ÃAœę›,¤û5„-9‘ĄãĨ ,¤‘ũ %‘—Xz¤™WÁ ëDßĖĨ‚Ē ‘˜~ĨmĄ ‘œ~Ĩ‡ 1 4 ‘¤~’'¯6Àz ‚@¯~Í‚6¯bΞW…œĮ-@˙œ‚f…ûΆģIœĮ #Ŝ‚ĘIûÎūKLĨĮ$ #‚dLĪ‚ZL@Ī“¸Į+8”RuŦ~ˆZÄbÃf­’ņZĐèz D‚ [SĪ‚üZ‹Ī„čÃ~ ’×õÃĀz1 Ÿ‚Ž×ŸĪ‚×ËĪ’ΉõÃāz“‚Ū‰]ĐˆÄ’Ė×Ä{;ž˙īׂÛ×ŲĐ’ØÄ0{#?č˙'Ø‚ØŲĐ„—ĸũ’VM—ÄX{#?ž˙yM‚eMRŅ„ĖĸũūMđĮ-#?˙AM‚-MÎŅ’ī‰îÄp{͞‚ŠäŅ‚ū‰Ō‰ĩ‰îÄ {c‰ž‚ĉŌˆhÅ‘t‰nÅĐ{c‚ƒ‰sŌŠ4‰nÅĐ{ ŧ˙Z‰˙M‰‚C‰sŌ†ĢLÉĮ'ķž‚ēLüŌˆæĮ„ĒŸũˆRČˆcČ’W…āÅč{3 ƒŸ‚f…Ķ’ģIāÅ| #IŸ‚ĘIĶŠKLėÅ | #‚dLĶ‚ZLĪĶ“ Į+8”RuŸ~’ÛÆ8|1 ë ‚.ÛíĶ’Ö2Æ`|5Z ‚ŽÖ;Ô‰W…AÆx|@8 ‚f…‰Ô†ģIAÆ #˙Ÿ‚ĘI‰ÔŠKLJƐ| #‚dL×Ô‚ZL%Õ“?Į+8”Rw‡|LRÆ@‚‹LCÕˆoƆRÛoÆN5Č ˙uÛ‚aÛ‘Õ’āL{ƨ|#;Ĩ ˙M‚īLßÕŠM‘ÆČ|#;˙AM‚-M-ÖŠĢLŊÆā|5‚ēL{ÖˆØÆ’ˆØÆø| €Ą‚͈ÉÖ‘W…ØÆ};‚f…×’ģIØÆ8} #DĄ‚ĘI׊KLäÆP} #‚dLsׂZLÁד3Į+8”RuŒ~’ˆčÆh}4 ĸ‚͈ßבW…诀};‚f…ß׆ģIčÆ #ŲĄ‚ĘIß׊KLņƘ} #‚dLØ‚ZL_Ø“Į+8”RuŒ~†ˆWĮ Šĸ‚͈}؇W…WĮ;‚f…}؆ģIWĮ #nĸ‚ĘI}ØūKL`Į #‚dL“Ø‚ZLÂØ“oĮ+8”RuŸ~†ˆoĮ-4 =Ŗ‚͈ÕØ‡W…oĮ-;‚f…ÕØ†ģIoĮ #Ŗ‚ĘIÕØūKLxĮ$ #‚dLëØ‚ZLŲ“‡Į+8”RuŸ~†W…Č!3 ļŖ‚f…-Ų†ģIČ #|Ŗ‚ĘI-ŲūKL&Č #‚dLCŲ‚ZLrŲ“9Č+8”RuŸ~„wÃÅļ„ˆÃNŊ„¯ÃJ‚ „ŊÃw} „ÉÃÕ} „ēÅ…‡„ÎÅËX„āÅ+ƒ „Æ ~ ˆTĮ„ĮŠ{ „ÁĮŠ{ ]Há=#v¤’“Ũ—“ŨŪ‹|vŨŪßwvŨŪá;vŨß‚i…¤ē¤ā5„ cë__nŽģcë__sŽ´'âîj;“Ejá˙ō ĨÄ:Ũ`Ũč‹|)DŨčßw)DŨčá;)EŨâæö*)GŨü]i°Ž2œ#ĨK°û5„Öh‘ĄžG‹c‘ĸ__xGK°‘—°}¨Ĩũ Q‘\’5֎Đ}LĶĨ‚I…Ų‚a™Ų‚UšŲ‘ū€֎Đ}MŊ‚ …Ų‚#™Ų‚šŲˆįŽ’1¤č}SŲĻ‚h¤ĖŲ‚[¤ßŲ˙N¤ŠZĪč}‚‚›ĪĖŲ‚ŽĪßŲ˙ĪŠŲΏč}_‚ĪĖŲ‚ ĪßŲ˙Ī‹č})ĪôŲŠbΏč}V‚™Î,Ú‚ŒÎUÚ˙΋č}¨ÎÚŠĀS3~‚ŲSĸÚ‚ĪSÂÚ„@ū’ĀSG ~W §‚ŲSÕÚ˙ĪS„Uū’W…U8~W§‚f…÷Ú’ģIUX~ #H§‚ĘI÷ÚŠKL^p~ #‚dLÛ‚ZL;Û“v+8”Ruc†W…‘&Wų§‚f…YÛ†ģI‘ #§‚ĘIYÛūKL‘ #‚dLnÛ‚ZL›Û“+‘+8”Rucˆ —ˆ~@°îj;^Ej™ģ:`EjŽÛ™ÅNa[cãÛ™ofb[c'Ü’v¤x ~_͍‚œ¤âÜ‚¤Ũ‚…¤FŨ‹ ~̤rŨ†ķbx ¯¨˙c˙cūē‚“‚%ē§Ũ˙ē’1ŌŠČ~`ų¨˙[Ō‚NŌßŨ’Đžđ~a€Š‚+Đ7Ū˙5Đ‹đ~‡ķĪžĒ‚ūĪcŪ˙ ЇČĪžMļ‚×ĪcŪ‚íĪwŪ‚á΋ۄ§%| ’5­i銂IŸŪ‚aŗŪ‚UßŪ‘ū€­MŊ‚ ŸŪ‚#ŗŪ‚ßŪˆÏ’—Ņɏ rQĢ˙äŅ‚×Ņaß˙ĘŅ‚ŊŅÔߊ?Ņɏ ).˙ŒŅ‚Ņaß˙rŅ‚eŅÔߊîĐɏ )‚#Ņaß˙Ņ‚ ŅÔß‹ 1Ņįß‘ē¤ɏ )~‚ī¤aß˙㤂פOā‹ ũ¤xāžĐĻ؏)KķĒ‚ųĻŖā‚íĻŲāˆæž‚Ĩĩ‘ )P-Ģ˙ĸĨ‚–Ĩųā€ĩ‘ „Ā‘ö>„‚‘°‚ „ĩ‘–‚ „ȑĒ‚ ’—ҐHyÁŦ˙äŅ‚×Ņ%á‚ĘŅtá˙ŊŅŠ?ҐH).˙ŒŅ‚Ņ%á‚rŅtá˙eŅŠîАH)‚#Ņ%á‚Ņtá˙ Ņ‹H1ŅÃá‘礐H)~‚ī¤%á‚ã¤tá‚פâ‹Hũ¤FâžĐϐ)K_Ŧ‚ųĻ…â‚íĻŅ∐ž‚Ĩ‘ )PŦ‚ĸĨã‚–Ĩ0】 „ ‘ö>„‘–‚ „‘Ē‚ „͑°‚ †ąĨ@1ˆÕ­˙æĨ‚ÚĨ\ã‚ÎĨ|㇂Ĩ@1—‚ĸĨ\ã‚–Ĩ|ã€@1‡ö>@1~‚?\ã‚ ?ã‘aĨCxg‚uĨ­ã‘W…Cx]‚f…­ã’KLC #ŗ­‚dLåã‚ZLä“l+8”RuHūģIX #‚ĘI­ã†á¤–ŠdŽ˙đ¤˙Ĩ‚ú¤'䀖‡Ŧ¤ ˛˙ˇ¤˙Τ‚ä;䇁¤ Mš˙¤˙Ϥ‚š¤;ä„ϐ”{ †ąĨT‘„ÎŽ˙æĨ‚ÚĨOä‚ÎĨn䇂ĨT‘—‚ĸĨOä‚–Ĩnä€T‘„b‘ö>†á¤e‘…]¯˙đ¤˙Ĩ‚ú¤‚ä€e‘‡Ŧ¤l‘ ˛˙ˇ¤˙Τ‚äŽä‡¤l‘ Mš˙¤˙Ϥ‚š¤Žä„u‘”{ †œŽ‘°˙Šœ‚–œÂä‡YœŽ‘MĀ˙hœ‚rœÂä‡W…Ž‘ …‚f…Âä†ģIŽ‘ #ܯ‚ĘIÂäūKL–‘ #‚dLÖä‚ZLå“Ļ‘+8”Rud„J‘–‚ „}‘Ē‚ „‹‘–‚ „Ų‘°‚ „4‘Š{ īßÕg_°w°ā5„Öhë__x‘w°Đ7•Č÷€Č‘œž—¨…žĨkô %‘ŦĨ¸Ō %‘°Ĩ}įc‘HĨ•a %‘¸†­b”ČąøābT­ŸøĶbpˇŸ„ĻČö’ŌÅČČną‚œŌåŠŧuÅČČ‚Ëu]呝uÅČČ}‚Ŧu]å’ ōČāqš‚0 Ąæ‚= Ũæ‚# &į‹āŸL ‘TY §į—€'ļh /č’AAōČH€Âf˛‚gAĨč‚ZAĶč‚PAé’ĨNFÉx€ ŗ_˛‚ËNQ邞NĶč‚´Né’ÕIFɘ€ CT˛‚äIé„UĖ<$ˆdÉ’P°gɰ€Âŗ‚i°™é‚_°Čé†5oÉ•ø˛‚Ię‚aEę‚UZę‡ū€oÉMŊ‚ ę‚#EꂁZęˆ€É„ĀÉ Ĩ†W…ŒÉ$Â{ŗ‚f…mę†ģIŒÉ #Bŗ‚ĘImęūKL’É #‚dLę‚ZLÉę“ĻÉ+8”RuL’AAČÉȀŋ´‚gAÜę‚ZA ë‚PAMë’ĨNČɆŗ ´‚ËN|낞N ë‚´NMë†ÕIČÉ C´‚äIMë„üĖ<$ˆåÉ’P°čÉø€ŋ°´‚i°´ë‚_°)ė†5ôÉ•Ĩ´‚Iyė‚aĻė‚UŌė‡ū€ôÉMŊ‚ yė‚#Ļ낁ŌėˆĘ„8Ė Ĩ†W…Ęŋ*ĩ‚f…åė†ģIĘ #ī´‚ĘIåėūKLĘ #‚dLúė‚ZLí“'Ę+8”Ru¤†W…”ĖÂĸĩ‚f…"í†ģI”Ė #iĩ‚ĘI"íūKLšĖ #‚dL7í‚ZLdí“ĒĖ+8”R‘D†W…ĖĖŋļ‚f…wí†ģIĖĖ #áĩ‚ĘIwíūKLŌĖ #‚dLŒí‚ZLĄí“âĖ+8”R‘œ„6É͆ŌøČē~ļ‚œŌ´íūŧuøČ‚Ëu´í‡uøČ}‚Ŧu´í’§Ō0ʁÆxˇ‚ĀŌëî‚ļŌĄīŠb‚0ʁ¯‚{‚ëî‚q‚Ąī‰΁0Ę(gˇ‚îëî‚⁥ī‹(üęī‰΁6ĘHi@ˇ‚îũī‚âŋđ‹Hüņ‘΁<Ę`h‚îņ‚âŨņ‹`ü&ō’Ō>GĘ€Æ_š‚á>Qō’ąĨGĘ˜¨Ŧ¸‚æĨķ‚ÚĨĨķ‚ÎĨÅķ‘‚ĨGĘ˜—‚ĸĨĨķ‚–ĨÅķ‹˜‘ö>GĘ˜~‚?Ĩķ‚ ?Øķ‘aĨZʰg‚uĨô‘W…Zʰ]‚f…ô’KLZĘЁ #Џ‚dL;ô‚ZLhô“‡Ę+8”Ru¤ūģIpĘ #‚ĘIôūņĨ“ĘŠ‚φô‡á¤“Ę ˙đ¤‚Ĩ<õ‚ú¤lõ€“ʇŦ¤—Ę ˛˙ˇ¤‚ΤŠõ‚äĻõ‡¤—Ę Mš˙¤‚ϤŠõ‚š¤Ļõ„ Ę”{ „ É\ˆcĖ’W…ŖĘđéš‚f…šõ†ģIŖĘ #°š‚ĘIšõŠKLŠĘ‚ #‚dLö‚ZLŧö“Ė+8”R‘X’ķb¸Ę ‚/ē‚cÚö‚cÚö’W…īĘ8‚4‹ē‚f…0÷’ģIīĘX‚ #Rē‚ĘI0÷ŠKLøĘp‚ #‚dLN÷‚ZLˆ÷“%Ė+8”R‘X’Ū˙ˈ‚9Ųē‚Ļ÷‚ģ÷‚å÷‚÷˙ø‚í˙0øˆ.Ë’Ō>=˰‚9Äŧ‚á>]ø†ąĨFËC¨ŧ‚æĨ]ø‚ÚĨø‚ÎĨ’ø‡‚ĨFËC—‚ĸĨø‚–Ĩ’ø€FËC‡ö>FËC~‚?ø‚ ?Ĩø‘aĨJËȂg‚uĨĐø‘W…JËȂ]‚f…Đø’KLJËč‚ #īģ‚dLų‚ZL*ų“wË+8”Ru¨ūģI_Ë #‚ĘIĐøūņĨ‰ËŠ‚ĻHų‡á¤‰Ë ˙đ¤‚Ĩjų‚ú¤†ų€‰Ë‡Ŧ¤Ë ˛˙ˇ¤‚Τ™ų‚äĩų‡¤Ë Mš˙¤‚Ϥ™ų‚š¤ĩų„–Ë”{ †¯h¸Ë0îŧ‚žhČų‚ČhŨų†¯hÔË1Ŋ‚žhņų‚Čhú’¯hë˃2BŊ‚žhú‚Čh/ú†W…cĖēŊ‚f…Cú’ģIcĖ ƒ #Ŋ‚ĘICúŠKLfĖ8ƒ #‚dLXú‚ZL…ú“|Ė+8”R‘@†W…ŽĖ42ž‚f…˜ú†ģIŽĖ #ųŊ‚ĘI˜úūKL´Ė #‚dL­ú‚ZLÚú“ÄĖ+8”R‘XˆōČ„éĘ ø„īĘi˙„Ë%| „ÂË.ĩ„āË.ĩ„ũË.ĩˆŠĖ„ Í”{ „’ĖŠ{ ÷ š ÍũœŦž–Āø‘—Pƒ‹Ā‚íú’ņWÍhƒbĀ‚û’<õ\Í€ƒøWĀ‚UõAû‚Kõjû’aõ„Í ƒŽBĀ‚põŸûžˆ‹Í õYŋ‚ˆ×û„”ÍU€ ‰W…—͸ƒķĐŋ‚f…ęû†ģI—Í #—ŋ‚ĘIęûŠKLĸÍЃ #‚dL ü‚ZL,ü“øÍ+8”Rug‡W…üÍ!ķøf…uT†ģIüÍ #ĀøĘIuTūKLÎ #‚dLjü‚ZL—ü“Î+8”Rug„pÍŝ„ĩÍ”{ „\Í|°„ĮÍΘ„ĪÍ÷k„×Í˙ē„ßÍ{„Ί{ •Ø÷đ‘ÄœĪÄ%š'%ĄékÆ:‘ĄÆkM‘‘’ĀS=’čƒs Á‚ŲSĒüøĪS€ˇŸ„K’ū’W…K’„s‚Á‚f…ũ’ģIK’ „ #IÁ‚ĘIũŠKLT’8„ #‚dLQũ‚ZL€ũ“Š“+8”Ruc’%`’P„wÔ‚4žũŠĻh’h„ŧ˙$Ļ‚.ĻļũūąĨk’Cž˙æĨ‚ÚĨÕũ‚ÎĨôũ‡‚Ĩk’C—‚ĸĨÕũ‚–Ĩôũ€k’C‡ö>k’C~‚?Õũ‚ ?ū‘aĨˆ’€„g‚uĨIū‘W…ˆ’€„]‚f…Iū†ģIˆ’ #“‚ĘIIūŠKL’˜„ #‚dLū‚ZLŖū“ ’+8”RuP—°„†Ä˜ix %Áū’W…ļ’؄yfÂf…˙’KLļ’ø„ #IÂdL%˙‚ZLG˙“,“+8”RuLūģI“ #‚ĘI˙’P°ė’…yÄ‚i°u˙‚_°¤˙†5÷’•øÃ‚IÜ˙‚aô˙‚U ‡ū€÷’MŊ‚ Ü˙‚#ô˙‚ ˆ“„}“ Ĩ†W…•“y{Äøf…udŸ†ģI•“ #BÄøĘIudŸūKL›“ #‚dL‚ZLI“Ģ“+8”Ruc„ė’:†#˙N“ĻÄ„V“Üū„=’:„N“ßÚ„a“ „´“Š{ •Å/ Î!œÅĄéÆ:‘ĄÆM‘‘„<Î–Ā•ü÷Ā“ŦœqÉ%š<%ĄékÆ:‘ĄÆkä,‘’ĀS ”0…s‚Å‚ŲS\øĪS€ˇŸ„”ū’W…”H…súÅ‚f…Á’ģI”h… #ÁÅ‚ĘIÁŠKL#”€… #‚dL‚ZL2“B•+8”Ruc’%/”˜…wHĮ‚4PŠĻ7”°…ŧ˙$Ļ‚.ĻhŠąĨ:”Ѕž˙æĨ‚ÚĨŸ‚ÎĨh‘‚Ĩ:”Ѕ—‚ĸĨŸ‚–Ĩh‹Ѕ‘ö>:”Ѕ~‚?Ÿ‚ ?ž‘aĨX”č…g‚uĨô‘W…X”č…]‚f…ô†ģIX” #Į‚ĘIôŠKL]”† #‚dL,‚ZLN“p”+8”RuT—†É˜ix %l’W…€”@†yÚĮ‚f…Ž’KL€”`† #ŊĮ‚dLĐ‚ZLō“í”+8”RuPūģIԔ #‚ĘIŽ’P°°”€†ywČ‚i° ‚_°O†5¸”•lČ‚I‡‚aŸ‚U´‡ū€¸”MŊ‚ ‡‚#Ÿ‚´ˆȔ„5• Ĩ†W…M•yīČøf…udŸ†ģIM• #ļČøĘIudŸūKLS• #‚dLĮ‚ZLô“c•+8”Ruc“°”ŦŸ”PuTŧƒøv2$u "†#˙•2É„•Üūŗ ”ŦŸRÉ”Pwŧƒøu „•ׄ• „l•Š{ •ā/PÎ!œ°ÉĄé“Æ:‘ĄÆ“ä,‘„lÎŨ$:eŽp•`œ‡Ę‚8:øD:‘‘:ÉŠ•˜†g‚NÉ>‘ƒ‡Š•˜†]‚•‡>ŠW…Š•˜†Ō‚f…v’KLŠ•¸† #gĘ‚dL˛‚ZLŌ“Ŋ•+8”R‘LūģI§• #‚ĘIvßíÆ–ĘÛĘā5„ÛĘâîmmíCKîUķ/ĘîÁMôCKâîōÂõ%ŠBßиīĘËā5„hë__x>ËrBß}ˇË2Ëā5„°é__nˇđá0ķƒËÄ:$u`úAč‹|)D$učßw)D$učá;)EúAâæö*)GúA÷‡ĘÅkЕœŸËûĪø–Ę‘—؆æĪĸĘđ¯ĘŧĘ’ū•đ†đđË‚E’"'–‡ķnĪ‚;e‚1ŠāĘ-–0‡Ú‚ųĘå‚īĘ ’Ņ-–`‡@EÍ‚ö,‚ęTøāuP‰ Ë-–‡ˆ Í‚%ËTøËuP‘–Č-–¸‡š˙ĨČ‚¯ČT‹¸‡‘mČ@—ȇĒ˙xČ‚„ČÕ‘BČ@—ȇMļ˙QČ‚gČ5‚[ČÕ„P—%| „l—%‡ūÜD–‡‚Ũ,ø ŨuP’ŋg;–ā‡@gÍ˙Îg˙Îg’\–ø‡Dē΂ŠU‚œ˙˙‚Š –ø‡)‚@˙4˙(‹ø‡NĪ‘2ː–ø‡)~‚gˍ˙[Ë‚OË‹ø‡uË)žÚ –!)KYÎ˙šÚ‚­Ús‡~¤–S˙1~‚'~´ˆž–ž[Éē— )P—΂{Éč‚oÉ €ē— „ŗ$:„q—°‚ „ē—–‚ „͗Ē‚ ūäÉq—@‚ķÉ& ‡߯w— ˙°: ‚ø¯Z €w—‡ǝ{— ˛˙ĩ¯‚ͯm ‚Á¯ ‡¯{— Mš˙ޝ‚¤¯m ‚˜¯ „„—”{ — ˆŊ΁ËĘ  „ā–z„ ˆ—„—­P„'—­P„0—=ˆ8—ˆŠ—„î•⁠„ū•S„"–%| „’—”{ „š—Š{ „ą—Š{ áųPĐ’“úA—“úAŪ‹|úAŪßwúAŪá;úAâņ__nyîßž_Đ”Đā5„Ųgë__nŽV¸ë__sŽ´'âîj;“ąžáaķåĐÄ:úA`úAč‹|)DúAčßw)DúAčá;)EúAâæö*)GúAüøŊā—ĨœũĐƒŨû5„h‘ĄžG&¸‘ĸ__xGƒŨ‘—@ˆĄÔĨũ QAļ‘T†x~ ˜(LŌŅ‚Œ~É ‚¤~Ũ ‚˜~ ‡<~ ˜(MŊ‚K~É ‚a~Ũ ‚U~ ‡~ ˜$ ‚‚1~; ‚'~m ˆ(˜’~7˜`ˆQūŅ˙1~‚'~™ ˆY˜’ÔÛ\˜xˆS*Ķ‚ ÜÕ ‚ūÛũ ˙ņÛŠÔĮ\˜xˆ‚‚ČÕ ‚Čũ ˙ûĮŠSĮ\˜xˆ_‚”ĮÕ ‚‡Įũ ˙zĮ‹xˆŖĮ= ŠûĪ\˜xˆV‚2Đu ‚%С ˙Đ‹xˆAĐ ū Į€˜‚&Į$ ‚ĮF ŠĀS†˜ˆŌ‚ŲSh ‚ĪS{ „™˜ū’ Įĸ˜¨ˆW|Ķ‚&Į› ˙ĮŠĀS¨˜ˆŌ‚ŲSŊ ˙ĪS„Á˜ū’ƒ‡Á˜čˆWÔ‚•‡ß ŠW…Á˜‰Ō‚f… ’ģIÁ˜(‰ #ÖĶ‚ĘI ŠKLʘ@‰ #‚dL# ‚ZLE “â˜+8”Ru[ūƒ‡ˇš&W‚•‡c ūW…ˇš&Ō‚f…x †ģIˇš #fÔ‚ĘIx ūKLŊš #‚dL ‚ZLē “͚+8”Ru[—X‰xŨîj;^ąž™ģ:`ąžÍ ™ÅNaöˇ™ofböˇF’PĐä˜p‰_tÕ‚vĐ‚iĐ9‚_Đe‹p‰…Đ‘†ŋg䘐PÕ˙Îg˙Îgūēô˜“‚%ēÆ˙ē’SÜü˜˜‰`šÕ˙}Ü‚pÜū’–Č™‰a!Ö‚ĨČV˙¯Č‹‰‡mșǂxČ‚˙„ȇBČ™Mļ‚QČ‚‚gČ–‚[ČĒ„™%| ’x~™؉i¯Ö‚Œ~ž‚¤~Ō‚˜~‘<~™؉MŊ‚K~ž‚a~Ō‚U~‘~&™đ‰ ‚‚1~š‚'~āˆC™’tÛI™Šr8Ø˙ÁÛ‚´Û ˙§Û‚šÛ|ŠÛI™Š).˙iÛ‚\Û ˙OÛ‚BÛ|ŠËÚI™Š)‚Û ˙ôÚ‚čÚ|‹ŠÛ‘”ĐI™Š)~‚ÉĐ ˙ŊĐ‚ąĐ÷‹Š×Đ žÚX™!)KÚׂšÚK‚­Ú‡~\™S‚1~Ą˙'~ˆv™ž[ÉX› )PØ˙{É‚oÉĘ€X› „c›$:„$›°‚ „X›–‚ „k›Ē‚ ’tې™0ŠyÁŲ˙ÁÛ‚´Ûö‚§ÛE˙šÛŠÛ™0Š).˙iÛ‚\Ûö‚OÛE˙BÛŠËڐ™0Š)‚Ûö‚ôÚE˙čÚ‹0ŠÛ”‘”А™0Š)~‚ÉĐö‚ŊĐE˙ąĐ‹0Ё×ĐØžÚ ™!)K_Ų˙šÚ‚­Ú‡~¤™S˙1~‚'~Xˆž™ž[ɤš )PŲ‚{ÉŒ‚oÉĒ€¤š „¯š$:„¤š–‚ „ˇšĒ‚ „p›°‚ †ŠÉā™2ˆņÚ˙ŋÉ‚ŗÉÖ‚§Éö‡[Éā™2—‚{ÉÖ‚oÉö€ā™2‡$:ā™2~‚D:Ö‚8: ‘:Éã™`Šg‚NÉ'‘ƒ‡ã™`Š]‚•‡'ŠW…ã™`ŠŌ‚f…_’KLã™xŠ #ÎÚ‚dL›‚ZLĘ“ š+8”RuHūģIø™ #‚ĘI_†߯7šŠ€Û˙î¯˙°‚ø¯Ũ€7š‡ǝ>š ˛˙ĩ¯˙ͯ‚Á¯ņ‡¯>š Mš˙ޝ˙¤¯‚˜¯ņ„Gš”{ †ŠÉöš„ęÛ˙ŋÉ‚ŗÉ‚§É$‡[Éöš—‚{É‚oÉ$€öš„›$:†߯›…yÜ˙î¯˙°‚ø¯8€›‡ǝ› ˛˙ĩ¯˙ͯ‚Á¯d‡¯› Mš˙ޝ˙¤¯‚˜¯d„›”{ †Ї0›OŨ˙ۇ‚į‡x‡LJ0›MĀ˙š‡‚Çx‡ƒ‡0› …‚•‡xūW…0›Ō‚f…Œ†ģI0› #Ũ‚ĘIŒūKL9› #‚dL¤‚ZLŅ“I›+8”Ru\„ėš–‚ „›Ē‚ „-›–‚ „|›°‚ „֚Š{  BüH)€ÎŠœ ŨJåû5„.H‘—Š+å™ēš”ņđä’WéšÎ°Š”ļŪ‚pé?øféōˇŨŠ:ŖšÎ°Š†‚IŖ?—čŠĒہUŖŽ’­POĪ‹<SŪ‚ÎP˙ÁP„gĪR$’­PgĪ(‹<ƒŪ‚ÎP(˙ÁP„yĪR$„ŖÎۀ ˆOĪ„„Ī=ˆŒĪˆxŅ„ļÎ÷€ ’hšÎ@‹•Cã‚w@ŠNšÎ@‹đ‚]›Š‡ĘšÎ@‹Ņ‚–Ę›‹@‹ĸʁ¯Ę5ŧĘ5’čÎx‹đKß˙’"А‹ķČâ‚;`‚1›ŠāĘ#ĐЋÚ‚ųĘ‚īĘ;’ŋg#ĐŒ@ģß˙Îg˙Îg’Ņ2Đ Œ@Åā‚ör‚ę­‚ā.žūÜ2Їā‚Ũr‚ Ũ.‘ ËRĐ(Œˆ‚%Ë­‚Ë.‘–ČRĐHŒš˙ĨČ‚¯Č­‹HŒ‘mČ8ŅPŒĒ˙xČ‚„ČZ‘BČ8ŅPŒMļ˙QČ‚gČē‚[ČZ„HŅ%| „ŋŅ%’\ĐhŒD₊悜˙˙‚Š ĐhŒ)‚@˙4˙(‹hŒNH‘2ˁĐhŒ)~‚gË˙[Ë‚OËt‹hŒuË–žÚĐ!)Kˇá˙šÚ‚­Úʇ~”ĐS˙1~‚'~õˆŽĐž[ÉØŅ )Pōáø{ÉWøoÉu@€ØŅ „ãŅ$:„ØŅ–‚ „ëŅĒ‚ „ōҰ‚ ūäÉōŅ@øķÉuL‡߯øŅ ˙°‚ø¯3€øŅ‡ǝüҞ˙ĩ¯‚ͯF‚Á¯f‡¯üŅMš˙ޝ‚¤¯F‚˜¯f„Ō”{ —ˆŒãËĘy„ÔĐz„ ˆøĐ„ Ņ­P„Ņ­P„$Ņ=ˆ,ŅˆĘŅ„ÔÎ⁠„čΏS„ Đ%| „ĩŅ”{ ’ų‡ņΨŒ•1ä˙ˆŠЇũÎŒ¸˙ۇ‚į‡ĸ‘LJũÎŒMĀ˙š‡‚Çĸ‘ƒ‡ũÎŒ …‚•‡ĸŠW…ũÎŒŌ‚f…ˆģIũÎ #ôã‚ĘIĖŠKLĪ، #‚dLū‚ZLT“`Ņ+8”Rud’ƒéĪđŒ•å‚’érŠ<¤ĪđŒˆ‚K¤Ē‹W¤î’­P¯Ī8HĢä‚ÎP0 ˙ÁP„ĮĪR$’­PĮĪPHÛä‚ÎPX ˙ÁP„ŲĪR$„!΁ ˆ¯Ī„äĪ=ˆėĪˆ‹Ņūƒé•Ņ•‚’ép „ Ņ<¤„€ŅŠ{ „“ŅŠ{ „¨ŅŠ{ äm Š \åqåā5„qåāÖš%ž5÷Jå'VŌ"œ’å°åø\å‘„$ŌÜū„-ŌˆŨßœŋåúåā5„FčŠM %čđ¸?´'ú<(@ŌäœæPöû5„.H‘Ą$Â?‘Ą”dô'‘ĄôÄ %‘ Ąō¸ÅPö‘Ą?OÆUö‘—hEö¤msgĮ/ü‘ŧ™ēšĘņđˆ Ĩã;Ú? ‘L†:ä`ŌČiįøZ䑸Pä‘”€`Ō…b‘~a`Ōˆƒøąa‘‚¤aĘ ’ÕI`Ō  Ų \įøäI‘ŠģI`Ō¸ ÕøĘI‘ŠĄI`ŌЍ -ø°I‘„xŌR$†WéŌʝį‚péī ‚fé)!„‰Ō:Ŗ’h‰ŌčËãį‚wa!ŠN—ŌŽđ‚]’!„ŸŌ‡Ę’ŋgŸŌŽË č‚ÎgŨ!‚ÎgŨ!’ÎääĶ0ŽĖOč‚îäû!‚ääC"‹0Ž…b„ũĶ­P’ūãūĶHŽĖ‘č‚ä"‚äĮ"‹HŽ…b„Ô­P’ˆÔhŽĖĶ肨#‚žK#‹hŽ…b„'Ô­P—€Žnņ˜iÎ %‡#’h'Ô ŽÎ2é‚w°#ŠN5Ô¸Žđ‚]Ô#„=ԇʒŋg=ÔЎÎ\é‚Îg $‚Îg $‹čŽ™HOĐZö $’hpԏĐî‚wI$ŠNpԏđ‚]$ЇĘpÔŅ‚–ʝ$‹ĸĘ %¯Ę+%ŧĘ+%’yÔPđę˙’"HÕhķ‰í‚;X%‚1¨%ŠāĘ\Õ¨Ú‚ųĘ&‚īĘb&’ŋg\Õā@xę˙Îg˙Îg’ŅkÕø@‚ë‚öŠ&‚ęų&‚ād'žūÜkÕ‡Ôę‚ŨŠ&‚ Ũd'‘ ˋՐˆ‚%Ëų&‚Ëd'‘–Č‹Õ š˙ĨČ‚¯Čų&‹ ‘mȐÖ(Ē˙xČ‚„Č '‘BȐÖ(Mļ˙QČ‚gČę'‚[Č '„¤Ö%| „Ž×%’\ēÕ@DÕė‚Š (‚œS(˙˙‚Š ēÕ@)‚@S(˙4˙(‹@NĨ(‘2ËēÕ@)~‚gËS(˙[Ë‚OËé(‹@uË )žÚĐÕ!)Ktė˙šÚ‚­ÚJ)‡~ÔÕS˙1~‚'~€)ˆîÕž[ÉöÖ )P˛ė‚{ÉŠ)‚oÉĮ)€öÖ „×$:„öÖ–‚ „ ×Ē‚ „S×°‚ ūäÉS×@‚ķÉé)‡߯Y× ˙°ū)‚ø¯ *€Yׇǝ]× ˛˙ĩ¯‚ͯ3*‚Á¯U*‡¯]× Mš˙ޝ‚¤¯3*‚˜¯U*„f×”{ —hØíËĘh*„Öz„ ˆ8Ö„LÖ­P„[Ö­P„dÖ=ˆlÖˆ„ׄyԏS„.Õ⁠„CÕ%| „t×”{ ’Ūg‚ÔˆĐ&î˙íg˙÷g’ÎäœÔ Ņî‚îä‘*‚ääÉ*‹ …b‘­P Ôƒ‚ÎP‘*‚ÁPø*„ŽÔR$’:äŽÔāŅLī‚Zä+‚Pä:+‹ā…b‘~aŽÔ‘ƒ‚ąa+‚¤a\+†ÕIŽÔ Ų ?ī‚äI+ūģIŽÔ Õ‚ĘI+ūĄIŽÔ -‚°I+„ÄÔR$’ÎäÄÔ(‘Ōŗī‚îä+‚ääŠ+‹(‘…b‘­PÄÔH‘ƒ‚ÎP+‚ÁPË+„ÜÔR$’:äÜÔp‘Ōrđ‚Zäđ+‚Pä,‹p‘…b‘~aÜԐ‘ƒ‚ąađ+‚¤a4,†ÕIÜÔ Ų eđ‚äIđ+ūģIÜÔ Õ‚ĘIđ+ūĄIÜÔ -‚°Iđ+„ōÔR$’W…ōÔ¸‘Ņęđ‚f…Y,’ģIōÔؑ #ąđ‚ĘIY,ŠKLûÔđ‘ #‚dL{,‚ZL¨,“‚Ö+8”Rv†W… ×!Ņbņ‚f…Æ,†ģI × #)ņ‚ĘIÆ,ūKLĻ× #‚dLÛ,‚ZL-“ē×+8”R‘P„›Ô”“†TēŌÖĒņ‚+T-ūĄIēŌ ‚°I-’°åŨŌ’Üöō‚íå_-‚áåž-‚Õåî-‚Éå=.‚ŋå.žW…Á×Dhō‚f…/’ģIÁ×8’ #/ō‚ĘI/ŠKLÄ×P’ #‚dL/‚ZL*/“Û×+8”RwžW…Û×Dßō‚f…=/†ģIÛ× #Ļō‚ĘI=/ūKLá× #‚dLR/‚ZL/“î×+8”R‘LˆĶ„Ķ`Āˆ'͆TėŌÜ2ķ‚+T’/ūĄIėŌ ‚°I’/’W…'Ķh’ÜĒķ‚f…Û/’ģI'Ķˆ’ #qķ‚ĘIÛ/ŠKL0Ķ ’ #‚dL0‚ZLi0“žÖ+8”Rw†ƒéĶ ĘÔķ‚’é‡0„˜Ķ<¤†ãšĶ üô‚ãŸ0‡*išĶ U‚9iŸ0„¤ĶqG’Ėį¯Ķ¸’×[ô‚ėį´0‚âįĖ0‹¸’…b„ÄĶ­P’:äÄĶВ×õ‚Zäá0‚Päõ0‹В…b‘~aÄĶč’ƒ‚ąaá0‚¤a 1’ÕIÄĶ“ Ų õ‚äIá0ŠģIÄĶ “ Õ‚ĘIá0ŠĄIÄĶ8“ -‚°Iá0„ÜĶR$†ƒé)×ĘDõ‚’é/1„4×<¤†ã7×ü‰õ‚ãG1‡*i7×U‚9iG1„D×qGî×6úõ‚f…\1†ģIî× #Áõ‚ĘI\1ūKLô×0 #‚dLq1‚ZLž1“Ø+8”R‘Lˆ`Ō„ŨŌy]„MĶ=܈Ķ„ÍÖ5~ ˆØÖ„íÖI~ „א… ˆ&ׄL׊{ ô1ô1 BĻú˛g0Øœzö´øû5„´ø‘Ąō¸gšø‘’W…ĻØP“n÷‚f…ą1’ģIĻØp“ #Öö‚ĘIą1ŠKLŠØˆ“ #‚dL2‚ZL?2“ØØ+8”Ru_’W…𨍓n‡÷‚f…m2’ģIšØĀ“ #N÷‚ĘIm2ŠKLŋØؓ #‚dL2‚ZL¯2“īØ+8”Rv†W…˙Øn˙÷‚f…Í2†ģI˙Ø #Æ÷‚ĘIÍ2ūKLŲ #‚dLâ2‚ZL3“Ų+8”Ru_†W…Ųnwøøf…u`Ÿ’ģIŲđ“ #>øøĘIu`ŸŠKLŲ” #‚dL"3‚ZLO3“4Ų+8”Ru_„OØÜū„]ØIT„tØk0„’ØÜū„ĻØúå„ŲŠ{ ;_5äĢŗ”Đøõøā5„ĪPāÖš%âîĕ؅žøÄ@ŲÕœųÍüøĐø‘— ”ŌûŸæø‘X’ÄšŲP”•Áų‚Ķb3ŠĪ_šŲP”‚Ū_b3†–_šŲ‡ų‚Ĩ_–3ūT¨Ų‚+TŌ3ūĄI¨Ų ‚°IŌ3’ãßŲp”•,ú‚ãå3‘*ißŲˆ”U‚9iå3ŠqGßŲ ”‚ŠGú3‚€Gå3„ķŲŝ’)ãÚ¸”•û‚;ã4Šĸ…Úؔ‚ą…W4ŠōÚø”‚ ō 4‚ōW4’W…/Ú•Žû‚f…Ā4’ģI/Ú0• #Ęú‚ĘIĀ4ŠKL1ÚH• #‚dLę4‚ZL 5“ĢÚ+8”Ru\„!Úŝ„JÚ”{ †ãÖÚ•_û‚ã*5‡*iÖÚU‚9i*5„âÚqG†)ãåÚ•Ĩû‚;ã?5ūĸ…åÚ‚ą…T5„ōÚō„~ŲŖXˆšŲˆČŲ„ÖŲ_öˆßŲˆÛ’W…JÚh•”Jü‚f…5’ģIJÚˆ• #ü‚ĘI5ŠKLSÚ¨• #‚dLŖ5‚ZLÅ5“_Ú+8”Rw†W…ŗÚ#”Âü‚f…ã5†ģIŗÚ #‰ü‚ĘIã5ūKLšÚ #‚dLø5‚ZL 6“ČÚ+8”Rw„ĶÚŠ{ áû/ũŪĪa ũâîw /üâņi&'Ö7•0 ÛËœŦ ĄhbŦ ‘Ą¯wą ‘†{T7Ûžũø˛T‘‚ĨT 6‚˜TB6ūÚ¨7Û Ä˙Š˙Š˙÷¨„NÛ1Ž’ÍüZÛĀ•2 ‚Øüf6‹Ā•Ÿįü‘\lÛô– öü†6’ķbtÛؕū˙c˙c’ÖæƒÛđ•mū‚öæĨ6‚ėæŊ6‹đ•…b‘­PƒÛ–ƒ‚ÎPĨ6‚ÁPŅ6„QÜR$’ķbÛ8–ū˙c˙c’c ÛP–ĩū˙!c‚+cõ6’ÎäŖÛh–˙‚îä7‚ää-7‹h–…b‘­PĻÛˆ–ƒ‚ÎP7‚ÁPA7„žÛR$’:äžÛ°–Į˙˙Zä‚Päe7‹°–…b‘~ažÛЖƒ˙ąa‚¤ay7’ÕIžÛø– Ų ē˙˙äIŠģIžÛ— Õ˙ĘIŠĄIžÛ(— -˙°I„ÖÛR$’ÎäÖÛ@—. ‚îä7‚ääĩ7‹@—…b‘­PÜÛ`—ƒ‚ÎP7‚ÁPÉ7„čÛR$ūbå Ü#‚‚åé7‚xå8€ Ü#…b‘­P Ü€—ƒ‚ÎPé7‚ÁP8„"ÜR$†ãpÜ Û ‚ã98‡*ipÜ U‚9i98„}ÜqG†ãĐŨ  ‚ãe8‡*iĐŨU‚9ie8„ßŨqGˆiÛ„pÜy]’Ųķ‡Ü˜—t ‚ųķy8‚īķÁ8‹˜—…b„šÜ­P’:äšÜ°—3 ‚Zäų8‚Pä%9‹°—…b‘~ašÜЗƒ‚ąaų8‚¤aQ9’ÕIšÜø— Ų & ‚äIų8ŠģIšÜ˜ Õ‚ĘIų8ŠĄIšÜ(˜ -‚°Ių8„˛ÜR$’bå˛Ü@˜u ‚‚åu9‚xå­9‹@˜…b„ĮÜ­P’:äĮÜ`˜4 ‚ZäŲ9‚Pä:‹`˜…b‘~aĮÜ€˜ƒ‚ąaŲ9‚¤a4:†ÕIĮÜ Ų ' ‚äIŲ9ūģIĮÜ Õ‚ĘIŲ9ūĄIĮÜ -‚°IŲ9„ŨÜR$’ĩõŪܨ˜ v ‚ÕõX:‚Ëõ:‹¨˜…b„ōÜ­P’ūãôܘ ¸ ‚äŧ:‚äô:‹˜…b„Ũ­P’ÎäŨؘ ú ‚îä ;‚ääX;‹ؘ…b„Ũ­P’ãSŨđ˜? ‚ã„;‘*iSŨ™U‚9i„;„[ŨqG’W…[Ũ ™¸ ‚f…¤;’ģI[Ũ@™ #~ ‚ĘI¤;ŠKLdŨX™ #‚dLÆ;‚ZLæ;“‹Ũ+8”R‘D†W…Ũ0 ‚f…<†ģIŨ #÷ ‚ĘI<ūKL•Ũ #‚dL<‚ZLF<“ĨŨ+8”R‘W†ãžŨu ‚ãY<‡*ižŨU‚9iY<„ËŨqGˆ…܈<Ũ„IŨ_öˆQŨ„ŽŨŠ{ ˆģŨ„įŨŠ{ ô1Ö7 (đŨôœ Ą‰p( ‘ĄŅ) ‘’W…7Ūp™+e ‚f…m<’ģI7ې™ #, ‚ĘIm<ŠKL=Ū¨™ #‚dLą<‚ZLā<“˛Ū+8”RuW†Ō>JŪQ+P ‚á>ū<†ąĨPŪ;¨ ‚æĨ =‚ÚĨB=‚ÎĨU=‡‚ĨPŪ;—‚ĸĨB=‚–ĨU=€PŪ;‡ö>PŪ;~‚?B=‚ ?h=‘aĨgŪșg‚uĨ“=‘W…gŪș]‚f…“=†ģIgŪ #] ‚ĘI“=ŠKLlŪč™ #‚dLË=‚ZLí=“~Ū+8”RuŧūņĨ‹ŪŠ‚Ļ >‡á¤‹Ū ˙đ¤‚Ĩ->‚ú¤I>€‹Ū‡Ŧ¤Ū ˛˙ˇ¤‚Τ\>‚äx>‡¤Ū Mš˙¤‚Ϥ\>‚š¤x>„˜Ū”{ †W…ĖŪ+Č øf…uXŸ†ģIĖŪ # øĘIuXŸūKLŌŪ #‚dL‹>‚ZL¸>“âŪ+8”RuWŗŪIæ ”Pv”Ruˆ+Ū„4Ū ũˆÂŪ„ĘŪŠ{ ô1~9áo#V ;~S_Â#ĩŪ‹| Ķ~SŪßw Ķ~SŪ ˜ Ô#ĩáâ0w _Â#ĩč ˜-ė#ĩáĄ#š P~S_Â/č‹| Ÿ~Sčßw Ÿ~Sč ˜ Ÿ/ß‡Č ā ā5„÷Ŗë__x‘ā Ū9ĻķÆđŪ`œ Ō û5„›V‘Ą‰pÆŌ ‘ĄŅĮ× ‘—šŗ ™ēšËņđË>™U?ĖM‰ũ>’Wé ß šËG ‚pé1?øféō7 Š:Ŗ ß š†‚IŖ1?—Pš; UŖ]?’­P ápš<ä ‚ÎPœ?˙ÁP„"áR$’­P"ሚ< ‚ÎPÄ?˙ÁP„4áR$„+ßۀ ˆ á„=á=ˆFáˆĐâ„=ß÷€ ’Ū^ß šÎw ‚÷Ü?‚í;@ˆhß’vÚi߸šÎš ‚…Ú˛@Š;ni߸š6‚Tn×@˙Jn’\ÚsßКÎû ‚kÚFAŠ;nsßК$‚TnFA˙Jn’ yßčšÎŒ ‚H ^A‚; ĻA‚. ęA’byß› Ũ^ ‚b^A‚“b;Bˆ†ß’V ‡ß8› Ũ ‚j ŊB‰b‡ß`›-íŦ ‚bŊB‚“b'Cˆ—߉㆙ßx›-í ‚ü†„C‚ō†ËC‘b™ßx›-ႝb„C‚“bËCˆŖß‰‡Ŗß›-í‹ ‚ ‡gDŠW…Ŗß°›Z‚f…ŖD’ģIŖßЛ #Y ‚ĘIŖDŠKLĻßč› #‚dLˆE‚ZLâE„­á+8‡‡4â-í‚ ‡FūW…4âZ‚f…F’ģI4✠#ā ‚ĘIFŠKL7â œ #‚dLF‚ZLBF“Lâ+8”Rud’w Āß8œ Ũ ‚Ŧ UF˙  ˙” žĄĀß ĸš ‚ŧUF‚˛žF‡bĀß -܂bUF‚“bžFˆÍ߉ĮęßXœ ĸJ ‚ؐįF‘‡ęßpœ-܂ ‡0GŠW…ę߈œZ‚f…“G†ģIęß #  ‚ĘI“GŠKLđß œ #‚dL*H‚ZLsH“Āá+8”Ru´žĮã ĸú ‚ؐ‘H‡‡ã-܂ ‡‘HūW…ãZ‚f…‘H†ģIã #Ŋ ‚ĘI‘HūKL%ã #‚dLĻH‚ZLģH“1ã+8”Ru´„áßK‰’Įøß¸œ Ũĩ ‚ؐÎH‘‡øßМ-܂ ‡ÎHŠW…øßčœZ‚f…I†ģIøß #y ‚ĘIIŠKLūߝ #‚dL”I‚ZLŨI“Đá+8”Ru@’‡ā ŨJ ‚ ‡ûIŠW…ā0Z‚f…DJ†ģIā # ‚ĘIDJŠKL āH #‚dL§J‚ZLđJ“āá+8”Ru@†‡Lâ ŨŪ ‚ ‡KūW…LâZ‚f…K†ģILâ #¤ ‚ĘIKūKLRâ #‚dL#K‚ZLPK“^â+8”RuTūĮã Ũ‚ؐcK‡‡ã-܂ ‡cKūW…ãZ‚f…cK†ģIã #N ‚ĘIcKūKLã #‚dLxK‚ZLK“ã+8”Ru´’‡ā`Î! ‚ ‡ KŠW…āxZ‚f… K†ģIā #æ ‚ĘI KŠKLā #‚dLéK‚ZL2L“đá+8”Ru@’W…"ā¨Îš ‚f…PL†ģI"ā #` ‚ĘIPLŠKL(āĀ #‚dL™L‚ZLâL“â+8”Ru@†vÚ0āĪÜ ‚…ÚMū;n0ā6‚TnOM˙Jn’fUā؝Ķ6 ‚ĄM‚uņMŠĀSYāøä‚ŲSĄM‚ĪS8N„cāū’W…cāžĶ¯ ‚f…œN’ģIcā8ž #u ‚ĘIœNŠKLlāPž #‚dLÔN‚ZLO“â+8”Ru@’ƒétāhžĶ‚ ‚’é!OŠ<¤tāhžˆ‚K¤IO‹€žW¤hO’­P§ā žH) ‚ÎP‘O˙ÁP„ŋāR$’­Pŋā¸žHY ‚ÎPšO˙ÁP„ŅāR$„„⁠ˆ§ā„Úā=ˆãāˆĸâ’š PáОĐà ‚Ō ŅO‚Č P’ †^áøž•¸ ‚´†1P‚ˆIP‚†uP‘d†^áøžMŊ‚s†1P‚‰†IP‚}†uP‘::b០‚‚V:ĸP‚L:ÎP†W…­âĪŠ ‚f…ûP†ģI­â #o ‚ĘIûPūKL˛â #‚dLQ‚ZL#Q“žâ+8”Ru@ˆnሀá„*âK;†ƒé’áŅí ‚’é6Q„á<¤†‡^â΁ ‚ ‡NQūW…^âZ‚f…NQ†ģI^â #G ‚ĘINQūKLdâ #‚dLcQ‚ZLQ“pâ+8”RuT†W…pâÎų ‚f…ŖQ†ģIpâ #Ā ‚ĘIŖQūKLvâ #‚dL¸Q‚ZLåQ“‚â+8”RuT†ƒé‚âĶ# ‚’éøQ„â<¤†W…5ãĶœ øf…uTŸ†ģI5ã #b øĘIuTŸūKL;ã #ødLudŸ‚ZLR“Kã+8”Ru@„ßļ ˆ\߈Tā„•âŠ{ „ĒâŠ{ „ØâŠ{ ô1~9ü0ŊPãœô r û5„ļH‘ĄŅĐr ‘—(Ÿg Ĩ‰pŅÄ6‘\™WûŌö9#R’t‰gãHŸŅ„ ‚ƒ‰LRŠ4‰gãHŸ ŧ˙Z‰˙M‰‚C‰LR’^}ãhŸÕŪ ‚,^šR‚"^ŅRŠã¤}ãhŸ 3‚ü¤šR‚ō¤ŅR„•ãO’W…°ã€ŸŪV ‚f…ũR’ģI°ã Ÿ # ‚ĘIũRŠKLšã¸Ÿ #‚dL9S‚ZLuS“ä+8”Ruc’^ŌãПØ° ‚,^“S‚"^ĢSŠã¤ŌãП 3‚ü¤“S‚ō¤ĢS„ęãO†^äÛä ‚,^×S‚"^īS„&ä㤆W…6äŪ\ øf…udŸ†ģI6ä ## øĘIudŸūKL<ä #‚dLT‚ZLHT“Hä+8”Ruc„°ãå „QäŠ{ ~9ß$† Ģ ā5„ĀBŪđPÔĢ ŪÎØÔ° ô1ô1üo(`äÄœÍ ã û5„.H‘ĸkeyã ‘ĄÜåč ‘’w fäčŸ˛ ‚ [T‚ ŸT‚† ãT†W…ōäÕĨ ‚f…ZU†ģIōä #l ‚ĘIZUūKLøä #‚dLoU‚ZLœU“å+8”Ru_ˆ€äˆŽä’L`œä ž ‚^`¯U’W…œä0 ĪI ‚f…ëU’ģIœäP  # ‚ĘIëUŠKLŸäh  #‚dL'V‚ZLcV“Đä+8”Ru_ŠW…¯äˆ Ī‚f…‘V’ģI¯ä   #„ ‚ĘI‘VŠKLĩ丠 #‚dLŗV‚ZLÕV“čä+8”Ru_„œäÜ „åŠ{ ˆå„$åŠ{ ô1ô1•ž0å*œ6 ĸkeyy6 ‘ĄÜåy; ‘„DåÜū„Uåĩ ô1ô1´ģ`圏! ĸkey~! ‘ĄÜå~ %‘—Đ „! Ĩ9ę/ü‘T’Éa‚åđ €Ķ øéaōd ‚ßaķV‹đ …b„“å=’W…ŧåĄK ‚f…YW’ģIŧå(Ą # ‚ĘIYWŠKLŋå@Ą #‚dL‘W‚ZLĀW“(æ+8”Ru[’W…Īå`ĄÃ ‚f…ŪW†ģIĪå #Š ‚ĘIŪWŠKLÕåxĄ #‚dL X‚ZLd˙xå‹°Ļ…b‘­P1éĐĻƒ‚ÎP>d‚ÁPvd„LéR$’ĩõLéøĻÉE+ ‚ÕõĻd˙Ëõ‹øĻ…b‘­PL駃‚ÎPĻd‚ÁPŪd„déR$’ _dé@§Éž+ ‚)_™c‚_e—h§“+ ˙)_‚_Je„Fë­P„„é­P’fã„逧Ę, ‚†ã_e˙|ã‹€§…b‘­P„阧ƒ‚ÎP_e‚ÁP—e„ŸéR$’ _ĸ鸧ĘZ, ‚)_Įe‚_˙e—اO, ˙)_‚_;f„ë­P„ēé­P’Îäēéđ§ĘŊ, ‚îäPf˙ää‹đ§…b‘­Pē騃‚ÎPPf‚ÁPxf„ÕéR$’õīÕé8¨Ë - ‚đ¨f˙ đ‹8¨…b‘­PÕéX¨ƒ‚ÎP¨f‚ÁPĐf„íéR$’Gđíé€¨Ėƒ- ‚gđg˙]đ‹€¨…b‘­Píé ¨ƒ‚ÎPg‚ÁP(g„ęR$’õīęȨÍæ- ‚đXg˙ đ‹Ȩ…b‘­Pęč¨ƒ‚ÎPXg‚ÁP€g„ęR$’¨ęŠÎI. ‚Ȱg˙ž‹Š…b‘­Pę(Šƒ‚ÎP°g‚ÁPØg„5ęR$†ãięÆŽ. ‚ãh‡*iięU‚9ih„qęqG†ã]ëÆĶ. ‚ã*h‡*i]ëU‚9i*h„gëqG„Īæ{P„ßæ{PˆáčˆUę„_ę_öˆgęˆWëŠaZžæHŠĨ‚pZ}ZŠTžæHŠw‚+T?hŠĄIžæHŠ ‚°I?h„oëŠ{ „ƒëŠ{ ŦV—Ē ë^œŽ/ č4 û5„ČÅ‘ƒå%Ē´'‘—`ŠŨ4 ­ÎίĘ5nh­N°?D™hž6 ˇëĢũ/ ‚A ãh„Ŋë•„ —xŠ"0 ­ĖaŊH‘ i„-ė … —ŠĒ4 œ§uĀØ‘X‰j_8ė°ŠŠ0 ‚ƒ_7i‚y_ViŠ@_8ėĐŠ‚Y_i‚O_°i‰ÜözėčŠÁđ0 ‚üöŌi‚ōöúi‹čŠ…b‘­P}ėĒƒ‚ÎPŌi‚ÁP'j„’ėR$‰ _’ė ĒÁr1 ‚)_Gj‚_oj‘­P’ė8Ē™‚ÎPj‚ÁPĸj’aO’ė`Ēf1 ‚lOj„šėė{ „ĢėR$‰e ĢėxĒÂÔ1 ‚… Ķj˙{ ‹xĒ…b‘­PŽėĒƒ‚ÎPĶj‚ÁPûj„ÃėR$‰W…í°ĒĀK2 ‚f…k’ģIíĐĒ #2 ‚ĘIkŠKL!íčĒ #‚dL0k‚ZLhk“—í+8”Rw‰ã-íĢÁ2 ‚ã†k‘*i-íĢU‚9i†k„:íqG‰)ã:í0ĢÂ}3 ‚;ã¨kŠĸ…:íPĢ‚ą…ĘkŠō:ípĢ‚ ōėk‚ōĘk’W…híĢŽf3 ‚f… l†ģIhí #,3 ‚ĘI lŠKLmí¨Ģ #‚dL*l‚ZLLl“¨í+8”RuD„Ríŝ„~í”{ žW…¸íĀô3 ‚f…jl†ģI¸í #ģ3 ‚ĘIjlūKLží #‚dLl‚ZLŦl“Îí+8”RuSžãÎíÁ84 ‚ãŋl‡*iÎíU‚9iŋl„ÚíqGž)ãŨí!Â}4 ‚;ãÔlūĸ…Ũí!‚ą…él„ęíōˆzė„įėŅ ˆí„í_öˆíˆĩí„Ęëc~ „Øë „ėë| „ūë … „RėH „ōíŠ{ • øîœ16 Ą$†?‘Ąō¸‡16 ‘’W…CîĀĢ”5 ‚f…m’ģICîāĢ #[5 ‚ĘImŠKLLîøĢ #‚dLhm‚ZL¤m“hî+8”Rus†W…qî 6 øf…utŸ†ģIqî #Ķ5 øĘIutŸūKLwî #‚dLˇm‚ZLäm“‡î+8”Rusˆ'î„/îÜū„Cîú儐îŠ{ ô1´;ø›“œŧ9 ITŨļąöĄ…œ'¤H‘– 8'o÷mĄ6'´'‘ †#˙Ē› ?¨6 „¯›Üū’Iož›ŦBÜ6 ‚{o;n‚nosn‚aooœz(8 ˜eHŧ9 Go’W…Aœ(ŦKq7 ‚f…Zo’ģIAœ@Ŧ #87 ‚ĘIZoūKLJœ #‚dLmo‚ZLšo“Zœ+8”Ruc†W…lœKé7 ‚f…­o†ģIlœ #°7 ‚ĘI­oūKLrœ #‚dLÂo‚ZLīo“‚œ+8”Ruc„"œ–‚ ŗ7œĮ 8 ”Pv„Aœč4 „_œ°‚ „‡œ°‚ ’W…ŗœXŦO 8 ‚f…p’ģIŗœpŦ #g8 ‚ĘIpūKLŧœ #‚dLp‚ZLBp“˜+8”Ruc—ˆŦĪ8 žĮ9 „įœ–‚ „īœĒ‚ „°‚ †W…īœOG9 ‚f…Up†ģIīœ #9 ‚ĘIUpūKLõœ #‚dLjp‚ZL—p“+8”Rucšî›všü›v„œŠ{ „œœ–‚ ŗМĮ‰9 ”Pv”R0„ŗœč4 „Ҝ°‚ „ °‚ „Š{ „#Š{ Á9 }Ō#\I…Ą Wģîûœč9 ˜: ø° ‘žî : Šŧ „Ŗî”! ‹ Ŧø° ‘‹ Ŧŧ Ēp†#˙°î`O: „ĩîÜū„ĮîŅĮ„ëî66 „ķîiž„īŅĮ„ ī66 „9īŅĮ„Yī66 ´hø0—œ> ITā­ąö¤HĄ…œ':‘– 8'‰oČpĄ6'´'‘ †#˙J ? ; „OÜū’Įo^¸ŦBA; ‚üo q‚īoDq‚âoāq—ĐŦ‰< ˜eH> r’W…áčŦKŌ; ‚f…+r’ģI᝭ #™; ‚ĘI+rūKLę #‚dL>r‚ZLkr“ú+8”Ruc†W…žKJ< ‚f…~r†ģIž #< ‚ĘI~rūKLž #‚dL“r‚ZLĀr“$ž+8”Ruc„–‚ ŗםĮj< ”Pv„áč4 „˙°‚ „)ž°‚ ’W…Už­O= ‚f…Ķr’ģIUž0­ #Č< ‚ĘIĶrūKL^ž #‚dLær‚ZLs“nž+8”Ruc—H­0= ž"> „‹ž–‚ „“žĒ‚ „žž°‚ †W…“žO¨= ‚f…&s†ģI“ž #o= ‚ĘI&sūKL™ž #‚dL;s‚ZLhs“Šž+8”RucšŽvšœv„2žŠ{ „>ž–‚ ŗKžĮę= ”Pv”R0„Užč4 „sž°‚ „Žž°‚ „ˇžŠ{ „ĮžŠ{ Á9 \I…÷ ĸ$īNœC> –? ø ‘Ļīs> Š Š" Š/ Š< ‹`­‚ {s‹`­ Ĩs" Ãs/ ės< t†#˙¸ī Ņ> „ŊīÜū†ũWĀī û> ‚ XĨs‚X+t†ũWđ % %? ‚ XUt‚Xht„ËīÜū„Ôīũ”„Üī„īī…T„˙īŅĮ„,đ˜: „<điž„IđŅĮ„qđ66 „yđ…T„´đĄ ´œøО“œC ITJļąöĄ…œ'5A‘– 8' p|tĄ6'´'‘ †#˙ęž ?@ „īžÜū’Dpūžx­B<@ ‚vpĀt‚ipøt‚\p”uVŸzˆA ˜eHC Ėu’W…Ÿ­KŅ@ ‚f…ßu’ģIŸ¨­ #˜@ ‚ĘIßuūKLŠŸ #‚dLōu‚ZLv“šŸ+8”Ruc†W…ŦŸKIA ‚f…2v†ģIŦŸ #A ‚ĘI2vūKL˛Ÿ #‚dLGv‚ZLtv“Ÿ+8”Ruc„bŸ–‚ ŗwŸĮiA ”Pv„Ÿč4 „ŸŸ°‚ „ĮŸ°‚ ’W…ķŸĀ­OB ‚f…‡v’ģIķŸØ­ #ĮA ‚ĘI‡vūKLüŸ #‚dLšv‚ZLĮv“  +8”Ruc—đ­/B ž!C „' –‚ „/ Ē‚ „Z °‚ †W…/ O§B ‚f…Úv†ģI/  #nB ‚ĘIÚvūKL5  #‚dLīv‚ZLw“E +8”Rucš.Ÿvš<Ÿv„ПŠ{ „ܟ–‚ ŗéŸĮéB ”Pv”R0„ķŸč4 „ °‚ „J °‚ „S Š{ „c Š{ Á9 \I…K ^{āđ[œBC ¤D øZ ‘öđlC Šf Šs Š€ ‹Ž‚Z /w‹Žf Yws šw€ Ãw†#˙ņ€ ĀC „ ņÜū†ÖWņ  ęC ‚åWYw‚īWgx— ŽD  ‘x„ņ3|„Ĩņ÷ „ąņ[)†ÖWō• GD ‚åWßx‚īWķx„!ņÜū„*ņũ”„2ņ„EņŅĮ„xņ–? „€ņ…T„Ŋņ…T„ÖņŅĮ„ûņ–? áļ!ŊD ŪšÕN5AáÉøÖD ëenvr @áÜøīD ëenvs @áīøE čĩ— %âæIB›%…‘ B@ōđœ2E K ø  ‘—8Ž‹E ŠŦ Šš ŠÆ ŠĶ Šā Ší Šú ģ Wō€„#õ_} —XŽK ‚  y‹XށŦ 0yš †yÆ ™yĶ ôyā Tzí hzú Éz’¤ ķōxŽ­0F ‚¯ {‹xށŊ 9{É f{„ ÷…T†‘[ķ˛PF ‚ [{{—ŽËJ  ¯{‹Čށ |†× Žķ%ŋG ‚æ N|ūgtŽķ%Č˙t‚„t‚|ū"tŽķ%(˙Yt˙Lt‚?tÂ|ū¤D ˜ķ Ŧ‚¯D }„Ĩķå|†ėėûķEĶnG ˙í‚ í&}ūn˜ûķE(˙Ĩ˜˙˜˜‚‹˜<}ūŊD ô Ŧ‚ČD ‰}`ôA(H % §}†”`ô"ÛH ‚*”Ō}‚ ”ō}€`ô"7”~ū8lbôR‚`l~‚UlŌ}‚Jl-~ūdiô/˙,d˙,d„ŽôK „šôĖQ† °ôâ†H ‚' C~ūû}°ôZ‚ ~C~ū€}°ô$‚™}C~˙}†2 ŗôâäH ‚A Y~ūą}ŗôH‚Ā}Y~ū€}ŗô6‚™}o~˙}†L ļôJâ[I ˙ƒ ˙v ˙i ’ŋšĐôđŽ Ģ>I ˙Κ‘€Đôđޏ˙(€ŠÖD Ûô¯ Ŧ‚áD …~’ös~õ(¯ėäI ‚tŖ~ŠÜs~õ(¯@‚ësŖ~0ö ØI ‚ës×~†w[0öEÍI ‚†[×~„?öZg„†õj’īD öõ@¯úmJ ‚úD ę~‹@¯E „ öŝˆ‡ö„›ö­P„Ēö­P„ŗö=„Âö­P„Īö=„Ūö­Pˆįöˆ(÷’ņ Pö`¯Å—J ‚ 3‚ S„¸ķ…T„Wôiž„Zõ…T„žõU„eöLĒ„‰ō „‘ō™„¸ōÛ~„Įō-ŧ„*ķ„5ķ…T„ûö7š„0÷Š{ ´ųp —œŖN ITŌļąö%Ą…œ'÷D‘– 8'qiĄ6'´'‘ †#˙Š  ?“K „ Üū’Cqž x¯BĮK ‚xq­‚kqå‚^q€—¯M ˜eHŖN š€’W…!Ą¨¯KXL ‚f…Ė€’ģI!Ą #L ‚ĘIĖ€ūKL*Ą #‚dL߀‚ZL “:Ą+8”Ruc†W…NĄKĐL ‚f…†ģINĄ #—L ‚ĘIūKLTĄ #‚dL4‚ZLa“dĄ+8”Ruc„Ą–‚ ŗĄĮđL ”Pv„!Ąč4 „?Ą°‚ „iĄ°‚ ’W…•ĄدO‡M ‚f…t’ģI•Ąđ¯ #NM ‚ĘItūKLžĄ #‚dL‡‚ZL´“ŽĄ+8”Ruc—°ļM ž¨N „ËĄ–‚ „ĶĄĒ‚ „ūĄ°‚ †W…ĶĄO.N ‚f…Į†ģIĶĄ #õM ‚ĘIĮūKLŲĄ #‚dL܁‚ZL ‚“éĄ+8”RucšΠvšÜ v„rĄŠ{ „~Ą–‚ ŗ‹ĄĮpN ”Pv”R0„•Ąč4 „ŗĄ°‚ „‚ „÷ĄŠ{ „ĸŠ{ Á9 \IߟÍŧN äN ā5„äN Ū84Ę ´'âîCŅ ëDŦCßģÍøN O ā5„äN āÖš%ü,%0÷ķœ%O Q û5„.H‘— °øP ™56%‚îË5'ΆYD÷ģO øœYpˇŸūģID÷ ÛøĘIpˇŸūĄID÷ -ø°IpˇŸ†7 i÷ -åO ‚P :‚‚F k‚’éN ‡÷8°YP ‚øN ~‚„œ÷k€ ’§Y°÷P°)9P ‚˛Y–‚„ŋ÷=<’­N ŋ÷h°)ĀP ‚ÆN Ž‚‚ŧN Ė‚€Í÷6ÕN ä‚’ņZÍ÷€°Ņ ĒP ‚ [ƒ‚üZƒ„Ũ÷~ „ķ÷Ā… „û÷ ~ †éN ø YíP øøN ōMO „øk€ „÷K „#øŠ{ ßpŧQ *Q ā5„hë__x‘*Q lBü))0øŧœGQ ÉX û5„.H‘ĄHO‹ÉX ‘—˜°ĒX ™ēšņđ8ƒ’WéJø¸°mR ‚p铃øféōnQ Š:ŖJø¸°†‚IŖ“ƒ—đ°aR UŖâƒ’­P'ųą< R ‚ÎPT„˙ÁP„?ųR$’­P?ų0ą<:R ‚ÎP|„˙ÁP„QųR$„Søۀ ˆ'ų„\ų=ˆdųˆZû„fø÷€ ’hiøHąŽúV ‚w”„ŠNiøHąđ‚]ī„Š‡ĘiøHąŅ‚–Ęī„‹HąĸĘk…¯Ę‰…ŧʉ…’˜ø€ąđS ˙’"ßų˜ąķV ‚;´…‚1ī…ŠāĘķųØąÚ‚ųĘT†‚īʏ†’ŋgķų˛@rS ˙Îg˙Îg’Ņú(˛@|T ‚öƆ‚懂₇žūÜú‡ÎS ‚ŨƆ‚ Ũ‚‡‘ Ë"ú0˛ˆ‚%ˇ‚Ë‚‡‘–Č"úP˛š˙ĨČ‚¯Č‡‹P˛‘mČûX˛Ē˙xČ‚„Čއ‘BČûX˛Mļ˙QČ‚gČˆ‚[Čއ„û%| „Ąû%’\Túp˛DĖU ‚Š:ˆ‚œfˆ˙˙‚Š Túp˛)‚@fˆ˙4˙(‹p˛Nœˆ‘2ËTúp˛)~‚gËfˆ˙[Ë‚OËȈ‹p˛uËęˆžÚ`ú!)KnU ˙šÚ‚­Ú‰‡~dúS˙1~‚'~I‰ˆ~úž[Éēû )PŠU ø{ÉWøoÉu@€ēû „Åû$:„ēû–‚ „ÍûĒ‚ „Ôû°‚ ūäÉÔû@øķÉuP‡߯Úû ˙°g‰‚ø¯‡‰€Úû‡ǝŪû˛˙ĩ¯‚ͯš‰‚Á¯ē‰‡¯ŪûMš˙ޝ‚¤¯š‰‚˜¯ē‰„įû”{ —˛ÎV ËĘ͉„¤úz„ ˆČú„Üú­P„ëú­P„ôú=ˆüúˆŦû„„ø⁠„˜øS„Úų%| „—û”{ ’Q Ąø°˛Ž°W ‚Q ö‰˙Q †x~°ø+•ĨW ˙Œ~‚¤~!Š‚˜~@Ї<~°ø+MŊ˙K~‚a~!Š‚U~@Ї~´ø' ‚‚1~oŠ‚'~ŽŠˆŌø„?ûåĐ’ƒéäøȲŽƒX ‚’éŊŠŠ<¤äøȲˆ‚K¤õЋ螁W¤9‹’­P‡ųŗH*X ‚ÎP{‹˙ÁP„ŸųR$’­PŸų(ŗHZX ‚ÎPŖ‹˙ÁP„ąųR$„öø ˆ‡ų„ŧų=ˆÄųˆmûūƒéwûŽ‚’éģ‹„‚û<¤„bûŠ{ „uûŠ{ „ŠûŠ{  BäH ž āX "Y ā5„qåŪT@ž ´'Ūkôž %Ūō¸ž "Y âîHO  Aļ_5÷ÎX įīđûŌœCY T\ øāX ‘øęX ‘ø÷X ‘øY ‘ —@ŗI\ ŸY ‘T’^  ühŗ  ŪY ‚p Ķ‹Št‰ ühŗŌ‚ƒ‰ŒŠ4‰ ühŗ ŧ˙Z‰˙M‰‚C‰Œ’ĀS(ü€ŗŖ Z ‚ŲS}Œ‚ĪSįŒ„4üū’W…4ü˜ŗŖ ŠZ ‚f…H’ģI4ü¸ŗ #QZ ‚ĘIHŠKL=üĐŗ #‚dLš‚ZL֍“xü+8”RuW’ƒ‡SüčŗĨ [ ‚•‡ôŠW…Sü´Ō‚f…0Ž’ģISü(´ #äZ ‚ĘI0ŽŠKL\ü@´ #‚dLlŽ‚ZL¨Ž“‡ü+8”Rw†ƒ‡‘üĨ ˛[ ‚•‡ƎūW…‘üŌ‚f…ێ†ģI‘ü #x[ ‚ĘIێūKL—ü #‚dLđŽ‚ZL“Ŗü+8”RuW†W…ŽüŖ *\ øf…uXŸ†ģIŽü #ņ[ øĘIuXŸūKL´ü #‚dL0‚ZL]“Āü+8”RuW„(üy]„FüÜū„Sü/Q „ŦüŠ{ ę /e\ u\ ā5„Fu\ ¸8•’ķĸöœÚ^ Ä:Ļ8`Ļ8š‹|)DĻ8pƒßw)DĻ8‘ƒá;)EĻ8‘—X´Ī^ ­ö*)GĻ8Ĩ‰ųÖ0ĸp´)K6^ ‚"×Ī‚א‘T\ 4ĸˆ´S‚o\ 0‚e\ YžW…Žĸ/Ģ] ‚f…w’ģIŽĸ ´ #r] ‚ĘIwŠKL‘ĸ¸´ #‚dLŒ‚ZLš“Šĸ+8”RugžW…Šĸ/"^ ‚f…ː†ģIŠĸ #é] ‚ĘIːūKL¯ĸ #‚dLᐂZL‘“ŧĸ+8”RugˆHĸˆ]ĸˆlĸž Įĸ)P°^ ‚° !‘‚¤ ?‘€Įĸ‡c Įĸ~‚ƒ !‘‚w S‘‡B Īĸ g‚V ‘ˆÚĸ„Įĸ–‚ „ëĸĒ‚ „ũĸ°‚ „ŖŠ{ á×#_ ’“Ļ8—“Ļ8Ū‹|vĻ8ŪßwvĻ8Ūá;vĻ8ę$ /0_ @_ ā5„F@_ ¸8ߥ~T_ ‰_ ā5„Scë__nŽÚxë__sŽ´'âîj;“5ü|~ŖĪœĄ_ Wo û5„dĄ‘ĄžGĒx‘ĸ__xGWo ‘—Đ´Šf Ĩũ Q3‘L’!†6Ŗø´Lpa ‚5†Ÿ‘‚M†ב‚A†’‘å…6Ŗø´MŊ‚ô…Ÿ‘‚ †ב‚ū…’‘T\ :Ŗĩ ‚‚o\ /’‚e\ ^’žW…‰§/ä` ‚f…‡’’ģI‰§(ĩ #Ģ` ‚ĘI‡’ŠKLŒ§@ĩ #‚dLœ’‚ZLɒ“Ą§+8”RuTžW…Ą§"/[a ‚f…ܒ†ģIĄ§ #"a ‚ĘIܒūKL§§ #‚dLņ’‚ZL““ŗ§+8”RuTˆOŖˆdŖˆsŖ’T\ ‚ŖXĩQšb ‚o\ 1“‚e\ v“žW…*§/b ‚f…˛“’ģI*§€ĩ #×a ‚ĘI˛“ŠKL-§˜ĩ #‚dLĮ“‚ZLô““B§+8”RuSžW…B§@/‡b ‚f…”†ģIB§ #Nb ‚ĘI”ūKLH§: #‚dL”‚ZLI”“T§+8”RuSˆŖˆĩŖˆĮŖ†Ú^ ĶŖ^SCd ‚_ \”‚_ „”‚÷^ ŔūAšĶŖ^‚‚‚š\”‚uš„”‚hšŔūĶŖ^_‚š\”‚ô¸„”‚į¸Ŕ€ĶŖ^šŲ”ūI¸ĶŖ^V‚€¸•‚s¸`•‚f¸Ŕ€ĶŖ^¸ȕū_ đŖ:‚:_ ە‚0_ –‰ĀSöŖ°ĩ/Úc ‚ŲS9–‚ĪSL–„¤ūžĀS¤/ d ‚ŲSy–‚ĪSؖ„¤ū‡ĀS ¤ /‚ŲS—‚ĪSY—„'¤ū’_ 1¤ĐĩWe ‚:_ †—‚0_ ¨—‰ĀS7¤čĩ/Ÿd ‚ŲSŌ—‚ĪSô—„J¤ū‰ĀSW¤ļ/Ōd ‚ŲS$˜‚ĪSF˜„c¤ū‘ĀSh¤0ļ/‚ŲSf˜‚ĪSˆ˜„t¤ū’ą]t¤PļWƒf ‚Â]¨˜‰W…t¤pļ/˜e ‚f…ʘ’ģIt¤ļ #_e ‚ĘIʘŠKLw¤¨ļ #‚dLė˜‚ZL™“̤+8”RuS‰W…‡¤Čļ/f ‚f…,™†ģI‡¤ #Öe ‚ĘI,™ŠKL¤āļ #‚dLN™‚ZLp™“ĩ¤+8”RuS‘W…‘¤øļ/‚f…Ž™†ģI‘¤ #If ‚ĘIŽ™ŠKL—¤ˇ #‚dL°™‚ZLŌ™“ŋ¤+8”RuSˆ"§—(ˇ8o îj;^5™ģ:`5đ™™ÅNazx%š™ofbzxiš’E_ Á¤Hˇ_]g ‚k_ ›‚^_ T›‚T_ Œ›‹Hˇz_ ¸›†9cÁ¤9g ˙Hc˙HcūēҤ“‚%ēí›˙ē’wØŲ¤pˇ`ƒg ˙ĄØ‚”Ø5œ’ēė¤˜ˇa h ‚Ÿēœ˙Šē‹˜ˇ‡gēė¤Ē‚rēɜ˙~ē‡<ēė¤Mļ‚Kēɜ‚aēŨœ‚Uēņœ„õ¤%| ’!†û¤°ˇi’i ‚5†‚M†‚A†u‘å…û¤°ˇMŊ‚ô…‚ †‚ū…u‘T\ Ĩȡ ‚‚o\ Н‚e\ +žžW…:Ļ/i ‚f…jž’ģI:Ļ⎠#Íh ‚ĘIjžŠKL=Ļøˇ #‚dLž‚ZLŦž“RĻ+8”RuTžW…RĻ/}i ‚f…ŋž†ģIRĻ #Di ‚ĘIŋžūKLXĻ #‚dLԞ‚ZLŸ“dĻ+8”RuTˆĨˆ)Ĩˆ8Ĩ’Ũ×;Ĩ¸rAj ˙*؂؟‚ØLŸ˙ØŠ…×;Ĩ¸).˙ŌׂÅן‚¸×LŸ˙Ģ׊4×;Ĩ¸)‚iן‚]×LŸ˙Q׋¸w×xŸ„NĨz\ ’Ũ×QĨ(¸yđj ˙*؂ذŸ˙Ø‚Ø؟Š…×QĨ(¸).˙ŌׂÅ×°Ÿ˙¸×‚Ģ×؟Š4×QĨ(¸)‚i×°Ÿ˙]ׂQ×؟‹(¸w×ųŸ„cĨz\ ’ŋ qĨH¸ˆm ˙ô ‚č 1 ‚Ü \ ‘ qĨH¸—˙° ˙¤ ‹H¸‘c qĨH¸~˙ƒ ‚w o ‘B yĨ`¸g‚V  ‘ą]yĨ`¸]‚Â] ‰W…yĨ€¸/l ‚f…Đ ’KLyĨ˜¸ #ņk ‚dLĄ‚ZLHĄ“žĨ+8”RuŧūģIŦĨ #‚ĘIĐ ‰W…Ĩ°¸/‡l ‚f…[Ą†ģIĨ #Ll ‚ĘI[ĄŠKL–Ĩȸ #‚dL—Ą‚ZLšĄ“ķĨ+8”Ruŧ‘W…šĨā¸/‚f…ץ†ģIšĨ #Ál ‚ĘIץŠKL Ĩø¸ #‚dLĸ‚ZLBĸ“éĨ+8”Ruŧ†ŸúĨŠ‘m ˙ҟ˙įŸ‚۟`ĸ€úĨ‡ŸūĨ ˛˙˜Ÿ˙°Ÿ‚¤Ÿsĸ‡bŸūĨ Mš˙qŸ˙‡Ÿ‚{Ÿsĸ„Ļ”{ ’ŸyĻš…n ˙ҟ˙įŸ‚۟†ĸ‹š‡ŸyϞ˙˜Ÿ˙°Ÿ‚¤Ÿšĸ‡bŸyĻMš˙qŸ˙‡Ÿ‚{Ÿšĸ„„Ļ”{ †ŋ œĻ„Žn ˙ô ˙č ˙Ü ‡ œĻ—˙° ˙¤ €œĻ‡c œĻ~˙ƒ ‚w Žĸ‘B ĨĻ(šg‚V ņĸˆąĻ†œÆĻ ûn ˙§‚ŗŖ‡vÆĻ MĀ˙…‚ŖˆĪĻ„oĻ–‚ „ŒĻĒ‚ „•Ļ–‚ „ÃĻ–‚ „‡§°‚ „˧–‚ „*§Š{ „]§Š{ „ž§Š{ ¸8ßô|ko ƒo ā5„dĄë__x‘ƒo 9Ŧr DĐüØœĸo „q û5„ĶH‘ƒã;D„q ‘‰\o äü@šEyq ‚uo 0Ŗ‚ko ~Ŗ’!†ōü`š•nq ‚5†ļŖ‚M†âŖ‚A†$¤‘å…ōü`šMŊ‚ô…ļŖ‚ †âŖ‚ū…$¤‘T\ öüxš ‚‚o\ B¤‚e\ „¤žW…mũ/âp ‚f…ĸ¤†ģImũ #Šp ‚ĘIĸ¤ūKLsũ #‚dLˇ¤‚ZL䤓€ũ+8”RugžW…‹ũ/Yq øf…v Ÿ’ģI‹ũš # q øĘIv ŸŠKLŽũ¨š #‚dL÷¤‚ZL$Ĩ“Ļũ+8”Rugˆ ũˆũˆ.ũ„]ũ‰_ „‰ũŠ{ ¸8ü!°ũ$œĄq Éq û5„†ā‘Ąã;GÉq ‘„Īũˆo ¸8Ļ6ŋāũÜœéq Ís û5„›V‘Ą°MŋÍs ‘’\o ôũĀšĀÂs ‚uo 7Ĩ‚ko …Ĩ’!†ūčš•ˇs ‚5†ÍĨ‚M†Ļ‚A†GĻ‘å…ūčšMŊ‚ô…ÍĨ‚ †Ļ‚ū…GĻ‘T\ ūē ‚‚o\ eĻ‚e\ §ĻžW…ū/+s ‚f…ÅφģIū #ōr ‚ĘIÅĻūKL‡ū #‚dLÚĻ‚ZL§“”ū+8”RugžW…Ÿū/ĸs øf…v Ÿ’ģIŸūē #is øĘIv ŸŠKLĸū0ē #‚dL§‚ZLG§“ēū+8”Rugˆūˆ/ūˆ>ū„qū‰_ „ūŠ{ ¸8ú°ŲĀūJœęs Ft û5„>V‘Ąã;œFt ‘†‘[ęūž't ‚ [Z§„áū/„ęūÎq „úū¸8ŋŨ: *Íœ§v ‡{!2*ŗ/n†!Ā’!˙˙’t‰,HēuÉt øƒ‰€ˇŸŠ4‰,Hē ŧ˙Z‰˙M‰‚C‰§’t‰¤,`ēgu øƒ‰lˇŸŠ4‰¤,`ē ŧ˙Z‰˙M‰øC‰lˇŸ’Ōģ,xēĻwu øœŌ`ˇŸŠŧuģ,xēøËu`ˇŸ‘uģ,xē}øŦu`ˇŸˆD*„T*ׂ „d*˙—„|*˙—„”*˙—„ą*™ˆÆ*„×*ׂ „ė*™ˆü*„ +ׂ „%+™ˆ5+„E+ׂ „U+˙—„m+1š„…+1š„+˙—„ĩ+1š„Ī+™ˆß+„ī+ׂ „˙+˙—„',ׂ „/,{P„M,™ˆ],„m,ׂ „},˙—ˆ™,„¤,ׂ „ģ,ׂ „å,ׂ ÁVšF¨p“Á#FŠp“Á|´FĒp“œĶ*ŽÃ10xˇÃ@0ōˇÃO0ņˇÃ^0đˇÃm0ėˇÃ|0čˇÃ‹0äˇÃš0āˇÃŠ0ܡø0ØˇÃĮ0ÔˇÃÖ0ҎÃå0СÃö0ˎÃ1ġÃ1ȡÄ)1dÃ61tˇĶÃE1PÔĶÃU18ÔJGÃe16ÔĖčÃs1&ÔŸõÃ1ÔņõÓ1ÔĶÃŖ1éĶmúÃŗ1 ĻĢúÃŋ1xĻĢúÃË1`ĻĀæÃ×1äĶÄ%2Ã8ų`ˇÅIų˙˙˙˙˙˙˙ÃcųŽļįÃtųŧÔÈųpˇvä×ųĶĶHÃ§ųŋĶĶÃˇų§ĶÃĮų ˇÃØų|ˇĶÃéųĶväÃųų~Ķväà úmĶnæÃúgĶdįÃ)ú`ĶPãÃ9úUĶdįÃIúNĶPãÃYúCĶčãÃiú7ĶdįÃyú0Ķ8Ã‰ú(ĶŸõÙúĶväÊúĶväÚúôŌÆÉúŸ†ÃŲúķˇÃčú€ˇÄųúĮû˙Įû˙˙Æ%û˙˙ÚåÃ6ûęŌPãÃGûßŌt'%]z °‘'ž Kz ÃXû@ÉÃiû@¸ÄtûLāûRÄŽûTÄ›ûIÄĩû/JGÃÂûŗLåÃĐû5ÉÄßûÄėû(čÃųû(Éà ü4¸Ãü0¸Ã"ü,¸Ã,$X¸Č)FÉC42<ÉN4.ÂÉî8čéÉ9=qÉQ9™ŗÉ\9ˇ9ʲĻGîlˇĘÜk)ĀĻÉFFh9ĘIŅæY¸ÉĻŅâ"m7„90Š{ *ŽËˆÁđŊ{ *ŽĖ*ļ4ļ %Õ{  % ƐFj %ė{ ´'mĖ™ˆŖˆQ%| ´' ¤ŸF‚ %%| Č*&'´'m4'$7€“7*Ž>| đĖĢģĩģČ*[| ´' %EŽēgG %u| u| ĸ>všŽE*( %•| ´'´' ē‚ %°| ´'´'E<ËJŦ %Ę| M(M(v‡$´Ä)W ĐFs %ų| ëD´'' |YFZ %} ëD āî\  %%}  %ÍÕ3 %9} 9} v,ÎÜėO} 9} θ)_} 9} ĖV˛`˛ %w} ´'EũßFō %Œ} ëDĖ ‚‚*ŽŽ} *ŽuQ%Ė[&e&Q%Õ} u&'&'ëDĩŦžWč}  %ĖöJKČ*~ ´'´' FëD ~ ´'´'EĻFí %5~ ëDÍQČ*ŽI~ Q%ÎP(c~ *Ž*Žd ŖˆŽ&'y~ ´'Eė“ %˜~ ´'´'&' ffœČ*Ž~  %~ 6m2Æ:ĖË\Õ\Č*Ö~ ´' % Øé %ö~  %´'—S ™&@ % ´'4jČ7‚ÖL*Ž* đÍŨm*ŽH *Ž %‘'ą7†¸@] *Ž CŽ\˙Č*x Č*&'ĩŌ%]>‹ ‹ vž•ĩÕ%W㤠*Ž ŋŌ]6 %Î Î ´'&'Ų  %vÔ ž•vߕ .gFí %˙ ëDX% % WFōX%€ ëD Ũ(FÅ&':€ *Ž&'&'ëD 5Š\ %U€  % % Ļ\a %k€  %E>PF˛ %€€ ´'E-‘nx %•€  %E°‹KķĒ€ Ē€ °€ v€+vļ€ nŽ f&\nВۀ  %u&' §ŧoü %ņ€ ņ€ vãwæoŪŽ ¸Yo % ņ€ Ģôoô %/ ņ€ EÂ"pq %N  % % %EĶîp‰ %m  %m Ą”vs ų> ¯[k– % ´'´'I@ vC@ĩ.kœļ C@ bfkŸ´'ˁ  % ũĘo^ %⁠- ;oa*Žø - ŋšWk %‚ Č*jdup\ %$‚  % ­oī %?‚ ņ€ ?‚ vE‚  ŐFd %f‚ ëD´'mEæ‡n %{‚  %Īžvector::_M_insert_auxÍ *ŽĒ‚ *ŽĐ7"Đ{  ‡[oY %Ņ‚ Ņ‚ dv-Íõ2 %õ‚ d*Ž*Ž čF2ëDƒ  %´' ŨEF= %+ƒ  %ëDĖjļtļ %Hƒ ´'ëDĩĢž\[[ƒ  % ˜-\hВ{ƒ  %*Ž&'E˙Đqˆîšƒ îÆ: % \Ą %°ƒ Æ:wô\ôî ͋\ņ %ԃ ´' eS\' %ōƒ ´'9D9DĖemom %„ uuQ%}ˇFÍ›*Ž=„ uĢ5Ģ5 %Ņ{]ãRÍן*Že„ *Žu‘'E+nv %z„  % Ŧod %•„ -uEX)¯Č*Ē„ ´' Wb %ʄ  %ʄ Մ vЄ ‚4v‚4w _\Ō %Er[r9*Ž… *Ž&' % % %؍EœwsQ %:… :… *Ž %*Žmvœ“EˆrL %Z… *Ž&'EËzb× %o… o… v˙’EôQt  %…  % %mÎĮ … *Ž Nķ]2 %Ā… ‹ ´' %e&FË&'u&'&'ëD% U$ > 9: ; : ; : ; : ;  : ; : ; (  : ;  I8 9: ; .?: ;I</II.?: ;I<: ; I.?: ; n<&I.?: ; nI<.?: ;nI<.?: ;nI<.?: ;nI<: ;I.?: ;n<.?: ;nI< : ; I8 2 : ; I2 .?: ; 2 <dI4 .?: ; 2 <d! : ;I8 ".?: ;<d#.?4<d$ : ;I?2 <% : ; I8 & : ; I?<'.?: ; nI<(.?: ; nI<d).?: ; n<d*.?: ;n<d+.?: ;nI<d,.?: ;nI<d-.?: ;nI<..?: ;2 <d/.?: ; 2 <cd0.?: ;nI2 <d1.?: ;nI2 <d2.?: ;n2 <d3.?: ; nI2 <d4.?: ; nI<5/I6<7 : ; 8<9 : ;2 : : ;I?<;.?: ;2 <d<: ;I2 = : ;I?2 < > : ;I?2 < ? : ;I?2 <@.?: ; L 2 <dA.?: ; nI2 <dB.?: ; nI2 <dC.?: ; <D.?: ; <E.?: ; I<F.?: ; I<G.?: ; <dH.?: ; n<dI/IJ.?: ; nI<dK.?: ;nIL M2 <dL.?: ;n<dM : ; N : ;O9P4: ;I<Q:: ;R : ; S.?: ; nI<T.?: ;2 <cdU.?: ;L 2 <dV : ; 2 W : ;X : ;2 Y0I Z : ;I8 2 [.?: ;nI2 <\.?: ; <cd].?: ;<cd^<_.?: ; 2 <d`.?: ; 2 <cda : ; 2 b.?: ; n2 <dc : ; d : ; I8 2 e.?4<df.?42 <dg : ;h.?: ; n2 <di.?L 42 <dj.?: ;I<k4: ; nI?<l4: ; I<mn.?: ; n<o$ > p Iq : ; nr : ; s : ; ItIu!I/ v Iw.?: ;I<x : ; y9: ; z.?: ; I<d{.: ; I<|:: ; } I~.?: ; I< € : ; n : ; ‚ I8 ƒ„&…!† : ; I8 ‡Iˆ: ; ‰ : ;I 8 Š : ;n‹9: ;Œ : ;.?: ;2 <dŽ : ;.?42 <d: ;I2 ‘.?: ; nI2 <’.?: ; <d“.?: ; n2 <d”.?: ; nI2 <• : ;– : ;I— : ; I?2 <˜ : ;I8 ™.?: ;nI2 <š.?: ;nI2 <›.?: ;nI2 <dœ : ;I?2 <  : ; ž : ; 2 Ÿ I8 42  .?: ; nIL M2 <dĄ.?: ; nL M2 <dĸ.?: ;n2 <Ŗ.?: ;n2 <¤ : ;Ĩ.?: ;nL M2 <dĻ.?: ;nI2 <§.?I4<d¨ : ;Š : ;2 Ē : ;I8Ģ.?L 42 <dŦ.?: ;n2 <d­.?: ; nIL M2 <dŽ : ;2 ¯.?nI42 <d°.?: ;n2 <dą.?: ;nL M<d˛9ŗ.?: ;L 2 <d´.?: ;<ĩ.?: ;<ļ/ˇ.: ;I<¸.G<š.: ;I<ē.: ;<ģ.?: ;n<ŧ.: ; <Ŋ4: ;nI?<ž4: ;I<ŋ4: ; nI?<Ā4: ; I<Á4: ; I<Â4: ;I< Ã4: ;I<Ä4: ;I<Å4: ;I<Æ4: ; I< Į4: ;I?<Č4: ; I<É.?: ; I2 <dĘ.?: ; I2 <dË.?I42 <dĖ.?: ;I2 <dÍ.?: ;I2 <dÎ.?: ;n2 <Ī.?: ;n<dĐ.?: ;nIL M<dŅ.?I42 <dŌ.?: ;nIL M<dĶ.?: ;nL M2 <dÔ.?: ; nL M2 <dÕ.: ;I<Ö.?: ;L <d×.: ; I<Ø : ; Ų : ; IÚÛ: ;Ü : ; Ũ.?: ;I Ū: ;Iß.G dāI4á.G â ã4: ; Iä.G: ; då.: ; I æ4: ; Iį5Ič: ; Ié: ; Ię.G: ; dë: ;Iė.?: ; I í.?: ; î4: ;Iī.G đ.G: ; ņ4: ;IōdķIdô õ ö.4 ÷.1n@d—Bø1ų.1@–Bú.G@d–BûI4ü.G@d—BũIū1X Y˙1€ 41‚1ƒ: ; I„‰‚1….1n@d–B†1X Y‡1X Y ˆ‰‚‰1RUX Y Š1RUX Y‹ UŒ.1@—B1 Ž.1@d—B1  ‘1RUX Y ’1RUX Y“‰‚1”Š‚‘B•.G@—B–: ;I— U˜4: ;I™4: ;Iš: ; I›: ; Iœ4: ; I4: ; Iž1X Y Ÿ41 .G: ;@—BĄ: ;Iĸ: ;IŖ.G@—B¤4: ;IĨ4: ;IĻ.G: ;@d—B§I4¨.1n@—BŠ41Ē4: ;I Ģ: ;IŦ.G: ; @d—B­4: ; IŽ.G: ; @—B¯4: ; I°!I/ą.G;@—B˛41 ŗ‰‚1´.G@–Bĩ.G: ;@–Bļ: ; Iˇ‰‚•B1¸‰‚•B1š‰‚“Bē.G: ;@d–Bģ1X YŧŠ‚1‘BŊ ž4Iŋ.4@—BĀ1Á4: ; I?<Â4I?4<Ã4GÄ4G Å4GÆ4GĮ4GČ4GÉ4GnĘ4GnË.?n4<Ė.?nI4<Í.?I4<Î.?4<Ī6Đ.?4<Ņ.?I4<Ģ8û /usr/include/c++/4.9.2/bits./include/gtest/internal./include/gtest./src/usr/include/c++/4.9.2/ext/usr/include/c++/4.9.2/usr/include/usr/include/bits/usr/include/sys/usr/include/c++/4.9.2/i686-redhat-linux/bits/usr/include/c++/4.9.2/tr1/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/include/c++/4.9.2/debuglocale_facets.hgtest-port.hgtest.hgtest-internal-inl.hgtest.ccstl_vector.hgtest-test-part.ccgtest-death-test-internal.hstl_algo.hnew_allocator.hgtest-internal.hbasic_string.hatomicity.hstl_construct.hgtest-death-test.ccgtest-printers.ccostreamchar_traits.hgtest-message.hgtest-param-util.hstl_iterator.hstring.hsstreamstdio.hvector.tccstl_algobase.hgtest-test-part.hgtest-filepath.ccstat.h gtest-filepath.hgtest-port.ccbasic_ios.hios_base.hstreambufistreamiomanipbasic_string.tccgtest-printers.hmove.hmathinline.hstl_uninitialized.hstl_tree.hstl_pair.htypeinfopredefined_ops.hstl_iterator_base_funcs.hgtest-typed-test.ccstl_set.hiostreamcwcharcpp_type_traits.hstl_iterator_base_types.hc++config.h clocalenewallocator.hstringfwd.hcwctypeostream.tccstl_bvector.htuple iosfwdstl_function.hcstdlibbasic_ios.tccpostypes.hfunctexcept.hostream_insert.hstdio.hlibio.hstdarg.h stddef.h wchar.htime.hnumeric_traits.halloc_traits.htype_traits.hdebug.h locale.htypes.hsched.htime.hpthreadtypes.hatomic_word.h wctype.hstdlib.htypes.h sigset.hselect.h stat.hunistd.hregex.hgtest-string.hgtest-spi.hgtest-death-test.hsiginfo.hsignal.hsigaction.hstdlib-float.hstdlib-bsearch.hfcntl-linux.htime.h socket_type.hsockaddr.hsocket.hnetdb.hgthr-default.h errno.hctype.hpthread.hsocket.h wait.h mman.h sched.hfcntl.hcxxabi.h˙˛ ˙™ 0˙ž åØįæĸy ūäČ><úäŽ~ ZĸėäŠ~ æ št‡N -Zf„,hĄ Ķ~f¯fJ i ­.Ķ|<J„ō JŊiU2ŠŲž  FJ;<‡ öŒ}<"M <s;rX Ú%Šuö fŠu<ĢzC<’fĢz<C<=ŦCfĄ t/<kJ<;=;jŦ/.bJ=<a<<b<‚>^< <>; ûvōC.=fC<=Cf=ČCfė 4gI=igĄ›… t ˇvōÉ f ë ÔlōŦfÔl<C<ņ ÖōÅxģfÅx<‹|Jõf‹|f íC"Vē#õČĸzX# X ŦXŨ ē;=m<& ŊvtCą‚ „{<ļXŸ< á~.ŸgÉ šuJCf§ J áŠu ö fŠu<”Ö —užC<Ļ f —u<C<§ X –u<Cf=fC<=fC<›åå!åå$åÉîķķe=ļqēĘ<¸p<  |JŠ.Mhb@ ÚlžĻ< Úl<C<ä‚} ŪlÖCfĨŦ>RŽV0 fū˙ņã7X/Čä!e!Ŧä!;!/ō/ ƒiēC<ēf ƒi<C<=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cfģ‚wÖ Xw< < ‚iƒC<=fC<=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf =ē Cf =ē Cf=äCf=ēCf=ēCf=ēCfEÖ>: Ū<¤f Ü.¤fg ķ*‚~äū<‚~fC<=‚CfĐ~‚ģüŦ đē< đ<C<=‚CfN‚F</X đ‚~äū<‚~fC<=JCf=JCf=JCf=JCfNo  īä Cf=JCf=fCf=ēCf=ōCf=<Cf=ēCf=ēCf=ēCf+4ĸ~fŪ<Öĸ~<ā<Ÿ×;/ ŒŦ‚~tū<‚~<C<2‚  ÖCX=žCfØŦgeÖ=0Ü §JŠuēö fŠu<Ī{ä §žŠuÖĢzČC<’fĢz<C<=JCf=JCf=JCfãJy. á~.Ÿ á~<C<ãŦ Ú~GCf=ēCf=ēCf =ē Cf=žC<=fC<=ŦC<=fCXõČ<=@~2X L  š~  <  û{f  õ< <  ‡. ô|tŗ‚Ō}ÖžLȡ?9ķ}‚ä }‚˙< –~ ę< –~<C<ũ‚øž‘-=„}*+t ƒ}.ũ<!‰}X zfÕt Ä|‚ ütCf3#<@:"<đ*~ ŽŗuxČî*­}.ĶŦ­}fĶ<­}ēĶŦ­}fĶ<’~ž%øXäK­o< ž}ÔēØ< LĻbfÚfːaJķ<a.đfaķ<a<ķXgs=Œa‚ķ<a<ķXMévä!-.=ĖDz=ÍāĐ_ēģŦõXŒg<ÄxJ° tj‡gäĸyŪfĸy<Ū'õÖ‹gŊzX<Š<Y÷z‚”<;ízJ”<íz‡ČÛyĨ, Īyą,íz.‡‚ Jãz<‘<Yđz‚›<;Kåz<›<æzÖŽČÛyĨ, Īyą,æzōš<æz<Ž‚ JŨzfåuƐ<Īk<Y ŦK¨<ĖkäÛyĨ, "Īyą,¨ōØk<¨<Ėk‚ Jf<×k<Y ŦK <ÔkäÛyĨ, "Īyą, ōāk< <Ôk‚ JÜf…v<Ŋ}ē ĮtCXö~J Į‚Cf=ēCXö~ŦËž ŊJģēŊ}ē ĮČCf=JCfö~J Į‚Cf=ēCf=<Cfö~ČËž ŊJ‹ ēŦ<Ô}Öžyâ,Ŧ.Ô}‚âxfg;Ög„Ą —ÖŠuäö fŠu<ß{Ö Ė~žC<ņf Ė~<C<=JCf =J CfōJ+ Î~瞐 Î~<C<ōŦ  Ë~: Cf=fC<=fC<= Cf“'€<€<€<{< ‚āX’|ēė|ē”f˙|ņ‚ē‚} ū<‚} ū<€}ē€<ė|f”f˙|f<˙|<ņ‚Ö‚} ū<‚}<ū<ņfy<ņ<|Xė|ē”fđ}fÖ‚} ū<‚} ū<ė| ”fė|J”f˙|f<˙|<ņ‚Ö‚} ū<‚}<ū<€}fô<ē˙< ¯rČC<Žf ¯r<C<=tCfŽX ¯rōCf =Č Cf=tC<=fC<ī .>lũ}热e! Įntš< Įn<C<ö‚É ÆlJCfĘČg;Ö=Ürfė|ē”f˙|ņ‚ē‚} ū<‚} ū<€}ē€<ė|f”fė| ”fė| ”f˙|ņ‚ē‚} ū<‚} ū<€}ē€<ė|f”fė| ”fė| ”fė| ”fė| ”fė| ”f° ‚ ŪpÖĸ< Ūp‚ĸ< æp"C<×f æp<C<=tCfXÉ ŦĪo< –_C<=fC< =ä Cf Čę#<ģo<ā~<æf­<č<1Ž ¸l,Č< ¸l<C<‰‚ķvōč ŧl$CfŒ&<= ŦzÖ#i# Šl1C<”f Šl<C<•J ¨lōØ< ¨l<C<=+Cf=fC<=fC<šž<=ؐ}‚ čnÖˆ<‹}õf‹} õē‹}fõ< €lžC<Ŋf €l<C<=‚Cfž‚Ž ũk,ƒ< ũk<C<‚Ÿķ„}‚ü  ųk‡< ųk<C<Æ‚‘;=ķ‘s=˙|‚J ķk< ķk<C<Ë‚’)‘W/.­z%ķw1 ęk(Cf =' Cf=äCf=ōCf= C<=fC<ÔŦ<Ÿ āiēĸ.=K;=ÎkČė|ē”fL‚ä<$‚”näíČ;=ĢkŊōÃkžÃ&Ŋkfˇ‡°iÖāt }ā< }Xā< }Čā< }Čā< }Čā<ūČgĩk Ëfĩk ė|<”f Ž~fō< Â<ĒkJ Öfžnf Âfžn<ė|<”f –~fę< –~<C<=äCfōÉ%gWמgfē‚} ū<‚} ū<€}ē€<ė|f”fė|f”<ė|ē”< Ž~fō< Â<ĒkJ ÖfĒkf Ö<žn<ė|<”< –~fę< –~<C<=ēCf Úē<YØ:>”}ōė<”}<Öļl  Ž~fŧ.ļl ė|<”f˙|ƒ¸?°läŅČ;=¯lē Ž{fC<=fC< =ē Cfĸē<=;>-.fUŦįđė|”f˙|ņ‚ ‚} ū<‚} ū<ė|f<€<ė| ”<k7A$ā| ĸ+Ū~< Ö<ĒkJ ÖfÔlfC<éfÔl<C<¨‚'. î}’< î}<C<œ‚u Ÿ{.CfĐ‚/[ē ž}<(x.DŧBŦÂ*ž‚Č‚´ō„zÖüf„z  ĸ"Ū~< Ö<ĒkJ ÖfĒkt Ö<Ēk  ĸÖŪ~< Ö<ĒkJ ÖfÔlfC<éfÔl<C<=‚Cf¯Ŧä| ĸ+Ū~< Ö<ĒkJ ÖfÔlfC<éfÔl<C<ËfÉe!š]ÖÜ| ĸ+Ū~< Ö<ĒkJ ÖfÔlfC<éfÔl<C<Đfk‚‘Kę| )8C.=fCfސŌ|<­0Ķ|<­<Ķ|t­<Ķ|.ē ĸ<Ū~< Ö<ĒkJ ÖXÔlfC<éfÔl<C<=ŦC<=fC<J Ž{äCf=fCfX Ž{fCf=ōC<=fC<Ëž ō}ēC<=fC<=‚C<=fC<=.C<=fC<ä i9Øu¯ ŦäZ;Yd‚ģ~ēė|ē”fė|f”<ė|.æ< <ōD< đ ÔlžC<éfÔl<C<§‚ė|ē”fė| ”fđ}tŦ‚} ū<‚}<ū<ė| ”fÉtˇ~<É  Í|fŗ< Í|<C<ņ‚ō.ų~Ŧ73uēĒ~ēė|ē”fė|f”<ė|.æ< <ōD< đ ÔlžC<éfÔl<C<§‚ė|ē”fė| ”f‚}‚ūä‚}fū<ė|<”fÚtĻ~<Ú  ŧ|fÄ< ŧ|<C<‚JT Ž{JCfä Ž{<Cf=JCf=fCfÚ J<Āk<ÂfžkXÂ.k˛^ä”<ė|ē”<đ}f’‚î<<‚}.ū<ģfÅa<ģ<ēdžÆ<ēdXKÄj=¸dōŋt <Ŧdē ō=%f\<$._åŧ:0"˜Đ Jgf‚Ø^Ē!ŽÖ^.Ē! Ōdē¯ž ˙_  < ˙_<C<ŋ ē/ žČ^äģ!„ÁdäĀž î_ ’ < î_<C<Đ ēsJĐ^˛!ŽÎ^<˛! Ędˇž ÷_ ‰ < ÷_<C<Į ‚ ö_;Cfō Ž{BCfō Ž{BCfōĄO<=­ ƒm‚ƒf ũl<ƒ.y&ę˙}‚‚˙}. čnō™<ú}†ú} †ú}f†< īlžC<Îf īl<C<=‚CfĪ‚ķjŦäv(ÜxȤ<Üx<¨X  ûlM Cf=fC<=fC<Œ#<>¯U1i“_äė|ē”f˙|ņJē‚} ū<‚} ū<€}fî#<‡bäų<‡bXKø.3‘\Ŧ萯~ČX>Đ~ēė|ē”f˙|…ŽōĐ{<°<¸ČĘ~Ö Ü|‚¤<=ĪęsČ– <Ęvf }<ā< Â~fž<į<†ąä Ž{ČŌ< Ž{<C<ß‚Č{Ŧ¸# Ū|ČCf‚˙~1K‹Xøwēt Ģ|<Ct“‚ Ē|ōÕJ Ģ|.C<“tfķëČ—xēé<—x. Œ|.ôJ Œ|XC<˛‚f,g;ׁ‚xŦ˙Xx.k==ōzē”<úf†~<ė|<”< Ž~fŪ~<”< Â<ĒkJ Ö<špf Į<šp<úē†<ú‚äŦœ{žüÖ„~fü<ė|<”f„~‚äŦŦã~< ˙yž<˙y<ü‚„~fü<ė|<”f„~‚äŦžžūy‚<ūy.ü‚„~fü<ė|f”f„~‚䐜{‚č~Ŧ˜<B<ĻfÚ<>‚䐜{‚üŦ„~fü<ė|<”f„~‚䐟žũyƒ<ũy.č~‚˜<ü<ė|X”<„~‚䐜{‚č~Ŧ˜<B<ĻfÚ<>‚䐜{‚üŦ„~fü<ė|<”f„~‚䐠žüy„<üy.č~‚˜<ü<ė|X”<„~‚䐜{‚č~Ŧ˜<B<ĻfÚ<>‚䐠žtā~  <ā~ Ą‚7AvČ Ŧv< <ß~ēäfĶ…ōKÉÉÖ=_I:ųuü„~fü<ė|<”f„~‚䐪žųuž‡ <ųu<ü‚„~fü<ė|<”f„~‚äŦ¤Üz<¤ øuˆ <øu<ü‚„~fü<ė|<”f„~‚äŦĨž÷uŦ‰ <÷u<ü‚„~fü<ė|<”f„~‚äŦĻžįzX™<įz<ƒ Ÿ{tC.=fC<žŦ Ÿ{ēCf=XCfļ Xy"ŗy< *Į~ē*ēX,‚.ž D X J. ß{fĄ< ß{<C<=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf ¤ōēX¸|‚ŖŽ}X˙<~<˙XguCy<_¸}XÃJÖ D X J. Ķ{f­< Ķ{<C<=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf *¤ē*ÆX,Ŧ ē~fÆXĒ|JzáJ:0 Î{XCf=ŒCf=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf&=$&Cf$=ō$Cf"=ō"Cf =ō Cf=ōCf=ōCf=ōCf=ōCfC Ž{$CfÉ‚ ô{XCf“ČĻ~<ZÖÆ}fÁfŋ{.ŋ<>‘†Ž>â ë ÖŠuēö fŠu< ķ~<< é žŠuēö fŠu< žy‚C<Ÿf žy<C<=‚Cf=‚Cf=‚Cf=‚Cf=‚Cfŋ‚2 š ē¨uēs„c<Xaē Ø ‚ˇuX É ŦšuōuŠ}žöžŠ}.ö. X™g;! ˙xXC<žf ˙x<C<=‚Cf´"Ä}žŧžÄ}.ŧÖX;Y úxoCf=ēCf=ēCf=ēCf=ēCf=ōC<=fC<= C<=fC<=ēCfļt ‡y>C<=fC<Ā"> )â}ē)žX*‚Xž A tä.f. ûzf…< ûz<C<=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf ¤.žX–Ø:>ķ5.å ņzf< ņz<C<=ēCf=ēCf=ēCf=ēCfÚē d<fæÕ0.ä!e!Ŧå åzf›< åz<C<=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=.CfÚ. ãzeCf=ōCf!=ō!Cf#=ō#Cf%=ō%Cf =ž Cf=ōCf=<Cf=ōCf=ōCf=ōCf =ō Cf =' Cf =ō Cf=ōCf=?Cf=ČCf=žCf=ōCf=ōCfí-<Ÿđ‚˜~$ ĮyfC<öf Įy<C<=tCf÷XxČ Æy8Cf=tC<=fC<‹ <äÖĶÖ­~) yü„~fü<ė|<”f„~‚äüž yžā< y<ü‚„~fü<ė|<”f„~‚äŦü„~<ü  yā< y<ü‚„~fü<ė|<”f„~‚äŦüž yŦā< y<ü‚„~fü<ė|<”f„~‚äŦüž‘~Xī<‘~<ƒ Ÿ{tC.=fC<žt Ÿ{žCf=XCf5ä Ž{ōC<=fC<=äCf+˙6<ČÖĐJ°~)yü„~fü<ė|<”f„~‚ä˙žyžã<y<ü‚„~fü<ė|<”f„~‚äŦ˙~<˙ yã<y<ü‚„~fü<ė|<”f„~‚äŦ˙žyŦã<y<ü‚„~fü<ė|<”f„~‚äŦ˙žŽ~Xō<Ž~<ƒ Ÿ{tC.=fC<žt Ÿ{ēCf=XCf=RCfXä Ž{ōC<=fC<‚F<ČÖÍJŗ~)šyü„~fü<ė|<”f„~‚䐂žšyžæ<šy<ü‚„~fü<ė|<”f„~‚äŦ‚ū}<‚ šyæ<šy<ü‚„~fü<ė|<”f„~‚äŦ‚žšyŦæ<šy<ü‚„~fü<ė|<”f„~‚äŦ‚ž‹~Xõ<‹~<ƒ Ÿ{tC.=fC<žt Ÿ{ēCf=XCf=RCfXä Ž{ōC<=fC<…F<ČÖĘJļ~)—yü„~fü<ė|<”f„~‚䐅ž—yžé<—y<ü‚„~fü<ė|<”f„~‚äŦ…û}<… —yé<—y<ü‚„~fü<ė|<”f„~‚äŦ…ž—yŦé<—y<ü‚„~fü<ė|<”f„~‚äŦ…žˆ~Xø<ˆ~<ƒ Ÿ{tC.=fC<žt Ÿ{ēCf=XCf=RCfXä Ž{ōC<=fC<ˆF<ČÖĮJš~)”yü„~fü<ė|<”f„~‚䐈ž”yžė<”y<ü‚„~fü<ė|<”f„~‚äŦˆø}<ˆ ”yė<”y<ü‚„~fü<ė|<”f„~‚äŦˆž”yŦė<”y<ü‚„~fü<ė|<”f„~‚äŦˆž…~Xû<…~<ƒ Ÿ{tC.=fC<žt Ÿ{ēCf=XCf=RCfXä Ž{ōC<=fC<ŅFjbÚbžŖeČŨ<Ŗe Ųēä ûaäC< ûafC<‚ đ`Ö ‹<C< ˛< ‹<C<=‚Cf=‚Cf=‚Cf=‚Cf悃.mŦ"8@šä Īa.ą< Īa<C<î‚4z rĻbÖäŦŦ'=;=YšbXéfĖc<Ë~Jé‚f…Ą:$i¯c‚ é{fCfˆ!ä—bféŦƒ=%a%Z=N8@°š=?6KMW ˜_#Cfƒ!ŦœbžäŦ'‚OJ> Â_ŦCf=ōCf‚!ē(t™]ē<fæ}ä ™ JÄtČŧ .čr<˙/Ķ>:>vfÜ </ŖsäJoff*¨k<J;g~ē ÅÖ ¤ ‚ÄtČŧ f0Ũwfë~$ė|ē”f Ž~fō< Â<ĒkJ Öfžnf Âfžn<ė|<”f –~fC<§f –~<C<vŦ ēÖÆ}. ē.¯å< ›wäŪ*Ā&/Üzf*Ôē/Ŧ~ē*Ô</Ŧ~. Ĩ./Ūl0ŦJ ˇ~JC<=fC<§Öė|ē”f Ž~fō< Â<ĒkJ Öfžnf Âfžn<ė|<”f*Ô</ízfŋÖ*„~ō/Ŋ~ē*Ã</Ŋ~.i0Ņ  }ÖC<0ŧ< }<C</ë~X(X”<ė|‚”<˙|ēM:€Č€}f€<ė|f”f€}Č/IŦ Œēä/õl< Ė‚Cf*ÛX´Ö/ęyēe=*â<´Ö Ž{XCf=tCf/ķ~ä Âē/ž~< Ęä/ļ~< Ę<C</ô~Č´ Č •ttCfÃ#‚=˛\ŦÖ#ÖĒ\.Ö#. “hfōČ Žh<ō. ė\äC<Ķ#‚K=LLLLMxôîęæoōå< Ú\žC<ō$‚åÉ7åÉØ^<<ĩ<ƒulŪyf/¸gēg<Ūy,hŗzXōf]<#Xa' ÔyC=ēC=ēC=ēC=ēC=ēC "¤ē"ÅX$‚ō[ t f Č# ÔyfŦf Ôy<C< ¤*ÅX%… ŅyōC=ēC=ēC=ēC=ēC=ēC #¤ē#ČX%‚*V t fČ# Ņyf¯f Ņy<C< ¤~ČX Éyōēf ÆyēX ÆytēfV'!e!tō ÍyJŗf Íy<C<=ēC=ēC=ēC=ēC=ēCõēĮ#×eX,J!e!ČŦJJ!e!ČJ!e! Čyȸf Čy<C<=ēC=ēC=ēC=ēC=ēC=ēC=ēC=ēC=ēC=ēC=ēC=ēC­ēēyÆžēy‚Ŗ<#žP‚ĸ~XŪXîy.´Č›|X h,gg) ō)w÷Č Ę.šyžŠföfАö<ã~Jš<Ū‚ėÖąyē’fîf’Xî<Ī‚ąyŦ’fîf’žî<ᐙ~fį  Âyžžf Ây<C<ũē§XWž(fXŦ( KØeÉ ū|‚X —züéf —z<C<=ēC=ēC=ēC=ēC=ēC=ēC=ēC õ~p¯ŗ•h‘#[9i( ŠztC=ēC=ēC=ēC=ēC=ēC ¤ēX ŠzĶöf Šz<C<Ŋ~uģ ūy<C=ēC=ēC=ēC=ēC=ēC ¤ē›X ūyå‚f ūy<C<„æd> ųyäC=ēC=ēC=ēC=ēC=ēC ¤ē X ųyę‡f ųy<C<Đ Ô|ōŦX íyø“f íy<C<=ēC=ēC=ēC=ēC=‚C=‚C=‚CÔĸ éyXC=ēC=ēC=ēC=ēC=ēC ¤ē°X éyĶ—f éy<C<ƒ† *Ą|ō*ßX,‚Xž ? f XJXXX ēyfÆf ēy<C<=ēC=ēC=ēC=ēC=ēC=‚C=‚C “ô|Õ<7fô|<zfPÕ<Ĩf„ī~X‘ Ûg‚žt‰<÷l<‰  Îj ˛f Îj<Ö Ž~fō. Â<žn Âfžn< Ž~ēō< Ž~<´.žnē Âfžn<˛ž˜~ŦļlJĘfļl  Ž~Ŧō. Â<žnÖ Âfžn< Ž~ō< Â<žnž Âfžn< –~C<§f –~<C<š‚Ŋ}f ĮtCXö~tËt ŊJáē  ßh.CfŲ  äĪkfŗŧg;‘3 Ķh C<ęf Ķh<C<=‚Cf“‚~f Ą}Jˇ.L, Īh ą< Īh<C<=‚Cf“‚ų}f Š}Jģ.K, Ėh ´< Ėh<C<=‚Cfõ‚)‚  Čh  ¸<  Čh< C<=‚Cf÷‚0 ÆhJē< Æh<C<=‚Cfø‚6 Åh ģ< Åh<C<=‚Cfų‚ ŧh Ä< đ{ ÔlēŦ<Ôl<C<€‚bsyb šh¨~<ĻČ ˛hōĪĻh:/ļ<'Ë.;;==ĩ< ĮtCXö~žË< ŊJ ŋēCfŸäŠ<öztŖX’ ųwÖ‡< ųw<C<Éä¸w ČJ¸wfČ<¸w<X¸äČ~fõ~<  ĮtCXö~Ŧː ŊJģē‘<Wä).vXÜ{f¤<!Û{tĨfÛ{Ļ<Ú{fĻ<ë|3 §{X‚ įxC<=<C<É  ôwXCf=<Cf=tCfÔJõJ×$<>kōået”Xė~f”./æzȉ t °tēCŦž‚؇f–††¯ …bC‚%ŦåÉ@åÉūw<=¨kfØ ¨k</ą‚Ī~<Ø<Šk<°J§fŲlP ŦŧiäŦm÷{Ŧūž†cŦ ĸJŪ~< ĸ<´.ĒkJ ÖfĒkÖíCáÖžy‚ÂXžy<ŋŦĸnäl<l<°z<Åfģh<Å.˛cäÎ<Æf ė|X”< Ž~fō< Â<ĒkJ Öfžnf Âfžn<ė|<”f Ž~fō< Â<ĒkJ ÖfÔlfŦ<Ôl<C<Ū.’žn<â<žn<âfžnr‚áx. Ž{‚Ō< Ž{<C<´ ‚91Y ‰tCfŽ ‚áxō Ēäh:Ø- ‚t<ū < Ås<=fC<šJŊ}f ĮfCXö~tËt ŊJž ēĮ ‚t.Cf× Č=  č|žu‘‚ī|f‘<đ|<J‘uÖúŦ†}<ú }ē˙X}<X SēC<ę SfC<ę‚ Č~Č ‹ēCf=‚Cf=‚Cf=‚Cf=‚Cfé‚öf”‘vXī < Øv š  Į<‚~fū<‚~<C<ׂ=;KĪy)ą,tēÛyĨ,×| īyÖÍJČ'ņČƒÍy<ŗÍy< {ōC<=fC<=ēCf =ē Cf =ē Cf˜ ē@. åwtCXĖ ņw?Cf=fCf=ōCfāJ< Ãb<Áf ŋbfÁ< ŋb.Á< Ši.Ųt §ifŲ2‘ÁÖøJÃztBä”<Ē}fÖ<ė|<”<đ}f’‚î<<‚}.ū<ė|f”<ė|ē”<Š}fDŽ í‚“< í<C<ē Čs< <ƒK Ÿ{ŦCXž‚˛z5 íÖCfōäˆ#`xfŪ žs*â < žs<C<  ‚ sēCfí‚אšv¸ ‚×> ēLguČLzž ōxō—ō K)fƒuēŒ~‚Î fw’æ#jųh’į9?+?”sXņ ČpŦttōãō Kf“tē…~‚Õ ēZ0ƒ"Ų+’vW=Į1ŧ:hhhšrč pŦ ōî ō<ža<ÄfĻųČŒ畉°82l#CŨ_J‡ž fĒcÛf’:>­eg”L,>=-=c ō{X¤iž Ü–ž[9i f% Ų{ģÆ. š|‚ŠČčûbÜ}.āt }‚¤tˆž:>d5ųcä ŌfĐh °4 Į}ÖšČ –~<C<=fC<= Cf=äCfÔ<ÂfÁ}äŋäĮ}  tŦäÉ} •˛‚Ô}Já¯Č Ž~ō< Â<ÔlžŦ<Ôl<C<=<Cf0Š KKfŧ0€™g;Ö=I=æX“}<ī|X‘<ķ}fēđ}<<“~‚ î~<’<„ yäb< ûĢzžÕ<Ģz<C<œ‚u{.øō ƒ}<ũ<!‰}< zf“ō hžf h.X ’Cfōā™g;Ö=  f´<Ėl<´.ĒkJ ÖfŅlf ¯<ŅlĶÛy.Ĩ.Ŧ€$Á ĒÉ<ˇ|Ö'í~<-//’.3uČڐ*§~.ŲŦ§~fŲ<¨~ŦØŦ¨~fØ<¨~Ŧœht‚+(ß!-.=<ļ{fĘ.¯­uÃĀ(Į >Vž..XÉxfˇfÉx<Öˇ‚ <Ûw<Ŋ} ĮōCfö~‚Ë‚ ŊJá ē ãÛwäŊ} ĮōCfö~ ËČ ŊJ@*Į <>Vt../šÉx*ˇ./ +é ģz<ÉX”Ŧėzf[Öb2X”uYßgt!.tÖN|ņt…ũ0,Č<ģI/.ļ{(Ęfļ{<Ę%¯× ČytC<=fC<=JCfÜJ, ĖyēC<=fC<=ēCf`-Č<ģI/.ļ{(Ęfļ{<Ę%¯× ČytC<=fC<=JCfÜJ< ĖyēC<=fC<=ēCf .ˇ<Áŋx<ÁfŋxäÁŦžyâ,ŋx.Áž`/ˇ<ÁÖŋx ÁŦžyâ0/00­<Ū~Ö­KģŦ‘I/.ļ{(Ęfļ{<Ę%¯× ČytC<=fC<=JCfÜJbēā~ČĶ4 ĖyēC<=fC<=ēCfĀ1ģ ŧ fÄu<Ö= ģ XÅuJ ģ <ŠuXÎ$Į{3šēĮ{<šŦ ÕyŦ¯< ‡}<ų<Â{žēÂ{< Ž~ō< Â<žnē Âfžn< Ž~ō< Â<ürŦh‚ đy<Cf΂Õuō ŨyÖCf=ōCfå °3 g; •yÖėf į oē ûŦސ Ō~<Ž  ũxC<Āf ũx<C<=JCfĸJ ›yōCfĸ ›ytC<=fC<=ēCf 4û:fF<Ų9?7XI"1. ũxŦC<Āf ũx<C<=tCf’X€<‘ Ēy‚Cf="C<=fC<=äCf°5¤ C<=fC<PE“ h:Ö>}X_"!_< 㠞Šuēö fŠu<” ė~<”< ⠞Šuēö fŠu<Žž Ō~<Ž  ũxC<Āf ũx<C<=JCf=JCf=JCf=JCf=JCf¨‚ •y<Cf=Cf= Cf= Cf= Cf¨  •yŦC<=fC<=ēCf=ēCf=ēCf=ēCf=ēCf=>C<=fC<ĐG‰ h:Ö?e*žU"+U< í žŠuēö fŠu<А ö~<Š< ė žŠuēö fŠu<Žž Ō~<Ž  ũxC<Āf ũx<C<=JCf=JCf=JCf=JCf=JCfž‚ Ÿy Cf=Cf= Cf= Cf= Cfž  ŸyŦC<=fC<=ēCf=ēCf=ēCf=ēCf=ēCf=>C<=fC<PJß< čē#—C é~f#—fץ~#ž"“}f#ífÛ}f"¸fČŦ"¸<ČÖ"¸ŦČf"¸<‘} °fĐ~f °Čˆfãȝ}<ã.ãy. Äēŧ~< ø.ˆkJ øŦÔlfŦ<Ôl<C<ō~‚#0 ŦÖĖ~f ÍōCfō›}<$°L¤f% ‰zž ftŦ Č) Û7Û <šX ˜{#—X é~f#—,Ą~ä#ߐĄ~.#ž$Û}ä#Ĩf"“}ČȞ"¸<Č("¸Ȟ"¸Čf"¸f‘}ē °fĐ~f¸ČČ|  °fˆ< ø}fˆf$ˇ}.Éf!Ū<ä|<!œČä|Ŧ ëX#—( é~f#—‚ é~f#—ž‘Ą~ä#ßfĄ~.#žōÛ}ä#ĨfÛ}t"¸<Ȑ"¸ČČ"¸Ȟ"¸f‘}ē °fĐ~f °.ˆ$ˇ}Éf!Ū<ä|<!œČä|Ŧæfšyfæ -sÚy üē„~fü<ė|<”„~‚äÂžÚyžĻfÚy.ü‚„~fü<ė|<”„~‚äÂž~< ÚytĻfÚy.ü‚„~fü<ė|<”„~‚äÃžŲyž§fŲy.ü‚„~fü<ė|<”„~‚äÄžfŧ~ Äfŧ~  Ž{‚Ōf Ž{<C<=ēCÅē‹|- íäC"Vē#õē­zē Ŧf#§ ĸzž# Ŧ Ŧä#Ô~f ŦtĄ< ß}fĄ<‹|' íäC"Vē#õēĸzē ˇf#§ ĸzž# fuf# ō Ŧä#Ô~f Ŧt°<ņ{<<gŦg<< ŗzäŋt fwf fwX֐•x ä Ž{.C=.CĖ.#ĨxX ŦČë8›}G#Î|/ ŦŦ†04 W¤k ‰zJ ‚tä ‚+ē ōšä ˜{#—X é~f#—.Ą~ä#ß<Ą~.#ž,Û}ä#Ĩf"“}ČȞ"¸<Č("¸Ȟ"¸Čf"¸f‘}ē °fĐ~f¸ČČ|f °fˆ< ø}fˆf$ˇ}Öf!•<ë|<!•të|Ŧ äX#—, é~f#—J é~f#—ž‘Ą~ä#ßfĄ~.#ž#Û}ä#ĨfÛ}t"¸<Ȑ"¸ČČ"¸Čō"¸f‘}f °fĐ~f °.ˆ< ø}fˆf$ˇ}<f!•<ë|<!•të|ŦßfĄyfß -sÚy<üē„~fü<ė|<”„~‚äÂžÚyžĻfÚy.ü‚„~fü<ė|<”„~‚äÂž~< ÚytĻfÚy.ü‚„~fü<ė|<”„~‚äÃžŲyž§fŲy.ü‚„~fü<ė|<”„~‚äÄžfŧ~ Äfŧ~  Ž{‚Ōf Ž{<C<=ēCÅē‹|- íäC"Vē#õē Ų{ē#§ ĸzž# Ŧ ŦJ#Ô~f ŦtĄ< ß}fĄ<‹|' íäC"Vē#õē­zē Ŧf#§ ĸzž# Ŧ Ŧä#Ô~f Ŧt°<ņ{<<gČŦg<< ûyä t´p ä Ž{.C=.CĖ.#ĨxX ŦČë8›}G#Î|/ ŦŦ†04ĐaŠ<=­Kžģ‘I/.ļ{+Ęfļ{<Ę&¯× ČytC<=fC<=JCfÜJÄ~ēZ~Ķ8 ĖyÖC<=fC<= Cf`cÅ@8@ ¸~ēÍJ€%€f€<€<„Öü<„<Ëf‘  .sÖ  X¤ä Ü<¤J Ü<‚~fC<ģf‚~<C<=JCfĄJūŦĪ|ž´‚<˙{X ÖyēäÍ‚ĻŦ)Õ}<Ģ<)Õ}. üJ)û|Ŧ˛Ŧa‡)Î}<˛.)Î}< tüJ)û|Ŧŋ<Ũ}Ŧ Į‚CXö~J Į‚CfŖ Ö=ū{‚Ÿz+ ŊtŸēg;0H‚ V.Cf¤ ēū{ē˜zX ƒžCX=tCX)Ū~ wē Jw< X)kt Ü<C‚Žō’ î}ž˜Ö §XCX)Ū~ wē Jw< X)kt­X’ …~ž,ÖÍ)Đ}ž°X’æ}žwž Jw< X)hē°XhŠ ƒK Ÿ{fCfž‚ŧ0phÅ ž ¸~‚Íēj:ī.u–~J:.ąÖÍtĪ|tą.Ī|.ĩ f=ū{‚ ÖyX‚ķ‚1‘HKŸJo.ļ~< ŊJŸē0I=ƒÖč{tšCū{ ˜zfjÅ † ¸~‚͐hhíū{.˜zJč‚˜z. kÅ ž ¸~‚Íēj:ī.u–~J:.ąÖÍtĪ|tą.Ī|.ĩ f=ū{‚ ÖyX‚ķ‚1‘HKŸJo.ļ~< ŊJŸē0I=ƒÖč{tšCū{ ˜zf0mÅ ž ¸~‚Íēj:ī.u–~J:.ąÖÍtĪ|tą.Ī|.ĩ f=ū{‚ ÖyX‚ķ‚1‘HKŸJo.ļ~< ŊJŸē0I=ƒÖč{tšCū{ ˜zfĐnŠ KKfŧ0 oõ< ú~†f ˇČCf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf $¤‚$â}X'‚ē I  ‚ Šuäö fŠu<ôzŦ Œ<ôz< ‚äŠuēö fŠu<ö žŠu<ö Šužö fŠu<ôzē ˇ‚É< ˇ<C<=ōCf=fCf=Cf=.Cf= Cf=Cf ¤â}X ˇÖC<=fC<=ēCf=ēCf=ēCf=ēCf=ēCf =ē Cf=8C<=fC<=@C<=fC< rõōĐrã¤äÜf¤JÜŦsã¤ōÜf¤JÜŦ@sŦ[ä%f[J%ŦpsŦ[ō%f[J%Ŧ°sÅ ž ¸~‚Íēj:ī.u–~J:.ąÖÍtĪ|tą.Ī|.ĩ f=ū{‚ ÖyX‚ķ‚1‘HKŸJo.ļ~< ŊJŸē0I=ƒÖč{tšCū{ ˜zfPuōg;×ĸfņēē‚} ū<‚} ū<Ũ}˜ēčz<˜Ŧ,€x<€f,€x‚‚uW€‚톧œ{fäf,€x €tt&|Î ų|X&‡f ų| #—@ é~f#—<0Ą~#ž3"“}J#ífÛ}t"¸fČ("¸<Č<"¸t‘}ē¸ōČ|  °<Đ~f °fˆ< ø}fˆf¯}.Ņ<¯}<ū mÖ<m<‹|t íäC"Vē#õēĸzē#Ūfĸzž# fuf# ō ŦX&ŋž;=#•z+ ŦČ&ž%Č}Ŧ& €īĸX ŪyJĸJ âyJž< äy< ęt œmē ät  mē āt ¤mērž ęJ ˜mŦ÷t Ŧ{fÔt Ŧ{Ôä Ŧ{nää  ÅÖ Ŧmēãt ņ < °mēßt ņ < ´mēuaŦ pīĸX âyfž. ây.ž< äy< ¯"¯<ŅnX¯<ŅnX¯< ĸmē ¯ž¯.¯nX ŅÖ ĨmJ"fčō ŅÖ›rJ Ŧ{čJ ŅÖ›r‚ ’{‚ ŅÖ›r‚ –{\ä Œt¯.›rX ļ|<¯.¯nX ŅÖ ÁmJ X°‚˙ f›rJ”|X Ņ ¯nž Ņ  ĸmž  `ƒīĸX ŪyJĸ‚ âyJž< äy<-ņ<Ķ.-­aŦĶ<-­aŦĶ<-­aŦĶ< ŧ`Ö.äv-ĖēĶ.ĩet-ø{<Ķ.ĩet-ø{<Ķ. Û`ōBÔČ Ŧ{<Ô. Ŧ{<Ôō ’{fî. –{f%đ„ú ‡Nƒ%.V<%*..Vf%*. Üf%¤~f Õ.‡<­. ŋX%B‚ßČ%ŽČfmX< 8ž t<°…˜&=;=& Š\J˙#< \Č˙#<J­yj8 æ[.CfĒ$ē;Ö°ZKÖ›‡™ˆzžŠxž ‚vž ‚už ‚sž‚rž‚qž‚pž‚ož‚nž‚mž‚kž‚iž‚gž Ém‚āJą Ü[Cfü‚āJ  mJāJ  mJāJL€ á[ŦCf‰˜&=$ Š\t˙#< \ē˙#<J‘Oj8 æ[.CfĒ$ē;Ö°ZK›‡™ˆzžŠxž ‚vž ‚už ‚sž‚rž‚qž‚pž‚ož‚nž‚mž‚kž‚iž‚gž Ém‚āJą Ü[Cfü‚āJ  mJāJ  mJāJL€ á[ŦCfpø>Ŧ,€x<€f,€x‚‚uW€‚톧œ{fäf,€x €ttPŽã Z ĮäCXö~‚ŧ°ŽÅ@ ¸~ ĖJ ´~<Í.h:>æË<ĩ~<Ëfĩ~<Ë</  <t<  <sž  J‚~Öū<‚~<C<Ą‚ū Ī|ž´‚<˙{X Öyēäķ‚)Õ}<Ģ<)Õ}. ž)w˛Ŧa)Ķ}f˛.)Î}<˛.)Î}< f)wŋ<Ũ}Ŧ ĮtCXŖ <=ū{JŸzČ ŊtŸēg-/=…žū{‚˜zX)¤ž0)SŦ Ü‚Cf ’äüf’ū}ž3 Ŋt˜ē)Č}X°X ¯ēC‚)Ū~X0)SŦ°ēđ‘ę&=¯91.qž’ ¸]<‚~Öū<‚~<C<Ėēâ‚Ču< ĮēCXö~Ŧ’&X§d.Ųē"š`Ö īyŦ•X –{fCfˆ%Ŧ˛Ģ`Öւם`ē {%CfĀ“ę&=¯91.qž’ ¸] ‚~äū<‚~<C<Ėēâ‚Ču<Ö.Ēw< Į‚CXö~Ŧš ōŲ<§d.ؐ­š`Ö īy‚•X –{fCfˆ%Ŧ4Ģ`Öւם`ē {%Cfp•ã Z ĮäCfö~‚0Еë >Ÿul<l<<ügäĐuf° <ĩyŦĖ{´J›|Ŧä’-;>)ē ō˙J)ø|ē÷Ŧ´ <Ėv<´ <t: đtōw)_< ē)hXĶXf ŊJ… ē„)Ųt0)SŦ ā—Å@b@ ¸~ēĐJũ~$ƒfũ~fƒ<‚Ë<ĩ~<Ëf´ž Ųf§< ؐsž´f Ųf§< Ųž§< Ų<‚~fū<‚~<C<Ą‚ū Ī|ō´‚<˙{X ÖyŦäĐ‚Ŗä)Õ}<Ģ<)Õ}. ž˙J)ø|ē˛Ŧa)Ķ}f˛.)Î}<˛.)Î}< f˙J)ø|ēŋ<Ũ}Ŧ ĮtCfŖ <=ū{JŸzČ ŊtĄē:h:/=…tū{‚˜zX)¤ž0)SŦ Ü‚CfâäŦf’ū}ž3 Ŋt˜ē)Č}X°X ¯ēC)Ū~X0)SŦ°ē›Ĩ<ƒwf– Ŧ_8Ö>ū‚‚Hō*X?9id äq‚œ< äq<C<Øō åq CfØōÚ?9iâ āq‚ < āq<C<Üōw ” æq‚CfÜōwō0Ĩ<ƒwf– Ŧ_8Ö>ū‚‚Hō*X?9id äq‚œ< äq<C<Øō X ÜqäCfØōÚ?9iâ āq‚ < āq<C<Üō]rä” æq‚CfÜōwōОĨ<ƒwf– Ŧ_8Ö>ū‚‚Hō*X?9id äq‚œ< äq<C<Øō åq CfØōÚ?9iâ āq‚ < āq<C<Üōw ” æq‚CfÜōwōp Ĩ<ƒwf– Ŧ_8Ö>ū‚‚Hō*X?9id äq‚œ< äq<C<Øō X ÜqäCfØōÚ?9iâ āq‚ < āq<C<Üō]rä” æq‚CfÜōwō)ĸÃ_ZNK7testing8internal24HasNewFatalFailureHelper21has_new_fatal_failureEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE2atEjPrintAsStringLiteralTotesting_internalRawType_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmiEi_ZNSt11char_traitsIcE4copyEPcPKcj_ZNSt6vectorIPcSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6__S_oct_ZN7testing8TestCase11ClearResultEv_TypePrintStringTo__copy_move_backward_ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_E_ZN7testing8internal24HasNewFatalFailureHelperD0Ev_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKw_ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolder7pointerEv_ZNK7testing8internal13FloatingPointIfE8sign_bitEv_ZN7testing8TestCase16RunSetUpTestCaseEvstrtof_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKw__alloc_traits >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_S_keyEPKSt13_Rb_tree_nodeIS1_E_ZN7testing32ScopedFakeTestPartResultReporter4InitEvstrtoloperator<< _ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE10_S_on_swapERS4_S6__ZN7testing8internal13DeathTestImpl12set_write_fdEi_ZN7testing8TestInfoaSERKS0___haystackIsNotSubstringconstruct >ImplicitCast__ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE2atEjgtest_arline_number__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE2atEj_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEptEvCheckedDowncastToActualType >::ValueHolder, testing::internal::ThreadLocalValueHolderBase>_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE7reserveEj__niter_base_ZNKSt6vectorIiSaIiEE8capacityEvHandleExceptionsInMethodIfSupported_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEi_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5frontEv__copy_move_backward_a_ZN7testing8internal27PrettyUnitTestResultPrinter11OnTestStartERKNS_8TestInfoE_ZN7testing18TestEventListeners22SetDefaultXmlGeneratorEPNS_17TestEventListenerEHandleSehExceptionsInMethodIfSupportedMSG_EOR_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_rightmostEv_ZN7testing8internal12UnitTestImpl21set_current_test_infoEPNS_8TestInfoE_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmIEitype__ZNKSs5rfindERKSsj__uninit_copy<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*>si_codesockfd__ZNKSt3setISsSt4lessISsESaISsEE11upper_boundERKSs_ZNKSt9_IdentityISsEclERKSsmbsinit_ZNKSt6vectorIiSaIiEE8max_sizeEv~ExecDeathTest_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EEixEj__numeric_traits_integer_ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestEoperator<< last_errorUniversalPrint >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt17_Rb_tree_iteratorISsEuninitialized_copybreak_on_failure__ZNK7testing8internal10scoped_ptrIKSsEdeEv_ZNSbIwSt11char_traitsIwESaIwEEpLEPKwswap*>expected_expressiondata___rhsactual_ZNKSt17_Rb_tree_iteratorIPKcEdeEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4rendEv_ZNK7testing8internal8FilePath21FileOrDirectoryExistsEv11__mbstate_tIsPathSeparator_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE13_M_deallocateEPS2_j_ZN7testing8internal17StreamingListener12SocketWriterD0Ev_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE15_M_erase_at_endEPS1_si_errno_ZN7testing8internal12UnitTestImpl21set_current_test_caseEPNS_8TestCaseE_ZNK7testing8internal10scoped_ptrIKSsE3getEv_ZN7testing8internal13DeathTestImpl11set_spawnedEbpair_ZN7testing19TestPartResultArrayaSERKS0___normal_iterator, std::allocator > >vector >_ZNKSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE13get_allocatorEvcopy_backward*, std::basic_string*>_ZNSt6vectorISsSaISsEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EES5_should_run__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_insert_equalERKS1_FloatingPointLE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_S_keyEPKSt13_Rb_tree_nodeISsEfor_each<__gnu_cxx::__normal_iterator >, void (*)(testing::Environment*)>_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_erase_auxESt23_Rb_tree_const_iteratorIS1_ES9_StrError_Destroy_ZNKSbIwSt11char_traitsIwESaIwEE13get_allocatorEv_M_insert_lower_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8pop_backEv~StreamingListeneroperator- >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSsTEST_ENCOUNTERED_RETURN_STATEMENT_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEE4baseEv_ZN7testing4Test14RecordPropertyERKSsiiterator_traits<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE10_S_on_swapERS4_S6__ZNSt11char_traitsIwE11eq_int_typeERKjS2___cxa_begin_catchsrc_texterror_message_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5beginEvoperator delete_ZNKSt12_Vector_baseIPcSaIS0_EE13get_allocatorEv_ZNSt6vectorIPcSaIS0_EE4dataEv_Allocator_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE2atEjoriginal_reporter__ZN9__gnu_cxx13new_allocatorISsE10deallocateEPSsj_ZN7testing8internal23kTestTypeIdInGoogleTestE_ZN9__gnu_cxx13new_allocatorIPKcE7destroyEPS2_operator<< , std::allocator >_ZN7testing8TestCaseaSERKS0_AssertHeld_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4dataEv_ZNK9__gnu_cxx17__normal_iteratorIPcSsE4baseEv_ZN7testing8internal17TestEventRepeaterD2Ev_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_S_leftEPKSt18_Rb_tree_node_basereverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >TestPartResultTypeToString_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE8max_sizeERKS4__ZN7testing8UnitTest14AddEnvironmentEPNS_11EnvironmentE_ZNSs7reserveEj_ZNSt12_Vector_baseIPcSaIS0_EE17_M_create_storageEj_Iter_equals_val, std::allocator > >InitGoogleTestRETURNED_ZNKSt12_Vector_baseIiSaIiEE13get_allocatorEvregistered_testsoperator booluser_msg_string_ZN7testing8internal13ExecDeathTestD0Ev__ino_toriginal_working_dir_iterator_traits, std::allocator >*>_ZN7testing8internal12UnitTestImpl31GetGlobalTestPartResultReporterEv_ZNK7testing8internal12UnitTestImpl21successful_test_countEv_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEplEinormalized_seed_ZN7testing14TestPartResult14ExtractSummaryEPKcStackLowerThanAddress_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmiEitest_properties_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7addressERS3__CharToperator<< _ZN7testing14ExitedWithCodeC2Ei_ZN7testing8internal12UnitTestImpl34InitDeathTestSubprocessControlInfoEvignoring_casePrintTowcstold_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE17_M_create_storageEj_ZNSt10_Iter_baseIN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS4_SaIS4_EEEELb0EE7_S_baseES9__ZN9__gnu_cxx14__alloc_traitsISaIiEE17_S_select_on_copyERKS1_copy_backward_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwj_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjj_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE8max_sizeERKS4__ZN9__gnu_cxx17__normal_iteratorIPKcSsEmIEiClearTestResult_ZNKSs11_M_disjunctEPKc_vptr.UnitTestdestinternal_run_death_test_flag__ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv_M_destroy_noderegoff_tparameter_ZNSt6vectorIPcSaIS0_EE8pop_backEv_ZNK7testing8internal12UnitTestImpl11random_seedEv_ZNK7testing8internal13DeathTestImpl6statusEvlast_sep_ZN7testing8internal16UniversalPrinterISsE5PrintERKSsPSoad_hoc_test_result__ZN7testing8internal15CodePointToUtf8Ejunicode_code_pointcomma__distanceFloatingPoint_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjFormatForComparisonFailureMessage_ZNK7testing14TestPartResult14fatally_failedEv_Category~TestFactoryBasekUniversalFilter__builtin_fwrite_ZN7testing8internal13GetTestTypeIdEv_ZNSs4_Rep7_M_grabERKSaIcES2__M_copyreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___cxa_throw_ZN9__gnu_cxx13new_allocatorIwE8allocateEjPKv_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_summary_rdstatekStackTraceDepthFlagfreadTestPartResultArraythread_count__copy_move_b*, std::basic_string*>operator!= >_S_black_ZNSo9_M_insertIPKvEERSoT___cxa_guard_abort_ZN7testing8internal12UnitTestImpl12ShuffleTestsEv_sigfaultGTEST_SHARD_INDEXMSG_CONFIRM__is_normal_iterator_ZNSt6vectorIiSaIiEEixEjTearDownTestCaseFunc__miter_basekThresholdint_n_cs_precedesbinary_function, std::allocator >, std::basic_string, std::allocator >, bool>_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc_M_key_compare~ForkingDeathTest_ZNKSt6vectorISsSaISsEE6rbeginEvreverse_iterator<__gnu_cxx::__normal_iterator > > >kReservedTestSuiteAttributes_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS1_E_ZN7testing7MessageC2Ev_ZNKSs13find_first_ofEcj_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmmEisi_addr_lsb_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_range_checkEj_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmIEi_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_equal_ESt23_Rb_tree_const_iteratorIS1_ERKS1__ZNSt6vectorIiSaIiEE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmmEv_Valcurrent_test_info_operator<< GTEST_ERROR_ZN7testing8internal29ParameterizedTestCaseInfoBaseaSERKS1_kColorEncodedHelpMessage_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_jj_Key_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNSbIwSt11char_traitsIwESaIwEE4_Rep7_M_grabERKS1_S5_~SingleFailureChecker_ZNK7testing8UnitTest22test_case_to_run_countEvpop_backrend_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjsuccessful_test_count_ZNKSs5rfindEPKcjj_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEpLEioutput_format_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderaSERKS5_rebind~ScopedPrematureExitFileoperator<< _ZN7testing8internal2RE9FullMatchEPKcRKS1_MSG_RSTOnTestPartResult_ZN7testing4Test15HasFatalFailureEv__cxa_atexit_ZN7testing8internal17PrintWideStringToERKSbIwSt11char_traitsIwESaIwEEPSocur_addr_ZN7testing8internal12UnitTestImpl27parameterized_test_registryEv_ZNKSs5beginEv_ZNK7testing8internal13DeathTestImpl7outcomeEv__cxa_guard_acquirefind_first_of__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZN7testing8internal27PrettyUnitTestResultPrinterD2EvGetTestPartResult_ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_jjoutput_GetPrefixUntilComma_ZN7testing8internal24XmlUnitTestResultPrinter24IsNormalizableWhitespaceEc_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6rbeginEvCOLOR_GREENoperator<< _ZN7testing8internal16ForkingDeathTestC2EPKcPKNS0_2REEline_num_S_right_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE8allocateEjPKvMakeFrom_S_empty_rep_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS__Znwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEpLEi__is_null_pointermethod_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc_ZNK9__gnu_cxx13new_allocatorIPcE7addressERKS1__ZNKSs7compareEjjRKSsset_current_test_case_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE13_M_deallocateEPS2_j_ZN7testing7MessagelsEPw__iterator_category__is_normal_iterator_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2_iterator_traitsUniversalPrintCharArray_ZN9__gnu_cxx13new_allocatorIPcE9constructEPS1_RKS1___alloc_traits >operator!= >__destroy__elems_beforevalue_compare_ZNSt11char_traitsIwE2eqERKwS2__ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE8capacityEv9siginfo_t~TestEventRepeater_ZN7testing10TestResultaSERKS0__ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4dataEv_ZNK7testing8TestCase17test_to_run_countEvseekdirGetCurrentExecutableNametest_case_name__Destroy*, std::basic_string >operator- >_vptr.UnitTestImpl_ZN9__gnu_cxx17__normal_iteratorIPKcSsEpLEi_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEvexpression_textOnTestCaseEndbytes_readtm_hour_ZNSt6vectorISsSaISsEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EESignAndMagnitudeToBiasedoperator<< __trip_countreportable_test_count_M_insert_ZNSt3setISsSt4lessISsESaISsEE4findERKSs_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_jw_ZNK7testing8internal29ParameterizedTestCaseInfoBase17GetTestCaseTypeIdEvCaptureStdout_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3___addressof >_ZNKSt3setISsSt4lessISsESaISsEE4findERKSsunknown fileExecDeathTestArgs_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE8max_sizeEv__gthread_active_ptrkExponentBitCountstatus_ok_ZNK7testing8internal13FloatingPointIdE13exponent_bitsEv_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwj_ZNKSt6vectorIPcSaIS0_EE5frontEv_S_out_ZN7testing8internal24XmlUnitTestResultPrinter18EscapeXmlAttributeERKSs_Destroy_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE9constructEPS3_RKS3__ZN7testing8internal12UnitTestImpl11RunAllTestsEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4swapERS4__ZN7testing8internal9DeathTest4WaitEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmmEi_HasBase_ZN7testing18TestEventListenersD2Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE9push_backERKS2__vptr.AbstractSocketWriter_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmmEv_ZNK7testing8internal8FilePath5c_strEvdo_widen_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4rendEv_ZN7testing8internal12UnitTestImpl31SetGlobalTestPartResultReporterEPNS_31TestPartResultReporterInterfaceE_ZNK7testing19TestPartResultArray4sizeEv_ZNK7testing8TestCase6PassedEvPopGTestTracesign_bitrebind_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE13_M_deallocateEPS2_j_ZNKSt6vectorISsSaISsEE4rendEv_ZNK7testing15AssertionResult7messageEv_ZNK7testing8internal17TestEventRepeater18forwarding_enabledEva_value_paramoperator!__iterator_categoryfputcoperator&operator*operator+iterator_traitsoperator-_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE11_M_allocateEj_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_operator<operator=operator>FormatForComparison_ZNSs9_M_mutateEjjj_ZN7testing17TestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZNKSt3setISsSt4lessISsESaISsEE5beginEv_ZN7testing8internal6Random6ReseedEj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE17_M_insert_unique_ESt23_Rb_tree_const_iteratorIS1_ERKS1_rebindSOCK_RAW_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal7PrintToEhPSo_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcEis_selectedsystemwcsrtombs_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EEixEj__valFailFromInternalError_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS1_ESA_RKS1__timer_ZN7testing10TestResult17AddTestPartResultERKNS_14TestPartResultEquot_ZNSt6vectorISsSaISsEE6rbeginEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE6rbeginEvthrow_on_failure_operator|operator~atof_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmIEiatoiatol_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6rbeginEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE3endEvPrintToStringconstruct_ZN7testing4Test13SetUpTestCaseEv_ZN7testing8internal17TestEventRepeateraSERKS1__ZNSt3setISsSt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsEwcstombs_Rb_tree_iterator_ZN7testing8internal26ThreadLocalValueHolderBaseaSERKS1__Znaj_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEpLEi__k2_M_eraseCreateDirectoriesRecursively_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EES9_exit_status_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EEfull_pattern_S_hex_sigpoll_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_M_endEvint_p_sep_by_spacekMaxRangeGetStringFunctor_ZN7testing8internal12AssertHelper16AssertHelperDataaSERKS2__Rb_tree_const_iterator, std::allocator > >_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE15_M_erase_at_endEPS2_IsAbsolutePathfailed_test_case_count_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5frontEv_ZNSs4_Rep10_M_disposeERKSaIcEfputwc_Iterator_Iter_base_M_clone_nodeParseStringFlagFilterMatchesTestfputwsMakeConnection~basic_stringCmpHelperSTRCASEEQiterator_traits<__gnu_cxx::__normal_iterator > > >_ZNK7testing8TestInfo6resultEv_ZNKSs12find_last_ofERKSsj_ZN7testing8UnitTestC2Ev_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorIiSaIiEEaSERKS1_fcntl_ZNK7testing8internal17TestPropertyKeyIsclERKNS_12TestPropertyE~DeathTestImpl_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderaSERKS7__ZN7testing8internal13FloatingPointIfE8InfinityEv_S_ios_openmode_end_ZN7testing8TestCaseD2EvGetOutputFormat_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcj_ZN7testing8internal18SetInjectableArgvsEPKSt6vectorISsSaISsEErandom_ZN9__gnu_cxx14__alloc_traitsISaISsEE8max_sizeERKS1__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11upper_boundERKSs_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE2atEjstrtold_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEdeEvoperator<< suffix_len_ZNSt6vectorIPcSaIS0_EE5frontEvportset_up_tc__maskTestPassed_M_destroyMSG_MOREnew_holder_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE10_S_on_swapERS3_S5__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE2atEj_M_fill_assign_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE4findERKS1_operator<< operator<< _ZNKSs7_M_iendEv_ZN7testing8internal11ScopedTraceD2Evresume_pos_ZNK7testing8internal12UnitTestImpl18ad_hoc_test_resultEvtm_yday_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_fill_assignEjRKS2__ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_putwcharftell__miter_base<__gnu_cxx::__normal_iterator > >SOCK_STREAM_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_istream_result_to__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE7reserveEj_ZN7testing8internal12AssertHelperaSERKS1_ExecDeathTestSpawnChild__blksize_t_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjj_M_upper_bound_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEixEiPrintCharAndCodeTo_ZN7testing14TestPartResultD2EvAddEnvironment_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_maximumEPKSt18_Rb_tree_node_basepthread_mutex_unlock_ZNKSt6vectorIPcSaIS0_EE3endEvint_curr_symbolset_write_fd~GTestLog_ZN7testing8UnitTest14PushGTestTraceERKNS_8internal9TraceInfoEnum_runnable_tests_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEixEi_ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5beginEv_ZN7testing8internal12AssertHelperD2Ev_ZNK9__gnu_cxx13new_allocatorIcE7addressERKcpthread_key_create_TrivialValueTypesfind_if<__gnu_cxx::__normal_iterator >, testing::internal::TestCaseNameIs>translate_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_wcstoul__is_normal_iteratorsa_data_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_index___mode_t_ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT___cxa_bad_typeid_DestroyFLAGS_gtest_repeat__n1pair, std::_Rb_tree_const_iterator >_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4__ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEpLEi_Destroysrc/gtest-all.cc~basic_stringbufFormatFileLocation_ZNSt6vectorIPcSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EE_M_insert_equalconst_reverse_iteratorwchar_t_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE7destroyERS4_PS3__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6rbeginEv_ZNK7testing7Message9GetStringEv_markers__assignable__copy_move_backwardOnEnvironmentsSetUpStart_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE17_S_select_on_copyERKS5___alloc_traits >_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEaSERKS3_iostatea_write_fd__pad1__pad2__pad3__copy_move_a__pad5a_filesi_overrun_ZNK7testing8internal8FilePath28CreateDirectoriesRecursivelyEvRecordProperty_ZNK7testing8internal13DeathTestImpl7read_fdEv_M_get_Tp_allocatorgetwchar__destroy*>_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_rootEv_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmIEi_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4dataEv_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4rendEv_ZNKSt17_Rb_tree_iteratorIPKcEneERKS2__ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE2atEj_ZN9__gnu_cxx3divExxstdout_is_ttycopy_backward_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEplEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEE4baseEv_ZN7testing8internal24XmlUnitTestResultPrinter17OutputXmlTestInfoEPSoPKcRKNS_8TestInfoE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE9push_backERKS2__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZNK7testing8UnitTest18ad_hoc_test_resultEvtotal_test_case_count_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEplEioperator<< __copy_move_backward_aoperator<< _ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE10deallocateEPS2_jcur_pattern_ZN7testing4TestaSERKS0__ZNSt6vectorIPN7testing8TestInfoESaIS2_EE2atEj_ZN7testing15AssertionResult13AppendMessageERKNS_7MessageEIsSubstringImpl >__copy_move_a2_ZN7testing32ScopedFakeTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultEMSG_DONTWAITiterator_traits_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNSt13_Rb_tree_nodeISsE9_M_valptrEvkElidedFramesMarkerset_read_fdParseInternalRunDeathTestFlagstatus__ZN7testing8internal19TypedTestCasePState25VerifyRegisteredTestNamesEPKciS3__ZNSt6vectorIPcSaIS0_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEjRKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_erase_auxESt23_Rb_tree_const_iteratorISsES7_GetMutableTestCase*DeathTest:*DeathTest/*_ZNKSs16find_last_not_ofEPKcj__osRelease_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEmiEi_IO_write_base__distance_ZNSt3setISsSt4lessISsESaISsEE11upper_boundERKSs_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEptEvUniversalPrinter, std::allocator > >_ZN7testing8TestCase14UnshuffleTestsEvreason_ZN7testing8internal23GetLastErrnoDescriptionEv__miter_base__builtin_memcmp_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6rbeginEvfront_ZN7testing8internal7PrintToEPKwPSowmemsetsetfillkTestcase_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EEixEj__copy_move_backward_a2FormatCompilerIndependentFileLocationpush_backtotal_shards_envsubstr_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE6rbeginEv_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE17_S_select_on_copyERKS3__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EEixEjincrement_death_test_count_ZNKSt6vectorIiSaIiEE5beginEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13_Rb_tree_implIS5_Lb0EE13_M_initializeEv_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE10deallocateERS3_PS2_jst_ino_ZNKSt6vectorIiSaIiEE3endEvxml_element_S_terminal_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7addressERS4__Compare_ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestEstrtouliterator_traits_ZNKSs4findEPKcj_ZN7testing17TestEventListener9OnTestEndERKNS_8TestInfoEPrintToString_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE8allocateERS4_jlast_death_test_message_~_Rb_treeStrCaseCmp_ZN7testing8internal35DefaultGlobalTestPartResultReporterC2EPNS0_12UnitTestImplETHREWPrintTestNameis_valid__ZN7testing8internal35DefaultGlobalTestPartResultReporterD0EvMSG_TRUNC_ZN7testing8internal13DeathTestImpl5AbortENS0_9DeathTest11AbortReasonEDefaultPrintTodelimiterIsDigit_ZNSt11char_traitsIcE7not_eofERKi__it__destroy_ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5__ZNKSs12find_last_ofEPKcjj__u_quad_t_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEi__normal_iterator > >shuffle__ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEv_Vector_base >_M_is_leaked_ZN7testing8internal17StreamingListeneraSERKS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6assignEjRKS2__ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwj_ZN7testing8internal20ShouldRunTestOnShardEiii_ZNK7testing8internal10scoped_ptrISsEptEv_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEioperator-*, std::vector > >__uninit_copyoperator<< reserved_names_Self_ZNK9__gnu_cxx13new_allocatorISsE7addressERKSsThis program contains tests written using Google Test. You can use the following command line flags to control its behavior: Test Selection: @G--gtest_list_tests@D List the names of all tests instead of running them. The name of TEST(Foo, Bar) is "Foo.Bar". @G--gtest_filter=@YPOSTIVE_PATTERNS[@G-@YNEGATIVE_PATTERNS]@D Run only the tests whose name matches one of the positive patterns but none of the negative patterns. '?' matches any single character; '*' matches any substring; ':' separates two patterns. @G--gtest_also_run_disabled_tests@D Run all disabled tests too. Test Execution: @G--gtest_repeat=@Y[COUNT]@D Run the tests repeatedly; use a negative count to repeat forever. @G--gtest_shuffle@D Randomize tests' orders on every iteration. @G--gtest_random_seed=@Y[NUMBER]@D Random number seed to use for shuffling test orders (between 1 and 99999, or 0 to use a seed based on the current time). Test Output: @G--gtest_color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D Enable/disable colored output. The default is @Gauto@D. -@G-gtest_print_time=0@D Don't print the elapsed time of each test. @G--gtest_output=xml@Y[@G:@YDIRECTORY_PATH@G/@Y|@G:@YFILE_PATH]@D Generate an XML report in the given directory or with the given file name. @YFILE_PATH@D defaults to @Gtest_details.xml@D. @G--gtest_stream_result_to=@YHOST@G:@YPORT@D Stream test results to the given server. Assertion Behavior: @G--gtest_death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D Set the default death test style. @G--gtest_break_on_failure@D Turn assertion failures into debugger break-points. @G--gtest_throw_on_failure@D Turn assertion failures into C++ exceptions. @G--gtest_catch_exceptions=0@D Do not report exceptions as test failures. Instead, allow them to crash the program or throw a pop-up (on Windows). Except for @G--gtest_list_tests@D, you can alternatively set the corresponding environment variable of a flag (all letters in upper-case). For example, to disable colored text output, you can either specify @G--gtest_color=no@D or set the @GGTEST_COLOR@D environment variable to @Gno@D. For more information, please read the Google Test documentation at @Ghttp://code.google.com/p/googletest/@D. If you find a bug in Google Test (not one in your own code or tests), please report it to @G@D. BoolFromGTestEnv_ZNSt6vectorIPcSaIS0_EE15_M_erase_at_endEPS0__ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwjInteger__find_if<__gnu_cxx::__normal_iterator >, __gnu_cxx::__ops::_Iter_pred >strcasecmpst_ctim_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6assignEjRKS1__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4dataEvtuple_size >_ZNKSt6vectorIPcSaIS0_EE4backEv_Vector_base >_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE8capacityEv_M_leak_hardprefix_len_ZNKSs13find_first_ofERKSsj_ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5__ZN7testing4Test5SetupEvGTestLogSeverity_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE17_S_select_on_copyERKS3__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag_vptr.TestCase_ZNK7testing8UnitTest21total_test_case_countEv_ZNKSt9_IdentityIPKcEclERKS1__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EES9__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE7reserveEj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEv_ZN9__gnu_cxx17__normal_iteratorIPcSsEppEitoupper_vptr.ThreadLocalValueHolderBase_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_rightmostEv Stack trace: _ZN9__gnu_cxx17__normal_iteratorIPcSsEppEv__normal_iterator, std::allocator > >_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEixEi__datCodePointToUtf8_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_fill_assignEjRKS2_not_bol_ZNSs3endEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmIEi_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE8max_sizeEv_ZN7testing8internal12UnitTestImplD0EvIsRootDirectoryFloatingPointLE_ZN7testing8internal6RandomaSERKS1__ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperEz_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_range_checkEj_ZNSbIwSt11char_traitsIwESaIwEE4_Rep15_M_set_sharableEvFlushInfoLog__s1construct_ZNSt3setISsSt4lessISsESaISsEE6insertESt23_Rb_tree_const_iteratorISsERKSsreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseERKSsHasFailurewcsncpy_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE3endEv_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT__ZNK7testing10TestResult6PassedEv_ZN7testing8internal12UnitTestImpl21os_stack_trace_getterEv_S_construct_aux15pthread_mutex_tregex_tmbrtowcRandom~ParameterizedTestCaseInfoBase_ZNSt3setISsSt4lessISsESaISsEE5eraseERKSs_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7addressERKS3__ZN7testing8internal12UnitTestImpl14RecordPropertyERKNS_12TestPropertyE__numeric_traits_integerfreeaddrinfo_M_limitoperator<< _ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4rendEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt17_Rb_tree_iteratorIS1_ES9__ZNK7testing8internal8FilePath12CreateFolderEv_ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE3getEv_ZNSt6vectorISsSaISsEE3endEvkPathSeparator_ZN7testing12TestPropertyD2Evvfprintfiterator_traits, std::allocator >*>~Mutexisxdigitmatched_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_disposeERKS1__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_maximumEPSt18_Rb_tree_node_basesi_fd_ZNSt6vectorISsSaISsEE4backEv_S_basefieldStringType__is_move_iterator_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE3endEv__niter_base_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8___uninitialized_copy_a_S_scientific_ZNK7testing8internal8FilePath15IsRootDirectoryEv_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4rendEv_ZN7testing17TestEventListener11OnTestStartERKNS_8TestInfoE_ZNK7testing10TestResult15GetTestPropertyEi_ZN7testing32ScopedFakeTestPartResultReporterD0Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6resizeEjS2_is_wide_string_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEdeEv_ZN7testing4TestD0Evwctype_t_ZNKSs5rfindEPKcj_ZNSt6vectorISsSaISsEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EEjRKSs_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPiS1_EEjRKi_DestroyReinterpretBitsai_canonnameConfigureStreamingOutput_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEv_ZN7testing15AssertionResultlsISsEERS0_RKT__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_erase_auxESt23_Rb_tree_const_iteratorISsESkipPrefix_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEppEi_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_upper_boundEPSt13_Rb_tree_nodeIS1_ESA_RKS1__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEptEv_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE11_M_allocateEjsaved_sigprof_actionoperator<< low_bits_IteratorR_ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEjj_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11__rb_verifyEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt17_Rb_tree_iteratorISsES7_spawned__ZNSt13_Bit_iteratorppEi__sigchld_clock_ttear_down_tc__Vector_base >_ZNKSt5ctypeIcE13_M_widen_initEv__destroy_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEvmatchFLAGS_gtest_stack_trace_depth_ZNSt13_Bit_iteratorppEv_ZN7testing17TestEventListener20OnTestIterationStartERKNS_8UnitTestEikDeathTestStyleFlag_ZN7testing8internal18FormatFileLocationEPKci_ZN7testing15AssertionResultlsIA2_cEERS0_RKT__ZNKSt6vectorIPcSaIS0_EE4sizeEvg_injected_test_argvs_ZNKSs4findEcj_M_get_insert_equal_pos_ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv_ZN7testing28FLAGS_gtest_stream_result_toEreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE28_M_get_insert_hint_equal_posESt23_Rb_tree_const_iteratorIS1_ERKS1_PostFlagParsingInit_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE7reserveEj_ZNK7testing8internal12UnitTestImpl28internal_run_death_test_flagEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8pop_backEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5beginEv__positionqsort_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEplEi_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEw_ZNKSs4findERKSsj_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5beginEvkAsIs_ZNK7testing8internal12UnitTestImpl6PassedEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_ES9__ZNSt18_Rb_tree_node_base10_S_maximumEPS__ZNK7testing8UnitTest22failed_test_case_countEv_M_end_of_storage_ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE17_M_insert_unique_ESt23_Rb_tree_const_iteratorISsERKSs__exchange_and_add_single__x_copy_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE7destroyERS4_PS3__ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE8allocateERS3_j_Alloc_pad__uninitialized_copy_a*, std::basic_string >_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE9CreateKeyEvvwscanfexponent_bits_Setwoperator<< _ZNK7testing8TestCase21reportable_test_countEvdeath_test_count__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5frontEv_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4rendEv_M_headerinternal_run_death_test_SplitStringfind_last_of~TestEventListener__is_normal_iterator<__gnu_cxx::__normal_iterator > > >WideStringToUtf8_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5emptyEvuninitialized_copy<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*>__oldoperator- >_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5frontEvneedle_expr_ZN7testing8internal12UnitTestImpl18ConfigureXmlOutputEvunit_test__uninitialized_move_if_noexcept_a >reverse_iterator<__gnu_cxx::__normal_iterator > > >~set_ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_Rb_tree_const_iteratorfabs_ZN7testing8internal14CapturedStream14ReadEntireFileEP8_IO_FILE_ZNSt3setISsSt4lessISsESaISsEE4swapERS3___vtt_parm_Destroy_M_ibeginactual_expression_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5clearEv_ZNSt6vectorISsSaISsEE6assignEjRKSsGetRandomSeedFromFlag_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7addressERS3__ZN7testing8internal17AppendUserMessageERKSsRKNS_7MessageEoperator!=*, std::vector > >__enable_if__throw_out_of_range_fmt_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4sizeEvGetTestPartResultReporterForCurrentThread__copy_move_backward_a_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmIEi_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_j_ZNK7testing8UnitTest21reportable_test_countEvF_OWNER_PGRP_ZNSt6vectorISsSaISsEE5eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EES5__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing14IsNotSubstringEPKcS1_S1_S1___off64_t_Iter_base<__gnu_cxx::__normal_iterator > >, false>__copy_move_a_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE12_M_check_lenEjPKc__gnu_cxx__typeEqFailureexpected_to_be_substringGetCapturedStringExitedUnsuccessfully_ZNK7testing8UnitTest20original_working_dirEvDeleteThreadLocalValue_ZN7testing8internal24HasNewFatalFailureHelperC2Evoperator+, std::allocator >_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC2EPNS0_12UnitTestImplEoperator==_vptr.TestFactoryBase_M_current_ZNSs7replaceEjjjc_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5clearEv_Destroy_ZNKSs13find_first_ofEPKcjj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNK7testing8internal13FloatingPointIdE12AlmostEqualsERKS2___copy_move_aoperator<< _ZNSt6vectorIiSaIiEE4rendEvtest_case_infos__ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEE4baseEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS1_Earray___copy_move_backward_a2_sigsys_ZN9__gnu_cxx13new_allocatorIiE8allocateEjPKvreverse_iterator<__gnu_cxx::__normal_iterator > > >_S_create_Arg1_Arg2_ZNSt6vectorIPcSaIS0_EE6rbeginEv_ZNK7testing8internal13FloatingPointIfE12AlmostEqualsERKS2__Vector_base, std::allocator >, std::allocator, std::allocator > > >_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4rendEvattributesstack_trace_depth_MSG_FASTOPEN_Destroy_aux_ZN7testing8internal17StreamingListener10FormatBoolEbdefault__ZN7testing14KilledBySignalC2EiFullMatchreverse_iterator<__gnu_cxx::__normal_iterator > > >g_captured_stderrSetGlobalTestPartResultReporterpair, std::allocator > >, bool>PrintAsCharLiteralToabs_errorRegisterParameterizedTests_ZNKSt6vectorIPcSaIS0_EEixEjGetTestTypeId/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0__copy_move_a2 >, __gnu_cxx::__normal_iterator > >ValidateTestPropertyargs__M_insert_uniqueoperator<< UInt32RemoveExtensionkStreamResultToFlagkCurrentDirectoryStringname_template_ZNSt6vectorIiSaIiEE2atEj_ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEiiterator_traits_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEdeEv_ZN7testing8internal13HasOneFailureEPKcS2_S2_RKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZNKSt6vectorISsSaISsEE12_M_check_lenEjPKcbool_constantkShuffleFlag_ZNKSt18_Bit_iterator_baseltERKS___uninit_copyCharType_ZNK7testing8TestCase30reportable_disabled_test_countEv_ZN9__gnu_cxx14__alloc_traitsISaISsEE7destroyERS1_PSsungetwcoperator- >__copy_move_achild_argcurrency_symbol_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEptEvgettimeofday_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4findERKS1_ShowWideCString__wchb_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE11_M_allocateEj_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjwoperator!= >_ZN7testing35FLAGS_gtest_also_run_disabled_testsEIsSubstringPred >_ZNKSt6vectorIiSaIiEE4dataEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_copyEPKSt13_Rb_tree_nodeISsEPS7__S_value~TestPropertyKeyIs_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE9constructEPS2_RKS2___exchange_and_addbasic_string__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >_ZNSt6vectorIPcSaIS0_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmIEinew_allocator_ZNK9__gnu_cxx13new_allocatorIiE7addressERi_Iter_base_M_range_initializefirst_is_TEST_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEi_M_checkglobal_test_part_result_reporter_mutex_AddTestInfo_ZNSt3setISsSt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsES5___size_ZNSt6vectorIPcSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EE_ZNSt10_Iter_baseIPN7testing14TestPartResultELb0EE7_S_baseES2__ZNK7testing10TestResult18HasNonfatalFailureEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZNKSt18_Bit_iterator_basegeERKS__ZNKSs5emptyEv__builtin_unwind_resume_ZN7testing31FLAGS_gtest_death_test_use_forkEunary_function_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6rbeginEv_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4backEv_ZNK7testing8TestCase10type_paramEva_current_test_infoAssumeRole_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS2_EES8__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE3endEv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11equal_rangeERKS1__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseEPKSsS7___ostream_type__insert_left_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_S_leftEPSt18_Rb_tree_node_base_ZNKSt6vectorISsSaISsEE4dataEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE3endEv_M_check_length_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_insert_equal_lowerERKS1__ZNKSt23_Rb_tree_const_iteratorISsEptEvdeath_test_use_fork__S_app_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE18_M_fill_initializeEjRKS3__ZNKSs4findEPKcjj_ZN7testing22EmptyTestEventListenerD2Ev_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE8allocateERS3_jMSG_OOB_ZN7testing8internal12UnitTestImpl9listenersEv__syscall_slong_t__alloc_traits, std::allocator > > >__alloc_traits >_ZN7testing8internal15UnitTestOptions17FilterMatchesTestERKSsS3__Identity_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE8capacityEvstart_timestampappendIsDirectoryTestDisabled_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE6rbeginEv_ZNK7testing8internal12AssertHelperaSERKNS_7MessageEsetlocale_ZNK7testing8UnitTest17failed_test_countEv_ZN7testing8internal17StreamingListenerD0Ev_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6assignEjRKS2_host_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmiEi_Setprecision_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev__copy_move_b_ZNKSt3setISsSt4lessISsESaISsEE6rbeginEv_IO_write_ptr_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEcGTEST_WARNING_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_rightEPSt18_Rb_tree_node_base_ZN7testing8internal2RE12PartialMatchEPKcRKS1__S_in_ZN7testing17TestEventListener18OnTestIterationEndERKNS_8UnitTestEinew_allocator_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE8max_sizeEvwcscasecmp_ZN7testing12TestProperty8SetValueERKSs__socket_type_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZN7testing8internal13FloatingPointIdE3MaxEvminpair, bool>SumOverTestCaseList_Vector_base >_ZNSt12_Vector_baseIPcSaIS0_EE12_Vector_impl12_M_swap_dataERS3__ZNK9__gnu_cxx17__normal_iteratorIPKcSsEptEv__ops_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE8max_sizeEvpair_ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE_ZN7testing8internal19FormatForComparisonIxxE6FormatERKx_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11equal_rangeERKS1__ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE10deallocateERS4_PS3_j_Tp_alloc_typetest_detail.xml_Constructfull_regex_len_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5clearEv_ZNKSt3setISsSt4lessISsESaISsEE11lower_boundERKSsSOCK_RDM_ZNSt12_Vector_baseIiSaIiEE11_M_allocateEjCloneCString_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4rendEv_ZNKSt6vectorIPcSaIS0_EE5beginEv_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEcoperator!=, std::allocator >_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEplEiWrite_M_fill_initializekDefaultDeathTestStyle__normal_iterator > >waitpidtimezonetest_property_count_ZNK7testing10TestResult19test_property_countEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EEaSERKS4__Vector_base >reverse_iterator<__gnu_cxx::__normal_iterator > > >an_outcome_S_ate_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_fill_assignEjRKS2_regexecmatches_filter__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11equal_rangeERKS1_expectedoutcome__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EEaSERKS7__ZNKSt6vectorISsSaISsEE3endEv_ZNKSs7compareEjjRKSsjj_ZN9__gnu_cxx13new_allocatorIiE9constructEPiRKi_ZNSt18_Bit_iterator_base12_M_bump_downEv_ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw_ZNKSt3setISsSt4lessISsESaISsEE5emptyEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6assignEjRKS3__ZN7testing8internal23ScopedPrematureExitFileaSERKS1__Destroy_ZN7testing8internal6String13CStringEqualsEPKcS3__Rb_tree_iterator, std::allocator > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_get_Node_allocatorEvlast_in_range_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4sizeEv_ZNSt6vectorIPcSaIS0_EE2atEj__find_if<__gnu_cxx::__normal_iterator*, std::vector > >, __gnu_cxx::__ops::_Iter_equals_val > >_ZNSsaSEcUniversalPrinter, std::allocator > >_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEv_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc_ZN7testing8internal12UnitTestImpl12environmentsEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4findERKS1_kSignBitMaska_value__uninit_copy*>long long unsigned int_ZN7testing8TestInfo15ClearTestResultEPS0__ZNSs6appendERKSs_ZN7testing8internal6String12FormatHexIntEi_vptr.TestEventListenerCaseInsensitiveCStringEquals_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7addressERKS3_pair, std::allocator > >, bool>kDeathTestUseFork_ZNSbIwSt11char_traitsIwESaIwEEpLEwparameterized_test_registry__ZNKSbIwSt11char_traitsIwESaIwEE4rendEvFormatTestCaseCount_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5frontEvFLAGS_gtest_stream_result_to_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE8capacityEv_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE9constructEPS2_RKS2_MakeAndRegisterTestInfounsigned char_ZNK7testing8internal24InternalRunDeathTestFlag5indexEv_M_grab_ZNKSt23_Rb_tree_const_iteratorIPKcEdeEv_ZN7testing14IsNotSubstringEPKcS1_PKwS3_operator<< ClearResultFLAGS_gtest_death_test_style_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EEixEj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEi_ZN7testing8internal13ParseBoolFlagEPKcS2_Pb_ZN7testing8internal14ParseFlagValueEPKcS2_bUnitTestOptions_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEv_ZN9__gnu_cxx17__normal_iteratorIPcSsEmmEi__gnu_debug_ZN9__gnu_cxx17__normal_iteratorIPcSsEmmEvSOCK_DGRAM_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE7reserveEj__is_char__outTypeIdHelper_ZNK7testing14TestPartResult9file_nameEv_ZN7testing8internal6String12CloneCStringEPKc_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE8max_sizeEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4backEv_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE9constructEPS3_RKS3_test_info_list_fwide_ZN7testing8internal17StreamingListener5StartEv__iterator_category<__gnu_cxx::__normal_iterator > >_ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5beginEvoutput_file_for_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestEventListener*)>F_OWNER_GID_ZNKSt6vectorIiSaIiEEixEj_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE7pointerEv_ZN7testing8internal27OsStackTraceGetterInterface16UponLeavingGTestEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5clearEv_ZNSs6insertEjPKcj_ZN7testing8internal27PrettyUnitTestResultPrinter9OnTestEndERKNS_8TestInfoE_ZNK7testing8UnitTest15start_timestampEv_ZNKSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE19_M_get_Tp_allocatorEvkChunkSize_ZNSt6vectorIPcSaIS0_EE3endEv~GoogleTestFailureExceptionHandleSehExceptionsInMethodIfSupportedSetDefaultResultPrinterwcsspn~_Iter_pred_ZNSt6vectorISsSaISsEE6resizeEjSsoperator<< _ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5frontEvGetAnsiColorCode__copy_move_backward_a2__alloc_traits, std::allocator > > > >_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE18_M_fill_initializeEjRKS2__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5clearEv_ZN7testing8internal6String17WideCStringEqualsEPKwS3_raw_seed_ZNK7testing8internal12UnitTestImpl15start_timestampEvmax_length_ZNK7testing14TestPartResult6passedEv_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE8max_sizeEvFOpen_sifields_ZN7testing17TestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestEInfinitycan_be_nullGetTestProperty__copy_move_backward_a_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13_M_clone_nodeEPKSt13_Rb_tree_nodeIS1_E_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4dataEv_Destroy_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE7destroyERS3_PS2_HandleSehExceptionsInMethodIfSupported_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5countERKS1_TEST_name__xstat_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEi_ZN7testing8internal24XmlUnitTestResultPrinter18OutputXmlAttributeEPSoRKSsS4_S4__ZNSs12_M_leak_hardEv_M_insert_unique__ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEviterator_traits_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE9constructEPS2_RKS2__ZNSsixEj_ZN7testing8internal6String10FormatByteEh_ZNSt6vectorIN7testing12TestPropertyESaIS1_EEaSERKS3__ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE8allocateEjPKvSetTestPartResultReporterForCurrentThreadOnEnvironmentsSetUpEnd_ZNSspLERKSsAddArguments >_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEvfull_regex_srand_Destroy__delta_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmmEiset_catch_exceptionspart_ZN9__gnu_cxx14__alloc_traitsISaIPcEE8max_sizeERKS2_TypedTestCasePState_ZN7testing8internal14GTestMutexLockaSERKS1__ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmmEv_ZN7testing8internal9DeathTest24last_death_test_message_ECreateCodePointFromUtf16SurrogatePair_ZNSt13_Bit_iteratormmEiConfigureXmlOutputalso_run_disabled_tests__ZNSt13_Bit_iteratormmEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE2atEj_ZNSt6vectorIPN7testing8TestCaseESaIS2_EEixEj_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEvother_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs_ZNK7testing8internal13DeathTestImpl7spawnedEvOnTestProgramStart_Unwind_Resumeai_flagskDeathTestThrew_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj_ZN7testing11EnvironmentD0EvTearDown_Rb_tree_node_ZNSs4_Rep10_M_refdataEv__cxxabiv1_ZN7testing8internal17Int32FromEnvOrDieEPKci__pos_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE3endEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmiEi_ZNSt6vectorIPcSaIS0_EE4backEvwcsstrhost_name__ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4sizeEvkReservedTestSuitesAttributes_ZN7testing7MessagelsERKSbIwSt11char_traitsIwESaIwEE_ZN7testing8internal16ForkingDeathTest4WaitEv_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5emptyEvClearAdHocTestResultst_size_ZN7testing8internal24XmlUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4backEv_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE8max_sizeEv_ZNSt6vectorISsSaISsEE2atEj_ZNKSt13_Rb_tree_nodeIPKcE9_M_valptrEvFLAGS_gtest_death_test_use_fork_ZN7testing8internal12UnitTestImpl18death_test_factoryEv_Rb_tree_impl, std::allocator > >, false>_ZN7testing8UnitTest18GetMutableTestCaseEi_ZNKSs5c_strEvreverse_iterator<__gnu_cxx::__normal_iterator > > >exit_code_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE11_M_allocateEjtest_properties__ZN7testing8TestCaseD0Ev_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_rootEvfraction_bits_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE5resetEPS3_testing_Result_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEpLEitm_mday_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEdeEv__niter_baseAppend_ZNKSt12_Vector_baseIPcSaIS0_EE19_M_get_Tp_allocatorEv_Iter_predsi_addr_ZN9__gnu_cxx13new_allocatorIwE9constructEPwRKw_ZN7testing8internal2RE12PartialMatchERKSsRKS1_RunAllTests__miter_base_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE3endEvGetTestCase_M_swap_data_ZNSt10_Iter_baseIPPN7testing11EnvironmentELb0EE7_S_baseES3_~basic_iostream_M_erase_at_enditerator_traits_ZNK9__gnu_cxx13new_allocatorIPcE7addressERS1__ZNK7testing8internal8FilePath11IsDirectoryEv_ZNKSt4lessISsEclERKSsS2_copy<__gnu_cxx::__normal_iterator >, __gnu_cxx::__normal_iterator > >MSG_NOSIGNALkOutputFlag_ZN7testing7MessagelsEPFRSoS1_E_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6assignEjRKS1_ad_hoc_test_result_ZNSt3setISsSt4lessISsESaISsEE5clearEvsingular_form_Iter_base_ZN7testing31TestPartResultReporterInterface20ReportTestPartResultERKNS_14TestPartResultEoperator<< _ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEpLEi__are_samebinary_function__resoperator<< kTestTotalShardsiterator_traits_ZN9__gnu_cxx17__normal_iteratorIPcSsEpLEibasic_streambuf >_ZNSt6vectorISsSaISsEE18_M_fill_initializeEjRKSs_call_addroriginal_working_dir_ZN7testing18TestEventListeners23SuppressEventForwardingEv_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw_ZNKSs7compareERKSsExitSummary_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEE4baseEvtimeval_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4sizeEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EEixEj_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE9push_backERKS3___normal_iterator > >~DeathTest_ZNSbIwSt11char_traitsIwESaIwEE6resizeEjwvector, std::allocator >, std::allocator, std::allocator > > >fopen_ZNSbIwSt11char_traitsIwESaIwEEaSEPKw_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4dataEvdifference_typerebind_ZNSo5flushEvsetprecision_M_value_field_ZN9__gnu_cxx14__alloc_traitsISaIPcEE10deallocateERS2_PS1_j_S_badbit~OsStackTraceGetterInterfacecaller_frame__ZNSs7_M_dataEPcwcslenline_endtype_param__ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj_ZNK7testing8internal12UnitTestImpl17failed_test_countEvenvironSOCK_CLOEXEClisteners_kInternalRunDeathTestFlag5div_tGetGlobalTestPartResultReporterwcstoull_ZN7testing8internal16ForkingDeathTest13set_child_pidEi_ZN7testing8internal13FloatingPointIfE24SignAndMagnitudeToBiasedERKj_ZN7testing8internal14StackGrowsDownEv_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6resizeEjS2_Normalizetest_propertywrite_fd_reverse_iterator, std::allocator > > >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE12_M_check_lenEjPKcCaptureStream_S_showposGTEST_TOTAL_SHARDS_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE3setERKS5_predicate_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEdeEvpair, std::allocator > >, std::_Rb_tree_iterator, std::allocator > > >_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5beginEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEPKw_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwDelete_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_valueEPKSt18_Rb_tree_node_base_ZN7testing8internal30GetBoolAssertionFailureMessageERKNS_15AssertionResultEPKcS5_S5_~_Alloc_hider_M_create_node_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEpLEi_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5frontEv_ZN7testing8UnitTest27parameterized_test_registryEv_ZNSbIwSt11char_traitsIwESaIwEE5eraseEjj_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEpLEiBiggestConvertible_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4dataEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE3endEvMSG_TRYHARD_ZN7testing8internal18OsStackTraceGetter17CurrentStackTraceEii_IO_buf_basematches_filter_ZNSt13_Bit_iteratorpLEi__FILE__pthread_internal_slist~InternalRunDeathTestFlag_ZNKSt18_Bit_iterator_baseneERKS__ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEixEifilename__ZNSt18_Bit_iterator_base10_M_bump_upEv_ZNSbIwSt11char_traitsIwESaIwEE5clearEv_S_endTestBody_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4backEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEdeEvget_allocator_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE12_M_check_lenEjPKc_ZNSt14_Bit_reference4flipEv_ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE8allocateEjPKvcaptured_stream_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEixEikUnknownFile_ZNKSt12_Vector_baseISsSaISsEE19_M_get_Tp_allocatorEv_ZNSt6vectorIPcSaIS0_EEaSERKS2_test_indices_operator!=<__gnu_cxx::__normal_iterator > >_ZNK9__gnu_cxx13new_allocatorISsE7addressERSs_ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_uniqueERKS1__ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEikStdErrFileno_ZN7testing8internal13DeathTestImpl26ReadAndInterpretStatusByteEv~DefaultDeathTestFactory_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEv_ZNKSt13_Rb_tree_nodeISsE9_M_valptrEv_ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7destroyEPS4_SuppressTestEventsIfInSubprocessAddArgument_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEppEv_M_initializefastmap_accurate_ZNSbIwSt11char_traitsIwESaIwEE7_M_leakEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSs7replaceEjjPKcjkBreakOnFailureFlag__uninitialized_copy_a_ZN7testing8internal20SingleFailureCheckerC2EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSsword_list_ZN7testing8internal12UnitTestImpl41SetTestPartResultReporterForCurrentThreadEPNS_31TestPartResultReporterInterfaceEtm_isdst_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE8max_sizeEvint_n_sign_posn_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE9push_backERKS2_operator!= >HasGoogleTestFlagPrefix_ZNKSt6vectorIPcSaIS0_EE2atEj_ZNKSbIwSt11char_traitsIwESaIwEE9_M_ibeginEv_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE3getEv_ZN7testing8internal16InDeathTestChildEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE9push_backERKS1_TypeParam_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEixEiegptr_ZNKSt9type_infoeqERKS__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE__intptr_tClearTestPartResultsoperator==<__gnu_cxx::__normal_iterator > >CharFormatvfwprintf_ZN7testing17TestEventListener16OnTestPartResultERKNS_14TestPartResultE_ZNK7testing8UnitTest11GetTestCaseEi_ZN7testing8internal7g_argvsE_ZNSt14_Bit_referenceaSERKS_EscapeXmlText_ZNSbIwSt11char_traitsIwESaIwEE6insertEjjw_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11lower_boundERKSs_ZNKSt5ctypeIcE8do_widenEc__normal_iterator > >_IO_read_base_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4rendEv__find_if<__gnu_cxx::__normal_iterator >, __gnu_cxx::__ops::_Iter_pred >_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEptEv_ZNSbIwSt11char_traitsIwESaIwEE4swapERS2__ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4rendEv_ZNKSt6vectorIiSaIiEE5emptyEvkThrowOnFailureFlag__alloc_ZNSt11char_traitsIcE2ltERKcS2__ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE3getEvIsSubstringPred_M_insert_ZNK7testing8TestInfo13is_reportableEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4rendEvsockaddr_ZN7testing8DoubleLEEPKcS1_dd__debug_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4backEvfull_name_Swallow_assignwcstod_ZNK7testing14TestPartResult7messageEvreset_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE8max_sizeEv_ZNSt6vectorIiSaIiEE4dataEv_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7addressERKS3___addressofuninitialized_copy_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv_ZN7testing8internal15UnitTestOptions13MatchesFilterERKSsPKcreg_syntax_t_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate_ZNK7testing8internal8FilePath15RemoveExtensionEPKc_vptr.Test_ZN7testing8internal13FloatingPointIfE3MaxEvwmemcmp_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S5_S5_value_type_ZNSs15_M_replace_safeEjjPKcjsuffix_Const_Link_type_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseERKS1_this_test_info_ZN7testing8internal13ExecDeathTest32GetArgvsForDeathTestChildProcessEvconstructInitGoogleTestImpl_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmiEi_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE10deallocateEPS2_j_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEStreamableToStringhas_owner_operator!=_Iter_base__is_move_iterator_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4sizeEv__cxa_rethrow_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE7destroyERS4_PS3__ZNSt6vectorIN7testing14TestPartResultESaIS1_EEixEjsocket_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEi_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE18_M_fill_initializeEjRKS2__ZNSbIwSt11char_traitsIwESaIwEE6appendEPKw~EmptyTestEventListener_ZN7testing11EnvironmentD2Ev_ZNK7testing10TestResult17GetTestPartResultEirebind_Iter_base_Rb_tree_colortv_sec_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcjuse_color_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5clearEv_ZN7testing8UnitTest17AddTestPartResultENS_14TestPartResult4TypeEPKciRKSsS6__ZNSt6vectorIPcSaIS0_EE7reserveEj_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE12_Vector_impl12_M_swap_dataERS5_test_properites_mutex__unused2IN_PROGRESS__are_same__destroyUniversalTersePrinterPrintCharsAsStringToIsSubstringImpl >GetStreamset_should_run_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5beginEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5frontEv_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__M_node_counttm_ming_init_gtest_countMSG_WAITALLoperator<< _ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5beginEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE8max_sizeERKS3__ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_jjstrcmp_ZNK7testing8internal12UnitTestImpl6FailedEv_ZN7testing8internal12UnitTestImpl24ConfigureStreamingOutputEv_ZNSt6vectorIiSaIiEE6rbeginEv_ZN7testing8internal30WriteToShardStatusFileIfNeededEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc_ZN7testing8internal24HasNewFatalFailureHelper20ReportTestPartResultERKNS_14TestPartResultE_ZNK9__gnu_cxx13new_allocatorIPKcE8max_sizeEv_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_ES7_ai_addr_ZNK9__gnu_cxx13new_allocatorISsE8max_sizeEv__str~AbstractSocketWriter_DestroyCreateFolder_ZN7testing9internal220PrintBytesInObjectToEPKhjPSoisspace_ZNKSs8_M_limitEjj_ZN7testing16AssertionFailureERKNS_7MessageEglobal_test_part_result_repoter__ZNSs4swapERSs_ZNKSt3setISsSt4lessISsESaISsEE4rendEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE17_M_create_storageEj__uninitialized_move_if_noexcept_a >_ZN7testing8internal12UnitTestImpl11FilterTestsENS1_18ReactionToShardingE_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEplEifailure_message_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_lower_boundEPKSt13_Rb_tree_nodeIS1_ESB_RKS1__ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jjStreamableToStringAlmostEqualsInDeathTestChild_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6rbeginEvShouldShardoperator<< _ZNK9__gnu_cxx13new_allocatorIwE7addressERKw_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEppEi_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8max_sizeEv_ZNKSt17_Rb_tree_iteratorISsEeqERKS0__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_get_Node_allocatorEv_ZN7testing14InitGoogleTestEPiPPcfind_if<__gnu_cxx::__normal_iterator >, testing::internal::TestPropertyKeyIs>GetEnviron_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEppEvdefault_val_ZNK7testing8TestInfo11value_paramEv_ZNSt3setISsSt4lessISsESaISsEE11lower_boundERKSs_ZNSs6insertEjRKSsjj_ZN7testing14InitGoogleTestEPiPPwCmpHelperSTRNEMSG_WAITFORONE_ZN7testing8internal9MutexBase6UnlockEv_ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EEoperator&=pattern__ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_E_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7addressERS3__ZN7testing8internal24XmlUnitTestResultPrinterD2Ev_ZN7testing8internal18OsStackTraceGetterD0Ev_ZNSt11char_traitsIcE4moveEPcPKcj~AssertHelperkTestShardIndex_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11upper_boundERKSs_ZN7testing8internal17StreamingListener12SocketWriter14MakeConnectionEv_ZNK7testing8internal13FloatingPointIfE13fraction_bitsEv_M_refcopysi_uid_ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv_Destroy_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7destroyEPS3__ZN7testing8internal26GoogleTestFailureExceptionC2ERKNS_14TestPartResultEsa_mask_S_floatfieldsizetypeIsSubstringImpl_ZN7testing4TestC2Ev_ZNSs4_Rep10_M_refcopyEv~TestPartResultReporterInterfacepremature_exit_file_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwjj__errno_location_ZNSt11char_traitsIwE3eofEv_ZNKSt23_Rb_tree_const_iteratorIPKcEeqERKS2_new_allocator_ZNKSt6vectorIPcSaIS0_EE6rbeginEvoperator()_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_rightmostEv_ZNK7testing10TestResult6FailedEv_M_get_insert_unique_pos_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE19_M_get_Tp_allocatorEv_ZN7testing16AssertionFailureEvMSG_SYN__value_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEi_ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT__ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE17_S_select_on_copyERKS4_success_scoped_ptr, std::allocator > >directory_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEv_ZNSt3tr110tuple_sizeINS_5tupleIIEEEE5valueE_ZNSs4_Rep26_M_set_length_and_sharableEj_ZNSt6vectorIPcSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6_CaseInsensitiveWideCStringEquals_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8key_compEv_ZNSt13_Rb_tree_nodeIPKcE9_M_valptrEvgtest_trace_stack_should_ZNSt11char_traitsIwE4copyEPwPKwj_ZNSt10_Iter_baseIPPcLb0EE7_S_baseES1__ZNSt12_Vector_baseISsSaISsEE12_Vector_impl12_M_swap_dataERS2__ZN7testing8internal13DeathTestImpl10set_statusEi__lentm_monrepeat__ZN7testing8TestCase22TestReportableDisabledEPKNS_8TestInfoEsi_pid__off_t_M_get_Node_allocator__resultdefault_global_test_part_result_reporter_new_allocatorrebindDoubleNearPredFormatreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_valueEPKSt13_Rb_tree_nodeIS1_Eflag_str_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE8allocateERS3_j_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPc_ZNKSt23_Rb_tree_const_iteratorISsE13_M_const_castEv_ZNKSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE19_M_get_Tp_allocatorEv_M_rightmostIsSpace_ZNSolsEd_ZNSolsEf_ZNSolsEi_ZNSolsEj_ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPwobj_bytesShuffleRange_syscall_ZNSolsEx_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EEkBitCount__wch_ZN7testing8internal12UnitTestImpl14UnshuffleTestsEvlistener_Arg__copy_move_boperator== >_ZdaPv__alloc_swap, std::allocator > >, true>StackGrowsDownFloatingPointUnionoperator++ignore_ZNSt10_Iter_baseIPPN7testing8TestCaseELb0EE7_S_baseES3_operator+=__glibc_reserved4__glibc_reserved5range_width~Test_ZNK7testing8TestCase18ad_hoc_test_resultEv__string_typePrintFailedTests_ZNKSt14_Bit_referenceltERKS__ZN7testing8internal27PrettyUnitTestResultPrinter15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal21UniversalTersePrinterIPKwE5PrintES3_PSoInitGoogleTestImpl_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmIEibasic_string, std::allocator >flag_lenwcsncat__lhs_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEaSERKS4__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEnew_allocatorsetstate_ZNSt6vectorIiSaIiEE14_M_fill_assignEjRKi_ZN7testing8internal9DeathTestC2Ev_ZN7testing8internal9Arguments4ArgvEv_ZNSbIwSt11char_traitsIwESaIwEE6resizeEj_ZNK7testing8TestCase11GetTestInfoEi_ZNSt11char_traitsIwE7compareEPKwS2_j_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEptEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5frontEvoperator--Delete_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8max_sizeEv__elision_data_Containeroperator-=operator->FormatTimeInMillisAsSecondsShuffleoperator<< _ZN7testing8internal15GetTimeInMillisEvtm_year_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5frontEvLIVED_ZNSs16_S_construct_auxIPcEES0_T_S1_RKSaIcESt12__false_typereverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >GetMutableTestInfo_ZNK9__gnu_cxx17__normal_iteratorIPcSsEdeEvMSG_DONTROUTE_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8pop_backEv~_Vector_impl_M_widen_initargsto_int_type_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE12_M_check_lenEjPKc_M_set_sharableenvironments_ZSt7nothrow_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE12_Vector_impl12_M_swap_dataERS5___iter_equals_val >unit_test__ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmIEi_ZNKSbIwSt11char_traitsIwESaIwEE4dataEvoperator<< ai_nextParseInt32Flagnew_value_ZN9__gnu_cxx17__normal_iteratorIPcSsEmIEi__is_move_iterator, std::allocator >*>__builtin_strstr_ZNSt6vectorISsSaISsEE9push_backERKSs_IO_write_end~TestCaseNameIs__uninitialized_copy_a_IO_save_basepptrtm_wday_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE3setERKS3_kExponentBitMask_ZNSt11char_traitsIwE7not_eofERKj_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5frontEv_ZN7testing32ScopedFakeTestPartResultReporterC2ENS0_13InterceptModeEPNS_19TestPartResultArrayE__are_same_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_minimumEPKSt18_Rb_tree_node_base_ZN7testing8internal18g_init_gtest_countE_ZN7testing8UnitTest4implEva_typetest_part_resultlast_death_test_case__ZNSt12_Vector_baseISsSaISsEE13_M_deallocateEPSsj_ZNK9__gnu_cxx17__normal_iteratorIPcSsEixEi_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7destroyEPS3__ZNKSt6vectorIPcSaIS0_EE8capacityEv_ZNSt11char_traitsIwE12to_char_typeERKj__new_start_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_S_keyEPKSt18_Rb_tree_node_baseSetInjectableArgvsos_stack_trace_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEE4baseEv_ZNK9__gnu_cxx13new_allocatorIPcE8max_sizeEv~TestEventListeners_ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEvMSG_PEEKremoveval1val2_ZN7testing8internal24XmlUnitTestResultPrinter29TestPropertiesAsXmlAttributesERKNS_10TestResultEactual_message_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4backEva_key_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_rightEPKSt18_Rb_tree_node_base_ZNK7testing8internal8FilePath14RemoveFileNameEvrebind, std::allocator > > >captured_fd_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE13_M_deallocateEPS1_jWait_ZN7testing17TestEventListener18OnTestProgramStartERKNS_8UnitTestEOnTestIterationStartuninitialized_copy*, std::basic_string*>_ZNKSt6vectorIPcSaIS0_EE8max_sizeEv_M_end_ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE19_M_get_Tp_allocatorEvFormatByteiterator_traits_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEE4baseEv_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_basekDeathTestReturned_S_copy_chars_ZNKSt6vectorIPcSaIS0_EE5emptyEvtotal_test_count_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEjRKS3_IsValidXmlCharacter_ZNSt6vectorIPN7testing8TestCaseESaIS2_EEaSERKS4__ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E8MakeFromEv_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEpLEi__throw_logic_errorstreamable_ZNSs7_M_copyEPcPKcj_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEaSERKS7_signum__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_minimumEPSt18_Rb_tree_node_baseColoredPrintfkColorFlag~Environmentsa_sigaction_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmIEi_IteratorL_ZN7testing8internal10scoped_ptrIKSsE5resetEPS2__ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE9push_backERKS2__ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwjstack_sizesi_stimeshard_testsGetNextRandomSeed__arg_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmIEi_Iter_base_ZN7testing10TestResultD2Ev_M_insert_equal_lowerreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_ZNSt13_Bit_iteratormIEi_ZN7testing15AssertionResultlsIA11_cEERS0_RKT__ZNK7testing8UnitTest4implEv_ZN9__gnu_cxx13new_allocatorISsE9constructEPSsRKSs_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEdeEv_ZNSt11char_traitsIcE3eofEvfastmap_ZNKSt3setISsSt4lessISsESaISsEE11equal_rangeERKSspthread_key_tmmap_ZNK7testing8UnitTest30reportable_disabled_test_countEvgetaddrinfo_Iter_base, std::allocator >*, false>TestReportablefull_flag__niter_base*>_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5countERKSs_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwjst_uid__builtin_strrchrstr_valdefault_per_thread_test_part_result_reporter__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_destroy_nodeEPSt13_Rb_tree_nodeISsE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_insert_lowerEPSt18_Rb_tree_node_baseRKS1__ZN7testing8internal17TestEventRepeater7ReleaseEPNS_17TestEventListenerE_ZNK7testing8internal24InternalRunDeathTestFlag4lineEv__copy_move_bPrintByteSegmentInObjectTo_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4rendEv_ZNK7testing8internal2RE7patternEv_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmmEv_ZNSt6vectorISsSaISsEED2Ev_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKca_test_case_name_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS5___copy_move_bEscapeXmlAttribute_ForwardIterator_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEE4baseEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_Bit_reference_ZN7testing8internal24XmlUnitTestResultPrinteraSERKS1_gtest_trace_stack_ZNSt8ios_base4setfESt13_Ios_Fmtflags_ZN7testing8internal12UnitTestImpl20ClearAdHocTestResultEv_ZN7testing8internal15NoExecDeathTestD2Evwords_ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEdeEvstart_timestamp__ZNKSt17_Rb_tree_iteratorISsEdeEv_ZNKSs7compareEjjPKcj_ZNK7testing8UnitTest6PassedEv_Destroy_aux_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5beginEvcopy_backward_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE11_M_allocateEj_ZNSs6insertEjPKc_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE5resetEPS2__ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6rbeginEv_ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEig_help_flagFlagToEnvVar_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEppEia_file_name_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5emptyEvF_OWNER_TIDnonfatally_failed_ZN7testing8internal19UniversalPrintArrayEPKcjPSoReactionToSharding__quad_tenable_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE10deallocateEPS3_j_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_upper_boundEPSt13_Rb_tree_nodeISsES8_RKSs_ZNSt3setIPKcSt4lessIS1_ESaIS1_EEaSERKS5_file_stat_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_beginEvgai_strerror__new_finishcopy_backwardtest_case_to_run_countFLAGS_gtest_show_internal_stack_frames_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6rbeginEvgtest_flag_saver__ZNSt6vectorISsSaISsEE7reserveEjoperator<< kPathSeparatorString_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsEOnTestEndRemoveTrailingPathSeparator~ScopedTraceis_attribute_ZNKSt6vectorIiSaIiEE4rendEv_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7destroyEPS2__ZNKSt6vectorIPcSaIS0_EE12_M_check_lenEjPKc__normal_iterator > >wcsncmp_ZNKSt18_Bit_iterator_baseleERKS__ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE10deallocateERS3_PS2_j_ZNK7testing8internal8FilePath7IsEmptyEv__normal_iterator > >_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEdeEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5frontEv_M_right_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4findERKS1___copy_move_a2_ZNK7testing8internal8FilePath27RemoveTrailingPathSeparatorEvbase_name_M_get_insert_hint_unique_pos_ZN7testing8internal15NoExecDeathTestD0Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Evtowctrans_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_beginEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSs2atEj__uninitialized_copy_aRunTearDownTestCase_ZN7testing17TestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4swapERS4__ZN7testing8internal11CmpHelperLEEPKcS2_xxoperator- >_S_refcount__digits_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_get_Node_allocatorEv__normal_iterator > >_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwj__is_normal_iteratorfixture_class_id_ZN7testing8internal27PrettyUnitTestResultPrinter27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEvswprintf_Value_ZNSs4_Rep10_M_destroyERKSaIcE_ZN7testing4Test8TestBodyEvUniversalPrinterdetailexpr1expr2_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE28_M_get_insert_hint_equal_posESt23_Rb_tree_const_iteratorISsERKSs__uninit_copy_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE15_M_erase_at_endEPS2___are_samefixture_class_id__ZN7testing28FLAGS_gtest_break_on_failureEFLAGS_gtest_print_time_IsMove_ZN7testing8internal29PrintFullTestCommentIfPresentERKNS_8TestInfoEoperator<< __copy_move_backward_a__is_normal_iterator_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EEixEj_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE23_M_get_insert_equal_posERKSs_ZNSt6vectorIiSaIiEE3endEvMutexBase_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6resizeEjS2__ZN7testing14IsNotSubstringEPKcS1_RKSsS3_tv_usec_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE3endEvFindLastPathSeparatorpair, std::_Rb_tree_iterator >diff_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE10deallocateERS4_PS3_j_ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_j_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4rendEvCOLOR_DEFAULT_ZNK7testing8internal12UnitTestImpl21reportable_test_countEvto_char_type_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7destroyEPS3__ZN7testing8internal13CaptureStderrEvwide_c_str_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_equal_ESt23_Rb_tree_const_iteratorISsERKSs_ZN7testing8internal6String32CaseInsensitiveWideCStringEqualsEPKwS3_operator<<_M_set_leaked_ZNSt6vectorIiSaIiEE15_M_erase_at_endEPi_ZN7testing8internal11CmpHelperGTEPKcS2_xx_M_clone_ZNK7testing14TestPartResult11line_numberEvoperator()<__gnu_cxx::__normal_iterator*, std::vector > > >_ZN7testing8internal26GoogleTestFailureExceptionD0Ev_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmiEi_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Evsetf_ZN7testing8TestCase19RunTearDownTestCaseEvFileOrDirectoryExists_ZNSbIwSt11char_traitsIwESaIwEE6appendEjw_ZN7testing8internal17TestEventRepeater11OnTestStartERKNS_8TestInfoEthis_fixture_id_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEdeEv_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKwsetwhas_tests_to_run_ZNK7testing8internal8FilePath21FindLastPathSeparatorEvsigemptyset_ZNSspLEPKcoperator==_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_M_endEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmmEi_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmIEiis_nan_ZNKSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEvvalue_comp_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEpLEi__first_ZN7testing24ValidateTestPropertyNameERKSsRKSt6vectorISsSaISsEECOLOR_RED__copy_move_backward_a2operator<< _ZN7testing8internal17TestEventRepeater22set_forwarding_enabledEb_ZN7testing8internal13ExecDeathTestD2Ev__tmpkRepeatFlag_ZN7testing8internal12UnitTestImplD2Ev_ZNKSs6substrEjj_ZN7testing8internal12UnitTestImpl19current_test_resultEvkey_type_M_rootExtractSummarymbsrtowcsDefinedTestIter_S_beg_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlUnitTestEPSoRKNS_8UnitTestE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_insert_equal_lowerERKSsoperator>=_ZNK7testing8internal12UnitTestImpl22failed_test_case_countEvvalue_str_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11__rb_verifyEvOtherOperand_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE9CreateKeyEv_ZN7testing8internal13PrintStringToERKSsPSo_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4dataEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5frontEvkAlsoRunDisabledTestsFlag_ZN9__gnu_cxx14__alloc_traitsISaISsEE8allocateERS1_j~UnitTestImpl_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEi_S_construct_ZNSt10_Iter_baseIPiLb0EE7_S_baseES0_listeners_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEixEi_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEv_ZN7testing8internal11CmpHelperEQEPKcS2_xx_ZNSt6vectorISsSaISsEE5clearEv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6rbeginEv_ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEixEi__pid_tAbortReason_ConstructkReservedTestCaseAttributes_ZNK7testing8internal10scoped_ptrIKSsEptEv_ZNKSt6vectorISsSaISsEE4backEvint_frac_digits_ZNSt12_Vector_baseIPcSaIS0_EE11_M_allocateEj_ZN7testing8internal16GetAnsiColorCodeENS0_10GTestColorE_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEppEi_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKw_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5emptyEv_ZNKSt17_Rb_tree_iteratorIPKcEptEv_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEppEv_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5___is_normal_iterator_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEdeEv__copy_move_b_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseERKS1_vector >PrintCharAndCodeTo_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE3endEv_ZN9__gnu_cxx13new_allocatorIcE7destroyEPcs1_expressionOutputXmlTestInfo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5clearEv_ZNSt8ios_base9precisionEi_ZN7testing8internal13DeathTestImplD0Ev_ZN7testing8internal19UniversalPrintArrayEPKwjPSo_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4dataEv__uninitialized_move_if_noexcept_a >_M_iend_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE3getEvTearDownEnvironmentkDeathTestCaseFiltersi_tidnewline_anchorst_rdev__sigaction_handler_S_empty_rep_storage__copy_move_a2_ZN7testing8UnitTest3RunEviterator_traitsg_argvs_ZN9__gnu_cxx13new_allocatorIPcE7destroyEPS1__ZNSs6assignEPKcExecDeathTestChildMainlocaltime_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE8capacityEv_ZNKSbIwSt11char_traitsIwESaIwEE7_M_dataEv_ZN7testing8internal14DeathTestAbortERKSs_ZN7testing8internal14CmpHelperSTRNEEPKcS2_S2_S2_value_param___pfnStreamableToStringold_reporter__ZNSs6resizeEjc_ZN7testing32ScopedFakeTestPartResultReporterD2Ev_DestroykMaxUlps_ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSoforwarding_enabled__M_check_len__is_normal_iterator_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11lower_boundERKS1___rb_verify_ZN7testing28FLAGS_gtest_throw_on_failureE_S_bin~ScopedFakeTestPartResultReporterint_n_sep_by_space_ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6__ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE2atEj_IO_marker_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE8max_sizeEv_ZNK7testing14ExitedWithCodeclEi_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEdeEvtest_case_indices__ZN7testing8internal11g_help_flagE_FacetDeathTestOutcome_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE5resetEPS6_print_time__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE18_M_fill_initializeEjRKS1__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5beginEv_ZNSs6appendERKSsjjIsNotContainer_ZN7testing8internal10ParseInt32ERKNS_7MessageEPKcPiFLAGS_gtest_break_on_failure_Destroy_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7addressERS4__ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE12_Vector_impl12_M_swap_dataERS5_re_nsubGetAbsolutePathToOutputFilehas_new_fatal_failure_INTERCEPT_ONLY_CURRENT_THREADiterator_traits_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEdeEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4swapERS4_bytes_last_read_BI1_BI2_ZNKSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE19_M_get_Tp_allocatorEvptr__ZN7testing8UnitTest9listenersEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEE4baseEvai_socktype__is_move_iterator_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEiPrintFullTestCommentIfPresent_S_truncscoped_ptr, std::allocator > >_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEv_ZNKSs7compareEPKc__pad4_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5beginEvset_elapsed_time_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEixEi_S_ios_iostate_end_ZN7testing8internal17GetCapturedStderrEvFLAGS_gtest_coloroperator<< ~new_allocator~ThreadLocal_ZN7testing8internal8FilePath22GenerateUniqueFileNameERKS1_S3_PKc_ZNSbIwSt11char_traitsIwESaIwEE4_Rep12_S_empty_repEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx13new_allocatorIwE7destroyEPw_ZNKSt6vectorISsSaISsEE4sizeEv__uninitialized_move_if_noexcept_a >_ZNKSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13get_allocatorEvoperator<< strtoll~UnitTestReadReportFailureInUnknownLocation_ZN7testing8internal12UnitTestImpl28CurrentOsStackTraceExceptTopEi__baseInt32FromGTestEnv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEdeEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >user_msgerrnum_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEixEi__copy_move_backward_a2emptyinstance_ZN7testing8internal29ParameterizedTestCaseRegistryaSERKS1_val1_ss__copy_move_b__end_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE10deallocateERS3_PS2_jobject_ZN7testing8internal14CapturedStream11GetFileSizeEP8_IO_FILE_ZN7testing18FLAGS_gtest_repeatE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEdeEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_maximumEPKSt18_Rb_tree_node_baseDeleteSelf___normal_iterator > >_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S6_S6_tz_minuteswestkDefaultOutputFile_M_valptr_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE18_M_fill_initializeEjRKS1__ZN7testing8internal17TestEventRepeaterD0Ev_ZNKSt23_Rb_tree_const_iteratorIPKcE13_M_const_castEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEpLEi_S_internal_ZN7testing8internal10scoped_ptrISsE7releaseEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEdeEvconst_referenceOnEnvironmentsTearDownStart__uninit_copy_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE10_S_on_swapERS4_S6__ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7addressERKS2_output_dir_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE3endEvset_last_death_test_message_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5beginEv_ZN7testing16AssertionSuccessEvport_num_COLOR_YELLOWrebindreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSsreservedeath_test_index_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEixEi_M_disjunct_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwj_M_leak_ZNSs7_M_leakEv~Arguments_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEv_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPiS1_EERKierrors_str__is_move_iteratorg_executable_path_ZNKSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE13get_allocatorEvForEach, void (*)(testing::TestInfo*)>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_insert_equalERKSsrm_so_ZNSt6vectorIPcSaIS0_EE4swapERS2_elapsedfclose_ZN7testing8internal8FilePath11ConcatPathsERKS1_S3__S_unitbuf_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEixEi_ZNKSt4lessIPKcEclERKS1_S4_kHexEscapeFLAGS_gtest_internal_run_death_testAssertionSuccess_ZNKSbIwSt11char_traitsIwESaIwEEixEj_ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEjRKS0__ZNKSs2atEj_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE7releaseEv_ZNK7testing8internal13FloatingPointIdE4bitsEv_ZNKSbIwSt11char_traitsIwESaIwEE6_M_repEvline__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5emptyEvoperator< , std::allocator >_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE17_S_select_on_copyERKS3__ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEixEioriginal_dir_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZN7testing8internal7PrintToEwPSo_ZNSbIwSt11char_traitsIwESaIwEE6rbeginEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_insert_lowerEPSt18_Rb_tree_node_baseRKSs_M_parent_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5beginEv_ZNKSbIwSt11char_traitsIwESaIwEE6rbeginEv6ldiv_t_ZNKSt17_Rb_tree_iteratorIPKcEeqERKS2__Destroyiterator_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_lower_boundEPKSt13_Rb_tree_nodeISsES9_RKSs_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE8max_sizeEv_M_length_ZN7testing8internal11CmpHelperGEEPKcS2_xxchar_traitsFLAGS_gtest_random_seed_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE10deallocateERS3_PS2_j_Setfill_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4backEvreverse_iterator >pthread_mutex_init_ZNKSs9_M_ibeginEv_ZN7testing8internal6String28CaseInsensitiveCStringEqualsEPKcS3__ZN7testing8internal17TestEventRepeater13OnTestCaseEndERKNS_8TestCaseE__miter_baseTypeWithSize<4u>_ZNSt12_Vector_baseISsSaISsEE19_M_get_Tp_allocatorEv_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE6insertERKS1__ZN7testinglsERSoRKNS_14TestPartResultEHasOneFailureCmpHelperSTREQ_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8pop_backEvdefined_test_names__ZNK7testing10TestResult15test_propertiesEvCmpHelperSTRCASENE_ZN7testing8UnitTestD2Ev_ZNSt11char_traitsIwE2ltERKwS2__ZN7testing18FLAGS_gtest_outputE_Iter_equals_valexit_code__ZNSt6vectorIiSaIiEE7reserveEj_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEi_Ios_SeekdirListTestsMatchingFilter_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_rebind, std::allocator > >_ZN7testing8internal37FormatCompilerIndependentFileLocationEPKci_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEvGenerateUniqueFileName_ZNKSt6vectorISsSaISsEE2atEjchar_traitskMaxBiggestInt__builtin_puts_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolder7pointerEvoutput_name__addressoffile_size_ZNSt8ios_base5widthEi_ZN7testing8internal12UnitTestImpl23ClearNonAdHocTestResultEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___alloc_traits >GetThreadCount_ZN7testing8UnitTest14RecordPropertyERKSsS2_~GTestMutexLock_M_dataplus__uninitialized_move_if_noexcept_a >_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE7reserveEj~basic_ostreamequal_range_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_plural_form_M_pred_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE10_S_on_swapERS4_S6__ZNK7testing8internal12UnitTestImpl11GetTestCaseEi_M_left__builtin_putcharnothrow_t__destroy__builtin_fputsnew_test_case_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE8max_sizeEv_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEixEjkDeathTestLivedparameterized_tests_registered__ZNKSs13find_first_ofEPKcjForEach, void (*)(testing::TestCase*)>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsE_ZNSs18_S_construct_aux_2EjcRKSaIcE_ZN7testing10TestResult20ValidateTestPropertyERKSsRKNS_12TestPropertyE_Vector_base >INTERCEPT_ALL_THREADS_ZN7testing8TestInfoC2ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseEShouldRunTestOnShard_S_synced_with_stdioInt32FromEnvOrDieIsEmptyTestFailedpositive_sign_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKcshard_index_env__lockmkstempKilledBySignal__in_chrg_ZN7testing8internal27PrettyUnitTestResultPrinterD0Ev_ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2__ZNSt11char_traitsIwE11to_int_typeERKw__normal_iterator, std::allocator > >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_range_checkEj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_Estatement__ZN7testing8internal13ExecDeathTest10AssumeRoleEv__builtin_strchr_ZN9__gnu_cxx14__alloc_traitsISaIPcEE17_S_select_on_copyERKS2_kFatalFailuretest_idMSG_CMSG_CLOEXEC_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEdeEvGetEnvchild_pid___miter_base_ZNSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEv~AssertionResultRegisterTests_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS1_ERKS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNK7testing8TestCase12elapsed_timeEv_ZNSs5clearEvSetUpEnvironmentin_color_mode_ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE8max_sizeEv_M_lower_bound_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE__ptr_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4sizeEv_ZN7testing8internal17TestEventRepeater6AppendEPNS_17TestEventListenerECreateKey__copy_move_b_ZN7testing8internal12UnitTestImplC2EPNS_8UnitTestEoperator<< _ZNSt3setISsSt4lessISsESaISsEE11equal_rangeERKSs_ZNSt6vectorIN7testing12TestPropertyESaIS1_EEixEj_ZNKSt6vectorISsSaISsEE5frontEv_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE17_M_create_storageEj_ZN7testing8internal13FloatingPointIdE24SignAndMagnitudeToBiasedERKyxmloutThreadLocal > >_ZN7testing8internal17Int32FromGTestEnvEPKci_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_upper_boundEPKSt13_Rb_tree_nodeIS1_ESB_RKS1__Predicateiterationvector >_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE3getEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt17_Rb_tree_iteratorIS1_E_ZN7testing15AssertionResultC2ERKS0__ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_string_value__c1__c2__alloc_traits >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_range_checkEj_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEixEi_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE8max_sizeERKS4__ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE8max_sizeERKS3__M_finishactual_predicate_valuewcstof_ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE_ZNK7testing8internal12UnitTestImpl17current_test_caseEvwcstokwcstol_ZNKSs16find_last_not_ofERKSsj_ZNKSbIwSt11char_traitsIwESaIwEE6lengthEv_ZN9__gnu_cxx13new_allocatorIPKcE9constructEPS2_RKS2_operator== >iterator_typeInitDeathTestSubprocessControlInfo_S_failbit__normal_iterator__ch_ZN7testing8internal23DefaultDeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE_vptr.DeathTest_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_create_nodeERKS1__ZN7testing29FLAGS_gtest_stack_trace_depthESOCK_SEQPACKETGetElementOrtest_to_run_count_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE10deallocateERS4_PS3_j_ZN7testing8internal35DefaultGlobalTestPartResultReporteraSERKS1__ZN7testing13PrintToStringIPKcEESsRKT___int32_t__normal_iterator > >kMaxStackAlignment_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7destroyEPS4_operator<< UnshuffleTests_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE9push_backERKS1__ZNK7testing8internal12UnitTestImpl17gtest_trace_stackEvpthread_key_deletest_mtimuncaptured_fd__ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs_ZNSt6vectorISsSaISsEEixEjtm_zone_Bit_type_ZN7testing8UnitTestaSERKS0__ZNKSt12_Vector_baseISsSaISsEE13get_allocatorEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5beginEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE19_M_get_Tp_allocatorEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4backEv_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE__distance_ZN7testing8internal9Arguments11AddArgumentEPKc_ZNSt6vectorIPcSaIS0_EE6resizeEjS0__ZNKSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE13get_allocatorEvfunctorVerifyRegisteredTestNamesFormatCountableNounPrintBytesInObjectToPrintCharAndCodeTo_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6resizeEjS2__ZN7testing8internal11CmpHelperLTEPKcS2_xx__is_move_iteratorbinary_ZNK7testing8TestInfo10should_runEv_ZN7testing8internal11ScopedTraceaSERKS1_rebindEscapeXmlFormatIntWidth2_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEptEv_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE17_M_create_storageEj__uninitialized_copy_a_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4backEv_Rb_tree_node, std::allocator > >_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE13_M_deallocateEPS1_jcopy_backwardStatStruct__pthread_mutex_sGetInstance_S_construct_aux_2skip_count_ZN7testing8internal25ReportInvalidTestCaseTypeEPKcS2_ifile_name__ZNK7testing10TestResult16total_part_countEvsa_familyFLAGS_gtest_filter_ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_shard_index_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmIEiGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2 -fPIC__dso_handle_ZN7testing8internal18CmpHelperSTRCASEEQEPKcS2_S2_S2__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEplEi_ZN7testing8internal17TestEventRepeater16OnTestProgramEndERKNS_8UnitTestE_ZNSs10_S_compareEjj_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmiEi_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_a_current_test_case_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4swapERS3_for_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestCase*)>_ZNKSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE19_M_get_Tp_allocatorEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE15_M_erase_at_endEPS2__ZNK7testing8TestCase14test_info_listEvRemoveInvalidXmlCharactersnew_allocator >_ZNKSt13_Bit_iterator13_M_const_castEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_fill_assignEjRKS3__ZN7testing32ScopedFakeTestPartResultReporteraSERKS0_ForEach, void (*)(testing::TestEventListener*)>_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_range_checkEj_ZNSt12_Vector_baseISsSaISsEE17_M_create_storageEj_ZNKSs17find_first_not_ofERKSsj_ZN9__gnu_cxx13new_allocatorISsE7destroyEPSs7lldiv_tregs_allocated_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEi_ZN7testing18TestEventListeners23SetDefaultResultPrinterEPNS_17TestEventListenerE_M_offset_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4dataEv_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEvuninitialized_copy_ZNK7testing8TestInfo10type_paramEvint_p_cs_precedes_ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE6rbeginEv__uninitialized_copy_a<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*, testing::internal::TraceInfo>bsearch_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_range_checkEjshould_shard_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE12_M_check_lenEjPKc_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEplEimon_grouping_M_deallocate_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmmEiParseGoogleTestFlagsOnlyImpl_ZNKSs4rendEv_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmmEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EETestCasePassed_ZN7testing28FLAGS_gtest_death_test_styleE_M_replace_safe_ZNK7testing8internal12UnitTestImpl22test_case_to_run_countEvGetCapturedStdout__numeric_traits_integer_ZN7testing8internal24HasNewFatalFailureHelperD2Ev_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEjw_M_beginbasic_istream >_ZN7testing8internal38DefaultPerThreadTestPartResultReporteraSERKS1___kindlow_byte_Destroy >_old_offsetmbstowcs_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE15_M_erase_at_endEPS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4rendEv_ZNKSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE13get_allocatorEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE8max_sizeERKS4__ZNSs7replaceEjjPKcFormatBooloperator<< basic_ios >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE3endEvuninitialized_copy~basic_streambuf_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE7destroyERS3_PS2__ZNKSt18_Bit_iterator_baseeqERKS__cur_column_ZN7testing4Test18HasNonfatalFailureEvGetArgvsForDeathTestChildProcessoperator<< _ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE3endEvFormatEpochTimeInMillisAsIso8601_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_leftmostEv_ZNSt11char_traitsIcE6lengthEPKcFormatTestCount_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE23_M_get_insert_equal_posERKS1__ZN7testing8internal7PrintToEaPSo_S_construct_auxOnTestProgramEndreverse_iterator<__gnu_cxx::__normal_iterator > > >_M_value_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4sizeEvpthread_self_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Ev~_Rb_tree_impl_Tp1ShouldRunTestCase_ZNK7testing10TestResult16death_test_countEv__pred_iter_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE17_S_select_on_copyERKS3__ZNK7testing8internal24InternalRunDeathTestFlag4fileEv__copy_move_b_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv__destroyset_spawned_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5emptyEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8pop_backEv__copy_move_a2GTEST_INFOtime_structFileNo_ZN7testing8internal14CapturedStreamaSERKS1_key_compDefaultPrintNonContainerTo_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE8max_sizeERKS5__ZNSt6vectorIiSaIiEE8pop_backEv_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE_ZNSt6vectorIiSaIiEE4backEvvalue_messageGTEST_FATAL_ZNKSs4_Rep12_M_is_leakedEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11lower_boundERKSs_ZN7testing8TestCase10TestFailedEPKNS_8TestInfoEoperator[]_ZN7testing8internal24XmlUnitTestResultPrinter19IsValidXmlCharacterEc_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4swapERS4__ZN7testing10TestResult5ClearEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx13new_allocatorIPKcE7addressERKS2_strncmp_ZNKSs16find_last_not_ofEPKcjj__n2_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEvwint_t_ZNK7testing8internal24InternalRunDeathTestFlag8write_fdEv__cxa_guard_releasePrintCharsAsStringTo_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZNSt12_Vector_baseIiSaIiEE12_Vector_impl12_M_swap_dataERS2_mblen__blkcnt_t__are_sameGetBoolAssertionFailureMessage_ZN7testing8internal23DefaultDeathTestFactoryD2Evoperator<< IsDirconnect_S_select_on_copy_ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv_ZN7testing28FLAGS_gtest_catch_exceptionsE__uninitialized_copy_a_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_get_nodeEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4dataEv_ZN7testing8internal11ScopedTraceC2EPKciRKNS_7MessageE__nlink_tUniversalPrintexpected_value_ZN7testing8internal27PrettyUnitTestResultPrinter13OnTestCaseEndERKNS_8TestCaseE_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4sizeEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE7destroyERS3_PS2__S_ios_fmtflags_end_ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_jAssertionFailure_ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi_M_c__niter_base_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE12_Vector_impl12_M_swap_dataERS5__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmIEi~scoped_ptr_M_n_M_p_ZNSt10_Iter_baseIPN7testing12TestPropertyELb0EE7_S_baseES2__M_t_ZNKSbIwSt11char_traitsIwESaIwEE8max_sizeEv_ZNKSt6vectorISsSaISsEEixEjMakeFileName_ZNKSt5ctypeIcE5widenEc_M_set_length_and_sharable_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_NS4_IPKwS2_EES9___next_Rb_tree_const_iterator~_Vector_base_ZNKSbIwSt11char_traitsIwESaIwEE5beginEv__pfa_line_ZNSt11char_traitsIwE6lengthEPKw_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSt3setISsSt4lessISsESaISsEE8max_sizeEv_ZN7testing8TestCase14set_should_runEb_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEi_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEv_M_dataintercept_mode~TestCase_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8capacityEvexpected_predicate_value_IO_buf_endshort unsigned int_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEpLEi_IO_backup_base_ZNSs6appendEPKcj_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tagTestPartFatallyFailed_ZN7testing11Environment8TearDownEv_ZNK7testing8internal10scoped_ptrISsE3getEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_key_reportable_disabled_test_count_M_create_storageconstruct_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5beginEv__copy_move_a2_ZN7testing8internal6String23EndsWithCaseInsensitiveERKSsS3__ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE9constructEPS3_RKS3_iterator_traits_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEpLEi_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8max_sizeEv_ZN7testing8internal13CaptureStdoutEv__normal_iterator > >StringFromGTestEnv__s2_M_insert_equal__ZNKSs17find_first_not_ofEPKcjj_S_ios_seekdir_end_ZN7testing8internal35FLAGS_gtest_internal_run_death_testE_M_disposeGetCurrentOsStackTraceExceptTopreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >ios_base__copy_move_backward_a2_ZNSt17_Rb_tree_iteratorISsEppEv_shortbuf_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE8allocateERS4_j_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EEaSERKS4_kDisableTestFilter_S_goodbit_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_create_nodeERKSs_M_insert_timespec_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5countERKS1__ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE12_Vector_impl12_M_swap_dataERS6__ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE10deallocateERS4_PS3_j_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4sizeEvTypeWithSize<8u>kTestsuites_vptr.TestPartResultReporterInterface_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7addressERS2_this_test_name_Destroy*>_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_fill_assignEjRKS1_ChopLowBits_ZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczFDOpenIsNormalizableWhitespaceParseNaturalNumber_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjjTEST_THREW_EXCEPTION_ZNSt6vectorIN7testing14TestPartResultESaIS1_EEaSERKS3_FormatCxxExceptionMessage_ZN7testing8internal24XmlUnitTestResultPrinter13EscapeXmlTextEPKcnegative_signoperator delete []__miter_basebegin_string_quoteoperator!= >__copy_move_a2term_ZNK7testing8UnitTest17current_test_infoEv__destroy_ZN7testing18TestEventListeners7ReleaseEPNS_17TestEventListenerE_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7addressERS3__ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestEkProtobufOneLinerMaxLength_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmmEiset_status_ZN7testing8internal13FloatingPointIdE8InfinityEvCmpHelperEQallowed_names_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE7destroyERS4_PS3__ZNK7testing14KilledBySignalclEi_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5beginEv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmiEioperator<< _ZNK7testing15AssertionResult15failure_messageEvlesselement_nameStringStreamToString_ZN7testing8internal29ParseInternalRunDeathTestFlagEvGenerate_ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE8max_sizeEvpassed_ZN7testing8internal17TestEventRepeater9OnTestEndERKNS_8TestInfoE_ZNKSt13_Bit_iteratordeEv_ZN7testing8internal20SingleFailureCheckerD2Evtuple<>case_listcondition_ZN7testing8internal10scoped_ptrISsE5resetEPSs_ZN7testing8internal5MutexD2Ev~vector_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE7destroyERS5_PS4__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_mbtowccopy_backward_ZNSs4rendEv__cxa_end_catch__normal_iterator > >_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE19_M_get_Tp_allocatorEv__is_move_iterator_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEpLEi_ZNSs7replaceEjjRKSsjjCmpHelperGE_ZN7testing8internal12UnitTestImpl32SuppressTestEventsIfInSubprocessEvmax_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE18_M_fill_initializeEjRKS2___compar_fn_t__copy_move_backward_a*, std::basic_string*>CmpHelperGT_ZN7testing8internal24HasNewFatalFailureHelperaSERKS1_parent_table_sizetotal_shards__pid_type__pathGTestColoroperator()<__gnu_cxx::__normal_iterator > >_ZN7testing8internal26ThreadLocalValueHolderBaseD0Evoperator<< _ZN7testing8internal14CapturedStream17GetCapturedStringEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4rendEv__align__alloc_traits >_ZN7testing17TestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestEiterator_traits_ZNSt11char_traitsIcE11eq_int_typeERKiS2__ZN9__gnu_cxx13new_allocatorISsE8allocateEjPKv_ZNKSt13_Bit_iteratorixEi_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE8allocateEjPKvflush >_ZNKSt6vectorISsSaISsEE14_M_range_checkEj_ZN7testing8internal12UnitTestImpl23ListTestsMatchingFilterEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5beginEv~MessageSetValue_ZNK7testing14TestPartResult17nonfatally_failedEv_ZN7testing8internal15ParseStringFlagEPKcS2_PSs~NoExecDeathTest_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE7reserveEj_ZNSs6assignERKSs_ZNSs6appendEjc_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEv__normal_iterator > >_ZNSs4_Rep8_M_cloneERKSaIcEj_ZN7testing23FLAGS_gtest_random_seedE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6assignEjRKS2_st_nlink_ZNK7testing18TestEventListeners22EventForwardingEnabledEvkFilterFlag__copy_move_backward_a2_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE18_M_fill_initializeEjRKS2_basic_stringbuf, std::allocator >_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEEaSERKS6_MSG_PROXY_ZNSt11char_traitsIwE6assignEPwjw_S_compare_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_M_insert_EPSt18_Rb_tree_node_baseS9_RKS1__ZN7testing8internal16BoolFromGTestEnvEPKcb_ZNKSs5rfindEcj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_minimumEPKSt18_Rb_tree_node_base__miter_base_ZN9__gnu_cxx14__alloc_traitsISaIPcEE8allocateERS2_j_ZN7testing8internal24XmlUnitTestResultPrinter21OutputXmlCDataSectionEPSoPKc__uninitialized_copy_a<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*, std::basic_string >_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwjpipe_fd__sighandler_ttz_dsttime_M_put_node_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4sizeEv__max_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEpLEi_S_leftai_family__begfdopen__copy_mfind_first_not_ofhas_new_fatal_failure_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE10deallocateEPS3_jlong double_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5emptyEva_status_ZN7testing8TestCase14test_info_listEvfilter_flaga_line_number_ZNK7testing8TestCase6FailedEv_ZNK9__gnu_cxx17__normal_iteratorIPcSsEplEi_Iter_ZNKSs13get_allocatorEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE11_M_allocateEj_ZN7testing17FLAGS_gtest_colorEreverse_iterator<__gnu_cxx::__normal_iterator > > >__k1munmap_ZN7testing8internal17StreamingListener9UrlEncodeEPKclocaleconvUniversalPrintCharArrayoperator!= >_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE8allocateERS4_j_ZNK7testing8internal14TestCaseNameIsclEPKNS_8TestCaseE__cxa_free_exception_M_mutate_Rb_tree_decrement_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_leftmostEvkMaxCodePoint1kMaxCodePoint2kMaxCodePoint3kMaxCodePoint4wstring_S_construct__pred_iter__copy_move_backward_a__clock_t__fmtfl_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5emptyEvkStackTraceMarker_ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoECmpHelperLE_ZNSt18_Rb_tree_node_base10_S_minimumEPS_rebind_ZN7testing8internal15TestFactoryBaseaSERKS1_CmpHelperLTinternal_run_death_test_flag_ZNKSt3setISsSt4lessISsESaISsEE5countERKSs_ZN7testing8internal21UniversalTersePrinterIPKcE5PrintES3_PSos2_expression_ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT__Rb_tree, std::less, std::allocator >_S_on_swapfirst_fixture_id_ZN7testing4Test14RecordPropertyERKSsS2___copy_move_a__copy_move_backward_a2_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE10deallocateERS5_PS4_j_ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs__uninit_copy_ZN7testing14IsNotSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEpLEi_M_get_node__mempositive_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4swapERS4__ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE10value_compEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE15_M_erase_at_endEPS3_test_part_results_CmpHelperNETestPartNonfatallyFailed_S_uppercase_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E5valueE_ZNK7testing8TestCase10should_runEvcopy_backwardGetTimeInMillis_ZNSt6vectorIPN7testing8TestInfoESaIS2_EEaSERKS4__ZNKSt6vectorIiSaIiEE6rbeginEv_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEplEiresult_typeoperator<< >_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcE_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5emptyEvflip_ZN7testing8TestInfo3RunEvoperator- >_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_fill_assignEjRKS2__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmiEiFLAGS_gtest_also_run_disabled_testsaddresslconvregfreeflag_enda_regexReadEntireFile_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEptEv_ZNKSbIwSt11char_traitsIwESaIwEE4sizeEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5frontEvmkdir_ZNKSbIwSt11char_traitsIwESaIwEE3endEv_ZNSt6vectorISsSaISsEE6insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSsDIEDkQuoteBegin_ZNSt12_Vector_baseIPcSaIS0_EE19_M_get_Tp_allocatorEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE10deallocateEPS4_jeq_int_type_ZNK7testing8internal13FloatingPointIdE8sign_bitEvgtest_output_flagnpos_ZN7testing8TestCase10TestPassedEPKNS_8TestInfoE_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE6rbeginEvabs_error_expr_ZNSt6vectorISsSaISsEE5frontEvHasFatalFailure_ZNSt18_Rb_tree_node_base10_S_maximumEPKS_strdupinternal2__uninitialized_copy_aoperator- >_ZN7testing4Test10HasFailureEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmiEi_ZNKSs6_M_repEv__uninit_copy_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE8allocateEjPKv__normal_iteratorpost_flag_parse_init_performed__ZN7testing8internal32FormatEpochTimeInMillisAsIso8601Ex_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE7releaseEv_ZN7testing8internal17g_executable_pathEstack_grows_down_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11upper_boundERKS1_posix_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE3endEvvector_ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT__ZNK7testing8internal9MutexBase10AssertHeldEv_ZN7testing8internal17TestEventRepeater15OnTestCaseStartERKNS_8TestCaseE_M_allocate_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSs6rbeginEvnum_readpstr_M_erase_aux_Construct_ZNSt6vectorIiSaIiEE9push_backERKi__minOutputXmlAttribute_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6rbeginEvkTestShardStatusFile_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE3endEv__ownerSetup_should_be_spelled_SetUpoperator<< _ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal17GetCapturedStreamEPPNS0_14CapturedStreamE_Construct, char const*>_ZNKSbIwSt11char_traitsIwESaIwEE7_M_iendEv_ZN7testing8internal11ShouldShardEPKcS2_b_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE17_M_create_storageEj_ZN7testing10TestResultC2Ev_ZNSs4_Rep15_M_set_sharableEvsa_family_t_M_bump_up_ZN7testing8internal18StreamableToStringIiEESsRKT__ZN7testing8internal17TestEventRepeater18OnTestIterationEndERKNS_8UnitTestEi_ZNSbIwSt11char_traitsIwESaIwEE5beginEvswapiterator_traits_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5emptyEv_ZSt16__throw_bad_castv_ZNK7testing8internal12UnitTestImpl16total_test_countEv_vtable_offsetSetUpTestCaseFuncwctrans_t_ZNK7testing8UnitTest11random_seedEv__addressofOVERSEE_TEST_ZNKSt3setISsSt4lessISsESaISsEE8key_compEv_ZN7testing8internal24XmlUnitTestResultPrinterC2EPKcdot_extension_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_set_forwarding_enabled_M_impl_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Evsi_sigvalvwprintf_ZN7testing8TestInfo26increment_death_test_countEv_M_range_check_ZNSt23_Rb_tree_const_iteratorIPKcEppEipremature_exit_filepath~GTestFlagSaver_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5_CheckedDowncastToActualType::ValueHolder, testing::internal::ThreadLocalValueHolderBase>_ZNSt23_Rb_tree_const_iteratorIPKcEppEv_ZNK7testing8internal12UnitTestImpl12elapsed_timeEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8key_compEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE8capacityEv_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7addressERKS3__ZNK7testing15AssertionResultcvbEvCountIf, bool (*)(const testing::TestInfo*)>_ZNK7testing8TestInfo14test_case_nameEv_ZN7testing8internal2RE9FullMatchERKSsRKS1__ZN7testing8internal13FloatingPointIdE38DistanceBetweenSignAndMagnitudeNumbersERKyS4__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE18_M_fill_initializeEjRKS2__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEdeEvkStdOutFileno_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEEaSERKS5__ZNKSt6vectorISsSaISsEE8capacityEv_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS3_S3_fastst_modean_index_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8capacityEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE8allocateERS4_jiterator_traits_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE_ZNSt6vectorISsSaISsEE8pop_backEv_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEplEi_ZNKSt6vectorIiSaIiEE14_M_range_checkEj_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEaSERKS5__InputIterator_S_skipws_GLOBAL__sub_I_gtest_all.ccdest_ptrpthread_getspecific_ZNKSt6vectorISsSaISsEE8max_sizeEv_ZNK7testing8internal12UnitTestImpl17current_test_infoEv_ZN9__gnu_cxx14__alloc_traitsISaIiEE10deallocateERS1_Pij__copy_move_backward_a2_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__M_leftmost_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE6rbeginEv_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8max_sizeEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8pop_backEv_ZN7testing8TestCase12TestDisabledEPKNS_8TestInfoE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEixEibits__ZN7testing22EmptyTestEventListenerD0Ev__uninitialized_move_if_noexcept_a >_ZN7testing17TestEventListeneraSERKS0___uninit_copy_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4swapERS5__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE24_M_get_insert_unique_posERKSs_M_get_insert_hint_equal_pos_M_move_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_rightEPSt18_Rb_tree_node_base__niter_base_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv_ZNSs13_S_copy_charsEPcS_S__ZNSt10_Iter_baseIPPN7testing17TestEventListenerELb0EE7_S_baseES3__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6resizeEjS1__ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEE4baseEvoperator<< >_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_jnext_seed_ZNKSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE19_M_get_Tp_allocatorEv_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_range_checkEjdefault_result_printer_pfile_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag_ZN9__gnu_cxx13new_allocatorIPKcE10deallocateEPS2_j_ZN7testing8internal24XmlUnitTestResultPrinter9EscapeXmlERKSsbwctob_ZNKSt6vectorISsSaISsEE5beginEv_IO_save_end_ZNK7testing8internal12UnitTestImpl19disabled_test_countEvst_gidrelative_path__are_same_ZN7testing8internal9DeathTest11LastMessageEv__normal_iterator > >_ZN7testing8internal12UnitTestImpl20set_catch_exceptionsEb_ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE__ioinit_ZNKSs8capacityEv_DestroykFractionBitCount__gid_t__are_same, std::allocator >*, std::basic_string, std::allocator >*>new_allocatorFClose_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_bIsUtf16SurrogatePair_ZNK7testing8UnitTest17current_test_caseEv_ZNSs5eraseEjj_ZNKSs4dataEv_ZN7testing8internal18OsStackTraceGetteraSERKS1_construct_ZNSt23_Rb_tree_const_iteratorISsEppEi_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEEaSERKS4_PrintAsCharLiteralTo_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmIEistr_len_ZNSt23_Rb_tree_const_iteratorISsEppEv__uninitialized_move_if_noexcept_a >UniversalPrint >ClearNonAdHocTestResult_ZNKSt23_Rb_tree_const_iteratorIPKcEptEv_ZN7testing17TestEventListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal6String15FormatIntWidth2Eioperator== >_ZNKSs6lengthEvSetDefaultXmlGenerator_ZN7testing8internal16WideStringToUtf8EPKwiwcsftime_ZNKSs8max_sizeEv~DefaultGlobalTestPartResultReporter_FwdIterator_ZN7testing8internal14CmpHelperSTREQEPKcS2_PKwS4__ZN7testing8internal6IsTrueEbtear_down_tc_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE17_M_create_storageEj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6resizeEjS2__ZN7testing8internal17StreamingListener6SendLnERKSs_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEplEi_ZNK7testing8TestCase19disabled_test_countEv_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_leakedEv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZNSt17_Rb_tree_iteratorISsEmmEi_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_maximumEPSt18_Rb_tree_node_base_ZN7testing8TestCase18GetMutableTestInfoEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEplEiholder_base_ZNSt17_Rb_tree_iteratorISsEmmEv_ZNSt12__alloc_swapISaISsELb1EE8_S_do_itERS0_S2_argumentpartial_regex__ZN7testing8internal19TypedTestCasePState11AddTestNameEPKciS3_S3_ConcatPaths_ZN7testing8internal15TestFactoryBase10CreateTestEv__pointer_ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Evnegative_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE10_S_on_swapERS5_S7__ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE9constructEPS3_RKS3__S_boolalpha_ZNSbIwSt11char_traitsIwESaIwEE6assignEjw_ZNK7testing8internal12UnitTestImpl17test_to_run_countEvtest_shard_file__uninit_copy__initialize_pAppendMessage_ZN9__gnu_cxx14__alloc_traitsISaISsEE10_S_on_swapERS1_S3_targetarg_string_ZN7testing8TestCase12ShuffleTestsEPNS_8internal6RandomE_ZNK7testing8UnitTest17test_to_run_countEv_ZN7testing8internal27OsStackTraceGetterInterface17CurrentStackTraceEii__copy_move_backward_anew_allocatortest_info_listHONOR_SHARDING_PROTOCOL_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4backEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4rendEvelapsed_time__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4dataEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4backEv_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_execveg_in_fast_death_test_childTestPropertiesAsXmlAttributesdummy__ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev_ZN7testing8internal20StringStreamToStringEPSt18basic_stringstreamIcSt11char_traitsIcESaIcEEstream_name_ZN9__gnu_cxx13new_allocatorIiE10deallocateEPij_Pointer_Rb_tree_insert_and_rebalance_ZNSt11char_traitsIwE6assignERwRKwuninitialized_copyin_subprocess_for_death_test_ZNK9__gnu_cxx13new_allocatorIPKcE7addressERS2_for_each > >, void (*)(testing::Environment*)>_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmIEifound_Destroy_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEdeEv_ZN7testing8internal29ParameterizedTestCaseInfoBase13RegisterTestsEvShouldUseColorcopy_backwarditerator_categoryPrintXmlUnitTest_S_eofbit_ZN7testing8internal17TestEventRepeater16OnTestPartResultERKNS_14TestPartResultEoperator<< _Iter_predfailed_test_countassertion_result_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_valueEPKSt13_Rb_tree_nodeISsE__nusers_ZNKSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE13get_allocatorEv_M_capacityoperator== >~Init_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_S_leftEPKSt18_Rb_tree_node_base_filenoDoubleLEoperator|=severity_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EEixEj_ZNSt11char_traitsIcE6assignERcRKcCaptureStderr_ZNK7testing8internal8FilePath19RemoveDirectoryNameEvCreateTest~TestPartResult_ZNK7testing8internal13FloatingPointIdE6is_nanEvoperator<< _ZN7testing8internal18StreamableToStringIPcEESsRKT__ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmIEi_ZN7testing8internal9DeathTest10AssumeRoleEv_ZNKSt6vectorIiSaIiEE2atEjHasNonfatalFailureFormatWordListvector >_ZNSt6vectorIiSaIiEE5clearEv_M_color_ZN7testing8TestCase13ShouldRunTestEPKNS_8TestInfoE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEixEi_ZNSbIwSt11char_traitsIwESaIwEEaSERKS2__ZN7testing8internal8GTestLog9GetStreamEv_ZN7testing8internal27OsStackTraceGetterInterfaceaSERKS1_internal_flag_ZNSt12_Vector_baseISsSaISsEE11_M_allocateEjignore_sigprof_actionOnTestIterationEnd_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5frontEvscoped_ptr_ZNKSs3endEv_ZNK7testing8internal8FilePath6stringEv_ZNSt6vectorIPcSaIS0_EE6assignEjRKS0__ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE10deallocateEPS3_j_ZN7testing8internal13FloatingPointIfE38DistanceBetweenSignAndMagnitudeNumbersERKjS4_getpagesize_ZNKSt6vectorIPcSaIS0_EE14_M_range_checkEj_ZNSt6vectorIPcSaIS0_EE14_M_fill_assignEjRKS0__ZNK7testing8internal10scoped_ptrISsEdeEv_ZNSo5writeEPKci_ZN7testing22FLAGS_gtest_list_testsE_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_jctype__socklen_t_ZNSt11char_traitsIwE4moveEPwPKwj_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEplEiFloatLEStreamWideCharsToMessage_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6resizeEjS1__ZN7testing10TestResult26increment_death_test_countEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEoperator==, std::allocator >partial_regexsival_ptrHasSameFixtureClass_Destroyproperty_name_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE2atEj_M_refcountis_runnable_ZN7testing8internal17TestEventRepeater22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZNK7testing14TestPartResult4typeEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEplEi~TestInfo__dev_t_ZN7testing8internal17StreamingListener12SocketWriterD2Ev_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_lower_boundEPSt13_Rb_tree_nodeISsES8_RKSsIsTrue_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE19_M_get_Tp_allocatorEv_M_bump_downfull_pathnameEXECUTE_TESTMSG_ERRQUEUE__uninitialized_copy_a*, std::basic_string*, std::basic_string >new_allocator_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsES7__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZN7testing8internal20ExitedUnsuccessfullyEi_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4sizeEv_ZN7testing7MessagelsEPKw_Bit_iterator_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmIEi_ZNK7testing8UnitTest16total_test_countEvfseek~DeathTestFactory_ZN7testing18TestEventListenersC2Evbasic_stringstream, std::allocator >ptrdiff_t_ZN7testing8internal14ShouldUseColorEb_ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EEset, std::allocator >_Distance_archF_OWNER_PIDwmemmove~TestResultset_outcome__destroy__alloc_traits >_ZNK9__gnu_cxx17__normal_iteratorIPcSsEmiEi_ZSt24__throw_out_of_range_fmtPKcz_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_GetLastErrnoDescriptionwcrtombwstrclear_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE3endEv_ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE9constructEPS4_RKS4__ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE10deallocateEPS4_j__check_facet >_ZN7testing8internal17TestEventRepeater18OnTestProgramStartERKNS_8UnitTestE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEplEi_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv__espins_ZNSsaSEPKcdefault_result_printer_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEplEi_ZNSbIwSt11char_traitsIwESaIwEE3endEvrm_eo_ZN7testing8TestCase19ClearTestCaseResultEPS0_operator<< _ZNSs14_M_replace_auxEjjjcWriteToShardStatusFileIfNeeded_Rep_baseenv_varvalue_holderfirst_test_info_ZNSspLEckPrintTimeFlag_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE6insertESt23_Rb_tree_const_iteratorIS1_ERKS1__ZN7testing10TestResult20ClearTestPartResultsEv__copy_move_backward_anew_allocator, std::allocator > >MSG_FINreverse_iterator<__gnu_cxx::__normal_iterator > > >st_atim_ZN7testing11Environment5SetUpEvst_dev_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmIEi__is_signedcountsCloseConnection__state_ZNKSt3setISsSt4lessISsESaISsEE4sizeEv_ZN7testing18TestEventListeners6AppendEPNS_17TestEventListenerE_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE15_M_erase_at_endEPS2__ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjj_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE7pointerEvGetTestCaseName_ZNKSt14_Bit_referenceeqERKS__ZNKSbIwSt11char_traitsIwESaIwEE5emptyEvMSG_CTRUNC__normal_iterator > >_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEptEv__alloc_traits >_ZN7testing8internal2REaSERKS1__ZN7testing8internal12UnitTestImpl17gtest_trace_stackEvnum_failuresenvironments_Delete__copy_move_b_M_insert_ZN9__gnu_cxx13new_allocatorIwE10deallocateEPwj_ZN7testing8internal10scoped_ptrIKSsEaSERKS3__ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE7destroyERS4_PS3_PrintTestPartResult__copy_move_backward_a2*, std::basic_string*>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11equal_rangeERKSsgtest_ar__Identity, std::allocator > >AlwaysTrueoperator<< >set_current_test_infoTEST_DID_NOT_DIEwcscollopenmode_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_leftmostEvvalue_~TestPropertyoperator!= >_ZN7testing8internal27FormatTimeInMillisAsSecondsEx_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13_Rb_tree_implIS3_Lb0EE13_M_initializeEv__last_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEdeEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEptEv_ZNK7testing8internal12UnitTestImpl30reportable_disabled_test_countEvOnTestCaseStart__prioritydeath_test_style_kCatchExceptionsFlag_ZNSs12_S_constructEjcRKSaIcE__addressofuninitialized_copy*>death_test_factory_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE8max_sizeERKS3__ZNSs7_M_moveEPcPKcj__copy_move_backward_a_ZNSt18_Rb_tree_node_base10_S_minimumEPKS__ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13_M_deallocateEPS3_j__time_t_ZN7testing8internal17StreamingListener20AbstractSocketWriteraSERKS2_signum__miter_base*>_ZN7testing8TestCase3RunEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_jj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_valueEPKSt18_Rb_tree_node_baseFloatingPoint_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE17_S_select_on_copyERKS4_fgetwc_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4swapERS5__ZN7testing8internal12UnitTestImpl18GetMutableTestCaseEi_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4rendEv_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6rbeginEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4dataEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZNK7testing8internal12UnitTestImpl26successful_test_case_countEvnew_allocator_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEiParseBoolFlagParseInt32OnTestStartread_fd__ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEicolor__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEv_ZNSs6resizeEj__vtbl_ptr_typeGTestIsInitialized_Is_pod_comparator__destroy_ZN7testing19FLAGS_gtest_shuffleEGetInjectableArgvsFormatDeathTestOutput_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11equal_rangeERKSs_ZNSbIwSt11char_traitsIwESaIwEEaSEwunary_function, std::allocator >, std::basic_string, std::allocator > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_S_leftEPSt18_Rb_tree_node_base__gnuc_va_listdeath_test_factory__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_beginEv__builtin_memmoveGetOrCreateValue_ZNK7testing8internal8FilePath15DirectoryExistsEvThreadLocal_ZN9__gnu_cxx14__alloc_traitsISaIPcEE7destroyERS2_PS1__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE3endEv_ZNSt23_Rb_tree_const_iteratorIPKcEmmEi_ZN7testing11IsSubstringEPKcS1_RKSsS3__flags2_ZNSt23_Rb_tree_const_iteratorIPKcEmmEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_get_Node_allocatorEv~HasNewFatalFailureHelper_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE8max_sizeERKS4_thisbasic_ostream >_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4dataEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEplEiclose_fd_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEikDeathTestInternalErrorrandom___is_move_iterator_ZN7testing8internal30ReportFailureInUnknownLocationENS_14TestPartResult4TypeERKSs_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE3endEv_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7addressERKS4__ZNK7testing8UnitTest6FailedEv_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE8allocateEjPKvsrcfile__miter_basewmemchr_ZN7testing18TestEventListeners8repeaterEvIsPrintableAsciiGetTypeId_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmiEiiswctypethis_is_TEST_ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv_Rb_tree_iterator__builtin_strlen_ZNKSs4copyEPcjj_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE10deallocateERS4_PS3_j__is_normal_iterator, std::allocator >*>__uninitialized_copy_ZN7testing8internal15NoExecDeathTest10AssumeRoleEv_ZN7testing15AssertionResultaSERKS0__ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEplEicatch_exceptions__ZN7testing11Environment5SetupEv__ssize_t__niter_base<__gnu_cxx::__normal_iterator > >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE8max_sizeEv_InIteratorgtest_msg_ZN7testing8internal16UniversalPrinterIxE5PrintERKxPSo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_chdirsival_intstrtod_ZNK7testing8TestCase21successful_test_countEvStreamableToString_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjReportInvalidTestCaseTypeUnsignedChar_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE7releaseEv_ZN7testing8internal17StreamingListenerD2Ev_ZNKSs16find_last_not_ofEcjPatternMatchesStringgtest_retval_ZN7testing8internal18StringFromGTestEnvEPKcS2__ZN7testing8internal13FloatingPointIfE15ReinterpretBitsEjstack_top_ZN7testing8internal38DefaultPerThreadTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultEPrintOnOneLinebasic_iostream >_ZNKSbIwSt11char_traitsIwESaIwEE4findEwj_ZNSs6insertEjjc__fmtkFractionBitMask_ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi_ZNSbIwSt11char_traitsIwESaIwEE4_Rep13_M_set_leakedEv_ZN7testing8internal29ParameterizedTestCaseRegistry13RegisterTestsEv_ZNKSt6vectorIPcSaIS0_EE4rendEvkSuccessOutputXmlCDataSectionGetCapturedStreamRemoveFileName__uninitialized_move_if_noexcept_a >_ZNSbIwSt11char_traitsIwESaIwEE2atEj_ZNSbIwSt11char_traitsIwESaIwEEixEj_ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKw_ZNSt23_Rb_tree_const_iteratorISsEmmEiparse_success_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwS8_DeathTestAbort_ZNSt23_Rb_tree_const_iteratorISsEmmEvcolon__uninitialized_move_if_noexcept_a >_vptr.Environment_Destroy_ZNSt11char_traitsIcE7compareEPKcS2_j_ZN7testing8internal14CmpHelperSTREQEPKcS2_S2_S2__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4backEvreverse_iterator<__gnu_cxx::__normal_iterator > > >RemoveDirectoryName_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperES3__Rep_typeis_disabled~basic_ios__niter_base_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE13_M_deallocateEPS2_jcontentShouldRunTestReportTestPartResult_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE2atEj__normal_iterator > >_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmiEi_ZNKSt23_Rb_tree_const_iteratorISsEdeEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE6rbeginEv_M_fill_insertAddTestName_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmiEiis_spawnedoperator<< _ZN7testing8internal23DefaultDeathTestFactoryD0Evvector >_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2_Argvoperator<< _ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestPartResultERKNS_14TestPartResultE_ZSt19__throw_logic_errorPKc__prec__pred_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_beginEv_ZN7testing4Test16TearDownTestCaseEv_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE19_M_get_Tp_allocatorEvSecretSOCK_DCCP_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEptEv_Ios_OpenmodeDelete_ZN7testing4Test5SetUpEv_ZN7testing18TestEventListenersaSERKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_put_nodeEPSt13_Rb_tree_nodeISsE_ZNSs6appendEPKc_S_cur_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_range_checkEjstdin__pthread_slist_t_ZNKSs4_Rep12_M_is_sharedEv_ZNSt11char_traitsIcE12to_char_typeERKi_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE12_M_check_lenEjPKc_ZNSolsEPFRSt8ios_baseS0_E_ZN7testing15AssertionResultlsEPFRSoS1_E_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseEPKS1_S9_GetFileSize_ZNSt6vectorISsSaISsEE4rendEv_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE8allocateERS3_j_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc_ZNKSt23_Rb_tree_const_iteratorISsEeqERKS0__ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZNK9__gnu_cxx13new_allocatorIiE8max_sizeEvvfwscanf_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwjj_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1_reverse_iterator<__gnu_cxx::__normal_iterator > > >_ZSt17__throw_bad_allocv_ZNKSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE13get_allocatorEvdummyatoll_ZNSo9_M_insertImEERSoT_num_selected_tests_ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwjjoperator<< _ZNSt12_Vector_baseIiSaIiEE17_M_create_storageEjfind<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string >_ZNKSt6vectorIiSaIiEE4backEvshort intsnprintf_ZNKSbIwSt11char_traitsIwESaIwEE5c_strEvwmemcpy~FilePath_ZNK7testing8internal13DeathTestImpl8write_fdEvForEach, void (*)(testing::Environment*)>_ZN7testing8internal13FloatingPointIdE15ReinterpretBitsEy_Iter_basefind_last_not_of_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6rbeginEv_ZNK7testing10TestResult12elapsed_timeEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_rootEv_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE3endEvuninitialized_copy<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*>__normal_iterator, std::allocator > >sa_flagsoperator<< GetCapturedStderr_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_upper_boundEPKSt13_Rb_tree_nodeISsES9_RKSs_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refdataEv_ZNSt6vectorISsSaISsEE5beginEv_ZNKSs8_M_checkEjPKc_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6resizeEjS3__vptr.DeathTestFactory_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE11_M_allocateEj_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEixEi__exchange_and_add_dispatchReseed_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEptEvcopy_backwardconstructParseFlagValue_ZN7testing8internal24XmlUnitTestResultPrinterD0Ev_ZNK9__gnu_cxx17__normal_iteratorIPKcSsE4baseEv_Construct, std::basic_string >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE2atEj_ZNSbIwSt11char_traitsIwESaIwEE4rendEv_ZN7testing8internal18CmpHelperSTRCASENEEPKcS2_S2_S2__ZN7testing8internal17GetCapturedStdoutEv__iterator_category<__gnu_cxx::__normal_iterator > >PushGTestTrace_ZN7testing8internal17TestEventRepeater24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN9__gnu_cxx13new_allocatorIcE8allocateEjPKv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5beginEvuninitialized_copy_ZN9__gnu_cxx14__alloc_traitsISaISsEE17_S_select_on_copyERKS1_operator- >dup2rbegin__gthread_active_p_ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKwj_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEE4baseEv_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE12_Vector_impl12_M_swap_dataERS5_CountIf, bool (*)(const testing::TestCase*)>_sigchldoutput_file_vptr.ParameterizedTestCaseInfoBase__uid_tGTEST_SHARD_STATUS_FILEPrintXmlTestCase_ZN9__gnu_cxx17__normal_iteratorIPKcSsEppEi_ZNSs6assignERKSsjj_ZNKSt6vectorIiSaIiEE4sizeEv_ZNSt10_Iter_baseIPN7testing8internal9TraceInfoELb0EE7_S_baseES3_mon_thousands_sep_ZN7testing8UnitTest13PopGTestTraceEv_ZN9__gnu_cxx17__normal_iteratorIPKcSsEppEv_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EEixEj_ZNK7testing18TestEventListeners22default_result_printerEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmiEiLogToStderrwcscatUponLeavingGTest_Vector_base >_ZNSo9_M_insertIxEERSoT__ZN7testing8internal9DeathTest27set_last_death_test_messageERKSs_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2__ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4backEvrepeater__Const_Base_ptroperator!= >getcwdSendLn_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT__ZNSt3setISsSt4lessISsESaISsEEaSERKS3_set_os_stack_trace_getter_ZNKSt23_Rb_tree_const_iteratorISsEneERKS0__ZN7testing8internal15UnitTestOptions27GetAbsolutePathToOutputFileEv_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEE4baseEv__normal_iterator > >pair, bool>repeaterbasic_stringstatus_valuePrintTestPartResultToStringa_name_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSsixEj_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1__ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv_ZN7testing8internal21UniversalTersePrinterIxE5PrintERKxPSo_ZN7testing8internal14GetThreadCountEvreplace_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EjwRKS1__ZNK9__gnu_cxx17__normal_iteratorIPcSsEptEv_ZN7testing8internal2RE4InitEPKc_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7addressERKS3_AppendUserMessageUniversalTersePrinter_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13get_allocatorEv_ZNKSs7compareEjjPKc__suseconds_t_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmiEi_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5clearEv_RandomAccessIterator_ZN9__gnu_cxx14__alloc_traitsISaIiEE7destroyERS1_Pi_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIS3_S2_EES6_PrintColorEncoded_M_is_sharediterator_traits_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmiEi_ZNSt6vectorIiSaIiEE18_M_fill_initializeEjRKi_ZNSt6vectorISsSaISsEE14_M_fill_assignEjRKSsscoped_ptr_ZN7testing8internal17kStackTraceMarkerE_ZN7testing8internal12UnitTestImpl11GetTestCaseEPKcS3_PFvvES5_premature_exit_filepath__S_constructparameterized_test_registry_ZN7testing8internal6Random8GenerateEj_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEiiterator_traits<__gnu_cxx::__normal_iterator > > >_ZN7testing18FLAGS_gtest_filterE_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmiEi__copy_m_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEva_message__are_same_ZNSt6vectorIPcSaIS0_EE18_M_fill_initializeEjRKS0__M_insert_M_mask_ZN7testing8internal10scoped_ptrIKSsE7releaseEvis_reportableTestReportableDisabled_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEE4baseEvreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE10deallocateEPS3_j_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj_ZN7testing4Test3RunEvIsSubstring_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tagallocator_type__comp_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE7pointerEvpthread_mutex_lockrandom_seed__ZN7testing8internal15UnitTestOptions15GetOutputFormatEv_ZSt4cerr_ZNSbIwSt11char_traitsIwESaIwEE7_M_dataEPwfill_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZN7testing8internal35DefaultGlobalTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE17_M_create_storageEj_ZN7testing15AssertionResultlsIPKcEERS0_RKT__ZNSt12_Vector_baseIPcSaIS0_EE13_M_deallocateEPS0_j_exit_ZN7testing11IsSubstringEPKcS1_PKwS3_DistanceBetweenSignAndMagnitudeNumbers_ZNK7testing14TestPartResult6failedEvImplicitlyConvertible_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6assignEjRKS2__ZN7testing8internal27PrettyUnitTestResultPrinter16PrintFailedTestsERKNS_8UnitTestE_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE12_M_check_lenEjPKcerror_num_M_initialize_dispatch10regmatch_t_ZN7testing17TestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing19TestPartResultArray6AppendERKNS_14TestPartResultE_S_red~ThreadLocalValueHolderBase_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE10_S_on_swapERS3_S5__ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7addressERS2__ZN7testing10TestResult16set_elapsed_timeExarguments_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxEoperator!= >_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5beginEvgtest_error_ZNSbIwSt11char_traitsIwESaIwEEpLERKS2__ZN7testing8internal20DoubleNearPredFormatEPKcS2_S2_ddd_ZN7testing8internal8GTestLogaSERKS1__ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKcClearTestCaseResult_M_insert_aux~TraceInfo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_state__S_adjustfield~AssertHelperData_ZNSt10_Iter_baseIPPN7testing8TestInfoELb0EE7_S_baseES3_ai_protocol_ZN7testing8internal16UniversalPrinterISbIwSt11char_traitsIwESaIwEEE5PrintERKS5_PSo_Iter_base_vptr.OsStackTraceGetterInterface_ZN7testing8internal8FilePath12MakeFileNameERKS1_S3_iPKc_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE17_S_select_on_copyERKS4__ZN7testing8internal8FilePath13GetCurrentDirEvparsedgetenv_ZNSt17_Rb_tree_iteratorIPKcEppEiParseGoogleTestFlagsOnlyImplintercept_mode__ZN7testing8internal10SkipPrefixEPKcPS2__Bit_iterator_base_ZNSt17_Rb_tree_iteratorIPKcEppEv_ZNK7testing12TestProperty5valueEv__wide_IO_read_endHandleExceptionsInMethodIfSupported_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEptEvwcschrIsSubstringPred >__builtin_va_list_ZNKSt3setISsSt4lessISsESaISsEE13get_allocatorEv__cxa_allocate_exceptionoperator new []val2_ss_ZNSt14_Bit_referenceaSEbpathname__ZNKSt6vectorISsSaISsEE5emptyEv__copy_m_S_minimumnew_allocator_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE3getEvIsXDigit_ZN7testing8internal24InternalRunDeathTestFlagaSERKS1_uninitialized_copy_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4rendEv_ZN7testing8internal24GetCurrentExecutableNameEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE2atEj__statbufis_previous_hex_ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13get_allocatorEvservinfowcsrchr__uninitialized_move_if_noexcept_a*, std::basic_string*, std::allocator > >_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE8allocateEjPKv__is_null_pointerbiased1biased2_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_j_ZNK7testing8internal13DeathTestImpl9statementEv_ZNSt6vectorISsSaISsEEaSERKS1_PrintWideStringTo_Vector_base >bool_value_ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE_ZNKSt17_Rb_tree_iteratorISsEptEv_ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZNKSt13_Bit_iteratorplEi__is_move_iterator__alloc_traits >IsATTY~basic_stringstream_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7destroyEPS2__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13_M_clone_nodeEPKSt13_Rb_tree_nodeISsE_M_const_castlldiv_ZN7testing8internal9MutexBase4LockEv_ZN7testing8internal12UnitTestImpl41GetTestPartResultReporterForCurrentThreadEvstatus_ch_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_M_endEvSuppressEventForwardingoperator<< >_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_fill_assignEjRKS1__ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjwctomb_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_S_keyEPKSt18_Rb_tree_node_baseIsSubstringImplsi_utimeUniversalTersePrinter_Key_compare_ZN7testing8internal6String15ShowWideCStringEPKwwcscspn_ZN7testing8internal9DeathTest6PassedEbhaystack_expriterator_traitsDISABLED_*:*/DISABLED_*Clear_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___uninitialized_copy_a_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmiEi_Funct_ZNK7testing8internal13FloatingPointIfE4bitsEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEv__uninit_copy<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*>_S_showbase~basic_istreamconstruct_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5emptyEvsigval_t_ZNKSt14_Bit_referencecvbEvsi_bandGetUnitTestImpl_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE8allocateERS4_jwcscmpsyntax_ValueT_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEptEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_M_insert_EPSt18_Rb_tree_node_baseS7_RKSsiterator_traitsGetTestCaseTypeId_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5clearEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2__ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEptEvstreamsize_S_max_size_ZN7testing7MessagelsEb__uninit_copy_ZN9__gnu_cxx13new_allocatorIPcE8allocateEjPKv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEE4baseEvInterceptMode10__sigset_t_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5frontEv_ZNSs12_S_empty_repEv_ZNSs6assignEjc_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8pop_backEv_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE8allocateEjPKvnum_disabled_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EEaSERKS4__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE9push_backERKS2__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZN7testing8internal17StreamingListener12SocketWriter4SendERKSs_ZNSolsEPKv_ZNK7testing8internal29ParameterizedTestCaseInfoBase15GetTestCaseNameEv_ZN7testing8internal17TestEventRepeater27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal13DeathTestImpl11set_read_fdEi_ZNK7testing15AssertionResultntEvGetCurrentDir__is_normal_iterator_ZNSt18_Bit_iterator_base7_M_incrEivswscanf_ZNSo9_M_insertIdEERSoT__ZNK7testing14TestPartResult7summaryEv__normal_iterator > >_ZNSs5beginEvkMaxStackTraceDepth_ZNSs13_S_copy_charsEPcPKcS1_IGNORE_SHARDING_PROTOCOL_chainfor_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestInfo*)>_ZNK7testing8TestCase16total_test_countEv_ZNSt6vectorISsSaISsEE4swapERS1__ZNSs6rbeginEvuninitialized_copy_ZNK7testing8UnitTest12elapsed_timeEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZN7testing8internal27PrettyUnitTestResultPrinter13PrintTestNameEPKcS3_wcstollwcsxfrm_ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_j_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7destroyEPS2__ZNKSt9_IdentityISsEclERSsfmtflagskTestsuitewcscpy_S_maximum_ZNKSt3setISsSt4lessISsESaISsEE10value_compEv_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE12_M_check_lenEjPKc_ZN7testing11IsSubstringEPKcS1_S1_S1_fflushpair, std::allocator > >, std::_Rb_tree_const_iterator, std::allocator > > >st_blksize_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6rbeginEvkListTestsFlagreverse_iterator, std::allocator > > >_ZNK7testing12TestProperty3keyEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEE4baseEv_M_assign_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refcopyEv_ZN9__gnu_cxx14__alloc_traitsISaISsEE10deallocateERS1_PSsj_ZNKSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE19_M_get_Tp_allocatorEv~PrettyUnitTestResultPrintersa_handlerg_linked_ptr_mutex_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_rootEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4rendEvkMaxRandomSeed_ZN7testing8internal12UnitTestImplaSERKS1_PrintAsCharLiteralTo_ZN7testing8internal10AlwaysTrueEv__mode_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlTestCaseEPSoRKNS_8TestCaseE_IO_read_ptrset, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > > >_ZN7testing13PrintToStringIxEESsRKT__ZN7testing8internal12UnitTestImpl6randomEvconstruct_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEptEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4dataEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEixEj_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEvHandleSehExceptionsInMethodIfSupported_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEjwRKS1__M_incr_ZNK7testing8internal13DeathTestImpl5regexEv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEptEv_ZN7testing8TestCase11AddTestInfoEPNS_8TestInfoEPrintBytesInObjectToImpl~allocatorrandom_seed_flag_ZN7testing8internal9DeathTest5AbortENS1_11AbortReasonE__copy_move_a_ZN7testing4Test19HasSameFixtureClassEvFLAGS_gtest_throw_on_failureAlwaysFalsekSpecialEscape_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEdeEv_Vector_base >_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE17_S_select_on_copyERKS4_rebind >_ZN7testing8UnitTest11GetInstanceEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_minimumEPSt18_Rb_tree_node_base_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEdeEv_ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7destroyEPS3_new_allocator_ZN7testing8internal12UnitTestImpl17current_test_infoEv_ZNSt3setISsSt4lessISsESaISsEE6insertERKSs_ZNKSs12find_last_ofEPKcj__uninitialized_copy_S_fixed_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_RKS2__ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4backEv_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEdeEv_ZN7testing8internal20SingleFailureCheckeraSERKS1__Traits_ZN7testing8internal9DeathTestaSERKS1_default_value_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_get_nodeEvisattybidirectional_iterator_tag_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKwj_ZN7testing8internal27PrettyUnitTestResultPrinter20OnTestIterationStartERKNS_8UnitTestEiHandleExceptionsInMethodIfSupportedFLAGS_gtest_output_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEaSERKS3_FloatingPoint__copy_m_ZN9__gnu_cxx14__alloc_traitsISaIPcEE10_S_on_swapERS2_S4_wcspbrka_statement_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEixEioperator<< Sendsubstr__ZN7testing11IsSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7_negation_ZNSt11char_traitsIcE2eqERKcS2__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEixEi_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEptEvHandleExceptionsInMethodIfSupported_M_refdataendl >_ZNK7testing8TestCase4nameEv__throw_bad_alloc_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_leftmostEvregcomp_ZNSt10_Iter_baseIPSsLb0EE7_S_baseES0__ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7addressERKS2_scoped_ptr_kill_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7addressERKS2_severity_pthread_mutex_destroy_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEjRKS3__ZNSolsEPFRSoS_Evprintf_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE12_Vector_impl12_M_swap_dataERS4_operator<< _sbuf_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11equal_rangeERKS1_FLAGS_gtest_catch_exceptions_ZN7testing8internal27PrettyUnitTestResultPrinter24OnEnvironmentsSetUpStartERKNS_8UnitTestEdef_optional_ZNSt6vectorIiSaIiEE5frontEvreporter_ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEjjRKS1__ZN7testing8internal18g_linked_ptr_mutexE_ZNSt6vectorIPcSaIS0_EE4rendEv_ZN7testing8internal18OsStackTraceGetterD2Ev_ZNKSbIwSt11char_traitsIwESaIwEE7compareERKS2___throw_bad_cast__uninitialized_copy_a_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6assignEjRKS2_strtoull__ostream_insert >_Destroy__is_normal_iterator_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE7destroyERS3_PS2__ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestE_ZNSt11char_traitsIcE6assignEPcjc_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_copyEPKSt13_Rb_tree_nodeIS1_EPS9_ToUppervector >_ZN7testing13PrintToStringIPKwEESsRKT_operator-*, std::vector > >default_xml_generatorFormatHexInt_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE10_S_on_swapERS3_S5__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorIiSaIiEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPiS1_EEjRKi_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE7releaseEv_ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE8allocateEjPKv_ZN7testing4Test8TearDownEvarray_ZNKSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE19_M_get_Tp_allocatorEv_ZNSt6vectorISsSaISsEE6insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EEjRKSs_ZNKSs7_M_dataEv_ZNSt12_Vector_baseIiSaIiEE13_M_deallocateEPijiteratoroperator!= >__destroy_ZN7testing8internal18StreamableToStringIxEESsRKT_socket_writer__ZN9__gnu_cxx17__normal_iteratorIPKcSsEmmEidescriptionGetDefaultFilter_ZN9__gnu_cxx17__normal_iteratorIPKcSsEmmEvbasic_string, std::allocator >_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEplEi_ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEvIsContainerTest_ZNSs4_Rep13_M_set_leakedEvreverse_iterator >_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_sharedEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8___uninit_copy*, std::basic_string*>_ZN7testing8internal13DeathTestImpl6PassedEb_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4backEv_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE7pointerEv_ZN7testing8internal5MutexaSERKS1_no_sub_ZNSs6insertEjRKSs_Rb_tree, std::allocator >, std::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >_ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEjjPKwj_ZN7testing8internal10scoped_ptrISsEaSERKS2__ZNSt6vectorIPcSaIS0_EE5clearEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE24_M_get_insert_unique_posERKS1__ZN7testing8internal17TestEventRepeater20OnTestIterationStartERKNS_8UnitTestEi_S_do_ituninitialized_copySOCK_NONBLOCK_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE8max_sizeEvRunSetUpTestCase_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8pop_backEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE3endEv_ZN7testing8UnitTestD0Ev_ZN7testing8internal31GetCurrentOsStackTraceExceptTopEPNS_8UnitTestEi_ZN7testing8internal9DeathTest6CreateEPKcPKNS0_2REES3_iPPS1__ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmiEi_Atomic_wordimpl__ZNK7testing18TestEventListeners21default_xml_generatorEvos_stack_trace_getter__ZN9__gnu_cxx13new_allocatorIPcE10deallocateEPS1_j_ZN7testing17TestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE__is_normal_iterator_ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultEpipe_ZNKSt6vectorIPcSaIS0_EE4dataEvsi_signo_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEptEvCreateSOCK_PACKET_S_keyTestRoleless, std::allocator > >_KeyOfValue_ZN7testing8internal15UnitTestOptions20PatternMatchesStringEPKcS3__ZNKSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE19_M_get_Tp_allocatorEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEE4baseEvvector >_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEpLEi_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_fill_assignEjRKS2_operator- >__normal_iterator > >floattest_cases__ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorISsSaISsEE4dataEv__needlenum_chars_M_rep_ZN7testing7FloatLEEPKcS1_ff_Iter_base<__gnu_cxx::__normal_iterator > >, true>set_child_pid__copy_mFLAGS_gtest_list_testsmbrlen_ZNSs9push_backEc_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEiGetParam()re_pattern_buffer_ZN7testing4TestD2Ev_ZNK7testing8internal13FloatingPointIfE13exponent_bitsEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNKSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE13get_allocatorEvargc_M_replace_aux_ZN7testing8internal7PrintToEPKcPSo~CapturedStream__niter_baseresize_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZNSt11char_traitsIcE11to_int_typeERKc_ZN7testing14ExitedWithCodeaSERKS0_argvoperator<< _ZN7testing32ScopedFakeTestPartResultReporterC2EPNS_19TestPartResultArrayE_ZNSt6vectorISsSaISsEE15_M_erase_at_endEPSserrors_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EEixEj_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEvDerivedforever_ZNK7testing19TestPartResultArray17GetTestPartResultEi_ZNKSs17find_first_not_ofEcjseconds_IIter__niter_base_ZN7testing7MessageaSERKS0___elision_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_erase_auxESt23_Rb_tree_const_iteratorIS1_E_ZNSt6vectorIiSaIiEE6resizeEji_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE11_M_allocateEjUrlEncode_ZNK9__gnu_cxx13new_allocatorIcE7addressERc_ZNSt10_Iter_baseIN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS4_SaIS4_EEEELb1EE7_S_baseES9_CurrentStackTrace_ZN7testing8internal16DeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE__data_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEdeEvtest_part_resultsTestCaseFailed__normal_iterator > >reverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt17_Rb_tree_iteratorIPKcEmmEi_ZN7testing4Test11DeleteSelf_EvStrDup__copy_move_ZNK7testing8TestInfo4nameEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSs16_S_construct_auxIPKcEEPcT_S3_RKSaIcESt12__false_type_ZNSt17_Rb_tree_iteratorIPKcEmmEv__dynamic_cast__is_move_iterator~XmlUnitTestResultPrinterBasicNarrowIoManip__list_ZNSt9basic_iosIcSt11char_traitsIcEE4fillEctv_nsec_ZN7testing38FLAGS_gtest_show_internal_stack_framesEUnlock_ZNK7testing10TestResult15HasFatalFailureEvpthread_setspecific__dnewinput_iterator_tag~ParameterizedTestCaseRegistryprinted_test_case_name_M_start_ZNK9__gnu_cxx13new_allocatorIwE8max_sizeEvusedSkipComma__numeric_traits_integer_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZN7testing8TestCase14TestReportableEPKNS_8TestInfoEUInt_ZNK7testing8internal13FloatingPointIfE6is_nanEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEplEioperator!= >_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEixEidefault_xml_generator__ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE_ZNSt6vectorIPN7testing8TestInfoESaIS2_EEixEjset_up_tc_TEST_F_namesecond_ZNSsaSERKSsis_disabled_OnEnvironmentsTearDownEnd~SocketWriter_Num_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE15_M_erase_at_endEPS2__ZNKSt6vectorIiSaIiEE12_M_check_lenEjPKc_ZN9__gnu_cxx14__alloc_traitsISaIiEE10_S_on_swapERS1_S3__ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Evdash_ZN7testing22FLAGS_gtest_print_timeE_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE19_M_get_Tp_allocatorEv_ZNKSt13_Bit_iteratormiEiExitedWithCodehintstm_gmtoff_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE17_S_select_on_copyERKS4__ZN7testing8internal14CmpHelperSTRNEEPKcS2_PKwS4__ZNKSt3setISsSt4lessISsESaISsEE3endEvoperator<< _ZN7testing7MessageC2ERKS0_UniversalPrintArrayst_blocks_ZN7testing8internal12UnitTestImpl25set_os_stack_trace_getterEPNS0_27OsStackTraceGetterInterfaceEpthread_tprefix_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE8allocateERS5_jDeathTestThreadWarning_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEppEv_ZNKSs4sizeEv__miter_base_ZN7testing8internal17StreamingListener20AbstractSocketWriter4SendERKSsallocator > >_ZNSt6vectorIPcSaIS0_EE9push_backERKS0_ai_addrlenkNonFatalFailure_ZNKSbIwSt11char_traitsIwESaIwEE2atEj_ZN7testing8internal21StackLowerThanAddressEPKvPbStat_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISsERKSs_ZNSt17_Rb_tree_iteratorISsEppEi_ZN7testing8internal13CaptureStreamEiPKcPPNS0_14CapturedStreamEsi_statusParseGoogleTestFlagsOnly_ZNK7testing8UnitTest19disabled_test_countEv__niter_baseoperator<< _ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE2atEjg_captured_stdout_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE8max_sizeERKS3__ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZNKSs15_M_check_lengthEjjPKc_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE10_S_on_swapERS4_S6__ZNK9__gnu_cxx13new_allocatorIwE7addressERwoperator new_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEi__class_type_info_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEptEv_ZN7testing8TestInfoD2EvGetTestInfo_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEvruntime_errorEndsWithCaseInsensitivevector >__countsam1sam2long_value_ZN7testing8internal8GTestLogD2Ev_Vector_base >_ZN7testing8internal18GetInjectableArgvsEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEppEi_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEpLEi_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4rendEvrebind_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEppEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE7reserveEj_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE13_M_deallocateEPS2_j_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE12_Vector_impl12_M_swap_dataERS4_Setupsuccessful_test_case_count_ZNSt6vectorIiSaIiEE4swapERS1_ReadAndInterpretStatusByte_ZN7testing8internal18OsStackTraceGetter19kElidedFramesMarkerEsa_restorer_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE4swapERS5__M_node_ZNSs6assignEPKcj_ZN7testing8internal15GetUnitTestImplEvShuffleTests__iterator_categoryconst_pointer_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7addressERKS4_fgetws_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE13get_allocatorEv__cursummaryArrayAsVector<8>int_p_sign_posn_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_E_ZN7testing8internal12UnitTestImpl11AddTestInfoEPFvvES3_PNS_8TestInfoE_ZNSt6vectorISsSaISsEE5eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EE_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE9constructEPS3_RKS3_GetReservedAttributesForElement_ZN9__gnu_cxx13new_allocatorIiE7destroyEPioperator<< _ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4swapERS3_operator<< tm_sec__size_typekMaxParamLength_ZN9__gnu_cxx13new_allocatorIPKcE8allocateEjPKv__static_initialization_and_destruction_0new_allocator_ZN7testing8internal8GTestLogC2ENS0_16GTestLogSeverityEPKciactual_valueoperator<< _ZNSo3putEc_ZNK7testing10TestResult17test_part_resultsEv__normal_iterator > >_ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEiFLAGS_gtest_shuffle_ZNSs7replaceEjjRKSs_ZN7testing8internal17StreamingListener12SocketWriteraSERKS2_new_allocator, std::allocator > > >ArrayAsVector<6>_ZNSs4_Rep9_S_createEjjRKSaIcE__addressof >kValueParamLabel_Destroy_ZdlPv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE8key_compEv_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwjlist_tests__ZN9__gnu_cxx14__alloc_traitsISaIiEE8max_sizeERKS1_~ValueHolder_ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11upper_boundERKS1_term_supports_color_Rb_tree_increment_ZNKSt9_IdentityIPKcEclERS1__ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE9constructEPS4_RKS4__S_base_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4dataEv_ZNK7testing8internal12UnitTestImpl21total_test_case_countEv_ZNSt6vectorIPcSaIS0_EEixEj~OsStackTraceGetterkTestTypeIdInGoogleTest_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE3endEv_Reppbase_ZN7testing8internal14ParseInt32FlagEPKcS2_Pi_ZN7testing8TestCaseC2EPKcS2_PFvvES4_AddTestPartResult__is_normal_iterator_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_M_endEvtotal_part_count_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE17_M_create_storageEjnot_eofSkipSpacesnot_eolPrintToString_ZNSs4_Rep12_S_empty_repEvmon_decimal_pointcurrent_test_case_operator<< _ZNKSs17find_first_not_ofEPKcjoperator<< vector >_ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEjPKcPartialMatchiterator_traits<__gnu_cxx::__normal_iterator > > >in_death_test_child_process~DefaultPerThreadTestPartResultReporter_ZNSs9_M_assignEPcjc_ZNK7testing8internal8FilePath14IsAbsolutePathEv_ZNSt11char_traitsIwE4findEPKwjRS1_ValidateTestPropertyNamerfind_Reference_ZN7testing8internal12AssertHelperC2ENS_14TestPartResult4TypeEPKciS5___osize_DestroyToPrint_ZNK9__gnu_cxx13new_allocatorIiE7addressERKi_ZN7testing8internal8FilePath9NormalizeEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEppEi_ZNKSt6vectorIiSaIiEE5frontEv_ZN7testing8internal24XmlUnitTestResultPrinter26RemoveInvalidXmlCharactersERKSs__are_same_ZNK7testing8internal12UnitTestImpl16catch_exceptionsEvkRandomSeedFlag__iterator_category<__gnu_cxx::__normal_iterator*, std::vector > > >_ZlsRKN7testing8internal6SecretEi_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEppEv_ZNK7testing8UnitTest26successful_test_case_countEvoperator()<__gnu_cxx::__normal_iterator > >_S_showpoint_ZN7testing8internal17TestEventRepeater25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11upper_boundERKS1__IO_lock_t_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE10_S_on_swapERS3_S5__ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE8allocateEjPKv_ZN7testing8internal13DeathTestImpl11set_outcomeENS0_16DeathTestOutcomeE_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE_ZN7testing31TestPartResultReporterInterfaceaSERKS0__ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE19_M_get_Tp_allocatorEv__copy_m_ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_PKvPFvvES6_PNS0_15TestFactoryBaseEnew_allocator_ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7addressERS2__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4backEvEventForwardingEnabled__alloc_traits >_Rb_tree_impl, false>_ZN7testing8internal8FilePath3SetERKS1__ZNKSt17_Rb_tree_iteratorISsEneERKS0_kTypeParamLabel__simple_ZNSt11char_traitsIcE4findEPKcjRS1___is_move_iteratorproperty_with_matching_keylong long int_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE8max_sizeEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmmEv_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEE4baseEv_ZN7testing8internal26GoogleTestFailureExceptionD2Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5clearEv_ZN7testing8internal13DeathTestImplD2Ev_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11upper_boundERKS1__ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6rbeginEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEpLEi_ZNK7testing8UnitTest21successful_test_countEv_ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7destroyEPS3__ZN9__gnu_cxx14__alloc_traitsISaIiEE8allocateERS1_jMatchesFilteroperator<=19pthread_mutexattr_t_ZN7testing8internal2RED2Ev_ZN7testing10TestResult14RecordPropertyERKSsRKNS_12TestPropertyECountIf, bool (*)(const testing::TestPartResult&)>_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE2atEjLastMessage_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4rendEv_ZNK7testing8TestCase17failed_test_countEvscoped_ptr, std::allocator > >_Iter_base_ZNKSs12find_last_ofEcj_ZNKSt23_Rb_tree_const_iteratorIPKcEneERKS2__ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE10deallocateEPS3_j_ZNK7testing8internal13FloatingPointIdE13fraction_bitsEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4swapERS7__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_rightEPKSt18_Rb_tree_node_base_ZN7testing8internal8FilePathaSERKS1_vector >_ZNKSbIwSt11char_traitsIwESaIwEE6substrEjj_ZN7testing8internal11CmpHelperNEEPKcS2_xx_S_dec_DestroyFilterTestsfirst_test_nameTestCaseInfoContainer_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5clearEva_type_param_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7addressERS3__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_rightmostEv_ZNKSt18_Bit_iterator_basegtERKS_U.a.0Ÿa.~.PX.a.R“a.w.R“w.z.rŸ“z.~.R“j.~.Q….‘.0Ÿ‘.¨.Pˆ.‘.R“‘.Ą.R“Ą.¤.rŸ“¤.¨.R“‘.¤.r¤.¨.Qĩ.Á.0ŸÁ.Ø.P¸.Á.R“Á.Ņ.R“Ņ.Ô.rŸ“Ô.Ø.R“å.ņ.0Ÿņ./Pč.ņ.R“ņ./R“//rŸ“//R“ˆ/Œ/u#Ÿˆ/Œ/V“Œ/ĸ/V“ĸ/Ĩ/vŸ“Ĩ/¯/V“Į/É/V“’/ž/P¯/Å/Wŗ/ŋ/WĪ/Û/RĶ/Û/RĒÂVÂÑa0r00Ÿr00W0ˆ0wŸˆ0š0Wd0š0‘#Ÿą0Â00ŸÂ0Ņ0WŅ0Ø0wŸØ0ę0W´0ę0‘#Ÿ110Ÿ1!1W!1(1wŸ(1:1W1:1‘#ŸQ1b10Ÿb1q1Wq1x1wŸx1Š1WT1Š1‘#ŸĄ1˛10Ÿ˛1Á1WÁ1Č1wŸČ1Ú1W¤1Ú1‘#Ÿņ120Ÿ22W22wŸ2*2Wô1*2‘#ŸA2V2‘V2{2UA2V2‘V2{2WL2O2vŸO2T2VT2V2‘# p2&1ŸD2V2‘#ŸV2{2wŸ‘2Ļ2‘Ļ2Ë2U‘2Ļ2‘Ļ2Ë2Wœ2Ÿ2vŸŸ2¤2V¤2Ļ2‘# p2&1Ÿ”2Ļ2‘#ŸĻ2Ë2wŸá2ö2‘ö23Uá2ö2‘ö23Wė2ī2vŸī2ô2Vô2ö2‘# p2&1Ÿä2ö2‘#Ÿö23wŸ13F3‘F3k3U13F3‘F3k3W<3?3vŸ?3D3VD3F3‘# p2&1Ÿ43F3‘#ŸF3k3wŸ3–3‘–3ģ3U3–3‘–3ģ3WŒ33vŸ3”3V”3–3‘# p2&1Ÿ„3–3‘#Ÿ–3ģ3wŸŅ3â30Ÿâ3ņ3Uņ3ü3uŸü34UÔ34‘#Ÿ14J4‘J4o4U14o4‘14J4‘J4o4V<4?4pŸ?4J4P44J4‘#ŸJ4o4vŸ€44P4­4Q­4å4Wå4î4ķPŸî4ō4Q‘4­40Ÿ­4å4Vî4ō40Ÿ‘4­40Ÿ­4Ī4UĪ4×4uŸ×4å4Uî4ō40Ÿ—4­4Q­4å4Wå4î4ķPŸî4ō4Q5)5P)565W65E5wŸE5\5W\5k5wŸk5u5Ww5˜5W5)50Ÿ)595U95?5uŸ?5_5U_5e5u~Ÿe5o5Uw5™5U 5æ5Pæ5đ5ķPŸ 5æ5Ræ5đ5ķRŸ 5æ5pŸæ5đ5ķP#Ÿē5Č5 ˙Ÿē5Č5pŸĐ5Ũ5 ˙ŸĐ5Ũ5pŸĶ5Ũ5Qę V  ‘ 'V'(‘ī vŸ  ‘#Ÿ 'vŸ'(‘#Ÿõ‘oŸR(‘oŸõP PWkqŸkˇ‘#ŸWŸWWkVWˆVˆvtŸ´VksVswvtŸwˆVˆ‘vtŸksvŸswv|ŸwˆvŸˆ‘v|Ÿkw‘L}Ÿ‘LkwP}ŒPŸ§‘# ‘#<ŸŸĩWŖ§‘# ‘#<ŸŖ¯WÖûQûX‘įûqŸûX‘#Ÿį/WįûVįVvtŸUVûVvtŸV!vtŸûvŸv|ŸvŸ!v|Ÿû‘L /‘LûP P/7‘# ‘#<Ÿ/VW7GW{ļW{V{§V§Ŧv|ŸŦËV“V“—v|Ÿ—§V§°v|Ÿ—‘Lœļ‘L—PœĢPļž‘#‘4ŸļĖWēž‘#‘4ŸēÆWđ5"6R"6í6uTí6î6tPî67uT77‘L7‚7uTđ56p6"6q"6í6uPí6î6tLî67uP77‘H7‚7uP6"60Ÿ"6l6Wl6o6to6p6tp6t6t‘6•6Vĸ6É6W77W97N7W;6G6PG6V6VV6¤6vŸ¤6ģ6V77vŸ97N7Vh7j7vŸ;67¨Ÿ97‚7¨Ÿ;6í6uPí6î6tLî67uP77‘H77uP97‚7uPZ6t6R77R77vwŸZ6l6Wl6o6to6p6tp6t6t77WZ6¤6uT77uTh7‚7uTZ6¤6¨Ÿ77¨Ÿh7‚7¨Ÿw6“6W“6•6udŸ•66W6¤6udŸh7‚7Ww6¤6uPh7‚7uP†6“6W“6•6udŸ•66W6¤6udŸ‰6¤6u`Ÿ‰6Ą6P¤67 ˙Ÿ97h7 ˙Ÿ¤6É6W97N7W¤6í6uTí6î6tPî67uT77‘L97h7uT¤67¨Ÿ97h7¨ŸÉ6ë6Vë6í6u`Ÿí6î6t\Ÿî6ū6Vū67u`Ÿ77‘XŸN7P7VP7h7u`ŸÉ6í6uPí6î6tLî67uP77‘HN7h7uPØ6ë6Vë6í6u`Ÿí6î6t\Ÿî6ū6Vū67u`Ÿ77‘XŸÛ6í6udŸí6î6t`Ÿî67udŸ77‘\ŸÛ6æ6Pæ6ë6v<Ÿë6í6u`<Ÿí6î6t\<Ÿî6õ6PP7h7u`ŸV7a7udŸa7e7Re7h7udŸV7e7Pp7{7u`Ÿ{77R7‚7u`Ÿp77P 66P6"6Q"6í6uPí6î6tLî67uP77‘H7‚7uP797uP 7+7u_Ÿ+7/7R/797u_Ÿ 7/7P7Á7PÁ7h8ķPŸ7ā7Rā7Y8‘HY8h8ķRŸˇ7ā70Ÿ 8Y8U8/8P/8;8u‘H"Ÿ;8S8PS8Y8u‘H"ŸE8Y8‘L;8Y8W÷7Y8V÷7Y8W&8/8‘Y/858p58;8‘Y!8;8Wp8Ž8PŽ8§8W§8ļ8Pļ8Ī8WĪ8Đ8P†8Ž8RŽ8Ļ8V†8Š8p#Ÿ¨8ļ8Pļ8Ī8WĪ8Đ8P¨8ļ8p#Ÿļ8ģ8w#Ÿž8Á8pŸÁ8Æ8PīōpŸōE‘#Ÿõ)‘oŸ)/P/E‘oŸõũR/R5ER)‘oŸ)/P/E‘oŸ/R5ERp|Ÿ* ‘#4Ÿ*/rŸ5Cp|ŸCE ‘#4Ÿ ˙Ÿp|Ÿ5Cp|ŸCE ‘#4Ÿi…V“…ĄV“¤ĻV“Spuipuipu#Ÿ‚ŒōŸJŒ˜P˜P¨´RŦ´Rí8 9u 9!9t!949uí8 9u 9!9t!949uí8 9u 9!9t !949uí8 9u 9!9t!949u í8đ8Pđ89V9!9p!949VZ9h9Rz9„9R„9ˆ9vZ9h9r Ÿz9„9r Ÿ„9ˆ9v# Ÿ`9t9‘oŸz9„9‘oŸ„9ˆ9Rˆ99‘oŸ`9h9Pz9ˆ9P¯9Ũ9Vâ9$:Vŗ9Ö9:Ÿâ9ø9:Ÿ:$::Ÿŗ9Ö9Vâ9ø9V:$:VÚ:î:Võ: ;VÜ:õ::ŸÜ:õ:Võ;<0Ÿ<<Pø;<R“<<R“<<rŸ“<<R“„>>pŸ>Ŧ>u #ŸŦ>­>t#Ÿ­>Â>u #Ÿĸ>Ē>VĒ>Ģ>wĢ>Ŧ>u#Ŧ>­>t#ĸ>Ģ>wŸĢ>Ŧ>u#ŸŦ>­>t#Ÿ?˜?R˜?Ą?‘?˜?P˜?Ą?‘-@8@R8@>@qt2@I@Vt@HAudŸHAKAt`ŸKA]AudŸ]A`At`Ÿ`A™AudŸw@°@V„@Š@QŠ@°@W°@HAuPHAKAtLKA]AuP]A`AtL`A™AuPS@°@u w@HAudŸHAKAt`ŸKA]AudŸ]A`At`Ÿ`A™AudŸ„@°@u¤@AVA*AvŸ*AFAVKA[AV°@Ã@6¨ŸÕ@Ø@PØ@đ@vđ@0AuWā@0AWA*Aō¨ZA Apr"ŸA0AWAAptŸA0ARA0AWA0AR*A0Apw"Ÿ0AHAudŸHAKAt`ŸKA]AudŸ]A`At`Ÿ6AHAucŸHAKAt_ŸKA]AucŸ]A`At_Ÿ6AAAPAAHAud<ŸHAKAt`<ŸKARAPjAuAucŸuAyARyA™AucŸjAyAP€A‹AucŸ‹AARA™AucŸ€AAPöABPBB‘# B“B‘LöA’BUöABPBB‘# BoBVoBtBvlŸtBxBVB'BV'B+BvlŸ+BoBVoBxBvlŸB'BvŸ'B+Bv|Ÿ+BoBvŸoBxBv|ŸB+B‘H1BxB‘HBBPBBv<Ÿ1B=BPBBv Ÿ>BHBv ŸB+B‘HDBxB‘HBBPDBXBPB$BvŸYBcBvŸ B+B‘H_BxB‘H B+BP_BsBPÆBĐBPĐBāB‘# āBiC‘LÆBeCUÆBĐBPĐBāB‘# āB?CW?CDCwlŸDCHCWāB÷BW÷BûBwlŸûB?CW?CHCwlŸāB÷BwŸ÷BûBw|ŸûB?CwŸ?CHCw|ŸāBûB‘HCHC‘HāBãBPãBęBw<ŸC CPāBęBw ŸCCw ŸæBûB‘HCHC‘HæBíBPC(CPęBôBwŸ)C3CwŸđBûB‘H/CHC‘HđBûBP/CCCP[CbCp,ŸbCCq,ŸCøC‘#,ŸiCqCPqCøC‘LiC÷CUiCqCPqCC‘LCŋCWŋCÄCwxŸÄCČCWC”CW”C˜CwxŸ˜CŋCWŋCČCwxŸC”CwŸ”C˜Cw|Ÿ˜CŋCwŸŋCČCw|ŸC˜C‘HžCČC‘HCŠCPŠC‘Cw<ŸžCĒCPC”CW”C˜CwxŸĢCŋCWŋCČCwxŸC˜C‘H°CČC‘HC˜CP°CÃCPD0D‘0D4DRD0D‘# Ÿ0D4Dr ŸDD0ŸD0DR0D4D0ŸDDP“D#DP“#D%DplŸ“0D2DP“2D4Dr “@DpD‘pDtDREDpD‘# ŸpDtDr ŸEDQD0ŸQDpDRpDtD0ŸHDQDP“QDcDP“cDeDplŸ“pDrDP“rDtDr “ĘDįDVįDčDt čDéDtõDEVĘDčDw ŸčDéDt# ŸõDEw ŸßDįDVįDčDt čDéDtE&E0Ÿ&EZEV\EgEVˆEŊEu ŸŊEžE‘# ŸˆEE0ŸE´EW‹E¯EV“¯EģEV“’EžERžEŸEvŸEŖErdŸ˜EžERžEŸEvŸEŖErdŸ˜EžErŸžEŖERŦE´Eō hØE Fu Ÿ FF‘# ŸØEāE0ŸāEFWÛE˙EV“˙E FV“âEîERîEīEvīEķErdŸčEîERîEīEvīEķErdŸüEFō i(F_Fuԟ_F`F‘#TŸ(F0F0Ÿ0FVFW+FQFV“QF]FV“2F@FR8F@FRNFVFōīixF¯Fuԟ¯F°F‘#TŸxF€F0Ÿ€FĻFW{FĄFV“ĄF­FV“‚FFRˆFFRžFĻFōėjęFūFVūF˙Ft ˙FGtGGVęF˙Fw,Ÿ˙FGt#,ŸGGw,ŸųFūFVūF˙Ft ˙FGtKGQGPQGWHVWHXHwXHYHu#YHZHt#ZHņHVKGQGpŸQGŽGvŸŽG™GP™GWHvŸWHXHw#ŸXHYH u##ŸYHZH t##ŸZHņHvŸKGQGpŸQGWGvŸWGZGvŸZG]GvŸ]G`GvŸ`GcGvŸcG4Hv4Ÿ4H?HP?HWHv4ŸWHXHw#4ŸXHYH u##4ŸYHZH t##4ŸZHņHv4ŸWGžGvŸžGĒGPĒGWHvŸWHXHw#ŸXHYH u##ŸYHZH t##ŸZHņHvŸWGZGvŸZG]GvŸ]G`GvŸ`GcGvŸcG4Hv4Ÿ4H?HP?HWHv4ŸWHXHw#4ŸXHYH u##4ŸYHZH t##4ŸZHņHv4ŸZGŧGvŸŧGĮGPĮGWHvŸWHXHw#ŸXHYH u##ŸYHZH t##ŸZHņHvŸZG]GvŸ]G`GvŸ`GcGvŸcG4Hv4Ÿ4H?HP?HWHv4ŸWHXHw#4ŸXHYH u##4ŸYHZH t##4ŸZHņHv4Ÿ]GĖGvŸĖGØGPØGWHvŸWHXHw#ŸXHYH u##ŸYHZH t##ŸZHņHvŸ]G`GvŸ`GcGvŸcG4Hv4Ÿ4H?HP?HWHv4ŸWHXHw#4ŸXHYH u##4ŸYHZH t##4ŸZHņHv4Ÿ`GęGvŸęGõGPõGWHvŸWHXHw#ŸXHYH u##ŸYHZH t##ŸZHņHvŸ`GcGvŸcG4Hv4Ÿ4H?HP?HWHv4ŸWHXHw#4ŸXHYH u##4ŸYHZH t##4ŸZHņHv4ŸcG4Hv4Ÿ4H?HP?HWHv4ŸWHXHw#4ŸXHYH u##4ŸYHZH t##4ŸZHņHv4Ÿ‰GŽGvŸŽG™GP™GWHvŸWHXHw#ŸXHYH u##ŸYHZH t##ŸZHņHvŸŸGZHxˇŸŸGĒGPĒGWHvŸWHXHw#ŸXHYH u##ŸYHZH t##ŸšGZHčˇŸšGŧGvŸŧGĮGPĮGWHvŸWHXHw#ŸXHYH u##ŸYHZH t##ŸÍGZHpˇŸÍGØGPØGWHvŸWHXHw#ŸXHYH u##ŸYHZH t##ŸįGZHāˇŸįGęGvŸęGõGPõGWHvŸWHXHw#ŸXHYH u##ŸYHZH t##Ÿ1HZHȡŸ1H4Hv4Ÿ4H?HP?HWHv4ŸWHXHw#4ŸXHYH u##4ŸYHZH t##4ŸbHmHugŸmHqHRqHņHugŸbHqHPxHƒHugŸƒH‡HR‡HņHugŸxH‡HPŽH™HugŸ™HHRHņHugŸŽHHP¤H¯HugŸ¯HŗHRŗHņHugŸ¤HŗHPēHÅHugŸÅHÉHRÉHņHugŸēHÉHPĐHÛHugŸÛHßHRßHņHugŸĐHßHP-IjJVrJRKVSIVIvŸVIaIPaIjJvŸrJRKvŸSIjJėˇŸrJRKėˇŸgIrIPrIjJvŸrJŌJvŸgIjJxˇŸrJŌJxˇŸI„IvŸ„IIPIjJvŸrJŌJvŸIjJčˇŸrJŌJčˇŸ•I IP IjJvŸrJŌJvŸ•IjJpˇŸrJŌJpˇŸ¯I˛IvŸ˛IŊIPŊIjJvŸrJŌJvŸ¯IjJāˇŸrJŌJāˇŸųIüIv4ŸüIJPJjJv4ŸrJŌJv4ŸųIjJȡŸrJŌJȡŸJjJv4ŸrJŌJv4Ÿ#JjJugŸrJŌJugŸ#J'JPrJJP'JjJvŸ‚JŌJvŸ-JjJugŸ‚JŌJugŸ-J1JP‚JJP1JjJvŸ’JŌJvŸ7JjJugŸ’JŌJugŸ7J;JP’JŸJP;JjJvŸĸJŌJvŸAJjJugŸĸJŌJugŸAJEJPĸJ¯JPEJjJvŸ˛JŌJvŸKJjJugŸ˛JŌJugŸKJOJP˛JŋJPOJjJvŸÂJŌJvŸUJjJugŸÂJŌJugŸUJYJPÂJĪJPáJčJugŸčJėJRėJRKugŸáJėJPķJúJugŸúJūJRūJRKugŸķJūJPK KugŸ KKRKRKugŸKKPKKugŸK"KR"KRKugŸK"KP)K0KugŸ0K4KR4KRKugŸ)K4KP;KBKugŸBKFKRFKRKugŸ;KFKPŸKĘKWŸKĘKwėŸĸK¸KV“¸KžKv|Ÿ“žKĘKV“ŸKĘKō*{žKÆKō*{ōKüKR"L,LRQL[L‘# “[LhLV“hLqLv|Ÿ“[LhLvhLkLPkLlLv|lLpLpdŸ€L•L0Ÿ•LĸLP‡LĸL‘#Ÿ°LáL‘áLđLRM5MWWM†MW)N~NW$MOMVˆM)NV5M6MP6MOMWˆM)NWKMOMU$MOMB¨ŸˆM)NB¨Ÿ‰NûNWûNüNuŸüNũNt ŸũNOWOOuŸOOt ŸO˜OWŧNũN1ŸũNO0ŸÖNûNWûNüNuŸüNũNt ŸÖNÚNu ŨNßNtßNãNtũNOWOOuŸOOt ŸũNOu O Ot O OtCOLOvMOTOPBPNPvNPPPtPPUP‘dBPNPvŖPĩPR=QTQ0ŸģPÄPP’P=Q‘=QCQPCQjQ‘’P=Q‘#Ÿ=QCQpŸCQjQ‘#ŸĄPŖPRŖPĩP‘#ŖP=Q‘=QCQPCQjQ‘ŖPĩP‘# Ÿ=QCQp ŸCQTQ‘# ŸĩPˇPPpQĻQ0ŸĻQÁQQQÁQ‘#Ÿ›QÁQ‘#Ÿ›QĻQ0ŸĻQŊQQŊQÁQqŸĐQ÷QV“úQRV“×QæQVúQRV×QæQPúQ RP×QæQRúQ RR RRvŸ×QæQ1ŸúQR1ŸÛQæQq4ŸúQ Rq4ŸRRRvŸR R‘#Ÿ RÃRvŸŠRˇRPĶRSuōRSu SSP“S.SV“.S™SV“™S›SvŸ“›SŦSV“ąSËSV“SSPSSu S4SW7S“SW“S¤SQąSËSQ SnSu ›S¤Su (S4Sō…‡›S¤Sō…‡KS“SW“S¤SQąSËSQ\SaSQaS¤SuTąSËSuT~S“Sō^ˆąSÅSō^ˆ~S†Spr"ŸˆS¤SuTąSËSuTˆS‹SptŸ‹SžSRąSËSRąSËSuTąSËSRÅSËSpuT"ŸÕSāSugŸāSäSRäSîSugŸÕSäSPTBTUBTCTtCTGT‘@WTTUTŽTVŽT‘T‘HTZTߨŸHTZTV2TBTUBTCTtCTGT‘@ZTTUzTŽTVŽT‘T‘)U=UVđUúU‘úUûUPˇWÍWVÎWŲWVŲWîWvø~ŸÎWŲWVŲWîWvø~ŸX XV!X1XV1XCXvø~Ÿ!X1XV1XCXvø~Ÿ]X€XV€X‚X‘#$rXX‘2$w"]X€XvāŸ€X‚X ‘#$#`ŸĢXÉXPÉX—Y‘XÉXÕXWYYPY—YWY—YVY#YUFYKYPKY—YUHYKYPKY—YUHYKYpŸKYSYPSY—YuŸåYīYRåwŸ‘#ŸOwŸOP‘#Ÿņ‘oŸR,‘oŸ,0R0D‘oŸDHRHP‘oŸņøPø˙w<ŸPõ˙w Ÿ#w Ÿû‘oŸ,‘oŸ,0R0D‘oŸDHRHP‘oŸûP0P˙ wŸ1;wŸ‘oŸ7D‘oŸDHRHP‘oŸP7HPe„wŸ„…‘#Ÿ…¯wŸ¯°‘#ŸqŒ‘oŸŒR¤‘oŸ¤¨R¨°‘oŸqwPw~w<Ÿ…Pu„W„…‘‘¯W¯°‘z…‘oŸ–¤‘oŸ¤¨R¨°‘oŸz…P–¨P]ZeZPeZnZ‘¤ZŦZPŦZËZVÍZ÷ZVļZÅZPÍZĶZPĻZÉZŠŸÍZ÷ZŠŸĻZŦZPŦZÉZVÍZ÷ZV [h[0Ÿh[“\‘T—\ĸ\QŊ\Ô\‘TG[ĸ\‘#TŸŊ\Ô\‘#TŸ}[ĸ\UŊ\Ô\U}[•[0Ÿ•[ú[1Ÿú[\Q\p\1Ÿp\†\QŊ\Ô\1Ÿ}[•[0Ÿ•[†\VŊ\Ô\V•[ü[W \p\WŊ\Ô\W§[ú[WŊ\Į\W§[ú[w ŸŊ\Į\w ŸÍ[â[WŊ\Į\WÍ[â[w ŸŊ\Į\w ŸÛ[Ũ[P'\p\UĮ\Ô\U'\p\uŸĮ\Ô\uŸM\^\UĮ\Ô\UM\^\uŸĮ\Ô\uŸW\Y\P…[†\u ŸŊ\Ô\u Ÿ@]c]0Ÿc]Ž]VW]Ž]‘#TŸ!^%^P%^>^VP^n^Pn^ą^vą^˛^tp˛^į^vį^č^tpč^ _vÃ_Ī_RĪ_í_uPí_î_tLî_ķ_Rķ_`uPD`W`uPķ_`R``rŸW_`%ŠŸ$`Ü`%ŠŸW_]_W]_^_t^_b_tb_í_u`Ÿí_î_t\Ÿî_`u`Ÿ$`Ü`u`Ÿl_`%ŠŸ$`‡`%ŠŸŖ`Ī`%ŠŸl_ė_Wė_í_udŸí_î_t`Ÿî_`W$`b`Wb`‡`udŸŖ`Ž`WŽ`Â`udŸÂ`Ī`WĨ`Â`udŸą`ģ`u\Ÿģ`ŋ`Rŋ`Â`u\Ÿą`ŋ`Pz_Ŋ_VŊ_í_u í_î_tî_`u $`D`VD`W`u W`Y`VY`‡`u Â`Ä`VÄ`Ī`u z_ė_Wė_í_udŸí_î_t`Ÿî_`W$`b`Wb`‡`udŸÂ`Ī`W„_Ŋ_VŊ_í_u í_î_tî_`u $`D`VD`W`u W`Y`VY`t`u „_Ģ_uTĢ_í_u\Ÿí_î_tXŸî_`u\Ÿ$`W`u\ŸW`h`uTh`t`u\ŸY`t`u\Ÿe`o`u[Ÿo`s`Rs`t`u[Ÿe`s`PĨ_ė_Wė_í_udŸí_î_t`Ÿî_`W$`W`W¨_í_u[Ÿí_î_tWŸî_`u[Ÿ$`W`u[Ÿ¨_¯_P$`/`P¯_í_u`Ÿí_î_t\Ÿî_`u`Ÿ5`W`u`Ÿĩ_í_udŸí_î_t`Ÿî_`udŸ5`W`udŸĩ_ē_P5`>`Pē_í_u\Ÿí_î_tXŸî_`u\ŸD`W`u\ŸÜ_í_u\Ÿí_î_tXŸD`W`u\Ÿß_í_udŸí_î_t`ŸD`W`udŸß_ä_Pä_ë_vtŸD`Q`PQ`W`vtŸt`‡`udŸz`‚`u[Ÿ‚`†`R†`‡`u[Ÿz`†`P‡`Ŗ`u`Ÿ`•`u[Ÿ•`™`R™`Ŗ`u[Ÿ`™`Pū` aP*a5aPaafaPfaŽaVja‰aVja‰a‘ĩbŊbRc‘c‘ŋcÃc‘˜ŸÃcČcPČcĘctĘcĐc‘„ĐcÛc‘˜ŸŋcÄc‘ācd0Ÿd"dRīcķc‘˜ŸķcøcPøcúctúcd‘„d"d‘˜Ÿīcôc‘ dd‘˜Ÿ d˛dPĩdĀdPņd%eV%e/evŸ/e‡eVeePeˆeWeePe%eW%ekeRæd‰eU‰eŠe‘ŠeĻeUĻe§e‘e‰eU‰eŠe‘feˆeWfe‰eU‰eŠe‘ŠeĻeUĻe§e‘fJfVJfLfuā_ŸLfOftÜ_ŸOfcfVcfefuā_Ÿefhf‘Ø_ŸhfpfVpf‘fuā_Ÿ‘f“fV“f˛fuā_ŸfLfuLfOftOfefuefhf‘hfŒfu‘f˛fuĄfĢfuß_ŸĢf¯fR¯f˛fuß_ŸĄf¯fP7fJfVJfLfuā_ŸLfOftÜ_ŸOfcfVcfefuā_Ÿefhf‘Ø_Ÿ:fLfuß_ŸLfOftÛ_ŸOfefuß_Ÿefhf‘×_Ÿ:fEfPEfJfv<ŸJfLfuā_<ŸLfOftÜ_<ŸOfZfPpf‘fuā_Ÿyfƒfuß_Ÿƒf‡fR‡f‘fuß_Ÿyf‡fPāfúfP)g9gPũf%gW%g&gudŸ&g)gt`ŸIgZgWegpgWpg…gudŸ‡g‰gW‰g§gudŸũf$gV$g&gu&g)gtIgZgVegggVgg…gu‡gĨgVĨg§gu‰gĨgVĨg§gu”gžgucŸžgĸgRĸg§gucŸ”gĸgPg%gW%g&gudŸ&g)gt`ŸIgZgWg&gucŸ&g)gt_ŸIgZgucŸggPIgWgP)gEgWEgFgu FgIgt)gDgVDgIgPpg…gudŸvg~gucŸ~g‚gR‚g…gucŸvg‚gPŗgŌgu`ŸŌgÚgPÚg:huT:h=htP=hahuTahdhtPdhŸhuTÛg8hV8h:hudŸ:h=ht`Ÿ=h_hV_hahudŸahdht`ŸdhfhVfhhudŸhƒhVƒhhudŸhŸhVųg8hV8h:hudŸ:h=ht`Ÿ=h_hV_hahudŸahdht`Ÿųg:huT:h=htP=hahuTahdhtPh8hV8h:hudŸ:h=ht`Ÿ=h_hV_hahudŸahdht`Ÿh)hV)h:hu`Ÿ:h=ht\Ÿ=hJhVJhahu`Ÿahdht\Ÿh:hu_Ÿ:h=ht[Ÿ=hahu_Ÿahdht[ŸhhP=hGhP)h:hu`Ÿ:h=ht\ŸJhahu`Ÿahdht\Ÿ,h:hudŸ:h=ht`ŸJhahudŸahdht`Ÿ,h3hP3h:hu`<Ÿ:h=ht\<ŸJhVhPfhhu`Ÿlhshu_ŸshwhRwhhu_ŸlhwhPƒhhudŸh–hu_Ÿ–hšhRšhhu_ŸhšhPŋhØhPØhāhpŸ9iFiPŋhōhu`ŸōhūhPūh iuT i6iu`Ÿ6i9i‘XŸ9iqiu`Ÿqiti‘XŸti‚iuT‚i¸iu`Ÿ¸iÎiuTŌh iu ti‚iu ¸iÎiu ķhúhuTúh iudŸti‚iudŸ¸iÎiudŸķhūhPūh iuTti‚iuT¸iÎiuTi iudŸti‚iudŸi iu_Ÿti‚iu_Ÿi iPtiiP i6iu`Ÿ6i9i‘XŸ]iqiu`Ÿqiti‘XŸŸi¸iu`Ÿ i4iV4i9iP]ioiVoitiPŸiļiVĸiļiV§iŽiudŸŽi˛iR˛i¸iudŸ§i˛iP&i6iu`Ÿ6i9i‘XŸ]iqiu`Ÿqiti‘XŸ)i6iudŸ6i9i‘\Ÿ]iqiudŸqiti‘\Ÿ)i2iP2i6iu`<Ÿ6i9i‘X<Ÿ]igiP9i]i5ÉŸ9iOiu`ŸOiWiPWi]iuT„iŸiu`ŸŠi‘iu_Ÿ‘i•iR•iŸiu_ŸŠi•iPĀiĮiu_ŸĮiËiRËiÎiu_ŸĀiËiP÷ijWj7ju 7j:jtYjąju ÷i˙i w<1Ÿ˙i jP÷i:j0ŸYjąj0Ÿ j6jW6j7judŸ7j:jt`ŸYjujWuj‘judŸ‘j“jW“jąjudŸ j5jV5j7ju7j:jtYjljVlj‘ju‘j¯jV¯jąju“j¯jV¯jąjužj¨jucŸ¨jŦjRŦjąjucŸžjŦjP#j6jW6j7judŸ7j:jt`ŸYjjjW&j7jucŸ7j:jt_ŸYjjjucŸ&j.jPYjgjP:jUjWUjVju VjYjt:jTjVTjYjPuj‘judŸ{jƒjucŸƒj‡jR‡j‘jucŸ{j‡jPæjījVųjœkVœkļkuģkŊkVŊkÕku:k˛kuT:kWkuTWkyku`ŸykœkuTœk˛ku`Ÿ=k˛ku_Ÿ=kEkPk—kPWkyku`Ÿ]kykudŸ]kokPœk˛ku`Ÿĸk˛kudŸĸkąkPÃkÎku_ŸÎkŌkRŌkÕku_ŸÃkŌkP l¨lu¨lĢlt ĢlŨluŨlālt āl)mu.m‚mu lĻlVĻl¨ludŸ¨lĢlt`ŸĢlÛlVÛlŨludŸŨlālt`Ÿāl˙lV˙l.mudŸ.m0mV0m;mudŸ;m=mV=mRmudŸRmTmVTmimudŸimkmVkm‚mudŸl¨lu¨lĢlt ĢlŨluŨlālt ālmu;mHmuRm‚mul§lW§l¨lu`Ÿ¨lĢlt\ŸĢlÜlWÜlŨlu`ŸŨlālt\ŸālmWmmu`Ÿ;mHmWRm‚mW˙lmu`Ÿ mmu_ŸmmRmmu_Ÿ mmP6lĻlVĻl¨ludŸ¨lĢlt`ŸĢlÛlVÛlŨludŸŨlālt`ŸālũlV;m=mV=mHmudŸRmTmVTmimudŸimkmVkm‚mudŸ9l¨lu_Ÿ¨lĢlt[ŸĢlŨlu_ŸŨlālt[Ÿālũlu_Ÿ;mHmu_ŸRm‚mu_Ÿ9lDlPęl÷lPWlžlu ālęlu Rm‚mu Wlflu <u`<ŸWlžl0Ÿālęl0ŸRm‚m0ŸslžludŸālęludŸRm‚mudŸslžluālęluRm‚musm{mu_Ÿ{mmRm‚mu_ŸsmmP‹lžludŸālęludŸŽlžlu_Ÿālęlu_ŸŽl“lPālįlP“lžlu`ŸÄlĖlu`Ÿ™lžludŸĮlĖludŸ™lĄlPĮlŌlPĢlĖlu ĢlĖlum%mudŸ m%mu_Ÿ m%mP=mHmu`ŸCmHmu_ŸCmHmPTmimudŸZmbmu_ŸbmfmRfmimu_ŸZmfmP[nanRan|n‘[n|n‘­nÛnVŨn(oVąn#o:ŸąnÛnVŨn#oVŨno:ŸŨnoVÅnĖnP‚o†oP†oãoWŒo˜oP˜oâoVŒožo0Ÿžo¤oP¸oÅoPŒožo0ŸžoäoU pLpVLpMpPMp_pV˛p´pV8pBpvWp_pV˛p´pVŧpĮpugŸĮpËpRËpÕpugŸŧpËpPfpŽpVĄp˛pVqpŽpvŸĄp˛pvŸzpŽpugŸĄp˛pugŸzp‚pPĄp¯pPbqqQqĻq‘LgqqQqĻq‘LgqĻqWgqqVgq—qV—qœqv|ŸœqĘqVqƒqVƒq‡qv|Ÿ‡q—qV—q qv|Ÿq‡q‘HŒqĻq‘Hq‡qPŒq›qPĻqļqQļqžq‘HĻqŽq qq4ŸĻqĘqWŽqžqW.rĄrWĄrŖr‘ŖrģrW.rrVrŖr‘ŖrģrV.rĸrUĸrŖr‘ŖrģrU5rFrPzr…rR…r‰r ‘? ūŸar‰rMŠŸar‰rW‰rŖrÚ˛Ÿ‰rĄrWĄrŖr‘ÚrsPsŨs‘ŨsâsPâsTt‘ÚrspŸsŨs‘#ŸŨsâspŸâsTt‘#ŸssPsŨs‘ŨsâsPâsTt‘sspŸsŨs‘#ŸŨsâspŸâsTt‘#ŸssRs/s‘\Ũs˙s0ŸsOsWOsŨs‘Ũs˙sW˙sTt‘ssRs/s‘\Ũs˙s0ŸŨs˙sWęs˙s1ŸęsösRęsņsr/sŨsVŗŸ˙sTtVŗŸ/sOsWOsŨs‘˙sTt‘OsŨsÍŽŸ˙sTtÍŽŸOsUsPUsÛsW˙sTtWasąsV.tOtVasÛsW˙sTtWtsŨs^ŽŸ˙sTt^ŽŸtsÛsW˙sTtW†sÜsU˙sTtU†sÛsW˙sTtW‘s¨sU.tOt0Ÿ.tOtW:tOt1Ÿ:tFtR:tAtr¨sÛsW˙s.tWOtTtW¨sŨs:Ÿ˙s.t:ŸOtTt:Ÿ¨sÃs ww<"Ÿ˙stwp"ŸOtStwp"ŸąsÚsV˙s.tVOtTtVšsŨs:Ÿ˙s.t:ŸšsÚsV˙s.tV˙s.t:Ÿ˙s.tVÍsÔsPĢtĀt‘ĢtĀtVĀtÎtVÎtŌt‘Īév$Ÿéû‘#$Ÿû v$ŸÕ‘oŸR ‘oŸÕŨPûPŨéVéû‘uuPu^vV^v`vu`vavtavžvVuup4Ÿu uP u`vud`vavt`avžvud]u^vV^v`vu`vavtavžvVšuuQu`vu\`vavtXŠv“vu\“vŽvvŸŽvžvu\úuavHŸŠvŽvHŸúuvQv`vu``vavt\ŠvŽvu`!v`vu`#$Ÿ`vavt\#$ŸŠvŽvu`#$ŸcvŠvv4ŸIv^vV^v`vu`vavtIv`vu`vavtKvavAŸ“Kv_vW_v`vu\`vavtXKvYv wu\<"ŸKvavAŸKvYv wu\<"#ÃvËvuŦ~ŸËvëvPëvwWw–yuü}–y™ytø}™y°yuü}°y˛yW˛y:zuü}Ãvëvuā~ŸëvövPöv–yu¤~–y™yt ~™y:zu¤~1wwWw–yuü}–y™ytø}™y°yuü}°y˛yW˛y:zuü}w–yu„~–y™yt€~™y°yu„~×y:zu„~(x°yHŸ×yzHŸ(xuxu¸~Ÿux†xR†x–yu˜~–y™yt”~™y°yu˜~×yzu˜~UxuxuÜ~Ÿux†xr$Ÿ†x–yu˜~#$Ÿ–y™yt”~#$Ÿ™y°yu˜~#$Ÿ×yzu˜~#$Ÿ˛y×yuā~Ÿ‰x–yu„~–y™yt€~™y°yu„~×yīyu„~šx°xRšx°yJŸ×yīyJŸšx°y8Ÿ×yīy8Ÿšx¨xr šx°y ĩŸ×yīy ĩŸšx°xr Ÿšx–yu„~–y™yt€~™y°yu„~×yīyu„~šx°y @Ÿ×yīy @Ÿšx¨x r  ĩ8!Ÿŗx–yuü}–y™ytø}™y°yuü}Įx–yuü}–y™ytø}™y°yuü}ßx–yu˜~–y™yt”~™y°yu˜~îx–yuÜ~Ÿ–y™ytØ~Ÿ™y°yuÜ~Ÿ÷x–yuĢ~Ÿ–y™yt§~Ÿ™y°yuĢ~Ÿ÷xyP™yĒyPy–yu¸~Ÿ–y™yt´~Ÿ y–yuŦ~Ÿ–y™yt¨~Ÿ I ugŸI M RM W ugŸ> M Pđ…†‘>†r†‘€†‡‘‡&‡‘&‡,‡Q,‡4‡r6%Ÿ4‡7‡p6%Ÿ7‡@‡P@‡C‡u <%ŸQ‡ˇ‘r†€†6Ÿr†€†ōūųx†€†6Ÿx†€†ōūųĨ†õ†n´ŸQ‡–‡n´Ÿŋ‡ˇn´ŸĨ†õ†WQ‡g‡Wg‡–‡u`Ÿŋ‡ˇWˇ†õ†n´ŸQ‡ƒ‡n´Ÿˇ†õ†uQ‡ƒ‡ug‡ƒ‡ur‡|‡u[Ÿ|‡€‡R€‡ƒ‡u[Ÿr‡€‡Pˆõ†WQ‡e‡WΆõ†u[ŸQ‡e‡u[ŸĪ†چPQ‡_‡Pچõ†u\Ÿā†õ†u`Ÿā†ī†P‡‡6Ÿ‡‡ōūų ‡Q‡6Ÿ ‡Q‡ōūų ‡#‡p?Ÿ#‡)‡P)‡4‡r?Ÿ4‡7‡p?Ÿ7‡Q‡u ?Ÿ/‡Q‡6Ÿ/‡Q‡ōūųC‡Q‡6ŸC‡Q‡ōūųƒ‡–‡u`Ÿ‰‡‘‡u[Ÿ‘‡•‡R•‡–‡u[Ÿ‰‡•‡P–‡˛‡u\Ÿœ‡¤‡u[Ÿ¤‡¨‡R¨‡˛‡u[Ÿœ‡¨‡PЇô‡‘ô‡s‰us‰v‰t v‰‰‘‰”‰P”‰܉u ˆ+ˆ0Ÿ+ˆƒˆVƒˆˆˆvŸˆˆˆVŧ‰ž‰V?ˆMˆP+ˆ?ˆu¨~ŸVˆˆu¨~Ÿŧ‰܉u¨~Ÿ+ˆ?ˆu´~ŸVˆ`ˆu´~Ÿ`ˆeˆPeˆˆu´~Ÿŧ‰܉u´~Ÿ+ˆ?ˆu¨~Ÿoˆˆu¨~Ÿ+ˆ?ˆu§~Ÿrˆ€ˆu§~Ÿ€ˆ‡ˆR‡ˆˆu§~Ÿ+ˆ8ˆPrˆ‡ˆPĮ‰Չu§~ŸÕ‰Ų‰RŲ‰܉u§~ŸĮ‰Ų‰PLjs‰uŦ~Ÿs‰v‰t¨~Ÿ”‰¤‰uŦ~Ÿŋˆs‰u¸~Ÿs‰v‰t´~Ÿ”‰¤‰u¸~ŸÔˆs‰uÜ~Ÿs‰v‰tØ~Ÿ”‰¤‰uÜ~ŸŨˆs‰u¨~Ÿs‰v‰t¤~Ÿ”‰¤‰u¨~ŸŨˆéˆP”‰ž‰Péˆs‰u¸~Ÿs‰v‰t´~Ÿ‰s‰uŦ~Ÿs‰v‰t¨~Ÿ‰s‰u´~Ÿs‰v‰t°~Ÿ3‰s‰uŦ~Ÿs‰v‰t¨~ŸI‰^‰uā~Ÿ^‰e‰Pe‰s‰uā~Ÿs‰v‰tÜ~Ÿã‰Šu ŠŠuŠŠPŠoŠWqŠãŠWŠŠ0ŸŠfŠVqŠˆŠVˆŠ™ŠvŸ™ŠĊV$ŠfŠudŸ§ŠãŠudŸ$Š-Šu0Š2ŠP$Š,Šu#ŸDŠfŠudŸ§ŠŠudŸGŠfŠucŸ§ŠŠucŸGŠRŠPĩŠŧŠPqŠŠu“ŠœŠ0Ÿ“Š˜ŠP˜ŠœŠuP#ŸĘŠՊucŸÕŠ؊R؊ãŠucŸĘŠ؊Pr‹Ÿ‹utŸŸ‹ ‹tpŸ ‹°‹utŸ°‹ą‹tpŸą‹Ō‹utŸr‹ž‹Vž‹ ‹P ‹¯‹V¯‹°‹u°‹ą‹tą‹ŗ‹Vŗ‹Ō‹ur‹z‹v#ŸŒ‹Ÿ‹utŸŸ‹ ‹tpŸ ‹°‹utŸ°‹ą‹tpŸ‹Ÿ‹usŸŸ‹ ‹toŸ ‹°‹usŸ°‹ą‹toŸ‹œ‹Pœ‹Ÿ‹ut<ŸŸ‹ ‹tp<Ÿ ‹§‹Pš‹ċusŸÄ‹ȋRȋŌ‹usŸš‹ȋPŒ/ŒutŸ/Œ0ŒtpŸ0Œ@ŒutŸ@ŒAŒtpŸAŒbŒutŸŒ.ŒV.Œ0ŒP0Œ?ŒV?Œ@Œu@ŒAŒtAŒCŒVCŒbŒuŒ Œv#ŸŒ/ŒutŸ/Œ0ŒtpŸ0Œ@ŒutŸ@ŒAŒtpŸŒ/ŒusŸ/Œ0ŒtoŸ0Œ@ŒusŸ@ŒAŒtoŸŒ,ŒP,Œ/Œut<Ÿ/Œ0Œtp<Ÿ0Œ7ŒPIŒTŒusŸTŒXŒRXŒbŒusŸIŒXŒPpŒЌPЌĮŒķPŸĮŒ،P،ŨŒķPŸŨŒéŒPéŒíŒķPŸíŒųŒPųŒũŒķPŸũŒ P  ķPŸ PķPŸ)P)-ķPŸ-9P9@ķPŸ@IPIPķPŸPYPY`ķPŸ`zPz֍ķPŸÖæPæņr Ÿņ;ŽķPŸpŒ™ŒR™ŒŋŒVŋŒĮŒķRŸĮŒĨVĨ֍ķRŸÖŽVŽ1ŽķRŸ1Ž9ŽV9Ž;ŽķRŸ Œ̌’ŠŸ Œ̌V-¤ŠŸ-VĮŒŨŒ6¨ŸĮŒŨŒVŨŒíŒ•ŠŸŨŒíŒVíŒũŒ˜ŠŸíŒũŒVũŒ ĄŠŸũŒ V ¨Ÿ V-@›ŠŸ-@V@PžŠŸ@PVP`ŠŸP`V`zPz֍ķPŸÖæPæņr Ÿņ;ŽķPŸ’֍WüūWūŽudŸ’ĨVĨ֍ķRŸüŽVŽŽķRŸ¨֍WĢ֍u_ŸĢ¯PĖĶP¯Ėu`ŸĩĖudŸĩšPÍɍPãæPæņpņüud֍üVūŽudŸ ŽŽu_ŸŽŽRŽŽu_Ÿ ŽŽPŽ1Žu`ŸŽ#Žu_Ÿ#Ž'ŽR'Ž1Žu_ŸŽ'ŽP@Ž_ŽP_ŽuŽķPŸuŽ€ŽP€ŽŽķPŸŽŽŽPŽŽ§ŽķPŸ@ŽjŽRjŽuŽķRŸuŽ€ŽR€ŽŽķRŸŽ™ŽR™Ž§ŽķRŸYŽuŽäŠŸYŽjŽRjŽuŽķRŸŽ™ŽR™Ž§ŽķRŸ°ŽŌŽPŌŽ÷Ž‘T÷ŽmķPŸ°ŽŪŽRŪŽķŽUķŽmķRŸßŽ0Ÿp1)ŸMSp1)ŸČŽkWkm‘ߎ0ŸDvķPŸMSvķPŸęŽqvDU A­ŠŸ AWvAU/AK°Ÿ/AWSWvDUSkWkm‘pď‘ŒēVēģ‘ģˏVˏЏ‘ˆĸRĸģ‘ģɏRɏЏ‘ˆĸPĸģ‘ģĪPŖģ°ŠŸŖēVēģ‘Џ!‘!?V?A‘Џ!‘!@W@A‘ꏐ‘V Pę!‘ô!ËŠŸôP!@W@A‘Pa‘c r uŦ~Ÿr ” P” H uŒ~H K tˆ~K 8uŒ~c l uā~Ÿl ” Q” H u”~H K t~K 8u”~Û H uŒ~H K tˆ~K 8uŒ~  u´~Ÿ " R" H u„~H K t€~K œ u„~  ų u„~8u„~ļ œ HŸĸ ų HŸļ G WG H u¸~ŸH K t´~ŸK œ Wĸ ā Wā ų u¸~Ÿé G w$ŸG H uÜ~ŸH K tØ~ŸK œ w$Ÿĸ ā w$Ÿā ų uÜ~Ÿų uā~Ÿ H u„~H K t€~K ” u„~ĸ Ö u„~ 0 P0 1 t1 ; tK V PV \ u > g u„~€  u„~ĸ Ā u„~> g u~€  u~ĸ Ā u~X g u~€  u~[ g uĻ~Ÿ€  uĻ~Ÿ[ g P€ Š PK o ÆŠŸK o u´~Ÿ¤ Ā u¨~Ÿ­ ģ uĻ~Ÿģ ŋ Rŋ Ā uĻ~Ÿ­ ŋ Pg H uŦ~ŸH K t¨~Ÿo € uŦ~Ÿ| H uŦ~ŸH K t¨~Ÿo € uŦ~ŸŖ H u¸~ŸH K t´~Ÿo € u¸~Ÿ˛ H uÜ~ŸH K tØ~Ÿo € uÜ~Ÿģ H u¨~ŸH K t¤~Ÿo € u¨~Ÿģ Į Po z PĮ H u¸~ŸH K t´~Ÿä H uŦ~ŸH K t¨~Ÿô H u´~ŸH K t°~Ÿ H uŦ~ŸH K t¨~Ÿ H uā~ŸH K tÜ~Ÿp”P”<‘U<‘=‘ķPŸp R ŗVŗätäņ‘Pņütü‘‘P‘)‘t)‘5‘‘P5‘8‘t8‘=‘‘PĄˇ0ŸĖŨp1)ŸŠ;‘W;‘=‘‘Ąˇ0ŸĖ ‘VąˇQؐíQí ‘‘Tų ‘­ŠŸų ‘WڐíQí ‘‘T‘ ‘ŲŠŸ‘ ‘W ‘;‘W;‘=‘‘@‘”‘‘\‘ˆ‘Vˆ‘‰‘‘‰‘œ‘Vœ‘Ą‘‘X‘p‘Rp‘‰‘‘‰‘š‘Rš‘Ą‘‘X‘p‘Pp‘‰‘‘‰‘ ‘Pq‘‰‘°ŠŸq‘ˆ‘Vˆ‘‰‘‘°‘’‘’’V’!’‘°‘’‘’ ’W ’!’‘ʑõ‘‘õ‘û‘Vû‘’Pʑ’‘ԑ’ËŠŸÔ‘å‘P’ ’W ’!’‘0’A’‘CRuŦ~ŸRtPtuŒ~tˆ~kuŒ~CLuā~ŸLtQtu”~t~ku”~ģuŒ~tˆ~kuŒ~đųu´~ŸųRu€~tü}Ŗu€~§Īu€~ôku€~ôuŦ~Ÿ„HŸŸŖHŸ§ĪHŸkHŸ„Öu¸~ŸÖčPčuˆ~t„~uˆ~ŸŖuˆ~§Īuˆ~kuˆ~ˇÖuÜ~ŸÖčp$Ÿčuˆ~#$Ÿt„~#$Ÿuˆ~#$ŸŸŖuˆ~#$Ÿ§Īuˆ~#$Ÿkuˆ~#$ŸĪôuā~Ÿņu€~tü}™u€~ŸŖu€~§Ģu€~ku€~ņ P  t t&P&,u Au€~P™u€~ŸŖu€~u€~5ku€~Au~Pfu~f€u¨~Ÿ€‰u~‰™u¨~ŸŸŖu~u~5ku~2Au~Pfu~f€u¨~Ÿ€‰u~‰™u¨~Ÿ5AuĻ~ŸP™uĻ~Ÿ5ARP}R€™RP™uĻ~ŸP}R€™RP™ ˙ŸPfp|Ÿf}u¨~4Ÿ€—p|Ÿ—™u¨~4ŸZf ˙ŸZfp|Ÿ€™ ˙Ÿ€—p|Ÿ—™u¨~4ŸƒŒQŒp|™u~7ÆŠŸ7u´~Ÿu¨~Ÿ5ku¨~ŸuĻ~Ÿ5kuĻ~ŸP5ZP`kP5ZP`kP?ZpŸ`kpŸAH ˙ŸAHpŸAuŦ~Ÿt¨~Ÿ?PuŦ~ŸXuŦ~Ÿt¨~Ÿ?PuŦ~Ÿpu¸~Ÿt´~Ÿ?Pu¸~ŸuÜ~ŸtØ~Ÿ?PuÜ~Ÿˆu¨~Ÿt¤~Ÿ?Pu¨~Ÿˆ”P?JP”u¸~Ÿt´~ŸąuŦ~Ÿt¨~ŸÁu´~Ÿt°~Ÿ×uŦ~Ÿt¨~Ÿíuā~ŸtÜ~ŸP’Œ’‘Œ’k“Wk“p“wŸp“‰“W“ļ“WŲ“ ”WS’¤’uŒ’¤’V¤’ŗ’Pŗ’ü’V““V““P“!“V!“*“P*“,“Vs“y“Vy“ƒ“Pƒ“ˆ“Vš“ļ“Q°’ŗ’Pŗ’ü’Vš“ļ“QÁ’ƒQƒü’uTš“ļ“uTã’ü’ōš%š“­“ōš%ã’ë’pr"Ÿí’ü’uTš“ļ“uTí’đ’ptŸđ’ü’R𓪓RŖ“ļ“ptŸš“ļ“uT𓪓RŖ“ļ“ptŸ­“ļ“puT"ŸM“s“Vs“y“udŸ“š“VP“y“u_Ÿ“š“u_ŸP“X“P“—“PX“y“u`Ÿ^“y“udŸ^“o“Pۓņ“udŸá“ė“u_Ÿė“đ“Rđ“ņ“u_Ÿá“đ“Pņ“ ”u`Ÿ÷“”u_Ÿ””R” ”u_Ÿ÷“”PĀ“˓u_ŸË“Ī“RΓؓu_ŸĀ“Ī“PąŧugŸŧĀRĀĘugŸąĀP'”C”PC”˛”u ˛”ĩ”tĩ”ÔPÔДu ДĶ”tĶ” •u %•Ÿ•u D”ĩ”/ŸĶ”Ÿ•/ŸD”J”WJ”K”tK”O”tO”˛”u\Ÿ˛”ĩ”tXŸĶ”Ÿ•u\ŸŠ•••udŸ••™•R™•Ÿ•udŸŠ•™•Pq”˛”uT˛”ĩ”tPĶ”•uT%•(•uT(•T•udŸh•r•uTq”°”V°”˛”u˛”ĩ”tĶ”•V%•B•VB•T•uh•j•Vj•r•u(•B•V3•:•u[Ÿ:•>•R>•B•u[Ÿ3•>•PŽ”˛”uT˛”ĩ”tPĶ”•uT‘”˛”u[Ÿ˛”ĩ”tWŸĶ”•u[Ÿ‘”•”Pâ”ī”P•”˛”u`Ÿ˛”ĩ”t\ŸĶ”â”u`Ÿō”•u`Ÿ›”˛”udŸ˛”ĩ”t`ŸĶ”â”udŸō”•udŸ›”Ÿ”Pō”˙”PŸ”˛”u\Ÿ˛”ĩ”tXŸĶ”â”u\ŸĨ”˛”udŸ˛”ĩ”t`ŸĶ”â”udŸĨ”Š”PĶ”ߔPĩ”ДuДĶ”t ĩ”ΔVΔĶ”P •%•u\Ÿ••u[Ÿ••R•%•u[Ÿ••PB•T•udŸH•O•u[ŸO•S•RS•T•u[ŸH•S•PT•h•u`ŸZ•a•u[Ÿa•e•Re•h•u[ŸZ•e•P啸•u`Ÿø•û•t\ŸP–a–u`Ÿa–d–‘XŸë•ø•udŸø•û•t`ŸP–a–udŸa–d–‘\Ÿë•ô•Pô•ø•u`<Ÿø•û•t\<ŸP–W–Pû•P–S­Ÿ‡–Ĩ–S­Ÿû•P–u ‡–Ĩ–u –P–S­Ÿ‡–Ĩ–S­Ÿ–P–uT‡–Ĩ–uT?–P–uTB–I–u_ŸI–M–RM–P–u_ŸB–M–Pl–‡–u`Ÿr–y–u_Ÿy–}–R}–‡–u_Ÿr–}–P‰–Ŗ–udŸ•–œ–u_Ÿœ– –R –Ŗ–u_Ÿ•– –PęV‘ V  ‘  V F‘FHVH`‘ V‘ V  ‘  V F‘FHVH`‘ PsWuW°=W 5’ŠŸ 5Vĩ6¨ŸĩVĩŌ•ŠŸĩŌVŌō˜ŠŸŌōVōĄŠŸōV2¨Ÿ2V2R¤ŠŸ2RVRr›ŠŸRrVr’žŠŸr’V’˛ŠŸ’˛V˛_‘L”˙Ÿ°=‘L”˙Ÿô_‘D°Đ‘D ‘D3‘Dô_V°ĐV V  ‘3‘ _‘D°Đ‘D _‘[Ÿ°Ā‘[ŸĀĮRĮĐ‘[Ÿ PŊĮP_‘\Ÿ°Ŋ‘\Ÿ_‘D°Ŋ‘D#P°ˇPÜßPß‘LĐV3‘D!(‘[Ÿ(/R/3‘[Ÿ!/P3=‘H9=‘[Ÿ9=P5äŠŸĸĩ䊟#°äŠŸæäŠŸFV䊟5V‘ĸĩV#°VæVFHVHV‘Fˆ°Ÿ>°°Ÿ°ŸFV°ŸFˆV>°VVFHVHV‘sˆn´ŸsˆVm°ŪŠŸFVŪŠŸm°VFHVHV‘„°‘`Ÿ”°‘`Ÿ—Ļ‘[ŸĻĒRǰ‘[Ÿ—ĒPHV‘`ŸNV‘[ŸNVPwV‘¯V¯ą‘ąŗVŗė‘ėîVî‘—V‘¯V¯ą‘ąŗVŗė‘ėîVî‘—W‘LÖWÖÜPÜÜWÜų‘Lų W RWU‘LU§W§­P­ãWã‘L°Å’ŠŸ°ÅVE6¨ŸEVEb•ŠŸEbVb‚˜ŠŸb‚V‚ĸĄŠŸ‚ĸVĸ¨ŸĸÂVÂ⤊ŸÂâV⛊ŸâV"žŠŸ"V"BŠŸ"BVBÖwH$H&ŸÖÜpH$H&ŸÜÜwH$H&ŸÜų ‘L”H$H&ŸU§wH$H&Ÿ§­pH$H&Ÿ­ãwH$H&ŸŒų‘DUu‘D­ą‘DģŲ‘DŒųVUuV­¯V¯ą‘ģŲ‘ĸų‘DUu‘DĨų‘[ŸUe‘[ŸelRlu‘[ŸĨ­PblP­ų‘\ŸUb‘\Ÿŗų‘DUb‘DŗģPU\P€ƒPƒ‹p‹­‘\u­VģŲ‘DĮΑ[ŸÎÕRÕŲ‘[ŸĮÕPŲã‘Hßã‘[ŸßãPÅ䊟2E䊟ģU䊟Œ­äŠŸėü䊟ÅV‘2EVģUVŒ­VėîVîü‘Ö°ŸÖU°Ÿ§­°Ÿėü°ŸÖVÖUV§­VėîVîü‘n´ŸVUŪŠŸėüŪŠŸUVėîVîü‘)U‘`Ÿ9U‘`Ÿ<K‘[ŸKOROU‘[Ÿ<OPîü‘`Ÿôü‘[ŸôüPHNPNhuThitPi¸uT¸štPš*uT'fVfhu hitiļVš V %u HfVfhu hitiļVš V %u iļVš V %u œšn´ŸœļVÍ V %u ä udŸô udŸ÷ucŸR ucŸ÷PucŸ R *ucŸ PĻßWJkWz’W’˜u ĻIuTIJtPJČuTČÛu`ŸąßWJkWz’W’˜u ąÂRÂŅuPJYRYeuT#ŸŊŅWJk0ŸJYRYeuT#ŸYk1ŸYeRY`r×Iu`ŸIJt\Ÿk­u`ŸąĮu`Ÿ×GVGJPkĢVîIudŸIJt`ŸkzudŸŠ­udŸąĮudŸņHWkzWŠ­WąĮWņōv IudŸIJt`ŸkzudŸ Iu_ŸIJt[Ÿkzu_Ÿ PkwP’›P›œtœ tąĮudŸˇÂu_ŸÂÆRÆĮu_ŸˇÆPIu`ŸIJt\ŸJ0Ÿ)u šÉu ŽWŽu`Ÿt\Ÿ÷Ww#ŸPŽWŽu`Ÿt\ŸÉWÍåWVPÉVÍĪV/udŸt`ŸšudŸÍåudŸ2:P:uTtPšuTÍåuT/3vPudŸt`ŸšudŸSu_Ÿt[Ÿšu_ŸS[P—PŦģPģŧtŧĀtĪåudŸÕāu_ŸāäRäåu_ŸÕäP[u`Ÿt\Ÿ[0Ÿ&_WĘëWúWu &ÉuTÉĘtPĘHuTH[u`Ÿ1_WĘëWúWu 1BRBQuPĘŲRŲåuT#Ÿ=QWĘë0ŸĘŲRŲåuT#ŸŲë1ŸŲåRŲārWÉu`ŸÉĘt\Ÿë-u`Ÿ1Gu`ŸWĮVĮĘPë+VnÉudŸÉĘt`ŸëúudŸ)-udŸ1GudŸqČWëúW)-W1GWqrvŠÉudŸÉĘt`ŸëúudŸÉu_ŸÉĘt[Ÿëúu_Ÿ•Pë÷PPt t1GudŸ7Bu_ŸBFRFGu_Ÿ7FP•Éu`ŸÉĘt\Ÿ•Ę0Ÿ€Ļu  I u € W  u`Ÿ  t\Ÿ w W— W  u`Ÿ  t\Ÿ I WM e W— V  P I VM O VŦ udŸ  t`Ÿ  udŸM e udŸ¯ˇPˇ uT  tP  uTM e uTŦ°vÍ udŸ  t`Ÿ  udŸĐ u_Ÿ  t[Ÿ  u_ŸĐØP  P, ; P; < t< @ tO e udŸU ` u_Ÿ` d Rd e u_ŸU d PØ u`Ÿ  t\ŸØ 0Ÿ4š6šP6š¨šWƚ›W[›Wŧ[žWŗיwŦŸššwŦŸ›[›wŦŸ[žĒžwŦŸąžȞwŦŸÅ—יu˜ššu˜›[›u˜[žĒžu˜ąžȞu˜į—יuŦŸššuŦŸ›[›uŦŸ[žĒžuŦŸąžȞuŦŸį—יu˜ššu˜›[›u˜[žĒžu˜ąžȞu˜į—ņ—u˜#Ÿņ—ø—Pø—˙—t˜יS­ŸššS­Ÿ›[›S­Ÿ[žĒžS­ŸąžȞS­Ÿ˜יu˜ššu˜›[›u˜[žĒžu˜ąžȞu˜#˜יkŦŸšškŦŸ›[›kŦŸ[žĒžkŦŸąžȞkŦŸ#˜יu˜ššu˜›[›u˜[žĒžu˜ąžȞu˜D˜יu˜ššu˜›[›u˜[žĒžu˜ąžȞu˜_˜י ĒŸšš ĒŸ›[› ĒŸ[žĒž ĒŸąžȞ ĒŸ_˜יu˜ššu˜›[›u˜[žĒžu˜ąžȞu˜˜ ™Vœ˜͘S­Ÿœ˜͘u°Ÿœ˜ǘqŸĒ˜˛˜P¸˜͘u ¸˜͘u°Ÿ™יu°Ÿššu°Ÿ›[›u°Ÿ[žĒžu°ŸąžȞu°Ÿ™יuœššuœ›[›uœ[žĒžuœąžȞuœ!™יu°Ÿššu°Ÿ›[›u°ŸržĒžu°ŸąžȞu°Ÿ!™יu ššu ›[›u ržĒžu ąžȞu $™יu°Ÿššu°Ÿ›[›u°ŸržĒžu°ŸąžȞu°Ÿ$™p™W›(›W5›E›Wrž}žW>™יu¸Ÿššu¸Ÿ›[›u¸Ÿrž”žu¸ŸąžȞu¸Ÿ>™p™W›(›W5›E›Wrž}žWT™יu¸Ÿššu¸Ÿ›[›u¸ŸąžȞu¸ŸW™יu`Ÿššu`Ÿ›[›u`ŸąžȞu`ŸW™b™P›"›Ptž”žu¸Ÿ€ž”žu`Ÿ€žŽžPb™יu´Ÿššu´Ÿ(›[›u´ŸąžȞu´Ÿb™יuPŸššuPŸ(›[›uPŸąžȞuPŸ™יuŧŸššuŧŸ(›5›uŧŸąžȞuŧŸ‚™ΙWššW(›5›WąžŗžW‚™ƒ™uT™”™t›™יuŧŸššuŧŸ(›5›uŧŸž™יu`Ÿššu`Ÿ(›5›u`Ÿž™§™P(›/›PG›R›PŗžȞuŧŸšžȞu`ŸšžŞP§™יu´Ÿššu´Ÿ§™י0Ÿšš0Ÿ”žĻžu´ŸĪ™יuPŸĪ™יuTŸ]žržuPŸ]žržuTŸ#0u`Ÿ#*P*0udŸÚ™šu°ŸšštŦŸ››u°Ÿ››tŦŸí™šuŦŸššt¨Ÿ››uŦŸ››t¨Ÿđ™šu`Ÿššt\Ÿ››u`Ÿ››t\Ÿđ™ü™Pü™šuŦ<Ÿššt¨<Ÿ› ›P¨šƚu ¨šąšPąš¸št¸šƚu\ŸĘšԚu Ԛ՚t՚ؚtƚԚw›ĒŸŧ3žĒŸ› ›P ›bœV:GVĶ՝Vú1žVŊ›ĒŸŧ3žĒŸŊ›hœu hœ:u@Ÿ:Gu Gu@ŸŧĶu@ŸĶ3žu Ŋ›ƛu #ŸÆ›͛P͛ԛtۛhœu hœ:u@Ÿ:Gu Gu@ŸŧĶu@ŸĶču ú/žu ۛbœV:GVĶ՝Vú/žVû›uDŸŧčuDŸū›œRœŦœuœ:ouœĶčuœū›˙›vœuDŸŧĶuDŸ œuXŸŧĶuXŸ œ)œP:AP՝čuDŸÛãuXŸãįRįčuXŸÛįPž!žP!ž"žt"ž&žt)œ:u@ŸGu@ŸŧĶu@Ÿ)œ:0ŸG0ŸŧĶ0Ÿčúu@Ÿbœ:MŗŸGMŗŸŧĶMŗŸbœeœPeœV0:VGoVŧžVyœ:MŗŸGMŗŸŧĶMŗŸyœ:u Gu ŧĶu yœ{œu #Ÿœ‚œpŸ‚œ‡œPŽœ:u Gmu ŧĶu ŽœV0:VGmVŧžVĨœ:uLŸŧĶuLŸ¨œ°œR°œ:uœŧĶuœ¨œМvĮœ:uLŸĘœ:uXŸĘœΜP07PS_P_`t`dtžĶuLŸÄĖuXŸĖНRНĶuXŸÄНPΜ0uHŸĪœ00ŸouHŸu`Ÿ‚udŸ‚ŒPŒudŸ u°Ÿ ŧuŦŸĻŽuĢŸŽ˛R˛ŧuĢŸĻ˛P<ž[žuXŸ<ž?žu\Ÿ?žIžPIž[žu\ŸĢ Û u F!m!u z!˜!u Ģ E!uTE!F!tPF!Č!uTČ!Û!u`Ÿŗ Í Wŗ ģ uT#ŸÃ Į pŸĮ Ė PF!m!u`ŸF!m!/¨ŸF!b!u`#Ÿb!g!PĶ E!u`ŸE!F!t\Ÿm!­!u`Ÿą!Į!u`ŸĶ C!VC!F!Pm!Ģ!Vę E!udŸE!F!t`Ÿm!z!udŸŠ!­!udŸą!Į!udŸí D!Wm!z!WŠ!­!Wą!Į!Wí î v!E!udŸE!F!t`Ÿm!z!udŸ !E!u_ŸE!F!t[Ÿm!z!u_Ÿ !!Pm!w!P’!›!P›!œ!tœ! !tą!Į!udŸˇ!Â!u_ŸÂ!Æ!RÆ!Į!u_Ÿˇ!Æ!P!E!u`ŸE!F!t\Ÿ!F!0Ÿ"S"u S"V"tV"Y"u "Q"VQ"S"udŸS"V"t`ŸV"j"V""Q"VQ"S"udŸS"V"t`Ÿ""V"0ŸĐžŸRŸfŸuTfŸgŸtPgŸ™ŸuT™ŸšŸ‘LšŸ  uTŸŸWŸŸtŸ Ÿt ŸfŸu`ŸfŸgŸt\ŸgŸ™Ÿu`Ÿ™ŸšŸ‘XŸšŸ  u`ŸŸŦŸĒŽŸĮŸãŸĒŽŸíŸ  ĒŽŸŸeŸWeŸfŸudŸfŸgŸt`ŸgŸ˜ŸW˜Ÿ™ŸudŸ™ŸšŸ‘\ŸšŸœŸWœŸŦŸudŸĮŸΟWΟãŸudŸíŸīŸWīŸ  udŸœŸŦŸudŸ¨ŸŦŸu_Ÿ¨ŸŦŸP!ŸHŸVHŸfŸuu ķR1)(ŸfŸgŸttķR1)(ŸgŸ™Ÿuu ķR1)(Ÿ™ŸšŸ‘‘ķR1)(ŸĮŸ͟V͟؟uu ķR1)(ŸíŸøŸVøŸ  uu ķR1)(Ÿ!ŸeŸWeŸfŸudŸfŸgŸt`ŸgŸ˜ŸW˜Ÿ™ŸudŸ™ŸšŸ‘\ŸĮŸΟWΟ؟udŸíŸīŸWīŸ  udŸ*ŸHŸVHŸfŸuu ķR1)(ŸfŸgŸttķR1)(ŸgŸ™Ÿuu ķR1)(Ÿ™ŸšŸ‘‘ķR1)(ŸíŸøŸVøŸ  uu ķR1)(Ÿ*ŸfŸuPfŸgŸtLgŸ™ŸuP™ŸšŸ‘HíŸ  uPũŸ u_Ÿ  R   u_ŸũŸ PKŸeŸWeŸfŸudŸfŸgŸt`ŸgŸ˜ŸW˜Ÿ™ŸudŸ™ŸšŸ‘\ŸNŸfŸu_ŸfŸgŸt[ŸgŸ™Ÿu_Ÿ™ŸšŸ‘WŸNŸUŸPUŸ\Ÿw<ŸgŸwŸPRŸ\Ÿu`ŸxŸ‚Ÿu`ŸXŸ\ŸW~Ÿ‚ŸudŸXŸ_ŸP~ŸŽŸPŦŸĮŸu`Ÿ˛ŸšŸu_ŸšŸŊŸRŊŸĮŸu_Ÿ˛ŸŊŸPΟ؟udŸÕŸ؟u_ŸÕŸ؟Pr Ą u Ī Ü u r Ą u #ŸĪ Ü u #Ÿv x Px € vŦ Ŋ utŸŊ ž ‘lŸž ΠutŸÎ Ī ‘lŸ¯ Ŋ usŸŊ ž ‘kŸž ΠusŸÎ Ī ‘kŸ¯ Į Pä ī usŸī ķ Rķ ũ usŸä ķ P;ĄDĄPDĄĸĄVOŖSŖPSŖqŖVĻĻVĻ&ĻV+Ļ3ĻV8Ļ@ĻVsĸKŖWKŖLŖu”LŖOŖtvŖm¤WvĸLŖuŖŸLŖOŖtŸŸvŖm¤uŖŸvĸ~ĸPvŖ‡ŖP~ĸLŖu\ŸLŖOŖtXŸŖm¤u\Ÿ„ĸLŖu`ŸLŖOŖt\ŸŖm¤u`Ÿ„ĸŒĸPŖ—ŖPŒĸLŖuTŸLŖOŖtPŸŖm¤uTŸ’ĸLŖu`ŸLŖOŖt\ŸŖm¤u`Ÿ’ĸšĸPŖ§ŖPšĸLŖuPŸLŖOŖtLŸ­Ŗm¤uPŸ ĸLŖu`ŸLŖOŖt\Ÿ­Ŗm¤u`Ÿ ĸ¨ĸP­ŖˇŖP¨ĸLŖuHŸLŖOŖtDŸŊŖm¤uHŸŽĸLŖu`ŸLŖOŖt\ŸŊŖm¤u`ŸŽĸļĸPŊŖĮŖPļĸLŖuDŸLŖOŖt@ŸÍŖm¤uDŸŧĸLŖu`ŸLŖOŖt\ŸÍŖm¤u`ŸŧĸÄĸPÍŖ×ŖPÄĸLŖuŧŸLŖOŖt¸ŸŨŖm¤uŧŸĘĸLŖu`ŸLŖOŖt\ŸŨŖm¤u`ŸĘĸŌĸPŨŖįŖPŌĸLŖu¸ŸLŖOŖt´ŸíŖm¤u¸ŸØĸLŖu`ŸLŖOŖt\ŸíŖm¤u`ŸØĸāĸPíŖ÷ŖPāĸLŖu°ŸLŖOŖtŦŸũŖm¤u°ŸæĸLŖu`ŸLŖOŖt\ŸũŖm¤u`ŸæĸîĸPũŖ¤PîĸLŖuŦŸLŖOŖt¨Ÿ ¤m¤uŦŸôĸLŖu`ŸLŖOŖt\Ÿ ¤m¤u`ŸôĸüĸP ¤¤PüĸLŖu´ŸLŖOŖt°Ÿ¤m¤u´ŸŖLŖu`ŸLŖOŖt\Ÿ¤m¤u`ŸŖ ŖP¤'¤P ŖLŖu@ŸLŖOŖtŧŸ-¤m¤u@ŸŖLŖu`ŸLŖOŖt\Ÿ-¤m¤u`ŸŖŖP-¤7¤PŖLŖuLŸLŖOŖtHŸ=¤m¤uLŸŖLŖu`ŸLŖOŖt\Ÿ=¤m¤u`ŸŖ&ŖP=¤G¤P&ŖLŖuXŸLŖOŖtTŸM¤m¤uXŸ,ŖLŖu`ŸLŖOŖt\ŸM¤m¤u`Ÿ,Ŗ4ŖPM¤W¤P4ŖLŖudŸLŖOŖt`Ÿ]¤m¤udŸ:ŖLŖu`ŸLŖOŖt\Ÿ]¤m¤u`Ÿ:ŖBŖP]¤g¤Po¤‡¤u`Ÿ{¤‚¤uŖŸ‚¤†¤R†¤‡¤uŖŸ{¤†¤P‡¤™¤u\Ÿ¤”¤uŖŸ”¤˜¤R˜¤™¤uŖŸ¤˜¤P™¤̤uTŸŸ¤ϤuŖŸĻ¤ǤRǤ̤uŖŸŸ¤ǤP̤Ŋ¤uPŸą¤¸¤uŖŸ¸¤ŧ¤Rŧ¤Ŋ¤uŖŸą¤ŧ¤PŊ¤ΤuHŸÃ¤ʤuŖŸĘ¤ΤRΤΤuŖŸÃ¤ΤPΤá¤uDŸÕ¤ܤuŖŸÜ¤ā¤Rā¤á¤uŖŸÕ¤ā¤Pá¤ķ¤uŧŸį¤î¤uŖŸî¤ō¤Rō¤ķ¤uŖŸį¤ō¤Pķ¤Ĩu¸Ÿų¤ĨuŖŸĨĨRĨĨuŖŸų¤ĨPĨĨu°Ÿ ĨĨuŖŸĨĨRĨĨuŖŸ ĨĨPĨ)ĨuŦŸĨ$ĨuŖŸ$Ĩ(ĨR(Ĩ)ĨuŖŸĨ(ĨP)Ĩ>Ĩu´Ÿ/Ĩ>Ĩu¨Ÿ/Ĩ=ĨP>ĨPĨu@ŸDĨKĨu¨ŸKĨOĨROĨPĨu¨ŸDĨOĨPPĨbĨuLŸVĨ]Ĩu¨Ÿ]ĨaĨRaĨbĨu¨ŸVĨaĨPbĨtĨuXŸhĨoĨu¨ŸoĨsĨRsĨtĨu¨ŸhĨsĨPtĨĨudŸzĨĨu¨ŸĨ…ĨR…ĨĨu¨ŸzĨ…ĨPSĻĢĻuDŸĢĻļĻPļĻŲĻu´ŲĻ%§uDŸ%§(§t@Ÿ(§)¨uDŸ)¨<¨u´<¨Q¨uDŸQ¨T¨‘ŧŸT¨Œ¨uDŸŒ¨ ¨u´ ¨9ŠuDŸ¨ĻĀĻWĀĻŲĻuLŸ)¨<¨uLŸŒ¨ލWލ ¨uLŸ¨ĻĢĻuDŸĢĻļĻPļĻŲĻu´)¨<¨u´Œ¨ ¨u´ŊĻĀĻWĀĻŲĻuLŸ)¨<¨uLŸÃĻŲĻW)¨<¨WÃĻËĻP)¨6¨PËĻŲĻuHŸŅĻŲĻudŸŅĻŲĻPŲĻ%§uDŸ%§(§t@Ÿ<¨Q¨uDŸQ¨T¨‘ŧŸT¨e¨uDŸ´¨ʨuDŸ4Š9ŠuDŸŲĻ%§udŸ%§(§t`Ÿ<¨Q¨udŸQ¨T¨‘\ŸT¨e¨udŸ´¨ʨudŸ4Š9ŠudŸ§%§udŸ%§(§t`Ÿ<¨Q¨udŸQ¨T¨‘\ŸT¨e¨udŸ§%§u`Ÿ%§(§t\Ÿ<¨Q¨u`ŸQ¨T¨‘XŸT¨e¨u`Ÿ§ §PT¨_¨P §%§uDŸ%§(§t@Ÿ<¨Q¨uDŸQ¨T¨‘ŧŸ§%§udŸ%§(§t`Ÿ<¨Q¨udŸQ¨T¨‘\Ÿ§§P§%§uD<Ÿ%§(§t@<Ÿ<¨F¨P•§­§W­§ā§u`Ÿė§)¨u`ŸÎ¨ШWШâ¨u`Ÿ•§˜§uDŸ˜§Ŗ§PŖ§ā§u´ė§)¨u´Ψâ¨u´ǧ­§W­§ā§u`Ÿė§)¨u`Ÿ°§ā§Wė§)¨W°§´§Pė§ö§P´§ā§u\Ÿų§)¨u\Ÿē§ā§udŸų§)¨udŸē§ž§Pų§¨Pž§ā§uXŸ ¨)¨uXŸÄ§ā§udŸ ¨)¨udŸÄ§ȧP ¨¨Pȧā§uPŸ¨)¨uPŸÎ§ā§udŸ¨)¨udŸÎ§Ō§P¨&¨PŌ§ā§uTŸØ§ā§udŸØ§ā§Pg¨q¨uTŸm¨q¨udŸm¨q¨Pq¨Œ¨uDŸw¨~¨uCŸ~¨‚¨R‚¨Œ¨uCŸw¨‚¨Pލ ¨uLŸ”¨›¨udŸ›¨Ÿ¨RŸ¨ ¨udŸ”¨Ÿ¨P ¨ǍuHŸĻ¨ǍudŸĻ¨ǍPļ¨ʨudŸŧ¨èu`ŸÃ¨Į¨RĮ¨ʨu`Ÿŧ¨Į¨PШâ¨u`ŸÖ¨Ũ¨udŸŨ¨á¨Rá¨â¨udŸÖ¨á¨Pâ¨ô¨u\Ÿč¨ī¨udŸī¨ķ¨Rķ¨ô¨udŸč¨ķ¨Pô¨ŠuXŸú¨ŠudŸŠŠRŠŠudŸú¨ŠPŠ!ŠuPŸ ŠŠudŸŠŠRŠ!ŠudŸ ŠŠPhŠuŠ0ŸuŠ‹ŠuT‹ŠŸŠRŸŠŖŠPŖŠŲŠuTŲŠÜŠtPÜŠĒuTZŠ׊V׊ÜŠPÜŠĒVuŠ‹ŠudŸ´ŠŲŠudŸŲŠÜŠt`ŸuŠ‹ŠucŸˇŠŲŠucŸŲŠÜŠt_ŸˇŠÆŠPuŠ‹ŠudŸ§ŠŲŠudŸŲŠÜŠt`ŸüŠĒudŸuŠ‹ŠV§Š׊V׊ÜŠPüŠĒVŪŠüŠVãŠîŠucŸîŠōŠRōŠüŠucŸãŠōŠPĒĒucŸĒĒRĒĒucŸĒĒPsĒíĒVŗŸ:ĢlĢVŗŸĢ#ŦVŗŸsĒyĒWyĒzĒtzĒ~Ēt~ĒíĒuXŸ:ĢlĢuXŸĢ#ŦuXŸˆĒíĒVŗŸ:ĢlĢVŗŸĢģĢVŗŸĪĢøĢVŗŸŦ#ŦVŗŸˆĒÅĒWÅĒíĒu\Ÿ:ĢlĢu\ŸĢ•ĢW•ĢģĢu\ŸĪĢ×ĢW×ĢŲĢu\ŸŲĢåĢWåĢøĢu\ŸŦ ŦW Ŧ#Ŧu\ŸÜĢøĢu\ŸčĢøĢudŸčĢōĢPĄĒíĒVŗŸ:ĢlĢVŗŸĢŠĢVŗŸŦ#ŦVŗŸĄĒíĒV:ĢlĢVĢ—ĢV—ĢŠĢudŸŦŦVŦ#ŦudŸ¯ĒíĒVŗŸ:ĢlĢVŗŸŦ#ŦVŗŸ¯ĒíĒu:ĢlĢuŦ#ŦuŦŦuWŸŦŦRŦ#ŦuWŸŦŦPČĒíĒV:ĢlĢVËĒíĒuWŸ:ĢlĢuWŸËĒĪĒP:ĢGĢPĪĒíĒu\ŸJĢlĢu\ŸÕĒíĒudŸJĢlĢudŸÕĒŲĒPJĢVĢPŲĒíĒu`Ÿ\ĢlĢu`ŸßĒíĒudŸ\ĢlĢudŸßĒãĒP\ĢfĢPãĒíĒuXŸĢ&ĢuXŸéĒíĒudŸ"Ģ&ĢudŸéĒđĒP"Ģ,ĢPtĢĢuXŸźĢuWŸĢ…ĢR…ĢĢuWŸzĢ…ĢP—ĢŠĢudŸĢ¤ĢuWŸ¤Ģ¨ĢR¨ĢŠĢuWŸĢ¨ĢPŠĢģĢu\Ÿ¯ĢļĢuWŸļĢēĢRēĢģĢuWŸ¯ĢēĢPģĢĪĢu`ŸÁĢČĢuWŸČĢĖĢRĖĢĪĢuWŸÁĢĖĢPwŦ=­uP=­>­‘H>­u­uP†­ŋ­uPŋ­Ā­‘HĀ­æ­uP‰Ŧ=­udŸ=­>­‘\Ÿ>­u­udŸ†­ŋ­udŸŋ­Ā­‘\ŸĀ­æ­udŸ˜Ŧu­:Ÿ†­æ­:ŸĄŦÎŦV>­u­VĀ­Å­VŠŦu­:Ÿ†­Ā­:ŸŠŦÎŦV>­u­V>­u­:Ÿ>­u­VÁŦČŦPĖŦ=­uP=­>­‘H†­ŋ­uPŋ­Ā­‘HĖŦØŦPØŦ;­V†­Ŋ­VâŦ>­ĒŽŸ†­Ā­ĒŽŸâŦ;­V†­Ŋ­VņŦ­P­­W­=­uT=­>­‘L†­’­P’­ŋ­uTŋ­Ā­‘LņŦ;­V†­Ŋ­VųŦ­P­­W†­Ŧ­0Ÿ†­Ŧ­Vš­Ŧ­1Ÿš­Ļ­Rš­Ą­r­>­ÍŽŸŦ­Ā­ÍŽŸ­;­VŦ­Ŋ­V+­=­udŸ=­>­‘\ŸŦ­ŋ­udŸŋ­Ā­‘\Ÿ.­=­ucŸ=­>­‘[ŸŦ­ŋ­ucŸŋ­Ā­‘[Ÿ.­>­PŦ­ˇ­PÍ­Ø­ucŸØ­Ü­RÜ­æ­ucŸÍ­Ü­PJŽ€Ž…ĒŸj¯¯…ĒŸkŽ€ŽčļŸĘŽj¯ˇŸëŽU¯@ˇŸöŽųŽu ųŽúŽtúŽūŽt ¯U¯ĸĒŸ ¯U¯W¯U¯`ˇŸ¯U¯W'¯U¯@K$Ÿ;¯U¯´ĒŸ;¯C¯Pų"#W´"î"ŒˇŸŠ#Ž#ŒˇŸ’#Ŗ#ŒˇŸØ"î"°ˇŸî"û"u !#‚#čˇŸŽ#’#čˇŸŖ#´#čˇŸB#‚#vŸY#‚#VŗŸY#d#Rd#‚#uTk#‚#v Ÿä#æ#Pæ#ø#Wú#$P$y$W:$d$îĒŸ¨$ž$Pž$%V%%Vķ$%îĒŸS%f%Pf%ž%VÁ%Ã%V›%Á%îĒŸ&&P&*'uP*'+'tL+' (uPã%Õ&u+'<'uá'å'uø'ū'u=&¯&X¸Ÿá'å'X¸Ÿø' (X¸Ÿ^&¯&ĢŸ}&¯&<ĢŸ}&¯&Vš&¯&TĢŸš&ĸ&PÛ&ú&Vú&ū&tū&'vŸ'('V˙&'pu "Ÿ''P'#'R'#'P'#'QJ'á'ˆ¸Ÿå'ø'ˆ¸Ÿk'Ũ'WĢŸŠ'Ũ'uĢŸŠ' 'VŠ'Ũ'QĢŸŠ'Ũ'V“¯–¯rŸ–¯š¯Pš¯Ą¯tĄ¯̝‘h̝ą¯‘#ŸÜ¯H°UH°I°‘ī¯A°uԟ °°0Ÿ°*°W*°/°wŸ/°A°W°A°uԟT((ŒˇŸĒ(Ŋ(ŒˇŸt((¸¸Ÿš°İPÍąÕąP˰SąW’ąÍąü¸Ÿˇ˛˞ü¸ŸŗąÍą šŸöą*˛hšŸĸ˛ˇ˛hšŸf˛Ÿ˛vŸf˛o˛P…˛Ÿ˛v Ÿ…˛ޞPŪ(í(P) )P )n)VĶ)Õ)V')e)ŠĢŸĶ)ä)ŠĢŸ>)e)îĒŸe)ž)u#Ÿn)ž)u#Ÿn)ļ)Wn)ƒ)Vn) )V )Ĩ)vtŸĨ)Ë)Vƒ)‹)V‹))vtŸ) )V )Š)vtŸƒ)‹)vŸ‹))v|Ÿ) )vŸ )Š)v|Ÿƒ))udŸ•)ļ)udŸƒ))P•)¤)Pļ)ž)u#Ÿļ)ž)u# u#<Ÿļ)Ė)Wē)ž)u# u#<Ÿē)Æ)Wä)**u#Ÿí)**u#Ÿí)"*Ví)ũ)Wũ)*W*"*wtŸũ)*wŸ*"*w|Ÿ*"*ucŸ**P"***u#Ÿ"***u# u#<Ÿ&***u# u#<Ÿ&*2*V^*m*P‚*–*P–*î*Vņ*ķ*VË*ņ*îĒŸf+p+V“R“p+Œ+V“W“Œ++P“W“+´+V“W“Â+,V“W“t+…+1Ÿ˜+´+0ŸÂ+Ė+1Ÿ…+Œ+VŒ++P+˜+V,,V+…+u˜+´+uÂ+Ø+u4+C+v.ŗ†ŗˇĢŸs´Š´ˇĢŸIŗ†ŗWs´”´WQŗeŗWs´”´0Ÿ‚´”´1Ÿ‚´Ž´R‚´‰´rhŗ†ŗôšŸ’ŗšŗušŗžŗP’ŗ•ŗP•ŗ^´V^´a´pŠ´Ō´Vĸŗ^´vŸ^´a´p#ŸŠ´Ō´vŸđŗ_´Wđŗ`´uLŸ`´a´tHŸđŗ^´vŸ^´a´p#Ÿą´Ā´PX,Î,u --u‰,š,ŒˇŸ --ŒˇŸ- -ŒˇŸ ,š,¸¸ŸÎ,ī,u# Ÿī,đ,‘# Ÿđ,˙,u# Ÿ˙,-t# Ÿ- -u# ŸÚ,ī,udŸī,đ,‘\Ÿđ,˙,udŸ˙,-t`Ÿ- -udŸÚ,Ū,P--PŪ,ī,u#Ÿī,đ,‘#Ÿđ,˙,u#Ÿ˙,-t#Ÿä,ī,udŸī,đ,‘\Ÿđ,˙,udŸ˙,-t`Ÿä,÷,P,-3-ucŸ3-7-R7-U-ucŸ,-7-P>-E-ucŸE-I-RI-U-ucŸ>-I-Pw-).V,.•.Vˆ-ū-VJ.•.Vš-é-ŒˇŸJ.O.ŒˇŸT.`.ŒˇŸĐ-é-¸¸Ÿū-).v Ÿ,.J.v Ÿ .+.udŸ+.,.‘\Ÿ,.J.udŸ ..P:.G.P.).vŸ,.:.vŸ.+.udŸ+.,.‘\Ÿ,.:.udŸ..P,.7.Pl.s.ucŸs.w.Rw.•.ucŸl.w.P~.….ucŸ….‰.R‰.•.ucŸ~.‰.PWĩ°ĩV°ĩ˛ĩu˛ĩŗĩtŗĩ'ļVfĩhĩPhĩąĩWŗĩžĩPžĩ4ļWōĩļîĒŸlĩ°ĩv Ÿ°ĩ˛ĩu# Ÿ˛ĩŗĩt# Ÿĩ°ĩv,Ÿ°ĩ˛ĩu#,Ÿ˛ĩŗĩt#,ŸÆ.Ü.u#ŸÜ.Ũ.t#ŸŨ.@/u#Ÿ@/A/t#ŸA/I/u#ŸĶ.æ.Pæ.>/VA/C/V/A/îĒŸw/Ĩ/V¨/0V00u‚/…/vŸ…/Š/PŠ/Ĩ/vŸ¨/0vŸ00u#Ÿ’/”/P”/Ļ/W¨/ļ/Pļ/)0Wę/0îĒŸR0u0vŸu031u#ŸC1€1u#ŸŽ0;1VS1Ŋ1VŸ01Vr1Ŋ1VĐ01ŒˇŸr1w1ŒˇŸ|1ˆ1ŒˇŸį01¸¸Ÿ1;1v ŸS1r1v Ÿ!1;1udŸS1r1udŸ!1%1Pb1o1P%1;1vŸS1b1vŸ+1;1udŸS1b1udŸ+1/1PS1_1P”1›1ucŸ›1Ÿ1RŸ1Ŋ1ucŸ”1Ÿ1PĻ1­1ucŸ­1ą1Rą1Ŋ1ucŸĻ1ą1P|ļ‚ļP‚ļ¸ļV¸ļģļPģļLˇV‡ļŒļvŸŒļ“ļP“ļ¸ļvŸ¸ļģļpŸģļLˇvŸ›ļļPļšļWģļÆļPÆļ)ˇW:ˇBˇWãļ'ˇēŸ:ˇLˇēŸúļ'ˇîĒŸÃ1ƒ2u 3,3u @3D3u H3N3u u3y3u }3•3u ë1H2WH23u\Ÿ33‘TŸ3,3W,3?3u\Ÿ?3@3tXŸ@3u3u\Ÿu3y3Wy3}3u\Ÿ}3•3W•3Ĩ3u\Ÿ}3•3u\Ÿƒ3Ž3udŸŽ3’3R’3•3udŸƒ3’3P2H2WH23u\Ÿ@3D3u\ŸH3V3u\Ÿy3}3u\Ÿ•3Ĩ3u\Ÿ23V@3B3VB3D3uH3N3uy3{3V2˛2WQ2x2ŒˇŸ@3D3ŒˇŸH3V3ŒˇŸc2x2°ˇŸx23u\Ÿy3}3u\Ÿ•3Ĩ3u\Ÿģ23čˇŸy3}3čˇŸ•3Ĩ3čˇŸĘ23vŸß23VŗŸß23Wî23v Ÿ33u\Ÿ33‘TŸ,3?3u\Ÿ?3@3tXŸ 33udŸ33‘\Ÿ,3?3udŸ?3@3t`Ÿ 33P,373PV3l3u\Ÿ\3g3u[Ÿg3k3Rk3l3u[Ÿ\3k3Pŗ3/4u /404t04V4u V4W4‘W4•4u ŗ3/4u #Ÿ/404t#Ÿ04V4u #ŸV4W4‘#ŸW4•4u #ŸŪ34WW4_4Wa4p4WŪ3ä3Vä3å3tå3é3té3/4u`Ÿ/404t\Ÿ04V4u`ŸV4W4‘XŸW4š4u`Ÿę34Wa4p4Wę3-4V-4/4udŸ/404t`Ÿ04T4VT4V4udŸV4W4‘\Ÿa4c4Vc4e4udŸe4g4Vg44udŸ4-4V-4/4udŸ/404t`Ÿ04T4VT4V4udŸV4W4‘\Ÿ4 4P 4/4u/404t04V4uV4W4‘4-4V-4/4udŸ/404t`Ÿ04T4VT4V4udŸV4W4‘\Ÿ4/4u_Ÿ/404t[Ÿ04V4u_ŸV4W4‘WŸ4!4P!4(4v<Ÿ0474P4(4u`Ÿ84B4u`Ÿ$4(4V>4B4udŸ$404P>4N4Pg44udŸs4z4u_Ÿz4~4R~44u_Ÿs4~4P…4Œ4u_ŸŒ44R4š4u_Ÿ…44PÂ4Ķ4PÂ485W8595u95:5t:5y5Wy5ĸ5u÷475V7595udŸ95:5t`Ÿ:5a5Vn5p5Vp5‹5udŸ÷485W8595u95:5t:5a5Wn5y5Wy5‹5u575V7595udŸ95:5t`Ÿ:5a5V595u_Ÿ95:5t[Ÿ:5a5u_Ÿ55P5#5v<Ÿ:5G5P5#5u`ŸH5S5u`Ÿ5#5VN5S5udŸ5#5PN5^5P#585wŸ8595u#Ÿ95:5t#Ÿp5‹5udŸ|5†5u_Ÿ†5Š5RŠ5‹5u_Ÿ|5Š5P‘5™5u_Ÿ™55R5§5u_Ÿ‘55PÛ56VĮ7Ī7VŅ7Ų7VĮ5í5Wí57u 77t7Æ7u Æ7Į7‘Į7x8u }8 9u Į5í5wŸí57u #Ÿ77t#Ÿ7Æ7u #ŸÆ7Į7‘#ŸĮ7x8u #Ÿ}8 9u #Ÿ#6Į7!ŦŸŪ7>8!ŦŸ}8ų8!ŦŸ9 9!ŦŸ#6)6V)6*6t*6.6uœ.67uHŸ77tDŸ7Æ7uHŸÆ7Į7‘@ŸŪ7>8uHŸ}8ų8uHŸ9 9uHŸ86Į7!ŦŸŪ7,8!ŦŸ}8Ë8!ŦŸØ8ų8!ŦŸ9 9!ŦŸ86T6VT67uLŸ77tHŸ7Æ7uLŸÆ7Į7‘DŸŪ7,8uLŸ}8ē8uLŸē8Â8VÂ8Į8uLŸĮ8Ë8VØ8á8Vá8ų8uLŸ9 9uLŸØ8ų8uLŸä8ī8udŸī8ķ8Rķ8ų8udŸä8ķ8PQ6Į7(ŦŸŪ78(ŦŸ}8ē8(ŦŸ9 9(ŦŸQ6r6Wr67uXŸ77tTŸ7Æ7uXŸÆ7Į7‘PŸŪ78uXŸ}8Š8uXŸŠ8Œ8WŒ8­8uXŸ­8¯8W¯8ē8uXŸ9 9uXŸf6Į7(ŦŸŪ78(ŦŸ}8­8(ŦŸ9 9(ŦŸf6–6V–67u\Ÿ77tXŸ7Æ7u\ŸÆ7Į7‘TŸŪ7į7Vį78u\Ÿ}8…8V…8Š8u\ŸŠ8•8V•8­8u\Ÿ9 9VŒ8­8u\Ÿ˜8Ŗ8udŸŖ8§8R§8­8udŸ˜8§8P67W77udŸ77t`Ÿ7Å7WÅ7Æ7udŸÆ7Į7‘\ŸŪ7ö7udŸ99W9 9udŸ67u77t7Æ7uÆ7Į7‘Ū7ö7u9 9u™67W77udŸ77t`Ÿ7Å7WÅ7Æ7udŸÆ7Į7‘\Ÿœ67uCŸ77tŋŸ7Æ7uCŸÆ7Į7‘ģŸœ6Ŗ6PŖ6Ē6w<Ÿ77P 6Ē6u\Ÿ7"7u\ŸĻ6Ē6W7"7udŸĻ6­6P7.7PĒ6¸6uXŸ/7=7uXŸ°6¸6udŸ57=7udŸ°6ģ6P57F7P¸6Æ6uLŸG7U7uLŸž6Æ6udŸM7U7udŸž6É6PM7^7PÆ6Ô6uHŸ_7m7uHŸĖ6Ô6udŸe7m7udŸĖ6×6Pe7v7PÔ6â6uDŸw7…7uDŸÚ6â6udŸ}7…7udŸÚ6å6P}7Ž7Pâ6đ6uTŸ77uTŸč6đ6udŸ•77udŸč6ķ6P•7Ļ7Pđ6ū6u`Ÿ§7ĩ7u`Ÿö6ū6udŸ­7ĩ7udŸö67P­7ž7PŪ7ö7udŸę7ņ7uCŸņ7õ7Rõ7ö7uCŸę7õ7Pö78u\Ÿü78uCŸ88R88uCŸü78P88uXŸ88uCŸ88R88uCŸ88P8,8uLŸ 8'8uCŸ'8+8R+8,8uCŸ 8+8P,8>8uHŸ2898uCŸ98=8R=8>8uCŸ28=8P>8P8uDŸD8K8uCŸK8O8RO8P8uCŸD8O8PP8b8uTŸV8]8uCŸ]8a8Ra8b8uCŸV8a8Pb8}8u`Ÿh8}8uPŸh8s8P'94:V7:l:Vl:n:un:p:Vp:x:u594:vŸ7:l:vŸl:n:u#Ÿn:p:vŸp:x:u#Ÿn9#:WK:ˇ:W9ų9Wj:ˇ:Wŗ9ä9ŒˇŸj:n:ŒˇŸr:€:ŒˇŸĘ9ä9¸¸Ÿų9#:w ŸK:j:w Ÿ:#:udŸK:j:udŸ: :PZ:g:P :#:wŸK:Z:wŸ:#:udŸK:Z:udŸ::PK:W:PŒ:–:ucŸ–:š:Rš:ˇ:ucŸŒ:š:PĄ:Š:ucŸŠ:­:R­:ˇ:ucŸĄ:­:Pgˇjˇv Ÿ“jˇrˇP“rˇǎuP“ǎ̎tL“̎p¸uP“p¸q¸tL“q¸›¸uP“gˇjˇv ŸjˇrˇPrˇǎuPǎ̎tL̎p¸uPp¸q¸tLq¸›¸uP{ˇ}ˇP}ˇǎuLǎ̎tH̎ļˇPļˇp¸uLp¸q¸tHq¸›¸uLʡ¸ŌĒŸq¸†¸ŌĒŸëˇ¸îĒŸ’ˇ̎ō1â¸q¸ō1↸›¸ō1â’ˇǎuPǎ̎tL¸p¸uPp¸q¸tL†¸›¸uPĄˇ̎P¸¸P¸n¸V†¸ޏV*¸q¸ĢŸ†¸›¸ĢŸK¸q¸îĒŸˇ¸ē¸v Ÿ“珏P“¸ũ¸uL“ũ¸ū¸tH“ū¸ÚuL“ÚÄštH“ÄšîšuL“ˇ¸ē¸v Ÿē¸¸P¸ũ¸uLũ¸ū¸tHū¸ÚuLÚÄštHÄšîšuL˸͸P͸å¸uPū¸šPš`šuPÄšŲšuPš`šŌĒŸÄšŲšŌĒŸ;š`šîĒŸå¸ū¸ōDä`šÄšōDäŲšîšōDäå¸ũ¸uLũ¸ū¸tH`šÚuLÚÄštHŲšîšuLņ¸ö¸Pö¸û¸V`šfšPfšÁšVŲšášVzšÄšĢŸŲšîšĢŸ›šÄšîĒŸ7ē:ēvŸ“:ēBēP“BēƒēuL“ƒē„ētH“„ēSģuL“SģTģtH“Tģ~ģuL“7ē:ēvŸ:ēBēPBēƒēuLƒē„ētH„ēSģuLSģTģtHTģ~ģuLKēMēPMēkēuP„ēŽēPŽēčēuPTģiģuPĸēčēŌĒŸTģiģŌĒŸÃēčēîĒŸkē„ēōœæčēTģōœæiģ~ģōœækēƒēuLƒē„ētHčēSģuLSģTģtHiģ~ģuLwē|ēP|ēēVčēöēPöēQģViģqģV ģTģĢŸiģ~ģĢŸ+ģTģîĒŸ—ģšģvŸ“šģĸģP“ĸģãģuL“ãģäģtH“äģŗŧuL“ŗŧ´ŧtH“´ŧŪŧuL“—ģšģvŸšģĸģPĸģãģuLãģäģtHäģŗŧuLŗŧ´ŧtH´ŧŪŧuLĢģ­ģP­ģËģuPäģîģPîģHŧuP´ŧÉŧuPŧHŧŌĒŸ´ŧÉŧŌĒŸ#ŧHŧîĒŸËģäģō¯čHŧ´ŧō¯čÉŧŪŧō¯čËģãģuLãģäģtHHŧŗŧuLŗŧ´ŧtHÉŧŪŧuL×ģÜģPÜģáģVHŧVŧPVŧąŧVÉŧŅŧVjŧ´ŧĢŸÉŧŪŧĢŸ‹ŧ´ŧîĒŸãŧžu#,ŸŊžu#,ŸŊŊPŊfŊuTŊŊVŊNŊVNŊSŊvxŸSŊ‚ŊVŊ$ŊV$Ŋ)ŊvxŸ)ŊNŊVNŊXŊvxŸŊ$ŊvŸ$Ŋ)Ŋv|Ÿ)ŊNŊvŸNŊXŊv|ŸŊ)ŊudŸ/ŊfŊudŸŊŊPŊ!Ŋv<Ÿ/Ŋ:ŊPŊ$ŊV$Ŋ)ŊvxŸ;ŊNŊVNŊXŊvxŸŊ!ŊudŸ@ŊDŊudŸŊ)ŊP@ŊRŊPfŊžu#,ŸfŊnŊu#4u#,8ŸfŊrŊPjŊnŊu#4u#,8ŸjŊrŊPvŊžu# Ÿ‚Ŋžu# Ÿ‚Ŋ›ŊP›ŊžuT‚Ŋ›ŊV‚ŊūŊVūŊžvlŸž8žV›ŊˇŊVˇŊŧŊvlŸŧŊūŊVūŊžvlŸ›ŊˇŊvŸˇŊŧŊv|ŸŧŊūŊvŸūŊžv|Ÿ›ŊŧŊudŸÂŊžudŸ›ŊŖŊPŖŊĒŊv<ŸÂŊÍŊP›ŊĒŊv ŸÎŊØŊv ŸĻŊĒŊudŸÔŊØŊudŸĻŊ­ŊPÔŊįŊPĒŊ´ŊvŸčŊōŊvŸ°Ŋ´ŊudŸîŊōŊudŸ°ŊŧŊPîŊžPžžu# Ÿžžu#(u# DŸž"žPžžu#(u# DŸž"žP&ž,žu,ž0žt8žNžPNžĻžVŠžąžVƒžŠžîĒŸč:ü:Wü:ũ:tũ:;t;<<uXŸ<<=<‘PŸ=<_<uXŸ_<`<tTŸ`<í<uXŸč:š;u=<L<un<r<uv<ˆ<uÃ<Ũ<uč:š;u#Ÿ=<L<u#Ÿn<r<u#Ÿv<ˆ<u#ŸÃ<Ũ<u#Ÿī:ü:Wü:ũ:tũ:;t;<<uXŸ<<=<‘PŸ=<_<uXŸ_<`<tTŸ`<í<uXŸī:$<V=<L<Vj<~<V€<™<VÃ<Ė<VŨ<í<V ;v<S­Ÿ€<¨<S­ŸÃ<í<S­Ÿ ;_;W_;<<u\Ÿ<<=<‘TŸ=<L<WL<_<u\Ÿ_<`<tXŸ`<n<u\Ÿn<p<Wp<v<u\Ÿ€<¨<u\ŸÃ<í<u\ŸÃ<Ũ<u\ŸĪ<Ö<udŸÖ<Ú<RÚ<Ũ<udŸĪ<Ú<P&;_;W_;<u\Ÿr<v<u\Ÿ€<<u\ŸŨ<í<u\Ÿ&;<Vr<v<V€<<VŨ<í<V˜;É;Wh;;ŒˇŸ€<<ŒˇŸz;;°ˇŸ;<u\Ÿr<v<u\ŸŨ<í<u\ŸŌ;<čˇŸr<v<čˇŸŨ<í<čˇŸá;<vŸö;<VŗŸö;<W<<v Ÿ<<<u\Ÿ<<=<‘TŸL<_<u\Ÿ_<`<tXŸ`<j<u\Ÿ'<<<udŸ<<=<‘\ŸL<_<udŸ_<`<t`Ÿ`<j<udŸ'<+<P`<g<P<¨<u\Ÿœ<Ŗ<uWŸŖ<§<R§<¨<uWŸœ<§<P+<<<uXŸ<<=<‘PŸL<_<uXŸ_<`<tTŸ1<<<udŸ<<=<‘\ŸL<_<udŸ_<`<t`Ÿ1<=<PL<W<P¨<Ã<uXŸŽ<ĩ<uWŸĩ<š<Rš<Ã<uWŸŽ<š<P$=5=W5=6=t6===t==‚>uXŸ‚>ƒ>tTŸƒ>§>uXŸ§>¨>tTŸ¨> ?uXŸ%?M?uXŸW?v?uXŸ$=Ö=uƒ>”>uŌ>Ü>uā>ø>u%?+?u[?f?u$=Ö=u#Ÿƒ>”>u#ŸŌ>Ü>u#Ÿā>ø>u#Ÿ%?+?u#Ÿ[?f?u#Ÿ*=5=W5=6=t6===t==‚>uXŸ‚>ƒ>tTŸƒ>§>uXŸ§>¨>tTŸ¨> ?uXŸ%?M?uXŸW?v?uXŸ*=`>Vƒ>”>VŌ>Ú>VÜ>é>V%?S­ŸÜ>ø>S­Ÿ%?M?S­ŸW?v?S­ŸG=›=W›=‚>u\Ÿ‚>ƒ>tXŸƒ>”>W”>§>u\Ÿ§>¨>tXŸ¨>Ō>u\ŸÜ>ø>u\Ÿ%?M?u\ŸW?_?u\Ÿ_?a?Wa?v?u\Ÿā>ø>u\Ÿė>ķ>udŸķ>÷>R÷>ø>udŸė>÷>Pb=›=W›=T>u\Ÿ%?3?u\ŸW?_?u\Ÿf?v?u\Ÿb=T>V%?3?VW?_?Vf?v?VÔ=>W¤=Ë=ŒˇŸ%?3?ŒˇŸ[?_?ŒˇŸļ=Ë=°ˇŸË=T>u\ŸW?[?u\Ÿf?v?u\Ÿ>T>čˇŸW?[?čˇŸf?v?čˇŸ>T>vŸ2>T>VŗŸ2>T>WA>T>v ŸW>‚>u\Ÿ‚>ƒ>tXŸ”>§>u\Ÿ§>¨>tXŸ¨>Ō>u\Ÿc>‚>udŸ‚>ƒ>t`Ÿ”>§>udŸ§>¨>t`Ÿ¨>Ō>udŸc>j>Pj>q>u\<Ÿ¨>ˇ>P3?M?u\Ÿ??F?uSŸF?J?RJ?M?uSŸ??J?Pg>q>uXŸ¸>Â>uXŸm>q>udŸž>Â>udŸm>q>Pž>Ī>Pq>‚>uTŸ‚>ƒ>tPŸ”>§>uTŸ§>¨>tPŸw>‚>udŸ‚>ƒ>t`Ÿ”>§>udŸ§>¨>t`Ÿw>ƒ>P”>Ÿ>Pø> ?uXŸū>?uSŸ? ?R ? ?uSŸū> ?P ?%?uTŸ??uSŸ??R?%?uSŸ??Pƒ?@u ,ADPĪCŲCuHŸ?DIDuHŸÕCŲCu\ŸEDIDu\ŸÕCÜCPEDVDPŲCįCuTŸWDaDuTŸßCįCu\Ÿ]DaDu\ŸßCīCP]DnDP‹DŖDu\Ÿ—DžDuGŸžDĸDRĸDŖDuGŸ—DĸDPŖDĩDuXŸŠD°DuGŸ°D´DR´DĩDuGŸŠD´DPĩDĮDuPŸģDÂDuGŸÂDÆDRÆDĮDuGŸģDÆDPĮDŲDuLŸÍDÔDuGŸÔDØDRØDŲDuGŸÍDØDPŲDëDuHŸßDæDuGŸæDęDRęDëDuGŸßDęDPëDEuTŸņDøDuGŸøDüDRüDEuGŸņDüDP€EŽEVŽEkFu kFlFtlFöFu öF÷Ft÷FGu †GŖGu ŖGĢGVĢGĖGu ‰E—Ep0)Ÿ‰EkFukFlFtlFöFuöF÷Ft÷FkGu†GŖGu­GĖGuÁEYGöŦŸ†G—GöŦŸĄGŖGöŦŸ­GĖGöŦŸÁEĮEVĮEČEtČEĖEtĖEkFuLŸkFlFtHŸlFöFuLŸöF÷FtHŸ÷FYGuLŸ†G—GuLŸĄGŖGuLŸ­GĖGuLŸÖE÷FöŦŸGGGöŦŸ†G—GöŦŸĄGŖGöŦŸ­GĖGöŦŸÖE$FV$FkFuPŸkFlFtLŸlFöFuPŸöF÷FtLŸG GV G GuPŸ GGVGGGuPŸ†GŽGVŽGGuPŸG—GVĄGŖGV­G¸GV¸GĖGuPŸģGÂGu\ŸÂGÆGRÆGĖGu\ŸģGÆGPīE÷F­ŸG5G­ŸG—G­ŸĄGŖG­ŸīEõEWõEöEtöEúEtúEkFuXŸkFlFtTŸlFöFuXŸöF÷FtTŸG5GuXŸG—GuXŸĄGŖGuXŸF÷F­Ÿ G#G­ŸG—G­ŸĄGŖG­ŸFjFWjFkFu\ŸkFlFtXŸlFõFWõFöFu\ŸöF÷FtXŸ G#Gu\ŸG’GW’G—Gu\ŸĄGŖGWFjFWjFkFu\ŸkFlFtXŸlFõFWõFöFu\ŸöF÷FtXŸĄGŖGWFFPFkFukFlFtlFöFuöF÷FtĄGŖGu'FjFWjFkFu\ŸkFlFtXŸlFõFWõFöFu\ŸöF÷FtXŸ*FkFuGŸkFlFtCŸlFöFuGŸöF÷FtCŸ*F1FP1F8Fw<ŸlFwFP.F8FuXŸxF‚FuXŸ4F8FW~F‚Fu\Ÿ4F;FP~FŽFP8FBFuPŸF™FuPŸ>FBFu\Ÿ•F™Fu\Ÿ>FEFP•FĻFPBFLFuLŸ§FąFuLŸHFLFu\Ÿ­FąFu\ŸHFOFP­FžFPLFVFuHŸŋFÉFuHŸRFVFu\ŸÅFÉFu\ŸRFYFPÅFÖFPVFdFuTŸ×FáFuTŸ\FdFu\ŸŨFáFu\Ÿ\FlFPŨFîFP G#Gu\ŸGGuGŸG"GR"G#GuGŸG"GP#G5GuXŸ)G0GuGŸ0G4GR4G5GuGŸ)G4GP5GGGuPŸ;GBGuGŸBGFGRFGGGuGŸ;GFGPGGYGuLŸMGTGuGŸTGXGRXGYGuGŸMGXGPYGkGuHŸ_GfGuGŸfGjGRjGkGuGŸ_GjGPkG†GuTŸqGxGuGŸxG|GR|G†GuGŸqG|GPWČÉVÉÉwdŸ ÉdÉVdɃÉwdŸZČÉW ɃÉWČ‹Čv‹ČČtČŽČtŽČ’ČtČ‹ČvãČîČu\ŸQÉbÉu\ŸæČîČu[ŸQÉbÉu[ŸæČîČPQÉ_ÉPjÉuÉu[ŸuÉyÉRyɃÉu[ŸjÉyÉPAĘŠĘu\ŸDĘŠĘuWŸDĘHĘPvʇĘP^ĘvĘuXŸaĘvĘu`ŸaĘpĘPŒĘ§ĘuXŸ’Ę™Ęu`Ÿ™ĘĘRĘ§Ęu`Ÿ’ʝĘPĩĘŧĘuWŸŧĘĀĘRĀĘÃĘuWŸĩĘĀĘP1Ė5ĖP5Ė)ÍuH)Í*ÍtD*Í=ÍuHMÍ_ÍuHäÍæÍuHÖĖŪĖPŪĖ'ÍVMÍ_ÍVũĘËPËËRË)ÍuT)Í*ÍtP*ÍÎuT/ËDËPDËKËRkË)ÍuD)Í*Ít@*͝ÍuD¸ÍÚÍuDäÍæÍuDnË)Íu[Ÿ)Í*ÍtWŸ*͝Íu[Ÿ¸ÍÚÍu[ŸäÍæÍu[ŸnËyËPyË„ËuD<ŸmÍwÍPvË„ËuTx͆Íu`Ÿ|Ë„ËuD~͆Íu\Ÿ|Ë„ËP~Í—ÍPÁËĖËu\Ÿ=ÍMÍu\ŸÄËĖËu[Ÿ=ÍMÍu[ŸÄËĖËP=ÍGÍPîËõËPõË˙ËRĖ)Íu`Ÿ)Í*Ít\Ÿ*Í=Íu`ŸMÍmÍu`ŸäÍæÍu`ŸĖ)Íu\Ÿ)Í*ÍtXŸ*Í=Íu\ŸMÍmÍu\ŸäÍæÍu\ŸĖ"ĖP_ÍgÍPTĖ\ĖP\ĖÆĖu@*Í=Íu@äÍæÍu@]ĖÆĖu@*Í=Íu@äÍæÍu@‰ĖÆĖu`Ÿ*Í=Íu`ŸŒĖÆĖu\Ÿ*Í=Íu\ŸŒĖ”ĖP*Í7ÍPēÍÎÍu`ŸĀÍÎÍu\ŸĀÍËÍPĨͯÍu`ŸĢͯÍu[ŸĢͯÍPĐÍÚÍu\ŸÖÍÚÍu[ŸÖÍÚÍPôÍûÍu[ŸûÍ˙ÍR˙ÍÎu[ŸôÍ˙ÍP HHP HíHuíHîHtîHvIuvIwItwIëIuJ#Ju-JLJuCHŲIöŦŸJJöŦŸ!J#JöŦŸ-JLJöŦŸCHIHVIHJHtJHNHtNHíHuLŸíHîHtHŸîHvIuLŸvIwItHŸwIŲIuLŸJJuLŸ!J#JuLŸ-JLJuLŸXHwIöŦŸIĮIöŦŸJJöŦŸ!J#JöŦŸ-JLJöŦŸXHĻHVĻHíHuPŸíHîHtLŸîHvIuPŸvIwItLŸI‰IV‰I‹IuPŸ‹I”IV”IĮIuPŸJJVJJuPŸJJV!J#JV-J8JV8JLJuPŸ;JBJu\ŸBJFJRFJLJu\Ÿ;JFJPqHwI­ŸIĩI­ŸJJ­Ÿ!J#J­ŸqHwHWwHxHtxH|Ht|HíHuXŸíHîHtTŸîHvIuXŸvIwItTŸIĩIuXŸJJuXŸ!J#JuXŸ†HwI­Ÿ‹IŖI­ŸJJ­Ÿ!J#J­Ÿ†HėHWėHíHu\ŸíHîHtXŸîHuIWuIvIu\ŸvIwItXŸ‹IŖIu\ŸJJWJJu\Ÿ!J#JW”HėHWėHíHu\ŸíHîHtXŸîHuIWuIvIu\ŸvIwItXŸ!J#JW”HœHPœHíHuíHîHtîHvIuvIwIt!J#JuŠHėHWėHíHu\ŸíHîHtXŸîHuIWuIvIu\ŸvIwItXŸŦHíHuGŸíHîHtCŸîHvIuGŸvIwItCŸŦHŗHPŗHēHw<ŸîH÷HP°HēHuXŸøHIuXŸļHēHWūHIu\ŸļHŊHPūHIPēHÄHuPŸIIuPŸĀHÄHu\ŸIIu\ŸĀHĮHPI&IPÄHÎHuLŸ'I1IuLŸĘHÎHu\Ÿ-I1Iu\ŸĘHŅHP-I>IPÎHØHuHŸ?IIIuHŸÔHØHu\ŸEIIIu\ŸÔHÛHPEIVIPØHæHuTŸWIaIuTŸŪHæHu\Ÿ]IaIu\ŸŪHîHP]InIP‹IŖIu\Ÿ—IžIuGŸžIĸIRĸIŖIuGŸ—IĸIPŖIĩIuXŸŠI°IuGŸ°I´IR´IĩIuGŸŠI´IPĩIĮIuPŸģIÂIuGŸÂIÆIRÆIĮIuGŸģIÆIPĮIŲIuLŸÍIÔIuGŸÔIØIRØIŲIuGŸÍIØIPŲIëIuHŸßIæIuGŸæIęIRęIëIuGŸßIęIPëIJuTŸņIøIuGŸøIüIRüIJuGŸņIüIP:ÎHÎ0ŸHΝÎVÉÎEĐV:ΠÎW ÎÉΑÉÎ[ĐW[ĐtĐ‘ZÎmÎRm΁Îpv"ÎÎ‘SÉÎŲÎpv"ŲÎŨΑSŨÎķÎpv"ķÎ÷ΑS÷Î Īpv" ĪĪ‘SĪĪpv"Ī&Ī‘S&ĪZĪpv"ZĪxĪ‘SxĪƒĪpv"ƒĪžĪ‘SžĪŖĪpv"ŖĪžĪ‘SžĪÍĪpv"ÍĪ[Đ‘Sx΃Îô­Ÿx΃ΑLx΃ΑL#ŸĪ&ĪŽŸĪ&Ī‘LĪ&Ī‘L#ŸWĪxĪōīJWĪxĪ‘LnĪrĪQrĪxĪ‘ZjĪrĪPÉÎŨÎī­ŸÉÎŨΑLÉÎŨΑL#ŸęÎ÷Î˙­ŸęÎ÷ΑLęÎ÷ΑL#Ÿ÷ÎĪų­Ÿ÷ÎĪ‘L÷ÎĪ‘L#Ÿ&ĪxĪ‘SžĪ[Đ‘SxĪžĪ‘L“Ī˜Īr˜ĪžĪ‘Y“Ī˜ĪPžĪžĪ‘LŗĪ¸Īr¸ĪžĪ‘XŗĪ¸ĪPßĪ[Đ ŽŸßĪ[Đ‘LßĪčĪ‘L#ŸčĪíĪPôĪCĐ‘`ŸôĪCĐ‘LôĪūĪ‘L#ŸūĪĐP ĐCĐũ­Ÿ ĐCĐ‘L ĐĐ‘L#ŸĐĐP"ĐCĐ‘`Ÿ%Đ7Đ‘[Ÿ7Đ;ĐR;ĐCĐ‘[Ÿ%Đ/ĐP/Đ4Đ‘`<Ÿ4Đ;ĐPEĐ[Đ‘`ŸKĐVĐ‘[ŸVĐZĐRZĐ[Đ‘[ŸKĐZĐPŦÎÉΑL[ĐpĐ‘LĒĐŌVCŌEŌVqŌsŌVyŅĻŅWqŌyŌWĒĐOŅu\ŸšŅũŅu\ŸĒĐĘĐWĒĐ´Đu\#ŸĀĐÄĐpŸÄĐÉĐPÁŅÜŅu\ŸĶĐOŅ ­ŸÜŅũŅ ­ŸĶĐØĐu\#ŸÜĐßĐpŸßĐäĐPņĐOŅK°ŸÜŅũŅK°ŸņĐ÷ĐpŸ÷ĐüĐPŅOŅudŸÜŅũŅudŸŅŅu\#Ÿ Ņ ŅpŸ ŅŅPŅOŅK°ŸÜŅũŅK°ŸŅŅpŸŅ$ŅP+ŅOŅudŸÜŅũŅudŸ.ŅOŅu[ŸÜŅũŅu[Ÿ.Ņ:ŅPíŅ÷ŅP:ŅOŅu`ŸÜŅíŅu`Ÿ@ŅOŅudŸÜŅíŅudŸ@ŅLŅPÜŅįŅPĒĐOŅuTŅũŅuTCŌ{ŌuTĒĐOŅĒŽŸ§ŅũŅĒŽŸCŌ]ŌĒŽŸĒĐOŅu\Ÿ§ŅũŅu\ŸCŌ]Ōu\Ÿ§ŅŠŅu\#Ÿ­Ņ°ŅpŸ°ŅĩŅPEŌ]ŌudŸQŌXŌu[ŸXŌ\ŌR\Ō]Ōu[ŸQŌ\ŌP]ŌqŌu`ŸcŌjŌu[ŸjŌnŌRnŌqŌu[ŸcŌnŌPŌ)Ōu\Ÿ)Ō,Ō‘TŸ.ŌCŌu\ŸpJsJPsJķKVķKõKuP<ŸõKöKtL<ŸöK LV LLuP<ŸLL‘H<ŸLLVLLuP<ŸLLVLLuP<ŸLSLVSLjLuP<Ÿ}LĄLVpJsJp4ŸsJ}JP}JÔKuTÔKķKv4ŸķKõKuP#(ŸõKöKtL#(ŸöK Lv4Ÿ LLuP#(ŸLL‘H#(ŸLLuTLLv4ŸLLuP#(ŸLSLuTSLjLuP#(Ÿ}LĄLuTÍJķKVķKõKuP<ŸõKöKtL<ŸöK LV LLuP<ŸLL‘H<ŸLLVLLuP<ŸLLVLLuP<ŸLSLVSLjLuP<Ÿ}LĄLVKķKvŸķKõKuP4ŸõKöKtL4ŸöK LvŸ LLuP4ŸLL‘H4ŸLLvŸLLuP4ŸLLvŸLLuP4ŸL,LvŸSLjLuP4Ÿ}LĄLvŸL,LVjKLHŸLLHŸSLĄLHŸjKƒKQƒKõKuPõKöKtLöKLuPLL‘HLLuPSLjLuP}LĄLuP—KõKuP#$ŸõKöKtL#$ŸöKLuP#$ŸLL‘H#$ŸLLuP#$ŸSLjLuP#$Ÿ}LĄLuP#$Ÿ,LSLv4ŸĩKķKVķKõKuP<ŸõKöKtL<ŸöK LV LLuP<ŸLL‘H<ŸLLVLLuP<ŸLLVLLuP<ŸSLjLuP<ŸĩKēKPēKõKuõKöKtöKLuLL‘LLuLLuSLjLuČKõKudŸõKöKt`ŸöKLudŸLL‘\ŸLLudŸSLiLudŸČKËKu#ŸãKõKudŸõKöKt`ŸöKLudŸLL‘\ŸæKõKucŸõKöKt_ŸöKLucŸLL‘[ŸæKLPSLiLudŸYLdLucŸdLhLRhLiLucŸYLhLPiLjLupLtLtŋŌÖĶ0ŸÖĶ<ÔW<ÔDÔPDÔîÖ0ŸîÖ˙ÖW˙ÖQ×0ŸQ×e×We×VØ0Ÿ€Ø‚ØWžØ[Ų0ŸāŌeØŽŸ€ØšØŽŸžØ[ŲŽŸāŌCÔu°CÔDÔtŦDÔVØu°VØeØu@Ÿ€ØšØu°žØŸØu°ŸØÉØu@ŸÉØ[Ųu°āŌīŌu°#ŸīŌôŌPøŌCÔu°CÔDÔtŦDÔVØu°€Ø–Øu°žØŸØu°ŸØÉØu@ŸÉØ[Ųu°Ķ ĶWĶĶu°#ŸĶĶpŸĶĶP.×Q×u@Ÿ&Ķ.×S­ŸQ×VØS­Ÿ€Ø–ØS­ŸžØ[ŲS­Ÿ&Ķ;ĶpŸ;Ķ@ĶP|ĶÔĶ,ŧŸDØVØ,ŧŸ|ĶÔĶu@ŸDØVØu@ŸšĶÔĶ:ŽŸšĶÔĶu@Ÿ­ĶÔĶuHŸ­ĶÔĶu@Ÿ­Ķ°Ķu@#Ÿ´ĶˇĶpŸˇĶŧĶPÉĶÔĶuHŸĖĶÔĶudŸĖĶÔĶPuÔÍÔVe׋×VÔŗÔzŽŸÔŗÔu´e׋×aŽŸe׋×udŸĩÔĮÔudŸĪÔčÔŽŸĪÔčÔudŸøÔąÕudŸ7ØDØudŸ!Ų@ŲudŸĸØĩØudŸ ÕąÕ°ŧŸ7ØDذŧŸ!Ų@Ų°ŧŸ ÕąÕu@Ÿ7ØDØu@Ÿ!Ų@Ųu@ŸÕąÕŸŽŸ7ØDØŸŽŸÕąÕu@Ÿ7ØDØu@Ÿ5ÕąÕuTŸ7ØDØuTŸ5ÕąÕu@Ÿ7ØDØu@Ÿ5Õ8Õu@#Ÿ<Õ?ÕpŸ?ÕDÕPJÕąÕS­Ÿ7ØDØS­ŸJÕąÕu@Ÿ7ØDØu@ŸVÕąÕTŽŸ7ØDØTŽŸVÕąÕu@Ÿ7ØDØu@ŸoÕąÕuXŸ7ØDØuXŸoÕąÕu@Ÿ7ØDØu@ŸoÕrÕu@#ŸvÕyÕpŸyÕ~ÕP‹ÕąÕuTŸ7ØDØuTŸŽÕąÕudŸ7ØDØudŸŽÕ–ÕP7Ø>ØP–ÕąÕuXŸœÕąÕudŸœÕĢÕP×.×P‹×–×P'Ø7ØuPŸ*Ø7ØudŸ*Ø7ØPŦ×7Ø€ŧŸ@Ų[Ų€ŧŸŦ×7Øu@Ÿ@Ų[Ųu@ŸÁ×7ØGŽŸÁ×7Øu@Ÿæ×7ØS­Ÿæ×é×Pé×$ØVú×7ØTŽŸú×$ØV Ø7ØuPŸ Ø$ØV ØØv#ŸĩØÉØuXŸģØÂØu`ŸÂØÆØRÆØÉØu`ŸģØÆØP#Ų@ŲuTŸ/Ų@ŲudŸ/Ų:ŲPÉÕ!ÖŽŸüØŲŽŸÉÕ!Öu@ŸüØŲu@ŸáÕ!Ö:ŽŸáÕ!Öu@ŸúÕ!ÖuDŸúÕ!Öu@ŸúÕũÕu@#ŸÖÖpŸÖ ÖPÖ!ÖuDŸÖ!ÖudŸÖ!ÖP‘ÖîÖPŧŸÉØáØPŧŸ‘ÖîÖu@ŸÉØáØu@Ÿ¯ÖîÖ:ŽŸ¯ÖîÖu@ŸÂÖîÖuLŸÂÖîÖu@ŸÂÖÅÖu@#ŸÉÖĖÖpŸĖÖŅÖPŪÖîÖuLŸáÖîÖudŸáÖîÖPFØVØuHŸRØVØudŸRØVØPËØáØuLŸ×ØáØudŸ×ØáØPūØŲuDŸ ŲŲudŸ ŲŲPöĶCÔu´CÔDÔt°îÖ˙Öu´Q×e×u´ųĶCÔudŸCÔDÔt`ŸîÖ˙ÖudŸQ×e×udŸųĶÔPQ×_×PÔCÔu@ŸCÔDÔtŧŸîÖ˙Öu@ŸÔDÔ0ŸîÖ˙Ö0Ÿ,ÔCÔuŧŸCÔDÔt¸ŸîÖ˙ÖuŧŸ2ÔCÔudŸCÔDÔt`ŸîÖ˙ÖudŸ2Ô<ÔPîÖ÷ÖPVØeØu@ŸeØ€ØuŧŸkØrØuģŸrØvØRvØ€ØuģŸkØvØP‚ØŒØu`ŸˆØŒØudŸˆØŒØP‰Ų°ŲP°ŲĩŲrĩŲÃŲPŅÚãÚP”Ų°ŲP°ŲĩŲrŅÚãÚPÄŲēÚÆŽŸíÛ!ÜÆŽŸKÜÜÆŽŸÄŲēÚVíÛ!ÜVKÜÜVÄŲÖŲv#ŸÖŲÛŲPáŲēÚuíÛ ÜuKÜÜuáŲēÚVíÛ ÜVKÜÜVäŲēÚuíÛ ÜuKÜÜuäŲ ÚWKÜMÜWøŲēÚuTíÛ ÜuTKÜÜuTøŲ ÚWKÜMÜWÚēÚuTíÛ ÜuTeÜÜuTÚēÚu`ŸíÛ Üu`ŸeÜÜu`ŸÚÚPũÛÜPMÜeÜudŸSÜ^Üu`Ÿ^ÜbÜRbÜeÜu`ŸSÜbÜPÚēÚ ŊŸíÛũÛ ŊŸeÜÜ ŊŸÚēÚu\ŸíÛũÛu\ŸeÜÜu\ŸÚ+Úu\#Ÿ+Ú0ÚP:ÚēÚĐŽŸíÛũÛĐŽŸeÜÜĐŽŸ:ÚēÚu\ŸíÛũÛu\ŸeÜÜu\Ÿ:ÚCÚu\#ŸCÚHÚPJÚēÚō0qíÛũÛō0qeÜÜō0qJÚēÚu\ŸíÛũÛu\ŸeÜÜu\ŸJÚēÚu íÛũÛu eÜÜu JÚQÚu\#ŸYÚ_ÚpŸ_ÚdÚPnÚēÚŨŽŸíÛũÛŨŽŸeÜÜŨŽŸnÚwÚu\#ŸwÚ|ÚPŸÚēÚu`ŸíÛũÛu`ŸĸÚēÚudŸíÛũÛudŸĸÚĒÚPíÛ÷ÛPÜ!Üu\ŸhÜÜu`ŸnÜÜudŸnÜyÜPŧÚĐÚu\ŸĐÚŅÚ‘TŸäÚíÛÆŽŸ!ÜKÜÆŽŸÜÜÆŽŸäÚíÛV!ÜKÜVܝÜVäÚöÚv#ŸöÚûÚPÛíÛu!Ü9ÜuƒÜÜuÛíÛV!Ü9ÜVƒÜÜVÛíÛu!Ü9ÜuƒÜÜuÛ+ÛWƒÜ…ÜWÛíÛuT!Ü9ÜuTƒÜÜuTÛ+ÛWƒÜ…ÜW.ÛíÛuT!Ü9ÜuT1ÛíÛu`Ÿ!Ü9Üu`Ÿ1Û9ÛPÚÛįÛP‹Ü–Üu`Ÿ–ÜšÜRšÜÜu`Ÿ‹ÜšÜP9ÛÚÛ ŊŸ!Ü9Ü ŊŸ9ÛÚÛu\Ÿ!Ü9Üu\Ÿ9ÛKÛu\#ŸKÛPÛPZÛÚÛ᎟!Ü9Ü᎟ZÛÚÛu\Ÿ!Ü9Üu\ŸZÛcÛu\#ŸcÛhÛPkÛÚÛō0q!Ü9Üō0qkÛÚÛu\Ÿ!Ü9Üu\ŸƒÛÚÛ펟!Ü9Ü펟ƒÛŒÛu\#ŸŒÛ‘ÛP´ÛÚÛu`ŸˇÛÚÛudŸˇÛģÛPĐÛ×ÛP$Ü9Üu`Ÿ*Ü9ÜudŸ*Ü5ÜP9ÜKÜu\ŸÄÜÍÜPÍÜFŨWHŨeŨWeŨkŨPkŨqŨWsŨ“ŨWˇÜ"ŨV"ŨGŨuGŨHŨtHŨeŨueŨpŨVpŨrŨurŨsŨtsŨ}Ũu}ŨŨVŨ€ŨuŲÜeŨTŊŸsŨ“ŨTŊŸŲÜGŨuTGŨHŨtPHŨeŨuTsŨ€ŨuT€Ũ“ŨudŸŲÜëÜuT#ŸëÜđÜPņÜeŨōĸ|sŨ}Ũōĸ|ņÜGŨuTGŨHŨtPHŨeŨuTsŨ}ŨuTņÜ"ŨV"ŨGŨuGŨHŨtHŨeŨusŨ}ŨuņÜøÜuT#ŸüÜŨrŸŨ ŨP ŨGŨuTGŨHŨtPHŨeŨuTsŨ}ŨuT ŨeŨ0ŸsŨ}Ũ0Ÿ×ŨØŨPØŨ1ŪW3Ū<ŪW/ß/āW—āūāWčŨîŨPîŨ0ŪV3ŪšŪV/ßíßV—ā āV>ß—ā¤ŊŸ’áŸá¤ŊŸâYâ¤ŊŸ>ß—āuT’áŸáuTââuTâ+âudŸ+âDâuTDâYâudŸUß—āÔŸ’áŸáÔŸâCâÔŸUß—āuT’áŸáuTââuTâ+âudŸ+âCâuTpß—ā¯Ÿ’áŸá¯ŸâC⯟pß—āuT’áŸáuTââuTâ+âudŸ+âCâuT…ß—āÔŸ’áŸáÔŸâCâÔŸ…ß—āuT’áŸáuTââuTâ+âudŸ+âCâuTšß—ā¯Ÿ’áŸá¯ŸâC⯟šß—āuT’áŸáuTââuTâ+âudŸ+âCâuT˛ß—āÔŸ’áŸáÔŸâCâÔŸ˛ß—āuT’áŸáuTââuTâ+âudŸ+âCâuTĀß—ā ­Ÿ’áŸá ­ŸâCâ ­ŸĀß—āuT’áŸáuTââuTâ+âudŸ+âCâuTÛß!āō:!ā—āō)’áŸáō)âCâō)Ûß—āuT’áŸáuTââuTâ+âudŸ+âCâuTíß—āQĢŸ’áŸáQĢŸâCâQĢŸíß—āuT’áŸáuTââuTâ+âudŸ+âCâuTüß—āÔŸ’áŸáÔŸâCâÔŸüß—āuT’áŸáuTââuTâ+âudŸ+âCâuTā—ā ­Ÿ’áŸá ­ŸâCâ ­Ÿā—āuT’áŸáuTââuTâ+âudŸ+âCâuT!ā—āō)’áŸáō)âCâō)!ā—āuT’áŸáuTââuTâ+âudŸ+âCâuT0ā—āŪŽŸ’áŸáŪŽŸâCâŪŽŸ0ā—āuT’áŸáuTââuTâ+âudŸ+âCâuTQā—āuT’áŸáuTââuTâ+âudŸ+âCâuTsā—āuT’áŸáuTvā—āu\Ÿ’áŸáu\Ÿvā‚āP’á™áPââudŸ ââu\ŸââRââu\Ÿ ââPâ+âu`Ÿ3âCâu`ŸGâYâudŸ¨ā…áxŊŸŸáâxŊŸ¨ā…áVŸáĢáVĢáÂáuTÂáĶáudŸĶáÕáVÕá×áuT×áŲáVŲáëáuTëáíáVíáîáuTîáâudŸÅā…áÔŸŸáëáÔŸÅā…áVŸáĢáVĢáÂáuTÂáĶáudŸĶáÕáVÕá×áuT×áŲáVŲáëáuTÔā…á ŠŸŸáëá ŠŸÔā…áVŸáĢáVĢáÂáuTÂáĶáudŸĶáÕáVÕá×áuT×áŲáVŲáëáuTėā…áō)Ÿáëáō)ėā…áVŸáĢáVĢáÂáuTÂáĶáudŸĶáÕáVÕá×áuT×áŲáVŲáëáuTūā…ᯟŸáëᯟūā…áVŸáĢáVĢáÂáuTÂáĶáudŸĶáÕáVÕá×áuT×áŲáVŲáëáuTá…áÔŸŸáëáÔŸá…áVŸáĢáVĢáÂáuTÂáĶáudŸĶáÕáVÕá×áuT×áŲáVŲáëáuT(á…ᯟŸáëᯟ(á…áVŸáĢáVĢáÂáuTÂáĶáudŸĶáÕáVÕá×áuT×áŲáVŲáëáuTCá…áVŸáĢáVĢáÂáuTÂáĶáudŸĶáÕáVÕá×áuT×áŲáVŲáëáuTeá…áVŸáŠáVhá…áu`ŸŸáŠáu`ŸhápáPŸáĻáPĢáÁáudŸąáŧáu`ŸŧáĀáRĀáÁáu`ŸąáĀáPÁáĶáu\ŸŲáëáu\ŸíáâudŸDŪ"ßxŊŸ…á’áxŊŸYâąâxŊŸDŪŲŪWŲŪ"ßV…á’áVYâ[âV[ârâuTrâƒâudŸƒâ…âV…â‡âuT‡â‰âV‰âžâuTžâąâudŸaŪ"ßÔŸ…á’áÔŸYâ›âÔŸaŪŲŪWŲŪ"ßV…á’áVYâ[âV[ârâuTrâƒâudŸƒâ…âV…â‡âuT‡â‰âV‰â›âuTpŪ"ß ŠŸ…á’á ŠŸYâ›â ŠŸpŪŲŪWŲŪ"ßV…á’áVYâ[âV[ârâuTrâƒâudŸƒâ…âV…â‡âuT‡â‰âV‰â›âuTˆŪ"ßō:…á’áō:Yâ›âō:ˆŪŲŪWŲŪ"ßV…á’áVYâ[âV[ârâuTrâƒâudŸƒâ…âV…â‡âuT‡â‰âV‰â›âuTšŪ"߯Ÿ…á’ᯟYâ›â¯ŸšŪŲŪWŲŪ"ßV…á’áVYâ[âV[ârâuTrâƒâudŸƒâ…âV…â‡âuT‡â‰âV‰â›âuT¯Ū"ßÔŸ…á’áÔŸYâ›âÔŸ¯ŪŲŪWŲŪ"ßV…á’áVYâ[âV[ârâuTrâƒâudŸƒâ…âV…â‡âuT‡â‰âV‰â›âuTÄŪ"߯Ÿ…á’ᯟYâ›â¯ŸÄŪŲŪWŲŪ"ßV…á’áVYâ[âV[ârâuTrâƒâudŸƒâ…âV…â‡âuT‡â‰âV‰â›âuTáŪ"ßV…á’áVYâ[âV[ârâuTrâƒâudŸƒâ…âV…â‡âuT‡â‰âV‰â›âuTß"ßV…á’áVß"ßu`Ÿ…á’áu`ŸßßP…áŒáP[âqâudŸaâlâu`ŸlâpâRpâqâu`ŸaâpâPqâƒâuXŸ‰â›âuXŸã*ãWääWUä[äuTUääÔŸvãyãPyã…ãR†ã˙ãudŸ˙ãät`ŸäääudŸœã¨ãP¨ãŦãRĖãũãVũã˙ãu`Ÿ˙ãät\ŸäĨäVĪã˙ãu_Ÿ˙ãät[ŸäĨäu_ŸĪã×ãP”äŸäP×ã˙ãudŸ˙ãät`Ÿä”äudŸŨã˙ãu`Ÿ˙ãät\Ÿä”äu`ŸŨãåãPäŽäP­äČäudŸŗäēäu_ŸēäžäRžäČäu_ŸŗäžäPÖäŨäu_ŸŨäáäRáäääu_ŸÖäáäPå"åP"åąåWŗåŋåPŋåÂåWÄåöåW.åŗåf¯ŸÄåöåf¯Ÿ.å˛åuT˛åŗåtPÄåãåuTãåöåudŸ.å@åuT#Ÿ@åEåPIåŗåō“‘Äåāåō“‘Iå˛åuT˛åŗåtPÄåāåuTMågåVMåUåuT#Ÿ]åaåpŸaåfåPÄåāåudŸå˛åudŸ˛åŗåt`Ÿåŗå0Ÿæ$æR$æ‰æV‰æįķRŸįįVįeįķRŸeįjįVjį|įķRŸ%æ˙æuT˙æį‘Lį-įuT-į.į‘L.į|įuT%æ7æuT#Ÿ7æ<æP@æeįō˓@æ˙æuT˙æį‘Lį-įuT-į.į‘L.įeįuTįįudŸkæ˙æudŸ˙æį‘\Ÿį-įudŸ-į.į‘\Ÿ.įeįudŸ‡æ“æ0Ÿ“æČæV‡æČæu`Ÿ“æœæpv"œæ¤æP̿ȿudŸ´æšæP´æšæR׿˙æudŸ˙æį‘\Ÿį-įudŸ-į.į‘\Ÿęæ˙æu`Ÿ˙æį‘XŸį-įu`Ÿ-į.į‘XŸíæ˙æudŸ˙æį‘\Ÿį-įudŸ-į.į‘\ŸíæøæPøæ˙æu`<Ÿ˙æį‘X<Ÿį"įP0įOįu`Ÿ6įAįu_ŸAįEįREįOįu_Ÿ6įEįPTįcįudŸŽįĮįPáįėįPĸį­į‘lÉįáį‘lŸîįč‘lŸĐįáį‘kŸņįč‘kŸččRčč‘kŸĐįŨįPņįčPNčTčPTčYčV=čHč‘l\čtč‘kŸtčxčRxčč‘kŸ\čičPičlč‘l<ŸlčxčPÁčĘčPĘč"éWę(ęP•ę™ęW¯čščuTîčyé{¯Ÿƒéöé{¯Ÿ(ęSę{¯Ÿnę‘ę{¯Ÿ•ęŽę{¯ŸîčyéuDƒéöéuD(ęCęuDCęSęu\ŸnęęuDę‘ęu\Ÿ•ę–ęuD–ęŽęu\ŸîčôčqŸôčųčPéyéuTŸƒéöéuTŸ(ęSęuTŸnę‘ęuTŸéyéuDƒéöéuD(ęCęuDCęSęu\ŸnęęuDę‘ęu\Ÿé éqŸ ééP(éyéuDƒéöéuD(ęCęuDCęSęu\ŸnęęuDę‘ęu\Ÿ(éyé0Ÿƒéöé0Ÿ(ęSę0Ÿnę‘ę0ŸkéyéuTŸüéęuTŸqéyéudŸ˙éęudŸqé~éP˙éęPŸéöéōUš(ęSęōUšnę‘ęōUšŸéėéWėéöéu`Ÿ(ęPęWPęSęu`Ÿnę‘ęWĶéöéudŸ(ę:ęudŸÖéöéu\Ÿ(ę:ęu\ŸÖéÚéP(ę7ęPÚéöéu`ŸCęSęu`ŸSęnęuTŸYę`ęuSŸ`ędęRdęnęuSŸYędęPqę‘ęudŸ}ę‘ęu\Ÿ}ęˆęPėęëVëëudŸëët`Ÿėęë0Ÿcëŋëu ėŌėu äėüėu cëvėu@vėyėtŧyėíu@í#íu`Ÿ#íKíu@nëŋëu ėŌėu äėüėu nëûëWûëvėuTŸvėyėtPŸyėŌėWŌėäėuTŸäėíW#íAíWqëŋëu ėŌėu äėüėu që­ëVėėVäėæėV‹ëvėuŧvėyėt¸yėíuŧ#í=íuŧ‹ë­ëVėėVäėæėV›ëvėuŧvėyėt¸yėäėuŧ#í=íuŧžëvėu\ŸvėyėtXŸyėäėu\Ÿ#í=íu\ŸžëĒëPė—ėPæėüėuXŸėė÷ėu\Ÿ÷ėûėRûėüėu\ŸėėûėPĒëvėuTŸvėyėtPŸyėėuTŸėäėuTŸ#í=íuTŸĒëvėu`Ÿvėyėt\Ÿyėėu`Ÿėäėu`Ÿ#í=íu`ŸČëtėVtėvėu\ŸvėyėtXŸyėėVŌėäėV#í%íV%í=íu\ŸËëĶëPĶëvėuDvėyėt@yėėuDŌėäėuD#í=íuDČëĖëuDŪëâëtéëtėVtėvėu\ŸvėyėtXŸyėėVŌėäėVėëvėuXŸvėyėtTŸyėėuXŸŌėäėuXŸėëøëPyė‡ėP˛ėÁėPÁėÂėtÂėÉėt%í=íu\Ÿ+í=íuXŸ+í:íPøëvėuTŸvėyėtPŸŌėäėuTŸøëyė0ŸŌėäė0ŸííuTŸ7ėvėu`Ÿvėyėt\ŸŌėäėu`Ÿ7ėvėudŸvėyėt`ŸŌėäėudŸ7ėyė0ŸŌėäė0ŸSėlėWŌėäėWXėlėu\ŸŌėäėu\ŸXė`ėPŌėŪėPí#íu`Ÿí#íudŸ|íŠīuDŠīŦīt@Ŧī.đuD.đBđuTŸBđDđuDDđVđuTŸVđođuDođđuTŸđƒđuD|íŽíuD#ŸŽí“íP—íîō§îëīō §ëī đō§ đ,đō §Bđƒđō §—íŠīuDŠīŦīt@Ŧī,đuDBđDđuDDđVđuTŸVđođuDođđuTŸđƒđuDŸíšíWŸí§íuD#Ÿ¯íŗípŸŗí¸íPëī đuTŸŧíÆîWĖīëīWŧíĀíuĪíîjŦŸĪíîuTŸĪíÚíuT#ŸŪíáípŸáíæíPííîuTŸííōíuT#ŸöíųípŸųíūíPîëīvŦŸ đ,đvŦŸBđƒđvŦŸîŠīuTŸŠīŦītPŸŦīëīuTŸ đ,đuTŸBđƒđuTŸî îuT#ŸîîpŸîîPîëīō § đ,đō §Bđƒđō §îŠīuTŸŠīŦītPŸŦīëīuTŸ đ,đuTŸBđƒđuTŸ%î?îV%î)îuT#Ÿ5î9îpŸ9î>îPĖīëīuTŸHîcŸHîcîuTŸHîSîuT#ŸWîZîpŸZî_îPcîŦîVvîŠîĸ¯ŸvîŠîuTŸvîîuT#Ÿ…îˆîpŸˆîîP”îŠîuTŸ”î™îuT#Ÿî îpŸ îĨîPĩîŠīuTŸŠīŦītPŸŦīĖīuTŸ đ,đuTŸBđƒđuTŸĩîSīVSīŠīu`ŸŠīŦīt\ŸŦīĖīV đđVđ,đu`ŸBđDđVDđVđu`ŸVđXđVXđđu`ŸđđVđƒđu`ŸÆîŠīuTŸŠīŦītPŸŦīĖīuTŸ đ,đuTŸVđƒđuTŸÆîŠīu@ŠīŦītŧŦīĖīu@ đ,đu@Vđođu@ođđuXŸđƒđu@ÆîĶîuŧŨî¨īW¨īŠīu\ŸŠīŦītXŸŦīĖīW đ,đWVđnđWŨîŠīuŧŠīŦīt¸ŦīĖīuŧ đ,đuŧVđnđuŧīî¨īW¨īŠīu\ŸŠīŦītXŸŦīĖīW đ,đWōîŠīuSŸŠīŦītOŸŦīĖīuSŸ đ,đuSŸōîūîP đđPXđnđu\Ÿ^điđuSŸiđmđRmđnđuSŸ^đmđPīŠīuXŸŠīŦītTŸŦīĖīuXŸđ,đuXŸīĖī0Ÿđ,đ0ŸnđđuXŸ;īŠīu`ŸŠīŦīt\Ÿđ,đu`Ÿ;īŠīudŸŠīŦīt`Ÿđ,đudŸ;īŦī0Ÿđ,đ0ŸWītīVđ,đV\ītīu\Ÿđ,đu\Ÿ\īhīPđ&đPtīŠīuTŸŠīŦītPŸtīŦī0Ÿ.đBđuTŸDđVđu`ŸDđGđudŸGđPđPPđVđudŸņņWņņu`Ÿņ!ņt\Ÿ@ņZņWņņu_Ÿņ!ņt[Ÿ@ņZņu_Ÿņ ņPIņWņP ņņudŸņ!ņt`Ÿ@ņIņudŸņņu`Ÿņ!ņt\Ÿ@ņIņu`ŸņņP@ņFņPeņņudŸkņsņu_ŸsņwņRwņņu_ŸkņwņPņ™ņu_Ÿ™ņņRņ ņu_ŸņņPō-ōW-ō.ōu`Ÿ.ō1ōt\ŸPōjōWō.ōu_Ÿ.ō1ōt[ŸPōjōu_ŸōōPYōgōPō.ōudŸ.ō1ōt`ŸPōYōudŸ ō.ōu`Ÿ.ō1ōt\ŸPōYōu`Ÿ ō%ōPPōVōPuō‘ōudŸ{ōƒōu_Ÿƒō‡ōR‡ō‘ōu_Ÿ{ō‡ōPŸōŠōu_ŸŠō­ōR­ō°ōu_ŸŸō­ōP ķ=ķW=ķ>ķu`Ÿ>ķAķt\Ÿ`ķzķW#ķ>ķu_Ÿ>ķAķt[Ÿ`ķzķu_Ÿ#ķ*ķPiķwķP*ķ>ķudŸ>ķAķt`Ÿ`ķiķudŸ0ķ>ķu`Ÿ>ķAķt\Ÿ`ķiķu`Ÿ0ķ5ķP`ķfķP…ķĄķudŸ‹ķ“ķu_Ÿ“ķ—ķR—ķĄķu_Ÿ‹ķ—ķP¯ķšķu_ŸšķŊķRŊķĀķu_Ÿ¯ķŊķPÚķäķr” ŸÚķ6ôu˛ôęôuéķ6ôu#Ÿ˛ôęôu#ŸéķôrŸô6ôu #Ÿ˛ôęôu #Ÿ÷ķūķr÷ķ6ôu˛ôęôu ô™ôWĨô!õW5õ7õW ôôw#ŸôôPô ôt'ô™ôWĨô õW'ô6ôu˛ôęôuBô™ôudŸĨô˛ôudŸęô õudŸEôMôPMô™ôuTĨô˛ôuTęôíôuTcô™ôudŸĨô˛ôudŸfô™ôu_ŸĨô˛ôu_ŸfônôPĨô¯ôPĐôŲôPŲôÚôtÚôáôtíô õudŸķôūôu_ŸūôõRõ õu_ŸķôõPnô™ôu`Ÿnô™ô0Ÿõ!õu`Ÿõ™õ[%ų2ų[xõzõõ %õ %Ÿšõ%ųޝŸCųnúޝŸšõŲõVŲõ"ųu`Ÿ"ų%ųt\ŸCųSúu`ŸSúWúVWúnúu`ŸŠõ%ųޝŸCųTųޝŸiųgúޝŸŠõĖõWĖõ"ųu¨Ÿ"ų%ųt¤ŸCųTųu¨ŸiųSúu¨ŸSúgúWŠõ˛õw#Ÿ˛õˇõPÃõĖõWĖõ"ųu¨Ÿ"ų%ųt¤ŸCųTųu¨ŸiųSúu¨ŸWúgúu¨ŸŲõ%ųÕ¨ŸCųTųÕ¨ŸiųSúÕ¨ŸŲõÜõPÜõ'öV=ú?úVđõ%ųÕ¨ŸCųTųÕ¨ŸiųSúÕ¨Ÿđõ-öu¤-ö"ųuŦŸ"ų%ųt¨ŸCųTųuŦŸių=úuŦŸ=ú@úu¤@úSúuŦŸđõųõu¤#ŸųõūõP ö-öu¤-ö"ųuŦŸ"ų%ųt¨ŸCųTųuŦŸių=úuŦŸ?úSúuŦŸ'ö%ųƯŸCųTųƯŸių=úƯŸ'ö*öP*öíöVûų˙ųVúúV'ú)úV>ö%ųƯŸCųTųƯŸių=úƯŸ>öjöu¤jö"ųu°Ÿ"ų%ųtŦŸCųTųu°Ÿių'úu°Ÿ'ú*úu¤*ú=úu°Ÿ>öGöu¤#ŸGöLöPZöjöu¤jö"ųu°Ÿ"ų%ųtŦŸCųTųu°Ÿių'úu°Ÿ)ú=úu°Ÿdö%ųōŽŋCųTųōŽŋių'úōŽŋdöíöVûų˙ųVúúVxö¤öu¤¤ö"ųu´Ÿ"ų%ųt°ŸCųTųu´Ÿiųúu´Ÿúúu¤ú'úu´Ÿxöåöu˜ûųüųu˜úúu˜xööpŸö†öP”ö¤öu¤¤ö"ųu´Ÿ"ų%ųt°ŸCųTųu´Ÿiųúu´Ÿú'úu´Ÿžö%ų˯ŸCųTų˯Ÿiųú˯ŸžöíöVûų˙ųVĩö%ų˯ŸCųTų˯Ÿiųú˯Ÿĩöđöu¤đö"ųu¸Ÿ"ų%ųt´ŸCųTųu¸Ÿiųûųu¸Ÿûųüųu¤üųúu¸Ÿĩöžöu¤#ŸžöÃöPŅöđöu¤đö"ųu¸Ÿ"ų%ųt´ŸCųTųu¸Ÿiųûųu¸Ÿ˙ųúu¸Ÿđö%ųܯŸCųTųܯŸiųûųܯŸđö÷öP÷öK÷u¤åųčųu¤÷%ųܯŸCųTųܯŸiųûųܯŸ÷5÷V5÷"ųuŧŸ"ų%ųt¸ŸCųTųuŧŸiųåųuŧŸåųîųVîųōųtōųûųuŧŸ÷ ÷v#Ÿ ÷÷P÷5÷V5÷"ųuŧŸ"ų%ųt¸ŸCųTųuŧŸiųåųuŧŸįųûųuŧŸ5÷%ų察CųTų察iųåų察5÷<÷P<÷ä÷V¯ųąųVĀųÄųVŅųĶųVF÷%ų察CųTų察iųåų察F÷n÷Wn÷"ųu@Ÿ"ų%ųtŧŸCųTųu@ŸiųŅųu@ŸŅųåųWF÷R÷w#ŸR÷W÷Pc÷n÷Wn÷"ųu@Ÿ"ų%ųtŧŸCųTųu@ŸiųŅųu@ŸĶųåųu@Ÿk÷%ųōtŋCųTųōtŋiųŅųōtŋk÷ä÷V¯ųąųVĀųÄųV|÷Ą÷WĄ÷"ųuDŸ"ų%ųt@ŸCųTųuDŸiųĀųuDŸĀųŅųW|÷"ųu"ų%ųtŒCųFųuiųlųu|ųųuųŽųužųĄųu¯ų˛ųuĀųÁųu|÷…÷pŸ…÷Š÷P–÷Ą÷WĄ÷"ųuDŸ"ų%ųt@ŸCųTųuDŸiųĀųuDŸÄųŅųuDŸž÷%ųô¯ŸCųTųô¯ŸiųĀųô¯Ÿž÷ä÷V¯ųąųV˛÷%ųô¯ŸCųTųô¯ŸiųĀųô¯Ÿ˛÷â÷Wâ÷"ųuHŸ"ų%ųtDŸCųTųuHŸių¯ųuHŸ¯ųĀųW˛÷ģ÷w#Ÿģ÷Ā÷PĖ÷â÷Wâ÷"ųuHŸ"ų%ųtDŸCųTųuHŸių¯ųuHŸąųĀųuHŸä÷%ų察CųTų察ių¯ų察ä÷ë÷Pë÷ŠøV|ų~ųVų‘ųVžų ųVō÷%ų察CųTų察ių¯ų察ō÷øWø"ųuLŸ"ų%ųtHŸCųTųuLŸiųžųuLŸžų¯ųWō÷ú÷pŸú÷˙÷P øøWø"ųuLŸ"ų%ųtHŸCųTųuLŸiųžųuLŸ ų¯ųuLŸø%ųō„ŋCųTųō„ŋiųžųō„ŋøŠøV|ų~ųVų‘ųV$øIøWIø"ųuPŸ"ų%ųtLŸCųTųuPŸiųųuPŸųžųW$ø"ųuˆ"ų%ųt„CųFųuˆiųlųuˆ|ųųuˆųŽųuˆ$ø-øpŸ-ø2øP>øIøWIø"ųuPŸ"ų%ųtLŸCųTųuPŸiųųuPŸ‘ųžųuPŸFø%ų÷¯ŸCųTų÷¯Ÿiųų÷¯ŸFøŠøV|ų~ųVZø%ų÷¯ŸCųTų÷¯Ÿiųų÷¯ŸZøŒøWŒø"ųuTŸ"ų%ųtPŸCųTųuTŸių|ųuTŸ|ųųWZøcøw#ŸcøhøPtøŒøWŒø"ųuTŸ"ų%ųtPŸCųTųuTŸių|ųuTŸ~ųųuTŸŒø%ų察CųTų察ių|ų察Œø“øP“ø!ųWCųEųWiųkųWšø%ų察CųTų察ių|ųå¯ŸšøžøVžø"ųuXŸ"ų%ųtTŸCųTųuXŸiųrųVrųvųtvų|ųuXŸšøĸøpŸĸø§øPŗøžøVžø"ųuXŸ"ų%ųtTŸCųTųuXŸkų|ųuXŸģø%ųō”ŋCųTųō”ŋģø!ųWCųEųWĖøīøVīø"ųu\Ÿ"ų%ųtXŸCųLųVLųPųtPųTųu\ŸĖø"ųu€"ų%ųtü~CųFųu€ĖøÕøpŸÕøÚøPæøīøVīø"ųu\Ÿ"ų%ųtXŸEųTųu\Ÿ ų"ųu`Ÿ"ų%ųt\Ÿ ųųPų"ųudŸ"ų%ųt`ŸTųiųu`ŸTųYųudŸYų`ųP`ųiųudŸãLÉTōôŅëTWōôŅãLÉTōįŅëTWōįŅU'UōįŅMMōôŅëTUōôŅ'U|UōôŅ'UQUōôŅ5MMōįŅëTUōįŅQU|UōįŅ5MMōôŅëTUōôŅQU|UōôŅWM‰MV“W“ëTUV“W“QUpUV“W“yMMP“R“ëTúTP“R“5MWMōįŅWMMōôŅëTUōôŅQUpUōôŅpU|UōįŅWMMōôŅëTUōôŅQUpUōôŅMÉTHŸ|UWHŸMĻMuđ|ŸĻMˇMPˇM\NW\NÆTu|ÆTÉTtŒ||UÄUu|ÄUËUWËUŅUu|ŅUQVuđ|ŸQV¨Vu|¨VģVuđ|ŸģVŧVu|ŧVĪVuđ|ŸĪVĐVu|ĐVãVuđ|ŸãVWu|MˇMu¤}ŸˇMÂMPÂM‰Ou°|‰OOuā~ŸOĒOPĒOÆTuĀ|ÆTÉTtŧ||UÄUuĀ|ÄUĐUu°|ĐUŅUuĀ|ŅU;Vuā~ŸQV”Vu°|”V¨VuĀ|¨VģVuā~ŸģVŧVuĀ|ŧVĪVuā~ŸĪVĐVuĀ|ĐVãVuā~ŸãVįVu°|îVWu°|WWuĀ|N\NW\NÆTu|ÆTÉTtŒ||UÄUu|ÄUËUWËUŅUu|ŅUQVuđ|ŸQV¨Vu|¨VģVuđ|ŸģVŧVu|ŧVĪVuđ|ŸĪVĐVu|ĐVãVuđ|ŸãVWu|^N‘OW‘OÆTuø|ŸÆTÉTtô|Ÿ|UÄUuø|ŸËUĐUWĐUQVuø|ŸQVWVWWVoVuø|Ÿ”VãVuø|ŸãVåVWåVWuø|ŸQVoVuđ|ŸOÉTHŸ|UÄUHŸĐUQVHŸ”VWHŸOGOuü|ŸGO_OQ_O—Ou”|—OŧPuü|ŸŧP Qu¸~Ÿ QQRQrQuŒ|rQÆTu¸~ŸÆTÉTt´~Ÿ|UÄUu¸~ŸĐU;Vu¸~Ÿ”VãVu¸~ŸãVįVu”|îVWu”|W9Wuü|Ÿ^WWuŒ|WWu¸~Ÿ4OGOu }ŸGO_Oq$Ÿ_O—Ou”|#$Ÿ—OŧPu }ŸŧP QuÜ~Ÿ QQr$ŸQrQuŒ|#$ŸrQÆTuÜ~ŸÆTÉTtØ~Ÿ|UÄUuÜ~ŸĐU;VuÜ~Ÿ”VãVuÜ~ŸãVįVu”|#$ŸîVWu”|#$ŸW9Wu }Ÿ^WWuŒ|#$ŸWWuÜ~ŸoV”Vu¤}ŸiOÉTAŸ“|UÄUAŸ“ĐUQVAŸ“”VãVAŸ“įVîVAŸ“WWAŸ“iO‘OW‘OÆTuø|ŸÆTÉTtô|Ÿ|UÄUuø|ŸĐUQVuø|Ÿ”VãVuø|ŸįVîVuø|ŸWWuø|ŸiOlO upt" ˆŸlOrOuw<" ˆŸ$Q'Q upt"ĖŸ'Q-Q uw<"ĖŸiOÉTAŸ|UÄUAŸĐUQVAŸ”VãVAŸįVîVAŸWWAŸiOlO upt" „lOrO uw<" „$Q'Q upt"Č'Q-Q uw<"Č„OĻOuĀ|„O‘OW‘OÆTuø|ŸÆTÉTtô|Ÿ|UÄUuø|ŸĐUQVuø|Ÿ”VãVuø|ŸįVîVuø|ŸWWuø|Ÿ‰OÉTHŸ|UÄUHŸĐU;VHŸ”VãVHŸWWHŸ‰OOuŦ~ŸOOPO"PW"PÆTu”|ÆTÉTt||UÄUu”|ĐUŅUu”|ŅU;VuŦ~Ÿ”V¨Vu”|¨VģVuŦ~ŸģVŧVu”|ŧVĪVuŦ~ŸĪVĐVu”|ĐVãVuŦ~ŸWWWWWu”|‰OOuā~ŸOĒOPĒOÆTuĀ|ÆTÉTtŧ||UÄUuĀ|ĐUŅUuĀ|ŅU;Vuā~Ÿ”V¨VuĀ|¨VģVuā~ŸģVŧVuĀ|ŧVĪVuā~ŸĪVĐVuĀ|ĐVãVuā~ŸWWuĀ|ëO"PW"PÆTu”|ÆTÉTt||UÄUu”|ĐUŅUu”|ŅU;VuŦ~Ÿ”V¨Vu”|¨VģVuŦ~ŸģVŧVu”|ŧVĪVuŦ~ŸĪVĐVu”|ĐVãVuŦ~ŸWWWWWu”|"P1Pu´~Ÿ1P}QW}QÆTu´~ŸÆTÉTt°~Ÿ|UÄUu´~ŸĐU;Vu´~Ÿ”VãVu´~ŸW)WW)W9Wu´~Ÿ^W`WW`WbWu´~ŸbWiWWiWWu´~ŸW–WW–WWu´~ŸW9WuŦ~ŸŧPÉTHŸ|UÄUHŸĐU;VHŸ”VãVHŸ^WWHŸŧP Qu¸~Ÿ QQRQrQuŒ|rQÆTu¸~ŸÆTÉTt´~Ÿ|UÄUu¸~ŸĐU;Vu¸~Ÿ”VãVu¸~Ÿ^WWuŒ|WWu¸~ŸīP QuÜ~Ÿ QQr$ŸQrQuŒ|#$ŸrQÆTuÜ~ŸÆTÉTtØ~Ÿ|UÄUuÜ~ŸĐU;VuÜ~Ÿ”VãVuÜ~Ÿ^WWuŒ|#$ŸWWuÜ~Ÿ9W^Wuā~Ÿ$QÉTAŸ“|UÄUAŸ“ĐU;VAŸ“”VãVAŸ“bWiWAŸ“WWAŸ“$Q}QW}QÆTu´~ŸÆTÉTt°~Ÿ|UÄUu´~ŸĐU;Vu´~Ÿ”VãVu´~ŸbWiWWW–WW–WWu´~Ÿ$Q'Q upt"ĖŸ'Q-Q uw<"ĖŸ$QÉTAŸ|UÄUAŸĐU;VAŸ”VãVAŸbWiWAŸWWAŸ$Q'Q upt"Č'Q-Q uw<"Č?QYQu¸|?Q}QW}QÆTu´~ŸÆTÉTt°~Ÿ|UÄUu´~ŸĐU;Vu´~Ÿ”VãVu´~ŸbWiWWW–WW–WWu´~Ÿ‰QÉTū¯Ÿ|UÄUū¯ŸĐUōUū¯Ÿ”VãVū¯Ÿ‰Q×QW×QÆTu€|ÆTÉTtü{|UÄUu€|ĐUŅUu€|ŅUōUuč|Ÿ”V›Vu€|›VVWV¨Vu€|¨VģVuč|ŸģVŧVu€|ŧVĪVuč|ŸĪVĐVu€|ĐVãVuč|ŸžQÉTū¯Ÿ|UÄUū¯ŸĐUßUū¯Ÿ›VãVū¯ŸžQÄQVÄQÆTuØ|ŸÆTÉTtÔ|Ÿ|UÄUuØ|ŸĐUßUuØ|Ÿ›VŸVVŸV§VuØ|Ÿ§VŽVVŽV˛Vt˛VãVuØ|ŸžQĒQv#ŸĒQ¯QPģQÄQVÄQÆTuØ|ŸÆTÉTtÔ|Ÿ|UÄUuØ|ŸĐUßUuØ|ŸŸV§VuØ|ŸģVãVuØ|Ÿ§VģVuØ|Ÿ×QÉT °Ÿ|UÄU °ŸĐUßU °ŸŸV§V °ŸģVãV °Ÿ×QŪQPŪQ!RWŸVĄVWčQÉT °Ÿ|UÄU °ŸĐUßU °ŸŸV§V °ŸģVãV °ŸčQRVRÆTuÜ|ŸÆTÉTtØ|Ÿ|UÄUuÜ|ŸĐUßUuÜ|ŸŸVŖVVŖV§VuÜ|ŸģVÂVVÂVÆVtÆVãVuÜ|ŸčQôQv#ŸôQųQPRRVRÆTuÜ|ŸÆTÉTtØ|Ÿ|UÄUuÜ|ŸĐUßUuÜ|ŸŖV§VuÜ|ŸĪVãVuÜ|ŸģVĪVuÜ|Ÿ!RÉT7­Ÿ|UÄU7­ŸĐUßU7­ŸŖV§V7­ŸĪVãV7­Ÿ!R(RP(R|RWŖVĨVW2RÉT7­Ÿ|UÄU7­ŸĐUßU7­ŸŖV§V7­ŸĪVãV7­Ÿ2RXRVXRÆTuā|ŸÆTÉTtÜ|Ÿ|UÄUuā|ŸĐUßUuā|ŸŖV§VVĪVÖVVÖVÚVtÚVãVuā|Ÿ2R>Rv#Ÿ>RCRPORXRVXRÆTuā|ŸÆTÉTtÜ|Ÿ|UÄUuā|ŸĐUßUuā|ŸĪVãVuā|Ÿ|RÉT°Ÿ|UÄU°ŸĐUßU°Ÿ|RƒRPƒRĶRWĀUÂUWRÉT°Ÿ|UÄU°ŸĐUßU°ŸRŗRVŗRÆTuä|ŸÆTÉTtā|Ÿ|UĀUuä|ŸĀUÄUVĐU×UV×UÛUtÛUßUuä|ŸR™Rv#Ÿ™RžRPĒRŗRVŗRÆTuä|ŸÆTÉTtā|Ÿ|UĀUuä|ŸĐUßUuä|ŸĶRÆTu€|ÆTÉTtü{|UĀUu€|ĶRÚRPÚRÆTuė|ŸÆTÉTtč|Ÿ|UĀUuė|ŸäRÆTuŒ|ÆTÉTtˆ||UĀUuŒ|įRÆTu€|ÆTÉTtü{|UĀUu€|įRķRPUšUPķRÆTuĐ|ŸÆTÉTtĖ|Ÿ|UUuĐ|Ÿ UĀUuĐ|ŸüRÆTuč|ŸÆTÉTtä|Ÿ|UUuč|Ÿ UĀUuč|ŸüRSP UĒUPSÆTuŦ~ŸÆTÉTt¨~Ÿ|UUuŦ~Ÿ°UĀUuŦ~Ÿ5SÆTu¸~ŸÆTÉTt´~Ÿ|UUu¸~Ÿ°UĀUu¸~ŸDSTuÜ~ŸTÆTu }ŸÆTÉTtœ}Ÿ|UUu }Ÿ°UĀUuÜ~ŸMSÆTuč|ŸÆTÉTtä|Ÿ|UUuč|Ÿ°UĀUuč|ŸMSYSP°UēUPYS3Tu¸~Ÿ3TÆTuü|ŸÆTÉTtø|Ÿ|UUu¸~ŸvSÆTuŦ~ŸÆTÉTt¨~Ÿ|UUuŦ~Ÿ¯SÆTuŦ~ŸÆTÉTt¨~Ÿ|UUuŦ~Ÿ“SÆTu´~ŸÆTÉTt°~Ÿ|UUu´~ŸËSĨTuā~ŸĨTÆTu¤}ŸÆTÉTt }Ÿ|UUuā~ŸčSÆTuđ|ŸÆTÉTtė|Ÿ|UUuđ|ŸTÆTuü|ŸÆTÉTtø|Ÿ|UUuü|ŸTÆTu }ŸÆTÉTtœ}Ÿ|UUu }Ÿ'TÆTuŦ~ŸÆTÉTt¨~Ÿ|UUuŦ~Ÿ'T3TP|UŠUP3TÆTuü|ŸÆTÉTtø|ŸPTÆTuđ|ŸÆTÉTtė|ŸmTÆTuø|ŸÆTÉTtô|Ÿ‰TÆTuđ|ŸÆTÉTtė|ŸĨTÆTu¤}ŸÆTÉTt }ŸßUōUuč|ŸßUįUuė|ŸįUîUPîUōUuė|ŸōUVuÔ|ŸûU VuĪ|Ÿ V VR VVuĪ|ŸûU VPV*VuĐ|ŸV%VuĪ|Ÿ%V)VR)V*VuĪ|ŸV)VP ûĢüū¯ŸËüũū¯Ÿ)ũHũū¯Ÿeũ˜ũū¯Ÿœũ ũū¯Ÿ û–üV–ü˜üu`Ÿ˜ü›üt\Ÿ›üĢüVËüũV)ũ-ũV-ũHũu`ŸeũgũVgũvũu`ŸvũzũVzũ‡ũu`Ÿ‡ũ‹ũV‹ũ˜ũu`ŸœũžũVžũ ũu`ŸûĢüū¯ŸËüũū¯Ÿ)ũ8ũū¯Ÿeũ˜ũū¯ŸûAûWAû˜üuPŸ˜ü›ütLŸ›üĢüuPŸËüũuPŸ)ũ8ũuPŸeũvũuPŸvũ‡ũW‡ũ˜ũuPŸû'ûw#Ÿ'û,ûP8ûAûWAû˜üuPŸ˜ü›ütLŸ›üĢüuPŸËüũuPŸ)ũ8ũuPŸeũvũuPŸ‡ũ˜ũuPŸzũ‡ũuPŸRûĢü°ŸËüũ°Ÿ)ũ8ũ°Ÿeũvũ°Ÿ‡ũ˜ũ°ŸRûYûPYû›ûu´eũhũu´cûĢü°ŸËüũ°Ÿ)ũ8ũ°Ÿeũvũ°Ÿ‡ũ˜ũ°Ÿcû˜ûW˜û˜üuTŸ˜ü›ütPŸ›üĢüuTŸËüũuTŸ)ũ8ũuTŸeũvũW‡ũ˜ũuTŸcûlûw#ŸlûqûPû˜ûW˜û˜üuTŸ˜ü›ütPŸ›üĢüuTŸËüũuTŸ)ũ8ũuTŸ‡ũ˜ũuTŸgũvũuTŸ›ûĢü°ŸËüũ°Ÿ)ũ8ũ°Ÿ‡ũ˜ũ°Ÿ›ûĸûPĸûãûu´)ũ*ũu´ŦûĢü°ŸËüũ°Ÿ)ũ8ũ°Ÿ‡ũ˜ũ°ŸŦûŅûWŅû˜üuXŸ˜ü›ütTŸ›üĢüuXŸËüũuXŸ)ũ8ũW‡ũ˜ũuXŸŦûĩûw#ŸĩûēûPČûŅûWŅû˜üuXŸ˜ü›ütTŸ›üĢüuXŸËüũuXŸ‡ũ˜ũuXŸ-ũ8ũuXŸãûĢü°ŸËüũ°Ÿ‡ũ˜ũ°ŸãûęûPęûdüu´›üŠüu´‡ũˆũu´ôûĢü°ŸËüũ°Ÿ‡ũ˜ũ°Ÿôû—üW—ü˜üu\Ÿ˜ü›ütXŸ›üĢüWËüũW‡ũ˜ũWôûũûw#ŸũûüPü—üW—ü˜üu\Ÿ˜ü›ütXŸ›üĢüWËüũW‹ũ˜ũu\Ÿ6ü–üV–ü˜üu`Ÿ˜ü›üt\Ÿ›üĢüVËüũV6ü˜üudŸ˜ü›üt`Ÿ›üĢüudŸËüũudŸ6üĢü0ŸËüũ0ŸVülüQéüųüQųüũu°aüxüWéüũWaülüPéüųüPxü˜üuHŸ˜ü›ütDŸËüéüuHŸ~ü˜üu`Ÿ˜ü›üt\ŸËüéüu`Ÿ~üƒüPŲüæüPƒü˜üuLŸ˜ü›ütHŸËüŲüuLŸ‰ü˜üu`Ÿ˜ü›üt\ŸËüŲüu`Ÿ‰üŽüPËüÖüP ũ)ũuLŸũũuGŸũũRũ)ũuGŸũũP8ũHũu`Ÿ8ũ=ũudŸ=ũDũPDũHũudŸHũeũuHŸTũ^ũuGŸ^ũbũRbũeũuGŸTũbũPßũ˙ū¯Ÿ¨˙%ū¯Ÿßũ&ūuD&ū˙u`Ÿ˙˙t\Ÿ¨˙u`ŸuD%u`Ÿņũ˙ū¯Ÿ¨˙Č˙ū¯ŸŨ˙˙˙ū¯Ÿ%ū¯Ÿņũ#ūW#ū˙uLŸ˙˙tHŸ¨˙Č˙uLŸŨ˙˙˙uLŸuLŸ%Wņũ÷ũqŸ÷ũüũP ū#ūW#ū˙uLŸ˙˙tHŸ¨˙Č˙uLŸŨ˙˙˙uLŸuLŸ&ū˙°Ÿ¨˙Č˙°ŸŨ˙˙˙°Ÿ°Ÿ&ū-ūP-ūoūuDuD7ū˙°Ÿ¨˙Č˙°ŸŨ˙˙˙°Ÿ°Ÿ7ū\ūW\ū˙uPŸ˙˙tLŸ¨˙Č˙uPŸŨ˙˙˙uPŸW7ū@ūw#Ÿ@ūEūPSū\ūW\ū˙uPŸ˙˙tLŸ¨˙Č˙uPŸŨ˙˙˙uPŸuPŸoū˙@°Ÿ¨˙Č˙@°ŸŨ˙˙˙@°ŸoūvūPvū¸ūuDŨ˙ā˙uD€ū˙@°Ÿ¨˙Č˙@°ŸŨ˙˙˙@°Ÿ€ūĩūWĩū˙uTŸ˙˙tPŸ¨˙Č˙uTŸŨ˙î˙Wî˙˙˙uTŸ€ū‰ūw#Ÿ‰ūŽūPœūĩūWĩū˙uTŸ˙˙tPŸ¨˙Č˙uTŸî˙˙˙uTŸß˙î˙uTŸ¸ū˙)°Ÿ¨˙Č˙)°Ÿî˙˙˙)°Ÿ¸ūŋūPŋū˙uDš˙ē˙uDÉū˙)°Ÿ¨˙Č˙)°Ÿî˙˙˙)°ŸÉūîūWîū˙uXŸ˙˙tTŸ¨˙š˙uXŸš˙Č˙Wî˙˙˙uXŸÉūŌūw#ŸŌū×ūPåūîūWîū˙uXŸ˙˙tTŸ¨˙š˙uXŸî˙˙˙uXŸŊ˙Č˙uXŸ˙˙K°Ÿ¨˙š˙K°Ÿî˙˙˙K°Ÿ˙˙P˙d˙uDî˙ī˙uD˙˙K°Ÿ¨˙š˙K°Ÿî˙˙˙K°Ÿ˙Œ˙WŒ˙˙u\Ÿ˙˙tXŸ¨˙š˙Wî˙˙˙W˙˙w#Ÿ˙ ˙P.˙Œ˙WŒ˙˙u\Ÿ˙˙tXŸ¨˙š˙Wō˙˙˙u\ŸG˙˙u`Ÿ˙˙t\Ÿ¨˙š˙u`ŸG˙˙udŸ˙˙t`Ÿ¨˙š˙udŸG˙˙0Ÿ¨˙š˙0Ÿf˙h˙Ph˙„˙uD¨˙š˙uDn˙„˙W¨˙š˙Wn˙v˙Pv˙„˙u@<Ÿ¨˙ļ˙Pļ˙š˙u@<ŸČ˙Ũ˙u`ŸČ˙Í˙udŸÍ˙Ô˙PÔ˙Ũ˙udŸo ū¯Ÿ8ĩū¯ŸoļuDļu`Ÿ t\Ÿ8¤u`Ÿ¤§uD§ĩu`Ÿ ū¯Ÿ8Xū¯Ÿmū¯Ÿ“ĩū¯ŸŗWŗuLŸ tHŸ8XuLŸmuLŸ“¤uLŸ¤ĩW‡qŸ‡ŒPšŗWŗuLŸ tHŸ8XuLŸmuLŸ“¤uLŸļ °Ÿ8X°Ÿm°Ÿ“¤°ŸļŊPŊ˙uD“”uDĮ °Ÿ8X°Ÿm°Ÿ“¤°ŸĮėWėuPŸ tLŸ8XuPŸmuPŸ“¤WĮĐw#ŸĐÕPãėWėuPŸ tLŸ8XuPŸmuPŸ—¤uPŸ˙ 0°Ÿ8X0°Ÿm0°Ÿ˙PHuDmpuD 0°Ÿ8X0°Ÿm0°ŸEWEuTŸ tPŸ8XuTŸm~W~uTŸw#ŸP,EWEuTŸ tPŸ8XuTŸ~uTŸo~uTŸH )°Ÿ8X)°Ÿ~)°ŸHOPO‘uDIJuDY )°Ÿ8X)°Ÿ~)°ŸY~W~uXŸ tTŸ8IuXŸIXW~uXŸYbw#ŸbgPu~W~uXŸ tTŸ8IuXŸ~uXŸMXuXŸ‘ K°Ÿ8IK°Ÿ~K°Ÿ‘˜P˜ôuD~uDĸ K°Ÿ8IK°Ÿ~K°ŸĸWu\Ÿ tXŸ8IW~WĸĢw#ŸĢ°PžWu\Ÿ tXŸ8IW‚u\Ÿ×u`Ÿ t\Ÿ8Iu`Ÿ×udŸ t`Ÿ8IudŸ× 0Ÿ8I0ŸöøPøuD8IuDūW8IWūPu@<Ÿ8FPFIu@<ŸXmu`ŸX]udŸ]dPdmudŸĀũRũ;ķRŸ;JRJßķRŸ00Ÿ`ß0ŸáũP;EPEJuáũQ;JQ÷ũQ÷ũP]0S­Ÿ`zS­Ÿ“ßS­Ÿ]dPdĻWikWn0S­Ÿ`zS­Ÿ“ßS­Ÿn”V”0uLŸ`iuLŸirVrvtvzuLŸ“ßuLŸnpv#ŸwzpŸzP‹”V”0uLŸ`iuLŸ“ßuLŸkzuLŸš0MŗŸ`iMŗŸ“ßMŗŸšŋu°Ķ0MŗŸ`iMŗŸ“ßMŗŸĶüVü0uPŸ`iuPŸ“ĖuPŸĖÕVÕŲtŲßuPŸĶŲqŸŲŪPėüVü0uPŸ`iuPŸ“ĖuPŸ0R°Ÿ`iR°Ÿ“ĖR°Ÿu°+0R°Ÿ`iR°Ÿ“ĖR°Ÿ+]V]0uTŸ`iuTŸ“šuTŸšÂVÂÆtÆĖuTŸ+1qŸ16PD]V]0uTŸ`iuTŸ“šuTŸģĖuTŸ`0S­Ÿ`iS­Ÿ“šS­Ÿ`gPg0u°`iu°“”u°ĻŠu°n0S­Ÿ`iS­Ÿ“šS­Ÿn’V’0uXŸ`iuXŸ“ĻuXŸĻ¯V¯ŗtŗšuXŸnvpŸv{P‰’V’0uXŸ`iuXŸ“ĻuXŸ¨šuXŸģ0K°Ÿ`iK°Ÿ“ĻK°ŸģÂPÂøW“—WÉ0K°Ÿ`iK°Ÿ“ĻK°ŸÉ0V`iV“œVœ t Ļu\ŸÉŅpŸŅÖPâ0V`iV—Ļu\Ÿû0u`Ÿ`iu`Ÿû0udŸ`iudŸû00Ÿ`i0Ÿ0W`iW0V`iV$P`fPzu`ŸzudŸ†P†udŸāö‘ öũpũ‘d‘ āí‘íöpö÷t÷‘h‘#‘ #*p*2‘d2<‘ ‘#p#$t$2‘h2<‘@kRk? ķRŸž0ŸĀ? 0ŸC¨u¨ŠtŠĖuīōu  u  u, / uC¨u¨Št ŠĖuīōu  u  u, / uËžS­ŸĀÚS­Ÿī S­Ÿ ? S­ŸËŌPŌW, . WÜžS­ŸĀÚS­Ÿī S­Ÿ ? S­ŸÜVžuLŸĀÚuLŸī uLŸ , uLŸ, 5 V5 9 t9 ? uLŸÜčv#ŸčíPųVžuLŸĀÚuLŸī uLŸ , uLŸ'žMŗŸĀÚMŗŸī MŗŸ , MŗŸ'-u°AžMŗŸĀÚMŗŸī MŗŸ , MŗŸAjVjžuPŸĀÚuPŸī uPŸ " V" & t& , uPŸAGqŸGLPZjVjžuPŸĀÚuPŸī uPŸ , uPŸžR°ŸĀÚR°Ÿī R°Ÿ…u°™žR°ŸĀÚR°Ÿī R°Ÿ™ËVËžuTŸĀÚuTŸīøVøütü uTŸ™ŸqŸŸ¤P˛ËVËžuTŸĀÚuTŸ  uTŸņ uTŸÎžS­ŸĀÚS­Ÿ  S­ŸÎÕPÕžu°ĀĖu°  u°ÜžS­ŸĀÚS­Ÿ  S­ŸÜVžuXŸĀÉuXŸÉŌVŌÖtÖÚuXŸ  uXŸÜäpŸäéP÷VžuXŸĀÉuXŸ  uXŸËÚuXŸ)žK°ŸĀÉK°Ÿ  K°Ÿ)0P0fW  W7žK°ŸĀÉK°Ÿ  K°Ÿ7žVĀÉV  V  t  u\Ÿ7?pŸ?DPPžVĀÉV  u\Ÿižu`ŸĀÉu`ŸižudŸĀÉudŸiž0ŸĀÉ0Ÿ…žWĀÉWŠžVĀÉVŠ’PĀÆPÚīu`ŸÚßudŸßæPæīudŸÉWU_ō˛s_Íaō˛ÉWU_ōĨs_ÍaōĨāW0Xō˛ˆ_Ą_ō˛÷W0XōĨ÷W0Xō˛X0XQX$XP$X0Xu@K$!uu0*(Ÿ÷WXōĨX0Xō˛X0Xō˛0XU_HŸĄ_ÍaHŸ0X6Xuđ|Ÿ6XGXPGXęXWęXR_u |R_U_tœ|Ą_ô_u |ô_û_Wû_`u |``uđ|Ÿ`Ø`u |Ø`ë`uđ|Ÿë`ė`u |ė`˙`uđ|Ÿ˙`au |aauđ|ŸaÍau |0XGXu¤}ŸGXRXPRXZuĀ|Z+Zuā~Ÿ+Z8ZP8ZR_uÄ|R_U_tĀ|Ą_ô_uÄ|ô_`uĀ|``uÄ|`k`uā~Ÿ`Ä`uĀ|Ä`Ø`uÄ|Ø`ë`uā~Ÿë`ė`uÄ|ė`˙`uā~Ÿ˙`auÄ|aauā~ŸaauĀ|aGauĀ|GaÍauÄ|ĸXęXWęXR_u |R_U_tœ|Ą_ô_u |ô_û_Wû_`u |``uđ|Ÿ`Ø`u |Ø`ë`uđ|Ÿë`ė`u |ė`˙`uđ|Ÿ˙`au |aauđ|ŸaÍau |ęXķXuø|ŸķXZWZR_uø|ŸR_U_tô|ŸĄ_ô_uø|Ÿû_`W``uø|Ÿ`‡`W‡`Ÿ`uø|ŸÄ`auø|ŸaaWaÍauø|Ÿ`Ÿ`uđ|Ÿ•YU_HŸĄ_ô_HŸ``HŸÄ`ÍaHŸ•YŅYuü|ŸŅYķYQķY4ZuÄ|4ZR[uü|ŸR[‘[u¸~Ÿ‘[Ē[QĒ[ã[uœ|ã[R_u¸~ŸR_U_t´~ŸĄ_ô_u¸~Ÿ`k`u¸~ŸÄ`au¸~ŸaauÄ|aGauÄ|Gaiauü|ŸŽa’auœ|’a™au¸~Ÿ™aŋauœ|ŋaÍau¸~ŸČYŅYu }ŸŅYķYq$ŸķY4ZuÄ|#$Ÿ4ZR[u }ŸR[‘[uÜ~Ÿ‘[Ē[q$ŸĒ[ã[uœ|#$Ÿã[R_uÜ~ŸR_U_tØ~ŸĄ_ô_uÜ~Ÿ`k`uÜ~ŸÄ`auÜ~ŸaauÄ|#$ŸaGauÄ|#$ŸGaiau }ŸŽa’auœ|#$Ÿ’a™auÜ~Ÿ™aŋauœ|#$ŸŋaÍauÜ~ŸŸ`Ä`u¤}ŸôYU_8Ÿ“Ą_ô_8Ÿ“``8Ÿ“Ä`a8Ÿ“aa8Ÿ“GaÍa8Ÿ“ôYZWZR_uø|ŸR_U_tô|ŸĄ_ô_uø|Ÿ``uø|ŸÄ`auø|Ÿaauø|ŸGaÍauø|ŸôYZuw<" ˆŸĢ[ģ[ uw<"ĖŸôYU_8ŸĄ_ô_8Ÿ``8ŸÄ`a8Ÿaa8ŸGaÍa8ŸôYZ uw<" „Ģ[ģ[ uw<"ČZR_uR_U_tĄ_ô_u``uÄ`Ø`uë`ė`u˙`auaauGaÍauZZWZR_uø|ŸR_U_tô|ŸĄ_ô_uø|Ÿ``uø|ŸÄ`auø|Ÿaauø|ŸGaÍauø|ŸZU_HŸĄ_ô_HŸ`k`HŸÄ`aHŸGaÍaHŸZZuŦ~ŸZ+ZP+Z°ZW°ZR_u¤|R_U_t |Ą_ô_u¤|``u¤|`k`uŦ~ŸÄ`Ø`u¤|Ø`ë`uŦ~Ÿë`ė`u¤|ė`˙`uŦ~Ÿ˙`au¤|aauŦ~ŸGaKaWKaÍau¤|Z+Zuā~Ÿ+Z8ZP8ZR_uÄ|R_U_tĀ|Ą_ô_uÄ|``uÄ|`k`uā~ŸÄ`Ø`uÄ|Ø`ë`uā~Ÿë`ė`uÄ|ė`˙`uā~Ÿ˙`auÄ|aauā~ŸGaÍauÄ|yZ°ZW°ZR_u¤|R_U_t |Ą_ô_u¤|``u¤|`k`uŦ~ŸÄ`Ø`u¤|Ø`ë`uŦ~Ÿë`ė`u¤|ė`˙`uŦ~Ÿ˙`au¤|aauŦ~ŸGaKaWKaÍau¤|°ZšZu´~ŸšZ \W \R_u´~ŸR_U_t°~ŸĄ_ô_u´~Ÿ`k`u´~ŸÄ`au´~ŸKaYaWYaiau´~ŸŽaaWa’au´~Ÿ’a™aW™aŋau´~ŸŋaÆaWÆaÍau´~ŸMaiauŦ~ŸR[U_HŸĄ_ô_HŸ`k`HŸÄ`aHŸŽaÍaHŸR[‘[u¸~Ÿ‘[Ē[QĒ[ã[uœ|ã[R_u¸~ŸR_U_t´~ŸĄ_ô_u¸~Ÿ`k`u¸~ŸÄ`au¸~ŸŽa’auœ|’a™au¸~Ÿ™aŋauœ|ŋaÍau¸~Ÿ[‘[uÜ~Ÿ‘[Ē[q$ŸĒ[ã[uœ|#$Ÿã[R_uÜ~ŸR_U_tØ~ŸĄ_ô_uÜ~Ÿ`k`uÜ~ŸÄ`auÜ~ŸŽa’auœ|#$Ÿ’a™auÜ~Ÿ™aŋauœ|#$ŸŋaÍauÜ~ŸiaŽauā~ŸĢ[U_8Ÿ“Ą_ô_8Ÿ“`k`8Ÿ“Ä`a8Ÿ“’a™a8Ÿ“ŋaÍa8Ÿ“Ģ[ \W \R_u´~ŸR_U_t°~ŸĄ_ô_u´~Ÿ`k`u´~ŸÄ`au´~Ÿ’a™aWŋaÆaWÆaÍau´~ŸĢ[ģ[ uw<"ĖŸĢ[U_8ŸĄ_ô_8Ÿ`k`8ŸÄ`a8Ÿ’a™a8ŸŋaÍa8ŸĢ[ģ[ uw<"ČÉ[R_uR_U_tĄ_ô_u``uÄ`Ø`uë`ė`u˙`au’a™auŋaÍauÉ[ \W \R_u´~ŸR_U_t°~ŸĄ_ô_u´~Ÿ`k`u´~ŸÄ`au´~Ÿ’a™aWŋaÆaWÆaÍau´~Ÿ\U_ū¯ŸĄ_ô_ū¯Ÿ`"`ū¯ŸÄ`aū¯Ÿ\c\Wc\R_uŒ|R_U_tˆ|Ą_ô_uŒ|``uŒ|`"`uč|ŸÄ`Ë`uŒ|Ë`Í`WÍ`Ø`uŒ|Ø`ë`uč|Ÿë`ė`uŒ|ė`˙`uč|Ÿ˙`auŒ|aauč|Ÿ*\U_ū¯ŸĄ_ô_ū¯Ÿ``ū¯ŸË`aū¯Ÿ*\P\VP\R_uØ|ŸR_U_tÔ|ŸĄ_ô_uØ|Ÿ``uØ|ŸË`Ī`VĪ`×`uØ|Ÿ×`Ū`VŪ`â`tâ`auØ|Ÿ*\6\v#Ÿ6\;\PG\P\VP\R_uØ|ŸR_U_tÔ|ŸĄ_ô_uØ|Ÿ``uØ|ŸĪ`×`uØ|Ÿë`auØ|Ÿ×`ë`uØ|Ÿc\U_ °ŸĄ_ô_ °Ÿ`` °ŸĪ`×` °Ÿë`a °Ÿc\j\Pj\­\WĪ`Ņ`Wt\U_ °ŸĄ_ô_ °Ÿ`` °ŸĪ`×` °Ÿë`a °Ÿt\Ģ\VĢ\R_uÜ|ŸR_U_tØ|ŸĄ_ô_uÜ|Ÿ``uÜ|ŸĪ`Ķ`VĶ`×`uÜ|Ÿë`ō`Vō`ö`tö`auÜ|Ÿt\€\v#Ÿ€\…\P‘\Ģ\VĢ\R_uÜ|ŸR_U_tØ|ŸĄ_ô_uÜ|Ÿ``uÜ|ŸĶ`×`uÜ|Ÿ˙`auÜ|Ÿë`˙`uÜ|Ÿ­\U_7­ŸĄ_ô_7­Ÿ``7­ŸĶ`×`7­Ÿ˙`a7­Ÿ­\´\P´\]WĶ`Õ`Wž\U_7­ŸĄ_ô_7­Ÿ``7­ŸĶ`×`7­Ÿ˙`a7­Ÿž\ä\Vä\R_uā|ŸR_U_tÜ|ŸĄ_ô_uā|Ÿ``uā|ŸĶ`×`V˙`aVa at aauā|Ÿž\Ę\v#ŸĘ\Ī\PÛ\ä\Vä\R_uā|ŸR_U_tÜ|ŸĄ_ô_uā|Ÿ``uā|Ÿ˙`auā|Ÿ]U_°ŸĄ_ô_°Ÿ``°Ÿ]]P]_]Wđ_ō_W]U_°ŸĄ_ô_°Ÿ``°Ÿ]?]V?]R_uä|ŸR_U_tā|ŸĄ_đ_uä|Ÿđ_ô_V``V` `t ``uä|Ÿ]%]v#Ÿ%]*]P6]?]V?]R_uä|ŸR_U_tā|ŸĄ_đ_uä|Ÿ``uä|Ÿ_]R_uŒ|R_U_tˆ|Ą_đ_uŒ|_]f]Pf]R_uė|ŸR_U_tč|ŸĄ_đ_uė|Ÿp]R_u˜|R_U_t”|Ą_đ_u˜|s]R_uŒ|R_U_tˆ|Ą_đ_uŒ|s]]P¸_Ę_P]R_uĐ|ŸR_U_tĖ|ŸĄ_¸_uĐ|ŸĐ_đ_uĐ|Ÿˆ]R_uč|ŸR_U_tä|ŸĄ_¸_uč|ŸĐ_đ_uč|Ÿˆ]”]PĐ_Ú_P”]R_uŦ~ŸR_U_t¨~ŸĄ_¸_uŦ~Ÿā_đ_uŦ~ŸÁ]R_u¸~ŸR_U_t´~ŸĄ_¸_u¸~Ÿā_đ_u¸~ŸĐ]Ē^uÜ~ŸĒ^R_u }ŸR_U_tœ}ŸĄ_¸_u }Ÿā_đ_uÜ~ŸŲ]R_uč|ŸR_U_tä|ŸĄ_¸_uč|Ÿā_đ_uč|ŸŲ]å]Pā_ę_På]ŋ^u¸~Ÿŋ^R_uü|ŸR_U_tø|ŸĄ_¸_u¸~Ÿ^R_uŦ~ŸR_U_t¨~ŸĄ_¸_uŦ~Ÿ^R_u´~ŸR_U_t°~ŸĄ_¸_u´~Ÿ5^R_uŦ~ŸR_U_t¨~ŸĄ_¸_uŦ~ŸW^1_uā~Ÿ1_R_u¤}ŸR_U_t }ŸĄ_¸_uā~Ÿt^R_uđ|ŸR_U_tė|ŸĄ_¸_uđ|Ÿ›^R_uü|ŸR_U_tø|ŸĄ_¸_uü|ŸĒ^R_u }ŸR_U_tœ}ŸĄ_¸_u }Ÿŗ^R_uŦ~ŸR_U_t¨~ŸĄ_¸_uŦ~Ÿŗ^ŋ^PĄ_˛_Pŋ^R_uü|ŸR_U_tø|ŸÜ^R_uđ|ŸR_U_tė|Ÿ_R_uđ|ŸR_U_tė|Ÿų^R_uø|ŸR_U_tô|Ÿ1_R_u¤}ŸR_U_t }Ÿ`"`uč|Ÿ``uė|Ÿ``P`"`uė|Ÿ"`>`uÔ|Ÿ+`9`uĪ|Ÿ9`=`R=`>`uĪ|Ÿ+`=`P>`Z`uĐ|ŸG`U`uĪ|ŸU`Y`RY`Z`uĪ|ŸG`Y`Pā  R 8 ķRŸ q 1Ÿ 8 1Ÿã { u{ | t| š uŋ Ä uÖ Ų ué ę uü ˙ u  u" # uã { u{ | t | š uŋ Ä uÖ Ų ué ę uü ˙ u  u" # uh q S­Ÿ Ē S­ŸÃ 8 S­Ÿh o Po Á WÖ Ø Wy q S­Ÿ Ē S­ŸÃ 8 S­Ÿy Ÿ VŸ q uDŸ Ē uDŸÃ Ö uDŸÖ ß Vß ã tã 8 uDŸy … v#Ÿ… Š P– Ÿ VŸ q uDŸ Ē uDŸÃ Ö uDŸé 8 uDŸØ é uDŸÁ q u š uà Ä ué ę uü ˙ u  u" # uÁ Č PČ 1 Wà Į W" & Wß ę Vę q uHŸ Ē uHŸé 8 uHŸĮ Ö uHŸį q MŗŸ Ē MŗŸé 8 MŗŸį 1 W" & Wû q MŗŸ Ē MŗŸé 8 MŗŸû - V- q uLŸ Ē uLŸé " uLŸ" + V+ / t/ 8 uLŸû  v#Ÿ  P - V- q uLŸ Ē uLŸé " uLŸ= q R°Ÿ Ē R°Ÿé " R°Ÿ= D PD  W  WN q R°Ÿ Ē R°Ÿé " R°ŸN  V q uPŸ Ē uPŸé  uPŸ  V  t " uPŸN W v#ŸW \ Ph  V q uPŸ Ē uPŸé  uPŸ " uPŸ q S­Ÿ Ē S­Ÿé  S­Ÿ ˆ Pˆ Ī Wü ū W q S­Ÿ Ē S­Ÿé  S­Ÿ ą Vą q uTŸ Ē uTŸé ü uTŸü  V  t  uTŸ — pŸ— œ P¨ ą Vą q uTŸ Ē uTŸé ü uTŸū  uTŸĪ q u š ué ę uĪ Ö PÖ 9 W™  Wé í Wí ø Vø q uXŸ Ē uXŸí ü uXŸõ q K°Ÿ Ē K°Ÿõ 9 W™  W q K°Ÿ Ē K°Ÿ q V ĸ Vĸ Ļ tĻ Ē u\Ÿ  v#Ÿ  P# q V ™ V Ē u\Ÿ< q u`Ÿ ™ u`Ÿ< q udŸ ™ udŸ< q 0Ÿ ™ 0ŸX q W ™ W] q V ™ V] e P – PĒ ŋ u`ŸĒ ¯ udŸ¯ ļ Pļ ŋ udŸ  Ũ RŨ `ķRŸ`jRj&ķRŸņ U1Ÿ€&1ŸÁ Ũ P`ePejuÁ Ũ Q`jQ5US­Ÿ€šS­Ÿ¯ĶS­Ÿ×&S­Ÿ5;u°OUS­Ÿ€šS­Ÿ¯ĶS­Ÿ×&S­ŸOtWtUuDŸ€šuDŸ¯ÂuDŸÂĶW×&uDŸOXrŸX]PktWtUuDŸ€šuDŸ¯ÂuDŸ×&uDŸÄĶuDŸ•—P— WũWWģÆVÆUuHŸ€šuHŸ¯ÂuHŸ×uHŸÃUMŗŸ€šMŗŸ¯ÂMŗŸ×MŗŸÃ WũW×UMŗŸ€šMŗŸ¯ÂMŗŸ×MŗŸ× V UuLŸ€šuLŸ¯ÂuLŸ×ũuLŸũV t uLŸ×Ųv#ŸŨāpŸāåPņ V UuLŸ€šuLŸ¯ÂuLŸ×ũuLŸuLŸUR°Ÿ€šR°Ÿ¯ÂR°Ÿ×ũR°Ÿ P ]WęėW*UR°Ÿ€šR°Ÿ¯ÂR°Ÿ×ũR°Ÿ*[V[UuPŸ€šuPŸ¯ÂuPŸ×ęuPŸęķVķ÷t÷ũuPŸ*,v#Ÿ03pŸ38PD[V[UuPŸ€šuPŸ¯ÂuPŸ×ęuPŸėũuPŸ]US­Ÿ€šS­Ÿ¯ÂS­Ÿ×ęS­Ÿ]dPd¨W×ŲWkUS­Ÿ€šS­Ÿ¯ÂS­Ÿ×ęS­ŸkVUuTŸ€šuTŸ¯ÂuTŸ×āVāätäęuTŸkspŸsxP„VUuTŸ€šuTŸ¯ÂuTŸŲęuTŸ¨ĢPĢW‰W¯ŗWŅÜVÜUuXŸ€šuXŸŗÂuXŸŲUK°Ÿ€šK°ŸŲW‰WíUK°Ÿ€šK°ŸíUV€’V’–t–šu\Ÿíīv#ŸķöpŸöûPUV€‰Všu\Ÿ Uu`Ÿ€‰u`Ÿ UudŸ€‰udŸ U0Ÿ€‰0Ÿ<UW€‰WAUV€‰VAIP€†Pš¯u`ŸšŸudŸŸĻPϝudŸ0F‘ FMpMU‘dU_‘ 0=‘=FpFGtGU‘hU_‘`s‘ szpz‚‘d‚Œ‘ `j‘jspsttt‚‘h‚Œ‘"bĶbWëb_cW3b­bWc_cWgb˜bŒˇŸccŒˇŸc&cŒˇŸ~b˜b¸¸Ÿ­bĶbw Ÿëbcw ŸšbĶbudŸëbcudŸšbŊbPúb cPŊbĶbwŸëbúbwŸÃbĶbudŸëbúbudŸÃbĮbPëb÷bP2c9cucŸ9c@cR@c_cucŸ2c@cPJcQcucŸQcUcRUc_cucŸJcUcP†cŋcuLfPfu|f“fu†ccwxŸc–cP–c¯cwxŸLfPfwxŸ|f“fwxŸ†c¯cWLfPfW|f“fWŠccwxŸc–cP–c¯cwxŸLfPfwxŸ|f“fwxŸŠc¯cWLfPfW|f“fW|f“fWfŒfu`ŸŒffRf“fu`ŸffPģcÂcVÂcÃctÃcĘctĘcûcv|Ÿffv|Ÿģcžcu`ŸžcĘcPĘcbduPjd~duPfCfuP-fCfu`Ÿ3f>fu_Ÿ>fBfRBfCfu_Ÿ3fBfPãcûcrxŸûcdWd&dVãcæcrpŸæcécPécõcrpŸõcûcWãcbd0Ÿjd~d0Ÿff0Ÿf-f0ŸãcæcrpŸæcécPécõcrpŸõcûcWûcdwpŸd&dvpŸėcōcPōcøcp Ÿøcûc wu 3&ŸddwpŸd&dvpŸddWd&dVd&dWd&dVd&dv|Ÿd&dvŸ&dbdu`Ÿjd~du`Ÿ9dbdudŸjd~dudŸQdbdu`Ÿjd~du`ŸQdbdudŸjd~dudŸTdbdu_Ÿjd~du_ŸTdXdPjdqdPXdbdu`Ÿtd~du`Ÿ^dbdu_Ÿtd~du_Ÿ^dbdPtd{dPšdŗdw8ŸÄeÎew8Ÿaf|fw8Ÿŗd­euPÎefuP“f÷guPŗd×duP×de0Ÿe+eP+edeuL“fŨfuLŨfáfuPáfåf0ŸåfęfuPęfėf0ŸėfguP*gng0ŸngguPgg0Ÿœg guLĒgâguLâg÷g0Ÿ~dfō{‚ Pf|fō{‚ “f÷gō{‚ ~df1ŸPf|f1Ÿ“f÷g1Ÿ~dŋdu­eÎeuPf|fudšd1ŸšdŦdR°eÎeRPf|fRˆdfōĘ@Pf|fōĘ@“f÷gōĘ@d­eōp;¸efōp;\f|fōp;“f÷gōp;šdŋduÄeÎeuaf|fu¤dŗdu¤dŗd0Ÿ¤dŗduHŗdŋduŗdĖdVĖd×dv|ŸŨfßfv|ŸåfęfVnggVŗdļduPw"ŸļdßdWßd}euD“fŨfuDŨfáfWáfåfuDåfęfWęfėfuDėfgWgnguDnggWg÷guDģdĖdVĖd×dv|ŸŨfßfv|ŸåfęfVnggVģd×dWŨfáfWåfęfWėfgWnggWėfguDôf˙fu`Ÿ˙fgRggu`ŸôfgPßdädVäd­euPÎefuP“fŨfuPáfåfuPęfėfuP*gnguPœg guPĒg÷guPßdädWßd­e1ŸÎef1Ÿ“fŨf1Ÿáfåf1Ÿęfėf1Ÿ*gng1Ÿœg g1ŸĒg÷g1ŸßdeWáfãfWęfėfWßdädV eevŸeeVäd eW eewxŸáfãfWęfėfW eevŸeeVėdeWáfãfWęfėfW*gAgV/g:gu`Ÿ:g>gR>gAgu`Ÿ/g>gPJgnguPâg÷guPJgVguPVg]gW]gagtagbgwxŸbgngWâg÷gWVg]gW]gagtagigwxŸ)e+eP+exeuL“fŨfuLœg guLĒgâguL)e+eQ+edeuT“fŨfuTœg guTĒgâguT)e­e1ŸÎef1Ÿ“fŨf1Ÿœg g1ŸĒgâg1Ÿ)e+eP+eeVe­euDÎeãeuD“fŨfVœgžgV+eSeVSedevxŸ“fŨfVœgžgV4ePeV“fŨfVœgžgV™f°fVžfŠfu`ŸŠf­fR­f°fu`Ÿžf­fPšfŨfVœgžgVšfŨfuLœg guLĒgâguLšfÅfuLÅfĖfWĖfĐftĐfŅfwxŸŅfŨfWœg gWĒgâgWÅfĖfWĖfĐftĐfØfwxŸoe­euTÎeãeuToeeQoeeQe­eVÎeŪeVe”eV”e™evxŸ™e­eVÎeØeVØeŪevxŸe”evŸ”e™ev|Ÿ™e­evŸÎeØevŸØeŪev|Ÿe™eu`ŸŸe­eu`ŸÎeãeu`ŸŸeĒePe”eV”e™evxŸÎeØeVØeŪevxŸe™eu`ŸÎeãeu`Ÿe‘ePÎeÕePãefuTęeöeuTg˜guPg%guPgguDÂgĖguPĖgĶgVĶg×gt×gØgvxŸØgâgVĖgĶgVĶg×gt×gâgvxŸ5hOhUYhkhU;hOh‘_ŸYhdh‘_ŸdhhhRhhkh‘_Ÿ;hChPYhhhPôøuTP^0ŸôøvŸP^vŸW^g0Ÿv Ÿ^gv Ÿilv ŸluPuyv Ÿy~vŸ~…P…‰vŸ‰¤vŸ•ŸugŸŸŖRŖ¤ugŸ•ŖP¤ŋVŠąugŸąĩRĩŋugŸŠĩP`cuTÂŅ0Ÿ`cvŸÂŅvŸcŋv ŸŅ v Ÿ~ŋvŸŅ vŸÔ vŸ×ß v v4Ÿ×ãPÛß v v4ŸÛãPį v Ÿęō vv 4ŸęöPîō vv 4ŸîöPú˙vŸ˙P vŸ *vŸ*ugŸPŒ˙v ŸMv ŸP|v Ÿęīv ŸŒ|0Ÿęī0ŸP'v ':uTmwv wzuT#:ugŸmzugŸ#'P':uP<ŸmwPwzuP<Ÿ§˙vŸ:MvŸPmvŸęīvŸ§0Ÿ:m0Ÿęī0ŸÉËPËŲvŲįuTZgvgmuTŅįugŸZmugŸŅŲPŲįuP<ŸZgPgmuP<Ÿį˙vŸ:MvŸPZvŸíugŸ‘_Ÿ:OugŸOP‘_ŸPZugŸíņPPWPņ˙V:MVöugŸ‘_Ÿ:OugŸOP‘_ŸöP:GP|vŸˆPˆ•vŸ•ÃvŸ›ĸugŸĸĻRĻÃugŸ›ĻP§ÃVŦŗugŸŗˇRˇÃugŸŦˇPÔ×v Ÿ×āPāæv Ÿq ŸV“:V“:=vŸ“=BV“V“"BWWWZpŸZbu#ŸZbu# u#4ŸZfP^bu# u#4Ÿ^fPjxu# Ÿpxu#u# 4Ÿp|Ptxu#u# 4Ÿt|P€¸u#ŸŨķu#Ÿûu#Ÿ{u#Ÿ€0Ÿ{0ŸĨÍWûW°ÍugŸûugŸ°´PûPÃÆpŸÆÍu#ŸéėpŸėķu#ŸÉÍugŸīķugŸÉÔPīûP'u#Ÿ'u# u#4Ÿ+P#'u# u#4Ÿ#+P/=u# Ÿ5=u#u# 4Ÿ5AP9=u#u# 4Ÿ9APEMu#ŸMPpŸPUPYvu#ŸbmugŸmqRq{ugŸbqPphŠh‘ŠhĀhWÂhYiWzijW­hēhVÂhÚhV–h­hV­hēh‘ÂhÚh‘–hĸhp|Ÿ–hĸhP­h¸hPÂhÍhPÍhĪh ‘#4Ÿ­h¯hR¯h¸hp|ŸÂhÍhp|ŸÍhĪh ‘#8Ÿ­hēhWÂhÚhW­hēh1ŸÂhÚh1Ÿ¯h¸hr4ŸÂhÔhr4Ÿiir4Ÿi+i‘X4ŸŽi“ip4Ÿķijr4Ÿ+ioiUoiziv“iÛiU+i3iU3iBi0ŸBiFiur"ŸFiTiQYiziW“iĒiQĒi¸i‘X¸iÛi0ŸôhūhPūh iu1$Ÿzi“i1ŸÛijPühÛiō)^íijō)^ iziVŽiÛiVķijVi+iVi+i0Ÿ+iziV“iÛiV+i;iQ+i-iur"Ÿ-i7iR5iziV“iÛiV5ioiUoiziv“iÛiU5iYiW“iÛiW5iBiP¸iÎiP5izi1Ÿ“iÛi1Ÿ9iBir4Ÿ¸iÎir4ŸÎiÛi‘X4ŸFiziV“i¸iVFiTiQ“iĒiQĒi¸i‘XFiTiv“iœivFiYiW“i¸iWFizi1Ÿ“i¸i1ŸKiTir4Ÿ“iĒir4ŸĒi¸i‘\4ŸYiziVYiai vp4ŸYieiP]iiiV]iai vp4Ÿ]ieiPj*j‘*j]jW_jíjWkŠkWGjWjV_jrjV2jGjVGjWj‘_jrj‘2jUjr|Ÿ_jejr|Ÿejgj ‘#8Ÿ2jUjR_jejRejgj ‘#4ŸGjUjR_jejRejgj ‘#4ŸGjJjr|ŸJjLjPLjUjr|Ÿ_jejr|Ÿejgj ‘#8ŸGjWjW_jrjWGjWj1Ÿ_jrj1ŸLjUjp4Ÿ_jljp4Ÿĸj­jr4Ÿ­jÁj‘\4Ÿkkr4ŸukŠkr4ŸÁjkUkkvk^kUÁjÍjUÍjÖj0ŸÖjŨjuq"ŸŨjčjQíjkWk2kQ2k@k‘X@k^k0ŸŠjžjQkk1Ÿ^kkQkŠk vp2&1$Ÿ’j^kōšfqkŠkōšfžjkVk^kVukŠkVĸjÁjVĸjÁj0ŸÁjkVk^kVÁjk‘k^k‘ÁjÃjur"ŸÃjÖjR@kQkRÍjkVk^kVÍjkUkkvk^kUÍjíjWk^kWÍjčj‘Xk.k‘X@k^k‘XÍjk1Ÿk^k1ŸÍjÖjq4Ÿ@kQkq4ŸQk^k‘\4ŸŨjkVk@kVŨjčjQk2kQ2k@k‘XŨjßjRßjčjvk)kvŨjíjWk@kWŨjk1Ÿk@k1Ÿßjčjr4Ÿk2kr4Ÿ2k@k‘\4ŸíjkVíjõj vp4ŸíjųjPņjũjVņjõj vp4ŸņjųjPĀæ‘‘)r)/‘Ô‘Ÿ)R)G‘ŸÔv Ÿ‘# Ÿ6v Ÿ6G‘# ŸÜīv ŸÜī‘ŸÜéPōvŸ‘#Ÿ/6vŸ6G‘#Ÿ‘lŸ/:‘lŸ:ARAG‘lŸvŸ‘#Ÿ/6vŸ6G‘#ŸvŸ‘lŸ P vkĒk‘ĒkākWâkylWšl"mWÍkÚkVâkúkVļkÍkVÍkÚk‘âkúk‘ļkÂkp|ŸļkÂkPÍkØkPâkíkPíkīk ‘#4ŸÍkĪkRĪkØkp|Ÿâkíkp|Ÿíkīk ‘#8ŸÍkÚkWâkúkWÍkÚk1Ÿâkúk1ŸĪkØkr4Ÿâkôkr4Ÿ2l=lr4Ÿ=lKl‘X4ŸŽlŗlp4Ÿm"mr4ŸKllUlšlvŗlûlUKlSlUSlbl0Ÿblflur"ŸfltlQylšlWŗlĘlQĘlØl‘XØlûl0ŸllPl*lu1$Ÿšlŗl1Ÿûl"mPlûlōîp m"mōîp*lšlVŽlûlVm"mV2lKlV2lKl0ŸKlšlVŗlûlVKl[lQKlMlur"ŸMlWlRUlšlVŗlûlVUllUlšlvŗlûlUUlylWŗlûlWUlblPØlîlPUlšl1Ÿŗlûl1ŸYlblr4ŸØlîlr4Ÿîlûl‘X4ŸflšlVŗlØlVfltlQŗlĘlQĘlØl‘XfltlvŗlŧlvflylWŗlØlWflšl1ŸŗlØl1Ÿkltlr4ŸŗlĘlr4ŸĘlØl‘\4ŸylšlVyll vp4Ÿyl…lP}l‰lV}ll vp4Ÿ}l…lPPu‘ƒ’‘’™q™Ÿ‘c’‘Ÿ’™Q™Ÿ‘Ÿc~rŸ~ƒ‘#ŸƒŽrŸŽŸ‘#Ÿk~rŸk~‘ŸkxPÕßPßåWåætæít íwŸîöPöW9TwŸÛßPßåWåætæít íwŸ9TwŸÛî0Ÿ;0ŸÛîȡŸ;ȡŸîî ˙Ÿ; ˙ŸîW9TWîîȡŸ;ȡŸî;¨Ÿ%îuP9uPqyuPy‡u`ŸŸĨuPĨģu`ŸģÃuPÃßu`ŸßâuPâ˙u`Ÿ˙uP1u`Ÿ1;uP%îuL9uLqyuLy‡u\ŸŸuL1u\Ÿ1;uL%+P+“W“îuT9uTqwWwyuTŸĨWĨģuTģÁWÁßuTßëWëuT19W9;uT@îuP9uPŸĨuPĨģu`ŸģÃuPÃßu`ŸßâuPâ˙u`Ÿ˙uP1u`Ÿ1;uP@îuL9uLŸuL1u\Ÿ1;uL@€V€wŸšVģ˙VÃßvŸÉĐudŸĐ×R×ßudŸÉ×Pâ˙v ŸîõudŸõųRų˙udŸîųP}îuT9uT˙uT1;uT“îV9V˙VudŸ“›P›îuT9uT˙uT¨îV9VĢîuZŸ9uZŸĢŗP'PudŸ uZŸRuZŸ Pz€V€wz“wŸ“îuT#Ÿ9uT#Ÿ˙uT#Ÿ19wŸ9;uT#ŸuT#Ÿ#pŸ#(Pŗîu*9uÍîu`Ÿ*9u`ŸĐîudŸ*9udŸĐÔP*6PÔîu\ŸÚîudŸÚčPVqu\Ÿ\cuZŸcgRgquZŸ\gP‡›u`Ÿ”uZŸ”˜R˜›uZŸ˜P0mJm‘Jm€mW‚mnW:nÂnWmmzmV‚mšmVVmmmVmmzm‘‚mšm‘Vmbmp|ŸVmbmPmmxmP‚mmPmm ‘#4ŸmmomRomxmp|Ÿ‚mmp|Ÿmm ‘#8ŸmmzmW‚mšmWmmzm1Ÿ‚mšm1Ÿomxmr4Ÿ‚m”mr4ŸŌmŨmr4ŸŨmëm‘X4ŸNnSnp4ŸŗnÂnr4Ÿëm/nU/n:nvSn›nUëmķmUķmn0Ÿnnur"ŸnnQn:nWSnjnQjnxn‘Xxn›n0Ÿ´mžmPžmĘmu1$Ÿ:nSn1Ÿ›nÂnPŧm›nōâ‚­nÂnōâ‚Ęm:nVNn›nVŗnÂnVŌmëmVŌmëm0Ÿëm:nVSn›nVëmûmQëmímur"Ÿím÷mRõm:nVSn›nVõm/nU/n:nvSn›nUõmnWSn›nWõmnPxnŽnPõm:n1ŸSn›n1Ÿųmnr4ŸxnŽnr4ŸŽn›n‘X4Ÿn:nVSnxnVnnQSnjnQjnxn‘XnnvSn\nvnnWSnxnWn:n1ŸSnxn1Ÿ nnr4ŸSnjnr4Ÿjnxn‘\4Ÿn:nVn!n vp4Ÿn%nPn)nVn!n vp4Ÿn%nP@l‘~ББp‘›‘^y‘Ÿ~Š‘ŸŠ‘P‘›‘Ÿ^yqȟ~†qȟ†‹ ‘#$#HŸ‹‘Qfyqȟfy‘ŸfoR^yQ~†Q†‹‘#$‹‘q¸ŸÅÎqԟÎÚu#TŸÖôW“ô÷wŸ“÷üW“üW“wŸ“W“ÚüVūVÚôV/u#HŸ)<V“<?vŸ“?CV“C_V“_bv|Ÿ“/8PE[P/8P ŗpüŸŗÎu#üŸ  0Ÿŋ Á 0Ÿū Z!0ŸÔüu#øŸ Ku#øŸ× u#øŸū  !u#øŸÔ 0Ÿū Z!0Ÿ!XV× V(0P4XV×äV?XudŸ×äudŸ?GP×ŪPį VōųudŸųũRũ udŸōũP#)pėŸ)-u#lŸ&HV“HÛV“!!V“# ōÏX×ōÏ !7!ōÏE!Z!ōÏ&)pėŸ)-u#lŸ&)pđŸ)-u#pŸBSōÏS_PW_P!.!R&!.!Rcqu#`Ÿiqu#hu#`4ŸiuPmqu#hu#`4ŸmuPy‡u#TŸ‡u#\u#T4Ÿ‹Pƒ‡u#\u#T4Ÿƒ‹Pu#HŸ•u#Pu#H4Ÿ•ĄP™u#Pu#H4Ÿ™ĄPĨĀu#@ŸŗÂPÛáPá VXfPfÔV ! !VE!M!VƒĮŠĢŸE!Z!ŠĢŸšĮîĒŸöųpŸų u#Ÿ  ‘#ŸĮÖu#ŸÖ×t#Ÿü udŸ  ‘\ŸĮÖudŸÖ×t`Ÿü PĮÎP; I u#`ŸA I u#hu#`4ŸA M PE I u#hu#`4ŸE M PQ _ u#TŸW _ u#\u#T4ŸW c P[ _ u#\u#T4Ÿ[ c Pg u u#HŸm u u#Pu#H4Ÿm y Pq u u#Pu#H4Ÿq y PĄ ē u#ŸĒ ą ucŸą ĩ Rĩ ŋ ucŸĒ ĩ PÁ Ë u#øŸË Đ pøŸĐ Õ Pæ î u#üŸî ķ püŸķ ø Pė!"W""vŸ""V"&"P&"~"V–"ž"V:""8¸Ÿ–"Ģ"8¸Ÿ[""îĒŸ+#<#vŸ<#A#PA#*%vŸ*%,%u´HŸ,%-%t°HŸ-%ˆ'vŸh#l#Pl#,%u´,%-%t°-%`&u´&ˆ&u´ˆ&('v Ÿ('Z'u´a'ˆ'u´u#{#P{#™#u¸-%6%P6%%u¸P&`&u¸Y%%ēŸP&`&ēŸk%%îĒŸ…#*%vŸ*%,%u´# Ÿ,%-%t°# Ÿ%P&vŸ&Z'vŸa'ˆ'vŸ™#Ÿ#PŸ#+$u¸ė%ö%Pö%P&u¸='S'u¸&P&ÜžŸA'S'ÜžŸ+&P&îĒŸí#*%vȟ*%,%u´#(Ÿ,%-%t°#(Ÿ%ė%vȟ&'vȟ('='vȟS'Z'vȟa'ˆ'vȟí#*%vԟ*%,%u´#4Ÿ,%-%t°#4Ÿ%ė%vԟ&'vԟ('='vԟS'Z'vԟa'ˆ'vԟí#*%vāŸ*%,%u´#@Ÿ,%-%t°#@Ÿ%ė%vāŸ&'vāŸ('='vāŸS'Z'vāŸa'ˆ'vāŸí#*%vėŸ*%,%u´#LŸ,%-%t°#LŸ%ė%vėŸ&'vėŸ('='vėŸS'Z'vėŸa'ˆ'vėŸ\$-%0Ÿ%ė%0Ÿ&°&0Ÿ('='0Ÿa''0Ÿ\$*%väŸ*%,%u´#ÄŸ,%-%t°#ÄŸ%ė%väŸ&°&väŸ('='väŸa''v䟎$-%0Ÿ%ė%0Ÿ&°&0Ÿ('='0Ÿa''0ŸŽ$*%vøŸ*%,%u´#ØŸ,%-%t°#ØŸ%ė%vøŸ&°&vøŸ('='vøŸa''vøŸŦ$ē$Pē$Ā$vüą$ē$Pē$Ā$vüą$*%vüŸ*%,%u´#ÜŸ,%-%t°#ÜŸ%ė%vüŸ&”&vüŸ('='vüŸa'z'vüŸˇ$*%v€Ÿ*%,%u´#āŸ,%-%t°#āŸ%ė%v€Ÿ&”&v€Ÿ('='v€Ÿa'z'v€ŸÎ$Ô$PÔ$,%uŧ,%-%t¸%–%P–%ė%uŧ&ˆ&uŧ('='uŧa'z'uŧĩ%ė%ÜžŸ('='ÜžŸĮ%ė%îĒŸ%*%v„Ÿ*%,%u´#äŸ,%-%t°#äŸa'z'v„Ÿ%!%P`&&vŸf&q&uSŸq&u&Ru&&uSŸf&u&P&‡&vüŸ‡&&P&”&vüŸ”&œ&vøŸœ&Ŗ&PŖ&°&vøŸĘ&'vāŸÍ&Ø& včvā4ŸÍ&Ü&PÔ&Ø& včvā4ŸÔ&Ü&Pā&'vԟã&ë& vÜvÔ4Ÿã&ī&Pį&ë& vÜvÔ4Ÿį&ī&Pķ&'vȟö&ū& vĐvČ4Ÿö&'Pú&ū& vĐvČ4Ÿú&'Pģ'ŋ'Pŋ'ō'uPō'ķ'tLķ'™(uPĮ'É'PÉ'Ü'Wķ'ū'Pū't(W•(™(W(t(ēŸ2(_(îĒŸ\)n)P],c,Pc,u,āˇd)0+:Ÿ=+],:Ÿ~,L/:Ÿd)n)P–)œ)Vœ)0+uŦ=+Q+uŦ=,],uŦ~,í,uŦė-.uŦL.L/uŦ–)œ)uDŸœ)0+V=+Q+V=,],V~,í,Vė-î-Vî-.uDŸL.N.VN..uDŸ.’.V’.§.uDŸ§.Ģ.VĢ.Ā.uDŸĀ.Â.VÂ.Ä.uDŸÄ.Č.VČ.Í.uDŸÍ.Ī.VĪ.Ņ.uDŸŅ.Ķ.VĶ. /uDŸ / /V //uDŸ//V/5/uDŸ5/7/V7/L/uDŸĶ.î.uDŸß.é.u`Ÿé.í.Rí.î.u`Ÿß.í.Pļ)0+uŦ=+Q+uŦ=,],uŦ~,í,uŦė-.uŦL.Ņ.uŦ/L/uŦš)0+u`Ÿ=+Q+u`Ÿ=,],u`Ÿ~,í,u`Ÿė-.u`ŸL.Ņ.u`Ÿ/L/u`Ÿš)Ä)P=,G,Pî)ō)Wō)ų)tų)ĸ*uPŸM,],uPŸ~,,uPŸŊ,í,uPŸL.ƒ.uPŸ.Æ.uPŸÍ.Ņ.uPŸî)ų)Pų)*W*ĸ*u¨M,],u¨~,,u¨Ŋ,í,u¨L.ƒ.u¨.Æ.u¨Í.Ņ.W%*)*W)***t**.*t.*ĸ*uHŸM,],uHŸ~,,uHŸŊ,í,uHŸL.a.uHŸ.Ā.uHŸ%*)*uLŸ)*ĸ*WM,],W~,,WŊ,í,WL.a.W.Ā.WK*ĸ*u¤M,],u¤~,,u¤Ŋ,í,u¤Š.Ā.u¤K*ĸ*uDŸM,],uDŸ~,,uDŸŊ,í,uDŸŠ.Ā.uDŸZ*ĸ*u¤M,],u¤~,,u¤Ŋ,í,u¤Z*f*u¤f*„*uLŸ„*ĸ*uTŸM,],uTŸ~,,uTŸŊ,Í,u¤Í,í,uLŸ]*ĸ*udŸM,],udŸ~,,udŸŊ,í,udŸ]*f*PŊ,Į,Pf*ĸ*uLŸM,],uLŸ~,,uLŸÍ,í,uLŸf*„*uLŸ„*ĸ*uTŸM,],uTŸ~,,uTŸÍ,í,uLŸl*ĸ*udŸM,],udŸ~,,udŸÍ,í,udŸl*u*PÍ,×,Pu*ĸ*uHŸM,],uHŸ~,,uHŸŨ,í,uHŸ{*ĸ*udŸM,],udŸ~,,udŸŨ,í,udŸ{*„*PŨ,į,P„*ĸ*uTŸM,],uTŸ~,,uTŸŠ*ĸ*udŸM,],udŸ~,,udŸŠ*“*P~,‡,P“*ĸ*uPŸM,],uPŸ™*ĸ*udŸM,],udŸ™*ĸ*PM,W,PÁ*!+udŸ,Ŋ,udŸė-ũ-udŸ/L/udŸæ*!+W,Ŋ,Wė-ũ-Wæ*+W+!+u\Ÿ,Ŧ,WŦ,Ŋ,u\Ÿė-î-Wî-ũ-u\Ÿé*!+uXŸ,Ŋ,uXŸė-ũ-uXŸé*ō*P,—,Pō*!+udŸ,Ŋ,udŸė-ũ-udŸø*!+u`Ÿ,Ŋ,u`Ÿė-ũ-u`Ÿø*+P,Ļ,P+!+u\ŸŦ,Ŋ,u\Ÿ+!+udŸŦ,Ŋ,udŸ+!+PŦ,ˇ,P!+0+uDŸ'+0+udŸ'+0+Po+ĸ+Vĸ+0,u\Ÿí,q-u\Ÿz-‡-u\Ÿ‡-‰-V‰-Ļ-u\ŸĻ-¨-V¨-ė-u\Ÿ.L.u\Ÿo+t+u`Ÿt+0,Wí,q-Wz-ė-W.L.W‰-Ļ-u`Ÿ•-Ÿ-udŸŸ-Ŗ-RŖ-Ļ-udŸ•-Ŗ-PŦ+°+V°+´+t´+0,uTŸí,K-uTŸŗ-ė-uTŸ.L.uTŸŦ+´+P´+0,Ví,/-V/-K-uXŸŗ-ĩ-Vĩ-ė-uXŸ..V.&.uXŸ&.(.V(.L.uXŸ(.L.uXŸ4.B.udŸB.F.RF.L.udŸ4.F.Pæ+0,uŦí,--uŦæ+ô+uŦô+,uXŸ,0,u`Ÿí,ũ,uŦũ,-uXŸ---u`Ÿé+0,uPŸí,--uPŸé+ô+Pí,÷,Pô+0,uXŸũ,--uXŸô+,uXŸ,0,u`Ÿũ,-uXŸ---u`Ÿú+0,udŸũ,--udŸú+,P --P,0,uTŸũ, -uTŸ---uTŸ ,0,udŸũ, -udŸ---udŸ ,,Pũ,-P,0,u`Ÿ---u`Ÿ,0,udŸ---udŸ,!,P-'-P!,0,u\Ÿ',0,udŸ',0,P8-K-uTŸ>-F-uPŸF-J-RJ-K-uPŸ>-J-PK-^-u`ŸQ-Y-uPŸY-]-R]-^-uPŸQ-]-P^-q-u\Ÿd-l-uPŸl-p-Rp-q-uPŸd-p-Pĩ-Đ-udŸÁ-Ë-uPŸË-Ī-RĪ-Đ-uPŸÁ-Ī-PĐ-ė-uXŸÖ-â-uPŸâ-æ-Ræ-ė-uPŸÖ-æ-Pî-ũ-u\Ÿô-ũ-udŸô-ũ-Pũ-.uDŸ..uCŸ..R..uCŸ..PN.a.uHŸT.a.udŸT.`.Pa.t.uTŸg.t.udŸg.s.Pt.ƒ.uPŸz.ƒ.udŸz.ƒ.P’.§.uLŸ˜.§.udŸ˜.¤.PĢ.Ā.uXŸą.Ā.udŸą.Ŋ.Pî. /udŸô./u`Ÿ//R/ /u`Ÿô./P/5/udŸ/+/uXŸ+///R//5/uXŸ///P=/E/uXŸE/I/RI/L/uXŸ=/I/Pm/›/V›/Ũ/u`ŸŨ/Ū/t\ŸŪ/ũ/Vũ/0u`Ÿ00t\Ÿ0I0VI0]0u`Ÿ]0c0Vc0Ŧ0u`Ÿ/Ö/udŸK0]0udŸ€0Ŧ0udŸŠ/Ž/PŽ/Ö/uK0]0uÁ/Ö/udŸK0]0udŸÄ/Ö/u_ŸK0]0u_ŸÄ/Ė/PK0W0PĖ/Ö/u`Ÿũ/0u`ŸŌ/Ö/udŸ00udŸŌ/Ū/P00PŪ/0T­Ÿ0K0T­ŸŪ/0u`Ÿ0K0u`Ÿe0€0u`Ÿk0r0u_Ÿr0v0Rv0€0u_Ÿk0v0PŽ0¨0udŸš0Ą0u_ŸĄ0Ĩ0RĨ0¨0u_Ÿš0Ĩ0Pn1ƒ1P˛1Į1Pe1h1p$h1n1Pe1h1p$#øŸh1n1pøŸ‹11P1˛1Vr1˛1ŠŸr1|1p 2 2P$272P#535P2!4uÅ}Ÿ!4"4tÁ}Ÿ"4í9uÅ}Ÿ22w42>21Ÿk2w2P‚3 4W"4˜4W…3 4uĮ}Ÿ"4˜4uĮ}Ÿ…33P„4’4P]2f2u#f2j2t3 4uä}Ÿ"4„4uä}Ÿ–3 4uč}Ÿ"4„4uč}Ÿ–3ž3Pt4~4Pž3 4uā}Ÿ"4t4uā}Ÿ§3 4uč}Ÿ"4t4uč}Ÿ§3¯3Pd4n4P¯3 4uÜ}Ÿ"4d4uÜ}Ÿ¸3 4uč}Ÿ"4d4uč}Ÿ¸3Ā3PT4^4PĀ3 4uĐ}Ÿ"4T4uĐ}ŸÉ3 4uč}Ÿ"4T4uč}ŸÉ3Í3PA4N4PÍ3 4uĖ}Ÿ"4A4uĖ}ŸÖ3 4uč}Ÿ"4A4uč}ŸÖ3Ú3P14>4PÚ3 4uČ}Ÿ"414uČ}Ÿã3 4uč}Ÿ"414uč}Ÿã3į3P"4.4Pį3 4uØ}Ÿđ3 4uč}Ÿđ3ū3P 8$8uČ}Ÿ88uĮ}Ÿ8#8R#8$8uĮ}Ÿ8#8P$8<8uØ}Ÿ-878uĮ}Ÿ78;8R;8<8uĮ}Ÿ-8;8P‚8š8uĐ}Ÿ‹8•8uĮ}Ÿ•8™8R™8š8uĮ}Ÿ‹8™8Pš8ģ8uĖ}ŸŖ8ą8uĮ}Ÿą8ĩ8Rĩ8ģ8uĮ}ŸŖ8ĩ8PÃ8Ũ8uÜ}ŸĖ8Ö8uĮ}ŸÖ8Ú8RÚ8Ũ8uĮ}ŸĖ8Ú8Pö89uč}Ÿ99uĮ}Ÿ99R99uĮ}Ÿ99P9,9uä}Ÿ9'9uĮ}Ÿ'9+9R+9,9uĮ}Ÿ9+9P,9I9uā}Ÿ59?9uĮ}Ÿ?9C9RC9I9uĮ}Ÿ59C9P 4"4 ˙Ÿé4#5uč}Ÿé4ō4P5#5uč}Ÿ5#5V55PM5\54Ÿy55P5€5u#€5Ž5u´}§5ŧ5Pv6Ž6Pj7t7Pä7ė7PŽ5ä6˙Ÿj78˙Ÿ]9w9˙ŸŠ9í9˙ŸŽ5ä6uč}Ÿj78uč}Ÿ]9w9uč}ŸŠ9í9uč}ŸŽ5°6u´}j78u´}Š9í9u´}Ä576V 6^6uÜ}Ÿô78uÜ}Ÿ 66PO6^6uÜ}Ÿô78uÜ}ŸR6^6uä}Ÿô78uä}ŸR6^6Pô7ū7P˜9ļ9uÜ}ŸĄ9¯9uä}Ÿ¯9ŗ9Rŗ9ļ9uä}ŸĄ9ŗ9PŠ7ä7uä}Ÿē9Č9uä}ŸÉ7ä7uä}ŸĖ7ä7WĖ7Ū7PČ9é9uä}ŸŅ9ß9uÜ}Ÿß9ã9Rã9é9uÜ}ŸŅ9ã9P^6v6uÔ}Ÿˆ6ä6uč}Ÿˆ6ä6uÔ}Ÿˆ6Õ6uÔ}#Ÿ_9w9uÔ}Ÿä6ķ62Ÿ57D7V57;7P[7j73ŸG8e8uč}ŸP8^8uā}Ÿ^8b8Rb8e8uā}ŸP8b8PP:\:P ;•;Wĸ;<W#;•;uCŸĸ;<uCŸ#;+;P<<P=:E:u#+;•;u`Ÿĸ;<u`Ÿ1;•;udŸĸ;<udŸ1;9;Pô;ū;P9;•;u\Ÿĸ;ô;u\Ÿ?;•;udŸĸ;ô;udŸ?;G;Pä;î;PG;•;uXŸĸ;ä;uXŸM;•;udŸĸ;ä;udŸM;U;PŅ;Ū;PU;•;uLŸĸ;Ņ;uLŸ[;•;udŸĸ;Ņ;udŸ[;_;PÁ;Î;P_;•;uHŸĸ;Á;uHŸe;•;udŸĸ;Á;udŸe;i;Pą;ž;Pi;•;uDŸĸ;ą;uDŸo;•;udŸĸ;ą;udŸo;s;Pĸ;Ž;Ps;•;uTŸy;•;udŸy;‡;P<8<uTŸ#<*<uCŸ*<.<R.<8<uCŸ#<.<P:<R<udŸF<M<uCŸM<Q<RQ<R<uCŸF<Q<PR<d<u`ŸX<_<uCŸ_<c<Rc<d<uCŸX<c<Pd<v<u\Ÿj<q<uCŸq<u<Ru<v<uCŸj<u<Pv<ˆ<uXŸ|<ƒ<uCŸƒ<‡<R‡<ˆ<uCŸ|<‡<Pˆ<š<uLŸŽ<•<uCŸ•<™<R™<š<uCŸŽ<™<Pš<Ŧ<uHŸ <§<uCŸ§<Ģ<RĢ<Ŧ<uCŸ <Ģ<PŦ<Į<uDŸ˛<Ŋ<uCŸŊ<Á<RÁ<Į<uCŸ˛<Á<P€=Œ=PP>Å>WŲ>M?WS>Å>uŋŸŲ>M?uŋŸS>[>PÅ>u`ŸŲ>Å>udŸŲ>i>P,?6?Pi>Å>u\ŸŲ>,?u\Ÿo>Å>udŸŲ>,?udŸo>w>P?&?Pw>Å>uXŸŲ>?uXŸ}>Å>udŸŲ>?udŸ}>…>P ??P…>Å>uLŸŲ> ?uLŸ‹>Å>udŸŲ> ?udŸ‹>>Pų>?P>Å>uHŸŲ>ų>uHŸ•>Å>udŸŲ>ų>udŸ•>™>Pé>ö>P™>Å>uDŸŲ>é>uDŸŸ>Å>udŸŲ>é>udŸŸ>Ŗ>PŲ>æ>PŖ>Å>uTŸŠ>Å>udŸŠ>ˇ>PU?p?uTŸ[?b?uŋŸb?f?Rf?p?uŋŸ[?f?Px?Œ?uDŸ~?…?uŋŸ…?‰?R‰?Œ?uŋŸ~?‰?P”?¨?uHŸš?Ą?uŋŸĄ?Ĩ?RĨ?¨?uŋŸš?Ĩ?P°?Ä?uLŸļ?Ŋ?uŋŸŊ?Á?RÁ?Ä?uŋŸļ?Á?PĖ?ā?uXŸŌ?Ų?uŋŸŲ?Ũ?RŨ?ā?uŋŸŌ?Ũ?Pč?ü?u\Ÿî?õ?uŋŸõ?ų?Rų?ü?uŋŸî?ų?P@@u`Ÿ @@uŋŸ@@R@@uŋŸ @@P&@-@uŋŸ-@1@R1@4@uŋŸ&@1@PË>Ø>uØ>Ų>QË>Ų>PJo¤ou´ pequ´Jo¤ouGŸŖpŽpuGŸŽp˛pR˛pequGŸJoSoPSo^ou´<ŸŖp˛pPJo^ouLŸŗpÁpWVo^ouHŸšpÁpu´VoaoPšpĪpP^olouPŸĐpŪpuPŸdolouLŸÖpŪpuLŸdoooPÖpæpPlozouTŸįpõpuTŸrozouPŸípõpuPŸro}oPíp˙pPzoˆouXŸqquXŸ€oˆouTŸqquTŸ€o‹oPqqPˆo–ou\Ÿq&qu\ŸŽo–ouXŸq&quXŸŽo™oPq7qP–o¤ou`Ÿ8qFqu`Ÿœo¤ou\Ÿ>qFqu\Ÿœo¤oP>qWqPJo¤o“°Ÿpeq“°ŸzqÜq“°Ÿ rkr“°Ÿxr™r“°ŸJo¤ouŦpequŦzqÜquŦ rkruŦxr™ruŦJo¤o“°Ÿ0peq“°ŸzqĘq“°Ÿ r^r“°Ÿxr™r“°ŸJo¤ou°0pequ°zqĘqu° r^ru°xr™ru°„rruPŸr“rR“r™ruPŸ„r“rPJo¤oÍŽŸPpeqÍŽŸzq¸qÍŽŸ rMrÍŽŸJo¤ou¤PpVpWVpequ¤zq¸qu¤ rMru¤Jo¤oÍŽŸepeqÍŽŸzqĻqÍŽŸ rrÍŽŸ,rMrÍŽŸJo¤oWepeqWzq…qW…qĻquLŸ rrWrruLŸrrW,r5rW5rMruLŸ,rMruLŸ8rCruHŸCrGrRGrMruHŸ8rGrPJo¤oŗ°Ÿspeqŗ°ŸzqĻqŗ°Ÿ rrŗ°ŸJo¤oWspeqWzq…qW…qĻquLŸ rrWrruLŸJo¤oŗ°Ÿ†peqŗ°Ÿzq”qŗ°Ÿ rrŗ°ŸJo¤ou´†pequ´zq”qu´ rru´|q”quHŸˆqquGŸq“qR“q”quGŸˆq“qP”qĻquLŸšqĄquGŸĄqĨqRĨqĻquGŸšqĨqPĻq¸quPŸŦqŗquGŸŗqˇqRˇq¸quGŸŦqˇqP¸qĘquTŸžqÅquGŸÅqÉqRÉqĘquGŸžqÉqPĘqÜquXŸĐq×quGŸ×qÛqRÛqÜquGŸĐqÛqPÜqîqu\ŸâqéquGŸéqíqRíqîquGŸâqíqPîq ru`ŸôqûquGŸûq˙qR˙q ruGŸôq˙qPérķrPķrųr‘s2sV2s3s‘YscsPcsis‘ŠsĸsVĸsŖs‘f@i@p$#„i@o@p„o@s@Pz@ƒ@PĨ@ē@V¨@ŗ@usŸŗ@ˇ@Rˇ@ē@usŸ¨@ˇ@PÂ@Í@usŸÍ@Ņ@RŅ@Û@usŸÂ@Ņ@Pô@?AV?A@A‘TAWAp$WA`APTAWAp$#üŸWA`ApüŸžA§AP§AķBVI+IVK KP KŽKVģKČKVCMHMVeMgMV†MŽMV]E`EP`EIu IItœ+IĻJu ĻJ§J‘˜§JKu YL!Mu =MCMu ¤A§AP§AčBVI+IVģKČKVCMHMVeMgMV†MŽMVŗAčBPĀŸI+IPĀŸģKČKPĀŸCMZMPĀŸeMyMPĀŸ†M˜MPĀŸŗAčBu¨I+Iu¨ģKČKu¨CMZMu¨eMyMu¨†M˜Mu¨ŗAÅAu¨#ŸÅAĘAPÔAčBˆĀŸI+IˆĀŸģKČKˆĀŸeMyMˆĀŸ†M˜MˆĀŸÔAčBu¨I+Iu¨ģKČKu¨eMyMu¨†M˜Mu¨ÔAŨAu¨#ŸŨAâAPėAčB/¯ŸI+I/¯ŸģKČK/¯ŸeMyM/¯Ÿ†M˜M/¯ŸėAčBu¨I+Iu¨ģKČKu¨eMyMu¨†M˜Mu¨ėAõAu¨#ŸõAúAPBčBĒŽŸI+IĒŽŸģKČKĒŽŸeMyMĒŽŸ†M˜MĒŽŸBčBu¨I+Iu¨ģKČKu¨eMyMu¨†M˜Mu¨B Bu¨#Ÿ BBPBPB°ŸBPBu¨B0Bu¨#Ÿ0B5BP;BPBōFō;BPBu¨;BPBV;B?BpŸ?BDBPHBPB˰ŸHBPBu¨HBPBu¨#ŸI+I°ĀŸI+Iu`ŸI+Iu`#ŸuBčBu`ŸģKČKu`ŸeMyMu`Ÿ†M˜Mu`ŸuBčB0ŸģKČK0ŸeMyM0Ÿ†M˜M0ŸHMZMu`ŸšBčBu\ŸģKČKu\Ÿ†M˜Mu\ŸŨBčBu\ŸģKČKu\ŸāBčBu`ŸģKČKu`ŸāBčBPģKÂKPķBCuXŸ;DIDuXŸūBCu\ŸADIDVūB CPADWDPCCuTŸXDfDuTŸ CCu\Ÿ^DfDu\Ÿ CCP^DwDPC"CuHŸxD†DuHŸC"Cu\Ÿ~D†Du\ŸC%CP~D—DP"C0CuDŸ˜DĻDuDŸ(C0Cu\ŸžDĻDu\Ÿ(C3CPžDˇDP0C>Cu@Ÿ¸DÆDu@Ÿ6C>Cu\ŸžDÆDu\Ÿ6CACPžD×DP>CLCuPŸØDæDuPŸDCLCu\ŸŪDæDu\ŸDCLCPŪD÷DPķBLCV(DEVķBLCuŧŸ+D6DuŧŸ6D:DR:DEuŧŸķBûBPûBCv<Ÿ+D:DP5EqEVqEIuŦIIt¨+IĻJuŦĻJ§J‘¤§JKuŦŽKģKVYL!MuŦ=MCMuŦ8EIuXŸIItTŸ+IĻJuXŸĻJ§J‘PŸ§JKuXŸŽKģKuXŸYL!MuXŸ=MCMuXŸ8E@EPŽKĩKPqE†EuXŸŸF­FuXŸ~E†Eu\ŸĨF­Fu\Ÿ~E‰EPĨFˇFP†E”EuTŸ¸FÆFuTŸŒE”Eu\ŸžFÆFu\ŸŒE—EPžF×FP”EĸEuHŸØFæFuHŸšEĸEu\ŸŪFæFu\ŸšEĨEPŪF÷FPĸE°EuDŸøFGuDŸ¨E°Eu\ŸūFGu\Ÿ¨EŗEPūFGP°EžEu@ŸG&Gu@ŸļEžEu\ŸG&Gu\ŸļEÁEPG7GPžEĖEuPŸ8GFGuPŸÄEĖEu\Ÿ>GFGu\ŸÄEĖEP>GWGPqEĖEu\ŸŒFeGu\ŸqEĖEuŧŸFšFuŧŸšFžFRžFeGuŧŸqE{EP{E†Eu\<ŸFžFPeG„GueGIu IItœ+IĻJu ĻJ§J‘˜§JKu ^L!Mu =MCMu  GŦGPcHåHu\Ÿ§JíJu\Ÿ]KKu\ŸfHåHuģŸ§JíJuģŸ]KKuģŸfHnHPK—KPnHåHuXŸ§JíJuXŸ]KKuXŸtHåHu\Ÿ§JíJu\Ÿ]KKu\ŸtH|HP}K‡KP|HåHuTŸ§JíJuTŸ]K}KuTŸ‚HåHu\Ÿ§JíJu\Ÿ]K}Ku\Ÿ‚HŠHPmKwKPŠHåHuPŸ§JíJuPŸ]KmKuPŸHåHu\Ÿ§JíJu\Ÿ]KmKu\ŸH˜HP]KgKP˜HåHuDŸ§JíJuDŸžHåHu\Ÿ§JíJu\ŸžHĻHPŨJįJPĻHåHu@Ÿ§JŨJu@ŸŦHåHu\Ÿ§JŨJu\ŸŦHˇHPˇHÂHu@<Ÿ§JˇJP´HÂHuŧŸ¸JÆJuŧŸēHÂHu\ŸžJÆJu\ŸēHÂHPžJ×JPÂHåHuLŸČHåHu\ŸČH×HPåH˙HuåHōHudķHöHp$öHūHPūHIp´~Ÿ+I4IP{J‹JPīIiJu\ŸíJ]Ku\ŸōIiJuģŸíJ]KuģŸōIúIPMKWKPúIiJuXŸíJMKuXŸJiJu\ŸíJMKu\ŸJJP=KGKPJiJuTŸíJ=KuTŸJiJu\ŸíJ=Ku\ŸJJP-K7KPJiJuPŸíJ-KuPŸJiJu\ŸíJ-Ku\ŸJ$JPK'KP$JiJuDŸíJKuDŸ*JiJu\ŸíJKu\Ÿ*J2JP KKP2JiJu@ŸíJ Ku@Ÿ8JiJu\ŸíJ Ku\Ÿ8J@JPũJKP@JiJuŧŸíJũJuŧŸFJiJu\ŸíJũJu\ŸFJNJPíJ÷JPNJiJuLŸTJiJu\ŸTJ_JP`LtLuLŸfLmLuģŸmLqLRqLtLuģŸfLqLPvLŠLuŧŸ|LƒLuģŸƒL‡LR‡LŠLuģŸ|L‡LPŒL Lu@Ÿ’L™LuģŸ™LLRL LuģŸ’LLPĸLļLuDŸ¨L¯LuģŸ¯LŗLRŗLļLuģŸ¨LŗLP¸LĖLuPŸžLÅLuģŸÅLÉLRÉLĖLuģŸžLÉLPÎLâLuTŸÔLÛLuģŸÛLßLRßLâLuģŸÔLßLPäLøLuXŸęLņLuģŸņLõLRõLøLuģŸęLõLPúLMu\ŸMMuģŸM MR MMuģŸM MPJĻJuĻJ§JQJĻJu`ĻJ§J‘X™J§J1Ÿ™JĻJuĻJ§JQĘKÜKu\ŸĐK×KuŧŸ×KÛKRÛKÜKuŧŸĐKÛKPÜKîKuXŸâKéKuŧŸéKíKRíKîKuŧŸâKíKPîKLuTŸôKûKuŧŸûK˙KR˙KLuŧŸôK˙KPLLuHŸL LuŧŸ LLRLLuŧŸLLPL$LuDŸLLuŧŸL#LR#L$LuŧŸL#LP$L6Lu@Ÿ*L1LuŧŸ1L5LR5L6LuŧŸ*L5LP6LHLuPŸQuTŸ>QIQVIQZQuTŸZQ\QVĐQÛQVÛQķQuTŸŪQéQudŸéQíQRíQķQudŸŪQíQPoNōNn´ŸgPŧPn´Ÿ"Q\Qn´ŸoNuNWuNvNtvNzNtzNōNu`ŸgPŧPu`Ÿ"Q\Qu`Ÿ„NōNn´ŸgPŧPn´Ÿ>Q\Qn´Ÿ„NōNWgPŧPW>Q@QW@QZQudŸZQ\QWĄNōNWgPŧPW¤NōNuGŸgPŧPuGŸ¤NŦNP|P‡PPŦNōNu`ŸgP|Pu`ŸPŧPu`Ÿ˛NōNudŸgP|PudŸPŧPudŸ˛NēNPP–PPēNōNuTŸgP|PuTŸœPŧPuTŸĀNōNudŸgP|PudŸœPŧPudŸĀNČNPœPĻPPČNōNuPŸgP|PuPŸŦPŧPuPŸÎNōNudŸgP|PudŸŦPŧPudŸÎNÖNPŦPļPPÖNōNuLŸgP|PuLŸÜNōNudŸgP|PudŸÜNäNPgPvPPäNōNu\ŸęNōNudŸęNōNPüN0Ou0O1Ot1O@OuüN.OV1O@OV@OP3ŠŸPgP3ŠŸŧPÉP3ŠŸ\QŠQ3ŠŸ@OPxˇŸPgPxˇŸŧPÉPxˇŸ\QŠQxˇŸaOP1ąŸŧPÉP1ąŸ\Q”Q1ąŸ§QŠQ1ąŸaOPxˇŸŧPÉPxˇŸ\Q”QxˇŸ§QŠQxˇŸŽO’OtŽO’OtŽO’OP’O°OV§QŠQVíOPWŧPÉPWđOPu\ŸŧPÉPu\ŸđOøOPŧPÃPPøOPu`ŸūOPudŸūOPP6PfPufPgP‘6PfPufPgP‘ 6P:Pt6P:Pt6P:PP:PdPVdPfPufPgP‘ŅPãPuTŸ×PŪPuGŸŪPâPRâPãPuGŸ×PâPPãPõPuPŸéPđPuGŸđPôPRôPõPuGŸéPôPPõPQuLŸûPQuGŸQQRQQuGŸûPQPQQu\Ÿ QQuGŸQQRQQuGŸ QQP*Q>Qu`Ÿ0Q7QuGŸ7Q;QR;Q>QuGŸ0Q;QP@QZQudŸLQSQuGŸSQWQRWQZQuGŸLQWQP^QvQudŸjQqQu\ŸqQuQRuQvQu\ŸjQuQPvQŠQu`Ÿ|QƒQu\ŸƒQ‡QR‡QŠQu\Ÿ|Q‡QPRRu´S¸SP¸SŠTuŦŠT‹Tt¨ũT$VuŦ$V%V‘¤%V{VuŦôVūWuŦ X7XuŦ>XXXuŦ;RGRPūRŸSV‹TũTVSŸSuCŸ‹TũTuCŸS SPėT÷TP SŸSu`Ÿ‹TėTu`ŸSŸSudŸ‹TėTudŸSSPÜTæTPSŸSu\Ÿ‹TÜTu\Ÿ%SŸSudŸ‹TÜTudŸ%S1SPĖTÖTP1SŸSuXŸ‹TĖTuXŸ7SŸSudŸ‹TĖTudŸ7SCSPŧTÆTPCSŸSuLŸ‹TŧTuLŸISŸSudŸ‹TŧTudŸISUSPŦTļTPUSŸSuHŸ‹TŦTuHŸ[SŸSudŸ‹TŦTudŸ[SgSPœTĻTPgSŸSuDŸ‹TœTuDŸmSŸSudŸ‹TœTudŸmSySP‹T–TPySŸSuTŸSŸSudŸS‘SP}V“VuXŸƒVŽVuCŸŽV’VR’V“VuCŸƒV’VP“VŠVuLŸ™V¤VuCŸ¤V¨VR¨VŠVuCŸ™V¨VPŠVŋVuHŸ¯VēVuCŸēVžVRžVŋVuCŸ¯VžVPŋVÕVuDŸÅVĐVuCŸĐVÔVRÔVÕVuCŸÅVÔVPÕVëVuTŸÛVæVuCŸæVęVRęVëVuCŸÛVęVPaXwXudŸgXrXuCŸrXvXRvXwXuCŸgXvXPwXXu`Ÿ}XˆXuCŸˆXŒXRŒXXuCŸ}XŒXPXŦXu\Ÿ“XĸXuCŸĸXĻXRĻXŦXuCŸ“XĻXP'TlTVVV{VV*TlTuPŸVV{VuPŸ*T6TPVV]VP6TlTu\ŸcV{Vu\ŸtP>tJtu1$ŸētĶt1ŸuBuP{Wg{i{Wi{…{1Ÿ…{Ž{WŋzÛzu ŋzīzu`#Ÿi{…{u`#ŸŋzÛzuĐzŲzWŲzÚzptĐzīzVi{}{VäzīzPi{w{PĐzīzu`#Ÿi{…{u`#ŸĐzāzRĐzāzPīz{u{{t{ {ti{…{uīzB{1Ÿg{Ž{1ŸīzB{0Ÿg{Ž{0Ÿūz{u{{t{ {t€{…{uūz {P€{…{P,{?{u?{B{Pā{ę{Pę{|u4k|u|Pu|w|u4ā{w|ø§Ÿ|||ø§ŸG|k|ÁŸ|||ÁŸ“|›|uŦ~Ÿ›|ģ|Pģ|Z}WZ}Tuü}TW‘ô}Wpuü}ptWtũuü}“|ģ|uā~Ÿģ|Æ|PÆ|Tu¤~TW‘œ~Wũu¤~}Z}WZ}Tuü}TW‘ô}Wpuü}ptWtũuü}H}Q}u´~ŸQ}z}Qz}Tu„~TW‘ü}Wpu„~t–u„~ģũu„~x–uŦ~Ÿú}pHŸtxHŸģÕHŸ×ũHŸú}@~u¸~Ÿ@~X~RX~Tu˜~TW‘~Wpu˜~txu˜~ģÕu˜~×ũu˜~'~@~uÜ~Ÿ@~X~r$ŸX~Tu˜~#$ŸTW‘~#$ŸWpu˜~#$Ÿtxu˜~#$ŸģÕu˜~#$Ÿ×ũu˜~#$Ÿ–ģuā~Ÿ_~Tu TW‘Wpu txu ģÄu _~Tu„~TW‘ü}Wpu„~txu„~ģŅu„~_~p0Ÿtx0ŸģŅ0Ÿ_~b~pq~Tuü}TW‘ô}Wpuü}…~Tuü}TW‘ô}Wpuü}~Tu˜~TW‘~Wpu˜~Ŧ~TuÜ~ŸTW‘Ô~ŸWpuÜ~Ÿĩ~TuĢ~ŸTW‘Ŗ~ŸWpuĢ~Ÿĩ~Á~PWjPÁ~Tu¸~ŸTW‘°~ŸŪ~TuŦ~ŸTW‘¤~Ÿú~Tu´~ŸTW‘Ŧ~ŸTuŦ~ŸTW‘¤~Ÿ,Tuā~ŸTW‘Ø~Ÿ÷XYuPŸY\YuHŸ\Y_YtDŸxYßYuHŸ÷XYuHŸYYPY\YuHŸ\Y_YtDŸxYßYuHŸY\YuHŸ\Y_YtDŸxYßYuHŸYYuPŸYYPY\YuPŸ\Y_YtLŸxYßYuPŸ>Y[YW[Y\Yu`Ÿ\Y_Yt\ŸxY™YWAY\Yu_Ÿ\Y_Yt[ŸxY™Yu_ŸAYHYPxY‡YPHY\YudŸ\Y_Yt`ŸŠY™YudŸNY\Yu`Ÿ\Y_Yt\ŸŠY™Yu`ŸNYSYPŠY–YP¤YĀYudŸĒY˛Yu_Ÿ˛YļYRļYĀYu_ŸĒYļYPÎYØYu_ŸØYÜYRÜYßYu_ŸÎYÜYP0ZEZu°ŸEZĀ\u¨Ÿ0Z>Zu¨Ÿ>ZDZPDZĀ\u¨ŸEZPZu°ŸPZXZPXZĀ\u°ŸbZ>\ū¯Ÿ†\Ā\ū¯ŸbZ#\V#\>\u`Ÿ†\ˆ\Vˆ\Š\u`ŸŠ\Ž\VŽ\›\u`Ÿ›\\V\Ŧ\u`ŸŦ\°\V°\Ā\u`ŸtZ.\ū¯ŸŠ\Ā\ū¯ŸtZ—ZW—Z.\uPŸŠ\›\W›\Ā\uPŸtZ}Zw#Ÿ}Z‚ZPŽZ—ZW—Z.\uPŸ›\Ā\uPŸŽ\›\uPŸ¨Z.\°Ÿ›\Ā\°Ÿ¨Z¯ZP¯ZņZu¤›\ž\u¤šZ.\°Ÿ›\Ā\°ŸšZîZWîZ.\uTŸ›\Ŧ\WŦ\Ā\uTŸšZÂZw#ŸÂZĮZPÕZîZWîZ.\uTŸŦ\Ā\uTŸ\Ŧ\uTŸņZ.\°ŸŦ\Ā\°ŸņZøZPøZ9[u¤Ŧ\­\u¤[.\°ŸŦ\Ā\°Ÿ['[W'[.\uXŸŦ\Ā\W[ [w#Ÿ [[P['[W'[.\uXŸ9[.\°Ÿ9[@[P@[ē[u¤Ė[Ų[u¤\ \u¤J[.\°ŸJ[.\WJ[S[w#ŸS[X[Pf[\W#\.\u\ŸŒ[\VŒ[\udŸŒ[\0ŸŦ[ž[Q \\Q\\u ˇ[Ė[W \\Wˇ[ž[P \\PŲ[ \uHŸß[ \u`Ÿß[ä[P˙[\Pä[˙[uLŸę[˙[u`Ÿę[ų[P.\>\u`Ÿ.\3\udŸ3\:\P:\>\udŸ>\Y\uHŸJ\T\uGŸT\X\RX\Y\uGŸJ\X\PY\u\uLŸ_\g\uGŸg\k\Rk\u\uGŸ_\k\P]*]u°Ÿ*]Ĩ_u¨Ÿ]#]u¨Ÿ#])]P)]Ĩ_u¨Ÿ*]5]u°Ÿ5]=]P=]Ĩ_u°ŸG]_ū¯Ÿ._M_ū¯Ÿj_Ą_ū¯ŸG]_V._2_V2_M_u`Ÿj_n_Vn_{_u`Ÿ{_}_V}_Œ_u`ŸŒ__V__u`Ÿ_Ÿ_VŸ_Ą_u`ŸY]_ū¯Ÿ._=_ū¯Ÿj__ū¯ŸY]|]W|]_uPŸ._=_uPŸj_Œ_uPŸŒ__WY]b]w#Ÿb]g]Ps]|]W|]_uPŸ._=_uPŸj_Œ_uPŸ__uPŸ]_ °Ÿ._=_ °Ÿj_Œ_ °Ÿ]”]P”]Ö]u¤{_~_u¤ž]_ °Ÿ._=_ °Ÿj_Œ_ °Ÿž]Ķ]WĶ]_uTŸ._=_uTŸj_{_uTŸ{_Œ_Wž]§]w#Ÿ§]Ŧ]Pē]Ķ]WĶ]_uTŸ._=_uTŸj_{_uTŸ}_Œ_uTŸÖ]_°Ÿ._=_°Ÿj_{_°ŸÖ]Ũ]PŨ]^u¤j_k_u¤į]_°Ÿ._=_°Ÿj_{_°Ÿį] ^W ^_uXŸ._=_uXŸj_{_Wį]đ]w#Ÿđ]õ]P^ ^W ^_uXŸ._=_uXŸn_{_uXŸ^_°Ÿ._=_°Ÿ^%^P%^Ÿ^u¤Õ^á^u¤._/_u¤/^_°Ÿ._=_°Ÿ/^_W._=_W/^8^w#Ÿ8^=^PK^_W2_=_u\Ÿq^_Vq^_udŸq^_0Ÿ‘^Ŗ^Qņ^_Q__u œ^¯^Wņ^_Wœ^Ŗ^Pņ^_P¯^Õ^uHŸã^ņ^uHŸĩ^Õ^u`Ÿã^ņ^u`Ÿĩ^ē^Pã^î^Pē^Õ^uLŸĀ^Õ^u`ŸĀ^Ī^P_._uLŸ_ _uGŸ _$_R$_._uGŸ_$_P=_M_u`Ÿ=_B_udŸB_I_PI_M_udŸM_j_uHŸY_c_uGŸc_g_Rg_j_uGŸY_g_P``u°Ÿ`•bu¨Ÿ``u¨Ÿ``P`•bu¨Ÿ`%`u°Ÿ%`-`P-`•bu°Ÿ7`÷aū¯Ÿb=bū¯ŸZb‘bū¯Ÿ7`÷aVb"bV"b=bu`ŸZb^bV^bkbu`ŸkbmbVmb|bu`Ÿ|b€bV€bbu`ŸbbVb‘bu`ŸI`÷aū¯Ÿb-bū¯ŸZbbū¯ŸI`l`Wl`÷auPŸb-buPŸZb|buPŸ|bbWI`R`w#ŸR`W`Pc`l`Wl`÷auPŸb-buPŸZb|buPŸ€bbuPŸ}`÷aœąŸb-bœąŸZb|bœąŸ}`„`P„`Æ`u¤kbnbu¤Ž`÷aœąŸb-bœąŸZb|bœąŸŽ`Ã`WÃ`÷auTŸb-buTŸZbkbuTŸkb|bWŽ`—`w#Ÿ—`œ`PĒ`Ã`WÃ`÷auTŸb-buTŸZbkbuTŸmb|buTŸÆ`÷a°Ÿb-b°ŸZbkb°ŸÆ`Í`PÍ`au¤Zb[bu¤×`÷a°Ÿb-b°ŸZbkb°Ÿ×`ü`Wü`÷auXŸb-buXŸZbkbW×`ā`w#Ÿā`å`Pķ`ü`Wü`÷auXŸb-buXŸ^bkbuXŸa÷a°Ÿb-b°ŸaaPaau¤ÅaŅau¤bbu¤a÷a°Ÿb-b°Ÿa÷aWb-bWa(aw#Ÿ(a-aP;a÷aW"b-bu\Ÿaa÷aVaa÷audŸaa÷a0Ÿa“aQáaņaQņa÷au ŒaŸaWáa÷aWŒa“aPáaņaPŸaÅauHŸĶaáauHŸĨaÅau`ŸĶaáau`ŸĨaĒaPĶaŪaPĒaÅauLŸ°aÅau`Ÿ°aŋaPbbuLŸbbuGŸbbRbbuGŸbbP-b=bu`Ÿ-b2budŸ2b9bP9b=budŸ=bZbuHŸIbSbuGŸSbWbRWbZbuGŸIbWbPõb cu°Ÿ c…eu¨Ÿõbcu¨Ÿc cP c…eu¨Ÿ ccu°ŸccPc…eu°Ÿ'cįdū¯Ÿe-eū¯ŸJeeū¯Ÿ'cįdVeeVe-eu`ŸJeNeVNe[eu`Ÿ[e]eV]eleu`ŸlepeVpe}eu`Ÿ}eeVeeu`Ÿ9cįdū¯Ÿeeū¯ŸJe}eū¯Ÿ9c\cW\cįduPŸeeuPŸJeleuPŸle}eW9cBcw#ŸBcGcPSc\cW\cįduPŸeeuPŸJeleuPŸpe}euPŸmcįdĸąŸeeĸąŸJeleĸąŸmctcPtcļcu¤[e^eu¤~cįdĸąŸeeĸąŸJeleĸąŸ~cŗcWŗcįduTŸeeuTŸJe[euTŸ[eleW~c‡cw#Ÿ‡cŒcPšcŗcWŗcįduTŸeeuTŸJe[euTŸ]eleuTŸļcįd°Ÿee°ŸJe[e°ŸļcŊcPŊcūcu¤JeKeu¤Įcįd°Ÿee°ŸJe[e°ŸĮcėcWėcįduXŸeeuXŸJe[eWĮcĐcw#ŸĐcÕcPãcėcWėcįduXŸeeuXŸNe[euXŸūcįd°Ÿee°ŸūcdPddu¤ĩdÁdu¤eeu¤dįd°Ÿee°ŸdįdWeeWddw#ŸddP+dįdWeeu\ŸQdįdVQdįdudŸQdįd0ŸqdƒdQŅdádQádįdu |ddWŅdįdW|dƒdPŅdádPdĩduHŸÃdŅduHŸ•dĩdu`ŸÃdŅdu`Ÿ•dšdPÃdÎdPšdĩduLŸ dĩdu`Ÿ d¯dPōdeuLŸødeuGŸeeReeuGŸødePe-eu`Ÿe"eudŸ"e)eP)e-eudŸ-eJeuHŸ9eCeuGŸCeGeRGeJeuGŸ9eGePåeúeu°Ÿúeuhu¨Ÿåeķeu¨ŸķeųePųeuhu¨Ÿúefu°Ÿf fP fuhu°Ÿf×gū¯Ÿūghū¯Ÿ:hqhū¯Ÿf×gVūghVhhu`Ÿ:h>hV>hKhu`ŸKhMhVMh\hu`Ÿ\h`hV`hmhu`ŸmhohVohqhu`Ÿ)f×gū¯Ÿūg hū¯Ÿ:hmhū¯Ÿ)fLfWLf×guPŸūg huPŸ:h\huPŸ\hmhW)f2fw#Ÿ2f7fPCfLfWLf×guPŸūg huPŸ:h\huPŸ`hmhuPŸ]f×gŠąŸūg hŠąŸ:h\hŠąŸ]fdfPdfĻfu¤KhNhu¤nf×gŠąŸūg hŠąŸ:h\hŠąŸnfŖfWŖf×guTŸūg huTŸ:hKhuTŸKh\hWnfwfw#Ÿwf|fPŠfŖfWŖf×guTŸūg huTŸ:hKhuTŸMh\huTŸĻf×g°Ÿūg h°Ÿ:hKh°ŸĻf­fP­fîfu¤:h;hu¤ˇf×g°Ÿūg h°Ÿ:hKh°ŸˇfÜfWÜf×guXŸūg huXŸ:hKhWˇfĀfw#ŸĀfÅfPĶfÜfWÜf×guXŸūg huXŸ>hKhuXŸîf×g°Ÿūg h°ŸîfõfPõfogu¤Ĩgągu¤ūg˙gu¤˙f×g°Ÿūg h°Ÿ˙f×gWūg hW˙fgw#Ÿg gPg×gWh hu\ŸAg×gVAg×gudŸAg×g0ŸagsgQÁgŅgQŅg×gu lggWÁg×gWlgsgPÁgŅgPgĨguHŸŗgÁguHŸ…gĨgu`ŸŗgÁgu`Ÿ…gŠgPŗgžgPŠgĨguLŸgĨgu`ŸgŸgPâgūguLŸčgđguGŸđgôgRôgūguGŸčgôgP hhu`Ÿ hhudŸhhPhhudŸh:huHŸ)h3huGŸ3h7hR7h:huGŸ)h7hP%€3€U3€7€ ‘v5&ŸjnUnp ‘v5&Ÿ7€|€vŸ“|€€€vhŸ“Ļ€ŗ€vŸ“ŗ€ĩ€V“ĩ€ŋ€vŸ“ŋ€ʀvxŸ“ʀĪ€p8Ÿ“Ī€׀vŸ“׀â€vpŸ“â€į€p@Ÿ“į€ų€vhŸ“7€€€WĻ€ˀWˀĪ€‘ Ī€ã€Wã€į€‘ į€ų€W7€|€vŸ|€€€vhŸĻ€ŗ€vŸŗ€ĩ€Vĩ€ŋ€vŸŋ€ʀvxŸĘ€Ī€p8ŸĪ€׀vŸ×€â€vpŸâ€į€p@Ÿį€ų€vhŸ7€F€vF€G€tG€K€‘PS€|€vŸ“|€€€vpŸ“ĩ€ŋ€vŸ“ŋ€ʀV“ʀĪ€p“Ī€׀vŸ“׀â€vxŸ“â€į€p8Ÿ“į€ų€vpŸ“S€€€Wĩ€ˀWˀĪ€‘ Ī€ã€Wã€į€‘ į€ų€WS€|€vŸ|€€€vpŸĩ€ŋ€vŸŋ€ʀVʀĪ€pĪ€׀vŸ×€â€vxŸâ€į€p8Ÿį€ų€vpŸS€Y€vY€Z€tZ€^€‘Pf€|€vŸ“|€€€vxŸ“Ī€׀vŸ“׀â€V“â€į€p“į€ų€vxŸ“f€€€WĪ€ã€Wã€į€‘ į€ų€Wf€|€vŸ|€€€vxŸĪ€׀vŸ×€â€Vâ€į€pį€ų€vxŸf€l€vl€m€tm€q€‘P7€|€V“|€€€v`Ÿ“€€’€V“Ļ€ŗ€V“ŗ€ĩ€vxŸ“ĩ€ŋ€V“ŋ€ʀvpŸ“ʀĪ€p@Ÿ“Ī€׀V“׀â€vhŸ“â€į€pHŸ“į€ų€v`Ÿ“7€˜€WĻ€ˀWˀĪ€‘ Ī€ã€Wã€į€‘ į€ų€W7€|€V|€€€v`Ÿ€€’€VĻ€ŗ€Vŗ€ĩ€vxŸĩ€ŋ€Vŋ€ʀvpŸĘ€Ī€p@ŸĪ€׀V׀â€vhŸâ€į€pHŸį€ų€v`Ÿ€€…€v…€†€t†€Š€‘P7€€€ōq‰Ļ€ų€ōq‰S€€€ōq‰ĩ€ų€ōq‰f€€€ōq‰Ī€ų€ōq‰ 6U“ 6W 6U &u&'t'+‘P36ōq‰6LU“6LW6LU6<u<=t=A‘PILōq‰L_U“L_WL_ULRuRStSW‘P“´RLƒUƒR´ׁwŸ“ׁáwtŸ“‚5‚wŸ“5‚9‚R“9‚Œ‚wŸ“Œ‚‚wtŸ“´áōuŽ‚‚ōuŽ´á‘ ‚‚‘ ´ׁwŸ×áwtŸ‚5‚wŸ5‚9‚R9‚Œ‚wŸŒ‚‚wtŸ‚4‚V‚6‚U‚‚PׁwŸ“ׁáwxŸ“9‚Œ‚wŸ“Œ‚‚wxŸ“áōuŽ9‚‚ōuŽá‘ 9‚‚‘ ׁwŸ×áwxŸ9‚Œ‚wŸŒ‚‚wxŸ9‚a‚V9‚a‚U9‚J‚Pȁׁw Ÿ“ׁáw|Ÿ“a‚Œ‚w Ÿ“Œ‚‚w|Ÿ“ȁáōuŽa‚‚ōuŽȁၑ a‚‚‘ ȁׁw Ÿ×áw|Ÿa‚Œ‚w ŸŒ‚‚w|Ÿa‚Œ‚Va‚Œ‚Ua‚r‚P´ׁW“ׁáwpŸ“၂W“‚5‚W“5‚9‚r|Ÿ“9‚Œ‚W“Œ‚‚wpŸ“´‚ōuŽ‚‚ōuŽ´‚‘ ‚‚‘ ´ׁWׁáwpŸá‚W‚5‚W5‚9‚r|Ÿ9‚Œ‚WŒ‚‚wpŸč‚V聂UčōP´áōWŽ‚‚ōWށáōWŽ9‚‚ōWŽȁáōWŽa‚‚ōWŽĂ΂V“0ƒLƒV“Ă΂ōuŽ0ƒLƒōuŽĂ΂‘ 0ƒLƒ‘ Ă΂V0ƒLƒV0ƒLƒU0ƒ>ƒR>ƒLƒ‘\0ƒ>ƒP˂΂ōWŽ΂į‚V“΂į‚ōuŽ΂į‚‘ ΂į‚VՂį‚UՂ߂RՂ߂Pũ‚ƒV“ƒƒv|Ÿ“ƒ0ƒV“ũ‚0ƒōuŽũ‚0ƒ‘ ũ‚ƒVƒƒv|Ÿƒ0ƒVƒ0ƒ‘ ƒ"ƒQƒ"ƒR"ƒ.ƒ‘\.ƒ0ƒRƒ"ƒPƒƒōWމƒ—ƒP—ƒƒ ‘v4&Ÿƒ1„Wŋ„΄W΄Ō„‘ Ō„č„Wĸƒ˛ƒPĸƒ1„Wŋ„΄W΄Ō„‘ Ō„č„Wžƒ1„Wŋ„΄W΄Ō„‘ Ō„č„WÁƒ҃PÁƒ1„Wŋ„΄W΄Ō„‘ Ō„č„WŨƒ1„WŌ„č„WāƒđƒPāƒ1„WŌ„č„Wüƒ1„Wā„č„W˙ƒ„P˙ƒ1„Wā„č„WS„p„WU„e„PU„p„Wm„p„ō8–p„„Wr„‚„Pr„„WŠ„„ō8–„§„W„Ÿ„P„§„Wžƒ1„ō8–ŋ„č„ō8–Ũƒ1„ō8–Ō„č„ō8–üƒ1„ō8–ā„č„ō8–_i‹iW“iŖiW“hj­jW“¤hĒhVĒhĢhtĢh¯ht¯hŒiuPŸŒii‘HŸikuPŸkktLŸk.luPŸ¤hĒhuTŸĒhČhVČhĪhtĪhŒiuTŸŒii‘LŸikuTŸkktPŸkqkuTŸqkwkVwk.luTŸĩh¸hpԟ¸hŒiu#TŸŒii‘#TŸi ku#TŸkJku#TŸ\kqku#TŸ”k.lu#TŸĩh¸hp؟¸hŒiu#XŸŒii‘#XŸi™ip؟™iju#XŸj+jqŸ+jãju#XŸk(kr؟(kDku#XŸ\kqkqŸ”k.lu#XŸģhŒiu#TŸŒii‘#TŸi ku#TŸkJku#TŸ\kqku#TŸ”k.lu#TŸģhŒiu#TŸŒii‘#TŸiju#TŸjjrԟj ju#TŸ j+jQ+jãju#TŸkDku#TŸ\kqkQ”k.lu#TŸÁhČhVČhĪhtĪhŒiuTŸŒii‘LŸikuTŸkktPŸkqkuTŸ”k.luTŸÁhÅhu#X“ÅhŒiu¸“Œii‘°“iæiu¸“4jŊju¸“.k6ku¸“”k.lu¸“Áh8iW“4jDjW“”kœkW“ÂkÄkW“õk÷kW“ l lW“ÁhÄhuXŸÄhĪhPĪhŲhVŲhŒiu°Œii‘¨iku°kktŦkqku°”kÂku°ÂkĘkVĘk.lu°ŌhŲhVŲhŒiu°Œii‘¨iku°kktŦkqku°”kŽku°Ėk.lu°ŌhÕhu`ŸÕhāhPāhųhVųhŒiu´Œii‘Ŧiku´kkt°kqku´”kškVškŽku´Ėk lu´ llVl.lu´æhųhVųhŒiu´Œii‘Ŧiku´kkt°kqku´Ėk lu´ llVl.lu´æhīhPīhŒiuŧŒii‘´iúiuŧúi4ju\Ÿ4jãjuŧãjku\ŸkktXŸkDkuŧDkqku\ŸĖk.luŧ˙hŒiu´Œii‘Ŧiku´kkt°kqku´Ėk lu´˙h8iu´8iCiudŸCiQiu\ŸQi_iuXŸ_imiuTŸ4jDju´DjPju\ŸPj^juXŸhjvjuTŸ­jŊjudŸõk÷ku´÷k lu\Ÿi iQ iŒiu@Œii‘¸i4ju@4j>jQ>jku@kktŧkqku@Ėk lu@i iP4j>jPl$ludŸ$l(lR(l.ludŸl(lP iŒiu\ŸŒii‘TŸi4ju\ŸDjku\ŸkktXŸkqku\ŸĖk lu\Ÿ iŒiudŸŒii‘\Ÿi4judŸDjkudŸkkt`ŸkqkudŸĖk ludŸ8iŒiudŸŒii‘\Ÿi4judŸDjkudŸkkt`ŸkqkudŸĖkõkudŸ8iCiudŸCiŒiu\ŸŒii‘TŸi4ju\ŸDj­ju\Ÿ­jŊjudŸŊjku\ŸkktXŸkqku\ŸĖkõku\Ÿ8iCiudŸCiQiu\ŸQi_iuXŸ_imiuTŸDjPju\ŸPj^juXŸhjvjuTŸ­jŊjudŸ;iŒiu`ŸŒii‘XŸi4ju`ŸDjku`Ÿkkt\Ÿkqku`ŸĖkõku`Ÿ;iCiP­jˇjPCiŒiu\ŸŒii‘TŸi4ju\ŸDj­ju\ŸŊjku\ŸkktXŸkqku\ŸĖkõku\ŸCiQiu\ŸQi_iuXŸ_imiuTŸDjPju\ŸPj^juXŸhjvjuTŸIiŒiudŸŒii‘\Ÿi4judŸDj­judŸŊjkudŸkkt`ŸkqkudŸĖkõkudŸIiTiPTi_iu\<ŸDjOjPQi_iuXŸPj^juXŸQi_iuXŸ_imiuTŸPj^juXŸhjvjuTŸWi_iudŸVj^judŸWibiPVjgjPœkŽkuXŸĸkŠkuOŸŠk­kR­kŽkuOŸĸk­kP÷k lu\Ÿũk lu`ŸũklP_imiuTŸhjvjuTŸeimiudŸnjvjudŸeipiPnj‡jPmi{iuPŸˆj–juPŸsi{iudŸŽj–judŸsi{iPŽj§jPÛi4judŸŊjkudŸkkt`ŸkqkudŸŪi4ju\ŸŊjku\ŸkktXŸkqku\ŸŪiæiP.k:kPj jP j+ju#|+j4juŧ#Ÿ\kqkwü j4ju`Ÿ\kqku`Ÿ j+jR“\kckR“ckek wü2$q"Ÿ“ j+jQ+j4ju#TŸ\kqkQ j%j rq4Ÿ\kck rq4Ÿckek wü2$4Ÿ\kqkQ\kqku`Ÿ\khkPŊjãju`Ÿk.ku`ŸŊjãju#TŸk(krԟ(k.ku#TŸËjãju#TŸËjãju`ŸËj×jPėj kqāŸDkVkqāŸújkudŸkkt`ŸDk\kudŸúj kqāŸDkVkqāŸüj kqāŸüj kudŸüjkPk kqäyk‹kuPŸk†kuOŸ†kŠkRŠk‹kuOŸkŠkPŽkÂkuTŸ´kģkuOŸģkŋkRŋkÂkuOŸ´kŋkPÎkâkudŸÔkâku\ŸÔkßkPlmVmmPmâmV;n=nVlmWmmudŸmmt`ŸmđmW;nRnW lmu_Ÿmmt[Ÿmđmu_Ÿ;nRnu_Ÿ lĢlPŧmĮmPĢlmu`Ÿmmt\Ÿmŧmu`ŸÍmđmu`Ÿ;nRnu`ŸąlmudŸmmt`ŸmŧmudŸÍmđmudŸ;nRnudŸąlēlP¯mļmPÅlmVmmPm¯mVÍmâmV;n=nVÅlâlu m¯mu Ímãmu ;nRnu Ålâlum¯muÍmãmu;nRnuÅlČlPČlmuPmmtLm¯muPÍmđmuP;nRnuPÅlČlpŸČlmuP#ŸmmtL#Ÿm¯muP#ŸÍmđmuP#Ÿ;nRnuP#ŸÅlČlpŸČlĪluP#ŸmĨmuP#ŸÍmđmuP#Ÿ;nRnuP#ŸĪlmVmmPĨm¯mVĪlmvŸmmpŸĨm¯mvŸÚlÜlPmĨmudŸÍmđmudŸ;nRnudŸm"muP#Ÿ"m'mP'mĨmuP#ŸÍmđmuP#Ÿ;nRnuP#Ÿ.mĨmudŸÍmđmudŸ1mĨmu`ŸÍmđmu`Ÿ1m:mPÍm×mP:mĨmuP#ŸŨmđmuP#Ÿ=nRnudŸCnRnu`ŸCnOnPnnudŸ nnu_ŸnnRnnu_Ÿ nnPn.nu`Ÿ!n)nu_Ÿ)n-nR-n.nu_Ÿ!n-nP%…x…‘“…Š…‘%…-…P-…x…‘“…Š…‘%…n…Wn…p…‘p…x…W“…Š…W5…:…P:…m…Vm…n…‘wŸn…p…‘‘Ÿp…x…V“…Š…VC…V…PV…o…Up…s…Ps…x…U“…Š…UF…x…‘“…Š…‘F…n…Wn…p…‘p…x…W“…Š…WF…V…RV…^…‘\^…o…u Ÿp…x…R“…Š…u ŸF…m…Vm…n…‘wŸn…p…‘‘Ÿp…x…V“…Š…VH…^…VH…^…WH…V…RV…^…‘\s…x…R^…m…Vm…n…‘wŸn…p…‘‘Ÿ“…Š…V^…o…U“…Š…UĮn ouD oŗouXŸŗo´otTŸ´oŨouDŨo'puXŸ'p(p‘PŸ(pĩpuDņp3quD=qCquDŨnįnRįnouŧooROp[pR[p„puŧ|n{ou(pĮpuĐpqu=q?quCqfqu…n˛oW˛oŗoudŸŗo´ot`Ÿ´o&pW&p'pudŸ'p(p‘\Ÿ(pŊpWŊpĐpudŸĐpķpWķp=qudŸ=qAqWAqCqudŸCqEqWEqfqudŸŌpņpudŸØpãpu`ŸãpįpRįpņpu`ŸØpįpPcn{ou (pĮpu Đpqu =q?qu Cqfqu œnÄnVĩpģpVCqNqVœn˛oW˛oŗoudŸŗo´ot`Ÿ´o&pW&p'pudŸ'p(p‘\Ÿ(pŊpWŊpĐpudŸņpķpWķp=qudŸ=qAqWAqCqudŸCqEqWEqfqudŸĻnÄnVCqNqVĻn ouD oŗouXŸŗo´otTŸ´oŨouDŨo'puXŸ'p(p‘PŸ(pĩpuDņp3quD=qfquDQq\qu`Ÿ\q`qR`qfqu`ŸQq`qPĮn˛oW˛oŗoudŸŗo´ot`Ÿ´o&pW&p'pudŸ'p(p‘\Ÿ(pĩpWņpķpWķp3qudŸ=qAqWAqCqudŸĘnŗou`Ÿŗo´ot\Ÿ´o'pu`Ÿ'p(p‘XŸ(pĩpu`Ÿņp3qu`Ÿ=qCqu`ŸĘnŌnP„ppPŌn„pčˇŸ•pĩpčˇŸņp3qčˇŸ=qCqčˇŸŨn„p-Ÿ•pĩp-Ÿņp3q-Ÿ=qCq-Ÿínou\Ÿo'oP'owou¸woŗou\Ÿŗo´otXŸ´o'pu\Ÿ'p(p‘TŸ(pDpu¸Dp„pu\Ÿ•pĩpu¸ņpqu¸q3qu\Ÿ=q?qu¸?qCqu\Ÿínûnu\Ÿûnŗou`Ÿŗo´ot\Ÿ´o'pu`Ÿ'p(p‘XŸ(p„pu`Ÿ•pĩpu`Ÿņp3qu`Ÿ=qCqu`Ÿûnŗou`Ÿŗo´ot\Ÿ´o'pu`Ÿ'p(p‘XŸ(p„pu`Ÿ•pĩpu`Ÿņp3qu`Ÿ=qCqu`ŸoouVŸooPowouŧ(pDpuŧ•pĩpuŧņpquŧ=q?quŧooQowou@(pDpu@•pĩpu@ņpqu@=q?qu@oouŧooRowoudŸ(pDpudŸ•pĩpudŸņpqudŸ=q?qudŸowoudŸ(pDpudŸ•pĩpudŸņpqudŸ=q?qudŸo'oP'owou¸(pDpu¸•pĩpu¸ņpqu¸=q?qu¸.owoudŸ(pDpudŸ•pĩpudŸ1owouWŸ(pDpuWŸ•pĩpuWŸ1o9oP•pŸpPNowoudŸ(pDpudŸĨpĩpudŸNoQou`ŸQoWoPWowou`Ÿ(pDpu`ŸĨpĩpu`Ÿ^owoudŸ(pDpudŸĨpĩpudŸaowouWŸ(pDpuWŸĨpĩpuWŸaoioPĨp¯pPiowou\Ÿ(pDpu\ŸŒo–ou`ŸÎoØou`Ÿ’o–oudŸÔoØoudŸ’o™oPÔoáoP–o ou\Ÿéođou\Ÿœo oudŸėođoudŸœoŖoPėoųoP oĒouXŸppuXŸĻoĒoudŸppudŸĻo¯oPppP(pDp6ÔŸ(pDpu\ŸOp[pR[pmpu@mp„puŧOpfpu\ŸfplpPlp„pu\Ÿvp„pT­Ÿvp|pu`Ÿ|ppPp„pu`ŸŊpĮpudŸÃpĮpu`ŸÃpĮpPķpqudŸųpquWŸqqRqquWŸųpqPq3qu`Ÿ qquWŸqqRq3quWŸ qqPq3qu\Ÿq$qu`Ÿ$q(qR(q3qu`Ÿq(qP)q3quXŸ/q3qu`Ÿ/q3qP¨sŽsPŽsÂsu°qˆsu´ˆs‰st°‰s“su´Âstu´ttt°q×q0Ÿ×qcruDŒr$suDhsˆsuDˆs‰st@ÂsũsuDũst0Ÿq×q0Ÿ×qnru¸Œr(su¸hsˆsu¸ˆs‰sPÂsũsu¸ũst0Ÿq×q0Ÿ×qesuŦhs‡sW‡sˆsuŦˆs‰st¨‰s“suŦÂsũsuŦũst0ŸŖqĻqpԟĻqėqu#TŸhsnspԟnsˆsu#TŸˆs‰st#TŸũstu#TŸttt#TŸ÷qûqPûqrWrˆsuPˆs‰stL‰s“suPÂsũsuPüqˆsu`Ÿˆs‰st\Ÿ‰s“su`ŸÂsũsu`Ÿ r#r0Ÿ#rMsWÂsũsW rrw ŸrŒruP# ŸŒr’rp Ÿ’rMsuP# ŸÂsũsuP# Ÿ#rĸrVĨrMsVÂsÄsVųsûsV#r•ruTčrMsuT#rJrP ssPssv0r[r1Ÿs6s1Ÿ[rnr0Ÿs6s1ŸnrwrPwr†ruP#,6sGsq,nrĸruP6sGsQGsMsuPtrĸrudŸ6sMsudŸzrĸru_Ÿ6sMsu_Ÿzr†rP6sGsPÄsÚsudŸĘsÚsu_ŸĘsŲsPüq“s0ŸÂsũs0ŸüqrWrˆsuPˆs‰stL‰s“suPÂsũsuPMsˆsu`Ÿˆs‰st\Ÿ‰s“su`ŸVsˆsudŸˆs‰st`Ÿ‰s“sudŸVs^sP‰ssPÚsųsu`ŸāsųsudŸāsīsP'tWtWWtXtu Xt[tt[tytWytztu zt}t‘}tˆtW=t@tugŸ@tItRItXtugŸXt[ttcŸ†tˆtugŸ=tItP=tWtWWtXtu Xt[tt†tˆtW=tVtVVt[tP†tˆtVOtTtPTtVtvVt[tpOtVtVVt[tPtŌt‘ ŌtuWÕw"xV"x%x‘DŸ%x/xVqxˆx‘DŸˆx—xV—xųx‘DŸ­tuWuųx‘ø~ŗtētwētžtPÛtu‘LŸuuPuųx‘˜ķtu‘LŸuuPuųx‘˜˙tÍuWķuãvWãv/x0ŸSxoxWoxųx0ŸvXv0ŸXvmv1Ÿ“vãv0ŸuÍuWķuãvWSxoxWu!u‘DŸ!u7uVu*uPu7uWu1u‘HŸ1u7uP4u7uP7uķu‘ v/x‘ Sxmx‘ oxųx‘ 7uķu‘˜v/x‘˜Sxmx‘˜oxųx‘˜[uģuķąŸ[uģu‘ü~[umu‘ü~#ŸmuruPyuģu‘ yuģu‘ü~yuƒu‘ü~#ŸƒuˆuP’uģu¯ąŸ’uģu‘ü~’u›u‘ü~#Ÿ›u uP­uģu‘ °uģu‘DŸ°uģuPvAvV“AvCvP“Cv„vV““vãvV“vmv‘#Ÿ*vCvō/ĮCvIvvIvLvtLvPvt*vmv‘ Xvmv‘ Xvmv‘˜mv„v‘ yv„v‘DŸyv„vP“vãvËąŸ“vãv‘ü~“vĒv‘ü~#ŸĒv¯vPļvãv‘ ļvãv‘ü~ļvĀv‘ü~#ŸĀvÅvPĪvãvÄÁŸĪvãv‘ü~ĪvØv‘ü~#ŸØvŨvPUxmx‘ [xfx‘DŸfxjxRjxmx‘DŸ[xjxPģuÍuWØuķuWģuķu,Ÿãv/x,Ÿoxųx,ŸÛuâuwâuæuPėv!wW“!w'wP“'w#xW“%x/xW“oxųxW“ėvÉw‘#Ÿ]wŽwÚąŸžwÉwÚąŸ]wŽw‘ü~žwÉw‘ü~]wkw‘ü~#ŸkwpwP w'wōË w'w‘”9wÉw‘” w'w‘˜9wÉw‘˜ w'w‘”PwÉw‘” w'w‘ SwÉw‘ SwXwPŽw¸wPtwŽwwŸžwÉwwŸtwŽw‘ü~žwÉw‘ü~žwÉw‘ü~”wŽwŪŽŸ”w w‘ü~#Ÿ wĨwPÕw/xT­ŸqxųxT­Ÿīw"xV"x%x‘DŸ%x/xVõw/x‘ õwúwP%x,xPúw%x‘˜x%x‘ü~1xSx‘˜?xSx‘ü~sxˆx‘DŸyxx‘@Ÿx…xR…xˆx‘@Ÿyx…xPˆx—xV—xųx‘DŸŊxßx‘ ĀxČx‘@ŸČxĖxRĖxßx‘@ŸĀxĖxPįxīx‘@ŸīxķxRķxųx‘@ŸįxķxPy*y@ÉŸ*yZyW{yäyWōy zW*yŸyuTĄy¯yuT´yßyuTäy˙yuTz!zuT!z"ztP"z@zuTxyžyPžyÂyvŌyäyPōyzP*yZyWz zWHyKyugŸKyTyPTyzugŸ"z@zugŸHyKyPKyzV"z$zVHyZyWlyzufŸlytyPty{ywtŸäyīyPīyōywtŸ'z2zufŸ2z6zR6z@zufŸ'z6zP6z@zwtŸ°…į…1Ÿį…z†V’†n‰V††P†z†uP’†‰uP†z†udŸ’†‰udŸ$†;†VȈ‰˛Ÿ‰l‰˛ŸČˆ‰udŸ‰l‰udŸ‰l‰ûąŸ‰l‰udŸ)‰l‰ūąŸ)‰l‰udŸB‰l‰˛ŸB‰l‰udŸZ†l†udŸņˆ‰udŸ`†l†ucŸ÷ˆ‰ucŸ`†l†P÷ˆ ‰Pt‰‰ucŸ‰ƒ‰Rƒ‰‰ucŸt‰ƒ‰P‰ĉ1ŸÄ‰OŠVgŠFVō‰ö‰Pö‰OŠuTgŠeuTā‰OŠudŸgŠeudŸū‰ŠV Œی˛ŸčŒD˛Ÿ ŒیudŸčŒDudŸčŒDûąŸčŒDudŸDūąŸDudŸD˛ŸDudŸ/ŠAŠudŸÉŒیudŸ5ŠAŠucŸĪŒیucŸ5ŠAŠPΌâŒPLWucŸW[R[eucŸL[P ĒPĒĀu4+Ž5ŽP5Ž7Žu4 7ލŸ<ŽOލŸŽ+ŽÁŸ<ŽOŽÁŸˇzŨzwŸŨzŪzu#@ŸŪzßzt#@Ÿßz{wŸ{{u#@Ÿ{{t#@Ÿ{Š{u#@ŸŋzÎzPßzézPũz{V{Œ{VĪzŌzPŌz×zp|Ÿėz{wğ{{u#DŸ{{t#DŸ{Š{u#DŸėzōzPōz{V{Œ{V{{P{{W{&{P&{™{WZ{„{îĒŸ{{Vˇ{ā{wŸā{á{u#@Ÿá{â{t#@Ÿâ{|wŸ|(|u#@Ÿ(|)|t#@Ÿ)|š|u#@Ÿŋ{Î{Pâ{ņ{P|&|V&|)|p|Ÿ)|œ|VĪ{Õ{PÕ{â{p|Ÿô{|wğ|(|u#DŸ(|)|t#DŸ)|š|u#DŸô{ú{Pú{&|V&|)|p|Ÿ)|œ|V||P|'|W)|6|P6|Š|Wj|”|îĒŸ|&|V&|)|p|ŸÎ|ë|Wė| }Wģ}Č}PŌ}ã}PPŽfŽ‘fŽ—ŽV—ŽœŽv|ŸœŽĨŽV~ŽƒŽVƒŽ‡Žv|Ÿ‡Ž—ŽV—Ž Žv|Ÿ~އޑLŒŽ Ž‘L~އŽPŒŽ›ŽP˙~ PgRP3uĖz34tČz4ŽƒuĖzL‹ ‹uĖzâŸi uĖz*¤̤uĖz˙~ pøŸ!3u34Q!/P/3u#34qgîuĐ}Ÿ0uĐ}Ÿé‚@ƒuĐ}ŸyîuÜ~Ÿ0uÜ~Ÿé‚@ƒuÜ~Ÿy…P ƒ*ƒP…îuÄ}Ÿ0uÄ}Ÿé‚ ƒuÄ}Ÿ0ƒ@ƒuÄ}ŸŽîuÜ~Ÿ0uÜ~Ÿé‚ ƒuÜ~Ÿ0ƒ@ƒuÜ~ŸŽšP0ƒ:ƒPšîu¤}Ÿ0u¤}Ÿé‚ ƒu¤}ŸŖîuÜ~Ÿ0uÜ~Ÿé‚ ƒuÜ~ŸŖ¯PƒƒP¯îu }Ÿ0u }Ÿé‚ƒu }Ÿ¸îuÜ~Ÿ0uÜ~Ÿé‚ƒuÜ~Ÿ¸ÄPƒ ƒPÄîuœ}Ÿ0uœ}Ÿé‚ƒuœ}ŸÍîuÜ~Ÿ0uÜ~Ÿé‚ƒuÜ~ŸÍŲPé‚ú‚PŲîu¸}Ÿ0u¸}ŸâîuÜ~Ÿ0uÜ~ŸâîP"PgîVö€0Vé‚@ƒVgîu˜}Ÿų€ u˜}Ÿ R0u˜}Ÿé‚@ƒu˜}Ÿų€P;žuĐ}Ÿ@ƒXƒuĐ}ŸL‹ ‹uĐ}ŸIžuÜ~Ÿ@ƒXƒuÜ~ŸL‹ ‹uÜ~ŸIUP€‹Š‹PUžuÄ}Ÿ@ƒXƒuÄ}ŸL‹€‹uÄ}Ÿ‹ ‹uÄ}Ÿ^žuÜ~Ÿ@ƒXƒuÜ~ŸL‹€‹uÜ~Ÿ‹ ‹uÜ~Ÿ^jP‹š‹Pjžu¤}Ÿ@ƒXƒu¤}ŸL‹€‹u¤}ŸsžuÜ~Ÿ@ƒXƒuÜ~ŸL‹€‹uÜ~ŸsPp‹z‹Pžu }Ÿ@ƒXƒu }ŸL‹p‹u }ŸˆžuÜ~Ÿ@ƒXƒuÜ~ŸL‹p‹uÜ~Ÿˆ”P`‹j‹P”žuœ}Ÿ@ƒXƒuœ}ŸL‹`‹uœ}ŸžuÜ~Ÿ@ƒXƒuÜ~ŸL‹`‹uÜ~ŸЁPL‹Z‹PЁžu¸}Ÿ@ƒXƒu¸}Ÿ˛žuÜ~Ÿ@ƒXƒuÜ~Ÿ˛žP@ƒJƒP;žVʂé‚V@ƒXƒVL‹ ‹V;žu˜}ŸÍ‚߂u˜}Ÿß‚ã‚Rã‚é‚u˜}Ÿ@ƒXƒu˜}ŸL‹ ‹u˜}ŸÍ‚ã‚PXƒŽƒuĖzXƒŽƒuĖz#ŸrƒŽƒuĖz]„L‹uØz ‹ũ™uØzũ™ū™tÔzū™?uØzHâŸuØzi *¤uØzō¤ŌĻuØz`„L‹u }Ÿ ‹ũ™u }Ÿũ™ū™tœ}Ÿū™?u }ŸHâŸu }Ÿi *¤u }Ÿō¤ŌĻu }Ÿ`„l„P?šIšPl„L‹uĐ}Ÿ ‹ũ™uĐ}Ÿũ™ū™tĖ}Ÿū™?šuĐ}ŸOš?uĐ}ŸHâŸuĐ}Ÿi *¤uĐ}Ÿō¤ŌĻuĐ}Ÿu„L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~ŸOš?uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~Ÿō¤ŌĻuÜ~Ÿu„„POšYšP„L‹uÄ}Ÿ ‹ũ™uÄ}Ÿũ™ū™tĀ}Ÿū™?šuÄ}Ÿ_š?uÄ}ŸHâŸuÄ}Ÿi *¤uÄ}Ÿō¤ŌĻuÄ}ŸŠ„L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿ_š?uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~Ÿō¤ŌĻuÜ~ŸŠ„–„P_šišP–„L‹u¸}Ÿ ‹ũ™u¸}Ÿũ™ū™t´}Ÿū™?šu¸}Ÿoš?u¸}ŸHâŸu¸}Ÿi *¤u¸}Ÿō¤ŌĻu¸}ŸŸ„L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿoš?uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~Ÿō¤ŌĻuÜ~ŸŸ„Ģ„PošyšPĢ„L‹u°}Ÿ ‹ũ™u°}Ÿũ™ū™tŦ}Ÿū™?šu°}Ÿš?u°}ŸHâŸu°}Ÿi *¤u°}Ÿō¤ŌĻu°}Ÿ´„L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿš?uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~Ÿō¤ŌĻuÜ~Ÿ´„Ā„Pš‰šPĀ„L‹u¤}Ÿ ‹ũ™u¤}Ÿũ™ū™t }Ÿū™?šu¤}Ÿš?u¤}ŸHâŸu¤}Ÿi *¤u¤}Ÿō¤ŌĻu¤}ŸÉ„L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿš?uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~Ÿō¤ŌĻuÜ~ŸÉ„ՄPš™šP.†‚‡W‚‡L‹u¨{Ÿ ‹ũ™u¨{Ÿũ™ū™t¤{Ÿū™?šu¨{ŸŸšo›Wo›#u¨{ŸHâŸu¨{Ÿi *¤u¨{ŸļĻËĻWËĻŌĻu¨{Ÿ1†L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~ŸŸš#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~Ÿ1†=†PŸšКP=†L‹u¤{Ÿ ‹ũ™u¤{Ÿũ™ū™t {Ÿū™?šu¤{Ÿ¯š#u¤{ŸHâŸu¤{Ÿi *¤u¤{ŸļĻŌĻu¤{ŸF†L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿ¯š#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~ŸF†R†P¯šššPR†L‹uœ{Ÿ ‹ũ™uœ{Ÿũ™ū™t˜{Ÿū™?šuœ{Ÿŋš#uœ{ŸHâŸuœ{Ÿi *¤uœ{ŸļĻŌĻuœ{Ÿ[†L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿŋš#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~Ÿ[†g†PŋšɚPg†L‹u˜{Ÿ ‹ũ™u˜{Ÿũ™ū™t”{Ÿū™?šu˜{ŸĪš#u˜{ŸHâŸu˜{Ÿi *¤u˜{ŸļĻŌĻu˜{Ÿp†L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~ŸĪš#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~Ÿp†|†PΚؚP|†L‹u{Ÿ ‹ũ™u{Ÿũ™ū™tŒ{Ÿū™?šu{Ÿßš#u{ŸHâŸu{Ÿi *¤u{ŸļĻŌĻu{Ÿ…†L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿßš#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~Ÿ…†‘†PߚéšP‘†L‹uŒ{Ÿ ‹ũ™uŒ{Ÿũ™ū™tˆ{Ÿū™?šuŒ{Ÿīš#uŒ{ŸHâŸuŒ{Ÿi *¤uŒ{ŸļĻŌĻuŒ{Ÿš†L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿīš#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~Ÿš†φPīšųšPφL‹uˆ{Ÿ ‹ũ™uˆ{Ÿũ™ū™t„{Ÿū™?šuˆ{Ÿ˙š#uˆ{ŸHâŸuˆ{Ÿi *¤uˆ{ŸļĻŌĻuˆ{Ÿ¯†L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿ˙š#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~Ÿ¯†ģ†P˙š ›Pģ†L‹u„{Ÿ ‹ũ™u„{Ÿũ™ū™t€{Ÿū™?šu„{Ÿ›#u„{ŸHâŸu„{Ÿi *¤u„{ŸļĻŌĻu„{ŸÄ†L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿ›#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~ŸÄ†ІP››PІL‹u€{Ÿ ‹ũ™u€{Ÿũ™ū™tüzŸū™?šu€{Ÿ›#u€{ŸHâŸu€{Ÿi *¤u€{ŸļĻŌĻu€{ŸŲ†L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿ›#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~ŸŲ†å†P›)›På†L‹uüzŸ ‹ũ™uüzŸũ™ū™tøzŸū™?šuüzŸ/›#uüzŸHâŸuüzŸi *¤uüzŸļĻŌĻuüzŸî†L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿ/›#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~Ÿî†ú†P/›9›Pú†L‹u”{Ÿ ‹ũ™u”{Ÿũ™ū™t{Ÿū™?šu”{Ÿ?›#u”{ŸHâŸu”{Ÿi *¤u”{ŸļĻŌĻu”{Ÿ‡L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿ?›#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~Ÿ‡‡P?›I›P‡L‹u {Ÿ ‹ũ™u {Ÿũ™ū™tœ{Ÿū™?šu {ŸO›#u {ŸHâŸu {Ÿi *¤u {ŸļĻŌĻu {Ÿ‡L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~ŸO›#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~Ÿ‡$‡PO›Y›P$‡L‹uŦ{Ÿ ‹ũ™uŦ{Ÿũ™ū™t¨{Ÿū™?šuŦ{Ÿ_›#uŦ{ŸHâŸuŦ{Ÿi *¤uŦ{ŸļĻŌĻuŦ{Ÿ-‡L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿ_›#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~Ÿ-‡9‡P_›i›P9‡L‹u¸}Ÿ ‹ũ™u¸}Ÿũ™ū™t´}Ÿū™?šu¸}Ÿo›#u¸}ŸHâŸu¸}Ÿi *¤u¸}ŸļĻŌĻu¸}Ÿr‡L‹uÜ~Ÿ ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿo›#uÜ~ŸHâŸuÜ~Ÿi *¤uÜ~ŸļĻŌĻuÜ~Ÿr‡L‹u¸}Ÿ ‹ũ™u¸}Ÿũ™ū™t´}Ÿū™?šu¸}Ÿo›#u¸}ŸHâŸu¸}Ÿi *¤u¸}ŸļĻŌĻu¸}Ÿ¸ĻËĻu¸}ŸžĻËĻ uĀ}u¸}4ŸžĻËĻP†‡χPχڇV ‹‹VHMV†‡L‹uÄ}Ÿ ‹ũ™uÄ}Ÿũ™ū™tĀ}Ÿū™?šuÄ}Ÿo›ɜuÄ}ŸHâŸuÄ}Ÿi *¤uÄ}ŸŠ‡ڇV ‹‹VHMVЇģ‡Pģ‡Çw2&Ÿ ‹ŗ‹Pŗ‹‹w2&ŸHLPLMw2&ŸŠ‡L‹uÄ}Ÿ ‹ũ™uÄ}Ÿũ™ū™tĀ}Ÿū™?šuÄ}Ÿo›ɜuÄ}ŸHâŸuÄ}Ÿi *¤uÄ}Ÿ ‹ŗ‹Pŗ‹‹w2&ŸHLPLMw2&Ÿ ‹‹0ŸHM0Ÿā‡L‹uÄ}ŸÂ‹ũ™uÄ}Ÿũ™ū™tĀ}Ÿū™?šuÄ}Ÿo›ɜuÄ}ŸMâŸuÄ}Ÿi *¤uÄ}Ÿā‡L‹1ŸÂ‹?š1Ÿo›ɜ1ŸMâŸ1Ÿi *¤1Ÿę‡ˆV“țį›V“?žAžV“ꇂˆWțį›W?žežWƟâŸWę‡ˆVˆˆv|ŸČ›į›V?žAžVę‡ˆWˆ‚ˆw|ŸČ›į›W?žežWƟâŸw|ŸŅ›į›W?žežWFžežuÄ}ŸLžXž uĖ}uÄ}4ŸLž\žPTžXž uĖ}uÄ}4ŸTž\žP!ˆ‚ˆuÄ}Ÿˇ›țuÄ}ŸĘŸâŸuÄ}Ÿ!ˆ‚ˆu¸}Ÿˇ›țu¸}ŸĘŸâŸu¸}Ÿ!ˆzˆV“zˆ‚ˆV“Ɵ՟V“7ˆEˆvEˆIˆtPˆ‚ˆ1ŸĘŸâŸ1Ÿwˆ‚ˆōlüˆ—ˆuôz—ˆ›ˆtˆL‹u¸}ŸÂ‹ũ™u¸}Ÿũ™ū™t´}Ÿū™?šu¸}Ÿo›Ģ›u¸}Ÿį›ɜu¸}ŸM?žu¸}ŸežƟu¸}Ÿi *¤u¸}ŸĸˆL‹1ŸÂ‹?š1Ÿo›Ģ›1Ÿį›ɜ1ŸM?ž1ŸežƟ1Ÿi *¤1ŸÉˆΈuøzΈ͈tɈL‹u¸}ŸÂ‹ũ™u¸}Ÿũ™ū™t´}Ÿū™?šu¸}Ÿo›Ģ›u¸}Ÿį›ɜu¸}ŸM?žu¸}ŸežƟu¸}Ÿi *¤u¸}ŸÚˆL‹1ŸÂ‹?š1Ÿo›Ģ›1Ÿį›ɜ1ŸM?ž1ŸežƟ1Ÿi *¤1Ÿ!‰‰V‰L‹u°{ŸÂ‹ũ™u°{Ÿũ™ū™tŦ{Ÿū™?šu°{Ÿo›››u°{Ÿ››Ģ›Vį›ɜu°{ŸM?žu°{ŸežŖŸu°{Ÿi *¤u°{Ÿ$‰L‹uÜ~ŸÂ‹ũ™uÜ~Ÿũ™ū™tØ~Ÿū™?šuÜ~Ÿo›Ģ›uÜ~Ÿį›ɜuÜ~ŸM?žuÜ~ŸežŖŸuÜ~Ÿi *¤uÜ~Ÿ$‰0‰P››Ĩ›P?‰s‰u¨}?‰o‰u¸}b‰L‹ ˙ŸÂ‹đ ˙ŸđöPöũ™uĀzũ™ū™tŧzū™ š ˙Ÿ ššP+š?šuĀzo›‹› ˙Ÿ‹›››uĀzį›ɜuĀzM(ž ˙Ÿ8ž?žuĀzežŖŸ ˙Ÿi ­  ˙Ÿ­ ŖŖuĀzŖŖ*¤ ˙Ÿ@ŒfŒtˇū™štˇŗ‰ŋ‰PšŠL‹u¤}ŸÂ‹@Œu¤}ŸŠL‹u€}ŸÂ‹@Œu€}ŸŠЊP0Œ:ŒPЊL‹u }ŸÂ‹0Œu }Ÿ˛ŠL‹u¤}ŸÂ‹0Œu¤}Ÿ˛ŠžŠP Œ*ŒPžŠL‹uœ}ŸÂ‹ Œuœ}ŸĮŠL‹u¤}ŸÂ‹ Œu¤}ŸĮŠ͊PŒŒP͊L‹u˜}ŸÂ‹Œu˜}ŸÜŠL‹u¤}ŸÂ‹Œu¤}ŸÜŠčŠPŒ ŒPčŠL‹uŒ}ŸÂ‹ŒuŒ}ŸņŠL‹u¤}ŸÂ‹Œu¤}ŸņŠũŠPđ‹ú‹PũŠL‹uˆ}ŸÂ‹đ‹uˆ}Ÿ‹L‹u¤}ŸÂ‹đ‹u¤}Ÿ‹‹P؋ę‹P‹L‹u„}ŸÂ‹؋u„}Ÿ‹L‹u¤}ŸÂ‹؋u¤}Ÿ‹'‹P‹Ō‹P'‹L‹u”}Ÿ0‹L‹uÄ}Ÿ0‹F‹POku¤}ŸXfu€}ŸfjRjku€}ŸXjPk‡u }Ÿt‚u€}Ÿ‚†R†‡u€}Ÿt†P‡Ŗuœ}Ÿžu€}ŸžĸRĸŖu€}ŸĸPŖŋu˜}ŸŦēu€}ŸēžRžŋu€}ŸŦžPŋ۝uŒ}ŸČ֝u€}ŸÖڝRڝ۝u€}ŸČڝP۝÷uˆ}Ÿäōu€}ŸōöRö÷u€}ŸäöP÷žu„}Ÿžžu€}ŸžžRžžu€}ŸžžPž(žu”}Ÿž(žuÄ}Ÿž(žP€ŒŒPŒ“uÜzežŖŸuÜzÁĸ*¤uÜzœŒŸŒPŸŒ“uÄzežŖŸuÄzÁĸ*¤uÄz Ž“@ŸežÁž@ŸÁĸ*¤@ŸÄŽʎPʎđuĀzežÁžuĀzŖŖ*¤uĀzšŒ>uü|Ÿ>Ž Žuü|ŸÉŒ>u¤}Ÿ>Ž Žu¤}ŸÉŒՌP€ŽŠŽPՌ>uø|Ÿ>Ž€Žuø|ŸŽ Žuø|ŸŪŒ>u¤}Ÿ>Ž€Žu¤}ŸŽ Žu¤}ŸŪŒęŒPŽšŽPęŒ>uė|Ÿ>Ž€Žuė|ŸķŒ>u¤}Ÿ>Ž€Žu¤}ŸķŒ˙ŒPpŽzŽP˙Œ>uč|Ÿ>ŽpŽuč|Ÿ>u¤}Ÿ>ŽpŽu¤}ŸP`ŽjŽP>uä|Ÿ>Ž`Žuä|Ÿ>u¤}Ÿ>Ž`Žu¤}Ÿ)PPŽZŽP)>uô|Ÿ>ŽPŽuô|Ÿ2>uÄ}Ÿ>ŽPŽuÄ}Ÿ2>P>ŽJŽPšŒ>VŽ ŽVšŒ>u¤}Ÿ"Ž Žu¤}Ÿ"Ž8ŽPՎVuÜ|ŸhАuÜ|ŸáŽVu¤}ŸhАu¤}ŸáŽíŽP°ēPíŽVuØ|Ÿh°uØ|ŸĀАuØ|ŸöŽVu¤}Ÿh°u¤}ŸĀАu¤}ŸöŽPʐPVuĖ|Ÿh°uĖ|Ÿ Vu¤}Ÿh°u¤}Ÿ P ǐPVuČ|Ÿh uČ|Ÿ Vu¤}Ÿh u¤}Ÿ ,PšP,VuÄ|ŸhuÄ|Ÿ5Vu¤}Ÿhu¤}Ÿ5AP€АPAVuÔ|Ÿh€uÔ|ŸJVuÄ}Ÿh€uÄ}ŸJVPhzPՎVVIАVՎVu¤}ŸLАu¤}ŸLbP‘†‘uŧ|Ÿ’“uŧ|Ÿ‘†‘u¤}Ÿ’“u¤}Ÿ‘‘Pā’ę’P‘†‘u¸|Ÿ’ā’u¸|Ÿđ’“u¸|Ÿ&‘†‘u¤}Ÿ’ā’u¤}Ÿđ’“u¤}Ÿ&‘2‘Pđ’ú’P2‘†‘uŦ|Ÿ’ā’uŦ|Ÿ;‘†‘u¤}Ÿ’ā’u¤}Ÿ;‘G‘PВڒPG‘†‘u¨|Ÿ’Вu¨|ŸP‘†‘u¤}Ÿ’Вu¤}ŸP‘\‘PĀ’ʒP\‘†‘u¤|Ÿ’Ā’u¤|Ÿe‘†‘u¤}Ÿ’Ā’u¤}Ÿe‘q‘P°’ē’Pq‘†‘u´|Ÿ’°’u´|Ÿz‘†‘uÄ}Ÿ’°’uÄ}Ÿz‘†‘P’Ē’P‘†‘V~’“V‘†‘u¤}Ÿ’“u¤}Ÿ’—’PgžƒžuČ|Ÿpžƒžu¤}Ÿpž‚žPƒžŸžuÄ|ŸŒžŸžu¤}ŸŒžžžPŸžšžuÔ|Ÿ¨žšžuÄ}Ÿ¨žšžPÞߞu€}ŸĖžߞu¤}ŸĖžŪžPߞûžuü|Ÿčžûžu¤}ŸčžúžPûžŸuø|ŸŸŸu¤}ŸŸŸPŸ3Ÿuė|Ÿ Ÿ3Ÿu¤}Ÿ Ÿ2ŸP3ŸOŸuč|Ÿ<ŸOŸu¤}Ÿ<ŸNŸPOŸkŸuä|ŸXŸkŸu¤}ŸXŸjŸPkŸ…Ÿuô|ŸtŸ…ŸuÄ}ŸtŸ…ŸPÃĸßĸuĀ|ŸĖĸßĸu¤}ŸĖĸŪĸPßĸûĸuŧ|Ÿčĸûĸu¤}ŸčĸúĸPûĸŖu¸|ŸŖŖu¤}ŸŖŖPŖ3ŖuŦ|Ÿ Ŗ3Ŗu¤}Ÿ Ŗ2ŖP3ŖOŖu¨|Ÿ<ŖOŖu¤}Ÿ<ŖNŖPOŖkŖu¤|ŸXŖkŖu¤}ŸXŖjŖPkŖ…Ŗu´|ŸtŖ…ŖuÄ}ŸtŖ…ŖPĨŖÁŖuā|ŸŽŖÁŖu¤}ŸŽŖĀŖPÁŖŨŖuÜ|ŸĘŖŨŖu¤}ŸĘŖÜŖPŨŖųŖuØ|ŸæŖųŖu¤}ŸæŖøŖPųŖ¤uĖ|Ÿ¤¤u¤}Ÿ¤¤P/“;“P”0•W”0•u¤}Ÿ”%”Pŧ”ʔP%”ŧ”uœ|ŸĐ”0•uœ|Ÿ.”ŧ”u¤}ŸĐ”0•u¤}Ÿ.”:”P •*•P:”ŧ”u˜|ŸĐ” •u˜|ŸC”ŧ”u¤}ŸĐ” •u¤}ŸC”O”P••PO”ŧ”u”|ŸĐ”•u”|ŸX”ŧ”u¤}ŸĐ”•u¤}ŸX”d”P• •Pd”ŧ”uˆ|ŸĐ”•uˆ|Ÿm”ŧ”u¤}ŸĐ”•u¤}Ÿm”u”Pí”ú”Pu”ŧ”u„|ŸĐ”í”u„|Ÿ~”ŧ”u¤}ŸĐ”í”u¤}Ÿ~”†”PŨ”ę”P†”ŧ”u€|ŸĐ”Ũ”u€|Ÿ”ŧ”u¤}ŸĐ”Ũ”u¤}Ÿ”—”PДڔP—”ŧ”u|Ÿ ”ŧ”uÄ}Ÿ ”ļ”PģĄץu |ŸÄĄץu¤}ŸÄĄÖĄPץķĄuœ|ŸāĄķĄu¤}ŸāĄōĄPķĄĸu˜|ŸüĄĸu¤}ŸüĄĸPĸ+ĸu”|Ÿĸ+ĸu¤}Ÿĸ*ĸP+ĸGĸuˆ|Ÿ4ĸGĸu¤}Ÿ4ĸFĸPGĸcĸu„|ŸPĸcĸu¤}ŸPĸbĸPcĸĸu€|Ÿlĸĸu¤}Ÿlĸ~ĸPĸ™ĸu|Ÿˆĸ™ĸuÄ}Ÿˆĸ™ĸPS•֕uø{ŸÖ–@—uø{Ÿa•֕u¤}ŸÖ–@—u¤}Ÿa•m•P —*—Pm•֕uô{ŸÖ– —uô{Ÿ0—@—uô{Ÿv•֕u¤}ŸÖ– —u¤}Ÿ0—@—u¤}Ÿv•‚•P0—:—P‚•֕uč{ŸÖ– —uč{Ÿ‹•֕u¤}ŸÖ– —u¤}Ÿ‹•—•P——P—•֕uä{ŸÖ–—uä{Ÿ •֕u¤}ŸÖ–—u¤}Ÿ •Ŧ•P— —PŦ•֕uā{ŸÖ–—uā{Ÿĩ•֕u¤}ŸÖ–—u¤}Ÿĩ•Á•Pđ–ú–PÁ•֕uđ{ŸÖ–đ–uđ{ŸĘ•֕uÄ}ŸÖ–đ–uÄ}ŸĘ•֕P֖ę–PS•֕Vˇ–@—VS•֕u¤}Ÿē–@—u¤}Ÿē–ЖPĄ›Ąuđ{ŸŠĄ›ĄuÄ}ŸŠĄ›ĄPŲ õ uü{Ÿâ õ u¤}Ÿâ ô Põ Ąuø{Ÿū Ąu¤}Ÿū ĄPĄ-Ąuô{ŸĄ-Ąu¤}ŸĄ,ĄP-ĄIĄuč{Ÿ6ĄIĄu¤}Ÿ6ĄHĄPIĄeĄuä{ŸRĄeĄu¤}ŸRĄdĄPeĄĄuā{ŸnĄĄu¤}ŸnĄ€ĄPn—w—PO˜p™WR˜p™uĐ}ŸR˜^˜Pų˜ ™P^˜ų˜uĖ{Ÿ™p™uĖ{Ÿg˜ų˜uĐ}Ÿ™p™uĐ}Ÿg˜s˜P`™j™Ps˜ų˜uČ{Ÿ™`™uČ{Ÿ|˜ų˜uĐ}Ÿ™`™uĐ}Ÿ|˜ˆ˜PP™Z™Pˆ˜ų˜uÄ{Ÿ™P™uÄ{Ÿ‘˜ų˜uĐ}Ÿ™P™uĐ}Ÿ‘˜˜P@™J™P˜ų˜uŧ{Ÿ™@™uŧ{ŸĻ˜ų˜uĐ}Ÿ™@™uĐ}ŸĻ˜˛˜P-™:™P˛˜ų˜u¸{Ÿ™-™u¸{Ÿģ˜ų˜uĐ}Ÿ™-™uĐ}Ÿģ˜ØP™*™PØų˜u´{Ÿ™™u´{ŸĖ˜ų˜uĐ}Ÿ™™uĐ}ŸĖ˜ԘP™™PԘų˜uĀ{ŸŨ˜ų˜uĐ}ŸŨ˜ķ˜P雜uĐ{Ÿō›œuĐ}Ÿō›œPœ!œuĖ{Ÿœ!œuĐ}Ÿœ œP!œ=œuČ{Ÿ*œ=œuĐ}Ÿ*œ<œP=œYœuÄ{ŸFœYœuĐ}ŸFœXœPYœuœuŧ{ŸbœuœuĐ}ŸbœtœPuœ‘œu¸{Ÿ~œ‘œuĐ}Ÿ~œœP‘œ­œu´{Ÿšœ­œuĐ}ŸšœŦœP­œɜuĀ{ŸļœɜuĐ}ŸļœȜPp™œ™u…™œ™u…™œ™u¨}’™ũ™u¸}Ÿũ™ū™t´}Ÿ+š?šu¸}Ÿ‹›››u¸}Ÿ’™¨™V“¨™­™v|Ÿ“­™û™V“+š?šV“‹›››V“’™ū™ō5+š?šō5‹›››ō5’™ž™u¸}Ÿ’™ž™uŧ}Ÿ­™ž™ō5ž™ũ™u¸}Ÿũ™ū™t´}Ÿ+š?šu¸}Ÿ‹›››u¸}Ÿž™ƙ uĀ}u¸}4Ÿž™ʙP™ƙ uĀ}u¸}4ŸÂ™ʙP’™ū™1Ÿ+š?š1Ÿ‹›››1Ÿ’™œ™uΙũ™uøzŸũ™ū™tôzŸ+š?šuøzŸ‹›››uøzŸ×™ũ™uÜ~Ÿũ™ū™tØ~Ÿ+š?šuÜ~Ÿ‹›››uÜ~Ÿ×™ã™P‹›•›Pã™ũ™uôzŸũ™ū™tđzŸ+š?šuôzŸė™ũ™uÜ~Ÿũ™ū™tØ~Ÿ+š?šuÜ~Ÿė™ö™P+š:šPɜûœu¸}ŸĪœáœW“áœæœw|Ÿ“æœûœW“ɜûœōŪ7Μ÷œu¸}ŸĪœ÷œuŧ}Ÿæœ÷œōŪ7÷œûœu¸}Ÿ÷œûœ uĀ}u¸}4Ÿ÷œûœPûœP#uøzŸ#uŦ{Ÿ"P#?uôzŸ,:uīzŸ:>R>?uīzŸ,>PĨŸƟu°{ŸŽŸƟuÜ~ŸŽŸğPäŸ  u¸}ŸíŸ˙Ÿu˜}Ÿ˙Ÿ R   u˜}ŸíŸ P  ) uœ}Ÿ " u˜}Ÿ" & R& ) u˜}Ÿ & P+ I u }Ÿ4 B u˜}ŸB F RF I u˜}Ÿ4 F PK i u¤}ŸT b u˜}Ÿb f Rf i u˜}ŸT f P,¤Q¤uÄ}Ÿ5¤G¤u˜}ŸG¤K¤RK¤Q¤u˜}Ÿ5¤K¤PS¤q¤uĐ}Ÿ\¤j¤u˜}Ÿj¤n¤Rn¤q¤u˜}Ÿ\¤n¤Ps¤‘¤uÜ~Ÿ|¤Фu˜}ŸŠ¤ޤRޤ‘¤u˜}Ÿ|¤ޤP­¤Ō¤u¤}Ÿļ¤Ȥu }ŸČ¤ˤRˤŌ¤u }Ÿļ¤ˤPÔ¤ō¤u°}ŸŨ¤ë¤u }Ÿë¤ī¤Rī¤ō¤u }ŸŨ¤ī¤Pô¤Ĩu„{Ÿũ¤ĨuÜ~Ÿũ¤ĨPĨ,Ĩu€{ŸĨ,ĨuÜ~ŸĨ+ĨP,ĨHĨuüzŸ5ĨHĨuÜ~Ÿ5ĨGĨPHĨdĨu”{ŸQĨdĨuÜ~ŸQĨcĨPdĨ€Ĩu {ŸmĨ€ĨuÜ~ŸmĨĨP€ĨĨĨuŦ{Ÿ‰ĨĨĨuÜ~Ÿ‰ĨŸĨP§ĨĖĨuˆ{Ÿ°ĨĖĨuÜ~Ÿ°ĨÆĨPÎĨėĨuŒ{Ÿ×ĨėĨuÜ~Ÿ×ĨéĨPîĨ Ļu{Ÿ÷Ĩ ĻuÜ~Ÿ÷Ĩ ĻPĻ,Ļu˜{ŸĻ,ĻuÜ~ŸĻ)ĻP.ĻLĻuœ{Ÿ7ĻLĻuÜ~Ÿ7ĻIĻPNĻlĻu¤{ŸWĻlĻuÜ~ŸWĻiĻPnĻŒĻu¨{ŸwĻŒĻuÜ~ŸwωĻPÔĻųĻu¸}ŸŨĻīĻu }ŸīĻķĻRķĻųĻu }ŸŨĻķĻPûϧuÄ}Ÿ§§u }Ÿ§§R§§u }Ÿ§§P§9§uĐ}Ÿ$§2§u }Ÿ2§6§R6§9§u }Ÿ$§6§PD§R§u }ŸR§V§RV§Y§u }ŸD§V§P`§…§R…§÷§V÷§ú§ķRŸú§%¨V%¨r¨ķRŸr¨¨V¨æ¨ķRŸæ¨eŠVeŠĻŠķRŸĻŠĢŠVĢŠšŠķRŸšŠģŠVģŠõŠķRŸõŠ÷ŠV÷ŠĒķRŸĒĒVĒRĒķRŸy§…§R…§÷§V÷§ú§ķRŸú§%¨V%¨r¨ķRŸr¨¨V¨æ¨ķRŸæ¨eŠVeŠĻŠķRŸĻŠĢŠVĢŠšŠķRŸšŠģŠVģŠõŠķRŸõŠ÷ŠV÷ŠĒķRŸĒĒVĒRĒķRŸ‘§a¨,˛Ÿæ¨šŠ,˛ŸŲŠõŠ,˛Ÿ÷ŠĒ,˛Ÿ:ĒFĒ,˛Ÿ‘§÷§V÷§ú§ķRŸú§%¨V%¨a¨ķRŸæ¨eŠVeŠĻŠķRŸĻŠĢŠVĢŠšŠķRŸŲŠõŠķRŸ÷ŠĒķRŸĒĒVĒĒķRŸ:ĒFĒķRŸ¨§ú§‡˛Ÿæ¨šŠ‡˛Ÿ÷ŠĒ‡˛Ÿ¨§÷§V÷§ú§ķRŸæ¨eŠVeŠĻŠķRŸĻŠĢŠVĢŠšŠķRŸ÷ŠĒķRŸĒĒVĒĒķRŸØ§ų§uPų§ú§Pú§a¨xĻŸŲŠõŠxĻŸ:ĒFĒxĻŸú§a¨ĻŸŲŠõŠĻŸ:ĒFĒĻŸú§a¨uPŲŠõŠuP:ĒFĒuP¨a¨ĻŸŲŠõŠĻŸ:ĒFĒĻŸ¨a¨xĻŸŲŠõŠxĻŸ:ĒFĒxĻŸ¨a¨uPŲŠõŠuP:ĒFĒuP¨a¨6ŸŲŠõŠ6Ÿ:ĒFĒ6Ÿ¨a¨0ŸŲŠõŠ0Ÿ:ĒFĒ0Ÿ1¨a¨uPŲŠõŠuP:ĒFĒuP1¨@¨V@¨a¨uLŲŠõŠuL:ĒFĒuL1¨a¨ĻŸŲŠõŠĻŸ:ĒFĒĻŸ1¨a¨xĻŸŲŠõŠxĻŸ:ĒFĒxĻŸ1¨a¨1ŸŲŠõŠ1Ÿ:ĒFĒ1Ÿ1¨@¨xĻŸ@¨a¨WŲŠõŠW:ĒFĒW1¨a¨VŲŠõŠV:Ē<ĒV@¨Y¨WY¨a¨w|ŸŲŠõŠW:ĒFĒW@¨\¨V\¨a¨v|ŸŲŠõŠV:Ē<ĒVâŠõŠV:Ē<ĒVâŠõŠuL:ĒFĒuL?ŠĻŠ`ĻŸ÷ŠĒ`ĻŸ?ŠĻŠxĻŸ÷ŠĒxĻŸ?ŠĻŠuP÷ŠĒuPĒĒWĒĒuPZŠĻŠxĻŸ÷ŠĒxĻŸZŠĻŠ`ĻŸ÷ŠĒ`ĻŸZŠĻŠuP÷ŠĒuPĒĒWĒĒuPZŠĻŠ6Ÿ÷ŠĒ6ŸZŠĻŠ0Ÿ÷ŠĒ0ŸqŠĻŠuP÷ŠĒuPĒĒuPqŠ€ŠV€ŠĻŠuL÷ŠĒuLĒĒuLqŠĻŠxĻŸ÷ŠĒxĻŸĒĒxĻŸqŠĻŠ`ĻŸ÷ŠĒ`ĻŸĒĒ`ĻŸqŠĻŠ1Ÿ÷ŠĒ1ŸĒĒ1ŸqŠ€Š`ĻŸ€ŠĻŠW÷ŠĒWqŠĻŠV÷ŠĒVĒĒV€Š™ŠW™ŠĻŠw|Ÿ÷ŠĒW€ŠœŠVœŠĻŠv|Ÿ÷ŠĒVĒĒVĒĒVĒĒVĒĒuLĒĒuLģŠŲŠuPĀŠČŠuP#uP4ŸĀŠĖŠPÄŠČŠuP#uP4ŸÄŠĖŠPr¨æ¨ ĻŸõŠ÷Š ĻŸĒ:Ē ĻŸFĒRĒ ĻŸr¨æ¨ĀĻŸõŠ÷ŠĀĻŸĒ:ĒĀĻŸFĒRĒĀĻŸr¨æ¨uPõŠ÷ŠWĒ:ĒuPFĒRĒuP’¨æ¨ĀĻŸõŠ÷ŠĀĻŸĒ:ĒĀĻŸFĒRĒĀĻŸ’¨æ¨ ĻŸõŠ÷Š ĻŸĒ:Ē ĻŸFĒRĒ ĻŸ’¨æ¨uPõŠ÷ŠWĒ:ĒuPFĒRĒuP’¨æ¨8ŸõŠ÷Š8ŸĒ:Ē8ŸFĒRĒ8Ÿ’¨æ¨0ŸõŠ÷Š0ŸĒ:Ē0ŸFĒRĒ0ŸŠ¨æ¨uPĒ:ĒuPFĒRĒuPЍ¸¨V¸¨æ¨uLĒ:ĒuLFĒRĒuLЍæ¨ĀĻŸĒ:ĒĀĻŸFĒRĒĀĻŸŠ¨æ¨ ĻŸĒ:Ē ĻŸFĒRĒ ĻŸŠ¨æ¨1ŸĒ:Ē1ŸFĒRĒ1ŸŠ¨¸¨ ĻŸ¸¨æ¨WĒ(ĒWЍæ¨VĒ:ĒVFĒHĒV¸¨Ų¨WŲ¨æ¨w|ŸĒ(ĒW¸¨ܨVܨæ¨v|ŸĒ:ĒVFĒHĒV'Ē:ĒVFĒHĒV'Ē:ĒuLFĒRĒuL%Š?ŠV%Š.ŠP„ĒėĢWėĢBŦu\ŸBŦCŦtXŸCŦ’ŦWĒoĢu€Ŧ†ŦuĒ’ĒP“’ĒžĒR“žĒÔĒu@“„ĒžĒw“âĒdĢP߀Ŧ’ŦPßųĒdĢO˛Ÿ ĢdĢu&ĢdĢZ˛Ÿ&Ģ1ĢR1ĢdĢuŧ8ĢdĢu OĢdĢx˛ŸOĢWĢPdĢoĢuoĢpĢtpĢwĢt€ĢSŦĒŽŸfŦ€ŦĒŽŸ€ĢƒĢu†ĢŠĢt§ĢSŦβŸ§ĢīĢVCŦSŦVļĢûĢu@ûĢBŦuXŸBŦCŦtTŸCŦSŦu@ÉĢSŦK°ŸÉĢŅĢPŪĢûĢu@ûĢBŦuXŸBŦCŦtTŸCŦSŦu@áĢBŦuTŸBŦCŦtPŸCŦSŦuTŸáĢéĢPCŦMŦPéĢBŦu\ŸBŦCŦtXŸīĢBŦu\ŸBŦCŦtXŸīĢ+ŦWīĢûĢVīĢŦVŦ#Ŧv|Ÿ#Ŧ@ŦVûĢŦVŦŦv|ŸŦŦVŦ%Ŧv|ŸûĢŦuXŸ Ŧ+ŦuXŸûĢŦP ŦŦP+ŦBŦu\ŸBŦCŦtXŸ+Ŧ3Ŧ udu\4Ÿ+ŦAŦW/Ŧ3Ŧ udu\4Ÿ/Ŧ;ŦWhŦ€ŦuXŸnŦyŦuTŸyŦ}ŦR}Ŧ€ŦuTŸnŦ}ŦPĀŦÃŦPÃŦ}˛u}˛~˛tŒ~˛¯˛u¯˛°˛tŒ°˛ŗĩuĩ¯Ô¯0ŸÔ¯Ļąu€ŠąÂąPÂą}˛u€}˛~˛tü~~˛¯˛u€¯˛°˛tü~b´ ĩu€ŖŦí­u°˛Ų˛u„ŗ¤ŗuāŗ´u1´b´u5ĩBĩuQ­–­V–­}˛u Ÿ}˛~˛tœŸ~˛¯˛u Ÿ¯˛°˛tœŸ°˛Ų˛V؞źu Ÿāŗ´u Ÿ´5´u Ÿb´5ĩu ŸIĩŗĩu ŸT­}˛uđ~}˛~˛tė~~˛¯˛uđ~¯˛°˛tė~°˛Åŗuđ~āŗ´uđ~´5´uđ~b´5ĩuđ~Iĩŗĩuđ~T­_­P_­j­v<Ÿ°˛ē˛P\­j­uŒģ˛ɲu¤Ÿb­j­uđ~Á˛ɲudŸb­j­PÁ˛͞Pj­í­u„ŗ¤ŗuāŗ´u1´5´uj­í­u# Ÿ„ŗ¤ŗu# Ÿāŗ´u# Ÿ1´5´u# Ÿt­v­Pv­€­u# ž­×­V„ŗ¤ŗVÁ­×­udŸ„ŗ¤ŗudŸÁ­É­P„ŗŽŗPÉ­×­uŦŸ”ŗ¤ŗuŦŸĪ­×­udŸ”ŗ¤ŗudŸĪ­×­P”ŗžŗP×­í­u×­í­u#Ÿá­ã­Pã­í­u#+ŽDŽVdŗ„ŗV.ŽDŽudŸdŗ„ŗudŸ.Ž6ŽPtŗ~ŗP6ŽDŽu´Ÿdŗtŗu´Ÿ<ŽDŽudŸdŗtŗudŸ<ŽDŽPdŗnŗPžŽŊŽVŊŽ}˛u¸Ÿ}˛~˛t´Ÿ~˛¯˛u¸Ÿ¯˛°˛t´ŸŲ˛ŗVŗdŗu¸Ÿ¤ŗÅŗu¸Ÿb´5ĩu¸ŸIĩsĩu¸Ÿ¨ĩŗĩu¸ŸĄŽ}˛udŸ}˛~˛t`Ÿ~˛¯˛udŸ¯˛°˛t`ŸŲ˛dŗudŸ¤ŗÅŗudŸb´5ĩudŸIĩsĩudŸ¨ĩŗĩudŸĄŽŦŽPŦގŽv<ŸŲ˛ã˛PŠŽˇŽuŒä˛ō˛uŧŸ¯ŽˇŽudŸę˛ō˛udŸ¯ŽˇŽPę˛ü˛P¯}˛uä~}˛~˛tā~~˛¯˛uä~¯˛°˛tā~ŗdŗuä~¤ŗÅŗuä~b´5ĩuä~¨ĩ¯ĩuä~¯}˛udŸ}˛~˛t`Ÿ~˛¯˛udŸ¯˛°˛t`ŸŗdŗudŸ¤ŗÅŗudŸb´5ĩudŸ¨ĩ¯ĩudŸ¯¯P¯¯uä~<Ÿŗ ŗP ¯¯V ŗŗu@Ÿ¯¯udŸŗŗudŸ¯¯Pŗ%ŗPi¯}˛u„}˛~˛t€~˛¯˛u„¯˛°˛t€+ŗdŗu„b´5ĩu„l¯}˛udŸ}˛~˛t`Ÿ~˛¯˛udŸ¯˛°˛t`Ÿ+ŗdŗudŸb´5ĩudŸl¯w¯Pw¯‚¯u„<Ÿ+ŗ5ŗPt¯‚¯V6ŗDŗuLŸz¯‚¯udŸ<ŗDŗudŸz¯‚¯P<ŗNŗP˜¯}˛u\Ÿ}˛~˛tXŸ~˛¯˛u\Ÿ¯˛°˛tXŸTŗdŗu\Ÿb´5ĩu\Ÿ˜¯œ¯uŸ¯Ŗ¯tǝ}˛u\Ÿ}˛~˛tXŸ~˛¯˛u\Ÿ¯˛°˛tXŸTŗdŗu\Ÿb´ ĩu\Ÿ­¯}˛udŸ}˛~˛t`Ÿ~˛¯˛udŸ¯˛°˛t`ŸTŗdŗudŸb´ ĩudŸ­¯ĩ¯PTŗ^ŗPĩ¯Ô¯0ŸÔ¯}˛u”}˛~˛t~˛¯˛u”¯˛°˛tb´ ĩu”Ô¯ʰVËąāąVđą˛VÕ´×´Vø´ú´VĩĩVĩĩVÔ¯ʰvŸËąāąvŸđą˛vŸÕ´×´vŸø´ú´vŸĩĩvŸĩĩvŸ°ʰVËąāąVđą˛VÕ´×´Vø´ú´VĩĩVĩĩV°ʰv ŸËąāąv Ÿđą˛v ŸÕ´×´v Ÿø´ú´v Ÿĩĩv Ÿĩĩv Ÿ:°nąuŒËąP˛uŒb´š´uŒ¸´ĩuŒ=°nąudŸËąP˛udŸb´š´udŸ¸´ĩudŸ=°E°PËąÚąPc°nąuü~āąP˛uü~b´ˆ´uü~¸´ü´uü~y°ną¸˛ŸāąP˛¸˛Ÿb´ˆ´¸˛Ÿ¸´Č´¸˛ŸÕ´ė´¸˛Ÿy°|°u°ƒ°tаnąuXŸāąP˛uXŸb´ˆ´uXŸ¸´Č´uXŸŸ°nąҞŸāąP˛ҞŸb´ˆ´ҞŸ¸´Č´ҞŸŸ°§°PްnąuXŸāąP˛uXŸb´ˆ´uXŸ¸´Č´uXŸą°nąudŸāąP˛udŸb´ˆ´udŸ¸´Č´udŸą°š°P˛ ˛Pš°nąuTŸāą˛uTŸ˛P˛uTŸb´ˆ´uTŸ¸´Č´uTŸŋ°nąudŸāą˛udŸ˛P˛udŸb´ˆ´udŸ¸´Č´udŸŋ°Į°PđąúąPĮ°ʰVĮ°ʰvŸõ°nąu`Ÿāąđąu`Ÿ˛P˛u`Ÿb´ˆ´u`Ÿ¸´ŧ´u`Ÿø°nąudŸāąđąudŸ˛P˛udŸb´ˆ´udŸ¸´ŧ´udŸø°ąP=˛J˛P&ąnąudŸāąđąudŸ˛=˛udŸ)ąnąu`Ÿāąđąu`Ÿ˛=˛u`Ÿ)ą1ąP0˛7˛P1ąnąܲŸāąđąܲŸ˛0˛ܲŸ1ą=ąu@ąDątKąnąu\Ÿāąđąu\Ÿ˛0˛u\ŸNąnąudŸāąđąudŸ˛0˛udŸNąVąP ˛*˛PVąnąuLŸāąđąuLŸ˛ ˛uLŸ\ąnąudŸāąđąudŸ˛ ˛udŸ\ądąP˛˛PdąnąuHŸāąđąuHŸjąnąudŸāąđąudŸjąnąPāąęąPd´v´udŸj´v´u`Ÿj´u´Pv´ˆ´u\Ÿ|´ˆ´u`Ÿ|´‡´Pˆ´š´uLŸŽ´š´uPŸŽ´™´Pš´¸´uHŸ ´¸´uDŸ ´˛´Pž´Č´u`ŸÄ´Č´udŸÄ´Č´P×´ė´uXŸŨ´ė´udŸŨ´ë´Pė´ø´uTŸō´ø´udŸō´ø´PĩĩuPŸĩĩudŸĩĩPo˛v˛uœŸ–˛˛uœŸr˛v˛udŸ™˛˛udŸr˛~˛P™˛§˛PĻŗģŗuHŸŦŗģŗudŸŦŗēŗPģŗÅŗuLŸÁŗÅŗudŸÁŗÅŗPÅŗāŗuœŸËŗŌŗu›ŸŌŗÖŗRÖŗāŗu›ŸËŗÖŗPâŗ÷ŗu¨Ÿčŗ÷ŗudŸčŗöŗP÷ŗ´uŦŸũŗ´udŸũŗ´P"ĩ5ĩu\Ÿ(ĩ5ĩudŸ(ĩ5ĩP´%´u¸Ÿ´%´udŸ´$´P%´1´uŧŸ+´1´udŸ+´1´P7´R´u ŸC´R´udŸC´Q´PR´b´u¤ŸX´b´udŸX´b´PKĩ`ĩuDŸQĩ`ĩudŸQĩ_ĩP`ĩsĩu@ŸfĩsĩudŸfĩsĩPuĩˆĩu´Ÿ{ĩˆĩudŸ{ĩˆĩP‘ĩ¨ĩu°Ÿ—ĩ¨ĩudŸ—ĩĨĩPļ°¸u °¸Zšu°ŸZš[štŦŸ[šwšu°ŸwšxštŦŸxšpēu Œēļēu ēēģu ģ"ģu°Ÿ"ģcģu cģvģu°Ÿvģ›ģu ļ#ļP~ļšļVšļZšu´ŸZš[št°Ÿ[šwšu´Ÿwšxšt°ŸxšœšVœšpēu´ŸŒēŦēu´Ÿņē›ģu´ŸļZšu˜Zš[št”[šwšu˜wšxšt”xšpēu˜ŒēŦēu˜ņē›ģu˜ļļPļ›ļv<ŸxššPŒļ›ļu€ššu¸Ÿ’ļ›ļu˜†ššudŸ’ļ›ļP†š–šPåļˇVˇZšu@ŸZš[štŧŸ[šwšu@ŸwšxštŧŸœšĀšVĀšpēu@ŸŒēŦēu@Ÿņēģu@Ÿ"ģPģu@Ÿcģvģu@Ÿģ›ģu@ŸčļZšu`ŸZš[št\Ÿ[šwšu`Ÿwšxšt\Ÿœšpēu`ŸŒēŦēu`Ÿņēģu`Ÿ"ģPģu`Ÿcģvģu`Ÿģ›ģu`ŸčļôļPôļˇv<ŸœšŖšPņļˇu¤šŗšuŧŸ÷ļˇu`ŸĒšŗšu`Ÿ÷ļˇPĒšēšPJˇЎVЎZšuHŸZš[štDŸ[šwšuHŸwšxštDŸĀšäšVäšpēuHŸŒēŦēuHŸņēģuHŸ"ģ&ģuHŸcģvģuHŸģ›ģuHŸMˇZšu`ŸZš[št\Ÿ[šwšu`Ÿwšxšt\ŸĀšpēu`ŸŒēŦēu`Ÿņēģu`Ÿ"ģ&ģu`Ÿcģvģu`Ÿģ›ģu`ŸMˇYˇPYˇeˇv<ŸĀšĮšPVˇeˇuČšךuDŸ\ˇeˇu`ŸÎšךu`Ÿ\ˇeˇPΚŪšP¯ˇ͎V͎ZšuPŸZš[štLŸ[šwšuPŸwšxštLŸäšēVēpēuPŸŒēŦēuPŸcģvģuPŸģ›ģuPŸ˛ˇZšu`ŸZš[št\Ÿ[šwšu`Ÿwšxšt\Ÿäšpēu`ŸŒēŦēu`Ÿcģvģu`Ÿģ›ģu`Ÿ˛ˇžˇPžˇʡv<ŸäšëšPģˇʡuėšûšuLŸÁˇʡu`Ÿōšûšu`ŸÁˇʡPōšēP¸ZšuZš[štŒ[šwšuwšxštŒēPēuŒēŦēucģvģu”ģ›ģu¸ZšudŸZš[št`Ÿ[šwšudŸwšxšt`ŸēPēudŸŒēŦēudŸcģvģudŸ”ģ›ģudŸ¸ ¸P ¸,¸u<ŸēēP¸,¸VēēuXŸ#¸,¸udŸēēudŸ#¸,¸Pē&ēPh¸Zšu`ŸZš[št\Ÿ[šwšu`Ÿwšxšt\Ÿ,ēPēu`Ÿcģvģu`Ÿk¸ZšudŸZš[št`Ÿ[šwšudŸwšxšt`Ÿ,ēPēudŸcģvģudŸk¸w¸Pw¸ƒ¸u`<Ÿ,ē3ēPt¸ƒ¸u\Ÿ4ēCēu\Ÿz¸ƒ¸udŸ:ēCēudŸz¸ƒ¸P:ēJēPƒ¸YšW[švšWcģvģW—¸ZšudŸZš[št`Ÿ[šwšudŸwšxšt`ŸcģvģudŸ—¸˸u[šhšucģvģuģ¸ZšudŸZš[št`Ÿ[šwšudŸwšxšt`Ÿž¸Zšu`ŸZš[št\Ÿ[šwšu`Ÿwšxšt\Ÿž¸Į¸P[šbšPĮ¸˸0ŸË¸XšVhšušV0šZšu°ŸZš[štŦŸhšwšu°ŸwšxštŦŸ0š9šPKšZšu°ŸZš[štŦŸhšwšu°ŸwšxštŦŸNšZšudŸZš[št`ŸhšwšudŸwšxšt`ŸNš[šPhšošPRēeēuTŸXēeēudŸXēdēPeēpēuXŸkēpēudŸkēpēPpēŒēu°Ÿvē~ēu¯Ÿ~ē‚ēR‚ēŒēu¯Ÿvē‚ēPŽēĄēu`Ÿ”ēĄēudŸ”ē ēPĄēŦēu\Ÿ§ēŦēudŸ§ēŦēPŧē×ēu´ŸČē×ēudŸČēÖēP×ēäēu¸ŸŨēäēudŸŨēäēPķēģuPŸųēģu`ŸųēģPģģuLŸ ģģu`Ÿ ģģPeģvģudŸkģvģu`ŸkģvģP(ģ;ģuHŸ.ģ;ģu`Ÿ.ģ:ģP;ģLģuDŸAģLģu`ŸAģLģPRģcģuŧŸXģcģu`ŸXģcģPxģģu@Ÿ~ģģu`Ÿ~ģŠģP ŧ­ŋu­ŋJĀu ŸJĀKĀtœŸKĀîĀuîĀũĀu ŸũĀūĀtœŸūÁuÁîÂuõÂ"Ãu ŧŧPƒŧąŧVąŧJĀu¨ŸJĀKĀt¤ŸKĀũĀu¨ŸũĀūĀt¤ŸūĀ"ÁV"ÁÁu¨ŸÁÔÁu¨ŸŪÁĪÂu¨ŸÃ"Ãu¨Ÿ†ŧJĀu`ŸJĀKĀt\ŸKĀũĀu`ŸũĀūĀt\ŸūÁu`ŸÁÔÁu`ŸŪÁĪÂu`ŸÃ"Ãu`Ÿ†ŧ”ŧP”ŧ ŧv<ŸūĀÁP‘ŧ ŧu„ÁÁu¤Ÿ—ŧ ŧu`Ÿ ÁÁu`Ÿ—ŧ ŧP ÁÁPęŧŊVŊJĀu°ŸJĀKĀtŦŸKĀũĀu°ŸũĀūĀtŦŸ"ÁJÁVJÁÁu°ŸÁÔÁu°ŸÂĪÂu°ŸÃ"Ãu°ŸíŧJĀu`ŸJĀKĀt\ŸKĀũĀu`ŸũĀūĀt\Ÿ"ÁÁu`ŸÁÔÁu`ŸÂĪÂu`ŸÃ"Ãu`ŸíŧųŧPųŧŊv<Ÿ"Á+ÁPöŧŊu„,Á;ÁuŦŸüŧŊu`Ÿ2Á;Áu`ŸüŧŊP2ÁDÁPOŊ’ŊV’ŊJĀu¸ŸJĀKĀt´ŸKĀŒĀu¸ŸŒĀ™ĀV™ĀũĀu¸ŸũĀūĀt´ŸJÁTÁVTÁÁu¸ŸÁĮÁu¸ŸÂąÂu¸ŸÃ"Ãu¸ŸXŊaŊRaŊJĀu„JĀKĀt€KĀũĀu„ũĀūĀt€JÁNÁRNÁÁu„ÁĮÁu„ÂąÂu„Ã"Ãu„XŊaŊPJÁNÁPaŊJĀu´ŸJĀKĀt°ŸKĀũĀu´ŸũĀūĀt°ŸTÁÁu´ŸÁĮÁu´ŸÂąÂu´ŸÃ"Ãu´ŸgŊJĀu`ŸJĀKĀt\ŸKĀũĀu`ŸũĀūĀt\ŸTÁÁu`ŸÁĮÁu`ŸÂąÂu`ŸÃ"Ãu`ŸgŊpŊPŒĀ“ĀPˇŊŪŊVŪŊJĀuŧŸJĀKĀt¸ŸKĀŒĀuŧŸ™ĀŊĀVŊĀũĀuŧŸũĀūĀt¸ŸTÁaÁuŧŸÁŊÁuŧŸÂąÂuŧŸÃ"ÃuŧŸēŊJĀudŸJĀKĀt`ŸKĀŒĀudŸ™ĀũĀudŸũĀūĀt`ŸTÁaÁudŸÁŊÁudŸÂąÂudŸÃ"ÃudŸēŊÆŊPÆŊŌŊv<Ÿ™Ā ĀPÃŊŌŊu€ĄĀ°Āu@ŸÉŊŌŊudŸ§Ā°ĀudŸÉŊŌŊP§ĀˇĀPž^žu€^žJĀuHŸJĀKĀtDŸKĀrĀuHŸrĀĀu€ĀŒĀuHŸŊĀĘĀu€ĘĀũĀuHŸũĀūĀtDŸTÁaÁuHŸÂąÂuHŸžJĀudŸJĀKĀt`ŸKĀŒĀudŸŊĀũĀudŸũĀūĀt`ŸTÁaÁudŸÂąÂudŸž%žPŊĀÄĀP%žJĀuDŸJĀKĀt@ŸKĀŒĀuDŸĘĀũĀuDŸũĀūĀt@ŸTÁaÁuDŸÂąÂuDŸ+žJĀudŸJĀKĀt`ŸKĀŒĀudŸĘĀũĀudŸũĀūĀt`ŸTÁaÁudŸÂąÂudŸ+ž4žPrĀyĀP{žšžu€šžJĀuPŸJĀKĀtLŸKĀeĀuPŸeĀrĀu€ĀŒĀu€ĘĀũĀuPŸũĀūĀtLŸTÁaÁuPŸÂ9ÂuPŸfÂąÂuPŸ~žJĀudŸJĀKĀt`ŸKĀrĀudŸĀŒĀudŸĘĀũĀudŸũĀūĀt`ŸTÁaÁudŸÂ9ÂudŸfÂąÂudŸ~ž‡žP†ĀP‡žJĀuLŸJĀKĀtHŸKĀrĀuLŸĘĀũĀuLŸũĀūĀtHŸTÁaÁuLŸÂ9ÂuLŸfÂąÂuLŸžJĀudŸJĀKĀt`ŸKĀrĀudŸĘĀũĀudŸũĀūĀt`ŸTÁaÁudŸÂ9ÂudŸfÂąÂudŸž–žPeĀlĀPëžŋVKĀeĀVîžŋu`ŸKĀeĀu`Ÿîž÷žPXĀ_ĀP÷žŋuTŸKĀXĀuTŸũžŋu`ŸKĀXĀu`ŸũžŋPKĀRĀPŋJĀu\ŸJĀKĀtXŸĘĀũĀu\ŸũĀūĀtXŸTÁaÁu\ŸfÂąÂu\Ÿŋ#ŋu&ŋ*ŋt1ŋJĀu\ŸJĀKĀtXŸĘĀũĀu\ŸũĀūĀtXŸTÁaÁu\Ÿ|ÂąÂu\Ÿ4ŋJĀudŸJĀKĀt`ŸĘĀũĀudŸũĀūĀt`ŸTÁaÁudŸ|ÂąÂudŸ4ŋ=ŋPTÁ[ÁP‚ŋJĀu`ŸJĀKĀt\ŸĘĀũĀu`ŸũĀūĀt\Ÿ…ŋJĀu\ŸJĀKĀtXŸĘĀũĀu\ŸũĀūĀtXŸ…ŋ‘ŋP‘ŋŋu`<ŸĘĀŅĀPŽŋŋudŸŌĀáĀudŸ”ŋŋu`ŸØĀáĀu`Ÿ”ŋŋPØĀčĀPšŋHĀVîĀûĀVĀJĀu ŸJĀKĀtœŸîĀũĀu ŸũĀūĀtœŸĀ%ĀP7ĀJĀu ŸJĀKĀtœŸîĀũĀu ŸũĀūĀtœŸ:ĀJĀudŸJĀKĀt`ŸîĀũĀudŸũĀūĀt`Ÿ:ĀKĀPîĀõĀPcÁvÁuŧŸiÁvÁudŸiÁuÁPvÁÁu@Ÿ|ÁÁudŸ|ÁÁPÁÁu Ÿ‡ÁÁuŸŸÁ“ÁR“ÁÁuŸŸ‡Á“ÁPŸÁ˛ÁuHŸĨÁ˛ÁudŸĨÁąÁP˛ÁŊÁuDŸ¸ÁŊÁudŸ¸ÁŊÁPhÂ|Âu\ŸnÂ|ÂudŸnÂ|ÂPÉÁÔÁu´ŸĪÁÔÁu`ŸĪÁÔÁPāÁķÁu°ŸæÁîÁu`ŸîÁōÁRōÁķÁu`ŸæÁōÁPķÁÂuŦŸųÁÂu`ŸųÁÂPÂÂuXŸ ÂÂu`Ÿ ÂÂPÂ5ÂuTŸÂ5Âu`ŸÂ/ÂP;ÂNÂuPŸAÂNÂudŸAÂMÂPNÂbÂuLŸTÂbÂudŸTÂbÂP~‘Âu`Ÿ„‘Âu\Ÿ„ÂP‘­ÂudŸ—­Âu\Ÿ—§ÂPŗÂĪÂu¸ŸšÂÅÂu`ŸÅÂÉÂRÉÂĪÂu`ŸšÂÉÂPÚÂîÂu¤ŸāÂîÂu`ŸāÂîÂP÷ÂÃu¨ŸÃ Ãu`Ÿ ÃÃRÃÃu`ŸÃÃP0ÏÃ0ŸÉÃëÃ0ŸëÃûÃPûÃüÆu~üÆũÆtŒ~ũÆ"Įu~"Į#ĮtŒ~#ĮWĮu~ĮÁĮ0ŸÁĮÉĮu~îĮČu~ČMČu~PÃSÃwŸSÃYÃPYÛÃwŸÉÃ$ÄwŸ$ÄüÆu#ŸüÆũÆt#ŸũÆ"Įu#Ÿ"Į#Įt#Ÿ#ĮOĮu#ŸĮ’ĮwŸ’ĮšĮu#ŸšĮÁĮwŸÁĮØĮu#ŸîĮČu#ŸČqČu#Ÿ3Ã<Ãu ~Ÿ<ÃÃVƒÃüÆu ~ŸüÆũÆtœ~ŸũÆ"Įu ~Ÿ"Į#Įtœ~Ÿ#ĮĮu ~ŸĮ˜ĮV˜ĮšĮu ~ŸšĮœĮVœĮqČu ~ŸœĮÁĮu ~ŸĨĮŗĮuŦ~ŸŗĮˇĮRˇĮÁĮuŦ~ŸĨĮˇĮPÉÃWĮŠŸÁĮČŠŸČqČŠŸÉÃāÃwõÃWĮHŸÁĮČHŸČqČHŸõÃûÃuŦ~Ÿûà ÄP ÄœÄVœÄüÆuŒ~üÆũÆtˆ~ũÆ"ĮuŒ~"Į#Įtˆ~#ĮWĮuŒ~ÁĮĮĮVĮĮČuŒ~ČqČuŒ~õà Äuā~Ÿ ÄÄPÄüÆu”~üÆũÆt~ũÆ"Įu”~"Į#Įt~#ĮWĮu”~ÁĮČu”~ČqČu”~UÄœÄVœÄüÆuŒ~üÆũÆtˆ~ũÆ"ĮuŒ~"Į#Įtˆ~#ĮWĮuŒ~ÁĮĮĮVĮĮČuŒ~ČqČuŒ~œÄĢÄu´~ŸĢÄËÄQËÄüÆuđ}üÆũÆtė}ũÆ"Įuđ}"Į#Įtė}#ĮWĮuđ}îĮČuđ}ČqČuđ}đĮČuŦ~ŸKÅWĮHŸČqČHŸKŘÅu¸~Ÿ˜ÅŠÅRŠÅüÆuč}üÆũÆtä}ũÆ"Įuč}"Į#Įtä}#ĮWĮuč}ČqČuč}~ŘÅuÜ~Ÿ˜ÅŠÅr$ŸŠÅüÆuč}#$ŸüÆũÆtä}#$ŸũÆ"Įuč}#$Ÿ"Į#Įtä}#$Ÿ#ĮWĮuč}#$ŸČqČuč}#$ŸÉĮîĮuā~ŸéŁÆWÆüÆu¨~ŸüÆũÆt¤~ŸũÆĮWĮ"Įu¨~Ÿ"Į#Įt¤~Ÿ#Į5Įu¨~Ÿ5ĮDĮWėÅüÆuŸ~ŸüÆũÆt›~ŸũÆ"ĮuŸ~Ÿ"Į#Įt›~Ÿ#ĮDĮuŸ~ŸėÅôÅPũÆ ĮP ÆüÆuŦ~ŸüÆũÆt¨~ŸĮ"ĮuŦ~Ÿ"Į#Įt¨~Ÿ#ĮDĮuŦ~Ÿ2ÆüÆu¸~ŸüÆũÆt´~ŸĮ"Įu¸~Ÿ"Į#Įt´~Ÿ#ĮDĮu¸~ŸAÆüÆuÜ~ŸüÆũÆtØ~ŸĮ"ĮuÜ~Ÿ"Į#ĮtØ~Ÿ#ĮDĮuÜ~ŸJÆüÆu¨~ŸüÆũÆt¤~ŸĮ"Įu¨~Ÿ"Į#Įt¤~Ÿ#ĮDĮu¨~ŸJÆRÆP5Į>ĮPRÆüÆu¸~ŸüÆũÆt´~ŸĮ"Įu¸~Ÿ"Į#Įt´~Ÿ#Į5Įu¸~ŸoÆüÆuŦ~ŸüÆũÆt¨~ŸĮ"ĮuŦ~Ÿ"Į#Įt¨~Ÿ#Į5ĮuŦ~Ÿ‹ÆüÆu´~ŸüÆũÆt°~ŸĮ"Įu´~Ÿ"Į#Įt°~Ÿ#Į5Įu´~Ÿ§ÆüÆuŦ~ŸüÆũÆt¨~ŸĮ"ĮuŦ~Ÿ"Į#Įt¨~Ÿ#Į5ĮuŦ~ŸŊÆüÆuā~ŸüÆũÆtÜ~ŸĮ"Įuā~Ÿ"Į#ĮtÜ~Ÿ#Į5Įuā~ŸáÆüÆu¤~ŸüÆũÆt ~ŸĮ"Įu¤~Ÿ"Į#Įt ~Ÿ#Į5Įu¤~ŸáÆčÆu¤~ŸčÆüÆu ~ŸüÆũÆtœ~ŸĮ"Įu ~Ÿ"Į#Įtœ~Ÿ#Į5Įu¤~ŸäÆüÆuŦ~ŸüÆũÆt¨~ŸĮ"ĮuŦ~Ÿ"Į#Įt¨~Ÿ#Į5ĮuŦ~ŸäÆčÆP#Į2ĮPčÆüÆu ~ŸüÆũÆtœ~ŸĮ"Įu ~Ÿ"Į#Įtœ~ŸņÆüÆuŦ~ŸüÆũÆt¨~ŸĮ"ĮuŦ~Ÿ"Į#Įt¨~ŸņÆũÆPĮĮPWĮoĮu¤~Ÿ`ĮjĮuŸ~ŸjĮnĮRnĮoĮuŸ~Ÿ`ĮnĮPoĮĮu ~ŸxĮ‚ĮuŸ~Ÿ‚Į†ĮR†ĮĮuŸ~ŸxĮ†ĮPČ>Ču¨~Ÿ&Č4ČuŸ~Ÿ4Č8ČR8Č>ČuŸ~Ÿ&Č8ČP֎u֎ŨŽp|ŸŨŽæŽR֎æŽP+V+rxŸf0Ÿnx0ŸČː0Ÿ‘+‘0ŸfVnxVȐʐV+rxŸ+3v|Ÿ3?P?Gv|Ÿ +P9?P?Gv|Ÿ9GVGfudŸnxudŸ[fudŸnxudŸ^fucŸnxucŸ^fPnuP‘+‘udŸ‘&‘ucŸ&‘*‘R*‘+‘ucŸ‘*‘P”­v4Ÿ‰ސv4ŸŪųv4Ÿ­quPސȐuPːҐuPų‘uP4‘â‘uP­ƏuPƏô0Ÿ P 5uDĐƐuDƐȐuPːҐ0Ÿų‘uD4‘;‘uD;‘A‘uPA‘e‘uD}‘¨‘0ŸŦ‘ȑ0ŸČ‘ԑuDŪ‘â‘0ŸxȐō{‚ ː‘ō{‚ 4‘â‘ō{‚ xȐ1ŸĖ‘1Ÿ4‘â‘1ŸxģuqސuҐųuŠ”1Ÿ”ĻQtސQҐųQ‚Ȑōi¨ː‘ōi¨4‘â‘ōi¨Šqō0ĨxȐō0ĨːҐō0Ĩؐ‘ō0Ĩ4‘â‘ō0Ĩ”ģu‰ސuېųuž­už­0Ÿž­uL­ģu­ģuģžtžt­°uPv"Ÿ°ĖVĖIuHĐƐuHƐȐVːҐuHų‘uH4‘;‘uH;‘A‘VA‘â‘uHΏĶVĶquPސƐuPːҐuPų‘uP4‘;‘uP}‘Ž‘uPŦ‘ԑuPŪ‘â‘uPΏĶWΏq1ŸŽƐ1ŸĖҐ1Ÿų‘1Ÿ4‘;‘1Ÿ}‘Ž‘1ŸŦ‘ԑ1ŸŪ‘â‘1ŸÎúWːҐWŦ‘ļ‘WΏĶVėīvŸīôVĶėWėôw|ŸĖҐWŦ‘ļ‘WėīvŸīôV}‘Ž‘uPĩ‘ȑuPŪ‘â‘uP  P MuDĐƐuDų‘uD4‘;‘uDȑԑuD  Q 5uTĐƐuTų‘uT4‘;‘uTȑԑuT q1ŸŽƐ1Ÿų‘1Ÿ4‘;‘1ŸČ‘ԑ1Ÿ !WĐƐWų‘W4‘;‘WȑԑW  P qVސƐVų‘V4‘6‘V 'W'5w|ŸÄƐWų‘W4‘;‘WȑԑW $V$5v|ŸÄƐVų‘V4‘6‘V‘‘V4‘6‘V‘‘uD4‘;‘uDȑԑuD@quTސ–uT@MW@qWސĐWMSWSXw|ŸXqWސ–w|ŸMXudŸ]qudŸŽ–udŸ]kP–ĐuTАuTT‘a‘Pa‘e‘uDT‘e‘uPe‘}‘uP¨‘Ŧ‘uPԑŪ‘uPl‘x‘uPŽ‘¨‘uH–‘Ą‘udŸĄ‘Ĩ‘RĨ‘¨‘udŸ–‘Ĩ‘PÅČŖËuTŸŖË¤Ë‘LŸ˛ËĖ‘LŸĖ‰ĖP‰ĖÍ‘LŸÅČøČuTŸøČ{Éu`Ÿ{ɆÉV†ÉŗÉu`ŸŗÉÅÉVÅÉĘu`ŸĘ ĘV ĘMËu`ŸMËUËQUˉËu¨‰ËŖËu`ŸŖË¤Ë‘XŸ˛ËĖ‘XŸĖĖRĖ Ė‘XŸ Ė$ĖR$Ė1Ė‘XŸ1Ė@ĖV@ĖXĖ‘XŸXĖ~ĖV’ĖŦĖVŦĖŋĖ‘XŸŋĖÃĖRÃĖÆĖ‘XŸĘĖįĖVįĖÍ‘XŸøČ¤Ë|Ÿ˛Ë~Ė|Ÿ’ĖÆĖ|ŸĘĖÍ|ŸøČŖËuTŸŖË¤Ë‘LŸ˛Ë~Ė‘LŸ’ĖÆĖ‘LŸĘĖÍ‘LŸøČ`Ęu¨`ĘŖËu@ŸŖË¤Ë‘¸Ÿ˛Ë*Ė‘¸Ÿ*Ė~Ė‘ ’ĖŦĖ‘ ŦĖÆĖ‘¸ŸĘĖüĖ‘ üĖÍ‘¸Ÿ ÉÉ0ŸÉ[ÉV[É^Ét^É_Ét_ÉcÉtÅÉÜÉVÜÉßÉtßÉāÉtāÉäÉt@ĖUĖVįĖüĖVÉÉW9ÉIÉPIÉKÉRKÉÅÉWÅÉËÉPËÉ'ĘW*ĖUĖW’Ė”ĖWĘĖĖĖWįĖüĖWKÉcÉR@ĖTĖRTĖUĖwvŸKÉ[ÉV[É^Ét^É_Ét_ÉcÉt@ĖUĖVÉÉu¨KÉÅÉu¨@ĖUĖ‘ ’ĖŦĖ‘ ÉɨŸKÉÅɨŸ@ĖUˍŸ’ĖŦˍŸÉÉu¤gÉÅÉu¤’ĖŦĖ‘œÉÉu`ŸgÉ{Éu`Ÿ{ɆÉV†ÉŗÉu`ŸŗÉÅÉV’ĖŦĖVoÉ{Éu`Ÿ{ɆÉV†ÉŒÉu`ŸoÉŒÉu¤oÉÉPÉÉu¤ŒÉĢÉu¤ÉÉuLŸ’ÉĄÉuLŸĄÉĨÉRĨÉĢÉuLŸ’ÉĨÉPÅÉ'Ę ˙Ÿ*Ė@Ė ˙ŸĘĖüĖ ˙ŸÅÉÜÉVÜÉßÉtßÉāÉtāÉäÉtįĖüĖVÅÉ'Ęu¨*Ė@Ė‘ ĘĖüĖ‘ ÅÉ'ʨŸ*Ė@ˍŸĘĖüˍŸčÉĘVĘĘtĘ'ĘuLŸ*Ė1ĖV1Ė2Ėt2Ė3Ėt3Ė7Ėt7Ė@Ė‘DŸĘĖįĖ‘DŸčÉĘu`ŸĘ ĘV Ę'Ęu`Ÿ*Ė1Ė‘XŸ1Ė@ĖVĘĖįĖVôÉĘu`ŸĘ ĘV ĘĘu`ŸôÉĘVĘĘtĘĘuLŸôÉĘPĘ'ĘuLŸĘ'Ęu¤Ę&ĘP”ĖŦĖ‘œšĖĨĖ‘DŸĨĖŠĖRŠĖŦĖ‘DŸšĖŠĖPĖĖįĖ‘DŸŌĖįĖ‘œŌĖáĖPøČ{Éu`Ÿ{ɆÉV†ÉŗÉu`ŸŗÉÅÉVÅÉĘu`ŸĘ ĘV ĘMËu`ŸMËUËQUˉËu¨‰ËŖËu`ŸŖË¤Ë‘XŸ˛ËĖ‘XŸĖĖRĖ Ė‘XŸ Ė$ĖR$Ė1Ė‘XŸ1Ė@ĖV@ĖXĖ‘XŸXĖ~ĖV’ĖŦĖVŦĖŋĖ‘XŸŋĖÃĖRÃĖÆĖ‘XŸĘĖįĖVįĖÍ‘XŸ'ĘMËu`ŸMËUËQUˉËu¨‰ËŖËu`ŸŖË¤Ë‘XŸ˛ËĖ‘XŸĖĖRĖ Ė‘XŸ Ė$ĖR$Ė*Ė‘XŸŦĖŋĖ‘XŸŋĖÃĖRÃĖÆĖ‘XŸüĖÍ‘XŸ'ĘŖËuTŸŖË¤Ë‘LŸ˛Ë*Ė‘LŸŦĖÆĖ‘LŸüĖÍ‘LŸ6ĘbĘVLĘMËuhŸMËUËqŸUˉËu¨#Ÿ‰ËŖËuhŸŖË¤Ë‘`Ÿ˛ËĖ‘`ŸĖĖrŸĖ Ė‘`Ÿ Ė$ĖrŸ$Ė*Ė‘`ŸŦĖŋĖ‘`ŸŋĖÃĖrŸÃĖÆĖ‘`ŸüĖÍ‘`ŸLĘŖËu\ŸŖË¤Ë‘TŸ˛Ë*Ė‘TŸŦĖÆĖ‘TŸüĖÍ‘TŸRĘbĘPBĘMËudŸMËUËqŸUˉËu¨#Ÿ‰ËŖËudŸŖË¤Ë‘\Ÿ˛ËĖ‘\ŸĖĖrŸĖ Ė‘\Ÿ Ė$ĖrŸ$Ė*Ė‘\ŸŦĖŋĖ‘\ŸŋĖÃĖrŸÃĖÆĖ‘\ŸüĖÍ‘\ŸBĘŖËuXŸŖË¤Ë‘PŸ˛Ë*Ė‘PŸŦĖÆĖ‘PŸüĖÍ‘PŸDĘGĘPGĘbĘQbĘ“Ęu¨XĘMËu`ŸMËUËQUˉËu¨‰ËŖËu`ŸŖË¤Ë‘XŸ˛ËĖ‘XŸĖĖRĖ Ė‘XŸ Ė$ĖR$Ė*Ė‘XŸŦĖŋĖ‘XŸŋĖÃĖRÃĖÆĖ‘XŸüĖÍ‘XŸXĘFËu`ŸFËŖËuTŸŖË¤Ë‘LŸ˛ËĖ‘XŸĖĖRĖ Ė‘XŸ Ė$ĖR$Ė*Ė‘XŸŦĖŋĖ‘XŸŋĖÃĖRÃĖÆĖ‘XŸüĖÍ‘XŸXĘbĘQbĘ“Ęu¨XĘbĘVXĘ‚ĘV‚ʇĘv|Ÿ‡Ę“ĘVbĘkĘVkĘpĘv|ŸpĘ‚ĘV‚ĘŒĘv|ŸbĘpĘu¤uĘŒĘu¤ŒĘ“ĘWbĘpĘPuʆĘP“ĘMËu`ŸMËUËQUˉËu¨‰ËŖËuTŸŖË¤Ë‘LŸ˛ËĖ‘XŸĖĖRĖ Ė‘XŸ Ė$ĖR$Ė*Ė‘XŸŦĖŋĖ‘XŸŋĖÃĖRÃĖÆĖ‘XŸüĖÍ‘XŸ“Ę›Ę uhu`4Ÿ‰Ë‘Ë u\uT4Ÿ“ĘĶĘV˛ËĖV—Ę›Ę uhu`4Ÿ—ĘŖĘVŖĘŖËu@ŸŖË¤Ë‘¸Ÿ˛Ë*Ė‘¸ŸŦĖÆĖ‘¸ŸüĖÍ‘¸ŸŠĘMËu`ŸMËUËQUˉËu¨‰ËŖËu`ŸŖË¤Ë‘XŸ˛ËĖ‘XŸĖĖRĖ Ė‘XŸ Ė$ĖR$Ė*Ė‘XŸŦĖŋĖ‘XŸŋĖÃĖRÃĖÆĖ‘XŸüĖÍ‘XŸŠĘĩĘP ĖĖP¸ĘŖËuTŸŖË¤Ë‘LŸ˛Ë Ė‘LŸĖ*Ė‘LŸŦĖÆĖ‘LŸüĖÍ‘LŸõĘËVĖ*ĖVøĘËu`ŸĖ Ė‘XŸ Ė$ĖR$Ė*Ė‘XŸøĘËPĖ$ĖP#Ë)Ëu¤#ËCËVCËUËpüĖÍV#Ë@ËW@ËUËpüĖÍW#Ë&Ëu¨&Ë-Ët#Ë-ËP-ËSËu¨üĖÍ‘ FËŖËuTŸŖË¤Ë‘LŸFˆËWFËUËVFËrËVrËwËv|ŸwËĄËVUË[ËV[Ë_Ëv|Ÿ_ËrËVrË{Ëv|ŸUË_Ëu¨dˉËu¨UË_ËPdËvËP‰ËŖËuTŸŖË¤Ë‘LŸ‰Ë‘Ë u\uT4Ÿ‰ËĸËWË‘Ë u\uT4ŸË™ËW˛Ë Ė‘LŸ˛Ë Ė1ŸÍË Ė‘LŸÍË Ė2ŸëË Ė‘LŸëË Ė3ŸcĖ~Ė‘ lĖwĖ‘@ŸwĖ{ĖR{Ė~Ė‘@ŸlĖ{ĖPŽĖÆĖ‘@Ÿ´ĖŋĖ‘XŸŋĖÃĖRÃĖÆĖ‘XŸ´ĖÃĖPPÍįÍVęÍüÍVüÍÎuWÍįÍVęÍüÍVüÍÎudÍoÍPoÍčÍWęÍÎWdÍįÍvøŸęÍüÍvøŸüÍÎu#øŸ„͇ÍP‡Í“Ívø“͸ÍuTęÍÎuT‹Í“ÍP—͸ÍuTęÍúÍuTĸ͸ÍugŸęÍúÍugŸĸÍĒÍPĒ͸ÍuP<ŸęÍ÷ÍP÷ÍúÍuP<ŸÎÎugŸÎÎRÎÎugŸÎÎP=’o’Wo’k“uPk“l“tLl“‚“uP‚““W“““uP““•“W•“´“uPQ’o’Wo’k“uPk“l“tLl“‚“uP‚““WT’k“ucŸk“l“t_Ÿl““ucŸT’`’P‚“‰“P`’‚“`ˇŸh’y’Qy’Ģ’uLk’y’Py’Ģ’uTk’y’Qy’Ģ’uLk’y’Qy’›’W›’ ’w|Ÿ ’°’Wy’ƒ’Wƒ’ˆ’w|Ÿˆ’›’W›’Ĩ’w|Ÿy’ˆ’udŸ’Ģ’udŸy’ˆ’P’Ÿ’Pŗ’Į’0ŸĮ’'“W'“,“wŸ,“7“Wl“‚“WĮ’Ū’udŸ“7“udŸĮ’Ū’ucŸ“7“ucŸĮ’Ķ’PĶ’Ū’ud<Ÿ“+“PĮ’Ū’udŸė’7“udŸl“‚“udŸĮ’Ū’`ˇŸė’7“`ˇŸl“‚“`ˇŸ÷’“`ˇŸ÷’“udŸ÷’“P›“Ļ“ucŸĻ“Ē“RĒ“´“ucŸ›“Ē“P ”5”W5”#•uT#•$•tP$•:•uT:•G•WG•K•uTK•M•WM•l•uT ”5”W5”#•uT#•$•tP$•:•uT:•G•W#”#•ucŸ#•$•t_Ÿ$•G•ucŸ#”/”P:•A•P/”:•`ˇŸ?”H”PH”#•uL#•$•tH$•:•uL?”H”QH”u”uP?”H”PH”k”Vk”p”v|Ÿp”}”VH”S”VS”X”v|ŸX”k”Vk”u”v|ŸH”X”udŸ]”u”udŸH”X”P]”o”P€”‘”0Ÿ‘”č”Vč”í”vŸí”ô”V$•:•V‘”ĸ”udŸÔ”ô”udŸ‘”ĸ”ucŸÚ”ô”ucŸ‘”›”P›”ĸ”ud<ŸÚ”ė”P‘”ĸ”udŸ°”ô”udŸ$•:•udŸ‘”ĸ”`ˇŸ°”ô”`ˇŸ$•:•`ˇŸ¸”Ԕ`ˇŸ¸”ԔudŸ¸”Į”PS•^•ucŸ^•b•Rb•l•ucŸS•b•Pp•†•‘†•¸•V¸•Ŋ•vtŸŊ•͕Vž•Ŗ•VŖ•§•vtŸ§•¸•V¸•Á•vtŸž•Ŗ•vŸŖ•§•v|Ÿ§•¸•vŸ¸•Á•v|Ÿž•§•‘L­•Á•‘Lž•§•P­•ŧ•Pî•ũ•P–!–PՖŲ–PŲ–@—uLš—ž—uL —ą—uLū•–P––p|Ÿ'––u#Ÿ@—l—u#Ÿ'–-–P-–s–Qs–@—uL@—O—QO—g—uLg—k—Qk—Ņ—uL;––u#Ÿ@—l—u#Ÿ;–>–P>–Ņ—uPd––u#Ÿ@—l—u#Ÿd–s–Ps–~– v2&ĢÕĒÕzŸ@—O—PO—[— v2&ĢÕĒÕzŸc—e— v2&ĢÕĒÕzŸg—k—Pk—l— v2&ĢÕĒÕzŸ@—O—PO—[— v2&ĢÕĒÕzŸc—e— v2&ĢÕĒÕzŸg—k—Pk—l— v2&ĢÕĒÕzŸ@—[—0Ÿc—l—0Ÿ•–@—uP[—c—uPl—‡—uPš—Ņ—uP•––P–@—uH[—c—Pl—‡—uHš—Ņ—uH•–@—1Ÿ[—c—1Ÿl—‡—1Ÿš—Ņ—1Ÿ•––V“[—c—V“•––P–Ė–W[—c—Pl—‡—Wž— —Wą—Ņ—W–ĖWĖĖ–wtŸl—‡—Wž— —Wą—Ņ—W¤–Á–Wl—‡—Wž— —Wą—Ņ—Wl—‡—Wē—Ņ—Wl—‡—uHē—Ņ—uHq—‡—uPw——uP#uP<Ÿw—ƒ—P{——uP#uP<Ÿ{—ƒ—Pį–ķ–Pķ–@—Vš—œ—V ˜J˜u ˜!˜ptŸ!˜"˜q<Ÿ"˜'˜plŸ ˜!˜P!˜"˜q"˜'˜pxŸ ˜!˜ptŸ!˜"˜q<Ÿ"˜'˜plŸ ˜!˜P!˜"˜q"˜'˜pxŸ@˜Ԙu\ŸÚ˜ä˜u\Ÿjšnšu\Ÿˇš͚u\Ÿb˜o˜rtŸo˜˜ u#<Ÿb˜e˜rhŸe˜h˜Vh˜o˜rhŸo˜˜ u#HŸb˜Ԙ0ŸÚ˜ä˜0Ÿjšnš0Ÿˇš͚0Ÿb˜o˜rtŸo˜˜ u#<Ÿ˜˜˜pxŸ˜˜ĸ˜vŸb˜e˜rhŸe˜h˜Vh˜o˜rhŸo˜˜ u#HŸ˜˜˜plŸ˜˜ĸ˜vxŸ{˜˜Q˜˜˜plŸ˜˜ĸ˜vxŸ˜˜˜pxŸ˜˜ĸ˜vŸ’˜ĸ˜V’˜˜˜P˜˜ĸ˜v Ÿĸ˜Ԙu\ŸÚ˜ä˜u\Ÿŗ˜ԘudŸÚ˜ä˜udŸĮ˜Ԙu\ŸÚ˜ä˜u\ŸĮ˜ԘudŸÚ˜ä˜udŸĘ˜Ԙu[ŸÚ˜ä˜u[ŸĘ˜ԘPژá˜Pˇš͚u\Ÿˇš͚udŸŊšȚu[ŸČš˚R˚͚u[ŸŊš˚P™™w<Ÿ*š/šw<Ÿ€š›šw<Ÿ™šuP/šjšuPnšsšuP›šˇšuP֚…›uP™F™uPF™„™0Ÿ™œ™Pœ™ՙuDfšhšuDhšjšuPnšsš0Ÿ›šˇšuD֚ŨšuDŨšãšuPãš›uD›K›0ŸO›k›0Ÿk›w›uD›…›0Ÿä˜jšō{‚ nšˇšō{‚ ֚…›ō{‚ ä˜jš1Ÿnšˇš1ŸÖš…›1Ÿä˜=™uš/šusš›šuü˜™1Ÿ™™Rš/šRsš›šRô˜jšō Õnšˇšō Õ֚…›ō Õü˜šō Ņšjšō Ņnšsšō Ņ{šˇšō Ņ֚…›ō Ņ™=™u*š/šu€š›šu™™u™™0Ÿ™™uL™=™u™1™V1™=™u=™F™vxŸhšjšvxŸŨšãšvxŸ™!™uPw"Ÿ!™N™WN™é™uHfšhšuHhšjšWnšsšuH›šˇšuH֚ŨšuHŨšãšWãš…›uH&™1™V1™=™u=™F™vxŸhšjšvxŸŨšãšvxŸ&™F™WhšjšWŨšãšWN™S™VS™šuP/šhšuPnšsšuP›šˇšuP֚ŨšuP›0›uPO›w›uP›…›uPN™S™WN™š1Ÿ/šhš1Ÿnšsš1Ÿ›šˇš1ŸÖšŨš1Ÿ›0›1ŸO›w›1Ÿ›…›1ŸN™Š™WnšsšWO›Y›WN™S™V|™™v Ÿ™„™VS™|™W|™„™wtŸnšsšWO›Y›W|™™v Ÿ™„™V\™y™WnšsšWO›Y›W›0›uPX›k›uP›…›uPš™œ™Pœ™í™uDfšhšuD›šˇšuD֚ŨšuDk›w›uDš™œ™Qœ™ՙuTfšhšuT›šˇšuT֚ŨšuTk›w›uTš™š1Ÿ/šhš1Ÿ›šˇš1ŸÖšŨš1Ÿk›w›1Ÿš™œ™Pœ™šV/šhšV›šˇšVؚ֚Vœ™ęVęՙvtŸfšhšV›šˇšVؚ֚V¤™Á™VfšhšV›šˇšVؚ֚V¤šˇšVؚ֚V¤šˇšuD֚ŨšuDk›w›uDā™šuT/š7šuTā™í™Wā™šW/šSšWí™ķ™W홸™wtŸø™šW/š7šwtŸí™ķ™wŸķ™ø™w|Ÿø™šwŸ/š7šw|Ÿí™ø™u\Ÿū™šu\Ÿ/š7šu\Ÿū™ šP7šfšuT>šJšuTöš›P››uDöš›uP››uPK›O›uPw››uP››uP0›K›uH0›K›uH#Ÿ9›D›u\ŸD›H›RH›K›u\Ÿ9›H›PžÎĸÎP“ĸÎ2ĪuP“2Ī3ĪtL“3ĪöĪuP“öĪ÷ĪtL“÷Ī ŌuP“žÎĸÎPĸÎ2ĪuP2Ī3ĪtL3ĪöĪuPöĪ÷ĪtL÷Ī ŌuPĢÎąÎPąÎņÎuT3Ī>ĪP>Ī”ĪuT÷ΆĐuT4ŅSŅuTmŅ€ŅuT¨ŅĒŅuTēŅŋŅuTOĪ”ĪŌĒŸmŅ€ŅŌĒŸpĪ”ĪîĒŸĪÎĶÎPĶÎ2ĪuH2Ī3ĪtD”ĪöĪuHöĪ÷ĪtD÷ĪmŅuH€Ņ ŌuHĪÎĶÎp€ŸĶÎ2ĪuH#€Ÿ2Ī3ĪtD#€Ÿ”ĪöĪuH#€ŸöĪ÷ĪtD#€Ÿ÷ĪmŅuH#€Ÿ€Ņ ŌuH#€ŸÔÎįÎP÷Ī ĐPÅĐÉĐPÉĐ4ŅuDŋŅĪŅuDĐSŅuH#„ŸeŅmŅuH#„Ÿ¨Ņ ŌuH#„ŸĐaĐRaĐ4ŅuD4ŅGŅRGŅSŅuDeŅmŅuD¨ŅēŅuDēŅžŅRžŅ ŌuD#ĐSŅuH#„ŸeŅmŅuH#„Ÿ¨Ņ ŌuH#„Ÿ#Đ&ĐP&ĐSŅuLeŅmŅuL¨Ņ ŌuLRĐSŅuH#„ŸeŅmŅuH#„Ÿ¨Ņ ŌuH#„ŸRĐaĐPaĐiĐ v2&ĢÕĒÕzŸ4ŅGŅPGŅSŅ v2&ĢÕĒÕzŸ¨ŅĒŅ v2&ĢÕĒÕzŸēŅžŅPžŅŋŅ v2&ĢÕĒÕzŸRĐSŅuLeŅmŅuL¨Ņ ŌuL4ŅGŅPGŅSŅ v2&ĢÕĒÕzŸ¨ŅĒŅ v2&ĢÕĒÕzŸēŅžŅPžŅŋŅ v2&ĢÕĒÕzŸ4ŅSŅ0Ÿ¨ŅĒŅ0ŸēŅŋŅ0Ÿ†Đ4ŅuLeŅmŅuLŋŅ ŌuL†ĐŽĐPŽĐ4Ņu@eŅmŅPŋŅ Ōu@†Đ4Ņ1ŸeŅmŅ1ŸŋŅ Ō1Ÿ†ĐŽĐV“eŅmŅV“†ĐŽĐPŽĐŧĐWeŅmŅPĪŅ ŌWŽĐ´ĐW´ĐŧĐwtŸĪŅ ŌW”ĐąĐWĪŅ ŌWøŅŌuL#uL<ŸøŅŌPüŅŌuL#uL<ŸüŅŌPÛĐįĐPįĐ4ŅVŋŅÄŅVũÎĪRSŅ[ŅR[Ņ_ŅqũÎĪrŸSŅ[ŅrŸ[Ņ_Ņq#ŸĪ2ĪudŸ2Ī3Īt`Ÿ”ĪöĪudŸöĪ÷Īt`ŸSŅeŅudŸ€Ņ“ŅudŸĪĪPSŅ_ŅPĪ3ĪōˇŨ”Ī÷ĪōˇŨ€Ņ“ŅōˇŨĪ2ĪuP2Ī3ĪtL”ĪöĪuPöĪ÷ĪtL€Ņ“ŅuP)Ī3ĪP”ĪžĪPžĪöĪuTöĪ÷ĪtP€Ņ“ŅuT¯Ī÷ĪĢŸ€Ņ“ŅĢŸĐĪ÷ĪîĒŸ•ҍŅōˇŨŌˆŌP“ˆŌ7ב“Lךב“ž×$Ø‘“`ŌrŌ‘”#ŸrŌwŌPŌˆŌPˆŌ7בLךבž×$Ø‘Ō7×ōŠæLך×ōŠæž×$ØōŠæ‰ŌšŌ‘#$šŌēŌ‘°äĶ0Ô‘°‰Ō—Ō ‘#$#€Ÿ—ŌžŌPžŌēŌ‘°#€ŸäĶ0Ô‘°#€Ÿ§ŌŠŌPEÔGÔPä͎ÖS­ŸíÖ ×S­ŸL×’×S­Ÿž×ŋ×S­Ÿä͎֑”íÖ ×‘”Lגב”ž×ŋב”ÔˇÖ/¯ŸíÖ ×/¯ŸL×’×/¯Ÿž×ŋ×/¯ŸÔˇÖ‘”íÖ ×‘”Lגב”ž×ŋב”ÔˇÖPŗŸíÖ ×PŗŸL×’×PŗŸž×ŋ×PŗŸÔˇÖ‘”íÖ ×‘”Lגב”ž×ŋב”PÔ\ÔP\ÔgÔ r2&ĢÕĒÕzŸ'Ô8Ô‘#$8ÔgÔ‘°'Ô5Ô ‘#$#€Ÿ5Ô<ÔP<ÔgÔ‘°#€ŸEÔGÔPÔÕVtÖ{ÖVž× ×VgÔÕ‘¤)Õ-ÕP-ÕˇÖ‘¤íÖ ×‘¤Lגב¤ž×ŋב¤gÔÕ‘¤#€Ÿ)Õ-Õp€Ÿ-ÕˇÖ‘¤#€ŸíÖ ×‘¤#€ŸLגב¤#€Ÿž×ŋב¤#€ŸgÔxÔP.ÕBÕPÖ ÖP ÖtÖ‘œy׉בœQÕtÖ‘¤#„Ÿ‡ÖˇÖ‘¤#„ŸíÖ ×‘¤#„ŸLגב¤#„ŸQÕšÕQšÕtÖ‘œ‡ÖŖÖQŖÖˇÖ‘œíÖ ×‘œL׉בœ‰××Q×’בœ\ÕtÖ‘¤#„Ÿ‡ÖˇÖ‘¤#„ŸíÖ ×‘¤#„ŸLגב¤#„Ÿ\Õ_ÕP_ÕtÖ‘¨‡ÖˇÖ‘¨íÖ ×‘¨Lגב¨‹ÕtÖ‘¤#„Ÿ‡ÖˇÖ‘¤#„ŸíÖ ×‘¤#„ŸLגב¤#„Ÿ‹ÕšÕPšÕĸÕ v2&ĢÕĒÕzŸ‡ÖŖÖPŖÖ¯Ö v2&ĢÕĒÕzŸ‰××P×× v2&ĢÕĒÕzŸ‹ÕtÖ‘¨‡ÖˇÖ‘¨íÖ ×‘¨Lגב¨‡ÖŖÖPŖÖ¯Ö v2&ĢÕĒÕzŸ‰××P×× v2&ĢÕĒÕzŸ‡Ö¯Ö0Ÿ‰×’×0ŸŋÕtÖ‘¨¯ÖˇÖ‘¨íÖ ×‘¨L×iב¨y׉ב¨ŋÕĮÕPĮÕtÖ‘˜¯ÖˇÖPíÖ ×‘˜L×iב˜y׉ב˜ŋÕtÖ1Ÿ¯ÖˇÖ1ŸíÖ ×1ŸL×i×1Ÿy׉×1ŸŋÕĮÕV“¯ÖˇÖV“ŋÕĮÕPĮÕüÕW¯ÖˇÖPíÖ ×WL×i×WĮÕôÕWôÕüÕwtŸíÖ ×WL×i×WÔÕņÕWíÖ ×WL×i×WöÖ ×WL×i×WöÖ ×‘˜L×iב˜S×iב¨Y×aב¨#‘¨<ŸY×e×P]×aב¨#‘¨<Ÿ]×e×PÖ'ÖP'ÖtÖVy×~×V ÔÕS­ŸtÖ‡ÖS­Ÿž×ŋ×S­Ÿ ÔÕ‘”tÖ‡Ö‘”ž×ŋב” Ô¨ÔpŸ¨Ô­ÔP´ÔÕ‘DŸtÖ‡Ö‘DŸ´ÔÕ‘”tÖ‡Ö‘”´ÔžÔ‘”#ŸžÔÃÔPÍÔÕĒŽŸtÖ‡ÖĒŽŸÍÔÕ‘”tÖ‡Ö‘”ÍÔÖÔ‘”#ŸÖÔÛÔPâÔÕvŸtÖ{ÖvŸâÔÕ‘”tÖ‡Ö‘”âÔėÔ‘”#ŸėÔņÔPøÔÕ‘DŸtÖ‡Ö‘DŸûÔÕ‘PŸtÖ{Ö‘PŸ{Ö‡ÖVûÔÕPtցÖP ×ŋבDŸĻ×ĩבPŸĩך×Rš×ŋבPŸĻך×PēŌäĶ‘ˇÖíÖ‘ ×)ב’זבŋ×$Ø‘īŌEĶVˇÖÃÖVŋ×Á×V Ø ØVØØVīŌuĶ‘w͑͝ˇÖíÖ‘ ×)ב’זבŋ×$Ø‘īŌ÷ŌP÷ԝ͑ ˇÖíÖ‘ ×)ב ’זב ŋ×$Ø‘ īԝ͑ˇÖíÖ‘ ×)ב’זבŋ×$Ø‘īŌEĶ‘PŸEĶŦĶVŦ͑͝PŸˇÖÃÖ‘PŸÃÖíÖV ×!×V!×%×t%×)בPŸ’×–×Vŋ×$Ø‘PŸÁ×Ûב\ŸÍ×Û×WÍ×Ú×PÛ×îבTŸá×éבLŸé×í×Rí×îבLŸá×í×Påԝ͑HŸˇÖíÖ‘HŸ ×)בHŸ’זבHŸŋ×$Ø‘HŸ-͑͝HŸˇÖíÖ‘HŸ ×)בHŸ’זבHŸ0ĶNĶWN͑͝LŸˇÖÃÖWÃÖíÖ‘LŸ ×)בLŸ’זבLŸ0Ķ<ĶPˇÖŊÖPĶ¯ĶōŠæšĶ¯Ķ‘”¯ĶäĶŧÔŸ¯ĶäĶ‘”ĘĶäĶ‘ĘĶäĶ‘”ĘĶÖĶ‘”#ŸÖĶÛĶP)×7×ōŠæ7×Lב”î× Ø‘HŸôר‘LŸØØRØ Ø‘LŸôרP˛ØČØVČØĘØu`ŸĘØËØt\ŸËØôØVôØöØu`ŸöØ÷Øt\ŸĩØĘØu_ŸĘØËØt[ŸËØöØu_ŸöØ÷Øt[ŸĩØŧØPŧØÃØv<ŸËØרPšØÃØudŸØØâØudŸŋØÃØVŪØâØu`ŸŋØËØPŪØîØP˙ØŲudŸŲ Ųu_Ÿ ŲŲRŲŲu_ŸŲŲP(Ų/Ųu_Ÿ/Ų3ŲR3Ų6Ųu_Ÿ(Ų3ŲP Ų ÚWŒÚ›ÚWĶÚåÚW÷ÚÛW Ų ÚudŸŒÚ›ÚudŸĶÚåÚudŸ÷ÚÛudŸ¨ŲĒŲPåŲ Úu\ŸåŲ Ú0Ÿ ÚfÚu`ŸfÚgÚt\ŸgÚ‹Úu`Ÿ‹ÚŒÚt\Ÿ›Ú°Úu`Ÿ ÚfÚudŸfÚgÚt`ŸgÚ‹ÚudŸ‹ÚŒÚt`Ÿ›Ú°ÚudŸ ÚŒÚ0Ÿ›Ú°Ú0Ÿ/ÚAÚQ›ÚĒÚQĒÚ°ÚuP:ÚXÚu\Ÿ›Ú°Úu\Ÿ:ÚAÚP›ÚĒÚPÖÚåÚu\ŸåÚ÷Úu`ŸåÚęÚudŸęÚņÚPņÚ÷ÚudŸPÚXÚvŸyÚ„ÚvŸSÚXÚu`ŸÚ„Úu`ŸSÚ^ÚPÚŒÚPŗÚĶÚvŸšÚĶÚu`ŸšÚĮÚP=Û‹ÛV“vŨ€ŨV“=Û@Ûp“@ÛBÛw“ZÛvŨ‘ƒŨëŨ‘iÛŽÛ0ŸîÛ=ÜV=Ü^ÜÖ¨Ÿ=Ü^Ü‘D=ÜKÜ‘D#ŸKÜPÜP ÛîÛVîÛ=ÜvŸ Û=Ü䊟 Û=Ü‘D ÛˇÛ‘D#ŸˇÛŊÛPÄÛ=Ü‘DÄÛĐÛ‘D#ŸĐÛÕÛPÜÛ=Ü䊟ÜÛ=Ü‘DÜÛâÛpŸâÛįÛP Ü=ÜQĢŸ Ü=Ü‘D ÜÜ‘D#ŸÜ!ÜPpÜvŨ‘DƒŨĐŨ‘DįŨëŨ‘DÕŨįŨ‘D‡ÜvŨ ÄŸƒŨŨ ÄŸŽŨĐŨ ÄŸįŨëŨ ÄŸ‡ÜvŨ‘DƒŨŨ‘DŽŨĐŨ‘DįŨëŨ‘D ÜvŨ‘ƒŨŨ‘ŽŨžŨ‘ ÜvŨ‘DƒŨŨ‘DŽŨžŨ‘D ÜŦÜ‘D#ŸŦÜąÜPēÜvŨ°ŸƒŨŨ°ŸŽŨžŨ°ŸēÜvŨ‘DƒŨŨ‘DŽŨžŨ‘DÍÜvŨ‘\ŸƒŨŨ‘\ŸŽŨžŨ‘\ŸÍÜvŨ‘DƒŨŨ‘DŽŨžŨ‘DÍÜ×Ü‘D#Ÿ×ÜÜÜPåÜvŨpŗŸƒŨŨpŗŸŽŨžŨpŗŸåÜvŨ‘DƒŨŨ‘DŽŨžŨ‘DôÜvŨ/¯ŸƒŨŨ/¯ŸŽŨžŨ/¯ŸôÜvŨ‘DƒŨŨ‘DŽŨžŨ‘DŨvŨn´ŸƒŨŨn´ŸŽŨžŨn´ŸŨvŨ‘DƒŨŨ‘DŽŨžŨ‘DSŨvŨ‘DƒŨŨ‘DaŨvŨ‘\ŸƒŨŨ‘\ŸdŨvŨ‘DƒŨŨ‘DdŨlŨPƒŨŠŨPŨŽŨ‘\Ÿ•Ũ Ũ‘WŸ Ũ¤ŨR¤ŨŽŨ‘WŸ•Ũ¤ŨPžŨĐŨ‘D=ŪMŪWMŪ\ŪuD\ŪĻŪuXŸĻŪ§ŪtTŸ§ŪˇŪWFŪĻŪuWŸĻŪ§ŪtSŸ§ŪˇŪuWŸFŪJŪP§ŪąŪPJŪĻŪu\ŸĻŪ§ŪtXŸPŪĻŪu\ŸĻŪ§ŪtXŸPŪ‹ŪWPŪ\ŪVPŪvŪVvŪƒŪv|ŸƒŪ¤ŪV\ŪcŪVcŪgŪv|ŸgŪvŪVvŪ…Ūv|Ÿ\ŪgŪuXŸlŪ‹ŪuXŸ\ŪgŪPlŪ}ŪP‹ŪĻŪu\ŸĻŪ§ŪtXŸ‹Ū“Ū udu\4Ÿ‹ŪĨŪWŪ“Ū udu\4ŸŪ›ŪWŌŪŨŪuWŸŨŪáŪRáŪäŪuWŸŌŪáŪP ßQßu“ëāNáu“ÃâÉâu“įßíßPUámáP‰áŒáPââP ßQßuëāNáuÃâÉâu2ß8ßP8ß^ßWëāöāPöāNáWÃâØâW áNáŌĒŸÃâØâŌĒŸ+áNáîĒŸ^ßbßVbßcßtcßgßtgßëāuLŸNá‚âuLŸ•âÃâuLŸÜâPãuLŸ^ßbßuPŸbß}ßV}ß~ßt~ß…ßt…ßëāuPŸNá‚âuPŸ•âÃâuPŸÜâäâVäâPãuPŸmßpßp,Ÿpßzßu#,Ÿmßpßp0Ÿpßzßu#0Ÿ0āKāu#0ŸNáUáp0ŸUá^áu#0Ÿ^ámáq0Ÿââu#0Ÿsßzßu#,Ÿß…ßt…ßëāuPŸNápâuPŸ•âÃâuPŸæâPãuPŸßęßuŧ“Ĩá˛áuŧ“2âpâuŧ“æâ3ãuŧ“ß…ßP“…ßëāu¸“Nápâu¸“•âÃâu¸“æâPãu¸“ßŦßVŦßëāuXŸNá2âuXŸ2â=âV=âpâuXŸ•âÃâuXŸæâîâVîâķâuXŸķâûâVûâPãuXŸ‹ßŦßVŦßëāuXŸNá2âuXŸ2â=âV=â^âuXŸ•âÃâuXŸķâûâVûâPãuXŸ‹ß–ßP–ߝßWßëāu´Ná^âu´•âÃâu´ķâõâWõâPãu´™ßßWßëāu´NáLâu´•âÃâu´ãPãu´™ßßu\ŸßĮßWĮßČßtČßĖßtĖßëāu\ŸNáĨáu\ŸĨá˛áW˛á2âu\Ÿ2â4âW4âLâu\Ÿ•âÃâu\ŸãPãu\Ÿ˛ßëāu´Ná2âu´•âÃâu´ãPãu´˛ßįßu´įßøßudŸøßāu\ŸāāuXŸāëāuPŸNáĨáuPŸĨá˛áu´˛áÅáudŸÅáÕáu\ŸÕáåáuXŸåá2âuPŸ•âÃâuPŸããu´ããu\Ÿããu´ã3ãudŸ3ãPãuPŸ¸ßĀßRĀßëāu@NáĨáu@ĨáŦáRŦá2âu@•âÃâu@ãPãu@¸ßĀßPĨáŦáP4âLâu`Ÿ@âGâudŸGâKâRKâLâudŸ@âKâPĀßëāu\ŸNáĨáu\Ÿ˛á2âu\Ÿ•âÃâu\ŸãPãu\ŸĀßëāudŸNáĨáudŸ˛á2âudŸ•âÃâudŸãPãudŸįßëāudŸNáĨáudŸ˛á2âudŸ•âÃâudŸ3ãPãudŸįßøßudŸøßëāu\ŸNáĨáu\Ÿ˛áÅáudŸÅá2âu\Ÿ•âÃâu\Ÿ3ãPãu\ŸįßøßudŸøßāu\ŸāāuXŸāëāuPŸNáĨáuPŸ˛áÅáudŸÅáÕáu\ŸÕáåáuXŸåá2âuPŸ•âÃâuPŸ3ãPãuPŸđßëāu`ŸNáĨáu`Ÿ˛á2âu`Ÿ•âÃâu`Ÿ3ãPãu`ŸđßøßP˛áŋáPã3ãudŸ%ã3ãu`Ÿ%ã0ãPøßëāu\ŸNáĨáu\ŸÅá2âu\Ÿ•âÃâu\Ÿ3ãPãu\Ÿøßāu\ŸāāuXŸāëāuPŸNáĨáuPŸÅáÕáu\ŸÕáåáuXŸåá2âuPŸ•âÃâuPŸ3ãPãuPŸūßëāudŸNáĨáudŸÅá2âudŸ•âÃâudŸ3ãPãudŸūßāPÅáĪáPāëāuXŸNáĨáuXŸÕá2âuXŸ•âÃâuXŸ3ãPãuXŸāāuXŸāëāuPŸNáĨáuPŸÕáåáuXŸåá2âuPŸ•âÃâuPŸ3ãPãuPŸ āëāudŸNáĨáudŸÕá2âudŸ•âÃâudŸ3ãPãudŸ āāPÕáßáPLâ^âuXŸRâYâuTŸYâ]âR]â^âuTŸRâ]âPããu\Ÿããu`ŸããPāëāuPŸNáĨáuPŸåá2âuPŸ•âÃâuPŸ3ãPãuPŸāëāudŸNáĨáudŸåá2âudŸ•âÃâudŸ3ãPãudŸā"āPåáīáP"āëāuLŸNáĨáuLŸõá2âuLŸ•âÃâuLŸ3ãPãuLŸ(āëāudŸNáĨáudŸõá2âudŸ•âÃâudŸ3ãPãudŸ(ā0āPõá˙áP0āKāu#,ŸNáUáp,ŸUá^áu#,Ÿ^ámáq,Ÿâ)âq,Ÿ0āKāu#0ŸNáUáp0ŸUá^áu#0Ÿ^ámáq0Ÿââu#0ŸYā‹āW‹āëāuTŸââW•âĒâuTŸ3ã5ãW5ãPãuTŸYā]āP]āëāuŧââuŧ•âĒâuŧ3ãPãuŧYā]āpŸ]ābāPbāëāuŧ#Ÿââuŧ#Ÿ•âĒâuŧ#Ÿ3ãPãuŧ#Ÿiā‹āW‹āëāuTŸââW•âĒâuTŸlāëāudŸââudŸ•âĒâudŸlātāPââPtāëāō7 •âĒâō7 tāāuāƒāP‹ā—āP—āëāW•âĒâW§āëāĢŸ•âĒâĢŸČāëāîĒŸNáháuháiátiámátââuNáháu#,Ÿââu#,Ÿ^áháu#,Ÿ^áháuháiátiámát^ámáPmá’áuŧĒâ­âuŧbáháuháiátiámátbámáPmá‰áuŧĒâ­âuŧ­âÁâW˛âÃâudŸ˛âŊâP’áĨáō7 ^âpâuPŸdâkâuTŸkâoâRoâpâuTŸdâoâPpâ‚âuLŸvâ}âuTŸ}ââRâ‚âuTŸvââP‚â•âō7 ;ãJãPĄãÂãVöã äV/ä4äVSãŒãudŸŒã”ãP”ãĄãuTĄãÄãudŸÄãÅã‘\ŸÅãäudŸäät`ŸäQäudŸ}ãĄã‡˛Ÿ}ãŒãudŸŒã”ãP”ãĄãuTļãÄãudŸÄãÅã‘\ŸøãäudŸäät`ŸšãÄãucŸÄãÅã‘[ŸøãäucŸäät_ŸšãÅãPøãäPŌãøã,˛ŸŌãáãudŸáãéãPéãøãuTä4ä!˛ŸääudŸä%äP%ä4äuT<äCäucŸCäGäRGäQäucŸ<äGäPcäĀäuĀäÁät Áäīäuīäđät đä$åucäĀäu ĀäÁätÁäīäu īäđätđä$åu cäiäu`ŸiäĨäVĨäĀäu`ŸĀäÁät\ŸÁäīäu`Ÿīäđät\ŸđäōäVōäåu`Ÿå$åVōäåu`Ÿøäåu_ŸååRååu_ŸøäåP¨äĀäu`ŸĀäÁät\ŸÁäīäu`Ÿīäđät\Ÿ¨äĀäudŸĀäÁät`ŸÁäīäudŸīäđät`ŸĢäĀäu_ŸĀäÁät[ŸÁäīäu_Ÿīäđät[ŸĢä˛äP˛äšäud<ŸÁäĪäP¯äšäu`ŸĐäÚäu`Ÿĩäšäu_ŸÖäÚäu_ŸĩäÁäPÖäįäP‚åŗåWŗå æuT æ ætP æWæuTWæjæu\ŸjæræWrætæuTtæxæWČå æV æ æudŸ æ æt`Ÿ æ*æVËå æu[Ÿ æ ætWŸ æ*æu[ŸËåĪåPæ'æPĪå æu`Ÿ æ æt\Ÿ ææu`ŸÕå æudŸ æ æt`Ÿ ææudŸÕåŲåP ææPŲå æu\Ÿ æ ætXŸŲå æ0Ÿ,æDæudŸ8æ?æu[Ÿ?æCæRCæDæu[Ÿ8æCæPDæVæu`ŸJæQæu[ŸQæUæRUæVæu[ŸJæUæPVæjæu\ŸœæÎæP€ęˆęPœæÎæp€€ęˆęp€­æļæQļæÎæp€# €ęˆęp€# °æÎæRÎæÚæuL€ęęRšæÁæVÁæÎæ p€# #ÎæįuPˇčęuPę€ętL€ęˆę p€# #ˆęęuPęętLëę^ëuP—ë›ëuPšæ įWˇčÕčW€ęŽęWšæÎæQÎæđæuT€ęęQÁæįVˇč>ęV€ęęVęŽęwëęKëV°æļæQļæÎæp€# €ęˆęp€# °æļæqŸļæšæ p€# #Ÿšæ įwŸˇčÕčwŸ€ęŽęwŸÚæŪæRŪæļčuLļčˇčtHˇčÜčuLęëęuLoërëuLƒë—ëuLßæëæuTp)ŸįqčVęëęVį įWįˇč¨ēŸęëę¨ēŸoë—ë¨ēŸįĩčWĩčļčudŸļčˇčt`ŸęëęWoë—ëWį'įw#Ÿ'į,įP9įˇč4ÄŸęëę4ÄŸƒë—ë4ÄŸ9įĩčWĩčļčudŸļčˇčt`ŸęëęWƒë—ëW9į?įqŸ?įDįPQįˇč‰ŗŸęë扺Ÿƒë—ë‰ŗŸQįĩčWĩčļčudŸļčˇčt`ŸęëęWƒë—ëWQįWįqŸWį\įPļįčōõ" čˇčōč" ĢęËęōč" Ëęëęōõ" ƒë—ëōč" cįĩčWĩčļčudŸļčˇčt`ŸęëęWƒë—ëWęĢęudŸ†įˇčô¯ŸĢęëęô¯Ÿƒë—ëô¯Ÿ†į‹įud#Ÿį’įpŸ’į—įPĄįˇčŅŗŸĢęëęŅŗŸƒë—ëŅŗŸĄįŖįud#ŸĒį­įpŸ­į˛įPļįļčudŸļčˇčt`ŸĢęëęudŸƒë—ëudŸËęëęudŸ×įˇčĄŗŸĢęËęĄŗŸƒë—ëĄŗŸ×įÜįud#ŸāįãįpŸãįčįPīįˇčŅŗŸĢęËęŅŗŸƒë—ëŅŗŸīį÷įpŸ÷įüįPčˇčōč" ĢęËęōč" ƒë—ëōč" čļčudŸļčˇčt`ŸĢęËęudŸƒë—ëudŸĢęËęudŸ&čˇčpÄŸƒë—ëpÄŸ&č+čud#Ÿ/č2čpŸ2č7čPAčˇč˜ÄŸƒë—ë˜ÄŸAčCčud#ŸGčJčpŸJčOčPYčˇčŋŗŸƒë—ëŋŗŸYč[čud#Ÿ_čbčpŸbčgčPœčļčudŸļčˇčt`ŸqëƒëudŸĐčÕčWáč€ę¨ēŸëęoë¨ēŸ—ë›ë¨ēŸáč~ęW~ęęudŸę€ęt`ŸëęoëW—ë›ëWáčķčw#ŸķčøčPé€ęčēŸëę]ëčēŸé~ęW~ęęudŸę€ęt`Ÿëę]ëWé éqŸ ééPjéĸéōö! ĸé€ęō)" ëę ëō)" +ëKëōö! Kë]ëō)" é~ęW~ęęudŸę€ęt`Ÿëę]ëW ë+ëudŸ:é€ęô¯Ÿëę ëô¯Ÿ+ë]ëô¯Ÿ:é?éud#ŸCéFépŸFéKéPUé€ęÅŗŸëę ëÅŗŸ+ë]ëÅŗŸUéWéud#Ÿ[é^épŸ^écéPjéęudŸę€ęt`Ÿëę ëudŸ+ë]ëudŸ+ëKëudŸé€ę×ŗŸëę ë×ŗŸKë]ë×ŗŸé’éud#Ÿ–é™épŸ™éžéPĸé€ęō)" ëę ëō)" Kë]ëō)" ĸéęudŸę€ęt`Ÿëę ëudŸKë]ëudŸëę ëudŸÃé€ęS­ŸKë]ëS­ŸÃéČéud#ŸĖéĪépŸĪéÔéPŪé€ęØÄŸKë]ëØÄŸŪéāéud#ŸäéįépŸįéėéPöé€ęÅŸKë]ëÅŸöéøéud#Ÿüé˙épŸ˙éęPę€ęXÅŸKë]ëXÅŸęęud#ŸęępŸęęP&ę€ę˜ÅŸKë]ë˜ÅŸ&ę(ęud#Ÿ,ę/ępŸ/ę4ęPięęudŸę€ęt`Ÿ]ëoëudŸšæ įwŸˇčÕčwŸ€ęŽęwŸÍë×ëR×ëIėuD]ėuėuDŨëãëPãëZėV]ė¯íVōíôíVöíøíVúíüíVˇëIėW]ėđėWöíúíWė$ėP$ė(ėt(ė,ėtGėIėP]ėkė0ŸGėIėu`Ÿ]ėāėu`ŸāėæėRæėūíu`ŸGė]ė0Ÿdėūí0ŸGėIėudŸdėūíudŸ†ėŨíéŗŸōíúíéŗŸ†ėĪíuDĪíŨíu\ŸōíúíuD†ėŒėqŸŒė‘ėP’ėÎíō›/ ōíöíō›/ ’ėÎíuDōíöíuD’ėđėW’ė•ėuD#ŸėĨėqŸĨėĒėPˇėÎíÔÅŸōíöíÔÅŸˇėŊėqŸŊėÂėPíĒíuTŸ!í`íW`í†íuXŸ†í™íW™íĒíuXŸ!í-íP†í–íP-í†íu\Ÿ™íĒíu\Ÿ@í†íu`Ÿ™íĒíu`Ÿ@í†íudŸ™íĒíudŸ@í†í0Ÿ™íĒí0Ÿhí†íW™íĒíWmí†íu\Ÿ™íĒíu\ŸmíuíP™í§íP¸íÎíuTŸžíÉíuSŸÉíÍíRÍíÎíuSŸžíÍíPÎíŨíu\ŸŨíōíu`ŸŨíâíudŸâíéíPéíōíudŸIîYîVYîZîutŸZî[îtpŸ[îmîVmînîutŸnîoî‘lŸLîZîusŸZî[îtoŸ[înîusŸnîoî‘kŸLîgîPwî‚îusŸ‚î†îR†îîusŸwî†îP›Ē›‘Ē›ĩ›V“W“ž›Ė›V“W“ū›œV“W“ž›Ė›uū›‹œuœu#už›Ė›u “W“ū›8œu “W“8œhœu “uu"Ÿ“hœlœu “W“lœ‹œu “uu"Ÿ“œu “W““W“#u “W“ž›Ė›uū›‹œuœu#u"œ)œPGœdœVJœUœucŸUœYœRYœdœucŸJœYœPlœ‚œudŸrœ}œucŸ}œœRœ‚œucŸrœœPšœ֜VŧœĮœucŸĮœ˜R˜֜ucŸŧœ˜PīœudŸõœucŸRucŸõœP¸î&īW'ī‹īW0J‘JUV“W“^lV“W“žĻV“W“^luž-žu2ž˛žuˇžĮžu^lu “W“ž؝u “W“؝ žu “uu"Ÿ“ žžu “W“ž-žu “uu"Ÿ“2ž˛žu “W“˛žˇž“W“ˇžĮžu “W“^luž-žu2ž˛žuˇžĮžuɝPįžVęõucŸõųRųžucŸęųPž$žudŸžžucŸž#žR#ž$žucŸž#žP[žzžV^žižucŸižmžRmžzžucŸ^žmžP“žŠžudŸ™ž¤žucŸ¤ž¨žR¨žŠžucŸ™ž¨žP¸īĸđVĸđĨđ‘ĨđŪđVĀī¤đUĨđŪđUŪīßīPßīŖđWĨđŪđWķīöīt0đ;đP;đšđ‘XÎđŪđ‘XĀīĸđVĸđĨđ‘ĨđŪđVđ¤đUđĨđ0ŸĐžęž‘ęžõžV“W“ūž ŸV“W“>ŸFŸV“W“ūž Ÿu>Ÿ˟uПN uS c uūž Ÿu “W“>ŸxŸu “W“xŸ¨Ÿu “uu"Ÿ“¨ŸŦŸu “W“ŦŸ˟u “uu"Ÿ“ПN u “W“N S “W“S c u “W“ūž Ÿu>Ÿ˟uПN uS c ubŸiŸP‡Ÿ¤ŸVŠŸ•ŸucŸ•Ÿ™ŸR™Ÿ¤ŸucŸŠŸ™ŸPŦŸŸudŸ˛ŸŊŸucŸŊŸÁŸRÁŸŸucŸ˛ŸÁŸPųŸ VüŸ ucŸ   R   ucŸüŸ  P/ E udŸ5 @ ucŸ@ D RD E ucŸ5 D PņōVōō‘ō;ōVņ ņP ņoņUoņō‘Xō.ōU.ō;ō‘X5ņ6ņP6ņōWō;ōW‡ņ“ņt“ņ¨ņ‘P¨ņĢņtĢņ´ņ‘P´ņĮņtĮņÛņ‘PÛņķņtķņ ō‘P ōōtōō‘P.ō3ōt3ō9ō‘P9ō;ōtņōVōō‘ō;ōV‡ņ‰ņ0Ÿ‰ņ˜ņU˜ņœņ‘@œņĨņuŸĨņōU.ō;ōUōō‘Xōō0Ÿ€ōõV0õëõVîõ#÷V‘ōĄō0ŸĄō¤ōP¤ō]ķW]ķcķPcķƒķW0õ@õPīö÷W¸ōŧōPĘōĐōp0.ŸĐōõuŧ0.Ÿ0õíõuŧ0.Ÿíõîõt¸0.Ÿîõ0÷uŧ0.Ÿķƒķ0Ÿƒķõuģ0õ@õ0Ÿ@õÍõuģîõīöuģ÷÷0Ÿ÷0÷uģ*ķ0ķuLjķxķPxķõu´@õÍõu´îõīöu´÷÷P÷÷Ôˇ÷0÷u´rķxķRxķõu˜@õÍõu˜îõīöu˜÷÷R÷0÷u˜ķōûōP÷ ÷PûōķPķķpŸķķqŸķķqŸķõV0õëõVîõīöV÷#÷Vrķƒķ0ŸƒķõuP@õ°õuPŗõĘõPĘõÍõuPîõīöuP÷÷0Ÿ÷0÷uPÁķõu@@õÍõu@îõīöu@÷0÷u@ƒķõV@õÍõVîõīöV÷#÷Vƒķõvԟ@õÍõvԟîõīövԟ÷#÷vԟŽķ•ķP“•ķĨķuT“ĨķŠķuT#Ÿ“ŠķŗķuT“•ķ ķuT ķ¤ķtõķõvȟûķôW“ôôwŸ“ôôW“ô-ôW“-ô3ôw|Ÿ“ôôRô/ôR_ôˆôWˆôŽôwŸŽôĄôW_ôˆôWˆô‘ôwŸ_ô‘ôVxô‚ôQ_ô‘ô ˙Ÿ_ô‘ôv⟰ôõvȟŗôõvȟŗôõv˟ČôØôRÛôīôR~õÍõVîõOöVmöīöV÷#÷V0öOöVöõöWö%öwŸmöīöW÷0÷Wö%öWOö`övā`ödöPOömöväŸp Š ‘Š • V“W“ž Ŧ V“W“Ū æ V“W“ž Ŧ uŪ mĄurĄōĄu÷Ąĸuž Ŧ u “W“Ū Ąu “W“ĄJĄu “uu"Ÿ“JĄNĄu “W“NĄmĄu “uu"Ÿ“rĄōĄu “W“ōĄ÷Ą“W“÷Ąĸu “W“ž Ŧ uŪ mĄurĄōĄu÷ĄĸuĄ ĄP'ĄFĄV*Ą5ĄucŸ5Ą9ĄR9ĄFĄucŸ*Ą9ĄPNĄdĄudŸTĄ_ĄucŸ_ĄcĄRcĄdĄucŸTĄcĄP›ĄēĄVžĄŠĄucŸŠĄ­ĄR­ĄēĄucŸžĄ­ĄPĶĄéĄudŸŲĄäĄucŸäĄčĄRčĄéĄucŸŲĄčĄP3÷4÷ pˇ<0.Ÿc÷l÷đˇl÷x÷Px÷z÷đˇc÷€÷QŒ÷Š÷ōMO Š÷ø˜´ŸÆ÷Ķ÷PĶ÷øWÆ÷øōMO â÷é÷Pé÷øVÍ÷øŠŸÍ÷Ķ÷PĶ÷øWNøRøP“RøųuL“ųųtH“ųÎųuL“ÎųĪųtH“ĪųėûuL“NøRøPRøųuLųųtHųÎųuLÎųĪųtHĪųėûuL[øaøPaøĄøuTųųPųlųuTĪųTúuTû'ûuTOûbûuTŠûŒûuTœûĄûuT'ųlųŌĒŸOûbûŌĒŸHųlųîĒŸøƒøPƒøųuHųųtDlųÎųuHÎųĪųtDĪųOûuHbûėûuHøƒøp€ŸƒøųuH#€ŸųųtD#€ŸlųÎųuH#€ŸÎųĪųtD#€ŸĪųOûuH#€ŸbûėûuH#€Ÿ„ø—øPĪųŲųP•ú™úP™úûuDĄûąûuDčų'ûuH#„ŸGûOûuH#„ŸŠûėûuH#„Ÿčų1úR1úûuDûûRû'ûuDGûOûuDŠûœûuDœû ûR ûėûuDķų'ûuH#„ŸGûOûuH#„ŸŠûėûuH#„ŸķųöųPöų'ûuPGûOûuPŠûėûuP"ú'ûuH#„ŸGûOûuH#„ŸŠûėûuH#„Ÿ"ú1úP1ú<ú v2&ĢÕĒÕzŸûûPû'û v2&ĢÕĒÕzŸŠûŒû v2&ĢÕĒÕzŸœû ûP ûĄû v2&ĢÕĒÕzŸ"ú'ûuPGûOûuPŠûėûuPûûPû'û v2&ĢÕĒÕzŸŠûŒû v2&ĢÕĒÕzŸœû ûP ûĄû v2&ĢÕĒÕzŸû'û0ŸŠûŒû0ŸœûĄû0ŸTúûuPGûOûuPĄûėûuPTú^úP^úûu@GûOûPĄûėûu@Túû1ŸGûOû1ŸĄûėû1ŸTú^úV“GûOûV“Tú^úP^úŒúWGûOûPąûėûW^ú„úW„úŒúwtŸąûėûWdúúWąûėûWÚûâûuP#uP<ŸÚûæûPŪûâûuP#uP<ŸŪûæûPĢúˇúPˇúûVĄûĻûVĄøĖøu ĖøŅøQ'û6ûu °øĖøu ĖøŅøQ°øŊøPŊøĖøuP#ĖøŅøpxŸ´øĖøu ĖøŅøQ´øŊøPŊøĖøuP#ĖøŅøpxŸäøųōnQ lųĪųōnQ bûuûōnQ äøųuLųųtHlųÎųuLÎųĪųtHbûuûuLūøųPlųvųPvųÎųuTÎųĪųtPbûuûuT‡ųĪųĢŸbûuûĢŸ¨ųĪųîĒŸwûŠûōnQ ķûgüu\ŸgühütXŸhüŽüu\ŸŽüütXŸüÂüu\Ÿķû+üudŸ+ü3üP3ügüudŸgühüt`ŸhüŽüudŸŽüüt`ŸüÂüudŸ(üfüWfügüuXŸgühütTŸhüüWüŽüuXŸŽüütTŸŦüŽüWŽüÂüuXŸ(ü+üudŸ+ü3üP3ügüudŸgühüt`ŸhüŽüudŸŽüüt`ŸŦüÂüudŸ:üfüWfügüuXŸgühütTŸhüüWüŽüuXŸŽüütTŸ=ügüuWŸgühütSŸhüŽüuWŸŽüütSŸ=üAüPhüwüPYügüu\ŸgühütXŸzüŽüu\ŸŽüütXŸYügüudŸgühüt`ŸzüŽüudŸŽüüt`Ÿ\ügüuXŸgühütTŸzüŽüuXŸŽüütTŸ\ühüPzü†üP‘üŦüu\Ÿ‘üŦüudŸ—üžüuWŸžüĸüRĸüŦüuWŸ—üĸüP´üģüuWŸģüŋüRŋüÂüuWŸ´üŋüPĸ'ĸ‘'ĸ‚ĸW„ĸˆĸWŠĸŒĸWĸ/ĸu/ĸzĸV„ĸøĸV/ĸrĸWrĸzĸwlŸ„ĸˆĸWŠĸŒĸW/ĸuĸVuĸzĸvlŸ„ĸøĸV4ĸoĸW„ĸˆĸWŠĸŒĸW4ĸoĸV„ĸøĸVŽĸŠĸv Ÿšĸ¤ĸugŸ¤ĸ¨ĸR¨ĸŠĸugŸšĸ¨ĸPŠĸžĸvŸ¯ĸˇĸugŸˇĸģĸRģĸžĸugŸ¯ĸģĸPĮĸëĸVöĸøĸVĮĸĪĸuĮĸÕĸuÕĸŲĸtŪĸæĸuĪĸÕĸuÕĸŲĸt6Ŗ‘Ŗuw§‚§u‰§š§už§çu6Ŗ|ŖvlŸw§‚§vlŸ‰§çvlŸ6Ŗ|ŖVw§‚§V‰§çV:Ŗ|ŖvlŸw§‚§vlŸ‰§çvlŸ:Ŗ|ŖVw§‚§V‰§çV‰§Ą§v Ÿ•§œ§uTŸœ§ §R §Ą§uTŸ•§ §PĄ§ž§vŸ§§ާuTŸŽ§˛§R˛§ž§uTŸ§§˛§PˆŖŧŖWŧŖđŖwpŸ§§wpŸ*§3§wpŸm§u§WˆŖ›¤uTŸŖ¤Á¤uTŸ§T§uTŸm§w§uTŸ*§B§u`Ÿ6§=§uSŸ=§A§RA§B§uSŸ6§A§PB§T§uXŸH§O§uSŸO§S§RS§T§uSŸH§S§PĐŖŨŖplŸŨŖđŖ u#DŸĐŖĶŖpXŸĶŖÖŖQÖŖŨŖpXŸŨŖđŖ u#(ŸĐŖđŖu ĐŖ›¤0ŸŖ¤Á¤0Ÿ§§0Ÿ§*§0ŸĐŖŨŖplŸŨŖđŖ u#DŸđŖ ¤v|Ÿ ¤/¤vpŸ/¤1¤wŸĐŖĶŖpXŸĶŖÖŖQÖŖŨŖpXŸŨŖđŖ u#(ŸđŖ ¤vhŸ ¤/¤v\Ÿ/¤1¤w|ŸéŖđŖRđŖ ¤vhŸ ¤/¤v\Ÿ/¤1¤w|ŸđŖ ¤v|Ÿ ¤/¤vpŸ/¤1¤wŸüŖ1¤WüŖ ¤V ¤/¤vtŸ/¤1¤wŸ ¤¤vtŸ¤¤P¤¤t¤¤t¤ ¤vtŸ ¤/¤vhŸ/¤1¤wŸ ¤¤vŸ¤¤P¤ ¤vŸ ¤/¤v|Ÿ/¤1¤wŸ¤¤vxŸ¤&¤P&¤/¤vlŸ/¤1¤w Ÿ¤ ¤v Ÿ ¤/¤V/¤1¤w Ÿ1¤›¤uTŸŖ¤Á¤uTŸ1¤A¤u A¤D¤PD¤I¤Q<¤›¤uXŸŖ¤Á¤uXŸ<¤A¤u #ŸA¤D¤pŸD¤I¤PU¤›¤u`ŸŖ¤Á¤u`ŸU¤]¤q Ÿ]¤b¤Ph¤›¤udŸŖ¤Á¤udŸh¤n¤pŸn¤s¤P€¤›¤uTŸŖ¤Á¤uTŸ€¤›¤udŸŖ¤Á¤udŸƒ¤›¤uSŸŖ¤Á¤uSŸƒ¤‡¤PŖ¤ǤP‡¤›¤u`Ÿ­¤Á¤u`Ÿ¤›¤uSŸ­¤Á¤uSŸ¤‘¤P­¤´¤P‘¤›¤uXŸˇ¤Á¤uXŸ—¤›¤uSŸˇ¤Á¤uSŸ—¤›¤Pˇ¤ž¤Pã¤û¤vDŸÜĨáĨvDŸķϧvDŸû¤ĀĨu@áĨâĻu@]§m§u@‚§‰§u@çß§u@û¤;Ĩu@;ĨWĨ0ŸWĨlĨWlĨĀĨu´áĨ.Ļu´.Ļ3Ļu@3Ļ5ĻW5Ļ:Ļ0Ÿ:ĻyĻu@ŒĻēĻWēĻÆĻ0Ÿ]§m§u@çß§u@Á¤§ō{‚ ]§m§ō{‚ ‚§‰§ō{‚ çß§ō{‚ Á¤§1Ÿ]§m§1Ÿ‚§‰§1ŸÃ§ß§1ŸÁ¤ ĨuĀĨáĨuâϧuŲ¤ã¤1Ÿã¤ô¤QÃĨáĨQâϧQҤ§ōķf ]§m§ōķf ‚§‰§ōķf çß§ōķf Ų¤ĀĨōŽ_ ËĨâĻōŽ_ îϧōŽ_ ]§m§ōŽ_ ‚§‰§ōŽ_ çß§ōŽ_ 㤠ĨuÜĨáĨuķϧuė¤û¤uė¤û¤0Ÿė¤û¤u¸û¤ Ĩuû¤0ĨW0Ĩ;ĨwpŸ.Ļ3ĻwpŸ:ĻCĻwpŸ]§f§Wk§m§Wçß§Wû¤ū¤u@v"Ÿū¤qĨV.ĻyĻVŒĻŖĻVēĻŌĻV]§m§Vçß§VĨ0ĨW0Ĩ;ĨwpŸ.Ļ3ĻwpŸ:ĻCĻwpŸ]§f§Wk§m§Wçß§WĨ;ĨV.Ļ3ĻV:ĻyĻV]§m§Vçß§V:ĻRĻv ŸFĻMĻuTŸMĻQĻRQĻRĻuTŸFĻQĻPRĻyĻvŸXĻ_ĻuTŸ_ĻcĻRcĻyĻuTŸXĻcĻP;ĨĀĨu@áĨ.Ļu@3Ļ:Ļu@ŒĻÆĻu@;ĨDĨu GĨIĨtIĨMĨt;ĨĀĨ1ŸáĨ.Ļ1Ÿ3Ļ:Ļ1ŸŒĻÆĻ1ŸWĨ‚ĨW3Ļ5ĻWŒĻēĻWWĨXĨu ^ĨbĨtWĨĀĨ1ŸáĨ.Ļ1Ÿ3Ļ5Ļ1ŸŒĻēĻ1ŸqĨŠĨQŠĨĀĨuDáĨúĨuDqĨŠĨVqĨĀĨVáĨ.ĻVŠĨ§ĨV§ĨŦĨvlŸŦĨĀĨVáĨõĨVõĨúĨvlŸŠĨ§ĨvŸ§ĨŦĨv|ŸŦĨĀĨvŸáĨõĨvŸõĨúĨv|ŸŠĨŦĨuTŸ˛ĨĀĨuTŸáĨúĨuTŸ˛ĨŊĨPŠĨ§Ĩv Ÿ§ĨŦĨvxŸáĨõĨv ŸõĨúĨvxŸ–ĨŦĨuTŸáĨúĨuTŸ–ĨšĨPëĨōĨPšĨ§ĨvŸ§ĨŦĨvpŸáĨëĨvŸõĨúĨvpŸ ĨŦĨuTŸáĨëĨuTŸõĨúĨuTŸ Ĩ¤ĨPáĨčĨPúĨĻQūĨĻQŌĻÛĻu@yχĻu@œĻĨĻu@ĨĻŦĻVŦϰĻt°ĻąĻvlŸąĻēĻVĨĻŦĻVŦϰĻt°ĻēĻvlŸÆĻŌĻVęü&ũW&ũGũu GũHũtHũdũWdũ„ũu ‰ũ¨ũu ĶüGũuGũHũtHũ„ũu‰ũ¨ũuōü@ũubũ„ũu‰ũ¨ũuōü&ũW&ũ@ũu bũdũWdũ„ũu ‰ũ¨ũu ōü7ũVbũ¨ũVöü&ũW&ũ7ũu bũdũWdũ„ũu ‰ũ¨ũu öü7ũVbũ¨ũVmũ‰ũvŸsũ{ũugŸ{ũũRũ‰ũugŸsũũP—ũĄũugŸĄũĨũRĨũ¨ũugŸ—ũĨũPúũ6ūW6ūWūu WūXūtXūxūWxū˜ūu ūŧūu ãũWūu# ŸWūXūt# ŸXū˜ūu# Ÿūŧūu# ŸūPūu# Ÿvū˜ūu# Ÿūŧūu# Ÿū6ūW6ūPūu vūxūWxū˜ūu ūŧūu ūGūVvūŧūVū6ūW6ūGūu vūxūWxū˜ūu ūŧūu ūGūVvūŧūVūūvŸ‡ūūugŸū“ūR“ūūugŸ‡ū“ūPĢūĩūugŸĩūšūRšūŧūugŸĢūšūPęūõū‘#õūųūp´~Ÿ,¤,€ˇŸ¤,í,lˇŸ ĻĒĩd0l0‹0Ž0‘0–0´0ŧ0Û0Ū0á0æ01 1+1.11161T1\1{1~11†1¤1Ŧ1Ë1Î1Ņ1Ö1ô1ü122!2&2Ô3Ü3˙344 4ˆ4‹4—4å4î4ō4ˆ4‹4—4å4ˆ4‹4—4œ4Ō4Õ4Ü4á45o5€5’5°5Ä5Đ5Ö5Ø5Û5Đ5Ö5Ø5Û5Đ5Ö5Ø5Û5āæęũīũõũLRW¯[pw…ˆ[p}…ˆÜâįGëë —¤§Ŧœ¤§Ŧø5ú56ã6î6ö67‚7ø5ú56ã6î6ö67797‚76“6˜6ã6î6ö67797‚76(6;6K6P6V6Z6w677P6V6Z6g677P6V6Z6_6w6€6ƒ6†6€6ƒ6†6‘6˜6›66¨6€6ƒ6†6‰6‰6‘6˜6›66¨6¨6É697P7¨6¸697P7É6Ō6Õ6Ø6Ō6Õ6Ø6ã6î6ö6Ō6Õ6Ø6Û6Û6ã6î6ö6ĸ7Ļ7Ē7`8ĸ7Ļ7ˇ7`8Ø7į7ę7 88`8Ø7ā7E8`8†8“8•8–8™8ĸ8°8ŧ8Á8Ę8īũEõũE8Eí8999Z9h9€99`9h9€99§9Ö9č9$:ĸ=§=ļ=đ=@@"@G@@@"@$@*@-@@@"@$@$@*@/@2@V@Y@g@>AKASAbA™AV@Y@g@t@›@Ą@¤@0A›@Ą@Ļ@Š@°@Ã@Õ@A A.AAA A.A0A>AKASA6A>AKASAæAęAíAōAöA‹BđAōAöA€BüAB B$B+BlBoBtBüAB BB+B>BüAB BB1B>BBB>BYBBB>BDBBBDBYBB$BYBlBoBtBB BYB_B B$B_BlBoBtBļBēBŊBÂBÆB[CĀBÂBÆBPCĖBĐBÚBôBûB|A|D|>|A|D|} }2}\|| }2}k|€| }2}t|€| }2}Æ}Ō}ã}¤€§€Ē€¸€¸Æ}Ō}ã}O¸Æ}Ō}ã}û}~~ ~;~û}~~ ~;~˛~¸~Å~š¸û}~~ ~;~p~Å~Ī~Ō~ú~ "gÅ~Ī~Ō~ú~ "?RX^gĄ¸€ 7“Ą¸€ 7“¸€ 7¸€Ņ€ā€ 7ģ€Ŋ€Àŀ27ŀҀ  2ā€ 2Ą¤°ģĄ¤°ģĄ¤°ģÂĐÖŲĐÖŲ¤€ €A€ €$€ €$€ ƁˁāįíŅ„Ԅׄč„č…ƁˁāįíŠƒ–ƒ™ƒ…č…Ɓˁāįí‚ ‚#‚)‚D‚‚ ‚#‚)‚D‚ģ‚Á‚΂ʅč…‚ ‚#‚)‚D‚y‚΂؂ۂƒ ƒƒƒ%ƒ+ƒpƒ΂؂ۂƒ ƒƒƒ%ƒ+ƒHƒ[ƒaƒgƒpƒŠƒ–ƒ ƒŖƒЃˇƒč„@…P…g…Ѓˇƒč„@…P…g…Ѓˇƒč„@…P…g…Ѓŗƒč„@…P…g…č„……@…P…g…ë„í„ķ„õ„b…g…õ„……@…P…b……@…P…b…ˇƒēƒÃ΃ˇƒēƒÃ΃ˇƒēƒÃ΃ēƒŊƒáƒīƒŊƒÃ΃؃īƒũƒ„„ũƒ„„Ņ„@…P…-„n„@…P…<„Q„@…P…E„Q„@…P…z„€„Š„ „ &*Ths/=hs5=hsĩÃāëģÃāë 369369DPX369<<DPXč 0 ] û 0 <   0 < z ™ § Å ä į í + 9 W ä į í õ û ü õ û ˙   †2†@†ˇX†\†_†e†\†_†h†k†Ĩ††Ɇˆg‡ƒ‡ކ´†ˇ††Ɇˆg‡i‡o‡r‡i‡o‡r‡ƒ‡†ɆˆچX‡g‡†ÆˆΆÆɆΆچX‡g‡ø†ũ†‡‡‡‡ ‡&‡)‡,‡/‡1‡4‡7‡1‡4‡=‡@‡į‡ë‡î‡f‰i‰l‰€‰܉ ˆˆž‰܉ˆ0ˆ8ˆ€ˆƒˆˆˆž‰܉OˆUˆVˆfˆlˆoˆfˆlˆoˆ€ˆƒˆˆˆfˆlˆoˆrˆrˆ€ˆƒˆˆˆĄˆ§ˆLjf‰”‰ωŋˆňˈ‰”‰ωԈ鈔‰ωŨˆéˆ”‰ωô‰ü‰ū‰Šü‰ū‰ŠfŠxŠãŠ$Š>ŠAŠDŠ$Š-Š8Š>ŠAŠDŠ>ŠAŠDŠXŠĩŠĊ>ŠAŠDŠGŠGŠXŠĩŠĊxŠ…ŠˆŠ™Š{Š…ŠŠŠŠ“Š™Šr‹†‹‰‹Œ‹r‹{‹€‹†‹‰‹Œ‹†‹‰‹Œ‹—‹ ‹¨‹†‹‰‹Œ‹‹‹—‹ ‹¨‹ŒŒŒŒŒ ŒŒŒŒŒŒŒŒ'Œ0Œ8ŒŒŒŒŒŒ'Œ0Œ8Œ°ŒēŒ 0Ž‘’œĨ¨œĨ¨¯ĖāœŸ¨ĢŸĨĢ¯Ėā¯šÍĖĩšÍĖūŽŽ ŽŽŽ ŽŽ÷Ž /ŒĩĀďĮɏˏЏPTXZPTXZPTXZf r ƒ ; > A P 8f r ƒ    Ö 8f r ƒ › Ą ē Ā Û › Ą ē Ā Û = C M 8› Ą ē Ā Û  S { ~ ’ ļ  S { ~ ’ ļ Ų  g P p € Ā > O U X O U X g € ¤ O U X [ [ g € ¤ g s y | s y | ; p € Ŗ ä p € ˛ Į p € ģ Į p € ¨ĐĮːҐ ‘¨ސŗų‘\‘ƒ‘‘”‘—‘š‘œ‘Ą‘0’4’8’:’0’4’8’:’0’4’8’:’FRc  kFRcéėīĢFRc{š ģ{š ģ -ô{š ģđ0NWu„Ī0NWu„§ņA @PĢ5k)/2)/2A7@PĢ)/255A7@PĢ7@PĢPf€Ģ5k5k5<?H`kARUXRUX@Ppą@P”@Pˆ”@Pd’g’j’€““ ”d’g’j’u’‰’Œ’’€““¸“ۓ ”°’ü’ “¸“đ’ü’ “¸“G“J“M“X““ “G“J“M“P“P“X““ “X“h“k“p“^“h“k“p“‡žŦĘ*”Š”¸”Į”ؔŸ•D”]”`”c”~•Ÿ•~••‡•Š••‡•Š•Ÿ•q”‚”‹”Ž”(•B•(•*•0•3•*•0•3•B•‚”‹”Ž”•”蔸”‚”…”Ž”‘”…”‹”‘”•”蔸”•”Ÿ”ø” •›”Ÿ”ø” •Ÿ”Š”ؔč”Ÿ”Š”ؔč”Ĩ”Š”ؔč”ϕЕˇ•ē•Ŋ•ī•–X–l–Ĩ–å•ī•P–X–ë•ī•P–X––––)–3–<–?–P–3–6–?–B–6–<–B–P–‰–Œ–’–•–Œ–’–•–Ĩ–ęėņˆ`ęėņ 8ĸ¸#°æHđķôū ū ŊÔū   ŊÔ#°Ŋ#°Ŋ!!38Fĸ¸#1æôFX>Nm~„~„Ž‘”Ž‘”°Ž‘”—z Ž‘—Č 2HģUŒģŒ–Ÿĸ–Ÿĸ­bz–™ĸĨ™ŸĨ­bz­ģUbŗģUbģžÄĮžÄĮŲČÖ2HģÉŒšÖčÖæ§ģ#&)#&)369369U369<*apąĀ*ÍŪáäŪáäîņôîņô îņô÷ĻŅÔ×PpŠŽąŅÔ×PpˇÃÆÉÔ×PpÔ×SVYpŅÔ×pĮņ  p€   p€Š’— [å2JMPJMP[ JMPSS[ &QTWĐđ).1QTWĐđ7CFITWĐđTWĶÖŲđQTW•đGq„‡Š„‡Š•đ„‡Š•𠀑”—‘”—Ø e ¯ĮĘÍĮĘÍØ  ĮĘÍĐĐØ  F—L—Z—^—a—ų™š››Īžŗá—ä—į—á—ä—į—˜˜˜á—ä—į—ë—ņ—˜˜˜˜˜˜#˜#˜@˜C˜D˜@˜C˜D˜W˜]˜_˜W˜]˜_˜€˜“˜–˜ĸ˜´˜ˇ˜¸˜ĸ˜§˜­˜´˜ˇ˜¸˜´˜ˇ˜¸˜И™ŋ™šš›a›tžĪž™™!™b™›(›tž”ž$™b™›(›tž”ž:™=™>™H™Q™T™H™Q™T™b™›(›H™K™T™W™K™Q™W™b™›(›tžwž}ž€žwž}ž€ž”žb™§™(›a›ŗžĪž‚™•™˜™›™•™˜™›™§™(›5›•™˜™›™ž™ž™§™(›5›B›E›G›L›§™ŋ™šš§™ŋ™šš§™ŋ™ššיڙ"#0יڙ"#0ڙį™ę™í™ڙį™ę™í™į™ę™í™ų™››į™ę™í™đ™đ™ų™››ŖšϚ¨šƚŖšϚ¨šƚ›Tœ:G՝<ž´›ē›Ŋ›՛؛ۛ´›ē›Ŋ›Ā›ƛ՛؛ۛ՛؛ۛ)œ:G՝čú<žū›œœœū›œ œ œœœœ)œ:Gœœœ œ œ)œ:Gbœúœ0:Gž՝pœvœyœˆœ‹œŽœpœvœyœ|œ‚œˆœ‹œŽœˆœ‹œŽœΜ0:Gož՝¨œÁœĜĮœ¨œąœ´œˇœÁœĜĮœΜ0:ÁœĜĮœƜƜΜ0:Ļ Í Đ Ķ P!p!ŗ Ā à Ä Į Í Đ Ķ P!p!Đ Ķ P!\!b!p!Í Đ Ķ !p!Į!í !!!!!!!p!€!!!! ! !!p!€!Š!!’!—!""""J"""""J"""""J"Ÿ!ŸœŸŦŸ ŸŸŸ!ŸœŸŸŸĨŸ¨ŸŸŸĨŸ¨ŸŦŸ!Ÿ?ŸHŸKŸīŸ  *Ÿ?ŸHŸKŸīŸōŸøŸũŸōŸøŸũŸ  ?ŸHŸKŸRŸpŸxŸ?ŸBŸKŸNŸBŸHŸNŸRŸpŸxŸRŸ\ŸxŸŸRŸXŸxŸ~ŸXŸ\Ÿ~ŸŸ& ˇ Ā Č Đ ũ l o r x Ļ Š Ŧ ˇ Ā Č Ļ Š Ŧ ¯ ¯ ˇ Ā Č ĄBŖPŖfŖiŖlŖ€ŖEĻgĸpĸsĸ~ĸ€ŖŖgĸjĸsĸvĸjĸpĸvĸ~ĸ€ŖŖ~ĸŒĸŖ Ŗ„ĸŒĸŖ ŖŒĸšĸ Ŗ°Ŗ’ĸšĸ Ŗ°Ŗšĸ¨ĸ°ŖĀŖ ĸ¨ĸ°ŖĀŖ¨ĸļĸĀŖĐŖŽĸļĸĀŖĐŖļĸÄĸĐŖāŖŧĸÄĸĐŖāŖÄĸŌĸāŖđŖĘĸŌĸāŖđŖŌĸāĸđŖ¤ØĸāĸđŖ¤āĸîĸ¤¤æĸîĸ¤¤îĸüĸ¤ ¤ôĸüĸ¤ ¤üĸ Ŗ ¤0¤Ŗ Ŗ ¤0¤ ŖŖ0¤@¤ŖŖ0¤@¤Ŗ&Ŗ@¤P¤Ŗ&Ŗ@¤P¤&Ŗ4ŖP¤`¤,Ŗ4ŖP¤`¤4ŖBŖ`¤o¤:ŖBŖ`¤o¤o¤r¤x¤{¤r¤x¤{¤‡¤dĻgĻjϧ0§G¨X¨9ŠjĻpĻrĻxύώĻēĻĀώĻēĻĀĻËĻ0¨@¨ˇĻēĻĀĻÃĻÃĻËĻ0¨@¨üĻ˙ϧ §X¨g¨üĻ˙ϧ §X¨g¨üĻ˙ϧ§§ §X¨g¨ §§@¨G¨§§@¨G¨•§¤§§§­§¤§§§­§´§đ§¨¤§§§­§°§°§´§đ§¨´§ž§¨¨ē§ž§¨¨ž§ȧ¨ ¨ħȧ¨ ¨ȧŌ§ ¨0¨ΧŌ§ ¨0¨g¨q¨Ǎļ¨m¨q¨Ǎļ¨FŠIŠZŠĐŠŪŠĒFŠIŠZŠhŠkŠnŠhŠkŠpŠxŠŽŠąŠ´ŠĐŠhŠkŠpŠxŠŽŠąŠ´ŠĐŠhŠkŠpŠxЎŠĐŠŽŠąŠ´ŠˇŠ§ŠŽŠąŠ´Š§ŠŽŠąŠ´Š&Ē,Ē=ĒíĒĢ-Ģ@Ģ#ŦsĒ—ĒÜĢŦĒ…ĒˆĒ—ĒÜĢßĢåĢčĢßĢåĢčĢŦĄĒŧĒÅĒČĒŦ#Ŧ¯ĒŧĒÅĒČĒŦŦ ŦŦŦ ŦŦ#ŦŧĒÅĒČĒĪĒ@ĢPĢŧĒŋĒČĒËĒŋĒÅĒËĒĪĒ@ĢPĢĪĒŲĒPĢ`ĢÕĒŲĒPĢ`ĢŲĒãĒ`ĢtĢßĒãĒ`ĢtĢãĒíĒĢĢĢ-ĢãĒéĒĢĢĢ"ĢéĒíĒ"Ģ-ĢJŦRŦTŦ6­@­¸­Ā­æ­‰ŦŒŦ•Ŧ˜ŦŒŦ•Ŧ˜ŦÎŦ@­x­Ā­Į­’Ŧ•ŦšŦˇŦ@­x­Ā­Į­’Ŧ•ŦĄŦŠŦĀ­Į­ŠŦˇŦ@­x­ÎŦŲŦßŦâŦŲŦßŦâŦëŦîŦņŦëŦîŦņŦ­­°­­­­°­­­’­•­š­°­­%­(­+­%­(­+­6­°­¸­%­(­+­.­.­6­°­¸­JŽbŽhŽkŽbŽhŽkŽuŽĘŽâŽčŽëŽâŽčŽëŽöŽöޝ¯ ¯¯¯ ¯¯¯¯¯¯¯'¯'¯2¯8¯;¯2¯8¯;¯E¯q"s"‰"‚#’#´#´"Ī"Õ"Ø"Ī"Õ"Ø"ã"î"ņ"ô"ų"î"ņ"ô"ö"!#<#?#B#<#?#B#P#V#Y#P#V#Y#e#h#k#e#h#k#w#×#æ#$y$$1$7$:$1$7$:$J$›$Ē$¸$%%.%Ō$ę$đ$ķ$ę$đ$ķ$ū$D%U%`%š%Ã%Ö%z%’%˜%›%’%˜%›%Ļ%÷%#'0' (÷%˙%&&=&U&[&^&U&[&^&i&t&z&}&ˆ&‘&—&š&¤&đ&÷&ú&''''!'''''J'b'h'k'b'h'k'v''‡'Š'•' 'Ļ'Š'´'ķ¯ö¯ø¯ū¯ö¯ø¯°A°°°°°2°5°8°=°T(k(q(t(k(q(t(‚(Q°S°i°iąxąš˛ĸ˛á˛’ąĒą°ąŗąĒą°ąŗąŊą`˛c˛f˛q˛w˛x˛˛‚˛…˛˛ņ(e)Õ)ä))$)')5);)>)5);)>)N)x)ˆ))) )Ĩ)x)ˆ)•)) )Ĩ)ņ)ũ)**q*„**é*ķ*+Ē*Â*Č*Ë*Â*Č*Ë*Ö*$+ē+Č+*,Iŗhŗx´”´eŗhŗx´”´eŗhŗz´}´‚´”´’ŗQ´T´W´Ģ´Á´ŽŗQ´T´W´ęŗíŗđŗ#´&´3´ęŗíŗđŗ#´)´+´X,Î,- -€,†,‰,—,, ,—,, ,Ž,Î,Ū,--Î,Ņ,×,Ú,Ņ,×,Ú,Ū,--Ū,č,đ,ø,ä,č,đ,ø, -#-)-,-#-)-,-8-w-.0.•.ˆ-ū-T.`.°-ļ-š-Į-Í-Đ-Į-Í-Đ-Ū-ū-.@.T.ū-.. ... ..@.T...0.@...0.@.`.c.i.l.c.i.l.x.Wĩlĩ¸ĩ4ļWĩhĩ¸ĩ4ļŌĩéĩīĩōĩéĩīĩōĩļŊ.Ā.Æ.Õ.ā.9/C/V/ú.//////&/w/”/°/)0‚/”/°/)0Ę/á/į/ę/á/į/ę/ú/R0;1H1Ŋ1Ž0;1X1Ŋ1Ž0/1X1Ŋ1Ÿ01|1ˆ1Į0Í0Đ0Ū0ä0į0Ū0ä0į0õ01%1h1|1111!111!1%1h1|1%1/1X1h1+1/1X1h1ˆ1‹1‘1”1‹1‘1”1 1|ļļ ļĢļĀļ)ˇ:ˇLˇ‡ļļ ļ¤ļĀļ)ˇ:ˇLˇ‡ļļĀļ)ˇ:ˇLˇÚļāļãļņļ÷ļúļņļ÷ļúļ ˇÆ1É1ß1ã1æ12}3•323H3V3•3Ĩ3B2N2Q2Z2`2c2Z2`2c2m2x2{2~22Ŧ2¸2ģ2Ä2Į2Ę2Ä2Į2Ę2Ö2Ü2ß2Ö2Ü2ß2č2ë2î2č2ë2î2ų2330383 330383Ū3ū344ę3ū344ū344 444 44440484 4444444404844(484O44$484>4$4(4>4O4g4j4p4s4j4p4s44Ļ4Š4Â4ä4÷45 555 555@5H555555 555@5H55#5H5p555H5N55#5N5p5p5s5y5|5s5y5|5‹5Į5ū67ŋ7Ū7 9#6A6D6G6Ø8 9/65686A6D6G6Ø8Û8á8ä8Û8á8ä8 9Q6o6r6u6Œ8Ø8]6c6f6o6r6u6Œ88•8˜88•8˜8Ø866–6™66–6™6 67766™6œ66–6œ6 677 6Ē67/7 6Ļ677Ļ6Ē67/7Ē6¸6/7G7Ē6°6/757°6¸657G7¸6Æ6G7_7¸6ž6G7M7ž6Æ6M7_7Æ6Ô6_7w7Æ6Ė6_7e7Ė6Ô6e7w7Ô6â6w77Ô6Ú6w7}7Ú6â6}77â6đ67§7â6č67•7č6đ6•7§7đ6ū6§7ŋ7đ6ö6§7­7ö6ū6­7ŋ7Ū7á7į7ę7á7į7ę7ö7'9#:@:ˇ:-90959#:@:ˇ:n9#:P:ˇ:n9:P:ˇ:9ų9r:€:Ē9°9ŗ9Á9Į9Ę9Á9Į9Ę9Ų9ų9 :`:r:ų9ü9::ü9:: :`:r: ::P:`:::P:`:€:ƒ:‰:Œ:ƒ:‰:Œ:›:gˇŖˇ°ˇi¸q¸›¸gˇ…ˇ°ˇ¸q¸†¸gˇ}ˇ°ˇ¸q¸†¸ʡâˇčˇëˇâˇčˇëˇöˇˆˇˇ’ˇŖˇ¸i¸†¸›¸ˆˇ‹ˇ’ˇŖˇ¸i¸†¸›¸*¸B¸H¸K¸B¸H¸K¸V¸ˇ¸ķ¸šļšššŧšÄšîšˇ¸Õ¸š`šÄšŲšˇ¸͸š`šÄšŲšš2š8š;š2š8š;šFšظâ¸å¸ķ¸`šļšššŧšŲšîšظÛ¸߸â¸å¸ķ¸`šļšššŧšŲšîšzš’š˜š›š’š˜š›šĻš7ēyēˆēFģIģLģTģ~ģ7ēXēˆēđēTģiģ7ēMēˆēđēTģiģĸēēēĀēÃēēēĀēÃēÎēXēyēđēFģIģLģiģ~ģXēaēeēyēđēFģIģLģiģ~ģ ģ"ģ(ģ+ģ"ģ(ģ+ģ6ģ—ģŲģčģĻŧŠŧŦŧ´ŧŪŧ—ģ¸ģčģPŧ´ŧÉŧ—ģ­ģčģPŧ´ŧÉŧŧŧ ŧ#ŧŧ ŧ#ŧ.ŧ¸ģŲģPŧĻŧŠŧŦŧÉŧŪŧ¸ģÁģÅģŲģPŧĻŧŠŧŦŧÉŧŪŧjŧ‚ŧˆŧ‹ŧ‚ŧˆŧ‹ŧ–ŧŊ!Ŋ)ŊKŊNŊSŊŊŊ)Ŋ;ŊŊŊ/Ŋ;ŊŊ!Ŋ;ŊKŊNŊSŊŊŊ;Ŋ@ŊŊ!Ŋ@ŊKŊNŊSŊŠŊ´ŊŧŊûŊūŊžŠŊ ŊŧŊÎŊŠŊ ŊÂŊÎŊ ŊĒŊÎŊčŊ ŊĻŊÎŊÔŊĻŊĒŊÔŊčŊĒŊ´ŊčŊûŊūŊžĒŊ°ŊčŊîŊ°Ŋ´ŊîŊûŊūŊž&ž:žHžĄžŠžžžbžzž€žƒžzž€žƒžŽžč:+<@<P<`<¨<Ã<í<č:ë:ė:ī:ë:ė:ī:+<@<P<`<¨<Ã<í<ë:ė:÷:&;Ã<Ũ<;; ;&;Ã<Æ<Ė<Ī<Æ<Ė<Ī<Ũ<&;<‚<<Ũ<í<Y;e;h;q;w;z;q;w;z;„;;’;•;˜;Ã;Ī;Ō;Û;Ū;á;Û;Ū;á;í;ķ;ö;í;ķ;ö;˙;<<˙;<<<<+<`<‚<<<$<'<<$<'<+<`<‚<<“<™<œ<“<™<œ<¨<+<5<P<X<1<5<P<X<$=g>ˆ>˜>°>¸>ā>ø>%?v?*=g>ˆ>˜>°>¸>ā>ø>%?v?/=6=9=b=ā>ø>>=D=G=b=ā>ã>é>ė>ã>é>ė>ø>b=T>%?3?f?v?•=Ą=¤=­=ŗ=ļ=­=ŗ=ļ=Ā=Ë=Î=Ņ=Ô=˙= >>>>>>>>)>/>2>)>/>2>;>>>A>;>>>A>L>W>g>°>¸>W>Z>`>c>Z>`>c>g>°>¸>3?6?q>¸>ā>g>m>¸>ž>m>q>ž>ā>q>{>˜> >w>{>˜> >Ž?Í?Đ?Ō?ųABē?Í?Đ?Ō?ųAüABBüABBBÍ?Đ?Ō?A0A@APAXA„AĒA×AųAB7BÍ?Đ?Ō?Õ?Õ?A0A@APAXA„AĒA×AųAB7BÚ?ß?â? @×AųAį?í?đ? @×AÚAāAãAÚAāAãAųA @ũ@„A’AB7B>@J@M@V@\@_@V@\@_@i@t@w@z@}@¨@´@ˇ@Ā@Ã@Æ@Ā@Ã@Æ@Ō@Ø@Û@Ō@Ø@Û@ä@į@ę@ä@į@ę@õ@AAPAXAAA A AA A AAPAXA’A•A›AžA•A›AžAĒAAAXA„AAAXA^AAA^A„AA$A@AHA A$A@AHAƞɞŨžeŋxŋžŋ°ŋ9Āŋ#ŋ&ŋ4ŋ>ŋGŋJŋQŋ°ŋĀŋ>ŋAŋJŋMŋAŋGŋMŋQŋ°ŋĀŋQŋ[ŋĀŋØŋWŋ[ŋĀŋØŋ[ŋeŋ„ŋŋŋžŋ[ŋaŋ„ŋŋŋ“ŋaŋeŋ“ŋžŋõŋøŋūŋĀøŋūŋĀĀTĀWĀZĀÕÁčÁoÂTĀWĀZĀjĀčÁÂTĀWĀZĀ]ĀvĀ‚ĀˆĀ‘Ā‘ĀŗĀšĀŧĀ ™ĀĻĀŠĀĒĀ­ĀŗĀšĀŧĀÂ ÂŗĀšĀŧĀÎĀŅĀÔĀŗĀšĀŧĀÂĀČĀÎĀŅĀÔĀÎĀŅĀÔĀúĀũĀÁ Â@ÂÜĀëĀîĀņĀôĀúĀũĀÁ Â@ÂÁÁÁÁÁ9Á?ÁBÁÁ,Á/Á0Á3Á9Á?ÁBÁ9Á?ÁBÁTÁ9Á?ÁBÁEÁKÁTÁTÁlÁoÁrÁTÁ`ÁfÁlÁoÁrÁlÁoÁrÁ›Á@Â]ÂzÁ‰ÁŒÁÁ’Á˜Á˜Á›Á@Â]§ÁĒÁ­ÁÕÁ§ÁĒÁ­ÁÕÁ§ÁĒÁ­ÁÕÁ‡ÂŠÂÂ“А“ްÃĀÃŽÂąÂ´ÂÁÂ×ÂÚÂŨÂíÂķÂöÂ×ÂÚÂŨÂáÂįÂíÂķÂöÂíÂķÂöÂÃíÂķÂöÂųÂ˙ÂÃÃÃ!Ã$ÃÃÃÃÃÃÃ!Ã$ÃÃ!Ã$ÃSÃĀÃāÃ,Ã?ÃBÃEÃHÃPÃ,Ã6Ã7Ã>ÃPÃSÃĀÃāÃPÃSÃĀÃĖÃŌÃāÃ_ÃbÃeÍÃ_ÃbÃeÍÃ_ÃbÃeÍÍÛÃāÃįÓÛÃāÃįÃnÄwÄzĄĨİÄnÄqÄzÄ}ÄqÄwÄ}ĄĨİĄďİÄÔĄĊİÄļĊďÄļÄÔÄōÄõÄûÄūÄõÄûÄūÄÅ8ÅwÅ€ÅĢÅ8ÅjÅ€ÅĢÅYÅ\Å_ÅjŀŌÅYÅ\Å_ÅbÅbÅjŀŌÅ6)9)L)ų)**^)p)s)v)”)Š)Ŧ)¯)ļÅšÅĘÅ|ĮĮ@ČĐÅÜÅâÅëÅëÅ ÆÆÆĮ°ĮķÅÆÆÆÆ ÆÆÆĮ°Į ÆÆÆ(Æ.Æ1Æ ÆÆÆÆ"Æ(Æ.Æ1Æ(Æ.Æ1Æ@ÆFÆIÆ(Æ.Æ1Æ4Æ:Æ@ÆFÆIÆ@ÆFÆIÆ[Æ@ÆFÆIÆLÆRÆ[Æ[Æ}ƃƆưĮĐĮcÆpÆsÆtÆwÆ}ƃƆưĮĐĮ}ÆƒÆ†Æ˜ÆžÆĄÆ}ÆƒÆ†ÆŒÆ’Æ˜ÆžÆĄÆ˜ÆžÆĄÆ°ÆļÆšÆ˜ÆžÆĄÆ¤ÆĒưÆļƚưÆļÆšÆČÆÎÆŅưÆļÆšÆŧÆÂÆČÆÎÆŅÆČÆÎÆŅÆāÆæÆéÆČÆÎÆŅÆÔÆÚÆāÆæÆéÆāÆæÆéÆøÆūÆĮ⯿ÆéÆėÆōÆøÆūÆĮøÆūÆĮĮøÆūÆĮĮ ĮĮ Į#Į+Į.ĮPĮYĮ\ĮfĮāĮīĮPĮSĮ\Į_ĮSĮYĮ_ĮfĮāĮīĮfĮqĮĐĮāĮlĮqĮĐĮāĮīĮōĮøĮûĮōĮøĮûĮ Č`BkBqByB€BƒB†BŽB€BƒB†BŽB€BƒB†BŽB C.C7C:CDCbCeChC/ELEPCVCYCbCeChC/E2E8E;E2E8E;ELErC‘C”C•C~C„C‡C‘C”C•C‘C”C•CžC§CĒCžC§CĒCąCđCøCžCĄCĒC­CĄC§C­CąCđCøCąCģCøCDąCˇCøCūCˇCģCūCDģCÅCD'DģCÁCDDÁCÅCD'DÅCĪC'D?DÅCËC'D-DËCĪC-D?DĪCŲC?DWDĪCÕC?DEDÕCŲCEDWDŲCįCWDoDŲCßCWD]DßCįC]DoD‹DŽD”D—DŽD”D—DŖD‰EĢE´EˇEÁEßEâEåE¯GĖGÍEĶEÖEßEâEåE¯G˛G¸GģG˛G¸GģGĖGīEFFFûEFFFFFFFFF$F'FF$F'F.FpFxFFF'F*FF$F*F.FpFxF.F8FxFF.F4FxF~F4F8F~FF8FBFF§F8F>FF•F>FBF•F§FBFLF§FŋFBFHF§F­FHFLF­FŋFLFVFŋF×FLFRFŋFÅFRFVFÅF×FVFdF×FīFVF\F×FŨF\FdFŨFīF GGGGGGG#GŨČāČãČîČXÉdÉŨČāČãȿȿČîČXÉdɧɲÉĀÉÃĘ5Ę>ĘAĘHĘ€ĘŒĘ5Ę8ĘAĘDĘ8Ę>ĘDĘHĘ€ĘŒĘXĘ[Ę^Ę€ĘXĘ[Ę^ĘaĘŠĘŦʲĘĩĘŦʲĘĩĘÃĘįĘÍ0ÍÎ(Ë.Ë/ËLËRËUË_ËhËkËvËpÍxÍ_ËbËkËnËbËhËnËvËpÍxÍvË„ËxÍĨÍvË|ËxÍ~Í|Ë„Ë~ÍĨÍģËžËÁËĖË@ÍPÍģËžËÁËÄËÄËĖË@ÍPÍĖĖĖ"Ė`ÍpÍĖĖĖĖĖ"Ė`ÍpÍAĖÃĖ0Í@ÍēÍĐÍƒĖ†Ė‰Ė”Ė0Í@ÍƒĖ†Ė‰ĖŒĖŒĖ”Ė0Í@ÍčÍëÍņÍôÍëÍņÍôÍÎ H-H6H9HCHaHdHgH/JLJOHUHXHaHdHgH/J2J8J;J2J8J;JLJqHH“H”H}HƒH†HH“H”HH“H”HHĻHŠHHĻHŠH°HđHøHH HŠHŦH HĻHŦH°HđHøH°HēHøHI°HļHøHūHļHēHūHIēHÄHI'IēHĀHIIĀHÄHI'IÄHÎH'I?IÄHĘH'I-IĘHÎH-I?IÎHØH?IWIÎHÔH?IEIÔHØHEIWIØHæHWIoIØHŪHWI]IŪHæH]IoI‹IŽI”I—IŽI”I—IŖI.ΚÎŧÎŋÎĐÎtĐ:ΝÎĐÎ[ĐPΕÎĐÎ[ĐƒÎ’ÎĪ0ĪƒÎ„ÎŠÎ’ÎĪ0Ī’Î•ÎWĪ€Ī’Î•Î^ĪgĪjĪ€ĪƒĪĪ“Ī ĪŖĪ°ĪŗĪĀĪØĪŪĪßĪîĪņĪôĪØĪŪĪßĪâĪčĪîĪņĪôĪîĪņĪôĪĐ Đ ĐîĪņĪôĪøĪūĪĐ Đ ĐĐ Đ ĐĐĐ"ĐĐ Đ ĐĐĐĐĐ"ĐĐĐ"ĐEĐĐĐ"Đ%ІЋЙĐŌŌ"Ō.Ō{Ō°ĐŌEŌ{Ō°ĐLŅeŅŌEŌ{Ō°ĐĘĐĐĐĶĐšŅāҰĐŊĐĀĐÁĐÄĐĘĐĐĐĶĐÁŅāŅĘĐĐĐĶĐåĐîĐņĐĘĐĐĐĶĐŲĐßĐåĐîĐņĐåĐîĐņĐũĐŅŅčĐîĐņĐôĐ÷ĐũĐŅŅũĐŅŅŅŅŅũĐŅŅŅ ŅŅŅŅŅŅŅ%Ņ(Ņ+ŅŅŅŅ%Ņ(Ņ+Ņ%Ņ(Ņ+Ņ:ŅđŅŌ%Ņ(Ņ+Ņ.Ņ.Ņ:ŅđŅŌ:ŅLŅāŅđŅ@ŅLŅāŅđŅ‰ŅŒŅŅžŅĻŅ§ŅžŅ¤Ņ§ŅšŅžŅ¤Ņ§ŅĒŅ°ŅšŅEŌHŌNŌQŌHŌNŌQŌ]ŌpJ°KŗKĩKLCL}LĄLpJŗJšJĐJŗJšJĐJ K&K,KL,LŗJšJĐJK K&K2KNKQK_KjKpKsKŖK K&K2KNKQK_KjKpKsK„KŠKKKŖK°KŗKĩKˇKÃKÆKČKĖK×KŨKāKãKŨKāKãKîKLLŨKāKãKæKæKîKLL—ŌšŌŌĨŌ°Ō<ÔHÔ[ŲāŌéŌīŌøŌøŌ Ķ#Ķ&Ķ0×X×ĶĶĶĶĶ Ķ#Ķ&Ķ0×X× Ķ#Ķ&ĶAĶDĶGĶ&Ķ8Ķ;ĶAĶDĶGĶ|Ķ’Ķ˜ĶšĶ’Ķ˜ĶšĶ§ĶĒͭͧĶĒĶ­ĶŊĶÆĶÉͧĶĒĶ­ĶąĶˇĶŊĶÆĶÉĶŊĶÆĶÉĶÔĶŊĶĀĶÉĶĖĶĀĶÆĶĖĶÔĶoÔÕ Õ ÕhאמØĩØŗÔĩÔj×p×vא׸ÔÕ Õ ÕøÔÕ Õ ÕÕ Õ ÕÕÕ/Õ2Õ5Õ/Õ2Õ5ÕFÕIÕJÕ/Õ2Õ5Õ9Õ?ÕFÕIÕJÕFÕIÕJÕVÕVÕiÕlÕoÕiÕlÕoÕÕˆÕ‹ÕiÕlÕoÕsÕyÕÕˆÕ‹ÕÕˆÕ‹Õ–Õ7ØFØÕ‚Õ‹ÕŽÕ‚ÕˆÕŽÕ–Õ7ØFØ!Ö0Ö×0א×7ØBŲ[Ų!Ö0ÖØ$Ø'Ø7Ø!Ö0ÖØ$Ø*Ø7ØØØ'Ø*ØÁ×Ô×××Ú×á×ä׿×ķ×ų×ú×ķ×ų×úר Ø ØØ Ø ØØ$Ø'ØØ Ø ØØØØ$Ø'ØBŲEŲKŲNŲEŲKŲNŲ[Ų#Ų&Ų,Ų/Ų&Ų,Ų/ŲBŲáÕôÕ÷ÕúÕôÕ÷ÕúÕ ÖÖÖôÕ÷ÕúÕūÕÖ ÖÖÖ ÖÖÖ!Ö Ö ÖÖÖ ÖÖÖ!Ö‘Ö¨ÖŽÖ¯Ö¨ÖŽÖ¯ÖŧÖŋÖÂÖŧÖŋÖÂÖŌÖÛÖŪÖŧÖŋÖÂÖÆÖĖÖŌÖÛÖŪÖŌÖÛÖŪÖđÖŌÖÕÖŪÖáÖÕÖÛÖáÖđÖFØIØOØRØIØOØRØVØËØÎØÔØרÎØÔØרáØūØŲŲ ŲŲŲ Ų#ŲđĶķĶöĶÔX×h×đĶķĶöĶųĶųĶÔX×h×,Ô:ÔđÖøÖ2Ô:ÔđÖøÖfŲiŲwŲ¨ŲĢŲ°Ų¸ŲĮÚĘÚĖÚØÚÜ¸ŲēÚđÛ$ÜMÜ…ÜÄŲÜŲßŲáŲÄŲĐŲÖŲÜŲßŲáŲÜŲßŲáŲÚÜÜMÜhÜäŲÚÜÜMÜhÜôŲ÷ŲøŲÚ ÚÚÚ ÚÚÚÜÜÚÚÚÚÚ ÚÚÚÜÜÚ1Ú7Ú:ÚÚ%Ú+Ú1Ú7Ú:Ú1Ú7Ú:ÚJÚ1Ú7Ú:Ú=ÚCÚJÚJÚeÚkÚnÚJÚVÚYÚ\Ú_ÚeÚkÚnÚeÚkÚnÚ~ځڂÚeÚkÚnÚqÚwÚ~ځڂڙڜڟÚĒÚđÛܙڜڟÚĸÚĸÚĒÚđÛÜēÚĮÚĘÚĖÚØÚđÛ$ÜM܅ܝÜäÚüÚ˙ÚÛäÚđÚöÚüÚ˙ÚÛüÚ˙ÚÛ9ÛāÛđۅܝÜÛ9ÛāÛđۅܝÜÛÛÛ"Û+Û.Û"Û+Û.Û9ÛāÛđÛ"Û%Û.Û1Û%Û+Û1Û9ÛāÛđÛ9ÛQÛWÛZÛ9ÛEÛKÛQÛWÛZÛQÛWÛZÛkÛQÛWÛZÛ]ÛcÛkÛkÛzÛ€ÛƒÛzÛ€ÛƒÛ“Û–Û—ÛzÛ€ÛƒÛ†ÛŒÛ“Û–Û—ÛŽÛąÛ´ÛģÛĐÛāÛŽÛąÛ´ÛˇÛˇÛģÛĐÛāÛˇÜ@ŨPŨkŨsŨ“ŨˇÜŊÜÂÜÄÜÜÜčÜëÜņÜņÜ Ũ ŨŨņÜųÜüÜŨŨ Ũ ŨŨņÜųÜüÜ˙ÜŨŨ"Ũ7ŨPŨhŨŨŨ"Ũ7ŨPŨhŨŨŨ"Ũ7ŨPŨhŨ´ŨēŨŊŨŋŨČŨ+Ū3Ūąâ/ß—ā’áŸáâ[âUßkßnßpßkßnßp߁߄߅߁߄߅ߚߚ߲߲߭߰߭߰ßĀßĀß×ßÚßÛß×ßÚßÛßåßëßíßåßëßíßüßüß āāā āāāāā!āāā!ā+ā.ā0ā+ā.ā0āBāmāpāsā‚ā’áŸámāpāsāvāvā‚ā’áŸá—ā…áŸáâ¨āžāÄāÅāžāÄāÅāÔāÔāčāëāėāčāëāėāöāüāūāöāüāūā ááá ááá á&á(á á&á(á6á9á:á_ábáeápáŸáĢá_ábáeáháhápáŸáĢá3Ū/ß…á’á[âąâDŪZŪ`ŪaŪZŪ`ŪaŪpŪpŪ„Ū‡ŪˆŪ„Ū‡ŪˆŪ’Ū˜ŪšŪ’Ū˜ŪšŪ¨ŪŽŪ¯Ū¨ŪŽŪ¯ŪŧŪÂŪÄŪŧŪÂŪÄŪŌŪÔŪÕŪũŪßßß…á’áũŪßßßßß…á’á×âõãäääûâãããUäXä[ä`älãtãvã†ã’ã›ãœã­ãŗãļãĀãÉãĖã×ã˜ä­äĀãÃãĖãĪãÃãÉãĪã×ã˜ä­ä×ãåãˆä˜äŨãåãˆä˜äĘäÍäĶäÖäÍäĶäÖäääåŠåģåŊåČåöå.å:å@åIåIåjåČåâåMåZå]å^åaågågåjåČåâåyå|ååŠåyå|ååŠåyå|ååŠåæõæį#į0į|į%æ1æ7æ@æ@æXæ[æ^æįį[æ^æįၿ„æ‡æČææ„æēæŊææ„æēæŊææ„æēæŊæ˜æĨæ¨æŽæĨæ¨æŽæēæŊæĀæŽæąæ´æēæŊæĀæ׿äæįæęæ׿äæįæęæäæįæęæõæį#įäæįæęæíæíæõæį#į‘į™įįØįčį čÉįØįčįėįîį čÉįĐįčįėįîįņįĐįØįņį č0čdčpčyč=čIčLčNčPčTčYčdčpčyčPčTčYč\č\čdčpčyč–č™č§čyéˆéę0ęŽę¯čēčŋčÁčâčëčîčúčééåčëčîčņčôčúčééúčéééééúčũčéé éééé"é%é(é\é"é%é(é\é"é%é(é\ébékénéyéöéųéüéębékénéqéöéųéüé˙éqéyé˙éęšééŸéŦé¯é°éĮéĐéĶéÚé0ęCęĮéĘéĶéÖéĘéĐéÖéÚé0ęCęÚéåéëéėéÚéåéëéėéqętęzę}ętęzę}ę•ęæęéęėęëæęéęėęëæęéęėęëIëLëcë#ė€ėØėæėí%íKíiëlënëĒëė ėæėíqëĒëė ėæėí‡ëŠë‹ë•ë˜ë›ë•ë˜ë›ëĒëė ė•ë˜ë›ëžëžëĒëė ėĒëøë€ėė ėØė%íKíËëãëæëéëãëæëéëøë€ėėãëæëéëėëėëøë€ėė1ė4ė7ėlėØėæė1ė4ė7ėlėØėæė1ė4ė7ėlėØėæėSė`ėØėæėXė`ėØėæėpíŸī°īƒđ|íˆíŽí—í—íŧíđīđŸíŦí¯í°íŗíšíšíŧíđīđĪíįíęíííĪíÛíáíįíęíííįíęíííîįíęíííķíųíîįíęíííīíįíęíííīíįíęíííīíîîîîîBîĐīđī%î2î5î6î9î?î?îBîĐīđīHîTîZîcîvîŽî‘î”îvî‚îˆîŽî‘î”îŽî‘î”îŠîŽî‘î”îšî îŠîŽî‘î”î–îŽî‘î”î–îŽî‘î”î–îĩî)ī°īĐīđ đXđƒđÂîÅîÆîūîđ đXđnđÆîĖîĪîĐîĶîūîđ đXđnđŲîÜîŨîéîėîīîéîėîīîūîđ đéîėîīîōîōîūîđ đ ī īī)ī°īĐī ī īī)ī°īĐī ī īī)ī°īĐī5ī8ī;ītī đ.đ5ī8ī;ītī đ.đ5ī8ī;ītī đ.đWīhī đ.đ\īhī đ.đôđũđņ ņPņeņôđ÷đņņ÷đũđņ ņPņeņ ņņ@ņPņņņ@ņPņƒņ†ņŒņņ†ņŒņņ ņō ōōō`ōuōōōōōō ōōō`ōuōō%ōPō`ō ō%ōPō`ō“ō–ōœōŸō–ōœōŸō°ōķķ ķ*ķpķ…ķķķ ķ#ķķķ#ķ*ķpķ…ķ*ķ5ķ`ķpķ0ķ5ķ`ķpķŖķĻķŦķ¯ķĻķŦķ¯ķĀķÚķ™ô¨ôAõŨķäķįķéķ÷ķ™ô¨ô!õôô ô!ô$ô'ôôô ôôô!ô$ô'ôôô ô ôôô ô ôôô ô ô!ô$ô'ônô¨ô õEô]ô`ôcô]ô`ôcônô¨ô¸ô]ô`ôcôfôfônô¨ô¸ôÉôĪôĐôÕôxõųųų(ų3ų6ų9ųEųnú‘õ”õšõĖõĪõĐõSúnú õĻõŠõēõ õĻõŠõŦõ˛õēõÃõĖõĪõĐõÃõĖõĪõĐõŲõööö?úSúįõíõđõöįõíõđõķõųõö öööö öööö'ödö)ú?ú5ö;ö>öOö5ö;ö>öAöGöOödöžöú)úröuöxö‰öxö~öö‰öžöÜößöāöûųúŦö˛öĩöÆöŦö˛öĩö¸öžöÆöŅöÜößöāöŅöÜößöāöęöíöđö'÷įųûųøöūö÷÷øöūö÷÷ ÷÷0÷3÷5÷k÷Ķųįų=÷C÷F÷Z÷=÷C÷F÷L÷R÷Z÷k÷ž÷ĀųĶųv÷y÷|÷÷|÷‚÷…÷÷ž÷Ö÷ąųĀųŠ÷¯÷˛÷Ã÷Š÷¯÷˛÷ĩ÷ģ÷Ã÷ß÷â÷ä÷ø ųąųė÷ī÷ō÷øō÷÷÷ú÷øøFøų ųø!ø$ø5ø$ø*ø-ø5øFø~ø~ųųQøWøZøkøQøWøZø]øcøkø‡øŠøŒøģøkų~ų”ø—øšøĒøšøŸøĸøĒøģøđøEųTųÆøÉøĖøŨøĖøŌøÕøŨø ų ų ųų ų ų ųųŲLšTŧTŋTĐTÛTŪTáTđTWãLMđT€UãLMU0UUUUUM5M0U>U5MMđTUXU€U5MWMpU€UWMyMXUpU M`OfOiOQV§VîVW MøMūMNøMūMN‘N—N¤NQVoVøMūMNSN\N^NSN\N^N‚N¤NŽNąNŲNâNėNõNûNO7O8OAOGOMO¤NŽNąNŲNâNėNõNûNOO$O*O>OAOGOMO`OfOiOlOyO„OiOlOyO„OiOlOyO„OlOyO„O‰O‰OQ!Q$QWW‰OąOˇOĐOÖOņOąOˇOĐOÖOņORPXP_PW9WąOˇOĐOÖOņOP P"PP P"PCPbP|P…PŖPŦPļPŧPQbP|P…PŖPŦPļPŧPŲPßPåPøPQQ!Q$Q'Q4Q?Q$Q'Q4Q?Q$Q'Q4Q?Q'Q4Q?QEQKQLQ‰QÅQ§VģV•Q›QžQ˛Q•Q›QžQĄQĒQ˛QĪQÕQ×QRRRģVĪVßQåQčQüQßQåQčQëQôQüQRRRRRRRRRR!RYRĪVîV)R/R2RFR)R/R2R5R>RFRtRzR|R´RĐUßU„RŠRRĄR„RŠRRR™RĄRĖRŌRĶRÛRáRäRĖRŌRĶRÛRáRäRÛRáRäRķRU UÛRáRäRįRįRķRU UķRS U°UüRS U°USßSåSčS°UĐU5SvS°UĐUDSYS°UĐUMSYS°UĐUvSˆS‰SžSÄSËS‚SˆS¯SžSÄSËSˆS‰SžSÄSËSßSåSčSßSåSčSšTŧTŋT€UUTPT€UUT3T€UU'T3T€UUPTbTcT˜TžTĨT\TbTmTsTyT‰TsTyT‰T˜TžTĨTbTcT˜TžTĨTšT ûBûvũ‡ũûûû/ûûûû!û'û/ûLûOûRûˆû‹ûŒûgũvũZû`ûcûtûZû`ûcûfûlûtûûˆû‹ûŒûûˆû‹ûŒû•û˜û›ûŌû)ũ8ũŖûŠûŦûŊûŖûŠûŦû¯ûĩûŊûŨûāûãûü‡ũ ũëûņûôûüëûņûôû÷ûũûü0ü3ü6üxüđü ũ0ü3ü6üxüđü ũ0ü3ü6üxüđü ũVülüđü ũVüXü^üaüXü^üaülüđü ũxüƒüāüđü~üƒüāüđüƒüŽüĐüāü‰üŽüĐüāüHũKũQũTũKũQũTũgũĶũÖũßũūūū%åũîũņũ˙ũčũîũņũôũ÷ũ˙ũ ūūūū ūūūū ū#ū&ū]ū.ū4ū7ūHū.ū4ū7ū:ū@ūHūiūlūoūĨū¨ūŠūß˙î˙wū}ū€ū‘ūwū}ū€ūƒū‰ū‘ūœūĨū¨ūŠūœūĨū¨ūŠū˛ūĩū¸ūīūš˙Č˙ĀūÆūÉūÚūĀūÆūÉūĖūŌūÚūûūūū˙8˙î˙ ˙˙˙#˙ ˙˙˙˙˙#˙A˙D˙G˙„˙°˙š˙A˙D˙G˙„˙°˙š˙A˙D˙G˙„˙°˙š˙f˙v˙°˙š˙n˙v˙°˙š˙cfoŖĻ§Ļĩu~x~„‡šŖĻ§šŖĻ§°ŗļí“ĻžÄĮØžÄĮĘĐØųü˙589o~ ! !,589,589BEHIXPVYjPVY\bj‹Ž‘Č~“™Ÿĸŗ™ŸĸĨĢŗŅÔ×@IŅÔ×@IŅÔ×@Iö@Iū@I×0@ßá @PņūX[]•kzekn‚ekntz‚šŧŋõûüĖßĮĐĶáĘĐĶÖŲáėõûüėõûüMPQģĖ(+9"(+.19DMPQDMPQZ]`“¨ģhkn~nsv~ļšģė“¨ÃÆÉŲÉÎŅŲõøû0`kõøû0`kõøû0`k$`k$`kYž°? YrtwÆÉË. ? ĶŲÜđĶŲÜâčđ'*-cij . 5>AO8>ADGOZcijZcij‚…ģžŋņ –™§–™œŸ§˛ģžŋ˛ģžŋČËÎËÚÖŲÜėÜáäė$')Z  147G7<?GcfižĀËcfižĀËcfižĀË…’ĀËŠ’ĀˡWE_H_K_X_c_f_i_x_ÍaĖW'Xx_¨_ĖWãWx__0XôY`×`aMa0XˆXŽX¨XˆXŽX¨X%Y+Y8Y`Ÿ`ˆXŽX¨XåXčXęXåXčXęXY8YBYEYmYvY€Y‰YY•YËYŅYÚYāYæY8YBYEYmYvY€Y‰YY•Y˛Y¸YžY×YÚYāYæYôYúYũYZZZũYZZZũYZZZúYũYZZZZZĢ[MaÍaZCZIZ^ZdZZCZIZ^ZdZZâZčZīZMaiaCZIZ^ZdZZ¨ZŽZ°Z¨ZŽZ°ZĶZōZ [[3[<[L[R[‹[‘[—[ōZ [[3[<[L[R[i[o[u[ˆ[‹[‘[—[Ģ[ą[´[ˇ[ž[É[´[ˇ[ž[É[´[ˇ[ž[É[ą[´[ˇ[ž[É[Ī[Õ[Ö[\Q\×`ë`!\'\*\>\!\'\*\-\6\>\[\a\c\š\\ž\ë`˙`k\q\t\ˆ\k\q\t\w\€\ˆ\‘\š\\ž\‘\š\\ž\Ĩ\Ģ\­\å\˙`aĩ\ģ\ž\Ō\ĩ\ģ\ž\Á\Ę\Ō\]]]@]``]]]-]]]]]%]-]X]^]_]g]m]p]X]^]_]g]m]p]g]m]p]]Ā_Đ_g]m]p]s]s]]Ā_Đ_]”]Đ_ā_ˆ]”]Đ_ā_”]k^q^t^ā_`Á]^ā_`Đ]å]ā_`Ų]å]ā_`^^^J^P^W^5^J^P^W^^^J^P^W^k^q^t^k^q^t^E_H_K_¨_Ā_›^Ü^¨_Ā_Ē^ŋ^¨_Ā_ŗ^ŋ^¨_Ā_Ü^î^ī^$_*_1_č^î^_$_*_1_î^ī^$_*_1_E_ų q € 8 ų    c f h   Ø é p v y  p v y  …  ŧ ŋ Á į à Ø į  $ % " 8 ō ø û  ō ø û ū     $ %   $ % 8 ; = q t u  " E K N _ E K N Q W _ h q t u h q t u |   ˛ ū  ‰ Œ  Ÿ  ” — Ÿ Ę Í Ī õ é ū õ - ™ Ē           6 9 < q  ™ 6 9 < q  ™ 6 9 < q  ™ X e  ™ ] e  ™ ˇ ē Ŋ U`&Á é `p58;uÄŲCLO`FLOUX`—Ã&ÃúũÎÔ×čÎÔ×ÚāčņúņúMPQėũ!'*;!'*-3;DMPQDMPQX[]ŽŲėehk{kps{ĢŲ¯ÄŲ‰šäęíūäęíđöū U€‰ U€‰ U€‰<I€‰AI€‰"bĶbđb_c"bĮbđb_c3b­bc&c^bdbgbub{b~bub{b~bb­bŊbcc­b°bļbšb°bļbšbŊbccŊbĮbđbcÃbĮbđbc&c)c/c2c)c/c2cDc†cbdjd~dfPf|f™f†c¯c|f™fŠc¯c|f™fĩc¸cģcÚcŨcāc-fPf&dEdNdQd&d5d8d9d9d2P2]2˙3(4˜4 8G8‚8_9>2P2y33‚33ˆ4˜4>2P2…33ˆ4˜4y33‚3…33ž3x4ˆ4–3ž3x4ˆ4ž3¯3h4x4§3¯3h4x4¯3Ā3X4h4¸3Ā3X4h4Ā3Í3H4X4É3Í3H4X4Í3Ú384H4Ö3Ú384H4Ú3į3(484ã3į3(484ö8ü899ü8999P2U2˙34ā4æ4é4ķ4û455#5û4555g5ä6j7 8_9w9Š9í9Ä5^6ô7 8Š9ē96 6 6666F6L6O6^6ô7 8F6L6O6R6R6^6ô7 8 7Ļ7Š7¸7Ā7Æ7É7ô7Ā7Æ7É7Ė7ˆ6Ã6É6Ņ6Ô6ä6ˆ6Ã6É6Ė6Ī6Ņ657=7C7D7ņ9ö9 :=!:0:=:ˆ;¨;=!:0:;; ;+;<<!:0:#;+;<<;; ;#;+;9;ø;<1;9;ø;<9;G;č;ø;?;G;č;ø;G;U;Ø;č;M;U;Ø;č;U;_;Č;Ø;[;_;Č;Ø;_;i;¸;Č;e;i;¸;Č;i;s;¨;¸;o;s;¨;¸;:<=<C<F<=<C<F<R<0:5:ˆ;;==&=/=@=Ņ>ā>4@O=`=m=¸>ā>4@O=`=J>M>P>[>@?U?O=`=S>[>@?U?J>M>P>S>[>i>0?@?a>i>0?@?i>w> ?0?o>w> ?0?w>…>? ?}>…>? ?…>>??‹>>??>™>đ>?•>™>đ>?™>Ŗ>ā>đ>Ÿ>Ŗ>ā>đ>@@#@&@@#@&@4@`=e=¸>Ŋ>=oCošpp pŗp=oCoŖpŗpšpp pŖpPo^oŗpĐpPoVoŗpšpVo^ošpĐp^oloĐpįp^odoĐpÖpdoloÖpįplozoįpqloroįpíprozoípqzoˆoqqzo€oqq€oˆoqqˆo–oq8qˆoŽoqqŽo–oq8q–o¤o8qXq–oœo8q>qœo¤o>qXq¤oŠoXq]qp;p>pApxr™r'p-p0p;p>pApxr{rr„r{rr„r™rPpoprpsp,rxr\pbpepoprpsp,r/r5r8r/r5r8rxroprpsp’p}pƒp†p’p|qq…qˆqq…qˆq”qßrårérôrsss%sOsUsYsds€s†sŠs•sa@s@€@Û@Ÿ@ĸ@Ĩ@ŧ@Ÿ@ĸ@Ĩ@¨@ô@%A,A/ATAWAZA`A”AIIIIJ JĸJ°JąM¤ABI0ICMgMŗAËAŅAÔAŗAŋAÅAËAŅAÔAËAŅAÔAãAéAėAËAŅAÔA×AŨAãAéAėAãAéAėAûABBãAéAėAīAõAûABBûABBBûABBB BBB7B:B;BB*B0B7B:B;B7B:B;BHB;BC¸DØD0C6C¸DžD6C>CžDØD>CLCØDøD>CDCØDŪDDCLCŪDøDLCQCøDũD"D%D(D;D"D%D(D+D/E2E5E@EŽKģK/E2E5E8E8E@EŽKģKxE†EŸF¸FxE~EŸFĨF~E†EĨF¸F†E”E¸FØF†EŒE¸FžFŒE”EžFØF”EĸEØFøF”EšEØFŪFšEĸEŪFøFĸE°EøFGĸE¨EøFūF¨E°EūFG°EžEG8G°EļEGGļEžEG8GžEĖE8GXGžEÄE8G>GÄEĖE>GXGĖEŅEXG]G†F‰FŒFŸF†F‰FŒFFhGnGpGsGsG|G•GØH°JđJ`KŽK]H`HcHnHKŽK]H`HcHfHfHnHKŽKnH|H€KKtH|H€KK|HŠHpK€K‚HŠHpK€KŠH˜H`KpKH˜H`KpK˜HĻHāJđJžHĻHāJđJĻH´H°J¸JŦH´H°J¸J´HÂH¸JāJ´HēH¸JžJēHÂHžJāJˆGGØHŨHķHöHųHūH0I`JpJ‡JđJ`K`LCMéIėIīIúIPK`KéIėIīIōIōIúIPK`KúIJ@KPKJJ@KPKJJ0K@KJJ0K@KJ$J K0KJ$J K0K$J2JK K*J2JK K2J@JKK8J@JKK@JNJđJKFJNJđJK`JeJ‡JŒJyM†MœMąMyM†MĸMąMÔMôNO$O'O,O8OZP]PbPpPķQčMîMđMķMAN_NbNeNŌQķQMNSNVN_NbNeNŌQÕQÛQŪQÕQÛQŪQķQ{NN„NN•NžNĄNŦN€PP•N˜NĄN¤N˜NžN¤NŦN€PPŦNēNP P˛NēNP PēNČN P°PĀNČN P°PČNÖN°PŧPÎNÖN°PŧPÖNäNpP€PÜNäNpP€P‚OŒOŽOĄOáOęOíOøOŧPŅPáOäOíOđOäOęOđOøOŧPŅP*P4P6PUP@QCQIQLQCQIQLQ^Q^QaQgQjQaQgQjQvQR~TTV%V´XR R-R’STũT}VöVaX´XøRûRūR SđTũTøRûRūRSS SđTũT SSāTđTSSāTđTS1SĐTāT%S1SĐTāT1SCSĀTĐT7SCSĀTĐTCSUS°TĀTISUS°TĀTUSgS T°T[SgS T°TgSyST TmSyST T R%R’S—S!T$T'T6TVVcV!T$T'T*T*T6TVVcV6THTcVoVxBxPx[xbxx6x:x>xBxPx[xnxx6x:x>xBxnxx6x:x>xBxqxwxzxxnxqxwxzxšxZypyzyšxĀxĖxāxĀxĖxāxyëxîxķxûxîxķxũx yûxũx yy%y(y-y5y(y-y5y@yByEy@yByEyLyĒybzoz5{H{Ž{ĒyYzozŗzĒy°yozxzŪyz zzņyzzzzz zz2zDzGzJzDzGzJzQzŗz%{({,{`{Ž{ŋzÂzČzĘzÍz×zŋzÂzČzĘzÂzÅzĘzÍzÅzČzŲzäz×zŲzäzézīz {{{i{l{q{Ž{īzûzi{l{q{x{{{}{ûz{x{{{}{…{{ {{{%{({,{5{Ō{Ø{ā{ü{p|w|•|›|­|GJM`ũ•|›|­|Y~\~_~xģ×ũ•|›|­|í|ķ|}í|ķ|}}–}}x–í|ķ|}H}}–}Ŗ}Ë}Î}â}ú}'~(~:~@~F~}–}Ŗ}Ë}Î}â}ú}~+~1~7~:~@~F~Y~\~_~q~q~~‚~…~~‚~…~G`x~Ū~`xŦ~Á~`xĩ~Á~`xę~đ~ú~,÷XũXYYũXYYY2Y;Y>YHY€YY2Y5Y>YAY5Y;YAYHY€YYHYSYY¤YNYSYY¤YÂYÅYËYÎYÅYËYÎYßYbZ˜ZŠ\\kZqZtZ…ZkZqZtZwZ}Z…ZĸZĨZ¨ZŪZáZâZ\Ŧ\°ZļZšZĘZ°ZļZšZŧZÂZĘZÕZŪZáZâZÕZŪZáZâZëZîZņZ([Ŧ\Ā\ųZ˙Z[[ųZ˙Z[[ [[3[6[9[p[\.\A[G[J[[[A[G[J[M[S[[[†[‰[Œ[Ų[\\†[‰[Œ[Ų[\\†[‰[Œ[Ų[\\Ŧ[ž[\\Ŧ[Ž[´[ˇ[Ž[´[ˇ[ž[\\Ų[ä[\\ß[ä[\\>\A\G\J\A\G\J\Y\G]}]Œ_Ĩ_P]V]Y]j]P]V]Y]\]b]j]‡]Š]]Ã]Æ]Į]}_Œ_•]›]ž]¯]•]›]ž]Ą]§]¯]ē]Ã]Æ]Į]ē]Ã]Æ]Į]Đ]Ķ]Ö] ^j_}_Ū]ä]į]ø]Ū]ä]į]ę]đ]ø]^^^U^._=_&^,^/^@^&^,^/^2^8^@^k^n^q^¯^ø^_k^n^q^¯^ø^_k^n^q^¯^ø^_‘^Ŗ^ø^_‘^“^™^œ^“^™^œ^Ŗ^ø^_¯^ē^č^ø^ĩ^ē^č^ø^M_P_V_Y_P_V_Y_j_7`m`|b•b@`F`I`Z`@`F`I`L`R`Z`w`z`}`ŗ`ļ`ˇ`mb|b…`‹`Ž`Ÿ`…`‹`Ž`‘`—`Ÿ`Ē`ŗ`ļ`ˇ`Ē`ŗ`ļ`ˇ`Ā`Ã`Æ`ũ`ZbmbÎ`Ô`×`č`Î`Ô`×`Ú`ā`č`a aaEab-baaa0aaaa"a(a0a[a^aaaŸačab[a^aaaŸačab[a^aaaŸačaba“ačabaƒa‰aŒaƒa‰aŒa“ačabŸaĒaØačaĨaĒaØača=b@bFbIb@bFbIbZb'c]cle…e0c6c9cJc0c6c9cgAggČgâg;g>gAggČgâg;g>gAggČgâgagsgČgâgagcgiglgcgiglgsgČgâggŠg¸gČg…gŠg¸gČgh h&h)h h&h)h:h€€€˜€°€Á€ЀŲ€ų€ p€€€"€%€(€’€˜€°€¸€†‚‚+‚@‚Uƒ†Œށ“–¸‚"‚ȁ@‚V‚ȁׁh‚~‚Ă˂0ƒLƒũ‚ƒƒ0ƒũ‚ƒƒƒƒ ƒũ‚ƒƒƒƒƒƒƒvƒzƒ‚ƒG„S„ŗ„Ā„ÄńȄ؄č„vƒzƒ‚ƒ†ƒ‰ƒŒƒĀ„ÄńȄ†hŒhšh…iikk.l¤hąh´hĩhąh´hĩhģhÁh_i8jhj°jĀjœkŽk÷k.lŌh i8jHj l.lŌhâhåhæhâhåhæhđhühiđhühi i8jHjđhühi i8jHjđhķhiiķhühi i8jHj lllllll.l iCi°jĀj/i5i8iCi°jĀj/i5i8iCi°jĀj/i5i8iCi°jĀj/i2i8i;i2i5i;iCi°jĀjCiQiHjPjCiQiHjPjCiQiHjPjIiQiHjPjQi_iPjhjQi_iPjhjQiWiPjVjWi_iVjhj_imihjˆj_imihjˆj_ieihjnjeiminjˆjmi{iˆj°jmisiˆjŽjsi{iŽj°jÕiØiÛiæi0kDkÕiØiÛiŪiŪiæi0kDk j8j\kykĀjæjkk#k0kôj÷júj kDkKkQk\k6ly@yByHyUyXyZyiytyčyøylytyčyøyąĮ…ʅz†˜†‰đ…l†˜†‰††††Z†l†ņˆ‰Z†`†ņˆ÷ˆ`†l†÷ˆ‰¤‰OŠpŠeȉAŠpŠeā‰ã‰ī‰ō‰/ŠAŠɌčŒ/Š5ŠɌΌ5ŠAŠΌčŒ’˜ ŧ0Ž7ގzÕzāz{ {™{ũz{ {™{:{Q{W{Z{Q{W{Z{j{ˇ{Ú{č{!|0|Š|ˇ{Ī{Ō{Ø{č{|||0|Š|||0|Š|J|a|g|j|a|g|j|z|Â|č|đ|}¯}Ė}Ø}į}S~V~Y~^~jŽxŽ‡Ž”Ž—ŽœŽjŽxŽŒŽ”Ž—ŽœŽ÷~'*/Vö™ū™Y§p… ƒ0ƒy… ƒ0ƒ…š0ƒ@ƒŽš0ƒ@ƒš¯ƒ ƒŖ¯ƒ ƒ¯Äƒƒ¸ÄƒƒÄŲđ‚ƒÍŲđ‚ƒŲî#âî#îķ#(í€ķ€ö€í€ķ€ö€ų€@U€‹‹IU€‹‹Uj‹ ‹^j‹ ‹jp‹€‹sp‹€‹”`‹p‹ˆ”`‹p‹”ЁP‹`‹ЁP‹`‹Ёž@ƒKƒ˛ž@ƒKƒžÁKƒPƒÁ‚Į‚ʂđ‚Á‚Į‚ʂ͂`ƒfƒoƒrƒrƒtƒ{ƒƒT„Z„]„l„?šOšT„Z„]„`„`„l„?šOšl„„Oš_šu„„Oš_š„–„_šošŠ„–„_šoš–„Ģ„oššŸ„Ģ„oššĢ„Ā„šš´„Ā„ššĀ„ՄšŸšɄՄšŸš%†+†.†=†Ÿš¯š%†+†.†1†1†=†Ÿš¯š=†R†¯šŋšF†R†¯šŋšR†g†ŋšΚ[†g†ŋšΚg†|†Κߚp†|†Κߚ|†‘†ߚīš…†‘†ߚīš‘†φīš˙šš†φīš˙šφģ†˙𛝆ģ†˙š›ģ†І››ĆІ››Іå†›/›Ų†å†›/›å†ú†/›?›î†ú†/›?›ú†‡?›O›‡‡?›O›‡$‡O›_›‡$‡O›_›$‡9‡_›o›-‡9‡_›o›9‡z‡¸ĻÔĻ9‡B‡L‡T‡r‡z‡B‡L‡T‡h‡z‡-ˆ ‹ȋĢ›é›HOAžgž‡„‡†‡-ˆ ‹ȋĢ›é›HOAžgž‡„‡¤‡Ї†‡¤‡Їā‡ ‹ȋHOЇģ‡ ‹ȋHOā‡ˆțé›AžFžPˆVˆ_ˆbˆĸˆ¨ˆžˆÁˆɈöˆüˆũˆڈāˆęˆíˆ‰‰!‰0‰››Ģ›‰‰!‰$‰$‰0‰››Ģ›?‰P‹ȋ@—ū™0šo›‹›OAžgžĨŸi ,¤t‰z‰‡‰‰‰P‹ȋ@ŒO(ž‘Š—ŠšŠЊ0Œ@Œ‘Š—ŠšŠŠŠЊ0Œ@ŒЊžŠ Œ0Œ˛ŠžŠ Œ0ŒžŠ͊Œ ŒĮŠ͊Œ Œ͊čŠŒŒ܊čŠŒŒčŠũŠđ‹ŒņŠũŠđ‹ŒũŠ‹ā‹đ‹‹‹ā‹đ‹‹'‹ȋā‹‹'‹ȋā‹OŒ“o›‹›gžĨŸi Ų Ãĸ,¤ŒՌ€ŽŽɌՌ€ŽŽՌęŒŽ ŽیęŒŽ ŽęŒ˙ŒpŽ€ŽķŒ˙ŒpŽ€Ž˙Œ`ŽpŽ`ŽpŽ)PŽ`Ž)PŽ`Ž)>@ŽPŽ2>@ŽPŽŽŽŽ@ŽŽŽŽ"Ž؎펰áŽíްíŽАöŽА °  °,  , ,A€5A€AVp€JVp€@FIp@FIL‘‘ā’đ’‘‘ā’đ’‘2‘đ’“&‘2‘đ’“2‘G‘Вā’;‘G‘Вā’G‘\‘Ā’ВP‘\‘Ā’В\‘q‘°’Ā’e‘q‘°’Ā’q‘†‘ ’°’z‘†‘ ’°’u’{’~’ ’u’{’~’’“““B•ģĄÃĸ ”””%”Ā”Д ”””””%”Ā”Д%”:” •B•.”:” •B•:”O”• •C”O”• •O”d”••X”d”••d”u”đ”•m”u”đ”•u”†”ā”đ”~”†”ā”𔆔—”Дā””—”Дā”X•m• —0—a•m• —0—m•‚•0—@—v•‚•0—@—‚•—•— —‹•—•— ——•Ŧ•—— •Ŧ•——Ŧ•Á•đ–—ĩ•Á•đ–—Á•֕ā–đ–ʕ֕ā–đ–Ž–´–ˇ–ā–Ž–´–ˇ–ē–(žAžĄģĄ(žAžŠĄģĄ@—P—]—p™é›ɜF˜L˜O˜^˜™™F˜L˜O˜R˜R˜^˜™™^˜s˜`™p™g˜s˜`™p™s˜ˆ˜P™`™|˜ˆ˜P™`™ˆ˜˜@™P™‘˜˜@™P™˜˛˜0™@™Ϙ˛˜0™@™˛˜Ø ™0™ģ˜Ø ™0™ØԘ™ ™˘Ԙ™ ™p™y™‚™…™y™|™…™‹™™’™|™‚™’™Ι|™‚™’™ž™Ι㙋›››י㙋›››ã™ô™0š;šė™ô™0š;š¨a¨ŲŠ÷Š<ĒHǍa¨ŲŠ÷Š<ĒHǍ¨¨¨¨¨¨a¨ŲŠ÷Š<ĒHǍ¨¨!¨#¨(¨+¨.¨1¨7¨=¨a¨ŲŠ÷Š<ĒHĒa¨g¨@ŠĻŠģŠŲŠ÷ŠĒa¨g¨@ŠĻŠģŠŲŠ÷ŠĒa¨g¨CŠFŠZŠĻŠ÷ŠĒCŠFŠZŠaŠcŠhŠkŠnŠqŠwŠ}ŠĻŠ÷ŠĒ@ŠCŠFŠZŠx¨æ¨Ē<ĒHĒRĒx¨æ¨Ē<ĒHĒRĒx¨{¨~¨’¨{¨~¨’¨æ¨Ē<ĒHĒRĒ{¨~¨’¨™¨›¨ ¨Ŗ¨ύЍ¯¨ĩ¨æ¨Ē<ĒHĒRĒ Š"Š%Š/ŠfĒiĒwĒ|ĒĒ;ŦCŦ’ŦŸĒĸĒĨĒŽĒŲĒßĒâĒđĒöĒųĒđĒöĒųĒĢ Ģ ĢĢ Ģ ĢĢ#Ģ&ĢĢ#Ģ&Ģ2Ģ5Ģ8Ģ2Ģ5Ģ8ĢFĢLĢOĢ2Ģ5Ģ8Ģ:Ģ2Ģ5Ģ8Ģ:Ģ2Ģ5Ģ8Ģ:ĢFĢLĢOĢYĢdĢyĢĢ€ĢyĢĢ€Ģ‹ĢĢĢ‹ĢĢĢžĢ¤Ģ§ĢžĢ¤Ģ§Ģ°ĢŗĢļ̰̺ĢļĢĀĢÆĢÉĢĀĢÆĢÉĢŌĢÛĢŪĢŌĢÛĢŪĢéĢCŦUŦŌĢÕĢŪĢáĢÕĢÛĢáĢéĢCŦUŦŦŦŦŦ Ŧ#Ŧ ŦŦŦŦ Ŧ#ŦˇŦv˛~˛¨˛°˛ŗĩE­N­Q­\­°˛ģ˛E­H­Q­T­H­N­T­\­°˛ģ˛\­j­ģ˛Ų˛\­b­ģ˛Á˛b­j­Á˛Ų˛¸­ģ­ž­É­„ŗ”ŗ¸­ģ­ž­Á­Á­É­„ŗ”ŗÉ­×­”ŗĻŗĪ­×­”ŗĻŗ%Ž(Ž+Ž6Žtŗ„ŗ%Ž(Ž+Ž.Ž.Ž6Žtŗ„ŗ6ŽDŽdŗtŗ<ŽDŽdŗtŗ˜Ž›ŽžŽŠŽŲ˛ä˛˜Ž›ŽžŽĄŽĄŽŠŽŲ˛ä˛ŠŽˇŽä˛ŗŠŽ¯Žä˛ę˛¯ŽˇŽę˛ŗüŽ˙ޝ ¯ŗ ŗüŽ˙ޝ¯¯ ¯ŗ ŗ ¯¯ ŗ+ŗ ¯¯ ŗŗ¯¯ŗ+ŗc¯f¯i¯t¯+ŗ6ŗc¯f¯i¯l¯l¯t¯+ŗ6ŗt¯‚¯6ŗTŗt¯z¯6ŗ<ŗz¯‚¯<ŗTŗ”¯—¯˜¯¤¯§¯ǝ¤¯§¯ǝĩ¯Tŗdŗ¤¯§¯ǝ­¯­¯ĩ¯Tŗdŗĩ¯¯ɯP˛d´"ĩĩ¯ģ¯ɯΝدną‰ąP˛d´"ĩĩ¯ģ¯ɯΝدnąĸąP˛d´"ĩø¯û¯° °4°7°:°E°Đąāą4°7°:°=°=°E°Đąāą]°`°c°r°x°y°r°x°y°„°‡°а„°‡°а–°œ°Ÿ°–°œ°Ÿ°¨°̰ް¨°̰ް𰞞¨°̰ްą°ą°š°˛˛š°Į°đą˛ŋ°Į°đą˛ī°ō°õ°ą@˛P˛ī°ō°õ°ø°ø°ą@˛P˛ ą#ą&ą1ą0˛@˛ ą#ą&ą)ą)ą1ą0˛@˛1ąEąHąKąEąHąKąVą ˛0˛EąHąKąNąNąVą ˛0˛Vądą˛ ˛\ądą˛ ˛dąnąāąđąjąnąāąđąi˛l˛o˛v˛˛“˛–˛¨˛i˛l˛o˛r˛˛“˛–˛™˛r˛v˛™˛¨˛´´"ĩKĩ´´(ĩKĩ7´:´@´C´:´@´C´R´ÆĩÉĩ×ĩÚĩŨĩSš[špšxš›ģ ļļļ$ļ'ļ0ļrļ{ļ~ļŒļxš€šrļuļ~ļļuļ{ļļŒļxš€šŒļ›ļ€šœšŒļ’ļ€š†š’ļ›ļ†šœšßļâļåļņļœš¤šßļâļåļčļčļņļœš¤šņšĀšņļ÷ļ¤šĒš÷ļˇĒšĀšDˇGˇJˇVˇĀšČšDˇGˇJˇMˇMˇVˇĀšČšVˇeˇČšäšVˇ\ˇČšΚ\ˇeˇΚäšЎŦˇ¯ˇģˇäšėšЎŦˇ¯ˇ˛ˇ˛ˇģˇäšėšģˇʡėšēģˇÁˇėšōšÁˇʡōšē ¸¸¸¸ēē ¸¸¸¸¸¸ēē¸,¸ē,ē¸#¸ēē#¸,¸ē,ēb¸e¸h¸t¸,ē4ēb¸e¸h¸k¸k¸t¸,ē4ēt¸ƒ¸4ēRēt¸z¸4ē:ēz¸ƒ¸:ēRē’¸•¸—¸Ĩ¸ĩ¸¸¸ģ¸Į¸[šhšĩ¸¸¸ģ¸ž¸ž¸Į¸[šhš*š-š0š<šEšHšKšSšhšpšEšHšKšNšNšSšhšpšŧēŋēÅēČēŋēÅēČē×ēģ(ģeģxģģ(ģkģxģĻģŠģˇģÃģÆģCĀKĀöĀūĀ"Ãŧ ŧ ŧ&ŧwŧ€ŧƒŧ‘ŧūĀÁwŧzŧƒŧ†ŧzŧ€ŧ†ŧ‘ŧūĀÁ‘ŧ ŧÁ"Á‘ŧ—ŧÁ Á—ŧ ŧ Á"Áäŧįŧęŧöŧ"Á,Áäŧįŧęŧíŧíŧöŧ"Á,ÁöŧŊ,ÁJÁöŧüŧ,Á2ÁüŧŊ2ÁJÁIŊLŊUŊaŊJÁTÁIŊLŊUŊXŊXŊaŊJÁTÁaŊpŊŒĀ™ĀgŊpŊŒĀ™ĀąŊ´ŊˇŊÃŊ™ĀĄĀąŊ´ŊˇŊēŊēŊÃŊ™ĀĄĀÃŊŌŊĄĀŊĀÃŊÉŊĄĀ§ĀÉŊŌŊ§ĀŊĀžžž%žŊĀĘĀžžžžž%žŊĀĘĀ%ž4žrĀĀ+ž4žrĀĀužxž{ž‡žĀŒĀužxž{ž~ž~ž‡žĀŒĀ‡ž–žeĀrĀž–žeĀrĀåžčžëž÷žXĀeĀåžčžëžîžîž÷žXĀeĀ÷žŋKĀXĀũžŋKĀXĀŋ+ŋ.ŋ1ŋ+ŋ.ŋ1ŋ=ŋTÁcÁ+ŋ.ŋ1ŋ4ŋ4ŋ=ŋTÁcÁ|ŋŋ‚ŋŽŋĘĀŌĀ|ŋŋ‚ŋ…ŋ…ŋŽŋĘĀŌĀŽŋŋŌĀîĀŽŋ”ŋŌĀØĀ”ŋŋØĀîĀĀĀĀ(Ā1Ā4Ā7ĀCĀîĀöĀ1Ā4Ā7Ā:Ā:ĀCĀîĀöĀŊÁÉÁhÂ~ÂŊÁÉÁnÂ~Â÷ÂúÂÃÃúÂÃÃ"Ã6Ã<ÃPÃõÆĮĮ(ĮqČ6Ã<ÃSÃcÃiÃjÜĮÉĮĐÃëÃíÃķÃõÃŦÅÉĮČ>ČqČõÃÄ$Ä=Ä@Ä[ÄÄ$Ä=Ä@Ä[ÄÛÄáÄîÄđĮČÄ$Ä=Ä@Ä[ėĚĜėĚĜÄĖÄîÄøÄûÄ#Å,Å6Å?ÅEÅKŐÅîÄøÄûÄ#Å,Å6Å?ÅEÅKÅhÅnÅtŇŐÅāÅæÅéÅôÅĮĮāÅæÅéÅėÅėÅôÅĮĮÆÆ ÆØÆŪÆáÆ8ĮFĮ2ÆoÆ8ĮFĮAÆRÆ8ĮFĮJÆRÆ8ĮFĮ{ƁƋƑƗƧƑƗƧÆŊÆŊÆØÆŪÆáÆØÆŪÆáÆčÆ(Į8ĮØÆŪÆáÆčÆ(Į8ĮØÆŪÆáÆäÆäÆčÆ(Į8ĮčÆõÆĮĮčÆõÆĮĮņÆõÆĮĮ֎fnx‘;‘֎ڎŨŽđŽG369CGUX[UX[fnxUX[^^fnxx‘;‘â‘xŠ’qxҐؐŠ’žx–ؐېž­ېų­Ə;‘A‘ɏĖΏô}‘‚‘Ŧ‘ȑ 5ų‘ȑԑCIXqCI]q”ČœËĢ˭˲ËÍÅČĖČÖČäČōČõČøČŖĘ*ĖcĖ”ĖŽĖĖĖüĖōČõČÉÉ(É0Ę*ĖZĖ”ĖŽĖĖĖüĖōČõČÉÉFÉIÉKÉgÉ@ĖZĖFÉIÉKÉVÉ@ĖZĖFÉIÉKÉNÉgɌɰÉČÉČÉčÉįĖüĖČÉÖÉįĖüĖčÉĘ*Ė@Ė0ĘGĘIĘXĘ0Ę6Ę9Ę<Ę?ĘBĘ6Ę9ĘOĘXĘ<Ę?ĘBĘGĘIĘOĘGĘIĘXĘŖĘGĘIĘXĘ“ĘZĘhĘpĘʂʇĘZĘhĘuĘƂƇƪƏĘĖĖŠĘ¸ĘĖˏĘģĘÂĘĮĘīĘōĘõĘËĖ*ĖīĘōĘõĘøĘøĘËĖ*ĖËË#Ë&Ë)Ë=ËCËFË=ËCËFËœËJËXË_ËoËrËwËJËXËdËoËrËwËëËîËôË÷ËcĖfĖiĖlĖfĖiĖlĖ~ĖPÍâÍđÍÎWÍžÍđÍÎ\ÍbÍdÍžÍđÍ΄ÍĒÍđÍΗÍĒÍđÍüÍĸÍĒÍđÍüÍ=’K’N’Q’K’N’Q’`’‚“•“K’N’Q’T’T’`’‚“•“`’Ž’°’ļ’h’Ž’°’ļ’ˆ’˜’›’ ’’˜’›’ ’Ž’°’ļ’@“p“‚“•“´“ļ’ŧ’“$“'“,“ļ’ŧ’“$“'“,“ė’“p“‚“ ””” ””” ”/”:•M•”” ”#”#”/”:•M•/”{”}”€”7”<”?”{”}”€”:”<”?”x”X”h”k”p”]”h”k”p”{”}”€”ø”(•:•M•l•€”†”Ԕå”č”픀”†”ڔå”č”í”°”Ԕ(•:•Š•˜•§•ĩ•¸•Ŋ•Š•˜•­•ĩ•¸•Ŋ•ä•––Ņ—ū•–––'–Ī–Ō–Ֆ@—‡—ą—Ņ—-–0–;–Ī–Ō–Ֆ@—‡—ą—Ņ—-–0–D–Y–d––@—[—g—l—-–0–d––@—[—g—l—-–0–d–s–@—[—g—l—;–D–Y–d––Ė–[—g—l—q—ą—Ņ—Ī–Ō–Ֆ@— —ą— ˜Ԙژä˜ˇšŨš7˜=˜@˜Y˜\˜_˜e˜ĸ˜†˜‰˜’˜œ˜ĸ˜Á˜ĘĮ˜¨˜̘ĩ˜¸˜ģ˜Á˜ĘĮ˜Á˜ĘĮ˜Ԙژä˜Á˜ĘĮ˜Ԙژä˜Á˜ĘĮ˜ʘʘԘژä˜ä˜ˇšŨš…›ä˜ü˜˙˜™ššsš{šü˜˙˜™™š7š{š€š™™€š›š™F™Ũšãš&™F™ŨšãšI™L™N™„™›$›O›k›™’™•™—™š™ՙ›šˇšk›w›ã™é™ø™šã™é™ū™š”Î+Ī8ĪīĪĐ ŌšÎ›ÎžÎšÎŧÎŋÎÂÎÆÎ8Ī˜ĪmŅ€ŅšÎ›ÎžÎąÎ8Ī˜ĪmŅ€ŅOĪgĪmĪpĪgĪmĪpĪ{ĪšÎŧÎÆÎĖÎĪÎņÎĐXŅeŅmŅĒŅ ŌčÎëÎîÎņÎĐĐĐŋĐÂĐÅĐ8ŅXŅeŅmŅēŅŋŅĪŅ Ō#ĐŋĐÂĐÅĐ8ŅXŅeŅmŅēŅŋŅĪŅ Ō#Đ2ĐGĐRĐ2ĐGĐRЁĐ8ŅXŅēŅŋŅRĐaĐ8ŅXŅēŅŋҁĐŧĐeŅmŅĪŅōŅŋĐÂĐÅĐ8ŅŋŅĪŅņÎĪXŅeŅũÎĪXŅeŅĪĪXŅeŅĪ+Ī˜Īī΀ҕŅĪĪĪ+Ī˜Īī΀ҕҝĪĮĪÍĪĐĪĮĪÍĪĐĪÛĪFŌIŌWԤ͝Ķ$Ø`ŌlŌrŌxŌ`ŌcŌfŌhŌ`ŌcŌfŌhŌ`ŌcŌfŌhŌ‰ŌŸŌ¤Ō§Ō—ŌŸŌ¤Ō§ŌŸŌ¤Ō§Ō˛ŌäĶūĶÔÔūĶÔÔÔÔÔÔÔÔ'Ô'ÔˇÖíÖ ×N×Á×'Ô=ÔBÔEÔ5Ô=ÔBÔEÔ=ÔBÔEÔPÔpÔÕÕˇÖíÖ ×N×Á×pÔ‚ÔÕÕ Õ&Õ)Õx֐֡ÖíÖ ×N× ×yÔ|ÔÔ‚ÔHÕNÕQÕ˙ÕÖ֐֡ÖíÖ ×N×i׉נ×\Õ˙ÕÖ֐֡ÖíÖ ×N×i׉נ×\ÕkÕ€Õ‹ÕkÕ€Õ‹ÕēՐ֯։נ׋՚Ր֯։נ×ēÕüÕ¯ÖˇÖíÖ ×N×S×˙ÕÖÖxÖy×‰×‚ÔˆÔ‹ÔÔœÔŸÔ ÔŽÔąÔ´Ô ÔĨÔ¨ÔŽÔąÔ´ÔŽÔąÔ´ÔÄÔĘÔÍÔŽÔąÔ´Ô¸ÔžÔÄÔĘÔÍÔÄÔĘÔÍÔÜÔßÔâÔÄÔĘÔÍÔĐÔÖÔÜÔßÔâÔÜÔßÔâÔōÔõÔøÔÜÔßÔâÔæÔėÔōÔõÔøÔōÔõÔøÔÕx֐ÖōÔõÔøÔûÔûÔÕx֐ÖŨŌãŌåŌėŌīŌ'Ķ*Ķ-ĶÁ×î×Á×Ä×Ę×Í×Ä×Ę×Í×Û×'Ķ*Ķ-Ķ<͎ÖÃÖ'Ķ*Ķ-Ķ0Ķ0Ķ<͎ÖÃÖ¯ĶÄĶĮĶĘĶÄĶĮĶĘĶäĶÄĶĮĶĘĶĐĶÖĶäĶÄĶĮĶĘĶĖĶÄĶĮĶĘĶĖĶÄĶĮĶĘĶĖĶĻØ¯Ø˛ØšØĐØØØĻØŠØ˛Øĩ؊دØĩØšØĐØØØšØÃØØØīØšØŋØØØŪØŋØÃØŪØīØŲŲ%Ų(ŲŲ%Ų(Ų6ŲFŲIŲZŲJÚMÚPÚÚŗÚÖÚÛšŲŲ ŲĒŲÚ ÚßŲâŲåŲÚßŲâŲåŲÚßŲâŲåŲÚÚJÚMÚPÚ ÚŗÚÚJÚMÚPÚ ÚŗÚÚJÚMÚPÚ ÚŗÚ/ÚAÚ ÚŗÚ/Ú1Ú7Ú:Ú1Ú7Ú:ÚAÚ ÚŗÚJÚMÚPÚ_ÚyÚ„ÚJÚMÚPÚSÚyÚÚSÚ_ÚÚ„ÚZÛ}ÜĐŨëŨtÛ{ÛöÛũۃۉۋېÛ=Ü`܃ۉۋېÛ@ÜHÜKÜ`ܐەÛ-Ü2Ü ÛŖÛ¯Û˛ÛŖÛ¯Û˛ÛžÛÁÛÄÛĻÛ¯Û˛Û´ÛˇÛžÛÁÛÄÛžÛÁÛÄÛÖÛŲÛÜÛžÛÁÛÄÛĘÛĐÛÖÛŲÛÜÛžÛÁÛÄÛÆÛžÛÁÛÄÛÆÛžÛÁÛÄÛÆÛÖÛŲÛÜÛëÛîÛöÛÜÛßÛâÛëÛîÛöÛ ÜÜÜ-Ü‡ÜšÜÜ ÜšÜÜ Ü˛Ü¸ÜēܚܝܠÜĻÜŦܸܲÜēܚܝܠÜĸܚܝܠÜĸܚܝܠÜĸܸܲÜēÜĮÜĘÜÍÜĮÜĘÜÍÜŪÜäÜåÜĮÜĘÜÍÜŅÜ×ÜŪÜäÜåÜŪÜäÜåÜôÜôÜŨ ŨŨŨ ŨŨŨSŨ[Ũ^ŨaŨSŨ[Ũ^ŨaŨ[Ũ^ŨaŨlŨƒŨŨ[Ũ^ŨaŨdŨdŨlŨƒŨŨ7Ū:Ū=ŪJŪ§ŪšŪ7Ū:ŪCŪFŪ=ŪCŪFŪJŪ§ŪšŪgŪsŪyŪ~Ū€ŪƒŪlŪsŪyŪ~Ū€ŪƒŪßß ßPã ß@ßFßIßLßPßđāPáÃâã ß8ßđāPáÃâã á"á(á+á"á(á+á6á^ßißlßmßißlßmßsßsßyß~߁ßyß~߁ßā¨áčá4â^âã5ãyß~߁߇ߊߋ߇ߊߋßĀߨá¸á4âLâ‡ßŠß‹ß™ß™ßŖß¯ßĩߪߝßĩßĀߨá¸áŖß¯ßĩßĀߨá¸áŖßĻßĩ߸ßĻ߯߸ßĀߨá¸á4â7â=â@â7â=â@âLâĀ߸ߏáČáã5ãę߸ߏáČáę߸ߏáČáę߸ߏáČáđ߸ߏáČáøßāČáØáøßāČáØáøßāČáØáūßāČáØáāāØáčáāāØáčá āāØáčáā"āčáøáā"āčáøáā"āčáøá"ā0āøáâ(ā0āøáâUāXāYācāfāiāYāZā]ācāfāiācāfāiātāââcāfāiālālātāââtāđā•â­âwāzā~āđā•â­â§āŋāÅāČāŋāÅāČāĶāPá’áâ!â$â4â­âÃâ^á‰á­âÃâbá‰á­âÃâgãŊãČãääQägãmãsãvãxã{ã}ã•ã›ãžã°ãŗãļãŊãää°ãŗãļãšãšãŊãääŌãęãđãķãfäiäwää’ä“äōäåœäĨä¨äšäČäčäœäĨä¨ä¯äČäĐäœäŸä¨äĢäŸäĨäĢä¯äČäĐä¯äšäĐäčä¯äĩäĐäÖäĩäšäÖäčäfåiåwåææxæ‚å”å—å˜åŧåÅåČåĪå æ,æŧåŋåČåËåŋåÅåËåĪå æ,æĪåŲåæ æÕåŲåæ æ,æ/æ5æ8æ/æ5æ8æDæ”æĢčĀčqęuęxę€ę„ęę›ë°æŗæļæšæįįĀčĐčĘæūæįĢčĐčqęuęxęę›ëöæūæį¤čęđęqë›ëįį įįį-į6į9įį$į'į-į6į9į-į6į9įEįNįQį0į6į9į<į?įEįNįQįEįNįQį]į`įcįHįNįQįTįWį]į`įcį]į`įcį}įƒį†įę°ęƒį†įę°ę}įƒį†į˜įžįĄį}įƒį†įŒį’į˜įžįĄį˜įžįĄįļį˜įžįĄį§į­įļįļįÎįÔį×įĐęđęÔį×įĐęđęÎįÔį×įéįėįīįÎįÔį×įŨįãįéįėįīįéįėįīįũįččīįôį÷įũįččũįččč#č&č°ęĐę#č&č°ęĐęč#č&č8č>čAčč#č&č,č2č8č>čAč8č>čAčPčVčYč8č>čAčDčJčPčVčYčPčVčYčhčPčVčYč\čbčhčĐčŌčŲčÜčáčųčééäčđčķčųčééųčéééééüčééé ééééééé1é7é:éë0ë7é:éë0ë1é7é:éLéRéUé1é7é:é@éFéLéRéUéLéRéUédégéjéLéRéUéXé^édégéjédégéjé„éŠéé0ëKëŠéé0ëKë„éŠééĸé„éŠéé“é™éĸéĸéēéĀéÃéđęëĀéÃéđęëēéĀéÃéÕéÛéŪéēéĀéÃéÉéĪéÕéÛéŪéÕéÛéŪéíéķéöéÕéÛéŪéáéįéíéķéöéíéķéöéę ęęíéķéöéųé˙éę ęęę ęęę#ę&ęę ęęęęę#ę&ęę#ę&ę5ęę#ę&ę)ę/ę5ęžæÁæūæįˇëRė`ėūíė8ėDėGė8ėDėGėIė`ėūí8ė?ėAėDė`ėkė8ė?ėdėkėzėƒė†ė’ė}ėƒė†ė‰ėŒė’ė’ėĢė´ėˇė’ėšėėĸėĨėĢė´ėˇė’ėšėė ėĢė´ėˇėÃėŽė´ėˇėēėŊėÃėííí-íí íííí!í!í-íí í-í:í=í@í-í:í=í@í:í=í@íí íĒí:í=í@íí íĒí:í=í@íí íĒíhíuí íĒímíuí íĒíCîFîIîTî`îhîCîFîIîLîLîTî`îhîž›Ė›œœAœDœGœZœAœDœGœJœŗœļœšœ˜ŗœļœšœŧœۜīœ#°î#ī0ī‹ī^l ļļ˙ž2žáäįúáäįęUžXž[žnžUžXž[ž^ž‚ž“žšžĮž¸īđ¨đŪđūž Ÿ@ŸVŸŸ„Ÿ‡ŸšŸŸ„Ÿ‡ŸŠŸķŸöŸųŸ  ķŸöŸųŸüŸ / U c ņō ō;ōmņoņņ¸ņWōtōõ&õ)õ+õ€ōõ0õæõđõ0÷ķōķ÷÷mķoķrķxķŽķõ@õĐõđõīö÷0÷Žķõ@õŦõđõīö÷0÷ĐôĶôęôíôÛôęôíôķôöôųô~õ‘õ0öPööõ%ömöīö÷0÷PöVöYö_öž Ŧ ā ö ö ?ĄNĄrĄ!Ą$Ą'Ą:Ą!Ą$Ą'Ą*Ą•Ą˜Ą›ĄŽĄ•Ą˜Ą›ĄžĄÂĄĶĄųĄĸD÷Ÿ÷°÷#ø‡÷‰÷Œ÷Ÿ÷°÷ŋ÷Ä÷Æ÷ŋ÷Ä÷Æ÷øÍ÷Ũ÷ā÷â÷DøųųĮųĐųėûJøKøNøiøløoørøvøųpųOûbûJøKøNøaøųpųOûbû'ų?ųEųHų?ųEųHųSųiøløvø|øøĄøĐų0ûGûOûŒûėû˜ø›øžøĄøßųåųčųú’ú•úû0ûGûOûœûĄûąûėûķųú’ú•úû0ûGûOûœûĄûąûėûķųúú"úúú"úTúû0ûœûĄû"ú1úû0ûœûĄûTúŒúGûOûąûÔûú’ú•úûĄûąûĄøäø0ûGûäøųpųĮųbûwûįøęøîøųpųĮųbûwû‡ųŸųĨų¨ųŸųĨų¨ųŗųöûųûü`üpü‡ü‘üÂü üüüü(ü4ü7ü:ü4ü7ü:üAüpü€ü4ü7ü:ü=ü=üAüpü€üSüVüYü`ü€ü‡üSüVüYü`ü€ü‡üSüVüYü\ü\ü`ü€ü‡ü'ĸzĸŽĸŖ0ĸoĸŽĸžĸ4ĸoĸŽĸžĸŽĸ‘ĸ—ĸšĸ‘ĸ—ĸšĸŠĸ6Ŗ›¤Ŗ¤Á¤§‚§‰§ç6Ŗ|Ŗ‰§ç:Ŗ|Ŗ‰§ç‰§Œ§’§•§Œ§’§•§Ą§‚Ŗ…ŖˆŖĮŖĘŖÍŖ*§‚§*§-§3§6§-§3§6§B§öŖųŖüŖ¤¤¤1¤t¤}¤€¤7¤:¤>¤A¤D¤K¤Q¤R¤W¤Z¤]¤d¤g¤h¤h¤k¤n¤t¤}¤€¤t¤}¤€¤›¤Ŗ¤Á¤t¤}¤€¤‡¤Ŗ¤­¤t¤w¤€¤ƒ¤w¤}¤ƒ¤‡¤Ŗ¤­¤‡¤‘¤­¤ˇ¤¤‘¤­¤ˇ¤‘¤›¤ˇ¤Á¤—¤›¤ˇ¤Á¤Á¤§‚§‰§çß§Á¤Ų¤ܤá¤ĀĨËĨâĻîĻŲ¤ܤá¤ė¤ËĨáĨîĻķĻė¤û¤ķϧû¤;Ĩ:ĻdĻĨ;Ĩ:ĻdĻ:Ļ=ĻCĻFĻ=ĻCĻFĻRĻ;ĨNĨTĨWĨQĨTĨWĨfĨiĨlĨqĨĀĨáĨúĨyĨ¤ĨŦĨĀĨáĨúĨyĨĨŦĨĀĨyĨĨ˛ĨĀĨĨšĨëĨúĨ–ĨšĨëĨúĨšĨ¤ĨáĨëĨ Ĩ¤ĨáĨëĨyχĻŌĻâĻĨĻŠĻŦĻąĻäüįüęü@ũPũ¨ũōü7ũmũ¨ũöü7ũmũ¨ũ‹ũŽũ”ũ—ũŽũ”ũ—ũ¨ũôũ÷ũúũPūcūhūkūŧūūGūūŧūūGūūŧūŸūĸū¨ūĢūĸū¨ūĢūŧū,,,,¤,Ž,ą,ŗ,ģ,Á,Ä,Ø,0. ˙˙˙ ˙"˙0˙K˙P˙k˙p˙s˙€˙Ž˙˙ž˙ ˙ĸ˙°˙˛˙Ā˙Â˙Đ˙Ķ˙ā˙â˙đ˙ō˙ "02@BPR`bpr€‚’ ĸ°˛ĀÂĐŌāâđō "02@BPR`}€ ŊĀŨāũ =@]`‰ÃĐ(0ˇĀX`ÎĐEPÁĐPP°° s€ëđ§°] ` Å Đ W ` 8@kpĘĐ``*0s€Ûā÷[`w € Û!ā!j"p"´#Ā#y$€$.%0%Ö%ā% ((Ŋ(Ā(=*@*++*,0,U-`-•. .V/`/)000Ŋ1Ā1Ĩ3°3š4 4§5°5 99ˇ:Ā:í<đ<v?€?7B0)*@BÎBĐBLEPEĖGĐGLJPJĄL°LW WÍaĐa_c`c÷ghkhphjjŠkk"m0mÂnĐno o™r rČrĐrųrs3s@sispsŖs°sBuPuvvĸw°wx x˜x xˆyyŽ{°{||ũ€ppUƒ`ƒč„đ„Š…°…‰‰epOŽPލްŽâ‘đ‘´“Ā“l•p•ЕЕŅ—ā—…››#0ĮžОc p ĸĸŖŖß§ *í,.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.gcc_except_table.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str.debug_loc.debug_ranges$.ö˙˙o88ä8 @6@\L\LŅH˙˙˙o.ę.ęČUū˙˙oøđøđād ØņØņˆ m `ū`ū0 v  #qĀ Ā p|0)0)ŗ~‚ä§ä§ˆ¨¨Ü6@ÜŪÜŪDž ī īy¨b ¸9€[" æ9Āfį :ĐR l:ĀV  ¤:āYā Ī:P}7 .;=. f;@@› ‰;0R Ú;ô;<Ā}ø 4<0Ŧļ p<p§ !°<€ģ^ Û<î< Dd =2= ~P e=@BŽ" ˜=tx Č=aM ņ=>Ā" *>|m" O> Üķ |>`)" ą> " Î>°~( ? ˙" 6?\? ē^ ‡?, °?(­" ų??T /@°[" d@00" @@*Æ" Ū@bJ Ađ0N WA`/É" „A€Pę ČA`" #BPõ [B¨ !ĩB°–# ×B°Ž2" )CEC§!]CX ąCÖCæCc# 'D`n hDĐ?= ­D ÉDāb ÷D€æ EdE` e" ›EāũÜ ŨEĐr)" F#ˆ 9FrF0˙" ‰Fđ‘Ä" ŊFÕFPb1 G¸Š!;GFP }G€c! ĩG " įG@nA H(H:HP`" XHāŦ !HÔĻ !ŗH oy" ÛHÎd I@ŲÕ II`I0Ø! ‚I’IĻINŲ! ēI 4S J€ŪV! aJP}7 ĀJŨ#! įJ°c+ K≠TK0å* }K Õ ¤Kđa ÅKŌ" ëK ¸N 1L`å XL@9M Lj ÆL( đL`, M@Ā/ oMpŦ!•Mp˙" ŽM ČM€V  ÷M#NĐüØ bNĐ€" ‚Np=0 ÅNP`" ãND4 O$O°0, HOn˜ jO|Oā" ŊOĐOPí3 ūO`V  .PĐR €P“P§Pø§ !üP˙" (Qp` ZQ02O ĒQĀFT ÖQ0‡" ,R€ÎŠ RRā/ xR@z! ­RŋRĪRpú< íR—! S S@S€<. †SĨS'  žSĀÛ5! ÷S0§ !T0T  4 MTđûŌ „TĐ"( T@;2 UPJQ" U€Đû €Uđš, ęUV`-5" ;Vpz! pVÅ› ËV0%Ļ" ęVüVpqŸ FW°.* uW b! –WČW " úWxĒ!:XZXĐ" °XP’Ŋ æXĀvz YО“" pYY@;2 åYZ€;" SZ0" ‰ZĻZ GŅ ģZPq" ķZĩ) [@s)" C[ .ļ" p[PÎ! ’[q+ ŧ[ [´ ú[PŽX" *\`Ø&! T\ 0N Ļ\ ë^ Į\}] ų\ ]`Ŧ!#]Y¸ĄY]k]đLŽ ’]āĻ!´] Ŧ !Ū]Ā1å" (^ܡM^pEN |^ē^ĀÜ.! ė^0:‰ /_A_ĐnC" †_—_ŠŲ! š_ĀX ä_(`q`”`„§!Õ`@]R a+aā´) Qa`/ˆ }a " ŗaĶaPŸ ėa Ŧ  Dbp * ˆb¨b°{ß" GcđĻ !xcpQ§ ÁcŲcˎd°s’" ldp" Ŋd0" ūdА" 3e‡ deā§ !eD§ !žeŅeđä ˙e⎠f°5]" qfb  ‘fĀŲ#! ¸f€Ú(! äf ] gg17 cgPˇK ÎgßgP h W  5h Ē !Ih0. bhjz" °hÂh€?ˇ" i^O 0iЇ  \i@‘a Ži " Ôiōieå j`n" 8jjā`W ēj ģ‚ kp"D" Nk€N ˆk€D ĩkÆk€˙" īk}] !l4l Ø-! el@" l€Zw Äl‰Õ" m0—" rmЏq –mUW ēmp•`" n@1N Jnđ> jnā~y( œn" ÷n TU ođ/( Goeo„o€" Ķo[" pÔ§ !,pā0, SpD!up xč" ļpĀ#š" Üpđ˛â q mD 8qNq`t wqtˇĨqā–# Įqđ“ āq`äÄ rĀĒ!%r8rā.* crņˇŽr`>b ŗrp~9 ærĐ2O (s@V  Ws@ČC ŖsĒD!Îs 00 t€L$ 4tĀj st=$ Ąt bå Ėt@Ōä u€" NuH tuîû ‹u" ÉuĐ> éu`)" v­!Ov`vātŪ xvk’" évûvwĀ×0! MwP˙" mw€wŌw°­" x r(" Gx`¨!qxĐAà Ąxȧ !Čxđ…Ü đxyy`ˇ 3y@ĩô Oy­!yĐa" Ũyđˇz€2O [zĀžy œzāŧŪ ¸z1N { ˙" &{<§!>{P{Ā3R Ÿ{ą{ Î! Ķ{ • |` Ø" 5|ė§ !\|j Ŗ|0ˇ¯|ū|°]C !}3} # s}ãŲ! ‹}ĄE Ä}â}ũ}2~ĖĻ!f~Đr)" Ž~ ņ Ä~@ - ë~b  đWT * RŖ _ O> ģĐ8d €Đ ‡" 8€s3" `€Điá ž€@W  ɀé€î < =W dā1N š€ˇâ@Û"! ‚-‚K@ n‚°L@ §‚¸‚Đu" ë‚ā" Eƒ0Äß ƒ 3O փ€$Ž" ūƒ xx" T„`K( i„Pd  š„ RŖ Ī„9” … W- " R… Ē €…€dN ¯…H Յö…°<. 1† F†āO> Ĩ†›“" ˙†€Û=! @‡W‡v‡V  LJrĢ Ū‡āa  ū‡č +ˆ@ŲÕ Zˆ„ˆđ;* ˆäˇįˆĀ" ‰Ā(}" b‰0m’" ͉ ¨!Š V  ,ŠKŠPJQ" gŠĐd× ‘ФЧ !֊€!( ũŠ0… 3‹āV  `‹PX2 …‹™‹ŧ§ !ˋ`FP ŒPã QŒØ0! …Œ`" Ȍ V  øŒākĸ ,€Ü'! W0%Ļ" v€¯1 ¯>T ፰Y  Ž€Ŧ !4Ž@9M [ŽmŽP@I ʎĐˇ5āp+ _°Lí " ŠÁ\¸Ə؏@" %ā˙" m`W –°3ę" ߐ@ŠD!‘K‘°wn" ˜‘€;" 鑀hŽ (’pß" Ė’ܒĀÚ9! “@­!s“ps3" “­“į“°! ”ā; =”āa  ]”…”čĻ!¯”@[ į”@A? $•ØˇJ•Pc( q•Āķ “•0/% ī•–p * A–y–°Å ą–͖Ū–— §! —3—°_å ^— ] ˜—0­!헰|\ "˜Z  C˜P" ˜Ā˙" Ĩ˜|ˇԘ`c—" ?™n™š™v’" ī™ ũ… !šĐX" Tšd§ !‘š ˇ ģšܚÚ-! ›" [›@Ü1! ›°ũ$ ë›œĀ¯‰ 3œFœ3" {œ€tR ˛œƜ0Äß  ~P CĐU nā@` ĨāØ,! ՝@ō𠞀A1  ;ž0d mžžđˇ" ēž°gī ëžĀ(}" 4Ÿ0’ ~ŸœŸ¤§ !ҟ@)   āŧŪ 2 đŨô y — c" Ė ( å *Ą€.* WĄgĄ†Ąā1  ČĄŲĄāđ[ ôĄZ  "ĸĀ:S _ĸđûŌ –ĸ`n" ąĸP0N ũĸ|§!#Ŗx¨!SŖ0ˇZŖ0Z  ŽŖn˜ °ŖÄŖ€Č‘ úŖ¤ Ũ E¤}7 ¤Äˇģ¤PE|" ĨĀ" *Ĩ0LL NĨ0÷ķ iĨP§!žĨ <. ÛĨĀr” ĻĐG|" PĻbĻ í ĩĻ`Ug öĻ h. '§ŪQ! |§°˙" §đ„š" Ũ§Ņˇ¨`o‡ R¨j¨Ôˇ‹¨üĻ!썰;" а…Ũ" MŠđŪ` ŽŠ ˙" ĢŠŊŠĪŠ A* đŠĒ ˙" CĒātŪ [Ē@qœ šĒ"ļǐy" Ģ€W )ĢBĢEY dĢtĢ@ - ĩĢđ“ ÎĢ@@› ņĢp?T 2Ŧ PV Ŧ@" ÂŦĀ˜" ­,­K­+" €­`Ų= ĩ­W  ä­0ÃA 8Ž€ĢD!cŽĀ:-" ¯ŽōˇáŽ" -¯¨!I¯ϝL/ ҝé¯@ŠÖ +°U°°e „°°úđ ļ°@+" Ũ° mD ų°0l/ Vą~ą@. šą@*Æ" čąĐ€" ˛`" F˛Đ•"  ˛ Íũ Ú˛Ģ ŗ˙" 4ŗĀĩÛ ˆŗđ ēŗp~9 íŗŒ§ !&´đSĄ s´" ¨´P/\ á´ū´  ĩāq' /ĩhk" `ĩ0‡" ļĩ00" âĩ'  ûĩ°! ļÉ3 eļ`d “ļĀ“Ŧ" ĮļĀŨ#! crtstuff.c__JCR_LIST__deregister_tm_clonesregister_tm_clones__do_global_dtors_auxcompleted.6248__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrygtest-all.cc_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEv.localalias.384_ZN7testing8internal17TestEventRepeaterD0Ev.localalias.388_ZN7testing8internalL19SumOverTestCaseListERKSt6vectorIPNS_8TestCaseESaIS3_EEMS2_KFivE.constprop.391_ZN7testing8internalL14PrintOnOneLineEPKci.constprop.393_ZNSs4_Rep10_M_disposeERKSaIcE.part.7_ZN7testing8internalL21FormatDeathTestOutputERKSs_ZN7testing12_GLOBAL__N_126PrintByteSegmentInObjectToEPKhjjPSo_ZN7testing7MessagelsIKcEERS0_RKPT_.isra.62_ZGVZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczE13in_color_mode_ZZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczE13in_color_mode_ZN7testing8internalL15kTypeParamLabelE_ZN7testing8internalL16kValueParamLabelE_ZN7testingL20kTestShardStatusFileE_ZTIN7testing8internal12_GLOBAL__N_123ClassUniqueToAlwaysTrueE_ZN7testing8internalL23HasGoogleTestFlagPrefixEPKc_ZN7testing8internalL26g_in_fast_death_test_childE_ZN7testing8internalL23kCurrentDirectoryStringE_ZN7testing8internalL17g_captured_stdoutE_ZN7testing8internalL17g_captured_stderrE_ZN7testing8internalL21g_injected_test_argvsE_ZN7testing8internalL20PrintAsCharLiteralToIwwEENS0_10CharFormatET0_PSo_ZN7testing8internalL22PrintAsStringLiteralToEwPSo_ZN7testing8internalL20PrintCharsAsStringToIcEEvPKT_jPSo_ZN7testing8internalL20PrintCharsAsStringToIwEEvPKT_jPSo_ZN7testingL19FormatCountableNounEiPKcS1__ZN7testing8internalL12kUnknownFileE_ZN7testing8internalL27PrintTestPartResultToStringERKNS_14TestPartResultE_ZN7testing8internalL25FormatCxxExceptionMessageEPKcS2__ZN7testingL15kTestShardIndexE_ZN7testingL16kTestTotalShardsE_ZN7testingL16kUniversalFilterE_ZN7testing8internalL12FlagToEnvVarEPKc_ZN7testing8internal18StreamableToStringIPwEESsRKT_.isra.349_ZN7testing12_GLOBAL__N_115IsSubstringImplIPKcEENS_15AssertionResultEbS3_S3_RKT_S7__ZN7testing12_GLOBAL__N_115IsSubstringImplISsEENS_15AssertionResultEbPKcS4_RKT_S7__ZN7testing12_GLOBAL__N_115IsSubstringImplISbIwSt11char_traitsIwESaIwEEEENS_15AssertionResultEbPKcS8_RKT_SB__ZN7testing12_GLOBAL__N_115IsSubstringImplIPKwEENS_15AssertionResultEbPKcS6_RKT_S9__ZN7testing8TestCaseD0Ev.localalias.385_ZN7testing8internal12UnitTestImplD0Ev.localalias.387_ZGVZN7testing8UnitTest11GetInstanceEvE8instance_ZZN7testing8UnitTest11GetInstanceEvE8instance_ZN7testingL18kDefaultOutputFileE_ZN7testing8internalL22ExecDeathTestChildMainEPv_ZN7testingL20kDeathTestCaseFilterE_ZN7testingL18kDisableTestFilterE_ZN7testing8internalL17PrintColorEncodedEPKc.constprop.390_ZN7testing8internalL24kColorEncodedHelpMessageE_ZN7testing8internalL25kAlsoRunDisabledTestsFlagE_ZN7testing8internalL19kBreakOnFailureFlagE_ZN7testing8internalL20kCatchExceptionsFlagE_ZN7testing8internalL10kColorFlagE_ZN7testing8internalL19kDeathTestStyleFlagE_ZN7testing8internalL17kDeathTestUseForkE_ZN7testing8internalL11kFilterFlagE_ZN7testing8internalL25kInternalRunDeathTestFlagE_ZN7testing8internalL14kListTestsFlagE_ZN7testing8internalL11kOutputFlagE_ZN7testing8internalL14kPrintTimeFlagE_ZN7testing8internalL15kRandomSeedFlagE_ZN7testing8internalL11kRepeatFlagE_ZN7testing8internalL12kShuffleFlagE_ZN7testing8internalL20kStackTraceDepthFlagE_ZN7testing8internalL19kStreamResultToFlagE_ZN7testing8internalL19kThrowOnFailureFlagE_ZGVZN7testing8internalL23ExecDeathTestSpawnChildEPKPciE16stack_grows_down_ZZN7testing8internalL23ExecDeathTestSpawnChildEPKPciE16stack_grows_down_ZN7testingL31GetReservedAttributesForElementERKSs_ZN7testingL28kReservedTestSuiteAttributesE_ZN7testingL29kReservedTestSuitesAttributesE_ZN7testingL27kReservedTestCaseAttributesE_GLOBAL__sub_I_gtest_all.cc_ZStL8__ioinit_ZN7testingL22kDefaultDeathTestStyleE_ZTSN7testing8internal12_GLOBAL__N_123ClassUniqueToAlwaysTrueE.L1650.L3537.L1888.L1934.L1651.L1653.L1654.L1655.L1656.L1657.L1658.L1659.L1660.L1661.L3538.L3540.L3541.L3542.L3543.L1889.L1891.L1892.L1893.L1894.L1895.L1896.L1897.L1898.L1899.L1935.L1937.L1938.L1939.L1940.L1941.L1942.L1943.L1944.L1945__FRAME_END____JCR_END__DW.ref.__gxx_personality_v0_GLOBAL_OFFSET_TABLE_DW.ref._ZTIN7testing8internal26GoogleTestFailureExceptionE__x86.get_pc_thunk.bx__TMC_END____dso_handleDW.ref._ZTISt9exception__x86.get_pc_thunk.cx_DYNAMICfileno@@GLIBC_2.0getpagesize@@GLIBC_2.0_ZN7testing8internal6Random8GenerateEj_ZN7testing16AssertionFailureERKNS_7MessageEfputs@@GLIBC_2.0abort@@GLIBC_2.0_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEv__errno_location@@GLIBC_2.0_ZTIN7testing4TestE_ZN7testing8internal12UnitTestImpl32SuppressTestEventsIfInSubprocessEv_ZN7testing15AssertionResultlsIPKcEERS0_RKT__ZNK7testing8internal12UnitTestImpl17test_to_run_countEv_ZN7testing11IsSubstringEPKcS1_PKwS3__ZN7testing8TestInfo3RunEv_ZN7testing8internal18StringFromGTestEnvEPKcS2_sigemptyset@@GLIBC_2.0_ZNK7testing8TestCase11GetTestInfoEi_ZTIN7testing8internal17StreamingListenerE_ZNK7testing18TestEventListeners22EventForwardingEnabledEv_ZN7testing11Environment5SetupEv_ZN7testing8internal23DefaultDeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE_ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEi_ZTVN7testing8internal17StreamingListener20AbstractSocketWriterE_ZTSN7testing8internal24HasNewFatalFailureHelperEconnect@@GLIBC_2.0_ZN7testing4TestC1Ev_ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4_ZN7testing8internal12UnitTestImplC2EPNS_8UnitTestE_ZN7testing8internal13DeathTestImpl5AbortENS0_9DeathTest11AbortReasonE_ZN7testing4TestD2Evmmap@@GLIBC_2.0_ZN7testing8internal8FilePath11ConcatPathsERKS1_S3__ZN7testing8internal12UnitTestImplD1Ev_ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE_ZN7testing8internal35DefaultGlobalTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing32ScopedFakeTestPartResultReporterC2EPNS_19TestPartResultArrayE_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag_ZN7testing8internal20ShouldRunTestOnShardEiii_ZN7testing8internal17StreamingListener12SocketWriterD1Ev_ZN7testing8internal27FormatTimeInMillisAsSecondsExmkdir@@GLIBC_2.0_ZNSolsEi@@GLIBCXX_3.4_ZNK7testing8TestCase17failed_test_countEv_ZNK7testing8internal12UnitTestImpl17failed_test_countEvstrerror@@GLIBC_2.0_ZN7testing8UnitTest18GetMutableTestCaseEi__cxa_atexit@@GLIBC_2.1.3regfree@@GLIBC_2.0_ZTSN7testing8TestCaseE_ZN7testing8internal12UnitTestImpl41SetTestPartResultReporterForCurrentThreadEPNS_31TestPartResultReporterInterfaceE_ZN7testing8UnitTest11GetInstanceEv_ZN7testing8internal12UnitTestImpl41GetTestPartResultReporterForCurrentThreadEv_ZNSo5writeEPKci@@GLIBCXX_3.4_ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD1Ev_ZNK7testing8internal12UnitTestImpl21reportable_test_countEv_ZTVN7testing8internal27OsStackTraceGetterInterfaceEmemcmp@@GLIBC_2.0_ZTIN7testing8internal17TestEventRepeaterE_ZN7testing8internal27PrettyUnitTestResultPrinterD1Ev_ZN7testing8internal15ParseStringFlagEPKcS2_PSs_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKcfreeaddrinfo@@GLIBC_2.0_ZTSN7testing8internal15NoExecDeathTestE_ZN7testing8internal19TypedTestCasePState25VerifyRegisteredTestNamesEPKciS3__ZTVN7testing8internal24XmlUnitTestResultPrinterE_ZN7testing8internal13GetTestTypeIdEv_ZN7testing17FLAGS_gtest_colorE_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4_ZN7testing10TestResultC1Ev_ZSt16__throw_bad_castv@@GLIBCXX_3.4_ZTVSt9basic_iosIcSt11char_traitsIcEE@@GLIBCXX_3.4_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8__ZSt24__throw_out_of_range_fmtPKcz@@GLIBCXX_3.4.20_ZN7testing8internal24XmlUnitTestResultPrinterD2Ev_ZN7testing8internal11CmpHelperLEEPKcS2_xx_ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing7MessagelsEPKw_ZTVN7testing8internal26ThreadLocalValueHolderBaseE_ZN7testing8internal18StreamableToStringIPcEESsRKT__ZTSN7testing8internal27OsStackTraceGetterInterfaceE_ZTVN7testing8internal15NoExecDeathTestE_ZNK7testing8internal12AssertHelperaSERKNS_7MessageE_ZN7testing8UnitTest14PushGTestTraceERKNS_8internal9TraceInfoE_ZN7testing8internal17StreamingListener12SocketWriter14MakeConnectionEv_ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEv_ZN7testing24ValidateTestPropertyNameERKSsRKSt6vectorISsSaISsEE_ZN7testing8internal9DeathTest24last_death_test_message_E_ZN7testing7MessagelsEPw_ZNSt8ios_baseC2Ev@@GLIBCXX_3.4_ZN7testing8internal13DeathTestImpl6PassedEb_ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal18g_init_gtest_countE_ZN7testing8internal15NoExecDeathTestD2Ev_ZN7testing8internal8FilePath12MakeFileNameERKS1_S3_iPKc_ZN7testing8internal17StreamingListener12SocketWriterD2Ev_ZN7testing10TestResult5ClearEv_ZN7testing8internal14CmpHelperSTREQEPKcS2_PKwS4__ZN7testing4TestD1Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZN7testing8internal35FLAGS_gtest_internal_run_death_testE__divdi3@@GLIBC_2.0_ZNK7testing8TestCase16total_test_countEv__cxa_guard_acquire@@CXXABI_1.3_ZNK7testing8TestCase30reportable_disabled_test_countEv_ZN7testing8internal6String23EndsWithCaseInsensitiveERKSsS3__ZN7testing8internal14ParseFlagValueEPKcS2_b_ZN7testing8internal10scoped_ptrISsE5resetEPSs_ZTIN7testing17TestEventListenerE_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag_ZNSs6assignEPKc@@GLIBCXX_3.4__xstat@@GLIBC_2.0_ZNSt13runtime_errorC2ERKSs@@GLIBCXX_3.4_ZN7testing8internal11ScopedTraceD2Ev_ZN7testing8internal13HasOneFailureEPKcS2_S2_RKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs__gmon_start___Jv_RegisterClasses_ZTVN7testing8internal18OsStackTraceGetterE_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZTVN7testing32ScopedFakeTestPartResultReporterE_ZN7testing8internal17TestEventRepeater6AppendEPNS_17TestEventListenerE_ZN7testing8internal11g_help_flagE_ZN7testing8internal17TestEventRepeater16OnTestProgramEndERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing8internal29ParameterizedTestCaseRegistryD1Ev_ZN7testing28FLAGS_gtest_stream_result_toE_ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4_ZdlPv@@GLIBCXX_3.4isspace@@GLIBC_2.0_ZN7testing8internal7PrintToEPKwPSo_ZN7testing8internal14DeathTestAbortERKSs_ZNK7testing10TestResult18HasNonfatalFailureEv_ZN7testing8internal16ForkingDeathTestC2EPKcPKNS0_2REElocaltime@@GLIBC_2.0_ZN7testing8internal12UnitTestImpl21os_stack_trace_getterEv_ZN7testing8internal14CapturedStream11GetFileSizeEP8_IO_FILE_ZN7testing18FLAGS_gtest_filterE_ZN7testing8internal21StackLowerThanAddressEPKvPb_ZTVN7testing8internal9DeathTestE_ZTSN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD1Ev_ZN7testing8internal18OsStackTraceGetter19kElidedFramesMarkerE_ZNKSt5ctypeIcE13_M_widen_initEv@@GLIBCXX_3.4.11_ZNSo9_M_insertIPKvEERSoT_@@GLIBCXX_3.4.9_ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing18TestEventListenersD2Ev_ZN7testing8internal8GTestLogC1ENS0_16GTestLogSeverityEPKcistrchr@@GLIBC_2.0_ZN7testing8internal17kStackTraceMarkerEgetenv@@GLIBC_2.0_ZTIN7testing8internal18OsStackTraceGetterE_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5__ZN7testing18TestEventListeners23SuppressEventForwardingEv_ZN7testing8internal17StreamingListenerD0Ev_ZTVN7testing8internal27PrettyUnitTestResultPrinterE_fini__cxa_rethrow@@CXXABI_1.3_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC2EPNS0_12UnitTestImplE_ZN7testing8TestInfoD1Ev_ZNK7testing10TestResult19test_property_countEvputchar@@GLIBC_2.0_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing8internal12AssertHelperC1ENS_14TestPartResult4TypeEPKciS5__ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tag_ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4wcslen@@GLIBC_2.0_ZTSN7testing11EnvironmentEwrite@@GLIBC_2.0_ZN7testing28FLAGS_gtest_death_test_styleE_ZN7testing8internal14GetThreadCountEvpthread_key_create_ZNKSs4findEcj@@GLIBCXX_3.4_ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Ev_ZSt4cerr@@GLIBCXX_3.4_ZN7testing8internal17TestEventRepeaterD1Ev_ZN7testing18TestEventListenersC1Ev_ZNK7testing8internal8FilePath15DirectoryExistsEv_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE5resetEPS6__ZN7testing15AssertionResultlsISsEERS0_RKT__ZN7testing8internal17GetCapturedStreamEPPNS0_14CapturedStreamEtoupper@@GLIBC_2.0_ZN7testing8internal18OsStackTraceGetterD2Ev_ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEiregexec@@GLIBC_2.3.4_ZN7testing8internal18StreamableToStringIiEESsRKT__ZN7testing8internal6String15ShowWideCStringEPKw_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal16BoolFromGTestEnvEPKcb_ZNK7testing8UnitTest6PassedEv_ZTSN7testing8internal17StreamingListenerEmemset@@GLIBC_2.0_ZTSN7testing8internal16ForkingDeathTestE_ZN7testing8internal12UnitTestImpl25set_os_stack_trace_getterEPNS0_27OsStackTraceGetterInterfaceE_ZN7testing8internal24XmlUnitTestResultPrinter18OutputXmlAttributeEPSoRKSsS4_S4__ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base@@GLIBCXX_3.4_ZN7testing8internal27PrettyUnitTestResultPrinter20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing32ScopedFakeTestPartResultReporterD0Evisxdigit@@GLIBC_2.0_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE_ZNK7testing8UnitTest11random_seedEv_ZN7testing8internal2RE9FullMatchEPKcRKS1__ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EE_ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE_ZTVN7testing8internal35DefaultGlobalTestPartResultReporterE_ZN7testing8internal13DeathTestImplD1Ev_ZN7testing15AssertionResultC2ERKS0__ZN7testing15AssertionResultlsIA2_cEERS0_RKT__ZNK7testing8internal8FilePath19RemoveDirectoryNameEv_ZN7testing8internal24XmlUnitTestResultPrinter26RemoveInvalidXmlCharactersERKSs_ZNK7testing8UnitTest30reportable_disabled_test_countEv_ZN7testing8internal11CmpHelperNEEPKcS2_xx_ZN7testing32ScopedFakeTestPartResultReporterC1ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZNK7testing8internal12UnitTestImpl16total_test_countEv_ZN7testing8internal9DeathTestC1Ev_ZN7testing18TestEventListeners22SetDefaultXmlGeneratorEPNS_17TestEventListenerE_ZNSsC1ERKSs@@GLIBCXX_3.4_exit@@GLIBC_2.0_ZN7testing8internal6String15FormatIntWidth2Ei_ZN7testing8internal8GTestLogC2ENS0_16GTestLogSeverityEPKci_ZTIN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZNK7testing8UnitTest17current_test_caseEvstrrchr@@GLIBC_2.0_ZNK7testing10TestResult17GetTestPartResultEiwcscasecmp@@GLIBC_2.1_ZN7testing8internal24HasNewFatalFailureHelperC1Ev_ZN7testing8internal18StreamableToStringIxEESsRKT__ZN7testing14TestPartResult14ExtractSummaryEPKc_ZN7testing8internal16InDeathTestChildEvclone@@GLIBC_2.0_ZN7testing22EmptyTestEventListenerD1Ev_ZN7testing13PrintToStringIxEESsRKT__ZN7testing8internal17Int32FromEnvOrDieEPKci_ZN7testing8internal26GoogleTestFailureExceptionD1Ev_ZN7testing11EnvironmentD0Ev_ZN7testing8internal24HasNewFatalFailureHelperD0Ev_ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev_ZNSt13runtime_errorD2Ev@@GLIBCXX_3.4_ZNK7testing8UnitTest17current_test_infoEv_ZN7testing14IsNotSubstringEPKcS1_S1_S1__ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv_ZN7testing8internal6String17WideCStringEqualsEPKwS3__ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev_ZN7testing8internal17StreamingListenerD2Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED1Ev_ZN7testing8internal23GetLastErrnoDescriptionEv_ZN7testing8internal17TestEventRepeater15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal18OsStackTraceGetterD0Ev_ZN7testing8internal29PrintFullTestCommentIfPresentERKNS_8TestInfoE_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev_ZN7testing8internal20DoubleNearPredFormatEPKcS2_S2_ddd_ZTIN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZN7testing8internal7PrintToEhPSo_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs_ZNSsC1ERKSsjj@@GLIBCXX_3.4_ZTIN7testing8TestCaseE_ZN7testing8internal27PrettyUnitTestResultPrinter16PrintFailedTestsERKNS_8UnitTestE_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4read@@GLIBC_2.0_ZN7testing8internal9DeathTest27set_last_death_test_messageERKSs_ZN7testing8internal15UnitTestOptions17FilterMatchesTestERKSsS3__ZN7testing8internal6String32CaseInsensitiveWideCStringEqualsEPKwS3__ITM_deregisterTMCloneTable_ZN7testing8internal9DeathTest11LastMessageEv_ZN7testing4Test19HasSameFixtureClassEv_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@@GLIBCXX_3.4_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__ZN7testing10TestResult17AddTestPartResultERKNS_14TestPartResultE_ZN7testing8internal13ExecDeathTestD1Ev_ZN7testing8internal12UnitTestImplC1EPNS_8UnitTestE_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjj@@GLIBCXX_3.4DeleteThreadLocalValue_ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT_gettimeofday@@GLIBC_2.0_ZN7testing8internal20ExitedUnsuccessfullyEi_ZTVN7testing8internal17StreamingListener12SocketWriterE_ZNK7testing8internal12UnitTestImpl26successful_test_case_countEv_ZNK7testing8internal8FilePath21FindLastPathSeparatorEv_ZN7testing8internal23DefaultDeathTestFactoryD1Ev_ZN7testing8internal2RE12PartialMatchEPKcRKS1_strtol@@GLIBC_2.0fdopen@@GLIBC_2.1_ZN7testing12TestPropertyD1Ev_ZTVN7testing8internal13ExecDeathTestE_ZTIN7testing8internal26GoogleTestFailureExceptionE_ZN7testing8internal13DeathTestImplD2Ev_ZN7testing8internal24XmlUnitTestResultPrinter9EscapeXmlERKSsb_ZN7testing8internal20SingleFailureCheckerD2Ev_ZNSsD1Ev@@GLIBCXX_3.4_ZTSN7testing8internal9DeathTestEfree@@GLIBC_2.0strtoull@@GLIBC_2.0_ZTSN7testing4TestE_ZN7testing8internal17TestEventRepeater18OnTestIterationEndERKNS_8UnitTestEi_ZTSN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZN7testing32ScopedFakeTestPartResultReporterC2ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZTSN7testing8internal13DeathTestImplE_ZNK7testing8internal8FilePath21FileOrDirectoryExistsEv_ZN7testing7MessagelsERKSbIwSt11char_traitsIwESaIwEE_ZN7testing4Test14RecordPropertyERKSsS2__ZN7testing8internal12UnitTestImplD2Ev_ZNK7testing14ExitedWithCodeclEi_ZN7testing8internal11ScopedTraceD1Ev_ZN7testing8internal12UnitTestImpl31GetGlobalTestPartResultReporterEv_ZN7testing4Test14RecordPropertyERKSsi_ZN7testing8internal12AssertHelperD1Ev_ZN7testing8TestInfoC1ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE_ZN7testing8internal6String10FormatByteEh_ZN7testing14IsNotSubstringEPKcS1_PKwS3__ZN7testing8internal30GetBoolAssertionFailureMessageERKNS_15AssertionResultEPKcS5_S5__ZTVN7testing8internal12UnitTestImplE_ZN7testing4Test5SetupEv_ITM_registerTMCloneTable_ZNK7testing8UnitTest21successful_test_countEv_ZNSs4_Rep10_M_destroyERKSaIcE@@GLIBCXX_3.4_ZN7testing19TestPartResultArray6AppendERKNS_14TestPartResultE_ZN7testing14TestPartResultD2Ev_ZN7testing8internal12UnitTestImpl28CurrentOsStackTraceExceptTopEi_ZN7testing12TestPropertyD2Ev_ZNK7testing10TestResult15HasFatalFailureEvsigaction@@GLIBC_2.0_ZN7testing4Test15HasFatalFailureEv_ZN7testing8internal8GTestLogD2Evfflush@@GLIBC_2.0_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Evmkstemp@@GLIBC_2.0_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_b_ZNK7testing8UnitTest22test_case_to_run_countEv_ZN7testing18TestEventListeners23SetDefaultResultPrinterEPNS_17TestEventListenerEregcomp@@GLIBC_2.0pthread_getspecific_ZTIN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZN7testing8TestCase19RunTearDownTestCaseEv_ZN7testing8internal19UniversalPrintArrayEPKcjPSo_ZN7testing8internal17TestEventRepeater22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZNK7testing10TestResult15GetTestPropertyEi_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD1Ev_ZN7testing8UnitTest13PopGTestTraceEv_ZN7testing11IsSubstringEPKcS1_S1_S1__ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPwsocket@@GLIBC_2.0dup2@@GLIBC_2.0_ZN7testing8DoubleLEEPKcS1_dd_ZN7testing8internal7PrintToEwPSofseek@@GLIBC_2.0pthread_mutex_unlock@@GLIBC_2.0_ZNK7testing8internal12UnitTestImpl30reportable_disabled_test_countEv_ZNKSs4findEPKcjj@@GLIBCXX_3.4_ZN7testing8UnitTestC1Ev_ZTSN7testing8internal17StreamingListener12SocketWriterE_ZTIN7testing22EmptyTestEventListenerEisatty@@GLIBC_2.0_ZN7testing7FloatLEEPKcS1_ff_ZN7testing8internal11ScopedTraceC1EPKciRKNS_7MessageE_ZN7testing8UnitTestD0Ev_ZN7testing8internal20SingleFailureCheckerC1EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing7MessageC1ERKS0__ZN7testing8internal24XmlUnitTestResultPrinter29TestPropertiesAsXmlAttributesERKNS_10TestResultE_ZN7testing8internal38DefaultPerThreadTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultEgetaddrinfo@@GLIBC_2.0_ZN7testing8internal17StreamingListener12SocketWriterD0Ev_ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPc_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal5MutexD2Evfclose@@GLIBC_2.1_ZN7testing8internal12UnitTestImpl11FilterTestsENS1_18ReactionToShardingE_ZNK7testing8TestCase21reportable_test_countEv_ZNK7testing14KilledBySignalclEi_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3_ZN7testing8internal23DefaultDeathTestFactoryD2Ev_ZTVN7testing8internal38DefaultPerThreadTestPartResultReporterE__cxa_guard_release@@CXXABI_1.3_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal17StreamingListener9UrlEncodeEPKc_ZN7testing8internal6String12FormatHexIntEi_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKcdup@@GLIBC_2.0_ZN7testing8internal20SingleFailureCheckerC2EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZNSs6appendEjc@@GLIBCXX_3.4_ZN7testing8internal35DefaultGlobalTestPartResultReporterC1EPNS0_12UnitTestImplE_ZN7testing8internal27PrettyUnitTestResultPrinterD2Ev__cxa_bad_typeid@@CXXABI_1.3_ZN7testing4TestC2Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev_ZN7testing8internal13CaptureStderrEv_ZN7testing8internal15NoExecDeathTestD1Ev_ZN7testing8internal18OsStackTraceGetterD1Ev_ZN7testing14InitGoogleTestEPiPPw_ZN7testing8internal17GetCapturedStderrEv_ZN7testing8internal12UnitTestImpl23ListTestsMatchingFilterEv_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZTSN7testing8internal16DeathTestFactoryE_ZN7testing8internal17TestEventRepeater24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing8internal2RE4InitEPKc_ZN7testing32ScopedFakeTestPartResultReporterD2Evstderr@@GLIBC_2.0_ZTVN7testing8UnitTestE_ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_Ememcpy@@GLIBC_2.0_ZN7testing8internal14ShouldUseColorEb_ZTIN7testing8internal9DeathTestE_ZTVN7testing8internal16ForkingDeathTestE_ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs_ZN7testing22FLAGS_gtest_print_timeE_ZNK7testing8TestCase21successful_test_countEv_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base@@GLIBCXX_3.4_ZTSN7testing8internal24XmlUnitTestResultPrinterE_ZN7testing8internal15UnitTestOptions20PatternMatchesStringEPKcS3_strlen@@GLIBC_2.0_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE5resetEPS2_fopen@@GLIBC_2.1_ZTSN7testing17TestEventListenerE_ZN7testing8internal11CmpHelperEQEPKcS2_xx_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1_@@GLIBCXX_3.4_ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4_ZTISt13runtime_error@@GLIBCXX_3.4_ZTIN7testing8internal17StreamingListener20AbstractSocketWriterE_ZN7testing8internal12UnitTestImpl14UnshuffleTestsEvpthread_mutex_destroy@@GLIBC_2.0_ZN7testing8internal13CaptureStdoutEv_ZN7testing8internal17TestEventRepeaterD2Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD0Ev_ZNKSs7compareEPKc@@GLIBCXX_3.4_ZN7testing8TestInfoD2Ev_ZN7testing8internal24XmlUnitTestResultPrinter17OutputXmlTestInfoEPSoPKcRKNS_8TestInfoE_ZN7testing14IsNotSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZNSsC1EPKcRKSaIcE@@GLIBCXX_3.4_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZTIN7testing8internal23DefaultDeathTestFactoryE_ZN7testing8internal17TestEventRepeater7ReleaseEPNS_17TestEventListenerEgai_strerror@@GLIBC_2.1_ZN7testing29FLAGS_gtest_stack_trace_depthE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE_ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo_ZN7testing8TestCase11AddTestInfoEPNS_8TestInfoE_ZTIN7testing8internal15NoExecDeathTestE_ZTIN7testing32ScopedFakeTestPartResultReporterEwaitpid@@GLIBC_2.0_ZN7testing8internal14ParseInt32FlagEPKcS2_Pi_ZN7testing18FLAGS_gtest_outputE_ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing14KilledBySignalC2Ei_ZTSN7testing22EmptyTestEventListenerE_ZTSN7testing8internal18OsStackTraceGetterE_ZN7testing8internal6IsTrueEb__dynamic_cast@@CXXABI_1.3_ZN7testing8internal31GetCurrentOsStackTraceExceptTopEPNS_8UnitTestEi_ZN7testing8internal12UnitTestImpl31SetGlobalTestPartResultReporterEPNS_31TestPartResultReporterInterfaceEftell@@GLIBC_2.0_ZN7testing8internal13PrintStringToERKSsPSo_ZNK7testing8UnitTest16total_test_countEv_ZTVN7testing4TestE_ZN7testing4Test5SetUpEv_ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKiprintf@@GLIBC_2.0_ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoE_ZN7testing8internal10SkipPrefixEPKcPS2__ZN7testing8internal16WideStringToUtf8EPKwi_ZN7testing8internal19UniversalPrintArrayEPKwjPSo_ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE_ZNSt6localeC1Ev@@GLIBCXX_3.4_ZN7testing8internal11CmpHelperGTEPKcS2_xx_ZNSt6vectorISsSaISsEED2Ev_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4_ZN7testing8internal13ParseBoolFlagEPKcS2_Pb_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlUnitTestEPSoRKNS_8UnitTestE_ZN7testing8internal17StreamingListener12SocketWriter4SendERKSs_ZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKcz_ZNK7testing10TestResult16total_part_countEvchdir@@GLIBC_2.0_ZN7testing8TestCase16RunSetUpTestCaseEv_ZN7testing32ScopedFakeTestPartResultReporterD1Evenviron@@GLIBC_2.0_ZTSN7testing8internal23DefaultDeathTestFactoryE_ZN7testing22EmptyTestEventListenerD0Ev_ZN7testing8internal30WriteToShardStatusFileIfNeededEv_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT__ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc_ZN7testing8internal7PrintToEPKcPSo_ZN7testing18TestEventListenersD1Ev_ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6__ZN7testing8internal17TestEventRepeater11OnTestStartERKNS_8TestInfoE_ZN7testing16AssertionFailureEv_ZN7testing8internal13ExecDeathTest10AssumeRoleEv_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Ev_ZN7testing18TestEventListenersC2Ev_ZN7testing8internal17TestEventRepeaterD0Evpthread_mutex_init@@GLIBC_2.0__cxa_pure_virtual@@CXXABI_1.3_ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing15AssertionResultlsIA11_cEERS0_RKT__ZTIN7testing8internal16ForkingDeathTestE_ZN7testing4Test18HasNonfatalFailureEv_ZTVN7testing17TestEventListenerE_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs_ZN7testing8internal9MutexBase4LockEv_ZN7testing8internal13CaptureStreamEiPKcPPNS0_14CapturedStreamE_ZN7testing8internal2RED1Evstrcasecmp@@GLIBC_2.0_ZNK7testing19TestPartResultArray4sizeEv_ZN7testing31FLAGS_gtest_death_test_use_forkE_ZN7testing8internal7PrintToEaPSo_ZN7testing8TestCaseD1Ev_ZN7testing8UnitTest14RecordPropertyERKSsS2__ZTVN7testing8TestCaseE_Znwj@@GLIBCXX_3.4_ZNK7testing8TestCase17test_to_run_countEv_ZN7testing28FLAGS_gtest_break_on_failureE_ZN7testing15AssertionResultC1ERKS0__ZN7testing8internal24HasNewFatalFailureHelperD1Ev_ZN7testing8internal17TestEventRepeater9OnTestEndERKNS_8TestInfoE_ZNK7testing8UnitTest21total_test_case_countEv_ZN7testing8internal27PrettyUnitTestResultPrinter9OnTestEndERKNS_8TestInfoE_ZTVN7testing8internal17StreamingListenerE_ZN7testing8internal18OsStackTraceGetter17CurrentStackTraceEii_ZN7testing8TestCase14UnshuffleTestsEv_ZNK7testing8internal8FilePath28CreateDirectoriesRecursivelyEv_ZN7testing8internal16ForkingDeathTest4WaitEv_ZN7testing8internal11CmpHelperGEEPKcS2_xx_ZN7testing8UnitTest17AddTestPartResultENS_14TestPartResult4TypeEPKciRKSsS6__ZN7testing8internal26ThreadLocalValueHolderBaseD0Ev_ZN7testing8TestCaseC1EPKcS2_PFvvES4__ZN7testing4Test3RunEv_ZN7testing8internal35DefaultGlobalTestPartResultReporterD0Ev_ZN7testing16AssertionSuccessEv_ZN7testing8internal26GoogleTestFailureExceptionD2Ev_ZTVN7testing8internal23DefaultDeathTestFactoryEclose@@GLIBC_2.0_ZN7testing7MessageC2Ev_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_fwrite@@GLIBC_2.0_ZTISt9exception@@GLIBCXX_3.4_ZTSN7testing8internal26ThreadLocalValueHolderBaseE_ZN7testing4Test11DeleteSelf_Ev_Znaj@@GLIBCXX_3.4_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E@@GLIBCXX_3.4_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2__ZN7testing8internal13DeathTestImplD0Ev_ZTVN7testing8internal16DeathTestFactoryE_ZN7testing10TestResult20ClearTestPartResultsEv_ZTIN7testing8internal13DeathTestImplE_ZN7testing8internal15CodePointToUtf8Ejfprintf@@GLIBC_2.0strstr@@GLIBC_2.0_ZN7testing8internal7g_argvsE_ZN7testing10TestResultC2Ev_ZTVN7testing8internal24HasNewFatalFailureHelperE_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE5resetEPS3__ZN7testing28FLAGS_gtest_catch_exceptionsE_ZN7testing8internal17TestEventRepeater25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal37FormatCompilerIndependentFileLocationEPKci_ZN7testing10TestResultD1Ev_ZN7testing8internal17TestEventRepeater16OnTestPartResultERKNS_14TestPartResultE_ZN7testing11EnvironmentD1Ev_ZTIN7testing8UnitTestEremove@@GLIBC_2.0_ZN7testing8internal17TestEventRepeater20OnTestIterationStartERKNS_8UnitTestEiexecve@@GLIBC_2.0_ZN7testing14InitGoogleTestEPiPPc_ZN7testing8internal17AppendUserMessageERKSsRKNS_7MessageE_ZN7testing13PrintToStringIPKcEESsRKT__ZTIN7testing8internal13ExecDeathTestE_ZN7testing8TestInfoC2ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE__bss_start_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@@GLIBCXX_3.4_ZN7testing8internal10AlwaysTrueEvwcscmp@@GLIBC_2.0_ZN7testing18TestEventListeners6AppendEPNS_17TestEventListenerE_ZTSN7testing8UnitTestE_ZN7testing8internal32FormatEpochTimeInMillisAsIso8601Expthread_mutex_lock@@GLIBC_2.0_ZNSo5flushEv@@GLIBCXX_3.4_ZTVN10__cxxabiv120__si_class_type_infoE@@CXXABI_1.3_ZTIN7testing8internal26ThreadLocalValueHolderBaseE_ZN7testing8internal13ExecDeathTestD2Ev_ZN7testing8internal18CmpHelperSTRCASEEQEPKcS2_S2_S2__ZN7testing11IsSubstringEPKcS1_RKSsS3__ZN7testing14KilledBySignalC1Ei_ZNK7testing8UnitTest6FailedEv_ZN7testing8internal24XmlUnitTestResultPrinterC1EPKc_ZN7testing8internal27PrettyUnitTestResultPrinter24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing8internal12AssertHelperC2ENS_14TestPartResult4TypeEPKciS5__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZN7testing8internal13ExecDeathTestD0Ev_ZNK7testing8internal8FilePath27RemoveTrailingPathSeparatorEv_ZNK7testing8UnitTest17test_to_run_countEv_ZNSt8ios_baseD2Ev@@GLIBCXX_3.4_ZN7testing8internal30ReportFailureInUnknownLocationENS_14TestPartResult4TypeERKSs_ZN7testing8internal15GetTimeInMillisEv_ZN7testing8internal17TestEventRepeater27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal17g_executable_pathE_ZTSN7testing8internal12UnitTestImplE__cxa_allocate_exception@@CXXABI_1.3_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEv_ZN7testing8internal16GetAnsiColorCodeENS0_10GTestColorEfputc@@GLIBC_2.0_ZN7testing8internal24XmlUnitTestResultPrinterD1Ev_ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing8internal26GoogleTestFailureExceptionC1ERKNS_14TestPartResultE_ZN7testing8internal17TestEventRepeater13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal9MutexBase6UnlockEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE_ZN7testing4TestD0Ev_ZNK7testing8internal8FilePath14IsAbsolutePathEv_ZN7testing8internal24XmlUnitTestResultPrinterC2EPKc_ZN7testing8internal15UnitTestOptions15GetOutputFormatEv_ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5__ZN7testing8internal18FormatFileLocationEPKci_ZNK7testing8internal8FilePath12CreateFolderEv_ZN7testing8TestCaseC2EPKcS2_PFvvES4___cxa_free_exception@@CXXABI_1.3_ZNK7testing8internal12UnitTestImpl19disabled_test_countEv__pthread_key_create_ZN7testing8internal27PrettyUnitTestResultPrinter27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc_ZTSN7testing8internal17StreamingListener20AbstractSocketWriterE_ZNSdD2Ev@@GLIBCXX_3.4_ZNSs6assignERKSs@@GLIBCXX_3.4_ZNK7testing8UnitTest26successful_test_case_countEv_ZN7testing9internal220PrintBytesInObjectToEPKhjPSo_ZN7testing14ExitedWithCodeC1Ei_ZN7testing8internal17Int32FromGTestEnvEPKci_ZN7testing8internal20SingleFailureCheckerD1Ev_ZSt19__throw_logic_errorPKc@@GLIBCXX_3.4_ZNK7testing8internal12UnitTestImpl22test_case_to_run_countEv_ZN7testing22FLAGS_gtest_list_testsE_ZN7testing8internal23DefaultDeathTestFactoryD0Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Ev_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZTVN7testing8internal26GoogleTestFailureExceptionE_ZNK7testing8UnitTest17failed_test_countEv_ZNSs6assignEPKcj@@GLIBCXX_3.4_ZN7testing7MessageC2ERKS0__ZN7testing8internal8FilePath9NormalizeEvmemmove@@GLIBC_2.0_ZTIN7testing8internal24HasNewFatalFailureHelperE_ZN7testing8internal12UnitTestImplD0Ev_ZN7testing8internal18CmpHelperSTRCASENEEPKcS2_S2_S2__ZNK7testing8UnitTest19disabled_test_countEv_ZNK7testing8UnitTest11GetTestCaseEi_ZdaPv@@GLIBCXX_3.4_ZTIN7testing8internal24XmlUnitTestResultPrinterE_ZNK7testing8internal12UnitTestImpl22failed_test_case_countEv_ZN7testing8internal12UnitTestImpl14RecordPropertyERKNS_12TestPropertyE_ZTSN7testing8internal26GoogleTestFailureExceptionE_ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZNK7testing8UnitTest22failed_test_case_countEv_ZNK7testing8internal8FilePath15RemoveExtensionEPKc_ZTSN7testing8internal17TestEventRepeaterE_ZN7testing8internal5MutexD1Ev_ZN7testing8TestCase12ShuffleTestsEPNS_8internal6RandomE_ZN7testing8internal6String13CStringEqualsEPKcS3__ZNK7testing8UnitTest18ad_hoc_test_resultEv_ZTVN7testing8internal13DeathTestImplE_ZN7testing8internal12AssertHelperD2Evgetcwd@@GLIBC_2.0_ZN7testing8internal20StringStreamToStringEPSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate@@GLIBCXX_3.4_ZN7testing19FLAGS_gtest_shuffleE_ZN7testing8internal17GetCapturedStdoutEv_ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5___cxa_throw@@CXXABI_1.3_endstdout@@GLIBC_2.0_ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE_ZNK7testing8UnitTest15start_timestampEv_ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE_ZTVN7testing22EmptyTestEventListenerE_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4_ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZN7testing8internal35DefaultGlobalTestPartResultReporterC2EPNS0_12UnitTestImplE_ZN7testing8internal12UnitTestImpl11GetTestCaseEPKcS3_PFvvES5__ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0_puts@@GLIBC_2.0_ZTSN7testing8internal35DefaultGlobalTestPartResultReporterE_ZTVN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZN7testing8internal15NoExecDeathTestD0Evfork@@GLIBC_2.0_ZTVSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4_ZN7testing8UnitTestD2Ev_ZNK7testing8internal12UnitTestImpl21total_test_case_countEv_ZN7testing14ExitedWithCodeC2Ei_ZNSo9_M_insertImEERSoT_@@GLIBCXX_3.4.9_ZTIN7testing8internal16DeathTestFactoryE_ZN7testing8UnitTest14AddEnvironmentEPNS_11EnvironmentE_ZN7testing8internal9DeathTest6CreateEPKcPKNS0_2REES3_iPPS1__ZN7testing23FLAGS_gtest_random_seedE_ZN7testing8internal14StackGrowsDownEv_ZNK7testing15AssertionResultntEv_ZN7testing8internal24HasNewFatalFailureHelper20ReportTestPartResultERKNS_14TestPartResultE_ZNSo9_M_insertIdEERSoT_@@GLIBCXX_3.4.9_ZN7testing14IsNotSubstringEPKcS1_RKSsS3__ZNSbIwSt11char_traitsIwESaIwEEC1EPKwRKS1_@@GLIBCXX_3.4_ZN7testing8internal25ReportInvalidTestCaseTypeEPKcS2_i__cxa_end_catch@@CXXABI_1.3fcntl@@GLIBC_2.0_ZSt17__throw_bad_allocv@@GLIBCXX_3.4_ZTIN7testing11EnvironmentEpthread_key_delete_ZN7testing8internal11CmpHelperLTEPKcS2_xx_ZN7testing8internal12UnitTestImpl19current_test_resultEv_ZTVN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZN7testing32ScopedFakeTestPartResultReporter4InitEv_ZN7testing8UnitTest9listenersEv_ZN7testing8internal35DefaultGlobalTestPartResultReporterD1Ev_ZN7testing11Environment8TearDownEv_ZN7testing8internal23kTestTypeIdInGoogleTestE_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4_ZNSs4_Rep9_S_createEjjRKSaIcE@@GLIBCXX_3.4_ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZN7testing8internal14CmpHelperSTRNEEPKcS2_S2_S2__ZN7testing8internal24XmlUnitTestResultPrinterD0Ev_ZTIN7testing8internal35DefaultGlobalTestPartResultReporterE_ZN7testing8internal18g_linked_ptr_mutexE_ZNSsC1EPKcjRKSaIcE@@GLIBCXX_3.4_ZTSN7testing32ScopedFakeTestPartResultReporterE_ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZTSN7testing8internal27PrettyUnitTestResultPrinterE_ZN7testing32ScopedFakeTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE__environ@@GLIBC_2.0_ZN7testing8internal12UnitTestImpl12ShuffleTestsEvstrncmp@@GLIBC_2.0_ZN7testing8internal26GoogleTestFailureExceptionD0Ev_ZNK7testing19TestPartResultArray17GetTestPartResultEivfprintf@@GLIBC_2.0_ZN7testing8internal26GoogleTestFailureExceptionC2ERKNS_14TestPartResultE_ZN7testing8internal24HasNewFatalFailureHelperC2Ev_ZN7testing18TestEventListeners8repeaterEv_ZN7testing8internal16ForkingDeathTestC1EPKcPKNS0_2REE_ZTSN7testing31TestPartResultReporterInterfaceE_ZN7testing8internal12UnitTestImpl11RunAllTestsEv_ZN7testing8internal15NoExecDeathTest10AssumeRoleEv_ZNK7testing8internal8FilePath15IsRootDirectoryEvmunmap@@GLIBC_2.0_ZN7testing15AssertionResult13AppendMessageERKNS_7MessageE_ZN7testing8internal24GetCurrentExecutableNameEv_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED1Ev_ZN7testing8internal17PrintWideStringToERKSbIwSt11char_traitsIwESaIwEEPSo__cxa_guard_abort@@CXXABI_1.3_ZTIN7testing8internal27PrettyUnitTestResultPrinterE_ZN7testing8internal15UnitTestOptions27GetAbsolutePathToOutputFileEv_ZN7testing10TestResultD2Ev_ZN7testing10TestResult20ValidateTestPropertyERKSsRKNS_12TestPropertyE__cxa_begin_catch@@CXXABI_1.3_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev_ZN7testing8TestCaseD0Ev_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4_ZNK7testing8TestCase19disabled_test_countEvpipe@@GLIBC_2.0_ZNSs6appendEPKcj@@GLIBCXX_3.4_ZN7testing8internal13DeathTestImpl26ReadAndInterpretStatusByteEvfread@@GLIBC_2.0_ZN7testing8TestCase3RunEv_ZNK7testing8UnitTest20original_working_dirEv_ZN7testing8internal15UnitTestOptions13MatchesFilterERKSsPKc_ZN7testing8internal11ScopedTraceC2EPKciRKNS_7MessageE_ZNSt6vectorISsSaISsEED1Ev_ZN7testing8internal17TestEventRepeater18OnTestProgramStartERKNS_8UnitTestE_ZTIN7testing8internal12UnitTestImplE_ZTVN7testing31TestPartResultReporterInterfaceE_edata_ZN7testing8UnitTest27parameterized_test_registryEv_ZN7testing8internal8GTestLogD1Evsnprintf@@GLIBC_2.0_ZN7testing8internal29ParseInternalRunDeathTestFlagEv__gxx_personality_v0@@CXXABI_1.3_ZN7testing8internal11ShouldShardEPKcS2_b_ZN7testing32ScopedFakeTestPartResultReporterC1EPNS_19TestPartResultArrayE_ZN7testing28FLAGS_gtest_throw_on_failureE_ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing22EmptyTestEventListenerD2Ev_ZN7testing8TestCase11ClearResultEv_ZN7testing8UnitTest3RunEv_ZTIN7testing8internal27OsStackTraceGetterInterfaceE_ZNK7testing8internal12UnitTestImpl21successful_test_countEv_ZN7testinglsERSoRKNS_14TestPartResultE_ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEistrdup@@GLIBC_2.0_ZN7testing8internal27PrettyUnitTestResultPrinter15OnTestCaseStartERKNS_8TestCaseE_ZN7testing18TestEventListeners7ReleaseEPNS_17TestEventListenerE_ZNK7testing8internal8FilePath14RemoveFileNameEv_ZTSN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZN7testing11Environment5SetUpEv_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag_ZN7testing38FLAGS_gtest_show_internal_stack_framesE_ZN7testing8internal14CapturedStream14ReadEntireFileEP8_IO_FILE_Unwind_Resume@@GCC_3.0_ZN7testing18FLAGS_gtest_repeatE_ZTIN7testing31TestPartResultReporterInterfaceE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC1EPNS0_12UnitTestImplE_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT__ZN7testing10TestResult14RecordPropertyERKSsRKNS_12TestPropertyE_ZN7testing11EnvironmentD2Evwcsstr@@GLIBC_2.0strcmp@@GLIBC_2.0_ZNK7testing7Message9GetStringEv_ZNSt6localeD1Ev@@GLIBCXX_3.4_ZN7testing8internal26ThreadLocalValueHolderBaseD1Ev_ZN7testing7MessageC1Ev_ZN7testing8internal18SetInjectableArgvsEPKSt6vectorISsSaISsEE__cxa_finalize@@GLIBC_2.1.3_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs_ZNK7testing8UnitTest12elapsed_timeEv_ZNSo3putEc@@GLIBCXX_3.4_ZNK7testing10TestResult6FailedEvexit@@GLIBC_2.0_ZN7testing11IsSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZN7testing8TestCaseD2Ev_ZN7testing8internal9DeathTestC2Ev_ZN7testing8internal6String28CaseInsensitiveCStringEqualsEPKcS3__ZN7testing8internal27PrettyUnitTestResultPrinter11OnTestStartERKNS_8TestInfoE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Evpthread_setspecific_ZNSs6appendERKSs@@GLIBCXX_3.4_ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT__ZN7testing8internal10ParseInt32ERKNS_7MessageEPKcPi_ZNK7testing8UnitTest21reportable_test_countEv_ZN7testing8internal24XmlUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZTVN7testing8internal17TestEventRepeaterE_ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestE_ZN7testing35FLAGS_gtest_also_run_disabled_testsE_ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZTVN7testing11EnvironmentE_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@@GLIBCXX_3.4.9_ZN7testing8TestCase18GetMutableTestInfoEipthread_self@@GLIBC_2.0_ZN7testing8internal8FilePath22GenerateUniqueFileNameERKS1_S3_PKc_ZNKSt13runtime_error4whatEv@@GLIBCXX_3.4_ZN7testing8internal8FilePath13GetCurrentDirEv_ZN7testing8internal14CmpHelperSTRNEEPKcS2_PKwS4__ZN7testing13PrintToStringIPKwEESsRKT__ZN7testing8internal2RED2Ev_ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_PKvPFvvES6_PNS0_15TestFactoryBaseE_ZNSo9_M_insertIxEERSoT_@@GLIBCXX_3.4.9_ZN7testing4Test8TearDownEv_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev_ZN7testing14TestPartResultD1Ev_ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT__ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEv_ZN7testing8internal12UnitTestImpl24ConfigureStreamingOutputEv_ZNKSt5ctypeIcE8do_widenEc_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlTestCaseEPSoRKNS_8TestCaseE_ZN7testing8internal14CmpHelperSTREQEPKcS2_S2_S2__ZN7testing8internal24HasNewFatalFailureHelperD2Ev_ZTIN7testing8internal17StreamingListener12SocketWriterE_ZN7testing8internal24XmlUnitTestResultPrinter21OutputXmlCDataSectionEPSoPKc_ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo_ZN7testing8internal12UnitTestImpl18ConfigureXmlOutputEv_ZNSs7reserveEj@@GLIBCXX_3.4_init_ZN7testing8internal18GetInjectableArgvsEv_ZN7testing8internal10scoped_ptrIKSsE5resetEPS2__ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Ev_ZN7testing8internal17StreamingListenerD1Ev_ZN7testing8UnitTestC2Ev_ZN7testing8UnitTestD1Ev_ZN7testing8internal27PrettyUnitTestResultPrinter13OnTestCaseEndERKNS_8TestCaseE_ZNK7testing8internal8FilePath11IsDirectoryEv_ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT__ZTSN7testing8internal13ExecDeathTestEdlt-daemon-2.18.6/gtest-1.7.0/lib/.libs/libgtest_main.a000066400000000000000000000503721377520261000221750ustar00rootroot00000000000000! / 1428496272 0 0 0 14 ` Rmaingtest_main.o/ 1428496272 1000 1000 100664 20588 ` ELFĖ;4(Running main() from gtest_main.ccL$ƒäđ˙qüU‰åVSQ‰Ëƒė‹qhčü˙˙˙XZVSčü˙˙˙ƒÄčü˙˙˙ƒė Pčü˙˙˙ƒÄeôY[^]aüÍļƒėhčü˙˙˙ƒÄ hhhčü˙˙˙ƒÄÃP‡W| Ĩ ļÔ0KåÁëŠn É(eint‡'Ģ 7l`ƒæ„zâą_ ”õ8Âöe4ûĢ üĢnũĢ ūĢ ˙Ģ ‚ Ģ Ģ nĢ ãĢ$ Ę Ģ( ĖĢ, ī0 æ õ4  e8 _e< …@ Ķ>D Ģ LF nûG p H ¸%—L " .ŠT ) /ŠX 0 0Š\ 7 1Š` > 2%d d4eh ų6l@¸ S! ‡ Vn ģX0 œ \‡ŲTe]O ą—ĸö ^Cp (­üą‚š|  īĄīķĸõŠĻež¸ ą ĸˇ ą!ĸ''ąstd"  @[  ‹O  f  Ž|  ˜  ž  ‘Ų  ’˙  “  ”6  •R  –h  —t  ˜š  ™ŋ  šā  ›  œ&  ž<   ]  Ąy  ĸ”  ¤´  §Ô  Ēų  Ŧ Ž4 °O ąo ˛‰ ŗŖ ´Ŋ ĩ× ļņ ˇą ¸Į šæ ē ģ$ ŧO Ŋj ŋ‹ ÁĻ ÂÆ Ãæ Ä Å% Æ; Į[ Č{ ɛ Ęģ ËŌ Ėé Í Î& ĪD Đc Ã Ū ū 0/  é´ü 빇 ėe ō (17øeq öN ' J77lt ú ' g77ģ ne‹==´• Ä´Ĩ=ĸ ą=É=´7Ŋ R CíC=´ˆ ICC=´ ō C5C´øa ~øOIĀ Än7 $?' IIeof (š b ,čIļ ŧ0 5O 6| 7–r Ŋe¯3nÁPŒW v ņĀA€|€9€J€¤€A € ä€Ā€€Ļ°ž Ę•„Ļ€€K g§[ëũ Yg _€€• ÔÚ øœK[€€éĩûį>8€€į [ ąZ įÕ = ' !ą;A"ō#ũN"ō"e$s ˙ß%> tZ&dect%Vt&hex t%t%t &octt@% t€' t'H "t'ė &t'Í)t'8,t'Š/t 'Ÿ3t@%Ŧ6t°%ˇ9tJ'Â<t(*J§%´ NŠ o %QŠ %€VŠ %fYŠ (# in&applÔ š &ateoÔ %ö tÔ &inwÔ &outzÔ %p}Ô  (,‰Ô&begŒ9  &cur9 &end’9 RSøTO \e3hMib§¨ )ļ ą* ėtr1*ü +Ф,;˜-Ö .Ŗģ /ĸÄ 0Ŗø12ú. 2_Tpŗ ›ˆŒ 3Û>ē ü 4đJ' 9 eß ~  5Ta0 j—6đ „O | e6Q éO ’ ’ 86— ¸ ¸ ¸ e’ 3 6÷O Ų 3 ’ 6t  eô ô ’ ú 3 6)Ke ’ e6Re6 ’ ô 76™{eR ’ ô 76!ęO h ’ 8n đO 6û %” !%” [ 6 m%ŋ ¸ !%” 6> ieÕ Õ Û [ 6Ũ˜% ¸  %” !6ÕøO & 3 ’ 6āūO < 3 6\e] ¸ %ô 76j…ey ô ô 76k O ” O ’ 6xde´ ’ ô ĸ6ąeÔ ’ ô ĸ6:qeų ¸ %ô ĸ6…Ŋeô ô ĸ6ö le4ô ĸ6ûšeOô ĸ6úr%oĢ3 ” 9 ›¸ ‰¸ ô 9ŽŖeŖô ô 9, ĀeŊô ô 9˛“¸ ׸ ô 9ôü%ņô ô 6W%¸ %ô !:tm,…ąŨ‡eyˆeh‰eŠe Å‹e6 ŒeĄeˇŽe#e 쒐$–“!(6ß%Įô 9 ž¸ æ¸ ô %9ŽĻeô ô %9A–¸ $¸ ô %6Ŋ ž%IĢI%” ô 6&%jô ô 6jÂA …ô …¸ 6É: Ļô …6ˆ¸ Ƹ ô …6Ôæô …e6îŲEô …e9^Ä%%¸ ô %6ĢŠe;O 6NEe[ô ô %6 I¸ {¸ ô %6ĻN¸ ›¸ ô %6žR¸ ģ¸ 3 %6ÆYeŌô 762‚eéô 7;íāíô ô 3 qqô &ô ô ;Y ęY ô Dô 3 11ô cô ô F <F ô ‡ô 3 %<‚ ōà øÃ Ū ūŦ$,´-Ôļ 71ū:. 1ĩ;. 1_ ?" 1Ô@. )Ž eô7B1ū:í1ĩ;í1_ ?" 1Ô@. )Ž Eá7„1ū:'1ĩ;'1_ ?" 1Ô@. )Ž ą0%71ū:w1ĩ;w1_ ?" 1Ô@. )Ž S6ŖËH Ūô …6öãlūô …e6æ ęsô …e<71=8å>ø>((ø>O85|9Ģ&:Ģ)@ĢĮ FĢ æGĢIHĢ–IĢ JĢKĢ ÔLĢ$Mą(ī Ną)#Pą*ļRą+Tą,fVą-]ą. ^ą/aą0kcą1/eą2Ŗ gą3”ną4^oą59ē|Ģ–e!?’ĄOōˆSŠīeT{ ĖU‹&eUö&eVī"eJœ:W"e‘W "į‘Xž+%'Y3 Y<Y"ZY+FZEP(œy[ĢS!&\ĩ]Ā˙˙^]Ytq_ ¨õ_à Šõ_–Ēõ`å Ša:da÷2b–˙˙˙˙˙˙˙ ąĖĸŧc¯´cž™cÍd cÉ eĘz€€€€xfÕÄ ˙˙˙g-4 gYeŒi€€~h—-˙gæ g+#iΚeq!j\eĪŠŠ% U: ; I$ > $ >   I : ;  : ; I8 : ;I8  : ; n  : ;  : ; I I!I/  I: ; &I9: ; : ; : ;9: ; .?: ; n<I.?: ; nI<.?: ;nI<.?: ;nI<.?: ;nI< : ; ( < : ;2  : ;I?<!.?: ;2 <d"I4#.?: ;2 <d$: ; I2 % : ;I?2 < & : ;I?2 < ' : ;I?2 <(: ;I2 )/I*/I+ : ; , : ;-9.4: ;I</:: ;0 : ; 1 : ; I?<2/I34: ; nI?<44: ; I<5: ;I6.?: ;I<78.?: ;I<9.?: ; I<: : ; ;.?: ; nI<<9: ; =:: ; > I?.?: ; I<@ : ; nA : ; B I8 CD&E9: ;F : ;G : ;I8 2 H.?: ;n2 <dI.?: ;n2 <dJ : ;I?2 <K.?: ;nI<L4: ;I<M4: ; I<N4: ; I< O.?: ;nI2 <P.?: ;nI2 <dQ.?: ;n<R: ;S.?: ;I T.4 U: ; IV.?: ; I@—BW: ; IX1X Y Y‰‚1Z.4@—B[1X Y \1 ]1^‰‚_4: ; I?<`4I?4<a4G b4Gc4Gd4Ge4Gn f4Gng4Gn h4Gni.?nI4<j.?I4<$JP(JPxRû src./include/gtest/usr/include/c++/4.9.2/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/include/bits/usr/include/usr/include/c++/4.9.2/bits/usr/include/c++/4.9.2/i686-redhat-linux/bits/usr/include/c++/4.9.2/tr1/usr/include/c++/4.9.2/debug/usr/include/c++/4.9.2/ext./include/gtest/internalgtest_main.ccgtest.hiostreamstddef.htypes.hlibio.hstdio.hwchar.hstdarg.hcwcharchar_traits.hc++config.hclocaleios_base.hcwctypetuple iosfwdtime.hdebug.h predefined_ops.hnew_allocator.h numeric_traits.h locale.hpthreadtypes.hatomic_word.hwctype.hgtest-port.h gtest-internal.h gtest-death-test-internal.h gtest-linked_ptr.h gtest-printers.hcxxabi.h!J=ŸĖļn<$<\ōlong int__debugint_p_cs_precedes_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E5valueEwcsxfrmgoodbit_shortbufvfwprintf_IO_lock_tUnitTeststderrGetInstanceRUN_ALL_TESTStm_ydayLock_ZNSt11char_traitsIcE11to_int_typeERKc_S_atepthread_tchar_type_S_uppercasevfwscanfeofbitp_cs_precedestowctrans_Swallow_assignunsigned int_ZN7testing8internal18g_linked_ptr_mutexE__gnu_cxx_S_fixed_S_floatfieldtuple_size >_flags__int32_t_cur_columnwchar_t_S_refcounttestingvwscanf_old_offset_markerstm_mday_ZNSt11char_traitsIcE2ltERKcS2_MakeFrommon_decimal_point_S_ios_iostate_end_IO_buf_end_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE__opswcscpy_ZN7testing8UnitTest11GetInstanceEvBiggestInt_ZNSt11char_traitsIcE7not_eofERKiwcscatlconvdecimal_point__numeric_traits_integer__pthread_slist_tAssertHeldn_sep_by_spaceg_linked_ptr_mutexcopy__gnu_debugfwscanftm_wday_poswcsncmpp_sep_by_spacetm_mon_IO_save_end__count__numeric_traits_integerinternal2floatignore__elisiongetwclong long unsigned int_S_endhas_owner__S_dec_S_hexint_n_sign_posn_IO_read_base_S_scientificunitbuflocaleconv__FILE__owneradjustfield_offsetto_int_type_ZNK7testing8internal9MutexBase10AssertHeldEvwcrtomb_ZN7testing8internal9MutexBase6UnlockEviostatevalue_S_ios_seekdir_end_S_failbitfixed__cxa_atexitHelper__gnuc_va_listp_sign_posn__initialize_pputsuppercasetuple<>Initsize_tmovefloatfieldshowposputwccerrputwchar_Ios_Seekdir__priority__lockargcstdin_nextint_frac_digitsfwideint_n_cs_precedes_S_right_S_showpointGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2findbasic_ostream >negative_sign__elision_data_ZN7testing14InitGoogleTestEPiPPc__valuefputwc__nextgroupingwscanf_S_showbase_GLOBAL__sub_I_main_S_inchar_modeswscanfptrdiff_t_IO_markerint_type_IO_write_basewctype_S_adjustfield__max__wch_S_boolalpha__builtin_putsmbsrtowcs_S_begwcstoulwctrans_tfwprintfrightpthread_mutex_twcstofwcsspn_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE_S_ios_openmode_end_Atomic_word__listlong long intlength_S_eofbit_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperEz_IO_save_base_S_oct_S_badbitmon_groupingUnlock_ZNSt11char_traitsIcE6assignERcRKcboolboolalphashowbasefgetwc_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperES3_fgetws_S_basefield__quad_tbadbitcomparestdout_IO_backup_base_S_goodbit__dso_handle_ZNSt11char_traitsIcE6assignEPcjc__kindassign__pad1__pad2__pad3__pad4__pad5kInternalRunDeathTestFlag__is_signedungetwcfmtflagssrc/gtest_main.cc_Value_Ios_Iostatewctype_t_vtable_offset_ZSt4cerr_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE__mbstate_t_Traitsargvlong doublewcsncatopenmodewcscoll__espins_S_synced_with_stdio_ZNSt11char_traitsIcE4moveEPcPKcjfputws__static_initialization_and_destruction_0/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0ios_basebtowcvwprintfFromkMaxStackTraceDepthmbrtowc_IO_read_endiswctypetm_yearmbsinitwmemchr_ZNSt11char_traitsIcE2eqERKcS2_short int_ZN7testing8UnitTest3RunEvmutex__ZNSt11char_traitsIcE3eofEv_CharTwcsrtombsint_curr_symbolkMaxBiggestIntwcstoullfrac_digitsmbrlenwmemcpyscientificn_sign_posn11__mbstate_tchar_traits_S_skipws_Ios_Openmodewcsrchrto_char_typegetwchar__cxxabiv1_IO_write_end_S_internal__wchbint_n_sep_by_space__numeric_traits_integerinternal_run_death_testshowpointbinary_S_binleftmbstate_twcsftimepositive_sign__datawcsstrskipws_ZNSt11char_traitsIcE11eq_int_typeERKiS2_owner__lock_S_left_ZNSt11char_traitsIcE12to_char_typeERKiwmemmove_Ios_Fmtflags__nuserswprintfdeath_test_use_forksizetypelong unsigned int~Init_S_trunc_IO_FILE_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E8MakeFromEvwint_t_S_appnot_eofwcstodwcspbrktm_minfailbitwcstokwcstoltm_zonewmemset_S_ios_fmtflags_endsetlocale_ZNSt11char_traitsIcE6lengthEPKcunsigned char_sbufMutexBaseinternal_IO_write_ptreq_int_typethousands_sep_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minEostreamwcstoldwctob_ZNSt11char_traitsIcE4findEPKcjRS1_death_test_stylecurrency_symbolwcstoll__minswprintf_fileno_ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE15pthread_mutex_t__size__off_ttm_hourtrunckDeathTestStyleFlagsigned charmon_thousands_sepInitGoogleTestbasefieldshort unsigned int__digitstm_sec_S_unitbufmainwcscspn__builtin_va_list_S_curn_cs_precedestm_isdstseekdir_IO_read_ptrwcsncpy_ZNSt11char_traitsIcE4copyEPcPKcjint_p_sep_by_spacedoublevswscanfwcscmp_ZN7testing8internal9MutexBase4LockEvtm_gmtoff__pthread_internal_slist__align_chainwcschr__numeric_traits_integerkDeathTestUseForkwctransvswprintfkProtobufOneLinerMaxLength_flags2_S_out_ZNSt11char_traitsIcE7compareEPKcS2_jint_p_sign_posn_S_showposImplicitlyConvertiblewcslen__off64_t__ioinit_unused2_IO_buf_base_ZNSt3tr110tuple_sizeINS_5tupleIIEEEE5valueE__pthread_mutex_swmemcmpGCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ8JD GuEutu|uxsÁ AÃAÆAÅC $XP(CE HEEE H.symtab.strtab.shstrtab.text.data.bss.rodata.str1.4.text.unlikely.rel.text.startup.rel.init_array.rel.debug_info.debug_abbrev.rel.debug_aranges.rel.debug_ranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame4!4'4,24";VN`xJ ŧBX`Ø\ Cp܋l C  |gŲŽ@"(Š P Ąh" 4P ŗ€"V¯ TPŋ0Ö%VĘ0,:-ĶY:į\:|ã \PØ:ņ@Đ ÔAįņ˙P(#   2J7<^‚ĩÂÚgtest_main.cc_GLOBAL__sub_I_main_ZStL8__ioinitmainputs_ZN7testing14InitGoogleTestEPiPPc_ZN7testing8UnitTest11GetInstanceEv_ZN7testing8UnitTest3RunEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit'/8TYafkp !&3:AHOV[ov{†“˜Ĩ´šÅŅŨéõ '4AN[hu‚œŠļÃĐŨę÷+9GXco{˜Ŗ¯¸ŋË×ãæíų3PhoŒ“Ļ­ĘŅîõ6=U\ov•žĨĩÕāėōøū %,3:AIQX_fo{‡“™Ÿ¨´ēĀÆĖÕáįíķü+B[gˆ¤˛ÎÜëú  ' 6 E S a p }  ž Ŧ ē č    – Ÿ ´ ŧ Ę ß į ũ    * 6 = D K P \ g } ™ ŋ Ú   7 S i u › Ā á  ' = ^ z • ĩ Õ ú 5PpФžØō-9EQ]iu™Ĩ˛Čį%PkŒ§Įį&<\|œŧĶęđ'-ELdkˆĒŋËÖáė÷ #.9COZep{…˜ŖŽšÄß˙P\ht€Œ˜¤°ŧČÔāėø(4@LXdp}—¨ŗŋŌāé)5AMYexƒŽĒÖų4Nc}‰•ĸ°žĖĶįî ,9@IPcjy‹—°ēŋÉÎØŨãíø&;GNkŸŦļÁÍ׿ô(1;?Rjoz…›ņ˙ $.:EO[_r  , \dlt-daemon-2.18.6/gtest-1.7.0/lib/.libs/libgtest_main.la000077700000000000000000000000001377520261000257072../libgtest_main.laustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/lib/.libs/libgtest_main.lai000066400000000000000000000017711377520261000225210ustar00rootroot00000000000000# libgtest_main.la - a libtool library file # Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='libgtest_main.so.0' # Names of this library. library_names='libgtest_main.so.0.0.0 libgtest_main.so.0 libgtest_main.so' # The name of the static archive. old_library='libgtest_main.a' # Linker flags that can not go in dependency_libs. inherited_linker_flags=' -pthread' # Libraries that this one depends upon. dependency_libs=' /usr/local/lib/libgtest.la' # Names of additional weak libraries provided by this library weak_library_names='' # Version information for libgtest_main. current=0 age=0 revision=0 # Is this an already installed library? installed=yes # Should we warn about portability when linking against -modules? shouldnotlink=no # Files to dlopen/dlpreopen dlopen='' dlpreopen='' # Directory that this library needs to be installed in: libdir='/usr/local/lib' dlt-daemon-2.18.6/gtest-1.7.0/lib/.libs/libgtest_main.so000077700000000000000000000000001377520261000262002libgtest_main.so.0.0.0ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/lib/.libs/libgtest_main.so.0000077700000000000000000000000001377520261000263362libgtest_main.so.0.0.0ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/lib/.libs/libgtest_main.so.0.0.0000077500000000000000000000524111377520261000230270ustar00rootroot00000000000000ELFp4ŒH4 ("\ \ ÄÄÄhlØØØ$$Påtd|||$$QåtdRåtdÄÄÄ<<GNUß\ißį¯ŌKŨ urf!ŗ‹ ˆ Ä@) ēã’|CEÕėØqXjš|šņëĶīĄ a āø 8 zÅR"o0 \, c, upY ° D __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesmainputs_ZN7testing14InitGoogleTestEPiPPc_ZN7testing8UnitTest11GetInstanceEv_ZN7testing8UnitTest3RunEv_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitD1Ev__cxa_atexitlibgtest.so.0libstdc++.so.6libm.so.6libc.so.6libgcc_s.so.1_edata__bss_start_endlibgtest_main.so.0/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0/lib/.libs:/usr/local/libGLIBCXX_3.4GLIBC_2.0GLIBC_2.1.3+ t)’âDii îsi øÄČĖÔčėđôøü       $  (  SƒėčWÃG‹ƒč˙˙˙…ĀtčBƒÄ[Ã˙ŗ˙Ŗ˙Ŗ héā˙˙˙˙ŖhéĐ˙˙˙˙ŖhéĀ˙˙˙˙Ŗhé°˙˙˙˙Ŗh é ˙˙˙˙Ŗ h(é˙˙˙˙Ŗ$h0é€˙˙˙˙Ŗ(h8ép˙˙˙L$ƒäđ˙qüU‰åWVSQ‰Î舁Ãxƒė‹yƒXč˙˙Pč ˙˙˙XZWVč‡˙˙˙ƒÄčO˙˙˙ƒė Pč–˙˙˙ƒÄeđY[^_]aüÍ´&VSč9Ã)ƒėŗ-Vč4˙˙˙ƒÔū˙˙ƒÄ PV˙ŗđ˙˙˙čîū˙˙ƒÄ[^Ãffff‹$ÃffffffU‰åSčį˙˙˙Ã׍“,ƒ/)Ѝd$냸v‹ƒô˙˙˙…Āt‰$˙Ѝd$[]Ít&U‰åSč§˙˙˙Ã—“,ƒ,)Ѝd$ėÁø‰ÁÁéČŅøt‹‹ø˙˙˙…Ét ‰D$‰$˙Ņd$[]Í´&U‰åSčW˙˙˙ÃGd$ė€ģ,u$‹ƒü˙˙˙…ĀtƒÔū˙˙‰$č|ū˙˙č7˙˙˙ƃ,d$[]Éöŧ'U‰åSč˙˙˙Ã÷d$ėƒĐū˙˙‹…Ōud$[]é6˙˙˙ļ‹“ė˙˙˙…Ōtå‰$˙ŌëŪSƒėčÃū˙˙ÃŗƒÄ[ÃRunning main() from gtest_main.cc; dũ˙˙<ôũ˙˙`Tū˙˙¤zR| ˆ  ũ˙˙F J tx?;*2$"@@Œũ˙˙YD GuFupu|uxut@Á AÃAÆAĮAÅC 4„¨ũ˙˙8A†A ƒNG NAAF H AÃAÆĐ°Ô+:DNt‡ ° DÄĖõū˙o8¤t   @p Pū˙˙oĐ˙˙˙ođ˙˙o¨ú˙˙oØö&6FVfGCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)$pYĐ8u÷ ÚH ÷Ô0ēąĩ —(eint°7llƒ š„z( ą@ ”õ8öeûĢž üĢ÷ũĢ 5ūĢ/˙Ģ ũ Ģ ÕĢ <Ģ bĢ$ /Ģ( [Ģ, Ũī0 Á õ4  e8 2e< Ņ…@ Ą>D LF hûG  H Õ%—L €.ŠT ‡/ŠX Ž0Š\ •1Š` œ2%d 4eh Ė6l@¸ Sœ ‡ Vn YX0  \‡hTeō]O ą—ĸž ^CŅ (­ėą|š*  īĄīĸõGĻež¸ ą ĸˇ ą!ĸ''ąstd"  @[  ‹O  f  Ž|  ˜  ž  ‘Ų  ’˙  “  ”6  •R  –h  —t  ˜š  ™ŋ  šā  ›  œ&  ž<   ]  Ąy  ĸ”  ¤´  §Ô  Ēų  Ŧ Ž4 °O ąo ˛‰ ŗŖ ´Ŋ ĩ× ļņ ˇą ¸Į šæ ē ģ$ ŧO Ŋj ŋ‹ ÁĻ ÂÆ Ãæ Ä Å% Æ; Į[ Č{ ɛ Ęģ ËŌ Ėé Í Î& ĪD Đc Ã Ū ū0Ē  é´ß ëą0 ėe ō•(17øeq öė ' J77lt úî' g77  Ae‹==´ đ ´Ĩ= Æ=É=´7ø ¤ CíC=´. +CC=´ WC5C´øÜ Ė øOI- žn7= $š ' IIeof (8 – ,ĢI÷ ŧ0 5O 6| 7–  Ŋeũ 3n_ŲZā Ä pĀY€€€b€w€ŧ € Ô€Āö€€D° Ęc„Ō €€Æ g§ ån :7 Ū€€ķÔ?w˛)€€ĩû…ūĮŸ€€Š [ 2 Z ĩÕ  ' !2 ;A"ō#1 N"ō"e$Ņ˙ß%btZ&dect%]t&hex t% t%Į t &octt@%\t€'t' "t'e&t'z)t'ŋ ,t'×/t 'ų3t@%G6t°% 9tJ'f<t(—J§%zNŠ o %QŠ %ĩVŠ %BYŠ (u in&applÔ š &ateoÔ %g tÔ &inwÔ &outzÔ %: }Ô  (‰Ô&begŒ9  &cur9 &end’9 RSøTO \e3hMib†¨ )T ą*T ėtr1*ü +ī¤,˜-Ö .ŸŖģ /ĸÄ 0qø1ôú. 2_Tpŗ °ˆŒ 3 > ü 4ÃJ' ¸e­™f  a 5ˆ a0  j—6“ „O | e6ŊéO ’ ’ 86¸ ¸ ¸ e’ 3 6ú÷O Ų 3 ’ 6Æ  eô ô ’ ú 3 6AKe ’ e6sRe6 ’ ô 76{eR ’ ô 76žęO h ’ 8é đO 6 %” !%” [ 6ļ m%ŋ ¸ !%” 6Ü ieÕ Õ Û [ 6{˜% ¸  %” !6ûøO & 3 ’ 6ūūO < 3 6\e] ¸ %ô 76a…ey ô ô 76ÉO ” O ’ 6rde´ ’ ô ĸ6ąeÔ ’ ô ĸ6 qeų ¸ %ô ĸ6`Ŋeô ô ĸ6™ le4ô ĸ6ÉšeOô ĸ6gr%oĢ3 ” 9Í›¸ ‰¸ ô 9iŖeŖô ô 9~ ĀeŊô ô 9€“¸ ׸ ô 9äü%ņô ô 6u W%¸ %ô !:tm,…ąÍ‡e­ ˆet‰eæŠe T‹eÔ Œe?eąŽee –’$ “!(6˛%Įô 9m ž¸ æ¸ ô %9LĻeô ô %9#–¸ $¸ ô %6[ ž%IĢI%” ô 6Ĩ%jô ô 6ž ÂA …ô …¸ 6žÉ: Ļô …6´ ¸ Ƹ ô …6ģ Ԑæô …e6ŒŲEô …e9`Ä%%¸ ô %6ĀŠe;O 6!Ee[ô ô %6” I¸ {¸ ô %6ô N¸ ›¸ ô %6Ę R¸ ģ¸ 3 %6tYeŌô 76‚eéô 7;ČāČô ô 3 Ĩ Ĩ ô &ô ô ;Ô ęÔ ô Dô 3 “ “ ô cô ô ä <ä ô ‡ô 3 %ø>((ø>OÔ85|9Ģ”:Ģ…@Ģe FĢ ûGĢH̐ÍJĢ~ KĢ ŗLĢ$1Mą(5Ną)sPą*QRą+KTą," Vą-k]ą.ë^ą/oaą0Mcą1Geą2 gą3gną4įoą59æ |Ģ–e!?ĄOėˆSŖīeTÍ ĖUā&eU&eVß"epYœ:W&"e‘W\ "į‘XžŠ%'Yą YēY HYŠFZĐ8œy[Ģā"&\ĩ]Ā˙˙^ėY__+¨õ_(Šõ_Ēõ`JŠa:da÷2b–˙˙˙˙˙˙˙ ąĖĸŧc¯´cž™cÍd - cÉ eĘHeÕ" e-IeY!eŒ~e—Ŧeæ âe+%flve_!gŊeĪŠŠ% U: ; I$ > $ >   I : ;  : ; I8 : ;I8  : ; n  : ;  : ; I I!I/  I: ; &I9: ; : ; : ;9: ; .?: ; n<I.?: ; nI<.?: ;nI<.?: ;nI<.?: ;nI< : ; ( < : ;2  : ;I?<!.?: ;2 <d"I4#.?: ;2 <d$: ; I2 % : ;I?2 < & : ;I?2 < ' : ;I?2 <(: ;I2 )/I*/I+ : ; , : ;-9.4: ;I</:: ;0 : ; 1 : ; I?<2/I34: ; nI?<44: ; I<5: ;I6.?: ;I<78.?: ;I<9.?: ; I<: : ; ;.?: ; nI<<9: ; =:: ; > I?.?: ; I<@ : ; nA : ; B I8 CD&E9: ;F : ;G : ;I8 2 H.?: ;n2 <dI.?: ;n2 <dJ : ;I?2 <K.?: ;nI<L4: ;I<M4: ; I<N4: ; I< O.?: ;nI2 <P.?: ;nI2 <dQ.?: ;n<R: ;S.?: ;I T.4 U: ; IV.?: ; I@—BW: ; IX1X Y Y‰‚1Z.4@—B[1X Y \1 ]1^‰‚_4: ; I?<`4I?4<a4G b4Gc4Gd4Ge4Gnf.?nI4<g.?I4<Sû src./include/gtest/usr/include/c++/4.9.2/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/include/bits/usr/include/usr/include/c++/4.9.2/bits/usr/include/c++/4.9.2/i686-redhat-linux/bits/usr/include/c++/4.9.2/tr1/usr/include/c++/4.9.2/debug/usr/include/c++/4.9.2/ext./include/gtest/internalgtest_main.ccgtest.hiostreamstddef.htypes.hlibio.hstdio.hwchar.hstdarg.hcwcharchar_traits.hc++config.hclocaleios_base.hcwctypetuple iosfwdtime.hdebug.h predefined_ops.hnew_allocator.h numeric_traits.h locale.hpthreadtypes.hatomic_word.hwctype.hgtest-port.h gtest-internal.h gtest-death-test-internal.h gtest-linked_ptr.h gtest-printers.hcxxabi.hp!ō=ģːļn<.$ō\"__debug_GLOBAL__sub_I_gtest_main.cc_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E5valueEwcsxfrm_shortbufvfwprintf_IO_lock_tUnitTeststderrGetInstanceRUN_ALL_TESTStm_ydayLock_ZNSt11char_traitsIcE11to_int_typeERKc_S_atepthread_t_S_uppercasevfwscanftowctrans_Swallow_assign_ZN7testing8internal18g_linked_ptr_mutexE__gnu_cxx_S_fixed_S_floatfieldtuple_size >_flags__int32_t_cur_columnwchar_t_S_refcounttestingvwscanf_old_offset_markerstm_mday_ZNSt11char_traitsIcE2ltERKcS2_MakeFrommon_decimal_point_S_ios_iostate_end_IO_buf_end_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE__opswcscpy_ZN7testing8UnitTest11GetInstanceEv_ZNSt11char_traitsIcE7not_eofERKiwcscatlconv__numeric_traits_integer__pthread_slist_tAssertHeldg_linked_ptr_mutexcopy__gnu_debugtm_wday_poswcsncmptm_mon_IO_save_end__count__numeric_traits_integerinternal2floatignore__elisionlong long unsigned int_S_endhas_owner__S_dec_S_hexint_n_sign_posn_IO_read_base_S_scientificlocaleconv__FILE__ownerto_int_type_ZNK7testing8internal9MutexBase10AssertHeldEvwcrtomb_ZN7testing8internal9MutexBase6UnlockEviostate_S_ios_seekdir_end_S_failbit__cxa_atexitHelper__gnuc_va_list__initialize_ptuple<>size_tputwchar_Ios_Seekdir__priority__lockargcstdinint_frac_digitsfwideint_n_cs_precedes_S_right_S_showpointint_p_cs_precedesfindbasic_ostream >negative_sign__elision_data_ZN7testing14InitGoogleTestEPiPPc__valuefputwc__next_S_showbase_S_in_modeptrdiff_t_IO_marker_IO_write_base_S_adjustfield__max__wch_S_boolalpha__builtin_putsmbsrtowcs_S_begwcstoulwctrans_twcstofwcsspn_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE_S_ios_openmode_end_Atomic_word__listlong long intlength_S_eofbit_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperEz_IO_save_base_S_oct_S_badbitmon_groupingUnlock_ZNSt11char_traitsIcE6assignERcRKcboolfgetwc_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperES3_fgetws_S_basefield__quad_tcomparestdout_IO_backup_base_S_goodbit__dso_handle_ZNSt11char_traitsIcE6assignEPcjc__kind__pad1__pad2__pad3__pad4__pad5kInternalRunDeathTestFlag__is_signedungetwcfmtflagssrc/gtest_main.cc_Value_Ios_Iostatewctype_t_vtable_offset_ZSt4cerr_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE_Traitsargvlong doublewcsncatopenmodewcscoll__espins_S_synced_with_stdio_ZNSt11char_traitsIcE4moveEPcPKcjfputws__static_initialization_and_destruction_0GNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2 -fPIC/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0ios_basebtowcvwprintfkMaxStackTraceDepthmbrtowc_IO_read_endiswctypetm_yearmbsinitwmemchr_ZNSt11char_traitsIcE2eqERKcS2_short int_ZN7testing8UnitTest3RunEvmutex__ZNSt11char_traitsIcE3eofEv_CharTwcsrtombsint_curr_symbolkMaxBiggestIntwcstoullmbrlenwmemcpy11__mbstate_tchar_traits_S_skipws_Ios_Openmodewcsrchrto_char_typegetwchar__cxxabiv1_IO_write_end_S_internal__wchbint_n_sep_by_space__numeric_traits_integerinternal_run_death_testbinary_S_binwcsftimepositive_sign__datawcsstr_ZNSt11char_traitsIcE11eq_int_typeERKiS2__S_left_ZNSt11char_traitsIcE12to_char_typeERKiwmemmove_Ios_Fmtflags__nusersdeath_test_use_forksizetype~Init_S_trunc_IO_FILE_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E8MakeFromEvwint_t_S_appnot_eofwcstodwcspbrktm_minwcstokwcstoltm_zonewmemset_S_ios_fmtflags_endsetlocale_ZNSt11char_traitsIcE6lengthEPKcunsigned char_sbufMutexBase_IO_write_ptreq_int_type_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minEostreamwcstoldwctob_ZNSt11char_traitsIcE4findEPKcjRS1_death_test_stylecurrency_symbolwcstoll__min_fileno_ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE15pthread_mutex_t__size__off_ttm_hourkDeathTestStyleFlagmon_thousands_sepInitGoogleTestshort unsigned int__digitstm_sec_S_unitbufmainwcscspn__builtin_va_list_S_curtm_isdstseekdir_IO_read_ptrwcsncpy_ZNSt11char_traitsIcE4copyEPcPKcjint_p_sep_by_spacevswscanfwcscmp_ZN7testing8internal9MutexBase4LockEvtm_gmtoff__pthread_internal_slist__align_chainwcschr__numeric_traits_integerkDeathTestUseForkvswprintfkProtobufOneLinerMaxLength_flags2_S_out_ZNSt11char_traitsIcE7compareEPKcS2_jint_p_sign_posn_S_showposImplicitlyConvertiblewcslen__off64_t__ioinit_unused2_IO_buf_base_ZNSt3tr110tuple_sizeINS_5tupleIIEEEE5valueE__pthread_mutex_swmemcmppÉĐ.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str.debug_ranges$.ö˙˙o88<8 tt0@¤¤H˙˙˙o¨¨&Uū˙˙oĐĐPd   Pm pp@ v°°#qāā|ppŅ‚DDˆ2XX$||$ž  ŧ¨ÄÄ´ĖĖĀĐĐÅÔÔŌØØÛččā ,é, ,î0,,÷X(€yų+ļ ¯1W,05)7/GGGEÜM`!4  \$output_objdir/\$libname.ver~ cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$output_objdir/\$libname.ver~ echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~ \$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-version-script \${wl}\$output_objdir/\$libname.ver -o \$lib" # Commands used to build a loadable module if different from building # a shared archive. module_cmds="" module_expsym_cmds="" # Whether we are building with GNU ld or not. with_gnu_ld="yes" # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag="" # Flag that enforces no undefined symbols. no_undefined_flag="" # Flag to hardcode $libdir into a binary during linking. # This must work even if $libdir does not exist hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator="" # Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=no # Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting ${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=no # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=no # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=unsupported # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=no # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=no # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=no # Set to "yes" if exported symbols are required. always_export_symbols=no # The commands to list exported symbols. export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" # Symbols that should not be listed in the preloaded symbols. exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" # Symbols that must always be exported. include_expsyms="" # Commands necessary for linking programs (against libraries) with templates. prelink_cmds="" # Commands necessary for finishing linking programs. postlink_cmds="" # Specify filename containing input files. file_list_spec="" # How to hardcode a shared library path into an executable. hardcode_action=immediate # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs="" # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects="" postdep_objects="" predeps="" postdeps="" # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path="" # ### END LIBTOOL CONFIG # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1ubuntu1" TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # Extended-shell func_dirname implementation # func_basename file func_basename () { func_basename_result="${1##*/}" } # Extended-shell func_basename implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # Extended-shell func_dirname_and_basename implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # Extended-shell func_stripname implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} } # Extended-shell func_split_short_opt implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=} } # Extended-shell func_split_long_opt implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}+=\${2}" } # Extended-shell func_append implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}+=\\ \$func_quote_for_eval_result" } # Extended-shell func_append_quoted implementation # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # Extended-shell func_arith implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } # Extended-shell func_len implementation # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # Extended-shell func_lo2o implementation # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # Extended-shell func_xform implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false preserve_args+=" $opt" ;; --no-warning|--no-warn) opt_warning=false preserve_args+=" $opt" ;; --no-verbose) opt_verbose=false preserve_args+=" $opt" ;; --silent|--quiet) opt_silent=: preserve_args+=" $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: preserve_args+=" $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" preserve_args+=" $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || preserve_args+=" --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_to_host_path_result+="$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) pie_flag+=" $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) later+=" $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. base_compile+=" $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi removelist+=" $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist+=" $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir command+=" -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then command+=" -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command+="$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then dir+="/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then libdirs+=" $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then libs+=" $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || admincmds+=" $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" install_prog+="$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then files+=" $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog+=" $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi install_shared_prog+=" $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" install_shared_prog+=" -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs+=" $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs+=" $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs+=" $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir+="$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && staticlibs+=" $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) symtab_cflags+=" $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result libtool_args+=" $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command+=" @OUTPUT@" finalize_command+=" @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command+=" @SYMFILE@" finalize_command+=" @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles+=" $arg" else dlprefiles+=" $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) deplibs+=" $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # moreargs+=" $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles+=" $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles+=" $pic_object" prev= fi # A PIC object. libobjs+=" $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects+=" $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects+=" $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result libobjs+=" $pic_object" non_pic_objects+=" $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath+=" $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath+=" $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs+=" $arg" prev= continue ;; xcclinker) linker_flags+=" $qarg" compiler_flags+=" $qarg" prev= compile_command+=" $qarg" finalize_command+=" $qarg" continue ;; xcompiler) compiler_flags+=" $qarg" prev= compile_command+=" $qarg" finalize_command+=" $qarg" continue ;; xlinker) linker_flags+=" $qarg" compiler_flags+=" $wl$qarg" prev= compile_command+=" $wl$qarg" finalize_command+=" $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. compile_command+=" $link_static_flag" finalize_command+=" $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command+=" $arg" finalize_command+=" $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) deplibs+=" $arg" ;; *) deplibs+=" -L$dir" ;; esac lib_search_path+=" $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath+=":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath+=":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs+=" System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs+=" $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) compiler_flags+=" $arg" compile_command+=" $arg" finalize_command+=" $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) compiler_flags+=" $arg" compile_command+=" $arg" finalize_command+=" $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags+=" $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath+=" $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg+=" $func_quote_for_eval_result" compiler_flags+=" $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg+=" $wl$func_quote_for_eval_result" compiler_flags+=" $wl$func_quote_for_eval_result" linker_flags+=" $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" compile_command+=" $arg" finalize_command+=" $arg" compiler_flags+=" $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs+=" $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles+=" $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles+=" $pic_object" prev= fi # A PIC object. libobjs+=" $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects+=" $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects+=" $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result libobjs+=" $pic_object" non_pic_objects+=" $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. deplibs+=" $arg" old_deplibs+=" $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles+=" $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles+=" $func_resolve_sysroot_result" prev= else deplibs+=" $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command+=" $arg" finalize_command+=" $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command+=" $arg" finalize_command+=" $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) specialdeplibs+=" $deplib" ;; esac fi libs+=" $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs+=" $pre_post_deps" ;; esac pre_post_deps+=" $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs+=" $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags+=" $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags+=" $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags+=" $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" newlib_search_path+=" $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" newlib_search_path+=" $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath+=" $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles+=" $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles+=" $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) new_inherited_linker_flags+=" $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles+=" $dlopen" test -n "$dlpreopen" && dlprefiles+=" $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. convenience+=" $ladir/$objdir/$old_library" old_convenience+=" $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs+=" $deplib" ;; esac fi tmp_libs+=" $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles+=" $lib $dependency_libs" else newdlfiles+=" $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path+=" $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path+=" $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" newdlprefiles+=" $dir/$linklib" else newdlprefiles+=" $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs+=" $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles+=" $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs+=" $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles+=" $dir/$dlname" else newdlprefiles+=" $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path+=" $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" newlib_search_path+=" $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs+=" $deplib" ;; esac fi tmp_libs+=" $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) temp_rpath+="$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath+=" $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded notinst_deplibs+=" $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs+=" $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath+=" $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir+=" -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath+="$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath+="$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath+="$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir+=" -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath+=" $temp_xrpath";; esac;; *) temp_deplibs+=" $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path+=" $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) specialdeplibs+=" $func_resolve_sysroot_result" ;; esac fi tmp_libs+=" $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi compiler_flags+=" ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags+=" -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path+=" $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs+=" $deplib" ;; esac ;; *) tmp_libs+=" $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs+=" $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs+="$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" libobjs+=" $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring+=":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" libobjs+=" $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist+=" $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs+=" $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" temp_xrpath+=" -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles+=" $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles+=" $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs+=" System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs+=" -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs+=" $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs+=" $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs+=" $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs+=" $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs+=" $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs+=" -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs+=" $deplib" ;; esac ;; *) new_libs+=" $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs+="$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath+=" $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath+=" $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath+="$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames+=" $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" delfiles+=" $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result delfiles+=" $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles+=" $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs+=" $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $convenience libobjs+=" $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags+=" $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output delfiles+=" $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done delfiles+=" $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then objlist+=" $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles+=" $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles+=" $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $dlprefiles libobjs+=" $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" generated+=" $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) compile_command+=" ${wl}-bind_at_load" finalize_command+=" ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs+=" -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs+=" $deplib" ;; esac ;; *) new_libs+=" $deplib" ;; esac done compile_deplibs="$new_libs" compile_command+=" $compile_deplibs" finalize_command+=" $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs+="$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath+=" $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath+=" $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) dllsearchpath+=":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath+=":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs+="$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath+=" $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath+=" $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath+="$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath+="$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then oldobjs+=" $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $addlibs oldobjs+=" $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $dlprefiles oldobjs+=" $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" oldobjs+=" $gentop/$newobj" ;; *) oldobjs+=" $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result objlist+=" $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" newdependency_libs+=" ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" newdependency_libs+=" -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" newdependency_libs+=" -R$func_replace_sysroot_result" ;; *) newdependency_libs+=" $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlfiles+=" ${lt_sysroot:+=}$libdir/$name" ;; *) newdlfiles+=" $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlprefiles+=" ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles+=" $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles+=" $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) RM+=" $arg"; rmforce=yes ;; -*) RM+=" $arg" ;; *) files+=" $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) rmdirs+=" $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles+=" $odir/$n" done test -n "$old_library" && rmfiles+=" $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && rmfiles+=" $odir/$dlname" ;; esac test -n "$libdir" && rmfiles+=" $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then rmfiles+=" $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then rmfiles+=" $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles+=" $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result rmfiles+=" $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles+=" $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles+=" $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles+=" $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD="/usr/bin/ld" # How to create reloadable object files. reload_flag=" -r" reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" # Commands used to build an old-style archive. old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$tool_oldlib" # A language specific compiler. CC="g++" # Is the compiler the GNU compiler? with_gcc=yes # Compiler flag to turn off builtin functions. no_builtin_flag=" -fno-builtin" # Additional compiler flags for building library objects. pic_flag=" -fPIC -DPIC" # How to pass a linker flag through the compiler. wl="-Wl," # Compiler flag to prevent dynamic linking. link_static_flag="" # Does compiler simultaneously support -c and -o options? compiler_c_o="yes" # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=no # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=no # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec="\${wl}--export-dynamic" # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" # Whether the compiler copes with passing no objects directly. compiler_needs_object="no" # Create an old-style archive from a shared archive. old_archive_from_new_cmds="" # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds="" # Commands used to build a shared archive. archive_cmds="\$CC \$pic_flag -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" archive_expsym_cmds="\$CC \$pic_flag -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib" # Commands used to build a loadable module if different from building # a shared archive. module_cmds="" module_expsym_cmds="" # Whether we are building with GNU ld or not. with_gnu_ld="yes" # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag="" # Flag that enforces no undefined symbols. no_undefined_flag="" # Flag to hardcode $libdir into a binary during linking. # This must work even if $libdir does not exist hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator="" # Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=no # Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting ${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=no # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=no # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=unsupported # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=no # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=no # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=no # Set to "yes" if exported symbols are required. always_export_symbols=no # The commands to list exported symbols. export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" # Symbols that should not be listed in the preloaded symbols. exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" # Symbols that must always be exported. include_expsyms="" # Commands necessary for linking programs (against libraries) with templates. prelink_cmds="" # Commands necessary for finishing linking programs. postlink_cmds="" # Specify filename containing input files. file_list_spec="" # How to hardcode a shared library path into an executable. hardcode_action=immediate # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs="/usr/lib/gcc/i686-redhat-linux/4.9.2 /usr/lib/gcc/i686-redhat-linux/4.9.2/../../.." # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects="/usr/lib/gcc/i686-redhat-linux/4.9.2/../../../crti.o /usr/lib/gcc/i686-redhat-linux/4.9.2/crtbeginS.o" postdep_objects="/usr/lib/gcc/i686-redhat-linux/4.9.2/crtendS.o /usr/lib/gcc/i686-redhat-linux/4.9.2/../../../crtn.o" predeps="" postdeps="-lstdc++ -lm -lgcc_s -lc -lgcc_s" # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path="-L/usr/lib/gcc/i686-redhat-linux/4.9.2 -L/usr/lib/gcc/i686-redhat-linux/4.9.2/../../.." # ### END LIBTOOL TAG CONFIG: CXX dlt-daemon-2.18.6/gtest-1.7.0/m4/000077500000000000000000000000001377520261000157465ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/m4/acx_pthread.m4000066400000000000000000000317661377520261000205070ustar00rootroot00000000000000# This was retrieved from # http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?revision=1277&root=avahi # See also (perhaps for new versions?) # http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?root=avahi # # We've rewritten the inconsistency check code (from avahi), to work # more broadly. In particular, it no longer assumes ld accepts -zdefs. # This caused a restructing of the code, but the functionality has only # changed a little. dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) dnl dnl @summary figure out how to build C programs using POSIX threads dnl dnl This macro figures out how to build C programs using POSIX threads. dnl It sets the PTHREAD_LIBS output variable to the threads library and dnl linker flags, and the PTHREAD_CFLAGS output variable to any special dnl C compiler flags that are needed. (The user can also force certain dnl compiler flags/libs to be tested by setting these environment dnl variables.) dnl dnl Also sets PTHREAD_CC to any special C compiler that is needed for dnl multi-threaded programs (defaults to the value of CC otherwise). dnl (This is necessary on AIX to use the special cc_r compiler alias.) dnl dnl NOTE: You are assumed to not only compile your program with these dnl flags, but also link it with them as well. e.g. you should link dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS dnl $LIBS dnl dnl If you are only building threads programs, you may wish to use dnl these variables in your default LIBS, CFLAGS, and CC: dnl dnl LIBS="$PTHREAD_LIBS $LIBS" dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS" dnl CC="$PTHREAD_CC" dnl dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). dnl dnl ACTION-IF-FOUND is a list of shell commands to run if a threads dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the dnl default action will define HAVE_PTHREAD. dnl dnl Please let the authors know if this macro fails on any platform, or dnl if you have any other suggestions or comments. This macro was based dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros dnl posted by Alejandro Forero Cuervo to the autoconf macro repository. dnl We are also grateful for the helpful feedback of numerous users. dnl dnl @category InstalledPackages dnl @author Steven G. Johnson dnl @version 2006-05-29 dnl @license GPLWithACException dnl dnl Checks for GCC shared/pthread inconsistency based on work by dnl Marcin Owsiany AC_DEFUN([ACX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_SAVE AC_LANG_C acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) AC_MSG_RESULT($acx_pthread_ok) if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_TRY_LINK([#include ], [pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], [acx_pthread_ok=yes]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT($acx_pthread_ok) if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_TRY_LINK([#include ], [int attr=$attr; return attr;], [attr_name=$attr; break]) done AC_MSG_RESULT($attr_name) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r if test x"$GCC" != xyes; then AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) else PTHREAD_CC=$CC fi # The next part tries to detect GCC inconsistency with -shared on some # architectures and systems. The problem is that in certain # configurations, when -shared is specified, GCC "forgets" to # internally use various flags which are still necessary. # # Prepare the flags # save_CFLAGS="$CFLAGS" save_LIBS="$LIBS" save_CC="$CC" # Try with the flags determined by the earlier checks. # # -Wl,-z,defs forces link-time symbol resolution, so that the # linking checks with -shared actually have any value # # FIXME: -fPIC is required for -shared on many architectures, # so we specify it here, but the right way would probably be to # properly detect whether it is actually required. CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CC="$PTHREAD_CC" # In order not to create several levels of indentation, we test # the value of "$done" until we find the cure or run out of ideas. done="no" # First, make sure the CFLAGS we added are actually accepted by our # compiler. If not (and OS X's ld, for instance, does not accept -z), # then we can't do this test. if test x"$done" = xno; then AC_MSG_CHECKING([whether to check for GCC pthread/shared inconsistencies]) AC_TRY_LINK(,, , [done=yes]) if test "x$done" = xyes ; then AC_MSG_RESULT([no]) else AC_MSG_RESULT([yes]) fi fi if test x"$done" = xno; then AC_MSG_CHECKING([whether -pthread is sufficient with -shared]) AC_TRY_LINK([#include ], [pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], [done=yes]) if test "x$done" = xyes; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi # # Linux gcc on some architectures such as mips/mipsel forgets # about -lpthread # if test x"$done" = xno; then AC_MSG_CHECKING([whether -lpthread fixes that]) LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" AC_TRY_LINK([#include ], [pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], [done=yes]) if test "x$done" = xyes; then AC_MSG_RESULT([yes]) PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" else AC_MSG_RESULT([no]) fi fi # # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc # if test x"$done" = xno; then AC_MSG_CHECKING([whether -lc_r fixes that]) LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" AC_TRY_LINK([#include ], [pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], [done=yes]) if test "x$done" = xyes; then AC_MSG_RESULT([yes]) PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" else AC_MSG_RESULT([no]) fi fi if test x"$done" = xno; then # OK, we have run out of ideas AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries]) # so it's not safe to assume that we may use pthreads acx_pthread_ok=no fi CFLAGS="$save_CFLAGS" LIBS="$save_LIBS" CC="$save_CC" else PTHREAD_CC="$CC" fi AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_CFLAGS) AC_SUBST(PTHREAD_CC) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) : else acx_pthread_ok=no $2 fi AC_LANG_RESTORE ])dnl ACX_PTHREAD dlt-daemon-2.18.6/gtest-1.7.0/m4/gtest.m4000066400000000000000000000062211377520261000173370ustar00rootroot00000000000000dnl GTEST_LIB_CHECK([minimum version [, dnl action if found [,action if not found]]]) dnl dnl Check for the presence of the Google Test library, optionally at a minimum dnl version, and indicate a viable version with the HAVE_GTEST flag. It defines dnl standard variables for substitution including GTEST_CPPFLAGS, dnl GTEST_CXXFLAGS, GTEST_LDFLAGS, and GTEST_LIBS. It also defines dnl GTEST_VERSION as the version of Google Test found. Finally, it provides dnl optional custom action slots in the event GTEST is found or not. AC_DEFUN([GTEST_LIB_CHECK], [ dnl Provide a flag to enable or disable Google Test usage. AC_ARG_ENABLE([gtest], [AS_HELP_STRING([--enable-gtest], [Enable tests using the Google C++ Testing Framework. (Default is enabled.)])], [], [enable_gtest=]) AC_ARG_VAR([GTEST_CONFIG], [The exact path of Google Test's 'gtest-config' script.]) AC_ARG_VAR([GTEST_CPPFLAGS], [C-like preprocessor flags for Google Test.]) AC_ARG_VAR([GTEST_CXXFLAGS], [C++ compile flags for Google Test.]) AC_ARG_VAR([GTEST_LDFLAGS], [Linker path and option flags for Google Test.]) AC_ARG_VAR([GTEST_LIBS], [Library linking flags for Google Test.]) AC_ARG_VAR([GTEST_VERSION], [The version of Google Test available.]) HAVE_GTEST="no" AS_IF([test "x${enable_gtest}" != "xno"], [AC_MSG_CHECKING([for 'gtest-config']) AS_IF([test "x${enable_gtest}" != "xyes"], [AS_IF([test -x "${enable_gtest}/scripts/gtest-config"], [GTEST_CONFIG="${enable_gtest}/scripts/gtest-config"], [GTEST_CONFIG="${enable_gtest}/bin/gtest-config"]) AS_IF([test -x "${GTEST_CONFIG}"], [], [AC_MSG_RESULT([no]) AC_MSG_ERROR([dnl Unable to locate either a built or installed Google Test. The specific location '${enable_gtest}' was provided for a built or installed Google Test, but no 'gtest-config' script could be found at this location.]) ])], [AC_PATH_PROG([GTEST_CONFIG], [gtest-config])]) AS_IF([test -x "${GTEST_CONFIG}"], [AC_MSG_RESULT([${GTEST_CONFIG}]) m4_ifval([$1], [_gtest_min_version="--min-version=$1" AC_MSG_CHECKING([for Google Test at least version >= $1])], [_gtest_min_version="--min-version=0" AC_MSG_CHECKING([for Google Test])]) AS_IF([${GTEST_CONFIG} ${_gtest_min_version}], [AC_MSG_RESULT([yes]) HAVE_GTEST='yes'], [AC_MSG_RESULT([no])])], [AC_MSG_RESULT([no])]) AS_IF([test "x${HAVE_GTEST}" = "xyes"], [GTEST_CPPFLAGS=`${GTEST_CONFIG} --cppflags` GTEST_CXXFLAGS=`${GTEST_CONFIG} --cxxflags` GTEST_LDFLAGS=`${GTEST_CONFIG} --ldflags` GTEST_LIBS=`${GTEST_CONFIG} --libs` GTEST_VERSION=`${GTEST_CONFIG} --version` AC_DEFINE([HAVE_GTEST],[1],[Defined when Google Test is available.])], [AS_IF([test "x${enable_gtest}" = "xyes"], [AC_MSG_ERROR([dnl Google Test was enabled, but no viable version could be found.]) ])])]) AC_SUBST([HAVE_GTEST]) AM_CONDITIONAL([HAVE_GTEST],[test "x$HAVE_GTEST" = "xyes"]) AS_IF([test "x$HAVE_GTEST" = "xyes"], [m4_ifval([$2], [$2])], [m4_ifval([$3], [$3])]) ]) dlt-daemon-2.18.6/gtest-1.7.0/m4/libtool.m4000066400000000000000000010604341377520261000176640ustar00rootroot00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS dlt-daemon-2.18.6/gtest-1.7.0/m4/ltoptions.m4000066400000000000000000000300731377520261000202460ustar00rootroot00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) dlt-daemon-2.18.6/gtest-1.7.0/m4/ltsugar.m4000066400000000000000000000104241377520261000176720ustar00rootroot00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) dlt-daemon-2.18.6/gtest-1.7.0/m4/ltversion.m4000066400000000000000000000012621377520261000202360ustar00rootroot00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) dlt-daemon-2.18.6/gtest-1.7.0/m4/lt~obsolete.m4000066400000000000000000000137561377520261000205760ustar00rootroot00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) dlt-daemon-2.18.6/gtest-1.7.0/make/000077500000000000000000000000001377520261000163435ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/make/Makefile000066400000000000000000000053011377520261000200020ustar00rootroot00000000000000# A sample Makefile for building Google Test and using it in user # tests. Please tweak it to suit your environment and project. You # may want to move it to your project's root directory. # # SYNOPSIS: # # make [all] - makes everything. # make TARGET - makes the given target. # make clean - removes all files generated by make. # Please tweak the following variable definitions as needed by your # project, except GTEST_HEADERS, which you can use in your own targets # but shouldn't modify. # Points to the root of Google Test, relative to where this file is. # Remember to tweak this if you move this file. GTEST_DIR = .. # Where to find user code. USER_DIR = ../samples # Flags passed to the preprocessor. # Set Google Test's header directory as a system directory, such that # the compiler doesn't generate warnings in Google Test headers. CPPFLAGS += -isystem $(GTEST_DIR)/include # Flags passed to the C++ compiler. CXXFLAGS += -g -Wall -Wextra -pthread # All tests produced by this Makefile. Remember to add new tests you # created to the list. TESTS = sample1_unittest # All Google Test headers. Usually you shouldn't change this # definition. GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \ $(GTEST_DIR)/include/gtest/internal/*.h # House-keeping build targets. all : $(TESTS) clean : rm -f $(TESTS) gtest.a gtest_main.a *.o # Builds gtest.a and gtest_main.a. # Usually you shouldn't tweak such internal variables, indicated by a # trailing _. GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS) # For simplicity and to avoid depending on Google Test's # implementation details, the dependencies specified below are # conservative and not optimized. This is fine as Google Test # compiles fast and for ordinary users its source rarely changes. gtest-all.o : $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ $(GTEST_DIR)/src/gtest-all.cc gtest_main.o : $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ $(GTEST_DIR)/src/gtest_main.cc gtest.a : gtest-all.o $(AR) $(ARFLAGS) $@ $^ gtest_main.a : gtest-all.o gtest_main.o $(AR) $(ARFLAGS) $@ $^ # Builds a sample test. A test should link with either gtest.a or # gtest_main.a, depending on whether it defines its own main() # function. sample1.o : $(USER_DIR)/sample1.cc $(USER_DIR)/sample1.h $(GTEST_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample1.cc sample1_unittest.o : $(USER_DIR)/sample1_unittest.cc \ $(USER_DIR)/sample1.h $(GTEST_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample1_unittest.cc sample1_unittest : sample1.o sample1_unittest.o gtest_main.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ dlt-daemon-2.18.6/gtest-1.7.0/msvc/000077500000000000000000000000001377520261000163765ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/msvc/gtest-md.sln000077500000000000000000000046301377520261000206460ustar00rootroot00000000000000Microsoft Visual Studio Solution File, Format Version 8.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-md", "gtest-md.vcproj", "{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_main-md", "gtest_main-md.vcproj", "{3AF54C8A-10BF-4332-9147-F68ED9862033}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_prod_test-md", "gtest_prod_test-md.vcproj", "{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_unittest-md", "gtest_unittest-md.vcproj", "{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug Release = Release EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Debug.ActiveCfg = Debug|Win32 {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Debug.Build.0 = Debug|Win32 {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Release.ActiveCfg = Release|Win32 {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Release.Build.0 = Release|Win32 {3AF54C8A-10BF-4332-9147-F68ED9862033}.Debug.ActiveCfg = Debug|Win32 {3AF54C8A-10BF-4332-9147-F68ED9862033}.Debug.Build.0 = Debug|Win32 {3AF54C8A-10BF-4332-9147-F68ED9862033}.Release.ActiveCfg = Release|Win32 {3AF54C8A-10BF-4332-9147-F68ED9862033}.Release.Build.0 = Release|Win32 {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Debug.ActiveCfg = Debug|Win32 {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Debug.Build.0 = Debug|Win32 {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Release.ActiveCfg = Release|Win32 {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Release.Build.0 = Release|Win32 {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Debug.ActiveCfg = Debug|Win32 {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Debug.Build.0 = Debug|Win32 {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Release.ActiveCfg = Release|Win32 {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Release.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection GlobalSection(ExtensibilityAddIns) = postSolution EndGlobalSection EndGlobal dlt-daemon-2.18.6/gtest-1.7.0/msvc/gtest-md.vcproj000077500000000000000000000064561377520261000213650ustar00rootroot00000000000000 dlt-daemon-2.18.6/gtest-1.7.0/msvc/gtest.sln000077500000000000000000000046001377520261000202450ustar00rootroot00000000000000Microsoft Visual Studio Solution File, Format Version 8.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "gtest.vcproj", "{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_main", "gtest_main.vcproj", "{3AF54C8A-10BF-4332-9147-F68ED9862032}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_unittest", "gtest_unittest.vcproj", "{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_prod_test", "gtest_prod_test.vcproj", "{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug Release = Release EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug.ActiveCfg = Debug|Win32 {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug.Build.0 = Debug|Win32 {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release.ActiveCfg = Release|Win32 {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release.Build.0 = Release|Win32 {3AF54C8A-10BF-4332-9147-F68ED9862032}.Debug.ActiveCfg = Debug|Win32 {3AF54C8A-10BF-4332-9147-F68ED9862032}.Debug.Build.0 = Debug|Win32 {3AF54C8A-10BF-4332-9147-F68ED9862032}.Release.ActiveCfg = Release|Win32 {3AF54C8A-10BF-4332-9147-F68ED9862032}.Release.Build.0 = Release|Win32 {4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Debug.ActiveCfg = Debug|Win32 {4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Debug.Build.0 = Debug|Win32 {4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Release.ActiveCfg = Release|Win32 {4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Release.Build.0 = Release|Win32 {24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Debug.ActiveCfg = Debug|Win32 {24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Debug.Build.0 = Debug|Win32 {24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Release.ActiveCfg = Release|Win32 {24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Release.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection GlobalSection(ExtensibilityAddIns) = postSolution EndGlobalSection EndGlobal dlt-daemon-2.18.6/gtest-1.7.0/msvc/gtest.vcproj000077500000000000000000000064531377520261000207640ustar00rootroot00000000000000 dlt-daemon-2.18.6/gtest-1.7.0/msvc/gtest_main-md.vcproj000077500000000000000000000066721377520261000223710ustar00rootroot00000000000000 dlt-daemon-2.18.6/gtest-1.7.0/msvc/gtest_main.vcproj000077500000000000000000000066641377520261000217740ustar00rootroot00000000000000 dlt-daemon-2.18.6/gtest-1.7.0/msvc/gtest_prod_test-md.vcproj000077500000000000000000000106431377520261000234410ustar00rootroot00000000000000 dlt-daemon-2.18.6/gtest-1.7.0/msvc/gtest_prod_test.vcproj000077500000000000000000000106351377520261000230440ustar00rootroot00000000000000 dlt-daemon-2.18.6/gtest-1.7.0/msvc/gtest_unittest-md.vcproj000077500000000000000000000076511377520261000233220ustar00rootroot00000000000000 dlt-daemon-2.18.6/gtest-1.7.0/msvc/gtest_unittest.vcproj000077500000000000000000000076431377520261000227250ustar00rootroot00000000000000 dlt-daemon-2.18.6/gtest-1.7.0/samples/000077500000000000000000000000001377520261000170725ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/samples/.deps/000077500000000000000000000000001377520261000201035ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/samples/.deps/.dirstamp000066400000000000000000000000001377520261000217150ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/samples/.deps/sample1.Plo000066400000000000000000000002101377520261000221120ustar00rootroot00000000000000samples/sample1.lo: samples/sample1.cc /usr/include/stdc-predef.h \ samples/sample1.h /usr/include/stdc-predef.h: samples/sample1.h: dlt-daemon-2.18.6/gtest-1.7.0/samples/.deps/sample10_unittest.Po000066400000000000000000000000101377520261000237530ustar00rootroot00000000000000# dummy dlt-daemon-2.18.6/gtest-1.7.0/samples/.deps/sample1_unittest.Po000066400000000000000000000000101377520261000236730ustar00rootroot00000000000000# dummy dlt-daemon-2.18.6/gtest-1.7.0/samples/.deps/sample2.Plo000066400000000000000000000011601377520261000221200ustar00rootroot00000000000000samples/sample2.lo: samples/sample2.cc /usr/include/stdc-predef.h \ samples/sample2.h /usr/include/string.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stddef.h \ /usr/include/xlocale.h /usr/include/stdc-predef.h: samples/sample2.h: /usr/include/string.h: /usr/include/features.h: /usr/include/sys/cdefs.h: /usr/include/bits/wordsize.h: /usr/include/gnu/stubs.h: /usr/include/gnu/stubs-32.h: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stddef.h: /usr/include/xlocale.h: dlt-daemon-2.18.6/gtest-1.7.0/samples/.deps/sample4.Plo000066400000000000000000000021561377520261000221300ustar00rootroot00000000000000samples/sample4.lo: samples/sample4.cc /usr/include/stdc-predef.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ /usr/include/gnu/stubs-32.h \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/typesizes.h \ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ /usr/include/bits/stdio.h samples/sample4.h /usr/include/stdc-predef.h: /usr/include/stdio.h: /usr/include/features.h: /usr/include/sys/cdefs.h: /usr/include/bits/wordsize.h: /usr/include/gnu/stubs.h: /usr/include/gnu/stubs-32.h: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stddef.h: /usr/include/bits/types.h: /usr/include/bits/typesizes.h: /usr/include/libio.h: /usr/include/_G_config.h: /usr/include/wchar.h: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stdarg.h: /usr/include/bits/stdio_lim.h: /usr/include/bits/sys_errlist.h: /usr/include/bits/stdio.h: samples/sample4.h: dlt-daemon-2.18.6/gtest-1.7.0/samples/.deps/test_fused_gtest_test-sample1.Po000066400000000000000000000000101377520261000263440ustar00rootroot00000000000000# dummy dlt-daemon-2.18.6/gtest-1.7.0/samples/.deps/test_fused_gtest_test-sample1_unittest.Po000066400000000000000000000000101377520261000303030ustar00rootroot00000000000000# dummy dlt-daemon-2.18.6/gtest-1.7.0/samples/.dirstamp000066400000000000000000000000001377520261000207040ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/samples/.libs/000077500000000000000000000000001377520261000201015ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/samples/.libs/libsamples.a000066400000000000000000000313001377520261000223730ustar00rootroot00000000000000! / 1428496273 0 0 0 204 `  d d d```_Z9Factoriali_Z7IsPrimei_ZN8MyString12CloneCStringEPKc__x86.get_pc_thunk.bx_ZN8MyString3SetEPKc_ZN7Counter9IncrementEv_ZNK7Counter5PrintEv__x86.get_pc_thunk.bxsample1.o/ 1428496273 1000 1000 100664 2840 ` ELFĀ4(‹L$…É~ƒÁē¸v¯ÂƒÂ9ĘuöķøÍļV‹t$ƒū~V÷Æt>ƒū~1‰đēVUUU÷ę‰đÁø)R9Æt2šëv…Ōt$‰đƒÁ™÷ų9Č}đ¸^Ѓū”Ā^Ѝ´&1Ā^ÃÍ?œ”5%"€*œ€n%€%&€ i'€Jint/É0dœÉn/€uB6i9€Î0% .?: ; nI@—B: ; I 4: ; I4: ; I$ > $ > $‘$*Q1Ÿ$P$*1Ÿ1Ÿ$R$*1Ÿ0e‘e~V~‘‡V‡ˆ‘ˆ“V“”‘Be3ŸexQ”n)û samplessample1.cc$L=;^w L[‰\%,>|Yp<fmž.IsPrimeresultsamples/sample1.cc_Z9FactorialiboolFactorialGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2 -fPIC_Z7IsPrimei/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0GCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ*(00dA†M ÆB G ÆI CÆ.symtab.strtab.shstrtab.text.data.bss.text.unlikely.rel.debug_info.debug_abbrev.debug_loc.rel.debug_aranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame@”!Ô'Ô,Ô?ÔŅ; @ °KĨ|Y!íh d đ  {.rw  ‡0 Ū’0~-›Ģ¯ŦXĢ  š   &ņ˙    *0dsample1.cc_Z9Factoriali_Z7IsPrimei    ! & , 4KPY chyˆ Ž –­˛ÃĖ 6 4sample2.o/ 1428496273 1000 1000 100664 4800 ` ELF° 4(UWVSčü˙˙˙Ãƒė ‹l$ …ít6ƒė Učü˙˙˙x‰<$čü˙˙˙ƒÄ ‰ÆWUPčü˙˙˙ƒÄ‰đƒÄ [^_]Ѝ´&1ĀëėļŋWVS‹t$čü˙˙˙Ãƒė ˙t$ čü˙˙˙‹ƒÄ‰Į…Ōt ƒė Rčü˙˙˙ƒÄ‰>[^_Ë$ÃÃd9Ž›)Ô0ƒĨLintRWø_)q0+L ũ,ŧq˜ | q 0EL˛ L _7ÂČ |_:Øã | L _?ķū | q įG | EhJL17 ‚ĩLĐ%OU ‚SetQe | Lw^^w˜'Tœëq'L‘len*ë:+đ #d.z;“%õWU3`;œZZ‘q3L‘r%@5_>~ˆ’ˇ|LŽ%z L‘‘ 0|‘° ‘ ° 7ļ &ņ ‘% : ; I$ > $ >  I&I : ;  : ; I8 .?: ; nI<d I4 I .?: ; nI2 < .?: ; 2 <d.?: ; 2 <cd.?: ; nI2 <d.?: ; n2 <d I.G: ; @—B: ; I U4: ; I4: ; I‰‚1.G: ; @d—BI4 .?: ;I<.?nI4< .?I4<& .?n4<#-P-@wŸ3:P:@V…‘P‘šW𛑛@PTģˆû samples/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/includesample2.ccsample2.hstddef.hstring.h& KL‘­;/„Yyō ō"ģW/Jģ/_ZNK8MyString8c_stringEvoperator new []size_tc_string_clonetemp_ZN8MyString12CloneCStringEPKcGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2 -fPICLength_ZN8MyStringaSERKS__ZNK8MyString6LengthEv~MyString_ZdaPvcharoperator=strlenthis_ZnajCloneCStringoperator delete []samples/sample2.ccshort unsigned intMyStringc_stringa_c_stringmemcpyunsigned int_ZN8MyString3SetEPKcsizetype/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0GCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆPTA…A ‡A†AƒN K,A0S$C(A,A0H E AÃAÆ AĮAÅI <p`;A‡A †AƒRD JIA HCà AÆAĮ°.symtab.strtab.shstrtab.rel.text.data.bss.text.unlikely.text.__x86.get_pc_thunk.bx.rel.debug_info.debug_abbrev.debug_loc.rel.debug_aranges.debug_ranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame.groupį4@› ĀH%Û+Û0Ü?Ü_āĮ[ ˆk§Ûy‚iˆë „  — Š#ŋĨ  ĩ0âđĀ0Ō-É˙Ũ ĀŲ ¨Ā  8‡ņ˙    T+AW^dk`;€sample2.cc_ZN8MyString12CloneCStringEPKc__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE_strlen_Znajmemcpy_ZN8MyString3SetEPKc_ZdaPv *7hn zŽ    ! & 3 : A Z _ k w } ™ Ÿ ŗ É ä ˙   8 > \ ž Ŧ ģ Ā Ę ĪØá ! /8 B GPe {  ” ¸ ŧ • t´sample4.o/ 1428496273 1000 1000 100664 4900 ` ELFø 4(‹T$‹H‰ Ít&Sčü˙˙˙Ãƒė‹D$˙0ƒPčü˙˙˙ƒÄ[Ã%d‹$ÛR§}68Ô00˙šú .intf 7a<ƒ…Ā2„o?ĻĖö”õ-öZŦû Šü oũ  áū X˙  $  t    × $ K ( ! , e0 D k4 å Z8 aZ< z@ Đ>D ČLF HqG ēH H%ŒL ×.žT Ū/žX å0ž\ ė1ž` ķ2%d i4Zh Ŗ6‡l š=  eŅĄeđĸkÜĻZ4­ ρ —- Ļ— —' ĻP&ŋ(ZP,ĘĐ—/ ZčîĄ2íū ĸ ĸĐ' œ/<<‘ î,&œZpp‘1‹ [¨kŠkÉjZ—% : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ &I : ; .?: ; 2 <dI4.?: ; nI2 <d.?: ; n2 <d.G: ; @d—BI4‰‚14: ; I?<.?: ;I<I6˯û samples/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/include/bits/usr/includesample4.ccstddef.htypes.hlibio.hsample4.hstdio.h&Ku[å!_IO_buf_end__quad_t_old_offset_IO_save_endshort intsize_tsizetype_offsetCounter_IO_write_ptrlong long int_IO_buf_base_markers_IO_read_endIncrementPrintsamples/sample4.cc_locklong intprintf_cur_column_pos_IO_write_base_sbuf_IO_FILEunsigned charsigned charlong long unsigned intunsigned int_IO_marker_shortbufGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2 -fPIC_unused2_IO_read_ptrshort unsigned intchar_next__pad1__pad2__pad3__pad4__pad5long unsigned int_ZN7Counter9IncrementEv_IO_write_end__off64_t__off_t_chain_IO_backup_basestdin_flags2_mode_IO_read_base/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0counter__vtable_offset_IO_save_base_fileno_ZNK7Counter5PrintEvthis_flagsstdout_IO_lock_tGCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ $0&AƒNFG HAÃX.symtab.strtab.shstrtab.rel.text.data.bss.text.unlikely.rodata.str1.1.text.__x86.get_pc_thunk.bx.rel.debug_info.debug_abbrev.rel.debug_aranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame.groupŨ4@6 œ %v+v0v?2vNyn}Ÿj ŧ8 zQŒm ˆ ô ŸĪ› Ģ0\ ļ0| -ŋŠ ĶŦ hĪ  ä¸p (qņ˙     )&>Tjsample4.cc.LC1_ZN7Counter9IncrementEv_ZNK7Counter5PrintEv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE_printf ' -    ! & 3 : A H O V d k p { ˆ  š Š Ž ē Æ Ō Ū ę ö    ) 6 C P ] j w „ ‘ ž Ģ ¸ Å Ō ß ė ų    . 5 A M Y Ŗ ¯ ģ Ņ × ī õ 0 H[ gv  Œ ŧ 4\dlt-daemon-2.18.6/gtest-1.7.0/samples/.libs/libsamples.la000077700000000000000000000000001377520261000254312../libsamples.laustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/samples/.libs/sample1.o000066400000000000000000000054301377520261000216250ustar00rootroot00000000000000ELFĀ4(‹L$…É~ƒÁē¸v¯ÂƒÂ9ĘuöķøÍļV‹t$ƒū~V÷Æt>ƒū~1‰đēVUUU÷ę‰đÁø)R9Æt2šëv…Ōt$‰đƒÁ™÷ų9Č}đ¸^Ѓū”Ā^Ѝ´&1Ā^ÃÍ?œ”5%"€*œ€n%€%&€ i'€Jint/É0dœÉn/€uB6i9€Î0% .?: ; nI@—B: ; I 4: ; I4: ; I$ > $ > $‘$*Q1Ÿ$P$*1Ÿ1Ÿ$R$*1Ÿ0e‘e~V~‘‡V‡ˆ‘ˆ“V“”‘Be3ŸexQ”n)û samplessample1.cc$L=;^w L[‰\%,>|Yp<fmž.IsPrimeresultsamples/sample1.cc_Z9FactorialiboolFactorialGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2 -fPIC_Z7IsPrimei/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0GCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ*(00dA†M ÆB G ÆI CÆ.symtab.strtab.shstrtab.text.data.bss.text.unlikely.rel.debug_info.debug_abbrev.debug_loc.rel.debug_aranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame@”!Ô'Ô,Ô?ÔŅ; @ °KĨ|Y!íh d đ  {.rw  ‡0 Ū’0~-›Ģ¯ŦXĢ  š   &ņ˙    *0dsample1.cc_Z9Factoriali_Z7IsPrimei    ! & , 4KPY chyˆ Ž –­˛ÃĖ 6 4dlt-daemon-2.18.6/gtest-1.7.0/samples/.libs/sample2.o000066400000000000000000000113001377520261000216170ustar00rootroot00000000000000ELF° 4(UWVSčü˙˙˙Ãƒė ‹l$ …ít6ƒė Učü˙˙˙x‰<$čü˙˙˙ƒÄ ‰ÆWUPčü˙˙˙ƒÄ‰đƒÄ [^_]Ѝ´&1ĀëėļŋWVS‹t$čü˙˙˙Ãƒė ˙t$ čü˙˙˙‹ƒÄ‰Į…Ōt ƒė Rčü˙˙˙ƒÄ‰>[^_Ë$ÃÃd9Ž›)Ô0ƒĨLintRWø_)q0+L ũ,ŧq˜ | q 0EL˛ L _7ÂČ |_:Øã | L _?ķū | q įG | EhJL17 ‚ĩLĐ%OU ‚SetQe | Lw^^w˜'Tœëq'L‘len*ë:+đ #d.z;“%õWU3`;œZZ‘q3L‘r%@5_>~ˆ’ˇ|LŽ%z L‘‘ 0|‘° ‘ ° 7ļ &ņ ‘% : ; I$ > $ >  I&I : ;  : ; I8 .?: ; nI<d I4 I .?: ; nI2 < .?: ; 2 <d.?: ; 2 <cd.?: ; nI2 <d.?: ; n2 <d I.G: ; @—B: ; I U4: ; I4: ; I‰‚1.G: ; @d—BI4 .?: ;I<.?nI4< .?I4<& .?n4<#-P-@wŸ3:P:@V…‘P‘šW𛑛@PTģˆû samples/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/includesample2.ccsample2.hstddef.hstring.h& KL‘­;/„Yyō ō"ģW/Jģ/_ZNK8MyString8c_stringEvoperator new []size_tc_string_clonetemp_ZN8MyString12CloneCStringEPKcGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2 -fPICLength_ZN8MyStringaSERKS__ZNK8MyString6LengthEv~MyString_ZdaPvcharoperator=strlenthis_ZnajCloneCStringoperator delete []samples/sample2.ccshort unsigned intMyStringc_stringa_c_stringmemcpyunsigned int_ZN8MyString3SetEPKcsizetype/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0GCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆPTA…A ‡A†AƒN K,A0S$C(A,A0H E AÃAÆ AĮAÅI <p`;A‡A †AƒRD JIA HCà AÆAĮ°.symtab.strtab.shstrtab.rel.text.data.bss.text.unlikely.text.__x86.get_pc_thunk.bx.rel.debug_info.debug_abbrev.debug_loc.rel.debug_aranges.debug_ranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame.groupį4@› ĀH%Û+Û0Ü?Ü_āĮ[ ˆk§Ûy‚iˆë „  — Š#ŋĨ  ĩ0âđĀ0Ō-É˙Ũ ĀŲ ¨Ā  8‡ņ˙    T+AW^dk`;€sample2.cc_ZN8MyString12CloneCStringEPKc__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE_strlen_Znajmemcpy_ZN8MyString3SetEPKc_ZdaPv *7hn zŽ    ! & 3 : A Z _ k w } ™ Ÿ ŗ É ä ˙   8 > \ ž Ŧ ģ Ā Ę ĪØá ! /8 B GPe {  ” ¸ ŧ • t´dlt-daemon-2.18.6/gtest-1.7.0/samples/.libs/sample4.o000066400000000000000000000114441377520261000216320ustar00rootroot00000000000000ELFø 4(‹T$‹H‰ Ít&Sčü˙˙˙Ãƒė‹D$˙0ƒPčü˙˙˙ƒÄ[Ã%d‹$ÛR§}68Ô00˙šú .intf 7a<ƒ…Ā2„o?ĻĖö”õ-öZŦû Šü oũ  áū X˙  $  t    × $ K ( ! , e0 D k4 å Z8 aZ< z@ Đ>D ČLF HqG ēH H%ŒL ×.žT Ū/žX å0ž\ ė1ž` ķ2%d i4Zh Ŗ6‡l š=  eŅĄeđĸkÜĻZ4­ ρ —- Ļ— —' ĻP&ŋ(ZP,ĘĐ—/ ZčîĄ2íū ĸ ĸĐ' œ/<<‘ î,&œZpp‘1‹ [¨kŠkÉjZ—% : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ &I : ; .?: ; 2 <dI4.?: ; nI2 <d.?: ; n2 <d.G: ; @d—BI4‰‚14: ; I?<.?: ;I<I6˯û samples/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/include/bits/usr/includesample4.ccstddef.htypes.hlibio.hsample4.hstdio.h&Ku[å!_IO_buf_end__quad_t_old_offset_IO_save_endshort intsize_tsizetype_offsetCounter_IO_write_ptrlong long int_IO_buf_base_markers_IO_read_endIncrementPrintsamples/sample4.cc_locklong intprintf_cur_column_pos_IO_write_base_sbuf_IO_FILEunsigned charsigned charlong long unsigned intunsigned int_IO_marker_shortbufGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2 -fPIC_unused2_IO_read_ptrshort unsigned intchar_next__pad1__pad2__pad3__pad4__pad5long unsigned int_ZN7Counter9IncrementEv_IO_write_end__off64_t__off_t_chain_IO_backup_basestdin_flags2_mode_IO_read_base/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0counter__vtable_offset_IO_save_base_fileno_ZNK7Counter5PrintEvthis_flagsstdout_IO_lock_tGCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ $0&AƒNFG HAÃX.symtab.strtab.shstrtab.rel.text.data.bss.text.unlikely.rodata.str1.1.text.__x86.get_pc_thunk.bx.rel.debug_info.debug_abbrev.rel.debug_aranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame.groupŨ4@6 œ %v+v0v?2vNyn}Ÿj ŧ8 zQŒm ˆ ô ŸĪ› Ģ0\ ļ0| -ŋŠ ĶŦ hĪ  ä¸p (qņ˙     )&>Tjsample4.cc.LC1_ZN7Counter9IncrementEv_ZNK7Counter5PrintEv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE_printf ' -    ! & 3 : A H O V d k p { ˆ  š Š Ž ē Æ Ō Ū ę ö    ) 6 C P ] j w „ ‘ ž Ģ ¸ Å Ō ß ė ų    . 5 A M Y Ŗ ¯ ģ Ņ × ī õ 0 H[ gv  Œ ŧ 4\dlt-daemon-2.18.6/gtest-1.7.0/samples/libsamples.la000066400000000000000000000015671377520261000215540ustar00rootroot00000000000000# libsamples.la - a libtool library file # Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='' # Names of this library. library_names='' # The name of the static archive. old_library='libsamples.a' # Linker flags that can not go in dependency_libs. inherited_linker_flags=' -pthread' # Libraries that this one depends upon. dependency_libs='' # Names of additional weak libraries provided by this library weak_library_names='' # Version information for libsamples. current= age= revision= # Is this an already installed library? installed=no # Should we warn about portability when linking against -modules? shouldnotlink=no # Files to dlopen/dlpreopen dlopen='' dlpreopen='' # Directory that this library needs to be installed in: libdir='' dlt-daemon-2.18.6/gtest-1.7.0/samples/prime_tables.h000066400000000000000000000077501377520261000217220ustar00rootroot00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Author: vladl@google.com (Vlad Losev) // This provides interface PrimeTable that determines whether a number is a // prime and determines a next prime number. This interface is used // in Google Test samples demonstrating use of parameterized tests. #ifndef GTEST_SAMPLES_PRIME_TABLES_H_ #define GTEST_SAMPLES_PRIME_TABLES_H_ #include // The prime table interface. class PrimeTable { public: virtual ~PrimeTable() {} // Returns true iff n is a prime number. virtual bool IsPrime(int n) const = 0; // Returns the smallest prime number greater than p; or returns -1 // if the next prime is beyond the capacity of the table. virtual int GetNextPrime(int p) const = 0; }; // Implementation #1 calculates the primes on-the-fly. class OnTheFlyPrimeTable : public PrimeTable { public: virtual bool IsPrime(int n) const { if (n <= 1) return false; for (int i = 2; i*i <= n; i++) { // n is divisible by an integer other than 1 and itself. if ((n % i) == 0) return false; } return true; } virtual int GetNextPrime(int p) const { for (int n = p + 1; n > 0; n++) { if (IsPrime(n)) return n; } return -1; } }; // Implementation #2 pre-calculates the primes and stores the result // in an array. class PreCalculatedPrimeTable : public PrimeTable { public: // 'max' specifies the maximum number the prime table holds. explicit PreCalculatedPrimeTable(int max) : is_prime_size_(max + 1), is_prime_(new bool[max + 1]) { CalculatePrimesUpTo(max); } virtual ~PreCalculatedPrimeTable() { delete[] is_prime_; } virtual bool IsPrime(int n) const { return 0 <= n && n < is_prime_size_ && is_prime_[n]; } virtual int GetNextPrime(int p) const { for (int n = p + 1; n < is_prime_size_; n++) { if (is_prime_[n]) return n; } return -1; } private: void CalculatePrimesUpTo(int max) { ::std::fill(is_prime_, is_prime_ + is_prime_size_, true); is_prime_[0] = is_prime_[1] = false; for (int i = 2; i <= max; i++) { if (!is_prime_[i]) continue; // Marks all multiples of i (except i itself) as non-prime. for (int j = 2*i; j <= max; j += i) { is_prime_[j] = false; } } } const int is_prime_size_; bool* const is_prime_; // Disables compiler warning "assignment operator could not be generated." void operator=(const PreCalculatedPrimeTable& rhs); }; #endif // GTEST_SAMPLES_PRIME_TABLES_H_ dlt-daemon-2.18.6/gtest-1.7.0/samples/sample1.cc000066400000000000000000000047061377520261000207520ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // A sample program demonstrating using Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) #include "sample1.h" // Returns n! (the factorial of n). For negative n, n! is defined to be 1. int Factorial(int n) { int result = 1; for (int i = 1; i <= n; i++) { result *= i; } return result; } // Returns true iff n is a prime number. bool IsPrime(int n) { // Trivial case 1: small numbers if (n <= 1) return false; // Trivial case 2: even numbers if (n % 2 == 0) return n == 2; // Now, we have that n is odd and n >= 3. // Try to divide n by every odd number i, starting from 3 for (int i = 3; ; i += 2) { // We only have to try i up to the squre root of n if (i > n/i) break; // Now, we have i <= n/i < n. // If n is divisible by i, n is not prime. if (n % i == 0) return false; } // n has no integer factor in the range (1, n), and thus is prime. return true; } dlt-daemon-2.18.6/gtest-1.7.0/samples/sample1.h000066400000000000000000000036211377520261000206070ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // A sample program demonstrating using Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) #ifndef GTEST_SAMPLES_SAMPLE1_H_ #define GTEST_SAMPLES_SAMPLE1_H_ // Returns n! (the factorial of n). For negative n, n! is defined to be 1. int Factorial(int n); // Returns true iff n is a prime number. bool IsPrime(int n); #endif // GTEST_SAMPLES_SAMPLE1_H_ dlt-daemon-2.18.6/gtest-1.7.0/samples/sample1.lo000066400000000000000000000004571377520261000207760ustar00rootroot00000000000000# samples/sample1.lo - a libtool object file # Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 # # Please DO NOT delete this file! # It is necessary for linking the library. # Name of the PIC object. pic_object='.libs/sample1.o' # Name of the non-PIC object non_pic_object='sample1.o' dlt-daemon-2.18.6/gtest-1.7.0/samples/sample1.o000066400000000000000000000054241377520261000206210ustar00rootroot00000000000000ELFŧ4(‹L$…É~ƒÁē¸v¯ÂƒÂ9ĘuöķøÍļS‹\$ƒû~VöÃtAƒû~4‰ØēVUUU÷扨Áø)R9Ãt5šë ļ…Ōt$‰ØƒÁ™÷ų9Č}đ¸[Ѓû”Ā[Ѝ´&1Ā[ÃÍZ–”€%m€*œ€n%€%S&€ i'€JintK/ŠÉ0dœÉn/€u?9i9€Î{% .?: ; nI@—B: ; I 4: ; I4: ; I$ > $ > $‘$*Q1Ÿ$P$*1Ÿ1Ÿ$R$*1Ÿ0b‘b~S~‘‡S‡ˆ‘ˆ“S“”‘?b3ŸbxQ”n)û samplessample1.cc$L=;^w L[_\(,>|Yp<fmž.GNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2IsPrimeresultsamples/sample1.cc_Z9FactorialiboolFactorial_Z7IsPrimei/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0GCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ*(00dAƒM ÃB G ÃI CÃ.symtab.strtab.shstrtab.text.data.bss.text.unlikely.rel.debug_info.debug_abbrev.debug_loc.rel.debug_aranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame@”!Ô'Ô,Ô?ÔŅ; < °KĨ|Y!íh d ė  {.rw ü  ‡0 Ø’0x-›Ĩ¯¨XĢ  š   &ņ˙    *0dsample1.cc_Z9Factoriali_Z7IsPrimei    ! & , 4KPY chyˆ Ž –­˛ÃĖ 6 4dlt-daemon-2.18.6/gtest-1.7.0/samples/sample10_unittest.cc000066400000000000000000000116751377520261000227740ustar00rootroot00000000000000// Copyright 2009 Google Inc. All Rights Reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // This sample shows how to use Google Test listener API to implement // a primitive leak checker. #include #include #include "gtest/gtest.h" using ::testing::EmptyTestEventListener; using ::testing::InitGoogleTest; using ::testing::Test; using ::testing::TestCase; using ::testing::TestEventListeners; using ::testing::TestInfo; using ::testing::TestPartResult; using ::testing::UnitTest; namespace { // We will track memory used by this class. class Water { public: // Normal Water declarations go here. // operator new and operator delete help us control water allocation. void* operator new(size_t allocation_size) { allocated_++; return malloc(allocation_size); } void operator delete(void* block, size_t /* allocation_size */) { allocated_--; free(block); } static int allocated() { return allocated_; } private: static int allocated_; }; int Water::allocated_ = 0; // This event listener monitors how many Water objects are created and // destroyed by each test, and reports a failure if a test leaks some Water // objects. It does this by comparing the number of live Water objects at // the beginning of a test and at the end of a test. class LeakChecker : public EmptyTestEventListener { private: // Called before a test starts. virtual void OnTestStart(const TestInfo& /* test_info */) { initially_allocated_ = Water::allocated(); } // Called after a test ends. virtual void OnTestEnd(const TestInfo& /* test_info */) { int difference = Water::allocated() - initially_allocated_; // You can generate a failure in any event handler except // OnTestPartResult. Just use an appropriate Google Test assertion to do // it. EXPECT_LE(difference, 0) << "Leaked " << difference << " unit(s) of Water!"; } int initially_allocated_; }; TEST(ListenersTest, DoesNotLeak) { Water* water = new Water; delete water; } // This should fail when the --check_for_leaks command line flag is // specified. TEST(ListenersTest, LeaksWater) { Water* water = new Water; EXPECT_TRUE(water != NULL); } } // namespace int main(int argc, char **argv) { InitGoogleTest(&argc, argv); bool check_for_leaks = false; if (argc > 1 && strcmp(argv[1], "--check_for_leaks") == 0 ) check_for_leaks = true; else printf("%s\n", "Run this program with --check_for_leaks to enable " "custom leak checking in the tests."); // If we are given the --check_for_leaks command line flag, installs the // leak checker. if (check_for_leaks) { TestEventListeners& listeners = UnitTest::GetInstance()->listeners(); // Adds the leak checker to the end of the test event listener list, // after the default text output printer and the default XML report // generator. // // The order is important - it ensures that failures generated in the // leak checker's OnTestEnd() method are processed by the text and XML // printers *before* their OnTestEnd() methods are called, such that // they are attributed to the right test. Remember that a listener // receives an OnXyzStart event *after* listeners preceding it in the // list received that event, and receives an OnXyzEnd event *before* // listeners preceding it. // // We don't need to worry about deleting the new listener later, as // Google Test will do it. listeners.Append(new LeakChecker); } return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/samples/sample1_unittest.cc000066400000000000000000000120111377520261000226750ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // A sample program demonstrating using Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) // This sample shows how to write a simple unit test for a function, // using Google C++ testing framework. // // Writing a unit test using Google C++ testing framework is easy as 1-2-3: // Step 1. Include necessary header files such that the stuff your // test logic needs is declared. // // Don't forget gtest.h, which declares the testing framework. #include #include "sample1.h" #include "gtest/gtest.h" // Step 2. Use the TEST macro to define your tests. // // TEST has two parameters: the test case name and the test name. // After using the macro, you should define your test logic between a // pair of braces. You can use a bunch of macros to indicate the // success or failure of a test. EXPECT_TRUE and EXPECT_EQ are // examples of such macros. For a complete list, see gtest.h. // // // // In Google Test, tests are grouped into test cases. This is how we // keep test code organized. You should put logically related tests // into the same test case. // // The test case name and the test name should both be valid C++ // identifiers. And you should not use underscore (_) in the names. // // Google Test guarantees that each test you define is run exactly // once, but it makes no guarantee on the order the tests are // executed. Therefore, you should write your tests in such a way // that their results don't depend on their order. // // // Tests Factorial(). // Tests factorial of negative numbers. TEST(FactorialTest, Negative) { // This test is named "Negative", and belongs to the "FactorialTest" // test case. EXPECT_EQ(1, Factorial(-5)); EXPECT_EQ(1, Factorial(-1)); EXPECT_GT(Factorial(-10), 0); // // // EXPECT_EQ(expected, actual) is the same as // // EXPECT_TRUE((expected) == (actual)) // // except that it will print both the expected value and the actual // value when the assertion fails. This is very helpful for // debugging. Therefore in this case EXPECT_EQ is preferred. // // On the other hand, EXPECT_TRUE accepts any Boolean expression, // and is thus more general. // // } // Tests factorial of 0. TEST(FactorialTest, Zero) { EXPECT_EQ(1, Factorial(0)); } // Tests factorial of positive numbers. TEST(FactorialTest, Positive) { EXPECT_EQ(1, Factorial(1)); EXPECT_EQ(2, Factorial(2)); EXPECT_EQ(6, Factorial(3)); EXPECT_EQ(40320, Factorial(8)); } // Tests IsPrime() // Tests negative input. TEST(IsPrimeTest, Negative) { // This test belongs to the IsPrimeTest test case. EXPECT_FALSE(IsPrime(-1)); EXPECT_FALSE(IsPrime(-2)); EXPECT_FALSE(IsPrime(INT_MIN)); } // Tests some trivial cases. TEST(IsPrimeTest, Trivial) { EXPECT_FALSE(IsPrime(0)); EXPECT_FALSE(IsPrime(1)); EXPECT_TRUE(IsPrime(2)); EXPECT_TRUE(IsPrime(3)); } // Tests positive input. TEST(IsPrimeTest, Positive) { EXPECT_FALSE(IsPrime(4)); EXPECT_TRUE(IsPrime(5)); EXPECT_FALSE(IsPrime(6)); EXPECT_TRUE(IsPrime(23)); } // Step 3. Call RUN_ALL_TESTS() in main(). // // We do this by linking in src/gtest_main.cc file, which consists of // a main() function which calls RUN_ALL_TESTS() for us. // // This runs all the tests you've defined, prints the result, and // returns 0 if successful, or 1 otherwise. // // Did you notice that we didn't register the tests? The // RUN_ALL_TESTS() macro magically knows about all the tests we // defined. Isn't this convenient? dlt-daemon-2.18.6/gtest-1.7.0/samples/sample2.cc000066400000000000000000000043721377520261000207520ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // A sample program demonstrating using Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) #include "sample2.h" #include // Clones a 0-terminated C string, allocating memory using new. const char* MyString::CloneCString(const char* a_c_string) { if (a_c_string == NULL) return NULL; const size_t len = strlen(a_c_string); char* const clone = new char[ len + 1 ]; memcpy(clone, a_c_string, len + 1); return clone; } // Sets the 0-terminated C string this MyString object // represents. void MyString::Set(const char* a_c_string) { // Makes sure this works when c_string == c_string_ const char* const temp = MyString::CloneCString(a_c_string); delete[] c_string_; c_string_ = temp; } dlt-daemon-2.18.6/gtest-1.7.0/samples/sample2.h000066400000000000000000000056761377520261000206240ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // A sample program demonstrating using Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) #ifndef GTEST_SAMPLES_SAMPLE2_H_ #define GTEST_SAMPLES_SAMPLE2_H_ #include // A simple string class. class MyString { private: const char* c_string_; const MyString& operator=(const MyString& rhs); public: // Clones a 0-terminated C string, allocating memory using new. static const char* CloneCString(const char* a_c_string); //////////////////////////////////////////////////////////// // // C'tors // The default c'tor constructs a NULL string. MyString() : c_string_(NULL) {} // Constructs a MyString by cloning a 0-terminated C string. explicit MyString(const char* a_c_string) : c_string_(NULL) { Set(a_c_string); } // Copy c'tor MyString(const MyString& string) : c_string_(NULL) { Set(string.c_string_); } //////////////////////////////////////////////////////////// // // D'tor. MyString is intended to be a final class, so the d'tor // doesn't need to be virtual. ~MyString() { delete[] c_string_; } // Gets the 0-terminated C string this MyString object represents. const char* c_string() const { return c_string_; } size_t Length() const { return c_string_ == NULL ? 0 : strlen(c_string_); } // Sets the 0-terminated C string this MyString object represents. void Set(const char* c_string); }; #endif // GTEST_SAMPLES_SAMPLE2_H_ dlt-daemon-2.18.6/gtest-1.7.0/samples/sample2.lo000066400000000000000000000004571377520261000207770ustar00rootroot00000000000000# samples/sample2.lo - a libtool object file # Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 # # Please DO NOT delete this file! # It is necessary for linking the library. # Name of the PIC object. pic_object='.libs/sample2.o' # Name of the non-PIC object non_pic_object='sample2.o' dlt-daemon-2.18.6/gtest-1.7.0/samples/sample2.o000066400000000000000000000106201377520261000206140ustar00rootroot00000000000000ELF\ 4(WVS‹|$…˙t-ƒė Wčü˙˙˙p‰4$čü˙˙˙ƒÄ ‰ÃVWPčü˙˙˙ƒÄ‰Ø[^_Ív1Āëõt&VSƒė‹\$˙t$ čü˙˙˙‹ƒÄ‰Æ…Ōt ƒė Rčü˙˙˙ƒÄ‰3ƒÄ[^ÃÄu¨q)Ô0}Ÿ2intRWčE)q0+L d,iq˜ | q ˙0EL˛ L E7ÂČ |E:Øã | L E?ķū | q ×G | ENJL17 ‚nLĀ%OU ‚SetQŠe | Lw^^w˜'<œėW'Llen*ė:+ņ?e{,”%öWU3@1œ[ô[‘W3L‘I"@5`]Rˆf¸|LíŽ%{ Lų’’ 0b’ą ’ ą 7ˇ ! á ’% : ; I$ > $ >  I&I : ;  : ; I8 .?: ; nI<d I4 I .?: ; nI2 < .?: ; 2 <d.?: ; 2 <cd.?: ; nI2 <d.?: ; n2 <d I.G: ; @—B: ; I U4: ; I4: ; I‰‚1.G: ; @d—BI4: ; I .?: ;I<.?nI4< .?I4< &!.?n4<5‘5<WP1vŸ$+P+1SYePepVpq‘q18<ēˆû samples/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/includesample2.ccsample2.hstddef.hstring.h& \ ž ¨­ ŧÁ ËĐŲâ " 09 CHQf | € • š Ŋ • ddlt-daemon-2.18.6/gtest-1.7.0/samples/sample2_unittest.cc000066400000000000000000000075261377520261000227150ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // A sample program demonstrating using Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) // This sample shows how to write a more complex unit test for a class // that has multiple member functions. // // Usually, it's a good idea to have one test for each method in your // class. You don't have to do that exactly, but it helps to keep // your tests organized. You may also throw in additional tests as // needed. #include "sample2.h" #include "gtest/gtest.h" // In this example, we test the MyString class (a simple string). // Tests the default c'tor. TEST(MyString, DefaultConstructor) { const MyString s; // Asserts that s.c_string() returns NULL. // // // // If we write NULL instead of // // static_cast(NULL) // // in this assertion, it will generate a warning on gcc 3.4. The // reason is that EXPECT_EQ needs to know the types of its // arguments in order to print them when it fails. Since NULL is // #defined as 0, the compiler will use the formatter function for // int to print it. However, gcc thinks that NULL should be used as // a pointer, not an int, and therefore complains. // // The root of the problem is C++'s lack of distinction between the // integer number 0 and the null pointer constant. Unfortunately, // we have to live with this fact. // // EXPECT_STREQ(NULL, s.c_string()); EXPECT_EQ(0u, s.Length()); } const char kHelloString[] = "Hello, world!"; // Tests the c'tor that accepts a C string. TEST(MyString, ConstructorFromCString) { const MyString s(kHelloString); EXPECT_EQ(0, strcmp(s.c_string(), kHelloString)); EXPECT_EQ(sizeof(kHelloString)/sizeof(kHelloString[0]) - 1, s.Length()); } // Tests the copy c'tor. TEST(MyString, CopyConstructor) { const MyString s1(kHelloString); const MyString s2 = s1; EXPECT_EQ(0, strcmp(s2.c_string(), kHelloString)); } // Tests the Set method. TEST(MyString, Set) { MyString s; s.Set(kHelloString); EXPECT_EQ(0, strcmp(s.c_string(), kHelloString)); // Set should work when the input pointer is the same as the one // already in the MyString object. s.Set(s.c_string()); EXPECT_EQ(0, strcmp(s.c_string(), kHelloString)); // Can we set the MyString to NULL? s.Set(NULL); EXPECT_STREQ(NULL, s.c_string()); } dlt-daemon-2.18.6/gtest-1.7.0/samples/sample3-inl.h000066400000000000000000000123651377520261000213760ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // A sample program demonstrating using Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) #ifndef GTEST_SAMPLES_SAMPLE3_INL_H_ #define GTEST_SAMPLES_SAMPLE3_INL_H_ #include // Queue is a simple queue implemented as a singled-linked list. // // The element type must support copy constructor. template // E is the element type class Queue; // QueueNode is a node in a Queue, which consists of an element of // type E and a pointer to the next node. template // E is the element type class QueueNode { friend class Queue; public: // Gets the element in this node. const E& element() const { return element_; } // Gets the next node in the queue. QueueNode* next() { return next_; } const QueueNode* next() const { return next_; } private: // Creates a node with a given element value. The next pointer is // set to NULL. explicit QueueNode(const E& an_element) : element_(an_element), next_(NULL) {} // We disable the default assignment operator and copy c'tor. const QueueNode& operator = (const QueueNode&); QueueNode(const QueueNode&); E element_; QueueNode* next_; }; template // E is the element type. class Queue { public: // Creates an empty queue. Queue() : head_(NULL), last_(NULL), size_(0) {} // D'tor. Clears the queue. ~Queue() { Clear(); } // Clears the queue. void Clear() { if (size_ > 0) { // 1. Deletes every node. QueueNode* node = head_; QueueNode* next = node->next(); for (; ;) { delete node; node = next; if (node == NULL) break; next = node->next(); } // 2. Resets the member variables. head_ = last_ = NULL; size_ = 0; } } // Gets the number of elements. size_t Size() const { return size_; } // Gets the first element of the queue, or NULL if the queue is empty. QueueNode* Head() { return head_; } const QueueNode* Head() const { return head_; } // Gets the last element of the queue, or NULL if the queue is empty. QueueNode* Last() { return last_; } const QueueNode* Last() const { return last_; } // Adds an element to the end of the queue. A copy of the element is // created using the copy constructor, and then stored in the queue. // Changes made to the element in the queue doesn't affect the source // object, and vice versa. void Enqueue(const E& element) { QueueNode* new_node = new QueueNode(element); if (size_ == 0) { head_ = last_ = new_node; size_ = 1; } else { last_->next_ = new_node; last_ = new_node; size_++; } } // Removes the head of the queue and returns it. Returns NULL if // the queue is empty. E* Dequeue() { if (size_ == 0) { return NULL; } const QueueNode* const old_head = head_; head_ = head_->next_; size_--; if (size_ == 0) { last_ = NULL; } E* element = new E(old_head->element()); delete old_head; return element; } // Applies a function/functor on each element of the queue, and // returns the result in a new queue. The original queue is not // affected. template Queue* Map(F function) const { Queue* new_queue = new Queue(); for (const QueueNode* node = head_; node != NULL; node = node->next_) { new_queue->Enqueue(function(node->element())); } return new_queue; } private: QueueNode* head_; // The first node of the queue. QueueNode* last_; // The last node of the queue. size_t size_; // The number of elements in the queue. // We disallow copying a queue. Queue(const Queue&); const Queue& operator = (const Queue&); }; #endif // GTEST_SAMPLES_SAMPLE3_INL_H_ dlt-daemon-2.18.6/gtest-1.7.0/samples/sample3_unittest.cc000066400000000000000000000123471377520261000227130ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // A sample program demonstrating using Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) // In this example, we use a more advanced feature of Google Test called // test fixture. // // A test fixture is a place to hold objects and functions shared by // all tests in a test case. Using a test fixture avoids duplicating // the test code necessary to initialize and cleanup those common // objects for each test. It is also useful for defining sub-routines // that your tests need to invoke a lot. // // // // The tests share the test fixture in the sense of code sharing, not // data sharing. Each test is given its own fresh copy of the // fixture. You cannot expect the data modified by one test to be // passed on to another test, which is a bad idea. // // The reason for this design is that tests should be independent and // repeatable. In particular, a test should not fail as the result of // another test's failure. If one test depends on info produced by // another test, then the two tests should really be one big test. // // The macros for indicating the success/failure of a test // (EXPECT_TRUE, FAIL, etc) need to know what the current test is // (when Google Test prints the test result, it tells you which test // each failure belongs to). Technically, these macros invoke a // member function of the Test class. Therefore, you cannot use them // in a global function. That's why you should put test sub-routines // in a test fixture. // // #include "sample3-inl.h" #include "gtest/gtest.h" // To use a test fixture, derive a class from testing::Test. class QueueTest : public testing::Test { protected: // You should make the members protected s.t. they can be // accessed from sub-classes. // virtual void SetUp() will be called before each test is run. You // should define it if you need to initialize the varaibles. // Otherwise, this can be skipped. virtual void SetUp() { q1_.Enqueue(1); q2_.Enqueue(2); q2_.Enqueue(3); } // virtual void TearDown() will be called after each test is run. // You should define it if there is cleanup work to do. Otherwise, // you don't have to provide it. // // virtual void TearDown() { // } // A helper function that some test uses. static int Double(int n) { return 2*n; } // A helper function for testing Queue::Map(). void MapTester(const Queue * q) { // Creates a new queue, where each element is twice as big as the // corresponding one in q. const Queue * const new_q = q->Map(Double); // Verifies that the new queue has the same size as q. ASSERT_EQ(q->Size(), new_q->Size()); // Verifies the relationship between the elements of the two queues. for ( const QueueNode * n1 = q->Head(), * n2 = new_q->Head(); n1 != NULL; n1 = n1->next(), n2 = n2->next() ) { EXPECT_EQ(2 * n1->element(), n2->element()); } delete new_q; } // Declares the variables your tests want to use. Queue q0_; Queue q1_; Queue q2_; }; // When you have a test fixture, you define a test using TEST_F // instead of TEST. // Tests the default c'tor. TEST_F(QueueTest, DefaultConstructor) { // You can access data in the test fixture here. EXPECT_EQ(0u, q0_.Size()); } // Tests Dequeue(). TEST_F(QueueTest, Dequeue) { int * n = q0_.Dequeue(); EXPECT_TRUE(n == NULL); n = q1_.Dequeue(); ASSERT_TRUE(n != NULL); EXPECT_EQ(1, *n); EXPECT_EQ(0u, q1_.Size()); delete n; n = q2_.Dequeue(); ASSERT_TRUE(n != NULL); EXPECT_EQ(2, *n); EXPECT_EQ(1u, q2_.Size()); delete n; } // Tests the Queue::Map() function. TEST_F(QueueTest, Map) { MapTester(&q0_); MapTester(&q1_); MapTester(&q2_); } dlt-daemon-2.18.6/gtest-1.7.0/samples/sample4.cc000066400000000000000000000036071377520261000207540ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // A sample program demonstrating using Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) #include #include "sample4.h" // Returns the current counter value, and increments it. int Counter::Increment() { return counter_++; } // Prints the current counter value to STDOUT. void Counter::Print() const { printf("%d", counter_); } dlt-daemon-2.18.6/gtest-1.7.0/samples/sample4.h000066400000000000000000000040431377520261000206110ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // A sample program demonstrating using Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) #ifndef GTEST_SAMPLES_SAMPLE4_H_ #define GTEST_SAMPLES_SAMPLE4_H_ // A simple monotonic counter. class Counter { private: int counter_; public: // Creates a counter that starts at 0. Counter() : counter_(0) {} // Returns the current counter value, and increments it. int Increment(); // Prints the current counter value to STDOUT. void Print() const; }; #endif // GTEST_SAMPLES_SAMPLE4_H_ dlt-daemon-2.18.6/gtest-1.7.0/samples/sample4.lo000066400000000000000000000004571377520261000210010ustar00rootroot00000000000000# samples/sample4.lo - a libtool object file # Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 # # Please DO NOT delete this file! # It is necessary for linking the library. # Name of the PIC object. pic_object='.libs/sample4.o' # Name of the non-PIC object non_pic_object='sample4.o' dlt-daemon-2.18.6/gtest-1.7.0/samples/sample4.o000066400000000000000000000107401377520261000206210ustar00rootroot00000000000000ELF  4(‹T$‹H‰ Ít&ƒė‹D$˙0hčü˙˙˙ƒÄÃ%d›Š§w'8Ô0!đhôū.intf  7a6ƒ…Ā,„o?Ļ{į”õ-öZ[û Šü iũ  Cū X˙    t    Ņ $ E ( ! , e0 > k4 ß Z8 [Z< z@ Đ>D ÂLF 9qG ēH H%ŒL †.žT /žX ”0ž\ ›1ž` ĸ2%d c4Zh R6‡l š.  e€ĄeáĸkÜĻZ4­ ρ —- Ļ— —' ĻP&š(ZP,ĘĐ—/ZčîĄ2įū ĸ ĸĐ' œ/<ü<‘ î,œZpüp‘#‹ U¨kŠkÉjZ—% : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ &I : ; .?: ; 2 <dI4.?: ; nI2 <d.?: ; n2 <d.G: ; @d—BI4‰‚14: ; I?<.?: ;I<I'Ɲû samples/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/include/bits/usr/includesample4.ccstddef.htypes.hlibio.hsample4.hstdio.h&Ku[=ķ_IO_buf_end__quad_t_old_offset_IO_save_endshort intsize_tsizetype_offsetCounter_IO_write_ptrlong long int_IO_buf_base_markers_IO_read_endIncrementPrintsamples/sample4.cc_locklong intprintf_cur_column_pos_sbuf_IO_FILEunsigned charsigned charlong long unsigned intunsigned int_IO_marker_shortbuf_IO_write_base_unused2_IO_read_ptrshort unsigned intchar_next__pad1__pad2__pad3__pad4__pad5GNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2long unsigned int_ZN7Counter9IncrementEv_IO_write_end__off64_t__off_t_chain_IO_backup_basestdin_flags2_mode_IO_read_base/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0counter__vtable_offset_IO_save_base_fileno_ZNK7Counter5PrintEvthis_flagsstdout_IO_lock_tGCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ 0CFE H.symtab.strtab.shstrtab.rel.text.data.bss.text.unlikely.rodata.str1.1.rel.debug_info.debug_abbrev.rel.debug_aranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame@' p%g+g0h?2hRkŸN €8^ Qp[ l ¸ ƒ{Î Č 0Iš0c -Ŗ ˇ Lŗ ĐÜ Á  0@ņ˙    $9sample4.cc_ZN7Counter9IncrementEv_ZNK7Counter5PrintEvprintf    ! & 3 : A H O V d k p { ˆ  š Š Ž ē Æ Ō Ū ę ö    ) 6 C P ] j w „ ‘ ž Ģ ¸ Å Ō ß ė ų    . 5 A M Y Ŗ ¯ ģ Ņ × ī õ 0 H[ gv  Œ ŧ 4dlt-daemon-2.18.6/gtest-1.7.0/samples/sample4_unittest.cc000066400000000000000000000035651377520261000227160ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #include "gtest/gtest.h" #include "sample4.h" // Tests the Increment() method. TEST(Counter, Increment) { Counter c; // EXPECT_EQ() evaluates its arguments exactly once, so they // can have side effects. EXPECT_EQ(0, c.Increment()); EXPECT_EQ(1, c.Increment()); EXPECT_EQ(2, c.Increment()); } dlt-daemon-2.18.6/gtest-1.7.0/samples/sample5_unittest.cc000066400000000000000000000146761377520261000227240ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // This sample teaches how to reuse a test fixture in multiple test // cases by deriving sub-fixtures from it. // // When you define a test fixture, you specify the name of the test // case that will use this fixture. Therefore, a test fixture can // be used by only one test case. // // Sometimes, more than one test cases may want to use the same or // slightly different test fixtures. For example, you may want to // make sure that all tests for a GUI library don't leak important // system resources like fonts and brushes. In Google Test, you do // this by putting the shared logic in a super (as in "super class") // test fixture, and then have each test case use a fixture derived // from this super fixture. #include #include #include "sample3-inl.h" #include "gtest/gtest.h" #include "sample1.h" // In this sample, we want to ensure that every test finishes within // ~5 seconds. If a test takes longer to run, we consider it a // failure. // // We put the code for timing a test in a test fixture called // "QuickTest". QuickTest is intended to be the super fixture that // other fixtures derive from, therefore there is no test case with // the name "QuickTest". This is OK. // // Later, we will derive multiple test fixtures from QuickTest. class QuickTest : public testing::Test { protected: // Remember that SetUp() is run immediately before a test starts. // This is a good place to record the start time. virtual void SetUp() { start_time_ = time(NULL); } // TearDown() is invoked immediately after a test finishes. Here we // check if the test was too slow. virtual void TearDown() { // Gets the time when the test finishes const time_t end_time = time(NULL); // Asserts that the test took no more than ~5 seconds. Did you // know that you can use assertions in SetUp() and TearDown() as // well? EXPECT_TRUE(end_time - start_time_ <= 5) << "The test took too long."; } // The UTC time (in seconds) when the test starts time_t start_time_; }; // We derive a fixture named IntegerFunctionTest from the QuickTest // fixture. All tests using this fixture will be automatically // required to be quick. class IntegerFunctionTest : public QuickTest { // We don't need any more logic than already in the QuickTest fixture. // Therefore the body is empty. }; // Now we can write tests in the IntegerFunctionTest test case. // Tests Factorial() TEST_F(IntegerFunctionTest, Factorial) { // Tests factorial of negative numbers. EXPECT_EQ(1, Factorial(-5)); EXPECT_EQ(1, Factorial(-1)); EXPECT_GT(Factorial(-10), 0); // Tests factorial of 0. EXPECT_EQ(1, Factorial(0)); // Tests factorial of positive numbers. EXPECT_EQ(1, Factorial(1)); EXPECT_EQ(2, Factorial(2)); EXPECT_EQ(6, Factorial(3)); EXPECT_EQ(40320, Factorial(8)); } // Tests IsPrime() TEST_F(IntegerFunctionTest, IsPrime) { // Tests negative input. EXPECT_FALSE(IsPrime(-1)); EXPECT_FALSE(IsPrime(-2)); EXPECT_FALSE(IsPrime(INT_MIN)); // Tests some trivial cases. EXPECT_FALSE(IsPrime(0)); EXPECT_FALSE(IsPrime(1)); EXPECT_TRUE(IsPrime(2)); EXPECT_TRUE(IsPrime(3)); // Tests positive input. EXPECT_FALSE(IsPrime(4)); EXPECT_TRUE(IsPrime(5)); EXPECT_FALSE(IsPrime(6)); EXPECT_TRUE(IsPrime(23)); } // The next test case (named "QueueTest") also needs to be quick, so // we derive another fixture from QuickTest. // // The QueueTest test fixture has some logic and shared objects in // addition to what's in QuickTest already. We define the additional // stuff inside the body of the test fixture, as usual. class QueueTest : public QuickTest { protected: virtual void SetUp() { // First, we need to set up the super fixture (QuickTest). QuickTest::SetUp(); // Second, some additional setup for this fixture. q1_.Enqueue(1); q2_.Enqueue(2); q2_.Enqueue(3); } // By default, TearDown() inherits the behavior of // QuickTest::TearDown(). As we have no additional cleaning work // for QueueTest, we omit it here. // // virtual void TearDown() { // QuickTest::TearDown(); // } Queue q0_; Queue q1_; Queue q2_; }; // Now, let's write tests using the QueueTest fixture. // Tests the default constructor. TEST_F(QueueTest, DefaultConstructor) { EXPECT_EQ(0u, q0_.Size()); } // Tests Dequeue(). TEST_F(QueueTest, Dequeue) { int* n = q0_.Dequeue(); EXPECT_TRUE(n == NULL); n = q1_.Dequeue(); EXPECT_TRUE(n != NULL); EXPECT_EQ(1, *n); EXPECT_EQ(0u, q1_.Size()); delete n; n = q2_.Dequeue(); EXPECT_TRUE(n != NULL); EXPECT_EQ(2, *n); EXPECT_EQ(1u, q2_.Size()); delete n; } // If necessary, you can derive further test fixtures from a derived // fixture itself. For example, you can derive another fixture from // QueueTest. Google Test imposes no limit on how deep the hierarchy // can be. In practice, however, you probably don't want it to be too // deep as to be confusing. dlt-daemon-2.18.6/gtest-1.7.0/samples/sample6_unittest.cc000066400000000000000000000214351377520261000227140ustar00rootroot00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // This sample shows how to test common properties of multiple // implementations of the same interface (aka interface tests). // The interface and its implementations are in this header. #include "prime_tables.h" #include "gtest/gtest.h" // First, we define some factory functions for creating instances of // the implementations. You may be able to skip this step if all your // implementations can be constructed the same way. template PrimeTable* CreatePrimeTable(); template <> PrimeTable* CreatePrimeTable() { return new OnTheFlyPrimeTable; } template <> PrimeTable* CreatePrimeTable() { return new PreCalculatedPrimeTable(10000); } // Then we define a test fixture class template. template class PrimeTableTest : public testing::Test { protected: // The ctor calls the factory function to create a prime table // implemented by T. PrimeTableTest() : table_(CreatePrimeTable()) {} virtual ~PrimeTableTest() { delete table_; } // Note that we test an implementation via the base interface // instead of the actual implementation class. This is important // for keeping the tests close to the real world scenario, where the // implementation is invoked via the base interface. It avoids // got-yas where the implementation class has a method that shadows // a method with the same name (but slightly different argument // types) in the base interface, for example. PrimeTable* const table_; }; #if GTEST_HAS_TYPED_TEST using testing::Types; // Google Test offers two ways for reusing tests for different types. // The first is called "typed tests". You should use it if you // already know *all* the types you are gonna exercise when you write // the tests. // To write a typed test case, first use // // TYPED_TEST_CASE(TestCaseName, TypeList); // // to declare it and specify the type parameters. As with TEST_F, // TestCaseName must match the test fixture name. // The list of types we want to test. typedef Types Implementations; TYPED_TEST_CASE(PrimeTableTest, Implementations); // Then use TYPED_TEST(TestCaseName, TestName) to define a typed test, // similar to TEST_F. TYPED_TEST(PrimeTableTest, ReturnsFalseForNonPrimes) { // Inside the test body, you can refer to the type parameter by // TypeParam, and refer to the fixture class by TestFixture. We // don't need them in this example. // Since we are in the template world, C++ requires explicitly // writing 'this->' when referring to members of the fixture class. // This is something you have to learn to live with. EXPECT_FALSE(this->table_->IsPrime(-5)); EXPECT_FALSE(this->table_->IsPrime(0)); EXPECT_FALSE(this->table_->IsPrime(1)); EXPECT_FALSE(this->table_->IsPrime(4)); EXPECT_FALSE(this->table_->IsPrime(6)); EXPECT_FALSE(this->table_->IsPrime(100)); } TYPED_TEST(PrimeTableTest, ReturnsTrueForPrimes) { EXPECT_TRUE(this->table_->IsPrime(2)); EXPECT_TRUE(this->table_->IsPrime(3)); EXPECT_TRUE(this->table_->IsPrime(5)); EXPECT_TRUE(this->table_->IsPrime(7)); EXPECT_TRUE(this->table_->IsPrime(11)); EXPECT_TRUE(this->table_->IsPrime(131)); } TYPED_TEST(PrimeTableTest, CanGetNextPrime) { EXPECT_EQ(2, this->table_->GetNextPrime(0)); EXPECT_EQ(3, this->table_->GetNextPrime(2)); EXPECT_EQ(5, this->table_->GetNextPrime(3)); EXPECT_EQ(7, this->table_->GetNextPrime(5)); EXPECT_EQ(11, this->table_->GetNextPrime(7)); EXPECT_EQ(131, this->table_->GetNextPrime(128)); } // That's it! Google Test will repeat each TYPED_TEST for each type // in the type list specified in TYPED_TEST_CASE. Sit back and be // happy that you don't have to define them multiple times. #endif // GTEST_HAS_TYPED_TEST #if GTEST_HAS_TYPED_TEST_P using testing::Types; // Sometimes, however, you don't yet know all the types that you want // to test when you write the tests. For example, if you are the // author of an interface and expect other people to implement it, you // might want to write a set of tests to make sure each implementation // conforms to some basic requirements, but you don't know what // implementations will be written in the future. // // How can you write the tests without committing to the type // parameters? That's what "type-parameterized tests" can do for you. // It is a bit more involved than typed tests, but in return you get a // test pattern that can be reused in many contexts, which is a big // win. Here's how you do it: // First, define a test fixture class template. Here we just reuse // the PrimeTableTest fixture defined earlier: template class PrimeTableTest2 : public PrimeTableTest { }; // Then, declare the test case. The argument is the name of the test // fixture, and also the name of the test case (as usual). The _P // suffix is for "parameterized" or "pattern". TYPED_TEST_CASE_P(PrimeTableTest2); // Next, use TYPED_TEST_P(TestCaseName, TestName) to define a test, // similar to what you do with TEST_F. TYPED_TEST_P(PrimeTableTest2, ReturnsFalseForNonPrimes) { EXPECT_FALSE(this->table_->IsPrime(-5)); EXPECT_FALSE(this->table_->IsPrime(0)); EXPECT_FALSE(this->table_->IsPrime(1)); EXPECT_FALSE(this->table_->IsPrime(4)); EXPECT_FALSE(this->table_->IsPrime(6)); EXPECT_FALSE(this->table_->IsPrime(100)); } TYPED_TEST_P(PrimeTableTest2, ReturnsTrueForPrimes) { EXPECT_TRUE(this->table_->IsPrime(2)); EXPECT_TRUE(this->table_->IsPrime(3)); EXPECT_TRUE(this->table_->IsPrime(5)); EXPECT_TRUE(this->table_->IsPrime(7)); EXPECT_TRUE(this->table_->IsPrime(11)); EXPECT_TRUE(this->table_->IsPrime(131)); } TYPED_TEST_P(PrimeTableTest2, CanGetNextPrime) { EXPECT_EQ(2, this->table_->GetNextPrime(0)); EXPECT_EQ(3, this->table_->GetNextPrime(2)); EXPECT_EQ(5, this->table_->GetNextPrime(3)); EXPECT_EQ(7, this->table_->GetNextPrime(5)); EXPECT_EQ(11, this->table_->GetNextPrime(7)); EXPECT_EQ(131, this->table_->GetNextPrime(128)); } // Type-parameterized tests involve one extra step: you have to // enumerate the tests you defined: REGISTER_TYPED_TEST_CASE_P( PrimeTableTest2, // The first argument is the test case name. // The rest of the arguments are the test names. ReturnsFalseForNonPrimes, ReturnsTrueForPrimes, CanGetNextPrime); // At this point the test pattern is done. However, you don't have // any real test yet as you haven't said which types you want to run // the tests with. // To turn the abstract test pattern into real tests, you instantiate // it with a list of types. Usually the test pattern will be defined // in a .h file, and anyone can #include and instantiate it. You can // even instantiate it more than once in the same program. To tell // different instances apart, you give each of them a name, which will // become part of the test case name and can be used in test filters. // The list of types we want to test. Note that it doesn't have to be // defined at the time we write the TYPED_TEST_P()s. typedef Types PrimeTableImplementations; INSTANTIATE_TYPED_TEST_CASE_P(OnTheFlyAndPreCalculated, // Instance name PrimeTableTest2, // Test case name PrimeTableImplementations); // Type list #endif // GTEST_HAS_TYPED_TEST_P dlt-daemon-2.18.6/gtest-1.7.0/samples/sample7_unittest.cc000066400000000000000000000117531377520261000227170ustar00rootroot00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // This sample shows how to test common properties of multiple // implementations of an interface (aka interface tests) using // value-parameterized tests. Each test in the test case has // a parameter that is an interface pointer to an implementation // tested. // The interface and its implementations are in this header. #include "prime_tables.h" #include "gtest/gtest.h" #if GTEST_HAS_PARAM_TEST using ::testing::TestWithParam; using ::testing::Values; // As a general rule, to prevent a test from affecting the tests that come // after it, you should create and destroy the tested objects for each test // instead of reusing them. In this sample we will define a simple factory // function for PrimeTable objects. We will instantiate objects in test's // SetUp() method and delete them in TearDown() method. typedef PrimeTable* CreatePrimeTableFunc(); PrimeTable* CreateOnTheFlyPrimeTable() { return new OnTheFlyPrimeTable(); } template PrimeTable* CreatePreCalculatedPrimeTable() { return new PreCalculatedPrimeTable(max_precalculated); } // Inside the test body, fixture constructor, SetUp(), and TearDown() you // can refer to the test parameter by GetParam(). In this case, the test // parameter is a factory function which we call in fixture's SetUp() to // create and store an instance of PrimeTable. class PrimeTableTest : public TestWithParam { public: virtual ~PrimeTableTest() { delete table_; } virtual void SetUp() { table_ = (*GetParam())(); } virtual void TearDown() { delete table_; table_ = NULL; } protected: PrimeTable* table_; }; TEST_P(PrimeTableTest, ReturnsFalseForNonPrimes) { EXPECT_FALSE(table_->IsPrime(-5)); EXPECT_FALSE(table_->IsPrime(0)); EXPECT_FALSE(table_->IsPrime(1)); EXPECT_FALSE(table_->IsPrime(4)); EXPECT_FALSE(table_->IsPrime(6)); EXPECT_FALSE(table_->IsPrime(100)); } TEST_P(PrimeTableTest, ReturnsTrueForPrimes) { EXPECT_TRUE(table_->IsPrime(2)); EXPECT_TRUE(table_->IsPrime(3)); EXPECT_TRUE(table_->IsPrime(5)); EXPECT_TRUE(table_->IsPrime(7)); EXPECT_TRUE(table_->IsPrime(11)); EXPECT_TRUE(table_->IsPrime(131)); } TEST_P(PrimeTableTest, CanGetNextPrime) { EXPECT_EQ(2, table_->GetNextPrime(0)); EXPECT_EQ(3, table_->GetNextPrime(2)); EXPECT_EQ(5, table_->GetNextPrime(3)); EXPECT_EQ(7, table_->GetNextPrime(5)); EXPECT_EQ(11, table_->GetNextPrime(7)); EXPECT_EQ(131, table_->GetNextPrime(128)); } // In order to run value-parameterized tests, you need to instantiate them, // or bind them to a list of values which will be used as test parameters. // You can instantiate them in a different translation module, or even // instantiate them several times. // // Here, we instantiate our tests with a list of two PrimeTable object // factory functions: INSTANTIATE_TEST_CASE_P( OnTheFlyAndPreCalculated, PrimeTableTest, Values(&CreateOnTheFlyPrimeTable, &CreatePreCalculatedPrimeTable<1000>)); #else // Google Test may not support value-parameterized tests with some // compilers. If we use conditional compilation to compile out all // code referring to the gtest_main library, MSVC linker will not link // that library at all and consequently complain about missing entry // point defined in that library (fatal error LNK1561: entry point // must be defined). This dummy test keeps gtest_main linked in. TEST(DummyTest, ValueParameterizedTestsAreNotSupportedOnThisPlatform) {} #endif // GTEST_HAS_PARAM_TEST dlt-daemon-2.18.6/gtest-1.7.0/samples/sample8_unittest.cc000066400000000000000000000154401377520261000227150ustar00rootroot00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // This sample shows how to test code relying on some global flag variables. // Combine() helps with generating all possible combinations of such flags, // and each test is given one combination as a parameter. // Use class definitions to test from this header. #include "prime_tables.h" #include "gtest/gtest.h" #if GTEST_HAS_COMBINE // Suppose we want to introduce a new, improved implementation of PrimeTable // which combines speed of PrecalcPrimeTable and versatility of // OnTheFlyPrimeTable (see prime_tables.h). Inside it instantiates both // PrecalcPrimeTable and OnTheFlyPrimeTable and uses the one that is more // appropriate under the circumstances. But in low memory conditions, it can be // told to instantiate without PrecalcPrimeTable instance at all and use only // OnTheFlyPrimeTable. class HybridPrimeTable : public PrimeTable { public: HybridPrimeTable(bool force_on_the_fly, int max_precalculated) : on_the_fly_impl_(new OnTheFlyPrimeTable), precalc_impl_(force_on_the_fly ? NULL : new PreCalculatedPrimeTable(max_precalculated)), max_precalculated_(max_precalculated) {} virtual ~HybridPrimeTable() { delete on_the_fly_impl_; delete precalc_impl_; } virtual bool IsPrime(int n) const { if (precalc_impl_ != NULL && n < max_precalculated_) return precalc_impl_->IsPrime(n); else return on_the_fly_impl_->IsPrime(n); } virtual int GetNextPrime(int p) const { int next_prime = -1; if (precalc_impl_ != NULL && p < max_precalculated_) next_prime = precalc_impl_->GetNextPrime(p); return next_prime != -1 ? next_prime : on_the_fly_impl_->GetNextPrime(p); } private: OnTheFlyPrimeTable* on_the_fly_impl_; PreCalculatedPrimeTable* precalc_impl_; int max_precalculated_; }; using ::testing::TestWithParam; using ::testing::Bool; using ::testing::Values; using ::testing::Combine; // To test all code paths for HybridPrimeTable we must test it with numbers // both within and outside PreCalculatedPrimeTable's capacity and also with // PreCalculatedPrimeTable disabled. We do this by defining fixture which will // accept different combinations of parameters for instantiating a // HybridPrimeTable instance. class PrimeTableTest : public TestWithParam< ::std::tr1::tuple > { protected: virtual void SetUp() { // This can be written as // // bool force_on_the_fly; // int max_precalculated; // tie(force_on_the_fly, max_precalculated) = GetParam(); // // once the Google C++ Style Guide allows use of ::std::tr1::tie. // bool force_on_the_fly = ::std::tr1::get<0>(GetParam()); int max_precalculated = ::std::tr1::get<1>(GetParam()); table_ = new HybridPrimeTable(force_on_the_fly, max_precalculated); } virtual void TearDown() { delete table_; table_ = NULL; } HybridPrimeTable* table_; }; TEST_P(PrimeTableTest, ReturnsFalseForNonPrimes) { // Inside the test body, you can refer to the test parameter by GetParam(). // In this case, the test parameter is a PrimeTable interface pointer which // we can use directly. // Please note that you can also save it in the fixture's SetUp() method // or constructor and use saved copy in the tests. EXPECT_FALSE(table_->IsPrime(-5)); EXPECT_FALSE(table_->IsPrime(0)); EXPECT_FALSE(table_->IsPrime(1)); EXPECT_FALSE(table_->IsPrime(4)); EXPECT_FALSE(table_->IsPrime(6)); EXPECT_FALSE(table_->IsPrime(100)); } TEST_P(PrimeTableTest, ReturnsTrueForPrimes) { EXPECT_TRUE(table_->IsPrime(2)); EXPECT_TRUE(table_->IsPrime(3)); EXPECT_TRUE(table_->IsPrime(5)); EXPECT_TRUE(table_->IsPrime(7)); EXPECT_TRUE(table_->IsPrime(11)); EXPECT_TRUE(table_->IsPrime(131)); } TEST_P(PrimeTableTest, CanGetNextPrime) { EXPECT_EQ(2, table_->GetNextPrime(0)); EXPECT_EQ(3, table_->GetNextPrime(2)); EXPECT_EQ(5, table_->GetNextPrime(3)); EXPECT_EQ(7, table_->GetNextPrime(5)); EXPECT_EQ(11, table_->GetNextPrime(7)); EXPECT_EQ(131, table_->GetNextPrime(128)); } // In order to run value-parameterized tests, you need to instantiate them, // or bind them to a list of values which will be used as test parameters. // You can instantiate them in a different translation module, or even // instantiate them several times. // // Here, we instantiate our tests with a list of parameters. We must combine // all variations of the boolean flag suppressing PrecalcPrimeTable and some // meaningful values for tests. We choose a small value (1), and a value that // will put some of the tested numbers beyond the capability of the // PrecalcPrimeTable instance and some inside it (10). Combine will produce all // possible combinations. INSTANTIATE_TEST_CASE_P(MeaningfulTestParameters, PrimeTableTest, Combine(Bool(), Values(1, 10))); #else // Google Test may not support Combine() with some compilers. If we // use conditional compilation to compile out all code referring to // the gtest_main library, MSVC linker will not link that library at // all and consequently complain about missing entry point defined in // that library (fatal error LNK1561: entry point must be // defined). This dummy test keeps gtest_main linked in. TEST(DummyTest, CombineIsNotSupportedOnThisPlatform) {} #endif // GTEST_HAS_COMBINE dlt-daemon-2.18.6/gtest-1.7.0/samples/sample9_unittest.cc000066400000000000000000000134771377520261000227260ustar00rootroot00000000000000// Copyright 2009 Google Inc. All Rights Reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // This sample shows how to use Google Test listener API to implement // an alternative console output and how to use the UnitTest reflection API // to enumerate test cases and tests and to inspect their results. #include #include "gtest/gtest.h" using ::testing::EmptyTestEventListener; using ::testing::InitGoogleTest; using ::testing::Test; using ::testing::TestCase; using ::testing::TestEventListeners; using ::testing::TestInfo; using ::testing::TestPartResult; using ::testing::UnitTest; namespace { // Provides alternative output mode which produces minimal amount of // information about tests. class TersePrinter : public EmptyTestEventListener { private: // Called before any test activity starts. virtual void OnTestProgramStart(const UnitTest& /* unit_test */) {} // Called after all test activities have ended. virtual void OnTestProgramEnd(const UnitTest& unit_test) { fprintf(stdout, "TEST %s\n", unit_test.Passed() ? "PASSED" : "FAILED"); fflush(stdout); } // Called before a test starts. virtual void OnTestStart(const TestInfo& test_info) { fprintf(stdout, "*** Test %s.%s starting.\n", test_info.test_case_name(), test_info.name()); fflush(stdout); } // Called after a failed assertion or a SUCCEED() invocation. virtual void OnTestPartResult(const TestPartResult& test_part_result) { fprintf(stdout, "%s in %s:%d\n%s\n", test_part_result.failed() ? "*** Failure" : "Success", test_part_result.file_name(), test_part_result.line_number(), test_part_result.summary()); fflush(stdout); } // Called after a test ends. virtual void OnTestEnd(const TestInfo& test_info) { fprintf(stdout, "*** Test %s.%s ending.\n", test_info.test_case_name(), test_info.name()); fflush(stdout); } }; // class TersePrinter TEST(CustomOutputTest, PrintsMessage) { printf("Printing something from the test body...\n"); } TEST(CustomOutputTest, Succeeds) { SUCCEED() << "SUCCEED() has been invoked from here"; } TEST(CustomOutputTest, Fails) { EXPECT_EQ(1, 2) << "This test fails in order to demonstrate alternative failure messages"; } } // namespace int main(int argc, char **argv) { InitGoogleTest(&argc, argv); bool terse_output = false; if (argc > 1 && strcmp(argv[1], "--terse_output") == 0 ) terse_output = true; else printf("%s\n", "Run this program with --terse_output to change the way " "it prints its output."); UnitTest& unit_test = *UnitTest::GetInstance(); // If we are given the --terse_output command line flag, suppresses the // standard output and attaches own result printer. if (terse_output) { TestEventListeners& listeners = unit_test.listeners(); // Removes the default console output listener from the list so it will // not receive events from Google Test and won't print any output. Since // this operation transfers ownership of the listener to the caller we // have to delete it as well. delete listeners.Release(listeners.default_result_printer()); // Adds the custom output listener to the list. It will now receive // events from Google Test and print the alternative output. We don't // have to worry about deleting it since Google Test assumes ownership // over it after adding it to the list. listeners.Append(new TersePrinter); } int ret_val = RUN_ALL_TESTS(); // This is an example of using the UnitTest reflection API to inspect test // results. Here we discount failures from the tests we expected to fail. int unexpectedly_failed_tests = 0; for (int i = 0; i < unit_test.total_test_case_count(); ++i) { const TestCase& test_case = *unit_test.GetTestCase(i); for (int j = 0; j < test_case.total_test_count(); ++j) { const TestInfo& test_info = *test_case.GetTestInfo(j); // Counts failed tests that were not meant to fail (those without // 'Fails' in the name). if (test_info.result()->Failed() && strcmp(test_info.name(), "Fails") != 0) { unexpectedly_failed_tests++; } } } // Test that were meant to fail should not affect the test program outcome. if (unexpectedly_failed_tests == 0) ret_val = 0; return ret_val; } dlt-daemon-2.18.6/gtest-1.7.0/scripts/000077500000000000000000000000001377520261000171155ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/scripts/fuse_gtest_files.py000077500000000000000000000211551377520261000230300ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2009, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """fuse_gtest_files.py v0.2.0 Fuses Google Test source code into a .h file and a .cc file. SYNOPSIS fuse_gtest_files.py [GTEST_ROOT_DIR] OUTPUT_DIR Scans GTEST_ROOT_DIR for Google Test source code, and generates two files: OUTPUT_DIR/gtest/gtest.h and OUTPUT_DIR/gtest/gtest-all.cc. Then you can build your tests by adding OUTPUT_DIR to the include search path and linking with OUTPUT_DIR/gtest/gtest-all.cc. These two files contain everything you need to use Google Test. Hence you can "install" Google Test by copying them to wherever you want. GTEST_ROOT_DIR can be omitted and defaults to the parent directory of the directory holding this script. EXAMPLES ./fuse_gtest_files.py fused_gtest ./fuse_gtest_files.py path/to/unpacked/gtest fused_gtest This tool is experimental. In particular, it assumes that there is no conditional inclusion of Google Test headers. Please report any problems to googletestframework@googlegroups.com. You can read http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide for more information. """ __author__ = 'wan@google.com (Zhanyong Wan)' import os import re import sets import sys # We assume that this file is in the scripts/ directory in the Google # Test root directory. DEFAULT_GTEST_ROOT_DIR = os.path.join(os.path.dirname(__file__), '..') # Regex for matching '#include "gtest/..."'. INCLUDE_GTEST_FILE_REGEX = re.compile(r'^\s*#\s*include\s*"(gtest/.+)"') # Regex for matching '#include "src/..."'. INCLUDE_SRC_FILE_REGEX = re.compile(r'^\s*#\s*include\s*"(src/.+)"') # Where to find the source seed files. GTEST_H_SEED = 'include/gtest/gtest.h' GTEST_SPI_H_SEED = 'include/gtest/gtest-spi.h' GTEST_ALL_CC_SEED = 'src/gtest-all.cc' # Where to put the generated files. GTEST_H_OUTPUT = 'gtest/gtest.h' GTEST_ALL_CC_OUTPUT = 'gtest/gtest-all.cc' def VerifyFileExists(directory, relative_path): """Verifies that the given file exists; aborts on failure. relative_path is the file path relative to the given directory. """ if not os.path.isfile(os.path.join(directory, relative_path)): print 'ERROR: Cannot find %s in directory %s.' % (relative_path, directory) print ('Please either specify a valid project root directory ' 'or omit it on the command line.') sys.exit(1) def ValidateGTestRootDir(gtest_root): """Makes sure gtest_root points to a valid gtest root directory. The function aborts the program on failure. """ VerifyFileExists(gtest_root, GTEST_H_SEED) VerifyFileExists(gtest_root, GTEST_ALL_CC_SEED) def VerifyOutputFile(output_dir, relative_path): """Verifies that the given output file path is valid. relative_path is relative to the output_dir directory. """ # Makes sure the output file either doesn't exist or can be overwritten. output_file = os.path.join(output_dir, relative_path) if os.path.exists(output_file): # TODO(wan@google.com): The following user-interaction doesn't # work with automated processes. We should provide a way for the # Makefile to force overwriting the files. print ('%s already exists in directory %s - overwrite it? (y/N) ' % (relative_path, output_dir)) answer = sys.stdin.readline().strip() if answer not in ['y', 'Y']: print 'ABORTED.' sys.exit(1) # Makes sure the directory holding the output file exists; creates # it and all its ancestors if necessary. parent_directory = os.path.dirname(output_file) if not os.path.isdir(parent_directory): os.makedirs(parent_directory) def ValidateOutputDir(output_dir): """Makes sure output_dir points to a valid output directory. The function aborts the program on failure. """ VerifyOutputFile(output_dir, GTEST_H_OUTPUT) VerifyOutputFile(output_dir, GTEST_ALL_CC_OUTPUT) def FuseGTestH(gtest_root, output_dir): """Scans folder gtest_root to generate gtest/gtest.h in output_dir.""" output_file = file(os.path.join(output_dir, GTEST_H_OUTPUT), 'w') processed_files = sets.Set() # Holds all gtest headers we've processed. def ProcessFile(gtest_header_path): """Processes the given gtest header file.""" # We don't process the same header twice. if gtest_header_path in processed_files: return processed_files.add(gtest_header_path) # Reads each line in the given gtest header. for line in file(os.path.join(gtest_root, gtest_header_path), 'r'): m = INCLUDE_GTEST_FILE_REGEX.match(line) if m: # It's '#include "gtest/..."' - let's process it recursively. ProcessFile('include/' + m.group(1)) else: # Otherwise we copy the line unchanged to the output file. output_file.write(line) ProcessFile(GTEST_H_SEED) output_file.close() def FuseGTestAllCcToFile(gtest_root, output_file): """Scans folder gtest_root to generate gtest/gtest-all.cc in output_file.""" processed_files = sets.Set() def ProcessFile(gtest_source_file): """Processes the given gtest source file.""" # We don't process the same #included file twice. if gtest_source_file in processed_files: return processed_files.add(gtest_source_file) # Reads each line in the given gtest source file. for line in file(os.path.join(gtest_root, gtest_source_file), 'r'): m = INCLUDE_GTEST_FILE_REGEX.match(line) if m: if 'include/' + m.group(1) == GTEST_SPI_H_SEED: # It's '#include "gtest/gtest-spi.h"'. This file is not # #included by "gtest/gtest.h", so we need to process it. ProcessFile(GTEST_SPI_H_SEED) else: # It's '#include "gtest/foo.h"' where foo is not gtest-spi. # We treat it as '#include "gtest/gtest.h"', as all other # gtest headers are being fused into gtest.h and cannot be # #included directly. # There is no need to #include "gtest/gtest.h" more than once. if not GTEST_H_SEED in processed_files: processed_files.add(GTEST_H_SEED) output_file.write('#include "%s"\n' % (GTEST_H_OUTPUT,)) else: m = INCLUDE_SRC_FILE_REGEX.match(line) if m: # It's '#include "src/foo"' - let's process it recursively. ProcessFile(m.group(1)) else: output_file.write(line) ProcessFile(GTEST_ALL_CC_SEED) def FuseGTestAllCc(gtest_root, output_dir): """Scans folder gtest_root to generate gtest/gtest-all.cc in output_dir.""" output_file = file(os.path.join(output_dir, GTEST_ALL_CC_OUTPUT), 'w') FuseGTestAllCcToFile(gtest_root, output_file) output_file.close() def FuseGTest(gtest_root, output_dir): """Fuses gtest.h and gtest-all.cc.""" ValidateGTestRootDir(gtest_root) ValidateOutputDir(output_dir) FuseGTestH(gtest_root, output_dir) FuseGTestAllCc(gtest_root, output_dir) def main(): argc = len(sys.argv) if argc == 2: # fuse_gtest_files.py OUTPUT_DIR FuseGTest(DEFAULT_GTEST_ROOT_DIR, sys.argv[1]) elif argc == 3: # fuse_gtest_files.py GTEST_ROOT_DIR OUTPUT_DIR FuseGTest(sys.argv[1], sys.argv[2]) else: print __doc__ sys.exit(1) if __name__ == '__main__': main() dlt-daemon-2.18.6/gtest-1.7.0/scripts/gen_gtest_pred_impl.py000077500000000000000000000527421377520261000235160ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2006, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """gen_gtest_pred_impl.py v0.1 Generates the implementation of Google Test predicate assertions and accompanying tests. Usage: gen_gtest_pred_impl.py MAX_ARITY where MAX_ARITY is a positive integer. The command generates the implementation of up-to MAX_ARITY-ary predicate assertions, and writes it to file gtest_pred_impl.h in the directory where the script is. It also generates the accompanying unit test in file gtest_pred_impl_unittest.cc. """ __author__ = 'wan@google.com (Zhanyong Wan)' import os import sys import time # Where this script is. SCRIPT_DIR = os.path.dirname(sys.argv[0]) # Where to store the generated header. HEADER = os.path.join(SCRIPT_DIR, '../include/gtest/gtest_pred_impl.h') # Where to store the generated unit test. UNIT_TEST = os.path.join(SCRIPT_DIR, '../test/gtest_pred_impl_unittest.cc') def HeaderPreamble(n): """Returns the preamble for the header file. Args: n: the maximum arity of the predicate macros to be generated. """ # A map that defines the values used in the preamble template. DEFS = { 'today' : time.strftime('%m/%d/%Y'), 'year' : time.strftime('%Y'), 'command' : '%s %s' % (os.path.basename(sys.argv[0]), n), 'n' : n } return ( """// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // This file is AUTOMATICALLY GENERATED on %(today)s by command // '%(command)s'. DO NOT EDIT BY HAND! // // Implements a family of generic predicate assertion macros. #ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ #define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ // Makes sure this header is not included before gtest.h. #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ # error Do not include gtest_pred_impl.h directly. Include gtest.h instead. #endif // GTEST_INCLUDE_GTEST_GTEST_H_ // This header implements a family of generic predicate assertion // macros: // // ASSERT_PRED_FORMAT1(pred_format, v1) // ASSERT_PRED_FORMAT2(pred_format, v1, v2) // ... // // where pred_format is a function or functor that takes n (in the // case of ASSERT_PRED_FORMATn) values and their source expression // text, and returns a testing::AssertionResult. See the definition // of ASSERT_EQ in gtest.h for an example. // // If you don't care about formatting, you can use the more // restrictive version: // // ASSERT_PRED1(pred, v1) // ASSERT_PRED2(pred, v1, v2) // ... // // where pred is an n-ary function or functor that returns bool, // and the values v1, v2, ..., must support the << operator for // streaming to std::ostream. // // We also define the EXPECT_* variations. // // For now we only support predicates whose arity is at most %(n)s. // Please email googletestframework@googlegroups.com if you need // support for higher arities. // GTEST_ASSERT_ is the basic statement to which all of the assertions // in this file reduce. Don't use this in your code. #define GTEST_ASSERT_(expression, on_failure) \\ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\ if (const ::testing::AssertionResult gtest_ar = (expression)) \\ ; \\ else \\ on_failure(gtest_ar.failure_message()) """ % DEFS) def Arity(n): """Returns the English name of the given arity.""" if n < 0: return None elif n <= 3: return ['nullary', 'unary', 'binary', 'ternary'][n] else: return '%s-ary' % n def Title(word): """Returns the given word in title case. The difference between this and string's title() method is that Title('4-ary') is '4-ary' while '4-ary'.title() is '4-Ary'.""" return word[0].upper() + word[1:] def OneTo(n): """Returns the list [1, 2, 3, ..., n].""" return range(1, n + 1) def Iter(n, format, sep=''): """Given a positive integer n, a format string that contains 0 or more '%s' format specs, and optionally a separator string, returns the join of n strings, each formatted with the format string on an iterator ranged from 1 to n. Example: Iter(3, 'v%s', sep=', ') returns 'v1, v2, v3'. """ # How many '%s' specs are in format? spec_count = len(format.split('%s')) - 1 return sep.join([format % (spec_count * (i,)) for i in OneTo(n)]) def ImplementationForArity(n): """Returns the implementation of n-ary predicate assertions.""" # A map the defines the values used in the implementation template. DEFS = { 'n' : str(n), 'vs' : Iter(n, 'v%s', sep=', '), 'vts' : Iter(n, '#v%s', sep=', '), 'arity' : Arity(n), 'Arity' : Title(Arity(n)) } impl = """ // Helper function for implementing {EXPECT|ASSERT}_PRED%(n)s. Don't use // this in your code. template AssertionResult AssertPred%(n)sHelper(const char* pred_text""" % DEFS impl += Iter(n, """, const char* e%s""") impl += """, Pred pred""" impl += Iter(n, """, const T%s& v%s""") impl += """) { if (pred(%(vs)s)) return AssertionSuccess(); """ % DEFS impl += ' return AssertionFailure() << pred_text << "("' impl += Iter(n, """ << e%s""", sep=' << ", "') impl += ' << ") evaluates to false, where"' impl += Iter(n, """ << "\\n" << e%s << " evaluates to " << v%s""") impl += """; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT%(n)s. // Don't use this in your code. #define GTEST_PRED_FORMAT%(n)s_(pred_format, %(vs)s, on_failure)\\ GTEST_ASSERT_(pred_format(%(vts)s, %(vs)s), \\ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED%(n)s. Don't use // this in your code. #define GTEST_PRED%(n)s_(pred, %(vs)s, on_failure)\\ GTEST_ASSERT_(::testing::AssertPred%(n)sHelper(#pred""" % DEFS impl += Iter(n, """, \\ #v%s""") impl += """, \\ pred""" impl += Iter(n, """, \\ v%s""") impl += """), on_failure) // %(Arity)s predicate assertion macros. #define EXPECT_PRED_FORMAT%(n)s(pred_format, %(vs)s) \\ GTEST_PRED_FORMAT%(n)s_(pred_format, %(vs)s, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED%(n)s(pred, %(vs)s) \\ GTEST_PRED%(n)s_(pred, %(vs)s, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT%(n)s(pred_format, %(vs)s) \\ GTEST_PRED_FORMAT%(n)s_(pred_format, %(vs)s, GTEST_FATAL_FAILURE_) #define ASSERT_PRED%(n)s(pred, %(vs)s) \\ GTEST_PRED%(n)s_(pred, %(vs)s, GTEST_FATAL_FAILURE_) """ % DEFS return impl def HeaderPostamble(): """Returns the postamble for the header file.""" return """ #endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ """ def GenerateFile(path, content): """Given a file path and a content string, overwrites it with the given content.""" print 'Updating file %s . . .' % path f = file(path, 'w+') print >>f, content, f.close() print 'File %s has been updated.' % path def GenerateHeader(n): """Given the maximum arity n, updates the header file that implements the predicate assertions.""" GenerateFile(HEADER, HeaderPreamble(n) + ''.join([ImplementationForArity(i) for i in OneTo(n)]) + HeaderPostamble()) def UnitTestPreamble(): """Returns the preamble for the unit test file.""" # A map that defines the values used in the preamble template. DEFS = { 'today' : time.strftime('%m/%d/%Y'), 'year' : time.strftime('%Y'), 'command' : '%s %s' % (os.path.basename(sys.argv[0]), sys.argv[1]), } return ( """// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // This file is AUTOMATICALLY GENERATED on %(today)s by command // '%(command)s'. DO NOT EDIT BY HAND! // Regression test for gtest_pred_impl.h // // This file is generated by a script and quite long. If you intend to // learn how Google Test works by reading its unit tests, read // gtest_unittest.cc instead. // // This is intended as a regression test for the Google Test predicate // assertions. We compile it as part of the gtest_unittest target // only to keep the implementation tidy and compact, as it is quite // involved to set up the stage for testing Google Test using Google // Test itself. // // Currently, gtest_unittest takes ~11 seconds to run in the testing // daemon. In the future, if it grows too large and needs much more // time to finish, we should consider separating this file into a // stand-alone regression test. #include #include "gtest/gtest.h" #include "gtest/gtest-spi.h" // A user-defined data type. struct Bool { explicit Bool(int val) : value(val != 0) {} bool operator>(int n) const { return value > Bool(n).value; } Bool operator+(const Bool& rhs) const { return Bool(value + rhs.value); } bool operator==(const Bool& rhs) const { return value == rhs.value; } bool value; }; // Enables Bool to be used in assertions. std::ostream& operator<<(std::ostream& os, const Bool& x) { return os << (x.value ? "true" : "false"); } """ % DEFS) def TestsForArity(n): """Returns the tests for n-ary predicate assertions.""" # A map that defines the values used in the template for the tests. DEFS = { 'n' : n, 'es' : Iter(n, 'e%s', sep=', '), 'vs' : Iter(n, 'v%s', sep=', '), 'vts' : Iter(n, '#v%s', sep=', '), 'tvs' : Iter(n, 'T%s v%s', sep=', '), 'int_vs' : Iter(n, 'int v%s', sep=', '), 'Bool_vs' : Iter(n, 'Bool v%s', sep=', '), 'types' : Iter(n, 'typename T%s', sep=', '), 'v_sum' : Iter(n, 'v%s', sep=' + '), 'arity' : Arity(n), 'Arity' : Title(Arity(n)), } tests = ( """// Sample functions/functors for testing %(arity)s predicate assertions. // A %(arity)s predicate function. template <%(types)s> bool PredFunction%(n)s(%(tvs)s) { return %(v_sum)s > 0; } // The following two functions are needed to circumvent a bug in // gcc 2.95.3, which sometimes has problem with the above template // function. bool PredFunction%(n)sInt(%(int_vs)s) { return %(v_sum)s > 0; } bool PredFunction%(n)sBool(%(Bool_vs)s) { return %(v_sum)s > 0; } """ % DEFS) tests += """ // A %(arity)s predicate functor. struct PredFunctor%(n)s { template <%(types)s> bool operator()(""" % DEFS tests += Iter(n, 'const T%s& v%s', sep=""", """) tests += """) { return %(v_sum)s > 0; } }; """ % DEFS tests += """ // A %(arity)s predicate-formatter function. template <%(types)s> testing::AssertionResult PredFormatFunction%(n)s(""" % DEFS tests += Iter(n, 'const char* e%s', sep=""", """) tests += Iter(n, """, const T%s& v%s""") tests += """) { if (PredFunction%(n)s(%(vs)s)) return testing::AssertionSuccess(); return testing::AssertionFailure() << """ % DEFS tests += Iter(n, 'e%s', sep=' << " + " << ') tests += """ << " is expected to be positive, but evaluates to " << %(v_sum)s << "."; } """ % DEFS tests += """ // A %(arity)s predicate-formatter functor. struct PredFormatFunctor%(n)s { template <%(types)s> testing::AssertionResult operator()(""" % DEFS tests += Iter(n, 'const char* e%s', sep=""", """) tests += Iter(n, """, const T%s& v%s""") tests += """) const { return PredFormatFunction%(n)s(%(es)s, %(vs)s); } }; """ % DEFS tests += """ // Tests for {EXPECT|ASSERT}_PRED_FORMAT%(n)s. class Predicate%(n)sTest : public testing::Test { protected: virtual void SetUp() { expected_to_finish_ = true; finished_ = false;""" % DEFS tests += """ """ + Iter(n, 'n%s_ = ') + """0; } """ tests += """ virtual void TearDown() { // Verifies that each of the predicate's arguments was evaluated // exactly once.""" tests += ''.join([""" EXPECT_EQ(1, n%s_) << "The predicate assertion didn't evaluate argument %s " "exactly once.";""" % (i, i + 1) for i in OneTo(n)]) tests += """ // Verifies that the control flow in the test function is expected. if (expected_to_finish_ && !finished_) { FAIL() << "The predicate assertion unexpactedly aborted the test."; } else if (!expected_to_finish_ && finished_) { FAIL() << "The failed predicate assertion didn't abort the test " "as expected."; } } // true iff the test function is expected to run to finish. static bool expected_to_finish_; // true iff the test function did run to finish. static bool finished_; """ % DEFS tests += Iter(n, """ static int n%s_;""") tests += """ }; bool Predicate%(n)sTest::expected_to_finish_; bool Predicate%(n)sTest::finished_; """ % DEFS tests += Iter(n, """int Predicate%%(n)sTest::n%s_; """) % DEFS tests += """ typedef Predicate%(n)sTest EXPECT_PRED_FORMAT%(n)sTest; typedef Predicate%(n)sTest ASSERT_PRED_FORMAT%(n)sTest; typedef Predicate%(n)sTest EXPECT_PRED%(n)sTest; typedef Predicate%(n)sTest ASSERT_PRED%(n)sTest; """ % DEFS def GenTest(use_format, use_assert, expect_failure, use_functor, use_user_type): """Returns the test for a predicate assertion macro. Args: use_format: true iff the assertion is a *_PRED_FORMAT*. use_assert: true iff the assertion is a ASSERT_*. expect_failure: true iff the assertion is expected to fail. use_functor: true iff the first argument of the assertion is a functor (as opposed to a function) use_user_type: true iff the predicate functor/function takes argument(s) of a user-defined type. Example: GenTest(1, 0, 0, 1, 0) returns a test that tests the behavior of a successful EXPECT_PRED_FORMATn() that takes a functor whose arguments have built-in types.""" if use_assert: assrt = 'ASSERT' # 'assert' is reserved, so we cannot use # that identifier here. else: assrt = 'EXPECT' assertion = assrt + '_PRED' if use_format: pred_format = 'PredFormat' assertion += '_FORMAT' else: pred_format = 'Pred' assertion += '%(n)s' % DEFS if use_functor: pred_format_type = 'functor' pred_format += 'Functor%(n)s()' else: pred_format_type = 'function' pred_format += 'Function%(n)s' if not use_format: if use_user_type: pred_format += 'Bool' else: pred_format += 'Int' test_name = pred_format_type.title() if use_user_type: arg_type = 'user-defined type (Bool)' test_name += 'OnUserType' if expect_failure: arg = 'Bool(n%s_++)' else: arg = 'Bool(++n%s_)' else: arg_type = 'built-in type (int)' test_name += 'OnBuiltInType' if expect_failure: arg = 'n%s_++' else: arg = '++n%s_' if expect_failure: successful_or_failed = 'failed' expected_or_not = 'expected.' test_name += 'Failure' else: successful_or_failed = 'successful' expected_or_not = 'UNEXPECTED!' test_name += 'Success' # A map that defines the values used in the test template. defs = DEFS.copy() defs.update({ 'assert' : assrt, 'assertion' : assertion, 'test_name' : test_name, 'pf_type' : pred_format_type, 'pf' : pred_format, 'arg_type' : arg_type, 'arg' : arg, 'successful' : successful_or_failed, 'expected' : expected_or_not, }) test = """ // Tests a %(successful)s %(assertion)s where the // predicate-formatter is a %(pf_type)s on a %(arg_type)s. TEST_F(%(assertion)sTest, %(test_name)s) {""" % defs indent = (len(assertion) + 3)*' ' extra_indent = '' if expect_failure: extra_indent = ' ' if use_assert: test += """ expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT""" else: test += """ EXPECT_NONFATAL_FAILURE({ // NOLINT""" test += '\n' + extra_indent + """ %(assertion)s(%(pf)s""" % defs test = test % defs test += Iter(n, ',\n' + indent + extra_indent + '%(arg)s' % defs) test += ');\n' + extra_indent + ' finished_ = true;\n' if expect_failure: test += ' }, "");\n' test += '}\n' return test # Generates tests for all 2**6 = 64 combinations. tests += ''.join([GenTest(use_format, use_assert, expect_failure, use_functor, use_user_type) for use_format in [0, 1] for use_assert in [0, 1] for expect_failure in [0, 1] for use_functor in [0, 1] for use_user_type in [0, 1] ]) return tests def UnitTestPostamble(): """Returns the postamble for the tests.""" return '' def GenerateUnitTest(n): """Returns the tests for up-to n-ary predicate assertions.""" GenerateFile(UNIT_TEST, UnitTestPreamble() + ''.join([TestsForArity(i) for i in OneTo(n)]) + UnitTestPostamble()) def _Main(): """The entry point of the script. Generates the header file and its unit test.""" if len(sys.argv) != 2: print __doc__ print 'Author: ' + __author__ sys.exit(1) n = int(sys.argv[1]) GenerateHeader(n) GenerateUnitTest(n) if __name__ == '__main__': _Main() dlt-daemon-2.18.6/gtest-1.7.0/scripts/gtest-config000077500000000000000000000234401377520261000214370ustar00rootroot00000000000000#!/bin/sh # These variables are automatically filled in by the configure script. name="gtest" version="1.7.0" show_usage() { echo "Usage: gtest-config [OPTIONS...]" } show_help() { show_usage cat <<\EOF The `gtest-config' script provides access to the necessary compile and linking flags to connect with Google C++ Testing Framework, both in a build prior to installation, and on the system proper after installation. The installation overrides may be issued in combination with any other queries, but will only affect installation queries if called on a built but not installed gtest. The installation queries may not be issued with any other types of queries, and only one installation query may be made at a time. The version queries and compiler flag queries may be combined as desired but not mixed. Different version queries are always combined with logical "and" semantics, and only the last of any particular query is used while all previous ones ignored. All versions must be specified as a sequence of numbers separated by periods. Compiler flag queries output the union of the sets of flags when combined. Examples: gtest-config --min-version=1.0 || echo "Insufficient Google Test version." g++ $(gtest-config --cppflags --cxxflags) -o foo.o -c foo.cpp g++ $(gtest-config --ldflags --libs) -o foo foo.o # When using a built but not installed Google Test: g++ $(../../my_gtest_build/scripts/gtest-config ...) ... # When using an installed Google Test, but with installation overrides: export GTEST_PREFIX="/opt" g++ $(gtest-config --libdir="/opt/lib64" ...) ... Help: --usage brief usage information --help display this help message Installation Overrides: --prefix= overrides the installation prefix --exec-prefix= overrides the executable installation prefix --libdir= overrides the library installation prefix --includedir= overrides the header file installation prefix Installation Queries: --prefix installation prefix --exec-prefix executable installation prefix --libdir library installation directory --includedir header file installation directory --version the version of the Google Test installation Version Queries: --min-version=VERSION return 0 if the version is at least VERSION --exact-version=VERSION return 0 if the version is exactly VERSION --max-version=VERSION return 0 if the version is at most VERSION Compilation Flag Queries: --cppflags compile flags specific to the C-like preprocessors --cxxflags compile flags appropriate for C++ programs --ldflags linker flags --libs libraries for linking EOF } # This function bounds our version with a min and a max. It uses some clever # POSIX-compliant variable expansion to portably do all the work in the shell # and avoid any dependency on a particular "sed" or "awk" implementation. # Notable is that it will only ever compare the first 3 components of versions. # Further components will be cleanly stripped off. All versions must be # unadorned, so "v1.0" will *not* work. The minimum version must be in $1, and # the max in $2. TODO(chandlerc@google.com): If this ever breaks, we should # investigate expanding this via autom4te from AS_VERSION_COMPARE rather than # continuing to maintain our own shell version. check_versions() { major_version=${version%%.*} minor_version="0" point_version="0" if test "${version#*.}" != "${version}"; then minor_version=${version#*.} minor_version=${minor_version%%.*} fi if test "${version#*.*.}" != "${version}"; then point_version=${version#*.*.} point_version=${point_version%%.*} fi min_version="$1" min_major_version=${min_version%%.*} min_minor_version="0" min_point_version="0" if test "${min_version#*.}" != "${min_version}"; then min_minor_version=${min_version#*.} min_minor_version=${min_minor_version%%.*} fi if test "${min_version#*.*.}" != "${min_version}"; then min_point_version=${min_version#*.*.} min_point_version=${min_point_version%%.*} fi max_version="$2" max_major_version=${max_version%%.*} max_minor_version="0" max_point_version="0" if test "${max_version#*.}" != "${max_version}"; then max_minor_version=${max_version#*.} max_minor_version=${max_minor_version%%.*} fi if test "${max_version#*.*.}" != "${max_version}"; then max_point_version=${max_version#*.*.} max_point_version=${max_point_version%%.*} fi test $(($major_version)) -lt $(($min_major_version)) && exit 1 if test $(($major_version)) -eq $(($min_major_version)); then test $(($minor_version)) -lt $(($min_minor_version)) && exit 1 if test $(($minor_version)) -eq $(($min_minor_version)); then test $(($point_version)) -lt $(($min_point_version)) && exit 1 fi fi test $(($major_version)) -gt $(($max_major_version)) && exit 1 if test $(($major_version)) -eq $(($max_major_version)); then test $(($minor_version)) -gt $(($max_minor_version)) && exit 1 if test $(($minor_version)) -eq $(($max_minor_version)); then test $(($point_version)) -gt $(($max_point_version)) && exit 1 fi fi exit 0 } # Show the usage line when no arguments are specified. if test $# -eq 0; then show_usage exit 1 fi while test $# -gt 0; do case $1 in --usage) show_usage; exit 0;; --help) show_help; exit 0;; # Installation overrides --prefix=*) GTEST_PREFIX=${1#--prefix=};; --exec-prefix=*) GTEST_EXEC_PREFIX=${1#--exec-prefix=};; --libdir=*) GTEST_LIBDIR=${1#--libdir=};; --includedir=*) GTEST_INCLUDEDIR=${1#--includedir=};; # Installation queries --prefix|--exec-prefix|--libdir|--includedir|--version) if test -n "${do_query}"; then show_usage exit 1 fi do_query=${1#--} ;; # Version checking --min-version=*) do_check_versions=yes min_version=${1#--min-version=} ;; --max-version=*) do_check_versions=yes max_version=${1#--max-version=} ;; --exact-version=*) do_check_versions=yes exact_version=${1#--exact-version=} ;; # Compiler flag output --cppflags) echo_cppflags=yes;; --cxxflags) echo_cxxflags=yes;; --ldflags) echo_ldflags=yes;; --libs) echo_libs=yes;; # Everything else is an error *) show_usage; exit 1;; esac shift done # These have defaults filled in by the configure script but can also be # overridden by environment variables or command line parameters. prefix="${GTEST_PREFIX:-/usr/local}" exec_prefix="${GTEST_EXEC_PREFIX:-${prefix}}" libdir="${GTEST_LIBDIR:-${exec_prefix}/lib}" includedir="${GTEST_INCLUDEDIR:-${prefix}/include}" # We try and detect if our binary is not located at its installed location. If # it's not, we provide variables pointing to the source and build tree rather # than to the install tree. This allows building against a just-built gtest # rather than an installed gtest. bindir="${exec_prefix}/bin" this_relative_bindir=`dirname $0` this_bindir=`cd ${this_relative_bindir}; pwd -P` if test "${this_bindir}" = "${this_bindir%${bindir}}"; then # The path to the script doesn't end in the bindir sequence from Autoconf, # assume that we are in a build tree. build_dir=`dirname ${this_bindir}` src_dir=`cd ${this_bindir}; cd ..; pwd -P` # TODO(chandlerc@google.com): This is a dangerous dependency on libtool, we # should work to remove it, and/or remove libtool altogether, replacing it # with direct references to the library and a link path. gtest_libs="${build_dir}/lib/libgtest.la -pthread " gtest_ldflags="" # We provide hooks to include from either the source or build dir, where the # build dir is always preferred. This will potentially allow us to write # build rules for generated headers and have them automatically be preferred # over provided versions. gtest_cppflags="-I${build_dir}/include -I${src_dir}/include" gtest_cxxflags="-pthread" else # We're using an installed gtest, although it may be staged under some # prefix. Assume (as our own libraries do) that we can resolve the prefix, # and are present in the dynamic link paths. gtest_ldflags="-L${libdir}" gtest_libs="-l${name} -pthread " gtest_cppflags="-I${includedir}" gtest_cxxflags="-pthread" fi # Do an installation query if requested. if test -n "$do_query"; then case $do_query in prefix) echo $prefix; exit 0;; exec-prefix) echo $exec_prefix; exit 0;; libdir) echo $libdir; exit 0;; includedir) echo $includedir; exit 0;; version) echo $version; exit 0;; *) show_usage; exit 1;; esac fi # Do a version check if requested. if test "$do_check_versions" = "yes"; then # Make sure we didn't receive a bad combination of parameters. test "$echo_cppflags" = "yes" && show_usage && exit 1 test "$echo_cxxflags" = "yes" && show_usage && exit 1 test "$echo_ldflags" = "yes" && show_usage && exit 1 test "$echo_libs" = "yes" && show_usage && exit 1 if test "$exact_version" != ""; then check_versions $exact_version $exact_version # unreachable else check_versions ${min_version:-0.0.0} ${max_version:-9999.9999.9999} # unreachable fi fi # Do the output in the correct order so that these can be used in-line of # a compiler invocation. output="" test "$echo_cppflags" = "yes" && output="$output $gtest_cppflags" test "$echo_cxxflags" = "yes" && output="$output $gtest_cxxflags" test "$echo_ldflags" = "yes" && output="$output $gtest_ldflags" test "$echo_libs" = "yes" && output="$output $gtest_libs" echo $output exit 0 dlt-daemon-2.18.6/gtest-1.7.0/scripts/gtest-config.in000077500000000000000000000235471377520261000220540ustar00rootroot00000000000000#!/bin/sh # These variables are automatically filled in by the configure script. name="@PACKAGE_TARNAME@" version="@PACKAGE_VERSION@" show_usage() { echo "Usage: gtest-config [OPTIONS...]" } show_help() { show_usage cat <<\EOF The `gtest-config' script provides access to the necessary compile and linking flags to connect with Google C++ Testing Framework, both in a build prior to installation, and on the system proper after installation. The installation overrides may be issued in combination with any other queries, but will only affect installation queries if called on a built but not installed gtest. The installation queries may not be issued with any other types of queries, and only one installation query may be made at a time. The version queries and compiler flag queries may be combined as desired but not mixed. Different version queries are always combined with logical "and" semantics, and only the last of any particular query is used while all previous ones ignored. All versions must be specified as a sequence of numbers separated by periods. Compiler flag queries output the union of the sets of flags when combined. Examples: gtest-config --min-version=1.0 || echo "Insufficient Google Test version." g++ $(gtest-config --cppflags --cxxflags) -o foo.o -c foo.cpp g++ $(gtest-config --ldflags --libs) -o foo foo.o # When using a built but not installed Google Test: g++ $(../../my_gtest_build/scripts/gtest-config ...) ... # When using an installed Google Test, but with installation overrides: export GTEST_PREFIX="/opt" g++ $(gtest-config --libdir="/opt/lib64" ...) ... Help: --usage brief usage information --help display this help message Installation Overrides: --prefix= overrides the installation prefix --exec-prefix= overrides the executable installation prefix --libdir= overrides the library installation prefix --includedir= overrides the header file installation prefix Installation Queries: --prefix installation prefix --exec-prefix executable installation prefix --libdir library installation directory --includedir header file installation directory --version the version of the Google Test installation Version Queries: --min-version=VERSION return 0 if the version is at least VERSION --exact-version=VERSION return 0 if the version is exactly VERSION --max-version=VERSION return 0 if the version is at most VERSION Compilation Flag Queries: --cppflags compile flags specific to the C-like preprocessors --cxxflags compile flags appropriate for C++ programs --ldflags linker flags --libs libraries for linking EOF } # This function bounds our version with a min and a max. It uses some clever # POSIX-compliant variable expansion to portably do all the work in the shell # and avoid any dependency on a particular "sed" or "awk" implementation. # Notable is that it will only ever compare the first 3 components of versions. # Further components will be cleanly stripped off. All versions must be # unadorned, so "v1.0" will *not* work. The minimum version must be in $1, and # the max in $2. TODO(chandlerc@google.com): If this ever breaks, we should # investigate expanding this via autom4te from AS_VERSION_COMPARE rather than # continuing to maintain our own shell version. check_versions() { major_version=${version%%.*} minor_version="0" point_version="0" if test "${version#*.}" != "${version}"; then minor_version=${version#*.} minor_version=${minor_version%%.*} fi if test "${version#*.*.}" != "${version}"; then point_version=${version#*.*.} point_version=${point_version%%.*} fi min_version="$1" min_major_version=${min_version%%.*} min_minor_version="0" min_point_version="0" if test "${min_version#*.}" != "${min_version}"; then min_minor_version=${min_version#*.} min_minor_version=${min_minor_version%%.*} fi if test "${min_version#*.*.}" != "${min_version}"; then min_point_version=${min_version#*.*.} min_point_version=${min_point_version%%.*} fi max_version="$2" max_major_version=${max_version%%.*} max_minor_version="0" max_point_version="0" if test "${max_version#*.}" != "${max_version}"; then max_minor_version=${max_version#*.} max_minor_version=${max_minor_version%%.*} fi if test "${max_version#*.*.}" != "${max_version}"; then max_point_version=${max_version#*.*.} max_point_version=${max_point_version%%.*} fi test $(($major_version)) -lt $(($min_major_version)) && exit 1 if test $(($major_version)) -eq $(($min_major_version)); then test $(($minor_version)) -lt $(($min_minor_version)) && exit 1 if test $(($minor_version)) -eq $(($min_minor_version)); then test $(($point_version)) -lt $(($min_point_version)) && exit 1 fi fi test $(($major_version)) -gt $(($max_major_version)) && exit 1 if test $(($major_version)) -eq $(($max_major_version)); then test $(($minor_version)) -gt $(($max_minor_version)) && exit 1 if test $(($minor_version)) -eq $(($max_minor_version)); then test $(($point_version)) -gt $(($max_point_version)) && exit 1 fi fi exit 0 } # Show the usage line when no arguments are specified. if test $# -eq 0; then show_usage exit 1 fi while test $# -gt 0; do case $1 in --usage) show_usage; exit 0;; --help) show_help; exit 0;; # Installation overrides --prefix=*) GTEST_PREFIX=${1#--prefix=};; --exec-prefix=*) GTEST_EXEC_PREFIX=${1#--exec-prefix=};; --libdir=*) GTEST_LIBDIR=${1#--libdir=};; --includedir=*) GTEST_INCLUDEDIR=${1#--includedir=};; # Installation queries --prefix|--exec-prefix|--libdir|--includedir|--version) if test -n "${do_query}"; then show_usage exit 1 fi do_query=${1#--} ;; # Version checking --min-version=*) do_check_versions=yes min_version=${1#--min-version=} ;; --max-version=*) do_check_versions=yes max_version=${1#--max-version=} ;; --exact-version=*) do_check_versions=yes exact_version=${1#--exact-version=} ;; # Compiler flag output --cppflags) echo_cppflags=yes;; --cxxflags) echo_cxxflags=yes;; --ldflags) echo_ldflags=yes;; --libs) echo_libs=yes;; # Everything else is an error *) show_usage; exit 1;; esac shift done # These have defaults filled in by the configure script but can also be # overridden by environment variables or command line parameters. prefix="${GTEST_PREFIX:-@prefix@}" exec_prefix="${GTEST_EXEC_PREFIX:-@exec_prefix@}" libdir="${GTEST_LIBDIR:-@libdir@}" includedir="${GTEST_INCLUDEDIR:-@includedir@}" # We try and detect if our binary is not located at its installed location. If # it's not, we provide variables pointing to the source and build tree rather # than to the install tree. This allows building against a just-built gtest # rather than an installed gtest. bindir="@bindir@" this_relative_bindir=`dirname $0` this_bindir=`cd ${this_relative_bindir}; pwd -P` if test "${this_bindir}" = "${this_bindir%${bindir}}"; then # The path to the script doesn't end in the bindir sequence from Autoconf, # assume that we are in a build tree. build_dir=`dirname ${this_bindir}` src_dir=`cd ${this_bindir}; cd @top_srcdir@; pwd -P` # TODO(chandlerc@google.com): This is a dangerous dependency on libtool, we # should work to remove it, and/or remove libtool altogether, replacing it # with direct references to the library and a link path. gtest_libs="${build_dir}/lib/libgtest.la @PTHREAD_CFLAGS@ @PTHREAD_LIBS@" gtest_ldflags="" # We provide hooks to include from either the source or build dir, where the # build dir is always preferred. This will potentially allow us to write # build rules for generated headers and have them automatically be preferred # over provided versions. gtest_cppflags="-I${build_dir}/include -I${src_dir}/include" gtest_cxxflags="@PTHREAD_CFLAGS@" else # We're using an installed gtest, although it may be staged under some # prefix. Assume (as our own libraries do) that we can resolve the prefix, # and are present in the dynamic link paths. gtest_ldflags="-L${libdir}" gtest_libs="-l${name} @PTHREAD_CFLAGS@ @PTHREAD_LIBS@" gtest_cppflags="-I${includedir}" gtest_cxxflags="@PTHREAD_CFLAGS@" fi # Do an installation query if requested. if test -n "$do_query"; then case $do_query in prefix) echo $prefix; exit 0;; exec-prefix) echo $exec_prefix; exit 0;; libdir) echo $libdir; exit 0;; includedir) echo $includedir; exit 0;; version) echo $version; exit 0;; *) show_usage; exit 1;; esac fi # Do a version check if requested. if test "$do_check_versions" = "yes"; then # Make sure we didn't receive a bad combination of parameters. test "$echo_cppflags" = "yes" && show_usage && exit 1 test "$echo_cxxflags" = "yes" && show_usage && exit 1 test "$echo_ldflags" = "yes" && show_usage && exit 1 test "$echo_libs" = "yes" && show_usage && exit 1 if test "$exact_version" != ""; then check_versions $exact_version $exact_version # unreachable else check_versions ${min_version:-0.0.0} ${max_version:-9999.9999.9999} # unreachable fi fi # Do the output in the correct order so that these can be used in-line of # a compiler invocation. output="" test "$echo_cppflags" = "yes" && output="$output $gtest_cppflags" test "$echo_cxxflags" = "yes" && output="$output $gtest_cxxflags" test "$echo_ldflags" = "yes" && output="$output $gtest_ldflags" test "$echo_libs" = "yes" && output="$output $gtest_libs" echo $output exit 0 dlt-daemon-2.18.6/gtest-1.7.0/scripts/pump.py000077500000000000000000000561711377520261000204650ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2008, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """pump v0.2.0 - Pretty Useful for Meta Programming. A tool for preprocessor meta programming. Useful for generating repetitive boilerplate code. Especially useful for writing C++ classes, functions, macros, and templates that need to work with various number of arguments. USAGE: pump.py SOURCE_FILE EXAMPLES: pump.py foo.cc.pump Converts foo.cc.pump to foo.cc. GRAMMAR: CODE ::= ATOMIC_CODE* ATOMIC_CODE ::= $var ID = EXPRESSION | $var ID = [[ CODE ]] | $range ID EXPRESSION..EXPRESSION | $for ID SEPARATOR [[ CODE ]] | $($) | $ID | $(EXPRESSION) | $if EXPRESSION [[ CODE ]] ELSE_BRANCH | [[ CODE ]] | RAW_CODE SEPARATOR ::= RAW_CODE | EMPTY ELSE_BRANCH ::= $else [[ CODE ]] | $elif EXPRESSION [[ CODE ]] ELSE_BRANCH | EMPTY EXPRESSION has Python syntax. """ __author__ = 'wan@google.com (Zhanyong Wan)' import os import re import sys TOKEN_TABLE = [ (re.compile(r'\$var\s+'), '$var'), (re.compile(r'\$elif\s+'), '$elif'), (re.compile(r'\$else\s+'), '$else'), (re.compile(r'\$for\s+'), '$for'), (re.compile(r'\$if\s+'), '$if'), (re.compile(r'\$range\s+'), '$range'), (re.compile(r'\$[_A-Za-z]\w*'), '$id'), (re.compile(r'\$\(\$\)'), '$($)'), (re.compile(r'\$'), '$'), (re.compile(r'\[\[\n?'), '[['), (re.compile(r'\]\]\n?'), ']]'), ] class Cursor: """Represents a position (line and column) in a text file.""" def __init__(self, line=-1, column=-1): self.line = line self.column = column def __eq__(self, rhs): return self.line == rhs.line and self.column == rhs.column def __ne__(self, rhs): return not self == rhs def __lt__(self, rhs): return self.line < rhs.line or ( self.line == rhs.line and self.column < rhs.column) def __le__(self, rhs): return self < rhs or self == rhs def __gt__(self, rhs): return rhs < self def __ge__(self, rhs): return rhs <= self def __str__(self): if self == Eof(): return 'EOF' else: return '%s(%s)' % (self.line + 1, self.column) def __add__(self, offset): return Cursor(self.line, self.column + offset) def __sub__(self, offset): return Cursor(self.line, self.column - offset) def Clone(self): """Returns a copy of self.""" return Cursor(self.line, self.column) # Special cursor to indicate the end-of-file. def Eof(): """Returns the special cursor to denote the end-of-file.""" return Cursor(-1, -1) class Token: """Represents a token in a Pump source file.""" def __init__(self, start=None, end=None, value=None, token_type=None): if start is None: self.start = Eof() else: self.start = start if end is None: self.end = Eof() else: self.end = end self.value = value self.token_type = token_type def __str__(self): return 'Token @%s: \'%s\' type=%s' % ( self.start, self.value, self.token_type) def Clone(self): """Returns a copy of self.""" return Token(self.start.Clone(), self.end.Clone(), self.value, self.token_type) def StartsWith(lines, pos, string): """Returns True iff the given position in lines starts with 'string'.""" return lines[pos.line][pos.column:].startswith(string) def FindFirstInLine(line, token_table): best_match_start = -1 for (regex, token_type) in token_table: m = regex.search(line) if m: # We found regex in lines if best_match_start < 0 or m.start() < best_match_start: best_match_start = m.start() best_match_length = m.end() - m.start() best_match_token_type = token_type if best_match_start < 0: return None return (best_match_start, best_match_length, best_match_token_type) def FindFirst(lines, token_table, cursor): """Finds the first occurrence of any string in strings in lines.""" start = cursor.Clone() cur_line_number = cursor.line for line in lines[start.line:]: if cur_line_number == start.line: line = line[start.column:] m = FindFirstInLine(line, token_table) if m: # We found a regex in line. (start_column, length, token_type) = m if cur_line_number == start.line: start_column += start.column found_start = Cursor(cur_line_number, start_column) found_end = found_start + length return MakeToken(lines, found_start, found_end, token_type) cur_line_number += 1 # We failed to find str in lines return None def SubString(lines, start, end): """Returns a substring in lines.""" if end == Eof(): end = Cursor(len(lines) - 1, len(lines[-1])) if start >= end: return '' if start.line == end.line: return lines[start.line][start.column:end.column] result_lines = ([lines[start.line][start.column:]] + lines[start.line + 1:end.line] + [lines[end.line][:end.column]]) return ''.join(result_lines) def StripMetaComments(str): """Strip meta comments from each line in the given string.""" # First, completely remove lines containing nothing but a meta # comment, including the trailing \n. str = re.sub(r'^\s*\$\$.*\n', '', str) # Then, remove meta comments from contentful lines. return re.sub(r'\s*\$\$.*', '', str) def MakeToken(lines, start, end, token_type): """Creates a new instance of Token.""" return Token(start, end, SubString(lines, start, end), token_type) def ParseToken(lines, pos, regex, token_type): line = lines[pos.line][pos.column:] m = regex.search(line) if m and not m.start(): return MakeToken(lines, pos, pos + m.end(), token_type) else: print 'ERROR: %s expected at %s.' % (token_type, pos) sys.exit(1) ID_REGEX = re.compile(r'[_A-Za-z]\w*') EQ_REGEX = re.compile(r'=') REST_OF_LINE_REGEX = re.compile(r'.*?(?=$|\$\$)') OPTIONAL_WHITE_SPACES_REGEX = re.compile(r'\s*') WHITE_SPACE_REGEX = re.compile(r'\s') DOT_DOT_REGEX = re.compile(r'\.\.') def Skip(lines, pos, regex): line = lines[pos.line][pos.column:] m = re.search(regex, line) if m and not m.start(): return pos + m.end() else: return pos def SkipUntil(lines, pos, regex, token_type): line = lines[pos.line][pos.column:] m = re.search(regex, line) if m: return pos + m.start() else: print ('ERROR: %s expected on line %s after column %s.' % (token_type, pos.line + 1, pos.column)) sys.exit(1) def ParseExpTokenInParens(lines, pos): def ParseInParens(pos): pos = Skip(lines, pos, OPTIONAL_WHITE_SPACES_REGEX) pos = Skip(lines, pos, r'\(') pos = Parse(pos) pos = Skip(lines, pos, r'\)') return pos def Parse(pos): pos = SkipUntil(lines, pos, r'\(|\)', ')') if SubString(lines, pos, pos + 1) == '(': pos = Parse(pos + 1) pos = Skip(lines, pos, r'\)') return Parse(pos) else: return pos start = pos.Clone() pos = ParseInParens(pos) return MakeToken(lines, start, pos, 'exp') def RStripNewLineFromToken(token): if token.value.endswith('\n'): return Token(token.start, token.end, token.value[:-1], token.token_type) else: return token def TokenizeLines(lines, pos): while True: found = FindFirst(lines, TOKEN_TABLE, pos) if not found: yield MakeToken(lines, pos, Eof(), 'code') return if found.start == pos: prev_token = None prev_token_rstripped = None else: prev_token = MakeToken(lines, pos, found.start, 'code') prev_token_rstripped = RStripNewLineFromToken(prev_token) if found.token_type == '$var': if prev_token_rstripped: yield prev_token_rstripped yield found id_token = ParseToken(lines, found.end, ID_REGEX, 'id') yield id_token pos = Skip(lines, id_token.end, OPTIONAL_WHITE_SPACES_REGEX) eq_token = ParseToken(lines, pos, EQ_REGEX, '=') yield eq_token pos = Skip(lines, eq_token.end, r'\s*') if SubString(lines, pos, pos + 2) != '[[': exp_token = ParseToken(lines, pos, REST_OF_LINE_REGEX, 'exp') yield exp_token pos = Cursor(exp_token.end.line + 1, 0) elif found.token_type == '$for': if prev_token_rstripped: yield prev_token_rstripped yield found id_token = ParseToken(lines, found.end, ID_REGEX, 'id') yield id_token pos = Skip(lines, id_token.end, WHITE_SPACE_REGEX) elif found.token_type == '$range': if prev_token_rstripped: yield prev_token_rstripped yield found id_token = ParseToken(lines, found.end, ID_REGEX, 'id') yield id_token pos = Skip(lines, id_token.end, OPTIONAL_WHITE_SPACES_REGEX) dots_pos = SkipUntil(lines, pos, DOT_DOT_REGEX, '..') yield MakeToken(lines, pos, dots_pos, 'exp') yield MakeToken(lines, dots_pos, dots_pos + 2, '..') pos = dots_pos + 2 new_pos = Cursor(pos.line + 1, 0) yield MakeToken(lines, pos, new_pos, 'exp') pos = new_pos elif found.token_type == '$': if prev_token: yield prev_token yield found exp_token = ParseExpTokenInParens(lines, found.end) yield exp_token pos = exp_token.end elif (found.token_type == ']]' or found.token_type == '$if' or found.token_type == '$elif' or found.token_type == '$else'): if prev_token_rstripped: yield prev_token_rstripped yield found pos = found.end else: if prev_token: yield prev_token yield found pos = found.end def Tokenize(s): """A generator that yields the tokens in the given string.""" if s != '': lines = s.splitlines(True) for token in TokenizeLines(lines, Cursor(0, 0)): yield token class CodeNode: def __init__(self, atomic_code_list=None): self.atomic_code = atomic_code_list class VarNode: def __init__(self, identifier=None, atomic_code=None): self.identifier = identifier self.atomic_code = atomic_code class RangeNode: def __init__(self, identifier=None, exp1=None, exp2=None): self.identifier = identifier self.exp1 = exp1 self.exp2 = exp2 class ForNode: def __init__(self, identifier=None, sep=None, code=None): self.identifier = identifier self.sep = sep self.code = code class ElseNode: def __init__(self, else_branch=None): self.else_branch = else_branch class IfNode: def __init__(self, exp=None, then_branch=None, else_branch=None): self.exp = exp self.then_branch = then_branch self.else_branch = else_branch class RawCodeNode: def __init__(self, token=None): self.raw_code = token class LiteralDollarNode: def __init__(self, token): self.token = token class ExpNode: def __init__(self, token, python_exp): self.token = token self.python_exp = python_exp def PopFront(a_list): head = a_list[0] a_list[:1] = [] return head def PushFront(a_list, elem): a_list[:0] = [elem] def PopToken(a_list, token_type=None): token = PopFront(a_list) if token_type is not None and token.token_type != token_type: print 'ERROR: %s expected at %s' % (token_type, token.start) print 'ERROR: %s found instead' % (token,) sys.exit(1) return token def PeekToken(a_list): if not a_list: return None return a_list[0] def ParseExpNode(token): python_exp = re.sub(r'([_A-Za-z]\w*)', r'self.GetValue("\1")', token.value) return ExpNode(token, python_exp) def ParseElseNode(tokens): def Pop(token_type=None): return PopToken(tokens, token_type) next = PeekToken(tokens) if not next: return None if next.token_type == '$else': Pop('$else') Pop('[[') code_node = ParseCodeNode(tokens) Pop(']]') return code_node elif next.token_type == '$elif': Pop('$elif') exp = Pop('code') Pop('[[') code_node = ParseCodeNode(tokens) Pop(']]') inner_else_node = ParseElseNode(tokens) return CodeNode([IfNode(ParseExpNode(exp), code_node, inner_else_node)]) elif not next.value.strip(): Pop('code') return ParseElseNode(tokens) else: return None def ParseAtomicCodeNode(tokens): def Pop(token_type=None): return PopToken(tokens, token_type) head = PopFront(tokens) t = head.token_type if t == 'code': return RawCodeNode(head) elif t == '$var': id_token = Pop('id') Pop('=') next = PeekToken(tokens) if next.token_type == 'exp': exp_token = Pop() return VarNode(id_token, ParseExpNode(exp_token)) Pop('[[') code_node = ParseCodeNode(tokens) Pop(']]') return VarNode(id_token, code_node) elif t == '$for': id_token = Pop('id') next_token = PeekToken(tokens) if next_token.token_type == 'code': sep_token = next_token Pop('code') else: sep_token = None Pop('[[') code_node = ParseCodeNode(tokens) Pop(']]') return ForNode(id_token, sep_token, code_node) elif t == '$if': exp_token = Pop('code') Pop('[[') code_node = ParseCodeNode(tokens) Pop(']]') else_node = ParseElseNode(tokens) return IfNode(ParseExpNode(exp_token), code_node, else_node) elif t == '$range': id_token = Pop('id') exp1_token = Pop('exp') Pop('..') exp2_token = Pop('exp') return RangeNode(id_token, ParseExpNode(exp1_token), ParseExpNode(exp2_token)) elif t == '$id': return ParseExpNode(Token(head.start + 1, head.end, head.value[1:], 'id')) elif t == '$($)': return LiteralDollarNode(head) elif t == '$': exp_token = Pop('exp') return ParseExpNode(exp_token) elif t == '[[': code_node = ParseCodeNode(tokens) Pop(']]') return code_node else: PushFront(tokens, head) return None def ParseCodeNode(tokens): atomic_code_list = [] while True: if not tokens: break atomic_code_node = ParseAtomicCodeNode(tokens) if atomic_code_node: atomic_code_list.append(atomic_code_node) else: break return CodeNode(atomic_code_list) def ParseToAST(pump_src_text): """Convert the given Pump source text into an AST.""" tokens = list(Tokenize(pump_src_text)) code_node = ParseCodeNode(tokens) return code_node class Env: def __init__(self): self.variables = [] self.ranges = [] def Clone(self): clone = Env() clone.variables = self.variables[:] clone.ranges = self.ranges[:] return clone def PushVariable(self, var, value): # If value looks like an int, store it as an int. try: int_value = int(value) if ('%s' % int_value) == value: value = int_value except Exception: pass self.variables[:0] = [(var, value)] def PopVariable(self): self.variables[:1] = [] def PushRange(self, var, lower, upper): self.ranges[:0] = [(var, lower, upper)] def PopRange(self): self.ranges[:1] = [] def GetValue(self, identifier): for (var, value) in self.variables: if identifier == var: return value print 'ERROR: meta variable %s is undefined.' % (identifier,) sys.exit(1) def EvalExp(self, exp): try: result = eval(exp.python_exp) except Exception, e: print 'ERROR: caught exception %s: %s' % (e.__class__.__name__, e) print ('ERROR: failed to evaluate meta expression %s at %s' % (exp.python_exp, exp.token.start)) sys.exit(1) return result def GetRange(self, identifier): for (var, lower, upper) in self.ranges: if identifier == var: return (lower, upper) print 'ERROR: range %s is undefined.' % (identifier,) sys.exit(1) class Output: def __init__(self): self.string = '' def GetLastLine(self): index = self.string.rfind('\n') if index < 0: return '' return self.string[index + 1:] def Append(self, s): self.string += s def RunAtomicCode(env, node, output): if isinstance(node, VarNode): identifier = node.identifier.value.strip() result = Output() RunAtomicCode(env.Clone(), node.atomic_code, result) value = result.string env.PushVariable(identifier, value) elif isinstance(node, RangeNode): identifier = node.identifier.value.strip() lower = int(env.EvalExp(node.exp1)) upper = int(env.EvalExp(node.exp2)) env.PushRange(identifier, lower, upper) elif isinstance(node, ForNode): identifier = node.identifier.value.strip() if node.sep is None: sep = '' else: sep = node.sep.value (lower, upper) = env.GetRange(identifier) for i in range(lower, upper + 1): new_env = env.Clone() new_env.PushVariable(identifier, i) RunCode(new_env, node.code, output) if i != upper: output.Append(sep) elif isinstance(node, RawCodeNode): output.Append(node.raw_code.value) elif isinstance(node, IfNode): cond = env.EvalExp(node.exp) if cond: RunCode(env.Clone(), node.then_branch, output) elif node.else_branch is not None: RunCode(env.Clone(), node.else_branch, output) elif isinstance(node, ExpNode): value = env.EvalExp(node) output.Append('%s' % (value,)) elif isinstance(node, LiteralDollarNode): output.Append('$') elif isinstance(node, CodeNode): RunCode(env.Clone(), node, output) else: print 'BAD' print node sys.exit(1) def RunCode(env, code_node, output): for atomic_code in code_node.atomic_code: RunAtomicCode(env, atomic_code, output) def IsSingleLineComment(cur_line): return '//' in cur_line def IsInPreprocessorDirective(prev_lines, cur_line): if cur_line.lstrip().startswith('#'): return True return prev_lines and prev_lines[-1].endswith('\\') def WrapComment(line, output): loc = line.find('//') before_comment = line[:loc].rstrip() if before_comment == '': indent = loc else: output.append(before_comment) indent = len(before_comment) - len(before_comment.lstrip()) prefix = indent*' ' + '// ' max_len = 80 - len(prefix) comment = line[loc + 2:].strip() segs = [seg for seg in re.split(r'(\w+\W*)', comment) if seg != ''] cur_line = '' for seg in segs: if len((cur_line + seg).rstrip()) < max_len: cur_line += seg else: if cur_line.strip() != '': output.append(prefix + cur_line.rstrip()) cur_line = seg.lstrip() if cur_line.strip() != '': output.append(prefix + cur_line.strip()) def WrapCode(line, line_concat, output): indent = len(line) - len(line.lstrip()) prefix = indent*' ' # Prefix of the current line max_len = 80 - indent - len(line_concat) # Maximum length of the current line new_prefix = prefix + 4*' ' # Prefix of a continuation line new_max_len = max_len - 4 # Maximum length of a continuation line # Prefers to wrap a line after a ',' or ';'. segs = [seg for seg in re.split(r'([^,;]+[,;]?)', line.strip()) if seg != ''] cur_line = '' # The current line without leading spaces. for seg in segs: # If the line is still too long, wrap at a space. while cur_line == '' and len(seg.strip()) > max_len: seg = seg.lstrip() split_at = seg.rfind(' ', 0, max_len) output.append(prefix + seg[:split_at].strip() + line_concat) seg = seg[split_at + 1:] prefix = new_prefix max_len = new_max_len if len((cur_line + seg).rstrip()) < max_len: cur_line = (cur_line + seg).lstrip() else: output.append(prefix + cur_line.rstrip() + line_concat) prefix = new_prefix max_len = new_max_len cur_line = seg.lstrip() if cur_line.strip() != '': output.append(prefix + cur_line.strip()) def WrapPreprocessorDirective(line, output): WrapCode(line, ' \\', output) def WrapPlainCode(line, output): WrapCode(line, '', output) def IsMultiLineIWYUPragma(line): return re.search(r'/\* IWYU pragma: ', line) def IsHeaderGuardIncludeOrOneLineIWYUPragma(line): return (re.match(r'^#(ifndef|define|endif\s*//)\s*[\w_]+\s*$', line) or re.match(r'^#include\s', line) or # Don't break IWYU pragmas, either; that causes iwyu.py problems. re.search(r'// IWYU pragma: ', line)) def WrapLongLine(line, output): line = line.rstrip() if len(line) <= 80: output.append(line) elif IsSingleLineComment(line): if IsHeaderGuardIncludeOrOneLineIWYUPragma(line): # The style guide made an exception to allow long header guard lines, # includes and IWYU pragmas. output.append(line) else: WrapComment(line, output) elif IsInPreprocessorDirective(output, line): if IsHeaderGuardIncludeOrOneLineIWYUPragma(line): # The style guide made an exception to allow long header guard lines, # includes and IWYU pragmas. output.append(line) else: WrapPreprocessorDirective(line, output) elif IsMultiLineIWYUPragma(line): output.append(line) else: WrapPlainCode(line, output) def BeautifyCode(string): lines = string.splitlines() output = [] for line in lines: WrapLongLine(line, output) output2 = [line.rstrip() for line in output] return '\n'.join(output2) + '\n' def ConvertFromPumpSource(src_text): """Return the text generated from the given Pump source text.""" ast = ParseToAST(StripMetaComments(src_text)) output = Output() RunCode(Env(), ast, output) return BeautifyCode(output.string) def main(argv): if len(argv) == 1: print __doc__ sys.exit(1) file_path = argv[-1] output_str = ConvertFromPumpSource(file(file_path, 'r').read()) if file_path.endswith('.pump'): output_file_path = file_path[:-5] else: output_file_path = '-' if output_file_path == '-': print output_str, else: output_file = file(output_file_path, 'w') output_file.write('// This file was GENERATED by command:\n') output_file.write('// %s %s\n' % (os.path.basename(__file__), os.path.basename(file_path))) output_file.write('// DO NOT EDIT BY HAND!!!\n\n') output_file.write(output_str) output_file.close() if __name__ == '__main__': main(sys.argv) dlt-daemon-2.18.6/gtest-1.7.0/scripts/test/000077500000000000000000000000001377520261000200745ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/scripts/test/Makefile000066400000000000000000000034121377520261000215340ustar00rootroot00000000000000# A Makefile for fusing Google Test and building a sample test against it. # # SYNOPSIS: # # make [all] - makes everything. # make TARGET - makes the given target. # make check - makes everything and runs the built sample test. # make clean - removes all files generated by make. # Points to the root of fused Google Test, relative to where this file is. FUSED_GTEST_DIR = output # Paths to the fused gtest files. FUSED_GTEST_H = $(FUSED_GTEST_DIR)/gtest/gtest.h FUSED_GTEST_ALL_CC = $(FUSED_GTEST_DIR)/gtest/gtest-all.cc # Where to find the sample test. SAMPLE_DIR = ../../samples # Where to find gtest_main.cc. GTEST_MAIN_CC = ../../src/gtest_main.cc # Flags passed to the preprocessor. # We have no idea here whether pthreads is available in the system, so # disable its use. CPPFLAGS += -I$(FUSED_GTEST_DIR) -DGTEST_HAS_PTHREAD=0 # Flags passed to the C++ compiler. CXXFLAGS += -g all : sample1_unittest check : all ./sample1_unittest clean : rm -rf $(FUSED_GTEST_DIR) sample1_unittest *.o $(FUSED_GTEST_H) : ../fuse_gtest_files.py $(FUSED_GTEST_DIR) $(FUSED_GTEST_ALL_CC) : ../fuse_gtest_files.py $(FUSED_GTEST_DIR) gtest-all.o : $(FUSED_GTEST_H) $(FUSED_GTEST_ALL_CC) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(FUSED_GTEST_DIR)/gtest/gtest-all.cc gtest_main.o : $(FUSED_GTEST_H) $(GTEST_MAIN_CC) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(GTEST_MAIN_CC) sample1.o : $(SAMPLE_DIR)/sample1.cc $(SAMPLE_DIR)/sample1.h $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(SAMPLE_DIR)/sample1.cc sample1_unittest.o : $(SAMPLE_DIR)/sample1_unittest.cc \ $(SAMPLE_DIR)/sample1.h $(FUSED_GTEST_H) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(SAMPLE_DIR)/sample1_unittest.cc sample1_unittest : sample1.o sample1_unittest.o gtest-all.o gtest_main.o $(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $@ dlt-daemon-2.18.6/gtest-1.7.0/src/000077500000000000000000000000001377520261000162155ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/src/.deps/000077500000000000000000000000001377520261000172265ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/src/.deps/.dirstamp000066400000000000000000000000001377520261000210400ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/src/.deps/gtest-all.Plo000066400000000000000000000412211377520261000215760ustar00rootroot00000000000000src/gtest-all.lo: src/gtest-all.cc /usr/include/stdc-predef.h \ include/gtest/gtest.h /usr/include/c++/4.9.2/limits \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++config.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/os_defines.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ /usr/include/gnu/stubs-32.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/cpu_defines.h \ /usr/include/c++/4.9.2/ostream /usr/include/c++/4.9.2/ios \ /usr/include/c++/4.9.2/iosfwd /usr/include/c++/4.9.2/bits/stringfwd.h \ /usr/include/c++/4.9.2/bits/memoryfwd.h \ /usr/include/c++/4.9.2/bits/postypes.h /usr/include/c++/4.9.2/cwchar \ /usr/include/wchar.h /usr/include/stdio.h \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stdarg.h \ /usr/include/bits/wchar.h \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stddef.h \ /usr/include/xlocale.h /usr/include/c++/4.9.2/exception \ /usr/include/c++/4.9.2/bits/atomic_lockfree_defines.h \ /usr/include/c++/4.9.2/bits/char_traits.h \ /usr/include/c++/4.9.2/bits/stl_algobase.h \ /usr/include/c++/4.9.2/bits/functexcept.h \ /usr/include/c++/4.9.2/bits/exception_defines.h \ /usr/include/c++/4.9.2/bits/cpp_type_traits.h \ /usr/include/c++/4.9.2/ext/type_traits.h \ /usr/include/c++/4.9.2/ext/numeric_traits.h \ /usr/include/c++/4.9.2/bits/stl_pair.h \ /usr/include/c++/4.9.2/bits/move.h \ /usr/include/c++/4.9.2/bits/concept_check.h \ /usr/include/c++/4.9.2/bits/stl_iterator_base_types.h \ /usr/include/c++/4.9.2/bits/stl_iterator_base_funcs.h \ /usr/include/c++/4.9.2/debug/debug.h \ /usr/include/c++/4.9.2/bits/stl_iterator.h \ /usr/include/c++/4.9.2/bits/ptr_traits.h \ /usr/include/c++/4.9.2/bits/predefined_ops.h \ /usr/include/c++/4.9.2/bits/localefwd.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++locale.h \ /usr/include/c++/4.9.2/clocale /usr/include/locale.h \ /usr/include/bits/locale.h /usr/include/c++/4.9.2/cctype \ /usr/include/ctype.h /usr/include/bits/types.h \ /usr/include/bits/typesizes.h /usr/include/endian.h \ /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ /usr/include/bits/byteswap-16.h /usr/include/c++/4.9.2/bits/ios_base.h \ /usr/include/c++/4.9.2/ext/atomicity.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/gthr.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/gthr-default.h \ /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ /usr/include/bits/sched.h /usr/include/bits/time.h \ /usr/include/bits/timex.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/setjmp.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/atomic_word.h \ /usr/include/c++/4.9.2/bits/locale_classes.h \ /usr/include/c++/4.9.2/string /usr/include/c++/4.9.2/bits/allocator.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++allocator.h \ /usr/include/c++/4.9.2/ext/new_allocator.h /usr/include/c++/4.9.2/new \ /usr/include/c++/4.9.2/bits/ostream_insert.h \ /usr/include/c++/4.9.2/bits/cxxabi_forced.h \ /usr/include/c++/4.9.2/bits/stl_function.h \ /usr/include/c++/4.9.2/backward/binders.h \ /usr/include/c++/4.9.2/bits/range_access.h \ /usr/include/c++/4.9.2/bits/basic_string.h \ /usr/include/c++/4.9.2/bits/basic_string.tcc \ /usr/include/c++/4.9.2/bits/locale_classes.tcc \ /usr/include/c++/4.9.2/streambuf \ /usr/include/c++/4.9.2/bits/streambuf.tcc \ /usr/include/c++/4.9.2/bits/basic_ios.h \ /usr/include/c++/4.9.2/bits/locale_facets.h \ /usr/include/c++/4.9.2/cwctype /usr/include/wctype.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/ctype_base.h \ /usr/include/c++/4.9.2/bits/streambuf_iterator.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/ctype_inline.h \ /usr/include/c++/4.9.2/bits/locale_facets.tcc \ /usr/include/c++/4.9.2/bits/basic_ios.tcc \ /usr/include/c++/4.9.2/bits/ostream.tcc /usr/include/c++/4.9.2/vector \ /usr/include/c++/4.9.2/bits/stl_construct.h \ /usr/include/c++/4.9.2/ext/alloc_traits.h \ /usr/include/c++/4.9.2/bits/stl_uninitialized.h \ /usr/include/c++/4.9.2/bits/stl_vector.h \ /usr/include/c++/4.9.2/bits/stl_bvector.h \ /usr/include/c++/4.9.2/bits/vector.tcc \ include/gtest/internal/gtest-internal.h \ include/gtest/internal/gtest-port.h /usr/include/stdlib.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ /usr/include/sys/types.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/sys/sysmacros.h /usr/include/alloca.h \ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \ /usr/include/libio.h /usr/include/_G_config.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ /usr/include/bits/stdio.h /usr/include/string.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/c++/4.9.2/iostream \ /usr/include/c++/4.9.2/istream /usr/include/c++/4.9.2/bits/istream.tcc \ /usr/include/c++/4.9.2/sstream /usr/include/c++/4.9.2/bits/sstream.tcc \ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/environments.h /usr/include/bits/confname.h \ /usr/include/getopt.h /usr/include/strings.h /usr/include/regex.h \ /usr/include/c++/4.9.2/typeinfo /usr/include/c++/4.9.2/tr1/tuple \ /usr/include/c++/4.9.2/utility /usr/include/c++/4.9.2/bits/stl_relops.h \ /usr/include/sys/wait.h /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/bits/sigstack.h \ /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h \ /usr/include/c++/4.9.2/stdexcept \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/float.h \ /usr/include/c++/4.9.2/iomanip /usr/include/c++/4.9.2/set \ /usr/include/c++/4.9.2/bits/stl_tree.h \ /usr/include/c++/4.9.2/bits/stl_set.h \ /usr/include/c++/4.9.2/bits/stl_multiset.h include/gtest/gtest-message.h \ include/gtest/internal/gtest-string.h \ include/gtest/internal/gtest-filepath.h \ include/gtest/internal/gtest-type-util.h /usr/include/c++/4.9.2/cxxabi.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/cxxabi_tweaks.h \ include/gtest/gtest-death-test.h \ include/gtest/internal/gtest-death-test-internal.h \ include/gtest/gtest-param-test.h \ include/gtest/internal/gtest-param-util.h \ /usr/include/c++/4.9.2/iterator \ /usr/include/c++/4.9.2/bits/stream_iterator.h \ include/gtest/internal/gtest-linked_ptr.h /usr/include/assert.h \ include/gtest/gtest-printers.h \ include/gtest/internal/gtest-param-util-generated.h \ include/gtest/gtest_prod.h include/gtest/gtest-test-part.h \ include/gtest/gtest-typed-test.h include/gtest/gtest_pred_impl.h \ src/gtest.cc include/gtest/gtest-spi.h /usr/include/math.h \ /usr/include/bits/huge_val.h /usr/include/bits/huge_valf.h \ /usr/include/bits/huge_vall.h /usr/include/bits/inf.h \ /usr/include/bits/nan.h /usr/include/bits/mathdef.h \ /usr/include/bits/mathcalls.h /usr/include/bits/mathinline.h \ /usr/include/c++/4.9.2/algorithm /usr/include/c++/4.9.2/bits/stl_algo.h \ /usr/include/c++/4.9.2/cstdlib \ /usr/include/c++/4.9.2/bits/algorithmfwd.h \ /usr/include/c++/4.9.2/bits/stl_heap.h \ /usr/include/c++/4.9.2/bits/stl_tempbuf.h /usr/include/fcntl.h \ /usr/include/bits/fcntl.h /usr/include/bits/fcntl-linux.h \ /usr/include/bits/uio.h \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/limits.h \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/syslimits.h \ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ /usr/include/sys/mman.h /usr/include/bits/mman.h \ /usr/include/bits/mman-linux.h /usr/include/sys/time.h \ /usr/include/arpa/inet.h /usr/include/netinet/in.h \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stdint.h \ /usr/include/stdint.h /usr/include/sys/socket.h /usr/include/sys/uio.h \ /usr/include/bits/socket.h /usr/include/bits/socket_type.h \ /usr/include/bits/sockaddr.h /usr/include/asm/socket.h \ /usr/include/asm-generic/socket.h /usr/include/asm/sockios.h \ /usr/include/asm-generic/sockios.h /usr/include/bits/in.h \ /usr/include/netdb.h /usr/include/rpc/netdb.h /usr/include/bits/netdb.h \ src/gtest-internal-inl.h /usr/include/errno.h /usr/include/bits/errno.h \ /usr/include/linux/errno.h /usr/include/asm/errno.h \ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ src/gtest-death-test.cc src/gtest-filepath.cc \ /usr/include/c++/4.9.2/climits src/gtest-port.cc src/gtest-printers.cc \ src/gtest-test-part.cc src/gtest-typed-test.cc /usr/include/stdc-predef.h: include/gtest/gtest.h: /usr/include/c++/4.9.2/limits: /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++config.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/os_defines.h: /usr/include/features.h: /usr/include/sys/cdefs.h: /usr/include/bits/wordsize.h: /usr/include/gnu/stubs.h: /usr/include/gnu/stubs-32.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/cpu_defines.h: /usr/include/c++/4.9.2/ostream: /usr/include/c++/4.9.2/ios: /usr/include/c++/4.9.2/iosfwd: /usr/include/c++/4.9.2/bits/stringfwd.h: /usr/include/c++/4.9.2/bits/memoryfwd.h: /usr/include/c++/4.9.2/bits/postypes.h: /usr/include/c++/4.9.2/cwchar: /usr/include/wchar.h: /usr/include/stdio.h: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stdarg.h: /usr/include/bits/wchar.h: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stddef.h: /usr/include/xlocale.h: /usr/include/c++/4.9.2/exception: /usr/include/c++/4.9.2/bits/atomic_lockfree_defines.h: /usr/include/c++/4.9.2/bits/char_traits.h: /usr/include/c++/4.9.2/bits/stl_algobase.h: /usr/include/c++/4.9.2/bits/functexcept.h: /usr/include/c++/4.9.2/bits/exception_defines.h: /usr/include/c++/4.9.2/bits/cpp_type_traits.h: /usr/include/c++/4.9.2/ext/type_traits.h: /usr/include/c++/4.9.2/ext/numeric_traits.h: /usr/include/c++/4.9.2/bits/stl_pair.h: /usr/include/c++/4.9.2/bits/move.h: /usr/include/c++/4.9.2/bits/concept_check.h: /usr/include/c++/4.9.2/bits/stl_iterator_base_types.h: /usr/include/c++/4.9.2/bits/stl_iterator_base_funcs.h: /usr/include/c++/4.9.2/debug/debug.h: /usr/include/c++/4.9.2/bits/stl_iterator.h: /usr/include/c++/4.9.2/bits/ptr_traits.h: /usr/include/c++/4.9.2/bits/predefined_ops.h: /usr/include/c++/4.9.2/bits/localefwd.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++locale.h: /usr/include/c++/4.9.2/clocale: /usr/include/locale.h: /usr/include/bits/locale.h: /usr/include/c++/4.9.2/cctype: /usr/include/ctype.h: /usr/include/bits/types.h: /usr/include/bits/typesizes.h: /usr/include/endian.h: /usr/include/bits/endian.h: /usr/include/bits/byteswap.h: /usr/include/bits/byteswap-16.h: /usr/include/c++/4.9.2/bits/ios_base.h: /usr/include/c++/4.9.2/ext/atomicity.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/gthr.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/gthr-default.h: /usr/include/pthread.h: /usr/include/sched.h: /usr/include/time.h: /usr/include/bits/sched.h: /usr/include/bits/time.h: /usr/include/bits/timex.h: /usr/include/bits/pthreadtypes.h: /usr/include/bits/setjmp.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/atomic_word.h: /usr/include/c++/4.9.2/bits/locale_classes.h: /usr/include/c++/4.9.2/string: /usr/include/c++/4.9.2/bits/allocator.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++allocator.h: /usr/include/c++/4.9.2/ext/new_allocator.h: /usr/include/c++/4.9.2/new: /usr/include/c++/4.9.2/bits/ostream_insert.h: /usr/include/c++/4.9.2/bits/cxxabi_forced.h: /usr/include/c++/4.9.2/bits/stl_function.h: /usr/include/c++/4.9.2/backward/binders.h: /usr/include/c++/4.9.2/bits/range_access.h: /usr/include/c++/4.9.2/bits/basic_string.h: /usr/include/c++/4.9.2/bits/basic_string.tcc: /usr/include/c++/4.9.2/bits/locale_classes.tcc: /usr/include/c++/4.9.2/streambuf: /usr/include/c++/4.9.2/bits/streambuf.tcc: /usr/include/c++/4.9.2/bits/basic_ios.h: /usr/include/c++/4.9.2/bits/locale_facets.h: /usr/include/c++/4.9.2/cwctype: /usr/include/wctype.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/ctype_base.h: /usr/include/c++/4.9.2/bits/streambuf_iterator.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/ctype_inline.h: /usr/include/c++/4.9.2/bits/locale_facets.tcc: /usr/include/c++/4.9.2/bits/basic_ios.tcc: /usr/include/c++/4.9.2/bits/ostream.tcc: /usr/include/c++/4.9.2/vector: /usr/include/c++/4.9.2/bits/stl_construct.h: /usr/include/c++/4.9.2/ext/alloc_traits.h: /usr/include/c++/4.9.2/bits/stl_uninitialized.h: /usr/include/c++/4.9.2/bits/stl_vector.h: /usr/include/c++/4.9.2/bits/stl_bvector.h: /usr/include/c++/4.9.2/bits/vector.tcc: include/gtest/internal/gtest-internal.h: include/gtest/internal/gtest-port.h: /usr/include/stdlib.h: /usr/include/bits/waitflags.h: /usr/include/bits/waitstatus.h: /usr/include/sys/types.h: /usr/include/sys/select.h: /usr/include/bits/select.h: /usr/include/bits/sigset.h: /usr/include/sys/sysmacros.h: /usr/include/alloca.h: /usr/include/bits/stdlib-bsearch.h: /usr/include/bits/stdlib-float.h: /usr/include/libio.h: /usr/include/_G_config.h: /usr/include/bits/stdio_lim.h: /usr/include/bits/sys_errlist.h: /usr/include/bits/stdio.h: /usr/include/string.h: /usr/include/sys/stat.h: /usr/include/bits/stat.h: /usr/include/c++/4.9.2/iostream: /usr/include/c++/4.9.2/istream: /usr/include/c++/4.9.2/bits/istream.tcc: /usr/include/c++/4.9.2/sstream: /usr/include/c++/4.9.2/bits/sstream.tcc: /usr/include/unistd.h: /usr/include/bits/posix_opt.h: /usr/include/bits/environments.h: /usr/include/bits/confname.h: /usr/include/getopt.h: /usr/include/strings.h: /usr/include/regex.h: /usr/include/c++/4.9.2/typeinfo: /usr/include/c++/4.9.2/tr1/tuple: /usr/include/c++/4.9.2/utility: /usr/include/c++/4.9.2/bits/stl_relops.h: /usr/include/sys/wait.h: /usr/include/signal.h: /usr/include/bits/signum.h: /usr/include/bits/siginfo.h: /usr/include/bits/sigaction.h: /usr/include/bits/sigcontext.h: /usr/include/bits/sigstack.h: /usr/include/sys/ucontext.h: /usr/include/bits/sigthread.h: /usr/include/c++/4.9.2/stdexcept: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/float.h: /usr/include/c++/4.9.2/iomanip: /usr/include/c++/4.9.2/set: /usr/include/c++/4.9.2/bits/stl_tree.h: /usr/include/c++/4.9.2/bits/stl_set.h: /usr/include/c++/4.9.2/bits/stl_multiset.h: include/gtest/gtest-message.h: include/gtest/internal/gtest-string.h: include/gtest/internal/gtest-filepath.h: include/gtest/internal/gtest-type-util.h: /usr/include/c++/4.9.2/cxxabi.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/cxxabi_tweaks.h: include/gtest/gtest-death-test.h: include/gtest/internal/gtest-death-test-internal.h: include/gtest/gtest-param-test.h: include/gtest/internal/gtest-param-util.h: /usr/include/c++/4.9.2/iterator: /usr/include/c++/4.9.2/bits/stream_iterator.h: include/gtest/internal/gtest-linked_ptr.h: /usr/include/assert.h: include/gtest/gtest-printers.h: include/gtest/internal/gtest-param-util-generated.h: include/gtest/gtest_prod.h: include/gtest/gtest-test-part.h: include/gtest/gtest-typed-test.h: include/gtest/gtest_pred_impl.h: src/gtest.cc: include/gtest/gtest-spi.h: /usr/include/math.h: /usr/include/bits/huge_val.h: /usr/include/bits/huge_valf.h: /usr/include/bits/huge_vall.h: /usr/include/bits/inf.h: /usr/include/bits/nan.h: /usr/include/bits/mathdef.h: /usr/include/bits/mathcalls.h: /usr/include/bits/mathinline.h: /usr/include/c++/4.9.2/algorithm: /usr/include/c++/4.9.2/bits/stl_algo.h: /usr/include/c++/4.9.2/cstdlib: /usr/include/c++/4.9.2/bits/algorithmfwd.h: /usr/include/c++/4.9.2/bits/stl_heap.h: /usr/include/c++/4.9.2/bits/stl_tempbuf.h: /usr/include/fcntl.h: /usr/include/bits/fcntl.h: /usr/include/bits/fcntl-linux.h: /usr/include/bits/uio.h: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/limits.h: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/syslimits.h: /usr/include/limits.h: /usr/include/bits/posix1_lim.h: /usr/include/bits/local_lim.h: /usr/include/linux/limits.h: /usr/include/bits/posix2_lim.h: /usr/include/bits/xopen_lim.h: /usr/include/sys/mman.h: /usr/include/bits/mman.h: /usr/include/bits/mman-linux.h: /usr/include/sys/time.h: /usr/include/arpa/inet.h: /usr/include/netinet/in.h: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stdint.h: /usr/include/stdint.h: /usr/include/sys/socket.h: /usr/include/sys/uio.h: /usr/include/bits/socket.h: /usr/include/bits/socket_type.h: /usr/include/bits/sockaddr.h: /usr/include/asm/socket.h: /usr/include/asm-generic/socket.h: /usr/include/asm/sockios.h: /usr/include/asm-generic/sockios.h: /usr/include/bits/in.h: /usr/include/netdb.h: /usr/include/rpc/netdb.h: /usr/include/bits/netdb.h: src/gtest-internal-inl.h: /usr/include/errno.h: /usr/include/bits/errno.h: /usr/include/linux/errno.h: /usr/include/asm/errno.h: /usr/include/asm-generic/errno.h: /usr/include/asm-generic/errno-base.h: src/gtest-death-test.cc: src/gtest-filepath.cc: /usr/include/c++/4.9.2/climits: src/gtest-port.cc: src/gtest-printers.cc: src/gtest-test-part.cc: src/gtest-typed-test.cc: dlt-daemon-2.18.6/gtest-1.7.0/src/.deps/gtest_main.Plo000066400000000000000000000315141377520261000220400ustar00rootroot00000000000000src/gtest_main.lo: src/gtest_main.cc /usr/include/stdc-predef.h \ /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ /usr/include/gnu/stubs-32.h \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/typesizes.h \ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ /usr/include/bits/stdio.h include/gtest/gtest.h \ /usr/include/c++/4.9.2/limits \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++config.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/os_defines.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/cpu_defines.h \ /usr/include/c++/4.9.2/ostream /usr/include/c++/4.9.2/ios \ /usr/include/c++/4.9.2/iosfwd /usr/include/c++/4.9.2/bits/stringfwd.h \ /usr/include/c++/4.9.2/bits/memoryfwd.h \ /usr/include/c++/4.9.2/bits/postypes.h /usr/include/c++/4.9.2/cwchar \ /usr/include/bits/wchar.h /usr/include/xlocale.h \ /usr/include/c++/4.9.2/exception \ /usr/include/c++/4.9.2/bits/atomic_lockfree_defines.h \ /usr/include/c++/4.9.2/bits/char_traits.h \ /usr/include/c++/4.9.2/bits/stl_algobase.h \ /usr/include/c++/4.9.2/bits/functexcept.h \ /usr/include/c++/4.9.2/bits/exception_defines.h \ /usr/include/c++/4.9.2/bits/cpp_type_traits.h \ /usr/include/c++/4.9.2/ext/type_traits.h \ /usr/include/c++/4.9.2/ext/numeric_traits.h \ /usr/include/c++/4.9.2/bits/stl_pair.h \ /usr/include/c++/4.9.2/bits/move.h \ /usr/include/c++/4.9.2/bits/concept_check.h \ /usr/include/c++/4.9.2/bits/stl_iterator_base_types.h \ /usr/include/c++/4.9.2/bits/stl_iterator_base_funcs.h \ /usr/include/c++/4.9.2/debug/debug.h \ /usr/include/c++/4.9.2/bits/stl_iterator.h \ /usr/include/c++/4.9.2/bits/ptr_traits.h \ /usr/include/c++/4.9.2/bits/predefined_ops.h \ /usr/include/c++/4.9.2/bits/localefwd.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++locale.h \ /usr/include/c++/4.9.2/clocale /usr/include/locale.h \ /usr/include/bits/locale.h /usr/include/c++/4.9.2/cctype \ /usr/include/ctype.h /usr/include/endian.h /usr/include/bits/endian.h \ /usr/include/bits/byteswap.h /usr/include/bits/byteswap-16.h \ /usr/include/c++/4.9.2/bits/ios_base.h \ /usr/include/c++/4.9.2/ext/atomicity.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/gthr.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/gthr-default.h \ /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ /usr/include/bits/sched.h /usr/include/bits/time.h \ /usr/include/bits/timex.h /usr/include/bits/pthreadtypes.h \ /usr/include/bits/setjmp.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/atomic_word.h \ /usr/include/c++/4.9.2/bits/locale_classes.h \ /usr/include/c++/4.9.2/string /usr/include/c++/4.9.2/bits/allocator.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++allocator.h \ /usr/include/c++/4.9.2/ext/new_allocator.h /usr/include/c++/4.9.2/new \ /usr/include/c++/4.9.2/bits/ostream_insert.h \ /usr/include/c++/4.9.2/bits/cxxabi_forced.h \ /usr/include/c++/4.9.2/bits/stl_function.h \ /usr/include/c++/4.9.2/backward/binders.h \ /usr/include/c++/4.9.2/bits/range_access.h \ /usr/include/c++/4.9.2/bits/basic_string.h \ /usr/include/c++/4.9.2/bits/basic_string.tcc \ /usr/include/c++/4.9.2/bits/locale_classes.tcc \ /usr/include/c++/4.9.2/streambuf \ /usr/include/c++/4.9.2/bits/streambuf.tcc \ /usr/include/c++/4.9.2/bits/basic_ios.h \ /usr/include/c++/4.9.2/bits/locale_facets.h \ /usr/include/c++/4.9.2/cwctype /usr/include/wctype.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/ctype_base.h \ /usr/include/c++/4.9.2/bits/streambuf_iterator.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/ctype_inline.h \ /usr/include/c++/4.9.2/bits/locale_facets.tcc \ /usr/include/c++/4.9.2/bits/basic_ios.tcc \ /usr/include/c++/4.9.2/bits/ostream.tcc /usr/include/c++/4.9.2/vector \ /usr/include/c++/4.9.2/bits/stl_construct.h \ /usr/include/c++/4.9.2/ext/alloc_traits.h \ /usr/include/c++/4.9.2/bits/stl_uninitialized.h \ /usr/include/c++/4.9.2/bits/stl_vector.h \ /usr/include/c++/4.9.2/bits/stl_bvector.h \ /usr/include/c++/4.9.2/bits/vector.tcc \ include/gtest/internal/gtest-internal.h \ include/gtest/internal/gtest-port.h /usr/include/stdlib.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ /usr/include/sys/types.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h \ /usr/include/sys/sysmacros.h /usr/include/alloca.h \ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \ /usr/include/string.h /usr/include/sys/stat.h /usr/include/bits/stat.h \ /usr/include/c++/4.9.2/iostream /usr/include/c++/4.9.2/istream \ /usr/include/c++/4.9.2/bits/istream.tcc /usr/include/c++/4.9.2/sstream \ /usr/include/c++/4.9.2/bits/sstream.tcc /usr/include/unistd.h \ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ /usr/include/bits/confname.h /usr/include/getopt.h \ /usr/include/strings.h /usr/include/regex.h \ /usr/include/c++/4.9.2/typeinfo /usr/include/c++/4.9.2/tr1/tuple \ /usr/include/c++/4.9.2/utility /usr/include/c++/4.9.2/bits/stl_relops.h \ /usr/include/sys/wait.h /usr/include/signal.h /usr/include/bits/signum.h \ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ /usr/include/bits/sigcontext.h /usr/include/bits/sigstack.h \ /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h \ /usr/include/c++/4.9.2/stdexcept \ /usr/lib/gcc/i686-redhat-linux/4.9.2/include/float.h \ /usr/include/c++/4.9.2/iomanip /usr/include/c++/4.9.2/set \ /usr/include/c++/4.9.2/bits/stl_tree.h \ /usr/include/c++/4.9.2/bits/stl_set.h \ /usr/include/c++/4.9.2/bits/stl_multiset.h include/gtest/gtest-message.h \ include/gtest/internal/gtest-string.h \ include/gtest/internal/gtest-filepath.h \ include/gtest/internal/gtest-type-util.h /usr/include/c++/4.9.2/cxxabi.h \ /usr/include/c++/4.9.2/i686-redhat-linux/bits/cxxabi_tweaks.h \ include/gtest/gtest-death-test.h \ include/gtest/internal/gtest-death-test-internal.h \ include/gtest/gtest-param-test.h \ include/gtest/internal/gtest-param-util.h \ /usr/include/c++/4.9.2/iterator \ /usr/include/c++/4.9.2/bits/stream_iterator.h \ include/gtest/internal/gtest-linked_ptr.h /usr/include/assert.h \ include/gtest/gtest-printers.h \ include/gtest/internal/gtest-param-util-generated.h \ include/gtest/gtest_prod.h include/gtest/gtest-test-part.h \ include/gtest/gtest-typed-test.h include/gtest/gtest_pred_impl.h /usr/include/stdc-predef.h: /usr/include/stdio.h: /usr/include/features.h: /usr/include/sys/cdefs.h: /usr/include/bits/wordsize.h: /usr/include/gnu/stubs.h: /usr/include/gnu/stubs-32.h: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stddef.h: /usr/include/bits/types.h: /usr/include/bits/typesizes.h: /usr/include/libio.h: /usr/include/_G_config.h: /usr/include/wchar.h: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/stdarg.h: /usr/include/bits/stdio_lim.h: /usr/include/bits/sys_errlist.h: /usr/include/bits/stdio.h: include/gtest/gtest.h: /usr/include/c++/4.9.2/limits: /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++config.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/os_defines.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/cpu_defines.h: /usr/include/c++/4.9.2/ostream: /usr/include/c++/4.9.2/ios: /usr/include/c++/4.9.2/iosfwd: /usr/include/c++/4.9.2/bits/stringfwd.h: /usr/include/c++/4.9.2/bits/memoryfwd.h: /usr/include/c++/4.9.2/bits/postypes.h: /usr/include/c++/4.9.2/cwchar: /usr/include/bits/wchar.h: /usr/include/xlocale.h: /usr/include/c++/4.9.2/exception: /usr/include/c++/4.9.2/bits/atomic_lockfree_defines.h: /usr/include/c++/4.9.2/bits/char_traits.h: /usr/include/c++/4.9.2/bits/stl_algobase.h: /usr/include/c++/4.9.2/bits/functexcept.h: /usr/include/c++/4.9.2/bits/exception_defines.h: /usr/include/c++/4.9.2/bits/cpp_type_traits.h: /usr/include/c++/4.9.2/ext/type_traits.h: /usr/include/c++/4.9.2/ext/numeric_traits.h: /usr/include/c++/4.9.2/bits/stl_pair.h: /usr/include/c++/4.9.2/bits/move.h: /usr/include/c++/4.9.2/bits/concept_check.h: /usr/include/c++/4.9.2/bits/stl_iterator_base_types.h: /usr/include/c++/4.9.2/bits/stl_iterator_base_funcs.h: /usr/include/c++/4.9.2/debug/debug.h: /usr/include/c++/4.9.2/bits/stl_iterator.h: /usr/include/c++/4.9.2/bits/ptr_traits.h: /usr/include/c++/4.9.2/bits/predefined_ops.h: /usr/include/c++/4.9.2/bits/localefwd.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++locale.h: /usr/include/c++/4.9.2/clocale: /usr/include/locale.h: /usr/include/bits/locale.h: /usr/include/c++/4.9.2/cctype: /usr/include/ctype.h: /usr/include/endian.h: /usr/include/bits/endian.h: /usr/include/bits/byteswap.h: /usr/include/bits/byteswap-16.h: /usr/include/c++/4.9.2/bits/ios_base.h: /usr/include/c++/4.9.2/ext/atomicity.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/gthr.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/gthr-default.h: /usr/include/pthread.h: /usr/include/sched.h: /usr/include/time.h: /usr/include/bits/sched.h: /usr/include/bits/time.h: /usr/include/bits/timex.h: /usr/include/bits/pthreadtypes.h: /usr/include/bits/setjmp.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/atomic_word.h: /usr/include/c++/4.9.2/bits/locale_classes.h: /usr/include/c++/4.9.2/string: /usr/include/c++/4.9.2/bits/allocator.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/c++allocator.h: /usr/include/c++/4.9.2/ext/new_allocator.h: /usr/include/c++/4.9.2/new: /usr/include/c++/4.9.2/bits/ostream_insert.h: /usr/include/c++/4.9.2/bits/cxxabi_forced.h: /usr/include/c++/4.9.2/bits/stl_function.h: /usr/include/c++/4.9.2/backward/binders.h: /usr/include/c++/4.9.2/bits/range_access.h: /usr/include/c++/4.9.2/bits/basic_string.h: /usr/include/c++/4.9.2/bits/basic_string.tcc: /usr/include/c++/4.9.2/bits/locale_classes.tcc: /usr/include/c++/4.9.2/streambuf: /usr/include/c++/4.9.2/bits/streambuf.tcc: /usr/include/c++/4.9.2/bits/basic_ios.h: /usr/include/c++/4.9.2/bits/locale_facets.h: /usr/include/c++/4.9.2/cwctype: /usr/include/wctype.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/ctype_base.h: /usr/include/c++/4.9.2/bits/streambuf_iterator.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/ctype_inline.h: /usr/include/c++/4.9.2/bits/locale_facets.tcc: /usr/include/c++/4.9.2/bits/basic_ios.tcc: /usr/include/c++/4.9.2/bits/ostream.tcc: /usr/include/c++/4.9.2/vector: /usr/include/c++/4.9.2/bits/stl_construct.h: /usr/include/c++/4.9.2/ext/alloc_traits.h: /usr/include/c++/4.9.2/bits/stl_uninitialized.h: /usr/include/c++/4.9.2/bits/stl_vector.h: /usr/include/c++/4.9.2/bits/stl_bvector.h: /usr/include/c++/4.9.2/bits/vector.tcc: include/gtest/internal/gtest-internal.h: include/gtest/internal/gtest-port.h: /usr/include/stdlib.h: /usr/include/bits/waitflags.h: /usr/include/bits/waitstatus.h: /usr/include/sys/types.h: /usr/include/sys/select.h: /usr/include/bits/select.h: /usr/include/bits/sigset.h: /usr/include/sys/sysmacros.h: /usr/include/alloca.h: /usr/include/bits/stdlib-bsearch.h: /usr/include/bits/stdlib-float.h: /usr/include/string.h: /usr/include/sys/stat.h: /usr/include/bits/stat.h: /usr/include/c++/4.9.2/iostream: /usr/include/c++/4.9.2/istream: /usr/include/c++/4.9.2/bits/istream.tcc: /usr/include/c++/4.9.2/sstream: /usr/include/c++/4.9.2/bits/sstream.tcc: /usr/include/unistd.h: /usr/include/bits/posix_opt.h: /usr/include/bits/environments.h: /usr/include/bits/confname.h: /usr/include/getopt.h: /usr/include/strings.h: /usr/include/regex.h: /usr/include/c++/4.9.2/typeinfo: /usr/include/c++/4.9.2/tr1/tuple: /usr/include/c++/4.9.2/utility: /usr/include/c++/4.9.2/bits/stl_relops.h: /usr/include/sys/wait.h: /usr/include/signal.h: /usr/include/bits/signum.h: /usr/include/bits/siginfo.h: /usr/include/bits/sigaction.h: /usr/include/bits/sigcontext.h: /usr/include/bits/sigstack.h: /usr/include/sys/ucontext.h: /usr/include/bits/sigthread.h: /usr/include/c++/4.9.2/stdexcept: /usr/lib/gcc/i686-redhat-linux/4.9.2/include/float.h: /usr/include/c++/4.9.2/iomanip: /usr/include/c++/4.9.2/set: /usr/include/c++/4.9.2/bits/stl_tree.h: /usr/include/c++/4.9.2/bits/stl_set.h: /usr/include/c++/4.9.2/bits/stl_multiset.h: include/gtest/gtest-message.h: include/gtest/internal/gtest-string.h: include/gtest/internal/gtest-filepath.h: include/gtest/internal/gtest-type-util.h: /usr/include/c++/4.9.2/cxxabi.h: /usr/include/c++/4.9.2/i686-redhat-linux/bits/cxxabi_tweaks.h: include/gtest/gtest-death-test.h: include/gtest/internal/gtest-death-test-internal.h: include/gtest/gtest-param-test.h: include/gtest/internal/gtest-param-util.h: /usr/include/c++/4.9.2/iterator: /usr/include/c++/4.9.2/bits/stream_iterator.h: include/gtest/internal/gtest-linked_ptr.h: /usr/include/assert.h: include/gtest/gtest-printers.h: include/gtest/internal/gtest-param-util-generated.h: include/gtest/gtest_prod.h: include/gtest/gtest-test-part.h: include/gtest/gtest-typed-test.h: include/gtest/gtest_pred_impl.h: dlt-daemon-2.18.6/gtest-1.7.0/src/.dirstamp000066400000000000000000000000001377520261000200270ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/src/.libs/000077500000000000000000000000001377520261000172245ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/src/.libs/gtest-all.o000066400000000000000000124133441377520261000213140ustar00rootroot00000000000000ELFĖ]4(C@įčéę23ëėíîīđņōķôõö56÷øųúûüũū˙     DE !"#$%&/0'(89)*AB+,;<-.>?JKMNPQ]^STVWYZ`acdfgijlmoprsuvxy{|€ƒ„†‡‰ŠŒŽ‘“”–—™šœŸ ĸŖĨύŠĢŦŽ¯ą˛´ĩˇ¸ēģŊžĀÁÃÄÆĮÉĘĖÍĪĐŌĶáâÕÖØŲÛÜŪßäåįčęëíîđņķôö÷ųúüũ˙    !#$&')*,-/0235689;<>?ABDEGHJKMNPQSTVWYZ\]_`bcefhiklnoqrtuwxz{}~€‡ŒŽ‘’”•—˜™›žŸĄĸ¤Ĩ§ŠĒŦ­¯°ąŗ´ļ¸šēŧŊŋĀÂÃÅĮČĘËÍÎĪŅŌÔÕרÚÛŨŪāáãåæčéëíīņķõ÷ųûũ˙   !#%()68:ķÍ´&ŧ'ķÍ´&ŧ'V‹D$‹P ‹p1Ā9ōt´&‹ €yt€yƒØ˙ƒÂ9Öuę^ÃV‹D$‹P ‹p1Ā9ōt´&‹ €yƒØ˙ƒÂ9Öuđ^ÍļV‹D$‹P ‹p1Ā9ōt´&‹ €yƒØ˙ƒÂ9Öuđ^ÍļV‹D$‹P ‹p1Ā9ōt´&‹ €yƒØ˙ƒÂ9Öuđ^Íļ‹T$‹B+B ÁøÃfķÍ´&ŧ'ƒė ‹T$‹D$ƒ:uÆ@‹@ƒė‹RP˙QƒÄЍvŧ'U‰åWVSčü˙˙˙Ãƒė ‹M‹ƒ‹y ‹qƒĀ‰9÷t#t&‹…Āt ‹ƒė P˙RƒÄƒÆ9÷uį‹E‹x…˙t ƒė Wčü˙˙˙ƒÄeô[^_]ÉƋE‹P…Ōt ƒė Rčü˙˙˙ƒÄƒė Včü˙˙˙´&VSčü˙˙˙Ãƒė‹t$Včü˙˙˙‰4$čü˙˙˙ƒÄ[^Ѝ´&VSčü˙˙˙ÃƒėD$‹t$$PƒPVčü˙˙˙ƒÄ$‰đ[^ÂUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R ‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹l$‹t$€}t9‹U‹E )ĐÁø…Āt*1˙ļ‹ēƒėƒĮ‹VP˙R,‹U‹E ƒÄ)ĐÁø9ĮrŪ^_]ÃfUWV‹|$‹l$€t:‹G‹w )ÆÁūƒîx*Áæë vŧ'‹G‹0ƒėƒî‹UP˙RƒÄƒūüuå^_]ÐUWV‹|$‹l$€t:‹G‹w )ÆÁūƒîx*Áæë vŧ'‹G‹0ƒėƒî‹UP˙R0ƒÄƒūüuå^_]ÐUWV‹|$‹l$€t:‹G‹w )ÆÁūƒîx*Áæë vŧ'‹G‹0ƒėƒî‹UP˙R$ƒÄƒūüuå^_]ÐUWV‹|$‹l$€t:‹G‹w )ÆÁūƒîx*Áæë vŧ'‹G‹0ƒėƒî‹UP˙R(ƒÄƒūüuå^_]ÐUWV‹|$‹l$€t:‹G‹w )ÆÁūƒîx*Áæë vŧ'‹G‹0ƒėƒî‹UP˙R8ƒÄƒūüuå^_]ÐUWV‹t$‹|$€~t=‹V‹F )ĐÁø…Āt.1íļ‹ǃėƒÅ‹W˙t$P˙R ‹V‹F ƒÄ)ĐÁø9ÅrÚ^_]Í´&ŧ'UWV‹t$‹l$€~t>‹V‹F )ĐÁøƒčx.<…ë ļ‹V‹:ƒėƒī‹ U˙t$R˙Q4ƒÄƒ˙üuá^_]Íļŧ'UW‰ÁVƒė‹Q‹D$ ‰Æ‰D$‹)ÂÁú…ŌtNƒæ‰Ī1í‰t$ 1öv‹L$ ‹¨‹D$…Ét ‹‹L$‹D˙ƒė ƒÅR˙ЋWƋƒÄ)ÂÁú9Õr˃ĉđ^_]Ã1öëķ´&ŧ'UW‰ĮVSčü˙˙˙Ãƒė …ĀtWž1íŗ„Ōu*ëF´&ƒė ƒĮƒÅRčü˙˙˙žƒÄ„Ōt&ũų/€ú uÚƒė ƒĮƒÅVčü˙˙˙žƒÄ„ŌuÚƒÄ [^_]Éöŧ'ƒƒė Pčü˙˙˙ƒÄƒÄ [^_]ÍļVSčü˙˙˙Ãƒė‹‹…Étš˙˙˙˙đÁH…É~ƒÄ[^Ãf‹Hq˙…ɉpëƒėRPčü˙˙˙ƒÄƒÄ[^ÃU‰Á‰åWVS1˙čü˙˙˙Ãƒė,‰EЉUԋƒƒĀ ‰ƒ‰EĖļƒėWj ˙uÔčü˙˙˙ƒÄ ‰Æj ˙uĖ˙uĐčü˙˙˙ƒÄƒū˙tX‹EԃƉō)ú‹‹@ô9Į‡šRW}ä˙uÔWčü˙˙˙XZW˙uĐčü˙˙˙‹EäƒÄƒč ;ƒu‰÷듍vUā‰÷čūū˙˙넍t&‹Eԋ‹@ô9Į‡uāj˙W˙uÔVčü˙˙˙Y_V˙uĐčü˙˙˙‹EāƒÄƒč ;ƒu ‹EЍeô[^_]ÍUäčĒū˙˙‹EЍeô[^_]ÃPƒWPƒPčü˙˙˙‰Æ‹EЋƒč ;ƒtUßčpū˙˙ƒė Včü˙˙˙PƒWPƒPčü˙˙˙‰Æ‹Eāƒč ;ƒtēUäč:ū˙˙밉ƋEäƒč ;ƒt Uāč ū˙˙떍´&ŧ'UWVSčü˙˙˙Ãƒė,‹L$@‹|$DĮD$ÆD$…É„ĄЍt$‰T$‰$ƒ1í‰D$D$‰D$ ‹$ļ(ƒÅP˙t$jVčü˙˙˙‰4$čü˙˙˙ƒÄ PVWčü˙˙˙ƒÄ;l$@tM‹D$č…ítèuÆD$ ƒėjD$!PWčü˙˙˙ƒÄëĨt&ÆD$-ƒėj˙t$Wčü˙˙˙ƒÄ뇍´&ƒÄ,[^_]Ѝ´&WV‰ĮS‰Öčü˙˙˙Ã…Ōt*ƒė Rčü˙˙˙ƒÄ P‹VPRčü˙˙˙ƒÄ‰ø[^_Ѝ´&ƒƒėjP‹ƒĀPčü˙˙˙ƒÄ‰ø[^_ÃU‰åWVSčü˙˙˙Ãƒė(jčü˙˙˙‰Æ‹E ƒÄ ‰‹E‰F‹E‰FEįPF ˙uPčü˙˙˙‹EƒÄ‰0eô[^_]Ãƒė ‰ĮVčü˙˙˙‰<$čü˙˙˙ļŋVSčü˙˙˙Ãƒė‹t$ ‹…Ōt‹B ƒč ;ƒuƒė Rčü˙˙˙ƒÄƒÄ[^ÍļT$čü˙˙‹ëېfU‰åWVSčü˙˙˙Ãƒė‹}‹ƒ‹0…ötMƒėj:Včü˙˙˙ƒÄ…Āt#Uį)đRPVWčü˙˙˙ƒÄeô‰ø[^_]ļEįƒėPVWčü˙˙˙ëې´&EįƒėPƒPWčü˙˙˙ƒÄëŊƒė Pčü˙˙˙ëõļŋWVS‹D$‹|$čü˙˙˙ÃpļļF˙N˙<*t6~<:tS‰ų‰ú€ųŸÁ€ú ”ÂŅtՋE‹‹PôJ;Hø‰MÔw‹Hü…É~ƒė˙uÔ˙učü˙˙˙‹EƒÄ‹‹Pô‰ųˆ ‹E‹Pô;“u%‹E ƒÆ‹‹PôÂ9Öu‹Eeô[^_]´&‹}ÔĮ@ü‰xôÆ8ëČ‰Æ‹E‹Aô;ƒtUįčģá˙˙ƒė Včü˙˙˙fUWVSčü˙˙˙Ãƒė ‹t$4ƒ‹l$8j PVčü˙˙˙ƒƒÄ‰D$ƒ‰D$ ë(ļƒė)čPUoVčü˙˙˙ƒÄ j˙t$Včü˙˙˙ƒÄƒė˙t$Učü˙˙˙ƒÄ…‰ĮuȃėUVčü˙˙˙ƒÄ j˙t$Včü˙˙˙ƒÄ,[^_]Ѝ´&ŧ'VSčü˙˙˙Ãƒė‹t$jčü˙˙˙‹“Æ@Į@Į@ Į@ƒÂ‰‰ĮFĮFƒÄ[^Ѝvŧ'VSčü˙˙˙Ãƒė‹D$‹0…öt#‹“Ā‹@9Đuƒė Včü˙˙˙‰4$čü˙˙˙ƒÄƒÄ[^Ѝt&ƒė V˙ЃÄƒÄ[^А´&Sčü˙˙˙Ãƒė‹D$‹T$9Pt49PtƒėR˙0čü˙˙˙ƒÄ[Í´&ƒėĮ@R˙0čü˙˙˙ƒÄ[ЃėĮ@R˙0čü˙˙˙ƒÄ[А´&‹D$‹Ã´&‹D$‹ļ@Ѝt&‹D$‹Æ@Ѝt&Sčü˙˙˙Ãƒė‹D$˙p$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė‹D$˙p$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė‹D$˙p$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė‹D$˙p$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė‹D$˙p$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė‹D$˙p$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė‹D$˙p$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė‹D$˙p$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė‹D$˙p$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė‹D$˙p$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė‹D$˙p$čü˙˙˙ƒÄ[ËD$‹@$‹ė‹€čÍļŋ‹D$‹@$‹ô‹€đÍļŋVSčü˙˙˙Ãƒė‹D$‹p$Včü˙˙˙ƒÄ1Ō…Ā~ ƒÄ‰Đ[^Ãfƒė ÆˆVčü˙˙˙ƒÄƒđƒÄ‰Â‰Đ[^ÐVSčü˙˙˙Ãƒė‹D$‹p$Včü˙˙˙ƒÄ…Āē~ƒÄ‰Đ[^Í´&ƒė ÆˆVčü˙˙˙ƒÄ‰ÂƒÄ‰Đ[^ÍļŋWV‹D$ ‹L$‹p$1Ā…Éx‹~`‹Vd)úÁú9Ņ} ‹…Ōx‹FT‹ˆ^_Í´&ŧ'UWVSčü˙˙˙Ãƒė(˙t$<čü˙˙˙‹ƒÄ…ĀĮD$‰L$ ué׍´&ƒD$ƒė ˙t$<čü˙˙˙ƒÄ9D$˛ƒė˙t$˙t$<čü˙˙˙ƒÄ€x,‰ĮtĮƒė 1öPčü˙˙˙ƒÄ…ĀuëŗvƒÆƒė Wčü˙˙˙ƒÄ9Æ}ƒėVWčü˙˙˙ƒÄ€x‰Åt؍@ƒė Pčü˙˙˙ƒÄ„ĀtŃė˙t$jčü˙˙˙ƒƒÄ ˙u˙wPčü˙˙˙‰,$čü˙˙˙Į$ čü˙˙˙ƒÄ뉉öŧ'ƒÄ[^_]Ѝ´&‹D$‹@$ˆÃfWV‹D$ ‹t$‹H$1Ā…öx‹y`‹Qd)úÁú9Ö} ‹ˇ…Ōx‹AT‹^_Í´&ŧ'‹D$‹@$ĖÐf‹D$‹@$‹@Ѝt&‹D$‹@$‹€āÃf‹D$‹@$ƒĀlЍt&Sčü˙˙˙Ãƒė‹D$‹ø…Ōtƒė ĖPčü˙˙˙ƒÄƒÄ[Íļŧ'WVSčü˙˙˙Ãƒė ģŠ Wčü˙˙˙ƒÄ…‰Æt#ƒƒėPVčü˙˙˙ƒÄ…Ātƒė Pčü˙˙˙ƒÄ[^_̓WVPjčü˙˙˙X‹ƒ˙0čü˙˙˙Į$čü˙˙˙‰öŧ'‹D$ ™÷|$;T$”ĀЍ´&ŧ'UWVSčü˙˙˙Ãƒė‹D$0ĮD$‹@T‰Á‰D$‹D$0‹@X‰D$ )ȍ‹Áø…‰ $„:´&‹D$‹L$1ö‹,ˆ1ɋU‹E ‰×)ĮÁ˙…˙uxéņvƒė˙w˙t$ čü˙˙˙‹G ƒÄ…Āt1‹…Āt+ƒŸ ƒėPƒPčü˙˙˙‹G ƒÄ…Ā„å‹čŲ˙˙ƒė j čü˙˙˙‹E ‹UƒÄš‰×ƒÆ)ĮÁ˙9ūsh‹<°€té„Éuƒƒƒė˙uPčü˙˙˙‹EƒÄ…Āt-‹…Ōt'ƒĒ ƒėPƒPčü˙˙˙‹EƒÄ…Āty‹čĸØ˙˙ƒė j čü˙˙˙ƒÄé(˙˙˙‹D$0‹@T‰D$‹D$0‹@X‰D$ ‹D$ +D$ƒD$‹L$Áø9Á‚Îū˙˙‹ƒƒė ˙0čü˙˙˙ƒÄƒÄ[^_]Ív1Āé˙˙˙‰öŧ'1Ā녍ļŋWVƒė‹t$‹|$‹†Ø9øt…Āt ƒė ‹P˙RƒÄ‰žØƒÄ^_Ѝļŋ‹T$‹Š„ÂˆA…ÉDÂЍļWV1öS‹|$čü˙˙˙Ã‹WT‹GX)ĐÁø…Āt+t&ƒė ˙4˛čü˙˙˙‹G`‹WTƒÄ‰4°‹GXƒÆ)ĐÁø9ÆrÚ[^_Í´&ŧ'ļD$Ívŧ'Sčü˙˙˙Ãƒėjčü˙˙˙ƒÄ„Āu ƒÄ¸[Ãė jčü˙˙˙“ƒÄ jRPčü˙˙˙ļŧ'UWVSčü˙˙˙Ãƒė‹l$,Učü˙˙˙ƒÄ ‰Æ‹D$(‹8VUWčü˙˙˙ƒÄ1Ō…Āu ‹D$$ūē‰0ƒÄ ‰Đ[^_]ÐVSčü˙˙˙Ãƒė‰D$t$ƒVPčü˙˙˙ƒÄ„ĀuƒƒėVPčü˙˙˙ƒÄ„Āt]ƒƒėVPčü˙˙˙ƒÄ„Āt1ƒÄ[^ÃļƒƒėVPčü˙˙˙ƒÄ„ĀuŨƒƒėVPčü˙˙˙ƒÄƒÄ[^Ѝ´&ƒƒėVPčü˙˙˙ƒÄ„ĀuŒëĄ´&U‰åWVSčü˙˙˙Ãƒė,‹E‹u ‰EĖ‹E…Ā„ā…ö„؍Eڃė}āPƒPWčü˙˙˙YXW}äWčü˙˙˙ƒƒÄ jPWčü˙˙˙XEÜZWP‰EÔčü˙˙˙‰4$čü˙˙˙ƒÄ PV˙uÔčü˙˙˙‹E䋋ƒÄƒč ‰MÔ9Čuy‹Eāƒč ;EÔu~‹u܃ė‹VôRV˙u‰UĐčü˙˙˙ƒÄ1É…Ā‹UĐtFô;EÔudeô‰Č[^_]ÃfU€}Ėļt„‰Ņtڃš<=DĘëˍ´&eô1ɉČ[^_]Ít&UÛčpÕ˙˙éz˙˙˙v‰účaÕ˙˙év˙˙˙t&‰ú‰MÔčNÕ˙˙‹MÔ덉ƋE܋ģƒč ‰}Ô9øtUÛč,Õ˙˙‹Eäƒč ;EÔtUÛčÕ˙˙‹Eāƒč ;EÔtUÛčÕ˙˙ƒė Včü˙˙˙‰Æ‹Eä‹ģƒč ‰}Ô9øtĪUÜčāÔ˙˙ëʼnƋƒ‰EÔëĨ‰Æ‹ƒ‰EÔëĢt&Sčü˙˙˙Ãƒė j˙t$˙t$čü˙˙˙ƒÄ…Āt+ļ‰Đƒāß/uëvƒÆļƒėVWčü˙˙˙“ƒÄ j RPčü˙˙˙‰4$čü˙˙˙ƒÄ‰|$‰Â[‰đ^_éū˙˙´&ƒƒėjPWčü˙˙˙ƒÄ[^_Ãë ‹D$‹L$‹‹Pô‰L$éJū˙˙vŧ'UW‰ÅVS‰Öčü˙˙˙Ãƒė ‹|$4‰T$ƒj‰D$PWčü˙˙˙ƒÄ…ötxƒ‹M1ö‰D$ ‰öŧ'‰ú‰ČƒÆčtũ˙˙;4$tOƒø‹LĩuæļÁ9Áu߃ė Q‰L$čü˙˙˙ƒÄ…Ā‹L$tĮƒėj˙t$Wčü˙˙˙ƒÄ j˙t$Wčü˙˙˙ƒÄ‹L$렍ƒƒėjPWčü˙˙˙ƒÄƒÄ[^_]ÍvVSčü˙˙˙Ãƒė‹T$‹D$‹t$…Ōt‹Lü…Ét(ƒė Vč˙ū˙˙ƒƒÄ jPVčü˙˙˙ƒÄ[^Í´&‰t$ƒÄƒę[^éĪū˙˙ë WVS‹t$čü˙˙˙Ã‹|$…öt>ƒėVWčü˙˙˙“ƒÄ j RPčü˙˙˙‰4$čü˙˙˙ƒÄ‰|$‰Â[‰đ^_éoū˙˙´&ƒƒėjPWčü˙˙˙ƒÄ[^_Ãë ‹D$‹L$‹‹Pô‰L$é*ū˙˙vŧ'U‰åWVSčü˙˙˙Ãƒė8‹U‹} ‹ƒƒĀ ‰Wčü˙˙˙ZYƒĀP˙učü˙˙˙ļ7ƒÄ‰đ„Ā„įƒ‰EĐëdt&<%}h< td‹E‹‹PôJ;Hø‰MÔw‹Hü…É~ƒė˙uÔ˙učü˙˙˙‹EƒÄ‹‹Pô‰ņˆ ‹E‹Pô;“…¤ƒĮļ7‰đ„Ātx‰đ<&~š‰đ<=uœEāƒė‰Á‰đžđ‰MÔVQčü˙˙˙^uäX˙uÔ˙uĐVčü˙˙˙‰4$˙učü˙˙˙‹EäƒÄƒč ;ƒu8‹Eāƒč ;ƒt–‰ōƒĮč0ĸ˙˙ļ7‰đ„Āu´&‹Eeô[^_]vUßčĸ˙˙랍ļ‹UÔĮ@ü‰PôÆéF˙˙˙‰Æ‹E‹ƒč ;ƒtUßčĐĄ˙˙ƒė Včü˙˙˙‰Æ‹Eäƒč ;ƒtUßč¯Ą˙˙‹Eāƒč ;ƒtšUß虡˙˙믉ÆëäfU‰åWVSčü˙˙˙Ãƒė,‹E ‹u‹‹Rô…Ō„}܃ėPWčü˙˙˙‰<$}āWčü˙˙˙ƒÄ j/jWčü˙˙˙EäƒÄ ˙uWP‰EÔčü˙˙˙X˙uÔVčü˙˙˙‰4$čü˙˙˙‹Eä‹ģƒÄƒč 9øuS‹Eāƒč 9øuY‹E܃č 9øu/eô‰đ[^_]vƒė˙uVčü˙˙˙ƒÄeô‰đ[^_]t&‹UÔčĀ ˙˙ëĮļUÛč° ˙˙ëŖļ‹UÔč  ˙˙ë‹ģ‰Æ‹E܃č 9øtUÛ脠˙˙ƒė Včü˙˙˙‰Eԋ‹ģƒč 9øtUÛča ˙˙‹uԋEäƒč 9øtUÛčL ˙˙‹Eāƒč 9øtŦUÛč: ˙˙ëĸ‰Æ‹ģëĐ‰Æ‹ģëØ‰Æ‹Eā‹ģƒč 9ø„x˙˙˙Uäč ˙˙ék˙˙˙U‰åWVS}āčü˙˙˙Ãƒė4˙u‹uWčü˙˙˙‹EāƒÄ ‹@ô…Āu0ƒė˙u Včü˙˙˙‹ģƒÄ‹Eāƒč 9øuaeô‰đ[^_]t&Eäƒė˙u P‰EÔčü˙˙˙ƒƒÄ jP˙uÔčü˙˙˙ƒÄ W˙uÔVčü˙˙˙‹Eä‹ģƒÄ ƒč 9øtŸUßčRŸ˙˙땍UäčHŸ˙˙eô‰đ[^_]Â‹ģ‰Æ‹Eāƒč 9øtUßč"Ÿ˙˙ƒė Včü˙˙˙‰Æ‹Eä‹ģƒč 9øtĶUßč˙ž˙˙ëÉëât&ŧ'Sčü˙˙˙Ãƒė˙t$ļD$Pčü˙˙˙ƒÄ[Íļŧ'Sčü˙˙˙Ãƒė˙t$žD$Pčü˙˙˙ƒÄ[Íļŧ'Sčü˙˙˙Ãƒė˙t$˙t$čü˙˙˙ƒÄ[Ãë U‰åWVSMāuŦčü˙˙˙Ãƒėpƒ}‹}“ƒQ‰M”EÂPVčü˙˙˙E°‰E˜‰$‹ƒ‰E¤čü˙˙˙‹ƒ‰<$‰E¤čü˙˙˙ƒÄƒø„lƒė ‹ƒW‰E¤čü˙˙˙Y‰ÆXƒP‹E°ƒĀP‹ƒ‰E¤čü˙˙˙‹EŦƒÄ ˙pôP‹E°ƒĀP‹ƒ‰E¤čü˙˙˙XƒZ‰EœP‹E°ƒĀP‹ƒ‰E¤čü˙˙˙YXƒP‹E°ƒĀP‹ƒ‰E¤čü˙˙˙X‹E°ZVƒĀP‹ƒ‰E¤čü˙˙˙ƒY^P‹E°ƒĀP‹ƒ‰E¤čü˙˙˙ƒÄ1öéTƒė‹ƒVW‰E¤čü˙˙˙‹M°‰E ƒÄ ‹“j˙uœA‰U¤Pčü˙˙˙X‹E°Z˙u ƒĀP‹ƒ‰E¤čü˙˙˙ƒÄƒÆƒė ‹ƒW‰E¤čü˙˙˙ƒÄ9Æ|”EĐƒė ‰EœP‹ƒ‰E¤čü˙˙˙E´uԉE P‹ƒ‰E¤čü˙˙˙‹E´Y_xE¸˙u˜P‹ƒ‰E¤čü˙˙˙X‹E¸Z˙pôPWčü˙˙˙‹E¸‹“ƒÄƒč ‰U¤9Đ…š‹uԅö„ȍuԍEŧƒė˙u Pčü˙˙˙‹}ŧWčü˙˙˙ƒÄ PW˙uÔčü˙˙˙‹EŧƒÄƒč ;E¤…‹E´…Ātƒė jčü˙˙˙ƒÄ„ĀuGƒė˙uœ˙učü˙˙˙_XjVčü˙˙˙ƒÄƒėj˙u˜čü˙˙˙‹EŦƒÄƒč ;E¤… ‹Eeô[^_]‹E´…Āt˛‹ƒė P˙RƒÄ뤃ė‹ƒjW‰E¤čü˙˙˙‰ĮƒÄ‹9E„‹EØƒė ‹‹P‰E ‰M¤čü˙˙˙ƒ‰$˙u čü˙˙˙ZYVPčü˙˙˙Z“YRPčü˙˙˙Y“^RPčü˙˙˙^ZWPčü˙˙˙ZYP˙učü˙˙˙EÜ^_jP‹ƒ‰E¤čü˙˙˙‹ƒƒÄ‰E¤é˙˙˙‹E ƒė˙0˙wčü˙˙˙ƒÄ…Ātz‹ƒƒė ˙u‰E¤čü˙˙˙‹ƒƒÄ ‰E¤éÔū˙˙‹U”č’š˙˙‹Eeô[^_]‹U”č}š˙˙é:ū˙˙‹U”čpš˙˙érū˙˙ƒė uÔjčü˙˙˙‹}¤ZYW ‰PVčü˙˙˙ƒÄéū˙˙‹ƒƒė ˙u”‰E¤čü˙˙˙ƒ‰$‹ƒ˙u”‰E¤čü˙˙˙ZYVP‹ƒ‰E¤čü˙˙˙‰ÆE‰E ‰$‹ƒ‰E¤čü˙˙˙ƒƒÄ j P‹EƒĀP‹ƒ‰E¤čü˙˙˙‹FƒÄ…Ā„‹ƒ‰E¤Eăė˙u Pčü˙˙˙‹UÄR‰Uœčü˙˙˙‹UœƒÄ PR˙včü˙˙˙‹Eăăč ;E¤…‹EĀ…Āt$ƒė jčü˙˙˙ƒÄ„Āt‹EĀ…Āt ‹ƒė P˙RƒÄƒė˙u Včü˙˙˙‰ÆEȉE ‰$čü˙˙˙ƒƒÄ jP‹EȃĀPčü˙˙˙‹FƒÄ…Ā„ąE˃ė˙u Pčü˙˙˙‹UĖR‰Uœčü˙˙˙‹UœƒÄ PR˙včü˙˙˙‹E˃ăč ;E¤ua‹EȅĀt$ƒė jčü˙˙˙ƒÄ„Āt‹EȅĀt ‹ƒė P˙RƒÄƒƒėPVčü˙˙˙ZYWPčü˙˙˙Y^P˙učü˙˙˙XEäZjPčü˙˙˙é§ü˙˙UØčh˜˙˙땍UØč^˜˙˙éâū˙˙ƒė jčü˙˙˙ZY‹M¤Q ‰PFPčü˙˙˙ƒÄé)˙˙˙‰Æƒėj˙u čü˙˙˙ƒÄEäƒėjPčü˙˙˙ƒÄƒėj˙u˜čü˙˙˙ƒÄ‹EŦƒč ;E¤tUĢčí—˙˙ƒė Včü˙˙˙‰Æ‹E˃č ;E¤tĻUØčĪ—˙˙뜉ƋEăč ;E¤tUØč¸—˙˙ƒėj˙u čü˙˙˙ƒÄë…ƒė ‹ƒj‰E¤čü˙˙˙ZY‹‹Q ‰M¤‰PFPčü˙˙˙ƒÄéŊũ˙˙‰Æëĩ‰ÆéE˙˙˙‰ÆE܃ėjPčü˙˙˙‹ƒƒÄ‰E¤é5˙˙˙‰ĮƒėjV‰ūčü˙˙˙ƒÄé˙˙˙‰Æ‹E¸‹ģƒč ‰}¤9øt‹U”č—˙˙‰÷uԃėj˙u čü˙˙˙ƒÄ뷉Įë扯éßū˙˙‰Į‹Eŧƒč ;E¤t֋U”čږ˙˙ëˉÆéŅū˙˙U‰åWVS}āčü˙˙˙Ãƒė4‰EЍEԃú‹u ‰UÔPWDučü˙˙˙‰<$}äWčü˙˙˙ƒƒÄ jPWčü˙˙˙XZW˙uĐčü˙˙˙‰4$čü˙˙˙ƒÄ PV˙uĐčü˙˙˙‹E䋺ƒÄƒč 9đu‹Eāƒč 9đu,‹EЍeô[^_]Éöŧ'Ußč(–˙˙‹Eāƒč 9đtڍļ‰úč–˙˙‹EЍeô[^_]ÉĮ‹E䋺ƒč 9đu-‹Eāƒč 9đtUßčâ•˙˙ƒė Wčü˙˙˙‹ŗ‰Į‹Eäƒč 9đtĶUßčŋ•˙˙ëɉĮ‹ŗëŋ‰Į‹EЋŗ‹ƒč 9đt΍Uß藕˙˙ëЍt&U‰åVSčü˙˙˙Ãƒė‹u Včü˙˙˙‹ƒÄ‰ÂEôQ‹Qč‰ū˙˙XƒZPjčü˙˙˙ƒƒÄ ˙v˙uôPčü˙˙˙‹FƒÄ…ĀtZ‹…ĀtTƒėPƒĒ PƒPčü˙˙˙‹ƒƒÄƒė ˙0čü˙˙˙‹EôƒÄƒč ;ƒu eø[^]ÃfUķ訔˙˙eø[^]Ѓė j čü˙˙˙ëˇ‰Æ‹Eôƒč ;ƒtUķčŦ”˙˙ƒė Včü˙˙˙vU‰åWVSčü˙˙˙Ãƒė|jhč˙u˙u čü˙˙˙‰E¤E¤‰$čü˙˙˙ƒÄ…‰Æ„Eäƒė˙6P‰E€čü˙˙˙MØX˙vQ‰M„čü˙˙˙XUĖ˙vR‰Uˆčü˙˙˙X}Ā˙v W‰}Œčü˙˙˙E´‰Á‹F‰MƒĀ‰$Qčü˙˙˙‹FU¨uŦ‰$Vl‰•|˙˙˙‰E¨čü˙˙˙YU°_ģ‰U”WVRčü˙˙˙Xu¸Z˙u˙u”Včü˙˙˙YXEŧWVP‰Įčü˙˙˙XuÄZ˙uŒWVčü˙˙˙Yƒ_}ČPVWčü˙˙˙XuĐZ˙uˆWVčü˙˙˙YUÔ_ģ‰U”WVRčü˙˙˙XuÜZ˙u„˙u”Včü˙˙˙YXEāWVP‰E”‰Įčü˙˙˙XZ˙u€W˙učü˙˙˙‹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eô[^_]EäƒėPƒP˙učü˙˙˙‹EƒÄeô[^_]vŧ'UŖč’˙˙éņū˙˙v‹U”č’˙˙éīū˙˙v‹U”čø‘˙˙éíū˙˙v‹U”čč‘˙˙éëū˙˙v‹U”čؑ˙˙ééū˙˙v‹U”čȑ˙˙éįū˙˙v‹U”踑˙˙éåū˙˙v‹U”訑˙˙éãū˙˙v‹U”č˜‘˙˙éáū˙˙v‹U”čˆ‘˙˙éßū˙˙v‹U”čx‘˙˙éŨū˙˙v‹U”čh‘˙˙éÛū˙˙v‹U”čX‘˙˙éŲū˙˙v‹U”čH‘˙˙é×ū˙˙v‹U”č8‘˙˙éÕū˙˙‰Į‹E⋺ƒč 9đtUŖč‘˙˙‹E܃č 9đtUŖč‘˙˙‹Eԃč 9đtUŖčõ˙˙‹EЃč 9đtUŖčã˙˙‹Eȃč 9đtUŖčҐ˙˙‹Eăč 9đtUŖčŋ˙˙‹Eŧƒč 9đtUŖč­˙˙‹E¸ƒč 9đtUŖč›˙˙‹E°ƒč 9đtUŖč‰˙˙‹EŦƒč 9đtUŖčw˙˙‹E´ƒč 9đt ‹•|˙˙˙čb˙˙‹Eƒč 9đtU¨čP˙˙‹E˃č 9đtU¨č>˙˙‹E؃č 9đtU¨č,˙˙‹Eäƒč 9đtU¨č˙˙ƒė Wčü˙˙˙‰Į‹ŗéëū˙˙‰Į‹ŗéđū˙˙‰Į‹ŗéõū˙˙‰Į‹ŗéúū˙˙‰Į‹ŗé˙ū˙˙‰Į‹ŗé˙˙˙‰Į‹ŗé ˙˙˙‰Į‹ŗé˙˙˙‰Į‹ŗé˙˙˙‰Į‹ŗé˙˙˙‰Į‹ŗé ˙˙˙‰Į‹ŗé%˙˙˙‰Į‹ŗé*˙˙˙‰Į‹ŗé/˙˙˙vŧ'U‰åWVSčü˙˙˙ÃƒėL‹M‹}‹ŗ…ɍF ‰EÄ…˛Eȃė‰Áƒ‰M´PWQčü˙˙˙X}ĖZ˙u˙u´Wčü˙˙˙Eĉ<$P‰E´čü˙˙˙‹E˃č}äƒč 9đ…e‹Eȃč 9đ…ƒė˙u´Wčü˙˙˙‰<$čü˙˙˙ƒÄ W˙u ˙učü˙˙˙‹EäƒÄ ƒč 9đ…K‹Eăč 9đ…%‹Eeô[^_]´&Eԃė‰ÂE‰U°PRčü˙˙˙YMĐXƒ‰M´PWQčü˙˙˙X}ØZ˙u°˙u´Wčü˙˙˙YXE܉ƒ‰U´PWRčü˙˙˙X}āZ˙u˙u´Wčü˙˙˙Eĉ<$P‰E´čü˙˙˙‹EāƒÄ}äƒč 9đu<‹E܃č 9đuB‹E؃č 9đuH‹EЃč 9đuN‹Eԃč 9đ„ųū˙˙‰ú蹍˙˙éíū˙˙t&‰ú詍˙˙ëģ´&‰ú虍˙˙ëĩ´&‰ú艍˙˙믍´&‰účy˙˙늍´&‰úči˙˙éū˙˙t&‰účY˙˙‹Eeô[^_]t&Uāč@˙˙é¨ū˙˙‰Į‹Eԃč 9đu9‹Eăč 9đtUÃč˙˙ƒė Wčü˙˙˙‰Į‹E˃č 9đtUäč˙˙‹Eȃč 9đtĮUäčîŒ˙˙ëŊ‰Į‹Eäƒč 9đtąUā訌˙˙막ĮëŖ‰Į‹Eāƒč 9đtUä辌˙˙‹E܃č 9đtUäčŦŒ˙˙‹E؃č 9đtUä蚌˙˙‹EЃč 9đ„S˙˙˙Uä脌˙˙éF˙˙˙‰Įéx˙˙˙‰Įëļ‰ĮëĉĮëŌé{˙˙˙ļU‰åWVS}äčü˙˙˙Ãƒė0‹uƒWPVčü˙˙˙EãƒÄ1Ō‰EĐëvƒė Včü˙˙˙ƒÄ„Ā‹UÔtEƒė B˙uR˙u˙u W‰EÔčü˙˙˙ƒÄWVčü˙˙˙‹EäƒÄƒč ;ƒtš‹UĐčŲ‹˙˙믍´&eô‰đ[^_]‰Į‹ƒč ;ƒtUã譋˙˙ƒė Wčü˙˙˙‰Į‹Eäƒč ;ƒtŌUã茋˙˙ëȍvŧ'U‰åWVSuä}Øčü˙˙˙Ãƒė@‹E “čV…ĀDÂPWčü˙˙˙‹EƒÄ…ĀˆĸEāƒė‰ÁE‰MÄPQčü˙˙˙‰<$}ÜWčü˙˙˙“ƒÄ jRW‰UĀčü˙˙˙ƒÄ ˙uÄWVčü˙˙˙‰4$˙učü˙˙˙ƒÄ j˙uĀ˙učü˙˙˙‹Eä‹ģƒÄƒč 9øuq‹E܃č 9øuw‹Eāƒč 9øu}‹E؃č 9øu9‹Eeô[^_]ÂļƒƒėPW˙učü˙˙˙‹E؋ģƒÄ ƒč 9øtĮ‰ōčsŠ˙˙‹Eeô[^_]ļU×čXŠ˙˙녍ļ‰ōčIŠ˙˙é}˙˙˙t&‰ōč9Š˙˙éw˙˙˙‹ģ‰Æ‹E؃č 9øtU×čŠ˙˙ƒė Včü˙˙˙‹ģ‰Æ‹Eäƒč 9øtU×č÷‰˙˙‹E܃č 9øtU×čå‰˙˙‹Eāƒč 9øt¯U×č͉˙˙ëĨ‰Æ‹ģëЉEċE܋ģƒč 9øt‰ō證˙˙‹uÄëÉƋģ뚉ƋE‹ģ‹ƒč 9øtU×肉˙˙ét˙˙˙ļŋU‰åWVSčü˙˙˙Ãƒė,‹E ‹U‹…‰‰MĐtƒø„ƒø“ƒD‰EЍEäƒė˙u˙uPčü˙˙˙‹Eä‹ģƒÄ ‰Eԋ‹@ô‹t8|…ö„€~„žF'ƒėPWčü˙˙˙‰$čü˙˙˙ƒÄ ‰Æj ˙uĐPčü˙˙˙ƒƒÄ jPVčü˙˙˙‹EԃÄ…Ā„—‹}ԃė Wčü˙˙˙ƒÄ PWVčü˙˙˙ƒÄƒƒėjPVčü˙˙˙‹EäƒÄƒč ;ƒuzeô[^_]Ãfƒė Včü˙˙˙‹ƒÄ‹P;“¸ „U˙˙˙ƒėj V˙ԃÄžĀéB˙˙˙vƒ‰EĐéņū˙˙vŧ'‹ƒė‹Pôō‹BƒČPRčü˙˙˙éd˙˙˙t&Uãčč‡˙˙eô[^_]Ãčü˙˙˙‰Æ‹Eäƒč ;ƒtUãčÇ˙˙ƒė Včü˙˙˙vŧ'U‰åWVSčü˙˙˙Ãƒė8‹u‹} imNÆA90%˙˙˙‰1Ā…˙•ĀPčü˙˙˙ƒÄ„ĀuPƒh'PEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ j-PWčü˙˙˙Y˙uÔčü˙˙˙ƒÄƒė 1} €–ĀPčü˙˙˙ƒÄ„Āt‹1Ō÷u eô[^_‰Đ]Ívƒh)PEäjP‰EÔčü˙˙˙‹ģƒƒÄ j%PWčü˙˙˙ƒƒÄ jPWčü˙˙˙XZ˙u Wčü˙˙˙‰ĮƒƒÄ jPWčü˙˙˙ƒƒÄ j*PWčü˙˙˙ZYh€Wčü˙˙˙“ƒÄ jRPčü˙˙˙X˙uÔčü˙˙˙ƒÄéG˙˙˙ƒė ˙uԉÆčü˙˙˙‰4$čü˙˙˙ƒė ˙uԉÆčü˙˙˙‰4$čü˙˙˙Sčü˙˙˙Ãƒė‹T$BP‹B+BÁøPj˙t$ čü˙˙˙ƒÄ[Ѝ´&ŧ'UWVSčü˙˙˙Ãƒė ‹l$ ‹E|}`ĩäWƒĀPjVčü˙˙˙ƒÄW‹EX1˙+ETÁøP‹E|ƒĀPVčü˙˙˙‹UT‹EXƒÄ)ĐÁø…Āt#fƒėV˙4ēƒĮčü˙˙˙‹UT‹EXƒÄ)ĐÁø9Įr៎ [^_]ЍļU1‰åWVSčü˙˙˙ÃƒėX‹uƒ~˙”ĀPčü˙˙˙ƒÄ„Ā„÷EȉE´1Ā‹M´ĮƒĀƒø rîEĀĮEĐĮEĀPQ˙v ˙včü˙˙˙ƒÄ…Ā… ƒ~˙‹}Ā”Â…˙•Ā ˆU´uëwt&ƒ~˙”Â„Ō‹tb…˙t^ƒė˙w ˙w˙wčü˙˙˙ƒÄƒø˙‰FļU´tՃė˙w˙wPčü˙˙˙ƒÄƒø˙uˇƒė ˙včü˙˙˙ļU´ƒÄĮF˙˙˙˙‹„ŌuĨ´&‹}ƒė Wčü˙˙˙ƒÄƒ~˙„Įeô[^_]Í´&ƒho PEČjP‰E´čü˙˙˙‹ģƒƒÄ j PWčü˙˙˙ƒƒÄ jDPWčü˙˙˙Y˙u´čü˙˙˙ƒÄéēū˙˙ƒė Pčü˙˙˙MĉE°ƒƒÄh} PjQ‰M´čü˙˙˙‹ģƒƒÄ j(PWčü˙˙˙XZ˙u°Wčü˙˙˙Y˙u´čü˙˙˙ƒÄéšū˙˙ļƒh’ PEÄjP‰Į‰E´čü˙˙˙XƒZP˙ŗčü˙˙˙‹VƒÄ ˙rôRPčü˙˙˙Z“YRPčü˙˙˙‹V ƒÄ ˙rôRPčü˙˙˙‰<$čü˙˙˙ƒÄeô[^_]Ãė ˙u´‰Æčü˙˙˙‰4$čü˙˙˙ƒė ˙u´‰Æčü˙˙˙‰4$čü˙˙˙ƒė ˙u´‰Æčü˙˙˙‰4$čü˙˙˙ë U‰åWVSčü˙˙˙Ãƒė<‹E‹} ‹…Ā„Tƒh}PEĖjP‰EÄčü˙˙˙‹ŗƒƒÄ j PVčü˙˙˙ƒÄ…˙„'ƒė Wčü˙˙˙ƒÄ PWVčü˙˙˙ƒÄƒƒėjPVčü˙˙˙^˙uÄčü˙˙˙ƒÄƒė j čü˙˙˙‰Æ‹E‰‰$čü˙˙˙‰F‹ƒƒĀ ‰FĮEĖ/tmpY˙uÄĮEĐ/capĮEÔtureĮEØd_stĮEÜreamĮEā.XXXĮEäXXXčü˙˙˙‰Į‹Eăĉ‹ ƒÂ˙ūūū÷Ņ!Č%€€€€tę‰ÁÁ銀€DÁJDŅ‹MăڍFƒė)ĘRQPčü˙˙˙Į$čü˙˙˙XZ˙6Wčü˙˙˙‰<$čü˙˙˙‹EƒÄ‰0eô[^_]Í´&EˉEÄé˙˙˙t&‹ƒė‹Pôō‹BƒČPRčü˙˙˙éŅū˙˙ƒė ˙uĉÆčü˙˙˙‰4$čü˙˙˙‰Į‹Fƒč ;ƒt‹UÄč߀˙˙ƒė Včü˙˙˙‰<$čü˙˙˙´&ŧ'Sčü˙˙˙Ãƒė ƒĐPƒPjčü˙˙˙ƒÄ[Í´&Sčü˙˙˙Ãƒė ƒÔPƒPjčü˙˙˙ƒÄ[ЍļU‰åWVSčü˙˙˙Ãƒė4‹ujVčü˙˙˙ƒÄ…‰ĮuPÆFĮF ĮF$ĮF(ĮF,ĮF0ĮF4ĮF8ĮF<ĮF@eô[^_]Ѝt&ƒhuPEäjP‰EÔčü˙˙˙ƒƒÄ j!P˙ŗčü˙˙˙ƒƒÄ jP˙ŗčü˙˙˙ZYW˙ŗčü˙˙˙X˙uÔčü˙˙˙ƒÄéI˙˙˙ƒė ˙uԉÆčü˙˙˙‰4$čü˙˙˙ļŋU‰åWVSčü˙˙˙Ãƒė,‹E‹€Ø…Āteô[^_]Í´&ƒė j(čü˙˙˙‰Æ‹ƒƒĀ‰_XFjPčü˙˙˙ƒÄ…‰Įu#‹EÆFĮF$‰°Øeô‰đ[^_]Ѝt&ƒhuPEäjP‰EÔčü˙˙˙ƒƒÄ j!P˙ŗčü˙˙˙ƒƒÄ jP˙ŗčü˙˙˙ZYW˙ŗčü˙˙˙X˙uÔčü˙˙˙ƒÄév˙˙˙‰Įƒė Včü˙˙˙‰<$čü˙˙˙ƒė ˙uԉĮčü˙˙˙ƒÄëŨt&U‰åWVSčü˙˙˙Ãƒė8‹uF P‰EĐčü˙˙˙ƒÄ…‰EĖu3čü˙˙˙‰F<‹E ƒė ÆF8‰F˙uĐčü˙˙˙ƒÄ…‰Æumeô[^_]Ѝt&ƒh<PEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙XZ˙uĖWčü˙˙˙_˙uÔčü˙˙˙ƒÄém˙˙˙ƒhHPEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙ZYVWčü˙˙˙X˙uÔčü˙˙˙ƒÄeô[^_]Ãė ˙uԉÆčü˙˙˙‰4$čü˙˙˙ƒė ˙uԉÆčü˙˙˙‰4$čü˙˙˙t&U‰åWVSčü˙˙˙Ãƒė8‹uF P‰EĖčü˙˙˙ƒÄ…‰EĐu3čü˙˙˙‰F<‹Fƒė ÆF8˙uˉEĐčü˙˙˙ƒÄ…‰Æum‹EЍeô[^_]Ãfƒh<PEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙XZ˙uĐWčü˙˙˙_˙uÔčü˙˙˙ƒÄém˙˙˙ƒhHPEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙ZYVWčü˙˙˙X˙uÔčü˙˙˙‹EЃÄeô[^_]Ãė ˙uԉÆčü˙˙˙‰4$čü˙˙˙ƒė ˙uԉÆčü˙˙˙‰4$čü˙˙˙fSčü˙˙˙Ãƒė‹D$˙pčü˙˙˙ZY‹˙t$P˙RƒÄ[Ít&U‰åWVSčü˙˙˙Ãƒė8‹uFP‰EĖčü˙˙˙ƒÄ…‰EĐu;čü˙˙˙‰F ‹F$ƒė ‹€„ÆF˙uˉEĐčü˙˙˙ƒÄ…‰Æuw‹EЍeô[^_]Ít&ƒh<PEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙XZ˙uĐWčü˙˙˙_˙uÔčü˙˙˙ƒÄée˙˙˙´&ƒhHPEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙ZYVWčü˙˙˙X˙uÔčü˙˙˙‹EЃÄeô[^_]Ãė ˙uԉÆčü˙˙˙‰4$čü˙˙˙ƒė ˙uԉÆčü˙˙˙‰4$čü˙˙˙fU‰åWVSčü˙˙˙Ãƒė8‹uFP‰EĖčü˙˙˙ƒÄ…‰EĐu;čü˙˙˙‰F ‹F$ƒė ‹€€ÆF˙uˉEĐčü˙˙˙ƒÄ…‰Æuw‹EЍeô[^_]Ít&ƒh<PEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙XZ˙uĐWčü˙˙˙_˙uÔčü˙˙˙ƒÄée˙˙˙´&ƒhHPEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙ZYVWčü˙˙˙X˙uÔčü˙˙˙‹EЃÄeô[^_]Ãė ˙uԉÆčü˙˙˙‰4$čü˙˙˙ƒė ˙uԉÆčü˙˙˙‰4$čü˙˙˙fU‰åWVSčü˙˙˙Ãƒė,‹E‹M‹@0‹q,9đtbMä‹ģ‰EԉMĐëv‹ƒč 9øu'ƒÆ9uÔt7‹Fƒč 9øtå‹UĐčex˙˙‹ƒč 9øtŨt&‹UЃÆčMx˙˙9uÔuҐ´&‹E‹@,…Āt ƒė Pčü˙˙˙ƒÄ‹E‹M‹@$‹q 9đ„ŒUä‹ģ‰EԉUĐë!t&‹F ƒč 9øu6‹Fƒč 9øuDƒÆ9uÔtT‹Fƒč 9øtڋUĐčŌw˙˙‹F ƒč 9øtԐ´&‹UĐč¸w˙˙‹Fƒč 9øtļ‹UЃÆčw˙˙9uÔu´´&‹E‹@ …Āt ƒė Pčü˙˙˙ƒÄƒė ˙učü˙˙˙ƒÄ…‰Æueô[^_]ÃļƒhyPEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙ZYVWčü˙˙˙X˙uÔčü˙˙˙ƒÄeô[^_]Ãė ˙uԉÆčü˙˙˙‰4$čü˙˙˙fU‰åWVS}äčü˙˙˙Ãƒė0‹U ‹uƒčW…ŌDЍEÜRP‰EÔčü˙˙˙‹UƒÄ…ŌxxEƒėPWčü˙˙˙XEā˙uÔP‰EÔčü˙˙˙ƒƒÄ jP˙uÔčü˙˙˙ƒÄ W˙uÔVčü˙˙˙‹Eā‹‹ƒÄ ƒč 9Ču_‹Eäƒč 9Čue‹E܃č 9Ču2eô‰đ[^_]´&ƒė˙uÔVčü˙˙˙‹E܋‹ƒÄƒč 9ČtΉúčv˙˙eô‰đ[^_]ļUۉMĐčåu˙˙‹MĐ둋UԉMĐčÕu˙˙‹MĐ닋‹‰Æ‹E܃č 9ČtUÛčļu˙˙ƒė Včü˙˙˙‰Æ‹Eā‹‹ƒč 9ČtUۉMÔču˙˙‹MԋEäƒč 9ČtģUۉMÔčxu˙˙‹MÔëĢëĉƋ‹ëڍ´&U‰åWVSčü˙˙˙Ãƒė,‹E ‹u‹@…Ā„ƒ‹‰Eԍ}äƒė Wčü˙˙˙ƒƒÄ j P‹EäƒĀPčü˙˙˙ƒÄ…ö„gƒė Včü˙˙˙ƒÄ P‹EäVƒĀPčü˙˙˙ƒƒÄƒėj P‹EäƒĀPčü˙˙˙‹uƒÄ…ö„Dƒė ˙učü˙˙˙ƒÄ P‹Eä˙uƒĀPčü˙˙˙‹EԃÄ€8tOƒƒėjP‹EäƒĀPčü˙˙˙‹uԉ4$čü˙˙˙ƒÄ P‹EäVƒĀPčü˙˙˙ƒƒÄ jP‹EäƒĀPčü˙˙˙ƒÄƒƒėj P‹EäƒĀPčü˙˙˙‹MƒÄ…É„ƃė ˙učü˙˙˙ƒÄ P‹Eä˙uƒĀPčü˙˙˙ƒÄƒėW˙učü˙˙˙‹UäƒÄ …Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹Eä…Āt ƒė ‹P˙RƒÄ‹Eeô[^_]Âļƒ‰EÔétū˙˙vŧ'ƒƒėP‹EäƒĀPčü˙˙˙é˜ū˙˙t&ƒƒėP‹EäƒĀPčü˙˙˙éŋū˙˙t&ƒƒėP‹EäƒĀPčü˙˙˙é=˙˙˙‰ÆPPjWčü˙˙˙‰4$čü˙˙˙U‰åWVSčü˙˙˙Ãƒė,‰EԋBģ‰EЋ…Ātˆƒøģ‹Buā‹Hô…ÉšDÁMäƒė˙rPQčü˙˙˙Včü˙˙˙‹EäƒÄ ˙pôP‹EāƒĀPčü˙˙˙ƒƒÄ jP‹EāƒĀPčü˙˙˙‰<$čü˙˙˙ƒÄ P‹EāWƒĀPčü˙˙˙‹EЃÄ…Ā„”‹}Đ1ƒÉ˙ōŽR‰Č÷ЃčP‹Eā˙uЃĀPčü˙˙˙fƒÄƒėV˙uÔčü˙˙˙‹}āƒÄ …˙t$ƒė jčü˙˙˙ƒÄ„Āt‹Eā…Āt ‹ƒė P˙RƒÄ‹Eäƒč ;ƒuE‹Eԍeô[^_]Ívŧ'ģéķū˙˙t&ƒƒėjP‹EāƒĀPčü˙˙˙és˙˙˙v‰ōčšq˙˙‹Eԍeô[^_]ÉƋEäƒč ;ƒtUßč–q˙˙ƒė Včü˙˙˙QQ‰ĮjV‰ūčü˙˙˙ƒÄë΍vŧ'U‰åWVSEäuāčü˙˙˙Ãƒė,‹U ‹}čū˙˙EۃėP˙uäVčü˙˙˙XZVWčü˙˙˙‹Eā‹‹ƒÄƒč ‰MÔ9Ču$‹Eäƒč ;EÔu1‹ƒƒĀ‰eô[^_]ÍļUßčđp˙˙‹Eäƒč ;EÔtԐt&‰ōčŲp˙˙ëÆ‰Æ‹ƒ‰EԋEäƒč ;EÔtUßčšp˙˙ƒė Včü˙˙˙‰Æ‹Eā‹ģƒč ‰}Ô9øtĪUßč“p˙˙ëŐU‰åVSčü˙˙˙Ãƒė‹U ‹ …Éu eø[^]Ѝt&Eôč0ũ˙˙ƒė ˙uôčü˙˙˙‹ŗX˙6čü˙˙˙‹EôƒÄƒč ;ƒuƒė ˙6čü˙˙˙ƒÄeø[^]ÃfUķčp˙˙ë≯‹Eôƒč ;ƒtUķčūo˙˙ƒė Včü˙˙˙t&U‰åWVS}Üčü˙˙˙Ãƒė8‹uWčü˙˙˙ƒƒÄ j$P‹E܃ĀPčü˙˙˙ƒÄ…ö„ƒė Včü˙˙˙ƒÄ P‹EÜVƒĀPčü˙˙˙ƒƒÄƒėjP‹E܃ĀPčü˙˙˙ƒƒÄ j?P‹E܃ĀPčü˙˙˙ƒƒÄ jP‹E܃ĀPčü˙˙˙ƒÄ…ö„Mƒė Včü˙˙˙ƒÄ P‹EÜVƒĀPčü˙˙˙ƒƒÄƒėj P‹E܃ĀPčü˙˙˙ƒƒÄ j>P‹E܃ĀPčü˙˙˙ƒƒÄ j=P‹E܃ĀPčü˙˙˙ƒƒÄ j=P‹E܃ĀPčü˙˙˙ƒƒÄ jCP‹E܃ĀPčü˙˙˙ƒƒÄ j P‹E܃ĀPčü˙˙˙^XEäWPčü˙˙˙Zuā‹EäY˙u˙u V‰EÔčü˙˙˙ƒƒÄ ˙uÔ˙uāP‹ƒ˙0čü˙˙˙‹Eā‹‹ƒÄƒč ‰MÔ9Čuz‹Eäƒč ;EÔu_ƒėjWčü˙˙˙ƒÄeô[^_]Éöŧ'ƒƒėP‹E܃ĀPčü˙˙˙ébū˙˙t&ƒƒėP‹E܃ĀPčü˙˙˙é˛ū˙˙t&‰ōčÉm˙˙똍´&UÛč¸m˙˙éy˙˙˙‰Æ‹Eā‹“ƒč ‰UÔ9ĐtUÛč–m˙˙‹Eäƒč ;EÔtUÛčƒm˙˙PPjWčü˙˙˙‰4$čü˙˙˙‰Æ‹ƒ‰EÔëΉÆëŨU‰åWVSčü˙˙˙Ãƒė(‹u ~Wčü˙˙˙ƒÄ„Ā…ĩƒƒėPjčü˙˙˙ƒÄƒƒė˙v˙6Pčü˙˙˙‰<$čü˙˙˙ƒÄ„Ā…š‹ƒ€8t_‹FX‹V\ƒė‰Eā‰UäE܍UāRPčü˙˙˙Xƒ˙uÜPčü˙˙˙‹E܃ăč ;ƒuj‹ƒƒė ˙0čü˙˙˙ƒÄeô[^_]Í´&ƒė j čü˙˙˙ƒÄëΐƒƒėPjčü˙˙˙ƒÄéF˙˙˙´&ƒė Včü˙˙˙ƒÄéU˙˙˙´&UÛč@l˙˙댉ƋE܃č ;ƒtUÛč&l˙˙ƒė Včü˙˙˙ļŋU‰åWVSčü˙˙˙Ãƒė<‹u ‹ƒ€8ueô[^_]Íļƒė Včü˙˙˙Y‹‰ÂEØ_Q‹QčíÔ˙˙Xƒ‹ģZPjčü˙˙˙X‹F0‹ģZ‹V4‰EāE܉UäUāRP‰UÄčü˙˙˙ƒƒÄ ˙uÜ˙v˙uØPčü˙˙˙‹E܋ģƒÄƒč 9øu8‹ƒƒė ˙0čü˙˙˙‹E؃ăč 9ø„I˙˙˙‹UÄč/k˙˙é<˙˙˙vŧ'U×čk˙˙랉ƋE؃č 9øtUāčk˙˙ƒė Včü˙˙˙‰Æ‹E܋ģƒč 9øtĶU×čßj˙˙ëɐļŋU‰åWVSčü˙˙˙ÃƒėD‹u ƒPjčü˙˙˙‰4$čü˙˙˙_Z“MāR“‰MÔR‰Â‰Čč´Ķ˙˙‹}ā‰4$čü˙˙˙Z“Y‰UĐR“MÜR‰UĖ‰Â‰Č‰MÄč„Ķ˙˙ƒƒÄ W˙uÜPčü˙˙˙‹E܋ģƒÄƒč 9ø…ú‹Eāƒč 9ø… ‹ƒ€8t=ƒė Včü˙˙˙‰Eā‰UäXZ˙uÔ˙uÄčü˙˙˙ƒY˙uÜPčü˙˙˙‹E܃ăč 9ø…tƒė j čü˙˙˙XƒZPjčü˙˙˙‰4$čü˙˙˙YZ‰Â‹EÔ˙uĐ˙uĖčĐŌ˙˙YXƒ˙uāPčü˙˙˙‹EāƒÄƒč 9ø…>ƒė Včü˙˙˙‰4$‰EČčü˙˙˙ƒÄ„Ā……ƒė Včü˙˙˙Z“‰EĀYRjčü˙˙˙X‹EĀZ˙uĐ˙uĖ‰Â‹EÔč^Ō˙˙YXƒ˙uāPčü˙˙˙‹EāƒÄƒč 9ø…œƒė Včü˙˙˙‹}ȍ“ƒƒÄ ƒ˙EÂPƒWPčü˙˙˙ƒÄƒė Včü˙˙˙ƒÄ…‰Æt7‹ƒ€8u,‹EȅĀtf“ƒƒūEÂPƒVPjčü˙˙˙ƒÄ‹ƒƒė ˙0čü˙˙˙ƒÄeô[^_]Íļ‹UÄčhh˙˙éW˙˙˙vUÛčXh˙˙éū˙˙vƒė j čü˙˙˙ƒÄ닐‹UÄč8h˙˙éĩū˙˙vUÛč(h˙˙‹Eāƒč 9ø„ūũ˙˙vŧ'‹UÄčh˙˙éįũ˙˙‹ģ‰Æ‹Eāƒč 9øu+ƒė Včü˙˙˙‰Æ‹Eāƒč 9øtë‹UÄčÔg˙˙ëá‰Æ‹E܃č 9øtՍUÛčžg˙˙ëËëŌ‰Æ‹E܋ģƒč 9øt­UÛč g˙˙ëŖ´&ŧ'U‰åWVSčü˙˙˙Ãƒė8ļE‹} ˆE֍EāP‰EĐčü˙˙˙‹ƒÄ‹Hô…ÉtW1ö´&ļ0JۈU׀ų‡Íļɋ”‹t ˙áļƒėƒjP‹EāƒĀPčü˙˙˙‹ƒÄƒÆ;pôrŗ‹}ЃėW˙učü˙˙˙Į$Wčü˙˙˙‹EƒÄeô[^_]´&ƒėƒjëĻv€}Ö„ļƒėƒj댉öŧ'ƒėƒjés˙˙˙€}Ötjƒėƒjé]˙˙˙vŧ'ļM×ƒé €ų–EՀ}× ļUÕ”ÁĘus€}׎>˙˙˙‹EāļM׍UۃėjRƒĀPˆMŪčü˙˙˙é˙˙˙´&‹EāUŨƒėjÆEŨ"RƒĀPčü˙˙˙éōū˙˙f‹EāU܃ėjÆEÜ'RƒĀPčü˙˙˙éŌū˙˙f€}Öt‘ļU׍EäƒėRPčü˙˙˙XƒZjP‹EāƒĀPčü˙˙˙‹EäƒÄ ˙pôP‹EāƒĀPčü˙˙˙ƒƒÄ jP‹EāƒĀPčü˙˙˙‹EäƒÄƒč ;ƒu‹éaū˙˙Ußčde˙˙‹éRū˙˙‰Æ‹Eäƒč ;ƒtUßčEe˙˙ƒėj˙uĐčü˙˙˙‰4$čü˙˙˙‰ÆëįļŋU‰åWVSEÜ1öčü˙˙˙Ãƒė8‰EĖPčü˙˙˙ƒÄéĨļƒė Wčü˙˙˙ƒÄ P‹EÜWƒĀPčü˙˙˙ƒƒÄƒėjP‹E܃ĀPčü˙˙˙‹E܍ģƒÄ jWƒĀPčü˙˙˙‹EäƒÄ ˙pôP‹E܃ĀPčü˙˙˙‹EÜƒÄ jWƒĀPčü˙˙˙‹EäƒÄƒč ;ƒ…ļ‹Eāƒč ;ƒ…”ƒÆƒė ˙u čü˙˙˙ƒÄ9ƍ›ƒėV˙u čü˙˙˙‰ĮEÚƒÄ PEā˙wP‰EÔčü˙˙˙MäƒÄ j˙uÔQ‰MĐčü˙˙˙Xƒ‹?ZjP‹E܃ĀPčü˙˙˙ƒÄ…˙…īū˙˙ƒƒėP‹E܃ĀPčü˙˙˙éîū˙˙t&‹UĐč¸c˙˙é_˙˙˙vUÛč¨c˙˙é=˙˙˙v‹u˃ėV˙učü˙˙˙Į$Včü˙˙˙‹EƒÄeô[^_]‰ƃėj˙uĖčü˙˙˙‰4$čü˙˙˙‰Æ‹Eä‹ģƒč 9øtUÛčCc˙˙‹Eāƒč 9øtĮUÛč1c˙˙ëŊ‰Æ‹ģë␍t&U‰åWVSčü˙˙˙ÃƒėL‹E ‹M‰E´1Ā€y u eô[^_]ÍvEŧƒė P‰EŦčü˙˙˙EĀ‹ŗP‰E°čü˙˙˙‹EƒÄ ‹ŗ‹xƒj P‹EƒĀPčü˙˙˙ƒÄ…˙„0ƒė Wčü˙˙˙ƒÄ ‹ŗP‹EĀWƒĀPčü˙˙˙‹EƒÄģƒė‹ŗjWƒĀPčü˙˙˙‹EƒÄ‹@ƒø„eŽīƒø„ƒø…Å‹UŦEȋŗčtb˙˙ƒƒėP‹EƒĀPčü˙˙˙ƒY^P‹EƒĀPčü˙˙˙‹EČƒÄ ˙pôP‹EƒĀPčü˙˙˙‹EȋŗƒÄƒč 9đ…M1˙Eāƒė˙u°P‰E´čü˙˙˙˙u´čü˙˙˙‹EāƒÄƒč 9đ…W‹UĀ…Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹EĀ…Āt ‹ƒė P˙RƒÄ‹Eŧƒč 9đ…eô[^_]Ít&ƒø…߀}´…Ĩ‹UŦE؋ŗč„a˙˙‹Eƒė ‹pEäP‰E´čü˙˙˙‰đƒÄƒā‰EŦ„ÖļEŦƒĀ<~*ƒƒėP‹EäƒĀPčü˙˙˙YX‹Eä˙uŦƒĀPčü˙˙˙ƒÄæ€tƒƒėP‹EäƒĀPčü˙˙˙ƒÄ‹u´EԃėVPčü˙˙˙Į$Včü˙˙˙XƒZP‹EƒĀPčü˙˙˙^XƒP‹EƒĀPčü˙˙˙‹EÔƒÄ ˙pôP‹EƒĀPčü˙˙˙X‹EĀZWƒĀPčü˙˙˙_XƒP‹EƒĀPčü˙˙˙‹EØƒÄ ˙pôP‹EƒĀPčü˙˙˙‹EԋŗƒÄƒč 9đ…Ą‹E؃č 9đ„0ū˙˙‹U´čô_˙˙é#ū˙˙´&‹UŦEċŗč'`˙˙ƒƒėP‹EƒĀPčü˙˙˙_XƒP‹EƒĀPčü˙˙˙‹EÄƒÄ ˙pôP‹EƒĀPčü˙˙˙‹EċŗƒÄƒč 9đ„ŗũ˙˙Uäčw_˙˙éĻũ˙˙fƒ}Üh;‹ŗPjWčü˙˙˙Yƒ^P˙ŗčü˙˙˙‰<$‹ŗčü˙˙˙ƒÄ1˙‹ŗéWũ˙˙‹UŦEĖ‹ŗč__˙˙ƒƒėP‹EƒĀPčü˙˙˙XƒZP‹EƒĀPčü˙˙˙‹EĖƒÄ ˙pôP‹EƒĀPčü˙˙˙‹EĖ‹ŗƒÄƒč 9đ„ëü˙˙é3˙˙˙fUäč¨^˙˙‰øé=ũ˙˙‹Eƒė‹ŗ˙p˙uŧčü˙˙˙ƒÄ„Ātrŋ‹ŗé¨ü˙˙fƒƒė‹ŗP‹EƒĀPčü˙˙˙éĪû˙˙´&Uäč@^˙˙éœü˙˙v‰đ‹UäƒėļĉEŦƒPBPčü˙˙˙é(ũ˙˙t&‹UŦEЋŗčO^˙˙‹Eƒė‹@‹0ƒP‹EƒĀPčü˙˙˙YXƒP‹EƒĀPčü˙˙˙‹E°ƒÄ‰ōč`˙˙ƒė‰ÆW‹ƒĀPčü˙˙˙XƒZP‹ƒĀPčü˙˙˙‹EĐƒÄ ˙pôP‹ƒĀPčü˙˙˙‹EЋŗƒÄƒč 9đ„ĸû˙˙éęũ˙˙‹U´ča]˙˙éRũ˙˙‰Į‹Eȋŗƒč 9đu6PPj˙u°čü˙˙˙ƒÄ‹Eŧƒč 9đtUģč)]˙˙ƒė Wčü˙˙˙‰Į‹Eāƒč 9đtʍUäč ]˙˙ë‰Įëŧ‰ĮëĮQQ‰Įj˙u´čü˙˙˙‹ŗƒÄ‹E؃č 9đt—UāčŲ\˙˙덉Į‹EĖ‹ŗƒč 9đ„w˙˙˙ëĢƒė ‰ÆW‰÷čü˙˙˙ƒÄ‹ŗéZ˙˙˙‰Į‹Eċŗƒč 9đ„D˙˙˙éu˙˙˙‰Į‹ŗë”‰Į‹Eԋŗƒč 9đt‚‹U´če\˙˙éu˙˙˙‰Į‹EЋŗƒč 9đ„˙˙˙é1˙˙˙t&U‰åWVSEØčü˙˙˙Ãƒė0ĮEØj P˙u čü˙˙˙‹U؃Ä€:u$˙˙˙ƒúũ‡5‹U‰eô¸[^_]Ívu܃ė Včü˙˙˙ƒƒÄ j P‹E܃ĀPčü˙˙˙‹EÜY_xEä˙uP‰EÔčü˙˙˙X‹EäZ˙pôPWčü˙˙˙‹Eä‹ģƒÄƒč 9ø…įƒƒėj1P‹E܃ĀPčü˙˙˙ƒƒÄ j P‹E܃ĀPčü˙˙˙Y˙u čü˙˙˙ƒÄ P‹EÜ˙u ƒĀPčü˙˙˙ƒƒÄ jP‹E܃ĀPčü˙˙˙XEāZVPčü˙˙˙Xƒ˙uāPčü˙˙˙‹EāƒÄƒč 9ø…F‹ƒƒė ˙0čü˙˙˙Y_jVčü˙˙˙ƒÄeô1Ā[^_]Í´&u܃ė Včü˙˙˙ƒƒÄ j P‹E܃ĀPčü˙˙˙‹EÜY_xEä˙uP‰EÔčü˙˙˙X‹EäZ˙pôPWčü˙˙˙‹Eä‹ģƒÄƒč 9ø…§ƒƒėj1P‹E܃ĀPčü˙˙˙ƒƒÄ j P‹E܃ĀPčü˙˙˙YX‹EÜ˙u ƒĀPčü˙˙˙ƒƒÄ jP‹E܃ĀPčü˙˙˙XEāZVPčü˙˙˙Xƒ˙uāPčü˙˙˙‹EāƒÄƒč 9øu‹ƒƒė ˙0čü˙˙˙éęū˙˙‹UÔčČY˙˙ëáļUāč¸Y˙˙éL˙˙˙v‹UÔč¨Y˙˙é­ū˙˙vUāč˜Y˙˙é ū˙˙‰ĮRRjVčü˙˙˙‰<$čü˙˙˙‰EЋEāƒč 9øt‹UÔčjY˙˙‹}ĐPPjVčü˙˙˙‰<$čü˙˙˙‰Į‹Eäƒč ;ƒt´Uāč=Y˙˙ëljEЋEāƒč 9øt‹UÔč&Y˙˙‹}Đ됉Įëļ‰Į‹Eäƒč ;ƒtĻUāčY˙˙뜍vU‰åWVSčü˙˙˙Ãƒė8‹uVčü˙˙˙ƒÄ…‰Į„žEäƒė P‰EÔčü˙˙˙‹M䍃ƒÄ j"PAPčü˙˙˙‰4$čü˙˙˙‹UäƒÄ PVBPčü˙˙˙EāƒÄ PW˙uÔčü˙˙˙‹UäƒÄ‰Æ…Ōtƒė jčü˙˙˙ƒÄ„Āu‰đ„Āt6‹Eāeô[^_]Ѝ´&‹Eä…Ātāƒė ‹P˙RƒÄëŌv‹E eô[^_]Ãė jčü˙˙˙‰ÆPPj˙uÔčü˙˙˙‰4$čü˙˙˙ļŧ'U‰åWVSčü˙˙˙Ãƒė,€}teô1Ā[^_]Ít&ƒėj˙˙učü˙˙˙‰ĮXZj˙˙u čü˙˙˙ƒÄ‰Æƒ˙˙”Āƒū˙”Âu„Āuƒū˙t„Āu0ƒ˙˙t„Ō…‡‰đÁč„Ā…9÷Ž ƒ˙ŸĀeô[^_]ÍEäƒė P‰Į‰EÔčü˙˙˙YXƒP‹EäƒĀPčü˙˙˙XƒÔ ZP‹EäƒĀPčü˙˙˙YXƒP‹EäƒĀPčü˙˙˙X‹EäZVƒĀPčü˙˙˙ƒY^P‹EäƒĀPčü˙˙˙XƒÁ ZP‹EäƒĀPčü˙˙˙ƒY^P‹EäƒĀPčü˙˙˙X‰ūZW}ØWčü˙˙˙YXjVčü˙˙˙XZWVčü˙˙˙X˙uäjčü˙˙˙‹EäƒÄƒč ;ƒ…s‹ƒƒė ˙0čü˙˙˙ƒÄƒė jčü˙˙˙Eäƒė P‰EÔčü˙˙˙Y‹MäXƒPAPčü˙˙˙XZ‹Uä‹Ô Q‰MĖBPčü˙˙˙‹UäYXƒPBPčü˙˙˙X‹EäZ“Á ƒĀRP‰UĐčü˙˙˙YXƒP‹EäƒĀPčü˙˙˙‹MäXZA˙uĖPčü˙˙˙YX‹E䍋Q‰M˃ĀPčü˙˙˙X‹EäZVƒĀPčü˙˙˙ƒY^P‹EäƒĀPčü˙˙˙XZ‹Uä˙uЍBPčü˙˙˙Y‹Mä^˙uĖAPčü˙˙˙‹MäXZAWPčü˙˙˙‹Mä_XƒPAPčü˙˙˙Y^‹uԍ}āVWčü˙˙˙XZjVčü˙˙˙YXWVčü˙˙˙Z˙uäjčü˙˙˙‹EäƒÄƒč ;ƒ…‹ƒƒė ˙0čü˙˙˙é‹ū˙˙Eäƒė P‰Æ‰EÔčü˙˙˙YXƒP‹EäƒĀPčü˙˙˙XƒÁ ZP‹EäƒĀPčü˙˙˙YXƒP‹EäƒĀPčü˙˙˙X‹EäZWƒĀPčü˙˙˙ƒY_P‹EäƒĀPčü˙˙˙XƒÔ ZP‹EäƒĀPčü˙˙˙ƒY_P‹EäƒĀPčü˙˙˙X}ÜZVWčü˙˙˙YXjVčü˙˙˙XZWVčü˙˙˙X˙uäjčü˙˙˙‹EäƒÄƒč ;ƒu/‹ƒƒė ˙0čü˙˙˙éũ˙˙UāčT˙˙é€ũ˙˙UÜčT˙˙éãū˙˙UāčųS˙˙ëĮ‰Æ‹Eäƒč ;ƒtUāčßS˙˙PPjWčü˙˙˙‰4$čü˙˙˙‰Æë扯PPjWčü˙˙˙‰4$čü˙˙˙‰ÆPPj˙uÔčü˙˙˙‰4$čü˙˙˙‰Æ‹Eäƒč ;ƒtUÜč‡S˙˙PPjWčü˙˙˙‰4$čü˙˙˙‰ÆëęQQ‰ÆjWčü˙˙˙‰4$čü˙˙˙WW‰Æj˙uÔčü˙˙˙‰4$čü˙˙˙‰Æ‹Eäƒč ;ƒtUāč/S˙˙PPjWčü˙˙˙‰4$čü˙˙˙‰Æë扯PPjWčü˙˙˙‰4$čü˙˙˙‰ÆPPj˙uÔčü˙˙˙‰4$čü˙˙˙´&ŧ'U‰åWVSčü˙˙˙Ãƒė,‹u ‹ƒƒ8t‹EƒėƒĀPƒPčü˙˙˙ƒÄ‹ƒƒė‹8ƒö PWčü˙˙˙ƒÄ„Ā„âƒÔ ģÁ ƒėjPW‰EÔčü˙˙˙ƒÄ„Ā…‹ƒ€8…͍ƒƒėPjčü˙˙˙‰4$čü˙˙˙_Y‹‰ÂEäQ‹QčJģ˙˙‹}ä‰4$čü˙˙˙Z“uāYR“R‰Â‰đč#ģ˙˙ƒƒÄ W˙uāPčü˙˙˙‹Eā‹ģƒÄƒč 9ø…Á‹Eäƒč 9ø…Ŗ‹ƒƒė ˙0čü˙˙˙ƒÄeô[^_]̓WPƒPjčü˙˙˙ƒÄé˙˙˙fƒė Včü˙˙˙ƒÄ PƒPjčü˙˙˙ƒÄé˙˙˙t&ƒėj˙˙uÔčü˙˙˙‰<$‰EÔčü˙˙˙ƒÄP‹EԃĀPƒPjčü˙˙˙ƒÄéÃū˙˙´&‰ōčQ˙˙éQ˙˙˙t&UßčQ˙˙é2˙˙˙‹ģ‰Æ‹Eäƒč 9øtUßčáP˙˙ƒė Včü˙˙˙‰Æ‹Eā‹ģƒč 9øtĶUßčžP˙˙ëɍļŋU‰åWVSčü˙˙˙Ãƒė0‹u jV˙učü˙˙˙ƒÄ…‰Į„™Eäƒė P‰EÔčü˙˙˙ƒƒÄ jP‹EäƒĀPčü˙˙˙ƒÄ…öt{ƒė Včü˙˙˙ƒÄ P‹EäVƒĀPčü˙˙˙ƒÄƒė˙uW˙uÔčü˙˙˙‹UäƒÄ‰Æ…Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹Eä…Āt ƒė ‹P˙RƒÄeô‰đ[^_]Ѝt&eô1ö‰đ[^_]Ít&ƒƒėP‹EäƒĀPčü˙˙˙뇉ÆPPj˙uÔčü˙˙˙‰4$čü˙˙˙vŧ'U‰åWVS‰Öčü˙˙˙Ãƒė8‰EЍEäP‰EÔčü˙˙˙ƒƒÄ jP‹EäƒĀPčü˙˙˙ƒÄ…ö„¸‹EäƒėVƒĀPčü˙˙˙‹}ԃčEāƒėWPčü˙˙˙Į$Wčü˙˙˙Y˙uÔčü˙˙˙‹EāƒÄ1ö}Ū‹Pô…Ōt5t&ļ0ƒė Pčü˙˙˙‹MäƒÄ ˆEŪjWQRčü˙˙˙‹EāƒÄƒÆ;pôuЋ}ԃėW˙uĐčü˙˙˙Į$Wčü˙˙˙‹EāƒÄƒč ;ƒu&‹EЍeô[^_]̓ƒėP‹EäƒĀPčü˙˙˙é=˙˙˙‹UÔč}N˙˙‹EЍeô[^_]ÉƋEāƒč ;ƒtUßčZN˙˙ƒė Včü˙˙˙ƒė‰Æj˙uÔčü˙˙˙ƒÄëÍëɃ뉯j˙uÔčü˙˙˙‰4$čü˙˙˙t&WVSčü˙˙˙Ãƒė‹T$ D$ ‹|$$č^ū˙˙ƒė ˙t$čü˙˙˙ƒÄ…Āt3ģ‰ÆšķĻ•Ā‰Æ‹D$ ƒč ;ƒu(ƒÄ‰đ[^_Í´&‹D$ ‰ūƒč ;ƒtߍ´&T$ č—M˙˙ƒÄ‰đ[^_Í´&ŧ'VSčü˙˙˙Ãƒė‹T$ D$ čÃũ˙˙ƒė ˙t$čü˙˙˙ƒÄ‰Æ…Ā‹D$ Dt$$ƒč ;ƒu ƒÄ‰đ[^Ít&T$ č'M˙˙ƒÄ‰đ[^Ãë U‰åWVSEÔčü˙˙˙Ãƒė<‹UčQũ˙˙ƒė ˙uÔčü˙˙˙ƒÄ…‰Į„Y‹E ƒė ‹ŗ‰E؍EÜP‰EÄčü˙˙˙‹M܍ƒƒÄ jPAPčü˙˙˙‹EԋMÜƒÄ ˙pôPAPčü˙˙˙EØƒÄ PW˙uÄčü˙˙˙‰Į‹E܃Ä…Āt0ƒė ‹ŗjčü˙˙˙ƒÄ„Āt‹E܅Āt‹ƒė ‹ŗP˙RƒÄ‰ø„Āt&‹Eԋŗ‹}؃č 9đ…Žeô‰ø[^_]Ѝt&}āƒė ‹ŗWčü˙˙˙‹EāY^ƒĀ˙u Pčü˙˙˙XEäZWPčü˙˙˙Xƒ˙uäPčü˙˙˙‹E䋺ƒÄƒč 9đuVƒėjWčü˙˙˙‹ƒ_˙0čü˙˙˙ƒÄ‹Eԋ} ƒč 9đ„r˙˙˙Uäč‘K˙˙eô‰ø[^_]Í´&‹ŗëΐ´&‹UÄčhK˙˙렋ŗ‰EÄPPjWčü˙˙˙‹}ăÄ‹Eԃč 9đtUĶč;K˙˙ƒė Wčü˙˙˙‰EĀ‹E䋺ƒč 9đt‹UÄčK˙˙‹E‰EÄ벉ĮëžQQ‰Įj˙uÄčü˙˙˙ƒÄ‹ŗëĨfU‰åWVSuä‰Įčü˙˙˙Ãƒė8‰UÔVčü˙˙˙YX˙uÔVčü˙˙˙YZPWčü˙˙˙‹UäƒÄ …Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹Eä…Āt ƒė ‹P˙RƒÄeô‰ø[^_]ÉĮPPjVčü˙˙˙‰<$čü˙˙˙´&ŧ'U‰åWVSEā}Ôčü˙˙˙ÃƒėH‰EĀPčü˙˙˙Wčü˙˙˙‹EÔY^pEØ˙u ‰EŧPEä‰EÄčü˙˙˙X‹EØZ˙pôPVčü˙˙˙‹E؃ăč ;ƒ…æ‹uä…ö„ëu܃ėEäWV‰EÄčü˙˙˙‹EÜP‰EÄčü˙˙˙ƒÄ P˙uÄ˙uäčü˙˙˙‹E܃ăč ;ƒ…ˆ‹}ԅ˙t$ƒė jčü˙˙˙ƒÄ„Āt‹EԅĀt ‹ƒė P˙RƒÄƒė˙uĀ˙učü˙˙˙‹MäƒÄ…Ét1ƒė jčü˙˙˙ƒÄ„Āt ‹}ä…˙t‹ƒč ;ƒuxƒė Wčü˙˙˙ƒÄ‹Eeô[^_]´&‹UŧčI˙˙ék˙˙˙vUÜčI˙˙é ˙˙˙vƒė Eäj‰EÄčü˙˙˙ZY‹‹Q ‰PEäP‰EÄčü˙˙˙ƒÄéãū˙˙ļ‰ōčÁH˙˙é|˙˙˙‰Æ‹E؃č ;ƒtUÜč¤H˙˙Eä‰EÄRRjWčü˙˙˙ƒÄPPj˙uÄčü˙˙˙‰4$čü˙˙˙‰Æ‹E܃č ;ƒtɋUŧčeH˙˙ëŋ‰ÆëÁ‰ÆEä‰EÄëЍt&U‰åWVSčü˙˙˙ÃƒėH‹E‹u ‹}‰EĀEÔP‰EÄčü˙˙˙ƒƒÄ j P‹EԃĀPčü˙˙˙ƒÄ…˙„Qƒė Wčü˙˙˙ƒÄ P‹EÔWƒĀPčü˙˙˙ƒÄƒėW˙učü˙˙˙ƒÄ…Āt3ƒƒėj P‹EԃĀPčü˙˙˙‹EƒÄ ‹˙pôP‹EԃĀPčü˙˙˙ƒÄƒƒėj P‹EԃĀPčü˙˙˙ƒÄ…ö„Ģƒė Včü˙˙˙ƒÄ P‹EÔVƒĀPčü˙˙˙ƒÄ€}ĀtƒƒėjP‹EԃĀPčü˙˙˙ƒÄƒėV˙učü˙˙˙ƒÄ…Āt3ƒƒėj P‹EԃĀPčü˙˙˙‹EƒÄ ‹˙pôP‹EԃĀPčü˙˙˙ƒÄuāƒė Včü˙˙˙EØP‰EĀčü˙˙˙Y‹EØ_}Ü˙uăĀW‰Eŧčü˙˙˙X‹EÜZ˙pôP˙uŧčü˙˙˙‹E܃ăč ;ƒ…ƒė˙uĀVčü˙˙˙‹E؃Ä…Ātƒė jčü˙˙˙ƒÄ„Ā…‡ƒėV˙učü˙˙˙‹EäƒÄ…Āt5ƒė jčü˙˙˙ƒÄ„Āt$‹uä…öt‹ƒč ;ƒ…¸ƒė Včü˙˙˙ƒÄ‹MԅÉt$ƒė jčü˙˙˙ƒÄ„Āt‹EԅĀt ƒė ‹P˙RƒÄ‹Eeô[^_]t&‹E؅Ā„n˙˙˙‹ƒė P˙RƒÄé]˙˙˙t&ƒƒėP‹EԃĀPčü˙˙˙éTū˙˙t&ƒƒėP‹EԃĀPčü˙˙˙éŽũ˙˙t&UĶčˆE˙˙éáū˙˙v‰účyE˙˙é<˙˙˙‰ÆPPj˙uÄčü˙˙˙‰4$čü˙˙˙‰ÆEäRRjPčü˙˙˙ƒÄëØ‰Æ‹E܃č ;ƒtUĶč2E˙˙WWj˙uĀčü˙˙˙ƒÄëʼnÆëëļŧ'U‰åWVSčü˙˙˙Ãƒė4˙u˙u‹učü˙˙˙ƒÄ„ĀuoEäƒė}ā‰ÁE‰MÔPQčü˙˙˙E‰$Wčü˙˙˙Į$˙uÔW˙u˙u Včü˙˙˙‹Eā‹“ƒÄƒč ‰UÔ9ĐuF‹Eäƒč ;EÔu+eô‰đ[^_]´&ƒė Včü˙˙˙ƒÄ eô‰đ[^_]‰účYD˙˙ëĖ´&UßčHD˙˙밉Ƌƒ‰EԋEäƒč ;EÔtUßč(D˙˙ƒė Včü˙˙˙‰Æ‹Eā‹ģƒč ‰}Ô9øtĪUßčD˙˙ëÅU‰åWVSčü˙˙˙Ãƒė4˙u˙u‹učü˙˙˙ƒÄ„ĀuoEäƒė}ā‰ÁE‰MÔPQčü˙˙˙E‰$Wčü˙˙˙Į$˙uÔW˙u˙u Včü˙˙˙‹Eā‹“ƒÄƒč ‰UÔ9ĐuF‹Eäƒč ;EÔu+eô‰đ[^_]´&ƒė Včü˙˙˙ƒÄ eô‰đ[^_]‰účIC˙˙ëĖ´&Ußč8C˙˙밉Ƌƒ‰EԋEäƒč ;EÔtUßčC˙˙ƒė Včü˙˙˙‰Æ‹Eā‹ģƒč ‰}Ô9øtĪUßčōB˙˙ëÅU‰åWVSčü˙˙˙Ãƒė4˙u˙u‹učü˙˙˙ƒÄ„ĀuoEäƒė}ā‰ÁE‰MÔPQčü˙˙˙E‰$Wčü˙˙˙Į$˙uÔW˙u˙u Včü˙˙˙‹Eā‹“ƒÄƒč ‰UÔ9ĐuF‹Eäƒč ;EÔu+eô‰đ[^_]´&ƒė Včü˙˙˙ƒÄ eô‰đ[^_]‰úč9B˙˙ëĖ´&Ußč(B˙˙밉Ƌƒ‰EԋEäƒč ;EÔtUßčB˙˙ƒė Včü˙˙˙‰Æ‹Eā‹ģƒč ‰}Ô9øtĪUßčâA˙˙ëÅU‰åWVSčü˙˙˙Ãƒė,‹U ‹uļĮFƒđˆ‹B…‰EÔ„ĸ}āƒė Wčü˙˙˙‹EÔƒÄ ‹˙pôP‹EāƒĀPF‰EÔčü˙˙˙‹FƒÄ…Ā„‰EäƒėWPF‰EÔčü˙˙˙‹EäP‰EÔčü˙˙˙ƒÄ P˙uÔ˙včü˙˙˙‹EäƒÄƒč ;ƒu:‹Mā…Ét$ƒė jčü˙˙˙ƒÄ„Āt‹Eā…Āt ‹ƒė P˙RƒÄeô‰đ[^_]vUßčđ@˙˙ëŧļƒė Fj‰EÔčü˙˙˙Z‹“YƒÂ ‰PFP‰EÔčü˙˙˙ƒÄéE˙˙˙‰EԋEäƒč ;ƒtUßč@˙˙N‹EԉMÔRRjW‰EĐčü˙˙˙‹EЃÄ‰ĮPPj˙uÔčü˙˙˙‰<$čü˙˙˙ëՉĮF‰EÔëāë U‰åWVSčü˙˙˙Ãƒė|ŨEŨUŨE ŨUˆŨE(ŨU€ŲĘŪáŲáŨU˜ŲÉßéŨ؃uāƒė }¨Včü˙˙˙Wčü˙˙˙ƒƒÄ jP‹E¨ƒĀPčü˙˙˙YXWVčü˙˙˙XZjWčü˙˙˙_} XWVčü˙˙˙‰ÆEŦ‰E¤‰$čü˙˙˙ƒƒÄ jP‹EŦƒĀPčü˙˙˙XZ˙u¤Včü˙˙˙YXj˙u¤čü˙˙˙XEZPV‰E čü˙˙˙‰ÆE°‰E¤‰$čü˙˙˙ƒƒÄ jP‹E°ƒĀPčü˙˙˙YX˙u¤Včü˙˙˙XZj˙u¤čü˙˙˙E´‰E¤‰$čü˙˙˙‹E´ƒÄ ˙uœ˙u˜ƒĀPčü˙˙˙YX˙u¤Včü˙˙˙XZj˙u¤čü˙˙˙E¸‰E¤‰$čü˙˙˙ƒƒÄ jP‹E¸ƒĀPčü˙˙˙XZ˙u¤Včü˙˙˙YXj˙u¤čü˙˙˙XEZPV‰E˜čü˙˙˙uŧ‰E¤‰4$čü˙˙˙ƒƒÄ jP‹EŧƒĀPčü˙˙˙XZV˙u¤čü˙˙˙YXjVčü˙˙˙XZW˙u¤čü˙˙˙}Ā‰Æ‰<$čü˙˙˙ƒƒÄ j‰E¤P‹EƒĀPčü˙˙˙YXWVčü˙˙˙XZjWčü˙˙˙}ĉ<$čü˙˙˙‹EÄƒÄ ˙u”˙uƒĀPčü˙˙˙YXWVčü˙˙˙XZjWčü˙˙˙}ȉ<$čü˙˙˙ƒƒÄ jP‹EȃĀPčü˙˙˙XZWVčü˙˙˙YXjWčü˙˙˙XZ˙u Včü˙˙˙}Ė‰Æ‰<$čü˙˙˙‹EĖƒÄ j˙u¤ƒĀPčü˙˙˙YXWVčü˙˙˙XZjWčü˙˙˙}Љ<$čü˙˙˙‹EĐƒÄ ˙uŒ˙uˆƒĀPčü˙˙˙YXWVčü˙˙˙XZjWčü˙˙˙}ԉ<$čü˙˙˙ƒƒÄ jP‹EԃĀPčü˙˙˙XZWVčü˙˙˙YXjWčü˙˙˙XZ˙u˜Včü˙˙˙u؉Į‰4$čü˙˙˙‹EØƒÄ j˙u¤ƒĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙u܉4$čü˙˙˙‹EÜƒÄ ˙u„˙u€ƒĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^XƒPWčü˙˙˙ZYP˙učü˙˙˙ZEäYjPčü˙˙˙‹EƒÄeô[^_]vƒė ˙učü˙˙˙‹EƒÄ eô[^_]‰ĮPPjV‰ūčü˙˙˙ƒÄPPEäjPčü˙˙˙‰4$čü˙˙˙‰ĮPPjV‰ūčü˙˙˙ƒÄëØ‰ÆPPjWčü˙˙˙ƒÄëĮQQ‰ÆjWčü˙˙˙ƒÄëPPjWčü˙˙˙ƒÄëĨ‰ÆPPjWčü˙˙˙ƒÄë”QQ‰ÆjWčü˙˙˙ƒÄ냉ÆPPjWčü˙˙˙ƒÄéo˙˙˙‰ĮPPjV‰ūčü˙˙˙ƒÄéY˙˙˙QQ‰Æj˙u¤čü˙˙˙ƒÄéC˙˙˙QQ‰Æj˙u¤čü˙˙˙ƒÄé-˙˙˙‰ÆPPj˙u¤čü˙˙˙ƒÄé˙˙˙‰ÆPPj˙u¤čü˙˙˙ƒÄé˙˙˙QQ‰ÆjWčü˙˙˙ƒÄéíū˙˙‰Æéæū˙˙fVSčü˙˙˙Ãƒė‹t$˙t$,˙t$,˙t$,˙t$,˙t$,˙t$,Včü˙˙˙ƒÄ ‰đ[^t&U‰åWVSčü˙˙˙ÃƒėT˙u˙učü˙˙˙ƒÄ„Ā„ÖE˃ė‰Â‰EŦEPRčü˙˙˙EȉÁ‰E°E‰$Qčü˙˙˙uāVčü˙˙˙}ĐWčü˙˙˙ƒƒÄ j P‹EЃĀPčü˙˙˙YXWVčü˙˙˙XZjWčü˙˙˙_XE PVčü˙˙˙}ԉE´‰<$čü˙˙˙ƒƒÄ jP‹EԃĀPčü˙˙˙XZW˙u´čü˙˙˙YXjWčü˙˙˙XEZP˙u´čü˙˙˙}؉E´‰<$čü˙˙˙ƒƒÄ j P‹E؃ĀPčü˙˙˙YXW˙u´čü˙˙˙XZjWčü˙˙˙_X˙u°˙u´čü˙˙˙}܉E´‰<$čü˙˙˙ƒƒÄ jP‹E܃ĀPčü˙˙˙XZW˙u´čü˙˙˙YXjWčü˙˙˙XZ˙uŦ˙u´čü˙˙˙ZYP˙učü˙˙˙‹UäƒÄ…Ō„bƒė jčü˙˙˙ƒÄ„ĀtQ‹Mä…ÉtJ‹‹“ƒč ‰U´9Đ…„ƒė Qčü˙˙˙ƒÄ‹Eȃč ;E´u]‹E˃č ;E´uB‹Eeô[^_]t&‹ƒ‰E´ë͐t&ƒė ˙učü˙˙˙‹EƒÄ eô[^_]t&‰ōčÉ8˙˙ëĩ´&‰ōčš8˙˙뚍´&‰ú‰M°čĻ8˙˙‹M°éj˙˙˙‰Æ‹ƒ‰E´‹E˃č ;E´tUĮč€8˙˙ƒė Včü˙˙˙QQ‰ÆjWčü˙˙˙ƒÄPPEäjPčü˙˙˙ƒÄ‹Eȋ‹ƒč ‰M´9Čt˛UĮč=8˙˙먉ÆPPjWčü˙˙˙ƒÄëÂQQ‰ÆjWčü˙˙˙ƒÄëąQQ‰ÆjWčü˙˙˙ƒÄ렉ÆëŦ‰Æë˜U‰åWVSčü˙˙˙ÃƒėD˙u˙u‹učü˙˙˙ƒÄ„Ā„ÃEāƒė }ĖP‰EÄčü˙˙˙Wčü˙˙˙‹MĖƒƒÄ j PAPčü˙˙˙XZW˙uÄčü˙˙˙YXjWčü˙˙˙XE ZP˙uÄčü˙˙˙}ЉEĉ<$čü˙˙˙ƒƒÄ jP‹EЃĀPčü˙˙˙YXW˙uÄčü˙˙˙XZjWčü˙˙˙_XEP˙uÄčü˙˙˙}ԉEĉ<$čü˙˙˙ƒƒÄ j P‹EԃĀPčü˙˙˙XZW˙uÄčü˙˙˙YXjWčü˙˙˙XEZP˙uÄčü˙˙˙}؉Eĉ<$čü˙˙˙ƒƒÄ jP‹E؃ĀPčü˙˙˙YXW˙uÄčü˙˙˙XZjWčü˙˙˙_XEP˙uÄčü˙˙˙}܉Eĉ<$čü˙˙˙ƒƒÄ jP‹E܃ĀPčü˙˙˙XZW˙uÄčü˙˙˙YXjWčü˙˙˙XZ˙uÄVčü˙˙˙‹EäƒÄ…Āt9ƒė jčü˙˙˙ƒÄ„Āt(‹Eä…‰EÄt‹‰Eƒč ;ƒu:ƒė ˙uÄčü˙˙˙ƒÄeô‰đ[^_]ƒė Včü˙˙˙ƒÄ eô‰đ[^_]´&‰účé5˙˙ëŊQQ‰ÆjWčü˙˙˙ƒÄPPEäjPčü˙˙˙‰4$čü˙˙˙‰ÆPPjWčü˙˙˙ƒÄëÚQQ‰ÆjWčü˙˙˙ƒÄëɉÆëÅQQ‰ÆjWčü˙˙˙ƒÄ봉ÆPPjWčü˙˙˙ƒÄëŖt&ŧ'U‰åWVSčü˙˙˙ÃƒėD˙u˙u‹učü˙˙˙ƒÄ„Ā„ÃEāƒė }ĖP‰EÄčü˙˙˙Wčü˙˙˙‹MĖƒƒÄ j PAPčü˙˙˙XZW˙uÄčü˙˙˙YXjWčü˙˙˙XE ZP˙uÄčü˙˙˙}ЉEĉ<$čü˙˙˙ƒƒÄ jP‹EЃĀPčü˙˙˙YXW˙uÄčü˙˙˙XZjWčü˙˙˙_XEP˙uÄčü˙˙˙}ԉEĉ<$čü˙˙˙ƒƒÄ jP‹EԃĀPčü˙˙˙XZW˙uÄčü˙˙˙YXjWčü˙˙˙XEZP˙uÄčü˙˙˙}؉Eĉ<$čü˙˙˙ƒƒÄ jP‹E؃ĀPčü˙˙˙YXW˙uÄčü˙˙˙XZjWčü˙˙˙_XEP˙uÄčü˙˙˙}܉Eĉ<$čü˙˙˙ƒƒÄ jP‹E܃ĀPčü˙˙˙XZW˙uÄčü˙˙˙YXjWčü˙˙˙XZ˙uÄVčü˙˙˙‹EäƒÄ…Āt9ƒė jčü˙˙˙ƒÄ„Āt(‹Eä…‰EÄt‹‰Eƒč ;ƒu:ƒė ˙uÄčü˙˙˙ƒÄeô‰đ[^_]ƒė Včü˙˙˙ƒÄ eô‰đ[^_]´&‰účY3˙˙ëŊQQ‰ÆjWčü˙˙˙ƒÄPPEäjPčü˙˙˙‰4$čü˙˙˙‰ÆPPjWčü˙˙˙ƒÄëÚQQ‰ÆjWčü˙˙˙ƒÄëɉÆëÅQQ‰ÆjWčü˙˙˙ƒÄ봉ÆPPjWčü˙˙˙ƒÄëŖt&ŧ'U‰åWVSčü˙˙˙ÃƒėL‰E´‹E‹M‹‹ …Ā„W…É„Oƒė‰U°QPčü˙˙˙‹U°ƒÄ…Ā•Ā8„?ƒ„Ō“uā‰EŦ‰EčƒDƒė V‰EČčü˙˙˙ƒ‰$Včü˙˙˙ZUYRPčü˙˙˙uˉĮ‰4$čü˙˙˙ƒƒÄ j‰E¨P‹E˃ĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^XƒPWčü˙˙˙Z}ÄYWPčü˙˙˙ZY˙uPčü˙˙˙uЉE°‰4$čü˙˙˙‹MЍƒƒÄ jPAPčü˙˙˙YXV˙u°čü˙˙˙XZjVčü˙˙˙Yƒ^P˙u°čü˙˙˙^ZUČRPčü˙˙˙uԉE°‰4$čü˙˙˙‹MԍƒƒÄ jPAPčü˙˙˙XZV˙u°čü˙˙˙YXjVčü˙˙˙XE ZP˙u°čü˙˙˙u؉E°‰4$čü˙˙˙‹EØƒÄ j˙u¨ƒĀPčü˙˙˙YXV˙u°čü˙˙˙XZjVčü˙˙˙^XƒP˙u°čü˙˙˙ZYWPčü˙˙˙Y^˙uPčü˙˙˙u܉Į‰4$čü˙˙˙‹EÜƒÄ j˙uŦƒĀPčü˙˙˙XZVWčü˙˙˙YXjVčü˙˙˙XZW˙u´čü˙˙˙‹}äƒÄ…˙t1ƒė jčü˙˙˙ƒÄ„Āt ‹}ä…˙t‹ƒč ;ƒu<ƒė Wčü˙˙˙ƒÄ‹E´eô[^_]Ѝt&9Č”Āéŋũ˙˙ļƒė ˙u´čü˙˙˙ƒÄ ëЉōč90˙˙ëģ‰ĮPPjV‰ūčü˙˙˙ƒÄPPEäjPčü˙˙˙‰4$čü˙˙˙‰ÆëįQQ‰ĮjV‰ūčü˙˙˙ƒÄëԉĮPPjV‰ūčü˙˙˙ƒÄëÁ‰ĮPPjV‰ūčü˙˙˙ƒÄëŽQQ‰ĮjV‰ūčü˙˙˙ƒÄ뛐VēƒėD$ ‹t$PD$ P˙t$ ‰đ˙t$ čēü˙˙ƒÄ‰đ^V1ԃėD$ ‹t$PD$ P˙t$ ‰đ˙t$ čü˙˙ƒÄ‰đ^t&U‰åWVS‰Öčü˙˙˙ÃƒėL‰E´‹E‹˙pôjP˙učü˙˙˙ƒÄƒø˙‰ņ•Ā8Á„1ƒ“„ɍuā‰EŦ‰EčƒDƒė V‰EČčü˙˙˙ƒ‰$Včü˙˙˙ZUYRPčü˙˙˙uˉĮ‰4$čü˙˙˙ƒƒÄ j‰E¨P‹E˃ĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^XƒPWčü˙˙˙Z}ÄYWPčü˙˙˙ZY˙uPčü˙˙˙uЉE°‰4$čü˙˙˙‹MЍƒƒÄ jPAPčü˙˙˙YXV˙u°čü˙˙˙XZjVčü˙˙˙Yƒ^P˙u°čü˙˙˙^ZUČRPčü˙˙˙uԉE°‰4$čü˙˙˙‹MԍƒƒÄ jPAPčü˙˙˙XZV˙u°čü˙˙˙YXjVčü˙˙˙XE ZP˙u°čü˙˙˙u؉E°‰4$čü˙˙˙‹EØƒÄ j˙u¨ƒĀPčü˙˙˙YXV˙u°čü˙˙˙XZjVčü˙˙˙^XƒP˙u°čü˙˙˙ZYWPčü˙˙˙Y^˙uPčü˙˙˙u܉Į‰4$čü˙˙˙‹EÜƒÄ j˙uŦƒĀPčü˙˙˙XZVWčü˙˙˙YXjVčü˙˙˙XZW˙u´čü˙˙˙‹}äƒÄ…˙t1ƒė jčü˙˙˙ƒÄ„Āt ‹}ä…˙t‹ƒč ;ƒu.ƒė Wčü˙˙˙ƒÄ‹E´eô[^_]Í´&ƒė ˙u´čü˙˙˙ƒÄ ëŪ‰ōčŲ,˙˙ëɉĮPPjV‰ūčü˙˙˙ƒÄPPEäjPčü˙˙˙‰4$čü˙˙˙‰ĮPPjV‰ūčü˙˙˙ƒÄëØQQ‰ĮjV‰ūčü˙˙˙ƒÄëʼnÆëÁQQ‰ĮjV‰ūčü˙˙˙ƒÄ뮉ĮPPjV‰ūčü˙˙˙ƒÄ뛐Vēƒė‹t$˙t$ ˙t$ ˙t$ ˙t$ ‰đčÜü˙˙ƒÄ‰đ^vV1ԃė‹t$˙t$ ˙t$ ˙t$ ˙t$ ‰đč¯ü˙˙ƒÄ‰đ^ļVSčü˙˙˙Ãƒė‹t$˙t$,˙t$,˙t$,˙t$,Včü˙˙˙ƒÄ ‰đ[^ļŋU‰åWVS‰Öčü˙˙˙ÃƒėL‰E´‹E‹˙pôjP˙učü˙˙˙ƒÄƒø˙‰ņ•Ā8Á„aƒ“„ɍuā‰EŧƒDƒė V‰EĀčü˙˙˙ƒ‰$Včü˙˙˙ZUYRPčü˙˙˙uĉĮ‰4$čü˙˙˙ƒƒÄ j‰EŦP‹EăĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^XƒPWčü˙˙˙ZYMŧQP‰M°čü˙˙˙uȉĮ‰4$čü˙˙˙YX˙uVčü˙˙˙YZPWčü˙˙˙XZjVčü˙˙˙uˉ4$čü˙˙˙ƒƒÄ jP‹E˃ĀPčü˙˙˙XZVWčü˙˙˙YXjVčü˙˙˙XƒZPWčü˙˙˙^UĀ_RPčü˙˙˙uЉĮ‰4$čü˙˙˙ƒƒÄ jP‹EЃĀPčü˙˙˙XZVWčü˙˙˙YXjVčü˙˙˙XE ZPWčü˙˙˙uԉĮ‰4$čü˙˙˙‹EÔƒÄ j˙uŦƒĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^XƒPWčü˙˙˙ZY˙u°Pčü˙˙˙u؉Į‰4$čü˙˙˙YX˙uVčü˙˙˙YZPWčü˙˙˙XZjVčü˙˙˙u܉4$čü˙˙˙ƒƒÄ jP‹E܃ĀPčü˙˙˙XZVWčü˙˙˙YXjVčü˙˙˙XZW˙u´čü˙˙˙‹}äƒÄ…˙t1ƒė jčü˙˙˙ƒÄ„Āt ‹}ä…˙t‹ƒč ;ƒu+ƒė Wčü˙˙˙ƒÄ‹E´eô[^_]Ít&ƒė ˙u´čü˙˙˙ƒÄ ëá‰ōč )˙˙ëĖQQ‰ĮjV‰ūčü˙˙˙ƒÄPPEäjPčü˙˙˙‰4$čü˙˙˙‰ÆëįQQ‰ĮjV‰ūčü˙˙˙ƒÄëԉĮPPjV‰ūčü˙˙˙ƒÄëÁQQ‰ĮjV‰ūčü˙˙˙ƒÄ뮉ĮPPjV‰ūčü˙˙˙ƒÄ뛉ĮPPjV‰ūčü˙˙˙ƒÄëˆQQ‰ĮjV‰ūčü˙˙˙ƒÄér˙˙˙´&Vēƒė‹t$˙t$ ˙t$ ˙t$ ˙t$ ‰đč|ü˙˙ƒÄ‰đ^vV1ԃė‹t$˙t$ ˙t$ ˙t$ ˙t$ ‰đčOü˙˙ƒÄ‰đ^ļU‰åWVSčü˙˙˙ÃƒėL‰E´‹E‹u‹‹…Ā„—…É„ƒė‰U°QPčü˙˙˙‹U°ƒÄ…Ā•Ā8„ƒ„Ō“}ā‰EŧƒDƒė W‰EĀčü˙˙˙ƒ‰$Wčü˙˙˙ZUYRPčü˙˙˙}ĉE°‰<$čü˙˙˙‹Uč‹ƒÄ jQ‰M¨BPčü˙˙˙YXW˙u°čü˙˙˙XZjWčü˙˙˙_XƒP˙u°čü˙˙˙ZYMŧQP‰MŦčü˙˙˙‰Į‹uȉ4$‰E°čü˙˙˙YX˙u°Včü˙˙˙YZPWčü˙˙˙XZjVčü˙˙˙uˉ4$čü˙˙˙ƒƒÄ jP‹E˃ĀPčü˙˙˙XZVWčü˙˙˙YXjVčü˙˙˙XƒZPWčü˙˙˙^UĀ_RPčü˙˙˙uЉĮ‰4$čü˙˙˙ƒƒÄ jP‹EЃĀPčü˙˙˙XZVWčü˙˙˙YXjVčü˙˙˙XE ZPWčü˙˙˙uԉĮ‰4$čü˙˙˙‹EÔƒÄ j˙u¨ƒĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^XƒPWčü˙˙˙ZY˙uŦPčü˙˙˙‰Į‹Eu؋‰4$‰E°čü˙˙˙YX˙u°Včü˙˙˙YZPWčü˙˙˙XZjVčü˙˙˙u܉4$čü˙˙˙ƒƒÄ jP‹E܃ĀPčü˙˙˙XZVWčü˙˙˙YXjVčü˙˙˙XZW˙u´čü˙˙˙‹}äƒÄ…˙t1ƒė jčü˙˙˙ƒÄ„Āt ‹}ä…˙t‹ƒč ;ƒu7ƒė Wčü˙˙˙ƒÄ‹E´eô[^_]Ã9Č”Āéũ˙˙ļƒė ˙u´čü˙˙˙ƒÄ ëՉōč%˙˙ëĀQQ‰ĮjV‰ūčü˙˙˙ƒÄPPEäjPčü˙˙˙‰4$čü˙˙˙QQ‰ĮjV‰ūčü˙˙˙ƒÄëØ‰ÆPPjWčü˙˙˙ƒÄëĮ‰ÆëÉĮPPjV‰ūčü˙˙˙ƒÄ밉ĮPPjV‰ūčü˙˙˙ƒÄëQQ‰ĮjV‰ūčü˙˙˙ƒÄëŠQQ‰ĮjV‰ūčü˙˙˙ƒÄét˙˙˙vŧ'VēƒėD$ ‹t$PD$ P˙t$ ‰đ˙t$ čJü˙˙ƒÄ‰đ^V1ԃėD$ ‹t$PD$ P˙t$ ‰đ˙t$ čü˙˙ƒÄ‰đ^t&U‰åWVSčü˙˙˙Ãƒė4‹u˙u ‹}Včü˙˙˙XFZ˙uPčü˙˙˙ƒÄ…˙„„ƒė jčü˙˙˙‰Á‰EԍEįƒÄ PW‰ĪQčü˙˙˙‰~‹}ƒÄ…˙tfƒė jčü˙˙˙‰ĮEįƒÄ P˙uWčü˙˙˙ƒÄ‰~ ‹Eƒė ÆFÆFÆF‰F‹E ‰FFPčü˙˙˙ƒÄeô[^_]Í´&‹}ĮF…˙ušĮF ëŗ‰ĮF QQjPčü˙˙˙ƒÄPPFjPčü˙˙˙ƒÄ‹F‹“ƒč ‰UÔ9ĐtUįčü"˙˙‹ƒč ;EÔtUįčę"˙˙ƒė Wčü˙˙˙ƒė ‰EÔWčü˙˙˙‹}ԃÄëωĮ‹ƒ‰EÔëĉĮ땃ė ˙uԉĮčü˙˙˙ƒÄ듉Į돍ļU‰åWVS}įčü˙˙˙Ãƒė0‹u‹ƒƒĀ‰FW˙u Pčü˙˙˙‹UƒÄ…Ō„ˆƒė jčü˙˙˙ƒÄ ‰EÔW˙uPčü˙˙˙‹EԃĉF‹Eƒė ĮF ĮFĮFĮFĮF‰F$‹EĮF ÆF,ĮF0ĮF4‰F(F8Pčü˙˙˙ƒÄeô[^_]ÍļĮF뒉EԋF…Āt ƒė Pčü˙˙˙ƒÄ‹F …Āt ƒė Pčü˙˙˙ƒÄPPFjPčü˙˙˙ƒÄ‹Fƒč ;ƒt‰úč!˙˙ƒė ˙uÔčü˙˙˙ƒė ˙uԉEĐčü˙˙˙‹EЃÄ‰EÔëĮ‰EÔ됍´&U‰åWVSčü˙˙˙Ãƒė,‹u‹F…Āt ‹ƒė P˙RƒÄFƒė Pčü˙˙˙‹~ ƒÄ…˙tƒė jčü˙˙˙ƒÄ„Āug‹ģ‹N…Ét9ƒė jčü˙˙˙ƒÄ„Āt(‹F…‰EÔt‹‰EЃč 9ø…‡ƒė ˙uÔčü˙˙˙ƒÄ‹Fƒč 9øu_‹ƒč 9øuFeô[^_]Íļ‹F …‰EÔt‹EÔ‹ģ‹‰EЃč 9øuIƒė ˙uÔčü˙˙˙ƒÄém˙˙˙ļUįčX ˙˙eô[^_]ÍUįčH ˙˙뗍ļUįč8 ˙˙él˙˙˙vUįč( ˙˙뭉ĮPPFjPčü˙˙˙‰}ԋģƒÄ‹Fƒč 9øtUįčų˙˙‹ƒč 9øtUįčč˙˙ƒė ˙uÔčü˙˙˙‰ĮFƒė Pčü˙˙˙ƒÄF RRjPčü˙˙˙ƒÄ떉Įëę‰EÔëϐU‰åWVSčü˙˙˙Ãƒė,‹M‹ƒ‹q ƒĀ‰‹A9đ‰EÔt#‹>…˙tƒė Wčü˙˙˙‰<$čü˙˙˙ƒÄƒÆ9uÔuŪ‹Eƒė ƒĀ8Pčü˙˙˙‹EƒÄ‹@…Āt ƒė Pčü˙˙˙ƒÄ‹E‹@ …Āt ƒė Pčü˙˙˙ƒÄ‹E‹@…ĀtVƒė jčü˙˙˙ƒÄ„ĀtE‹E‹x…˙t;‹‹ŗƒč 9đuGƒė Wčü˙˙˙‹EƒÄ‹@ƒč 9đt&UįčË˙˙eô[^_]Ív‹E‹ŗ‹@ƒč 9đuڍeô[^_]ÍUįč˙˙믉ƋEƒė ƒĀ8Pčü˙˙˙ƒÄ‹E‹@…Āt ƒė Pčü˙˙˙ƒÄ‹E‹@ …Āt ƒė Pčü˙˙˙ƒÄ‹EƒėjƒĀPčü˙˙˙ƒÄ‹E‹HAô;ƒtUįč.˙˙ƒė Včü˙˙˙‰ÆëډÆë–ļŋVSčü˙˙˙Ãƒė‹t$Včü˙˙˙‰4$čü˙˙˙ƒÄ[^Ѝ´&VSčü˙˙˙Ãƒė‹t$ ‹F;Ft<…Āt ‹T$$‰‹FƒĀ‰F‹F‰Â+VÁú;F ‰T$ t-…Āt‰ƒĀ‰FƒÄ[^ÍvƒėT$(RPF Pčü˙˙˙ƒÄ됃ėƒÆT$RPVčü˙˙˙ƒÄëȐ´&Sčü˙˙˙Ãƒė‹T$‹B ;Bt…Āt ‹L$‰‹B ƒĀ‰B ƒÄ[Ѝt&ƒėƒÂL$QPRčü˙˙˙ƒÄëߐSčü˙˙˙Ãƒė˙t$‹D$˙0čü˙˙˙ƒÄ[ЍļŋWVS‹t$‹|$čü˙˙˙Ã‹F9øt1ƒėPVčü˙˙˙ƒÄ…Āt ƒė ‹P˙RƒÄ…˙‰~t ƒėWVčü˙˙˙ƒÄ[^_Í´&ŧ'WVS‹t$‹|$čü˙˙˙Ã‹F9øt1ƒėPVčü˙˙˙ƒÄ…Āt ƒė ‹P˙RƒÄ…˙‰~t ƒėWVčü˙˙˙ƒÄ[^_Í´&ŧ'U‰åWVSčü˙˙˙Ãƒė,‹ŗ‹‹@ô…Āu eô[^_]Ѝt&ƒėjj:Včü˙˙˙ƒÄƒø˙‰Į„PEÜjVƒĮP‰EĖčü˙˙˙‹ƒÄ‹@ô9Į‡;Eāj˙WVP‰EĐčü˙˙˙Į$‹ģčü˙˙˙‰Į‰EԋƒƒĀ‰Į$čü˙˙˙Y‰ÆX‹ƒĮF˙˙˙˙ƒĀ‰F˙uĖPčü˙˙˙XF Z˙uĐPčü˙˙˙‰4$čü˙˙˙EÛƒÄ ‰wuäPƒPVčü˙˙˙‹EÔY_V˙pčü˙˙˙‹Eä‹ģƒÄƒč 9ø…m‹Eƒė˙uÔĖPčü˙˙˙‹EāƒÄƒč 9øu\‹E܃č 9ø„Ņū˙˙‰ōčˇ˙˙éÅū˙˙fƒƒė˙6Pčü˙˙˙X‹ƒ˙0čü˙˙˙ƒÄeô[^_]ÍļUÚčx˙˙뉍ļ‰ōči˙˙ë›PƒWPƒPčü˙˙˙‹ģ‰Æ‹E܃č 9øtUÚč8˙˙ƒė Včü˙˙˙‹ģ‰Æƒė ˙uÔčü˙˙˙ƒÄ‹Eāƒč 9øtōUÚč˙˙ë쉯ëč‹ģƒė ‰EĐVčü˙˙˙‹EЃÄ‰Æëž‹ģ‰Á‹Fƒč 9øtUä‰MĐčČ˙˙‹MЉČëÆ‰EЋF ‹ģƒč 9øtUäčĻ˙˙‹MĐëĉƋEä‹ģƒč 9øtUÚč‡˙˙‹EÔRRjƒĀPčü˙˙˙ƒÄéH˙˙˙‰Æ‹ģëېt&Sčü˙˙˙Ãƒė‹D$…Āt"‹T$‹J$‹QL;QPt…Ōt ‰‹QL‹D$ƒÂ‰QLƒÄ[ÃfƒėƒÁHD$PRQčü˙˙˙‹D$$ƒÄëېt&U‰åWVSčü˙˙˙Ãƒė,‹M‹ƒ‹yTƒĀ‰‹AX‹`é‰MĐ9ø‰EÔu$ëFļƒė Včü˙˙˙‰4$čü˙˙˙ƒÄƒĮ9}Ôt$‹7…ötō‹‹@;EĐtԃė V˙ЃÄƒĮ9}Ôuߍv‹E‹xL‹pH9÷uëAƒė Pčü˙˙˙ƒÄƒÆ9÷t-‹…Ātķ‹‹R;“tڃė P˙ԃƃÄ9÷uŨvŧ'‹E‹€Ø…Āt ‹ƒė P˙RƒÄ‹Eƒė Pčü˙˙˙‹EƒÄ‹¸ü…˙t*ƒė jčü˙˙˙ƒÄ„Āt‹E‹€ü…Āt ‹ƒė P˙RƒÄ‹E‹°ø…ötƒė jčü˙˙˙ƒÄ„Ā…‹ģ‹Eƒė ĖPčü˙˙˙‹Eˆ‰$čü˙˙˙‹EƒÄ‹pl‹@p9Æt&v‹…Āt ‹ƒė P˙RƒÄ‹EƒÆ;ppuã‹E‹@l…Āt ƒė Pčü˙˙˙ƒÄ‹E‹@`…Āt ƒė Pčü˙˙˙ƒÄ‹E‹@T…Āt ƒė Pčü˙˙˙ƒÄ‹E‹@H…Āt ƒė Pčü˙˙˙ƒÄ‹Eƒė ˙p@čü˙˙˙ƒÄ…Āt ‹ƒė P˙RƒÄ‹Eƒė ˙p@čü˙˙˙ƒÄ…‰Æ…‹Eƒė ƒĀ Pčü˙˙˙‹EƒÄ‹@ƒč 9ø…Íeô[^_]Ít&‹E‹°ø…ö„Õū˙˙‹F …Āx ƒė Pčü˙˙˙ƒÄ‹‹ģƒč 9ø…ƒė Včü˙˙˙ƒÄé¤ū˙˙´&ƒhÎPEäjP‰EÔčü˙˙˙ƒƒÄ jP˙ŗčü˙˙˙ƒƒÄ jP˙ŗčü˙˙˙ZYV˙ŗčü˙˙˙X˙uÔčü˙˙˙ƒÄé˙˙˙UäčŅ˙˙eô[^_]ÍUäčÁ˙˙éc˙˙˙‰Eԋ‹ģƒč 9øtUäčĸ˙˙‹uԋEƒė ĖPčü˙˙˙ƒÄ‹Eƒė ˆPčü˙˙˙ƒÄ‹Eƒė ƒĀlPčü˙˙˙ƒÄ‹E‹@`…Āt ƒė Pčü˙˙˙ƒÄ‹E‹@T…Āt ƒė Pčü˙˙˙ƒÄ‹E‹@H…Āt ƒė Pčü˙˙˙ƒÄ‹Eƒė ƒĀ@Pčü˙˙˙ƒÄ‹Eƒė ƒĀ Pčü˙˙˙ƒÄ‹E‹@ƒč 9øtUãčę˙˙ƒė Včü˙˙˙‰Į‹Eƒė‰ūjøPčü˙˙˙ƒÄ‹ģé˙˙˙‰Į‹EƒėjüPčü˙˙˙ƒÄëÉƋģéöū˙˙‰Æë’‰Æéy˙˙˙‰Æ‹E‹Pl…Ō„˙˙˙ƒė Rčü˙˙˙ƒÄé˙˙˙‰Æéëū˙˙‰ÆéĐū˙˙ƒė ˙uԉÆčü˙˙˙ƒÄé5˙˙˙‰Į‹Eƒė Pčü˙˙˙ƒÄéq˙˙˙vŧ'VSčü˙˙˙Ãƒė‹t$Včü˙˙˙‰4$čü˙˙˙ƒÄ[^Ѝ´&U‰åWVSčü˙˙˙Ãƒė,‹u‹ƒ‹~$ƒĀ‰…˙t'‹“Pķ‹@9Đ…œƒė Wčü˙˙˙‰<$čü˙˙˙ƒÄƒė ƒÆVčü˙˙˙ƒÄ…‰Æu eô[^_]ÍvƒhyPEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙ZYVWčü˙˙˙X˙uÔčü˙˙˙ƒÄeô[^_]Í´&ƒė W˙ЃÄéj˙˙˙ƒė ˙uԉÆčü˙˙˙‰4$čü˙˙˙ƒė ƒÆ‰ĮVčü˙˙˙‰<$čü˙˙˙´&ŧ'VSčü˙˙˙Ãƒė‹t$Včü˙˙˙‰4$čü˙˙˙ƒÄ[^Ѝ´&U‰åWVSčü˙˙˙ÃƒėP‹u‹ƒ~ ƒĀ‰‹E ‰FEäP‰EĀƒPFPčü˙˙˙YXVWčü˙˙˙XFZVP‰EÄčü˙˙˙YXF ‰~jP‰E´čü˙˙˙ƒÄ…‰E¸…ĩE؃ėÆF8˙ŗPčü˙˙˙ƒÄ…‰E¸…Q‹E؃ė ĮFHĮFLĮFPĮFTĮFX‰F@‹EÄĮF\ĮF`ĮFdĮFh‰FD†ˆĮFlĮFpĮFtÆFxĮF|˙˙˙˙Į†€Į†„P‰E¸čü˙˙˙†Ė‰Eĉ$čü˙˙˙Į†ØÆ†ÜĮ†āĮ†äĮ†čĮ†ėĮ†đĮ†ôĮ†øĮ$čü˙˙˙‹“Y_ƒÂ‰‰†üEā˙ŗPčü˙˙˙ƒÄ…‰Eŧ…ŧ‹Eāƒė Į†Į†Į† Ɔ‰†jčü˙˙˙_Z‹“ƒÂ‰P˙uÄčü˙˙˙ƒÄeô[^_]ÍvƒhuPEÔjP‰Eŧčü˙˙˙‹ģƒƒÄ j!PWčü˙˙˙ƒƒÄ jPWčü˙˙˙XZ˙u¸Wčü˙˙˙Y˙uŧčü˙˙˙ƒÄéëũ˙˙ƒhčPj˙uĀčü˙˙˙‹ģƒƒÄ j1PWčü˙˙˙ƒƒÄ jPWčü˙˙˙XZ˙uŧWčü˙˙˙Y˙uĀčü˙˙˙ƒÄéčū˙˙t&ƒhčPEÜjP‰Eŧčü˙˙˙‹ģƒƒÄ j1PWčü˙˙˙ƒƒÄ jPWčü˙˙˙XZ˙u¸Wčü˙˙˙X˙uŧčü˙˙˙ƒÄéOũ˙˙ƒė ˙uŧ‰Įčü˙˙˙ƒÄ‹Fƒč ;ƒtUĶč*˙˙ƒė Wčü˙˙˙‰Į†üQQjPčü˙˙˙ƒÄPP†øjPčü˙˙˙Z˙uÄčü˙˙˙ƒÄƒė ˙u¸čü˙˙˙ƒÄFlƒė Pčü˙˙˙‹F`ƒÄ…Āt ƒė Pčü˙˙˙ƒÄ‹FT…Āt ƒė Pčü˙˙˙ƒÄ‹FH…Āt ƒė Pčü˙˙˙ƒÄF@ƒė Pčü˙˙˙ƒÄƒė ˙u´čü˙˙˙ƒÄé8˙˙˙ƒė ˙u‰Įčü˙˙˙ƒÄéD˙˙˙‰Įëԃė ˙uŧ‰Įčü˙˙˙ƒÄë‰Įéd˙˙˙‰Įé˙ū˙˙‰Į†ƒė Pčü˙˙˙ƒÄé˙˙˙‰Įé˙˙˙‰Įé(˙˙˙´&U‰åWVSčü˙˙˙Ãƒė4‹u‹ƒƒĀ‰FjP‰EĐčü˙˙˙ƒÄ…‰Įu/ƒė ÆFhčü˙˙˙‰ĮXZVWčü˙˙˙‰~$ƒÄeô[^_]Ѝt&ƒhuPEäjP‰EÔčü˙˙˙ƒƒÄ j!P˙ŗčü˙˙˙ƒƒÄ jP˙ŗčü˙˙˙XZW˙ŗčü˙˙˙Y˙uÔčü˙˙˙ƒÄéj˙˙˙ƒė ˙uԉÆčü˙˙˙‰4$čü˙˙˙ƒė ‰ÆWčü˙˙˙ƒÄƒė ˙uĐčü˙˙˙‰4$čü˙˙˙‰Æë鐍ļU‰åWVSčü˙˙˙Ãƒė €ģčŗ t eô‰đ[^_]Ívģčƒė ŗ Wčü˙˙˙ƒÄ…Āt׃ė Včü˙˙˙‰<$čü˙˙˙ƒƒÄ PV˙ŗčü˙˙˙ƒÄeô‰đ[^_]Ãƒė ‰ÆWčü˙˙˙‰4$čü˙˙˙ļŋU‰åWVSčü˙˙˙Ãƒė\‹ƒ‹…Ā„üƒėj:Pčü˙˙˙ƒÄ…Ā„ŪxE܃ėP‰E°EäWP‰Æ‰EŦčü˙˙˙YXVuÄVčü˙˙˙‰4$čü˙˙˙‹E䋋ƒÄƒč ‰M´9Č…|ƒė Včü˙˙˙ƒÄ„Ā…ʍEāƒėPW}ĐWčü˙˙˙XEÔZWP‰Į‰E¨čü˙˙˙‰<$čü˙˙˙ƒÄčü˙˙˙ƒė Pčü˙˙˙}ČƒÄ ˙u°PWčü˙˙˙ZYW}ĖWčü˙˙˙‰<$čü˙˙˙EØƒÄ ˙u¨WP‰E¤čü˙˙˙X˙u¤Včü˙˙˙‹E؃ăč ;E´…Z‹E˃č ;E´…[‹Eȃč ;E´…\‹Eԃč ;E´…í‹EЃč ;E´…Žƒė Včü˙˙˙ƒÄ„Ā„Šƒė ˙uŦčü˙˙˙}ā‹EäW‰E¨čü˙˙˙ƒÄ ˙u¨WV˙u°čü˙˙˙‹EāƒÄ ƒč ;E´…ž‹Eäƒč ;E´…Ÿƒė˙u°˙učü˙˙˙‹E܃ăč ;E´…‹Eăč ;E´…‹Eeô[^_]vƒėV˙učü˙˙˙ƒÄëЍ´&E˃ėuÜPƒæ PVčü˙˙˙Y_}āVWčü˙˙˙‰<$čü˙˙˙ƒÄčü˙˙˙ƒė Pčü˙˙˙UČƒÄ RPEÔP‰Æčü˙˙˙XEØZVP‰Æčü˙˙˙‰4$čü˙˙˙EäƒÄ WVP‰EŦčü˙˙˙X˙uŦ˙učü˙˙˙‹E䋋ƒÄƒč ‰M´9Č…ü‹E؃č ;E´… ‹Eԃč ;E´…î‹Eāƒč ;E´…˙‹E܃č ;E´„˙˙˙‹UŦčh ˙˙éķū˙˙vUāčX ˙˙éwũ˙˙v‹UŦčH ˙˙éEū˙˙vEäƒėPƒP˙učü˙˙˙ƒÄé˛ū˙˙f‹UŦč ˙˙éū˙˙vUØč ˙˙éUū˙˙v‰účų˙˙éUū˙˙t&‹UŦčč˙˙édū˙˙v‹UŦčØ˙˙é™ũ˙˙v‹UŦčČ˙˙é˜ũ˙˙v‹UŦč¸˙˙é—ũ˙˙vUĐč¨˙˙é÷ū˙˙v‹UŦč˜˙˙é˙˙˙v‹UŦčˆ˙˙éæū˙˙v‹UŦčx˙˙éôū˙˙‰Æ‹ƒ‰E´‹Eԃč ;E´tUĐčU˙˙‹Eāƒč ;E´tUĐčB˙˙‹E܃č ;E´tUĐč/˙˙ƒė Včü˙˙˙‰Æ‹ƒ‰E´ëĉƋEā‹“ƒč ‰U´9ĐtUäčü˙˙븉Ƌƒ‰E´ëĢ‰Æ‹E䋓ƒč ‰U´9ĐtUĐčĐ˙˙‹E؃č ;E´„Y˙˙˙UĐčš˙˙éL˙˙˙‰Æ‹E܃č ;E´…†‹Eăč ;E´„e˙˙˙UÃčŒ˙˙éX˙˙˙‰Æ‹ƒ‰E´ëĒ‰Æ‹E؋“ƒč ‰U´9Đ„ųū˙˙UäčY˙˙éėū˙˙‰Æ‹Eȃč ;E´t‹UŦč?˙˙‹Eԃč ;E´t‹UŦč,˙˙‹EЃč ;E´„z˙˙˙‹UŦč˙˙ém˙˙˙‰Æ‹E˃č ;E´tą‹UŦčû˙˙ë§ëቯ‹E؃č ;E´t܋UŦčâ˙˙ëŌ‰Æëëú‰Æé0˙˙˙‰ÆëŖ‰Æ‹Eċ“ƒč ‰U´9ĐtUāč˛˙˙‹Eäƒč ;E´„tū˙˙Uāč›˙˙égū˙˙‰Æ‹ƒ‰E´ë׉ƋEäƒč ;E´„Õū˙˙UØčp˙˙éČū˙˙‰Æ‹Eāƒč ;E´t׍UØčV˙˙ë͍t&U‰åWVSuāčü˙˙˙Ãƒė(Včü˙˙˙ƒ‰$Včü˙˙˙ƒÄ…Āu]Eäƒė Pčü˙˙˙j‹}äčü˙˙˙‰ÆXZWVčü˙˙˙‹EZYĖVPčü˙˙˙‹E䋺ƒÄƒč 9đ…„‹Eāƒč 9đu1eô[^_]ÃfƒƒėPVčü˙˙˙ƒÄ…Āu)‹ŗ‹Eāƒč 9đtĪUäč‘˙˙eô[^_]Éöŧ'ƒƒė˙uāPčü˙˙˙X‹ƒ˙0čü˙˙˙ƒÄ‹ŗë˛t&UßčH˙˙éo˙˙˙‹ŗ‰Į‹Eāƒč 9đtUßč)˙˙ƒė Wčü˙˙˙ƒė ‰ĮVčü˙˙˙ƒÄ‹E䋺ƒč 9đtĮUßčú˙˙ëŊ‰Įëât&Sčü˙˙˙Ãƒėčü˙˙˙ƒė ˙p$čü˙˙˙‰$čü˙˙˙ƒÄ[Ít&Sčü˙˙˙Ãƒėčü˙˙˙ƒė ˙p$čü˙˙˙‰$čü˙˙˙ƒÄ[Ít&VSčü˙˙˙Ãƒė‹t$čü˙˙˙ƒė‹L$QR˙p$Včü˙˙˙ƒÄ‰đ[^‰öŧ'VSčü˙˙˙Ãƒėčü˙˙˙‹@$‹€ø…ĀtF“ƒėR˙p čü˙˙˙ZYPjI‰Æčü˙˙˙XZV‹D$˙0čü˙˙˙‰4$čü˙˙˙Į$čü˙˙˙ļ‹ŗƒė˙6‹D$˙0čü˙˙˙X˙6čü˙˙˙čü˙˙˙t&U‰åWVSĩÅū˙˙čü˙˙˙ÃėL‹}ëļčü˙˙˙ƒ8…‚ƒėjV˙wčü˙˙˙ƒÄƒø˙t܅Ā…ī‹EĮ@‹ŗëvŧ'čü˙˙˙„Ā…ŗ‹Eƒė ˙pčü˙˙˙ƒÄƒø˙uŨčü˙˙˙ƒ8tā…Ôū˙˙ŊØū˙˙ƒėĮ…Ôū˙˙ÎPWčü˙˙˙YX…Æū˙˙PƒP…Čū˙˙P‰…´ū˙˙čü˙˙˙Ėū˙˙ƒƒÄ P˙ĩ´ū˙˙Q‰´ū˙˙čü˙˙˙X…Đū˙˙Z‰ÂƒP˙ĩ´ū˙˙R‰•´ū˙˙čü˙˙˙YÜū˙˙XW˙ĩ´ū˙˙Q‰´ū˙˙čü˙˙˙XŊāū˙˙ƒZP˙ĩ´ū˙˙Wčü˙˙˙YX…äū˙˙‰Âƒ‰•´ū˙˙PWRčü˙˙˙XŊčū˙˙ƒZP˙ĩ´ū˙˙Wčü˙˙˙Wčü˙˙˙‹…čū˙˙ƒÄƒč 9đ…û‹…äū˙˙ƒč 9đ…Ú‹…āū˙˙ƒč 9đ…š‹…Üū˙˙ƒč 9đ…˜‹…Đū˙˙ƒč 9đu{‹…Ėū˙˙ƒč 9đu^‹…Čū˙˙ƒč 9đuA‹…Øū˙˙ƒč 9đ„Xū˙˙‰účĄ˙˙čü˙˙˙„Ā„Qū˙˙t&‹EĮ@˙˙˙˙eô[^_]Íļ‰účq˙˙ëļ´&‰úča˙˙뙍´&‰účQ˙˙éy˙˙˙t&‰účA˙˙é\˙˙˙t&‰úč1˙˙é;˙˙˙t&‰úč!˙˙é˙˙˙t&•Įū˙˙č ˙˙éõū˙˙…čū˙˙ƒė Pčü˙˙˙ƒƒÄ hËP…äū˙˙jP‰Æ‰…´ū˙˙čü˙˙˙XƒZP˙ŗčü˙˙˙‹•čū˙˙ƒÄ ˙rôRPčü˙˙˙‰4$čü˙˙˙‹…čū˙˙ƒÄƒč ;ƒ„+ũ˙˙‹•´ū˙˙č‚˙˙éũ˙˙ƒø…l˙˙˙ļ…Åū˙˙‹E´ƒč 9ø… ‹E“€xƒDƒė˙uˆPEŧP‰EŒčü˙˙˙ƒu¸ƒÄ ˙ĩx˙˙˙PVčü˙˙˙ƒÄ˙uŒV˙u”˙učü˙˙˙‹E¸ƒÄƒč 9ø…0‹Eŧƒč 9ø…;‹Euƒė˙p\˙pXVčü˙˙˙YXƒ˙uˆPEÄP‰…d˙˙˙čü˙˙˙ƒÄV˙ĩd˙˙˙˙u”˙učü˙˙˙‹Eăăč 9ø…õ‹Eƒč 9ø…E˃ė˙uˆ˙u P‰Æ‰…l˙˙˙čü˙˙˙ƒƒÄ ˙ĩx˙˙˙PEČP‰E„čü˙˙˙ƒÄV˙u„˙u”˙učü˙˙˙‹Eȃăč 9ø…ˇ‹E˃č 9ø…ƒė˙u˙ĩx˙˙˙čü˙˙˙X‹EÜZ˙pôP˙učü˙˙˙‹E܃ăč 9ø…ŸƒĮE”ĮE€‰…h˙˙˙鞍t&‹Fē‹Hô…ÉDƒė˙vP˙u„čü˙˙˙X‹F ‹ZQ˙u„‰…|˙˙˙EЉt˙˙˙P‰EŒčü˙˙˙YX˙ĩ|˙˙˙˙uŒ˙ĩl˙˙˙čü˙˙˙‹EĐƒÄ ƒč 9ø…‹Eԃė˙uˆ˙uĖP‰…|˙˙˙čü˙˙˙EØƒÄ j˙ĩ|˙˙˙Pčü˙˙˙XƒZjP˙učü˙˙˙‹EØƒÄ ˙pôP˙učü˙˙˙“ƒÄ j RPčü˙˙˙‹E؃ăč 9ø…G‹Eԃč 9ø…)‹vƒė˙ĩt˙˙˙˙u„˙uˆčü˙˙˙YXV˙uˆ˙ĩx˙˙˙čü˙˙˙‹EāƒÄ ƒč 9ø…@ƒė˙ĩx˙˙˙˙ĩp˙˙˙čü˙˙˙Z˙uä˙učü˙˙˙‹EäƒÄƒč 9ø…˙ƒƒėj P˙učü˙˙˙‹E܃ăč 9ø…Ę‹E˃č 9ø…Ŧ‹Eȃč 9øurƒE”ƒė ˙učü˙˙˙ƒÄ9E”Įƒė˙u”˙učü˙˙˙‰Æ‹ƒÄ…Āt˃E€‹E€ƒø…&ū˙˙ƒė˙ĩh˙˙˙˙učü˙˙˙ƒÄé ū˙˙t&‹•p˙˙˙čŃū˙éeū˙˙‹•p˙˙˙čĩƒū˙é~˙˙˙‹•p˙˙˙čĨƒū˙éĮū˙˙‹•p˙˙˙蕃ū˙éŠū˙˙‹•p˙˙˙腃ū˙éD˙˙˙‹•p˙˙˙čuƒū˙é&˙˙˙‹Uˆčhƒū˙éôū˙˙v‹•p˙˙˙čUƒū˙é°ū˙˙‹E€…Āu'ƒƒėP˙učü˙˙˙‹EœƒÄƒč 9øu'eô[^_]̓ƒėP˙učü˙˙˙‹EœƒÄƒč 9øtŲ‹•p˙˙˙čø‚ū˙eô[^_]˕p˙˙˙čå‚ū˙‹E¤ƒč 9ø„Ąú˙˙‹•p˙˙˙čĖ‚ū˙é‘ú˙˙‹•p˙˙˙čŧ‚ū˙‹Eŧƒč 9ø„Åû˙˙‹•p˙˙˙čŖ‚ū˙éĩû˙˙‹•p˙˙˙蓂ū˙‹Eƒč 9ø„ü˙˙‹•p˙˙˙čz‚ū˙éđû˙˙‹•p˙˙˙čj‚ū˙‹E˃č 9ø„>ü˙˙‹•p˙˙˙čQ‚ū˙é.ü˙˙‹•p˙˙˙čA‚ū˙éQü˙˙‹•p˙˙˙č1‚ū˙éĐú˙˙‹•p˙˙˙č!‚ū˙é˛ú˙˙‹•p˙˙˙č‚ū˙é5ú˙˙‹•p˙˙˙č‚ū˙é3ú˙˙‰Æ‹Eȃč 9øt ‹•p˙˙˙čåū˙‹E˃č 9øu<‹Eœƒč 9øtU›čɁū˙ƒė Včü˙˙˙‰Æ‹E¨ƒč 9øt ‹•p˙˙˙芁ū˙‹EŦƒč 9øtċ•p˙˙˙蔁ū˙ëˇ‰Æ‹E¸ƒč 9øt ‹•p˙˙˙č{ū˙‹Eŧƒč 9øt–ëЉÆë‰ƋE ‹ģƒč 9øt ‹•p˙˙˙čNū˙‹E¤ƒč 9ø„e˙˙˙량ƋEäƒč 9øt‹Uˆč*ū˙‹E܃č 9øt‹Uˆčū˙‹E˃č 9øt‹UŒčū˙‹Eȃč 9ø„˙˙˙‹•d˙˙˙čí€ū˙é ˙˙˙‰Æë牯‹Eāƒč 9øtĀ‹•p˙˙˙č̀ū˙ëŗ‰Æ‹E؃č 9øt ‹•p˙˙˙贀ū˙‹Eԃč 9øt’ëЉÆëđ‰Æëˆ‰Æ‹EЃč 9øtŽ‹•p˙˙˙艀ū˙끉Æéz˙˙˙‰Æ‹E܃č 9ø„•ū˙˙éĖū˙˙‰Æ‹ģé˙˙˙‰Æé|ū˙˙‰Æ‹Eăč 9øt ‹•p˙˙˙č@€ū˙‹Eƒč 9ø„Wū˙˙éŽū˙˙‰Æ‹E´ƒč 9ø„Bū˙˙éyū˙˙‰Æé–ū˙˙‰Æ‹E°ƒč 9øtڋ•p˙˙˙čúū˙ë͉Æé ū˙˙‰Æë­ļŋU‰åWVSEäčü˙˙˙Ãƒėp‰E˜‹} PƒPE°P‰E čü˙˙˙^Xƒ‹‹P˙u‰M¤čü˙˙˙‹U°ƒÄ ‹‹˙rôRP‰M¤čü˙˙˙MāƒÄ ‹“Q‰M”M¸˙w‰U¤Q‰Mčü˙˙˙U܍ƒu´ƒÄ RPV‰Uœčü˙˙˙ƒÄ˙uV˙u ˙učü˙˙˙‹E´‹‹ƒÄƒč ‰M¤9Č…ė‹E¸ƒč ;E¤…ôƒė Wčü˙˙˙Z‰EäEŧY˙u˜P‰Ečü˙˙˙^uĀXƒ˙uœPVčü˙˙˙ƒÄ˙uV˙u ˙učü˙˙˙‹EƒÄƒč ;E¤…Ģ‹Eŧƒč ;E¤…ŗƒė Wčü˙˙˙Z‰EäEÄY˙u˜P‰Ečü˙˙˙^uČXƒ˙uœPVčü˙˙˙ƒÄ˙uV˙u ˙učü˙˙˙‹Eȃăč ;E¤…j‹Eăč ;E¤…rƒė Wčü˙˙˙Z‰EäEĖY˙u˜P‰Ečü˙˙˙Yƒ^uĐ˙uœPVčü˙˙˙ƒÄ˙uV˙u ˙učü˙˙˙‹EЃÄƒč ;E¤…)‹E˃č ;E¤…1ƒu؃ė˙u”PVčü˙˙˙ƒƒÄ ˙uœPEÔP‰Ečü˙˙˙ƒÄV˙u˙u ˙učü˙˙˙‹Eԃăč ;E¤…ë‹E؃č ;E¤…ķƒė˙w4˙w0˙uœčü˙˙˙XZV‹u”ƒPVčü˙˙˙ƒÄ˙uœV˙u ˙učü˙˙˙‹EāƒÄƒč ;E¤…¸‹E܃č ;E¤…ĀG8ƒėP˙u˜čü˙˙˙‹EäY^˙pôP˙učü˙˙˙^Z“RP‰U čü˙˙˙‹EäƒÄƒč ;E¤…”1ö됍t&ƒÆƒė Wčü˙˙˙ƒÄ9Æ}5ƒėVWčü˙˙˙ƒÄ€xtڃėVWčü˙˙˙ƒÄ P˙w˙učü˙˙˙ƒÄëŧt&ƒƒėP˙učü˙˙˙‹U°ƒÄ ˙rôRPčü˙˙˙ZY˙u Pčü˙˙˙‹E°ƒÄƒč ;E¤ueô[^_]ËU”č=|ū˙é_˙˙˙‹U˜č0|ū˙eô[^_]ËU˜č |ū˙‹E¸ƒč ;E¤„ ũ˙˙‹U˜č |ū˙é˙ü˙˙‹U”čü{ū˙‹Eŧƒč ;E¤„Mũ˙˙‹U”čå{ū˙é@ũ˙˙‹U”čØ{ū˙‹Eăč ;E¤„Žũ˙˙‹U”čÁ{ū˙éũ˙˙‹U”č´{ū˙‹E˃č ;E¤„Īũ˙˙‹U”č{ū˙éÂũ˙˙‹U˜č{ū˙‹E؃č ;E¤„ ū˙˙‹U˜čy{ū˙éū˙˙‹U˜čl{ū˙‹E܃č ;E¤„@ū˙˙‹U˜čU{ū˙é3ū˙˙‰Æ‹Eԃč ;E¤t‹U˜č;{ū˙‹E؃č ;E¤u<‹E°ƒč ;E¤tU¯č{ū˙ƒė Včü˙˙˙‰Æ‹Eāƒč ;E¤t‹U˜č˙zū˙‹E܃č ;E¤tċU˜čėzū˙ë牯ë‹E´‹“ƒč ‰U¤9Đt‹U˜čÉzū˙‹E¸ƒč ;E¤tŽëČ‰Æ‹ƒ‰E¤ëæ‰Æ‹EЃč ;E¤t‹U”čšzū˙‹E˃č ;E¤„[˙˙˙‹U”čƒzū˙éN˙˙˙‰Æë≯‹Eȃč ;E¤t‹U”čezū˙‹Eăč ;E¤„&˙˙˙ëɉÆëë‰Æ‹Eŧƒč ;E¤„˙˙˙ë˛‰Æ‹Eäƒč ;E¤„üū˙˙량ƋEƒč ;E¤tĪ‹U”čzū˙ëʼnÆéŅū˙˙‰Æé˙˙˙t&U‰åWVSEäčü˙˙˙ÃƒÄ€‰Æ‰EŒPƒ‹} PE P‰Ečü˙˙˙Xƒ‹‹ZP˙u‰M”čü˙˙˙YXƒ‹‹P˙u‰M”čü˙˙˙‹U ƒÄ ˙rôR‹“P‰U”čü˙˙˙‹‹‰<$‰M”čü˙˙˙YM¤‰EäZ‹“VQ‰M„‰U”čü˙˙˙Xu¨ƒZUÜRPV‰Uˆčü˙˙˙ƒÄ˙u„V˙u˙učü˙˙˙‹E¨‹‹ƒÄƒč ‰M”9Č…m‹E¤ƒč ;E”…uƒė Wčü˙˙˙Y‰EäEŦ^˙uŒP‰E„čü˙˙˙Xu°ƒZ˙uˆPVčü˙˙˙ƒÄ˙u„V˙u˙učü˙˙˙‹E°ƒÄƒč ;E”…,‹EŦƒč ;E”…6ƒė Wčü˙˙˙Y‰EäE´^˙uŒP‰E„čü˙˙˙Xu¸ƒZ˙uˆPVčü˙˙˙ƒÄ˙u„V˙u˙učü˙˙˙‹E¸ƒÄUā‰U„ƒč ;E”…é‹E´ƒč ;E”…ƒƒė˙u„PEĀP‰E€čü˙˙˙ƒuŧƒÄ ˙uˆPVčü˙˙˙ƒÄ˙u€V˙u˙učü˙˙˙‹EŧƒÄƒč ;E”…Ö‹Eƒč ;E”…Ūƒė Wčü˙˙˙uÄƒÄ RPVčü˙˙˙YXƒ˙u„PEČP‰E€čü˙˙˙ƒÄV˙u€˙u˙učü˙˙˙‹Eȃăč ;E”…˜‹Eăč ;E”…>ƒė Wčü˙˙˙uĖƒÄ RPVčü˙˙˙XƒZ˙u„PEĐP‰E€čü˙˙˙ƒÄV˙u€˙u˙učü˙˙˙‹EЃÄƒč ;E”…ø‹E˃č ;E”…Ī‹ƒ€8teƒė Wčü˙˙˙Z‰EäEÔY˙uŒP‰E€čü˙˙˙^uØXƒ˙uˆPVčü˙˙˙ƒÄ˙u€V˙u˙učü˙˙˙‹E؃ăč ;E”…a‹Eԃč ;E”…Eƒė Wčü˙˙˙ZYP˙uˆčü˙˙˙^X‹EÜ˙pôP˙učü˙˙˙‹E܃ăč ;E”…E؃ėPƒP˙uŒčü˙˙˙EÔƒÄ ‹u„PƒPVčü˙˙˙ƒÄ˙uŒV˙u˙učü˙˙˙‹EāƒÄƒč ;E”…<‹Eäƒč ;E”…DƒƒėP˙u‰Ečü˙˙˙ƒÄ1öë;´&ƒėVWčü˙˙˙‰$čü˙˙˙ƒÄ…Ā~ƒėVWčü˙˙˙ZYP˙učü˙˙˙ƒÄƒÆƒė Wčü˙˙˙ƒÄ9Æ|ŧƒƒėP˙učü˙˙˙‹U ƒÄ ˙rôRPčü˙˙˙ZY˙uPčü˙˙˙‹E ƒÄƒč ;E”…Ģeô[^_]ËU„čMuū˙éŽū˙˙‹U„č@uū˙é’ū˙˙‹UŒč3uū˙é$ū˙˙‹UŒč&uū˙éĩũ˙˙‹UŒčuū˙éûũ˙˙‹U„č uū˙é×ü˙˙‹UŒč˙tū˙‹Eƒč ;E”„"ũ˙˙‹UŒččtū˙éũ˙˙‹UŒčÛtū˙é[ũ˙˙‹UˆčÎtū˙‹Eäƒč ;E”„ŧū˙˙‹U„čˇtū˙é¯ū˙˙‹UŒčĒtū˙eô[^_]ÍUāčštū˙‹E¤ƒč ;E”„‹û˙˙Uāčƒtū˙é~û˙˙Mā‰Ęčttū˙‹EŦƒč ;E”„Ęû˙˙Mā‰Ęč[tū˙éģû˙˙čQtū˙é ü˙˙‹UŒčDtū˙éÜũ˙˙‰Æ‹Eŧƒč ;E”t‹UŒč*tū˙‹Eƒč ;E”u<‹E ƒč ;E”tUŸč tū˙ƒė Včü˙˙˙‰Æ‹Eȃč ;E”t‹UŒčîsū˙‹Eăč ;E”tċUŒčÛsū˙ë牯‹E´ƒč ;E”t­UāčÄsū˙ëŖ‰Æ‹E°ƒč ;E”tUāč­sū˙‹EŦƒč ;E”tƒëԉÆë‹E؃č ;E”t‹U„č‡sū˙‹Eԃč ;E”„Y˙˙˙‹U„čpsū˙éL˙˙˙‰Æë≯‹EЃč ;E”t‹UŒčRsū˙‹E˃č ;E”„$˙˙˙é[˙˙˙‰Æë良‹E܃č ;E”„ ˙˙˙éA˙˙˙‰Æ‹Eāƒč ;E”t‹Uˆčsū˙‹Eäƒč ;E”„áū˙˙‹Uˆčørū˙éÔū˙˙‰Æë≯‹E¸ƒč ;E”„˙˙˙UāčÖrū˙éúū˙˙‰Æ‹ƒ‰E”‹E¤ƒč ;E”„˜ū˙˙éæū˙˙‰ÆéŒū˙˙‰Æ‹E¨‹‹ƒč ‰M”9ČtЍUāčŽrū˙ëÆ‰Æé[ū˙˙‰Æéū˙˙´&ŧ'U‰åWVSĩ ˙˙˙čü˙˙˙Ãė‹}GPVčü˙˙˙‰4$čü˙˙˙X…$˙˙˙ZVP‰…˙˙˙čü˙˙˙˙ĩ˙˙˙‹ŗčü˙˙˙ƒÄ„ĀuAƒė˙w‹ģƒ‹ŗP˙7čü˙˙˙Y˙7‹ŗčü˙˙˙Į$čü˙˙˙´&ƒƒė‹ŗP˙wčü˙˙˙ƒÄ…‰…˙˙˙tš…,˙˙˙ƒė ‰Æ‰… ˙˙˙…`˙˙˙P‰…˙˙˙čü˙˙˙‹‹‹ģÆEÔĮEĐÆEÕĮE؍A‹O ĮEÜĮEāĮE䉅`˙˙˙‹G‰Ę‰˙˙˙‰…,˙˙˙‰Á‰…˙˙˙‹@ô‰”,˙˙˙Į…0˙˙˙X‹AôZjđPčü˙˙˙‹WY^‹rô‰•4˙˙˙4˙˙˙‰•˙˙˙‹W‰đū˙˙ΉjV‰•üū˙˙čü˙˙˙‹W‹w‹Bô‰•øū˙˙‹“‰ĩôū˙˙‰´,˙˙˙Į…<˙˙˙B Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙‰…,˙˙˙B4Į…P˙˙˙‰…`˙˙˙B ‹“‰…4˙˙˙B•T˙˙˙‰…8˙˙˙‰$‰•ėū˙˙čü˙˙˙‹“‹ŗĮ…X˙˙˙B‰…8˙˙˙F ‰…\˙˙˙XZ•8˙˙˙R˙ĩ˙˙˙‰•čū˙˙čü˙˙˙_X˙u ˙ĩđū˙˙čü˙˙˙Y_Ŋ(˙˙˙˙ĩ ˙˙˙Wčü˙˙˙Z˙ĩ˙˙˙˙ĩ(˙˙˙čü˙˙˙‹…(˙˙˙ƒÄƒč 9đ… ƒė ˙ĩ˙˙˙čü˙˙˙‹ƒƒÄƒĀ ‰…,˙˙˙‹ƒƒĀ4‰…`˙˙˙‹ƒƒĀ ‰…4˙˙˙‹ƒƒĀ‰…8˙˙˙‹…\˙˙˙ƒč 9đ…拃ƒė ˙ĩėū˙˙ƒĀ‰…8˙˙˙čü˙˙˙‹…øū˙˙‹ôū˙˙‹Ŋüū˙˙‹@ô‰Œ,˙˙˙‹…˙˙˙‹˙˙˙‰…4˙˙˙‹@ô‰ŧ4˙˙˙‹…˙˙˙‰…,˙˙˙‹@ô‰Œ,˙˙˙‹ƒƒĀ‰…`˙˙˙X˙ĩ˙˙˙čü˙˙˙‹…$˙˙˙ƒÄƒč 9đu@‹… ˙˙˙ƒč 9đueô[^_]Ív•˙˙˙č•nū˙éäū˙˙‹• ˙˙˙č…nū˙eô[^_]Ѝt&‹• ˙˙˙čmnū˙ëŗv‰účanū˙é˙˙˙‰Įƒė ˙ĩ ˙˙˙čü˙˙˙ƒÄ‹…$˙˙˙ƒč 9đt •˙˙˙č1nū˙‹… ˙˙˙ƒč 9đt •˙˙˙čnū˙ƒė Wčü˙˙˙‰Į‹ŗëՉƋ… ˙˙˙ƒč ;ƒt •,˙˙˙ččmū˙ƒė Včü˙˙˙‹ŗ‰Į‹ƒƒė ˙ĩ˙˙˙ƒĀ‰…`˙˙˙čü˙˙˙ƒÄéi˙˙˙‰Į‹…˙˙˙‹˙˙˙‹ŗ‰…,˙˙˙‹@ô‰Œ,˙˙˙ëĩ‰Įé<˙˙˙‰Į‹…(˙˙˙ƒč 9đ„˙˙˙•˙˙˙čgmū˙é˙˙˙ƒė ˙ĩčū˙˙‰…˙˙˙čü˙˙˙XWYR˙ĩ ˙˙˙čü˙˙˙‹Ŋ˙˙˙ƒÄéX˙˙˙ë U‰åWVSčü˙˙˙ÃƒėdƒP˙ŗčü˙˙˙ƒÄ…Ā„÷EƒėĮE´˙˙˙˙ĮE¸˙˙˙˙ĮEĐP‰Eœ‹ƒĮEÔĮEØ˙0EŧP‰E¤čü˙˙˙E˃ÄĮEÜĮEāĮEä1ö‰E ët&wčü˙˙˙„Ā„ƒėVj|˙u¤čü˙˙˙ƒÄƒø˙‰Į„„‰Â‹Eŧ)ō‹@ô9ƇęRV‹u ˙u¤Včü˙˙˙ƒÄ‹Eā;EätA…ĀtƒėVPuÜčü˙˙˙‹EāƒÄƒĀ‰Eā‹E˃č ;ƒ„z˙˙˙UČčúkū˙ém˙˙˙t&u܃ė˙u PVčü˙˙˙ƒÄëĮv‹Eŧ‹@ô9đ‚j˙VuČ˙u¤Včü˙˙˙ƒÄ‹Eā;Eä„6…ĀtƒėVPuÜčü˙˙˙‹EāƒÄƒĀ‰Eā‹Eȃč ;ƒtUĖčykū˙‰öŧ'‹E܋uЋUä‰EЋEԉu܉Á‹Eā9ΉMā‰EԋE؉U؉Eät9}ˉM¤ëļƒÆ9u¤t ‹ƒč ;ƒtë‰úƒÆčkū˙9u¤uät&‹u܅öt ƒė Včü˙˙˙ƒÄ‹Eŧƒč ;ƒ…[‹UЋEÔĮEĀ˙˙˙˙)ĐÁøƒø„âu胃ė˙ŗPVčü˙˙˙Včü˙˙˙‹Eăăč ;ƒ…‹EЃė j‰E¤čü˙˙˙ZY‹MĀ˙u¤P‹u¸‹}´‰E¤‰M čü˙˙˙‹E¤‹M ƒÄ‰x‰p‹}ԋuЉH 9÷t?M܉E ‰M¤ë vƒÆ9÷t!‹ƒč ;ƒtė‹U¤ƒÆč)jū˙9÷u䐍t&‹E ‹}ЉE¤…˙t ƒė Wčü˙˙˙ƒÄ‹E¤eô[^_]Ít&eô1Ā[^_]ÍE´ƒėƒÂPRčü˙˙˙ƒÄ„Ā„˙˙˙E¸ƒėP‹EЃĀPčü˙˙˙ƒÄ„Ā„åū˙˙‹EЃė˙uœƒĀ Pčü˙˙˙ƒÄ„Ā…üū˙˙éÃū˙˙vUÜčˆiū˙é˜ū˙˙UÜč{iū˙éÚū˙˙ƒėVuÜPVčü˙˙˙ƒÄéŅũ˙˙PƒVPƒPčü˙˙˙u܉Įƒė Včü˙˙˙‹EŧƒÄƒč ;ƒtUÄč$iū˙‰ūEЃė Pčü˙˙˙‰4$čü˙˙˙‰Į‹E˃č ;ƒt¸UČčöhū˙뎉ƋEăč ;ƒtUÜčÜhū˙븉Æë´‰Į‹Eȃč ;ƒt€UĖčžhū˙és˙˙˙PƒVPƒPčü˙˙˙ƒė ˙u¤‰Æčü˙˙˙ƒÄém˙˙˙´&ŧ'U‰åWVSčü˙˙˙Ãƒė,‹u€žÜteô[^_]Ѝ´&ƆÜčü˙˙˙9†ø‰ĮtXƒė jčü˙˙˙ƒÄ„ĀtA‹†ø…‰EÔt4‹@ …Āx ƒė Pčü˙˙˙ƒÄ‹Eԋ‰EЃč ;ƒuFƒė ˙uÔčü˙˙˙ƒÄ‰žøƒė Včü˙˙˙‰4$čü˙˙˙‰4$čü˙˙˙‰4$čü˙˙˙ƒÄeô[^_]ÍļUįč¨gū˙밉ƋEԋAô;ƒtUįčŒgū˙ƒė Včü˙˙˙vSčü˙˙˙Ãƒė˙t$˙t$čü˙˙˙ƒÄ[Ãë Sčü˙˙˙Ãƒė˙t$˙t$čü˙˙˙ƒÄ[Ѝ´&ŧ'U‰åWVSčü˙˙˙ÃƒėH‹EƒĀP‰EĐčü˙˙˙ƒÄ…‰EÔ…‡čü˙˙˙‹Uƒė ‰B ‹B$ÆB˙°‰EČčü˙˙˙ƒÄ…Ā„!ƒė Pčü˙˙˙ƒĀƒÄ‰EĖ‹MĖ‹APô‰Q‹@üƒč ;ƒ…I‹Eƒė Æ@˙uĐčü˙˙˙ƒÄ…‰EÔumeô[^_]Ѝt&ƒ}äh<PjWčü˙˙˙‹ŗƒƒÄ jPVčü˙˙˙ƒƒÄ jPVčü˙˙˙XZ˙uÔVčü˙˙˙‰<$čü˙˙˙ƒÄé˙˙˙t&ƒ}ähHPjWčü˙˙˙‹ŗƒƒÄ jPVčü˙˙˙ƒƒÄ jPVčü˙˙˙XZ˙uÔVčü˙˙˙‰<$čü˙˙˙ƒÄeô[^_]Éöŧ'ƒė jčü˙˙˙‰Â‰EċƒƒÄƒĀ‰B‰EĖ‹Eȋ°+°ĮBĮBĮB ‰đÁøiĀĢĒĒĒ…Ā…ŪĮEĀ‹EĀ‹MÄƉA‰A‰q ‹Mȋ‘‹ą9ō‰UÔ„Ų‰Įf…˙t‹ƒė‰‹F‰GFPGPčü˙˙˙ƒÄƒĮ ƒÆ 9uÔuԋEăė‰xP‹EČ˙°čü˙˙˙ƒÄ…‰Æ„ū˙˙ƒ}ähõPjWčü˙˙˙YXƒP˙ŗčü˙˙˙YZ“RPčü˙˙˙YZVPčü˙˙˙‰<$čü˙˙˙ƒÄéŊũ˙˙t&=UUUw{ƒė Včü˙˙˙‰EƒÄé˙˙˙t&Uäč@dū˙éĒũ˙˙‹}ĀéO˙˙˙ƒė ‰ÆWčü˙˙˙‰4$čü˙˙˙ƒė ‰ÆWčü˙˙˙‰4$čü˙˙˙‰Æƒė ˙uĐčü˙˙˙‰4$čü˙˙˙‰Æƒė ˙uÄčü˙˙˙ƒÄëÛčü˙˙˙ƒė ‰ÆWčü˙˙˙ƒÄëÆƒė Pčü˙˙˙XYW˙uĀčü˙˙˙ƒÄčü˙˙˙‰Æčü˙˙˙‹Eċ@…Ātރė Pčü˙˙˙ƒÄ렍ļSčü˙˙˙Ãƒėčü˙˙˙ƒė Pčü˙˙˙ƒÄ[Í´&ŧ'U‰åWVSEÄčü˙˙˙Ãƒėx‰E˜Pčü˙˙˙‹EƒÄ ‹˙pôP‹EăĀPčü˙˙˙‹EƒĀ‰E”‰$čü˙˙˙‹E‹@$‰E´‰$čü˙˙˙‹P+ƒÄ‰ĐÁøiĀĢĒĒĒ…Ā…*‹E‹…Āt ‹Hô…É…áE˃ė˙u˜Pčü˙˙˙‹E UÃ^_‰EԋER‹uĖ…ĀƒEEPEØPčü˙˙˙X‹EZV‰E܍EāPčü˙˙˙YEä_}ĐWVPčü˙˙˙‹E˃ăč ;ƒ…{‹Eƒė uÔ˙p$čü˙˙˙_Z‹VP˙R‹M ƒÄ…Ét&‹ƒ€8t Į ‹ƒ€8…=ƒė Včü˙˙˙Y˙u”čü˙˙˙XZj˙u˜čü˙˙˙ƒÄeô[^_]ËEăė˙ŗƒĀPčü˙˙˙‹EƒÄ ‹˙pôP‹EăĀPčü˙˙˙ƒÄéęū˙˙ƒƒėP‰E¤‹EăĀPčü˙˙˙XƒZP‹EăĀPčü˙˙˙ƒ^_P‹EăĀPčü˙˙˙‹E‹@$‰E´‰$čü˙˙˙‹P+ƒÄ‰ĐÁøiĀĢĒĒĒ…ĀŽbū˙˙D@ũÁā‰E°é°‰öŧ'ƒė Pčü˙˙˙ƒĀƒÄ‰EŦ‹EŦ‹u°ƒė0EČ˙v˙6Pčü˙˙˙X‹EÄZj˙u¤ƒĀPčü˙˙˙‹EČƒÄ ˙pôP‹EăĀPčü˙˙˙ƒƒÄ jP‹EăĀPčü˙˙˙‹FƒÄ ˙pôP‹EăĀPčü˙˙˙‹Eȃăč ;ƒ…qƒm° ‹E°ƒøô„Ŗũ˙˙‹Eƒė ‹@$˙°‰E¨čü˙˙˙ƒÄ…Ā…7˙˙˙ƒė jčü˙˙˙‰Á‰E ‹ƒƒÄƒĀ‰A‰EŦ‹E¨‹°+°ĮAĮAĮA ‰đÁøiĀĢĒĒĒ…Ā…ũĮEœ‹Eœ‹U ƉB‰B‰r ‹U¨‹Š‹˛9ņ‰M´„ę‰Į‰öŧ'…˙t‹ƒė‰‹F‰GFPGPčü˙˙˙ƒÄƒĮ ƒÆ 9u´uԋE ƒė‰xP‹E¨˙°čü˙˙˙ƒÄ…‰Æ„aū˙˙ƒ}ĐhõPjWčü˙˙˙YXƒP˙ŗčü˙˙˙YZ“RPčü˙˙˙YZVPčü˙˙˙‰<$čü˙˙˙ƒÄéū˙˙t&uԉōč_ū˙é€ū˙˙‰öŧ'=UUU‡îƒė Včü˙˙˙‰EœƒÄéëū˙˙‹}œéE˙˙˙‰účâ^ū˙éyü˙˙ƒė jčü˙˙˙‰ĮXZVWčü˙˙˙ƒÄ ˙ŗ˙ŗWčü˙˙˙ƒė Pčü˙˙˙XYW˙uœčü˙˙˙ƒÄčü˙˙˙ƒė ‰E´Wčü˙˙˙‹}´ƒÄƒė V‰ūčü˙˙˙ƒÄƒė ˙u”čü˙˙˙ƒÄƒėj˙u˜čü˙˙˙‰4$čü˙˙˙‰Æčü˙˙˙‹E ‹@…Āt ƒė Pčü˙˙˙ƒÄƒė ˙u čü˙˙˙ƒÄë°ƒė ‰ÆWčü˙˙˙ƒÄë čü˙˙˙‰Æë׉Į녉Æë‰Æë™‰Æ‹Eȃč ;ƒ„w˙˙˙UÔčæ]ū˙éj˙˙˙‰Æ‹Eā‹“ƒč ‰U´9Đt‰účÅ]ū˙‹E؃č ;E´tUĐč˛]ū˙‹E˃č ;E´„,˙˙˙UĐč›]ū˙é˙˙˙‰Æ‹ƒ‰E´ëĉƋƒ‰E´ëʍļŋU‰åWVS}äuāčü˙˙˙Ãƒė,čü˙˙˙ƒėj˙p$Wčü˙˙˙X‹EZ˙u ‹‰EÔƒĀ PVčü˙˙˙‹EƒÄ ‹‹H‹P‹‰MԉUЉEĖčü˙˙˙ƒėWV˙uÔ˙uĐ˙uĖPčü˙˙˙‹Eā‹ģƒÄ ƒč 9øu‹Eäƒč 9øu%eô[^_]Ѝt&UßčČ\ū˙‹Eäƒč 9øtáļ‰ōčą\ū˙eô[^_]Ã‹ģ‰Æ‹Eäƒč 9øtUßč\ū˙ƒė Včü˙˙˙‰Æ‹Eā‹ģƒč 9øtĶUßčl\ū˙ëɍvŧ'U‰åWVS}āčü˙˙˙Ãƒė0‹uFPƒ˙v˙6PƒPƒPWčü˙˙˙ƒÄ€}ā……E܃ė P‰EĐčü˙˙˙‹EäƒÄ…Ā„č‹ƒė Pƒh•PEØjP‰EÔčü˙˙˙ƒÄ˙uĐ˙uÔčü˙˙˙X˙uÔčü˙˙˙‹E܃Ä…Āt'ƒė jčü˙˙˙ƒÄ„Āt‹E܅Āt‹ƒė P˙RƒÄv‹Mä…ÉtYƒė jčü˙˙˙ƒÄ„ĀtH‹Mä…ÉtA‹‹“ƒč ‰UÔ9Đu_ƒė Qčü˙˙˙‹FƒÄƒč ;EÔt,‰účA[ū˙eô[^_]Éöŧ'‹ƒ‰EԋFƒč ;EÔuԍeô[^_]Ít&ƒé˙˙˙t&U܉MĐčõZū˙‹MĐ둉EԋFƒč ;ƒt‰účØZū˙ƒė ˙uÔčü˙˙˙‰EÔRRj˙uĐčü˙˙˙ƒÄPPEäjPčü˙˙˙ƒÄëŧƒė ˙uԉEĖčü˙˙˙‹E˃ĉEÔëÆ‰EÔëЍt&ŧ'U‰åWVSčü˙˙˙Ãƒė8‹E ‹} ‹pEÔj˙uV˙7Pčü˙˙˙ƒÄ;uÔ„Eäƒė P‰EČčü˙˙˙‹E ƒÄ‹‹@‰Á)ŅÁų…É„Ũģ1ö‰}Ėf)ĐÁøƒč9Æ„˛‹Uäģƒė‰EĐjBWPčü˙˙˙‹EĐƒÄ ‹˙pôP‹EäƒĀPčü˙˙˙‹EäƒÄ jWƒĀPčü˙˙˙‹E ƒÆƒÄ‹‹@‰Á)ŅÁų9ņv_…öt‹ƒųv†ƒƒėjP‹EäƒĀPčü˙˙˙‹E ƒÄ‹‹@)ĐÁøƒč9Æ…c˙˙˙‹Eäƒėj˙u˃ĀPčü˙˙˙‹E ƒÄ‹éB˙˙˙f‹}ȍEāƒėWPčü˙˙˙Į$Wčü˙˙˙‰<$čü˙˙˙_XƒP‹EäƒĀPčü˙˙˙‹EƒÄ ‹˙pôP‹EäƒĀPčü˙˙˙ƒY^P‹EäƒĀPčü˙˙˙‹EāƒÄ ˙pôP‹EäƒĀPčü˙˙˙XƒZP‹EäƒĀPčü˙˙˙_XƒP‹EäƒĀPčü˙˙˙ƒY^P‹EäƒĀPčü˙˙˙ƒu܉$ƒhPjVčü˙˙˙‹}ȃÄWVčü˙˙˙‰4$čü˙˙˙XZjWčü˙˙˙‹EāƒÄƒč ;ƒueô1Ā[^_]Íeô¸[^_]ËUČčXū˙ë߉ƋEāƒč ;ƒtUÛčûWū˙ƒė Včü˙˙˙ƒė ‰ĮV‰ūčü˙˙˙ƒÄƒėj˙uČčü˙˙˙ƒÄëŋƒė‰Æj˙uČčü˙˙˙‰4$čü˙˙˙‰Æë͐t&U‰åWVSuÜčü˙˙˙Ãƒė<‹U‰đčOÉ˙˙EփėP‹E ˙0EØP‰Į‰EÄčü˙˙˙XZVWčü˙˙˙ˆEËE؃Ä‹‹ƒč 9Ču]‹}ā‹uÜ9÷t7‹EĉEŧë t&ƒÆ9÷t!‹ƒč 9Čtđ‹UŧƒÆ‰MÄč"Wū˙9÷‹MÄuâv‹}܅˙t ƒė Wčü˙˙˙ƒÄļEÍeô[^_]ÍU׉MŧčîVū˙‹Mŧ듉Įƒė Včü˙˙˙‰<$čü˙˙˙‰Į‹E؃č ;ƒtߍU×čžVū˙ëՍļŋU‰åWVSčü˙˙˙ÃƒėT˙u˙u čü˙˙˙ƒÄ„Āu eô[^_]Ãfƒė ˙učü˙˙˙ƒÄ…‰Į…¸čü˙˙˙‹MƒėuˉAEËÆAP‹E˙0Včü˙˙˙Y_VuĐVčü˙˙˙X‹EZ‹@0‰Eŧ‹E‹@,VuØV‰E¸čü˙˙˙YEā_VP‰Į‰E´čü˙˙˙XZW}ÜWčü˙˙˙‹E⋺UäƒÄ‰Uƒč 9đ…čƒėW‹}ĀWčü˙˙˙EÄÆ$W˙uŧ˙u¸Pčü˙˙˙‹EăĉEŧ‹Eäƒč 9đ…Ā‹E܃č 9đ…‹E؃č 9đ…Ä‹EЃč 9đ…Æ‹E˃č 9đ…Č‹E‹x0;}ŧ„‹E}ԃė˙u´˙pWčü˙˙˙X‹EŧZWƒĀPčü˙˙˙‹Eԃăč 9đ…”‹Eƒė Æ@Pčü˙˙˙ƒÄ…‰Į„…ū˙˙ƒhHPj˙uĀčü˙˙˙‹ŗƒƒÄ jPVčü˙˙˙ƒƒÄ jPVčü˙˙˙ZYWVčü˙˙˙X˙uĀčü˙˙˙ƒÄé+ū˙˙t&ƒh<PEäjP‰EĀčü˙˙˙‹ŗƒƒÄ jPVčü˙˙˙ƒƒÄ jPVčü˙˙˙XZWVčü˙˙˙X˙uĀčü˙˙˙ƒÄéęũ˙˙f‰Á‹Eŧ;A4„ˇ…Āt'ƒė˙uPčü˙˙˙YX‹EƒĀPGPčü˙˙˙‹EƒÄ‹x0‹EƒĮ‰x0ƒė ˙učü˙˙˙ƒÄéqũ˙˙včķSū˙éū˙˙ļ‹U´čāSū˙é3ū˙˙v‹UĀčĐSū˙é1ū˙˙v‹UĀčĀSū˙é/ū˙˙v‹UĀč°Sū˙é-ū˙˙v‹UĀč Sū˙é+ū˙˙v‹UĀčSū˙é_ū˙˙‹Eƒė˙u˙uŧƒĀ,Pčü˙˙˙ƒÄé`˙˙˙‰Į‹E⋺ƒč 9đtUäčTSū˙‹E؃č 9đtUÔčBSū˙‹EЃč 9đtUÔč0Sū˙‹E˃č 9đtUÔčSū˙ƒė ˙učü˙˙˙‰<$čü˙˙˙ƒė ˙u‰Æčü˙˙˙‰4$čü˙˙˙‰Eŧ‹ƒč 9đt‹UĀčâRū˙‹}ŧëŋƒė ˙u‰Æčü˙˙˙‰4$čü˙˙˙‰ĮëωĮ‹ŗëЉĮ‹ŗék˙˙˙‰Į‹ŗéL˙˙˙‰Į‹E܃č 9đ„<˙˙˙‹U´čˆRū˙é/˙˙˙‰Į‹Eäƒč 9đtŲ‹U´čoRū˙ëΉĮ‹Eԃč 9đ„?˙˙˙‹UĀčURū˙é2˙˙˙U‰åWVSčü˙˙˙Ãƒė,‹u‹ģ‹–„G …Ō‰EätKƒƒėjPEäP‰EÔčü˙˙˙‹ļ„ƒÄƒÆƒė˙u ˙uÔVčü˙˙˙‹EäƒÄƒč 9øuCeô[^_]Ív‹†€…Āt>ƒƒėj PEäP‰EÔčü˙˙˙‹ļ€ƒÄƒÆ8느´&Uãč˜Qū˙eô[^_]̓ƒėPEäP‰EÔčü˙˙˙ƒÄÆˆém˙˙˙‰Æ‹Eäƒč 9øtUãčXQū˙ƒė Včü˙˙˙´&ŧ'U‰åWVSuāčü˙˙˙Ãƒė$˙u Včü˙˙˙YEä_˙uPčü˙˙˙X‹EZV˙p$čü˙˙˙‹E䋺ƒÄƒč 9đu‹Eāƒč 9đu'eô[^_]Í´&UßčĐPū˙‹Eāƒč 9đtߍļUßč¸Pū˙eô[^_]ÉƋEāƒč ;ƒtUßč˜Pū˙ƒė Včü˙˙˙ƒė ‰ĮVčü˙˙˙‰<$čü˙˙˙ļŋSčü˙˙˙Ãƒėčü˙˙˙ƒė˙t$˙t$Pčü˙˙˙ƒÄ[ÍļU‰åWVSEÜčü˙˙˙Ãƒė8‰Į‰EÔPčü˙˙˙X‹EÜZ˙u ƒĀPčü˙˙˙YEā^WPčü˙˙˙XuäEÚZP˙uāVčü˙˙˙Y_V˙učü˙˙˙‹Eä‹ģƒÄƒč 9øuQ‹Eāƒč 9øu7‹U܅Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹E܅Āt ƒė ‹P˙RƒÄeô[^_]Ít&‰ōč‰Oū˙ëĀ´&UÛčxOū˙ëĨ‰Æ‹Eä‹ģƒč 9øtUÛč\Oū˙‹Eāƒč 9øtUÛčJOū˙PPj˙uÔčü˙˙˙‰4$čü˙˙˙‰Æ‹ģëЉÆëې´&U‰åWVSčü˙˙˙Ãƒė,čü˙˙˙‹@$‹€‹¸„‹R ‹ ‹Q‹q‹O‰uЉUĖ9Ņ‹w‰MÔ„ļčü˙˙˙‹UĖ9”ˆUĖčü˙˙˙‹MÔļUĖ9Á”ĀЈEÔ„Ú„Ō…Â‰uԋuЋ}äƒė W‰EĐčü˙˙˙‹M䍃ƒÄ j?PAPčü˙˙˙‹M䍃ƒÄ j:PAPčü˙˙˙‹M䍃ƒÄ jPAPčü˙˙˙‹EЃÄ…Ā„%‹Eäƒė˙uЃĀPčü˙˙˙ƒƒÄƒėjP‹EäƒĀPčü˙˙˙ƒƒÄ j‰EĐP‹EäƒĀPčü˙˙˙ƒÄ…ö„‹EäƒėVƒĀPčü˙˙˙ƒƒÄƒėjP‹EäƒĀPčü˙˙˙‹EäƒÄ j˙uЃĀPčü˙˙˙‹MԃÄ…É„Ĩ‹Eäƒė˙uԃĀPčü˙˙˙ƒƒÄƒėj&P‹EäƒĀPčü˙˙˙ƒƒÄ j=P‹EäƒĀPčü˙˙˙ƒƒÄ jP‹EäƒĀPčü˙˙˙ƒuā‰$ƒhšPjVčü˙˙˙ƒÄWVčü˙˙˙‰4$čü˙˙˙XZjWčü˙˙˙ÆEԃÄļEԍeô[^_]Éöŧ'‹EЉEÔé9ū˙˙t&‹}äƒė W‰EĖčü˙˙˙‹M䍃ƒÄ j?PAPčü˙˙˙‹M䍃ƒÄ jPAPčü˙˙˙‹E˃Ä…Ā„ņ‹Eäƒė˙u˃ĀPčü˙˙˙ƒƒÄƒėjP‹EäƒĀPčü˙˙˙ƒƒÄ jP‹EäƒĀPčü˙˙˙‹EЃÄ…Ā„ž‹Eäƒė˙uЃĀPčü˙˙˙ƒƒÄƒėj P‹EäƒĀPčü˙˙˙ƒÄ…ö„F‹EäƒėVƒĀPčü˙˙˙ƒƒÄƒėjP‹EäƒĀPčü˙˙˙ƒƒÄ j>P‹EäƒĀPčü˙˙˙ƒƒÄ j=P‹EäƒĀPčü˙˙˙ƒƒÄ j>P‹EäƒĀPčü˙˙˙ƒƒÄ j:P‹EäƒĀPčü˙˙˙ƒuā‰$ƒhÅPjVčü˙˙˙ƒÄWVčü˙˙˙‰4$čü˙˙˙Y^jWčü˙˙˙ļEԃčeô[^_]ÃÆEÔļEԍeô[^_]̓ƒėP‹EäƒĀPčü˙˙˙éŌü˙˙t&ƒƒėP‹EäƒĀPčü˙˙˙éRũ˙˙t&ƒƒėP‹EäƒĀPčü˙˙˙éãü˙˙t&ƒƒėP‹EäƒĀPčü˙˙˙é¯ū˙˙t&ƒƒėP‹EäƒĀPčü˙˙˙éū˙˙t&ƒƒėP‹EäƒĀPčü˙˙˙é9ū˙˙ƒė ‰EÔVčü˙˙˙‹uԃÄPPjWčü˙˙˙‰4$čü˙˙˙‰ÆRRjWčü˙˙˙‰4$čü˙˙˙ƒė ‰EÔVčü˙˙˙‹uԃÄëډÆët&U‰åWVSčü˙˙˙ÃƒėH‹} Wčü˙˙˙‹M‰‰<$čü˙˙˙P ‰$‰UÄčü˙˙˙‹UĉƍƒWPRVčü˙˙˙‹EƒÄjVƒĀPčü˙˙˙ƒÄ‹M…Ā”Ā„ĀˆAtP€?ƒEĮƒėjP‰ČƒĀ(Pčü˙˙˙ƒÄ‹M…Ā”ĀĮEä„ĀˆEāˆAt"ƒė Včü˙˙˙ƒÄeô[^_]ÍvÆEāĮEäE܃ė P‰EÄčü˙˙˙‹M܍ƒƒÄ jPAPčü˙˙˙‰<$čü˙˙˙‹MÜƒÄ PWAPčü˙˙˙‹M܍ƒƒÄ j3PAPčü˙˙˙“Eԉ$“R“RUāRPčü˙˙˙ƒ}؃Ä˙uÔhĀPjWčü˙˙˙ƒÄ˙uÄWčü˙˙˙‰<$čü˙˙˙‹Eԃăč ;ƒ…cƒėj˙uÄčü˙˙˙‹MäƒÄ…É„˙˙˙ƒė jčü˙˙˙ƒÄ„Ā„ėū˙˙‹}ä…˙„áū˙˙‹ƒč ;ƒu+ƒė Wčü˙˙˙ƒÄéÃū˙˙vŧ'‰úč Hū˙딍´&‹UÄčøGū˙ëËƒė ‰ÆWčü˙˙˙ƒÄ‹Eԃč ;ƒtUĶčŌGū˙RRj˙uÄčü˙˙˙ƒÄPPEäjPčü˙˙˙‰4$čü˙˙˙‰Æë‰ÆëԉÆëßfU‰åVSEōuôčü˙˙˙ÃƒėPƒPVčü˙˙˙ƒÄčü˙˙˙ƒėV˙u j˙j˙uPčü˙˙˙‹EôƒÄ ƒč ;ƒu eø[^]Ѝt&Uķč8Gū˙eø[^]ÉƋEôƒč ;ƒtUķčGū˙ƒė Včü˙˙˙WVSčü˙˙˙Ãčü˙˙˙„Āu [^_Ѝt&čü˙˙˙‹x$ƒė ŗđWčü˙˙˙‹ƒÄ‹R 9ō…‰ƒPjj ˙t$čü˙˙˙ƒÄčü˙˙˙„Āt9ƒė Wčü˙˙˙‹ƒÄ‹R 9ōudƒPjj ˙t$čü˙˙˙ƒÄ[^_Éöŧ'ƒė Wčü˙˙˙‹ƒÄ‹R 9ōu;ƒPjj˙t$čü˙˙˙ƒÄë™fƒė P˙ԃÄéi˙˙˙fƒė P˙ԃÄ두t&ƒė P˙ԃÄëēt&UWVSčü˙˙˙Ãƒė‹t$0€~u ƒÄ[^_]Ít&čü˙˙˙‹h$‰ĩ„čü˙˙˙ƒė Pčü˙˙˙‰$čü˙˙˙‰ĮXZ‹VW˙PƒÄčü˙˙˙‰T$‰$ƒė Učü˙˙˙‹‹đƒÄ‰L$ ‹R 9Ę…§ƒPjj ˙včü˙˙˙‰D$ƒÄ…Āt čü˙˙˙„Āthƒė Učü˙˙˙‹ƒÄ‹R ;T$ uy‹ƒ‹1ŌQRP˙t$čü˙˙˙ƒÄčü˙˙˙+$T$ƒė‰FX‹‰V\VW˙P$ƒÄĮ…„ƒÄ[^_]Ívƒė ˙t$čü˙˙˙ƒÄ뇍´&ƒė P˙ԃÄéK˙˙˙fƒė P˙ԃÄéy˙˙˙fUWVSčü˙˙˙Ãƒė‹t$0€~,u ƒÄ[^_]Ít&čü˙˙˙‹@$‰°€‰D$‰Åčü˙˙˙ƒė Pčü˙˙˙‰$čü˙˙˙Y‰ĮX‹VW˙P‰,$čü˙˙˙‹‹đƒÄ‰L$ ‹R 9Ę…Á‹ƒ‹1Ō1íQRPVčü˙˙˙ƒÄčü˙˙˙‰$‰T$덴&ƒėUVƒÅčü˙˙˙‰$čü˙˙˙ƒÄƒė Včü˙˙˙ƒÄ9Å|Øčü˙˙˙+$T$ƒė ‰F0‰V4˙t$čü˙˙˙‹ƒÄ‹R ;T$ uL‹ƒ‹1ŌQRPVčü˙˙˙X‹ZVW˙P(‹D$ƒÄĮ€€ƒÄ[^_]Ívƒė P˙ԃÄé1˙˙˙fƒė P˙ԃÄ느t&U‰åWVSčü˙˙˙Ãƒė\‹u‹ƒ‹8…˙„­‹ƒļ„Āt eô[^_]Ít&ƒė Včü˙˙˙ƒÄčü˙˙˙‹žø…˙•Āƒė‰ĮļĀPƒÔ PƒÁ Pčü˙˙˙ZƒđYļĀPVčü˙˙˙‰Eŧ‹ƒƒÄļ„Ā…‹“1Ā€:t*‹ƒ‹…Ā„ H˙ē;Ƨ‰Č÷âÁęiŸ†)ÁA‰†ā†Ėƒė Pčü˙˙˙ƒÄ‰EĖčü˙˙˙‰–ė‹U˃뉆č‹˙vR˙P‰øƒÄ„Ā…Ķ‹ƒ‹‰Â‰E´Áę…‰U˜„™ÆEģĮEАt&‹~X‹FT9Įt!‰Eԍv‹Eԃė ˙0čü˙˙˙ƒEԃċEÔ9Įuåčü˙˙˙‹Mŧ‰E‰UąÉŽw‹ƒ€8…x‹}˃ė‹˙uĐ˙vW˙P X‹Z˙vW˙P‹FL‹~HƒÄ9øt>‰EÔë‰öŧ'ƒĮ9}Ôt(‹‹‹@;ƒtéƒė ƒĮR˙ЃÄ9}Ôuā´&‹M˃ė‹˙vQ˙PƒÄčü˙˙˙„ĀuF1˙ë21Ō…˙x‹N`‹Fd)ČÁø9Į} ‹ š…Éx‹FT‹ˆƒė ƒĮRčü˙˙˙ƒÄƒė Včü˙˙˙ƒÄ9Į|ŋ‹U˃ė‹˙vR˙P,‹FH‹~LƒÄ‹‹9øt=‰EÔ됍´&ƒī9}Ôt(‹Wü‹‹@ 9Čtėƒė ‰MȃīR˙ЃÄ9}ԋMČuŨt&‹M˃ė‹˙vQ˙P0ƒÄëAƒƒė Pčü˙˙˙ƒÄeô1Ā[^_]ÃÆE˜ĮE´é8ū˙˙‹M˃ė‹˙uĐ˙vQ˙P ƒÄčü˙˙˙+EĀ‹MĖUăė‰†đ‹‰–ô˙uĐ˙vQ˙P4‰4$čü˙˙˙ƒÄ…ĀŽŸÆEģƒė Včü˙˙˙‹ƒƒÄ€8uDƒEĐ‹EĐ9E´…Ėũ˙˙€}˜…Âũ˙˙ļEģƒđˆEԋE˃ė‹˙vP˙R8ļEԃčeô[^_]Ãf‹žāƒė G˙=ž†–ĀļĀPčü˙˙˙ƒÄ„ĀtYƒĮ¸˙Ÿ†Oø‰žāé|˙˙˙†ˆƒė Pčü˙˙˙ƒÄ„Ā…G˙˙˙éF˙˙˙‹†āƒė ‰†äVčü˙˙˙ƒÄékũ˙˙ƒh˜PEäjP‰EÔčü˙˙˙XƒZP˙ŗčü˙˙˙Z“YRPčü˙˙˙ZYWPčü˙˙˙Z“YRPčü˙˙˙ZYhŸ†Pčü˙˙˙Z“YRPčü˙˙˙Y˙uÔčü˙˙˙ƒÄé%˙˙˙ƒė ˆEÔVčü˙˙˙ƒÄļEÔémû˙˙čü˙˙˙éęû˙˙¸é˛ū˙˙ƒė ˙uԉÆčü˙˙˙‰4$čü˙˙˙U‰åWVSčü˙˙˙Ãƒė ‹ƒ‹‹@ô…Āt]1˙‹Eŗ1Ō‹H$‹ƒ‹ƒVRPQčü˙˙˙ƒđƒÄ…˙ļđt€?t ƒė Wčü˙˙˙ƒÄeô‰đ[^_]Í´&ƒƒė Pčü˙˙˙ƒÄ…‰Įt‹€8tˆƒƒėPWčü˙˙˙ƒÄ‰ÆPƒjjPčü˙˙˙‰4$čü˙˙˙ƒÄéR˙˙˙…˙‰Æt€?t ƒė Wčü˙˙˙ƒÄƒė Včü˙˙˙ļŋU‰åWVSčü˙˙˙ÃƒėH‹EƒĀP‰EĖčü˙˙˙ƒÄ…‰EÔ…¯čü˙˙˙‹Uƒė ‰B ‹B$ÆB˙°‰EČčü˙˙˙ƒÄ…Ā„Aƒė Pčü˙˙˙ƒĀƒÄ‰EЋMЋA;A„€…Āt'‹M ƒėƒĀ‹‰Pø‹Q‰PüQRPčü˙˙˙‹EЃÄ‹@‹MĐƒĀ ‰A‹Eƒė Æ@˙uĖčü˙˙˙ƒÄ…‰EÔupeô[^_]Ѝ´&ƒ}äh<PjWčü˙˙˙‹ŗƒƒÄ jPVčü˙˙˙ƒƒÄ jPVčü˙˙˙XZ˙uÔVčü˙˙˙‰<$čü˙˙˙ƒÄéõū˙˙t&ƒ}ähHPjWčü˙˙˙‹ŗƒƒÄ jPVčü˙˙˙ƒƒÄ jPVčü˙˙˙XZ˙uÔVčü˙˙˙‰<$čü˙˙˙ƒÄeô[^_]Ѓė jčü˙˙˙‰Â‰EċƒƒÄƒĀ‰B‰EЋEȋ°+°ĮBĮBĮB ‰đÁøiĀĢĒĒĒ…Ā…ŪĮEĀ‹EĀ‹MċUČƉA‰A‰q ‹Š‹˛‰MÔ9ņ„ë‰Įf…˙t‹ƒė‰‹F‰GFPGPčü˙˙˙ƒÄƒĮ ƒÆ 9uÔuԋEăė‰xP‹EČ˙°čü˙˙˙ƒÄ…‰Æ„đũ˙˙ƒ}ähõPjWčü˙˙˙YXƒP˙ŗčü˙˙˙YZ“RPčü˙˙˙YZVPčü˙˙˙‰<$čü˙˙˙ƒÄéũ˙˙t&=UUU‡‰ƒė Včü˙˙˙‰EƒÄé ˙˙˙‰öŧ'ƒė˙u P˙uĐčü˙˙˙ƒÄéũ˙˙‹}Āé=˙˙˙ƒė ‰ÆWčü˙˙˙‰4$čü˙˙˙ƒė ‰ÆWčü˙˙˙‰4$čü˙˙˙‰Æƒė ˙uĖčü˙˙˙‰4$čü˙˙˙‰Æƒė ˙uÄčü˙˙˙ƒÄëÛčü˙˙˙ƒė ‰ÆWčü˙˙˙ƒÄëÆƒė Pčü˙˙˙XYW˙uĀčü˙˙˙ƒÄčü˙˙˙‰Æčü˙˙˙‹Eċ@…Ātރė Pčü˙˙˙ƒÄ렍t&U‰åWVS}Øčü˙˙˙Ãƒė4˙u‹ŗWF ‰Eä‹E ‰E܋E‰Eāčü˙˙˙Eä‰<$Pčü˙˙˙‹E؃ăč 9đu/čü˙˙˙U܃ėRPčü˙˙˙‹EäƒÄƒč 9đu eô[^_]Ѝ´&U×č(9ū˙ëĮļ‰úč9ū˙eô[^_]ÉĮ‹Eäƒč 9đtU×čũ8ū˙ƒė Wčü˙˙˙‰Į‹E؃č 9đtŲU×čā8ū˙ëĪ´&ŧ'U‰åWVSčü˙˙˙Ãƒė,‹E‹} ‹p;pt^…ötA‹ƒė‰GPFPčü˙˙˙‹G‰FYXG PF Pčü˙˙˙XFƒĮZWPčü˙˙˙‹EƒÄ‹p‹EƒÆ‰peô[^_]Ѝ´&ƒėWV˙učü˙˙˙ƒÄëŪ‰Į‹ƒ‰EԋFƒč ;EÔtUįč 8ū˙ƒė Wčü˙˙˙‰Į‹F ‹‹ƒč ‰MÔ9ČtĪUįčú7ū˙ëՍ´&Sčü˙˙˙Ãƒė˙t$‹D$˙p čü˙˙˙ƒÄ[ÍļŋU‰åWVSčü˙˙˙Ãƒė,‹E‹} ‹p$;p(t^…ötA‹ƒė‰GPFPčü˙˙˙‹G‰FYXG PF Pčü˙˙˙XFƒĮZWPčü˙˙˙‹EƒÄ‹p$‹EƒÆ‰p$eô[^_]Ѝ´&‹EƒėWVƒĀ Pčü˙˙˙ƒÄëډĮ‹ƒ‰EԋFƒč ;EÔtUįč 7ū˙ƒė Wčü˙˙˙‰Į‹F ‹‹ƒč ‰MÔ9ČtĪUįčæ6ū˙ëōt&WVS‹|$‹t$čü˙˙˙Ãƒė ˙wčü˙˙˙ZYVPčü˙˙˙‹Gˉ$čü˙˙˙_Z‹VP˙R ƒÄ[^_ÃļD$ÃķÃƒė ‹D$…Āt ƒė ‹P˙RƒÄƒÄ Ãƒė ‹D$…Āt ƒė ‹P˙RƒÄƒÄ Ã1ĀÃƒė ‹D$˙P$ƒÄ Ãƒė ‹D$˙P(ƒÄ ÃķÃķÃķÃ1ĀÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃU‰åWVSuä‰Įčü˙˙˙Ãƒė8‰UÔVčü˙˙˙ƒÄƒ}ԋEätZ“ƒĀQQRPčü˙˙˙‹Uԃĉđč< RR“R‹ƒĀPčü˙˙˙ƒÄPPƒP‹EäƒĀPčü˙˙˙‹UƒÄ‰đč< 덓ƒĀQQRPčü˙˙˙ëÅRR“R‹ƒÂRčü˙˙˙ZYVWčü˙˙˙Į$Včü˙˙˙ƒÄeô‰ø[^_]ÉĮPPjVčü˙˙˙‰<$čü˙˙˙ķÃķÃķÃķÃķÃķÃķÃķÃķÃSčü˙˙˙Ãƒė˙t$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė˙t$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė˙t$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė˙t$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė˙t$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė˙t$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė˙t$čü˙˙˙ƒÄ[ÃSčü˙˙˙Ãƒė˙t$čü˙˙˙ƒÄ[Ã˙˙ <gƒ˙˙(ADĻ‹øŌĻŨŪĄĻÄŲĻ˙˙,Tl˙˙ <Q_˙˙>’a‰˙˙ +7M]˙˙FbÄ˙˙$uĢēĖ˙˙ ]ĢŌÍ˙˙BLāƒ“˙˙-V€ž˙˙ +xû™˙˙BNŋ`“o˛„ĮŽ˙˙ep¸yáÜ˙˙6Å?ĨGĮuš ˙˙&:´BíMŅn´Ė˙˙#IâZ˜sâ{˙ŗâú˙˙!@šHÁuL˙˙Roû‰@Úö˙˙*&/ÎEk&Û—ō ‰ŲÛÉ˙˙$ChÂā˙˙§ÅÎÛĒĨ˙˙'ąđäׯė—Ä’Ē˙˙'ģđđ×ίé—Á’Ē˙˙-ŠôŪÚŧû÷ߤS÷ŠÕ˙˙-˛¤įŠÅŋ¨§ŒÔS§ē…˙˙ (>–uB˙˙#CЍ˙˙ 1E`˙˙ ;g‚˙˙:i°ÂšĪËõŊ˙˙6yÔ‘ėĖÔ‘į˙˙?Yâ´O˙˙ 1a}˙˙ 1a}˙˙BɘÁ§ŒũD˙˙9ŠŧŌĀĒ´×°ęÂŽ°Ö‚°ņš˙˙9ŠãŌŨ¤ŲŅįäߍįÃōį¯đ˙˙4§æįšō‰„˙˙ &:U˙˙"/;ōHė[âeØm•¯f˙˙7;āƒŽįâ˙˙!,ØšģŠˇÜAŠö‘e˙˙!'åĸŅąÍäNžŒ§e˙˙$™Éų•˙˙!L"­ŠĄá@­Ö˙˙3éeí‡Åé’˙˙!L"­ŠĄá@­Ö˙˙, ébí„Åé’˙˙¤6Mˆ^æę×›ôæƒ˛ēæĐņķ›’ęĸˆĶ›ę-ęŖ@ú ôAęũæĒęÄ0ķ  +ī Ō “ õ ;ķ à "­ ü ü › Cķ æ ęŒ ­ ÷ Č ī ˙˙H"­{Šã>­Ö˙˙.vK…˙˙,8“JĘU÷jō˙˙ BˆĖč˙˙aM]¸ mĢ }ž ”‘ ´„ Ę÷ Ûę ęŨ ųĐ Œà ›ļ ąŠ Âœ ԏ âíáŽ˙˙JBúSŅbŧú˜ä§äđú†•—ā¯ÜĀØĪūˇ˙˙#<(œiŧˇ˙˙/+NĖZØoš|¯‡ī—âîĖę˙˙TŒ‰•ą˙˙#4&múˆRígåØõŠ˙˙"!#Zšv;Į@žŠŽŋ˙˙Ul*¤š´˙˙Me ™‰Š˙˙E] ‘Ą˙˙$3*pSĮŖũoũđ“Ļ˙˙!#Všu¨˙˙5!ĄÕįđ6šŌÍ/‹4üÂâ÷Œ˙˙+3Žp*“Žø˙˙+?} ąĄÁ˙˙imč…ņ•˙˙9Q9¤Žķnšš¤´.˙˙-#ßbځߠ˙˙-#ībęī°˙˙¤*ßŌī˙˙Um Ą‘ą˙˙e|*´ĒÄ˙˙2t#ĮŠÂČĮœˆ˙˙5•įŦ*úÚįõ˙˙+&8ĩ\&„•€°<„˙9šŧ.„°˙˙)5§HĩVąå˙˙'RÁ]ÎŒ{˙˙A2JĄY—nÉz›Œ—œŠ¨ũēÚĘÍØÖČ˙˙2t&ŪŦÚĖŪ´ĸ˙˙$u"Ąŗ'í ļ‘ąÆ˙˙$u"¤ŗ'í š‘´É˙˙$}•"´ģ/ũ ÉĄÄŲ˙˙$}•"´ģ/ũ ÉĄÄŲ˙˙ũ• ÉšŲ˙˙0#=ļOŽs&ĒŦĀĮ<Ē–9˛Ķ7Ēū˙˙5/ŨIâ[ī&ė¸ëĶ<ėĸ9įßCė°˙˙;)5ĻHņbútö˜&°Ņōė<°ģ9õøB°Ō˙˙#1HXīlíyŗŋŽ˙˙1Iž›öŅE›Ē˙˙\b‚xwŖū‚ãŖž˙˙ 0™9Āģ˙˙ +6z_<˙˙;~ĶÁâ˙˙&3šŒū˙›ŊĮņ%Œú˙˙2zO‰˙˙6.4*ĶoĮ{§ŨļŠąģĀÉŅą˙˙6+1*ĶlĮx§ŠŨšļĻą¸ĀÆŅą˙˙r˜ĸšŠ˙˙4d)ú —Ãú’˙˙6 ,R*ÍŠ–Ãæū/ŧčÖLޔȠ˙˙63*ĶnĮz§ŒŨœļ¨ąēĀČŅą˙˙%{!ā¤ŪiāŲ3ŗÛ˙˙+E`ÃÕ4Ŧ˜ņą&ÊŦ—ž˙˙,ŠĀÅÎÛČîĘˆÄū¨˙˙†:Lš pŒ– 0Ä ã– ë€ š į– ü— ŽJž €— •jĄ Ä– Ú0ü Č– Üá ę'– ĸ0É ’ :–  ž œ – ē aĀ û ˙˙N_w­ëĖ]­´…Õ­ß%—ŸŊŖėRŸÉÁæŸŧæ˙˙4L.Ũ‹5î˙˙˜0t´‹û Äį Íã Øš ũ㠙ށŖ ´ Ŋ‹ Čáí‹ ƒ˜‰Ëώ¯ŗē‰ÛŗŽÆÜ† ž ´ Ū ö Œ ˙˙3“Ė!åûˆ°Ø˙˙!Q8đšéđ˙˙/ 83åsŽ|ãĩ"Īßã‘åĘ÷˙˙+Me+…§c–ǞŪЁŲ˙˙(nE}˙˙5$AũP¤ƒũžãÄ-€ëũŪ˙˙D'?ĻÜėōƒ¯”†ĩ¯Éōôܰņō‘%Üí˙˙$HĘ_ņœU˙˙$HĘ_ņœU˙˙$HĘ_ņœU˙˙!>÷\&õ˜Ēē÷ƒõđ˙˙šEK— cƒ v!— Ēí Á$— ø× — ˛Á É— īĢ †"— ģ• Đ— ƒ –— ļđÉ— ėß˙— ĢΞ— ŪŊņ— ”Ŧ§— Ķ™æ— †ķ™— Ā#”˙˙ž”Í›ĢŗÔˇåįŽë掏 ˛ ßÔ æā äû ëŽ !äÅ īØ !ä ķĸ 2äę ũ äĻ æĒˇ„'œß˙˙M%NŌWč`ėxÆ‹ėŊĩŌ!ė†ų› ėÎ×ãė“č†s˙˙M"@ßXôm!ߥãļ!ßęŊ˙!ßŗ™Č!ßüΑ߰I¸˙˙M"@ßXôm!ߥãļ!ßęŊ˙!ßŗ™Č!ßüΑ߰I¸˙˙Px‡ĪģŠÎ9ĪšŒ¯0Īōų‡!ΎæĖ7Ī’ĶĨĪÄWĘ˙˙O'DuÕŠėŧ9ÕˆŲ0Õā¯õ!ÕĨ‰ē7Õ€Â“Õ˛IĒ˙˙ĀÔņÛĪķō÷ƒ§ŽĢ†îŠōÜŸđĻü¤— ĢĒ !¤á ¯ô !¤Ģ ŗž 2¤† Đ™ ¤ ĻÆ ÷ #ÜŸ˙˙g'ArßĻöš0ßīã‚ßĨ¸-ßø¯‹ß¸œË,ßũ‰ßŗšÆßåFÚ˙˙hu„ŗšĸÎ7ŗ‹đžŗÁŨÔ-ŗ”ʧŗÔˇį4ŗĄ´ŗ×éęŗ‰RŠ˙˙'h&Ä ĀĀÄ”Š˙›eX2AėfuļĒ;˛Čā…īũ‘Š ŲˇčŗČ$øŧŸ‰‚ }˙˙(,ÃAæVÔmĐ¯Š×Ē˙˙-EÃUǞŅĨ˙˙$ķ1–EĒcšî˙˙:•\Ÿ‹†˙˙I8&yž‹‹§áɏ×ĢßĪųĄ‡ī˛‹ėšžÜ˙˙SDĸē õď"ŸÆŪčž ø— œö īËëŒÄÕīė*Ĩ šīš˙˙%@û… æÁÜûöŒ˙˙\=FÚĢĶŧ Ÿú‡áÅÚŨ"ĐƒÚĄ˙š"¨ß˙…Ŋ"ÁÃŊú˙˙#E…Pä}”*ĪÂ߀˙˙ P€Ž˙˙‘Q]Ę e‘ ˆ!† ĩ Ŋ€ Å„ ęŒ ōĐ …į é æ† ‹× ›õ ĘŦ ‡† ĒļæžĮÆ!ēđíøæ ‰Ų •ķą‰˙˙#'DØO°`Ø›UĢ˙˙Ģ?~Úũ ü¤ ŸŠēš ÕÛ ķķŽé””Ÿ¨įå û… –å Ļŋ4ũ‹ÖŸ?ĒáÖ‰ ÷ ũĢ ŋ ,—î ž ũģ ‰Ķ ÚÛ ‰ā ’Ĩ˙˙:@NŸĨļ‰Ë˙ŨõōëŠáŸ×ĨČ˜°˙˙:4j¯ŊÆāÛü혂´šĐ¯ėĩˆ¨¸˙˙G„AŲĐōË‚ž–ēĢ­ˇ˙ÉûØîėéõÚ¸ą˙˙ !6Zz–˙˙FŠÃūŽåÆĖåĖGŖ˜ŧÚÖÜčŪũā—ŦČø/ĒšĀÂ’ ĄĢ ¨Å ¯Ķ ļč Ņû Ձ ŲØ vÛ Žņ “‡ ˜˜ Ē Ÿŋ ŊŌ ŋØ ÁØ‚įŪũô“Ф ļļËĖŪâäøāņÕ˙˙_Nié|öˆƒšĒ‰ļâČūĐšĮ{Îį†–ĘœœåöÔŨŠ˙˙Š Gq… ‰ū Ąˇ °Ø ÃûÚ° íŦ ķß ’Däú ôö ‡Š –š œž žžŒ Îô á“ đĨ ƒĄ ’ ˜¤ ī ˙˙>ĒaŖĒš˙›%äø×㉎™˙˙PGŠĖąÚ˙˙'ąāæÅÄÁÚä˛Ļŧ˙˙JVŲm€¤\˙˙O:+t•}ĸ†ĻžĒąĻãģø!ĻŦĖÁ Ļôŋ‰Ļšĸ˙˙P82yĮ‚á‹ŨŖĖļŨčģũ!ŨąĒÆ ŨųîŽŨžáé˙˙P82yĮ‚á‹ŨŖĖļŨčģũ!ŨąĒÆ ŨųîŽŨžáé˙˙P82yĮ‚á‹ŨŖĖļŨčģũ!ŨąĒÆ ŨųîŽŨžáé˙˙P82yĮ‚á‹ŨŖĖļŨčģũ!ŨąĒÆ ŨųîŽŨžáé˙˙:+ņKÂ\”k‹–õ•ĒâŋÎ˧Î˙˙3%5ĸA‡\ĀŠ_ķ‹ž$Ņ­čģL˙˙7 2đAÕVãąßÃŨįßķ‘ž„ßë&˙˙‡ÖŌÁ‰Õ8Ō¯Z˙˙ 5vYmq˙˙FF–ŸŪ3Ã÷Ũŧ’ÃĄ¤ßĪá˙ž‡áĸĪÂá˙˙PaĸÅ{˙˙PhŧÕû¸ŧØ˙˙Kb´Ę폴Đ˙˙PGŠĖąÚ˙˙*pŦ*äÚô˙˙*€ŧ*ôę„˙›ŒĘö‚B’ŠBĒÉBÁéBßĘJ‚ņJˆ‘KÃ÷ĘąKæļKūģK•ĀKŗÅKÖĮKÜÉKëHĪ ËKō ōK™ ōOš ™PÚ šPī ŲPŽ ČOŠ ĪOÄ ŦOå ŗOû ēO‘ ÁOĻ ’Lģ ÅM× ėMė ŒNŦN–ĖNĢėNĀŒO’ÖOšëO™č9ęAäLëOŗÃAĐŊëOĸœCšĒCĪŖCäÆCúŋC¸CĻąCŦí<ĪŲëOŊŋAÔģAęˇA˙ŗA•ŦAĢĨAąá?ö \ëOį!Ũ?ū!Ų?”"…?Š"ÆJŋ"ÂJÕ"žJÛ"ÃIĻ%aëOœ&ŋIŗ&ģIÉ&ˇIŪ&ŗIô&ŦIŠ'ĨI'áG°(YëOž)ŨGĩ)ŲGË)ÕGā)ÎGö)ĮGŒ*ĀGĸ*šG¨*ŲEö-JëOÕ.ÕEė.ŅE‚/ÍE—/ÉE­/ÂEÃ/ģEÉ/÷Cđ0RëO×1đCî1éC„2âC™2ÛC¯2ÔCÅ2ÍCÛ2Ø>á2‡:ē6ëO9‰C‚:ß>ã<č<ëO˙›YO!LŧŲîų´•Ŧ#ÆŌüŗŽ—Ô%ÚŽĩÕæ˙˙ O*ķ‹m üķĻL†˙˙É8O'ĸŽ• •čĸ‘“ĀÕĸîĶ€īČĸáčķî§ĸ׊ĸŦˆž„îĸ˙€Ōĸųųā¸ÜĖØß)ĩšÜĘœī˜û  ˜Ø ˜ĸģ˙˙†,F@ö ›¤ ­ú ßö ˆ šļ Äö íŒ ˙æ Šö Ōâ äą ›ö ´Í Ɛ øö ‹Ô Ė Íö ŪŖ —nö Į ˙˙Ģ.HdΝŌՄέā ŋž éÎ’§ ¤‘äÎúôŒÁ ļÎÜûîũ ˜Îž Đ™ …ÎŽ• Āä ę렮 ŽÎō×Ü „Îø ˙˙B%-ęBāSeä â‘ —ž õŽ …”Ģë Í”Ŗä Û6˙›E82)‹˜ōŽ–ąœé”ā„˙Čø“Ž}˙˙V!mÆ›IÕûE’āÕ€ĘäÆęŦÆŠüŊ@ÆŗĘĐՍ÷Õ˙˙7oÚĸ[˙˙$HVŖ÷’ŸŲˆŸŋ˙˙$FU‹ëƒ‡Áđ‡§˙›90))éίÃĘãû!“ÅÜøũ˙›E8C6´-ŠŗŪˆ‘ŽŲ†Ōöņē놥}˙›i_c“Ęâ"í‡(Â"€į…“ŠĪ퓇ŋ§“èûު獿ë˙›ˆ3Ú ZCÖ Ā× ŌĘ â˙ ˆŌ ĶÚ ß˙ÜÖ éIŪ ūÖ Š­ ķÖ ‡š §Ö ßÎ “ É ¨ Ō Ä Œ ‡ É Î ˙˙?Į]ęå˙˙-9đUĐƒ“‘ˇš“ŽĐÜđŽ˙˙9D™ˇ°Øāíõ§Į¤ŽŦĮļí‰Â˙˙6Į?ÚÕ˙˙ygčsė‘öĸƒŽÂؐė­ßčîÃ˛Ę Ĩî,­ ĶŅųč‹ē¨ĩč ĩã˙˙ @–äü˙˙)7ąŦ˙˙.”LŠWĘ……˙˙K¨āī ƒ •ī ŸBôá— ÚË â— ėĄEī  E— ę ū ˙˙23ZÕÚíZÖßŌëŠķŌ•Ú­Í˙˙ "*o‹˙›U>:x\ĸØŦÔû”ĘžÆŧÚƒūŽ}}˙›U>:x\ĸÚŦÖũ–Î ĘžŪ‡‚’}}˙›U>:x\ĸØŦÔû”ĘžÆŧÚƒūŽ}}˙˙DƒÖHÛ ĸ *ë ˙›U>:x\ĸÚŦÖũ–Î ĘžŪ‡‚’}}˙˙ L͍K˙›mec?ÅōŠ"Ÿ¯(ę"˛ĨÅɁ“ŧņĮÅįÚŠÅ­ĀÕėÚ˜˙˙3Ÿ?ŧQŸˇ˙›!3tHzWvÖæņ}˙›eX:Oį^Ž ˆ Ũ˛‚îvūā˙Û”ÍŖžšĨÎŖ÷Ë•8Š }˙˙5J’Yšˆ1˙˙5J–YŊŒ1...\n[ DEATH ] basic_string::substr%02X(null)\0123autoTERMxtermxterm-colorxterm-256colorscreenscreen-256colorlinuxcygwinyestruet[0;3%sm[----------] [ RUN ] %s.%s, where %s = %s and ]]>]]>Non-fatal failureSuccessFatal failure:: : (Invalid Unicode 0x)\'\\\a\b\f\r\t\v\x'\""" (no terminating NUL)NULL pointing to L"% , 0x (L'1 fatal failure1 non-fatal failureExpected: Actual: failures Actual: containing "" teststest%s from %s, where %s = %s T_[WARNING][ INFO ][ FATAL ][ ERROR ]./src/gtest.ccCondition range > 0 failed. ) was requested, )../src/gtest-internal-inl.hpthread_mutex_lock(&mutex_)failed with error pthread_mutex_unlock(&mutex_)Invalid shuffle range start : must be in range [0, ].Invalid shuffle range finish : must be in range [, pthread_key_delete(key_)./src/gtest-port.ccOnly one stdoutstderrevent=TestCaseStart&name=0event=TestProgramEnd&passed=event=TestPartResult&file=&line=&message=event=TestProgramStartevent=TestStart&name=Value of: Actual: Expected: Failure Unknown result type thrown in Unknown C++ exception. , you tried test cases.%s %sevent=TestEnd&passed=&elapsed_time=msevent=TestCaseEnd&passed=[ OK ] (%s ms) %s from %s (%s ms total) TESTTESTS[==========] test casestest case%s from %s ran. (%s ms total)[ PASSED ] %s. %s, listed below: %2d FAILED %s YOU HAVE %d DISABLED %s <>&'"&#x;=Death test: Result: failed to die. Error msg: Expected: Actual msg: Exited with exit status Terminated by signal (core dumped) ./src/gtest-death-test.ccWARNING: has value "". %s has value , which overflows. = , but have left unset. < , but you have Google TestNote: %s filter = %s Running %s from %s. The value of flag --Environment variable (ignoring case) Which is: The difference between is , which exceeds , where evaluates to , , and Expected: () <= () vs ) != (), actual: ), actual: "" vs ") (ignoring case), actual: "not a substring of Which is: xml []unexpected status byte (CHECK failed: File , line posix::Close(read_fd()) != -1read_fd_ == -1detected threads.pipe(pipe_fd) != -1child_pid != -1close(pipe_fd[0])close(pipe_fd[1])Death test count (fastUnknown death test style "" encounteredclose(args->close_fd)chdir("") failed: execve(, ...) in failed: ) < () >= () > ( is listed more than once. No test named You forgot to list test Test @-h-?/?--help|stack != MAP_FAILEDtestsuitestestsuitetestcaseCondition false failed. Attribute is not allowed for element <>.="runnotrun /> <failuresdisablederrors this->size() (which is %zu)vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)Global test environment set-up.Global test environment tear-downXML output file may not be null Could not write to the test shard status file "%s" specified by the %s environment variable. Invalid index (%d) into TestPartResultArray. Cannot generate a number in the range [0, 0).Condition range <= kMaxRange failed. Generation of a number in [0, but this can only generate numbers in [0, Condition sockfd_ != -1 failed. Send() can be called only when there is a connection.stream_result_to: failed to stream to ./include/gtest/internal/gtest-port.hpthread_mutex_destroy(&mutex_)Condition 0 <= begin && begin <= size failed. Condition begin <= end && end <= size failed. CloseConnection() can be called only when there is a connection.Condition sockfd_ == -1 failed. MakeConnection() can't be called when there is already a connection.stream_result_to: getaddrinfo() failed: stream_result_to: failed to connect to Condition sizeof(Integer) <= sizeof(parsed) failed. capturer can exist at a time.pthread_mutex_init(&mutex_, NULL)event=TestIterationStart&iteration=C++ exception with description "Attempted redefinition of test case All tests in the same test case must use the same test fixture class. However, in test case to define a test using a fixture class different from the one used earlier. This can happen if the two fixture classes are from different namespaces and have the same name. You should probably rename one of the classes to put the tests into different event=TestIterationEnd&passed= Result: threw an exception. Result: illegal return in test statement. Result: died but not with expected error. Result: died but not with expected exit code: DeathTest::Passed somehow called before conclusion of test is expected to be a 32-bit integer, but actuallyThe value of environment variable Invalid environment variables: you have Invalid environment variables: we require 0 <= Repeating all tests (iteration %d) . . . Note: This is test shard %d of %s. Note: Randomizing tests' orders with a seed of %d . The default value %s is used. gtest_streaming_protocol_version=1.0WARNING: unrecognized streaming target "%s" ignored. pthread_key_create(&key, &DeleteThreadLocalValue)WARNING: unrecognized output format "%s" ignored. Error while reading death test internal: Death test child process reported Read from death test child process failed: posix::Write(write_fd(), &status_ch, 1)waitpid(child_pid_, &status_value, 0)Cannot run a death test outside of a TEST or TEST_F constructDeath tests use fork(), which is unsafe particularly in a threaded context. For this test, couldn't detect the number of threads.) somehow exceeded expected maximum (Condition typeid(*base) == typeid(Derived) failed. Condition !original_working_dir_.IsEmpty() failed. Failed to get the current working directory.basic_string::_S_construct null not valid can be found in this test case. pthread_setspecific(key_, holder_base)fcntl(pipe_fd[1], F_SETFD, 0) != -1sigaction( SIGPROF, &ignore_sigprof_action, &saved_sigprof_action)stack_size > kMaxStackAlignment && reinterpret_cast(stack_top) % kMaxStackAlignment == 0munmap(stack, stack_size) != -1sigaction(SIGPROF, &saved_sigprof_action, NULL)Unrecognized xml_element provided: Condition std::find(allowed_names.begin(), allowed_names.end(), name) != allowed_names.end() failed. Bad --gtest_internal_run_death_test flag: Reserved key used in RecordProperty(): class, so mixing TEST_F and TEST in the same test case is is defined using TEST. You probably want to change the TEST to TEST_F or move it to another test using two different test fixture classes. This can happen if the two classes are from different namespaces or translation units and have the same name. You should probably rename one of the classes to put the tests into different test cases." is not a valid POSIX Extended regular expression.the test fixture's constructor This test program did NOT call ::testing::InitGoogleTest before calling RUN_ALL_TESTS(). Please fix it.Condition 1 <= seed && seed <= kMaxRandomSeed failed. auxiliary test code (environments or event listeners)... Google Test internal frames ...VSčü˙˙˙Ãƒė‹“‹D$ ƒÂ‰‹@Pô;“u ƒÄ[^Ѝt&‹‹…Ét&š˙˙˙˙đÁHü‰Č…ĀۃėD$PRčü˙˙˙ƒÄëȍv‹Hüq˙‰pü‰ČëŲU‰åWVSčü˙˙˙Ãƒė ‹}‹7‹G9Æt‹…Āt ‹ƒė P˙RƒÄƒÆ9wuæ‹…Āt ƒė Pčü˙˙˙ƒÄeô[^_]ÉƋ…Ōt ƒė Rčü˙˙˙ƒÄƒė Včü˙˙˙WVSčü˙˙˙Ãƒė‹|$ ‹ŗ‹Gƒč 9đu‹G ƒč 9đu)‹Gƒč 9đu7ƒÄ[^_ÍT$čl‹G ƒč 9đtܐt&T$čl‹Gƒč 9đtΐt&T$člƒÄ[^_ÃWVSčü˙˙˙Ãƒė‹|$ ‹ŗ‹Gƒč 9đu‹ƒč 9đu"ƒÄ[^_ÍvT$čl‹ƒč 9đtäļT$člƒÄ[^_ÃVSčü˙˙˙Ãƒė‹ƒ‹t$ ƒĀ‰‹F$ƒč ;ƒu#‹ƒƒė ƒÆƒĀ‰FäVčü˙˙˙ƒÄ$[^Ѝt&T$člëŌVSčü˙˙˙Ãƒė‹ƒ‹t$ ƒĀ‰‹F$ƒč ;ƒu+‹ƒƒė ƒĀ‰FPčü˙˙˙‰4$čü˙˙˙ƒÄ$[^ÍļT$člëĘUWVSčü˙˙˙Ãƒė‹t$0‹|$49>t3ƒė jčü˙˙˙ƒÄ„Āt ‹.…ít‹Eƒč ;ƒuƒė Učü˙˙˙ƒÄ‰>ƒÄ[^_]Í´&T$člëØU‰åWVSčü˙˙˙Ãƒė‹u‹~…˙tREäƒė˙u Pčü˙˙˙‹}äWčü˙˙˙ƒÄ PW˙včü˙˙˙‹EäƒÄƒč ;ƒu eô[^_]Ít&Uãčleô[^_]Ãė jčü˙˙˙‹‹Q ‰ZYPFPčü˙˙˙ƒÄ눉ƋEäƒč ;ƒtUãčlƒė Včü˙˙˙U‰åWVSčü˙˙˙Ãƒė,‹u‹} 9>tPƒė jčü˙˙˙ƒÄ„Āt=‹…‰EÔt4‹@ …Āx ƒė Pčü˙˙˙ƒÄ‹Eԋ‰EЃč ;ƒu"ƒė ˙uÔčü˙˙˙ƒÄ‰>eô[^_]Ívŧ'UįčlëԉƋEԋAô;ƒtUįčlƒė Včü˙˙˙U‰åWVSčü˙˙˙Ãƒė$‹u‹}˙u Včü˙˙˙‰<$čü˙˙˙ƒÄ PWVčü˙˙˙ƒÄeô‰đ[^_]‰Į‹Aô;ƒtUįčlƒė Wčü˙˙˙U‰åWVSčü˙˙˙Ãƒė8˙u ‹u‹}čü˙˙˙Y‰Á‹ƒZ‰MÔƒĀ ‰‹HôQVčü˙˙˙ƒÄ ˙uÔ˙u Včü˙˙˙XZWVčü˙˙˙ƒÄeô‰đ[^_]‰Į‹Aô;ƒtUįčlƒė Wčü˙˙˙unknown file./This program contains tests written using Google Test. You can use the following command line flags to control its behavior: Test Selection: @G--gtest_list_tests@D List the names of all tests instead of running them. The name of TEST(Foo, Bar) is "Foo.Bar". @G--gtest_filter=@YPOSTIVE_PATTERNS[@G-@YNEGATIVE_PATTERNS]@D Run only the tests whose name matches one of the positive patterns but none of the negative patterns. '?' matches any single character; '*' matches any substring; ':' separates two patterns. @G--gtest_also_run_disabled_tests@D Run all disabled tests too. Test Execution: @G--gtest_repeat=@Y[COUNT]@D Run the tests repeatedly; use a negative count to repeat forever. @G--gtest_shuffle@D Randomize tests' orders on every iteration. @G--gtest_random_seed=@Y[NUMBER]@D Random number seed to use for shuffling test orders (between 1 and 99999, or 0 to use a seed based on the current time). Test Output: @G--gtest_color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D Enable/disable colored output. The default is @Gauto@D. -@G-gtest_print_time=0@D Don't print the elapsed time of each test. @G--gtest_output=xml@Y[@G:@YDIRECTORY_PATH@G/@Y|@G:@YFILE_PATH]@D Generate an XML report in the given directory or with the given file name. @YFILE_PATH@D defaults to @Gtest_details.xml@D. @G--gtest_stream_result_to=@YHOST@G:@YPORT@D Stream test results to the given server. Assertion Behavior: @G--gtest_death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D Set the default death test style. @G--gtest_break_on_failure@D Turn assertion failures into debugger break-points. @G--gtest_throw_on_failure@D Turn assertion failures into C++ exceptions. @G--gtest_catch_exceptions=0@D Do not report exceptions as test failures. Instead, allow them to crash the program or throw a pop-up (on Windows). Except for @G--gtest_list_tests@D, you can alternatively set the corresponding environment variable of a flag (all letters in upper-case). For example, to disable colored text output, you can either specify @G--gtest_color=no@D or set the @GGTEST_COLOR@D environment variable to @Gno@D. For more information, please read the Google Test documentation at @Ghttp://code.google.com/p/googletest/@D. If you find a bug in Google Test (not one in your own code or tests), please report it to @G@D. GetParam()TypeParamthrow_on_failurestream_result_tostack_trace_depthshufflerepeatrandom_seedprint_timeoutputlist_testsfiltercolorcatch_exceptionsbreak_on_failurealso_run_disabled_testsinternal_run_death_testdeath_test_use_forkdeath_test_stylefastGTEST_SHARD_STATUS_FILEGTEST_TOTAL_SHARDSGTEST_SHARD_INDEXtest_detail.xml**DeathTest:*DeathTest/*DISABLED_*:*/DISABLED_**N7testing8internal12_GLOBAL__N_123ClassUniqueToAlwaysTrueE Stack trace: U‰åWVS`˙˙˙…,˙˙˙čü˙˙˙Ãė‰… ˙˙˙‰˙˙˙Qčü˙˙˙‹ģ‹ŗÆEÔĮEĐÆEÕĮE؍G‹~‹V ĮEÜĮE≅`˙˙˙ĮEä‹Gô‰Ŋ,˙˙˙‰•˙˙˙‰”,˙˙˙Į…0˙˙˙X‹… ˙˙˙GôZjPčü˙˙˙YX‹F•4˙˙˙‰•˙˙˙Pô‰…4˙˙˙‰Đ‹V‰jPčü˙˙˙‹F‹VŊ8˙˙˙‹@ô‰”,˙˙˙‹ƒĮ…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙ƒĀ Į…L˙˙˙Į…P˙˙˙‰…,˙˙˙‹ƒƒĀ4‰…`˙˙˙‹ƒƒĀ ‰…4˙˙˙‹ƒƒĀ‰…8˙˙˙…T˙˙˙‰$‰…˙˙˙čü˙˙˙‹ƒĮ…X˙˙˙ƒĀ‰…8˙˙˙‹ƒƒĀ ‰…\˙˙˙XZW˙ĩ˙˙˙čü˙˙˙‹E ƒÄ‹…Ā„1•'˙˙˙ƒėRP…(˙˙˙P‰…˙˙˙čü˙˙˙ZY˙ĩ˙˙˙˙ĩ˙˙˙čü˙˙˙‹…(˙˙˙ƒÄƒč ;ƒ…ƒėW˙učü˙˙˙‹ƒƒÄ ƒĀ ‰…,˙˙˙‹ƒƒĀ4‰…`˙˙˙‹ƒƒĀ ‰…4˙˙˙‹ƒƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ…Š‹ƒƒė ˙ĩ˙˙˙ƒĀ‰…8˙˙˙čü˙˙˙‹F‹V‹@ô‰”,˙˙˙‹F‹V‰…4˙˙˙‹@ô‰”4˙˙˙‹F‹V ‰…,˙˙˙‹@ô‰”,˙˙˙‹ƒƒĀ‰…`˙˙˙X˙ĩ˙˙˙čü˙˙˙‹EƒÄeô[^_]t&ƒƒėjP˙ĩ˙˙˙čü˙˙˙ƒÄéøū˙˙•(˙˙˙čléG˙˙˙•&˙˙˙člé×ū˙˙‰Æë,‰…˙˙˙ë:‰ÆëYë|‰Æ‹…(˙˙˙ƒč ;ƒt •&˙˙˙člƒė ˙ĩ ˙˙˙čü˙˙˙‰4$čü˙˙˙ƒė Wčü˙˙˙_XFP˙ĩ ˙˙˙čü˙˙˙‹ĩ˙˙˙ƒÄ‹ƒƒė ˙ĩ˙˙˙ƒĀ‰…`˙˙˙čü˙˙˙‰4$čü˙˙˙‹Wô‹˙˙˙‰Æ‰Ŋ,˙˙˙‰Œ,˙˙˙ëÁU‰åWVS`˙˙˙…,˙˙˙čü˙˙˙Ãė‰… ˙˙˙‰˙˙˙Qčü˙˙˙‹ģ‹ŗÆEÔĮEĐÆEÕĮE؍G‹~‹V ĮEÜĮE≅`˙˙˙ĮEä‹Gô‰Ŋ,˙˙˙‰•˙˙˙‰”,˙˙˙Į…0˙˙˙X‹… ˙˙˙GôZjPčü˙˙˙YX‹F•4˙˙˙‰•˙˙˙Pô‰…4˙˙˙‰Đ‹V‰jPčü˙˙˙‹F‹ģ‹V‹@ô‰”,˙˙˙G Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙‰…,˙˙˙G4Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙‰…`˙˙˙G ‰…4˙˙˙‹ƒƒĀ‰…8˙˙˙…T˙˙˙‰$‰…˙˙˙čü˙˙˙‹ƒĮ…X˙˙˙ƒĀ‰…8˙˙˙‹ƒƒĀ ‰…\˙˙˙X…8˙˙˙ZP˙ĩ˙˙˙‰…˙˙˙čü˙˙˙‹E ƒÄ‹…Ā„'•'˙˙˙ƒėRP…(˙˙˙P‰…˙˙˙čü˙˙˙XZ˙ĩ˙˙˙˙ĩ˙˙˙čü˙˙˙‹…(˙˙˙ƒÄPô;“…ƒė˙ĩ˙˙˙˙učü˙˙˙G ƒÄ ‰…,˙˙˙G4‰…`˙˙˙G ‰…4˙˙˙‹ƒƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ…Ŧ‹ƒƒė ˙ĩ˙˙˙ƒĀ‰…8˙˙˙čü˙˙˙‹F‹V‹@ô‰”,˙˙˙‹F‹V‰…4˙˙˙‹@ô‰”4˙˙˙‹F‹V ‰…,˙˙˙‹@ô‰”,˙˙˙‹ƒƒĀ‰…`˙˙˙X˙ĩ˙˙˙čü˙˙˙‹EƒÄeô[^_]´&ƒƒėjP˙ĩ˙˙˙čü˙˙˙ƒÄé˙˙˙•(˙˙˙čléD˙˙˙‹‹…Ét&š˙˙˙˙đÁHü‰Č…ĀĶū˙˙…&˙˙˙ƒėPRčü˙˙˙뷋Hü‰˙˙˙ƒé‰Hü‹˙˙˙‰Čë͉ĮëëU‰Æëk‰Æë(‰Æëtƒė ˙ĩ˙˙˙čü˙˙˙YXF‰ūP˙ĩ ˙˙˙čü˙˙˙ƒÄ‹ƒƒė ˙ĩ˙˙˙ƒĀ‰…`˙˙˙čü˙˙˙‰4$čü˙˙˙‹Wô‹˙˙˙‰Æ‰Ŋ,˙˙˙‰Œ,˙˙˙ëÁ‹(˙˙˙Aô;ƒuƒė ˙ĩ ˙˙˙čü˙˙˙‰4$čü˙˙˙ƒģyütƒĘ˙đÁ…ŌĶRR•&˙˙˙RPčü˙˙˙ƒÄëŋ‹Qüz˙‰yüëŨU‰åWVSčü˙˙˙Ãƒė$‹u˙u Včü˙˙˙XZ˙uVčü˙˙˙ƒÄeô‰đ[^_]‰Į‹Aô;ƒtUįčlƒė Wčü˙˙˙U‰åWVSčü˙˙˙Ãƒė0‹E‹u j‰Į‰EЍƒPV‰EÔčü˙˙˙‰øƒÄ<\ļø‡§‹„ģØ˙āt&ƒƒėjPVčü˙˙˙ƒÄvƒėj˙uÔVčü˙˙˙ƒÄ ƒjPVčü˙˙˙XZWVčü˙˙˙ļEЃÄƒč<‡íƒƒėjPVčü˙˙˙ƒÄeô[^_]̓ƒėjPVčü˙˙˙ƒÄ j˙uÔVčü˙˙˙ƒÄëĶvƒƒėjPVčü˙˙˙ƒÄéf˙˙˙ļƒƒėjPVčü˙˙˙ƒÄéF˙˙˙ļƒƒėjPVčü˙˙˙ƒÄé&˙˙˙ļƒƒėjPVčü˙˙˙ƒÄé˙˙˙ļƒƒėjPVčü˙˙˙ƒÄéæū˙˙ļƒƒėjPVčü˙˙˙ƒÄéÆū˙˙ļƒƒėjPVčü˙˙˙ƒÄéĻū˙˙ļƒƒėjPVčü˙˙˙ƒÄé†ū˙˙ļG⃸^† EāƒėWP‰EĖčü˙˙˙EäY‰Â‰EČX‹EĖPƒPRčü˙˙˙X‹EäZ˙pôPVčü˙˙˙‹E䋋ƒÄƒč 9Č…¨‹Eāƒč 9Č…ƒėj˙uÔVčü˙˙˙ƒÄ€}Đ„Jū˙˙PƒjPVčü˙˙˙XZWVčü˙˙˙ƒÄéū˙˙EäƒėWPčü˙˙˙ƒY_jPVčü˙˙˙‹EäƒÄ ˙pôPVčü˙˙˙‹EäƒÄƒč ;ƒ„Đũ˙˙UßčléÃũ˙˙‹UČčléf˙˙˙U߉MĖčl‹MĖéE˙˙˙ļEЃėjˆEāEāPVčü˙˙˙ƒÄ j˙uÔVčü˙˙˙ƒÄ€}Đ„‡ũ˙˙QéBũ˙˙‰Æë ‰Æ‹‹ë‹E䋋ƒč 9ČtU߉MÔčl‹MԋEāƒč 9Čuƒė Včü˙˙˙‰Æ‹Eäƒč ;ƒtįUßčlëŨU‰åWVSčü˙˙˙Ãƒė0‹u ‹}ƒjPV‰EÔčü˙˙˙‰øƒÄžĀ‰EЉø<\‡§ļĀ‹„ƒØ˙āƒƒėjPVčü˙˙˙ƒÄvƒėj˙uÔVčü˙˙˙ƒÄ ƒjPVčü˙˙˙XZ˙uĐVčü˙˙˙G˙ƒÄ<‡˙ƒƒėjPVčü˙˙˙ƒÄeô[^_]ÃfƒƒėjPVčü˙˙˙ƒÄ j˙uÔVčü˙˙˙ƒÄëŅvƒƒėjPVčü˙˙˙ƒÄéf˙˙˙ļƒƒėjPVčü˙˙˙ƒÄéF˙˙˙ļƒƒėjPVčü˙˙˙ƒÄé&˙˙˙ļƒƒėjPVčü˙˙˙ƒÄé˙˙˙ļƒƒėjPVčü˙˙˙ƒÄéæū˙˙ļƒƒėjPVčü˙˙˙ƒÄéÆū˙˙ļƒƒėjPVčü˙˙˙ƒÄéĻū˙˙ļƒƒėjPVčü˙˙˙ƒÄé†ū˙˙ļ‹EĐƒč ƒø^†!Eā‰ųƒėļŅRP‰EĖčü˙˙˙Eä‰Á‰EČX‹EĖZPƒPQčü˙˙˙X‹EäZ˙pôPVčü˙˙˙‹E䋋ƒÄƒč 9Č…ĩ‹Eāƒč 9Č…šƒėj˙uÔVčü˙˙˙‰øƒÄ„Ā„@ū˙˙ƒWjPVčü˙˙˙XZ˙uĐVčü˙˙˙ƒÄéū˙˙´&Eä‰úƒėļúWPčü˙˙˙ƒY_jPVčü˙˙˙‹EäƒÄ ˙pôPVčü˙˙˙‹EäƒÄƒč ;ƒ„šũ˙˙UßčléŦũ˙˙‹UČčléY˙˙˙U߉MĖčl‹MĖé8˙˙˙v‰øƒėˆEāEājPVčü˙˙˙ƒÄ j˙uÔVčü˙˙˙‰øƒÄ„Ā„oũ˙˙Qé,ũ˙˙‰Æë ‰Æ‹‹ë‹E䋋ƒč 9ČtU߉MÔčl‹MԋEāƒč 9Čuƒė Včü˙˙˙‰Æ‹Eäƒč ;ƒtįUßčlëŨU‰åWVSčü˙˙˙Ãƒė0‹u ‹}ƒjPVčü˙˙˙ƒÄ‰ō‰øč<^‰EԍƒƒėjPVčü˙˙˙ƒÄ…˙ueô[^_]Í´&ƒƒėjPVčü˙˙˙YXWVčü˙˙˙ƒÄƒ}ÔtG˙ƒøw$ƒƒėjPVčü˙˙˙ƒÄeô[^_]Í´&EäƒėWPčü˙˙˙XƒZjPVčü˙˙˙‹EäƒÄ ˙pôPVčü˙˙˙‹EäƒÄƒč ;ƒtUãčl듉ƋEäƒč ;ƒtUãčlƒė Včü˙˙˙WVS‹t$čü˙˙˙Ã‹|$9>t%ƒė jčü˙˙˙ƒÄ„Āt‹…Āt ƒė ‹P˙RƒÄ‰>[^_ÃU‰åWVSEāčü˙˙˙Ãƒė8‹} ‰EÔP‹učü˙˙˙‹EāƒÄ…˙P„™ƒė ‰UĐWčü˙˙˙‹UĐƒÄ PWRčü˙˙˙‹FƒÄ…Ā„ĄEäƒė˙uÔPčü˙˙˙‹}äWčü˙˙˙ƒÄ PW˙včü˙˙˙‹EäƒÄƒč ;ƒu[‹Uā…Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹Eā…Āt ƒė ‹P˙RƒÄeô‰đ[^_]Íļ‹@ƒėPô‹BƒČPRčü˙˙˙éf˙˙˙t&Ußčl뛍ļƒė jčü˙˙˙‹“Y_ƒÂ ‰PFPčü˙˙˙ƒÄé6˙˙˙‰Æë‰Æë‹Eäƒč ;ƒtUßčlPPj˙uÔčü˙˙˙‰4$čü˙˙˙U‰åWVS}āčü˙˙˙Ãƒė8‹uWčü˙˙˙‹E ƒÄ ‹˙pôP‹EāƒĀPčü˙˙˙‹NƒÄ…Ét~EäƒėWPčü˙˙˙‹EäP‰EÔčü˙˙˙ƒÄ P˙uÔ˙včü˙˙˙‹EäƒÄƒč ;ƒu5‹Uā…Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹Eā…Āt ƒė ‹P˙RƒÄeô‰đ[^_]ÍUßčlëÁļƒė jčü˙˙˙YZ‹“ƒÂ ‰PFPčü˙˙˙ƒÄéY˙˙˙‰Æë‰Æ‹Eäƒč ;ƒtUßčlPPjWčü˙˙˙‰4$čü˙˙˙U‰åWVSEāčü˙˙˙Ãƒė8‹} ‰EÔP‹učü˙˙˙‹EāƒÄ…˙P„™ƒė ‰UĐWčü˙˙˙‹UĐƒÄ PWRčü˙˙˙‹FƒÄ…Ā„ĄEäƒė˙uÔPčü˙˙˙‹}äWčü˙˙˙ƒÄ PW˙včü˙˙˙‹EäƒÄƒč ;ƒu[‹Uā…Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹Eā…Āt ƒė ‹P˙RƒÄeô‰đ[^_]Íļ‹@ƒėPô‹BƒČPRčü˙˙˙éf˙˙˙t&Ußčl뛍ļƒė jčü˙˙˙‹“Y_ƒÂ ‰PFPčü˙˙˙ƒÄé6˙˙˙‰Æë‰Æë‹Eäƒč ;ƒtUßčlPPj˙uÔčü˙˙˙‰4$čü˙˙˙U‰åWVS}āčü˙˙˙Ãƒė8‹uWčü˙˙˙X‹EāZ˙u ƒĀPčü˙˙˙‹NƒÄ…É„EäƒėWPčü˙˙˙‹EäP‰EÔčü˙˙˙ƒÄ P˙uÔ˙včü˙˙˙‹EäƒÄƒč ;ƒu8‹Uā…Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹Eā…Āt ƒė ‹P˙RƒÄeô‰đ[^_]ÍvUßčl랍ļƒė jčü˙˙˙YZ‹“ƒÂ ‰PFPčü˙˙˙ƒÄéV˙˙˙‰Æë‰Æ‹Eäƒč ;ƒtUßčlPPjWčü˙˙˙‰4$čü˙˙˙U‰åWVSEāčü˙˙˙Ãƒė8‰EԋuPčü˙˙˙‹E ƒÄ‹8…˙„ƒė Wčü˙˙˙ƒÄ P‹EāWƒĀPčü˙˙˙‹FƒÄ…Ā„ĨEäƒė˙uÔPčü˙˙˙‹}äWčü˙˙˙ƒÄ PW˙včü˙˙˙‹EäƒÄƒč ;ƒu_‹Uā…Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹Eā…Āt ƒė ‹P˙RƒÄeô‰đ[^_]Ívŧ'ƒƒėjP‹EāƒĀPčü˙˙˙é`˙˙˙vUßčl뗍ļƒė jčü˙˙˙‹“Y_ƒÂ ‰PFPčü˙˙˙ƒÄé2˙˙˙‰Æë‰Æë‹Eäƒč ;ƒtUßčlPPj˙uÔčü˙˙˙‰4$čü˙˙˙U‰åWVSuäčü˙˙˙Ãƒė(‹}Včü˙˙˙X‹E Z˙0‹EäPRčü˙˙˙YXVWčü˙˙˙‹UäƒÄ …Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹Eä…Āt ƒė ‹P˙RƒÄeô‰ø[^_]‰ĮPPjVčü˙˙˙‰<$čü˙˙˙U1‰åWVSčü˙˙˙Ãƒė8‹uƒ~˙•ĀPčü˙˙˙ƒÄ„ĀuQƒ}ähPPjWčü˙˙˙ƒƒÄ j P‹ƒP‰EÔčü˙˙˙ƒƒÄ j5P˙uÔčü˙˙˙‰<$čü˙˙˙ƒÄ‹E ƒė‹‹xôWP˙včü˙˙˙ƒÄ9Įtxƒ}ähUPjWčü˙˙˙ƒƒÄ j&P‹ƒP‰EÔčü˙˙˙‹FƒÄ ˙pôP˙uÔčü˙˙˙‰ÂƒƒÄ j‰UÔPRčü˙˙˙‹F ƒÄ ˙pôP˙uÔčü˙˙˙‰<$čü˙˙˙ƒÄeô[^_]ÉÆë‰Æëƒė Wčü˙˙˙‰4$čü˙˙˙ƒė Wčü˙˙˙‰4$čü˙˙˙U‰åWVSčü˙˙˙Ãƒė8‹uVčü˙˙˙ƒÄ…‰Įučü˙˙˙ÆF‰Feô[^_]Ãļƒh<PEäjP‰EÔčü˙˙˙ƒƒÄ jP˙ŗčü˙˙˙ƒƒÄ jP˙ŗčü˙˙˙ZYW˙ŗčü˙˙˙X˙uÔčü˙˙˙ƒÄ낉ƃė ˙uÔčü˙˙˙‰4$čü˙˙˙U‰åWVSčü˙˙˙Ãƒė8‹EÆ@Pčü˙˙˙ƒÄ…‰Æueô[^_]ÃļƒhHPEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙ZYVWčü˙˙˙X˙uÔčü˙˙˙ƒÄeô[^_]Éƃė ˙uÔčü˙˙˙‰4$čü˙˙˙U‰åWVSčü˙˙˙Ãƒė8˙učü˙˙˙ƒÄ…‰Æu eô[^_]ÍvƒhyPEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙ZYVWčü˙˙˙X˙uÔčü˙˙˙ƒÄeô[^_]Éƃė ˙uÔčü˙˙˙‰4$čü˙˙˙U‰åWVSčü˙˙˙Ãƒė8‹}‹G+Áø9E ‰EЋE ÷ĐžÂÁč!ĐPčü˙˙˙ƒÄ„Ā…Œƒh:PEäjP‰EÔčü˙˙˙‹ŗƒƒÄ j.PVčü˙˙˙ƒƒÄ jPVčü˙˙˙YX˙u Včü˙˙˙‰ÆƒƒÄ jPVčü˙˙˙XZ˙uĐVčü˙˙˙“ƒÄ jRPčü˙˙˙Y˙uÔčü˙˙˙ƒÄƒė ‹EĐ9E‹užĀ1Ō9u žÂ!ĐPčü˙˙˙ƒÄ„Āt[‹u+u ‹Eƒū…ü˙˙˙~9‰Eԉ}ƒėV˙uƒîčü˙˙˙‹}E ƒÄ‹UԃmÔ‹ʃū‹:‹‰8‰ u͍eô[^_]Ѝt&ƒh=PEäjP‰EÔčü˙˙˙‹ŗƒƒÄ j.PVčü˙˙˙ƒƒÄ jPVčü˙˙˙XZ˙uVčü˙˙˙‰ÆƒƒÄ jPVčü˙˙˙YX˙u Včü˙˙˙‰ÆƒƒÄ jPVčü˙˙˙XZ˙uĐVčü˙˙˙Z“YRPčü˙˙˙X˙uÔčü˙˙˙ƒÄéøū˙˙‰Æë‰Æëƒė ˙uÔčü˙˙˙‰4$čü˙˙˙ƒė ˙uÔčü˙˙˙‰4$čü˙˙˙U1‰åWVSčü˙˙˙Ãƒė(‹uƒ~˙•ĀPčü˙˙˙ƒÄ„ĀuPƒ}ähaPjWčü˙˙˙ƒƒÄ j P˙ŗčü˙˙˙ƒƒÄ j@P˙ŗčü˙˙˙‰<$čü˙˙˙ƒÄƒė ˙včü˙˙˙ĮF˙˙˙˙ƒÄeô[^_]Éƃė Wčü˙˙˙‰4$čü˙˙˙U‰åWVSčü˙˙˙Ãƒė8‹E˙0čü˙˙˙ƒÄ…Āt ‹ƒė P˙RƒÄ‹Eƒė ˙0čü˙˙˙ƒÄ…‰Æt^ƒ}ähÎPjWčü˙˙˙ƒƒÄ jP˙ŗčü˙˙˙ƒƒÄ jP˙ŗčü˙˙˙XZV˙ŗčü˙˙˙‰<$čü˙˙˙ƒÄ‹E‹x‹p9÷tD‹‹Eä‰EЉMÔë t&ƒÆ 9÷t!‹Fƒč ;EÔtî‹UĐƒÆ čl9÷u捴&‹E‹x…˙t ƒė Wčü˙˙˙ƒÄeô[^_]ÉEÔë‰Æƒė Wčü˙˙˙‰uԃÄ‹E‹p‹x9ūt1E㋋‰EЋGƒč 9Čt‹UЉMĖčl‹M˃Į 9ūuá‹E‹p…öt ƒė Včü˙˙˙ƒÄƒė ˙uÔčü˙˙˙U‰åWVSčü˙˙˙Ãƒė8‹u˙6čü˙˙˙ƒÄ…Āt ƒė ‹P˙RƒÄƒė ˙6čü˙˙˙ƒÄ…‰Æu eô[^_]Ít&ƒhÎPEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙ZYVWčü˙˙˙X˙uÔčü˙˙˙ƒÄeô[^_]Éƃė ˙uÔčü˙˙˙‰4$čü˙˙˙U‰åWVSčü˙˙˙Ãƒė,‹E‹0‹Nô…É„„ļƒč0ƒø wyčü˙˙˙Į‰EԍEāƒėj PVčü˙˙˙‰Æ‹EāƒÄ‰×€8u5‹Eԋ…Ōu,ƒė jčü˙˙˙ƒÄ„ĀtC‰đ™9×u,‹E ‰0¸ë"´&ƒė jčü˙˙˙ƒÄ„ĀˆEĶtt&1Āeô[^_]ÍļÆEĶƒhPEäjP‰EÔčü˙˙˙ƒƒÄ j4P˙ŗčü˙˙˙X˙uÔčü˙˙˙ƒÄ€}Ķ…r˙˙˙ëŖ‰Æƒė ˙uÔčü˙˙˙‰4$čü˙˙˙U‰åWVSčü˙˙˙Ãƒė,‹u‹ƒƒĀƒ~˙‰tvƒė jčü˙˙˙ƒÄ„ĀuPƒ}ähaPjWčü˙˙˙ƒƒÄ j P˙ŗčü˙˙˙ƒƒÄ j@P˙ŗčü˙˙˙‰<$čü˙˙˙ƒÄƒė ˙včü˙˙˙ƒÄĮF˙˙˙˙‹F ‹ģƒč 9øu"‹Fƒč 9øueô[^_]ÍUäčleô[^_]ÍUäčlëԉEÔë‰EÔë ƒė Wčü˙˙˙ƒÄ‹F ‹ģƒč 9øtUãčl‹Fƒč 9øtUãčlƒė ˙uÔčü˙˙˙U‰åWVSčü˙˙˙Ãƒė,‹u‹ƒƒĀƒ~˙‰tvƒė jčü˙˙˙ƒÄ„ĀuPƒ}ähaPjWčü˙˙˙ƒƒÄ j P˙ŗčü˙˙˙ƒƒÄ j@P˙ŗčü˙˙˙‰<$čü˙˙˙ƒÄƒė ˙včü˙˙˙ƒÄĮF˙˙˙˙‹F ‹ģƒč 9øu2‹Fƒč 9øuƒė Včü˙˙˙ƒÄeô[^_]Ít&UäčlëŪļUäčlëĉEÔë‰EÔë ƒė Wčü˙˙˙ƒÄ‹F ‹ģƒč 9øtUãčl‹Fƒč 9øtUãčlƒė ˙uÔčü˙˙˙U‰åWVSčü˙˙˙Ãƒė8‹E‹“ƒĀƒÂ‰PüPčü˙˙˙ƒÄ…‰Æu eô[^_]ÍvƒhyPEäjP‰EÔčü˙˙˙‹ģƒƒÄ jPWčü˙˙˙ƒƒÄ jPWčü˙˙˙ZYVWčü˙˙˙X˙uÔčü˙˙˙ƒÄeô[^_]Éƃė ˙uÔčü˙˙˙‰4$čü˙˙˙U‰åWVSčü˙˙˙Ãƒė8‹u‹ƒƒĀ‰FPčü˙˙˙ƒÄ…‰Įuƒė Včü˙˙˙ƒÄeô[^_]Ѝ´&ƒhyPEäjP‰EÔčü˙˙˙ƒƒÄ jP˙ŗčü˙˙˙ƒƒÄ jP˙ŗčü˙˙˙ZYW˙ŗčü˙˙˙X˙uÔčü˙˙˙ƒÄ뀉ƃė ˙uÔčü˙˙˙‰4$čü˙˙˙U‰åWVSčü˙˙˙Ãƒė,‹u‹ƒƒĀ‰‹F…Ā„Ūƒė jčü˙˙˙ƒÄ„„ɋv…ö„ž‹‹@;ƒ…ē‹ƒƒĀƒ~˙‰tvƒė jčü˙˙˙ƒÄ„ĀuPƒ}ähaPjWčü˙˙˙ƒƒÄ j P˙ŗčü˙˙˙ƒƒÄ j@P˙ŗčü˙˙˙‰<$čü˙˙˙ƒÄƒė ˙včü˙˙˙ƒÄĮF˙˙˙˙‹F ‹ģƒč 9øuC‹Fƒč 9øu)ƒė Včü˙˙˙ƒÄeô[^_]Ѝt&ƒė V˙ЃÄë萍t&Uäčlë͍ļUäčlëŗ‰EÔë‰EÔë ƒė Wčü˙˙˙ƒÄ‹F ‹ģƒč 9øtUãčl‹Fƒč 9øtUãčlƒė ˙uÔčü˙˙˙U‰åWVS}Üčü˙˙˙Ãƒė4‹u‹‹@˙u W‰EÔčü˙˙˙ƒƒÄ jPWčü˙˙˙ƒÄ‹EÔ;ƒ…ƒė 1ƒ~˙•ĀPčü˙˙˙ƒÄ„ĀuPƒhPPEājP‰EÔčü˙˙˙‹ģƒƒÄ j PWčü˙˙˙ƒƒÄ j5PWčü˙˙˙Z˙uÔčü˙˙˙ƒÄ‹E܃ė‹xôWP˙včü˙˙˙ƒÄ9ĮtrƒhUPEäjP‰EÔčü˙˙˙‹ģƒƒÄ j&PWčü˙˙˙‹FƒÄ ˙pôPWčü˙˙˙‰ĮƒƒÄ jPWčü˙˙˙‹F ƒÄ ˙pôPWčü˙˙˙X˙uÔčü˙˙˙ƒÄ‹E܃č ;ƒueô[^_]Íļƒė‹EÔWV˙ĐëՍt&Uäčleô[^_]ÉÆë‰Æëƒė ˙uÔčü˙˙˙ƒÄ‹E܃č ;ƒtUÛčlƒė Včü˙˙˙‰Æë‰Æë‹E܃č ;ƒtáUäčlë׃ė ˙uÔčü˙˙˙ƒÄëąU‰åWVSuāčü˙˙˙Ãƒė ‹E ‹xEŪPƒPVčü˙˙˙YXVuäVčü˙˙˙‰<$čü˙˙˙ƒÄ PWVčü˙˙˙X‹EZV˙pčü˙˙˙‹Eä‹ģƒÄƒč 9øu‹Eāƒč 9øu eô[^_]ÍUßčl‹Eāƒč 9øtæļ‰ōčleô[^_]ÉƋģë‰Æëëú‹Eä‹ģƒč 9øtUßčl‹Eāƒč 9øtUßčlƒė Včü˙˙˙U‰åWVSuäčü˙˙˙Ãƒė8˙u ‹}čü˙˙˙ƒÄ “„ĀƒVDÂPEāP‰EÔčü˙˙˙ƒƒÄ ˙uÔPVčü˙˙˙‰4$˙wčü˙˙˙‹E䋋ƒÄƒč ‰MÔ9Ču(‹Eāƒč ;EÔu5‹Gƒė ‹P˙R ƒÄeô[^_]ÍļUßčl‹Eāƒč ;EÔtАt&‰ōčlë‰Ƌƒ‰EÔë‰Æ‹Eä‹ģƒč ‰}Ô9øtUßčl‹Eāƒč ;EÔtUßčlƒė Včü˙˙˙U‰åWVSčü˙˙˙ÃƒėT‹} ƒ‹w‹Nô˙w…ÉDđEāP‰E°čü˙˙˙‹G}ԉEЍEЉ$W‰EŦčü˙˙˙Eĉ4$P‰E´čü˙˙˙XuȍƒZ˙u´PVčü˙˙˙‰4$uĖVčü˙˙˙ƒƒÄ jPVčü˙˙˙EØƒÄ WVP‰Įčü˙˙˙u܉<$Včü˙˙˙ƒƒÄ j PVčü˙˙˙}äƒÄ ˙u°VWčü˙˙˙‹E‰<$˙pčü˙˙˙‹E䋺ƒÄƒč 9đup‹E܃č 9đu~‹E؃č 9đ…ˆ‹E˃č 9đ…’‹Eȃč 9đ…œ‹Eăč 9đ…Ļ‹Eԃč 9đ…°‹Eāƒč 9đ…ēeô[^_]Ívŧ'UÃčl‹E܃č 9đtˆļ‰účl‹E؃č 9đ„{˙˙˙v‰účl‹E˃č 9đ„q˙˙˙v‰účl‹Eȃč 9đ„g˙˙˙v‰účl‹Eăč 9đ„]˙˙˙v‰účl‹Eԃč 9đ„S˙˙˙v‰účl‹Eāƒč 9đ„I˙˙˙v‰účleô[^_]ÉĮ‹ŗë‰Į‹ŗé„‹E䋺ƒč 9đtUÃčl‹E܃č 9đtUÃčl‹E؃č 9đtUÃčl‹E˃č 9đtUÃčl‹Eȃč 9đtUÃčl‹Eăč 9đtUÃčl‹Eԃč 9đtUÃčl‹Eāƒč 9đt‹UŦčlƒė Wčü˙˙˙‰Į‹ŗél˙˙˙‰Į‹E܋ŗƒč 9đ„h˙˙˙Uäčlé[˙˙˙‰Į‹ŗéN˙˙˙‰Į‹ŗéS˙˙˙‰Įë ‰Į‹ŗéT˙˙˙‹EĖ‹ŗƒč 9đ„@˙˙˙Uäčlé3˙˙˙‰Į‹ŗé8˙˙˙‰ĮéŅū˙˙U‰åWVSčü˙˙˙Ãƒė,‹u‹ƒ‹VƒĀ‰…Ō„æƒė jčü˙˙˙ƒÄ„„ҋ~…˙„Æ‹‹@;ƒ…Ō‹ƒƒĀƒ˙‰tzƒė jčü˙˙˙ƒÄ„ĀuTƒhaPEäjP‰EÔčü˙˙˙ƒƒÄ j P˙ŗčü˙˙˙ƒƒÄ j@P˙ŗčü˙˙˙X˙uÔčü˙˙˙ƒÄƒė ˙wčü˙˙˙ƒÄĮG˙˙˙˙‹G ‹‹ƒč ‰MÔ9ČuT‹Gƒč ;EÔu9ƒė Wčü˙˙˙ƒÄƒė Včü˙˙˙ƒÄeô[^_]Éöŧ'ƒė W˙ЃÄëØt&UäčlëŊļUäčlëĸ‰Æë‰Æëƒė ˙uÔčü˙˙˙ƒÄ‹G ‹“ƒč ‰UÔ9ĐtUãčl‹Gƒč ;EÔtUãčlƒė Včü˙˙˙U‰åWVSE֍}Øčü˙˙˙Ãƒė@PƒPWčü˙˙˙‹EY‹p‹‹@‰EÄXW}ÜWčü˙˙˙ƒƒÄ jPWčü˙˙˙ƒÄ‹EÄ;ƒ…ƒė 1ƒ~˙•ĀPčü˙˙˙ƒÄ„ĀuPƒhPPEājP‰EÄčü˙˙˙‹ģƒƒÄ j PWčü˙˙˙ƒƒÄ j5PWčü˙˙˙Z˙uÄčü˙˙˙ƒÄ‹E܃ė‹xôWP˙včü˙˙˙ƒÄ9ĮtrƒhUPEäjP‰EÄčü˙˙˙‹ģƒƒÄ j&PWčü˙˙˙‹FƒÄ ˙pôPWčü˙˙˙‰ĮƒƒÄ jPWčü˙˙˙‹F ƒÄ ˙pôPWčü˙˙˙X˙uÄčü˙˙˙ƒÄ‹E܋ŗƒč 9đu5‹E؃č 9đueô[^_]Ívƒė‹EÄWV˙ĐëĖt&Uäčleô[^_]ÍUäčlëÁ‰Įë"‰ĮëQ‰Įëg‰Į‹ŗë(‰Įƒė ˙uÄčü˙˙˙ƒÄ‹E܋ŗƒč 9đtU×čl‹E؃č 9đtU×člƒė Wčü˙˙˙‹E܋ŗƒč 9đtՍUäčlë˃ė ˙uÄčü˙˙˙ƒÄëŖU‰åWVSEuÔčü˙˙˙ÃƒėD}ØPVčü˙˙˙YXƒVPWčü˙˙˙‹E‹p‹‹@‰<$}ÜW‰EÄčü˙˙˙ƒƒÄ jPWčü˙˙˙ƒÄ‹EÄ;ƒ…&ƒė 1ƒ~˙•ĀPčü˙˙˙ƒÄ„ĀuPƒhPPEājP‰EÄčü˙˙˙‹ģƒƒÄ j PWčü˙˙˙ƒƒÄ j5PWčü˙˙˙Z˙uÄčü˙˙˙ƒÄ‹E܃ė‹xôWP˙včü˙˙˙ƒÄ9ĮtrƒhUPEäjP‰EÄčü˙˙˙‹ģƒƒÄ j&PWčü˙˙˙‹FƒÄ ˙pôPWčü˙˙˙‰ĮƒƒÄ jPWčü˙˙˙‹F ƒÄ ˙pôPWčü˙˙˙X˙uÄčü˙˙˙ƒÄ‹E܋ŗƒč 9đuI‹E؃č 9đuW‹Eԃč 9đueô[^_]Ѝt&ƒė‹EÄWV˙ĐëĀt&Uäčleô[^_]Ѝ´&Uäčl‹E؃č 9đt¯ļUäčl량Į‹ŗë‰ĮëS‹E܋ŗƒč 9đtUäčl‹E؃č 9đtUĶčl‹Eԃč 9đtUĶčlƒė Wčü˙˙˙ƒė ˙uÄčü˙˙˙ƒÄ‹E܋ŗƒč 9đtĩUĶčlë̉Į‹ŗëŗ‰Įë ‰ĮëÆ‰Įéz˙˙˙ƒė ˙uÄčü˙˙˙ƒÄëŊU‰åWVS}Ôčü˙˙˙Ãƒė@‹E ‹pEŌPƒPWčü˙˙˙XZW}ØWčü˙˙˙‰4$čü˙˙˙ƒÄ PVWčü˙˙˙‹EY^‹p‹‹@W}ÜW‰EÄčü˙˙˙ƒƒÄ jPWčü˙˙˙ƒÄ‹EÄ;ƒ…%ƒė 1ƒ~˙•ĀPčü˙˙˙ƒÄ„ĀuPƒhPPEājP‰EÄčü˙˙˙‹ģƒƒÄ j PWčü˙˙˙ƒƒÄ j5PWčü˙˙˙Z˙uÄčü˙˙˙ƒÄ‹E܃ė‹xôWP˙včü˙˙˙ƒÄ9ĮtrƒhUPEäjP‰EÄčü˙˙˙‹ģƒƒÄ j&PWčü˙˙˙‹FƒÄ ˙pôPWčü˙˙˙‰ĮƒƒÄ jPWčü˙˙˙‹F ƒÄ ˙pôPWčü˙˙˙X˙uÄčü˙˙˙ƒÄ‹E܋ŗƒč 9đu@‹E؃č 9đuN‹Eԃč 9đueô[^_]Ít&ƒė‹EÄWV˙ĐëÁt&Uäčleô[^_]ÍUäčl‹E؃č 9đt¸ļUäčl먉Įë‰Įë]‰Į‹ŗë&ƒė ˙uÄčü˙˙˙ƒÄ‹E܋ŗƒč 9đtUĶčl‹E؃č 9đtUĶčl‹Eԃč 9đtUĶčlƒė Wčü˙˙˙‹E܋ŗƒč 9đtÍUäčl빉Įë‰Įë‹E؋ŗƒč 9đtŗUäčl늃ė ˙uÄčü˙˙˙ƒÄél˙˙˙‰Į‹ŗëŒ‰Įé[˙˙˙U‰åWVSuäčü˙˙˙Ãƒė(‹}Včü˙˙˙‹E ƒÄ ˙p˙0‹EäPRčü˙˙˙YXVWčü˙˙˙‹UäƒÄ …Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹Eä…Āt ƒė ‹P˙RƒÄeô‰ø[^_]‰ĮPPjVčü˙˙˙‰<$čü˙˙˙U‰åWVS}Ôčü˙˙˙ÃƒėT‹u ‹FX‹V\ƒÆ‰EāEā‰UäPWčü˙˙˙Včü˙˙˙ƒÄ “„ĀƒEUÆRPEČP‰E´čü˙˙˙uĖƒƒÄ ˙u´PVčü˙˙˙‰4$uĐVčü˙˙˙ƒƒÄ jPVčü˙˙˙EØƒÄ WVP‰Įčü˙˙˙‰<$}ÜWčü˙˙˙ƒƒÄ jPWčü˙˙˙X‹EZW˙pčü˙˙˙‹E܋ŗƒÄƒč 9đu?‹E؃č 9đuM‹EЃč 9đu[‹E˃č 9đui‹Eȃč 9đuw‹Eԃč 9đ…eô[^_]ЍUĮčl‹E؃č 9đtšļ‰účl‹EЃč 9đtŦ´&‰účl‹E˃č 9đtž´&‰účl‹Eȃč 9đt´&‰účl‹Eԃč 9đt†´&‰účleô[^_]ÉĮ‹ŗëF‰Į‹ŗë‹E܋ŗƒč 9đtUĮčl‹E؃č 9đtUĮčl‹EЃč 9đtUĮčl‹E˃č 9đtUĮčl‹Eȃč 9đtUĮčl‹Eԃč 9đtUĮčlƒė Wčü˙˙˙‰Į‹ŗëĨ‰Įét˙˙˙‰Į‹ŗë¸ëí‰Į‹ŗëž‰Į‹EЋŗƒč 9đtˆUÜčlé{˙˙˙U‰åWVS}Ôčü˙˙˙ÃƒėT‹u ‹F0‹V4‰EāEā‰UäPWčü˙˙˙Včü˙˙˙ƒÄ “…ĀƒOUÆRPEČP‰E´čü˙˙˙uĖƒƒÄ ˙u´PVčü˙˙˙‰4$uĐVčü˙˙˙ƒƒÄ jPVčü˙˙˙EØƒÄ WVP‰Įčü˙˙˙‰<$}ÜWčü˙˙˙ƒƒÄ jPWčü˙˙˙X‹EZW˙pčü˙˙˙‹E܋ŗƒÄƒč 9đuB‹E؃č 9đuP‹EЃč 9đu^‹E˃č 9đul‹Eȃč 9đuz‹Eԃč 9đ…„eô[^_]Ít&UĮčl‹E؃č 9đtļļ‰účl‹EЃč 9đtŠ´&‰účl‹E˃č 9đt›´&‰účl‹Eȃč 9đt´&‰účl‹Eԃč 9đtƒ´&‰účleô[^_]ÉĮ‹ŗëF‰Į‹ŗë‹E܋ŗƒč 9đtUĮčl‹E؃č 9đtUĮčl‹EЃč 9đtUĮčl‹E˃č 9đtUĮčl‹Eȃč 9đtUĮčl‹Eԃč 9đtUĮčlƒė Wčü˙˙˙‰Į‹ŗëĨ‰Įét˙˙˙‰Į‹ŗë¸ëí‰Į‹ŗëž‰Į‹EЋŗƒč 9đtˆUÜčlé{˙˙˙U‰åWVS}Ôčü˙˙˙ÃƒėX‹u Včü˙˙˙Y‰Eā‰UäXEāPWčü˙˙˙Včü˙˙˙ƒÄ “„ĀƒDUÆRPEČP‰E´čü˙˙˙uĖƒƒÄ ˙u´PVčü˙˙˙‰4$uĐVčü˙˙˙ƒƒÄ jPVčü˙˙˙EØƒÄ WVP‰Įčü˙˙˙‰<$}ÜWčü˙˙˙ƒƒÄ jPWčü˙˙˙X‹EZW˙pčü˙˙˙‹E܋ŗƒÄƒč 9đu@‹E؃č 9đuN‹EЃč 9đu\‹E˃č 9đuj‹Eȃč 9đux‹Eԃč 9đ…‚eô[^_]ÃfUĮčl‹E؃č 9đt¸ļ‰účl‹EЃč 9đtĢ´&‰účl‹E˃č 9đt´&‰účl‹Eȃč 9đt´&‰účl‹Eԃč 9đt…´&‰účleô[^_]ÉĮ‹ŗëF‰Į‹ŗë‹E܋ŗƒč 9đtUĮčl‹E؃č 9đtUĮčl‹EЃč 9đtUĮčl‹E˃č 9đtUĮčl‹Eȃč 9đtUĮčl‹Eԃč 9đtUĮčlƒė Wčü˙˙˙‰Į‹ŗëĨ‰Įét˙˙˙‰Į‹ŗë¸ëí‰Į‹ŗëž‰Į‹EЋŗƒč 9đtˆUÜčlé{˙˙˙U‰åWVSčü˙˙˙Ãƒė8hŧčü˙˙˙‰Æ@4‰$‰EÔčü˙˙˙‹ģƆ¨Į†¤Æ†ŠĮ†ŦĮ†°G‹ģĮ†´Į†¸‰F4‹O ‹G‰Ę‰‰EЉMˉÁ‹@ô‰ĮFXZ‹QôjōRčü˙˙˙YX‹G‹W‰F‹@ôD‰jPčü˙˙˙‹G‹WN ‰MЋ@ô‰‹ƒĮFĮFĮFĮFP ĮF ĮF$‰P4ƒĀ ‰F‹ƒ‰V4ƒĀ‰F F(‰$čü˙˙˙‹ƒ‹“ĮF,ƒĀ‰F B ‰F0XZ˙uĐ˙uÔčü˙˙˙‹EY_‰0Eä˙u Pčü˙˙˙‹EäZY˙pôP‹E‹‰EԃĀPčü˙˙˙‹EäƒÄƒč ;ƒueô[^_]Ívŧ'Uãčleô[^_]ÉĮë‰Æë;ëc‰ÆëK‹MЉĮ‹Qô‹Mˉ ‹ƒƒė ƒĀ‰F4˙uÔčü˙˙˙‰4$čü˙˙˙‰<$čü˙˙˙‹Eäƒč ;ƒtUãčlPPj˙učü˙˙˙‰4$čü˙˙˙ƒė ˙uЉEĖčü˙˙˙XZWRVčü˙˙˙‹E˃ĉĮë‹U‰åWVSčü˙˙˙ÃėüŨEŨ•@ū˙˙ŨEŨ•8ū˙˙ßéŨ؇틅Dū˙˙‹ĩ@ū˙˙‹ŊDū˙˙%đ=đ„‹<ū˙˙‹…8ū˙˙‹•<ū˙˙áđ‰…0ū˙˙ųđ‰•4ū˙˙„û‹…Dū˙˙…Āˆ-‹Dū˙˙‹ĩ@ū˙˙É€‰Ī‹…<ū˙˙…Āˆķ‹<ū˙˙‹…8ū˙˙É€‰Ę9ׂw†i)Æ׉đ‰úƒúw ƒø†3v…pū˙˙ƒė ‰Į‰…ū˙˙…¤ū˙˙P‰…0ū˙˙čü˙˙˙‹ŗÆ…˙˙˙Į…˙˙˙ƅ˙˙˙Į…˙˙˙Į… ˙˙˙F‹ŗĮ…$˙˙˙Į…(˙˙˙‰…¤ū˙˙‹V‹N ‹Bô‰•pū˙˙‰(ū˙˙‰•,ū˙˙‰Œpū˙˙Į…tū˙˙YX‹BôjøPčü˙˙˙‹NŊxū˙˙XZ‹Qô‰xū˙˙‰$ū˙˙‹Nú‰ jR‰ ū˙˙čü˙˙˙‹V‹N‹Bô‰•ū˙˙‹“‰ū˙˙‰Œpū˙˙Į…€ū˙˙B Į…„ū˙˙Į…ˆū˙˙Į…Œū˙˙Į…ū˙˙‰…pū˙˙B4Į…”ū˙˙‰…¤ū˙˙B ‹“‰…xū˙˙B•˜ū˙˙‰…|ū˙˙‰$‰•ū˙˙čü˙˙˙‹‹‹“Į…œū˙˙AY‰…|ū˙˙B |ū˙˙‰… ū˙˙‰ū˙˙XQ˙ĩ0ū˙˙čü˙˙˙‹…xū˙˙ƒÄ ‹@ô˙ĩDū˙˙˙ĩ@ū˙˙WĮ„|ū˙˙čü˙˙˙…,˙˙˙‰Į‰…ū˙˙…`˙˙˙‰$‰…@ū˙˙čü˙˙˙‹‹‹•,ū˙˙ÆEÔĮEĐÆEÕĮE؍A‹(ū˙˙ĮEÜĮEāĮE䉅`˙˙˙‹Bô‰•,˙˙˙‰Œ,˙˙˙Į…0˙˙˙X‹BôYjøPčü˙˙˙‹•$ū˙˙Y_‹Jô‰•4˙˙˙Ŋ4˙˙˙‹• ū˙˙ų‰jQčü˙˙˙‹•ū˙˙‹ū˙˙‹Bô‹“‰Œ,˙˙˙B ‹‹Į…<˙˙˙Į…@˙˙˙‰…,˙˙˙B4Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙‰…`˙˙˙B Į…P˙˙˙‰…4˙˙˙AT˙˙˙‰…8˙˙˙‰ $‰ū˙˙čü˙˙˙‹“‹‹Į…X˙˙˙B‰…8˙˙˙A ‰…\˙˙˙XZ•8˙˙˙R˙ĩ@ū˙˙‰• ū˙˙čü˙˙˙‹…4˙˙˙ƒÄ ‹@ô˙ĩ<ū˙˙˙ĩ8ū˙˙WĮ„8˙˙˙čü˙˙˙X…Pū˙˙Z˙ĩū˙˙P‰…8ū˙˙čü˙˙˙X…Tū˙˙˙ĩū˙˙P‰… ū˙˙čü˙˙˙Ŋhū˙˙W‰Ŋū˙˙čü˙˙˙ĩXū˙˙Včü˙˙˙ƒƒÄ j P‹…Xū˙˙ƒĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^XE PWčü˙˙˙ĩ\ū˙˙‰Į‰4$čü˙˙˙ƒƒÄ jP‹…\ū˙˙ƒĀPčü˙˙˙XZVWčü˙˙˙YXjVčü˙˙˙XEZPWčü˙˙˙ĩ`ū˙˙‰Į‰4$čü˙˙˙ƒƒÄ jP‹…`ū˙˙ƒĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^XƒPWčü˙˙˙ZY˙ĩ ū˙˙Pčü˙˙˙ĩdū˙˙‰Į‰4$čü˙˙˙ƒƒÄ jP‹…dū˙˙ƒĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^X˙ĩ8ū˙˙Wčü˙˙˙ZYP˙učü˙˙˙^…lū˙˙_jPčü˙˙˙‹…Tū˙˙ƒÄƒč ;ƒ…‹…Pū˙˙ƒč ;ƒ…˜‹ƒƒĀ ‰…,˙˙˙‹ƒƒĀ4‰…`˙˙˙‹ƒƒĀ ‰…4˙˙˙‹ƒƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ…W‹ƒƒė ˙ĩū˙˙ƒĀ‰…8˙˙˙čü˙˙˙‹…ū˙˙‹ĩū˙˙‹Ŋ(ū˙˙Y‹@ô‰´,˙˙˙‹…$ū˙˙‹ĩ ū˙˙‰…4˙˙˙‹@ô‰´4˙˙˙‹…,ū˙˙‰…,˙˙˙‹@ô˙ĩ@ū˙˙‰ŧ,˙˙˙‹ƒƒĀ‰…`˙˙˙čü˙˙˙‹ƒƒÄƒĀ ‰…pū˙˙‹ƒƒĀ4‰…¤ū˙˙‹ƒƒĀ ‰…xū˙˙‹ƒƒĀ‰…|ū˙˙‹… ū˙˙ƒč ;ƒ…M‹ƒƒė ˙ĩū˙˙ƒĀ‰…|ū˙˙čü˙˙˙‹…ū˙˙‹ĩū˙˙‹Ŋ ū˙˙Z‹@ô‰´pū˙˙‹…$ū˙˙‹ĩ(ū˙˙‰…xū˙˙‹@ô‰ŧxū˙˙‹…,ū˙˙‰…pū˙˙‹@ô˙ĩ0ū˙˙‰´pū˙˙‹ƒƒĀ‰…¤ū˙˙čü˙˙˙‹EƒÄeô[^_]´&ƒė ˙učü˙˙˙‹EƒÄ eô[^_]t&9ƃø˙˙)đúéŽø˙˙´&‹•Dū˙˙‹…@ū˙˙â˙˙ Â…~ø˙˙éŪ÷˙˙‰öŧ'‹<ū˙˙á˙˙‰Č‹8ū˙˙ Č…Tø˙˙éä÷˙˙´&‹…0ū˙˙‹•4ū˙˙÷؃Ō÷Úé ø˙˙÷ۃ×÷ßéÛ÷˙˙t&‹•ū˙˙čléŖū˙˙‹•ū˙˙čléSũ˙˙‹•ū˙˙čléXũ˙˙‹•ū˙˙člé™ũ˙˙‰Įë ‰Æé¤éPPjV‰ūčü˙˙˙ƒÄPP…lū˙˙jPčü˙˙˙ƒÄ‹…Tū˙˙ƒč ;ƒt •Oū˙˙čl‹…Pū˙˙ƒč ;ƒt •Oū˙˙člƒė ˙ĩū˙˙čü˙˙˙ƒÄƒė ˙ĩū˙˙čü˙˙˙‰4$čü˙˙˙‹Ŋ,ū˙˙‰Æ‰Ŋpū˙˙‹Wô‹Ŋ(ū˙˙‰ŧpū˙˙‹ƒƒė ˙ĩ0ū˙˙ƒĀ‰…¤ū˙˙čü˙˙˙‰4$čü˙˙˙‰ÆéD˙˙˙‰Įë‰Įë‰Įë(QQjV‰ūčü˙˙˙ƒÄé$˙˙˙PPjV‰ūčü˙˙˙ƒÄé˙˙˙PPjV‰ūčü˙˙˙ƒÄéüū˙˙‰Įë‰ÆéM˙˙˙ƒė ˙ĩū˙˙čü˙˙˙XF‰ūZP˙ĩū˙˙čü˙˙˙ƒÄéX˙˙˙‰Æë‰Æ‹…,ū˙˙‹Ŋ(ū˙˙‰…,˙˙˙‹@ô‰ŧ,˙˙˙‹ƒƒė ˙ĩ@ū˙˙ƒĀ‰…`˙˙˙čü˙˙˙ƒÄéŨū˙˙‰Įë‰ÆéÁū˙˙ƒė ˙ĩ ū˙˙čü˙˙˙YXF‰ūP˙ĩū˙˙čü˙˙˙ƒÄëljÆéxū˙˙‰ÆéUū˙˙U‰åWVSčü˙˙˙ÃėėŲEŲEŲÉßéŨ؇‹E‰Ââ€ú€„˜‹U‰Ņá€ų€„™‰Á‰ÆÎ€÷Ų…ĀIΉЉÖ÷Ū €…ŌHƉÎ)ƉÂ)Ę9Á‰đBƒø†(…pū˙˙ƒė ‰Į‰… ū˙˙…¤ū˙˙P‰…@ū˙˙čü˙˙˙‹ŗÆ…˙˙˙Į…˙˙˙ƅ˙˙˙Į…˙˙˙Į… ˙˙˙F‹ŗĮ…$˙˙˙Į…(˙˙˙‰…¤ū˙˙‹F‹V ‰Á‰…pū˙˙‰…<ū˙˙‹@ô‰•8ū˙˙‰”pū˙˙Į…tū˙˙X‹AôZjøPčü˙˙˙‹VY_‹JôŊxū˙˙‰•xū˙˙‰•4ū˙˙ų‰Č‹N‰jP‰0ū˙˙čü˙˙˙‹V‹N‹Bô‰•,ū˙˙‹“‰(ū˙˙‰Œpū˙˙Į…€ū˙˙B Į…„ū˙˙Į…ˆū˙˙Į…Œū˙˙Į…ū˙˙‰…pū˙˙B4Į…”ū˙˙‰…¤ū˙˙B ‹“‰…xū˙˙B•˜ū˙˙‰…|ū˙˙‰$‰•ū˙˙čü˙˙˙‹‹‹“Į…œū˙˙A|ū˙˙‰…|ū˙˙B ‰Dū˙˙‰… ū˙˙XZQ˙ĩ@ū˙˙čü˙˙˙‹…xū˙˙ŲE‹@ôŨ\$‰<$Į„|ū˙˙čü˙˙˙…,˙˙˙‰Į‰…$ū˙˙…`˙˙˙‰$‰…Dū˙˙čü˙˙˙‹‹ÆEԋ•8ū˙˙ĮEĐÆEÕĮE؍A‹<ū˙˙ĮEÜĮEāĮE䉅`˙˙˙‹Aô‰,˙˙˙‰”,˙˙˙Į…0˙˙˙X‹AôZjøPčü˙˙˙‹•4ū˙˙Y_‹JôŊ4˙˙˙‰•4˙˙˙ų‰Č‹0ū˙˙‰jPčü˙˙˙‹•,ū˙˙‹(ū˙˙‹Bô‹“‰Œ,˙˙˙B ‹‹Į…<˙˙˙Į…@˙˙˙‰…,˙˙˙B4Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙‰…`˙˙˙B •T˙˙˙Į…P˙˙˙‰…4˙˙˙A‰$‰•ū˙˙‰…8˙˙˙čü˙˙˙‹“‹‹Į…X˙˙˙B‰…8˙˙˙A 8˙˙˙‰…\˙˙˙‰ū˙˙XZQ˙ĩDū˙˙čü˙˙˙‹…4˙˙˙ŲE‹@ôŨ\$‰<$Į„8˙˙˙čü˙˙˙X…Pū˙˙Z˙ĩ$ū˙˙P‰…ū˙˙čü˙˙˙X…Tū˙˙˙ĩ ū˙˙P‰…ū˙˙čü˙˙˙…hū˙˙P‰Į‰… ū˙˙čü˙˙˙ĩXū˙˙Včü˙˙˙ƒƒÄ j P‹…Xū˙˙ƒĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^XE PWčü˙˙˙ĩ\ū˙˙‰Į‰4$čü˙˙˙ƒƒÄ jP‹…\ū˙˙ƒĀPčü˙˙˙XZVWčü˙˙˙YXjVčü˙˙˙XEZPWčü˙˙˙ĩ`ū˙˙‰Į‰4$čü˙˙˙ƒƒÄ jP‹…`ū˙˙ƒĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^XƒPWčü˙˙˙ZY˙ĩū˙˙Pčü˙˙˙ĩdū˙˙‰Į‰4$čü˙˙˙ƒƒÄ jP‹…dū˙˙ƒĀPčü˙˙˙YXVWčü˙˙˙XZjVčü˙˙˙^X˙ĩū˙˙Wčü˙˙˙ZYP˙učü˙˙˙^…lū˙˙_jPčü˙˙˙‹…Tū˙˙ƒÄƒč ;ƒ…A‹…Pū˙˙ƒč ;ƒ…<‹ƒƒĀ ‰…,˙˙˙‹ƒƒĀ4‰…`˙˙˙‹ƒƒĀ ‰…4˙˙˙‹ƒƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ…û‹ƒƒė ˙ĩū˙˙ƒĀ‰…8˙˙˙čü˙˙˙‹…,ū˙˙‹Ŋ(ū˙˙Y‹@ô‰ŧ,˙˙˙‹…4ū˙˙‹Ŋ0ū˙˙‰…4˙˙˙‹@ô‰ŧ4˙˙˙‹…<ū˙˙‹Ŋ8ū˙˙‰…,˙˙˙‹@ô˙ĩDū˙˙‰ŧ,˙˙˙‹ƒƒĀ‰…`˙˙˙čü˙˙˙‹ƒƒÄƒĀ ‰…pū˙˙‹ƒƒĀ4‰…¤ū˙˙‹ƒƒĀ ‰…xū˙˙‹ƒƒĀ‰…|ū˙˙‹… ū˙˙ƒč ;ƒ…鋃ƒė ˙ĩū˙˙ƒĀ‰…|ū˙˙čü˙˙˙‹…,ū˙˙‹Ŋ(ū˙˙‹ĩ8ū˙˙Z‹@ô‰ŧpū˙˙‹…4ū˙˙‹Ŋ0ū˙˙‰…xū˙˙‹@ô‰ŧxū˙˙‹…<ū˙˙‰…pū˙˙‹@ô˙ĩ@ū˙˙‰´pū˙˙‹ƒƒĀ‰…¤ū˙˙čü˙˙˙‹EƒÄeô[^_]vƒė ˙učü˙˙˙‹EƒÄ eô[^_]t&Š˙˙…­ø˙˙éXø˙˙´&÷Â˙˙…”ø˙˙éVø˙˙´&‹•$ū˙˙člé˙˙˙´&‹• ū˙˙člé¯ũ˙˙‹• ū˙˙člé´ũ˙˙‹• ū˙˙čléõũ˙˙‰Įë ‰Æé¤éPPjV‰ūčü˙˙˙ƒÄPP…lū˙˙jPčü˙˙˙ƒÄ‹…Tū˙˙ƒč ;ƒt •Oū˙˙čl‹…Pū˙˙ƒč ;ƒt •Oū˙˙člƒė ˙ĩ$ū˙˙čü˙˙˙ƒÄƒė ˙ĩ ū˙˙čü˙˙˙‰4$čü˙˙˙‹Ŋ<ū˙˙‰Æ‰Ŋpū˙˙‹Wô‹Ŋ8ū˙˙‰ŧpū˙˙‹ƒƒė ˙ĩ@ū˙˙ƒĀ‰…¤ū˙˙čü˙˙˙‰4$čü˙˙˙‰ÆéD˙˙˙‰Įë‰Įë‰Įë(QQjV‰ūčü˙˙˙ƒÄé$˙˙˙PPjV‰ūčü˙˙˙ƒÄé˙˙˙PPjV‰ūčü˙˙˙ƒÄéüū˙˙‰Įë‰ÆéM˙˙˙ƒė ˙ĩDū˙˙čü˙˙˙YXF‰ūP˙ĩ ū˙˙čü˙˙˙ƒÄéX˙˙˙‰Æë‰Æ‹…<ū˙˙‹Ŋ8ū˙˙‰…,˙˙˙‹@ô‰ŧ,˙˙˙‹ƒƒė ˙ĩDū˙˙ƒĀ‰…`˙˙˙čü˙˙˙ƒÄéŨū˙˙‰Įë‰ÆéÁū˙˙ƒė ˙ĩū˙˙čü˙˙˙YXF‰ūP˙ĩ$ū˙˙čü˙˙˙ƒÄëljÆéxū˙˙‰ÆéUū˙˙U‰åWVSčü˙˙˙Ãƒė,‹u‹E 9„æƒė jčü˙˙˙ƒÄ„„ˋ>…˙„‹‹@;ƒ…ž‹ƒƒĀƒ˙‰tzƒė jčü˙˙˙ƒÄ„ĀuTƒhaPEäjP‰EÔčü˙˙˙ƒƒÄ j P˙ŗčü˙˙˙ƒƒÄ j@P˙ŗčü˙˙˙X˙uÔčü˙˙˙ƒÄƒė ˙wčü˙˙˙ƒÄĮG˙˙˙˙‹G ‹‹ƒč 9ČuC‹Gƒč 9Ču)ƒė Wčü˙˙˙ƒÄ‹E ‰eô[^_]Ãė W˙ЃÄë萍t&Uäčlë͍ļUä‰MÔčl‹MÔ뭉Æë‰Æëƒė ˙uÔčü˙˙˙ƒÄ‹G ‹‹ƒč 9ČtUã‰MÔčl‹MԋGƒč 9ČtUãčlƒė Včü˙˙˙U‰åWVSčü˙˙˙Ãƒė<‹E‹u‹x;x„ø…˙t%GøƒėPWčü˙˙˙XGüZPGPčü˙˙˙‹EƒÄ‹x‹EƒĮƒė‰xEāVƒÆP‰EĐčü˙˙˙YEä_VP‰EĖčü˙˙˙‹EƒÄ‹PBđ+E Áø…Ā~6÷Ѝzđ‰EԐt&‰ūƒėƒīWVčü˙˙˙YXFüPFPčü˙˙˙ƒÄ;uÔuڃė˙uĐ˙u čü˙˙˙X‹E Z˙u˃ĀPčü˙˙˙‹Eä‹ģƒÄƒč 9øu‹Eāƒč 9øueô[^_]ÍUßčlëäUßčlëä‹E‹)ĮÁ˙…˙…‹} ē)ĮՉUȃė Pčü˙˙˙ƒÄ‰EĐ}Љ}ÄtƒėVWčü˙˙˙XGƒÆZVPčü˙˙˙ƒÄ‹E‹uЋ89} t/t&…ötƒėWVčü˙˙˙YXGPFPčü˙˙˙ƒÄƒĮƒÆ9} uՋM‹} F‰EĖ‰Æ‹I9ΉMÔt9t&…ötƒėWVčü˙˙˙XGZPFPčü˙˙˙ƒÄƒÆƒĮ9}ÔuՋE‹@‰EԋE‹ģ‹;MԍEā‰EĖti‰uĉÎ덴&‹ƒč 9øu=ƒÆ;uÔt?‹Fƒč 9øtå‹UĖčlëۍ?9׆˜‹} ĮEČ˙˙˙)Į¸ø˙˙˙éÖū˙˙‹UĖčl빋E‹uċ‰EԋEԅĀt ƒė Pčü˙˙˙ƒÄ‹M‹EЉq‰‹MȍȋM‰AéPū˙˙‰Æë‰Æëƒė ˙uĐčü˙˙˙‰4$čü˙˙˙‹Eāƒč ;ƒtUßčlƒė Včü˙˙˙‰Æë,ú˙˙˙‡\˙˙˙‹} )Į…Ō…1ū˙˙ĮEČĮEĐé7ū˙˙‹Aô;ƒtēUāčl밉Įë닃č ;ƒtUāčl‰øƒė Pčü˙˙˙‹E˃Ä9đ‰Įtƒė WƒĮčü˙˙˙ƒÄ9÷uíčü˙˙˙‰Æë ‰ĮëEé„ëU‹Eċƒč ;ƒtUāčlƒė Včü˙˙˙‹EЃÄ…Ātjƒė ˙uĐčü˙˙˙ƒÄčü˙˙˙‹ƒč ;ƒtUāčl‰øƒė Pčü˙˙˙‹EЃÄ9đ‰Įtƒė WƒĮčü˙˙˙ƒÄ9÷uíčü˙˙˙ƒė Pčü˙˙˙‹UЃÄ…Ōu–ƒė ˙uÄčü˙˙˙ƒÄ‹EЅĀuë‰Æë‰Æë čü˙˙˙é™ū˙˙čü˙˙˙ƒė Včü˙˙˙‹M˃Ä…Étŋ‹EĐ9EˉÆtÃė VƒÆčü˙˙˙ƒÄ9uĖuė뭉Æčü˙˙˙ƒė Včü˙˙˙ƒÄëŠUWVSčü˙˙˙Ãƒė‹t$0‹|$49>t3ƒė jčü˙˙˙ƒÄ„Āt ‹.…ít‹Eƒč ;ƒuƒė Učü˙˙˙ƒÄ‰>ƒÄ[^_]Í´&T$člëØUWVSčü˙˙˙Ãƒė‹t$0‹|$4‹L$8‹F;FtJ…Āt‹Pü‰‹FP‰VPü‹1)ú‰ŅÁų…Éu‰7ƒÄ[^_]Íļƒė)ĐRWPčü˙˙˙ƒÄëŪļ‹)ĐÁø…‰Å„9ņ߉øĮD$ü˙˙˙)Љ‰L$ ‰T$ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‹T$‰Åęt‹‰‹‰ú)‰ŅÁų…Éu~L‹V)ú‰ĐÁø…ĀuD‹<…Āt ƒė Pčü˙˙˙ƒÄ‰.l$‰~‰né@˙˙˙ļ‰øĮD$)ЉÂéw˙˙˙t&ƒėR‰T$WQ‰L$čü˙˙˙ƒÄ‹T$ ‹L$뜐´&ƒėR‰T$PUčü˙˙˙ƒÄ‹T$ég˙˙˙=˙˙˙?‡˙˙˙Áå‰l$‰ũ)Չę1í…Ā„.˙˙˙é˙˙˙UWVSčü˙˙˙Ãƒė‹t$0‹|$4‹V;VtF…Ōt‹Bü‰B‰F‹D$8‹0Bü)ø‰ÁÁų…Éu ‰7ƒÄ[^_]Ѓė)ÂPWRčü˙˙˙ƒÄëãļ‹)ÂÁú…Ō„‰ 9ƆˉúĮD$ü˙˙˙)‰T$ ƒė ˙t$čü˙˙˙‰Å‹‰ų‰D$ƒÄ‹T$ )Áęt‹D$8‹‰‰ČÁø…Āuj‹VL )ú‰ĐÁø…Āu8‹<…Āt ƒė Pčü˙˙˙ƒÄ‰.l$‰~‰néI˙˙˙f‰úĮD$)Âë€fƒėR‰T$WQ‰L$čü˙˙˙ƒÄ‹T$ ‹L$먃ėQ‰L$˙t$Učü˙˙˙ƒÄ‹L$ éx˙˙˙ų˙˙˙?‡(˙˙˙Áâ‰T$‰ú)…É…!˙˙˙‰Ņ‰D$1íé7˙˙˙UWVSčü˙˙˙Ãƒė‹t$0‹|$4‹L$8‹F;FtJ…Āt‹Pü‰‹FP‰VPü‹1)ú‰ŅÁų…Éu‰7ƒÄ[^_]Íļƒė)ĐRWPčü˙˙˙ƒÄëŪļ‹)ĐÁø…‰Å„9ņ߉øĮD$ü˙˙˙)Љ‰L$ ‰T$ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‹T$‰Åęt‹‰‹‰ú)‰ŅÁų…Éu~L‹V)ú‰ĐÁø…ĀuD‹<…Āt ƒė Pčü˙˙˙ƒÄ‰.l$‰~‰né@˙˙˙ļ‰øĮD$)ЉÂéw˙˙˙t&ƒėR‰T$WQ‰L$čü˙˙˙ƒÄ‹T$ ‹L$뜐´&ƒėR‰T$PUčü˙˙˙ƒÄ‹T$ég˙˙˙=˙˙˙?‡˙˙˙Áå‰l$‰ũ)Չę1í…Ā„.˙˙˙é˙˙˙UWVSčü˙˙˙Ãƒė‹t$0‹|$4‹L$8‹F;FtJ…Āt‹Pü‰‹FP‰VPü‹1)ú‰ŅÁų…Éu‰7ƒÄ[^_]Íļƒė)ĐRWPčü˙˙˙ƒÄëŪļ‹)ĐÁø…‰Å„9ņ߉øĮD$ü˙˙˙)Љ‰L$ ‰T$ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‹T$‰Åęt‹‰‹‰ú)‰ŅÁų…Éu~L‹V)ú‰ĐÁø…ĀuD‹<…Āt ƒė Pčü˙˙˙ƒÄ‰.l$‰~‰né@˙˙˙ļ‰øĮD$)ЉÂéw˙˙˙t&ƒėR‰T$WQ‰L$čü˙˙˙ƒÄ‹T$ ‹L$뜐´&ƒėR‰T$PUčü˙˙˙ƒÄ‹T$ég˙˙˙=˙˙˙?‡˙˙˙Áå‰l$‰ũ)Չę1í…Ā„.˙˙˙é˙˙˙WVS‹t$čü˙˙˙Ã‹|$9>t%ƒė jčü˙˙˙ƒÄ„Āt‹…Āt ƒė ‹P˙RƒÄ‰>[^_ÃU‰åWVSčü˙˙˙Ãƒė\‹M‹ƒ‹ŗƒĀ‰ëgļ‹E˃č 9đ…j‹EЃč 9đ…t‹Eԃč 9đ…~‹E؃č 9đ…ˆ‹E܃č 9đ…š‹Eāƒč 9đ…Ŧčü˙˙˙„Ā…ˇ‹Eƒė ƒx˙”ĀļĀPčü˙˙˙ƒÄ„Āu֍Eä}āƒėĮEävPWčü˙˙˙XEÆZPƒPEÜP‰E¨čü˙˙˙M؍ƒƒÄ P˙u¨Q‰MŦčü˙˙˙XEÔ˙uŦP‰E°čü˙˙˙ƒƒÄ jP˙u°čü˙˙˙UĐƒÄ W˙u°R‰U¤‰×čü˙˙˙‰<$}ĖWčü˙˙˙ƒƒÄ jPWčü˙˙˙ZEČYWP‰E´čü˙˙˙ƒƒÄ jP˙u´čü˙˙˙X˙u´čü˙˙˙‹Eȃăč 9đ„Ĩū˙˙UĮčl‹E˃č 9đ„ū˙˙´&‹U´čl‹EЃč 9đ„Žū˙˙f‰účl‹Eԃč 9đ„…ū˙˙v‹U¤čl‹E؃č 9đ„zū˙˙f‹U°čl‹E܃č 9đ„pū˙˙vŧ'‹UŦčl‹Eāƒč 9đ„^ū˙˙vŧ'‹U¨člčü˙˙˙„Ā„Lū˙˙veô[^_]ÉƋģët‰Æ‹Eȋģƒč 9øtUĮčl‹E˃č 9øtUĮčl‹EЃč 9øtUĮčl‹Eԃč 9øtUĮčl‹E؃č 9øtUĮčl‹E܃č 9øtUĮčl‹Eāƒč 9øtUĮčlƒė Včü˙˙˙él˙˙˙‰Æ‹ģéy˙˙˙‰Æë ‰Æ‹ģéz˙˙˙‹EĖ‹ģƒč 9ø„f˙˙˙UČčléY˙˙˙‰Æ‹ģé^˙˙˙‰Æë‰Æ‹ģé_˙˙˙‰Æ‹ģéd˙˙˙‹Eԋģƒč 9ø„>˙˙˙UĐčlé1˙˙˙VSčü˙˙˙Ãƒė‹t$Včü˙˙˙‰4$čü˙˙˙ƒÄ[^ÃSčü˙˙˙Ãƒė‹“‹D$ƒÂ‰Pčü˙˙˙ƒÄ[ÃVSčü˙˙˙Ãƒė‹ƒ‹t$ƒĀ‰Včü˙˙˙‰4$čü˙˙˙ƒÄ[^ÃSčü˙˙˙Ãƒė‹“‹D$ƒÂ‰Pčü˙˙˙ƒÄ[ÃVSčü˙˙˙Ãƒė‹ƒ‹t$ƒĀ‰Včü˙˙˙‰4$čü˙˙˙ƒÄ[^ÃUWVSčü˙˙˙Ãƒė‹t$0‹|$4‹L$8‹F;FtJ…Āt‹Pü‰‹FP‰VPü‹1)ú‰ŅÁų…Éu‰7ƒÄ[^_]Íļƒė)ĐRWPčü˙˙˙ƒÄëŪļ‹)ĐÁø…‰Å„9ņ߉øĮD$ü˙˙˙)Љ‰L$ ‰T$ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‹T$‰Åęt‹‰‹‰ú)‰ŅÁų…Éu~L‹V)ú‰ĐÁø…ĀuD‹<…Āt ƒė Pčü˙˙˙ƒÄ‰.l$‰~‰né@˙˙˙ļ‰øĮD$)ЉÂéw˙˙˙t&ƒėR‰T$WQ‰L$čü˙˙˙ƒÄ‹T$ ‹L$뜐´&ƒėR‰T$PUčü˙˙˙ƒÄ‹T$ég˙˙˙=˙˙˙?‡˙˙˙Áå‰l$‰ũ)Չę1í…Ā„.˙˙˙é˙˙˙U‰åWVS}äčü˙˙˙Ãƒė(Wčü˙˙˙‹E ƒÄ‹0…ötgƒė Včü˙˙˙ƒÄ P‹EäVƒĀPčü˙˙˙ƒÄƒėW˙učü˙˙˙‹UäƒÄ …Ōt$ƒė jčü˙˙˙ƒÄ„Āt‹Eä…Āt ƒė ‹P˙RƒÄ‹Eeô[^_]vƒƒėjP‹EäƒĀPčü˙˙˙뙉ÆPPjWčü˙˙˙‰4$čü˙˙˙UWVSčü˙˙˙Ãƒė‹t$0‹|$4‹L$8‹F;FtJ…Āt‹Pü‰‹FP‰VPü‹1)ú‰ŅÁų…Éu‰7ƒÄ[^_]Íļƒė)ĐRWPčü˙˙˙ƒÄëŪļ‹)ĐÁø…‰Å„9ņ߉øĮD$ü˙˙˙)Љ‰L$ ‰T$ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‹T$‰Åęt‹‰‹‰ú)‰ŅÁų…Éu~L‹V)ú‰ĐÁø…ĀuD‹<…Āt ƒė Pčü˙˙˙ƒÄ‰.l$‰~‰né@˙˙˙ļ‰øĮD$)ЉÂéw˙˙˙t&ƒėR‰T$WQ‰L$čü˙˙˙ƒÄ‹T$ ‹L$뜐´&ƒėR‰T$PUčü˙˙˙ƒÄ‹T$ég˙˙˙=˙˙˙?‡˙˙˙Áå‰l$‰ũ)Չę1í…Ā„.˙˙˙é˙˙˙UWVSčü˙˙˙Ãƒė ‹t$$‹L$(‹l$,‹‰Ī‹V)Į;Vt9Ęt(ƒėUQVčü˙˙˙‹ƒÄ‹L$ ø‰ƒÄ ‰Č[^_]t&…Ōt ‹E‰‹V‹ƒÂ‰VëŌUWVSčü˙˙˙Ãƒė,‹|$DD$‹l$@‰D$ …˙uëH´&ƒė W‰÷čü˙˙˙ƒÄ…öt.ƒė˙w Učü˙˙˙‹GƒÄ‹wƒč ;ƒt΋T$ člëÍvƒÄ,[^_]ÃUWVSčü˙˙˙Ãƒė‹D$4‹xP‰T$ …˙„¨‹D$8‰T$‹‰D$‹hô됍t&‰|$‹…˙t0‹Gƒė‰é‹pô9îFÎ)îQ˙t$ Pčü˙˙˙ƒÄ…ĀDƅĀyĖ‹ …˙uЋD$9D$ tK‹@ƒė‰é‹pô9îFÎQP˙t$čü˙˙˙‰ęƒÄ)ō…ĀD…Āx ‹D$0‹T$‰‹D$0ƒÄ[^_]´&‹D$0‹T$ ‰‹D$0ƒÄ[^_]ÂU‰åWVSčü˙˙˙Ãƒė,‹E ‹xƒĀ‰Eԅ˙„ˇ‹E‹‹Pô‰E܉Uä‰úëļ‹Bš…ĀtB‰Â‹z‹Eä‰Uā‹wô‰Á9ÆF΃ėQW˙u܉MØčü˙˙˙‹MäƒÄ‹Uā)ņ…ĀDÁ…Āxģ‹B 1ɅĀuž‰ø„ɉ׉}ā‹Uä‰Eä‹EØuFƒė‰UØP˙uÜ˙uäčü˙˙˙‹U؃Ä)օĀDƅĀˆī‹E‰8Æ@‹Eeô[^_]‹}ԍļ‹E 9x t0ƒė Wčü˙˙˙‰Á‹EƒÄ‰}ā‰Ī‹‹Pô‰E܋A‹pô‰Eä‰Đ9ÖFÆë‚‰}ā‹uā9uÔ„Ą‹E‹Vƒė‹‹rô‹xô9ū‰ųFÎ)÷QRPčü˙˙˙ƒÄ…ĀDĮ1˙…Āxzƒė jčü˙˙˙‰Æ@ƒÄƒė˙uPčü˙˙˙‰øƒÄ˙uÔļø˙uāVWčü˙˙˙‹E ƒÄƒ@‹E‰0Æ@‹Eeô[^_]ļ‹Eā…Ā…`˙˙˙1˙é˙ū˙˙ļŋëˆëƒė ŋjčü˙˙˙ƒÄ‰Æ@é|˙˙˙ƒė Pčü˙˙˙‰4$čü˙˙˙ƒÄčü˙˙˙‰Æčü˙˙˙ƒė Včü˙˙˙U‰åWVSčü˙˙˙Ãƒė‹E…Ā„¨‹E‹ģ‹‹@ü‹p9ū„ˆ1Ā€>*t šQķĻ”Āļƒė Pčü˙˙˙ƒÄ„Āt$j˙ŗ˙ŗ˙učü˙˙˙ƒÄeô[^_]Ívƒuäh{PjVčü˙˙˙ƒƒÄ j3P˙ŗčü˙˙˙‰4$čü˙˙˙ƒÄ륐t&¸ë…čü˙˙˙‰Įƒė Včü˙˙˙‰<$čü˙˙˙U‰åWV…,˙˙˙Sčü˙˙˙Ãė‰Į‰…üū˙˙…`˙˙˙P‰…$˙˙˙čü˙˙˙‹ŗÆEÔĮEĐÆEÕĮEØĮE܍F‹ŗĮEāĮE䉅`˙˙˙‹N ‹F‰Ę‰…,˙˙˙‰… ˙˙˙‰˙˙˙‰Á‹@ô‰”,˙˙˙Į…0˙˙˙X‹AôZjøPčü˙˙˙XZ‹V4˙˙˙‰˙˙˙‹zô‰•4˙˙˙‰•˙˙˙‹VΉjW‰•˙˙˙čü˙˙˙‹V‹~‹Bô‰Ŋ˙˙˙‰• ˙˙˙‹“‰ŧ,˙˙˙‹ģĮ…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙G Į…L˙˙˙Į…P˙˙˙‰…,˙˙˙G4‰…`˙˙˙G ‰…4˙˙˙B•T˙˙˙‰…8˙˙˙‰$‰•˙˙˙čü˙˙˙‹“Į…X˙˙˙YB‹“‰…8˙˙˙B •8˙˙˙‰…\˙˙˙‰•˙˙˙XR˙ĩ$˙˙˙čü˙˙˙‹E ƒÄ ˙p˙0˙ĩ˙˙˙čü˙˙˙ZY˙ĩ˙˙˙˙učü˙˙˙G ƒÄ ‰…,˙˙˙G4‰…`˙˙˙G ‰…4˙˙˙‹ƒƒĀ‰…8˙˙˙‹…\˙˙˙ƒč ;ƒ…Ÿ‹ƒƒė ˙ĩ˙˙˙ƒĀ‰…8˙˙˙čü˙˙˙‹… ˙˙˙‹ĩ˙˙˙‹˙˙˙‹@ô‰´,˙˙˙‹…˙˙˙‹ĩ˙˙˙‰…4˙˙˙‹@ô‰Œ4˙˙˙‹… ˙˙˙‰…,˙˙˙‹@ô‰´,˙˙˙‹ƒƒĀ‰…`˙˙˙X˙ĩ$˙˙˙čü˙˙˙‹EƒÄeô[^_]‰öŧ'•+˙˙˙čléQ˙˙˙‰Æë"‰ÆëC‹ ˙˙˙‰Æ‰,˙˙˙‹Qô‹˙˙˙‰Œ,˙˙˙‹ƒƒė ˙ĩ$˙˙˙ƒĀ‰…`˙˙˙čü˙˙˙‰4$čü˙˙˙ƒė ˙ĩüū˙˙čü˙˙˙‰4$čü˙˙˙‰Įë륃ė ˙ĩ˙˙˙čü˙˙˙XF‰ūZP˙ĩüū˙˙čü˙˙˙ƒÄë™UWVSčü˙˙˙Ãƒė ‹t$$‹l$(‹|$,)õ‰čÁũÁø…íŽ:ÁåõëI‰öŧ'ƒė˙vWčü˙˙˙ƒÄ…Āt]ƒė˙vWčü˙˙˙ƒÄ…ĀtRƒė˙vWčü˙˙˙ƒÄ…ĀtWƒÆ 9õtpƒė˙6Wčü˙˙˙ƒÄ…ĀuŽ‹D$ ‰0‹D$ ƒÄ [^_]vŧ'ƒÆëŨv‹D$ ƒÆ‰0‹D$ ƒÄ [^_]‹D$ ƒÆ‰0‹D$ ƒÄ [^_]‰öŧ'‹D$()čÁøƒøt8ƒøtƒøtD‹D$ ‹T$(‰‹D$ ƒÄ [^_]ƒė˙uWčü˙˙˙ƒÄ…Āt,ƒÅƒė˙uWčü˙˙˙ƒÄ…ĀtƒÅƒė˙uWčü˙˙˙ƒÄ…ĀuŠ‹D$ ‰(é.˙˙˙‹l$$ë‰UWVSčü˙˙˙Ãƒė‹|$4‹t$8)ū‰ō‰đÁúÁø…ŌŽŽ‹D$<‹(‰ĐÁāø‹uô‰D$ ë-t&‹G9pôtP‹G9pôtx‹G 9pô„”ƒĮ9|$ „¯‹9pôuЃėVUPčü˙˙˙ƒÄ…Āuž‹D$0‰8‹D$0ƒÄ[^_]ÂfƒėVUPčü˙˙˙ƒÄ…Āuž‹D$0W‰‹D$0ƒÄ[^_]´&ƒėVUPčü˙˙˙ƒÄ…Ā…r˙˙˙‹D$0W‰럍´&ƒėVUPčü˙˙˙ƒÄ…Ā…V˙˙˙‹D$0W ‰ét˙˙˙t&‹t$ ‹D$8)đÁøƒøtƒøtVƒøtF‹D$0‹L$8‰éE˙˙˙‹D$<‹‹jô‹9hôteƒÆ‹9hôu׃ėURPčü˙˙˙ƒÄ…ĀuŋD$0‰0é˙˙˙‹D$<‹‹jôëŅ‹T$<‹‹‹Hô‹jô9étƒÆ밃ėQR‰T$Pčü˙˙˙ƒÄ…Ā‹T$ uá롃ėUR‰T$Pčü˙˙˙ƒÄ…Ā‹T$ uë›‹t$4éH˙˙˙UWVSčü˙˙˙Ãƒė‹t$4‹D$8‹l$0‹|$<)đ‰ÂÁøÁú…ĀŽÁāđ‰D$ v‹…Ātƒė˙7˙pčü˙˙˙ƒÄ…Ā„ō‹F…Ātƒė˙7˙pčü˙˙˙ƒÄ…Ā„ã‹F…Ātƒė˙7˙pčü˙˙˙ƒÄ…„܋F …Ātƒė˙7˙pčü˙˙˙ƒÄ…„ѯ;t$ …x˙˙˙‹T$8)ōÁúƒút:ƒútƒútM‹D$8‰EƒÄ‰č[^_]‹…Ātƒė˙7˙pčü˙˙˙ƒÄ…ĀtCƒÆ‹…Ātƒė˙7˙pčü˙˙˙ƒÄ…Āt&ƒÆ‹…Āt­ƒė˙7˙pčü˙˙˙ƒÄ…Āu™‰öŧ'‰uƒÄ‰č[^_]ƒÆ‰č‰uƒÄ[^_]ÂļƒÆ‰uëĶƒÆ ‰uëËUWVSčü˙˙˙Ãƒė‹|$0‹D$49Įtr…˙u…Ātƒƒė Pčü˙˙˙vƒė)ø˙t$ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…i˙˙˙ƒ- ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…F˙˙˙ƒ' ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…#˙˙˙ƒ“ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…˙˙˙ƒ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…Ũū˙˙ƒ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…ēū˙˙ƒg ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…—ū˙˙ƒ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…tū˙˙ƒ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…Qū˙˙ƒ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā….ū˙˙ƒ÷ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā… ū˙˙ƒđ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…čũ˙˙ƒč ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…Åũ˙˙ƒÖ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…ĸũ˙˙ƒÅ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…ũ˙˙ƒ´ ƒė˙ŗP˙uĐčü˙˙˙ƒÄ„Ā…\ũ˙˙ƒƒėP˙uĖčü˙˙˙ƒÄ…Āu/´&‹ƒÆ‹Eäƒč ;ƒ„iũ˙˙Uãčlé\ũ˙˙ƒƒėP˙uĖčü˙˙˙ƒÄ…ĀtŋƒƒėP˙uĖčü˙˙˙ƒÄ…ĀtĻƒƒėP˙uĖčü˙˙˙ƒÄ…Āt‹EĐč0„Āuéîü˙˙‰Æ‹Eäƒč ;ƒtUãčlƒė Včü˙˙˙U‰åWVSčü˙˙˙Ãƒė,‹Eƒ8ŽŸE䞉EЍƒO ‰EĖt&‹E <ĩƒėøP˙uĐčü˙˙˙‹EäZY˙ŗ˙uĖP‰EÔčü˙˙˙ƒÄ„Ātr‹E‹9Ît‹E ‹U D8TŠv‹8ƒĀ‰xø9Đuô‹Eƒéƒî‰‹Eäƒč ;ƒ…š‹EƒÆ90y˙˙˙‹ƒ€8tčĖJeô[^_]Éöŧ'ƒ> ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…k˙˙˙ƒ- ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…H˙˙˙ƒ' ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…%˙˙˙ƒ“ ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…˙˙˙ƒ ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…ßū˙˙ƒ ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…ŧū˙˙ƒg ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…™ū˙˙ƒ ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…vū˙˙ƒ ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…Sū˙˙ƒ ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…0ū˙˙ƒ÷ ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā… ū˙˙ƒđ ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…ęũ˙˙ƒč ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…Įũ˙˙ƒÖ ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…¤ũ˙˙ƒÅ ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…ũ˙˙ƒ´ ƒė˙ŗP˙uÔčü˙˙˙ƒÄ„Ā…^ũ˙˙ƒƒėP˙uĐčü˙˙˙ƒÄ…Āu/´&‹ƒÆ‹Eäƒč ;ƒ„fũ˙˙UãčléYũ˙˙ƒƒėP˙uĐčü˙˙˙ƒÄ…ĀtŋƒƒėP˙uĐčü˙˙˙ƒÄ…ĀtĻƒƒėP˙uĐčü˙˙˙ƒÄ…Āt‹EÔč0„Āuéëü˙˙‰Æ‹Eäƒč ;ƒtUãčlƒė Včü˙˙˙U‰åWVSčü˙˙˙Ãƒė‹E…Ā„¨‹E‹ģ‹‹@ü‹p9ū„ˆ1Ā€>*t šVķĻ”Āļƒė Pčü˙˙˙ƒÄ„Āt$j˙ŗ˙ŗ˙učü˙˙˙ƒÄeô[^_]Ívƒuäh{PjVčü˙˙˙ƒƒÄ j3P˙ŗčü˙˙˙‰4$čü˙˙˙ƒÄ륐t&¸ë…čü˙˙˙‰Įƒė Včü˙˙˙‰<$čü˙˙˙UWVSčü˙˙˙Ãƒė,‹t$@‹|$DD$‹Ģ‰D$ 9ūu ë"fƒÆ9÷t‹ƒč 9čtđ‹T$ ƒÆčl9÷uįƒÄ,[^_]ÃU‰åWVSčü˙˙˙Ãƒė<‹E‹U‹@;B„ĸ…ĀtPüƒėRPčü˙˙˙‹EƒÄ‹@‹MƒĀƒė‰AEä˙uP‰EÔčü˙˙˙‹EƒÄ‹PBø+E rüÁø‰Á…Ā÷Ņ<Š~t&FøƒėƒîPVčü˙˙˙ƒÄ9ūuéƒė˙uÔ˙u čü˙˙˙‹EäƒÄƒč ;ƒueô[^_]ÍUãčlëî‹U‹)ĐÁø…Ā…į‹u š)֍‰M˃ė Pčü˙˙˙ƒÄ‰EĐuЉuČtƒė˙u˙uČčü˙˙˙ƒÄ‹E‹uЋ89} t!t&…öt ƒėWVčü˙˙˙ƒÄƒĮƒÆ9} uä‹U‹} F‰EĉƋJ9ΉMÔt)t&…öt ƒėWVčü˙˙˙ƒÄƒÆƒĮ9}Ôuä‹E‹@‰EԋE‹‹‹8;}ԍEä‰EČu ëIvƒĮ9}Ôt6‹ƒč 9Čtī‹UȉMÄčl‹MÄëߍ 9ČvY‹u ¸ü˙˙˙ĮEĖ˙˙˙?)Öé˙˙˙‹E‹‰EԋEԅĀt ƒė Pčü˙˙˙ƒÄ‹U‹EĐ‰Ņ‰‰r‹UĖ‰Aéĸū˙˙ë3ës‰ÆëIéہų˙˙˙?wŸ‹u )օÉ…Žū˙˙ĮEĖĮEĐé´ū˙˙ƒė Pčü˙˙˙ZYV˙uÄčü˙˙˙ƒÄčü˙˙˙‹Eäƒč ;ƒtUãčlƒė Včü˙˙˙‰Æé‹UЉUăė Pčü˙˙˙‹EăÄ…Āt:ƒė˙uÄ˙uĐčü˙˙˙ƒÄ‹EЅĀt ƒė Pčü˙˙˙ƒÄčü˙˙˙čü˙˙˙ƒė Včü˙˙˙ƒÄ‹Eȋƒč ;ƒtĮUäčlëŊ‰Æë(ƒė Pčü˙˙˙_XV˙uĐčü˙˙˙ƒÄčü˙˙˙čü˙˙˙‰đém˙˙˙čü˙˙˙éM˙˙˙‰Æë›U‰åWVSčü˙˙˙Ãƒė,‹“‹ƒĀƒø‰t eô[^_]Ãf‹E‹…Ō~íEäƒė˙u P‰Į‰EĐčü˙˙˙‰<$˙ŗčü˙˙˙‹EäƒÄƒč ;ƒ…"‹ŗ‹‹F9Á‰Īt:‰MˉEÔ덴&ƒĮ9}Ôt ‹ƒč ;ƒtë‹UЃĮčl9}Ôuãv‹MĖ‹E 1˙‰N‰EԍEã‰EĖ‹E‹…Āuëy‰öŧ'‹EƒĮƒEÔ98tbƒė˙uÔ˙uĐčü˙˙˙‹FƒÄ ;Fty…Ātƒė˙uĐPčü˙˙˙‹FƒÄƒĀ‰F‹Eäƒč ;ƒt¯‹U˃Įčl‹EƒEÔ98u§‰öŧ'ƒė˙u ˙učü˙˙˙ƒÄčü˙˙˙ƒė ˙p$čü˙˙˙ƒÄeô[^_]Ít&ƒė˙uĐPVčü˙˙˙ƒÄ둍UãčléŅū˙˙‰Æëëú‹Eäƒč ;ƒtUãčlƒė Včü˙˙˙U‰åWVSčü˙˙˙Ãƒė,‹“‹ƒĀƒø‰t eô[^_]Ãf‹E‹…Ō~í‹M Eä‰Į‰Eԋč|ŧƒėW˙ŗčü˙˙˙‹EäƒÄƒč ;ƒ… ‹ģ‹‹O9ȉEˉÆt5‰MĐ됍´&ƒÆ9uĐt ‹ƒč ;ƒtë‹UԃÆčl9uĐuãv‹EĖ1ö‰GEã‰EЋE‹…Āuëg´&‹EƒÆ90tV‹E ‹°‹EÔč|ŧ‹G;Gtp…Ātƒė˙uÔPčü˙˙˙‹GƒÄƒĀ‰G‹Eäƒč ;ƒtļ‹UЃÆčl‹E90uŽt&ƒė˙u ˙učü˙˙˙ƒÄčü˙˙˙ƒė ˙p$čü˙˙˙ƒÄeô[^_]Ít&ƒė˙uÔPWčü˙˙˙ƒÄ뚍Uãčléčū˙˙‰Æëëú‹Eäƒč ;ƒtUãčlƒė Včü˙˙˙UWVSčü˙˙˙Ãƒė,‹t$@‹|$DD$‹Ģ‰D$ 9ūu ë*fƒÆ 9÷t!‹Fƒč 9čtī‹T$ ƒÆ čl9÷u捴&ƒÄ,[^_]ÃU‰åWVSčü˙˙˙Ãƒė8‹E˙0čü˙˙˙ƒÄ…Āt#ƒė Pčü˙˙˙ƒĀƒÄ‰EЋEЍeô[^_]Íļƒė jčü˙˙˙‰Á‰EĖ‹ƒƒÄƒĀ‰A‰EЋE‹p+pĮAĮAĮA ‰đÁøiĀĢĒĒĒ…Ā…ÔĮEȋEȋUĖ‹MƉB‰B‰r ‹U‹q‹R9ō‰UÔ„‰Įv…˙t‹ƒė‰‹F‰GFPGPčü˙˙˙ƒÄƒĮ ƒÆ 9uÔuԋE˃ė‰xP‹E˙0čü˙˙˙ƒÄ…‰Æ„˙˙˙ƒ}ähõPjWčü˙˙˙XƒZP˙ŗčü˙˙˙Z“YRPčü˙˙˙ZYVPčü˙˙˙‰<$čü˙˙˙ƒÄéĮū˙˙=UUUw ƒė Včü˙˙˙‰EȃÄé˙˙˙‹}Čéi˙˙˙‰Æë čü˙˙˙čü˙˙˙‹EĖ‹@…Āt ƒė Pčü˙˙˙ƒÄƒė ˙uĖčü˙˙˙‰4$čü˙˙˙‰Æëëƒė Wčü˙˙˙‰4$čü˙˙˙ƒė Pčü˙˙˙Y^W˙uČčü˙˙˙ƒÄčü˙˙˙‰Æë›U‰åWVSčü˙˙˙Ãƒė<‹E‹M‹u‹@;A„Û…Āt$‹Pôƒė‰‹Pø‰PPüƒĀRPčü˙˙˙‹EƒÄ‹@‹MƒĀ ƒėƒÆ‰A‹Fø‰E܋FüV‰EāEäP‰EÔčü˙˙˙‹EƒÄ‹Prč+u Bđ‰ņ)ōÁųzđiÉĢĒĒĒ…É~#‹Pėpôƒė‰Pø‹Pđ‰PüVPčü˙˙˙ƒÄ9ū‰đuŪ‹M ‹E܃뉋Eā‰A‰Č˙uԃĀPčü˙˙˙‹EäƒÄƒč ;ƒueô[^_]ÍUÛčlëî‹M‹ )ČÁøiĀĢĒĒĒ…Ā…‹} ē)ĪR‰UĖÁāƒė Pčü˙˙˙ƒÄ‰EĐ}Љ}Čt ‹‹MȃėƒÆ‰‹Fü‰AAVPčü˙˙˙ƒÄ‹E‹uЋ89} t1t&…öt‹ƒė‰‹G‰FGPFPčü˙˙˙ƒÄƒĮ ƒÆ 9} uԋM‹} F ‰EĉƋI9ΉMÔt9t&…öt‹ƒė‰‹G‰FGPFPčü˙˙˙ƒÄƒÆ ƒĮ 9}ÔuԋE‹@‰EԋE‹‹‹8;}ԍE܉EČu ëJvƒĮ 9}Ôt7‹Gƒč 9Čtî‹UȉMÄčl‹MÄëŪ9ĐvZ‹} ¸ü˙˙˙ĮEĖUUU)Īéāū˙˙‹E‹‰EԋEԅĀt ƒė Pčü˙˙˙ƒÄ‹EĖ‹MЋ}@‰‰w‰Gélū˙˙ë3ës‰ÆëIé܁úUUUwž‹} )Ī…Ō…~ū˙˙ĮEĖĮEĐéƒū˙˙ƒė Pčü˙˙˙ZYV˙uÄčü˙˙˙ƒÄčü˙˙˙‹Eäƒč ;ƒtUÛčlƒė Včü˙˙˙‰ÆéŽ‹MЉMăė Pčü˙˙˙‹EăÄ…Āt:ƒė˙uÄ˙uĐčü˙˙˙ƒÄ‹EЅĀt ƒė Pčü˙˙˙ƒÄčü˙˙˙čü˙˙˙ƒė Včü˙˙˙ƒÄ‹Eȋ@ƒč ;ƒtƍUÜčlëŧ‰Æë(ƒė Pčü˙˙˙_XV˙uĐčü˙˙˙ƒÄčü˙˙˙čü˙˙˙‰đél˙˙˙čü˙˙˙éL˙˙˙‰ÆëšU‰åWVSčü˙˙˙Ãƒė‹}‹u čü˙˙˙‹@$}€¸t"÷Æu:ƒė W˙փčeô[^_]Éöŧ'÷Æuƒė W˙Öë܋ƒė ‹t0˙W˙ÖëÎf‹‹t0˙랃ú„̓úuzƒė uäPčü˙˙˙‹‰$˙RZ˙u‰Â‰đčü˙˙˙_XVjčü˙˙˙‹EäƒÄƒč ;ƒtUãčlčü˙˙˙ék˙˙˙‰Æë‰Æë‹Eäƒč ;ƒtUãčlčü˙˙˙ƒė Včü˙˙˙ƒė uäPčü˙˙˙Y˙u1Ō‰đčü˙˙˙XZVjčü˙˙˙‹EäƒÄƒč ;ƒtUãčlčü˙˙˙éųū˙˙‰Æë‰Æë'ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eäƒč ;ƒtUãčlčü˙˙˙ƒė Včü˙˙˙‰Æčü˙˙˙ƒė Včü˙˙˙U‰åWVSčü˙˙˙Ãƒė‹}‹u čü˙˙˙‹@$}€¸t"÷Æu:ƒė W˙փčeô[^_]Éöŧ'÷Æuƒė W˙Öë܋ƒė ‹t0˙W˙ÖëÎf‹‹t0˙랃ú„Ņƒúu|ƒė uäPčü˙˙˙‹‰$˙RZ˙u‰Â‰đčü˙˙˙_XVjčü˙˙˙‹EäƒÄƒč ;ƒtUãčlčü˙˙˙1Āéi˙˙˙‰Æë‰Æë‹Eäƒč ;ƒtUãčlčü˙˙˙ƒė Včü˙˙˙ƒė uäPčü˙˙˙Y˙u1Ō‰đčü˙˙˙XZVjčü˙˙˙‹EäƒÄƒč ;ƒtUãčlčü˙˙˙1Āéõū˙˙‰Æë‰Æë'ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eäƒč ;ƒtUãčlčü˙˙˙ƒė Včü˙˙˙‰Æčü˙˙˙ƒė Včü˙˙˙U‰åWVSčü˙˙˙Ãƒė‹}‹u čü˙˙˙‹@$}€¸t"÷Æu:ƒė W˙փčeô[^_]Éöŧ'÷Æuƒė W˙Öë܋ƒė ‹t0˙W˙ÖëÎf‹‹t0˙랃ú„̓úuzƒė uäPčü˙˙˙‹‰$˙RZ˙u‰Â‰đčü˙˙˙_XVjčü˙˙˙‹EäƒÄƒč ;ƒtUãčlčü˙˙˙ék˙˙˙‰Æë‰Æë‹Eäƒč ;ƒtUãčlčü˙˙˙ƒė Včü˙˙˙ƒė uäPčü˙˙˙Y˙u1Ō‰đčü˙˙˙XZVjčü˙˙˙‹EäƒÄƒč ;ƒtUãčlčü˙˙˙éųū˙˙‰Æë‰Æë'ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eäƒč ;ƒtUãčlčü˙˙˙ƒė Včü˙˙˙‰Æčü˙˙˙ƒė Včü˙˙˙U‰åWVSčü˙˙˙Ãƒė‹}‹u čü˙˙˙‹@$}€¸t"÷Æu:ƒė W˙փčeô[^_]Éöŧ'÷Æuƒė W˙Öë܋ƒė ‹t0˙W˙ÖëÎf‹‹t0˙랃ú„Ņƒúu|ƒė uäPčü˙˙˙‹‰$˙RZ˙u‰Â‰đčü˙˙˙_XVjčü˙˙˙‹EäƒÄƒč ;ƒtUãčlčü˙˙˙1Āéi˙˙˙‰Æë‰Æë‹Eäƒč ;ƒtUãčlčü˙˙˙ƒė Včü˙˙˙ƒė uäPčü˙˙˙Y˙u1Ō‰đčü˙˙˙XZVjčü˙˙˙‹EäƒÄƒč ;ƒtUãčlčü˙˙˙1Āéõū˙˙‰Æë‰Æë'ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eäƒč ;ƒtUãčlčü˙˙˙ƒė Včü˙˙˙‰Æčü˙˙˙ƒė Včü˙˙˙U‰åWVSčü˙˙˙Ãƒė,‹};} ‹utK…öt;‹ƒė‰GPFPčü˙˙˙YX‹G‰FG PF Pčü˙˙˙XGZPFPčü˙˙˙ƒÄƒĮƒÆ9} uļeô‰đ[^_]Ãë8‰Įë‰Įë]‹F ‹‹ƒč ‰MÔ9ČtUįčl‹Fƒč ;EÔtUįčl‰øƒė Pčü˙˙˙ƒÄ9utƒė ˙učü˙˙˙ƒEƒÄ9uuéčü˙˙˙‹ƒ‰EÔëŗ‰Æčü˙˙˙ƒė Včü˙˙˙U‰åWVSčü˙˙˙ÃƒėL‹E‹}‹p;p„‹…ötB‹Fėƒė‰FđPFPčü˙˙˙‹Fô‰FYXFøPF Pčü˙˙˙XFüZPFPčü˙˙˙‹EƒÄ‹p‹EƒÆƒė‰p‹‰EԍGPEØP‰EĀčü˙˙˙‹GY^‰E܍G PEāP‰Eŧčü˙˙˙XEäƒĮZWP‰E¸čü˙˙˙‹EƒÄ‹@HØ+M p܉Ę)ČÁúƒč$iŌÍĖĖˉEąŌ~A‹Fč~ėƒė‰FüWVčü˙˙˙X‹FđZ‰FFôPFPčü˙˙˙YXFøƒÆ PVčü˙˙˙ƒÄ;}ĉūuŋ‹EԋM ƒė‰‰Č˙uƒĀPčü˙˙˙Y‹E܋M ^‰A‰Č˙uŧƒĀ Pčü˙˙˙X‹E Z˙u¸ƒĀPčü˙˙˙‹Eä‹ģƒÄƒč 9øu‹Eāƒč 9øu‹E؃č 9øueô[^_]ÍUĶčlëڍUĶčlëڍUĶčlëڋE‹)ÖÁūiÆÍĖĖĖ…Ā…į‹u š)֍‰‰M¸Áāƒė Pčü˙˙˙ƒÄ‰EĀuĀt;‹ƒė‰GPFPčü˙˙˙YX‹G‰FG PF Pčü˙˙˙XFƒĮZWPčü˙˙˙ƒÄ‹Eƒė˙uĀ˙u ˙0čü˙˙˙x‹EƒÄ W˙p˙u čü˙˙˙‰E´‹EƒÄ‹H‹09ņ„Eԋģ‰MĉEŧë"ļ‹F ƒč 9øuQ‹Fƒč 9øu=ƒÆ9uÄtI‹Fƒč 9øtڋUŧčlëЍ 9Ȇ‹u ¸đ˙˙˙ĮE¸ĖĖĖ )Öé ˙˙˙‹Uŧčl빋UŧčlëĨ‹E‹…Ét ƒė Qčü˙˙˙ƒÄ‹M‹U‰ȉ‹M´‰H‹E¸€‚‹U‰Bémū˙˙‰EÄëëW逋F ‹ģƒč 9øtUÔčl‹Fƒč 9øtUÔčlƒė ˙uÄčü˙˙˙‹MƒÄ…ÉtMƒė ˙uĀčü˙˙˙ƒÄčü˙˙˙ƒė Pčü˙˙˙ƒÄ…˙t*‹EĀ9Į‰Æt-ƒė VƒÆčü˙˙˙ƒÄ9÷uíëƒė Pčü˙˙˙ƒÄƒė Včü˙˙˙ƒÄ‹EĀ…Āu ëŦ‰Æé ųĖĖĖ ‡Ũū˙˙‹u )օÉ…čũ˙˙ĮE¸ĮEĀéíũ˙˙‰Æë‰ÆëEԃė Pčü˙˙˙‰4$čü˙˙˙‹Eā‹ģƒč 9øtUĶčl‹E؃č 9øtUĶčlƒė Včü˙˙˙‰Eċģéįū˙˙ëV‰Æ‹ģëˉEċģëčü˙˙˙ëˋF ‹ģƒč 9øtUÔčl‹Fƒč 9øtUÔčlƒė ˙uÄčü˙˙˙‰EÄëÆƒė Pčü˙˙˙‹UƒÄ…Ō…Ÿū˙˙éįū˙˙UWVSčü˙˙˙Ãƒė8ģøŗWčü˙˙˙ƒÄ VW˙ŗčü˙˙˙XƒZjPčü˙˙˙‹“ˆƒY_jPčü˙˙˙‹“ˆ]XƒjPčü˙˙˙‹“ˆXƒZPƒPčü˙˙˙ƒÄ ‹Ģ|$#WPUčü˙˙˙ƒÄ VU‹ĢUčü˙˙˙YXƒö PƒPčü˙˙˙ƒÄ WP˙ŗčü˙˙˙ƒÄ V˙ŗUčü˙˙˙XZƒ‰D$PƒPčü˙˙˙ƒÄ WP˙ŗčü˙˙˙ƒÄ V˙ŗUčü˙˙˙YXƒjPčü˙˙˙‹‹ˆXƒZjPčü˙˙˙‹‹‰YXƒjPčü˙˙˙‹‹‰XƒZjPčü˙˙˙‹‹ˆYXƒjdPčü˙˙˙‹‹‰XƒZ˙t$Pčü˙˙˙ƒÄ WP˙ŗčü˙˙˙ƒÄ V˙ŗUčü˙˙˙YXƒjPčü˙˙˙‹‹ˆ‹‹‹ƒQ ‰T$ƒÄ ‰VPUčü˙˙˙ƒÄčü˙˙˙‹‹ƒė‰ƒ¤ PƒPčü˙˙˙ƒÄ WP˙ŗčü˙˙˙ƒÄ V˙ŗUčü˙˙˙XƒZjPčü˙˙˙‹‹ƒÄ ˆW‹ģ˙t$Wčü˙˙˙ƒÄ VWUčü˙˙˙‹ƒ‹T$ƒÄ ‰VPUčü˙˙˙‹ƒƒÄ ĮĮ@Į@VP˙ŗčü˙˙˙ƒÄ<[^_]Ãe = Y ` N B Å Î ŧ = w` Å Î ŧ = æ w` Ü ˜@ N7testing8internal26ThreadLocalValueHolderBaseEN7testing8internal26GoogleTestFailureExceptionEN7testing8internal9DeathTestEN7testing8internal16DeathTestFactoryEN7testing8internal23DefaultDeathTestFactoryEN7testing31TestPartResultReporterInterfaceEN7testing8internal24HasNewFatalFailureHelperEN7testing4TestEN7testing8TestCaseEN7testing11EnvironmentEN7testing17TestEventListenerEN7testing22EmptyTestEventListenerEN7testing8UnitTestEN7testing32ScopedFakeTestPartResultReporterEN7testing8internal27OsStackTraceGetterInterfaceEN7testing8internal18OsStackTraceGetterEN7testing8internal35DefaultGlobalTestPartResultReporterEN7testing8internal38DefaultPerThreadTestPartResultReporterEN7testing8internal12UnitTestImplEN7testing8internal17StreamingListener20AbstractSocketWriterEN7testing8internal17StreamingListener12SocketWriterEN7testing8internal17StreamingListenerEN7testing8internal27PrettyUnitTestResultPrinterEN7testing8internal17TestEventRepeaterEN7testing8internal24XmlUnitTestResultPrinterEN7testing8internal13DeathTestImplEN7testing8internal16ForkingDeathTestEN7testing8internal15NoExecDeathTestEN7testing8internal13ExecDeathTestEN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderEN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderEzD‹ $Ë$ÃŪ… Ūwa)ēē:ūRstd=%2@Ŗ'2‹1'2ŋ'2ŽÕ'2ņ'2(2‘2(2’X(2“s(2”(2•Ģ(2–Á(2—Í(2˜ķ(2™)2š9)2›d)2œ)2ž•)2 ļ)2ĄŌ)2ĸí)2¤ *2§-*2ĒR*2Ŧr*2Ž*2°¨*2ąÎ*2˛č*2ŗ+2´+2ĩ6+2ļP+2ˇ,2¸&,2šE,2ēd,2ģƒ,2ŧŽ,2ŊÉ,2ŋę,2Á-2Â%-2ÃE-2Äe-2ń-2ƚ-2Įē-2ČÚ-2Éú-2Ę.2Ë1.2ĖH.2Íf.2΅.2ĪŖ.2ĐÂ.2s‹2 Ž‹2 Ž‹WÜ3Sä3\3^ Î>U+4Y mF4_)  Î4c<  Ģä4gO ) ĩ"O0ķ( ÕōĻ8•Ļ8 Ļ8Ļ8Ļ8Ļ8 r*ŨĮŨ ŨŨŨŨ ڂl9ųl9 l9l9l9l9zĨúAúA úAúAúAúA zļéđį˜ë'%§Wė %}Íōhdá‹į‹4eqön%†į‹į‹ltú’!%Ŗį‹į‹xZĸ %Įí‹í‹đ?īđáí‹ŽÖ ŽRí‹í‹đዉ!L:ķ‹)ķ‹í‹đėg?ķ‹Mķ‹í‹đ}Íu ķ‹qķ‹đ4É~‚Ē4‹ų‹?ZP #?Ēį‹[5$Ķ%Éų‹ų‹eof(Oc?ŗG,bv?ų‹%5ŧQ%Kŧ4Éį˜6<%§W71'}Í=Īb;˙‹ŒeqA=%^ŒŒltEĐš%|ŒŒxZIM %  Œ ŒđMũ˙đē ŒŽÖQ%J ŒŪ ŒđŒ‰!UœnŒŒ ŒđėgYâAŒ&Œ Œđ}Í]` ŒJŒđÉ~aWVdŒZPeģăŒ[5ié%ĸŒŒeofm>=ŗGqéSŒ65Œ66J67d|Ā7civ5Ŋ %}8\} 1Tō8_đŽ8`æbJ8c}Ē8dƒĻL8qDJ›ĻL8sZe›Ą û8yq› %ņŌ8\Ą2Tō8_đbJ8c§Ē8d­ĻL8qÉĪŐĻL8sßęŐː û8yöŐ %‚ō p Aß h ņ!]ū Č*"Aß CSҐČ*Ą#5\Ґ %Tō y$Ŧ5 h!\ž !úĖ xņŽ zbJ {Ē |( y4Đf ˜6b ‚ šp ƒ"  #| ”$ %Eļ –h%"g —h%"q ˜j mF ›Ø ķ&žč%2&us%7ē'&˓%Bû'N9 ĩėGé(œx ŋŽõ%} ƒ ‘(_Å ÃfĒ%š   ‘) € ĮŲŗ š ã)¨P Ë>Ė Ō ã)˙ ĪĮ@å đ ãh( ŪöČ* ã(Øá âú'Č*$ 4 ãĄĄœļ%! CãX hhĄ) íaRk v ãĄ*ĄW%ŧyŠ • ãĄ+U; ˛<Č*­ ŗ ã,l€%oeČ*Į ãĄh+ĸ $1Č*đ ö א+ĸ (gČ*  ŨČ*+! ,n7ã1 7 א+NŦ 2ĩˇÃO U א+“ 6ŦXÃm s א*”­ :œ­‡  Ũ+Ä A5´hĨ ĩ אh´'*4É Kk6É Ū אhh´'+ˇ’ S2hö  אhh+V­ [É$% ) א´'( d™^I Č*´'hÚM mčˆi Č*´'hÔķ vßI‰ Č*h'%f\ Š‹ Š Č*ÃÃf\ Ž­`É Č*ĪĪf\ “ēNé Č*Č*Č*f\ —øí Č*´'´'‚  œNß %( hh*(%ÔII< Q Ũhhh*+‡%Æ3đe k Ũ-N9 ¯ééé.ũ. ēŒ ’ Ũ/ũ.%ąĸ ­ ŨĄũ.%ŠŊ Č Ũīũ.%ˇØ í Ũīhhũ.%Áũ ŨīhhĄũ.%Í'<Ũ´'hĄũ.%ÔL\Ũ´'Ąũ.%ÛlŨh'%Ą.ūR "’Ũ %0I *´.õļÁŨī0I 2özõÚåŨ´'0I =šÜõū Ũ'%0R) fÖíÃ"(Ũ0R) q‡5ĪAGא1end yÃ`fŨ1end „„lĪ…א0™š īįž¤Ũ0™š –;ÛŊÃא0ú2 ŸĨįÜâŨ0ú2 ¨ĨčÛûא0¨ņ ÔŊ2h א0 ÚXh9?א0ũ˙ ßbXhX^א2Ė"%Ū•sƒŨh'%2Ė" ú֎˜ŖŨh0Ē€ ›ShŧÂא2Ŧ%õH×âŨh2Ŧx -ØČ÷ũŨ0'Ĩ 5)Æ%א0Cö DqÁˇ5@אh0Cö U4ņĢYdŨh1at kHąˇ|‡אh1at quĢŸĒŨh0áH ĩ ōõÃÎŨī0áH žŧƒõįōŨ´'0áH ĮR|õ Ũ'%0SĖ%DŖŪõ/:Ũī0SĖ%UšõShŨīhh0SĖ%)šõ‘Ũ´'h0SĖ ˙ߊõĒĩŨ´'0SĖ%AõÎŪŨh'%2‰q -H ķūŨ'%3}Í%ō/õ!Ũī0}Í ^…ģõ:OŨīhh0}Í%=õhxŨ´'h0}Í z˛”õ‘œŨ´'0}Í Š˙éõĩÅŨh'%2 ¸ ŗ:ÚīŨÃh'%0 ¸ ãõõŨhī0 ¸ ų\8õ1KŨhīhh0 ¸%g”čõdyŨh´'h0 ¸ "kõ’ĸŨh´'0 ¸ 90žõģĐŨhh'%0 ¸ KÚÎÃéųŨÃ'%0ז dUõ"Ũhh0ז t}×Ã;FŨÃ0ז%†§Ã_oŨÃÃ0H §-BõˆŨhhī0H ŊLõļÕŨhhīhh0HÂ% õîŨhh´'h0H ęīėõ!6Ũhh´'0H ˙˛õOiŨhhh'%0H GUõ‚—ŨÃÃī0H '+õ°ĘŨÃô'h0H <˛gõãøŨÃô'0H QXŨõ+ŨÃÃh'%0H v|ÁõD^ŨÃÃČ*Č*0H €§@õw‘ŨÃô'´'0H ‹7EõĒÄŨÃÃÃÃ0H •ūAõŨ÷ŨÃÃĪĪ+v"%›é{õ)Ũhhh'%+ę%¨?&õA[Ũhh´'hlÜ ÜfÂČ*h'%Ą4`)%˜Ų‡Č*ĸh'%Ą0ėg%Ō˜hģĐאČ*hh2 %v2åđŨõ0Ŧ4 Åú´' א0y2 %'U´'(.א0$ ,Ü%“GMא0ŽÖ%āDĘhf{א´'hh0ŽÖ IŖh”¤אīh0ŽÖ XJthŊÍא´'h0ŽÖ%÷ϟhæöא'%h0lJ vO hאīh0lJ% N3h8Mא´'hh0lJ ”™hfvא´'h0lJ% !hŸא'%h0Ų5 ŗC‡h¸Čאīh0Ų5%/lŗháöא´'hh0Ų5 ҍÁhא´'h0Ų5 äŪ.h8Hא'%h0ō§ ķØShaqאīh0ō§%>ãvhŠŸא´'hh0ō§ ōūh¸Čא´'h0ō§ $Yháņא'%h0Y$ 2ēãh אīh0Y$%S§h3Hא´'hh0Y$ QCHhaqא´'h0Y$%_ž$hŠšא'%h0Ú° q/ŅhŗÃאīh0Ú°%j{÷hÜņא´'hh0Ú° Inh א´'h0Ú°%ĸœh3Cא'%h0¤q ąŧ†\lאhh0xZ Äy %…אī0xZ%“‚: %Šžאhhī0xZ%ĸâØ %×öאhhīhh0xZ%´IŸ %א´'0xZ%Ãŧà %3Hאhh´'0xZ%ĶĄj %a{אhh´'h$ 4`Š%{úPČ*ą™X´'´'´'Ąėī ËË)Č*㍚´'´'´'Ąė`Š á\1Č*š´'´'´'ĄĒÁ%ã)>’H´'Ũ´'´'ĄŸ4Į%{ŦČ*t™XČ*Č*Č*Ąg‘ ËīNČ*ĻšČ*Č*Č*ĄėĮ áKČ*ĶšČ*Č*Č*ĄÍĀ%ãė ’HČ*ŨČ*Č*ĄŲ!'%59(5ūĨņ6+O6áaâJ pĩ6Aß  ‚!]ū ("Aß h x  ‘(ː#5  ‘ %Tō y•$Ŧ5 Ļ  !\ž !8 úĖ x‚bJ {ĄĒ |­ ˇ8Đf ŧ8b ‚ĩ6šp ƒē6 #| ”=!%Eļ – %"g — %"q ˜j mF ›ņ" !&žč%2Ļ &us%7S(&˓%Bû'N9 ĩå %‘(œx ŋ?Z%–!œ!7‘(_Å Ã,%ŗ!š!7‘) € ĮŽžĖ!Ō!‘)¨P ËŦŽå!ë!‘)˙ ĪqŒū! "‘ ( ŪĶŗ( "&"‘(Øá âu2(="M"‘ːːœļ%!Ē‘q"  ː) í甄""‘ː*ĄW%ŧM­Ŗ"Ž"‘ː+U; Ūķ(Æ"Ė"‘,l€%o~(ā"‘ː +ĸ $•( ##‘+ĸ (ÔÍ('#2#‘(+! ,Īą‘J#P#‘+NŦ 2›Ü h#n#‘+“ 6L=Ü †#Œ#‘*”­ :? #Ļ#‘+Ä AËH ž#Î#‘ ´'*4É KÚĢâ#÷#‘  ´'+ˇ’ Sŧœ $$‘  +V­ [0ƒ%7$B$‘M(( döb$(M( ÚM mE#‚$(M( Ôķ vÚŋĸ$( <%f\ ŠņÄÂ$(Ü Ü f\ ŽcĮâ$(č č f\ “5F%(((f\ —h"%(M(M(‚  œ” %A%  *(%ÔæËU%j%‘   *+‡%Æķ~%„%‘-N9 ¯͟%‘.ũ. ēĨ%Ģ%‘/ũ.%ąģ%Æ%‘ːũ.%ŠÖ%á%‘+‘ũ.%ˇņ%&‘+‘  ũ.%Á&0&‘+‘  ːũ.%Í@&U&‘M( ːũ.%Ôe&u&‘M(ːũ.%Û…&š&‘ <%ː.ūR "Ģ&ļ&‘ %0I *-k1‘Ī&Ú&‘+‘0I 281‘ķ&ū&‘M(0I =Ώ1‘'"'‘<%0R) f¸>Ü ;'A'‘0R) qČ˙č Z'`'‘1end yt{Ü y''‘1end „Ę3č ˜'ž'‘0™š ąŗ!ˇ'Ŋ'‘0™š –‚´ô Ö'Ü'‘0ú2 Ÿųļ!õ'û'‘0ú2 ¨1āô ((‘0¨ņ Ô`3 3(9(‘0 ÚNŅ R(X(‘0ũ˙ ߤū q(w(‘2Ė"%_Œ(œ(‘ <%2Ė" úˇLą(ŧ(‘ 0Ē€ zú Õ(Û(‘2Ŧ%õúåđ(û(‘ 2Ŧx -w))‘0'Ĩ 5˙€%/)5)‘0Cö DÕ°Đ N)Y)‘ 0Cö U  Ä r)})‘ 1at kĩ3Đ •) )‘ 1at ûŸÄ ¸)Ã)‘ 0áH ĩęĶ1‘Ü)į)‘+‘0áH žL1‘* *‘M(0áH Įđß1‘$*/*‘<%0SĖ%DŽÄ1‘H*S*‘+‘0SĖ%UÎ.1‘l**‘+‘  0SĖ%)Ũ#1‘š*Ē*‘M( 0SĖ ˙&*1‘Ã*Î*‘M(0SĖ%X‚1‘į*÷*‘ <%2‰q -M ++‘<%3}Í%ōø)1‘/+:+‘+‘0}Í ^É11‘S+h+‘+‘  0}Í%Ųd1‘+‘+‘M( 0}Í zĨ1‘Ē+ĩ+‘M(0}Í Šā]1‘Î+Ū+‘ <%2 ¸ ŗšęķ+,‘Ü  <%0 ¸ ã_]1‘!,1,‘ +‘0 ¸ ųÂ71‘J,d,‘ +‘  0 ¸%gšš1‘},’,‘ M( 0 ¸ "D 1‘Ģ,ģ,‘ M(0 ¸ 9ž1‘Ô,é,‘  <%0 ¸ KÆĸÜ --‘Ü <%0ז d$1‘+-;-‘  0ז tŲ8Ü T-_-‘Ü 0ז%†ĘÎÜ x-ˆ-‘Ü Ü 0H §öŊ1‘Ą-ļ-‘  +‘0H Ŋ¯41‘Ī-î-‘  +‘  0HÂ%y1‘.!.‘  M( 0H ę71‘:.O.‘  M(0H LG1‘h.‚.‘   <%0H 5˙1‘›.°.‘Ü Ü +‘0H 'Ģw1‘É.ã.‘Ü Ü M( 0H <4Ž1‘ü./‘Ü Ü M(0H Q-@1‘*/D/‘Ü Ü  <%0H vÜ%1‘]/w/‘Ü Ü ((0H €Ĩ 1‘/Ē/‘Ü Ü M(M(0H ‹˧1‘Ã/Ũ/‘Ü Ü Ü Ü 0H •,˙1‘ö/0‘Ü Ü č č +v"%›TŲ1‘(0B0‘   <%+ę%¨¨1‘Z0t0‘  M( lÜ ÜPÂ(˜0 <%ː4`)%˜ú(ģ0 <%ː0ėg%Ō}Ž Ô0é0‘(  2 %Û ū0 1‘1‘0Ŧ4 Ŧ¯M("1(1‘0y2 %ĀQM(A1G1‘0$ ,^¸ `1f1‘0ŽÖ%ā˜  1”1‘M(  0ŽÖ I×ü ­1Ŋ1‘+‘ 0ŽÖ Xɛ Ö1æ1‘M( 0ŽÖ%÷ž ˙12‘<% 0lJ vCđ (282‘+‘ 0lJ% = Q2f2‘M(  0lJ ”Ŗy 22‘M( 0lJ%ŗč ¨2¸2‘<% 0Ų5 ŗ厍 Ņ2á2‘+‘ 0Ų5%/­ ú23‘M(  0Ų5 ŅRC (383‘M( 0Ų5 ä˛` Q3a3‘<% 0ō§ ķWŨ z3Š3‘+‘ 0ō§%>[ Ŗ3¸3‘M(  0ō§ á Ņ3á3‘M( 0ō§ $b­ ú3 4‘<% 0Y$ 2üO #434‘+‘ 0Y$%SC€ L4a4‘M(  0Y$ Q˙2 z4Š4‘M( 0Y$%_ī„ Ŗ4ŗ4‘<% 0Ú° qJn Ė4Ü4‘+‘ 0Ú°%j $ õ4 5‘M(  0Ú° é& #535‘M( 0Ú°%´C L5\5‘<% 0¤q ąãZ, u5…5‘  0xZ ÄW  %ž5Š5‘+‘0xZ%“#č %Â5×5‘  +‘0xZ%ĸŦŠ %đ56‘  +‘  0xZ%´  %(636‘M(0xZ%Ã× %L6a6‘  M(0xZ%Ķé %z6”6‘  M( =!Ų!<%59û5ūĨ‚66Ë, CR9>7h"!3^7 Ķ] 9[ ,˙ •P rŠ ,$ ŽĀ ú8€ ɖ€ žå€ ÷M€ õ € ĄH€ ÷¯€Ā Ū/€€ yÕ° z•Ę f<„ Ãü€€7Š!g—7 ŲÉ ą× g— §Ī ¨C ž \U€€7[đ!Ä7 ’  2 Ēe 'Ō  €€7¤ē!ĩë7 J‡ đŠ Ÿ Į€€8iā:9}€!J8:˛v!j:ĸÃ!%.}€!+818^‘;_g!>8^‘ %åđ!˙Ī6<1d!J—70‚!BžiJ8|8‡8vQJ80‚!SqYJ8 8°8vQJ8J80!vã‘ÂūÉ8Ô8vQÂū0ß !ŊÂūí8ø8vQÂūdec!9=!9>hex! 9=Öŋ!9=āđ!9 >oct!9@=ΰ!9€?Ü !9?^û!"9?+!&9?8Ē!)9?M(!,9?ÃH!/9 ?æß!39@=<á!69°=ûĄ!99J?Ž!<9=°7!N:V8=“@!Q:=i!V:=áN!Y:>app!lY:ø8>ate!oY:=nŲ!tY:>in!wY:>out!zY:=›!}Y: <>!‰Ä7>beg!Œž:Ŗ:>cur!ž:>end!’ž::Ro‘:Sd‘:T1':\…‘:eŸ‘:hš‘:iΑ8Ŗ“¸=@?ŋ];/;?;ÔL %ÚL.Չ€P;`;ÔL %ÚL3˙ŠFQx;ƒ;ÔLQ%mČG;3˙l7Q§;˛;ÔLs^3˙ÉîFQĘ;Õ;ÔL,3˙ÜlFQí;ø;ÔL%3˙ėĒQ<<ÔLā3˙õšëQ3<><ÔLu3˙āvFQV<a<ÔLm%Ų!'%59(3ōN;ļnã‘‹<›<ÔL´'Âū3¯.;ŌĖã‘ŗ<š<ÔLAput;”;Aã‘Ņ<Ü<ÔLÜ<į˜>'%3]Ę;?QŽã‘ ==ôæ_%ÔL_%3˙;i€Fã‘,=7=ÔL %3ƒ;?íã‘X=c=ôæ%ÔL%3";?!+ã‘„==ôæuÔLuBë?;?œŊã‘Ŧ=ôæ,ÔL, '¸lš>CGķpã=xhč7č7č7Cp>xh7:7:7:C‰vp!>xhÆ:Æ:Æ:Cjwp@>xhîBîBîBCˇ,p_>xhš@š@š@Cã<p~>xh/A/A/AD žpxhM‘M‘M‘ ˙)WÉ?EČč)[îB×>’HîBxhîBîBîBîBE~7)[7:?’H7:xh7:7:7:7:Eí-)[Æ:9?’HÆ:xhÆ:Æ:Æ:Æ:Erz)[š@j?’Hš@xhš@š@š@š@E4Ē)[/A›?’H/Axh/A/A/A/AFŽŊ)[M‘’HM‘xhM‘M‘M‘M‘ Fi@õ‘(I<’OA“A’)$s<œ*ŲĻAŦA’)8ú<ĻōėŋAĘA’æ(ȃ<´ķí%áAėA’’(ųH<¸ŒŊ%BB’’(_(<ŋÍ%%B0B’’( I<ÃW\%GBRB’’(W<ĮÔq%iBtB’’J÷‡<ËÆ%‡B’’1A -u<ÖYD 1AbJ<ØÉ?<ژBG-u<ÜĪBÕB%’G-u<ŪäBôB%’é‘Q%(+ā<â*âĩB CC+’(FH<æáĒB(C.C+’(–H<ꐞ1’ECKC%’(–H<ņžĩBbCmC%’ %(¨M<ųÄô1’„CŠC%’+¨M<ôĩBĸC­C%’ %+áH<z1’ÅCĐC%’ø@+.N<ab1’čCķC%’ø@+PH<˙ŪĩB DD+’ø@+pH<V0ĩB.D9D+’ø@,Cö<$,ĒBMD+’ø@˜B8ëĀD@Ęå#g^D|DŒDM %ÚL.ļ´#^D­DM %ÚLŲ!'%59(8’|E0wS"†‡JâDčDJį˜"'%0Ō"čf-‡J EEJ0rF"g;‡J,E2EJ@Ēí"ÅĀDGEREvL %.oÎ"ĪcEiEvLŲ!'%59(8„nF03maųūŠEžEŠEĢR'%<į˜§'%KF3ŠE|E×EâEĢR'%?Įē7$LGP‡˙FĢRtr1>*\FM*>¤NW#>˜O6FPĄH>ŖFQ>ĸ$FRX†>ø&‘/>ú%I_TpFÄ6ļ8?ˆ; ÷Í$š…F%Xū$š % čĻ$מF%Xū$× %7ū**ZˇF AŌ + Í*\jG%žj*ažFr*^5%E´*bĪF%bĀ*cĪF%Ss*dĪF kž*_54îŲ*g‘*ĪF"GĪF4îŲ*nW‰ūF;GūF4ņ*uúŖĪFTGĪFSņ*|X6ūFūFˇF b+`ÚG%Ë+e5%­.+f5G‡Ō+lĸG¨G5G‡Ō+pˇGĮG555I_T15I_T258!vwH1strGä>HüGH÷ß*›-oGlOwOŸ6ą6OK+ĩŸ*ģpīoG”OŸOŸ6ą6++t*ülĮoGˇOĮOŸ6¯Ką6+ŊM*Mē oGßOīOŸ6¯Ką6+÷ *l ĸKPPŸ65K5K6+*…ĀeĸK4PDPŸ65K6+Ëa*žDÉĸK\PgPŸ66+(*ŗ— {KPPŸ6ˆK{K*™O*×ŠÅŖPŽPŸ6{K+PÉ*čŧKĸKÆPÛPŸ6{K{K6+PÉ*øB4¯KķPQĨ6ˆKˆK6+N[*\›ĸK Q5QŸ6{K{K6+N[*—˝KMQbQĨ6ˆKˆK6.ŋë*˜sQyQŸ6.ŋë*šŠQšQŸ6‡6ˇ6•K.ŋë*ž°QģQŸ6Ŋ6.u*ĘĖQ×QŸ6 %0I*GØÃ6đQûQŸ6Ŋ60yô*Ō[AĻIRRĨ60R)*Ö ĸĸK3R9RŸ60R)*Ũ]¯KRRXRĨ61end*äĐMĸKqRwRŸ61end*č }¯KR–RĨ60™š*ī‚UŧK¯RĩRŸ60™š*ķrbÉKÎRÔRĨ60ú2*÷×fŧKíRķRŸ60ú2*û€§ÉK SSĨ60'Ĩ*˙nø%+S1SĨ60¨ņ*3ü KJSPSĨ60ũ˙*ÍM KiSoSĨ62 *eāY„SSŸ6Ã60vģ*Ņŗ`Z¨SŗSŸ660öa*ęqĸKĖS×SŸ660Iđ*7ķIĸKđSTŸ6¯K60–*„ī/ĸKT)TŸ6¯K6*+;*D%=THTŸ6¯K*+;*RÁ\TlTŸ6¯K¯K2ז*iI΁TŒTŸ6ĸK2ז*mH>ĄTŦTŸ6¯K0ז*_i KÅTĐTŸ662ז*'“åTõTŸ6ĸKĸK2ז*ƒ•Ŗ UUŸ6¯K¯K2ז*k0Ģ/U?UŸ6B‘B‘2Ŧx*ŠY+TUZUŸ60ŽÖ*vÄŨĸKsU~UŸ660ŽÖ*ƒ\s¯K—UĸUĨ660[Ū*  KģUÆUĨ660†%*žâ–ĸKßUęUŸ6ą60†%*ĸō›¯KVVĨ6ą60%*ĻWNĸK'V2VŸ6ą60%*ĒøT¯KKVVVĨ6ą60Nŋ**ĶËZoVzVŸ660Nŋ*IØĐZ“VžVĨ6600—*žéœ%ˇVŊVĨ62´'Ŋ0´'6ī×sĻIūĨ‡H øN*ŦtXr*ļĪF%=*î÷VbJ*¯6žE*°^)Öz*ĩëVų *ˇK6Gú—*šIWOWĢE\ú—*Ŋ^WiWĢE/W(FH*ÁâW€W†WąE(9N*ÅȎWWŖWąE(–H*ÉëסEēWĀWĢE(–H*ĐZ×$W×WâWĢE %(¨M*Ø*ˇEųW˙WĢE(¨M*ßŌ($WX!XĢE %(ȃ*į´´%8XCXąEŊE$W(_(*ëĘf%_XjXąEŊEI_Tp´' •˙*ōQZr*ūūF!=*>€XbJ*õ6žE*öB‘*øëVÖz*ũtXų *˙Q6"ĨĢ*ßXåXų6]ĨĢ*õXYų6ÄX"ĨĢ*YYų6˙6ŽX++ā* ĨŽX8Y>Y7+FH*āá˜XVY\Y7+9N*+WŖXtYzY7+–H*įB 7’Y˜Yų6+–H* ŽAšX°YģYų6 %+¨M*(ž’ 7ĶYŲYų6+¨M*/L’šXņYüYų6 %+ȃ*7Z=%ZZ77šX+_(*;,Y%FdQdÄ7Ö7.”§bdmdÄ7 %3I§ĘŨÜ7…ddÄ7Ö72}Íč ŦĨdĩdÄ7ģcĐ70R)#´‹cÎdÔdÄ70R),ÃQ—cídķdâ71end5ö“‹c eeÄ71end>ÄØ—c+e1eâ70™šGuL¯cJePeÄ70™šP|-Ŗcieoeâ70ú2Y†Ģ¯cˆeŽeÄ70ú2bpGŖc§e­eâ70¨ņŽŅĄģcÆeĖeâ70ũ˙“úHģcåeëeâ72Ė"ÉęffÄ7ģcOc0Ē€ŪFģc)f/fâ70'Ĩį Ų%HfNfâ7bŦAŋobfmfÄ7ģc0Cö Ösc†f‘fÄ7ģc0CöĐūcĒfĩfâ7ģc2ŸA ˇĘfÕfâ7ģc1at6•ųscíføfÄ7ģc1atH.ŧcggâ7ģc0’pS)6sc4g:gÄ70’p[MËcSgYgâ70ÐcV•scrgxgÄ70Ðk.c‘g—gâ70y2zđ[c°gļgÄ70y2‚åČgcĪgÕgâ72‰q‘ÁRęgõgÄ7Đ72ņ2ĩĢG hhÄ73 ¸kņ3‹c(h8hÄ7‹cĐ72 ¸0æMhbhÄ7‹cģcĐ70ז}ņ>‹c{h†hÄ7‹c0זœX¯‹cŸh¯hÄ7‹c‹c2 ĒúîÄhĪhÄ7Ü72Ŧxģh‹ähęhÄ72ØÕÁ˙hiÄ7ģcĐ7bHXáŠÆ#i3iÄ7đĐ72ĮĨÁ!™Hi]iÄ7‹cģcĐ72čÔF›-ri‚iÄ7‹cī0¸–Ž?Ŋģc›iĢiâ7ģc´'2;˙œ´#ĀiËiÄ7[c3™OP?‹cãiîiÄ7‹c3™O™‹cjjÄ7‹c‹c.”Ã0jEjxhB‘Ä7B‘B‘ģc.ŠŅędjyj’HB‘Ä7B‘B‘ė.Ÿ9—“j¨j’HB‘Ä7B‘B‘Ę7I_Tp5ūĨä_6 (6@c ˇ$šėj%cũ$š'%Ų!'%Ī;8\ĻkÚDTō8_đžE8ač7j=8bô7bJ8c˙7Ē8d8ĻL8qKkQk8ĻL8saklk8#8 û8y|k‡k8 %V—C8hlõ8iėjŅņî7ėj đ8 HÖm Ö$ OOl ėj%ž+ROl%yĐSOl%T¤TOlGÖ$Vükl/8GÖ$Zll/858)áūe` /l:l/8;8#9PCl/8 %žEM|F_lŦĶKbG%û@¤ˇkúĖnėj(GeqÆÖA8˜lžlG8(Geu~58ĩlģlM8($ykĸvlŌlØlM8G(Č|įlílG8G(ČülmG8S8vlG(Č‚m&mG8đG(Ȇ5mEmG8đS8Gē˙ŸTm_mG8 %(„:§ô%OlvmmG8đ)ņįŽ ‰”m¤mG8OlđbŪˇŦ2¸mÃmG8đI_Tpî7ūĨėjĢkÍ ÖëtÖ_mցmÖjl֞lÖģlĢk4&âî7žEãOlj=ä‡FbJå’FĒæFįGĐfé IbęëtšpëđtTōėđúĖîėjōũĨnĢnY8TōŧnĮnY8_8‰nTō/ŨnōnY8}ne8_8n.ō>ooY8k8.”§$o/oY8 %3I§AHq8GoRoY8k82}ÍčąŲgowoY8}ne80R)#%Mno–oY80R),cŸYn¯oĩow81end5ä•MnÎoÔoY81end>…ūYníoķow80™šGŊ‹qn ppY80™šPäken+p1pw80ú2YגqnJpPpY80ú2byfenipopw80¨ņŽÕÉ}nˆpŽpw80ũ˙“†}n§p­pw82Ė"ÉJ´ÂpŌpY8}nn0Ē€ŪÃ}nëpņpw80'ĨįÜ)% qqw8bŦA+Š$q/qY8}n0Cö ˙ø5nHqSqY8}n0Cö#ÁAnlqwqw8}n2ŸA A/Œq—qw8}n1at6o5n¯qēqY8}n1atHøAnŌqŨqw8}n0’pSj‰5nöqüqY80’p[~āAnrrw80Ðc-×5n4r:rY80ÐkˇAnSrYrw80y2z^nrrxrY80y2‚Kî)n‘r—rw82‰q‘iŦrˇrY8e82ņ2ĩ ĖrŌrY83 ¸kŲ@MnęrúrY8Mne82 ¸0¸s$sY8Mn}ne80ז}MéMn=sHsY8Mn0זœŋOMnasqsY8MnMn2 ĒM†s‘sY8q82ŦxģČëĻsŦsY82ØÕāÉÁsŅsY8}ne8bHXáQâåsõsY8đe82ĮĨÁĻ\ ttY8Mn}ne82čÔFˇA4tDtY8Mn80¸–ŽHį}n]tmtw8}n´'2;˙œ2/‚ttY8n3™OŦKMnĨt°tY8Mn3™O™­‰MnČtØtY8MnMnI_Tpî75ūĨėj6ã'6đÛm Zŧ4¯1uŽ4ŗæžE4´č7bJ4ĩ˙7‡Rč7 ¨É3oIuc3q Î>Jh8\vĒITō8_đžE8aĻ8j=8bŦ8bJ8c˛8Ē8d¸8ĻL8q¨uŽuĐ8ĻL8sžuÉuĐ8Ö8 û8yŲuäuĐ8 %VÎ:8hlõ8iIuŅņ3Iu Lx H3x Ö$ OŦv Iu%ž+RŦv%yĐSŦv%T¤TŦvGÖ$VYv_vâ8GÖ$Znvyvâ8č8)áūe°;Œv—vâ8î8#9P vâ8 %žEMLKŧvŦĶK2L%û@¤vúĖnIu(GeqX>ô8õvûvú8(Geuč8ww9($yü­Ķv/w5w9G(Č|DwJwú8G(ČYwdwú89ĶvG(Č‚xwƒwú8đG(Ȇ’wĸwú8đ9Gē˙Ÿąwŧwú8 %(„:§yûŦvĶwŪwú8đ)ņįŽĩÛņwxú8ŦvđbŪˇYx xú8đI_Tp3ūĨIuvyH ÖMÖŧwÖŪwÖĮvÖûvÖwv4&â3žEãŦvj=äWKbJåbKĒæmKįuLĐfé”NbęMšpëRTōėđúĖîIuōũyy 9Tōy$y 99æxTō/:yOy 9Úx99nx.ō>eypy 99.”§yŒy 9 %3I§Ų $9¤y¯y 992}Íč(ÄyÔy 9Úx90R)#xŨĒxíyķy 90R),]-ļx zz*91end5äöĒx+z1z 91end>’ļxJzPz*90™šG^8Îxizoz 90™šPĢqÂxˆzŽz*90ú2Y•Îx§z­z 90ú2b—ÂxÆzĖz*90¨ņŽ ņÚxåzëz*90ũ˙“xÚx{ {*92Ė"ÉO{/{ 9Úxnx0Ē€Ūī†ÚxH{N{*90'Ĩį'˛%g{m{*9bŦAEä{Œ{ 9Úx0Cö L)’xĨ{°{ 9Úx0Cö%ržxÉ{Ô{*9Úx2ŸA ”Pé{ô{*9Úx1at6;¤’x || 9Úx1atHXžx/|:|*9Úx0’pS T’xS|Y| 90’p[G§žxr|x|*90Ðc1`’x‘|—| 90Ðk&Ûžx°|ļ|*90y2zX’zxĪ|Õ| 90y2‚Ÿ†xî|ô|*92‰q‘)Õ }} 992ņ2ĩūO)}/} 93 ¸kÉēĒxG}W} 9Ēx92 ¸0ŗ]l}} 9ĒxÚx90ז}j1Ēxš}Ĩ} 9Ēx0זœaĒxž}Î} 9ĒxĒx2 Ērāã}î} 9$92Ŧxģŗ~ ~ 92ØÕ’™~.~ 9Úx9bHXáHáB~R~ 9đ92ĮĨÁđhg~|~ 9ĒxÚx92čÔF7‘~Ą~ 9Ēx¸80¸–Ž2Úxē~Ę~*9Úx´'2;˙œÖëß~ę~ 9zx3™O.,Ēx  9Ēx3™O™Ē Ēx%5 9ĒxĒxÚxI_Tp35ūĨIu6i6Ôú8xI-8\€ŗPTō8_đžE8al9j=8br9bJ8cx9Ē8d~9ĻL8qģÁ–9ĻL8sŅÜ–9œ9 û8yė÷–9 %V´*8hlõ8i\Ņņũ\ PŊ HF‚ Ö$ Oŋ€ \%ž+Rŋ€%yĐSŋ€%T¤Tŋ€GÖ$Vl€r€¨9GÖ$Z€Œ€¨9Ž9)áūePŸ€Ē€¨9´9#9Pŗ€¨9 %žEMURĪ€ŦĶK;S%û@¤'€úĖn\(Geq 0ē9Ā9(GeuLôŽ9%+Æ9($y‘æ€BHÆ9G(Č|W]Ā9G(ČlwĀ9Ė9æ€G(Č‚‹–Ā9đG(ȆĨĩĀ9đĖ9Gē˙ŸÄĪĀ9 %(„:§8œŋ€æņĀ9đ)ņįŽōY‚‚Ā9ŋ€đbŪˇlÚ(‚3‚Ā9đI_TpũūĨ\€s Öe‰Ö΁ÖņÖڀցÖ+€4&âũžEãŋ€j=ä`RbJåkRĒævRį~SĐféĒUbęe‰špëj‰TōėđúĖî\ōũƒƒŌ9Tō,ƒ7ƒŌ9Ø9ų‚Tō/MƒbƒŌ9í‚Ū9Ø9‚.ō>xƒƒƒŌ9ä9.”§”ƒŸƒŌ9 %3I§hņę9ˇƒÂƒŌ9ä92}Íčë…׃įƒŌ9í‚Ū90R)#¨ĶŊ‚„„Ō90R),:iɂ„%„đ91end5ŋĮŊ‚>„D„Ō91end>PÉ‚]„c„đ90™šGë°á‚|„‚„Ō90™šPâ5Ղ›„Ą„đ90ú2Yęá‚ē„Ā„Ō90ú2b˜:ՂŲ„ß„đ90¨ņŽŋ(í‚ø„ū„đ90ũ˙“=Đí‚……đ92Ė"É5o2…B…Ō9킁‚0Ē€Ū Ėí‚[…a…đ90'Ĩį$æ%z…€…đ9bŦAŋ”…Ÿ…Ō9í‚0Cö ËĨ‚¸…Ã…Ō9í‚0Cöâ{ą‚܅į…đ9í‚2ŸA kŽü…†đ9í‚1at6ŨWĨ‚†*†Ō9í‚1atHgą‚B†M†đ9í‚0’pSŗNĨ‚f†l†Ō90’p[lą‚…†‹†đ90ÐcDQĨ‚¤†Ē†Ō90Ðk¯ą‚ÆɆđ90y2zœŒ‚â†č†Ō90y2‚ŗ=™‚‡‡đ92‰q‘K‡'‡Ō9Ū92ņ2ĩuK<‡B‡Ō93 ¸k$xŊ‚Z‡j‡Ō9Ŋ‚Ū92 ¸0Õõ‡”‡Ō9Ŋ‚í‚Ū90ז}éhŊ‚­‡¸‡Ō9Ŋ‚0זœtøŊ‚҇á‡Ō9Ŋ‚Ŋ‚2 Ēč?ö‡ˆŌ9ę92ŦxģíįˆˆŌ92ØÕO¨1ˆAˆŌ9í‚Ū9bHXáČ UˆeˆŌ9đŪ92ĮĨÁ(ˆzˆˆŌ9Ŋ‚í‚Ū92čÔF 2¤ˆ´ˆŌ9Ŋ‚~90¸–ŽfPí‚͈Ũˆđ9í‚´'2;˙œlōˆũˆŌ9‚3™OĨoŊ‚‰ ‰Ō9Ŋ‚3™O™ûßŊ‚8‰H‰Ō9Ŋ‚Ŋ‚í‚Ŋ‚I_Tpũ5ūĨ\6s&6gK‚ī98\.НUTō8_đžE8a7:j=8b=:bJ8cH:Ē8dN:ĻL8q͉؉f:ĻL8sé‰ô‰f:l: û8yŠŠf: %Vģ*8hlõ8it‰Ņņ%:t‰ Ņ H^Œ Ö$ O׊ t‰%ž+R׊%yĐS׊%T¤T׊GÖ$V„ŠŠŠx:GÖ$Z™Š¤Šx:~:)áūeũˇŠÂŠx:„:#9Pˊx: %žEMQWįŠŦĶK7X%û@¤?ŠúĖnt‰(Geq^¨Š: ‹&‹:(Geu.á~:=‹C‹–:($yßfūŠZ‹`‹–:G(Č|o‹u‹:G(Č„‹‹:œ:ūŠG(Č‚Ŗ‹Ž‹:đG(ȆŊ‹Í‹:đœ:Gē˙ŸÜ‹į‹: %(„:§Ek׊ū‹ Œ:đ)ņįŽÂŖŒ,Œ:׊đbŪˇĄ=@ŒKŒ:đI_Tp%:ūĨt‰3ŠŖZ Öx“Öį‹Ö ŒÖōŠÖ&‹ÖC‹3Š4&â%:žEã׊j=ä\WbJågWĒærWįzXĐfé™Zbęx“špë}“TōėđúĖît‰ōũ-3ĸ:TōDOĸ:¨:Tō/ezĸ:Ž:¨:™Œ.ō>›ĸ:´:.”§Ŧˇĸ: %3I§›0ē:ĪÚĸ:´:2}ÍčLÍī˙ĸ:Ž:0R)#˙ՌŽŽĸ:0R),O´áŒ7Ž=ŽĀ:1end5ē•ÕŒVŽ\Žĸ:1end>˛xáŒuŽ{ŽĀ:0™šGą;ųŒ”ŽšŽĸ:0™šP“ĨíŒŗŽšŽĀ:0ú2YM~ųŒŌŽØŽĸ:0ú2b!íŒņŽ÷ŽĀ:0¨ņŽátĀ:0ũ˙“Wš/5Ā:2Ė"ÉOYJZĸ:™Œ0Ē€Ū…CsyĀ:0'Ĩį$?%’˜Ā:bŦAûŦˇĸ:0Cö b.ŊŒĐÛĸ:0Cöį#Ɍô˙Ā:2ŸA oΐĀ:1at6 kŊŒ7Bĸ:1atH“5ɌZeĀ:0’pS!sŊŒ~„ĸ:0’p[œ-ɌŖĀ:0Ðc0žŊŒŧÂĸ:0Ðkæ`ɌېáĀ:0y2zCûĨŒú‘ĸ:0y2‚&‰ąŒ‘‘Ā:2‰q‘Ų4‘?‘ĸ:Ž:2ņ2ĩęT‘Z‘ĸ:3 ¸kv_Ռr‘‚‘ĸ:ՌŽ:2 ¸0Lã—‘Ŧ‘ĸ:ՌŽ:0ז}r)ՌÅ‘Đ‘ĸ:Ռ0זœ0!Ռé‘ų‘ĸ:ՌՌ2 ljD’’ĸ:ē:2Ŧxģ!Ô.’4’ĸ:2ØÕI’Y’ĸ:Ž:bHXá0Ym’}’ĸ:đŽ:2ĮĨÁjŊ’’§’ĸ:ՌŽ:2čÔF”ŧ’Ė’ĸ:ՌN:0¸–Žž å’õ’Ā:´'2;˙œŅ ““ĸ:ĨŒ3™O×'Ռ-“8“ĸ:Ռ3™O™ˆŗÕŒP“`“ĸ:ՌՌI_Tp%:5ūĨt‰6( 6¤-cŒ]Ú8\A”¸\Tō8_đžE8aÆ:j=8bŽ'bJ8cĖ:Ē8dŌ:ĻL8qæ“ė“ę:ĻL8sü“”ę:đ: û8y”"”ę: %V G8hlõ8i‡“Ņņ %‡“ ם Hq– Ö$ Oę” ‡“%ž+Rę”%yĐSę”%T¤Tę”GÖ$V—””ü:GÖ$ZŦ”ˇ”ü:;)áūe1ųƔՔü:;#9PŪ”ü: %žEMZ^ú”ŦĶK@_%û@¤R”úĖn‡“(GeqĮ;3•9•;(Geu܄;P•V•;($y•m•s•;G(Č|‚•ˆ•;G(Č—•ĸ•; ;•G(Č‚ļ•Á•;đG(ȆЕā•;đ ;Gē˙Ÿī•ú•; %(„:§ŽÔę”––;đ)ņįŽB/–?–;ę”đbŪˇŋŽS–^–;đI_Tp %ūĨ‡“F”ųĻ ֋Öú•Ö–Ö•Ö9•ÖV•F”4&â %žEãę”j=äe^bJåp^Ēæ{^įƒ_Đféĸabꋝšp됝TōėđúĖōũ@—F—&;TōW—b—&;,;$—Tō/x——&;—2;,;Ŧ–.ō>Ŗ—Ž—&;8;.”§ŋ—Ę—&; %3I§^T>;â—í—&;8;2}Íč˜˜&;—2;0R)#b0č–+˜1˜&;0R),urô–J˜P˜D;1end5s|č–i˜o˜&;1end>Msô–ˆ˜Ž˜D;0™šG}/ —§˜­˜&;0™šPÍ0—Æ˜Ė˜D;0ú2Y„´ —å˜ë˜&;0ú2b¸p—™ ™D;0¨ņŽ™ģ—#™)™D;0ũ˙“i —B™H™D;2Ė"Éo%]™m™&;—Ŧ–0Ē€Ū —†™Œ™D;0'Ĩį7!%Ĩ™Ģ™D;bŦA-ēŋ™Ę™&;—0Cö Ø+Жã™î™&;—0CöĻįܖššD;—2ŸA  H'š2šD;—1at6îģЖJšUš&;—1atHôiܖmšxšD;—0’pS~Ж‘š—š&;0’p[‘Kܖ°šļšD;0ÐcgõЖΚ՚&;0Ðku¯ܖîšôšD;0y2zŪ#¸– ››&;0y2‚ŧĀĖ,›2›D;2‰q‘u;G›R›&;2;2ņ2ĩõg›m›&;3 ¸kŽč–…›•›&;č–2;2 ¸0u™Ē›ŋ›&;č–—2;0ז}FPč–؛ã›&;č–0זœƒ č–ü› œ&;č–č–2 Ē.<!œ,œ&;>;2ŦxģjAœGœ&;2ØÕ\Æ\œlœ&;—2;bHXáDL€œœ&;đ2;2ĮĨÁe Ĩœēœ&;č–—2;2čÔFũΜߜ&;č–Ō:0¸–Ž?/—øœD;—´'2;˙œ€(&;¸–3™OøFč–@K&;č–3™O™§Sč–cs&;č–č–—I_Tp %5ūĨ‡“6íĒ6„­v–Avc’Aw”’A{ĸ;A¸;A‚Í;Aƒã;A„ų;A†"<A‰=<A‹S<AŽn<A‰<AŠ<A’É<A˜ë<Aš÷<A› =Aœ$=AC=Ažb=A x=AĄ˜=AņŒAöØaA÷ŗ=AųÎ=Aú">Aûä=Aü>Aũ<>¨š8\&ŸöaTō8_đžE8aš@j=8bĻ@bJ8cą@Ē8dˇ@ĻL8qËžŅžĪ@ĻL8sážėžĪ@Õ@ û8yüžŸĪ@ %V/48hlõ8ilžŅņ @lž ûŨ HVĄ Ö$ OΟ lž%ž+RΟ%yĐSΟ%T¤TΟGÖ$V|Ÿ‚Ÿá@GÖ$Z‘ŸœŸá@į@)áūeŌP¯ŸēŸá@í@#9Pßá@ %žEM˜cߟŦĶK~d%û@¤7ŸúĖnlž(GeqPķ@  ų@(GeuÜį@5 ; ˙@($yQėöŸR X ˙@G(Č|g m ų@G(Č| ‡ ų@AöŸG(Č‚› Ļ ų@đG(Ȇĩ Å ų@đAGē˙ŸÔ ß ų@ %(„:§zHΟö Ąų@đ)ņįތĄ$Ąų@ΟđbŪˇmË8ĄCĄų@đI_Tp @ūĨlž+ŸT8 Öp¨Öß ÖĄÖęŸÖ Ö; +Ÿ4&â @žEãΟj=äŖcbJåŽcĒæšcįÁdĐféāfbęp¨špëu¨TōėđúĖîlžōũ%ĸ+ĸ ATō<ĸGĸ AA ĸTō/]ĸrĸ AũĄAA‘Ą.ō>ˆĸ“ĸ AA.”§¤ĸ¯ĸ A %3I§I #AĮĸŌĸ AA2}ÍčŲxįĸ÷ĸ AũĄA0R)#ÖÍĄŖŖ A0R),<ŲĄ/Ŗ5Ŗ)A1end5k9ÍĄNŖTŖ A1end>'‘ŲĄmŖsŖ)A0™šG§ÆņĄŒŖ’Ŗ A0™šP•LåĄĢŖąŖ)A0ú2YėņĄĘŖĐŖ A0ú2bõåĄéŖīŖ)A0¨ņޞ÷ũĄ¤¤)A0ũ˙“)˜ũĄ'¤-¤)A2Ė"ÉđØB¤R¤ AũĄ‘Ą0Ē€Ūä”ũĄk¤q¤)A0'ĨįΨ%Ф¤)AbŦA’Z¤¤¯¤ AũĄ0Cö ™ ĩĄȤͤ AũĄ0CöægÁĄė¤÷¤)AũĄ2ŸA ÷Š ĨĨ)AũĄ1at6īpĩĄ/Ĩ:Ĩ AũĄ1atHwÛÁĄRĨ]Ĩ)AũĄ0’pSrMĩĄvĨ|Ĩ A0’p[˛éÁĄ•Ĩ›Ĩ)A0Ðc]ĸĩĄ´ĨēĨ A0ÐkHåÁĄĶĨŲĨ)A0y2zą`ĄōĨøĨ A0y2‚ГŠĄĻĻ)A2‰q‘Ōę,Ļ7Ļ AA2ņ2ĩ…LĻRĻ A3 ¸k،ÍĄjĻzĻ AÍĄA2 ¸0ėĮĻ¤Ļ AÍĄũĄA0ז}žßÍĄŊĻČĻ AÍĄ0זœDEÍĄáĻņĻ AÍĄÍĄ2 Ē”ö§§ A#A2ŦxģjŦ&§,§ A2ØÕvëA§Q§ AũĄAbHXá2e§u§ AđA2ĮĨÁt~ЧŸ§ AÍĄũĄA2čÔFp<´§Ä§ AÍĄˇ@0¸–ŽĒĒũĄŨ§í§)AũĄ´'2;˙œû.¨ ¨ AĄ3™OWAÍĄ%¨0¨ AÍĄ3™O™ÕĐÍĄH¨X¨ AÍĄÍĄũĄI_Tp @5ūĨlž6…!’ĸa¨Ē_Ëd3¤iÁdöŅnÁdŽo4ËžEp?ËbJqJËšpyÕ¨Û¨!D/špë¨ö¨!D•¨šp„ŠŠ!D'D3Í“øS•¨)Š/Š-D3FHĄÄũš¨GŠMŠ-D39N­m ­¨eŠkŠ-D3–Hļ73DƒŠ‰Š!D3–HÂŽ5u¨ĄŠŦŠ!D %3¨MĪ:S3DÄŠĘŠ!D3¨MÛ„u¨âŠíŠ!D %3PHčĄiu¨ĒĒ-DĄ¨3áHōú¨3D(Ē3Ē!DĄ¨3pHū‰Íu¨KĒVĒ-DĄ¨0.Nßũ3DoĒzĒ!DĄ¨0CöŽš¨“ĒžĒ-DĄ¨‡RÁd[Ąhž8\gĢ˙hTō8_đžE8a/Aj=8b;AbJ8cFAĒ8dLAĻL8q ĢĢdAĻL8s"Ģ-ĢdAjA û8y=ĢHĢdA %VĘĢ8hlõ8i­ĒŅņ5A­Ē Ņ H—­ Ö$ OŦ ­Ē%ž+RŦ%yĐSŦ%T¤TŦGÖ$VŊĢÃĢvAGÖ$ZŌĢŨĢvA|A)áūe?ēđĢûĢvA‚A#9PŦvA %žEMĄj ŦŦĶK‡k%û@¤xĢúĖn­Ē(Geq“ˆAYŦ_ŦŽA(GeuF|AvŦ|Ŧ”A($y "7Ŧ“Ŧ™Ŧ”AG(Č|¨ŦŽŦŽAG(ČŊŦČŦŽAšA7ŦG(Č‚ÜŦįŦŽAđG(ȆöŦ­ŽAđšAGē˙Ÿ­ ­ŽA %(„:§Ž%Ŧ7­B­ŽAđ)ņįŽj;U­e­ŽAŦđbŪˇđÎy­„­ŽAđI_Tp5AūĨ­ĒlĢ1j Öļ´Ö ­ÖB­Ö+ŦÖ_ŦÖ|ŦlĢ4&â5AžEãŦj=äŦjbJåˇjĒæÂjįĘkĐféömbęļ´špëģ´TōėđúĖî­ĒōũfŽlŽ ATō}ވŽ AĻAJŽTō/žŽŗŽ A>ŽŦAĻAŌ­.ō>ÉŽÔŽ A˛A.”§åŽđŽ A %3I§B]¸A¯¯ A˛A2}Íč¨(¯8¯ A>ŽŦA0R)#Q.ŽQ¯W¯ A0R),ŊæŽp¯v¯žA1end5ÉŽ¯•¯ A1end>ŒąŽޝ´¯žA0™šGzo2ŽÍ¯Ķ¯ A0™šP˙å&Žė¯ō¯žA0ú2Y2Ž °° A0ú2bF&Ž*°0°žA0¨ņŽ>ŽI°O°žA0ũ˙“˛B>Žh°n°žA2Ė"ÉI˜ƒ°“° A>ŽŌ­0Ē€Ū?=>ŽŦ°˛°žA0'Ĩįm%Ë°Ņ°žAbŦA™å°đ° A>Ž0Cö  õö­ ąą A>Ž0Cö‰âŽ-ą8ąžA>Ž2ŸA ūæMąXąžA>Ž1at6Ũôö­pą{ą A>Ž1atHî—Ž“ąžąžA>Ž0’pSߊö­ˇąŊą A0’p[.RŽֹܹžA0ÐcŗXö­õąûą A0Ðk#ųޞ˛žA0y2z'†Ū­3˛9˛ A0y2‚)ę­R˛X˛žA2‰q‘MEm˛x˛ AŦA2ņ2ĩÎķ˛“˛ A3 ¸k•JŽ̞잠AŽŦA2 ¸0Áв垠AŽ>ŽŦA0ז}›xŽū˛ ŗ AŽ0זœŽ"ŗ2ŗ AŽŽ2 ĒĜGŗRŗ A¸A2ŦxģžTgŗmŗ A2ØÕØ)‚ŗ’ŗ A>ŽŦAbHXáĻŗļŗ AđŦA2ĮĨÁëËŗāŗ AŽ>ŽŦA2čÔFÕ^õŗ´ AŽLA0¸–Ž)ą>Ž´.´žA>Ž´'2;˙œwáC´N´ AŪ­3™OđŽf´q´ AŽ3™O™ –މ´™´ AŽŽ>ŽŽI_Tp5A5ūĨ­Ē6‚46Ąœ­ųą8\ĩ:pTō8_đžE8aúAj=8bBbJ8cBĒ8d BĻL8q$ĩ*ĩ$BĻL8s:ĩEĩ$B*B û8yUĩ`ĩ$B %VgJ8hlõ8iÅ´ŅņAļÅ´ iü H¯ˇ Ö$ O(ļ Å´%ž+R(ļ%yĐS(ļ%T¤T(ļGÖ$VÕĩÛĩ6BGÖ$Zęĩõĩ6Bá¸ė¸`BrB.”§ũ¸š`B %3I§˜ÖxB š+š`BrB2}Íč@Đ@šPš`BV¸lB0R)#'Ŗ&¸išoš`B0R),Ũ™2¸ˆšŽš~B1end5Ģ&¸§š­š`B1end>Mí2¸ÆšĖš~B0™šGVpJ¸åšëš`B0™šP_Œ>¸ē ē~B0ú2Y%ŒJ¸#ē)ē`B0ú2b Û>¸BēHē~B0¨ņŽÛV¸aēgē~B0ũ˙“6KV¸€ē†ē~B2Ė"Éŋ ›ēĢē`BV¸ęˇ0Ē€Ū˜FV¸ÄēĘē~B0'Ĩįã$%ãēéē~BbŦAMĄũēģ`BV¸0Cö 2¸!ģ,ģ`BV¸0CöÜp¸EģPģ~BV¸2ŸA DÅeģpģ~BV¸1at6]¸ˆģ“ģ`BV¸1atHĀļ¸Ģģļģ~BV¸0’pSÍ ¸ĪģÕģ`B0’p[´¸îģôģ~B0Ðc#¸ ŧŧ`B0Ðk寏,ŧ2ŧ~B0y2zÅøöˇKŧQŧ`B0y2‚tE¸jŧpŧ~B2‰q‘­h…ŧŧ`BlB2ņ2ĩ&šĨŧĢŧ`B3 ¸kZŋ&¸ÃŧĶŧ`B&¸lB2 ¸0U)čŧũŧ`B&¸V¸lB0ז}PČ&¸Ŋ!Ŋ`B&¸0זœHt&¸:ŊJŊ`B&¸&¸2 ĒÄ._ŊjŊ`BxB2ŦxģdÄŊ…Ŋ`B2ØÕEšŊĒŊ`BV¸lBbHXᴌžŊÎŊ`BđlB2ĮĨÁ:ãŊøŊ`B&¸V¸lB2čÔF ¯ žž`B&¸ B0¸–Ž9ņV¸6žFž~BV¸´'2;˙œ-z[žfž`Böˇ3™O u&¸~ž‰ž`B&¸3™O™R&¸Ąžąž`B&¸&¸V¸I_TpAļ5ūĨÅ´6æC6ōĩ´ˇ ã4¯ŋ‡e4ą<Ž4ŗæžE4´l9bJ4ĩx9‡Rl9 vz3o2ŋc3q Î> ŧ4ētŋ‡e4ŧ<Ž4žæžE4ŋאbJ4ĀRא åS3hŒŋc3j Î>Œ8\FĀMwTō8_đžE8aîBj=8bôBbJ8c˙BĒ8dCĻL8qëŋņŋCĻL8sĀ ĀC#C û8yĀ'ĀC %VÃŲ8hlõ8iŒŋŅņP;Œŋ —† Hv Ö$ OīĀ Œŋ%ž+RīĀ%yĐSīĀ%T¤TīĀGÖ$VœĀĸĀ/CGÖ$ZąĀŧĀ/C5C)áūe ›ĪĀÚĀ/C;C#9PãĀ/C %žEMīx˙ĀŦĶKÕy%û@¤WĀúĖnŒŋ(GeqËrAC8Á>ÁGC(GeuAP5CUÁ[ÁMC($yŦŽÁrÁxÁMCG(Č|‡ÁÁGCG(ČœÁ§ÁGCSCÁG(Č‚ģÁÆÁGCđG(ȆÕÁåÁGCđSCGē˙ŸôÁ˙ÁGC %(„:§ŋīĀÂ!ÂGCđ)ņįŽŽ:4ÂDÂGCīĀđbŪˇŠ"XÂcÂGCđI_TpP;ūĨŒŋK° ֐ÉÖ˙ÁÖ!ÂÖ ÁÖ>ÁÖ[ÁKĀ4&âP;žEãīĀj=äúxbJåyĒæyįzĐféD|bęÉšpë•ÉTōėđúĖîŒŋōũEÃKÃYCTō\ÃgÃYC_C)ÃTō/}ÒÃYCÃeC_CąÂ.ō>¨ÃŗÃYCkC.”§ÄÃĪÃYC %3I§–ęqCįÃōÃYCkC2}Íč ÄÄYCÃeC0R)#¸íÂ0Ä6ÄYC0R),ęjųÂOÄUÄwC1end5žîíÂnÄtÄYC1end>ų;ųēÄwC0™šG!5ÃŦIJÄYC0™šPsĖÃËÄŅÄwC0ú2Yh`ÃęÄđÄYC0ú2bXà ÅÅwC0¨ņŽÚ­Ã(Å.ÅwC0ũ˙“åÃGÅMÅwC2Ė"ɘ|bÅrÅYCÃąÂ0Ē€ŪíāËőÅwC0'Ĩį‘ķ%ĒŰÅwCbŦA,;ÄÅĪÅYCÃ0Cö hKÕÂčÅķÅYCÃ0Cö\ŧáÂ ÆÆwCÃ2ŸA @ã,Æ7ÆwCÃ1at6ŪÕÂOÆZÆYCÃ1atHœVáÂrÆ}ÆwCÃ0’pSˆ3Õ–ƜÆYC0’p[WęáÂĩÆģÆwC0Ðc•˙ÕÂÔÆÚÆYC0Ðk:áÂķÆųÆwC0y2zĐäŊÂĮĮYC0y2‚=fÉÂ1Į7ĮwC2‰q‘n`LĮWĮYCeC2ņ2ĩÎĄlĮrĮYC3 ¸kŸ9íŠĮšĮYCíÂeC2 ¸0¯ĮÄĮYCíÂÃeC0ז}&ÎíÂŨĮčĮYCíÂ0זœ›íÂČČYCíÂíÂ2 Ēv&Č1ČYCqC2Ŧxģ§‘FČLČYC2ØÕČaČqČYCÃeCbHXá¸×…Č•ČYCđeC2ĮĨÁėIĒČŋČYCíÂÃeC2čÔFÕÔČäČYCíÂC0¸–Ž8ŅÃũČ ÉwCô'2;˙œžQ"É-ÉYCŊÂ3™O_ÉíÂEÉPÉYCíÂ3™O™bíÂhÉxÉYCíÂíÂÃI_TpP;5ūĨŒŋ6—}6˙Ö{ Ĩ4¯ÖÉŽ4ŗæžE4´îBbJ4ĩ˙B‡RîB “3oîÉc3q Î> ՛4ē0ʇe4ŧ<Ž4žæžE4ŋ´'bJ4ƒ‡R´' ˜,3hHĘc3j Î> ´[4ēĘŽ4žæžE4ŋ;AbJ4ĀLA‡R;A 'G4¯Áʇe4ą<Ž4ŗæžE4´/AbJ4ĩFA‡R/A @R3oŲĘc3q Î> ˙K3hņĘc3j Î> ?4¯(ËŽ4ŗæžE4´š@bJ4ĩą@‡Rš@ S4Ŗ_ËŽ4§ÜdžE4¨ödbJ4Šéd‡RÁd q4vŦËexË~Ëvr—'<I_Tp @-w %¨bš@rJą@u¨‰˙8\kĖ|~Tō8_đžE8aM‘j=8b9DbJ8cDDĒ8dJDĻL8qĖĖbDĻL8s&Ė1ĖbDhD û8yAĖLĖbD %Vž8hlõ8iąËŅņČ*ąË ĶÖ H›Î Ö$ OÍ ąË%ž+RÍ%yĐSÍ%T¤TÍGÖ$VÁĖĮĖtDGÖ$ZÖĖáĖtDzD)áūeÕŅôĖ˙ĖtD€D#9PÍtD %žEM€$ÍŦĶK%û@¤|ĖúĖnąË(GeqL4†D]ÍcÍŒD(GeuŠũzDz̀Í’D($yƒ;͗͝Í’DG(Č|ŦͲÍŒDG(ČÁÍĖÍŒD˜D;ÍG(Č‚āÍëÍŒDđG(ȆúÍ ÎŒDđ˜DGē˙ŸÎ$ÎŒD %(„:§]Í;ÎFÎŒDđ)ņįŽcĪYÎiÎŒDÍđbŪˇX}ΈÎŒDđI_TpČ*ūĨąËpĖ˙  ÖĩÕÖ$ÎÖFÎÖ/ÍÖcÍրÍpĖ4&âČ*žEãÍj=ä)€bJå4€Ēæ?€įGĐféfƒbęĩÕšpëēÕTōėđúĖîąËōũjĪpĪžDTōĪŒĪžD¤DNĪTō/ĸΎĪžDBĪĒD¤DÖÎ.ō>ÍĪØĪžD°D.”§éĪôĪžD %3I§ˆļD ĐĐžD°D2}Íčšl,Đ<ĐžDBĪĒD0R)#ĪÂĪUĐ[ĐžD0R),đÔĪtĐzĐŧD1end5yéĪ“Đ™ĐžD1end>k\Ī˛Đ¸ĐŧD0™šG˛ļ6ĪŅĐ×ĐžD0™šPŠ=*ĪđĐöĐŧD0ú2Y 6ĪŅŅžD0ú2b)Ÿ*Ī.Ņ4ŅŧD0¨ņŽ_ŸBĪMŅSŅŧD0ũ˙“āZBĪlŅrŅŧD2Ė"ÉØ‡Ņ—ŅžDBĪÖÎ0Ē€Ū3VBΰŅļŅŧD0'Ĩįt\%ĪŅÕŅŧDbŦAé+éŅôŅžDBĪ0Cö ėEúÎ ŌŌžDBĪ0CöūšĪ1Ō<ŌŧDBĪ2ŸA mQŌ\ŌŧDBĪ1at6ČÛúÎtŌŌžDBĪ1atH}Ī—ŌĸŌŧDBĪ0’pS`WúÎģŌÁŌžD0’p[‡CĪÚŌāŌŧD0Ðc|÷úÎųŌ˙ŌžD0Ðkw†ĪĶĶŧD0y2z´âÎ7Ķ=ĶžD0y2‚WîÎVĶ\ĶŧD2‰q‘q3qĶ|ĶžDĒD2ņ2ĩ’%‘Ķ—ĶžD3 ¸k [ΝĶŋĶžDĪĒD2 ¸0ú°ÔĶéĶžDĪBĪĒD0ז}ĢÄĪÔ ÔžDĪ0זœđ@Ī&Ô6ÔžDĪĪ2 Ē’¯KÔVÔžDļD2Ŧxģ kÔqÔžD2ØÕʆԖԞDBĪĒDbHXáģmĒÔēÔžDđĒD2ĮĨÁ`mĪÔäÔžDĪBĪĒD2čÔFŨųÔ ÕžDĪJD0¸–ŽqBĪ"Õ2ÕŧDBĪ´'2;˙œÁ„GÕRÕžDâÎ3™OŦaĪjÕuÕžDĪ3™O™aĪÕÕžDĪĪBĪI_TpČ*5ūĨąË6åĢ6Ŗ¸ Î 2t4¯ûÕŽ4ŗæžE4´M‘bJ4ĩDD‡RM‘ ĸT3oÖc3q Î>ƒ—8\‡ÖpƒTō8_đžE8aEĻL8qNÖTÖ-EĻL8sdÖoÖ-E3E û8y{Ö-E % 6,@v¯ÖĻļŦļĄü%/@oôÖ ‡Ö+Ë=@r÷˙%ÚÖęÖũDīīI_Tp¯Ö ^Û*„[× ˇF%į*‰(E¨*Œ¨lŨ.×4×E(E¨*אK×Q× EŊ0ųÖÖW*Z äX1ú*Į*Ø Ö!:-*ɯÖ!ç*ʡF!.*Ë*Ø"_*ÍŊ×Ã×9E"_*ŌĶ×ã×9E?EEE2 *āY†ø×ū×9Ee¸ņ ØØ9E %lâ¯ÖY%*›hMoGÜ˜ÜWEiEpØ+ĩŸ*ģ|oGĩÜĀÜWEiE++t*ü4oGØÜčÜWEĐØiE+ŊM*MsyoGŨŨWEĐØiE+÷ *l<įÃØ(Ũ=ŨWEVØVØī+*…ÚŗÃØUŨeŨWEVØī+Ëa*žĨ‡ÃØ}ŨˆŨWEī+(*ŗŲĀœØ Ũ°ŨWEŠØœØ*™O*× pÄŨĪŨWEœØ+PÉ*č`rÃØįŨüŨWEœØœØī+PÉ*øzĩĐØŪ)Ū]EŠØŠØī+N[*ņmÃØAŪVŪWEœØœØī+N[*mŗĐØnۃŪ]EŠØŠØī.ŋë*˜”ŪšŪWE.ŋë*šĢŪģŪWE?EoEļØ.ŋë*žŅŪÜŪWEuE.u*ĘíŪøŪWE %0I*GÔE{EßßWEuE0yô*ŌCC¯Ö5ß;ß]E0R)*Ö°ÃØTßZßWE0R)*ŨË ĐØsßyß]E1end*ä×ÃØ’ߘßWE1end*čžĐØąßˇß]E0™š*ī“ōŨØĐßÖßWE0™š*ķMęØīßõß]E0ú2*÷Q"ŨØāāWE0ú2*ûžˇęØ-ā3ā]E0'Ĩ*˙‰Ž%LāRā]E0¨ņ*) *Økāqā]E0ũ˙*6*ØŠāā]E2 *eŦ‹Ĩā°āWE{E0vģ*Ņ\įÉāÔāWEī0öa*ę@¯ÃØíāøāWEī0Iđ*7Ā¤ÃØá!áWEĐØī0–*„NÃØ:áJáWEĐØī*+;*Dޚ^áiáWEĐØ*+;*Rˇm}ááWEĐØĐØ2ז*išĸá­áWEÃØ2ז*m ÂÂáÍáWEĐØ0ז*_ü*ØæáņáWEī2ז*4ââWEÃØÃØ2ז*ƒés+â;âWEĐØĐØ2ז*k)ČPâ`âWEאא2Ŧx*ŠVčuâ{âWE0ŽÖ*vPŦÃØ”âŸâWEī0ŽÖ*ƒrõĐØ¸âÃâ]Eī0[Ū*—d*ØÜâįâ]Eī0†%*žĘõÃØã ãWEiE0†%*ĸÉĐØ$ã/ã]EiE0%*ĻŒ:ÃØHãSãWEiE0%*ĒSVĐØlãwã]EiE0Nŋ**8„ėįã›ãWEī0Nŋ*I…ņį´ãŋã]Eī00—*žQˆ%ØãŪã]E2Ŋ0qđ×s¯ÖūĨä_ „Ú*Ŧ•år*ļĪF%=*îäbJ*¯õžE*°ŨÖz*ĩ äų *ˇEGú—*šjäpä G\ú—*ŊäŠä GPä(FH*Áj/äĄä§ä&G(9N*ŘŪ:äžäÄä&G(–H*ÉÍ,GÛäáä G(–H*Ћ4Eäøäå G %(¨M*ØÕ[,Gå å G(¨M*ßËZEä7åBå G %(ȃ*į]6%Yådå&G2GEä(_(*ëJR%€å‹å&G2GI_Tp ]Q*ōrįr*ūūF!=*>ĄåbJ*õīžE*öא*ø äÖz*ũ•åų *˙ E"ĨĢ*ææÃE]ĨĢ*æ!æÃEåå"ĨĢ*1æ<æÃEÉEĪå++ā* ŲEĪåYæ_æĪE+FH*kĨšåwæ}æĪE+9N*œÉÄ啿›æĪE+–H*uVÕEŗæšæÃE+–H* ‰UÚåҿܿÃE %+¨M*( ĄÕEôæúæÃE+¨M*/p ÚåįįÃE %+ȃ*7Ŧ%5į@įĪEÛEÚå+_(*;Pŋ%]įhįĪEÛEI_Tp6áō6% e× :š+`ėį%Ë+e ä%­.+f%G‡Ō+l´įēį8GG‡Ō+pÉįŲį8G>G#7I_T1 äI_T2%^à ^­ņšö0ZŠėzŖ0se×%Ÿū0tč‡0g4&0hNú0i¯Ö=0j¯ÖúĖ0kä_0‚ĐØĐf0ƒĐØšp0„ęØTō0†*Ø_set0Ž•č›čE`set0—ĢčģčE?E‡EIč_set0ÄĐčÛčEE0I0ŋ“Eôč˙čEE0yô0=9@1čéé™E0…0A ņ=č7é=é™E0$0EŲIčVé\é™E0R)0NĻIUčué{é™E1end0W1Uč”éšé™E0™š0`ŖÎmčŗéšé™E0ú20i…2mčŌéØé™E0'Ĩ0”‰Ų%ņé÷é™E0¨ņ0™dyčęę™E0ũ˙0žˆyč/ę5ę™E2 0­ŦJęUęE“E0 ¸0ķĮūŽėnęyęEŸE%č0 ¸0Uč—ę§ęEačŸE2ז0\œNŧęĮęEUč0ז0lΑyčāęëęEĨEč2ז0’\ÄëëEUčUč2Ŧx0y*ë0ëE0[Ū0Ģ9+yčIëTë™EĨE0ŽÖ0Ŋ@UčmëxëEĨE0ŽÖ0ÁiBač‘ëœë™EĨE0†%0Ō+8UčĩëĀëEĨE0†%0ÖSÔačŲëäë™EĨE0%0âČnUčũëėEĨE0%0æ ač!ė,ė™EĨE0Nŋ0ûęĘņįEėPėEĨE0Nŋ0˙scņįiėtė™EĨEfRĢ‚ėėE %25×s¯Ö5ūĨä_öį bß+`í%Ë+e•å%­.+f%G‡Ō+láėįėáEG‡Ō+pöėíáEįE#7I_T1•åI_T2%ëV•å ŋđ4¯ZíŽ4ŗæžE4´Ļ8bJ4ĩ˛8‡RĻ8 ô>4ē‘íŽ4žæžE4ŋŦ8bJ48‡RŦ8 lÅ4ēČíŽ4žæžE4ŋ=:bJ4ĀN:‡R=: Nl4¯˙íŽ4ŗæžE4´7:bJ4ĩH:‡R7: ZH4¯6îŽ4ŗæžE4´Æ:bJ4ĩĖ:‡RÆ: K˙4ēmîŽ4žæžE4ŋôBbJ4ĀC‡RôB M”4¯¤îŽ4ŗæžE4´úAbJ4ĩB‡RúA į4ēÛîŽ4žæžE4ŋĻ@bJ4Ž@‡RĻ@ I”4¯īŽ4ŗæžE4´ŨbJ4ĩõ‡RŨ ä ~Æ@i6ī’G´'Ąü´'ãË@:™ī ī+Ë=@>ÉD6aīlīDG6+Ë=@B‰6„īīDG6I_Tp´'6ī I4ŖĘī‡e4Ĩ™SŽ4§ĻS‡R~S f4Ŗöī‡e4ĨÉBŽ4§ÖB‡RŽB 5Č4Ŗ"đ‡e4ĨåkŽ4§ōk‡RĘk H8 Rđ×8Ąö[Hđ”7”7ūĨä_ ō@iqđ’GĄüŠ„@:Ôđ Rđ+Ë=@>Åđõœđ§đ`Gõ+Ë=@BE īŋđĘđ`GīI_Tpqđ Öj`^ņC†ĀdņxhĻ8Ļ8Ļ8Cd#ņxhl9l9l9CqdBņxhúAúAúADdedxhŨŨŨbŽ3‹…ņg3{ņ Î>I_TpĻ8 Ō*4ŅÉņöŅ4ĶĻ84/E4ÔōđņĩņĻ8‡RĻ8Y E%”(3‹đņg3æņ Î>I_Tpl9 j(4Ņ4ōöŅ4Ķl94/E4Ôbūüņ ōl9‡Rl9Y E% 4ē`ō‡e4ŧ<Ž4žæ‡RB‘ ژ)@ŌķE×L)Dl9ō’Hl9xhl9l9l9l9Eb )DŨÎō’HŽBxhŨŽBŽBŨEŪ)DŨ˙ō’HB‘xhŨB‘B‘ŨEË)DŨ0ķ’HŨxhŨŨŨŨE"å)DúAaķ’H$uxhúA$u$uúAES^)DúA’ķ’HúAxhúAúAúAúA4ëy)D[Ļ8Įķ’HĻ8xhĻ8Ļ8Ļ8Ļ8Y8^%’•3‹ųķg3īķ Î>I_Tp7: ‘R4Ņ=ôöŅ4Ķ7:4/E4ԚÕô)ô7:‡R7:Y E%UŲ3‹dôg3Zô Î>I_TpÆ: Ž4ҍôöŅ4ĶÆ:4/E4ÔzŠpô”ôÆ:‡RÆ:Y E%˛R3‹Īôg3Åô Î>I_TpîB <Ö4ŅõöŅ4ĶîB4/E4ÔÖNÛô˙ôîB‡RîBY E%ÉŖ3‹:õg30õ Î>I_Tpz C°4Ņ~õöŅ4Ķz4/E4ÔÚ"Fõjõz‡RzY E%f•3‹Ĩõg3›õ Î>I_Tpš@ °°4ŅéõöŅ4͚@4/E4ÔîūąõÕõš@‡Rš@Y E%8*3‹ög3ö Î>I_TpúA ×X4ŅTööŅ4ĶúA4/E4Ôļģö@öúA‡RúAY E%ė3‹{ög3qö Î>I_Tp/A \a4ŅŋööŅ4Ķ/A4/E4Ô¨H‡öĢö/A‡R/AY E%Û3‹æög3Üö Î>I_TpM‘ zÃ4Ņ*÷öŅ4ĶM‘4/E4ÔBōö÷M‘‡RM‘Y E%TR3‹Q÷g3G÷ Î>I_TpŨ üc4Ņ•÷öŅ4ĶŨ4/E4ÔH]÷÷Ũ‡RŨY E% ¸;4¯×÷‡e4ą<Ž4ŗæžE4´Č*bJ4ĩ}‡RČ* á4ēøŽ4žæžE4ŋBbJ4Ā B‡RB ų3h&øc3j Î>Š+33Møg35Cø Î>I_TpĻ8ĩ{33tøg35jø Î>I_Tpl9D_33›øg35‘ø Î>I_Tp7:ę33Âøg35¸ø Î>I_TpÆ:8;33éøg35ßø Î>I_TpîB¨3:ųg3=ų Î>I_Tpz P4ŲTųöŅ4Û3z4/E4Ü&ų@ųz‡RzY E%Åė33{ųg35qų Î>I_Tpš@¸33ĸųg35˜ų Î>I_TpúAx33Éųg35ŋų Î>I_Tp/AŖ33đųg35æų Î>I_TpM‘|˜33úg35 ú Î>I_TpŨîb5û —G97:MúI_Tp%:=:=:7: Šf9Æ:vúI_Tp %Ž'Ž'Æ: :h9îBŸúI_TpP;ôBôBîB D9š@ČúI_Tp @Ļ@Ļ@š@ MÎ9/AņúI_Tp5A;A;A/AŠĘ9M‘I_TpČ*9D9DM‘)mü  qîBMûI_TpP;ôBôBîB \Pq7:vûI_Tp%:=:=:7: K$qÆ:ŸûI_Tp %Ž'Ž'Æ: 5qš@ČûI_Tp @Ļ@Ļ@š@ ŅŲq/AņûI_Tp5A;A;A/A<ÉqM‘I_TpČ*9D9DM‘ß3‹>üg34ü Î>I_Tp7’¯ 33eüg35[ü Î>I_Tp7’ŪF33Œüg35‚ü Î>I_Tp˜B6.86M<8$íÔũ3.* ƒĘ—V8ˇüŊüGJUŖ –üĶüŪüĨL %b;L —)%ōüũüĨLV80Î l?õũũũGJᘠK'%.Îų Æ9ũ?ũĨL03m ģÕũXũcũGJ'%0Î €ž*ũ|ũ‡ũĨLũŲ!'%59(bŦxB)øL­ũ¸ũĨLV8h:õB~ÁĐČũĨLvL–üĀDEßL!OĪ6øũĪ6Ī6EÚ”ĒxhÆ:I_Tp %Æ:Æ:ö:C7zÉxhîBîBîBC3a”öxhîBI_TpP;îBîB)C ũæ Ļ •(Ã$D|šä •D|D| •CŽ zGxhš@š@š@Cœ;”txhš@I_Tp @š@š@Û@C@[z“xh/A/A/ACÍō”Āxh/AI_Tp5A/A/ApA 6 Ļh˜ōÃ$āfšäh˜āfāfh˜ l$%‡RÁd'D'D ļ0%:‡RÁd'D'DC÷CzYxhM‘M‘M‘C6Ŧ”†xhM‘I_TpČ*M‘M‘nDEͲ8…%ŠI_Tp'%ĄĄEæŧ'/Ļ8ĮI_Tp3˛8CJŗ\áI_Tp3Ļ8CŌJzxhĻ8Ļ8Ļ8Cō´”-xhĻ8I_Tp3Ļ8Ļ8Ü8E÷‡'/l9KI_Tpũx9C_C\eI_Tpũl9CŸšz„xhl9l9l9CÃĄ”ąxhl9I_Tpũl9l9ĸ9E(C'/ŨĪI_TpõC”ë\éI_TpŨC` zxhŨŨŨCE>”5xhŨI_TpŨŨ”7C‚ļO]I_T1I_T2ŨīEŠ)kŨŽ’HŽBxhŨŽBŽBŨ ”")ŨÎ’HŽBxhŨI_TpŽBŽBŨ”7EåÛ ŸŽB˙‡RŽBÍĻ/ŽBŽBĻ/E;4ÉúÉÖ%´'6E°n.ZĘE§Ä´'´'´'<EBq.rĘh’H´'´'´' ›Ŗ‘ņ‡‡RĻ8Ļ8  IĻ8ÃY {%Ļ8 Ļ8Ļ8Ļ8Ļ8 p!‘ņâ‡RĻ8Ļ8 Ĩę[Ļ8Y {%Ļ8 Ļ8Ļ8Ļ8Ļ8EļŲ'ĻÃI_Tp %Ė:Ė:C=OëI_T1I_T2´'Ũ6Eˆ)kŨ’HB‘xhŨB‘B‘Ũ Ļ)Ũ\’HB‘xhŨI_TpB‘B‘Ũ”7EV.rKō’HB‘B‘B‘ ā“ŽîBģY {%I_IIîBI_OIîBîBîBîB ęČîBíI_IIîBI_OIîBîBîBîBEEå)kîB’HîBxhîBîBîBîB ļÚ)îB^’HîBxhîBI_TpP;îBîBîB)C `Ē)'îBž’HîBxhîBĶŒŋîBîBîB)C änvîBНîB îBîBîBîBEŊą)kúA’H$uxhúA$u$uúA 3æ)úAA’H$uxhúAI_TpAļ$u$uúA0B c Ļh˜sÃ$u¨šäh˜u¨u¨h˜ .´7:¯Y {%I_II7:I_OI7:7:7:7: ëŽ7:ëY {%I_II7:I_OI7:7:7:7: ņĪČ7:I_II7:I_OI7:7:7:7:E*ī)k7:N’H7:xh7:7:7:7: ”6)7:Ž’H7:xh7:I_Tp%:7:7:7:r: ?Ą)'7:Î’H7:xh7:Ķt‰7:7:7:r: ēĩv7:7: 7:7:7:7: Š,Æ:<Y {%I_IIÆ:I_OIÆ:Æ:Æ:Æ: 1ŽÆ:xY {%I_IIÆ:I_OIÆ:Æ:Æ:Æ: ƒõČÆ:ĒI_IIÆ:I_OIÆ:Æ:Æ:Æ:Eđ)kÆ:Û’HÆ:xhÆ:Æ:Æ:Æ: Ņú)Æ:’HÆ:xhÆ:I_Tp %Æ:Æ:Æ:ö: aL)'Æ:[’HÆ:xhÆ:͇“Æ:Æ:Æ:ö: mevÆ:Æ: Æ:Æ:Æ:Æ: gûš@ÉY {%I_IIš@I_OIš@š@š@š@  kŽš@Y {%I_IIš@I_OIš@š@š@š@ ÄVČš@7I_IIš@I_OIš@š@š@š@E˸)kš@h’Hš@xhš@š@š@š@ Ŧã)š@¨’Hš@xhš@I_Tp @š@š@š@Û@ đĄ)'š@č’Hš@xhš@Ķlžš@š@š@Û@ gvš@š@ š@š@š@š@ 각/AVY {%I_II/AI_OI/A/A/A/A ŖsŽ/A’Y {%I_II/AI_OI/A/A/A/A ‰(Č/AÄI_II/AI_OI/A/A/A/AEōb)k/Aõ’H/Axh/A/A/A/A E)/A5’H/Axh/AI_Tp5A/A/A/ApA ‰Ÿ)'/Au’H/Axh/AĶ­Ē/A/A/ApA S0v/A§/A /A/A/A/A žžM‘ãY {%I_IIM‘I_OIM‘M‘M‘M‘ ôŽM‘Y {%I_IIM‘I_OIM‘M‘M‘M‘ @ČM‘QI_IIM‘I_OIM‘M‘M‘M‘E‡í)kM‘‚’HM‘xhM‘M‘M‘M‘ |u)M‘Â’HM‘xhM‘I_TpČ*M‘M‘M‘nD œV)'M‘ ’HM‘xhM‘ĶąËM‘M‘M‘nD 'kvM‘4 M‘ M‘M‘M‘M‘ø1?—ÚG :˛ u u Ų!'%9(ūĨņ' ˜4㑝 Ų!'%9(ã‘8Ų!.x#>ˇ Į Æ× %ÚLU+˙#; Ũ í Æ× %ÚLŲ!'%59(jhex!­X‘!X‘ æß!kX‘,!X‘:˛%´m”f!Ų!'%9(ūĨņ´'ī:˛ P ÄH !Ų!'%9(ūĨņīī :˛ … Ö!Ų!'%9(ūĨņī'%4.… p7Ė~S"§Ä~SÍ/~S~S/< Ͳ Đ †4"Ų!'%īī4åÛ p+ ŽBn"§ÄŽBÍĻ/ŽBŽBĻ/<4Ė p•ˆĘk¨"§ÄĘkÍ 0ĘkĘk 0< K^ ĶĘkÚ"Ã$ĘkÍÎĘkĘkÎEĖ ŸĘk #‡RĘkÍ 0ĘkĘk 0 đŽ ģŽB=#Ã$ŽBI_TpŽBŽBī ØvŨo#Ũ ŨŨŨŨ ų6 Ķ~SĄ#Ã$~SÍ#ĩ~S~S#ĩE.… Ÿ~SŌ#‡R~SÍ/~S~S/‘ü ÜvĻ8 $Ļ8 Ļ8Ļ8Ļ8Ļ8kMĻ7eÅP$Ūk×P1>ĘÍaFl’S1Jô7đÁ­DNōwR$´'m4U EL*Z㑇$Ų!'%9(ã‘´'Âūãn† D8W?4¸(*ĻĶ"5°$5ąb*N[9Õ$%55„ z^D?Į§ę$´'4ļD*Ŗ"\5%5nŲD4ã­%|& %ointlvv’áb™¯="l 3aŪ Ę$ŧgF0†% zÚ”Gõ'%—“Gö %%öGûČ*%7ØGüČ*%‡GũČ* %ĄnGūČ*%ĖÎG˙Č*!įRGČ*!^GČ*!1GČ* !iSGČ*$!ŠGČ*(!ãQGČ*,!ØbGj“0!/îG p“4!ÁgG  %8!ļ’G %J]I't'%‘'u‘'t<ßĻJ^='[tJj˜'v%vē''% –-J„1'Õ' % Ĩ‹Jé1'ë'ë'v' Ų=J((( %ë'v<% €RJ÷1'2(<%ë' čRJ  %M(M(ë'vS(<% ÕåJK %s(ë' % … JR %(ë'M(m h1J{ %Ģ(ë'M(m ŗJę1'Á(ë'w[eJđ1' A J&'í(´'&'í(vŖ' ™‘Jm&')(´'&'í( a Ji %.).)v4)Ŗ' 0‡J˜&'^)(^)&'í(v´' ZwJø1')<%ë' šYJū1'•)<% @ J\ %ļ)(&'M(m ĒâJ… %Ō)M(M(m CžJ1'í)1'ë' ŪJd % *ë'M(' ­Ją %-*ë'M(' ôxJq %R*(&'M(' íJŊ %r*M(M(' cAJl %*M(' ÁĻJš %¨*M(' ŸxJr&'Č*Č*<%í(v'%E8ŊJ›(č*(M(EææJŖ %+M(M(E:…JĀ %+M(M(EųđJ“(6+(M(E˛âJü&'P+M(M( YXJW&'u+(&'M(u+v{+€+xtm,K…,%9@K‡ %%.Kˆ %%H?K‰ %%úüKŠ % %ŠBK‹ %%ĢNKŒ %%|SK %%(YKŽ %%K % %…0K’X%$%1ÖK“´'( xJ&'&,M(EEKJž(E,(M(&'EĖqJĻ %d,M(M(&'EHJ–(ƒ,(M(&' QKJž&'¨,Č*¨,&'í(vM( ęJ&'É,M(M( g#JÂ%ä,M(ä,v( šĐJÉm%-M(ä, !ŅJ(%-(M(ä, (ŅJÔX%E-M(ä, % <_JŲ_%e-M(ä, %E;đJÄ&'„-(M(&' ŊQJŠ %š-1' Ô%JE %ē-M(M(&' Õ¯JI(Ú-(M(&' IwJN(ú-(M(&' ŧpJR(.(<%&' )JY %1.M(m }JJ‚ %H.M(m4רJāרM(f.M(<%JM(….M(M(4dÜJędÜM(Ŗ.M(<%›÷J›÷M(Â.M(M(—J<—M(æ.M(<%&'ygą2ōs‹2øs‹2Ž‹2Ž‹yBŌ-$ũ0 f-ÜĻ/%Îŋ-Ū#ĩG#´-ā:/E/!F#ĩzM-æ%a/l/‡R~S!F~Se#´y/„/!F›eę‘/œ/!F %Í#ĩ Œ-´ 0%ņ-ļ'FGē-¸Í/Ø/,Fīzŗ€-ž%ô/˙/‡RŽB,FŽBūx' Áũ-ܜ0%Îŋ-ŪÎG#´-ā00;0ũFÎe#´H0S0ũFU™eę`0k0ũF %z-æ%‡0’0‡RĘkũFĘkÍÎ/ 0E(Q-ÄĻ/Ä0ūx' īEm)-ė 0â0ÍÎÎFō-ė/Í#ĩ#ĩ ,đ -æ'L :œ2Tō =đžE ?Č*j= @´'bJ A}Ē Bƒlo Oc1i1‰lo Qy1„1‰  V”1Ÿ1‰ %3Ö2 YØ%#1ˇ1Â1•;13Ö2 ]ø]/1Ú1å1•G13čQ cQ¸#1ũ1 2‰1ub4F m¨U!212‰#113ũ˙ qšÁ1I2O2•báŪ ęÃc2s2‰#1ƒb…k …\‘‡2’2‰#1I_Tp'% 1 Đ :24Tō =đžE ?(j= @M(bJ A§Ē B­lo Oų2˙2ŗlo Q33ŗš  V*353ŗ %3Ö2 YÕ6š2M3X3ŋŅ23Ö2 ]5Å2p3{3ŋŨ23čQ cĘ)š2“3Ŗ3ŗ­2ub4F m*ƒˇ3Į3ŗš2­23ũ˙ q§+­2ß3å3ŋbáŪ ÷ũų3 4ŗš2­b…k …ĻĄ4(4ŗš2I_Tp<%Ą2 Œ’L7y4&˜;L:%&Ė#L;%&9L?%&žvL@%ūx %WâÄŘ6Zô˛ČČ*<ŽĐŦ÷ĻC88šCŗ60PH ¤ ˜628=8 Cŗ60.N$ĻCV8a8šCŗ60pHtn˜6z8…8 Cŗ60ÍRļ6ž8¤8 C‡R´'#N6˛‹6É ,L79&˜;L:S‘&Ė#L;S‘&9L?%&žvL@%ūx_% gęL7E9&˜;L:ē'&Ė#L;ē'&9L?%&žvL@%ūx'% Ë L7‡9&˜;L:”&Ė#L;”&9L?%&žvL@%ūxC%ˆT :;Tō =đžE ?^)j= @B‘bJ A6Ē B6lo Oß9å9!6lo Qõ9:!6'6  V::!6 %3Ö2 Y`cŸ93:>:-6ˇ93Ö2 ]B÷Ģ9V:a:-6Ã93čQ c\@Ÿ9y:‰:!6“9ub4F m:Q:­:!6Ÿ9“93ũ˙ qž0“9Å:Ë:-6báŪ xŅß:ī:!6Ÿ96b…k …‹;;!6Ÿ9I_Tp´'‡9 ēcM_ <žEMŦĻHTōMąšH4čQMĩ¤Ģ);];?64;4FM¸ĖĨ|;?6);4;…kMŋģí–;?6);4ũ˙MÂÕ54;¯;964húMÅåq96Č;96d,MĮdŌâ;?6?6 ũMĪ<lõMĐII_TpđIūĨ‡Húá :ž=Tō =đžE ?K6j= @Q6bJ AW6Ē B]6lo Oe<k<c6lo Q{<†<c6i6  V–<Ą<c6 %3Ö2 Ys%<š<Ä<o6=<3Ö2 ]3–1<Ü<į<o6I<3čQ c––%<˙<=c6<ub4F m5#=3=c6%<<3ũ˙ qˆ<K=Q=o6báŪ æDe=u=c6%<]6b…k …ÁÔ‰=”=c6%<I_TpđI <8} :4?Tō =đžE ?Ũj= @אbJ AõĒ Bīlo Oû=>v7lo Q>>v7|7  V,>7>v7 %3Ö2 Yģ=O>Z>‚7Ķ=3Ö2 ]âzĮ=r>}>‚7ß=3čQ cũģ=•>Ĩ>v7¯=ub4F m*š>É>v7ģ=¯=3ũ˙ q 1¯=á>į>‚7báŪ Æbû> ?v7ģ=īb…k …Úã?*?v7ģ=I_TpŖ= ËM_@žEMŦ`j=M­`bJM¯`ĒM°'`TōMą÷_4čQMĩã‰E?š?”7q?4FM¸ôš?”7E?q?…kMŋ žĶ?”7E?4ũ˙MÂVq?ė?Ž74húMÅšŽ7@Ž7d,MĮŧ^@”7”7 .ģMĪ@@lõMЌ`I_Tp YMĪa@lõMĐŽ`I_TpųÖCšMŧ…@I_Tp”7E?īūĨä_WÄÁÅŽBZô˛ČŨ<ŽĐįîŋ<ŽĐIŋJž8 %3Ö2 YũPÂIVJaJĘ8ÚI3Ö2 ]oÎIyJ„JĘ8æI3čQ cģ7ÂIœJŦJž8ļIub4F m™jĀJĐJž8ÂIļI3ũ˙ q ÉļIčJîJĘ8báŪ -áKKž8ÂI¸8b…k …ˆß&K1Kž8ÂII_Tp3ĒI b<M_uLžEMŦhuj=M­tubJM¯€uĒM°ŒuTōMą\u4čQMĩ~ĘLKĄKÜ8xK4FM¸öqĀKÜ8LKxK…kMŋŅ ÚKÜ8LK4ũ˙MˆxKķKÖ84húMÅGōÖ8 LÖ8d,MĮĀW&LÜ8Ü8 Î:MĪGLlõMĐíuI_Tp3CfUMŧkLI_Tp3Ü8LK¸8ūĨIuW Å”NZô˛ČĻ8<ŽĐ/íuLŖMŽMF %0CöĒ-LĮMŌMFL0áH ^FëMöMFL0PH nĸuLNNFL0.N-dF3N>NFL0pH$÷uLWNbNFL0Íą´ F{NNF‡RĻ8#N8xWowÅŗPZô˛ČŦ8<ŽĐfíTÅB0–HíËËBWT]T´B0–HôŸl~SvTT´B %0¨MųBgËBšT T´B0¨Mˆ~SšTÄT´B %0CöīŗSŨTčTÅBĻS0áH "…ËBU U´BĻS0PH O™~S%U0UÅBĻS0.N°ŨËBIUTU´BĻS0pHŖ~SmUxUÅBĻS0ÍæšēB‘U—UÅB‡Rl9#NK‚6f'‡= :@WTō =đžE ?7:j= @=:bJ AH:Ē BN:lo OV VT:lo QV(VT:Z:  V8VCVT: %3Ö2 YÛĮU[VfV`:ßU3Ö2 ]ģCĶU~V‰V`:ëU3čQ cžņĮUĄVąVT:ģUub4F mŦmÅVÕVT:ĮUģU3ũ˙ q5ģUíVķV`:báŪ DWWT:ĮUN:b…k …Ô;+W6WT:ĮUI_Tp%:¯U 9ßM_zXžEMŦ“‰j=M­Ÿ‰bJM¯Ģ‰ĒM°ˇ‰TōMą‡‰4čQMĩŸæQWĻWr:}W4FM¸.˜ÅWr:QW}W…kMŋ)ßWr:QW4ũ˙MÂP“}WøWl:4húMŏ0l:Xl:d,MĮÕ+Xr:r: ģ*MĪLXlõMĐŠI_Tp%:C,NMŧpXI_Tp%:r:QWN:ūĨt‰WsrÅ™ZZô˛Č7:<ŽĐÔí\`F´Z0.N/fFW\b\OF´Z0pHUĻ™Z{\†\`F´Z0ÍuZUFŸ\Ĩ\`F‡R=:#NcŒ|ū :I^Tō =đžE ?Æ:j= @Ž'bJ AĖ:Ē BŌ:lo O]]Ø:lo Q&]1]Ø:Ū:  VA]L]Ø: %3Ö2 YNÃĐ\d]o]ä:č\3Ö2 ]ũJÜ\‡]’]ä:ô\3čQ cÄĩĐ\Ē]ē]Ø:Ä\ub4F mxbÎ]Ū]Ø:Đ\Ä\3ũ˙ qâŦÄ\ö]ü]ä:báŪ úØ^ ^Ø:Đ\Ō:b…k …Ļ?4^?^Ø:Đ\I_Tp %¸\ }ËM_ƒ_žEMŦĻ“j=M­˛“bJM¯ž“ĒM°Ę“TōMąš“4čQMĩVZ^¯^ö:†^4FM¸VIÎ^ö:Z^†^…kMŋŊÄč^ö:Z^4ũ˙MÂöC†^_đ:4húMÅS#đ:_đ:d,MĮh/4_ö:ö: GMĪU_lõMĐ+”I_Tp %CđMŧy_I_Tp %ö:Z^Ō:ūĨ‡“WÖÅĸaZô˛ČÆ:<ŽĐ îAč">Aé<>divAÖ7gŒöa,,å_ :‡cTō =đžE ?š@j= @Ļ@bJ Aą@Ē Bˇ@lo ONbTbŊ@lo QdbobŊ@Ã@  VbŠbŊ@ %3Ö2 Y”9bĸb­bÉ@&b3Ö2 ]ōÂbÅbĐbÉ@2b3čQ cFbčbøbŊ@bub4F m$ ccŊ@bb3ũ˙ q›#b4c:cÉ@báŪ 6?Nc^cŊ@bˇ@b…k …īUrc}cŊ@bI_Tp @öa 'M_ÁdžEMŦ‹žj=M­—žbJM¯ŖžĒM°¯žTōMąž4čQMĩģt˜cícÛ@Äc4FM¸Æ} dÛ@˜cÄc…kMŋ%b&dÛ@˜c4ũ˙MÂB$Äc?dÕ@4húMÅÃüÕ@XdÕ@d,MĮßŋrdÛ@Û@ /4MĪ“dlõMĐŸI_Tp @CŲåMŧˇdI_Tp @Û@˜cˇ@ūĨlžWĀÅāfZô˛Čš@<ŽĐũĘtÃF %0Cöō˛-sWtbtÔF s0áH Ō#ÚF{t†tÃF s0PH {sŸtĒtÔF s0.N;uÚFÃtÎtÃF s0pHáČsįtōtÔF s0͍īÉF uuÔF‡RúA#N´ˇWÂÅCwZô˛ČB<ŽĐã÷†žK %{-Ĩ AjX†îK %{:ĩ Njr†îK % Ĩ…=%Ÿ†‡Rč7#NÛmkk {ž=%ˆ‡R;A#Nœ­.r.r =%ų†‡RŦ8#N8xčvčv ›<=%&‡‡R=:#NcŒXxXx į=%S‡‡R´'#N5‹5‹ MšĻS€‡‡Rl9#NK‚ōtōt ‘'=%­‡‡RôB#N{¸”¸” ´*=%ڇ‡RĻ@#N[Ą˜˜ žŠōkˆ‡R/A#Nœ­uu šG/%4ˆ‡Rš@#N[Ąšš V­=%aˆ‡Rא#Nc v v zÖBŽˆ‡Rא#Nc v v Ã=%ģˆ‡RM‘#N ÎL´L´Eø9N–%؈Ųē'´' Ā=%‰‡RîB#N{ÂYÄYÄ L Ē@3‰‡RŨ#Nc+Ō+Ō UL`‰‡RĻ8#N8xqØqØ  s‰‡RúA#N´ˇMÜMÜE/ŨN–%̉Ų'%Č* Kž@z؉‡RîB#N{ÂYÄYÄ LĶ=%ЇRB#N´ˇÃà ŽŅ/%2ЇRl9#NK‚ōtōt qv•X_ЇR7:#NcŒ%% ‚>ž_ŒŠ‡RÆ:#Nv–ŠŠ Ī1ÜdšŠ‡Rš@#N[Ąšš ÄW/%抇R/A#Nœ­uu M-6%‹ũ_;Aąœ/A#Nœ­.ru é6bI‹‡RM‘#N ÎL´L´7g/%‡RM‘#N ÎL´L´ ‚"JËt%Ž‹M(ä, 3đJã,Ž‹M(ä, % i Jęf%΋M(ä, %yäO7á‹|O8O}4}dvdv4}‹}};v;v}d ÷28P5J%@úP9Č*%TeP:Č*%&0P@Č*%Š\PFČ* %ÍžPGČ*%HPHČ*%øģPIČ*%äįPJČ*%ÜÃPKČ* %mPLČ*$%MPM'%(%ī PN'%)%õ÷PP'%*%úËPR'%+%į5PT'%,% PV'%-%Ö*P]'%.%˜XP^'%/%¸åPa'%0%ņPPc'%1%$,Pe'%2%—Pg'%3%8>Pn'%4%ÉPo'%5EæĖP|Č*d %´'~P'PovŒÔQ( %œmQ7,ūvQ8f%rQ|‹ģQ}Q%ŨSQ~Q%žQ_%Ü_QQ%ĢûQ‚Q%üBQƒX%9°Q„€šŒQ… %t % Žu‘'Ę)Q‡X%ŠQ‹X%ŅÃQX% [Q™X%tųQžX%ؙQŦ %ËQ¯X%LQē %nQŊQ%:ßKKŽ  KxžŽ% +KzŽ%Ę*K{MŽ’,R%ît_%šŽu‘' øSŪŽ% +S Ž%}S!Žë1T<_% šTQ%Ž˙TSvéŽTĒTT鎀T[‘Ķ NÜT\ąrTqmTsV%ízTtC%%û$TuC%sNTy4s—*Tz%*ÄT^ %%š8T_Q%%4<T` %%„ëTf % %ĮfToQ%‚,sā&T} s¤ÄT~ĶsTX%t'%ãu‘'X&T€€TƒWs¤ÄT„'sT… %LcT†ît'%-u‘'/ĨcT¤Q%t'%Hu‘'t'%Xu‘'ƒd*ŽvXU %v{„}'%}ē'v 1}œ2vœ2vņ}}}<%}S(vĄ2}24v24v‚}vv' vv$ }$ }' }tQ%‘…v{v8 vŋ6v, v=!}=!}ŋ6}, v”6B‘vH‘´'vČ*_%}ë7vô7™V4_%Ķ?Vēz‘v€‘uE´—V¯ %Ÿ‘1'd‘EŧtVŨ1'š‘1'o‘EˆžVÚo‘Α´'E€íVĢd‘ã‘´'};vÜ@vÉ?vį@}É?}į@v%}%v1Av“B}“Bv˜BvYD}ĩBv%qWb6 c’%pLWc %†remWd %`'We=’qWjŦ´”’%pLWkX%†remWlX%ĄÁWmn’qWväŒ%pLWw,†remWx,×WyŸ’!!XmBŽq€YĨéô’% KYŠŽ3Yےu€Z%ô’Wå“v“‡ %1“uuˆĨNGš ˜ G j“%t•GĄj“%ŊGĸp“%sØGĻ %v9“v†%t'%†“u‘'v1“t'%œ“u‘''‡ %Ŧ“*Ž-ÃFO' )<X[.”%m~[0–%Dd[2J%%Fs[5ˇ %‡F[:%ā[;͍%e[@Ą%+R[AŦ%¯“[E– %Kd[GJ%(%Įø[J؍,%ˆō[N,Ž0%1[P7Ž4%D~[[yŽ8%ĩÕ[\yŽ@%ã…[]yŽH%ėH[m_%P%ūH[n_%TC%īS\ XŽ\cŽ%]*_%Á  ]e˜•!’¯]j˜•!d+]m_%!Ķ+]p_%!íæ]s­” !kc]xČ*!Ë^]~˜•!|›]&'‰tí]‡Q%‰ä]’Q%‰.]–Q%‰î]šQ%‰]žQ%‰ÆG]ĄQ%‰ “]¤Q%v5%‘‘]§¸”s%]Ē %Š]ÅĩŅߕ!Œ¯]ÆĒ•!š{]ĮĒ•aâ]Čļ•‹™üč1‹Öŋ/üŒREHž‘—!19Õ´'!™uÖ%!ģōÚž•!0\Ûž•(REĸW–b–č1î1REĨs–~–č1ô1RE­–š–č1´'~REŽŦ–ˇ–č1 %0RŪąg´'Ж֖ú1[™¸ēœD%ö–ô1î1[úHŊ'ū%—ô1î1[™¸Ė}4%6—´'î1[úHÍxĪ%V—´'î1*}€ĐŅÂj—u—č1´'LIãJ‚…—č1î1–އöŊ— .ô Ī ė0 ĸõW‚Đo˜!˜ o˜.‚Đč—ũ—2–—´' %.§\˜˜2 %0D-Uk22˜8˜2"‚Đ H˜S˜2 2LI JÔc˜2 2–—Ŋ—WŽ| 8™Zũ^XãZT(_%ZœP`ŪŽ2Y8;?āآ22+Bą8ā˜æ˜22M :û˜™2Ž| ™2y˜W[Š r–™y˜.[Št=™C™2.ĸ”xT™_™2 %"[Š}o™z™2$2LI}ËŠ™2$2™Wĸ8ƒ$š!ũ^‹*2Tĸ8…ƙŅ™/22.Lžˆâ™í™/2 %"ĸ8ũ™š/252LIŽķš/252›™jŊKMš:‘/M%YGŪ%Wl¸TvšIntZ %<Å,[Q%Wg `ŸšIntf,<Å,gf%WÎ?zĪ›!a•%5TĮ~ƚ՚+5%5.Lūæšņš+5 %0FHė15 ››7509N‚ü%5)›/›751getƒČ%5H›N›750Ҍ…ĩ %5g›m›+52•#‹(™‚››+5%5"Į—›¨›+5=5*I—Ž^ŧ›Į›+5=5ITÚGŸš'^:‘šÔ^EÚä´'û›´'‘Ģ^fRÚ%œ´'´'‘yŋ^lyâÄ66œM(‘X‰^tė%VœM(M(‘ß^|ȡ%vœ´'´'‘:A^‹ē%–œM(M(‘<8^S%ļœô1ô1‘ņŲ^”•WÄ6Ҝ %‘Ž ^—ĩŪÄ6ėœ %‘Š[^š>ņÄ65%’'^w5ų;7 %–ŲČÄ6ų=BH}5ų>Xc}5ƒ5/ų@s~}5ô13ID}Z‰5–Ą}5ƒ5“SetIRļÁ}5ƒ53CRM‘lô1Ųߝ53Ŧ4NßE´'÷ũ5”ˇėQם‘ėūW“֝8žƒ5ƒ5 %´'‘\_ïXžƒ5ƒ5‘ŧj }žƒ5ƒ5´'3ÉÃoJr%•ž›ž53qptãsŗžšž53'Ŗ|mhŅžמ53zŸ„GYīžõž53¤ģŠh% ŸŸ5´'3ĸOĘd%0Ÿ6Ÿ53Ė1–†“%NŸTŸ53B‚š6%lŸrŸ53+%žu‘%ŠŸŸ53ZĖŖÉ˙%¨Ÿޟ53ۍ§Ũ–%Ɵ˟53RĒôI%äŸęŸ5)ū Á*KũŸ }5([}Æxƒ´'   5Ũ¯+ }5 %]  œŊ ]   X m ž5´' %_5p Ļ} ˆ ž5 %G]  Š— ĸ ž5Ä5HI Š™Ųą ž5Ä5< Ô& čÍĸ•ƒH S÷ –… Tm%–3L U÷  ˙ ėhš—=G ņĘ5—ËS ôĘ5—ũB øĘ5— Ū û7Ą÷ —Gž ū7Ą$ØS 7Ą$_– Ę5˜u_ zΠT<‹ ĄŒĄĪ5Õ5[㙠m%§Ą÷ ™kí &*Um%šMax +§%m%0lp 0Ąäā5äĄęĄæ50ÉĻ 3č ÷ ĸ ĸæ50/ü 6;÷ "ĸ(ĸæ50G 9t÷ AĸGĸæ50Մ <Ę,%`ĸfĸæ505 HĶļ%ĸŠĸæ5ė5˜? g´ ÷ ¤ĸā5ÃĪ s.m÷ Ãĸā5ā5åm%  čŨ¤•ƒH SŖ–… T%–3L UŖ ˙ ė‘š—=G ņĘ5—ËS ôĘ5—ũB øĘ5— Ū ûGŖŖ—Gž ūGŖ$ØS GŖ$_– Ę5˜u_ zŪĸT<‹ ‘ŖœŖō5ø5[㙠v°%ˇŖŖ™kí &đ%šMax +Ņ%0lp 0 ą6ôŖúŖ 60ÉĻ 3CŖ¤¤ 60/ü 6§YŖ2¤8¤ 60G 9g5ŖQ¤W¤ 60Մ <žh%p¤v¤ 605 Hįŗ%¤š¤ 66˜? gˇËŖ´¤6ÃĪ sČDŖͤ66å%ŌĸWšķ ũĨ!Ž %!dš ÕZ.šķ ˙Ĩ Ĩķ60æĨ ?\%9ĨSĨķ6´' %´'´'›|Ø m´'iĨķ6´' %´'W¨‘ ¤CĻœQ ĻOĻ€€€€x!rÕ ąCĻT¨‘ ¨ŊĨČĨ)7CĻ2Vĩ ĒÎIŨĨčĨ)7CĻ07 ޝĮCĻĻ Ļ)7CĻ"¨‘ ˛Ļ'Ļ)7/7LI ˛ Ž7Ļ)7/7ģmhšCĻĨfGEYĻ%¨ž&c…Ļ ,@ ?sžĸŒfĻĻ Š Ä  )…ŸĄŌŋG:ugÄ6[YZ%íĻ´'ú1´' %íG.fGOūϧ:7@TRYϧ$§:7 % XĮmĮijĻYĻE§K§:7 ILIą1Ēî7>IW‚‰ ,TĢz[_Ûm! ´aļĒ.‚‰.āĒæĒ}8.h+/÷ĒĢ}8 %2^ĮWäžĢĢ}8"‚‰c-Ģ8Ģ}8ƒ8LIc6ĨHĢ}8ƒ8ŠĒWƒXz‰Ŧ!a•ŨTĮ~„ĢĢB9Ũ.Lū ĢĢĢB9 %0FHęmõÄĢĘĢH909N‚syŨãĢéĢH91getƒ&ŨŦŦH90Ҍ…~ŠŨ!Ŧ'ŦB92•#‹F<ŦGŦB9Ũ"Į—WŦbŦB9N9*I—āvŦŦB9N9ITYĢî•pƒšW™žzĘ­!a•אTĮ~ÅŦĐŦ:א.LūáŦėŦ: %0FH! ­:09N‚א$­*­:1getƒאC­I­:0Ҍ…‚Ęאb­h­:2•#‹`}­ˆ­:א"Į—˜­Ŗ­::*I—Zƒˇ­­::IT' šŦ/ uĪ­¤ęH ˛ā­”ŽŸŪ˛ŋGUĄ' ´ā­ŽŽ: %KŖh ¸\¤Hā­@ŽFŽ:.ęH ģWŽ]Ž:"ęH žmŽxŽ:PILI žâ*ˆŽ:PI¤ĒĀS ¸Øą¸!¤–p %! r {Â.ĒĀU ØŽŪŽJ;U€=w ”ŽôŽ˙ŽJ; %2ƒũ{ 8Ɲ¯J;P;0ln€ )fP;8¯C¯J;P;0ø0\ ˇG%\¯b¯H2ä@] †w¯‚¯J;%Ĩâõ  Öy”Ž ¯̝J;]HĨ„Z¯ ˆ”ŽɯŲ¯J;]H %Ĩ1cĄ ˙ˇ”Ž÷¯°J;]HĨ ōĻ :q”Ž °+°J;]HĨ—‡ĸ ;:”ŽI°T°J;uHĨŽŖ ‚‚”Žr°}°J;1:Ĩ°4¤ ´e”Ž›°ϰJ;¸8Ĩbp¨ Ÿ ”ŽİΰJ;1:Ĩ/?Š ¸ ”Ží°ø°J;uHĨĒĨ ė ”Žą!ąJ;]HĨÎ.§ N ”Ž?ąJąJ;]HĨ l¸ k> ”ŽhąxąJ;]H %Ĩ đĒ đŪ”Ž–ąĄąJ;]H"ĒĀt ąąŧąJ;‡HLIt lNĖąJ;‡HW ģQŗqšÍĄ˛!TôÔí!˙ÍÕH‘! Ö%!uA×\F "qšÎ6˛P˛h;?´' %´'.qšÚa˛l˛h;n;2IÚ Q˛Œ˛h;n;#ˆÕ•˛h; %åą!ˇŨt;. žIJŪ˛y;?´' %´'.n:Âī˛ú˛y; %2IÆąĖŗŗ;_5" ß*ŗ5ŗy;…;LIßĘZEŗy;…;Øąz’ _`ûŗ%‡í_h‹;%I _ií%_j´z’_c–ŗĢŗ;69?–;Ģ2_fģŗÆŗ; %Gz’_lպ⺐;œ;HI_l;œ;CRhÄ6ûŗVŗ‰U<Ąĩ%ĢôĪ%%Đ%%Ĩ™Ņ%%wŽŌÄ6%˛‡ĶÄ6%ÄÉÔ% %qjÕÄ6%ͧÖÄ6%ęC×%%ō7ØÄ6%†™Ų% %„ÍÚĩ$%°BÛĩ(%ōwÜ%,%¸Ũĩ0%€ZŪÄ64%ÍLß%8‰U¤ų´˙´T@ îAš ĩT@ %glZšW‚8Z­ĩ!ēgÄ6T‚8_NĩYĩZ@ô10Ë=bT%rĩ}ĩ`@~9f‚8‹ĩ–ĩZ@{b<ÁĄĩZ@ %#ĩWmãtAļ™˜Uy‘ÍÄ6™„›~|ŋÄ6[žœ‡™%ļ´'´'[ÖR‹ĸË%#ļô1ô1ĻųV™ß$%ô1´'}A ŌŌļ!˙ÍĶ´'! Ô %!uAÕÄ6e}A‚ļļúA BeöÔšļĨļúA %§IBˇļÂļúA B#}AËļúA¨XžüŌļ÷ŋЉmÖˇ ` îŸĨ>ŋG!ē6.H!Ļ:!#C=nŲ !&e?/Ú!U2Bp@!(ÄE™ !ŋuI÷ŋ@!¯‚M[ĄH!7Qœ­T!ژWv–`!ā\ŠĒl!Á_%x!{Uc %|!Hi5A€!Â0o%:„!h&yöˆ! }Ė!Vƒ9HØ!)8†%Ü!„͉ %ā!^•ŒĨä!njŽŦč!Ŗ`“ŽŦđ!õ$˜Âø!ü™QÃüĒČA2ÅĒĨ™Ą%TXžš¸Œ¸÷D3HUŠÁŌļĸ¸­¸÷D %0= Ģ p@Ƹˏ÷D2šąAFá¸ė¸÷Dp@0Žšeāp@š š÷D2ßņž  š+š÷Dp@0<Ä< %DšJš?H0RÉ ˆ %cšiš?H0‹iίE %‚šˆš?H0.oÔę %Ąš§š?H083Ųg %ĀšÆš?H0MfŪà %ßšåš?H0ŋãQ‡ %ūšē?H0ŽéđQ %ē#ē?H0Õ?îŒ~ %<ēBē?H0•\ķo? %[ēaē?H0OĶø ^ %zē€ē?H0CĖ:_ėŽŦ™ēŸē?H0s =CŽŦ¸ēžē?H0•D@hŖ%×ēŨē?H0úD/%öēüē?H0ÕūJ/ĀÄCģ ģ?H %0nQė‹5A9ģDģ÷D %0 ŠWĶĘV;]ģcģ÷D0†ōֆö9|ģ‚ģ÷D0f^îXü9›ģĄģ?H26ŋŨ‰1ļģÁģ÷D9H0 +č+‘9HÚģāģ÷D0 ÎŖÄ6ųģŧ÷D %0ÕūM'Į5Aŧ7ŧ÷D´'´'ø2PÄŽĒ>Lŧaŧ÷Dø%:0“Į§E5EHzŧ€ŧ÷D2˜:­š•ŧ ŧ÷D5A2…´œ ĩŧĀŧ÷D%:2ãšī$ÕŧÛŧ÷D0Wū~WD%ôŧúŧ÷D2WĮ,ŊŊŊ÷D2˛øĖÄi*Ŋ0Ŋ÷D2 eĐD’EŊPŊ÷D~90^[gŒ3 %iŊtŊ÷Dåļ2ąēŗį‰ŊŊ÷D0ņfæčĐÄC¨ŊŽŊ?H0į¯įū%:ĮŊÍŊ÷D0į¯čI+:æŊėŊ?H0¸Pė‘Ũ#Až ž÷D0Œiīj‚xB$ž*ž÷D0ŒiōiÕrBCžIž?H2Ō÷#"^ždž÷D0+ūŠĄF7}žƒž?H0lˆøųÜAœžĸž÷D2žäoˇžŊž÷D2˜ôėĒŌžØž÷D2šû>/ížķž÷D29Ą2žŋŋ÷D0—ĩ% %'ŋ-ŋ?H0V!š÷)7FŋLŋ÷D2B=ųN+aŋgŋ÷D2ÕTG|ŋ‚ŋ÷D0Ÿ,:L%›ŋĄŋ?H*Kķ3SĩŋĀŋ÷D%"XžŖĐŋÛŋ÷DKHLIŖYõëŋ÷DKHW§‘ÁÂ!ēúf@!p¸ûk@¤ŨØiŌÕĀiŌ!…ßp@TŨÚUĀ`Ā›G|@0žEÜ‚@yĀĀ›G"ŨāĀšĀ›GĄG*IāĐ3ŽĀšĀ›GĄGĢ*DĀÉĀ›G %.S1ÃæĀėĀv@TS1ÅũĀÁv@|@. ČÁ$Áv@ %0žEŅÍ‚@=ÁCÁv@0žEŌvˆ@\ÁbÁŽ@1get͞!|@{ÁÁŽ@ŦsetÔ„S—ÁĸÁv@|@-€Ę㤈-+d‘ė[N‚@ĘÁĐÁŽ@"S1ũāÁëÁv@”@*Iũ°U˙Á Âv@”@ĀITp@÷ŋWˇzLÃ!a•@7TĮ~GÂRÂÄA@7.LūcÂnÂÄA %0FH ˜ĘA‡ÂÂĐA09N‚+M@7ĻÂŦÂĐA1getƒ'“@7ÅÂËÂĐA0Ҍ…Tą@7äÂęÂÄA2•#‹k;˙ ÃÄA@7"Į—Ã%ÃÄAÖA*I—įc9ÃDÃÄAÖAIT%¨ÂWTlzÄ!a•ÜATĮ~|ÇÃâAÜA.Lū˜ÃŖÃâA %0FH/jčAŧÃÂÃîA09N‚TčÜAÛÃáÃîA1getƒĩ“ÜAúÃÄîA0Ҍ…”8ÜAÄÄâA2•#‹Ÿk4Ä?ÄâAÜA"Į—OÄZÄâAôA*I—ŨnÄyÄâAôAITÄ:9ŒÄ(ÅŸŸ´ŋGf:9ŦġÄÜADIf:9ÅÄËÄÜA@ëuށÄāÄëÄÜA %­&%ÄÅÜA´'ú1´' %íGQÃAļWĖÁRĮ!ēúf@!p¸ûĶž¤ŨØiŌÆiŌ!…ß´ˇTŨڐśŧGrB0žEÜ~ŧ`B´ÅēŧG"ŨāĘÅÕŧG­G*IāĐTéÅôŧG­GĢ*DYÅÆ§G %.S1Ã!Æ'Æ„BTS1Å8ÆCÆ„BrB. ČTÆ_Æ„B %0žEŅ‚€`BxÆ~Æ„B0žEŌĀį~B—ƝƊB1getĶ%ÚrBļÆŧÆŠBŦsetÔ ŌÆŨÆ„BrB-€ĘãiĻ-+d‘ė“z`BĮ ĮŠB"S1ũĮ&Į„BB*Iũ :ĮEĮ„BBYÅIT´ˇ2ÅWˇÆz‡Č!a•–BTĮ~‚ĮĮœB–B.LūžĮŠĮœB %0FHųbĸBÂĮČĮ¨B09N‚Ø–BáĮįĮ¨B1getƒņÍ–BČȨB0Ҍ…œ–BČ%ČœB2•#‹=ü:ČEČœB–B"Į—UČ`ČœBŽB*I—SKtČČœBŽBIT™Č¤&Ę.¸YÍŽ‰1™Č“ÉŸ‡EŋGf‰ÆČŅČ–BüHf‰ßČåČ–B¯IŠĸBüČÉ–BüHUp13™ČÉ(É–B %Ĩ6đ2™ČFÉQÉ–B–;ĨL9ÄW™ČoÉuÉ–B°Ęž<ĖՇɖB–;ž)!n¸YÍŽaĸB™ČĮĘ™Č! h %!§÷i´!ŗĢj´ .aĸDųÉ ĘđH–;–;Uč.I§ÉĘ*ĘđH %ĨOyë§ÉHĘSĘđH–;*īRn Ô:gĘmĘđHąL`%§ÉŠĘĘđH"aĸl ĘĢĘđHöHLIlBBģĘđHöH[Î%[ 'ûŗâĘ´'.&ĘrķĘËäH–;–;T&ĘuËËäH–BĨâõx ‡Č=ËHËäH]HĨ đ|ās‡ČfËqËäH]HĨ„Z…7l‡ČËŸËäH]H %Ĩ lŠ ŧ ‡ČŊËÍËäH]H %Ĩ—‡.‡ČëËöËäHuHĨ/?”ĄĐ ‡ČĖĖäHuHĨŽš@*‡Č=ĖHĖäH1:ĨbpžŒŌ ‡ČfĖqĖäH1:Ĩ°4Ĩb‡ČĖšĖäH¸8*Ęž°…YŽĖšĖäH–;*Üz´ÛåÍĖĶĖäH+íļ:¸ûŗëĖöĖäH%"&ĘēÍÍäHęH*IēŠx%Í0ÍäHęHiô‡ČCÍNÍäH %§É™ČWĮŽøö …Í ~~ ŋ… —8 ŊĢWy'Č Î!fĮŪ H‘Ty'Ę °ÍģÍŦC´'.M4× ĖÍ×ÍŦC %"y'ā įÍōÍŦC˛CLIā ÚÎŦC˛C…ÍWNĘ2Î!Ē/>Ä6TNĘ5>ÎIθCô10Ë=92(%bÎmΞCÄCfNĘ{ΆθC hõR‘θC %βQ$ĸÎ7™ô×Î †, ;4 éN û …uWp^ w…Ī!pģ” Î.p^yĪĪÂD.Ŧ­}Ī$ĪÂD %2ŋƒÎ×9ĪDĪÂD´'0P§‘L9D]ĪcĪÂD;-ōˆyĪIStrÂDÖ7 B™­Ī!N#š9D!â”› %W6K ¤Đ˜fd_N%!ŊÕO %!EQÄ6T6KķĪūĪåD %.Š"4ĐĐåD %0›ą8°Ä63Đ9ĐåD3IÂĢÄ6SĐëDzĢLĻ&'mĐëD"6KS}ĐˆĐåDņDLISLô˜ĐåDņD­Ī7Ķ|ČĐ bŖ ° ũû-æ¨=÷DWKo&C Ņĸy&O&Ņīp7ITW¤Ü&C<Ņĸy&OßÕ4Ņ+‘p7IT, W•ä ’^Ņ$ēa ›%ITŨWIK™Ņ[MÎŌÄ6†ŅųEõJ,—ˆ,WĐ Ō$‘/ 5%-E9 t]uL} ;Ŗ'%ŨŅuL} .ŽZGķŅmuITouWJÃ&Š7Ōĸy&ĢåÁ/ŌųEp7IT,W@y&CiŌĸy&OɚaŌųEp7IT,¤^˛˜iŌõŌŸ ‹ŋGf^˛•Ō ŌbIhIf^˛ŽŌ´ŌbI¯IOnIËŌÖŌbIhIŗHŌšiŌéŌbI %Ū2 Ą™ÖĶ™% ›Š%%Ēp@Ū2Y5Ķ;ĶĪG@6“`õŌPĶ[ĶĪG %Ą¤eB0õŌxĶƒĶĪG¸83k$§&%›ĶĄĶÕGGŪ2Ŧ°ĶģĶĪGÛGHIŦƒĘĶĪGÛGõŌ6Ä|ԁÄf6îÔ ÔáGįGf6îÔ ÔáGKIŌ%ÛĶAÔ`ÔáG´'ú1´' %íGĢĢÛĶpÔáG %Ûͤô…,dYĻKÕKÕ!ûqH‘$!!˛s%(fô…ÂÔÍÔķGųG.ô…fŪÔøÔķG´'ú1´' %KXĮLņÅjρÔÕÕķG-Hîl˛&cĢŠ Ô?ÕķG %¤[ˆ$YĻÖŽÖ!߯žŽ f[ˆÕŠÕ HH.[ˆ›ÕĢÕ H´'ú1K„ ¸Îá¸f>>ßIߍH“H.>† Zß`ߍHĸ‹u‡ ëī}ß´'´'ĨâõŒ Ŋ"ß›ßĻߍH]HĨ„ZŸ ßÄßÔߍH]H %Ĩ1c ßōßũߍH]HĨ ō f¤ßā&āH]HĨ—‡É äIßDāOāHuHĨŽÖ Z ßmāxāH1:Ĩ°4Ū l§ß–āĄāH¸8Ĩbpé §č ßŋāĘāH1:Ĩ/?ü âû ßčāķāHuHĨĒ ls˛AlsĩÃÁ'ĘåËÉœ­Qt˛At …W %÷åËÉ8xā>0w90w D %$æËÉcŒā> x´: xˇÅéK%;æÄCˇQ'P%RæÄCĩųŽ'|æËÉcŒQöy´:öyĩįâ'ĻæËÉ{ÂQ •kC •-š c'% ē eϿοIC,X% CĻęæXā %EJ—…%˙æ<% qڍ%į'%{ŊËŠĐ/į'%p7 ŨJuMįITouuĩz"&Đeįô1p7ĩq&đ„įITīp7 qڐ%šį<%ĩz"&Ū˛įk5p7ĩįV&đŅįIT, +‘p7ĩ`NLđįIE %)7&;ĩđąŸč*Žĩ)°'-čËÉ[ĄQh˜Ah˜ Zv%Cč'% ÷ ˜'%Yč'%EŦ›ķÄ6učIT(fø¸ČĐCũ ûŒčô1wņû ”%´äŽ´,Ŋw‚7ŠM‘{ģG/*´'Ëč´'ŽŦšõŽ<%EÄŦ‡ %ōčĩĩ2v&OéIT,ĻæéųEp7ēøQ)šĩK&aFéIT,ųEp7ĩĩû&đeéIT,ųEp7 !'—Ä6éIT1,IT2,ųEųEēæ§¸­éô1'%Ä7ēʝ Åé´' %ˇ{ŅA %áé˛Aą ēMÅŗôé´'ē!ŠSęIT¸P;ˇoíÄ6%ęô1-ēVÔ'Ī­ˇÖņV%LęÄC-‹0 ƒNŽŦå{bÄ6vęÅX”ę ‹´'ę^Íy_=  Ŧę^Í´'mjžp {Âę1:ģ|›/Ã\Dy%ķę % % %Är(ØX% ë%›7¯×%,ë´'^)ˇeŸ%Cë´'ļE@ã´'gë´'´'%ëkã%‹ë´'´'’ÆRē%¯ë´'´' Ĩ'5‚"%4­ąĐ­t%×ë %-‡x0îoÄ6!×Û3ėu’-tHÜ %->yF۝'ž€!Â&'hŸ„Û<Ä6Kė!Ę-Uę˜VˇÄ6-ŗ/ Ä6WĢØUėâ7-\ąt9Ö7DN %†Ä6ĢėŽŦaŒœ&Ä6ÅėCĻŊ¨Ü-XÄ6äėM( %ēoxíM(&'Y5{„õŽŠĐ-íœ<%ī<%<%p7{ŊŧŠĐGí<%p7ŧYø˙líĖŊ'%´'&'p7ē['’íĖŊ'%´'&'p7k1+Wm˛í´'&'p7z"6…"Íí´'p7åXúˆčíô1p7ŧü,˙ îĖŊ<%M(&'p7ē <3îĖŊ<%M(&'p7k11&’SîM(&'p7z"G˜pnîM(p7éŨdō4‰îk5p78ÃŽ­Ä6¨îô1_5{ĻšŽŠĐÔîœ5%ī5%5%p7ŋØÕo–īœ5%ī5%5%p7ŠĐz"íôJī5%p7{VŽŠĐKīœ5%ī.%.%p7[Õ7Dwīœ5%ī.%.%p7z"đĘī‘ī.%p7‘ÕĘåŊīœ<%ī<%<%p7z"öŗ×ī<%p7 šaŲŧ  đ´'´'´'<9?–;4¸•ķ8>Ä6*đIT %Ō:Øî• I8Ä6DđŽŦ™aČŸÄ6cđ´' %ĶF7švđIE %)7 % %&;€ ęē9%ˇđ&… %ô1Æ:į {˛4×đ %´'!ĘģË@ŽÛģŦ›GŦ÷W$ĀÄ[iŌbIˇõZꞎČ÷9D %-íl@7"'kå_ü÷ĖŊ'%Æ:M‘uJkē+ øĖŊ<%Æ:ä,ûĸ†‘•;ø?ô1T&—ÍhøITŨļŪÆ¤Ho´'r&Ō/¤HœøITā­ŪƤH:‰o´'DØ&Ü,ÉøITJļŪÆ5A p´'ēæČrÜø @ēp“sīø @Ea— %ų %& &pÔ%8ųITŌļŪÆ%÷Dq´'Ŋ|”ĻUcž`ŧ5^ų˙˙˙˙˙˙˙ĀõŊ.;U %ŋ.*ąūƐx x‹kš°kÚÄ6Āīž2­x Z6ĀÔß3žx #Ā 4Īx ŊŊÁôráy˜ŊF\\Û­Āģ‰Yøx šĀZ y šĀć[y ŸĀ‡_\+y 9ĄĀ$]âse5ĩĀITEîY5UîÉ81se5ÜįIT—îY5§îÉÍĸse5ITéîY5ųîÉSse5*5IT;īY5KīÉfse5Q\ITīY5īɆse5xƒITßīY5īīÉÕ0se5ŸĒIT1đY5AđÉ‚jse5ÆŅITƒđY5“đÉ–Xse5íøIT'Y5;ņÉ se5ITĩņY5ÅņÉV{se5;FIT9ōY5IōÉ@ęse5bmIT‹ōY5›ōÉīhse5‰”ITŨōY5íōÉāose5°ģIT/ķY5?ķÉ$Ase5×âITķY5‘ķÉU§se5ū ITŒ“Y5ĶķÉse5%0ITôY5%ôɰzse5LWITgôY5wôÉŖ8se5s~ITHY5šôɨŽse5šĨITûôY5 õÉf4se5ÁĖITMõY5]õÉĻse5čķITŸõY5¯õÉ‘œse5ITņõY5öÉ,Hse56AITY5CöÉ:.se5]hITÆöY5ÖöÉĶĘse5„ITøY5ɇģse5ĢļIT8Y5‚É™se5ŌŨIT’Y5ĸÉ)úse5ųITäY5ôĘņQse5ITO Y5_ /üp0`žž%"ē`Æ%/p0`ĀU`R7 %3Ë=`Ác˜%xƒX7 %HI`Ä*#’R7^7-9Ä`Ėö% _`Ņ%/9Ä`ÎËÖd7 %BË=`Ī%ęj7 %ŖyŠ6&n3ĒØnŲ1%ŠF&'p7Æm&Ę52`w/? ž{3` IŸ ¤3 sÆ%I g?%ÂÜoÄ6%Pr %%%*sÄ6 %ŧ/tÄ6`w<ŦÆĻ8?´' %´'3TôHŠq?ŪäŦ83ÃëLąä´'üŦ83:ÃR~€ % Ŧ83>U8í´'8>Ŧ83uAXn#´'V\Ŧ83˜[Ąė%tzŦ83Î^ęĪ%’˜Ŧ83Emaˆ%°ļŦ83Ãda'%ÎÔŦ84!‡ká Ä6í´'?fŽh  Ļ8 %f`w $ Ļ8¸8ËI˛83 Ļ8¸83Q* ~ %lĩŒ8xQ*€l r 09bƒũƒŌ† ‘ 09¸83°7†g$¸8Š ´ 69 %3¨ņ‰ŦF %Ė Ō 69GQ*Žá ė 09<9HIŽ›û 09<9D W¸Ø!Å?0%!ŧ/5YĢ.¸D O T9Z9T¸` k T9%0C ũC%„ Š `90H •ė Ŗ Š `90uAG´' Č `9024j´'á į `90˙!Ģf9  T9C5*Ž^)8k * T9_5*I7*™> I T9Z9fMĮW b T9 %Ėiîf9 Š ITM(T9(øĖíf9§ ˛ ITJGT9ČäĖáf9Ī Ú ITT9ī0bHzbf9ú  ITPãT9`ã0n5-?f9% 0 IT3T9¸8Ėf9M X IT/üT9_5Ėī˛f9u € IT?T9 åĖā!f9 ¨ ITLåT9\å0 @6Īf9Č Ķ IT´'T96ĖĀ’f9đ û ITĶT9,æĖZ<f9 # ITnæT9~æĖmNf9@ K ITĀæT9ĐæĖŗĻf9h s IT%T9ø5ĖŅ?f9 › ITväT9†äĖk f9¸ à ITįT9"įĖą?f9ā ë ITļįT9ÆįĖS#f9ITdįT9tįĖm´f90;ITčãT9øãĖGf9XcIT(čT98čĖÕf9€‹ITzčT9ŠčĖj5f9¨ŗITĖčT9ÜčÍ31f9ĖIT, T9+‘ ¤ĸ÷[ŨũN<<Â<ļ?a×Û<ņ+bãÛŸœ%ŋG!­o°™HUIhŨAL¤H %Î@ĒmJNÎGĨu9¨™H6sÁ4%™jx!î%™=7%ĸ ey€,ģô1ô1ĸ e~?Øô1 %.ĸ÷céī¤HĨ ÍoDŠŨ ¤HĨiöu\Ũ17¤H-]p™Ŧû%ąĻĻ$yŨdj¤HĪRun]Ė…¤H*K§­ô(™Ÿ¤HĐ<ÃЇĒHŨĀÆ¤H"ĸ÷ÆÖá¤H°HLIÆđjņ¤H°HW[KĪņ!ēéÄ6!…ëÄ6.[KÔ5El9ô1ô11keyŲTķ´'^dr90‘/Ū Ø´'}ƒr92ã‹Đ˜Ŗl9ô1ŅIx9ļÁl9~9f—…ĪÚl9 %[Kål9~9ũWČ?Dôü!f,S™!—/V8x !ŋûXK‚,!5§Z %8!Ŗ`\ü<.Č?÷U[ö9.Rwúlwö9 %0SGūÍÜ %–ü90TÖhÖ %¯ĩü90•DȐ%ÎÔü90ú>%íķü90H6 +% ü90j 1Å%+1ü90s "ąüJPü90°7†*¸8itü9 %0íë—~9˜ü9 %+?''GA9°ļü9+y!,xšä9ÎÔü9*ĩŸ1äŌčķö9ü* e9DWö9ô1~9[ģ?ŠÂ%6ô1~9*ĖFC.LJUö9¸8+RFčņ %msü9+ZrIoo %‹‘ö9*WLē|ĨĢö9*FãOĖöŋÅö9"Č?_Õāö9:LI_“=đö9:î•ÉŽŦöW3Ö`mK!5>Đ\F!Ē/Ņ\F!ˆÔĘ­!Ĩ•×Ę­ !ązØÛ­!eŲ%!Á.Ú%! ØÛ%!MCŨ:!čâö. rq­¸%: %0đâtmD´'Ņ×+:0a3wU)´'đö+:0gŠ{”å´'+:0ėBƒ8´'.4+:08R™uŲ%MS+:0˛Ęœ*"%lr+:0Ą‘¤šSü9‹‘+:"3ÖēĄÅ%:ô1ô1´'´'Ī­:+ZrÃlA %Ũã%:ĪRunÉ´1øū%:š$ËxŪ%:"3Öä$/%:1:LIäU?%:1: ¤^ōŦPN<<šŸąĄŋGU’_¯P˜ @ %Ĩ ͲL~Pļŧ @ĨiöĩPÚā @Ō<玙&IPũ @W9: ¸!ažKJ;!ÜPMP;!.OP;.9: IOV;.°W `kV; %2ƒũ‹€‹V;P;0lnšP;¤¯V;P;0{•ŧP;ČÎ\;0˜ 'P;įí\;+ÄĀ5—P; V;*ķé<Yä*V;P;*XCŠ >IV;P;+yQGé%ag\;*ūāH{V;"9:R‘œV;b;LIR]ŠŦV;b;¤rŋ¸bŸëŪŋGfräīP;IfrũP;¯I°L I%P;IU˙§Á¸;FP; %ĨâõÄAZ¸doP;]HĨ„ZÉŠž¸P;]H %Ĩ1cÍ]I¸ģÆP;]HĨ ōĐ^¸äīP;]HĨ—‡ĶÂҏ P;uHĨŽÖG—¸6AP;1:Ĩ°4Ųč¸_jP;¸8ĨbpÜet ¸ˆ“P;1:Ĩ/?ßÅu ¸ąŧP;uHĨĒâí ¸ÚåP;]HĨÎ.å  ¸P;]HĨ lč­Ī ¸,<P;]H %Ķ đėTW¸VP;]HU!_3™™ž—é_7“ ˇ› Ù%Ÿ×_RĻx%Е_Sp@%č_TĶH TU!ÔߨH09.U!'đØHx09Un—;g!ØH %Ĩ¤Fækg?JØH¸8*}€.ˆ^dØHGU!_Vs~ØHŪHHI_VąâØHŪHâ+’™JŸ„ ŋGfâ+ÄĪp@,Ifâ+Ũãp@¯IÛO2Iúp@,I@Ë<”™%p@ %Ô¤–Æ™>p@¸8¤.g|ęJ'#ŸQ‰ŋG!Ē/ƒÄ6!ˆ†Ę­!Åå‰cŒ !¨v–!–.ø$!ɝ‘(!e“%,!Ŗ`•ü0!h&˜ö8..gV î5A´'´'øUšb J)5A %0a3ŧ´'BHÄC0gŠ Į´'agÄC08R /0%€†ÄC083+ }› %ŸĨÄC0Mf0 XX %žÄÄC0ŋ5 ÕŊ %ŨãÄC0Ž: Z %ü ÄC0Õ?? § % ! ÄC0OĶD é= %: @ ÄC0•\I Đî %Y _ ÄC0•D#ÕF%x ~ ÄC0ú&‹%%—  ÄC0s )˛Čüļ ŧ ÄC0Đ7i āL+:Õ ā ÄC %0f1"I:ų ˙ ÄC+ `8D%ē:!!5A+ `;ˇá´:5!;!ÄC+ąOp F[%:S!^!5A %*N-Dŗr!}!5A%*PÄw Āú‘!œ!5A%:*Uâ™ ĩ°!ļ!5AÔÔN {Ė!5AĪRun} ‘Šá!į!5A*tW§û!"5A*ąu[‚""5A–W^ą5%5"+:ŅÃcö%O"+:ĀĘi¸B%i"+:fĖnŽK%ƒ"+:Wds,%"+:¤x§j%ˇ"+:*B=Ÿ _Ë"Ö"5A)7*Õ¤ Āoę"đ"5A".g›# #5AuHLI›#5AuHOŋ$8aFˇŪØâ%X#‡•īīˇĀâ%}#‡•, +‘+‘ŧŧf;ž#ŠF&'&'p7ŧņúNē#ŠF&'p7ˇ"Ō%Ö#´'´'ˇ âė  $‡•´'%´'´'66ˇ-ė >$‡•%´'´'īīˇskė r$‡•, %´'´'+‘+‘ˇ"Ų%Ž$M(M(Õ}<ė ‡•M(%´'´'(ø(øQĘ'#QÍ'#J|6'#/ČФŒ˙(_â$™)Ÿá$ŋG!ũ^™!÷D$™`Ü9Aũ3H1Run2” %E%K%3H0ũ^Âą´'d%j%QH0ņfdíTÄCƒ%‰%QH0į¯lA+:ĸ%¨%QH0—sŨ? %Á%Į%QH0“ĮyđEHā%æ%3H0<O\M %˙%&QH0RT$¤ %&$&QH0‹iY`‰ %=&C&QH0.o_Á2 %\&b&QH083dV %{&&QH0MfiđĖ %š& &QH0ŋl¸c %š&ŋ&QH0Žq5 %Ø&Ū&QH0Õ?v¯ %÷&ũ&QH0•\{•u %''QH0OĶ~H_ %5';'QH0CĖ‚ķčŽŦT'Z'QH0s ‡gīŽŦs'y'QH0•DŒˇj%’'˜'QH0úw–%ą'ˇ'QH0Õū”0ÄCĐ'Û'QH %0fš_i:ô'ú'QH0 ŠĻfWH((3H+ė[´ @1(<(3H @*ĖFÁœ+P(o(3H?´' %ô1ô1* ežƒ(“(3Hô1ô1+n šú5AĢ(ļ(3H %+ÄįGU÷DÎ(Ô(3H+ÄčŠb?Hė(ō(QH"Œ˙€))3HÖėĸ…â$)))3H %*𡋹\=)H)3H B*ôF’ ŧ\)b)3H"Œ˙r)})3H]HLIC֍)3H]Hâ$¤Û´ô¸A,¸fÛ´Å)Đ)IIfÛ´Ū)ä)I¯IZIû)*IIĨâõöuæž)$*/*I]HĨ„Z÷ÎAž)M*]*I]H %Ĩ1cųWĢž){*†*I]HĨ ōúû ž)¤*¯*I]HĨ—‡ûēŪž)Í*Ø*IuHĨŽüÅÛž)ö*+I1:Ĩ°4ũž)+*+I¸8ĨbpūZŪ ž)H+S+I1:Ĩ/?˙Đ ž)q+|+IuHĨĒ ž)š+Ĩ+I]HĨÎ. 6 ž)Ã+Î+I]HĨ lež ž)ė+ü+I]H %Ĩ đLSž),%,I]HĢQ*ž)5,I %Ũgž)¸™ˇ¤Ä ´'q,?ˇjāŧ Ä6ˆ, %ˇ`īˇ Ä6Ÿ, %×ĩš´' '>ųcË,YLg %gú øBųcë,YLg %Ĩúü-ž°Č“Ģ -ũÍĻ> ˇė@%'-¸8ˇÅ/J%>-¸84˙:á¸2\-2¸8N&OņĶÄ6}-IT´'6ÎG&O% Ä6ž-ITM((øE˙č2¸-2_5ˇ–د Ä6Ų- %´'´'ũĶ(2 ķ-_5ÉgQ—" .´'´'%%+Ė€ņ E.´'´'´'´'}° n.´'´'´'´'+Ė’ —.´'´'ô1ô1}!Ø| Ā.´'´'ô1ô1oJ3 é.´'´'m%m%+Ė($ /´'´'k5k5}.. ;/´'´'k5k5+Ė Ī d/´'´'M(M(} ⠍/´'´'M(M(žt&O”÷Ä6Ž/IT,ųEˇ?ũcÅ/ô1ė×6ā/Æ:M‘ė“q8û/Æ:ä,ˇ"j Ä60Ö7IJ…%10ô1Ö7klâUÜéÄ6k˛2Ŋ]Ā%k‚šÂÃz%køĮĻú%kY ÍS&Ä6kŨÕĀČÄ6k* Ū%n%kĘáđšÄ6kîzíå/%kŒļķ‚ĩk9`ųMĻĩkEo˙Ō*%ŊB:%Ŋrž ĶĩŊÔû<—%ŊĐāũŸÄ6Æäí“%dkØų^PÆ%Ā ™¨w .ãĀ„“žšw 1nȲ'ĄĘw *Ā2¨¤Ûw ģĶĀ|:§ėw ‹+Ā.Šũw Āä;Ģx ģPč÷Øx P0.å0x PįŒīAx ĀëÕSRx ‚Fv–}‘—}\Fv‘—vŊ—}aF}t˜vy˜v™v™}–™2v›™}$šØˆæa _2sl›a" %sSpa#*Ž[æa$;2ˇa: Žq€a?u=J4rtaF4aKĢ2%õBaLî%`;aMĄ aRŲ2%™“aS %%ŋdaT %%YAaU_2 aZ3%õBa[î%`;a\Ą%YAa]_2abM3%õBacî%`;adĄ%ō4ae %%=âafj2 %đ`agj2alo3%īũam*Ž%5/anC%as‘3%€æatX%%P•au % azŋ3%ōa{*Ž%åFa| %%7wa}Q%sĻaGJ4sôaN‰2s'LaVĢ2Ų_rta^Ų2sŪēah3s+aoM3sŖPavo3sŧĩa~‘3%wa@ %%°aA %%đ aC %%ía2 t %Z4u‘' 1a€u2|#bUp4vv4ƒ‚4 % (@ŒcŪ4rc­4sļôce4sŸ_c!ú4%ˇ“c#Ž4%^<c+ô’%á˛c. %„%ą<c15ˆƒô4 %ô4*ŽvZ4vŪ4Úv5vˇFvjGvoG} 55vÚGvŸš}ÚGvĪ›}Ī›vI5‡2Y52v/ü}(}/ü}wHv(vԛv}7 }v7 yĻö=Ģ56`7 5vĨ5ÛabiuĻ•5v< }Ŋ &'v }Û5m%}7ĄvÍĸ}ÍĸvŌĸ}ū5%}GŖvŨ¤}Ũ¤}´'}H‘v‡9};v;v‡H}I}‡HvëIvđIvRJ}đI}RJv <}ž=vž=v"I}WJviJ}ëI}K}iK}Kv\Jv[Z}5K}wO}šQ}[Z}\JvÕZ}š[}o_}ÕZvo_}X]}Ę]vâ¤vtX}Yvß_}šX}Zvt_}ß_}%vĨ}TĻ:7vYĻv%¨vWŠ}WŠv-vž}žvŖvövaFvŖ=}4?v4?vä_}ä`}ä_võ`}˜a}õ`}avé`vc}Ebvc}d}0d}Åj}cvÅjvî7vĒŠvú7î7}î7}ú7vÚD}kFvkFvėj}Ļk}ėjvˇk}Zl}ˇk}_lvĢkvÖm}mvÛm}Įn}ōn}õt}ÛmvõtvŠĒ}TĢvG}•8č7vĨI}Gv3v? }3}? vĒI};Kv;KvIu}v}Iuvv}ˇv}v}ŧvvvv3x}dwv8x}$y}Oy}W}8xvWvD v } vYĢv‰Ŧ}‰Ŧv }ØvØ} vũvņ}ũ}ņvŗP}DRvDRv\}€}\v'€}ʀ}'€}Ī€v€vF‚}wvK‚}7ƒ}bƒ}o‰}K‚vo‰vöv}všŦvĘ­}Ę­:vā­v vK}Kv%:vC:%:}%:}C:v¯U}@Wv@Wvt‰}.Š}t‰v?Š}âŠ}?Š}įŠv3Šv^Œ}‹vcŒ}O}z}‚“}cŒv‚“v %} %}%v¸\}I^vI^v‡“}A”}‡“vR”}õ”}R”}ú”vF”vq–}ĸ•vv–}b—}—}•}v–v•v”Žv¸vvb}bvåą}Ą˛h;vØąvQŗ}Qŗ69vVŗ}´} ´ -W %¸;5EķLd%Í;´' †MW %ã;´' ‹MWX%ų;´'Eöæe*Ž"<uu&'&' “jdivWc’=< % % S×W4Č*S<´' ÂW”’n<X%X% nųW^ %‰<´'&' ÍëWi&'Š<(´'&' `Wa %É<(´'&'ĩ[ĸWüë<*Ž&'&' “w>Wv %ĩĮōWx =Q%Ev›W¤%$=´'M‘EŊWˇX%C=´'M‘ %E*tWģ_%b=´'M‘ % JKWĖ %x=´' éNWl&'˜=Č*M(&' ÃáWe %ŗ=Č*<% 9āWŒÎ=,, KŽW$,ä=´'EäĸWŅ,>´'M‘ %EL WÖf%">´'M‘ %EĐWŦm%<>´'M‘EÖVW¯t%V>´'M‘Žæf}> 9m =w K¯ šį KÖg7ĸ>%#¨g9 %%‹#g: %v}>7ŗĐhî> Z :ä ŒJ …Ô .Ķ ­¨   €€ '€!>iJ% Ž"j•?%úÜj—î>%n_j˜?t'%.?u‘' ÜjŦĮ? ËĘ X đO  ( V  áu AlĀ H € ..€ }€ Æ>€ +€ ¨4€ Ls€Ā  ŦW€€ ĸ8€€ ¸€€€€ ‰Æ€€€€.ĩ k7=@!ök9 %!4$k: %!āk; %!ĶÕk< % !™3k=Ą”!1k>=@!ķ™k?Č*!Rk@C@vų>vĮ?vO@Į?v´v#ĩv­ĩ-p@v™v÷ŋ}k@vp@vk@vÂ}Âv @vPvŦ@ @} @}Ŧ@vöa}‡cv‡cvlž}&Ÿ}lžv7Ÿ}ڟ}7Ÿ}ߟv+ŸvVĄ}‡ v[Ą}Gĸ}rĸ}¨Ē}[Ąv¨Ēv5AvJvAA5A}5A}AAv˙h}jvjv­Ē}gĢ}­ĒvxĢ}Ŧ}xĢ} ŦvlĢv—­}ČŦvœ­}ˆŽ}ŗŽ}Ā´}œ­vĀ´vÂ}%¨vLÃ}LÃvÄvQÃ}Äv(Å}(ÅvAļv-Å}Aļ}-Åv:p}ËqvËqvÅ´}ĩ}Å´vĩ}3ļ}ĩ}8ļv„ĩv¯ˇ}āļv´ˇ} ¸}˸}Ķž}´ˇvĶžv2ÅvRĮ}RĮv™ČvWĮ}™ČvYÍ}YÍv~S}ĀBl9vCw}~SvŽB}ŨBאvHw}ŽBvP;vúBP;}P;}úBvMw}ŪxvŪxvŒŋ}FĀ}ŒŋvWĀ}úĀ}WĀ}˙ĀvKĀvvÂ}§Áv{Â}gÃ}’Ã}šÉ}{ÂvšÉvz}‰CîBvc~}zv˜6vh~}˜6v…Í}ÎvÎvÎvĪ$vöm}ÖC;Avm~}ömvĘk}ķC/Avr~}ĘkvÁd}Dš@vw~}Ádvu¨}ŦËvŦË}u¨v?DČ*}Č*}?Dv|~} €v €vąË}kĖ}ąËv|Ė}Í}|Ė}$ÍvpĖv›Î}ĖÍv Î}ŒĪ}ˇĪ}ŋÕ} ÎvŋÕv×ÎvG}ÔDM‘vkƒ}Gv­Īv{%}¤ĐvŌļvôÖvųÖv[×}ųÖ}[×vpƒ}…v…vÖ}`×vr×}ôÖ}7Ø}ŠØ}<Øve×v|į}VØ}˜Ü}ģŪ}|į}e×vöį}ģč}Šė}öįvŠė}yę}ëęvëVví}$W}CXv•å}<æví}Úå}@įvŽė}ív`Z}í}˙E,vuL}FĻ8vՅ}uLv/īvĻ/v”N}>FŦ8vڅ}”Nv™Z}[F=:v߅}™ZvzX}xF7:vä…}zXvƒ_}•FÆ:vé…}ƒ_vD|}˛FôBvî…}D|vs}ĪFúAvķ…}svāf}ėFĻ@vø…}āfv 0v@}GŨvũ…}@v ävī}Eä}dåvį}īv™īt'%ZGu‘'}JGvÔđvy4v†}y4v$u}„GBv†}$u}ÖvĀ} ÂvYÅ}EĮ‡ %ŋGmvÅGpåŽŗGvõŌvÖĶ}ÖĶvÛĶ}|Ôv:7vÔ}ÖvÖ}ŠÖvKÕ}dŲú1vŽÖ}iŲviŲ3Hvâ$vđÚvŌÛ}ŠĒ}ŌÛv™)}}™)vīÛ}ņÜvöÜ}Ī$} ßvß}ßvß}ÎážHvĶávŨvī}A,÷Dv/Ú}ØávnŲ}Ũá09vg}F,v‡Č}âáv§É}NÍ}SÍ}įávž)}K,}ž)}P,}¸vb}U,}™vėá}ėá}ņá}öá}ûávâ}iâviŌ}nâ}iŌŨpŽN´'ĄIŪrN´'ŪN´'ߨ °IģIāž“ŨBß ĘIÕIāž“ŨBßäIīIāž“ŨBßņ"ūI Jāž“ J‘ß2#J(Jāž“ J߃ 7JBJāž“BJ‘vÔũߟü\JgJāž“gJGJáW ‡Jâã__p ē*ŽvčDvŲũßÉDĸJ­Jāž“­JJßôDÁJĖJāž“­JßEÛJæJāž“­Jßš õJKāž“KãßKKāž“ŨBßÖŌ.KCKāž“CKāHÄ%bIäšĀØZKoKāž“oKāHÄ%›GßwƒK˜Kāž“Ŧ@āHÄ%å šl÷ %šKâæčBlųšK*ŽvÄKįjá$†îKčĩ. 0žKč K 0 %vjá>†'Lčĩ. AîKč K A %âæC CjáX†KLčĩ. NîKč K N %ßX ZLqLāž“Ké__a íqLĄvĀDß2E‹L Lāž“ LāHÄ%vLv–üßŊüēLĪLāž“ĪLāHÄ%ĨLv;vuß;īLMāž“MāHÄ%ā+ŦMÔLÚLv^DßgD-MLMāž“LMāHÄ%ā+ŦQMMÚLß?;eM„Māž“MāHÄ%ā+Ŧ„MÚLß{˜MŊMāž“ŨBŪM1 IŊMŪŪö Ihīß(ŅMÜMāž“ Jß(1ëMöMāž“ Jß”1N*Nāž“ JŪM1 I*NŪŪö I +‘áp!JNâã__p ē*Žßq"YNpNāž“pNé__a íuN‘ːęMâ ”‹N Nāž“ NāHÄ%VIߍ ´NŲNāž“ŨBŪŪö Ahë__s A´'áJũNč'ĪōũNč,ĪōOá‹į‹ßđ O!Oāž“KßŌ 0OGOāž“Ké__n ĪhßŖVOaOāž“ŨBáĮzOë__sí‹á)­OŪņŽķ‹Ū‘í‹ë__nđá) āOë__d dČ*ë__s d´'ë__n dhė77’*ŽPđé__p7’*Žís7˜P*Ž*ŽáŪũ?Pé__a!OĪ6é__b!OĪ6áøũcPé__a!KĪ6é__b!KĪ6áū‡Pé__a!—7é__b!—7ßŪü–P­Pāž“ĪLč\ —V8á,ūÜP9(ŪäÜPë__s´'ã‘áPūQ9(ŪäâQë__câ'%ã‘}ƒ;ß`;*QAQāž“Mé__nĀQ%}Žū}Ī6átūqQé__a![qQé__b![Ī6GQvë7ßc8‹QŗQāž“ŗQŪÔ)!BJ8â!DJ8vQá“ūĐQé__a!WĪ6á¨ūôQé__a!_ôQé__b!_Ī6GQ߇8R=Rāž“ŗQŪÔ)!SJ8ŪW!SJ8â!UJ8ß°8LRtRāž“ŗQŪä§!vÂūâ!xÂūßÔ8ƒRĢRāž“ŗQŪ0Ø!Âūâ!ÂūvÍūß…EĀRØRāž“ØRë__ca'%ĢRvûū}ûūßÛūøRSāž“Sča,xSŨRãRߡ–(S3Sāž“HߘBSMSāž“MS2ásâjSëch‡'%Ũ)<Ä %—SŪņÄ´'ŪĢÛÄ—Svˇ“}Ŧâá–âģSëstÕģSSߝĪSįSāž“GŪM1 *įSīßĄûSTāž“TérhsIT}5ƒ5ßđ+T6Tāž“ŨBßũETPTāž“ŨBėä´'zTé__sä´'é__cä %ß§‰TžTāž“57āHÄ%ßËÄ­TÂTāž“ÂTāHÄ%ÜAę`Ô”ØTíTāž“íTāHÄ%áGßƨU Uāž“ UF7ßä¨ U+Uāž“ Uߊ:UEUāž“ U߯TU_Uāž“>FßnUyUāž“>FßzˆU“Uāž“>FߘĸU­Uāž“>FßļŧUĮUāž“>FßÖUëUāž“k@āHÄ%äÔÚęũUVāž“VāHÄ%ģHäÚÚ)V>Vāž“>VāHÄ%ĮHßk RV]Vāž“]V`9ßUqV|Vāž“|Vü9ßsV›Vāž“›Vö9ß4¯VēVāž“ēV+:ßSÎVŲVāž“ēVßgčVķVāž“ķVÄCß%WWāž“úBāHÄ%ä˛á„ .WCWāž“CWāHÄ%Hä%,ôZWoWāž“oWāHÄ%Ißļ(ƒWŽWāž“.HßÔ(W¨Wāž“¨WQHß%ÛŧWŅWāž“ŅWāHÄ%9H߀ŧåWũWāž“ļHŪ^ā­5Aß ŧ X$Xāž“ļHŪDĮ´%:ߏŊ3X>Xāž“>X?HߎŊRX]Xāž“ļHßÍŊlXwXāž“>Xßŋ†X‘Xāž“>Xß‚ŋ XĢXāž“>XßÉēXĪXāž“ĪXāHÄ%–BäīŋæXņXāž“úBęĪ’Y Yāž“k@á ä3YŪËŋ<%Ū­.ŋ<%á$äiYŪËÅ<%Ū­.Æ<%âî?FĮOĻáŊâYës1Đ´'ës2Đ´'ß œY§Yāž“ŨBáØâĀYŪa3´'á?äZŪRg %âîY H‘âî5# H‘îĸD$ %áîâZŪ˙ÍÍëDáã7ZëfdÎ %ėH$ %aZčAž$´'ča$'ß×pZ{Zāž“ēV߸ŠZ•Zāž“ēVá`ßģZŪŲ–‡ ´'Ū겇 ´'ßC¯ĘZÕZāž“ÕZHáfŨņZëcÍ '%áã[Ū;øė´'ŪĄ?ė´'ßb¯&[>[āž“>[ŪĨm] %J;߀ēR[][āž“>Xߟēl[w[āž“>Xß‚ģ†[‘[āž“>XßDģ [Ģ[āž“ļHßߝē[Å[āž“Å[5ßaŧŲ[ä[āž“ļHęˇÄŒõ[\āž“ÂTß)\\āž“ķVīUäßŌ×0\;\āž“;\(Hßņ×O\Z\āž“;\ߨi\t\āž“;\ßO؃\Ž\āž“;\ßn؝\ĩ\āž“ĩ\Ū;%€ %HߎØÉ\Ô\āž“;\ß­Øã\û\āž“ĩ\ŪĻׂŦÎßÍØ ]]āž“;\ßėØ$];]āž“ĩ\ëfd„ %ß ŲJ]U]āž“;\ß+Ųd]{]āž“ĩ\ëfd† %ßŌÕŠ]ĸ]āž“ĸ]Ū˙žŽ HėD˙´'Ņ]é__s˙´'é__c˙ %vąâá5ãũ]Ū;øĪ´'ëbufĪŅ]áaä^éc\'%ßÁ"^:^āž“Gë__s 2´'đ6—ĸn^éstrĸ´'éreĸn^âælžĨߕî1vy^‡Q‰^Qߏ;˜^¯^āž“Mčņ˙ls^īPãß>Å^Đ^āž“>Fßäß^ę^āž“>Fßņšų^_āž“_75ߊũ_6_ITē'āž“6_čžE•;_Y56ßsĢO_e_āž“e_ëp~ŨB9ßO y_‘_āž“‘_Ū%T9ßéĢĨ_°_āž“°_H9ßĘĢÄ_Ī_āž“°_ߊ Ū_é_āž“]Vß*­ø_`āž“`:ß ­`"`āž“`ßö1`<`āž“ēVßK`V`āž“ēVßEe`p`āž“p`r9á˙ļ`Ų!'%9(ūĨņŪMK Ū ´'ŪÕ ß ļ`īßąĘ`â`āž“â`ë__n>ŽžAßđ°ö`aāž“aë__n >Ž AßŦÂ"a-aāž“-aĐAßáÃAaLaāž“LaîAß0°`akaāž“â`ávä~aITŨá6˙ŋaŲ!'%9(ūĨņŪgn Ô ŋaŪM1 Õ Äaã‘īßąũßabIT %āž“6_évalsbâ…bŌ:˙7ũLbb %}Žäߨũ;b\bIT'%āž“6_évals\bâ…bƒßĢĢpb{bāž“°_}­ĩä}ĩZ“bŖbāž“Ŗb¨bZ@{bál˙îbŲ!'%9(ūĨņŪMK ę îbŪÕ ë ´'īß­ec cāž“ câ7ß‘f!c9cāž“ cë__nģcßĖzHcScāž“Sc*9ß߄gcrcāž“rcđ9ßۏ†cžcāž“žcë__nĀ:ß÷ޞcŊcāž“žcß!Ėc×cāž“ķVßHæcņcāž“ķVߡddāž“dë__n ĸ:ß ™,d7dāž“7dD;ßʙKdcdāž“cdë__n —&;ßÅwd‚dāž“‚dwCßĪÅ–dŽdāž“Ždë__n ÃYCß‚¯Âdčdāž“>[Ū|%  čdâņi  &']HßŲ¯üd"eāž“>[Ū|%Ą "eâņiĄ &']Hß+°6e\eāž“>[Ū|%ĸ \eâņiĸ &'uHßT°pe–eāž“>[Ū|%Ŗ –eâņiŖ &'1:ß}°ĒeĐeāž“>[Ū|%¤ Đeâņi¤ &'¸8ßø°äe fāž“>[Ū|%Ĩ fâņiĨ &']Hß°fDfāž“>[Ū|%Ļ DfâņiĻ %]Hß!ąXf~fāž“>[Ū|%§ ~fâņi§ %]Hßϰ’f¸fāž“>[Ū|%¨ ¸fâņi¨ %1:ßΰĖfōfāž“>[Ū|%Š ōfâņiŠ %uHßxąg,gāž“>[Ū|%Ē ,gâņiĒ %]Hß̝@gsgāž“>[ŪVǝ sgŪͰ %âņi˛ &']HßJą‡gēgāž“>[ŪVǏ ēgŪÍš %âņiģ %]HßHēÎgŲgāž“Ųg~Bßģíghāž“hë__n V¸`B}ÎämÎ2"h2hāž“2h7h¸C h}BhQ%ß˙ũ]h~hITQ%āž“6_évals~hâ…bjŪ{¤ū %ßé2MjXjāž“Xjŗßšljwjāž“wjŐß3‹j jāž“XjāHÄ%ßę¯jÄjāž“wjāHÄ%ßÚGĶjëjāž“ëjë__iØđj‰88ßnIkkāž“kš8ßwo#k.kāž“.kY8ßöGBkMkāž“kß4H\kgkāž“ëjßĩovkkāž“.k}ĨIár†ŋk‡Rč7#NÛmŪMK=ŋkŪÕ>ÄkkkßĢØkōkāž“ōkâņitXMn}8ßĀŧllāž“ļHßî™ l8lāž“7dë__n—á˜änlIE %ëv.nlëi. %Ūh. %8;ߍĮ‚l—lāž“—lāHÄ%œB߲;ĢlÂlāž“Mé__nÉ,ß&ūØlųlIT,āž“6_évalsųlâ…bųEßÕ; m$māž“Mé__fÜ%ßMū:m[mIT%āž“6_évals[mâ…bø5ß|om‡māž“Scë__nHÚxßr–mĄmāž“ēVßĩ°mģmāž“|Vá"ÔmŪ|^+:á5"ímŪ|c+:ßÅümnāž“rcë__ní‚ß*†#n;nāž“rcë__nHí‚ßäSJnbnāž“bnë__iØgn´BēBßxU{n†nāž“†nÅBßCšn˛nāž“˛në__iØˇnŅB×BßeËnÖnāž“ cßÔdånđnāž“ cߨD˙n oāž“ oâB=3o!˛•bCo!˙ōb %ō=oCo¤Hv3oáŋä‰oITŨļŪÆŪ Ļ ¤HŪ: oŪpŋ ´'=­o!˛• Áo!˙ō %ķ¤HģoÁo:v­oáéä pITā­ŪƤHŪ Ļ :Ū: ‰oŪpŋ ´'=.p!˛•ˆ >p!˙ōˆ %ō8p>p5Av.páå„pITJļŪÆŪ Ļ 5AŪ:  pŪpŋ ´'ß~z“pĢpāž“Ģpë__iذp}CƒCßņ6ÄpÜpāž“Üpë__iØápšC6ß…8õpqāž“q C=)q!˛•X=q!˙ōX %ķ%7q=q÷Dv)qáCå†qITŌļŪÆ%Ū Ļ ÷DŪ: qŪpŋ ´'ß0l•q­qāž“­që__iØ˛qįCíCßÄmÆqŅqāž“ŅqøCßãoåqđqāž“đqÛCßknrrāž“đqߊnr)rāž“)rĘC}m~ំlr‡R;A#Nœ­ŪMK=lrŪÕ>qr.r.rv_ËękË4vr˜rāž“˜rvrß ŦrÄrāž“Ärë__iØÉrČDÎDß4ƒŨrčrāž“črŲDßĩÚürsāž“sWEßOns3sāž“)rë__iØ3sĐCßW¯GsRsāž“â`ß•¯aslsāž“â`vrs‡%‚sÄCáså×sËÉœ­ā>lsëc×sŪb lsâî[Ū %âņitޞAßŨēësösāž“>Xßžēttāž“>Xƒt5Avtáĸ˙gtÃ$ömšätŪw… ĻömŪ¸† Ļömë__f Ļtá åtËÉœ­Qtëc'tŪtØ't˛AßbNątŧtāž“ŧtFßÎLĐtčtāž“čtë__iØítF F}CwáÔ˙uÖ%~Suōtßë=&u1uāž“1uv7ß>EuZuāž“1uāHÄ%ßd`iu~uāž“~uāHÄ%ˆ7ß3`’uuāž“~uß+aŦuˇuāž“ˇuš7ßbËuÖuāž“Öu˛7ßž/ęuvāž“včÎ>-¸v,Fī}Hwáō˙+vÖ%ŽB+v vßíN?vWvāž“Wvë__iØ\v2F8Fßķypv{vāž“Scß1zŠv•vāž“Sc߁P¤v¯vāž“¯vCFß OÃvÎvāž“¯vßGOŨvčvāž“Wv}څáˆ&w‡RŦ8#N8xŪMK=&wŪÕ>+wčvčvv6w‡%Fw¸8áĘå›wËÉ8xā>0wëc›wŪb 0wâî[Ū %âņitļx9ßōZ¯wĮwāž“Įwë__iØĖwOFUFߎāwëwāž“žcß\Žúwxāž“žc߆\xxāž“x`Fß[3x>xāž“xßL[MxXxāž“Įw}߅áų†–x‡R=:#NcŒŪMK=–xŪÕ>›xXxXxvĻx‡%ļx+:á÷å yËÉcŒā> xëc yŪb  xâî[Ū %âņitጴ:ß~ y*yāž“ķVß_ 9yDyāž“ķVá$æ]yŪŲ–KÄCá;ævyŪŲ–PÄCáœáÛyŪVĒ ÛyâîMf %âņi %âîŲ– āyâņj %âî| åy]HuH1:ƒöy%:vęyáAzÃ$™ZšäöyŪw… Ļ™ZŪ¸† Ļ™Zë__f ĻöyßķVPzszāž“szé__p ĮUč K xzT:N:áLXļzI_Tp%:é__aMŧļzé__pMŧQWčaMŧģzr:N:ßgZĪzÚzāž“Úz}FßĶXîz{āž“{ë__iØ {lFrFßü]{B{āž“B{é__p Đ\č K G{Ø:Ō:áU_…{I_Tp %é__aMŧ…{é__pMŧZ^čaMŧŠ{ö:Ō:ßpaž{Š{āž“Š{šFßÜ_Ŋ{Õ{āž“Õ{ë__iØÚ{‰FFߝ|î{|āž“|ë__iØ |ĻFŦFßtÄ|*|āž“‚dß6Ä9|D|āž“‚dß‘xS|v|āž“v|é__p ewč K {| CCáęyš|I_TpP;é__aMŧš|é__pMŧīxčaMŧž|)CCß|Ō|Ũ|āž“Ũ|ŽCß:cņ|}āž“}é__p bč K }Ŋ@ˇ@á“dW}I_Tp @é__aMŧW}é__pMŧ˜cčaMŧ\}Û@ˇ@ߎfp}{}āž“{}Dße}§}āž“§}ë__iØŦ}D Dß5ŖĀ}Ë}āž“Ë} AßÛ¨ß}ö}āž“ö}é__x•¨!Dß÷ĸ ~~āž“Ë}äuļŌ'~7~āž“ĪF7~ Bß~qK~n~āž“n~é__p Rpč K s~B Bá×rą~I_TpAļé__aMŧą~é__pMŧÜqčaMŧļ~0B BßōtĘ~Õ~āž“Õ~ÔFß^sé~āž“ë__iØÃFÉFß9g2āž“2ë__iØ7āFæFßTŖKVāž“V)AßŖjuāž“V}r~áB•Ö%Ęk•ußCjŠĖāž“Ėé__p ič K ŅRALAáœk€I_Tp5Aé__aMŧ€é__pMŧĄjčaMŧ€pALAߡe(€3€āž“§}ß6eB€M€āž“{}ßtūc€z€IT'%āž“6_čžE•z€JDßĀŽ€ą€āž“ą€é__p ”~č K ļ€PDJDáô€I_TpČ*é__aMŧô€é__pMŧ€čaMŧų€nDJDßį> 0āž“1ué__p ģ=č K 0īáa@nI_Tpé__aMŧné__pMŧE?čaMŧs”7īß|B‡’āž“’Gßč@ρžāž“žë__iØÁG G}Ũá` ‚I_TpŨé__a'Ļ ‚é__b'Ļ‚âæƒ†'¯Ũȁȁá.đ*‚*‚/‚”7”7á@X‚é__aMĮX‚é__bMĮ]‚”7”7ßZaq‚ˆ‚āž“ˇué__xeˆ‚Ļ7ßŋaœ‚§‚āž“Öu}Íūá΂™|Eé__f .ĢRßũüŨ‚č‚āž“gJᝃŲ!'%9(ŪgnJƒã‘ßéƒ'ƒ<ƒāž“<ƒāHÄ%EßoÖPƒeƒāž“eƒāHÄ%-EáÛƒƒë__x*(VØágÛœƒë__x* VØßæ̃Ãāž“Ãë__x*ååÃEßÔÚ׃âƒāž“âƒ]EßåXöƒ„āž“„ë__x*ÄXų6ß9R"„-„āž“-„Ĩ6ßwRA„L„āž“-„áÅm„I_TpH‘é__r'/m„6ß+J„Œ„āž“Œ„Q6ߧ𠄸„āž“¸„ë__x@BŊ„`Gīßi1Ņ„á„āž“miᄏßJõ„ …āž“Œié__a8s …Ąß. …+…āž“ŨBäS =…R…āž“R…āHÄ%Ґßf…{…āž“GāHÄ%äŒ˛Í…ĸ…āž“t;āHÄ%ßĢą…ƅāž“e_āHÄ%ßČĮՅā…āž“ā…¨BßîJô…†āž“†é__p ÂIč K †ž8¸8áGLZ†I_Tp3é__aMŧZ†é__pMŧLKčaMŧ_†Ü8¸8ß÷Qs†–†āž“–†é__p ËPč K ›†„9~9áPSŲ†I_Tpũé__aMŧŲ†é__pMŧURčaMŧŪ†ĸ9~9ß+/ō† ‡āž“ ‡čë§-ā#ĩ!Fä–ĩZ ‡5‡āž“ŖbāHÄ%ßšĖD‡\‡āž“\‡ŪuA°a‡äH–;äĐ)ôx‡ƒ‡āž“oWäļŌ•‡LJāž“ĪFāHÄ%ßĸqš‡Їāž“n~é__p …RpáPrô‡é__aMŋô‡é__pMŋÜq0Bߐŧˆˆāž“háoã+ˆëfdũ %ß!0:ˆQˆāž“Qˆčë§-āÎũFä†Î2hˆ}ˆāž“2hāHÄ%ßHŒˆŖˆāž“Térhs>Ŗˆƒ5ß2ˇˆˆāž“Tę  ;͈čˆāž“TāHÄ%ß}ž÷ˆ‰āž“Å[ßÁ‰‰āž“Å[á…ã4‰ëfpõëDß3C‰h‰āž“R…Ū[Œ Č*ë__a h‰Ąīk ß{ ƒ‰މāž“GßĶĖ‰ĩ‰āž“\‡Ū‘/ļ%ßREĉΉāž“ Lß(ũŪ‰é‰āž“ĪLvãßėū‰Šāž“ŠčÎõbø8é‰ák>Šé__a!w^7é__b!w^7ßššMŠcŠāž“Niëp~%5á…{Šé__n$à %ášąŠŲ!'%9(čgn$ĐąŠé__f$ĐlFã‘ß(ŊЊāž“ŨBß 7ߊęŠāž“qá€Ũ‹ëcŌ '%ßK7‹‹āž“Üpßf*‹5‹āž“ŨB}h~á&‡s‹‡R´'#NŪMK=s‹ŪÕ>x‹5‹5‹ßÎŒ‹¤‹āž“Gë__s ž´'ßĒŗ‹ˋāž“GŪM1 ĩˋīß˙2ߋī‹āž“Xjī‹šßĪŒŒāž“wjé__a8sŒːßG1.Œ9Œāž“ Jäx KŒ`Œāž“`ŒāHÄ% ‘ßSEtŒ‰Œāž“‰ŒāHÄ% 8ßlkŒ˛Œāž“˛ŒāHÄ%8áÄ=֌xhč7č7č7áÆxhč7čw…zč7踆zč7áå>xhč7I_Tpî7čw…”č7踆”č7>)8ß#JRgāž“†āHÄ%ßÉuv‹āž“‹āHÄ%Đ8ä Ō˜ĸ­āž“CKßęĄŧĮāž“Įæ5ß ĸۍæāž“ĮáŠĸ˙ësam g˙ā5á¤ĸGŽŪą8 sGŽŪž8 tLŽâîGŨ u7ĄîOŨ v7Ąā5ā5ßGĸ`ŽkŽāž“ĮßúŖzŽ…Žāž“…Ž 6ߤ™Ž¤Žāž“…Žáš¤ŊŽësam gŊŽ6á´¤Ūą8 sŪž8 t âîGŨ uGŖîOŨ vGŖ66ßW¤)āž“…Žß,Q8Māž“–†āHÄ%ßÜ\qāž“qāHÄ%–9ßK…œāž“†é__p …ÂIáĀKĀé__aMŋĀé__pMŋLKÜ8ßTԏߏāž“†nßYĩîāž“Ū b `@~9áS‡H‡Rl9#NK‚ŪMKHŪՐMōtōtßE/j‡R~Sāž“ ‡č„v-æ~Sß>T›āž“bn}œ0ęl/-ܲāž“ ‡›ę„/-Üؐíāž“ ‡āHÄ%ßRü‘āž“–†é__p …ËPáÉR7‘é__aMŋ7‘é__pMŋURĸ9ß(VK‘`‘āž“szāHÄ%ßô‰o‘„‘āž“„‘āHÄ%f:áã=¨‘xh7:7:7:áՑxh7:čw…z7:踆z7:á1’xh7:I_Tp%:čw…”7:踆”7:’r:ß1]$’9’āž“B{āHÄ%ß”H’]’āž“]’āHÄ%ę:á>’xhÆ:Æ:Æ:á^Ž’xhÆ:čw…zÆ:踆zÆ:á}é’xhÆ:I_Tp %čw…”Æ:踆”Æ:é’ö:ßWũ’“āž“szé__p …ĮUáÅW8“é__aMŋ8“é__pMŋQWr:ß ^L“c“āž“B{é__p …Đ\áÎ^‡“é__aMŋ‡“é__pMŋZ^ö:߯w›“°“āž“v|āHÄ%ß Āŋ“ԓāž“ԓāHÄ%Cá!>ø“xhîBîBîBáĒ%”xhîBčw…zîB踆zîBáÉ`”xhîBI_TpP;čw…”îB踆”îB`”)Cß1~t””āž“”ˇFßš|“”ž”āž“”ß÷|­”¸”āž“|}î…ဇö”‡RôB#N{ÂŪMK=ö”ŪÕ>û”¸”¸”ƒ •P;v•áöW•Ã$D|šä •Ūw… ĻD|Ū¸† ĻD|ë__f Ļ •ßĩxf•}•āž“v|é__p …ewácyĄ•é__aMŋĄ•é__pMŋīx)CßīŖĩ•Ā•āž“Vß^cĪ•æ•āž“}é__p …bá d –é__aMŋ –é__pMŋ˜cÛ@ßob–3–āž“}āHÄ%ßėžB–W–āž“W–āHÄ%Ī@á@>{–xhš@š@š@á(¨–xhš@čw…zš@踆zš@áGã–xhš@I_Tp @čw…”š@踆”š@ã–Û@ßxi÷– —āž“ĖāHÄ%ß-Ģ—0—āž“0—āHÄ%dAá_>T—xh/A/A/Aát—xh/Ačw…z/A踆z/Aá“ŧ—xh/AI_Tp5Ačw…”/A踆”/Aŧ—pAßÍhЗۗāž“ۗņFßUgī—ú—āž“ۗß“g ˜˜āž“2}ø…á­‡R˜‡RĻ@#N[ĄŪMK=R˜ŪÕ>W˜˜˜ƒh˜ @v\˜áĀŗ˜Ã$āfšäh˜Ūw… ĻāfŪ¸† Ļāfë__f Ļh˜ßLl˜͘āž“ŅqßIÎܘô˜āž“ô˜ŪŲ–9ÄCžCáڇ1™‡R/A#Nœ­ŪMK1™ŪՐ6™uuߊlJ™U™āž“­q}Ą0ę;0-Ül™|™āž“Qˆ|™U™ęS0-Ü’™§™āž“QˆāHÄ%ßgjļ™͙āž“Ėé__p …iákņ™é__aMŋņ™é__pMŋĄjpAߊššāž“š-D}w~áˆSš‡Rš@#N[ĄŪMK/SšŪÕ0XšššáōŒš‡RÁdë__x$Œšë__y%‘š'D'Dß/ŠĨšŋšāž“šâ惆ŖÁdßkŠΚؚāž“ö}ᛇRÁdë__x0›ë__y1 ›'D'Dßõ~!›6›āž“ą€āHÄ%ß1ĖE›Z›āž“Z›āHÄ%bDá~>~›xhM‘M‘M‘á:Ģ›xhM‘čw…zM‘踆zM‘áYæ›xhM‘I_TpČ*čw…”M‘踆”M‘æ›nDß4Ņú›œāž“œŧDßäœ0œāž“ą€é__p …”~á’€Tœé__aMŋTœé__pMŋ€nDß ?hœœāž“1ué__p …ģ=áš?Ŗœé__aMŋŖœé__pMŋE?”7á‚ÛÁœë__x*$cØá¸Ûڜë__x*,cØßpäéœāž“é__x*ŊPä Gß;ߝāž“sá†>I_Tp'%>CĄĄß"EWbāž“‰Œß;kq|āž“˛Œßík‹–āž“–/8ߨlĒĩāž“ĩG8ß•nɝԝāž“.kßÜEã˙āž“‰Œé__p mōDæDáŅF/žé__aM¸/žé__pM¸|Fé__nM¸¨F)8߁mCžhžāž“ĩé__pŽOlé__nŽđôę:lOyžŽžāž“–āHÄ%߁lž¨žāž“ĩßEmˇžĖžāž“ĩāHÄ%ßo۞đžāž“.kāHÄ%ßōI˙ž Ÿāž“†ß˜uŸ$Ÿāž“‹ßJv3Ÿ>Ÿāž“>Ÿâ8ß5wRŸ]Ÿāž“]Ÿú8ßŦJqŸŸāž“†é__p mÂIļIáĄKŊŸé__aM¸ŊŸé__pM¸LKé__nM¸xKÜ8ßŪwҟöŸāž“]Ÿé__pŽŦvé__nŽđôę—vO  āž“>ŸāHÄ%áŠ= I_Tp3é__r'/= ˛8áĮc I_Tp3čÁ\\Ļ8áåđ xhĻ8čw…dĻ8踆dĻ8ááŋ xhĻ8čw…zĻ8踆zĻ8ôáú xhĻ8I_Tp3čw…”Ļ8踆”Ļ8ú Ü8ßŪvĄĄāž“]Ÿßĸw(Ą=Ąāž“]ŸāHÄ%ßĘ~LĄdĄāž“dĄŪŪöœzx 9ßî}xĄƒĄāž“dĄßûP’ĄĄāž“–†ßĢŦĄˇĄāž“qß]€ÆĄŅĄāž“ŅĄ¨9ßHåĄđĄāž“đĄĀ9ßĩQĸ ĸāž“–†é__p mËPŋPáĒRPĸé__aM¸Pĸé__pM¸URé__nM¸Rĸ9ßņdĸ‰ĸāž“đĄé__pŽŋ€é__nŽđôęĒ€Ošĸ¯ĸāž“ŅĄāHÄ%á-ĐĸI_Tpũé__r'/Đĸx9áKöĸI_TpũčÁ\\l9áņ#Ŗxhl9čw…dl9踆dl9áeRŖxhl9čw…zl9踆zl9ôᄍŖxhl9I_Tpũčw…”l9踆”l9Ŗĸ9ßņ€ĄŖŦŖāž“đĄßĩģŖĐŖāž“đĄāHÄ%ßŨˆßŖ÷Ŗāž“÷ŖŪŪöœ‚Ō9߈ ¤¤āž“÷ŖáRæL¤ËÉcŒQöyëc'L¤ŪtØ'öy´:áœņi¤č„v4ÔĻ8áō¤č„v4Ôl9ßĨ>¤Ŧ¤āž“1ué__p mģ=¯=áš?ܤé__aM¸Ü¤é__pM¸E?é__nM¸q?”7ßŋbđ¤Ĩāž“Öué__pŽaé__nŽđôęxaO&Ĩ;Ĩāž“ˇuāHÄ%áą\ĨI_Tpé__r'/\ĨõáĪ‚ĨI_TpčÁ\\ŨáéąĨxhŨčw…zŨč¸†zŨôáėĨxhŨI_Tpčw…”Ũč¸†”ŨėĨ”7߃bĻĻāž“ÖuāHÄ%ßĢi$Ļ<Ļāž“ÖhŪŪöœ[cß>KĻ[Ļāž“1u[Ļ|7ßI`oφĻāž“~ué__a8s†ĻŽ7ß@ašĻąĻāž“ˇué__aZąĻ 7ß0CÅĻĐĻāž“ oá5§I_T1I_T2é__pOŨčÎ>O§īßnC§%§āž“˛ná4ˆ]§‡Rא#NcŪMK=]§ŪÕ>b§ v vá]¸§’HŽBxhŨčw…)kŽB踆)kŽBčC)lŨâæáb)s%Ꭰ¨’HŽBxhŨI_TpŪw…)ŽBŪ¸†)ŽBŪC)Ũ ¨”7áŖC¨ŪņŽí‹Ū‘í‹ë__nđáaˆ{¨‡Rא#NcŪMK{¨ŪՐ€¨ v vߨ/¨´¨‡RŽBāž“vč„v-žŽBáĻ0Õ¨ūx' č K-ÄÕ¨īáΊ‡RŽBÍĻ/čw… ŸŽB踆 ŸŽBčë§ ŸĻ/ß÷U+Š6Šāž“szßÉEŠPŠāž“„‘ßuŠ_ŠjŠāž“jŠx:ß`‹~ЉŠāž“‰Š:ßąVŠšŠāž“szé__p mĮUģUáĻWéŠé__aM¸éŠé__pM¸QWé__nM¸}Wr:ß ŒũŠ"Ēāž“‰Šé__pŽ×Šé__nŽđôęŠO3ĒHĒāž“jŠāHÄ%ß ‹WĒbĒāž“‰Šß͋qdžĒāž“‰ŠāHÄ%ß]•Ē Ēāž“B{ß֓¯ĒēĒāž“]’߈”ÉĒÔĒāž“ÔĒü:ßs•čĒķĒāž“ķĒ;ßē]Ģ#Ģāž“B{é__p mĐ\Ä\á¯^SĢé__aM¸SĢé__pM¸Z^é__nM¸†^ö:ß–gĢŒĢāž“ķĒé__pŽę”é__nŽđôęՔOĢ˛Ģāž“ÔĒāHÄ%ß•ÁĢĖĢāž“ķĒßā•ÛĢđĢāž“ķĒāHÄ%áôŦč„v4Ô7:á{ô Ŧč„v4ÔÆ:ß•w/Ŧ:Ŧāž“v|ßÛŋIŦTŦāž“ԓߍĀcŦnŦāž“nŦ/CßxÁ‚ŦŦāž“ŦGCß5ÃĄŦŦŦāž“ŽdßĮŽģŦÆŦāž“>[ßOxÕŦņŦāž“v|é__p mewYwáDy!­é__aM¸!­é__pM¸īxé__nM¸y)Cß!Â5­Z­āž“Ŧé__pŽīĀé__nŽđôęÚĀOk­€­āž“nŦāHÄ%ß!Á­š­āž“ŦßåÁŠ­ž­āž“ŦāHÄ%á|æô­ËÉ{ÂQ •ëc'ô­ŪtØ' •kCßŗÃŽŽāž“ŽdāHÄ%áæô5Žč„v4ÔîBáQõMŽč„v4ÔzáŧõeŽč„v4Ԛ@ßøbtސŽāž“}é__p mbbáícĀŽé__aM¸ĀŽé__pM¸˜cé__nM¸ÄcÛ@ߥԎųŽāž“ųŽé__pŽĪŸé__nŽđôų@ęēŸO¯$¯āž“$¯āHÄ%á@ß 8¯C¯āž“ųŽßÅ R¯g¯āž“ųŽāHÄ%á'ö¯č„v4ÔúAßb'°2°āž“}ßģžA°L°āž“W–ßmŸ[°f°āž“$¯ßX u°€°āž“ųŽßGi°š°āž“ĖßüĒа´°āž“0—ߎĢðΰāž“ΰvAß™Ŧâ°í°āž“í°ŽAßjąąāž“Ėé__p mi iáöjMąé__aM¸Mąé__pM¸Ąjé__nM¸ÍjpAßB­aą†ąāž“í°é__pŽŦé__nŽđôęûĢO—ąŦąāž“ΰāHÄ%ßBŦģąÆąāž“í°ß­Õąęąāž“í°āHÄ%ßŗpųą˛āž“n~āHÄ%ßEĩ˛2˛āž“2˛āHÄ%$BęļOH˛]˛āž“]˛āHÄ%6Bá’öz˛č„v4Ô/AßÄ~‰˛”˛āž“ą€ßĖŖ˛ޞāž“Z›ß˛ĖŊ˛Ȳāž“ȲtDߝÍܲį˛āž“į˛ŒDß~û˛ŗāž“ą€é__p m”~ˆ~ás€Gŗé__aM¸Gŗé__pM¸€é__nM¸J€nDßFÎ[ŗ€ŗāž“į˛é__pŽÍé__nŽđôę˙ĖO‘ŗĻŗāž“ȲāHÄ%ßFÍĩŗĀŗāž“į˛ß ÎĪŗäŗāž“į˛āHÄ%ß<Đķŗūŗāž“Ēhßŧ ´´āž“črßú'´2´āž“ÄrßzĐA´L´āž“Ēh}kƒáŽˆŠ´‡RM‘#N ÎŪMK=Š´ŪÕ>´L´L´ßØĪŖ´¸´āž“ĒhāHÄ%áũöĐ´č„v4ÔM‘áh÷č´č„v4ÔŨß¸ƒ÷´ĩāž“<ƒß>Öĩĩāž“eƒßã×+ĩ6ĩāž“6ĩ9Eß­×JĩUĩāž“6ĩ߃Ūdĩoĩāž“sßŲ~ĩ‰ĩāž“âƒßÃ`ĄĩąĩŅņųÖāž“~uąĩ3Eß5ŲÅĩĐĩāž“âƒá˙ęĩÖ%´'ęĩ6á!ļ§Ä´'čw….Z´'踆.Z´'<áģˆBļŲē'čÅÉN–´'áEoļ’H´'čw….r´'踆.r´'áé ĸļë__p —Č*Ū' —´'Ū”O —´'အ™X´'č>$%|´'čÆĨ%|´'é__a%|ˇõūļæN+%‡ã__r%Šã™X´'ĄáąPˇš´'Ū>$ Ë´'ŪÆĨ Ë´'ë__a ĖPˇėôĄáã“ˇš´'Ū>$ á´'ŪÆĨ á´'ë__a ᓡôĄß°ˇߡ’H´'āž“Gč>$%ä´'čÆĨ%ä´'é__a%äߡĄß}uķˇ ¸āž“ ¸ë__iظxG~Gß­š$¸/¸āž“Ųgßoš>¸I¸āž“Ųgácž¸Ļ8 Ļ8Ūw…Ļ8Ū¸†Ļ8ŪCĻ8âņ__n/íáh‡RĻ8Ū„vĻ8ᇚY {%Ļ8 Ļ8Ūw…IĻ8Ū¸†IĻ8ŪCIĻ8âî€RN%áÃAš‡RĻ8Ū„v!Ļ8á␚Y {%Ļ8 Ļ8Ūw…[Ļ8Ū¸†[Ļ8ŪC[Ļ8ßĐJŸšĒšāž“ĒšĘ8áÚKĮšé__aMÂĮšÖ8ßûvÛšæšāž“æš9ßëzúšēāž“Scá2ēI_TpQ%é__aŲ2ēé__bŲ7ēÁÂ'Âāž“'ÂMCß.Å;ÂFÂāž“‚dß'xUÂqÂāž“v|é__n cYwuá&y•Âé__aMĩ•Âé__nMĩy)Cß˙ÁŠÂÂÂāž“Ŧé__n§đôá'ųÚÂč„v4Üzá$û&ÃI_TpP;Ūw…qôBŪ¸†qôBŪCqîBâîö.x_ ád HÇRzŪ„vzრ§ÃY {%I_IIîBI_OIîBŪw…îBŪ¸†îBŪCîBâî€R†%áŋ ÉÇRzŪ„v!záŪ ÄY {%I_IIzI_OIzŪw…ŽzŪ¸†ŽzŪCŽzßUÄ'Ä2Äāž“ŽdßĻ{AÄYÄāž“Ũ|ë__n @z}c~á؈—ćRîB#N{ÂŪMK=—ÄŪÕ>œÄYÄYÄá æÄI_IIzI_OIzŪw…ČzŪ¸†ČzŪCČzßÄõÄÅāž“ŽdßÄĮÅ'Åāž“ŽdŪPĸ}íÂáL IŇRš@Ū„vš@ák ¨ÅY {%š@ š@Ūw…Iš@Ū¸†Iš@ŪCIš@âî€RN%á§ ĘŇRš@Ū„v!š@áÆ ÆY {%š@ š@Ūw…[š@Ū¸†[š@ŪC[š@ßc(Æ3Æāž“3ÆÉ@á&dPÆé__aMÂPÆÕ@ß dÆoÆāž“oÆ˙@ߤƒÆŽÆāž“VßĐbÆšÆāž“}é__n cbuáĪcŨÆé__aMĩŨÆé__nMĩÄcÛ@ßß ņÆ Įāž“ųŽé__n§đôäĨļŌĮ,Įāž“ĪF,Į Bá SĮ‡RúAŪ„vúAá! ˛ĮY {%úA úAŪw…IúAŪ¸†IúAŪCIúAâî€RN%á] ÔĮ‡RúAŪ„v!úAá| #ČY {%úA úAŪw…[úAŪ¸†[úAŪC[úAß`q2Č=Čāž“=ČBßqQČmČāž“n~é__n cFpuár‘Čé__aMĩ‘Čé__nMĩr0Bß8ˇĨČžČāž“°é__n§đôájrÖČé__aMÂÖČ*BßwļęČõČāž“õČTBßgē ÉÉāž“ŲgḠ5ÉI_TpAļé__r'/5ÉBáÖ [ÉI_TpAļčÁ\\úAáđ ŠÉxhúAčw…zúA踆zúAôáÅÉxhúAI_TpAļčw…”úA踆”úAÅÉ0BßZļŲÉäÉāž“°ßˇķÉĘāž“°āHÄ%äôÅØĘ/Ęāž“/ĘāHÄ%§Gß‚pCĘNĘāž“n~ßĩ]ĘhĘāž“2˛ßÆĩwĘ‚Ęāž“]˛ßąļ‘ĘœĘāž“°á<žĘ‡R/AŪ„v/Aá[ËY {%/A /AŪw…I/AŪ¸†I/AŪCI/Aâî€RN%á—?ˇR/AŪ„v!/AáļŽËY {%/A /AŪw…[/AŪ¸†[/AŪC[/Aß%jË¨Ëāž“¨Ë^Aá/kÅËé__aMÂÅËjAß_ŦŲËäËāž“äË”AßO°øËĖāž“â`ßŲiĖ.Ėāž“Ėé__n c iuáØjRĖé__aMĩRĖé__nMĩÍjpAß ­fĖĖāž“í°é__n§đôáōĄĖ‡RM‘Ū„vM‘áÍY {%M‘ M‘Ūw…IM‘Ū¸†IM‘ŪCIM‘âî€RN%áM"͇RM‘Ū„v!M‘álqÍY {%M‘ M‘Ūw…[M‘Ū¸†[M‘ŪC[M‘ßĸ€Í‹Íāž“‹Í\DáŦ€¨Íé__aM¨ÍhDßcÍŧÍĮÍāž“ĮÍ’DßSŅÛÍæÍāž“œßVõÍÎāž“ą€é__n cˆ~uáU€5Îé__aMĩ5Îé__nMĩJ€nDß$ÎIÎbÎāž“į˛é__n§đôá•ˇÎŨ ŨŪw…ŨŪ¸†ŨŪCŨâņ__nįîá¨Ų·RŨŪ„vŨáĮ8ĪY {%Ũ ŨŪw…IŨŪ¸†IŨŪCIŨâî€RN%áZ·RŨŪ„v!Ũá"ŠĪY {%Ũ ŨŪw…[ŨŪ¸†[ŨŪC[ŨßÉ>¸ĪÃĪāž“ÃĪ‚7ß}>×ĪķĪāž“1ué__n c¯=uá|?Đé__aMĩĐé__nMĩq?”7ߝb+ĐDĐāž“Öué__n§đôßÜaSĐ^Đāž“^и7áė?{Đé__aMÅ{ĐŽ7ßdbĐ˛Đāž“Öué__n†đé__a†˛Đž7áĶ?ĪĐé__aMÂĪĐŽ7ßĖeãĐîĐāž“ cá^?Ņ’HŨxhŨčw…)kŨč¸†)kŨčC)lŨâæáb)s%á’Ņ’HŨxhŨI_TpŪw…)ŨŪ¸†)ŨŪC)Ũ’Ņ”7áĪōŅ’HŨxhŨĶä_Ūw…)'ŨŪ¸†)(ŨŪC))ŨŪŠ!)*ōŅ”7ßAŌŌāž“’ßĩd Ō+Ōāž“Öh}ũ…á‰iŌ‡RŨ#NcŪMKiŌŪՐnŌ+Ō+Ōßķd‚ŌŌāž“ÖhßĶcœŌ§Ōāž“Öh߯hļŌÎŌāž“Öhë__xĒÎŌÜ7ßr„âŌūŌāž“<ƒé__p mˆƒ|ƒáF….Ķé__aM¸.Ķé__pM¸…é__nM¸…•Gß÷ØBĶMĶāž“sßsŲ\ĶtĶāž“së__p*„œØß×ƒĶŽĶāž“ŽĶEߡŲĸĶēĶāž“së__p*—œØäū×*ĮĖĶáĶāž“6ĩāHÄ%ßÜŪđĶÔāž“sāHÄ%á&ÔI_Tp' é__r'/&Ôīß4×:ÔEÔāž“EÔ Eá1ÛcÔë__x*ŠØáĶÛ|Ôë__x*0cØá-ŠÔI_TpQ%é__aŠÔé__bÂŽÔáP*ÕŲ!'%9(ūĨņŪMK  *ÕŪÕ  /ÕīīßÂÖCÕhÕāž“hÕë__x@rmÕë__y@rrÕũDīīßķÚ†Õ‘Õāž“sáLÛĒÕë__x*ŠØßBåšÕĐÕāž“ĐÕé__x*įÕÕ&G2GߨGéÕ Öāž“ Öé__a+pÖé__b+pÖ555ßå*Ö5Öāž“áîÛNÖë__x*4cØßüŨ]֏Öāž“âƒë__x*ųŠØë__y*ųŠØë__k*úÖīßÛŖÖŽÖāž“âƒß˜ßŊÖČÖāž“âƒßį×ÖīÖāž“īÖë__x*7ôÖĪEÛEá†/×I_T13I_T23é__pOĻ8čÎ>O/׸8ᎅגHĻ8xhĻ8čw…)kĻ8踆)kĻ8čC)lĻ8âæáb)s%áߨגHĻ8xhĻ8I_Tp3Ūw…)Ļ8Ū¸†)Ļ8ŪC)Ļ8Ø×Ü8á8Ø’HĻ8xhĻ8ĶIuŪw…)'Ļ8Ū¸†)(Ļ8ŪC))Ļ8ŪŠ!)*8ØÜ8ßęLLØWØāž“ŧtßÔyfØqØāž“dĄ}Յá3‰¯Ø‡RĻ8#N8xŪMK¯ØŪՐ´ØqØqØßzČØĶØāž“dĄá_ ŲI_T1ũI_T2ũé__pOl9čÎ>O Ų~9á‡_Ų’Hl9xhl9čw…)kl9踆)kl9čC)ll9âæáb)s%á¸˛Ų’Hl9xhl9I_TpũŪw…)l9Ū¸†)l9ŪC)l9˛Ųĸ9áøÚ’Hl9xhl9Ķ\Ūw…)'l9Ū¸†)(l9ŪC))l9ŪŠ!)*Úĸ9á8\ڝl9 l9Ūw…vl9Ū¸†vl9ŪCvl9ßįƒkÚvÚāž“÷Ŗß%„…ڐÚāž“÷ŖájÆÚI_T1AļI_T2Aļé__pOúAčÎ>OÆÚ Bá’Û’HúAxhúAčw…)kúA踆)kúAčC)lúAâæáb)s%áÃoÛ’HúAxhúAI_TpAļŪw…)úAŪ¸†)úAŪC)úAoÛ0BáĪÛ’HúAxhúAĶÅ´Ūw…)'úAŪ¸†)(úAŪC))úAŪŠ!)*ĪÛ0BáCܝúA úAŪw…vúAŪ¸†vúAŪCvúAßzs(Ü3Üāž“Õ~ßPšBÜMÜāž“h}ķ…á`‰‹Ü‡RúA#N´ˇŪMK‹ÜŪՐÜMÜMÜߎš¤Ü¯Üāž“hߘpžÜÎÜāž“n~ÎÜBß*ĩâÜųÜāž“2˛é__a8sųÜ*BßÛĩ Ũ$Ũāž“]˛é__aZ$Ũ$%|Č*čÆĨ%|Č*é__a%|lŪâæN+%‡ã__r%ŠãĄát´ŪšČ*Ū>$ ËČ*ŪÆĨ ËČ*ë__a Ė´ŪėôĄáĻ÷ŪšČ*Ū>$ áČ*ŪÆĨ áČ*ë__a á÷ŪôĄßĶßCß’HČ*āž“Gč>$%äČ*čÆĨ%äČ*é__a%äCߥáŪ`ßé__n$á %áķßŲ!'%é__c$Ĩ'%áˇßŲ!'%9(čgn$˛ˇßé__f$˛Ęjã‘á=ōßŲ!'%9(čgn$îōßé__f$î…Fã‘vißãG āāāž“ā÷ßv"ā‡X‘2āX‘ßø;AāXāāž“Mčņ˙āvCĻáĪæ’āŪlpXāën %â‘OĻá濍āéc…<%á˙æĀāëch'%áįáāécË'%éosËp7á/įáITouëxJuß<á&áāž“Mé__põuáMįIáës&ĐIáëos&Đp7ô1áåĐsáŪ‘/&Osáëos&Op7īáeįĻáITŪ‘/&Ļáëos&p7ôīá„įĶáëch<%âî‹ë‘Ķá5%ášįûáës&Ūûáëos&Ūp7k5áŅ%âŪ‘/&O%âëos&Op7+‘á˛įXâIT, Ū‘/&Xâëos&p7ô+‘ßš&lââāž“âāHÄ%‘ßō•â­âāž“Gë__c Į'%ß/›ŧâĮâāž“_ß›ūŨâūâIT/üāž“6_évalsūââ…b_5ęÂūUã)ãāž“6_āHÄ%äI ;ãPãāž“‘_āHÄ%t'%`ãu‘' }PãßÛū|ããITPãāž“6_évalsãâ…b`ãánããŲ!'%9(ūĨņŪMK  ããŪÕ  ´'īt'%øãu‘' }čãß˙ä5äITčãāž“6_évals5äâ…bøãß)˙PäqäITāž“6_évalsqäâ…bīt'%†äu‘'}väßP˙ĸäÃäITväāž“6_évalsÃäâ…b†ä}JGßw˙ääåITJGāž“6_évalsåâ…bČä}?ßž˙&åGåIT?āž“6_évalsGåâ…b åt'%\åu‘'}LåßÅ˙xå™åITLåāž“6_évals™åâ…b\åßė˙´åÕåIT3āž“6_évalsÕåâ…b¸8t'%ęåu‘' }Úåßæ'æITÚåāž“6_évals'æâ…bęå}Ķß:HæiæITĶāž“6_évalsiæâ…b,æt'%~æu‘'}næßašæģæITnæāž“6_évalsģæâ…b~æt'%Đæu‘'}Āæßˆėæ įITĀæāž“6_évals įâ…bĐæt'%"įu‘'}į߯>į_įITįāž“6_évals_įâ…b"įt'%tįu‘'}dįß֐įąįITdįāž“6_évalsąįâ…btįt'%Æįu‘'}ļįßũâįčITļįāž“6_évalsčâ…bÆįŨŊĢ(ą%(čë__x(ą%t'%8ču‘' }(čß$TčučIT(čāž“6_évalsučâ…b8čt'%Šču‘'}zčßKĻčĮčITzčāž“6_évalsĮčâ…bŠčt'%Üču‘'}ĖčßrøčéITĖčāž“6_évalséâ…bÜčá3#M釕ŪÚtâMéŪ͆ãRéīīßĩ™fé~éāž“~éŪá…2/2ßŅ™’é§éāž“~éāHÄ%ß`ĀļéÁéāž“oKßDĀĐéčéāž“oKŪ‘/Účé|@ßCÁüéęāž“ęŽ@ßbÁę&ęāž“ęß$Á5ę@ęāž“@ęv@߁ÁTęlęāž“@ęŪ‘/Ôlę|@ä™8ƒęŽęāž“*2ß۝ę¨ęāž“ŅWß/ܡęÂęāž“ÂęcHßōxÖęáęāž“dĄßƒđęûęāž“÷Ŗß´Ŧ ë ëāž“ ëëp~א:ßĐŦ4ëIëāž“ ëāHÄ%ߍXëcëāž“dß0—rë}ëāž“cdߎ—ŒëĄëāž“cdāHÄ%ß›°ëÅëāž“dāHÄ%äÕܸ×ëėëāž“ÂęāHÄ%á¤(ėI_Tp %é__a'Ļ(ėé__b'Ļ-ėâæƒ†'¯ %Ė:Ė:áŅį]ėIE %ŪVL)7ëvL&;ß-ŋlėwėāž“ļHäŅČ1‰ė”ėāž“ĪXßqĮŖėšėāž“—lëp~–Bßn¸ČėĶėāž“háđįėėŪ5|Ÿ*Žáč"íËÉ[ĄQh˜ëc'"íŪtØ'h˜A߇Ã6íKíāž“KíāHÄ%âAßRÂ_ítíāž“tíāHÄ%ÄAßÔŽˆííāž“aāHÄ%ß“ĸŦíÁíāž“Ë}āHÄ%ßĐíčíāž“ŨBŪŪö Dhá-čîëch'%áZ,îŪTôÄ ?ßxā(î@îāž“CWŪĄ‘ß @î¸8t'%Uîu‘' }Eîß™qî’îITEîāž“6_évals’îâ…bUît'%§îu‘'}—îßĀÃîäîIT—îāž“6_évalsäîâ…b§ît'%ųîu‘'$}éîßįī6īITéîāž“6_évals6īâ…bųît'%Kīu‘'?};īßgīˆīIT;īāž“6_évalsˆīâ…bKīt'%īu‘'}īß5šīÚīITīāž“6_évalsÚīâ…bīt'%īīu‘'>}ßīß\ đ,đITßīāž“6_évals,đâ…bīīt'%Ađu‘'=}1đ߃]đ~đIT1đāž“6_évals~đâ…bAđt'%“đu‘'C}ƒđßǝđĐđITƒđāž“6_évalsĐđâ…b“đß1äđīđāž“|Vߝ ūđ ņāž“ķVáq,"ņŪnQŧ %áˆ,;ņŪ;ˇ %}'ßŅWņxņIT'āž“6_évalsxņâ…b;ņßdŒņ—ņāž“p`áĶŨ°ņëstrā °ņô1t'%Åņu‘'˙}ĩņßøáņōITĩņāž“6_évalsōâ…bÅņá›ã9ōëfd÷ %ëbuf÷*ŽŪ[Ū÷Q%t'%Iōu‘'}9ōßeō†ōIT9ōāž“6_évals†ōâ…bIōt'%›ōu‘'}‹ōßFˇōØōIT‹ōāž“6_évalsØōâ…b›ōt'%íōu‘'.}Ũōßm ķ*ķITŨōāž“6_évals*ķâ…bíōt'%?ķu‘'2}/ķß”[ķ|ķIT/ķāž“6_évals|ķâ…b?ķt'%‘ķu‘'4}ķßģ­ķÎķITķāž“6_évalsÎķâ…b‘ķ}Œ“ßâīķôITŒ“āž“6_évalsôâ…bĶķt'%%ôu‘'&}ôß AôbôITôāž“6_évalsbôâ…b%ôt'%wôu‘'1}gôß0“ô´ôITgôāž“6_évals´ôâ…bwô}HßWÕôöôITHāž“6_évalsöôâ…bšôt'% õu‘'"}ûôß~'õHõITûôāž“6_évalsHõâ…b õt'%]õu‘'(}MõßĨyõšõITMõāž“6_évalsšõâ…b]õt'%¯õu‘'}ŸõßĖËõėõITŸõāž“6_évalsėõâ…b¯õt'%öu‘'}ņõßķö>öITņõāž“6_évals>öâ…bö}ß_ö€öITāž“6_évals€öâ…bCöß^!”öŦöāž“AAŪÛAD%ß˙ ģöÆöāž“AAt'%Ööu‘'}ÆößAōö÷ITÆöāž“6_évals÷â…bÖöáCč0÷ëch˜'%īŸ,ßpĄF÷\÷āž“\÷ëx a÷Ī5Õ5ß><u÷Œ÷āž“Mé__fām%߀Ŗ›÷ą÷āž“ą÷ëx ļ÷ō5ø5ß9(Ę÷Õ÷āž“ Jß 1ä÷ī÷āž“ JáX#ø‡•, ŪÚtâøŪ͆ã#ø+‘+‘}.øM(ßb IøaøITM(āž“‘_Ū‘/aø(ø}lø(áY萸IT(čŽ^퐸føáÃËøI_T1I_T2´'é__pOŨčÎ>OËø6áë!ų’HB‘xhŨčw…)kB‘踆)kB‘čC)lŨâæáb)s%átų’HB‘xhŨI_TpŪw…)B‘Ū¸†)B‘ŪC)Ũtų”7á\Ļų’HB‘čw….rB‘踆.rB‘ßjžųøųxhB‘āž“ÖhŪw…B‘Ū¸†B‘âņ__nEjßJjú<ú’HB‘āž“ÖhŪw…ęB‘Ū¸†ęB‘ėôß+bKúbúāž“Öué__abúž7}mút´'}úu‘'áĢ, úYLg %Ūxų úgú}Ģút´'ģúu‘'áË,ŪúYLg %ŪxųŪúĨúß ōúũúāž“>Fßā  ûûāž“ķVáfûY {%I_IIîBI_OIîBŪw…ŽîBŪ¸†ŽîBŪCŽîBáģĢûI_IIîBI_OIîBŪw…ČîBŪ¸†ČîBŪCČîBáĻ>íû’HîBxhîBčw…)[îB踆)[îBčC)\îBáí>ü’HîBxhîBčw…)kîB踆)kîBčC)lîBâæáb)s%á‘ü’HîBxhîBI_TpP;Ūw…)îBŪ¸†)îBŪC)îB‘ü)Cá^ņü’HîBxhîBĶŒŋŪw…)'îBŪ¸†)(îBŪC))îBŪŠ!)*ņü)Cáž;ũîB îBŪw…vîBŪ¸†vîBŪCvîBßšzJũUũāž“Ũ|á̉ũ‡RîB#N{ÂŪMKũŪՐ’ũYÄYÄßėĀĻũžũāž“@ęŪ‘/Åžũ|@ßĸŌũŨũāž“Ë}ßVŽėũ÷ũāž“aßĪĒūūāž“ōkßŦĨ ū8ūāž“8ūŪ™š ¨CĻ)7ß6ÂLūbūāž“tíëp~@7ę Ô”sū~ūāž“íTßkÍūŖūāž“Kíëp~ÜA߯˛ūŊūāž“Ŋū„BßIßŅūÜūāž“CWá%øūâî-ĨIâ$ß~˙˙āž“TérhsD˙ƒ5īučßdž9˙D˙āž“>Xáģãi˙ëfdķ %ŪĄ?ķ´'á{č ˙čuAû ˙âæŧ˙ Uâî…ëDô1īŒčáÖãŪ˙ëfdú %ëbufúuŪ[ŪúQ%ßc¨í˙(āž“(čądė-čö˙í %čFî %č9dī %@7ô1äōÕDYāž“ĸ]āHÄ%ä/Õdk€āž“€āHÄ%ķGäÖ-—Ŧāž“ŦāHÄ%˙Gß;×Āåāž“ĩ\Ū—l´'Ū3lú1߃žô˙āž“ļHī˜čīĄčß/Ø4āž“ĩ\Ū¨Ļ~%ßÅCNāž“C:ߨ¨]hāž“ UßÍÔwļāž“€Ū—f´'Ū3fú1Ū˙Íg´'Ū g %ßEÖÅęāž“ŦŪ—/´'Ū3/ú1īĒčßIž āž“ļHßķž%āž“ļHßĪh4?āž“Öhß–„NYāž“Y'EßJ„m‰āž“<ƒé__n c|ƒuá(…­é__aMĩ­é__nMĩ…•GßTŲÁĖāž“sß“ŲÛāž“së__x*‰â*‹œØKEßēį:āž“:é__a+p?é__b+pD8G>G#7ß!æXpāž“ÃŪ„v*pÉEßįė„§āž“§é__a+pŦé__b+pąáEįE#7áļčÎéstr/*´'ß…čŨčāž“čEß0ëüāž“ë__x0Ģ™EĨEß;\-8āž“8á6ß>YLWāž“W7ßzYkvāž“„ßZ\…āž“8ß$ZŸˇāž“Wë__x*;ˇ7ßUęËķāž“čë__x0ķķâņ__p0õįŸEt'%u‘'!}øßh$EITøāž“6_évalsEâ…bętė0Z[pāž“čāHÄ%ßwŠāž“ЉGß™užŠāž“Šß×u¸Ãāž“ ¸}†á؉‡RB#N´ˇŪMK=ŪÕ>ÃÃáĐ\’H$uxhúAčw…)k$u踆)k$učC)lúAâæáb)s%ᯒH$uxhúAI_TpAļŪw…)$uŪ¸†)$uŪC)úA¯0BáƒrĖé__aMÅĖ*Bß˙ļāāž“°é__n†đé__a†ZBß›Å"āž“/ĘßÅ1Iāž“/ĘŪ‘/ÚIrBß_Æ]hāž“Ŋūß žw‚āž“ļH}8ßžŋIT8āž“6_évalsŋâ…b‚ßČ ĶŪāž“]Vß=ĩíāž“Ŗbëkey_ô1áŠB‡Rl9#NK‚ŪMK/BŪÕ0GōtōtßT[fāž“†n߃uāž“ĀBŪRãô1t'%ĸu‘':}’ßļžßIT’āž“6_évalsßâ…bĸt'%ôu‘'}äßŨ 1 ITäāž“6_évals1 â…bôáöãO ësrcĶ´'t'%_ u‘'3}O ß{ œ ITO āž“6_évalsœ â…b_ ßj° Ë āž“Ë âîÄ`ļH¤HßÔß ÷ āž“›VŪ´¯1üäãü K āž“C:âîÄ ļHîÄĀ P;îß ë,îę˛ Ë ßĖ!Z  āž“AAâîÄ€ ļHîÄĀƒ P;îߊ Ëčâņi‹ %īĐčáŨč× čû‡ĩâæVėˆBhæŅ Ž%ßúŧæ ņ āž“ļHßČĨ  āž“8ūŪ™š ĒCĻßąŖ' 2 āž“Ë}ßsŖA L āž“Ë}áA‘ Ã$u¨šäh˜Ūw… Ļu¨Ū¸† Ļu¨ë__f Ļh˜ßÛŧ  7 āž“ļHâî/c–%î;įœ%îgƒĄ%îΰ%îÄžP;î˜ėš%î_$ģ%âņiŧ %âîßÁËčâîPģŲ %ߥŋF ^ āž“ļHŪ‘/3%äÂļŌp { āž“ĪFyÔ&Õ  D‚ô&ÚIT,ųEp7á† Ô IT,č‘/&ÚÔ éos&Úp7â|&öûųEáōč IT,ĻæéŪ‘/&Q ëos&Qp7ųEá'é@ IT,Ū‘/&a@ ëos&ap7ųEáDŌj Ū‘/&Oj ëos&Op7ųEáFé IT,Ū‘/&đ ëos&đp7ôųEáŌĮ Ū‘/&ĢĮ ëos&Ģp7ųEákŅå Ū‘/Må ųEáeéIT1,IT2,Ū‘/˜ųEųEáMûnI_Tp%:Ūw…q=:Ū¸†q=:ŪCq7:âîö.x_ ásÍY {%I_II7:I_OI7:Ūw…7:Ū¸†7:ŪC7:âî€R†%á¯Y {%I_II7:I_OI7:Ūw…Ž7:Ū¸†Ž7:ŪCŽ7:áëaI_II7:I_OI7:Ūw…Č7:Ū¸†Č7:ŪCČ7:á×>Ŗ’H7:xh7:čw…)[7:踆)[7:čC)\7:áô’H7:xh7:čw…)k7:踆)k7:čC)l7:âæáb)s%áNG’H7:xh7:I_Tp%:Ūw…)7:Ū¸†)7:ŪC)7:Gr:Ꭷ’H7:xh7:Ķt‰Ūw…)'7:Ū¸†)(7:ŪC))7:ŪŠ!)*§r:áÎņ7: 7:Ūw…v7:Ū¸†v7:ŪCv7:ßīX āž“Úzß˙%āž“d}ä…á2Šc‡R7:#NcŒŪMKcŪՐh%%ß=Ž|‡āž“dávûĶI_Tp %Ūw…qŽ'Ū¸†qŽ'ŪCqÆ:âîö.x_ á2Y {%I_IIÆ:I_OIÆ:Ūw…Æ:Ū¸†Æ:ŪCÆ:âî€R†%á<Y {%I_IIÆ:I_OIÆ:Ūw…ŽÆ:Ū¸†ŽÆ:ŪCŽÆ:áxÆI_IIÆ:I_OIÆ:Ūw…ČÆ:Ū¸†ČÆ:ŪCČÆ:á?’HÆ:xhÆ:čw…)[Æ:踆)[Æ:čC)\Æ:áĒY’HÆ:xhÆ:čw…)kÆ:踆)kÆ:čC)lÆ:âæáb)s%áÛŦ’HÆ:xhÆ:I_Tp %Ūw…)Æ:Ū¸†)Æ:ŪC)Æ:Ŧö:á ’HÆ:xhÆ:͇“Ūw…)'Æ:Ū¸†)(Æ:ŪC))Æ:ŪŠ!)* ö:á[VÆ: Æ:Ūw…vÆ:Ū¸†vÆ:ŪCvÆ:ßø_epāž“Š{ߘŠāž“cd}é…á_ŠČ‡RÆ:#Nv–ŪMKČŪՐ͊ŠßP˜áėāž“cdáŸû8I_Tp @Ūw…qĻ@Ū¸†qĻ@ŪCqš@âîö.x_ ፗY {%I_IIš@I_OIš@Ūw…š@Ū¸†š@ŪCš@âî€R†%áÉæY {%I_IIš@I_OIš@Ūw…Žš@Ū¸†Žš@ŪCŽš@á+I_IIš@I_OIš@Ūw…Čš@Ū¸†Čš@ŪCČš@á9?m’Hš@xhš@čw…)[š@踆)[š@čC)\š@á7ž’Hš@xhš@čw…)kš@踆)kš@čC)lš@âæáb)s%áh’Hš@xhš@I_Tp @Ūw…)š@Ū¸†)š@ŪC)š@Û@á¨q’Hš@xhš@ĶlžŪw…)'š@Ū¸†)(š@ŪC))š@ŪŠ!)*qÛ@áčģš@ š@Ūw…vš@Ū¸†vš@ŪCvš@ጊķ‡Rš@#N[ĄŪMKķŪՐøššßėŊ āž“ļHáČûcI_Tp5AŪw…q;AŪ¸†q;AŪCq/Aâîö.x_ áÂY {%I_II/AI_OI/AŪw…/AŪ¸†/AŪC/Aâî€R†%áVY {%I_II/AI_OI/AŪw…Ž/AŪ¸†Ž/AŪCŽ/Aá’VI_II/AI_OI/AŪw…Č/AŪ¸†Č/AŪCČ/Aáj?˜’H/Axh/Ačw…)[/A踆)[/AčC)\/AáÄé’H/Axh/Ačw…)k/A踆)k/AčC)l/Aâæáb)s%áõ<’H/Axh/AI_Tp5AŪw…)/AŪ¸†)/AŪC)/A<pAá5œ’H/Axh/AĶ­ĒŪw…)'/AŪ¸†)(/AŪC))/AŪŠ!)*œpAáuæ/A /AŪw…v/AŪ¸†v/AŪCv/Aß8¯õāž“aßv¯āž“aᚊR‡R/A#Nœ­ŪMK/RŪÕ0Wuuß-Îkƒāž“2hŪa35ƒô1ßp ¸Ö%/Aāž“)rë__iā¸uáæŠūũ_;Aąœ/A#Nœ­ŪMK6ūŪÕ7.rußXm/āž“Ņqë__n ōkáņû{I_TpČ*Ūw…q9DŪ¸†q9DŪCqM‘âîö.x_ á§ÚY {%I_IIM‘I_OIM‘Ūw…M‘Ū¸†M‘ŪCM‘âî€R†%áã)Y {%I_IIM‘I_OIM‘Ūw…ŽM‘Ū¸†ŽM‘ŪCŽM‘ánI_IIM‘I_OIM‘Ūw…ČM‘Ū¸†ČM‘ŪCČM‘á›?°’HM‘xhM‘čw…)[M‘踆)[M‘čC)\M‘áQ’HM‘xhM‘čw…)kM‘踆)kM‘čC)lM‘âæáb)s%á‚T’HM‘xhM‘I_TpČ*Ūw…)M‘Ū¸†)M‘ŪC)M‘TnDá´’HM‘xhM‘ĶąËŪw…)'M‘Ū¸†)(M‘ŪC))M‘ŪŠ!)*´nDá ūM‘ M‘Ūw…vM‘Ū¸†vM‘ŪCvM‘á‹6‡RM‘#N ÎŪMK6ŪՐ;L´L´ßZĪOZāž“ĒháI‹’‡RM‘#N ÎŪMK/’ŪÕ0—L´L´ßOCĢļāž“ o߃ÅŨāž“črë__nbáÕųâîUPmcßDĪ  āž“ ÂDáéx ëstr¸x ŪPv¸'%Ūđ$šÄ7âîL×ēcņposģhâî3ĄŊô1á­éą ëstr ´'Ū–ė  %âņiĸ %=Õ !˛•Bé !˙ōB %ķ %ã é ÄCvÕ áÅé3!Ū2A3!Ū:Bą âņsumC %âņiD&'˛Aááé{!ëstrŗ´'âî9Ą´^Íâņpģ´'ņchÃē'öŒ@Ÿ!čŸ^/n %觇/n %ßļEŽ!Æ!āž“ØRë__c3'%÷Ÿ!œâ!õ!øŽ!‘ø¸!‘÷K9`œ""ø.K‘ųĶėœ9"øŪė‘ú…œQ"_"ûž“Ë ‘üŸœw"…"ûž“Ë ‘úį!œ"Ģ"ûž“AA‘ú"œÃ"Ņ"ûž“AA‘÷tKi*œí"÷"øƒK‘ߘ##āž“Ŧ@÷÷"L~œ-#7#ø#‘ßŧF#Q#āž“Ŧ@÷7#œm#w#øF#‘üāœ##ûž“Ŧ@‘ü*œĩ#Ė#ûž“oW‘ũĖ#‘]Hü/*œé# $ûž“oW‘ũ $‘ũ %‘]Hü]*œ&$=$ûž“oW‘ũ=$‘]Hü†*œZ$q$ûž“oW‘ũq$‘]Hü¯*œŽ$Ĩ$ûž“oW‘ũĨ$‘uHüØ*œÂ$Ų$ûž“oW‘ũŲ$‘1:ü+œö$ %ûž“oW‘ũ %‘¸8ü*+œ*%A%ûž“oW‘ũA%‘1:üS+œ^%u%ûž“oW‘ũu%‘uHü|+œ’%Š%ûž“oW‘ũŠ%‘]HüĨ+œÆ%Ũ%ûž“oW‘ũŨ%‘]HüÎ+œú%&ûž“oW‘ũ&‘ũ %‘]Hüü+œ7&N&ûž“oW‘ũN&‘]HüQÉœk&y&ûž“ĪX‘÷HWVĘœ•&Ÿ&øZW‘üīœˇ&Å&ûž“Ë ‘üœŨ&ë&ûž“Ë ‘áO"'Ū|i+:üÄ 0œ'•'ûž“ķV‘ūļx+#6 ˙ŪxøĶx‘# Ÿ€+#íx€+#üxūë&:‚ö&]ái"Ž'Ū|n+:üãP*œÆ'?(ûž“ķV‘ūļx[; ˙ŪxøĶx‘# Ÿ€[íxp€[üxū•'h‚ 'Íáƒ"X(Ū|s+:ü €*œp(Í(ûž“ķV‘ūļx‹@ ˙ŪxøĶx‘# Ÿ€‹íx뀋üx á"æ(Ū|x+:ü! °*œū([)ûž“ķV‘ūļxģE ˙ŪxøĶx‘# Ÿ€ģíxI€ģüxhü@ āœs)­)ûž“ķV‘ūŖcä J ø˛c‘# Ÿø˛c‘# Ÿü}ßœÅ)Ü)ûž“CW‘ũÜ)‘]Hüũßœų)*ûž“CW‘ũ*‘]Hüáœ-*D*ûž“CW‘ũD*‘]Hüsáœa*x*ûž“CW‘ũx*‘]HßwÜŒ*—*āž“Âę÷}*Qđœŗ*Ŋ*øŒ*‘ú[Ķ%œÕ*ō*ûž“ō*‘ƒĄ‘f÷*‘ĪG¸8÷HKļœ+"+øZK‘÷ĮT÷ųœ>+H+øØT‘÷Wz7œd+n+ø.W‘÷ëU ΜŠ+”+øũU‘÷VË\œ°+ē+ø)V‘÷HKúœÖ+ę+øZK‘„”{ ÷Kdœ,,ø.K‘„”{ ÷tKLöœ6,J,øƒK‘„”{ ÷ĮTĮĻœf,z,øØT‘„”{ ÷ëUģOœ–,Ē,øũU‘„”{ ÷VŖuœÆ,Ú,ø)V‘„”{ ÷WRÄœö, -ø.W‘„”{ ÷HW9Lœ&-:-øZW‘„”{ áôéX-IT¸ëxSP;ßŪŽg-|-āž“>[āHÄ%…X-Š0ˆœ˜-’/øg-‘†ž­X'x .˙æ­‚Û­Ļū•X'(˙I•˙<•‚/•žū:-b Ŧ‚L- †ų­w É.˙Žūš­Š˙Š­‡&­ ˙5­˙K­‚?­€‡ņŦƒ ˛˙üŦ˙­‚­/‡ÆŦƒ Mš˙ÕŦ˙ëŦ‚ßŦ/„Œ”{ †ų­™w ‡/˙Žūš­™Š˙Š­‡&­Ÿ ˙5­˙K­‚?­B€Ÿ‡ņŦŖ˛˙üŦ˙­‚­U‡ÆŦŖMš˙ÕŦ˙ëŦ‚ßŦU„Ŧ”{ „¸Š{ ÷X-˜¨Ā(œŽ/Č/øg-‘ˆÚ„â”{ üFÜđ0œā/0ûž“Âę‘ũ %‘ũ %‘ ˆ÷zNiT)œ"020ø‹N‘ˆ$÷zN%3œN0‡0ø‹N‘‰zN ”|0‚‹Nhˆ%„-”{ …ŗdÖy NœŖ01øÂd‘øĖd‘€46˙Ėd˙Âd€46Ûd‡Šhd4  ‚wdž‚wdž…íd˙ˇpNœ$1‰1øüd‘øe‘€„6˙e˙üd€„6eÖŠhd„8Ą ‚wd ‚wd …'e;:ĀNœĨ1 2ø6e‘ø@e‘€Ô6˙@e˙6e€Ô6Oe%ŠhdÔXĸ ‚wd\‚wd\…ae‚‚Nœ&2‹2øpe‘øze‘€$6˙ze˙pe€$6‰etŠhd$xŖ ‚wdĢ‚wdĢ…›e´e`Nœ§2 3øĒe‘ø´e‘€t6˙´e˙Ēe€t6ÃeÊhdt˜¤ ‚wdú‚wdú…Õe ė°Nœ(33øäe‘øîe‘€Ä6˙îe˙äe€Ä6ũeŠhdĸĨ ‚wdI‚wdI…f:qOœŠ34øf‘ø(f‘€7‚(fa‚f€€77fŸūhdĻ ‚wdׂwd×…IfNPOœ24Ÿ4øXf‘øbf‘€d7‚bfü‚Xf€d7qf:ūhdd§ ‚wdr‚wdr…ƒfŸ Oœģ4(5ø’f‘øœf‘€´7‚œf—‚’f7ĢfÕūhd´¨ ‚wd ‚wd …Ŋf¸đOœD5ą5øĖf‘øÖf‘€7‚Öf2‚ĖfQ€7åfpūhdŠ ‚wd¨‚wd¨…÷fđŪ@OœÍ5:6øg‘øg‘€T7‚gÍ‚gė€T7g ūhdTĒ ‚wdC‚wdC…1gˆRœV6Ę6ø@g‘øJg‘øWg‘€¤:˙Wg˙Jg˙@g€¤:fghŠhd¤Ø˛ ‚wdŸ‚wdŸ…xgk>đSœæ6f7ø‡g‘ø‘g‘øžg‘€;‚žgˇ‚‘gÖ‚‡gę€;­g ūhdģ ‚wd)‚wd)ųī PrœÖ7‚ú Nø!‘‹ø!‹%!ģŠQaX0D‚`aū‚`aūŒ} Đšœ+8‚ˆ 5 • ú‹X¤ Ž „Ŋ{ „5Õ{ „_Õ{ ŽKLpPœC89‚ZLč ‚dL ‰'L€p öû8>L‚2L* Š Ä8‚>LO ‚2Ld ‡ĘKŠ R‚áKO ‚ÕKd ‘ôK  T‚ Ly ‚˙KŽ ‹¨LŖ „ˇv äņŪÄ 9-9āž“-9āHÄ%oH÷9ļXœN9:ø9‘’9ĀÄ ë9‚9ļ ŠW…āÄ ‚f…ė †ģI #ą9‚ĘIė ŠKL%ø #‚dL. ‚ZL[ “I+8”R‘o„6”{ „R”{ ßė¸:$:āž“hāHÄ%á#ņZ:xhúAčw…dúA踆dúAxhúA÷ĘA‡œv:…<øĘ‘Š:Ø‚:y †ŠÉ'H¨Î;‚ŋÉy ‚ŗÉž ‚§Éą ‡[É'H—‚{Éž ‚oÉą €'H‡$:'H~‚D:ž ‚8:Ä ‘:É+(g‚NÉī ‘ƒ‡+(]‚•‡ī ŠW…+(Ō‚f…' ’KL+H #Ģ;‚dLc ‚ZLƒ “]+8”R‘LūģIG #‚ĘI' ūäÉoŠøķÉ‘#Ÿ‡߯o ˙°Ą ‚ø¯à €o‡ǝs ˛˙ĩ¯‚ͯÖ ‚Á¯ø ‡¯s Mš˙ޝ‚¤¯Ö ‚˜¯ø „|”{ ÷ĘRņ˜œĄ<Ō>øĘ‘†ĘqØĮ>‚Ę Š:hØ‚:* †ŠÉ'H¨>‚ŋÉ* ‚ŗÉO ‚§Éb ‡[É'H—‚{ÉO ‚oÉb €'H‡$:'H~‚D:O ‚8:u ‘:É+€g‚NÉ  ‘ƒ‡+€]‚•‡  ŠW…+€Ō‚f…Ø ’KL+  #õ=‚dL‚ZL4“]+8”R‘LūģIG #‚ĘIØ ūäÉoŠøķÉ‘#Ÿ‡߯o ˙°R‚ø¯t€o‡ǝw˛˙ĩ¯˙ͯ‚Á¯‡‡¯wMš˙ޝ˙¤¯‚˜¯‡„€”{ „”{ ßQdá>ö>āž“ÖhāHÄ%áBņ,?xhŨčw…dŨč¸†dŨxhŨ÷Ō>—gnœH?Aøá>‘†ąĨ;¨h@øæĨ‘‚ÚĨš‚ÎĨ­‡‚Ĩ;—‚ĸĨš‚–Ĩ­€;‡ö>;~‚?š‚ ?Ā‘aĨĀg‚uĨë‘W…Ā]‚f…ë’KLā #F@‚dL#‚ZLC“L+8”R‘LūģI7 #‚ĘIëūņĨVŠøĻ‘‡á¤V ˙đ¤‚Ĩa‚ú¤€V‡Ŧ¤Z ˛˙ˇ¤‚Τ”‚ä´‡¤Z Mš˙¤‚Ϥ”‚𤴄c”{ ß‘)AAAāž“Gë__s ˙´'ßCPAuAāž“ŨBŪŪö ąhë__n ąh•ęĀ’œ…F–s7í…FĮ—zF˜retîÄ6—(ÄE˜atī&'w‹X™đĘ5æ’}‹éˆņ@B‚–‹A‚Œ‹iŠAéˆ ŋ‚3AA‚)Ai„h’AA  öØB‚gAš‚ZAį‚PA)’ĨN Ā ŗŅB‚ËNU‚žNį‚´N)’ÕI ā CÆB‚äI)„æ<$ˆE’¤‹Gøö C‚Ŋ‹‚ŗ‹Đ„P’W…Pö„C‚f…đ’ģIP8 #KC‚ĘIđŠKLYP #‚dL(‚ZL=“r+8”Ru`’AAxpķD‚gAP‚ZAr‚PA’ĨNxˆ ŗD‚ËNÔ‚žNr‚´N†ÕIx C D‚äI„ <$ˆ—’¤‹™ ķPD‚Ŋ‹ü‚ŗ‹f„ĸ’W…ĸ¸ķČD‚f…Ē’ģIĸØ #D‚ĘIĒŠKLĢđ #‚dLü‚ZL8“Æ+8”Rud†W… ķ@E‚f…††ģI  #E‚ĘI†ūKL&  #‚dL›‚ZLČ“6 +8”Rud†W…: ö¸Eøf…udŸ†ģI:  #EøĘIudŸūKL@  #‚dLÛ‚ZL“P +8”Ru`„͆t‰Ū î F‚ƒ‰ū4‰Ū ŧ˙Z‰˙M‰‚C‰€č!‚f…u†ģIč #@F‚ĘIuūKLđ #‚dL‰‚ZLļ“ +8”Ru_„ Š{ ô1vĶá•}#` ØœīGšÉF;ŠFÉšß;&'ęƒ[Ū<&'‘›os&'‹8j?Ę56‰áP¨ XFQG‚Qv‚õP‹„$ R$ž­PĮ IŽG‚ÎPž‚ÁPą†aOĮ ŖG‚lOž„Ī ė{ „Ú R$žáPö DáG‚QÄ‚õPđ„ R$„Į | Ž _@ `œHÉH‚_ø)_ú)_Ÿ‰­PV p™{H‚ÎPB‚ÁP`†aOV pH‚lOB„_ ė{ „o R$€€ ˙)_‚_x‘­P€ —øÎP0Ÿ‚ÁPĄ„— R$÷9Ų9uœåH9Jø9‘ŠW…¨Ä ‚f…á†ģI #EI‚ĘIáūĄI -‚°IáŠKL%Ā #‚dL‚ZL3€8=‚dL\‚ZL‰‰'L8Ø ö+J>L‚2L§B õI‚>Lü‚2L‡ĘKB R‚áKü‚ÕK‡ôKh T L‚˙K&€h ŸLQ„`v ßæĒHJlJāž“ōkāHÄ%âņit0Mn…9JŒqœˆJØLøHJ‘%QK^JN†k0ōJ‚#k}ūÄj$‚Ũj}øĶjōŸJ†gk14K‚vk‘ūÄj6‚ŨjĨ˙ĶjūMk20‚\kŊ†Ėž</L˙۞ū¨ž<Š˙ˇž‡4ž< ˙Cž˙Yž‚MžÕ€<‡˙@ ˛˙ ž˙"ž‚žč‡ԝ@ Mš˙ã˙ų‚íč„I”{ †ĖžV/ÍL˙۞ū¨žVŠ˙ˇž‡4žX ˙Cž˙Yž‚Mžû€X‡˙\˛˙ ž˙"ž‚ž‡ԝ\Mš˙ã˙ų‚흄e”{ „qŠ{ äŗ˛[ęL)Māž“)MŪTô[?Ū˙Í\´'Ū ] %ŪuA^´'y;÷ØL„J  dœJMäMøęL‘øôL‘øM‘øM‘ øM‘’ŲiŊ đ_ÅM‚j!‚ jM‚ũiy‚ōiĨ‚čiŅˆá „ģ %| „ü ”{ „ Š{ äŪ˛böM Nāž“)MāHÄ%÷äMŅ] Mœ'NĪNøöM‘’{…* cÄN‚…ŠW…* Í‚f…0†ģI*  #ŠN‚ĘI0ŠKL0  #‚dLb‚ZLœ“Y +8”R‘o„A ”{  ŋĩˆ` ”œĸO—8—O™š5‰H‘ēî3ĄŒH‘†Tw ‰POø+TŸūĄIw  ø°IŸ†PTƒ Œ„O‚mTØ‚aT„Ž >| ˆŖ ˆÆ ˆä „ō Š{  ãĩ¸ ‰œäOĄRŪ¸´'‘ĸstrš´'‘„n ĸO #ļɐ SœvPĄa3ĘvP‘ĄsĘ´'‘€° )™äjË´'0†PT° ŌjP‚mTN‚aTc„ģ >| „Đ ĸOô1Ŗ%ęđ œä†ŗˆPĪPāž“ĪPŪî‰69ŪTôŠ?Ū¤q‹ÔP;–;÷‹Pš 2œõP QøP‘ø§P‘ø´P‘øÁP‘ ˆ= ß”Ų/QGQāž“>VŪVĒ™÷D÷ Q4uP "œcQvQø/Q‘ø9Q‘ßUÚ…QQāž“VŪVĒĸ÷D÷vQy˛€ "œšQĖQø…Q‘øQ‘üiš° œäQRûž“>X‘ūQa´ Īø`a‘#TŸø`a‘#TŸá5ę7RŪŲ–VÄCüˆšĀ *œORŦRûž“>X‘ū‚sË Õ˙ĒsøŸs‘#TŸ€Ë šsv€Ë Čs•ü§šđ .œÄRįRûž“>X‘“f7”P‘#TüÆš .œ˙R"Sûž“>X‘“Gf7”P‘#TüåšP.œ:S]Sûž“>X‘“wf7”P‘#Tüē€.œuS˜Sûž“>X‘“§f7”P‘#Tü#ē°.œ°SĶSûž“>X‘“×f7”P‘#TüBēā.œëSTûž“>X‘“f7”P‘#Tüaē.œ&TITûž“>X‘“7f7”P‘#Tüāģ@0œaT…Tûž“ļH‘ĄÜ %‘ˆf•LępWœģT‹P¤now7šŽ‘h„’[|  û›lĐTœũTĸlhsl´'‘ĸrhsl´'‘„ų{| ä3 ¸U'Uāž“‘_Ūlõ¸'UZ9÷ũTĨÎ0bœHUÉUøU‘øU‘†–_MēzU‚Ĩ_͆@_rŧ¤U‚Y_‚O_U„`%| ˆl„Š”{ „’Š{ •đ, œ&Vūj_¤ ɍƒ_øy_‘ū@_§Y_øO_‘#Ÿ•-ĀœƒVūj_Ä Îƒ_øy_‘ū@_ĮY_øO_‘#Ÿ 6œāTœÅVĸlhsM(‘ĸrhsM(‘„ č* Vœ.@Tœ-Wĸlhs.´'‘ĸrhs.´'‘ūiY_ 3‚€YŠ‚tYŠ„i•|  vœB =œoWĸlhsBM(‘ĸrhsCM(‘„а|  –œZā;œ„Xĸstr[„X‘Ą]&[‰X‘‹h™mV\Ę5Č™UW]Ę5į’Yã€\#XøœY‘ŠģIã  ÛøĘI‘ŠĄIã  -ø°I‘’Yô¸]xXøœY‘ūģIô ÛøĘI‘ūĄIô -ø°I‘„ÅVô1ô1ßŪXÅXāž“Gë__c -'%âîŖB /v4 •\ę Iœt]ĸss{ÅX‘—Đi]˜str|t]ú™ß}H‘C˜end~H‘VĨĄ‘€Ä6‘’ũß&ø|fY‚ ā°„D@†TD}ĸY‚+TúūĄID ‚°Iú†YG~ÂY‚œYĆt‰T€ Z‚ƒ‰ ū4‰T ŧ˙Z‰˙M‰‚C‰ —\˜ch‚´'! ’}‹k(„vZ‚–‹W ˙Œ‹ŠAk( ŋ‚3AW ˙)A„hІâĨH†‚Ÿâo ˙•⊎XĨH É‚§Xo ˙X‹HļXš †ÕIĨ /[˙äIūģIĨ Õ˙ĘIūĄIĨ -˙°I†ŲNĶ 2>[‚đN­ ‚äNÅ †ģIÚ 3r[˙ĘIūĄIÚ -˙°I’!Oâ` 3÷[‚:OŨ ‚0Ođ €đ‚:O!‚0O#!žæJđ ÕÔ[˙õJ‡ŲNú ×˙đN‚äN6!„ČÂ’W…xŠ}\‚f…N!†ģI #D\‚ĘIN!ŠKL #‚dLŠ!‚ZLÆ!“#+8”Ruc2æ\˙f…†ģI2 #­\˙ĘIūKL: #‚dL"‚ZL1"“J+8”Ruc†W…JŠ^]øf…udŸ†ģIJ #%]øĘIudŸūKLP #‚dLD"‚ZLq"“`+8”Ruc„k„iŠ{ ô1ĻNũ˛p*œ”]Ŧ]ûž“Ŧ]‘„ËXq5ęō/Â]×]āž“FāHÄ%Ļ‘ē Ãœō]L`ûž“›V‘ūiĄ˛ŠģøxĄ‘# ŸŠ=Ąļ¨ŧ˙LĄ‚VĄ„"Šŋ ĀČž˙ô ‚č ˛"‚Ü „"‘ ĀČ—˙° ˙¤ ‹Č‘c ĀČ~˙ƒ ‚w Å"‘B Ėāg‚V  #‘ą]Ėā]‚Â] #‰W…Ė/W_‚f…B#’KLĖ( #:_‚dL~#‚ZLž#“+8”R‘HūģIû #‚ĘIB#‰W…āH/Ī_‚f…Ė#’ģIā` #•_‚ĘIĖ#ŠKLæx #‚dLî#‚ZL$“)+8”R‘H‘W…ę/‚f…,$’ģIę° # `‚ĘI,$ŠKLđČ #‚dLN$‚ZLn$“D+8”R‘HäÁĪ^`s`āž“ĀBāHÄ%ĻĢ/pXœŽ`Ãdûž“›V‘†iĄ‚Š0ëbøxĄ‘# ŸŠ=Ą†čŧ˙LĄ‚VĄŒ$Šŋ  ž˙ô ‚č ē$‚Ü Œ$‘  —˙° ˙¤ ‹ ‘c  ~˙ƒ ‚w Í$‘B œ g‚V %‘ą]œ ]‚Â]%‰W…œH /÷a‚f…J%’KLœh #Úa‚dL†%‚ZLĻ%“Ū+8”R‘HūģIË #‚ĘIJ%‰W…°ˆ /ob‚f…Ô%’ģI°  #5b‚ĘIÔ%ŠKLļ¸ #‚dLö%‚ZL&“ų+8”R‘H‘W…ēĐ /‚f…4&’ģIēđ #Šb‚ĘI4&ŠKLĀ #‚dLV&‚ZLv&“+8”R‘HŠüŖ+( 1‚ ¤”&ŠĐŖ+@ ŧ˙ßŖ‚éŖÆ&ūRŖ9gž˙‡Ŗ‚{Ŗå&‚oŖÆ&‡#Ŗ9g—˙CŖ˙7Ŗ€9g‡öĸ9g~˙Ŗ‚ Ŗø&‘Õĸ=h g‚éĸ:'‘L`=h ]‚^`:'’W…= ĪEd‚f…r'’KL=° #(d‚dLŽ'‚ZLÎ'“{+8”R‘HūģIh #‚ĘIr'ŠW…XĐ Ī‚f…ü'’ģIXđ #€d‚ĘIü'ŠKL] #‚dL4(‚ZLT(“”+8”R‘Há-ÜdŪĄ‘@Üd¸8ĻķEĐ4œüdOe§ž“|Vr(ŠFwÛ( F˙nw‚cw‘(‹( }wļ(‹( Œwá(á'-heŪĄ‘Jhe¸8ĻO4œˆeÛe§ž“|V-)ŠFw@ P˙nw‚cwL)‹@ }wq)‹@ Œwœ)ĻwUPœöe0fûž“|V‘ū9cTVøHc‘# ŸøHc‘# ŸßÔ{?fWfāž“Scë__n ÚxĻPĒpdœrfZgûž“|V‘ĸiĒ %‘’`mX ­/g‚ymč)‚om*’0fx J g‚Ifč)‚?f*†9c"g˙Hc˙Hc„Ô<$ŠÛh¯ K˙ęh‚ôhP*†¯^ĀŦOg„ÅĐ| „“ÛeĻÔ7āYœug­gûž“|V‘‹¨ ˜i8 %{*„ Wf„Ûeü†@NœÅgŽhûž“ķV‘ŠļxBČ , ˙Ūx‚ĶxĨ*‹Č íxĘ*‹Č üxé*†ģmbŽh‚Æm +€h‚Æm7+’Ąmhā _ph‚°mc+„tZgū‡mk_‚–m7+ū>x|‚Mxƒ+üĨNœÆh“iûž“ķV‘Šļx’ø 1 ˙Ūx‚Ķx›+‹ø íxĀ+‹ø üxß+†Ôm˛si‚ßm,€¸‚ßm-,†‡mģdgi‚–m-,„ÄZgū>xĖ‚MxY,ü+šāPœĢijûž“>X‘Š‚sâ Å˙Ēs‚Ÿsq,‹ šs—,‹ Čsļ,†Dypj‚OyØ,€ ‚Oyë,ū*y L‚9yë,ūy #‚yë,„Žhūr‚rū,üJš0Pœ¨jqkûž“>X‘Š‚s2( Ę˙Ēs‚Ÿs-‹( šs<-‹( Čs[-†]yRQk‚hy}-€X ‚hy-ūyX Q‚y-„aŽhūrn‚rŖ-Ļ–Z€œŒkÆkûž“|V‘ūXc„ [øgc‘#,Ÿøgc‘#,Ÿßį…Õkíkāž“rcë__n í‚ĻtŗTœlđlûž“|V‘ĸiŗ %‘’nŊ@ ļÅl‚-nģ-‚#nņ-’ÆkŊX Jĸl‚ßkģ-‚Õkņ-†XcŊ"—l˙gc˙gc„ä<$ūímÉK˙üm‚n#.†¯^Đĩål„ÕĐ| „ŗqkßé´˙l māž“ mT@ߨm)māž“Ë ÷m<đŅœEm2søm‘’đlp ds‚˙lN.žt‰ ¤´m‚ƒ‰Ą.ū4‰ ŧ˙Z‰˙M‰‚C‰/žt‰'¤ûm‚ƒ‰Ü/ū4‰' ŧ˙Z‰˙M‰‚C‰L0žt‰*¤Bn‚ƒ‰đ0ū4‰* ŧ˙Z‰˙M‰‚C‰`1žt‰-¤‰n‚ƒ‰÷1ū4‰- ŧ˙Z‰˙M‰‚C‰g2žt‰0¤Đn‚ƒ‰ņ2ū4‰0 ŧ˙Z‰˙M‰‚C‰a3žt‰3¤o‚ƒ‰Ū3ū4‰3 ŧ˙Z‰˙M‰‚C‰Ū3‰ĀSYˆ ¨MoøŲSŸ‚ĪSN4„jūžĀSoŠ€o‚ŲSž4‚ĪSÖ4„{ū‰ĀSŒ¨ Ģŗo‚ŲS,5‚ĪSD5„˜ūžĀSŦæo‚ŲS§5‚ĪSŋ5„Šū‰ĀSēĀ Žp‚ŲS6‚ĪS-6„Æū‰ĀSØ ´Lp‚ŲS6‚ĪS¨6„ūžW…,¤Ãpøf…v4Ÿ†ģI, #ŠpøĘIv4ŸūKL2 #‚dL 7‚ZL87“B+8”RugžW…B¤:qøf…vŸ†ģIB #qøĘIvŸūKLH #‚dLK7‚ZLx7“X+8”RugžW…X¤ąqøf…vŸ†ģIX #xqøĘIvŸūKL^ #‚dL‹7‚ZL¸7“n+8”RugžW…n¤(røf…vŸ†ģIn #īqøĘIvŸūKLt #‚dLË7‚ZLø7“„+8”RugžW…„¤Ÿrøf…vŸ†ģI„ #frøĘIvŸūKLŠ #‚dL 8‚ZL88“š+8”Rug‡W…š¤øf…vŸ†ģIš #ŲrøĘIvŸūKL  #‚dLK8‚ZLx8“°+8”Rug„%| „š”{ „ÁŠ{ ß˙´AsVsāž“ māHÄ%ß+eszsāž“Ë āHÄ%÷VsĶ ĐRœ–s–zøes‘’2sũđ iz‚As‹8‰ĀS Ŋņs‚ŲSŠ8‚ĪSã8„2ū‰ĀS7( ž$t‚ŲS 9‚ĪS89„Cū‰ĀST@ ĀWt‚ŲS`9‚ĪSš9„`ū‰ĀSeX ÁŠt‚ŲSÂ9‚ĪSī9„qūžĀS‚ÃŊt‚ŲS:‚ĪSQ:„Žū‰ĀSĖp Éđt‚ŲSy:‚ĪSŗ:„Øū‰W…åˆ šgu‚f…Û:’KLå¨ #Ju‚dLũ:‚ZL;“P+8”RugūģIí #‚ĘIÛ:‰W…÷Č šŪu‚f…=;†ģI÷ #Ĩu‚ĘI=;ŠKLũā #‚dL_;‚ZL;“`+8”Rug‰W…ø šUv‚f…Ÿ;†ģI #v‚ĘIŸ;ŠKL #‚dLÁ;‚ZLã;“p+8”Rug‰W… (šĖv‚f…<†ģI  #“v‚ĘI<ŠKL@ #‚dL#<‚ZLE<“€+8”Rug‰W…XšCw‚f…c<†ģI # w‚ĘIc<ŠKLp #‚dL…<‚ZL§<“+8”Rug‰W…ˆšēw‚f…Å<†ģI #w‚ĘIÅ<ŠKL%  #‚dLį<‚ZL =“ +8”RugžW…Ĩš1xøf…v4Ÿ’ģIĨ¸ #øwøĘIv4ŸŠKL¨Đ #‚dL'=‚ZLT=“Ŋ+8”RugžW…Ŋš¨xøf…vŸ†ģIŊ #oxøĘIvŸūKLà #‚dLg=‚ZL”=“Ī+8”RugžW…Īšyøf…vŸ†ģIĪ #æxøĘIvŸūKLÕ #‚dL§=‚ZLÔ=“á+8”RugžW…áš–yøf…vŸ†ģIá #]yøĘIvŸūKLį #‚dLį=‚ZL>“ķ+8”RugžW…ķš zøf…vŸ†ģIķ #ÔyøĘIvŸūKLų #‚dL'>‚ZLT>“+8”Rug‡W…šøf…vŸ†ģI #GzøĘIvŸūKL  #‚dLg>‚ZL”>“+8”Rug„7”{ „"Š{ ÷Vsņ˜0(œ˛zĖzøes‘ˆJ„R”{ …÷k$`@œčzš{øl‘€o+‚l§>ūÉko'ō‚Økē>€o'äkĐ>†koXz{‚#kē>ūÄjo$‚Ũjē>‚Ķj?ūMk…X‚\k?üŧ  /œ˛{3|ûž“ķV‘ĸii %‘‹č™ŗSj %1?ū8lŦj `løUl‘øJl‘#Ÿūdŗ/˙,d˙,dü;!Đ/œK|Ė|ûž“AA‘ĸip %‘‹™ŗSq %D?ū8lÜq `løUl‘øJl‘#Ÿūdã/˙,d˙,dáūå|Ū|Ë%:üœ!Lœũ|Œ}ûž“AA‘†¤$$› }˙>¤ø3¤‘# Ÿūüy$$(˙3z˙&z‚zW?ūĖ|0 Ŧ‚×|Œ?„As`„s`üÖ"P$œ¤}ō}ûž“AA‘€W˜iĨ &'Ä?ŠdWĨ ‚,dã?‚,dã?•vę€@œ~–9Ą ^Íû?¨ĀYsvĀŽœpøËY‘—0¸~ÚY@’TŌ` ~ø+TŸŠĄIŌ` ø°IŸ„@ÅV„ ÅV„+ ÅV„F ģT—xe‚ËYC@‹xŠÚY‹xéYa@öYŠ@†§Yô# ‚˛Y@„=<„ģT„pģT„‡ģT„žģT„šģT„ÔģT„īģT„ëÅV•ęP œō€Ą9Ą= ^Í‘ĸfmt= ´'‘m—į€™UP> Ŧ“Å@Ĩ÷ČD %șO+F %"A†7ZĻ e €‚TZBA‚HZoA„´ Ų| †7ZĐ K L€‚TZ›A‚HZČA„Ū Ų| †Z! E v€‚ZôA„!ų| †Z!E  €‚*ZB„%!} „— ō}„Ļ Õ{ „ Õ{ „!%} „5!ĀY„G!?} „`!O} „h!Š{ üÔßp!>œ ?ûž“CW‘ũ?‘„!p„›!_} „Š!w} ]Hüķā°!>œ\‘ûž“CW‘ũ‘‘„Í!p„Û!_} „é!w} ]HüOāđ!VœŽ‚ûž“CW‘Ą|Ö ‚‘†•Z"Ø ˙‚­ZB‚ ZGB„&"Õ{ „"p„2"Ŋ{ „@"w} 1:•ŦęP"ęœ‰ƒĄ|p ‰ƒ‘‹¸™gŠq H‘[B™ėBr H‘zB’"`f"Øq į‚‚1`B†é_f"|Ž‚‚ø_¸BūTq"}‚+TíBūĄIq" ‚°IíB’<`s"ør _ƒ‚K`C’é_s" „&ƒ‚ø_:CūT…"…‚+ToCūĄI…" ‚°IoC„ŗ"Õ{ „Ö"Õ{ „î"Õ{ „#Õ{ 1:ß-ɝƒ´ƒāž“ŽdčPĸŽíÂü¯@#§œĖƒž…ûž“>[‘Ą‰G€ P;‘‹8˜i &'‚C†hd`# („‚wdĄC‚wdĄC†‡d€#‚ R„‚–dšC‚ dŅCŠÅ #`ƒ ˙ÅøÅ‘#ŸŠŽƒ #`~‚§ƒũCøƒ‘#Ÿž2Ä #Į„KÄøAÄō‡„‘ĄÄ§#x‘˙ØÄ˙ËÄ˙žÄŠÉç#xŌ˙ Ä˙ũÃ˙đÊHç#x˛‚‰ÃD‚|Ã=D‚oÃ[D‹x˜Ã†DŠÚ§#xŒ‚ÃD‚ûÂ=D‚îÂ[D‹xÃĻD„Û#Œ} ßŨ­…Ņāž“-9Ūįē ´'÷ž…d@đ#Ŗœá…Ԇø­…‘øˇ…‘†T"$ /†‚+TĖDūĄI"$ ‚°IĖD†W…p$# Ĩ†øf…vŸ†ģIp$ #n†øĘIvŸūKLy$ #ødLW‚ZLūD“ˆ$+8”Rwˆ"$„K$Ž} „Y$w} „e$Õ} „“$Š{ •šŨ $œ9Šĸstrr 9Š‘—.ŠĨs7s Ä6‘†t‰´$s [‡‚ƒ‰Eū4‰´$ ŧ˙Z‰˙M‰‚C‰E†ÕIÂ$t {‡‚äI%E—¨ē‰˜itu Ī9E’ļŠĐ$Ču ҇‚Ŋ‘EŠĄIĐ$Č r‚°I‘E’ęŠđ$čv ˆ‚õаEŠÚZđ$Ķ ‚åZ°E’‹ø$ u -ˆ‚*‹äE’‹û$@u Mˆ‚‹FŠŽX%Xw ‚§X,F˙X‹XļXUF†ÕI% /ʈ˙äIūģI% Õ˙ĘIūĄI% -˙°I†ŲNN% 2ôˆ‚đN€F‚äN¨F†ģIS% 3(‰˙ĘIūĄIS% -˙°I’!O[%p 3­‰‚:OĀF‚0OāF€ˆ%‚:O G‚0OGžæJ‹% Պ‰˙õJ‡ŲN•% ×˙đN‚äN2G„C%%!#Š˙f…†ģI% #ę‰˙ĘIūKLĨ% #‚dLKG‚ZLxG“ĩ%+8”Rug„Đ$„ž%Š{ ô1•,ŪĀ%Ąœ‹ĄOėŽ p7‘Ąy2¯ ´'‘‹ˆ™X° ´'‹G’­PÖ% ą ŠøÎPāŸ‚ÁPÁG„é%R$ö%T[‹îŗ H‘’­Pö%¸ˇ ‹‚ÎPāG‚ÁPøG„'&R$’tI*&Đŗ F‹ø“IꟂ†I H„7&č} „&s<„J&­Pū­PJ&ž øÎPꟂÁPAH„Y&R$ä8į ĸ‹­‹āž“­‹V;÷‹ũup&UœÎ‹LŒøĸ‹‘‹&$AŒøģŦPū’Ŧ•&U øĄŦpŸūsŦ•&ø‚ŦpŸ‡TŦ•&}øcŦpŸ„‹&%| äOí ^ŒsŒāž“­‹āHÄ%…LŒ)EĐ&WœŒŌø^Œ‘ūX-ų&í ‚g-`Hˆ'„ '”{ Ļ‹ú 0'gœāŒûž“­‹‘Ą‰Gú P;‘„\'´ƒ„z'´ƒ„’'´ƒĻí 'œ7Eûž“­‹‘ĻI(°' œ`nûž“n‘\;Ļg,Ā' œŽŋûž“­‹‘ū[Ā' -0[‚&[sHüæ%Đ' œ×īûž“¨W‘„ë'“iü&đ' œŽŽûž“¨W‘„ (jü$&( œ7ŽOŽûž“¨W‘„+(ĖQüC&0( œgŽŽûž“¨W‘„K(7Rüb&P( œ—ޝŽûž“¨W‘„k(ŦRü&p( œĮŽߎûž“¨W‘„‹(įRü &( œ÷Žûž“¨W‘„Ģ("Süŋ&°( œ'?ûž“¨W‘„Ë(]SüŪ&Đ( œWoûž“¨W‘„ë(˜Süũ&đ( œ‡Ÿûž“¨W‘„ )ĶSü') œˇĪûž“¨W‘„+)Tü;'0)œįûž“¨W‘ūC[0)ƒøR[‘#$üZ'P)œ+Wûž“¨W‘ū][P)ˆøl[‘#$üy'p)Oœo‘ûž“¨W‘Šös‡)čŒ‚t“HŠÜs‡)č@‚ës“H )õ‚ësŋH†w[Ŗ)Eꐂ†[ŋH„¯)Zg„)jü˜'Ā)Tœ‘‘‘ûž“¨W‘ŠÜs×)‚ësāHø)…‘‚ës I†w[û)Ez‘‚†[ I„*Zg„Ũ)jßüē ‘Ƒāž“>XëiJ %âîŗSK%üˇ' *2œŪ‘~’ûž“¨W‘ĸi” %‘ū‘‘-*"•øĒ‘‘‚ ‘-I€-*"ˇ‘OIū8l/*K`løUl‘‚JliIūd6*/˙,d˙,d¨vyĐ`*œÍ“øy‘—ž’y’I„{*¯Ž‹8˙y‹8Аy‹8ŸyĨI—Xŋ“ŦyšI—xĒ“ģyâI—˜Ÿ“ČyõI†‡m+ B“‚–mJ†Ąm+  l“‚°mXūã¤:3 3‚ü¤+X‚ō¤>X†aO:3 }įĨ‚lO+X„C3ė{ „Q3O„/3fŸ•¯ë`3MœČĻž­bo3‹LĻøābIŸøĶbŸ„3ö‡6T˜3ŒøETŸūÕI˜3 6øäIŸūģI˜3 ÕøĘIŸūĄI˜3 -ø°IŸęE•ŲĻđĻāž“đĻčoû• %R7÷ČĻö!°3 œ§$§øŲĻ‘øãĻ‘Ŧ`™Ā3œ>§[§ûž“[§‘ƒ:P™ %‘X7ęģ§q§ˆ§āž“ˆ§čTЧ %d7÷`§y¸ā3 œŠ§ŧ§øq§‘ø{§‘ŦÖĢđ3!œÖ§ķ§ûž“ķ§‘ƒ:PĢ %‘j7•žë 41œ,¨ƒ:PĐ %‘ˆ<4„H4$§•×ë`4Jœ{¨†%j…4 1j¨‚0jRX„Ž4˜~ „u4Ž~ ˆ 4•Ƨ°4œÎ¨ūTģ4`ø+TŸūĄIģ4 ø°IŸ•اĐ4#œ%ŠĄuAc%Š‘ūĀSß4døŲS‘øĪSŸ„î4ūô1•įë5œzŠĸptr×u‘ĄĄ‘×’‘€5ĨEŽØ %‘x•ė 5(œÄŠ€/5ĨEŽŨ %‘lĨĄ‘Ū%‘k„>5*ŠŦ ƒP5!œŪŠ/Ēûž“Å[‘€_5 æ&„H‘‡§]_5 „Ä]/‚¸]eX„l5š~ ŦTŸĖ€5+œIĒĮĒûž“Å[‘€5œnĶąâ‘˜‡×]5Ԃī]zX‚â]ÂXūjS5Ī‚‰SzX‚|SÂX„Ą5Ö~ ŦrŸÚ°5BœáĒĢûž“Å[‘€ŋ5,­Ą‘Û%×Xœ;øâĢ‘œnîąâ‘˜ž×]ŋ5ī€Ģ‚ī]öX‚â]>YūjSŋ5Ī‚‰SöX‚|S>Y„Ņ5Ö~ ‡ŖSÚ5 đ‚ŽSSYƒ5Ŧޟø6œŧĢŦûž“Å[‘‡Y6˙øœY‘ūģI6 ÛøĘI‘ūĄI6 -ø°I‘Ļ˟ 6 œ5Ŧ|Ŧûž“Å[‘€ 6 Ĩa3H‘‘ūũ]&6 ø^‘ϐŸ'06œ—Ŧ­ûž“Å[‘Š6T06¨(øET‘ŠÕI06¨ 6øäI‘ūģI06 ÕøĘI‘ūĄI06 -ø°I‘Ļ6Ÿ@P6Nœ,­f­ûž“Å[‘‹Ā™Ą‘I %iY„p6ö~ „‘6ĮĒĻęŸ_ 6ל­'¯ûž“T‘‹Ø˜srcd´'‡Y™đ$e?D˛Y™ĮHfČ*ĐY†Tļ6`Ž‚+TųYūĄIļ6 ‚°IųY†YŌ6g#Ž‚œY/Z’^07đy§Ž‚,^NZ‚"^aZŠã¤07đ 3‚ü¤NZ‚ō¤aZ’aO07 }›Ž‚lONZ„<7ė{ „G7O†^Z7a¯ø,^Ÿ‚"^€Zūã¤Z7 3øü¤Ÿ‚ō¤€Z„l7O„Đ6 „į6* „O7H ßc6¯M¯āž“TčaŠ@M¯ô1Žũe€7œ=ą— 2ą¯cwdn=ą‘ß_‰'¯ę7Xo1°‚@¯ŸZ‚6¯'[žW…c8@ °øf…u’ģIc8x #æ¯øĘIuŠKLf8 #‚dLw[‚ZLĻ[“€8+8”Ruß_ˆõ7„ū7f­‰W…ū7¨oа‚f…š[’ģIū7Č #o°‚ĘIš[ŠKL 8ā #‚dL\‚ZLO\“+8+8”Ruß_žW…@8#o!ą‚f…Ÿ\†ģI@8 #į°‚ĘIŸ\ūKLI8 #‚dLĩ\‚ZLä\“X8+8”Ruß_„Č7] ˆę7„a8Š{ t'%Oą°‘'Ŧšž–8įœiąyŗûž“Å[‘—ønŗ­&—H‘÷\‰'¯Í8˜@˛‚@¯]‚6¯}]žW…Y9@/˛‚f…á]’ģIY98 #öą‚ĘIá]ŠKL[9P #‚dL^‚ZL-^“s9+8”RucˆÔ8„Ü8f­‰W…Ü8h˜ˇ˛‚f…@^’ģIÜ8ˆ #~˛‚ĘI@^ŠKLå8  #‚dLx^‚ZL§^“(9+8”Rucž}ˆ9 ˜æ˛‚–ˆÅ^‚Œˆđ^ˆ 9žW…@9˜]ŗ‚f…_†ģI@9 #$ŗ‚ĘI_ūKLF9 #‚dL#_‚ZLP_“S9+8”Ruc„°8ÄŠˆË8„59Š{ •ė€9īœÅļ—¸ēļĨĄ‘z‘X’¨ˆ†9āzÍŗ‚ˇˆc_ˆĢ9†'¯Ģ9 ´ø@¯Ÿ‚6¯ŋ_ˆŋ9„Į9f­’ėSÉ9øc´‚TL`‚ûSž`‘ĀSÉ9J‚ŲSL`‚ĪSž`„Ō9ū’ˆŌ9(ö´‚͈Ö`‘W…Ō9H;‚f…(a’ģIŌ9h #ŧ´‚ĘI(aŠKLÕ9€ #‚dLza‚ZLļa“:+8”Ru_’ˆķ9 ‚‰ĩ‚͈Ôa‘W…ķ9Ā;‚f…Ôa’ģIķ9ā #Oĩ‚ĘIÔaŠKLü9ø #‚dLb‚ZLLb“':+8”Rv†ˆ6:‚ļ‚͈Šb‡W…6:;‚f…Šb†ģI6: #âĩ‚ĘIŠbūKL<: #‚dLŸb‚ZLĖb“H:+8”Ru_†ˆS:¯ļ‚͈ßb‡W…S:;‚f…ßb’ģIS: #uļ‚ĘIßbŠKLV:( #‚dLôb‚ZL!c“k:+8”Ru_„ķ9Oą„Q:Š{ ŦמĄp:.œßļæēûž“Å[‘—@Ûē­&ĸH‘4c¯dirŖÄ6‘X‰t‰:hŖ\ˇ‚ƒ‰_cŠ4‰:h ŧ˙Z‰˙M‰‚C‰_c‰Ģ[ĸ:€Ĩ˛ˇ‚ē[äc‘Tĸ:€N‚+TäcŠĄIĸ:€ ‚°Iäc‰ĀSŋ:˜Ĩ厂ŲSd‚ĪSKd„Ī:ū‰W…Ī:¸Ĩ\¸‚f…‚d’ģIĪ:Ø ##¸‚ĘI‚dŠKLØ:đ #‚dL¤d‚ZLÆd“P;+8”Ru_‰'¯Ü:Š š‚@¯äd‚6¯-ežW…r;@û¸‚f…le†ģIr; #¸‚ĘIleūKLw; #‚dLe‚ZLŦe“ƒ;+8”Rudˆč:„đ:f­‰W…đ:(Ѓš‚f…ŋe’ģIđ:H #Jš‚ĘIŋeŠKLų:` #‚dLûe‚ZL7f“8;+8”Rudž^; §Üš‚,^uf‚"^fūã¤; 3‚ü¤uf‚ō¤f„(;OžW…T;ŠSē‚f…šf†ģIT; #ē‚ĘIšfūKLZ; #‚dLÎf‚ZLûf“f;+8”Ru_žW…Š;ĨĘēøf…udŸ†ģIŠ; #‘ēøĘIudŸūKL; #‚dLg‚ZL;g“œ;+8”Ru_„:ÄŠˆž:„o;Š{ Ļ›žU ;áœģNŊûž“Å[‘†YĮ;W.ģ‚œYNg†AAĪ; Xhģ‚gA…g‚ZAĢg‚PANgˆÜ;’'¯Ü;xXŧ‚@¯Ëg‚6¯(hžW…c<@ŧ‚f…h’ģIc<˜ #Īģ‚ĘIhŠKLe<° #‚dL h‚ZLÍh“}<+8”Rucˆå;„í;f­’W…í;ČX‘ŧ‚f…āh’ģIí;č #Xŧ‚ĘIāhŠKLö; #‚dLi‚ZLGi“8<+8”Ruc†}ˆ< XÁŧ‚–ˆei‚Œˆiˆ<†W…E<X9Ŋ‚f…Ži†ģIE< #Ŋ‚ĘIŽiūKLK< #‚dLÃi‚ZLđi“X<+8”Ruc„Ā;|Ŧ„a<Š{ ĻŸ/<œiŊ?Āûž“Å[‘—4ĀĨ…87 ‘X†Yļ<4°Ŋ‚œYj’ˆ=08Cž‚͈Dj‘W…=P;‚f…Xj’ģI=p # ž‚ĘIXjŠKL =ˆ #‚dL’j‚ZL§j“h=+8”Ru_†ˆ'=)9מ‚͈Åj‡W…'=);‚f…Åj†ģI'= #œž‚ĘIÅjūKL-=# #‚dLÚj‚ZLīj“@=+8”RuT†ˆl=!9kŋ‚͈k‡W…l=!;‚f…k†ģIl= #0ŋ‚ĘIkūKLr= #‚dLk‚ZL,k“‚=+8”RuT=÷ŋø͈udŸ‡W…=;øf…udŸ†ģI= #ŊŋøĘIudŸūKL“= #‚dL?k‚ZLlk“Ŗ=+8”Ru_„­<|Ŧ„Ü<ĮĒ„ú<æē„=Åļ„=NŊ„Y=­„‹=Š{ Ŧõžw°=ĸœYĀ’Åûž“Å[‘ƒĮņw´'‘— ‡Åœ™@x\F‘X‰čžĘ=Čx™Á‚Ÿk‚ŸĪk‹ČŠ.Ÿ’Aå=đ y Á‚3A™l‚)Aõl†aOå= Á‚lO™l„í=ė{ „ú=hĪ>‘Á‚f…um’ģIĪ> #XÁ‚ĘIumŠKLŌ>  #‚dLŠm‚ZLˇm“ę>+8”Ru_ˆä=—8‚f…Ęm’ģIú=X #ÍÁ‚ĘIĘmŠKLũ=p #‚dLon‚ZLŌn“Č>+8”Ru_‰Y'>{%‚œYđnžAA5>{^‚gAo‚ZA=o‚PAđnˆA>‰'¯C>¨{ Â@¯io‚6¯˜ožW…;?@ûÂøf…u†ģI;? #ÂÂøĘIuūKLC? #‚dLÄo‚ZLņo“P?+8”Ru_ˆL>„U>f­‰W…U>Č{ƒÃ‚f…p’ģIU>č #JÂĘIpŠKL^> #‚dL&p‚ZLHp“¸>+8”Ru_‰W…c>}úÂf…fp’ģIc>8 #ÁÂĘIfpŠKLi>X #‚dLˆp‚ZLĒp“Ŗ>+8”Rv‰}ˆ€>p})Ä‚–ˆČp‚ŒˆÜpˆŽ>ę>#ˆÄ‚f…đp†ģIę> #aÄ‚ĘIđpūKLđ> #‚dLq‚ZLqžW… ?}˙Ä‚f…-q†ģI ? #ÆÄ‚ĘI-qūKL? #‚dLBq‚ZLWq“ ?+8”Ru_žW…$?{vÅ‚f…jq†ģI$? #=Å‚ĘIjqūKL*? #‚dLq‚ZLŦq“7?+8”Ru_ˆÛ=„ >oW„ū>Š{ Ŗ"ė`?œęš–ŒŗÅČÅāž“ČÅāHÄ%č1÷ĸÅ(Wp?DœéÅÆøŗÅ‘„–?x „Ą?x „Ž?‘ Ž—™Ā?AœiÆ›str™´'‘›re™iÆ‘€Ķ?)œlžœß•‘h„ô?¤ î1¨:^xĪ@AœëÆøG^‘øS^‘#@­ÆŠ`^€+@!‚S^ŋq‚G^Ūq€+@!Ÿ`^‘h„D@¤ áu ĮŲ!'%9(Ūgn4Įã‘ß?ũ*ĮBĮāž“gJë__c ģ'%äũ—đTĮiĮāž“MSāHÄ%…BĮÎ8`@˜œ…ĮÂČøTĮ‘’‰^n@ˆņ—Č˙ĸ^˙˜^‘ëÆn@ˆq˙Į’Įv@¨5aȍ4Į ˙*Į’­‚}@Č ŧČ‚Á‚ōq„ø@Œ$ŠąR@ā ŧ‚ĘRr‚ĀR$r€°@.‚ĘRBr‚ĀRVr„š@ņE†č‚•@5‹Č‚ƒir„@›<„•@š<†¯^î@ôˇČ„ķ@Đ| „î@w} ąSĐWA,œũČĄ˙ÍWëD‘„Aß „&A˙ ą9Đ]0A‡œ¸ÉĄ˙Í]ëD‘‹ø™ Ŋ^Ę5|r™’¯_?Dšr™øœa&'¸r™=?b&'ârĨ¤m\F‘„MAÂČ„WA „iAß „ˆA€ ˆĄA„ŠAH ßĐĮÉøÉāž“øÉâî˙ÍAí™î¤B\Fâ˙f…åDßūĪ Ę!Ęāž“øÉāHÄ%våD•1ėĀAåœGĖĄŪ„!Ę‘— <ĖĨ¤…\F‘’¸ÉŲA( …Ë‚ĮÉs‹( ĶÉsŠāɆņZBAŌĘø [VŸ‚üZ=s„B~ ’‰'BH CüĘ‚'‰Qs„-B ~ „B!eË˙f…†ģI„B #,Ë˙ĘIūKLŒB #‚dLos‚ZLœs“œB+8”Rug„éAw} „õA:€ „ūAU€ „'BũČ’ũÉ6B` ‡1Ė‚ Ɲs’W…ABx 4&Ė‚f…Ís’ģIAB #íË‚ĘIÍsŠKLDB¨ #‚dLīs‚ZLt“€B+8”Rug„ABk€ „[B”{ „ĨBŠ{ •Kė°B+œfĖ„ŅB'Ę•[ėāB+œ…Ė„C'Ę•kėCœœ–ÎĄO)Ģâ7‘†Ō>2C\­‹Î‚á>/t†ąĨ7C?¨āÍ‚æĨNt‚ÚĨmt‚ÎĨ€t‡‚Ĩ7C?—‚ĸĨmt‚–Ĩ€t€7C?‡ö>7C?~‚?mt‚ ?“t‘aĨ;CČ g‚uĨžt‘W…;CČ ]‚f…žt’KL;Cč #žÍ‚dLöt‚ZLu“lC+8”R‘HūģIWC #‚ĘIžtūņĨvCŠ‚Ļ4u‡á¤vC ˙đ¤‚ĨSu‚ú¤ou€vC‡Ŧ¤~C˛˙ˇ¤˙Τ‚ä‚u‡¤~CMš˙¤˙Ϥ‚š¤‚u„‡C”{ „—C”{ Ŗė°C'œáž#˙ÎčÉFNŠFč[ŪN&'éosOp7âæ,SĘ5ænéTĘ5âæãX_Ę5•āCĢœĀĐƒÉFnŠF‘ƒ[Ūn&'‘›osop7‘‘ĻÎūC!p‚ÉΕu‚ŊÎŋu‚ąÎéu‹!˛Ö΄˛âÎ@žQūCQ´Ī‚4Qŋu‚*Q•u„Dč<ž­PDQęĪøÎPXŸ‚ÁPv„DR$"D7rЁđÎ&vž­P1D]5Đ‚ÎPMv‚ÁPev„CDR$ŗ1DFQĐ”Pu”R0“VDF”Pu”R ‘? ūž­PYDbĨĐ‚ÎPxv‚ÁPv„kDR$“†DF”Pu”R0´>-D”œ›Õ›os:›Õ‘ƒĄ‘: Õ‘žļ^˛D@GŅ‚Å^¯v‡T˛DX‚+TåvūĄI˛D ‚°IåvžĐ^ÎD<ÕŅ‚ß^'w‡6TÎDM‚ET]wūÕIÎD 6‚äI]wūģIÎD Õ‚ĘI]wūĄIÎD -‚°I]w‰­PāD !<ŽŌ‚ÎPŸw‚ÁPĘw†aOāD'Ō‚lOx„íDė{ °E ŖŌ‚ÎPx‚ÁP3xЇP˛E8!‚ PFx‚–PZxžcPēE ˜—Ō‚zPFx‚nPmx„ĮE™ũ„üDR$ž­P˙D<áŌ‚ÎPx‚ÁPŠx„ER$ž­PE<Ķ‚ÎPÔx‚ÁPüx„1ER$ž­P1E?qĶ‚ÎP%y‚ÁPCy†aO1E fĶ‚lO%y„9Eė{ „DER$ž­PDE?¤Ķ‚ÎPay‚ÁP‰y„VER$‰­PVEP!@}Ô‚ÎP§y‚ÁPÅy†aOaE öĶ‚lOãy„jEė{ FrÔ‚ÎPöy‚ÁP zЇPFh!‚ Pz‚–P1zžcP F ˜fÔ‚zPz‚nPDz„F™ũ„uER$‰‰^xE€!@Õ˙ĸ^˙˜^‘ëÆxE€!q‚ĮXz’ĮzE !5ZÕ‚4Įz‚*Į­z’­‚EĀ! ŧ Õ‚Á‚éz„$FŒ$ŠąR‰EØ! ŧ‚ĘR{‚ĀR2{€ĐE0‚ĘRP{‚ĀRd{„ŲEņE†č‚E5„Õ‚ƒw{„ĨE›<„Eš<„E=2¸8Ŧ´ S0FœŋÕđÕûž“‹;‘‡9c4FTøHc‘øHc‘÷ig$PFRœ ÖÖøi‘øi‘{FjÖ‚iŠ{‚iž{ž¯^‹FL_Ö„FĐ| „‹FÕ{ ‰ÛhFđ!O’Öøęh‘‚ôhą{„tFĨÕę@ŽÖÃÖāž“ŠāHÄ%÷ÖZŗ[œßց׸ŽÖ‘‰W…"@_ׂf…Đ{†ģI #&ׂĘIĐ{ŠKL% " #‚dL|‚ZL/|“Y+8”R‘o‡|L-@‚‹LM|ˆEßH×ŧ×āž“ŧ×āHÄ%ā+ŦÁ×ë__mø8%5ÚLv ßĻ Û×ú×āž“ú×āHÄ%ā+Ŧ˙ׯ×ÚLߌDØ2Øāž“LMāHÄ%ā+Ŧ2ØÚLäSüIØTØāž“6_÷7Øŋ.°FŪœpØãÚøIØ‘’×ĐF8":ڍŽ×‚×l|’ΉĐF`"ÅØ‚Ū‰¯|ˆŪF’Ė×Gx"kŲ˙īׂÛ×ķ|’ØG "#?Ų˙'Ø‚Øķ|„\G¸ũ’VM^G¸"#?JŲ˙yM‚eM+}„zG¸ũūM~H#?˙AMø-MV’GØ"ũŲ‚Š{}‚ū‰›}‰ĩ‰€G#cšŲ‚ĉ›}ˆäG‡t‰÷G c‚ƒ‰Ō}ū4‰÷G ŧ˙Z‰˙M‰‚C‰Ō}†ĢL3H#Ú‚ēL ~ˆJH„H¸ũˆhHˆtH’>ŠH8#dÚ‚WŠ~‚MŠL~’{ŠHP#’ÄÚ‚¤Šl~‚˜Š‚~‘=RHh#$Ō‚LR­~‚VRĘ~‹h#eRŪ~„ÎF%| „RH”{ „ZHŠ{ á!üÚŪ]Ŗ!­üÚX‘á!ÛŪ]Ŗ!kÛX‘ß5H.ÛMÛāž“ŧ×āHÄ%ā+ŦMÛÚLßĮ aÛ€Ûāž“ú×āHÄ%ā+Ŧ€ÛÚL ҜkHzœÛāĄ‘/k %‘—€#Æā¤ssl4 ‘¤~’×•H¨#lŠŨŽ×‚×ü~’Ή•HĐ#܂ۉgˆĮH’Ė×íHđ#ģÜ˙īׂÛׯ’ØíH$#?gÜ˙'؂د„FI¸ũ’VMFI@$#?—Ü˙yM‚eM€„yI¸ũūMįK##?˙AMø-MuŦ~Ÿ’I`$MŨ‚Š=€‚ū‰]€‰ĩ‰›Iˆ$c Ũ‚ĉ]€ˆJ‘t‰(J°$c‚ƒ‰˛€Š4‰(J°$ ŧ˙Z‰˙M‰‚C‰˛€†ĢL‚K%sŨ‚ēLˆŸK„WJ¸ũˆĪKˆâK†2āYJm[Ū˙Kā‚Aā/‡ãÚjJ„‚îÚkūųQjJ!¯‚R~‚R ‚Rk€jJ.RūĐQjJ!V‚įQԁ‚ÛQö‡?PjJ!`‚VPԁ‚JP†2āpJm"ß˙Kā‚Aā ‚‡ÛpJ„‚ Ûkū|QpJ!m‚•QG‚‚‹Qk€pJ¤Qk‚ūMQpJ!E‚dQG‚‚XQö‡PpJ!\‚2PG‚‚&Pk‚’ũ߃JČ$nLß‚ ↂ„‘J@’Û‘Jā$nĩā‚.Ûĩ‚’Ö¯J%5$ā‚ŽÖ䂉W…žJ%@ā‚f…ƒ†ģIžJ #Čß‚ĘIƒŠKLĮJ0% #‚dLEƒ‚ZLwƒ“{K+8”RuĢ~‡|LĶJ@‚‹L•ƒˆđJ†RÛđJN5’ā˙uÛ‚aÛšƒ’āLüJH%#;oā˙M‚īLŨƒŠMKh%#;˙AM‚-M„ūĢL>K5‚ēL%„ˆYK„J=ˆˇK„§KŠ{ „ŋKŠ{ •‘ėLzœŋäĸms ŽŦ‘—€%Ēä¤ssŽ 4 ‘¤~’×L¸%Ž Ü⍎ׂ×I„’ΉLø%dá‚Ū‰‘„ˆWL’Ė×}L(& â˙īׂÛ×Ų„’Ø}LP&#?šá˙'Ø‚ØŲ„„ĐL¸ũ’VMĐLx&#?éá˙yM‚eM…„M¸ũūMgO##?˙AMø-MuŦ~Ÿ’ī‰'M˜&Ÿâ‚ŠZ…‚ū‰z…‰ĩ‰'MĀ&c[â‚ĉz…ˆĄM‘t‰´Mč&c‚ƒ‰Ī…Š4‰´Mč& ŧ˙Z‰˙M‰‚C‰Ī…†ĢLO%Åâ‚ēL6†ˆO„ãM¸ũˆOOˆbO†ūlđM ã‚mL†‚ mú†„ūM7=’ũßN' :ã‚ ā6‡„N@’ÛN' Ŗä‚.Ûe‡’Ö,N8'5䂎֔‡‰W…;NP'@đã‚f…džģI;N #ļã‚ĘINJKLDNh' #‚dLõ‡‚ZL'ˆ“ûN+8”RuĢ~‡|LPN@‚‹LEˆˆmN†RÛmNN5€ä˙uÛ‚aÛiˆ†āLƒN#;]ä˙M‚īLˆūMŸN#;˙AM‚-MąˆūĢLģN5‚ēLՈˆÖNˆ7O„'OŠ{ „?OŠ{ ßcũÎäöäāž“ĪLŪDŌ €ũâ ‚ũĩļœdOøœ*ꥑ/d %‘—€'ę¤sse4 ‘¤~’×–O¨'eú捎ׂ×ųˆ’Ή–OĐ'ƒå‚Ū‰A‰ˆÅO’Ė×ËOø'+æ˙īׂÛ׉‰’ØËO((#?Øå˙'؂؉‰„>P¸ũ†VM@P3#?æ˙yM‚eM¸‰„sP¸ũūMjS#?˙AM‚-M ВPH(Ŋ悊#Š‚ū‰7Љĩ‰•Px(cyæ‚ĉ7ŠˆQ‘t‰"Q¨(c‚ƒ‰ŠŠ4‰"Q¨( ŧ˙Z‰˙M‰‚C‰ІĢLES%ãæ‚ēLՊˆbS„QQ¸ũˆ/SˆBS’ßQQĀ(fč‚Ēß늂žß‹‘ŋäcQč($´‚Øä1‹‚ÎäF‹‹č(įäd‹Š΂cQ) ‚‚Ũ‚F‹ŠĮˆR() p‚4Įy‹‚*Į›‹’­‚‹RH) ŧÁį‚Á‚š‹„SŒ$ŠąR•Rh) ŧ‚ĘRŒ‚ĀR8Œ‹ˆ)‚ĘR}Œ‚ĀRŸŒ„šRņE’ŧßqQ )fqč‚åßÁŒ‚Ųß匑tRqQ¸)$đ‚ƒR‚RF‹Đ)œRf’ũß’Qč)g›č‚ ā“„ Q@’Û Q*gę‚.Ûō’ÖĐQ *5s邎Ö÷‰W…ßQ8*@Qé‚f…)ކģIßQ #é‚ĘI)ŽŠKLčQP* #‚dL[Ž‚ZLŽ“ëR+8”RuĢ~‡|LôQ@‚‹LĢŽˆR†RÛRH5áé˙uÛ‚aÛĪŽ†āL'R#;žé˙M‚īLķŽūMCR#;˙AM‚-MūĢLYR5‚ēL;ˆtR„Q=ˆS„SŠ{ „jSŠ{ ĩėœrS(œ ņĄ‘/r5%‘—h* ņ¤sss4 ‘¤~’×–S˜*s.ėŽ×‚×_’Ή–SČ*ˇę‚Ū‰§ˆÎS’Ė×ÔSø*_ë˙īׂÛ×ī’ØÔS(+#? ë˙'Ø‚Øī„GT¸ũ†VMIT3#?<ë˙yM‚eM„|T¸ũūMšW#?˙AM‚-Ms’ī‰žTH+ņ낊‰‚ū‰‰ĩ‰žTx+c­ë‚ĉˆU‘t‰+U¨+c‚ƒ‰吊4‰+U¨+ ŧ˙Z‰˙M‰‚C‰吆ĢLuW%ė‚ēL;‘ˆ’W„ZU¸ũˆ_WˆrW’ßZUĀ+tEí‚ĒßQ‘‚žßh‘‘ŋäyUđ+$´‚Øä—‘‚ÎäŦ‘‹,įäʑŠ΂yU0, ‚‚Ũ‚Ŧ‘ŠĮ¸VP, p‚4Įߑ‚*Į’’­‚ģVp, ŧõė‚Á‚’„7WŒ$ŠąRÅV, ŧ‚ĘR|’‚ĀRž’‹°,‚ĘR㒂ĀR“„éVņE’ŧ߇UČ,tĨí‚åß'“‚ŲßK“‘tR‡Uā,$đ‚ƒR}“‚RŦ“‹ø,œRĖ“’QŠU-uŲí‚4Qį“‚*Q”„ŊUč<’2āU(-tĒî˙Kā‚AāH”‡ãÚŖU„‚îÚz”ūųQŖU!¯‚R”‚R¯”‚Rz”€ŖU.RĪ”ūĐQŖU!V‚įQ㔂ÛQ•‡?PŖU!`‚VP㔂JPĪ”†2āŠUtqī˙Kā‚Aā•‡ÛŠU„‚ Ûz”ū|QŠU!m‚•QL•‚‹Qz”€ŠU¤Qp•ūMQŠU!E‚dQL•‚XQ•‡PŠU!\‚2PL•‚&Pp•’ũßŋU@-v›ī‚ ā‹•„ÍU@’ÛÍUX-vņ‚.ÛŊ•’ÖũUx-5sđ‚ŽÖW… V-@Qđ‚f…!–†ģI V #đ‚ĘI!–ŠKLV¨- #‚dLS–‚ZL…–“W+8”RuĢ~‡|L!V@‚‹LŖ–ˆ>V†RÛ>VH5áđ˙uÛ‚aÛĮ–’āLJVĀ-#;žđ˙M‚īLë–ūMpV#;˙AM‚-M—ūĢL†V5‚ēL3—ˆĄVˆGW„OWŠ{ „šWŠ{ ÷ÖĄ/cœ<ņōøŽÖ‘‰ÖØ-@üņ‚ŽÖW—‰W…ø-@Úņ‚f…—†ģI #Ąņ‚ĘI—ŠKL%. #‚dLŗ—‚ZLā—“a+8”R‘o‡|L-@‚‹Lū—ˆD„L”{ ß'Ŧō,ōāž“e_ëp‹Ũ÷ōFkœHōįōøō‘ø ō‘’W…5(.ŽŌō‚f…˜†ģI5 #™ō‚ĘI˜ŠKL;@. #‚dL;˜‚ZLu˜“i+8”R‘_„(ŝ„L”{ ß öōķāž“‘_ŪžÉ)ķ_5÷įō8kˇœ/ķ<õøöō‘øķ‘†T-,}ķ‚+T“˜ūĄI- ‚°I“˜’A0X.,Ûķ‚3Aܘ‚)A™†aO0 Đķ‚lOܘ„6ė{ „Ch’W…Cp.,Sô‚f…™’ģIC. #ô‚ĘI™ŠKLL¨. #‚dLU™‚ZL‘™“h+8”Ruc†t‰z +›ô‚ƒ‰¤™ū4‰z ŧ˙Z‰˙M‰‚C‰¤™†W…˜,õøf…udŸ†ģI˜ #ÚôøĘIudŸūKLž #‚dLĪ™‚ZLü™“Ž+8”Ruc„-y]„z%| „‘ō„ˇŠ{ ßęÂKõaõāž“tíëp‹@7ߍ¨põ…õāž“(āHÄ%÷<õk;­œĄõ÷øKõ‘øUõ‘’aõ8Ā.Žäö‚põšžˆ? õûõ‚ˆFš„HU€ ‰W…KØ.ķrö‚f…Yš†ģIK #9ö‚ĘIYšŠKLVđ. #‚dLyš‚ZL›š“ˆ+8”Rug‡W…Œ!ķøf…uT†ģIŒ #ĒöøĘIuTūKL” #‚dLؚ‚ZL›“¤+8”Rug„(ŝ„i”{ „­Š{ ¨čžĪ-eœ øøŸ‘øŸ‘—/øŸ.Ÿ‘†A# y Ÿ÷‚3A›‚)A[›†aO# ”÷‚lO›„+ė{ „6hGøøf…u†ģIG #Õ÷øĘIuūKLL #‚dL‡›‚ZL´›“\+8”Rugˆ#„eŠ{ •,!‡œåųŲ!'%9(ūĨņĄMK%´´'‘ĄÕ%ĩåų‘— /ÚųNI%¸@@%šh™ŖB%ēĸøĮ›…øĨM1%ģyø‘’aO@/%ēâø‚lO œ„"ė{ ’t‰%`/%ģ*ų‚ƒ‰5œŠ4‰%`/ ŧ˙Z‰˙M‰‚C‰5œ†ÕI4%ŧJų‚äIaœiģų‚f…Ŗœ†ģIi #‚ų‚ĘIŖœūKLn #‚dLˇœ‚ZL䜓~+8”Rug„@„Oh„X„‡Š{ ĢėĀWÜœ_ū–zģœCĻ÷œ—x/Tū¤strĄĀæ‘X’^ā(X/Ģ`ú‚vā‚iā“‹/Šƒā’^ā,X¨/Ŧ—ú‚vāĢ‚iāŋ‹¨/Šƒā’čžuXĀ/žyû‚Ÿם‚Ÿž‹Ā/Š.Ÿ’A~Xā/ y û‚3AEž‚)Amž„Xh7Yqû‚f…ž’ģI7Y0 #8û‚ĘIžŠKL9Y0 #‚dLĄž‚ZLΞ“QY+8”Ru[ˆ~X’W…X00žņû‚f…ធģIXP0 #¸û‚ĘIដKL“Xh0 #‚dL˙ž‚ZL!Ÿ“0Y+8”Ru[†W…ĒXžiü‚f…?Ÿ†ģIĒX #0ü‚ĘI?ŸūKL°X #‚dLTŸ‚ZLiŸ“ĀX+8”Rw’^āČXˆ0§ ü‚vā|Ÿ‚iāŸ‹ˆ0Šƒā’^āčX 0°Ûü‚vā¨Ÿ‚iāŧŸ‹ 0ƒāԟ’^āųX¸0ąũ‚vā( ‚iā< ‹¸0Šƒā’^āYØ0˛Iũ‚vāT ‚iāh ‹Ø0Šƒā†W…SYžÁũ‚f…€ †ģISY #ˆũ‚ĘI€ ūKLYY #‚dL• ‚ZL “fY+8”Ru[†W…fY6ž9ū‚f…Õ †ģIfY #ū‚ĘIÕ ūKLlY0 #‚dLꠂZLĄ“yY+8”Ru[ˆ˙W„cX…Û„uX ø„‚YŠ{ •Åė Y œĸstrÜM(‘–Ü %*Ą—đ0õĨOėā4 ‘¤~—1k˜iá %yĄ‹01™Š&âCĻģĄ’~aZX1îk˙‚ąaÎĄ‚¤aĸ†ÕIZ Ų `˙‚äIÎĄūģIZ Õ‚ĘIÎĄūĄIZ -‚°IÎĄ„6ZR$’W…6Zx1îä˙‚f…Kĸ’ģI6Z˜1 #Ē˙‚ĘIKĸŠKLBZ°1 #‚dLoĸ‚ZLŦĸ“XZ+8”Ru§~†W…Ž[î_øf…u¨~Ÿ†ģIŽ[ #%øĘIu¨~ŸūKL—[ #‚dLĘĸ‚ZLųĸ“Ē[+8”Ru§~„Zęų’ÛqZČ1đÔ‚.Û Ŗ’ÖZč15C‚ŽÖ>Ŗ‰W…¤Z2@!‚f…pŖ†ģI¤Z #į‚ĘIpŖŠKL­Z 2 #‚dLĸŖ‚ZLÔŖ“o[+8”Ru¨~‡|LšZ@‚‹LōŖˆ×Z†RÛ×ZB5ą˙uÛ‚aÛ¤†āLíZ#;Ž˙M‚īL:¤ūM[#;˙AM‚-M^¤ūĢL[5‚ēL‚¤ˆ6[ˆÛY„qZËX„Y[,ˆ„[„Œ[Š{ áäėAŪ§xxM(Ūx&'ëmsgyY5âņiz&'Ļ+ũĄ°[œ\=ûž“6_‘Ą§xĄ=‘’ģ÷Ä[82ĸŅ‚Ę÷ŋ¤ūJÄ[ Û‚Jŋ¤ūīIÄ[ -‚ūIŋ¤’Ė[P2ĸ2‚%ͤ‚ᤂ ú¤‹P24Ĩ’:äô[p2|Ķ‚ZäZĨ‚Pä|Ĩ‹p2…b‘~aô[ˆ2ƒ‚ąaZĨ‚¤a›Ĩ†ÕIô[ Ų Æ‚äIZĨūģIô[ Õ‚ĘIZĨūĄIô[ -‚°IZĨ„\R$’W…\¨2|K‚f…´Ĩ’ģI\Č2 #‚ĘI´ĨŠKL\ā2 #‚dLÖĨ‚ZLøĨ“\+8”Ruc’%bH\ø2€Ž˙Eb‚;bĻ‹ø2…b‘áPK\3ƒ‚Q*Ļ‚õP>Ļ„i\R$†W…”\|&øf…udŸ†ģI”\ #íøĘIudŸūKLš\ #‚dLaĻ‚ZLŽĻ“Ē\+8”Ruc„ô[_ū„ŗ\Š{ k5 œõĀ\ZœzĄCõM(‘„č\_ūˆ ]Ļåü— ]‚œ•vûž“6_‘ĄC—M(‘’:äB]03˜q‚ZäĄĻ‚PäęĻ‹03…b‘~aB]H3ƒ‚ąaĄĻ‚¤aB§†ÕIB] Ų d‚äIĄĻūģIB] Õ‚ĘIĄĻūĄIB] -‚°IĄĻ„V]R$’W…V]h3˜é‚f…Z§’ģIV]ˆ3 #°‚ĘIZ§ŠKL_] 3 #‚dL–§‚ZLŌ§“x]+8”Rus†W…ƒ]˜aøf…utŸ†ģIƒ] #(øĘIutŸūKL‰] #‚dL¨‚ZL=¨“™]+8”Rus„B]B„ĸ]Š{ Ļũš°]‚œ‘r ûž“6_‘ĄCš(‘’:äŌ]¸3›m‚ZäP¨‚P䙨‹¸3…b‘~aŌ]Đ3ƒ‚ąaP¨‚¤aņ¨†ÕIŌ] Ų `‚äIP¨ūģIŌ] Õ‚ĘIP¨ūĄIŌ] -‚°IP¨„æ]R$’W…æ]đ3›å‚f… Š’ģIæ]4 #Ŧ‚ĘI ЊKLī](4 #‚dLEŠ‚ZLŠ“^+8”Rus†W…^›] øf…utŸ†ģI^ #$ øĘIutŸūKL^ #‚dLŋŠ‚ZLėŠ“)^+8”Rus„Ō]B„2^Š{ •í@^Ëœ1œ<%ī<%ļcŽ<%˙ŠļosŽp7@Ģž­Pp^—Ū ‚ÎPˇĢ‚ÁPĪ̉­P€^@4Ŧ ‚ÎPâĢ‚ÁPúĢ„‡^R$ž­P ^‘: ‚ÎP Ŧ‚ÁP%Ŧž­P°^šc ‚ÎP8Ŧ‚ÁPPŦž­PĀ^Œ ‚ÎPcŦ‚ÁP{Ŧž­PĐ^Šĩ ‚ÎPŽŦ‚ÁPĻŦž­Pā^ŖŪ ‚ÎPšŦ‚ÁPŅŦž­P_  ‚ÎPäŦ‚ÁPüŦž­P_Ļ0 ‚ÎP­‚ÁP'­ž­P _”Y ‚ÎP:­‚ÁPR­ž’ā0_¯x ‚āe­‰~a^_X4ŗ ‚ąaŦ­‚¤a×­†ÕI^_ Ų ø ‚äIŦ­ūģI^_ Õ‚ĘIŦ­ūĄI^_ -‚°IŦ­„l_R$‰W…l_x4ŗz ‚f…Ž’ģIl_˜4 #A ‚ĘIފKLo_°4 #‚dL$Ž‚ZL9Ž“¤_+8”Ru_‰W…_Đ4ŗņ ‚f…WކģI_ #¸ ‚ĘIWފKL…_č4 #‚dLlŽ‚ZLŽ“š_+8”RwžáPŗ_°$ ‚QŸŽ‚õPĘŽ„Â_R$žW…Î_ŗ› ‚f…ŨŽ’ģIÎ_5 #b ‚ĘIŨފKLŅ_5 #‚dLōŽ‚ZL¯“æ_+8”Ru_žW…æ_%ŗ‚f…2¯†ģIæ_ #Ų ‚ĘI2¯ūKLė_ #‚dLG¯‚ZLt¯“ø_+8”Ru_„K_…Û„]_ ø„`Š{ •-í`gœÖļcŧ<%‡¯ļosŧp7Ú¯ž­P)`ŋ•‚ÎP-°‚ÁPE°„;`R$ž­PX`ÂËøÎPŌŸ‚ÁPf°„j`R$ˇQ`r •Gí€`ŊœĖĖŊ'%–R)´'‡°Ģlen&'´°ĸosp7‘€œ`–Ĩ@4H‘ÕŸ™ĩÛ%ā°†­Pœ`ŠøÎPÕŸ‚ÁPą„¯`R$¯`t—™ŗS&'1ą€Į`V˜curē'gą’­PĮ`05 ø‚ÎP’ą‚ÁPĒą„˙`R$†¨āā` "‚ŗāŊą„é`€€ †­P˙` V‚ÎPÜą‚ÁPôą„aR$ūĀāa  ‚Õ➂Ë➓a1”Pu”Rwū­P#aøÎPÕŸ‚ÁP9˛„2aR$álíĖŊ'%ŪR)´'ëlen&'ëosp7•’í@a`œĪ–R)+´'X˛ĸlen+&'‘ĸos+p7‘ŠĖ\aH5,‚úl˛‚íĸ˛‚⨞†­Psa'Ž‚ÎPŗ‚ÁPŗ„…aR$„saÖ¸ aÖ”R‘1•˛í aqœĀĢs6´'9ŗĢos6p7dŗ†áēa :6‚áŗ‚ášŗ„Äac=†­PÄa:j‚ÎPÍŗ‚ÁPåŗ„ÖaR$†­Pøa8ĄøÎPđŸ‚ÁPøŗ„ bR$„Ūac~ ¸ņaÖ”‘‘•Íí bœ_ĢsX_´ĸosXp7‘’ÕI bp5YJ‚äI´ŠģI bˆ5 Õ‚ĘI´ŠĄI b 5 -‚°I´¸6bÖ”‘‘ô1áiЉëstr&Ā´'ëos&Āp7•\-ØœIT´'Ą‘/&O‘—¸5 ¤ss&P4 ‘¤~’×ā5&P’Ž×‚×+´’Ή6‚Ū‰s´ˆ5’Ė×;06Ã˙īׂÛ×ģ´’Ø;`6#?o˙'Ø‚Øģ´„ޏũ†VM°'#?Ÿ˙yM‚eM괄׸ũūMž#?˙AMø-MuŦ~Ÿ’ī‰ķ€6U‚ŠLĩ‚ū‰lĩ‰ĩ‰ķ 6c‚ĉlĩˆy‡t‰’c‚ƒ‰ŋĩū4‰’ ŧ˙Z‰˙M‰‚C‰ŋĩ†ĢL™%{‚ēLļˆļ„¯¸ũˆˆ’dˇĀ6&Qo‚|.ļ‚ojļ’xáŪā6&ÄB‚—á­ļ‚ŠáÜļ‹ā6ŠNáŪā6&ô‚fá­ļ‚YáÜļŠ&áŪā6&X‚<á­ļ‚1áÜļ„īĀ’W…īø6&Äģ‚f… ˇ’ģIī7 #‚ĘI ˇŠKLû07 #‚dL-ˇ‚ZLQˇ“++8”RuĻ~†­Pđ &Âī‚ÎPoˇ‚ÁP‡ˇ„R$†W…D&Äh‚f…ˇ†ģID #.‚ĘIˇūKLM #‚dLŗˇ‚ZLⷓ`+8”RuĻ~ˆÜ’ũßH7&R™‚ āõˇ„@’Û`7&R‚.Û'¸’ÖC€75q‚ŽÖY¸‰W…R˜7@O‚f…‹¸†ģIR #‚ĘI‹¸ŠKL[°7 #‚dLŊ¸‚ZL+8”Ru¨~‡|Lg@‚‹L šˆ„†RÛ„<5ß˙uÛ‚aÛ1š†āL”#;ŧ˙M‚īLUšūMĒ#;˙AM‚-MyšūĢLĀ5‚ēLšˆÛˆn„vŠ{ „žŠ{ 6•čí@bÍœũĖŊ<%–R)M(ÁšĢlen&'íšĸosp7‘€^b¤Ĩ@4H‘Ÿ™ĩÛ%k熭P^b×øÎPŸ‚ÁPŽē„qbR$qbČ™ŗS&'­ē‹Č7˜curS(Ėē’­Pxbč7 A‚ÎPöē‚ÁP섨bR$†ĢáĒb€‚ļá!ģ€ĒbÄá!ģ„žb€€ †­PØb ´‚ÎP@ģ‚ÁPXģ„įbR$“œb1”Rwū­PđbøÎPÕŸ‚ÁPkģ„cR$á î8ĖŊ<%ŪR)M(ëlen&'ëosp7•3îcaœ–R)1M(Šģĸlen1&'‘ĸos1p7‘Šũ,c82‚+žģ‚Ôģ‚ ŧ†­PAc'ß‚ÎP4ŧ‚ÁPLŧ„ScR$„Ac#¸qc#”R‘1•Sî€cqœņĢsGM(kŧĢosGp7–ŧ†ášc Kg‚áÁŧ‚áëŧ„¤cc=†­P¤cK›‚ÎP˙ŧ‚ÁPŊ„ļcR$†­PØcIŌøÎPđŸ‚ÁP*Ŋ„ęcR$„žc,¸Ņc#”‘‘•nîdœĢsdIŊĸosdp7‘’ÂMd08e{‚ŅMIŊŠJdH8 Õ‚JIŊŠīId`8 -‚ūIIŊ¸d#”‘‘k5ᐊēëstr&ÔM(ëos&Ôp7•}-+œũ$ITM(Ą‘/&Oũ$‘—x8č$¤ss&P4 ‘¤~’× 8&PŽ×‚×]Ŋ’ΉČ8K‚Ū‰ĨŊˆ5’Ė×;đ8ķ˙īׂÛ×íŊ’Ø; 9#? ˙'Ø‚ØíŊ„ޏũ†VM°'#?Đ˙yM‚eMž„׸ũūM´#?˙AM‚-M~ž’ī‰đ@9…‚Š”ž‚ū‰Ėž‰ĩ‰đ`9cA‚ĉĖžˆg‡t‰€c‚ƒ‰;ŋū4‰€ ŧ˙Z‰˙M‰‚C‰;ŋ†ĢL%Ģ‚ēLÄŋˆŦ„ЏũˆyˆŒ’•ą€9&QN#‚­Úŋ‚ 0Ā’*âØ°9&Ør ‚IâsĀ‚<âŧĀ‹°9Šâذ9&ô‚âsĀ‚ âŧŠØáØ°9&X‚îásĀ‚ãáŧĀ„éņ’]âéČ9&ØÄ!‚lâ.Á’Jéđ9 #Í ‚J.ÁūīIé -‚ūI.ÁŠJNõ: #‚cNyÁ‚YNÁ‹(:‚cNÆÁ‚YNÜÁ‰'L@: öˇ!‚>LúÁ‚2L |!‚>LS‚2Lh‡ĘK R‚áKS‚ÕKh‡ôK@ T‚ L}‚˙K’€@L¸Â„>"†­Pā&Öø!‚ÎPä‚ÁPü„÷R$’]âÎX:&ØG#‚lâÆJÎ #S"‚JÃūīIÎ -‚ūIÊJN×p: #‚cN6ÂYNZÀõ6øcNuĻ~Ÿ‚YNƒÃ‰'Lõˆ: ö:#>L‚2LĄÃ#‚>LÃÂ2LØÃ‡ĘK R‚áKÃÂÕKØÃ‡ôK  T Lø˙KpŸ€  ŸLR„"ˆÖ’ũߨ:&Rx#‚ āíÄ@’ÛĀ:&Rá$‚.ÛĒÖ0ā:5P$‚ŽÖQĉW…?ø:@.$‚f…ƒÄ†ģI? #ô#‚ĘIƒÄŠKLH; #‚dLĩĂZLįē +8”Ru¨~‡|LT@‚‹Lňq†RÛq<5ž$˙uÛ‚aÛ)ņāL#;›$˙M‚īLMÅūM—#;˙AM‚-MqÅūĢL­5‚ēL•ňČˆí„´Š{ „õŠ{ (ø•ĮĘ dŊœœ)Ģstr[ ´'šÅ—(;‘)ĨĄ‘\ ûŗ‘’t‰4dH;\ Š%‚ƒ‰Ɗ4‰4dH; ŧ˙Z‰˙M‰‚C‰Ɨ`;)˜ch^ '%ƒŽX€dˆ;g '‚§XĻÆ˙X‹ˆ;ļXĪÆ†ÕI€d /%&˙äIūģI€d Õ˙ĘIūĄI€d -˙°I†ŲNŗd 2O&‚đNúƂäN"Į†ģI¸d 3ƒ&˙ĘIūĄI¸d -˙°I’!OĀd ; 3'‚:O:Į‚0OZĮ€pe‚:O’Į‚0OĻĮžæJse Õå&˙õJ‡ŲN}e ×˙đN‚äNÆĮ„¨dÂ’W…e¸;d Œ'‚f…ßĮ’ģIeØ; #S'‚ĘIßĮŠKL eđ; #‚dL ȂZL,ȓhe+8”Ru_’W…(e<d (‚f…JȆģI(e #Ë'‚ĘIJȊKL.e < #‚dL_ȂZLtȓ@e+8”Rv†W…Ģed |(‚f…‡Č†ģIĢe #C(‚ĘI‡ČūKLąe #‚dLœČ‚ZLÉȓÁe+8”Ru_†W…Áed ô(‚f…ÜȆģIÁe #ģ(‚ĘIÜČūKLĮe #‚dLņȂZLɓ×e+8”Ru_„ûd*ę„ e ø„eˆe#|)˙f…†ģIˆe #C)˙ĘIūKLe #‚dL1ɂZL^ɓ e+8”Ru_„Kdc~ „Yd„ŠeŠ{ •f!Zœ‘*Ų!'%9(ūĨņĄMK P ‘*‘ĄÕ Q –*‘—8<†*ĨM1 S ‘<u*øf…u†ģI< #<*øĘIuūKLA #‚dLqɂZLžÉ“Q+8”Rugˆ „+„ZŠ{ īīá !+Ų!'%9(ūĨņŪMK … +ŪÕ … '%âNI ‡ îM1 ‰ Ũ*â˙f…īŽ8žÂāeœa0ƒ2@Âa0‘ƒ2RÃf0‘—P<V0¯dirÆ7 ‘TžčˆúeÄŠ+‚÷ˆąÉ‡6Túeo‚ETąÉūÕIúe 6‚äIąÉ‰›*fp<Į`,‚Î*ʂÁ*9ʋp<Šé*Ng!N,øf…u`Ÿ’ģINg< #,øĘIu`ŸŠKLQg¨< #‚dL‹Ę‚ZL¸Ę“jg+8”Rudˆ f„-fĩ‰'¯AfĀ<Į-‚@¯Ëʂ6¯˞W…øf@˙,‚f…€Ë’ģIøfā< #Æ,‚ĘI€ËŠKLúfø< #‚dL“Ë‚ZLĀ˓g+8”Ru[ˆJf„Rff­‰W…Rf=Į‡-‚f…Ķ˒ģIRf0= #N-‚ĘIĶˊKLUfH= #‚dL˙˂ZL.Ė“Āf+8”Ru[‰W…efh=Į˙-‚f…LˆģIef #Å-‚ĘILˊKLkf€= #‚dLˆĖ‚ZLÄĖ“Đf+8”RuT‰ˆof˜=Į’.‚͈âĖ‘W…of°=;‚f…âˆģIof #W.‚ĘIâˊKLufČ= #‚dL͂ZL@͓°f+8”RuTž}ˆˆfÅÁ.‚–ˆ^͂Œˆ~͈”fžˆÚfĮS/‚͈œÍ‡W…Úf;‚f…œÍ†ģIÚf #/‚ĘIœÍūKLāf #‚dLąÍ‚ZLŪ͓ėf+8”Ru[žW…gĮĘ/‚f…ņ͆ģIg #‘/‚ĘIņÍūKLg #‚dL΂ZL3Γ$g+8”Ru[žW…$g*ĮA0‚f…FΆģI$g #0‚ĘIFÎūKL*g$ #‚dL[΂ZLˆÎ“6g+8”Ru[„fæē„@fœ)„õfŠ{ ƒ5ƒ5•‰îpgœ43ĄžšŽ43‘Ąr¤93‘—ā=)3ĨQ‘\F‘X’W…ĩg>–11‚f…›Î†ģIĩg #ø0‚ĘI›ÎŠKLģg(> #‚dL×΂ZLĪ“(h+8”Rud†čžĐg)–Ļ1‚ŸQĪ‚ŸyĪ€Đg)Š.Ÿ’Aâg@> y ž1‚3A™Ī‚)AÁĪ„öghˆâg’W…hX>–2‚f…áĪ’ģIhp> #å1‚ĘIáΊKLhˆ> #‚dLõĪ‚ZL"Гh+8”Ru_†W… #Õ2‚ĘIŠĐŠKL\h¸> #‚dLŸĐ‚ZLĖГqh+8”Ru_„“gy]ˆŦg„hœ)„WhŠ{ ô1_5á¨îq3œ5%ī5%écŽ5%éosŽp7•Ôt;œ5%ī5%›cÕ5%‘›osÕp7‘—Đ>i;æ˙âØī‰­Pđ>×ū3øÎPĐŸ‚ÁPßЄ1R$‰>33?Øá8‚e3CŅ‚[3§Ņž­PP—Y4‚ÎPÛŅ‚ÁPķŅ„bR$ž­PĀ‘Œ4‚ÎPŌ‚ÁPŌ„ŌR$ž­Pč šŋ4‚ÎP1Ō‚ÁPIŌ„úR$ž­P ō4‚ÎP\Ō‚ÁPtŌ„R$ž­P( Š%5‚ÎP‡Ō‚ÁPŸŌ„:R$ž­PH ŖX5‚ÎP˛Ō‚ÁPĘŌ„ZR$ž­Ph Ŧ‹5‚ÎPŨŌ‚ÁPõŌ„zR$ž­Pˆ  ž5‚ÎPĶ‚ÁP Ķ„šR$ž­P¨ Ļņ5‚ÎP3Ķ‚ÁPKĶ„ēR$ž­PČ ”$6‚ÎP^Ķ‚ÁPvĶ„ÚR$ž’āč¯C6‚ā‰Ķ‰~a @?ŗÎ6‚ąaĩĶ‚¤aí͆ÕI  Ų Ã6‚äIĩĶūģI  Õ‚ĘIĩĶūĄI  -‚°IĩĶ„.R$‰W….`?ŗE7‚f….ԒģI.€? # 7‚ĘI.ԊKL1˜? #‚dLNԂZLˆÔ“ø+8”R‘[‰W…E¸?ŗŊ7‚f…ĻԆģIE #ƒ7‚ĘIĻԊKLKĐ? #‚dLČԂZLčԓč+8”R‘DžáP°đ7‚QՂõP%ՄR$žW…Eŗg8‚f…8ՒģIEč? #.8‚ĘI8ՊKLH@ #‚dLLՂZLyՓ`+8”R‘[žW…cŗĖ8‚f…ŒÕ†ģIc #Ĩ8‚ĘIŒÕūKLi #‚dL Õ‚ZLĩՄ…Û„ ø‰­Ph@Ų29‚ÎPČՂÁP քvR$„āR$„aR$„$R$‰­Pv@@āo9‚ÎPwւÁPŋքˆR$„~R$ž­PŖęĸ9‚ÎP˙ւÁPׄĩR$‰­P`@čÕ9‚ÎP*ׂÁPRׄŽR$‰~aŽx@č\:‚ąa|×˙¤a†ÕIŽ Ų Q:‚äI|×ūģIŽ Õ‚ĘI|×ūĄIŽ -‚°I|ׄžR$‰W…ž˜@čĶ:‚f…‘×’ģIž°@ #š:‚ĘI‘×ūKLĮ #‚dLĻׂZLĶדÛ+8”R‘[žW…xčJ;‚f…æ×†ģIx #;‚ĘIæ×ūKL~ #‚dLûׂZLؓŽ+8”R‘[„‘=„‡=„…Û„vŠ{ •ī€h#œŽ;›cí5%‘›osíp7‘„žhq3áīá;œ5%ī.%écŽ.%éosŽp7•KīĻœäCœ5%ī.%›cÕ.%‘›osÕp7‘—Č@ŲCæ˙âØīž­P×n<øÎPĐŸ‚ÁP#؄,R$‰Ž;.ā@ØQA‚Õ;‡Ø‚Ë;ëØž­PP—É<‚ÎP‘Ų‚ÁPŠŲ„bR$ž­PĀ‘ü<‚ÎPŧŲ‚ÁPÔŲ„ŌR$ž­Pč š/=‚ÎPįŲ‚ÁP˙Ų„úR$ž­P b=‚ÎPڂÁP*ڄR$ž­P( Š•=‚ÎP=ڂÁPUڄ:R$ž­PH ŖČ=‚ÎPhڂÁP€Ú„ZR$ž­Ph Ŧû=‚ÎP“Ú‚ÁPĢڄzR$ž­Pˆ  .>‚ÎPžÚ‚ÁPÖڄšR$ž­P¨ Ļa>‚ÎPéڂÁPۄēR$ž­PČ ””>‚ÎPۂÁP,ۄÚR$ž’ā蝺>‚ā?ۉ~a(Aŗ>?‚ąaĀۂ¤aøÛ†ÕI( Ų 3?‚äIĀÛūģI( Õ‚ĘIĀÛūĄI( -‚°IĀۄ6R$‰W…68Aŗĩ?‚f…9ܒģI6XA #|?‚ĘI9܊KL9pA #‚dLY܂ZL“Ü“ +8”R‘[‰W…MAŗ-@‚f…ąÜ†ģIM #ķ?‚ĘIąÜŠKLS¨A #‚dLĶ܂ZLķܓũ+8”R‘DžáP°`@‚QŨ‚õP<Ũ„,R$žW…[ŗ×@‚f…OŨ’ģI[ĀA #ž@‚ĘIOŨŠKL^ØA #‚dLcŨ‚ZLŨ“v+8”R‘[žW…yŗį†aOR N‚lOûæ„[ė{ „jh’W…jE,œN‚f…Rį’ģIj8E #cN‚ĘIRįŠKLsPE #‚dLį‚ZL°į“¸+8”Ru_†t‰Ė +äN‚ƒ‰Îįū4‰Ė ŧ˙Z‰˙M‰‚C‰Îį†W…ī,\O‚f…ųį†ģIī ##O‚ĘIųįūKLõ #‚dLč‚ZL;č“+8”Ru_„Oy]„Ę%| „áō†ã{+æO‚ãNč‡*i{+U‚9iNčūqG{+‚ŠGpč‚€GNč„ŒÅ†ã+Pøãu`Ÿ‡*iUø9iu`Ÿ„qGˆ „Š{ úÚ [œ[P{TITPãûž“‘_‘Ą‘/{T‘’fã&hE Q‚†ã„č‚|ãšč‹hE…bžę^&ƒÍP‚ų^šč‘­P)ˆEƒ‚ÎPōč‚ÁP'é’aO7°EQ‚lObé„Cė{ —ČE“Q‚ÎPué‚ÁP‰éЇPTāE‚ P­é‚–PÁéžcPŲ ˜‡Q‚zP­é‚nPÔ鄿™ũ„QR$’įōQFēS‚ķčé‚öō$ę†Tn,R‚+TMęūĄIn ‚°IMę’Aq F,cR‚3A–ę‚)AĘę†aOq XR‚lO–ę„wė{ „„h’W…„8F,ÛR‚f…Ūę’ģI„XF #ĸR‚ĘIŪęŠKLpF #‚dL ë‚ZL<ë“ø+8”Ru_’t‰ ˆF+#S‚ƒ‰ZëŠ4‰ ˆF ŧ˙Z‰˙M‰‚C‰Zë†W…1,›S‚f……ë†ģI1 #bS‚ĘI…ëūKL7 #‚dLšë‚ZLĮë“G+8”Ru_„ny]„ %| „!ō†ã•+%T‚ãÚë‡*i•+U‚9iÚëūqG•+‚ŠGüë‚€GÚë„Ļŝ†ãGjTøãu`Ÿ‡*iGUø9iu`Ÿ„SqGˆ&„[Š{ `ãú œŸTŲWIT3ûž“‘_‘Ą‘/ŲW‘’žå  FūT‚žåė‚´å0ė‹ F…b„1ĀĐ’įō1¸FW‚ķhė‚öōĢė†TL,cU‚+TßėūĄIL ‚°Ißė’AOØF,ÁU‚3Aí‚)A^í†aOO ļU‚lOí„Xė{ „gh’W…gđF,9V‚f…rí’ģIgG #V‚ĘIríŠKLp(G #‚dLĄí‚ZLĐ퓸+8”Ru_†t‰Ė +V‚ƒ‰îíū4‰Ė ŧ˙Z‰˙M‰‚C‰îí†W…ī,ųV‚f…î†ģIī #ĀV‚ĘIîūKLõ #‚dL.î‚ZL[î“+8”Ru_„Ly]„Ę%| „áō†ãx+ƒW‚ãnî‡*ix+U‚9inîūqGx+‚ŠGî‚€Gnŝ†ãČWøãu`Ÿ‡*iUø9iu`Ÿ„qGˆ „Š{ ¸8ß0 ôW XIT/üāž“‘_Ū‘/ X_5áž-3Xéosč3Xésbč8X2_5ßX SXkXIT?āž“‘_Ū‘/kX å߀ †XžXITLåāž“‘_Ū‘/žX\å´×īiœękũ´'‘ũ´'‘ũ´'‘ Ąîdęk‘ĄTôe?‘Ą¤qfīk‘—@GßkĨjØg\F‘¤¤msgj/ü‘¨˜rtôk¤î’fã•ipGlY‚†ããî‚|ã;ī‹pG…b„ąi­P’:äąiˆGl>Z‚Zä„ī‚PäŌī‹ˆG…b‘~aąi¨Gƒ‚ąa„ađ†ÕIąi Ų 1Z‚äI„īūģIąi Õ‚ĘI„īūĄIąi -‚°I„ī„ĐiR$’ÎäŅiĐGl€Z‚îäLđ‚ää¤đ‹ĐG…b„ņi­P’fãķičGmÂZ‚†ãíđ‚|ãEņ‹čG…b„j­P’ÉajHm[˙éa‚ßaŽņ‹H…b„'j=’đå'j HmB[‚æ×ņ‚æ/ō‹ H…b„Ej­PPjl\˜in %xō’Îäcj8HoÆ[‚îä‹ō‚ääŖō‹8H…b‘­PrjXHƒ‚ÎP‹ō‚ÁPšō„ƒjR$’žå„jxHo\‚žåŲō‚´åîō‹xH…b„jĀĐ„cji„ĩjĨÕ’ŪWÔjHq˙`‚ūWķ‚ôWRķ’Įâėj¸H*^‚įâ›ķ‚Ũâé틏H…b‘XôjāHƒ‚'X2ô‚X€ô‰~a kIé+]‚ąa´ô‚¤aõ†ÕI k Ų ]‚äI´ôūģI k Õ‚ĘI´ôūĄI k -‚°I´ô„kR$‰W…k Ié¤]‚f…6õ’ģIk@I #i]‚ĘI6õŠKLkXI #‚dLvõ‚ZL˛õ“ķl+8”Ru”žW…Dp é^‚f…Đõ’ģIDpxI #â]‚ĘIĐõŠKLGpI #‚dLæõ‚ZLûõ“_p+8”Ru”„ ky]’įō2k¨IH`‚ķö‚öōNö†TOk,^‚+TŠöūĄIOk ‚°IŠö’ARkČI,í^‚3AĘö‚)Aūö†aORk â^‚lOĘö„Xkė{ „ekh’W…ekāI,g_‚f…÷’ģIekJ #,_‚ĘI÷ŠKLnkJ #‚dLP÷‚ZL÷“m+8”Ru”’t‰m0J+¯_‚ƒ‰÷Š4‰m0J ŧ˙Z‰˙M‰‚C‰÷†W…ƒp,)`‚f…°÷†ģIƒp #î_‚ĘI°÷ūKL‰p #‚dLÆ÷‚ZLÛ÷“–p+8”Ru”„Oky]„m%| „#mō’ãwkHJŗ`‚ãî÷‘*iwk`JU‚9iî÷ŠqGwkxJ‚ŠGø‚€Gî÷„ˆkŝ†ãdpø`‚ã2ø‡*idpU‚9i2ø„qpqGˆėj†)ãŸkqEa‚;ãHøūĸ…Ÿk‚ą…]ø„§kō†)ã-pq‹a‚;ãrøūĸ…-p‚ą…‡ø„:pō’)ã§kJ|Ņa‚;ãœøŠĸ…§k°J‚ą…ąø„ûnō’ãĒkĐJjb‚ãŅø‘*iĒkčJU‚9iŅø„ˇkqG’W…ˇkK‚b‚f…ų’ģIˇk K #Ub‚ĘIųŠKLĀk8K #‚dLQų‚ZLų“Ūl+8”Ru”’)ãslPKvÖb‚;ãÍųŠĸ…slhK‚ą…âų„‰lō†tIšl{ c‚“Iú‚†I;ú„Ēlč} ’=Xmm€K|kf‚]XOú‚SXwú’å„m Kšc‚0åļú‚&åŪú‹ K…b‘­P„mĀKƒ‚ÎPļú‚ÁP4û„ĨmR$’įōĨmčK´e‚ķeû‚öōČû†TËm,˙c‚+TüûūĄIËm ‚°Iüû’AÎmL,]d‚3Aü‚)AXü’aOÎm0L Rd‚lOü„×mė{ „įmh’W…įmHL,Õd‚f…lü’ģIįmhL #œd‚ĘIlüŠKLđm€L #‚dLŽü‚ZL°ü“o+8”RuX†W…Ĩo,Me‚f…Îü†ģIĨo #e‚ĘIÎüūKLĢo #‚dLãü‚ZLũ“¸o+8”RuX†t‰ßo+•e‚ƒ‰#ũū4‰ßo ŧ˙Z‰˙M‰‚C‰#ũ„Ëmy]„Ũo%| „÷oō†ãųm+f‚ãNũ‡*iųm+U‚9iNũūqGųm+‚ŠG}ũ‚€GNũ„ nŝ†ã¸odf‚ãŠũ‡*i¸oU‚9iŠũ„ÅoqGˆ„m’pX2n˜L}Ėi‚Xžũ‚†Xöũ’bå@nĀLûf‚‚å5ū‚xåmū‹ĀL…b‘­P@nāLƒ‚ÎP5ū‚ÁPœū„XnR$’įōXnMi‚ķÎū‚öōũū†Tun,`g‚+T1˙ūĄIun ‚°I1˙’Axn8M,žg‚3AS˙‚)A€˙’aOxnPM ŗg‚lOS˙„nė{ „‘nh’W…‘nhM,6h‚f…”˙’ģI‘nˆM #ũg‚ĘI”˙ŠKLšn M #‚dLŠ˙‚ZLž˙“o+8”RuX†t‰#o+~h‚ƒ‰Ü˙ū4‰#o ŧ˙Z‰˙M‰‚C‰Ü˙†W…Žo,öh‚f…†ģIŽo #Ŋh‚ĘIūKL”o #‚dL‚ZLI“Ąo+8”RuX„uny]„!o%| „5oō†ãŸn+€i‚ã\‡*iŸn+U‚9i\ūqGŸn+‚ŠGq‚€G\„°nŝ†ã?oÅi‚ã…‡*i?oU‚9i…„LoqGˆ@n†)ãOo|j‚;ãšūĸ…Oo‚ą…¯„]oō†ã`ojWj‚ã܇*i`oU‚9iÜ„moqG†W…po‚Đj‚f…ō†ģIpo #–j‚ĘIōūKLvo #‚dL‚ZL7“ƒo+8”Rŭ)ã p!vk‚;ãJūĸ… p!‚ą…_„pōˆKiˆbi„siĨÕ„‘iĨÕ„Ôj&Vˆk„˙ki„'l&V„8l‚€G„Pŝžãxô˙pøãudŸ‡*ixUø9iudŸ„‚qGˆ „<y]„ŠŠ{ Ō:•¸- p;œ6u–[Ū¯ %RĄ ° ´'‘ĄÂŋą ´'‘’čžŅpO˛ 7røŸuŸ‚ŸĄ‹OŠ.Ÿ’AŨp0O y Đq‚3A ‚)AE„īphlq/r‚f…ß’ģIlqHO #r‚ĘIߊKLoq`O #‚dLô‚ZL ˆŨp’čžņpxOŗ As‚Ÿ‚Ÿį‹xOŠ.Ÿ’Aúp˜O y Ęr‚3Ai‚)A †aOúp ŋr‚lOi„qė{ „qhŋq9søf…uP’ģIŋq°O #søĘIuPŠKLÂqČO #‚dLR ‚ZL “Ųq+8”Ru_ˆúp’W…qāO˛ šs‚f…’ ’ģIqP #€s‚ĘI’ ŠKLqP #‚dLä ‚ZL “Hq+8”Ru_’W…"q8P˛ 1t‚f…N ’ģI"qPP #øs‚ĘIN ŠKL(qhP #‚dLp ‚ZL “_q+8”Rw†W…|q#˛ Št‚f…Ž †ģI|q #pt‚ĘIŽ ūKL‚q #‚dLà ‚ZLđ “Žq+8”Ru_†W…Ÿq ˛ !u‚f… †ģIŸq #čt‚ĘI ūKLĨq #‚dL ‚ZL- “ąq+8”Ru_„Ņpâo„—qŠ{ ü&āāqíœNuKwûž“CW‘ĄŲ–É Kw‘—€P@wĨEĘ \F‘l’×c/‚ÁPV/„R$„ųŝˆ€ˆM€„e€Åˆš€ˆˆ2„:Š{ ˆG„OŠ{ ß*ĘL t āž“t ŪuAOy âņlenS%đH–;÷= yëDœš :ŖøL ‘øV ‘—`\%Ŗe i/’­PD€\Pđ ‚ÎP|/˙ÁP„_R$’­P_˜\Q Ą‚ÎP´/˙ÁP„sR$’Y~°\SxĄ‚œYĖ/ŠģI~Č\ Û‚ĘIĖ/ŠĄI~Č\ -‚°IĖ/’­Pąā\V¨Ą‚ÎPā/˙ÁP„ĖR$’~aĖø\W0ĸ‚ąa0˙¤a†ÕIĖ Ų %ĸ‚äI0ūģIĖ Õ‚ĘI0ūĄIĖ -‚°I0„ŪR$’­Pā]Wdĸ‚ÎP-0‚ÁPE0„õR$’~aõ8]Wėĸ‚ąad0˙¤a†ÕIõ Ų áĸ‚äId0ūģIõ Õ‚ĘId0ūĄIõ -‚°Id0„R$„&ŝˆDˆ{„“ģ€ ˆąˆˆ+ˆ<„3Š{ „DŠ{ ß°˜IŖdŖāž“*2âîŪĶ<%÷:Ŗ?āšœ€Ŗ<¤øIŖ‘—P]'¤UŖy0’­PZh]<ĐŖøÎP&Ÿ˙ÁP„qR$’­Pq€]<¤‚ÎP­0˙ÁP„ˆR$„ۀ ˆZ„–=ˆŸˆą„+÷€ „šŠ{ ߢK¤f¤āž“*2âîŪĶH%÷<¤ą8Žœ‚¤4ĨøK¤‘—˜])ĨW¤Å0’­PR¸]HŌ¤øÎPUŸ˙ÁP„jR$’­PjĐ]HĨ‚ÎPî0˙ÁP„|R$„! ˆR„…=ˆŽˆĻ„ŽŠ{ ßC™CĨhĨāž“hĨāHÄ%âîŪĶy%2÷4ĨuĻœ‰Ĩ;ĻøCĨ‘—č]0ρYĨ1’­PJ^yŲĨøÎPĖŸ˙ÁP„bR$’­Pb ^y Ļ‚ÎP/1˙ÁP„tR$„ ˆJ„}=ˆ†ˆž„ĻŠ{ •cđ+œÅŠIE %ĄV7)7‘ĄR)7 %‘ĸend7 %‘ĸv8&;‘ —8^°Š™¨ņ9%G1’dP^9ŲĻ‚,d~1‚,d~1’­P]h^: §‚ÎPļ1˙ÁP„uR$’­Pu€^;9§‚ÎPî1˙ÁP„‡R$’­P”˜^;m§‚ÎP2‚ÁP2„ĻR$’­Pą°^:Ą§‚ÎP12‚ÁPI2„ÃR$õNs¨™IC %\2‹Č^î.ÛD%™ßĻE%“2’͍‚ÎP3˙ÁP„”R$’­PĄ8_>Š‚ÎP03‚ÁPH3„ŗR$’­PĀP_?;Š‚ÎP[3‚ÁPs3„ŌR$„8ŝˆ]„’=„ą=ˆĖ„îŝˆj„Ÿ=„ž=„Ũ=„ė­Pˆõˆˆ#„Š{ „+Š{ üˇ"P1œŨŠLĒûž“AA‘ĄVŸ )7‘ū2ėf  ‚Qė†3øD둆dg M@Ē˙,d˙,d„|;ĻüLŋ‰œdĒĢûž“ļH‘†]ėŦû‘Ē‚lėÎ3’QaÁh_˙ģĒ‚`aí3‚`aí3—€_ Ģ˜i&'4’Qa߁˜_ūĒ‚`a:4‚`a:4„˙ÅŠ„ŋ;Ļ„܁;ĻßmĘ-Ģ8Ģāž“t ÷Ģ%­œTĢîĢø-Ģ‘’­PDĀ_aĢ‚ÎPP4˙ÁP„[R$’­P[Ø_bŊĢ‚ÎPx4˙ÁP„rR$„&ŝˆDˆz„ˆU€ ˆĨ„­Š{ üSĘ ‚‘œŦŅŽûž“t ‘—đ_˛ŽĨ0r Į?‘@ĨNÜv C@‘¸™€Ņz %4”‚Ŧ™<5‚ C@Ž4„Ķ‚/ „ņ‚N „ƒU€ ’­Pbƒ`o ŊŦ‚ÎPÁ4˙ÁP„zƒR$’­Pzƒ0`p íŦ‚ÎPé4˙ÁP„ŒƒR$†­Pƃ} ­‚ÎP5˙ÁP„ۃR$’~a0„H`“ Š­‚ąa)5‚¤a>5†ÕI0„ Ų ž­‚äI)5ūģI0„ Õ‚ĘI)5ūĄI0„ -‚°I)5„@„R$’~aO„h`“ 5Ž‚ąaQ5‚¤af5†ÕIO„ Ų *Ž‚äIQ5ūģIO„ Õ‚ĘIQ5ūĄIO„ -‚°IQ5„_„R$„F‚ŝ„‰‚x „,ƒŖ ˆbƒˆ•ƒ„Ļƒļ ˆƃ„郭Pˆōƒˆ„„0„­P„O„­Pˆg„ˆ„ˆ”„ˆŠ„„‡„Š{ „œ„Š{ „ą„Š{ ßCÆāŽ¯āž“ŊūāHÄ%âîŪĶÎ%…ŅŽst}œ!¯´øāŽ‘†ĶėĘJ¯‚Ūėy5—€`寁öŽŒ5’­P^˜`Îޝ‚ÎPĩ5˙ÁP„uR$’­Pu¸`Ξ¯‚ÎPŨ5˙ÁP„ŒR$„>ˁ ˆ^„š=ˆĸˆ†:ĨaĪëą‚:õ5†ŠÉŽH¨8ą‚ŋÉ 6‚ŗÉ%6‚§É86‡[ÉŽH—‚{É%6‚oÉ86€ŽH‡$:ŽH~‚D:%6‚8:K6‘:ɸĐ`g‚NÉv6‘ƒ‡¸Đ`]‚•‡v6ŠW…¸Đ`Ō‚f…Ž6’KL¸đ` #ą‚dLę6‚ZL 7“å+8”RuPūģIĪ #‚ĘIŽ6ūäÉöŠ‚ķÉ*7‡߯ö ˙°B7‚ø¯d7€ö‡ǝú ˛˙ĩ¯‚ͯw7‚Á¯™7‡¯ú Mš˙ޝ‚¤¯w7‚˜¯™7„”{ †:$YĪíŗ‚:Ŧ7†ŠÉ-5¨<ŗ‚ŋÉÄ7‚ŗÉÜ7‚§Éī7‡[É-5—‚{ÉÜ7‚oÉī7€-5‡$:-5~‚D:Ü7ø8:W‡:É1$g‚NÉ8‡ƒ‡1$]‚•‡8ūW…1$Ō‚f…"8’KL1a #ŗ‚dLD8‚ZLY8“R+8”RuPūģI= #‚ĘI"8ūäÉbŠ‚ķÉl8‡߯b ˙°„8øø¯V€b‡ǝf˛˙ĩ¯‚ͯĻ8‚Á¯Č8‡¯fMš˙ޝ‚¤¯Ļ8‚˜¯Č8„o”{ „⁠„}Š{ ßÁ´6´āž“@ęāHÄ%âîŪĶÎ%…´ÁaÆœR´.ĩø´‘†ĶėĘ{´‚ŪėÛ8—(aĩ'´î8’­PjHaδøÎPáŸ˙ÁP„‚R$’­P‚`aÎō´‚ÎP9˙ÁP„”R$„;ˁ ˆj„=ˆψž„⁠„ÆŠ{ •đœÖļ&… %ĸstręÖļ‘ĄˆęÆ:‘—xaËļ¤endķČ*‘XŒ˙f%™L×ĸĩ/9…ĩ™— %‡9™Ą‘ %ŗ9†6Tî=ļ‚ETį9ūÕI 6‚äIį9ūģI Õ‚ĘIį9ūĄI -‚°Iį9†čí$î]ļ‚ķí:†­P֐ļøÎPPŸ˙ÁP„íR$„4Ž~ „L>„nŝ„šÅˆֈöˆ„Š{ ô1ßâĪęļˇāž“øÉëfd %âîāģ*‹ōîæY,%•ˇđĀ„âœēĸfd{ %‘Ąlb{´'‘ĄOė{!Ę‘†­Pū„}‘ˇ‚ÎP':˙ÁP„…R$’­P…a}_¸‚ÎPO:˙ÁP†aO!… ⎂lOm:„*…ė{ —¨aT¸‚ÎP€:˙ÁPЇP5…Āa‚ P”:‚–P¨:žcPR† ˜H¸‚zP”:‚nPģ:„_†™ũ„5…R$†­P8…~¸‚ÎPĪ:˙ÁP„J…R$’Ûļb…āa€Dē‚ôļį:‚ęļ;†t‰r… š‚ƒ‰;;ū4‰r… ŧ˙Z‰˙M‰‚C‰;;—bĀšŸˇ‘Dˇm;’^ē…b-—š‚,^€;‚"^ĸ;Šã¤ē…b 3‚ü¤€;‚ō¤ĸ;’aOē…8b }‹š‚lO€;„†O„¸…ø „†w} „†:€ „!†U€ †W…{†9ēøf…vŸ†ģI{† #˙šøĘIvŸūKL† #ødLuLŸ‚ZLĮ;“‘†+8”RuD„o…‚ ˆū„ˆS…„`…%| ˆq†„y†Š{ „š†”{ „ĸ†Š{ •×đ°†)œžē„Ԇˇ•äđā†)œŊ焇ˇß ĘĖēáēāž“t āHÄ%÷Ŋē&r%œũē‡ŊøĖē‘’Ģ(XbKŦģ‚-ĢÚ;’­PPpbaUģ‚ÎPú;˙ÁP„gR$’­Pgbb…ģ‚ÎP2<˙ÁP„~R$„2ŝˆPˆ†„”U€ ˆí’W…ž¨bI$ŧ‚f…J<’ģIžĀb #ëģ‚ĘIJ<ŠKLĄØb #‚dLĸ<‚ZLë<“Ø+8”Rud’W…ŽøbIœŧ‚f… =†ģIŽ #cŧ‚ĘI =ŠKL´c #‚dLQ=‚ZL=“Č+8”Rud†W…đI Ŋ˙f…’ģIđ(c #Ķŧ˙ĘIŠKLķ@c #‚dL =‚ZLÍ=“+8”Ruc†W…I|Ŋ˙f…†ģI #CŊ˙ĘIūKL #‚dLā=‚ZL >“+8”Ruc„%Š{ ÷ŊēÖ5œŖŊcĀøĖē‘’ŊēXcLNĀ‚Ėē >’Ģ(pcKqž‚-Ģ>>’­PPˆcaž‚ÎP\>˙ÁP„gR$’­Pg¨cbJž‚ÎP”>˙ÁP„~R$„2ŝˆPˆ†„”U€ ˆũ’W…žĀcIéž‚f…Ŧ>’ģIžØc #°ž‚ĘIŦ>ŠKLĄđc #‚dLÎ>‚ZLũ>“č+8”Rud’W…ŽdIaŋ‚f…?†ģIŽ #(ŋ‚ĘI?ŠKL´(d #‚dL=?‚ZLl?“Ø+8”Rud†W…IŲŋøf…v Ÿ’ģI@d # ŋøĘIv ŸŠKLXd #‚dLŠ?‚ZLˇ?“+8”RucūW…Iøf…vŸ†ģI #ĀøĘIvŸūKL #‚dLĘ?‚ZL÷?“*+8”Ruc„Á”{ „5Š{ ß,™rĀĀāž“hĨâîŪĶu%äDžŸĀĒĀāž“›V÷Āį=‡ôœÆĀBÂøŸĀ‘’cĀ'‡pd ‰Á‚rĀ @‹ˆd~Ā@@’­Pĸ‡ du1ÁøÎP¨Ÿ˙ÁP„š‡R$’­Pš‡¸duaÁ‚ÎPt@˙ÁP„ЇR$„/‡$‚ ˆĸ‡„Ū‡=ˆį‡ˆü‡†Įę<‡ āÁ‚ÖęŒ@ūCŸ<‡‚RŸŒ@‡$Ÿ<‡}‚3ŸŒ@†áęQ‡ 7‚đęÁ@ūÖĄQ‡‚åĄÁ@‡ˇĄQ‡}‚ÆĄÁ@„ˆŠ{ ÷Åë* ļœ^Â,Ãø×ë‘’4ĨĐd¸!ÂCĨö@‹ĐdYĨNA’­PZødyÉÂøÎPĖŸ˙ÁP„rR$’­Preyų‚ÎPwA˙ÁP„„R$„, ˆZ„=ˆ–ˆŽ„ļŠ{ ÷Åë :ÉœHÃ<Äø×ë‘’Åë(e¸'Ä‚×ëAŠ4Ĩ"@e¸‚CĨšA‹@eYĨB’­PjXeyÎÃøÎPĖŸ˙ÁP„R$’­PpeyūÂÎP7B˙ÁP„˜R$„+ ˆj„Ļ=ˆ¯ˆÁ„=”{ „ÉŠ{ ä0Í.NÄcÄāž“\‡āHÄ%ß%ČrĈÄāž“—lëp‹–B…<Ävœœ¤ÄŅĮøNÄ‘’sl"ˆe.ÆĮ‚‚lOBŠcÄ"ˆe|Ä‚rÄOB’Ŋē^ eŽēĮ‚Ėē„B’Ŋē^¸eL¯Į‚Ėē„B’ĢoĐeKŌÅ‚-ĢĸB’­P—čea{Å‚ÎPĀB˙ÁP„ŽR$’­PŽfbĢÅ‚ÎPøB˙ÁP„ÅR$„yŝˆ—ˆ̈́ÛU€ ˆU’W…å fIJÆ‚f…C’ģIå8f #Æ‚ĘICŠKLčPf #‚dL2C‚ZLTC“@+8”Rud’W…õpfIÂÆ‚f…rC†ģIõ #‰Æ‚ĘIrCŠKLûˆf #‚dL”C‚ZLļC“0+8”Rud†W…XI:Įøf…v Ÿ’ģIX f #ĮøĘIv ŸŠKL[¸f #‚dLÔC‚ZLD“p+8”RucūW…pIøf…vŸ†ģIp #uĮøĘIvŸūKLv #‚dLD‚ZLAD“‚+8”Ruc„”{ „7ŝ„Š{ üÁģˆ œéĮčČûž“ļH‘’¨ęLˆĐfęÉČ‚ˇęTDŠcĀWˆøfē‚rĀˆD‹ g~ĀĪD’­PLj@gupČ‚ÎPE˙ÁP„ÁˆR$’­PÁˆ`gu Č‚ÎP6E˙ÁP„؈R$„dˆ$‚ ˆLj„æˆ=ˆ‰„Jˆ%| „‰”{ „ ‰Š{ ßuÉ÷ČÉāž“ĪXŪuA<É–;÷čČĖÕåœ0ÉÎÍø÷Č‘øÉ‘’čžxg=*ĘøŸŸ‚ŸNE‹xgŠ.Ÿ†A+$ y ąÉø3AŸ‚)AžE„=hŊ"Ę‚f…-F†ģIŊ #éÉ‚ĘI-FūKLà #‚dLBF‚ZLoF“Ķ+8”Rudˆ+’= O g=ÉĖ‚V ‚F‚L ÖF‹ ge G’­P‚ĀgP“Ę‚ÎP*G˙ÁP„šR$’­PšāgQÃĘ‚ÎPbG˙ÁP„ŦR$’Y¸øgSË‚œYzGūģI¸ Û‚ĘIzGūĄI¸ -‚°IzG’­PėhVKË‚ÎPŠG˙ÁP„R$’~a0hWĶË‚ąaáG˙¤a†ÕI Ų ČË‚äIáGūģI Õ‚ĘIáGūĄI -‚°IáG„R$’­PPhWĖ‚ÎPöG‚ÁPH„(R$’~a(phWĖ‚ąa!H˙¤a†ÕI( Ų „Ė‚äI!HūģI( Õ‚ĘI!HūĄI( -‚°I!H„8R$„aŝˆ‚ˆĩ„Ëģ€ ˆėˆAˆ“ˆā’W…Dˆh=AÍ‚f…6H†ģID #Í‚ĘI6HŠKLJ h #‚dLrH‚ZLŽH“x+8”Rud†W…–'=šÍ‚f…ĖH†ģI– #€Í‚ĘIĖHūKLœ! #‚dLáH‚ZLI“Ŧ+8”Ru[šjuT„ĩŠ{ üÍËęœæÍŅûž“\‡‘ĄŲ–Ņ‘†\‘[΂\!IūT‚+TeIūĄI ‚°IeI’čž.¸h‘ö΂ŸŊI‚ŸæI‹¸hŠ.Ÿ’A:Đh y î΂3ARJ‚)ApJ†aO: ã΂lORJ„Bė{ „Mhˆ:’5‡Nčh‘*Ī‚N‡ōJ‚D‡DK„[čČ’W…[i‘ĸĪ‚f…‡K’ģI[(i #iĪ‚ĘI‡KŠKL^@i #‚dLŲK‚ZLL“ˆ+8”Ru_’W…n`i‘Đ‚f…CL’ģInxi #áĪ‚ĘICLŠKLti #‚dLeL‚ZL…L“Ÿ+8”Rv†W…ˇ‘’Đ‚f…ŖL’ģIˇ¨i #YĐ‚ĘIŖLŠKLēĀi #‚dL¸L‚ZLåL“Ī+8”Ru_†W…Ī‘ Ņøf…u`Ÿ†ģIĪ #ŅĐøĘIu`ŸūKLÕ #‚dLøL‚ZL%M“á+8”Ru_ˆ.„ęŠ{ uHúHËœ8ŅØĶûž“\‡‘ĄVĒ|ØĶ‘’މØi…Ņ‚§‰8M‚‰KMˆD’5‡WđišŅ‚N‡M‚D‡ŨM„bčČ’W…bj1Ō‚f…*N’ģIb(j #øŅ‚ĘI*NŠKLe@j #‚dLbN‚ZL‘N“¨+8”Ru_’W…x`jŠŌ‚f…ŋN’ģIxxj #pŌ‚ĘIŋNŠKL~j #‚dLáN‚ZLO“ŋ+8”Rv†ƅƒ‚ÉŌ‚ՅO†W…ĐAĶ‚f…TO’ģIШj #Ķ‚ĘITOŠKLĶĀj #‚dLiO‚ZL–O“ë+8”Ru_†W…ëšĶøf…u`Ÿ†ģIë #€ĶøĘIu`ŸūKLņ #‚dLŠO‚ZLÖO“ū+8”Ru_„"W„W ø„Š{ ]HüqĖ]œõĶ~Ūûž“\‡‘ĄjUĨ~Ū‘—ØjsŪ™ÃëĻ´'éO†Đ^ĻŧÔ‚ß^P‡6TM‚ETmPūÕI 6‚äImPūģI Õ‚ĘImPūĄI -‚°ImP’čžsøjŠžÕ‚ŸâP‚Ÿ*Q‹øjŠ.Ÿ’Ak y %Õ‚3AąQ‚)A R„‘h(5–Õ‚f…˛R’ģI(8k #]Õ‚ĘI˛RŠKL+Pk #‚dLĮR‚ZLôR“D+8”Rudˆ’螥hkĒ€Ö‚ŸS‚ŸOS‹hkŠ.Ÿ’A­ˆk y Ö‚3AíS‚)A5T„ŋhÜLxÖ‚f…ĪT’ģIܨk #?Ö‚ĘIĪTŠKLßĀk #‚dLäT‚ZLU“ø+8”Rudˆ­’5‡ĪØkĢ´Ö‚N‡$U‚D‡›U„ŨčČ’W…ŨđkĢ,ׂf…ëU’ģIŨl #ķÖ‚ĘIëUŠKLā(l #‚dL=V‚ZL{V“h+8”RuC’W…đHlǤׂf…ŠV’ģIđ`l #kׂĘIŠVŠKLöxl #‚dLËV‚ZLëV“+8”Rw’W…úlĒØ‚f… W’ģIú¨l #ãׂĘI WŠKLĀl #‚dL+W‚ZLMW“—+8”Rw’W…ØlŠ”Ø‚f…kW’ģIđl #[Ø‚ĘIkWŠKLm #‚dLW‚ZL¯W“¯+8”Rw’W… mŠ Ų‚f…ÍW’ģI8m #ĶØ‚ĘIÍWŠKLPm #‚dLīW‚ZLX“Į+8”Rw’W…$hmЄ؂f…/X’ģI$€m #KŲ‚ĘI/XŠKL*˜m #‚dLQX‚ZLsX“ß+8”Rw’W…2°mĒüŲ‚f…‘X’ģI2Čm #ÃŲ‚ĘI‘XŠKL8ām #‚dLŗX‚ZLÕX“÷+8”Rw’W…@ømĢtÚ‚f…ķX’ģI@n #;Ú‚ĘIķXŠKLF(n #‚dLY‚ZL7Y“+8”Rw†W….ĢėÚ‚f…UY’ģI.@n #ŗÚ‚ĘIUYŠKL1Xn #‚dLjY‚ZL—Y“F+8”RuC†W…FĒdÛ‚f…ĒY†ģIF #+Û‚ĘIĒYūKLL #‚dLŋY‚ZLėY“X+8”RuC†W…XĒÜÛ‚f…˙Y†ģIX #ŖÛ‚ĘI˙YūKL^ #‚dLZ‚ZLAZ“j+8”RuC†W…jŠTÜ‚f…TZ†ģIj #Ü‚ĘITZūKLp #‚dLiZ‚ZL–Z“|+8”RuC†W…|ŠĖÜ‚f…ŠZ†ģI| #“Ü‚ĘIŠZūKL‚ #‚dLžZ‚ZLëZ“Ž+8”RuC†W…ŽŠDŨ‚f…ūZ†ģIŽ # Ũ‚ĘIūZūKL” #‚dL[‚ZL@[“ +8”RuC†W… ĒŧŨ‚f…S[†ģI  #ƒŨ‚ĘIS[ūKLĻ #‚dLh[‚ZL•[“˛+8”RuC†W…˛*Ģ6Ū‚f…¨[†ģI˛ #ûŨ‚ĘI¨[ūKL¸$ #‚dLŊ[‚ZLŌ[“Ä+8”RuŦ„7%„Oâo„^%„s ø„Ąœ)„Μ)„ÍŠ{ ¸8…<Ä ͧœŸŪōáøNÄ‘’<Äpn.Ũá‚NÄå[Šslˆn.‚‚l&\ŠcĈn|Ä‚rÄ&\’Ŋē^¨nŽĐá‚Ėēu\’Ŋē^ĀnLÅá‚Ėēu\’ĢoØnKčß‚-Ģ“\’­Pšđna‘ß‚ÎPą\˙ÁP„ąR$’­PąobÁß‚ÎPé\˙ÁP„ČR$„yŝˆšˆŅ„ßU€ ˆm’W…é(oI`ā‚f…]’ģIé@o #'ā‚ĘI]ŠKLėXo #‚dL#]‚ZLE]“X+8”Rud’W…üxoIØā‚f…c]†ģIü #Ÿā‚ĘIc]ŠKLo #‚dL…]‚ZL§]“H+8”Rud†W…pIPáøf…w Ÿ’ģIp¨o #áøĘIw ŸŠKLsĀo #‚dLÅ]‚ZLō]“‹+8”RucūW…‹Iøf…wŸ†ģI‹ #‹áøĘIwŸūKL‘ #‚dL^‚ZL2^“ž+8”Ruc„”{ „7ŝ„”{ „§Š{ üˏ ‰Kœ âäûž“ļH‘ĄĄ˛p@‘—Øoä™lŗņđE^’Wé7‰øoŗ0ã‚pé¯^øféō1âŠ:Ŗ7‰øo†‚IŖ¯^—p$ãUŖ _’­Pš‰8p<Íâ‚ÎPe_˙ÁP„˛‰R$’­P˛‰Pp<ũâ‚ÎP_˙ÁP„ĉR$„C‰Û€ ˆš‰„Ή=ˆ؉ˆNŠ„R‰÷€ ŠƒéX‰hp´‚’éĨ_Š<¤X‰hpˆ‚K¤Ũ_‹pW¤!`’­Pú‰¸pHĻã‚ÎPU`˙ÁP„ŠR$’­PŠĐpHÖã‚ÎP}`˙ÁP„$ŠR$„j‰ ˆú‰„-Š=ˆ6ŠˆcŠ„VŠŠ{ „kŠŠ{ ü­¸pŠNœ-ä(æûž“ļH‘—čpæ™lŦņđ•`’W释qŦCå‚pé˙`øféōDäŠ:Ŗ‡Šq†‚IŖ˙`—0q7åUŖ[a’­PęŠPq<āä‚ÎPa˙ÁP„‹R$’­P‹hq<å‚ÎPÅa˙ÁP„‹R$„“ŠÛ€ ˆꊄ‹=ˆ(‹ˆĄ‹„ĸŠ÷€ Šƒé¨Š€q­‚’éŨaŠ<¤¨Š€qˆ‚K¤b‹°qW¤Yb’­PJ‹čqHšå‚ÎP˜b˙ÁP„b‹R$’­Pb‹rHéå‚ÎPĀb˙ÁP„t‹R$„ēŠ ˆJ‹„}‹=ˆ†‹ˆļ‹„Š‹Š{ „ž‹Š{ úqÚĀ‹,œ@æhæûž“V‘ĄĄ‘Ĩhæ‘„ۋä¸8ü‰%đ‹^œ…æ€čûž“¨W‘—rkč™lnņđØb’WéŒ@rn›į‚péBcøféōœæŠ:ŖŒ@r†‚IŖBc—`rįUŖžc’­PrŒ€r<8į‚ÎPāc˙ÁP„ŠŒR$’­PŠŒ˜r<hį‚ÎPd˙ÁP„œŒR$„ŒÛ€ ˆrŒ„§Œ=ˆ°Œˆ1„"Œ÷€ Šƒé(Œ°ro‚’é dŠ<¤(Œ°rˆ‚K¤Xd‹ØrW¤œd’­PڌsHč‚ÎPÛd˙ÁP„ōŒR$’­PōŒ sHAč‚ÎPe˙ÁP„R$„@Œ ˆڌ„ =ˆˆF„9Š{ „NŠ{ üj%P^œ˜č“ęûž“¨W‘—8s~ę™lfņđe’Wég`sfŽé‚pé…eøféō¯čŠ:Ŗg`s†‚IŖ…e—€sĸéUŖáe’­PŌ s<Ké‚ÎP#f˙ÁP„ęR$’­Pꍸs<{é‚ÎPKf˙ÁP„üR$„sÛ€ ˆŌ„Ž=ˆŽˆ‘Ž„‚÷€ ŠƒéˆĐsg‚’écfŠ<¤ˆĐsˆ‚K¤›f‹øsW¤ßf’­P:Ž(tH$ę‚ÎPg˙ÁP„RŽR$’­PRŽ@tHTę‚ÎPFg˙ÁP„dŽR$„  ˆ:Ž„mŽ=ˆvŽˆĻŽ„™ŽŠ{ „ŽŽŠ{ ߃ƒĸęˇęāž“÷ŖāHÄ%ßpyÆęÛęāž“dĄāHÄ%ä[¤íęëāž“›VāHÄ%÷Ûę¯a°ŽŪœëHņøíꑆ“ęς¤ší‚ĸę^g†RŖЎf¨į낇Ŗvg‚{ŖŽg‚oŖ­g‡#ŖЎf—˙CŖ˙7Ŗ€Ўf‡öĸЎf~˙Ŗ‚ ŖĀg‘ÕĸԎXtg‚éĸëg‘L`ԎXt]‚^`ëg’W…ԎxtĪlė‚f…#h’KLԎt #Oė‚dL_h‚ZLh“ +8”RuPūģIųŽ #‚ĘI#hŠW…莨tĪ‚f…¯h’ģIčŽČt #§ė‚ĘI¯hŠKLíŽāt #‚dLįh‚ZL i“#+8”RuPūŦŖ6Š‚ģŖ'i‡Uĸ6 ˙dĸ‚zĸ?i‚nĸai€6‡ ĸ: ˛˙+ĸ‚Cĸti‚7ĸ–i‡õĄ: Mš˙ĸ‚ĸti‚ĸ–i„C”{ †ˇęF°¤ƒđ‚ÆęŠi†ŋ R”¨Đī‚ô Ái‚č Ųi‚Ü øi‡ R”—˙° ˙¤ €R”‡c R”~˙ƒ ‚w  j‘B Zug‚V 6j‘ą]Zu]‚Â]6j‰W…Z u/Ūî‚f…nj’KLZ8u #Áî‚dLĒj‚ZLĖj“ž+8”RuPūģIŒ #‚ĘInj‰W…pPu/Vī‚f…új’ģIphu #ī‚ĘIújŠKLv€u #‚dLk‚ZL>k“¸+8”RuP‘W…z˜u/‚f…\k’ģIz¸u #ī‚ĘI\kŠKL€Đu #‚dL~k‚ZL k“Ķ+8”RuPūĄæŠ‚(Ąžk‡Ÿæ ˙ҟ‚įŸÖk‚۟øk€æ‡Ÿę ˛˙˜Ÿ‚°Ÿ l‚¤Ÿ-l‡bŸę Mš˙qŸ‚‡Ÿ l‚{Ÿ-l„ķ”{ ’4Ĩöđu¤=ņ‚CĨ@l‹đuYĨ`l’­P2vyåđøÎPĖŸ˙ÁP„JR$’­PJ(vyņ‚ÎP‰l˙ÁP„\R$„ ˆ2„e=ˆnˆ†„ސŠ{ üË-œ`ņe÷ûž“\‡‘ũe÷‘’5‡(@vydö‚N‡Ąl‚D‡ m’ƅ(hv°ŋņ‚ՅQmŠčČ+€v°‚ÉŠm‚÷Čn’čž+°v=ÉōøŸŸ‚ŸŠm‹°vŠ.Ÿ’ABĐv y Pō‚3A_n‚)A—n„ThÁō‚f…(o’ģIčv #ˆō‚ĘI(oŠKLw #‚dL=o‚ZLjo“+8”RudˆB’= fw=hõ‚V }o‚L Äo‹we øo’­P™8wP2ķ‚ÎP p˙ÁP„ąR$’­PąXwQbķ‚ÎP3p˙ÁP„ÃR$’YĪpwSēķ‚œYKpūģIĪ Û‚ĘIKpūĄIĪ -‚°IKp’­PˆwVęķ‚ÎPzp˙ÁP„R$’~a¨wWrô‚ąa˛p˙¤a†ÕI Ų gô‚äI˛pūģI Õ‚ĘI˛pūĄI -‚°I˛p„+R$’­P-ČwWĻô‚ÎPĮp‚ÁPßp„?R$’~a?čwW.õ‚ąaōp˙¤a†ÕI? Ų #õ‚äIōpūģI? Õ‚ĘIōpūĄI? -‚°Iōp„OR$„xŝˆ™ˆĖ„âģ€ ˆˆXˆÍˆ(’W…[x=āõ‚f…q’ģI[x #§õ‚ĘIqŠKL^0x #‚dLPq‚ZL™q“¨+8”Rud†W…Đ=Xö‚f…ˇq’ģIĐPx #ö‚ĘIˇqŠKLĶhx #‚dLĖq‚ZLųq“č+8”RuWšŠuD’W…k€xyÜö‚f… r†ģIk #Ŗö‚ĘI rŠKLq˜x #‚dLHr‚ZL„r“˜+8”Rud†W…čyT÷‚f…ĸr†ģIč #÷‚ĘIĸrūKLî #‚dLˇr‚ZLär“ú+8”RuWˆ(„Š{ ]Hüqˆœ‚÷’ūûž“\‡‘ũ’ū‘ĄÍ… %‘’5‡4°x‡“ü‚N‡÷r‚D‡}s†ƅ4°ņ÷‚ՅÍsŠčČ:āx°‚É5t‚÷Čģt’čž?y=øø‚Ÿu‚Ÿ5t‹yŠ.Ÿ’AN0y y ø‚3A=u‚)A…u„`hđđø‚f…#v’ģIđHy #ˇø‚ĘI#vŠKLķ`y #‚dL8v‚ZLev“+8”RudˆN’= rxy=—û‚V xv‚L ŋv‹xye ķv’­PĨ˜yPaų‚ÎPw˙ÁP„ŊR$’­PŊ¸yQ‘ų‚ÎP>w˙ÁP„ĪR$’YÛĐySéų‚œYVwūģIÛ Û‚ĘIVwūĄIÛ -‚°IVw’­PčyVú‚ÎP…w˙ÁP„'R$’~a'zWĄú‚ąaŊw˙¤a†ÕI' Ų –ú‚äIŊwūģI' Õ‚ĘIŊwūĄI' -‚°IŊw„7R$’­P9(zWÕú‚ÎPŌw‚ÁPęw„KR$’~aKHzW]û‚ąaũw˙¤a†ÕIK Ų Rû‚äIũwūģIK Õ‚ĘIũwūĄIK -‚°Iũw„[R$„„ŝˆĨˆ؄îģ€ ˆˆdˆ@ˆ’W…g`z=ü‚f…x’ģIgxz #Öû‚ĘIxŠKLjz #‚dL[x‚ZL¤x“Č+8”Rud†W…C3=‡ü‚f…Ōx’ģIC°z #Nü‚ĘIŌxŠKLFČz #‚dLįx‚ZLy“[+8”RuSšĸuD’W…wāz† ũ‚f…'y’ģIwøz #Ōü‚ĘI'yŠKL}{ #‚dLIy‚ZLky“ā+8”Rud’W…({†ƒũ‚f…‰y†ģI #Jũ‚ĘI‰yŠKL‡@{ #‚dLÅy‚ZLz“°+8”Rud†W…†ûũ‚f…z†ģI #Âũ‚ĘIzūKL #‚dL4z‚ZLaz“+8”RuS†W…†sū‚f…tz†ģI #:ū‚ĘItzūKL  #‚dL‰z‚ZLļz“,+8”RuS„$âo„4 ø„5Š{ ]Hüˎœ¯ū ûž“\‡‘Ą|𠑆aZ›$˙‚pZÉzūTw‚+T{ūĄI ‚°I{’čž.X{›0‚Ÿ{‚Ÿĩ{‹X{Š.Ÿ’A:x{ y ˇ˙‚3A!|‚)AJ|†aO: Ŧ˙‚lO!|„Bė{ „Mhy(‚f…č|’ģIy{ #ī˙‚ĘIč|ŠKL|¨{ #‚dLũ|‚ZL*}“‘+8”Rudˆ:’5‡MĀ{›‚N‡=}‚D‡Ũ}’ƅM|°y‚Յ ~ŠčČU|°‚Éu~‚÷Č’čžZP|=€‚Ÿu‚ŸÍ‹P|Š.Ÿ’Agp| y ‚3AV€‚)Až€„yhW"x‚f…v’ģIWˆ| #?‚ĘIvŠKLZ | #‚dL‹‚ZL¸“o+8”Rudˆg’= ‹¸|=‚V ˁ‚L ‚‹¸|e ^‚’­PžØ|Pé‚ÎPq‚˙ÁP„ÖR$’­PÖø|Q‚ÎPŠ‚˙ÁP„čR$’Yô}Sq‚œYÁ‚ūģIô Û‚ĘIÁ‚ūĄIô -‚°IÁ‚’­P((}VĄ‚ÎPđ‚˙ÁP„@R$’~a@H}W)‚ąa(ƒ˙¤a†ÕI@ Ų ‚äI(ƒūģI@ Õ‚ĘI(ƒūĄI@ -‚°I(ƒ„PR$’­PRh}W]‚ÎP=ƒ‚ÁPUƒ„dR$’~adˆ}Wå‚ąahƒ˙¤a†ÕId Ų Ú‚äIhƒūģId Õ‚ĘIhƒūĄId -‚°Ihƒ„tR$„Åˆžˆņ„ģ€ ˆ(ˆ}ˆˆž’W…€ }=—‚f…}ƒ’ģI€¸} #^‚ĘI}ƒŠKLƒĐ} #‚dLƃ‚ZL„“Ø+8”Rud†W…=‚f…=„’ģIđ} #Ö‚ĘI=„ŠKL~ #‚dLR„‚ZL„“*+8”RuSšēuD’W… ~›“‚f…’„’ģI8~ #Z‚ĘI’„ŠKL–P~ #‚dL´„‚ZLք“đ+8”Rud’W…šh~› ‚f…ô„†ģIš #Ō‚ĘIô„ŠKL €~ #‚dL0…‚ZLl…“Č+8”Rud†W…*›ƒ‚f…Š…†ģI* #J‚ĘIŠ…ūKL0 #‚dLŸ…‚ZLĖ…“<+8”RuS†W…<›û‚f…߅†ģI< #‚ĘI߅ūKLB #‚dLô…‚ZL!†“N+8”RuSˆ.„WŠ{ 1:•ũđyœŅ Ą˙ÍÛ´'‘Ą Û %‘—˜~Æ ĨÃëÜ\F‘T†čžې&áÔ‚Ÿ4†‚Ÿl†€ې&Š.Ÿ’AíĀ~ y Ė‚3A§†‚)A‘hˆ퐒W…‘Ø~áL‚f…4‡’ģI‘ø~ #‚ĘI4‡ŠKL‘ #‚dLT‡‚ZLv‡“‹‘+8”Ru[’W…!‘0áÅ‚f…”‡†ģI!‘ #‹‚ĘI”‡ŠKL'‘H #‚dLZL؇“›‘+8”RuT’W…+‘`á= ‚f…ö‡’ģI+‘€ # ‚ĘIö‡ŠKL1‘  #‚dLˆ‚ZL:ˆ“n‘+8”Rw†W…¨‘áĩ ‚f…Xˆ†ģI¨‘ #| ‚ĘIXˆūKLŽ‘ #‚dLmˆ‚ZLšˆ“ē‘+8”Ru[†W…őá- ‚f…­ˆ’ģIő¸ #ô ‚ĘI­ˆŠKLȑĐ #‚dLˆ‚ZLīˆ“ā‘+8”Ru[†W…ã‘&áĨ ‚f…‰†ģIã‘ #l ‚ĘI‰ūKLé‘ #‚dL‰‚ZLD‰“ø‘+8”Ru[ˆƐ„Ũâo„‘œ)ˆT‘„ÑŠ{ ´ņ’/œĄ_f‘Ą?´'‘ĄƒĐ´'‘ Ą´'‘—虤X´'W‰¤msg/ü‘\’Ī_$’€Č ‚Ū_ƒ‰’–_$’(€ ‚Ĩ_Ŗ‰ūT5’‚+TˉūĄI5’ ‚°Iˉ†fãF’3 ‚†ã퉂|㊀F’…b‘­PF’@€ƒ‚ÎP퉂ÁPMŠ„^’R$’ _a’X€Û ‚)_pŠ‚_芉­Pi’x€™š ‚ÎP ‹‚ÁP3‹†aOi’ Ž ‚lO ‹„r’ė{ „ƒ’R$‹˜€˙)_‚_c‹„擭P’ūヒ°€> ‚äx‹˙ä‹°€…b‘­Pƒ’Đ€ƒ‚ÎPx‹‚ÁP ‹„ž’R$’ _ž’ø€æ ‚)_Ћ‚_(Œ‰­PŦ’ ™Ä ‚ÎPWŒ‚ÁPjŒ†aOŦ’š ‚lOWŒ„ˇ’ė{ „ʒR$‹@˙)_‚_šŒ„”­P†båՒ Q‚‚富‚xåĮŒ€Ւ…b‘­PՒXƒ‚ÎP¯Œ‚ÁP܌„í’R$’ _í’p Ô‚)_ ‚_$‘­P품™‚ÎP9‚ÁPM†aOí’Č‚lO9„ø’ė{ „ “R$’Îä “° 7‚îä}˙ää‹°…b‘­P “ȁƒ‚ÎP}‚ÁP•„!“R$’ūã$“č ž‚äō‚äí‹č…b‘­P$“‚ƒ‚ÎPō‚ÁPŽ„<“R$’ _<“ ‚ F‚)_LŽ‚_tމ­PJ“@‚™$‚ÎPŖŽ‚ÁPΎ†aOJ“‚lOŖŽ„U“ė{ „h“R$‹`‚˙)_‚_ūŽ„&”­P’ãw“x‚ ą‚㏑*iw“‚U‚9iŠqGw“¨‚‚ŠG5‚€G„‹“ŝ†ã-” öøãudŸ‡*i-”Uø9iudŸ„7”qGˆF’„w“y]„?”Š{ Z9´Eņ@”ļœk–jUŲ kI’ļ^W”Ā‚Ū “‚Å^I‘TW”Ā‚X‚+TƒŠĄIW”Ā‚ ‚°Iƒ’îZ”Ø‚Ũ ŗ‚ îŏ’Đ^~”ø‚Ü B‚ß^䏇6T~”M‚ETūÕI~” 6‚äIūģI~” Õ‚ĘIūĄI~” -‚°I’:ä§”ƒÜ ‚ZäH‚P䑐‹ƒ…b‘~a§”0ƒƒ‚ąaH‚¤a‘†ÕI§” Ų ô‚äIHūģI§” Õ‚ĘIHūĄI§” -‚°IH„Ŋ”R$’ÎäŊ”XƒŨ h‚îä*‘‚ääR‘‹Xƒ…b‘­PŊ”pƒƒ‚ÎP*‘‚ÁP¤‘„ՔR$’ _ՔƒŨ į˙)_‚_Į‘‘­PՔ¨ƒ™‚ÎP’‚ÁP7’†aOՔ Û‚lO’„Ũ”ė{ „î”R$’ _î”ĐƒŪ Ļ˙)_‚_g’‰­Pü”đƒ™_‚ÎPš’‚ÁPã’’aOü”„T‚lOš’„•R$‹(„˙)_‚_“‘­P •@„—‚ÎP“‚ÁP3“„¨•R$’ã/•`„Ü ‚ãV“‘*i/•x„U‚9iV“ŠqG/•„‚ŠG’“‚€GV“„C•ŝ’W…]•¨„Ü ‰‚f…˛“†ģI]• #P‚ĘI˛“ŠKLc•Ā„ #‚dLî“‚ZL*”“ˇ•+8”Rv†W…ĕÜ ‚f…h”†ģIĕ #Č‚ĘIh”ūKLʕ #‚dL}”‚ZLĒ”“ڕ+8”Ru_†ãã•Ü Føãu`Ÿ‡*iã•Uø9iu`Ÿ„ņ•qG„Ą””“ˆ§”„/•y]„㕊{ ¸8ß1â—āž“ NŪIyũ—¸8÷p<–ßœ¸ßø‘ø‰‘’W…>–Ø„ūB‚f…Ŋ”’ģI>–ø„ # ‚ĘIŊ”ŠKLA–… #‚dLõ”‚ZL$•“€–+8”Ru_’W…T–0…ūē‚f…R•’ģIT–H… #‚ĘIR•ŠKLZ–`… #‚dLt•‚ZL”•“—–+8”Rv†W…¤–ū2‚f…˛•†ģI¤– #ų‚ĘI˛•ūKLĒ– #‚dLĮ•‚ZLô•“ˇ–+8”Ru_†W…–ūĒøf…u`Ÿ’ģI–x… #qøĘIu`ŸŠKLŖ… #‚dL–‚ZL4–“Ũ–+8”Ru_ŗ%–Č”Pud”Ru ˆ5–ˆ>–„Ā–Š{ á\ņŪjUâ âîĄ‘ã ¸8ô1÷îl§ā–›œ.Įø(î‘ø2î‘—¨…ŧ‚(îG–‚2îs–’ß—Ā…å ą‚ęs–‹Ā…ųĒ–’W…)—Ø…æ ‚f…Ų–’ģI)—ø… #Ė‚ĘIŲ–ŠKL2—† #‚dL—‚ZL7—“X—+8”Rus†W…\—æ }øf…utŸ†ģI\— #DøĘIutŸūKLb— #‚dLU—‚ZL‚—“r—+8”Rusŗ—›”Put”Ru „—_} „)—w} „D—w} „{—Š{ •oņįœN–Šė´'•—Ąpŋí´'‘—(†CĨuAî/ü‘\’[î.H†đX‚{îܗ‚qîô—‹H†…b„@­P†ÎäMđž‚î䘂ä䘀M…b„a­P’ūãd`†ôā‚ä2˜‚äZ˜‹`†…b„y­P†­îˆō&‚Í‚ÃîĄ˜€ˆ…b„š­P†Îäœôl‚îäļ˜‚ääΘ€œ…b„°­P†ãš öą‚ãᘇ*iš U‚9iᘄÆqG†ãÕööøãudŸ‡*iÕUø9iudŸ„ßqGˆ"ŗMīG”Pv”RuTŗ†īG8”Pv”Ru„šy]„įŠ{ •‹ņ€—œž%Ąđâš´'‘Ą˙Íē´'‘Ą ē %‘—x†ŗ%Ĩā#ģ/ü‘T†˙î —ŊøīŸ‚ —…b‘­P —˜†ƒøÎPŸ‚ÁP;™„¸—R$’ _ģ—°†ŊÅ‚)_^™‚_†™‰­PÃ—Đ†™Ŗ‚ÎPə‚ÁPܙ†aO× ˜‚lOə„Ė—ė{ „Ũ—R$‹đ†˙)_‚_ š„v™­P’båŨ—‡Ŋ(‚‚å!š˙x勇…b‘­PŨ—(‡ƒ‚ÎP!š‚ÁPYš„ø—R$’Qīø—P‡ž‹‚qī‰š˙gī‹P‡…b‘­Pø—p‡ƒ‚ÎP‰š‚ÁPÁš„˜R$’Ŗī˜˜‡ŋî‚Ãīņš˙šī‹˜‡…b‘­P˜°‡ƒ‚ÎPņš‚ÁP)›„(˜R$’ _+˜Đ‡ŋ– ‚)_Y›‚_‘›‰­P3˜đ‡™t ‚ÎP͛‚ÁP⛆aO3˜ i ‚lO͛„<˜ė{ „M˜R$‹ˆ˙)_‚_œ„–™­P’>čM˜(ˆŋų ‚^č%œ˙Tč‹(ˆ…b‘­PM˜Hˆƒ‚ÎP%œ‚ÁP]œ„h˜R$’õīh˜pˆĀ\!‚đœ˙ đ‹pˆ…b‘­Ph˜ˆƒ‚ÎPœ‚ÁPŜ„€˜R$’Gđ€˜¸ˆÁŋ!‚gđõœ˙]đ‹¸ˆ…b‘­P€˜Øˆƒ‚ÎPõœ‚ÁP-„˜˜R$’Gđ˜˜‰Â""‚gđ]˙]đ‹‰…b‘­P˜˜ ‰ƒ‚ÎP]‚ÁP•„°˜R$’™đ°˜H‰Ã…"‚šđŝ˙¯đ‹H‰…b‘­P°˜h‰ƒ‚ÎPŝ‚ÁPũ„ȘR$’ūãȘ‰Äč"‚ä-ž˙䋐‰…b‘­PȘ¨‰ƒ‚ÎP-ž‚ÁPež„ā˜R$’Tđ˜Č‰Į$#‚+T•žŠĄIđ˜Č‰ ‚°I•ž’W… ™ā‰Įœ#‚f…Ņž’ģI ™Š #c#‚ĘIŅžŠKL#™Š #‚dL Ÿ‚ZL8Ÿ“¸™+8”Ru[’W…6™8ŠĮ$‚f…VŸ†ģI6™ #Û#‚ĘIVŸŠKL<™PŠ #‚dL…Ÿ‚ZL´Ÿ“§™+8”Rv†ãA™ ĮY$‚ãԟ‡*iA™ U‚9iԟ„L™qG†W…ŋ™ĮŅ$‚f…ôŸ’ģIŋ™hŠ #˜$‚ĘIôŸŠKL™€Š #‚dL  ‚ZL6 “ڙ+8”Ru[†W…ڙĮI%‚f…I †ģIڙ #%‚ĘII ūKLā™ #‚dL^ ‚ZL‹ “í™+8”Ru[†ãí™#ĮŽ%‚ãž ‡*ií™#U‚9iž „÷™qGˆ —„ė˜y]„™”“„ ™J‚ „˙™Š{ ´ĢņŽœ'IT,ƒŽ^ķ'‘žÂl ôR&‚âlŗ ‚Ølß € …b‘œl ˜Šƒ‚ĩlĄ‚Ģl,Ą„7=‰ã@°Šôŧ&‚ãOĄ‘*i@ȊU‚9iOĄŠqG@āŠ‚ŠG|Ą‚€GOĄ„Tŝžã|ô'øãudŸ‡*i|Uø9iudŸ„†qGˆ „@y]„ŽŠ{ ųEüHĖ|œ8'/ûž“\‡‘Ą|ž/‘†‡m  q'˙–m†Ąm3  —'˙°m„9Zg’މ<øŠŸĮ'‚§‰Ą‚‰ĻĄˆ^’čžt‹ Š(‚Ÿĸ‚ŸJĸ‹‹Š.Ÿ’A€0‹ y 0(‚3AŨĸ‚)A5Ŗ„’h_Ą(øf…uPŸ’ģI_P‹ #h(øĘIuPŸŠKLbh‹ #‚dLōŖ‚ZL¤“w+8”Ru\ˆ€’čžĸ€‹ĸ)‚Ÿ2¤‚Ÿz¤‹€‹Š.Ÿ’Aޘ‹ y )‚3AĨ‚)AHĨ„ĀhˆŽ’5‡Á¸‹ĸN)‚N‡ĘĨ‚D‡'Ļ„ÎčČ’W…ÎØ‹ĸÆ)‚f…vĻ’ģIÎø‹ #)‚ĘIvĻŠKLŅŒ #‚dLČĻ‚ZL§“(+8”RuG’W…á0ŒĄ>*‚f…2§’ģIáHŒ #*‚ĘI2§ŠKLį`Œ #‚dLT§‚ZLt§“?+8”Rw’W…ëxŒ ļ*‚f…’§’ģI됌 #}*‚ĘI’§ŠKLņ¨Œ #‚dL´§‚ZLÖ§“W+8”Rw’W…õŒŸ.+‚f…ô§’ģIõ، #õ*‚ĘIô§ŠKLûđŒ #‚dL¨‚ZL8¨“o+8”Rw’W…˙ŸĻ+‚f…V¨’ģI˙  #m+‚ĘIV¨ŠKL8 #‚dLx¨‚ZLš¨“‡+8”Rw’W… PĄ,‚f…¸¨’ģI h #å+‚ĘI¸¨ŠKL€ #‚dLÚ¨‚ZLü¨“Ÿ+8”Rw†W…ģĸ–,‚f…Š’ģIģ˜ #],‚ĘIŠŠKLž° #‚dL/Š‚ZL\Š“Ķ+8”RuG†W…ĶĄ-‚f…oІģIĶ #Õ,‚ĘIoŠūKLŲ #‚dL„Š‚ZLąŠ“å+8”RuG†W…å †-‚f…ÄŠ†ģIå #M-‚ĘIÄŠūKLë #‚dLŲŠ‚ZLĒ“÷+8”RuG†W…÷Ÿū-‚f…džģI÷ #Å-‚ĘIĒūKLũ #‚dL.Ē‚ZL[Ē“ +8”RuG†W… Ÿv.‚f…ndžģI  #=.‚ĘInĒūKL #‚dLƒĒ‚ZL°Ē“+8”RuG†W…DĄî.‚f…ÃdžģI #ĩ.‚ĘIÃĒūKL!> #‚dLØĒ‚ZLĢ“-+8”RuG„3ž%„t ø„ĸœ)„6Š{ 1:üöË|œ4/7ûž“\‡‘ĄŲ–”7‘†*y0 •—/‚9yĢūy0 #‚yĢ„6Žh’މ9ȍ•Į/‚§‰ŠĢ‚‰ĄĢˆ[’čžqā–Š0‚ŸũĢ‚ŸEŦ‹āŠ.Ÿ’A}Ž y 00‚3AØŦ‚)A0­„h_Ą0øf…uPŸ’ģI_ Ž #h0øĘIuPŸŠKLb8Ž #‚dLí­‚ZLŽ“w+8”Ru\ˆ}’čžŸPŽ—1‚Ÿ-Ž‚ŸuŽ‹PŽŠ.Ÿ’AĢhŽ y 1‚3AûŽ‚)AC¯„ŊhˆĢ’5‡žˆŽ—N1‚N‡ů‚D‡"°„ËčČ’W…˨Ž—Æ1‚f…q°’ģIËȎ #1‚ĘIq°ŠKLÎāŽ #‚dLð‚ZL˙°“(+8”RuG’W…Ū–>2‚f…-ą’ģIŪ #2‚ĘI-ąŠKLä0 #‚dLOą‚ZLoą“?+8”Rw’W…čH–ļ2‚f…ą’ģIč` #}2‚ĘIąŠKLîx #‚dL¯ą‚ZLŅą“W+8”Rw’W…ō•.3‚f…īą’ģIō¨ #õ2‚ĘIīąŠKLøĀ #‚dL˛‚ZL3˛“o+8”Rw’W…ü؏•Ļ3‚f…Q˛’ģIüđ #m3‚ĘIQ˛ŠKL #‚dLs˛‚ZL•˛“‡+8”Rw’W… –4‚f…ŗ˛’ģI8 #å3‚ĘIŗ˛ŠKL P #‚dLÕ˛‚ZL÷˛“Ÿ+8”Rw†W…ģ—–4‚f…ŗ’ģIģh #]4‚ĘIŗŠKLž€ #‚dL*ŗ‚ZLWŗ“Ķ+8”RuG†W…Ķ–5‚f…jŗ†ģIĶ #Õ4‚ĘIjŗūKLŲ #‚dLŗ‚ZLŦŗ“å+8”RuG†W…å–†5‚f…ŋŗ†ģIå #M5‚ĘIŋŗūKLë #‚dLÔŗ‚ZL´“÷+8”RuG†W…÷•ū5‚f…´†ģI÷ #Å5‚ĘI´ūKLũ #‚dL)´‚ZLV´“ +8”RuG†W… •v6‚f…i´†ģI  #=6‚ĘIi´ūKL #‚dL~´‚ZLĢ´“+8”RuG†W…D–î6‚f…ž´†ģI #ĩ6‚ĘIž´ūKL!> #‚dLĶ´‚ZLĩ“-+8”RuG„0ž%„q ø„Ÿœ)„6Š{ uHüĄāšCœ479ûž“CW‘Ą|é 9‘†‡m'šę q7‚–mĩ†Ąm*šę ›7‚°mKĩ„0šZg†•ZOšī Ī7‚­Ziĩ‚ ZĄĩ„cšÕ{ ’W…­š˜õ G8‚f…ĩĩ’ģI­š¸ #8‚ĘIĩĩŠKLļšĐ #‚dL×ĩ‚ZLųĩ“0›+8”Ru[†W…4›õ ŋ8øf…u\Ÿ†ģI4› #†8øĘIu\ŸūKL:› #‚dLļ‚ZLDļ“J›+8”Ru[„Lšp„kšZg„šž%„­šÕ{ „Κw} „ęšŊ{ „›p„›#‚„S›Š{ 1:üĘā`›3œ79Ŗ;ûž“CW‘ĄŲ–ü Ŗ;‘—萘;ĨE˙ \F‘P’W…œ‘ æ9‚f…Wļ’ģIœ ‘ #­9‚ĘIWļŠKLœ8‘ #‚dLlļ‚ZLļ“Xœ+8”RuW’W…(œX‘ _:‚f…Ÿļ’ģI(œp‘ #%:‚ĘIŸļūKL1œ #‚dL´ļ‚ZLÉļ“Aœ+8”RuD†W…\œ ×:‚f…Üļ†ģI\œ #ž:‚ĘIÜļūKLbœ #‚dLņļ‚ZLˇ“nœ+8”Ru`†W…yœ O;øf…u\Ÿ’ģIyœˆ‘ #;øĘIu\ŸŠKL|œ ‘ #‚dL1ˇ‚ZL^ˇ“‘œ+8”RuW„™›æ(ŗŗ›qo;”PuX„ɛp„훾%„œÕ{ „(œw} „wœŠ{ uHüEá œ2œĀ;PBûž“CW‘ĄVĒ( PB‘ũ %‘—¸‘EB™ĸ‚6 %qˇ™‰ę@ %ކ ņ͜- E<‚ņ顓ėœq”PuT†Tėœ- <‚+T¸ūĄIėœ ‚°I¸’"ņøœĐ‘- ´<‚-ņ3¸“q”PuD’W…/đ‘- ,=‚f…Q¸’ģI/’ #ķ<‚ĘIQ¸ŠKL2(’ #‚dL•¸‚ZLŪ¸“HŸ+8”Ru[’W…FH’- Ĩ=‚f… š’ģIF`’ #k=‚ĘI šŠKLLx’ #‚dL.š‚ZLOš“hŸ+8”RuD’W…‹’0 >‚f…mš’ģI‹°’ #ä=‚ĘImšŠKL”Č’ #‚dLš‚ZLąš“Ÿ+8”Ru[†"ņž4 P>‚-ņĪš“Нq”PuT’W…áā’4 É>‚f…íš’ģIᝓ #>‚ĘI횊KLę“ #‚dL6ē‚ZLē“8Ÿ+8”RuD—0“D@™Mf8 %ē†"ņ-ž: ?‚-ņÔē“Bžq”PuT”Ru@’W…SžP“: ˜?‚f…ģ’ģISžp“ #^?‚ĘIģŠKL\žˆ“ #‚dL"ģ‚ZLDģ“Ÿ+8”RuD†W…ŠŸ: @‚f…bģ†ģIŠŸ #×?‚ĘIbģūKLŸ #‚dLwģ‚ZLŒģ“œŸ+8”RuD„ž¯Ž„-žp„SžÕ{ „mžvy„“žÕ{ †W…uŸ- Ē@‚f…Ÿģ†ģIuŸ #ƒ@‚ĘIŸģūKL{Ÿ #‚dL´ģ‚ZLÉģ†W… Ÿ0 "A‚f…Üģ†ģI Ÿ #é@‚ĘIÜģūKLϟ #‚dLņģ‚ZLŧ“˛Ÿ+8”Ru[†W…¸Ÿ- šAøf…u\Ÿ’ģI¸Ÿ “ #aAøĘIu\ŸŠKL쟏“ #‚dLŧ‚ZLFŧ“П+8”Ru[„Ŝp„͜OŽ„÷œŸ„/Õ{ „h„{ž%„‹Õ{ „ĻŊ{ „ļp„žŽ„áÕ{ „û¯Ž„žW„ŸžßŽ„ܞp„īžw} „*ŸŊ{ „ˆŸŠ{ ]HüŸË|œmB'Jûž“\‡‘ĄVĒŠ'J‘ũ %‘’މ;Г‹ÃB‚§‰Yŧ‚‰lŧˆ]’čžsč“ŒĨC‚ŸČŧ‚ŸŊ‹蓩.Ÿ’A” y ,C‚3AŖŊ‚)AûŊ„‘h_Cøf…uPŸ’ģI_(” #dCøĘIuPŸŠKLb@” #‚dL¸ž‚ZLåž“w+8”Ru\ˆ’螥X”D‚Ÿøž‚Ÿ@ŋ‹X”Š.Ÿ’A­p” y D‚3AÆŋ‚)AĀ„ŋhˆ­’5‡”JD‚N‡Ā‚D‡íĀ„ÍčČ’W…Ͱ”ÂD‚f…<Á’ģIÍД #‰D‚ĘI<ÁŠKLĐč” #‚dLŽÁ‚ZLĘÁ“(+8”RuG’W…ā•Œ:E‚f…øÁ’ģIā • #E‚ĘIøÁŠKLæ8• #‚dL‚ZL:“?+8”Rw’W…ęP•Œ˛E‚f…XÂ’ģIęh• #yE‚ĘIXŠKLđ€• #‚dLz‚ZLœÂ“W+8”Rw’W…ô˜•‹*F‚f…ēÂ’ģIô°• #ņE‚ĘIēŠKLúȕ #‚dLÜ‚ZLū“o+8”Rw’W…ūā•‹ĸF‚f…Ã’ģIūø• #iF‚ĘIÊKL– #‚dL>ÂZL`Ó‡+8”Rw’W…(–ŒG‚f…~Ã’ģI@– #áF‚ĘI~ÊKLX– #‚dL Ã‚ZLÂÓŸ+8”Rw†W…ģ’G‚f…āÃ’ģIģp– #YG‚ĘIāÊKLžˆ– #‚dLõÂZL"Ä“Ķ+8”RuG†W…ĶŒ H‚f…5ĆģIĶ #ŅG‚ĘI5ÄūKLŲ #‚dLJÄ‚ZLwÄ“å+8”RuG†W…匂H‚f…ŠÄ†ģIå #IH‚ĘIŠÄūKLë #‚dLŸÄ‚ZLĖÄ“÷+8”RuG†W…÷‹úH‚f…ßĆģI÷ #ÁH‚ĘIßÄūKLũ #‚dLôÄ‚ZL!Å“ +8”RuG†W… ‹rI‚f…4ņģI  #9I‚ĘI4ÅūKL #‚dLIÅ‚ZLvÅ“+8”RuG†W…DŒęI‚f…‰Å†ģI #ąI‚ĘI‰ÅūKL!> #‚dLžÅ‚ZLËÅ“-+8”RuG„ „2ž%„8W„s ø„Ąœ)„6Š{ ]H•šŨāŸdœŠQĸstrD ŠQ‘ĄĢpD %‘— –Q¤mE /ü‘X—Ā–äP˜iG &'ŪņÕI  G éJ‚äIÆūģI   Õ‚ĘIÆūĄI   -‚°IÆ‹ؖ˜chH ē'>Æ†ÖæH  N `K‚öæDĮ‚ėæ\Į€H  …b‡­PH  ƒ‚ÎPDĮ‚ÁPpĮ’zįS đ–[ ĮK‚šį‰Į‚įĄĮ‹đ–…b‘­PS —ƒ‚ÎP‰Į‚ÁPĩĮ„` R$’%bb (—e .L‚EbÎĮ‚;bæĮ‹(—…b‘áPb @—ƒ‚QúĮ‚õPČ„CĄR$†Öæ  K L‚öæ,Č‚ėæDČ€  …b‡­P  ƒ‚ÎP,Č‚ÁPXȆzįē U đL‚šįqČ‚į‰Č€ē …b‡­Pē ƒ‚ÎPqČ‚ÁPČ†„æĐ Q QM‚¤æļČ‚šæÎȀР…b‡­PĐ ƒ‚ÎPļČ‚ÁPâȆꊥ'` M‚õŠûČūÚZĄĶ ‚åZûȆ%bPĄ ] ôM˙Eb‚;bÉ€PĄ …b‘áPSĄ`—ƒ‚Q/É‚õPOÉ„iĄR$†%bpĄ W [N˙Eb‚;bbÉ€pĄ …b‘áPsĄx—ƒ‚QvÉ‚õP–É„‰ĄR$’Aņ¨Ą—b ÂN‚aņŠÉ‚WņÁÉ‹—…b‘­P¨Ą°—ƒ‚ÎPŠÉ‚ÁPÕÉ„žĄR$’:äžĄØ—b O‚ZäųÉ‚PäĘ‹ؗ…b‘~ažĄø—ƒ‚ąaųÉ‚¤a"ʆÕIžĄ Ų tO‚äIųÉūģIžĄ Õ‚ĘIųÉūĄIžĄ -‚°IųɄԥR$’ÎäÔĄ ˜c čO‚îäFĘ‚ää^Ę‹ ˜…b‘­PÔĄ@˜ƒ‚ÎPFĘ‚ÁPrĘ„ėĄR$’W…ėĄh˜b `P‚f…–Ę’ģIėĄ€˜ #'P‚ĘI–ĘūKLõĄ #‚dLĢĘ‚ZLØĘ“ ĸ+8”R‘[†W…ĸb ØP‚f…ˆģIĸ #ŸP‚ĘIËūKLĸ #‚dLË‚ZLHË“+ĸ+8”R‘[„§Ą*ę†ã|  k )Q‚ã[ˇ*i|  U‚9i[Ë„‰ qG†ã+ĸk nQ‚ãoˇ*i+ĸU‚9ioË„8ĸqGˆ  „| y]„@ĸŠ{ ô1•ŪPĸûœ XĄĄ‘H X‘—˜˜ūWĨüˇI /ü‘T—˜cW˜iJ %ƒË—ؘXW™*K XŦË’ _€ĸø˜L ĨR˙)_‚_Ęˉ­P€ĸ™™ƒR‚ÎPėË‚ÁP˙ˆaO€ĸ xR‚lOėË„‰ĸė{ „šĸR$‹8™˙)_‚_/Ė„§Ŗ­P’ÎäšĸP™L S‚îäDĖ˙ää‹P™…b‘­Pšĸp™ƒ‚ÎPDĖ‚ÁPlĖ„ĩĸR$’Îäĩĸ˜™M kS‚îäœĖ˙ä䋘™…b‘­P¸ĸ¸™ƒ‚ÎPœĖ‚ÁPÄĖ„ÍĸR$’:äÍĸā™M &T‚ZääĖ˙Pä‹ā™…b‘~aÍĸšƒ‚ąaäĖ‚¤a͆ÕIÍĸ Ų T‚äIäĖūģIÍĸ Õ‚ĘIäĖūĄIÍĸ -‚°IäĖ„ãĸR$’Îäãĸ(šM ‰T‚îä6Í˙ää‹(š…b‘­PéĸHšƒ‚ÎP6Í‚ÁP^Í„õĸR$’W…õĸhšM U‚f…~Í’ģIõĸˆš #ČT‚ĘI~ÍŠKLūĸ š #‚dL Í‚ZLÂÍ“ČŖ+8”Ru[’W… Ŗ¸šM zU‚f…ā͆ģI Ŗ #@U‚ĘIāÍŠKLŖĐš #‚dL΂ZL$Γ¸Ŗ+8”RuP’—ņYŖčšM ¤U‚ĸņB΄mŖ,J’ÎänŖ›L V‚îän΂ääĻ΋›…b‘­PnŖ ›ƒ‚ÎPn΂ÁPÕ΄†ŖR$†V`tŖL WV˙e`ūTtŖÚ˙+TūĄItŖ ˙°I†W…¤M ĪV‚f…Ī’ģI¤@› #–V‚ĘIĪŠKL¤X› #‚dLĪ‚ZLGĪ“-¤+8”Ru[†W…-¤M GW‚f…ZΆģI-¤ #W‚ĘIZĪūKL3¤ #‚dLoĪ‚ZLœĪ“?¤+8”Ru[„AŖíkˆYŖ„*Ŗqk†ãßŖ O ¨W‚ã¯Ī‡*ißŖ U‚9i¯Ī„ėŖqG†ãūŖO íW‚ãŅ·*iūŖU‚9iŅĪ„ ¤qGˆrĸ„ßŖy]„¤Š{ :~9ßiü"X9Xāž“6_émsg`9X_5÷XO1QœZX,\ø"X‘ø,X‘‰× p›`.ZŽ×‚×æĪ’Ή ˜›ˇX‚Ū‰ĢĐˆ.’Ė×c°›_Y˙īׂÛׂҒØc؛#? Y˙'Ø‚Ø‚Ņ„ޏũ†VM°#?Š`hœ`WZ‚WŠ5Ô‚MŠŲÔ‰~as€œaâZ‚ąa@Õ‚¤a–Õ†ÕIs Ų ×Z‚äI@ÕūģIs Õ‚ĘI@ÕūĄIs -‚°I@Õ„R$‰W…¨œaY[‚f…¯Õ’ģIȜ # [‚ĘI¯ÕŠKL–✠#‚dLëÕ‚ZL'Ö“¸+8”RucžW…aĐ[‚f…:Ö†ģI #—[‚ĘI:ÖūKL  #‚dLOÖ‚ZL|Ö“+8”Rucž*i`ų[‚9iÖ„%qG„%| „sy]„û”{ „Š{ „-Š{ áËņQ\čoûļ %âãmˇ/üúĻ×P¤Ûœi\qûž“ĩ\‘ĄC%‘—øœûpĨ.\F‘´™%¯ÖĨ’¯/ü‘¸†>č°¤.]‚^č*ׂTčb×€°¤…b‘­P°¤ ƒ‚ÎP*ׂÁPŌׄŤR$’ _Ȥ8Ō]˙)_‚_÷׉­PФX™°]‚ÎPZØ‚ÁPm؆aOФĨ]‚lOZØ„Ų¤ė{ „đ¤R$‹x˙)_‚_ŸØ„Š­P’Îä𤐝5^‚îä´Ø˙ä䋐…b‘­Pö¤°ƒ‚ÎP´Ø‚ÁPüØ„ĨR$’[îLĨН"w^‚{îŲ‚qîDŲ‹Н…b„bĨ­P’>čbĨč#š^‚^čfŲ‚Tč~Ų‹č…b„wĨ­P’:äwĨž#x_‚Zä“Ų‚Pä¨Ų‹ž…b‘~awĨ(žƒ‚ąa“Ų‚¤aŊŲ†ÕIwĨ Ų k_‚äI“ŲūģIwĨ Õ‚ĘI“ŲūĄIwĨ -‚°I“Ų„ĨR$’W…ĨPž#Ū_‚f…íŲ’ģIĨhž #ˇ_‚ĘIíŲŠKLĨ€ž #‚dLÚ‚ZLÚ’,\?Ϙž5˛a‚7\*Ú‹˜žŸE\‘\ž­îmĻÂQ`‚ÍîHÚ‚Ãî`Ú€mĻ…b„ƒĻ­P‰OōƒĻĀžĀ’`‚oōuÚ‚eōÚ‹Āž…b„VŠ­PžÉa…ĻĀĶ`˙éa‚ßaĸÚ€…Ļ…b„”Ļ=žĖįŸĻÆa‚ėįˇÚ‚âįĪÚ€ŸĻ…b„ĩĻ­P‰ãČĻāžË\a‚ãäÚ‘*iČĻøžU‚9iäÚ„ÕĻqGžãnĒË a‚ãÛ‡*inĒU‚9iÛ„|ĒqGˆQĻ„ČĻy]’EķÖĻŸ4ôa‚eķ(Û‚[ķ`Û‹Ÿ…b„ęĻ­P’>čėĻ(Ÿ56b‚^čÛ‚TčˇÛ‹(Ÿ…b„˙Ļ­P’:ä˙Ļ@Ÿ5õb‚ZäŲÛ‚PäûÛ‹@Ÿ…b‘~a˙Ļ`Ÿƒ‚ąaŲÛ‚¤a܆ÕI˙Ļ Ų čb‚äIŲÛūģI˙Ļ Õ‚ĘIŲÛūĄI˙Ļ -‚°IŲÛ„§R$’Î䧈Ÿ57c‚îäMÜ‚ääuÜ‹ˆŸ…b„$§­P’>č&§ Ÿ6yc‚^č—Ü‚TčŋÜ‹ Ÿ…b„9§­P’:ä9§¸Ÿ68d‚ZäáÜ‚PäŨ‹¸Ÿ…b‘~a9§ØŸƒ‚ąaáÜ‚¤a%Ũ†ÕI9§ Ų +d‚äIáÜūģI9§ Õ‚ĘIáÜūĄI9§ -‚°IáÜ„O§R$’W…O§ 5˛d‚f…UŨ’ģIO§   #wd‚ĘIUŨŠKLR§8  #‚dLwŨ‚ZL™Ũ“Ē+8”Ru´†W…f§"6,e‚f…ˇŨ†ģIf§ #ņd‚ĘIˇŨūKLl§ #‚dLĖŨ‚ZLáŨ“|§+8”Ru´—X 3h™˛”+%ôŨ’W…ņ§€ 1ŋe‚f…Ū’KLņ§   #ĸe‚dL'Ū‚ZL<Ū“ų§+8”RudŠģIëŠĀ  #‚ĘIŪ†ķōtŠ/f‚ķOŪ‚ ķwŪ€tŠ…b„Š­P’>č‘ŠØ 0Gf‚^č™Ū‚TčąŪ‹Ø …b„¤Š­P’Î乊đ 0‰f‚îäÆŪ‚ääŪŪ‹đ …b„Š­P’>čÊĄ1Ëf‚^čüŪ‚Tčß‹Ą…b„ÖŠ­P’:äÖŠ0Ą1Šg‚Zä'ß‚Pä<ß‹0Ą…b‘~aÖŠPĄƒ‚ąa'ß‚¤aO߆ÕIÖŠ Ų }g‚äI'ßūģIÖŠ Õ‚ĘI'ßūĄIÖŠ -‚°I'ß„ëŠR$†W…Ģ1îgøf…uPŸ’ģIĢxĄ #ÉgøĘIuPŸŠKL̐Ą #ødLudŸøZLP„į¨:^ŗqŠuAh”PuP”RuŦ“ąŠīG”Pu°”Rv†W……Ē6Ģh‚f…g߆ģI…Ē #rh‚ĘIgßūKL‹Ē #‚dL|ß‚ZLŠß“—Ē+8”Ru`†W…ķĒ5%i‚f…ŧß’ģIķǍĄ #ęh‚ĘIŧߊKLöĒĀĄ #‚dLŅß‚ZLæß“ Ģ+8”Ru´†Ąō™§ki‚Áōųß‚ˇō!’§…b„¯§­P’>čą§ØĄ­i‚^čCā‚Tč[⋨Ą…b„ħ­P’:äħđĄlj‚Zäpā‚Pä…ā‹đĄ…b‘~aħĸƒ‚ąap₤ašā†ÕIħ Ų _j‚äIpāūģIħ Õ‚ĘIpāūĄIħ -‚°Ipā„Ú§R$’W…Ú§8ĸŌj‚f…Ęā’ģIÚ§Pĸ #Ģj‚ĘIĘāŠKLŨ§hĸ #‚dLßā‚ZLôā’ķōa¨€ĸ&k‚ķá‚ ķ/á‹€ĸ…b„w¨­P’>čx¨˜ĸ'Vk‚^čQá‚Tčiዘĸ…b„Œ¨­P’:䌨¸ĸ'l‚Zä~á‚Pä“ዸĸ…b‘~aŒ¨Øĸƒ‚ąa~Ⴄa¨á†ÕIŒ¨ Ų l‚äI~áūģIŒ¨ Õ‚ĘI~áūĄIŒ¨ -‚°I~á„ĸ¨R$’W…ĸ¨Ŗ'{l‚f…Øá’ģIĸ¨Ŗ #Tl‚ĘIØáŠKLĨ¨0Ŗ #‚dLíá‚ZLâ†W…Ē#ál‚f…â’ģIĒHŖ #ēl‚ĘIâŠKLĒ`Ŗ #‚dL*â‚ZL?â†W…›Ē'Gm‚f…Râ’ģI›ĒxŖ # m‚ĘIRâŠKLžĒŖ #‚dLgâ‚ZL|â†W…ÎĒ%­m‚f…â’ģIÎǍŖ #†m‚ĘIâŠKLŅĒĀŖ #‚dL¤â‚ZLšâ’W…ĀĨØŖ?%n‚f…Ėâ’ģIĀĨøŖ #ėm‚ĘIĖâŠKLÉĨ¤ #‚dLã‚ZLDã“0Š+8”Rud†ãŅĨ+n‚ãbã‡*iŅĨ+U‚9ibãūqGŅĨ+‚ŠG’ã‚€Gbã„âĨŝ’W…üĨ(¤@o‚f…˛ã†ģIüĨ #Īn‚ĘI˛ãŠKLĻ@¤ #‚dLäã‚ZLä“Ȩ+8”Rud†ã&ĒMo‚ã1ä‡*i&ĒU‚9i1ä„2ĒqG†W…5Ē@Æo‚f…Fä†ģI5Ē #Œo‚ĘIFäūKL;Ē #‚dL\ä‚ZL‹ä“GĒ+8”Ruģ†W…RĒ?>p‚f…žä†ģIRĒ #p‚ĘIžäūKLXĒ #‚dLŗä‚ZLČä“dĒ+8”Rud„¤fĖˆĄ¤ŗLĨuAmp”PuH”RuŦ„¸Ĩy]„ĀĨΨŗ<ĻuA p”PuX”RuŦŗ™§uAŋp”PuD”RuŦˆ¨„1¨­Pˆ?¨ŗa¨uAôp”PuL”RuŦˆžĒ„PĒŠ{ vĩ•āņ0Ģ=œ„|Ą%Ô„|‘ĸstrÔ´'‘Ą‘/Ôq‘—X¤o|¤endÖČ*‘P™Ã8׉|Û䙥‘æō嗐¤ũv¤msgÜ/ü‘T’đå”̰¤Ũ r‚æ:傿rå‹°¤…b‘­P”ĢȤƒ‚ÎP:å‚ÁP›å„ŦĢR$’ĮâŦĢč¤Ũís‚įâžå‚Ũâęå‹č¤…b‘X´ĢĨƒ‚'Xæ‚X?æ‰~aÄĢ0Ĩéōr‚ąa]悤a‰æ†ÕIÄĢ Ų įr‚äI]æūģIÄĢ Õ‚ĘI]æūĄIÄĢ -‚°I]æ„ŌĢR$‰W…ŌĢPĨéis‚f…§æ’ģIŌĢpĨ #0s‚ĘI§æŠKLṎĨ #‚dLĶæ‚ZLᓨ­+8”Ru`žW…Žéās‚f… į†ģIŽ #§s‚ĘI įūKL#Ž #‚dL5į‚ZLbį“3Ž+8”Ru`„ÃĢy]’}ôé̍ĨŪTt‚ôuį‚“ô­į‹¨Ĩ…b‘­PéĢĀĨƒ‚ÎPuį‚ÁPÜį„ŦR$’>čŦāĨßģt‚^č˙į‚Tč7č‹āĨ…b‘­PŦøĨƒ‚ÎP˙į‚ÁPfč„ŦR$’ _ŦĻß>u‚)_‰č‚_Áč‘­PŦ0Ļ™‚ÎPđč‚ÁPé†aOŦ 2u‚lOđč„"Ŧė{ „5ŦR$’Aņ5ŦXĻߥu‚aņLé˙Wņ‹XĻ…b‘­P5ŦxĻƒ‚ÎPLé‚ÁP„é„MŦR$’W…iŦ Ļāv‚f…§é’ģIiŦĀĻ #āu‚ĘI§éŠKLrŦØĻ #‚dLÉé‚ZLëé“Č­+8”RuT†ãß­â_v‚ã ę‡*iß­U‚9i ę„é­qG†W…8ŽāØv‚f…ę†ģI8Ž #žv‚ĘIęūKL>Ž #‚dL3ę‚ZLHę“JŽ+8”RuTˆ”Ģ„YŦy]„iŦÕ{ „ŠŦw} —đĻd|¤msgí/ü‘T†ãŒŦķ\w‚ã[ę‡*iŒŦU‚9i[ę„”ŦqG’đå´Ŧ §îÃw‚æ}悿ĩę‹ §…b‘­P´Ŧ8§ƒ‚ÎP}ę‚ÁPŪę„ĖŦR$’ĮâĖŦX§îŖy‚įâë‚Ũâ-ë‹X§…b‘XÔŦ€§ƒ‚'XVë‚X‚ë‰~aäŦ §é¨x‚ąa ë‚¤aĖë†ÕIäŦ Ų x‚äI ëūģIäŦ Õ‚ĘI ëūĄIäŦ -‚°I ë„ōŦR$‰W…ōŦ§éy‚f…ęë’ģIōŦā§ #æx‚ĘIęëŠKLõŦø§ #‚dL ė‚ZL,듏­+8”Ru`žW…UŽé–yøf…udŸ†ģIUŽ #]yøĘIudŸūKL[Ž #‚dLJė‚ZLwė“kŽ+8”Ru`„ãŦy]’}ô ­¨ī z‚ôŠė‚“ô˛ė‹¨…b‘­P ­0¨ƒ‚ÎPŠė‚ÁPÔė„!­R$’ūã!­P¨đqz‚ä÷ė‚äí‹P¨…b‘­P!­h¨ƒ‚ÎP÷ė‚ÁPAí„9­R$’ _;­ˆ¨đĨz‚)_dí‚_Œí„J­­P’ŋôJ­ ¨đ{‚ßôŽí˙Õô‹ ¨…b‘­PJ­Ā¨ƒ‚ÎPŽí‚ÁPÖí„b­R$’W…~­č¨ņ{‚f…ųí’ģI~­Š #G{‚ĘIųíŠKL‡­ Š #‚dLî‚ZL#­+8”RuT†W…ô­ņú{‚f…Aî†ģIô­ #Ā{‚ĘIAîūKLú­ #‚dLVî‚ZLk+8”RuT†ã Žķ?|‚ã~î‡*i ŽU‚9i~qGˆ´Ŧ„n­y]„~­Õ{ „›­w} „YĢ$=„ņ­Š{ „ŽŠ{ _5X%´ ōpŽķœÛ~ĸvarJ´'‘Ąú7Jĩ‘—8ŠĐ~™eK´'“îĨĄ‘Pĩ‘X’§Y‡ŽXŠK}‚˛YŨŽ=<†õŠŽQ‚}‚1õZī‚'õ‚ī€ŠŽ…b‘­PŦŽpŠƒ‚ÎPZī‚ÁPĮī„ÁŽR$’ _ÁވŠQ~‚)_ëī‚_đ‘­PÁŽ Š™‚ÎPKđ‚ÁPŽđ’aOÁŽČŠų}‚lOKđ„ÉŽė{ „ÚŽR$’ãęŽāŠQp~‚ãŋđ‘*ięŽĒU‚9iŋđŠqGęŽ Ē‚ŠG÷đ‚€Gŋđ„¯Å†ãO¯Qĩ~øãudŸ‡*iO¯Uø9iudŸ„[¯qGˆŠŽ„ęŽ q„M¯Õ} „c¯Š{ •(ōp¯œpĄ“q´'‘ĄÄ´'‘Ą/c%‘—@Ē™Ō$ōņ™lŨ%ōVņ—hĒ䄤msg:(‘X†Iöą;Ģ‚iö•ņ‚_öÍņ€ą…b„#ą­P’ĩõ%ąˆĒ<í‚Õõō‚ËõWō‹ˆĒ…b„;ą­P’Aņ;ą Ē</€‚aņœō‚WņÔō‹ Ē…b„Pą­P’öQąĀĒ<q€‚'öķ‚öQķ‹ĀĒ…b„hą­P’âčjąØĒ=ŗ€‚é–킸čÎ틨Džb„}ą­P’ĩõ}ąđĒ=õ€‚Õõô‚ËõKô‹đĒ…b„Žą­P’Î䐹Ģ=7‚îäô‚ääČô‹Ģ…b„Ļą­P’Éa§ą Ģ=y‚éa õ‚ßaUõ‹ Ģ…b„ĩą=’båĩą@Ģ>쁂‚åšõ‚xåŌõ‹@Ģ…b„Ęą­P’öĖąXĢ>ũ‚'öö‚öOö‹XĢ…b„Ûą­P’ÎäÜąpĢ>?‚‚îä”ö‚ääĖö‹pĢ…b„ėą­P’ÉaėąĢ>‚‚éa÷‚ßaI÷‹Ģ…b„ûą=’båûą°Ģ>‚‚åŽ÷‚xåÆ÷‹°Ģ…b„˛­P†ã!˛ >ƒ‚ã ø‡*i!˛ U‚9i ø„)˛qG’W…=˛ČĢ?€ƒ‚f…Pø’ģI=˛čĢ #Gƒ‚ĘIPøŠKLF˛Ŧ #‚dLpø‚ZL’ø“jŗ+8”Ru\†W…Ķŗ?øƒ‚f…°ø†ģIĶŗ #ŋƒ‚ĘI°øūKLŲŗ #‚dLÅø‚ZLōø“éŗ+8”Ru\†ãéŗA=„‚ãų‡*iéŗU‚9ių„ķŗqG˙ŗ{„‚ãų‡*i˙ŗU‚9ių„ ´qG´š„‚ã/ų‡*i´U‚9i/ų„!´qGˆąˆ˛„2˛y]„=˛p„b˛w} —Ŧ툤msg2(‘T’cõx˛0Ŧ3@…‚ƒõDų‚yõlų‹0Ŧ…b„˛­P’öޞHŦ4‚…‚'öõų‚öú‹HŦ…b„ĸ˛­P’Aņ¤˛`Ŧ4ą‚aņ‚ú‚WņĒú‹`Ŧ…b„ˇ˛­P’Éa¸˛xŦ4†‚éaû‚ßa7û‹xŦ…b„Æ˛=’ŒäÆ˛˜Ŧ5H†‚Ŧäœû‚ĸäÄû‹˜Ŧ…b„Û˛­P’ĩõܲ¸Ŧ5І‚Õõ)ü‚ËõQü‹¸Ŧ…b„đ˛­P’(įđ˛ØŦ5ˆ‚Hįļü‚>įŪü‹ØŦ…b„ŗ­P†ãŗ 5‡‚ãCũ‡*iŗ U‚9iCũ„ŗqG’W…/ŗøŦ6‰‡‚f…¨ũ’ģI/ŗ­ #P‡‚ĘI¨ũŠKL8ŗ0­ #‚dLÆũ‚ZLčũ“wŗ+8”Ru`†W…{ŗ6ˆ‚f…ū†ģI{ŗ #ȇ‚ĘIūūKLŗ #‚dLū‚ZLHū“‘ŗ+8”Ru`†ã‘ŗ8Fˆ‚ã[ū‡*i‘ŗU‚9i[ū„›ŗqGŠŗ„ˆ‚ãpū‡*iŠŗU‚9ipū„ŗŗqGŊŗˆ‚ã…ū‡*iŊŗU‚9i…ū„ÉŗqGˆx˛ˆŗ„$ŗy]„/ŗp„Pŗw} —H­¤msg*(‘P’cõ°h­+I‰‚ƒõšū‚yõŌū‹h­…b„)°­P’ĩõ*°€­,‹‰‚ÕõZ˙‚Ëõ’˙‹€­…b„>°­P’Aņ@°˜­,͉‚aņ ‚WņE‹˜­…b„S°­P’ÉaT°°­,Š‚éaĀ‚ßaø‹°­…b„b°=’Œäb°Đ­-QŠ‚Ŧäs‚ĸäĢ‹Đ­…b„w°­P’öx°đ­-“Š‚'ö&‚ö^‹đ­…b„Œ°­P’(įŒ°Ž-Պ‚HįŲ‚>į‹Ž…b„Ą°­P†ãą° -‹‚㌇*ią° U‚9iŒ„š°qG’W…Ͱ0Ž.’‹‚f…ü’ģIͰPŽ #Y‹‚ĘIüŠKLÖ°hŽ #‚dL‚ZL<“]ŗ+8”Ru`†W…+´. Œ‚f…Z†ģI+´ #Ņ‹‚ĘIZūKL1´ #‚dLo‚ZLœ“A´+8”Ru`†ãA´0OŒ‚㯇*iA´U‚9i¯„K´qGY´Œ‚ãć*iY´U‚9iÄ„c´qGm´ˌøãudŸ‡*im´Uø9iudŸ„y´qGˆ°ˆ¯°„°y]„Ͱp„ō°w} „˙°Õ} „Ĩ¯Ž|„ŗ¯Ž|„ŖŗŠ{ „ģŗŠ{ „ŅŗŠ{ „ûŗŠ{ „´Š{ „)´Š{ „S´Š{ „k´Š{ „´Š{ üĻߐ´$œˆj‘ûž“CW‘ĄVĒ  j‘‘ĄÍ  %‘—€Ž_‘™s¤ H‘Ų’TË´˜Ž¤ Žø+TŸŠĄIË´˜Ž ø°IŸļ1pŽ™lŨŽ ō÷’§Y%ļ°Ž˛ [Ž‚˛Y „0ļ=<„%ļŽ|„Iļp’ ņ<ĩČŽž ĸŽ‚ņ#“Vĩq”Pud†TVĩž ŪŽ‚+TAūĄIVĩ ‚°IA’"ņbĩāŽž ‚-ņp“}ĩq”Pv’W…ĩ¯ž ˆ‚f…Ž’ģIĩ ¯ #O‚ĘIŽŠKL“ĩ8¯ #‚dLÆ‚ZLõ“pļ+8”Ru_’W…§ĩX¯ž ‚f…†ģI§ĩ #Į‚ĘIŠKL­ĩp¯ #‚dLB‚ZLq“_ļ+8”Rv†W…}ļž x‚f…†ģI}ļ #?‚ĘIūKLƒļ #‚dL¤‚ZLŅ“ļ+8”Ru_†W…šļž đøf…u`Ÿ’ģIšļˆ¯ #ˇøĘIu`ŸŠKLļ ¯ #‚dLä‚ZL“˛ļ+8”Ru_„Č´Õ{ „ã´ģT„ ĩÛ~„4ĩp„<ĩOŽ„aĩŸ„ĩÕ{ „Åĩw} „æĩp„ųĩe˜„ ļp„˜ļŠ{ ]H´LōĀļœˇ“ĸstr|´'‘Ąŧ|´'‘Ą‘/|q‘—¸¯Ŧ“™Gˆ~H‘$†Üöūļ„9’‚üöc‚ōö‹€ūļ…b‘­Pū精ƒ‚ÎPc‚ÁPÄ„ˇR$’ _ˇđ¯„á’‚)_č‚_‰­Pˇ°™ŋ’‚ÎP<‚ÁPO†aOˇ ´’‚lO<„&ˇė{ „7ˇR$‹(°˙)_‚_€„ގ­P’ãIˇ@°„L“‚ã•‘*iIˇX°U‚9i•ŠqGIˇp°‚ŠGˇ‚€G•„_ˇÅ†ã˛ˇ„‘“øãudŸ‡*i˛ˇUø9iudŸ„žˇqG„âļfŸˆūļ„Iˇ q„ÆˇŠ{ •pōС|œ˙—–ŧÅ´'Ë—ˆ°ę—ĨfdÆ\F‘XĨ-|É/ü‘\†zįõˇĮw”øšį;Ÿ‚į) €õˇ…b‘­Põˇ¨°ƒøÎP;Ÿ‚ÁPm „ ¸R$’ _¸Ā°ĮД‚)_‘ ‚_Š —ā°Å”˙)_‚_í „渭P„(¸­P†ã;¸Į•‚ã ‡*i;¸U‚9i „H¸qG—ø°–˜iĘ&'K ’YQ¸ąĘ†•‚œYj ŠģIQ¸(ą Û‚ĘIj ŠĄIQ¸@ą -‚°Ij ’÷h¸XąË°•‚#÷ „u¸f‚ Š%bu¸pąË˙Eb‚;bĄ ‹pą…b‘áP~¸ąƒ‚Qļ ‚õPÉ „ЏR$’㧸°ąÉU–‚ãÜ ‘*i§¸ČąU‚9iÜ „´¸qG’W…´¸āąÎΖ‚f… ’ģI´¸˛ #”–‚ĘI ŠKLŊ¸˛ #‚dLT ‚ZL “ķ¸+8”RuT†W…šÎF—‚f…Î †ģIš # —‚ĘIÎ ūKLš #‚dLã ‚ZL “š+8”Ru_†ãšÉ‹—‚ã# ‡*išU‚9i# „.šqG5šɗøãudŸ‡*i5šUø9iudŸ„DšqGˆõˇ„;¸y]ˆQ¸„§¸y]„šŠ{ „LšŠ{ •‡ōPš’œ™Ąŧū´'‘Ąhū%‘‹0˛Ĩ-|˙\F‘l™ĪH‘8 †§Yrš „˜‚˛YV „~š=<’W…™šP˛ü˜‚f…j ’ģI™šp˛ #Ø‚ĘIj ŠKL š˛ #‚dLŒ ‚ZLÆ “Ųš+8”R‘k“ršˇ“”P‘l”R‘•Ļōđšaœ1šĄŧ´'‘Ąh´'‘‹¨˛Ĩ-|\F‘l™‘/ H‘ä ’§Y ēž ™‚˛Y „ē=<’W… 稞!šøf…‘lŸ’ģI ēø˛ #ܙøĘI‘lŸŠKL,ēŗ #‚dL ‚ZLC “Iē+8”R‘k“ 玓”P‘l”R‘´Åō`ēœŦŸĄŧ´'‘Ąhĩ‘—(ŗĄŸĨ-| \F‘L™Ī H‘q ĨĄ‘ĩ‘P’§YēPŗ ƚ‚˛YĨ „Šē=<’­î˛ēhŗ1›‚Íîš ‚Ãî‹hŗ…b‘­Pĩ爺ƒ‚ÎPš ‚ÁP|„ĘēR$’:äĘē°ŗđ›‚Z䜂P䨋°ŗ…b‘~aĘēĐŗƒ‚ąaœ‚¤a*†ÕIĘē Ų ã›‚äIœūģIĘē Õ‚ĘIœūĄIĘē -‚°Iœ„āēR$’ãōēøŗ[œ‚ãJ‘*iōē´U‚9iJŠqGōē(´‚ŠGœ‚€GJ„ ģŝ’W…2ģ@´͜‚f…Ô’ģI2ģh´ #šœ‚ĘIÔŠKLA쐴 #‚dLö‚ZL“ßģ+8”Rud’Éaj썴‚éa6‚ßan‹¨´…b„{ģ=’W…—ģČ´Ž‚f…ą’ģI—ģč´ #T‚ĘIąŠKLšģĩ #‚dLĶ‚ZLõ“ŧ+8”RuD’ãĒģ ĩĶ‚ã‘*iĒģ8ĩU‚9i„ĩģqG†ãŧž‚ã(‡*iŧU‚9i(„ŧqG†W…#ŧž‚f…=†ģI#ŧ #Wž‚ĘI=ūKL)ŧ #‚dLR‚ZL“5ŧ+8”RuS†W…Aŧ$ Ÿ‚f…’’ģIAŧPĩ #Īž‚ĘI’ŠKLDŧhĩ #‚dL§‚ZLŧ“Yŧ+8”RuD†ãeŧNŸøãu\Ÿ‡*ieŧUø9iu\Ÿ„sŧqGŗ玓lŸ”PuT”Ruˆ˛ē„đē qˆj섇ģy]„—ģÕ{ „Ãģw} „>ŧŠ{ ųqø€ŧ‚œ  øƒøúƒøŸ‰ãļŧ€ĩô7 ‚ãĪ‘*iļŧ˜ĩU‚9iĪŠqGļŧ°ĩ‚ŠGü‚€GĪ„Ęŧŝžãđŧô{ øãudŸ‡*iđŧUø9iudŸ„úŧqGˆĸŧ„­ŧv„ļŧy]„ŊŠ{ ´Ų-Ŋ œņĻĄuAĶņĻ‘’ŪWŊČĩÔĸĨ‚ūW‚ôW<’Įâ9ŊøĩÍĸ‚įâ‚‚Ũ⎋øĩ…b‘XAŊ ļƒ‚'X ‚X5‰~aWŊ@ļéŌĄ‚ąa^‚¤aš†ÕIWŊ Ų ĮĄ‚äI^ūģIWŊ Õ‚ĘI^ūĄIWŊ -‚°I^„eŊR$‰W…eŊ`ļéIĸ‚f…Ã’ģIeŊ€ļ #ĸ‚ĘIÊKLnŊ˜ļ #‚dL˙‚ZL;“hž+8”Ru\žW…ļžéĀĸ‚f…Y†ģIļž #‡ĸ‚ĘIYūKLŧž #‚dLn‚ZL›“Ėž+8”Ru\„VŊy]’įōzŊ°ļë¤‚ķŽ‚öō÷†T˜Ŋ,2Ŗ‚+T@ūĄI˜Ŋ ‚°I@’A›ŊØļ,Ŗ‚3A›‚)Aę†aO›Ŋ …Ŗ‚lO›„¤Ŋė{ „ŗŊh’W…ŗŊđļ, ¤‚f… ’ģIŗŊˇ #ĪŖ‚ĘI ŠKLŧŊ(ˇ #‚dLN‚ZLŠ“Xž+8”Ruŧ†t‰‚ž +R¤‚ƒ‰¨ū4‰‚ž ŧ˙Z‰˙M‰‚C‰¨†W…õž&,ˤ‚f…͆ģIõž #‘¤‚ĘIĶūKLûž #‚dLč‚ZLũ“ ŋ+8”Ruŧ„˜Ŋy]„€ž%| „šžō†ãČŊ+VĨ‚ã‡*iČŊ+U‚9iūqGČŊ+‚ŠG?‚€G„ŲŊŝ†ãŌž ›Ĩ‚ã_‡*iŌž U‚9i_„ÜžqGˆ9Ŋ’)ãž@ˇÔĻ‚;ãtŠĸ…ž`ˇ‚ą…ŖŠōž€ˇ‚ ōŌ‚ōŖ’W…#ž ˇŽyĻ‚f…ō†ģI#ž #@Ļ‚ĘIōŠKL(ž¸ˇ #‚dL‚ZL2“¯ž+8”Rv„žÅ„9ž”{ †)ãßžÔÖĻ‚;ãPūĸ…ßž‚ą…e„ëžō„3Ŋ&Vˆž„ķžŠ{ _5´äō ŋ3œĢąĄŖč´'‘ĄXŦé´'‘ĄĶûęĢą‘ ĄAë°ą‘Ąl"ė%‘—С ą¤msgí/ü‘L†fãLŋîå§ø†ã¸Ÿ‚|ãz€Lŋ…b‘­PLŋčˇƒøÎP¸Ÿ‚ÁPņ„dŋR$’ _gŋ¸î¨‚)_‚_m‰­Poŋ¸™k¨‚ÎPׂÁPę†aOoŋ `¨‚lOׄxŋė{ „‰ŋR$‹8¸˙)_‚_„ÖÁ­P†ĸãŒŋīፂÕã0‚ČãNū­bŒŋ  ‚āb0‚ĶbN„˜ŋö’ūãŸŋP¸đNŠ‚äb‚äz‹P¸…b‘­PŸŋh¸ƒ‚ÎPb‚ÁP„ˇŋR$’:äˇŋˆ¸đųŠ˙Zä‚Päŋ‹ˆ¸…b‘~aˇŋ ¸ƒ˙ąa‚¤aÔ’ÕIˇŋ Ų ėŠ˙äIŠģIˇŋظ Õ˙ĘIŠĄIˇŋđ¸ -˙°I„ĪŋR$†ūãŌŋķdĒ‚ä‚ä<€Ōŋ…b‘­PŌŋšƒ‚ÎP‚ÁP…„ęŋR$’ _íŋ šķ Ģ‚)_ĩ‚_퉭Põŋ8š™ęĒ‚ÎP6‚ÁPI†aOõŋ ßĒ‚lO6„ūŋė{ „ĀR$‹Xš˙)_‚_y„ļÁ­P†ŒäĀõwĢ‚Ŧ䎂ĸäπ…b‘­PĀpšƒ‚ÎPŽ‚ÁPģ„0ĀR$†ĸã3Ā÷ÉĢ‚Õãë˙Čãū­b3Ā  ‚ābë˙Ķb„?Āö’ūãFˆšø0Ŧ‚äū‚䋈š…b‘­PFĀ šƒ‚ÎPū‚ÁP+„^ĀR$’:ä^ĀĀšøÛŦ˙Zä‚Pä[‹Āš…b‘~a^ĀØšƒ˙ąa‚¤ap’ÕI^Āøš Ų ÎŦ˙äIŠģI^Āē Õ˙ĘIŠĄI^Ā(ē -˙°I„vĀR$’ŪW…Ā@ēûĨ¯‚ūW ‚ôWé’Įâ’Āhē䎂į⁂ŨâĘ‹hē…b‘X–ēƒ‚'X‚X(‰~aŠĀĀēéé­‚ąa=‚¤a‹†ÕIŠĀ Ų Ū­‚äI=ūģIŠĀ Õ‚ĘI=ūĄIŠĀ -‚°I=„šĀR$‰W…šĀāēé`Ž‚f…Ô’ģIšĀģ #'Ž‚ĘIÔŠKLÂĀģ #‚dL ‚ZLS “čÁ+8”RuSžW…(Âé׎‚f…q †ģI( #žŽ‚ĘIq ūKL. #‚dL† ‚ZLŗ “>Â+8”RuS„¨Āy]’ãÚĀ0ģO¯‚ãÆ ‘*iÚĀPģU‚9iÆ ŠqGÚĀpģ‚ŠG!‚€GÆ „îĀŝ†ã>”¯‚ã"!‡*i>ÂU‚9i"!„JÂqGˆ‘Ā„ÚĀįō’)ãÁģû“°‚;ã7!Šĸ…Á°ģ‚ą…f!ŠōÁĐģ‚ ō•!‚ōf!’W…'ÁđģŽ|°‚f…ĩ!†ģI'Á #C°‚ĘIĩ!ŠKL,Áŧ #‚dLĶ!‚ZLõ!“÷Á+8”Rw„Áŝ„AÁ”{ †ãDÁ+ûū°‚ã"‡*iDÁ+U‚9i"ūqGDÁ+‚ŠG5"‚€G"„UÁŝ†ãūÁûCą‚ãI"‡*iūÁU‚9iI"„ ÂqG†)ãÂû‰ą‚;ã^"ūĸ…‚ą…s"„!ÂōˆLŋ„…Ā&VˆÁ„Š{ ô1ô1•ķ`œ&´ĄŖŒ´'‘ĄXŦ´'‘ĄjØŽ´'‘ ĄÛ´'‘’W…Ä ŧ˜˛‚f… "’ģIÄÂ@ŧ #H˛‚ĘI "ŠKLĮÂXŧ #‚dLØ"‚ZL#“(Ã+8”Ru_’W…ÚÂxŧ˜ų˛‚f…%#†ģIÚ #ž‚ĘI%#ŠKLāŧ #‚dLT#‚ZLƒ#“Ã+8”Rw†W…5Øqŗ‚f…Ą#†ģI5à #8ŗ‚ĘIĄ#ūKL;à #‚dLļ#‚ZLã#“HÃ+8”Ru_†W…SÃ˜éŗøf…u`Ÿ’ģISèŧ #°ŗøĘIu`ŸŠKLVÃĀŧ #‚dLö#‚ZL#$“nÃ+8”Ru_„‚ÂģT„ĄÂ‰„­Â‰„ÄÂöĻ„ÃÉU„QÊ{ •;ķpÜ—ļĄŖœ´'‘ĄXŦ´'‘ĄjØž´'‘ ĄÛŸ´'‘’W…ÔÃØŧ¨ō´‚f…6$’ģIÔÃøŧ #š´‚ĘI6$ŠKL×ÃŊ #‚dLn$‚ZL$“8Ä+8”Ru_’W…ęÃ0Ŋ¨jĩ‚f…ģ$†ģIęà #1ĩ‚ĘIģ$ŠKLđÃHŊ #‚dLę$‚ZL%“'Ä+8”Rw†W…EĨâĩ‚f…7%†ģIEÄ #Šĩ‚ĘI7%ūKLKÄ #‚dLL%‚ZLy%“XÄ+8”Ru_†W…cĨZļøf…u`Ÿ’ģIcÄ`Ŋ #!ļøĘIu`ŸŠKLfÄxŊ #‚dLŒ%‚ZLš%“~Ä+8”Ru_„’ÃÅV„ąÃ‰„ŊÉ„ÔÃöĻ„ÄÉU„aÄŠ{ •dķ€ÄœšĄŖ ´'‘ĄXŦ ´'‘ĄjØ M(‘ ĄÛ M(‘’W…äĐŊcˇ‚f…Ė%’ģIäİŊ #*ˇ‚ĘIĖ%ŠKLįÄČŊ #‚dL&‚ZL3&“HÅ+8”Ru_’W…úÄčŊÛˇ‚f…Q&†ģIúÄ #ĸˇ‚ĘIQ&ŠKLÅž #‚dL€&‚ZL¯&“7Å+8”Rw†W…UÅS¸‚f…Í&†ģIUÅ #¸‚ĘIÍ&ūKL[Å #‚dLâ&‚ZL'“hÅ+8”Ru_†W…sÅ˸øf…u`Ÿ’ģIsÅž #’¸øĘIu`ŸŠKLvÅ0ž #‚dL"'‚ZLO'“ŽÅ+8”Ru_„ĸăV„ÁÄē„ÍÄē„äÄöĻ„!ÅÉU„qÅŠ{ ēŠ ĀÅœ#š˜Ŋûž“]V‘—HžŊĨeÁ ‘’j_­Å`žÁ˜š‚ƒ_b'‚y_z'ū@_­ÅY_‚O_š'†–_šÅ¸š‚Ĩ_Â'’:LĮÅxžÃYŊ‚ZL÷'‚PL (’:äĶŐžŒē˙Zä‚Pä+(‹ž…b‘~aĶŰžƒ˙ąa‚¤aT(’ÕIĶÅØž Ų ē˙äIŠģIĶÅđž Õ˙ĘIŠĄIĶÅŋ -˙°I„ņÅR$’įōņÅ ŋĸŧ‚ķƒ(‚öōĄ(†TÆ,ņē‚+TÁ(ūĄIÆ ‚°IÁ(’AÆ@ŋ,Kģ‚3Ađ(˙)A†aOÆ @ģ‚lOđ(„Æė{ „-Æh’W…-ÆXŋ,Ãģ‚f…')’ģI-Æxŋ #Šģ‚ĘI')ŠKL6Ɛŋ #‚dLI)‚ZLk)“€Æ+8”Ru_’t‰™Æ¨ŋ+ ŧ‚ƒ‰‰)Š4‰™Æ¨ŋ ŧ˙Z‰˙M‰‚C‰‰)†W…ŊÆ,ƒŧ‚f…´)†ģIŊÆ #Jŧ‚ĘI´)ūKLÃÆ #‚dLÉ)‚ZLö)“ĶÆ+8”Ru_„Æy]„˜Æ%| „˛Æō†ã>Æ+ Ŋ‚ã *‡*i>Æ+U‚9i *ūqG>Æ+‚ŠG*‚€G *„OÆÅ†ãÜÆRŊ‚ã2*‡*iÜÆU‚9i2*„éÆqGˆĶŀņÆ ˙;ãūĸ…ņÆ ˙ą…„ũÆō„ĮŠ{ ßĶ ŽŊÆŊITĶāž“‘_Ū‘/ÆŊ,æßû áŊųŊITnæāž“‘_Ū‘/ųŊ~æß# ž,žITĀæāž“‘_Ū‘/,žĐæßK Gž_žIT%āž“‘_Ū‘/_žø5ßs zž’žITväāž“‘_Ū‘/’ž†äß› ­žÅžITįāž“‘_Ū‘/Åž"įßà āžøžITļįāž“‘_Ū‘/øžÆįßë ŋ+ŋITdįāž“‘_Ū‘/+ŋtį•ķ Įœ!ŅĄgy´'‘Ąmy´'‘Ą6´'‘ Ą%X%‘Ą*X%‘ĄŲš%‘ —ĀŋŅ™Á}ū5G*†čJĮßŋ‚če*’˜ŊaĮđŋ Á‚¸Ŋ*‚ŽŊ§*’2æpĮĀoĀ‚Ræų*‚Hæ1+‹Ā…b‘­PpĮ0Āƒ‚ÎPų*‚ÁP‡+„ˆĮR$’ã“ĮPĀ´Ā‚ãĒ+‘*i“ĮhĀU‚9iĒ+„›ĮqG†ã#ĖųĀ‚ãõ+‡*i#ĖU‚9iõ+„/ĖqGˆpĮ„‘Įįō’ËŊŠĮ€Ā5‚ëŊ ,‚áŊC,’„æˇĮ ĀšÁ‚¤æl,‚šæ¤,‹ Ā…b‘­PˇĮ¸Āƒ‚ÎPl,‚ÁP -„ĪĮR$’ãÜĮØĀßÁ‚ã1-‘*iÜĮđĀU‚9i1-„æĮqG†ãĖ$‚ã~-‡*iĖU‚9i~-„ĖqGˆˇĮ„ÚĮįō’ūŊ÷ĮÁ`ž”-‚žĖ-’ÖæČ ÁÅ‚öæ .‚ėæC.‹ Á…b‘­PČ8Áƒ‚ÎP .‚ÁPĢ.„ČR$†ã*Č  ÂãĐ.‡*i*Č U‚9iĐ.„4ČqG†ãųËOÂã/‡*iųËU‚9i/„ĖqGˆȄ(Čįō’1ž4ČXÁ‡Ä‚Qž3/‚Gžk/’$mBČpÁėÃ˙Dm‚:m”/‹pÁ…b‘ūlHȈÁƒ‚mü/‚ m+0„WČ7=†ãdČ 1Ä‚ãK0‡*idČ U‚9iK0„nČqG†ãáËvÄ‚ã˜0‡*iáËU‚9i˜0„īËqGˆBȄbČįō’džnČ Á˛Å‚„žŽ0‚zžæ0’Œä|ČĀÁÅ‚Ŧä1‚ĸä<1‹ĀÁ…b‘­P|ČØÁƒ‚ÎP1‚ÁP¤1„”ČR$’ãĄČøÁ\Å‚ãÉ1‘*iĄČÂU‚9iÉ1„ĢČqG†ãËËĄÅ‚ã2‡*iËËU‚9i2„ŲËqGˆ|ȄŸČįō’—žēČ(ÂŨÆ‚ˇž,2‚­žd2’(įČČHÂBÆ‚Hį‘2‚>įÉ2‹HÂ…b‘­PČČ`ƒ‚ÎP‘2‚ÁP93„āČR$†ãíČ ‡Æ‚ã\3‡*iíČ U‚9i\3„õČqG†ãˇËĖÆ‚ã§3‡*iˇËU‚9i§3„ÃËqGˆČȄëČįō’ĘžɀÂČ‚ęžŊ3‚āžõ3’Ėį É ÂmĮ‚ėį44‚âįl4‹ Â…b‘­P ɸƒ‚ÎP44‚ÁPŋ4„(ÉR$†ã3ɲĮ‚ãâ4‡*i3ÉU‚9iâ4„;ÉqG†ãŖË÷Į‚ã*5‡*iŖËU‚9i*5„­ËqGˆ Ʉ1Éįō’1ž;ÉØÂ/É‚Qž?5‚Gžw5’$mFÉđ”Č˙Dm‚:m 5‹đÂ…b‘ūlLÉÂmō5‚ mo6„[É7=†ãfÉŲČ‚ã6‡*ifÉU‚9i6„nÉqG†ãËÉ‚ãÖ6‡*iËU‚9iÖ6„œËqGˆFɄdÉįō’pXnÉ ÃZĘ‚Xë6‚†X#7’båyÉ8ÃŋÉ‚‚åA7‚xåy7‹8Ã…b‘­PyÉPÂÎPA7‚ÁPË7„‘ÉR$†ãœÉ Ę‚ãî7‡*iœÉ U‚9iî7„¤ÉqG†ãËIĘ‚ã58‡*iËU‚9i58„‹ËqGˆyɄšÉįō’Ęž¯ÉpÃ…Ë‚ęžJ8‚āž‚8’ĖįŧɐÃęĘ‚ėįÁ8‚âįų8‹Ã…b‘­PÂɨÂÎPÁ8‚ÁPK9„ĐÉR$†ãÛÉ/Ë‚ãk9‡*iÛÉU‚9ik9„ãÉqG†ãpËtË‚ã˛9‡*ipËU‚9i˛9„zËqGˆŧɄŲÉįō’1žãÉĀÃŦĖ‚QžĮ9‚Gž˙9’$mîÉØÃĖ˙Dm‚:m(:‹ØÃ…b‘ūlôÉđÂmz:‚ mĐ:„Ę7=†ãĘVĖ‚ãđ:‡*iĘU‚9iđ:„ĘqG†ã]Ë›Ė‚ã7;‡*i]ËU‚9i7;„iËqGˆîɄ Ęįō’ũžĘÄ×Í‚ŋL;‚ŋ„;’zį!Ę Ä<Í‚šįĸ;‚įÚ;‹ Ä…b‘­P!Ę8ă‚ÎPĸ;‚ÁP,<„9ĘR$†ãDĘ Í‚ãO<‡*iDĘ U‚9iO<„LĘqG†ãNËÆÍ‚ã–<‡*iNËU‚9i–<„XËqGˆ!ʄBĘįō’ĘžWĘXÄĪ‚ęžĢ<‚āžã<’ĖįdĘxÄg΂ėį=‚âįO=‹xÄ…b‘­Pjʐă‚ÎP=‚ÁP­=„xĘR$†ãƒĘŦ΂ãÍ=‡*iƒĘU‚9iÍ=„‹ĘqG†ã;Ëņ΂ã>‡*i;ËU‚9i>„GËqGˆdʄĘįō’1ž‹Ę¨Ä)Đ‚Qž>‚GžD>’$m–ĘĀÄŽĪ˙Dm‚:mb>‹ĀÄ…b‘ūlœĘØÄƒ‚mŗ>‚ mâ>„ĢĘ7=†ãļĘ ĶĪ‚ã?‡*iļĘ U‚9i?„žĘqG†ãËĐ‚ã/?‡*iËU‚9i/?„!ËqGˆ–Ę„´Ęįō’)ãŲĘđÄoĐ‚;ãD?Šĸ…ŲĘÅ‚ą…f?„åĘō†)ã$ËĩĐ‚;ã“?ūĸ…$Ë‚ą…¨?„1Ëō„jĮ&V„§Įųk„õĮųk„ēČųk„Éųk„¯Éųk„WĘųk„ÍĘĪGˆØĘ„ËÉU„9ËŠ{ ßv¤0ŅHŅāž“…Žërhs HHŅ6ßcŅ{ŅITčãāž“‘_Ū‘/{Ņøã•Āķí œĒâå%Ągy%´'‘Ąmy&´'‘Ą%X'%‘ Ą*X(%‘— ŕâņlhs/Ũ¤ņrhs/Ũ¤ĨrĨ84 ‘č|ĨtŲ<4 ‘¤~’!Ņ3PÅ0‚Ķ‚:ŅÕ?‚0Ņũ?’3hÅ K¨Ō‚ũ?†kŽ3 ?‹Ō‚zŽũ?ŠŠŽX€Å ?‚™Ž%@’U˜Å KĶ‚=@†kŽU ?įŌ‚zŽ=@ūŠŽ€ ?‚™Žu@ŠŽ…°Å M‚͎@‚ڎÅ@‹°ÅéŽũ@öŽ5A’¤Ž…ĐÅ ucĶ‚¯Ž]AФާčÅ v‚¯ŽĩA’×đÆ8HÕ‚Ž×íA‚× B’Ήđ(ÆŅ͂ۉäBˆ’Ė×H@ÆyÔ˙īׂÛ×˙C’ØHhÆ#?&Ô˙'Ø‚Ø˙C„Ŗ¸ũ’VMŖˆÆ#?VÔ˙yM‚eMŊD„Ō¸ũūMĄ #?˙AM‚-MSE’ī‰ô Æ Õ‚ŠiE‚ū‰ĄE‰ĩ‰ôāÆcĮÔ‚ĉĄEˆn‘t‰tĮc‚ƒ‰ŒFŠ4‰tĮ ŧ˙Z‰˙M‰‚C‰ŒF†ĢLŋ 81Õ‚ēLGˆÜ „°¸ũˆL ˆ_ ’{а0Į9¨Õ‚¤ŠĨG‚˜ŠH‘=RšPĮ$Ō‚LRvH‚VRÖH‹hĮeR&I’ūlŧ€Į9ÜÕ‚m‚I‚ m—I„Ų7=’×Ų˜Į<ĸׂŽ× J‚×PJ’ΉŲ¸Į+Ö‚Ū‰'Kˆû’ĖרĮĶÖ˙īׂÛ×čK’ØČ#?€Ö˙'Ø‚ØčK„j¸ũ’VMj0Č#?°Ö˙yM‚eMĻL„“¸ũūMm #?˙AM‚-MqM’HČeׂЇM‚ū‰ËM‰ĩ‰˛pČc!ׂĉËMˆ)‘t‰/˜Čc‚ƒ‰ZNŠ4‰/˜Č ŧ˙Z‰˙M‰‚C‰ZN†ĢL‰ 0‹×‚ēLķNˆĻ „k¸ũˆĮ ˆÚ ’{Šk°Č=Ø‚¤Š O‚˜ŠeO‘=RtĐČ$Ō‚LRâO‚VRP‹čȁeReP’ūlwÉ=6Ø‚m–P‚ mĢP„”7=’MŅŲ ÉAaŲ‚mŅ(Q‚cŅpQ’ūãå8ÉÆØ‚ä.R‚ävR‹8É…b‘­PåPɃ‚ÎP.R‚ÁP˙R„R$†ã   Ų‚ã"S‡*i  U‚9i"S„qG†ã÷ PŲ‚ã‰S‡*i÷ U‚9i‰S„ qGˆå„ įō’ũžpÉAŒÚ‚ŋŸS‚ŋ÷S’zį/˜ÉņŲ‚šį T‚įxT‹˜É…b‘­P/°Éƒ‚ÎP T‚ÁPU„JR$’ãUĐÉ6Ú‚ã$U‘*iUčÉU‚9i$U„]qG†ã {Ú‚ã‹U‡*i U‚9i‹U„ qGˆ/„Sįō’pXiĘAˇÛ‚XĄU‚†XųU’båy ĘÛ‚‚å"V‚xåzV‹ Ę…b‘­Py8Ęƒ‚ÎP"V‚ÁPõV„”R$†ãŸ aÛ‚ãW‡*iŸ U‚9iW„§qG†ã ĻÛ‚ãcW‡*i U‚9icW„+ qGˆy„įō’ūŊÄXĘBâÜ‚žyW‚žąW’ÖæÔxĘGÜ‚öæÚW‚ėæX‹xĘ…b‘­PÔĘƒ‚ÎPÚW‚ÁPX„īR$†ãú ŒÜ‚ãĸX‡*iú U‚9iĸX„qG†ã ŅÜ‚ãßX‡*i U‚9ißX„, qGˆÔ„øįō’)ã°ĘA(Ũ‚;ãõXŠĸ…ĐĘ‚ą…$Y„+ō’W…+đĘBĸŨ‚f…aY’ģI+Ë #gŨ‚ĘIaYŠKL7(Ë #‚dLY‚ZLŋY“ë+8”Ru€|’W…C@ËCŪ‚f…ŨY†ģIC #áŨ‚ĘIŨYŠKLLXË #‚dLZ‚ZL]Z“û+8”Ru€|’ÛXpË<†ß‚.Û{Z’Ö…Ë5õŪ‚ŽÖģZ‰W…”¨Ë@ĶŪ‚f…ûZ†ģI” #˜Ū‚ĘIûZŠKLĀË #‚dLI[‚ZL‰[“ +8”Ru€|‡|LŠ@‚‹L§[ˆÆ’RÛÆØË5cß˙uÛ‚aÛį[’MŌøË#;@ß˙AM‚-M\ūāLã#;˙M‚īLK\ŠĢLØĖ5‚ēL}\ˆ/’Û/@ĖCđā‚.ÛŊ\’Ö_hĖ5_ā‚ŽÖī\‰W…n€Ė@=ā‚f…!]†ģIn #ā‚ĘI!]ŠKLw˜Ė #‚dLS]‚ZL…]“Û+8”Ru”|‡|Lƒ@‚‹LŖ]ˆ ’RÛ °Ė5Íā˙uÛ‚aÛĮ]’āLŦĐĖ#;Ēā˙M‚īLë]ŠMÃđĖ#;˙AM‚-M^ŠĢL˛Í5‚ēL3^ˆ †)ã/ A6á‚;ãW^ūĸ…/ ‚ą…m^„? ō†W…B B¯á‚f…œ^†ģIB #uá‚ĘIœ^ūKLK  #‚dL˛^‚ZLá^“^ +8”RuĪ|†W…^ C(â‚f…ô^†ģI^ #îá‚ĘIô^ūKLg  #‚dL _‚ZL9_“z +8”RuĪ|„ŽËX„ĮËX„Ų&V„ųk„iųk„ļčGĐŅņî‚^č3m‚Tčkm‹Ņ…b‘­PGĐ(Ņƒ‚ÎP3m‚ÁPŊm„_ĐR$’ãlĐHŅ6ī‚ãām‘*ilĐ`ŅU‚9iām„tĐqG†ã¯Ņ{ī‚ã'n‡*i¯ŅU‚9i'n„šŅqGˆGЄjĐįō’ũž‚ĐxŅĩˇđ‚ŋŅ Ō #‚dLŸq‚ZLŊq“‡Ņ+8”Rw„%Ņŝ„QŅ”{ †)ã˜Ņŗķ‚;ãûqūĸ…˜Ņ‚ą…r„ĨŅō„’ĪģT„¯Ī&V„đĪųk„9Đųk„‚Đųk„ËĐųkˆŅ„iŅÉU„­ŅŠ{ ßcƒķ›ķITzčāž“‘_Ū‘/›ķŠč•DôŌ…œTûĄ‡‘ē´'‘ĄŦ+ģ´'‘ĸs1ŧ´'‘ ĸs2Ŋ´'‘’MŅ3Ō¸ŌÂõ‚mŅ=r‚cŅer’ūãEŌāŌ‚ô‚äšr‚äs‹āŌ…b‘­PHŌøŌƒ‚ÎPšr‚ÁP`s„]ŌR$’ãjŌĶĮô‚ã€s‘*ijŌ0ĶU‚9i€s„rŌqG†ãvÔ õøãuLŸ‡*ivÔUø9iuLŸ„€ÔqGˆEŌ„hŌįō’ũž€ŌHĶÂHö‚ŋÔs‚ŋt’zįŽŌhĶ­õ‚šįGt‚įt‹hĶ…b‘­PŽŌ€Ķƒ‚ÎPGt‚ÁPát„ĻŌR$†ãŗŌ ōõ‚ãu‡*iŗŌ U‚9iu„ģŌqG†ãcÔ7ö‚ãKu‡*icÔU‚9iKu„oÔqGˆŽŌ„ąŌįō’mķÉŌ ĶÃs÷‚ķ`u‚ƒķ˜u’č×ŌČĶØö‚°čÃu‚Ļčûu‹ČĶ…b‘­P×ŌāĶƒ‚ÎPÃu‚ÁPMv„īŌR$’ãüŌÔ÷‚ãpv‘*iüŌÔU‚9ipv„ĶqG†ã?Ôb÷‚ãˇv‡*i?ÔU‚9iˇv„IÔqGˆ×Ō„úŌįō’ũžĶ0ÔÄžø‚ŋĖv‚ŋw’zį ĶPÔø‚šį/w‚įgw‹PÔ…b‘­P ĶhÔƒ‚ÎP/w‚ÁPšw„8ĶR$†ãEĶ Hø‚ãÜw‡*iEĶ U‚9iÜw„MĶqG†ãԍø‚ã#x‡*iÔU‚9i#x„%ÔqGˆ Ķ„CĶįō’ĪG[͈ÔÄÉų‚īG8x‚åGpx’Îäi͍Ô.ų‚îä›x‚ääĶx‹¨Ô…b‘­PiĶĀÔƒ‚ÎP›x‚ÁPy„ĶR$†ãŽĶ sų‚ã9y‡*iŽĶ U‚9i9y„–ĶqG†ãNÔ¸ų‚ãqy‡*iNÔU‚9iqy„ZÔqGˆiĶ„ŒĶįō’)ãĄĶāÔ¡ú‚;ã†yŠĸ…ĄĶÕ‚ą…ĩyŠōĄĶ Õ‚ ōäy‚ōĩy’W…ÆĶ@ÕŽ ú‚f…z†ģIÆĶ #gú‚ĘIzŠKLÎĶXÕ #‚dL/z‚ZLMz“Ô+8”Rw„ĩĶŝ„áĶ”{ †)ã(ÔÂũú‚;ã‹zūĸ…(Ô‚ą… z„5Ôō„"ŌÅV„?Ō&V„€Ōųk„ÉŌųk„Ķųk„[ĶųkˆĄĶ„ųĶÉU„=ÔŠ{ áē#zûŪÚtŌ´'Ū͆Ō´'ß‹û¨ûITĖčāž“‘_Ū‘/¨ûÜč•Ö#Ôœ@‡•´'–‚ąí%ÍzĄĒî´'‘Ąââî´'‘ĄÚtī@‘Ą͆īE‘ —pÕ5™˜ķ%{Ĩ°ôH‘‘ŧ’TûąÔˆÕđĄü‚lû'{‚_ûR{ŠtIÁÔ ÕÖ‚“Ip{‚†Iƒ{„ÎÔč} ’ĪG(Õ¸ÕöĖũ‚īG–{‚åGÎ{’Îä5ÕØÕ1ũ‚îä÷{‚ää/|‹ØÕ…b‘­P5ÕđÕƒ‚ÎP÷{‚ÁP|„PÕR$†ã[Õ vũ‚ãŊ|‡*i[Õ U‚9iŊ|„cÕqG†ã;×ģũ‚ã÷|‡*i;×U‚9i÷|„G×qGˆ5ՄYÕįō’pX‰ÕÖ÷÷ū‚X }‚†XD}’bå—Õ8Ö\ū‚‚åY}‚xå‘}‹8Ö…b‘­PšÕPÖƒ‚ÎPY}‚ÁPī}„¯ÕR$’ãŧÕpÖĄū‚ã~‘*iŧՈÖU‚9i~„ÄÕqG†ãœ×æūøãuPŸ‡*iœ×Uø9iuPŸ„Ē×qGˆ—Õ„ēÕįō’zûáÕ Öų"‚šûI~‚û~’âčīÕČÖ‡˙‚é–~‚øčÎ~‹ČÖ…b‘­PōÕāÖƒ‚ÎP–~‚ÁP,„ÖR$’ãÖ×Ė˙‚ãL‘*iÖ×U‚9iL„ÖqG†ã‹×‚ㆇ*i‹×U‚9i†„—×qGˆīՄÖįō’ĪG*Ö0×ųM‚īG›‚åGĶ’Îä8ÖPײ‚î䀂ääR€‹P×…b‘­P>Öh׃‚ÎP€‚ÁP°€„LÖR$†ãYÖ ÷‚ãЀ‡*iYÖ U‚9iЀ„aÖqG†ãx×<‚㠁‡*ix×U‚9i „„×qGˆ8քWÖįō’ĪG†Ö€×úx‚īG‚åGW’Îä“Ö ×Ũ‚î䀁‚ä丁‹ ×…b‘­P™Ö¸×ƒ‚ÎP€‚ÁPú„§ÖR$†ã˛Ö "‚ょ*i˛Ö U‚9i‚„ēÖqG†ãc×g‚ã8‚‡*ic×U‚9i8‚„q×qGˆ“Ö„°Öįō’)ãÅÖĐ×öf‚;ãM‚Šĸ…ÅÖđׂą…o‚ŠōÅÖØ‚ ō‘‚‚ōo‚’W…įÖ0ØŽO‚f…ą‚†ģIįÖ #‚ĘIą‚ŠKLėÖHØ #‚dLĪ‚‚ZLí‚“7×+8”Rv„ŲÖŝ„ũ֔{ †)ãJ×öŦ‚;ã ƒūĸ…J×‚ą… ƒ„W×ō„ Õ&V„ÕßŗĄ š IT, āž“‘_Ū‘/š +‘•>$°ÛXœ8+‡•, –‚ąí%…ŦĄĒî´'‘Ąââî´'‘ĄÚtī8+‘Ą͆ī=+‘ —°â-+™˜ķ%ĻŦĨ°ôH‘‘´’ī÷ÉÛČâđ"‚øÆŦ‚ø:­ūöMÉÛäN‚N:­‚NÆŦ†ÂMÉÛ K"‚ŅM:­ūJÉÛ Õ‚J:­ūīIÉÛ -‚ūI:­„ÜÛf1’ĪG3Üāâö<#‚īGŽ­‚åGæ­’Îä@ÜãĄ"‚î䎂ääGŽ‹ã…b‘­P@ÜヂÎPŽ‚ÁPĨŽ„[ÜR$†ãfÜ æ"‚ãČŽ‡*ifÜ U‚9iČŽ„nÜqG†ã¨Ū+#‚㯇*i¨ŪU‚9i¯„´ŪqGˆ@܄dÜįō’‹ ŒÜ8ã÷ $‚Ģ $¯‚Ą €¯†ã¯ÜĒ#‚ã´¯‡*i¯ÜU‚9i´¯„ˇÜqG†ã“Ūī#‚ã*i“ŪU‚9iĄŪqGˆ™Ü„¤ÜA„­Üįō’pXˇÜXã÷5%‚X°‚†X;°’båÂÜxãš$‚‚åY°‚xå‘°‹xã…b‘­PÂܐヂÎPY°‚ÁPī°„ÚÜR$’ãåܰãß$‚ãą‘*iåÜČãU‚9ią„íÜqG†ãōŪ$%øãuLŸ‡*iōŪUø9iuLŸ„ßqGˆÂ܄ãÜįō’zûŨāãų`&‚šûLą‚û„ą’âčŨäÅ%‚é­ą‚øčåą‹ä…b‘­PŨ 䃂ÎP­ą‚ÁPC˛„-ŨR$’ã8Ũ@ä &‚ãf˛‘*i8ŨXäU‚9if˛„@ŨqG†ãáŪO&‚ã ˛‡*iáŪU‚9i ˛„íŪqGˆŨ„6Ũįō’ĪGLŨpäų‹'‚īGĩ˛‚åGí˛’ÎäYŨäđ&‚îäŗ‚ääNŗ‹ä…b‘­P_Ũ¨äƒ‚ÎPŗ‚ÁPŦŗ„mŨR$†ãxŨ 5'‚ãĖŗ‡*ixŨ U‚9iĖŗ„€ŨqG†ãÎŪz'‚ã´‡*iÎŪU‚9i´„ÚŪqGˆYŨ„vŨįō’‹ šŨĀäúY(‚Ģ ´‚Ą G´†ãŊŨų'‚ã{´‡*iŊŨU‚9i{´„ÅŨqG†ãšŪ>(‚㨴‡*išŪU‚9i¨´„ĮŪqGˆ§Ũ„˛ŨA„ģŨįō’ĪGÅŨāäú„)‚īGŊ´‚åGå´’ÎäĐŨøäé(‚îäĩ‚ää+ĩ‹øä…b‘­PĐŨ僂ÎPĩ‚ÁPbĩ„čŨR$†ãķŨ .)‚ã…ĩ‡*iķŨ U‚9i…ĩ„ûŨqG†ãiŪs)‚ãŖĩ‡*iiŪU‚9iŖĩ„wŪqGˆĐŨ„ņŨįō’)ãŪ0åör*‚;ã¸ĩŠĸ…ŪPå‚ą…ÚĩŠōŪpå‚ ōüĩ‚ōÚĩ’W…(ېåŽ[*‚f…ļ†ģI(Ū #"*‚ĘIļŠKL-Ū¨å #‚dL:ļ‚ZLXļ“gŪ+8”Rv„Ūŝ„>Ū”{ †)ãzŪö¸*‚;ãvļūĸ…zŪ‚ą…‹ļ„‡Ūō„Ü&V„'Ü.‚㚸‡*i”âU‚9iš¸„žâqGˆā„9āįō’3øgāPæ÷/˙Sø‚Iøθ†ã‹āš.‚㚇*i‹āU‚9iš„“āqG†ãāâū.øãuHŸ‡*iāâUø9iuHŸ„îâqGˆuā„€āz„‰āįō’pX“āhæ÷D0‚XIš‚†X‘š’båžāˆæŠ/‚‚寚‚xå÷š‹ˆæ…b‘­Pžā æƒ‚ÎP¯š‚ÁPbē„ļāR$’ãÁāĀæî/‚ã’ē‘*iÁ⨿U‚9i’ē„ÉāqG†ãÍâ30‚ãŲē‡*iÍâU‚9iŲē„ÛâqGˆžā„ŋāįō’zûäāđæųo1‚šûî炐û6ģ’âčņāįÔ0‚é_삸č§ģ‹į…b‘­Pņā0įƒ‚ÎP_ģ‚ÁPŧ„ áR$’ãáPį1‚ãBŧ‘*iáhįU‚9iBŧ„áqG†ãŧâ^1‚ã‰ŧ‡*iŧâU‚9i‰ŧ„ČâqGˆņā„áįō’ĪG(á€įųš2‚īGžŧ‚åGæŧ’Îä5á į˙1‚îäŊ‚ääWŊ‹ į…b‘­P;á¸įƒ‚ÎPŊ‚ÁPĩŊ„IáR$†ãTá D2‚ãÕŊ‡*iTá U‚9iÕŊ„\áqG†ãŠâ‰2‚㞇*iŠâU‚9iž„ĩâqGˆ5á„Ráįō’3ø{áĐįúd3˙Sø‚Iø$ž†ãĄá3‚ãXž‡*iĄáU‚9iXž„ŠáqG†ãâI3‚ã…ž‡*iâU‚9i…ž„âqGˆ‹á„–áz„Ÿáįō’ĪGŠáčįú4‚īGšž‚åGž’Îä´áčô3‚îäāž‚ääŋ‹č…b‘­P´áčƒ‚ÎPāž‚ÁP?ŋ„ĖáR$†ã×á 94‚ãoŋ‡*i×á U‚9ioŋ„ßáqG†ãYâ~4‚ãŋ‡*iYâU‚9iŋ„gâqGˆ´á„Õáįō’)ãęá8čö}5‚;ãĸŋŠĸ…ęáX肹…ÄŋŠōęáxč‚ ōæŋ‚ōÄŋ’W… â˜čŽf5‚f…†ģI â #-5‚ĘIĀŠKLâ°č #‚dL$Ā‚ZLBĀ“Wâ+8”Rv„ūáŝ„"â”{ †)ãjâöÃ5‚;ã`Āūĸ…j₹…uĀ„wâō„ęß&V„ųß)Gl9üˆ—œc;SKûž“÷Ŗ‘ĄPĸGŊ‚‘ĸ__xGSK‘—øéa@ĨXĨQũ‘X’ †& ęLļ<‚´†pˆœÃ‚†ãÑd†& ęMŊ‚s†p‰†œÃ‚}†ãÑ::*8ę ‚‚V: Ä‚L:SĆW…Χ<‚f…|ĆģI #n<‚ĘI|ÄūKL! #‚dLÄ‚ZLŧÄ“1+8”Ru`ˆ7ˆF’::UPęQd=‚V:ĪÄ‚L:ņW…Í#ĪW=‚f…XņģIÍ #=‚ĘIXÅūKLĶ #‚dLmÅ‚ZLšÅ“ã+8”Ru_ˆkˆz†Ú†@SĖ>‚NÚ­Å‚AÚØÅ˙4Úū‚ģ†@‚‚Ãģ­Å‚ļģØÅ˙Šģūģ†@_‚Bģ­Å‚5ģØÅ˙(쀆@QģÆūa:†@V‚˜:­Å‚‹:HÆ˙~:€†@§:šÆū¸ēĸ‚ÔēÎÆ‚ĘēđƆĀSĸĪ•>‚ŲSĮ‚ĪS!Į„¯ūūĀS´ Ī‚ŲS4Į‚ĪSIĮ„žū’¸ēÆxęWN?‚Ôē^Į˙Ęē’ĀSƐęĪ!?‚ŲS^Į˙ĪS„ÔūŠĀSŲ¨ęĪ‚ŲS€Į˙ĪS„åū’L`åČęWZ@‚^`ĸĮ’W…åčęĪå?‚f…ÄĮ’ģIåë #Ŧ?‚ĘIÄĮŠKLč ë #‚dLæĮ‚ZLČ“+8”Ru_ŠW…ø@ëĪ‚f…&ȆģIø # @‚ĘI&ČŠKLūXë #‚dLHČ‚ZLjČ“+8”Ru_ˆÅ—pë>KîŖB^H‰™=`H‰ˆČ™œVa‚ŊČ™×nb‚éČ’ļ:ë_4A‚Ü:°É‚Ī:čÉ‚Å:Ę‹ëë:@ʆXc A˙gc˙gcūē(“‚%ēuĘ˙璐0¸ë`ZA˙:‚-­Ę’šŧDāëaáA‚ŠŧõĘ˙ŗŧ‹āë‡qŧDĒ‚|ŧ!Ë˙ˆŧ‡FŧDMļ‚Uŧ!Ë‚kŧ5Ë‚_ŧIË„M%| ’ †SøëiíB‚´†]Ë‚ˆqË‚†´Ë‘d†SøëMŊ‚s†]Ë‚‰†qË‚}†´Ë‘::[ė ‚‚V:LĖ‚L:Ė†W…ŒĪŪB‚f…ΈģIŒ #ĨB‚ĘIÎĖūKL” #‚dLâĖ‚ZLÍ“¤+8”Ru`ˆeˆt’ˇŲz(ėr,E˙Ú‚÷Ų"Í˙ęŲ‚ŨŲ•ÍŠ_Ųz(ė).˙ŦŲ‚ŸŲ"Í˙’Ų‚…Ų•ÍŠŲz(ė)‚CŲ"Í˙7Ų‚+Ų•Í‹(ėQŲ¨Í‘ú:z(ė)~‚/;"Í˙#;‚;΋(ė=;9Î‰ĶØˆPė)K–D‚üØd΂đؚΑ::ŒhėS‚V:ēÎ˙L:†W…ĘĪˆD‚f…ãΆģIĘ #OD‚ĘIãÎūKLĪ #‚dLö΂ZL#Ī“ß+8”Ru`ˆ–ˆĨž#Ŗę)PE˙CŖ‚7Ŗ6Ī€ę‡öĸę~˙Ŗ‚ ŖVĪ‘Õĸö€ėg‚éĸ¤Īˆ„ę–‚ „Ē‚ „‰°‚ ’ˇŲĘėyoG˙Ú‚÷ŲĐĪ‚ęŲĐ˙ŨŲŠ_ŲĘė).˙ŦŲ‚ŸŲĐĪ‚’ŲĐ˙…ŲŠŲĘė)‚CŲĐĪ‚7ŲĐ˙+Ų‹˜ėQŲVĐ‘ú:Ęė)~‚/;ĐĪ‚#;Đ˙;‹˜ė=;šĐ‰ĶØĐĀė)KŅF˙üØ‚đØæĐ‘::ÔØėS˙V:‚L:҆W…9ĪÃF‚f…E҆ģI9 #ŠF‚ĘIEŅūKL> #‚dLXŅ‚ZL…Ņ“N+8”Ru`ˆŪˆíž#ŖY)PKG‚CŖ˜Ņ‚7ŖļŅ€Y‡öĸY~‚Ŗ˜Ņ‚ ŖâŅ‘Õĸeđėg‚éĸ;Ōˆq„Y–‚ „}Ē‚ „O°‚ ’RŖíˆI˙‡Ŗ‚{ŖgŌ‚oŖ‡Ō‘#Ŗí—˙CŖ˙7Ŗ‹í‘öĸí~˙Ŗ‚ ŖšŌ‘Õĸ íg‚éĸÃŌ‘L` í]‚^`ÃŌ’W…HíĪH‚f…Ķ’KL`í #pH‚dLOĶ‚ZL~Ķ“K+8”RuLūģI9 #‚ĘIĶŠW…(xíĪ‚f…‘͆ģI( #ČH‚ĘI‘ĶŠKL-í #‚dLÉĶ‚ZLëĶ“v+8”RuL†UĸƒŠ—I˙dĸ˙zĸ‚nĸ Ô€ƒ‡ ĸŠ ˛˙+ĸ˙Cĸ‚7ĸÔ‡õĄŠ Mš˙ĸ˙ĸ‚ĸÔ„“”{ ’Uĸˇ¨í…"J˙dĸ˙zĸ‚nĸ1Ô‹¨í‡ ĸˇ˛˙+ĸ˙Cĸ‚7ĸEÔ‡õĄˇMš˙ĸ˙ĸ‚ĸEԄ”{ †‘!oJ˙‘‚*‘YÔ‡í!MĀ˙ü‚‘YÔˆ,†RŖb"„K˙‡Ŗ˙{Ŗ˙oŖ‡#Ŗb"—˙CŖ˙7Ŗ€b"‡öĸb"~˙Ŗ‚ ŖmÔ‘ÕĸlĀíg‚éĸ°Ôˆx„­–‚ „ĘĒ‚ „–‚ „E°‚ „X–‚ „’–‚ „ÍŠ{ „ėŠ{ ~9ßh­gK}Kāž“ ëëp‹א÷XK`kœ™K8LøgK‘øqK‘’W…5ØíŽ#L‚f…ÜÔ†ģI5 #ęK‚ĘIÜÔŠKL;đí #‚dLúÔ‚ZL4Õ“i+8”R‘_„(ŝ„L”{ 䑁JLŖLāž“C:ŪņgŖLŪ Á‚¨LŪē[ƒ´'ŪöG„´'Ū+x…Ī­Ūöļ†:ô1ô1÷8LFÃ`ãjœÉLņNøJL‘øTL‘øaL‘ønL‘ ø{L‘øˆL‘ø•L‘’ûęģãî2M‚ëRÕ‚ ërÕ’ûęįã î\M‚ë”Õ‚ ëŗÕ†%ë<ä †M‚4ëÕÕ„FäXK’%ëIä8M‚4ëÖ„VäXK†W…Yä(N‚f…/Ö’ģIYäPî #īM‚ĘI/ÖŠKL\ähî #‚dLDÖ‚ZLqÖ“tä+8”Rug†W…t䐠N‚f…„Ö†ģItä #gN‚ĘI„ÖūKLyä #‚dL—Ö‚ZLÄÖ“†ä+8”Rugˆƒãˆ‘ã„Ļã%| ˆģã„Ōã%| ˆäãˆä„äŠ{ „›ä”{ „Áä”{ ßŨO?Oāž“AAŪ ÁV ´'Ūē[V ´'Ū…WW øŪöXX ÷ņNĻFĐäHœ[O×RøO‘ø O‘øO‘ø$O‘ ø1O‘’ûę*å€î^ ˛O‚ë×Ö‚ ë÷Ö†Ië9å^ P‚Xë×ūoŠ9å‚~Š×‡PŠ9å}‚_Š×’cëNå î^ `P‚rë;׊ŲĒNå î‚čĒ;בēĒNå î}‚ÉĒ;׆}ë¤å^ 2Q‚Œë]×ūĖĢ¤åŠ‚ÛĢ]ׇX̧å ˙gĢ‚}ĢrׂqĢŽ×€§å‡#ĢĢå ˛˙.Ģ‚FĢĄ×‚:ĢŊׇøĒĢå Mš˙Ģ‚ĢĄ×‚ĢŊׄ´å”{ †Ąëˇå^ R‚°ëĐ×ūbĒˇåŠ‚qĒĐׇîŠēå ˙ũŠ‚ĒåׂǨ€ēå‡šŠžå ˛˙ÄŠ‚ÜŠØ‚ĐŠ0Ø‡ŽŠžå Mš˙Š‚ŗŠØ‚§Š0Ø„Įå”{ ’%ëĘå¸î^ .R‚4ëCØ„×åXK†W…Úå ^ ĻR‚f…p؆ģIÚå #mR‚ĘIpØūKLāå #‚dL…Ø‚ZLšØ“īå+8”Rwˆå„å%| ˆ*切å„úåŠ{ „æ”{ 䜓éRūRāž“C:āHÄ%…×Rˇ7 柜SWøéR‘’%ëVæĐî“õS‚4ë­ØŠXKVæĐî‚qK騂gK­Ø’W…âæøîŽßS‚f… Ų’ģIâæī #ĻS‚ĘI ŲŠKLåæ(ī #‚dLLŲ‚ZLnŲ“Hį+8”Rug„jæÅ„į”{ ’%ëwæHī“ĮT‚4ëŦŲŠXKwæHī‚qKčŲ‚gKŦŲ’W…™æ`īŽąT‚f…Ú†ģI™æ #xT‚ĘIÚŠKLĄæxī #‚dLWÚ‚ZLyÚ“8į+8”Rug„ˆæÅ„´æ”{ ’W…ˇæī“?U‚f…ˇÚ†ģIˇæ #U‚ĘIˇÚŠKLŊæ¨ī #‚dLæÚ‚ZL/Û“(į+8”Rug’W…ÁæĀU‚f…MÛ†ģIÁæ #~U‚ĘIMÛŠKLÆæØī #‚dLkÛ‚ZL§Û“į+8”Rug’%ëLįđī“áU‚4ëÅÛ„YįXK†W…eį“YV‚f…ōÛ†ģIeį # V‚ĘIōÛūKLkį #‚dLÜ‚ZL4Ü“wį+8”Rug†W…wį“ŅV‚f…G܆ģIwį #˜V‚ĘIGÜūKL|į #‚dLZÜ‚ZL‡Ü“ˆį+8”Rug†%ë§į“ûV‚4ëšÜ„ąįXKˆVæ„“įŠ{ ˆĄįáŸô0WIT ëxS%:ß?WTWāž“AAāHÄ%÷0WpUĀį“œpW>]ø?W‘†¤čį*d ķW˙>¤‚3¤ĮÜūüyčį*(˙3z˙&z‚zÜÜūWōį Ŧ‚$W'Ũˆ˙į„č”{ ’}ë!čđb ÅX‚ŒëEŨŠĖĢ!čđŠ‚ÛĢEŨ‡XĢ*č ˙gĢ‚}ĢjŨ‚qĢŒŨ€*č‡#Ģ.č ˛˙.Ģ‚FĢŸŨ‚:ĢÁŨ‡øĒ.č Mš˙Ģ‚ĢŸŨ‚ĢÁŨ„7č”{ †Ąë:čb —Y‚°ëÔŨūbĒ:节qĒÔŨ‡îŠ@č ˙ũŠ‚ĒėŨ‚ĒŪ€@臚ŠDč ˛˙ÄŠ‚ÜŠ!Ū‚ĐŠCŪ‡ŽŠDč Mš˙Š‚ŗŠ!Ū‚§ŠCŪ„Mč”{ ’%ëPč đb iZ‚4ëVŪŠXKPč đ‚qKžŪ‚gKVŪ’W…uč@đŽSZ‚f…žŪ’ģIučXđ #Z‚ĘIžŪŠKLwčpđ #‚dLÜŪ‚ZLūŪ“Ķč+8”Rug„dčŝ„č”{ ’W…čđb áZ‚f…ß’ģIč°đ #¨Z‚ĘIߊKL™čĐđ #‚dL^ß‚ZL€ß“Ĩč+8”Rug†}ëéčb ŗ[‚ŒëžßūĖĢé节ÛĢžß‡XĢīč ˙gĢ‚}Ģļß‚q̨߀īč‡#Ģķč ˛˙.Ģ‚FĢëß‚:Ģ ā‡øĒķč Mš˙Ģ‚Ģëß‚Ģ ā„üč”{ †Ąë˙čb …\‚°ë āūbĒ˙节qĒ ā‡îŠé ˙ũŠ‚Ē8ā‚ĒZā€é‡šŠ é ˛˙ÄŠ‚ÜŠmā‚ĐŠā‡ŽŠ é Mš˙Š‚ŗŠmā‚§Šā„é”{ ’%ëéčđb ¯\‚4ëĸā„&éXK†W…)é*b ']‚f…Ōā†ģI)é #î\‚ĘIŌāūKL2é! #‚dLęā‚ZLá“Bé+8”Rugˆ!čˆæč„KéŠ{ ÷0WĐû`é(œZ]t]ø?W‘ˆzé„‚é”{ á$úĀ]I_Tp%:Ūw…9=:Ū¸†9=:ŪC97:âîö.@_ ßĖ’Ī]^āž“žcë__nŽë__sŽ´'âîŖB“`“ü§’’œ^āeûž“d‘–PĸGՌ*áĸ__xGāe‘—ņĩ_™XĨQ%:_á†}z& LČ^‚‘z}ႊz¨á‚zŊá‡Az& MŊ‚Pz}á‚fz¨á‚ZzŊáŠŦ=ņS‚ãĐá‚Öâ‚ÉAâŠŧŊ=ņ‚‚ũŊĐá‚đŊâ‚ãŊAâŠ;Ŋ=ņ_‚|ŊĐá‚oŊâ‚bŊAâ‹ņ‹Ŋ_âŠt]=ņV‚ĸ]Đá‚•]₈]Aâ‹ņą]â„eŒ} €p"îŖB^`“™=``“Ĩ♜VaĨŒęâ™×nbĨŒã’Ā]p0ņ_‰`øæ]ō{‚ Ų]øĪ]V‹0ņõ]|ã’ŖcpHņb`˙˛c˙˛cŠēw`ņ“ø%ēō!`˙ē’+Œxņ`¯`˙U‚Hĩã’Ôžĸ˜ņa2a‚ãžŨã˙íž‹˜ņ‡ĢžĸĒ‚ļžä˙ž‡€žĸMļ‚žä‚Ĩžä˙™ž„Ž%| †}zģi•a‚‘z-䂊zK䂝z^ä‡AzģMŊ‚Pz-ä‚fzKä‚Zz^ä’LŰņrhc‚™ä‚ŒŸä‚Éä‚rįäŠôŰņ).‚Aä‚4Ÿä‚'Éä‚įäŠŖŰņ)‚ØŸä‚ĖÉä‚Āįä‹°ņæå‘aŰņ)~‚–Ÿä‚ŠÉä‚~įä‘Űņ)]‚SŸä‚FÉä‚9įäŠÍŰņŌ‚Ÿä‚Éä‚ôįäŠnŰņ˛‚¯Ÿä‚ĸÉä‚•įä‹°ņžåŠ"ŰņŒ‚PŸä‚CÉä‚6įä‹°ņ_%å„_Œ} ’LÖČņy;e‚™[傌y傪å‚rÃåŠôÖČņ).‚A[å‚4yå‚'Ŗå‚ÃåŠŖÖČņ)‚Øyå‚ĖŖå‚ĀÃå‹Čņæáå‘aÖČņ)~‚–y傊Ŗå‚~Ãå‘ÖČņ)]‚Syå‚FŖå‚9ÃåŠÍÖČņŌ‚y傪å‚ôÃåŠnÖČņ˛‚¯yå‚ĸŖå‚•Ãå‹ČņžáåŠ"ÖČņŒ‚Pyå‚CŖå‚6Ãå‹Čņ_æ„;Œ} ūîŠéŠ‚ũŠ7æ‚ĒJæ‚Ēeæ€é‡šŠí ˛‚ÄŠxæ‚ÜŠ‹æ‚ĐŠĻæ‡ŽŠí Mš‚Šxæ‚ŗŠ‹æ‚§ŠĻæ„ö”{ N:áMú1fI_Tp %Ūw…9Ž'Ū¸†9Ž'ŪC9Æ:âîö.@_ ßߜ@fufāž“7dë__nŽ—ë__sŽ´'âîŖB“süēœzœfQnûž“cd‘–PĸG薹æĸ__xGQn‘—čņ&h™XĨQ %îæ†L{" L9g‚`{ į‚x{7į‚l{lį‡{" MŊ‚{ į‚5{7į‚){lįŠ:ōS‚Hį‚;Îį‚.čŠŸŋ:ō‚‚āŋį‚ĶŋÎႯŋčŠŋ:ō_‚_ŋį‚RŋÎį‚Eŋč‹ōnŋ9čŠåe:ōV‚fį‚fÎį‚ųeč‹ō"fYč„]Œ} €jîŖB^s™=`sč™œVa¸–Äč™×nb¸–îč’1fjō_úhøWfō{‚ Jfø@fV‹ōffVé†djĶh˙,d˙,dūēo“ø%ēō’h˙璐‚0ō` i˙ē‚­•钎’XōaŖi‚ÆĀŊé˙ĐĀ‹Xō‡ŽĀ’Ē‚™Āæé˙Ĩ‡cĀ’Mļ‚rĀæé‚ˆĀųé˙|Ā„ž%| †L{ą ij‚`{ ę‚x{+ę‚l{Kę‡{ą MŊ‚{ ę‚5{+ę‚){Kę’ąŊxōrŲk‚ūyę‚ņ—ę‚äÁę‚×ßęŠYŊxō).‚Ļyę‚™—ę‚ŒÁę‚ßęŠŊxō)‚=—ę‚1Áę‚%ßę‹xōK ë‘ÆŊxō)~‚û—ę‚īÁę‚ãßꑁŊxō)]‚¸—ę‚ĢÁꂞßęŠ2ŊxōŌ‚s—ę‚fÁę‚YßęŠĶŊxō˛‚—ę‚Áę‚úßę‹xō# 늇ŊxōŒ‚ĩ—ꂨÁę‚›ßę‹xōÄ+ë„BŒ} ’ąƐōyŦm‚ūaë‚ņë‚äŠë‚×ÔëŠYƐō).‚Ļa낙낌Šë‚ÔëŠƐō)‚=ë‚1Šë‚%Ô닐ōKōë‘ÆƐō)~‚ûë‚īŠë‚ãÔ둁Ɛō)]‚¸ë‚ĢŠë‚žÔëŠ2ƐōŌ‚së‚fŠë‚YÔëŠĶƐō˛‚낊ë‚úÔ닐ō#ō늇ƐōŒ‚ĩ남Šë‚›Ô닐ōÄė„#Œ} ūXĢŨŠ‚gĢHė‚}Ģ[ė‚qĢvė€Ũ‡#Ģá ˛‚.̉ė‚FĢœė‚:̎뇸Ēá Mš‚̉ė‚Ģœė‚̎ė„ę”{ Ō:ß‘en}nāž“dë__x‘}nŽ:ß2›‘nŠnāž“cdë__x‘Šn2;ü}!é‡œÆn9pûž“AA‘–|w %:Ęė’Vn¤é¸ōx {o‚oní‚en/í†}zŦé •po‚‘zq킊z†í‚z›í‡AzŦé MŊ‚Pzqí‚fz†í‚Zz›í„úé^†dÂéy Ĩo‚,dŽí‚,dŽíŠ‚nĘéØōy ‚›nđí‚‘n*î†L{Ķé•-p‚`{lî‚x{î‚l{–î‡{ĶéMŊ‚{lî‚5{î‚){–î„ęufávú…pI_TpP;Ūw…9ôBŪ¸†9ôBŪC9îBâîö.@_ ßäČ”pÉpāž“‚dë__nŽÃë__sŽ´'âîŖB“xÉüŋȒœápĨxûž“Žd‘–PĸGíÂĩîĸ__xGĨx‘—ķzr™XĨQP;ę|& Lq‚”|ī‚Ŧ|3ī‚ |Hī‡D|& MŊ‚S|ī‚i|3ī‚]|HīŠöü=ķS‚-ũ[ī‚ ũŒī‚ũĖīŠ‚Á=ķ‚‚ÃÁ[ī‚ļÁŒī‚ŠÁĖīŠÁ=ķ_‚BÁ[ī‚5ÁŒī‚(ÁĖī‹ķQÁęīŠ9p=ķV‚gp[ī‚ZpŒī‚MpĖī‹ķvp đ„eŒ} €p"îŖB^xə=`xÉ0đ™œVaŊÂuđ™×nbŊŸđ’…pp0ķ_NsøĢpō{‚ žpø”pV‹0ķēpņ’hdpHķ's˙wd˙wdŠēw`퓸%ēōær˙ē’UũŒxķ`ts˙ũ‚rũ@ņ’šÂĸ˜ķa÷s‚ŠÂhņ˙ŗÂ‹˜ķ‡qÂĸĒ‚|‘ņ˙ˆÂ‡FÂĸMļ‚U‘ņ‚k¤ņ˙_„Ž%| †€|ģiZt‚”|¸ņ‚Ŧ|Öņ‚ |éņ‡D|ģMŊ‚S|¸ņ‚i|Öņ‚]|éņ’–üŰķr-v‚ãü ō‚Öü*ō‚ÉüTō‚ŧürōŠ>üŰķ).‚‹ü ō‚~ü*ō‚qüTō‚dürōŠíûŰķ)‚"ü*ō‚üTō‚ ürō‹°ķ0üō‘ĢûŰķ)~‚āû*ō‚ÔûTō‚Čûrō‘fûŰķ)]‚û*ō‚ûTō‚ƒûrōŠûŰķŌ‚Xû*ō‚KûTō‚>ûrōŠHÃŰ힂‰Ã*ō‚|ÃTō‚oÃrō‹°ķ˜ÃōŠÚÂŰķŒ‚Ã*ō‚ûÂTō‚îÂrō‹°ķÃ°ō„_Œ} ’–üÖČķyx‚ãüæō‚Öüķ‚Éü.ķ‚ŧüNķŠ>üÖČķ).‚‹üæō‚~üķ‚qü.ķ‚düNķŠíûÖČķ)‚"üķ‚ü.ķ‚ üNķ‹Čķ0ülķ‘ĢûÖČķ)~‚āûķ‚Ôû.ķ‚ČûNķ‘fûÖČķ)]‚û킐û.ķ‚ƒûNķŠûÖČķŌ‚Xûķ‚Kû.ķ‚>ûNķŠHÃÖČ힂‰Ãķ‚|Ã.ķ‚oÃNķ‹Čķ˜ÃlķŠÚÂÖČķŒ‚Ãķ‚ûÂ.ķ‚îÂNķ‹ČķÃŒķ„;Œ} ū&­éŠ‚5­Âķ‚K­Õķ‚?­đķ€é‡ņŦí ˛‚üŦô‚­ô‚­1ô‡ÆŦí Mš‚ÕŦô‚ëŦô‚ßŦ1ô„ö”{ Cß7ĮšxŅxāž“Ždë__x‘ŅxeCü˙Ž ęOœîx yûž“>[‘–‰G{ P;DôŠĒx3ęčķ| ‚Ãx|ô‚šxŠô†€|;ę •”y‚”|ëô‚Ŧ|õ‚ |õ‡D|;ę MŊ‚S|ëô‚i|õ‚]|õ„jęÉpĻkķ pę#œģyãyûž“­‹‘Ą‰Gķ P;‘„ŽęÖxē   ęRœūy0zûž“­‹‘Ą‰G P;‘„ĮęŌ„ëę yē*ëRœKz}zûž“­‹‘Ą‰GP;‘„'ëŌ„Kë yßâĘŒzązāž“\‡Ū„ÍrązŪ€Wrļz–;–;ßčÉĘzīzāž“t Ū„ÍDīzŪ€WDôz–;–;ßšĖ{{āž“\‡üØž`ëĢœ+{(‚ûž“ļH‘—ô‚Ĩö^ü(‚Ÿ†6TtëũÖ{øETŸūÕItë 6øäIŸūģItë ÕøĘIŸūĄItë -ø°IŸ‹(ô˜posūĘ5(õ’AAĢë@ô'|‚gAŽõ‚ZAŪõ‚PAūõˆžë’AAžëXôŋ|‚gA&ö‚ZAHö‚PAfö’ĨNžëpô ŗ¸|‚ËNŽö‚žNHö‚´Nfö’ÕIžëˆô C­|‚äIfö„í<$ˆŪë’}zõë ôß‚Ŗzļö‚–z_÷‚ŒzŊ÷’ģzėĀôs,~‚ázfø‚Ôzöø‚Ęz;ų†W…“íE}‚f…pų†ģI“í #d}‚ĘIpųūKL™í #‚dL…ų‚ZL˛ų“¨í+8”Rud†W…˛íE~‚f…Åų’ģI˛íāô #Ü}‚ĘIÅųŠKLĩíøô #‚dLÚų‚ZLú“Ęí+8”Rudˆ.ėˆ<ė„DėîĢ’ųzDėõsv‚{ú’5‡^ė8õ´~‚N‡Rú‚D‡ˆú„lėčČ’W…lėXõ´÷~‚f…ŋú’ģIlėxõ #ž~‚ĘIŋúŠKLoėõ #‚dLŨú‚ZL˙ú“øė+8”RuZ†W…Ņí´o‚f…û’ģIŅí°õ #6‚ĘIûŠKLÔíČõ #‚dL2û‚ZL_û“éí+8”RuZˆ^놔ėJės ‚­ėrû‚Ŗė‘û’slėíāõsĘ‚‚lķû„ųícÄ„ ė%| „í”{ ’‘[ƒėøõ˙‚ [#ü’W…—ėöw€‚f…Cü’ģI—ė0ö #>€‚ĘICüŠKL ėHö #‚dLeü‚ZL‡ü“í+8”Rv†W…¤ėf…Ĩü†ģI¤ė #ĘIĨüūKLĒė #‚dLēü‚ZLĪü“šė+8”Rv†W…&í#g‚f…âü†ģI&í #.‚ĘIâüūKL,í #‚dL÷ü‚ZL$ũ“8í+8”RuZ†W…Wí߁‚f…7ũ†ģIWí #ρ‚ĘI7ũūKL]í #‚dLLũ‚ZLyũ“ií+8”RuZ„ëÍ„đë%| „—ė y„ŅėÕ{ „ßėw} „Tí”{ „AíŠ{ ô1áŸúy‚I_Tp @Ūw…9Ļ@Ū¸†9Ļ@ŪC9š@âîö.@_ ßħˆ‚Ŋ‚āž“Vë__nŽũĄë__sŽ´'âîŖB“X¨üŸ§’œÕ‚™Šûž“Ë}‘–PĸGÍĄŒũĸ__xG™Š‘—`ön„™XĨQ @Áũ†}& Lƒ‚2}ßũ‚J} ū‚>}ū‡â|& MŊ‚ņ|ßũ‚} ū‚û|ūŠv=xöS‚­2ū‚ cū‚“ŖūŠĘÅ=xö‚‚ Æ2ū‚ūÅcū‚ņÅŖūŠIÅ=xö_‚ŠÅ2ū‚}Åcū‚pÅŖū‹xö™ÅÁūŠ-‚=xöV‚[‚2ū‚N‚cū‚A‚Ŗū‹xöj‚áū„eŒ} €p"îŖB^X¨™=`X¨˙™œVaĄL˙™×nbĄv˙’y‚pö_B…øŸ‚ō{‚ ’‚øˆ‚V‹öŽ‚Ū˙’Ļ•p¨ö…˙ĩ•˙ĩ•ŠēwĀö“ø%ēōڄ˙ē’ģŒØö`h…˙储’âÆĸøöaë…‚ņÆ?˙ûÆ‹øö‡šÆĸǂįh˙ĐÆ‡ŽÆĸMļ‚Æh‚ŗÆ{˙§Æ„Ž%| †}ģiN†‚2}‚J}­‚>}‡â|ģMŊ‚ņ|‚}­‚û|Ā’Å÷r!ˆ‚cã‚V‚I+‚<IŠžÅ÷).‚ ã‚ū‚ņ+‚äIŠmÅ÷)‚ĸ‚–+‚ŠI‹÷°g‘+Å÷)~‚`‚T+‚HI‘æÅ÷)]‚‚+‚IŠ—Å÷Ō‚Ø‚Ë+‚žIŠ8Å÷˛‚y‚l+‚_I‹÷ˆgŠėÅ÷Œ‚‚ +‚I‹÷)‡„_Œ} ’Ö(÷yô‰‚cŊ‚VÛ‚I‚<%ŠžÖ(÷).‚ Ŋ‚ūÛ‚ņ‚ä%ŠmÖ(÷)‚ĸÛ‚–‚Š%‹(÷°C‘+Ö(÷)~‚`Û‚T‚H%‘æÖ(÷)]‚Û‚‚%Š—Ö(÷Ō‚ØÛ‚Ë‚ž%Š8Ö(÷˛‚yÛ‚l‚_%‹(÷ˆCŠėÖ(÷Œ‚Û‚ ‚%‹(÷)c„;Œ} ūŎ銂Ԏ™‚ęŽŦ‚ŪŽĮ€é‡Ží ˛‚›ŽÚ‚ŗŽí‚§Ž‡eŽí Mš‚tŽÚ‚ŠŽí‚~Ž„ö”{ ˇ@ßĻ­ŠŊāž“Ë}ë__x‘ŊAü(î[œâŠ´‹ûž“.H‘Ģenv´ @’žŠ.îH÷š—‹‚ˇŠS‚­Š†}6î •Œ‹‚2}Ī‚J}å‚>}ú‡â|6î MŊ‚ņ|Ī‚}å‚û|ú„bîŊ‚ūũSîš‚  ßÄËŲ‹āž“Kíëp‹ÜA…´‹ŸkCœõ‹ŒøË‘ø͋‘„$ŝášô0ŒITJëxS5AáĶôNŒITPëxS @ߌ¸]ŒrŒāž“ļHāHÄ%…NŒ•†pîÕœŽŒ}™ø]Œ‘†gtĄîXÃ-˙t‚„tHū"tĄîX(˙Yt˙Lt‚?tnŠŒ°îh÷ Ŧ‚$ŒČū0W°îT‚?W戚î„Áî”{ †ėėųîGÆŊ˙í‚ íųūn˜ųîG(˙Ĩ˜˙˜˜‚‹˜Š0Œī€÷ Ŧ‚BŒ^ūtKīT‚ƒK|„ ī”{ ’'íjī˜÷Á Ž‚6폊´‹jī˜÷‚͋ļ‚ˏ„„īŝ’Pí¤ī°÷Áš‚_íâŠ<õ¤ī°÷‚Uõ.‚Kõâ’aõņđĐ÷Ž„‚põNžˆøđ õ™Ž‚ˆl„ņU€ ‰W…ņč÷ķ‚f…’ģIņø #׎‚ĘIŠKLņø #‚dL‚ZLŋ“¯ņ+8”Rud‡W…ˇņķ‚f…Ũ’ģIˇņ8ø #J‚ĘIŨŠKLšņPø #‚dLđ‚ZL“Îņ+8”Rud„ģīŝ„ ņ”{ ’9JíīhøÁë‘‚HJ0—ˆør^JV’kíī ø0‚#k0ŠÄjíī ø$‚Ũj0‚Ķj…†gköī1U‚vkÍūÄjöī6‚Ũjķ˙ĶjūMkđ0‚\k†Ėž#đ/0‘˙۞ū¨ž#đŠ˙ˇž‡4ž#đ ˙Cž˙Yž‚Mž1€#đ‡˙'đ ˛˙ ž˙"ž‚žD‡ԝ'đ Mš˙ã˙ų‚íD„0đ”{ ūĖžčō-/˙۞ū¨žčō-Š˙ˇž‡4žîō' ˙Cž˙Yž‚MžW€îō'‡˙öō˛˙ ž˙"ž‚žj‡ԝöōMš˙ã˙ų‚íj„˙ō”{ †}ë3đÁŊ’‚Œë}ūĖĢ3đŠ‚ÛĢ}‡XĢ9đ ˙gĢ‚}Ģ•‚q̎€9đ‡#Ģ=đ ˛˙.Ģ‚FĢĘ‚:Ģ뇸Ē=đ Mš˙Ģ‚ĢĘ‚Ģė„Fđ”{ †yíIđÁ“‚ˆí˙ūÆąIđŠ‚Õą˙‡RąOđ ˙aą‚wą ‚ką9 €Ođ‡ąSđ ˛˙(ą‚@ąL ‚4ąn ‡ō°Sđ Mš˙ą‚ąL ‚ ąn „\đ”{ †í_đÁa”‚Ŧí ūC¯_đŠ‚R¯ ‡ÅŽeđ ˙ÔŽ‚ꎙ ‚ŪŽģ €eđ‡Žiđ ˛˙›Ž‚ŗŽÎ ‚§Žđ ‡eŽiđ Mš˙tŽ‚ŠŽÎ ‚~Žđ „rđ”{ ’´uđ¸øÁF•‚´ †ĶėƒđĘ ”‚Ūė —Øø;•'´. ’­PJņøøÎ䔂ÎPx ˙ÁP„aņR$’­PaņųΕ‚ÎP  ˙ÁP„xņR$„¤đˁ ˆJņ„†ņ=ˆņˆ"ķ„ƒđ⁠’ˆĀđ0ųÁŲ•‚͈¸ ‘W…Āđ0ų;‚f…¸ ’ģIĀđPų #Ÿ•‚ĘI¸ ŠKLĖđhų #‚dL ‚ZLI “Ÿņ+8”Rud†}ë ōÁĢ–‚Œëg ūĖĢ ōŠ‚ÛĢg ‡XĢō ˙gĢ‚}Ģ ‚qĢĄ €ō‡#Ģō ˛˙.Ģ‚FĢ´ ‚:ĢÖ ‡øĒō Mš˙̴̂ ‚ĢÖ „ō”{ †yí!ōÁ}—‚ˆíé ūÆą!ōŠ‚Õąé ‡Rą'ō ˙aą‚wą ‚ką# €'ō‡ą+ō ˛˙(ą‚@ą6 ‚4ąX ‡ō°+ō Mš˙ą‚ą6 ‚ ąX „4ō”{ †í7ōÁO˜‚Ŧík ūC¯7ōŠ‚R¯k ‡ÅŽ=ō ˙ÔŽ‚ęŽƒ ‚ŪŽĨ €=ō‡ŽAō ˛˙›Ž‚ŗŽ¸ ‚§ŽÚ ‡eŽAō Mš˙tŽ‚ŠŽ¸ ‚~ŽÚ „Jō”{ †ˆqō Á☂͈í ‡W…qō ;‚f…í †ģIqō #¨˜‚ĘIí ūKLzō #‚dL ‚ZL2 “†ō+8”Ruc’Pí”ō€ųÁ ™‚_íE „Ļō<õ’'íšō˜ųÁ6™‚6íw „Éō´‹ˆjīˆŨīˆíīˆĀđˆâņˆöņˆōˆ\ōˆnō„ōŠ{ ˆ=ķ÷NŒ´Pķ(œ™™ŗ™ø]Œ‘ˆjķ„rķ”{ ß)™יāž“.HāHÄ%…ŗ™ˇš€ķœķ™ūšø™‘†NŒŧķ†,š‚]ŒŠ ˆÅķ„Íķ”{ ’4ĨĐķ°ų…ãš‚CĨŧ ‹°ųYĨÜ ’­P ôĐųy‹š‚ÎP˙ÁP„"ôR$’­P"ôčųyģš‚ÎP-˙ÁP„4ôR$„Üķ ˆ ô„=ô=ˆFôˆsô„{ôŠ{ ˆ‰ô„‘ôŠ{ ÷ŗ™û ô(œ›4›ø™‘ˆēô„Âô”{ áĸÁ`›âņkeyä-âîŪĶį%áŨÆŒ›âņkeyä-âîŪĶį%ßp¸››ŗ›āž“ļHŪ…š3H÷Œ›ŸĘĐôˆœĪ›Ťø››‘øĨ›‘†¨ˆûôŊœ‚ˇˆEˆõ’cĀ2õúŊžœ‚rĀĄ‹0ú~Ā’­P÷Xúufœ‚ÎPT˙ÁP„2÷R$’­P2÷xúu–œ‚ÎP|˙ÁP„D÷R$„=õ$‚ ˆ÷„O÷=ˆX÷ˆ-ø’—ũKõúŊ˙°ũ‚Ļũ”Š4›KõČúÅ‹ČúŸA›‘P‹đúP›ö’­PÚ÷ûįC‚ÎP;˙ÁP„ō÷R$’­Pō÷8ûįs‚ÎPc˙ÁP„øR$„aõļ‚ ˆÚ÷„ø=ˆøˆų†ÃũuõŊô‚Ōũ{ūf°uõ‚u°{‡L°uõ}‚[°{’ŨũŠõPûŊKž‚ėũųŠͰŠõPû‚â°ų‘´°ŠõPû}‚ðų†cëĨõŊĸž‚rëwūŲĒĨõ‚čĒw‡ēĒĨõ}‚ÉĒw†÷ũÃõŊŸ‚ūõūēÃõ.‚ɝõū›Ãõ‚Ēõ‡|Ãõ}‚‹õ†ū,ö Ŋ?Ÿ‚*ūs‚ ūˇ†=ū^ö ŊiŸ‚Vū)‚Lūm’būtöhûē‰Ÿ‚sū߆~ūöŊŗŸ‚—ū˙‚ū’Ŗū‡ö€ûŊã ‚˛ū‘’`›‡ö°ûÏ ‹°ûŸm›‘X‹Đû|›’­Pv÷đûį6 ‚ÎPo˙ÁP„Ž÷R$’­PŽ÷üįf ‚ÎP—˙ÁP„ ÷R$„–öļ‚ ˆv÷„Ģ÷=ˆ´÷ˆųūšėĒöÄ‚Čė¯ū‚ĘĒö‚‘Ɲ‡hĘĒö}‚wƝ†ÂūŪö žĄ‚Ņū÷†ˆ0ø!Ŋ–Ą‚͈ ‡W…0ø!;‚f… †ģI0ø #\Ą‚ĘI ūKL6ø #‚dL‚ZLL“Fø+8”RuS†'íWø ŊĀĄ‚6í_„aø´‹’Pídø(üŊꥂ_펄tø<õ†}ëšøŊŧĸ‚ŒëŊūĖĢšøŠ‚ÛĢŊ‡XĢø ˙gĢ‚}ĢĶ‚qĢņ€ø‡#̤ø ˛˙.Ģ‚FĢ‚:Ģ"‡øĒ¤ø Mš˙̂̂Ģ"„­ø”{ †yí°øŊŽŖ‚ˆí5ūÆą°øŠ‚Õą5‡Rąŗø ˙aą‚wąK‚kąi€ŗø‡ąˇø ˛˙(ą‚@ą|‚4ąš‡ō°ˇø Mš˙ą‚ą|‚ ąš„Āø”{ †íÃøŊ`¤‚Ŧí­ūC¯ÃøŠ‚R¯­‡ÅŽÆø ˙ÔŽ‚ęŽÃ‚ŪŽá€Æø‡ŽĘø ˛˙›Ž‚ŗŽô‚§Ž‡eŽĘø Mš˙tŽ‚ŠŽô‚~ބ͸”{ ˆõˆ*õˆöˆö„tö%| „Üö%| „ōöãy„OøŠ{ ˆ}øˆ‹øˆšøˆâøˆđøˆBųßō(Ô¤ߤāž“.H÷ŤķS`ų œû¤đĨøÔ¤‘’cĀ…ų@ü€ģĨ‚rĀ%‹hü~Ā\’­PâųˆüucĨ‚ÎP›˙ÁP„ųųR$’­Pųų üu“Ĩ‚ÎPŗ˙ÁP„úR$„ų$‚ ˆâų„ú=ˆ'úˆ<ú„Ēų%| ˆĩų„DúŠ{ „Oú”{ ˆ]ú„eúŠ{ ¨ÜūAũpú“œsĻ—¸ü9ĻŸéū „ĩú%} ˆÅú„ûúO} Åú!hĻŸéū „Íú?} „ãúׂ „ûŠ{  Ņĩ”û œ˙ē—Øüôē™š5•H‘Ëî3Ą™H‘ĨÚŧ ‘ŧĨĄ‘­‘T†T$û•§ø+TŸūĄI$û ø°IŸ†PT4û™I§‚mTø‚aT'„?û>| ’'¯fûđü ú§‚@¯:‚6¯›žW…Ŗ@é§‚f…ä’ģIŖũ #°§‚ĘIäŠKLĻ(ũ #‚dLų‚ZL&“ž+8”Ru`ˆrû„zûf­—@ũg¨‚f…9’ģIzû`ũ #.¨‚ĘI9ŠKL}ûxũ #‚dLœ‚ZL˙“ū+8”Ru`’'¯ēû˜ũĻĄ¨‚@¯‚6¯—ˆĘû„Ōûf­’'¯õû°ũĻÛ¨‚@¯‚6¯‡ˆ˙û„üf­’øūüČũ¨YŠ‚˙Ū‚˙'‘ėSüČũE‚TŪ‚ûS'‘ĀSüāũJ‚ŲSŪ‚ĪS'„$üū’ˆ$üøũĻ͈p‘W…$üū;‚f…Ŧ’ģI$ü8ū #˛Š‚ĘIŦŠKL-üPū #‚dL‚ZLK“˜ū+8”RuŦ’ˆ6ühūĻƒĒ‚͈i‘W…6ü€ū;‚f…Ĩ†ģI6ü #GĒ‚ĘIĨŠKL<ü˜ū #‚dLî‚ZL* “¨ū+8”RuŦ’W…Eü°ūĻũĒ‚f…H †ģIEü #ÂĒ‚ĘIH ŠKLKüČū #‚dL„ ‚ZLĀ “¸ū+8”RuŦ’ˆTüāūĻ’Ģ‚͈Ū ‘W…Tüøū;‚f…Ū †ģITü #VĢ‚ĘIŪ ŠKLZü˙ #‚dL !‚ZL,†ģIé #Šš‚ĘI>,ūKLī #‚dLS,‚ZL€,“+8”RuXOēø͈u`Ÿ‡W…;øf…u`Ÿ†ģI #ēøĘIu`ŸūKL  #‚dL“,‚ZLĀ,“+8”RuXˆfû„ûŦˆšû„ÚûÜū„ãûڗˆķû„ü+„{ü|Ŧ„‘üĪN„ üyŗ„°üŐˆßüˆũˆ?ũ„[ũÜū„dũڗˆwũ„žũ+ˆĒũˆFū„J˙Š{ üŊž \œģdžûž“ļH‘—Yž™Â3ídžĶ,†­b=îvģøāb韂ĶbĶ,„Lö†Tađ˛ģ‚+TU-ūĄIa ‚°IU-’‘[t@đŌģ‚ [„-’W……XđJŧ‚f…¯-’ģI…x #ŧ‚ĘI¯-ŠKLˆ #‚dLŅ-‚ZLķ-“(+8”Ru_’W…œ°õÂŧ‚f….’ģIœČ #‰ŧ‚ĘI.ŠKLĸā #‚dL3.‚ZLU.“ß+8”Rud†ĸã°ņŊ‚Õãs.‚Čã›.ū­b°  ‚ābs.‚Ķb›.„Āö†W…5õ”Ŋ‚f…Ŋ.†ģI5 #[Ŋ‚ĘIŊ.ūKL; #‚dLŌ.‚ZL˙.“G+8”Ru_†W…^đ ž‚f…/’ģI^ø #ĶŊ‚ĘI/ŠKLa #‚dL'/‚ZLT/“v+8”Ru_„=ĪN„_sĻ„i%| ˆt„…0z„Õ{ „w} „[”{ „PŠ{ ô1•h€,œ˛ž†#˙tž„”Üū„Ÿ/„§ád•z°,œûž†#˙ŋzæž„ÄÜū„Ī/„×me•íôā7œSŋũ3H‘ĄÜ %‘†#˙ôHŋ„ųÜū„ IT¨i˙I• ‹œ´Āøt˙‘0XZ‚˙g/†#˙0Ŧŋ„5Üū†*˙5 čŋ‚9˙…/ūa5 ˙‚"a¤/€BF˙Ë/’D˙B(0Ā‚[˙é/‚O˙0„Tõ‚ „`ƒ „n+ƒ „vw} „‚Hƒ €ˆ#øt˙‘€ˆ#Š‚˙†¯^Ļ Ā„ĢĐ| „ž+ƒ „Ļw} á õÁëfd8 %âî7ģ9/üî’¯:ĩņî;; %âî^G%üKŲ° œÁúŅûž“ĩ\‘—@ŅŅĨŧĒ'%‘Ŋ}™=?Ģ %0†ōæ˛’Á+ō‚ō>0‚ōp0„ô[ƒ †Ô\ ļ¸Á˙ã\‚í\„0—XįÉ™͜Î %˜0’W…ˆÎL‚f…Ģ0’KL° #/‚dLÉ0‚ZLí0“c+8”RuĮ}ŠģIIĐ #‚ĘIĢ0†ˆ-Îv‚ˆ 1„;U€ ’W…]čÎî‚f….1†ģI] #ĩ‚ĘI.1ŠKLf #‚dLR1‚ZLv1“O+8”Rw’W…nÎfÂf…”1†ģIn #-ÂĘI”1ŠKLw0 #‚dL¸1‚ZLÜ1“?+8”Rw’W…HÎŪÂf…ú1†ģI #ĨÂĘIú1ŠKLˆ` #‚dL2‚ZLB2“/+8”Rw’W…xÎVÄ‚f…`2†ģI #Ä‚ĘI`2ŠKL™ #‚dL„2‚ZL¨2“+8”Rw’W…¨ÎÎÄ‚f…Æ2†ģI #•Ä‚ĘIÆ2ŠKLĻĀ #‚dLę2‚ZL3“+8”Rw’W…ĒØÎFÅ‚f…,3†ģIĒ # Å‚ĘI,3ŠKLŗđ #‚dLP3‚ZLt3“˙+8”Rw†W…ˇÎžÅ‚f…’3†ģIˇ #…Å‚ĘI’3ūKLĀ #‚dL¨3‚ZLž3“Ī+8”Rw†W…Ü Î7Æ‚f…Ņ3†ģIÜ  #ũÅ‚ĘIŅ3ūKLå  #‚dLį3‚ZL4“ô +8”RuĮ}†W…ô #ΰƂf…)4†ģIô  #vÆ‚ĘI)4ūKLũ  #‚dL?4‚ZLn4“ +8”RuĮ}†W…R Î)Į‚f…4†ģIR  #ĘI4ūKL[  #‚dL—4‚ZLÆ4“j +8”RuĮ}†W…j )ÎĸĮ‚f…Ų4†ģIj  #hĮ‚ĘIŲ4ūKLs  #‚dLī4‚ZL5“† +8”RuĮ}†W…“ 3ÎČ‚f…15†ģI“  #áĮ‚ĘI15ūKLœ * #‚dLG5‚ZLv5“Ģ +8”RuĮ}†W…Æ Î”Č‚f…‰5’ģIÆ  #ZČ‚ĘI‰5ŠKLĖ   #‚dLŸ5‚ZLÎ5“ä +8”RuĮ}†W…ä Î É‚f…á5†ģIä  #ĶČ‚ĘIá5ūKLí  #‚dL÷5‚ZL&6“ü +8”RuĮ}†W…ü 3Άɂf…96†ģIü  #LÉ‚ĘI96ūKL * #‚dLO6‚ZL~6“ +8”RuĮ}„HŽ~ „mâoˆ„ąčž„Ôčž„īœ)„ čž„(čž„Cčž„Ii˙’Ĩ˙ 8ÎĘ„%\„Ô\†]ā Ī7Ę˙$]‚.]‘6’~a°PĖÃĘ‚ąaĻ6‚¤aŧ6†ÕI° Ų ¸Ę‚äIĻ6ūģI° Õ‚ĘIĻ6ūĄI° -‚°IĻ6„ÃR$’W…ËhĖ=Ë‚f…Ī6’ģIË€ #Ë‚ĘIĪ6ūKL× #‚dLå6‚ZLø6“î+8”Ru´}†Ô\ŊcË˙ã\‚í\ 7’´Ā7˜ÃwĐ‚ŋĀ7‹˜ŸÍĀ‘Ė}ŸÚĀ‘ā}įĀN7†ō`>äË‚+ō‚7‚ōž7‚ōū7„t[ƒ —Āģ́öĀ-8’~aÔāI„Ė‚ąa@8‚¤ad8†ÕIÔ Ų yĖ‚äI@8ūģIÔ Õ‚ĘI@8ūĄIÔ -‚°I@8„įR$’W…IũĖ‚f…w8’ģI  #ÃĖ‚ĘIw8ŠKL"8 #‚dL›8‚ZLŋ8“Ī +8”Ruä}†W…h "IvÍ‚f…Ũ8†ģIh  #<Í‚ĘIŨ8ūKLq  #‚dLķ8‚ZL"9“„ +8”Ruä}„Ŗ,¨ˆĀ„Ô­P„ö­P„˙=„­Pˆˆe ’~ap PEC΂ąa59˙¤a†ÕIp  Ų 8΂äI59ūģIp  Õ‚ĘI59ūĄIp  -‚°I59„ˆ R$’W… hEģ΂f…Y9’ģI € #‚΂ĘIY9ūKLœ ( #‚dLo9‚ZL‚9“¯ +8”Rw†W…˜ %E4Ī‚f…•9†ģI˜  #ú΂ĘI•9ūKLĄ  #‚dLĢ9‚ZLÚ9“´ +8”RuÜ}†ã.JyĪ‚ãí9‡*i.U‚9ií9„>qG†ËņX\@Đ‚ëņ:‚áņ:€X\…b‘­PX˜ƒ‚ÎP:‚ÁP/:’aOX¸÷Ī‚lO:„ŦR$†ã/ JIĐ‚ãH:‡*i/ U‚9iH:„? qGˆ[„Ž~ „S y]ˆp ˆ ˆ• †Ô\´ĀĐ˙ã\‚í\^:’Q ØČŅĐ‚4Qr:‚*Q…:„ č<†Ô\+ ē÷Đ˙ã\‚í\˜:†W… ĖpŅ‚f…Ŧ:†ģI  #6Ņ‚ĘIŦ:ūKL  #‚dLÂ:‚ZLņ:“3 +8”Ruā}„ŨŽ~ „w,¨ˆœ„°­PˆËˆā„ô­P„ ­P„ ­Pˆ# ˆE ˆR „Ŋ Ž~ „ Š{ „G Š{ „Z Š{ ü}×Ā œŌÁÚûž“ĩ\‘ĄįoÖ…Ļ‘—đļÚĨĩāÚē'‘š—Ú™͜Ū %;’W…ņ (ŪŨŌ‚f…;’KLņ P #ĀŌ‚dL5;‚ZLW;“ā +8”RuCŠģIę p #‚ĘI;†Ŧ˙ ŪĶĐ˙øÃ˙uAŸ‚ˇ˙u;„ ģ€ ’W…û ˆŪĶ‚f…Œ;†ģIû  #WĶ‚ĘIŒ;ŠKL   #‚dLŽ;‚ZLĐ;“Ī +8”Rw’W… ¸ŪÔ‚f…î;†ģI  #ĪĶ‚ĘIî;ŠKL Đ #‚dL<‚ZL2<“ŋ +8”Rw’W… čŪ€Ô‚f…P<†ģI  #GÔ‚ĘIP<ŠKL   #‚dLr<‚ZL”<“¯ +8”Rw’W…%  ŪøÔ‚f…˛<†ģI%  #ŋÔ‚ĘI˛<ŠKL+ 0  #‚dLÔ<‚ZLö<“Ÿ +8”Rw’W…/ H ŪpÕ‚f…=†ģI/  #7Õ‚ĘI=ŠKL5 `  #‚dL6=‚ZLX=“ +8”Rw’W…9 x ŪčÕ‚f…v=†ģI9  #¯Õ‚ĘIv=ŠKL?   #‚dL˜=‚ZLē=“ +8”Rw†W…C Ū`Ö‚f…Ø=†ģIC  #'Ö‚ĘIØ=ūKLI  #‚dLí=‚ZL>“X +8”Rw†W…í ŪØÖ‚f…>†ģIí  #ŸÖ‚ĘI>ūKLķ  #‚dL*>‚ZLW>“˙ +8”RuC†W… ŪPׂf…j>’ģI ¨  #ׂĘIj>ŠKL Ā  #‚dL>‚ZLŦ>“"+8”RuC†W…"ŪČׂf…ŋ>†ģI" #×‚ĘIŋ>ūKL( #‚dLÔ>‚ZL?“4+8”RuC†W…4Ū@Ø‚f…?†ģI4 #Ø‚ĘI?ūKL: #‚dL)?‚ZLV?“F+8”RuC†W…FŪ¸Ø‚f…i?†ģIF #Ø‚ĘIi?ūKLL #‚dL~?‚ZLĢ?“X+8”RuC†W…XŪ0Ų‚f…ž?†ģIX #÷Ø‚ĘIž?ūKL^ #‚dLĶ?‚ZL@“j+8”RuC†W…jŪ¨Ų‚f…@†ģIj #oŲ‚ĘI@ūKLp #‚dL(@‚ZLU@“|+8”RuC†W…|WŪ Ú‚f…h@†ģI| #įŲ‚ĘIh@ūKL‚Q #‚dL}@‚ZLĒ@“’+8”RuC„- Ž~ „N âoˆd „{ čž„ čž„ĸ œ)„ˇ čž„Ī čž„ä čž„ę i˙’Ĩ˙ Ø ŪĢÚ„ \„] \„r Hƒ „Š{ üĢÕā$œŲÚzãûž“ĸ]‘—đ oãĨáĀ% %‘¸— ã™͜& %Ŋ@’W…8 &•Û‚f…Đ@’KL`  #xÛ‚dLî@‚ZLA“+8”RuŋŠģI€  #‚ĘIĐ@’W…+˜ & Ü‚f…0A†ģI+ #ÔÛ‚ĘI0AŠKL1°  #‚dLRA‚ZLtA“+8”Rw’W…9Č &…Ü‚f…’A†ģI9 #LÜ‚ĘI’AŠKL?ā  #‚dL´A‚ZLÖA“÷+8”Rw’W…Gø &ũÜ‚f…ôA†ģIG #ÄÜ‚ĘIôAŠKLM  #‚dLB‚ZL8B“į+8”Rw’W…U( &uŨ‚f…VB†ģIU #<Ũ‚ĘIVBŠKL[@  #‚dLxB‚ZLšB“×+8”Rw’W…_X &íŨ‚f…¸B†ģI_ #´Ũ‚ĘI¸BŠKLep  #‚dLÚB‚ZLüB“Į+8”Rw’W…iˆ &eŪ‚f…C†ģIi #,Ū‚ĘICŠKLo   #‚dL˜ v-å‚f…zG’ģI>°  #ôä‚ĘIzGŠKLDČ  #‚dLœG‚ZLžG“Į+8”Rw’W…Lā v§å‚f…ÜG’ģILø  #lå‚ĘIÜGŠKLR  #‚dLūG‚ZL H“ā+8”Ru¤’W…Z( v!æ‚f…>H’ģIZ@  #æå‚ĘI>HŠKL`X  #‚dL`H‚ZL‚H“ø+8”Ru°’W…hp v›æ‚f… H’ģIhˆ  #`æ‚ĘI HŠKLn   #‚dLÂH‚ZLäH“+8”RuŦ’W…v¸ vį‚f…I’ģIvĐ  #Úæ‚ĘIIŠKL|č  #‚dL$I‚ZLFI“8+8”Ru¨’Ĩ˙„v?ᄉ\„=\’čžøv!č‚ŸdI‚ŸŧI‹Š.Ÿ’A8 y ¨į‚3AJ‚)A]J„hX!čøf…uTŸ’ģIXX #āįøĘIuTŸŠKL[p #‚dLĻJ‚ZLĶJ“t+8”RuPˆ’čž0ˆv邟æJ‚Ÿ.K‹ˆŠ.Ÿ’A<¨ y Šč‚3AuK‚)AÍK„Nh Lûč‚f…>L’ģI Č #Âč‚ĘI>LŠKLā #‚dLSL‚ZL€L“(+8”RuHˆ<’čžOøvt邟“L‚ŸÛL‹øŠ.Ÿ’A] y lé‚3A)M‚)AqM„qhˆ]†W…\vėé‚f…­M’ģI\( #ŗé‚ĘI­MŠKL_@ #‚dLÂM‚ZLīM“t+8”RuG†W…tvdę‚f…N†ģIt #+ę‚ĘINūKLz #‚dLN‚ZLDN“†+8”RuG†W…†vÜę‚f…WN†ģI† #Ŗę‚ĘIWNūKLŒ #‚dLlN‚ZL™N“˜+8”RuG†W…˜vTë‚f…ŦN†ģI˜ #ë‚ĘIŦNūKLž #‚dLÁN‚ZLîN“Ē+8”RuG†W…ĒvĖë‚f…O†ģIĒ #“ë‚ĘIOūKL° #‚dLO‚ZLCO“ŧ+8”RuG†W…ŧvDė‚f…VO†ģIŧ # ė‚ĘIVOūKL #‚dLkO‚ZL˜O“Î+8”RuG†W…Î>vŧė‚f…ĢO†ģIÎ #ƒė‚ĘIĢOūKLÔ8 #‚dLĀO‚ZLíO“ā+8”RuG„§Å„ÅâoˆŪ„÷čž„0œ)„zi˙„éŠ{ ÷zãū‘(œí5íø‰ã‘ˆ„"”{ ÷Y[†)œQííøk‘Š2Xd‚DP„$žã÷Ya3œí÷íøk‘’Ypdėí‚kPŠ2pd‚DP„%žã„-”{ ÷…˙i)œîCîø—‘Š2ˆ-‚D>P„$žã÷…It3œ_îšîø—‘’… -Žî‚—]PŠ2 -‚D]P„%žã„-”{ ßíĻČîãîāž“57âî5ÃPC:÷šînL›œ˙îHđøČî‘—¸=đÔî|P†#˙1P<ī„6Üū’W…oĐS´ī‚f…ˇP’ģIoč #{ī‚ĘIˇPūKLx #‚dLĘP‚ZL÷P“ˆ+8”Rus†W…ŒS,đøf…utŸ†ģIŒ #ķīøĘIutŸūKL’ #‚dL Q‚ZL7Q“ĸ+8”Rusˆg„oi˙„ĢŠ{ ߊÕWđ|đāž“ĸ]Ū—´'Ū3ú1÷Hđē8°`œ˜đėđøWđ‘øađ‘ønđ‘ŠąÄø×‘øĘ‘‚ĀJQ„Ęãî´žĻ?œŠņĄÛ/Y´'‘Ąa Yú1‘Ą˙ÍZ´'‘Ą Z %‘ Ąę˛ZíG‘†#˙[pņ„$ÜūŠå$[‚ôiQŠ2a$‚AaˆQáõĐņče*Ų&'âãmsgÚ/üúfÖP1 œčņŌûž“Ŧ‘—0Ŋ™e*7Ę5¯QĨt#<ų‘X™˙JŌR’Šņt`9Iö‚´ņˆR‹`ŸÂņ‘X‰—ķƒ€ÛÅō‚ˇķŨR‚­ķES‹€…b‘­Pƒ˜ƒ‚ÎPŨR‚ÁP›S„›R$‰Ų훏Ü+ķ‚ųķĀS‚īķT‹¸…b‘­P›Øƒ‚ÎPĀS‚ÁPaT„ŗR$‰ūãŗܑķ‚ä†T‚äŪT‹…b‘­Pŗ ƒ‚ÎP†T‚ÁP'U„ËR$‰ÎäËHÜ÷ķ‚îäLU‚ää¤U‹H…b‘­PË`ƒ‚ÎPLU‚ÁPíU„ãR$‰đåî€ā]ô‚æV‚æ*V‹€…b‘­P‚ÎPV‚ÁP?V„R$‰Gh¸āÃô‚ghdV‚]h|V‹¸…b‘Q Đƒ‚4Q‘V‚*Q¤V„č<žđåā#õ‚æÄV‚æÜV€…b‡­Pƒ‚ÎPÄV‚ÁPņV‰+ô čŪ‰õ‚Kô W‚Aô#W‹č…b‘­P ƒ‚ÎP W‚ÁP8W„-R$‰ã? áķõ‚ãPW‘*i?8U‚9iPWŠqG?P‚ŠGŒW‚€GPW„Sŝžã$á7ö‚ãÄW‡*i$U‚9iÄW„"qGˆƒ„?y]’~aƒh9Ņö‚ąaŲW˙¤a†ÕIƒ Ų Æö‚äIŲWūģIƒ Õ‚ĘIŲWūĄIƒ -‚°IŲW„˜R$’W…Ą€9K÷‚f…X’ģIĄ  #÷‚ĘIXŠKL¤¸ #‚dL*X‚ZLLX““+8”Ru¨’W…ČØ=Å÷‚f…jX’ģIČđ #Š÷‚ĘIjXŠKLÎ #‚dLŒX‚ZLŦX“(+8”RuŦ’W…Ö =?ø‚f…ĘX’ģIÖ8 #ø‚ĘIĘXŠKLÜP #‚dLėX‚ZLY“H+8”RuŦ’W…äh=šø‚f…,Y’ģIä€ #~ø‚ĘI,YŠKLę˜ #‚dLNY‚ZLpY“h+8”RuŦ’W…ō°=3ų‚f…ŽY’ģIōČ #øø‚ĘIŽYŠKLøā #‚dL°Y‚ZLŌY“ˆ+8”RuŦ’W…ø=­ų‚f…đY’ģI #rų‚ĘIđYŠKL( #‚dLZ‚ZL4Z“¨+8”RuŦ’W…@='ú‚f…RZ’ģIX #ėų‚ĘIRZŠKLp #‚dLtZ‚ZL–Z“Č+8”RuŦ’Ĩ˙ˆ=Qú„!\„Í\’W…ō =Ęú‚f…´Z’ģIō¸ #ú‚ĘI´ZūKLû #‚dLŌZ‚ZL[“ +8”Ruŧ’W…˙Đ?Bû‚f…=[’ģI˙đ # û‚ĘI=[ŠKL #‚dLļ[‚ZL&\“†+8”RuX†˙ Hbû„w} ’W…H KÜû‚f…D\’ģIH8 #Ąû‚ĘID\ŠKLNP #‚dLf\‚ZLˆ\“ˆ+8”RuŦ’W…VhKVü‚f…Ļ\’ģIV€ #ü‚ĘIĻ\ŠKL\˜ #‚dLČ\‚ZLę\“¨+8”RuŦ’W…d°KĐü‚f…]’ģIdČ #•ü‚ĘI]ŠKLjā #‚dL*]‚ZLL]“Č+8”RuŦ’W…røKJũ‚f…j]’ģIr #ũ‚ĘIj]ŠKLx( #‚dLŒ]‚ZLŽ]“č+8”RuŦ’W…€@KÄũ‚f…Ė]’ģI€X #‰ũ‚ĘIĖ]ŠKL†p #‚dLî]‚ZL^“+8”RuŦ’W…ŽˆK>ū‚f….^’ģIŽ  #ū‚ĘI.^ŠKL”¸ #‚dLP^‚ZLr^“(+8”RuŦ’Ĩ˙œĐKhū„Ą\„-\’W…VčKáū‚f…^’ģIV #§ū‚ĘI^ūKL_ #‚dL˛^‚ZLī^“o+8”Ruŧ’{]8L ˙‚Š]_‚”]1_—0`™͜N %”_’W…-XNŸ˙‚f…§_’ģI-x #e˙‚ĘI§_ŠKL6 #‚dLÖ_‚ZL`“h+8”Ruģ’W…>¨N‚f…&`†ģI> #Ū˙‚ĘI&`ŠKLDĀ #‚dLU`‚ZL„`“X+8”RuŦ’W…LØN“‚f…ĸ`†ģIL #X‚ĘIĸ`ŠKLRđ #‚dLŅ`‚ZLa“H+8”RuŦ’W…ZN ‚f…a†ģIZ #Ō‚ĘIaŠKL`  #‚dLMa‚ZL|a“8+8”RuŦ’W…h8N‡‚f…ša†ģIh #L‚ĘIšaŠKLnP #‚dLŧa‚ZLŪa“¸+8”RuŦ’W…vhN‚f…üa†ģIv #Æ‚ĘIüaŠKL|€ #‚dLb‚ZL@b“ˆ+8”RuŦ’W…„˜N{‚f…nb’ģI„° #@‚ĘInbŠKLŠČ #‚dL’b‚ZL´b“¨+8”RuŦ†W…’Nõ‚f…Ōb†ģI’ #ē‚ĘIŌbūKL˜ #‚dLįb‚ZLüb“¨+8”RuŦ„pU€ „}Ž~ „žâoˆ°„Æčž„Üčž„íœ)„˙螄螄'čž„-i˙’Ĩ˙XāNŠ„]\„­\†U]ĩ O´‚d]c‚n]#c†#˙žVÔ„ÃÜū’‘[ÃøVô‚ [7c— ™͜Z %dc’W…š8Zˆ‚f…‚c’ģIšX #N‚ĘI‚cŠKLÂp #‚dL¤c‚ZLČc“(+8”Ruģ’W…ĘˆZ‚f…æc†ģIĘ #Į‚ĘIæcŠKLĐ  #‚dLd‚ZL*d“+8”RuŦ’W…ظZ|‚f…Hd†ģIØ #A‚ĘIHdŠKLŪĐ #‚dLjd‚ZLŒd“+8”RuŦ’W…æčZö‚f…Ēd†ģIæ #ģ‚ĘIĒdŠKLė #‚dLĖd‚ZLîd“ø+8”RuŦ’W…ôZp‚f… e†ģIô #5‚ĘI eŠKLú0 #‚dL.e‚ZLPe“č+8”RuŦ’W…HZę‚f…ne†ģI #¯‚ĘIneŠKL` #‚dLe‚ZL˛e“Ø+8”RuŦ’W…xZd‚f…Đe†ģI #)‚ĘIĐeŠKL #‚dLôe‚ZLf“Č+8”RuŦ†W…ZŪ‚f…4f†ģI #Ŗ‚ĘI4fūKL$ #‚dLIf‚ZL^f“0+8”RuŦ†W…0ZW‚f…qf†ģI0 #‚ĘIqfūKL6 #‚dL†f‚ZLĩf“B+8”Ruģ†W…FZĐ‚f…Čf†ģIF #–‚ĘIČfūKLL #‚dLŪf‚ZL g“X+8”Ruģ†W…\ZI ‚f… g†ģI\ # ‚ĘI gūKLb #‚dL5g‚ZLdg“n+8”Ruģ†W…rZ ‚f…wg†ģIr #ˆ ‚ĘIwgūKLx #‚dLŒg‚ZLģg“„+8”Ruģ†W…ˆZ; ‚f…Îg†ģIˆ # ‚ĘIÎgūKLŽ #‚dLãg‚ZLh“š+8”Ruģ†W…žZ´ ‚f…%h†ģIž #z ‚ĘI%hūKL¤ #‚dL:h‚ZLih“°+8”Ruģ†W…´Z- ‚f…|h†ģI´ #ķ ‚ĘI|hūKLē #‚dL‘h‚ZLĀh“Æ+8”Ruģ†W…ĘIZĻ ‚f…Ķh†ģIĘ #l ‚ĘIĶhūKLĐC #‚dLčh‚ZLi“Ü+8”Ruģ„Ž~ „*âoˆ<„Rčž„hčž„yœ)„‹čž„ čž„ŗčž„ši˙„KU€ ’Ĩ˙0¨Z; „5\„\\†]` [e ‚$]*i‚.]Ii† i\ ‚&ii‚}i†W…šK ‚f…œi†ģIš #Î ‚ĘIœiūKL  #‚dLąi‚ZLāi“Ŧ+8”Ruŧ†W…ŦK ‚f…ķi†ģIŦ #G ‚ĘIķiūKL˛ #‚dLj‚ZL7j“ž+8”Ruŧ†W…žKú ‚f…Jj†ģIž #Ā ‚ĘIJjūKLÄ #‚dL_j‚ZLŽj“Đ+8”Ruŧ†W…ĐKs‚f…Ąj†ģIĐ #9‚ĘIĄjūKLÖ #‚dLļj‚ZLåj“â+8”Ruŧ†W…âKė‚f…øj†ģIâ #˛‚ĘIøjūKLč #‚dL k‚ZLs‚Ķb†s„A!ö’ļR!āĻ‚ÜÎs‚Īâs‚Åös„c!|đ’W…ą!øŽ‡‚f…t’ģIą! #N‚ĘItŠKL´!0 #‚dL=t‚ZL_t“”"+8”Ru\†W…Č!(­˙‚f…}t†ģIČ! #Æ‚ĘI}tūKLÎ!" #‚dL’t‚ZL§t“į!+8”Rw’hú!P¤Q‚¨ēt‚›Út‚Žút‚u‚w"u„ "|đ†W…Ą"ŽÉ‚f…Zu†ģIĄ" #‚ĘIZuūKL§" #‚dLou‚ZLœu“ŗ"+8”RuG†W…ŗ"A‚f…¯u†ģIŗ" #‚ĘI¯uūKLš" #‚dLÄu‚ZLņu“Å"+8”RuG†W…Å"š‚f…v†ģIÅ" #€‚ĘIvūKLË" #‚dLv‚ZLFv“×"+8”RuG†W…×"#1‚f…Yv†ģI×" #ø‚ĘIYvūKLŨ" #‚dLnv‚ZL›v“é"+8”RuG†W…ú"Š‚f…Žv†ģIú" #p‚ĘIŽvūKL# #‚dLÃv‚ZLđv“ #+8”RuG†W…#!‚f…w’ģI#h #č‚ĘIwŠKL#€ #‚dLw‚ZLEw“(#+8”RuG†W….#Ž™‚f…Xw’ģI.#˜ #`‚ĘIXwŠKL1#° #‚dLmw‚ZLšw“F#+8”Ru\†W…F#­‚f…­w†ģIF# #Ø‚ĘI­wūKLL# #‚dLÂw‚ZLīw“X#+8”Ru\„ōâo„ūâo„  ø„? œ)„e Ψ„R!%| „›! ø„Ģ!čž„ą!Ψ„ú!%| „o#”{ „ō"Š{ „w#Š{ •4õĐ#´œ”1ĄÞ°*Ž‘—ȉ1™UPą”1x™MŗˇH‘x—čë%™͜˛ %‘x’W…Č$˛x‚f…¤x’ģIČ$8 #?‚ĘI¤xŠKLŅ$P #‚dLÂx‚ZLäx“Č&+8”RuC’W…Ũ$h˛đ‚f…y†ģIŨ$ #ˇ‚ĘIyŠKLã$€ #‚dL$y‚ZLFy“ˇ&+8”Rv’W…ī$˜˛h‚f…dy†ģIī$ #/‚ĘIdyŠKLõ$° #‚dL†y‚ZL¨y“§&+8”Rv’W…%Ȳā‚f…Æy†ģI% #§‚ĘIÆyŠKL%ā #‚dLčy‚ZL z“—&+8”Rv’W…%ø˛X ‚f…(z†ģI% # ‚ĘI(zŠKL% #‚dLJz‚ZLlz“‡&+8”Rv’W…%%(˛Đ ‚f…Šz†ģI%% #— ‚ĘIŠzŠKL+%@ #‚dLŦz‚ZLÎz“w&+8”Rv’W…7%X˛H!‚f…ėz†ģI7% #!‚ĘIėzŠKL=%p #‚dL{‚ZL0{“g&+8”Rv†W…I%˛Ā!‚f…N{†ģII% #‡!‚ĘIN{ūKLO% #‚dLc{‚ZLx{“b%+8”Rv†W…M(˛8"‚f…‹{†ģIM( #˙!‚ĘI‹{ūKLS( #‚dL {‚ZLÍ{“c(+8”RuC†W…c(˛°"‚f…ā{†ģIc( #w"‚ĘIā{ūKLi( #‚dLõ{‚ZL"|“y(+8”RuC†W…y(˛(#‚f…5|†ģIy( #ī"‚ĘI5|ūKL( #‚dLJ|‚ZLw|“(+8”RuC†W…(˛ #‚f…Š|†ģI( #g#‚ĘIŠ|ūKL•( #‚dLŸ|‚ZLĖ|“Ĩ(+8”RuC†W…Ĩ(!˛$‚f…ß|†ģIĨ( #ß#‚ĘIß|ūKLĢ( #‚dLô|‚ZL!}“ģ(+8”RuC†W…1*˛$‚f…4}†ģI1* #W$‚ĘI4}ūKL7* #‚dLI}‚ZLv}“G*+8”RuC†W…G*˛%‚f…‰}†ģIG* #Ī$‚ĘI‰}ūKLM* #‚dLž}‚ZLË}“]*+8”RuC†W…]*'˛€%‚f…Ū}†ģI]* #G%‚ĘIŪ}ūKLc*! #‚dLķ}‚ZL ~“w*+8”RuC„ $U€ „$Ž~ „7$âoˆF$„^$čž„v$čž„…$œ)„˜$čž„¯$čž„Â$čž„Č$i˙’Ĩ˙đ#ˆ˛&„õ#\„g%\’W…ņ% ģ&‚f…3~’ģIņ%Ā #T&‚ĘI3~ŠKLú%Ø #‚dLQ~‚ZLs~“.(+8”RuP’W…&đģ'‚f…‘~†ģI& #Ė&‚ĘI‘~ŠKL &  #‚dLŗ~‚ZLÕ~“:(+8”Rv’W…& ģ}'‚f…ķ~†ģI& #D'‚ĘIķ~ŠKL&8  #‚dL‚ZL7“F(+8”Rv†W…*&ģã'‚f…U†ģI*& #ŧ'‚ĘIUūKL0& #‚dLj‚ZL’W…<&P Į[(‚f…’’ģI<&h  #"(‚ĘI’ŠKLB&€  #‚dL´‚ZLÖ“č'+8”RvģęĐ&Å’W…m'˜ Įä(‚f…ô’ģIm'¸  #Ģ(‚ĘIôŠKLv'Đ  #‚dL€‚ZL4€“ũ'+8”RuH’W…~'č Į\)‚f…R€†ģI~' ##)‚ĘIR€ŠKL„'! #‚dLt€‚ZL–€“ (+8”Rv’W…Œ'!ÆÔ)‚f…´€†ģIŒ' #›)‚ĘI´€ŠKL’'0! #‚dLր‚ZLø€“(+8”Rv’W…š'H!ÆL*‚f…†ģIš' #*‚ĘIŠKL '`! #‚dL8‚ZLZ“(+8”Rv’W…¨'x!ÆÄ*‚f…x†ģI¨' #‹*‚ĘIxŠKLŽ'! #‚dLš‚ZLŧ“$(+8”Rv†W…ļ'Æ<+‚f…ځ†ģIļ' #+‚ĘIځūKLŧ' #‚dLZL‚“Ī'+8”Rv†W…Æ(Æ´+‚f…‚†ģIÆ( #{+‚ĘI‚ūKLĖ( #‚dL,‚‚ZLY‚“Ü(+8”RuH†W…Ü(Į,,‚f…l‚†ģIÜ( #ķ+‚ĘIl‚ūKLâ( #‚dL‚‚ZLŽ‚“ō(+8”RuH†W…ö(Į¤,‚f…Á‚†ģIö( #k,‚ĘIÁ‚ūKLü( #‚dLւ‚ZLƒ“ )+8”RuH†W… )Į-‚f…ƒ†ģI ) #ã,‚ĘIƒūKL) #‚dL+ƒ‚ZLXƒ“")+8”RuH†W…")Æ”-‚f…kƒ†ģI") #[-‚ĘIkƒūKL() #‚dL€ƒ‚ZL­ƒ“8)+8”RuH†W…8)Æ .‚f…ƒ†ģI8) #Ķ-‚ĘIƒūKL>) #‚dLՃ‚ZL„“N)+8”RuH†W…N)-Æ„.‚f…„†ģIN) #K.‚ĘI„ūKLT)' #‚dL*„‚ZLW„“h)+8”RuH†W…{)ģü.‚f…j„†ģI{) #Ã.‚ĘIj„ūKL) #‚dL„‚ZLŦ„“‘)+8”RuP†W…‘)ģt/‚f…ŋ„†ģI‘) #;/‚ĘIŋ„ūKL—) #‚dLԄ‚ZL…“§)+8”RuP†W…§)Eģė/‚f……†ģI§) #ŗ/‚ĘI…ūKL­)? #‚dL)…‚ZLV…“Á)+8”RuP†W…ė)$ģd0‚f…i…†ģIė) #+0‚ĘIi…ūKLō) #‚dL~…‚ZLĢ…“*+8”RuP†W…*!ģÜ0‚f…ž…†ģI* #Ŗ0‚ĘIž…ūKL* #‚dLĶ…‚ZL†“&*+8”RuP„u%Üū„~%ڗ„‰%ŧƒ „Ļ%,¨ˆš%„É%čž„Ü%čž„ë%œ)„ņ%i˙„å&ԃ „ķ&,¨ˆ'„#'čž„6'čž„E'čž„X'čž„g'œ)„m'i˙„Ä(Š{ ™1v…ĪáČúë1I_Tp5AŪw…9;AŪ¸†9;AŪC9/Aâîö.@_ ß´ú1/2āž“â`ë__nŽ>Žë__sŽ´'âîŖB“™´üāŗ’œG2 :ûž“a‘–PĸGކĸ__xG :‘—¨!ā3™XĨQ5AH††Ö& Lķ2‚ęf†‚€‘†‚öφ‡š& MŊ‚Šf†‚ŋ‘†‚ŗφŠĄ=Ā!S‚Øš†‚Ëꆂž*‡Š?Ë=Ā!‚‚€Ëš†‚sËꆂfË*‡ŠžĘ=Ā!_‚˙Ęš†‚ōĘꆂåĘ*‡‹Ā!ËH‡ŠŸ1=Ā!V‚Í1š†‚Ā1ꆂŗ1*‡‹Ā!Ü1h‡„eŒ} €p"îŖB^™´™=`™´Ž‡™œVaۭ͇™×nbŪ­ũ‡’ë1pØ!_´4ø2ō{‚ 2øú1V‹Ø! 2eˆ’Qapđ!4˙`a˙`aŠēw"“ø%ēōL4˙ē’ų˜Œ "`Ú4˙#™‚™žˆ’WĖĸ@"a]5‚fĖƈ˙pĖ‹@"‡.ĖĸĒ‚9Ėīˆ˙EˇĖĸMļ‚Ėīˆ‚(ˉ˙Ė„Ž%| †ÖģiĀ5‚ꉂ€4‰‚öG‰‡šģMŊ‚Љ‚ŋ4‰‚ŗG‰’AÅX"r“7‚Žj‰‚ˆ‰‚t˛‰‚gЉŠéÅX").‚6j‰‚)ˆ‰‚˛‰‚ЉŠ˜ÅX")‚͈‰‚Á˛‰‚ĩЉ‹X"ÛVÅX")~‚‹ˆ‰‚˛‰‚sЉ‘ÅX")]‚Hˆ‰‚;˛‰‚.ЉŠÂÅX"Ō‚ˆ‰‚ö˛‰‚éЉŠcÅX"˛‚¤ˆ‰‚—˛‰‚ŠЉ‹X"ŗî‰ŠÅX"Œ‚Eˆ‰‚8˛‰‚+Љ‹X"TŠ„_Œ} ’AÖp"yf9‚ŽDŠ‚bŠ‚tŒŠ‚gŦŠŠéÖp").‚6DŠ‚)bŠ‚ŒŠ‚ŦŠŠ˜Öp")‚ÍbŠ‚ÁŒŠ‚ĩŦŠ‹p"ÛƊ‘VÖp")~‚‹bŠ‚ŒŠ‚sŦŠ‘Öp")]‚HbŠ‚;ŒŠ‚.ŦŠŠÂÖp"Ō‚bŠ‚öŒŠ‚éŦŠŠcÖp"˛‚¤bŠ‚—ŒŠ‚ŠŦŠ‹p"ŗƊŠÖp"Œ‚EbŠ‚8ŒŠ‚+ŦŠ‹p"Tꊄ;Œ} ūRąéŠ‚aą ‹‚wą3‹‚kąN‹€é‡ąí ˛‚(ąa‹‚@ąt‹‚4ą‹‡ō°í Mš‚ąa‹‚ąt‹‚ ą‹„ö”{ LA´KõžœĶ;ITČ*ƒŽ^ķĶ;‘‰M€"ô ;‚m€ĸ‹‚c€‹‰­P)¨"™ŋ:‚ÎPú‹‚ÁP Œ†aO) ´:‚lOú‹„2ė{ „CR$‹Č"‚m€=Œ‚c€QŒ‘­PCā"—‚ÎPfŒ‚ÁP~Œ„¨R$‰ãR#ôt;‚ãĄŒ‘*iR#U‚9iĄŒŠqGR0#‚ŠGÌ‚€GĄŒ„fŝžãŦô¸;øãudŸ‡*iŦUø9iudŸ„ļqGˆ„Ry]„žŠ{ JDáņú$<I_TpČ*Ūw…99DŪ¸†99DŪC9M‘âîö.@_ ß Õ3<h<āž“œë__nŽBĪë__sŽ´'âîŖB“ÕüäԒœ€<DDûž“Ēh‘–PĸGĪ׌ĸ__xGDD‘—H#>™XĨQČ* †ģ€& L,=‚Ī€*‚į€U‚ۀj‡€& MŊ‚Ž€*‚¤€U‚˜€jŠš=`#S‚đ}‚㎍‚Ö"Í=`#‚‚cÍ}‚VÍŽ‚IÍĄĖ=`#_‚âĖ}‚ÕĖŽ‚ČĖ`#ņĖ ŽŠØ;=`#V‚<}‚ų;Ž‚ė;`#<,Ž„eŒ} €p"îŖB^Õ™=`ÕRŽ™œVaâǎ™×nbâÎÁŽ’$<px#_í>øJ<ō{‚ =<ø3<V‹x#Y<)’ë›p#Æ>˙ú›˙ú›Šēw¨#“ø%ēō…>˙ē’ūŒĀ#`?˙(‚b’:Îĸā#a–?‚IΊ˙S΋ā#‡ÎĸĒ‚Îŗ˙(·æÍĸMļ‚õÍŗ‚ ÎƏ˙˙Í„Ž%| †ģ€ģių?‚Ī€ڏ‚း‚ۀ ‡€ģMŊ‚Ž€ڏ‚¤€ø‚˜€ ’YÅø#rĖA‚Ļ.‚™L‚Œv‚”ŠÅø#).‚N.‚AL‚4v‚'”Š°Åø#)‚åL‚Ųv‚Í”‹ø#ķ˛‘nÅø#)~‚ŖL‚—v‚‹”‘)Åø#)]‚`L‚Sv‚F”ŠÚÅø#Ō‚L‚v‚”Š{Åø#˛‚ŧL‚¯v‚ĸ”‹ø#Ë˛Š/Åø#Œ‚]L‚Pv‚C”‹ø#lԐ„_Œ} ’YÖ$yŸC‚Ļ‘‚™&‘‚ŒP‘‚p‘ŠÖ$).‚N‘‚A&‘‚4P‘‚'p‘аÖ$)‚å&‘‚ŲP‘‚Íp‘‹$ķŽ‘‘nÖ$)~‚Ŗ&‘‚—P‘‚‹p‘‘)Ö$)]‚`&‘‚SP‘‚Fp‘ŠÚÖ$Ō‚&‘‚P‘‚p‘Š{Ö$˛‚ŧ&‘‚¯P‘‚ĸp‘‹$ËŽ‘Š/Ö$Œ‚]&‘‚PP‘‚Cp‘‹$lŽ‘„;Œ} ūLŗéŠ‚[ŗä‘‚qŗ÷‘‚eŗ’€é‡ŗí ˛‚"ŗ%’‚:ŗ8’‚.ŗS’‡ė˛í Mš‚û˛%’‚ŗ8’‚ŗS’„ö”{ JDü—ĶnœaDrEûž“Ēh‘šPĸoĪf’›__xorE‘ ‹0$__nrÕ›’žäŗräD‚ķŗÁ’ūr$‚ļrÁ’˙Ŧr‰ū H$r E˙(øōnDžģ€XvfEøĪ€Vøį€U‚ۀë’‡€XMŊøŽ€Vø¤€U‚˜€ë’„;h<ĒDü°ŨxœEGûž“s‘Ģ__x*ØœØū’‹`$˜__y*ŪœØ4“’“Ķˆ$*ßG‚ĸĶR“‚ŦĶp“’Yœ°$*™ƒF˙hœ‚rœš“‘W…°$ …‚f…š“’KLĐ$ #eF˙dL‚ZLĖ““k+8”R‘LŠģINø$ #‚ĘIš“ūMĶ0 *š‚\Ķߓ‚fĶō“ūūŌ0 *…‚ Ķߓ‚!Ķ”‚Ķō“‡ĶŌ0 Mš‚âŌߓ‚øŌ”‚ėŌō“„;”{ „NwEßl.G}Gāž“ŨBŪM1 Ä}Gâî¤Ä ƁîĘJ ĮîŖB ȁņ__r Ę %īüŸâčœšG-qG†ãī-Ņa‚ãÚLJ*iī-U‚9iÚĒ„û-qGˆ-„4-įō’)ãV-˜,{Đb‚;ãīĒŠĸ…V-¸,‚ą…ĢŠōV-Ø,‚ ōĢ‚ōĢ’W…|-ø,Žšb‚f…+Ģ’ģI|-- #€b‚ĘI+ĢŠKL~-(- #‚dLVĢ‚ZLtĢ“ę-+8”Rw„n-ŝ„—-”{ ’W…Š-H-{Hc‚f…’̆ģIŠ- #c‚ĘI’ĢŠKL¯-`- #‚dL§Ģ‚ZLŧĢ“×-+8”Rv†W…´-{Āc‚f…Ú̆ģI´- #‡c‚ĘIÚĢūKLē- #‚dLīĢ‚ZLŦ“Ę-+8”Rv†)ãū-{d‚;ãŦūĸ…ū-‚ą…,Ŧ„ .ō†W….{~d‚f…YŦ’ģI.x- #Ed‚ĘIYŦŠKL.- #‚dLnŦ‚ZL›Ŧ“).+8”RuG†W…).1{öd‚f…ŽŦ†ģI). #Ŋd‚ĘIŽŦūKL/.+ #‚dLÃŦ‚ZLđŦ“<.+8”RuG„ī+ÉU„2,&V„r,ųk„ģ,ųk„-:L„K-:LˆV-„E.Š{ •õõ.åœEnĄgy~´'‘Ąmy~´'‘Ą%X~Āõ‘ Ą*X~Āõ‘†ę å.~įe‚­‚'­ūĖ å.™‚× '­„ú.ZT†ę ú.~8føu¨Ÿ‚V­ūĖ ú.™‚× V­„/ZT’MŅ/¨-~cg‚mŅ…­‚cŅŊ­’ūã /Ā-Čf‚äHŽ‚ä€Ž‹Ā-…b‘­P /Ø-ƒ‚ÎPHŽ‚ÁPÅŽ„8/R$†ãC/  g‚ã莇*iC/ U‚9i莄K/qG†ã\1Rg‚ã"¯‡*i\1U‚9i"¯„h1qGˆ /„A/įō’ũžW/ø-~Žh‚ŋ7¯‚ŋo¯’zįe/ .ķg‚šįœ¯‚įÔ¯‹ .…b‘­Pe/8.ƒ‚ÎPœ¯‚ÁP°„}/R$’ãŠ/X.8h‚ã<°‘*iŠ/p.U‚9i<°„’/qG†ãM1}h‚ãv°‡*iM1U‚9iv°„W1qGˆe/„ˆ/įō’MŅ /ˆ.~ši‚mŅ‹°‚cŅð’ūãŽ/¨.i‚äđ°‚ä(ą‹¨.…b‘­PŽ/Ā.ƒ‚ÎPđ°‚ÁP`ą„Æ/R$†ãĶ/ ci‚ãƒą‡*iĶ/ U‚9iƒą„Û/qG†ã:1¨i‚ã°ą‡*i:1U‚9i°ą„F1qGˆŽ/„Ņ/įō’ūŊč/ā.~äj‚žÅą‚žíą’Öæö//Ij‚öæ'˛‚ėæO˛‹/…b‘­Pö//ƒ‚ÎP'˛‚ÁPm˛„0R$†ã0 Žj‚ã˛‡*i0 U‚9i˛„#0qG†ãū0Ķj‚ãŖ˛‡*iū0U‚9iŖ˛„ 1qGˆö/„0įō’)ã;08/~Ōk‚;ã¸˛Šĸ…;0X/‚ą…˲Šō;0x/‚ ō➂ō˲’W…a0˜/Žģk‚f…ô˛’ģIa0°/ #‚k‚ĘIô˛ŠKLc0Č/ #‚dLŗ‚ZL=ŗ“Ō0+8”Rw„S0ŝ„|0”{ ’W…0č/~Jl‚f…[ŗ†ģI0 #l‚ĘI[ŗŠKL…00 #‚dL}ŗ‚ZLŸŗ“ŋ0+8”Rv†W…Š0.~Âl‚f…Ŋŗ†ģIŠ0 #‰l‚ĘIŊŗūKL0( #‚dLŌŗ‚ZLįŗ“ 0+8”Rv†W…â0~:m‚f…úŗ†ģIâ0 #m‚ĘIúŗūKLč0 #‚dL´‚ZL<´“õ0+8”RuG†)ã 1~€m‚;ãO´ūĸ… 1‚ą…d´„1ō†W…1~øm‚f…‘´’ģI10 #ŋm‚ĘI‘´ŠKL 100 #‚dLĻ´‚ZLĶ´“81+8”RuG„Í.ÉU„/&V„W/ųk„ /ųk„č/:L„00:Lˆ;0„ū0Š{ •ö€1åœGwĄgy´'‘Ąmy´'‘Ą%XĀõ‘ Ą*XĀõ‘†ę Õ1én‚æ´‚ ĩūĖ Õ1™‚×  ĩ„ę1ZT†ę ę1:oøu¨Ÿ‚9ĩūĖ ę1™‚× 9ĩ„ū1ZT’MŅ2H0ep‚mŅhĩ‚cŅ ĩ’ūã2`0Ęo‚ä+ļ‚äcļ‹`0…b‘­P2x0ƒ‚ÎP+ļ‚ÁP¨ļ„(2R$†ã32 p‚ãËļ‡*i32 U‚9iËļ„;2qG†ãL4Tp‚ãˇ‡*iL4U‚9iˇ„X4qGˆ2„12įō’ËŊG2˜0q‚ëŊˇ‚áŊRˇ’„æU2Ā0õp‚¤æˇ‚𿎎‹Ā0…b‘­PU2Ø0ƒ‚ÎPˇ‚ÁPüˇ„m2R$’ãz2ø0:q‚㸑*iz21U‚9i¸„‚2qG†ã=4q‚ãY¸‡*i=4U‚9iY¸„G4qGˆU2„x2įō’MҐ2(1ģr‚mŅn¸‚cŅϏ’ūãž2H1 r‚ä͏‚ä š‹H1…b‘­Pž2`1ƒ‚ÎP͏‚ÁPCš„ļ2R$†ãÃ2 er‚ãfš‡*iÃ2 U‚9ifš„Ë2qG†ã*4Ēr‚㓚‡*i*4U‚9i“š„64qGˆž2„Á2įō’ūŊØ2€1æs‚ž¨š‚žĐš’Öææ2 1Ks‚öæ ē‚ėæ2ē‹ 1…b‘­Pæ2¸1ƒ‚ÎP ē‚ÁPPē„ū2R$†ã 3 s‚ãsē‡*i 3 U‚9isē„3qG†ãî3Õs‚ã†ē‡*iî3U‚9i†ē„ú3qGˆæ2„ 3įō’)ã+3Ø1Ôt‚;ã›ēŠĸ…+3ø1‚ą…ŽēŠō+32‚ ōÃē‚ōŽē’W…Q382ŽŊt‚f…×ē’ģIQ3P2 #„t‚ĘI×ēŠKLS3h2 #‚dLģ‚ZL ģ“Â3+8”Rw„C3ŝ„l3”{ ’W…o3ˆ2Lu‚f…>ģ†ģIo3 #u‚ĘI>ģŠKLu3 2 #‚dL`ģ‚ZL‚쓝3+8”Rv†W…z3.Äu‚f… ģ†ģIz3 #‹u‚ĘI ģūKL€3( #‚dLĩģ‚ZLĘ쓐3+8”Rv†W…Ō3‚f…ĀÆģIÂ6 #‚ĘIĀÃūKLČ6 #‚dLÕÂZLÄ“Õ6+8”RuG†)ãí6„„‚;ãÄūĸ…í6‚ą…*Ä„ú6ō†W…ũ6„ü‚f…WÄ’ģIũ6X5 #ÂĘIWÄŠKL7p5 #‚dLlÄ‚ZL™Ä“7+8”RuG„­4ÉU„÷4&V„75ųk„€5ųk„Č5:L„6:Lˆ6„Ū6Š{ •pö`7åœK‰Ągy‡´'‘Ąmy‡´'‘Ą%X‡Āõ‘ Ą*X‡Āõ‘†ę ĩ7‡í€‚ŦÄ‚ĐÄūĖ ĩ7™‚× ĐÄ„Ę7ZT†ę Ę7‡>øu¨Ÿ‚˙ÄūĖ Ę7™‚× ˙Ä„Ū7ZT’MŅį7ˆ5‡i‚‚mŅ.Å‚cŅfÅ’ūãđ7 5΁‚äņÅ‚ä)Æ‹ 5…b‘­Pđ7¸5ƒ‚ÎPņÅ‚ÁPnÆ„8R$†ã8 ‚‚ã‘Æ‡*i8 U‚9i‘Æ„8qG†ã,:X‚‚ãËÆ‡*i,:U‚9iËÆ„8:qGˆđ7„8įō’ËŊ'8Ø5‡”ƒ‚ëŊ⯂áŊĮ’„æ586ų‚‚¤æEĮ‚šæ}Į‹6…b‘­P586ƒ‚ÎPEĮ‚ÁPÂĮ„M8R$’ãZ886>ƒ‚ãåĮ‘*iZ8P6U‚9iåĮ„b8qG†ã:ƒƒ‚ãȇ*i:U‚9iČ„':qGˆ58„X8įō’MŅp8h6‡ŋ„‚mŅ4Č‚cŅlČ’ūã~8ˆ6$„‚ä™Č‚äŅČ‹ˆ6…b‘­P~8 6ƒ‚ÎP™Č‚ÁP É„–8R$†ãŖ8 i„‚ã,ɇ*iŖ8 U‚9i,É„Ģ8qG†ã :Ž„‚ãYɇ*i :U‚9iYÉ„:qGˆ~8„Ą8įō’ūŊ¸8Ā6‡ę…‚žnÉ‚ž–É’ÖæÆ8ā6O…‚öæĐɂ뿸ɋā6…b‘­PÆ8ø6ƒ‚ÎPĐÉ‚ÁPĘ„Ū8R$†ãë8 ”…‚ã9ʇ*ië8 U‚9i9Ę„ķ8qG†ãÎ9Ų…‚ãLʇ*iÎ9U‚9iLĘ„Ú9qGˆÆ8„é8įō’)ã 97‡؆‚;ãaĘŠĸ… 987‚ą…tĘŠō 9X7‚ ō‰Ę‚ōtĘ’W…19x7ŽÁ†‚f…Ę’ģI197 #ˆ†‚ĘIĘŠKL39¨7 #‚dLČĘ‚ZLæĘ“ĸ9+8”Rw„#9ŝ„L9”{ ’W…O9Č7‡P‡‚f…ˆģIO9 #‡‚ĘIËŠKLU9ā7 #‚dL&Ë‚ZLHË“9+8”Rv†W…Z9.‡ȇ‚f…fˆģIZ9 #‡‚ĘIfËūKL`9( #‚dL{Ë‚ZLË“p9+8”Rv†W…˛9‡@ˆ‚f…ŖË†ģI˛9 #ˆ‚ĘIŖËūKL¸9 #‚dL¸Ë‚ZLåË“Å9+8”RuG†)ãŨ9‡†ˆ‚;ãøËūĸ…Ũ9‚ą… Ė„ę9ō†W…í9‡ūˆ‚f…:Ė’ģIí9ø7 #ň‚ĘI:ĖŠKLđ98 #‚dLOĖ‚ZL|Ė“:+8”RuG„7ÉU„į7&V„'8ųk„p8ųk„¸8:L„9:Lˆ 9„Î9Š{ •Ö!pœø§Ä~SÍ/ƒw… p~S‘ƒ¸† p~S‘ƒë§ q/‘ ũ<‘‹(8­Č? tĩīĖ‰`8 tí‰ø:ōq‰ø-ō€‰žR@ |kŠ‚tĶĖ‚j„͇ߏ@ -ႸĐ͂Íūu`@ c‚¨`„Í‚›`k΄LöžRS €éŠ‚t—΂j&·ߏS -ႸrĪ‚î&Īūu`S c‚¨`&Ī‚›`īĪ„_öžRf „g‹‚tĐ‚jzЇߏf -Ⴘ¯Đ‚îzĐūu`f c‚¨`zĐ‚›`Ņ„röžR€ xå‹‚t.Ņ‚jæŅ‡ߏ€ -Ⴘ2Ō‚îæŅūu`€ c‚¨`æŅ‚›`ŌŌ„‹ö‰’€8 zŒ‚ūŌž¸ ~#Œ‚&ĶžĐ ‚BŒ‚NĶžR  ŒĀŒ‚tvĶ‚j‹Ķ‡ߏ  -ႸžĶ‚Ķūu`  c‚¨`‹Ķ‚›`ąĶ„,öž3 ŽßŒ‚ŨĶžR6 ]‚tõĶ‚j Ô‡ߏ6 -ႸÔ‚î Ôūu`6 c‚¨` Ô‚›`0Ô„BöžI ’|‚\Ô‡RL ”‚ttÔ‚j‰Ô‡ߏL -ႸœÔ‚Ôūu`L c‚¨`‰Ô‚›`¯Ô„Xöá"'ŽŲ!'%ŪMK Đ 'ŽŪÕ Ņ ,Žīī•4"åœã•§ÄŽBÍĻ/ƒw… pŽB‘ƒ¸† pŽB‘ƒë§ qĻ/‘ ũ<‘‹˜8­Č? táīÛÔ‰C¨¸8 tŌŽøm¨ōWŽø`¨ōfމ…¨HØ8 |˛‚§¨ųÔ‚¨YÕ‘øHØ8-ŋ‚ށՂ ŽĄÕ†ÕIH Ō v‚äIĄÕūģIH Õ‚ĘIĄÕūĄIH -‚°IĄÕū¨  Ô ‚5¨õÕ‚(¨Ö‚¨Ö„Ģōƒ ‰…¨Pđ8 €’‚§¨.Ö‚¨rÖ‘øPđ8-ŋ‚ŽšÖ‚ ŽēÖ†ÕIP Ō V‚äIēÖūģIP Õ‚ĘIēÖūĄIP -‚°IēÖū¨Đ Ô ‚5¨öÖ‚(¨ ׂ¨×„Ûōƒ ‰…¨X9 „r‘‚§¨/ׂ¨sבøX9-ŋ‚ޛׂ Žģ׆ÕIX Ō 6‘‚äIģ×ūģIX Õ‚ĘIģ×ūĄIX -‚°Iģ×ū¨ø Ô ‚5¨÷ׂ(¨ Ø‚¨Ø„ōƒ ž…¨q xR’‚§¨0Ø‚¨™Ø‡øq-ŋ‚ŽÁØ‚ Žá؆ÕIq Ō ’‚äIáØūģIq Õ‚ĘIáØūĄIq -‚°IáØū¨x Ô ‚5¨<Ų‚(¨OŲ‚¨bŲ„ƒōƒ ž §˛ zq’‚§uŲž §æ ~’‚§Ųž § ‚¯’‚§ÅŲ‰…¨T 9 “‚§¨íŲ‚¨Ú‘øT 9-ŋ‚Ž7Ú‚ ŽWÚ†ÕIT Ō S“‚äIWÚūģIT Õ‚ĘIWÚūĄIT -‚°IWÚū¨Ā Ô ‚5¨uÚ‚(¨ˆÚ‚¨§Ú„Īōƒ ž §[ ’Ž“‚§ēÚž…¨^ ”Ž”‚§¨ŌÚ‚¨įÚ‡ø^-ŋ‚Ž˙Ú‚ ŽÛ†ÕI^ Ō R”‚äIÛūģI^ Õ‚ĘIÛūĄI^ -‚°IÛū¨e Ô ‚5¨&Û‚(¨9Û‚¨LÛ„pōƒ ‰…¨89 ŒÆ•‚§¨_Û‚¨Û‘ø89-ŋ‚Ž¨Û‚ ŽŧÛ’ÕIP9 Ō 2•‚äIįÛŠģIp9 Õ‚ĘIįÛŠĄIp9 -‚°IįÛ’ÕI‘ˆ9 Ō Š•‚äIŧÛūģI‘ Õ‚ĘIŧÛūĄI‘ -‚°IŧÛū¨¤ Ô ‚5¨ûÛ‚(¨Ü‚¨8Ü„ŗōƒ ‡ §Ÿ Ž‚§KÜßk0û•–‡RĘkāž“Qˆč„v-æĘk•n"ˆœ™™§ÄĘkÍ 0ƒw… pĘk‘ƒ¸† pĘk‘ƒë§ q 0‘ ũ<‘‹ 9­Č? t đc܉ų˜Ø9 t´–ø#™ō8–ø™ōG–žã•@ x—˙–‚û•‰Ü‡͘B-Ⴟ˜žÜ‚ܘŅÜ„S{| žã•^ |\—˙–‚û•Ũ‡͘a-Ⴟ˜;Ũ‚ܘNŨ„r{| žã•} €°—˙–‚û•ƒŨ‡͘€-Ⴟ˜ĄŨ‚ܘ´Ũ„‘{| žã•œ" „˜˙–‚û•ŌŨ‡͘Ÿ-Ⴟ˜đŨ‚ܘŪ„°{| žã•ķ ŒX˜˙–‚û•!Ū‡͘õ-Ⴟ˜4Ū‚ܘGŪ„{| ž;™  Žw˜‚J™ZŪžã• Ë˜˙–‚û•rŪ‡͘-Ⴟ˜…Ū‚ܘ˜Ū„#{| ž;™* ’ę˜‚J™ĢŪžã•-# ”>™˙–‚û•ÃŪ‡͘/!-Ⴟ˜ÖŪ‚ܘéŪ„@{| ‰;™`ø9 z]™‚J™üŪž;™x ~|™‚J™$߇;™€ ‚‚J™Lßá¨"Ū™Ã$ĘkÍÎŪw… ĶĘkŪ¸† ĶĘkŪë§ ÔÎáÄ0˙™ÍÎčë§-ėÎáÚ"Aš‡RĘkÍ 0čw… ŸĘk踆 ŸĘkčë§ Ÿ 0ß“˛Pš‚šāž“ačPĸoŽé__xo‚šâã__nr™´ŦAßX˛–šޚāž“aë__x‘ޚŦAüŧP:ŽœËšd§ûž“ļH‘ĄđâM´'‘ĄgŠN´'‘Ą…WOø‘ ĄöXP‘—:O§™Ų–Rž´tßĨĖĀZAA‘X’\t:8:Ts›‚uŖß‚kāˆ€:’:P:Tĩ›‚”āŠ†q:P:6‚Ÿq á˙•q†æ‹:T÷›‚õļáū†q‹:$‚Ÿqâ˙•q’™™‘:h:T᥂Йēâ‚Ù'ã‚ļ™šã†h‘: ŨZœ‚,hēâ‚"hđ㈠:’Ū™ĸ:˜: Ũ ž‚ō™ä‰hĸ:¸:-í¨œ‚,hä‚"hīäˆą:‰+ˆ˛:Đ:-íüœ‚Dˆ˜å‚:ˆæ‘h˛:Đ:-á‚,h˜å‚"hæˆĀ:‰VˆĀ:đ:-퐝‚hˆĻæŠW…Ā:;2‚f…üæ’ģIĀ:0; #U‚ĘIüæŠKLÃ:H; #‚dL į‚ZLč“<+8”Ru@‡VˆŨ=!-íøhˆu`ŸūW…Ũ=!2øf…u`Ÿ’ģIŨ=h; #åøĘIu`ŸŠKLā=€; #‚dL2č‚ZL_č“ų=+8”Rud’˙™Ũ:˜; ŨZŸ‚4šrč˙(š˙šž[™Ũ: ĸŸž‚v™rč‚l™Õč‡hŨ:-܂,hrč‚"hÕčˆë:‰™˙:°; ĸOŸ‚’™8é‘Vˆ˙:Đ;-܂hˆ›éŠW…˙:đ;2‚f…%ę’ģI˙:< #Ÿ‚ĘI%ęŠKL;(< #‚dL•ę‚ZLøę“ˆ<+8”Ru´„˙:–’™;H< Ũ  ‚’™ë‘Vˆ;`<-܂hˆëŠW…;x<2‚f…†ë†ģI; #Ο‚ĘI†ëŠKL;< #‚dLÜë‚ZLLė“ <+8”Ru@’Vˆ!;¨< ŨŸ ‚hˆzėŠW…!;Ā<2‚f…œė’ģI!;Ø< #d ‚ĘIœėŠKL';đ< #‚dLØė‚ZLúė“8<+8”Ru@†Vˆl= Ũ3Ą‚hˆíūW…l=2‚f…í†ģIl= #ų ‚ĘIíūKLr= #‚dL-í‚ZLZí“~=+8”RuOū™Į= Ũ‚’™mí‡VˆĮ=-܂hˆmíūW…Į=2‚f…mí†ģIĮ= #ŖĄ‚ĘImíūKLÍ= #‚dL‚í‚ZL—í“Ų=+8”Ru´’Vˆ/;=Tvĸ‚hˆĒíŠW…/; =2‚f…Ēí’ģI/;8= #;ĸ‚ĘIĒíŠKL5;P= #‚dLĖí‚ZLîí“X<+8”Ru@’W…=;h=Tīĸ‚f… î’ģI=;€= #ĩĸ‚ĘI îŠKLC;˜= #‚dL.î‚ZLPî“x<+8”Ru@’W…Ĩ;°=_iŖ‚f…nî’ģIĨ;Đ= #.Ŗ‚ĘInîŠKLŽ;č= #‚dLĒî‚ZLæî“ =+8”Ruŧ†Đ;fŖ‚!ī˙’AšÜ;>f@¤‚fšDī‚Zšfī‚PšŸī‹>tšÍīžÖ,= v4¤‚ęđ‚€!đ‚ö6đ‡š,= MŊ‚Šđ‚ŋ!đ‚ŗ6đ„ü;/2’‡š<>iפ‚ šIđ‚–škđ†Ö›<•ˤ‚ęĄđ‚€šđ‚öÎđ‡š›<MŊ‚ŠĄđ‚ŋšđ‚ŗÎđ„ų</2†dļ<lĨ‚,dáđ‚,dáđ’‚nÄ<8>l˜Ĩ‚›nņ‚‘n4ņ†L{Ė<•Ĩ‚`{Xņ‚x{nņ‚l{ƒņ‡{Ė<MŊ‚{Xņ‚5{nņ‚){ƒņ„'=uf†W…I=#TĻ‚f…Ŗņ†ģII= #×Ĩ‚ĘIŖņūKLO= #‚dL¸ņ‚ZLåņ“[=+8”RuO†Vˆ~= T¤Ļ‚hˆøņūW…~= 2‚f…øņ†ģI~= #jĻ‚ĘIøņūKL„= #‚dL ō‚ZL:ō“=+8”RuO†W…ž=_§‚f…Mō†ģIž= #ãĻ‚ĘIMōūKL¤= #‚dLbō‚ZLwō“°=+8”Ruŧˆt:„j;%| ˆ;ˆ”;„Ŗ;äO„Ŋ=”{ „d=Š{ „Å=Š{ ß7ŧs§Ĩ§āž“ļHŪ…WŽøŪöXŪ|%:•™ö>/œÃ­Ąđ⊴'‘Ąa3Ē´'‘ĄgŠĢ´'‘ĄėBŦ´'‘ Ą+x­Ī­‘Ą…WŽ×Û‘ĄöX¯ãÛ‘Ąöļ°:‘—`>Ž­™|ąC:Šō’W…a>€>ŗˍ‚f…žō’ģIa> > #“¨‚ĘIžōŠKLd>¸> #‚dLķ‚ZL=ķ“˜?+8”Ru_’W…{>Ø>ŗDŠ‚f…[ķ†ģI{> # Š‚ĘI[ķŠKL>đ> #‚dL¤ķ‚ZLí퓇?+8”Rw†#˙Š> ´dŠ„>Üū’d§•>?´—Ŧ‚—§ ô‚ЧJô‚}§‚ô‚s§ēô†čˆ•>˜øŠ‚÷ˆ õ‡6T•>o‚ETnõūÕI•> 6‚äInõ’"`Ÿ>0?ĄpĒ‚1`Ãõ†é_Ÿ>|7Ē‚ø_ėõūTĒ>}‚+TöūĄIĒ> ‚°Iö’ėSé>H?™ÉĒ‚T.ö‚ûS]ö‘ĀSė>`?J‚ŲS.ö‚ĪS]ö„ø>ū’ˆø>€?™]Ģ‚͈°ö‘W…ø> ?;‚f…°ö’ģIø>Ā? #"Ģ‚ĘI°öŠKL?Ø? #‚dLŌö‚ZLôö“¨?+8”RuT’čˆ ?đ?š´Ģ‚÷ˆ÷‘6T ?đ?o‚ET÷ŠÕI ?đ? 6‚äI÷†ˆ @"™HŦ‚͈:÷‡W… @";‚f…:÷†ģI @ # Ŧ‚ĘI:÷ūKL@ #‚dLO÷‚ZLd÷“ @+8”RuT„Ā>ŗš„Ę>Žn„é>R¯„#?ŝˆB?„V?­P„e?­Pˆm?ˆ¸?†W…Đ?ŗ­‚f…w÷’ģIĐ?@ #ÖŦ‚ĘIw÷ŠKLĶ? @ #‚dLŒ÷‚ZLš÷“ë?+8”Ru_†W…ë?"ŗ‡­‚f…Ė÷†ģIë? #N­‚ĘIĖ÷ūKLņ? #‚dLá÷‚ZLø“ū?+8”Ru_ˆ*>ˆ:>„F>%| ˆa>„Í?”{ „Ā?Š{ „@Š{ ¨ĸļúPšœ&°øļÂÎÚļ‘ —8@ ŽŠåļŠņļ„5Õ$‹X@˙Úļ‚Îļ!ø‚ÂļAø‚ļļlø‹X@åļĄøņļøø‰Bļ;x@%ˆ˛Ž‚bļAø‚Vļlø‘īĩ;x@.v‚ļAø‚ļlø‰oļK@%Œu¯‚”ļ7ų‚‡ļWų‚zļŒųŠ­OK@ ™‚ŌOĐų‚ÅOWų‚¸OŒų†zOX iQ¯‚ŸOú‚’O/ú‚…OBú„gG„ ūŲNƒ g˙đN‚äNaúžOS%Œ”¯‚Oøø‰!On°@%’°‚:Otú‚0Oĩú€¨ø:OVø0OUžæJ¨ Õņ¯˙õJ‡ŲN˛ ×˙đNøäNuv"# Ÿ„K4  ļā0@œŧĄđâāŧ‘ĄūŒá#ŧ‘—Č@ ŧ™M#â(ŧĶú˜pæH‘KûîÖ/įH‘Ĩģ.čÄ6‘TĨ]éÄ6‘X’čž6@đ@âœąøŸTŸ‚ŸŽû‹đ@Š.Ÿ’AU@A y #ąø3ATŸ‚)AŌû„g@hĸB!”ą‚f…„ü†ģIĸB #[ą‚ĘI„üūKL¨B #‚dL™ü‚ZLÆü“¸B+8”Ru`ˆU@†TG@âØą‚+TŲüūĄIG@ ‚°IŲü’čžh@0Aâ䲂Ÿũ‚ŸFũ‹0AŠ.Ÿ’Av@XA y k˛‚3Aøũ‚)Aū†aOv@ `˛‚lOøũ„~@ė{ „‹@hC!ܲøf…uXŸ’ģICpA #Ŗ˛øĘIuXŸŠKLCˆA #‚dLŽū‚ZLģū“1C+8”Ru`ˆv@’W…‹@ Aâ\ŗ‚f…Îū’ģI‹@ĀA ##ŗ‚ĘIÎūŠKLŽ@ØA #‚dL[˙‚ZLž˙“`B+8”Ru`’Tĸ@øAæ˜ŗ‚+TÜ˙ŠĄIĸ@øA ‚°IÜ˙’PT¨@BįĖŗ‚mT$‚aTKû„¸@>| ’t‰Ŋ@0Bč´‚ƒ‰`Š4‰Ŋ@0B ŧ˙Z‰˙M‰‚C‰†t‰Ë@é\´‚ƒ‰™ū4‰Ë@ ŧ˙Z‰˙M‰‚C‰™’˜ˇÔ@HBî<ĩ‚Ōˇ ‚Æˇj‚ēˇš‚°ˇŲ‰UˇÔ@`B%åĩ‚ƒˇ ‚vˇj‚iˇš‹`BŠ ˇÔ@`B ä‚;ˇ ‚.ˇj‚!ˇš‹`B„æ@ĸļ‡4‰į@%å˙Z‰˙M‰‚C‰"’ĀSę@xBîpĩ‚ŲS"‚ĪSk„ø@ū’W…ø@˜Bîčĩ‚f…ŋ’ģIø@¸B #¯ĩ‚ĘIŋŠKLAĐB #‚dLî‚ZL“pB+8”RuW’ĀSAčBīļ‚ŲS;‚ĪSj„(Aū’W…(ACī”ļ‚f…ą’ģI(A C #[ļ‚ĘIąŠKL1A8C #‚dLā‚ZL“€B+8”RuW†6T9Ađˇ‚ET-ūÕI9A 6‚äI-ūģI9A Õ‚ĘI-ūĄI9A -‚°I-’W…\APC逡‚f…O’ģI\ApC #Gˇ‚ĘIOŠKLbAˆC #‚dLq‚ZL““˛A+8”Rw’W…fA¨Cčøˇ‚f…ą’ģIfAĐC #ŋˇ‚ĘIąŠKLlAđC #‚dLĶ‚ZLõ“ĘA+8”Rw’W…pADųp¸‚f…’ģIpA0D #7¸‚ĘIŠKLvAPD #‚dL5‚ZLW“ęA+8”Rw†^B ōʸ‚,^u‚"^ūã¤B 3‚ü¤u‚ō¤„BO’^ BhDëNš‚,^ĸ‚"^Ί㤠BhD 3‚ü¤ĸ‚ō¤Î†aO B }Bš‚lOĸ„,Bė{ „=BO’^=B€Dė¨š‚,^û‚"^Šã¤=B€D 3‚ü¤û‚ō¤„RBO†W…Bâē‚f…@†ģIB #įš‚ĘI@ūKL“B #‚dLU‚ZLj†W…ÃBī†ē‚f…}†ģIÃB #Mē‚ĘI}ūKLÉB #‚dL’‚ZLŋ“ÕB+8”RuW†W…ÕBéūē‚f…Ō†ģIÕB #Åē‚ĘIŌūKLÛB #‚dLį‚ZL“įB+8”RuW†W…įBčvģ‚f…'†ģIįB #=ģ‚ĘI'ūKLíB #‚dL<‚ZLi“ųB+8”Ru`†W…ųBųîģ‚f…|†ģIųB #ĩģ‚ĘI|ūKL˙B #‚dL‘‚ZLĻ“ C+8”Ru`ˆA„SAäO„–AäO„ BŠ{ „ÁBŠ{ ô1ô1ô1üPŊ@CŸœEŧ[Āûž“ļH‘Ąų`gåļ‘—˜DPĀ™Ōhōš™lŨjōŲ™đ\q %" ™jŽr %~ —°D;Ā˜is&'Ũ ’QasCĐDsķŧ‚`aI ‚`aI ‹čD™Ų–tAAŊ ™đâu[Ā —Eŋ˜jx&'G ’ŖcĖC(Ex^Ŋ‚˛cq ‚˛cq ‹HE™|yC:à ĨūŒz\F‘\™„Ŗ}%÷ ™k„% ™.q‰%A ™>K%a †…ö>D–ķŊ‚žö ‚”ö¯ ’W…DDhE—mž‚f…Ú †ģIDD #2ž‚ĘIÚ ŠKLJD€E #‚dLü ‚ZL “E+8”Ruŧ†W…”E—įž‚f…< †ģI”E #Ŧž‚ĘI< ūKLšE #‚dLQ ‚ZLf “ĒE+8”Ruŧ„Dō™ˆ†D„šDäO„˛DäO„ÍD&°†…öÕCvAŋ‚žöy ‚”ö™ ’W… E˜E˜ēŋ‚f…Ü †ģI E #€ŋ‚ĘIÜ ŠKL&E°E #‚dL ‚ZL:“aE+8”RuL†W…ĒE#˜3Ā‚f…X†ģIĒE #ųŋ‚ĘIXūKL°E #‚dLm‚ZL‚“ĀE+8”RuLˆĖC„tEŽ|„‡EŽ|„ÉEŠ{ ô1ŽÔ3āExœÆÁƒuA3´'‘—ČEģÁæ2â4H‘žtIúE4ŅĀø“IŸ‚†I•„Fč} ž˜ˇ F6´Á‚Ōˇî‚Æˇ5‚ēˇH‚°ˇ~‰Uˇ FāE%åˆÁ‚ƒˇî‚vˇ5‚iˇH‹āEŠ ˇ FāE ä‚;ˇî‚.ˇ5‚!ˇH‹āE„Fĸļ‡4‰F%å˙Z‰‚M‰§‚C‰Ōˆ>F„VFŠ{ áÖöīÁëstr )´'âîŧ& *´'áėöÂëstr ´'âîŧ& ´'ŦSĨ/3`Fiœ2Â%Ņûž“%Ņ‘ƒ˙Í/4´'‘ƒ /4 %‘š2/4´'đ—øEŅ:‡/5@[œā#/´'ø—hFyĘœa3/@\F‘D­„d/F%9‰ÆÁØFˆF/@íÄ‚ŅÁe‹ˆFŠāÁ†PTØF *čmT,‚aTe„ãF>| †˜ˇîF +åÄ‚ŌˇŽ‚ÆˇŽ‚ēˇÁ‚°ˇÔ‰UˇîF F%åŊÄ‚ƒˇŽ‚vˇŽ‚iˇÁ‹ FŠ ˇîF F ä‚;ˇŽ‚.ˇŽ‚!ˇÁ‹ F„ûFĸļ‡4‰ûF%å˙Z‰˙M‰‚C‰ôˆÜGžíG$/A Å‚‚üC„G‚G‰„æ+G¸F/B†Å‚¤æ‚šæ—‹¸F…b‘­P+GĐFƒ‚ÎP‚ÁPŦ„CGR$‰:äCGđF/BDÆ‚ZäŅ‚Päæ‹đF…b‘~aCGGƒ‚ąaŅ‚¤aû†ÕICG Ų 7Æ‚äIŅūģICG Õ‚ĘIŅūĄICG -‚°IŅ„YGR$‰ĄōYG8G/BĒÆ‚Áō ‚ˇō8‹8G…b‘­PYGXGƒ‚ÎP ‚ÁPM„qGR$‰W…qG€G/C!Į‚f…r’ģIqG G #诂ĘIrŠKLtG¸G #‚dL‡‚ZLœ“^H+8”RvîG:ŌĮit/Gw¯žvîG/HyĮ‚…ëū2„îG0X‚A„ë‰\HØG/GĸĮ‚k„ Hę$‡­bH/J‚āb‚ĶbG„!Höžŧ(H/QČ‚Õ\‚Ëq€(HŠä„:HLžW…=H/V{Č‚f…†’ģI=HđG #TČ‚ĘI†ŠKL@HH #‚dL›‚ZL°‰ĖįhH H/SáČ‚ėįÂâįÛ‹ H…b‘­PhH8Hƒ‚ÎPÂÁPđ„€HR$‰:ä€HXH/SŸÉ‚Zä‚Pä*‹XH…b‘~a€HxHƒ‚ąa‚¤a?†ÕI€H Ų ’É‚äIūģI€H Õ‚ĘIūĄI€H -‚°I„–HR$‰–H H/TĘ‚.d‚$|‹ H…b‘­P–H¸Hƒ‚ÎPd‚ÁP‘„ŽHR$‡W…%J/V‚f…ļ†ģI%J #?Ę‚ĘIļūKL+J #‚dLË‚ZLø“;J+8”R‘D‡īÁ‹G=/>‚úÁ €‹G= Â’PT‹GØH ÛĘ‚mT1‚aT „–G>| ūRSĢG #‚]S`„ˇGe„ ŧHŨJ͝it/XwžvŧH/Y\Ë‚…Čū2„ŧH0X‚A„ȉOōĐHđH/\ÂË‚oōā‚eō‹đH…b‘­PĐHIƒ‚ÎPā‚ÁP*„AIR$‰\āH(I/XëË‚kO„éHę$‰í I@I/[Ė‚g‚ü‰„I‚G‰W…IXI/[—Ė‚f…Ģ’ģIIxI #\Ė‚ĘIĢŠKLII #‚dLÍ‚ZLI+8”R‘ ‰ _GI°I/\áĖ‚)_ ‚_/‹ĐI˙)_‚_Q„[I­P‰bå[IđI/\CÍ‚‚åf˙xå‹đI…b‘­P[IJƒ‚ÎPf‚ÁP~„vIR$ˆIžĸãĨI/aŖÍ‚ÕãŖ‚Čãū­bĨI  ‚ābŖ‚Ķb„´Iö‰W…ŋI(J/`΂f…ˆģIŋI #áÍ‚ĘIËŠKLÅI@J #‚dLö‚ZL “ũI+8”R‘ žJĘI/=`΂[)‡áĶĘI0Z‚đĶ)„ØIwEžãØI /h¤Î‚ã>‡*iØI U‚9i>„äIqGžJJ/=č΂[S‡áĶJ0Z‚đĶS„JwEžãJ/h,Ī‚ãh‡*iJU‚9ih„JqGžW…CJ/`ŖĪ‚f…}†ģICJ #jĪ‚ĘI}ūKLIJ #‚dL’‚ZLŋ“VJ+8”R‘@žTdJ/cŪĪ‚+TŌūĄIdJ ‚°IŌ‰W…‡JXJ/cUĐ‚f…ō’ģI‡JpJ #Đ‚ĘIōūKLJ #‚dL‚ZL4“J+8”R‘@ž¯^ĒJ/etĐ„¯JĐ| žW…ąJ/cëĐøf…‘ †ģIąJ #˛ĐøĘI‘ ūKLˇJ #‚dLG‚ZLt“ÄJ+8”R‘@ˆĢF„ĨIy]„lJ”“„‡JJ‚ „§Jw} „#JŠ{ ķ6ô1Œ8!ĐJ@œkĶ‚C!‡—ˆJ`́R!Ā‹ JŠa!l!’PTK¸Jģ¨ŅmT@‚aTQ„ K>| ’˜ˇKĐJÁYŌ‚Ōˇo‚ÆˇŠ‚ēˇŌ˙°ˇ‘UˇKĐJ%傃ˇo‚vˇŠ‚iˇŌ‹ĐJŠ ˇKĐJ ä‚;ˇo‚.ˇŠ‚!ˇŌ‹ĐJ„%Kĸļ’W…9KčJÁÉŌ˙f…†ģI9K #Ō˙ĘIŠKLĨ„aĨ„„|¤„§Ĩ„ĘĨ„í|¤„Ĩ„3|¤„Vo‘„yo‘„œ|¤„ŋo‘„âĨ„|¤“̆ž”PuT„Ī/Ņ„ÕŠ{ •e÷@L!œÛĄc"_Æ:‘ĄN#_M‘‘„\LRו€÷ßœéÛW$ĀÄ[iŌĄÍybI‘’éR"@L{~Û‚øRy ‚Sˇ †­P—{ŽÛ‚ÎPß ˙ÁP„ŽR$„Uŝ„r„ ˆ—ˆļ„Ė=„ ˆׄߊ{ ߲ÁøÛ=Üāž“ęâîßíCKîĩWķoKîÉ[ôCKâîŪĶõ%üė¸pLųœUÜŪûž“ļH‘’ ę‡L`LēŪ‚ę!Šíé‡L`LĶ‚üé!ŠéÛ‡L`LŌ‚øÛ!‹`LÜ{!Ü™!Ü™!†§éŸLđûÜ‚ļéˇ!†ÁéŧLķ%Ũ‚Úé×!‚Đé"—€LÃŨ-ÜF"’­P M˜LõlŨøÎP| Ÿ˙ÁP„!MR$’­P!M°LõœŨ‚ÎPz"˙ÁP„8MR$„ØLz„ ˆ M„FM=ˆOMˆaM†§éáLöãŨ‚ļé’"„L⁠„ŸLÛ„ēL%| „iMŠ{ ü špM œ(Ūāûž“ļH‘ĄĄŋp@‘’Eę‡MČLĀõßø^ęō5Ū‚TęĨ"Š&ę‡MčLÔ‚5ęĨ"ŠéÛ‡MčLŅ‚øÛĨ"‹čLÜ#Ü7#Ü7#†§éĸMđëŪ‚ļéb#†ÁéÄMķß‚Úé‚#‚ĐéČ#—Mŗß-Üū#’­PN0Mõ\ßøÎP| Ÿ˙ÁP„1NR$’­P1NHMõŒß‚ÎP2$˙ÁP„HNR$„āMz„ ˆN„VN=ˆ_NˆqN†§éėMöĶß‚ļéJ$„M⁠„ŸMÛ„ÂM%| „yNŠ{ üJ€N\œā†āûž“†ā‘‹`M™Ä/ļHj$†#˙’N/\ā„—NÜū„ŠN=Ü„ĩNŪ„ÉNä„ÕNōáØHßÚā˛āāž“†āŪĄ‘09÷‹āi#āN7œÎāëāøšā‘ø¤ā‘„Oāßßúāáāž“†āŪĒ(xŪĄ‘(09÷ëāCT O7œ;áaáøúā‘øá‘øá‘„ROāßpá•áāž“†āāHÄ%âîÄ<ļH÷aáû•`O]œąáâøpá‘‹xM†áˆ$†#˙O<ęá„„OÜū„™OŪ„´Oōá÷aá˜ĀO(œâ6âøpᑈÚO„âO”{ ß%ĶEâPâāž“ō*÷6â˛đOPœlâČâøE⑞#˙P\”â„PÜū‰#˙#PM]ŗâ„.PÜū„#P=Ü„:PŪß;Ķ×âėâāž“ō*āHÄ%÷Čâ†ę@P9œã;ãø×⑞#˙bPb0ã„gPÜū„sPŪ÷Čâr€P(œWãqãø×⑈šP„ĸP”{ ¨ö>€Xœ,ä‚ ?Ļ$ø?‘‘aĨ¨Mg‚uĨŨ$‘W…¨M]‚f…Ũ$’KLČM # ä‚dL%‚ZL5%“L+8”R‘LūģI7 #‚ĘIŨ$ßņÎ;äFäāž“ ß\ĶUämäāž“Ēhë__x‘mäĒDß5dä™äāž“Öhë__x>™äÖ7ßâb­äÄäāž“Öué__nˇđáōå’HŽBxhŨčw…)DŽB踆)DŽBčC)EŨâæ>)GŨßcĪ-åSåIStrāž“ ŪĶˆSåâņi‰—cÖ7ß$Īgååāž“ Ū'\ƒ´'áŦ÷UæŪN#ę9DŪâ”ę %âîUPë…Īî˙ėžŽî|œ‚4îôk‚4î›%õûåî͜ %õCæî9%îå`Ę5î.!šKîŽÔ+Ę5îV,šKâî͜@ %ßĪdæ‡æāž“ āHÄ%âņi~ĪüøÔ°Py(œŸæ_Hûž“€‘—čMTH™ÄM>XS%™ŧN Uf%™5ÃPēVy%Ĩ˜ŦQ%‘čzĨt#Xų‘ }Ĩq%^\F‘ėzĨška\F‘đzĨUPf×Α°}î˙rŌ†#˙ĮPMkį„ĖPÜū†*˙ĪPO§į‚9˙S%ūaĪP˙‚"aÚ%†U]ņPTŅį‚d]đ%‚n]&’W…@QNYKč‚f…=&†ģI@Q #č‚ĘI=&ŠKLIQ(N #‚dLo&‚ZLĄ&“ûT+8”RuØz’W…UQ@NYÅč‚f…ŋ&†ģIUQ #Šč‚ĘIŋ&ŠKL^QXN #‚dL˙&‚ZL?'“ U+8”RuØz’W…jQpNY?é‚f…]'†ģIjQ #é‚ĘI]'ŠKLsQˆN #‚dL'‚ZLÁ'“ëT+8”RuØz’W…Q NYšé‚f…ß'†ģIQ #~é‚ĘIß'ŠKLˆQ¸N #‚dL(‚ZLC(“ÛT+8”RuØz’W…”QĐNY3ę‚f…a(†ģI”Q #øé‚ĘIa(ŠKLQčN #‚dL“(‚ZLÅ(“ËT+8”RuØz’W…ŠQOY­ę‚f…ã(†ģIŠQ #rę‚ĘIã(ŠKL˛QO #‚dL)‚ZL+)“ķR+8”RuØz’Ĩ˙žQ0OY×ę„ÃQ\„øR\’W…ŊRHOYPë‚f…I)’ģIŊR`O #ë‚ĘII)ūKLÉR #‚dLr)‚ZLŊ)“āR+8”Ru˜}’W…SxO\Ęë‚f…Đ)†ģIS #ë‚ĘIĐ)ŠKLSO #‚dL*‚ZL4*“[]+8”RuØz’W…%S¨O\Dė‚f…R*†ģI%S # ė‚ĘIR*ŠKL.SĀO #‚dL’*‚ZLŌ*“k]+8”RuØz’W…:SØO\žė‚f…đ*†ģI:S #ƒė‚ĘIđ*ŠKLCSđO #‚dL"+‚ZLT+“K]+8”RuØz’W…OSP\8í‚f…r+†ģIOS #ũė‚ĘIr+ŠKLXS P #‚dL¤+‚ZLÖ+“;]+8”RuØz’W…dS8P\˛í‚f…ô+†ģIdS #wí‚ĘIô+ŠKLmSPP #‚dL&,‚ZLX,“+]+8”RuØz’W…yShP\,î‚f…v,†ģIyS #ņí‚ĘIv,ŠKL‚S€P #‚dLš,‚ZLž,“U+8”RuØz’Ĩ˙ŽS˜P\Vî„“S\„ U\’W…‘T°P\Īî‚f…Ü,’ģI‘TČP #•î‚ĘIÜ,ūKLT# #‚dL-‚ZLi-“´T+8”Ru˜}’aZ0UāP`'ī‚pZ|-ŠT0UāPw‚+T‘-ŠĄI0UāP ‚°I‘-’{ZBUøP`ī‚ŠZĒ-ŠTBUøPt‚+TĒ-ŠĄIBUøP ‚°IĒ-—Qíī‚f…ŋ-’ģI$V0Q #ŗī‚ĘIŋ-ŠKL0VHQ #‚dL".‚ZLŒ.“l+8”Ru }—`Q\đ‚f…Ē.†ģI1‚ZLļ1“Jl+8”RuØz—đQŠņ‚f…Ô1†ģI{V #nņ‚ĘIÔ1ŠKL„VR #‚dLL2‚ZLÄ2“Zl+8”RuØz— Rō‚f…â2†ģIV #Ũņ‚ĘIâ2ŠKL™V8R #‚dLZ3‚ZLŌ3“jl+8”RuØz—PR‡ō‚f…đ3’ģIõWpR #Lō‚ĘIđ3ŠKLXˆR #‚dL‰4‚ZL5“zl+8”RuØz— Röō‚f…5†ģI X #ģō‚ĘI5ŠKLX¸R #‚dL—5‚ZL6“Šl+8”RuØz—ĐReķ‚f…-6†ģI"X #*ķ‚ĘI-6ŠKL+XčR #‚dLĨ6‚ZL7“šl+8”RuØz—SÔķ‚f…;7†ģI7X #™ķ‚ĘI;7ŠKL@XS #‚dLŗ7‚ZL+8“Ēl+8”RuØz—0SCô‚f…I8†ģILX #ô‚ĘII8ŠKLUXHS #‚dLÁ8‚ZL99“ēl+8”RuØz—`S˛ô‚f…W9†ģIaX #wô‚ĘIW9ŠKLjXxS #‚dLĪ9‚ZLG:“Ęl+8”RuØz—S!õ‚f…e:†ģIvX #æô‚ĘIe:ŠKLX¨S #‚dLŨ:‚ZLU;“Úl+8”RuØz—ĀSõ‚f…s;†ģI‹X #Uõ‚ĘIs;ŠKL”XØS #‚dLë;‚ZLc<“ęl+8”RuØz—đS˙õ‚f…<†ģI X #Äõ‚ĘI<ŠKLŠXT #‚dLų<‚ZLq=“úl+8”RuØz— Tnö‚f…=†ģIĩX #3ö‚ĘI=ŠKLžX8T #‚dL>‚ZL>“ m+8”RuØz—PTŨö‚f…>†ģIĘX #ĸö‚ĘI>ŠKLĶXhT #‚dL?‚ZL?“m+8”RuØz—€TL÷‚f…Ģ?†ģIßX #÷‚ĘIĢ?ŠKLčX˜T #‚dL#@‚ZL›@“*m+8”RuØz’W…ôX°TeÆ÷‚f…š@†ģIôX #‹÷‚ĘIš@ŠKLũXČT #‚dL1A‚ZLŠA“:m+8”RuØz’,ä YāTfŪø‚;äĮA’Fä YøTzø‚_ä?B‚UäˇB„GYh<’@YUypø‚OĮAŠͲYU‚ܲĮA‘ޞYU}‚Ŋ˛ĮAū”´ˆxy‚Ŗ´/CūĀŗˆxЂκ/C‡LŗŽx ˙[ŗ‚qŗEC‚eŗcCŊŽx’ŨJY0Ug9ü‹0UŠę’räOY`Um-ü‚‹ävC‚äĒC’ķbOY˜U@Jų˙c˙c’€ĐVY°U@Tú‚ĨĐD‚™Đ=D‚Đ“Dž‹ĻVY‡Ļų‚¤ĻD‚šĻ“D‘žäyY¸Uˆ‚ˇä=D‚­ä“D‘ĐyYØUš˙+Đ‚5Đ=D‹ØU‘ķĪp]āUĒ˙ūĪ‚ ĐũD‘ČĪp]āUMļ˙×Ī‚íĪ9E‚áĪũD„„]%| „o%’¸§°YøUDzû‚¨YE˙ø§˙ë§˙Ū§Šg§°YøU)˙œ§˙§˙„§‹øUǧÃE‘Ää°YøU)~˙ųä˙íä‚áäF‹øUå6FžĐĻĀY)Kû‚ųĻjF‚íĻ FˆÎYž‚ĨĄm)PWû‚ĸĨãF˙–Ĩ€Ąm„¯mö>„Ąm–‚ „ˇmĒ‚ „p°‚ ūņĨp!@‚ĻG‡á¤p ˙đ¤‚ĨG‚ú¤5G€p‡Ŧ¤$p˛˙ˇ¤‚ΤHG‚äfG‡¤$pMš˙¤‚ϤHG‚š¤fG„-p”{ „OY–ΆåũYUgōü‚7åyG‚-åĢG€ũYUFåŨG†6 Z Œ ü‚A  H„Z•„ ’ļ ZVŒÆü‚Ī,H˙ņ §GZ‰æü‚§LH„DZID†Xå`Z9hvũ‚qådH‚gå…H†6 `Z „Eũ‚A dH„lZ•„ ’ļrZ0V„kũ‚Ī I˙Å„™ZID’Xå™ZHViúũ‚qågI‚gåˆI†6 ™Z „Éũ‚A gI„¤Z•„ ’ļĒZ`V„īũ‚ĪJ˙Å„ÅZID’W…čZxVktū‚f…jJ’ģIčZ˜V #9ū‚ĘIjJŠKLôZ°V #‚dLK‚ZLŒK“vm+8”RuØz†˙[ p”ū„[w} ’å[ČVrH,‚—åĒK‚ŠåŋK‹ČVŸĻ周}ŗåÔKŸĀå‘Č}ŸÍå‘Ô~ÚåĩL—WøíåÛL’W…a\8W‚˙‚f…îL’ģIa\XW #H˙‚ĘIîLŠKLm\pW #‚dLM‚ZL6M“ ^+8”Ru€}’W…y\ˆWü˙‚f…TM†ģIy\ #Á˙‚ĘITMŠKL‚\ W #‚dLxM‚ZLœM“û]+8”RuĖz’W…Ž\¸Wv‚f…ēM†ģIŽ\ #;‚ĘIēMŠKL—\ĐW #‚dLŪM‚ZLN“ë]+8”RuĖz’W…Ŗ\čWđ‚f… N†ģIŖ\ #ĩ‚ĘI NŠKLŦ\X #‚dLDN‚ZLhN“Û]+8”RuĖz’W…¸\Xj‚f…†N†ģI¸\ #/‚ĘI†NŠKLÁ\0X #‚dLĒN‚ZLÎN“Ë]+8”RuĖz’W…Í\HXä‚f…ėN†ģIÍ\ #Š‚ĘIėNŠKLÖ\`X #‚dLO‚ZL4O“ģ]+8”RuĖz’W…â\xX^‚f…RO†ģIâ\ ##‚ĘIROŠKLë\X #‚dLvO‚ZLšO“Ŗ]+8”RuĖz†W…÷\)Ø‚f…¸O†ģI÷\ #‚ĘI¸OūKL] #‚dLÎO‚ZLäO“]+8”RuÔz†W…oQ‚f…÷O†ģIo #‚ĘI÷OūKL(o #‚dL P‚ZL ‚f…ÉT†ģIĪ^ # ‚ĘIÉTŠKLØ^€Y #‚dLíT‚ZLU“;`+8”RuĖz’W…ä^˜Y#¸ ‚f…/U†ģIä^ #} ‚ĘI/UŠKLí^°Y #‚dLSU‚ZLwU“+`+8”RuĖz’W…ų^ČY#2 ‚f…•U†ģIų^ #÷ ‚ĘI•UŠKL_āY #‚dLšU‚ZLŨU“`+8”RuÔz†Ĩ˙_#R „_\’W…æ_øY#Ė ‚f…ûU’ģIæ_Z #‘ ‚ĘIûUūKLō_ #‚dLV‚ZL=V“ `+8”RuĖz’W…¨`(Z/F ‚f…PV†ģI¨` # ‚ĘIPVŠKLą`@Z #‚dLtV‚ZL˜V“‹b+8”RuĖz’W…Ŋ`XZ/Ā ‚f…ļV†ģIŊ` #… ‚ĘIļVŠKLÆ`pZ #‚dLčV‚ZLW“›b+8”RuĖz’W…Ō`ˆZ/: ‚f…8W†ģIŌ` #˙ ‚ĘI8WŠKLÛ` Z #‚dL\W‚ZL€W“{b+8”RuĖz’W…į`¸Z/´ ‚f…žW†ģIį` #y ‚ĘIžWŠKLđ`ĐZ #‚dLÂW‚ZLæW“kb+8”RuĖz’W…ü`čZ/. ‚f…X†ģIü` #ķ ‚ĘIXŠKLa[ #‚dL(X‚ZLLX“[b+8”RuĖz’W…a[/¨ ‚f…jX†ģIa #m ‚ĘIjXŠKLa0[ #‚dLŽX‚ZL˛X“Kb+8”RuÔz†Ĩ˙&a/Č „+a\’W…bH[/B‚f…ĐX’ģIb`[ #‚ĘIĐXūKLb$ #‚dLîX‚ZLY“3b+8”RuĖz’W…Øbx[4ŧ‚f…%Y†ģIØb #‚ĘI%YŠKLáb[ #‚dLIY‚ZLmY“ģd+8”RuĖz’W…íb¨[46‚f…‹Y†ģIíb #û‚ĘI‹YŠKLöbĀ[ #‚dLŊY‚ZLīY“Ëd+8”RuĖz’W…cØ[4°‚f… Z†ģIc #u‚ĘI ZŠKL cđ[ #‚dL1Z‚ZLUZ“Ģd+8”RuĖz’W…c\4*‚f…sZ†ģIc #ī‚ĘIsZŠKL c \ #‚dL—Z‚ZLģZ“›d+8”RuĖz’W…,c8\4¤‚f…ŲZ†ģI,c #i‚ĘIŲZŠKL5cP\ #‚dLũZ‚ZL![“‹d+8”RuĖz’W…Ach\4‚f…?[†ģIAc #ã‚ĘI?[ŠKLJc€\ #‚dLc[‚ZL‡[“{d+8”RuÔz†Ĩ˙Vc4>„[c\’W…Ed˜\4¸‚f…Ĩ[’ģIEd°\ #}‚ĘIĨ[ūKLQd #‚dLÃ[‚ZLį[“hd+8”RuĖz†W…7p/2‚f…ú[†ģI7p #÷‚ĘIú[ūKL@p #‚dL\‚ZL&\“Sp+8”RuĖz†W…Sp/Ŧ‚f…9\†ģISp #q‚ĘI9\ūKL\p #‚dLO\‚ZLe\“op+8”RuĖz†W…op$/‚f…x\†ģIop #ë‚ĘIx\ūKLxp #‚dLŽ\‚ZL¤\†W…“p#Œ‚f…ˇ\†ģI“p #Q‚ĘIˇ\ūKLœp #‚dLÍ\‚ZLã\“¯p+8”RuĖz†W…¯p#‚f…ö\†ģI¯p #Ë‚ĘIö\ūKL¸p #‚dL ]‚ZL"]“Ëp+8”RuĖz†W…Ëp#€‚f…5]†ģIËp #E‚ĘI5]ūKLÔp #‚dLK]‚ZLa]“įp+8”RuĖz†W…įp#ú‚f…t]†ģIįp #ŋ‚ĘIt]ūKLđp #‚dLŠ]‚ZL ]“q+8”RuĖz†W…q#t‚f…ŗ]†ģIq #9‚ĘIŗ]ūKL q #‚dLÉ]‚ZLß]“q+8”RuĖz†W…q#î‚f…ō]†ģIq #ŗ‚ĘIō]ūKL(q #‚dL^‚ZL^“;q+8”RuĖz†W…;q:#T‚f…1^†ģI;q #-‚ĘI1^ūKLDq1 #‚dLG^‚ZL]^†W…“t4΂f…p^†ģI“t #“‚ĘIp^ūKLœt #‚dL†^‚ZLœ^“¯t+8”RuĖz†W…¯t4H‚f…¯^†ģI¯t # ‚ĘI¯^ūKL¸t #‚dLÅ^‚ZLÛ^“Ët+8”RuĖz†W…Ët4‚f…î^†ģIËt #‡‚ĘIî^ūKLÔt #‚dL_‚ZL_“įt+8”RuĖz†W…įt4<‚f…-_†ģIįt #‚ĘI-_ūKLđt #‚dLC_‚ZLY_“u+8”RuĖz†W…u4ļ‚f…l_†ģIu #{‚ĘIl_ūKL u #‚dL‚_‚ZL˜_“u+8”RuĖz†W…u40‚f…Ģ_†ģIu #õ‚ĘIĢ_ūKL(u #‚dLÁ_‚ZL×_“;u+8”RuĖz†W…;u:4–‚f…ę_†ģI;u #o‚ĘIę_ūKLDu1 #‚dL`‚ZL`†W…uu/‚f…)`†ģIuu #Õ‚ĘI)`ūKL~u #‚dL?`‚ZLU`“‘u+8”RuĖz†W…‘u/Š‚f…h`†ģI‘u #O‚ĘIh`ūKLšu #‚dL~`‚ZL”`“­u+8”RuĖz†W…­u/‚f…§`†ģI­u #É‚ĘI§`ūKLļu #‚dLŊ`‚ZLĶ`“Éu+8”RuĖz†W…Éu3/~‚f…æ`†ģIÉu #C‚ĘIæ`ūKLŌu* #‚dLü`‚ZLa“éu+8”RuĖz„7^%} „G^ۄ „`^į„ „)_ŝ„X_âoˆr_„‰_čž„Ÿ_čž„´_œ)„Ę_čž„ā_čž„æ_i˙„Saŝ„‚aâoˆœa„ŗačž„Éačž„Ūaœ)„ôačž„ bčž„bi˙„ēb… „wc@… „ˆcŝ„ˇcâoˆŅc„čcčž„ūcčž„dœ)„)dčž„?dčž„Edi˙„DmzŠ„Sm?} „DrO} —Č\Ü$Eæ%a’W…Ũeč\@_‚f…8a’ģIŨe] #$‚ĘI8aŠKLée ] #‚dLKa‚ZLaa“›f+8”RuĖz’W…õe8]@Ų‚f…a†ģIõe #ž‚ĘIaŠKLūeP] #‚dLŖa‚ZLĮa“ûf+8”RuĖz’W… fh]@S‚f…åa†ģI f #‚ĘIåaŠKLf€] #‚dL b‚ZL-b“ëf+8”RuĖz’W…f˜]@Í‚f…Kb†ģIf #’‚ĘIKbŠKL(f°] #‚dLob‚ZL“b“Ûf+8”RuĖz’W…4fČ]@G‚f…ąb†ģI4f # ‚ĘIąbŠKL=fā] #‚dLÕb‚ZLųb“Ëf+8”RuĖz’W…Efø]@Á‚f…c†ģIEf #†‚ĘIcŠKLNf^ #‚dL;c‚ZL_c“ģf+8”RuĖz’W…Vf(^@; ‚f…}c†ģIVf # ‚ĘI}cŠKL_f@^ #‚dLĄc‚ZLÅc“Ģf+8”RuĖz†W…gf)@ĩ ‚f…ãc†ģIgf #z ‚ĘIãcūKLpf #‚dLųc‚ZLd“‡f+8”RuÔz†W…‹s@/!‚f…"d†ģI‹s #ô ‚ĘI"dūKL”s #‚dL8d‚ZLNd“§s+8”RuĖz†W…§s@Š!‚f…ad†ģI§s #n!‚ĘIadūKL°s #‚dLwd‚ZLd“Ãs+8”RuĖz†W…Ãs@#"‚f… d†ģIÃs #č!‚ĘI dūKLĖs #‚dLļd‚ZLĖd“ßs+8”RuĖz†W…ßs@"‚f…ßd†ģIßs #b"‚ĘIßdūKLčs #‚dLõd‚ZL e“ûs+8”RuĖz†W…ûs@#‚f…e†ģIûs #Ü"‚ĘIeūKLt #‚dL4e‚ZLJe“t+8”RuĖz†W…t@‘#‚f…]e†ģIt #V#‚ĘI]eūKL t #‚dLse‚ZL‰e“3t+8”RuĖz†W…3t@ $‚f…œe†ģI3t #Đ#‚ĘIœeūKLf‚ZLbf“ûh+8”RuĖz’W…=gˆ^Dđ%‚f…€f†ģI=g #ĩ%‚ĘI€fŠKLFg ^ #‚dL˛f‚ZLäf“ i+8”RuĖz’W…Rg¸^Dj&‚f…g†ģIRg #/&‚ĘIgŠKL[gĐ^ #‚dL&g‚ZLJg“ëh+8”RuĖz’W…ggč^Dä&‚f…hg†ģIgg #Š&‚ĘIhgŠKLpg_ #‚dLŒg‚ZL°g“Ûh+8”RuĖz’W…|g_D^'‚f…Îg†ģI|g ##'‚ĘIÎgŠKL…g0_ #‚dLōg‚ZLh“Ëh+8”RuĖz’W…‘gH_DØ'‚f…4h†ģI‘g #'‚ĘI4hŠKLšg`_ #‚dLXh‚ZL|h“ģh+8”RuÔz†Ĩ˙ĻgDø'„Ģg\’W…~hx_Dr(‚f…šh’ģI~h_ #7(‚ĘIšhūKLŠh& #‚dL¸h‚ZLÜh“Ąh+8”RuĖz’W…øo¨_Dė(‚f…īh’KLøoĀ_ #Ī(‚dLi‚ZLi“p+8”RuÔzūģIQs #‚ĘIīh†W…ŠrDf)‚f….i†ģIŠr #+)‚ĘI.iūKL˛r #‚dLDi‚ZLZi“År+8”RuĖz†W…ÅrDā)‚f…mi†ģIÅr #Ĩ)‚ĘImiūKLÎr #‚dLƒi‚ZL™i“ár+8”RuĖz†W…árDZ*‚f…Ŧi†ģIár #*‚ĘIŦiūKLęr #‚dLÂi‚ZLØi“ũr+8”RuĖz†W…ũrDÔ*‚f…ëi†ģIũr #™*‚ĘIëiūKLs #‚dLj‚ZLj“s+8”RuĖz†W…sDN+‚f…*j†ģIs #+‚ĘI*jūKL"s #‚dL@j‚ZLVj“5s+8”RuĖz†W…5sDČ+‚f…ij†ģI5s #+‚ĘIijūKL>s #‚dLj‚ZL•j“Qs+8”RuĖz„D[Z… „Ágŝ„đgâoˆ h„!hčž„7hčž„Lhœ)„bhčž„xhčž„~hi˙„Ķk°ƒ „īk•„ûkHƒ —Ø_n4™͜s %¨j’W…jø_sŨ,‚f…ģj’ģIj` #ĸ,‚ĘIģjŠKL"j0` #‚dLÎj‚ZLäj“Ûj+8”Ruāz’W….jH`sW-‚f…k†ģI.j #-‚ĘIkŠKL7j`` #‚dL&k‚ZLJk“;k+8”Ruāz’W…Cjx`sŅ-‚f…hk†ģICj #–-‚ĘIhkŠKLLj` #‚dLŒk‚ZL°k“+k+8”Ruāz’W…Xj¨`sK.‚f…Îk†ģIXj #.‚ĘIÎkŠKLajĀ` #‚dLōk‚ZLl“k+8”Ruāz’W…mjØ`sÅ.‚f…4l†ģImj #Š.‚ĘI4lŠKLvjđ` #‚dLXl‚ZL|l“ k+8”Ruāz’W…‚jas?/‚f…šl†ģI‚j #/‚ĘIšlŠKL‹j a #‚dLžl‚ZLâl“ûj+8”Ruāz’W…“j8asš/‚f…m†ģI“j #~/‚ĘImŠKLœjPa #‚dL$m‚ZLHm“ëj+8”Ruāz†W…¤j,s30‚f…fm†ģI¤j #ø/‚ĘIfmūKL­j# #‚dL|m‚ZL’m“Äj+8”Ruāz†W…šms­0‚f…Ĩm†ģIšm #r0‚ĘIĨmūKLÂm #‚dLģm‚ZLŅm“Õm+8”Ruāz†W…Õms'1‚f…äm†ģIÕm #ė0‚ĘIämūKLŪm #‚dLúm‚ZLn“ņm+8”Ruāz†W…ņmsĄ1‚f…#n†ģIņm #f1‚ĘI#nūKLúm #‚dL9n‚ZLOn“ n+8”Ruāz†W… ns2‚f…bn†ģI n #ā1‚ĘIbnūKLn #‚dLxn‚ZLŽn“)n+8”Ruāz†W…)ns•2‚f…Ąn†ģI)n #Z2‚ĘIĄnūKL2n #‚dLˇn‚ZLÍn“En+8”Ruāz†W…Ens3‚f…ān†ģIEn #Ô2‚ĘIānūKLNn #‚dLön‚ZL o“an+8”Ruāz†W…ans‰3‚f…o†ģIan #N3‚ĘIoūKLjn #‚dL5o‚ZLKo“}n+8”Ruāz†W…}ns4‚f…^o†ģI}n #Č3‚ĘI^oūKL†n #‚dLto‚ZLŠo“™n+8”Ruāz„;iU€ „HiŽ~ „riâoˆŒi„Ŗičž„šičž„Îiœ)„äičž„úičž„jčž„ji˙†Ĩ˙ isŽ4„%i\’{]@khat´4‚Š]o˙”]’]Ik€auŪ4‚$]ąo‚.]Åo’UæLk af“6‚dæÚo—¸aÄ5zæp†äŗLk~W5‚ķŗÚoūrLk$‚ļrÚo‚Ŧrep†2´bk~™5‚A´pūrbk6‚ļrŗp˙Ŧr†´uk~š5‚'´Ép„}k‘ ū”´Žk}‚Ŗ´ápūĀŗŽkЂκáp‡LŗŽk ˙[ŗ‚qŗ!q‚eŗ?q€Žk‡ŗ’k ˛˙"ŗ‚:ŗRq‚.ŗpq‡ė˛’k Mš˙û˛‚ŗRq‚ŗpq„›k”{ † [kvŊ6‚&ƒq‚¯q’W…žkĐae77‚f…Ãq†ģIžk #ü6‚ĘIÃqŠKL§kča #‚dLr‚ZLCr“fm+8”RuØz’W…ŗkbwą7‚f…ar†ģIŗk #v7‚ĘIarŠKLŧkb #‚dL“r‚ZLÅr“ l+8”RuØz†Uæ™n>fb9‚dæãr™n.›8zæųr†äŗ™n~.8‚ķŗãrūr™n$‚ļrãr‚Ŧr*s†2´Ÿn~p8‚A´BsūrŸn6‚ļrXs˙Ŧr†´Žn~8‚'´ns„ļn‘ ū”´Įn}‚Ŗ´†sūĀŗĮnЂκ†s‡LŗĮn ˙[ŗ‚qŗœs‚eŗēs€Įn‡ŗËn ˛˙"ŗ˙:ŗ‚.ŗÍs‡ė˛Ën Mš˙û˛˙ŗ‚ŗÍs„Ôn”{ †W…×neÜ9‚f…ās†ģI×n #Ą9‚ĘIāsūKLān #‚dLös‚ZL t“ķn+8”Ru¸z†W…ķn%wU:‚f…t†ģIķn #:‚ĘItūKLün #‚dL5t‚ZLdt“o+8”Ruīz†W…uq%kĪ:‚f…wt†ģIuq #”:‚ĘIwtūKL~q #‚dLt‚ZLŖt“•q+8”RuØz†W…´q'\H;‚f…ļt†ģI´q #;‚ĘIļtūKLŊq #‚dLĖt‚ZLût“Ôq+8”Ru˜}†W…Ûq \Á;‚f…u†ģIÛq #‡;‚ĘIuūKLäq #‚dL$u‚ZLSu“÷q+8”Ru˜}†W…ûq \:<‚f…fu†ģIûq #<‚ĘIfuūKLr #‚dL|u‚ZLĢu“r+8”Ru˜}†W…r\ŗ<‚f…žu†ģIr #y<‚ĘIžuūKL$r #‚dLÔu‚ZLv“7r+8”Ru˜}†W…üu'\,=‚f…v†ģIüu #ō<‚ĘIvūKLv #‚dL,v‚ZL[v“v+8”Ru˜}†W…#v \Ĩ=‚f…nv†ģI#v #k=‚ĘInvūKL,v #‚dL„v‚ZLŗv“?v+8”Ru˜}†W…Cv:\>‚f…Æv†ģICv #ä=‚ĘIÆvūKLLv1 #‚dLÜv‚ZL w“_v+8”Ru˜}}v'>‚f…w†ģI}v #V>‚ĘIwūKL†v #‚dL4w‚ZLcw“v+8”Ru }¤v ?‚f…vw†ģI¤v #Č>‚ĘIvwūKL­v #‚dLŒw‚ZLģw“Āv+8”Ru }Ävu?‚f…Îw†ģIÄv #:?‚ĘIÎwūKLÍv #‚dLäw‚ZLúw“āv+8”RuØzāvč?‚f… x†ģIāv #­?‚ĘI xūKLév #‚dL#x‚ZL9x“üv+8”RuØzüv[@‚f…Lx†ģIüv # @‚ĘILxūKLw #‚dLbx‚ZLxx“w+8”RuØzwÎ@‚f…‹x†ģIw #“@‚ĘI‹xūKL!w #‚dLĄx‚ZLˇx“4w+8”RuØz4wAA‚f…Ęx†ģI4w #A‚ĘIĘxūKL=w #‚dLāx‚ZLöx“Pw+8”RuØzPw'´A‚f… y†ģIPw #yA‚ĘI yūKLYw #‚dLy‚ZL5y“pw+8”RuØzww''B‚f…Hy†ģIww #ėA‚ĘIHyūKL€w #‚dL^y‚ZLty“—w+8”RuØzžw šB‚f…‡y†ģIžw #_B‚ĘI‡yūKL§w #‚dLy‚ZLŗy“ēw+8”RuØzžw C‚f…Æy†ģIžw #ŌB‚ĘIÆyūKLĮw #‚dLÜy‚ZLōy“Úw+8”RuØzŪw €C‚f…z†ģIŪw #EC‚ĘIzūKLįw #‚dLz‚ZL1z“úw+8”RuØzūw ķC‚f…Dz†ģIūw #¸C‚ĘIDzūKLx #‚dLZz‚ZLpz“x+8”RuØzx fD‚f…ƒz†ģIx #+D‚ĘIƒzūKL'x #‚dL™z‚ZL¯z“:x+8”RuØz>xJŲD‚f…Âz†ģI>x #žD‚ĘIÂzūKLGxA #‚dLØz‚ZLîz“Zx+8”RuØz¤x'KE‚f…{†ģI¤x #E‚ĘI{ūKL­x #‚dL{‚ZLF{“Äx+8”Ru }Ëx ŊE‚f…Y{†ģIËx #ƒE‚ĘIY{ūKLÔx #‚dLo{‚ZLž{“įx+8”Ru }ëx /F‚f…ą{†ģIëx #õE‚ĘIą{ūKLôx #‚dLĮ{‚ZLö{“y+8”Ru } yŖFøf…uÜ~Ÿ†ģI y #iFøĘIuÜ~ŸūKLy #‚dL |‚ZL8|“'y+8”Ru }„ÔQšƒ „åQŝ„Râoˆ+R„GRčž„_Rčž„vRœ)„”Rčž„ˇRčž„ŊRi˙„­Su… „žSŝ„ęSâoˆ˙S„Tčž„3Tčž„JTœ)„hTčž„‹Tčž„‘Ti˙ˆcU„„Učž„§Učž„ÎUčž„îUčž„Včž„$Včž„ÃVâo„ŪVâo„ųVâoˆW„0Wčž„FWčž„[Wčž„pWčž„ŒWčž„ĄWœ)„ļWčž„ËWœ)„āWčž„õWœ)ˆ`ZˆāZ„čZΨ„[žēˆĒq„oŠ{ ßyjwHĢH’HB‘āž“ÖhŪw…—B‘Ū¸†—B‘ë__a˜ĢHôĘ7áÎōI’HB‘xhŨčw…)DB‘踆)DB‘čC)EŨâæ>)GŨ•Ž/0yōœvT–isūvTK|†­bIy ˙]Iøābž Ÿ‚Ķb&}„Vyö†­bay‘I‚āb~‚ĶbY~„qyö†­bxyÅI‚āb‚Ķb@„ˆyö†Ō¨y J‚œŌēūŧu¨y‚Ëuē‡u¨y}‚Ŧuē’ģúĐy0b M‚ĐúŲŠ_HĐyPbú˙›H‚ŽH€‚HŲ‚wHI€’<úĐypb™ˇJ˙Uú‚KúI€‘‹ĻĐypb€˙¤Ļ‚šĻI€‹ˆbŠøųĶyˆb‚'úu€‚ú­€‚ú個ˆbŠĻųĶyˆbī‚Õųu€‚Čų­€‚žų個ˆbéų’ĐĶy°bĀK‚+Đ倂5Ё‹°b‘ķĪĶy°bĒ‚ūĪ倂 Ё‘ČĪĶy°bMļ‚×Ī倂íĪ=‚á΁„ņy%| Š!ųzØb ‚nųi‚aų•‚Tųˁ‚Gų‚ŠĐøzØb)‚ų•‚ųøˁ‚íø‚‹Øbų<‚‘°HzØb)~‚åH•‚ŲHˁ‚ÍHh‚‹ØbķHĄ‚ž•øz)KĨL‚žøʂ‚˛øƒˆ#zž‚Ĩ˛{ )PãL‚ĸĨ6ƒ‚–ĨTƒ€˛{ „Ŋ{ö>„˛{–‚ „Å{Ē‚ „|°‚ ’ģú1zc´P‚ĐútƒŠ_H1z(cú˙›H‚ŽHœƒ‚Htƒ‚wHă—PcšOŠøų1zPc‚'úûƒ‚ú#„‚úK„‹PcŠĻų1zPcī‚Õųûƒ‚Čų#„‚žųK„‹Pcéų‚„’Đ{xcnN‚+ĐK„‚5Đ‚„‹xc‘ķĪ{xcĒ‚ūĪK„‚ Đ‚„‘ČĪ{xcMļ‚×ĪK„‚íĪĸ„‚áĪ‚„„1{%| Š!ųA{ c ‚nų„‚aųî„‚Tų%…‚Gų]…ŠĐøA{ c)‚ųî„‚ųø%…‚íø]…‹ cų•…‘°HA{ c)~‚åHî„‚ŲH%…‚ÍHÁ…‹ cķHī…ž•øP{)KSO‚žø†‚˛øC†ˆc{ž‚ĨĐ{ )P‘O‚ĸĨy†‚–Ĩ—†€Đ{ „Û{ö>„Đ{–‚ „ã{Ē‚ „ė{°‚ ’<ú{Āc™P˙Uú‚Kúă‘‹Ļ{Āc€˙¤Ļ‚šĻăūņĨ‹{™‚ώ†‡á¤{ ˙đ¤‚Ĩˆ‚ú¤ë†€{‡Ŧ¤”{˛˙ˇ¤‚Τū†‚䇇¤”{Mš˙¤‚Ϥū†‚𤇄{”{ ’}úHzØcĨS‚’ú1‡Š_HHzøcú˙›H‚ŽHy‡‚H1‡‚wHÁ‡’<úHzd™OQ˙Uú‚KúÁ‡‘‹ĻHzd€˙¤Ļ‚šĻÁ‡‹0dŠøųKz0d‚'úø‡‚ú@ˆ‚úˆˆ‹0dŠĻųKz0dī‚Õųø‡‚Čų@ˆ‚žųˆˆ‹0déųŋˆ’ĐKzXdXR‚+Đˆˆ‚5Đŋˆ‹Xd‘ķĪKzXdĒ‚ūĪˆˆ‚ Đŋˆ‘ČĪKzXdMļ‚×Īˆˆ‚íĪ÷ˆ‚áĪŋˆ„iz%| Š!ųyz€d ‚nų/‰‚aų[‰‚Tų’‰‚GųʉŠĐøyz€d)‚ų[‰‚ųø’‰‚íøʉ‹€dųŠ‘°Hyz€d)~‚åH[‰‚ŲH’‰‚ÍH.Š‹€dķH\Šž•øz)K=S‚žø…Š‚˛ø°ŠˆŖzž‚Ĩ÷{ )P{S‚ĸĨ抂–Ĩ‹€÷{ „|ö>„÷{–‚ „ |Ē‚ „|°‚ ’~ađz¨d1T‚ąa$‹‚¤a7‹†ÕIđz Ų &T‚äI$‹ūģIđz Õ‚ĘI$‹ūĄIđz -‚°I$‹„˙zR$„yŝˆÍz„áz­P„đz­Pˆ{ˆ{„‰{Š{ „Š{Š{ ô1á #ĀTÃ$ŽBI_TpŪw… ģŽBŪ¸† ģŽBŪ K ŧĀTŪ0|2œ}\ĄOė p7‘Ąļà }\‘Ąa3Ä ‚\‘Ą‘/Å ‡\‘ —Ādr\™.Æ Œ\J‹†{TW|É –U‚˛T‚‹‚ĨTĸ‹‚˜TŌ‹ūÚ¨W| Ä˙Š˙Š˙÷¨„o|1Ž’%§o|čdÉ ¸U˙O§˙B§’­PŠ|eÉ čU‚ÎPč‹˙ÁP„Ā|R$’­PĀ| eË V‚ÎPŒ˙ÁP„×|R$’~a×|@eË  V‚ąa(Œ˙¤a†ÕI×| Ų •V‚äI(ŒūģI×| Õ‚ĘI(ŒūĄI×| -‚°I(Œ„ë|R$’­Pí|`eË ÔV‚ÎP<Œ‚ÁPTŒ„}R$’~a}€eË \W‚ąatŒ˙¤a’ÕI} e Ų QW‚äItŒŠģI}¸e Õ‚ĘItŒŠĄI}Đe -‚°ItŒ„}R$’­P}čeĖ W‚ÎPˆŒ‚ÁP Œ„(}R$’—ņ4}fÎ ēW‚ĸņŗŒ„H},J’­PI}fÎ îW‚ÎPߌ‚ÁP„[}R$’~a[}8fÎ fX˙ąa˙¤a†ÕI[} Ų [X˙äIūģI[} Õ˙ĘIūĄI[} -˙°I„l}R$’­Pn}XfÎ šX‚ÎP'‚ÁP?„€}R$’~a€}xfÎ "Y‚ąa]˙¤a†ÕI€} Ų Y‚äI]ūģI€} Õ‚ĘI]ūĄI€} -‚°I]„}R$’­P}˜fÎ VY‚ÎP—‚ÁP¯„ĸ}R$’W…ĸ}¸fÎ ÎY‚f…’ģIĸ}Øf #•Y‚ĘIŠKLĨ}đf #‚dLü‚ZL+Ž“~+8”RuT†Ō>š}RÎ š[‚á>IކąĨŋ}<¨[‚æĨkŽ‚ÚĨŽ‚ÎĨ Ž‡‚Ĩŋ}<—‚ĸĨŽ‚–Ĩ Ž€ŋ}<‡ö>ŋ}<~‚?Ž‚ ?ŗŽ‘aĨ×}gg‚uĨŪŽ‘W…×}g]‚f…ŪŽ†ģI×} #ÆZ‚ĘIŪŽŠKLÜ}0g #‚dL‚ZL8“î}+8”RuŧūņĨû}Š‚ĻV‡á¤û} ˙đ¤‚Ĩx‚ú¤”€û}‡Ŧ¤˙} ˛˙ˇ¤‚Τ§‚äχ¤˙} Mš˙¤‚Ϥ§‚š¤Ï„~”{ †W…8~Î 1\‚f…֏†ģI8~ #ø[‚ĘI֏ūKL>~ #‚dL돂ZL“N~+8”RuTŗT|IO\”Pw”Ru „„|ŝˆŠ|ˆ1}ˆ.~ˆ]~„6~Š{ ô1ô1ô1Ö7•GŪp~ œ/wĄOėĶ p7‘ĄđâÔ ´'‘Ą|Õ /w‘—Pg$w™Ą‘Ö 4w+ĨŌp× \F‘”™_1ë %†‡m‡~ Ö 2]‚–m됒W…pgÚ Ŧ]‚f…<‘’ģIg #q]‚ĘI<‘ŠKL¨g #‚dLؑ‚ZLU’“‹„+8”Ruđ~’W…,ČgÚ &^‚f…ƒ’’ģI,āg #ë]‚ĘIƒ’ŠKL2øg #‚dLĻ’‚ZLȒ“¤„+8”Ruđ~†<`: Ü ž^‚K`æ’†é_:„e^‚ø_“ūTD…‚+Tf“ūĄID ‚°If“’W…ˆhŪ _‚f…ˆ“’ģIˆ0h #Ũ^‚ĘIˆ“ŠKL‘Hh #‚dLĻ“‚ZLȓ“_…+8”Ruđ~’W…™`hŪ ’_‚f…擆ģI™ #W_‚ĘI擊KLŸxh #‚dL ”‚ZL,”“o…+8”Ruđ~†"`§ ā `‚1`J”†é_§|Ņ_‚ø_^”ūTą}‚+Tv”ūĄIą ‚°Iv”’W…õhá „`‚f…˜”’ģIõ°h #I`‚ĘI˜”ŠKLūČh #‚dLZLؔ“O…+8”Ruđ~’W…€āhá ū`‚f…ö”†ģI€ #Ã`‚ĘIö”ŠKL €øh #‚dL•‚ZL<•“?…+8”Ruđ~’W…h€iå xa‚f…Z•’ģIh€0i #=a‚ĘIZ•ŠKLq€Hi #‚dLö•‚ZLs–“´„+8”Ruđ~’W…y€`iå ōa‚f…Ą–’ģIy€xi #ˇa‚ĘIĄ–ŠKL€i #‚dLĖ‚ZLæ–“̈́+8”Ruđ~’W…Ė€¨iį lb‚f…—’ģIĖ€Či #1b‚ĘI—ŠKLՀāi #‚dLt—‚ZLä—“Ũ„+8”Ruđ~’W…Ũ€øiį æb‚f…˜’ģIŨ€j #Ģb‚ĘI˜ŠKLã€(j #‚dL4˜‚ZLV˜“ö„+8”Ruđ~’W…3@jč `c‚f…t˜’ģI3`j #%c‚ĘIt˜ŠKL<xj #‚dLʘ‚ZL ™“…+8”Ruđ~’W…Djč Úc‚f…P™’ģID¨j #Ÿc‚ĘIP™ŠKLJĀj #‚dLp™‚ZL’™“…+8”Ruđ~’~adØjé fd‚ąa°™‚¤aš†ÕId Ų [d‚äI°™ūģId Õ‚ĘI°™ūĄId -‚°I°™„tR$’W…tøjé ād‚f…&š’ģItk #Ĩd‚ĘI&šŠKL}0k #‚dL|š‚ZLԚ“/…+8”Ruđ~—HkĀo˜iė %đš—hkĩoî`ķí 9w—˜kĒoĨpŋō ´‘@Ĩ>ô ´‘DĨ`yø ´‘T†Đ^¨ķ Ųe‚ß^E›‡6T¨M‚ETš›ūÕI¨ 6‚äIš›ūģI¨ Õ‚ĘIš›ūĄI¨ -‚°Iš›’ãúȁČkô 0f‚ōúũ›‘TȁČkU‚+TRœŠĄIȁČk ‚°IRœ’W…‚ākô Ēf‚f…ĩœ’ģI‚l #of‚ĘIĩœŠKL ‚l #‚dLņœ‚ZL-“̃+8”Ruđ~’—ņ-‚0lö Ôf‚ĸņK„A‚,J’­PB‚Plõ g‚ÎP‡‚ÁPߝ„T‚R$’~aT‚plö g‚ąa˙˙¤a†ÕIT‚ Ų …g‚äI˙ūģIT‚ Õ‚ĘI˙ūĄIT‚ -‚°I˙„f‚R$’­Pf‚l÷ Äg‚ÎP;ž‚ÁPƒž„x‚R$’W…x‚°lö >h‚f…–ž’ģIx‚Đl #h‚ĘI–žŠKL‚čl #‚dLŌž‚ZLŸ“ۃ+8”Ruđ~’W…‰‚mö ¸h‚f…,Ÿ†ģI‰‚ #}h‚ĘI,ŸŠKL‚m #‚dLuŸ‚ZLžŸ“˃+8”Ruđ~†ļ^—‚ø i‚Å^ܟ‡T—‚X‚+TīŸūĄI—‚ ‚°IīŸ’W…ŋ‚0mø ‰i‚f… ’ģIŋ‚Pm #Ni‚ĘI ŠKLȂhm #‚dLM ‚ZL– “„+8”Ruđ~’W…đ‚€mų j‚f…´ ’ģIđ‚ m #Či‚ĘI´ ŠKLų‚¸m #‚dLã ‚ZLĄ“„+8”Ruˆ’­PƒĐmú 7j‚ÎP0Ą‚ÁPhĄ„ƒR$’W…ƒčmø ąj‚f…ˆĄ’ģIƒn #vj‚ĘIˆĄŠKLƒ n #‚dLˇĄ‚ZLæĄ“ûƒ+8”Ruđ~’W…&ƒ8nô +k‚f…ĸ†ģI&ƒ #đj‚ĘIĸŠKL,ƒPn #‚dL3ĸ‚ZLbĸ“ëƒ+8”Ruđ~’W…4ƒhnú Ĩk‚f…€ĸ†ģI4ƒ #jk‚ĘI€ĸŠKL:ƒ€n #‚dLĸĸ‚ZLÄĸ“ģƒ+8”Ruđ~†W…4†ų l‚f…âĸ†ģI4† #äk‚ĘIâĸūKL:† #‚dL÷ĸ‚ZL Ŗ“F†+8”Ruˆ†W…F†ø ™l‚f…Ŗ†ģIF† #^l‚ĘIŖūKLL† #‚dL4Ŗ‚ZLIŖ“X†+8”Ruˆ†W…X†ô m‚f…\Ŗ†ģIX† #Øl‚ĘI\ŖūKL^† #‚dLqŖ‚ZL†Ŗ“j†+8”RuŒ†W…j†$ú m‚f…™Ŗ†ģIj† #Rm‚ĘI™ŖūKLp† #‚dLŽŖ‚ZLÃŖ“ƒ†+8”Ruä~ކn‚f…ÖŖ†ģIކ #Åm‚ĘIÖŖūKL”† #‚dLëŖ‚ZL¤“Ŗ†+8”Ruđ~†W…§†ö zn‚f…¤†ģI§† #?n‚ĘI¤ūKL­† #‚dL(¤‚ZL=¤“ŧ†+8”Ruđ~†W…ŧ†ö ān‚f…P¤†ģIŧ† #šn‚ĘIP¤ūKL† #‚dLe¤‚ZLz¤Ō† So‚f…¤†ģIŌ† #o‚ĘI¤ūKL؆ #‚dLĸ¤‚ZLˇ¤“į†+8”Ruđ~„Į„îčž„‚čžˆ-‚„Ž‚čž„ŋ‚čž„ä‚Ԇ„đ‚>Š„“ƒ­P„gƒWf„MƒÛe’W…9„˜n :p‚f…ʤ’ģI9„Ān #˙o‚ĘIʤŠKLB„čn #‚dLZLĨ“x„+8”Ruđ~†W…v…č ´p‚f….Ĩ†ģIv… #yp‚ĘI.ĨūKL|… #‚dLCĨ‚ZLXĨ“‹…+8”Ruđ~†W…‹… č q‚f…kĨ†ģI‹… #ķp‚ĘIkĨūKL‘… #‚dL€Ĩ‚ZL•Ĩ†W…•… “q‚f…¨Ĩ†ģI•… #Yq‚ĘI¨ĨūKL›… #‚dLžĨ‚ZLíĨ“§…+8”Ru›†W…˛…Ū r‚f…φģI˛… #Ōq‚ĘIĻūKL¸… #‚dLĻ‚ZL+Ļ“Į…+8”Ruđ~†W…Į… Ū sr‚f…>φģIĮ… #Lr‚ĘI>ĻūKLͅ #‚dLTĻ‚ZLiĻ’W…Ņ…oé ír‚f…|Ļ’KLŅ…o #Đr‚dL‘Ļ‚ZLĻĻ“܅+8”Ruđ~ūģIō† #‚ĘI|φW…ā…å gs‚f…šĻ†ģIā… #,s‚ĘIšĻūKLæ… #‚dLĪĻ‚ZLäĻ“õ…+8”Ruđ~†W…õ…å Ís‚f…÷φģIõ… #Ļs‚ĘI÷ĻūKLû… #‚dL §‚ZL"§†W…†Ú Gt‚f…5§’ģI†0o # t‚ĘI5§ŠKL †Ho #‚dLK§‚ZL`§“"†+8”Ruđ~†W…"†Ú ­t‚f…s§†ģI"† #†t‚ĘIs§ūKL(† #‚dL‰§‚ZLž§†W…‡į 'u‚f…৆ģI‡ #ėt‚ĘIą§ūKL!‡ #‚dLƧ‚ZLÛ§“0‡+8”Ruđ~†W…0‡į u‚f…ģI0‡ #fu‚ĘIî§ūKL6‡ #‚dL¨‚ZL¨†W…E‡á ķu‚f…+¨†ģIE‡ #Ėu‚ĘI+¨ūKLK‡ #‚dLA¨‚ZLV¨†W…a‡"á mv‚f…i¨†ģIa‡ #2v‚ĘIi¨ūKLg‡ #‚dL¨‚ZL”¨“v‡+8”Ruđ~ˆ­~„Ä~­Pˆæ~ˆ„ÅTˆ]ˆv„ˆÅTˆĘˆã„õÅTˆ=€ˆV€„h€ÅT„œ€Ûāˆˇ€„Ė€ÅTˆˆ!„3ÅT„cQ„9„­P„`„­P„°…Š{ 1::¸8•gې‡Ûœ€‡ĄOė p7‘ĄŲ– €‡‘—`ou‡Ĩîđ \F‘¨’~aۇo x‚ąa§¨‚¤aQІÕIۇ Ų x‚äI§¨ūģIۇ Õ‚ĘI§¨ūĄIۇ -‚°I§¨„ô‡R$’W…Bˆ°o “x‚f…dŠ’ģIBˆĐo #Xx‚ĘIdŠŠKLEˆčo #‚dL䊂ZLGĒ“P‹+8”Ru˜’W…\ˆp y‚f…uĒ’ģI\ˆ p #Ōx‚ĘIuĒŠKLbˆ8p #‚dL˜Ē‚ZLēĒ“g‹+8”Ru˜’W…¯ˆPp ‡y‚f…ØĒ’ģI¯ˆpp #Ly‚ĘIØĒŠKL¸ˆˆp #‚dLzĢ‚ZLŦ“t‹+8”Ru”’W…Áˆ p z‚f…2Ŧ’ģIÁˆ¸p #Æy‚ĘI2ŦŠKLĮˆĐp #‚dLUŦ‚ZLwŦ“‹‹+8”Ru”’W…‰čp {z‚f…•Ŧ’ģI‰q #@z‚ĘI•ŦŠKL‰ q #‚dL5­‚ZLŋ­“˜‹+8”Ru”’W…&‰8q õz‚f…í­’ģI&‰Pq #ēz‚ĘIí­ŠKL,‰hq #‚dLŽ‚ZL1Ž“¯‹+8”Ru”’W…y‰€q o{‚f…OŽ’ģIy‰ q #4{‚ĘIOŽŠKL‚‰¸q #‚dLÕŽ‚ZLE¯“ŧ‹+8”Ru”’W…‹‰Đq é{‚f…s¯’ģI‹‰čq #Ž{‚ĘIs¯ŠKL‘‰r #‚dL•¯‚ZLˇ¯“Ķ‹+8”Ru”’W…ۉr c|‚f…Õ¯’ģIۉ8r #(|‚ĘIÕ¯ŠKLä‰Pr #‚dLE°‚ZLĩ°“ā‹+8”Ru˜’W…í‰hr Ũ|‚f…å°’ģI퉀r #ĸ|‚ĘIå°ŠKLķ‰˜r #‚dLą‚ZL'ą“÷‹+8”Ru˜’W…2аr W}‚f…Eą’ģI2ŠĐr #}‚ĘIEąŠKL;Ščr #‚dL›ą‚ZLņą“Œ+8”Ru˜’W…DŠs Ņ}‚f…˛’ģIDŠs #–}‚ĘI˛ŠKLJŠ0s #‚dLA˛‚ZLc˛“Œ+8”Ru˜†ũúSŠ ņ}‚ û˛’~abŠHs }~‚ąaǞ‚¤a힆ÕIbŠ Ų r~‚äIǞūģIbŠ Õ‚ĘIǞūĄIbŠ -‚°IǞ„sŠR$’W……Š`s ÷~‚f…ŗ’ģI…Š€s #ŧ~‚ĘIŗŠKLŽŠ˜s #‚dL[ŗ‚ZL—ŗ“3‹+8”Ru”—ŠQ=˜i %ĩŗ„ŦŠ[)„ŊŠš{„Њš{„ߊ‘\’~aúаs É‚ąaßŗ‚¤a´†ÕIúŠ Ų ž‚äIßŗūģIúŠ Õ‚ĘIßŗūĄIúŠ -‚°Ißŗ„ ‹R$’W…‹Čs C€‚f…2´’ģI‹čs #€‚ĘI2´ŠKL‹t #‚dLr´‚ZLŽ´“@‹+8”Ru˜†W…"Œ Ŋ€‚f…Ė´†ģI"Œ #‚€‚ĘIĖ´ūKL(Œ #‚dLá´‚ZLö´“5Œ+8”Ru˜†W…5Œ  #‚f… ĩ†ģI5Œ #ü€‚ĘI ĩūKL;Œ #‚dLĩ‚ZL3ĩ†W…@Œ œ‚f…Fĩ†ģI@Œ #b‚ĘIFĩūKLFŒ #‚dL\ĩ‚ZL‹ĩ“SŒ+8”Ru¯†W…^Œ ‚‚f…žĩ†ģI^Œ #ہ‚ĘIžĩūKLdŒ #‚dLŗĩ‚ZLČĩ“qŒ+8”Ru˜†W…qŒ ‚‚f…Ûĩ†ģIqŒ #U‚‚ĘIÛĩūKLwŒ #‚dLđĩ‚ZLļ“„Œ+8”Ru˜†W…ŒŒ ƒ‚f…ļ’ģIŒŒt #Ī‚‚ĘIļŠKLŒ0t #‚dL.ļ‚ZLCļ“§Œ+8”Ru˜†W…§Œ pƒ‚f…Vļ†ģI§Œ #Iƒ‚ĘIVļūKL­Œ #‚dLlļ‚ZLļ†W…Ì ęƒ‚f…”ļ†ģIÌ #¯ƒ‚ĘI”ļūKLɌ #‚dLŠļ‚ZLžļ“֌+8”Ru”†W…֌ P„‚f…Ņļ†ģI֌ #)„‚ĘIŅļūKL܌ #‚dLæļ‚ZLûļ’W…åŒHt ʄ‚f…ˇ’KLåŒ`t #­„‚dL#ˇ‚ZL8ˇ“íŒ+8”Ru”ūģI5 #‚ĘIˇ†W…øŒ D…‚f…Kˇ†ģIøŒ # …‚ĘIKˇūKLūŒ #‚dL`ˇ‚ZLuˇ“ +8”Ru”†W…  Ē…‚f…ˆˇ†ģI  #ƒ…‚ĘIˆˇūKL #‚dLˇ‚ZL˛ˇ†W…" †‚f…Ŏ†ģI" #é…‚ĘIŎūKL( #‚dLÛˇ‚ZLđˇ†W…H# І‚f…¸†ģIH #O†‚ĘI¸ūKLN #‚dL¸‚ZL-¸“[+8”Ru”ˆÁ‡„ۇ­Pˆˆˆ0ˆ„BˆÅT„tˆX(„ˆˆâoˆˆ„¯ˆÅT„؈Žh„íˆâoˆ‰„‰ÅT„>‰'„R‰âoˆg‰„y‰ÅTˆ°‰ˆɉ„ۉÅT„ ŠÛāˆ Š„2ŠÅT„bŠQ„…Š­P„úŠ­P„‹­P„\ŒŠ{ uH•‚Ūp‚œÍ›ĄOė p7‘ĄVĒ ͛‘—xt›Ĩx ! \F‘˜’~a׍¨t$ `ˆ‚ąa@¸‚¤aÁ¸†ÕI׍ Ų Uˆ‚äI@¸ūģI׍ Õ‚ĘI@¸ūĄI׍ -‚°I@¸„đR$’W…GŽĀt' ؈‚f…Ô¸’ģIGŽāt #Ÿˆ‚ĘIÔ¸ŠKLJŽøt #‚dLbš‚ZLŌš“֒+8”Ru`’W…aŽu' P‰‚f…ē’ģIaŽ0u #‰‚ĘIēŠKLgŽHu #‚dL#ē‚ZLEē“í’+8”Ru`’W…´Ž`u) ȉ‚f…cē’ģI´Ž€u #‰‚ĘIcēŠKLŊŽ˜u #‚dLņē‚ZLaģ“ü’+8”Ru`’W…Ǝ°u) @Š‚f…ģ’ģIƎČu #Š‚ĘIģŠKLĖŽāu #‚dL˛ģ‚ZLÔģ““+8”Ru`’W…øu, °Š‚f…ōģ’ģIv #Š‚ĘIōģŠKL(0v #‚dL™ŧ‚ZLŊ„“+8’W…1Hv, *‹‚f…=Ŋ†ģI1 #īŠ‚ĘI=ŊŠKL7`v #‚dLĩŊ‚ZL%ž“d’+8”Ru„’W…xv- ¤‹‚f…Cž’ģI˜v #i‹‚ĘICžŠKLŠ°v #‚dLßž‚ZL\ŋ“q’+8”RuŒ’W…“Čv- Œ‚f…Šŋ’ģI“āv #ã‹‚ĘIŠŋŠKL™øv #‚dLŦŋ‚ZLÎŋ“ˆ’+8”RuŒ’W…ãw0 ˜Œ‚f…ėŋ’ģIã0w #]Œ‚ĘIėŋŠKLėHw #‚dLƒĀ‚ZLæĀ“•’+8”RuŒ’W…õ`w0 ‚f…Á†ģIõ #׌‚ĘIÁŠKLûxw #‚dLgÁ‚ZLĘÁ“J’+8”RuŒ’W…Ew2 Œ‚f…čÁ’ģIE°w #Q‚ĘIčÁŠKLNČw #‚dL‚ZLü“W’+8”RuŒ’W…Wāw2 Ž‚f…ÆģIW #ˍ‚ĘIÊKL]øw #‚dLŠÃ‚ZLúÓ=’+8”RuŒ’W…ĩx6 €Ž‚f…Ä’ģIĩ0x #EŽ‚ĘIÄŠKLžHx #‚dL6Ä‚ZLXÄ“0’+8”Ru„’W…Į`x6 úŽ‚f…vĆģIĮ #ŋŽ‚ĘIvÄŠKL͐xx #‚dL˜Ä‚ZLēÄ“#’+8”Ru„’~a됐x9 †‚ąaØÄ‚¤a.ņÕIė Ų {‚äIØÄūģIė Õ‚ĘIØÄūĄIė -‚°IØÄ„ûR$’W…û¨x9 ‚f…NÅ’ģIûČx #ŏ‚ĘINÅŠKL‘āx #‚dL¤Å‚ZLúÅ“,“+8”RuŒ’W…L‘øx; z‚f…Æ’ģIL‘y #?‚ĘIÆŠKLU‘0y #‚dLTÆ‚ZLÆ“ĸ’+8”Ruˆ’W…^‘Hy; ô‚f…žÆ’ģI^‘`y #š‚ĘIžÆŠKLd‘xy #‚dL⯂ZLĮ“š’+8”Ru„‘DD‘˜i> % Į„š‘Ƒ„ĸ‘X(„ŗ‘Ƒ„ž‘>w„͑Ž’~a摐yB Б‚ąa>Į‚¤a~Į†ÕIæ‘ Ų Å‘‚äI>ĮūģIæ‘ Õ‚ĘI>ĮūĄIæ‘ -‚°I>Į„ö‘R$’W…’¨yB J’‚f…‘Į’ģI’Čy #’‚ĘI‘ĮŠKL ’āy #‚dLŅĮ‚ZL Č“ƒ+8”RuŒ†W…3“- Ē‚f…+ȆģI3“ #‰’‚ĘI+ČūKL9“ #‚dLAČ‚ZLVČ“F“+8”RuŒ†W…F“ - *“‚f…iȆģIF“ #“‚ĘIiČūKLL“ #‚dL~Č‚ZL“ȆW…Q“B Ŗ“‚f…ĻȆģIQ“ #i“‚ĘIĻČūKLW“ #‚dLŧČ‚ZLëČ“d“+8”RuŸ†W…o“0 ”‚f…ūȆģIo“ #â“‚ĘIūČūKLu“ #‚dLÉ‚ZL(É“‚“+8”RuŒ†W…‚“ 0 ƒ”‚f…;ɆģI‚“ #\”‚ĘI;ÉūKLˆ“ #‚dLPÉ‚ZLeÉ’W…“øy9 ũ”‚f…xÉ’KL“z #│dLÉ‚ZLĸÉ“•“+8”RuŒūģI8” #‚ĘIxɆW…™“, u•‚f…ĩɆģI™“ #<•‚ĘIĩÉūKLŸ“ #‚dLËÉ‚ZLāÉ“Ŧ“+8”Ru`†W…°“) í•‚f…ķɆģI°“ #´•‚ĘIķÉūKLļ“ #‚dL Ę‚ZL6Ę“Ó+8”Ru`†W…Ó) S–‚f…IʆģIÓ #,–‚ĘIIĘūKLɓ #‚dL_Ę‚ZLtʆW…֓6 ͖‚f…‡Ę†ģI֓ #’–‚ĘI‡ĘūKLܓ #‚dLœĘ‚ZLąĘ“é“+8”Ru„†W…é“"6 G—‚f…ÄʆģIé“ # —‚ĘIÄĘūKLī“ #‚dLŲĘ‚ZLîĘ“”+8”Ru„†W… ”2 Á—‚f…ˆģI ” #†—‚ĘIËūKL” #‚dLË‚ZL+Ë“”+8”RuŒ†W…”2 '˜‚f…>ˆģI” #˜‚ĘI>ËūKL$” #‚dLSË‚ZLhˆW…N”; Ą˜‚f…{ˆģIN” #f˜‚ĘI{ËūKLT” #‚dLË‚ZLĨË“a”+8”Ruˆ†W…a”"; ™‚f…¸Ë†ģIa” #ā˜‚ĘI¸ËūKLg” #‚dLÍË‚ZLâË“x”+8”Ruˆ†W…ƒ”', “™‚f…õˆģIƒ” #Z™‚ĘIõËūKL‰”! #‚dL Ė‚ZL8Ė“š”+8”Ru`†W…Ē”' ų™‚f…KˆģIĒ” #Ō™‚ĘIKĖūKL°” #‚dLaĖ‚ZLvˆW…Į”+' qš‚f…‰Ė’ģIĮ”(z #8š‚ĘI‰ĖŠKLʔ@z #‚dLŸĖ‚ZLĖĖ“â”+8”Ru`ˆŖ„Ŋ­P„׍­P„Ž?„Žâoˆ5Ž„GŽÅT„yޝބŽâoˆĸŽ„´ŽÅT„ŪŽߎ„ōŽâoˆ„ÅTˆYˆo„ÅT„ĢĪ„šPwˆŅ„ãÅT„ „Ûāˆ3„EÅT„ze˜„ސâoˆŖ„ĩÅT„ߐ͓„ꐏQˆ#‘ˆ:‘„L‘ÅT„‚‘­P„æ‘­P„’­P„m“Š{ ]Hü8Ũ•Aœę›,¤ûž“-9‘ĄVĒ ,¤‘ũ %‘—Xz¤™üË ëDßĖĨįē ‘˜~ĨĢ ‘œ~ĨOė1 4 ‘¤~’'¯•€z ‚@¯~Í‚6¯bΞW…l™-@˙œ‚f…ûΆģIl™ #Ŝ‚ĘIûÎūKLu™$ #‚dLĪ‚ZL@Ī“ˆ™+8”RuŦ~ˆ*•„2•f­’ņZ •¨z D‚ [SĪ‚üZ‹Ī„¸•~ ’×ŕĀz1 Ÿ‚Ž×ŸĪ‚×ËĪ’Ήŕāz“‚Ū‰]Đˆč•’Ė×î•{;ž˙īׂÛ×ŲĐ’Øî•0{#?č˙'Ø‚ØŲĐ„g–¸ũ’VMg–X{#?ž˙yM‚eMRŅ„œ–¸ũūMĀ™-#?˙AM‚-MÎŅ’ī‰ž–p{͞‚ŠäŅ‚ū‰Ō‰ĩ‰ž– {c‰ž‚ĉŌˆ8—‘t‰>—Đ{c‚ƒ‰sŌŠ4‰>—Đ{ ŧ˙Z‰˙M‰‚C‰sŌ†ĢL™™'ķž‚ēLüŌˆļ™„z—¸ũˆ"šˆ3š’W…°—č{3 ƒŸ‚f…Ķ’ģI°—| #IŸ‚ĘIĶŠKLŧ— | #‚dLĶ‚ZLĪĶ“ۘ+8”RuŸ~’ÛŌ—8|1 ë ‚.ÛíĶ’Ö˜`|5Z ‚ŽÖ;Ô‰W…˜x|@8 ‚f…‰Ô†ģI˜ #˙Ÿ‚ĘI‰ÔŠKL˜| #‚dL×Ô‚ZL%Õ“™+8”Rw‡|L"˜@‚‹LCÕˆ?˜†RÛ?˜N5Č ˙uÛ‚aÛ‘Õ’āLK˜¨|#;Ĩ ˙M‚īLßÕŠMa˜Č|#;˙AM‚-M-ÖŠĢL˜ā|5‚ēL{Öˆ¨˜’ˆ¨˜ø| €Ą‚͈ÉÖ‘W…¨˜};‚f…×’ģI¨˜8} #DĄ‚ĘI׊KL´˜P} #‚dLsׂZLÁד™+8”RuŒ~’ˆ¸˜h}4 ĸ‚͈ßבW…¸˜€};‚f…ß׆ģI¸˜ #ŲĄ‚ĘIß׊KLÁ˜˜} #‚dLØ‚ZL_Ø“ë˜+8”RuŒ~†ˆ'™ Šĸ‚͈}؇W…'™;‚f…}؆ģI'™ #nĸ‚ĘI}ØūKL0™ #‚dL“Ø‚ZLÂØ“?™+8”RuŸ~†ˆ?™-4 =Ŗ‚͈ÕØ‡W…?™-;‚f…ÕØ†ģI?™ #Ŗ‚ĘIÕØūKLH™$ #‚dLëØ‚ZLŲ“W™+8”RuŸ~†W…í™!3 ļŖ‚f…-Ų†ģIí™ #|Ŗ‚ĘI-ŲūKLö™ #‚dLCŲ‚ZLrŲ“ š+8”RuŸ~„G•Åļ„X•NŊ„•J‚ „•w} „™•Õ} „Š—…‡„ž—ËX„°—+ƒ „Ō— ~ ˆ$™„`™Š{ „‘™Š{ ]Há=#v¤Ũ ŨŪw…vŨŪ¸†vŨŪCvŨß‚i…¤ē¤āž“ cë__nŽģcë__sŽ´'âîŖB“Ejá˙ō Ĩ’HŨxhŨčw…)DŨč¸†)DŨčC)EŨâæ>)GŨü]i2œ#ĨK°ûž“Öh‘ĄPĸG‹c‘ĸ__xGK°‘—°}¨ĨXĨQ‘\’5&Đ}LĶĨ‚I…Ų‚a™Ų‚UšŲ‘ū€&Đ}MŊ‚ …Ų‚#™Ų‚šŲˆ7’1¤^č}SŲĻ‚h¤ĖŲ‚[¤ßŲ˙N¤ŠZĪ^č}‚‚›ĪĖŲ‚ŽĪßŲ˙ĪŠŲÎ^č}_‚ĪĖŲ‚ ĪßŲ˙Ī‹č})ĪôŲŠbÎ^č}V‚™Î,Ú‚ŒÎUÚ˙΋č}¨ÎÚŠĀSƒ~‚ŲSĸÚ‚ĪSÂÚ„ū’ĀS— ~W §‚ŲSÕÚ˙ĪS„Ĩū’W…Ĩ8~W§‚f…÷Ú’ģIĨX~ #H§‚ĘI÷ÚŠKLŽp~ #‚dLÛ‚ZL;Û“Æ+8”Ruc†W…e&Wų§‚f…YÛ†ģIe #§‚ĘIYÛūKLk #‚dLnÛ‚ZL›Û“{+8”Rucˆ[—ˆ~@°îŖB^Ej™=`EjŽÛ™œVa[cãÛ™×nb[c'Ü’v¤Č ~_͍‚œ¤âÜ‚¤Ũ‚…¤FŨ‹ ~̤rŨ†ķbČ ¯¨˙c˙cūēŌ“‚%ē§Ũ˙ē’1ŌÚČ~`ų¨˙[Ō‚NŌßŨ’Đîđ~a€Š‚+Đ7Ū˙5Đ‹đ~‡ķĪîĒ‚ūĪcŪ˙ ЇČĪîMļ‚×ĪcŪ‚íĪwŪ‚á΋ۄ÷%| ’5ũi銂IŸŪ‚aŗŪ‚UßŪ‘ū€ũMŊ‚ ŸŪ‚#ŗŪ‚ßŪˆ’—Ņ rQĢ˙äŅ‚×Ņaß˙ĘŅ‚ŊŅÔߊ?Ņ ).˙ŒŅ‚Ņaß˙rŅ‚eŅÔߊîĐ )‚#Ņaß˙Ņ‚ ŅÔß‹ 1Ņįß‘ē¤ )~‚ī¤aß˙㤂פOā‹ ũ¤xāžĐĻ()KķĒ‚ųĻŖā‚íĻŲāˆ6ž‚Ĩ )P-Ģ˙ĸĨ‚–Ĩų†„ö>„Ō°‚ „–‚ „Ē‚ ’—ŅPHyÁŦ˙äŅ‚×Ņ%á‚ĘŅtá˙ŊŅŠ?ŅPH).˙ŒŅ‚Ņ%á‚rŅtá˙eŅŠîĐPH)‚#Ņ%á‚Ņtá˙ Ņ‹H1ŅÃá‘ē¤PH)~‚ī¤%á‚ã¤tá‚פâ‹Hũ¤FâžĐĻ`)K_Ŧ‚ųĻ…â‚íĻŅâˆnž‚ĨR )PŦ‚ĸĨã‚–Ĩ0ã€R „]ö>„R–‚ „eĒ‚ „°‚ †ąĨ1ˆÕ­˙æĨ‚ÚĨ\ã‚ÎĨ|㇂Ĩ1—‚ĸĨ\ã‚–Ĩ|【1‡ö>1~‚?\ã‚ ?ã‘aĨ“xg‚uĨ­ã‘W…“x]‚f…­ã’KL“ #ŗ­‚dLåã‚ZLä“ŧ+8”RuHūģI¨ #‚ĘI­ã†á¤æŠdŽ˙đ¤˙Ĩ‚ú¤'䀿‡Ŧ¤í ˛˙ˇ¤˙Τ‚ä;䇁¤í Mš˙¤˙Ϥ‚š¤;ä„ö”{ †ąĨ¤„ÎŽ˙æĨ‚ÚĨOä‚ÎĨn䇂Ĩ¤—‚ĸĨOä‚–Ĩn䀤„˛ö>†á¤ĩ…]¯˙đ¤˙Ĩ‚ú¤‚ä€ĩ‡Ŧ¤ŧ ˛˙ˇ¤˙Τ‚äŽä‡¤ŧ Mš˙¤˙Ϥ‚š¤Žä„Å”{ †œŪ°˙Šœ‚–œÂä‡YœŪMĀ˙hœ‚rœÂä‡W…Ū …‚f…Âä†ģIŪ #ܯ‚ĘIÂäūKLæ #‚dLÖä‚ZLå“ö+8”Rud„š–‚ „ÍĒ‚ „Û–‚ „)°‚ „„Š{ īßÕg_°w°āž“Öhë__x‘w°Đ7•Č÷Pš‘œž—¨…žĨ  %‘ŦĨŗS %‘°Ĩ¸dc‘HĨxY %‘¸†­bdšąøābŸøĶbŸ„všö’Ō•šČną‚œŌåŠŧu•šČ‚Ëu]呝u•šČ}‚Ŧu]å’ šāqš‚0 Ąæ‚= Ũæ‚# &į‹āŸL ‘TY §į—€'ļh /č’AAšH€Âf˛‚gAĨč‚ZAĶč‚PAé’ĨN›x€ ŗ_˛‚ËNQ邞NĶč‚´Né’ÕI›˜€ CT˛‚äIé„%ž<$ˆ4›’P°7›°€Âŗ‚i°™é‚_°Čé†5?›•ø˛‚Ię‚aEę‚UZę‡ū€?›MŊ‚ ę‚#EꂁZęˆP›„› Ĩ†W…\›$Â{ŗ‚f…mę†ģI\› #Bŗ‚ĘImęūKLb› #‚dLę‚ZLÉę“v›+8”RuL’AA˜›Ȁŋ´‚gAÜę‚ZA ë‚PAMë’ĨN˜›ā€ ŗ ´‚ËN|낞N ë‚´NMë†ÕI˜› C´‚äIMë„Ėž<$ˆĩ›’P°¸›ø€ŋ°´‚i°´ë‚_°)ė†5ě•Ĩ´‚Iyė‚aĻė‚UŌė‡ū€ěMŊ‚ yė‚#Ļ낁Ōėˆ՛„ž Ĩ†W…á›ŋ*ĩ‚f…åė†ģIá› #ī´‚ĘIåėūKLį› #‚dLúė‚ZLí“÷›+8”Ru¤†W…džÂĸĩ‚f…"í†ģIdž #iĩ‚ĘI"íūKLjž #‚dL7í‚ZLdí“zž+8”R‘D†W…œžŋļ‚f…wí†ģIœž #áĩ‚ĘIwíūKLĸž #‚dLŒí‚ZLĄí“˛ž+8”R‘œ„›Í†ŌȚē~ļ‚œŌ´íūŧuȚ‚Ëu´í‡uȚ}‚Ŧu´í’§ŌœÆxˇ‚ĀŌëî‚ļŌĄīŠb‚œ¯‚{‚ëî‚q‚Ąī‰΁œ(gˇ‚îëî‚⁥ī‹(üęī‰΁œHi@ˇ‚îũī‚âŋđ‹Hüņ‘΁ œ`h‚îņ‚âŨņ‹`ü&ō’Ō>œ€Æ_š‚á>Qō’ąĨœ˜¨Ŧ¸‚æĨķ‚ÚĨĨķ‚ÎĨÅķ‘‚Ĩœ˜—‚ĸĨĨķ‚–ĨÅķ‹˜‘ö>œ˜~‚?Ĩķ‚ ?Øķ‘aĨ*œ°g‚uĨô‘W…*œ°]‚f…ô’KL*œЁ #Џ‚dL;ô‚ZLhô“Wœ+8”Ru¤ūģI@œ #‚ĘIôūņĨcœŠ‚φô‡á¤cœ ˙đ¤‚Ĩ<õ‚ú¤lõ€cœ‡Ŧ¤gœ ˛˙ˇ¤‚ΤŠõ‚äĻõ‡¤gœ Mš˙¤‚ϤŠõ‚š¤Ļõ„pœ”{ „đš\ˆ3ž’W…sœđéš‚f…šõ†ģIsœ #°š‚ĘIšõŠKLyœ‚ #‚dLö‚ZLŧö“č+8”R‘X’ķbˆœ ‚/ē‚cÚö‚cÚö’W…ŋœ8‚4‹ē‚f…0÷’ģIŋœX‚ #Rē‚ĘI0÷ŠKLȜp‚ #‚dLN÷‚ZLˆ÷“õ+8”R‘X’Ū˙霈‚9Ųē‚Ļ÷‚ģ÷‚å÷‚÷˙ø‚í˙0øˆūœ’Ō> °‚9Äŧ‚á>]ø†ąĨC¨ŧ‚æĨ]ø‚ÚĨø‚ÎĨ’ø‡‚ĨC—‚ĸĨø‚–Ĩ’ø€C‡ö>C~‚?ø‚ ?Ĩø‘aĨȂg‚uĨĐø‘W…Ȃ]‚f…Đø’KLč‚ #īģ‚dLų‚ZL*ų“G+8”Ru¨ūģI/ #‚ĘIĐøūņĨYŠ‚ĻHų‡á¤Y ˙đ¤‚Ĩjų‚ú¤†ų€Y‡Ŧ¤] ˛˙ˇ¤‚Τ™ų‚äĩų‡¤] Mš˙¤‚Ϥ™ų‚š¤ĩų„f”{ †¯hˆ0îŧ‚žhČų‚ČhŨų†¯h¤1Ŋ‚žhņų‚Čhú’¯hģƒ2BŊ‚žhú‚Čh/ú†W…3žēŊ‚f…Cú’ģI3ž ƒ #Ŋ‚ĘICúŠKL6ž8ƒ #‚dLXú‚ZL…ú“Lž+8”R‘@†W…~ž42ž‚f…˜ú†ģI~ž #ųŊ‚ĘI˜úūKL„ž #‚dL­ú‚ZLÚú“”ž+8”R‘Xˆš„šœ ø„ŋœi˙„äœ%| „’.ĩ„°.ĩ„͝.ĩˆZž„Ųž”{ „bžŠ{ ÷ 2žđžũœŦž–Āø‘—Pƒ‹Ā‚íú’ņ'ŸhƒbĀ‚û’<õ,Ÿ€ƒøWĀ‚UõAû‚Kõjû’aõTŸ ƒŽBĀ‚põŸûžˆ[Ÿ õYŋ‚ˆ×û„dŸU€ ‰W…gŸ¸ƒķĐŋ‚f…ęû†ģIgŸ #—ŋ‚ĘIęûŠKLrŸЃ #‚dL ü‚ZL,ü“ȟ+8”Rug‡W…˟!ķøf…uT†ģI˟ #ĀøĘIuTūKLԟ #‚dLjü‚ZL—ü“äŸ+8”Rug„@Ÿŝ„…Ÿ”{ „,Ÿ|°„—ŸΘ„ŸŸ÷k„§Ÿ˙焝Ÿ{„퟊{ •Ø÷ÄœĪÄĖŊ'%Ąc"kÆ:‘ĄN#kM‘‘’ĀSMčƒs Á‚ŲSĒüøĪSŸ„[ū’W…[„s‚Á‚f…ũ’ģI[ „ #IÁ‚ĘIũŠKLd8„ #‚dLQũ‚ZL€ũ“š+8”Ruc’%pP„wÔ‚4žũŠĻxh„ŧ˙$Ļ‚.ĻļũūąĨ{Cž˙æĨ‚ÚĨÕũ‚ÎĨôũ‡‚Ĩ{C—‚ĸĨÕũ‚–Ĩôũ€{C‡ö>{C~‚?Õũ‚ ?ū‘aĨ˜€„g‚uĨIū‘W…˜€„]‚f…Iū†ģI˜ #“‚ĘIIūŠKL˜„ #‚dLū‚ZLŖū“°+8”RuP—°„†Ä˜ix %Áū’W…ÆØ„yfÂf…˙’KLÆø„ #IÂdL%˙‚ZLG˙“<+8”RuLūģI# #‚ĘI˙’P°ü…yÄ‚i°u˙‚_°¤˙†5•øÃ‚IÜ˙‚aô˙‚U ‡ū€MŊ‚ Ü˙‚#ô˙‚ ˆ„ Ĩ†W…Ĩy{Äøf…udŸ†ģIĨ #BÄøĘIudŸūKLĢ #‚dL‚ZLI“ģ+8”Ruc„ü:†#˙^ĻÄ„fÜū„M:„^ßÚ„q „ÄŠ{ •Å/đŸ!œÅĄc"Æ:‘ĄN#M‘‘„  –Ā•ü÷ŦœqÉĖŊ<%Ąc"kÆ:‘ĄN#kä,‘’ĀSK0…s‚Å‚ŲS\øĪSŸ„Zū’W…ZH…súÅ‚f…Á’ģIZh… #ÁÅ‚ĘIÁŠKLc€… #‚dL‚ZL2“‚+8”Ruc’%o˜…wHĮ‚4PŠĻw°…ŧ˙$Ļ‚.ĻhŠąĨzЅž˙æĨ‚ÚĨŸ‚ÎĨh‘‚ĨzЅ—‚ĸĨŸ‚–Ĩh‹Ѕ‘ö>zЅ~‚?Ÿ‚ ?ž‘aĨ˜č…g‚uĨô‘W…˜č…]‚f…ô†ģI˜ #Į‚ĘIôŠKL† #‚dL,‚ZLN“°+8”RuT—†É˜ix %l’W…Ā@†yÚĮ‚f…Ž’KLĀ`† #ŊĮ‚dLĐ‚ZLō“-+8”RuPūģI #‚ĘIŽ’P°đ€†ywČ‚i° ‚_°O†5ø•lČ‚I‡‚aŸ‚U´‡ū€øMŊ‚ ‡‚#Ÿ‚´ˆ„u Ĩ†W…yīČøf…udŸ†ģI #ļČøĘIudŸūKL“ #‚dLĮ‚ZLô“Ŗ+8”Ruc“đŦŸ”PuTŧƒøv2$u "†#˙F2É„NÜūŗKŦŸRÉ”Pwŧƒøu „FׄY „ŦŠ{ •ā/  !œ°ÉĄc"“Æ:‘ĄN#“ä,‘„< Å¨$:Ŗ—`œ‡Ę‚8:øD:‘‘:ɘ†g‚NÉ>‘ƒ‡˜†]‚•‡>ŠW…˜†Ō‚f…v’KL¸† #gĘ‚dL˛‚ZLŌ“M+8”R‘LūģI7 #‚ĘIvßíÆ–ĘÛĘāž“ÛĘâîßíCKîĩWķ/ĘîÉ[ôCKâîŪĶõ%ŠBßиīĘËāž“hë__x>ËrBß}ˇË2Ëāž“°é__nˇđá0ķƒË’H$uxhúAčw…)D$u踆)D$učC)EúAâæ>)GúA÷‡Ę“zœŸËûĪø–Ę‘—؆æĪĸĘđ¯ĘŧĘ’.đ†đđË‚E’"W‡ķnĪ‚;e‚1ŠāĘ]0‡Ú‚ųĘå‚īĘ ’Ņ]`‡@EÍ‚ö,‚ęTøāuP‰ Ë]‡ˆ Í‚%ËTøËuP‘–Č]¸‡š˙ĨČ‚¯ČT‹¸‡‘mČpȇĒ˙xČ‚„ČÕ‘BČpȇMļ˙QČ‚gČ5‚[ČÕ„€%| „œ%‡ūÜt‡‚Ũ,ø ŨuP’ŋgkā‡@gÍ˙Îg˙Îg’\Āø‡Dē΂ŠU‚œ˙˙‚Š Āø‡)‚@˙4˙(‹ø‡NĪ‘2ËĀø‡)~‚gˍ˙[Ë‚OË‹ø‡uË)žÚĐ!)KYÎ˙šÚ‚­Ús‡~ÔS˙1~‚'~´ˆîž[Éę )P—΂{Éč‚oÉ €ę „õ$:„Ą°‚ „ę–‚ „ũĒ‚ ūäÉĄ@‚ķÉ& ‡߯§ ˙°: ‚ø¯Z €§‡ǝĢ ˛˙ĩ¯‚ͯm ‚Á¯ ‡¯Ģ Mš˙ޝ‚¤¯m ‚˜¯ „´”{ — ˆŊ΁ËĘ  „z„ ˆ4„H­P„W­P„`=ˆhˆŲ„⁠„.S„R%| „”{ „ĘŠ{ „áŠ{ áųPНúA úAŪw…úAŪ¸†úAŪCúAâņ__nyîßž_Đ”Đāž“Ųgë__nŽV¸ë__sŽ´'âîŖB“ąžáaķåĐ’HúAxhúAčw…)DúA踆)DúAčC)EúAâæ>)GúAüøŊĨœũĐƒŨûž“h‘ĄPĸG&¸‘ĸ__xGƒŨ‘—@ˆĄÔĨXĨQAļ‘T†x~)(LŌŅ‚Œ~É ‚¤~Ũ ‚˜~ ‡<~)(MŊ‚K~É ‚a~Ũ ‚U~ ‡~-$ ‚‚1~; ‚'~m ˆH’~W`ˆQūŅ˙1~‚'~™ ˆy’ÔÛ|xˆS*Ķ‚ ÜÕ ‚ūÛũ ˙ņÛŠÔĮ|xˆ‚‚ČÕ ‚Čũ ˙ûĮŠSĮ|xˆ_‚”ĮÕ ‚‡Įũ ˙zĮ‹xˆŖĮ= ŠûĪ|xˆV‚2Đu ‚%С ˙Đ‹xˆAĐ ū Į ‚&Į$ ‚ĮF ŠĀSϐˆŌ‚ŲSh ‚ĪS{ „šū’ Į¨ˆW|Ķ‚&Į› ˙ĮŠĀSČˆŌ‚ŲSŊ ˙ĪS„áū’ƒ‡áčˆWÔ‚•‡ß ŠW…á‰Ō‚f… ’ģIá(‰ #ÖĶ‚ĘI ŠKLę@‰ #‚dL# ‚ZLE “+8”Ru[ūƒ‡×&W‚•‡c ūW…×&Ō‚f…x †ģI× #fÔ‚ĘIx ūKLŨ #‚dL ‚ZLē “í+8”Ru[—X‰xŨîŖB^ąž™=`ąžÍ ™œVaöˇ™×nböˇF’PĐp‰_tÕ‚vĐ‚iĐ9‚_Đe‹p‰…Đ‘†ŋgPÕ˙Îg˙Îgūē“‚%ēÆ˙ē’Sܘ‰`šÕ˙}Ü‚pÜū’–Č/‰a!Ö‚ĨČV˙¯Č‹‰‡mČ/Ē‚xČ‚˙„ȇBČ/Mļ‚QČ‚‚gČ–‚[ČĒ„8%| ’x~>؉i¯Ö‚Œ~ž‚¤~Ō‚˜~‘<~>؉MŊ‚K~ž‚a~Ō‚U~‘~Fđ‰ ‚‚1~š‚'~āˆc’tÛiŠr8Ø˙ÁÛ‚´Û ˙§Û‚šÛ|ŠÛiŠ).˙iÛ‚\Û ˙OÛ‚BÛ|ŠËÚiŠ)‚Û ˙ôÚ‚čÚ|‹ŠÛ‘”ĐiŠ)~‚ÉĐ ˙ŊĐ‚ąĐ÷‹Š×Đ žÚx!)KÚׂšÚK‚­Ú‡~|S‚1~Ą˙'~ˆ–ž[Éx )PØ˙{É‚oÉĘ€x „ƒ$:„D°‚ „x–‚ „‹Ē‚ ’tÛ°0ŠyÁŲ˙ÁÛ‚´Ûö‚§ÛE˙šÛŠÛ°0Š).˙iÛ‚\Ûö‚OÛE˙BÛŠËÚ°0Š)‚Ûö‚ôÚE˙čÚ‹0ŠÛ”‘”а0Š)~‚ÉĐö‚ŊĐE˙ąĐ‹0Ё×ĐØžÚĀ!)K_Ų˙šÚ‚­Ú‡~ÄS˙1~‚'~XˆŪž[ÉÄ )PŲ‚{ÉŒ‚oÉĒ€Ä „Ī$:„Ä–‚ „×Ē‚ „°‚ †ŠÉ2ˆņÚ˙ŋÉ‚ŗÉÖ‚§Éö‡[É2—‚{ÉÖ‚oÉö€2‡$:2~‚D:Ö‚8: ‘:É`Šg‚NÉ'‘ƒ‡`Š]‚•‡'ŠW…`ŠŌ‚f…_’KLxŠ #ÎÚ‚dL›‚ZLĘ“-+8”RuHūģI #‚ĘI_†߯WŠ€Û˙î¯˙°‚ø¯Ũ€W‡ǝ^ ˛˙ĩ¯˙ͯ‚Á¯ņ‡¯^ Mš˙ޝ˙¤¯‚˜¯ņ„g”{ †ŠÉ„ęÛ˙ŋÉ‚ŗÉ‚§É$‡[É—‚{É‚oÉ$€„$$:†߯'…yÜ˙î¯˙°‚ø¯8€'‡ǝ. ˛˙ĩ¯˙ͯ‚Á¯d‡¯. Mš˙ޝ˙¤¯‚˜¯d„7”{ †ЇPOŨ˙ۇ‚į‡x‡LJPMĀ˙š‡‚Çx‡ƒ‡P …‚•‡xūW…PŌ‚f…Œ†ģIP #Ũ‚ĘIŒūKLY #‚dL¤‚ZLŅ“i+8”Ru\„ –‚ „?Ē‚ „M–‚ „œ°‚ „öŠ{  BüH)P Šœ ŨJåûž“.H‘—Š+å™l”ņđä’Wéj °Š”ļŪ‚pé?øféōˇŨŠ:Ŗj °Š†‚IŖ?—čŠĒہUŖŽ’­PĄ‹<SŪ‚ÎP˙ÁP„7ĄR$’­P7Ą(‹<ƒŪ‚ÎP(˙ÁP„IĄR$„s ۀ ˆĄ„TĄ=ˆ\ĄˆHŖ„† ÷€ ’h‰ @‹•Cã‚w@ŠN‰ @‹đ‚]›Š‡Ę‰ @‹Ņ‚–Ę›‹@‹ĸʁ¯Ę5ŧĘ5’¸ x‹đKß˙’"ߥ‹ķČâ‚;`‚1›ŠāĘķĄЋÚ‚ųĘ‚īĘ;’ŋgķĄŒ@ģß˙Îg˙Îg’Ņĸ Œ@Åā‚ör‚ę­‚ā.žūÜĸ‡ā‚Ũr‚ Ũ.‘ Ë"ĸ(Œˆ‚%Ë­‚Ë.‘–Č"ĸHŒš˙ĨČ‚¯Č­‹HŒ‘mČŖPŒĒ˙xČ‚„ČZ‘BČŖPŒMļ˙QČ‚gČē‚[ČZ„Ŗ%| „Ŗ%’\QĸhŒD₊悜˙˙‚Š QĸhŒ)‚@˙4˙(‹hŒNH‘2ËQĸhŒ)~‚gË˙[Ë‚OËt‹hŒuË–žÚ`ĸ!)Kˇá˙šÚ‚­Úʇ~dĸS˙1~‚'~õˆ~ĸž[ɨŖ )Pōáø{ÉWøoÉu@€¨Ŗ „ŗŖ$:„¨Ŗ–‚ „ģŖĒ‚ „ÂŖ°‚ ūäÉÂŖ@øķÉuL‡߯ČŖ ˙°‚ø¯3€ČŖ‡ǝĖŖ˛˙ĩ¯‚ͯF‚Á¯f‡¯ĖŖMš˙ޝ‚¤¯F‚˜¯f„ÕŖ”{ —ˆŒãËĘy„¤ĸz„ ˆČĸ„Üĸ­P„ëĸ­P„ôĸ=ˆüĸˆšŖ„¤ ⁠„¸ S„ÚĄ%| „…Ŗ”{ ’ų‡Á ¨Œ•1ä˙ˆŠЇÍ Œ¸˙ۇ‚į‡ĸ‘LJÍ ŒMĀ˙š‡‚Çĸ‘ƒ‡Í Œ …‚•‡ĸŠW…Í ŒŌ‚f…ˆģIÍ  #ôã‚ĘIĖŠKLĶ ، #‚dLū‚ZLT“0Ŗ+8”Rud’ƒéß đŒ•å‚’érŠ<¤ß đŒˆ‚K¤Ē‹W¤î’­PĄ8HĢä‚ÎP0 ˙ÁP„—ĄR$’­P—ĄPHÛä‚ÎPX ˙ÁP„ŠĄR$„ņ  ˆĄ„´Ą=ˆŧĄˆ[ŖūƒéeŖ•‚’ép „pŖ<¤„PŖŠ{ „cŖŠ{ „xŖŠ{ äm Š \åqåāž“qåāHÄ%ž5÷JåŊXāŖ"œ’å°åø\å‘„ôŖÜū„ũŖˆŨßœŋåúåāž“FčcU %čžÉ?´'ú<(¤äœæPöûž“.H‘Ą'1Â?‘ĄÃëô'‘Ą:ÃÄ %‘ ĄuAÅPö‘ĄWÆUö‘—hEö¤msgĮ/ü‘ŧ™lĘņđˆ ĨĄ‘Ú? ‘L†:ä0¤ČiįøZ䑸Pä‘”€0¤…b‘~a0¤ˆƒøąa‘‚¤aĘ ’ÕI0¤  Ų \įøäI‘ŠģI0¤¸ ÕøĘI‘ŠĄI0¤Ѝ -ø°I‘„H¤R$†WéQ¤Ęį‚péī ‚fé)!„Y¤:Ŗ’hY¤čËãį‚wa!ŠNg¤Žđ‚]’!„o¤‡Ę’ŋgo¤ŽË č‚ÎgŨ!‚ÎgŨ!’Îä´Ĩ0ŽĖOč‚îäû!‚ääC"‹0Ž…b„ÍĨ­P’ūãÎĨHŽĖ‘č‚ä"‚äĮ"‹HŽ…b„âĨ­P’ˆâĨhŽĖĶ肨#‚žK#‹hŽ…b„÷Ĩ­P—€Žnņ˜iÎ %‡#’h÷Ĩ ŽÎ2é‚w°#ŠNϏŽđ‚]Ô#„ χƒŋg ĻЎÎ\é‚Îg $‚Îg $‹čŽ™ĀIĐZö $’h@ĻĐî‚wI$ŠN@Ļđ‚]$ЇĘ@ĻŅ‚–ʝ$‹ĸĘ %¯Ę+%ŧĘ+%’IĻPđę˙’"§hķ‰í‚;X%‚1¨%ŠāĘ,§¨Ú‚ųĘ&‚īĘb&’ŋg,§ā@xę˙Îg˙Îg’Ņ;§ø@‚ë‚öŠ&‚ęų&‚ād'žūÜ;§‡Ôę‚ŨŠ&‚ Ũd'‘ Ë[§ˆ‚%Ëų&‚Ëd'‘–Č[§ š˙ĨČ‚¯Čų&‹ ‘mČ`¨(Ē˙xČ‚„Č '‘BČ`¨(Mļ˙QČ‚gČę'‚[Č '„t¨%| „^Š%’\Ч@DÕė‚Š (‚œS(˙˙‚Š Ч@)‚@S(˙4˙(‹@NĨ(‘2ËЧ@)~‚gËS(˙[Ë‚OËé(‹@uË )žÚ §!)Ktė˙šÚ‚­ÚJ)‡~¤§S˙1~‚'~€)ˆž§ž[Éƨ )P˛ė‚{ÉŠ)‚oÉĮ)€ƨ „ҍ$:„ƨ–‚ „؍ǂ „#а‚ ūäÉ#Š@‚ķÉé)‡߯)Š ˙°ū)‚ø¯ *€)Їǝ-Š ˛˙ĩ¯‚ͯ3*‚Á¯U*‡¯-Š Mš˙ޝ‚¤¯3*‚˜¯U*„6Š”{ —hØíËĘh*„ä§z„ ˆ¨„¨­P„+¨­P„4¨=ˆ<¨ˆTŠ„IĻS„ūĻ⁠„§%| „DŠ”{ ’ŪgRĻˆĐ&î˙íg˙÷g’ÎälĻ Ņî‚îä‘*‚ääÉ*‹ …b‘­Ppϐƒ‚ÎP‘*‚ÁPø*„~ĻR$’:ä~ĻāŅLī‚Zä+‚Pä:+‹ā…b‘~a~Ļ‘ƒ‚ąa+‚¤a\+†ÕI~Ļ Ų ?ī‚äI+ūģI~Ļ Õ‚ĘI+ūĄI~Ļ -‚°I+„”ĻR$’Îä”Ļ(‘Ōŗī‚îä+‚ääŠ+‹(‘…b‘­P”ĻH‘ƒ‚ÎP+‚ÁPË+„ŦĻR$’:äŦĻp‘Ōrđ‚Zäđ+‚Pä,‹p‘…b‘~aŦϐ‘ƒ‚ąađ+‚¤a4,†ÕIŦĻ Ų eđ‚äIđ+ūģIŦĻ Õ‚ĘIđ+ūĄIŦĻ -‚°Iđ+„ÂĻR$’W…ÂϏ‘Ņęđ‚f…Y,’ģIÂĻؑ #ąđ‚ĘIY,ŠKLËĻđ‘ #‚dL{,‚ZL¨,“R¨+8”Rv†W…pŠ!Ņbņ‚f…Æ,†ģIpŠ #)ņ‚ĘIÆ,ūKLvŠ #‚dLÛ,‚ZL-“ŠŠ+8”R‘P„kĻ”“†TФÖĒņ‚+T-ūĄIФ ‚°I-’°å­¤’Üöō‚íå_-‚áåž-‚Õåî-‚Éå=.‚ŋå.žW…‘ŠDhō‚f…/’ģI‘Š8’ #/ō‚ĘI/ŠKL”ŠP’ #‚dL/‚ZL*/“ĢŠ+8”RwžW…ĢŠDßō‚f…=/†ģIĢŠ #Ļō‚ĘI=/ūKLąŠ #‚dLR/‚ZL/“žŠ+8”R‘LˆÕ¤„į¤`Āˆ÷¤†Tŧ¤Ü2ķ‚+T’/ūĄIŧ¤ ‚°I’/’W…÷¤h’ÜĒķ‚f…Û/’ģI÷¤ˆ’ #qķ‚ĘIÛ/ŠKLĨ ’ #‚dL0‚ZLi0“ލ+8”Rw†ƒé_Ĩ ĘÔķ‚’é‡0„hĨ<¤†ãjĨ üô‚ãŸ0‡*ijĨ U‚9iŸ0„tĨqG’ĖįĨ¸’×[ô‚ėį´0‚âįĖ0‹¸’…b„”Ĩ­P’:ä”ĨВ×õ‚Zäá0‚Päõ0‹В…b‘~a”Ĩč’ƒ‚ąaá0‚¤a 1’ÕI”Ĩ“ Ų õ‚äIá0ŠģI”Ĩ “ Õ‚ĘIá0ŠĄI”Ĩ8“ -‚°Iá0„ŦĨR$†ƒéų¨ĘDõ‚’é/1„Š<¤†ãŠü‰õ‚ãG1‡*iŠU‚9iG1„ŠqGžŠ6úõ‚f…\1†ģIžŠ #Áõ‚ĘI\1ūKLÄŠ0 #‚dLq1‚ZLž1“ÕŠ+8”R‘Lˆ0¤„­¤y]„Ĩ=܈_Ĩ„¨5~ ˆ¨¨„Ŋ¨I~ „娐… ˆö¨„ŠŠ{ ô1ô1 BĻú˛gĒœzö´øûž“´ø‘ĄuAgšø‘’W…vĒP“n÷‚f…ą1’ģIvĒp“ #Öö‚ĘIą1ŠKLyĒˆ“ #‚dL2‚ZL?2“¨Ē+8”Ru_’W…‰Ē¨“n‡÷‚f…m2’ģI‰ĒĀ“ #N÷‚ĘIm2ŠKLĒؓ #‚dL2‚ZL¯2“ŋĒ+8”Rv†W…ĪĒn˙÷‚f…Í2†ģIĪĒ #Æ÷‚ĘIÍ2ūKLÕĒ #‚dLâ2‚ZL3“áĒ+8”Ru_†W…ėĒnwøøf…u`Ÿ’ģIėĒđ“ #>øøĘIu`ŸŠKLīĒ” #‚dL"3‚ZLO3“Ģ+8”Ru_„ĒÜū„-ĒIT„DĒk0„bĒÜū„vĒúå„ęĒŠ{ ;_5äĢŗ”Đøõøāž“ĪPāHÄ%âîG•Ø…žøûĢÕœųÍüøĐø‘— ”ŌûŸæø‘X’ÄjĢP”•Áų‚Ķb3ŠĪ_jĢP”‚Ū_b3†–_j̇ų‚Ĩ_–3ūTxĢ‚+TŌ3ūĄIxĢ ‚°IŌ3’ã¯Ģp”•,ú‚ãå3‘*i¯Ģˆ”U‚9iå3ŠqG¯Ģ ”‚ŠGú3‚€Gå3„ÃĢŝ’)ãā̏”•û‚;ã4Šĸ…āĢؔ‚ą…W4ŠōāĢø”‚ ō 4‚ōW4’W…˙Ģ•Žû‚f…Ā4’ģI˙Ģ0• #Ęú‚ĘIĀ4ŠKLŦH• #‚dLę4‚ZL 5“{Ŧ+8”Ru\„ņĢŝ„Ŧ”{ †ãĻŦ•_û‚ã*5‡*iĻŦU‚9i*5„˛ŦqG†)ãĩŦ•Ĩû‚;ã?5ūĸ…ĩŦ‚ą…T5„ÂŦō„NĢŖXˆjĢˆ˜Ģ„ĻĢ_öˆ¯ĢˆÕŦ’W…Ŧh•”Jü‚f…5’ģIŦˆ• #ü‚ĘI5ŠKL#Ŧ¨• #‚dLŖ5‚ZLÅ5“/Ŧ+8”Rw†W…ƒŦ#”Âü‚f…ã5†ģIƒŦ #‰ü‚ĘIã5ūKL‰Ŧ #‚dLø5‚ZL 6“˜Ŧ+8”Rw„ŖŦŠ{ áû/ũŪ)j ũâî /üâņi&'Ö7•0đŦËœŦ ĄápŦ ‘ĄĮzą ‘†{T­žũø˛T‘‚ĨT 6‚˜TB6ūÚ¨­ Ä˙Š˙Š˙÷¨„­1Ž’Íü*­Ā•2 ‚Øüf6‹Ā•Ÿįü‘\<­ô– öü†6’ķbD­ؕū˙c˙c’ÖæS­đ•mū‚öæĨ6‚ėæŊ6‹đ•…b‘­PS­–ƒ‚ÎPĨ6‚ÁPŅ6„!ŽR$’ķb`­8–ū˙c˙c’cp­P–ĩū˙!c‚+cõ6’Îäs­h–˙‚îä7‚ää-7‹h–…b‘­Pv­ˆ–ƒ‚ÎP7‚ÁPA7„Ž­R$’:䎭°–Į˙˙Zä‚Päe7‹°–…b‘~aŽ­Жƒ˙ąa‚¤ay7’ÕIŽ­ø– Ų ē˙˙äIŠģIŽ­— Õ˙ĘIŠĄIŽ­(— -˙°I„Ļ­R$’ÎäĻ­@—. ‚îä7‚ääĩ7‹@—…b‘­PŦ­`—ƒ‚ÎP7‚ÁPÉ7„¸­R$ūbåÚ­#‚‚åé7‚xå8€Ú­#…b‘­PÚ­€—ƒ‚ÎPé7‚ÁP8„ō­R$†ã@Ž Û ‚ã98‡*i@Ž U‚9i98„MŽqG†ã ¯  ‚ãe8‡*i ¯U‚9ie8„¯¯qGˆ9­„@Žy]’ŲķWŽ˜—t ‚ųķy8‚īķÁ8‹˜—…b„jŽ­P’:äjް—3 ‚Zäų8‚Pä%9‹°—…b‘~ajŽЗƒ‚ąaų8‚¤aQ9’ÕIjŽø— Ų & ‚äIų8ŠģIjŽ˜ Õ‚ĘIų8ŠĄIjŽ(˜ -‚°Ių8„‚ŽR$’b傎@˜u ‚‚åu9‚xå­9‹@˜…b„—Ž­P’:ä—Ž`˜4 ‚ZäŲ9‚Pä:‹`˜…b‘~a—Ž€˜ƒ‚ąaŲ9‚¤a4:†ÕI—Ž Ų ' ‚äIŲ9ūģI—Ž Õ‚ĘIŲ9ūĄI—Ž -‚°IŲ9„­ŽR$’ĩõŽŽ¨˜ v ‚ÕõX:‚Ëõ:‹¨˜…b„ÂŽ­P’ūãÄŽ˜ ¸ ‚äŧ:‚äô:‹˜…b„׎­P’Îä׎ؘ ú ‚îä ;‚ääX;‹ؘ…b„ėŽ­P’ã#¯đ˜? ‚ã„;‘*i#¯™U‚9i„;„+¯qG’W…+¯ ™¸ ‚f…¤;’ģI+¯@™ #~ ‚ĘI¤;ŠKL4¯X™ #‚dLÆ;‚ZLæ;“[¯+8”R‘D†W…_¯0 ‚f…<†ģI_¯ #÷ ‚ĘI<ūKLe¯ #‚dL<‚ZLF<“u¯+8”R‘W†ãޝu ‚ãY<‡*iޝU‚9iY<„›¯qGˆUŽˆ ¯„¯_öˆ!¯„~¯Š{ ˆ‹¯„ˇ¯Š{ ô1Ö7 (ôœ Ąis( ‘Ą ) ‘’W…°p™+e ‚f…m<’ģI°™ #, ‚ĘIm<ŠKL °¨™ #‚dLą<‚ZLā<“‚°+8”RuW†Ō>°Q+P ‚á>ū<†ąĨ °;¨ ‚æĨ =‚ÚĨB=‚ÎĨU=‡‚Ĩ °;—‚ĸĨB=‚–ĨU=€ °;‡ö> °;~‚?B=‚ ?h=‘aĨ7°șg‚uĨ“=‘W…7°ș]‚f…“=†ģI7° #] ‚ĘI“=ŠKL<°č™ #‚dLË=‚ZLí=“N°+8”RuŧūņĨ[°Š‚Ļ >‡á¤[° ˙đ¤‚Ĩ->‚ú¤I>€[°‡Ŧ¤_° ˛˙ˇ¤‚Τ\>‚äx>‡¤_° Mš˙¤‚Ϥ\>‚š¤x>„h°”{ †W…œ°+Č øf…uXŸ†ģIœ° # øĘIuXŸūKLĸ° #‚dL‹>‚ZL¸>“˛°+8”RuWŗá¯Iæ ”Pv”Ruˆû¯„° ũˆ’°„š°Š{ ô1~9áo#V Ã$~SÍ#ĩŪw… Ķ~SŪ¸† Ķ~SŪë§ Ô#ĩáâ0w Í#ĩčë§-ė#ĩáĄ#š ‡R~SÍ/čw… Ÿ~S踆 Ÿ~Sčë§ Ÿ/ß‡Č ā āž“÷Ŗë__x‘ā Ū9ĻķÆ°`œ Ō ûž“›V‘ĄisÆŌ ‘Ą Į× ‘—šŗ ™lËņđË>™ãRĖM‰ũ>’Wéđ° šËG ‚pé1?øféō7 Š:Ŗđ° š†‚IŖ1?—Pš; UŖ]?’­PÚ˛pš<ä ‚ÎPœ?˙ÁP„ō˛R$’­Pō˛ˆš< ‚ÎPÄ?˙ÁP„ŗR$„û°ۀ ˆÚ˛„ ŗ=ˆŗˆ ´„ ą÷€ ’Ū.ą šÎw ‚÷Ü?‚í;@ˆ8ą’vÚ9ą¸šÎš ‚…Ú˛@Š;n9ą¸š6‚Tn×@˙Jn’\ÚCąКÎû ‚kÚFAŠ;nCąК$‚TnFA˙Jn’ IąčšÎŒ ‚H ^A‚; ĻA‚. ęA’bIą› Ũ^ ‚b^A‚“b;BˆVą’V Wą8› Ũ ‚j ŊB‰bWą`›-íŦ ‚bŊB‚“b'Cˆgą‰ã†iąx›-í ‚ü†„C‚ō†ËC‘biąx›-ႝb„C‚“bËCˆsą‰‡są›-í‹ ‚ ‡gDŠW…są°›Z‚f…ŖD’ģIsąЛ #Y ‚ĘIŖDŠKLvąč› #‚dLˆE‚ZLâE„}ŗ+8‡‡´-í‚ ‡FūW…´Z‚f…F’ģI´œ #ā ‚ĘIFŠKL´ œ #‚dLF‚ZLBF“´+8”Rud’w ą8œ Ũ ‚Ŧ UF˙  ˙” žĄą ĸš ‚ŧUF‚˛žF‡bą -܂bUF‚“bžFˆą‰ĮēąXœ ĸJ ‚ؐįF‘‡ēąpœ-܂ ‡0GŠW…ēąˆœZ‚f…“G†ģIēą #  ‚ĘI“GŠKLĀą œ #‚dL*H‚ZLsH“ŗ+8”Ru´žĮī´ ĸú ‚ؐ‘H‡‡ī´-܂ ‡‘HūW…ī´Z‚f…‘H†ģIī´ #Ŋ ‚ĘI‘HūKLõ´ #‚dLĻH‚ZLģH“ĩ+8”Ru´„ąąK‰’ĮČą¸œ Ũĩ ‚ؐÎH‘‡ČąМ-܂ ‡ÎHŠW…ČąčœZ‚f…I†ģIČą #y ‚ĘIIŠKLÎą #‚dL”I‚ZLŨI“ ŗ+8”Ru@’‡Öą ŨJ ‚ ‡ûIŠW…Öą0Z‚f…DJ†ģIÖą # ‚ĘIDJŠKLÜąH #‚dL§J‚ZLđJ“°ŗ+8”Ru@†‡´ ŨŪ ‚ ‡KūW…´Z‚f…K†ģI´ #¤ ‚ĘIKūKL"´ #‚dL#K‚ZLPK“.´+8”RuTūĮŌ´ Ũ‚ؐcK‡‡Ō´-܂ ‡cKūW…Ō´Z‚f…cK†ģIŌ´ #N ‚ĘIcKūKLØ´ #‚dLxK‚ZLK“č´+8”Ru´’‡äą`Î! ‚ ‡ KŠW…äąxZ‚f… K†ģIäą #æ ‚ĘI KŠKL깐 #‚dLéK‚ZL2L“Āŗ+8”Ru@’W…ōą¨Îš ‚f…PL†ģIōą #` ‚ĘIPLŠKLøąĀ #‚dL™L‚ZLâL“Đŗ+8”Ru@†vÚ˛ĪÜ ‚…ÚMū;n˛6‚TnOM˙Jn’f%˛؝Ķ6 ‚ĄM‚uņMŠĀS)˛øä‚ŲSĄM‚ĪS8N„3˛ū’W…3˛žĶ¯ ‚f…œN’ģI3˛8ž #u ‚ĘIœNŠKL<˛Pž #‚dLÔN‚ZLO“āŗ+8”Ru@’ƒéD˛hžĶ‚ ‚’é!OŠ<¤D˛hžˆ‚K¤IO‹€žW¤hO’­Pw˛ žH) ‚ÎP‘O˙ÁP„˛R$’­P˛¸žHY ‚ÎPšO˙ÁP„Ą˛R$„T˛ ˆw˛„Ǟ=ˆŗ˛ˆr´’š ŗОĐà ‚Ō ŅO‚Č P’ †.ŗøž•¸ ‚´†1P‚ˆIP‚†uP‘d†.ŗøžMŊ‚s†1P‚‰†IP‚}†uP‘::2ŗŸ ‚‚V:ĸP‚L:ÎP†W…}´ĪŠ ‚f…ûP†ģI}´ #o ‚ĘIûPūKL‚´ #‚dLQ‚ZL#Q“Ž´+8”Ru@ˆ>ŗˆPŗ„úŗK;†ƒébŗŅí ‚’é6Q„mŗ<¤†‡.´Î ‚ ‡NQūW….´Z‚f…NQ†ģI.´ #G ‚ĘINQūKL4´ #‚dLcQ‚ZLQ“@´+8”RuT†W…@´Îų ‚f…ŖQ†ģI@´ #Ā ‚ĘIŖQūKLF´ #‚dL¸Q‚ZLåQ“R´+8”RuT†ƒéR´Ķ# ‚’éøQ„]´<¤†W…ĩĶœ øf…uTŸ†ģIĩ #b øĘIuTŸūKL ĩ #ødLudŸ‚ZLR“ĩ+8”Ru@„ß°ļ ˆ,ąˆ$˛„e´Š{ „z´Š{ „¨´Š{ ô1~9ü0Ŋ ĩœô r ûž“ļH‘Ą Đr ‘—(Ÿg ĨisŅÄ6‘\™5HŌö9#R’t‰7ĩHŸŅ„ ‚ƒ‰LRŠ4‰7ĩHŸ ŧ˙Z‰˙M‰‚C‰LR’^MĩhŸÕŪ ‚,^šR‚"^ŅRŠã¤MĩhŸ 3‚ü¤šR‚ō¤ŅR„eĩO’W…€ĩ€ŸŪV ‚f…ũR’ģI€ĩ Ÿ # ‚ĘIũRŠKL‰ĩ¸Ÿ #‚dL9S‚ZLuS“Øĩ+8”Ruc’^ĸĩПØ° ‚,^“S‚"^ĢSŠã¤ĸĩП 3‚ü¤“S‚ō¤ĢS„ēĩO†^āĩÛä ‚,^×S‚"^īS„öĩ㤆W…ļŪ\ øf…udŸ†ģIļ ## øĘIudŸūKL ļ #‚dLT‚ZLHT“ļ+8”Ruc„€ĩå „!ļŠ{ ~9ß$† Ģ āž“ĀBŪäXÔĢ ŪŪÔ° ô1ô1üo(0ļÄœÍ ã ûž“.H‘ĸkeyã ‘Ą‘/č ‘’w 6ļčŸ˛ ‚ [T‚ ŸT‚† ãT†W…ÂļÕĨ ‚f…ZU†ģIÂļ #l ‚ĘIZUūKLČļ #‚dLoU‚ZLœU“Øļ+8”Ru_ˆPļˆ^ļ’L`lļ ž ‚^`¯U’W…lļ0 ĪI ‚f…ëU’ģIlļP  # ‚ĘIëUŠKLoļh  #‚dL'V‚ZLcV“ ļ+8”Ru_ŠW…ļˆ Ī‚f…‘V’ģIļ   #„ ‚ĘI‘VŠKL… #‚dLŗV‚ZLÕV“¸ļ+8”Ru_„lļÜ „áļŠ{ ˆėļ„ôļŠ{ ô1ô1•žˇ*œ6 ĸkeyy6 ‘Ą‘/y; ‘„ˇÜū„%ˇĩ ô1ô1´ģ0ˇœ! ĸkey~! ‘Ą‘/~ %‘—Đ „! Ĩ”õ/ü‘T’ÉaRˇđ €Ķ øéaōd ‚ßaķV‹đ …b„cˇ=’W…ŒˇĄK ‚f…YW’ģIŒˇ(Ą # ‚ĘIYWŠKLˇ@Ą #‚dL‘W‚ZLĀW“øˇ+8”Ru[’W…Ÿˇ`ĄÃ ‚f…ŪW†ģIŸˇ #Š ‚ĘIŪWŠKLĨˇxĄ #‚dL X‚ZLd˙xå‹°Ļ…b‘­PģĐĻƒ‚ÎP>d‚ÁPvd„ģR$’ĩõģøĻÉE+ ‚ÕõĻd˙Ëõ‹øĻ…b‘­Pģ§ƒ‚ÎPĻd‚ÁPŪd„4ģR$’ _4ģ@§Éž+ ‚)_™c‚_e—h§“+ ˙)_‚_Je„Ŋ­P„Tģ­P’fãT쀧Ę, ‚†ã_e˙|ã‹€§…b‘­PTģ˜§ƒ‚ÎP_e‚ÁP—e„oģR$’ _r쏧ĘZ, ‚)_Įe‚_˙e—اO, ˙)_‚_;f„Öŧ­P„Šģ­P’ÎäŠģđ§ĘŊ, ‚îäPf˙ää‹đ§…b‘­PŠģ¨ƒ‚ÎPPf‚ÁPxf„ĨģR$’õīĨģ8¨Ë - ‚đ¨f˙ đ‹8¨…b‘­PĨģX¨ƒ‚ÎP¨f‚ÁPĐf„ŊģR$’GđŊģ€¨Ėƒ- ‚gđg˙]đ‹€¨…b‘­PŊģ ¨ƒ‚ÎPg‚ÁP(g„ÕģR$’õīÕģȨÍæ- ‚đXg˙ đ‹Ȩ…b‘­PÕģč¨ƒ‚ÎPXg‚ÁP€g„íģR$’¨íģŠÎI. ‚Ȱg˙ž‹Š…b‘­Píģ(Šƒ‚ÎP°g‚ÁPØg„ŧR$†ã9ŧÆŽ. ‚ãh‡*i9ŧU‚9ih„AŧqG†ã-ŊÆĶ. ‚ã*h‡*i-ŊU‚9i*h„7ŊqG„Ÿ¸{P„¯¸{Pˆąēˆ%ŧ„/ŧ_öˆ7ŧˆ'ŊŠaZޏHŠĨ‚pZ}ZŠTޏHŠw‚+T?hŠĄIޏHŠ ‚°I?h„?ŊŠ{ „SŊŠ{ ŦV—ĒpŊ^œŽ/ č4 ûž“ČÅ‘ƒa Ē´'‘—`ŠŨ4 ­Ô¯Ę5nh­ˆP°?D™hž6 ‡ŊĢũ/ ‚A ãh„Ŋ•„ —xŠ"0 ­EpŊH‘ i„ũŊ … —ŠĒ4 œ€„ĀØ‘X‰j_ž°ŠŠ0 ‚ƒ_7i‚y_ViŠ@_žĐŠ‚Y_i‚O_°i‰ÜöJžčŠÁđ0 ‚üöŌi‚ōöúi‹čŠ…b‘­PMžĒƒ‚ÎPŌi‚ÁP'j„bžR$‰ _bž ĒÁr1 ‚)_Gj‚_oj‘­Pbž8Ē™‚ÎPj‚ÁPĸj’aObž`Ēf1 ‚lOj„jžė{ „{žR$‰e {žxĒÂÔ1 ‚… Ķj˙{ ‹xĒ…b‘­P~žĒƒ‚ÎPĶj‚ÁPûj„“žR$‰W…čž°ĒĀK2 ‚f…k’ģIčžĐĒ #2 ‚ĘIkŠKLņžčĒ #‚dL0k‚ZLhk“gŋ+8”Rw‰ãũžĢÁ2 ‚ã†k‘*iũžĢU‚9i†k„ ŋqG‰)ã ŋ0ĢÂ}3 ‚;ã¨kŠĸ… ŋPĢ‚ą…ĘkŠō ŋpĢ‚ ōėk‚ōĘk’W…8ŋĢŽf3 ‚f… l†ģI8ŋ #,3 ‚ĘI lŠKL=ŋ¨Ģ #‚dL*l‚ZLLl“xŋ+8”RuD„"ŋŝ„Nŋ”{ žW…ˆŋĀô3 ‚f…jl†ģIˆŋ #ģ3 ‚ĘIjlūKLŽŋ #‚dLl‚ZLŦl“žŋ+8”RuSžãžŋÁ84 ‚ãŋl‡*ižŋU‚9iŋl„ĒŋqGž)ã­ŋ!Â}4 ‚;ãÔlūĸ…­ŋ!‚ą…él„ēŋōˆJž„ˇžŅ ˆÔž„āž_öˆčžˆ…ŋ„šŊc~ „¨Ŋ „ŧŊ| „ÎŊ … „"žH „ÂŋŠ{ • øĐŋœ16 Ą'1†?‘ĄuA‡16 ‘’W…ĀĀĢ”5 ‚f…m’ģIĀāĢ #[5 ‚ĘImŠKLĀøĢ #‚dLhm‚ZL¤m“8Ā+8”Rus†W…AĀ 6 øf…utŸ†ģIAĀ #Ķ5 øĘIutŸūKLGĀ #‚dLˇm‚ZLäm“WĀ+8”Rusˆ÷ŋ„˙ŋÜū„Āúå„`ĀŠ{ ô1´;ø“œŧ9 ITŨļŪÆĄ Ļ'¤H‘–:'o÷mĄpŋ'´'‘ †#˙ ?¨6 „Üū’Io.ŦBÜ6 ‚{o;n‚nosn‚aoo†z(8 ˜eHŧ9 Go’W…ą(ŦKq7 ‚f…Zo’ģIą@Ŧ #87 ‚ĘIZoūKLē #‚dLmo‚ZLšo“Ę+8”Ruc†W…ÜKé7 ‚f…­o†ģIÜ #°7 ‚ĘI­oūKLâ #‚dLÂo‚ZLīo“ō+8”Ruc„’–‚ ŗ§Į 8 ”Pv„ąč4 „ΰ‚ „÷°‚ ’W…#XŦO 8 ‚f…p’ģI#pŦ #g8 ‚ĘIpūKL, #‚dLp‚ZLBp“<+8”Ruc—ˆŦĪ8 žĮ9 „W–‚ „_Ē‚ „а‚ †W…_OG9 ‚f…Up†ģI_ #9 ‚ĘIUpūKLe #‚dLjp‚ZL—p“u+8”Rucš^všlv„Š{ „ –‚ ŗĮ‰9 ”Pv”R0„#č4 „A°‚ „z°‚ „ƒŠ{ „“Š{ Á9 }Ō#\I…Ą Ė`Āûœč9 ˜: ø° ‘nĀ : Šŧ „sĀ”! ‹ Ŧø° ‘‹ Ŧŧ Ēp†#˙€Ā`O: „…ĀÜū„—ĀŅĮ„ģĀ66 „ÃĀiž„ĐĀŅĮ„đĀ66 „ ÁŅĮ„)Á66 ´hø—œ> ITā­ŪƤHĄ Ļ':‘–:'‰oČpĄpŋ'´'‘ †#˙ ? ; „Üū’Įo.¸ŦBA; ‚üo q‚īoDq‚âoāq—ĐŦ‰< ˜eH> r’W…ąčŦKŌ; ‚f…+r’ģIą­ #™; ‚ĘI+rūKLē #‚dL>r‚ZLkr“Ę+8”Ruc†W…ŪKJ< ‚f…~r†ģIŪ #< ‚ĘI~rūKLä #‚dL“r‚ZLĀr“ô+8”Ruc„’–‚ ŗ§Įj< ”Pv„ąč4 „ΰ‚ „ų°‚ ’W…%­O= ‚f…Ķr’ģI%0­ #Č< ‚ĘIĶrūKL. #‚dLær‚ZLs“>+8”Ruc—H­0= ž"> „[–‚ „cĒ‚ „ް‚ †W…cO¨= ‚f…&s†ģIc #o= ‚ĘI&sūKLi #‚dL;s‚ZLhs“y+8”Rucš^všlv„Š{ „–‚ ŗĮę= ”Pv”R0„%č4 „C°‚ „~°‚ „‡Š{ „—Š{ Á9 \I…÷ ´1`ÁNœC> –? ø ‘vÁs> Š Š" Š/ Š< ‹`­‚ {s‹`­ Ĩs" Ãs/ ės< t†#˙ˆÁ Ņ> „ÁÜū†ũWÁ û> ‚ XĨs‚X+t†ũW` % %? ‚ XUt‚Xht„›ÁÜū„¤Áũ”„ŦÁ„ŋÁ…T„ĪÁŅĮ„üÁ˜: „ Âiž„ÂŅĮ„AÂ66 „IÂ…T„„ÂĄ ´œø“œC ITJļŪÆĄ Ļ'5A‘–:' p|tĄpŋ'´'‘ †#˙ ?@ „Üū’Dp.x­B<@ ‚vpĀt‚ipøt‚\p”u†zˆA ˜eHC Ėu’W…ą­KŅ@ ‚f…ßu’ģIą¨­ #˜@ ‚ĘIßuūKLē #‚dLōu‚ZLv“Ę+8”Ruc†W…ÜKIA ‚f…2v†ģIÜ #A ‚ĘI2vūKLâ #‚dLGv‚ZLtv“ō+8”Ruc„’–‚ ŗ§ĮiA ”Pv„ąč4 „ΰ‚ „÷°‚ ’W…#Ā­OB ‚f…‡v’ģI#Ø­ #ĮA ‚ĘI‡vūKL, #‚dLšv‚ZLĮv“<+8”Ruc—đ­/B ž!C „W–‚ „_Ē‚ „а‚ †W…_O§B ‚f…Úv†ģI_ #nB ‚ĘIÚvūKLe #‚dLīv‚ZLw“u+8”Rucš^všlv„Š{ „ –‚ ŗĮéB ”Pv”R0„#č4 „A°‚ „z°‚ „ƒŠ{ „“Š{ Á9 \I…K ‘аÂ[œBC ¤D øZ ‘ÆÂlC Šf Šs Š€ ‹Ž‚Z /w‹Žf Yws šw€ Ãw†#˙ØÂ€ ĀC „ŨÂÜū†ÖW⠁ ęC ‚åWYw‚īWgx— ŽD  ‘x„mÃ3|„uÃ÷ „Ã[)†ÖWÔÕ GD ‚åWßx‚īWķx„ņÂÜū„úÂũ”„Í„ÃŅĮ„HÖ? „PÃ…T„Ã…T„ĻÃŅĮ„ËÖ? áļ!ŊD ŪŲ–N5AáÉøÖD ëenvr @áÜøīD ëenvs @áīøE 虚— %âæ7P›%…‘ WDÄđœ2E K ø  ‘—8Ž‹E ŠŦ Šš ŠÆ ŠĶ Šā Ší Šú ģ 'Ä€„ķÆ_} —XŽK ‚  y‹XށŦ 0yš †yÆ ™yĶ ôyā Tzí hzú Éz’¤ ÃÄxŽ­0F ‚¯ {‹xށŊ 9{É f{„ÜČ…T†‘[ëIJPF ‚ [{{—ŽËJ  ¯{‹Čށ |†× ^Å%ŋG ‚æ N|ūgt^Å%Č˙t‚„t‚|ū"t^Å%(˙Yt˙Lt‚?tÂ|ū¤D hÅ Ŧ‚¯D }„uÅå|†ėėËÅEĶnG ˙í‚ í&}ūn˜ËÅE(˙Ĩ˜˙˜˜‚‹˜<}ūŊD ęÅ Ŧ‚ČD ‰}0ÆA(H % §}†”0Æ"ÛH ‚*”Ō}‚ ”ō}€0Æ"7”~ū8l2ÆR‚`l~‚UlŌ}‚Jl-~ūd9Æ/˙,d˙,d„^ÆK „jÆĖQ† €Æâ†H ‚' C~ūû}€ÆZ‚ ~C~ū€}€Æ$‚™}C~˙}†2 ƒÆâäH ‚A Y~ūą}ƒÆH‚Ā}Y~ū€}ƒÆ6‚™}o~˙}†L †ÆJâ[I ˙ƒ ˙v ˙i ’ŋš ÆđŽ Ģ>I ˙Κ‘€ Æđޏ˙(€ŠÖD ĢÆ¯ Ŧ‚áD …~’ösNĮ(¯ėäI ‚tŖ~ŠÜsNĮ(¯@‚ësŖ~Č ØI ‚ës×~†w[ČEÍI ‚†[×~„ČZg„VĮj’īD ÆĮ@¯úmJ ‚úD ę~‹@¯E „ŨĮŝˆWČ„kČ­P„zČ­P„ƒČ=„’Č­P„ŸČ=„ŽČ­PˆˇČˆøČ’ņ  Č`¯Å—J ‚ 3‚ S„ˆÅ…T„'Æiž„*Į…T„nĮU„5ČLĒ„YÄ „aÄ™„ˆÄÛ~„—Ä-ŧ„úč„Å…T„ËČ7š„ÉŠ{ ´ų—œŖN ITŌļŪÆ%Ą Ļ'÷D‘–:'qiĄpŋ'´'‘ †#˙ ?“K „Üū’Cq.x¯BĮK ‚xq­‚kqå‚^q€—¯M ˜eHŖN š€’W…ą¨¯KXL ‚f…Ė€’ģIąĀ¯ #L ‚ĘIĖ€ūKLē #‚dL߀‚ZL “Ę+8”Ruc†W…ŪKĐL ‚f…†ģIŪ #—L ‚ĘIūKLä #‚dL4‚ZLa“ô+8”Ruc„’–‚ ŗ§ĮđL ”Pv„ąč4 „ΰ‚ „ų°‚ ’W…%دO‡M ‚f…t’ģI%đ¯ #NM ‚ĘItūKL. #‚dL‡‚ZL´“>+8”Ruc—°ļM ž¨N „[–‚ „cĒ‚ „ް‚ †W…cO.N ‚f…Į†ģIc #õM ‚ĘIĮūKLi #‚dL܁‚ZL ‚“y+8”Rucš^všlv„Š{ „–‚ ŗĮpN ”Pv”R0„%č4 „C°‚ „~°‚ „‡Š{ „—Š{ Á9 \IߟÍŧN äN āž“äN ŪÖAĘ ´'âîôPŅ ëDŦCßģÍøN O āž“äN āHÄ%ü,%Éķœ%O Q ûž“.H‘— °øP ™›I%‚îė<'ΆYÉģO øœYŸūģIÉ ÛøĘIŸūĄIÉ -ø°IŸ†7 9É -åO ‚P :‚‚F k‚’éN WÉ8°YP ‚øN ~‚„lÉk€ ’§Y€ÉP°)9P ‚˛Y–‚„É=<’­N Éh°)ĀP ‚ÆN Ž‚‚ŧN Ė‚€É6ÕN ä‚’ņZÉ€°Ņ ĒP ‚ [ƒ‚üZƒ„­É~ „ÃÉĀ… „ËÉ ~ †éN ĶÉ YíP øøN ōMO „įÉk€ „QÉK „ķÉŠ{ ßpŧQ *Q āž“hë__x‘*Q lBü))ĘŧœGQ ÉX ûž“.H‘ĄĀI‹ÉX ‘—˜°ĒX ™lņđ8ƒ’Wéʸ°mR ‚p铃øféōnQ Š:ŖĘ¸°†‚IŖ“ƒ—đ°aR UŖâƒ’­P÷Ęą< R ‚ÎPT„˙ÁP„ËR$’­PË0ą<:R ‚ÎP|„˙ÁP„!ËR$„#Ęۀ ˆ÷Ę„,Ë=ˆ4ˈ*Í„6Ę÷€ ’h9ĘHąŽúV ‚w”„ŠN9ĘHąđ‚]ī„Š‡Ę9ĘHąŅ‚–Ęī„‹HąĸĘk…¯Ę‰…ŧʉ…’hĘ€ąđS ˙’"¯Ë˜ąķV ‚;´…‚1ī…ŠāĘÃËØąÚ‚ųĘT†‚īʏ†’ŋgÃ˲@rS ˙Îg˙Îg’ŅŌË(˛@|T ‚öƆ‚懂₇žūÜŌˇÎS ‚ŨƆ‚ Ũ‚‡‘ ËōË0˛ˆ‚%ˇ‚Ë‚‡‘–ČōËP˛š˙ĨČ‚¯Č‡‹P˛‘mČØĖX˛Ē˙xČ‚„Čއ‘BČØĖX˛Mļ˙QČ‚gČˆ‚[Čއ„ėĖ%| „qÍ%’\$Ėp˛DĖU ‚Š:ˆ‚œfˆ˙˙‚Š $Ėp˛)‚@fˆ˙4˙(‹p˛Nœˆ‘2Ë$Ėp˛)~‚gËfˆ˙[Ë‚OËȈ‹p˛uËęˆžÚ0Ė!)KnU ˙šÚ‚­Ú‰‡~4ĖS˙1~‚'~I‰ˆNĖž[ÉŠÍ )PŠU ø{ÉWøoÉu@€ŠÍ „•Í$:„ŠÍ–‚ „ÍĒ‚ „¤Í°‚ ūäɤÍ@øķÉuP‡߯ĒÍ ˙°g‰‚ø¯‡‰€Ē͇ǝŽÍ˛˙ĩ¯‚ͯš‰‚Á¯ē‰‡¯ŽÍMš˙ޝ‚¤¯š‰‚˜¯ē‰„ˇÍ”{ —˛ÎV ËĘ͉„tĖz„ ˆ˜Ė„ŦĖ­P„ģĖ­P„ÄĖ=ˆĖĖˆ|Í„TĘ⁠„hʏS„ĒË%| „gÍ”{ ’Q qʰ˛Ž°W ‚Q ö‰˙Q †x~€Ę+•ĨW ˙Œ~‚¤~!Š‚˜~@Ї<~€Ę+MŊ˙K~‚a~!Š‚U~@Ї~„Ę' ‚‚1~oŠ‚'~ŽŠˆĸĘ„ÍåĐ’ƒé´ĘȲŽƒX ‚’éŊŠŠ<¤´ĘȲˆ‚K¤õЋ螁W¤9‹’­PWËŗH*X ‚ÎP{‹˙ÁP„oËR$’­PoË(ŗHZX ‚ÎPŖ‹˙ÁP„ËR$„ÆĘ ˆWË„ŒË=ˆ”ˈ=ÍūƒéGÍŽ‚’éģ‹„RÍ<¤„2ÍŠ{ „EÍŠ{ „ZÍŠ{  BäH ž āX "Y āž“qåŪ˙Íž ´'Ū ž %ŪuAž "Y âîĀI  Aļ_5÷ÎX tûĀÍŌœCY T\ øāX ‘øęX ‘ø÷X ‘øY ‘ —@ŗI\ ŸY ‘T’^ ÚÍhŗ  ŪY ‚p Ķ‹Št‰ÚÍhŗŌ‚ƒ‰ŒŠ4‰ÚÍhŗ ŧ˙Z‰˙M‰‚C‰Œ’ĀSøÍ€ŗŖ Z ‚ŲS}Œ‚ĪSįŒ„Îū’W…ΘŗŖ ŠZ ‚f…H’ģIθŗ #QZ ‚ĘIHŠKL ÎĐŗ #‚dLš‚ZL֍“HÎ+8”RuW’ƒ‡#ÎčŗĨ [ ‚•‡ôŠW…#Î´Ō‚f…0Ž’ģI#Î(´ #äZ ‚ĘI0ŽŠKL,Î@´ #‚dLlŽ‚ZL¨Ž“WÎ+8”Rw†ƒ‡aÎĨ ˛[ ‚•‡ƎūW…aÎŌ‚f…ێ†ģIaÎ #x[ ‚ĘIێūKLgÎ #‚dLđŽ‚ZL“sÎ+8”RuW†W…~ÎŖ *\ øf…uXŸ†ģI~Î #ņ[ øĘIuXŸūKL„Î #‚dL0‚ZL]“Î+8”RuW„øÍy]„ÎÜū„#Î/Q „|Ί{ ę /e\ u\ āž“Fu\ ¸8•’ķöœÚ^ ’HĻ8xhĻ8šw…)DĻ8pƒ¸†)DĻ8‘ƒC)EĻ8‘—X´Ī^ ­>)GĻ8Ĩ‰ųÖ p´)K6^ ‚"×Ī‚א‘T\ $ˆ´S‚o\ 0‚e\ YžW…~/Ģ] ‚f…w’ģI~ ´ #r] ‚ĘIwŠKL¸´ #‚dLŒ‚ZL𐓙+8”RugžW…™/"^ ‚f…ː†ģI™ #é] ‚ĘIːūKLŸ #‚dLᐂZL‘“Ŧ+8”Rugˆ8ˆMˆ\ž ˇ)P°^ ‚° !‘‚¤ ?‘€ˇ‡c ˇ~‚ƒ !‘‚w S‘‡B ŋ g‚V ‘ˆʄˇ–‚ „ÛĒ‚ „í°‚ „öŠ{ á×#_ Ļ8 Ļ8Ūw…vĻ8Ū¸†vĻ8ŪCvĻ8ę$ /0_ @_ āž“F@_ ¸8ߥ~T_ ‰_ āž“Scë__nŽÚxë__sŽ´'âîŖB“5ü|~ĪœĄ_ Wo ûž“dĄ‘ĄPĸGĒx‘ĸ__xGWo ‘—Đ´Šf ĨXĨQ3‘L’!†&ø´Lpa ‚5†Ÿ‘‚M†ב‚A†’‘å…&ø´MŊ‚ô…Ÿ‘‚ †ב‚ū…’‘T\ *ĩ ‚‚o\ /’‚e\ ^’žW…y/ä` ‚f…‡’’ģIy(ĩ #Ģ` ‚ĘI‡’ŠKL|@ĩ #‚dLœ’‚ZLɒ“‘+8”RuTžW…‘"/[a ‚f…ܒ†ģI‘ #"a ‚ĘIܒūKL— #‚dLņ’‚ZL““Ŗ+8”RuTˆ?ˆTˆc’T\ rXĩQšb ‚o\ 1“‚e\ v“žW…/b ‚f…˛“’ģI€ĩ #×a ‚ĘI˛“ŠKL˜ĩ #‚dLĮ“‚ZLô““2+8”RuSžW…2@/‡b ‚f…”†ģI2 #Nb ‚ĘI”ūKL8: #‚dL”‚ZLI”“D+8”RuSˆˆĨˆˇ†Ú^ Ã^SCd ‚_ \”‚_ „”‚÷^ ŔūAšÃ^‚‚‚š\”‚uš„”‚hšŔūÃ^_‚š\”‚ô¸„”‚į¸Ŕ€Ã^šŲ”ūI¸Ã^V‚€¸•‚s¸`•‚f¸Ŕ€Ã^¸ȕū_ ā:‚:_ ە‚0_ –‰ĀSæ°ĩ/Úc ‚ŲS9–‚ĪSL–„ķūžĀSū/ d ‚ŲSy–‚ĪSؖ„ū‡ĀS /‚ŲS—‚ĪSY—„ū’_ !ĐĩWe ‚:_ †—‚0_ ¨—‰ĀS'čĩ/Ÿd ‚ŲSŌ—‚ĪSô—„:ū‰ĀSGļ/Ōd ‚ŲS$˜‚ĪSF˜„Sū‘ĀSX0ļ/‚ŲSf˜‚ĪSˆ˜„dū’ą]dPļWƒf ‚Â]¨˜‰W…dpļ/˜e ‚f…ʘ’ģIdļ #_e ‚ĘIʘŠKLg¨ļ #‚dLė˜‚ZL™“›+8”RuS‰W…wČļ/f ‚f…,™†ģIw #Öe ‚ĘI,™ŠKL}āļ #‚dLN™‚ZLp™“Ĩ+8”RuS‘W…øļ/‚f…Ž™†ģI #If ‚ĘIŽ™ŠKL‡ˇ #‚dL°™‚ZLŌ™“¯+8”RuSˆ—(ˇ8o îŖB^5™=`5đ™™œVazx%š™×nbzxiš’E_ ąHˇ_]g ‚k_ ›‚^_ T›‚T_ Œ›‹Hˇz_ ¸›†9cą9g ˙Hc˙HcūēÁ“‚%ēí›˙ē’wØÉpˇ`ƒg ˙ĄØ‚”Ø5œ’ēܘˇa h ‚Ÿēœ˙Šē‹˜ˇ‡gēÜĒ‚rēɜ˙~ē‡<ēÜMļ‚Kēɜ‚aēŨœ‚Uēņœ„å%| ’!†ë°ˇi’i ‚5†‚M†‚A†u‘å…ë°ˇMŊ‚ô…‚ †‚ū…u‘T\ đȡ ‚‚o\ Н‚e\ +žžW…*/i ‚f…jž’ģI*⎠#Íh ‚ĘIjžŠKL-øˇ #‚dLž‚ZLŦž“B+8”RuTžW…B/}i ‚f…ŋž†ģIB #Di ‚ĘIŋžūKLH #‚dLԞ‚ZLŸ“T+8”RuTˆˆˆ(’Ũ×+¸rAj ˙*؂؟‚ØLŸ˙ØŠ…×+¸).˙ŌׂÅן‚¸×LŸ˙Ģ׊4×+¸)‚iן‚]×LŸ˙Q׋¸w×xŸ„>z\ ’Ũ×A(¸yđj ˙*؂ذŸ˙Ø‚Ø؟Š…×A(¸).˙ŌׂÅ×°Ÿ˙¸×‚Ģ×؟Š4×A(¸)‚i×°Ÿ˙]ׂQ×؟‹(¸w×ųŸ„Sz\ ’ŋ aH¸ˆm ˙ô ‚č 1 ‚Ü \ ‘ aH¸—˙° ˙¤ ‹H¸‘c aH¸~˙ƒ ‚w o ‘B i`¸g‚V  ‘ą]i`¸]‚Â] ‰W…i€¸/l ‚f…Đ ’KLi˜¸ #ņk ‚dLĄ‚ZLHĄ“Ž+8”RuŧūģIœ #‚ĘIĐ ‰W…€°¸/‡l ‚f…[Ą†ģI€ #Ll ‚ĘI[ĄŠKL†ȸ #‚dL—Ą‚ZLšĄ“ã+8”Ruŧ‘W…Šā¸/‚f…ץ†ģIŠ #Ál ‚ĘIץŠKLø¸ #‚dLĸ‚ZLBĸ“Ų+8”Ruŧ†ŸęŠ‘m ˙ҟ˙įŸ‚۟`ĸ€ę‡Ÿî ˛˙˜Ÿ˙°Ÿ‚¤Ÿsĸ‡bŸî Mš˙qŸ˙‡Ÿ‚{Ÿsĸ„÷”{ ’Ÿiš…n ˙ҟ˙įŸ‚۟†ĸ‹š‡Ÿi˛˙˜Ÿ˙°Ÿ‚¤Ÿšĸ‡bŸiMš˙qŸ˙‡Ÿ‚{Ÿšĸ„t”{ †ŋ Œ„Žn ˙ô ˙č ˙Ü ‡ Œ—˙° ˙¤ €Œ‡c Œ~˙ƒ ‚w Žĸ‘B •(šg‚V ņĸˆĄ†œļ ûn ˙§‚ŗŖ‡vļ MĀ˙…‚Ŗˆŋ„_–‚ „|Ē‚ „…–‚ „ŗ–‚ „w°‚ „ŧ–‚ „Š{ „MŠ{ „ŽŠ{ ¸8ßô|ko ƒo āž“dĄë__x‘ƒo 9Ŧr D ÎØœĸo „q ûž“ĶH‘ƒĄ‘D„q ‘‰\o ´Î@šEyq ‚uo 0Ŗ‚ko ~Ŗ’!†ÂÎ`š•nq ‚5†ļŖ‚M†âŖ‚A†$¤‘å…ÂÎ`šMŊ‚ô…ļŖ‚ †âŖ‚ū…$¤‘T\ ÆÎxš ‚‚o\ B¤‚e\ „¤žW…=Ī/âp ‚f…ĸ¤†ģI=Ī #Šp ‚ĘIĸ¤ūKLCĪ #‚dLˇ¤‚ZL䤓PĪ+8”RugžW…[Ī/Yq øf…v Ÿ’ģI[ΐš # q øĘIv ŸŠKL^΍š #‚dL÷¤‚ZL$Ĩ“vĪ+8”RugˆÚΈīΈū΄-Ή_ „YĪŠ{ ¸8ü!€Ī$œĄq Éq ûž“†ā‘ĄĄ‘GÉq ‘„ŸĪˆo ¸8Ļ6ŋ°ĪÜœéq Ís ûž“›V‘ĄjUŋÍs ‘’\o ÄĪĀšĀÂs ‚uo 7Ĩ‚ko …Ĩ’!†ŌĪčš•ˇs ‚5†ÍĨ‚M†Ļ‚A†GĻ‘å…ŌĪčšMŊ‚ô…ÍĨ‚ †Ļ‚ū…GĻ‘T\ ÖĪē ‚‚o\ eĻ‚e\ §ĻžW…QĐ/+s ‚f…ÅφģIQĐ #ōr ‚ĘIÅĻūKLWĐ #‚dLÚĻ‚ZL§“dĐ+8”RugžW…oĐ/ĸs øf…v Ÿ’ģIoĐē #is øĘIv ŸŠKLrĐ0ē #‚dL§‚ZLG§“ŠĐ+8”RugˆęĪˆ˙ĪˆĐ„AЉ_ „mĐŠ{ ¸8ú°ŲĐJœęs Ft ûž“>V‘ĄĄ‘œFt ‘†‘[ēĐž't ‚ [Z§„ąĐ/„ēĐÎq „ĘЍ¸8ŋĢHÍœ§v ‡{!ŗ/n†!Ā’!˙˙’t‰įHēuÉt øƒ‰ŸŠ4‰įHē ŧ˙Z‰˙M‰‚C‰§’t‰„`ēgu øƒ‰ŸŠ4‰„`ē ŧ˙Z‰˙M‰øC‰Ÿ’Ō›xēĻwu øœŌŸŠŧu›xēøËuŸ‘u›xē}øŦuŸˆ$„4ׂ „D˙—„\˙—„t˙—„‘™ˆĻ„ˇ×‚ „Ė™ˆ܄ėׂ „™ˆ„%ׂ „5˙—„M1š„e1š„}˙—„•1š„¯™ˆŋ„Īׂ „ß˙—„ׂ „{P„-™ˆ=„Mׂ „]˙—ˆy„„ׂ „›ׂ „Åׂ ÁNĒF¨p“Á‹FŠp“ÁæįFĒp“ÂVŪ*ŽÃ10Ã@0ÃO0Ã^0Ãm0Ã|0Ë0Ú0Ê0ø0ÃĮ0ÃÖ0Ãå0Ãö0Ã1Ã1Ä)1dÃ61ĶÃE1 ĶÃU1ø JGÃe1ö ĖčÃs1æ ŸõÃ1Ô ņõÓ1Á ĶÃŖ1Š múÃŗ1@ĢúÃŋ1ĢúÃË1ĀæÃ×1¤ Ä%2Ã8ųÅIų˙˙˙˙˙˙˙ÃcųļįÃtųÈųvä×ų“ HÃ§ų ĶÃˇųg ÃĮųÃØųĶÃéųO väÃųų> väà ú- næÃú' dįÃ)ú PãÃ9ú dįÃIú PãÃYú čãÃiú÷ dįÃyúđ 8Ã‰úč ŸõÙúÖ väÊúÅ väÚú´ ÆÉúŸ†ÃŲúÃčúÄųúĮû˙Įû˙˙Æ%û˙˙ÚåÃ6ûĒ PãÃGûŸ t'%]z °‘'ž Kz ÃXûÃiûāÄtûLāûRÄŽûTÄ›ûIÄĩû/JGÃÂû9LåÃĐûõÄßûÄėû(čÃųûčà üÔÃüĐÃ"üĖÃ,$øČ)FÉC4ŠOÉN4ĶÉî82õÉ9€ÉQ92ÄÉ\9yGʲĻôĘÜr<ÉFFš@ĘIŅ<ÉĻŅë/s7„CŠ{ *ŽË8ÆõõŊ{ *ŽĖjĀ×Ļ %Õ{  % +BFj %ė{ ´'mĖ ˜Q%| ´' Ŗ¯F‚ %%| Č*&'´'m477€9*Ž>| đĖ#ÆČ*[| ´' %E5ŋgG %u| u| ĸ>všŽE / %•| ´'´' ؅ %°| ´'´'EwĐJŦ %Ę| M(M(v‡$´k%W @”Fs %ų| ëD´'' ĒuFZ %} ëD Į\  %%}  %ÍÅ5 %9} 9} v,ÎEøO} 9} Î<+_} 9} Ėoŧ’ %w} ´'EĻņFō %Œ} ëDĖR‘S}*ŽŽ} *ŽuQ%ĖÃ'×.Q%Õ} u&'&'ëDĩ)ôWč}  %˰RpŽČ*~ ´'´' 2FëD ~ ´'´'Eŧ¯Fí %5~ ëDÍKŲ*ŽI~ Q%Ξ)c~ *Ž*Žd Ž&'y~ ´'Es÷“ %˜~ ´'´'&' ŨįœČ*Ž~  %~-=m2Æ:Ė eDČ*Ö~ ´' % ƒī %ö~  %´'—S Ä3@ % ´'4dŲ7‚PO*Ž* đÍāĩ*ŽH *Ž %‘'{7†H] *Ž Þ\˙Č*x Č*&'ĩũ2]>‹ ‹ vž•ĩFķW㤠*Ž Ø]6 %Î Î ´'&'Ų  %vÔ ž•vߕ åuFí %˙ ëDX% % ŖYFōX%€ ëD K*FÅ&':€ *Ž&'&'ëD ”š\ %U€  % % ū×\a %k€  %EXF˛ %€€ ´'EŠ”nx %•€  %EڔKķĒ€ Ē€ °€ v€+vļ€ nŽ ōN\nВۀ  %u&' jÍoü %ņ€ ņ€ vãwEņoŪŽ V\o % ņ€ ĸoô %/ ņ€ E€)pq %N  % % %E`úp‰ %m  %m Ą”vs ų> đck– % ´'´'I@ vC@ĩĒ’kœļ C@ ĘnkŸ´'ˁ  % ĸÕo^ %⁠- ÖHoa*Žø - 1ÄWk %‚ Č*jdup\ %$‚  % ĸˇoī %?‚ ņ€ ?‚ vE‚  GFd %f‚ ëD´'mE‹n %{‚  %Īžvector::_M_insert_auxÍ*ŽĒ‚ *ŽĐõ(в %^oY %Ņ‚ Ņ‚ dv-Íå4 %õ‚ d*Ž*Ž D$F2ëDƒ  %´' 6HF= %+ƒ  %ëDĖŧĀžH %Hƒ ´'ëDĩ—Ī\[[ƒ  % 7\hВ{ƒ  %*Ž&'ECÖqˆîšƒ îÆ: % R\Ą %°ƒ Æ:w‰R\ôî f›\ņ %ԃ ´' za\' %ōƒ ´'9D9DĖEph– %„ uuQ%}ˇFÍ)**Ž=„ uĢ5Ģ5 %Ņ`ãRÍë*Že„ *Žu‘'E 2nv %z„  % :+od %•„ -uEƒ6¯Č*Ē„ ´' (@b %ʄ  %ʄ Մ vЄ ‚4v‚4w„m\Ō %Eŗcr9*Ž… *Ž&' % % %؍EˆÄsQ %:… :… *Ž %*Žmvœ“E'rL %Z… *Ž&'E°ƒb× %o… o… v˙’E{Tt  %…  % %mÎj( … *Ž @]2 %Ā… ‹ ´' %×.FË&'u&'&'ëD% U$ > 9: ; : ; : ; : ;  : ; : ; (  : ;  I8 9: ; .?: ;I</II.?: ;I<: ; I.?: ; n<&I.?: ; nI<.?: ;nI<.?: ;nI<.?: ;nI<: ;I.?: ;n<.?: ;nI< : ; I8 2 : ; I2 .?: ; 2 <dI4 .?: ; 2 <d! : ;I8 ".?: ;<d#.?4<d$ : ;I?2 <% : ; I8 & : ; I?<'.?: ; nI<(.?: ; nI<d).?: ; n<d*.?: ;n<d+.?: ;nI<d,.?: ;nI<d-.?: ;nI<..?: ;2 <d/.?: ; 2 <cd0.?: ;nI2 <d1.?: ;nI2 <d2.?: ;n2 <d3.?: ; nI2 <d4.?: ; nI<5/I6<7 : ; 8<9 : ;2 : : ;I?<;.?: ;2 <d<: ;I2 = : ;I?2 < > : ;I?2 < ? : ;I?2 <@.?: ; L 2 <dA.?: ; nI2 <dB.?: ; nI2 <dC.?: ; <D.?: ; <E.?: ; I<F.?: ; I<G.?: ; <dH.?: ; n<dI/IJ.?: ; nI<dK.?: ;nIL M2 <dL.?: ;n<dM : ; N : ;O9P4: ;I<Q:: ;R : ; S.?: ; nI<T.?: ;2 <cdU.?: ;L 2 <dV : ; 2 W : ;X : ;2 Y0I Z : ;I8 2 [.?: ;nI2 <\.?: ; <cd].?: ;<cd^<_.?: ; 2 <d`.?: ; 2 <cda : ; 2 b.?: ; n2 <dc : ; d : ; I8 2 e.?4<df.?42 <dg : ;h.?: ; n2 <di.?L 42 <dj.?: ;I<k4: ; nI?<l4: ; I<mn.?: ; n<o$ > p Iq : ; nr : ; s : ; ItIu!I/ v Iw.?: ;I<x : ; y9: ; z.?: ; I<d{.: ; I<|:: ; } I~.?: ; I< € : ; n : ; ‚ I8 ƒ„&…!† : ; I8 ‡Iˆ: ; ‰ : ;I 8 Š : ;n‹9: ;Œ : ;.?: ;2 <dŽ : ;.?42 <d: ;I2 ‘.?: ; nI2 <’.?: ; <d“.?: ; n2 <d”.?: ; nI2 <• : ;– : ;I— : ; I?2 <˜ : ;I8 ™.?: ;nI2 <š.?: ;nI2 <›.?: ;nI2 <dœ : ;I?2 <  : ; ž : ; 2 Ÿ I8 42  .?: ; nIL M2 <dĄ.?: ; nL M2 <dĸ.?: ;n2 <Ŗ.?: ;n2 <¤ : ;Ĩ.?: ;nL M2 <dĻ.?: ;nI2 <§.?I4<d¨ : ;Š : ;2 Ē : ;I8Ģ.?L 42 <dŦ.?: ;n2 <d­.?: ; nIL M2 <dŽ : ;2 ¯.?nI42 <d°.?: ;n2 <dą.?: ;nL M<d˛9ŗ.?: ;L 2 <d´.?: ;<ĩ.?: ;<ļ/ˇ.: ;I<¸.G<š.: ;I<ē.: ;<ģ.?: ;n<ŧ.: ; <Ŋ4: ;nI?<ž4: ;I<ŋ4: ; nI?<Ā4: ; I<Á4: ; I<Â4: ;I< Ã4: ;I<Ä4: ;I<Å4: ;I<Æ4: ; I< Į4: ;I?<Č4: ; I<É.?: ; I2 <dĘ.?: ; I2 <dË.?I42 <dĖ.?: ;I2 <dÍ.?: ;I2 <dÎ.?: ;n2 <Ī.?: ;n<dĐ.?: ;nIL M<dŅ.?I42 <dŌ.?: ;nIL M<dĶ.?: ;nL M2 <dÔ.?: ; nL M2 <dÕ.: ;I<Ö.?: ;L <d×.: ; I<Ø : ; Ų : ; IÚÛ: ;Ü : ; Ũ.?: ;I Ū: ;Iß.G dāI4á.G â ã4: ; Iä.G: ; då.: ; I æ4: ; Iį5Ič: ; Ié: ; Ię.G: ; dë: ;Iė.?: ; I í.?: ; î4: ;Iī.G đ.G: ; ņ4: ;IōdķIdô õ ö.4 ÷.1n@d—Bø1ų.1@–Bú.G@d–BûI4ü.G@d—BũIū1X Y˙1€ 41‚1ƒ: ; I„‰‚1….1n@d–B†1X Y‡1X Y ˆ‰‚‰1RUX Y Š1RUX Y‹ UŒ.1@—B1 Ž.1@d—B1  ‘1RUX Y ’1RUX Y“‰‚1”Š‚‘B•.G@—B–: ;I— U˜4: ;I™4: ;Iš: ; I›: ; Iœ4: ; I4: ; Iž1X Y Ÿ41 .G: ;@—BĄ: ;Iĸ: ;IŖ.G@—B¤4: ;IĨ4: ;IĻ.G: ;@d—B§I4¨.1n@—BŠ41Ē4: ;I Ģ: ;IŦ.G: ; @d—B­4: ; IŽ.G: ; @—B¯4: ; I°!I/ą.G;@—B˛41 ŗ‰‚1´.G@–Bĩ.G: ;@–Bļ: ; Iˇ‰‚•B1¸‰‚•B1š‰‚“Bē.G: ;@d–Bģ1X YŧŠ‚1‘BŊ ž4Iŋ.4@—BĀ1Á4: ; I?<Â4I?4<Ã4GÄ4G Å4GÆ4GĮ4GČ4GÉ4GnĘ4GnË.?n4<Ė.?nI4<Í.?I4<Î.?4<Ī6Đ.?4<Ņ.?I4<%10Ÿ1NP(1R“1GR“GJrŸ“JNR“:NQUa0ŸaxPXaR“aqR“qtrŸ“txR“atrtxQ…‘0Ÿ‘¨Pˆ‘R“‘ĄR“Ą¤rŸ“¤¨R“ĩÁ0ŸÁØP¸ÁR“ÁŅR“ŅÔrŸ“ÔØR“X\u#ŸX\V“\rV“ruvŸ“uV“—™V“bnP•WƒWŸĢRŖĢR2V23‘1B0ŸBQWQXwŸXjW4j‘#Ÿ’0Ÿ’ĄWĄ¨wŸ¨ēW„ē‘#ŸŅâ0ŸâņWņøwŸø WÔ ‘#Ÿ!20Ÿ2AWAHwŸHZW$Z‘#Ÿq‚0Ÿ‚‘W‘˜wŸ˜ĒWtĒ‘#ŸÁŌ0ŸŌáWáčwŸčúWÄú‘#Ÿ&‘&KU&‘&KWvŸ$V$&‘# p2&1Ÿ&‘#Ÿ&KwŸav‘v›Uav‘v›WlovŸotVtv‘# p2&1Ÿdv‘#Ÿv›wŸąÆ‘ÆëU௑ÆëWŧŋvŸŋÄVÄÆ‘# p2&1Ÿ´Æ‘#ŸÆëwŸ‘;U‘;W vŸV‘# p2&1Ÿ‘#Ÿ;wŸQf‘f‹UQf‘f‹W\_vŸ_dVdf‘# p2&1ŸTf‘#Ÿf‹wŸĄ˛0Ÿ˛ÁUÁĖuŸĖŪU¤Ū‘#Ÿ‘?U?‘‘?V pŸP‘#Ÿ?vŸP_P_}Q}ĩWĩžķPŸžÂQa}0Ÿ}ĩVžÂ0Ÿa}0Ÿ}ŸUŸ§uŸ§ĩUžÂ0Ÿg}Q}ĩWĩžķPŸžÂQĐųPųWwŸ,W,;wŸ;EWGhWčų0Ÿų U uŸ/U/5u~Ÿ5?UGiUpļPļĀķPŸpļRļĀķRŸpļpŸļĀķP#ŸŠ˜ ˙ŸŠ˜pŸ ­ ˙Ÿ ­pŸŖ­Q;V;<‘<WVWX‘;vŸ;<‘#Ÿ<WvŸWX‘#Ÿ%D‘oŸDHRHX‘oŸ%5P<HP';qŸ;‡‘#Ÿ'oW';V'XVX]vtŸ]„V;CVCGvtŸGXVXavtŸ;CvŸCGv|ŸGXvŸXav|Ÿ;G‘LMo‘L;GPM\Pow‘# ‘#<Ÿo…Wsw‘# ‘#<ŸsW;Q;˜‘';qŸ;˜‘#Ÿ'oW';V'XVX]vtŸ]•V;CVCGvtŸGXVXavtŸ;CvŸCGv|ŸGXvŸXav|Ÿ;G‘LMo‘L;GPM\Pow‘# ‘#<Ÿo–Ww‡WVW/VGVGLv|ŸLkV/3V37v|Ÿ7GVGPv|Ÿ/7‘L<V‘L/7P<KPV^‘#‘4ŸVlWZ^‘#‘4ŸZfWĀōRōŊuTŊžtPžĐuTĐŅ‘LŅR uTĀäpäōqōŊuPŊžtLžĐuPĐŅ‘HŅR uPéō0Ÿō<W<?t?@t@DtaeVr™WŅæW  W P&V&tvŸt‹VŅævŸ  V8 : vŸ æŸ R Ÿ ŊuPŊžtLžĐuPĐŅ‘HŅæuP R uP*DRŅåRåævwŸ*<W<?t?@t@DtŅæW*tuTŅæuT8 R uT*tŸŅæŸ8 R ŸGcWceudŸemWmtudŸ8 R WGtuP8 R uPVcWceudŸemWmtudŸYtu`ŸYqPtŅ ˙Ÿ 8  ˙Ÿt™W  WtŊuTŊžtPžĐuTĐŅ‘L 8 uTtŅŸ 8 Ÿ™ģVģŊu`ŸŊžt\ŸžÎVÎĐu`ŸĐŅ‘XŸ V 8 u`Ÿ™ŊuPŊžtLžĐuPĐŅ‘H 8 uP¨ģVģŊu`ŸŊžt\ŸžÎVÎĐu`ŸĐŅ‘XŸĢŊudŸŊžt`ŸžĐudŸĐŅ‘\ŸĢļPļģv<ŸģŊu`<ŸŊžt\<ŸžÅP 8 u`Ÿ& 1 udŸ1 5 R5 8 udŸ& 5 P@ K u`ŸK O RO R u`Ÿ@ O PÛäPäōQōŊuPŊžtLžĐuPĐŅ‘HŅR uPč uPđûu_Ÿû˙R˙ u_Ÿđ˙P` ‘ P‘ 8 ķPŸ` ° R° ) ‘H) 8 ķRŸ‡ ° 0ŸÚ ) Ué ˙ P˙ u‘H"Ÿ # P# ) u‘H"Ÿ ) ‘L ) WĮ ) VĮ ) Wö ˙ ‘Y˙  p ‘Yņ W@ ^ P^ w Ww † P† Ÿ WŸ   PV ^ R^ v VV Z p#Ÿx † P† Ÿ WŸ   Px † p#Ÿ† ‹ w#ŸŽ ‘ pŸ‘ – P"pŸ"u‘#Ÿ%Y‘oŸY_P_u‘oŸ%-R3_ReuR3Y‘oŸY_P_u‘oŸ3_ReuR3Np|ŸNZ ‘#4ŸZ_rŸesp|Ÿsu ‘#4ŸBN ˙ŸBNp|Ÿesp|Ÿsu ‘#4Ÿ5V“5QV“TVV“ u u u#Ÿ2<ōŸJ<HP@HPXdR\dRŊ đ uđ ņ tņ  uŊ đ uđ ņ tņ  uŊ đ uđ ņ t ņ  uŊ đ u đ ņ tņ  u Ŋ Ā PĀ î Vî ņ pņ  V* 8 RJ T RT X v* 8 r ŸJ T r ŸT X v# Ÿ0 D ‘oŸJ T ‘oŸT X RX ] ‘oŸ0 8 PJ X P ­ V˛ ô Vƒ Ļ :Ÿ˛ Č :Ÿé ô :Ÿƒ Ļ V˛ Č Vé ô VĒ ž VÅ Ų VŦ Å :ŸŦ Å VÅ Ņ 0ŸŅ č PČ Ņ R“Ņ á R“á ä rŸ“ä č R“T_pŸ_|u #Ÿ|}t#Ÿ}’u #ŸrzVz{w{|u#|}t#r{wŸ{|u#Ÿ|}t#Ÿ_hRhq‘_hPhq‘ũRqtVDudŸt`Ÿ-udŸ-0t`Ÿ0iudŸG€VTZQZ€W€uPtL-uP-0tL0iuP#€u GudŸt`Ÿ-udŸ-0t`Ÿ0iudŸT€utíVíúvŸúV+V€“7ŸĨ¨P¨ĀvĀuW°WĶúō¨ZĶŨpr"ŸßWßâptŸâRęWęRúpw"ŸudŸt`Ÿ-udŸ-0t`ŸucŸt_Ÿ-ucŸ-0t_ŸPud<Ÿt`<Ÿ"P:EucŸEIRIiucŸ:IPP[ucŸ[_R_iucŸP_PÆĐPĐā‘# āc‘LÆbUÆĐPĐā‘# ā?V?DvlŸDHVā÷V÷ûvlŸû?V?HvlŸā÷vŸ÷ûv|Ÿû?vŸ?Hv|Ÿāû‘HH‘HāãPãęv<Ÿ Pāęv Ÿv Ÿæû‘HH‘HæíP(PęôvŸ)3vŸđû‘H/H‘HđûP/CP– P °‘# °9‘L–5U– P °‘# °WwlŸW°ĮWĮËwlŸËWwlŸ°ĮwŸĮËw|ŸËwŸw|Ÿ°Ë‘HŅ‘H°ŗPŗēw<ŸŅŨP°ēw ŸŪčw ŸļË‘Hä‘HļŊPäøPēÄwŸųwŸĀË‘H˙‘HĀËP˙P+2p,Ÿ2Qq,ŸQČ‘#,Ÿ9APAČ‘L9ĮU9APAQ‘LQW”wxŸ”˜WQdWdhwxŸhW˜wxŸQdwŸdhw|ŸhwŸ˜w|ŸQh‘Hn˜‘HQZPZaw<ŸnzPQdWdhwxŸ{W˜wxŸ]h‘H€˜‘H]hP€“PĐ‘RÕ‘# Ÿr ŸÕá0ŸáR0ŸØáP“áķP“ķõplŸ“P“r “@‘@DR@‘# Ÿ@Dr Ÿ!0Ÿ!@R@D0Ÿ!P“!3P“35plŸ“@BP“BDr “šˇVˇ¸t ¸štÅÔVš¸w Ÿ¸št# ŸÅÔw Ÿ¯ˇVˇ¸t ¸štāö0Ÿö*V,7VXu ŸŽ‘# ŸX`0Ÿ`„W[V“‹V“bnRnovosrdŸhnRnovosrdŸhnrŸnsR|„ō h¨Ũu ŸŨŪ‘# Ÿ¨°0Ÿ°ÔWĢĪV“ĪÛV“˛žRžŋvŋÃrdŸ¸žRžŋvŋÃrdŸĖÔō iø/uԟ/0‘#TŸø0Ÿ&Wû!V“!-V“RR&ōīiHuԟ€‘#TŸHP0ŸPvWKqV“q}V“R`RX`RnvōėjēÎVÎĪt ĪĐtÕäVēĪw,ŸĪĐt#,ŸÕäw,ŸÉÎVÎĪt ĪĐt!P!'V'(w()u#)*t#*ÁV!pŸ!^vŸ^iPi'vŸ'(w#Ÿ() u##Ÿ)* t##Ÿ*ÁvŸ!pŸ!'vŸ'*vŸ*-vŸ-0vŸ03vŸ3v4ŸP'v4Ÿ'(w#4Ÿ() u##4Ÿ)* t##4Ÿ*Áv4Ÿ'nvŸnzPz'vŸ'(w#Ÿ() u##Ÿ)* t##Ÿ*ÁvŸ'*vŸ*-vŸ-0vŸ03vŸ3v4ŸP'v4Ÿ'(w#4Ÿ() u##4Ÿ)* t##4Ÿ*Áv4Ÿ*ŒvŸŒ—P—'vŸ'(w#Ÿ() u##Ÿ)* t##Ÿ*ÁvŸ*-vŸ-0vŸ03vŸ3v4ŸP'v4Ÿ'(w#4Ÿ() u##4Ÿ)* t##4Ÿ*Áv4Ÿ-œvŸœ¨P¨'vŸ'(w#Ÿ() u##Ÿ)* t##Ÿ*ÁvŸ-0vŸ03vŸ3v4ŸP'v4Ÿ'(w#4Ÿ() u##4Ÿ)* t##4Ÿ*Áv4Ÿ0ēvŸēÅPÅ'vŸ'(w#Ÿ() u##Ÿ)* t##Ÿ*ÁvŸ03vŸ3v4ŸP'v4Ÿ'(w#4Ÿ() u##4Ÿ)* t##4Ÿ*Áv4Ÿ3v4ŸP'v4Ÿ'(w#4Ÿ() u##4Ÿ)* t##4Ÿ*Áv4ŸY^vŸ^iPi'vŸ'(w#Ÿ() u##Ÿ)* t##Ÿ*ÁvŸo*ŸozPz'vŸ'(w#Ÿ() u##Ÿ)* t##Ÿ‰*Ÿ‰ŒvŸŒ—P—'vŸ'(w#Ÿ() u##Ÿ)* t##Ÿ*Ÿ¨P¨'vŸ'(w#Ÿ() u##Ÿ)* t##Ÿˇ*ŸˇēvŸēÅPÅ'vŸ'(w#Ÿ() u##Ÿ)* t##Ÿ*Ÿv4ŸP'v4Ÿ'(w#4Ÿ() u##4Ÿ)* t##4Ÿ2=ugŸ=ARAÁugŸ2APHSugŸSWRWÁugŸHWP^iugŸimRmÁugŸ^mPtugŸƒRƒÁugŸtƒPŠ•ugŸ•™R™ÁugŸŠ™P ĢugŸĢ¯R¯ÁugŸ ¯Pũ:VB"V#&vŸ&1P1:vŸB"vŸ#:ŸB"Ÿ7BPB:vŸBĸvŸ7:ŸBĸŸQTvŸT_P_:vŸBĸvŸQ:ŸBĸŸepPp:vŸBĸvŸe:ŸBĸŸ‚vŸ‚P:vŸBĸvŸ:ŸBĸŸÉĖv4ŸĖ×P×:v4ŸBĸv4ŸÉ:ŸBĸŸí:v4ŸBĸv4Ÿķ:ugŸBĸugŸķ÷PBOP÷:vŸRĸvŸũ:ugŸRĸugŸũPR_P:vŸbĸvŸ:ugŸbĸugŸ PboP :vŸrĸvŸ:ugŸrĸugŸPrP:vŸ‚ĸvŸ:ugŸ‚ĸugŸP‚P:vŸ’ĸvŸ%:ugŸ’ĸugŸ%)P’ŸPą¸ugŸ¸ŧRŧ"ugŸąŧPÃĘugŸĘÎRÎ"ugŸÃÎPÕÜugŸÜāRā"ugŸÕāPįîugŸîōRō"ugŸįōPųugŸR"ugŸųP ugŸR"ugŸ PošWošwėŸrˆV“ˆŽv|Ÿ“ŽšV“ošō*{Ž–ō*{ÂĖRōüR!+‘# “+8V“8Av|Ÿ“+8v8;P;<v|<@pdŸPe0ŸerPWr‘#Ÿ€ą‘ąĀRŪW'VWųN WôVXųVPWXųWUôEŸXųEŸY Ë WË Ė uŸĖ Í t ŸÍ į Wį č uŸč é t Ÿé h!WŒ Í 1ŸÍ é 0ŸĻ Ë WË Ė uŸĖ Í t ŸĻ Ē u ­ ¯ t¯ ŗ tÍ į Wį č uŸč é t ŸÍ Ô u × Ų tŲ Ũ t!!v!$!P""v" "t "%"‘d""vs"…"R #$#0Ÿ‹"”"Pb" #‘ ##P#:#‘b" #‘#Ÿ ##pŸ#:#‘#Ÿq"s"Rs"…"‘#s" #‘ ##P#:#‘s"…"‘# Ÿ ##p Ÿ#$#‘# Ÿ…"‡"P@#v#0Ÿv#‘#Q`#‘#‘#Ÿk#‘#‘#Ÿk#v#0Ÿv##Q#‘#qŸ #Į#V“Ę#į#V“§#ļ#VĘ#į#V§#ļ#PĘ#Ú#P§#ļ#RĘ#Ú#RÚ#į#vŸ§#ļ#1ŸĘ#į#1ŸĢ#ļ#q4ŸĘ#Ú#q4Ÿ"$m$vŸm$p$‘#Ÿp$“$vŸy$‡$PŖ$æ$uÂ$æ$u Ũ$æ$P“æ$ū$V“ū$i%V“i%k%vŸ“k%|%V“%›%V“Ö$Ø$PØ$æ$u æ$%W%c%Wc%t%Q%›%QŨ$>%u k%t%u ø$%ō…‡k%t%ō…‡%c%Wc%t%Q%›%Q,%1%Q1%t%uT%›%uTN%c%ō^ˆ%•%ō^ˆN%V%pr"ŸX%t%uT%›%uTX%[%ptŸ[%n%R%›%R%›%uT%›%R•%›%puT"ŸĨ%°%ugŸ°%´%R´%ž%ugŸĨ%´%Pā%&U&&t&&‘@'&`&Uā%^&V^&a&‘&*&îŸ&*&V&&U&&t&&‘@*&`&UJ&^&V^&a&‘ų& 'VĀ'Ę'‘Ę'Ë'P‡))Vž)Š)VŠ)ž)vø~Ÿž)Š)VŠ)ž)vø~Ÿ×)đ)Vņ)*V**vø~Ÿņ)*V**vø~Ÿ-*P*VP*R*‘#$B*O*‘2$w"-*P*vāŸP*R* ‘#$#`Ÿ{*™*P™*g+‘X™*Ĩ*W×*ã*Pã*g+Wí*g+Ví*ķ*U++P+g+U++P+g+U++pŸ+#+P#+g+uŸĩ+ŋ+R?wŸ?@‘#Ÿ@wŸ€‘#Ÿ!D‘oŸDHRH\‘oŸ\`R`t‘oŸtxRx€‘oŸ!(P(/w<Ÿ@HP%/w ŸISw Ÿ+@‘oŸO\‘oŸ\`R`t‘oŸtxRx€‘oŸ+2PO`P/9wŸakwŸ5@‘oŸgt‘oŸtxRx€‘oŸ5@PgxP4wŸ45‘#Ÿ5_wŸ_`‘#Ÿ!<‘oŸ<@R@T‘oŸTXRX`‘oŸ!'P'.w<Ÿ5@P%4W45‘A_W_`‘*5‘oŸFT‘oŸTXRX`‘oŸ*5PFXP-,5,P5,>,‘t,|,P|,›,V,Į,V†,•,P,Ŗ,Pv,™,Ÿ,Į,Ÿv,|,P|,™,V,Į,Vđ,8-0Ÿ8-c.‘Tg.r.Q.¤.‘T-r.‘#TŸ.¤.‘#TŸM-r.U.¤.UM-e-0Ÿe-Ę-1ŸĘ-å-Qå-@.1Ÿ@.V.Q.¤.1ŸM-e-0Ÿe-V.V.¤.Ve-Ė-WÛ-@.W.¤.Ww-Ę-W.—.Ww-Ę-w Ÿ.—.w Ÿ-˛-W.—.W-˛-w Ÿ.—.w ŸĢ-­-P÷-@.U—.¤.U÷-@.uŸ—.¤.uŸ...U—.¤.U...uŸ—.¤.uŸ'.).PU-V.u Ÿ.¤.u Ÿ/3/0Ÿ3/^/V'/^/‘#TŸņ/õ/Põ/0V 0>0P>00v0‚0tp‚0ˇ0vˇ0¸0tp¸0Ų0v“1Ÿ1RŸ1Ŋ1uPŊ1ž1tLž1Ã1RÃ1á1uP2'2uPÃ1Õ1RÕ1á1rŸ'1á1;Ÿô1Ŧ2;Ÿ'1-1W-1.1t.121t21Ŋ1u`ŸŊ1ž1t\Ÿž1á1u`Ÿô1Ŧ2u`Ÿ<1á1;Ÿô1W2;Ÿs2Ÿ2;Ÿ<1ŧ1Wŧ1Ŋ1udŸŊ1ž1t`Ÿž1á1Wô122W22W2udŸs2~2W~2’2udŸ’2Ÿ2Wu2’2udŸ2‹2u\Ÿ‹22R2’2u\Ÿ22PJ11V1Ŋ1u Ŋ1ž1tž1á1u ô12V2'2u '2)2V)2W2u ’2”2V”2Ÿ2u J1ŧ1Wŧ1Ŋ1udŸŊ1ž1t`Ÿž1á1Wô122W22W2udŸ’2Ÿ2WT11V1Ŋ1u Ŋ1ž1tž1á1u ô12V2'2u '2)2V)2D2u T1{1uT{1Ŋ1u\ŸŊ1ž1tXŸž1á1u\Ÿô1'2u\Ÿ'282uT82D2u\Ÿ)2D2u\Ÿ52?2u[Ÿ?2C2RC2D2u[Ÿ52C2Pu1ŧ1Wŧ1Ŋ1udŸŊ1ž1t`Ÿž1á1Wô1'2Wx1Ŋ1u[ŸŊ1ž1tWŸž1á1u[Ÿô1'2u[Ÿx11Pô1˙1P1Ŋ1u`ŸŊ1ž1t\Ÿž1á1u`Ÿ2'2u`Ÿ…1Ŋ1udŸŊ1ž1t`Ÿž1á1udŸ2'2udŸ…1Š1P22PŠ1Ŋ1u\ŸŊ1ž1tXŸž1á1u\Ÿ2'2u\ŸŦ1Ŋ1u\ŸŊ1ž1tXŸ2'2u\Ÿ¯1Ŋ1udŸŊ1ž1t`Ÿ2'2udŸ¯1´1P´1ģ1vtŸ2!2P!2'2vtŸD2W2udŸJ2R2u[ŸR2V2RV2W2u[ŸJ2V2PW2s2u`Ÿ]2e2u[Ÿe2i2Ri2s2u[Ÿ]2i2PÎ2Ú2Pú23P1363P63^3V:3Y3V:3Y3‘…44R_5a5‘5“5‘˜Ÿ“5˜5P˜5š5tš5 5‘„ 5Ģ5‘˜Ÿ5”5‘°5ë50Ÿë5ō5Rŋ5Ã5‘˜ŸÃ5Č5PČ5Ę5tĘ5Đ5‘„Đ5ō5‘˜Ÿŋ5Ä5‘Ú5ë5‘˜Ÿp6‚6P…66PÁ6õ6Võ6˙6vŸ˙6W7VŌ6Õ6PÕ6X7WŌ6Õ6PÕ6õ6Wõ6;7Rļ6Y7UY7Z7‘Z7v7Uv7w7‘Ō6Y7UY7Z7‘67X7W67Y7UY7Z7‘Z7v7Uv7w7‘ę78V88uā_Ÿ88tÜ_Ÿ838V3858uā_Ÿ5888‘Ø_Ÿ88@8V@8a8uā_Ÿa8c8Vc8‚8uā_Ÿę78u88t858u5888‘88\8ua8‚8uq8{8uß_Ÿ{88R8‚8uß_Ÿq88P88V88uā_Ÿ88tÜ_Ÿ838V3858uā_Ÿ5888‘Ø_Ÿ 88uß_Ÿ88tÛ_Ÿ858uß_Ÿ5888‘×_Ÿ 88P88v<Ÿ88uā_<Ÿ88tÜ_<Ÿ8*8P@8a8uā_ŸI8S8uß_ŸS8W8RW8a8uß_ŸI8W8P°8Ę8Pų8 9PÍ8õ8Wõ8ö8udŸö8ų8t`Ÿ9*9W59@9W@9U9udŸW9Y9WY9w9udŸÍ8ô8Vô8ö8uö8ų8t9*9V5979V79U9uW9u9Vu9w9uY9u9Vu9w9ud9n9ucŸn9r9Rr9w9ucŸd9r9Pâ8õ8Wõ8ö8udŸö8ų8t`Ÿ9*9Wå8ö8ucŸö8ų8t_Ÿ9*9ucŸå8í8P9'9Pų89W99u 99tų89V99P@9U9udŸF9N9ucŸN9R9RR9U9ucŸF9R9Pƒ9ĸ9u`Ÿĸ9Ē9PĒ9 :uT : :tP :1:uT1:4:tP4:o:uTĢ9:V: :udŸ : :t`Ÿ :/:V/:1:udŸ1:4:t`Ÿ4:6:V6:Q:udŸQ:S:VS:m:udŸm:o:VÉ9:V: :udŸ : :t`Ÿ :/:V/:1:udŸ1:4:t`ŸÉ9 :uT : :tP :1:uT1:4:tPŪ9:V: :udŸ : :t`Ÿ :/:V/:1:udŸ1:4:t`ŸŪ9ų9Vų9 :u`Ÿ : :t\Ÿ ::V:1:u`Ÿ1:4:t\Ÿá9 :u_Ÿ : :t[Ÿ :1:u_Ÿ1:4:t[Ÿá9å9P ::Pų9 :u`Ÿ : :t\Ÿ:1:u`Ÿ1:4:t\Ÿü9 :udŸ : :t`Ÿ:1:udŸ1:4:t`Ÿü9:P: :u`<Ÿ : :t\<Ÿ:&:P6:Q:u`Ÿ<:C:u_ŸC:G:RG:Q:u_Ÿ<:G:PS:m:udŸ_:f:u_Ÿf:j:Rj:m:u_Ÿ_:j:P:¨:P¨:°:pŸ ;;P:Â:u`ŸÂ:Î:PÎ:Ü:uTÜ:;u`Ÿ; ;‘XŸ ;A;u`ŸA;D;‘XŸD;R;uTR;ˆ;u`Ÿˆ;ž;uTĸ:Ü:u D;R;u ˆ;ž;u Ã:Ę:uTĘ:Ü:udŸD;R;udŸˆ;ž;udŸÃ:Î:PÎ:Ü:uTD;R;uTˆ;ž;uTÕ:Ü:udŸD;R;udŸØ:Ü:u_ŸD;R;u_ŸØ:Ü:PD;O;PÜ:;u`Ÿ; ;‘XŸ-;A;u`ŸA;D;‘XŸo;ˆ;u`ŸÜ:;V; ;P-;?;V?;D;Po;†;Vr;†;Vw;~;udŸ~;‚;R‚;ˆ;udŸw;‚;Pö:;u`Ÿ; ;‘XŸ-;A;u`ŸA;D;‘XŸų:;udŸ; ;‘\Ÿ-;A;udŸA;D;‘\Ÿų:;P;;u`<Ÿ; ;‘X<Ÿ-;7;P ;-;õŸ ;;u`Ÿ;';P';-;uTT;o;u`ŸZ;a;u_Ÿa;e;Re;o;u_ŸZ;e;P;—;u_Ÿ—;›;R›;ž;u_Ÿ;›;PĮ;Ö;WÖ;<u < <t)<<u Į;Ī; w<1ŸĪ;Û;PĮ; <0Ÿ)<<0ŸÜ;<W<<udŸ< <t`Ÿ)<E<WE<a<udŸa<c<Wc<<udŸÜ;<V<<u< <t)<<<V<<a<ua<<V<<uc<<V<<un<x<ucŸx<|<R|<<ucŸn<|<Pķ;<W<<udŸ< <t`Ÿ)<:<Wö;<ucŸ< <t_Ÿ)<:<ucŸö;ū;P)<7<P <%<W%<&<u &<)<t <$<V$<)<PE<a<udŸK<S<ucŸS<W<RW<a<ucŸK<W<Pļ<ŋ<VÉ<l=Vl=†=u‹==V=Ĩ=u =‚=uT ='=uT'=I=u`ŸI=l=uTl=‚=u`Ÿ =‚=u_Ÿ ==P`=g=P'=I=u`Ÿ-=I=udŸ-=?=Pl=‚=u`Ÿr=‚=udŸr==P“=ž=u_Ÿž=ĸ=Rĸ=Ĩ=u_Ÿ“=ĸ=PÛ=x>ux>{>t {>­>u­>°>t °>ų>uū>R?uÛ=v>Vv>x>udŸx>{>t`Ÿ{>Ģ>VĢ>­>udŸ­>°>t`Ÿ°>Ī>VĪ>ū>udŸū>?V? ?udŸ ? ?V ?"?udŸ"?$?V$?9?udŸ9?;?V;?R?udŸå=x>ux>{>t {>­>u­>°>t °>ę>u ??u"?R?uå=w>Ww>x>u`Ÿx>{>t\Ÿ{>Ŧ>WŦ>­>u`Ÿ­>°>t\Ÿ°>Ø>WØ>ę>u`Ÿ ??W"?R?WĪ>ę>u`ŸÛ>å>u_Ÿå>é>Ré>ę>u_ŸÛ>é>P>v>Vv>x>udŸx>{>t`Ÿ{>Ģ>VĢ>­>udŸ­>°>t`Ÿ°>Í>V ? ?V ??udŸ"?$?V$?9?udŸ9?;?V;?R?udŸ >x>u_Ÿx>{>t[Ÿ{>­>u_Ÿ­>°>t[Ÿ°>Í>u_Ÿ ??u_Ÿ"?R?u_Ÿ >>Pē>Į>P'>n>u °>ē>u "?R?u '>6>u <u`<Ÿ'>n>0Ÿ°>ē>0Ÿ"?R?0ŸC>n>udŸ°>ē>udŸ"?R?udŸC>n>u°>ē>u"?R?uC?K?u_ŸK?O?RO?R?u_ŸC?O?P[>n>udŸ°>ē>udŸ^>n>u_Ÿ°>ē>u_Ÿ^>c>P°>ˇ>Pc>n>u`Ÿ”>œ>u`Ÿi>n>udŸ—>œ>udŸi>q>P—>ĸ>P{>œ>u {>œ>uę>õ>udŸđ>õ>u_Ÿđ>õ>P ??u`Ÿ??u_Ÿ??P$?9?udŸ*?2?u_Ÿ2?6?R6?9?u_Ÿ*?6?P+@1@R1@L@‘+@L@‘}@Ģ@V­@ø@V@ķ@:Ÿ@Ģ@V­@ķ@V­@Ū@:Ÿ­@Ū@V•@œ@PRAVAPVAŗAW\AhAPhA˛AV\AnA0ŸnAtAPˆA•AP\AnA0ŸnA´AUŲABVBBPB/BV‚B„BVBBv'B/BV‚B„BVŒB—BugŸ—B›BR›BĨBugŸŒB›BP6B^BVqB‚BVAB^BvŸqB‚BvŸJB^BugŸqB‚BugŸJBRBPqBBP2COCQOCvC‘L7COCQOCvC‘L7CvCW7COCV7CgCVgClCv|ŸlCšCVOCSCVSCWCv|ŸWCgCVgCpCv|ŸOCWC‘H\CvC‘HOCWCP\CkCPvC†CQ†CŽC‘HvC~C qq4ŸvCšCW~CŽCWūCqDWqDsD‘sD‹DWūCODVODsD‘sD‹DVūCrDUrDsD‘sD‹DUDDPJDUDRUDYD ‘? ūŸ1DYDgŸ1DYDWYDsDmŸYDqDWqDsD‘ĒDėDPėD­E‘­E˛EP˛E$F‘ĒDėDpŸėD­E‘#Ÿ­E˛EpŸ˛E$F‘#ŸÕDėDPėD­E‘­E˛EP˛E$F‘ÕDėDpŸėD­E‘#Ÿ­E˛EpŸ˛E$F‘#ŸāDėDRėD˙D‘\­EĪE0ŸāDEWE­E‘­EĪEWĪE$F‘āDėDRėD˙D‘\­EĪE0Ÿ­EĪEWēEĪE1ŸēEÆERēEÁEr˙D­E—ŸĪE$F—Ÿ˙DEWE­E‘ĪE$F‘E­E™ŸĪE$F™ŸE%EP%EĢEWĪE$FW1EEVūEFV1EĢEWĪE$FWDE­EœŸĪE$FœŸDEĢEWĪE$FWVEŦEUĪE$FUVEĢEWĪE$FWaExEUūEF0ŸūEFW FF1Ÿ FFR FFrxEĢEWĪEūEWF$FWxE­E:ŸĪEūE:ŸF$F:ŸxE“E ww<"ŸĪEØEwp"ŸF#Fwp"ŸEĒEVĪEūEVF$FV‰E­E:ŸĪEūE:Ÿ‰EĒEVĪEūEVĪEūE:ŸĪEūEVE¤EP{FF‘{FFVFžFVžFĸF‘9v$Ÿ9K‘#$ŸK[v$Ÿ%T‘oŸTXRX[‘oŸ%-PKXP-9V9K‘ĐFĶFPĶF.HV.H0Hu0H1Ht1HŽHVĐFĶFp4ŸĶFŨFPŨF0Hud0H1Ht`1HŽHud-G.HV.H0Hu0H1Ht1HŽHVjGmGQmG0Hu\0H1HtXZHcHu\cH~HvŸ~HŽHu\ĘG1HHŸZH~HHŸĘGãGQãG0Hu`0H1Ht\ZH~Hu`ņG0Hu`#$Ÿ0H1Ht\#$ŸZH~Hu`#$Ÿ3HZHv4ŸH.HV.H0Hu0H1HtH0Hu0H1HtH1HAŸ“H/HW/H0Hu\0H1HtXH)H wu\<"ŸH1HAŸH)H wu\<"#“H›HuŦ~Ÿ›HģHPģH`IW`IfKuü}fKiKtø}iK€Kuü}€K‚KW‚K Luü}“HģHuā~ŸģHÆHPÆHfKu¤~fKiKt ~iK Lu¤~I`IW`IfKuü}fKiKtø}iK€Kuü}€K‚KW‚K Luü}`IfKu„~fKiKt€~iK€Ku„~§K Lu„~øI€KHŸ§KįKHŸøIEJu¸~ŸEJVJRVJfKu˜~fKiKt”~iK€Ku˜~§KįKu˜~%JEJuÜ~ŸEJVJr$ŸVJfKu˜~#$ŸfKiKt”~#$ŸiK€Ku˜~#$Ÿ§KįKu˜~#$Ÿ‚K§Kuā~ŸYJfKu„~fKiKt€~iK€Ku„~§KŋKu„~jJ€JRjJ€KJŸ§KŋKJŸjJ€K8Ÿ§KŋK8ŸjJxJr jJ€K ĩŸ§KŋK ĩŸjJ€Jr ŸjJfKu„~fKiKt€~iK€Ku„~§KŋKu„~jJ€K @Ÿ§KŋK @ŸjJxJ r  ĩ8!ŸƒJfKuü}fKiKtø}iK€Kuü}—JfKuü}fKiKtø}iK€Kuü}¯JfKu˜~fKiKt”~iK€Ku˜~žJfKuÜ~ŸfKiKtØ~ŸiK€KuÜ~ŸĮJfKuĢ~ŸfKiKt§~ŸiK€KuĢ~ŸĮJĶJPiKzKPĶJfKu¸~ŸfKiKt´~ŸđJfKuŦ~ŸfKiKt¨~Ÿ KfKu´~ŸfKiKt°~Ÿ(KfKuŦ~ŸfKiKt¨~Ÿ>KfKuā~ŸfKiKtÜ~ŸLLuŦ~ŸLÆLWÆLãNuė}ãNæN‘ä}æNŠOuė}LELuā~ŸELVLPVLãNuœ~ãNæN‘”~æNŠOuœ~‘LÆLWÆLãNuė}ãNæN‘ä}æNŠOuė}íLMQMãNuô}ãNæN‘ė}æNOuô}'OŠOuô}„MOHŸ'OgOHŸ„MŅMu¸~ŸŅMâMRâMãNu~ãNæN‘ˆ~æNOu~'OgOu~ąMŅMuÜ~ŸŅMâMr$ŸâMãNu~#$ŸãNæN‘ˆ~#$ŸæNOu~#$Ÿ'OgOu~#$ŸO'Ouā~ŸęMđMuø}ö,÷%ô%@@ŸđMũM[ũMãNuø}ö,÷%ô%@@ŸãNæN‘đ}ö,÷%ô%@@ŸæNOuø}ö,÷%ô%@@Ÿ'O?Ouø}ö,÷%ô%@@ŸęMãNuô}ãNæN‘ė}æNOuô}'O?Ouô}NãNuė}ãNæN‘ä}æNOuė}NãNuė}ãNæN‘ä}æNOuė},NãNu~ãNæN‘ˆ~æNOu~;NãNuÜ~ŸãNæN‘Ô~ŸæNOuÜ~ŸDNãNuĢ~ŸãNæN‘Ŗ~ŸæNOuĢ~ŸDNPNPæNúNPPNãNu¸~ŸãNæN‘°~ŸmNãNuŦ~ŸãNæN‘¤~ŸƒNãNu´~ŸãNæN‘Ŧ~ŸŸNãNuŦ~ŸãNæN‘¤~ŸģNãNuā~ŸãNæN‘Ø~Ÿ“OĸOuŦ~ŸĸOÄOPÄORuœ~R„Rt˜~„RˆSuœ~“OœOuā~ŸœOÄOQÄORu¤~R„Rt ~„RˆSu¤~ PRuœ~R„Rt˜~„RˆSuœ~@PWPu´~ŸWP`PP`PRu ~R„Rtœ~„RESu ~jS„Su ~jS„SuŦ~ŸōPESHŸōP?Qu¸~Ÿ?QPQRPQRu”~R„Rt~„RESu”~Q?QuÜ~Ÿ?QPQr$ŸPQRu”~#$ŸR„Rt~#$Ÿ„RESu”~#$ŸESjSuā~Ÿ`QS0Ÿ“`QRu ~R„Rtœ~„RSu ~cQS0ŸcQRV„RSVmQqQvô„R×R ŸđRS Ÿ„R×RVđRSV“RĄRQĄRĒRuü}ĒR¸RQ¸R×Ruü}đRSuü}SSQSSuü}•R×R ŸđRS Ÿ•RĄRQĄRĒRuü}ĒR¸RQ¸R×Ruü}đRSuü}ĒR×R ŸđRS ŸĒR×Ruü}đRSuü}qQ„R2Ÿ“×RđR2Ÿ“qQRu´~ŸR„Rt°~Ÿ×RđRu´~ŸqQtQ upt"ĖŸtQQ up"ĖŸqQ„R2Ÿ×RđR2ŸqQtQ upt"ÄtQzQup"Ä’QRuŦ~ŸR„Rt¨~Ÿ×RđRuŦ~ŸŠQRuŦ~ŸR„Rt¨~Ÿ×RđRuŦ~ŸĐQRu¸~ŸR„Rt´~Ÿ×RđRu¸~ŸßQRuÜ~ŸR„RtØ~Ÿ×RđRuÜ~ŸčQRuĢ~ŸR„Rt§~Ÿ×RđRuĢ~ŸčQôQP×RęRPôQRu¸~ŸR„Rt´~ŸRRuŦ~ŸR„Rt¨~Ÿ'RRu´~ŸR„Rt°~ŸCRRuŦ~ŸR„Rt¨~ŸYRRuā~ŸR„RtÜ~Ÿ“SÃSuŦ~ŸÃSÍSPÍSŽVuœ~ŽVąVt˜~ąV¸Wuœ~“SœSuā~ŸœSÍSQÍSŽVu¤~ŽVąVt ~ąV¸Wu¤~TŽVuœ~ŽVąVt˜~ąV¸Wuœ~IT`Tu´~Ÿ`TiTPiTŽVu ~ŽVąVtœ~ąVuWu ~šW´Wu ~šW´WuŦ~ŸûTuWHŸûTHUu¸~ŸHUYURYUŽVu~ŽVąVtŒ~ąVuWu~(UHUuÜ~ŸHUYUr$ŸYUŽVu~#$ŸŽVąVtŒ~#$ŸąVuWu~#$ŸuWšWuā~ŸyUOW0Ÿ“yUŽVu ~ŽVąVtœ~ąVOWu ~yUOW0ŸyUJVVąVBWVƒU‡UvôąVW Ÿ W7W ŸąVWV W7WVÃVŅVQŅVÚVuø}ÚVčVQčVWuø} W2Wuø}2W6WQ6W7Wuø}ÅVW Ÿ W2W ŸÅVŅVQŅVÚVuø}ÚVčVQčVWuø} W2Wuø}ÚVW Ÿ W2W ŸÚVWuø} W2Wuø}‡UąV2Ÿ“W W2Ÿ“‡UŽVu´~ŸŽVąVt°~ŸW Wu´~Ÿ‡UžU upt"ĖŸžUĄU ur"ĖŸ‡UąV2ŸW W2Ÿ‡UžU upt"ÄąUŽVu”~ŽVąVt~W Wu”~ąUŽVu´~ŸŽVąVt°~ŸW Wu´~ŸžUŽVu´~ŸŽVąVt°~ŸW Wu´~ŸŖUŧURŖUąVJŸW WJŸŖUąV8ŸW W8ŸŖUąUr ŖUąV ĩŸW W ĩŸŖUŧUr ŸŖUŽVu´~ŸŽVąVt°~ŸW Wu´~ŸŖUąV @ŸW W @ŸŖUąU r  ĩ8!ŸŋUŽVuŦ~ŸŽVąVt¨~ŸW WuŦ~ŸÖUŽVuŦ~ŸŽVąVt¨~ŸW WuŦ~ŸũUŽVu¸~ŸŽVąVt´~ŸW Wu¸~Ÿ VŽVuÜ~ŸŽVąVtØ~ŸW WuÜ~ŸVŽVuĢ~ŸŽVąVt§~ŸW WuĢ~ŸV!VPWWP!VŽVu¸~ŸŽVąVt´~Ÿ>VŽVuŦ~ŸŽVąVt¨~ŸZVŽVu´~ŸŽVąVt°~ŸpVŽVuŦ~ŸŽVąVt¨~Ÿ†VŽVuā~ŸŽVąVtÜ~ŸQVQR‘RcVQv$ŸQR‘#$ŸRcv$Ÿ%\‘oŸ\`R`c‘oŸ%-PR`P-QVQR‘5OUYkU;O‘_ŸYd‘_ŸdhRhk‘_Ÿ;CPYhP-[udŸ[\‘\Ÿ\oudŸopt`Ÿ–ˇudŸ0ZW\nW–ˇW01vI[udŸ[\‘\Ÿ\oudŸopt`ŸL[ucŸ[\‘[Ÿ\oucŸopt_ŸLgPz‹P‹ŒtŒtžŠucŸŠ­R­ˇucŸž­P8;P;GvGluTv­uT?GPKluTvŠuTVlugŸvŠugŸV^P^luP<Ÿv‡P‡ŠuP<Ÿ”ŸugŸŸŖRŖ­ugŸ”ŖP#AWABuBEt EGWGeu#BuBEtEeuLWugŸW[R[eugŸL[P%+P+9Q9duTdgtPg‡uTdu dgtg‚u %dudgtg‚u4cWcdudgt giWi‚ui‚unyugŸy}R}‡ugŸn}PĀWîW‘XBX‘PXŅX‘åXöX‘öXüXQüXYr6%ŸYYp6%ŸYYPYYu <%Ÿ!YœY‘BXPX6ŸBXPXōūųHXPX6ŸHXPXōūųuXÅXŗŸ!YfYŗŸYœYŗŸuXÅXW!Y7YW7YfYu`ŸYœYW‡XÅXŗŸ!YSYŗŸ‡XÅXu!YSYu7YSYuBYLYu[ŸLYPYRPYSYu[ŸBYPYPœXÅXW!Y5YWŸXÅXu[Ÿ!Y5Yu[ŸŸXĒXP!Y/YPĒXÅXu\Ÿ°XÅXu`Ÿ°XŋXPŅXåX6ŸŅXåXōūųđX!Y6ŸđX!YōūųđXķXp?ŸķXųXPųXYr?ŸYYp?ŸY!Yu ?Ÿ˙X!Y6Ÿ˙X!YōūųY!Y6ŸY!YōūųSYfYu`ŸYYaYu[ŸaYeYReYfYu[ŸYYeYPfY‚Yu\ŸlYtYu[ŸtYxYRxY‚Yu[ŸlYxYP YÄY‘ÄYC[uC[F[t F[_[‘_[d[Pd[Ŧ[uÛYûY0ŸûYSZVSZXZvŸXZ]ZVŒ[Ž[VZZPûYZu¨~Ÿ&Z]Zu¨~ŸŒ[Ŧ[u¨~ŸûYZu´~Ÿ&Z0Zu´~Ÿ0Z5ZP5Z]Zu´~ŸŒ[Ŧ[u´~ŸûYZu¨~Ÿ?Z]Zu¨~ŸûYZu§~ŸBZPZu§~ŸPZWZRWZ]Zu§~ŸûYZPBZWZP—[Ĩ[u§~ŸĨ[Š[RŠ[Ŧ[u§~Ÿ—[Š[PzZC[uŦ~ŸC[F[t¨~Ÿd[t[uŦ~ŸZC[u¸~ŸC[F[t´~Ÿd[t[u¸~Ÿ¤ZC[uÜ~ŸC[F[tØ~Ÿd[t[uÜ~Ÿ­ZC[u¨~ŸC[F[t¤~Ÿd[t[u¨~Ÿ­ZšZPd[n[PšZC[u¸~ŸC[F[t´~Ÿ×ZC[uŦ~ŸC[F[t¨~ŸíZC[u´~ŸC[F[t°~Ÿ[C[uŦ~ŸC[F[t¨~Ÿ[.[uā~Ÿ.[5[P5[C[uā~ŸC[F[tÜ~Ÿŗ[Õ[u Ņ[Õ[uŅ[Õ[PŅ[?\WA\ŗ\WŅ[Õ[0ŸÕ[6\VA\X\VX\i\vŸi\”\Vô[6\udŸw\ŗ\udŸô[ũ[u\\Pô[ü[u#Ÿ\6\udŸw\’\udŸ\6\ucŸw\’\ucŸ\"\P…\Œ\PA\]\uc\l\0Ÿc\h\Ph\l\uP#Ÿš\Ĩ\ucŸĨ\Š\RŠ\ŗ\ucŸš\Š\PB]o]utŸo]p]tpŸp]€]utŸ€]]tpŸ]ĸ]utŸB]n]Vn]p]Pp]]V]€]u€]]t]ƒ]Vƒ]ĸ]uB]J]v#Ÿ\]o]utŸo]p]tpŸp]€]utŸ€]]tpŸ_]o]usŸo]p]toŸp]€]usŸ€]]toŸ_]l]Pl]o]ut<Ÿo]p]tp<Ÿp]w]P‰]”]usŸ”]˜]R˜]ĸ]usŸ‰]˜]PŌ]˙]utŸ˙]^tpŸ^^utŸ^^tpŸ^2^utŸŌ]ū]Vū]^P^^V^^u^^t^^V^2^uŌ]Ú]v#Ÿė]˙]utŸ˙]^tpŸ^^utŸ^^tpŸī]˙]usŸ˙]^toŸ^^usŸ^^toŸī]ü]Pü]˙]ut<Ÿ˙]^tp<Ÿ^^P^$^usŸ$^(^R(^2^usŸ^(^P@^y^Py^—^ķPŸ—^Š^PŠ^­^ķPŸ­^š^Pš^Ŋ^ķPŸŊ^É^PÉ^Í^ķPŸÍ^Ų^PŲ^Ũ^ķPŸŨ^é^Pé^í^ķPŸí^ų^Pų^ũ^ķPŸũ^ _P __ķPŸ__P_ _ķPŸ _)_P)_0_ķPŸ0_J_PJ_Ļ_ķPŸĻ_ļ_Pļ_Á_r ŸÁ_ `ķPŸ@^i^Ri^^V^—^ķRŸ—^u_Vu_Ļ_ķRŸĻ_×_V×_`ķRŸ` `V ` `ķRŸp^{^¸Ÿp^{^Ví^ũ^ĘŸí^ũ^V—^­^7Ÿ—^­^V­^Ŋ^ģŸ­^Ŋ^VŊ^Í^žŸŊ^Í^VÍ^Ũ^ĮŸÍ^Ũ^VŨ^í^ŸŨ^í^Vũ^_ÁŸũ^_V_ _ÄŸ_ _V _0_ĩŸ _0_V0_J_PJ_Ļ_ķPŸĻ_ļ_Pļ_Á_r ŸÁ_ `ķPŸb_Ļ_WĖ_Î_WÎ_æ_udŸb_u_Vu_Ļ_ķRŸĖ_×_V×_æ_ķRŸx_Ļ_W{_Ļ_u_Ÿ{__Pœ_Ŗ_P_œ_u`Ÿ…_œ_udŸ…_‰_P“_™_Pŗ_ļ_Pļ_Á_pÁ_Ė_udĻ_Ė_VÎ_æ_udŸÚ_á_u_Ÿá_å_Rå_æ_u_ŸÚ_å_Pæ_`u`Ÿė_ķ_u_Ÿķ_÷_R÷_`u_Ÿė_÷_P`/`P/`E`ķPŸE`P`PP`Q`ķPŸQ`^`P^`w`ķPŸ`:`R:`E`ķRŸE`P`RP`Q`ķRŸQ`i`Ri`w`ķRŸ)`E`ĐŸ)`:`R:`E`ķRŸQ`i`Ri`w`ķRŸ€`ĸ`Pĸ`Į`‘TĮ`=aķPŸ€`Ž`RŽ`Ã`UÃ`=aķRŸ¯`Ķ`0ŸĶ`č`p1)Ÿa#ap1)Ÿ˜`;aW;a=a‘¯`Ķ`0ŸĶ`avķPŸa#avķPŸē`Ķ`qĶ`ä`vä`aUđ`aןđ`aWā`ä`vä`aU˙`aÕŸ˙`aWĶ`#aWĶ`ä`vä`aU#a;aW;a=a‘@a”a‘\aŠaVŠa‹a‘‹a›aV›a a‘XaraRra‹a‘‹a™aR™a a‘XaraPra‹a‘‹aŸaPsa‹aÚŸsaŠaVŠa‹a‘ aņa‘ņabVbb‘ aņa‘ņabWbb‘ēaåa‘åaëaVëađaPēaņa‘ÄaņaõŸÄaÕaPņabWbb‘ b1b‘uŦ~Ÿ4P4čuŒ~čëtˆ~ëØuŒ~ uā~Ÿ 4Q4ču”~čët~ëØu”~{čuŒ~čëtˆ~ëØuŒ~°šu´~ŸšÂRÂču„~čët€~ë<u„~@™u„~žØu„~V<HŸB™HŸVįWįču¸~Ÿčët´~Ÿë<WB€W€™u¸~Ÿ‰įw$ŸįčuÜ~ŸčëtØ~Ÿë<w$ŸB€w$Ÿ€™uÜ~Ÿ™žuā~Ÿˇču„~čët€~ë4u„~Bvu„~ˇĐPĐŅtŅÛtëöPöüu Ūu„~ 0u„~B`u„~Ūu~ 0u~B`u~øu~ 0u~ûuĻ~Ÿ 0uĻ~ŸûP *PëđŸëu´~ŸD`u¨~ŸM[uĻ~Ÿ[_R_`uĻ~ŸM_PčuŦ~Ÿčët¨~Ÿ uŦ~ŸčuŦ~Ÿčët¨~Ÿ uŦ~ŸCču¸~Ÿčët´~Ÿ u¸~ŸRčuÜ~ŸčëtØ~Ÿ uÜ~Ÿ[ču¨~Ÿčët¤~Ÿ u¨~Ÿ[gPPgču¸~Ÿčët´~Ÿ„čuŦ~Ÿčët¨~Ÿ”ču´~Ÿčët°~ŸĒčuŦ~Ÿčët¨~ŸĀčuā~ŸčëtÜ~Ÿ@bdbPdb cU c cķPŸ@bpbRpbƒbVƒb´bt´bÁb‘PÁbĖbtĖbęb‘Pębųbtųbc‘Pcctc c‘Pqb‡b0Ÿœb­bp1)ŸZb cW c c‘qb‡b0ŸœbđbVb‡bQ¨bŊbQŊbđb‘TÉbđbןÉbđbWĒbŊbQŊbđb‘TØbđbŸØbđbWđb cW c c‘cdc‘,cXcVXcYc‘YclcVlcqc‘(c@cR@cYc‘YcjcRjcqc‘(c@cP@cYc‘YcpcPAcYcÚŸAcXcVXcYc‘€cŅc‘ŅcīcVīcņc‘€cŅc‘ŅcđcWđcņc‘šcÅc‘ÅcËcVËcĐcPšcŅc‘¤cŅcõŸ¤cĩcPŅcđcWđcņc‘dd‘uŦ~Ÿ4P4ÕuŒ~ÕØtˆ~Ø+uŒ~ uā~Ÿ 4Q4Õu”~ÕØt~Ø+u”~{ÕuŒ~ÕØtˆ~Ø+uŒ~°šu´~ŸšÂRÂÕu€~ÕØtü}Øcu€~gu€~´+u€~´ÎuŦ~ŸD]HŸ_cHŸgHŸÎ+HŸD–u¸~Ÿ–¨P¨Õuˆ~ÕØt„~Ø]uˆ~_cuˆ~guˆ~Î+uˆ~w–uÜ~Ÿ–¨p$Ÿ¨Õuˆ~#$ŸÕØt„~#$ŸØ]uˆ~#$Ÿ_cuˆ~#$Ÿguˆ~#$ŸÎ+uˆ~#$Ÿ´uā~ŸąÕu€~ÕØtü}ØYu€~_cu€~gku€~Î+u€~ąĘPĘËtËÕtØæPæėu Øu€~Yu€~_cu€~Îßu€~õ+u€~Øu~&u~&@u¨~Ÿ@Iu~IYu¨~Ÿ_cu~Îßu~õ+u~ōu~&u~&@u¨~Ÿ@Iu~IYu¨~ŸõuĻ~ŸYuĻ~ŸõR=R@YRYuĻ~Ÿ=R@YRY ˙Ÿ&p|Ÿ&=u¨~4Ÿ@Wp|ŸWYu¨~4Ÿ& ˙Ÿ&p|Ÿ@Y ˙Ÿ@Wp|ŸWYu¨~4ŸCLQLOp|OYu~Ø÷đŸØ÷u´~ŸÎßu¨~Ÿõ+u¨~Ÿ×ßuĻ~Ÿõ+uĻ~Ÿ×ßPõP +PõP +P˙pŸ +pŸ ˙ŸpŸÕuŦ~ŸÕØt¨~Ÿ˙uŦ~ŸÕuŦ~ŸÕØt¨~Ÿ˙uŦ~Ÿ0Õu¸~ŸÕØt´~Ÿ˙u¸~Ÿ?ÕuÜ~ŸÕØtØ~Ÿ˙uÜ~ŸHÕu¨~ŸÕØt¤~Ÿ˙u¨~ŸHTP˙ PTÕu¸~ŸÕØt´~ŸqÕuŦ~ŸÕØt¨~ŸÕu´~ŸÕØt°~Ÿ—ÕuŦ~ŸÕØt¨~Ÿ­Õuā~ŸÕØtÜ~Ÿ d\d‘\d;eW;e@ewŸ@eYeW]e†eWŠeŨeW#dtdu\dtdVtdƒdPƒdĖdVŌdŪdVŪdįdPįdņdVņdúdPúdüdVCeIeVIeSePSeXeVje†eQ€dƒdPƒdĖdVje†eQ‘d–dQ–dĖduTje†euTŗdĖdōš%je}eōš%ŗdģdpr"ŸŊdĖduTje†euTŊdĀdptŸĀdĖdRjeseRse†eptŸje†euTjeseRse†eptŸ}e†epuT"ŸeCeVCeIeudŸ]ejeV eIeu_Ÿ]ejeu_Ÿ e(eP]egeP(eIeu`Ÿ.eIeudŸ.e?ePĢeÁeudŸąeŧeu_ŸŧeĀeRĀeÁeu_ŸąeĀePÁeŲeu`ŸĮeŌeu_ŸŌeÖeRÖeŲeu_ŸĮeÖePe›eu_Ÿ›eŸeRŸeŠeu_ŸeŸePALugŸLPRPZugŸAPP÷efPf‚fu ‚f…ft…f“fP“f fu  fŖftŖfđfu õfogu f…f/ŸŖfog/ŸffWfftfftf‚fu\Ÿ‚f…ftXŸŖfogu\ŸZgegudŸegigRigogudŸZgigPAf‚fuT‚f…ftPŖfŌfuTõføfuTøf$gudŸ8gBguTAf€fV€f‚fu‚f…ftŖfŌfVõfgVg$gu8g:gV:gBguøfgVg gu[Ÿ ggRggu[ŸggP^f‚fuT‚f…ftPŖfŌfuTaf‚fu[Ÿ‚f…ftWŸŖfŌfu[ŸafefP˛fŋfPef‚fu`Ÿ‚f…ft\ŸŖf˛fu`ŸÂfŌfu`Ÿkf‚fudŸ‚f…ft`ŸŖf˛fudŸÂfŌfudŸkfofPÂfĪfPof‚fu\Ÿ‚f…ftXŸŖf˛fu\Ÿuf‚fudŸ‚f…ft`ŸŖf˛fudŸufyfPŖf¯fP…f fu fŖft …fžfVžfŖfPÚfõfu\Ÿāfįfu[ŸįfëfRëfõfu[ŸāfëfPg$gudŸggu[Ÿg#gR#g$gu[Ÿg#gP$g8gu`Ÿ*g1gu[Ÿ1g5gR5g8gu[Ÿ*g5gPĩgČgu`ŸČgËgt\Ÿ h1hu`Ÿ1h4h‘XŸģgČgudŸČgËgt`Ÿ h1hudŸ1h4h‘\ŸģgÄgPÄgČgu`<ŸČgËgt\<Ÿ h'hPËg hŸWhuhŸËg hu Whuhu ëg hŸWhuhŸëg huTWhuhuTh huThhu_ŸhhRh hu_ŸhhPP>XuTXYtPY¨uT¨ŠtPŠuTVVVXu XYtYĻVŠûVûu 8VVVXu XYtYĻVŠûVûu YĻVŠûVûu ŒŠŗŸŒĻVŊûVûu ÔųudŸäųudŸįōucŸōöRöųucŸįöP ucŸ RucŸP&_WĘëWúWu &ÉuTÉĘtPĘHuTH[u`Ÿ1_WĘëWúWu 1BRBQuPĘŲRŲåuT#Ÿ=QWĘë0ŸĘŲRŲåuT#ŸŲë1ŸŲåRŲārWÉu`ŸÉĘt\Ÿë-u`Ÿ1Gu`ŸWĮVĮĘPë+VnÉudŸÉĘt`ŸëúudŸ)-udŸ1GudŸqČWëúW)-W1GWqrvŠÉudŸÉĘt`ŸëúudŸÉu_ŸÉĘt[Ÿëúu_Ÿ•Pë÷PPt t1GudŸ7Bu_ŸBFRFGu_Ÿ7FP•Éu`ŸÉĘt\Ÿ•Ę0Ÿ Iu ēéu ŽWޝu`Ÿ¯°t\Ÿ°W 2w#Ÿ27P>ŽWޝu`Ÿ¯°t\Ÿ°éWíW>­V­°P°éVíīVO¯udŸ¯°t`Ÿ°ēudŸíudŸRZPZ¯uT¯°tP°ēuTíuTOSvp¯udŸ¯°t`Ÿ°ēudŸs¯u_Ÿ¯°t[Ÿ°ēu_Ÿs{P°ˇPĖÛPÛÜtÜātīudŸõu_ŸRu_ŸõP{¯u`Ÿ¯°t\Ÿ{°0Ÿ&_WĘëWúWu &ÉuTÉĘtPĘHuTH[u`Ÿ1_WĘëWúWu 1BRBQuPĘŲRŲåuT#Ÿ=QWĘë0ŸĘŲRŲåuT#ŸŲë1ŸŲåRŲārWÉu`ŸÉĘt\Ÿë-u`Ÿ1Gu`ŸWĮVĮĘPë+VnÉudŸÉĘt`ŸëúudŸ)-udŸ1GudŸqČWëúW)-W1GWqrvŠÉudŸÉĘt`ŸëúudŸÉu_ŸÉĘt[Ÿëúu_Ÿ•Pë÷PPt t1GudŸ7Bu_ŸBFRFGu_Ÿ7FP•Éu`ŸÉĘt\Ÿ•Ę0Ÿ Fu ēéu ĢWĢŦu`ŸŦ­t\Ÿ­W7ĢWĢŦu`ŸŦ­t\Ÿ­éWíW7ĒVĒ­P­éVíīVLŦudŸŦ­t`Ÿ­ēudŸíudŸOWPWŦuTŦ­tP­ēuTíuTLPvmŦudŸŦ­t`Ÿ­ēudŸpŦu_ŸŦ­t[Ÿ­ēu_ŸpxP­ˇPĖÛPÛÜtÜātīudŸõu_ŸRu_ŸõPxŦu`ŸŦ­t\Ÿx­0ŸllPlxlWšlÖlW+m`oWŒo+pW•i§k9ŸÖkëk9Ÿël+m9Ÿ+pzp9Ÿp˜p9Ÿ•i§ku˜Ökëku˜ël+mu˜+pzpu˜p˜pu˜ˇi§kuŦŸÖkëkuŦŸël+muŦŸ+pzpuŦŸp˜puŦŸˇi§ku˜Ökëku˜ël+mu˜+pzpu˜p˜pu˜ˇiÁiu˜#ŸÁiČiPČiĪitØi§kŸÖkëkŸël+mŸ+pzpŸp˜pŸØi§ku˜Ökëku˜ël+mu˜+pzpu˜p˜pu˜ķi§kDŸÖkëkDŸël+mDŸ+pzpDŸp˜pDŸķi§ku˜Ökëku˜ël+mu˜+pzpu˜p˜pu˜j§ku˜Ökëku˜ël+mu˜+pzpu˜p˜pu˜/j§kOŸÖkëkOŸël+mOŸ+pzpOŸp˜pOŸ/j§ku˜Ökëku˜ël+mu˜+pzpu˜p˜pu˜OjÚjVljŖjŸljŖju°ŸljzjqŸzj‚jPˆjŖju ˆjŖju°ŸÔj§ku°ŸÖkëku°Ÿël+mu°Ÿ+pzpu°Ÿp˜pu°ŸÔj§kuœÖkëkuœël+muœ+pzpuœp˜puœņj§ku°ŸÖkëku°Ÿël+mu°ŸBpzpu°Ÿp˜pu°Ÿņj§ku Ökëku ël+mu Bpzpu p˜pu ôj§ku°ŸÖkëku°Ÿël+mu°ŸBpzpu°Ÿp˜pu°Ÿôj@kWëlølWmmWBpMpWk§ku¸ŸÖkëku¸Ÿël+mu¸ŸBpdpu¸Ÿp˜pu¸Ÿk@kWëlølWmmWBpMpW$k§ku¸ŸÖkëku¸Ÿël+mu¸Ÿp˜pu¸Ÿ'k§ku`ŸÖkëku`Ÿël+mu`Ÿp˜pu`Ÿ'k2kPëlōlPDpdpu¸ŸPpdpu`ŸPp^pP2k§ku´ŸÖkëku´Ÿøl+mu´Ÿp˜pu´Ÿ2k§kuPŸÖkëkuPŸøl+muPŸp˜puPŸOk§kuŧŸÖkëkuŧŸølmuŧŸp˜puŧŸRkžkWÖkëkWølmWpƒpWRkSkuT`kdktkk§kuŧŸÖkëkuŧŸølmuŧŸnk§ku`ŸÖkëku`Ÿølmu`ŸnkwkPøl˙lPm"mPƒp˜puŧŸ‰p˜pu`Ÿ‰p•pPwk§ku´ŸÖkëku´Ÿwk§k0ŸÖkëk0Ÿdpvpu´ŸŸk§kuPŸŸk§kuTŸ-pBpuPŸ-pBpuTŸķnou`ŸķnúnPúnoudŸĒkĶku°ŸĶkÖktŦŸÖlčlu°ŸčlëltŦŸŊkĶkuŦŸĶkÖkt¨ŸÖlčluŦŸčlëlt¨ŸĀkĶku`ŸĶkÖkt\ŸÖlčlu`Ÿčlëlt\ŸĀkĖkPĖkĶkuŦ<ŸĶkÖkt¨<ŸÖlŨlPxlšlu xllPlˆltˆlšlu\Ÿšlĸlu ĸlĨltĨlŠltšlĸlwmmOodŸŒopdŸmmpmPpm2nV ooVŖoĨoVĘopVmOodŸŒopdŸm8nu 8n ou@Ÿ oou oOou@ŸŒoŖou@ŸŖopu m–mu #Ÿ–mmPm¤mtĢm8nu 8n ou@Ÿ oou oOou@ŸŒoŖou@ŸŖo¸ou Ęo˙ou Ģm2nV ooVŖoĨoVĘo˙oVËmOouDŸŒo¸ouDŸÎmÖmRÖm|nuœ o?ouœŖo¸ouœÎmĪmvímOouDŸŒoŖouDŸđmOouXŸŒoŖouXŸđmųmP ooPĨo¸ouDŸĢoŗouXŸŗoˇoRˇo¸ouXŸĢoˇoPßoņoPņoōotōoöotųm ou@ŸoOou@ŸŒoŖou@Ÿųm o0ŸoOo0ŸŒoŖo0Ÿ¸oĘou@Ÿ2n orŸoOorŸŒoŖorŸ2n5nP5nånVo oVo?oVŒoŽoVIn orŸoOorŸŒoŖorŸIn ou oOou ŒoŖou InKnu #ŸOnRnpŸRnWnP^n ou o=ou ŒoŖou ^nånVo oVo=oVŒoŽoVun ouLŸŒoŖouLŸxn€nR€n ouœŒoŖouœxnynv—n ouLŸšn ouXŸšnŸnPooP#o/oP/o0ot0o4otŽoŖouLŸ”oœouXŸœo oR oŖouXŸ”o oPŸnouHŸŸno0Ÿ?oOouHŸOo`ou`ŸOoRoudŸRo\oP\o`oudŸ`opou°ŸpoŒouŦŸvo~ouĢŸ~o‚oR‚oŒouĢŸvo‚oP p+puXŸ ppu\ŸppPp+pu\Ÿ+[u Æíu úu +ÅuTÅÆtPÆHuTH[u`Ÿ3MW3;uT#ŸCGpŸGLPÆíu`ŸÆí0ŸÆâu`#ŸâįPSÅu`ŸÅÆt\Ÿí-u`Ÿ1Gu`ŸSÃVÃÆPí+VjÅudŸÅÆt`ŸíúudŸ)-udŸ1GudŸmÄWíúW)-W1GWmnv†ÅudŸÅÆt`ŸíúudŸ‰Åu_ŸÅÆt[Ÿíúu_Ÿ‰‘Pí÷PPt t1GudŸ7Bu_ŸBFRFGu_Ÿ7FP‘Åu`ŸÅÆt\Ÿ‘Æ0Ÿ su svtvyu qVqsudŸsvt`ŸvŠVBqVqsudŸsvt`ŸBv0Ÿ pĐpRĐp6quT6q7qtP7qiquTiqjq‘LjqÛquTŅp×pW×pØptØpÜptÜp6qu`Ÿ6q7qt\Ÿ7qiqu`Ÿiqjq‘XŸjqÛqu`Ÿæp|quŸ—qŗquŸŊqÛquŸæp5qW5q6qudŸ6q7qt`Ÿ7qhqWhqiqudŸiqjq‘\ŸjqlqWlq|qudŸ—qŸqWŸqŗqudŸŊqŋqWŋqÛqudŸlq|qudŸxq|qu_Ÿxq|qPņpqVq6quu ķR1)(Ÿ6q7qttķR1)(Ÿ7qiquu ķR1)(Ÿiqjq‘‘ķR1)(Ÿ—qqVqŠquu ķR1)(ŸŊqČqVČqÛquu ķR1)(Ÿņp5qW5q6qudŸ6q7qt`Ÿ7qhqWhqiqudŸiqjq‘\Ÿ—qŸqWŸqŠqudŸŊqŋqWŋqÛqudŸúpqVq6quu ķR1)(Ÿ6q7qttķR1)(Ÿ7qiquu ķR1)(Ÿiqjq‘‘ķR1)(ŸŊqČqVČqÛquu ķR1)(Ÿúp6quP6q7qtL7qiquPiqjq‘HŊqÛquPÍqÔqu_ŸÔqØqRØqÛqu_ŸÍqØqPq5qW5q6qudŸ6q7qt`Ÿ7qhqWhqiqudŸiqjq‘\Ÿq6qu_Ÿ6q7qt[Ÿ7qiqu_Ÿiqjq‘WŸq%qP%q,qw<Ÿ7qGqP"q,qu`ŸHqRqu`Ÿ(q,qWNqRqudŸ(q/qPNq^qP|q—qu`Ÿ‚q‰qu_Ÿ‰qqRq—qu_Ÿ‚qqPŸqŠqudŸĨqŠqu_ŸĨqŠqPBrqru ŸrŦru Brqru #ŸŸrŦru #ŸFrHrPHrPrv|rrutŸrŽr‘lŸŽržrutŸžrŸr‘lŸrrusŸrŽr‘kŸŽržrusŸžrŸr‘kŸr—rP´rŋrusŸŋrÃrRÃrÍrusŸ´rÃrP ssPsrsVu#uP#uAuVáwéwVîwöwVûwxVxxVCtuWuuu”uutFu=vWFtuuŖŸuutŸŸFu=vuŖŸFtNtPFuWuPNtuu\ŸuutXŸ]u=vu\ŸTtuu`Ÿuut\Ÿ]u=vu`ŸTt\tP]uguP\tuuTŸuutPŸmu=vuTŸbtuu`Ÿuut\Ÿmu=vu`ŸbtjtPmuwuPjtuuPŸuutLŸ}u=vuPŸptuu`Ÿuut\Ÿ}u=vu`ŸptxtP}u‡uPxtuuHŸuutDŸu=vuHŸ~tuu`Ÿuut\Ÿu=vu`Ÿ~t†tPu—uP†tuuDŸuut@Ÿu=vuDŸŒtuu`Ÿuut\Ÿu=vu`ŸŒt”tPu§uP”tuuŧŸuut¸Ÿ­u=vuŧŸštuu`Ÿuut\Ÿ­u=vu`ŸštĸtP­uˇuPĸtuu¸Ÿuut´ŸŊu=vu¸Ÿ¨tuu`Ÿuut\ŸŊu=vu`Ÿ¨t°tPŊuĮuP°tuu°ŸuutŦŸÍu=vu°Ÿļtuu`Ÿuut\ŸÍu=vu`ŸļtžtPÍu×uPžtuuŦŸuut¨ŸŨu=vuŦŸÄtuu`Ÿuut\ŸŨu=vu`ŸÄtĖtPŨuįuPĖtuu´Ÿuut°Ÿíu=vu´ŸŌtuu`Ÿuut\Ÿíu=vu`ŸŌtÚtPíu÷uPÚtuu@ŸuutŧŸũu=vu@Ÿātuu`Ÿuut\Ÿũu=vu`ŸātčtPũuvPčtuuLŸuutHŸ v=vuLŸîtuu`Ÿuut\Ÿ v=vu`ŸîtötP vvPötuuXŸuutTŸv=vuXŸütuu`Ÿuut\Ÿv=vu`ŸütuPv'vPuuudŸuut`Ÿ-v=vudŸ uuu`Ÿuut\Ÿ-v=vu`Ÿ uuP-v7vP?vWvu`ŸKvRvuŖŸRvVvRVvWvuŖŸKvVvPWvivu\Ÿ]vdvuŖŸdvhvRhvivuŖŸ]vhvPiv{vuTŸovvvuŖŸvvzvRzv{vuŖŸovzvP{vvuPŸvˆvuŖŸˆvŒvRŒvvuŖŸvŒvPvŸvuHŸ“všvuŖŸšvžvRžvŸvuŖŸ“vžvPŸvąvuDŸĨvŦvuŖŸŦv°vR°vąvuŖŸĨv°vPąvÃvuŧŸˇvžvuŖŸžvÂvRÂvÃvuŖŸˇvÂvPÃvÕvu¸ŸÉvĐvuŖŸĐvÔvRÔvÕvuŖŸÉvÔvPÕvįvu°ŸÛvâvuŖŸâvævRævįvuŖŸÛvævPįvųvuŦŸívôvuŖŸôvøvRøvųvuŖŸívøvPųvwu´Ÿ˙vwu¨Ÿ˙v wPw wu@Ÿwwu¨ŸwwRw wu¨ŸwwP w2wuLŸ&w-wu¨Ÿ-w1wR1w2wu¨Ÿ&w1wP2wDwuXŸ8w?wu¨Ÿ?wCwRCwDwu¨Ÿ8wCwPDw_wudŸJwQwu¨ŸQwUwRUw_wu¨ŸJwUwP#x{xuDŸ{x†xP†xŠxu´ŠxõxuDŸõxøxt@ŸøxųyuDŸųy zu´ z!zuDŸ!z$z‘ŧŸ$z\zuDŸ\zpzu´pz {uDŸxxxWxŠxuLŸųy zuLŸ\z^zW^zpzuLŸxx{xuDŸ{x†xP†xŠxu´ųy zu´\zpzu´xxWxŠxuLŸųy zuLŸ“xŠxWųy zW“x›xPųyzP›xŠxuHŸĄxŠxudŸĄxŠxPŠxõxuDŸõxøxt@Ÿ z!zuDŸ!z$z‘ŧŸ$z5zuDŸ„zšzuDŸ{ {uDŸŠxõxudŸõxøxt`Ÿ z!zudŸ!z$z‘\Ÿ$z5zudŸ„zšzudŸ{ {udŸŌxõxudŸõxøxt`Ÿ z!zudŸ!z$z‘\Ÿ$z5zudŸÕxõxu`Ÿõxøxt\Ÿ z!zu`Ÿ!z$z‘XŸ$z5zu`ŸÕxŨxP$z/zPŨxõxuDŸõxøxt@Ÿ z!zuDŸ!z$z‘ŧŸãxõxudŸõxøxt`Ÿ z!zudŸ!z$z‘\ŸãxîxPîxõxuD<Ÿõxøxt@<Ÿ zzPey}yW}y°yu`Ÿŧyųyu`Ÿžz zW z˛zu`ŸeyhyuDŸhysyPsy°yu´ŧyųyu´žz˛zu´zy}yW}y°yu`Ÿŧyųyu`Ÿ€y°yWŧyųyW€y„yPŧyÆyP„y°yu\ŸÉyųyu\ŸŠy°yudŸÉyųyudŸŠyŽyPÉyÖyPŽy°yuXŸŲyųyuXŸ”y°yudŸŲyųyudŸ”y˜yPŲyæyP˜y°yuPŸéyųyuPŸžy°yudŸéyųyudŸžyĸyPéyöyPĸy°yuTŸ¨y°yudŸ¨y°yP7zAzuTŸ=zAzudŸ=zAzPAz\zuDŸGzNzuCŸNzRzRRz\zuCŸGzRzP^zpzuLŸdzkzudŸkzozRozpzudŸdzozPpzzzuHŸvzzzudŸvzzzP†zšzudŸŒz“zu`Ÿ“z—zR—zšzu`ŸŒz—zP z˛zu`ŸĻz­zudŸ­zązRąz˛zudŸĻzązP˛zÄzu\Ÿ¸zŋzudŸŋzÃzRÃzÄzudŸ¸zÃzPÄzÖzuXŸĘzŅzudŸŅzÕzRÕzÖzudŸĘzÕzPÖzņzuPŸÜzįzudŸįzëzRëzņzudŸÜzëzP8{E{0ŸE{[{uT[{o{Ro{s{Ps{Š{uTŠ{Ŧ{tPŦ{æ{uT*{§{V§{Ŧ{PŦ{æ{VE{[{udŸ„{Š{udŸŠ{Ŧ{t`ŸE{[{ucŸ‡{Š{ucŸŠ{Ŧ{t_Ÿ‡{–{PE{[{udŸw{Š{udŸŠ{Ŧ{t`ŸĖ{æ{udŸE{[{Vw{§{V§{Ŧ{PĖ{æ{VŽ{Ė{Vŗ{ž{ucŸž{Â{RÂ{Ė{ucŸŗ{Â{PÔ{ß{ucŸß{ã{Rã{æ{ucŸÔ{ã{PC|Ŋ|—Ÿ }<}—Ÿ_}ķ}—ŸC|I|WI|J|tJ|N|tN|Ŋ|uXŸ }<}uXŸ_}ķ}uXŸX|Ŋ|—Ÿ }<}—Ÿ_}‹}—ŸŸ}Č}—ŸŌ}ķ}—ŸX|•|W•|Ŋ|u\Ÿ }<}u\Ÿ_}e}We}‹}u\ŸŸ}§}W§}Š}u\ŸŠ}ĩ}Wĩ}Č}u\ŸŌ}Ũ}WŨ}ķ}u\ŸŦ}Č}u\Ÿ¸}Č}udŸ¸}Â}Pq|Ŋ|—Ÿ }<}—Ÿ_}y}—ŸŌ}ķ}—Ÿq|Ŋ|V }<}V_}g}Vg}y}udŸŌ}Ô}VÔ}ķ}udŸ|Ŋ|—Ÿ }<}—ŸŌ}ķ}—Ÿ|Ŋ|u }<}uŌ}ķ}uâ}é}uWŸé}í}Rí}ķ}uWŸâ}í}P˜|Ŋ|V }<}V›|Ŋ|uWŸ }<}uWŸ›|Ÿ|P }}PŸ|Ŋ|u\Ÿ}<}u\ŸĨ|Ŋ|udŸ}<}udŸĨ|Š|P}&}PŠ|Ŋ|u`Ÿ,}<}u`Ÿ¯|Ŋ|udŸ,}<}udŸ¯|ŗ|P,}6}Pŗ|Ŋ|uXŸė|ö|uXŸš|Ŋ|udŸō|ö|udŸš|Ā|Pō|ü|PD}_}uXŸJ}Q}uWŸQ}U}RU}_}uWŸJ}U}Pg}y}udŸm}t}uWŸt}x}Rx}y}uWŸm}x}Py}‹}u\Ÿ}†}uWŸ†}Š}RŠ}‹}uWŸ}Š}P‹}Ÿ}u`Ÿ‘}˜}uWŸ˜}œ}Rœ}Ÿ}uWŸ‘}œ}PG~ uP ‘HEuPVuP‘HļuPY~ udŸ ‘\ŸEudŸVudŸ‘\ŸļudŸh~E:ŸVļ:Ÿq~ž~VEV•Vy~E:ŸV:Ÿy~ž~VEVE:ŸEV‘~˜~Pœ~ uP ‘HVuP‘Hœ~¨~P¨~ VVV˛~uŸVuŸ˛~ VVVÁ~Ô~PÔ~ā~Wā~ uT ‘LVbPbuT‘LÁ~ VVVÉ~Ô~PÔ~ā~WV|0ŸV|Vj|1ŸjvRjqrã~™Ÿ|™Ÿã~ V|Vû~ udŸ ‘\Ÿ|udŸ‘\Ÿū~ ucŸ ‘[Ÿ|ucŸ‘[Ÿū~P|‡P¨ucŸ¨ŦRŦļucŸŦP€P€ŲŸ:OŲŸ;€P€|Ÿš€:ŦŸģ€%ÔŸÆ€É€u ɀʀtʀ΀tڀ%öŸÚ€%Wė€%ôŸė€%W÷€%@K$Ÿ %Ÿ P‰ŖWD~ Ÿ Ÿ"3 Ÿh~DŸ~‹u ą|Ÿ"|Ÿ3D|ŸŌvŸé—ŸéôRôuTûv Ÿ$&P&8W:FPFšWz¤BŸ(>P>–V™›Vs™BŸ#6P6ŽV‘“Vk‘BŸ%(P(JuPJKtLK+uPõuK\uuu]ĪėŸėŸ+ėŸ~ĪsŸĪŸĪVē΍ŸēÂPûVt=vŸ=HV%pu "Ÿ%4P6CR6CP=CQjŸŸ‹ũĢŸĒũÉŸĒĀVÉũŪŸÉũVcfrŸfjPjqtq{‘h{‘#ŸŦ‚U‚‚‘ŋ‚uԟ܁î0ŸîúWú˙wŸ˙‚W߁‚uԟD} Ÿš­ Ÿd}LŸ‰‚”‚PƒĨƒP›‚#ƒWbƒƒŸ‡„œ„Ÿƒƒƒ´ŸÆƒúƒüŸr„‡„üŸ6„o„vŸ6„?„PU„o„v ŸU„^„P-PEMPMŽVVgĨáŸ$áŸ~ĨBŸĨūu#ŸŽūu#ŸŽöWŽÃVŽāVāåvtŸå VÃËVËĪvtŸĪāVāévtŸÃËvŸËĪv|ŸĪāvŸāév|ŸÃĪudŸÕöudŸÃĪPÕäPöūu#Ÿöūu# u#<Ÿö Wúūu# u#<ŸúW$ju#Ÿ-ju#Ÿ-bV-=W=XWXbwtŸ=XwŸXbw|ŸCbucŸCQPbju#Ÿbju# u#<Ÿfju# u#<ŸfrV-PBVPVŽVąŗV‹ąBŸV`V“R“`|V“W“|P“W“¤V“W“˛V“W“du1Ÿˆ¤0Ÿ˛ŧ1Ÿu|V|PˆVöVuuˆ¤u˛Ču$3vū„V…ŸC†y†Ÿ…V…WC†d†W!…5…WC†d†0ŸR†d†1ŸR†^†RR†Y†r8…V…ˆŸb…j…uj…n…Pb…e…Pe….†V.†1†py†ĸ†Vr….†vŸ.†1†p#Ÿy†ĸ†vŸĀ…/†WĀ…0†uLŸ0†1†tHŸĀ….†vŸ.†1†p#Ÿ††P(žuÚčuY‰ ŸÚß Ÿäđ Ÿp‰LŸžŋu# ŸŋĀ‘# ŸĀĪu# ŸĪĐt# ŸĐÚu# ŸĒŋudŸŋĀ‘\ŸĀĪudŸĪĐt`ŸĐÚudŸĒŽPĐ×PŽŋu#ŸŋĀ‘#ŸĀĪu#ŸĪĐt#Ÿ´ŋudŸŋĀ‘\ŸĀĪudŸĪĐt`Ÿ´ĮPüucŸR%ucŸüPucŸR%ucŸPÉVĖ5V(žVę5VY‰ Ÿęī Ÿô Ÿp‰LŸžÉv ŸĖęv ŸĒËudŸËĖ‘\ŸĖęudŸĒŽPÚįPŽÉvŸĖÚvŸ´ËudŸËĖ‘\ŸĖÚudŸ´¸PĖ×P ucŸR5ucŸ P%ucŸ%)R)5ucŸ)P'‡€‡V€‡‚‡u‚‡ƒ‡tƒ‡÷‡V6‡8‡P8‡‡Wƒ‡Ž‡PއˆW‡ī‡BŸ<‡€‡v Ÿ€‡‚‡u# Ÿ‚‡ƒ‡t# ŸQ‡€‡v,Ÿ€‡‚‡u#,Ÿ‚‡ƒ‡t#,Ÿ&<u#Ÿ<=t#Ÿ= u#Ÿ Ąt#ŸĄŠu#Ÿ3FPFžVĄŖV{ĄBŸEVHļVļŧu"%vŸ%*P*EvŸHļvŸļŧu#Ÿ24P4FWHVPVÉWŠ´BŸ"EvŸEu#ŸPu#Ÿ^ V#VoåVBV Đ ŸBG ŸLX ŸˇĐLŸå v Ÿ#Bv Ÿņ udŸ#BudŸņõP2?Põ vŸ#2vŸû udŸ#2udŸû˙P#/PdkucŸkoRoucŸdoPv}ucŸ}RucŸvPLˆRˆPRˆˆˆVˆˆ‹ˆP‹ˆ‰VWˆ\ˆvŸ\ˆcˆPcˆˆˆvŸˆˆ‹ˆpŸ‹ˆ‰vŸkˆmˆPmˆ‰ˆW‹ˆ–ˆP–ˆųˆW ‰‰Wŗˆ÷ˆ¨Ÿ ‰‰¨ŸĘˆ÷ˆBŸÃu Zlu €„u ˆŽu ĩšu ŊÕu +ˆWˆYu\ŸYZ‘TŸZlWlu\Ÿ€tXŸ€ĩu\ŸĩšWšŊu\ŸŊÕWÕåu\ŸŊÕu\ŸÃÎudŸÎŌRŌÕudŸÃŌPOˆWˆAu\Ÿ€„u\Ÿˆ–u\ŸšŊu\ŸÕåu\ŸOAV€‚V‚„uˆŽušģVÁōW‘¸ Ÿ€„ Ÿˆ– ŸŖ¸DŸ¸Au\ŸšŊu\ŸÕåu\ŸûA|ŸšŊ|ŸÕå|Ÿ AvŸA—ŸAW.Av ŸDYu\ŸYZ‘TŸlu\Ÿ€tXŸJYudŸYZ‘\ŸludŸ€t`ŸJZPlwP–Ŧu\Ÿœ§u[Ÿ§ĢRĢŦu[ŸœĢPu €t€Ļu ϧ‘§åu u #Ÿ€t#Ÿ€Ļu #ŸĻ§‘#Ÿ§åu #Ÿ.dW§¯WąĀW.4V45t59t9u`Ÿ€t\Ÿ€Ļu`ŸĻ§‘XŸ§ęu`Ÿ:dWąĀW:}V}udŸ€t`Ÿ€¤V¤ĻudŸĻ§‘\ŸąŗVŗĩudŸĩˇVˇĪudŸR}V}udŸ€t`Ÿ€¤V¤ĻudŸĻ§‘\ŸRZPZu€t€Ļuϧ‘g}V}udŸ€t`Ÿ€¤V¤ĻudŸĻ§‘\Ÿju_Ÿ€t[Ÿ€Ļu_ŸĻ§‘WŸjqPqxv<Ÿ€‡Pnxu`Ÿˆ’u`ŸtxVŽ’udŸt€PŽžPˇĪudŸÃĘu_ŸĘÎRÎĪu_ŸÃÎPÕÜu_ŸÜāRāęu_ŸÕāP"3P"˜W˜™u™štšŲWŲuW—V—™udŸ™št`ŸšÁVÎĐVĐëudŸW˜W˜™u™štšÁWÎŲWŲëun—V—™udŸ™št`ŸšÁVq™u_Ÿ™št[ŸšÁu_Ÿq{P{ƒv<Ÿš§Pxƒu`Ÿ¨ŗu`Ÿ~ƒVŽŗudŸ~ƒPŽžPƒ˜wŸ˜™u#Ÿ™št#ŸĐëudŸÜæu_ŸæęRęëu_ŸÜęPņųu_ŸųũRũu_ŸņũP+bVV!)V=W=Uu UVtVu ‘Ču Í]u =wŸ=Uu #ŸUVt#ŸVu #Ÿ‘#ŸČu #ŸÍ]u #ŸszŸ.ŽzŸÍIzŸV]zŸsyVyztz~uœ~UuHŸUVtDŸVuHŸ‘@Ÿ.ŽuHŸÍIuHŸV]uHŸˆzŸ.|zŸÍzŸ(IzŸV]zŸˆ¤V¤UuLŸUVtHŸVuLŸ‘DŸ.|uLŸÍ uLŸ VuLŸV(1V1IuLŸV]uLŸ(IuLŸ4?udŸ?CRCIudŸ4CPĄŸ.jŸÍ ŸV]ŸĄÂWÂUuXŸUVtTŸVuXŸ‘PŸ.juXŸÍÚuXŸÚÜWÜũuXŸũ˙W˙ uXŸV]uXŸļŸ.XŸÍũŸV]ŸļæVæUu\ŸUVtXŸVu\Ÿ‘TŸ.7V7Xu\ŸÍÕVÕÚu\ŸÚåVåũu\ŸV]VÜũu\ŸčķudŸķ÷R÷ũudŸč÷PĪTWTUudŸUVt`ŸVWudŸ‘\Ÿ.FudŸVXWX]udŸĪUuUVtVu‘.FuV]uéTWTUudŸUVt`ŸVWudŸ‘\ŸėUuCŸUVtŋŸVuCŸ‘ģŸėķPķúw<ŸVgPđúu\Ÿhru\ŸöúWnrudŸöũPn~PúuXŸuXŸudŸ…udŸ P…–PuLŸ—ĨuLŸudŸĨudŸPŽP$uHŸ¯ŊuHŸ$udŸĩŊudŸ'PĩÆP$2uDŸĮÕuDŸ*2udŸÍÕudŸ*5PÍŪP2@uTŸßíuTŸ8@udŸåíudŸ8CPåöP@Nu`Ÿ÷u`ŸFNudŸũudŸFVPũP.FudŸ:AuCŸAEREFuCŸ:EPFXu\ŸLSuCŸSWRWXuCŸLWPXjuXŸ^euCŸeiRijuCŸ^iPj|uLŸpwuCŸw{R{|uCŸp{P|ŽuHŸ‚‰uCŸ‰RŽuCŸ‚PŽ uDŸ”›uCŸ›ŸRŸ uCŸ”ŸP ˛uTŸĻ­uCŸ­ąRą˛uCŸĻąP˛Íu`Ÿ¸ÍuPŸ¸ÃP$V'\V\^u^`V`hu%$vŸ'\vŸ\^u#Ÿ^`vŸ`hu#Ÿ^W;§WoéWZ§WŖÔ ŸZ^ Ÿbp ŸēÔLŸéw Ÿ;Zw ŸõudŸ;ZudŸõüPJWPüwŸ;JwŸudŸ;JudŸP;GP|†ucŸ†ŠRЧucŸ|ŠP‘™ucŸ™R§ucŸ‘P7‰:‰v Ÿ“:‰B‰P“B‰z‰uP“z‰{‰tL“{‰@ŠuP“@ŠAŠtL“AŠkŠuP“7‰:‰v Ÿ:‰B‰PB‰z‰uPz‰{‰tL{‰@ŠuP@ŠAŠtLAŠkŠuPK‰M‰PM‰z‰uLz‰{‰tH{‰†‰P†‰@ŠuL@ŠAŠtHAŠkŠuLš‰ā‰&ŸAŠVŠ&Ÿģ‰ā‰BŸb‰{‰ō1âā‰AŠō1âVŠkŠō1âb‰z‰uPz‰{‰tLā‰@ŠuP@ŠAŠtLVŠkŠuPq‰{‰P≿‰Pæ‰>ŠVVŠ^ŠVú‰AŠUŸVŠkŠUŸŠAŠBŸ‡ŠŠŠv Ÿ“ŠŠ’ŠP“’ŠÍŠuL“͊ΊtH“Ί“‹uL““‹”‹tH“”‹ž‹uL“‡ŠŠŠv ŸŠŠ’ŠP’ŠÍŠuL͊ΊtHΊ“‹uL“‹”‹tH”‹ž‹uL›ŠŠPŠĩŠuPΊ֊P֊0‹uP”‹Š‹uPęŠ0‹&Ÿ”‹Š‹&Ÿ ‹0‹BŸĩŠÎŠōDä0‹”‹ōD䊋ž‹ōDäĩŠÍŠuL͊ΊtH0‹“‹uL“‹”‹tHŠ‹ž‹uLÁŠÆŠPƊˊV0‹6‹P6‹‘‹VŠ‹ą‹VJ‹”‹UŸŠ‹ž‹UŸk‹”‹BŸŒ ŒvŸ“ ŒŒP“ŒSŒuL“SŒTŒtH“TŒ#uL“#$tH“$NuL“Œ ŒvŸ ŒŒPŒSŒuLSŒTŒtHTŒ#uL#$tH$NuLŒŒPŒ;ŒuPTŒ^ŒP^Œ¸ŒuP$9uPrŒ¸Œ&Ÿ$9&Ÿ“Œ¸ŒBŸ;ŒTŒōœæ¸Œ$ōœæ9Nōœæ;ŒSŒuLSŒTŒtH¸Œ#uL#$tH9NuLGŒLŒPLŒQŒV¸ŒÆŒPƌ!V9AVڌ$UŸ9NUŸûŒ$BŸgjvŸ“jrP“rŗuL“ŗ´tH“´ƒŽuL“ƒŽ„ŽtH“„ŽŽŽuL“gjvŸjrPrŗuLŗ´tH´ƒŽuLƒŽ„ŽtH„ŽŽŽuL{}P}›uP´žPžŽuP„Ž™ŽuPŌŽ&Ÿ„Ž™Ž&ŸķŽBŸ›´ō¯čŽ„Žō¯č™ŽŽŽō¯č›ŗuLŗ´tHŽƒŽuLƒŽ„ŽtH™ŽŽŽuL§ŦPŦąVŽ&ŽP&ށŽV™ŽĄŽV:Ž„ŽUŸ™ŽŽŽUŸ[Ž„ŽBŸŗŽîu#,ŸĐŽîu#,ŸĐŽåŽPåŽ6uTЎåŽVЎV#vxŸ#RVåŽôŽVôŽųŽvxŸųŽV(vxŸåŽôŽvŸôŽųŽv|ŸųŽvŸ(v|ŸåŽųŽudŸ˙Ž6udŸåŽęŽPęŽņŽv<Ÿ˙Ž PåŽôŽVôŽųŽvxŸ V(vxŸíŽņŽudŸudŸíŽųŽP"P6îu#,Ÿ6>u#4u#,8Ÿ6BP:>u#4u#,8Ÿ:BPFîu# ŸRîu# ŸRkPkæuTRkVRÎVÎĶvlŸĶVk‡V‡ŒvlŸŒÎVΏ؏vlŸk‡vŸ‡Œv|ŸŒÎvŸÎØv|ŸkŒudŸ’æudŸksPszv<Ÿ’Pkzv Ÿž¨v ŸvzudŸ¤¨udŸv}P¤ˇPz„vŸ¸ÂvŸ€„udŸžÂudŸ€ŒPžŌPæîu# Ÿæîu#(u# DŸæōPęîu#(u# DŸęōPöüuütPvVyVSyBŸ(<W<=t=AtA|uXŸ|}‘PŸ}ŸuXŸŸ tTŸ -uXŸ(Úu}ŒuޞuļČuu(Úu#Ÿ}Œu#ŸŽ˛u#ŸļČu#Ÿu#Ÿ/<W<=t=AtA|uXŸ|}‘PŸ}ŸuXŸŸ tTŸ -uXŸ/dV}ŒVĒžVĀŲV V-VKļŸĀčŸ-ŸKŸWŸ|u\Ÿ|}‘TŸ}ŒWŒŸu\ŸŸ tXŸ Žu\ŸŽ°W°ļu\ŸĀču\Ÿ-u\Ÿu\ŸudŸRudŸPfŸWŸXu\Ÿ˛ļu\ŸĀĐu\Ÿ-u\ŸfXV˛ļVĀĐV-VØ W¨Ī ŸĀĐ ŸēĪDŸĪXu\Ÿ˛ļu\Ÿ-u\ŸX|Ÿ˛ļ|Ÿ-|Ÿ!XvŸ6X—Ÿ6XWEXv Ÿ[|u\Ÿ|}‘TŸŒŸu\ŸŸ tXŸ Ēu\Ÿg|udŸ|}‘\ŸŒŸudŸŸ t`Ÿ ĒudŸgkP §PĐču\ŸÜãuWŸãįRįčuWŸÜįPk|uXŸ|}‘PŸŒŸuXŸŸ tTŸq|udŸ|}‘\ŸŒŸudŸŸ t`Ÿq}PŒ—PčuXŸîõuWŸõųRųuWŸîųP4EWEFtFMtM’uXŸ’“tTŸ“ˇuXŸˇ¸tTŸ¸uXŸ5]uXŸg†uXŸ4æu“¤uâėuđu5;ukvu4æu#Ÿ“¤u#Ÿâėu#Ÿđu#Ÿ5;u#Ÿkvu#Ÿ:EWEFtFMtM’uXŸ’“tTŸ“ˇuXŸˇ¸tTŸ¸uXŸ5]uXŸg†uXŸ:pV“¤VâęVėųV5LVg†V:Ÿ5]Ÿg†ŸWâŸėŸ5]Ÿg†ŸWĢWĢ’u\Ÿ’“tXŸ“¤W¤ˇu\Ÿˇ¸tXŸ¸âu\Ÿėu\Ÿ5]u\Ÿgou\ŸoqWq†u\Ÿđu\ŸüudŸRudŸüPrĢWĢdu\Ÿ5Cu\Ÿgou\Ÿv†u\ŸrdV5CVgoVv†VäW´Û Ÿ5C Ÿko ŸÆÛDŸÛdu\Ÿgku\Ÿv†u\Ÿd|Ÿgk|Ÿv†|Ÿ-dvŸBd—ŸBdWQdv Ÿg’u\Ÿ’“tXŸ¤ˇu\Ÿˇ¸tXŸ¸âu\Ÿs’udŸ’“t`Ÿ¤ˇudŸˇ¸t`Ÿ¸âudŸszPzu\<Ÿ¸ĮPC]u\ŸOVuSŸVZRZ]uSŸOZPwuXŸČŌuXŸ}udŸÎŌudŸ}PÎßP’uTŸ’“tPŸ¤ˇuTŸˇ¸tPŸ‡’udŸ’“t`Ÿ¤ˇudŸˇ¸t`Ÿ‡“P¤¯PuXŸuSŸRuSŸP5uTŸ 'uSŸ'+R+5uSŸ +P˙u Ŧŧu ō u Wuu y“u ϰu ˙u #ŸŦŧu #Ÿō u #ŸWuu #Ÿy“u #ŸĻ°u #Ÿ.RVquVy‚VĻŽV.4W45t59t9ĢuTŸĢŦtPŸŦĪuTŸĪĐtPŸĐˇuTŸ:RVquVy‚V:^W^_t_ftfĢuXŸĢŦtTŸŦĪuXŸĪĐtTŸĐ<uXŸWquXŸqsWsĻuXŸ°ˇuXŸy“uXŸ…ŒudŸŒR“udŸ…PR^W^_t_ftfĢuXŸĢŦtTŸŦĪuXŸĪĐtTŸĐ<uXŸWquXŸuyuXŸ“ĻuXŸ°ˇuXŸRWPW˙uŦŧuō uWquRWpŸW˙u#ŸŦŧu#Ÿō u#ŸWqu#ŸU^W^_t_ftfĢuXŸĢŦtTŸŦĪuXŸĪĐtTŸĐ<uXŸWquXŸuyuXŸ“ĻuXŸ°ˇuXŸU‰VŦŧVōVVW`VuyV“ĻV°ˇVb<ŸWqŸuyŸ“ĻŸ°ˇŸbftfĢuXŸĢŦtTŸŦĪuXŸĪĐtTŸĐ<uXŸWquXŸuyuXŸ“ĻuXŸ°ˇuXŸpúŸ*ŸWqŸuyŸ“ĻŸ°ˇŸpÄWÄĢu\ŸĢŦtXŸŦŧWŧĪu\ŸĪĐtXŸĐöu\ŸöøWøúu\Ÿ*u\ŸWqu\Ÿuyu\Ÿ“Ļu\Ÿ°ˇu\ŸWqu\ŸcjudŸjnRnqudŸcnP‹ÄWÄ}u\Ÿōöu\Ÿu\Ÿuyu\Ÿ“Ļu\Ÿ‹}VōöVVuyV“ĻVũ.WÍô Ÿōö Ÿ ŸßôDŸô}u\Ÿuyu\Ÿ“Ļu\Ÿ7}|Ÿuy|Ÿ“Ļ|ŸF}vŸ[}—Ÿ[}Wj}v Ÿ€Ģu\ŸĢŦtXŸŧĪu\ŸĪĐtXŸĐōu\ŸŒĢudŸĢŦt`ŸŧĪudŸĪĐt`ŸĐōudŸŒ“P“šu\<ŸĐ×P*u\Ÿ%uSŸ%)R)*uSŸ)PšuXŸØâuXŸ–šudŸŪâudŸ–šPŪīPšĢuTŸĢŦtPŸŧĪuTŸĪĐtPŸ ĢudŸĢŦt`ŸŧĪudŸĪĐt`Ÿ ŦPŧĮP*<uXŸ07uSŸ7;R;<uSŸ0;P<WuTŸBIuSŸIMRMWuSŸBMPې5‘—Ÿz‘ ‘—ŸÃ‘ ’—ŸŪčuTč5‘u\Ÿz‘ ‘u\ŸÃ‘ ’u\Ÿö5‘—Ÿz‘ ‘—ŸÃ‘ã‘—Ÿũ‘˙‘—Ÿö5‘uTz‘ ‘uTÑۑuTۑã‘u`Ÿũ‘˙‘uT‘5‘uTz‘ ‘uT‘5‘u[Ÿz‘ ‘u[Ÿ‘!‘Pz‘Š‘P!‘5‘udŸ‘ ‘udŸ'‘5‘u`Ÿ‘ ‘u`Ÿ'‘+‘P‘š‘P+‘5‘u\Ÿ]‘g‘u\Ÿ1‘5‘udŸc‘g‘udŸ1‘:‘Pc‘m‘P¨‘Ñu\ŸŽ‘ĩ‘u[Ÿĩ‘š‘Rš‘Ñu[ŸŽ‘š‘Pőã‘u`ŸŅ‘Ø‘u[ŸØ‘ß‘Rߑã‘u[ŸŅ‘ß‘Pã‘ũ‘udŸé‘đ‘u[Ÿđ‘÷‘R÷‘ũ‘u[Ÿé‘÷‘P:’¯“uT¯“˛“tPƓ.”uT’’’u ˛“ë“u ’’’u #Ÿ˛“ë“u #Ÿ5’7’P7’:’u #F’˛“¸ŸÆ“?”¸ŸF’Ž“WŽ“¯“udŸ¯“˛“t`ŸÆ“?”WF’X’w#ŸX’]’Pa’¤’ōõ ¤’í’ō í’$“ō/ B“˛“ō Ɠë“ōõ ë“ ”ō  ”+”ō a’Ž“WŽ“¯“udŸ¯“˛“t`ŸÆ“+”Wi’ƒ’Vi’q’w#Ÿy’}’pŸ}’‚’PƓë“udŸŒ’˛“ßë“+”ߌ’‘’ud#Ÿ•’˜’pŸ˜’’P¤’í’ō í’$“ō/ B“˛“ō ë“ ”ō  ”+”ō ¤’¯“udŸ¯“˛“t`Ÿë“+”udŸŦ’Ę’VŦ’˛’ud#Ÿž’Ä’pŸÄ’É’Pë“ ”udŸÕ’$“ŸÕ’$“udŸÕ’ā’ud#Ÿä’į’pŸį’ė’Pí’$“ō/ í’$“udŸí’$“uTí’ķ’ud#Ÿ˙’“pŸ““P“$“ŗŸ““ud#Ÿ““pŸ“ “P$“˛“ĪŸ ”+”ĪŸ$“¯“udŸ¯“˛“t`Ÿ ”+”udŸ$“/“ud#Ÿ3“6“pŸ6“;“PB“˛“ō  ”+”ō B“¯“udŸ¯“˛“t`Ÿ ”+”udŸJ“T“Q_“c“tc“g“tJ“P“ud#Ÿ\“b“pŸb“g“P ”+”udŸ}“¯“udŸ¯“˛“t`Ÿ}“˛“0Ÿ@” ”R ”v•ķRŸv•‹•R‹•ö•ķRŸ@” ”rŸ ”v•ķR#Ÿv•‹•rŸ‹•ö•ķR#Ÿc”š”rv•‹•P~” ”R ”v•ķRŸ‹•ö•ķRŸ~” ”rŸ ”v•ķR#Ÿ‹•ö•ķR#Ÿ­”u•udŸu•v•‘\Ÿ‹•Á•udŸÁ••t`Ÿã•ö•udŸ­”s•Vs•u•u`Ÿu•v•‘XŸ‹•ŋ•Vŋ•Á•u`ŸÁ••t\Ÿã•ė•Vė•đ•tđ•ö•u`Ÿ­”ˇ”v#Ÿˇ”ŧ”PƔv•uŸ‹••uŸÆ”s•Vs•u•u`Ÿu•v•‘XŸ‹•ŋ•Vŋ•Á•u`ŸÁ••t\ŸÆ”Ī”v#ŸĪ”Ô”PՔs•Vs•u•u`Ÿu•v•‘XŸ‹•ŋ•Vŋ•Á•u`ŸÁ••t\ŸÕ”˙”W‹•­•WՔܔv#Ÿä”č”pŸč”í”Pô”s•Vs•u•u`Ÿu•v•‘XŸ‹•ŋ•Vŋ•Á•u`ŸÁ••t\Ÿü”•P••W••uPü”•v#Ÿ••P‹•­•u`Ÿ‹•­•0Ÿ‹•ĸ•u`#Ÿĸ•§•P5•u•u`Ÿu•v•‘XŸ­•Á•u`ŸÁ••t\Ÿ5•v•0Ÿ­••0Ÿ]•u•udŸu•v•‘\Ÿ­•Á•udŸÁ••t`Ÿc•u•u`Ÿu•v•‘XŸ­•Á•u`ŸÁ••t\Ÿc•n•Pn•u•ud<Ÿu•v•‘\<Ÿ­•ļ•Pĕã•udŸĘ•Õ•u_ŸÕ•Ų•RŲ•ã•u_ŸĘ•Ų•PJ–o–Vo–q–u`Ÿq–r–‘XŸr–™–VM–q–u_Ÿq–r–‘WŸr–™–u_ŸM–W–PW–_–v<Ÿr––PT–_–udŸ€–‹–udŸZ–_–V†–‹–u`ŸZ–_–P†–––P¤–Ā–udŸĒ–˛–u_Ÿ˛–ļ–Rļ–Ā–u_ŸĒ–ļ–PΖؖu_ŸØ–Ü–Rܖߖu_ŸÎ–Ü–P—M—uM—N—tN—v—u——R—M—u M—N—tN—v—u —M—utŸM—N—tpŸN—{—utŸ/—M—utŸM—N—tpŸN—Z—utŸ2—M—usŸM—N—toŸN—Z—usŸ2—:—PN—W—Pb—m—usŸm—q—Rq—{—usŸb—q—P!R!euTeˆķRŸˆœuTœįķRŸ.ađŸ.aVMaÕŸMXPdˆøŸœĶøŸdˆudŸœŌudŸŌĶt`ŸˆœŸˆœudŸœĶTŸœ¯PšŌudŸŌĶt`Ÿ —U™WU™V™u\ŸV™W™tXŸW™šW —˛—w#Ÿ˛—ˇ—Pģ—í™ōb˙™ šōbģ—U™WU™V™u\ŸV™W™tXŸW™í™W˙™ šW×Ũ—V×˗w#ŸĶ—×—pŸ×—Ü—PW™{™u\Ÿæ—W™Ÿ{™í™Ÿ˙™ šŸæ—ë—u\#Ÿī—ō—pŸō—÷—P˜W™<Ÿ{™í™<Ÿ˙™ š<Ÿ˜˜u\#Ÿ˜ ˜pŸ ˜˜P˜W™|Ÿ{™í™|Ÿ˙™ š|Ÿ˜˜u\#Ÿ˜"˜pŸ"˜'˜P+˜W™ōb{™í™ōb˙™ šōb+˜V™u\ŸV™W™tXŸ{™í™u\Ÿ˙™ šu\Ÿ3˜M˜V3˜7˜u\#ŸC˜G˜pŸG˜L˜P{™›™u\ŸV˜W™Ÿ›™í™Ÿ˙™ šŸV˜[˜u\#Ÿ_˜b˜pŸb˜g˜Pq˜W™œŸ›™í™œŸ˙™ šœŸq˜s˜u\#Ÿw˜z˜pŸz˜˜P‰˜W™ÜŸ›™í™ÜŸ˙™ šÜŸ‰˜‹˜u\#Ÿ˜’˜pŸ’˜—˜PĄ˜W™Ÿ›™í™Ÿ˙™ šŸĄ˜Ŗ˜u\#Ÿ§˜Ē˜pŸĒ˜¯˜Pš˜W™\Ÿ›™í™\Ÿ˙™ š\Ÿš˜ģ˜u\#Ÿŋ˜Â˜pŸÂ˜Į˜PҘW™*Ÿ›™í™*Ÿ˙™ š*ŸŅ˜Ķ˜u\#Ÿ×˜Ú˜pŸÚ˜ß˜Pô˜V™udŸV™W™t`Ÿ›™í™udŸ˙™ šudŸ,™T™VT™V™u`ŸV™W™t\Ÿ›™Ŋ™V/™V™u[ŸV™W™tWŸ›™Ŋ™u[Ÿ/™6™PŠ™ˇ™P6™V™udŸV™W™t`Ÿ›™Š™udŸ<™V™u`ŸV™W™t\Ÿ›™Š™u`Ÿ<™A™P›™Ļ™PA™V™u\ŸV™W™tXŸŋ™Ú™u`ŸË™Õ™u[ŸÕ™Ų™RŲ™Ú™u[ŸË™Ų™Pڙí™udŸā™č™u[Ÿč™ė™Rė™í™u[Ÿā™ė™Pí™˙™u\Ÿ wu wztz}u uVuwudŸwzt`ŸzŽV )u  1v#Ÿ16RFuVuwudŸwzt`ŸFz0Ÿ<Jp Ÿ<utĻuϧt§u6Su]|ut RŸ6GRŸQSRŸ]|RŸtzVz{t{tuLŸtHŸĻuLŸĻ§tHŸ§ uLŸ6GuLŸQSuLŸ]|uLŸ‰§RŸą÷RŸ6GRŸQSRŸ]|RŸ‰×V×uPŸtLŸĻuPŸĻ§tLŸąšVšģuPŸģÄVÄ÷uPŸ6>V>@uPŸ@GVQSV]hVh|uPŸkru\ŸrvRv|u\ŸkvPĸ§aŸąåaŸ@GaŸQSaŸĸ¨W¨ŠtŠ­t­uXŸtTŸĻuXŸĻ§tTŸąåuXŸ@GuXŸQSuXŸˇ§aŸģĶaŸ@GaŸQSaŸˇWu\ŸtXŸĨWĨĻu\ŸĻ§tXŸģĶu\Ÿ@BWBGu\ŸQSWÅWu\ŸtXŸĨWĨĻu\ŸĻ§tXŸQSWÅÍPÍutĻuϧtQSuÚWu\ŸtXŸĨWĨĻu\ŸĻ§tXŸŨuGŸtCŸĻuGŸĻ§tCŸŨäPäëw<Ÿ'PáëuXŸ(2uXŸįëW.2u\ŸįîP.>PëõuPŸ?IuPŸņõu\ŸEIu\ŸņøPEVPõ˙uLŸWauLŸû˙u\Ÿ]au\ŸûP]nP˙ uHŸoyuHŸ u\Ÿuyu\Ÿ Pu†P uTŸ‡‘uTŸu\Ÿ‘u\ŸPžPģĶu\ŸĮÎuGŸÎŌRŌĶuGŸĮŌPĶåuXŸŲāuGŸāäRäåuGŸŲäPå÷uPŸëōuGŸōöRö÷uGŸëöP÷ uLŸũuGŸR uGŸũP uHŸuGŸRuGŸP6uTŸ!(uGŸ(,R,6uGŸ!,P0^V^u tĻu ϧt§1u 6Su S[V[|u 9Gp0)Ÿ9utĻuϧt§u6Su]|uq RŸ6GRŸQSRŸ]|RŸqwVwxtx|t|uLŸtHŸĻuLŸĻ§tHŸ§ uLŸ6GuLŸQSuLŸ]|uLŸ†§RŸą÷RŸ6GRŸQSRŸ]|RŸ†ÔVÔuPŸtLŸĻuPŸĻ§tLŸąšVšģuPŸģÄVÄ÷uPŸ6>V>@uPŸ@GVQSV]hVh|uPŸkru\ŸrvRv|u\ŸkvPŸ§aŸąåaŸ@GaŸQSaŸŸĨWĨĻtĻĒtĒuXŸtTŸĻuXŸĻ§tTŸąåuXŸ@GuXŸQSuXŸ´§aŸģĶaŸ@GaŸQSaŸ´Wu\ŸtXŸĨWĨĻu\ŸĻ§tXŸģĶu\Ÿ@BWBGu\ŸQSWÂWu\ŸtXŸĨWĨĻu\ŸĻ§tXŸQSWÂĘPĘutĻuϧtQSu×Wu\ŸtXŸĨWĨĻu\ŸĻ§tXŸÚuGŸtCŸĻuGŸĻ§tCŸÚáPáčw<Ÿ'PŪčuXŸ(2uXŸäčW.2u\ŸäëP.>PčōuPŸ?IuPŸîōu\ŸEIu\ŸîõPEVPōüuLŸWauLŸøüu\Ÿ]au\Ÿø˙P]nPüuHŸoyuHŸu\Ÿuyu\Ÿ Pu†PuTŸ‡‘uTŸ u\Ÿ‘u\Ÿ PžPģĶu\ŸĮÎuGŸÎŌRŌĶuGŸĮŌPĶåuXŸŲāuGŸāäRäåuGŸŲäPå÷uPŸëōuGŸōöRö÷uGŸëöP÷ uLŸũuGŸR uGŸũP uHŸuGŸRuGŸP6uTŸ!(uGŸ(,R,6uGŸ!,P'šÖšV֚ךwdŸŲš4›V4›S›wdŸ*š×šWؚS›WOš[šv[š]št]š^št^šbštOš[švŗšžšu\Ÿ!›2›u\Ÿļšžšu[Ÿ!›2›u[ŸļšžšP!›/›P:›E›u[ŸE›I›RI›S›u[Ÿ:›I›PœZœu\ŸœZœuWŸœœPFœWœP.œFœuXŸ1œFœu`Ÿ1œ@œP\œwœuXŸbœiœu`ŸiœmœRmœwœu`ŸbœmœP…œŒœuWŸŒœœRœ“œuWŸ…œœPžžPžųžuHųžúžtDúž ŸuHŸ/ŸuH´ŸļŸuHĻžŽžPŽž÷žVŸ/ŸV͜įœPįœëœRėœųžuTųžúžtPúžŌŸuT˙œPR;ųžuDųžúžt@úžmŸuDˆŸĒŸuD´ŸļŸuD>ųžu[ŸųžúžtWŸúžmŸu[ŸˆŸĒŸu[Ÿ´ŸļŸu[Ÿ>IPITuD<Ÿ=ŸGŸPFTuTHŸVŸu`ŸLTuDNŸVŸu\ŸLTPNŸgŸP‘œu\Ÿ ŸŸu\Ÿ”œu[Ÿ ŸŸu[Ÿ”œP ŸŸPžÅPÅĪRįųžu`Ÿųžúžt\Ÿúž Ÿu`ŸŸ=Ÿu`Ÿ´ŸļŸu`Ÿęųžu\ŸųžúžtXŸúž Ÿu\ŸŸ=Ÿu\Ÿ´ŸļŸu\ŸęōP/Ÿ7ŸP$ž,žP,ž–žu@úž Ÿu@´ŸļŸu@-ž–žu@úž Ÿu@´ŸļŸu@Yž–žu`Ÿúž Ÿu`Ÿ\ž–žu\Ÿúž Ÿu\Ÿ\ždžPúžŸPŠŸžŸu`ŸŸžŸu\ŸŸ›ŸPuŸŸu`Ÿ{ŸŸu[Ÿ{ŸŸP ŸĒŸu\ŸĻŸĒŸu[ŸĻŸĒŸPğ˟u[ŸËŸĪŸRΟԟu[ŸÄŸĪŸP;IP;utĻuϧt§u6Su]|us RŸ6GRŸQSRŸ]|RŸsyVyztz~t~uLŸtHŸĻuLŸĻ§tHŸ§ uLŸ6GuLŸQSuLŸ]|uLŸˆ§RŸą÷RŸ6GRŸQSRŸ]|RŸˆÖVÖuPŸtLŸĻuPŸĻ§tLŸąšVšģuPŸģÄVÄ÷uPŸ6>V>@uPŸ@GVQSV]hVh|uPŸkru\ŸrvRv|u\ŸkvPĄ§aŸąåaŸ@GaŸQSaŸĄ§W§¨t¨ŦtŦuXŸtTŸĻuXŸĻ§tTŸąåuXŸ@GuXŸQSuXŸļ§aŸģĶaŸ@GaŸQSaŸļWu\ŸtXŸĨWĨĻu\ŸĻ§tXŸģĶu\Ÿ@BWBGu\ŸQSWÄWu\ŸtXŸĨWĨĻu\ŸĻ§tXŸQSWÄĖPĖutĻuϧtQSuŲWu\ŸtXŸĨWĨĻu\ŸĻ§tXŸÜuGŸtCŸĻuGŸĻ§tCŸÜãPãęw<Ÿ'PāęuXŸ(2uXŸæęW.2u\ŸæíP.>PęôuPŸ?IuPŸđôu\ŸEIu\Ÿđ÷PEVPôūuLŸWauLŸúūu\Ÿ]au\ŸúP]nPūuHŸoyuHŸu\Ÿuyu\Ÿ Pu†PuTŸ‡‘uTŸu\Ÿ‘u\ŸPžPģĶu\ŸĮÎuGŸÎŌRŌĶuGŸĮŌPĶåuXŸŲāuGŸāäRäåuGŸŲäPå÷uPŸëōuGŸōöRö÷uGŸëöP÷ uLŸũuGŸR uGŸũP uHŸuGŸRuGŸP6uTŸ!(uGŸ(,R,6uGŸ!,P   0Ÿ m V™ ĸV  p Wp ™ ‘™ +ĸW+ĸDĸ‘* = R= Q pv"Q m ‘S™ Š pv"Š ­ ‘S­ Ã pv"àĮ ‘SĮ Ų pv"Ų ā ‘Sā ī pv"ī ö ‘Sö *Ąpv"*ĄHĄ‘SHĄSĄpv"SĄnĄ‘SnĄsĄpv"sĄŽĄ‘SŽĄĄpv"Ą+ĸ‘SH S UŸH S ‘LH S ‘L#Ÿæ ö gŸæ ö ‘Læ ö ‘L#Ÿ'ĄHĄōīJ'ĄHĄ‘L>ĄBĄQBĄHĄ‘Z:ĄBĄP™ ­ PŸ™ ­ ‘L™ ­ ‘L#Ÿē Į `Ÿē Į ‘Lē Į ‘L#ŸĮ ā ZŸĮ ā ‘LĮ ā ‘L#Ÿö HĄ‘SŽĄ+ĸ‘SHĄnĄ‘LcĄhĄrhĄnĄ‘YcĄhĄPnĄŽĄ‘LƒĄˆĄrˆĄŽĄ‘XƒĄˆĄP¯Ą+ĸnŸ¯Ą+ĸ‘L¯Ą¸Ą‘L#Ÿ¸ĄŊĄPÄĄĸ‘`ŸÄĄĸ‘LÄĄÎĄ‘L#ŸÎĄĶĄPŨĄĸrŸŨĄĸ‘LŨĄæĄ‘L#ŸæĄëĄPōĄĸ‘`ŸõĄĸ‘[Ÿĸ ĸR ĸĸ‘[ŸõĄ˙ĄP˙Ąĸ‘`<Ÿĸ ĸPĸ+ĸ‘`Ÿĸ&ĸ‘[Ÿ&ĸ*ĸR*ĸ+ĸ‘[Ÿĸ*ĸP| ™ ‘L+ĸ@ĸ‘LzĸĶŖV¤¤VA¤C¤VIŖvŖWA¤I¤WzĸŖu\Ÿ‰ŖÍŖu\ŸzĸšĸWzĸ„ĸu\#Ÿĸ”ĸpŸ”ĸ™ĸP‘ŖŦŖu\ŸŖĸŖtŸŦŖÍŖtŸŖĸ¨ĸu\#ŸŦĸ¯ĸpŸ¯ĸ´ĸPÁĸŖÕŸŦŖÍŖÕŸÁĸĮĸpŸĮĸĖĸPĶĸŖudŸŦŖÍŖudŸĶĸÖĸu\#ŸÚĸŨĸpŸŨĸâĸPéĸŖÕŸŦŖÍŖÕŸéĸīĸpŸīĸôĸPûĸŖudŸŦŖÍŖudŸūĸŖu[ŸŦŖÍŖu[Ÿūĸ ŖPŊŖĮŖP ŖŖu`ŸŦŖŊŖu`ŸŖŖudŸŦŖŊŖudŸŖŖPŦŖˇŖPzĸŖuT_ŖÍŖuT¤K¤uTzĸŖuŸwŖÍŖuŸ¤-¤uŸzĸŖu\ŸwŖÍŖu\Ÿ¤-¤u\ŸwŖyŖu\#Ÿ}Ŗ€ŖpŸ€Ŗ…ŖP¤-¤udŸ!¤(¤u[Ÿ(¤,¤R,¤-¤u[Ÿ!¤,¤P-¤A¤u`Ÿ3¤:¤u[Ÿ:¤>¤R>¤A¤u[Ÿ3¤>¤PßŖųŖu\ŸųŖüŖ‘TŸūŖ¤u\Ÿ #P#ŖVŖĨuP<ŸĨĻtL<ŸĻŊVŊŋuP<ŸŋĀ‘H<ŸĀÆVÆČuP<ŸČĖVĖÎuP<ŸÎVuP<Ÿ-QV #p4Ÿ#-P-„uT„Ŗv4ŸŖĨuP#(ŸĨĻtL#(ŸĻŊv4ŸŊŋuP#(ŸŋĀ‘H#(ŸĀÄuTÄÆv4ŸÆČuP#(ŸČuTuP#(Ÿ-QuT}ŖVŖĨuP<ŸĨĻtL<ŸĻŊVŊŋuP<ŸŋĀ‘H<ŸĀÆVÆČuP<ŸČĖVĖÎuP<ŸÎVuP<Ÿ-QV°ŖvŸŖĨuP4ŸĨĻtL4ŸĻŊvŸŊŋuP4ŸŋĀ‘H4ŸÄÆvŸÆČuP4ŸČĖvŸĖÎuP4ŸÎÜvŸuP4Ÿ-QvŸÎÜVĀHŸÄÎHŸQHŸ3Q3ĨuPĨĻtLĻŋuPŋĀ‘HÄÎuPuP-QuPGĨuP#$ŸĨĻtL#$ŸĻŋuP#$ŸŋĀ‘H#$ŸÄÎuP#$ŸuP#$Ÿ-QuP#$ŸÜv4ŸeŖVŖĨuP<ŸĨĻtL<ŸĻŊVŊŋuP<ŸŋĀ‘H<ŸÄÆVÆČuP<ŸĘĖVĖÎuP<ŸuP<ŸejPjĨuĨĻtĻŋuŋĀ‘ÄČuĘÎuuxĨudŸĨĻt`ŸĻŋudŸŋĀ‘\ŸÄČudŸudŸx{u#Ÿ“ĨudŸĨĻt`ŸĻŋudŸŋĀ‘\Ÿ–ĨucŸĨĻt_ŸĻŋucŸŋĀ‘[Ÿ–ˇPudŸ ucŸRucŸ Pu $t¤ĻĨ0ŸĻĨ ĻW ĻĻPĻž¨0Ÿž¨Ī¨W΍!Š0Ÿ!Š5ŠW5Š&Ē0ŸPĒRĒWnĒ+Ģ0Ÿ°¤5ĒvŸPĒjĒvŸnĒ+ĢvŸ°¤Ļu°ĻĻtŦĻ&Ēu°&Ē5Ēu@ŸPĒjĒu°nĒoĒu°oĒ™Ēu@Ÿ™Ē+Ģu°°¤ŋ¤u°#Ÿŋ¤Ä¤PȤĻu°ĻĻtŦĻ&Ēu°PĒfĒu°nĒoĒu°oĒ™Ēu@Ÿ™Ē+Ģu°Фđ¤WĐ¤Ø¤u°#Ÿæ¤ę¤pŸę¤ī¤Pū¨!Šu@Ÿö¤ū¨Ÿ!Š&ĒŸPĒfĒŸnĒ+ĢŸö¤ ĨpŸ ĨĨPLĨ¤ĨĀŸĒ&ĒĀŸLĨ¤Ĩu@ŸĒ&Ēu@ŸjĨ¤ĨŸŸjĨ¤Ĩu@Ÿ}Ĩ¤ĨuHŸ}Ĩ¤Ĩu@Ÿ}Ĩ€Ĩu@#Ÿ„Ĩ‡ĨpŸ‡ĨŒĨP™Ĩ¤ĨuHŸœĨ¤ĨudŸœĨ¤ĨPEĻĻV5Š[ŠVmσĻߟmσĻu´5Š[ŠÆŸ5Š[ŠudŸ…Ļ—ĻudŸŸĻ¸ĻõŸŸĻ¸ĻudŸČρ§udŸĒĒudŸņĒĢudŸrĒ…ĒudŸŨρ§DŸĒĒDŸņĒĢDŸŨρ§u@ŸĒĒu@ŸņĒĢu@Ÿėρ§ŸĒĒŸėρ§u@ŸĒĒu@Ÿ§§uTŸĒĒuTŸ§§u@ŸĒĒu@Ÿ§§u@#Ÿ §§pŸ§§P§§ŸĒĒŸ§§u@ŸĒĒu@Ÿ&§§šŸĒĒšŸ&§§u@ŸĒĒu@Ÿ?§§uXŸĒĒuXŸ?§§u@ŸĒĒu@Ÿ?§B§u@#ŸF§I§pŸI§N§P[§§uTŸĒĒuTŸ^§§udŸĒĒudŸ^§f§PĒĒPf§§uXŸl§§udŸl§{§Pę¨ū¨P[ŠfŠP÷ŠĒuPŸúŠĒudŸúŠĒP|ŠĒŸĢ+ĢŸ|ŠĒu@ŸĢ+Ģu@Ÿ‘ŠĒŦŸ‘ŠĒu@ŸļŠĒŸļŠšŠPšŠôŠVĘŠĒšŸĘŠôŠVÜŠĒuPŸÜŠôŠV܊ߊv#Ÿ…Ē™ĒuXŸ‹Ē’Ēu`Ÿ’Ē–ĒR–Ē™Ēu`Ÿ‹Ē–ĒPķĒĢuTŸ˙ĒĢudŸ˙Ē ĢP™§ņ§ƒŸĖĒįĒƒŸ™§ņ§u@ŸĖĒįĒu@Ÿą§ņ§ŸŸą§ņ§u@ŸĘ§ņ§uDŸĘ§ņ§u@ŸĘ§Í§u@#ŸŅ§Ô§pŸÔ§Ų§Pæ§ņ§uDŸé§ņ§udŸé§ņ§Pa¨ž¨äŸ™ĒąĒäŸa¨ž¨u@Ÿ™ĒąĒu@Ÿ¨ž¨ŸŸ¨ž¨u@Ÿ’¨ž¨uLŸ’¨ž¨u@Ÿ’¨•¨u@#Ÿ™¨œ¨pŸœ¨Ą¨Pލž¨uLŸą¨ž¨udŸą¨ž¨PĒ&ĒuHŸ"Ē&ĒudŸ"Ē&ĒP›ĒąĒuLŸ§ĒąĒudŸ§ĒąĒPÎĒįĒuDŸÚĒįĒudŸÚĒįĒPÆĨĻu´ĻĻt°ž¨Ī¨u´!Š5Šu´ÉĨĻudŸĻĻt`Ÿž¨Ī¨udŸ!Š5ŠudŸÉĨŅĨP!Š/ŠPŅĨĻu@ŸĻĻtŧŸž¨Ī¨u@ŸŅĨĻ0Ÿž¨Ī¨0ŸüĨĻuŧŸĻĻt¸Ÿž¨Ī¨uŧŸĻĻudŸĻĻt`Ÿž¨Ī¨udŸĻ ĻPž¨Į¨P&Ē5Ēu@Ÿ5ĒPĒuŧŸ;ĒBĒuģŸBĒFĒRFĒPĒuģŸ;ĒFĒPRĒ\Ēu`ŸXĒ\ĒudŸXĒ\ĒPYĢ€ĢP€Ģ…Ģr…Ģ“ĢPĄŦŗŦPdĢ€ĢP€Ģ…ĢrĄŦŗŦP”ĢŠŦ+ŸŊ­ņ­+ŸŽOŽ+Ÿ”ĢŠŦVŊ­ņ­VŽOŽV”ĢĻĢv#ŸĻĢĢĢPąĢŠŦuŊ­Ũ­uŽOŽuąĢŠŦVŊ­Ũ­VŽOŽV´ĢŠŦuŊ­Ũ­uŽOŽu´ĢÛĢWŽŽWČ̊ŦuTŊ­Ũ­uTŽOŽuTČĢÛĢWŽŽWŪ̊ŦuTŊ­Ũ­uT5ŽOŽuTá̊Ŧu`ŸŊ­Ũ­u`Ÿ5ŽOŽu`ŸáĢéĢPÍ­×­PŽ5ŽudŸ#Ž.Žu`Ÿ.Ž2ŽR2Ž5Žu`Ÿ#Ž2ŽPé̊Ŧ´ŸŊ­Í­´Ÿ5ŽOŽ´Ÿé̊Ŧu\ŸŊ­Í­u\Ÿ5ŽOŽu\ŸéĢûĢu\#ŸûĢŦP ŦŠŦ5ŸŊ­Í­5Ÿ5ŽOŽ5Ÿ ŦŠŦu\ŸŊ­Í­u\Ÿ5ŽOŽu\Ÿ ŦŦu\#ŸŦŦPŦŠŦō0qŊ­Í­ō0q5ŽOŽō0qŦŠŦu\ŸŊ­Í­u\Ÿ5ŽOŽu\ŸŦŠŦu Ŋ­Í­u 5ŽOŽu Ŧ!Ŧu\#Ÿ)Ŧ/ŦpŸ/Ŧ4ŦP>ŦŠŦBŸŊ­Í­BŸ5ŽOŽBŸ>ŦGŦu\#ŸGŦLŦPoŦŠŦu`ŸŊ­Í­u`ŸrŦŠŦudŸŊ­Í­udŸrŦzŦPŊ­Į­Pß­ņ­u\Ÿ8ŽOŽu`Ÿ>ŽOŽudŸ>ŽIŽPŒŦ Ŧu\Ÿ ŦĄŦ‘TŸ´ŦŊ­+Ÿņ­Ž+ŸOŽmŽ+Ÿ´ŦŊ­Vņ­ŽVOŽmŽV´ŦÆŦv#ŸÆŦËŦPŅŦŊ­uņ­ ŽuSŽmŽuŅŦŊ­Vņ­ ŽVSŽmŽVÔŦŊ­uņ­ ŽuSŽmŽuÔŦûŦWSŽUŽWčŦŊ­uTņ­ ŽuTSŽmŽuTčŦûŦWSŽUŽWūŦŊ­uTņ­ ŽuT­Ŋ­u`Ÿņ­ Žu`Ÿ­ ­PĒ­ˇ­P[ŽfŽu`ŸfŽjŽRjŽmŽu`Ÿ[ŽjŽP ­Ē­´Ÿņ­ Ž´Ÿ ­Ē­u\Ÿņ­ Žu\Ÿ ­­u\#Ÿ­ ­P*­Ē­IŸņ­ ŽIŸ*­Ē­u\Ÿņ­ Žu\Ÿ*­3­u\#Ÿ3­8­P;­Ē­ō0qņ­ Žō0q;­Ē­u\Ÿņ­ Žu\ŸS­Ē­UŸņ­ ŽUŸS­\­u\#Ÿ\­a­P„­Ē­u`Ÿ‡­Ē­udŸ‡­‹­P ­§­Pô­ Žu`Ÿú­ ŽudŸú­ŽP ŽŽu\Ÿ”ŽŽPŽ¯W¯5¯W5¯;¯P;¯A¯WC¯c¯W‡ŽōŽVōޝu¯¯t¯5¯u5¯@¯V@¯B¯uB¯C¯tC¯M¯uM¯O¯VO¯P¯uŠŽ5¯čŸC¯c¯čŸŠŽ¯uT¯¯tP¯5¯uTC¯P¯uTP¯c¯udŸŠŽģŽuT#ŸģŽĀŽPÁŽ5¯ōĸ|C¯M¯ōĸ|ÁޝuT¯¯tP¯5¯uTC¯M¯uTÁŽōŽVōޝu¯¯t¯5¯uC¯M¯uÁŽČŽuT#ŸĖŽÔŽrŸÔŽŲŽPđޝuT¯¯tP¯5¯uTC¯M¯uTđŽ5¯0ŸC¯M¯0Ÿ§¯¨¯P¨¯°W° °W˙°˙ąWg˛Î˛W¸¯ž¯Pž¯°V°j°V˙°ŊąVg˛p˛Vąg˛8Ÿbŗoŗ8ŸŅŗ)´8Ÿąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uT´)´udŸ%ąg˛Ô ŸbŗoŗÔ ŸŅŗ´Ô Ÿ%ąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uT@ąg˛‡Ÿbŗoŗ‡ŸŅŗ´‡Ÿ@ąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uTUąg˛Á ŸbŗoŗÁ ŸŅŗ´Á ŸUąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uTjąg˛‹Ÿbŗoŗ‹ŸŅŗ´‹Ÿjąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uT‚ąg˛Ô ŸbŗoŗÔ ŸŅŗ´Ô Ÿ‚ąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uTąg˛tŸbŗoŗtŸŅŗ´tŸąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uTĢąņąō:ņąg˛ō)bŗoŗō)Ņŗ´ō)Ģąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uTŊąg˛ŪŸbŗoŗŪŸŅŗ´ŪŸŊąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uTĖąg˛Á ŸbŗoŗÁ ŸŅŗ´Á ŸĖąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uTāąg˛tŸbŗoŗtŸŅŗ´tŸāąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uTņąg˛ō)bŗoŗō)Ņŗ´ō)ņąg˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uT˛g˛ŸbŗoŗŸŅŗ´Ÿ˛g˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uT!˛g˛uTbŗoŗuTŅŗęŗuTęŗûŗudŸûŗ´uTC˛g˛uTbŗoŗuTF˛g˛u\Ÿbŗoŗu\ŸF˛R˛PbŗiŗPĶŗéŗudŸŲŗäŗu\ŸäŗčŗRčŗéŗu\ŸŲŗčŗPéŗûŗu`Ÿ´´u`Ÿ´)´udŸx˛Uŗ ŸoŗŅŗ Ÿx˛UŗVoŗ{ŗV{ŗ’ŗuT’ŗŖŗudŸŖŗĨŗVĨŗ§ŗuT§ŗŠŗVŠŗģŗuTģŗŊŗVŊŗžŗuTžŗŅŗudŸ•˛UŗÁ ŸoŗģŗÁ Ÿ•˛UŗVoŗ{ŗV{ŗ’ŗuT’ŗŖŗudŸŖŗĨŗVĨŗ§ŗuT§ŗŠŗVŠŗģŗuT¤˛UŗiŸoŗģŗiŸ¤˛UŗVoŗ{ŗV{ŗ’ŗuT’ŗŖŗudŸŖŗĨŗVĨŗ§ŗuT§ŗŠŗVŠŗģŗuTŧ˛Uŗō)oŗģŗō)ŧ˛UŗVoŗ{ŗV{ŗ’ŗuT’ŗŖŗudŸŖŗĨŗVĨŗ§ŗuT§ŗŠŗVŠŗģŗuTβUŗmŸoŗģŗmŸÎ˛UŗVoŗ{ŗV{ŗ’ŗuT’ŗŖŗudŸŖŗĨŗVĨŗ§ŗuT§ŗŠŗVŠŗģŗuTã˛UŗÔ ŸoŗģŗÔ Ÿã˛UŗVoŗ{ŗV{ŗ’ŗuT’ŗŖŗudŸŖŗĨŗVĨŗ§ŗuT§ŗŠŗVŠŗģŗuTø˛Uŗ~Ÿoŗģŗ~Ÿø˛UŗVoŗ{ŗV{ŗ’ŗuT’ŗŖŗudŸŖŗĨŗVĨŗ§ŗuT§ŗŠŗVŠŗģŗuTŗUŗVoŗ{ŗV{ŗ’ŗuT’ŗŖŗudŸŖŗĨŗVĨŗ§ŗuT§ŗŠŗVŠŗģŗuT5ŗUŗVoŗyŗV8ŗUŗu`Ÿoŗyŗu`Ÿ8ŗ@ŗPoŗvŗP{ŗ‘ŗudŸŗŒŗu`ŸŒŗŗRŗ‘ŗu`ŸŗŗP‘ŗŖŗu\ŸŠŗģŗu\ŸŊŗŅŗudŸ°ō° ŸUŗbŗ Ÿ)´´ Ÿ°Š°Wаō°VUŗbŗV)´+´V+´B´uTB´S´udŸS´U´VU´W´uTW´Y´VY´n´uTn´´udŸ1°ō°Ô ŸUŗbŗÔ Ÿ)´k´Ô Ÿ1°Š°Wаō°VUŗbŗV)´+´V+´B´uTB´S´udŸS´U´VU´W´uTW´Y´VY´k´uT@°ō°iŸUŗbŗiŸ)´k´iŸ@°Š°Wаō°VUŗbŗV)´+´V+´B´uTB´S´udŸS´U´VU´W´uTW´Y´VY´k´uTX°ō°ō:Uŗbŗō:)´k´ō:X°Š°Wаō°VUŗbŗV)´+´V+´B´uTB´S´udŸS´U´VU´W´uTW´Y´VY´k´uTj°ō°mŸUŗbŗmŸ)´k´mŸj°Š°Wаō°VUŗbŗV)´+´V+´B´uTB´S´udŸS´U´VU´W´uTW´Y´VY´k´uT°ō°Á ŸUŗbŗÁ Ÿ)´k´Á Ÿ°Š°Wаō°VUŗbŗV)´+´V+´B´uTB´S´udŸS´U´VU´W´uTW´Y´VY´k´uT”°ō°~ŸUŗbŗ~Ÿ)´k´~Ÿ”°Š°Wаō°VUŗbŗV)´+´V+´B´uTB´S´udŸS´U´VU´W´uTW´Y´VY´k´uTą°ō°VUŗbŗV)´+´V+´B´uTB´S´udŸS´U´VU´W´uTW´Y´VY´k´uTͰō°VUŗbŗVÖ°ō°u`ŸUŗbŗu`ŸÖ°â°PUŗ\ŗP+´A´udŸ1´<´u`Ÿ<´@´R@´A´u`Ÿ1´@´PA´S´uXŸY´k´uXŸÖ´ú´WĐĩîĩW%ļ+ļuT%ļQļÁ ŸFĩIĩPIĩUĩRVĩĪĩudŸĪĩĐĩt`ŸQļ´ļudŸlĩxĩPxĩ|ĩRœĩÍĩVÍĩĪĩu`ŸĪĩĐĩt\ŸQļuļVŸĩĪĩu_ŸĪĩĐĩt[ŸQļuļu_ŸŸĩ§ĩPdļoļP§ĩĪĩudŸĪĩĐĩt`ŸQļdļudŸ­ĩĪĩu`ŸĪĩĐĩt\ŸQļdļu`Ÿ­ĩĩĩPQļ^ļP}ļ˜ļudŸƒļŠļu_ŸŠļŽļRŽļ˜ļu_ŸƒļŽļPĻļ­ļu_Ÿ­ļąļRąļ´ļu_ŸĻļąļPéļōļPōWƒˇˇPˇ’ˇW”ˇÆˇWūŌŸ”ˇÆˇŌŸūuT‚ˇƒˇtP”ˇŗˇuTŗˇÆˇudŸūļˇuT#ŸˇˇPˇƒˇō“‘”ˇ°ˇō“‘ˇ‚ˇuT‚ˇƒˇtP”ˇ°ˇuTˇ7ˇVˇ%ˇuT#Ÿ-ˇ1ˇpŸ1ˇ6ˇP”ˇ°ˇudŸOˇ‚ˇudŸ‚ˇƒˇt`ŸOˇƒˇ0ŸĐˇôˇRôˇY¸VY¸Đ¸ķRŸĐ¸ë¸Vë¸5šķRŸ5š:šV:šLšķRŸõˇĪ¸uTĪ¸Đ¸‘Lиũ¸uTũ¸ū¸‘Lū¸LšuTõˇ¸uT#Ÿ¸ ¸P¸5šō˓¸Ī¸uTĪ¸Đ¸‘Lиũ¸uTũ¸ū¸‘Lū¸5šuTиë¸udŸ;¸Ī¸udŸĪ¸Đ¸‘\Ÿë¸ũ¸udŸũ¸ū¸‘\Ÿū¸5šudŸW¸c¸0Ÿc¸˜¸VW¸˜¸u`Ÿc¸l¸pv"l¸t¸P{¸˜¸udŸ„¸‰¸P„¸‰¸R§¸Ī¸udŸĪ¸Đ¸‘\Ÿë¸ũ¸udŸũ¸ū¸‘\Ÿē¸Ī¸u`ŸĪ¸Đ¸‘XŸë¸ũ¸u`Ÿũ¸ū¸‘XŸŊ¸Ī¸udŸĪ¸Đ¸‘\Ÿë¸ũ¸udŸũ¸ū¸‘\ŸŊ¸Č¸PȏΏu`<ŸĪ¸Đ¸‘X<Ÿë¸ō¸Pššu`Ÿššu_ŸššRššu_ŸššP$š3šudŸ~š—šPąšŧšPrš}š‘l™šąš‘lŸžšâš‘lŸ šąš‘kŸÁšÔš‘kŸÔšØšRØšâš‘kŸ š­šPÁšØšPē$ēP$ē)ēV ēē‘l,ēDē‘kŸDēHēRHēQē‘kŸ,ē9ēP9ē<ē‘l<Ÿ<ēHēP‘ēšēPšēōēWéģøģPeŧiŧWē‰ēuTžēIģįŸSģÆģįŸøģ#ŧįŸ>ŧaŧįŸeŧ~ŧįŸžēIģuDSģÆģuDøģŧuDŧ#ŧu\Ÿ>ŧ_ŧuD_ŧaŧu\ŸeŧfŧuDfŧ~ŧu\ŸžēÄēqŸÄēÉēPĶēIģuTŸSģÆģuTŸøģ#ŧuTŸ>ŧaŧuTŸĶēIģuDSģÆģuDøģŧuDŧ#ŧu\Ÿ>ŧ_ŧuD_ŧaŧu\ŸĶēÚēqŸÚēßēPøēIģuDSģÆģuDøģŧuDŧ#ŧu\Ÿ>ŧ_ŧuD_ŧaŧu\ŸøēIģ0ŸSģÆģ0Ÿøģ#ŧ0Ÿ>ŧaŧ0Ÿ;ģIģuTŸĖģ×ģuTŸAģIģudŸĪģ×ģudŸAģNģPĪģŪģPoģÆģōUšøģ#ŧōUš>ŧaŧōUšoģŧģWŧģÆģu`Ÿøģ ŧW ŧ#ŧu`Ÿ>ŧaŧWŖģÆģudŸøģ ŧudŸĻģÆģu\Ÿøģ ŧu\ŸĻģĒģPøģŧPĒģÆģu`Ÿŧ#ŧu`Ÿ#ŧ>ŧuTŸ)ŧ0ŧuSŸ0ŧ4ŧR4ŧ>ŧuSŸ)ŧ4ŧPAŧaŧudŸMŧaŧu\ŸMŧXŧPŧŧëŧVëŧíŧudŸíŧîŧt`Ÿŧŧîŧ0Ÿ3ŊŊu ]žĸžu ´žĖžu 3ŊFžu@FžIžtŧIžĶžu@Ķžķžu`Ÿķžŋu@>ŊŊu ]žĸžu ´žĖžu >ŊËŊWËŊFžuTŸFžIžtPŸIžĸžWĸž´žuTŸ´žßžWķžŋWAŊŊu ]žĸžu ´žĖžu AŊ}ŊV]žmžV´žļžV[ŊFžuŧFžIžt¸IžŌžuŧķž ŋuŧ[Ŋ}ŊV]žmžV´žļžVkŊFžuŧFžIžt¸Iž´žuŧķž ŋuŧnŊFžu\ŸFžIžtXŸIž´žu\Ÿķž ŋu\ŸnŊzŊP]žgžPļžĖžuXŸŧžĮžu\ŸĮžËžRËžĖžu\ŸŧžËžPzŊFžuTŸFžIžtPŸIž]žuTŸmž´žuTŸķž ŋuTŸzŊFžu`ŸFžIžt\ŸIž]žu`Ÿmž´žu`Ÿķž ŋu`Ÿ˜ŊDžVDžFžu\ŸFžIžtXŸIž]žVĸž´žVķžõžVõž ŋu\Ÿ›ŊŖŊPŖŊFžuDFžIžt@Iž]žuDĸž´žuDķž ŋuD˜ŊœŊuDŽŊ˛ŊtšŊDžVDžFžu\ŸFžIžtXŸIž]žVĸž´žVŧŊFžuXŸFžIžtTŸIž]žuXŸĸž´žuXŸŧŊČŊPIžWžP‚ž‘žP‘ž’žt’ž™žtõž ŋu\Ÿûž ŋuXŸûž ŋPČŊFžuTŸFžIžtPŸĸž´žuTŸČŊIž0Ÿĸž´ž0ŸŌžßžuTŸžFžu`ŸFžIžt\Ÿĸž´žu`ŸžFžudŸFžIžt`Ÿĸž´žudŸžIž0Ÿĸž´ž0Ÿ#ž<žWĸž´žW(ž<žu\Ÿĸž´žu\Ÿ(ž0žPĸžŽžPßžķžu`ŸßžķžudŸLŋyÁuDyÁ|Át@|ÁūÁuDūÁÂuTŸÂÂuDÂ&ÂuTŸ&Â?ÂuD?ÂOÂuTŸOÂSÂuDLŋ^ŋuD#Ÿ^ŋcŋPgŋíŋō§íŋģÁō §ģÁÛÁō§ÛÁüÁō §ÂSÂō §gŋyÁuDyÁ|Át@|ÁüÁuDÂÂuDÂ&ÂuTŸ&Â?ÂuD?ÂOÂuTŸOÂSÂuDoŋ‰ŋWoŋwŋuD#ŸŋƒŋpŸƒŋˆŋPģÁÛÁuTŸŒŋ–ĀWœÁģÁWŒŋŋuŸŋŌŋߟŋŌŋuTŸŸŋĒŋuT#ŸŽŋąŋpŸąŋļŋPŊŋŌŋuTŸŊŋÂŋuT#ŸÆŋÉŋpŸÉŋÎŋPŌŋģÁĪŸÛÁüÁĪŸÂSÂĪŸŌŋyÁuTŸyÁ|ÁtPŸ|ÁģÁuTŸÛÁüÁuTŸÂSÂuTŸŌŋŨŋuT#ŸáŋäŋpŸäŋéŋPíŋģÁō §ÛÁüÁō §ÂSÂō §íŋyÁuTŸyÁ|ÁtPŸ|ÁģÁuTŸÛÁüÁuTŸÂSÂuTŸõŋĀVõŋųŋuT#ŸĀ ĀpŸ ĀĀPœÁģÁuTŸĀ3ĀũŸĀ3ĀuTŸĀ#ĀuT#Ÿ'Ā*ĀpŸ*Ā/ĀP3Ā|ĀVFĀyĀŸFĀyĀuTŸFĀQĀuT#ŸUĀXĀpŸXĀ]ĀPdĀyĀuTŸdĀiĀuT#ŸmĀpĀpŸpĀuĀP…ĀyÁuTŸyÁ|ÁtPŸ|ÁœÁuTŸÛÁüÁuTŸÂSÂuTŸ…Ā#ÁV#ÁyÁu`ŸyÁ|Át\Ÿ|ÁœÁVÛÁíÁVíÁüÁu`ŸÂÂVÂ&Âu`Ÿ&Â(ÂV(ÂOÂu`ŸOÂQÂVQÂSÂu`Ÿ–ĀyÁuTŸyÁ|ÁtPŸ|ÁœÁuTŸÛÁüÁuTŸ&ÂSÂuTŸ–ĀyÁu@yÁ|Átŧ|ÁœÁu@ÛÁüÁu@&Â?Âu@?ÂOÂuXŸOÂSÂu@–ĀŖĀuŧ­ĀxÁWxÁyÁu\ŸyÁ|ÁtXŸ|ÁœÁWÛÁüÁW&Â>ÂW­ĀyÁuŧyÁ|Át¸|ÁœÁuŧÛÁüÁuŧ&Â>ÂuŧŋĀxÁWxÁyÁu\ŸyÁ|ÁtXŸ|ÁœÁWÛÁüÁWÂĀyÁuSŸyÁ|ÁtOŸ|ÁœÁuSŸÛÁüÁuSŸÂĀÎĀPÛÁįÁP(Â>Âu\Ÿ.Â9ÂuSŸ9Â=ÂR=Â>ÂuSŸ.Â=ÂPāĀyÁuXŸyÁ|ÁtTŸ|ÁœÁuXŸíÁüÁuXŸāœÁ0ŸíÁüÁ0Ÿ>ÂOÂuXŸ ÁyÁu`ŸyÁ|Át\ŸíÁüÁu`Ÿ ÁyÁudŸyÁ|Át`ŸíÁüÁudŸ Á|Á0ŸíÁüÁ0Ÿ'ÁDÁVíÁüÁV,ÁDÁu\ŸíÁüÁu\Ÿ,Á8ÁPíÁöÁPDÁyÁuTŸyÁ|ÁtPŸDÁ|Á0ŸūÁÂuTŸÂ&Âu`ŸÂÂudŸ ÂP Â&ÂudŸĐÂíÂWíÂîÂu`ŸîÂņÂt\ŸÃ*ÃWĶÂîÂu_ŸîÂņÂt[ŸÃ*Ãu_ŸĶÂÚÂPÃ'ÃPÚÂîÂudŸîÂņÂt`ŸÃÃudŸāÂîÂu`ŸîÂņÂt\ŸÃÃu`ŸāÂåÂPÃÃP5ÃQÃudŸ;ÃCÃu_ŸCÃGÃRGÃQÃu_Ÿ;ÃGÃP_ÃiÃu_ŸiÃmÃRmÃpÃu_Ÿ_ÃmÃPāÃũÃWũÃūÃu`ŸūÃÄt\Ÿ Ä:ÄWãÃūÃu_ŸūÃÄt[Ÿ Ä:Äu_ŸãÃęÃP)Ä7ÄPęÃūÃudŸūÃÄt`Ÿ Ä)ÄudŸđÃūÃu`ŸūÃÄt\Ÿ Ä)Äu`ŸđÃõÃP Ä&ÄPEÄaÄudŸKÄSÄu_ŸSÄWÄRWÄaÄu_ŸKÄWÄPoÄyÄu_ŸyÄ}ÄR}ĀÄu_ŸoÄ}ÄPđÄ ÅW ÅÅu`ŸÅÅt\Ÿ0ÅJÅWķÄÅu_ŸÅÅt[Ÿ0ÅJÅu_ŸķÄúÄP9ÅGÅPúÄÅudŸÅÅt`Ÿ0Å9ÅudŸÅÅu`ŸÅÅt\Ÿ0Å9Åu`ŸÅÅP0Å6ÅPUÅqÅudŸ[ÅcÅu_ŸcÅgÅRgÅqÅu_Ÿ[ÅgÅPʼnÅu_Ÿ‰ÅÅRÅÅu_ŸōÅPĒÅ´År” ŸĒÅÆu‚ÆēÆušÅÆu#Ÿ‚ÆēÆu#ŸšÅŌÅrŸŌÅÆu #Ÿ‚ÆēÆu #ŸĮÅÎÅrĮÅÆu‚ÆēÆuŲÅiÆWuÆņÆWĮĮWŲÅåÅw#ŸåÅéÅPéÅđÅt÷ÅiÆWuÆÜÆW÷ÅÆu‚ÆēÆuÆiÆudŸuƂÆudŸēÆÜÆudŸÆÆPÆiÆuTuƂÆuTēÆŊÆuT3ÆiÆudŸuƂÆudŸ6ÆiÆu_ŸuƂÆu_Ÿ6Æ>ÆPuÆÆP ÆŠÆPŠÆĒÆtĒÆąÆtŊÆÜÆudŸÃÆÎÆu_ŸÎÆŌÆRŌÆÜÆu_ŸÃÆŌÆP>ÆiÆu`Ÿ>ÆiÆ0ŸäÆņÆu`ŸQĮiĮ[õĘË[HĮJĮõ %õ %ŸjĮõĘŸË>ĖŸjĮŠĮVŠĮōĘu`ŸōĘõĘt\ŸË#Ėu`Ÿ#Ė'ĖV'Ė>Ėu`ŸyĮõĘŸË$ËŸ9Ë7ĖŸyĮœĮWœĮōĘu¨ŸōĘõĘt¤ŸË$Ëu¨Ÿ9Ë#Ėu¨Ÿ#Ė7ĖWyĮ‚Įw#Ÿ‚Į‡ĮP“ĮœĮWœĮōĘu¨ŸōĘõĘt¤ŸË$Ëu¨Ÿ9Ë#Ėu¨Ÿ'Ė7Ėu¨ŸŠĮõĘڟË$Ëڟ9Ë#ĖڟŠĮŦĮPŦĮ÷ĮV ĖĖVĀĮõĘڟË$Ëڟ9Ë#ĖڟĀĮũĮu¤ũĮōĘuŦŸōĘõĘt¨ŸË$ËuŦŸ9Ë ĖuŦŸ ĖĖu¤Ė#ĖuŦŸĀĮÉĮu¤#ŸÉĮÎĮPÜĮũĮu¤ũĮōĘuŦŸōĘõĘt¨ŸË$ËuŦŸ9Ë ĖuŦŸĖ#ĖuŦŸ÷ĮõĘ2ŸË$Ë2Ÿ9Ë Ė2Ÿ÷ĮúĮPúĮŊČVËËĪËVáËåËV÷ËųËVČõĘ2ŸË$Ë2Ÿ9Ë Ė2ŸČ:Ču¤:ČōĘu°ŸōĘõĘtŦŸË$Ëu°Ÿ9Ë÷Ëu°Ÿ÷ËúËu¤úË Ėu°ŸČČu¤#ŸČČP*Č:Ču¤:ČōĘu°ŸōĘõĘtŦŸË$Ëu°Ÿ9Ë÷Ëu°ŸųË Ėu°Ÿ4ČõĘōŽŋË$ËōŽŋ9Ë÷ËōŽŋ4ČŊČVËËĪËVáËåËVHČtČu¤tČōĘu´ŸōĘõĘt°ŸË$Ëu´Ÿ9ËáËu´ŸáËâËu¤âË÷Ëu´ŸHČĩČu˜ËËĖËu˜áËâËu˜HČQČpŸQČVČPdČtČu¤tČōĘu´ŸōĘõĘt°ŸË$Ëu´Ÿ9ËáËu´ŸåË÷Ëu´ŸnČõĘ7ŸË$Ë7Ÿ9ËáË7ŸnČŊČVËËĪËV…ČõĘ7ŸË$Ë7Ÿ9ËáË7Ÿ…ČĀČu¤ĀČōĘu¸ŸōĘõĘt´ŸË$Ëu¸Ÿ9ËËËu¸ŸËËĖËu¤ĖËáËu¸Ÿ…ČŽČu¤#ŸŽČ“ČPĄČĀČu¤ĀČōĘu¸ŸōĘõĘt´ŸË$Ëu¸Ÿ9ËËËu¸ŸĪËáËu¸ŸĀČõĘHŸË$ËHŸ9ËËËHŸĀČĮČPĮČÉu¤ĩ˸Ëu¤ŅČõĘHŸË$ËHŸ9ËËËHŸŅČÉVÉōĘuŧŸōĘõĘt¸ŸË$ËuŧŸ9ËĩËuŧŸĩËžËVžËÂËtÂËËËuŧŸŅČÚČv#ŸÚČßČPíČÉVÉōĘuŧŸōĘõĘt¸ŸË$ËuŧŸ9ËĩËuŧŸˇËËËuŧŸÉõĘQŸË$ËQŸ9ËĩËQŸÉ ÉP É´ÉVˁËVË”ËVĄËŖËVÉõĘQŸË$ËQŸ9ËĩËQŸÉ>ÉW>ÉōĘu@ŸōĘõĘtŧŸË$Ëu@Ÿ9ËĄËu@ŸĄËĩËWÉ"Éw#Ÿ"É'ÉP3É>ÉW>ÉōĘu@ŸōĘõĘtŧŸË$Ëu@Ÿ9ËĄËu@ŸŖËĩËu@Ÿ;ÉõĘōtŋË$Ëōtŋ9ËĄËōtŋ;É´ÉVˁËVË”ËVLÉqÉWqÉōĘuDŸōĘõĘt@ŸË$ËuDŸ9ːËuDŸËĄËWLÉōĘuōĘõĘtŒËËu9Ë<ËuLËOËu]Ë^ËunËqËu˂ËuË‘ËuLÉUÉpŸUÉZÉPfÉqÉWqÉōĘuDŸōĘõĘt@ŸË$ËuDŸ9ːËuDŸ”ËĄËuDŸnÉõĘ`ŸË$Ë`Ÿ9ːË`ŸnÉ´ÉVˁËV‚ÉõĘ`ŸË$Ë`Ÿ9ːË`Ÿ‚ɲÉW˛ÉōĘuHŸōĘõĘtDŸË$ËuHŸ9ËËuHŸːËW‚É‹Éw#Ÿ‹ÉÉPœÉ˛ÉW˛ÉōĘuHŸōĘõĘtDŸË$ËuHŸ9ËËuHŸËËuHŸ´ÉõĘQŸË$ËQŸ9ËËQŸ´ÉģÉPģÉZĘVLËNËV]ËaËVnËpËVÂÉõĘQŸË$ËQŸ9ËËQŸÂÉæÉWæÉōĘuLŸōĘõĘtHŸË$ËuLŸ9ËnËuLŸnËËWÂÉĘÉpŸĘÉĪÉPÛÉæÉWæÉōĘuLŸōĘõĘtHŸË$ËuLŸ9ËnËuLŸpËËuLŸãÉõĘō„ŋË$Ëō„ŋ9ËnËō„ŋãÉZĘVLËNËV]ËaËVôÉĘWĘōĘuPŸōĘõĘtLŸË$ËuPŸ9Ë]ËuPŸ]ËnËWôÉōĘuˆōĘõĘt„ËËuˆ9Ë<ËuˆLËOËuˆ]Ë^ËuˆôÉũÉpŸũÉĘPĘĘWĘōĘuPŸōĘõĘtLŸË$ËuPŸ9Ë]ËuPŸaËnËuPŸĘõĘcŸË$ËcŸ9Ë]ËcŸĘZĘVLËNËV*ĘõĘcŸË$ËcŸ9Ë]ËcŸ*Ę\ĘW\ĘōĘuTŸōĘõĘtPŸË$ËuTŸ9ËLËuTŸLË]ËW*Ę3Ęw#Ÿ3Ę8ĘPDĘ\ĘW\ĘōĘuTŸōĘõĘtPŸË$ËuTŸ9ËLËuTŸNË]ËuTŸ\ĘõĘQŸË$ËQŸ9ËLËQŸ\ĘcĘPcĘņĘWËËW9Ë;ËWjĘõĘQŸË$ËQŸ9ËLËQŸjʎĘVŽĘōĘuXŸōĘõĘtTŸË$ËuXŸ9ËBËVBËFËtFËLËuXŸjĘrĘpŸrĘwĘPƒĘŽĘVŽĘōĘuXŸōĘõĘtTŸË$ËuXŸ;ËLËuXŸ‹ĘõĘō”ŋË$Ëō”ŋ‹ĘņĘWËËWœĘŋĘVŋĘōĘu\ŸōĘõĘtXŸËËVË Ët Ë$Ëu\ŸœĘōĘu€ōĘõĘtü~ËËu€œĘĨĘpŸĨĘĒĘPļĘŋĘVŋĘōĘu\ŸōĘõĘtXŸË$Ëu\ŸŨĘōĘu`ŸōĘõĘt\ŸŨĘäĘPäĘōĘudŸōĘõĘt`Ÿ$Ë9Ëu`Ÿ$Ë)ËudŸ)Ë0ËP0Ë9ËudŸ3ōôŅ;í ōôŅ3ōįŅ;í ōįŅQwōįŅUíōôŅ;QōôŅwĖōôŅwĄōôŅ…íōįŅ;QōįŅĄĖōįŅ…íōôŅ;QōôŅĄĖōôҧŲV“W“;QV“W“ĄĀV“W“ÉŨP“R“;JP“R“…§ōįҧíōôŅ;QōôŅĄĀōôŅĀĖōįҧíōôŅ;QōôŅĄĀōôŅíHŸĖí HŸíöuđ|ŸöPŦWŦu|tŒ|Ė u|  W ! u|! Ą uđ|ŸĄ ø u|ø uđ|Ÿ u|  uđ|Ÿ u| 3 uđ|Ÿ3 í u|íu¤}ŸPŲu°|Ųíuā~ŸíúPúuĀ|tŧ|Ė uĀ| u°| ! uĀ|! ‹ uā~ŸĄ ä u°|ä ø uĀ|ø uā~Ÿ uĀ|  uā~Ÿ uĀ| 3 uā~Ÿ3 7 u°|> g u°|g í uĀ|bŦWŦu|tŒ|Ė u|  W ! u|! Ą uđ|ŸĄ ø u|ø uđ|Ÿ u|  uđ|Ÿ u| 3 uđ|Ÿ3 í u|ŽáWáuø|Ÿtô|ŸĖ uø|Ÿ W Ą uø|ŸĄ § W§ ŋ uø|Ÿä 3 uø|Ÿ3 5 W5 í uø|ŸĄ ŋ uđ|ŸQHŸĖ HŸ Ą HŸä í HŸQ—uü|Ÿ—¯Q¯įu”|į uü|Ÿ Yu¸~ŸYjRjÂuŒ|Âu¸~Ÿt´~ŸĖ u¸~Ÿ ‹ u¸~Ÿä 3 u¸~Ÿ3 7 u”|> g u”|g ‰ uü|ŸŽ ß uŒ|ß í u¸~Ÿ„—u }Ÿ—¯q$Ÿ¯įu”|#$Ÿį u }Ÿ YuÜ~ŸYjr$ŸjÂuŒ|#$ŸÂuÜ~ŸtØ~ŸĖ uÜ~Ÿ ‹ uÜ~Ÿä 3 uÜ~Ÿ3 7 u”|#$Ÿ> g u”|#$Ÿg ‰ u }ŸŽ ß uŒ|#$Ÿß í uÜ~Ÿŋ ä u¤}ŸšAŸ“Ė AŸ“ Ą AŸ“ä 3 AŸ“7 > AŸ“g í AŸ“šáWáuø|Ÿtô|ŸĖ uø|Ÿ Ą uø|Ÿä 3 uø|Ÿ7 > uø|Ÿg í uø|Ÿšŧ upt" ˆŸŧÂuw<" ˆŸtw upt"ĖŸw} uw<"ĖŸšAŸĖ AŸ Ą AŸä 3 AŸ7 > AŸg í AŸšŧ upt" „ŧ uw<" „tw upt"Čw} uw<"ČÔöuĀ|ÔáWáuø|Ÿtô|ŸĖ uø|Ÿ Ą uø|Ÿä 3 uø|Ÿ7 > uø|Ÿg í uø|ŸŲHŸĖ HŸ ‹ HŸä 3 HŸg í HŸŲßuŦ~ŸßíPírWru”|t|Ė u”| ! u”|! ‹ uŦ~Ÿä ø u”|ø uŦ~Ÿ u”|  uŦ~Ÿ u”| 3 uŦ~Ÿg k Wk í u”|Ųíuā~ŸíúPúuĀ|tŧ|Ė uĀ| ! uĀ|! ‹ uā~Ÿä ø uĀ|ø uā~Ÿ uĀ|  uā~Ÿ uĀ| 3 uā~Ÿg í uĀ|;rWru”|t|Ė u”| ! u”|! ‹ uŦ~Ÿä ø u”|ø uŦ~Ÿ u”|  uŦ~Ÿ u”| 3 uŦ~Ÿg k Wk í u”|ru´~ŸÍWÍu´~Ÿt°~ŸĖ u´~Ÿ ‹ u´~Ÿä 3 u´~Ÿk y Wy ‰ u´~ŸŽ ° W° ˛ u´~Ÿ˛ š Wš ß u´~Ÿß æ Wæ í u´~Ÿm ‰ uŦ~Ÿ HŸĖ HŸ ‹ HŸä 3 HŸŽ í HŸ Yu¸~ŸYjRjÂuŒ|Âu¸~Ÿt´~ŸĖ u¸~Ÿ ‹ u¸~Ÿä 3 u¸~ŸŽ ß uŒ|ß í u¸~Ÿ?YuÜ~ŸYjr$ŸjÂuŒ|#$ŸÂuÜ~ŸtØ~ŸĖ uÜ~Ÿ ‹ uÜ~Ÿä 3 uÜ~ŸŽ ß uŒ|#$Ÿß í uÜ~Ÿ‰ Ž uā~ŸtAŸ“Ė AŸ“ ‹ AŸ“ä 3 AŸ“˛ š AŸ“ß í AŸ“tÍWÍu´~Ÿt°~ŸĖ u´~Ÿ ‹ u´~Ÿä 3 u´~Ÿ˛ š Wß æ Wæ í u´~Ÿtw upt"ĖŸw} uw<"ĖŸtAŸĖ AŸ ‹ AŸä 3 AŸ˛ š AŸß í AŸtw upt"Čw} uw<"ȏŠu¸|ÍWÍu´~Ÿt°~ŸĖ u´~Ÿ ‹ u´~Ÿä 3 u´~Ÿ˛ š Wß æ Wæ í u´~ŸŲjŸĖ jŸ B jŸä 3 jŸŲ'W'u€|tü{Ė u€| ! u€|! B uč|Ÿä ë u€|ë í Wí ø u€|ø uč|Ÿ u€|  uč|Ÿ u€| 3 uč|ŸîjŸĖ jŸ / jŸë 3 jŸîVuØ|ŸtÔ|ŸĖ uØ|Ÿ / uØ|Ÿë ī Vī ÷ uØ|Ÿ÷ ū Vū  t 3 uØ|Ÿîúv#Ÿú˙P VuØ|ŸtÔ|ŸĖ uØ|Ÿ / uØ|Ÿī ÷ uØ|Ÿ 3 uØ|Ÿ÷ uØ|Ÿ'vŸĖ vŸ / vŸī ÷ vŸ 3 vŸ'.P.qWī ņ W8vŸĖ vŸ / vŸī ÷ vŸ 3 vŸ8oVouÜ|ŸtØ|ŸĖ uÜ|Ÿ / uÜ|Ÿī ķ Vķ ÷ uÜ|Ÿ  V  t 3 uÜ|Ÿ8Dv#ŸDIPUoVouÜ|ŸtØ|ŸĖ uÜ|Ÿ / uÜ|Ÿķ ÷ uÜ|Ÿ 3 uÜ|Ÿ  uÜ|Ÿq}ŸĖ }Ÿ / }Ÿķ ÷ }Ÿ 3 }ŸqxPxĖWķ õ W‚}ŸĖ }Ÿ / }Ÿķ ÷ }Ÿ 3 }Ÿ‚¨V¨uā|ŸtÜ|ŸĖ uā|Ÿ / uā|Ÿķ ÷ V & V& * t* 3 uā|Ÿ‚Žv#ŸŽ“PŸ¨V¨uā|ŸtÜ|ŸĖ uā|Ÿ / uā|Ÿ 3 uā|ŸĖ€ŸĖ €Ÿ / €ŸĖĶPĶ#W  WŨ€ŸĖ €Ÿ / €ŸŨVuä|Ÿtā|ŸĖ uä|Ÿ  V ' V' + t+ / uä|ŸŨév#ŸéîPúVuä|Ÿtā|ŸĖ uä|Ÿ / uä|Ÿ#u€|tü{Ė u€|#*P*uė|Ÿtč|ŸĖ uė|Ÿ4uŒ|tˆ|Ė uŒ|7u€|tü{Ė u€|7CPāęPCuĐ|ŸtĖ|ŸĖāuĐ|Ÿđ uĐ|ŸLuč|Ÿtä|ŸĖāuč|Ÿđ uč|ŸLXPđúPXuŦ~Ÿt¨~ŸĖāuŦ~Ÿ  uŦ~Ÿ…u¸~Ÿt´~ŸĖāu¸~Ÿ  u¸~Ÿ”nuÜ~Ÿnu }Ÿtœ}ŸĖāu }Ÿ  uÜ~Ÿuč|Ÿtä|ŸĖāuč|Ÿ  uč|ŸŠP PŠƒu¸~Ÿƒuü|Ÿtø|ŸĖāu¸~ŸÆuŦ~Ÿt¨~ŸĖāuŦ~Ÿ˙uŦ~Ÿt¨~ŸĖāuŦ~Ÿãu´~Ÿt°~ŸĖāu´~Ÿõuā~Ÿõu¤}Ÿt }ŸĖāuā~Ÿ8uđ|Ÿtė|ŸĖāuđ|Ÿ_uü|Ÿtø|ŸĖāuü|Ÿnu }Ÿtœ}ŸĖāu }ŸwuŦ~Ÿt¨~ŸĖāuŦ~ŸwƒPĖÚPƒuü|Ÿtø|Ÿ uđ|Ÿtė|ŸŊuø|Ÿtô|ŸŲuđ|Ÿtė|Ÿõu¤}Ÿt }Ÿ/ B uč|Ÿ/ 7 uė|Ÿ7 > P> B uė|ŸB ^ uÔ|ŸK Y uĪ|ŸY ] R] ^ uĪ|ŸK ] P^ z uĐ|Ÿg u uĪ|Ÿu y Ry z uĪ|Ÿg y PÜĖ{ÎjŸ›ÎŌÎjŸųÎĪjŸ5ĪhĪjŸlĪpĪjŸÜĖfÎVfÎhÎu`ŸhÎkÎt\ŸkÎ{ÎV›ÎŌÎVųÎũÎVũÎĪu`Ÿ5Ī7ĪV7ĪFĪu`ŸFĪJĪVJĪWĪu`ŸWĪ[ĪV[ĪhĪu`ŸlĪnĪVnĪpĪu`ŸîĖ{ÎjŸ›ÎŌÎjŸųÎĪjŸ5ĪhĪjŸîĖÍWÍhÎuPŸhÎkÎtLŸkÎ{ÎuPŸ›ÎŌÎuPŸųÎĪuPŸ5ĪFĪuPŸFĪWĪWWĪhĪuPŸîĖ÷Ėw#Ÿ÷ĖüĖPÍÍWÍhÎuPŸhÎkÎtLŸkÎ{ÎuPŸ›ÎŌÎuPŸųÎĪuPŸ5ĪFĪuPŸWĪhĪuPŸJĪWĪuPŸ"Í{Î…Ÿ›ÎŌÎ…ŸųÎĪ…Ÿ5ĪFĪ…ŸWĪhĪ…Ÿ"Í)ÍP)ÍkÍu´5Ī8Īu´3Í{Î…Ÿ›ÎŌÎ…ŸųÎĪ…Ÿ5ĪFĪ…ŸWĪhĪ…Ÿ3ÍhÍWhÍhÎuTŸhÎkÎtPŸkÎ{ÎuTŸ›ÎŌÎuTŸųÎĪuTŸ5ĪFĪWWĪhĪuTŸ3Í<Íw#Ÿ<ÍAÍPOÍhÍWhÍhÎuTŸhÎkÎtPŸkÎ{ÎuTŸ›ÎŌÎuTŸųÎĪuTŸWĪhĪuTŸ7ĪFĪuTŸkÍ{ÎŒŸ›ÎŌÎŒŸųÎĪŒŸWĪhĪŒŸkÍrÍPrÍŗÍu´ųÎúÎu´|Í{ÎŒŸ›ÎŌÎŒŸųÎĪŒŸWĪhĪŒŸ|ÍĄÍWĄÍhÎuXŸhÎkÎtTŸkÎ{ÎuXŸ›ÎŌÎuXŸųÎĪWWĪhĪuXŸ|ͅÍw#Ÿ…ÍŠÍP˜ÍĄÍWĄÍhÎuXŸhÎkÎtTŸkÎ{ÎuXŸ›ÎŌÎuXŸWĪhĪuXŸũÎĪuXŸŗÍ{΀Ÿ›ÎŌ΀ŸWĪhĪ€ŸŗÍēÍPēÍ4Îu´kÎyÎu´WĪXĪu´ÄÍ{΀Ÿ›ÎŌ΀ŸWĪhĪ€ŸÄÍgÎWgÎhÎu\ŸhÎkÎtXŸkÎ{ÎW›ÎŌÎWWĪhĪWÄÍÍÍw#ŸÍÍŌÍPāÍgÎWgÎhÎu\ŸhÎkÎtXŸkÎ{ÎW›ÎŌÎW[ĪhĪu\ŸÎfÎVfÎhÎu`ŸhÎkÎt\ŸkÎ{ÎV›ÎŌÎVÎhÎudŸhÎkÎt`ŸkÎ{ÎudŸ›ÎŌÎudŸÎ{Î0Ÿ›ÎŌÎ0Ÿ&Î<ÎQšÎÉÎQÉÎŌÎu°1ÎHÎWšÎŌÎW1Î<ÎPšÎÉÎPHÎhÎuHŸhÎkÎtDŸ›ÎšÎuHŸNÎhÎu`ŸhÎkÎt\Ÿ›ÎšÎu`ŸNÎSÎPŠÎļÎPSÎhÎuLŸhÎkÎtHŸ›ÎŠÎuLŸYÎhÎu`ŸhÎkÎt\Ÿ›ÎŠÎu`ŸYÎ^ÎP›ÎĻÎPŨÎųÎuLŸãÎëÎuGŸëÎīÎRīÎųÎuGŸãÎīÎPĪĪu`ŸĪ ĪudŸ ĪĪPĪĪudŸĪ5ĪuHŸ$Ī.ĪuGŸ.Ī2ĪR2Ī5ĪuGŸ$Ī2ĪP¯Ī`ŅjŸxŅõŅjŸ¯ĪöĪuDöĪ]Ņu`Ÿ]Ņ`Ņt\ŸxŅäŅu`ŸäŅįŅuDįŅõŅu`ŸÁĪ`ŅjŸxҘŅjŸ­ŅĪŅjŸĶŅõŅjŸÁĪķĪWķĪ]ŅuLŸ]Ņ`ŅtHŸxҘŅuLŸ­ŅĪŅuLŸĶŅäŅuLŸäŅõŅWÁĪĮĪqŸĮĪĖĪPÚĪķĪWķĪ]ŅuLŸ]Ņ`ŅtHŸxҘŅuLŸ­ŅĪŅuLŸĶŅäŅuLŸöĪ`Ņ…ŸxҘŅ…Ÿ­ŅĪŅ…ŸĶŅäŅ…ŸöĪũĪPũĪ?ĐuDĶŅÔŅuDĐ`Ņ…ŸxҘŅ…Ÿ­ŅĪŅ…ŸĶŅäŅ…ŸĐ,ĐW,Đ]ŅuPŸ]Ņ`ŅtLŸxҘŅuPŸ­ŅĪŅuPŸĶŅäŅWĐĐw#ŸĐĐP#Đ,ĐW,Đ]ŅuPŸ]Ņ`ŅtLŸxҘŅuPŸ­ŅĪŅuPŸ×ŅäŅuPŸ?Đ`Ņ˜ŸxҘŅ˜Ÿ­ŅĪŅ˜Ÿ?ĐFĐPFЈĐuD­Ņ°ŅuDPĐ`Ņ˜ŸxҘŅ˜Ÿ­ŅĪŅ˜ŸPЅĐW…Đ]ŅuTŸ]Ņ`ŅtPŸxҘŅuTŸ­ŅžŅWžŅĪŅuTŸPĐYĐw#ŸYĐ^ĐPlЅĐW…Đ]ŅuTŸ]Ņ`ŅtPŸxҘŅuTŸžŅĪŅuTŸ¯ŅžŅuTŸˆĐ`ŅĨŸxҘŅĨŸžŅĪŅĨŸˆĐĐPĐŅĐuD‰ŅŠŅuD™Đ`ŅĨŸxҘŅĨŸžŅĪŅĨŸ™ĐžĐWžĐ]ŅuXŸ]Ņ`ŅtTŸx҉ŅuXŸ‰Ņ˜ŅWžŅĪŅuXŸ™ĐĸĐw#ŸĸЧĐPĩĐžĐWžĐ]ŅuXŸ]Ņ`ŅtTŸx҉ŅuXŸžŅĪŅuXŸŅ˜ŅuXŸŅĐ`ŅÕŸx҉ŅÕŸžŅĪŅÕŸŅĐØĐPØĐ4ŅuDžŅŋŅuDâĐ`ŅÕŸx҉ŅÕŸžŅĪŅÕŸâĐ\ŅW\Ņ]Ņu\Ÿ]Ņ`ŅtXŸx҉ŅWžŅĪŅWâĐëĐw#ŸëĐđĐPūĐ\ŅW\Ņ]Ņu\Ÿ]Ņ`ŅtXŸx҉ŅWÂŅĪŅu\ŸŅ]Ņu`Ÿ]Ņ`Ņt\Ÿx҉Ņu`ŸŅ]ŅudŸ]Ņ`Ņt`Ÿx҉ŅudŸŅ`Ņ0Ÿx҉Ņ0Ÿ6Ņ8ŅP8ŅTŅuDx҉ŅuD>ŅTŅWx҉ŅW>ŅFŅPFŅTŅu@<Ÿx҆ŅP†Ņ‰Ņu@<Ÿ˜Ņ­Ņu`Ÿ˜ŅŅudŸŅ¤ŅP¤Ņ­ŅudŸ?ŌđĶjŸԅÔjŸ?Ō†ŌuD†ŌíĶu`ŸíĶđĶt\ŸÔtÔu`ŸtÔwÔuDwԅÔu`ŸQŌđĶjŸÔ(ÔjŸ=Ô_ÔjŸcԅÔjŸQԃŌWƒŌíĶuLŸíĶđĶtHŸÔ(ÔuLŸ=Ô_ÔuLŸcÔtÔuLŸtԅÔWQŌWŌqŸWŌ\ŌPjԃŌWƒŌíĶuLŸíĶđĶtHŸÔ(ÔuLŸ=Ô_ÔuLŸcÔtÔuLŸ†ŌđĶ…ŸÔ(Ô…Ÿ=Ô_Ô…ŸcÔtÔ…Ÿ†ŌŌPŌĪŌuDcÔdÔuD—ŌđĶ…ŸÔ(Ô…Ÿ=Ô_Ô…ŸcÔtÔ…Ÿ—ŌŧŌWŧŌíĶuPŸíĶđĶtLŸÔ(ÔuPŸ=Ô_ÔuPŸcÔtÔW—Ō Ōw#Ÿ ŌĨŌPŗŌŧŌWŧŌíĶuPŸíĶđĶtLŸÔ(ÔuPŸ=Ô_ÔuPŸgÔtÔuPŸĪŌđĶŦŸÔ(ÔŦŸ=Ô_ÔŦŸĪŌÖŌPÖŌĶuD=Ô@ÔuDāŌđĶŦŸÔ(ÔŦŸ=Ô_ÔŦŸāŌĶWĶíĶuTŸíĶđĶtPŸÔ(ÔuTŸ=ÔNÔWNÔ_ÔuTŸāŌéŌw#ŸéŌîŌPüŌĶWĶíĶuTŸíĶđĶtPŸÔ(ÔuTŸNÔ_ÔuTŸ?ÔNÔuTŸĶđĶĨŸÔ(ÔĨŸNÔ_ÔĨŸĶĶPĶaĶuDÔÔuD)ĶđĶĨŸÔ(ÔĨŸNÔ_ÔĨŸ)ĶNĶWNĶíĶuXŸíĶđĶtTŸÔÔuXŸÔ(ÔWNÔ_ÔuXŸ)Ķ2Ķw#Ÿ2Ķ7ĶPEĶNĶWNĶíĶuXŸíĶđĶtTŸÔÔuXŸNÔ_ÔuXŸÔ(ÔuXŸaĶđĶÕŸÔÔÕŸNÔ_ÔÕŸaĶhĶPhĶÄĶuDNÔOÔuDrĶđĶÕŸÔÔÕŸNÔ_ÔÕŸrĶėĶWėĶíĶu\ŸíĶđĶtXŸÔÔWNÔ_ÔWrĶ{Ķw#Ÿ{Ķ€ĶPŽĶėĶWėĶíĶu\ŸíĶđĶtXŸÔÔWRÔ_Ôu\Ÿ§ĶíĶu`ŸíĶđĶt\ŸÔÔu`Ÿ§ĶíĶudŸíĶđĶt`ŸÔÔudŸ§ĶđĶ0ŸÔÔ0ŸÆĶČĶPČĶäĶuDÔÔuDÎĶäĶWÔÔWÎĶÖĶPÖĶäĶu@<ŸÔÔPÔÔu@<Ÿ(Ô=Ôu`Ÿ(Ô-ÔudŸ-Ô4ÔP4Ô=ÔudŸÔÍÔRÍÔ ×ķRŸ ××Rׯ×ķRŸáÔ×0Ÿ0ׯ×0ŸąÔÍÔP ××P××uąÔÍÔQ ××QĮÔÍÔQĮÔÍÔP-Õן0×Jןcׯן-Õ4ÕP4ÕvÕW9×;×W>Õן0×Jןcׯן>ÕdÕVdÕ×uLŸ0×9×uLŸ9×B×VB×F×tF×J×uLŸcׯ×uLŸ>Õ@Õv#ŸGÕJÕpŸJÕOÕP[ÕdÕVdÕ×uLŸ0×9×uLŸcׯ×uLŸ;×J×uLŸ‰Õ×rŸ0×9×rŸcׯ×rŸ‰ÕÕu°ŖÕ×rŸ0×9×rŸcׯ×rŸŖÕĖÕVĖÕ×uPŸ0×9×uPŸcל×uPŸœ×Ĩ×VĨ׊×tŠ×¯×uPŸŖÕŠÕqŸŠÕŽÕPŧÕĖÕVĖÕ×uPŸ0×9×uPŸcל×uPŸáÕ×Ο0×9×Οcל×ΟáÕįÕu°ûÕ×Ο0×9×Οcל×ΟûÕ-ÖV-Ö×uTŸ0×9×uTŸc׉×uTŸ‰×’×V’×–×t–ל×uTŸûÕÖqŸÖÖPÖ-ÖV-Ö×uTŸ0×9×uTŸc׉×uTŸ‹×œ×uTŸ0Öן0×9ןc׉ן0Ö7ÖP7Ö×u°0×9×u°c×d×u°v×y×u°>Öן0×9ןc׉ן>ÖbÖVbÖ×uXŸ0×9×uXŸc×v×uXŸv××V׃×tƒ×‰×uXŸ>ÖFÖpŸFÖKÖPYÖbÖVbÖ×uXŸ0×9×uXŸc×v×uXŸx׉×uXŸ‹Ö×ÕŸ0×9×ÕŸc×v×ÕŸ‹Ö’ÖP’ÖČÖWc×g×W™Ö×ÕŸ0×9×ÕŸc×v×ÕŸ™Ö×V0×9×Vc×l×Vl×p×tp×v×u\Ÿ™ÖĄÖpŸĄÖĻÖP˛Ö×V0×9×Vg×v×u\ŸËÖ×u`Ÿ0×9×u`ŸËÖ×udŸ0×9×udŸËÖ×0Ÿ0×9×0ŸįÖ×W0×9×WėÖ×V0×9×VėÖôÖP0×6×PJ×_×u`ŸJ×O×udŸO×V×PV×_×udŸ°×Æ×‘ Æ×Í×pÍ×ÕבdÕ×ßב °×ŊבŊׯ×pÆ×Į×tĮ×ÕבhÕ×ßבā×ķב ķ×ú×púר‘dØ Ø‘ ā×ęבę×ķ×pķ×ô×tôר‘hØ Ø‘Ø;ØR;ØÛķRŸOØnÚ0ŸÚÛ0ŸØxÚuxÚyÚtyڜÚuŋÚÂÚuŌÚĶÚuåÚęÚuüÚ˙ÚuØxÚuxÚyÚt yڜÚuŋÚÂÚuŌÚĶÚuåÚęÚuüÚ˙Úu›ØnÚŸÚĒÚŸŋÚåÚŸéÚÛŸ›ØĸØPĸØäØWüÚūÚWŦØnÚŸÚĒÚŸŋÚåÚŸéÚÛŸŦØŌØVŌØnÚuLŸÚĒÚuLŸŋÚåÚuLŸéÚüÚuLŸüÚÛVÛ Ût ÛÛuLŸŦظØv#Ÿ¸ØŊØPÉØŌØVŌØnÚuLŸÚĒÚuLŸŋÚåÚuLŸéÚüÚuLŸ÷ØnÚrŸÚĒÚrŸŋÚåÚrŸéÚüÚrŸ÷ØũØu°ŲnÚrŸÚĒÚrŸŋÚåÚrŸéÚüÚrŸŲ:ŲV:ŲnÚuPŸÚĒÚuPŸŋÚåÚuPŸéÚōÚVōÚöÚtöÚüÚuPŸŲŲqŸŲŲP*Ų:ŲV:ŲnÚuPŸÚĒÚuPŸŋÚåÚuPŸíÚüÚuPŸOŲnÚϐÚĒÚΟŋÚåÚΟOŲUŲu°iŲnÚϐÚĒÚΟŋÚåÚΟiŲ›ŲV›ŲnÚuTŸÚĒÚuTŸŋÚČÚVČÚĖÚtĖÚåÚuTŸiŲoŲqŸoŲtŲP‚Ų›ŲV›ŲnÚuTŸÚĒÚuTŸŌÚåÚuTŸÁÚŌÚuTŸžŲnÚŸÚĒÚŸŌÚåÚŸžŲĨŲPĨŲnÚu°ÚœÚu°ŌÚĶÚu°ŦŲnÚŸÚĒÚŸŌÚåÚŸŦŲĐŲVĐŲnÚuXŸÚ™ÚuXŸ™ÚĸÚVĸÚĻÚtĻÚĒÚuXŸŌÚåÚuXŸŦŲ´ŲpŸ´ŲšŲPĮŲĐŲVĐŲnÚuXŸÚ™ÚuXŸŌÚåÚuXŸ›ÚĒÚuXŸųŲnÚÕŸÚ™ÚÕŸŌÚåÚÕŸųŲÚPÚ6ÚWŌÚÖÚWÚnÚÕŸÚ™ÚÕŸŌÚåÚÕŸÚnÚVÚ™ÚVŌÚÛÚVÛÚßÚtßÚåÚu\ŸÚÚpŸÚÚP ÚnÚVÚ™ÚVÖÚåÚu\Ÿ9ÚnÚu`ŸÚ™Úu`Ÿ9ÚnÚudŸÚ™ÚudŸ9ÚnÚ0ŸÚ™Ú0ŸUÚnÚWÚ™ÚWZÚnÚVÚ™ÚVZÚbÚPÚ–ÚPĒÚŋÚu`ŸĒÚ¯ÚudŸ¯ÚļÚPļÚŋÚudŸ)ĩō˛Ķ- ō˛)ĩōĨĶ- ōĨ@ō˛čō˛WōĨWō˛hQx„P„u@K$!uu0*(ŸWhōĨhō˛hō˛ĩHŸ- HŸ–uđ|Ÿ–§P§JWJ˛u |˛ĩtœ|Tu |T[W[au |aáuđ|Ÿá8 u |8 K uđ|ŸK L u |L _ uđ|Ÿ_ ` u |` s uđ|Ÿs - u |§u¤}Ÿ§˛P˛wuĀ|w‹uā~Ÿ‹˜P˜˛uÄ|˛ĩtĀ|TuÄ|T`uĀ|`auÄ|aËuā~Ÿá$ uĀ|$ 8 uÄ|8 K uā~ŸK L uÄ|L _ uā~Ÿ_ ` uÄ|` s uā~Ÿs w uĀ|~ § uĀ|§ - uÄ|JWJ˛u |˛ĩtœ|Tu |T[W[au |aáuđ|Ÿá8 u |8 K uđ|ŸK L u |L _ uđ|Ÿ_ ` u |` s uđ|Ÿs - u |JSuø|ŸSW˛uø|Ÿ˛ĩtô|ŸTuø|Ÿ[`W`áuø|ŸáįWį˙uø|Ÿ$ s uø|Ÿs u Wu - uø|Ÿá˙uđ|ŸõĩHŸTHŸ`áHŸ$ - HŸõ1uü|Ÿ1SQS”uÄ|”˛uü|Ÿ˛ņu¸~Ÿņ Q Cuœ|C˛u¸~Ÿ˛ĩt´~ŸTu¸~Ÿ`Ëu¸~Ÿ$ s u¸~Ÿs w uÄ|~ § uÄ|§ É uü|Ÿî ō uœ|ō ų u¸~Ÿų  uœ| - u¸~Ÿ(1u }Ÿ1Sq$ŸS”uÄ|#$Ÿ”˛u }Ÿ˛ņuÜ~Ÿņ q$Ÿ Cuœ|#$ŸC˛uÜ~Ÿ˛ĩtØ~ŸTuÜ~Ÿ`ËuÜ~Ÿ$ s uÜ~Ÿs w uÄ|#$Ÿ~ § uÄ|#$Ÿ§ É u }Ÿî ō uœ|#$Ÿō ų uÜ~Ÿų  uœ|#$Ÿ - uÜ~Ÿ˙$ u¤}ŸTĩ8Ÿ“T8Ÿ“`á8Ÿ“$ s 8Ÿ“w ~ 8Ÿ“§ - 8Ÿ“TW˛uø|Ÿ˛ĩtô|ŸTuø|Ÿ`áuø|Ÿ$ s uø|Ÿw ~ uø|Ÿ§ - uø|ŸTduw<" ˆŸ  uw<"ĖŸTĩ8ŸT8Ÿ`á8Ÿ$ s 8Ÿw ~ 8Ÿ§ - 8ŸTd uw<" „  uw<"Čr˛u˛ĩtTu`au$ 8 uK L u_ ` uw ~ u§ - urW˛uø|Ÿ˛ĩtô|ŸTuø|Ÿ`áuø|Ÿ$ s uø|Ÿw ~ uø|Ÿ§ - uø|ŸwĩHŸTHŸ`ËHŸ$ s HŸ§ - HŸw}uŦ~Ÿ}‹P‹W˛u¤|˛ĩt |Tu¤|`au¤|aËuŦ~Ÿ$ 8 u¤|8 K uŦ~ŸK L u¤|L _ uŦ~Ÿ_ ` u¤|` s uŦ~Ÿ§ Ģ WĢ - u¤|w‹uā~Ÿ‹˜P˜˛uÄ|˛ĩtĀ|TuÄ|`auÄ|aËuā~Ÿ$ 8 uÄ|8 K uā~ŸK L uÄ|L _ uā~Ÿ_ ` uÄ|` s uā~Ÿ§ - uÄ|ŲW˛u¤|˛ĩt |Tu¤|`au¤|aËuŦ~Ÿ$ 8 u¤|8 K uŦ~ŸK L u¤|L _ uŦ~Ÿ_ ` u¤|` s uŦ~Ÿ§ Ģ WĢ - u¤|u´~ŸjWj˛u´~Ÿ˛ĩt°~ŸTu´~Ÿ`Ëu´~Ÿ$ s u´~ŸĢ š Wš É u´~Ÿî đ Wđ ō u´~Ÿō ų Wų  u´~Ÿ & W& - u´~Ÿ­ É uŦ~Ÿ˛ĩHŸTHŸ`ËHŸ$ s HŸî - HŸ˛ņu¸~Ÿņ Q Cuœ|C˛u¸~Ÿ˛ĩt´~ŸTu¸~Ÿ`Ëu¸~Ÿ$ s u¸~Ÿî ō uœ|ō ų u¸~Ÿų  uœ| - u¸~ŸßņuÜ~Ÿņ q$Ÿ Cuœ|#$ŸC˛uÜ~Ÿ˛ĩtØ~ŸTuÜ~Ÿ`ËuÜ~Ÿ$ s uÜ~Ÿî ō uœ|#$Ÿō ų uÜ~Ÿų  uœ|#$Ÿ - uÜ~ŸÉ î uā~Ÿ ĩ8Ÿ“T8Ÿ“`Ë8Ÿ“$ s 8Ÿ“ō ų 8Ÿ“ - 8Ÿ“ jWj˛u´~Ÿ˛ĩt°~ŸTu´~Ÿ`Ëu´~Ÿ$ s u´~Ÿō ų W & W& - u´~Ÿ  uw<"ĖŸ ĩ8ŸT8Ÿ`Ë8Ÿ$ s 8Ÿō ų 8Ÿ - 8Ÿ  uw<"Č)˛u˛ĩtTu`au$ 8 uK L u_ ` uō ų u - u)jWj˛u´~Ÿ˛ĩt°~ŸTu´~Ÿ`Ëu´~Ÿ$ s u´~Ÿō ų W & W& - u´~ŸuĩjŸTjŸ`‚jŸ$ s jŸuÃWÃ˛uŒ|˛ĩtˆ|TuŒ|`auŒ|a‚uč|Ÿ$ + uŒ|+ - W- 8 uŒ|8 K uč|ŸK L uŒ|L _ uč|Ÿ_ ` uŒ|` s uč|ŸŠĩjŸTjŸ`ojŸ+ s jŸŠ°V°˛uØ|Ÿ˛ĩtÔ|ŸTuØ|Ÿ`ouØ|Ÿ+ / V/ 7 uØ|Ÿ7 > V> B tB s uØ|ŸŠ–v#Ÿ–›P§°V°˛uØ|Ÿ˛ĩtÔ|ŸTuØ|Ÿ`ouØ|Ÿ/ 7 uØ|ŸK s uØ|Ÿ7 K uØ|ŸÃĩvŸTvŸ`ovŸ/ 7 vŸK s vŸÃĘPĘ W/ 1 WÔĩvŸTvŸ`ovŸ/ 7 vŸK s vŸÔ V ˛uÜ|Ÿ˛ĩtØ|ŸTuÜ|Ÿ`ouÜ|Ÿ/ 3 V3 7 uÜ|ŸK R VR V tV s uÜ|ŸÔāv#ŸāåPņ V ˛uÜ|Ÿ˛ĩtØ|ŸTuÜ|Ÿ`ouÜ|Ÿ3 7 uÜ|Ÿ_ s uÜ|ŸK _ uÜ|Ÿ ĩ}ŸT}Ÿ`o}Ÿ3 7 }Ÿ_ s }Ÿ PhW3 5 Wĩ}ŸT}Ÿ`o}Ÿ3 7 }Ÿ_ s }ŸDVD˛uā|Ÿ˛ĩtÜ|ŸTuā|Ÿ`ouā|Ÿ3 7 V_ f Vf j tj s uā|Ÿ*v#Ÿ*/P;DVD˛uā|Ÿ˛ĩtÜ|ŸTuā|Ÿ`ouā|Ÿ_ s uā|Ÿhĩ€ŸT€Ÿ`o€ŸhoPoŋWPRWyĩ€ŸT€Ÿ`o€ŸyŸVŸ˛uä|Ÿ˛ĩtā|ŸPuä|ŸPTV`gVgktkouä|Ÿy…v#Ÿ…ŠP–ŸVŸ˛uä|Ÿ˛ĩtā|ŸPuä|Ÿ`ouä|Ÿŋ˛uŒ|˛ĩtˆ|PuŒ|ŋÆPÆ˛uė|Ÿ˛ĩtč|ŸPuė|ŸĐ˛u˜|˛ĩt”|Pu˜|͞uŒ|˛ĩtˆ|PuŒ|ĶßP*P߲uĐ|Ÿ˛ĩtĖ|ŸuĐ|Ÿ0PuĐ|Ÿč˛uč|Ÿ˛ĩtä|Ÿuč|Ÿ0Puč|ŸčôP0:Pô˛uŦ~Ÿ˛ĩt¨~ŸuŦ~Ÿ@PuŦ~Ÿ!˛u¸~Ÿ˛ĩt´~Ÿu¸~Ÿ@Pu¸~Ÿ0 uÜ~Ÿ ˛u }Ÿ˛ĩtœ}Ÿu }Ÿ@PuÜ~Ÿ9˛uč|Ÿ˛ĩtä|Ÿuč|Ÿ@Puč|Ÿ9EP@JPEu¸~Ÿ˛uü|Ÿ˛ĩtø|Ÿu¸~Ÿb˛uŦ~Ÿ˛ĩt¨~ŸuŦ~Ÿy˛u´~Ÿ˛ĩt°~Ÿu´~Ÿ•˛uŦ~Ÿ˛ĩt¨~ŸuŦ~Ÿˇ‘uā~Ÿ‘˛u¤}Ÿ˛ĩt }Ÿuā~ŸÔ˛uđ|Ÿ˛ĩtė|Ÿuđ|Ÿû˛uü|Ÿ˛ĩtø|Ÿuü|Ÿ ˛u }Ÿ˛ĩtœ}Ÿu }Ÿ˛uŦ~Ÿ˛ĩt¨~ŸuŦ~ŸPP˛uü|Ÿ˛ĩtø|Ÿ<˛uđ|Ÿ˛ĩtė|Ÿu˛uđ|Ÿ˛ĩtė|ŸY˛uø|Ÿ˛ĩtô|Ÿ‘˛u¤}Ÿ˛ĩt }Ÿo‚uč|Ÿowuė|Ÿw~P~‚uė|Ÿ‚žuÔ|Ÿ‹™uĪ|Ÿ™RžuĪ|Ÿ‹PžēuĐ|Ÿ§ĩuĪ|ŸĩšRšēuĪ|Ÿ§šP°ÛÛÛRÛÛßķRŸīÛAŪ1Ÿ`Ūß1ŸŗÛKŪuKŪLŪtLŪjŪuŪ”ŪuĻŪŠŪušŪēŪuĖŪĪŪußŪâŪuōŪķŪuŗÛKŪuKŪLŪt LŪjŪuŪ”ŪuĻŪŠŪušŪēŪuĖŪĪŪußŪâŪuōŪķŪu8ÜAŪŸ`ŪzŪŸ“Ūߟ8Ü?ÜP?ܑÜWĻŪ¨ŪWIÜAŪŸ`ŪzŪŸ“ŪߟIÜoÜVoÜAŪuDŸ`ŪzŪuDŸ“ŪĻŪuDŸĻŪ¯ŪV¯ŪŗŪtŗŪßuDŸIÜUÜv#ŸUÜZÜPfÜoÜVoÜAŪuDŸ`ŪzŪuDŸ“ŪĻŪuDŸšŪßuDŸ¨ŪšŪuDŸ‘ÜAŪu`ŪjŪu“Ū”ŪušŪēŪuĖŪĪŪußŪâŪuōŪķŪu‘ܘÜP˜ÜŨW“Ū—ŪWōŪöŪW¯ÜēÜVēÜAŪuHŸ`ŪzŪuHŸšŪßuHŸ—ŪĻŪuHŸˇÜAŪrŸ`ŪzŪrŸšŪßrŸˇÜŨWōŪöŪWËÜAŪrŸ`ŪzŪrŸšŪßrŸËÜũÜVũÜAŪuLŸ`ŪzŪuLŸšŪōŪuLŸōŪûŪVûŪ˙Ūt˙ŪßuLŸËÜÔÜv#ŸÔÜŲÜPåÜũÜVũÜAŪuLŸ`ŪzŪuLŸšŪōŪuLŸ ŨAŪΟ`ŪzŪΟšŪōŪΟ ŨŨPŨQŨWßŪáŪWŨAŪΟ`ŪzŪΟšŪōŪΟŨOŨVOŨAŪuPŸ`ŪzŪuPŸšŪßŪuPŸßŪčŪVčŪėŪtėŪōŪuPŸŨ'Ũv#Ÿ'Ũ,ŨP8ŨOŨVOŨAŪuPŸ`ŪzŪuPŸšŪßŪuPŸáŪōŪuPŸQŨAŪŸ`ŪzŪŸšŪßŪŸQŨXŨPXŨŸŨWĖŪÎŪW_ŨAŪŸ`ŪzŪŸšŪßŪŸ_ŨŨVŨAŪuTŸ`ŪzŪuTŸšŪĖŪuTŸĖŪÕŪVÕŪŲŪtŲŪßŪuTŸ_ŨgŨpŸgŨlŨPxŨŨVŨAŪuTŸ`ŪzŪuTŸšŪĖŪuTŸÎŪßŪuTŸŸŨAŪu`ŪjŪušŪēŪuŸŨĻŨPĻŨ ŪWiŪmŪWšŪŊŪWŊŨČŨVČŨAŪuXŸ`ŪzŪuXŸŊŪĖŪuXŸÅŨAŪÕŸ`ŪzŪÕŸÅŨ ŪWiŪmŪWŲŨAŪÕŸ`ŪzŪÕŸŲŨAŪV`ŪrŪVrŪvŪtvŪzŪu\ŸŲŨâŨv#ŸâŨįŨPķŨAŪV`ŪiŪVmŪzŪu\Ÿ ŪAŪu`Ÿ`ŪiŪu`Ÿ ŪAŪudŸ`ŪiŪudŸ ŪAŪ0Ÿ`ŪiŪ0Ÿ(ŪAŪW`ŪiŪW-ŪAŪV`ŪiŪV-Ū5ŪP`ŪfŪPzŪŪu`ŸzŪŪudŸŪ†ŪP†ŪŪudŸpß­ßR­ß0âķRŸ0â:âR:âöâķRŸÁß%â1ŸPâöâ1Ÿ‘ß­ßP0â5âP5â:âu‘ß­ßQ0â:âQā%âŸPâjâŸâŖâŸ§âöâŸā āu°ā%âŸPâjâŸâŖâŸ§âöâŸāDāWDā%âuDŸPâjâuDŸâ’âuDŸ’âŖâW§âöâuDŸā(ārŸ(ā-āP;āDāWDā%âuDŸPâjâuDŸâ’âuDŸ§âöâuDŸ”âŖâuDŸeāgāPgāŨāWÍâŅâWāâäâW‹ā–āV–ā%âuHŸPâjâuHŸâ’âuHŸ§âāâuHŸ“ā%ârŸPâjârŸâ’ârŸ§âāârŸ“āŨāWÍâŅâW§ā%ârŸPâjârŸâ’ârŸ§âāârŸ§āŲāVŲā%âuLŸPâjâuLŸâ’âuLŸ§âÍâuLŸÍâÖâVÖâÚâtÚâāâuLŸ§āŠāv#Ÿ­ā°āpŸ°āĩāPÁāŲāVŲā%âuLŸPâjâuLŸâ’âuLŸ§âÍâuLŸŅâāâuLŸéā%âΟPâjâΟâ’âΟ§âÍâΟéāđāPđā-áWēâŧâWúā%âΟPâjâΟâ’âΟ§âÍâΟúā+áV+á%âuPŸPâjâuPŸâ’âuPŸ§âēâuPŸēâÃâVÃâĮâtĮâÍâuPŸúāüāv#ŸáápŸááPá+áV+á%âuPŸPâjâuPŸâ’âuPŸ§âēâuPŸŧâÍâuPŸ-á%âŸPâjâŸâ’⟧âēâŸ-á4áP4áxáW§âŠâW;á%âŸPâjâŸâ’⟧âēâŸ;á]áV]á%âuTŸPâjâuTŸâ’âuTŸ§â°âV°â´ât´âēâuTŸ;áCápŸCáHáPTá]áV]á%âuTŸPâjâuTŸâ’âuTŸŠâēâuTŸxá{áP{áíáWYâ]âWâƒâWĄáŦáVŦá%âuXŸPâjâuXŸƒâ’âuXŸŠá%âÕŸPâjâÕŸŠáíáWYâ]âWŊá%âÕŸPâjâÕŸŊá%âVPâbâVbâfâtfâjâu\ŸŊáŋáv#ŸÃáÆápŸÆáËáP×á%âVPâYâV]âjâu\Ÿđá%âu`ŸPâYâu`Ÿđá%âudŸPâYâudŸđá%â0ŸPâYâ0Ÿ â%âWPâYâWâ%âVPâYâVââPPâVâPjââu`ŸjâoâudŸoâvâPvââudŸãã‘ ããpã%ã‘d%ã/ã‘ ã ã‘ ããpããtã%ã‘h%ã/ã‘0ãCã‘ CãJãpJãRã‘dRã\ã‘ 0ã:ã‘:ãCãpCãDãtDãRã‘hRã\ã‘RWWcŨW@W—Č Ÿ@D ŸHV ŸŽČLŸŨw Ÿ@w ŸéudŸ@udŸéíP*:PíwŸ*wŸķudŸ*udŸķ÷P'PbiucŸipRpucŸbpPzucŸ…R…ucŸz…P&_uėđu3u&-wxŸ-6P6OwxŸėđwxŸ3wxŸ&OWėđW3W*-wxŸ-6P6OwxŸėđwxŸ3wxŸ*OWėđW3W3W!,u`Ÿ,0R03u`Ÿ!0P[bVbctcjtj›v|Ÿļ¸v|Ÿ[^u`Ÿ^jPjuP uP˛ãuPÍãu`ŸĶŪu_ŸŪâRâãu_ŸĶâPƒ›rxŸ›¨W¨ÆVƒ†rpŸ†‰P‰•rpŸ•›Wƒ0Ÿ 0Ÿ˛ļ0ŸēÍ0Ÿƒ†rpŸ†‰P‰•rpŸ•›W›¨wpŸ¨ÆvpŸŒ’P’˜p Ÿ˜› wu 3&Ÿĸ¨wpŸ¨ÆvpŸĸ¨W¨ÆV¨ÆW¨ÆVąÆv|ŸąÆvŸÆu`Ÿ u`ŸŲudŸ udŸņu`Ÿ u`ŸņudŸ udŸôu_Ÿ u_ŸôøP Pøu`Ÿu`Ÿūu_Ÿu_ŸūPP:Sw8Ÿdnw8Ÿw8ŸSMuPn˛uP3—uPSwuPwŗ0ŸŋËPËuL3}uL}uP…0Ÿ…ŠuPŠŒ0ŸŒˇuPĘ0Ÿ!uP!/0Ÿ<@uLJ‚uL‚—0Ÿ˛ō{‚ đō{‚ 3—ō{‚ ˛1Ÿđ1Ÿ3—1Ÿ_uMnuđu0:1Ÿ:LRPnRđR(˛ōĘ@đōĘ@3—ōĘ@0Mōp;X˛ōp;üōp;3—ōp;:_udnuuDSuDS0ŸDSuHS_uSlVlwv|Ÿ}v|Ÿ…ŠV!VSVuPw"ŸVWuD3}uD}W…uD…ŠWŠŒuDŒˇWˇuD!W!—uD[lVlwv|Ÿ}v|Ÿ…ŠV!V[wW}W…ŠWŒˇW!WŒˇuD”Ÿu`ŸŸŖRŖˇu`Ÿ”ŖP„V„MuPn˛uP3}uP…uPŠŒuPĘuP<@uPJ—uP„WM1Ÿn˛1Ÿ3}1Ÿ…1ŸŠŒ1ŸĘ1Ÿ<@1ŸJ—1ŸšWƒWŠŒW„VĢŽvŸŽŗV„ĢWĢŗwxŸƒWŠŒWĢŽvŸŽŗVŒ¨WƒWŠŒWĘáVĪÚu`ŸÚŪRŪáu`ŸĪŪPęuP‚—uPęöuPöũWũtwxŸW‚—WöũWũt wxŸÉËPËuL3}uL<@uLJ‚uLÉËQËuT3}uT<@uTJ‚uTÉM1Ÿn˛1Ÿ3}1Ÿ<@1ŸJ‚1ŸÉËPËVMuDnƒuD3}V<>VËķVķvxŸ3}V<>VÔđV3}V<>V9PV>Iu`ŸIMRMPu`Ÿ>MPY}V<>VY}uL<@uLJ‚uLYeuLelWlptpqwxŸq}W<@WJ‚WelWlptpxwxŸMuTnƒuT!Q!Q!MVn~V!4V49vxŸ9MVnxVx~vxŸ!4vŸ49v|Ÿ9MvŸnxvŸx~v|Ÿ!9u`Ÿ?Mu`Ÿnƒu`Ÿ?JP!4V49vxŸnxVx~vxŸ-9u`Ÿnƒu`Ÿ-1PnuPƒ˛uTŠ–uT/8uPˇÅuP!/uDbluPlsVswtwxvxŸx‚VlsVswtw‚vxŸ5OUYkU;O‘_ŸYd‘_ŸdhRhk‘_Ÿ;CPYhPÄãČãuT ä.ä0ŸÄãČãvŸ ä.ävŸįãęãW.ä7ä0Ÿįãęãv Ÿ.ä7äv Ÿ9ä<äv Ÿ<äEäPEäIäv ŸIäNävŸNäUäPUäYävŸYätävŸeäoäugŸoäsäRsätäugŸeäsäPtääVyääugŸä…äR…ääugŸyä…äP0å3åuT’åĄå0Ÿ0å3åvŸ’åĄåvŸ3ååv ŸĄåÚåv ŸNååvŸĄåÚåvŸ¤åÚåvŸ§å¯å v v4Ÿ§åŗåPĢå¯å v v4ŸĢåŗåPˇåÚåv ŸēåÂå vv 4ŸēåÆåPžåÂå vv 4ŸžåÆåPĘåĪåvŸĪåÖåPÖåÚåvŸÚåúåvŸāåúåugŸāåîåP\æĪæv ŸŌæįv Ÿ įLįv Ÿēįŋįv Ÿ\æLį0Ÿēįŋį0ŸâæíæPíæ÷æv ÷æ įuT=įGįv GįJįuTķæ įugŸ=įJįugŸķæ÷æP÷æ įuP<Ÿ=įGįPGįJįuP<ŸwæĪævŸ įįvŸ į=įvŸēįŋįvŸwæŌæ0Ÿ į=į0Ÿēįŋį0Ÿ™æ›æP›æŠævŠæˇæuT*į7įv7į=įuTĄæˇæugŸ*į=įugŸĄæŠæPŠæˇæuP<Ÿ*į7įP7į=įuP<ŸˇæĪævŸ įįvŸ į*įvŸŊæŅæugŸŅæŌæ‘_Ÿ įįugŸį į‘_Ÿ į*įugŸŊæÁæP į'įPÁæĪæV įįVÆæŅæugŸŅæŌæ‘_Ÿ įįugŸį į‘_ŸÆæŌæP įįPLįQįvŸQįXįPXįeįvŸeį“įvŸkįrįugŸrįvįRvį“įugŸkįvįPwį“įV|įƒįugŸƒį‡įR‡į“įugŸ|į‡įP¤į§įv Ÿ§į°įP°įļįv Ÿåįīįq ŸíįīįV“īį čV“ č čvŸ“ ččV“Õč×čV“ōįčWÕčéčW'č*čpŸ*č2ču#Ÿ*č2ču# u#4Ÿ*č6čP.č2ču# u#4Ÿ.č6čP:čHču# Ÿ@čHču#u# 4Ÿ@čLčPDčHču#u# 4ŸDčLčPPčˆču#Ÿ­čÃču#ŸËčÕču#ŸKéOéu#ŸPčÕč0ŸKéOé0ŸuččWËčÕčW€ččugŸËčÕčugŸ€č„čPËčŌčP“č–čpŸ–čču#ŸščŧčpŸŧčÃču#Ÿ™ččugŸŋčÃčugŸ™č¤čPŋčËčPéč÷ču#Ÿīč÷ču# u#4ŸīčûčPķč÷ču# u#4ŸķčûčP˙č éu# Ÿé éu#u# 4ŸééP é éu#u# 4Ÿ ééPééu#Ÿé épŸ é%éP)éFéu#Ÿ2é=éugŸ=éAéRAéKéugŸ2éAéP‘PWRéW ’W=JVRjV&=V=J‘Rj‘&2p|Ÿ&2P=HPR]P]_ ‘#4Ÿ=?R?Hp|ŸR]p|Ÿ]_ ‘#8Ÿ=JWRjW=J1ŸRj1Ÿ?Hr4ŸRdr4Ÿĸ­r4Ÿ­ģ‘X4Ÿ#p4Ÿƒ’r4Ÿģ˙U˙ v#kUģÃUÃŌ0ŸŌÖur"ŸÖäQé W#:Q:H‘XHk0Ÿ„ŽPŽšu1$Ÿ #1Ÿk’PŒkō)^}’ō)^š VkVƒ’VĸģVĸģ0Ÿģ V#kVģËQģŊur"ŸŊĮRÅ V#kVÅ˙U˙ v#kUÅéW#kWÅŌPH^PÅ 1Ÿ#k1ŸÉŌr4ŸH^r4Ÿ^k‘X4ŸÖ V#HVÖäQ#:Q:H‘XÖäv#,vÖéW#HWÖ 1Ÿ#H1ŸÛär4Ÿ#:r4Ÿ:H‘\4Ÿé Véņ vp4ŸéõPíųVíņ vp4ŸíõP‘MWOŨWūzW7GVObV"7V7G‘Ob‘"Er|ŸOUr|ŸUW ‘#8Ÿ"EROURUW ‘#4Ÿ7EROURUW ‘#4Ÿ7:r|Ÿ:<P<Er|ŸOUr|ŸUW ‘#8Ÿ7GWObW7G1ŸOb1Ÿ<Ep4ŸO\p4Ÿ’r4Ÿą‘\4Ÿ r4Ÿezr4ŸąķUķūvNUąŊUŊÆ0ŸÆÍuq"ŸÍØQŨūW"Q"0‘X0N0ŸzŽQū1ŸNoQoz vp2&1$Ÿ‚NōšfazōšfŽūV NVezV’ąV’ą0ŸąūVNVąū‘N‘ąŗur"ŸŗÆR0ARŊūVNVŊķUķūvNUŊŨWNWŊØ‘X‘X0N‘XŊū1ŸN1ŸŊÆq4Ÿ0Aq4ŸAN‘\4ŸÍūV0VÍØQ"Q"0‘XÍĪRĪØvvÍŨW0WÍū1Ÿ01ŸĪØr4Ÿ"r4Ÿ"0‘\4ŸŨūVŨå vp4ŸŨéPáíVáå vp4ŸáéPéļé‘åéīé‘īéųérųé˙鑤éī鑟īéųéRųéę‘Ÿ¤éßév Ÿßéåé‘# Ÿåéęv Ÿęę‘# ŸŦéŋév ŸŦéŋ鑟ŦéšéPÂéßévŸßéåé‘#Ÿ˙éęvŸęę‘#ŸŅéåé‘lŸ˙é ę‘lŸ ęęRęę‘lŸŅéßévŸßéåé‘#Ÿ˙éęvŸęę‘#ŸĶéßévŸĶéßé‘lŸĶéÜéPÜéßév‘PWRéW ’W=JVRjV&=V=J‘Rj‘&2p|Ÿ&2P=HPR]P]_ ‘#4Ÿ=?R?Hp|ŸR]p|Ÿ]_ ‘#8Ÿ=JWRjW=J1ŸRj1Ÿ?Hr4ŸRdr4Ÿĸ­r4Ÿ­ģ‘X4Ÿ#p4Ÿƒ’r4Ÿģ˙U˙ v#kUģÃUÃŌ0ŸŌÖur"ŸÖäQé W#:Q:H‘XHk0Ÿ„ŽPŽšu1$Ÿ #1Ÿk’PŒkōîp}’ōîpš VkVƒ’VĸģVĸģ0Ÿģ V#kVģËQģŊur"ŸŊĮRÅ V#kVÅ˙U˙ v#kUÅéW#kWÅŌPH^PÅ 1Ÿ#k1ŸÉŌr4ŸH^r4Ÿ^k‘X4ŸÖ V#HVÖäQ#:Q:H‘XÖäv#,vÖéW#HWÖ 1Ÿ#H1ŸÛär4Ÿ#:r4Ÿ:H‘\4Ÿé Véņ vp4ŸéõPíųVíņ vp4ŸíõP ęEę‘Sębę‘bęięqięoę‘3ębę‘ŸbęięQięoę‘Ÿ3ęNęrŸNęSę‘#ŸSę^ęrŸ^ęoę‘#Ÿ;ęNęrŸ;ęNę‘Ÿ;ęHęPĨë¯ëP¯ëĩëWĩëļëtļëŊët ŊëëëwŸžėÆėPÆėčėW í$íwŸĢë¯ëP¯ëĩëWĩëļëtļëŊët ŊëëëwŸ í$íwŸĢëžė0Ÿęė î0ŸĢëžėŸęė ëžė ˙Ÿęė î ˙ŸžëëëW í$íWžëžėŸęė ëžėŸęė îŸõëžėuPęė íuPAíIíuPIíWíu`ŸoíuíuPuí‹íu`Ÿ‹í“íuP“í¯íu`Ÿ¯í˛íuP˛íĪíu`ŸĪíííuPííîu`Ÿî îuPõëžėuLęė íuLAíIíuLIíWíu\ŸoíííuLííîu\Ÿî îuLõëûëPûëcėWcėžėuTęė íuTAíGíWGíIíuToíuíWuí‹íuT‹í‘íW‘í¯íuT¯íģíWģíííuTî îW î îuTėžėuPęė íuPoíuíuPuí‹íu`Ÿ‹í“íuP“í¯íu`Ÿ¯í˛íuP˛íĪíu`ŸĪíííuPííîu`Ÿî îuPėžėuLęė íuLoíííuLííîu\Ÿî îuLėPėVPėQėwoí‰íV‹íĪíV“í¯ívŸ™í íudŸ í§íR§í¯íudŸ™í§íP˛íĪív ŸžíÅíudŸÅíÉíRÉíĪíudŸžíÉíPMėžėuTęė íuTĪíííuTî îuTcėžėVęė íVĪíŅíVŅíéíudŸcėkėPkėžėuTęė íuTĪíéíuTxėžėVęė íV{ėžėuZŸęė íuZŸ{ėƒėPęė÷ėPŅíéíudŸŨíäíuZŸäíčíRčíéíuZŸŨíčíPJėPėVPėQėwJėcėwŸcėžėuT#Ÿęė íuT#ŸĪíííuT#Ÿî îwŸ î îuT#ŸéíííuT#ŸííķípŸķíøíPƒėžėuúė íuėžėu`Ÿúė íu`Ÿ ėžėudŸúė íudŸ ė¤ėPúėíP¤ėžėu\ŸĒėžėudŸĒė¸ėP&íAíu\Ÿ,í3íuZŸ3í7íR7íAíuZŸ,í7íPWíkíu`Ÿ]ídíuZŸdíhíRhíkíuZŸ]íhíP‘PWRéW ’W=JVRjV&=V=J‘Rj‘&2p|Ÿ&2P=HPR]P]_ ‘#4Ÿ=?R?Hp|ŸR]p|Ÿ]_ ‘#8Ÿ=JWRjW=J1ŸRj1Ÿ?Hr4ŸRdr4Ÿĸ­r4Ÿ­ģ‘X4Ÿ#p4Ÿƒ’r4Ÿģ˙U˙ v#kUģÃUÃŌ0ŸŌÖur"ŸÖäQé W#:Q:H‘XHk0Ÿ„ŽPŽšu1$Ÿ #1Ÿk’PŒkōâ‚}’ōₚ VkVƒ’VĸģVĸģ0Ÿģ V#kVģËQģŊur"ŸŊĮRÅ V#kVÅ˙U˙ v#kUÅéW#kWÅŌPH^PÅ 1Ÿ#k1ŸÉŌr4ŸH^r4Ÿ^k‘X4ŸÖ V#HVÖäQ#:Q:H‘XÖäv#,vÖéW#HWÖ 1Ÿ#H1ŸÛär4Ÿ#:r4Ÿ:H‘\4Ÿé Véņ vp4ŸéõPíųVíņ vp4ŸíõPî<î‘NîZî‘Zîaîpaîkî‘.îINîZZîaîPaîk.îIîqȟNîVîqȟVî[î ‘#$#HŸ[îaîQ6îIîqȟ6îI6î?îR.îIîQNîVîQVî[î‘#$[îaîq¸Ÿ•îžîqԟžîĒîu#TŸĻîÄîW“ÄîĮîwŸ“ĮîĖîW“ĖîåîW“åîčîwŸ“čîíîW“ĒîĖîVÎîíîVĒîÄîVíî˙îu#HŸųî īV“ īīvŸ“īīV“ī/īV“/ī2īv|Ÿ“˙îīPī+īP˙îīPpīƒīpüŸƒīžīu#üŸpīŅņ0Ÿō‘ō0ŸÎō*ķ0Ÿ¤īĖīu#øŸÜđņu#øŸ§ņŅņu#øŸÎōÛōu#øŸ¤īŅņ0ŸÎō*ķ0Ÿņđ(ņV§ņŅņVøđņPņ(ņV§ņ´ņVņ(ņudŸ§ņ´ņudŸņņP§ņŽņPˇņŅņVÂņÉņudŸÉņÍņRÍņŅņudŸÂņÍņPķīųīpėŸųīũīu#lŸöīđV“đĢđV“æōčōV“ķīÜđōÏ(ņ§ņōÏÛōķōÏķ*ķōÏöīųīpėŸųīũīu#lŸöīųīpđŸųīũīu#pŸđ#đōÏ#đ/đP'đ/đPîōūōRöōūōR3đAđu#`Ÿ9đAđu#hu#`4Ÿ9đEđP=đAđu#hu#`4Ÿ=đEđPIđWđu#TŸOđWđu#\u#T4ŸOđ[đPSđWđu#\u#T4ŸSđ[đP_đmđu#HŸeđmđu#Pu#H4ŸeđqđPiđmđu#Pu#H4ŸiđqđPuđđu#@Ÿƒđ’đPĢđąđPąđŲđV(ņ6ņP6ņ¤ņVÛōŨōVķķVSņ—ņáŸķ*ķáŸjņ—ņBŸÆđÉđpŸÉđÛđu#ŸÛđÜđ‘#Ÿ—ņĻņu#ŸĻņ§ņt#ŸĖđÛđudŸÛđÜđ‘\Ÿ—ņĻņudŸĻņ§ņt`ŸĖđÜđP—ņžņP ōōu#`Ÿōōu#hu#`4ŸōōPōōu#hu#`4ŸōōP!ō/ōu#TŸ'ō/ōu#\u#T4Ÿ'ō3ōP+ō/ōu#\u#T4Ÿ+ō3ōP7ōEōu#HŸ=ōEōu#Pu#H4Ÿ=ōIōPAōEōu#Pu#H4ŸAōIōPqōŠōu#ŸzōōucŸō…ōR…ōōucŸzō…ōP‘ō›ōu#øŸ›ō ōpøŸ ōĨōPļōžōu#üŸžōÃōpüŸÃōČōPŧķĐķWĐķÖķvŸÖķãķVãķöķPöķNôVfônôV ôQôĖŸfô{ôĖŸ+ôQôBŸûô õvŸ õõPõúövŸúöüöu´HŸüöũöt°HŸũöXųvŸ8õ<õP<õüöu´üöũöt°ũö0øu´OøXøu´Xøøøv Ÿøø*ųu´1ųXųu´EõKõPKõiõu¸ũö÷P÷`÷u¸ ø0øu¸)÷`÷¨Ÿ ø0ø¨Ÿ;÷`÷BŸUõúövŸúöüöu´# Ÿüöũöt°# Ÿ`÷ øvŸOø*ųvŸ1ųXųvŸiõoõPoõûõu¸ŧ÷Æ÷PÆ÷ øu¸ ų#ųu¸é÷ øp Ÿų#ųp Ÿû÷ øBŸŊõúövȟúöüöu´#(Ÿüöũöt°#(Ÿ`÷ŧ÷vȟOøåøvȟøø ųvȟ#ų*ųvȟ1ųXųvȟŊõúövԟúöüöu´#4Ÿüöũöt°#4Ÿ`÷ŧ÷vԟOøåøvԟøø ųvԟ#ų*ųvԟ1ųXųvԟŊõúövāŸúöüöu´#@Ÿüöũöt°#@Ÿ`÷ŧ÷vāŸOøåøv⟸ø ųvāŸ#ų*ųvāŸ1ųXųvāŸŊõúövėŸúöüöu´#LŸüöũöt°#LŸ`÷ŧ÷vėŸOøåøv럸ø ųvėŸ#ų*ųvėŸ1ųXųvėŸ,öũö0Ÿ`÷ŧ÷0ŸOø€ø0Ÿøø ų0Ÿ1ųQų0Ÿ,öúöväŸúöüöu´#ÄŸüöũöt°#ÄŸ`÷ŧ÷väŸOø€øväŸøø ųväŸ1ųQųväŸ^öũö0Ÿ`÷ŧ÷0ŸOø€ø0Ÿøø ų0Ÿ1ųQų0Ÿ^öúövøŸúöüöu´#ØŸüöũöt°#ØŸ`÷ŧ÷vøŸOø€øvøŸøø ųvøŸ1ųQųvøŸ|öŠöPŠöövüöŠöPŠöövüöúövüŸúöüöu´#ÜŸüöũöt°#ÜŸ`÷ŧ÷vüŸOødøvüŸøø ųvüŸ1ųJųvüŸ‡öúöv€Ÿúöüöu´#āŸüöũöt°#āŸ`÷ŧ÷v€ŸOødøv€Ÿøø ųv€Ÿ1ųJųv€Ÿžö¤öP¤öüöuŧüöũöt¸`÷f÷Pf÷ŧ÷uŧOøXøuŧøø ųuŧ1ųJųuŧ…÷ŧ÷p Ÿøø ųp Ÿ—÷ŧ÷BŸÕöúöv„Ÿúöüöu´#äŸüöũöt°#äŸ1ųJųv„ŸŪöņöP0øOøvŸ6øAøuSŸAøEøREøOøuSŸ6øEøPQøWøvüŸWø`øP`ødøvüŸdøløvøŸløsøPsø€øvøŸšøåøvāŸø¨ø včvā4ŸøŦøP¤ø¨ø včvā4Ÿ¤øŦøP°øåøvԟŗøģø vÜvÔ4ŸŗøŋøPˇøģø vÜvÔ4ŸˇøŋøPÃøåøvČŸÆøÎø vĐvČ4ŸÆøŌøPĘøÎø vĐvČ4ŸĘøŌøP‹ųųPųÂųuPÂųÃųtLÃųiúuP—ų™ųP™ųŦųWÃųÎųPÎųDúWeúiúWâųDú¨Ÿú/úBŸ,û>ûP-ū3ūP3ūEū4ûũ:Ÿ ũ-ū:ŸNū:Ÿ4û>ûPfûlûVlûũuŦ ũ!ũuŦ ū-ūuŦNūŊūuŦŧ˙é˙uŦuŦfûlûuDŸlûũV ũ!ũV ū-ūVNūŊūVŧ˙ž˙Vž˙é˙uDŸV`uDŸ`bVbwuDŸw{V{uDŸ’V’”uDŸ”˜V˜uDŸŸVŸĄuDŸĄŖVŖÚuDŸÚÜVÜįuDŸįéVéuDŸVuDŸŖžuDŸ¯šu`ŸšŊRŊžu`Ÿ¯ŊP†ûũuŦ ũ!ũuŦ ū-ūuŦNūŊūuŦŧ˙é˙uŦĄuŦįuŦ‰ûũu`Ÿ ũ!ũu`Ÿ ū-ūu`ŸNūŊūu`Ÿŧ˙é˙u`ŸĄu`Ÿįu`Ÿ‰û”ûP ūūPžûÂûWÂûÉûtÉûrüuPŸū-ūuPŸNū]ūuPŸūŊūuPŸSuPŸ`–uPŸĄuPŸžûÉûPÉûæûWæûrüu¨ū-ūu¨Nū]ūu¨ūŊūu¨Su¨`–u¨ĄWõûųûWųûúûtúûūûtūûrüuHŸū-ūuHŸNū]ūuHŸūŊūuHŸ1uHŸ`uHŸõûųûuLŸųûrüWū-ūWNū]ūWūŊūW1W`Würüu¤ū-ūu¤Nū]ūu¤ūŊūu¤yu¤ürüuDŸū-ūuDŸNū]ūuDŸūŊūuDŸyuDŸ*ürüu¤ū-ūu¤Nū]ūu¤ūŊūu¤*ü6üu¤6üTüuLŸTürüuTŸū-ūuTŸNū]ūuTŸūūu¤ūŊūuLŸ-ürüudŸū-ūudŸNū]ūudŸūŊūudŸ-ü6üPū—ūP6ürüuLŸū-ūuLŸNū]ūuLŸūŊūuLŸ6üTüuLŸTürüuTŸū-ūuTŸNū]ūuTŸūŊūuLŸ<ürüudŸū-ūudŸNū]ūudŸūŊūudŸ<üEüPū§ūPEürüuHŸū-ūuHŸNū]ūuHŸ­ūŊūuHŸKürüudŸū-ūudŸNū]ūudŸ­ūŊūudŸKüTüP­ūˇūPTürüuTŸū-ūuTŸNū]ūuTŸZürüudŸū-ūudŸNū]ūudŸZücüPNūWūPcürüuPŸū-ūuPŸiürüudŸū-ūudŸiürüPū'ūP‘üņüudŸ]ūūudŸŧ˙Í˙udŸįudŸļüņüW]ūūWŧ˙Í˙WļüåüWåüņüu\Ÿ]ū|ūW|ūūu\Ÿŧ˙ž˙Wž˙Í˙u\ŸšüņüuXŸ]ūūuXŸŧ˙Í˙uXŸšüÂüP]ūgūPÂüņüudŸmūūudŸŧ˙Í˙udŸČüņüu`Ÿmūūu`Ÿŧ˙Í˙u`ŸČüŅüPmūvūPåüņüu\Ÿ|ūūu\ŸčüņüudŸ|ūūudŸčüņüP|ū‡ūPņüũuDŸ÷üũudŸ÷üũP?ũrũVrũūu\ŸŊūA˙u\ŸJ˙W˙u\ŸW˙Y˙VY˙v˙u\Ÿv˙x˙Vx˙ŧ˙u\Ÿé˙u\Ÿ?ũDũu`ŸDũūWŊūA˙WJ˙ŧ˙Wé˙WY˙v˙u`Ÿe˙o˙udŸo˙s˙Rs˙v˙udŸe˙s˙P|ũ€ũV€ũ„ũt„ũūuTŸŊū˙uTŸƒ˙ŧ˙uTŸé˙uTŸ|ũ„ũP„ũūVŊū˙ūV˙ū˙uXŸƒ˙…˙V…˙ŧ˙uXŸé˙ë˙Vë˙ö˙uXŸö˙ø˙Vø˙uXŸø˙uXŸudŸRudŸPļũūuŦŊūũūuŦļũÄũuŦÄũâũuXŸâũūu`ŸŊūÍūuŦÍūíūuXŸíūũūu`ŸšũūuPŸŊūũūuPŸšũÄũPŊūĮūPÄũūuXŸÍūũūuXŸÄũâũuXŸâũūu`ŸÍūíūuXŸíūũūu`ŸĘũūudŸÍūũūudŸĘũĶũPŨūįūPĶũūuTŸÍūŨūuTŸíūũūuTŸŲũūudŸÍūŨūudŸíūũūudŸŲũâũPÍū×ūPâũūu`Ÿíūũūu`ŸčũūudŸíūũūudŸčũņũPíū÷ūPņũūu\Ÿ÷ũūudŸ÷ũūP˙˙uTŸ˙˙uPŸ˙˙R˙˙uPŸ˙˙P˙.˙u`Ÿ!˙)˙uPŸ)˙-˙R-˙.˙uPŸ!˙-˙P.˙A˙u\Ÿ4˙<˙uPŸ<˙@˙R@˙A˙uPŸ4˙@˙P…˙ ˙udŸ‘˙›˙uPŸ›˙Ÿ˙RŸ˙ ˙uPŸ‘˙Ÿ˙P ˙ŧ˙uXŸĻ˙˛˙uPŸ˛˙ļ˙Rļ˙ŧ˙uPŸĻ˙ļ˙Pž˙Í˙u\ŸÄ˙Í˙udŸÄ˙Í˙PÍ˙é˙uDŸĶ˙ß˙uCŸß˙ã˙Rã˙é˙uCŸĶ˙ã˙P1uHŸ$1udŸ$0P1DuTŸ7DudŸ7CPDSuPŸJSudŸJSPbwuLŸhwudŸhtP{uXŸudŸPžÚudŸÄĐu`ŸĐÔRÔÚu`ŸÄÔPéudŸīûuXŸû˙R˙uXŸī˙P uXŸRuXŸ P=kVk­u`Ÿ­Žt\ŸŽÍVÍæu`Ÿæįt\ŸįV-u`Ÿ-3V3|u`Ÿ_ĻudŸ-udŸP|udŸy~P~Ļu-u‘ĻudŸ-udŸ”Ļu_Ÿ-u_Ÿ”œP'PœĻu`ŸÍ×u`ŸĸĻudŸĶ×udŸĸŽPĶŪPŽ×ŸįŸŽ×u`Ÿįu`Ÿ5Pu`Ÿ;Bu_ŸBFRFPu_Ÿ;FP^xudŸjqu_ŸquRuxu_ŸjuP>SP‚—P58p$8>P58p$#øŸ8>pøŸ[_P_‚VB‚ŸBLp ŌÜPôPķPŌņuÅ}ŸņōtÁ}ŸōŊ uÅ}Ÿæëw1Ÿ;GPRÜWōhWUÜuĮ}ŸōhuĮ}ŸU]PTbP-6u#6:t]Üuä}ŸōTuä}ŸfÜuč}ŸōTuč}ŸfnPDNPnÜuā}ŸōDuā}ŸwÜuč}ŸōDuč}ŸwP4>PÜuÜ}Ÿō4uÜ}ŸˆÜuč}Ÿō4uč}ŸˆP$.PÜuĐ}Ÿō$uĐ}Ÿ™Üuč}Ÿō$uč}Ÿ™PPÜuĖ}ŸōuĖ}ŸĻÜuč}Ÿōuč}ŸĻĒPPĒÜuČ}ŸōuČ}ŸŗÜuč}Ÿōuč}ŸŗˇPōūPˇÜuØ}ŸĀÜuč}ŸĀÎPÜ ô uČ}Ÿå ī uĮ}Ÿī ķ Rķ ô uĮ}Ÿå ķ Pô  uØ}Ÿũ  uĮ}Ÿ  R  uĮ}Ÿũ  PR j uĐ}Ÿ[ e uĮ}Ÿe i Ri j uĮ}Ÿ[ i Pj ‹ uĖ}Ÿs  uĮ}Ÿ … R… ‹ uĮ}Ÿs … P“ ­ uÜ}Ÿœ Ļ uĮ}ŸĻ Ē RĒ ­ uĮ}Ÿœ Ē PÆ ä uč}ŸÕ ß uĮ}Ÿß ã Rã ä uĮ}ŸÕ ã Pä ü uä}Ÿí ÷ uĮ}Ÿ÷ û Rû ü uĮ}Ÿí û Pü  uā}Ÿ  uĮ}Ÿ  R  uĮ}Ÿ  PÜō ˙Ÿšķuč}ŸšÂPÔķuč}Ÿ×ķV×íP,4ŸIOPOPu#P^u´}wŒPF^P: D P´ ŧ P^´˙Ÿ: Ô ˙Ÿ- G ˙ŸZ Ŋ ˙Ÿ^´uč}Ÿ: Ô uč}Ÿ- G uč}ŸZ Ŋ uč}Ÿ^€u´}: Ô u´}Z Ŋ u´}”VŨ.uÜ}ŸÄ Ô uÜ}ŸŨæP.uÜ}ŸÄ Ô uÜ}Ÿ".uä}ŸÄ Ô uä}Ÿ".PÄ Î Ph † uÜ}Ÿq  uä}Ÿ ƒ Rƒ † uä}Ÿq ƒ Py ´ uä}ŸŠ ˜ uä}Ÿ™ ´ uä}Ÿœ ´ Wœ Ž P˜ š uä}ŸĄ ¯ uÜ}Ÿ¯ ŗ Rŗ š uÜ}ŸĄ ŗ P.FuÔ}ŸX´uč}ŸX´uÔ}ŸXĨuÔ}#Ÿ/ G uÔ}Ÿ´Ã2Ÿ  V  P+ : 3Ÿ 5 uč}Ÿ . uā}Ÿ. 2 R2 5 uā}Ÿ 2 P , Pđ e Wr å Wķ e uCŸr å uCŸķ û PÔ ß P  u#û e u`Ÿr Ô u`Ÿ e udŸr Ô udŸ  PÄ Î P e u\Ÿr Ä u\Ÿ e udŸr Ä udŸ  P´ ž P e uXŸr ´ uXŸ e udŸr ´ udŸ % PĄ Ž P% e uLŸr Ą uLŸ+ e udŸr Ą udŸ+ / P‘ ž P/ e uHŸr ‘ uHŸ5 e udŸr ‘ udŸ5 9 P Ž P9 e uDŸr  uDŸ? e udŸr  udŸ? C Pr ~ PC e uTŸI e udŸI W Pí uTŸķ ú uCŸú ū Rū uCŸķ ū P "udŸuCŸ!R!"uCŸ!P"4u`Ÿ(/uCŸ/3R34uCŸ(3P4Fu\Ÿ:AuCŸAEREFuCŸ:EPFXuXŸLSuCŸSWRWXuCŸLWPXjuLŸ^euCŸeiRijuCŸ^iPj|uHŸpwuCŸw{R{|uCŸp{P|—uDŸ‚uCŸ‘R‘—uCŸ‚‘PP\P •WŠW#•uŋŸŠuŋŸ#+P P+•u`ŸŠ u`Ÿ1•udŸŠ udŸ19PüP9•u\ŸŠüu\Ÿ?•udŸŠüudŸ?GPėöPG•uXŸŠėuXŸM•udŸŠėudŸMUPŲæPU•uLŸŠŲuLŸ[•udŸŠŲudŸ[_PÉÖP_•uHŸŠÉuHŸe•udŸŠÉudŸeiPšÆPi•uDŸŠšuDŸo•udŸŠšudŸosPŠļPs•uTŸy•udŸy‡P%@uTŸ+2uŋŸ26R6@uŋŸ+6PH\uDŸNUuŋŸUYRY\uŋŸNYPdxuHŸjquŋŸquRuxuŋŸjuP€”uLŸ†uŋŸ‘R‘”uŋŸ†‘Pœ°uXŸĸŠuŋŸŠ­R­°uŋŸĸ­P¸Ėu\ŸžÅuŋŸÅÉRÉĖuŋŸžÉPÔču`ŸÚáuŋŸáåRåčuŋŸÚåPöũuŋŸũRuŋŸöP›¨u¨ŠQ›ŠP*„u´€Eu´*„uGŸƒŽuGŸŽ’R’EuGŸ*3P3>u´<Ÿƒ’P*>uLŸ“ĄW6>uHŸ™Ąu´6AP™¯P>LuPŸ°žuPŸDLuLŸļžuLŸDOPļÆPLZuTŸĮÕuTŸRZuPŸÍÕuPŸR]PÍßPZhuXŸāîuXŸ`huTŸæîuTŸ`kPæ÷Phvu\Ÿøu\ŸnvuXŸūuXŸnyPūPv„u`Ÿ&u`Ÿ|„u\Ÿ&u\Ÿ|„P7P*„ ŸøE ŸZŧ ŸéK ŸXy Ÿ*„uŦøEuŦZŧuŦéKuŦXyuŦ*„ ŸE ŸZĒ Ÿé> ŸXy Ÿ*„u°Eu°ZĒu°é>u°Xyu°douPŸosRsyuPŸdsP*„™Ÿ0E™ŸZ˜™Ÿé-™Ÿ*„u¤06W6Eu¤Z˜u¤é-u¤*„™ŸEE™ŸZ†™Ÿé˙™Ÿ -™Ÿ*„WEEWZeWe†uLŸéöWöûuLŸû˙W W-uLŸ -uLŸ#uHŸ#'R'-uHŸ'P*„F ŸSEF ŸZ†F ŸéûF Ÿ*„WSEWZeWe†uLŸéöWöûuLŸ*„F ŸfEF ŸZtF ŸéîF Ÿ*„u´fEu´Ztu´éîu´\tuHŸhouGŸosRstuGŸhsPt†uLŸzuGŸ…R…†uGŸz…P†˜uPŸŒ“uGŸ“—R—˜uGŸŒ—P˜ĒuTŸžĨuGŸĨŠRŠĒuGŸžŠPĒŧuXŸ°ˇuGŸˇģRģŧuGŸ°ģPŧÎu\ŸÂÉuGŸÉÍRÍÎuGŸÂÍPÎéu`ŸÔÛuGŸÛßRßéuGŸÔßP#P#)‘2V23‘#P#)‘2V23‘69p$#„9?p„?CPJSPuŠVxƒusŸƒ‡R‡ŠusŸx‡P’usŸĄRĄĢusŸ’ĄPÄV‘$'p$'0P$'p$#üŸ'0püŸnwPwÃVëûVmpPp~V‹˜VV57VV^V-0P0ęu ęëtœûvu vw‘˜wmu )ņu  u twPw¸VëûV‹˜VV57VV^Vƒ¸ä Ÿëûä Ÿ‹˜ä Ÿ*ä Ÿ5Iä ŸVhä Ÿƒ¸u¨ëûu¨‹˜u¨*u¨5Iu¨Vhu¨ƒ•u¨#Ÿ•šP¤¸ Ÿëû Ÿ‹˜ Ÿ5I ŸVh Ÿ¤¸u¨ëûu¨‹˜u¨5Iu¨Vhu¨¤­u¨#Ÿ­˛Pŧ¸›Ÿëû›Ÿ‹˜›Ÿ5I›ŸVh›Ÿŧ¸u¨ëûu¨‹˜u¨5Iu¨Vhu¨ŧÅu¨#ŸÅĘPÔ¸uŸëûuŸ‹˜uŸ5IuŸVhuŸÔ¸u¨ëûu¨‹˜u¨5Iu¨Vhu¨ÔŨu¨#ŸŨâPî U Ÿî u¨îu¨#ŸP  ōFō  u¨  V pŸP _ Ÿ u¨ u¨#ŸëûD Ÿëûu`Ÿëûu`#ŸE¸u`Ÿ‹˜u`Ÿ5Iu`ŸVhu`ŸE¸0Ÿ‹˜0Ÿ5I0ŸVh0Ÿ*u`Ÿ‰¸u\Ÿ‹˜u\ŸVhu\Ÿ­¸u\Ÿ‹˜u\Ÿ°¸u`Ÿ‹˜u`Ÿ°¸P‹’PÃÖuXŸ uXŸÎÖu\ŸVÎŲP'PÖäuTŸ(6uTŸÜäu\Ÿ.6u\ŸÜįP.GPäōuHŸHVuHŸęōu\ŸNVu\ŸęõPNgPōuDŸhvuDŸøu\Ÿnvu\ŸøPn‡Pu@Ÿˆ–u@Ÿu\ŸŽ–u\ŸPާPuPŸ¨ļuPŸu\ŸŽļu\ŸPŽĮPÃVøÕVÃuŧŸûuŧŸ R ÕuŧŸÃËPËÖv<Ÿû PAVAęuŦęët¨ûvuŦvw‘¤wmuŦ~‹V)ņuŦ uŦęuXŸęëtTŸûvuXŸvw‘PŸwmuXŸ~‹uXŸ)ņuXŸ uXŸP~…PAVuXŸo}uXŸNVu\Ÿu}u\ŸNYPu‡PVduTŸˆ–uTŸ\du\ŸŽ–u\Ÿ\gPާPdruHŸ¨ļuHŸjru\ŸŽļu\ŸjuPŽĮPr€uDŸČÖuDŸx€u\ŸÎÖu\ŸxƒPÎįP€Žu@Ÿčöu@Ÿ†Žu\Ÿîöu\Ÿ†‘PîPŽœuPŸuPŸ”œu\Ÿu\Ÿ”œP'PAœu\Ÿ\5u\ŸAœuŧŸ_juŧŸjnRn5uŧŸAKPKVu\<Ÿ_nP5Tu5ęu ęëtœûvu vw‘˜wmu .ņu  u p|P3ĩu\ŸwŊu\Ÿ-mu\Ÿ6ĩuģŸwŊuģŸ-muģŸ6>P]gP>ĩuXŸwŊuXŸ-]uXŸDĩu\ŸwŊu\Ÿ-]u\ŸDLPMWPLĩuTŸwŊuTŸ-MuTŸRĩu\ŸwŊu\Ÿ-Mu\ŸRZP=GPZĩuPŸwŊuPŸ-=uPŸ`ĩu\ŸwŊu\Ÿ-=u\Ÿ`hP-7PhĩuDŸwŊuDŸnĩu\ŸwŊu\ŸnvP­ˇPvĩu@Ÿw­u@Ÿ|ĩu\Ÿw­u\Ÿ|‡P‡’u@<Ÿw‡P„’uŧŸˆ–uŧŸŠ’u\ŸŽ–u\ŸŠ’PާP’ĩuLŸ˜ĩu\Ÿ˜§PĩĪuĩÂudÃÆp$ÆÎPÎĶp´~ŸûPK[Pŋ9u\ŸŊ-u\ŸÂ9uģŸŊ-uģŸÂĘP'PĘ9uXŸŊuXŸĐ9u\ŸŊu\ŸĐØP PØ9uTŸŊ uTŸŪ9u\ŸŊ u\ŸŪæPũPæ9uPŸŊũuPŸė9u\ŸŊũu\ŸėôPí÷Pô9uDŸŊíuDŸú9u\ŸŊíu\ŸúPŨįP9u@ŸŊŨu@Ÿ9u\ŸŊŨu\ŸPÍ×P9uŧŸŊÍuŧŸ9u\ŸŊÍu\ŸPŊĮP9uLŸ$9u\Ÿ$/P0DuLŸ6=uģŸ=ARADuģŸ6APFZuŧŸLSuģŸSWRWZuģŸLWP\pu@ŸbiuģŸimRmpuģŸbmPr†uDŸxuģŸƒRƒ†uģŸxƒPˆœuPŸŽ•uģŸ•™R™œuģŸŽ™Pž˛uTŸ¤ĢuģŸĢ¯R¯˛uģŸ¤¯P´ČuXŸēÁuģŸÁÅRÅČuģŸēÅPĘŪu\ŸĐ×uģŸ×ÛRÛŪuģŸĐÛP`vuvwQ`vu`vw‘Xiw1ŸivuvwQšŦu\Ÿ §uŧŸ§ĢRĢŦuŧŸ ĢPŦžuXŸ˛šuŧŸšŊRŊžuŧŸ˛ŊPžĐuTŸÄËuŧŸËĪRĪĐuŧŸÄĪPĐâuHŸÖŨuŧŸŨáRáâuŧŸÖáPâôuDŸčīuŧŸīķRķôuŧŸčķPôu@ŸúuŧŸRuŧŸúPuPŸ uŧŸRuŧŸ P7Iu\Ÿ=IuXŸ=IPl|u\Ÿr|uXŸr|PŦģP¸ VĖ ū V!!Vy##VŦģpøŸ¸ĪR¸ĪrŸ  l Ÿ7"Œ"l Ÿ™"Å"l Ÿō",#l Ÿ“#Ã#l Ÿ  V  t  t  uPŸ7"Œ"uPŸ™"Å"uPŸō",#uPŸ“#Ã#uPŸ&  l Ÿ7"Œ"l Ÿ™"ŗ"l Ÿō",#l Ÿ #Ã#l Ÿ& n Vn  uTŸ7"Œ"uTŸ™"Ÿ"VŸ"ŗ"uTŸō"ø"Vø"#uTŸ##V#*#uTŸ*#,#V #Ģ#VĢ#Ã#uTŸŽ#š#udŸš#Ŋ#RŊ#Ã#udŸŽ#Ŋ#P?  ŗŸ7"Œ"ŗŸō",#ŗŸ? E WE F tF J tJ  u`Ÿ7"Œ"u`Ÿō",#u`ŸT  ŗŸ7"Œ"ŗŸ#,#ŗŸT  W7"Œ"W##W#*#udŸ*#,#Wq  W7"Œ"Wt  uGŸ7"Œ"uGŸt | PL"W"P|  u`Ÿ7"L"u`Ÿ]"Œ"u`Ÿ‚  udŸ7"L"udŸ]"Œ"udŸ‚ Š P]"f"PŠ  uTŸ7"L"uTŸl"Œ"uTŸ  udŸ7"L"udŸl"Œ"udŸ ˜ Pl"v"P˜  uPŸ7"L"uPŸ|"Œ"uPŸž  udŸ7"L"udŸ|"Œ"udŸž Ļ P|"†"PĻ  uLŸ7"L"uLŸŦ  udŸ7"L"udŸŦ ´ P7"F"P´  u\Ÿē  udŸē  PĖ !u!!t!!uĖ ū V!!V!Ö!IŸė!7"IŸŒ"™"IŸ,#y#IŸ!Ö!Ÿė!7"ŸŒ"™"Ÿ,#y#Ÿ1!Ö!Ä ŸŒ"™"Ä Ÿ,#d#Ä Ÿw#y#Ä Ÿ1!Ö!ŸŒ"™"Ÿ,#d#Ÿw#y#Ÿ^!b!t^!b!t^!b!Pb!€!Vw#y#VŊ!Ö!WŒ"™"WĀ!Ö!u\ŸŒ"™"u\ŸĀ!Č!PŒ"“"PČ!Ö!u`ŸÎ!Ö!udŸÎ!Ö!P"6"u6"7"‘"6"u6"7"‘ " "t" "t" "P "4"V4"6"u6"7"‘Ą"ŗ"uTŸ§"Ž"uGŸŽ"˛"R˛"ŗ"uGŸ§"˛"Pŗ"Å"uPŸš"Ā"uGŸĀ"Ä"RÄ"Å"uGŸš"Ä"PÅ"×"uLŸË"Ō"uGŸŌ"Ö"RÖ"×"uGŸË"Ö"P×"é"u\ŸŨ"ä"uGŸä"č"Rč"é"uGŸŨ"č"Pú"#u`Ÿ##uGŸ# #R ##uGŸ# #P#*#udŸ###uGŸ##'#R'#*#uGŸ#'#P.#F#udŸ:#A#u\ŸA#E#RE#F#u\Ÿ:#E#PF#Z#u`ŸL#S#u\ŸS#W#RW#Z#u\ŸL#W#PĶ#ī#u„%ˆ%Pˆ%Z&uŦZ&[&t¨Í&ô'uŦô'õ'‘¤õ'K(uŦÄ(Î)uŦÜ)*uŦ*(*uŦ $$PÎ$o%V[&Í&VŅ$o%uCŸ[&Í&uCŸŅ$Ũ$Pŧ&Į&PŨ$o%u`Ÿ[&ŧ&u`Ÿã$o%udŸ[&ŧ&udŸã$ī$PŦ&ļ&Pī$o%u\Ÿ[&Ŧ&u\Ÿõ$o%udŸ[&Ŧ&udŸõ$%Pœ&Ļ&P%o%uXŸ[&œ&uXŸ%o%udŸ[&œ&udŸ%%PŒ&–&P%o%uLŸ[&Œ&uLŸ%o%udŸ[&Œ&udŸ%%%P|&†&P%%o%uHŸ[&|&uHŸ+%o%udŸ[&|&udŸ+%7%Pl&v&P7%o%uDŸ[&l&uDŸ=%o%udŸ[&l&udŸ=%I%P[&f&PI%o%uTŸO%o%udŸO%a%PM(c(uXŸS(^(uCŸ^(b(Rb(c(uCŸS(b(Pc(y(uLŸi(t(uCŸt(x(Rx(y(uCŸi(x(Py((uHŸ(Š(uCŸŠ(Ž(RŽ((uCŸ(Ž(P(Ĩ(uDŸ•( (uCŸ (¤(R¤(Ĩ(uCŸ•(¤(PĨ(ģ(uTŸĢ(ļ(uCŸļ(ē(Rē(ģ(uCŸĢ(ē(P1*G*udŸ7*B*uCŸB*F*RF*G*uCŸ7*F*PG*]*u`ŸM*X*uCŸX*\*R\*]*uCŸM*\*P]*|*u\Ÿc*r*uCŸr*v*Rv*|*uCŸc*v*P÷%<&V&(K(Vú%<&uPŸ&(K(uPŸú%&P&(-(P&<&u\Ÿ3(K(u\Ÿ &<&udŸ3(K(udŸ &&P3(9(P&<&uXŸ?(K(uXŸ&<&udŸ?(K(udŸ&*&P?(E(P*&<&uTŸ0&<&udŸ0&<&P<&N&u`ŸĪ'á'u`ŸB&N&udŸÕ'á'udŸB&V&PÕ'į'Ps'Č'Võ'&(Vv'Č'uHŸõ'&(uHŸv'~'Põ'ü'P~'Č'u\Ÿ(&(u\Ÿ„'Č'udŸ(&(udŸ„'Œ'P((PŒ'Č'uXŸ (&(uXŸ’'Č'udŸ (&(udŸ’'š'P ((Pš'Č'uTŸ(&(uTŸ 'Č'udŸ(&(udŸ '¨'P((P¨'Č'uPŸ(&(uPŸŽ'Č'udŸ(&(udŸŽ'ļ'P(#(Pļ'Č'uLŸŧ'Č'udŸŧ'Č'PÆ(Ü(uLŸĖ(×(uHŸ×(Û(RÛ(Ü(uHŸĖ(Û(PÜ(ô(u`Ÿâ(í(uHŸí(ņ(Rņ(ô(uHŸâ(ņ(Pö( )udŸü()uHŸ) )R ) )uHŸü( )P )")u\Ÿ))uHŸ)!)R!)")uHŸ)!)P")8)uXŸ()3)uHŸ3)7)R7)8)uHŸ()7)P8)N)uTŸ>)I)uHŸI)M)RM)N)uHŸ>)M)PN)m)uPŸT)c)uHŸc)g)Rg)m)uHŸT)g)P{)‘)uXŸ)Œ)uPŸŒ))R)‘)uPŸ))P‘)§)uTŸ—)ĸ)uPŸĸ)Ļ)RĻ)§)uPŸ—)Ļ)P§)Æ)u`Ÿ­)ŧ)uPŸŧ)Ā)RĀ)Æ)uPŸ­)Ā)Pė)*u\Ÿō)ũ)uPŸũ)*R**uPŸō)*P*(*udŸ*!*uPŸ!*%*R%*(*uPŸ*%*P‘PWRéW ’W=JVRjV&=V=J‘Rj‘&2p|Ÿ&2P=HPR]P]_ ‘#4Ÿ=?R?Hp|ŸR]p|Ÿ]_ ‘#8Ÿ=JWRjW=J1ŸRj1Ÿ?Hr4ŸRdr4Ÿĸ­r4Ÿ­ģ‘X4Ÿ#p4Ÿƒ’r4Ÿģ˙U˙ v#kUģÃUÃŌ0ŸŌÖur"ŸÖäQé W#:Q:H‘XHk0Ÿ„ŽPŽšu1$Ÿ #1Ÿk’PŒkōT2}’ōT2š VkVƒ’VĸģVĸģ0Ÿģ V#kVģËQģŊur"ŸŊĮRÅ V#kVÅ˙U˙ v#kUÅéW#kWÅŌPH^PÅ 1Ÿ#k1ŸÉŌr4ŸH^r4Ÿ^k‘X4ŸÖ V#HVÖäQ#:Q:H‘XÖäv#,vÖéW#HWÖ 1Ÿ#H1ŸÛär4Ÿ#:r4Ÿ:H‘\4Ÿé Véņ vp4ŸéõPíųVíņ vp4ŸíõPJu Ēu ‰W‰ŠudŸŠt`ŸžW)CV)1w#Ÿ9=pŸ=BPĒu ĒudŸĒ0Ÿĸud#Ÿĸ§PXŠudŸŠt`ŸX0Ÿ‘PWRéW ’W=JVRjV&=V=J‘Rj‘&2p|Ÿ&2P=HPR]P]_ ‘#4Ÿ=?R?Hp|ŸR]p|Ÿ]_ ‘#8Ÿ=JWRjW=J1ŸRj1Ÿ?Hr4ŸRdr4Ÿĸ­r4Ÿ­ģ‘X4Ÿ#p4Ÿƒ’r4Ÿģ˙U˙ v#kUģÃUÃŌ0ŸŌÖur"ŸÖäQé W#:Q:H‘XHk0Ÿ„ŽPŽšu1$Ÿ #1Ÿk’PŒkō<}’ō<š VkVƒ’VĸģVĸģ0Ÿģ V#kVģËQģŊur"ŸŊĮRÅ V#kVÅ˙U˙ v#kUÅéW#kWÅŌPH^PÅ 1Ÿ#k1ŸÉŌr4ŸH^r4Ÿ^k‘X4ŸÖ V#HVÖäQ#:Q:H‘XÖäv#,vÖéW#HWÖ 1Ÿ#H1ŸÛär4Ÿ#:r4Ÿ:H‘\4Ÿé Véņ vp4ŸéõPíųVíņ vp4ŸíõP‘:Q@DQTnQ'Pw4ŸTnw4ŸOVOT‘TnVTdR‘6W6:t;vW(BVWmV(BUWmU(6W6:tWmW(6wŸ6:t#ŸWmwŸZjP(BU(6W6:t(B1Ÿ{ē‘X“ēČR“,P,ē‘ČÚ‘,P,ē‘ČÚ‘ē‘ČÚ‘;R;GWGČ‘X;W;GwGÄWČäW…ē‘;ē‘;GwŸGK‘X#ŸKwwŸV]V]^pt;KUV[Q[ÅU;KPkPVgP…ē‘X#ŸēČrŸ…ē‘…ÅUÃVĨ´PŸPČÚ‘ČÚ‘\ÚčRČÚ‘ÚŪPÉß“0Ÿ“#¯0Ÿ“u`“¯˛0Ÿ“t\“˛Ę0Ÿ“u`“Ę×0Ÿ“V“×0Ÿ“u`“:ußâu:u ßâu HNPАPßâuT +P+:uTLNPßâP :1Ÿ:H0ŸHNQN1ŸŠ0ŸŠĸQßâ1ŸûūP“ū Q“ÃĘ0Ÿ“P:u :ÜuT4ŸÜßtP4Ÿßâu â¯uT4Ÿ¯˛tP4Ÿ˛uT4ŸNfu LNpŸNfu:ud:NVZĸV:CPwˆP:NWl”W” P ĸud:Nu\lptpĸu\¨Ŧu ¨ŦuÃĘ@Ÿ¨ŧV¨ŗRŗÜuXÜßR˛ĘRēÉP˛ģP¨Üu\ÜßtX˛Ęu\¨ÜudÜßt`˛Ęudđ ō¤LÉÜuÜßP#KuĘ×u#¯u`¯˛t\Ę×V×u`#˛0ŸĘ0Ÿ#Ku Ę×u _ˆWˆ‘P‘ŽW×ŲWŲõ1ŸõW/Ku /_u`#ŸŲõu`#Ÿ/Ku@IWIJpt@_VŲíVT_PŲįP@_u`#ŸŲõu`#Ÿ@PR@PP_wuwxtx|tŲõu_˛1Ÿ×1Ÿ_˛0Ÿ×0Ÿnwuwxtx|tđõun|PđõPœ¯u¯˛P0:P:Pu4ģÅPÅĮu40ĮŸĖߟ—ģ” ŸĖß” Ÿ uŦ~Ÿ +P+ĘWĘÄuü}ÄĮ‘ô}Įāuü}āäWämuü}+uā~Ÿ+6P6Äu¤~ÄĮ‘œ~Įmu¤~qĘWĘÄuü}ÄĮ‘ô}Įāuü}āäWämuü}¸Áu´~ŸÁęQęÄu„~ÄĮ‘ü}Įāu„~äu„~+mu„~čuŦ~ŸjāHŸäčHŸ+EHŸGmHŸj°u¸~Ÿ°ČRČÄu˜~ÄĮ‘~Įāu˜~äču˜~+Eu˜~Gmu˜~—°uÜ~Ÿ°Čr$ŸČÄu˜~#$ŸÄĮ‘~#$ŸĮāu˜~#$Ÿäču˜~#$Ÿ+Eu˜~#$ŸGmu˜~#$Ÿ+uā~ŸĪÄu ÄĮ‘Įāu äču +4u ĪÄu„~ÄĮ‘ü}Įāu„~äču„~+Au„~Īā0Ÿäč0Ÿ+A0ŸĪŌpáÄuü}ÄĮ‘ô}Įāuü}õÄuü}ÄĮ‘ô}Įāuü} Äu˜~ÄĮ‘~Įāu˜~ÄuÜ~ŸÄĮ‘Ô~ŸĮāuÜ~Ÿ%ÄuĢ~ŸÄĮ‘Ŗ~ŸĮāuĢ~Ÿ%1PĮÚP1Äu¸~ŸÄĮ‘°~ŸNÄuŦ~ŸÄĮ‘¤~ŸjÄu´~ŸÄĮ‘Ŧ~Ÿ†ÄuŦ~ŸÄĮ‘¤~ŸœÄuā~ŸÄĮ‘Ø~ŸĮ*ß*uPŸß*,+uHŸ,+/+tDŸH+¯+uHŸĮ*Õ*uHŸÕ*Ū*PŪ*,+uHŸ,+/+tDŸH+¯+uHŸß*,+uHŸ,+/+tDŸH+¯+uHŸß*â*uPŸâ*ę*Pę*,+uPŸ,+/+tLŸH+¯+uPŸ+++W++,+u`Ÿ,+/+t\ŸH+i+W+,+u_Ÿ,+/+t[ŸH+i+u_Ÿ++PH+W+P+,+udŸ,+/+t`ŸZ+i+udŸ+,+u`Ÿ,+/+t\ŸZ+i+u`Ÿ+#+PZ+f+Pt++udŸz+‚+u_Ÿ‚+†+R†++u_Ÿz+†+Pž+¨+u_Ÿ¨+Ŧ+RŦ+¯+u_Ÿž+Ŧ+P,,u°Ÿ,.u¨Ÿ,,u¨Ÿ,,P,.u¨Ÿ, ,u°Ÿ ,(,P(,.u°Ÿ2,.jŸV..jŸ2,ķ-Vķ-.u`ŸV.X.VX.Z.u`ŸZ.^.V^.k.u`Ÿk.m.Vm.|.u`Ÿ|.€.V€..u`ŸD,ū-jŸZ..jŸD,g,Wg,ū-uPŸZ.k.Wk..uPŸD,M,w#ŸM,R,P^,g,Wg,ū-uPŸk..uPŸ^.k.uPŸx,ū-…Ÿk..…Ÿx,,P,Á,u¤k.n.u¤‰,ū-…Ÿk..…Ÿ‰,ž,Wž,ū-uTŸk.|.W|..uTŸ‰,’,w#Ÿ’,—,PĨ,ž,Wž,ū-uTŸ|..uTŸm.|.uTŸÁ,ū-ŒŸ|..ŒŸÁ,Č,PČ, -u¤|.}.u¤Ō,ū-ŒŸ|..ŒŸŌ,÷,W÷,ū-uXŸ|..WŌ,Û,w#ŸÛ,ā,Pî,÷,W÷,ū-uXŸ -ū-€Ÿ --P-Š-u¤œ-Š-u¤ī-đ-u¤-ū-€Ÿ-ū-W-#-w#Ÿ#-(-P6-ī-Wķ-ū-u\Ÿ\-ī-V\-ī-udŸ\-ī-0Ÿ|-Ž-QŲ-é-Qé-ī-u ‡-œ-WŲ-ī-W‡-Ž-PŲ-é-PŠ-Ų-uHŸ¯-Ų-u`Ÿ¯-´-PĪ-Ö-P´-Ī-uLŸē-Ī-u`Ÿē-É-Pū-.u`Ÿū-.udŸ. .P ..udŸ.).uHŸ.$.uGŸ$.(.R(.).uGŸ.(.P).E.uLŸ/.7.uGŸ7.;.R;.E.uGŸ/.;.På.ú.u°Ÿú.u1u¨Ÿå.ķ.u¨Ÿķ.ų.Pų.u1u¨Ÿú./u°Ÿ/ /P /u1u°Ÿ/×0jŸū01jŸ:1q1jŸ/×0Vū01V11u`Ÿ:1>1V>1K1u`ŸK1M1VM1\1u`Ÿ\1`1V`1m1u`Ÿm1o1Vo1q1u`Ÿ)/×0jŸū0 1jŸ:1m1jŸ)/L/WL/×0uPŸū0 1uPŸ:1\1uPŸ\1m1W)/2/w#Ÿ2/7/PC/L/WL/×0uPŸū0 1uPŸ:1\1uPŸ`1m1uPŸ]/×0vŸū0 1vŸ:1\1vŸ]/d/Pd/Ļ/u¤K1N1u¤n/×0vŸū0 1vŸ:1\1vŸn/Ŗ/WŖ/×0uTŸū0 1uTŸ:1K1uTŸK1\1Wn/w/w#Ÿw/|/PŠ/Ŗ/WŖ/×0uTŸū0 1uTŸ:1K1uTŸM1\1uTŸĻ/×0ŒŸū0 1ŒŸ:1K1ŒŸĻ/­/P­/î/u¤:1;1u¤ˇ/×0ŒŸū0 1ŒŸ:1K1ŒŸˇ/Ü/WÜ/×0uXŸū0 1uXŸ:1K1Wˇ/Ā/w#ŸĀ/Å/PĶ/Ü/WÜ/×0uXŸū0 1uXŸ>1K1uXŸî/×0€Ÿū0 1€Ÿî/õ/Põ/o0u¤Ĩ0ą0u¤ū0˙0u¤˙/×0€Ÿū0 1€Ÿ˙/×0Wū0 1W˙/0w#Ÿ0 0P0×0W1 1u\ŸA0×0VA0×0udŸA0×00Ÿa0s0QÁ0Ņ0QŅ0×0u l00WÁ0×0Wl0s0PÁ0Ņ0P0Ĩ0uHŸŗ0Á0uHŸ…0Ĩ0u`Ÿŗ0Á0u`Ÿ…0Š0Pŗ0ž0PŠ0Ĩ0uLŸ0Ĩ0u`Ÿ0Ÿ0Pâ0ū0uLŸč0đ0uGŸđ0ô0Rô0ū0uGŸč0ô0P 11u`Ÿ 11udŸ11P11udŸ1:1uHŸ)131uGŸ3171R71:1uGŸ)171PÕ1ę1u°Ÿę1e4u¨ŸÕ1ã1u¨Ÿã1é1Pé1e4u¨Ÿę1õ1u°Ÿõ1ũ1Pũ1e4u°Ÿ2Į3jŸî3 4jŸ*4a4jŸ2Į3Vî3ō3Vō3 4u`Ÿ*4.4V.4;4u`Ÿ;4=4V=4L4u`ŸL4P4VP4]4u`Ÿ]4_4V_4a4u`Ÿ2Į3jŸî3ũ3jŸ*4]4jŸ2<2W<2Į3uPŸî3ũ3uPŸ*4L4uPŸL4]4W2"2w#Ÿ"2'2P32<2W<2Į3uPŸî3ũ3uPŸ*4L4uPŸP4]4uPŸM2Į39 Ÿî3ũ39 Ÿ*4L49 ŸM2T2PT2–2u¤;4>4u¤^2Į39 Ÿî3ũ39 Ÿ*4L49 Ÿ^2“2W“2Į3uTŸî3ũ3uTŸ*4;4uTŸ;4L4W^2g2w#Ÿg2l2Pz2“2W“2Į3uTŸî3ũ3uTŸ*4;4uTŸ=4L4uTŸ–2Į3ŒŸî3ũ3ŒŸ*4;4ŒŸ–22P2Ū2u¤*4+4u¤§2Į3ŒŸî3ũ3ŒŸ*4;4ŒŸ§2Ė2WĖ2Į3uXŸî3ũ3uXŸ*4;4W§2°2w#Ÿ°2ĩ2PÃ2Ė2WĖ2Į3uXŸî3ũ3uXŸ.4;4uXŸŪ2Į3€Ÿî3ũ3€ŸŪ2å2På2_3u¤•3Ą3u¤î3ī3u¤ī2Į3€Ÿî3ũ3€Ÿī2Į3Wî3ũ3Wī2ø2w#Ÿø2ũ2P 3Į3Wō3ũ3u\Ÿ13Į3V13Į3udŸ13Į30ŸQ3c3Qą3Á3QÁ3Į3u \3o3Wą3Į3W\3c3Pą3Á3Po3•3uHŸŖ3ą3uHŸu3•3u`ŸŖ3ą3u`Ÿu3z3PŖ3Ž3Pz3•3uLŸ€3•3u`Ÿ€33PŌ3î3uLŸØ3ā3uGŸā3ä3Rä3î3uGŸØ3ä3Pũ3 4u`Ÿũ34udŸ4 4P 4 4udŸ 4*4uHŸ4#4uGŸ#4'4R'4*4uGŸ4'4PÅ4Ú4u°ŸÚ4U7u¨ŸÅ4Ķ4u¨ŸĶ4Ų4PŲ4U7u¨ŸÚ4å4u°Ÿå4í4Pí4U7u°Ÿ÷4ˇ6jŸŪ6ũ6jŸ7Q7jŸ÷4ˇ6VŪ6â6Vâ6ũ6u`Ÿ77V7+7u`Ÿ+7-7V-7<7u`Ÿ<7@7V@7M7u`ŸM7O7VO7Q7u`Ÿ 5ˇ6jŸŪ6í6jŸ7M7jŸ 5,5W,5ˇ6uPŸŪ6í6uPŸ7<7uPŸ<7M7W 55w#Ÿ55P#5,5W,5ˇ6uPŸŪ6í6uPŸ7<7uPŸ@7M7uPŸ=5ˇ6? ŸŪ6í6? Ÿ7<7? Ÿ=5D5PD5†5u¤+7.7u¤N5ˇ6? ŸŪ6í6? Ÿ7<7? ŸN5ƒ5Wƒ5ˇ6uTŸŪ6í6uTŸ7+7uTŸ+7<7WN5W5w#ŸW5\5Pj5ƒ5Wƒ5ˇ6uTŸŪ6í6uTŸ7+7uTŸ-7<7uTŸ†5ˇ6ŒŸŪ6í6ŒŸ7+7ŒŸ†55P5Î5u¤77u¤—5ˇ6ŒŸŪ6í6ŒŸ7+7ŒŸ—5ŧ5Wŧ5ˇ6uXŸŪ6í6uXŸ7+7W—5 5w#Ÿ 5Ĩ5Pŗ5ŧ5Wŧ5ˇ6uXŸŪ6í6uXŸ7+7uXŸÎ5ˇ6€ŸŪ6í6€ŸÎ5Õ5PÕ5O6u¤…6‘6u¤Ū6ß6u¤ß5ˇ6€ŸŪ6í6€Ÿß5ˇ6WŪ6í6Wß5č5w#Ÿč5í5Pû5ˇ6Wâ6í6u\Ÿ!6ˇ6V!6ˇ6udŸ!6ˇ60ŸA6S6QĄ6ą6Qą6ˇ6u L6_6WĄ6ˇ6WL6S6PĄ6ą6P_6…6uHŸ“6Ą6uHŸe6…6u`Ÿ“6Ą6u`Ÿe6j6P“6ž6Pj6…6uLŸp6…6u`Ÿp66PÂ6Ū6uLŸČ6Đ6uGŸĐ6Ô6RÔ6Ū6uGŸČ6Ô6Pí6ũ6u`Ÿí6ō6udŸō6ų6Pų6ũ6udŸũ67uHŸ 77uGŸ77R77uGŸ 77Pĩ7Ę7u°ŸĘ7E:u¨Ÿĩ7Ã7u¨ŸÃ7É7PÉ7E:u¨ŸĘ7Õ7u°ŸÕ7Ũ7PŨ7E:u°Ÿį7§9jŸÎ9í9jŸ :A:jŸį7§9VÎ9Ō9VŌ9í9u`Ÿ ::V::u`Ÿ::V:,:u`Ÿ,:0:V0:=:u`Ÿ=:?:V?:A:u`Ÿų7§9jŸÎ9Ũ9jŸ :=:jŸų78W8§9uPŸÎ9Ũ9uPŸ :,:uPŸ,:=:Wų78w#Ÿ88P88W8§9uPŸÎ9Ũ9uPŸ :,:uPŸ0:=:uPŸ-8§9F ŸÎ9Ũ9F Ÿ :,:F Ÿ-848P48v8u¤::u¤>8§9F ŸÎ9Ũ9F Ÿ :,:F Ÿ>8s8Ws8§9uTŸÎ9Ũ9uTŸ ::uTŸ:,:W>8G8w#ŸG8L8PZ8s8Ws8§9uTŸÎ9Ũ9uTŸ ::uTŸ:,:uTŸv8§9ŒŸÎ9Ũ9ŒŸ ::ŒŸv8}8P}8ž8u¤ : :u¤‡8§9ŒŸÎ9Ũ9ŒŸ ::ŒŸ‡8Ŧ8WŦ8§9uXŸÎ9Ũ9uXŸ ::W‡88w#Ÿ8•8PŖ8Ŧ8WŦ8§9uXŸÎ9Ũ9uXŸ::uXŸž8§9€ŸÎ9Ũ9€Ÿž8Å8PÅ8?9u¤u99u¤Î9Ī9u¤Ī8§9€ŸÎ9Ũ9€ŸĪ8§9WÎ9Ũ9WĪ8Ø8w#ŸØ8Ũ8Pë8§9WŌ9Ũ9u\Ÿ9§9V9§9udŸ9§90Ÿ19C9Q‘9Ą9QĄ9§9u <9O9W‘9§9W<9C9P‘9Ą9PO9u9uHŸƒ9‘9uHŸU9u9u`Ÿƒ9‘9u`ŸU9Z9Pƒ9Ž9PZ9u9uLŸ`9u9u`Ÿ`9o9P˛9Î9uLŸ¸9Ā9uGŸĀ9Ä9RÄ9Î9uGŸ¸9Ä9PŨ9í9u`ŸŨ9â9udŸâ9é9Pé9í9udŸí9 :uHŸų9:uGŸ::R: :uGŸų9:P%3U37 ‘v5&ŸjnUnp ‘v5&Ÿ7|vŸ“|€vhŸ“ĻŗvŸ“ŗĩV“ĩŋvŸ“ŋĘvxŸ“ĘĪp8Ÿ“Ī×vŸ“×âvpŸ“âįp@Ÿ“įųvhŸ“7€WĻËWËĪ‘ ĪãWãį‘ įųW7|vŸ|€vhŸĻŗvŸŗĩVĩŋvŸŋĘvxŸĘĪp8ŸĪ×vŸ×âvpŸâįp@ŸįųvhŸ7FvFGtGK‘PS|vŸ“|€vpŸ“ĩŋvŸ“ŋĘV“ĘĪp“Ī×vŸ“×âvxŸ“âįp8Ÿ“įųvpŸ“S€WĩËWËĪ‘ ĪãWãį‘ įųWS|vŸ|€vpŸĩŋvŸŋĘVĘĪpĪ×vŸ×âvxŸâįp8ŸįųvpŸSYvYZtZ^‘Pf|vŸ“|€vxŸ“Ī×vŸ“×âV“âįp“įųvxŸ“f€WĪãWãį‘ įųWf|vŸ|€vxŸĪ×vŸ×âVâįpįųvxŸflvlmtmq‘P7|V“|€v`Ÿ“€’V“ĻŗV“ŗĩvxŸ“ĩŋV“ŋĘvpŸ“ĘĪp@Ÿ“Ī×V“×âvhŸ“âįpHŸ“įųv`Ÿ“7˜WĻËWËĪ‘ ĪãWãį‘ įųW7|V|€v`Ÿ€’VĻŗVŗĩvxŸĩŋVŋĘvpŸĘĪp@ŸĪ×V×âvhŸâįpHŸįųv`Ÿ€…v…†t†Š‘P7€ōq‰Ļųōq‰S€ōq‰ĩųōq‰f€ōq‰Īųōq‰ 6U“ 6W 6U &u&'t'+‘P36ōq‰6LU“6LW6LU6<u<=t=A‘PILōq‰L_U“L_WL_ULRuRStSW‘P#DRÜåRDgwŸ“gqwtŸ“žÅwŸ“ÅÉR“ÉwŸ“-wtŸ“DqōuŽž-ōuŽDq‘ ž-‘ DgwŸgqwtŸžÅwŸÅÉRÉwŸ-wtŸžÄVžÆUžĒPPgwŸ“gqwxŸ“ÉwŸ“-wxŸ“PqōuŽÉ-ōuŽPq‘ É-‘ PgwŸgqwxŸÉwŸ-wxŸÉņVÉņUÉÚPXgw Ÿ“gqw|Ÿ“ņw Ÿ“-w|Ÿ“XqōuŽņ-ōuŽXq‘ ņ-‘ Xgw Ÿgqw|Ÿņw Ÿ-w|ŸņVņUņPDgW“gqwpŸ“qW“žÅW“ÅÉr|Ÿ“ÉW“-wpŸ“DōuŽž-ōuŽD‘ ž-‘ DgWgqwpŸqWžÅWÅÉr|ŸÉW-wpŸxVxUx‚PDqōWŽž-ōWŽPqōWŽÉ-ōWŽXqōWŽņ-ōWŽT^V“ĀÜV“T^ōuŽĀÜōuŽT^‘ ĀÜ‘ T^VĀÜVĀÜUĀÎRÎÜ‘\ĀÎP[^ōWŽ^wV“^wōuŽ^w‘ ^wVewUeoReoPĸV“ĸ¤v|Ÿ“¤ĀV“ĀōuŽĀ‘ ĸVĸ¤v|Ÿ¤ĀV˜Ā‘ ¤˛Q¤˛R˛ž‘\žĀR¤˛PŸ¤ōWŽ)7P7= ‘v4&Ÿ=ŅW_nWnr‘ rˆWBRPBŅW_nWnr‘ rˆW^ŅW_nWnr‘ rˆWaqPaŅW_nWnr‘ rˆW}ŅWrˆW€P€ŅWrˆWœŅW€ˆWŸ¯PŸŅW€ˆWķWõPõW ō8–-W"P-W*-ō8–-GW/?P/GW^Ņō8–_ˆō8–}Ņō8–rˆō8–œŅō8–€ˆō8–/;[;W“];s;W“8<}<W“t:z:Vz:{:t{::t:\;uPŸ\;];‘HŸ];å<uPŸå<æ<tLŸæ<ū=uPŸt:z:uTŸz:˜:V˜:Ÿ:tŸ:\;uTŸ\;];‘LŸ];å<uTŸå<æ<tPŸæ<A=uTŸA=G=VG=ū=uTŸ…:ˆ:pԟˆ:\;u#TŸ\;];‘#TŸ];Û<u#TŸæ<=u#TŸ,=A=u#TŸd=ū=u#TŸ…:ˆ:p؟ˆ:\;u#XŸ\;];‘#XŸ];i;p؟i;ß;u#XŸß;û;qŸû;ŗ<u#XŸæ<ø<r؟ø<=u#XŸ,=A=qŸd=ū=u#XŸ‹:\;u#TŸ\;];‘#TŸ];Û<u#TŸæ<=u#TŸ,=A=u#TŸd=ū=u#TŸ‹:\;u#TŸ\;];‘#TŸ];Đ;u#TŸĐ;Ķ;rԟĶ;Ü;u#TŸÜ;û;Qû;ŗ<u#TŸæ<=u#TŸ,=A=Qd=ū=u#TŸ‘:˜:V˜:Ÿ:tŸ:\;uTŸ\;];‘LŸ];å<uTŸå<æ<tPŸæ<A=uTŸd=ū=uTŸ‘:•:u#X“•:\;u¸“\;];‘°“];ļ;u¸“<<u¸“ū<=u¸“d=ū=u¸“‘:;W“<<W“d=l=W“’=”=W“Å=Į=W“Û=Ũ=W“‘:”:uXŸ”:Ÿ:PŸ:Š:VŠ:\;u°\;];‘¨];å<u°å<æ<tŦæ<A=u°d=’=u°’=š=Vš=ū=u°ĸ:Š:VŠ:\;u°\;];‘¨];å<u°å<æ<tŦæ<A=u°d=~=u°œ=ū=u°ĸ:Ĩ:u`ŸĨ:°:P°:É:VÉ:\;u´\;];‘Ŧ];å<u´å<æ<t°æ<A=u´d=j=Vj=~=u´œ=Û=u´Û=æ=Væ=ū=u´ļ:É:VÉ:\;u´\;];‘Ŧ];å<u´å<æ<t°æ<A=u´œ=Û=u´Û=æ=Væ=ū=u´ļ:ŋ:Pŋ:\;uŧ\;];‘´];Ę;uŧĘ;<u\Ÿ<ŗ<uŧŗ<å<u\Ÿå<æ<tXŸæ<=uŧ=A=u\Ÿœ=ū=uŧĪ:\;u´\;];‘Ŧ];å<u´å<æ<t°æ<A=u´œ=Û=u´Ī:;u´;;udŸ;!;u\Ÿ!;/;uXŸ/;=;uTŸ<<u´< <u\Ÿ <.<uXŸ8<F<uTŸ}<<udŸÅ=Į=u´Į=Û=u\ŸÕ:Ũ:QŨ:\;u@\;];‘¸];<u@<<Q<å<u@å<æ<tŧæ<A=u@œ=Û=u@Õ:Ũ:P<<Pé=ô=udŸô=ø=Rø=ū=udŸé=ø=PŨ:\;u\Ÿ\;];‘TŸ];<u\Ÿ<å<u\Ÿå<æ<tXŸæ<A=u\Ÿœ=Û=u\ŸŨ:\;udŸ\;];‘\Ÿ];<udŸ<å<udŸå<æ<t`Ÿæ<A=udŸœ=Û=udŸ;\;udŸ\;];‘\Ÿ];<udŸ<å<udŸå<æ<t`Ÿæ<A=udŸœ=Å=udŸ;;udŸ;\;u\Ÿ\;];‘TŸ];<u\Ÿ<}<u\Ÿ}<<udŸ<å<u\Ÿå<æ<tXŸæ<A=u\Ÿœ=Å=u\Ÿ;;udŸ;!;u\Ÿ!;/;uXŸ/;=;uTŸ< <u\Ÿ <.<uXŸ8<F<uTŸ}<<udŸ ;\;u`Ÿ\;];‘XŸ];<u`Ÿ<å<u`Ÿå<æ<t\Ÿæ<A=u`Ÿœ=Å=u`Ÿ ;;P}<‡<P;\;u\Ÿ\;];‘TŸ];<u\Ÿ<}<u\Ÿ<å<u\Ÿå<æ<tXŸæ<A=u\Ÿœ=Å=u\Ÿ;!;u\Ÿ!;/;uXŸ/;=;uTŸ< <u\Ÿ <.<uXŸ8<F<uTŸ;\;udŸ\;];‘\Ÿ];<udŸ<}<udŸ<å<udŸå<æ<t`Ÿæ<A=udŸœ=Å=udŸ;$;P$;/;u\<Ÿ<<P!;/;uXŸ <.<uXŸ!;/;uXŸ/;=;uTŸ <.<uXŸ8<F<uTŸ';/;udŸ&<.<udŸ';2;P&<7<Pl=~=uXŸr=y=uOŸy=}=R}=~=uOŸr=}=PĮ=Û=u\ŸÍ=Û=u`ŸÍ=Ø=P/;=;uTŸ8<F<uTŸ5;=;udŸ><F<udŸ5;@;P><W<P=;K;uPŸX<f<uPŸC;K;udŸ^<f<udŸC;K;P^<w<PĢ;<udŸ<å<udŸå<æ<t`Ÿæ<A=udŸŽ;<u\Ÿ<å<u\Ÿå<æ<tXŸæ<A=u\ŸŽ;ļ;Pū< =PĐ;Ų;PŲ;û;u#|û;<uŧ#Ÿ,=A=wüÜ;<u`Ÿ,=A=u`ŸÜ;û;R“,=3=R“3=5= wü2$q"Ÿ“Ü;û;Qû;<u#TŸ,=A=QÜ;õ; rq4Ÿ,=3= rq4Ÿ3=5= wü2$4Ÿ,=A=Q,=A=u`Ÿ,=8=P<ŗ<u`Ÿæ<ū<u`Ÿ<ŗ<u#TŸæ<ø<rԟø<ū<u#TŸ›<ŗ<u#TŸ›<ŗ<u`Ÿ›<§<Pŧ<Û<qāŸ=&=qāŸĘ<å<udŸå<æ<t`Ÿ=,=udŸĘ<Û<qāŸ=&=qāŸĖ<Û<qāŸĖ<Û<udŸĖ<Ø<PØ<Û<qäI=[=uPŸO=V=uOŸV=Z=RZ=[=uOŸO=Z=P~=’=uTŸ„=‹=uOŸ‹==R=’=uOŸ„==Pž=˛=udŸ¤=˛=u\Ÿ¤=¯=Pm>Ô>VÔ>×>P×>˛?V @ @Vm>Õ>WÕ>Ö>udŸÖ>×>t`Ÿ×>Ā?W @"@Wp>Ö>u_ŸÖ>×>t[Ÿ×>Ā?u_Ÿ @"@u_Ÿp>{>PŒ?—?P{>Ö>u`ŸÖ>×>t\Ÿ×>Œ?u`Ÿ?Ā?u`Ÿ @"@u`Ÿ>Ö>udŸÖ>×>t`Ÿ×>Œ?udŸ?Ā?udŸ @"@udŸ>Š>P?†?P•>Ô>VÔ>×>P×>?V?˛?V @ @V•>˛>u ×>?u ?ŗ?u @"@u •>˛>u×>?u?ŗ?u @"@u•>˜>P˜>Ö>uPÖ>×>tL×>?uP?Ā?uP @"@uP•>˜>pŸ˜>Ö>uP#ŸÖ>×>tL#Ÿ×>?uP#Ÿ?Ā?uP#Ÿ @"@uP#Ÿ•>˜>pŸ˜>Ÿ>uP#Ÿ×>u?uP#Ÿ?Ā?uP#Ÿ @"@uP#ŸŸ>Ô>VÔ>×>Pu??VŸ>Ô>vŸÔ>×>pŸu??vŸĒ>Ŧ>Pé>u?udŸ?Ā?udŸ @"@udŸé>ō>uP#Ÿō>÷>P÷>u?uP#Ÿ?Ā?uP#Ÿ @"@uP#Ÿū>u?udŸ?Ā?udŸ?u?u`Ÿ?Ā?u`Ÿ? ?P?§?P ?u?uP#Ÿ­?Ā?uP#Ÿ @"@udŸ@"@u`Ÿ@@PĐ?ë?udŸÜ?æ?u_Ÿæ?ę?Rę?ë?u_ŸÜ?ę?Pë?ū?u`Ÿņ?ų?u_Ÿų?ũ?Rũ?ū?u_Ÿņ?ũ?P5ˆ‘Ŗš‘5=P=ˆ‘Ŗš‘5~W~€‘€ˆWŖšWEJPJ}V}~‘wŸ~€‘‘Ÿ€ˆVŖšVSfPfU€ƒPƒˆUŖšUVˆ‘Ŗš‘V~W~€‘€ˆWŖšWVfRfn‘\nu Ÿ€ˆRŖšu ŸV}V}~‘wŸ~€‘‘Ÿ€ˆVŖšVXnVXnWXfRfn‘\ƒˆRn}V}~‘wŸ~€‘‘ŸŖšVnUŖšU—@pAuDpAƒAuXŸƒA„AtTŸ„A­AuD­A÷AuXŸ÷AøA‘PŸøA…BuDÁBCuD CCuD­@ˇ@Rˇ@á@uŧá@å@RB+BR+BTBuŧL@KAuøA—Bu BÕBu CCuC6CuU@‚AW‚AƒAudŸƒA„At`Ÿ„AöAWöA÷AudŸ÷AøA‘\ŸøABWB BudŸ BÃBWÃB CudŸ CCWCCudŸCCWC6CudŸĸBÁBudŸ¨BŗBu`ŸŗBˇBRˇBÁBu`Ÿ¨BˇBP3@KAu øA—Bu  BÕBu CCu C6Cu l@”@V…B‹BVCCVl@‚AW‚AƒAudŸƒA„At`Ÿ„AöAWöA÷AudŸ÷AøA‘\ŸøABWB BudŸÁBÃBWÃB CudŸ CCWCCudŸCCWC6CudŸv@”@VCCVv@pAuDpAƒAuXŸƒA„AtTŸ„A­AuD­A÷AuXŸ÷AøA‘PŸøA…BuDÁBCuD C6CuD!C,Cu`Ÿ,C0CR0C6Cu`Ÿ!C0CP—@‚AW‚AƒAudŸƒA„At`Ÿ„AöAWöA÷AudŸ÷AøA‘\ŸøA…BWÁBÃBWÃBCudŸ CCWCCudŸš@ƒAu`ŸƒA„At\Ÿ„A÷Au`Ÿ÷AøA‘XŸøA…Bu`ŸÁBCu`Ÿ CCu`Ÿš@ĸ@PTB_BPĸ@TBŸeB…BŸÁBCŸ CCŸ­@TB-ŸeB…B-ŸÁBC-Ÿ CC-ŸŊ@í@u\Ÿí@÷@P÷@GAu¸GAƒAu\ŸƒA„AtXŸ„A÷Au\Ÿ÷AøA‘TŸøABu¸BTBu\ŸeB…Bu¸ÁBÕBu¸ÕBCu\Ÿ CCu¸CCu\ŸŊ@Ë@u\ŸË@ƒAu`ŸƒA„At\Ÿ„A÷Au`Ÿ÷AøA‘XŸøATBu`ŸeB…Bu`ŸÁBCu`Ÿ CCu`ŸË@ƒAu`ŸƒA„At\Ÿ„A÷Au`Ÿ÷AøA‘XŸøATBu`ŸeB…Bu`ŸÁBCu`Ÿ CCu`ŸÔ@×@uVŸ×@å@På@GAuŧøABuŧeB…BuŧÁBÕBuŧ CCuŧÔ@å@Qå@GAu@øABu@eB…Bu@ÁBÕBu@ CCu@Ô@á@uŧá@å@RÔ@GAudŸøABudŸeB…BudŸÁBÕBudŸ CCudŸî@GAudŸøABudŸeB…BudŸÁBÕBudŸ CCudŸî@÷@P÷@GAu¸øABu¸eB…Bu¸ÁBÕBu¸ CCu¸ū@GAudŸøABudŸeB…BudŸAGAuWŸøABuWŸeB…BuWŸA APeBoBPAGAudŸøABudŸuB…BudŸA!Au`Ÿ!A'AP'AGAu`ŸøABu`ŸuB…Bu`Ÿ.AGAudŸøABudŸuB…BudŸ1AGAuWŸøABuWŸuB…BuWŸ1A9APuBBP9AGAu\ŸøABu\Ÿ\AfAu`ŸžA¨Au`ŸbAfAudŸ¤A¨AudŸbAiAP¤AąAPfApAu\ŸšAĀAu\ŸlApAudŸŧAĀAudŸlAsAPŧAÉAPpAzAuXŸŅAØAuXŸvAzAudŸÔAØAudŸvAAPÔAéAPøABö ŸøABu\ŸB+BR+B=Bu@=BTBuŧB6Bu\Ÿ6BDu¸\DøDu¸8EXEu¸XEYEP’EÍEu¸ÍEßE0ŸmC§C0Ÿ§C5EuŦ8EWEWWEXEuŦXEYEt¨YEcEuŦ’EÍEuŦÍEßE0ŸsCvCpԟvCŧCu#TŸ8E>Epԟ>EXEu#TŸXEYEt#TŸÍEŪEu#TŸŪEßEt#TŸĮCËCPËCîCWîCXEuPXEYEtLYEcEuP’EÍEuPĖCXEu`ŸXEYEt\ŸYEcEu`Ÿ’EÍEu`ŸŲCķC0ŸķCEW’EÍEWŲCîCw ŸîC\DuP# Ÿ\DbDp ŸbDEuP# Ÿ’EÍEuP# ŸķCrDVuDEV’E”EVÉEËEVķCeDuT¸DEuTķCDPÚDįDPįDėDvD+D1ŸėDE1Ÿ+D>D0ŸėDE1Ÿ>DGDPGDVDuP#,EEq,>DrDuPEEQEEuPDDrDudŸEEudŸJDrDu_ŸEEu_ŸJDVDPEEP”EĒEudŸšEĒEu_ŸšEŠEPĖCcE0Ÿ’EÍE0ŸĖCîCWîCXEuPXEYEtLYEcEuP’EÍEuPEXEu`ŸXEYEt\ŸYEcEu`Ÿ&EXEudŸXEYEt`ŸYEcEudŸ&E.EPYE`EPĒEÉEu`Ÿ°EÉEudŸ°EŋEP÷E'FW'F(Fu (F+Ft+FIFWIFJFu JFMF‘MFXFW FFugŸFFRF(FugŸ(F+FtcŸVFXFugŸ FFP F'FW'F(Fu (F+FtVFXFW F&FV&F+FPVFXFVF$FP$F&Fv&F+FpF&FV&F+FP`FĸF‘ ĸFÕFWĨIōIVōIõI‘DŸõI˙IVAJXJ‘DŸXJgJVgJÉJ‘DŸ}FÕFWÕFÉJ‘ø~ƒFŠFwŠFŽFPĢFŌF‘LŸŌFÕFPÕFÉJ‘˜ÃFŌF‘LŸŌFÕFPÕFÉJ‘˜ĪFGWÃGŗHWŗH˙I0Ÿ#J?JW?JÉJ0ŸäG(H0Ÿ(H=H1ŸcHŗH0ŸÕFGWÃGŗHW#J?JWîFņF‘DŸņFGVîFúFPîFGWîFG‘HŸGGPGGPGÃG‘ äG˙I‘ #J=J‘ ?JÉJ‘ GÃG‘˜äG˙I‘˜#J=J‘˜?JÉJ‘˜+G‹G Ÿ+G‹G‘ü~+G=G‘ü~#Ÿ=GBGPIG‹G‘ IG‹G‘ü~IGSG‘ü~#ŸSGXGPbG‹GL ŸbG‹G‘ü~bGkG‘ü~#ŸkGpGP}G‹G‘ €G‹G‘DŸ€G‹GPîGHV“HHP“HTHV“cHŗHV“îG=H‘#ŸúGHō/ĮHHvHHtH HtúG=H‘ (H=H‘ (H=H‘˜=HTH‘ IHTH‘DŸIHTHPcHŗHh ŸcHŗH‘ü~cHzH‘ü~#ŸzHHP†HŗH‘ †HŗH‘ü~†HH‘ü~#ŸH•HPŸHŗHX ŸŸHŗH‘ü~ŸH¨H‘ü~#Ÿ¨H­HP%J=J‘ +J6J‘DŸ6J:JR:J=J‘DŸ+J:JP‹GGW¨GÃGW‹GÃG,ŸŗH˙I,Ÿ?JÉJ,ŸĢG˛Gw˛GļGPŧHņHW“ņH÷HP“÷HķIW“õI˙IW“?JÉJW“ŧH™I‘#Ÿ-I~Iw ŸŽI™Iw Ÿ-I~I‘ü~ŽI™I‘ü~-I;I‘ü~#Ÿ;I@IPÛH÷HōËÛH÷H‘” I™I‘”ÛH÷H‘˜ I™I‘˜ÛH÷H‘” I™I‘”ÛH÷H‘ #I™I‘ #I(IP~IˆIPDI~IwŸŽI™IwŸDI~I‘ü~ŽI™I‘ü~ŽI™I‘ü~dI~IŸdIpI‘ü~#ŸpIuIPĨI˙IŸAJÉJŸŋIōIVōIõI‘DŸõI˙IVÅI˙I‘ ÅIĘIPõIüIPĘIõI‘˜ØIõI‘ü~J#J‘˜J#J‘ü~CJXJ‘DŸIJQJ‘@ŸQJUJRUJXJ‘@ŸIJUJPXJgJVgJÉJ‘DŸJ¯J‘ J˜J‘@Ÿ˜JœJRœJ¯J‘@ŸJœJPˇJŋJ‘@ŸŋJÃJRÃJÉJ‘@ŸˇJÃJPĐJúJŸúJ*KWKK´KWÂKđKWúJoKuTqKKuT„K¯KuT´KĪKuTÔKņKuTņKōKtPōKLuTHKŽKPŽK’KvĸK´KPÂKÔKPúJ*KWÔKđKWKKugŸK$KP$KÔKugŸōKLugŸKKPKÔKVōKôKVK*KWsQsu¤}Ÿ>sPsP>iGiPj@kW"j@kuĐ}Ÿ"j.jPÉjÚjP.jÉjuĖ{Ÿāj@kuĖ{Ÿ7jÉjuĐ}Ÿāj@kuĐ}Ÿ7jCjP0k:kPCjÉjuČ{Ÿāj0kuČ{ŸLjÉjuĐ}Ÿāj0kuĐ}ŸLjXjP k*kPXjÉjuÄ{Ÿāj kuÄ{ŸajÉjuĐ}Ÿāj kuĐ}ŸajmjPkkPmjÉjuŧ{Ÿājkuŧ{ŸvjÉjuĐ}ŸājkuĐ}Ÿvj‚jPũj kP‚jÉju¸{Ÿājũju¸{Ÿ‹jÉjuĐ}ŸājũjuĐ}Ÿ‹j“jPíjújP“jÉju´{Ÿājíju´{ŸœjÉjuĐ}ŸājíjuĐ}Ÿœj¤jPājęjP¤jÉjuĀ{Ÿ­jÉjuĐ}Ÿ­jÃjPšmÕmuĐ{ŸÂmÕmuĐ}ŸÂmÔmPÕmņmuĖ{ŸŪmņmuĐ}ŸŪmđmPņm nuČ{Ÿúm nuĐ}Ÿúm nP n)nuÄ{Ÿn)nuĐ}Ÿn(nP)nEnuŧ{Ÿ2nEnuĐ}Ÿ2nDnPEnanu¸{ŸNnanuĐ}ŸNn`nPan}nu´{Ÿjn}nuĐ}Ÿjn|nP}n™nuĀ{Ÿ†n™nuĐ}Ÿ†n˜nP@klkuUklkuUklku¨}bkÍku¸}ŸÍkÎkt´}Ÿûklu¸}Ÿ[mkmu¸}ŸbkxkV“xk}kv|Ÿ“}kËkV“ûklV“[mkmV“bkÎkō5ûklō5[mkmō5bkŽku¸}ŸbkŽkuŧ}Ÿ}kŽkō5ŽkÍku¸}ŸÍkÎkt´}Ÿûklu¸}Ÿ[mkmu¸}ŸŽk–k uĀ}u¸}4ŸŽkškP’k–k uĀ}u¸}4Ÿ’kškPbkÎk1Ÿûkl1Ÿ[mkm1ŸbklkužkÍkuøzŸÍkÎktôzŸûkluøzŸ[mkmuøzŸ§kÍkuÜ~ŸÍkÎktØ~ŸûkluÜ~Ÿ[mkmuÜ~Ÿ§kŗkP[memPŗkÍkuôzŸÍkÎktđzŸûkluôzŸŧkÍkuÜ~ŸÍkÎktØ~ŸûkluÜ~ŸŧkÆkPûk lP™nËnu¸}ŸŸnąnW“ąnļnw|Ÿ“ļnËnW“™nËnōŪ7ŸnĮnu¸}ŸŸnĮnuŧ}ŸļnĮnōŪ7ĮnËnu¸}ŸĮnËn uĀ}u¸}4ŸĮnËnPËnĶnP×nķnuøzŸānķnuŦ{ŸānōnPķnouôzŸün ouīzŸ ooRoouīzŸünoPuqšqu°{Ÿ~qšquÜ~Ÿ~q”qP´qŲqu¸}ŸŊqĪqu˜}ŸĪqĶqRĶqŲqu˜}ŸŊqĶqPÛqųquœ}Ÿäqōqu˜}ŸōqöqRöqųqu˜}ŸäqöqPûqru }Ÿrru˜}ŸrrRrru˜}ŸrrPr9ru¤}Ÿ$r2ru˜}Ÿ2r6rR6r9ru˜}Ÿ$r6rPüu!vuÄ}Ÿvvu˜}ŸvvRv!vu˜}ŸvvP#vAvuĐ}Ÿ,v:vu˜}Ÿ:v>vR>vAvu˜}Ÿ,v>vPCvavuÜ~ŸLvZvu˜}ŸZv^vR^vavu˜}ŸLv^vP}vĸvu¤}Ÿ†v˜vu }Ÿ˜vœvRœvĸvu }Ÿ†vœvP¤vÂvu°}Ÿ­vģvu }ŸģvŋvRŋvÂvu }Ÿ­vŋvPÄvāvu„{ŸÍvāvuÜ~ŸÍvßvPāvüvu€{ŸévüvuÜ~ŸévûvPüvwuüzŸwwuÜ~ŸwwPw4wu”{Ÿ!w4wuÜ~Ÿ!w3wP4wPwu {Ÿ=wPwuÜ~Ÿ=wOwPPwuwuŦ{ŸYwuwuÜ~ŸYwowPwwœwuˆ{Ÿ€wœwuÜ~Ÿ€w–wPžwŧwuŒ{Ÿ§wŧwuÜ~Ÿ§wšwPžwÜwu{ŸĮwÜwuÜ~ŸĮwŲwPŪwüwu˜{ŸįwüwuÜ~ŸįwųwPūwxuœ{ŸxxuÜ~ŸxxPxx\xu¨{ŸGx\xuÜ~ŸGxYxP¤xÉxu¸}Ÿ­xŋxu }ŸŋxÃxRÃxÉxu }Ÿ­xÃxPËxéxuÄ}ŸÔxâxu }ŸâxæxRæxéxu }ŸÔxæxPëx yuĐ}Ÿôxyu }ŸyyRy yu }ŸôxyPy"yu }Ÿ"y&yR&y)yu }Ÿy&yP0yUyRUyĮyVĮyĘyķRŸĘyõyVõyBzķRŸBzmzVmzļzķRŸļz5{V5{v{ķRŸv{{{V{{‰{ķRŸ‰{‹{V‹{Å{ķRŸÅ{Į{VĮ{ã{ķRŸã{å{Vå{"|ķRŸIyUyRUyĮyVĮyĘyķRŸĘyõyVõyBzķRŸBzmzVmzļzķRŸļz5{V5{v{ķRŸv{{{V{{‰{ķRŸ‰{‹{V‹{Å{ķRŸÅ{Į{VĮ{ã{ķRŸã{å{Vå{"|ķRŸay1zÉ Ÿļz‰{É ŸŠ{Å{É ŸĮ{î{É Ÿ ||É ŸayĮyVĮyĘyķRŸĘyõyVõy1zķRŸļz5{V5{v{ķRŸv{{{V{{‰{ķRŸŠ{Å{ķRŸĮ{ã{ķRŸã{å{Vå{î{ķRŸ ||ķRŸxyĘyĶ Ÿļz‰{Ķ ŸĮ{î{Ķ ŸxyĮyVĮyĘyķRŸļz5{V5{v{ķRŸv{{{V{{‰{ķRŸĮ{ã{ķRŸã{å{Vå{î{ķRŸ¨yÉyuPÉyĘyPĘy1zŸŠ{Å{Ÿ ||ŸĘy1z0ŸŠ{Å{0Ÿ ||0ŸĘy1zuPŠ{Å{uP ||uPęy1z0ŸŠ{Å{0Ÿ ||0Ÿęy1zŸŠ{Å{Ÿ ||Ÿęy1zuPŠ{Å{uP ||uPęy1z6ŸŠ{Å{6Ÿ ||6Ÿęy1z0ŸŠ{Å{0Ÿ ||0Ÿz1zuPŠ{Å{uP ||uPzzVz1zuLŠ{Å{uL ||uLz1z0ŸŠ{Å{0Ÿ ||0Ÿz1zŸŠ{Å{Ÿ ||Ÿz1z1ŸŠ{Å{1Ÿ ||1ŸzzŸz1zWŠ{Å{W ||Wz1zVŠ{Å{V | |Vz)zW)z1zw|ŸŠ{Å{W ||Wz,zV,z1zv|ŸŠ{Å{V | |V˛{Å{V | |V˛{Å{uL ||uL{v{ŸĮ{î{Ÿ{v{ŸĮ{î{Ÿ{v{uPĮ{ã{uPã{å{Wå{î{uP*{v{ŸĮ{î{Ÿ*{v{ŸĮ{î{Ÿ*{v{uPĮ{ã{uPã{å{Wå{î{uP*{v{6ŸĮ{î{6Ÿ*{v{0ŸĮ{î{0ŸA{v{uPĮ{ã{uPå{î{uPA{P{VP{v{uLĮ{ã{uLå{î{uLA{v{ŸĮ{ã{Ÿå{î{ŸA{v{ŸĮ{ã{Ÿå{î{ŸA{v{1ŸĮ{ã{1Ÿå{î{1ŸA{P{ŸP{v{WĮ{Ō{WA{v{VĮ{ã{Vå{į{VP{i{Wi{v{w|ŸĮ{Ō{WP{l{Vl{v{v|ŸĮ{ã{Vå{į{VĐ{ã{Vå{į{VĐ{ã{uLå{î{uL‹{Š{uP{˜{uP#uP4Ÿ{œ{P”{˜{uP#uP4Ÿ”{œ{PBzļz@ŸÅ{Į{@Ÿî{ |@Ÿ|"|@ŸBzļz`ŸÅ{Į{`Ÿî{ |`Ÿ|"|`ŸBzļzuPÅ{Į{Wî{ |uP|"|uPbzļz`ŸÅ{Į{`Ÿî{ |`Ÿ|"|`Ÿbzļz@ŸÅ{Į{@Ÿî{ |@Ÿ|"|@ŸbzļzuPÅ{Į{Wî{ |uP|"|uPbzļz8ŸÅ{Į{8Ÿî{ |8Ÿ|"|8Ÿbzļz0ŸÅ{Į{0Ÿî{ |0Ÿ|"|0ŸyzļzuPî{ |uP|"|uPyzˆzVˆzļzuLî{ |uL|"|uLyzļz`Ÿî{ |`Ÿ|"|`Ÿyzļz@Ÿî{ |@Ÿ|"|@Ÿyzļz1Ÿî{ |1Ÿ|"|1Ÿyzˆz@ŸˆzļzWî{ø{WyzļzVî{ |V||VˆzŠzWŠzļzw|Ÿî{ø{WˆzŦzVŦzļzv|Ÿî{ |V||V÷{ |V||V÷{ |uL|"|uLõz{VõzūzPT|ŧ}Wŧ}~u\Ÿ~~tXŸ~b~W_|?}uP~V~u_|b|P“b|n|R“n|¤|u@“T|n|w“˛|4}ä ŸP~b~ä ŸÉ|4}õ ŸÜ|4}uö|4} Ÿö|}R}4}uŧ}4}u }4} Ÿ}'}P4}?}u?}@}t@}G}tP}#~uŸ6~P~uŸP}S}uV}Z}tw}#~! Ÿw}ŋ}V~#~V†}Ë}u@Ë}~uXŸ~~tTŸ~#~u@™}#~ÕŸ™}Ą}PŽ}Ë}u@Ë}~uXŸ~~tTŸ~#~u@ą}~uTŸ~~tPŸ~#~uTŸą}š}P~~Pš}~u\Ÿ~~tXŸŋ}~u\Ÿ~~tXŸŋ}û}Wŋ}Ë}Vŋ}æ}Væ}ķ}v|Ÿķ}~VË}Ķ}VĶ}×}v|Ÿ×}æ}Væ}õ}v|ŸË}×}uXŸÜ}û}uXŸË}×}PÜ}í}Pû}~u\Ÿ~~tXŸû}~ udu\4Ÿû}~W˙}~ udu\4Ÿ˙} ~W8~P~uXŸ>~I~uTŸI~M~RM~P~uTŸ>~M~P~“~P“~M„uM„N„tŒN„„u„€„tŒ€„ƒ‡u…¤0Ÿ¤vƒu€yƒ’ƒP’ƒM„u€M„N„tü~N„„u€„€„tü~2†đ†u€s~Ŋu€„Š„uT…t…u°…Ņ…u†2†u‡‡u!fVfM„u ŸM„N„tœŸN„„u Ÿ„€„tœŸ€„Š„VŠ„•…u Ÿ°…Ņ…u ŸŪ…†u Ÿ2†‡u Ÿ‡ƒ‡u Ÿ$M„uđ~M„N„tė~N„„uđ~„€„tė~€„•…uđ~°…Ņ…uđ~Ū…†uđ~2†‡uđ~‡ƒ‡uđ~$/P/:v<Ÿ€„Š„P,:uŒ‹„™„u¤Ÿ2:uđ~‘„™„udŸ2:P‘„Ŗ„P:ŊuT…t…u°…Ņ…u††u:Ŋu# ŸT…t…u# Ÿ°…Ņ…u# Ÿ††u# ŸDFPFPu# ާVT…t…V‘§udŸT…t…udŸ‘™PT…^…P™§uŦŸd…t…uŦŸŸ§udŸd…t…udŸŸ§Pd…n…P§Ŋu§Ŋu#ŸąŗPŗŊu#û€V4…T…Vū€udŸ4…T…udŸū€PD…N…P€€u´Ÿ4…D…u´Ÿ €€udŸ4…D…udŸ €€P4…>…Pn€€V€M„u¸ŸM„N„t´ŸN„„u¸Ÿ„€„t´ŸŠ„Ō„VŌ„4…u¸Ÿt…•…u¸Ÿ2†‡u¸Ÿ‡C‡u¸Ÿx‡ƒ‡u¸Ÿq€M„udŸM„N„t`ŸN„„udŸ„€„t`ŸŠ„4…udŸt…•…udŸ2†‡udŸ‡C‡udŸx‡ƒ‡udŸq€|€P|€‡€v<ŸŠ„ŗ„Py€‡€uŒ´„„uŧŸ€‡€udŸē„„udŸ€‡€Pē„Ė„PŌ€M„uä~M„N„tā~N„„uä~„€„tā~Ō„4…uä~t…•…uä~2†‡uä~x‡‡uä~ՀM„udŸM„N„t`ŸN„„udŸ„€„t`ŸŌ„4…udŸt…•…udŸ2†‡udŸx‡‡udŸÕ€ā€Pā€ë€uä~<ŸŌ„܄PŨ€ë€VŨ„ë„u@Ÿã€ë€udŸã„ë„udŸã€ë€Pã„õ„P9M„u„M„N„t€N„„u„„€„t€û„4…u„2†‡u„<M„udŸM„N„t`ŸN„„udŸ„€„t`Ÿû„4…udŸ2†‡udŸ<GPGRu„<Ÿû„…PDRV……uLŸJRudŸ ……udŸJRP ……PhM„u\ŸM„N„tXŸN„„u\Ÿ„€„tXŸ$…4…u\Ÿ2†‡u\ŸhluostzM„u\ŸM„N„tXŸN„„u\Ÿ„€„tXŸ$…4…u\Ÿ2†đ†u\Ÿ}M„udŸM„N„t`ŸN„„udŸ„€„t`Ÿ$…4…udŸ2†đ†udŸ}…P$….…P…¤0Ÿ¤M„u”M„N„tN„„u”„€„t2†đ†u”¤š‚V›ƒ°ƒVƒāƒVĨ†§†VȆʆVІŌ†Vé†ë†V¤š‚vŸ›ƒ°ƒvŸĀƒāƒvŸĨ†§†vŸČ†ʆvŸĐ†Ō†vŸé†ë†vŸŌš‚V›ƒ°ƒVƒāƒVĨ†§†VȆʆVІŌ†Vé†ë†Vԁš‚v Ÿ›ƒ°ƒv ŸĀƒāƒv ŸĨ†§†v ŸČ†ʆv ŸĐ†Ō†v Ÿé†ë†v Ÿ ‚>ƒuŒ›ƒ „uŒ2†j†uŒˆ†ІuŒ ‚>ƒudŸ›ƒ „udŸ2†j†udŸˆ†ІudŸ ‚‚P›ƒǃP3‚>ƒuü~°ƒ „uü~2†X†uü~ˆ†ˆuü~I‚>ƒr Ÿ°ƒ „r Ÿ2†X†r Ÿˆ†˜†r ŸĨ†ŧ†r ŸI‚L‚uO‚S‚tZ‚>ƒuXŸ°ƒ „uXŸ2†X†uXŸˆ†˜†uXŸo‚>ƒ‹ Ÿ°ƒ „‹ Ÿ2†X†‹ Ÿˆ†˜†‹ Ÿo‚w‚P~‚>ƒuXŸ°ƒ „uXŸ2†X†uXŸˆ†˜†uXŸ‚>ƒudŸ°ƒ „udŸ2†X†udŸˆ†˜†udŸ‚‰‚PЃڃP‰‚>ƒuTŸ°ƒЃuTŸāƒ „uTŸ2†X†uTŸˆ†˜†uTŸ‚>ƒudŸ°ƒЃudŸāƒ „udŸ2†X†udŸˆ†˜†udŸ‚—‚PƒʃP—‚š‚V—‚š‚vŸÅ‚>ƒu`Ÿ°ƒƒu`Ÿāƒ „u`Ÿ2†X†u`Ÿˆ†Œ†u`ŸČ‚>ƒudŸ°ƒƒudŸāƒ „udŸ2†X†udŸˆ†Œ†udŸČ‚ЂP „„Pö‚>ƒudŸ°ƒƒudŸāƒ „udŸų‚>ƒu`Ÿ°ƒƒu`Ÿāƒ „u`Ÿų‚ƒP„„Pƒ>ƒ– Ÿ°ƒƒ– Ÿāƒ„– Ÿƒ ƒuƒƒtƒ>ƒu\Ÿ°ƒƒu\Ÿāƒ„u\Ÿƒ>ƒudŸ°ƒƒudŸāƒ„udŸƒ&ƒPđƒúƒP&ƒ>ƒuLŸ°ƒƒuLŸāƒđƒuLŸ,ƒ>ƒudŸ°ƒƒudŸāƒđƒudŸ,ƒ4ƒPāƒęƒP4ƒ>ƒuHŸ°ƒƒuHŸ:ƒ>ƒudŸ°ƒƒudŸ:ƒ>ƒP°ƒēƒP4†F†udŸ:†F†u`Ÿ:†E†PF†X†u\ŸL†X†u`ŸL†W†PX†j†uLŸ^†j†uPŸ^†i†Pj†ˆ†uHŸp†ˆ†uDŸp†‚†Pކ˜†u`Ÿ”†˜†udŸ”†˜†P§†ŧ†uXŸ­†ŧ†udŸ­†ģ†Pŧ†ȆuTŸÂ†ȆudŸÂ†ȆPŌ†é†uPŸØ†é†udŸØ†æ†P?„F„uœŸf„m„uœŸB„F„udŸi„m„udŸB„N„Pi„w„Pv…‹…uHŸ|…‹…udŸ|…Š…P‹…•…uLŸ‘…•…udŸ‘…•…P•…°…uœŸ›…ĸ…u›Ÿĸ…Ļ…RĻ…°…u›Ÿ›…Ļ…P˛…Į…u¨Ÿ¸…Į…udŸ¸…ƅPĮ…Ņ…uŦŸÍ…Ņ…udŸÍ…Ņ…Pō†‡u\Ÿø†‡udŸø†‡Pā…õ…u¸Ÿæ…õ…udŸæ…ô…Põ…†uŧŸû…†udŸû…†P†"†u Ÿ†"†udŸ†!†P"†2†u¤Ÿ(†2†udŸ(†2†P‡0‡uDŸ!‡0‡udŸ!‡/‡P0‡C‡u@Ÿ6‡C‡udŸ6‡C‡PE‡X‡u´ŸK‡X‡udŸK‡X‡Pa‡x‡u°Ÿg‡x‡udŸg‡u‡PᇀŠu €Š*‹u°Ÿ*‹+‹tŦŸ+‹G‹u°ŸG‹H‹tŦŸH‹@Œu \Œ†Œu ŠŒåŒu åŒōŒu°ŸōŒ3u 3Fu°ŸFku á‡ķ‡PNˆ‰ˆV‰ˆ*‹u´Ÿ*‹+‹t°Ÿ+‹G‹u´ŸG‹H‹t°ŸH‹l‹Vl‹@Œu´Ÿ\Œ|Œu´ŸÁŒku´ŸQˆ*‹u˜*‹+‹t”+‹G‹u˜G‹H‹t”H‹@Œu˜\Œ|Œu˜ÁŒku˜Qˆ_ˆP_ˆkˆv<ŸH‹O‹P\ˆkˆuP‹_‹u¸Ÿbˆkˆu˜V‹_‹udŸbˆkˆPV‹f‹PĩˆîˆVîˆ*‹u@Ÿ*‹+‹tŧŸ+‹G‹u@ŸG‹H‹tŧŸl‹‹V‹@Œu@Ÿ\Œ|Œu@ŸÁŒåŒu@ŸōŒ u@Ÿ3Fu@Ÿ]ku@Ÿ¸ˆ*‹u`Ÿ*‹+‹t\Ÿ+‹G‹u`ŸG‹H‹t\Ÿl‹@Œu`Ÿ\Œ|Œu`ŸÁŒåŒu`ŸōŒ u`Ÿ3Fu`Ÿ]ku`Ÿ¸ˆĈPĈЈv<Ÿl‹s‹PÁˆЈut‹ƒ‹uŧŸĮˆЈu`Ÿz‹ƒ‹u`ŸĮˆЈPz‹Š‹P‰Z‰VZ‰*‹uHŸ*‹+‹tDŸ+‹G‹uHŸG‹H‹tDŸ‹´‹V´‹@ŒuHŸ\Œ|ŒuHŸÁŒåŒuHŸōŒöŒuHŸ3FuHŸ]kuHŸ‰*‹u`Ÿ*‹+‹t\Ÿ+‹G‹u`ŸG‹H‹t\Ÿ‹@Œu`Ÿ\Œ|Œu`ŸÁŒåŒu`ŸōŒöŒu`Ÿ3Fu`Ÿ]ku`Ÿ‰)‰P)‰5‰v<Ÿ‹—‹P&‰5‰u˜‹§‹uDŸ,‰5‰u`Ÿž‹§‹u`Ÿ,‰5‰Pž‹Ž‹P‰Ŗ‰VŖ‰*‹uPŸ*‹+‹tLŸ+‹G‹uPŸG‹H‹tLŸ´‹؋V؋@ŒuPŸ\Œ|ŒuPŸ3FuPŸ]kuPŸ‚‰*‹u`Ÿ*‹+‹t\Ÿ+‹G‹u`ŸG‹H‹t\Ÿ´‹@Œu`Ÿ\Œ|Œu`Ÿ3Fu`Ÿ]ku`Ÿ‚‰މPމš‰v<Ÿ´‹ģ‹P‹‰š‰uŧ‹ˋuLŸ‘‰š‰u`ŸÂ‹ˋu`Ÿ‘‰š‰P‹Ō‹Pá‰*‹u*‹+‹tŒ+‹G‹uG‹H‹tŒ؋ Œu\Œ|Œu3Fudkuä‰*‹udŸ*‹+‹t`Ÿ+‹G‹udŸG‹H‹t`ŸØ‹ ŒudŸ\Œ|ŒudŸ3FudŸdkudŸä‰đ‰Pđ‰ü‰u<ŸØ‹ߋPí‰ü‰Vā‹ī‹uXŸķ‰ü‰udŸæ‹ī‹udŸķ‰ü‰Pæ‹ö‹P8Š*‹u`Ÿ*‹+‹t\Ÿ+‹G‹u`ŸG‹H‹t\Ÿü‹ Œu`Ÿ3Fu`Ÿ;Š*‹udŸ*‹+‹t`Ÿ+‹G‹udŸG‹H‹t`Ÿü‹ ŒudŸ3FudŸ;ŠGŠPGŠSŠu`<Ÿü‹ŒPDŠSŠu\ŸŒŒu\ŸJŠSŠudŸ ŒŒudŸJŠSŠP ŒŒPSŠ)‹W+‹F‹W3FWgŠ*‹udŸ*‹+‹t`Ÿ+‹G‹udŸG‹H‹t`Ÿ3FudŸgŠ›Šu+‹8‹u3Fu‹Š*‹udŸ*‹+‹t`Ÿ+‹G‹udŸG‹H‹t`ŸŽŠ*‹u`Ÿ*‹+‹t\Ÿ+‹G‹u`ŸG‹H‹t\ŸŽŠ—ŠP+‹2‹P—Š›Š0Ÿ›Š(‹V8‹E‹V‹*‹u°Ÿ*‹+‹tŦŸ8‹G‹u°ŸG‹H‹tŦŸ‹ ‹P‹*‹u°Ÿ*‹+‹tŦŸ8‹G‹u°ŸG‹H‹tŦŸ‹*‹udŸ*‹+‹t`Ÿ8‹G‹udŸG‹H‹t`Ÿ‹+‹P8‹?‹P"Œ5ŒuTŸ(Œ5ŒudŸ(Œ4ŒP5Œ@ŒuXŸ;Œ@ŒudŸ;Œ@ŒP@Œ\Œu°ŸFŒNŒu¯ŸNŒRŒRRŒ\Œu¯ŸFŒRŒP^ŒqŒu`ŸdŒqŒudŸdŒpŒPqŒ|Œu\ŸwŒ|ŒudŸwŒ|ŒPŒŒ§Œu´Ÿ˜Œ§ŒudŸ˜ŒόP§Œ´Œu¸Ÿ­Œ´ŒudŸ­Œ´ŒPÌ֌uPŸÉŒ֌u`ŸÉŒՌP֌åŒuLŸÜŒåŒu`ŸÜŒåŒP5FudŸ;Fu`Ÿ;FPøŒ uHŸūŒ u`ŸūŒ P uDŸu`ŸP"3uŧŸ(3u`Ÿ(3PH]u@ŸN]u`ŸNZPŨ}‘u}‘’u Ÿ’’tœŸ’ž’už’͒u ŸÍ’ΒtœŸÎ’Q“um“ž”uŔō”uŨīPSށŽVŽ’u¨Ÿ’’t¤Ÿ’͒u¨ŸÍ’Βt¤ŸÎ’ō’Vō’Q“u¨Ÿm“¤“u¨ŸŽ“Ÿ”u¨Ÿä”ō”u¨ŸVŽ’u`Ÿ’’t\Ÿ’͒u`ŸÍ’Βt\ŸÎ’Q“u`Ÿm“¤“u`ŸŽ“Ÿ”u`Ÿä”ō”u`ŸVŽdŽPdŽpŽv<ŸÎ’ՒPaŽpŽu„֒å’u¤ŸgŽpŽu`ŸÜ’å’u`ŸgŽpŽPܒė’PēŽæŽV排u°Ÿ’’tŦŸ’͒u°ŸÍ’ΒtŦŸō’“V“Q“u°Ÿm“¤“u°ŸÔ“Ÿ”u°Ÿä”ō”u°ŸŊŽ’u`Ÿ’’t\Ÿ’͒u`ŸÍ’Βt\Ÿō’Q“u`Ÿm“¤“u`ŸÔ“Ÿ”u`Ÿä”ō”u`ŸŊŽɎPɎՎv<Ÿō’û’PƎՎu„ü’ “uŦŸĖŽՎu`Ÿ“ “u`ŸĖŽՎP““PbVb’u¸Ÿ’’t´Ÿ’\’u¸Ÿ\’i’Vi’͒u¸ŸÍ’Βt´Ÿ“$“V$“Q“u¸Ÿm“—“u¸ŸÔ“”u¸Ÿä”ō”u¸Ÿ(1R1’u„’’t€’͒u„͒Βt€““R“Q“u„m“—“u„ԓ”u„ä”ō”u„(1P““P1’u´Ÿ’’t°Ÿ’͒u´ŸÍ’Βt°Ÿ$“Q“u´Ÿm“—“u´ŸÔ“”u´Ÿä”ō”u´Ÿ7’u`Ÿ’’t\Ÿ’͒u`ŸÍ’Βt\Ÿ$“Q“u`Ÿm“—“u`ŸÔ“”u`Ÿä”ō”u`Ÿ7@P\’c’P‡ŽVŽ’uŧŸ’’t¸Ÿ’\’uŧŸi’’V’͒uŧŸÍ’Βt¸Ÿ$“1“uŧŸm““uŧŸÔ“”uŧŸë”ō”uŧŸŠ’udŸ’’t`Ÿ’\’udŸi’͒udŸÍ’Βt`Ÿ$“1“udŸm““udŸÔ“”udŸë”ō”udŸŠ–P–ĸv<Ÿi’p’P“ĸu€q’€’u@Ÿ™ĸudŸw’€’udŸ™ĸPw’‡’Pé.u€.’uHŸ’’tDŸ’B’uHŸB’O’u€O’\’uHŸ’š’u€š’͒uHŸÍ’ΒtDŸ$“1“uHŸÔ“”uHŸė’udŸ’’t`Ÿ’\’udŸ’͒udŸÍ’Βt`Ÿ$“1“udŸÔ“”udŸėõP’”’Põ’uDŸ’’t@Ÿ’\’uDŸš’͒uDŸÍ’Βt@Ÿ$“1“uDŸÔ“”uDŸû’udŸ’’t`Ÿ’\’udŸš’͒udŸÍ’Βt`Ÿ$“1“udŸÔ“”udŸûPB’I’PK‰u€‰’uPŸ’’tLŸ’5’uPŸ5’B’u€O’\’u€š’͒uPŸÍ’ΒtLŸ$“1“uPŸÔ“ ”uPŸ6””uPŸN’udŸ’’t`Ÿ’B’udŸO’\’udŸš’͒udŸÍ’Βt`Ÿ$“1“udŸÔ“ ”udŸ6””udŸNWPO’V’PW’uLŸ’’tHŸ’B’uLŸš’͒uLŸÍ’ΒtHŸ$“1“uLŸÔ“ ”uLŸ6””uLŸ]’udŸ’’t`Ÿ’B’udŸš’͒udŸÍ’Βt`Ÿ$“1“udŸÔ“ ”udŸ6””udŸ]fP5’<’Pģ֐V’5’Vž֐u`Ÿ’5’u`ŸžĮP(’/’PĮ֐uTŸ’(’uTŸÍ֐u`Ÿ’(’u`ŸÍ֐P’"’P됒u\Ÿ’’tXŸš’͒u\ŸÍ’ΒtXŸ$“1“u\Ÿ6””u\Ÿėķuöút‘’u\Ÿ’’tXŸš’͒u\ŸÍ’ΒtXŸ$“1“u\ŸL””u\Ÿ‘’udŸ’’t`Ÿš’͒udŸÍ’Βt`Ÿ$“1“udŸL””udŸ‘ ‘P$“+“PR‘’u`Ÿ’’t\Ÿš’͒u`ŸÍ’Βt\ŸU‘’u\Ÿ’’tXŸš’͒u\ŸÍ’ΒtXŸU‘a‘Pa‘m‘u`<Ÿš’Ą’P^‘m‘udŸĸ’ą’udŸd‘m‘u`Ÿ¨’ą’u`Ÿd‘m‘P¨’¸’P‰‘’Vž’˒Vė‘’u Ÿ’’tœŸž’͒u ŸÍ’ΒtœŸė‘õ‘P’’u Ÿ’’tœŸž’͒u ŸÍ’ΒtœŸ ’’udŸ’’t`Ÿž’͒udŸÍ’Βt`Ÿ ’’Pž’ŒP3“F“uŧŸ9“F“udŸ9“E“PF“Q“u@ŸL“Q“udŸL“Q“PQ“m“u ŸW“_“uŸŸ_“c“Rc“m“uŸŸW“c“Po“‚“uHŸu“‚“udŸu““P‚““uDŸˆ““udŸˆ““P8”L”u\Ÿ>”L”udŸ>”L”P™“¤“u´ŸŸ“¤“u`ŸŸ“¤“P°“Óu°Ÿļ“ž“u`Ÿž““R“Óu`Ÿļ““PÓГuŦŸÉ“Гu`ŸÉ“ГP֓é“uXŸÜ“é“u`ŸÜ“č“Pé“”uTŸī“”u`Ÿī“˙“P ””uPŸ””udŸ””P”2”uLŸ$”2”udŸ$”2”PN”a”u`ŸT”a”u\ŸT”`”Pa”}”udŸg”}”u\Ÿg”w”Pƒ”Ÿ”u¸Ÿ‰”•”u`Ÿ•”™”R™”Ÿ”u`Ÿ‰”™”PĒ”ž”u¤Ÿ°”ž”u`Ÿ°”ž”PĮ”ä”u¨ŸĶ”Ũ”u`ŸŨ”á”Rá”ä”u`ŸĶ”á”P•_•0Ÿ™•ģ•0Ÿģ•˕P˕˘u~˘͘tŒ~͘ō˜u~ō˜ķ˜tŒ~ķ˜'™u~`™‘™0Ÿ‘™™™u~ž™ä™u~뙚u~ •#•wŸ#•)•P)•k•wŸ™•ô•wŸô•˘u#ŸĖ˜͘t#ŸÍ˜ō˜u#Ÿō˜ķ˜t#Ÿķ˜™u#Ÿ`™b™wŸb™j™u#Ÿj™‘™wŸ‘™¨™u#Ÿž™ä™u#Ÿë™Ašu#Ÿ• •u ~Ÿ •S•VS•˘u ~ŸĖ˜͘tœ~ŸÍ˜ō˜u ~Ÿō˜ķ˜tœ~Ÿķ˜`™u ~Ÿ`™h™Vh™j™u ~Ÿj™l™Vl™Ašu ~Ÿl™‘™u ~Ÿu™ƒ™uŦ~Ÿƒ™‡™R‡™‘™uŦ~Ÿu™‡™P™•'™Ÿ‘™ä™Ÿë™AšŸ™•°•wŕ'™HŸ‘™ä™HŸë™AšHŸÅ•˕uŦ~ŸË•ܕPܕl–Vl–˘uŒ~˘͘tˆ~͘ō˜uŒ~ō˜ķ˜tˆ~ķ˜'™uŒ~‘™—™V—™ä™uŒ~ë™AšuŒ~ŕܕuā~ŸÜ•į•Pį•˘u”~˘͘t~͘ō˜u”~ō˜ķ˜t~ķ˜'™u”~‘™ä™u”~ë™Ašu”~%–l–Vl–˘uŒ~˘͘tˆ~͘ō˜uŒ~ō˜ķ˜tˆ~ķ˜'™uŒ~‘™—™V—™ä™uŒ~ë™AšuŒ~l–{–u´~Ÿ{–›–Q›–˘uđ}˘͘tė}͘ō˜uđ}ō˜ķ˜tė}ķ˜'™uđ}ž™ä™uđ}ë™Ašuđ}Ā™ä™uŦ~Ÿ—'™HŸë™AšHŸ—h—u¸~Ÿh—y—Ry—˘uč}˘͘tä}͘ō˜uč}ō˜ķ˜tä}ķ˜'™uč}ë™Ašuč}N—h—uÜ~Ÿh—y—r$Ÿy—˘uč}#$ŸĖ˜͘tä}#$ŸÍ˜ō˜uč}#$Ÿō˜ķ˜tä}#$Ÿķ˜'™uč}#$Ÿë™Ašuč}#$Ÿ™™ž™uā~Ÿš—Q˜WQ˜˘u¨~ŸĖ˜͘t¤~ŸÍ˜ā˜Wā˜ō˜u¨~Ÿō˜ķ˜t¤~Ÿķ˜™u¨~Ÿ™™Wŧ—˘uŸ~ŸĖ˜͘t›~ŸÍ˜ō˜uŸ~Ÿō˜ķ˜t›~Ÿķ˜™uŸ~Ÿŧ—ėP͘ژPۗ˘uŦ~ŸĖ˜͘t¨~Ÿā˜ō˜uŦ~Ÿō˜ķ˜t¨~Ÿķ˜™uŦ~Ÿ˜˘u¸~ŸĖ˜͘t´~Ÿā˜ō˜u¸~Ÿō˜ķ˜t´~Ÿķ˜™u¸~Ÿ˜˘uÜ~ŸĖ˜͘tØ~Ÿā˜ō˜uÜ~Ÿō˜ķ˜tØ~Ÿķ˜™uÜ~Ÿ˜˘u¨~ŸĖ˜͘t¤~Ÿā˜ō˜u¨~Ÿō˜ķ˜t¤~Ÿķ˜™u¨~Ÿ˜"˜P™™P"˜˘u¸~ŸĖ˜͘t´~Ÿā˜ō˜u¸~Ÿō˜ķ˜t´~Ÿķ˜™u¸~Ÿ?˜˘uŦ~ŸĖ˜͘t¨~Ÿā˜ō˜uŦ~Ÿō˜ķ˜t¨~Ÿķ˜™uŦ~Ÿ[˜˘u´~ŸĖ˜͘t°~Ÿā˜ō˜u´~Ÿō˜ķ˜t°~Ÿķ˜™u´~Ÿw˜˘uŦ~ŸĖ˜͘t¨~Ÿā˜ō˜uŦ~Ÿō˜ķ˜t¨~Ÿķ˜™uŦ~Ÿ˜˘uā~ŸĖ˜͘tÜ~Ÿā˜ō˜uā~Ÿō˜ķ˜tÜ~Ÿķ˜™uā~Ÿą˜˘u¤~ŸĖ˜͘t ~Ÿā˜ō˜u¤~Ÿō˜ķ˜t ~Ÿķ˜™u¤~Ÿą˜¸˜u¤~Ÿ¸˜˘u ~ŸĖ˜͘tœ~Ÿā˜ō˜u ~Ÿō˜ķ˜tœ~Ÿķ˜™u¤~Ÿ´˜˘uŦ~ŸĖ˜͘t¨~Ÿā˜ō˜uŦ~Ÿō˜ķ˜t¨~Ÿķ˜™uŦ~Ÿ´˜¸˜Pķ˜™P¸˜˘u ~ŸĖ˜͘tœ~Ÿā˜ō˜u ~Ÿō˜ķ˜tœ~ŸÁ˜˘uŦ~ŸĖ˜͘t¨~Ÿā˜ō˜uŦ~Ÿō˜ķ˜t¨~ŸÁ˜͘Pā˜ę˜P'™?™u¤~Ÿ0™:™uŸ~Ÿ:™>™R>™?™uŸ~Ÿ0™>™P?™`™u ~ŸH™R™uŸ~ŸR™V™RV™`™uŸ~ŸH™V™P홚u¨~Ÿö™šuŸ~ŸššRššuŸ~Ÿö™šP&Ru&-p|Ÿ-6R&6Pm{Vm{rxŸmļ0ŸžČ0Ÿ0Ÿe{0ŸmļVžČVVm{rxŸ{ƒv|ŸƒP—v|Ÿp{P‰P—v|Ÿ‰—V—ļudŸžČudŸĢļudŸžČudŸŽļucŸžČucŸŽļPžÅPe{udŸkvucŸvzRz{ucŸkzPäũv4ŸŲŪv4Ÿ.Iv4ŸũÁuPŪuP!uPIeuP„2uPũuPD0ŸP\P\…uDuDuP!0ŸIeuD„‹uD‹‘uP‘ĩuDÍø0Ÿü0Ÿ$uD.20ŸČō{‚ eō{‚ „2ō{‚ Č1Ÿe1Ÿ„21ŸČ uÁŪu!IuÚä1ŸäöQÄŪQ!IQŌōi¨eōi¨„2ōi¨ÚÁō0ĨČō0Ĩ!ō0Ĩ)eō0Ĩ„2ō0Ĩä uŲŪu.Iuîũuîũ0ŸîũuLũ uũ u ttũuPv"ŸV™uHuHV!uHIeuH„‹uH‹‘V‘2uH#V#ÁuPŪuP!uPIeuP„‹uPÍŪuPü$uP.2uP#WÁ1ŸŪ1Ÿ!1ŸIe1Ÿ„‹1ŸÍŪ1Ÿü$1Ÿ.21ŸJW!WüW#V<?vŸ?DV#<W<Dw|Ÿ!WüW<?vŸ?DVÍŪuPuP.2uPZ\P\uDuDIeuD„‹uD$uDZ\Q\…uTuTIeuT„‹uT$uTZÁ1ŸŪ1ŸIe1Ÿ„‹1Ÿ$1Ÿ\qWWIeW„‹W$WZ\P\ÁVŪVIeV„†V\wWw…w|ŸWIeW„‹W$W\tVt…v|ŸVIeV„†VReV„†VReuD„‹uD$uDÁuTŪæuTWÁWŪWŖWŖ¨w|Ÿ¨ÁWŪæw|Ÿ¨udŸ­ÁudŸŪæudŸ­ģPæuTíųuT¤ąPąĩuD¤ĩuPĩÍuPøüuP$.uPŧČuPŪøuHæņudŸņõRõøudŸæõP•šsuTŸst‘LŸ‚Qž‘LŸQžYžPYžáž‘LŸ•šȚuTŸČšK›u`ŸK›V›VV›ƒ›u`Ÿƒ›•›V•›Лu`ŸĐ›ۛVۛu`Ÿ%Q%Yu¨Ysu`Ÿst‘XŸ‚ã‘XŸãįRįđ‘XŸđôRôž‘XŸžžVž(ž‘XŸ(žNžVbž|žV|žž‘XŸž“žR“ž–ž‘XŸšžˇžVˇžáž‘XŸČšt|Ÿ‚Nž|Ÿbž–ž|Ÿšžáž|ŸČšsuTŸst‘LŸ‚Nž‘LŸbž–ž‘LŸšžáž‘LŸČš0œu¨0œsu@Ÿst‘¸Ÿ‚ú‘¸ŸúNž‘ bž|ž‘ |ž–ž‘¸ŸšžĖž‘ Ėžáž‘¸ŸŨšäš0Ÿëš+›V+›.›t.›/›t/›3›t•›Ŧ›VŦ›¯›t¯›°›t°›´›tž%žVˇžĖžVäšëšW ››P››R›•›W•›››P››÷›Wú%žWbždžWšžœžWˇžĖžW›3›Rž$žR$ž%žwvŸ›+›V+›.›t.›/›t/›3›tž%žVäšëšu¨›•›u¨ž%ž‘ bž|ž‘ äšëšŸ›•›Ÿž%žŸbž|žŸäšëšu¤7›•›u¤bž|ž‘œäšëšu`Ÿ7›K›u`ŸK›V›VV›ƒ›u`Ÿƒ›•›Vbž|žV?›K›u`ŸK›V›VV›\›u`Ÿ?›\›u¤?›O›Päšëšu¤\›{›u¤äšëšuLŸb›q›uLŸq›u›Ru›{›uLŸb›u›P•›÷› ˙Ÿúž ˙ŸšžĖž ˙Ÿ•›Ŧ›VŦ›¯›t¯›°›t°›´›tˇžĖžV•›÷›u¨úž‘ šžĖž‘ •›÷›ŸúžŸšžĖžŸ¸›ЛVЛԛtԛ÷›uLŸúžVžžtžžtžžtžž‘DŸšžˇž‘DŸ¸›Лu`ŸĐ›ۛVۛ÷›u`Ÿúž‘XŸžžVšžˇžVěЛu`ŸĐ›ۛVۛá›u`ŸÄ›ЛVЛԛtԛá›uLŸÄ›ԛPá›÷›uLŸį›÷›u¤į›ö›Pdž|ž‘œjžuž‘DŸužyžRyž|ž‘DŸjžyžPœžˇž‘DŸĸžˇž‘œĸžąžPȚK›u`ŸK›V›VV›ƒ›u`Ÿƒ›•›V•›Лu`ŸĐ›ۛVۛu`Ÿ%Q%Yu¨Ysu`Ÿst‘XŸ‚ã‘XŸãįRįđ‘XŸđôRôž‘XŸžžVž(ž‘XŸ(žNžVbž|žV|žž‘XŸž“žR“ž–ž‘XŸšžˇžVˇžáž‘XŸ÷›u`Ÿ%Q%Yu¨Ysu`Ÿst‘XŸ‚ã‘XŸãįRįđ‘XŸđôRôú‘XŸ|žž‘XŸž“žR“ž–ž‘XŸĖžáž‘XŸ÷›suTŸst‘LŸ‚ú‘LŸ|ž–ž‘LŸĖžáž‘LŸœ2œVœuhŸ%qŸ%Yu¨#ŸYsuhŸst‘`Ÿ‚ã‘`ŸãįrŸįđ‘`ŸđôrŸôú‘`Ÿ|žž‘`Ÿž“žrŸ“ž–ž‘`ŸĖžáž‘`Ÿœsu\Ÿst‘TŸ‚ú‘TŸ|ž–ž‘TŸĖžáž‘TŸ"œ2œPœudŸ%qŸ%Yu¨#ŸYsudŸst‘\Ÿ‚ã‘\ŸãįrŸįđ‘\ŸđôrŸôú‘\Ÿ|žž‘\Ÿž“žrŸ“ž–ž‘\ŸĖžáž‘\ŸœsuXŸst‘PŸ‚ú‘PŸ|ž–ž‘PŸĖžáž‘PŸœœPœ2œQ2œcœu¨(œu`Ÿ%Q%Yu¨Ysu`Ÿst‘XŸ‚ã‘XŸãįRįđ‘XŸđôRôú‘XŸ|žž‘XŸž“žR“ž–ž‘XŸĖžáž‘XŸ(œu`ŸsuTŸst‘LŸ‚ã‘XŸãįRįđ‘XŸđôRôú‘XŸ|žž‘XŸž“žR“ž–ž‘XŸĖžáž‘XŸ(œ2œQ2œcœu¨(œ2œV(œRœVRœWœv|ŸWœcœV2œ;œV;œ@œv|Ÿ@œRœVRœ\œv|Ÿ2œ@œu¤Eœ\œu¤\œcœW2œ@œPEœVœPcœu`Ÿ%Q%Yu¨YsuTŸst‘LŸ‚ã‘XŸãįRįđ‘XŸđôRôú‘XŸ|žž‘XŸž“žR“ž–ž‘XŸĖžáž‘XŸcœkœ uhu`4ŸYa u\uT4ŸcœŖœV‚íVgœkœ uhu`4ŸgœsœVsœsu@Ÿst‘¸Ÿ‚ú‘¸Ÿ|ž–ž‘¸ŸĖžáž‘¸Ÿyœu`Ÿ%Q%Yu¨Ysu`Ÿst‘XŸ‚ã‘XŸãįRįđ‘XŸđôRôú‘XŸ|žž‘XŸž“žR“ž–ž‘XŸĖžáž‘XŸyœ…œPŨįPˆœsuTŸst‘LŸ‚Ũ‘LŸíú‘LŸ|ž–ž‘LŸĖžáž‘LŸÅœԜVíúVȜԜu`Ÿíđ‘XŸđôRôú‘XŸČœԜPíôPķœųœu¤ķœV%pĖžԞVķœW%pĖžážWķœöœu¨öœũœtķœũœPũœ#u¨Ėžáž‘ suTŸst‘LŸVW%VBVBGv|ŸGqV%+V+/v|Ÿ/BVBKv|Ÿ%/u¨4Yu¨%/P4FPYsuTŸst‘LŸYa u\uT4ŸYrW]a u\uT4Ÿ]iW‚Ũ‘LŸ‚Ũ1ŸŨ‘LŸŨ2ŸģŨ‘LŸģŨ3Ÿ3žNž‘ <žGž‘@ŸGžKžRKžNž‘@Ÿ<žKžP~ž–ž‘@Ÿ„žž‘XŸž“žR“ž–ž‘XŸ„ž“žP ŸˇŸVēŸ˟V˟íŸu'ŸˇŸVēŸ˟V˟íŸu4Ÿ?ŸP?Ÿ¸ŸWēŸíŸW4ŸˇŸvøŸēŸ˟vøŸĖŸíŸu#øŸTŸWŸPWŸcŸvøcŸˆŸuTēŸíŸuT[ŸcŸPgŸˆŸuTēŸƟuTrŸˆŸugŸēŸƟugŸrŸzŸPzŸˆŸuP<ŸēŸĮŸPĮŸƟuP<ŸÔŸߟugŸßŸãŸRãŸíŸugŸÔŸãŸPMW{uP{|tL|’uP’ŸWŸŖuPŖĨWĨÄuPaW{uP{|tL|’uP’ŸWd{ucŸ{|t_Ÿ|ŸucŸdpP’™Pp’Ÿx‰Q‰ģuL{‰P‰ģuT{‰Q‰ģuL{‰Q‰ĢW̰w|Ÿ°ĀW‰“W“˜w|Ÿ˜ĢWĢĩw|Ÿ‰˜udŸģudŸ‰˜P¯PÃ×0Ÿ×7W7<wŸ<GW|’W×îudŸ#GudŸ×îucŸ)GucŸ×ãPãîud<Ÿ);P×îudŸüGudŸ|’udŸ×îŸüGŸ|’Ÿ#Ÿ#udŸPĢļucŸļēRēÄucŸĢēPKuWucuTcdtPdzuTz‡W‡‹uT‹WŦuT`uWucuTcdtPdzuTz‡WccucŸcdt_Ÿd‡ucŸcoPzPozŸˆPˆcuLcdtHdzuLˆQˆĩuPˆPˆĢV̰v|Ÿ°ŊVˆ“V“˜v|Ÿ˜ĢVĢĩv|Ÿˆ˜udŸĩudŸˆ˜P¯PĀŅ0ŸŅ(V(-vŸ-4VdzVŅâudŸ4udŸŅâucŸ4ucŸŅÛPÛâud<Ÿ,PŅâudŸđ4udŸdzudŸŅâŸđ4ŸdzŸøŸøudŸøP“žucŸžĸRĸŦucŸ“ĸP‘HVHMvtŸM]V.3V37vtŸ7HVHQvtŸ.3vŸ37v|Ÿ7HvŸHQv|Ÿ.7‘L=Q‘L.7P=LP-PBQP P puLĘÎuLĐáuL.1P17p|ŸWÍu#Ÿpœu#ŸW]P]ŖQŖpuLpQ—uL—›Q›uLkÍu#Ÿpœu#ŸknPnuP”Íu#Ÿpœu#Ÿ”ŖPŖŽ v2&ĢÕĒÕzŸpP‹ v2&ĢÕĒÕzŸ“• v2&ĢÕĒÕzŸ—›P›œ v2&ĢÕĒÕzŸpP‹ v2&ĢÕĒÕzŸ“• v2&ĢÕĒÕzŸ—›P›œ v2&ĢÕĒÕzŸp‹0Ÿ“œ0ŸÅpuP‹“uPœˇuPĘuPÅÍPÍpuH‹“PœˇuHĘuHÅp1Ÿ‹“1Ÿœˇ1ŸĘ1ŸÅÍV“‹“V“ÅÍPÍüW‹“PœˇWÎĐWáWÍôWôüwtŸœˇWÎĐWáWÔņWœˇWÎĐWáWœˇWęWœˇuHęuHĄˇuP§¯uP#uP<Ÿ§ŗP̝uP#uP<ŸĢŗP#P#pVĘĖV)ju)AptŸABq<ŸBGplŸ)APABqBGpxŸ-AptŸABq<ŸBGplŸ-APABqBGpxŸ`ōu\Ÿúu\ŸŠŽu\Ÿ×íu\Ÿ‚rtŸŸ u#<Ÿ‚…rhŸ…ˆVˆrhŸŸ u#HŸ‚ō0Ÿú0ŸŠŽ0Ÿ×í0Ÿ‚rtŸŸ u#<ŸŸ¸pxŸ¸ÂvŸ‚…rhŸ…ˆVˆrhŸŸ u#HŸŸ¸plŸ¸ÂvxŸ›ŸQŸ¸plŸ¸ÂvxŸŸ¸pxŸ¸ÂvŸ˛ÂV˛¸P¸Âv ŸÂōu\Ÿúu\ŸĶōudŸúudŸįōu\Ÿúu\ŸįōudŸúudŸęōu[Ÿúu[ŸęōPúP×íu\Ÿ×íudŸŨču[ŸčėRėíu[ŸŨėP&>w<ŸJOw<Ÿ ģw<Ÿ>2uPOŠuPŽ“uPģ×uPöĨuP>fuPf¤0Ÿ°ŧPŧõuD†ˆuDˆŠuPŽ“0Ÿģ×uDöũuDũuP'uD?k0Ÿo‹0Ÿ‹—uDĄĨ0ŸŠō{‚ Ž×ō{‚ öĨō{‚ Š1ŸŽ×1ŸöĨ1Ÿ]u2Ou“ģu&1Ÿ&7R5OR“ģRŠō ÕŽ×ō ÕöĨō Õ2ō Ņ9Šō ŅŽ“ō Ņ›×ō ŅöĨō Ņ&]uJOu ģu/>u/>0Ÿ/>uL>]u>QVQ]u]fvxŸˆŠvxŸũvxŸ>AuPw"ŸAnWn uH†ˆuHˆŠWŽ“uHģ×uHöũuHũWĨuHFQVQ]u]fvxŸˆŠvxŸũvxŸFfWˆŠWũWnsVs2uPOˆuPŽ“uPģ×uPöũuP?PuPo—uPĄĨuPnsWn21ŸOˆ1ŸŽ“1Ÿģ×1Ÿöũ1Ÿ?P1Ÿo—1ŸĄĨ1ŸnĒWŽ“WoyWnsVœŸv ŸŸ¤VsœWœ¤wtŸŽ“WoyWœŸv ŸŸ¤V|™WŽ“WoyW?PuPx‹uPĄĨuPēŧPŧ uD†ˆuDģ×uDöũuD‹—uDēŧQŧõuT†ˆuTģ×uTöũuT‹—uTē21ŸOˆ1Ÿģ×1Ÿöũ1Ÿ‹—1ŸēŧPŧ2VOˆVģ×VöøVŧäVäõvtŸ†ˆVģ×VöøVÄáV†ˆVģ×VöøVÄ×VöøVÄ×uDöũuD‹—uD2uTOWuT W2WOsW WwtŸ2WOWwtŸ wŸw|Ÿ2wŸOWw|Ÿ u\Ÿ2u\ŸOWu\Ÿ,PW†uT^juT#P#'uD'uP'?uPkouP—ĄuP.:uPPkuHPkuH#ŸYdu\ŸdhRhku\ŸYhPn r P“r ĄuP“ĄĄtL“ĄÆĄuP“ÆĄĮĄtL“ĮĄÚŖuP“n r Pr ĄuPĄĄtLĄÆĄuPÆĄĮĄtLĮĄÚŖuP{  P Á uTĄĄPĄdĄuTĮĄVĸuTŖ#ŖuT=ŖPŖuTxŖzŖuTŠŖŖuTĄdĄ&Ÿ=ŖPŖ&Ÿ@ĄdĄBŸŸ Ŗ PŖ ĄuHĄĄtDdĄÆĄuHÆĄĮĄtDĮĄ=ŖuHPŖÚŖuHŸ Ŗ p€ŸŖ ĄuH#€ŸĄĄtD#€ŸdĄÆĄuH#€ŸÆĄĮĄtD#€ŸĮĄ=ŖuH#€ŸPŖÚŖuH#€Ÿ¤ ˇ PĮĄŲĄP•ĸ™ĸP™ĸŖuDŖŸŖuDčĄ#ŖuH#„Ÿ5Ŗ=ŖuH#„ŸxŖÚŖuH#„ŸčĄ1ĸR1ĸŖuDŖŖRŖ#ŖuD5Ŗ=ŖuDxŖŠŖuDŠŖŽŖRŽŖÚŖuDķĄ#ŖuH#„Ÿ5Ŗ=ŖuH#„ŸxŖÚŖuH#„ŸķĄöĄPöĄ#ŖuL5Ŗ=ŖuLxŖÚŖuL"ĸ#ŖuH#„Ÿ5Ŗ=ŖuH#„ŸxŖÚŖuH#„Ÿ"ĸ1ĸP1ĸ9ĸ v2&ĢÕĒÕzŸŖŖPŖ#Ŗ v2&ĢÕĒÕzŸxŖzŖ v2&ĢÕĒÕzŸŠŖŽŖPŽŖŖ v2&ĢÕĒÕzŸ"ĸ#ŖuL5Ŗ=ŖuLxŖÚŖuLŖŖPŖ#Ŗ v2&ĢÕĒÕzŸxŖzŖ v2&ĢÕĒÕzŸŠŖŽŖPŽŖŖ v2&ĢÕĒÕzŸŖ#Ŗ0ŸxŖzŖ0ŸŠŖŖ0ŸVĸŖuL5Ŗ=ŖuLŖÚŖuLVĸ^ĸP^ĸŖu@5Ŗ=ŖPŖÚŖu@VĸŖ1Ÿ5Ŗ=Ŗ1ŸŖÚŖ1ŸVĸ^ĸV“5Ŗ=ŖV“Vĸ^ĸP^ĸŒĸW5Ŗ=ŖPŸŖÚŖW^ĸ„ĸW„ĸŒĸwtŸŸŖÚŖWdĸĸWŸŖÚŖWČŖĐŖuL#uL<ŸČŖÔŖPĖŖĐŖuL#uL<ŸĖŖÔŖPĢĸˇĸPˇĸŖVŖ”ŖVÍ ß R#Ŗ+ŖR+Ŗ/ŖqÍ ß rŸ#Ŗ+ŖrŸ+Ŗ/Ŗq#ŸĶ ĄudŸĄĄt`ŸdĄÆĄudŸÆĄĮĄt`Ÿ#Ŗ5ŖudŸPŖcŖudŸĶ ß P#Ŗ/ŖPß ĄōˇŨdĄĮĄōˇŨPŖcŖōˇŨß ĄuPĄĄtLdĄÆĄuPÆĄĮĄtLPŖcŖuPų ĄPdĄnĄPnĄÆĄuTÆĄĮĄtPPŖcŖuTĄĮĄUŸPŖcŖUŸ ĄĮĄBŸeŖxŖōˇŨQ¤X¤P“X¤Š‘“ŠjŠ‘“nŠôŠ‘“0¤B¤‘”#ŸB¤G¤PQ¤X¤PX¤Š‘ŠjŠ‘nŠôŠ‘Q¤ŠōŠæŠjŠōŠænŠôŠōŠæY¤j¤‘#$j¤Ф‘°´ĨĻ‘°Y¤g¤ ‘#$#€Ÿg¤n¤Pn¤Ф‘°#€Ÿ´ĨĻ‘°#€Ÿw¤y¤PĻĻP´Ĩ‡¨ŸŊ¨Ų¨ŸŠbŠŸnŠŠŸ´Ĩ‡¨‘”Ŋ¨Ų¨‘”ŠbŠ‘”nŠŠ‘”ÕĨ‡¨›ŸŊ¨Ų¨›ŸŠbŠ›ŸnŠŠ›ŸÕĨ‡¨‘”Ŋ¨Ų¨‘”ŠbŠ‘”nŠŠ‘”ęĨ‡¨ ŸŊ¨Ų¨ ŸŠbŠ ŸnŠŠ ŸęĨ‡¨‘”Ŋ¨Ų¨‘”ŠbŠ‘”nŠŠ‘” Ļ,ĻP,Ļ7Ļ r2&ĢÕĒÕzŸ÷ĨĻ‘#$Ļ7Ļ‘°÷ĨĻ ‘#$#€ŸĻ ĻP Ļ7Ļ‘°#€ŸĻĻP]Ļ×ĻVD¨K¨VnŠpŠV7ĻįĻ‘¤ųĻũĻPũχ¨‘¤Ŋ¨Ų¨‘¤ŠbŠ‘¤nŠŠ‘¤7ĻįĻ‘¤#€ŸųĻũĻp€Ÿũχ¨‘¤#€ŸŊ¨Ų¨‘¤#€ŸŠbŠ‘¤#€ŸnŠŠ‘¤#€Ÿ7ĻHĻPūϧPÕ§Ų§PŲ§D¨‘œIŠYŠ‘œ!§D¨‘¤#„ŸW¨‡¨‘¤#„ŸŊ¨Ų¨‘¤#„ŸŠbŠ‘¤#„Ÿ!§j§Qj§D¨‘œW¨s¨Qs¨‡¨‘œŊ¨Ų¨‘œŠYŠ‘œYŠ]ŠQ]ŠbŠ‘œ,§D¨‘¤#„ŸW¨‡¨‘¤#„ŸŊ¨Ų¨‘¤#„ŸŠbŠ‘¤#„Ÿ,§/§P/§D¨‘¨W¨‡¨‘¨Ŋ¨Ų¨‘¨ŠbŠ‘¨[§D¨‘¤#„ŸW¨‡¨‘¤#„ŸŊ¨Ų¨‘¤#„ŸŠbŠ‘¤#„Ÿ[§j§Pj§r§ v2&ĢÕĒÕzŸW¨s¨Ps¨¨ v2&ĢÕĒÕzŸYŠ]ŠP]Š`Š v2&ĢÕĒÕzŸ[§D¨‘¨W¨‡¨‘¨Ŋ¨Ų¨‘¨ŠbŠ‘¨W¨s¨Ps¨¨ v2&ĢÕĒÕzŸYŠ]ŠP]Š`Š v2&ĢÕĒÕzŸW¨¨0ŸYŠbŠ0Ÿ§D¨‘¨¨‡¨‘¨Ŋ¨Ų¨‘¨Š9Š‘¨IŠYŠ‘¨§—§P—§D¨‘˜¨‡¨PŊ¨Ų¨‘˜Š9Š‘˜IŠYŠ‘˜§D¨1Ÿ¨‡¨1ŸŊ¨Ų¨1ŸŠ9Š1ŸIŠYŠ1Ÿ§—§V“¨‡¨V“§—§P—§˧W¨‡¨PŊ¨Ų¨WŠ9ŠW—§ħWħ˧wtŸŊ¨Ų¨WŠ9ŠW¤§Á§WŊ¨Ų¨WŠ9ŠWƨŲ¨WŠ9ŠWƨŲ¨‘˜Š9Š‘˜#Š9Š‘¨)Š1Š‘¨#‘¨<Ÿ)Š5ŠP-Š1Š‘¨#‘¨<Ÿ-Š5ŠPë§÷§P÷§D¨VIŠNŠVpĻįĻŸD¨W¨ŸnŠŠŸpĻįĻ‘”D¨W¨‘”nŠŠ‘”pĻxĻpŸxĻ}ĻP„ĻįĻ‘DŸD¨W¨‘DŸ„ĻįĻ‘”D¨W¨‘”„ĻŽĻ‘”#ŸŽĻ“ĻPĻįĻuŸD¨W¨uŸĻįĻ‘”D¨W¨‘”ĻĻĻ‘”#ŸĻĻĢĻP˛Ļ×ĻvŸD¨K¨vŸ˛ĻįĻ‘”D¨W¨‘”˛ĻŧĻ‘”#ŸŧĻÁĻPČĻįĻ‘DŸD¨W¨‘DŸËĻįĻ‘PŸD¨K¨‘PŸK¨W¨VËĻ×ĻPD¨Q¨PpŠŠ‘DŸvŠ…Š‘PŸ…ЉŠR‰ŠŠ‘PŸvЉŠPФ´Ĩ‘‡¨Ŋ¨‘Ų¨ų¨‘bŠfŠ‘ŠôŠ‘ŋ¤ĨV‡¨“¨VŠ‘ŠVÚŠÜŠVįŠéŠVŋ¤EĨ‘GĨĨ‘‡¨Ŋ¨‘Ų¨ų¨‘bŠfŠ‘ŠôŠ‘ŋ¤Į¤PĮ¤Ĩ‘ ‡¨Ŋ¨‘ Ų¨ų¨‘ bŠfŠ‘ ŠôŠ‘ ŋ¤Ĩ‘‡¨Ŋ¨‘Ų¨ų¨‘bŠfŠ‘ŠôŠ‘ŋ¤Ĩ‘PŸĨ|ĨV|ĨĨ‘PŸ‡¨“¨‘PŸ“¨Ŋ¨VŲ¨ņ¨Vņ¨õ¨tõ¨ų¨‘PŸbŠfŠVŠôŠ‘PŸ‘ŠĢŠ‘\ŸŠĢŠWŠĒŠPĢŠžŠ‘TŸąŠšŠ‘LŸšŠŊŠRŊŠžŠ‘LŸąŠŊŠPĩ¤Ĩ‘HŸ‡¨Ŋ¨‘HŸŲ¨ų¨‘HŸbŠfŠ‘HŸŠôŠ‘HŸũ¤Ĩ‘HŸ‡¨Ŋ¨‘HŸŲ¨ų¨‘HŸbŠfŠ‘HŸĨĨWĨĨ‘LŸ‡¨“¨W“¨Ŋ¨‘LŸŲ¨ų¨‘LŸbŠfŠ‘LŸĨ ĨP‡¨¨P_ĨĨōŠæjĨĨ‘”Ĩ´ĨŸĨ´Ĩ‘”šĨ´Ĩ‘šĨ´Ĩ‘”šĨĻĨ‘”#ŸĻĨĢĨPų¨ŠōŠæŠŠ‘”žŠÚŠ‘HŸÄŠĐŠ‘LŸĐŠÔŠRÔŠÚŠ‘LŸÄŠÔŠP‚Ē˜ĒV˜ĒšĒu`ŸšĒ›Ēt\Ÿ›ĒÄĒVÄĒÆĒu`ŸÆĒĮĒt\Ÿ…ĒšĒu_ŸšĒ›Ēt[Ÿ›ĒÆĒu_ŸÆĒĮĒt[Ÿ…ĒŒĒPŒĒ“Ēv<Ÿ›Ē§ĒP‰Ē“ĒudŸ¨Ē˛ĒudŸĒ“ĒVŽĒ˛Ēu`ŸĒ›ĒPŽĒžĒPĪĒęĒudŸÕĒÜĒu_ŸÜĒāĒRāĒęĒu_ŸÕĒāĒPøĒ˙Ēu_Ÿ˙ĒĢRĢĢu_ŸøĒĢPpĢŨĢW\ŦkŦWŖŦĩŦWĮŦāŦWpĢŨĢudŸ\ŦkŦudŸŖŦĩŦudŸĮŦāŦudŸxĢzĢPĩĢŨĢu\ŸĩĢŨĢ0ŸŨĢ6Ŧu`Ÿ6Ŧ7Ŧt\Ÿ7Ŧ[Ŧu`Ÿ[Ŧ\Ŧt\ŸkŦ€Ŧu`ŸŨĢ6ŦudŸ6Ŧ7Ŧt`Ÿ7Ŧ[ŦudŸ[Ŧ\Ŧt`ŸkŦ€ŦudŸŨĢ\Ŧ0ŸkŦ€Ŧ0Ÿ˙ĢŦQkŦzŦQzŦ€ŦuP Ŧ(Ŧu\ŸkŦ€Ŧu\Ÿ ŦŦPkŦzŦPĻŦĩŦu\ŸĩŦĮŦu`ŸĩŦēŦudŸēŦÁŦPÁŦĮŦudŸ Ŧ(ŦvŸIŦTŦvŸ#Ŧ(Ŧu`ŸOŦTŦu`Ÿ#Ŧ.ŦPOŦ\ŦPƒŦŖŦvŸ‰ŦŖŦu`Ÿ‰Ŧ—ŦP ­[­V“F¯P¯V“ ­­p“­­w“*­F¯‘S¯ģ¯‘9­^­0Ÿž­ ŽV Ž.Ž8 Ÿ Ž.Ž‘D ŽŽ‘D#ŸŽ ŽPp­ž­Vž­ ŽvŸp­ ŽĐŸp­ Ž‘Dp­‡­‘D#Ÿ‡­­P”­ Ž‘D”­ ­‘D#Ÿ ­Ĩ­PŦ­ ŽĐŸŦ­ Ž‘DŦ­˛­pŸ˛­ˇ­PÚ­ ŽŪŸÚ­ Ž‘DÚ­ė­‘D#Ÿė­ņ­P@ŽF¯‘DS¯ ¯‘Dˇ¯ģ¯‘DĨ¯ˇ¯‘DWŽF¯ ŸS¯]¯ Ÿ~¯ ¯ Ÿˇ¯ģ¯ ŸWŽF¯‘DS¯]¯‘D~¯ ¯‘Dˇ¯ģ¯‘DpŽF¯‘S¯]¯‘~¯ޝ‘pŽF¯‘DS¯]¯‘D~¯ޝ‘DpŽ|Ž‘D#Ÿ|ށŽPŠŽF¯ŸS¯]¯Ÿ~¯ޝŸŠŽF¯‘DS¯]¯‘D~¯ޝ‘DŽF¯‘\ŸS¯]¯‘\Ÿ~¯ޝ‘\ŸŽF¯‘DS¯]¯‘D~¯ޝ‘DŽ§Ž‘D#Ÿ§ŽŦŽPĩŽF¯= ŸS¯]¯= Ÿ~¯ޝ= ŸĩŽF¯‘DS¯]¯‘D~¯ޝ‘DÄŽF¯›ŸS¯]¯›Ÿ~¯ޝ›ŸÄŽF¯‘DS¯]¯‘D~¯ޝ‘DߎF¯ŗŸS¯]¯ŗŸ~¯ޝŗŸßŽF¯‘DS¯]¯‘D~¯ޝ‘D#¯F¯‘DS¯]¯‘D1¯F¯‘\ŸS¯]¯‘\Ÿ4¯F¯‘DS¯]¯‘D4¯<¯PS¯Z¯P_¯~¯‘\Ÿe¯p¯‘WŸp¯t¯Rt¯~¯‘WŸe¯t¯Pޝ ¯‘D °°W°,°uD,°v°uXŸv°w°tTŸw°‡°W°v°uWŸv°w°tSŸw°‡°uWŸ°°Pw°°P°v°u\Ÿv°w°tXŸ °v°u\Ÿv°w°tXŸ °[°W °,°V °F°VF°S°v|ŸS°t°V,°3°V3°7°v|Ÿ7°F°VF°U°v|Ÿ,°7°uXŸ<°[°uXŸ,°7°P<°M°P[°v°u\Ÿv°w°tXŸ[°c° udu\4Ÿ[°u°W_°c° udu\4Ÿ_°k°Wĸ°­°uWŸ­°ą°Rą°´°uWŸĸ°ą°Pđ°!ąu“잺u““´™´u“ˇąŊąP%ŗ=ŗPYŗ\ŗPåŗčŗPđ°!ąu잺u“´™´uąąPą.ąW잯˛PÆ˛ŗW“´¨´WÚ˛ŗ&Ÿ“´¨´&Ÿû˛ŗBŸ.ą2ąV2ą3ąt3ą7ąt7ąģ˛uLŸŗR´uLŸe´“´uLŸŦ´ ĩuLŸ.ą2ąuPŸ2ąMąVMąNątNąUątUąģ˛uPŸŗR´uPŸe´“´uPŸŦ´´´V´´ ĩuPŸ=ą@ąp,Ÿ@ąJąu#,Ÿ=ą@ąp0Ÿ@ąJąu#0Ÿ˛˛u#0Ÿŗ%ŗp0Ÿ%ŗ.ŗu#0Ÿ.ŗ=ŗq0Ÿåŗîŗu#0ŸCąJąu#,ŸQąUątUąģ˛uPŸŗ@´uPŸe´“´uPŸļ´ ĩuPŸQąēąuŧ“uŗ‚ŗuŧ“´@´uŧ“ļ´ĩuŧ“QąUąP“Uąģ˛u¸“ŗ@´u¸“e´“´u¸“ļ´ ĩu¸“Qą|ąV|ąģ˛uXŸŗ´uXŸ´ ´V ´@´uXŸe´“´uXŸļ´ž´Vž´ôuXŸÃ´Ë´VË´ ĩuXŸ[ą|ąV|ąģ˛uXŸŗ´uXŸ´ ´V ´.´uXŸe´“´uXŸÃ´Ë´VË´ ĩuXŸ[ąfąPfąmąWmąģ˛u´ŗ.´u´e´“´u´ôÅ´WÅ´ ĩu´iąmąWmąģ˛u´ŗ´u´e´“´u´Đ´ ĩu´iąmąu\Ÿmą—ąW—ą˜ąt˜ąœątœąģ˛u\Ÿŗuŗu\Ÿuŗ‚ŗW‚ŗ´u\Ÿ´´W´´u\Ÿe´“´u\ŸĐ´ ĩu\Ÿ‚ąģ˛u´ŗ´u´e´“´u´Đ´ ĩu´‚ąˇąu´ˇąČąudŸČąÖąu\ŸÖąäąuXŸäąģ˛uPŸŗuŗuPŸuŗ‚ŗu´‚ŗ•ŗudŸ•ŗĨŗu\ŸĨŗĩŗuXŸĩŗ´uPŸe´“´uPŸĐ´Ō´u´Ō´í´u\Ÿí´ī´u´ī´ĩudŸĩ ĩuPŸˆąąRąģ˛u@ŗuŗu@uŗ|ŗR|ŗ´u@e´“´u@Đ´ ĩu@ˆąąPuŗ|ŗP´´u`Ÿ´´udŸ´´R´´udŸ´´Pąģ˛u\Ÿŗuŗu\Ÿ‚ŗ´u\Ÿe´“´u\ŸĐ´ ĩu\Ÿąģ˛udŸŗuŗudŸ‚ŗ´udŸe´“´udŸĐ´ ĩudŸˇąģ˛udŸŗuŗudŸ‚ŗ´udŸe´“´udŸĩ ĩudŸˇąČąudŸČąģ˛u\Ÿŗuŗu\Ÿ‚ŗ•ŗudŸ•ŗ´u\Ÿe´“´u\Ÿĩ ĩu\ŸˇąČąudŸČąÖąu\ŸÖąäąuXŸäąģ˛uPŸŗuŗuPŸ‚ŗ•ŗudŸ•ŗĨŗu\ŸĨŗĩŗuXŸĩŗ´uPŸe´“´uPŸĩ ĩuPŸĀąģ˛u`Ÿŗuŗu`Ÿ‚ŗ´u`Ÿe´“´u`Ÿĩ ĩu`ŸĀąČąP‚ŗŗPī´ĩudŸõ´ĩu`Ÿõ´ĩPČąģ˛u\Ÿŗuŗu\Ÿ•ŗ´u\Ÿe´“´u\Ÿĩ ĩu\ŸČąÖąu\ŸÖąäąuXŸäąģ˛uPŸŗuŗuPŸ•ŗĨŗu\ŸĨŗĩŗuXŸĩŗ´uPŸe´“´uPŸĩ ĩuPŸÎąģ˛udŸŗuŗudŸ•ŗ´udŸe´“´udŸĩ ĩudŸÎąÖąP•ŗŸŗPÖąģ˛uXŸŗuŗuXŸĨŗ´uXŸe´“´uXŸĩ ĩuXŸÖąäąuXŸäąģ˛uPŸŗuŗuPŸĨŗĩŗuXŸĩŗ´uPŸe´“´uPŸĩ ĩuPŸÜąģ˛udŸŗuŗudŸĨŗ´udŸe´“´udŸĩ ĩudŸÜąäąPĨŗ¯ŗP´.´uXŸ"´)´uTŸ)´-´R-´.´uTŸ"´-´PŌ´í´u\ŸØ´í´u`ŸØ´į´Päąģ˛uPŸŗuŗuPŸĩŗ´uPŸe´“´uPŸĩ ĩuPŸęąģ˛udŸŗuŗudŸĩŗ´udŸe´“´udŸĩ ĩudŸęąōąPĩŗŋŗPōąģ˛uLŸŗuŗuLŸÅŗ´uLŸe´“´uLŸĩ ĩuLŸøąģ˛udŸŗuŗudŸÅŗ´udŸe´“´udŸĩ ĩudŸøą˛PÅŗĪŗP˛˛u#,Ÿŗ%ŗp,Ÿ%ŗ.ŗu#,Ÿ.ŗ=ŗq,Ÿåŗųŗq,Ÿ˛˛u#0Ÿŗ%ŗp0Ÿ%ŗ.ŗu#0Ÿ.ŗ=ŗq0Ÿåŗîŗu#0Ÿ)˛[˛W[˛ģ˛uTŸÕŗåŗWe´z´uTŸĩĩWĩ ĩuTŸ)˛-˛P-˛ģ˛uŧÕŗåŗuŧe´z´uŧĩ ĩuŧ)˛-˛pŸ-˛2˛P2˛ģ˛uŧ#ŸÕŗåŗuŧ#Ÿe´z´uŧ#Ÿĩ ĩuŧ#Ÿ9˛[˛W[˛ģ˛uTŸÕŗåŗWe´z´uTŸ<˛ģ˛udŸÕŗåŗudŸe´z´udŸ<˛D˛PÕŗßŗPD˛ģ˛ō7 e´z´ō7 D˛O˛uO˛S˛P[˛g˛Pg˛ģ˛We´z´Ww˛ģ˛UŸe´z´UŸ˜˛ģ˛BŸŗ8ŗu8ŗ9ŗt9ŗ=ŗtåŗîŗuŗ8ŗu#,Ÿåŗîŗu#,Ÿ.ŗ8ŗu#,Ÿ.ŗ8ŗu8ŗ9ŗt9ŗ=ŗt.ŗ=ŗP=ŗbŗuŧz´}´uŧ2ŗ8ŗu8ŗ9ŗt9ŗ=ŗt2ŗ=ŗP=ŗYŗuŧz´}´uŧ}´‘´W‚´“´udŸ‚´´Pbŗuŗō7 .´@´uPŸ4´;´uTŸ;´?´R?´@´uTŸ4´?´P@´R´uLŸF´M´uTŸM´Q´RQ´R´uTŸF´Q´PR´e´ō7 ĩĩPqĩ’ĩVÆĩŨĩV˙ĩļV#ĩ\ĩudŸ\ĩdĩPdĩqĩuTqĩ”ĩudŸ”ĩ•ĩ‘\Ÿ•ĩßĩudŸßĩāĩt`Ÿāĩ!ļudŸMĩqĩĶ ŸMĩ\ĩudŸ\ĩdĩPdĩqĩuT†ĩ”ĩudŸ”ĩ•ĩ‘\ŸČĩßĩudŸßĩāĩt`Ÿ‰ĩ”ĩucŸ”ĩ•ĩ‘[ŸČĩßĩucŸßĩāĩt_Ÿ‰ĩ•ĩPČĩ×ĩPĸĩČĩÉ ŸĸĩąĩudŸąĩšĩPšĩČĩuTāĩļž ŸāĩíĩudŸíĩõĩPõĩļuT ļļucŸļļRļ!ļucŸ ļļP3ļļuļ‘ļt ‘ļŋļuŋļĀļt Āļôļu3ļļu ļ‘ļt‘ļŋļu ŋļĀļtĀļôļu 3ļ9ļu`Ÿ9ļuļVuļļu`Ÿļ‘ļt\Ÿ‘ļŋļu`ŸŋļĀļt\ŸĀļÂļVÂļáļu`ŸáļôļVÂļáļu`ŸČļĶļu_ŸĶļ×ļR×ļáļu_ŸČļ×ļPxļļu`Ÿļ‘ļt\Ÿ‘ļŋļu`ŸŋļĀļt\ŸxļļudŸļ‘ļt`Ÿ‘ļŋļudŸŋļĀļt`Ÿ{ļļu_Ÿļ‘ļt[Ÿ‘ļŋļu_ŸŋļĀļt[Ÿ{ļ‚ļP‚ļ‰ļud<Ÿ‘ļŸļPļ‰ļu`Ÿ ļĒļu`Ÿ…ļ‰ļu_ŸĻļĒļu_Ÿ…ļ‘ļPĻļˇļPRˇƒˇWƒˇÛˇuTÛˇܡtPܡ'¸uT'¸:¸u\Ÿ:¸B¸WB¸D¸uTD¸H¸W˜ˇŲˇVŲˇÛˇudŸÛˇܡt`ŸÜˇúˇV›ˇÛˇu[ŸÛˇܡtWŸÜˇúˇu[Ÿ›ˇŸˇPéˇ÷ˇPŸˇÛˇu`ŸÛˇܡt\ŸÜˇéˇu`ŸĨˇÛˇudŸÛˇܡt`ŸÜˇéˇudŸĨˇЎPܡæˇPЎÛˇu\ŸÛˇܡtXŸŠˇܡ0Ÿüˇ¸udŸ¸¸u[Ÿ¸¸R¸¸u[Ÿ¸¸P¸&¸u`Ÿ¸!¸u[Ÿ!¸%¸R%¸&¸u[Ÿ¸%¸P&¸:¸u\Ÿl¸ž¸PPŧXŧPl¸ž¸p€PŧXŧp€}¸†¸Q†¸ž¸p€# PŧXŧp€# €¸ž¸Rž¸ǏuLPŧ`ŧR‰¸‘¸V‘¸ž¸ p€# #ž¸ā¸uP‡ēOŧuPOŧPŧtLPŧXŧ p€# #Xŧ_ŧuP_ŧ`ŧtLģŧ.ŊuPgŊkŊuP‰¸Ų¸W‡ēĨēWPŧ^ŧW‰¸ž¸Qž¸uTPŧ`ŧQ‘¸Ô¸V‡ēŧVPŧ]ŧV]ŧ^ŧwģŧŊV€¸†¸Q†¸ž¸p€# PŧXŧp€# €¸†¸qŸ†¸‰¸ p€# #Ÿ‰¸Ų¸wŸ‡ēĨēwŸPŧ^ŧwŸĒ¸ޏRޏ†ēuL†ē‡ētH‡ēŦēuL`ŧģŧuL?ŊBŊuLSŊgŊuL¯¸ģ¸uTp)ŸÔ¸AēV`ŧģŧVÔ¸Ų¸W帇ē<Ÿ`ŧģŧ<Ÿ?ŊgŊ<Ÿå¸…ēW…ē†ēudŸ†ē‡ēt`Ÿ`ŧģŧW?ŊgŊWå¸÷¸w#Ÿ÷¸ü¸P š‡ēČŸ`ŧģŧČŸSŊgŊČŸ š…ēW…ē†ēudŸ†ē‡ēt`Ÿ`ŧģŧWSŊgŊW ššqŸššP!š‡ēV Ÿ`ŧģŧV ŸSŊgŊV Ÿ!š…ēW…ē†ēudŸ†ē‡ēt`Ÿ`ŧģŧWSŊgŊW!š'šqŸ'š,šP†šĶšōõ" Ķš‡ēōč" {ŧ›ŧōč" ›ŧģŧōõ" SŊgŊōč" 3š…ēW…ē†ēudŸ†ē‡ēt`Ÿ`ŧģŧWSŊgŊW`ŧ{ŧudŸVš‡ē`Ÿ{ŧģŧ`ŸSŊgŊ`ŸVš[šud#Ÿ_šbšpŸbšgšPqš‡ēn Ÿ{ŧģŧn ŸSŊgŊn Ÿqšsšud#Ÿzš}špŸ}š‚šP†š†ēudŸ†ē‡ēt`Ÿ{ŧģŧudŸSŊgŊudŸ›ŧģŧudŸ§š‡ēt Ÿ{ŧ›ŧt ŸSŊgŊt Ÿ§šŦšud#Ÿ°šŗšpŸŗš¸šPŋš‡ēn Ÿ{ŧ›ŧn ŸSŊgŊn ŸŋšĮšpŸĮšĖšPĶš‡ēōč" {ŧ›ŧōč" SŊgŊōč" Ķš†ēudŸ†ē‡ēt`Ÿ{ŧ›ŧudŸSŊgŊudŸ{ŧ›ŧudŸöš‡ēŸSŊgŊŸöšûšud#Ÿ˙šēpŸēēPē‡ē,ŸSŊgŊ,Ÿēēud#ŸēēpŸēēP)ē‡ē’ ŸSŊgŊ’ Ÿ)ē+ēud#Ÿ/ē2ēpŸ2ē7ēPlē†ēudŸ†ē‡ēt`ŸAŊSŊudŸ ēĨēWąēPŧ<Ÿģŧ?Ŋ<ŸgŊkŊ<ŸąēNŧWNŧOŧudŸOŧPŧt`Ÿģŧ?ŊWgŊkŊWąēÃēw#ŸÃēČēPÕēPŧ|Ÿģŧ-Ŋ|ŸÕēNŧWNŧOŧudŸOŧPŧt`Ÿģŧ-ŊWÕēÛēqŸÛēāēP:ģrģōö! rģPŧō)" ģŧÛŧō)" ûŧŊōö! Ŋ-Ŋō)" įēNŧWNŧOŧudŸOŧPŧt`Ÿģŧ-ŊWÛŧûŧudŸ ģPŧ`ŸģŧÛŧ`Ÿûŧ-Ŋ`Ÿ ģģud#ŸģģpŸģģP%ģPŧ˜ ŸģŧÛŧ˜ Ÿûŧ-Ŋ˜ Ÿ%ģ'ģud#Ÿ+ģ.ģpŸ.ģ3ģP:ģOŧudŸOŧPŧt`ŸģŧÛŧudŸûŧ-ŊudŸûŧŊudŸ]ģPŧĒ ŸģŧÛŧĒ ŸŊ-ŊĒ Ÿ]ģbģud#ŸfģiģpŸiģnģPrģPŧō)" ģŧÛŧō)" Ŋ-Ŋō)" rģOŧudŸOŧPŧt`ŸģŧÛŧudŸŊ-ŊudŸģŧÛŧudŸ“ģPŧŸŊ-ŊŸ“ģ˜ģud#ŸœģŸģpŸŸģ¤ģPŽģPŧlŸŊ-ŊlŸŽģ°ģud#Ÿ´ģˇģpŸˇģŧģPÆģPŧŦŸŊ-ŊŦŸÆģČģud#ŸĖģĪģpŸĪģÔģPŪģPŧėŸŊ-ŊėŸŪģāģud#ŸäģįģpŸįģėģPöģPŧ,ŸŊ-Ŋ,Ÿöģøģud#Ÿüģ˙ģpŸ˙ģŧP9ŧOŧudŸOŧPŧt`Ÿ-Ŋ?ŊudŸ‰¸Ų¸wŸ‡ēĨēwŸPŧ^ŧwŸŊ§ŊR§ŊžuD-žEžuD­ŊŗŊPŗŊ*žV-žŋVÂŋÄŋVÆŋČŋVĘŋĖŋV‡ŊžW-žĀžWÆŋĘŋWėŊôŊPôŊøŊtøŊüŊtžžP-ž;ž0Ÿžžu`Ÿ-ž°žu`Ÿ°žļžRļžÎŋu`Ÿž-ž0Ÿ4žÎŋ0ŸžžudŸ4žÎŋudŸVž­ŋŋ ŸÂŋĘŋŋ ŸVžŸŋuDŸŋ­ŋu\ŸÂŋĘŋuDVž\žqŸ\žažPbžžŋō›/ ÂŋÆŋō›/ bžžŋuDÂŋÆŋuDbžĀžWbžežuD#ŸmžužqŸužzžP‡žžŋhŸÂŋÆŋhŸ‡žžqŸž’žPîžzŋuTŸņž0ŋW0ŋVŋuXŸVŋiŋWiŋzŋuXŸņžũžPVŋfŋPũžVŋu\Ÿiŋzŋu\ŸŋVŋu`Ÿiŋzŋu`ŸŋVŋudŸiŋzŋudŸŋVŋ0Ÿiŋzŋ0Ÿ8ŋVŋWiŋzŋW=ŋVŋu\Ÿiŋzŋu\Ÿ=ŋEŋPiŋwŋPˆŋžŋuTŸŽŋ™ŋuSŸ™ŋŋRŋžŋuSŸŽŋŋPžŋ­ŋu\Ÿ­ŋÂŋu`Ÿ­ŋ˛ŋudŸ˛ŋšŋPšŋÂŋudŸĀ)ĀV)Ā*ĀutŸ*Ā+ĀtpŸ+Ā=ĀV=Ā>ĀutŸ>Ā?Ā‘lŸĀ*ĀusŸ*Ā+ĀtoŸ+Ā>ĀusŸ>Ā?Ā‘kŸĀ7ĀPGĀRĀusŸRĀVĀRVĀ`ĀusŸGĀVĀP‘%V“W“.<V“W“nvV“W“.<unûu~uƒ“u.<u “W“n¨u “W“¨Øu “uu"Ÿ“ØÜu “W“Üûu “uu"Ÿ“~u “W“~ƒ“W“ƒ“u “W“.<unûu~uƒ“u’™PˇÔVēÅucŸÅÉRÉÔucŸēÉPÜōudŸâíucŸíņRņōucŸâņP)FV,7ucŸ7;R;FucŸ,;P_uudŸepucŸptRtuucŸetPˆĀöĀW÷Ā[ÁW‘%V“W“.<V“W“nvV“W“.<unũu‚u‡—u.<u “W“n¨u “W“¨Úu “uu"Ÿ“ÚŪu “W“Ūũu “uu"Ÿ“‚u “W“‚‡“W“‡—u “W“.<unũu‚u‡—u’™PˇÖVēÅucŸÅÉRÉÖucŸēÉPŪôudŸäīucŸīķRķôucŸäķP+JV.9ucŸ9=R=JucŸ.=PcyudŸitucŸtxRxyucŸixPˆÁrÂVrÂu‘uÂŽÂVÁtÂUuÂŽÂUŽÁ¯ÁP¯ÁsÂWuÂŽÂWÃÁÆÁt ÂP ‰‘XžÂŽÂ‘XÁrÂVrÂu‘uÂŽÂV`ÂtÂU`ÂuÂ0Ÿ‘%V“W“.<V“W“nvV“W“.<unûu~uƒ“u.<u “W“n¨u “W“¨Øu “uu"Ÿ“ØÜu “W“Üûu “uu"Ÿ“~u “W“~ƒ“W“ƒ“u “W“.<unûu~uƒ“u’™PˇÔVēÅucŸÅÉRÉÔucŸēÉPÜōudŸâíucŸíņRņōucŸâņP)FV,7ucŸ7;R;FucŸ,;P_uudŸepucŸptRtuucŸetPØÂęÃVęÃíÑíà ÄVęÂđÂPđÂ?ÃU?ÃíÑXíÃūÃUūà đXÃÃPÃëÃWíà ÄWWÃcÃtcÃxÑPxÃ{Ãt{ÄÑP„×Ãt—ÃĢÑPĢÃÃÃtÃÃÛÑPÛÃčÃtčÃíÑPūÃÄtÄ Ä‘P Ä ÄtęÂęÃVęÃíÑíà ÄVWÃYÃ0ŸYÃhÃUhÃlÑ@lÃuÃuŸuÃėÃUūà ÄUÔÃíÑXÔÃíÃ0ŸPÄäÆVĮģĮVžĮķČVaÄqÄ0ŸqÄtÄPtÄ-ÅW-Å3ÅP3ÅSÅWĮĮPŋČëČWˆÄŒÄPšÄ Äp0.Ÿ ÄäÆuŧ0.ŸĮŊĮuŧ0.ŸŊĮžĮt¸0.ŸžĮÉuŧ0.ŸëÄSÅ0ŸSÅäÆuģĮĮ0ŸĮĮuģžĮŋČuģáČëČ0ŸëČÉuģúÄÅuL:ÅHÅPHÅäÆu´ĮĮu´žĮŋČu´áČæČPæČëČëČÉu´BÅHÅRHÅäÆu˜ĮĮu˜žĮŋČu˜áČëČRëČÉu˜ÃÄËÄP×ČÛČPËÄÕÄPÕÄ×ÄpŸ×ÄâÄqŸâÄåÄqŸëÄäÆVĮģĮVžĮŋČVáČķČVBÅSÅ0ŸSÅäÆuPĮ€ĮuPƒĮšĮPšĮĮuPžĮŋČuPáČëČ0ŸëČÉuP‘ÅäÆu@ĮĮu@žĮŋČu@ëČÉu@SÅäÆVĮĮVžĮŋČVëČķČVSÅäÆvԟĮĮvԟžĮŋČvԟëČķČvԟ^ÅeÅP“eÅuÅuT“uÅyÅuT#Ÿ“yŃÅuT“eÅpÅuTpÅtÅtÅÅäÆvȟËÅ×ÅW“×ÅãÅwŸ“ãÅčÅW“čÅũÅW“ũÅÆw|Ÿ“×ÅčÅRęÅ˙ÅR/ÆXÆWXÆ^ÆwŸ^ÆqÆW/ÆXÆWXÆaÆwŸ/ÆaÆVHÆRÆQ/ÆaÆ ˙Ÿ/ÆaÆvāŸ€ÆäÆvȟƒÆäÆvȟƒÆäÆv˟˜Æ¨ÆRĢÆŋÆRNĮĮVžĮČV=ČŋČVëČķČVČČVÆĮįĮWįĮõĮwŸ=ČŋČWëČÉWįĮõĮWČ0Čvā0Č4ČPČ=Čv䟑%V“W“.<V“W“nvV“W“.<unũu‚u‡—u.<u “W“n¨u “W“¨Úu “uu"Ÿ“ÚŪu “W“Ūũu “uu"Ÿ“‚u “W“‚‡“W“‡—u “W“.<unũu‚u‡—u’™PˇÖVēÅucŸÅÉRÉÖucŸēÉPŪôudŸäīucŸīķRķôucŸäķP+JV.9ucŸ9=R=JucŸ.=PcyudŸitucŸtxRxyucŸixPÉÉ <0.Ÿ3É<É<ÉHÉPHÉJÉ3ÉPÉQ\ÉyÉōMO yÉĶÉn Ÿ–ÉŖÉPŖÉĶÉW–ÉĶÉōMO ˛ÉšÉPšÉĶÉVÉĶÉŸÉŖÉPŖÉĶÉWĘ"ĘP“"Ę×ĘuL“×ĘØĘtH“ØĘžËuL“žËŸËtH“ŸËŧÍuL“Ę"ĘP"Ę×ĘuL×ĘØĘtHØĘžËuLžËŸËtHŸËŧÍuL+Ę1ĘP1ĘqĘuTØĘæĘPæĘ<ËuTŸË$ĖuTÔĖ÷ĖuTÍ2ÍuTZÍ\ÍuTlÍqÍuT÷Ę<Ë&ŸÍ2Í&ŸË<ËBŸOĘSĘPSĘ×ĘuH×ĘØĘtD<ËžËuHžËŸËtDŸËÍuH2ÍŧÍuHOĘSĘp€ŸSĘ×ĘuH#€Ÿ×ĘØĘtD#€Ÿ<ËžËuH#€ŸžËŸËtD#€ŸŸËÍuH#€Ÿ2ÍŧÍuH#€ŸTĘgĘPŸËŠËPeĖiĖPiĖÔĖuDq́ÍuD¸Ë÷ĖuH#„ŸÍÍuH#„ŸZÍŧÍuH#„Ÿ¸ËĖRĖÔĖuDÔĖëĖRëĖ÷ĖuDÍÍuDZÍlÍuDlÍpÍRpÍŧÍuDÃË÷ĖuH#„ŸÍÍuH#„ŸZÍŧÍuH#„ŸÃËÆËPÆË÷ĖuPÍÍuPZÍŧÍuPōË÷ĖuH#„ŸÍÍuH#„ŸZÍŧÍuH#„ŸōËĖPĖ Ė v2&ĢÕĒÕzŸÔĖëĖPëĖ÷Ė v2&ĢÕĒÕzŸZÍ\Í v2&ĢÕĒÕzŸlÍpÍPpÍqÍ v2&ĢÕĒÕzŸōË÷ĖuPÍÍuPZÍŧÍuPÔĖëĖPëĖ÷Ė v2&ĢÕĒÕzŸZÍ\Í v2&ĢÕĒÕzŸlÍpÍPpÍqÍ v2&ĢÕĒÕzŸÔĖ÷Ė0ŸZÍ\Í0ŸlÍqÍ0Ÿ$ĖÔĖuPÍÍuPqÍŧÍuP$Ė.ĖP.ĖÔĖu@ÍÍPqÍŧÍu@$ĖÔĖ1ŸÍÍ1ŸqÍŧÍ1Ÿ$Ė.ĖV“ÍÍV“$Ė.ĖP.Ė\ĖWÍÍPÍŧÍW.ĖTĖWTĖ\ĖwtŸÍŧÍW4ĖQĖWÍŧÍWĒͲÍuP#uP<ŸĒÍļÍPŽÍ˛ÍuP#uP<ŸŽÍļÍP{ˇĖP‡ĖÔĖVqÍvÍVqĘœĘu œĘĄĘQ÷ĖÍu €ĘœĘu œĘĄĘQ€ĘĘPĘœĘuP#œĘĄĘpxŸ„ĘœĘu œĘĄĘQ„ʍĘPĘœĘuP#œĘĄĘpxŸ´ĘØĘōnQ <ËŸËōnQ 2ÍEÍōnQ ´Ę×ĘuL×ĘØĘtH<ËžËuLžËŸËtH2ÍEÍuLÎĘØĘP<ËFËPFËžËuTžËŸËtP2ÍEÍuTWËŸËUŸ2ÍEÍUŸxËŸËBŸGÍZÍōnQ ÃÍ7Îu\Ÿ7Î8ÎtXŸ8Î^Îu\Ÿ^Î_ÎtXŸ_Î’Îu\ŸÃÍûÍudŸûÍÎPÎ7ÎudŸ7Î8Ît`Ÿ8Î^ÎudŸ^Î_Ît`Ÿ_Î’ÎudŸøÍ6ÎW6Î7ÎuXŸ7Î8ÎtTŸ8Î]ÎW]Î^ÎuXŸ^Î_ÎtTŸ|Î~ÎW~Î’ÎuXŸøÍûÍudŸûÍÎPÎ7ÎudŸ7Î8Ît`Ÿ8Î^ÎudŸ^Î_Ît`Ÿ|Î’ÎudŸ Î6ÎW6Î7ÎuXŸ7Î8ÎtTŸ8Î]ÎW]Î^ÎuXŸ^Î_ÎtTŸ Î7ÎuWŸ7Î8ÎtSŸ8Î^ÎuWŸ^Î_ÎtSŸ ÎÎP8ÎGÎP)Î7Îu\Ÿ7Î8ÎtXŸJÎ^Îu\Ÿ^Î_ÎtXŸ)Î7ÎudŸ7Î8Ît`ŸJÎ^ÎudŸ^Î_Ît`Ÿ,Î7ÎuXŸ7Î8ÎtTŸJÎ^ÎuXŸ^Î_ÎtTŸ,Î8ÎPJÎVÎPaÎ|Îu\ŸaÎ|ÎudŸgÎnÎuWŸnÎrÎRrÎ|ÎuWŸgÎrÎP„΋ÎuWŸ‹ÎÎRÎ’ÎuWŸ„ΏÎP‘rWtxWz|WujVtčVbWbjwlŸtxWz|WeVejvlŸtčV$_WtxWz|W$_VtčV~™v ŸŠ”ugŸ”˜R˜™ugŸŠ˜P™ŽvŸŸ§ugŸ§ĢRĢŽugŸŸĢPˇÛVæčVˇŋuˇÅuÅÉtÎÖuŋÅuÅÉt&ugruyŠuŽŗu&lvlŸgrvlŸyŗvlŸ&lVgrVyŗV*lvlŸgrvlŸyŗvlŸ*lVgrVyŗVy‘v Ÿ…ŒuTŸŒR‘uTŸ…P‘ŽvŸ—žuTŸžĸRĸŽuTŸ—ĸPxŦWŦāwpŸwpŸ#wpŸ]eWx‹uTŸ“ąuTŸūDuTŸ]guTŸ2u`Ÿ&-uSŸ-1R12uSŸ&1P2DuXŸ8?uSŸ?CRCDuSŸ8CPĀÍplŸÍā u#DŸĀÃpXŸÃÆQÆÍpXŸÍā u#(ŸĀāu Ā‹0Ÿ“ą0Ÿū0Ÿ0ŸĀÍplŸÍā u#DŸāv|ŸvpŸ!wŸĀÃpXŸÃÆQÆÍpXŸÍā u#(ŸāvhŸv\Ÿ!w|ŸŲāRāvhŸv\Ÿ!w|Ÿāv|ŸvpŸ!wŸė!WėVvtŸ!wŸûūvtŸūPttvtŸvhŸ!wŸûvŸPvŸv|Ÿ!wŸ  vxŸ PvlŸ!w Ÿ v ŸV!w Ÿ!‹uTŸ“ąuTŸ!1u 14P49Q,‹uXŸ“ąuXŸ,1u #Ÿ14pŸ49PE‹u`Ÿ“ąu`ŸEMq ŸMRPX‹udŸ“ąudŸX^pŸ^cPp‹uTŸ“ąuTŸp‹udŸ“ąudŸs‹uSŸ“ąuSŸswP“šPw‹u`Ÿąu`Ÿ}‹uSŸąuSŸ}P¤P‹uXŸ§ąuXŸ‡‹uSŸ§ąuSŸ‡‹P§ŽPĶëvDŸĖŅvDŸãūvDŸë°u@ŅŌu@M]u@ryu@ŗĪu@ë+u@+G0ŸG\W\°u´Ņu´#u@#%W%*0Ÿ*iu@|ĒWĒļ0ŸM]u@ŗĪu@ąūō{‚ M]ō{‚ ryō{‚ ŗĪō{‚ ąū1ŸM]1Ÿry1ŸŗĪ1Ÿąûu°ŅuŌūuÉĶ1ŸĶäQŗŅQŌūQÁūōķf M]ōķf ryōķf ŗĪōķf ɰōŽ_ ģŌōŽ_ ŪūōŽ_ M]ōŽ_ ryōŽ_ ŗĪōŽ_ ĶûuĖŅuãūuÜëuÜë0ŸÜëu¸ëûuë W +wpŸ#wpŸ*3wpŸMVW[]WŗĪWëîu@v"ŸîaViV|“VĒÂVM]VŗĪVđ W +wpŸ#wpŸ*3wpŸMVW[]WŗĪWđ+V#V*iVM]VŗĪV*Bv Ÿ6=uTŸ=ARABuTŸ6APBivŸHOuTŸOSRSiuTŸHSP+°u@Ņu@#*u@|ļu@+4u 79t9=t+°1ŸŅ1Ÿ#*1Ÿ|ļ1ŸGrW#%W|ĒWGHu NRtG°1ŸŅ1Ÿ#%1Ÿ|Ē1ŸazQz°uDŅęuDazVa°VŅVz—V—œvlŸœ°VŅåVåęvlŸz—vŸ—œv|Ÿœ°vŸŅåvŸåęv|ŸzœuTŸĸ°uTŸŅęuTŸĸ­Pz—v Ÿ—œvxŸŅåv ŸåęvxŸ†œuTŸŅęuTŸ†ŠPÛâPŠ—vŸ—œvpŸŅÛvŸåęvpŸœuTŸŅÛuTŸåęuTŸ”PŅØPęöQîöQÂËu@iwu@Œ•u@•œVœ t ĄvlŸĄĒV•œVœ t ĒvlŸļÂVēÎöÎWöÎĪu ĪĪtĪ4ĪW4ĪTĪu YĪxĪu ŖÎĪuĪĪtĪTĪuYĪxĪuÂÎĪu2ĪTĪuYĪxĪuÂÎöÎWöÎĪu 2Ī4ĪW4ĪTĪu YĪxĪu ÂÎĪV2ĪxĪVÆÎöÎWöÎĪu 2Ī4ĪW4ĪTĪu YĪxĪu ÆÎĪV2ĪxĪV=ĪYĪvŸCĪKĪugŸKĪOĪROĪYĪugŸCĪOĪPgĪqĪugŸqĪuĪRuĪxĪugŸgĪuĪPĘĪĐWĐ'Đu 'Đ(Đt(ĐHĐWHĐhĐu mĐŒĐu ŗĪ'Đu# Ÿ'Đ(Đt# Ÿ(ĐhĐu# ŸmĐŒĐu# ŸŌĪ Đu# ŸFĐhĐu# ŸmĐŒĐu# ŸŌĪĐWĐ Đu FĐHĐWHĐhĐu mĐŒĐu ŌĪĐVFĐŒĐVÖĪĐWĐĐu FĐHĐWHĐhĐu mĐŒĐu ÖĪĐVFĐŒĐVQĐmĐvŸWĐ_ĐugŸ_ĐcĐRcĐmĐugŸWĐcĐP{Đ…ĐugŸ…ЉĐR‰ĐŒĐugŸ{ЉĐPēĐÅĐ‘#ÅĐÉĐp´~Ÿį„Ÿ„ÍŸ´ÚĐ)3X‡˜nuq€`[ckˇ­e‡Ø+ZĻC[[[ŠDšŽĻ+­}Æ%5ļɍåę]§-†ˇįŽ|||Qí - —k’z’’Cy()3)3’ž’nxčßmp刚ŨÕßX2ÄŦ`Ĩ“—“—öĪÍ%4<[^af„ŒĢŽąļÔÜûū$,KNQVt|›žĄĻÄĖëîņö¤ŦĪŌÕÚX[gĩžÂX[gĩX[glĸĨŦąč?Pb€” Ļ¨Ģ Ļ¨Ģ Ļ¨Ģ-@I-@I%-@I"'+@GUX]+@MUX]"'‡+@GUX]+@MUX]07DGL0<DGLČĘŪŗžÆŅR ČĘéŗžÆŅč R échŗžÆŅč R éø  &*GŅč &*7Ņč &*/GPSVPSVahkmxPSVYYahkmxx™ xˆ ™ĸĨ¨ĸĨ¨ŗžÆĸĨ¨ĢĢŗžÆr v z 0 r v ‡ 0 ¨ ˇ ē Ú é 0 ¨ °  0 V c e f i r € Œ ‘ š -8u%-8u8NhuŊ á ä į * 8 P ] 0 8 P ] w Ļ ¸ ô rw†Āãįōãįōôúũãįōôôú˙&)7#2i&)7Dkqtkqvy€“Ĩęđūâęđū##ļēŊÂÆ[ĀÂÆPĖĐÚôû<?DĖĐÚāûĖĐÚāāę)āææę)ęô)<?Dęđ)/đô/<?D†Š’–+’– œ ĒÄË œ Ē°ËŪœ Ē°ŅŪ°ēŪų°ļŪäļēäųēÄų ēĀų˙ĀÄ˙ +¨¯˛+/259¨¯˛=AKahŒ”=AKXh{=AKXn{Xa{Œ”X]{€]a€Œ”Ûū>@B˛ŗļÅԝ¯ÅÔ¯˛ŗļâäô&16BD[„hknt’”ĢÔâäû&24KvŊĖÕäŊÉÕä,°Y[^knoŒ™œēĮÍÎũ)H" &3677CMOTadeeq{}ĖØâååëí÷HXåëķ÷HX÷XhũXh hx hx xˆxˆˆ˜ˆ˜)˜Ĩ%)˜ĨĨ¨Žą¨ŽąŊĸ¤ŦĖŌÔÜüWZ\aŌØÜô0KNS N ŌØÜŪô` V Y g Å Đ á đ h!f"˜" "##:#f"s"x"}"##s"x"}"Ž"###(#s"x"##`#‘# #Ā#Ã#Å#Đ#į# #Ā#Đ#į#§#ļ#Đ#į#´$t%ˆ%ž%Đ$Ķ$Ö$t%ˆ%%Đ$Ķ$Ö$Ø$Û$Ũ$đ$ø$%%đ$ķ$ % %%%ø$û$ū$%k%p%û$ū$f%k%%f%ˆ%%[%f%ˆ%%Ö%Ü%ā%Y&Ö%Ü%ā%ö%ö%&&*&*&:&<&>&‡)–) )ĩ)×)é)ø) *r*{**Ž*’* *{**Ž*’* *p+{**Ž*’*ž*p+{**Ž*’*đ*p+{**Ž*’*+p+%@I!%@I%/Ia%+IO+/Oa/9ay/5ag59gy%8A!%8A%.AY%*AF*.FY^,™,,Į,^,m,r,t,v,–,,Į,-‚..¤.-r..¤.-$-*---V.^.g.j.$-*-/-2-@-V..¤.$-*-/-2-H-J-M-V..¤.$-*-/-2-h-Ę-Ø-V..¤.-­-. ..). .¤.O-\-Ę-Ė-Ī-Ô-//'/^/'///O/R/U/Z/ũ0´1Ā1č1ë1í1ø1Ŧ2'1F1I1J1u2Ŧ23191<1F1I1J1u2x2~22x2~22Ŧ2F1I1J1i1r1u1)2D2T1i1r1u1)2,22252,22252D2i1r1u11ø12i1l1u1x1l1r1x11ø121Š122…1Š122Š111“1Ŧ1´12)2¯1´12)2ŋ2đ2ķ2ø233066686;6d6}6ˆ6–6ļ6R7Z7o7073767G7073767?77ˆ7Œ7’7“7™7Ē78 8+8@8‚8ę7ū788c8‚8c8f8l8q8f8l8q8‚8ū7888 8+8ū788 8 88 8+8Ē8í89 9 9w9Í8Ü8ß8â8Y9w9Y9[9a9d9[9a9d9w9Ü8ß8â8í8 9@9Ü8ß8â8å8å8í8 9@9†9‰9—9::':6:o:†9‰9—9Ģ9É9Ō9Û9Ū9É9Ō9Û9Ū9Ō9Û9Ū9å9: :Ō9Û9Ū9å9: :Ō9Õ9Ū9á9Õ9Û9á9å9: :ķ9ö9ų9: :':ķ9ö9ų9: :':ķ9ö9ų9ü9ü9: :':S:V:\:_:V:\:_:o:„:‡:Š:ũ:;8;H;ž;:•:š: :ĸ:Ĩ:¨:Ē:ŋ:Â:Ã:Ī:Ō:Õ:Ī:Ō:Õ:Ü:H;T;Ī:Ō:Õ:Ø:Ø:Ü:H;T;Ü:đ:ķ:ö:r;Š;đ:ķ:ö:ũ:0;8;đ:ķ:ö:ų:ų:ũ:0;8;Ü;í;đ;ķ;c<<c<e<k<n<e<k<n<<í;đ;ķ;ū;0<E<í;đ;ķ;ö;ö;ū;0<E<§<ŋ<Đ<Ĩ=== ==`=l=== ==`=l=== = = ==`=l=ļ=ŧ=Ę=n>€>Ŗ>°>R?Ę=Í=Û=ú=>>Ī>ę>å=ú=>>Ī>Ō>Ø>Û>Ō>Ø>Û>ę>ú=>>>Ā>Ī>ú=ũ=> >ũ=> >>Ā>Ī>'>*>->/>C>U>X>[>;?R?U>X>[>c>°>Ā>U>X>[>^>^>c>°>Ā>c>n>Ž>‘>”>Ŗ>c>i>Ž>‘>”>—>i>n>—>Ŗ>€>Ž>‘>”>n@@°@Ū@ķ@ø@v@‹@°@Ū@ķ@ø@}@@ķ@ø@@‹@°@Ū@2A4ADAŠA×AdBxBĨBŲA-B/B2B„BĨB'B-B/B2B6BRBxB„BABRBxB„BABDBGBJBDBGBJBRBxB„B;CPCWCdCgClC;CPC\CdCgClCūCkDxD‹DāD˙D°EĐE˛EĩEēEĐEVExEFFFF FFxEĨEĐEFF$FzE“EĐEFF$FE‰EF$F‰E“EĐEFF™FžFĄF-P[%-P[ĐFHHH3HJHZHŽHĐFGG0GGG0G€G†GŒG~HŽHGG0G^G^GaGdGgGjGzG€G†G’GŽGąGŋGĘGĐGĶGH€G†G’GŽGąGŋGĘGĐGĶGäGHHHHHHH)HHHH)H•H›H­HYK\K_KpK L•H›H­HYJ‚K§KŋK L•H›H­HíHķHIíHķHIˆIŽI›IįK LíHķHIFIOIPI_I`IFIOIPI_I`IyI›IĄI¤IĖIÕIéIøI=J›IĄI¤IĖIÕIéIøIJ(J.J4J=JƒJ‘J”J—J‘J”J—JYKpK‚K¯JđJpK‚KžJĶJpK‚KĮJĶJpK‚KüJK KKK(KKK(K>KLL3L9L?LELKLÖNŲNÜNđNŠOLL3L9L?LELKLãMéMęMO'O?OŠOLL3L9L?LELKL}LƒL—L}LƒL—LMM'MgOŠO}LƒL—LĐLĶLÔLėLíLĐLĶLÔLėLíLM'M-M0MXMaMuM„MÉM'M-M0MXMaMuM„MĄM´MēMĀMÉMNNNNNNNÖNđNO,NmNđNO;NPNđNODNPNđNO–OĸOŗOtRwRzRˆRˆS–OĸOŗOQQ]Q`QSˆS–OĸOŗOËOŅOęOđO PËOŅOęOđO P‚PˆP•PjSˆSËOŅOęOđO P@P•PŸPĸPĘPĶPŨPæPėPōP7Q•PŸPĸPĘPĶPŨPæPėPōPQ"Q(Q.Q7QQQ]Q`QqQˆRāRđRScQqQˆRāRđRScQmQˆRāRđRSˆRĄR°RāRđRS‹RR“R•RSS•RĄR°RāRđRS°RāRđRSqQtQ€Q‹QqQtQ€Q‹QqQtQ€Q‹Q’Q QĻQŠQ QĻQŠQtRāRđRĐQRāRđRßQôQāRđRčQôQāRđR–SœS°SˇSŊSĄV¤V§V¸V¸W–SœS°SˇSŊSZUfUiUOW¸W–SœS°SˇSŊSÔSÚSķSųSTÔSÚSķSųST‹T‘TžTšW¸WÔSÚSķSųSTITžT¨TĢTĶTÜTæTīTõTûT@UžT¨TĢTĶTÜTæTīTõTûTU+U1U7U@UZUfUpUsUyU‡U¸VW W7WyU‡U¸VW W7WyU‡U¸VW W7WyUƒU¸VW W7W¸VŅVāVW W7WģVŊVÃVÅV2W7WÅVŅVāVW W2WāVW W2W‡UŠU“UžU‡UŠU“UžU‡UŠU“UžUŠUUąUŋUU“UžUŠUŋUÍUĶUÖUÍUĶUÖUĄVW WũU>VW W V!VW WV!VW WJVPVZVpVDXc-Xc%-Xc5C`k;C`k0CFICFIT`hCFILLT`h8^€­K^€ŒV^€Œ9Ge[i‡%+,%+/4ÚWXXœY(X,X/X5X,X/X8X;XuXX™XœX7YSY~X„X‡XX™XœX7Y9Y?YBY9Y?YBYSYX™XœXĒX(Y7YX“XœXŸX“X™XŸXĒX(Y7YČXÍXŅXÔXčXėXđXöXųXüX˙XYYYYY YYˇYģYžY6[9[<[P[Ŧ[ÛY`ZŽ[Ŧ[åYZZPZSZXZŽ[Ŧ[Z%Z&Z6Z ,28;> #&( #&( #&(8;>{°Rjmpjmp{°Ājmpss{°Ā&QTWĐđ).1QTWĐđ7CFITWĐđTWĶÖŲđQTW•đGq„‡Š„‡Š•đ„‡Š•đ  147147x°Ogjmgjmx°Āgjmppx°Āii*i.i1iÉkÖkŪlëlŸp•iąi´iˇiąi´iˇiŅi×iØiąi´iˇiģiÁiŅi×iØiŅi×iØiķiķijjjjjj'j-j/j'j-j/jPjcjfjrj„j‡jˆjrjwj}j„j‡jˆj„j‡jˆj jÔjkÖkëkël1mDpŸpėjījņj2këlølDpdpôj2këlølDpdp k kkk!k$kk!k$k2këlølkk$k'kk!k'k2këlølDpGpMpPpGpMpPpdp2kwkøl1mƒpŸpRkekhkkkekhkkkwkølmekhkkknknkwkølmmmmmwkkÖkëkwkkÖkëkwkkÖkëk§kĒkīnōnķno§kĒkīnōnķnoĒkˇkēkŊkĒkˇkēkŊkˇkēkŊkÉkÖlŪlˇkēkŊkĀkĀkÉkÖlŪlslvlxlšlslvlxlšlmm$n ooĨo p„mŠmmĨm¨mĢm„mŠmmm–mĨm¨mĢmĨm¨mĢmųm ooĨo¸oĘo pÎmįmęmímÎm×mÚmŨmįmęmímųm ooįmęmímđmđmųm oo2nĘno ooOoŽoĨo@nFnInXn[n^n@nFnInLnRnXn[n^nXn[n^nŸno oo?oŽoĨoxn‘n”n—nxnn„n‡n‘n”n—nŸno o‘n”n—nšnšnŸno o&MPSĐđ3@CDGMPSĐđPSĐÜâđMPS‘đGm€ƒ†€ƒ†‘đ€ƒ†‰‰‘đ <?Bj<?Bj<?BjŅpņplq|qŨpãpæpņplqoquqxqoquqxq|qņpqqqŋqÛqúpqqqŋqÂqČqÍqÂqČqÍqÛqqqq"q@qHqqqqqqqq"q@qHq"q,qHq_q"q(qHqNq(q,qNq_qöq‡rr˜r rÍr{8{;{@{H{~{{„{ {8{;{@{H{~{{„{ {8{;{@{H{‡{ {~{{„{‡{w{~{{„{w{~{{„{ö{ü{ |Ŋ|Đ|ũ|}ķ}C|g|Ŧ}Ô}O|U|X|g|Ŧ}¯}ĩ}¸}¯}ĩ}¸}Ô}q|Œ|•|˜|Ô}ķ}|Œ|•|˜|Ô}×}Ũ}â}×}Ũ}â}ķ}Œ|•|˜|Ÿ|} }Œ||˜|›||•|›|Ÿ|} }Ÿ|Š| }0}Ĩ|Š| }0}Š|ŗ|0}D}¯|ŗ|0}D}ŗ|Ŋ|ã|ė|ī|ũ|ŗ|š|ã|ė|ī|ō|š|Ŋ|ō|ũ|~"~$~ˆļY~\~e~h~\~e~h~ž~H—b~e~j~‡~H—b~e~q~y~—y~‡~Hž~Š~¯~˛~Š~¯~˛~ģ~ž~Á~ģ~ž~Á~ã~`€ā~ã~`€ā~ã~bej€ã~õ~ø~û~õ~ø~û~€ˆõ~ø~û~ū~ū~€ˆ€2€8€;€2€8€;€E€š€˛€¸€ģ€˛€¸€ģ€Æ€Æ€Ņ€×€Ú€Ņ€×€Ú€ã€é€ė€ã€é€ė€÷€÷€  "DD_eh_ehs~„‰~„†ąĖĪŌĖĪŌāæéāæéõøûõøû&@šZqwzqwzŠ*8‘›ŽRjpsjps~%0‰“ĻJbhkbhkvCP+"%]u{~u{~‰”š¨ąˇēÄ%(69A(146j‚ˆ‹‚ˆ‹–Ą§ĒĩĀÆÉÔÃÆČÎÆČß‚߁âåę‚‚‚ ‚D[ad[adr!‚#‚9‚9ƒHƒj„r„ą„bƒzƒ€ƒƒƒzƒ€ƒƒƒƒ0„3„6„A„G„H„O„R„U„_„1Ĩ$^dgu{~u{~ޏČĪŨāå¸ČÕŨāå1=CU1DPŠŗÆj‚ˆ‹‚ˆ‹–Ǐ…8…H†d†5…8…H†d†5…8…J†M†R†d†b…!†$†'†{†‘†~…!†$†'†ē…Ŋ…Ā…ķ…ö…†ē…Ŋ…Ā…ķ…ų…û…(žäđPVYgmpgmp~žŽĐ䞡§ĒĄ§ĒŽĐ䎸ĀČ´¸ĀČđķųüķųü¸Đ5(žôPVYgmpgmp~žŽāôžĄ§ĒĄ§ĒŽāôޏĐā´¸Đā    '‡<‡ˆ‡ˆ'‡8‡ˆ‡ˆĸ‡š‡ŋ‡Â‡š‡ŋ‡Â‡Ō‡ &5@™ŖļZrx{rx{†4PÉ"4PÉj‡Š‡Šš" ^ (^˙(oåLX— Ž´ˇŽ´ˇÅåõ8Låčîņčîņõ8Lõ˙(8û˙(8X[ad[adpLˆmˆpˆ{ˆˆųˆ ‰‰Wˆmˆpˆtˆˆųˆ ‰‰Wˆmˆˆųˆ ‰‰Ēˆ°ˆŗˆÁˆĮˆĘˆÁˆĮˆĘˆÚˆ #&OŊÕOAˆ–Õ傎‘š Ŗš Ŗ­¸ģžÁėøû  (+.(+.9DRpxJRpx.NQR:NQRNQR[dg[dgn€ˆ[^gj^djn€ˆnxˆŸntˆŽtxŽŸˇēĀÃēĀÃĪ "DWbknbknx ¨benqekqx ¨xƒ¨Đx~¨Ž~ƒŽĐĐĶŲÜĶŲÜëN`.]s‘”—(]…ˆ‘”—(+14+14]ĄŋÂÅÜ(­ŗļŋÂÅÜßåčßåč(ĪŨæéŨæéđ`hŨāéėāæėđ`hđúhđöhnöúnú—ú……——¯—¯$¯Į¯ĩ$ĩĮ$2Įß$*ĮÍ*2Íß2@ß÷28ßå8@å÷@N÷@F÷ũFNũ.17:17:F0§ %0§^@§^@§oébpš ŖąˇēąˇēÉéüPbéėōõėōõüPbü@P@Ppsy|sy|‹7‰s‰€‰9ŠAŠkŠ7‰U‰€‰ā‰AŠVŠ7‰M‰€‰ā‰AŠVŠš‰˛‰¸‰ģ‰˛‰¸‰ģ‰Æ‰X‰_‰b‰s‰ā‰9ŠVŠkŠX‰[‰b‰s‰ā‰9ŠVŠkŠú‰ŠŠŠŠŠŠ&ЇŠÃŠĐІ‹‰‹Œ‹”‹ž‹‡ŠĨŠĐŠ0‹”‹Š‹‡ŠŠĐŠ0‹”‹Š‹ęŠ‹‹ ‹‹‹ ‹‹¨Š˛ŠĩŠÃŠ0‹†‹‰‹Œ‹Š‹ž‹¨ŠĢНОŠĩŠÃŠ0‹†‹‰‹Œ‹Š‹ž‹J‹b‹h‹k‹b‹h‹k‹v‹ŒIŒXŒ$NŒ(ŒXŒĀŒ$9ŒŒXŒĀŒ$9rŒŠŒŒ“ŒŠŒŒ“ŒžŒ(ŒIŒĀŒ9N(Œ1Œ5ŒIŒĀŒ9NÚŒōŒøŒûŒōŒøŒûŒgŠ¸vŽyŽ|Ž„ŽŽŽgˆ¸ ބޙŽg}¸ ބޙŽŌęđķęđķūˆŠ ŽvŽyŽ|Ž™ŽŽŽˆ‘•Š ŽvŽyŽ|Ž™ŽŽŽ:ŽRŽXŽ[ŽRŽXŽ[ŽfŽÔŽņŽųŽ#ÔŽčŽųŽ ÔŽčŽ˙Ž čŽņŽ #čŽíŽ íŽņŽ#Z„ŒËÎĶZpŒžZp’žpzž¸pvž¤vz¤¸z„¸ËÎĶz€¸ž€„žËÎĶö qyŽ2JPSJPS^(k€ č-(+,/+,/k€ č-+,7fBHKf  fXÂĐ-™Ĩ¨ąˇēąˇēÄĪŌÕØ!!-36-36?BE?BEP[k Â[^dg^dgk ÂĐĶŲÜĶŲÜčku˜qu˜4w˜¨ĀČđ5†:w˜¨ĀČđ5†?FIrđNTWrđķųüķųürd5Cv†Ĩą´ŊÃÆŊÃÆĐÛŪáä'*-'*-9?B9?BKNQKNQ\gwĀČgjpsjpswĀČCFLOFLOvwČđw}ČÎ}Îđ‹¨°‡‹¨°.MPRy“:MPRy|‚…|‚…“MPR°ĀĐØ*Wy“ˇMPRUU°ĀĐØ*Wy“ˇZ_b‹Wygmp‹WZ`cZ`cy‹}“ˇžĘÍÖÜßÖÜßéô÷úũ(47@CF@CFRX[RX[dgjdgju€ĐØ€ƒ‰Œƒ‰ŒĐØ*šØ–ØŪ–šŪš¤ĀČ ¤ĀČ–™­5‘H‘n‘€‘ ’íķö‘‘‘‘!‘€‘‘‘‘‘‘‘‘‘!‘€‘‘!‘+‘‘¨‘'‘+‘‘¨‘+‘5‘T‘]‘`‘n‘+‘1‘T‘]‘`‘c‘1‘5‘c‘n‘Å‘Č‘Î‘Ņ‘Č‘Î‘Ņ‘ã‘$’'’*’Ĩ“¸“?”$’'’*’:’¸“Đ“$’'’*’-’F’R’X’a’a’ƒ’‰’Œ’Đ“đ“i’v’y’z’}’ƒ’‰’Œ’Đ“đ“ƒ’‰’Œ’ž’Ą’¤’ƒ’‰’Œ’’’˜’ž’Ą’¤’ž’Ą’¤’Ę’Í’Đ’đ“”Ŧ’ģ’ž’Á’Ä’Ę’Í’Đ’đ“”Õ’á’į’í’í’ “““í’ü’˙’““ “““ “““$“ “““““$“$“<“?“B“$“0“6“<“?“B“<“?“B“k“”-”J“Y“\“_“b“h“h“k“”-”w“z“}“Ĩ“w“z“}“Ĩ“w“z“}“Ĩ“W”Z”`”c”Z”`”c”~”€••~””„”‘”§”Ē”­”Ŋ”ÔƔ§”Ē”­”ą”ˇ”Ŋ”ÔƔŊ”ÔƔՔŊ”Ã”Æ”É”Ī”Õ”Õ”î”ņ”ô”Õ”á”ä”å”č”î”ņ”ô”î”ņ”ô”#••°•ü”•••• •ü”••• •#••°• •#••œ•ĸ•°•/•2•5•]•/•2•5•]•/•2•5•]•]•k•°•ˇ•c•k•°•ˇ•>–G–J–T–x–€–>–A–J–M–A–G–M–T–x–€–T–_–€–¤–T–Z–€–†–Z–_–†–¤––Ŗ˖ΖŖ˖Ζߖ—G—P—{——:—P—{—)—,—/—:—P—\—)—,—/—2—2—:—P—\— ÉÕį.@CFdy|†—‰—š—L™`™š —Ŧ—˛—ģ—ģ—Ũ—ã—æ—`™€™Ã—Đ—Ķ—Ô—×—Ũ—ã—æ—`™€™Ũ—ã—æ—ø—ū—˜Ũ—ã—æ—ė—ō—ø—ū—˜ø—ū—˜˜˜˜ø—ū—˜˜ ˜˜˜˜˜˜˜+˜˜˜˜˜"˜+˜+˜M˜S˜V˜€™ ™3˜@˜C˜D˜G˜M˜S˜V˜€™ ™M˜S˜V˜h˜n˜q˜M˜S˜V˜\˜b˜h˜n˜q˜h˜n˜q˜€˜†˜‰˜h˜n˜q˜t˜z˜€˜†˜‰˜€˜†˜‰˜˜˜ž˜Ą˜€˜†˜‰˜Œ˜’˜˜˜ž˜Ą˜˜˜ž˜Ą˜°˜ļ˜š˜˜˜ž˜Ą˜¤˜Ē˜°˜ļ˜š˜°˜ļ˜š˜Č˜Î˜Ņ˜°˜ļ˜š˜ŧ˜Â˜Č˜Î˜Ņ˜Č˜Î˜Ņ˜â˜Č˜Î˜Ņ˜Ô˜Ú˜â˜đ˜ķ˜û˜ū˜ ™)™,™6™°™ŋ™ ™#™,™/™#™)™/™6™°™ŋ™6™A™ ™°™<™A™ ™°™ŋ™Â™Č™Ë™Â™Č™Ë™Ú™ +19@CFn@CFn@CFn<^gjt’•˜_|€†‰’•˜_bhkbhk|ĸÁÄÅŽ´ˇÁÄÅÁÄÅÎ×ÚÎ×Úá (ÎŅÚŨŅ×Ũá (áë(?áį(.įë.?ëõ?Wëņ?EņõEWõ˙WoõûW]û˙]o˙ o‡˙ou u‡ ‡Ÿ ‡ŸģžÄĮžÄĮĶ9[dgq’•_|}ƒ†’•_bhkbhk|ŸžÁÂĢą´žÁžÁÂËÔ×ËÔ×Ū (ËÎ×ÚÎÔÚŪ (Ūč(?Ūä(.äč.?čō?Wčî?EîōEWōüWoōøW]øü]oüo‡üouu‡‡Ÿ ‡ ŸģžÄĮžÄĮĶ­š°šŗšžš(›4›­š°šŗšļšļšžš(›4›w›‚››“œœœœœPœ\œœœœœœœœœPœ\œ(œ+œ.œPœ(œ+œ.œ1œyœ|œ‚œ…œ|œ‚œ…œ“œˇœīžŸŌŸøœūœ˙œ"%/8;F@ŸHŸ/2;>28>F@ŸHŸFTHŸuŸFLHŸNŸLTNŸuŸ‹Ž‘œŸ Ÿ‹Ž‘””œŸ Ÿáäįō0Ÿ@Ÿáäįęęō0Ÿ@Ÿž“žŸŸŠŸ ŸSžVžYždžŸŸSžVžYž\ž\ždžŸŸ¸ŸģŸÁŸÄŸģŸÁŸÄŸŌŸ;]fis‘”—_|…ˆ‘”—_bhkbhk|ĄĀÃÄ­ŗļĀÃÄĀÃÄÍÖŲÍÖŲā (ÍĐŲÜĐÖÜā (āę(?āæ(.æę.?ęô?Węđ?EđôEWôūWoôúW]úū]oūo‡ūouu‡‡Ÿ‡ŸģžÄĮžÄĮĶūŸ‰ Œ    Dĸ  m   +ĸ  e   +ĸS b æ ĄS T Z b æ Ąb e 'ĄPĄb e .Ą7Ą:ĄPĄSĄ`ĄcĄpĄsĄ€ĄƒĄĄ¨ĄŽĄ¯ĄžĄÁĄÄĄ¨ĄŽĄ¯Ą˛Ą¸ĄžĄÁĄÄĄžĄÁĄÄĄÔĄÚĄŨĄžĄÁĄÄĄČĄÎĄÔĄÚĄŨĄÔĄÚĄŨĄėĄīĄōĄÔĄÚĄŨĄāĄæĄėĄīĄōĄėĄīĄōĄĸėĄīĄōĄõĄVĸ[ĸiĸėŖīŖōŖūŖK¤€ĸĐŖ¤K¤€ĸŖ5ŖĐŖ¤K¤€ĸšĸ ĸŖĸ‰Ŗ°Ŗ€ĸĸĸ‘ĸ”ĸšĸ ĸŖĸ‘Ŗ°Ŗšĸ ĸŖĸĩĸžĸÁĸšĸ ĸŖĸŠĸ¯ĸĩĸžĸÁĸĩĸžĸÁĸÍĸĐĸĶĸ¸ĸžĸÁĸÄĸĮĸÍĸĐĸĶĸÍĸĐĸĶĸãĸæĸéĸÍĸĐĸĶĸ×ĸŨĸãĸæĸéĸãĸæĸéĸõĸøĸûĸéĸėĸīĸõĸøĸûĸõĸøĸûĸ ŖĀŖĐŖõĸøĸûĸūĸūĸ ŖĀŖĐŖ ŖŖ°ŖĀŖŖŖ°ŖĀŖYŖ\Ŗ_ŖnŖvŖwŖnŖtŖwŖ‰ŖnŖtŖwŖzŖ€Ŗ‰Ŗ¤¤¤!¤¤¤!¤-¤ `ceÎķ-Q ci€ci€ĐÖÜÎÜci€°ĐÖâū #SĐÖâū #4:@MS`cegsvx|‡““ž°¸“––ž°¸g¤j¤m¤u¤€¤ ĻĻ+̰¤š¤ŋ¤Č¤Č¤đ¤ķ¤ö¤Š(ŠĐ¤ã¤æ¤į¤ę¤đ¤ķ¤ö¤Š(Šđ¤ķ¤ö¤ĨĨĨö¤Ĩ ĨĨĨĨLĨbĨhĨjĨbĨhĨjĨwĨzĨ}ĨwĨzĨ}ĨĨ–Ĩ™ĨwĨzĨ}ĨĨ‡ĨĨ–Ĩ™ĨĨ–Ĩ™Ĩ¤ĨĨĨ™ĨœĨĨ–ĨœĨ¤Ĩ?ĻÖĻÜĻŨĻ8Š`ŠnĒ…ĒƒĻ…Ļ:Š@ŠFŠ`ŠČĻÖĻÜĻŨĻČĻÖĻÜĻŨĻÖĻÜĻŨĻėĻėĻ˙ϧ§˙ϧ§§§§˙ϧ§ §§§§§§§§&§&§9§<§?§9§<§?§O§X§[§9§<§?§C§I§O§X§[§O§X§[§f§ĒĒO§R§[§^§R§X§^§f§ĒĒņ§¨Đ¨Š`ŠĒĢ+Ģņ§¨ëŠôŠ÷ŠĒņ§¨îŠôŠúŠĒëŠîŠ÷ŠúБФЧŠĒŠąŠ´ŠļŠÃŠÉŠĘŠÃŠÉŠĘŠÖŠŲŠÜŠÖŠŲŠÜŠëŠôŠ÷ŠÖŠŲŠÜŠāŠåŠëŠôŠ÷ŠĢĢĢĢĢĢĢ+ĢķĒöĒüĒ˙ĒöĒüĒ˙ĒĢą§Ä§Į§Ę§Ä§Į§Ę§Ú§ã§æ§Ä§Į§Ę§Î§Ô§Ú§ã§æ§Ú§ã§æ§ņ§Ú§Ũ§æ§é§Ũ§ã§é§ņ§a¨x¨~¨¨x¨~¨¨Œ¨¨’¨Œ¨¨’¨ĸ¨Ģ¨Ž¨Œ¨¨’¨–¨œ¨ĸ¨Ģ¨Ž¨ĸ¨Ģ¨Ž¨Ā¨ĸ¨Ĩ¨Ž¨ą¨Ĩ¨Ģ¨ą¨Ā¨ĒĒĒ"ĒĒĒ"Ē&Ē›ĒžĒ¤Ē§ĒžĒ¤Ē§ĒąĒÎĒŅĒ×ĒÚĒŅĒ×ĒÚĒķĒĀĨÃĨÆĨŅĨ(Š8ŠĀĨÃĨÆĨÉĨÉĨŅĨ(Š8ŠüĨ ĻȍĻ Ļȍ6Ģ9ĢGĢxĢ{Ģ€ĢˆĢ—ŦšŦœŦ¨Ŧmވ̊ŦĀ­ô­ŽUŽ”ĢŦĢ¯ĢąĢ”Ģ ĢĻĢŦĢ¯ĢąĢŦĢ¯ĢąĢéĢĐ­ß­Ž8Ž´ĢéĢĐ­ß­Ž8ŽÄĢĮĢČĢŌĢÛĢŪĢŌĢÛĢŪĢéĢĐ­ß­ŌĢÕĢŪĢáĢÕĢÛĢáĢéĢĐ­ß­éĢŦŦ ŦéĢõĢûĢŦŦ ŦŦŦ ŦŦŦŦ Ŧ ŦŦŦŦ5Ŧ;Ŧ>ŦŦ&Ŧ)Ŧ,Ŧ/Ŧ5Ŧ;Ŧ>Ŧ5Ŧ;Ŧ>ŦNŦQŦRŦ5Ŧ;Ŧ>ŦAŦGŦNŦQŦRŦiŦlŦoŦzŦĀ­Đ­iŦlŦoŦrŦrŦzŦĀ­Đ­ŠŦ—ŦšŦœŦ¨ŦĀ­ô­ŽUŽmŽ´ŦĖŦĪŦŅŦ´ŦĀŦÆŦĖŦĪŦŅŦĖŦĪŦŅŦ ­°­Ā­UŽmŽÔŦ ­°­Ā­UŽmŽäŦįŦčŦōŦûŦūŦōŦûŦūŦ ­°­Ā­ōŦõŦūŦ­õŦûŦ­ ­°­Ā­ ­!­'­*­ ­­­!­'­*­!­'­*­;­!­'­*­-­3­;­;­J­P­S­J­P­S­c­f­g­J­P­S­V­\­c­f­g­~­­„­‹­ ­°­~­­„­‡­‡­‹­ ­°­‡Ž¯ ¯;¯C¯c¯‡ŽŽ’Ž”ŽŦޏŽģŽÁŽÁŽÚŽŨŽāŽÁŽÉŽĖŽŅŽÔŽÚŽŨŽāŽÁŽÉŽĖŽĪŽęŽíŽōޝ ¯8¯ęŽíŽōޝ ¯8¯ęŽíŽōޝ ¯8¯„¯Š¯¯¯˜¯û¯°´˙°g˛bŗoŗĶŗ+´%ą;ą>ą@ą;ą>ą@ąQąTąUąQąTąUąjąją}ą€ą‚ą}ą€ą‚ąąą§ąĒąĢą§ąĒąĢąĩąģąŊąĩąģąŊąĖąĖąÜąßąāąÜąßąāąėąīąņąėąīąņąûąūą˛ûąūą˛˛=˛@˛C˛R˛bŗoŗ=˛@˛C˛F˛F˛R˛bŗoŗg˛UŗoŗĶŗx˛Ž˛”˛•˛Ž˛”˛•˛¤˛¤˛¸˛ģ˛ŧ˛¸˛ģ˛ŧ˛Æ˛Ė˛Î˛Æ˛Ė˛Î˛Ü˛â˛ã˛Ü˛â˛ã˛đ˛ö˛ø˛đ˛ö˛ø˛ŗ ŗ ŗ/ŗ2ŗ5ŗ@ŗoŗ{ŗ/ŗ2ŗ5ŗ8ŗ8ŗ@ŗoŗ{ŗ°˙°Uŗbŗ+´´°*°0°1°*°0°1°@°@°T°W°X°T°W°X°b°h°j°b°h°j°x°~°°x°~°°Œ°’°”°Œ°’°”°ĸ°¤°Ĩ°Í°Đ°Ķ°â°UŗbŗÍ°Đ°Ķ°Ö°Ö°â°Uŗbŗ§´ÅĩĐĩ´ļË´Ņ´Ô´Ö´%ļ(ļ+ļ0ļ<ĩDĩFĩVĩbĩkĩlĩ}ĩƒĩ†ĩĩ™ĩœĩ§ĩhļ}ļĩ“ĩœĩŸĩ“ĩ™ĩŸĩ§ĩhļ}ļ§ĩĩĩXļhļ­ĩĩĩXļhļšļļŖļĻļļŖļĻļ´ļ×ļyˇ‹ˇˇ˜ˇÆˇūļ ˇˇˇˇ:ˇ˜ˇ˛ˇˇ*ˇ-ˇ.ˇ1ˇ7ˇ7ˇ:ˇ˜ˇ˛ˇIˇLˇQˇyˇIˇLˇQˇyˇIˇLˇQˇyˇéˇÅ¸Đ¸ķ¸šLšõˇ¸¸¸¸(¸+¸.¸Đ¸ë¸+¸.¸Đ¸ë¸Q¸T¸W¸˜¸Q¸T¸Š¸¸Q¸T¸Š¸¸Q¸T¸Š¸¸h¸u¸x¸~¸u¸x¸~¸Š¸¸¸~¸¸„¸Š¸¸¸§¸´¸ˇ¸ē¸§¸´¸ˇ¸ē¸´¸ˇ¸ē¸Å¸ë¸ķ¸´¸ˇ¸ē¸Ŋ¸Ŋ¸Å¸ë¸ķ¸ašišmš¨š¸šŲš™š¨š¸šŧšžšŲš™š š¸šŧšžšÁš š¨šÁšŲšē4ē@ēIē ēēēē ē$ē)ē4ē@ēIē ē$ē)ē,ē,ē4ē@ēIēfēiēwēIģXģßģŧ~ŧēŠēē‘ē˛ēģēžēĘēĐēĶēĩēģēžēÁēÄēĘēĐēĶēĘēĐēĶēāēãēæēĘēÍēĶē×ēÚēāēãēæēōēõēøē,ģōēõēøē,ģōēõēøē,ģ2ģ;ģ>ģIģÆģÉģĖģßģ2ģ;ģ>ģAģÆģÉģĖģĪģAģIģĪģßģjģmģoģ|ģģ€ģ—ģ ģŖģĒģŧŧ—ģšģŖģĻģšģ ģĻģĒģŧŧĒģĩģģģŧģĒģĩģģģŧģAŧDŧJŧMŧDŧJŧMŧeŧļŧšŧŧŧäŧļŧšŧŧŧäŧļŧšŧŧŧäŧŊŊ3ŊķŊPž¨žļžßžõžŋ9Ŋ<Ŋ>ŊzŊ`žpžļžŌžAŊzŊ`žpžļžŌžWŊZŊ[ŊeŊhŊkŊeŊhŊkŊzŊ`žpžeŊhŊkŊnŊnŊzŊ`žpžzŊČŊPž`žpž¨žõžŋ›ŊŗŊļŊšŊŗŊļŊšŊČŊPž`žŗŊļŊšŊŧŊŧŊČŊPž`žžžž<ž¨žļžžžž<ž¨žļžžžž<ž¨žļž#ž0ž¨žļž(ž0ž¨žļž@ŋoÁ€ÁSÂLŋXŋ^ŋgŋgŋŒŋĀÁāÁoŋ|ŋŋ€ŋƒŋ‰ŋ‰ŋŒŋĀÁāÁŸŋˇŋēŋŊŋŸŋĢŋąŋˇŋēŋŊŋˇŋēŋŊŋŌŋˇŋēŋŊŋÃŋÉŋŌŋˇŋēŋŊŋŋŋˇŋēŋŊŋŋŋˇŋēŋŊŋŋŋŌŋŪŋäŋíŋíŋĀ ÁĀÁõŋĀĀĀ ĀĀĀĀ ÁĀÁĀ$Ā*Ā3ĀFĀ^ĀaĀdĀFĀRĀXĀ^ĀaĀdĀ^ĀaĀdĀyĀ^ĀaĀdĀjĀpĀyĀ^ĀaĀdĀfĀ^ĀaĀdĀfĀ^ĀaĀdĀfĀ…ĀųĀ€Á ÁāÁđÁ(ÂSÂ’Ā•Ā–ĀÎĀāÁđÁ(Â>Â–ĀœĀŸĀ ĀŖĀÎĀāÁđÁ(Â>ŠĀŦĀ­ĀšĀŧĀŋĀšĀŧĀŋĀÎĀāÁđÁšĀŧĀŋĀÂĀÂĀÎĀāÁđÁÚĀŨĀāĀųĀ€Á ÁÚĀŨĀāĀųĀ€Á ÁÚĀŨĀāĀųĀ€Á ÁÁÁ ÁDÁđÁūÁÁÁ ÁDÁđÁūÁÁÁ ÁDÁđÁūÁ'Á8ÁđÁūÁ,Á8ÁđÁūÁÄÂÍÂĐÂÚ Ã5ÃÄÂĮÂĐÂĶÂĮÂÍÂĶÂÚ Ã5ÃÚÂåÂà ÃāÂåÂà ÃSÃVÃ\Ã_ÃVÃ\Ã_ÃpÃÔÃŨÃāÃęÃ0ÄEÄÔÃ×ÃāÃãÃ×ÃŨÃãÃęÃ0ÄEÄęÃõà Ä0ÄđÃõà Ä0ÄcÄfÄlÄoÄfÄlÄoĀÄäÄíÄđÄúÄ@ÅUÅäÄįÄđÄķÄįÄíÄķÄúÄ@ÅUÅúÄÅ0Å@ÅÅÅ0Å@ÅsÅvÅ|ÅÅvÅ|ÅŐÅĒÅiÆxÆĮ­Å´ÅˇÅšÅĮÅiÆxÆņÆĶÅÖÅŲÅņÅôÅ÷ÅĶÅÖÅŲÅßÅåÅņÅôÅ÷ÅĶÅÖÅŲÅÛÅĶÅÖÅŲÅÛÅĶÅÖÅŲÅÛÅņÅôÅ÷Å>ÆxÆÜÆÆ-Æ0Æ3Æ-Æ0Æ3Æ>ÆxƈÆ-Æ0Æ3Æ6Æ6Æ>ÆxƈƙƟƠÆĨÆHĮåĘčĘëĘøĘËË ËË>ĖaĮdĮjĮœĮŸĮ Į#Ė>ĖpĮvĮyĮŠĮpĮvĮyĮ|Į‚ĮŠĮ“ĮœĮŸĮ Į“ĮœĮŸĮ ĮŠĮįĮęĮëĮĖ#ˎĮŊĮĀĮŅĮˇĮŊĮĀĮÃĮÉĮŅĮÜĮįĮęĮëĮÜĮįĮęĮëĮ÷Į4ČųËĖČ ČČČČ ČČČČČ4ČnČáËųËBČEČHČYČHČNČQČYČnČŦȝȰČËËáË|ȂȅȖČ|ȂȅȈȎȖȡČŦČ¯Č°ČĄČŦȝȰČēČŊČĀČ÷ȡËËËČČÎČŅČâČČČÎČŅČÔČÚČâČÉÉÉ;ÉŖËˇË ÉÉÉ*É ÉÉÉÉ"É*É;ÉnÉËŖËFÉIÉLÉ]ÉLÉRÉUÉ]ÉnÉĻɁːËyÉɂɓÉyÉɂɅɋɓɝɞɴÉãÉpˁËŧÉŋÉÂÉŌÉÂÉĮÉĘÉŌÉãÉĘ]ËpËîÉņÉôÉĘôÉúÉũÉĘĘNĘNË]Ë!Ę'Ę*Ę;Ę!Ę'Ę*Ę-Ę3Ę;ĘWĘZĘ\ʋĘ;ËNËdĘgĘjĘzĘjĘoĘrĘzʋĘĀĘË$˖ʙʜʭʜĘĸĘĨĘ­ĘŲĘÜĘŨĘåĘŲĘÜĘŨĘåĘ)   +.1@í 3ß@Đ3UX€X^djU…€Ž…ß@X¨Đ…§ĀЧɨĀđ°ļšĄ ÷ > m đHNhHNháįôĄ ŋ HNhŖŦŽŖŦŽŌôū)2<EKQ‡ˆ‘—ôū)2<EKQntzŽ‘—°ļšŧÉÔšŧÉÔšŧÉÔŧÉÔŲŲkqtm í Ų &A &Aĸ¨¯m ‰  &Ajprjpr“˛ĖÕķü Q˛ĖÕķü )/5HQkqtw„tw„tw„w„•›œŲ÷ åëîåëîņú%'^ab  /58L/58;DLU^abU^abioqŠ > y‚–y‚…Ž–ÄĘĖ / ÔÚŨņÔÚŨāéņ"#+14"#+14+14Cāđ+1477CāđCXđ LXđ X/58 …Æ ”Š Š ÆØŲŌØ˙ØŲ/58/58  Đā_ ĐānƒĐāwƒĐā ˛ŗčîõŦ˛ŊÃÉŲÃÉŲčîõ˛ŗčîõ ÜĖÍFĪWĪåĖëĖîĖ˙ĖåĖëĖîĖņĖ÷Ė˙ĖÍÍ"ÍXÍ[Í\Í7ĪFĪ*Í0Í3ÍDÍ*Í0Í3Í6Í<ÍDÍOÍXÍ[Í\ÍOÍXÍ[Í\ÍeÍhÍkÍĸÍųÎĪsÍyÍ|͍ÍsÍyÍ|ÍÍ…ÍÍ­Í°ÍŗÍęÍWĪpĪģÍÁÍÄÍÕÍģÍÁÍÄÍĮÍÍÍÕÍÎÎÎHÎĀÎŨÎÎÎÎHÎĀÎŨÎÎÎÎHÎĀÎŨÎ&Î<ÎĀÎŨÎ&Î(Î.Î1Î(Î.Î1Î<ÎĀÎŨÎHÎSΰÎĀÎNÎSΰÎĀÎSÎ^ΠΰÎYÎ^ΠΰÎĪĪ!Ī$ĪĪ!Ī$Ī7ĪŖĪĻΝĪãĪæĪįĪæŅõŅĩĪžĪÁĪĪĪ¸ĪžĪÁĪÄĪĮĪĪĪÚĪãĪæĪįĪÚĪãĪæĪįĪđĪķĪöĪ-ĐĶŅæŅūĪĐĐĐūĪĐĐ ĐĐĐ9Đ<Đ?ĐuĐxĐyĐ¯ŅžŅGĐMĐPĐaĐGĐMĐPĐSĐYĐaĐlĐuĐxĐyĐlĐuĐxĐyЂЅЈĐŋĐ‰Ņ˜ŅĐ–Đ™ĐĒАЖЙМĐĸĐĒĐËĐÎĐŅĐŅžŅĶŅŲĐßĐâĐķĐŲĐßĐâĐåĐëĐķĐŅŅŅTҀ҉ŅŅŅŅTҀ҉ŅŅŅŅTҀ҉Ņ6ŅFҀ҉Ņ>ŅFҀ҉Ņ3Ō6Ō?ŌsŌvŌwŌvԅÔEŌNŌQŌ_ŌHŌNŌQŌTŌWŌ_ŌjŌsŌvŌwŌjŌsŌvŌwŌ€ŌƒŌ†ŌŊŌcÔvÔŽŌ”Ō—Ō¨ŌŽŌ”Ō—ŌšŌ Ō¨ŌÉŌĖŌĪŌĶĶ Ķ?ÔNÔ×ŌŨŌāŌņŌ×ŌŨŌāŌãŌéŌņŌüŌĶĶ ĶüŌĶĶ ĶĶĶĶOĶÔ(Ô Ķ&Ķ)Ķ:Ķ Ķ&Ķ)Ķ,Ķ2Ķ:Ķ[Ķ^Ķa͘ĶNÔcÔiĶoĶr̓ĶiĶoĶrĶuĶ{ĶƒĶĄĶ¤Ķ§ĶäĶÔÔĄĶ¤Ķ§ĶäĶÔÔĄĶ¤Ķ§ĶäĶÔÔÆĶÖĶÔÔÎĶÖĶÔÔ§Ô××¯×ąÔŲÔ× ×ÁÔÎÔŅÔÔÔ(Õ+Õ-ÕeÕ;×J×5Õ;Õ>ÕRÕ5Õ;Õ>ÕDÕJÕRՉՌՏÕÅÕËÕĖÕœ×¯×—Õ ÕŖÕąÕšÕ ÕŖÕĻÕŠÕąÕŧÕÅÕËÕĖÕŧÕÅÕËÕĖÕáÕäÕįÕÖ Ö!֋ל×īÕøÕûÕ ÖōÕøÕûÕūÕÖ ÖÖÖ Ö!ÖÖÖ Ö!Ö*Ö-Ö0ÖcÖx׋×8Ö;Ö>ÖNÖ>ÖCÖFÖNֆ։֋ÖŧÖc×xד֖֙֩֙֞֡֩ÖÅÖČÖËÖ×0×;×ÅÖČÖËÖ×0×;×ÅÖČÖËÖ×0×;×įÖôÖ0×;×ėÖôÖ0×;×)ØnڀÚÛ)ØBØDØGؙؖ؛ØĶØūÚÛŖØŠØŦØĀØŖØŠØŦØ˛Ø¸ØĀØ÷ØúØũØ3Ų9Ų:ŲéÚūÚŲŲŲŲŲŲŲŲŲŲ*Ų3Ų9Ų:Ų*Ų3Ų9Ų:ŲOŲRŲUŲ‹ŲŽŲŲÁÚŌÚ]ŲfŲiŲwŲ`ŲfŲiŲlŲoŲwŲ‚Ų‹ŲŽŲŲ‚Ų‹ŲŽŲŲ˜Ų›ŲžŲŅŲ›ÚĒÚĻŲŠŲŦŲŧŲŦŲąŲ´ŲŧŲôŲ÷ŲųŲ*ÚŌÚéÚÚÚÚÚÚ ÚÚÚ3Ú6Ú9ÚnڐڛÚ3Ú6Ú9ÚnڐڛÚ3Ú6Ú9ÚnڐڛÚUÚbڐڛÚZÚbڐڛÚĨ¨Ģ¸ÃÆÉØ- ,‡Ø,CØđTá7 ~ ­ čîčî…‹˜á˙čîEHJEHJv˜ĸĨÍÖāéīõ+1:@F˜ĸĨÍÖāéīõ7:@FTZ]`gr]`gr]`grZ]`grww ­ - wŖŠžÄßŖŠžÄßBHO­ É ŖŠžÄß3Rlu“œŦ˛ëņ÷Rlu“œŦ˛ÉĪÕčëņ÷ ))))/56uą7 K ‡Šž‡Š–žģÁÃúũūK _ ËŅÔčËŅÔ×āčņúũūņúũū  E_ ~ 2!*2`fh `opvypvy|…¸žŋĮÍиžŋĮÍĐĮÍĐß 0ĮÍĐĶĶß 0ßô0@čô0@ôËŅÔ@`!b@`0E@`9E@`bnoǰˇ•ǰˇnoǰˇËŅÔËŅÔĨ¨Ģ û<    <NO„Š‘HNu„Š‘NO„Š‘ĨÉÛAŪPŪßÉÛâÛäÛįÛ3Ü6Ü8ÜpÜ¨ŪšŪ@ÜFÜIÜ]Ü@ÜFÜIÜOÜUÜ]ÜŒÜÜ‘ÜˇÜ“Ū¨ŪˇÜîÜôÜõÜōŪßÂÜČÜËÜÜÜÂÜČÜËÜÎÜÔÜÜÜåÜîÜôÜõÜåÜîÜôÜõÜŨ Ũ ŨAŨDŨEŨáŪōŪŨŨŨ/ŨŨŨŨ!Ũ'Ũ/Ũ8ŨAŨDŨEŨ8ŨAŨDŨEŨLŨOŨQŨ‚ŨÎŪáŪYŨ\Ũ_ŨoŨ_ŨdŨgŨoŨšŨŨŸŨÅŨšŪÎŪÅŨũŨiŪzŪĐŨÖŨŲŨęŨĐŨÖŨŲŨÜŨâŨęŨŪ Ū ŪAŪ`ŪiŪŪ Ū ŪAŪ`ŪiŪŪ Ū ŪAŪ`ŪiŪ(Ū5Ū`ŪiŪ-Ū5Ū`ŪiŪ‡ßŠßß%â0âöâ‘ßšß0â@âāā āEā”âŠâāāā0āāāā%ā(ā0āgā“āāâöâ“āĘāĐāŅāÍâāâžā¤ā§ā¸āžā¤ā§āĒā°ā¸āÁāĘāĐāŅāÁāĘāĐāŅāäāįāéāá á!áŧâÍâņā÷āúā áņā÷āúāũāá ááá á!ááá á!á(á+á-á^áŠâŧâ5á8á;áKá;á@áCáKá{áŠáâ”âŠáááYâjâ´áēáŊáÎá´áēáŊáĀáÆáÎáęáíáđá%âPâYâęáíáđá%âPâYâęáíáđá%âPâYâ ââPâYâââPâYâR R÷ cŨHVŽ”—ĨĢŽĨĢŽŊŨí0HŨāæéāæéí0Hí÷ 0ķ÷ 0VY_bY_bt& ēđ9&O9*O9UX[z}€ÍđÆåîņÆÕØŲŲÜßåîņåîņ åîņø åčņôčîôø øūēđ9—038MXđü038DXnüDSSwŒ¤[wŒ¤z}ŗĘ„‰ˆ¨ĘጨĘáöúũÄÆÉ9ŒJOĐđ9PÔđ9PeilqMnƒ(19Mnƒ9M?M(1nƒ-1nƒˇÅ/@lpsx5C`k;C`kģãžã#ä*äįãęã.ä9äIäKäNäYäYä\äbäeä\äbäeätä*å-å0å3å˜å¤åNå\åbåiåĘåĖåĪåÚåVæYæ\æwæØæį@įLįâæ÷æ@įLįâæåæëæķæåæëæķæ÷æ@įLįwæˇæ0į@ᙿп0į@įĄæŠæ0į@ᎿÁæ į0įŊæÁæ į0įÁæĘæį᯿ƿįįLįNįQįeį!č$č'č:čPččč“čËč×čuč„čËč×čučwč}č€čwč}č€č„čËč×ččč“čĨč°čÃččč“č™č°čŋč™čĨčŋčÃčéé é)é&JXp=HXppŒk}pwy{wy{Œĸ(}ƒĸģƒ’ÅŌPkÖäæé(P"GPj:EPjj‚Na‚’aemo’ąemozŊÆ0NÆÉÍØÚŨ0¤éÂéčéņéôéęĘéÍéŅéßéęęęę&JXp=HXppŒk}pwy{wy{Œĸ(}ƒĸģƒ’ÅŌPkÖäæé(P3ęNęXę[ę^ęoętëƒëëâėđė îëâėđė îĢë˛ëĩëžëžëŪë í&ížëÎë í&ížëĀëÃëÆëõëƒėđėíuí îėDėGėJė“íŅí˛íĩíģížíĩíģížíŅíDėGėMėƒėđėíŅíéí^ėaėcėlėuėxėlėuėxėƒėđėílėoėxė{ėoėuė{ėƒėđėíŅíÔíÚíŨíÔíÚíŨíéíėíđíķí îƒė†ėŒė‘ė—ėšėė¤ėí í—ėšėė ė ė¤ėí í&JXp=HXppŒk}pwy{wy{Œĸ(}ƒĸģƒ’ÅŌPkÖäæé(P.îIîPîSîVîiî°îĮîÎîčîīīī2ījīmīpī¤ī¤īĖīāđ0ņ§ņŅņņđņ§ņŅņņņ§ņˇņņņ ņņņ ņņņ§ņˇņˇņšņŋņÂņšņŋņÂņŅņíīđīķī3đčōķíīđīķī#đíīđīķīöīuđąđ0ņ—ņķ,ķ–đąđ0ņ—ņķ,ķJņPņSņaņgņjņaņgņjņzņĀđÃđÆđÔđ—ņŸņĀđÃđÆđĖđĖđÔđ—ņŸņ”ō›ō ōļōšōžōÃōčōĐķåķđķIôfô{ô ô"ô(ô+ô"ô(ô+ô6ô2õ5õ8õKõQõUõ÷`÷ ø0ø2õ5õ8õKõ÷`÷ ø0ø÷&÷)÷2÷8÷;÷2÷8÷;÷F÷KõQõUõrõ˜õžõēõŊõĀ÷ øų3ųKõQõUõrõĀ÷ øų3ųKõQõUõoõĀ÷ øų3ųÚ÷æ÷é÷ō÷ø÷û÷ō÷ø÷û÷øŠõ˜õžõĨõtözö|öö‡ö§öĒöČöĪöÕö`÷Ā÷øøų‡ö§ö`÷Ā÷øøų‡ö¤ö`÷Ā÷øøųv÷‚÷…÷Ž÷”÷—÷Ž÷”÷—÷ĸ÷døføløtø…ųˆų‹ų™ųœų ųČųDú…ųˆų‹ų™ųČųDúâųųų˙ųúųų˙ųúú„ú“ú úÅúđúû$ûũũfûzûƒû†ûŖžŖĻŦ¯ĻŦ¯žzûƒû†û”ûū ūzû}û†û‰û}ûƒû‰û”ûū ūēûŊûžûÕûõûü ü üü$ü'ü*üü$ü'ü*ü$ü'ü*ü6üū ū$ü'ü*ü6üū ū$ü'ü*ü-ü-ü6üū ū6üEü ū°ū6üEü ū°ū<üEü ū°ūEüTü°ūĀūKüTü°ūĀūTücüPū`ūTücüPū`ūZücüPū`ūcürü ū0ūiürü ū0ū”ü—ü˜ü›ü°üŗüļüÂü`ūpū°üŗüļüÂü`ūpū°üŗüļüšüšüÂü`ūpūÂüŅüpū€ūČüŅüpū€ūßüâüåüņü€ūūßüâüåüņü€ūūßüâüåüčüčüņü€ūūņüũūūņüũūū÷üũūū?ũVũY˙…˙Y˙\˙b˙e˙\˙b˙e˙…˙xũ{ũ|ũũũ“ũø˙ø˙û˙û˙ĒũŗũļũÄũĀūĐūĒũŗũļũÄũĀūĐūĒũ­ũļũšũ­ũŗũšũÄũĀūĐūÄũĶũāūđūÄũĶũāūđūĘũĶũāūđūĶũâũĐūāūŲũâũĐūāūâũņũđū˙âũņũđū˙čũņũđū˙…˙ˆ˙Ž˙‘˙ˆ˙Ž˙‘˙ ˙ž˙Í˙Sbž˙Í˙SbÄ˙Í˙Sb&)7ϰßđ|twy~…Ž‘œ 5…ˆ‘”ˆŽ”œ 5œĻÍßœĸÍĶĸĻĶß^agjagj|BTY[ØęøŊ  -ĪøhÜ  R /  IOR]Xh U]XhIORU]nHXfnHXn8Hw8H(8ˆ(8(™(ĒĻĒǎøŗˇøÆ Ė Ō Õ Ė Ō Õ ä  %ĪÔ°ļšÃËŅÔķËŅÔ×7´: Ü / G Z Ŋ ”.Ä Ü Z Š ÔÚŨčîī.Ä Ü "".Ä Ü p v y ˆ  – ™ Ä  – ™ œ X“™Ą¤´X“™œŸĄ    Á Æ Ü Ķņ   X x Ķņ  ę í đ û Ø í ņ  ķ û Ø í ę í đ ķ û  Č Ø   Č Ø   ¸ Č   ¸ Č  % ¨ ¸  % ¨ ¸ % / ˜ ¨ + / ˜ ¨ / 9 ˆ ˜ 5 9 ˆ ˜ 9 C x ˆ ? C x ˆ    "  X ] áãö˙Ą°0=ˆ°0 +%0#+% #+9199Gđ?GđGUāđMUāđU_Đā[_Đā_iĀĐeiĀĐis°Āos°Āęíķöíķö05ˆ#z}€“#ƒ“z}€ƒ0>“°06“™6>™°>L°Į>D°ļDLļĮLZĮāLRĮÍRZÍāZhāøZ`āæ`hæøhvøhnøūnvūv„8v||„8„‰8=ø!Xy !X[ad[ady0ORS X<BEORS XORSr]cfr\_eh_eht$%$%1CPĢoruŒoruxÄõü˙$'*0dŪáæëmpr€tmë7ƒ›Ą¤ƒ•›Ą¤›Ą¤ŗšŧ›Ą¤§­ŗšŧŗšŧËŅÔŗšŧŋÅËŅÔËŅÔæËŅÔ×Ũæî  îú       0ë !'0ë?BEm?BEm?BEmƒ†‰™ĄĒ­¸‹šĄ¤­°¤Ē°¸‹šČÖ (ČÎ ÎÖ(Öä(HÖÜ(.Üä.HäōHhäęHNęōNhōhˆōøhnønˆˆ¨ˆŽŽ¨¨Č¨ŽŽČ!ČÍōõø ōõøû˙~‹˙~‹HVoˆHNouNVuˆVdˆ¨V\ˆŽ\dލdr¨Čdj¨ŽjrŽČr€ČčrxČÎx€Î耎耆č(Ž””œ(œĄ(-VY\oVY\_8>@CCLe¨€Ā0~-03>`~-0366>`~>LP`DLP`LZ@PRZ@PZh0@`h0@hv°Ānv°Āv„€ˆ|„€ˆ„’ˆ°„ŠˆŽŠ’ްX]¨­ÃÆÉÎ0@WĀ00šŧŋĘ 0šŧŋÂÂĘ 0ĘØ ĐØ ØæŪææôđėôđôāđúāđĐāĐāĀĐĀĐ05W\IVlIVr¤Ä Đ ô ÷ ü !*"-"2"@"Ã#¸žĀà / 2 5 ĸ#Ã# # & / 2 5 ĸ#Ĩ#Ģ#Ž#Ĩ#Ģ#Ž#Ã#K Q T ] e n q | P"`"e h q t h n t | P"`"| Š `"p"‚ Š `"p"Š ˜ p"€" ˜ p"€"˜ Ļ €"Œ"ž Ļ €"Œ"Ļ ´ @"P"Ŧ ´ @"P"R!\!^!q!ą!ē!Ŋ!Č!Œ"Ą"ą!´!Ŋ!Ā!´!ē!Ā!Č!Œ"Ą"ú!""%"#######.#.#1#7#:#1#7#:#F#ä#N&`&č'õ'„*ä#đ#ũ#b%`&Í&M(Æ(1*„*Č$Ë$Î$Ũ$Ā&Í&Č$Ë$Î$Ņ$Ņ$Ũ$Ā&Í&Ũ$ī$°&Ā&ã$ī$°&Ā&ī$% &°&õ$% &°&%%& &%%& &%%%€&&%%%€&&%%7%p&€&+%7%p&€&7%I%`&p&=%I%`&p&đ#õ#b%g%ņ%ô%÷%&&(3(ņ%ô%÷%ú%ú%&&(3(&&3(?( &&3(?(&*&?(M(&*&?(M(<&N&Ī'č'<&B&Ī'Õ'B&N&Õ'č'm'p's'~'õ'(m'p's'v'v'~'õ'(~'Œ'( („'Œ'( (Œ'š' ((’'š' ((š'¨'(( '¨'((¨'ļ'(&(Ž'ļ'(&(&JXp=HXppŒk}pwy{wy{Œĸ(}ƒĸģƒ’ÅŌPkÖäæé(PFŦ)69:=CCFŦCFœĸŦRUX€RUX€RUX€&JXp=HXppŒk}pwy{wy{Œĸ(}ƒĸģƒ’ÅŌPkÖäæé(PHXn "%'"0;Bp"0;Np"Np"QWZpNQWZēĐÚ ,@ ,@{KNS[NS]k[]kp…ˆ•ˆ• ĸĨ ĸĨŦŌßĨ¸Éß# ßčNwzaqtwqtzĸ´ˇē´ˇēÁ#•˜œĐ/28:=G/28:25:=58ITGITY_}‚ŲÜá_kŲÜáčëíkqčëíõq}‚•˜œĨ"(0LĀĮ ˇēŊĐm ÉĖĪč+Gm ]cw]cw č]cw¸;>Rj—˜Ē°ļ;>Rj‡›Ą§Ē°ļÉĖĪááīōõīōõˇĐč NĐč1Đč%1ĐčZ`jpv†pv†œĮ*Í*Đ*ß*Í*Đ*ß*ë*+ +++P+`++++++ +++P+`++#+`+t++#+`+t+’+•+›+ž+•+›+ž+¯+2,h,Z.m.;,A,D,U,;,A,D,G,M,U,r,u,x,Ž,ą,˛,m.|.€,†,‰,š,€,†,‰,Œ,’,š,Ĩ,Ž,ą,˛,Ĩ,Ž,ą,˛,ģ,ž,Á,ø,|..É,Ī,Ō,ã,É,Ī,Ō,Õ,Û,ã,-- -@-ī-ū----+-----#-+-V-Y-\-Š-ā-ī-V-Y-\-Š-ā-ī-V-Y-\-Š-ā-ī-|-Ž-ā-ī-|-~-„-‡-~-„-‡-Ž-ā-ī-Š-´-Đ-ā-¯-´-Đ-ā-.......)./M/\1u1 /&/)/:/ /&/)/,/2/:/W/Z/]/“/–/—/M1\1e/k/n//e/k/n/q/w//Š/“/–/—/Š/“/–/—/ /Ŗ/Ļ/Ũ/:1M1Ž/´/ˇ/Č/Ž/´/ˇ/ē/Ā/Č/č/ë/î/%0ū0 1ö/ü/˙/0ö/ü/˙/000;0>0A00Č0â0;0>0A00Č0â0;0>0A00Č0â0a0s0Č0â0a0c0i0l0c0i0l0s0Č0â00Š0¸0Č0…0Š0¸0Č01 1&1)1 1&1)1:12=2L4e4222*22222"2*2G2J2M2ƒ2†2‡2=4L4U2[2^2o2U2[2^2a2g2o2z2ƒ2†2‡2z2ƒ2†2‡22“2–2Í2*4=4ž2¤2§2¸2ž2¤2§2Ē2°2¸2Ø2Û2Ū23î3ũ3æ2ė2ī23æ2ė2ī2ō2ø23+3.313o3¸3Ō3+3.313o3¸3Ō3+3.313o3¸3Ō3Q3c3¸3Ō3Q3S3Y3\3S3Y3\3c3¸3Ō3o3z3¨3¸3u3z3¨3¸3 4444444*4÷4-5<7U755 5555 5 55575:5=5s5v5w5-7<7E5K5N5_5E5K5N5Q5W5_5j5s5v5w5j5s5v5w5€5ƒ5†5Ŋ57-7Ž5”5—5¨5Ž5”5—5š5 5¨5Č5Ë5Î56Ū6í6Ö5Ü5ß5đ5Ö5Ü5ß5â5č5đ566!6_6¨6Â666!6_6¨6Â666!6_6¨6Â6A6S6¨6Â6A6C6I6L6C6I6L6S6¨6Â6_6j6˜6¨6e6j6˜6¨6ũ677 777 77į78,:E:đ7ö7ų7 8đ7ö7ų7ü78 8'8*8-8c8f8g8:,:58;8>8O858;8>8A8G8O8Z8c8f8g8Z8c8f8g8p8s8v8­8 ::~8„8‡8˜8~8„8‡8Š88˜8¸8ģ8ž8õ8Î9Ũ9Æ8Ė8Ī8ā8Æ8Ė8Ī8Ō8Ø8ā8 999O9˜9˛9 999O9˜9˛9 999O9˜9˛919C9˜9˛9193999<93999<9C9˜9˛9O9Z9ˆ9˜9U9Z9ˆ9˜9í9đ9ö9ų9đ9ö9ų9 :˜°ÁĐŲų p"%(’˜°¸ ģĐå #&HP ˛PXĐæXgøT[Ā܍Ÿ¤Ā‘“•˜›‘“•‘“•˜"įķS`cehxˆ"&),`cehV:\:j:U;`;Ū<æ<ū=t::„:…::„:…:‹:‘:/;<8<€<<l=~=Į=ū=ĸ:Ũ:<<Ũ=ū=ĸ:˛:ĩ:ļ:˛:ĩ:ļ:Ā:Ė:Ō:Ā:Ė:Ō:Ũ:<<Ā:Ė:Ō:Ũ:<<Ā:Ã:Ō:Õ:Ã:Ė:Õ:Ũ:<<Ũ=ā=æ=é=ā=æ=é=ū=Ũ:;€<<˙:;;;€<<˙:;;;€<<˙:;;;€<<˙:;; ;;; ;;€<<;!;< <;!;< <;!;< <;!;< <!;/; <8<!;/; <8<!;'; <&<';/;&<8</;=;8<X</;=;8<X</;5;8<><5;=;><X<=;K;X<€<=;C;X<^<C;K;^<€<Ĩ;¨;Ģ;ļ;==Ĩ;¨;Ģ;Ž;Ž;ļ;==Ü;<,=I=<ļ<æ<í<ķ<=Ä<Į<Ę<Û<==!=,=> >>Í>ā>/@a>j>m>{>? ?a>d>m>p>d>j>p>{>? ?{>Š>€??>Š>€??•>Ę>ā>€? ?Ā? @/@Ÿ>Ŧ>x?€?é>ø>û>ū>ė>ī>ō>ø>û>ū>ø>û>ū> ? ?­?ø>û>ū> ? ?­?ø>û>ū>?? ? ?­? ? ???Đ?Ķ?Ų?Ü?Ķ?Ų?Ü?ë?8–›ž8vƒ¨š;=CEKQVnƒnv¨š6@9@G@zAˆAîAB6C6@9@L@h@k@l@ĸBÃBU@h@k@l@h@k@l@‹@”@—@C6Cv@‹@”@—@CCC!CCC!C6C‹@”@—@ĸ@XBhB‹@Ž@—@š@Ž@”@š@ĸ@XBhBĸ@¨@Ģ@­@¨@Ģ@­@Ŋ@Ā@Ã@Ŋ@Ā@Č@Ë@Ô@ę@í@î@Ô@į@í@î@ę@í@î@ø@û@ū@ø@û@ū@ AhBxBø@û@ū@AA AhBxBA(A+A.A(A+A.A9AxBB(A+A.A1A1A9AxBB\AfAžA˛AĩAšA\AbAžA¤AbAfA¤A˛AĩAšAfApA˛AĩAšAĘAÍAŅAfAlA˛AĩAšAŧAlApAŧAĘAÍAŅApAzAĘAÍAŅAîApAvAĘAÍAŅAÔAvAzAÔAîA B=BCBFB=BCBFBXBTCNEYEÔEsCNEYEcE”EÍEsC~C;EFE°C1EYEcE”EÍEĖCÕCŲC E”EĒEĖCŌCŲCáC_DjDøCYDrD E”EĒEDDYDE EJDYDE E E1EYEcE&E1EYEcEúEF0FAF FFFFtFwFzFäIęIíIõIÉJ€F–FœFĸFĢFŽFÃFØFØFŧH%JCJØF‹GČGŧH%JCJØFGČGîGîFûFGG+GCGFGIG+G7G=GCGFGIGCGFGIGYG_GbGCGFGIGMGSGYG_GbGYG_GbGqGzG}GYG_GbGeGkGqGzG}GqGzG}G‹GTHhHqGtG}G€GtGzG€G‹GTHhHH HHH=H@HFHIH@HFHIHTHhH€HƒH†HhHtHzH€HƒH†H€HƒH†H–HœHŸH€HƒH†HŠHH–HœHŸH–HœHŸHŧH–HœHŸHĸH¨HŧH‹G™G›GGĐHāH-IGIĐHāH0I8I;IGIāHėHīHņH III III I(I~IŽIII I#III#I(I~IŽIGI[IaIdIŽI™INI[IaIdIŽI™I[IaIdI~I[IaIdIjIpI~IŋIĘIõIJÅIĘIõIJ‡JŠJJJ‡JŠJJJäJęKôKLKęKôKLKKKKK%K(K*K9KDK¸KČK{A{G{M{v{Į{î{{{{*{Hzļzî{ ||"|Hzļzî{ ||"|HzKzNzbzKzNzbzļzî{ ||"|KzNzbzizkzpzszvzyzz…zļzî{ ||"|đzōzõz˙z6|9|G|L|O| ~~b~o|r|u|~|Š|¯|˛|Ā|Æ|É|Ā|Æ|É|×|Ų|Ü|×|Ų|Ü|í|ķ|ö|í|ķ|ö|}}}}}}}}}}}} }}}} }}}} }}}})}4}I}O}P}I}O}P}[}]}`}[}]}`}n}t}w}n}t}w}€}ƒ}†}€}ƒ}†}}–}™}}–}™}ĸ}Ģ}Ž}ĸ}Ģ}Ž}š}~%~ĸ}Ĩ}Ž}ą}Ĩ}Ģ}ą}š}~%~×}ã}é}î}đ}ķ}Ü}ã}é}î}đ}ķ}‡~F„N„x„€„ƒ‡!,€„‹„!$$,€„‹„,:‹„Š„,2‹„‘„2:‘„Š„ˆ‹Ž™T…d…ˆ‹Ž‘‘™T…d…™§d…v…Ÿ§d…v…õøû€D…T…õøûūū€D…T…€€4…D… €€4…D…h€k€n€y€Š„´„h€k€n€q€q€y€Š„´„y€‡€´„Ō„y€€´„ē„€‡€ē„Ԅˀ΀ԀŨ€Ō„Ũ„ˀ΀ԀՀՀŨ€Ō„Ũ„Ũ€ë€Ũ„û„Ũ€ã€Ũ„ã„ã€ë€ã„û„369Dû„…369<<Dû„…DR…$…DJ… …JR …$…dghtwztwz…$…4…twz}}…$…4……’™ „4†ō†…‹™Ÿ¨>ƒYƒ „4†ō†…‹™Ÿ¨>ƒrƒ „4†ō†ȁˁց܁‚‚ ‚‚ ƒ°ƒ‚‚ ‚ ‚ ‚‚ ƒ°ƒ-‚0‚3‚B‚H‚I‚B‚H‚I‚T‚W‚Z‚T‚W‚Z‚f‚l‚o‚f‚l‚o‚x‚{‚~‚x‚{‚~‚‰‚Ѓāƒx‚{‚~‚‚‚‰‚Ѓāƒ‰‚—‚ƒЃ‚—‚ƒЃŋ‚‚łЂ„ „ŋ‚‚łȂȂЂ„ „đ‚ķ‚ö‚ƒ„„đ‚ķ‚ö‚ų‚ų‚ƒ„„ƒƒƒƒƒƒƒ&ƒđƒ„ƒƒƒƒƒ&ƒđƒ„&ƒ4ƒāƒđƒ,ƒ4ƒāƒđƒ4ƒ>ƒ°ƒƒ:ƒ>ƒ°ƒƒ9„<„?„F„`„c„f„x„9„<„?„B„`„c„f„i„B„F„i„x„Ņ…ā…ō†‡Ņ…ā…ø†‡† ††† †††"†–‡™‡§‡LJ­‡#‹+‹@‹H‹kۇŪ‡į‡ô‡÷‡ˆBˆKˆNˆ\ˆH‹P‹BˆEˆNˆQˆEˆKˆQˆ\ˆH‹P‹\ˆkˆP‹l‹\ˆbˆP‹V‹bˆkˆV‹l‹¯ˆ˛ˆĩˆÁˆl‹t‹¯ˆ˛ˆĩˆ¸ˆ¸ˆÁˆl‹t‹ÁˆЈt‹‹ÁˆĮˆt‹z‹ĮˆЈz‹‹‰‰‰&‰‹˜‹‰‰‰‰‰&‰‹˜‹&‰5‰˜‹´‹&‰,‰˜‹ž‹,‰5‰ž‹´‹y‰|‰‰‹‰´‹ŧ‹y‰|‰‰‚‰‚‰‹‰´‹ŧ‹‹‰š‰ŧ‹؋‹‰‘‰ŧ‹‹‘‰š‰‹؋ۉŪ‰á‰í‰؋ā‹ۉŪ‰á‰ä‰ä‰í‰؋ā‹í‰ü‰ā‹ü‹í‰ķ‰ā‹æ‹ķ‰ü‰æ‹ü‹2Š5Š8ŠDŠü‹Œ2Š5Š8Š;Š;ŠDŠü‹ŒDŠSŠŒ"ŒDŠJŠŒ ŒJŠSŠ Œ"ŒbŠeŠgŠuŠ…ŠˆŠ‹Š—Š+‹8‹…ŠˆŠ‹ŠŽŠŽŠ—Š+‹8‹úŠũŠ‹ ‹‹‹‹#‹8‹@‹‹‹‹‹‹#‹8‹@‹ŒŒŒ•Œ˜ŒŒ•Œ˜Œ§ŒåŒøŒ5HåŒøŒ;Hvy‡“–’’ƒΒō”׍ڍŨöGŽPŽSŽaŽΒ֒GŽJŽSŽVŽJŽPŽVŽaŽΒ֒aŽpŽ֒ō’aŽgŽ֒ܒgŽpŽܒō’´ŽˇŽēŽƎō’ü’´ŽˇŽēŽŊŽŊŽƎō’ü’ƎՎü’“ƎĖŽü’“ĖŽՎ““%1“$“%((1“$“1@\’i’7@\’i’„‡“i’q’„‡ŠŠ“i’q’“ĸq’’“™q’w’™ĸw’’ãæéõ’š’ãæéėėõ’š’õB’O’ûB’O’EHKWO’\’EHKNNWO’\’Wf5’B’]f5’B’ĩ¸ģĮ(’5’ĩ¸ģžžĮ(’5’Į֐’(’͐֐’(’ėûū‘ûū‘ ‘$“3“ûū‘‘‘ ‘$“3“L‘O‘R‘^‘š’ĸ’L‘O‘R‘U‘U‘^‘š’ĸ’^‘m‘ĸ’ž’^‘d‘ĸ’¨’d‘m‘¨’ž’æ‘é‘둸‘’’’’ž’ƒ’’’ ’ ’’ž’ƒ“™“8”N”“™“>”N”Į”ʔДĶ”ʔДĶ”ō”• • •ŘИë˜ø˜Aš• •#•3•9•:•l™™™ •ģ•Ŋ•Õŕ|—™™í™šAšŕî•ô• ––+–î•ô• ––+–Ģ–ą–ž–Ā™í™î•ô• ––+–g–j–l–g–j–l–œ–ž–Ȗ˖ķ–ü–————`—ž–Ȗ˖ķ–ü–————8—>—D—W—`—°—ļ—š—ėИā˜°—ļ—š—ŧ—ŧ—ėИā˜Ō—ؗۗ¨˜ޘą˜™™˜?˜™™˜"˜™™˜"˜™™K˜Q˜[˜a˜g˜w˜a˜g˜w˜˜˜¨˜ޘą˜¨˜ޘą˜¸˜ø˜™¨˜ޘą˜¸˜ø˜™¨˜ޘą˜´˜´˜¸˜ø˜™¸˜Řā˜ë˜¸˜Řā˜ë˜Á˜Řā˜ë˜&ļžČe‹&*-@^agjm—ƒ†‰“—Ĩ¨ĢĨ¨ĢļžČĨ¨ĢŽŽļžČČe‹2ČÚŨâÁČ!)ÚŨâîČæ).îũ.Iũ‹‘DÍŌüPRUWZ…Ie$“™¨Á“™­Ádšl{}‚áž•šœšϚ´ššŚȚsœú3ždž~žœžĖžšŚߚëšøšœú*ždž~žœžĖžšŚߚčš›››7›ž*ž›››&›ž*ž››››7›\›€›˜›˜›¸›ˇžĖž˜›Ļ›ˇžĖž¸›á›úžœœœ(œœœ œ œœœœ œœ(œ œœœœœœœœ(œsœœœ(œcœ*œ8œ@œOœRœWœ*œ8œEœOœRœWœsœˆœāíyœˆœāíˆœ‹œ’œ—œŋœœŜלíúŋœœŜȜȜלíúéœíœķœöœųœ  l(/?BG(4?BGģžĝĮ3ž6ž9ž<ž6ž9ž<žNž Ÿ˛ŸŸíŸ'ŸŽŸŸíŸ,Ÿ2Ÿ4ŸŽŸŸíŸTŸzŸŸíŸgŸzŸŸ˟rŸzŸŸ˟M[^a[^ap’Ĩ[^addp’ĨpžĀÆxžĀƘ¨Ģ°¨Ģ°žĀÆP€’ĨÄÆĖ#47<ÆĖ)47<ü#€’KZ]`Z]`ozZ]`ccozoģŊĀw|ģŊĀz|¸˜¨Ģ°¨Ģ°ģŊĀ8hzŦĀÆ%(-ĀÆ%(-đhz(7EHM(=EHM7H.147W˙pˇá]`k˙pˇá]`t‰”Āp‹—œ]`”Āp‹—œ]`”Ŗp‹—œkt‰”Āü‹—œĄá˙pĐá)ōú×ũW]`y|…ÂĻŠ˛ŧÂáäįČËÕØÛáäįáäįōúáäįōúáäįęęōú×ũĨ$29“›$/9W› /> ģ>fũFfũiln¤?Do‹°˛ĩˇēõģ׋— 2 2d û ĄŋĄĐĄÚŖj k n ‰ Œ  ’ – ĄhĄ=ŖPŖj k n  ĄhĄ=ŖPŖĄ7Ą=Ą@Ą7Ą=Ą@ĄKĄ‰ Œ – œ Ÿ Á ĐĄ(Ŗ5Ŗ=ŖzŖÚŖ¸ ģ ž Á ߥåĄčĄĸ’ĸ•ĸŖ(Ŗ5Ŗ=ŖŠŖŖŸŖÚŖķĄĸ’ĸ•ĸŖ(Ŗ5Ŗ=ŖŠŖŖŸŖÚŖķĄĸĸ"ĸĸĸ"ĸQĸŖ(ŖŠŖŖ"ĸ1ĸŖ(ŖŠŖŖQĸŒĸ5Ŗ=ŖŸŖÂŖĸ’ĸ•ĸŖŖŸŖÁ ß (Ŗ5ŖÍ ß (Ŗ5ŖĶ ß (Ŗ5Ŗß û hĄŋĄPŖeŖâ å é û hĄŋĄPŖeŖĄ—ĄĄ Ą—ĄĄ ĄĢĄ¤¤'¤tĨĨôŠ0¤<¤B¤H¤0¤3¤6¤8¤0¤3¤6¤8¤0¤3¤6¤8¤Y¤o¤t¤w¤g¤o¤t¤w¤o¤t¤w¤‚¤´ĨÎĨÔĨÕĨÎĨÔĨÕĨâĨčĨęĨâĨčĨęĨ÷Ĩ÷Ĩ‡¨Ŋ¨Ų¨Š‘Š÷Ĩ ĻĻĻĻ ĻĻĻ ĻĻĻ Ļ@ĻŪĻįχ¨Ŋ¨Ų¨Š‘Š@ĻRĻęĻíĻđĻöĻųĻH¨`¨‡¨Ŋ¨Ų¨ŠpŠIĻLĻOĻRϧ§!§ΧŌ§Õ§`¨‡¨Ŋ¨Ų¨Š9ŠYŠpŠ,§ΧŌ§Õ§`¨‡¨Ŋ¨Ų¨Š9ŠYŠpŠ,§;§P§[§;§P§[§Ч`¨¨YŠpŠ[§j§`¨¨YŠpŠЧ˧¨‡¨Ŋ¨Ų¨Š#ŠΧŌ§Õ§H¨IŠYŠRĻXĻ[Ļ]ĻlĻoĻpĻ~ρτĻpĻuĻxĻ~ρτĻ~ĻĻ„Ļ”ĻšĻĻ~ĻĻ„ĻˆĻŽĻ”ĻšĻĻ”ĻšĻĻŦĻ¯Ļ˛Ļ”ĻšĻĻ ĻĻĻŦϝϞĻŦϝϞĻÂĻÅĻČĻŦϝϞĻļĻŧĻÂĻÅĻČĻÂĻÅĻČĻŪĻH¨`¨ÂĻÅĻČĻËĻËĻŪĻH¨`¨­¤ŗ¤ĩ¤ŧ¤ŋ¤÷¤ú¤ũ¤‘ŠžŠ‘Š”ŠšŠŠ”ŠšŠŠĢŠ÷¤ú¤ũ¤ Ĩ‡¨“¨÷¤ú¤ũ¤ĨĨ Ĩ‡¨“¨Ĩ”Ĩ—ĨšĨ”Ĩ—ĨšĨ´Ĩ”Ĩ—ĨšĨ ĨĻĨ´Ĩ”Ĩ—ĨšĨœĨ”Ĩ—ĨšĨœĨ”Ĩ—ĨšĨœĨvĒǂljǠǍĒvĒyǂDžĒyĒDžljǠǍljǓǍĒŋĒ‰ĒĒ¨ĒŽĒĒ“ĒŽĒŋĒėĒīĒõĒøĒīĒõĒøĒĢĢĢ*ĢŦŦ Ŧ`ŦƒŦĻŦåŦjĢmĢpĢzĢ`ŦpŦ¯Ģ˛ĢĩĢā̝̞ĢĩĢā̝̞ĢĩĢāĢāĢŦŦ ŦpŦƒŦāĢŦŦ ŦpŦƒŦāĢŦŦ ŦpŦƒŦ˙ĢŦpŦƒŦ˙ĢŦŦ ŦŦŦ ŦŦpŦƒŦŦŦ Ŧ/ŦIŦTŦŦŦ Ŧ#ŦIŦOŦ#Ŧ/ŦOŦTŦ*­MŽ ¯ģ¯D­K­Æ­Í­S­Y­[­`­ Ž0ŽS­Y­[­`­ŽŽŽ0Ž`­e­ũ­Žp­s­­‚­s­­‚­Ž­‘­”­v­­‚­„­‡­Ž­‘­”­Ž­‘­”­Ļ­Š­Ŧ­Ž­‘­”­š­ ­Ļ­Š­Ŧ­Ž­‘­”­–­Ž­‘­”­–­Ž­‘­”­–­Ļ­Š­Ŧ­ģ­ž­Æ­Ŧ­¯­˛­ģ­ž­Æ­Ú­æ­ė­ũ­WŽjŽmŽpŽjŽmŽpŽ‚ŽˆŽŠŽjŽmŽpŽvŽ|Ž‚ŽˆŽŠŽjŽmŽpŽrŽjŽmŽpŽrŽjŽmŽpŽrŽ‚ŽˆŽŠŽ—ŽšŽŽ—ŽšŽŽŽŽ´ŽĩŽ—ŽšŽŽĄŽ§ŽŽŽ´ŽĩŽŽŽ´ŽĩŽÄŽÄŽ׎ŨŽߎ׎ŨŽߎėŽ#¯+¯.¯1¯#¯+¯.¯1¯+¯.¯1¯<¯S¯_¯+¯.¯1¯4¯4¯<¯S¯_¯° ° °°w°‰°° °°° °°°°w°‰°7°C°I°N°P°S°<°C°I°N°P°S°Ô°æ°đ° ĩđ°ąąąą ąž ŗ“´Ō´đ°ąž ŗ“´Ō´Ú˛ō˛ø˛û˛ō˛ø˛û˛ŗ.ą9ą<ą=ą9ą<ą=ąCąCąIąNąQąIąNąQąäąxŗ¸ŗ´.´Ō´ĩIąNąQąWąZą[ąWąZą[ąąxŗˆŗ´´WąZą[ąiąiąsąą…ąsąą…ąąxŗˆŗsąą…ąąxŗˆŗsąvą…ąˆąvąąˆąąxŗˆŗ´´ ´´´ ´´´ąČąˆŗ˜ŗī´ĩēąČąˆŗ˜ŗēąČąˆŗ˜ŗēąČąˆŗ˜ŗĀąČąˆŗ˜ŗČąÖą˜ŗ¨ŗČąÖą˜ŗ¨ŗČąÖą˜ŗ¨ŗÎąÖą˜ŗ¨ŗÖąäą¨ŗ¸ŗÖąäą¨ŗ¸ŗÜąäą¨ŗ¸ŗäąōą¸ŗČŗäąōą¸ŗČŗęąōą¸ŗČŗōą˛ČŗØŗøą˛ČŗØŗ%˛(˛)˛3˛6˛9˛)˛*˛-˛3˛6˛9˛3˛6˛9˛D˛Øŗåŗ3˛6˛9˛<˛<˛D˛ØŗåŗD˛že´}´G˛J˛N˛že´}´w˛˛•˛˜˛˛•˛˜˛Ŗ˛ ŗbŗčŗņŗôŗ´}´“´.ŗYŗ}´“´2ŗYŗ}´“´7ĩĩ˜ĩØĩāĩ!ļ7ĩ=ĩCĩFĩHĩKĩMĩeĩkĩnĩ€ĩƒĩ†ĩĩĐĩØĩ€ĩƒĩ†ĩ‰ĩ‰ĩĩĐĩØĩĸĩēĩĀĩÃĩ6ļ9ļGļ_ļbļcļÂļáļlļuļxļ‰ļ˜ļ¸ļlļuļxļļ˜ļ ļlļoļxļ{ļoļuļ{ļļ˜ļ ļļ‰ļ ļ¸ļļ…ļ ļĻļ…ļ‰ļĻļ¸ļ6ˇ9ˇGˇÔˇāˇH¸RˇdˇgˇhˇŒˇ•ˇ˜ˇŸˇđˇüˇŒˇˇ˜ˇ›ˇˇ•ˇ›ˇŸˇđˇüˇŸˇЎāˇđˇĨˇЎāˇđˇüˇ˙ˇ¸¸˙ˇ¸¸¸d¸{ēēAŧEŧHŧPŧTŧ`ŧkŊ€¸ƒ¸†¸‰¸ҏÔ¸ē ēš¸θÔ¸{ē ēAŧEŧHŧ`ŧkŊƸθÔ¸tē`ŧĀŧAŊkŊÔ¸Ö¸Ũ¸ā¸å¸ũ¸š šč¸ô¸÷¸ũ¸š šũ¸š ššš!ššš š šššš!ššš!š-š0š3ššš!š$š'š-š0š3š-š0š3šMšSšVš`ŧ€ŧSšVš`ŧ€ŧMšSšVšhšnšqšMšSšVš\šbšhšnšqšhšnšqš†šhšnšqšwš}š†š†šžš¤š§š ŧĀŧ¤š§š ŧĀŧžš¤š§šššŧšŋšžš¤š§š­šŗšššŧšŋšššŧšŋšÍšĐšĶšŋšÄšĮšÍšĐšĶšÍšĐšĶšíšķšöš€ŧ ŧķšöš€ŧ ŧíšķšöšēēēíšķšöšüšēēēēēēē ē&ē)ēēēēēē ē&ē)ē ē&ē)ē8ē ē&ē)ē,ē2ē8ē ēĸēŠēŦēąēÉēŌēÕē´ēĀēÃēÉēŌēÕēÉēŌēÕēáēäēįēĖēŌēÕēØēÛēáēäēįēáēäēįēģģ ģāŧŊģ ģāŧŊģģ ģģ"ģ%ģģģ ģģģģ"ģ%ģģ"ģ%ģ4ģ7ģ:ģģ"ģ%ģ(ģ.ģ4ģ7ģ:ģ4ģ7ģ:ģTģZģ]ģŊŊZģ]ģŊŊTģZģ]ģrģTģZģ]ģcģiģrģrģŠģģ“ģĀŧāŧģ“ģĀŧāŧŠģģ“ģĨģĢģŽģŠģģ“ģ™ģŸģĨģĢģŽģĨģĢģŽģŊģÃģÆģĨģĢģŽģąģˇģŊģÃģÆģŊģÃģÆģÕģÛģŪģŊģÃģÆģÉģĪģÕģÛģŪģÕģÛģŪģíģķģöģÕģÛģŪģáģįģíģķģöģíģķģöģŧíģķģöģųģ˙ģŧޏ‘¸θҏ‡Ŋ"ž0žÎŋāŊžžžžžžž0žÎŋžžžž0ž;žžž4ž;žJžSžVžbžMžSžVžYž\žbžbž{ž„ž‡žbžjžmžržuž{ž„ž‡žbžjžmžpž{ž„ž‡ž“ž~ž„ž‡žŠžž“žčžëžîžũž`ŋpŋčžëžîžņžņžũž`ŋpŋũž ŋ ŋŋũž ŋ ŋŋ ŋ ŋŋ`ŋpŋzŋ ŋ ŋŋ`ŋpŋzŋ ŋ ŋŋ`ŋpŋzŋ8ŋEŋpŋzŋ=ŋEŋpŋzŋĀĀĀ$Ā0Ā8ĀĀĀĀĀĀ$Ā0Ā8Ā.<p†ą´ˇĘą´ˇē#&)<#&),N_…“€ĀķĀÁ[Á.<p††ĪŪą´ˇĘą´ˇē%(+>%(+.Rc‰—ˆÁmÂxÂŽÂ.<p†ą´ˇĘą´ˇē#&)<#&),N_…“ØÂåÃđà Ä=Ã?Ã`ÈÃ'ÄDÄäÆöÆųÆûÆPÄäÆĮļĮĀĮÉÃÄâÄ×ČáČ=Å?ÅBÅHÅ^ÅäÆĮ ĮĀĮŋČáČÉ^ÅäÆĮ|ĮĀĮŋČëČÉ ÆŖÆēÆŊÆĢÆēÆŊÆÃÆÆÆÉÆNĮaĮČ ČÆĮõĮ=ČŋČëČÉ Č&Č)Č/Č.<p††ĪŪą´ˇĘą´ˇē%(+>%(+.Rc‰—ÉoÉ€ÉķÉWÉYÉ\ÉoɀɏɔɖɏɔɖÉĶɝɭɰɲÉĘĐĘāĘ—Ë ËŧÍĘĘĘ9Ę<Ę?ĘBĘFĘāĘ@ËÍ2ÍĘĘĘ1ĘāĘ@ËÍ2Í÷ĘËËËËËË#Ë9Ę<ĘFĘLĘOĘqĘ ËÍÍÍ\ÍŧÍhĘkĘnĘqƝËĩ˸Ë_ĖbĖeĖØĖÍÍÍlÍq́ÍŧÍÃË_ĖbĖeĖØĖÍÍÍlÍq́ÍŧÍÃËŌËįËōËŌËįËōË$ĖØĖÍlÍqÍōËĖØĖÍlÍqÍ$Ė\ĖÍ́ͤÍ_ĖbĖeĖØĖq́ÍqĘ´ĘÍÍ´ĘĐĘ@Ë—Ë2ÍG͡ĘēĘžĘĐĘ@Ë—Ë2ÍGÍWËoËuËxËoËuËxËƒËÆÍÉÍ×Í0Î@ÎWÎaÎ’ÎÚÍāÍáÍįÍøÍÎÎ ÎÎÎ ÎÎ@ÎPÎÎÎ Î Î ÎÎ@ÎPÎ#Î&Î)Î0ÎPÎWÎ#Î&Î)Î0ÎPÎWÎ#Î&Î)Î,Î,Î0ÎPÎWÎj~ö _~Ž$_~Ž~‡Š‡Š™&‹“ąryŗ&lyŗ*lyŗy|‚…|‚…‘ruxˇēŊr#&#&2æéėô÷ø!dmp'*.14;ABGJMTWXX[^dmpdmp‹“ądmpw“dgpsgmsw“w§}§‹§ą‡‹§ąąryŗĪąÉĖҰģŌŪÉĖŅÜģŅŪãÜëãë+*Tđ+*T*-36-36B+>DGADGVY\a°Ņęi”œ°Ņęi€œ°i€ĸ°€ŠÛꆊÛꊔŅې”ŅÛiwÂŌ•™œĄ´ÎˇÎēÎĪ ĪxĪÂÎĪ=ĪxĪÆÎĪ=ĪxĪ[Ī^ĪdĪgĪ^ĪdĪgĪxĪÄĪĮĪĘĪ Đ3Đ8Đ;ĐŒĐŌĪĐQĐŒĐÖĪĐQĐŒĐoĐrĐxĐ{ĐrĐxĐ{ĐŒĐįúũ˙„Ž‘“›Ą¤¸ÚĐ)3X‡˜nuq€`[ckˇ­e‡Ø+ZĻC[[[ŠDšŽĻ+­}Æ%5ļɍåę]§-†ˇįŽ|||Qí - —k’z’’Cy()3)3’ž’nxčßmp刚ŨÕßX2ÄŦ`Ĩ“—“—öĪÍĢ8û /usr/include/c++/4.9.2/bits./include/gtest/internal./include/gtest./src/usr/include/c++/4.9.2/ext/usr/include/c++/4.9.2/usr/include/usr/include/bits/usr/include/sys/usr/include/c++/4.9.2/i686-redhat-linux/bits/usr/include/c++/4.9.2/tr1/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/include/c++/4.9.2/debuglocale_facets.hgtest-port.hgtest.hgtest-internal-inl.hgtest.ccstl_vector.hgtest-test-part.ccgtest-death-test-internal.hstl_algo.hnew_allocator.hgtest-internal.hbasic_string.hatomicity.hstl_construct.hgtest-death-test.ccgtest-printers.ccostreamchar_traits.hgtest-message.hgtest-param-util.hstl_iterator.hstring.hsstreamstdio.hvector.tccstl_algobase.hgtest-test-part.hgtest-filepath.ccstat.h gtest-filepath.hgtest-port.ccbasic_ios.hios_base.hstreambufistreamiomanipbasic_string.tccgtest-printers.hmove.hmathinline.hstl_uninitialized.hstl_tree.hstl_pair.htypeinfopredefined_ops.hstl_iterator_base_funcs.hgtest-typed-test.ccstl_set.hiostreamcwcharcpp_type_traits.hstl_iterator_base_types.hc++config.h clocalenewallocator.hstringfwd.hcwctypeostream.tccstl_bvector.htuple iosfwdstl_function.hcstdlibbasic_ios.tccpostypes.hfunctexcept.hostream_insert.hstdio.hlibio.hstdarg.h stddef.h wchar.htime.hnumeric_traits.halloc_traits.htype_traits.hdebug.h locale.htypes.hsched.htime.hpthreadtypes.hatomic_word.h wctype.hstdlib.htypes.h sigset.hselect.h stat.hunistd.hregex.hgtest-string.hgtest-spi.hgtest-death-test.hsiginfo.hsignal.hsigaction.hstdlib-float.hstdlib-bsearch.hfcntl-linux.htime.h socket_type.hsockaddr.hsocket.hnetdb.hgthr-default.h errno.hctype.hpthread.hsocket.h wait.h mman.h sched.hfcntl.hcxxabi.h˛™ ž åØįæĸy ūäČ><úäŽ~ ZĸėäŠ~ æ št‡N -Zf„,hĄ Ķ~f¯fJ i ­.Ķ|<J„ō JŊiU2ŠŲž  FJ;<‡ öŒ}<"M <s;rX Ú%Šuö fŠu<ĢzC<’fĢz<C<=ŦCfĄ t/<kJ<;=;jŦ/.bJ=<a<<b<‚>^< <>; ûvōC.=fC<=Cf=ČCfė 4gI=igĄ›… t ˇvōÉ f ë ÔlōŦfÔl<C<ņ ÖōÅxģfÅx<‹|Jõf‹|f íC"Vē#õČĸzX# X ŦXŨ ē;=m<& ŊvtCą‚ „{<ļXŸ< á~.ŸgÉ šuJCf§ J áŠu ö fŠu<”Ö —užC<Ļ f —u<C<§ X –u<Cf=fC<=fC<›åå!åå$åÉîķķe=ļqēĘ<¸p<  |JŠ.Mhb@ ÚlžĻ< Úl<C<ä‚} ŪlÖCfĨŦ>RŽV0 fū˙ņã7X/Čä!e!Ŧä!;!/ō/ ƒiēC<ēf ƒi<C<=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cfģ‚wÖ Xw< < ‚iƒC<=fC<=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf =ē Cf =ē Cf=äCf=ēCf=ēCf=ēCfEÖ>: Ū<¤f Ü.¤fg ķ*‚~äū<‚~fC<=‚CfĐ~‚ģüŦ đē< đ<C<=‚CfN‚F</X đ‚~äū<‚~fC<=JCf=JCf=JCf=JCfNo  īä Cf=JCf=fCf=ēCf=ōCf=<Cf=ēCf=ēCf=ēCf+4ĸ~fŪ<Öĸ~<ā<Ÿ×;/ ŒŦ‚~tū<‚~<C<2‚  ÖCX=žCfØŦgeÖ=0Ü §JŠuēö fŠu<Ī{ä §žŠuÖĢzČC<’fĢz<C<=JCf=JCf=JCfãJy. á~.Ÿ á~<C<ãŦ Ú~GCf=ēCf=ēCf =ē Cf=žC<=fC<=ŦC<=fCXõČ<=@~2X L  š~  <  û{f  õ< <  ‡. ô|tŗ‚Ō}ÖžLȡ?9ķ}‚ä }‚˙< –~ ę< –~<C<ũ‚øž‘-=„}*+t ƒ}.ũ<!‰}X zfÕt Ä|‚ ütCf3#<@:"<đ*~ ŽŗuxČî*­}.ĶŦ­}fĶ<­}ēĶŦ­}fĶ<’~ž%øXäK­o< ž}ÔēØ< LĻbfÚfːaJķ<a.đfaķ<a<ķXgs=Œa‚ķ<a<ķXMévä!-.=ĖDz=ÍāĐ_ēģŦõXŒg<ÄxJ° tj‡gäĸyŪfĸy<Ū'õÖ‹gŊzX<Š<Y÷z‚”<;ízJ”<íz‡ČÛyĨ, Īyą,íz.‡‚ Jãz<‘<Yđz‚›<;Kåz<›<æzÖŽČÛyĨ, Īyą,æzōš<æz<Ž‚ JŨzfåuƐ<Īk<Y ŦK¨<ĖkäÛyĨ, "Īyą,¨ōØk<¨<Ėk‚ Jf<×k<Y ŦK <ÔkäÛyĨ, "Īyą, ōāk< <Ôk‚ JÜf…v<Ŋ}ē ĮtCXö~J Į‚Cf=ēCXö~ŦËž ŊJģēŊ}ē ĮČCf=JCfö~J Į‚Cf=ēCf=<Cfö~ČËž ŊJ‹ ēŦ<Ô}Öžyâ,Ŧ.Ô}‚âxfg;Ög„Ą —ÖŠuäö fŠu<ß{Ö Ė~žC<ņf Ė~<C<=JCf =J CfōJ+ Î~瞐 Î~<C<ōŦ  Ë~: Cf=fC<=fC<= Cf“'€<€<€<{< ‚āX’|ēė|ē”f˙|ņ‚ē‚} ū<‚} ū<€}ē€<ė|f”f˙|f<˙|<ņ‚Ö‚} ū<‚}<ū<ņfy<ņ<|Xė|ē”fđ}fÖ‚} ū<‚} ū<ė| ”fė|J”f˙|f<˙|<ņ‚Ö‚} ū<‚}<ū<€}fô<ē˙< ¯rČC<Žf ¯r<C<=tCfŽX ¯rōCf =Č Cf=tC<=fC<ī .>lũ}热e! Įntš< Įn<C<ö‚É ÆlJCfĘČg;Ö=Ürfė|ē”f˙|ņ‚ē‚} ū<‚} ū<€}ē€<ė|f”fė| ”fė| ”f˙|ņ‚ē‚} ū<‚} ū<€}ē€<ė|f”fė| ”fė| ”fė| ”fė| ”fė| ”f° ‚ ŪpÖĸ< Ūp‚ĸ< æp"C<×f æp<C<=tCfXÉ ŦĪo< –_C<=fC< =ä Cf Čę#<ģo<ā~<æf­<č<1Ž ¸l,Č< ¸l<C<‰‚ķvōč ŧl$CfŒ&<= ŦzÖ#i# Šl1C<”f Šl<C<•J ¨lōØ< ¨l<C<=+Cf=fC<=fC<šž<=ؐ}‚ čnÖˆ<‹}õf‹} õē‹}fõ< €lžC<Ŋf €l<C<=‚Cfž‚Ž ũk,ƒ< ũk<C<‚Ÿķ„}‚ü  ųk‡< ųk<C<Æ‚‘;=ķ‘s=˙|‚J ķk< ķk<C<Ë‚’)‘W/.­z%ķw1 ęk(Cf =' Cf=äCf=ōCf= C<=fC<ÔŦ<Ÿ āiēĸ.=K;=ÎkČė|ē”fL‚ä<$‚”näíČ;=ĢkŊōÃkžÃ&Ŋkfˇ‡°iÖāt }ā< }Xā< }Čā< }Čā< }Čā<ūČgĩk Ëfĩk ė|<”f Ž~fō< Â<ĒkJ Öfžnf Âfžn<ė|<”f –~fę< –~<C<=äCfōÉ%gWמgfē‚} ū<‚} ū<€}ē€<ė|f”fė|f”<ė|ē”< Ž~fō< Â<ĒkJ ÖfĒkf Ö<žn<ė|<”< –~fę< –~<C<=ēCf Úē<YØ:>”}ōė<”}<Öļl  Ž~fŧ.ļl ė|<”f˙|ƒ¸?°läŅČ;=¯lē Ž{fC<=fC< =ē Cfĸē<=;>-.fUŦįđė|”f˙|ņ‚ ‚} ū<‚} ū<ė|f<€<ė| ”<k7A$ā| ĸ+Ū~< Ö<ĒkJ ÖfÔlfC<éfÔl<C<¨‚'. î}’< î}<C<œ‚u Ÿ{.CfĐ‚/[ē ž}<(x.DŧBŦÂ*ž‚Č‚´ō„zÖüf„z  ĸ"Ū~< Ö<ĒkJ ÖfĒkt Ö<Ēk  ĸÖŪ~< Ö<ĒkJ ÖfÔlfC<éfÔl<C<=‚Cf¯Ŧä| ĸ+Ū~< Ö<ĒkJ ÖfÔlfC<éfÔl<C<ËfÉe!š]ÖÜ| ĸ+Ū~< Ö<ĒkJ ÖfÔlfC<éfÔl<C<Đfk‚‘Kę| )8C.=fCfސŌ|<­0Ķ|<­<Ķ|t­<Ķ|.ē ĸ<Ū~< Ö<ĒkJ ÖXÔlfC<éfÔl<C<=ŦC<=fC<J Ž{äCf=fCfX Ž{fCf=ōC<=fC<Ëž ō}ēC<=fC<=‚C<=fC<=.C<=fC<ä i9Øu¯ ŦäZ;Yd‚ģ~ēė|ē”fė|f”<ė|.æ< <ōD< đ ÔlžC<éfÔl<C<§‚ė|ē”fė| ”fđ}tŦ‚} ū<‚}<ū<ė| ”fÉtˇ~<É  Í|fŗ< Í|<C<ņ‚ō.ų~Ŧ73uēĒ~ēė|ē”fė|f”<ė|.æ< <ōD< đ ÔlžC<éfÔl<C<§‚ė|ē”fė| ”f‚}‚ūä‚}fū<ė|<”fÚtĻ~<Ú  ŧ|fÄ< ŧ|<C<‚JT Ž{JCfä Ž{<Cf=JCf=fCfÚ J<Āk<ÂfžkXÂ.k˛^ä”<ė|ē”<đ}f’‚î<<‚}.ū<ģfÅa<ģ<ēdžÆ<ēdXKÄj=¸dōŋt <Ŧdē ō=%f\<$._åŧ:0"˜Đ Jgf‚Ø^Ē!ŽÖ^.Ē! Ōdē¯ž ˙_  < ˙_<C<ŋ ē/ žČ^äģ!„ÁdäĀž î_ ’ < î_<C<Đ ēsJĐ^˛!ŽÎ^<˛! Ędˇž ÷_ ‰ < ÷_<C<Į ‚ ö_;Cfō Ž{BCfō Ž{BCfōĄO<=­ ƒm‚ƒf ũl<ƒ.y&ę˙}‚‚˙}. čnō™<ú}†ú} †ú}f†< īlžC<Îf īl<C<=‚CfĪ‚ķjŦäv(ÜxȤ<Üx<¨X  ûlM Cf=fC<=fC<Œ#<>¯U1i“_äė|ē”f˙|ņJē‚} ū<‚} ū<€}fî#<‡bäų<‡bXKø.3‘\Ŧ萯~ČX>Đ~ēė|ē”f˙|…ŽōĐ{<°<¸ČĘ~Ö Ü|‚¤<=ĪęsČ– <Ęvf }<ā< Â~fž<į<†ąä Ž{ČŌ< Ž{<C<ß‚Č{Ŧ¸# Ū|ČCf‚˙~1K‹Xøwēt Ģ|<Ct“‚ Ē|ōÕJ Ģ|.C<“tfķëČ—xēé<—x. Œ|.ôJ Œ|XC<˛‚f,g;ׁ‚xŦ˙Xx.k==ōzē”<úf†~<ė|<”< Ž~fŪ~<”< Â<ĒkJ Ö<špf Į<šp<úē†<ú‚äŦœ{žüÖ„~fü<ė|<”f„~‚äŦŦã~< ˙yž<˙y<ü‚„~fü<ė|<”f„~‚äŦžžūy‚<ūy.ü‚„~fü<ė|f”f„~‚䐜{‚č~Ŧ˜<B<ĻfÚ<>‚䐜{‚üŦ„~fü<ė|<”f„~‚䐟žũyƒ<ũy.č~‚˜<ü<ė|X”<„~‚䐜{‚č~Ŧ˜<B<ĻfÚ<>‚䐜{‚üŦ„~fü<ė|<”f„~‚䐠žüy„<üy.č~‚˜<ü<ė|X”<„~‚䐜{‚č~Ŧ˜<B<ĻfÚ<>‚䐠žtā~  <ā~ Ą‚7AvČ Ŧv< <ß~ēäfĶ…ōKÉÉÖ=_I:ųuü„~fü<ė|<”f„~‚䐪žųuž‡ <ųu<ü‚„~fü<ė|<”f„~‚äŦ¤Üz<¤ øuˆ <øu<ü‚„~fü<ė|<”f„~‚äŦĨž÷uŦ‰ <÷u<ü‚„~fü<ė|<”f„~‚äŦĻžįzX™<įz<ƒ Ÿ{tC.=fC<žŦ Ÿ{ēCf=XCfļ Xy"ŗy< *Į~ē*ēX,‚.ž D X J. ß{fĄ< ß{<C<=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf ¤ōēX¸|‚ŖŽ}X˙<~<˙XguCy<_¸}XÃJÖ D X J. Ķ{f­< Ķ{<C<=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf *¤ē*ÆX,Ŧ ē~fÆXĒ|JzáJ:0 Î{XCf=ŒCf=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf&=$&Cf$=ō$Cf"=ō"Cf =ō Cf=ōCf=ōCf=ōCf=ōCfC Ž{$CfÉ‚ ô{XCf“ČĻ~<ZÖÆ}fÁfŋ{.ŋ<>‘†Ž>â ë ÖŠuēö fŠu< ķ~<< é žŠuēö fŠu< žy‚C<Ÿf žy<C<=‚Cf=‚Cf=‚Cf=‚Cf=‚Cfŋ‚2 š ē¨uēs„c<Xaē Ø ‚ˇuX É ŦšuōuŠ}žöžŠ}.ö. X™g;! ˙xXC<žf ˙x<C<=‚Cf´"Ä}žŧžÄ}.ŧÖX;Y úxoCf=ēCf=ēCf=ēCf=ēCf=ōC<=fC<= C<=fC<=ēCfļt ‡y>C<=fC<Ā"> )â}ē)žX*‚Xž A tä.f. ûzf…< ûz<C<=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf=ēCf ¤.žX–Ø:>ķ5.å ņzf< ņz<C<=ēCf=ēCf=ēCf=ēCfÚē d<fæÕ0.ä!e!Ŧå åzf›< åz<C<=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf=.CfÚ. ãzeCf=ōCf!=ō!Cf#=ō#Cf%=ō%Cf =ž Cf=ōCf=<Cf=ōCf=ōCf=ōCf =ō Cf =' Cf =ō Cf=ōCf=?Cf=ČCf=žCf=ōCf=ōCfí-<Ÿđ‚˜~$ ĮyfC<öf Įy<C<=tCf÷XxČ Æy8Cf=tC<=fC<‹ <äÖĶÖ­~) yü„~fü<ė|<”f„~‚äüž yžā< y<ü‚„~fü<ė|<”f„~‚äŦü„~<ü  yā< y<ü‚„~fü<ė|<”f„~‚äŦüž yŦā< y<ü‚„~fü<ė|<”f„~‚äŦüž‘~Xī<‘~<ƒ Ÿ{tC.=fC<žt Ÿ{žCf=XCf5ä Ž{ōC<=fC<=äCf+˙6<ČÖĐJ°~)yü„~fü<ė|<”f„~‚ä˙žyžã<y<ü‚„~fü<ė|<”f„~‚äŦ˙~<˙ yã<y<ü‚„~fü<ė|<”f„~‚äŦ˙žyŦã<y<ü‚„~fü<ė|<”f„~‚äŦ˙žŽ~Xō<Ž~<ƒ Ÿ{tC.=fC<žt Ÿ{ēCf=XCf=RCfXä Ž{ōC<=fC<‚F<ČÖÍJŗ~)šyü„~fü<ė|<”f„~‚䐂žšyžæ<šy<ü‚„~fü<ė|<”f„~‚äŦ‚ū}<‚ šyæ<šy<ü‚„~fü<ė|<”f„~‚äŦ‚žšyŦæ<šy<ü‚„~fü<ė|<”f„~‚äŦ‚ž‹~Xõ<‹~<ƒ Ÿ{tC.=fC<žt Ÿ{ēCf=XCf=RCfXä Ž{ōC<=fC<…F<ČÖĘJļ~)—yü„~fü<ė|<”f„~‚䐅ž—yžé<—y<ü‚„~fü<ė|<”f„~‚äŦ…û}<… —yé<—y<ü‚„~fü<ė|<”f„~‚äŦ…ž—yŦé<—y<ü‚„~fü<ė|<”f„~‚äŦ…žˆ~Xø<ˆ~<ƒ Ÿ{tC.=fC<žt Ÿ{ēCf=XCf=RCfXä Ž{ōC<=fC<ˆF<ČÖĮJš~)”yü„~fü<ė|<”f„~‚䐈ž”yžė<”y<ü‚„~fü<ė|<”f„~‚äŦˆø}<ˆ ”yė<”y<ü‚„~fü<ė|<”f„~‚äŦˆž”yŦė<”y<ü‚„~fü<ė|<”f„~‚äŦˆž…~Xû<…~<ƒ Ÿ{tC.=fC<žt Ÿ{ēCf=XCf=RCfXä Ž{ōC<=fC<ŅFjbÚbžŖeČŨ<Ŗe Ųēä ûaäC< ûafC<‚ đ`Ö ‹<C< ˛< ‹<C<=‚Cf=‚Cf=‚Cf=‚Cf悃.mŦ"8@šä Īa.ą< Īa<C<î‚4z rĻbÖäŦŦ'=;=YšbXéfĖc<Ë~Jé‚f…Ą:$i¯c‚ é{fCfˆ!ä—bféŦƒ=%a%Z=N8@°š=?6KMW ˜_#Cfƒ!ŦœbžäŦ'‚OJ> Â_ŦCf=ōCf‚!ē(t™]ē<fæ}ä ™ JÄtČŧ .čr<˙/Ķ>:>vfÜ </ŖsäJoff*¨k<J;g~ē ÅÖ ¤ ‚ÄtČŧ f0Ũwfë~$ė|ē”f Ž~fō< Â<ĒkJ Öfžnf Âfžn<ė|<”f –~fC<§f –~<C<vŦ ēÖÆ}. ē.¯å< ›wäŪ*Ā&/Üzf*Ôē/Ŧ~ē*Ô</Ŧ~. Ĩ./Ūl0ŦJ ˇ~JC<=fC<§Öė|ē”f Ž~fō< Â<ĒkJ Öfžnf Âfžn<ė|<”f*Ô</ízfŋÖ*„~ō/Ŋ~ē*Ã</Ŋ~.i0Ņ  }ÖC<0ŧ< }<C</ë~X(X”<ė|‚”<˙|ēM:€Č€}f€<ė|f”f€}Č/IŦ Œēä/õl< Ė‚Cf*ÛX´Ö/ęyēe=*â<´Ö Ž{XCf=tCf/ķ~ä Âē/ž~< Ęä/ļ~< Ę<C</ô~Č´ Č •ttCfÃ#‚=˛\ŦÖ#ÖĒ\.Ö#. “hfōČ Žh<ō. ė\äC<Ķ#‚K=LLLLMxôîęæoōå< Ú\žC<ō$‚åÉ7åÉØ^<<ĩ<ƒulŪyf/¸gēg<Ūy,hŗzXōf]<#Xa' ÔyC=ēC=ēC=ēC=ēC=ēC "¤ē"ÅX$‚ō[ t f Č# ÔyfŦf Ôy<C< ¤*ÅX%… ŅyōC=ēC=ēC=ēC=ēC=ēC #¤ē#ČX%‚*V t fČ# Ņyf¯f Ņy<C< ¤~ČX Éyōēf ÆyēX ÆytēfV'!e!tō ÍyJŗf Íy<C<=ēC=ēC=ēC=ēC=ēCõēĮ#×eX,J!e!ČŦJJ!e!ČJ!e! Čyȸf Čy<C<=ēC=ēC=ēC=ēC=ēC=ēC=ēC=ēC=ēC=ēC=ēC=ēC­ēēyÆžēy‚Ŗ<#žP‚ĸ~XŪXîy.´Č›|X h,gg) ō)w÷Č Ę.šyžŠföfАö<ã~Jš<Ū‚ėÖąyē’fîf’Xî<Ī‚ąyŦ’fîf’žî<ᐙ~fį  Âyžžf Ây<C<ũē§XWž(fXŦ( KØeÉ ū|‚X —züéf —z<C<=ēC=ēC=ēC=ēC=ēC=ēC=ēC õ~p¯ŗ•h‘#[9i( ŠztC=ēC=ēC=ēC=ēC=ēC ¤ēX ŠzĶöf Šz<C<Ŋ~uģ ūy<C=ēC=ēC=ēC=ēC=ēC ¤ē›X ūyå‚f ūy<C<„æd> ųyäC=ēC=ēC=ēC=ēC=ēC ¤ē X ųyę‡f ųy<C<Đ Ô|ōŦX íyø“f íy<C<=ēC=ēC=ēC=ēC=‚C=‚C=‚CÔĸ éyXC=ēC=ēC=ēC=ēC=ēC ¤ē°X éyĶ—f éy<C<ƒ† *Ą|ō*ßX,‚Xž ? f XJXXX ēyfÆf ēy<C<=ēC=ēC=ēC=ēC=ēC=‚C=‚C “ô|Õ<7fô|<zfPÕ<Ĩf„ī~X‘ Ûg‚žt‰<÷l<‰  Îj ˛f Îj<Ö Ž~fō. Â<žn Âfžn< Ž~ēō< Ž~<´.žnē Âfžn<˛ž˜~ŦļlJĘfļl  Ž~Ŧō. Â<žnÖ Âfžn< Ž~ō< Â<žnž Âfžn< –~C<§f –~<C<š‚Ŋ}f ĮtCXö~tËt ŊJáē  ßh.CfŲ  äĪkfŗŧg;‘3 Ķh C<ęf Ķh<C<=‚Cf“‚~f Ą}Jˇ.L, Īh ą< Īh<C<=‚Cf“‚ų}f Š}Jģ.K, Ėh ´< Ėh<C<=‚Cfõ‚)‚  Čh  ¸<  Čh< C<=‚Cf÷‚0 ÆhJē< Æh<C<=‚Cfø‚6 Åh ģ< Åh<C<=‚Cfų‚ ŧh Ä< đ{ ÔlēŦ<Ôl<C<€‚bsyb šh¨~<ĻČ ˛hōĪĻh:/ļ<'Ë.;;==ĩ< ĮtCXö~žË< ŊJ ŋēCfŸäŠ<öztŖX’ ųwÖ‡< ųw<C<Éä¸w ČJ¸wfČ<¸w<X¸äČ~fõ~<  ĮtCXö~Ŧː ŊJģē‘<Wä).vXÜ{f¤<!Û{tĨfÛ{Ļ<Ú{fĻ<ë|3 §{X‚ įxC<=<C<É  ôwXCf=<Cf=tCfÔJõJ×$<>kōået”Xė~f”./æzȉ t °tēCŦž‚؇f–††¯ …bC‚%ŦåÉ@åÉūw<=¨kfØ ¨k</ą‚Ī~<Ø<Šk<°J§fŲlP ŦŧiäŦm÷{Ŧūž†cŦ ĸJŪ~< ĸ<´.ĒkJ ÖfĒkÖíCáÖžy‚ÂXžy<ŋŦĸnäl<l<°z<Åfģh<Å.˛cäÎ<Æf ė|X”< Ž~fō< Â<ĒkJ Öfžnf Âfžn<ė|<”f Ž~fō< Â<ĒkJ ÖfÔlfŦ<Ôl<C<Ū.’žn<â<žn<âfžnr‚áx. Ž{‚Ō< Ž{<C<´ ‚91Y ‰tCfŽ ‚áxō Ēäh:Ø- ‚t<ū < Ås<=fC<šJŊ}f ĮfCXö~tËt ŊJž ēĮ ‚t.Cf× Č=  č|žu‘‚ī|f‘<đ|<J‘uÖúŦ†}<ú }ē˙X}<X SēC<ę SfC<ę‚ Č~Č ‹ēCf=‚Cf=‚Cf=‚Cf=‚Cfé‚öf”‘vXī < Øv š  Į<‚~fū<‚~<C<ׂ=;KĪy)ą,tēÛyĨ,×| īyÖÍJČ'ņČƒÍy<ŗÍy< {ōC<=fC<=ēCf =ē Cf =ē Cf˜ ē@. åwtCXĖ ņw?Cf=fCf=ōCfāJ< Ãb<Áf ŋbfÁ< ŋb.Á< Ši.Ųt §ifŲ2‘ÁÖøJÃztBä”<Ē}fÖ<ė|<”<đ}f’‚î<<‚}.ū<ė|f”<ė|ē”<Š}fDŽ í‚“< í<C<ē Čs< <ƒK Ÿ{ŦCXž‚˛z5 íÖCfōäˆ#`xfŪ žs*â < žs<C<  ‚ sēCfí‚אšv¸ ‚×> ēLguČLzž ōxō—ō K)fƒuēŒ~‚Î fw’æ#jųh’į9?+?”sXņ ČpŦttōãō Kf“tē…~‚Õ ēZ0ƒ"Ų+’vW=Į1ŧ:hhhšrč pŦ ōî ō<ža<ÄfĻųČŒ畉°82l#CŨ_J‡ž fĒcÛf’:>­eg”L,>=-=c ō{X¤iž Ü–ž[9i f% Ų{ģÆ. š|‚ŠČčûbÜ}.āt }‚¤tˆž:>d5ųcä ŌfĐh °4 Į}ÖšČ –~<C<=fC<= Cf=äCfÔ<ÂfÁ}äŋäĮ}  tŦäÉ} •˛‚Ô}Já¯Č Ž~ō< Â<ÔlžŦ<Ôl<C<=<CfŠ KKfŧ0™g;Ö=I=æX“}<ī|X‘<ķ}fēđ}<<“~‚ î~<’<„ yäb< ûĢzžÕ<Ģz<C<œ‚u{.øō ƒ}<ũ<!‰}< zf“ō hžf h.X ’Cfō™g;Ö=  f´<Ėl<´.ĒkJ ÖfŅlf ¯<ŅlĶÛy.Ĩ.ŦÁ ĒÉ<ˇ|Ö'í~<-//’.3uČڐ*§~.ŲŦ§~fŲ<¨~ŦØŦ¨~fØ<¨~Ŧœht‚+ß!-.=<ļ{fĘ.¯­uÃĮ >Vž..XÉxfˇfÉx<Öˇ‚ <Ûw<Ŋ} ĮōCfö~‚Ë‚ ŊJá ē ãÛwäŊ} ĮōCfö~ ËČ ŊJĮ <>Vt../šÉx*ˇ./ é ģz<ÉX”Ŧėzf[Öb2X”uYßgt!.tÖN|ņt…ũČ<ģI/.ļ{(Ęfļ{<Ę%¯× ČytC<=fC<=JCfÜJ, ĖyēC<=fC<=ēCfČ<ģI/.ļ{(Ęfļ{<Ę%¯× ČytC<=fC<=JCfÜJ< ĖyēC<=fC<=ēCfˇ<Áŋx<ÁfŋxäÁŦžyâ,ŋx.Ážˇ<ÁÖŋx ÁŦžyâ0/­<Ū~Ö­KģŦ‘I/.ļ{(Ęfļ{<Ę%¯× ČytC<=fC<=JCfÜJbēā~ČĶ4 ĖyēC<=fC<=ēCfģ ŧ fÄu<Ö= ģ XÅuJ ģ <ŠuXÎ$Į{3šēĮ{<šŦ ÕyŦ¯< ‡}<ų<Â{žēÂ{< Ž~ō< Â<žnē Âfžn< Ž~ō< Â<ürŦh‚ đy<Cf΂Õuō ŨyÖCf=ōCfå  g; •yÖėf į oē ûŦސ Ō~<Ž  ũxC<Āf ũx<C<=JCfĸJ ›yōCfĸ ›ytC<=fC<=ēCfû:fF<Ų9?7XI"1. ũxŦC<Āf ũx<C<=tCf’X€<‘ Ēy‚Cf="C<=fC<=äCf¤ C<=fC<“ h:Ö>}X_"!_< 㠞Šuēö fŠu<” ė~<”< ⠞Šuēö fŠu<Žž Ō~<Ž  ũxC<Āf ũx<C<=JCf=JCf=JCf=JCf=JCf¨‚ •y<Cf=Cf= Cf= Cf= Cf¨  •yŦC<=fC<=ēCf=ēCf=ēCf=ēCf=ēCf=>C<=fC<‰ h:Ö?e*žU"+U< í žŠuēö fŠu<А ö~<Š< ė žŠuēö fŠu<Žž Ō~<Ž  ũxC<Āf ũx<C<=JCf=JCf=JCf=JCf=JCfž‚ Ÿy Cf=Cf= Cf= Cf= Cfž  ŸyŦC<=fC<=ēCf=ēCf=ēCf=ēCf=ēCf=>C<=fC<ß< čē#—C é~f#—fץ~#ž"“}f#ífÛ}f"¸fČŦ"¸<ČÖ"¸ŦČf"¸<‘} °fĐ~f °Čˆfãȝ}<ã.ãy. Äēŧ~< ø.ˆkJ øŦÔlfŦ<Ôl<C<ō~‚#0 ŦÖĖ~f ÍōCfō›}<$¤f% ‰zž ftŦ Č) Û7Û <šX ˜{#—X é~f#—,Ą~ä#ߐĄ~.#ž$Û}ä#Ĩf"“}ČȞ"¸<Č("¸Ȟ"¸Čf"¸f‘}ē °fĐ~f¸ČČ|  °fˆ< ø}fˆf$ˇ}.Éf!Ū<ä|<!œČä|Ŧ ëX#—( é~f#—‚ é~f#—ž‘Ą~ä#ßfĄ~.#žōÛ}ä#ĨfÛ}t"¸<Ȑ"¸ČČ"¸Ȟ"¸f‘}ē °fĐ~f °.ˆ$ˇ}Éf!Ū<ä|<!œČä|Ŧæfšyfæ -sÚy üē„~fü<ė|<”„~‚äÂžÚyžĻfÚy.ü‚„~fü<ė|<”„~‚äÂž~< ÚytĻfÚy.ü‚„~fü<ė|<”„~‚äÃžŲyž§fŲy.ü‚„~fü<ė|<”„~‚äÄžfŧ~ Äfŧ~  Ž{‚Ōf Ž{<C<=ēCÅē‹|- íäC"Vē#õē­zē Ŧf#§ ĸzž# Ŧ Ŧä#Ô~f ŦtĄ< ß}fĄ<‹|' íäC"Vē#õēĸzē ˇf#§ ĸzž# fuf# ō Ŧä#Ô~f Ŧt°<ņ{<<gŦg<< ŗzäŋt fwf fwX֐•x ä Ž{.C=.CĖ.#ĨxX ŦČë8›}G#Î|/ ŦŦ†04¤k ‰zJ ‚tä ‚+ē ōšä ˜{#—X é~f#—.Ą~ä#ß<Ą~.#ž,Û}ä#Ĩf"“}ČȞ"¸<Č("¸Ȟ"¸Čf"¸f‘}ē °fĐ~f¸ČČ|f °fˆ< ø}fˆf$ˇ}Öf!•<ë|<!•të|Ŧ äX#—, é~f#—J é~f#—ž‘Ą~ä#ßfĄ~.#ž#Û}ä#ĨfÛ}t"¸<Ȑ"¸ČČ"¸Čō"¸f‘}f °fĐ~f °.ˆ< ø}fˆf$ˇ}<f!•<ë|<!•të|ŦßfĄyfß -sÚy<üē„~fü<ė|<”„~‚äÂžÚyžĻfÚy.ü‚„~fü<ė|<”„~‚äÂž~< ÚytĻfÚy.ü‚„~fü<ė|<”„~‚äÃžŲyž§fŲy.ü‚„~fü<ė|<”„~‚äÄžfŧ~ Äfŧ~  Ž{‚Ōf Ž{<C<=ēCÅē‹|- íäC"Vē#õē Ų{ē#§ ĸzž# Ŧ ŦJ#Ô~f ŦtĄ< ß}fĄ<‹|' íäC"Vē#õē­zē Ŧf#§ ĸzž# Ŧ Ŧä#Ô~f Ŧt°<ņ{<<gČŦg<< ûyä t´p ä Ž{.C=.CĖ.#ĨxX ŦČë8›}G#Î|/ ŦŦ†04Š<=­Kžģ‘I/.ļ{+Ęfļ{<Ę&¯× ČytC<=fC<=JCfÜJÄ~ēZ~Ķ8 ĖyÖC<=fC<= CfÅ@8@ ¸~ēÍJ€%€f€<€<„Öü<„<Ëf‘  .sÖ  X¤ä Ü<¤J Ü<‚~fC<ģf‚~<C<=JCfĄJūŦĪ|ž´‚<˙{X ÖyēäÍ‚ĻŦ)Õ}<Ģ<)Õ}. üJ)û|Ŧ˛Ŧa‡)Î}<˛.)Î}< tüJ)û|Ŧŋ<Ũ}Ŧ Į‚CXö~J Į‚CfŖ Ö=ū{‚Ÿz+ ŊtŸēg;0H‚ V.Cf¤ ēū{ē˜zX ƒžCX=tCX)Ū~ wē Jw< X)kt Ü<C‚Žō’ î}ž˜Ö §XCX)Ū~ wē Jw< X)kt­X’ …~ž,ÖÍ)Đ}ž°X’æ}žwž Jw< X)hē°XŠ ƒK Ÿ{fCfž‚ŧ0Å ž ¸~‚Íēj:ī.u–~J:.ąÖÍtĪ|tą.Ī|.ĩ f=ū{‚ ÖyX‚ķ‚1‘HKŸJo.ļ~< ŊJŸē0I=ƒÖč{tšCū{ ˜zfÅ † ¸~‚͐hhíū{.˜zJč‚˜z. Å ž ¸~‚Íēj:ī.u–~J:.ąÖÍtĪ|tą.Ī|.ĩ f=ū{‚ ÖyX‚ķ‚1‘HKŸJo.ļ~< ŊJŸē0I=ƒÖč{tšCū{ ˜zfÅ ž ¸~‚Íēj:ī.u–~J:.ąÖÍtĪ|tą.Ī|.ĩ f=ū{‚ ÖyX‚ķ‚1‘HKŸJo.ļ~< ŊJŸē0I=ƒÖč{tšCū{ ˜zfŠ KKfŧ0õ< ú~†f ˇČCf=‚Cf=‚Cf=‚Cf=‚Cf=‚Cf $¤‚$â}X'‚ē I  ‚ Šuäö fŠu<ôzŦ Œ<ôz< ‚äŠuēö fŠu<ö žŠu<ö Šužö fŠu<ôzē ˇ‚É< ˇ<C<=ōCf=fCf=Cf=.Cf= Cf=Cf ¤â}X ˇÖC<=fC<=ēCf=ēCf=ēCf=ēCf=ēCf =ē Cf=8C<=fC<=@C<=fC<õōã¤äÜf¤JÜŦã¤ōÜf¤JÜŦŦ[ä%f[J%ŦŦ[ō%f[J%ŦÅ ž ¸~‚Íēj:ī.u–~J:.ąÖÍtĪ|tą.Ī|.ĩ f=ū{‚ ÖyX‚ķ‚1‘HKŸJo.ļ~< ŊJŸē0I=ƒÖč{tšCū{ ˜zfōg;×ĸfņēē‚} ū<‚} ū<Ũ}˜ēčz<˜Ŧ,€x<€f,€x‚‚uW€‚톧œ{fäf,€x €tt&Î ų|X&‡f ų| #—@ é~f#—<0Ą~#ž3"“}J#ífÛ}t"¸fČ("¸<Č<"¸t‘}ē¸ōČ|  °<Đ~f °fˆ< ø}fˆf¯}.Ņ<¯}<ū mÖ<m<‹|t íäC"Vē#õēĸzē#Ūfĸzž# fuf# ō ŦX&ŋž;=#•z+ ŦČ&ž%Č}Ŧ& īĸX ŪyJĸJ âyJž< äy< ęt œmē ät  mē āt ¤mērž ęJ ˜mŦ÷t Ŧ{fÔt Ŧ{Ôä Ŧ{nää  ÅÖ Ŧmēãt ņ < °mēßt ņ < ´mēuaŦ īĸX âyfž. ây.ž< äy< ¯"¯<ŅnX¯<ŅnX¯< ĸmē ¯ž¯.¯nX ŅÖ ĨmJ"fčō ŅÖ›rJ Ŧ{čJ ŅÖ›r‚ ’{‚ ŅÖ›r‚ –{\ä Œt¯.›rX ļ|<¯.¯nX ŅÖ ÁmJ X°‚˙ f›rJ”|X Ņ ¯nž Ņ  ĸmž  īĸX ŪyJĸ‚ âyJž< äy<-ņ<Ķ.-­aŦĶ<-­aŦĶ<-­aŦĶ< ŧ`Ö.äv-ĖēĶ.ĩet-ø{<Ķ.ĩet-ø{<Ķ. Û`ōBÔČ Ŧ{<Ô. Ŧ{<Ôō ’{fî. –{f%ú ‡Nƒ%.V<%*..Vf%*. Üf%¤~f Õ.‡<­. ŋX%B‚ßČ%ŽČfmX< 8ž t<˜&=;=& Š\J˙#< \Č˙#<J­yj8 æ[.CfĒ$ē;Ö°ZKÖ›‡™ˆzžŠxž ‚vž ‚už ‚sž‚rž‚qž‚pž‚ož‚nž‚mž‚kž‚iž‚gž Ém‚āJą Ü[Cfü‚āJ  mJāJ  mJāJL€ á[ŦCf˜&=$ Š\t˙#< \ē˙#<J‘Oj8 æ[.CfĒ$ē;Ö°ZK›‡™ˆzžŠxž ‚vž ‚už ‚sž‚rž‚qž‚pž‚ož‚nž‚mž‚kž‚iž‚gž Ém‚āJą Ü[Cfü‚āJ  mJāJ  mJāJL€ á[ŦCfø>Ŧ,€x<€f,€x‚‚uW€‚톧œ{fäf,€x €ttã Z ĮäCXö~‚ŧÅ@ ¸~ ĖJ ´~<Í.h:>æË<ĩ~<Ëfĩ~<Ë</  <t<  <sž  J‚~Öū<‚~<C<Ą‚ū Ī|ž´‚<˙{X Öyēäķ‚)Õ}<Ģ<)Õ}. ž)w˛Ŧa)Ķ}f˛.)Î}<˛.)Î}< f)wŋ<Ũ}Ŧ ĮtCXŖ <=ū{JŸzČ ŊtŸēg-/=…žū{‚˜zX)¤ž0)SŦ Ü‚Cf ’äüf’ū}ž3 Ŋt˜ē)Č}X°X ¯ēC‚)Ū~X0)SŦ°ēę&=¯91.qž’ ¸]<‚~Öū<‚~<C<Ėēâ‚Ču< ĮēCXö~Ŧ’&X§d.Ųē"š`Ö īyŦ•X –{fCfˆ%Ŧ˛Ģ`Öւם`ē {%Cfę&=¯91.qž’ ¸] ‚~äū<‚~<C<Ėēâ‚Ču<Ö.Ēw< Į‚CXö~Ŧš ōŲ<§d.ؐ­š`Ö īy‚•X –{fCfˆ%Ŧ4Ģ`Öւם`ē {%Cfã Z ĮäCfö~‚0ë >Ÿul<l<<ügäĐuf° <ĩyŦĖ{´J›|Ŧä’-;>)ē ō˙J)ø|ē÷Ŧ´ <Ėv<´ <t: đtōw)_< ē)hXĶXf ŊJ… ē„)Ųt0)SŦ Å@b@ ¸~ēĐJũ~$ƒfũ~fƒ<‚Ë<ĩ~<Ëf´ž Ųf§< ؐsž´f Ųf§< Ųž§< Ų<‚~fū<‚~<C<Ą‚ū Ī|ō´‚<˙{X ÖyŦäĐ‚Ŗä)Õ}<Ģ<)Õ}. ž˙J)ø|ē˛Ŧa)Ķ}f˛.)Î}<˛.)Î}< f˙J)ø|ēŋ<Ũ}Ŧ ĮtCfŖ <=ū{JŸzČ ŊtĄē:h:/=…tū{‚˜zX)¤ž0)SŦ Ü‚CfâäŦf’ū}ž3 Ŋt˜ē)Č}X°X ¯ēC)Ū~X0)SŦ°ēĨ<ƒwf– Ŧ_8Ö>ū‚‚Hō*X?9id äq‚œ< äq<C<Øō åq CfØōÚ?9iâ āq‚ < āq<C<Üōw ” æq‚CfÜōwōĨ<ƒwf– Ŧ_8Ö>ū‚‚Hō*X?9id äq‚œ< äq<C<Øō X ÜqäCfØōÚ?9iâ āq‚ < āq<C<Üō]rä” æq‚CfÜōwōĨ<ƒwf– Ŧ_8Ö>ū‚‚Hō*X?9id äq‚œ< äq<C<Øō åq CfØōÚ?9iâ āq‚ < āq<C<Üōw ” æq‚CfÜōwōĨ<ƒwf– Ŧ_8Ö>ū‚‚Hō*X?9id äq‚œ< äq<C<Øō X ÜqäCfØōÚ?9iâ āq‚ < āq<C<Üō]rä” æq‚CfÜōwō)Ã_ZNK7testing8internal24HasNewFatalFailureHelper21has_new_fatal_failureEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE2atEjPrintAsStringLiteralTotesting_internalRawType_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmiEi_ZNSt11char_traitsIcE4copyEPcPKcj_ZNSt6vectorIPcSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6__S_oct_ZN7testing8TestCase11ClearResultEv_TypestartPrintStringTo__copy_move_backwardread_ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_E_ZN7testing8internal24HasNewFatalFailureHelperD0Ev_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKw_ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolder7pointerEv_ZNK7testing8internal13FloatingPointIfE8sign_bitEv_ZN7testing8TestCase16RunSetUpTestCaseEvstrtof_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKw__alloc_traits >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_S_keyEPKSt13_Rb_tree_nodeIS1_E_ZN7testing32ScopedFakeTestPartResultReporter4InitEvstrtoloperator<< _ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE10_S_on_swapERS4_S6__ZN7testing8internal13DeathTestImpl12set_write_fdEi_ZN7testing8TestInfoaSERKS0___haystackIsNotSubstringallocatorgetwcconstruct >ImplicitCast__ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE2atEjgtest_arline_number__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE2atEj_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEptEvCheckedDowncastToActualType >::ValueHolder, testing::internal::ThreadLocalValueHolderBase>socklen_t_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE7reserveEj_Rb_tree_node_base__niter_base_ZNKSt6vectorIiSaIiEE8capacityEvHandleExceptionsInMethodIfSupported_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEi_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5frontEv__copy_move_backward_a_ZN7testing8internal27PrettyUnitTestResultPrinter11OnTestStartERKNS_8TestInfoE_ZN7testing18TestEventListeners22SetDefaultXmlGeneratorEPNS_17TestEventListenerEHandleSehExceptionsInMethodIfSupportedMSG_EOR_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_rightmostEv_ZN7testing8internal12UnitTestImpl21set_current_test_infoEPNS_8TestInfoE_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmIEiswprintftype__ZNKSs5rfindERKSsj__uninit_copy<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*>si_codebasic_stringstreamsockfd__ZNKSt3setISsSt4lessISsESaISsEE11upper_boundERKSs_ZNKSt9_IdentityISsEclERKSsmbsinit_ZNKSt6vectorIiSaIiEE8max_sizeEv~ExecDeathTest_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EEixEj__numeric_traits_integerfrac_digits_ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestEoperator<< last_errorfailbitUniversalPrint >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt17_Rb_tree_iteratorISsEuninitialized_copybreak_on_failure__ZNK7testing8internal10scoped_ptrIKSsEdeEv_ZNSbIwSt11char_traitsIwESaIwEEpLEPKwTestEventListenerswap*>expected_expressiondata_internal_run_death_test__rhsactual_ZNKSt17_Rb_tree_iteratorIPKcEdeEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4rendEv_ZNK7testing8internal8FilePath21FileOrDirectoryExistsEv11__mbstate_tIsPathSeparator_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE13_M_deallocateEPS2_j_ZN7testing8internal17StreamingListener12SocketWriterD0Ev_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE15_M_erase_at_endEPS1_si_errno_ZN7testing8internal12UnitTestImpl21set_current_test_caseEPNS_8TestCaseE_ZNK7testing8internal10scoped_ptrIKSsE3getEv_ZN7testing8internal13DeathTestImpl11set_spawnedEbpair_ZN7testing19TestPartResultArrayaSERKS0_impl__normal_iterator, std::allocator > >vector >_ZNKSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE13get_allocatorEvcopy_backward*, std::basic_string*>_ZNSt6vectorISsSaISsEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EES5_should_run__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_insert_equalERKS1_FloatingPointLE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_S_keyEPKSt13_Rb_tree_nodeISsETypeIdfor_each<__gnu_cxx::__normal_iterator >, void (*)(testing::Environment*)>_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_erase_auxESt23_Rb_tree_const_iteratorIS1_ES9_StrError_Destroy_ZNKSbIwSt11char_traitsIwESaIwEE13get_allocatorEv_M_insert_lower_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8pop_backEv~StreamingListeneroperator- >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSsTEST_ENCOUNTERED_RETURN_STATEMENT_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEE4baseEv_ZN7testing4Test14RecordPropertyERKSsiiterator_traits<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE10_S_on_swapERS4_S6__ZNSt11char_traitsIwE11eq_int_typeERKjS2___cxa_begin_catchsrc_texterror_message_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5beginEvoperator delete_ZNKSt12_Vector_baseIPcSaIS0_EE13get_allocatorEv_ZNSt6vectorIPcSaIS0_EE4dataEv_Allocator_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE2atEjoriginal_reporter__ZN9__gnu_cxx13new_allocatorISsE10deallocateEPSsj_ZN7testing8internal23kTestTypeIdInGoogleTestE_ZN9__gnu_cxx13new_allocatorIPKcE7destroyEPS2_operator<< , std::allocator >file__ZN7testing8TestCaseaSERKS0_AssertHeld_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4dataEv_ZNK9__gnu_cxx17__normal_iteratorIPcSsE4baseEv_ZN7testing8internal17TestEventRepeaterD2Ev_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_S_leftEPKSt18_Rb_tree_node_basereverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >TestPartResultTypeToString_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE8max_sizeERKS4__ZN7testing8UnitTest14AddEnvironmentEPNS_11EnvironmentE_ZNSs7reserveEj_ZNSt12_Vector_baseIPcSaIS0_EE17_M_create_storageEj_Iter_equals_val, std::allocator > >InitGoogleTestRETURNED_ZNKSt12_Vector_baseIiSaIiEE13get_allocatorEvregistered_testsoperator booluser_msg_string_ZN7testing8internal13ExecDeathTestD0EvAbstractSocketWriter__ino_toriginal_working_dir_iterator_traits, std::allocator >*>_ZN7testing8internal12UnitTestImpl31GetGlobalTestPartResultReporterEvregex_ZNK7testing8internal12UnitTestImpl21successful_test_countEv_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEplEinormalized_seed_ZN7testing14TestPartResult14ExtractSummaryEPKcStackLowerThanAddress_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmiEitest_propertiesmove_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7addressERS3__CharToperator<< _ZN7testing14ExitedWithCodeC2Eiunsigned int_ZN7testing8internal12UnitTestImpl34InitDeathTestSubprocessControlInfoEvignoring_casePrintTowcstold_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE17_M_create_storageEj_ZNSt10_Iter_baseIN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS4_SaIS4_EEEELb0EE7_S_baseES9__ZN9__gnu_cxx14__alloc_traitsISaIiEE17_S_select_on_copyERKS1_copy_backward_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwj_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjj_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE8max_sizeERKS4__ZN9__gnu_cxx17__normal_iteratorIPKcSsEmIEiClearTestResult_ZNKSs11_M_disjunctEPKc_vptr.UnitTestdestinternal_run_death_test_flag_size_t_ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv_M_destroy_noderegoff_tparameterlower_bound_ZNSt6vectorIPcSaIS0_EE8pop_backEv_ZNK7testing8internal12UnitTestImpl11random_seedEv_ZNK7testing8internal13DeathTestImpl6statusEvlast_sep_ZN7testing8internal16UniversalPrinterISsE5PrintERKSsPSopthread_mutex_tad_hoc_test_result_bool_ZN7testing8internal15CodePointToUtf8Ejunicode_code_pointcomma__distanceFloatingPoint_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjFormatForComparisonFailureMessage_ZNK7testing14TestPartResult14fatally_failedEvString_Category~TestFactoryBasekUniversalFilter__builtin_fwrite_ZN7testing8internal13GetTestTypeIdEv_ZNSs4_Rep7_M_grabERKSaIcES2__M_copyreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >argvs_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___cxa_throw_ZN9__gnu_cxx13new_allocatorIwE8allocateEjPKv_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_summary_rdstatekStackTraceDepthFlagfreadTestPartResultArraythread_count__copy_move_b*, std::basic_string*>operator!= >_S_blackos_stack_trace_getter_ZNSo9_M_insertIPKvEERSoT___cxa_guard_abort_ZN7testing8internal12UnitTestImpl12ShuffleTestsEv_sigfaultGTEST_SHARD_INDEXMSG_CONFIRM__is_normal_iterator_ZNSt6vectorIiSaIiEEixEjTearDownTestCaseFunc__miter_basekThresholdint_n_cs_precedesbinary_function, std::allocator >, std::basic_string, std::allocator >, bool>_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc_M_key_compareallocator~ForkingDeathTest_ZNKSt6vectorISsSaISsEE6rbeginEvatexitreverse_iterator<__gnu_cxx::__normal_iterator > > >kReservedTestSuiteAttributesDeathTestImpl_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS1_E_ZN7testing7MessageC2Evfwrite_ZNKSs13find_first_ofEcj_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmmEisi_addr_lsb_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_range_checkEj_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmIEi_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_equal_ESt23_Rb_tree_const_iteratorIS1_ERKS1__ZNSt6vectorIiSaIiEE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmmEv_Valcurrent_test_info_operator<< GTEST_ERRORforwarding_enabledsiginfo_t_ZN7testing8internal29ParameterizedTestCaseInfoBaseaSERKS1_kColorEncodedHelpMessage_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_jjstringstream_Key_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNSbIwSt11char_traitsIwESaIwEE4_Rep7_M_grabERKS1_S5_~SingleFailureChecker_ZNK7testing8UnitTest22test_case_to_run_countEvpop_backrend_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjsuccessful_test_count_ZNKSs5rfindEPKcjjname_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEpLEioutput_format_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderaSERKS5_rebind~ScopedPrematureExitFileoperator<< _ZN7testing8internal2RE9FullMatchEPKcRKS1_MSG_RSTOnTestPartResult_ZN7testing4Test15HasFatalFailureEv__cxa_atexit_ZN7testing8internal17PrintWideStringToERKSbIwSt11char_traitsIwESaIwEEPSocur_addr_ZN7testing8internal12UnitTestImpl27parameterized_test_registryEv_ZNKSs5beginEv_ZNK7testing8internal13DeathTestImpl7outcomeEv__cxa_guard_acquirefind_first_ofn_cs_precedes__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_output_ZN7testing8internal27PrettyUnitTestResultPrinterD2EvGetTestPartResult_ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_jjoutput_GetPrefixUntilComma_ZN7testing8internal24XmlUnitTestResultPrinter24IsNormalizableWhitespaceEcLock_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6rbeginEvCOLOR_GREENoperator<< _ZN7testing8internal16ForkingDeathTestC2EPKcPKNS0_2REEline_num_S_right_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE8allocateEjPKvMakeFrom_S_empty_rep_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS__Znwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEpLEi__is_null_pointermethod_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc_ZNK9__gnu_cxx13new_allocatorIPcE7addressERKS1__ZNKSs7compareEjjRKSsset_current_test_case_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE13_M_deallocateEPS2_j_ZN7testing7MessagelsEPw__iterator_category__is_normal_iterator_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2_iterator_traitsallocatorUniversalPrintCharArray_ZN9__gnu_cxx13new_allocatorIPcE9constructEPS1_RKS1___alloc_traits >operator!= >__destroy__elems_beforevalue_compare_ZNSt11char_traitsIwE2eqERKwS2__ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE8capacityEv9siginfo_t~TestEventRepeater_ZN7testing10TestResultaSERKS0__ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4dataEv_ZNK7testing8TestCase17test_to_run_countEvseekdirGetCurrentExecutableNametest_case_name__Destroy*, std::basic_string >operator- >_vptr.UnitTestImpl_ZN9__gnu_cxx17__normal_iteratorIPKcSsEpLEi_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEvexpression_textOnTestCaseEndbytes_readtm_hour_ZNSt6vectorISsSaISsEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EESignAndMagnitudeToBiasedoperator<< __trip_countreportable_test_count_M_insert_ZNSt3setISsSt4lessISsESaISsEE4findERKSs_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_jw_ZNK7testing8internal29ParameterizedTestCaseInfoBase17GetTestCaseTypeIdEvCaptureStdout_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3___addressof >_ZNKSt3setISsSt4lessISsESaISsEE4findERKSsunknown fileExecDeathTestArgs_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE8max_sizeEv__gthread_active_ptrkExponentBitCountstatus_ok_ZNK7testing8internal13FloatingPointIdE13exponent_bitsEv_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwj_ZNKSt6vectorIPcSaIS0_EE5frontEv_S_out_ZN7testing8internal24XmlUnitTestResultPrinter18EscapeXmlAttributeERKSs_Destroystrrchr_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE9constructEPS3_RKS3__ZN7testing8internal12UnitTestImpl11RunAllTestsEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4swapERS4__ZN7testing8internal9DeathTest4WaitEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmmEi_HasBase_ZN7testing18TestEventListenersD2Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE9push_backERKS2__vptr.AbstractSocketWriter_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmmEv_ZNK7testing8internal8FilePath5c_strEvdo_widen_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4rendEv_ZN7testing8internal12UnitTestImpl31SetGlobalTestPartResultReporterEPNS_31TestPartResultReporterInterfaceE_ZNK7testing19TestPartResultArray4sizeEv_ZNK7testing8TestCase6PassedEvPopGTestTracesign_bitrebind_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE13_M_deallocateEPS2_jDeathTest_ZNKSt6vectorISsSaISsEE4rendEv_ZNK7testing15AssertionResult7messageEv_ZNK7testing8internal17TestEventRepeater18forwarding_enabledEva_value_paramoperator!__iterator_categoryfputcoperator&operator*operator+iterator_traitsoperator-_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE11_M_allocateEjfputs_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_operator<operator=operator>FormatForComparison_ZNSs9_M_mutateEjjj_ZN7testing17TestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZNKSt3setISsSt4lessISsESaISsEE5beginEv_ZN7testing8internal6Random6ReseedEj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE17_M_insert_unique_ESt23_Rb_tree_const_iteratorIS1_ERKS1_rebindSOCK_RAW_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal7PrintToEhPSo_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcEis_selectedsystemwcsrtombsTestProperty_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EEixEj__valFailFromInternalError_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS1_ESA_RKS1__timer_ZN7testing10TestResult17AddTestPartResultERKNS_14TestPartResultEquot_ZNSt6vectorISsSaISsEE6rbeginEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE6rbeginEvthrow_on_failure_operator|operator~atof_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmIEiatoiatol_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6rbeginEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE3endEvPrintToStringconstruct_ZN7testing4Test13SetUpTestCaseEv_ZN7testing8internal17TestEventRepeateraSERKS1__ZNSt3setISsSt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsEgoodbitwcstombswrite_Rb_tree_iterator_ZN7testing8internal26ThreadLocalValueHolderBaseaSERKS1__Znaj_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEpLEi__k2_M_eraseCreateDirectoriesRecursively_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EES9_exit_status_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EEfull_pattern_S_hexowner__sigpoll_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_M_endEvint_p_sep_by_spacekMaxRangeGetStringFunctor_ZN7testing8internal12AssertHelper16AssertHelperDataaSERKS2__Rb_tree_const_iterator, std::allocator > >_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE15_M_erase_at_endEPS2_IsAbsolutePathfailed_test_case_count_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5frontEv_ZNSs4_Rep10_M_disposeERKSaIcEfputwc_Iterator_Iter_base_M_clone_nodeParseStringFlagFilterMatchesTestfputwsMakeConnection~basic_stringCmpHelperSTRCASEEQiterator_traits<__gnu_cxx::__normal_iterator > > >index_ZNK7testing8TestInfo6resultEv_ZNKSs12find_last_ofERKSsj_ZN7testing8UnitTestC2Ev_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorIiSaIiEEaSERKS1_fcntl_ZNK7testing8internal17TestPropertyKeyIsclERKNS_12TestPropertyE~DeathTestImpl_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderaSERKS7__ZN7testing8internal13FloatingPointIfE8InfinityEv_S_ios_openmode_end_ZN7testing8TestCaseD2EvGTestFlagSaverGetOutputFormat_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcj_ZN7testing8internal18SetInjectableArgvsEPKSt6vectorISsSaISsEErandom_ZN9__gnu_cxx14__alloc_traitsISaISsEE8max_sizeERKS1__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11upper_boundERKSs_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE2atEjstrtold_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEdeEvoperator<< suffix_len_ZNSt6vectorIPcSaIS0_EE5frontEvportset_up_tc__maskTestPassed_M_destroyMSG_MOREnew_holder_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE10_S_on_swapERS3_S5__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE2atEj_M_fill_assign_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE4findERKS1_operator<< operator<< _ZNKSs7_M_iendEv_ZN7testing8internal11ScopedTraceD2Evresume_pos_ZNK7testing8internal12UnitTestImpl18ad_hoc_test_resultEvtm_yday_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_fill_assignEjRKS2__ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_putwcharftell__miter_base<__gnu_cxx::__normal_iterator > >SOCK_STREAM_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_icomparestream_result_to__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE7reserveEj_ZN7testing8internal12AssertHelperaSERKS1_ExecDeathTestSpawnChild__blksize_t_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjj_M_upper_bound_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEixEiPrintCharAndCodeTo_ZN7testing14TestPartResultD2EvAddEnvironment_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_maximumEPKSt18_Rb_tree_node_basepthread_mutex_unlock_ZNKSt6vectorIPcSaIS0_EE3endEvint_curr_symbolset_write_fd~GTestLog_ZN7testing8UnitTest14PushGTestTraceERKNS_8internal9TraceInfoEnum_runnable_tests_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEixEi_ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5beginEv_ZN7testing8internal12AssertHelperD2Ev_ZNK9__gnu_cxx13new_allocatorIcE7addressERKcpthread_key_create_TrivialValueTypesfind_if<__gnu_cxx::__normal_iterator >, testing::internal::TestCaseNameIs>translate_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_wcstoul__is_normal_iteratorsa_data_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_index___mode_t_ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT___cxa_bad_typeid_DestroyFLAGS_gtest_repeat__n1pair, std::_Rb_tree_const_iterator >_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_read_fd_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEpLEi_Destroysrc/gtest-all.cc~basic_stringbufFormatFileLocation_ZNSt6vectorIPcSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EE_M_insert_equalconst_reverse_iteratorwchar_t_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE7destroyERS4_PS3__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6rbeginEv_ZNK7testing7Message9GetStringEv_markers__assignable__copy_move_backwardOnEnvironmentsSetUpStart_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE17_S_select_on_copyERKS5___alloc_traits >_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEaSERKS3_iostatea_write_fd__pad1__pad2__pad3__copy_move_a__pad5a_filefieldssi_overrun_ZNK7testing8internal8FilePath28CreateDirectoriesRecursivelyEvRecordProperty_ZNK7testing8internal13DeathTestImpl7read_fdEv_M_get_Tp_allocatorgetwchar__destroy*>_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_rootEv_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmIEi_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4dataEv_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4rendEv_ZNKSt17_Rb_tree_iteratorIPKcEneERKS2_current_test_case_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE2atEj_ZN9__gnu_cxx3divExxkSizestdout_is_ttycopy_backward_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEplEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEE4baseEv_ZN7testing8internal24XmlUnitTestResultPrinter17OutputXmlTestInfoEPSoPKcRKNS_8TestInfoE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE9push_backERKS2__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZNK7testing8UnitTest18ad_hoc_test_resultEvtotal_test_case_count_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEplEioperator<< __copy_move_backward_aoperator<< _ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE10deallocateEPS2_jcur_pattern_ZN7testing4TestaSERKS0__ZNSt6vectorIPN7testing8TestInfoESaIS2_EE2atEj_ZN7testing15AssertionResult13AppendMessageERKNS_7MessageEIsSubstringImpl >__copy_move_a2_ZN7testing32ScopedFakeTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultEMSG_DONTWAITiterator_traits_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNSt13_Rb_tree_nodeISsE9_M_valptrEvkElidedFramesMarkerset_read_fdParseInternalRunDeathTestFlagstatus__ZN7testing8internal19TypedTestCasePState25VerifyRegisteredTestNamesEPKciS3__ZNSt6vectorIPcSaIS0_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEjRKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_erase_auxESt23_Rb_tree_const_iteratorISsES7_GetMutableTestCase*DeathTest:*DeathTest/*_ZNKSs16find_last_not_ofEPKcj__osRelease_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEmiEi_IO_write_base__distance_ZNSt3setISsSt4lessISsESaISsEE11upper_boundERKSs_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEptEvUniversalPrinter, std::allocator > >GoogleTestFailureException_ZN7testing8TestCase14UnshuffleTestsEvreason_ZN7testing8internal23GetLastErrnoDescriptionEv__miter_base__builtin_memcmp_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6rbeginEvfront_ZN7testing8internal7PrintToEPKwPSowmemsetsetfillkTestcase_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EEixEj__copy_move_backward_a2FormatCompilerIndependentFileLocationpush_backtotal_shards_envsubstr_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE6rbeginEv_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE17_S_select_on_copyERKS3__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EEixEjincrement_death_test_count_ZNKSt6vectorIiSaIiEE5beginEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13_Rb_tree_implIS5_Lb0EE13_M_initializeEv_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE10deallocateERS3_PS2_jst_ino_ZNKSt6vectorIiSaIiEE3endEvxml_element_S_terminal_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7addressERS4_OsStackTraceGetter_Compare_ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestEstrtouliterator_traits_ZNKSs4findEPKcjmbstate_t_ZN7testing17TestEventListener9OnTestEndERKNS_8TestInfoEPrintToString_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE8allocateERS4_jlast_death_test_message_~_Rb_treeStrCaseCmp_ZN7testing8internal35DefaultGlobalTestPartResultReporterC2EPNS0_12UnitTestImplETHREWPrintTestNameis_valid__ZN7testing8internal35DefaultGlobalTestPartResultReporterD0EvMSG_TRUNC_ZN7testing8internal13DeathTestImpl5AbortENS0_9DeathTest11AbortReasonEDefaultPrintTodelimiterIsDigit_ZNSt11char_traitsIcE7not_eofERKi__it__destroy_ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5__ZNKSs12find_last_ofEPKcjj__u_quad_t_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEiputwcTestPartResult__normal_iterator > >shuffle__ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEv_Vector_base >_M_is_leaked_ZN7testing8internal17StreamingListeneraSERKS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6assignEjRKS2__ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwj_ZN7testing8internal20ShouldRunTestOnShardEiii_ZNK7testing8internal10scoped_ptrISsEptEvPrint_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEioperator-*, std::vector > >__uninit_copyoperator<< reserved_names_SelfStart_ZNK9__gnu_cxx13new_allocatorISsE7addressERKSsThis program contains tests written using Google Test. You can use the following command line flags to control its behavior: Test Selection: @G--gtest_list_tests@D List the names of all tests instead of running them. The name of TEST(Foo, Bar) is "Foo.Bar". @G--gtest_filter=@YPOSTIVE_PATTERNS[@G-@YNEGATIVE_PATTERNS]@D Run only the tests whose name matches one of the positive patterns but none of the negative patterns. '?' matches any single character; '*' matches any substring; ':' separates two patterns. @G--gtest_also_run_disabled_tests@D Run all disabled tests too. Test Execution: @G--gtest_repeat=@Y[COUNT]@D Run the tests repeatedly; use a negative count to repeat forever. @G--gtest_shuffle@D Randomize tests' orders on every iteration. @G--gtest_random_seed=@Y[NUMBER]@D Random number seed to use for shuffling test orders (between 1 and 99999, or 0 to use a seed based on the current time). Test Output: @G--gtest_color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D Enable/disable colored output. The default is @Gauto@D. -@G-gtest_print_time=0@D Don't print the elapsed time of each test. @G--gtest_output=xml@Y[@G:@YDIRECTORY_PATH@G/@Y|@G:@YFILE_PATH]@D Generate an XML report in the given directory or with the given file name. @YFILE_PATH@D defaults to @Gtest_details.xml@D. @G--gtest_stream_result_to=@YHOST@G:@YPORT@D Stream test results to the given server. Assertion Behavior: @G--gtest_death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D Set the default death test style. @G--gtest_break_on_failure@D Turn assertion failures into debugger break-points. @G--gtest_throw_on_failure@D Turn assertion failures into C++ exceptions. @G--gtest_catch_exceptions=0@D Do not report exceptions as test failures. Instead, allow them to crash the program or throw a pop-up (on Windows). Except for @G--gtest_list_tests@D, you can alternatively set the corresponding environment variable of a flag (all letters in upper-case). For example, to disable colored text output, you can either specify @G--gtest_color=no@D or set the @GGTEST_COLOR@D environment variable to @Gno@D. For more information, please read the Google Test documentation at @Ghttp://code.google.com/p/googletest/@D. If you find a bug in Google Test (not one in your own code or tests), please report it to @G@D. BoolFromGTestEnv_ZNSt6vectorIPcSaIS0_EE15_M_erase_at_endEPS0__ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwjInteger__find_if<__gnu_cxx::__normal_iterator >, __gnu_cxx::__ops::_Iter_pred >strcasecmpst_ctim_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6assignEjRKS1__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4dataEvtuple_size >_ZNKSt6vectorIPcSaIS0_EE4backEv_Vector_base >_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE8capacityEv_M_leak_hardprefix_len_ZNKSs13find_first_ofERKSsj_ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5__ZN7testing4Test5SetupEvGTestLogSeverity_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE17_S_select_on_copyERKS3__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag_vptr.TestCase_ZNK7testing8UnitTest21total_test_case_countEv_ZNKSt9_IdentityIPKcEclERKS1__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EES9__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE7reserveEj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEv_ZN9__gnu_cxx17__normal_iteratorIPcSsEppEitoupper_vptr.ThreadLocalValueHolderBase_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_rightmostEv Stack trace: _ZN9__gnu_cxx17__normal_iteratorIPcSsEppEv__normal_iterator, std::allocator > >_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEixEi__datCodePointToUtf8_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_fill_assignEjRKS2_test_namenot_bol_ZNSs3endEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmIEi_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE8max_sizeEv_ZN7testing8internal12UnitTestImplD0EvIsRootDirectorymemcpyFloatingPointLE_ZN7testing8internal6RandomaSERKS1__ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperEz_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_range_checkEj_ZNSbIwSt11char_traitsIwESaIwEE4_Rep15_M_set_sharableEvFlushInfoLog__s1construct_ZNSt3setISsSt4lessISsESaISsEE6insertESt23_Rb_tree_const_iteratorISsERKSsreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseERKSsHasFailurewcsncpy_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE3endEv_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT_back_ZNK7testing10TestResult6PassedEvcopy_ZN7testing8internal12UnitTestImpl21os_stack_trace_getterEv_S_construct_aux15pthread_mutex_tregex_tmbrtowcresultRandom~ParameterizedTestCaseInfoBase_ZNSt3setISsSt4lessISsESaISsEE5eraseERKSs_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7addressERKS3__ZN7testing8internal12UnitTestImpl14RecordPropertyERKNS_12TestPropertyE__numeric_traits_integerfreeaddrinfo_M_limitoperator<< _ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4rendEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt17_Rb_tree_iteratorIS1_ES9__ZNK7testing8internal8FilePath12CreateFolderEv_ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE3getEv_ZNSt6vectorISsSaISsEE3endEvkPathSeparator_ZN7testing12TestPropertyD2Evvfprintfiterator_traits, std::allocator >*>~Mutexisxdigitmatched_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_disposeERKS1__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_maximumEPSt18_Rb_tree_node_basesi_fd_ZNSt6vectorISsSaISsEE4backEv_next_S_basefieldStringType__is_move_iterator_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE3endEv__niter_base_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8___uninitialized_copy_a_S_scientificerase_ZNK7testing8internal8FilePath15IsRootDirectoryEv_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4rendEv_ZN7testing17TestEventListener11OnTestStartERKNS_8TestInfoEallocator, std::allocator > > >_ZNK7testing10TestResult15GetTestPropertyEi_ZN7testing32ScopedFakeTestPartResultReporterD0Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6resizeEjS2_is_wide_stringstack_trace_depth_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEdeEvchar_type_ZN7testing4TestD0Evwctype_t_ZNKSs5rfindEPKcj_ZNSt6vectorISsSaISsEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EEjRKSs_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPiS1_EEjRKi_DestroyReinterpretBitsai_canonnameConfigureStreamingOutputalso_run_disabled_tests_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEv_ZN7testing15AssertionResultlsISsEERS0_RKT__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_erase_auxESt23_Rb_tree_const_iteratorISsESkipPrefix_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEppEi_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_upper_boundEPSt13_Rb_tree_nodeIS1_ESA_RKS1__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEptEv_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE11_M_allocateEjsaved_sigprof_actionoperator<< low_bits_IteratorR_ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEjj_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11__rb_verifyEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt17_Rb_tree_iteratorISsES7_successspawned__ZNSt13_Bit_iteratorppEi__sigchld_clock_ttear_down_tc__Vector_base >_ZNKSt5ctypeIcE13_M_widen_initEv__destroy_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEvmatchFLAGS_gtest_stack_trace_depth_ZNSt13_Bit_iteratorppEv_ZN7testing17TestEventListener20OnTestIterationStartERKNS_8UnitTestEikDeathTestStyleFlag_ZN7testing8internal18FormatFileLocationEPKci_ZN7testing15AssertionResultlsIA2_cEERS0_RKT__ZNKSt6vectorIPcSaIS0_EE4sizeEvcatch_exceptionsg_injected_test_argvs_ZNKSs4findEcj_M_get_insert_equal_pos_ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv_ZN7testing28FLAGS_gtest_stream_result_toEreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE28_M_get_insert_hint_equal_posESt23_Rb_tree_const_iteratorIS1_ERKS1_PostFlagParsingInit_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE7reserveEj_ZNK7testing8internal12UnitTestImpl28internal_run_death_test_flagEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8pop_backEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5beginEv__positionqsortSocketWriter_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEplEi_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEw_ZNKSs4findERKSsj_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5beginEvkAsIs_ZNK7testing8internal12UnitTestImpl6PassedEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_ES9__ZNSt18_Rb_tree_node_base10_S_maximumEPS__ZNK7testing8UnitTest22failed_test_case_countEv_M_end_of_storage_ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE17_M_insert_unique_ESt23_Rb_tree_const_iteratorISsERKSs__exchange_and_add_singleTearDownTestCase__x_copy_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE7destroyERS4_PS3__ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE8allocateERS3_j_Alloc_pad__uninitialized_copy_a*, std::basic_string >_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE9CreateKeyEvgettervwscanfexponent_bitsputcharselected_Setwoperator<< _ZNK7testing8TestCase21reportable_test_countEvdeath_test_count__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5frontEv_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4rendEv_M_headerinternal_run_death_test_SplitStringfind_last_of~TestEventListener__is_normal_iterator<__gnu_cxx::__normal_iterator > > >WideStringToUtf8_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5emptyEvuninitialized_copy<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*>__oldoperator- >_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5frontEvneedle_expr_ZN7testing8internal12UnitTestImpl18ConfigureXmlOutputEvunit_test__uninitialized_move_if_noexcept_a >reverse_iterator<__gnu_cxx::__normal_iterator > > >~set_ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_Rb_tree_const_iteratorfabs_ZN7testing8internal14CapturedStream14ReadEntireFileEP8_IO_FILE_ZNSt3setISsSt4lessISsESaISsEE4swapERS3___vtt_parm_Destroy_M_ibeginactual_expression_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5clearEv_ZNSt6vectorISsSaISsEE6assignEjRKSsGetRandomSeedFromFlag_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7addressERS3__ZN7testing8internal17AppendUserMessageERKSsRKNS_7MessageEoperator!=*, std::vector > >__enable_if__throw_out_of_range_fmt_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4sizeEvGetTestPartResultReporterForCurrentThread__copy_move_backward_a_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmIEiInternalRunDeathTestFlag_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_j_ZNK7testing8UnitTest21reportable_test_countEvF_OWNER_PGRP_ZNSt6vectorISsSaISsEE5eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EES5__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing14IsNotSubstringEPKcS1_S1_S1___off64_t_Iter_base<__gnu_cxx::__normal_iterator > >, false>__copy_move_a_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE12_M_check_lenEjPKc__gnu_cxx__typeEqFailureexpected_to_be_substringGetCapturedStringExitedUnsuccessfully_ZNK7testing8UnitTest20original_working_dirEvDeleteThreadLocalValue_ZN7testing8internal24HasNewFatalFailureHelperC2Evoperator+, std::allocator >_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC2EPNS0_12UnitTestImplEoperator==_vptr.TestFactoryBase_M_current_ZNSs7replaceEjjjc_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5clearEv_Destroy_ZNKSs13find_first_ofEPKcjj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNK7testing8internal13FloatingPointIdE12AlmostEqualsERKS2__Iter_pred__copy_move_aoperator<< _ZNSt6vectorIiSaIiEE4rendEvtest_case_infos__ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEE4baseEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS1_Earray___copy_move_backward_a2_sigsys_ZN9__gnu_cxx13new_allocatorIiE8allocateEjPKvreverse_iterator<__gnu_cxx::__normal_iterator > > >_S_create_Arg1_Arg2_ZNSt6vectorIPcSaIS0_EE6rbeginEv_ZNK7testing8internal13FloatingPointIfE12AlmostEqualsERKS2__Vector_base, std::allocator >, std::allocator, std::allocator > > >_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4rendEvattributesstack_trace_depth_MSG_FASTOPEN_Destroy_aux_ZN7testing8internal17StreamingListener10FormatBoolEbdefault__ZN7testing14KilledBySignalC2EiFullMatchreverse_iterator<__gnu_cxx::__normal_iterator > > >g_captured_stderrSetGlobalTestPartResultReporterpair, std::allocator > >, bool>PrintAsCharLiteralToabs_errorRegisterParameterizedTests_ZNKSt6vectorIPcSaIS0_EEixEjGetTestTypeId/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0__copy_move_a2 >, __gnu_cxx::__normal_iterator > >test_indexValidateTestPropertyargs__M_insert_uniqueoperator<< UInt32RemoveExtensionkStreamResultToFlagkCurrentDirectoryStringname_template_ZNSt6vectorIiSaIiEE2atEjflag_ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEiiterator_traits_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEdeEv_ZN7testing8internal13HasOneFailureEPKcS2_S2_RKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZNKSt6vectorISsSaISsEE12_M_check_lenEjPKcbool_constantkShuffleFlag_ZNKSt18_Bit_iterator_baseltERKS___uninit_copyCharType_ZNK7testing8TestCase30reportable_disabled_test_countEv_ZN9__gnu_cxx14__alloc_traitsISaISsEE7destroyERS1_PSsungetwcoperator- >__copy_move_achild_argcurrency_symbol_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEptEvgettimeofday_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4findERKS1_locationShowWideCString__wchb_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE11_M_allocateEj_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjwoperator!= >_ZN7testing35FLAGS_gtest_also_run_disabled_testsEIsSubstringPred >_ZNKSt6vectorIiSaIiEE4dataEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_copyEPKSt13_Rb_tree_nodeISsEPS7__S_value~TestPropertyKeyIs_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE9constructEPS2_RKS2___exchange_and_addbasic_string__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >_ZNSt6vectorIPcSaIS0_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmIEinew_allocator_ZNK9__gnu_cxx13new_allocatorIiE7addressERi_Iter_base_M_range_initializefirst_is_TEST_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEi_M_checkglobal_test_part_result_reporter_mutex_AddTestInfo_ZNSt3setISsSt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsES5___size_ZNSt6vectorIPcSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EE_ZNSt10_Iter_baseIPN7testing14TestPartResultELb0EE7_S_baseES2__ZNK7testing10TestResult18HasNonfatalFailureEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZNKSt18_Bit_iterator_basegeERKS__ZNKSs5emptyEv__builtin_unwind_resume_ZN7testing31FLAGS_gtest_death_test_use_forkEunary_function_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6rbeginEvResult_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4backEv_ZNK7testing8TestCase10type_paramEva_current_test_infoAssumeRole_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS2_EES8__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE3endEv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11equal_rangeERKS1__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseEPKSsS7___ostream_type__insert_left_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_S_leftEPSt18_Rb_tree_node_base_ZNKSt6vectorISsSaISsEE4dataEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE3endEv_M_check_length_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_insert_equal_lowerERKS1__ZNKSt23_Rb_tree_const_iteratorISsEptEvdeath_test_use_fork__S_app_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE18_M_fill_initializeEjRKS3__ZNKSs4findEPKcjj_ZN7testing22EmptyTestEventListenerD2Ev_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE8allocateERS3_jMSG_OOB_ZN7testing8internal12UnitTestImpl9listenersEv__syscall_slong_t__alloc_traits, std::allocator > > >__alloc_traits >_ZN7testing8internal15UnitTestOptions17FilterMatchesTestERKSsS3__Identityp_sep_by_space_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE8capacityEvstart_timestampappendIsDirectoryTestDisabled_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE6rbeginEv_ZNK7testing8internal12AssertHelperaSERKNS_7MessageEsetlocale_ZNK7testing8UnitTest17failed_test_countEvbase_ZN7testing8internal17StreamingListenerD0Ev_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6assignEjRKS2_host_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmiEi_Setprecisionfailed_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev__copy_move_bbasic_streambufDefaultGlobalTestPartResultReporter_ZNKSt3setISsSt4lessISsESaISsEE6rbeginEv_IO_write_ptr_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEcGTEST_WARNING_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_rightEPSt18_Rb_tree_node_base_ZN7testing8internal2RE12PartialMatchEPKcRKS1__S_in_ZN7testing17TestEventListener18OnTestIterationEndERKNS_8UnitTestEicopynew_allocator_mode_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE8max_sizeEvwcscasecmpGTestLog_ZN7testing12TestProperty8SetValueERKSs__socket_type_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZN7testing8internal13FloatingPointIdE3MaxEvminpair, bool>SumOverTestCaseList_Vector_base >_ZNSt12_Vector_baseIPcSaIS0_EE12_Vector_impl12_M_swap_dataERS3__ZNK9__gnu_cxx17__normal_iteratorIPKcSsEptEv__ops_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE8max_sizeEvpair_ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE_ZN7testing8internal19FormatForComparisonIxxE6FormatERKx_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11equal_rangeERKS1__ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE10deallocateERS4_PS3_j_Tp_alloc_typetest_detail.xml_Constructfull_regex_len_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5clearEv_ZNKSt3setISsSt4lessISsESaISsEE11lower_boundERKSsSOCK_RDM_ZNSt12_Vector_baseIiSaIiEE11_M_allocateEjCloneCString_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4rendEv_ZNKSt6vectorIPcSaIS0_EE5beginEv_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEcoperator!=, std::allocator >_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEplEiWrite_M_fill_initializekDefaultDeathTestStyle__normal_iterator > >waitpidtimezonetest_property_count_ZNK7testing10TestResult19test_property_countEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EEaSERKS4__Vector_base >reverse_iterator<__gnu_cxx::__normal_iterator > > >an_outcome_S_ate_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_fill_assignEjRKS2_regexecmatches_filter__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11equal_rangeERKS1_expected_posoutcome__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EEaSERKS7__ZNKSt6vectorISsSaISsEE3endEv_ZNKSs7compareEjjRKSsjj_ZN9__gnu_cxx13new_allocatorIiE9constructEPiRKi_ZNSt18_Bit_iterator_base12_M_bump_downEv_ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw_ZNKSt3setISsSt4lessISsESaISsEE5emptyEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6assignEjRKS3__ZN7testing8internal23ScopedPrematureExitFileaSERKS1__Destroy_ZN7testing8internal6String13CStringEqualsEPKcS3__Rb_tree_iterator, std::allocator > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_get_Node_allocatorEvlast_in_range_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4sizeEv_ZNSt6vectorIPcSaIS0_EE2atEj__find_if<__gnu_cxx::__normal_iterator*, std::vector > >, __gnu_cxx::__ops::_Iter_equals_val > >_ZNSsaSEcUniversalPrinter, std::allocator > >_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEv_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc_ZN7testing8internal12UnitTestImpl12environmentsEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4findERKS1_kSignBitMaska_value__uninit_copy*>countlong long unsigned int_ZN7testing8TestInfo15ClearTestResultEPS0__ZNSs6appendERKSs_ZN7testing8internal6String12FormatHexIntEiconstruct_vptr.TestEventListenerCaseInsensitiveCStringEquals_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7addressERKS3_pair, std::allocator > >, bool>kDeathTestUseForkuppercase_ZNSbIwSt11char_traitsIwESaIwEEpLEwparameterized_test_registry__ZNKSbIwSt11char_traitsIwESaIwEE4rendEvconstructFormatTestCaseCount_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5frontEvFLAGS_gtest_stream_result_to_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE8capacityEv_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE9constructEPS2_RKS2_MakeAndRegisterTestInfounsigned char_ZNK7testing8internal24InternalRunDeathTestFlag5indexEv_M_grab_ZNKSt23_Rb_tree_const_iteratorIPKcEdeEv_ZN7testing14IsNotSubstringEPKcS1_PKwS3_stack_traceoperator<< ClearResultregmatch_tFLAGS_gtest_death_test_style_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EEixEj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEi_ZN7testing8internal13ParseBoolFlagEPKcS2_Pb_ZN7testing8internal14ParseFlagValueEPKcS2_bUnitTestOptions_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEv_ZN9__gnu_cxx17__normal_iteratorIPcSsEmmEi__gnu_debug_ZN9__gnu_cxx17__normal_iteratorIPcSsEmmEvSOCK_DGRAM_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE7reserveEj__is_char__outTypeIdHelper_ZNK7testing14TestPartResult9file_nameEv_ZN7testing8internal6String12CloneCStringEPKc_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE8max_sizeEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4backEv_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE9constructEPS3_RKS3_test_info_list_fwide_ZN7testing8internal17StreamingListener5StartEv__iterator_category<__gnu_cxx::__normal_iterator > >_ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5beginEvoutput_file_for_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestEventListener*)>F_OWNER_GID_ZNKSt6vectorIiSaIiEEixEj_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE7pointerEv_ZN7testing8internal27OsStackTraceGetterInterface16UponLeavingGTestEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5clearEv_ZNSs6insertEjPKcj_ZN7testing8internal27PrettyUnitTestResultPrinter9OnTestEndERKNS_8TestInfoE_ZNK7testing8UnitTest15start_timestampEv_ZNKSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE19_M_get_Tp_allocatorEvkChunkSize_ZNSt6vectorIPcSaIS0_EE3endEv~GoogleTestFailureExceptionHandleSehExceptionsInMethodIfSupportedSetDefaultResultPrinterwcsspn~_Iter_pred_ZNSt6vectorISsSaISsEE6resizeEjSsoperator<< _ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5frontEvGetAnsiColorCode__copy_move_backward_a2__alloc_traits, std::allocator > > > >_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE18_M_fill_initializeEjRKS2__Rb_tree_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5clearEv_ZN7testing8internal6String17WideCStringEqualsEPKwS3_streamraw_seed_ZNK7testing8internal12UnitTestImpl15start_timestampEvmax_length_ZNK7testing14TestPartResult6passedEv_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE8max_sizeEvFOpen_sifields_ZN7testing17TestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestEInfinitycan_be_nullwctyperesults_GetTestProperty__copy_move_backward_a_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13_M_clone_nodeEPKSt13_Rb_tree_nodeIS1_E_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4dataEv_Destroy_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE7destroyERS3_PS2_HandleSehExceptionsInMethodIfSupported_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5countERKS1_TEST_name__xstat_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEi_ZN7testing8internal24XmlUnitTestResultPrinter18OutputXmlAttributeEPSoRKSsS4_S4__ZNSs12_M_leak_hardEv_M_insert_unique__Ios_Iostate_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEviterator_traits_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE9constructEPS2_RKS2__ZNSsixEj_ZN7testing8internal6String10FormatByteEh_ZNSt6vectorIN7testing12TestPropertyESaIS1_EEaSERKS3__ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE8allocateEjPKvSetTestPartResultReporterForCurrentThreadOnEnvironmentsSetUpEnd_ZNSspLERKSsAddArguments >size_typeEnvironment_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEvfull_regex_srand_Destroy__delta_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmmEifreeset_catch_exceptionspart_ZN9__gnu_cxx14__alloc_traitsISaIPcEE8max_sizeERKS2_TypedTestCasePState_ZN7testing8internal14GTestMutexLockaSERKS1__ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmmEv_ZN7testing8internal9DeathTest24last_death_test_message_EtypeCreateCodePointFromUtf16SurrogatePair_ZNSt13_Bit_iteratormmEiConfigureXmlOutputalso_run_disabled_tests__ZNSt13_Bit_iteratormmEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE2atEj_ZNSt6vectorIPN7testing8TestCaseESaIS2_EEixEjinit_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEvother_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs_ZNK7testing8internal13DeathTestImpl7spawnedEvOnTestProgramStart_Unwind_Resumeai_flagskDeathTestThrew_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj_ZN7testing11EnvironmentD0EvTearDown_Rb_tree_node_ZNSs4_Rep10_M_refdataEv__cxxabiv1_ZN7testing8internal17Int32FromEnvOrDieEPKci__pos_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE3endEvtype_info_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmiEi_ZNSt6vectorIPcSaIS0_EE4backEvwcsstrTesthost_name__ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4sizeEvkReservedTestSuitesAttributes_ZN7testing7MessagelsERKSbIwSt11char_traitsIwESaIwEEpath_ZN7testing8internal16ForkingDeathTest4WaitEv_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5emptyEvClearAdHocTestResultst_size_ZN7testing8internal24XmlUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4backEv_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE8max_sizeEv_ZNSt6vectorISsSaISsEE2atEj_ZNKSt13_Rb_tree_nodeIPKcE9_M_valptrEvFLAGS_gtest_death_test_use_fork_ZN7testing8internal12UnitTestImpl18death_test_factoryEv_Rb_tree_impl, std::allocator > >, false>_ZN7testing8UnitTest18GetMutableTestCaseEi_ZNKSs5c_strEvreverse_iterator<__gnu_cxx::__normal_iterator > > >exit_code_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE11_M_allocateEjtest_properties__ZN7testing8TestCaseD0Ev_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_rootEvfraction_bits_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE5resetEPS3_testing_Result_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEpLEitm_mday_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEdeEv__niter_baseAppend_ZNKSt12_Vector_baseIPcSaIS0_EE19_M_get_Tp_allocatorEv_Iter_predsi_addr_ZN9__gnu_cxx13new_allocatorIwE9constructEPwRKw_ZN7testing8internal2RE12PartialMatchERKSsRKS1_RunAllTests__miter_base_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE3endEvGetTestCase_M_swap_data_ZNSt10_Iter_baseIPPN7testing11EnvironmentELb0EE7_S_baseES3_~basic_iostream_M_erase_at_enditerator_traitschild_pidallocator_ZNK9__gnu_cxx13new_allocatorIPcE7addressERS1__ZNK7testing8internal8FilePath11IsDirectoryEv_ZNKSt4lessISsEclERKSsS2_precisioncopy<__gnu_cxx::__normal_iterator >, __gnu_cxx::__normal_iterator > >MSG_NOSIGNALkOutputFlag_ZN7testing7MessagelsEPFRSoS1_E_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6assignEjRKS1_ad_hoc_test_result_ZNSt3setISsSt4lessISsESaISsEE5clearEvsingular_form_Iter_base_ZN7testing31TestPartResultReporterInterface20ReportTestPartResultERKNS_14TestPartResultEoperator<< _ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEpLEi__are_samebinary_function__resoperator<< kTestTotalShardsiterator_traits_ZN9__gnu_cxx17__normal_iteratorIPcSsEpLEibasic_streambuf >_ZNSt6vectorISsSaISsEE18_M_fill_initializeEjRKSs_call_addroriginal_working_dir_ZN7testing18TestEventListeners23SuppressEventForwardingEv_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw_ZNKSs7compareERKSsExitSummary_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEE4baseEvtimeval_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4sizeEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EEixEj_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE9push_backERKS3___normal_iterator > >~DeathTest_ZNSbIwSt11char_traitsIwESaIwEE6resizeEjwvector, std::allocator >, std::allocator, std::allocator > > >fopen_ZNSbIwSt11char_traitsIwESaIwEEaSEPKw_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4dataEvdifference_typerebind_ZNSo5flushEvsetprecision_M_value_field_ZN9__gnu_cxx14__alloc_traitsISaIPcEE10deallocateERS2_PS1_j_S_badbit~OsStackTraceGetterInterfacecaller_frame__ZNSs7_M_dataEPcwcslenline_endtype_param__ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj_ZNK7testing8internal12UnitTestImpl17failed_test_countEvenvironSOCK_CLOEXEClisteners_kInternalRunDeathTestFlag5div_tGetGlobalTestPartResultReporterScopedTracewcstoullboolalpha_ZN7testing8internal16ForkingDeathTest13set_child_pidEi_ZN7testing8internal13FloatingPointIfE24SignAndMagnitudeToBiasedERKj_Link_type_ZN7testing8internal14StackGrowsDownEv_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6resizeEjS2_Normalizetest_propertywrite_fd_swapreverse_iterator, std::allocator > > >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE12_M_check_lenEjPKcscientificCaptureStream_S_showposGTEST_TOTAL_SHARDS_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE3setERKS5_predicate_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEdeEvpair, std::allocator > >, std::_Rb_tree_iterator, std::allocator > > >_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5beginEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEPKw_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwDelete_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_valueEPKSt18_Rb_tree_node_baselldiv_t_ZN7testing8internal30GetBoolAssertionFailureMessageERKNS_15AssertionResultEPKcS5_S5_~_Alloc_hider_M_create_nodedeath_test_count_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEpLEi_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5frontEv_ZN7testing8UnitTest27parameterized_test_registryEv_ZNSbIwSt11char_traitsIwESaIwEE5eraseEjj_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEpLEiBiggestConvertible_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4dataEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE3endEvMSG_TRYHARD_ZN7testing8internal18OsStackTraceGetter17CurrentStackTraceEii_IO_buf_basematches_filter_ZNSt13_Bit_iteratorpLEi__FILE__pthread_internal_slist~InternalRunDeathTestFlag_ZNKSt18_Bit_iterator_baseneERKS__ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEixEifilename__ZNSt18_Bit_iterator_base10_M_bump_upEv_ZNSbIwSt11char_traitsIwESaIwEE5clearEv_S_endTestBody_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4backEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEdeEvget_allocator_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE12_M_check_lenEjPKc_ZNSt14_Bit_reference4flipEv_ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE8allocateEjPKvcaptured_stream_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEixEikUnknownFile_ZNKSt12_Vector_baseISsSaISsEE19_M_get_Tp_allocatorEv_ZNSt6vectorIPcSaIS0_EEaSERKS2_test_indices_operator!=<__gnu_cxx::__normal_iterator > >_ZNK9__gnu_cxx13new_allocatorISsE7addressERSsPrintTo_ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_uniqueERKS1__ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEikStdErrFileno_ZN7testing8internal13DeathTestImpl26ReadAndInterpretStatusByteEv~DefaultDeathTestFactory_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEv_ZNKSt13_Rb_tree_nodeISsE9_M_valptrEv_ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7destroyEPS4_SuppressTestEventsIfInSubprocessAddArgument_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEppEv_M_initializefastmap_accurate_ZNSbIwSt11char_traitsIwESaIwEE7_M_leakEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSs7replaceEjjPKcjkBreakOnFailureFlaglong unsigned int__uninitialized_copy_a_ZN7testing8internal20SingleFailureCheckerC2EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSsword_list_ZN7testing8internal12UnitTestImpl41SetTestPartResultReporterForCurrentThreadEPNS_31TestPartResultReporterInterfaceEtm_isdst_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE8max_sizeEvint_n_sign_posn_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE9push_backERKS2_operator!= >HasGoogleTestFlagPrefix_ZNKSt6vectorIPcSaIS0_EE2atEj_ZNKSbIwSt11char_traitsIwESaIwEE9_M_ibeginEv_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE3getEv_ZN7testing8internal16InDeathTestChildEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE9push_backERKS1_TypeParam_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEixEiegptr_ZNKSt9type_infoeqERKS__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE__intptr_tClearTestPartResultsoperator==<__gnu_cxx::__normal_iterator > >CharFormatvfwprintf_ZN7testing17TestEventListener16OnTestPartResultERKNS_14TestPartResultE_ZNK7testing8UnitTest11GetTestCaseEi_ZN7testing8internal7g_argvsE_ZNSt14_Bit_referenceaSERKS_EscapeXmlText_ZNSbIwSt11char_traitsIwESaIwEE6insertEjjw_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11lower_boundERKSsstrchr_ZNKSt5ctypeIcE8do_widenEc__normal_iterator > >fixed_IO_read_base_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4rendEv__find_if<__gnu_cxx::__normal_iterator >, __gnu_cxx::__ops::_Iter_pred >_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEptEv_ZNSbIwSt11char_traitsIwESaIwEE4swapERS2__ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4rendEv_ZNKSt6vectorIiSaIiEE5emptyEvScopedFakeTestPartResultReporterkThrowOnFailureFlag__alloc_ZNSt11char_traitsIcE2ltERKcS2__ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE3getEvIsSubstringPred_M_insert_ZNK7testing8TestInfo13is_reportableEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4rendEvsockaddr_ZN7testing8DoubleLEEPKcS1_dd__debug_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4backEvfull_name_Swallow_assignwcstod_ZNK7testing14TestPartResult7messageEvreset_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE8max_sizeEv_ZNSt6vectorIiSaIiEE4dataEv_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7addressERKS3___addressofuninitialized_copy_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv_ZN7testing8internal15UnitTestOptions13MatchesFilterERKSsPKcreg_syntax_t_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate_ZNK7testing8internal8FilePath15RemoveExtensionEPKc_vptr.Test_ZN7testing8internal13FloatingPointIfE3MaxEvwmemcmp_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S5_S5_value_type_ZNSs15_M_replace_safeEjjPKcjsuffix_Const_Link_type_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseERKS1_this_test_info_ZN7testing8internal13ExecDeathTest32GetArgvsForDeathTestChildProcessEvconstructInitGoogleTestImpl_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmiEi_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE10deallocateEPS2_j_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEStreamableToStringskipwshas_owner_operator!=_Iter_base__is_move_iterator_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4sizeEv__cxa_rethrow_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE7destroyERS4_PS3__ZNSt6vectorIN7testing14TestPartResultESaIS1_EEixEjsocket_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEi_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE18_M_fill_initializeEjRKS2_property_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKw~EmptyTestEventListener_ZN7testing11EnvironmentD2Ev_ZNK7testing10TestResult17GetTestPartResultEirebind_Iter_base_Rb_tree_colortv_sec_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcjuse_color_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5clearEv_ZN7testing8UnitTest17AddTestPartResultENS_14TestPartResult4TypeEPKciRKSsS6__ZNSt6vectorIPcSaIS0_EE7reserveEj_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE12_Vector_impl12_M_swap_dataERS5_test_properites_mutex__unused2IN_PROGRESSpid_t__are_same__destroyUniversalTersePrinterPrintCharsAsStringToIsSubstringImpl >GetStreamset_should_run_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5beginEvbtowc_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5frontEv_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__M_node_counttm_ming_init_gtest_countMSG_WAITALLoperator<< _ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5beginEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE8max_sizeERKS3__ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_jjbasic_stringstrcmp_ZNK7testing8internal12UnitTestImpl6FailedEv_ZN7testing8internal12UnitTestImpl24ConfigureStreamingOutputEv_ZNSt6vectorIiSaIiEE6rbeginEv_ZN7testing8internal30WriteToShardStatusFileIfNeededEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc_ZN7testing8internal24HasNewFatalFailureHelper20ReportTestPartResultERKNS_14TestPartResultE_ZNK9__gnu_cxx13new_allocatorIPKcE8max_sizeEv_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_ES7_ai_addr_ZNK9__gnu_cxx13new_allocatorISsE8max_sizeEv__strThreadLocalfailuresfwscanf~AbstractSocketWriter_DestroyCreateFolder_ZN7testing9internal220PrintBytesInObjectToEPKhjPSoisspace_ZNKSs8_M_limitEjj_ZN7testing16AssertionFailureERKNS_7MessageEglobal_test_part_result_repoter__ZNSs4swapERSs_ZNKSt3setISsSt4lessISsESaISsEE4rendEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE17_M_create_storageEj__uninitialized_move_if_noexcept_a >_ZN7testing8internal12UnitTestImpl11FilterTestsENS1_18ReactionToShardingE_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEplEifailure_message_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_lower_boundEPKSt13_Rb_tree_nodeIS1_ESB_RKS1__ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jjStreamableToStringAlmostEqualsInDeathTestChild_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6rbeginEvShouldShardoperator<< _ZNK9__gnu_cxx13new_allocatorIwE7addressERKw_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEppEi_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8max_sizeEv_ZNKSt17_Rb_tree_iteratorISsEeqERKS0__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_get_Node_allocatorEv_ZN7testing14InitGoogleTestEPiPPcfind_if<__gnu_cxx::__normal_iterator >, testing::internal::TestPropertyKeyIs>GetEnviron_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEppEvdefault_val_ZNK7testing8TestInfo11value_paramEv_ZNSt3setISsSt4lessISsESaISsEE11lower_boundERKSs_ZNSs6insertEjRKSsjj_ZN7testing14InitGoogleTestEPiPPwCmpHelperSTRNEMSG_WAITFORONE_ZN7testing8internal9MutexBase6UnlockEv_ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EEoperator&=pattern_DeathTestFactory_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_E_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7addressERS3__ZN7testing8internal24XmlUnitTestResultPrinterD2Ev_ZN7testing8internal18OsStackTraceGetterD0EvTestEventListeners_ZNSt11char_traitsIcE4moveEPcPKcj~AssertHelperkTestShardIndex_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11upper_boundERKSs_ZN7testing8internal17StreamingListener12SocketWriter14MakeConnectionEv_ZNK7testing8internal13FloatingPointIfE13fraction_bitsEv_M_refcopysi_uid_ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv_Destroy_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7destroyEPS3__ZN7testing8internal26GoogleTestFailureExceptionC2ERKNS_14TestPartResultEsa_mask_S_floatfieldsizetypeIsSubstringImpl_ZN7testing4TestC2Ev_ZNSs4_Rep10_M_refcopyEv~TestPartResultReporterInterfacepremature_exit_file_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwjj__errno_location_ZNSt11char_traitsIwE3eofEv_ZNKSt23_Rb_tree_const_iteratorIPKcEeqERKS2_new_allocator_ZNKSt6vectorIPcSaIS0_EE6rbeginEvoperator()_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_rightmostEv_ZNK7testing10TestResult6FailedEv_M_get_insert_unique_pos_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE19_M_get_Tp_allocatorEv_ZN7testing16AssertionFailureEvMSG_SYN__value_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEi_ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT__ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE17_S_select_on_copyERKS4_success_scoped_ptr, std::allocator > >sigactiondirectory_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEveofbit_ZNSt3tr110tuple_sizeINS_5tupleIIEEEE5valueE_ZNSs4_Rep26_M_set_length_and_sharableEj_ZNSt6vectorIPcSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6_CaseInsensitiveWideCStringEquals_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8key_compEv_ZNSt13_Rb_tree_nodeIPKcE9_M_valptrEvgtest_trace_stack_should_ZNSt11char_traitsIwE4copyEPwPKwj_ZNSt10_Iter_baseIPPcLb0EE7_S_baseES1_printf_ZNSt12_Vector_baseISsSaISsEE12_Vector_impl12_M_swap_dataERS2__ZN7testing8internal13DeathTestImpl10set_statusEi__lentm_monrepeat__ZN7testing8TestCase22TestReportableDisabledEPKNS_8TestInfoEsi_pid__off_t_M_get_Node_allocator__resultdefault_global_test_part_result_reporter_factory_new_allocatorrebindDoubleNearPredFormatreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_valueEPKSt13_Rb_tree_nodeIS1_Eflag_str_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE8allocateERS3_j_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPc_ZNKSt23_Rb_tree_const_iteratorISsE13_M_const_castEv_ZNKSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE19_M_get_Tp_allocatorEv_M_rightmostIsSpace_ZNSolsEd_ZNSolsEf_ZNSolsEi_ZNSolsEj_ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPwobj_bytesShuffleRange_syscall_ZNSolsEx_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EEkBitCountmarker__wch_ZN7testing8internal12UnitTestImpl14UnshuffleTestsEvlistener_Arg__copy_move_boperator== >_ZdaPv__alloc_swap, std::allocator > >, true>StackGrowsDownFloatingPointUnionoperator++ignore_ZNSt10_Iter_baseIPPN7testing8TestCaseELb0EE7_S_baseES3_operator+=__glibc_reserved4__glibc_reserved5range_width~Test_ZNK7testing8TestCase18ad_hoc_test_resultEv__string_typePrintFailedTestsallocator, std::allocator > >trace_ZNKSt14_Bit_referenceltERKS__ZN7testing8internal27PrettyUnitTestResultPrinter15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal21UniversalTersePrinterIPKwE5PrintES3_PSoInitGoogleTestImpl_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmIEibasic_string, std::allocator >flag_lenCapturedStreamwcsncat__lhs_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEaSERKS4__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEnew_allocatorsetstate_ZNSt6vectorIiSaIiEE14_M_fill_assignEjRKi_ZN7testing8internal9DeathTestC2Ev_ZN7testing8internal9Arguments4ArgvEv_ZNSbIwSt11char_traitsIwESaIwEE6resizeEj_ZNK7testing8TestCase11GetTestInfoEi_ZNSt11char_traitsIwE7compareEPKwS2_j_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEptEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5frontEvoperator--Delete_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8max_sizeEv__elision_data_Containeroperator-=operator->FormatTimeInMillisAsSecondsShuffleoperator<< _ZN7testing8internal15GetTimeInMillisEvtm_year_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5frontEvLIVED_ZNSs16_S_construct_auxIPcEES0_T_S1_RKSaIcESt12__false_typereverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >GetMutableTestInfo_ZNK9__gnu_cxx17__normal_iteratorIPcSsEdeEvMSG_DONTROUTE_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8pop_backEv~_Vector_impl_M_widen_initargsto_int_type_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE12_M_check_lenEjPKc_M_set_sharableenvironments_ZSt7nothrow_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE12_Vector_impl12_M_swap_dataERS5___iter_equals_val >unit_test__ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmIEi_ZNKSbIwSt11char_traitsIwESaIwEE4dataEvallocateoperator<< ai_nextParseInt32Flagnew_value_ZN9__gnu_cxx17__normal_iteratorIPcSsEmIEi__is_move_iterator, std::allocator >*>__builtin_strstr_ZNSt6vectorISsSaISsEE9push_backERKSs_IO_write_end~TestCaseNameIs__uninitialized_copy_a_IO_save_basepptrtm_wday_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE3setERKS3_kExponentBitMask_ZNSt11char_traitsIwE7not_eofERKj_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5frontEv_ZN7testing32ScopedFakeTestPartResultReporterC2ENS0_13InterceptModeEPNS_19TestPartResultArrayE__are_same_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_minimumEPKSt18_Rb_tree_node_base_ZN7testing8internal18g_init_gtest_countE_ZN7testing8UnitTest4implEva_typetest_part_resultlast_death_test_case__ZNSt12_Vector_baseISsSaISsEE13_M_deallocateEPSsj_ZNK9__gnu_cxx17__normal_iteratorIPcSsEixEi_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7destroyEPS3__ZNKSt6vectorIPcSaIS0_EE8capacityEv_ZNSt11char_traitsIwE12to_char_typeERKjdistance__new_start_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_S_keyEPKSt18_Rb_tree_node_baseSetInjectableArgvsos_stack_trace_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEE4baseEv_ZNK9__gnu_cxx13new_allocatorIPcE8max_sizeEvint_type~TestEventListeners_ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEvMSG_PEEKremoveval1val2_ZN7testing8internal24XmlUnitTestResultPrinter29TestPropertiesAsXmlAttributesERKNS_10TestResultEsegmentn_sign_posnactual_message_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4backEva_key_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_rightEPKSt18_Rb_tree_node_base_ZNK7testing8internal8FilePath14RemoveFileNameEvwrite_fdrebind, std::allocator > > >captured_fd_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE13_M_deallocateEPS1_jWait_ZN7testing17TestEventListener18OnTestProgramStartERKNS_8UnitTestEOnTestIterationStartuninitialized_copy*, std::basic_string*>_ZNKSt6vectorIPcSaIS0_EE8max_sizeEv_M_end_ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE19_M_get_Tp_allocatorEvFormatByteiterator_traits_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEE4baseEv_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_basekDeathTestReturned_S_copy_chars_ZNKSt6vectorIPcSaIS0_EE5emptyEvtotal_test_count_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEjRKS3_IsValidXmlCharacter_ZNSt6vectorIPN7testing8TestCaseESaIS2_EEaSERKS4__ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E8MakeFromEv_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEpLEiArguments__throw_logic_errorstreamable_ZNSs7_M_copyEPcPKcj_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEaSERKS7_signum__Rb_tree_impl_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_minimumEPSt18_Rb_tree_node_baseColoredPrintfkColorFlag~Environmentsa_sigaction_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmIEi_IteratorL_ZN7testing8internal10scoped_ptrIKSsE5resetEPS2__ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE9push_backERKS2__ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwjstack_sizesi_stimeshard_testsGetNextRandomSeed__arg_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmIEi_Iter_baseallocator >_ZN7testing10TestResultD2Ev_M_insert_equal_lowerreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_ZNSt13_Bit_iteratormIEi_ZN7testing15AssertionResultlsIA11_cEERS0_RKT__ZNK7testing8UnitTest4implEv_ZN9__gnu_cxx13new_allocatorISsE9constructEPSsRKSs_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEdeEv_ZNSt11char_traitsIcE3eofEvfastmap_ZNKSt3setISsSt4lessISsESaISsEE11equal_rangeERKSspthread_key_tmmap_ZNK7testing8UnitTest30reportable_disabled_test_countEvgetaddrinfo_Iter_base, std::allocator >*, false>TestReportablefull_flag__niter_base*>_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5countERKSs_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwjst_uid__builtin_strrchrstr_valdefault_per_thread_test_part_result_reporter_thousands_sep_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_destroy_nodeEPSt13_Rb_tree_nodeISsE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_insert_lowerEPSt18_Rb_tree_node_baseRKS1__ZN7testing8internal17TestEventRepeater7ReleaseEPNS_17TestEventListenerE_ZNK7testing8internal24InternalRunDeathTestFlag4lineEv__copy_move_bPrintByteSegmentInObjectTo_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4rendEvInt32_ZNK7testing8internal2RE7patternEv_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmmEv_ZNSt6vectorISsSaISsEED2Ev_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKccopya_test_case_name_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS5___copy_move_bEscapeXmlAttribute_ForwardIterator_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEE4baseEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_Bit_reference_ZN7testing8internal24XmlUnitTestResultPrinteraSERKS1_gtest_trace_stack_ZNSt8ios_base4setfESt13_Ios_Fmtflags_ZN7testing8internal12UnitTestImpl20ClearAdHocTestResultEv_ZN7testing8internal15NoExecDeathTestD2Evwords_ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEdeEvstart_timestamp__ZNKSt17_Rb_tree_iteratorISsEdeEv_ZNKSs7compareEjjPKcj_ZNK7testing8UnitTest6PassedEv_Destroy_aux_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5beginEvcopy_backward_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE11_M_allocateEjdestroy_ZNSs6insertEjPKc_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE5resetEPS2__ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6rbeginEv_ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEig_help_flagFlagToEnvVar_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEppEia_file_name_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5emptyEvwidenF_OWNER_TIDnonfatally_failed_ZN7testing8internal19UniversalPrintArrayEPKcjPSoReactionToSharding__quad_tenable_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE10deallocateEPS3_j_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_upper_boundEPSt13_Rb_tree_nodeISsES8_RKSs_ZNSt3setIPKcSt4lessIS1_ESaIS1_EEaSERKS5_file_stat_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_beginEvgai_strerror__new_finishcopy_backwardtest_case_to_run_countFLAGS_gtest_show_internal_stack_framesnew_allocator_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6rbeginEvgtest_flag_saver__ZNSt6vectorISsSaISsEE7reserveEjoperator<< kPathSeparatorString_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsEOnTestEndbitsRemoveTrailingPathSeparator~ScopedTracereverse_iteratoris_attribute_ZNKSt6vectorIiSaIiEE4rendEv_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7destroyEPS2__ZNKSt6vectorIPcSaIS0_EE12_M_check_lenEjPKcdistance__normal_iterator > >wcsncmp_ZNKSt18_Bit_iterator_baseleERKS__ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE10deallocateERS3_PS2_j_ZNK7testing8internal8FilePath7IsEmptyEv__normal_iterator > >_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEdeEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5frontEv_M_right_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4findERKS1___copy_move_a2_ZNK7testing8internal8FilePath27RemoveTrailingPathSeparatorEvbase_name_M_get_insert_hint_unique_pos_ZN7testing8internal15NoExecDeathTestD0Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Evtowctrans_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_beginEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSs2atEj__uninitialized_copy_afilenoRunTearDownTestCase_ZN7testing17TestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4swapERS4__ZN7testing8internal11CmpHelperLEEPKcS2_xxcharoperator- >_S_refcount__digits_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_get_Node_allocatorEv__normal_iterator > >_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwj__is_normal_iteratorfixture_class_id_ZN7testing8internal27PrettyUnitTestResultPrinter27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEvswprintf_Value_ZNSs4_Rep10_M_destroyERKSaIcE_ZN7testing4Test8TestBodyEvUniversalPrinterdetailexpr1expr2_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE28_M_get_insert_hint_equal_posESt23_Rb_tree_const_iteratorISsERKSs__uninit_copy_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE15_M_erase_at_endEPS2___are_samefixture_class_id__ZN7testing28FLAGS_gtest_break_on_failureEFLAGS_gtest_print_timeType_IsMove_ZN7testing8internal29PrintFullTestCommentIfPresentERKNS_8TestInfoEoperator<< __copy_move_backward_a__is_normal_iterator_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EEixEjtest_info_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE23_M_get_insert_equal_posERKSs_ZNSt6vectorIiSaIiEE3endEvMutexBase_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6resizeEjS2__ZN7testing14IsNotSubstringEPKcS1_RKSsS3_tv_usec_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE3endEvHelpermemmoveFindLastPathSeparatorpair, std::_Rb_tree_iterator >diff_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE10deallocateERS4_PS3_j_ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_j_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4rendEvCOLOR_DEFAULT_ZNK7testing8internal12UnitTestImpl21reportable_test_countEvto_char_type_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7destroyEPS3_length_ZN7testing8internal13CaptureStderrEvwide_c_str_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_equal_ESt23_Rb_tree_const_iteratorISsERKSs_ZN7testing8internal6String32CaseInsensitiveWideCStringEqualsEPKwS3_operator<<_M_set_leaked_ZNSt6vectorIiSaIiEE15_M_erase_at_endEPi_ZN7testing8internal11CmpHelperGTEPKcS2_xx_M_clonesigset_t_ZNK7testing14TestPartResult11line_numberEvcapacityoperator()<__gnu_cxx::__normal_iterator*, std::vector > > >_ZN7testing8internal26GoogleTestFailureExceptionD0Ev_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmiEi_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Evsetf_ZN7testing8TestCase19RunTearDownTestCaseEvFileOrDirectoryExists_ZNSbIwSt11char_traitsIwESaIwEE6appendEjw_ZN7testing8internal17TestEventRepeater11OnTestStartERKNS_8TestInfoEthis_fixture_id_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEdeEv_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKwsetwhas_tests_to_run_ZNK7testing8internal8FilePath21FindLastPathSeparatorEvsigemptyset_ZNSspLEPKcoperator==_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_M_endEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmmEi_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmIEiis_nan_ZNKSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEvvalue_compparent_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEpLEi__first_ZN7testing24ValidateTestPropertyNameERKSsRKSt6vectorISsSaISsEECOLOR_RED__copy_move_backward_a2ExecDeathTestoperator<< _ZN7testing8internal17TestEventRepeater22set_forwarding_enabledEb_ZN7testing8internal13ExecDeathTestD2Ev__tmpkRepeatFlag_ZN7testing8internal12UnitTestImplD2Ev_ZNKSs6substrEjjhaystack_ZN7testing8internal12UnitTestImpl19current_test_resultEvkey_type_M_rootExtractSummarymbsrtowcsDefinedTestIter_S_beg_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlUnitTestEPSoRKNS_8UnitTestE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_insert_equal_lowerERKSsoperator>=number_ZNK7testing8internal12UnitTestImpl22failed_test_case_countEvvalue_str_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11__rb_verifyEvOtherOperand_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE9CreateKeyEv_ZN7testing8internal13PrintStringToERKSsPSo_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4dataEvWideCStringEquals_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5frontEvkAlsoRunDisabledTestsFlagbasic_ostream_ZN9__gnu_cxx14__alloc_traitsISaISsEE8allocateERS1_j~UnitTestImpl_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEi_S_construct_ZNSt10_Iter_baseIPiLb0EE7_S_baseES0_listeners_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEixEi_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEv_ZN7testing8internal11CmpHelperEQEPKcS2_xx_ZNSt6vectorISsSaISsEE5clearEv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6rbeginEv_ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEixEi__pid_tAbortReason_ConstructkReservedTestCaseAttributes_ZNK7testing8internal10scoped_ptrIKSsEptEv_ZNKSt6vectorISsSaISsEE4backEvint_frac_digits_ZNSt12_Vector_baseIPcSaIS0_EE11_M_allocateEj_ZN7testing8internal16GetAnsiColorCodeENS0_10GTestColorE_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEppEi_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKw_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5emptyEv_ZNKSt17_Rb_tree_iteratorIPKcEptEv_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEppEv_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5___is_normal_iterator_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEdeEv__copy_move_b_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseERKS1_vector >PrintCharAndCodeTo_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE3endEv_ZN9__gnu_cxx13new_allocatorIcE7destroyEPcs1_expressionOutputXmlTestInfo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5clearEv_ZNSt8ios_base9precisionEi_ZN7testing8internal13DeathTestImplD0Ev_ZN7testing8internal19UniversalPrintArrayEPKwjPSo_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4dataEv__uninitialized_move_if_noexcept_a >_M_iend_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE3getEvTearDownEnvironmentkDeathTestCaseFiltersi_tidnewline_anchorst_rdev__sigaction_handler_S_empty_rep_storage__copy_move_a2_ZN7testing8UnitTest3RunEviterator_traitsg_argvs_ZN9__gnu_cxx13new_allocatorIPcE7destroyEPS1__ZNSs6assignEPKcExecDeathTestChildMainlocaltime_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE8capacityEv_ZNKSbIwSt11char_traitsIwESaIwEE7_M_dataEv_ZN7testing8internal14DeathTestAbortERKSs_ZN7testing8internal14CmpHelperSTRNEEPKcS2_S2_S2_value_param___pfnStreamableToStringold_reporter__ZNSs6resizeEjcTimeInMillis_ZN7testing32ScopedFakeTestPartResultReporterD2Ev_DestroykMaxUlpsmemcmp_ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSoforwarding_enabled__M_check_len__is_normal_iterator_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11lower_boundERKS1___rb_verify_ZN7testing28FLAGS_gtest_throw_on_failureE_S_bin~ScopedFakeTestPartResultReporterint_n_sep_by_space_ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6__ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE2atEj_IO_marker_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE8max_sizeEv_ZNK7testing14ExitedWithCodeclEi_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEdeEvtest_case_indices__ZN7testing8internal11g_help_flagE_FacetDeathTestOutcome_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE5resetEPS6_print_time__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE18_M_fill_initializeEjRKS1__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5beginEv_ZNSs6appendERKSsjjIsNotContainer_ZN7testing8internal10ParseInt32ERKNS_7MessageEPKcPiAssertHelperDataFLAGS_gtest_break_on_failure_Destroy_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7addressERS4__ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE12_Vector_impl12_M_swap_dataERS5_re_nsubGetAbsolutePathToOutputFilehas_new_fatal_failure_INTERCEPT_ONLY_CURRENT_THREADiterator_traits_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEdeEvDefaultPerThreadTestPartResultReporter_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4swapERS4_bytes_last_read_BI1_BI2_ZNKSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE19_M_get_Tp_allocatorEvptr__ZN7testing8UnitTest9listenersEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEE4baseEvai_socktype__is_move_iterator_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEiPrintFullTestCommentIfPresentwctrans_S_truncscoped_ptr, std::allocator > >_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEv_ZNKSs7compareEPKc__pad4_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5beginEvset_elapsed_time_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEixEi_S_ios_iostate_end_ZN7testing8internal17GetCapturedStderrEvFLAGS_gtest_coloroperator<< ~new_allocator~ThreadLocal_ZN7testing8internal8FilePath22GenerateUniqueFileNameERKS1_S3_PKcwidth_ZNSbIwSt11char_traitsIwESaIwEE4_Rep12_S_empty_repEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx13new_allocatorIwE7destroyEPw_ZNKSt6vectorISsSaISsEE4sizeEv__uninitialized_move_if_noexcept_a >_ZNKSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13get_allocatorEvoperator<< strtoll~UnitTestReadReportFailureInUnknownLocation_ZN7testing8internal12UnitTestImpl28CurrentOsStackTraceExceptTopEi__baseInt32FromGTestEnv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEdeEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >user_msgerrnum_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEixEi__copy_move_backward_a2emptyinstance_ZN7testing8internal29ParameterizedTestCaseRegistryaSERKS1_val1_ss__copy_move_b__end_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE10deallocateERS3_PS2_jobject_ZN7testing8internal14CapturedStream11GetFileSizeEP8_IO_FILE_ZN7testing18FLAGS_gtest_repeatE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEdeEv__mbstate_t_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_maximumEPKSt18_Rb_tree_node_baseDeleteSelf___normal_iterator > >_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S6_S6_tz_minuteswestkDefaultOutputFile_M_valptr_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE18_M_fill_initializeEjRKS1__ZN7testing8internal17TestEventRepeaterD0Ev_ZNKSt23_Rb_tree_const_iteratorIPKcE13_M_const_castEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEpLEitype_param_S_internal_ZN7testing8internal10scoped_ptrISsE7releaseEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEdeEvconst_referenceOnEnvironmentsTearDownStart__uninit_copy_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE10_S_on_swapERS4_S6__ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7addressERKS2_output_dir_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE3endEvset_last_death_test_message_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5beginEv_ZN7testing16AssertionSuccessEvport_num_COLOR_YELLOWrebindreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSsreservedeath_test_index_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEixEi_M_disjunct_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwj_M_leak_ZNSs7_M_leakEv~Arguments_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEv_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPiS1_EERKierrors_str__is_move_iteratorfloatfieldg_executable_path_ZNKSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE13get_allocatorEvForEach, void (*)(testing::TestInfo*)>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_insert_equalERKSsrm_so_ZNSt6vectorIPcSaIS0_EE4swapERS2_elapsedfclose_ZN7testing8internal8FilePath11ConcatPathsERKS1_S3__S_unitbuf_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEixEi_ZNKSt4lessIPKcEclERKS1_S4_kHexEscapeFLAGS_gtest_internal_run_death_testAssertionSuccessright_ZNKSbIwSt11char_traitsIwESaIwEEixEj_ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEjRKS0__ZNKSs2atEj_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE7releaseEv_ZNK7testing8internal13FloatingPointIdE4bitsEv_ZNKSbIwSt11char_traitsIwESaIwEE6_M_repEvallocatorline__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5emptyEvoperator< , std::allocator >_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE17_S_select_on_copyERKS3__ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEixEioriginal_dir_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZN7testing8internal7PrintToEwPSo_ZNSbIwSt11char_traitsIwESaIwEE6rbeginEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_insert_lowerEPSt18_Rb_tree_node_baseRKSsMessage_M_parent_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5beginEv_ZNKSbIwSt11char_traitsIwESaIwEE6rbeginEv6ldiv_t_ZNKSt17_Rb_tree_iteratorIPKcEeqERKS2_EmptyTestEventListener_Destroyaddrinfoiterator_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_lower_boundEPKSt13_Rb_tree_nodeISsES9_RKSsmemset_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE8max_sizeEv_M_length_ZN7testing8internal11CmpHelperGEEPKcS2_xxchar_traitsFLAGS_gtest_random_seed_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE10deallocateERS3_PS2_jfactoryregex__Setfill_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4backEvreverse_iterator >pthread_mutex_init_ZNKSs9_M_ibeginEv_ZN7testing8internal6String28CaseInsensitiveCStringEqualsEPKcS3_insert_ZN7testing8internal17TestEventRepeater13OnTestCaseEndERKNS_8TestCaseE__miter_baseTypeWithSize<4u>_ZNSt12_Vector_baseISsSaISsEE19_M_get_Tp_allocatorEv_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE6insertERKS1__ZN7testinglsERSoRKNS_14TestPartResultEHasOneFailureCmpHelperSTREQ_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8pop_backEvdefined_test_names__ZNK7testing10TestResult15test_propertiesEvCmpHelperSTRCASENE_ZN7testing8UnitTestD2Ev_ZNSt11char_traitsIwE2ltERKwS2__ZN7testing18FLAGS_gtest_outputE_Iter_equals_valexit_code__ZNSt6vectorIiSaIiEE7reserveEj_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEi_Ios_SeekdirListTestsMatchingFilter_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_rebind, std::allocator > >_ZN7testing8internal37FormatCompilerIndependentFileLocationEPKci_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEvGenerateUniqueFileName_ZNKSt6vectorISsSaISsEE2atEjchar_traitskMaxBiggestInt__builtin_puts_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolder7pointerEvoutput_name__addressoffile_size_ZNSt8ios_base5widthEi_ZN7testing8internal12UnitTestImpl23ClearNonAdHocTestResultEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___alloc_traits >GetThreadCount_ZN7testing8UnitTest14RecordPropertyERKSsS2_~GTestMutexLock_M_dataplusallocator__uninitialized_move_if_noexcept_a >_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE7reserveEj~basic_ostreamequal_range_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_plural_form_M_predinternal_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE10_S_on_swapERS4_S6__ZNK7testing8internal12UnitTestImpl11GetTestCaseEi_M_left__builtin_putcharnothrow_t__destroyTestEventRepeater__builtin_fputsnew_test_case_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE8max_sizeEv_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEixEjkDeathTestLivedparameterized_tests_registered_ldiv_t_ZNKSs13find_first_ofEPKcjForEach, void (*)(testing::TestCase*)>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsE_ZNSs18_S_construct_aux_2EjcRKSaIcE_ZN7testing10TestResult20ValidateTestPropertyERKSsRKNS_12TestPropertyE_Vector_base >INTERCEPT_ALL_THREADSva_listinfoline_number_ZN7testing8TestInfoC2ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseEShouldRunTestOnShard_S_synced_with_stdioInt32FromEnvOrDieIsEmptyTestFailedpositive_sign_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKcshard_index_env__lockmkstempKilledBySignal__in_chrg_ZN7testing8internal27PrettyUnitTestResultPrinterD0Evclone_ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2__ZNSt11char_traitsIwE11to_int_typeERKw__normal_iterator, std::allocator > >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_range_checkEj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_Estatement__ZN7testing8internal13ExecDeathTest10AssumeRoleEv__builtin_strchr_ZN9__gnu_cxx14__alloc_traitsISaIPcEE17_S_select_on_copyERKS2_kFatalFailuretest_idMSG_CMSG_CLOEXEC_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEdeEvGetEnvchild_pid___miter_basescoped_ptr_ZNSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEv~AssertionResultRegisterTests_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS1_ERKS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNK7testing8TestCase12elapsed_timeEv_ZNSs5clearEvSetUpEnvironmentin_color_moderange_ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE8max_sizeEv_M_lower_bound_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE__ptrContainer_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4sizeEvStreamingListener_ZN7testing8internal17TestEventRepeater6AppendEPNS_17TestEventListenerECreateKey__copy_move_b_ZN7testing8internal12UnitTestImplC2EPNS_8UnitTestEoperator<< _ZNSt3setISsSt4lessISsESaISsEE11equal_rangeERKSs_ZNSt6vectorIN7testing12TestPropertyESaIS1_EEixEj_ZNKSt6vectorISsSaISsEE5frontEv_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE17_M_create_storageEj_ZN7testing8internal13FloatingPointIdE24SignAndMagnitudeToBiasedERKyxmloutThreadLocal > >_ZN7testing8internal17Int32FromGTestEnvEPKci_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_upper_boundEPKSt13_Rb_tree_nodeIS1_ESB_RKS1__Predicateiterationvector >_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE3getEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt17_Rb_tree_iteratorIS1_E_ZN7testing15AssertionResultC2ERKS0__ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_string_value__c1__c2__alloc_traits >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_range_checkEj_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEixEi_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE8max_sizeERKS4__ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE8max_sizeERKS3__M_finishactual_predicate_valuewcstof_ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE_ZNK7testing8internal12UnitTestImpl17current_test_caseEvwcstokwcstol_ZNKSs16find_last_not_ofERKSsj_ZNKSbIwSt11char_traitsIwESaIwEE6lengthEv_ZN9__gnu_cxx13new_allocatorIPKcE9constructEPS2_RKS2_operator== >iterator_typeInitDeathTestSubprocessControlInfo_S_failbit__normal_iterator__ch_ZN7testing8internal23DefaultDeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE_vptr.DeathTest_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_create_nodeERKS1__ZN7testing29FLAGS_gtest_stack_trace_depthESOCK_SEQPACKETGetElementOrtest_to_run_count_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE10deallocateERS4_PS3_j_ZN7testing8internal35DefaultGlobalTestPartResultReporteraSERKS1__ZN7testing13PrintToStringIPKcEESsRKT___int32_t__normal_iterator > >kMaxStackAlignment_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7destroyEPS4_operator<< UnshuffleTests_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE9push_backERKS1__ZNK7testing8internal12UnitTestImpl17gtest_trace_stackEvpthread_key_deletest_mtimuncaptured_fd__ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs_ZNSt6vectorISsSaISsEEixEjtm_zone_Bit_type_ZN7testing8UnitTestaSERKS0__ZNKSt12_Vector_baseISsSaISsEE13get_allocatorEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5beginEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE19_M_get_Tp_allocatorEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4backEv_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE__distance_ZN7testing8internal9Arguments11AddArgumentEPKcclose_ZNSt6vectorIPcSaIS0_EE6resizeEjS0__ZNKSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE13get_allocatorEvfunctorVerifyRegisteredTestNamesFormatCountableNounPrintBytesInObjectToPrintCharAndCodeTo_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6resizeEjS2__ZN7testing8internal11CmpHelperLTEPKcS2_xx__is_move_iteratorbinary_ZNK7testing8TestInfo10should_runEv_ZN7testing8internal11ScopedTraceaSERKS1_rebindEscapeXmlFormatIntWidth2_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEptEvallocator_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE17_M_create_storageEj__uninitialized_copy_a_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4backEv_Rb_tree_node, std::allocator > >_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE13_M_deallocateEPS1_jcopy_backwardStatStruct__pthread_mutex_sGetInstance_S_construct_aux_2skip_count_ZN7testing8internal25ReportInvalidTestCaseTypeEPKcS2_ifile_name__ZNK7testing10TestResult16total_part_countEvsa_familyFLAGS_gtest_filter_ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_shard_index_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmIEiGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2 -fPIC__dso_handle_ZN7testing8internal18CmpHelperSTRCASEEQEPKcS2_S2_S2__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEplEi_ZN7testing8internal17TestEventRepeater16OnTestProgramEndERKNS_8UnitTestEtime_t_Alloc_hider_ZNSs10_S_compareEjj_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmiEi_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_a_current_test_case_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4swapERS3_for_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestCase*)>_ZNKSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE19_M_get_Tp_allocatorEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE15_M_erase_at_endEPS2__ZNK7testing8TestCase14test_info_listEvRemoveInvalidXmlCharactersnew_allocator >_ZNKSt13_Bit_iterator13_M_const_castEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_fill_assignEjRKS3__ZN7testing32ScopedFakeTestPartResultReporteraSERKS0_ForEach, void (*)(testing::TestEventListener*)>_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_range_checkEj_ZNSt12_Vector_baseISsSaISsEE17_M_create_storageEj_ZNKSs17find_first_not_ofERKSsj_ZN9__gnu_cxx13new_allocatorISsE7destroyEPSs7lldiv_tregs_allocated_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEi_ZN7testing18TestEventListeners23SetDefaultResultPrinterEPNS_17TestEventListenerErandom_access_iterator_tag_M_offset_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4dataEv_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEvuninitialized_copy_ZNK7testing8TestInfo10type_paramEvint_p_cs_precedes_ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE6rbeginEv__uninitialized_copy_a<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*, testing::internal::TraceInfo>bsearch_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_range_checkEjshould_shard_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE12_M_check_lenEjPKc_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEplEimon_grouping_M_deallocate_Node_allocator_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmmEiParseGoogleTestFlagsOnlyImpl_ZNKSs4rendEv_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmmEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EETestCasePassed_offset_ZN7testing28FLAGS_gtest_death_test_styleE_M_replace_safe_ZNK7testing8internal12UnitTestImpl22test_case_to_run_countEvGetCapturedStdout__numeric_traits_integer_ZN7testing8internal24HasNewFatalFailureHelperD2Ev_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEjw_M_beginbasic_istream >_ZN7testing8internal38DefaultPerThreadTestPartResultReporteraSERKS1___kindlow_byte_Destroy >_old_offsetfile_namembstowcs_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE15_M_erase_at_endEPS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4rendEv_ZNKSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE13get_allocatorEvrepeat_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE8max_sizeERKS4__ZNSs7replaceEjjPKcFormatBooloperator<< basic_ios >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE3endEvuninitialized_copy~basic_streambuf_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE7destroyERS3_PS2__ZNKSt18_Bit_iterator_baseeqERKS__cur_column_ZN7testing4Test18HasNonfatalFailureEvGetArgvsForDeathTestChildProcessoperator<< spawnedthrow_on_failure_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE3endEvFormatEpochTimeInMillisAsIso8601_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_leftmostEv_ZNSt11char_traitsIcE6lengthEPKcFormatTestCount_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE23_M_get_insert_equal_posERKS1__ZN7testing8internal7PrintToEaPSo_S_construct_auxOnTestProgramEndreverse_iterator<__gnu_cxx::__normal_iterator > > >_M_value_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4sizeEvpthread_self_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Evsizelist_tests~_Rb_tree_implextension_Tp1ShouldRunTestCase_ZNK7testing10TestResult16death_test_countEv__pred_iter_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE17_S_select_on_copyERKS3__ZNK7testing8internal24InternalRunDeathTestFlag4fileEv__copy_move_b_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv__destroyset_spawned_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5emptyEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8pop_backEv__copy_move_a2exitGTEST_INFOtime_structFileNo_ZN7testing8internal14CapturedStreamaSERKS1_key_compDefaultPrintNonContainerTo_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE8max_sizeERKS5__ZNSt6vectorIiSaIiEE8pop_backEv_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE_ZNSt6vectorIiSaIiEE4backEvcopyvalue_messageGTEST_FATAL_ZNKSs4_Rep12_M_is_leakedEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11lower_boundERKSs_ZN7testing8TestCase10TestFailedEPKNS_8TestInfoEoperator[]_ZN7testing8internal24XmlUnitTestResultPrinter19IsValidXmlCharacterEc_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4swapERS4__ZN7testing10TestResult5ClearEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx13new_allocatorIPKcE7addressERKS2_strncmp_ZNKSs16find_last_not_ofEPKcjj__n2_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEvp_cs_precedeswint_t_ZNK7testing8internal24InternalRunDeathTestFlag8write_fdEv__cxa_guard_releasePrintCharsAsStringTo_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZNSt12_Vector_baseIiSaIiEE12_Vector_impl12_M_swap_dataERS2_mblen__blkcnt_t__are_samebasic_iosGetBoolAssertionFailureMessage_ZN7testing8internal23DefaultDeathTestFactoryD2Evoperator<< decimal_pointkey_compareIsDirconnect_S_select_on_copy_ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv_ZN7testing28FLAGS_gtest_catch_exceptionsE__uninitialized_copy_a_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_get_nodeEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4dataEv_ZN7testing8internal11ScopedTraceC2EPKciRKNS_7MessageE__nlink_tUniversalPrintexpected_value_ZN7testing8internal27PrettyUnitTestResultPrinter13OnTestCaseEndERKNS_8TestCaseE_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4sizeEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE7destroyERS3_PS2__S_ios_fmtflags_end_ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_jAssertionFailure_ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi_M_c__niter_base_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE12_Vector_impl12_M_swap_dataERS5__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmIEi~scoped_ptr_M_n_M_p_ZNSt10_Iter_baseIPN7testing12TestPropertyELb0EE7_S_baseES2__M_t_ZNKSbIwSt11char_traitsIwESaIwEE8max_sizeEv_ZNKSt6vectorISsSaISsEEixEjMakeFileName_ZNKSt5ctypeIcE5widenEc_M_set_length_and_sharable_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_NS4_IPKwS2_EES9___next_Rb_tree_const_iterator~_Vector_base_ZNKSbIwSt11char_traitsIwESaIwEE5beginEv__pfa_line_ZNSt11char_traitsIwE6lengthEPKw_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSt3setISsSt4lessISsESaISsEE8max_sizeEv_ZN7testing8TestCase14set_should_runEb_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEi_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEvdisabled_test_count_M_dataintercept_mode~TestCase_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8capacityEvexpected_predicate_value_IO_buf_endshort unsigned int_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEpLEi_IO_backup_base_ZNSs6appendEPKcj_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tagTestPartFatallyFailed_ZN7testing11Environment8TearDownEv_ZNK7testing8internal10scoped_ptrISsE3getEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_key_reportable_disabled_test_count_M_create_storageconstruct_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5beginEv__copy_move_a2_ZN7testing8internal6String23EndsWithCaseInsensitiveERKSsS3__ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE9constructEPS3_RKS3_iterator_traits_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEpLEi_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8max_sizeEv_ZN7testing8internal13CaptureStdoutEv__normal_iterator > >StringFromGTestEnv__s2_M_insert_equal__ZNKSs17find_first_not_ofEPKcjj_S_ios_seekdir_end_ZN7testing8internal35FLAGS_gtest_internal_run_death_testE_M_disposeGetCurrentOsStackTraceExceptTopreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >ios_base__copy_move_backward_a2_ZNSt17_Rb_tree_iteratorISsEppEv_shortbuf_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE8allocateERS4_j_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EEaSERKS4_kDisableTestFilter_S_goodbitn_sep_by_space_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_create_nodeERKSs_M_insert_timespecAssertHelper_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5countERKS1__ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE12_Vector_impl12_M_swap_dataERS6__ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE10deallocateERS4_PS3_j_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4sizeEvTypeWithSize<8u>kTestsuites_vptr.TestPartResultReporterInterface_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7addressERS2_this_test_name_Destroy*>_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_fill_assignEjRKS1_ChopLowBits_ZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczFDOpenIsNormalizableWhitespaceelapsed_timeParseNaturalNumber_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjjTEST_THREW_EXCEPTION_ZNSt6vectorIN7testing14TestPartResultESaIS1_EEaSERKS3_FormatCxxExceptionMessage_ZN7testing8internal24XmlUnitTestResultPrinter13EscapeXmlTextEPKcnegative_signoperator delete []__miter_basebegin_string_quoteoperator!= >__copy_move_a2showpointtermdouble_ZNK7testing8UnitTest17current_test_infoEvlock__destroy_ZN7testing18TestEventListeners7ReleaseEPNS_17TestEventListenerE_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7addressERS3__ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestEkProtobufOneLinerMaxLength_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmmEiset_statusresult__ZN7testing8internal13FloatingPointIdE8InfinityEvCmpHelperEQallowed_names_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE7destroyERS4_PS3__ZNK7testing14KilledBySignalclEi_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5beginEvresults_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmiEioperator<< _ZNK7testing15AssertionResult15failure_messageEvuse_forklesselement_namefatally_failedallocatorStringStreamToStringFailed_ZN7testing8internal29ParseInternalRunDeathTestFlagEvGeneratecopy_ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE8max_sizeEvpassed_ZN7testing8internal17TestEventRepeater9OnTestEndERKNS_8TestInfoE_ZNKSt13_Bit_iteratordeEv_ZN7testing8internal20SingleFailureCheckerD2Evtuple<>case_listcondition_ZN7testing8internal10scoped_ptrISsE5resetEPSs_ZN7testing8internal5MutexD2Ev~vector_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE7destroyERS5_PS4__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_mbtowccopy_backward_ZNSs4rendEv__cxa_end_catch__normal_iterator > >_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE19_M_get_Tp_allocatorEv__is_move_iterator_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEpLEi_ZNSs7replaceEjjRKSsjjCmpHelperGE_ZN7testing8internal12UnitTestImpl32SuppressTestEventsIfInSubprocessEvmax_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE18_M_fill_initializeEjRKS2___compar_fn_t__copy_move_backward_a*, std::basic_string*>CmpHelperGT_ZN7testing8internal24HasNewFatalFailureHelperaSERKS1_parent_ldivtable_sizetotal_shardsholder__pid_type__pathGTestColoroperator()<__gnu_cxx::__normal_iterator > >_ZN7testing8internal26ThreadLocalValueHolderBaseD0Evoperator<< _ZN7testing8internal14CapturedStream17GetCapturedStringEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4rendEv__align__alloc_traits >_ZN7testing17TestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestEiterator_traits_ZNSt11char_traitsIcE11eq_int_typeERKiS2__ZN9__gnu_cxx13new_allocatorISsE8allocateEjPKv_ZNKSt13_Bit_iteratorixEi_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE8allocateEjPKvstdoutflush >_ZNKSt6vectorISsSaISsEE14_M_range_checkEjmutex_ZN7testing8internal12UnitTestImpl23ListTestsMatchingFilterEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5beginEv~MessageSetValue_ZNK7testing14TestPartResult17nonfatally_failedEv_ZN7testing8internal15ParseStringFlagEPKcS2_PSs~NoExecDeathTest_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE7reserveEj_ZNSs6assignERKSs_ZNSs6appendEjc_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEvregistered___normal_iterator > >_ZNSs4_Rep8_M_cloneERKSaIcEj_ZN7testing23FLAGS_gtest_random_seedE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6assignEjRKS2_st_nlink_ZNK7testing18TestEventListeners22EventForwardingEnabledEvkFilterFlag__copy_move_backward_a2_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE18_M_fill_initializeEjRKS2_basic_stringbuf, std::allocator >_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEEaSERKS6_MSG_PROXY_ZNSt11char_traitsIwE6assignEPwjw_S_compare_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_M_insert_EPSt18_Rb_tree_node_baseS9_RKS1__ZN7testing8internal16BoolFromGTestEnvEPKcb_ZNKSs5rfindEcj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_minimumEPKSt18_Rb_tree_node_base__miter_base_ZN9__gnu_cxx14__alloc_traitsISaIPcEE8allocateERS2_j_ZN7testing8internal24XmlUnitTestResultPrinter21OutputXmlCDataSectionEPSoPKc__uninitialized_copy_a<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*, std::basic_string >_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwjpipe_fd__sighandler_ttz_dsttime_M_put_node_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4sizeEv__max_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEpLEi_S_leftai_family__begfdopen__copy_mfind_first_not_ofhas_new_fatal_failure_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE10deallocateEPS3_jlong double_Vector_impl_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5emptyEvupper_boundDirectoryExistsa_status_ZN7testing8TestCase14test_info_listEvabortfilter_flaga_line_number_ZNK7testing8TestCase6FailedEv_ZNK9__gnu_cxx17__normal_iteratorIPcSsEplEi_Iter_ZNKSs13get_allocatorEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE11_M_allocateEj_ZN7testing17FLAGS_gtest_colorEreverse_iterator<__gnu_cxx::__normal_iterator > > >__k1munmap_ZN7testing8internal17StreamingListener9UrlEncodeEPKclocaleconvUniversalPrintCharArrayScopedPrematureExitFileoperator!= >_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE8allocateERS4_j_ZNK7testing8internal14TestCaseNameIsclEPKNS_8TestCaseE__cxa_free_exception_M_mutatecopy_Rb_tree_decrement_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_leftmostEvkMaxCodePoint1kMaxCodePoint2kMaxCodePoint3kMaxCodePoint4beginwstring_S_construct__pred_iter__copy_move_backward_a__clock_t__fmtfl_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5emptyEvkStackTraceMarker_ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoECmpHelperLE_ZNSt18_Rb_tree_node_base10_S_minimumEPS_rebindp_sign_posn_ZN7testing8internal15TestFactoryBaseaSERKS1_CmpHelperLTinternal_run_death_test_flag_ZNKSt3setISsSt4lessISsESaISsEE5countERKSsallocated_ZN7testing8internal21UniversalTersePrinterIPKcE5PrintES3_PSos2_expression_ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT__Rb_tree, std::less, std::allocator >_S_on_swapfirst_fixture_id_ZN7testing4Test14RecordPropertyERKSsS2___copy_move_a__copy_move_backward_a2_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE10deallocateERS5_PS4_j_ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs__uninit_copy_ZN7testing14IsNotSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEpLEi_M_get_nodeflush__mempositive_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4swapERS4__ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE10value_compEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE15_M_erase_at_endEPS3_valuetest_part_results_name_CmpHelperNEmessage_TestPartNonfatallyFailed_S_uppercase_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E5valueEgrouping_ZNK7testing8TestCase10should_runEvcopy_backwardGetTimeInMillis_ZNSt6vectorIPN7testing8TestInfoESaIS2_EEaSERKS4__ZNKSt6vectorIiSaIiEE6rbeginEv_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEplEiresult_typeoperator<< >_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcE_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5emptyEvflip_ZN7testing8TestInfo3RunEvoperator- >_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_fill_assignEjRKS2__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmiEiFLAGS_gtest_also_run_disabled_testsaddressHasNewFatalFailureHelperlconvregfreeflag_enda_regexReadEntireFile_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEptEv_ZNKSbIwSt11char_traitsIwESaIwEE4sizeEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5frontEvmkdir_ZNKSbIwSt11char_traitsIwESaIwEE3endEv_ZNSt6vectorISsSaISsEE6insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSsDIEDkQuoteBegin_ZNSt12_Vector_baseIPcSaIS0_EE19_M_get_Tp_allocatorEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE10deallocateEPS4_jeq_int_type_ZNK7testing8internal13FloatingPointIdE8sign_bitEvgtest_output_flagnpos_ZN7testing8TestCase10TestPassedEPKNS_8TestInfoE_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE6rbeginEvabs_error_expr_ZNSt6vectorISsSaISsEE5frontEvHasFatalFailure_ZNSt18_Rb_tree_node_base10_S_maximumEPKS_strdupinternal2__uninitialized_copy_aoperator- >_ZN7testing4Test10HasFailureEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmiEi_ZNKSs6_M_repEv__uninit_copytext_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE8allocateEjPKv__normal_iteratorpost_flag_parse_init_performed__ZN7testing8internal32FormatEpochTimeInMillisAsIso8601ExTestPropertyKeyIs_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE7releaseEv_ZN7testing8internal17g_executable_pathEParameterizedTestCaseInfoBasestack_grows_down_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11upper_boundERKS1_posix_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE3endEvvector_ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT_allocator_ZNK7testing8internal9MutexBase10AssertHeldEv_ZN7testing8internal17TestEventRepeater15OnTestCaseStartERKNS_8TestCaseE_M_allocate_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSs6rbeginEvnum_readtest_countpstr_M_erase_aux_Construct_ZNSt6vectorIiSaIiEE9push_backERKi__minOutputXmlAttribute_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6rbeginEvkTestShardStatusFile_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE3endEv__ownerSetup_should_be_spelled_SetUpoperator<< _ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal17GetCapturedStreamEPPNS0_14CapturedStreamE_Construct, char const*>_ZNKSbIwSt11char_traitsIwESaIwEE7_M_iendEv_ZN7testing8internal11ShouldShardEPKcS2_b_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE17_M_create_storageEj_ZN7testing10TestResultC2Ev_ZNSs4_Rep15_M_set_sharableEvsa_family_t_M_bump_up_ZN7testing8internal18StreamableToStringIiEESsRKT__ZN7testing8internal17TestEventRepeater18OnTestIterationEndERKNS_8UnitTestEi_ZNSbIwSt11char_traitsIwESaIwEE5beginEvPredicateswapiterator_traits_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5emptyEv_ZSt16__throw_bad_castv_ZNK7testing8internal12UnitTestImpl16total_test_countEv_vtable_offsetSetUpTestCaseFuncTestResultwctrans_t_ZNK7testing8UnitTest11random_seedEv__addressofOVERSEE_TEST_ZNKSt3setISsSt4lessISsESaISsEE8key_compEv_ZN7testing8internal24XmlUnitTestResultPrinterC2EPKcdot_extension_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_set_forwarding_enabled_M_impl_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Evsi_sigvalvwprintf_ZN7testing8TestInfo26increment_death_test_countEv_M_range_check_ZNSt23_Rb_tree_const_iteratorIPKcEppEipremature_exit_filepath~GTestFlagSaver_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5_CheckedDowncastToActualType::ValueHolder, testing::internal::ThreadLocalValueHolderBase>_ZNSt23_Rb_tree_const_iteratorIPKcEppEv_ZNK7testing8internal12UnitTestImpl12elapsed_timeEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8key_compEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE8capacityEv_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7addressERKS3__ZNK7testing15AssertionResultcvbEvCountIf, bool (*)(const testing::TestInfo*)>_ZNK7testing8TestInfo14test_case_nameEvPassed_ZN7testing8internal2RE9FullMatchERKSsRKS1__ZN7testing8internal13FloatingPointIdE38DistanceBetweenSignAndMagnitudeNumbersERKyS4__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE18_M_fill_initializeEjRKS2__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEdeEvpointerkStdOutFileno_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEEaSERKS5__ZNKSt6vectorISsSaISsEE8capacityEv_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS3_S3_forward_iterator_tagfastst_modean_index_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8capacityEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE8allocateERS4_jiterator_traits_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE_ZNSt6vectorISsSaISsEE8pop_backEv_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEplEi_ZNKSt6vectorIiSaIiEE14_M_range_checkEjtest_result_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEaSERKS5__InputIterator_S_skipws_GLOBAL__sub_I_gtest_all.ccdest_ptrClosepthread_getspecificTestFactoryBase_ZNKSt6vectorISsSaISsEE8max_sizeEv_ZNK7testing8internal12UnitTestImpl17current_test_infoEv_ZN9__gnu_cxx14__alloc_traitsISaIiEE10deallocateERS1_Pij__copy_move_backward_a2_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__M_leftmost_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE6rbeginEv_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8max_sizeEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8pop_backEv_ZN7testing8TestCase12TestDisabledEPKNS_8TestInfoE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEixEibits__ZN7testing22EmptyTestEventListenerD0Ev__uninitialized_move_if_noexcept_a >allocator_ZN7testing17TestEventListeneraSERKS0___uninit_copy_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4swapERS5__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE24_M_get_insert_unique_posERKSs_M_get_insert_hint_equal_pos_M_move_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_rightEPSt18_Rb_tree_node_base__niter_base_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv_ZNSs13_S_copy_charsEPcS_S__ZNSt10_Iter_baseIPPN7testing17TestEventListenerELb0EE7_S_baseES3__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6resizeEjS1__ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEE4baseEvoperator<< >_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_jnext_seed_ZNKSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE19_M_get_Tp_allocatorEv_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_range_checkEjcerrdefault_result_printer_pfile_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag_ZN9__gnu_cxx13new_allocatorIPKcE10deallocateEPS2_jtest_case_count_ZN7testing8internal24XmlUnitTestResultPrinter9EscapeXmlERKSsbwctob_ZNKSt6vectorISsSaISsEE5beginEv_IO_save_end_ZNK7testing8internal12UnitTestImpl19disabled_test_countEvst_gidrelative_path__are_same_ZN7testing8internal9DeathTest11LastMessageEv__normal_iterator > >_ZN7testing8internal12UnitTestImpl20set_catch_exceptionsEb_ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE__ioinit_ZNKSs8capacityEv_DestroykFractionBitCount__gid_t__are_same, std::allocator >*, std::basic_string, std::allocator >*>new_allocatorFClose_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_bIsUtf16SurrogatePair_ZNK7testing8UnitTest17current_test_caseEv_ZNSs5eraseEjj_ZNKSs4dataEv_ZN7testing8internal18OsStackTraceGetteraSERKS1_construct_ZNSt23_Rb_tree_const_iteratorISsEppEi_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEEaSERKS4_PrintAsCharLiteralTo_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmIEistr_len_ZNSt23_Rb_tree_const_iteratorISsEppEv__uninitialized_move_if_noexcept_a >UniversalPrint >ClearNonAdHocTestResult_ZNKSt23_Rb_tree_const_iteratorIPKcEptEv_ZN7testing17TestEventListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal6String15FormatIntWidth2Eioperator== >_ZNKSs6lengthEvSetDefaultXmlGenerator_ZN7testing8internal16WideStringToUtf8EPKwiwcsftime_ZNKSs8max_sizeEv~DefaultGlobalTestPartResultReporter_FwdIterator_ZN7testing8internal14CmpHelperSTREQEPKcS2_PKwS4__ZN7testing8internal6IsTrueEbtear_down_tc_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE17_M_create_storageEj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6resizeEjS2__ZN7testing8internal17StreamingListener6SendLnERKSs_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEplEi_ZNK7testing8TestCase19disabled_test_countEv_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_leakedEv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZNSt17_Rb_tree_iteratorISsEmmEi_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_maximumEPSt18_Rb_tree_node_base_ZN7testing8TestCase18GetMutableTestInfoEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEplEiBaseholder_base_ZNSt17_Rb_tree_iteratorISsEmmEv_ZNSt12__alloc_swapISaISsELb1EE8_S_do_itERS0_S2_argumentpartial_regex__ZN7testing8internal19TypedTestCasePState11AddTestNameEPKciS3_S3_ConcatPaths_ZN7testing8internal15TestFactoryBase10CreateTestEv__pointer_ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Evtestsnegative_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE10_S_on_swapERS5_S7__ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE9constructEPS3_RKS3__S_boolalpha_ZNSbIwSt11char_traitsIwESaIwEE6assignEjw_ZNK7testing8internal12UnitTestImpl17test_to_run_countEvtest_shard_file__uninit_copy__initialize_pAppendMessage_ZN9__gnu_cxx14__alloc_traitsISaISsEE10_S_on_swapERS1_S3_targetmutex_arg_string_ZN7testing8TestCase12ShuffleTestsEPNS_8internal6RandomE_ZNK7testing8UnitTest17test_to_run_countEv_ZN7testing8internal27OsStackTraceGetterInterface17CurrentStackTraceEii__copy_move_backward_anew_allocatortest_info_listHONOR_SHARDING_PROTOCOL_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4backEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4rendEvelapsed_time__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4dataEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4backEv_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_execveg_in_fast_death_test_childTestPropertiesAsXmlAttributesdummy__ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev_ZN7testing8internal20StringStreamToStringEPSt18basic_stringstreamIcSt11char_traitsIcESaIcEEstream_name_ZN9__gnu_cxx13new_allocatorIiE10deallocateEPij_Pointer_Rb_tree_insert_and_rebalance_ZNSt11char_traitsIwE6assignERwRKwuninitialized_copyin_subprocess_for_death_testpthread_mutexattr_t_ZNK9__gnu_cxx13new_allocatorIPKcE7addressERS2_for_each > >, void (*)(testing::Environment*)>_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmIEifound_Destroy_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEdeEv_ZN7testing8internal29ParameterizedTestCaseInfoBase13RegisterTestsEvShouldUseColorcopy_backwarditerator_categoryPrintXmlUnitTest_S_eofbit_ZN7testing8internal17TestEventRepeater16OnTestPartResultERKNS_14TestPartResultEoperator<< _Iter_predfailed_test_countassertion_result_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_valueEPKSt13_Rb_tree_nodeISsE__nusersconst_iterator_ZNKSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE13get_allocatorEv_M_capacityTestCaseoperator== >~Init_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_S_leftEPKSt18_Rb_tree_node_baseFILE_filenoDoubleLEoperator|=severity_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EEixEj_ZNSt11char_traitsIcE6assignERcRKcCaptureStderrallocator_ZNK7testing8internal8FilePath19RemoveDirectoryNameEvCreateTest~TestPartResult_ZNK7testing8internal13FloatingPointIdE6is_nanEvoperator<< _ZN7testing8internal18StreamableToStringIPcEESsRKT__ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmIEi_ZN7testing8internal9DeathTest10AssumeRoleEv_ZNKSt6vectorIiSaIiEE2atEjHasNonfatalFailureFormatWordListvector >filter_outcome_ZNSt6vectorIiSaIiEE5clearEv_M_color_ZN7testing8TestCase13ShouldRunTestEPKNS_8TestInfoE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEixEi_ZNSbIwSt11char_traitsIwESaIwEEaSERKS2__ZN7testing8internal8GTestLog9GetStreamEv_ZN7testing8internal27OsStackTraceGetterInterfaceaSERKS1_internal_flag_ZNSt12_Vector_baseISsSaISsEE11_M_allocateEjignore_sigprof_actionOnTestIterationEnd_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5frontEvscoped_ptr_ZNKSs3endEv_ZNK7testing8internal8FilePath6stringEv_ZNSt6vectorIPcSaIS0_EE6assignEjRKS0__ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE10deallocateEPS3_j_ZN7testing8internal13FloatingPointIfE38DistanceBetweenSignAndMagnitudeNumbersERKjS4_getpagesize_ZNKSt6vectorIPcSaIS0_EE14_M_range_checkEj_ZNSt6vectorIPcSaIS0_EE14_M_fill_assignEjRKS0__ZNK7testing8internal10scoped_ptrISsEdeEv_ZNSo5writeEPKci_ZN7testing22FLAGS_gtest_list_testsE_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_jctype__socklen_t_ZNSt11char_traitsIwE4moveEPwPKwj_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEplEiFloatLEStreamWideCharsToMessage_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6resizeEjS1__ZN7testing10TestResult26increment_death_test_countEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEoperator==, std::allocator >partial_regexsival_ptrHasSameFixtureClass_Destroyproperty_name_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE2atEj_M_refcountis_runnable_ZN7testing8internal17TestEventRepeater22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZNK7testing14TestPartResult4typeEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEplEi~TestInfo__dev_t_Base_ptr_ZN7testing8internal17StreamingListener12SocketWriterD2Ev_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_lower_boundEPSt13_Rb_tree_nodeISsES8_RKSsIsTrue_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE19_M_get_Tp_allocatorEvfilter_M_bump_downfull_pathnameEXECUTE_TESTMSG_ERRQUEUE__uninitialized_copy_a*, std::basic_string*, std::basic_string >new_allocator_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsES7__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZN7testing8internal20ExitedUnsuccessfullyEineedle_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4sizeEv_ZN7testing7MessagelsEPKw_Bit_iterator_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmIEi_ZNK7testing8UnitTest16total_test_countEvper_thread_test_part_result_reporter_fseek~DeathTestFactory_ZN7testing18TestEventListenersC2Evbasic_stringstream, std::allocator >ptrdiff_t_ZN7testing8internal14ShouldUseColorEb_ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EEset, std::allocator >_Distance_archF_OWNER_PIDwmemmove~TestResultset_outcome__destroy__alloc_traits >_ZNK9__gnu_cxx17__normal_iteratorIPcSsEmiEi_ZSt24__throw_out_of_range_fmtPKczbasic_iostream_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_GetLastErrnoDescriptionwcrtombwstrclear_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE3endEv_ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE9constructEPS4_RKS4_failure_ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE10deallocateEPS4_j__check_facet >_ZN7testing8internal17TestEventRepeater18OnTestProgramStartERKNS_8UnitTestE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEplEi_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv__espins_ZNSsaSEPKcdefault_result_printer_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEplEi_ZNSbIwSt11char_traitsIwESaIwEE3endEvrm_eo_ZN7testing8TestCase19ClearTestCaseResultEPS0_operator<< _ZNSs14_M_replace_auxEjjjcWriteToShardStatusFileIfNeeded_Rep_baseenv_varvalue_holderfirst_test_info_ZNSspLEckPrintTimeFlag_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE6insertESt23_Rb_tree_const_iteratorIS1_ERKS1__ZN7testing10TestResult20ClearTestPartResultsEv__copy_move_backward_anew_allocator, std::allocator > >MSG_FINreverse_iterator<__gnu_cxx::__normal_iterator > > >st_atim_ZN7testing11Environment5SetUpEvst_dev_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmIEi__is_signedcountsCloseConnection__state_ZNKSt3setISsSt4lessISsESaISsEE4sizeEv_ZN7testing18TestEventListeners6AppendEPNS_17TestEventListenerEfirst_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE15_M_erase_at_endEPS2__ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjjInit_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE7pointerEvGetTestCaseName_ZNKSt14_Bit_referenceeqERKS__ZNKSbIwSt11char_traitsIwESaIwEE5emptyEvMSG_CTRUNC__normal_iterator > >_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEptEv__alloc_traits >_ZN7testing8internal2REaSERKS1__ZN7testing8internal12UnitTestImpl17gtest_trace_stackEvnum_failuresenvironments_Delete__copy_move_b_M_insert_ZN9__gnu_cxx13new_allocatorIwE10deallocateEPwj_ZN7testing8internal10scoped_ptrIKSsEaSERKS3__ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE7destroyERS4_PS3_PrintTestPartResult__copy_move_backward_a2*, std::basic_string*>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11equal_rangeERKSsgtest_ar__Identity, std::allocator > >AlwaysTrueoperator<< >set_current_test_infoTEST_DID_NOT_DIEwcscollopenmode_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_leftmostEvvalue_~TestPropertyoperator!= >_ZN7testing8internal27FormatTimeInMillisAsSecondsEx_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13_Rb_tree_implIS3_Lb0EE13_M_initializeEv__last_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEdeEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEptEv_ZNK7testing8internal12UnitTestImpl30reportable_disabled_test_countEvOnTestCaseStart__prioritydeath_test_style_kCatchExceptionsFlag_ZNSs12_S_constructEjcRKSaIcE__addressofuninitialized_copy*>ForkingDeathTestdeath_test_factory_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE8max_sizeERKS3_OsStackTraceGetterInterface_ZNSs7_M_moveEPcPKcj__copy_move_backward_a_ZNSt18_Rb_tree_node_base10_S_minimumEPKS_ParameterizedTestCaseRegistry_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13_M_deallocateEPS3_j__time_t_ZN7testing8internal17StreamingListener20AbstractSocketWriteraSERKS2_signumMutexpathname__miter_base*>_ZN7testing8TestCase3RunEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_jj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_valueEPKSt18_Rb_tree_node_baseFloatingPoint_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE17_S_select_on_copyERKS4_fgetwc_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4swapERS5__ZN7testing8internal12UnitTestImpl18GetMutableTestCaseEi_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4rendEv_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6rbeginEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4dataEvrelease_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZNK7testing8internal12UnitTestImpl26successful_test_case_countEvnew_allocator_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEiParseBoolFlagParseInt32OnTestStartread_fd__ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEistrstrcolor__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEv_ZNSs6resizeEj__vtbl_ptr_typeGTestIsInitialized_Is_pod_comparator__destroy_ZN7testing19FLAGS_gtest_shuffleEGetInjectableArgvsFormatDeathTestOutput_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11equal_rangeERKSs_ZNSbIwSt11char_traitsIwESaIwEEaSEwunary_function, std::allocator >, std::basic_string, std::allocator > >puts_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_S_leftEPSt18_Rb_tree_node_base__gnuc_va_listdeath_test_factory__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_beginEv__builtin_memmoveGetOrCreateValue_ZNK7testing8internal8FilePath15DirectoryExistsEvThreadLocal_ZN9__gnu_cxx14__alloc_traitsISaIPcEE7destroyERS2_PS1__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE3endEv_ZNSt23_Rb_tree_const_iteratorIPKcEmmEiAbortSingleFailureChecker_ZN7testing11IsSubstringEPKcS1_RKSsS3__flags2_ZNSt23_Rb_tree_const_iteratorIPKcEmmEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_get_Node_allocatorEv~HasNewFatalFailureHelper_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE8max_sizeERKS4__flagsthisbasic_ostream >_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4dataEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEplEiclose_fd_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEikDeathTestInternalErrorrandom___is_move_iterator_ZN7testing8internal30ReportFailureInUnknownLocationENS_14TestPartResult4TypeERKSs_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE3endEv_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7addressERKS4__ZNK7testing8UnitTest6FailedEv_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE8allocateEjPKvtest_casesrcfile__miter_basewmemchr_ZN7testing18TestEventListeners8repeaterEvIsPrintableAsciiGetTypeId_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmiEiiswctypethis_is_TEST_ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv_Rb_tree_iterator__builtin_strlen_ZNKSs4copyEPcjj_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE10deallocateERS4_PS3_j__is_normal_iterator, std::allocator >*>__uninitialized_copy_ZN7testing8internal15NoExecDeathTest10AssumeRoleEv_ZN7testing15AssertionResultaSERKS0__ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEplEicatch_exceptions__ZN7testing11Environment5SetupEv__ssize_t__niter_base<__gnu_cxx::__normal_iterator > >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE8max_sizeEv_InIteratorseedgtest_msgallocator_ZN7testing8internal16UniversalPrinterIxE5PrintERKxPSo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_chdirsival_intstrtod_ZNK7testing8TestCase21successful_test_countEvStreamableToString_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjReportInvalidTestCaseTypeUnsignedChar_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE7releaseEv_ZN7testing8internal17StreamingListenerD2Ev_ZNKSs16find_last_not_ofEcjPatternMatchesStringgtest_retval_ZN7testing8internal18StringFromGTestEnvEPKcS2_Fromstrlen_ZN7testing8internal13FloatingPointIfE15ReinterpretBitsEjstack_top_ZN7testing8internal38DefaultPerThreadTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultEPrintOnOneLinebasic_iostream >_ZNKSbIwSt11char_traitsIwESaIwEE4findEwj_ZNSs6insertEjjc__fmtkFractionBitMaskUnitTestImpl_ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi_ZNSbIwSt11char_traitsIwESaIwEE4_Rep13_M_set_leakedEv_ZN7testing8internal29ParameterizedTestCaseRegistry13RegisterTestsEv_ZNKSt6vectorIPcSaIS0_EE4rendEvkSuccessOutputXmlCDataSectionGetCapturedStreamRemoveFileName__uninitialized_move_if_noexcept_a >_ZNSbIwSt11char_traitsIwESaIwEE2atEj_ZNSbIwSt11char_traitsIwESaIwEEixEj_ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKw_ZNSt23_Rb_tree_const_iteratorISsEmmEiparse_success_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwS8_DeathTestAbort_ZNSt23_Rb_tree_const_iteratorISsEmmEvcoloncolor__uninitialized_move_if_noexcept_a >_vptr.Environment_Destroybasefield_ZNSt11char_traitsIcE7compareEPKcS2_j_ZN7testing8internal14CmpHelperSTREQEPKcS2_S2_S2__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4backEvreverse_iterator<__gnu_cxx::__normal_iterator > > >RemoveDirectoryName_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperES3__Rep_typeis_disabled~basic_ios__niter_base_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE13_M_deallocateEPS2_jcontentShouldRunTestReportTestPartResultcurrent_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE2atEj__normal_iterator > >_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmiEi_ZNKSt23_Rb_tree_const_iteratorISsEdeEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE6rbeginEv_M_fill_insertbasic_stringbufAddTestName_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEvnothrow_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmiEiis_spawnedoperator<< _ZN7testing8internal23DefaultDeathTestFactoryD0Evvector >_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2_Argvoperator<< _ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestPartResultERKNS_14TestPartResultE_ZSt19__throw_logic_errorPKc__prec__pred_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_beginEv_ZN7testing4Test16TearDownTestCaseEv_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE19_M_get_Tp_allocatorEvSecretSOCK_DCCP_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEptEv_Ios_OpenmodeDelete_ZN7testing4Test5SetUpEv_ZN7testing18TestEventListenersaSERKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_put_nodeEPSt13_Rb_tree_nodeISsE_ZNSs6appendEPKc_S_cur_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_range_checkEjshowposSetUpTestCasestdin__pthread_slist_t_ZNKSs4_Rep12_M_is_sharedEv_ZNSt11char_traitsIcE12to_char_typeERKi_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE12_M_check_lenEjPKc_ZNSolsEPFRSt8ios_baseS0_E_ZN7testing15AssertionResultlsEPFRSoS1_E_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseEPKS1_S9_GetFileSize_ZNSt6vectorISsSaISsEE4rendEv_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE8allocateERS3_j_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc_ZNKSt23_Rb_tree_const_iteratorISsEeqERKS0__ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZNK9__gnu_cxx13new_allocatorIiE8max_sizeEvvfwscanf_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwjj_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1_reverse_iterator<__gnu_cxx::__normal_iterator > > >_ZSt17__throw_bad_allocv_ZNKSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE13get_allocatorEvdummyatoll_ZNSo9_M_insertImEERSoT_num_selected_tests_ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwjjoperator<< _ZNSt12_Vector_baseIiSaIiEE17_M_create_storageEjfind<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string >_ZNKSt6vectorIiSaIiEE4backEvbuffershort intsnprintf_ZNKSbIwSt11char_traitsIwESaIwEE5c_strEvwmemcpy~FilePathcurrent_test_info_ZNK7testing8internal13DeathTestImpl8write_fdEvForEach, void (*)(testing::Environment*)>_ZN7testing8internal13FloatingPointIdE15ReinterpretBitsEy_Iter_basefind_last_not_of_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6rbeginEv_ZNK7testing10TestResult12elapsed_timeEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_rootEv_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE3endEvuninitialized_copy<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*>ThreadLocalValueHolderBase__normal_iterator, std::allocator > >sa_flagstestoperator<< GetCapturedStderr_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_upper_boundEPKSt13_Rb_tree_nodeISsES9_RKSs_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refdataEvNoExecDeathTest_ZNSt6vectorISsSaISsEE5beginEv_ZNKSs8_M_checkEjPKc_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6resizeEjS3__vptr.DeathTestFactorybasic_istream_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE11_M_allocateEj_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEixEi__exchange_and_add_dispatchReseed_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEptEvcopy_backwardconstructParseFlagValue_ZN7testing8internal24XmlUnitTestResultPrinterD0Ev_ZNK9__gnu_cxx17__normal_iteratorIPKcSsE4baseEv_Construct, std::basic_string >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE2atEj_ZNSbIwSt11char_traitsIwESaIwEE4rendEv_ZN7testing8internal18CmpHelperSTRCASENEEPKcS2_S2_S2__ZN7testing8internal17GetCapturedStdoutEv__iterator_category<__gnu_cxx::__normal_iterator > >PushGTestTrace_ZN7testing8internal17TestEventRepeater24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN9__gnu_cxx13new_allocatorIcE8allocateEjPKvAssertionResult_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5beginEvuninitialized_copy_ZN9__gnu_cxx14__alloc_traitsISaISsEE17_S_select_on_copyERKS1_operator- >dup2rbegin__gthread_active_pnames_ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKwj_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEE4baseEv_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE12_Vector_impl12_M_swap_dataERS5_CountIf, bool (*)(const testing::TestCase*)>_sigchldoutput_file_vptr.ParameterizedTestCaseInfoBase__uid_tGTEST_SHARD_STATUS_FILEerrorPrintXmlTestCase_ZN9__gnu_cxx17__normal_iteratorIPKcSsEppEicode_point_ZNSs6assignERKSsjj_ZNKSt6vectorIiSaIiEE4sizeEv_ZNSt10_Iter_baseIPN7testing8internal9TraceInfoELb0EE7_S_baseES3_mon_thousands_sep_ZN7testing8UnitTest13PopGTestTraceEv_ZN9__gnu_cxx17__normal_iteratorIPKcSsEppEv_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EEixEj_ZNK7testing18TestEventListeners22default_result_printerEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmiEiLogToStderrwcscatUponLeavingGTest_Vector_base >_ZNSo9_M_insertIxEERSoT__ZN7testing8internal9DeathTest27set_last_death_test_messageERKSs_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_MutexLock_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4backEvrepeater__Const_Base_ptroperator!= >getcwdSendLn_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT__ZNSt3setISsSt4lessISsESaISsEEaSERKS3_set_os_stack_trace_getter_ZNKSt23_Rb_tree_const_iteratorISsEneERKS0__ZN7testing8internal15UnitTestOptions27GetAbsolutePathToOutputFileEv_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEE4baseEv__normal_iterator > >pair, bool>repeaterbasic_stringstatus_valuePrintTestPartResultToStringa_name_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSsixEj_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1__ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv_ZN7testing8internal21UniversalTersePrinterIxE5PrintERKxPSo_ZN7testing8internal14GetThreadCountEvreplace_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EjwRKS1_XmlUnitTestResultPrinter_ZNK9__gnu_cxx17__normal_iteratorIPcSsEptEv_ZN7testing8internal2RE4InitEPKc_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7addressERKS3_AppendUserMessageUniversalTersePrinter_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13get_allocatorEv_ZNKSs7compareEjjPKc__suseconds_t_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmiEi_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5clearEvshuffle_RandomAccessIterator_ZN9__gnu_cxx14__alloc_traitsISaIiEE7destroyERS1_Pi_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIS3_S2_EES6_PrintColorEncoded_M_is_sharediterator_traits_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmiEi_ZNSt6vectorIiSaIiEE18_M_fill_initializeEjRKi_ZNSt6vectorISsSaISsEE14_M_fill_assignEjRKSsscoped_ptr_ZN7testing8internal17kStackTraceMarkerE_ZN7testing8internal12UnitTestImpl11GetTestCaseEPKcS3_PFvvES5_premature_exit_filepath__S_constructparameterized_test_registry_ZN7testing8internal6Random8GenerateEj_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEi_Vector_baseiterator_traits<__gnu_cxx::__normal_iterator > > >_ZN7testing18FLAGS_gtest_filterE_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmiEi__copy_m_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEva_message__are_same_ZNSt6vectorIPcSaIS0_EE18_M_fill_initializeEjRKS0_TestCaseNameIs_M_insert_M_mask_ZN7testing8internal10scoped_ptrIKSsE7releaseEvis_reportableTestReportableDisabled_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEE4baseEvreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE10deallocateEPS3_j_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj_ZN7testing4Test3RunEvIsSubstring_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tagallocator_typeSetUp__comp_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE7pointerEvpthread_mutex_lockassignrandom_seed__ZN7testing8internal15UnitTestOptions15GetOutputFormatEv_ZSt4cerr_ZNSbIwSt11char_traitsIwESaIwEE7_M_dataEPwfilefillCurrentOsStackTraceExceptTop_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZN7testing8internal35DefaultGlobalTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE17_M_create_storageEj_ZN7testing15AssertionResultlsIPKcEERS0_RKT__ZNSt12_Vector_baseIPcSaIS0_EE13_M_deallocateEPS0_j_exit_ZN7testing11IsSubstringEPKcS1_PKwS3_DistanceBetweenSignAndMagnitudeNumbers_ZNK7testing14TestPartResult6failedEvImplicitlyConvertible_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6assignEjRKS2__ZN7testing8internal27PrettyUnitTestResultPrinter16PrintFailedTestsERKNS_8UnitTestE_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE12_M_check_lenEjPKcerror_num_M_initialize_dispatch10regmatch_t_ZN7testing17TestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing19TestPartResultArray6AppendERKNS_14TestPartResultE_S_red~ThreadLocalValueHolderBase_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE10_S_on_swapERS3_S5__ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7addressERS2__ZN7testing10TestResult16set_elapsed_timeExarguments_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxEoperator!= >_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5beginEvgtest_error_ZNSbIwSt11char_traitsIwESaIwEEpLERKS2__ZN7testing8internal20DoubleNearPredFormatEPKcS2_S2_ddd_ZN7testing8internal8GTestLogaSERKS1__ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKcClearTestCaseResult_M_insert_aux~TraceInfo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_state__S_adjustfield~AssertHelperData_ZNSt10_Iter_baseIPPN7testing8TestInfoELb0EE7_S_baseES3_ai_protocol_ZN7testing8internal16UniversalPrinterISbIwSt11char_traitsIwESaIwEEE5PrintERKS5_PSoTestInfo_Iter_base_vptr.OsStackTraceGetterInterfacefind_ZN7testing8internal8FilePath12MakeFileNameERKS1_S3_iPKc_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE17_S_select_on_copyERKS4__ZN7testing8internal8FilePath13GetCurrentDirEvparsedgetenv_ZNSt17_Rb_tree_iteratorIPKcEppEiParseGoogleTestFlagsOnlyImplintercept_mode__ZN7testing8internal10SkipPrefixEPKcPS2__Bit_iterator_base_ZNSt17_Rb_tree_iteratorIPKcEppEv_ZNK7testing12TestProperty5valueEv__wide_IO_read_endHandleExceptionsInMethodIfSupported_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEptEvwcschrIsSubstringPred >__builtin_va_list_ZNKSt3setISsSt4lessISsESaISsEE13get_allocatorEv__cxa_allocate_exceptionoperator new []val2_ss_ZNSt14_Bit_referenceaSEbpathname__ZNKSt6vectorISsSaISsEE5emptyEvstream_result_to__copy_m_S_minimumnew_allocator_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE3getEvIsXDigit_IO_FILE_ZN7testing8internal24InternalRunDeathTestFlagaSERKS1_uninitialized_copy_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4rendEv_ZN7testing8internal24GetCurrentExecutableNameEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE2atEj__statbufis_previous_hex_ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13get_allocatorEvservinfo__false_typewcsrchr__uninitialized_move_if_noexcept_a*, std::basic_string*, std::allocator > >_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE8allocateEjPKv__is_null_pointerbiased1biased2_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_jValueHolder_ZNK7testing8internal13DeathTestImpl9statementEv_ZNSt6vectorISsSaISsEEaSERKS1_PrintWideStringTo_Vector_base >bool_valuepattern_ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE_ZNKSt17_Rb_tree_iteratorISsEptEv_ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZNKSt13_Bit_iteratorplEi__is_move_iterator__alloc_traits >IsATTY~basic_stringstream_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7destroyEPS2__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13_M_clone_nodeEPKSt13_Rb_tree_nodeISsE_M_const_castlldiv_ZN7testing8internal9MutexBase4LockEv_ZN7testing8internal12UnitTestImpl41GetTestPartResultReporterForCurrentThreadEvstatus_ch_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_M_endEvSuppressEventForwardingoperator<< >adjustfield_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_fill_assignEjRKS1__ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjwctomb_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_S_keyEPKSt18_Rb_tree_node_baseIsSubstringImplsi_utimeUniversalTersePrinter_Key_compare_ZN7testing8internal6String15ShowWideCStringEPKwswscanfwcscspn_ZN7testing8internal9DeathTest6PassedEbhaystack_exprtest_case_nameformatiterator_traitsDISABLED_*:*/DISABLED_*Clear_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___uninitialized_copy_a_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmiEi_Funct_ZNK7testing8internal13FloatingPointIfE4bitsEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEv__uninit_copy<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*>_S_showbase~basic_istreamconstruct_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5emptyEvsigval_t_ZNKSt14_Bit_referencecvbEvsi_bandsigvalGetUnitTestImpl_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE8allocateERS4_jwcscmpsyntax_ValueT_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEptEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_M_insert_EPSt18_Rb_tree_node_baseS7_RKSsiterator_traitsGetTestCaseTypeIdstrerrorstderr_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5clearEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2__ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEptEvstreamsize_S_max_size_lock_ZN7testing7MessagelsEb__uninit_copy_ZN9__gnu_cxx13new_allocatorIPcE8allocateEjPKv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEE4baseEvInterceptMode10__sigset_t_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5frontEv_ZNSs12_S_empty_repEv_ZNSs6assignEjc_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8pop_backEv_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE8allocateEjPKvnum_disabled_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EEaSERKS4__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE9push_backERKS2__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZN7testing8internal17StreamingListener12SocketWriter4SendERKSs_ZNSolsEPKv_ZNK7testing8internal29ParameterizedTestCaseInfoBase15GetTestCaseNameEv_ZN7testing8internal17TestEventRepeater27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal13DeathTestImpl11set_read_fdEi_ZNK7testing15AssertionResultntEvGetCurrentDir__is_normal_iterator_ZNSt18_Bit_iterator_base7_M_incrEivswscanf_ZNSo9_M_insertIdEERSoT__ZNK7testing14TestPartResult7summaryEv__normal_iterator > >_ZNSs5beginEvkMaxStackTraceDepth_ZNSs13_S_copy_charsEPcPKcS1_IGNORE_SHARDING_PROTOCOL_chainDefaultDeathTestFactoryfor_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestInfo*)>_ZNK7testing8TestCase16total_test_countEv_ZNSt6vectorISsSaISsEE4swapERS1__ZNSs6rbeginEvuninitialized_copy_ZNK7testing8UnitTest12elapsed_timeEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZN7testing8internal27PrettyUnitTestResultPrinter13PrintTestNameEPKcS3_wcstollwcsxfrm_ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_jdistance_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7destroyEPS2__ZNKSt9_IdentityISsEclERSsleftfmtflagskTestsuitewcscpy_S_maximum_ZNKSt3setISsSt4lessISsESaISsEE10value_compEv_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE12_M_check_lenEjPKc_ZN7testing11IsSubstringEPKcS1_S1_S1_fflushpair, std::allocator > >, std::_Rb_tree_const_iterator, std::allocator > > >vectorst_blksize_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6rbeginEvkListTestsFlagreverse_iterator, std::allocator > > >_ZNK7testing12TestProperty3keyEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEE4baseEv_M_assign_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refcopyEv_ZN9__gnu_cxx14__alloc_traitsISaISsEE10deallocateERS1_PSsj_ZNKSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE19_M_get_Tp_allocatorEv~PrettyUnitTestResultPrintersa_handlerg_linked_ptr_mutex_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_rootEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4rendEvkMaxRandomSeed_ZN7testing8internal12UnitTestImplaSERKS1_PrintAsCharLiteralTo_ZN7testing8internal10AlwaysTrueEv__mode_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlTestCaseEPSoRKNS_8TestCaseE_IO_read_ptrset, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > > >_ZN7testing13PrintToStringIxEESsRKT__ZN7testing8internal12UnitTestImpl6randomEvconstruct_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEptEvfalse_type_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4dataEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEixEj_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEvHandleSehExceptionsInMethodIfSupported_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEjwRKS1__M_incr_ZNK7testing8internal13DeathTestImpl5regexEv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEptEv_ZN7testing8TestCase11AddTestInfoEPNS_8TestInfoEPrintBytesInObjectToImpl~allocatorrandom_seed_flag_ZN7testing8internal9DeathTest5AbortENS1_11AbortReasonEshowbase__copy_move_a_ZN7testing4Test19HasSameFixtureClassEvFLAGS_gtest_throw_on_failureAlwaysFalsekSpecialEscape_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEdeEv_Vector_base >_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE17_S_select_on_copyERKS4_rebind >_ZN7testing8UnitTest11GetInstanceEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_minimumEPSt18_Rb_tree_node_base_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEdeEv_ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7destroyEPS3_new_allocator_ZN7testing8internal12UnitTestImpl17current_test_infoEv_ZNSt3setISsSt4lessISsESaISsEE6insertERKSs_ZNKSs12find_last_ofEPKcjBits__uninitialized_copy_S_fixed_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_RKS2_UnitTest_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4backEv_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEdeEvmax_size_ZN7testing8internal20SingleFailureCheckeraSERKS1__Traits_ZN7testing8internal9DeathTestaSERKS1_default_valuesigned char_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_get_nodeEvisattybidirectional_iterator_tag_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKwj_ZN7testing8internal27PrettyUnitTestResultPrinter20OnTestIterationStartERKNS_8UnitTestEiHandleExceptionsInMethodIfSupportedFLAGS_gtest_output_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEaSERKS3_FloatingPoint__copy_m_ZN9__gnu_cxx14__alloc_traitsISaIPcEE10_S_on_swapERS2_S4_wcspbrka_statement_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEixEioperator<< Sendsubstr__ZN7testing11IsSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7_negation_ZNSt11char_traitsIcE2eqERKcS2__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEixEi_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEptEvHandleExceptionsInMethodIfSupported_M_refdataendl >_ZNK7testing8TestCase4nameEv__throw_bad_alloc_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_leftmostEvprint_timeregcomp_ZNSt10_Iter_baseIPSsLb0EE7_S_baseES0__ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7addressERKS2_scoped_ptrChar_kill_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7addressERKS2_severity_pthread_mutex_destroy_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEjRKS3__ZNSolsEPFRSoS_Evprintf_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE12_Vector_impl12_M_swap_dataERS4_operator<< _sbuf_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11equal_rangeERKS1_FLAGS_gtest_catch_exceptions_ZN7testing8internal27PrettyUnitTestResultPrinter24OnEnvironmentsSetUpStartERKNS_8UnitTestEdef_optional_ZNSt6vectorIiSaIiEE5frontEvtruncreporter_ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEjjRKS1__ZN7testing8internal18g_linked_ptr_mutexE_ZNSt6vectorIPcSaIS0_EE4rendEv_ZN7testing8internal18OsStackTraceGetterD2Ev_ZNKSbIwSt11char_traitsIwESaIwEE7compareERKS2___throw_bad_cast__uninitialized_copy_a_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6assignEjRKS2_strtoull__ostream_insert >fwprintf_Destroy__is_normal_iterator_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE7destroyERS3_PS2__ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestElong int_ZNSt11char_traitsIcE6assignEPcjc_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_copyEPKSt13_Rb_tree_nodeIS1_EPS9_ToUppervector >_ZN7testing13PrintToStringIPKwEESsRKT_operator-*, std::vector > >default_xml_generatorFormatHexIntstatus_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE10_S_on_swapERS3_S5__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorIiSaIiEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPiS1_EEjRKi_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE7releaseEv_ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE8allocateEjPKv_ZN7testing4Test8TearDownEvarray_ZNKSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE19_M_get_Tp_allocatorEv_ZNSt6vectorISsSaISsEE6insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EEjRKSs_ZNKSs7_M_dataEv_ZNSt12_Vector_baseIiSaIiEE13_M_deallocateEPijiteratoroperator!= >__destroy_ZN7testing8internal18StreamableToStringIxEESsRKT_socket_writer__ZN9__gnu_cxx17__normal_iteratorIPKcSsEmmEidescriptionGetDefaultFilter_ZN9__gnu_cxx17__normal_iteratorIPKcSsEmmEvbasic_string, std::allocator >_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEplEi_ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEvIsContainerTest_ZNSs4_Rep13_M_set_leakedEvreverse_iterator >_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_sharedEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8___uninit_copy*, std::basic_string*>_ZN7testing8internal13DeathTestImpl6PassedEb_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4backEv_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE7pointerEv_ZN7testing8internal5MutexaSERKS1_no_sub_ZNSs6insertEjRKSs_Rb_tree, std::allocator >, std::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >_ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEjjPKwj_ZN7testing8internal10scoped_ptrISsEaSERKS2__ZNSt6vectorIPcSaIS0_EE5clearEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE24_M_get_insert_unique_posERKS1__ZN7testing8internal17TestEventRepeater20OnTestIterationStartERKNS_8UnitTestEi_S_do_ituninitialized_copySOCK_NONBLOCK_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE8max_sizeEvRunSetUpTestCase_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8pop_backEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE3endEv_ZN7testing8UnitTestD0Ev_ZN7testing8internal31GetCurrentOsStackTraceExceptTopEPNS_8UnitTestEi_ZN7testing8internal9DeathTest6CreateEPKcPKNS0_2REES3_iPPS1_random_seed_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmiEiFilePath_Atomic_wordimpl_Format_ZNK7testing18TestEventListeners21default_xml_generatorEvos_stack_trace_getter__ZN9__gnu_cxx13new_allocatorIPcE10deallocateEPS1_j_ZN7testing17TestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE__is_normal_iterator_ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultEpipe_ZNKSt6vectorIPcSaIS0_EE4dataEvsi_signo_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEptEvCreateSOCK_PACKETiterator_S_keyTestRoleless, std::allocator > >allocator_KeyOfValue_ZN7testing8internal15UnitTestOptions20PatternMatchesStringEPKcS3__ZNKSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE19_M_get_Tp_allocatorEvwprintf_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEE4baseEvvector >_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEpLEi_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_fill_assignEjRKS2_operator- >__normal_iterator > >floatdeath_test_use_forktest_cases__ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorISsSaISsEE4dataEv__needlenum_chars_M_repBiggestInt_ZN7testing7FloatLEEPKcS1_ff_Iter_base<__gnu_cxx::__normal_iterator > >, true>set_child_pid__copy_mFLAGS_gtest_list_testsmbrlen_ZNSs9push_backEc_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEiGetParam()re_pattern_buffer_ZN7testing4TestD2Ev_ZNK7testing8internal13FloatingPointIfE13exponent_bitsEvssize_t_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNKSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE13get_allocatorEvargc_Ios_Fmtflags_M_replace_aux_ZN7testing8internal7PrintToEPKcPSo~CapturedStream__niter_baseresize_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZNSt11char_traitsIcE11to_int_typeERKc_ZN7testing14ExitedWithCodeaSERKS0_argvoperator<< _ZN7testing32ScopedFakeTestPartResultReporterC2EPNS_19TestPartResultArrayE_ZNSt6vectorISsSaISsEE15_M_erase_at_endEPSserrors_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EEixEj_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEvDerivedforever_ZNK7testing19TestPartResultArray17GetTestPartResultEi_ZNKSs17find_first_not_ofEcjseconds_IIter__niter_base_ZN7testing7MessageaSERKS0___elision_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_erase_auxESt23_Rb_tree_const_iteratorIS1_E_ZNSt6vectorIiSaIiEE6resizeEji_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE11_M_allocateEjUrlEncode_ZNK9__gnu_cxx13new_allocatorIcE7addressERc_ZNSt10_Iter_baseIN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS4_SaIS4_EEEELb1EE7_S_baseES9_CurrentStackTrace_ZN7testing8internal16DeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE__data_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEdeEvtest_part_resultsTestCaseFaileddiv_t__normal_iterator > >reverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt17_Rb_tree_iteratorIPKcEmmEi_ZN7testing4Test11DeleteSelf_EvStrDup__copy_move_ZNK7testing8TestInfo4nameEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSs16_S_construct_auxIPKcEEPcT_S3_RKSaIcESt12__false_type_ZNSt17_Rb_tree_iteratorIPKcEmmEv__dynamic_cast__is_move_iterator~XmlUnitTestResultPrinterBasicNarrowIoManip__list_ZNSt9basic_iosIcSt11char_traitsIcEE4fillEctv_nsec_ZN7testing38FLAGS_gtest_show_internal_stack_framesEUnlock_ZNK7testing10TestResult15HasFatalFailureEvpthread_setspecific__dnewinput_iterator_tag~ParameterizedTestCaseRegistryprinted_test_case_name_M_start_ZNK9__gnu_cxx13new_allocatorIwE8max_sizeEvusedSkipCommaTestPartResultReporterInterface__numeric_traits_integer_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZN7testing8TestCase14TestReportableEPKNS_8TestInfoEUInt_ZNK7testing8internal13FloatingPointIfE6is_nanEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEplEioperator!= >_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEixEidefault_xml_generator__ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE_ZNSt6vectorIPN7testing8TestInfoESaIS2_EEixEjstackset_up_tc_TEST_F_namesecond_ZNSsaSERKSsis_disabled_OnEnvironmentsTearDownEnd~SocketWriter_Num_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE15_M_erase_at_endEPS2__ZNKSt6vectorIiSaIiEE12_M_check_lenEjPKc_ZN9__gnu_cxx14__alloc_traitsISaIiEE10_S_on_swapERS1_S3__ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Evdashstatement_ZN7testing22FLAGS_gtest_print_timeE_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE19_M_get_Tp_allocatorEv_ZNKSt13_Bit_iteratormiEiExitedWithCodehintstm_gmtoff_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE17_S_select_on_copyERKS4__ZN7testing8internal14CmpHelperSTRNEEPKcS2_PKwS4__ZNKSt3setISsSt4lessISsESaISsEE3endEvoperator<< _ZN7testing7MessageC2ERKS0_UniversalPrintArrayst_blocks_ZN7testing8internal12UnitTestImpl25set_os_stack_trace_getterEPNS0_27OsStackTraceGetterInterfaceEpthread_tprefix_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE8allocateERS5_jDeathTestThreadWarningdata_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEppEv_ZNKSs4sizeEv__miter_base_ZN7testing8internal17StreamingListener20AbstractSocketWriter4SendERKSsallocator > >_ZNSt6vectorIPcSaIS0_EE9push_backERKS0_ai_addrlenkNonFatalFailure_ZNKSbIwSt11char_traitsIwESaIwEE2atEj_ZN7testing8internal21StackLowerThanAddressEPKvPbStat_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISsERKSs_ZNSt17_Rb_tree_iteratorISsEppEic_str_ZN7testing8internal13CaptureStreamEiPKcPPNS0_14CapturedStreamEsi_statusParseGoogleTestFlagsOnly_ZNK7testing8UnitTest19disabled_test_countEv__niter_baseoperator<< _ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE2atEjg_captured_stdout_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE8max_sizeERKS3__ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestEdeath_test_style_ZNKSs15_M_check_lengthEjjPKc_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE10_S_on_swapERS4_S6__ZNK9__gnu_cxx13new_allocatorIwE7addressERwoperator new_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEi__class_type_info_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEptEvbadbit_ZN7testing8TestInfoD2EvGetTestInfo_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEvruntime_errorEndsWithCaseInsensitivevector >__countGTestMutexLocksam1ostreamsam2long_value_ZN7testing8internal8GTestLogD2Ev_Vector_base >_ZN7testing8internal18GetInjectableArgvsEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEppEi_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEpLEi_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4rendEvrebind_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEppEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE7reserveEj_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE13_M_deallocateEPS2_j_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE12_Vector_impl12_M_swap_dataERS4_Setupsuccessful_test_case_countstat_ZNSt6vectorIiSaIiEE4swapERS1_exceptionReadAndInterpretStatusByte_ZN7testing8internal18OsStackTraceGetter19kElidedFramesMarkerEsa_restorerallocator_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE4swapERS5__M_node_ZNSs6assignEPKcj_ZN7testing8internal15GetUnitTestImplEvShuffleTests__iterator_categoryconst_pointer_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7addressERKS4_fgetws_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE13get_allocatorEvrand__cursummaryArrayAsVector<8>int_p_sign_posn_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_E_ZN7testing8internal12UnitTestImpl11AddTestInfoEPFvvES3_PNS_8TestInfoE_ZNSt6vectorISsSaISsEE5eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EE_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE9constructEPS3_RKS3_GetReservedAttributesForElementmode_ZN9__gnu_cxx13new_allocatorIiE7destroyEPioperator<< _ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4swapERS3_operator<< tm_sec__size_typekMaxParamLength_ZN9__gnu_cxx13new_allocatorIPKcE8allocateEjPKv__static_initialization_and_destruction_0new_allocator_ZN7testing8internal8GTestLogC2ENS0_16GTestLogSeverityEPKciactual_valueoperator<< _ZNSo3putEc_ZNK7testing10TestResult17test_part_resultsEvmessageTraceInfo__normal_iterator > >_ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEiFLAGS_gtest_shuffle_ZNSs7replaceEjjRKSs_ZN7testing8internal17StreamingListener12SocketWriteraSERKS2_new_allocator, std::allocator > > >value_paramArrayAsVector<6>_ZNSs4_Rep9_S_createEjjRKSaIcE__addressof >kValueParamLabel_Destroy_ZdlPv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE8key_compEv_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwjlist_tests__ZN9__gnu_cxx14__alloc_traitsISaIiEE8max_sizeERKS1_~ValueHolder_ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11upper_boundERKS1_term_supports_color_Rb_tree_increment_ZNKSt9_IdentityIPKcEclERS1__ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE9constructEPS4_RKS4__S_base_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4dataEv_ZNK7testing8internal12UnitTestImpl21total_test_case_countEv_ZNSt6vectorIPcSaIS0_EEixEj~OsStackTraceGetterkTestTypeIdInGoogleTestdeallocatemask_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE3endEv_Reppbase_ZN7testing8internal14ParseInt32FlagEPKcS2_Pi_ZN7testing8TestCaseC2EPKcS2_PFvvES4_AddTestPartResult__is_normal_iteratorfprintf_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_M_endEvtotal_part_count_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE17_M_create_storageEjnot_eofSkipSpacesnot_eolPrintToString_ZNSs4_Rep12_S_empty_repEvmon_decimal_pointcurrent_test_case_operator<< _ZNKSs17find_first_not_ofEPKcjoperator<< vector >unitbuf_ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEjPKcPartialMatchiterator_traits<__gnu_cxx::__normal_iterator > > >in_death_test_child_process~DefaultPerThreadTestPartResultReporter_ZNSs9_M_assignEPcjc_ZNK7testing8internal8FilePath14IsAbsolutePathEv_ZNSt11char_traitsIwE4findEPKwjRS1_ValidateTestPropertyNamereferencerfind_Referencewscanf_ZN7testing8internal12AssertHelperC2ENS_14TestPartResult4TypeEPKciS5___osize_DestroyToPrint_ZNK9__gnu_cxx13new_allocatorIiE7addressERKi_ZN7testing8internal8FilePath9NormalizeEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEppEi_ZNKSt6vectorIiSaIiEE5frontEv_ZN7testing8internal24XmlUnitTestResultPrinter26RemoveInvalidXmlCharactersERKSs__are_same_ZNK7testing8internal12UnitTestImpl16catch_exceptionsEvkRandomSeedFlag__iterator_category<__gnu_cxx::__normal_iterator*, std::vector > > >_ZlsRKN7testing8internal6SecretEi_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEppEv_ZNK7testing8UnitTest26successful_test_case_countEvoperator()<__gnu_cxx::__normal_iterator > >_S_showpoint_ZN7testing8internal17TestEventRepeater25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11upper_boundERKS1__IO_lock_t_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE10_S_on_swapERS3_S5__ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE8allocateEjPKv_ZN7testing8internal13DeathTestImpl11set_outcomeENS0_16DeathTestOutcomeE_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE_ZN7testing31TestPartResultReporterInterfaceaSERKS0__ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE19_M_get_Tp_allocatorEv__copy_m_ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_PKvPFvvES6_PNS0_15TestFactoryBaseEnew_allocator_ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7addressERS2__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4backEvEventForwardingEnabled__alloc_traits >_Rb_tree_impl, false>_ZN7testing8internal8FilePath3SetERKS1_should_runstring_ZNKSt17_Rb_tree_iteratorISsEneERKS0_kTypeParamLabel__simplefork_ZNSt11char_traitsIcE4findEPKcjRS1___is_move_iteratorproperty_with_matching_keylong long int_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE8max_sizeEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmmEv_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5_intptr_t_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEE4baseEv_ZN7testing8internal26GoogleTestFailureExceptionD2Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5clearEv_ZN7testing8internal13DeathTestImplD2Ev_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11upper_boundERKS1__ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6rbeginEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEpLEi_ZNK7testing8UnitTest21successful_test_countEv_ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7destroyEPS3__ZN9__gnu_cxx14__alloc_traitsISaIiEE8allocateERS1_jcopyMatchesFilteroperator<=19pthread_mutexattr_t_ZN7testing8internal2RED2Ev_ZN7testing10TestResult14RecordPropertyERKSsRKNS_12TestPropertyECountIf, bool (*)(const testing::TestPartResult&)>_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE2atEjLastMessage_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4rendEv_ZNK7testing8TestCase17failed_test_countEvscoped_ptr, std::allocator > >_Iter_basegtest_color_ZNKSs12find_last_ofEcj_ZNKSt23_Rb_tree_const_iteratorIPKcEneERKS2__ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE10deallocateEPS3_j_ZNK7testing8internal13FloatingPointIdE13fraction_bitsEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4swapERS7__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_rightEPKSt18_Rb_tree_node_base_ZN7testing8internal8FilePathaSERKS1_vector >_ZNKSbIwSt11char_traitsIwESaIwEE6substrEjj_ZN7testing8internal11CmpHelperNEEPKcS2_xx_S_dec_DestroyFilterTestsfirst_test_nameTestCaseInfoContainer_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5clearEva_type_param_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7addressERS3__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_rightmostEv_ZNKSt18_Bit_iterator_basegtERKS_GCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ0DCKC FCdCKC FC„˜CJ°CJČÜđ,@Th|¤¸Ėāô0DXl 0A†nƈP*A†hƤ€*A†hÆĀ°*A†hÆÜāđ,@đT%CWCA Ftˆœ°Ä ØAƒND HAà üAƒND HAà AƒND HAà DAƒND HAà hAƒND HAà ŒAƒND HAà °AƒND HAà ÔAƒND HAÃzPLR|› ˆ4$0ˆA…B C‡†ƒv.g ÃAÆAĮAÅ A (PĀ(A†A ƒNE P AÃAÆ0|đ0A†A ƒN$I(G,A0H CÃAÆ °)AƒNP HAÃ(Ô3A†A ƒNP P AÃAÆ4 NA…A ‡A†kFA LJÆ AĮAÅ48pNA…A ‡A†kFA LJÆ AĮAÅ4pĀNA…A ‡A†kFA LJÆ AĮAÅ4¨NA…A ‡A†kFA LJÆ AĮAÅ4ā`NA…A ‡A†kFA LJÆ AĮAÅ4°NA…A ‡A†kFA LJÆ AĮAÅ4POA…A ‡A†vFA FFÆ AĮAÅ4ˆPOA…A ‡A†vFA FFÆ AĮAÅ4Ā OA…A ‡A†vFA FFÆ AĮAÅ4øđOA…A ‡A†vFA FFÆ AĮAÅ40@OA…A ‡A†vFA FFÆ AĮAÅ8hRA…A ‡A†kFDA LJÆ AĮAÅ8¤đSA…A ‡A†vFDA FFÆ AĮAÅ<āPrA…A ‡C†C D,D0L L CÆ AĮAÅA h ĐšA…A ‡C†AƒN _,G0K T,G0K G AÃAÆ AĮAÅJ I,A0H CAÃAÆ AĮAÅ@Œ pPA†A ƒN[  AÃAÆC PAA HC AÃAÆDĐ XA†A ƒN `,A0H AÃAÆE ƒ†L,A0H AÃAÆD ‡A…A ‡A†AƒN@dLAPH@CAÃAÆ AĮAÅH` ˜A…A ‡A†AƒN@hLAPH@GLAPHAÃAÆ AĮAÅDŦ nA…A ‡A†AƒN@KLAPH@CAÃAÆ AĮAÅ@Ā’ A…D C‡†ƒy.š ÃAÆAĮAÅ A O ÃAÆAĮAÅ A t8 ` ØA…A ‡A†AƒN@IDDHBLAPPDAHALAPH@\DBHELAPH@ODBHDLAPH@LAÃAÆ AĮAÅ\° @ `A‡A †CƒTA HACD HC à AÆAĮI IBAF HCà AÆAĮ4 uA†A ƒN `  AÃAÆF ](E,A0H 4Tq9A…B C‡†ƒf.d ÃAÆAĮAÅ A 4Œ  dEA…B C‡†ƒv.Q ÃAÆAĮAÅ A 4¸  MA†A ƒN [,A0H C  AÃAÆG 4ü` ”UA…B C‡†ƒx.N ÃAÆAĮAÅ I D( ‰A‡A †Aƒu à AÆAĮF gAA HRà DÆAĮPp  SA…A ‡A†AƒN Q(B,A0H J(B,A0H ICÃAÆ AĮAÅÄ đ $Ø  2AƒNXA HAÃP "€ "(° <Ā *A†hÆ4Xđ .A‡A †CƒNKA KAà AÆAĮ4 .A‡A †CƒNKA KAà AÆAĮ4ČP.A‡A †CƒNKA KAà AÆAĮ4€.A‡A †CƒNKA KAà AÆAĮ48°.A‡A †CƒNKA KAà AÆAĮ4pā.A‡A †CƒNKA KAà AÆAĮ4¨.A‡A †CƒNKA KAà AÆAĮ0ā@0A†A ƒN$I(G,A0H CÃAÆ4pWA‡A †FƒN8BAƒNGB TH HAÃ(đ°!>AƒNGB TH HAÃ@đ!VA†A ƒNKB NCBA RH H AÃAÆ€`P"ęA…A ‡A†AƒN0y AÃAÆ AĮAÅA Myå A…B C‡†ƒB.c ÃAÆAĮAÅ J l ÃAÆAĮAÅ I 4ˆ>’/ A…B C‡†ƒC.S ÃAÆAĮAÅ I DĀ>@”ļ* A…B C‡†ƒ\.Đ ÃAÆAĮAÅ K ~ ÃAÆAĮAÅ A 4?–ßM A…B F‡†ƒg.~ ÃAÆAĮAÅ G <@?ā–›d A…B B†ƒ[ ÃAÆAÅ F N.u ÃAÆAÅ C @€?įt A…B C‡†ƒu.M.T.e.T.z ÃAÆAĮAÅ A 4Ä?€—‹ A…B C‡†ƒm.  ÃAÆAĮAÅ J 4ü?Žĩ A…B C‡†ƒl.B ÃAÆAĮAÅ C D4@|Ę A…B C‡†ƒn.į ÃAÆAĮAÅ B ƒ ÃAÆAĮAÅ A D|@| A…B C‡†ƒk.į ÃAÆAĮAÅ E ƒ ÃAÆAĮAÅ A 4Ä@šC> A…B C‡†ƒ’.m ÃAÆAĮAÅ H 4ü@`›3R A…B C‡†ƒ` ÃAÆAĮAÅ G t.44A œ2p A…B C‡†ƒL. ÃAÆAĮAÅ G DlA|Ē A…B C‡†ƒm.į ÃAÆAĮAÅ C ƒ ÃAÆAĮAÅ A 4´AāŸdä A…B C‡†ƒu.x ÃAÆAĮAÅ J 4ėAPĸûA…B F‡†ƒ|.a ÃAÆAĮAÅ C D$BQ6A…B C‡†ƒŖ.ų ÃAÆAĮAÅ K L ÃAÆAĮAÅ A llBP¤ÛfA…B C‡†ƒc ÃAÆAĮAÅ D \.Ģ.V.ŗ ÃAÆAĮAÅ E _.U.H.V.˛.V.ú.^.b.Q.DÜB0Ģ=ņA…B F‡†ƒH ÃAÆAĮAÅ D _.ö ÃAÆAĮAÅ H D$CpŽķCA…B C‡†ƒF.X ÃAÆAĮAÅ I _ ÃAÆAĮAÅ A @lCp¯ZA…B C‡†ƒZ ÃAÆAĮAÅ E g ÃAÆAĮAÅ A a.4°C´$÷A…B C‡†ƒÆ.p ÃAÆAĮAÅ A DčCĀļA…B C‡†ƒK.n ÃAÆAĮAÅ F H ÃAÆAĮAÅ E @0DС|/A…B C‡†ƒr.Ä ÃAÆAĮAÅ A j ÃAÆAĮAÅ A LhIPš’A‡A †AƒN T,D0H j Cà AÆAĮH dCà AÆAĮ<¸IđšaA†A ƒN P,D0H [  CÃAÆE L CÃAÆDE`ēbA…B F‡†ƒD.ĸ ÃAÆAĮAÅ F  ÃAÆAĮAÅ H 4LE€ŧ‚‘A…B C‡†ƒb.B ÃAÆAĮAÅ A 4„EŊ ĨA…B F‡†ƒ[. ÃAÆAĮAÅ J 4ŧE ŋ3ŪA…B C‡†ƒy. ÃAÆAĮAÅ G DôE`Â&A…B C‡†ƒB.W. l ÃAÆAĮAÅ J R ÃAÆAĮAÅ C D/A…B F‡†ƒl.g. w ÃAÆAĮAÅ J S.xČcšA…A ‡A†AƒN0] rŦ A@r¸ ACrÄ AIrĐ APrÜ AQrč ARrô AUr A`r  Acr Aer$ A{r0 A‹r< AŽrH A‘rT A“r` A”rl A•rx AĢr„ A¯r Aąrœ A´r¨ Ašr´ AērĀA.rČAFrĐAÄrØAšrāAÆrčAČrđAÉrøAĘrAËrAĖrAÍrAÎr AĪr(AĐr0AŅr8AŌr@AĶrHAÔrPAÕrXAÖr`A×rhAØrpAŲrxAÚr€AÛrˆAÜrAŨr˜AŪr Aßr¨Aār°Aár¸AârĀAãrČAärĐAårØAærāAįrčAčrđAérøAęrAërAėrAírAîr Aīr(Ađr0Aņr8Aōr@AķrHAôrPAõrXAör`A÷rhAørpAųrxAúr€AûrˆAürAũr˜AEr ADr¨Agr°Afr¸AūrĀAørČA+rĐArØArāArčArđArøAr Ar Ar A˜r Anr A3r( A6r0 Adr8 Aër@ A rH AđrP A rX A”r` Arh A˙rp A rx A$r€ A4rˆ A5r Ar˜ Avr  Ar¨ Air° A-r¸ AärĀ A­rČ AŦrĐ Aīā ÚĐ ôAã%ēÚ+ĀÚų 0ĀÚZĀÚ{ÆÚŋĐÚúŌÚ āÚ=üÚlÛ’Ûē ÛŲ$Û0Û@>Û{@Û­NÛŲPÛüRÛ,`ÛSbÛ†pÛ°rÛā€Û„Û^ÛŦ’Û ÛWĸÛ´°Û˛ÛcĀÛĩÂÛ ĐÛTŌÛ¤āÛëâÛGđÛšōÛįÜ+ Ü} ÜÆ Ü&  Ü} "ÜÛ 0Ü0 2܈ @Ü× BÜ, PÜx RÜØ `Ü/ bÜf pܘ rÜč” ´Î˜A§ ZŨ `ŨhbŨŅpŨ1rŨ€Ũ‚ŨcŨŊ’Ũ' ŨˆĸŨɰŨ˛ŨFĀŨ‚ÂŨŌĐŨŌŨfāŨĒâŨđŨ LĪA0yŪÁŪŊ dĪA3ü.Ū,0Ū( |ĪA6ONŪ”Pې ”ĪA9ĖnŪ pŪ ŦĪA<gŽŪ¸Ū´ ÄĪA?üŽŪE°ŪA ÜĪABÎŪŧĐŪ¸ ôĪAEîđŪ:-ę Đ@AG2* HrW€)S LĐ AK’ĒÚ°3Ö lĐ(ANä[đXW ”Đ8AQ”HũP‡ų ĖĐ0ATYØÂā˜ž üĐ8AWxL€nH 4Ņ(AZm2đŧ|Ŧ.°.už \Ņ0A^û&/F0/qB ŒŅ(Aa„ĸ/ˇ°/€ŗ ´Ņ0AdŨ0000`  äŅ(Ag20z0[v Ō8Ajĩė0ũđ0cų DŌ@Am8T1z`1kv „Ō0Ap¯Ė1ũĐ1ˇų ´ŌhAs>ˆ2ž2­š ĶPAvņ=3; @3e7 lĶ@Ayx Ĩ3 °3‡ž ŦĶPA|!@4‹ @˙ üĶĐA~ !ËAE!ĐAØA! Ė×HAr!¨EŦ!°E+¨! Ų0A„Ų!ÛI!"āIZ" DÚ8A‡\":J¤"@J " |ÚČAŠã"ĐMtß" DÜčAŒ #DOh#POĻd# ,ßČA§#øRtŖ# ôāčA‘ä#lT,$pT($ Üã¨A”g$ŠUØ$UCÔ$ „äA—<%ÔU}%āU[y% œä˜Ašą%8ũ‘›8’- —8 0Aë8.œZ90œV9 LČAŧ9Ā::Ā—6: °AĢ:Xĸī:`ĸkë: Ä0A &;Ėĸ ;Đĸ’œ; ô8A  <b¤n<p¤zj< ,8AÂ<ęĨF=đĨ’B= d8AŊ=‚§;>§’7> œ8AŦ>"Š?0ŠC? ÔAO?tŠŠ?€Šy†? ėˆA¸?úŦķ?­(ī? t  A!@(­\@0­)X@ ”  A!Š@Z­Å@`­3Á@ ´ (A$ķ@”­0A ­),A Ü  A'`AĘ­AĐ­3™A ü (A*ÍAŽGBŽ’CB $ 8A-´Bĸ¯ûB°¯ž÷B \ XA05Cn°Cp°’™C ´ 8A3øC˛XD˛nTD ė A6ĢD~˛E€˛xE  0A9pEø˛ÄEŗčĀE 4  A< FčŗkFđŗgF T xA?žFļpGļßlG Ė €ABHīļMHđļmIH L čAExH]ēNI`ēpJI 4 HAHJĐģžJĐģåēJ | HAKXKĩŊ'LĀŊˆ#L Ä HANéLHŋÄërDāЀB¯ aßŊņ˙ãåæįčéęëėíîīđņōķôõö÷øųúûüũū˙      !"#$đã%&'()*+,-./0235689;<>?ABDEGZĀ(ãIJKMN•PrãúĐšã3pPãPQSTVWYZ\YĀ’ã‹` ØãĘ@ `ã]^`aöđæCČæŽĒ ~ļŸ ~cdfgߊ ~ŠB 0šãu⿍õ~ØĐæÔæ,Ėæijlmoprsuvxy{|Z@^Ëã~ĸ`gãÕ€`Ŋ、@bÍツ†‡‰ŠŒŽ‘“”–—™šœŸ ĸŖĨύŠG p;ãqč ~ĢŦŽ¯ą˛´ĩˇ¸ēģŊžĀÁÃÄÆĮÉĘĖÍĪĐŌĶÕÖØŲÛÜŪßáâäåįčęë–@”ļãāįíîđņķôö÷ųúÔ ~7Á ~Wö ~wС|㟀ŧ‚ãüũܐÔã0Ø˙ã˙ƒ°ÛXãđp߆ã D`é(ã  lPķ(ãĸčæĶ (æ æ ~ !#$&')*$ Đ#´ã,-/0235689;<>?ABDEGHJKMNU ø ~PQy  ~› ĐJ@ãÖ Ÿ ~ST O ~9 > ~e - ~’ ' ~ĩ “ ~á  ~ ~/ g ~a  ~ˆ  ~Ŧ  ~Ķ ÷ ~û đ ~ č ~D Ö ~q Å ~ ´ ~VWYZ\]É Øæ ”æ] 0yō㐠ˆŧ @ ˆé ˆ_`bcefhiklnoqrtuwxz{}~€ƒÍƒ0øæ?¤ ~…‡ˆe@ <~ŠŒŽ‘’”•—˜™›žŸĄĸ¤Ĩ§ŠĒŦ­¯°ąŗ´ļ¸šēŧŊŋĀÂÃÅĮČĘËÍÎĪŅŌÔÕרÚÛŨŪāáãåæčéëíīņķõ÷ųûũ˙   !#%'()*,-/13568:=¤0_ãĢĄã˛čŠšč>ĀIÆIĖIŌIØIŪ\ä+Ię0Iđ7I÷8\ū>I:I <I@IEI!JI(I/PI6\I=kIDrIK‚IRˆIY“I`˜IgšInŖIu§I|„\ƒ¤\ŠĩI‘ÃI˜ÉIŸŌIĻÚI­Č\´āIģęIÂîIÉIĐI×ė\ŪIåIėIķ$Iú7I'I;IBI9III$TI+VI2XI9gI@mIGIN‰IUoI\—Ic™IjœIqL\x'ŸI†ŗI¸I”ģI›žIĸĮIŠĘI°ÁIˇÄIžĩIÅÍIĖĐIĶŌIÚÕIá×IčÚIīõIöđIũII I%II 9I'DI.OI5YI<dICrIJuIQwIX}I_‚IfImžIt I{ŦI‚ĀI‰ļIĸI—ĘIžŲIĨ|\ŦŦ\ŗÔ\ēöIÁô\ČIΐ\Ö´\Ũü\ä(\ëúIōIųˆ\II¤\¨\BI#&I*UI1Ė\8¸I?ÃIFIMĪITÛI[äIb\iIp<\w|\~I…œ\ŒÜ\“\š\\Ą*I¨6I¯~IļŒIŊ–IÄŧIËĘIŌÕIŲßIāīIįūIî IõIüļIąI $I4IUIPI&`I-ZI4gI;nIBrIItIPvIWĀ\^ŸIeßIlõIsD\zIšIˆƒII–x\ä\¤ÆIĢ\˛ŦIš+IĀ´\Į5IÎBIÕFIÜIIãUIęč\ņ \øiI˙mI~I 8\‡I‹I"ŪI)h\0ŊI7›I>§IE¸\L”\SŌIZ@IaįIhđ\oũIvI}I„2I‹7I’HI™QI `I§cIŽjIĩ…IŧŒIÀIĘ˜IŅĨIØŦIßÉIæÎIíŪIô \û8 \áI p \éI¤ \ I% I,' I3? I:( \AØ \HíIOđIV \]ōIdT \k| \r¤ \yä \€ \‡U IŽ_ I•i Iœ} IŖ IĒD \ąŸ I¸ą Iŋl \ÆÄ IÍÉ IÔä IÛō Iâ Ié Iđ I÷$ Iū/ IvI 9 I? IF I! I(Č \/ü \6 I=L IDh IKX \Rw IY– I`| \g¤ \n¨ IuČ \|Ē Iƒ \Šp \‘ \˜ž IŸÉ IĻĶ I­Ü I´Ā \ģä \Âõ IÉ IĐ I×! IŪ/ Iå= IėB IķN Iú( I$ IY I` Ie Io I$r I+‹ I2– I9ĸ I@§ IG¸ INŧ IUÅ I\Î IcÕ IjL\qÚ IxÜ Iæ I†ō Iû I”ū I›t\ĸ IŠ I°( Iˇ. Iž8 IÅ \Ė= IĶO IÚČ\áV Ičn Iīt Iö\ũ,\’ I ˜ IĒ Il\ Ŧ\'ė\.,\5¸ I<ĩ ICŋ IJh\QÔ IXÚ I_ä Ifú Imė Itœ\{ I‚# I‰3 Iŧ\—(\žF IĨ[ IŦ¨Iŗ`\ēn IÁđ\ČøIĪIÖ ^ãŨ°^ãäĀ^ãëĐ^ãōā^ãųđ^ã_ã_ã _ãp^ãā ã#Đ ã*° ã1  ã8H ã? IFŠMčŠTŠ[(ŠbHŠihŠpˆŠw¨Š~ČŠ…PŠŒĀ“菹Ą(¨H¯hļˆŊ¨ÄȏËPŌIŲ \āD\į|\îė\õsIüI\ ĢIÉIL\P\&&I-BI4_I;zIBII‹IPĖ\WĸI^<IeRIlaIsdIz \}IˆF I” \–, \Ą I¤˜ IĢ› I˛ž Iš‡ IĀŸ IĮ° IÎÁ IÕĮ IÜÎ IãÕ Ięā Iņį Iøī I˙II #I4IPm•đ "!X"™#×$ %?&•'°(č)*&+[AzDÃEGKHxI¤UĀ`ča b<      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâ: "čU "ęŠ "ęŋ "ėÖ "îö "đ!"ō8!"ôd!"ö!"öž!"øŋ!"úã!"ü""ūL""—""å""1#"v#"ˇ#" $" B$"…$"Ö$"%%"n%"´%"&"-&"U&ãn&ãŠ& 0ãÂ&P*ãī&€*ã'°*ãI'āãs'"É'" #(""€("$Ô(đã)%ãm)"&Č)"&#*"(U*"(‡*"*Ŋ*"*ķ*",4+",u+".ŗ+".ņ+"0L,)b,x,,"3´,"6Ņ,"9-"<D-"?‚-"B¸-"Eā-0ˆã .!:(.D! S.b.w.0ˆãŖ.Ā(ãĪ.đ0ã/!/)"KV/!ëŠ/Ŗ/)"KØ/3"N 0 NãY0pNãĢ0ĀNãô0Nã91`NãŠ1°Nãß1Oã/2POã‚2 OãÄ2đOã 3@OãU3Rã¤3đSãņ3ų344X"QR4D!„4Ļ4‡"Tü4!#Q5‡"T§5˜"Wũ5n"Z6n"Z36B6T6c6u6˜6Ą6¨6ö6u"^)7u"^\7q"a”7q"aĖ7  dã88  dã^8 Mã…8 MãŦ8` ”ãå8€æ9 9!9 ‰ãd9 SãĄ9đ ãĮ9(Ũ9Ą‡: 2ãy:†: 2ãė:P "ã=;!z;P "ãË;€ "ã<!_<€ "ãŗ<° ãđ<Ā *ã.=đ .ãk=@Nãš= .ãĶ=Nãū=P.ãD>€.ã>°.ãŧ>ā.ãô>.ã-?@0ãp?pWã˜?Ĩ?ĐTã×?Ū?0bã@0bã(@ ãH@Āãh@āTãž@Ĩ@@Tãæ@ņ@ =ã6AAAā;ã~A IãÛAB#Bp*ãDB ÃãtBpXã”BĐ4ãĀB4ãīBPãCpdãJCPCāYãrCāPã´C0PãōC€ã"DTãNDđŅãcD !wD’æŠD‘æÔDæ˙DŒæE1Eæ\EæŠEˆæĢEææE„æ F|æ0FxæVFtæwFpæ™FlæÅFhæđFdæGđŅã0GĐRãEGĐRãZG0(ãoG`@ã°G /ãÕGĐ/ãHLã$HP$ãKH€@ã„HĀŽãĢH˛HP ãėHķHüHIII2IDIp!>ã IĨIŦI°!>ã Jđ!VãZJP"ęãžJ@#§ãįJīJđ#Ŗã$K+K2K7Kđ#ŖãlK $ãŧKĀ%Ąã LL!LYLp&Uã}Lp&UãĄLĐ&WãÅLĐ&WãéL0'gã*M 'ãUM°' ãMĀ' ãËMĐ' ã˙Mđ' ã/N( ã^N0( ãŽNP( ãŊNp( ãčN( ã O°( ãMOĐ( ã|Ođ( ãĻO) ãŅO0)ãúOP)ã Pp)Oã?PĀ)Tã^P *2ãƒP`*ã×P€+ ãQ+2ã.QĐ+ ãOQ€"doQ€"dQ`"g­Q`"gËQā+ ãųQđ+ãR, ãRR,3ã™RP,wãĐRÖRŨRĐ,ã Sđ,´ãJS°.3ãŦSđ.ãæS/RãTp/ã9T€/Cã\TuTTĐ/OãĒT˛Tā0ĖãßT°2Wã U3Oã/ãšš"QBš_š~š…š0@ãÆš@CŸã›āExã@›| ~i›`Fiãļ›ž›ī›Ũ"T-œ“æPœL!ㅜÕ"WÜ@L!ãøœß"ZœV!čö !æPžpLų㠞!%úžŸpM ミ€N\㸟āN7ã !4 āN7ã  O7ãŪ  O7ã=Ą`O]ãoĄ`O]ãĄĄĀO(ãĶĄđOPãĸ!!8ĸđOPãkĸ@P9ãžĸ@P9ãŅĸ€P(ãŖX"]4Ŗ°Py(ãfŖlŖsŖŖ‰Ŗ•ŖšŖ Ŗ§ŖĀŖ0|2ã¤p~ ãi¤‡ÛãŊ¤p‚ãĨ•AãeĨ2"`ˇĨPš‘ãíĨđžũã'ĻÄ"c[Ļ`æ…ĻđŸ!ã§ĻŦ"fÛĻ  !ãũĻ`"iH§"lĸ§Ĩ"o¨P Šã8¨āŖ"ã^¨āŖ"ㄨ¤äãҍ !ŠŠĒãOŠĢÕã~ŠĢÕã­ŠđŦËãíŠĀ¯ôã4ǰ`ãuĒ ĩãŊĒÎĒ0ļÄãûǎ*ã$Ģ0ˇãKĢP¸ãsĢpŊ^ã”ĢœĢĐŋãīĢ“"rIŦ!8aŦ!6œŦ`ĀûãŗŦ—"u#­`ÁNã>­“"xœ­°Â[ãˇ­Äđã魗"{MŽÉķãhŽĘŧã§ŽĀÍŌãŪŽĀÍŌã¯ö"~r¯Ī"߯ ÎØã°€Ī$ãy°°ĪÜã찐ĐJã"ą:ąRą\ąæ‹ąąą0!Žåą˛0!‘B˛X˛!’z˛!”œ˛!•Æ˛&!—đ˛-!˜!ŗ !™Rŗ!›‚ŗ,!˛ŗ.!žäŗ !Ÿ´!Ą*´!ĸ>´!¤V´!Ĩn´!§Š´!ŠĻ´!ĒČ´!Ŧę´ !­ĩ#!¯8ĩ!°Pĩ!ąhĩ-!ŗ™ĩ !´Ęĩ!ļ˙ĩ1!¸4ļ(!š`ļ !ēŒļ9!ŧÉļ !Ŋˇ<!ŋFˇ !†ˇ"!ÂŦˇ!ÃŌˇ!Ÿ=!ĮT¸ !ȍ¸5!ĘƸ !Ëņ¸'!Íš1!ÎQš !Άš'!Ņąš !ŌÜš.!Ôē !Õ@ē#!×gē !ØŽē&!Ú¸ē !Ûâē%!Ũ ģ !Ū4ģ#!ā[ģ !á‚ģ!éļģĶģæģ!īŧ!ņ@ŧ!ķ\ŧD!õ~ŧD!÷Ĩŧ!ųÚŧ!ûŊ`ˆZŊ@ æ„ŊqæšŊ ÎŊgtest-all.cc_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEv.localalias.384_ZN7testing8internal17TestEventRepeaterD0Ev.localalias.388_ZN7testing8internalL19SumOverTestCaseListERKSt6vectorIPNS_8TestCaseESaIS3_EEMS2_KFivE.constprop.391_ZN7testing8internalL14PrintOnOneLineEPKci.constprop.393_ZNSs4_Rep10_M_disposeERKSaIcE.part.7_ZN7testing8internalL21FormatDeathTestOutputERKSs_ZN7testing12_GLOBAL__N_126PrintByteSegmentInObjectToEPKhjjPSo_ZN7testing7MessagelsIKcEERS0_RKPT_.isra.62_ZGVZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczE13in_color_mode_ZZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczE13in_color_mode_ZN7testing8internalL15kTypeParamLabelE_ZN7testing8internalL16kValueParamLabelE_ZN7testingL20kTestShardStatusFileE_ZTIN7testing8internal12_GLOBAL__N_123ClassUniqueToAlwaysTrueE_ZN7testing8internalL23HasGoogleTestFlagPrefixEPKc_ZN7testing8internalL26g_in_fast_death_test_childE_ZN7testing8internalL23kCurrentDirectoryStringE_ZN7testing8internalL17g_captured_stdoutE_ZN7testing8internalL17g_captured_stderrE_ZN7testing8internalL21g_injected_test_argvsE_ZN7testing8internalL20PrintAsCharLiteralToIwwEENS0_10CharFormatET0_PSo_ZN7testing8internalL22PrintAsStringLiteralToEwPSo_ZN7testing8internalL20PrintCharsAsStringToIcEEvPKT_jPSo_ZN7testing8internalL20PrintCharsAsStringToIwEEvPKT_jPSo_ZN7testingL19FormatCountableNounEiPKcS1__ZN7testing8internalL12kUnknownFileE_ZN7testing8internalL27PrintTestPartResultToStringERKNS_14TestPartResultE_ZN7testing8internalL25FormatCxxExceptionMessageEPKcS2__ZN7testingL15kTestShardIndexE_ZN7testingL16kTestTotalShardsE_ZN7testingL16kUniversalFilterE_ZN7testing8internalL12FlagToEnvVarEPKc_ZN7testing8internal18StreamableToStringIPwEESsRKT_.isra.349_ZN7testing12_GLOBAL__N_115IsSubstringImplIPKcEENS_15AssertionResultEbS3_S3_RKT_S7__ZN7testing12_GLOBAL__N_115IsSubstringImplISsEENS_15AssertionResultEbPKcS4_RKT_S7__ZN7testing12_GLOBAL__N_115IsSubstringImplISbIwSt11char_traitsIwESaIwEEEENS_15AssertionResultEbPKcS8_RKT_SB__ZN7testing12_GLOBAL__N_115IsSubstringImplIPKwEENS_15AssertionResultEbPKcS6_RKT_S9__ZN7testing8TestCaseD0Ev.localalias.385_ZN7testing8internal12UnitTestImplD0Ev.localalias.387_ZGVZN7testing8UnitTest11GetInstanceEvE8instance_ZZN7testing8UnitTest11GetInstanceEvE8instance_ZN7testingL18kDefaultOutputFileE_ZN7testing8internalL22ExecDeathTestChildMainEPv_ZN7testingL20kDeathTestCaseFilterE_ZN7testingL18kDisableTestFilterE_ZN7testing8internalL17PrintColorEncodedEPKc.constprop.390_ZN7testing8internalL24kColorEncodedHelpMessageE_ZN7testing8internalL25kAlsoRunDisabledTestsFlagE_ZN7testing8internalL19kBreakOnFailureFlagE_ZN7testing8internalL20kCatchExceptionsFlagE_ZN7testing8internalL10kColorFlagE_ZN7testing8internalL19kDeathTestStyleFlagE_ZN7testing8internalL17kDeathTestUseForkE_ZN7testing8internalL11kFilterFlagE_ZN7testing8internalL25kInternalRunDeathTestFlagE_ZN7testing8internalL14kListTestsFlagE_ZN7testing8internalL11kOutputFlagE_ZN7testing8internalL14kPrintTimeFlagE_ZN7testing8internalL15kRandomSeedFlagE_ZN7testing8internalL11kRepeatFlagE_ZN7testing8internalL12kShuffleFlagE_ZN7testing8internalL20kStackTraceDepthFlagE_ZN7testing8internalL19kStreamResultToFlagE_ZN7testing8internalL19kThrowOnFailureFlagE_ZGVZN7testing8internalL23ExecDeathTestSpawnChildEPKPciE16stack_grows_down_ZZN7testing8internalL23ExecDeathTestSpawnChildEPKPciE16stack_grows_down_ZN7testingL31GetReservedAttributesForElementERKSs_ZN7testingL28kReservedTestSuiteAttributesE_ZN7testingL29kReservedTestSuitesAttributesE_ZN7testingL27kReservedTestCaseAttributesE_GLOBAL__sub_I_gtest_all.cc_ZStL8__ioinit_ZN7testingL22kDefaultDeathTestStyleE_ZTSN7testing8internal12_GLOBAL__N_123ClassUniqueToAlwaysTrueE.L1650.L3537.L1888.L1934.LC54.LC73.LC72.LC80.LC81.LC82.LC84.LC86.LC118.LC126.LC145.LC143.LC144.LC147.LC148.LC149.LC156.LC150.LC151.LC152.LC153.LC154.LC155.LC157.LC158.LC160.LC161.LC163.LC164.LC166.LC168.LC169.LC171.LC172.LC173.LC176.LC179.LC180.LC181.LC205.LC216.LC217.LC222.LC221.LC220.LC230.LC232.LC231.LC234.LC235.LC233.LC240.LC266.LC275.LC281.LC282.LC283.LC286.LC287.LC285.LC288.LC289.LC290.LC293.LC298.LC308.LC309.LC317.LC318.LC319.LC322.LC323.LC320.LC321.LC316.LC324.LC326.LC327.LC329.LC330.LC332.LC335.LC334.LC339.LC345.LC349.LC366.LC365.LC367.LC368.LC369.LC370.LC371.LC372.LC376.LC378.LC379.LC380.LC381.LC383.LC385.LC390.LC392.LC391.LC389.LC394.LC395.LC396.LC397.LC398.LC399.LC400.LC401.LC429.LC430.LC431.LC432.LC439.LC440.LC441.LC443.LC445.LC408.LC449.LC410.LC409.LC412.LC414.LC479.LC480.LC352.LC481.LC483.LC484.LC492.LC493.LC494.LC495.LC496.LC497.LC498.LC499.LC500.LC501.LC502.LC511.LC512.LC514.LC518.LC519.LC520.LC521.LC522.LC523.LC524.LC525.LC517.LC516.LC526.LC527.LC532.LC531.LC534.LC533.LC535.LC536.LC537.LC539.LC542.LC545.LC544.LC551.LC552.LC553.LC554.LC549.LC543.LC555.LC556.LC546.LC550.LC547.LC548.LC558.LC559.LC560.LC561.LC562.LC563.LC564.LC566.LC568.LC569.LC570.LC571.LC572.LC573.LC574.LC423.LC576.LC581.LC577.LC578.LC580.LC579.LC583.LC458.LC588.LC589.LC593.LC594.LC600.LC601.LC602.LC603.LC604.LC605.LC606.LC608.LC614.LC615.LC611.LC617.LC618.LC620.LC622.LC623.LC624.LC655.LC656.LC434.LC665.LC670.LC671.LC683.LC684.LC685.LC686.LC682.LC677.LC678.LC679.LC680.LC681.LC688.LC690.LC699.LC703.LC704.LC706.LC707.LC708.LC709.LC710.LC705.LC711.LC713.LC714.LC715.LC716.LC717.LC719.LC720.LC721.LC722.LC723.LC724.LC609.LC739.LC741.LC743.LC403.LC749.LC750.LC761.LC757.LC758.LC759.LC760.LC763.LC774.LC786.LC787.LC788.LC789.LC790.LC791.LC792.LC794.LC795.LC796.LC797.LC798.LC800.LC801.LC802.LC803.LC804.LC808.LC809.LC810.LC811.LC807.LC806.LC812.LC813.LC814.LC815.LC816.LC817.LC818.LC819.LC820.LC822.LC823.LC824.LC825.LC826.LC828.LC829.LC830.LC831.LC832.LC833.LC835.LC838.LC850.LC853.LC854.LC855.LC857.LC858.LC859.LC860.LC868.LC869.LC870.LC871.LC872.LC873.LC874.LC875.LC876.LC877.LC878.LC879.LC880.LC883.LC882.LC884.LC885.LC886.LC887.LC891.LC893.LC892.LC896.LC897.LC900.LC901.LC903.LC904.LC905.LC906.LC419.LC910.LC909.LC488.LC489.LC490.L1651.L1653.L1654.L1655.L1656.L1657.L1658.L1659.L1660.L1661.L3538.L3540.L3541.L3542.L3543.LC351.L1889.L1891.L1892.L1893.L1894.L1895.L1896.L1897.L1898.L1899.L1935.L1937.L1938.L1939.L1940.L1941.L1942.L1943.L1944.L1945.LC357.LC404.LC405.LC406.LC416.LC417.LC418.LC420.LC421.LC422.LC427.LC437.LC456.LC459.LC461.LC462.LC463.LC472.LC474.LC476.LC505.LC506.LC507.LC509.LC529.LC610.LC692.LC733.LC752.LC768.LC765.LC766.LC767.LC920.LC921.LC922.LC923.LC924.LC925.LC926.LC927.LC928.LC929.LC930.LC931.LC932.LC933_ZN7testing8internal26ThreadLocalValueHolderBaseD5Ev_ZN7testing11EnvironmentD5Ev_ZN7testing22EmptyTestEventListenerD5Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD5Ev_ZN7testing8internal23DefaultDeathTestFactoryD5Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD5Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD5Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD5Ev_ZN7testing8internal26GoogleTestFailureExceptionD5Ev_ZN7testing8internal24XmlUnitTestResultPrinterD5Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD5Ev_ZNSt6vectorISsSaISsEED5Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD5Ev_ZN7testing14TestPartResultD5Ev_ZN7testing12TestPropertyD5Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED5Ev_ZN7testing8internal5MutexD5Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED5Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED5Ev_ZN7testing8internal17StreamingListener12SocketWriterD5Ev_ZN7testing8internal18OsStackTraceGetterD5Ev_ZN7testing8internal17StreamingListenerD5Ev_ZN7testing7MessageC5ERKS0__ZN7testing8internal13DeathTestImplD5Ev_ZN7testing8internal13ExecDeathTestD5Ev_ZN7testing8internal15NoExecDeathTestD5Ev_ZNKSt5ctypeIcE8do_widenEc_ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev_ZN7testing8internal26ThreadLocalValueHolderBaseD1EvDeleteThreadLocalValue_ZN7testing4Test11DeleteSelf_Ev_ZN7testing4Test5SetupEv_ZN7testing8TestCase16RunSetUpTestCaseEv_ZN7testing8TestCase19RunTearDownTestCaseEv_ZN7testing11EnvironmentD2Ev_ZN7testing11EnvironmentD1Ev_ZN7testing11Environment5SetUpEv_ZN7testing11Environment8TearDownEv_ZN7testing11Environment5SetupEv_ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE_ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE_ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEv_ZN7testing22EmptyTestEventListenerD2Ev_ZN7testing22EmptyTestEventListenerD1Ev_ZN7testing4Test5SetUpEv_ZN7testing4Test8TearDownEv_ZNK7testing8TestCase30reportable_disabled_test_countEv_ZNK7testing8TestCase19disabled_test_countEv_ZNK7testing8TestCase21reportable_test_countEv_ZNK7testing8TestCase17test_to_run_countEv_ZNK7testing8TestCase16total_test_countEv_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEv_ZN7testing8internal24HasNewFatalFailureHelper20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD1Ev_ZN7testing8internal23DefaultDeathTestFactoryD2Ev_ZN7testing8internal23DefaultDeathTestFactoryD1Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD2Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD1Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD1Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD1Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZdlPv_ZN7testing8internal26ThreadLocalValueHolderBaseD0Ev_ZN7testing11EnvironmentD0Ev_ZN7testing8internal23DefaultDeathTestFactoryD0Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD0Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD0Ev_ZN7testing22EmptyTestEventListenerD0Ev_ZN7testing8internal17TestEventRepeaterD2EvDW.ref.__gxx_personality_v0_ZTVN7testing8internal17TestEventRepeaterE_Unwind_Resume__gxx_personality_v0_ZN7testing8internal17TestEventRepeaterD1Ev_ZN7testing8internal17TestEventRepeaterD0Ev_ZN7testing8internal18OsStackTraceGetter17CurrentStackTraceEii_ZNSsC1EPKcRKSaIcE_ZN7testing8internal26GoogleTestFailureExceptionD2Ev_ZTVN7testing8internal26GoogleTestFailureExceptionE_ZNSt13runtime_errorD2Ev_ZN7testing8internal26GoogleTestFailureExceptionD1Ev_ZN7testing8internal26GoogleTestFailureExceptionD0Ev_ZN7testing8internal17TestEventRepeater18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal17TestEventRepeater11OnTestStartERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal17TestEventRepeater27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater9OnTestEndERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal17TestEventRepeater16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal17TestEventRepeater18OnTestIterationEndERKNS_8UnitTestEiputcharprintf_ZNSs4_Rep10_M_destroyERKSaIcE_ZN7testing8internal24XmlUnitTestResultPrinterD0Ev_ZTVN7testing8internal24XmlUnitTestResultPrinterE_ZNSs4_Rep20_S_empty_rep_storageE_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Ev_ZTVN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD1Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Ev_ZNSt6vectorISsSaISsEED2Ev_ZNSt6vectorISsSaISsEED1Ev_ZNKSs4findEcj_ZNSs6appendEPKcj_ZNSsC1ERKSsjj_ZNSs6appendERKSs_ZSt24__throw_out_of_range_fmtPKczsnprintfstrlen_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i_ZN7testing8internal24XmlUnitTestResultPrinterD2Ev_ZN7testing8internal24XmlUnitTestResultPrinterD1Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD1Ev_ZN7testing8internal12AssertHelperC2ENS_14TestPartResult4TypeEPKciS5__Znwj_ZN7testing8internal12AssertHelperC1ENS_14TestPartResult4TypeEPKciS5__ZN7testing8internal12AssertHelperD2Ev_ZN7testing8internal12AssertHelperD1Ev_ZN7testing8internal15UnitTestOptions15GetOutputFormatEv_ZN7testing18FLAGS_gtest_outputEstrchr_ZNSsC1EPKcjRKSaIcE_ZN7testing8internal15UnitTestOptions20PatternMatchesStringEPKcS3__ZN7testing8internal15UnitTestOptions13MatchesFilterERKSsPKc_ZN7testing8internal13GetTestTypeIdEv__x86.get_pc_thunk.cx_ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_E_ZN7testing8internal20SingleFailureCheckerC2EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZNSsC1ERKSs_ZN7testing8internal20SingleFailureCheckerC1EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing8internal35DefaultGlobalTestPartResultReporterC2EPNS0_12UnitTestImplE_ZTVN7testing8internal35DefaultGlobalTestPartResultReporterE_ZN7testing8internal35DefaultGlobalTestPartResultReporterC1EPNS0_12UnitTestImplE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC2EPNS0_12UnitTestImplE_ZTVN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC1EPNS0_12UnitTestImplE_ZNK7testing8internal12UnitTestImpl21total_test_case_countEv_ZNK7testing8internal12UnitTestImpl22test_case_to_run_countEv_ZNK7testing8internal12UnitTestImpl21successful_test_countEv_ZNK7testing8TestCase21successful_test_countEv_ZNK7testing8internal12UnitTestImpl17failed_test_countEv_ZNK7testing8TestCase17failed_test_countEv_ZNK7testing8internal12UnitTestImpl30reportable_disabled_test_countEv_ZNK7testing8internal12UnitTestImpl19disabled_test_countEv_ZNK7testing8internal12UnitTestImpl21reportable_test_countEv_ZNK7testing8internal12UnitTestImpl16total_test_countEv_ZNK7testing8internal12UnitTestImpl17test_to_run_countEv_ZN7testing8internal12UnitTestImpl28CurrentOsStackTraceExceptTopEi_ZN7testing8internal15GetTimeInMillisEvgettimeofday_ZN7testing8internal6String13CStringEqualsEPKcS3_strcmp_ZN7testing15AssertionResultC2ERKS0__ZN7testing15AssertionResultC1ERKS0__ZN7testing16AssertionSuccessEv_ZN7testing16AssertionFailureEv_ZN7testing8internal6String17WideCStringEqualsEPKwS3_wcscmp_ZN7testing8internal6String28CaseInsensitiveCStringEqualsEPKcS3_strcasecmp_ZN7testing8internal6String32CaseInsensitiveWideCStringEqualsEPKwS3_wcscasecmp_ZN7testing8internal6String23EndsWithCaseInsensitiveERKSsS3__ZN7testing8internal20StringStreamToStringEPSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv_ZNSs7reserveEj_ZNK7testing7Message9GetStringEv_ZN7testing10TestResult20ClearTestPartResultsEv_ZN7testing10TestResult5ClearEv_ZNK7testing10TestResult15HasFatalFailureEv_ZNK7testing10TestResult18HasNonfatalFailureEv_ZNK7testing10TestResult16total_part_countEv_ZNK7testing10TestResult17GetTestPartResultEiabort_ZNK7testing10TestResult6FailedEv_ZNK7testing8internal12UnitTestImpl26successful_test_case_countEv_ZNK7testing8internal12UnitTestImpl22failed_test_case_countEv_ZNK7testing10TestResult19test_property_countEv_ZNK7testing10TestResult15GetTestPropertyEi_ZN7testing4TestC2Ev_ZTVN7testing4TestE_ZN7testing35FLAGS_gtest_also_run_disabled_testsE_ZN7testing28FLAGS_gtest_break_on_failureE_ZN7testing28FLAGS_gtest_catch_exceptionsE_ZN7testing17FLAGS_gtest_colorE_ZNSs6assignERKSs_ZN7testing28FLAGS_gtest_death_test_styleE_ZN7testing31FLAGS_gtest_death_test_use_forkE_ZN7testing18FLAGS_gtest_filterE_ZN7testing8internal35FLAGS_gtest_internal_run_death_testE_ZN7testing22FLAGS_gtest_list_testsE_ZN7testing22FLAGS_gtest_print_timeE_ZN7testing23FLAGS_gtest_random_seedE_ZN7testing18FLAGS_gtest_repeatE_ZN7testing19FLAGS_gtest_shuffleE_ZN7testing29FLAGS_gtest_stack_trace_depthE_ZN7testing28FLAGS_gtest_stream_result_toE_ZN7testing28FLAGS_gtest_throw_on_failureE_ZN7testing4TestC1Ev_ZN7testing4TestD2Ev_ZN7testing4TestD1Ev_ZN7testing4TestD0Ev_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEv_ZNK7testing8TestCase11GetTestInfoEi_ZN7testing8TestCase18GetMutableTestInfoEi_ZN7testing8TestCase11ClearResultEv_ZN7testing8TestCase14UnshuffleTestsEv_ZN7testing8internal16GetAnsiColorCodeENS0_10GTestColorE_ZN7testing8internal14ShouldUseColorEbgetenv_ZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczstdoutvfprintf__cxa_guard_acquirefilenoisatty__cxa_guard_release__cxa_guard_abort_ZN7testing8internal27PrettyUnitTestResultPrinter24OnEnvironmentsSetUpStartERKNS_8UnitTestEputsfflush_ZN7testing8internal27PrettyUnitTestResultPrinter27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter11OnTestStartERKNS_8TestInfoE_ZN7testing8internal29PrintFullTestCommentIfPresentERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater7ReleaseEPNS_17TestEventListenerEmemmove_ZN7testing8internal24XmlUnitTestResultPrinterC2EPKcstderrfwriteexit_ZN7testing8internal24XmlUnitTestResultPrinterC1EPKc_ZN7testing8internal24XmlUnitTestResultPrinter26RemoveInvalidXmlCharactersERKSs_ZN7testing8internal24XmlUnitTestResultPrinter21OutputXmlCDataSectionEPSoPKc_ZNSo5writeEPKcistrstr_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc_ZN7testing18TestEventListenersC2Ev_ZN7testing18TestEventListenersC1Ev_ZN7testing18TestEventListenersD2Ev_ZN7testing18TestEventListenersD1Ev_ZN7testing18TestEventListeners7ReleaseEPNS_17TestEventListenerE_ZN7testing18TestEventListeners8repeaterEv_ZNK7testing18TestEventListeners22EventForwardingEnabledEv_ZN7testing18TestEventListeners23SuppressEventForwardingEv_ZNK7testing8UnitTest26successful_test_case_countEv_ZNK7testing8UnitTest22failed_test_case_countEv_ZNK7testing8UnitTest21total_test_case_countEv_ZNK7testing8UnitTest22test_case_to_run_countEv_ZNK7testing8UnitTest21successful_test_countEv_ZNK7testing8UnitTest17failed_test_countEv_ZNK7testing8UnitTest30reportable_disabled_test_countEv_ZNK7testing8UnitTest19disabled_test_countEv_ZNK7testing8UnitTest21reportable_test_countEv_ZNK7testing8UnitTest16total_test_countEv_ZNK7testing8UnitTest17test_to_run_countEv_ZNK7testing8UnitTest15start_timestampEv_ZNK7testing8UnitTest12elapsed_timeEv_ZNK7testing8UnitTest6PassedEv_ZNK7testing8UnitTest6FailedEv_ZNK7testing8UnitTest11GetTestCaseEi_ZN7testing8internal27PrettyUnitTestResultPrinter16PrintFailedTestsERKNS_8UnitTestE_ZNK7testing8UnitTest18ad_hoc_test_resultEv_ZN7testing8UnitTest18GetMutableTestCaseEi_ZN7testing8UnitTest9listenersEv_ZN7testing14TestPartResultD2Ev_ZN7testing14TestPartResultD1Ev_ZN7testing12TestPropertyD2Ev_ZN7testing12TestPropertyD1Ev_ZNK7testing8UnitTest20original_working_dirEv_ZNK7testing8UnitTest11random_seedEv_ZN7testing8UnitTest27parameterized_test_registryEv_ZN7testing8internal12UnitTestImpl32SuppressTestEventsIfInSubprocessEv_ZN7testing8internal30WriteToShardStatusFileIfNeededEvfopenfclose_ZN7testing8internal20ShouldRunTestOnShardEiii_ZN7testing8internal12UnitTestImpl23ListTestsMatchingFilterEv_ZN7testing8internal12UnitTestImpl25set_os_stack_trace_getterEPNS0_27OsStackTraceGetterInterfaceE_ZN7testing8internal12UnitTestImpl19current_test_resultEv_ZN7testing8internal12UnitTestImpl14UnshuffleTestsEv_ZN7testing8internal6IsTrueEb_ZN7testing8internal10AlwaysTrueEv__cxa_allocate_exception__cxa_throw_ZN7testing8internal10SkipPrefixEPKcPS2_strncmp_ZN7testing8internal14ParseFlagValueEPKcS2_b_ZN7testing8internal13ParseBoolFlagEPKcS2_Pb_ZN7testing8internal15ParseStringFlagEPKcS2_PSs_ZNSs6assignEPKcj_ZN7testing8internal16InDeathTestChildEv_ZNKSs7compareEPKc_ZN7testing14ExitedWithCodeC2Ei_ZN7testing14ExitedWithCodeC1Ei_ZNK7testing14ExitedWithCodeclEi_ZN7testing14KilledBySignalC2Ei_ZN7testing14KilledBySignalC1Ei_ZNK7testing14KilledBySignalclEi_ZN7testing8internal20ExitedUnsuccessfullyEi_ZN7testing8internal23GetLastErrnoDescriptionEv__errno_locationstrerror_ZN7testing8internal9DeathTest11LastMessageEv_ZN7testing8internal9DeathTest24last_death_test_message_E_ZN7testing8internal9DeathTest27set_last_death_test_messageERKSs_ZN7testing8internal21StackLowerThanAddressEPKvPb_ZN7testing8internal14StackGrowsDownEv_ZNK7testing8internal8FilePath21FindLastPathSeparatorEvstrrchr_ZNK7testing8internal8FilePath21FileOrDirectoryExistsEv__xstat_ZNK7testing8internal8FilePath15DirectoryExistsEv_ZNK7testing8internal8FilePath15IsRootDirectoryEv_ZNK7testing8internal8FilePath14IsAbsolutePathEv_ZNK7testing8internal8FilePath11IsDirectoryEv_ZNK7testing8internal8FilePath12CreateFolderEvmkdir_ZN7testing8internal8FilePath9NormalizeEv_Znajmemset_ZdaPv_ZN7testing8internal8FilePath13GetCurrentDirEvgetcwd_ZNK7testing8internal8FilePath19RemoveDirectoryNameEv_ZN7testing8internal24GetCurrentExecutableNameEv_ZN7testing8internal17g_executable_pathE_ZNK7testing8internal8FilePath14RemoveFileNameEv_ZNK7testing8internal8FilePath27RemoveTrailingPathSeparatorEv_ZNK7testing8internal8FilePath28CreateDirectoriesRecursivelyEv_ZNK7testing8internal8FilePath15RemoveExtensionEPKc_ZN7testing8internal14GetThreadCountEv_ZN7testing8internal2RED2Evregfreefree_ZN7testing8internal2RED1Ev_ZN7testing8internal2RE9FullMatchEPKcRKS1_regexec_ZN7testing8internal2RE12PartialMatchEPKcRKS1__ZN7testing8internal8GTestLogD2Ev_ZSt4cerr_ZNSo3putEc_ZNSo5flushEv_ZNKSt5ctypeIcE13_M_widen_initEv_ZSt16__throw_bad_castv_ZN7testing8internal8GTestLogD1Ev_ZN7testing8internal14CapturedStream11GetFileSizeEP8_IO_FILEfseekftell_ZN7testing8internal14CapturedStream14ReadEntireFileEP8_IO_FILEfread_ZN7testing8internal17GetCapturedStreamEPPNS0_14CapturedStreamEdup2closeremove_ZN7testing8internal17GetCapturedStdoutEv_ZN7testing8internal17GetCapturedStderrEv_ZN7testing8internal18SetInjectableArgvsEPKSt6vectorISsSaISsEE_ZN7testing8internal18GetInjectableArgvsEv_ZN7testing8internal7g_argvsE_ZN7testing9internal220PrintBytesInObjectToEPKhjPSo_ZNSo9_M_insertImEERSoT__ZN7testinglsERSoRKNS_14TestPartResultE_ZNSolsEi_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate_ZNK7testing19TestPartResultArray4sizeEv_ZNK7testing19TestPartResultArray17GetTestPartResultEi_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE_ZTVSt15basic_streambufIcSt11char_traitsIcEE_ZNSt6localeD1Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev_ZN7testing7MessageC2Ev_ZNSt8ios_baseC2Ev_ZTVSt9basic_iosIcSt11char_traitsIcEE_ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNSt6localeC1Ev_ZNSt8ios_baseD2Ev_ZNSdD2Ev_ZN7testing7MessageC1Ev_ZN7testing8internal6String12FormatHexIntEi_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev_ZN7testing8internal27FormatTimeInMillisAsSecondsEx_ZNSo9_M_insertIdEERSoT__ZN7testing8internal6String15FormatIntWidth2Ei_ZN7testing8internal6String10FormatByteEh_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev_ZN7testing8internal10scoped_ptrISsE5resetEPSs_ZN7testing15AssertionResult13AppendMessageERKNS_7MessageE_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZN7testing8internal15CodePointToUtf8Ej_ZN7testing8internal16WideStringToUtf8EPKwi_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmodewcslen_ZN7testing7MessagelsERKSbIwSt11char_traitsIwESaIwEE_ZN7testing8internal6String15ShowWideCStringEPKw_ZN7testing7MessagelsEPKw_ZN7testing7MessagelsEPwisxdigit_ZN7testing8internal19UniversalPrintArrayEPKcjPSo_ZN7testing8internal7PrintToEPKcPSo_ZNSo9_M_insertIPKvEERSoT__ZN7testing8internal13PrintStringToERKSsPSo_ZN7testing13PrintToStringIPKcEESsRKT__ZN7testing8internal19UniversalPrintArrayEPKwjPSo_ZN7testing8internal7PrintToEPKwPSo_ZN7testing8internal17PrintWideStringToERKSbIwSt11char_traitsIwESaIwEEPSo_ZN7testing13PrintToStringIPKwEESsRKT__ZNSbIwSt11char_traitsIwESaIwEEC1EPKwRKS1__ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1__ZN7testing8internal17StreamingListener9UrlEncodeEPKc_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8__ZN7testing8internal8FilePath11ConcatPathsERKS1_S3__ZNSs6appendEjc_ZN7testing8internal17AppendUserMessageERKSsRKNS_7MessageE_ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo_ZN7testing8internal7PrintToEhPSo_ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo_ZN7testing8internal7PrintToEaPSo_ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo_ZN7testing8internal7PrintToEwPSo_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE5resetEPS6__ZN7testing15AssertionResultlsIA2_cEERS0_RKT__ZN7testing15AssertionResultlsISsEERS0_RKT__ZN7testing15AssertionResultlsIA11_cEERS0_RKT__ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT__ZN7testing8internal13HasOneFailureEPKcS2_S2_RKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing15AssertionResultlsIPKcEERS0_RKT__ZN7testing8internal18StreamableToStringIiEESsRKT__ZN7testing8internal27PrettyUnitTestResultPrinter15OnTestCaseStartERKNS_8TestCaseE__divdi3_ZN7testing8internal32FormatEpochTimeInMillisAsIso8601Exlocaltime_ZN7testing8internal8FilePath12MakeFileNameERKS1_S3_iPKc_ZN7testing8internal8FilePath22GenerateUniqueFileNameERKS1_S3_PKc_ZN7testing8internal18FormatFileLocationEPKci_ZN7testing8internal8GTestLogC2ENS0_16GTestLogSeverityEPKci_ZN7testing8internal8GTestLogC1ENS0_16GTestLogSeverityEPKci_ZN7testing8internal6Random8GenerateEj_ZN7testing8internal17StreamingListener12SocketWriter4SendERKSswrite_ZN7testing8internal9MutexBase4LockEvpthread_mutex_lockpthread_self_ZN7testing8internal9MutexBase6UnlockEvpthread_mutex_unlock_ZN7testing8internal5MutexD2Evpthread_mutex_destroy_ZN7testing8internal5MutexD1Ev_ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EE_ZN7testing8TestCase12ShuffleTestsEPNS_8internal6RandomE_ZN7testing8internal12UnitTestImpl12ShuffleTestsEv_ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv_ZN7testing8internal17StreamingListener12SocketWriter14MakeConnectionEvgetaddrinfosocketconnectfreeaddrinfogai_strerror_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Evpthread_getspecificpthread_key_delete_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED1Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED1Ev_ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT_strtoull_ZN7testing8internal13CaptureStreamEiPKcPPNS0_14CapturedStreamEdupmkstemp_ZN7testing8internal13CaptureStdoutEv_ZN7testing8internal13CaptureStderrEv_ZN7testing8internal17StreamingListener12SocketWriterD2Ev_ZTVN7testing8internal17StreamingListener12SocketWriterE_ZN7testing8internal17StreamingListener12SocketWriterD1Ev_ZN7testing8internal17StreamingListener12SocketWriterD0Ev_ZN7testing10TestResultC2Evpthread_mutex_init_ZN7testing10TestResultC1Ev_ZN7testing8internal18OsStackTraceGetterD2Ev_ZTVN7testing8internal18OsStackTraceGetterE_ZN7testing8internal18OsStackTraceGetterD1Ev_ZN7testing8internal18OsStackTraceGetterD0Ev_ZN7testing8internal17StreamingListenerD2Ev_ZTVN7testing8internal17StreamingListenerE_ZN7testing8internal17StreamingListenerD1Ev_ZN7testing8internal12UnitTestImpl21os_stack_trace_getterEv_ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs_ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal17StreamingListenerD0Ev_ZN7testing8internal12UnitTestImpl31SetGlobalTestPartResultReporterEPNS_31TestPartResultReporterInterfaceE_ZN7testing8internal12UnitTestImpl31GetGlobalTestPartResultReporterEv_ZN7testing8internal38DefaultPerThreadTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZNK7testing8UnitTest17current_test_infoEv_ZNK7testing8UnitTest17current_test_caseEv_ZN7testing10TestResultD2Ev_ZN7testing10TestResultD1Ev_ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoE_ZN7testing8internal37FormatCompilerIndependentFileLocationEPKci_ZN7testing8internal30GetBoolAssertionFailureMessageERKNS_15AssertionResultEPKcS5_S5__ZN7testing8internal26GoogleTestFailureExceptionC2ERKNS_14TestPartResultE_ZNSt13runtime_errorC2ERKSs_ZN7testing8internal26GoogleTestFailureExceptionC1ERKNS_14TestPartResultE_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal25ReportInvalidTestCaseTypeEPKcS2_ifprintf_ZN7testing8internal18StreamableToStringIxEESsRKT__ZNSo9_M_insertIxEERSoT__ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE_ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal27PrettyUnitTestResultPrinter9OnTestEndERKNS_8TestInfoE_ZN7testing8internal27PrettyUnitTestResultPrinter13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing8internal24XmlUnitTestResultPrinter9EscapeXmlERKSsb_ZN7testing8internal24XmlUnitTestResultPrinter29TestPropertiesAsXmlAttributesERKNS_10TestResultE_ZN7testing7MessageC2ERKS0__ZN7testing7MessageC1ERKS0__ZN7testing8internal13DeathTestImpl6PassedEb_ZN7testing8internal10ParseInt32ERKNS_7MessageEPKcPistrtol_ZN7testing8internal17Int32FromEnvOrDieEPKci_ZN7testing8internal11ShouldShardEPKcS2_b_ZN7testing8internal27PrettyUnitTestResultPrinter20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal14ParseInt32FlagEPKcS2_Pitoupper_ZN7testing8internal16BoolFromGTestEnvEPKcb_ZN7testing8internal18StringFromGTestEnvEPKcS2__ZN7testing8internal17Int32FromGTestEnvEPKci_ZN7testing16AssertionFailureERKNS_7MessageE_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_b_ZN7testing8internal14CmpHelperSTREQEPKcS2_S2_S2__ZN7testing8internal18CmpHelperSTRCASEEQEPKcS2_S2_S2__ZN7testing8internal14CmpHelperSTREQEPKcS2_PKwS4__ZNK7testing15AssertionResultntEv_ZN7testing8internal20DoubleNearPredFormatEPKcS2_S2_ddd_ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5__ZN7testing8DoubleLEEPKcS1_dd_ZN7testing8internal14CmpHelperSTRNEEPKcS2_PKwS4__ZN7testing8internal14CmpHelperSTRNEEPKcS2_S2_S2__ZN7testing8internal18CmpHelperSTRCASENEEPKcS2_S2_S2__ZN7testing11IsSubstringEPKcS1_S1_S1__ZN7testing14IsNotSubstringEPKcS1_S1_S1__ZNKSs4findEPKcjj_ZN7testing11IsSubstringEPKcS1_RKSsS3__ZN7testing14IsNotSubstringEPKcS1_RKSsS3__ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5__ZN7testing7FloatLEEPKcS1_ff_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjj_ZN7testing11IsSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZN7testing14IsNotSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7_wcsstr_ZN7testing11IsSubstringEPKcS1_PKwS3__ZN7testing14IsNotSubstringEPKcS1_PKwS3__ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE5resetEPS3__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1___cxa_begin_catch__cxa_rethrow__cxa_end_catch_ZN7testing8internal10scoped_ptrIKSsE5resetEPS2__ZN7testing8TestInfoC2ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE_ZN7testing8TestInfoC1ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE_ZN7testing8TestCaseC2EPKcS2_PFvvES4__ZTVN7testing8TestCaseE_ZN7testing8TestCaseC1EPKcS2_PFvvES4__ZN7testing8TestInfoD2Ev_ZN7testing8TestInfoD1Ev_ZN7testing8TestCaseD2Ev_ZN7testing8TestCaseD1Ev_ZN7testing8TestCaseD0Ev_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi_ZN7testing8TestCase11AddTestInfoEPNS_8TestInfoE_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal17TestEventRepeater6AppendEPNS_17TestEventListenerE_ZN7testing18TestEventListeners6AppendEPNS_17TestEventListenerE_ZN7testing18TestEventListeners23SetDefaultResultPrinterEPNS_17TestEventListenerE_ZN7testing18TestEventListeners22SetDefaultXmlGeneratorEPNS_17TestEventListenerE_ZN7testing8internal12UnitTestImpl24ConfigureStreamingOutputEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8UnitTest14AddEnvironmentEPNS_11EnvironmentE_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE5resetEPS2__ZN7testing8internal12UnitTestImplD2Ev_ZTVN7testing8internal12UnitTestImplE_ZN7testing8internal12UnitTestImplD1Ev_ZN7testing8internal12UnitTestImplD0Ev_ZN7testing8UnitTestD2Ev_ZTVN7testing8UnitTestE_ZN7testing8UnitTestD1Ev_ZN7testing8UnitTestD0Ev_ZN7testing8internal12UnitTestImplC2EPNS_8UnitTestEpthread_key_create_ZTVN7testing8internal23DefaultDeathTestFactoryE_ZTVN7testing8internal27PrettyUnitTestResultPrinterE_ZN7testing8internal12UnitTestImplC1EPNS_8UnitTestE_ZN7testing8UnitTestC2Ev_ZN7testing8UnitTestC1Ev_ZN7testing8UnitTest11GetInstanceEv__dso_handle__cxa_atexit_ZN7testing8internal15UnitTestOptions27GetAbsolutePathToOutputFileEv_ZN7testing8internal12UnitTestImpl18ConfigureXmlOutputEv_ZN7testing4Test15HasFatalFailureEv_ZN7testing4Test18HasNonfatalFailureEv_ZN7testing8internal31GetCurrentOsStackTraceExceptTopEPNS_8UnitTestEi_ZN7testing8internal14DeathTestAbortERKSsfdopenfputcfputs_exit_ZN7testing8internal13DeathTestImpl26ReadAndInterpretStatusByteEvread_ZN7testing8internal13DeathTestImpl5AbortENS0_9DeathTest11AbortReasonE_ZN7testing8internal16ForkingDeathTest4WaitEvwaitpid_ZN7testing8internal13DeathTestImplD2Ev_ZTVN7testing8internal13DeathTestImplE_ZN7testing8internal13DeathTestImplD1Ev_ZN7testing8internal13DeathTestImplD0Ev_ZN7testing8internal13ExecDeathTestD2Ev_ZTVN7testing8internal16ForkingDeathTestE_ZN7testing8internal13ExecDeathTestD1Ev_ZN7testing8internal13ExecDeathTestD0Ev_ZN7testing8internal15NoExecDeathTestD2Ev_ZN7testing8internal15NoExecDeathTestD1Ev_ZN7testing8internal15NoExecDeathTestD0Ev_ZN7testing8internal9DeathTestC2Ev_ZTVN7testing8internal9DeathTestE_ZN7testing8internal9DeathTestC1Ev_ZN7testing8internal16ForkingDeathTestC2EPKcPKNS0_2REE_ZN7testing8internal16ForkingDeathTestC1EPKcPKNS0_2REE_ZN7testing8internal9DeathTest6CreateEPKcPKNS0_2REES3_iPPS1__ZN7testing8internal15NoExecDeathTest10AssumeRoleEvpipefork_ZN7testing8internal23DefaultDeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE_ZTVN7testing8internal15NoExecDeathTestE_ZTVN7testing8internal13ExecDeathTestEchdirenvironexecve_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal18StreamableToStringIPcEESsRKT__ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSsmemcmp_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS__ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZTSN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZTIN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZTIN7testing8internal26ThreadLocalValueHolderBaseE__dynamic_cast__cxa_bad_typeid_ZN7testing13PrintToStringIxEESsRKT__ZN7testing8internal11CmpHelperEQEPKcS2_xx_ZN7testing8internal11CmpHelperNEEPKcS2_xx_ZN7testing8internal11CmpHelperLEEPKcS2_xx_ZN7testing8internal11CmpHelperLTEPKcS2_xx_ZN7testing8internal11CmpHelperGEEPKcS2_xx_ZN7testing8internal11CmpHelperGTEPKcS2_xx_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tag_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag_ZN7testing8internal12UnitTestImpl11GetTestCaseEPKcS3_PFvvES5__ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_PKvPFvvES6_PNS0_15TestFactoryBaseE_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag_ZSt19__throw_logic_errorPKc_ZNSs4_Rep9_S_createEjjRKSaIcEmemcpy_ZN7testing8internal15UnitTestOptions17FilterMatchesTestERKSsS3__ZN7testing8internal12UnitTestImpl11FilterTestsENS1_18ReactionToShardingE_ZN7testing14TestPartResult14ExtractSummaryEPKc_ZN7testing8internal17kStackTraceMarkerE_ZN7testing8internal19TypedTestCasePState25VerifyRegisteredTestNamesEPKciS3_isspace_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT__ZN7testing8internal11g_help_flagE_ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPw_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT__ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPc_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZTSN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZTIN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZN7testing8internal12UnitTestImpl41GetTestPartResultReporterForCurrentThreadEv_ZTVN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderEpthread_setspecific_ZN7testing8internal12UnitTestImpl41SetTestPartResultReporterForCurrentThreadEPNS_31TestPartResultReporterInterfaceE_ZN7testing32ScopedFakeTestPartResultReporter4InitEv_ZN7testing32ScopedFakeTestPartResultReporterC2EPNS_19TestPartResultArrayE_ZTVN7testing32ScopedFakeTestPartResultReporterE_ZN7testing32ScopedFakeTestPartResultReporterC1EPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC2ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC1ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterD2Ev_ZN7testing32ScopedFakeTestPartResultReporterD1Ev_ZN7testing32ScopedFakeTestPartResultReporterD0Ev_ZN7testing8internal24HasNewFatalFailureHelperC2Ev_ZTVN7testing8internal24HasNewFatalFailureHelperE_ZN7testing8internal24HasNewFatalFailureHelperC1Ev_ZN7testing8internal24HasNewFatalFailureHelperD2Ev_ZN7testing8internal24HasNewFatalFailureHelperD1Ev_ZN7testing8internal24HasNewFatalFailureHelperD0Ev_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZN7testing8internal13ExecDeathTest10AssumeRoleEvfcntlstrdupsigemptysetsigactiongetpagesizemmapclonemunmap_ZSt17__throw_bad_allocv_ZN7testing8internal24XmlUnitTestResultPrinter18OutputXmlAttributeEPSoRKSsS4_S4__ZN7testing8internal24XmlUnitTestResultPrinter17OutputXmlTestInfoEPSoPKcRKNS_8TestInfoE_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlTestCaseEPSoRKNS_8TestCaseE_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlUnitTestEPSoRKNS_8UnitTestE_ZN7testing8internal24XmlUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs_ZN7testing8internal29ParseInternalRunDeathTestFlagEv_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEv_ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT__ZN7testing8internal18g_init_gtest_countE_ZN7testing14InitGoogleTestEPiPPc_ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT__ZN7testing14InitGoogleTestEPiPPw_ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6__ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8UnitTest13PopGTestTraceEv_ZN7testing8internal11ScopedTraceD2Ev_ZN7testing8internal11ScopedTraceD1Ev_ZN7testing8UnitTest17AddTestPartResultENS_14TestPartResult4TypeEPKciRKSsS6__ZTIN7testing8internal26GoogleTestFailureExceptionE__cxa_free_exception_ZNK7testing8internal12AssertHelperaSERKNS_7MessageE_ZN7testing8internal20SingleFailureCheckerD2Ev_ZN7testing8internal20SingleFailureCheckerD1Ev_ZN7testing24ValidateTestPropertyNameERKSsRKSt6vectorISsSaISsEE_ZN7testing10TestResult20ValidateTestPropertyERKSsRKNS_12TestPropertyE_ZN7testing10TestResult14RecordPropertyERKSsRKNS_12TestPropertyE_ZN7testing8internal12UnitTestImpl14RecordPropertyERKNS_12TestPropertyE_ZNSs6assignEPKc_ZN7testing8UnitTest14RecordPropertyERKSsS2__ZN7testing4Test14RecordPropertyERKSsS2__ZN7testing4Test14RecordPropertyERKSsi_ZN7testing4Test19HasSameFixtureClassEv_ZN7testing8internal2RE4InitEPKcregcomp_ZN7testing8internal30ReportFailureInUnknownLocationENS_14TestPartResult4TypeERKSs_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKcDW.ref._ZTISt9exceptionDW.ref._ZTIN7testing8internal26GoogleTestFailureExceptionE_ZN7testing4Test3RunEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc_ZN7testing8TestInfo3RunEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc_ZN7testing8TestCase3RunEv_ZN7testing8internal12UnitTestImpl11RunAllTestsEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKc_ZN7testing8UnitTest3RunEv_ZN7testing8UnitTest14PushGTestTraceERKNS_8internal9TraceInfoE_ZN7testing8internal11ScopedTraceC2EPKciRKNS_7MessageE_ZN7testing8internal11ScopedTraceC1EPKciRKNS_7MessageE_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZN7testing19TestPartResultArray6AppendERKNS_14TestPartResultE_ZN7testing32ScopedFakeTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing10TestResult17AddTestPartResultERKNS_14TestPartResultE_ZN7testing8internal35DefaultGlobalTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitD1Ev_ZNSsD1Ev_ZN7testing8internal23kTestTypeIdInGoogleTestE_ZTVN10__cxxabiv117__class_type_infoE_ZTSN7testing8internal26ThreadLocalValueHolderBaseE_ZTVN10__cxxabiv120__si_class_type_infoE_ZTSN7testing8internal26GoogleTestFailureExceptionE_ZTISt13runtime_error_ZTIN7testing8internal9DeathTestE_ZTSN7testing8internal9DeathTestE_ZTIN7testing8internal16DeathTestFactoryE_ZTSN7testing8internal16DeathTestFactoryE_ZTSN7testing8internal23DefaultDeathTestFactoryE_ZTIN7testing8internal23DefaultDeathTestFactoryE_ZTIN7testing31TestPartResultReporterInterfaceE_ZTSN7testing31TestPartResultReporterInterfaceE_ZTSN7testing8internal24HasNewFatalFailureHelperE_ZTIN7testing8internal24HasNewFatalFailureHelperE_ZTSN7testing4TestE_ZTIN7testing4TestE_ZTSN7testing8TestCaseE_ZTIN7testing8TestCaseE_ZTIN7testing11EnvironmentE_ZTSN7testing11EnvironmentE_ZTIN7testing17TestEventListenerE_ZTSN7testing17TestEventListenerE_ZTIN7testing22EmptyTestEventListenerE_ZTSN7testing22EmptyTestEventListenerE_ZTSN7testing8UnitTestE_ZTIN7testing8UnitTestE_ZTSN7testing32ScopedFakeTestPartResultReporterE_ZTIN7testing32ScopedFakeTestPartResultReporterE_ZTIN7testing8internal27OsStackTraceGetterInterfaceE_ZTSN7testing8internal27OsStackTraceGetterInterfaceE_ZTSN7testing8internal18OsStackTraceGetterE_ZTIN7testing8internal18OsStackTraceGetterE_ZTSN7testing8internal35DefaultGlobalTestPartResultReporterE_ZTIN7testing8internal35DefaultGlobalTestPartResultReporterE_ZTSN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZTIN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZTSN7testing8internal12UnitTestImplE_ZTIN7testing8internal12UnitTestImplE_ZTIN7testing8internal17StreamingListener20AbstractSocketWriterE_ZTSN7testing8internal17StreamingListener20AbstractSocketWriterE_ZTIN7testing8internal17StreamingListener12SocketWriterE_ZTSN7testing8internal17StreamingListener12SocketWriterE_ZTIN7testing8internal17StreamingListenerE_ZTSN7testing8internal17StreamingListenerE_ZTSN7testing8internal27PrettyUnitTestResultPrinterE_ZTIN7testing8internal27PrettyUnitTestResultPrinterE_ZTSN7testing8internal17TestEventRepeaterE_ZTIN7testing8internal17TestEventRepeaterE_ZTSN7testing8internal24XmlUnitTestResultPrinterE_ZTIN7testing8internal24XmlUnitTestResultPrinterE_ZTSN7testing8internal13DeathTestImplE_ZTIN7testing8internal13DeathTestImplE_ZTSN7testing8internal16ForkingDeathTestE_ZTIN7testing8internal16ForkingDeathTestE_ZTSN7testing8internal15NoExecDeathTestE_ZTIN7testing8internal15NoExecDeathTestE_ZTSN7testing8internal13ExecDeathTestE_ZTIN7testing8internal13ExecDeathTestE_ZTVN7testing8internal26ThreadLocalValueHolderBaseE_ZNKSt13runtime_error4whatEv__cxa_pure_virtual_ZTVN7testing8internal16DeathTestFactoryE_ZTVN7testing31TestPartResultReporterInterfaceE_ZTVN7testing11EnvironmentE_ZTVN7testing17TestEventListenerE_ZTVN7testing22EmptyTestEventListenerE_ZTVN7testing8internal27OsStackTraceGetterInterfaceE_ZTVN7testing8internal17StreamingListener20AbstractSocketWriterE_ZN7testing8internal18OsStackTraceGetter19kElidedFramesMarkerE_ZN7testing8internal18g_linked_ptr_mutexE_ZN7testing38FLAGS_gtest_show_internal_stack_framesE__pthread_key_create_ZTISt9exception7ä= åIđˆæ¨æ´ņÃäÉ åÖķŪæķäų å  íö×äŨ åī î  1 R ī[ säy å‚ ŗ ËäŅ åāë đAL[“ž­Ô ņÜ ōâō ņ ņ ō ( B e äk åž ķà Ë Ö   H äN å[ k ‚ ô“ § ä­ åˇ "Ũ öø æ ņ ä å2 = æg äm åy 'Š (Ÿ ) öŲ íā öî ņ ä åj *• ä› åˇ (Ė *ņ -÷ åũ . ä å9 0Q -W åa 3 -‡ å‘ 6ö äü å;&ä, å5=Vä\ åeÎ†äŒ å•Īļäŧ åÅĐæäė åõŌä å%ŅCäI å[ íböyä åŽEŌäØ åõG7ä= å\"h0†æŽņâäč åMBäH åeOĸä¨ åĖQčäî åN*ä0 å@TVgUm õŒÄUä<Reņsäy åŒSĨäĢ åÖuä{ åĻGxä~ å[Á]É öĐęäđ å\[GäM åp^—ä åĀ^įäí å =7ä= å]=˜äž å¯aŅ]Ų öā÷äũ å d"8eCfOg`hfiqjwikŽl”iŸmĨi­nŧ'ÂiÉoÖpáqėrøst iu4J`vŒĸĩæŊņ×äŨ åédefg)h.i:j?iIkWl\ihmmiwn…'Ši–oĄpŦq¸rÃsĪtÔiŪuį3æĒņ3ä9 åFxNæä åX=X…-‹ å™ ÷Ą øē ųÅäË åÔhā úįNö û˙ üF2 ũ<Nb ūlFy ˙ƒF šFĢ ĩFÆ ĐFá ëF  N ' N8 øB FZ ä` åi w } ƒ“ œ ĸ  ° „ļ ž  Ú „ō ū …!ƒ!†!!‡1!€;! C!ˆ\!‰d!ņr!äx! å! ‰!‚! —!‹ž!ƒĨ!Œ˛!ä¸! åÁ! É!‚Ī! ×!‹Ū!ƒå!Œķ!äų! å" "‚" "" ." 5"ƒ<"ŒU"ä[" åĸ" ¯" Ä" –Ë" Ō" á" ę" ķ" –ū" 4# E#äK# å×#‘ú#ä$ å $ $ö5$“=$ G$”N$“U$Œa$•{$$ņ§$ä­$ åš$Ė$U?%U]%§%ē%ņÅ%äË% åØ% å%ë% ø% &™#&3&šF&›U&s&äy& å‡&"&đĶ&äŲ& åî& ū&ķ'æ2'ä8' åX'v'Ž'Ō'äØ' åį'_ō'äø' å(`(ä( å'(82(ä8( åG(9R(äX( åg(:r(äx( å‡(<’(ä˜( å§(>˛(ä¸( åĮ(?Ō(äØ( åį(@ō(äø( å)A)ä) å')Bs)äy) å‰)`Ģ)^Ã)äÉ) åŲ)`*^e*äk* åw*Š}* ­*ĻĘ*ŗā*=ø*Ō +{ +^5+‚;+ J+ R+^+ ,ä, å7,ŖT,äZ, åc, –i,x, ‚,Á’,Ÿ, Š,‚°,ƒˇ,ŒÃ,•õ,äû, å&- s- ‰- –“- ™- ¸- į- ķ-  . –. . 4. t.ƒ~.Œ/ä / å?/~‚/äˆ/ å’/Č­/Ęŗ/ |ŋ/ËÕ/äÛ/ åč/û/Í#0ä)0 å:0 A0ĖN0 X0Ėe0 o0ĖŠ0 ”0ĖĄ0 Ģ0ĖÂ0 Ė0Ėį0äí0 å1 #1ö/1051 A1P10X1e1n1œ1Í.2o2ņz2–2Ŗ2˛2ä¸2 åĘ2Î3ä3 å+3Î?3M3Ņb3äh3 åq3 x3j}3Ķ‹3 š3m#4ä)4 å84ÕD4Öc4äi4 åq4Ü}4 íŠ4Ũœ4öą4-ˇ4 åŊ4ßŌ4äØ4 åå4ßę4i"5ä(5 å:5áR5äX5 åh5ä‚5äˆ5 å5æ˛5ä¸5 åÍ5æS6äY6 ål6ė6įĨ6äĢ6 åĖ6îã6ī87C7ŅK7đ\7 íh7Ņš7ä 7 åÄ7ōĪ7 íæ7öņ70ú7í 8:8]8ņh8—8ä8 åŦ8ãĮ8öĐ80Ø8íį89019ņ99]9Š9ä9 å™9 í§9ö¯9õļ9ģ90Ã9íÎ9i×9ī9ķM:ņX:w:ä}: å‹:ã‘:ē:)Ë:iä:0ė:í; –$;Ņk;ņ§;ä­; åŧ;ęØ;á;0é;íø;<0><]<ņg<—<ä< åŠ<ęØ<įö<÷=ö==ø/=U=ët=‡=ņ•=Ŋ=äÃ= åĐ= !×=öā=0é=ö=˙=>R=>H>0Q>íŠ>0Ô>ú>ņ?s?äy? å’?ü?üĒ?ũÂ?äČ? åđ?@ä@ å@@d@äj@ åp@‘@™@ĩ@Ã@¯ā@“ę@Œī@]ô@Aä A åA "A 7Aä=A åIA SAîeA „A A)ĨAđĮAäÍA ååAŒņAúA B "BÁ#B )BÂ=BLBWBæŽBĄBņŗBäšB åÆB ÍBãBäéB åöB ũBCäC å$C ACƒCæ“Cæ C ąC-ˇC åŊC ŌCåCäëC åDD #D3D $?D[D %gD•Dä›D åŦD &žD 'ÄD (éDøDE ) EE!E *-E5E@EFE +REfEqE™EĄEÃEÕEãE¯F FSFäYF åpF}F ,‡F ŒF]ˇFäŊF åĘF"ÚF$āF%G&XG'vG'ŽG(ĖG āG)æGųG H'5H%FH*NHæVHņdH"pH+HäŖH åÃH$ÉH%īH&BI'uI'ŠI(I J)J*JSJ'}JJTąJÉJÕJ ėJ!@K%UK*„K%›K*ŖKņŗK.ģKņËK"ŪK+Lä#L åSL$YL%L&ĖL'M'M()M M)ŖMļMßM'ėM -úM0 NT.NFNRN iN!ŊN%ŌN*O%O*#Oņ3O.;OņKO"^O+ŖOäŠO åÁO$ĮO%ÍO&:P'oP'„P(čP  Q)Q$QMQ'ŒQœQTĸQ(´Q(ÃQ(ŌQęQöQ  R![R%pR*ĩRÉR¯SS.Sņ+S">S+GS%^S*fSņSäŖS åĘS$ĐS%ÖS&CT'xT'T(ņT U)U-UVU'šUÉUTĪU(áU(đU(˙UV#V :V!ˆV%V*åVųV¯3WCW.KWņ[W"nW+wW%ŽW*–WņĮWäÍW åûWö_X-fX .qX8zX0€X /ŒX•X;Y~Yņ†Y“Y§Yä­Y å×Y;Z92ZDZmZSsZ(‘Z¯ZģZ ĶZ!ŲZ&[%2[*U[<€[.ˆ[ņ™[ˇ[äŊ[ åđ[: \\e\œ\¯\ņÃ\äÉ\ åä\:] ô ]ö3]ä9] å>]>R]a]‹]ž]ņÃ]äÉ] åÎ]>â]ņ]^.^ņI^äO^ åb^ –u^ 0ƒ^Ĩ^ õĩ^ 1Å^ 2Õ^ 3å^ îõ^ 4_ 5_ 6%_ 7G_-O_ 8Y_8h_q_ž_Ķ_ũ_ņ``ä` å+` 97`Z` :f`‡`ä` åž` ;Ģ`É` <å`Aû` a.aCaäIa åua =a¨aäŽa åĀaDÆa >ŌaÚaúa ?bIbäOb å`b @mbzb <ēbAÔbãbōb ;ūbcäc åCc =OcˆcäŽc å cDĻc >˛cēc<Úc ?æc'dä-d ås1Ns1es1…s`s ›s7ŦsOģs7ĘsOŅs PŨs7ėsO÷s )t7tO%t73tO}[}ņa}Ŗ}ą}Ė}Ų}~ä ~ å~ R7~ S=~ TU~g^~~•~Ĩ~Ģ~ Kˇ~Ņ~Ü~å~ *ņ~#¯J Us‘Ÿ˛ņĮäÍ åõČ€ V€i€"€ W.€4€ X@€I€a€Č‚€ V–€iœ€ĸ€ YŽ€´€ ZĀ€ˀĶ€ [߀å€ \ņ€ū€ ].6ņCKņRäX åxu•ä› åģu؁uûv)‚ä/‚ åB‚Č…‚zĪ‚{í‚|ƒ(ƒ}Jƒ V^ƒidƒjƒ ^vƒ|ƒ _ˆƒ‘ƒĸƒ~ރ Vƒiȃ΃ `ڃ僛 V„i„ a'„,„›<„C„ )K„›[„c„{„ƒ„ņ„˜„ņĨ„­„ņĮ„ä̈́ åæ„ bú„i…… c…&…1…:… dF…O…\…"k…ˆt…´…‰˙…Ņ †Œ††[†m†u†ņƒ†–†æž†ņ˛†ä¸† åÁ† Ȇ eІ‡â†äč† åņ† ø† f‡‡‡ä‡ å+‡‘Ї gž‡i¤‡ h°‡ĩ‡ģ‡ iĮ‡ˇՇڇã‡ø‡ˆņˆäˆ åFˆ"Nˆ”`ˆ‘’ˆ gψiŦˆ h¸ˆŊˆÈ iΈԈŨˆâˆëˆūˆæ‰ņ‰'‰ä-‰ å?‰nN‰of‰q‚‰ g–‰iœ‰ĸ‰ jމ´‰ i‰ˉԉ≠gö‰iü‰Š kŠŠ i Š)Š2ŠJŠRŠņ_ŠgŠņwŠä}Š åŠnžŠoļŠqԊ gæŠiėŠōŠ jūŠ‹ i‹‹$‹2‹ gF‹iL‹R‹ k^‹d‹ ip‹y‹‚‹‹Ĩ‹ņ˛‹ē‹ņ‹äȋ å׋Ą÷‹äũ‹ åŒnŒo<ŒqZŒ gnŒitŒzŒ j†ŒŒŒ i˜ŒŖŒŦŒŒ g֌i܌⌠kîŒôŒ i -5ņBJņWä] åon~oœqē g΍iԍڍ jæė iøŽ Ž"Ž g6Ži<ŽBŽ kNŽTŽ i`ŽiŽrŽŽ•ŽņĸŽĒŽņˇŽäŊŽ åŲŽ?æ_īæũs g.i4: lFL iXaj‚Аņšä  寐 –öؐ`é0ī )ũ ‘O‘P‘0Y‘ĸ‘ŋ‘ņʑ’’ä’ åB’,H’ mZ’n’’…’ nš’ŗ’ƒג oé’ô’“ “ /“&“ p8“Q“d“s“V‡“Čē“ íŌ“ ôâ“›ō“ ô”›” ô"”›3”Y;”ņG”äM” å\” &t” q”gŖ”,š”ŋ” KҔؔ攕+•V?•Če•‚• r’• ô¤•Ė•ߕņí•Y –ä– å1–ö:–­C–a–ø–ŧ–ņĮ–æ–äė– å—‹—ƒ%—Œ4—@—Œd—w—ņЗ䐗 圗,ĸ— s´—ȗŲ—ߗ tô—ú— u ˜˜ v$˜8˜I˜O˜ wd˜j˜ x|˜‚˜ y”˜š˜ zŦ˜˛˜ {Ęʘ |ܘč˜V˙˜g™ }™“™ą%™H™Yb™ ôr™›‚™ ô’™›ęķ™Yû™ņššäš å,š^=š ~Hš‚Qš _š gš^xšo™š˛ š К ¸ššƒƚŒæš ōš ũš‚›<›O›ņg›äm› åy›o•›Ņœ› LŠ› Mļ› ŧ›ś‚Ī›é›˛ī› €œ  œœƒ$œŒsœņ~œ§œä­œ å𜠁Áœ‚ɜ§Ҝ ‚ۜ ƒķœŽúœ L M „+ 4Vod°w˛} …‡ ĸ Š †˛‚ē¨ԝ ‡Ũ ÷ŠžąžŠž )ž‚Fž ˆOž iž´rž ‰xž Šˆž ‹ž ›žĒĒžeŧž ‰ž ŠĪž Œ؞‚ឃ람&Ÿ oŸ„ŸņŊŸįŸäíŸ å ,9  –M  \ x V… YĨ  Žŋ  Õ  ë  ‘?ĄeĄ…ĄŖĄ2ĒĄ ’ēĄĐĄÖĄ “čĄ÷Ąĸ4ĸY<ĸņ\ĸäbĸ ånĸ,…ĸ–ĸœĸ ”ąĸēĸ ;ÉĸßĸņĸŖŖ&Ŗa=ŖbUŖöiŖēpŖ K‚Ŗ“Ŗ ôŖŖ›ÛŖVčŖY¤Y¤ņ¤E¤W¤ä]¤ 勤”¤¤,Ф˛¤ •Á¤Õ¤Ū¤ė¤ø¤ BĨ ĨCĨNĨ –^Ĩ›dĨ —sĨ›‰Ĩ’Ĩ´ĨVŧĨāŪĨČ3ĻMĻ,oĻ ˜Ļ›ĻĄĻ ™ąĻ›ÄĻVŅĻYØĻ šæĻ›îĻ ›ûĻ›§ §›(§ œ5§›K§T§§›§ ̧›ŗ§ —§›Ö§ß§¨ ž¨¨i ¨ Ÿ(¨-¨›6¨;¨F¨X¨c¨  s¨›z¨ —ˆ¨›ž¨§¨بã¨õ¨Š ô ŠŠ›HŠ ĄRŠ›hŠ~Š ĸ‹Š›“Š Ŗ Š›žŠ›ÅŠ œŌŠ›įŠđŠĒ.ĒYLĒņxĒY~Ē ĒēĒÃĒĶĒëĒøĒĢ:Ģä@Ģ åU̐Ģ,–Ģ ¤¨ĢŋĢVÎĢ×ĢëĢ ĨũĢŦ ĻŦŦ1Ŧ7Ŧ §IŦUŦV\Ŧ ¨eŦ |Ŧƒ†ŦŒŦY°Ŧ,ļŦ ¤ČŦßŦVîŦ÷Ŧ ­ Ĩ­#­ Š5­F­›L­ Ē^­j­Vq­ ¨z­ ­ƒ—­Œå­Yí­ņŽYŽņ%Ž]ŽwŽä}Ž å‰ŽĨŽ,ŽŽ ĢŊŽÅŽÖŽæŽŋüŽČI¯•W¯Y_¯ņw¯ä}¯ åĄ¯Á¯¯Á°,° Ŧ%°›,° –:°›B° ­O°›^°d° Žs°›z° –ˆ°›ް ¯°›̰Ŋĩ°Yž°Vɰ‚ذ䰃û°• ą,ą °ą›*ą –7ą›Bą ąLą›Wą –dą›lą ˛yą›Šą›•ą ”ĸą›ąąˇą ŗÆą›׹›čą›÷ą˛ t ˛›˛Ŋ%˛Y.˛V9˛‚H˛T˛ƒ^˛Œt˛,|˛ Ŧ‰˛›˛ –ž˛›Ϟ ­ŗ˛›²Ȳ Žײ›Ū˛ –랛ō˛ ¯ŗ› ŗŊŗY ŗV+ŗ‚:ŗBŗƒLŗŒƒŗ—ŗYŸŗņ¯ŗYˇŗņÅŗYÍŗņÛŗīŗY÷ŗņ´Y´ņ´Y%´ņ3´G´YO´ņ_´Yg´ņu´Y}´ņ—´ä´ 労qž´ ´Ä´ Í´lØ´ –ß´F𴠖ö´ –ĩÂĩr%ĩ 0ĩ‚8ĩ§@ĩ ‚Lĩ ƒ]ĩŽdĩ Loĩ Mĩ ĩŒĩ •ĩˇĩƒÁĩŒŌĩ ļÚĩ ˇâĩ‚õĩŊ˙ĩ ¸ļ‚!ļÁ,ļ=ļ šEļ‚wļ”ļņŸļĮļäÍļ åŪļÎúļ,ˇ ēˇ"ˇ3ˇEˇŋ[ˇČšˇ ôǎ›ēˇY¡ņŲˇäߡ åņˇ,÷ˇ  ¸$¸›7¸VD¸YM¸,q¸Å†¸Ŗ¸V°¸Yŋ¸Ō¸ ô⸛ššņ*šY@šYHšņTšäZš åzš‡š ģĸšÚķšäųš åē.ējēäpē å†ēŸēŽē,ˇē ŧÆēÜēėēŋģģČ!ģ7ģ`ģfģ,wģƒģVŠģ Ŋ“ģ œģąģYˇģƒŋģŒōģ ŧŧY:ŧņFŧoŧYxŧŒŧä’ŧ åžŧ,Šŧ@˛ŧVÆŧČöŧYūŧņŊä#Ŋ å/ŊK5Ŋ,RŊVaŊpŊ”ŊV Ŋ¯ŊžŊÕŊČũŊIžČ*ž5žæ|ž"„ž–ž4žžØžYįž4īžņũž'ŋä-ŋ åHŋ,Nŋ m`ŋtŋ…ŋ”ŋĶĄŋ nŗŋËŋÔŋ pæŋúŋ ĀĀ ž,Ā;ĀĶHĀ ŋZĀrĀKĀ,¤ĀVĩĀÄĀÖĀ5ęĀČÁIÁČ.Á=ÁæQÁČĸÁ ô˛Á›ÂÁ ôŌÁ›ÂYÂņÂ40ÂFÂYgÂäm å~ÂFÂFŠÂFĀÂĘÉÂũÂJ.ÃMÃņXÃwÃä}à åŽÃN­ÃFšÃFĐÃĘŲà ÄJ>Ä]ÄņhćÄäÄ åžÄLŊÄJÉÄJāÄĘéÄÅJNÅmÅņxÅ—ÅäÅ åĪÅ,íÅÆVÆ)Æ8ÆKÆČ”Æ"›ÆŽÆ4ÅÆåÆYųÆ4Įņ'Įä-Į åfĮKlĮ,rĮ Ā„ĮĮ5—ĮYŖĮ_ŗĮ,šĮ ËĮÖĮ5âĮYņĮ_Č,Č ÁČ$Č50ČY>Č,SČ0^Č5jČYxČ,~Č ÂČ›Č5§ČYļČ_ÄČ,ĘČ ÃÜČįČ5ņČYüČ_ É,É Ä$É-É57ÉYBÉ,WÉ0`É5jÉYuÉ,{É ÅÉ–É5 ÉYĢÉ_¸É,ĖÉÕÉ5ßÉYęÉ,˙É0Ę5ĘYĘ,#Ę Æ5Ę>Ę5HĘYSĘ_`Ę,tĘ}Ę5‡ĘY’Ę,§Ę0°Ę5ēĘYÂĘ !ÉĘZÔĘIáĘ4˙ĘJËY-Ë45ËņCËYTËYeËYvËY‡ËY˜ËYŠËYŋËYÕËYëËYĖYĖY+ĖYCĖäIĖ ånĖЇĖäĖ å›ĖLģĖJĪĖJØĖKáĖ,įĖ ĮųĖÍ5 ÍYÍ_&Í,,Í Č>ÍIÍ5SÍYaÍ_oÍ,uÍ É‡Í’Í5œÍYŠÍ[ˇÍ,ŊÍ ĘĪÍÚÍ5äÍYņÍ[üÍIÎČ*ÎAÎær·ÎJÖÎõÎņĪYĪ4Ī=ĪYNĪY_ĪYwĪä}Ī åŽĪFĢĪKąĪ,ēĪ ĮÉĪÔĪ5ŪĪYėĪ_úĪ,Đ ČĐĐ5'ĐY5Đ_CĐ,IĐ Ë[ĐfĐ5pĐY~Đ_ŒĐ,’Đ Ė¤Đ¯Đ5šĐYĮĐ_ÕĐ,ÛĐ ;íĐøĐ5ŅY ŅI!ŅČ@ŅMŅæeŅJ‘ŅYĄŅ4ŠŅņĩŅYÆŅYÛŅYėŅYŌä Ō åŌN;ŌKAŌ,JŌ ĮYŌdŌ5nŌY|Ō_ŠŌ,Ō ČĸŌ­Ō5ˇŌYÅŌ_ĶŌ,ŲŌ ÍëŌöŌ5ĶYĶ_Ķ,"Ķ Ė4Ķ?Ķ5IĶYWĶ_eĶ,kĶ ;}ĶˆĶ5’ĶYĶIąĶČĐĶŨĶæõĶJ!ÔY1Ô49ÔņEÔYVÔYkÔY|ÔY—ÔäÔ åĘÔšãÔ ;ëÔ ÎúÔ í ÕKÕ mÕ\$Õ_1Õ,7Õ BLÕUÕ5_ÕYgÕ FnÕ\zÕ_…Õ_“Õ,œÕ JĢÕļÕ5ĀÕYĮÕ EŅÕ\ŨÕ_ëÕ,ôÕ ĪÖÖ5ÖY&Ö_4Ö,HÖSÖ5]ÖYeÖ ĐnÖ\wÖ_‚Ö_Ö,ŖÖŦÖ5ļÖYÁÖIÕÖČîÖųÖæ'×JC×YS×4[×ņm×Y€×Y“×YĻ×YØäØ å8Ø×QØ ;WØ ÎhØ íwØK}Ø m†Ø\’Ø_ŸØ,ĨØ BēØÃØ5ÍØYÕØ FÜØ\čØ_ķØ[Ų, Ų JŲ$Ų5.ŲY5Ų E?Ų\KŲ_YŲ,bŲ ĪqŲ|Ų5†ŲY”Ų_ĸŲ,ļŲÁŲ5ËŲYĶŲ ĐÜŲ\åŲ_đŲ[ũŲ,ÚÚ5$ÚY/ÚICÚČ\ÚgÚæ‡ÚJŖÚYŗÚ4ģÚņÉÚYÜÚYķÚYÛYsÛäyÛ å–ÛÚšÛäŋÛ åØÛÜņÛ @÷Û ÎÜ íÜKÜ m#Ü\/Ü_<Ü,BÜ BWÜ`Ü5jÜYrÜ FyÜ\ˆÜ_•Ü, Ü=ŠÜ5ŗÜYžÜ,ÄÜ JÖÜßÜ5éÜYđÜ EøÜ\Ũ_Ũ,Ũ Ī)Ũ2Ũ5<ŨYHŨ_UŨ,iŨrŨ5|ŨY„Ũ Đ‹Ũ\–Ũ_ŖŨ,ŽŨ=ˇŨ5ÁŨYĖŨ,ŌŨ ;äŨíŨ5÷ŨYŪIŪČ/Ū:ŪæWŪJsŪYƒŪ4‹ŪņŪY°ŪYÃŪYÖŪYéŪYüŪYwßä}ß åĒßßÃß @Ëß Î×ß íæßKėß mõß\ā_ā,ā B*ā5ā5?āYGā FPā\_ā_qā,|ā?…ā5āYšā, ā J˛āģā5ÅāYĖā EÔā\āā_íā,ķā Īáá5áY$á_1á,EáNá5XáY`á Đgá\rá_‡á,’á?›á5ĨáY°á,ļá ;ČáŅá5ÛáYæáIúáČââæGâJcâYsâ4{âņ‰âYšâYąâYÄâY×âYęâYgãämã åã0ã0ĸã"ˇãöÎã"āãö ä’BäįRäį^ä‹äņ—äæ§äŊäæÚääāä åėäëūäöå"&åöƒå’°åæÃåæĶåįâåöåņææ'æä-æ åRæĻfæČsæ„æČ°ææįæūææUįį^įįņįĻ­įįĮįäÍį åŲįëûįîčæčĻ3čæIčæ`čČyč‰čæĩčâčĻøčæéæ"éį4éGéņcéäié åvéđ~éæ“éä™é åöéōęķ"ęä(ę åfęõręäxę åŠęöŦęä˛ę åÃę įę÷ ëäë å#ë Gë÷gëämë åvët™ëēëÚëįëėë"÷ë˜ė"ė*ė08ė0@ėySė ŅZėöhė›qė“ė÷Âė ŌÍė ÔėƒÛėŒ í ņí ōí í=íņCíPíæqí}íæíˇíÖíõíâîîäî å^îûwîä}î å‰î˙šî ĩîđŊîæīæ īčfī‚€īȡīČČīŲīŸéīĻ,đæBđæXđænđæđ€ đŧđtũđņņæ2ņ gFņiLņ ĶXņ]ņcņ ioņtņ}ņ‚ņ‹ņģņŪņŸōņĻō ōæ0ōæFōæXō„jōt‹ōņĸō6ĢōÅōũŌōûōæķ9ķ‚SķäYķ åfķnķæ‡ķäķ å™ķ­ķ ÁķÉķæØķsōķ gôi ôô lô$ô i0ô9ôBôoôwôņ…ôtôņŖôäŠô åļôžôæ×ôäŨô åéô˙õ íõöõ4&õ79õ‘Wõ˛]õüõ’ öpö"vöŒö˛’öØö"āö îöø÷ g÷i÷"÷ h.÷4÷ i@÷K÷T÷b÷ gr÷ix÷~÷ ÔŠ÷÷ iœ÷§÷°÷Â÷ gÖ÷iÜ÷â÷ Ôî÷ô÷ iø øø)ø8øKøņ]øũpø6yøŸ‡øĻ–ø ŠøæŧøæĪøæŪø„ėøtųų>ų‚gųämų åyųŒų‘Ļų"ąų Ęų gŪųiäų hđųõųûų iú úúú#ú8ú@úņKúæYútaúņwúä}ú å†ú ú ĸú Ģú ąú…Áú ÉúˆĪú Úúßú÷ú‰˙úņûäû å&û';û(bûönû0vûíû™ûéĩûöÆû0ÎûíÖû ßûŧīûöûû0üíüP üiwüęü&œüôŦüfÛü0ũ04ũ –;ũöGũ0OũíWũ `ũŧsũöũ0‰ũíšũPĻũ0¯ũ9ū íBūö˙F˙ņN˙^˙z˙Š˙í˙ũ˙¨Ū*ä0 å9&? ÕHĶ[e"p–ųО íŧĶÉō Öū ƒ Œ/LņWæc‚äˆ å ›ÆŖY˛ä¸ åĀ ËÆĶZãäé åõ  C#ä) å1 D P\jrŒ~Š“šĸŒ§]Ŋäà åŲÜđ!É7DÜi`x ׋ö— ž­7Ŋ ØĐ7ëOø *7 Ų$71 Ú?7EĐÉsÛy ž˜iŸ Û§Ŧ›ŋĮŲW,p‰ÜŸÛĨ žŧià ÜËĐ›ãę Ũō›û Ū ›$:Y¨Î žÜiã ßëđ›÷ ā˙›   / › O VU  žl i „ Œ ž š ÜÖ  ņ" A L  ą ž Î  ' ; YC ņN V ņa s ‘ Ŗ Ė äŌ  åķ  É l) ÜJ `Y  ×` öi  žw 7  ØŒ 7ž O¨  *ŗ 7Ā  áË 7Õ  Úā 7æ Y Én į ņ›Ĩ¯šÃÍéäī å!1ÉLYÜz`‰ אö™ ž§7ą Øŧ7ÎOØ *ã7đ âû7 Ú7‰É<ņB^z–˛Îīä å%+2 \ ãcökz”§ņŗäš åÆ*$ä å  Wä] åeú,… 䗝 å¯ĩ ļĮÍ Kßđ æ į);VOČo ži”Ļē ×É01AČ_`tö} ž7𠨧7šOà *Î7Ū čč7îÉÉä íķöûā‹Œ 28 םɰČÎ`ãöė žü7  Ø7$O+ *97@ éL7R)ÉE ×YÉlyÜš`Ŧöĩ žÂ7É ØØ7éOđ *û7 ę7 Ú#7)ŠÉŋ ĐŖÖ đ ëÜ&`8öA žN7U Ød7uO| *‡7Ž ėœ7Ŗ Ú¯7ĩ1ÉGXÉrņY&ņ?_—ä åĨ î`ú`  í 8 0  î+ ; OG 0M  /Y a āj Ø Ķ!j! "!Ķ3! ī=!ĶN!"_!-e!4Ž! đ—!8ž! ņ§!7­!āļ!ö!""- "5›"î"ņô"#3#^#k#æs#ņ}#Š#—#§#×#äŨ# åæ# ×ņ#É$$Ü3$`B$öP$ žZ$7g$ Ør$7$Oˆ$ *”$7Ą$ ōĢ$7˛$ Úž$7Ä$Ķ$å$÷$ %%-%?%Q%c%Éq% z%ŧ…%6ĸ%ÛŽ% ķĩ%öÅ%7Đ% ôØ%7į%Oí%ü%& &2&D&Ō&7á&8ī&Û' õ'ö'7&' ö2'7A'7H' ÷T'7c'Oi'x'†'”'ĸ'°'ž'×'U(k((—(­(Ā(ņÎ(ä(ū()*)@)V)ƒ)™)¯)ô)*9*O*e*—*ä* åÛ*Iį*Iū*Ę+5+Jm+Œ+ņ—+ˇ+äŊ+ åë+J,I%,I.,K7,,=, ĮO,X,5b,Yn,_|,,‚, Č”,Ÿ,5Š,Yˇ,_Å,,Ë, ÉŨ,č,5ō,Y˙,[ -,- Ę%-0-5:-YG-[R-Ij-Č€-“-æĸ-÷-Y.4.A.ņI.b.Ys.Y„.Y—.ä. åÉ.Jö.I /I/K/,"/ Į4/=/5G/YS/_a/,g/ øy/„/5Ž/Yœ/_Ē/,°/ ÉÂ/Í/5×/Yä/[ō/,ø/ Ę 0050Y,0[70IO0Če0x0æĒ0Û0ú0ņ1Y14"1B1YS1Yd1Y‡1ä1 åš1Jæ1Iú1I2K 2,2 Į$2-2572YC2_Q2,W2 ųi2t25~2YŒ2_š2, 2 ɲ2Ŋ25Į2YÔ2[â2,č2 Ęú2353Y3['3I?3ČU3h3æš3Ë3ę3ņö3Y44424YC4YT4Yw4ä}4 åŠ4JÖ4Ię4Iķ4Kü4,5 Į555'5Y35_A5,G5 úY5d55n5Y|5_Š5,5 Éĸ5­55ˇ5YÄ5[Ō5,Ø5 Ęę5õ55˙5Y 6[6I/6ČE6X6æŠ6ģ6Ú6ņæ6Yö647"7Y37YD7Yg7äm7 å™7JÆ7IÚ7Iã7Kė7,ō7 Į8 858Y#8_18,78 ûI8T85^8Yl8_z8,€8 É’885§8Y´8[Â8,Č8 ĘÚ8å85ī8Yü8[9I9Č59H9æz9Ģ9Ę9ņÖ9Yæ94ō9:Y#:Y4:Y]:äc: åp:ö|:0œ:0­:0ŧ:0Å:į:0û:Rf;"{;ė;ö—; –Ÿ;+ø;9õ<9#=ķC=`=ņf=–=š=æÁ=ņâ= >ä> å&>ö6>öB>"]>éf>‹> ŧ>SÆ>ôå>ņô>i?Č0? ü>?iE? ũM?R?›Y? ūa?›i?´?ŧ?ņÉ?æÕ?@ņ&@:@ä@@ åQ@0W@ !c@r@0z@‡@@¤@l´@(â@Uô@iAö$AiOA+’A+B –BŅ(B9BŅ?B íNB҇BœBņĒBŊBņCGCäMC åČCöDÃLD‚Dö‰D ––D+ŽD+ÉDYĪDe(EeE –pEÁzE –ƒEÁœE˛EÅEņįEäíE åüE\FšFU:FöRFņgFämF å‹F^§F,ßF(÷FUG>-G ˙?GUG[G mGvG’G(ŗG^ØGöH_HĶ6H@BHjH |H’H˜H ĒHŌH åH_IöI>=IWI›]I trI“I ôĄIV§I í°IĶÔI=āIY J=JYJņ-JhJgqJ }xJ“ƒJąŖJŒĢJ]×JäŨJ åíJ ¨ķJ –K(!KU2K‚>KŠK –K‚ãK‚ųK LņLäL å(L`BLäHL åXLcwLä}L å‹L€›LeļL"žLiÔLjōL gMi M MM#M i/M4M=MBMKM]MeMņwMä}M å‹M€›MežM"ÆMiÜMjN gNiN (N-N3N i?NDNMNRN[NmNuNņˆNäŽN å“N ĨNhąNkÅNĄŅN âNäčN åņNnOl"Oä(O å1OnNOlcOäiO årOn€O •Ok°O ÃOäÉO åÖOsŪOæķOäųO åPvP Ph*P 6PkCPäIP åVPvcP oPkƒPä‰P å–PyžPæˇPäŊP åČP (Q ×KQ`QuQŠQŸQ´QŋQÉĐQ1áQČ R`'Rö3R žCR7QR Ø[R7rRO‚R *R7ĻR čŗR7šRËRôRÉS ×S0SESZSoS„SSÉŠS}ēSČæS`ûSöT žT7T Ø/T7FTOVT *dT7zT ‡T7TŸTUÉ8U _UöeU €U7U –ŖU7ąU ”ĘU7ęU7øU ! V7 V72VGV\VqV†V›VŋV`ÚV`õV`Wö,W79W –BW7WW7lW7sW ˆW7WO˛W7ĮWOÜW7ņWOXX-XBXWXlXX–XĢXĀXÕXęX˙XCY;KYĘY0Z~@Z<\ZhZ~•Z< Z~ÁZ<ČZ íÜZöäZāöZ[‹ [Œ@[F[ ×a[É[€Œ[Üš[`Ķ[öß[ žę[7ņ[ Ø\7\O#\ *+\78\ A\7O\ ÚW\7]\o\„\™\Ž\Ã\Ø\í\]€]"^k!^ *^ 3^…C^\^‚z^ ×›^°^Å^Ú^ī^__É%_ČT_`n_öz_ ž…_7Œ_ Ø›_7°_Ož_ *Æ_7Í_ Ü_7â_ô_€` –` ×ŗ`Č`Ũ`ō`aa'aÉOaČ~a`˜aö¤a ž¯a7ļa ØÅa7ÚaOča *đa7÷a b7 bbĸb ļbƒÂb ×ãbøb c"c7cLcWcÉsc„„cČŗc`ÍcöŲc žäc7ëc Øúc7dOd *%d7,d ;d7AdSdŌd ×ádÉûd€eÜ5e`Oeö[e žfe7me Ø|e7‘eO˜e *§e7´e Ŋe7Äe ÚĶe7Ųeëeff*f?fPfafrfg ×3gHg]grg‡gœg§gÉŊgČėg`höh žh7$h Ø3h7HhOVh *^h7eh éth7zhŒhi ×!iÉ7iDiÜni`ˆiö”i žŸi7Ļi Øĩi7ĘiOØi *āi7įi ėöi7j Ú j7j$j9jNjcjxjjžj¯jykũ—kæŠkžkĪk2÷k@mâIm OmˆmäĢm{ŗmåÄmāmümn4nPnlnˆn˛nũĐnæânūnoņo…*oFobo~ošoļoŌoîopæ)pæBp^pzpžpēpÖpōpq*qFq€qĻqŋqæqr&r@r‰´rĐrėrs$s@s\s–s˛sÎsęst"t>tZtžtētÖtōtu*uFu€uœu¸uÔuv.vNvˆv¯vĪvëvw#w?w[w‚wŠwÉwéw x)xIx¯xÖxöxy9yä?y åKy RyĶcy myĶzy „yĶ™yČíy"z z z zzöez"{z zz zŸzö¸z VÉziĐz ØzŨz›äz ėz›ûz{-{"C{ zI{ z_{ö}{…{ņ™{æĨ{ņŽ{äš{{Á{åĖ{ä×{{ß{åč{æķ{äū{{|å |æ|æ:|ä@| åk|Q€|Č‘| VĨ|iĢ| ˇ|ŧ|Â| Î|Ķ|â|į|ī| ū|}} $}-}D}ēK} KW}h}p} |}Œ}’} ;ž}§}~æ*~2~ņ@~Y~w~ä}~ åœ~ Š~ö°~ ļ~Ā~›Ė~â~öë~ ˙~ö†Yö_ rö„†ÆöĖ ßöņ†€ #€ 9€ö?€ R€öd€†˜€/ € ŗ€öȀ†ö ö/†_ģp‡ ÁḖ Bę7‚7)‚ö=‚ēD‚ !P‚b‚h‚ "t‚Ē‚7ģ‚7ā‚—ė‚˜ƒ #ƒIƒ[cƒ\ƒ›)„ $5„›P„ %\„›Ŧ…ņ † ‡š‡ä ‡ å°‡ Ŋ‡öŇ &ˇׇ›ã‡đ‡ü‡ˆöˆ ,ˆö>ˆ†GˆpˆĐ„ˆ`ˆ L™ˆö̈†Ո=éˆ`ôˆ 'ūˆö‰†:‰ÎN‰`U‰ (c‰öu‰†œ‰ ģŦ‰ö˛‰ )ʼnö׉† Š/Š Šö.І^ŠģoŠwŠ Š›¨ŠŌšŠ{ˊ{ۊ‡ęŠ *öŠ›‹‹›XŒņ‘Œ¸Œzä€ 反 ŸöĻ +Ŧš›Á ,ĮĶ›ãėōũŦ ŽŽ`"Ž L1ŽöCކLŽuŽŠ‰Ž`“Ž 'žŽö°Ž†ڎĒîŽ`øŽ (ö†B ģUö[ )kö}†§¯ĩcŊ -͏öߏ† °/ /öA†hrvŊА`• .Ÿöą†ېĩæģ÷‘ /‘ö/‘ 6‘öH‘†o‘ ~‘›–‘ŗž‘Đ¯‘ŗē‘ˆɑĻ֑ 0â‘›ō‘ũ‘›i“ņŖ”Ė” •ä• å&•0.•íC•öO•T•øg•“m• 1s•{•ą„•‰•Œ•••ĸ• Ģ•´•Áä•$ę•%đ•&c–'˜–'­–(— 4—):—@—v—'†—‰š—SŦ—ΗÂԗ(æ—(õ—(˜$˜ ;˜!˜%¤˜* ™.\™ņd™w™™ņ“™›™%˛™*Ιš"/š+Wšä]š åfš ímšmršĶĸšmžšöėšÉ›0›L›0d›Œ›‹ą›Ņ›0é›Gœlœæ{œĨœ 2ޜmĩœ8ģœƜāœ"úœ06bæŽ…Ŧ…ɝ…ž‹ž ņž ō!ž/ž>žVž^žņlž†ž¤žēž ņž ōȞ՞æ÷žäũž å(ŸŒ<ŸČ`ŸtŸŸæ“Ÿŋ›ŸzŖŸ̟ú֟éŸņōŸäøŸ å Ž" ä(  å8 ‘W ä]  åo n‚ o  €´ CÕ í q Ą gĄi!Ą'Ą j3Ą9Ą iEĄPĄXĄjĄ g{ĄiĄ‡Ą k“Ą™Ą iĨĄ°Ą¸ĄÖĄ"áĄzĸ0 ĸjŗĸ gÄĸiĖĸ ĶĸØĸ›āĸ iįĸ›đĸøĸŖ"DŖLŖņWŖ_ŖņlŖptŖņŖæ‹Ŗ…–Ŗ¤Ŗä¯Ŗ“ˇŖåžŖæŅŖæâŖäčŖ åđŖ ųŖ–¤ä ¤ å,¤,D¤U¤mk¤”ФVä íҤöã¤[ķ¤öĨĨh2ĨfIĨu[ĨšdĨppĨY‡Ĩ\Ĩ›¨ĨļĨ BÉĨ›ĐĨ ļŪĨ›äĨ 3ķĨ› Ļ”EĻCgĻgzĻĻ–Ļ K¨ĻžĻÍĻúĻ€§"§ē§0ā§jķ§ g¨i ¨ ¨¨› ¨ i'¨›0¨8¨p¨"™¨Ę¤¨Ž­¨úŗ¨šš¨Ë¨äͨ“Õ¨åᨛō¨šŠpŠYŠņŠæ2Šæ@ŠæPŠZŠ…xŠ–ŠŪŠëŠ ĒäĒ åĒ )ĒC@ĒR^Ē rĒ™{ĒÉĒæĒņņĒĢä Ģ å0Ģ 4<Ģ 5CĢ 6JĢ^fĢ,€Ģ V”Ģ#ĸĢœĢĢ%ŋĢČíĢČŦŦæBŦbŦ í‹ŦŸŦņŽŦYžŦ4ŅŦ%÷ŦäũŦ å­Q5­,U­ 7x­ 9Š­ĸ­´­Ü­ ŗî­Ž<ŽVIŽYQŽ,YŽ 8fŽ›~Ž„Ž o“Ž›ŠŽ°Ž 9žŽ›ÆŽ ļĶŽ›ŲŽ /čŽ›îŽ :úŽ V¯#¯œ¯%'¯Y6¯g¯z¯ņ‡¯%—¯Y̝Yŗ¯ņƝäĐ¯ å÷¯ö°Ÿ°d°æް–°ņ¤°Į°äͰ åÛ° ÷°n ąo(ąö4ą0Rą0cą0oą0xą™ą0­ąP ˛ö/˛iP˛qc˛ gs˛iy˛˛ k‹˛‘˛ i˛Ϟ¯˛² gÖ˛iܲⲠjî˛ô˛ iŗ ŗŗ:ŗ0Lŗ0iŗpöŗã ´Y´pa´ņn´v´ņœ´¤´ņ°´ē´Į´'ĩä-ĩ å9ĩOĩ aĩŅ|ĩĄ¤ĩ ļĩŅâĩ ōĩŖļņ:ļä@ļ åLļ0Zļ0hļĸqļĘļŨļņčļģđļņˇäˇ åˇ !ˇ¤:ˇä@ˇ åNˇ,_ˇkˇV}ˇöˆˇĨ‘ˇļˇČ¸.¸Y6¸ņ>¸W¸ä]¸ åe¸ ›¸,̏,á¸,ę¸ uų¸š ;šš <)šIš›Oš Ådšjš =ššš› š >ĩšÉšéš›īš ?ē ē @ē"ē A4ē:ē :Fē VTē#^ēœfē%pēY­ē,ļē uÅēÎē vŨēũē›ģ Åģģ B0ģPģ›Vģ Ckģ†ģ›Œģ BĄģ§ģ Dšģŋģ EŅģ×ģ Féģīģ Gŧŧ :ŧ V!ŧ#+ŧœ3ŧ%=ŧYbŧ ôrŧ›‚ŧ ô’ŧ›ĸŧ ô˛ŧ›Âŧ ôŌŧ›âŧ ôōŧ›Ŋ ôŊ›#Ŋ%3ŊY;ŊņGŊYOŊņ[Ŋ%wŊä}Ŋ å‰Ŋ~–Ŋ¤Ŋî¯Ŋ H¸ŊĘŊŠåŊ IųŊŠžđFž,Ož J^žfžwž€ž Kž•ž Ąž L¨ž MŗžĢšž bĐž#Üžœäž%ķžŋYŋČ?ŋJŋæŋ%ŋĻŋYļŋ4žŋņÜŋäâŋ åėŋ íķŋöûŋ Ā™ĀIĀ\ĀņdĀäjĀ åo§Ā Ā “ĀšŠĀ NˇĀĢŋĀĖĀšŪĀ OėĀĢÁšÁ P%ÁĢeÁäkÁ å‰Á —Á  Áˇ¨ÁĄģÁDËÁšĶÁ ëÁ QøÁ¯Âš)Âŗ/ R=ÂĢEÂD€ÂŽĩÂäģ åŲ í ö¡ūÂĄÃšÃ 1Ãĩ7à SDÃąLÃDiÃ|qð}ÃŌ‰ÃDĸÚļÃļŧà TĮÃąÄäÄ å)ď9ÄaUč]ÄĀwÄ –~Ä –„Ä“ÄZœÄn°ÄrŊÄpöÄĄÅD/ÅqqÅ}„ÅD›ÅrņÅš#ÆZÆ˛fÆ8‹ÆēæÆ U&ĮDRĮ`jĮĮpĮrŲĮČ Č^1Čw?Č üSČiZČ VbČgČ›nČ WvČ›Č†Č XŽČ››ČĸČ YĒČ›ŗČĮČÄØČDôČüČņÉä É åÉm*É Z5ÉgDÉŗMÉ´hÉ‚É [‹ÉŸÉ ŠÉÁĩÉ ģŋÉ”ĮÉÂãÉīÉņĘä Ę åĘn2ĘoPĘ€dĘCžĘ0ÂĘqâĘ gķĘiųĘ˙Ę j ËË iË(Ë0ËBË gSËiYË_Ë kkËqË i}ˈːËĻË"ąËJĖ0pĖjƒĖ g”ĖiœĖ ŖĖ¨Ė›°Ė iˇĖ›ĀĖČĖčĖ" Í•&Í.Íņ9ÍAÍņNÍpVÍņcÍæmÍ…x͆Íä‘Í“™Íå ÍæŗÍæĘÍäĐÍ åÜÍôÍVÎiÎ ÎļxÎņ§Îä­Î åÖÎ0ëÎ0úÎ0)Īē6ĪUĪņ`Ī‚ĪäˆĪ å›ĪģˇĪäŊĪ åæĪ0ûĪ0 Đ0=ĐēJĐiĐņtĐœĐäĸĐ å­ĐÆļĐŊÆĐĄ ä å,0 \<›IQ ;]›h ]u›‚Š ^–›  !Ŧ›ĩVÂYÛYãņä åæä åæä åæä åæä åæä åæä åæä åæŧ*ŦĀ*­+Ŧ+­l+Ŧp+­ā+Ŧä+­ä åø ųä åø!ų)æä å '2æENæä å1Yxæä å1Y|æŒæä å%H_æä å ': \ ä åEæaæmņä åE]uä å=Uä å'/ A!Uä å'/ @!Hæ]ä å$Č=Hæeä å)V2?Ndv"|4 Ēŗņä å$ČDXeæ„– Šņä å0'2NXaņä å'<UKTpzƒņ _ č č č č č č ` a$ b( c, d0 e4 f8 č< č@ čD čH čL čP čT čX č\ č` čd čh čl čp čt čx č| č€ č„ čˆ čŒ č č” č˜ čœ g  č¤ č¨ čŦ č° č´ č¸ čŧ čĀ čÄ čČ čĖ čĐ čÔ čØ čÜ čā čä čč čė čđ čô čø čü č č č č  č č č č č  č$ č( č, č0 č4 č8 č< č@ čD čH čL čP čT čX č\ č` čd čh čl čp ht ix é| é€ é„ jˆ kŒ é é” é˜ éœ é  é¤ é¨ éŦ é° é´ é¸ éŧ éĀ éÄ éČ éĖ éĐ éÔ éØ éÜ lā éä mä å1$7%=&Ē'Ķ'ī(:(I(X u){”Ģ'ØöëEũT('(6(E]i €!Â%×*ō ?'O\j.rņ{"Œ+›%˛*ēņä å1$7%=&Ē'Ķ'Ü(F c)i‚Ĩ'ŌKåI÷LT2JV m!¯%Ä*â ?ķ :Mu"ˆ+‘%¨*°ņŲLé.ņņ÷ Mä å0'CMVņä å# 9-D ĸR 0^r{ o„Ĩ /ą õÎÜę 1ö  2* 36J îVj 4vŠ 5–Ē 6ļĘ 7Ö- 88*3]q ozƒ™-Ÿ nĒēÉ×äô ?J\rņ€Š o ę ę ę ę ę ę p q$ r( s, t0 u4 v8 ę< ę@ ęD ęH ęL ęP ęT ęX ę\ ę` ęd ęh ęl ęp ęt ęx ę| ę€ ę„ ęˆ ęŒ ę ę” ę˜ ęœ w  ę¤ ę¨ ęŦ ę° ę´ ę¸ ęŧ ęĀ ęÄ ęČ ęĖ ęĐ ęÔ ęØ ęÜ ęā ęä ęč ęė ęđ ęô ęø ęü ę ę ę ę  ę ę ę ę ę  ę$ ę( ę, ę0 ę4 ę8 ę< ę@ ęD ęH ęL ęP ęT ęX ę\ ę` ęd ęh ęl ęp xä å 9(G ĨR 0^r{ o„Ŗ /¯ õÎÜę 1ö  2* 36J îVj 4vŠ 5–Ē 6ļĘ 7Ö- 8#82;ex o‚Ž-´ nŋĪŪėų (6U`rˆņ–  y ë ë ë ë ë ë z {$ |( }, ~0 4 €8 ë< ë@ ëD ëH ëL ëP ëT ëX ë\ ë` ëd ëh ël ëp ët ëx ë| ë€ ë„ ëˆ ëŒ ë ë” ë˜ ëœ   ë¤ ë¨ ëŦ ë° ë´ ë¸ ëŧ ëĀ ëÄ ëČ ëĖ ëĐ ëÔ ëØ ëÜ ëā ëä ëč ëė ëđ ëô ëø ëü ë ë ë ë  ë ë ë ë ë  ë$ ë( ë, ë0 ë4 ë8 ë< ë@ ëD ëH ëL ëP ëT ëX ë\ ë` ëd ëh ël ëp ‚ä å ƒ%1: 9Fb onwŽ /šš-Ā nĘÚéķ ņä å Č ä å",?MjVs€ĸČâô" 49COYWņ ä å,4KVWfuˆČ´Æ"ÎŨ4÷ Yņ ä å",?MjVs€ĸČâô" 49COYWņ ä å,-HVTcr…Č´Æ"ÎŨ4÷ Yņ ä å,8IfVo|‹žČŌ ôäô" 49COYWņ ä å,/8VLČ~Y†ņ ä å"Č/ ü@iF „R[a …owlœ ü­iŗ †ŋČÚâ )ņ '/ņ8@ņä ån'oB gVi\ jhms i„’›­ĩņä åq: gNiTZ kfl ixŠĸĒņä ås2 gFiLR l^d ipy‚šĸņä å4ČE üYi_e ‡qw ˆƒŽ– ‰ĸ­ŗ YŋČęČjR üfilr Š~„ ‹›Ŗ Œ¯ē ŗÎŲā Yč›ņ ņ'ņ ä å"Č/ ü@iF „RW] inv„ĄŠņä å€:I gZi` Ķlqw iƒˆ‘–ž´á˙æ6Nkæyņä å€7R gfilr Ķ~„ i™ĸēÂņä å0ÜH†jČ–Čž üŌiØ Žäéōņä å.Č; üLiR „^ci uz‚ŖÄÔéõ!ņä å.Č; üLiR „^ci uz‚ŖŊæÔäų&1ņä å”(sB gVi\b lnt i€‰’Ǟņä å”'s9æR gfil lx}ƒ i”ĸĢŊÅņä å˜3ČT`uČ‚ ü“i™ „Ĩǰ ŧÁÉ×ęæ,<Q]l~‰ņ ä å'0- B9Ek]Čj ü~i„Š „–œ …¨ąĮlÔ üčiîô † )$4=Ltž¨ąņÅĪÜ ä å# *ö60>IW›`„›ĢŧËŨæņ ä åą' ģ/ ø@öF S8^›g¤ģÅÕįúņä å í3NK`ZNd ‘o8{0 ’OŠ0¯ “ģËOŲ›âd{“ĢÃÛķ %3BTfxŠœŽĀÉņŅáô-@Mä å˜3ČT`uČ‚ ü–iœ „¨­ŗ ŋÄÍÛî ææDTiu‡šŖņ ä å ”$ö>0D BP\ktȁ ü•i›Ą „­ŗ …ŋČŪlë ü˙i  †'/ );KT`”¤ēÉÕäö˙ņ$ ä å `( •08J0P B\hk€Č üĄi§­ „šŋ …ËÔęl÷ ü i †#3; )GW`lŦÄÜæõ(1ņ<HWa} ä å# –*ö60>Ic0i Buk™ČĻ üēiĀÆ „ŌØ …äíl ü$i*0 †<LT )`py…ÄÔėū &8JSņ\k~šĒ ä å,3ŗ<VPČ‚YŠņ ä å/˛5^> ģF øZöc —p8|0‚ ˜ŽžOĒ0° ™ŧĘ›Ķ$;Skƒ›ĢĩĀĪáķ)2ņ:KWds ä å,˛2=; ģC øWö` šm8y0 ˜‹›O§0­ ™šĮ›Đ$;Skƒ›ĢĩĀĪáķ)2ņ:KWds ä å°.˛4ą= ģE øYöb ›o8{0 ˜OŠ0¯ ™ģÉ›Ō$;Skƒ›ĢĩĀĪáķ)2ņ:KWdsä å"*$0%e&Ē'Æ'Ū( 0)6<\'oV‰˜´Ū%ī*÷æ˙ņ !Y)ņ7"C+ä å$%J&Ÿ'Î'ã(G j)pvŦ'Õ0÷$ũ%f''¤(´ %)+1g'0ĒSÃSÕKá,į Įü5Y_+,1 øFO5YYe_u,{ œ™5ŖYĢ F˛\Ā[Đ,Ö Ęëô5ūY [I'49NZ(i(x(‡ŸĢ Â!%+*1(C(R(ay… œ!÷%*'J×į÷ ( Y; 4M Z i v „ .• . ņÁ %Ø *ā ņ˙ Y Y' YH "[ +‹ %ĸ *à "Ö +ä å¯$ĩ%ę&A'r'‡(ë )P's0•$›%'/'D(T Å)ËŅ'*0DS]SqK},ƒ Į˜Ą5ĢYˇ_Į,Í øâë5õY_, œ,55?YG FN\\[l,r ʇ5šY¨[ŗIÃ4Õęö(((#;G ^!š%Į*Í(ß(î(ũ! 8!“%Ą*ŋJ'7GhY{4šŠļÄ.Õ.Ũņ % * ņ? YS Yg Yˆ "› +Ë %â * " +ä å(ČHTiČv üŠi „œĄ§ ŗ¸ÁĪâüæ$7O[m‚‹ņä å30B0g0v0ĢiēiĐiáięI"a0p0’0Ą0Ú0é0 GræÁģÉņÕßčņ#-@JUämģyå– ŠäžæÆåŅÛæäūģ åä(ģAæKæTätģ…æŽää å$Č=Hæeä åa‘Ē"ōæ7‘[‘ä åY‘š"ææ‘>‘ä åa‘Ē"ōæ7‘[‘ä åa‘Ē"ōæ7‘[‘ä å Čä å …ÉŖČÁ`Í ×Úö㠞ķ70  Ø,O80> *JY0_ mvŦÃÜô49ÉTap‚”ϏĘÜåņō$1BO]pä å!æä å$ ä å$!)æä å$ ä å$!)æä åa‘Ē"ōæ7‘[‘ ä å,.?NVbČ’ ô¤˛Yēņä åa‘Ē"ōæ7‘[‘ä å7;ä å7æJ=\gä åd?œ?ä åm?°?õAM?e"y0ŽBä"úäæ åæņä å$DQČ`EfFnG‚ g“i™ žĨǞČHĶÛņ ä å3$9%_&˛'į' (ƒ)‰Å'ÛŗëT'3 J!ž%ŗ*×%*'ņ5.=ņQ"d+ä åHĶ[Ķn͇Ķ(Ķ>ĶTĶä å?§?×?˙?l?¯?Ë?ä åOGnGGŦGGG<Gä å( Ÿ1VGWcXp’ä å0 –Q]eiΞĖaÖę –ķfüĪ  –gĪ0 –9hBĐS –\jeĐv –kˆĪ™ –ĸlĢĐŧ –ÅmÎĐß –čnņĪ – 'Đ% –.o7ĪH –QpZÄk –tq}ÄŽ –—r Īą –ēsÃÄÔ –ŨtæĐ÷ –u Ī  &Ķ:aIWb ĄnĶ{ ĸ‡Ķ” Ŗ Ķ¯ÆĐŲņä å- –L:WecΧÁaË⠖ëfôĪ –gĪ( –1h:ĐK –Tj]Đn –wk€Ī‘ –šlŖĐ´ –ŊmÆĐ× –ānéĪú –' Đ –&o/Ī@ –IpRÄc –lquĆ –r˜ĪŠ –˛sģÄĖ –ÕtŪĐī –øuĪ  Ķ2aAOZ ĄfĶs ĸĶŒ Ŗ˜Ķ§žČŅņä å$fQČ`gfFnG‚ g“i™ žĨǞČHĶÛņä å Hä å30W0ŒiĄi°Âķ"020j0ЏōæNäY{aåmw€ņ–äŽ{ÁæÉåÎæ×äčōä {åæ%æä åI:RõWifrŸŦø:0+8Zdb m‰‹–­ˇĀņä åGQõVieqŸŦė0)BbJ Uq‹~•Ÿ¨ņä å Iä å€*CN"Yę0 j g0i7 ?D›K iS›\d|"˜…æ°æžæÆņÕŨņæäņ“ųåä åD0u0ĩiŨiėū4"_0’0Ú0ú)cæĀäË“Ķåßéōņä “3æ;å@æIä[etä“‡åŒæ˜æä å ŽäŖ9­ĒŧÆËæäîķæüņä9Ē.8=æSä[ågqvæņ†æņä å ŽäŖ9­ĒŧÆËææđõæūņ ä9!Ē0:?æWä_åkuzæƒņŠæ“ņä å ŽäŖ9­ĒŧÆËæäîķæüņä9Ē.8=æSä[ågqvæņ†æņä å ŽäŖ9­ĒŧÆËææđõæūņ ä9!Ē0:?æWä_åkuzæƒņŠæ“ņä å40I0X0ƒ•¨ŗäÆš×åŨéæōņä å;0P0_0‰0Ą0ŗ0īiii6iOi`ii—ĄĢá"00$0:šOšnĒÕßķæ/>P[äpæxåäš¯äģššņ.@IņRalsæ~ŸĒņ¸ää å   ŋ+Ā07 ¤@ÆFeN ĨXÆ^fh ĻpÆvg ú‡ §Į–hĸö­Áŗģ – ¨ČĮĶlØöâlčđ íû ŠĮ 'ö'!) Ē1Æ7o@ .IČOpY ĢaČgqp ŦyÆr‰ ­‘Č—s  ŽĢĮļtģöÅtËĶ ¯ÛÆáuéīõ , –# °)Į4j9öCjIP ąYÆ_kkmuö€†ß—ŧÁt___ _____ _$_(_,_@_D_H_L_P_T_X_\_`oÖÃÄÅÆĮÃÉÃËÅĖĘÃĪÅĐÎÃŌÃÔÃ×ÃŲÅÛØÃÜÅŪÎÃáÅâāÅäÎÅæÎÃčÃëÅíęÅīÚÅđØÅōØÅôÚÅöČÅø÷ÅúųÅüųÅDFÅfFFą įšú û˙ČĘÎÖ¸ čšēģØ $(,048<@ÚË íŧŊžŋ Ā$Á(Â,Ã0Ä4Å8Æ<Į@ČāęÉėŽ kxî™ Ÿ§¨žŋ œ$Š(ž,´0ĩ4Å8Æ<š@ßs tŧåâ ëžįā ęĸĶĖÍ´Õđ ņņŪ ėĶÃŠÔ a$Ž(¯,ļ0ˇ48Õ<¸@Öķķ ôüũ ū$˙(,048<@õ  ŧŊžŋ Ā$Á(Â,Ã0Ä4Å8Æ<Š@Čã• –õ×Ũ é ÷žųžû( )0žũ% &|žÍÜ é3Ņy zØE gÚ ãŪ ãããá!â(ã/ãíãõãããã*ã=ãPãWãdãtã}ã–ãĻã¯ãČãØãáãúããã)ã5ã@ãKãQãoãŒã¤ãĢãČãĪãâãéãã ã*ã1ãNãUãrãyã‘ã˜ãĢã˛ãŅãÚãáãņãüã ãã!ã(ãGãeã}ã„ãĄã¨ãģãÂãßãæãã ã'ã.ãKãRãjãqã„ã‹ãĒãŗãēãßãįãōãããã)ã5ãKãfãƒã–ãĸãŽãēãĐãëããã'ã4ãTãiãuã‡ã”ã ãŦã¸ãÄãĐãÜãčãôã ã ã ã% ã7 ãB ãM ãX ã^ ãg ãm ã„ ãŠ ãĄ ã§ ãē ãĀ ãĶ ãŲ ãņ ã÷ ã ã ã5 ã< ãY ã_ ãw ã~ 㖠㝠㴠ãģ ãŲ ãā ã÷ ãū ã ã! ã8 ã? ãV ã] ãt ã{ ㎠㕠ãļ ãŊ ãß ãæ ã ã ã* ã1 ãJ ãQ ãj ãq ㊠㑠ãĒ ãą ãĘ ãŅ ãę ãņ ã ã ã) ã0 ãR ãY ãl ãs ã| 㓠㎠ãÉ ãî ãã=ã]ã‚ãžãĨãÂãÉãæãíã ãã)ã0ãOãnã†ããĨãŦãÄãËãããęãã ã!ã(ã@ãGã_ãfã„ã‹ã¤ãĢãÃãĘãããęãūããã$ãAãHãkãŽãĢã˛ãĪãÖãķãúããã;ãBãiãpã’ã™ãļãŊãßãæã˙ãã"ã)ãPãWãyã€ãã¤ãÆãÍãđã÷ãã ãLãSãzããŖãĒãŅãØãúãã#ã*ãGãNãpãwãžãĨãÖãŨã ãã7ã>ãjãqã˜ãŸãËãŌãųãã,ã3ã_ãfã’ã™ãÅãĖãøã˙ã*ã1ã\ãcã€ã†ãŖãĒãŅãØãņãøããã/ã6ãNãUã|ãƒãĨãŦãÎãÕã÷ãūã ã'ãNãUãwã~ã ã§ãÉãĐã÷ãūã ã'ãIãPãrãyã ã§ãÉãĐãōãųãã"ãIãPãrãyã›ãĸãÄãËãōãųãã"ãDãKãmãtã‘ã˜ãŋãÆã÷ãūãã"ãIãPãã‡ã”ã˛ãšãÆãäãëãøãã!ãDãJãWãuã|ã‰ã§ãŽãģãÔãäã ã ã ã ã# ã- ã9 ãL ãY ãy ㎠㚠ãŦ ãš ãÅ ãŅ ãŨ ãé ãõ ã!ã !ã!ã%!ã1!ã>!ãP!ã[!ãf!ãq!ãw!ã€!ã†!ã!ãŖ!ãē!ãĀ!ãĶ!ãŲ!ãė!ãō!ã "ã"ã'"ã-"ãN"ãU"ãr"ãx"ã"ã—"ã¯"ãļ"ãÍ"ãÔ"ãō"ãų"ã#ã#ã3#ã:#ãQ#ãX#ão#ãv#ã#ã”#ã§#ãŽ#ãĪ#ãÖ#ãø#ã˙#ã $ã'$ãC$ãJ$ãc$ãj$ãƒ$ãŠ$ãŖ$ãĒ$ãÃ$ãĘ$ãã$ãę$ã%ã %ã#%ã*%ãB%ãI%ãk%ãr%ã…%ãŒ%ã•%ãŦ%ãĮ%ãâ%ã&ã1&ãV&ãv&ã›&ãˇ&ãž&ãÛ&ãâ&ã˙&ã'ã#'ã*'ãB'ãI'ãh'ã‡'ãŸ'ãĻ'ãž'ãÅ'ãŨ'ãä'ãü'ã(ã(ã"(ã:(ãA(ãY(ã`(ãx(ã(ã(ã¤(ãŊ(ãÄ(ãÜ(ãã(ãü(ã)ã)ã)ã6)ã=)ãZ)ãa)ã„)ã§)ãÄ)ãË)ãč)ãī)ã *ã*ã0*ã7*ãT*ã[*ã‚*ã‰*ãĢ*ã˛*ãĪ*ãÖ*ãø*ã˙*ã+ã+ã;+ãB+ãi+ãp+ã’+ã™+ãļ+ãŊ+ãß+ãæ+ã ,ã,ã2,ã9,ãe,ãl,ã“,ãš,ãŧ,ãÃ,ãę,ãņ,ã-ã-ã<-ãC-ã`-ãg-ã‰-ã-ãˇ-ãž-ãī-ãö-ã".ã).ãP.ãW.ãƒ.ãŠ.ãą.ã¸.ãä.ãë.ã/ã/ãE/ãL/ãx/ã/ãĢ/ã˛/ãŪ/ãå/ã0ã0ãC0ãJ0ãu0ã|0ã™0ãŸ0ãŧ0ãÃ0ãę0ãņ0ã 1ã1ã)1ã01ãH1ãO1ãg1ãn1ã•1ãœ1ãž1ãÅ1ãį1ãî1ã2ã2ã92ã@2ãg2ãn2ã2ã—2ãš2ãĀ2ãâ2ãé2ã3ã3ã93ã@3ãb3ãi3ã‹3ã’3ãš3ãĀ3ãâ3ãé3ã 4ã4ã44ã;4ãb4ãi4ã‹4ã’4ã´4ãģ4ãŨ4ãä4ã 5ã5ã45ã;5ã]5ãd5ã†5ã5ãĒ5ãą5ãØ5ãß5ã6ã6ã46ã;6ãb6ãi6ãš6ãŖ6ãŦ6ãļ6ãģ6ãÅ6ãĐ6ãÜ6ãâ6ãč6ãî6ãô6ãú6ã7ã7ã7ã7ã7ã#7ã*7ã17ã97ãA7ãH7ãO7ãV7ã_7ãk7ãq7ãw7ã}7ãƒ7ã‰7ã7ã˜7ã¤7ãĒ7ã°7ãļ7ãŧ7ãÅ7ãŅ7ã×7ãŨ7ãã7ãė7ãõ7ã8ã8ã8ã28ãK8ãW8ãd8ãk8ãˆ8ã8ãą8ã¸8ãÕ8ãÜ8ãų8ã9ã'9ãC9ãQ9ãm9ã{9ãŠ9ã™9ã¨9ãˇ9ãÆ9ãÕ9ãä9ãō9ã:ã:ã":ã0:ã>:ãm:ã–:ã¤:ã;ã;ã@;ãa;ãg;ã„;ã;ã–;ãŗ;ãš;ãÖ;ãÜ;ãų;ã˙;ã<ã"<ã?<ãE<ãb<ãk<ãt<ãz<ãœ<ãĸ<ãĀ<ãŨ<ãé<ãī<ã=ã=ã=ã8=ã>=ãP=ãd=ãj=ã|=ã=ã–=ã¤=ãš=ãÅ=ãĐ=ãä=ãī=ã>ã>ã">ã->ãA>ãL>ã`>ãk>ã>ã†>ã›>ã§>ãļ>ãŋ>ãØ>ãį>ãđ>ã ?ã?ã!?ã:?ãI?ãR?ãk?ãz?ãƒ?ãœ?ã§?ã°?ãĘ?ãÖ?ãâ?ãî?ã @ã"@ã(@ã?@ãE@ãa@ãg@ãƒ@ã‰@ãĨ@ãĢ@ãĮ@ãÍ@ãŨ@ãí@ãų@ãAãAãAã(Aã2AãDAãPAã\Aã{AãAã”AãšAã­AãŗAãËAãŅAãíAãķAãBãBã1Bã7BãSBãYBãuBã{Bã™BãĢBãļBãÁBãÖBãõBãûBãCãCã/Cã5CãLCãRCãnCãtCã‹Cã’CãŽCãĩCãŅCãØCãôCãûCãDãDã:DãADã_DãhDãDãŽDãˇDãÁDãĘDãŅDãéDãõDãüDãEãEã3EãSEãjEãsEã}Eã†EãEãĒEãˇEãžEããEãōEãųEãFãFã*Fã?FãGFãbFãmFãyFã†Fã’FãŸFãĢFãąFã¸FãÄFãĐFãÛFãįFãķFã˙Fã GãGã#Gã)GãÄã]Äã|Äã”Äã›ÄãŗÄãēÄãŌÄãŲÄãņÄãøÄãÅãÅã/Åã6ÅãNÅãUÅãsÅãzÅã’Åã™ÅãąÅãˇÅãĐÅã×ÅãôÅãûÅãÆãÆã>ÆãaÆã~Æã…ÆãÆã¤ÆãŧÆãÃÆãÛÆãâÆãúÆãĮãĮã Įã8Įã?ĮãXĮã_ĮãsĮãyĮã›ĮãĸĮãÅĮãĖĮãéĮãđĮãČãČã2Čã9ČãMČãTČãrČãxČã–ČãČãĀČãĮČãåČãėČãÉãÉã.Éã4ÉãQÉãWÉã‡Éã‘Éã–Éã ÉãŦÉãˇÉãÂÉãÍÉã×ÉãįÉãīÉãûÉãĘãĘãĘã'Ęã1ĘãAĘãIĘãUĘã`ĘãkĘãvĘã€ĘãŒĘã—ĘãĸĘã­Ęã¸ĘãÂĘãŌĘãÚĘãęĘãōĘãūĘã ËãËãËã)Ëã5Ëã@ËãKËãVËã`ËãlËãËã‘ËãšËãŖËã˛ËãÅËãŅËãŨËãéËãõËãĖãĖã2ĖãMĖãVĖãaĖãqĖã}ĖãĖã›Ėã§ĖãŗĖãČĖãâĖãčĖãÍãÍã%Íã0Íã<ÍãGÍãMÍãdÍãjÍãÍã‡ÍãžÍãŗÍãŌÍãėÍã Îã%Îã+ÎãGÎãMÎãjÎãpÎã’ÎãĄÎã×ÎããÎãīÎãûÎãĪãĪãĪã+Īã7ĪãCĪãOĪã[ĪãqĪã’ĪãŊĪãŲĪãõĪãûĪãĐãĐã=ĐãDĐã\ĐãcĐã‚ĐãĄĐãšĐãĀĐãØĐãßĐã÷ĐãūĐãŅãŅã5Ņã<ŅãTŅã[ŅãsŅãzŅã˜ŅãŸŅãˇŅãžŅãÖŅãÜŅãõŅãüŅãŌã Ōã=ŌãDŌãcŌã†ŌãŖŌãĒŌãÂŌãÉŌãáŌãčŌãĶãĶãĶã&Ķã>ĶãEĶã]ĶãdĶã}Ķã„Ķã˜ĶãžĶãĀĶãĮĶãęĶãņĶãÔãÔã7Ôã>ÔãWÔã^ÔãrÔãyÔã—ÔãÔãģÔãÂÔãåÔãėÔã ÕãÕã3Õã:ÕãSÕãYÕãvÕã|ÕãŦÕãļÕãģÕãÅÕãŅÕãÜÕãįÕãōÕãüÕã ÖãÖã'Öã3Öã?ÖãUÖãpÖãˆÖã”ÖãÖãĻÖã°ÖãÃÖãĘÖãúÖã ×ã×ã×ã5×ã;×ãR×ãf×ãs×ã‡×ã”×ãĄ×ãŽ×ãÄ×ãä×ãë×ã˙×ãØã Øã+Øã=ØãIØãWØãdØãqØã~ØãØãØãĒØãˇØãÄØãŅØãŪØãëØãøØã˙ØãŲãŲã6Ųã=ŲãUŲã\ŲãtŲã{Ųã”Ųã›Ųã¸ŲãŋŲãØŲãßŲãüŲãÚãÚã"Úã:ÚãAÚãYÚã`ÚãxÚãÚã—ÚãžÚãļÚãŊÚãÕÚãÜÚãôÚãûÚãÛãÛã2Ûã9ÛãMÛãTÛãhÛãoÛãƒÛãŠÛãžÛãĨÛãšÛãĀÛãÔÛãÛÛãīÛãöÛã ÜãÜã%Üã,Üã@ÜãGÜã[ÜãbÜãvÜã}ÜãžÜãĨÜãÁÜãČÜãéÜãđÜãŨãŨã>ŨãEŨãfŨãmŨã‰ŨãŨãąŨã¸ŨãĐŨã×ŨãũŨãŪã*Ūã1ŪãWŪã^Ūã„Ūã›ŪãÁŪãŨŪãųŪãßãßã$ßã<ßãCßã[ßãbßãßã ßã¸ßãŋßã×ßãŪßãößãũßãāãāã4āã;āãSāãZāãrāãyāã‘āã˜āãąāã¸āãÕāãÜāãųāãáã"áã)áãKáãRáãjáãqáãŽáã•áãŽáãĩáãÎáãÕáãōáãųáãâãâã<âãCâãaâãhâã|âãƒâã âã§âãÄâãËâãčâãīâã ãããã0ãã7ããTãã[ããxããããœããŖããĀããĮããßããčããņããúããäã äãäã$äã0äã;äãFäãQäã\äãqäã‹äã‘äã¨äãŽäãÅäãËäãâäãčäãåã åã!åã'åãCåãIåãjåãpåã–åãĸåã­åãēåãÅåãĐåãÛåãæåãņåãæã"æãBæãIæã`æãgæã~æã…æãœæãŖæãēæãÁæãŨæãäæãûæãįãįã%įãFįãMįãsįãxįã‚įãŽįãšįãĻįãģįãíįãōįã÷įãčãčãčã&čã2čã>čãJčãVčãbčãnčãzčãÜčããčãéãéãéã&éã>éãEéã]éãdéãƒéã›éãĸéãēéãÁéãŲéãāéãøéã˙éãęãęã6ęã=ęãVęã]ęãęã†ęã¨ęã¯ęãČęãĪęãņęãøęãëãëã1ëã8ëãUëã\ëãyëã€ëãëã¤ëãÁëãČëãåëãėëã ėãėã-ėã4ėãQėãXėãuėãŽėã—ėã ėã¯ėãģėãĮėãĶėãčėã$íã0íã;íãFíãQíã[íãgíãríã}íãˆíã’íãžíãŠíã´íãŋíãÉíãÕíãāíãëíãöíãîã îãîã"îã-îã7îãCîãNîãYîãdîãnîãzîã…îãîã›îãĨîãąîãŧîãĮîãŌîãÜîãčîãķîãūîã īãīã$īã-īã7īãJīãQīãmīãtīãŸīãĢīãļīãÁīãËīã×īãâīãíīã÷īãđãđãđã#đã/đã5đãIđãSđã_đãhđãrđã…đãŒđã¨đã¯đãÚđãæđãņđãņãņã$ņã/ņãCņãJņã_ņãuņã†ņã’ņãņãŖņãļņãŋņãĘņãāņãņņãũņãōãōã!ōã*ōã5ōãAōãLōãWōãaōãmōã|ōã…ōãžōã­ōãļōãĪōãŪōãįōãķãķãķã1ķã@ķãIķãbķãqķãzķã“ķã™ķãĻķã¯ķãČķãĶķãéķãúķãôãôãôã*ôã3ôã>ôãTôãeôãqôã|ôã‚ôã•ôãžôãŠôãŋôãĐôãÜôãįôãíôãõã õãõã*õã;õãGõãRõãXõãkõãtõãõã•õãĻõã˛õãŊõãÃõãÖõãßõãęõãöãöãöã(öã.öãAöãJöãUöãköã|öãˆöã“öã™öãŦöãĩöãĀöãÖöãįöãķöãūöã÷ã÷ã ÷ã+÷ãA÷ãR÷ã^÷ãi÷ão÷ã‚÷ã‹÷ã–÷ãĸ÷ã­÷ã¸÷ãÃ÷ãÎ÷ãØ÷ãä÷ãī÷ãú÷ãøãøãøã'øã=øãNøãdøãuøã‹øãœøã˛øãÃøãŲøãęøãųãųãųã(ųã.ųãAųãJųãUųãkųã|ųã’ųãŖųãšųãĘųãāųãņųãúãúã%úãNúãwúã úãÉúãōúãûã%ûãNûãwûã ûãÉûãōûãüã.üã?üãUüãfüã|üãüã’üã—üã üãĻüãžüãßüãåüãūüãũãũã)ũã@ũãGũãdũãkũãˆũã‘ũãšũã ũãšũãŋũãßũãųũãūã-ūã=ūãQūãaūãuūã”ūãŠūãÃūãĶūãÜūãâūã˙ã˙ã˙ã#˙ã7˙ãG˙ãP˙ãY˙ãm˙ã}˙ã†˙ã˙ãŖ˙ãŗ˙ãŧ˙ãÕ˙ãä˙ãķ˙ããã!ã*ãCãRãaã€ããžãŽãˇãÆãäãíãã&ã/ã8ãGã_ãlã†ã›ãĒãŗãĮãŌãæãņããã2ã=ã_ãjã~ã‰ãĢãļãĘãÕã÷ããã)ã4ãHãSãuã€ã”ãŸãÁãŅãÚãķããã'ã;ãFãZãeã‡ãĒãČãâãíãã ã.ãLãfãqã…ãã˛ãĐãęãõã ãã6ã^ãmãvããŸã¨ãĪãŪãįãããã-ãFãUãiãyãˆã˜ãĸãĢãÄãÔãããķãũãããBãRãaãqã{ã„ãã­ãŧãĖãÖãßãøã ã ã% ã> ãN ã] ãm ãw 〠㙠㊠㸠ãČ ãŌ ãÛ ãô ã ã ã# ã- ã6 ãO ã_ ãn ã~ ㈠㑠ãĒ ãē ãÉ ãŲ ãã ãė ã ã ã$ ã4 ã> ãG ãe ãu ã„ ã” ãĀ ãĐ ãß ãī ã ãM ã] ãl ã| ㆠ㏠㨠㸠ãĮ ã× ãá ãę ã ã ã" ã2 ã< ãE ã^ ãn ã} ã ã— ã  ãš ã× ãņ ãü ããã=ãMã\ãlãvãã˜ã¨ãˇãĮãŅãÚãķããã"ã,ã5ãNã^ãmã}ã‡ããŠãšãČãØãâãëããã#ã3ã=ãFã_ãnãwãã ãŠãĐãāãéãōãã.ãQãaãjãsã‡ã¯ãžãĮãāãđãųã ã0ã9ãBã`ãˆã—ã ãšãÉãŌãųã ããã9ãIãRãkã“ãĸãĢãÄãÔãŨãããã&ãDãTã]ãvã…ã”ãŖãŧãËãßãôããã!ã*ã>ãMãVãoããˆã‘ãĨãÄãėãûããã-ã6ã]ãlã€ããŧãîãũããã/ã8ã_ãoãxããŸã¯ã¸ãŅãāãéããããBãRã[ãtã„ã°ãĀãėãã-ã6ãOã_ãhããŸã¨ãąãĪãßãčããã=ãMãyãĢãēãÃãÜãėãõãã,ã5ã>ã\ãlãuãŽãžãĘãÚãã8ãGãPãiãyã‚ãŠãšãÂãËãéãųããã+ãWãgã“ãÅãÔãŨãöããã6ãFãOãXãvã†ãã¨ã¸ãäãôã ãRãaãjãƒã“ãœãÃãĶãÜãåã ã ã ã5 ã@ ãP ãY ãb ãv ㆠ㏠㞠㧠ãČ ãî ã÷ ã!ã-!ã4!ãA!ãJ!ãS!ãg!ãn!ã{!ã„!ã!ãĄ!ãą!ãē!ãÃ!ã×!ãŨ!ãę!ãķ!ã"ã!"ã5"ã;"ãH"ãQ"ão"ãu"ã‚"ã‹"ãŠ"ãš"ãÂ"ãÛ"ãę"ãķ"ã #ã#ã>#ãN#ãW#ãp#ã€#ã‰#ãĸ#ãą#ãē#ãØ#ãč#ãņ#ã $ã$ã$ã$$ã-$ã=$ãC$ãS$ãY$ãf$ão$ã$ã“$ã˜$ãž$ãą$ã¸$ãÖ$ãÜ$ãë$ãņ$ã%ã %ã%ã*%ã1%ã8%ã?%ãF%ãM%ãT%ã[%ãb%ãi%ãp%ãw%ã|%ã‡%ã“%ãŸ%ãĢ%ãˇ%ãÃ%ãĪ%ãÛ%ãč%ãõ%ã&ã&ã&ã)&ã6&ãC&ãP&ã]&ãj&ãw&ã„&ã‘&ãž&ãĢ&ã¸&ãÅ&ãŌ&ãß&ãė&ãų&ã'ã'ã'ã''ã2'ãA'ãR'ã]'ãi'ãu'ã”'ã™'ã¤'ãĀ'ãÖ'ãō'ã(ã3(ãY(ãt(ã(ãŦ(ãÂ(ãÎ(ãô(ã)ã:)ãe)ã€)ã–)ãˇ)ãĶ)ãî)ã*ã.*ãS*ãs*ãŽ*ãŠ*ãĪ*ãé*ã+ã+ã7+ãQ+ãŒ+ã˜+ã¤+ã°+ãŧ+ãČ+ãÔ+ãā+ãė+ãø+ã,ã,ã',ãF,ãe,ã„,ã¯,ãĘ,ãë,ã-ã&-ãF-ãf-ã…-ã›-ãģ-ãÛ-ãû-ã.ã2.ãI.ãO.ãg.ãn.ã†.ãŒ.ã¤.ãĢ.ãÃ.ãĘ.ãį.ã /ã/ã /ã,/ãF/ãY/ãm/ã…/ã/ã§/ãŗ/ãŋ/ãŲ/ãė/ã0ã 0ã0ã"0ã<0ãT0ãl0ã0ã“0ã§0ãļ0ãÅ0ãÔ0ãã0ãî0ã 1ã1ã$1ã01ã<1ãH1ãT1ãj1ã…1ã 1ãĻ1ãÃ1ãÉ1ãæ1ãė1ã2ã2ã22ã82ãP2ãV2ãt2ãz2ãĸ2ãŽ2ãē2ãÆ2ãŌ2ãŪ2ãę2ã3ã3ã63ã<3ãY3ã_3ã|3ã‚3ã¤3ãĒ3ãČ3ãÎ3ãæ3ãė3ã 4ã4ã84ãD4ãO4ãZ4ãe4ãp4ãz4ã‡4ã•4ãĸ4ã¯4ãŧ4ãĶ4ãī4ãö4ã5ã5ã-5ã45ãL5ãS5ãp5ãw5ã5ã–5ãŗ5ãē5ã×5ãŪ5ãû5ã6ã6ã&6ãC6ãJ6ãg6ãn6ã†6ã6ã™6ãĻ6ã´6ãÁ6ãÎ6ãÛ6ãō6ã7ã7ã-7ã47ãL7ãS7ãk7ãr7ã7ã–7ãŽ7ãĩ7ãŌ7ãŲ7ãö7ãũ7ã8ã!8ã>8ãE8ãb8ãi8ã†8ã8ãĨ8ãŽ8ã¸8ãŊ8ãÂ8ãÎ8ãŲ8ãä8ãī8ãú8ã9ã9ã9ã&9ã19ã<9ãF9ãR9ã]9ãh9ãs9ã~9ãˆ9ã”9ã 9ãŦ9ã¸9ãÄ9ãĐ9ãæ9ã:ã:ã":ã?:ãE:ãb:ãh:ãŠ:ã:ãŽ:ã´:ãĖ:ãŌ:ãđ:ãö:ã;ã*;ã5;ã@;ãF;ã^;ãd;ã};ãƒ;ã—;ã;ã°;ãļ;ãÉ;ãĪ;ãã;ãī;ã<ã<ã<ã&<ã2<ã><ãJ<ãV<ãl<ã‡<ãĸ<ã¨<ãÅ<ãË<ãč<ãî<ã=ã=ã4=ã:=ãR=ãX=ãv=ã|=ã¤=ã°=ãŧ=ãČ=ãÔ=ãā=ãė=ã>ã>ã8>ã>>ã[>ãa>ã~>ã„>ãĻ>ãŦ>ãĘ>ãĐ>ãč>ãî>ã ?ã?ã:?ãF?ãQ?ã\?ãg?ãr?ã}?ãƒ?ã›?ãĄ?ãē?ãĀ?ãÔ?ãÚ?ãí?ãķ?ã@ã @ã @ã,@ãA@ãM@ãb@ã†@ã@ã@ãĢ@ã¸@ãÅ@ãŌ@ãé@ãAã Aã$Aã+AãCAãJAãbAãiAã†AãAãĨAãŦAãÉAãĐAãíAãôAãBãBã5Bã`ãV`ã]`ãz`ã`ã™`ã `ãŊ`ãÄ`ãá`ãč`ãaã aã)aã0aãMaãTaãqaãxaãaã™aãŖaãßaã÷aãbãbãbã'bã3bã?bãUbãpbã‹bã‘bãŽbã´bãŅbã×bãųbã˙bãcã#cã;cãAcã_cãecãcã™cã¤cã¯cãēcãÅcãĐcãÖcãîcãôcã dãdã'dã-dã@dãFdãYdã_dãsdãdã”dã¸dãÂdãĪdãŨdãędã÷dãeãeã7eã>eãVeã]eãueã|eã”eã›eã¸eãŋeã×eãŪeãûeãfãfã&fãCfãJfãgfãnfã‹fã’fã¯fãļfãÎfã×fãáfãîfãüfã gãgã#gã:gãVgã]gãugã|gã”gã›gãŗgãēgã×gãŪgãögãũgãhã!hã>hãEhãbhãihã†hãhãĒhãąhãÎhãÕhãíhãöhãiã iãiã$iã0iããHãUãcãpã}ãЁãĄãŊãāã܁ãããûã‚ã‚ã!‚ã>‚ãE‚ã]‚ãd‚あ㈂ãĨ‚ãŦ‚ãɂãЂãí‚ãô‚ãƒãƒã5ƒã<ƒãTƒã]ƒãgƒãqƒã}ƒã‰ƒã•ƒãĄƒã­ƒãšƒã΃ãęƒã„ã „ã(„ã.„ãK„ãQ„ãs„ãy„㗄㝄ãĩ„ãģ„ãŲ„ã߄ã…ã…ã…ã)…ã/…ãG…ãM…ãf…ãl…ã€…ã†…ã™…ãŸ…ã˛…ã¸…ãĖ…ã †ã†ã%†ã?†ãY†ãs†ãƒ†ãŒ†ã †ã°†ãš†ã͆ãŨ†ãæ†ãú†ã ‡ã‡ã'‡ã7‡ã@‡ãT‡ãd‡ãm‡ã‡ã‘‡ãš‡ãއ㞇ãĮ‡ãۇãë‡ãô‡ãˆãˆã!ˆã5ˆãEˆãNˆãbˆãrˆã{ˆãˆãŸˆã¨ˆãŧˆãˈãڈãęˆãķˆã‰ã‰ã ‰ã4‰ãD‰ãM‰ãa‰ãq‰ãz‰ãމ㝉ãŦ‰ãŧ‰ãʼnãŲ‰ãé‰ãō‰ãŠãŠãŠã3ŠãCŠãLŠã`ŠãpŠãyŠãŠãŠãϊãēŠãƊã͊ãįŠã÷Šã‹ã ‹ã‹ã-‹ã6‹ãJ‹ãV‹ã_‹ãt‹ã‹ã¯‹ãĪ‹ãŒã*Œã6ŒãBŒãNŒãZŒãfŒãrŒã~ŒãŠŒã–ŒãĸŒãތãēŒãƌãԌãیãęŒãöŒãããã&ã2ã>ãKãeãvããŒã—ãĸã­ã¸ãÍã΍ãŲãäãīã ŽãŽã Žã-Žã8ŽãCŽãNŽãYŽãdŽãoŽãzŽã†Žã’ŽãŸŽãēŽãƎãŌŽãߎãęŽãöŽã ãã!ã>ãJãWãbãnãzã†ã’ãžã˛ãŊãȏãäãķãüããã.ãkãe‘ãp‘㆑㠑ãē‘ãĪ‘ãA’ãJ’ãd’ãr’ã{’ã•’ãŖ’ãŦ’ãƒãŅ’ãߒãč’ãõ’ã“ã “ã3“ã:“ãF“ãR“ã^“㭓㸓ãēãГãܓãč“ãô“ã”ã ”ã”ã$”ã0”ã<”ãH”ãT”ã`”ãl”ãx”ㄔ㖔ãĸ”㎔㚔ãƔãĶ”ãā”ãí”ãú”ã•ã•ã"•ã3•ãD•ãU•ãf•ãw•㈕㟕ãĢ•ãŧ•ãŕãŌ•ãā•ãí•ãú•ã–ã –ã-–ã:–㸖ãŋ–ãזãŪ–ã÷–ãū–ã—ã—ã7—ã>—ãW—ã^—ãv—ã}—㘗ãĨ—ãĢ—ãą—ãˇ—ãž—ã˗ãؗãū—ã˜ã!˜ã9˜ãT˜ã[˜ãz˜ã‡˜ã•˜ãŖ˜ãą˜ã¸˜ã˘ã͘ãį˜ãî˜ã™ã™ã-™ãD™ã`™ã{™ã‚™ãœ™ãŠ™ãļ™ãŌ™ãî™ã šãšã*šã7šãCšãNšãišãwšã’šã šã­šãēšã֚ãōšãųšã›ã›ã7›ãO›ãV›ãn›ãu›ãŽ›ãŠ›ã°›ã՛ãâ›ãč›ãũ›ãœãœã#œã8œã>œãXœã^œãxœã~œã˜œãžœã¸œãžœã͜ã؜ãîœãôœã ãã'ã3ãIãdãã…ãŠããȝãāãæã˙ãžãžãžã:žã@žãZžã`žã~žã„žãœžãĸžãēžãĀžã؞ãŪžãöžãüžãŸãŸã7Ÿã=ŸãUŸã[ŸãsŸãyŸã‘Ÿã—Ÿã¯ŸãĩŸã͟ã͟ãëŸãņŸã ã  ã" ã= ãI ãn ã‰ ãŖ ãŠ ãàãĐ ãŪ ãë ãø ãĄãĄãĄã,Ąã>ĄãJĄãWĄãqĄãĄã”ĄãŠĄã°ĄãÂĄãĖĄãĶĄãëĄãōĄã ĸãĸã)ĸã0ĸãHĸãOĸãgĸãnĸã‹ĸã’ĸãĨĸãŦĸãÄĸãĶĸãāĸãîĸãûĸãŖãŖã"Ŗã/Ŗã<ŖãNŖãZŖãgŖãŖãŖã¤ŖãšŖãĀŖãŌŖãÜŖããŖãûŖã¤ã¤ã!¤ã9¤ã@¤ãX¤ã_¤ãw¤ã~¤ã›¤ãĸ¤ãĩ¤ãŧ¤ãÔ¤ãã¤ãđ¤ãũ¤ã Ĩã!Ĩã(ĨãUĨã\Ĩã€ĨãŽĨã Ĩã­ĨãÉĨãĐĨãéĨãđĨã Ļã(Ļã/ĻãDĻã[ĻãlĻãyĻãĻã‡Ļã”ĻãšĻã Ļã¨ĻãŗĻãŋĻãÆĻãîĻã§ã&§ã,§ãM§ãS§ãt§ãz§ã §ãϧãȧãΧãÚ§ãá§ãņ§ã ¨ã¨ã&¨ã2¨ã>¨ãJ¨ãW¨ãd¨ãލãЍ㯨ãĮ¨ãͨãå¨ãë¨ãŠã Šã!Šã<ŠãCŠã]ŠãkŠãrŠã„Šã’Šã™ŠãŦŠãžŠãÉŠãęŠãņŠãĒãĒã9Ēã@Ēã\ĒãsĒãŽĒã•ĒãĒĒãˇĒãÃĒãĐĒãįĒãĢã ĢãĢã9Ģã@ĢãZĢãgĢãtĢãĢãŦĢãŗĢãËĢãŌĢãņĢã ŦãŦã(Ŧã/ŦãHŦãcŦãjŦãŦã›Ŧã¨ŦãĩŦãŅŦãíŦãôŦã ­ã­ã2­ãJ­ãQ­ãi­ãp­ã‰­ã¤­ãĢ­ãĐ­ãâ­ãô­ã˙­ã Žã'ŽãGŽã^ŽãyŽã€Žã–ŽãŽŽãģŽãČŽãߎã¯ã¯ã ¯ã'¯ãD¯ãK¯ãc¯ãj¯ã„¯ã‹¯ã­¯ã´¯ãÛ¯ãâ¯ã°ã °ã-°ã4°ãV°ã]°ã°ã†°ã¨°ã¯°ãҰãذãú°ãąã#ąã*ąãLąãSąãząãąãĸąãŊąãÄąãŲąãæąãķąã˛ã ˛ã˛ã'˛ãQ˛ãm˛ãt˛ã˛ã§˛ã´˛ã߲ãû˛ãŗãŗã6ŗã=ŗãWŗãcŗãoŗã{ŗã‡ŗãŦŗãĮŗãáŗãįŗãüŗã´ã´ã*´ã6´ãB´ãN´ãZ´ãf´ãr´ã~´ãŠ´ã–´ãĸ´ãŽ´ãē´ãÆ´ãŌ´ãŪ´ãę´ãĩãĩã$ĩã1ĩã>ĩãZĩãaĩã~ĩã˜ĩãŗĩãÁĩãČĩãĶĩãÚĩãäĩãëĩãļã ļã%ļã,ļãBļãOļã\ļãiļãvļãŽļã§ļãÃļãÔļãįļãõļãûļãˇãˇãˇã(ˇã5ˇãBˇãOˇã\ˇãiˇãvˇãƒˇãˇãˇãǎãˇˇãġãҎãŪˇãëˇãøˇã¸ã¸ã¸ã,¸ã9¸ãF¸ãT¸ãc¸ãq¸ã¸ãޏãĩ¸ã͸ãÔ¸ãí¸ãô¸ã šãšã,šã3šãKšãRšãjšãqšã‰šãšã¨šã¯šãĮšãΚãæšãíšãēã ēã$ēã+ēãCēãJēãbēãiēãēãˆēã ēã§ēãŋēãÆēãŪēãåēãũēãģã!ģã(ģãEģãLģãdģãkģãƒģãŠģãĸģãŠģãÂģãÉģãáģãčģãŧã ŧã8ŧã?ŧãbŧãiŧãŧãˆŧãĄŧã¨ŧãÁŧãČŧãÜŧããŧãûŧãŊãŊãŊã1Ŋã8ŊãQŊãXŊãuŊã|ŊãŊã—Ŋã¯ŊãļŊãÎŊãÕŊãíŊãôŊã žãžã+žã2žãJžãQžãežãlžã„žã‹žãŖžãĒžãžžãÅžãŲžãāžãôžãûžãŋãŋã.ŋã5ŋãMŋãTŋãhŋãoŋãƒŋãŠŋãĸŋãŠŋãÁŋãÜŋããŋãøŋãĀãĀã Āã8ĀãEĀãaĀãhĀã€Āã›ĀãĸĀãģĀãÖĀãíĀã Áã%Áã,ÁãDÁãKÁãjÁãŠÁãŖÁãĒÁãŗÁãēÁãŅÁãėÁãķÁãÂã*Âã7ÂãSÂãoÂãvÂãŽÂã•Âã´ÂãĖÂãĶÂãëÂãōÂã Ãã&Ãã-ÃãRÃã_ÃãlÃãˆÃã¤ÃãĢÃãÃÃãĘÃãéÃãÄãÄã Äã'Äã@Äã[ÄãbÄãƒÄã”ÄãŸÄã¸ÄãĖÄãíÄãķÄã3Åã@ÅãMÅã[ÅãsÅã€ÅãœÅãŖÅãģÅãÖÅãŨÅãöÅãÆã(ÆãDÆã`ÆãgÆãÆã†ÆãĨÆãÅÆãŪÆãåÆãîÆãõÆã Įã'Įã.ĮãXĮãeĮãrĮãŽĮãĒĮãąĮãÉĮãĐĮãīĮãČãČã&Čã-ČãFČãaČãhČã‰Čã›ČãŽČãšČãŌČãįČãëČãÉã*Éã1ÉãSÉãZÉãwÉã~Éã›ÉãŠÉãÂÉãĪÉãÜÉãéÉã Ęã,Ęã3ĘãTĘã[ĘãoĘãvĘã‘ĘãŦĘãŗĘãČĘãĪĘããĘãËã!Ëã(ËãJËãQËãsËãzËãĄËã¨ËãĪËãÖËãøËã˙Ëã!Ėã(ĖãJĖãQĖãsĖãzĖã›ĖãĸĖãēĖãÁĖãÔĖãÛĖã÷ĖãÍãÍã1Íã`ÍãmÍãsÍãyÍãÍã†Íã“Íã ÍãŧÍãØÍãķÍãúÍãÎã!Îã.ÎãJÎãQÎãnÎãˆÎã­ÎãšÎãŋÎãÅÎãËÎãŅÎãØÎãåÎãōÎã Īã%Īã,ĪãEĪãLĪãdĪã†Īã“Īã ĪãŽĪãÉĪãÖĪããĪã˙ĪãĐã"Đã:ĐãAĐãTĐã[ĐãnĐã‰ĐãĐãĒĐãļĐãŧĐãÂĐãÉĐãĐĐãŲĐãįĐãîĐã ŅãŅã Ņã=ŅãJŅã_ŅãlŅãsŅã‡ŅãŅãšŅã§Ņã´ŅãģŅãÄŅãËŅãŪŅãåŅãôŅãŌãŌãŌã8ŌãFŌãMŌãkŌã}ŌãˆŌãĄŌãļŌãēŌãØŌã÷ŌãĶãĶã&Ķã<Ķã]ĶãcĶã„ĶãŠĶãĸĶãŧĶãÂĶãŨĶãôĶã Ôã!Ôã(ÔãbÔãƒÔã›Ôã¨ÔãĩÔãÎÔãųÔãÕã Õã'Õã1ÕãMÕãeÕãrÕã‹ÕãŦÕãŗÕãĶÕãÚÕãôÕãÖã-ÖãFÖãgÖãnÖãÖã°ÖãČÖãÕÖãâÖãīÖãüÖã ×ã×ã#×ã<×ã]×ã×ã†×ã§×ãŽ×ãĶ×ãÚ×ãō×ãų×ãØãØã0Øã7ØãPØãWØãoØãvØãØã–ØãŽØãĩØãÎØãÕØãíØãôØã ŲãŲã,Ųã3ŲãMŲãTŲãpŲãˆŲã•Ųã˛ŲãšŲãÚŲãõŲãüŲãÚã1ÚãIÚãVÚãsÚãzÚã›ÚãļÚãŊÚãÖÚãōÚãÛãÛã&ÛãGÛãNÛãyÛã€ÛãœÛãˇÛãžÛãØÛãäÛãņÛã ÜãÜã#Üã0ÜãGÜãNÜãyÜã€ÜãœÜãˇÜãžÜã×ÜãøÜãŨãŨã:ŨãAŨãgŨãnŨãŨãˆŨã›ŨãĸŨãēŨãÁŨãÔŨãÛŨãîŨãõŨãŪãŪã-Ūã4ŪãHŪãOŪãhŪãoŪãƒŪãŠŪãžŪãĨŪã¸ŪãĶŪãÚŪãķŪãßã1ßãJßãbßãißãßã†ßã¨ßã¯ßãÖßãŨßã˙ßãāã(āã/āãQāãXāãzāãāãŖāãĒāãĖāãĶāãõāãüāãáã%áãGáãNáãuáã|áãáã¤áã´áãâãâã2âãOâãtâã‹âã—âã˛âãžâãŲâãīâããããã6ããRããZããpãã†ããœããŧãã×ãã÷ãã äã%äã@äãVäãbäãwäã”äã™äãÁäãÕäãęäãåãåã/åãDåã[åãtåã„åãåãĸåãŽåãˇåãËåãÛåãäåãøåãæãæã&æã=æãTæã`æãiæã~æãŠæã“æã§æãŗæãĐæãëæãįãįã0įãOįãgįã…įãœįã´įãĶįãōįãčãčãčã.čãDčãZčã|čãčãščãŖčãĢčãˇčãŌčãŪčãôčãéã)éãHéãféã’éã¯éãĮéããéãöéãęã&ęã-ęã7ęãMęãTęã]ęãdęãwęã~ęã‘ęã˜ęã­ęã´ęãÄęãËęãĐęã×ęãôęãûęãëãëã.ëãDëãKëãhëãoëãŒëã“ëã°ëãļëãŋëãÅëãØëãßëãčëãīëãėã ėãėãėã#ėã)ėã2ėã9ėãLėãSėã\ėãcėãlėãsėã‚ėã‰ėã’ėã™ėãŦėãŗėãÆėãÍėãæėãíãíãíã.íãIíãTíãníãzíã“íãšíãŗíãēíãÎíãÕíãęíãõíãîãîã4îã;îãTîã[îãoîãvîãŠîã‘îãŠîã¸îãÁîãÕîãÛîãäîãíîãīã īã īã/īã8īãLīãRīã[īãdīãxīã~īã’īã˜īãĄīãĒīãžīãÄīãØīãßīã đãđã+đã2đãEđãLđãdđãkđãđã—đã¤đã¸đãŋđãŲđãāđãæđãíđãōđãūđãņãņã$ņãGņã^ņãqņãŒņã“ņãŦņã˛ņãĖņãáņãčņã ōãōã)ōã0ōãMōãTōãrōãˆōãōã§ōãŽōãÆōãÍōãåōãėōãķãķã<ķãCķãeķãlķãŽķã•ķãÁķãČķãÕķãķķãúķãôã#ôãEôãLôãnôãuôã‚ôãĄôãģôãÕôãîôãõôãõã õã6õãLõãRõãlõãsõã€õã‰õã˜õãŸõãÁõãÍõãÔõãöõãũõãöã&öãHöãOöãqöãxöãšöãĄöã×öãíöã÷ã ÷ã÷ã'÷ã.÷ãB÷ãI÷ãR÷ãf÷ãm÷ã÷ãˆ÷ã•÷ãž÷ãŽ÷ãÉ÷ãĐ÷ãŲ÷ãā÷ãé÷ãũ÷ãøã øã!øã(øã<øãCøãTøãiøãpøã„øãøã¤øãĩøãËøãŪøãđøãųã ųã ųã:ųãAųãKųãeųãlųãvųã|ųã„ųã‰ųãųã™ųãŖųãŠųãŗųãšųãÃųãÉųãĐųãÚųãáųãëųãõųãûųãúã úãúãúã%úã+úã5úã;úãEúãKúãUúã[úãeúãkúãuúã{úã…úã‹úã•úã›úãĨúãĢúãĩúãģúãÅúãËúãÚúãāúãęúãņúãûúã ûãûã'ûã8ûãCûãIûãTûãZûãeûãjûãvûãƒûãûãûãĒûãˇûãÄûãŌûãáûãîûãûûãüã üãüã#üã0üãIüãTüãjüã…üã üãĻüãÃüãÉüãæüãėüã ũãũã,ũã2ũãOũãUũãmũãsũãŒũãŗũãÚũãūã(ūãOūãvūãūãÃūãŨūã˙ã+˙ãR˙ãy˙ã ˙ãĮ˙ãî˙ãã<ãcãŠãąãØã˙ã&ãMãtã›ãÂãéãã7ã^ã…ãŦãĶãúã!ãHãoã–ãŊãäã ã2ãYã€ã§ãÎãõããCãjã‘ã¸ãßãã.ã:ãFãaãgã„ãŠã¤ã°ãŧã×ãŨãüãã ã'ã4ãAãNãTãZãaãmãyã…ã‘ããĮãÍãåãëãã ã!ã'ã?ãEã]ãcã{ãã™ãŸãˇãŊãÕãÛãķã ã& ãE ãQ ã] ãs ãy 㒠㘠ãĩ ãģ ãĶ ãí ãķ ã ã ã' ã4 ãP ãl ãs ã‹ ã’ ãĒ ãą ãÉ ãĐ ãč ãī ã ã ã+ ã2 ãJ ãd ㌠㴠ãÛ ãâ ã ã ã2 ãZ ゠㊠㰠ãÕ ãũ ã% ãM ãu 㝠ãÅ ãí ãã=ãeããĩãßãđãųãããã,ãNãUã\ãcãjãqã|ãƒãŽã•ã ã§ãŊãÄãŲãņãøããã8ã?ãIãPãsã†ããĄã¨ãĮãâãéãūã ãã%ãMãeãlã„ã‹ãĨãÂãÜã÷ãããã+ã8ãEã\ãxãã—ãžãļãŊãÕãÜãôãûããã2ã9ãQãXãuã|ã™ã ãˇãžãÕãÜãôãûããã7ã>ãVã]ãtã{ã’ã™ãŦãŗãÆãáãčãũããã(ã5ãBãOã\ãiãvãƒãããšãĀãØãßã÷ãūããã5ã<ãTã[ãsãzã’ãÆãÍãėã˙ããã0ã7ãRãcãmãxãšãĄãžãÅãâãéãããã,ã9ãPãlãsãŒã“ã°ãˇãĪãÖãîãõã ãã+ã2ãJãQãhãoã‚ãã¤ãēãĖã×ãđãã ã&ãHãOãqãxãŸãĻãČãĪãņãøãã!ãCãJãlãsã•ãœãžãÅãįãîããã>ãEãiãzã‡ãã›ãŦã¸ãÄãāãã#ã*ãKãRãeãã…ã›ãŦãˇãĐãåãéãã'ã-ãLã^ãiãvãƒãããĒãˇãÄãŅãŪã ã*ã1ãIãPãhãoã‡ãŽãĻã­ãÅãĖãäãëã ã ã" ã) ãA ãH ã` ãg ã ㆠ㞠ãĨ ãŊ ãÄ ãá ãč ã!ã!ã!ã%!ã4ã[4ãf4ãƒ4ã—4ãĸ4ãŽ4ãē4ãÆ4ãŌ4ã–5ãĄ5ãŖ;ãš;ãÎ;ãä;ãú;ã><ãT<ão<ãŠ<ãĒ<ãË<ãė<ãų<ã =ã%=ãD=ãc=ãy=ã™=ã´=ãĪ=ãå=ã>ã#>ã=>ãX>ãe>ãk>ãq>ãw>ã~>ãŠ>ã–>ãŠ>ãĩ>ãģ>ãÁ>ãĮ>ãÍ>ãĶ>ãŲ>ãß>ãį>ãī>ãú>ã?ã?ã8?ã>?ãD?ãJ?ãP?ãV?ã\?ãb?ãi?ãp?ãw?ã~?ã…?ãŒ?ã“?ã›?ãŖ?ãĢ?ãŗ?ãŊ?ãČ?ãÕ?ãâ?ãī?ãü?ã @ã@ã#@ã0@ãĮGãvIãˆIã•Iã˛IãĖIãæIãJãJã9Jã^Jã¤JãÃJãŨJã÷JãKã0Kã:Kã\KãfKã…KãKãšKã­Kã×KããKãLã LãLã4Lã@Lã\LãLã—LãŧLãÆLãņLãûLãMã/Mã9MãCMãgMãqMã{MãšMã¤MãąMãĶMãíMãNãNãNã[NãNã—NãļNãĀNãæNãōNãOã2OãXOã‡Oã”OãâOãPã˜PãĸPãšPãÃPãíPã÷Pã,QãQã—QãĻQã RãRã!Rã0RãNRãXRãgRã…RãRãžRãÂRãúRãSã*SãDSãlSã~Sã‹SãŅSãÛSãũSã-TãGTãRTã‹Tã•Tã¯TãšTãÚTãäTãUã"Uã•ãh•ãˇ•ãŅ•ã –ã*–ãD–ãN–ãh–㇖㑖㝖㴖ãĮ–ãĶ–ãų–ã—ã—ã'—ãA—ã`—ãj—ãv—㍗㠗ãŦ—ãŌ—ãņ—ã ˜ã&˜ã/˜ã9˜ãF˜ãz˜ãƒ˜ã˜ãš˜ãĘãۘãč˜ã™ã™ã™ã%™ãL™ãn™ã”™ãž™ã¸™ãšã'šã0šã:šãGšãišã§šãŗšãКãåšã#›ã-›ãG›ãQ›ãk›ãŠ›ã”›ã ›ãˇ›ãʛã֛ãü›ãœãjœãëœããYãsããŦã˝ãåãEžã{žã…žãŸžãšžãÞãŨžãįžãŸãŸã5ŸãTŸãsŸã͟ã  ã ãX ão ãy ã… ãœ ãĻ ã˛ ãË ãŪ ãę ãĄã*Ąã4ĄãNĄãXĄãzĄã”ĄãŽĄãČĄãįĄãĸãfĸãœĸãĻĸãëĸãŖã ŖãŖã/Ŗã9ŖãEŖã^ŖãqŖã}ŖãŖŖãŊŖãĮŖãáŖãëŖã ¤ã"¤ã+¤ã@¤ã^¤ãv¤ã’¤ãō¤ã(Ĩã2ĨãwĨãŽĨã˜Ĩã¤ĨãŊĨãĐĨãÜĨãĻã Ļã&Ļã0ĻãMĻãqĻãœĻãĮĻãûĻã§ã1§ã:§ãD§ãQ§ãs§ã|§ã†§ã’§ãž§ãŦ§ãħãͧãā§ãí§ãú§ã¨ã*¨ãO¨ãX¨ãb¨ão¨ã•¨ãŸ¨ãЍããʨãæ¨ãī¨ãų¨ãŠãŠã-ŠãGŠãaŠã€ŠãŸŠã˙Šã5Ēã?ĒãYĒãsĒã}Ēã—ĒãąĒãËĒãęĒã ĢãiĢãŸĢãŠĢãÃĢãŨĢãįĢãũĢãŦã1ŦãKŦãeŦã„ŦãŖŦãŊŦã×Ŧã7­ãm­ãw­ã‘­ãĢ­ãĩ­ãĘ­ãĶ­ãč­ã ŽãŽã*ŽãBŽãZŽãvŽãÖŽã¯ã¯ã:¯ãT¯ã^¯ãt¯ã¯ãđ¯ã)°ãC°ã]°ãw°ã‘°ã̰ãŰãä°ãąãcąã™ąãŖąãŊąã׹ãáąãûąã˛ã˛ã)˛ãJ˛ãT˛ão˛ã‹˛ãĨ˛ãŋ˛ãŪ˛ãũ˛ã]ŗã“ŗãŗãˇŗãŅŗãÛŗãõŗã´ã)´ãC´ã^´ãg´ãq´ã~´ãĨ´ã¯´ãÅ´ãŨ´ãų´ãĩã-ĩãLĩãfĩã€ĩã™ĩãŖĩãĮĩãÜĩãûĩãļãļã-ļã7ļãNļãXļãdļã‰ļã–ļãŽļã¸ļãÄļãįļã˙ļãˇã#ˇã0ˇãaˇãkˇãxˇã¨ˇã˛ˇãŧˇãȡãõˇã&¸ã@¸ãU¸ã^¸ãh¸ãu¸ã‚¸ãǏã´¸ãˏãÖ¸ã߸ãé¸ãö¸ãšãšã+šã5šãMšãWšã`šãjšãwšã„šãĄšãŨšãüšãMēãĄēãĖēãëēãõēã ģãģã ģã*ģã7ģãDģãSģãlģãvģãŽģã˜ģãĄģãĢģã¸ģãÅģãâģãŧã=ŧãWŧãĢŧãÔŧãķŧãũŧã Ŋã%Ŋã/ŊãGŊãQŊãZŊãdŊãqŊã~ŊãŊãĻŊã°ŊãČŊãŌŊãÛŊãåŊãōŊã˙ŊãžãXžãwžã‘žãåžãŋãŋã*ŋã4ŋã=ŋãGŋãTŋãaŋãpŋã‰ŋã“ŋãĢŋãĩŋãžŋãČŋãÕŋãâŋã˙ŋã;ĀãZĀãtĀãČĀãëĀãõĀã ÁãÁã Áã*Áã7ÁãDÁãSÁãlÁãvÁãŽÁã˜ÁãĄÁãĢÁã¸ÁãÅÁãâÁãÂã=ÂãWÂãĢÂãĪÂãđÂãũÂã ÃãÃã2Ãã<ÃãTÃãqÃã~Ãã‹ÃãšÃãŗÃãŊÃãÕÃãōÃã˙Ãã Äã)ÄãCÄãkÄãtÄã~Äã‹ÄãĀÄãÍÄãÚÄã÷ÄãÅãÅã3Åã=ÅãUÅã_ÅãhÅãrÅãÅãŒÅã›Åã´ÅãžÅãÖÅãāÅãéÅãķÅãÆã Æã*ÆãfÆã…ÆãŸÆãķÆãĮã=ĮãGĮã_ĮãiĮãrĮã|Įã‰Įã–ĮãĨĮãžĮãČĮãāĮãęĮãķĮãũĮã ČãČã4ČãSČã§ČãėČã ÉãPÉãgÉãqÉã}Éã–ÉãŠÉãĩÉãÛÉãõÉã˙ÉãĘã&ĘãEĘã_ĘãyĘã“Ęã¨Ęã˛ĘãĘĘãÔĘãŨĘãįĘãôĘãËãËã)Ëã3ËãKËãUËã^ËãhËãuËã‚ËãŸËãÛËãúËãĖãhĖã‹Ėã•Ėã­ĖãˇĖãĀĖãĘĖã×ĖãäĖãķĖã ÍãÍã.Íã8ÍãAÍãKÍãXÍãeÍã‚ÍãžÍãŨÍã÷ÍãKÎãnÎãwÎãÎãŽÎã›ÎãÃÎãÍÎãåÎãīÎãøÎãĪãĪãĪã+ĪãDĪãNĪãfĪãpĪãyĪãƒĪãĪãĪãēĪãŲĪã-ĐãUĐã‘ĐãåĐãúĐãŅã ŅãŅã%Ņã3ŅãKŅãTŅãgŅãtŅãŅãŖŅãŦŅãĩŅãŋŅãĖŅãŲŅãæŅãŌã"Ōã=ŌãFŌãPŌã]Ōã„ŌãžŌã¸ŌãäŌãDĶã^Ķã…Ķã¤ĶãÎĶãØĶãōĶãüĶã<ÔãĀÔãÍÔãõÔãūÔãÕãÕãÕãEÕãˆÕãģÕãëÕã,Öã_ÖãĨÖãŋÖãŲÖã$×ã@×ãI×ãS×ã_×ãk×ãy×ã‘×ãš×ã­×ãē×ãĮ×ãé×ãō×ãû×ãØãØãØã,ØãNØãhØãƒØãŒØã–ØãŖØãĘØãūØãŲã#Ųã-Ųã9ŲãEŲãSŲãkŲãtŲã‡Ųã”ŲãĄŲãÃŲãĖŲãÕŲãßŲãėŲãųŲãÚã#Úã,Úã6ÚãCÚãPÚãmÚã‡ÚãģÚã×ÚãāÚãęÚãöÚãÛãÛã(Ûã1ÛãDÛãQÛã^Ûã€Ûã‰Ûã’ÛãœÛãŠÛãļÛãÃÛãāÛãéÛãķÛãÜã Üã*ÜãDÜã_ÜãhÜãrÜãÜãĻÜãĀÜãäÜãŨãMŨãlŨãvŨã‚ŨãžŨã¨ŨãŋŨãÉŨãÕŨãúŨãŪãŪã)Ūã5ŪãTŪã}Ūã‡Ūã”ŪãÅŪãĪŪãÜŪã ßãßã ßã,ßãlßãßã–ßã ßãČßãŅßãÛßãāãCāãMāãkāã…āãáã[áãŒáãÆáã âã>âãnâãxâã—âãžâãßâããã ãã=ããGãã~ããŽããˇããĀããĘãã×ããäãRäã¤äãæäã(åãzåãļåãæãJæãœæãîæã@įã’įãäįã čãVčã¨čãúčã*éã4éãAéãhéãréã”éãžéã¸éãŌéãÜéãūéãęã7ęãVęã`ęã…ęãŸęãšęãØęãōęã ëã6ëã@ëãZëãtëãŽëã˜ëã˛ëãŧëãŲëããëãėãFėãnėã‹ėãĨėãĘėãāėãøėãíãíã8íãBíãaíãkíãŠíã”íãŽíã¸íãŌíãÜíã îã*îã4îãsîãÅîãīãiīãģīã đã_đãąđãæđãņãņã/ņãYņãŽņããņã-ōãgōãšōã ķã]ķã¯ķãņķãCôã•ôã×ôã)õã{õãÍõãöãaöã–öã öãŊöãôöãH÷ãw÷ã÷ãĖ÷ãæ÷ãû÷ãøãøãKøãUøã…øãĀøãÜøãåøãīøãûøãųãųã-ųã6ųãIųãVųãcųã…ųãųã›ųãļųãĀųãĘųã×ųãúãúãúã)úãMúã‰úã”úãĮúãŌúãôúãûã#ûã@ûãMûãZûã…ûã’ûãŸûãˇûãĀûãĘûãÖûãâûãųûãüã üãüã$üã2üãJüãSüãfüãsüã€üãĸüãĢüã´üãžüãËüãØüãåüãũã ũãũã"ũã/ũãLũãaũãjũãtũãũã¨ũã˛ũãÔũãîũãūã"ūã,ūãNūãuūãūã´ūãĶūãëūã ˙ã;˙ã]˙ãv˙ã„˙ã’˙ãŌ˙ãī˙ãų˙ããããFãPãmãwã™ãŖãÂãĖãŲãöãã(ãEã_ãyãƒãããĒãĮãŅãŪããã6ãPãoãÃãŨãöããZãdã†ãßãūã/ãNãmã‡ãĄãÍã&ã]ãgãã ãēãÕãŪãčãõãã ã*ã6ãBãPãhãqã„ã‘ãžãâãã3ã=ã_ãyã ãÕãīããã)ã6ã]ãwããĀã ã} ã˛ ãž ãá ãë ã ã ã$ ã1 ã> ã\ ãh ãu ã‚ ãą ãŋ ãË ãč ã ã ã) ãC ãX ãa ãk ãx ãĸ ㎠ãģ ãČ ãÕ ãâ ãī ãü ã ã' ãH ãR ãr ã| ㇠㴠ã÷ ã( ãR ム㯠ãŲ ãã8ãEãRãaãzã—ã¤ãąãĀãŲãöããã;ãHãUãmãvã€ãŒã˜ã¯ã¸ãÂãÎãÚãčãã ãã)ã6ãXãaãjãtããŽã›ã¸ãÁãËãØãåããã7ã@ãJãWã~ããĒãˇãÆãßãüã ãã%ã>ã[ãhãuã ã­ãēãŌãÛãåãņãũããã'ã3ã?ãMãeãnããŽã›ãŊãÆãĪãŲãæãķããã&ã0ã=ãJãgããœãĨã¯ãŧãããããã+ãDãaãnã{ãŠãŖãĀãÍãÚãããã7ã@ãJãVãbãyã‚ãŒã˜ã¤ã˛ãĘãĶãæãķãã"ã+ã4ã>ãKãXãeã‚ã‹ã•ãĸã¯ãĮãĐãÚãįãã-ã:ãGãVãoãŒã™ãĻãĩãÎãëãøãã0ã=ãJãbãkãuããã¤ã­ãˇãÃãĪãŨãõãūããã+ãMãVã_ãiãvãƒãã­ãļãĀãÍãÚã÷ãã&ã/ã9ãFãmãwã˜ãĸãÉãŌãÛãåãōããEãRã_ãnã‡ã¤ãąãžãÍãæããããHãUãbãzãƒãã™ãĨãŧãÅãĪãÛãįãõã ãã)ã6ãCãeãnãwããŽã›ã¨ãÅãÎãØãåãōã ããã*ãQãfãoãyã†ã­ãĮãėã ã2 ã? ãN ãj ã— ãģ ãČ ãü ã !ãT!ã}!ãˆ!ã”!ã°!ãĖ!ãĐ!û!ã˙!!" ?" S"ãe"y"ã‹"Ÿ"ãą"Å"ã×"ãÛ"#ã#ã#H#ãW#ã[#}#‘#ãŖ#ˇ#ã×#ë#ã$ ($ãH$"\$ã|$$$ã°$&Ä$ãä$(ø$ã%*,%ãL%,`%ã€%.”%ã´%0Č%ãč%2ü%ã%&49&ãY&6m&ã&ãƒ&8Ĩ&š&ãË&ß&ãø&ã ''ã/'O']'ßc'q'ß{'Œ'ßĸ'ã´'Č'ãŲ'ų'(ß ((ß%(6(ßL(ã^(r(ãƒ(Ŗ(ą(ߡ(Å(ßÚ(ãė()ã)1)?)ßE)S)ßa)u)ã†)ŗ);Į)ãį)=û)ã*?/*ãO*Ac*ãŽ*ã*ãĄ*Ã*×*ãä*ã+ã+D(+ã,+FN+ãR+Ht+ãx+Jš+ãž+LĀ+ãÄ+Ná+Nđ+ãô+P,P ,ã$,RA,RP,ãT,Tq,T€,ã„,VĄ,V°,ã´,XŅ,Xā,ãä,Z-Z-ã-\1-\i-ãs-ã‚-ã†-§-Â-ßĖ-é-ßķ-.ß.,.C._.ße.s..ß™.ĩ.ßģ.Ī.ę.//ß#/1/M/ßW/s/ßy/‰/˜/ãœ/š/ŋ/Î/â/ã0 0ã0a-0a80ã<0c]0ca0áq0ßw0c~0c0ã‘0ˇ0Í0Û0ßå0é0áö0ß1ß1ã181N1\1ßf1j1áw1߁1ߏ1ã“1š1Ī1Ũ1ßį1ë1áø1ß2ß2ã2:2P2^2ßh2l2áy2߃2ß‘2ã•2ģ2Ņ2ß2ßé2í2áú2ß3ß3ã3<3R3`3ßj3n3á{3ß…3ß“3ã—3Ŋ3Ë3ßÕ3ßÛ3é3ßķ34ß4ß4ã 4F4T4ß^4ßd4r4ß|44ß—4ßĨ4ãŠ4Ī4Ũ4ßį4ßí4û4ß55ß 5ß.5ã25X5f5ßp5ßv5„5ߎ5Ÿ5ߊ5ߡ5ãģ5á5ī5ßų5ß˙5 6ß6(6ß26ß@6ãD6s666ß§6Ģ6á¸6ßÂ6ßĐ6ãÔ677ß7ß%7ß+797ßC7T7ß^7ßl7€7ߏ7á™7ߟ7áŠ7ßŗ7ˇ7áÄ7ßÎ7ßÜ7đ7ßũ7á8ß 88!818I8ßS8ß]8a8áx8ß~88ßš8ߤ8´8ßž8ßĘ8Î8áÚ8ßä8ßę8áô8ßũ89ã$9ã89ã<9h]9ha9ár9ß|9h€9á9ß—9hŦ9ߡ9hģ9áČ9ßŌ9ߨ9hí9h÷9h:ã:ã0:ã::ãF:ãQ:ã`:ãd:j…:j‰:á–:ß :jĩ:ßŋ:ßÉ:ßĶ:jã:ßí:ßķ:j;j;ß;ß%;j);á5;ß?;jC;áO;ßY;j];áj;ßt;jx;á‰;ß“;ß™;ją;jÂ;ßÔ;jō;j<ß<ß<j&<j<<ßF<ßP<jf<ßp<ßv<j‹<ã<l°<lÅ<ßĪ<lĶ<áā<ßę<l˙<ß =ß=ß=l-=ß7=ß==lK=l[=ße=ßo=ls=á=߉=l=á™=ßŖ=l§=á´=ßž=lÂ=áĶ=ßŨ=ßã=lû=l >ß>l<>lR>ß\>ßb>lp>lŒ>ß–>l˛>߸>lÉ>lã>ãí>ã?ã ?ã?ã#?ã2?ã6?nW?nu?ß?߉?n™?ßŖ?ߊ?nˇ?nĮ?ßŅ?ßÛ?nß?áë?ßõ?nų?á@ß@n@á$@ß.@ß4@nL@n]@ßn@nˆ@nž@ߨ@ߎ@nŧ@nŌ@ßÜ@ßæ@nü@ßAß An+AãRAã\Aã{A‹Aã–AßœAáąAߡAáËAßŅAá×AãâAßėAđAáBß BßBBá&Bß0Bß6BFBJBá[BßeBßoBßyB}BáŽBߘBßĸBßŦB°BáÁBßČBĶBŪBâBáķBßũBßCCCá'Cß1C5CáFCßQCUCábCßlCßrCŠCŽCáŸCߊCßŗCßŊCÁCáŌCßÜCßæCßđCDß DD"D&Dá7DßADßGDVDZDákDßuDyDáŠDß•D™DáĻDß°DßļDÎDãDßíDEß EEß(Eß.EFEeE…E–Eß EßĻEēEĘEßEßéEFßFFß&F;FßFFWFßaFßgF|F–FĻFã°FßļFãĀF߯FããFáéFãøFáGß GáGß$G(Gá8GßBGßHGWGkGßuGßG”GßšGĨG´GČGßŌGߨGãGõG Hß$H(Há8HßBHßLHaHßgHrH}H‘Hß›HŸHá­H_¸HßžHĪHãĶHtôHtøHáIßIt$Iß.It?IßKItOIá\IßfIßlItzIß„IߎIt’IáŠI߯ItÁIßËIßÕItåIßīIßûItJßJt-JtJJãTJãrJãvJv“JvĨJ߯JvÄJßÎJvßJßëJŨøJv KßKv(Kß:KvKKßWKvrKv‰KvĨKßĢKvšKvÕKßßKvûKßLvLv0LvGLvcLßiLvwLv“LߝLvšLßŋLvĪLvėLãöLãMãMãMã4Mã8M}MMá’MßœMßĻMß°MßēMßĀMĮMŅMÛMøMãNãNãN6N:NáKNßUNYNáfNßpN…NߐN”NáĄNßĢNßąNÆNØNčNáōNãũNßOãO+O'6OIO'VOkOßuOß{O†OŒO’O™OĢOģOãÛOíOũOã PãP'Pã2PßlßHlßRlVláglßqlß{l™l¨lŋlßËlÜlįlmã mã/mã3mTmXmáimßsm‡mß‘mŽmßēmÎmߨmõmßnnßnoßDoSogoßqoßwo†oŠoášoߤoßĒošoÍoß×oßŨoėođoápß pßpp#pá3pß=pßCpRppppĄpßĢpßąpÉpįpqqß"qß(q@q^q~qqß™qߟqˇqÕqõqrßrßr.rLrlr}r߇rߍrĨrŋrßrđrßúrßsss)sCsãMsãgsãqsã€sã„sĨsŠsáēsßÄsČsáØsßâsßčs÷sûsá tßtßt*t.tá>tßHtßNt]tatáqtß{t߁tt¤tߎtß´tÃtĮtá×tßátßįtötútá ußuuá)uß3uß9uPuaußmuquáuß‹u ußĢu¯uáŧu߯ußĖuäučuáøußvvß"v&vá3vß=vßCv[v_váovßyvŽvß™vváĒvß´vßēvŌvÖváævßđvwßwwá!wß+wß1wIwMwá]wßgw|w߇w‹wá˜wßĸwߨwĀwŪwâwáūwxáxßxßx7xUxux†xߐxß–xŽxĖxėxũxßyß y%yCycytyß~yß„yœyēyÚyëyßõyßûyz-zMz^zßhzßnzƒzzœzã zŊzÃzŌzãÖzķz{ß {{ß"{0{ß:{O{ßY{j{ßt{߀{‘{ß {´{ãĪ{áÕ{ãā{ßę{|9|M|ãh|án|ãy|߃|ą|Ų|ãë|˙|ã}8}U}ß_}p}ßv}ƒ}’}Ļ}ãŗ}Æ}ßĐ}Ô}áá}ßë}ßø}~ã~ß~ã"~;~áI~ßS~W~áj~hu~y~áˆ~h‘~›~Ĩ~¯~ē~áČ~ßÎ~áÚ~áä~ßî~ßø~ ß(2<FPZgv†ã§áąãŧßÂãĪÕãāßę˙ß €ß€€3€ß=€ßC€R€g€ßm€|€‘€ß—€ĸ€Ŧ€ļ€Ā€ʀԀۀ逸€ ã",6J^ãt~ˆœ°ãŊãҁæßđßö‚ ‚‚)‚9‚ãI‚áO‚ãZ‚ß`‚ãk‚ßu‚y‚ኂߔ‚Ђߴ‚łßĪ‚ā‚ßí‚ņ‚áƒß ƒƒá!ƒß,ƒ=ƒßGƒXƒßaƒkƒuƒƒŸƒãЃãēƒ΃ãۃãëƒáúƒß„„ß#„ß.„C„ßM„ßX„\„á|„€„ፄߤ„Á„Ũ̈́Ņ„áī„ķ„á……á#…ß-…ß7…ß=…áG…ßQ…U…áb…ßl…ßv…ß|…ᆅߌ…¯…ãš…ã˅ãĪ…ų…†ß†)†ß5†T†t††ß“†§†­†ˇ†Á†ˆچú†á‡ã‡.‡ß8‡U‡ßa‡v‡ß}‡á‘‡ß›‡Ÿ‡á°‡ßē‡ž‡áˇßׇۇáė‡ßö‡ú‡áˆßˆˆá(ˆß3ˆ7ˆáHˆßSˆWˆádˆßpˆázˆß„ˆŸˆļˆЈåˆßīˆßúˆ‰.‰2‰áC‰ßM‰ßS‰a‰ßk‰ßu‰‰ω߯‰ŧ‰ԉđ‰Šß ŠßŠ%Š0ŠDŠTŠãdŠãtŠázŠã…ŠßŠ“Šáϊ_ąŠßˇŠŠЊãáŠåŠáöŠß‹ß‹‹‹á,‹_7‹ß=‹H‹R‹a‹t‹_‹ß…‹¤‹ã¸‹ãŧ‹Ų‹ķ‹Œ)ŒCŒ`ŒãjŒãyŒã}ŒžŒ¯ŒßĩŒģŒΌâŒãīŒã˙Œ %9ãNbã|ãĄšßōŲãæõ ŽãŽ%Ž9ŽãFŽUŽiŽãvŽ…Ž™ŽãĻŽĩŽɎã֎åŽųŽã)ã6EYãfu‰ã–ĨšãƏՏéãú-ã>]qã‚†á“ßĄáސß´ƐßАåßė÷‘‘ã-‘1‘á>‘ßD‘V‘ß`‘u‘ß|‘‡‘ĸ‘ãš‘ãĖ‘ā‘ã˙‘’ß’-’ß7’X’ßb’„’㈒Ą’ᯒßĩ’Ā’áĖ’áؒáâ’ßč’áö’ßü’á “ß“á“ß(“=“ßH“]“ßc“n“x“‚“Œ“–“Ą“Ŧ“ļ“Á“Ķ“į“ãø“"”ã9”ãL”`”㔝”Ģ”ßĩ”ᔕ•ã(•G•ãK•|l•|p•ပߊ•|Ž•áŸ•ßŠ•߯•|ƕ|וßã•|į•á÷•ß–|–á–ß!–|%–á2–ß<–ßB–|Z–|^–áj–ßt–|x–ቖߔ–|˜–áĨ–߯–ßĩ–|ΖãŌ–~ķ–~÷–á—ß—~—á'—ß1—ß7—~N—~_—ßk—~o—á|—߆—~Š—á›—ßĻ—~Ē—áˇ—ßÁ—ßĮ—~ā—ô—ã˜&˜F˜k˜˜ã‘˜Ĩ˜ãļ˜՘é˜ãú˜™ß™%™5™á;™ãF™ßP™T™ág™–n™y™á™ãЙߔ™Š™ßŗ™ßš™ęΙؙâ™ø™šãšã(šã=šQšã^šádšãršá…šßš“šá¤šßޚßĩšáģšãƚß˚ãךßŨšáėšßōšáüšã›ß›&›ß0›A›ßM›Q›áb›ßl››ßŒ››ß§›¸›ßśڛßä›õ›ßœœáœß œ5œß@œQœß[œlœßuœœ‰œ“œœ§œąœģœƜΜáۜßåœßīœ˙œã ã5Iã[oã|á‹ß•™áĒß´ßģ˝۝ãđãôžžž'ž7žãGžãWžažãlžßrž|žŒž§žß­žˇžÁž˞՞ߞôžãũžãŸãŸãŸã0ŸãFŸãOŸãXŸãlŸŒŸãœŸãŦŸáļŸãƟãҟßןãâŸßėŸđŸá ß  ß á! % á6 ß@ ßF Q c ßm q á‚ ß ‘ áž ß¨ ßŽ  ΠŌ áã ßí ßķ áĄĄáĄß"Ąß,ĄAĄßGĄRĄ]ĄoĄßyĄ}ĄáŽĄß™ĄĄáĒĄß´ĄßēĄÎĄÖĄáäĄßîĄōĄáĸßĸĸáĸß)ĸß/ĸCĸáQĸß[ĸpĸß{ĸĸáŒĸß–ĸßœĸ´ĸ¸ĸáÉĸßĶĸäĸßîĸ˙ĸß ŖŖá!Ŗß+Ŗ@ŖßKŖOŖá\ŖßfŖßlŖ€Ŗ’ŖßœŖąŖßŧŖÍŖß×ŖßŨŖņŖ¤ß ¤"¤ß-¤>¤ßH¤ßN¤b¤h¤s¤‚¤ĸ¤ã˛¤ã¤áȤãͤßŲ¤ô¤ãĨ6ĨãFĨãVĨ`ĨãkĨßuĨŠĨß”ĨßžĨ¯ĨßšĨßÃĨØĨßŪĨéĨõĨĻĻ/Ļ_<ĻjCĻRĻdĻmoĻ‚ĻmĻ ĻmĢĻžĻmÛĻãåĻãûĻã˙Ļ,§@§ãM§ãs§ã}§ã“§ã—§ħاãå§ãū§¨ã¨#¨2¨F¨[¨ßa¨l¨v¨¨•¨¨¨ßŗ¨ƨßÔ¨ä¨ãø¨ŠßŠ0ŠPŠã`ŠjŠã€ŠŠšŠãĒŠãēŠĖŠāŠãíŠ÷ŠãĒĒß$Ē7ĒKĒãXĒbĒãvdžĒߐĒßšĒĢĒßĩĒßģĒĪĒãĒãđĒúĒãĢß ĢãĢã-ĢAĢßKĢßUĢfĢßpĢßv̖̆ĢßĒĢžĢãĪĢčĢŦ#Ŧ7ŦãDŦNŦãcŦ…Ŧ™ŦãĒŦŽŦáÄŦČŦáŪŦøŦ­.­ã;­áA­ãL­ßR­\­o­ƒ­ã­áĄ­ß§­ã˛­ß¸­ãíßÍ­â­ßė­ũ­ß ŽŽß)Ž-Žá>ŽßHŽßRŽVŽácŽßmŽßwŽ{ŽáŒŽß’ŽŽ­ŽÄŽ_ĪŽßŲŽėŽ_÷ŽßũŽ ¯¯¯8¯ãB¯ãZ¯j¯áˆ¯Œ¯áœ¯ßϝß°¯ͯҝáė¯đ¯áũ¯ß°ß °"°(°7°;°áK°ßU°Y°áj°ßu°y°á†°ß°ß–°¯°ðßͰâ°ßí°ū°ßąßą#ą-ą4ąWąkąãxąá‚ąãŒąß–ąšąáĒąß´ąßžąŌąßÜąāąáņąßüą˛á ˛ß˛ß˛1˛7˛F˛J˛áZ˛ßd˛h˛áy˛ß„˛ˆ˛á•˛ßŸ˛ßĨ˛Ŋ˛ҞßÛ˛ßá˛ė˛ŗß ŗŗß*ŗ;ŗßEŗßKŗ_ŗiŗpŗŗŗá™ŗã­ŗąŗáÂŗßČŗĶŗęŗõõŗßûŗ´´´á%´ß/´ß9´=´áI´ßS´ßY´i´m´á~´ßˆ´Œ´á˜´ßĸ´Ļ´áˇ´ß´Æ´áĶ´ßŨ´ßã´ü´ĩáĩßĩĩá+ĩß5ĩ9ĩáJĩßUĩYĩáfĩßpĩßvĩĩ¤ĩߎĩžĩßČĩŨĩßčĩųĩßļß ļ"ļ7ļßAļQļß[ļ_ļápļß{ļļáŒļß–ļßœļąļŧļÍļáļãîļáøļãˇßˇˇá/ˇß9ˇ=ˇáVˇßbˇfˇávˇß€ˇ„ˇáˇßšˇžˇá̎߸ˇŧˇáˎßÖˇßܡëˇīˇá˙ˇß ¸ ¸á¸ß)¸-¸á:¸ßD¸ßJ¸b¸f¸áv¸ß€¸ßЏž¸ß¨¸Ŋ¸ßȸŲ¸ßã¸ßé¸ũ¸šššá&šß0š4šáEšßPšTšáašßkšßqš‰ššß§šßąššßĖšßŌšâšöšßēēß ē1ēß;ēßAēYēwē—ē¨ē߲ē߸ēĖēÖēŨēīēģãģ)ģß4ģIģßSģß]ģßcģnģrģáƒģߍģß—ģĢģßĩģšģáĘģßÕģŲģáæģßđģßöģ ŧŧŧ#ŧá4ŧß>ŧBŧáSŧß^ŧbŧáoŧßyŧßŧ—ŧŦŧßļŧßŧŧĮŧÜŧßæŧûŧßŊŊß!Ŋß'Ŋ;ŊEŊWŊkŊãxŊá‚Ŋã–ŊĢŊßļŊēŊáËŊßÕŊŲŊáåŊßīŊķŊážßžžá žß*žß0žIž^žßhžxžß‚ž—žßĸžŗžßŊžßÞŨžōžßüž ŋßŋ+ŋß6ŋGŋßQŋßWŋmŋ‰ŋŖŋÃŋÔŋßŪŋßäŋųŋĀ ĀĀ!Ā+Ā6ĀGĀ[ĀãhĀãwĀáĀã”Ā˜Āá¨Ā߲Ā߸ĀáČĀĖĀáŨĀßįĀßņĀÁß ÁÁ"Á4Áß>ÁBÁáSÁß^ÁbÁáoÁßyÁßÁ“Á›ÁáŠÁßŗÁˇÁáČÁßĶÁ×ÁáäÁßîÁßôÁ ÂÂá Âß+Â?ÂßIÂßSÂßYÂdÂhÂáxÂß‚ÂߌŠÂČÂŲÂßãÂßéÂũÂÃÃÃá&Ãß0Ã4ÃáEÃßPÃTÃáaÃßkÃßqÉÍÃáÃß§ÃĢÃáŧÃßĮÃËÃáØÃßâÃßčÃÄÄáÄßÄß$Ä+Ä=ÄßGÄ\ÄßgÄxÄß‚ÄߎÄĸÄßŦÄÁÄßĖÄŨÄßįÄßíÄÅÅß#Å8ÅßCÅTÅß^ÅßdÅxÅ~ʼnŘÅĩÅãŋÅãĶÅã×ÅôÅūÅÆÆFÆPÆã_ÆtÆãxƚƯÆŊÆßĮÆßÍÆāÆ÷ÆãĮã Įã,ĮãVĮã`ĮãoĮãsĮ”Į˜ĮáĩĮšĮáËĮĪĮáíĮņĮáČßČČČá(Čß2Čß8ČFČßPČßVČgČ|Čß‚ČČČŽČšČĘČÚČãęČôČÉÉã%Éá+Éã6Éß<ÉãGÉßMÉãXÉß^ÉãiÉßoÉã€ÉŠÉ”ɞɨɎÉÉÉãÕÉãâÉãĘãĘã-Ę=ĘãMĘáWĘãlĘpĘáĘ߇Ęá‘ĘߥʸĘ_ÃĘßÉĘØĘÜĘáíĘßķĘūĘË2ËCËßMËßSËgËqË{˅˕˙ËáĒËߴ˸ËáÉËßĶË×ËáčËßķË÷ËáĖßĖßĖ(Ė3Ė>ĖMĖ]ĖlĖ|ˋ˛Ėã¯ĖÄĖßÎĖãĖßíĖß÷ĖßÍÍßÍß!Í/Í?ÍßIÍßSÍWÍácÍßmÍqÍá}Í߇͋ÍáœÍßĻÍßŦÍÄÍÕÍßæÍ÷ÍßÎÎß!Îß'Î5ÎQÎß[ÎwÎß}ÎÎœÎŗÎãŋÎãØÎãäÎãōÎãĪĪã$ĪãEĪIĪáUĪß_ĪßiĪßoĪá‡Ī›ĪßĨĪßĢĪēĪĐĪ_ÛĪßáĪėĪūĪßĐĐß&Đß,Đ7ĐSĐxĐŒĐß–ĐßœĐ§ĐÆĐäĐã÷Đ ŅßŅ%Ņß/Ņ@ŅßMŅaŅßkŅ{Ņß…Ņ–Ņß ŅąŅßģŅĖŅßÛŅßŅáīŅßųŅßŌŌßŌ)Ō;ŌßEŌßOŌSŌá`ŌßjŌßtŌˆŌß’Ōß™ŌĨŌ´ŌČŌßŌŌߨŌįŌûŌßĶß ĶĶ.Ķß8ĶßBĶWĶß]ĶhĶwĶ‹Ķß•Ķß›ĶĒĶŽĶážĶßČĶßŌĶįĶßíĶøĶ ÔßÔßÔ"Ôá/Ôß9ÔßCÔWÔßaÔßhÔtÔƒÔ‡ÔáŖÔ§ÔáŗÔßŊÔÁÔáŌÔßÜÔßæÔęÔáûÔßÕÕÕá!Õß+Õß1Õ?ÕßIÕßOÕ`ÕuÕß{Õ†Õ’Õ­ÕÁÕãŌÕöÕãúÕ Ö2Öß<ÖßFÖVÖaÖpÖtÖáÖߔְÖãēÖãÉÖãÍÖˆîÖˆōÖá×ß ×ˆ!×ß,׈0×á=×ßG×ßM׈e׈u×ß{׈’×ãœ×ãĻ×ãŨ×ãį×ãņ×ãØãØã)ØãKØãZØã^ØØƒØá›ØßĨØŠØáēØßĀØËØĪØáæØßđØôØá ŲßŲ Ų$Ųá;ŲßAŲPŲqŲuŲá†ŲߐŲßšŲžŲáŽŲß´ŲŋŲĪŲßŲŲöŲßÚÚßÚ%Ú/Ú5Ú@ÚDÚáUÚß_ÚßjÚnÚáÚ߉ÚߓڗÚáŖÚß­ÚßŗÚáŊÚ߯ÚĐÚÚÚđÚãÛã0Ûã:ÛãDÛãcÛãmÛãwÛãŽÛžÛãŽÛáĖÛĐÛáčÛßōÛöÛáÜß ÜÜÜá3Üß=ÜAÜáXÜß^ÜmÜqÜáˆÜߎܝÜÁÜÅÜáÖÜßāÜßęÜîÜáūÜßŨŨŨáŨß)Ũ-ŨáFŨßSŨhŨßnŨuŨŨ…ŨŨĢŨßĩŨÅŨßĪŨāŨßęŨßôŨßúŨŪßŪ#Ūß-Ūß7ŪGŪßQŪßaŪ|Ū߆ۖŪß ŪąŪßģŪßÁŪĪŪßŲŪęŪßôŪßūŪßßßß(ß,ßá=ßßCßRßVßágßßqßußá†ßߐߔßá¤ßߎßÃßßÎßŌßáßßßéßßīßāāßā*āEāßOāSāájāßuāyāáŒāߘāŠā߯āˇāÁāČāŌāáāááá"áá:áßDáHááYáß_ájánáá…áߏá“ááĒáß°áŋáÃááÚáßāáīáââá(âß2âß<â@âáPâßVâaâeâáqâß{ââá˜âßĨâēâßĀâĮâŅâ×âââ÷âßãßãããá+ãß1ã@ãDãáUãß_ãcãátãß~ã‚ãá’ãßœãąãßŧãĀãáÍãß×ãßŨãöãäß ää3äß=äXäßcäzä߆ä—äߝäĨäŦäļäĐäãÚäãéäã˙äåãåá=åAåáYåßcågåáxåß~å‰ååá¤åߎå˛åáÉåßĪåŪåųåß˙åæ%æß1æ5æáFæßPæßZæ^æánæßtææƒæáæß™ææáļæßÃæØæßŪæåæīæõæįįáįßįß)į-įá9įßCįßIįáSįß]įaįánįßxį|įá‰įß“įߝįĄįá˛į߸įĮįËįáØįßâįßčįáōįßüįßčččá,čß6čß@čDčáPčßZčß`čájčßwč{čáŒčß’čĄčĨčáļčßĀčÄčáÕčßßčãčáķčßũčéßé!éá.éß8éß>éWégéßméyé”éßžéšéßÄéÛéßįéøéßūéęęę!ę3ęCęãSęáqęuęáęß—ę›ęáŦę߲ęŊęÁęáØęßâęæęáũęßëë-ëß3ëBëYëßeëiëázëß„ëߎë’ëáĸëߨëŗëˇëáÃëßÍëŅëáęëß÷ë ėßėė#ė)ė4ė8ėáIėßSėß]ėaėámėßwėß}ėá‡ėß‘ė•ėáĸėßŦė°ėáŊėßĮėßŅėÕėáæėßėėûė˙ėá íßíßíá&íß0íß6íKíOíá`íßjíßtíxíá„íߎíß”íážíßĢí¯íáĀíßĘíßĐíßíãíáúíßîîßî/îß9îßCîßIîWîßaîrîß|î߆î–îß îß°îËîßÕîåîßīîīß īßīīß(ī9īßCīßMī]īßgīßwī{īáŒīß’īĄīĨīáļīßĀīÄīáÕīßßīãīáķīßũīđßđ!đá.đß8đß>đWđgđßmđyđ”đßžđĸđášđßÄđÛđßįđøđßūđņ ņņ&ņã*ņŠKņŠOņá_ņßiņŠmņá}ņ߇ņŠœņß§ņŠĢņá¸ņßÂņßČņŠāņŠđņßöņŠūņŠōã2ōã6ōŒ`ōŒdōáuōßōŒ”ōߟōŒŖōá°ōßēōßĀōŒÔōŒŪōŒøōãķãķãķŽGķŽ\ķßfķŽwķ߃ķއķá˜ķßĸķßŦķŽÁķßĮķŽŌķŽáķŽåķáöķßôŽôáôß ôŽ$ôá1ôß;ôßAôŽYôŽnôßxôŽ•ôߥôŽĀôŽāôŽņôßûôßõŽõŽõŽ)õŽ3õŽMõãrõã|õã‹õãõšõŊõáÎõߨõėõßōõööáößö4öß?öCöáPößZöß`öxö‘ö°öÁößËößŅöæöđöúö ÷ã ÷’/÷áG÷’\÷ßf÷ßp÷’…÷ß‹÷’–÷’Ą÷’ŧ÷’Û÷’ė÷ßö÷ßü÷’ø’ø’&ø”5øã>øãGøãQøãaøãqøázøã†øã“øãžøßŠøãžø”ÂøáĶøßŲø”čø”ėøáũøßų” ųá$ųß0ų”EųßLų”^ųßhų”}ų߈ų”™ųßŖųߊų”Ŋų”Įų”Ņų”Üų”đųúã úßúá/ú3úáDúßNúßTúáfújúá{úß…úß‹úáúĄúá˛úßŧúßÂúáŌúÖúáįúßņúß÷úûûßû"ûá3ûß>ûBûáOûßYûß_ûsûûƒûá”ûßžûĸûáŗûßžûÂûáĪûßŲûßßû÷û üßü+üß6üGüßQüßWüoüsüá„üߎüß”üáĻüĒüáģüßÅüßËüáÕüßáüåüáöüßũßũáũũá-ũß7ũß=ũáOũdũßnũƒũߎũŸũߊũ߯ũĮũÜũßæũûũßūūß!ūß'ū;ūAūKūVūeū…ūãūß–ūá ūãąūáÄūßĘūáĐūãÛūßåūéūáúūß˙ß˙#˙ß-˙>˙ßH˙Y˙ßb˙q˙u˙á†˙ߐ˙”˙áĨ˙ß°˙´˙áÁ˙ßË˙ßŅ˙ę˙ +<ßFßLaquá†ß”áĨ߯ŗáÃßÍâßíņáūßß'7ß=Idßn‰ß”ĢߡČßÎÖÜæđ÷ ããJ^ãkãƒá”ßž¯ßšĘß×Ûáėßößßáßá/ß9ß?áPTá`ßjßt‰ß“¤ßŽŋßČŲŨáîßøüá ßá)ß3ß9QUálßrჇá“ßßŖ´Ķķßß(4K[ãkuƒ—ã¤ã¸ŧáÍß×ßŨáîōáūßß'ß1BßL]ßfw{áŒß–šáĢßļēáĮßŅß×ī.?ßIßOcm“ã ã´¸áÉßĶßŲáęîáúßß#ß->ßHYßbswáˆß’–á§ß˛ļáÃßÍßĶë * ; ßE ßK _ i x ‡ 㐠ãĸ ßą ßģ Ī ßŲ ßä č áø ß ß  + ß5 ß@ T ß^ ßi } ߇ ß’ Ļ ß° ßģ Ī ßŲ ßä ø ß ß ! ß+ ß6 J ßT ß_ s ß~ ‚ á’ ßœ ßĻ ģ ßÅ Ö ßā ņ ßú   á ß' + á< ßG K áX ßb ßh € „ á” ßž ŗ ßž  áĪ ßŲ ßß ÷  ß ß * > ßH L á] ßh l áy ߃ ߉ Ą ĩ ßŋ Ô ßß đ ßú ß(7Oß^ßh|߆ߌ›ą_ŧßÂÍÜëãõãßß&0ã=_DãOßYp_{߁ŒšãĨßĢĀßĘÎáßßéßīūß(=ßGßM\mßwß}°_ģßÁØãâã ã(ßQUábßlßv߀•ߟßĨ°ēÕîßūßß'ß-<Qß[ßap‡_’ߘŖ­Æßßøüá ßá(ß26áCßLšĻãļáÔšØáđßúšūáßš š$á;ßEšIá`ßfšušß–šĨšÉšÍáŪßčßōšöáß šš'ß1šNß[špßvš}š‡šš˜šœá­ßˇßÁšÅáÖßāßæáđšôáß ßšá&ß0ß6šHšLá]ßgšká|߇š‹á˜ßĸߨšÁšÖßāßæšõš ßš)ß4šEßOßUšjšušyáŠßšŸšŖá´ßžšÂáĶßŨšááņßûšßšá,ß6ß<šUšeßkšwš’ßœšˇßšŲßåšößüšš šš)8ãBãMß^ßs}ãŠ_‘ãœßĻŊ_ČßÎŲįãōßøá ßá(ß2ß8G\ßbpßv†›ßĨßĢļÎá_ėßō ãã>NãYß‚†á“ߝߧ߱ÆßĐßÖáëß/ß9NßXß^m‚ߌߒĄ¸_ÃßÉÔŪ÷ß)-á>ßHLáYßcgátß}Ā×ãįᝠá!ß+/á@ßFQUálßvzá‘ß—ĻÁßĮÖíßųũáßß"&á6ß<GWßa~ß‹ ßĻ­ˇŊČĖáŨßįßņõá ß ß á $ á1 ß; ßE I áV ß` ßf x | ፠ߗ › áŦ ßļ Į ßĶ × áä ßî ßô áū ß!ß!!á&!ß0!ß6!H!ßR!ß\!l!ßv!ß‚!’!ßœ!ßĸ!°!ßš!Ę!ß!ßé!ßī!ū!"á"ß"2"ß<"M"ßY"]"áj"ßt"ßz"“"ߝ"Ą"á¸"ßž"Đ"ßÚ"ßä"ô"ßū"ß #'#<#I#T#X#ái#ßo#~#‚#á“#ߝ#Ą#á˛#ßŧ#Ā#áĐ#ßÚ#ī#ßú#ū#á $ß$ß$4$D$ßJ$V$q$ß{$–$ߥ$¸$ßÄ$Õ$ßÛ$ã$ę$ô$%#%ß)%á3%ãH%L%á]%ßg%k%á„%ߌ%á %ßĒ%Ž%áŋ%ßË%áÕ%ßß%ú%&+&@&ßJ&ßU&p&‰&&áž&ߨ&ߎ&ŧ&߯&ßĐ&ë&'ß '''á/'ß9'='áN'ßY']'áj'ßt'ßz'’'–'á§'ßą'Æ'ßŅ'Õ'áâ'ßė'ßō' ((ß)(>(ßI(Z(ßd(ßj(‚(—(ߥ(ļ(ßÁ(Ō(ßÜ(ßâ(ö() ))-)I)Z)ßd)ßj)~)ˆ)“)ĸ)Ÿą)ãē)ãÃ)ãÍ)ãŨ)ãí)á÷)ã*Ÿ#*ŸB*ŸS*ß]*ßc*Ÿw*Ÿ}*Ÿˆ*Ÿ§*ã°*ãš*ãÃ*ãĐ*ãŪ*ãë*ã++ã-+ã<+áY+m+ßw+‡+ß‘+ĸ+߯+ŗ+áÃ+ßÍ+ßĶ+áß+û+˙+á,,á,,ß6,ß<,P,V,f,j,áz,ß„,ߎ,ĸ,ßŦ,°,áÁ,ßĖ,Đ,áŨ,ßį,ßí,----á*-ß4-8-áI-ßT-X-áe-ßo-ßu--‘-áĄ-ßĢ-Ā-ßË-Ī-áÜ-ßæ-ßė-. .á.ß#.'.á3.ß=.R.ß].a.án.ßx.ß~.˜.Ŧ.ßļ.ßŧ.Į.Û.ßå.õ.ß˙./ß/0/ß:/ß@/Y/m/ßw/Œ/ß—/¨/߲/߸/Đ/ä/ßî/0ß00ß)0ß/0C0M0X0q00ã‘0ãĄ0áĢ0ãŋ0Ã0áÔ0ßŪ0ķ0ßū01á1ß1ß171L1ßV1ß\1p1t1á…1ߏ1ß•1 1Ŧ1°1áÁ1ßË1Ī1áā1ßë1ī1áü1ß2ß 2$292ßC2X2ßc2t2ß~2ß„2œ2ą2ßģ2ŋ2áĐ2ßÛ2ß2áė2ßö2ßü233 3+3J3ãS3ãw3Ą†3ã3ã´3áž3ãÎ3ĄŌ3áä3_ī3ßõ3Ą4Ą4á4ß"4ß,4Ą@4ßJ4ßP4Ą_4Ąs4ß}4߃4Ą’4ĄĻ4ß°4ßļ4ĄÅ4ĄŲ4ßã4ßé4Ąø4Ą 5ß5ß5Ą+5Ą?5ßI5ßO5Ą^5Ąr5ß|5ß‚5Ą‘5ĄĨ5߯5ßĩ5ĄÄ5ĄØ5ßâ5ßč5Ą÷5Ą 6ß6ß6Ą*6Ą>6ßI6ĄM6á]6ßg6ßq6Ą†6ߐ6ĄĄ6ßĢ6Ąŧ6ßÅ6ĄÔ6ĄØ6áč6ßō6Ąö6á7ß7Ą7á#7ß-7ß37ĄK7ĄO7á_7ßi7Ą~7߉7Ą7áš7ߤ7ßĒ7ĄÃ7Ą×7ßá7ßį7Ąö7Ą 8ß8Ą8á)8ß48Ą88áE8ßO8ßU8Ąm8Ą8ß‹8Ą 8ßĢ8Ąŧ8߯8ßÎ8ĄØ8Ąį8Ąë8áû8ß9ß 9Ą9Ą9Ą)9Ą89Ą<9áL9ßV9ß\9Ąf9Ąu9Ą‰9ß“9ß™9Ą¨9ĄŦ9áŧ9߯9ßĖ9ĄÛ9Ąß9áī9ß˙9Ą:ß:Ą/:ß9:ĄJ:ßS:Ąb:Ąf:áv:߀:Ą„:á•:ß :Ąą:ßģ:ßÁ:ĄŲ:Ąí:ß÷:Ą ;ß;Ą(;ß2;ß8;ĄL;ĄV;Ą`;Ąk;Ąz;Ĩ;ē;ãÃ;ãį;¤ö;ã˙;ã$<á.<ã><¤T<__<ße<¤t<¤x<áˆ<ß’<ßœ<¤°<ßē<ßĀ<¤Ī<¤ã<ßí<ßķ<¤=¤=ß =ß&=¤5=¤I=ßS=ßY=¤h=¤|=߆=ߌ=¤›=¤¯=ßš=ßŋ=¤Î=¤â=ßė=ßō=¤>¤>ß>ß%>¤4>¤H>ßR>ßX>¤g>¤{>ß…>ß‹>¤š>¤Ž>ßš>¤Ŋ>áÍ>ß×>ßá>¤ö>ß?¤?ß?¤,?ß5?¤D?¤H?áX?ßb?¤f?áw?ß‚?¤†?á“?ߝ?ßŖ?¤ģ?¤ŋ?áĪ?ßŲ?¤î?ßų?¤ũ?á @ß@ß@¤3@¤G@ßQ@ßW@¤f@¤z@ß„@¤ˆ@á™@ߤ@¤¨@áĩ@ßŋ@ßÅ@¤Ũ@¤ņ@ßû@¤AßA¤,Aß6Aß>A¤HA¤WA¤[AákAßuAß{A¤…A¤A¤™A¤¨A¤ŦAáŧA߯AßĖA¤ÖA¤åA¤ųAßBß B¤B¤Bá,Bß6BßSßHS¯]SßhS¯yS߃S߉S¯S¯§S¯ąS¯ĀS¯ÕSßßS¯īSßųS¯ TßTßT¯+T¯JT¯`T¯lT¯rT¯†TąĄTãŽTãÂTąÆTá×TßáTßįTáôTąUąUáUß#Uß-UąBUßLUą]UßiUąmUá~U߈Uß’Uą§Uß­Uą¸UąĮUąËUáÜUßæUąęUáûUßVą VáVß!Vß'Vą?VąTVß^Vą{V߇VąœVßĻVąģV߯Vą×VßáVßįVąûVąWąWąWą3Wß=WąMWßWWąhWßrWßxWą‰Wą¨WąžWąĘWąĐWąöWãXãUXã_XãˆXã’XãŠXÔXãäXãôXãYáYã9YßCYGYáXYßbYßhYáuY…Y‰YášYߤYßĒYáģYŋYáËYßÕYßßYôYßūYZßZ*Zß3ZDZHZáYZßcZßiZávZ†ZŠZá›ZßĨZßĢZá¸ZČZĖZáãZßéZáöZ[ [á[ß%[ß+[á8[D[[[ße[i[áz[ß„[ߊ[á›[Ÿ[áĢ[ßĩ[ßģ[Ė[Đ[áá[ßë[ßņ[áū[ \\#\'\á8\ßB\ßL\P\áa\ßk\ßq\á‚\†\á’\ßœ\ßĻ\Ē\áē\ßÄ\ßÎ\ã\ßí\ū\ß]]ß"]1]5]áE]ßO]S]ád]ßo]s]á€]ߊ]ߐ]Ē]ž]ßČ]Ė]áŨ]ßč]ė]áų]ß^ß ^^0^4^áE^ßO^ßY^n^ßx^‰^ß•^™^áĒ^ß´^ßž^Ķ^ßŲ^ä^ķ^÷^á_ß__á'_ß2_6_áC_ßM_ßS_m_q_á‚_ߌ__áŠ_ßĩ_Ę_ßÔ_é_ßô_`ß`ß`+`5`?`N`R`ác`ßm`q`á}`߇`‹`á˜`ßĸ`ߨ`š`Î`ߨ`č`ßî`ú`aaß$a5aß;aKa`aßja{a߁a‘a•aáĻaß°a´aáÁaßĮa×aÛaáėaßöaúaábß bb bá1bß;b?báPbß[b_bálbßvbß|b–bšbáĢbßĩbšbáÆbßĖbÜbņbßûbßcccá%cß/cß9c=cáNcßXcß^cáocscác߉cߏc c¤cáĩcßŋcßÉcŪcßčcųcßd dádß$dß.d2dáCdßIdTdcdgdáxdß‚d†dá—dßĸdĻdáŗdßŊdßÃdÛdđdßúdeße+eß5eß;eSeheßreeß—eĄeĢeēeĪeßŲeéeßķefßfßf%f:fßDfTfßZfffqfufá†fߐfßšfžfá¯fßšfßŋfáĐfÔfáāfßęfßđfggágß gß*g?gßIgZgßfgjgá{gß…gߏg“gá¤gßĒgĩgÄgČgáŲgßãgįgáøgßhháhßhß$h|ßH|ßN|h|l|á}|߇|œ|ß§|Ģ|á¸|ßÂ|ßČ|â|æ|á÷|ß}}ß!}%}á2}ß<}ßB}\}`}áq}ß{}}ß›}Ÿ}áŦ}ßļ}ßŧ}Ö}Ú}áë}ßõ} ~ß~~á&~ß0~ß6~P~T~áe~ßo~„~ߏ~“~á ~ßĒ~ß°~Ę~ß~ßé~í~áū~ß  áß$ß*CXßbwß‚“ßßŖŧŅßÛđßû €ß€ß€5€J€ßT€i€ßt€…€ß€ß•€Ž€Àß̀â€ßí€ū€ßß'<ßF[ßfwßß‡ ĩßŋԁß߁đßúß‚‚.‚ß8‚M‚ßX‚i‚ßs‚ßy‚’‚§‚ßą‚ƂßŅ‚â‚ßė‚ßō‚ ƒ ƒß*ƒ?ƒßJƒ[ƒßeƒßkƒ„ƒ™ƒßŖƒ¸ƒßÃԃßۃßäƒūƒ„ß„2„ß=„N„ßX„ß^„w„Œ„ß–„Ģ„ßļ„Į„ßŅ„ßׄđ„…ß…$…ß/…@…ßJ…ßP…i…~…߈……ߨ…š…ßÅßɅŪ…č…ō…ü…†††$†.†8†B†L†V†`†j†t†~†ˆ††Ĩ†ĩ†ãĆã͆ãâ†ãņ†áû†ã‡‡á#‡ß-‡1‡áJ‡ßV‡Z‡áj‡ßt‡ßz‡‰‡‡á‡ß§‡̇áŧ‡ßĮ‡ˇá؇ßâ‡ßč‡ˆˆßˆ3ˆß>ˆOˆßYˆßeˆyˆßƒˆß‰ˆˆžˆĸˆá˛ˆßŧˆˆáˈßֈڈáëˆßöˆúˆá‰ß‰ß‰0‰4‰áD‰ßN‰c‰ßn‰r‰á‰ß‰‰ß‰§‰̉áģ‰ßʼnßˉډŪ‰áî‰ßø‰ü‰á ŠßŠŠá)Šß3Šß9ŠQŠUŠáeŠßoŠ„ŠßŠ“Šá ŠßNJß°ŠȊˊá܊ßæŠûŠß‹ ‹á‹ß!‹ß'‹?‹C‹áS‹ß]‹r‹ß}‹‹áŽ‹ß˜‹ßž‹ļ‹ʋßԋé‹ßô‹ŒßŒßŒ-Œ1ŒáAŒßKŒ`ŒßkŒoŒá|Œß†ŒßŒŒ¤Œ¸ŒßŒ׌ßâŒķŒßũŒß/ß9NßYjßtßz’Ļß°ōßЍáßëß÷ ŽßŽ%Žß/ŽDŽßOŽ`ŽßjŽßpŽ‰ŽŽß§ŽŧŽßĮŽ؎ßâŽß讏ß3ß>OßYß_w‹ß•ĒßĩƏßЏß֏îß !ß,=ßGßMaku‰“§˛ΐېãîãūã‘á‘ã)‘ã4‘ß>‘B‘áS‘ßY‘d‘h‘áy‘߃‘‡‘ᓑߝ‘Ą‘Ბßŧ‘ß‘ڑŪ‘áë‘ßø‘ü‘á ’ß’ß!’%’á1’ß;’ßA’M’_’ßi’y’߃’˜’ßŖ’´’ßž’ßĒŨ’ü’“6“G“ßQ“ßW“l“v““š“Ē“ãē“ãʓáԓãč“ė“áũ“ß”ß ”á”!”á2”ß<”ßB”M”_”ßi”m”á~”߉””ᚔߤ”ßĒ”ž”ʔΔáߔßé”ßī”á˙”•á•ß•ß$•/•J•N•ái•m•áz•ß„•ߊ•ž•Ǖޕáŋ•ßɕ͕áŪ•ßé•í•áú•ß–ß –"–&–á7–ßA–V–ßa–e–ár–ß|–ß‚–š–ž–á¯–ßš–ΖßŲ–Ũ–áę–ßô–ßú–——á'—ß1—5—áF—ßQ—U—áb—ßl—ßr—Š—Ÿ—ߊ—ž—ßɗڗßä—ßę—˜˜ß!˜6˜ßA˜R˜ß\˜ßb˜z˜˜ß™˜ޘßš˜ʘßԘßژō˜™ß™&™ß1™B™ßL™ßR™f™l™v™€™‹™¨™ã˛™ãŋ™ãĖ™ãۙãî™ãō™*šá8šßBšFšáWšßašešáršß~š‚šáŸšŖšáĩšššáƚßښۚáīšßõš››á›ß›ß%›3›ß=›ßC›T›i›ßo›z›Š›Ž›áŸ›ßЛߝ›ž››áĶ›ßŨ›ßã›ō›ö›áœßœßœ0œß6œAœáOœßYœßcœgœátœß~œßˆœœœßϜß­œšœȜ˜áŨœßįœßíœüœáßá0ß;?áLßVß\t“ŗĝßΝßԝčķžžã&žã:ž>žáOžß[žjžnžážß‹žšžžžá¯žßģžʞΞáߞßëžúžūžáŸßŸ*Ÿ.Ÿá?ŸßIŸßOŸ^ŸbŸásŸß}ŸßƒŸ’Ÿ–Ÿá§ŸßŗŸŸƟáןßáŸßįŸōŸüŸ     $ . 4 N ãX ã„ ãˆ šŽ áŧ ßÆ šĘ áÛ ßį šö šú á ĄßĄš&Ąš*Ąá;ĄßEĄšIĄáVĄß`ĄšdĄáqĄß~Ąš‚Ąá“ĄßŸĄšŽĄš˛ĄáÃĄßĶĄščĄßōĄšĸß ĸšĸß'ĸš6ĸš:ĸáKĸßUĸß[ĸšjĸšnĸáĸߏĸš¤ĸߎĸšŋĸßÉĸšÚĸßãĸšîĸšøĸšūĸšŖšŖšŖšŖš Ŗš'Ŗš1ŖšKŖãWŖãjŖãnŖ싪á™ŖßŖŖģ§ŖáēŖ_ĮŖģÖŖģÚŖáëŖß÷Ŗģ¤ģ ¤ģ¤ģ¤ģ"¤ģ)¤ģ3¤ģM¤ãY¤ãl¤ãp¤Ŋ¤á›¤ßĨ¤ŊФáŧ¤_ɤŊؤŊܤáí¤ßų¤ŊĨŊĨŊĨŊĨŊ$ĨŊ+ĨŊEĨãOĨã[ĨãsĨãwĨŋ”ĨáĸĨßŦĨŋ°ĨáÃĨoĐĨŋßĨŋãĨáôĨßĻŋ ĻŋĻŋĻŋ%Ļŋ+Ļŋ2ĻŋAĻÁXĻãhĻã–Ļá ĻãĢĻßĩĻÁšĻáĘĻßÔĻßßĻÁãĻáôĻß§Á§Á§á$§ß0§Á?§ÁC§áT§ß^§ßd§Ás§Áw§áˆ§ß’§ß˜§ÁŖ§Áą§ãŧ§ß§áȧãÕ§ãā§ßę§Áî§á ¨Á.¨ÁC¨ßM¨ßS¨Áa¨ßi¨Áy¨Á}¨áލßš¨ÁЍÁ­¨áž¨ßʨÁŲ¨ÁŨ¨áî¨ßø¨ßū¨Á ŠÁŠá"Šß,Šß2ŠÁ=ŠÁGŠÁMŠÁWŠÁaŠÁgŠÁqŠÁwŠÁŠÁ‹ŠÁ•ŠÁŸŠÁĨŠÁĢŠÁ˛ŠÁŧŠÁËŠߊãėŠãĒĒß$ĒBĒRĒfĒãwĒŒĒß—Ē›ĒáŦĒßļĒßŊĒáĐĒßÚĒŪĒáīĒßųĒßĢ ĢĢ/Ģã>ĢãBĢÃcĢÃgĢáxĢß„ĢÓĢ×Ģá¨Ģß´ĢÃŋĢÃÉĢÃĪĢÃÕĢÃßĢÃåĢÃôĢŦãŦáŦã/Ŧã@ŦãKŦßQŦ_ŦãjŦßpŦzŦ„Ŧ“Ŧ—Ŧá¨Ŧß´ŦÃŦĮŦáØŦßäŦķŦ­ß­#­'­á8­ßB­ßL­a­ßk­|­ß†­—­ß ­¯­ŗ­áÄ­ßέߨ­í­ß÷­ŽßŽ#Žß,Ž7ŽAŽKŽUŽ[ŽaŽkŽqŽ{ŽŽ‡Ž‘Ž›ŽĄŽ§Ž­Ž´ŽžŽČŽâŽãėŽãøŽã ¯ã¯Å0¯ÅE¯ßL¯áZ¯ßd¯Åh¯áy¯ß…¯Ŕ¯Ř¯áНßĩ¯ŝÅƝÅĐ¯ÅÚ¯Åā¯Åë¯Űß °Å°ß)°ß3°ß=°ÅM°ßW°ß]°Åk°Å{°ß…°ß°œ°áŸ°ßаÅ­°áš°ßðÅĮ°áÔ°ßŪ°Åâ°áķ°ßũ°ßąÅąÅ,ąß>ąÅOąßYąÅoąßyąßąōąÅŖąß­ąßˇąÅÍąß׹ßŨąÅņąÅ˛ß˛Å%˛ß/˛ß9˛ßC˛ÅS˛ß]˛ßc˛Åq˛ٞß“˛ÅŖ˛ß­˛ÅŊ˛ßĮ˛ÅØ˛ßâ˛Åæ˛á÷˛ßŗßŗÅŗÅ0ŗßBŗÅSŗß]ŗÅsŗßŗŏŗÅĨŗß¯ŗßšŗÅĪŗßŲŗßßŗÅīŗÅųŗÅ´ã´ã)´ã<´ã@´Įa´Įv´ß}´á‹´ß•´Į™´áŦ´_š´ĮČ´ĮĖ´áŨ´ßé´Įô´Įū´ĮĩĮĩĮĩĮĩĮ%ĩĮ4ĩÉCĩã]ĩãmĩá†ĩã“ĩãžĩߊĩã´ĩßēĩãÅĩßĪĩÉäĩßîĩÉ˙ĩß ļÉļß$ļÉ5ļßCļÉXļßcļÉzļo‡ļɒļɜļÉĻļɰļÉēļÉĀļÉÆļÉÍļÉėļãˇãˇã$ˇCˇãSˇãgˇ|ˇßˆˇ—ˇ›ˇáŦˇßŧˇҎßסâˇáđˇß¸¸á¸ß¸ß%¸9¸ßC¸ßJ¸V¸e¸z¸ß†¸•¸™¸áǏß´¸ßž¸͏ßŨ¸ú¸ßšášß#š'šá8šßBšßLšPšá]šßgšßqšušá†šßš™šŖš­šˇšÆšåšē ēß&ē;ēFēLēRē\ēbēlēvē…ē•ē¤ē´ēÎēãØēãįēãëēË ģËģá!ģß+ģË/ģá@ģßLģË[ģË_ģápģß|ģˇģˑģ˗ģ˝ģ˧ģ˲ģËļģáĮģßŅģËÕģáæģßņģËõģáŧß ŧßŧË*ŧË.ŧá?ŧßIŧË^ŧßiŧËmŧázŧß„ŧߊŧËĸŧËŊŧËÁŧáŲŧËŨŧáęŧßôŧßúŧËŊË-ŊËIŊËZŊßdŊßjŊË~ŊˍŊã‘ŊͲŊÍļŊáĮŊßŅŊÍÕŊáæŊßđŊÍôŊážßžÍ žÍ$žá5žßAžÍLžÍVžÍ\žÍbžÍlžÍwžÍ{žáŒžß–ž͚žáĢžßļžÍēžáĮžßŅžßמÍīžÍķžáŋßŋÍ#ŋß.ŋÍ2ŋá?ŋßIŋßOŋÍgŋ͆ŋ͊ŋáĻŋÍĒŋáˇŋßÁŋßĮŋÍßŋÍúŋÍĀÍ+Āß5Āß;ĀÍPĀÍZĀÍtĀã€ĀãĄĀã°Āã´ĀÕĀŲĀáęĀßđĀáúĀßÁÁáÁo(Á7Á;ÁáLÁßXÁcÁmÁsÁ}ÁƒÁÁ¤ÁߎÁŋÁßÉÁŲÁßæÁûÁßÂÂß Â0Âß9ÂHÂãLÂĪmÂĪqÂá‚Â߈Âá’ÂßœÂĪ ÂáŗÂoĀÂĪĪÂĪĶÂáäÂßđÂĪûÂĪÃĪ ÃĪÃĪÃĪ#ÃĪ2Ãã6ÃŅWÃŅ[ÃálÃßvÃŅzÃá‡ÃߍÃá—ÃߥÃŅĨÃá¸ÃoÅÃŅÔÃŅØÃáéÃßõÃŅÄŅ ÄŅÄŅÄŅ ÄŅ)ÄŅ3ÄŅPÄãZÄãtÄãŽÄã’ÄĶŗÄ͎ÄáČÄßŌÄĶÖÄáęÄßôÄĶøÄá ÅßÅĶÅá(Åß2ÅĶ6ÅáGÅßQÅĶUÅáfÅßrǺÅĶ…Åá–ÅßĸÅĶ­Å͎ÅĶŊÅĶÃÅĶÍÅĶØÅĶÜÅáíÅß÷ÅĶûÅá ÆßÆĶÆá(Æß2Æß8ÆĶPÆĶTÆáeÆßoÆĶ„ÆßÆĶ“Æá ÆßĒÆß°ÆĶČÆĶįÆĶëÆáĮĶ ĮáĮß"Įß(ĮĶ@ĮĶ[ĮĶ{Į͌Įß–ĮßœĮĶąĮĶŧĮĶČĮĶ×ĮëĮãüĮČáČßČČá,Čß2Čá<ČßFČJČá[ČßgČvČzČá‹Čß—ČĸČŦȲČŧČÂČËČÕČßČųČãÉãÉãÉÕHÉÕLÉá_É_jÉßpÉá€É՗É_ĸÉߨÉÕŗÉÕÅÉßĪÉÕäÉßīÉÕĘß ĘßĘÕ$ĘÕ0ĘÕ4ĘáEĘßOĘßUĘá_ĘßiĘÕmĘá~ĘߊĘՙĘ՝ĘáŽĘßēĘÕÉĘÕÍĘáŪĘßčĘÕųĘßËÕËß!ËÕ%Ëá6ËßBËÕQËÕUËáfËßvËՋËß•ËÕĻËß°ËÕÁËßĘËÕŲËÕŨËáîËßøËßūËÕ ĖÕĖá"Ėß2ĖÕGĖßQĖÕbĖßlĖÕ}Ė߆ĖՑĖ՛ĖÕĄĖÕ§ĖÕąĖÕˇĖÕŊĖÕÃĖÕĪĖÕĶĖáäĖßîĖÕÍßÍÕÍáÍß)Íß/ÍÕGÍÕ\ÍßfÍÕ{Í߆Í՗ÍߥÍß§ÍÕģÍÕÅÍÕÔÍ×čÍãõÍã Î×Îß(Î×9ÎßCÎ×TÎßaÎ×eÎávÎ߀Î߆Îá–ÎךÎáĢÎßĩÎßŋÎ×ÔÎßÚÎ×åÎ×đÎ×üÎ×ĪáĪßĪß!Ī×0Ī×4ĪáEĪßOĪ×SĪádĪßoĪ×sĪá€ĪߊĪߐĪרĪ×ŦĪáŊĪßĮĪ×ËĪáÜĪßįĪ×ëĪáøĪßĐßĐ× Đ×5Đß?Đ×CĐáTĐß_Đ×cĐápĐßzĐ߀ĐטĐסĐ××Đ×čĐßōĐßøĐ× Ņ×Ņ×&ŅŲ:ŅãGŅã[ŅŲ_ŅápŅßzŅ߀ŅŲ‹ŅŲŅá ŅßĒŅß°ŅŲŋŅŲÃŅáÔŅßŪŅŲâŅáķŅßūŅŲŌáŌßŌßŌŲ7ŌŲ;ŌáLŌßVŌŲZŌákŌßvŌŲzŌá‡Ōß‘Ōß—ŌŲ¯ŌŲÄŌßĪŌŲäŌßîŌŲōŌáĶßĶŲĶáĶß)Ķß/ĶŲGĶŲfĶŲ†ĶŲ—ĶߥĶß§ĶŲģĶŲÅĶŲĪĶŲãĶÛ÷ĶãÔãÔáÔã)Ôß3ÔÛHÔßRÔÛbÔßlÔÛ}Ô߇ÔۘÔßĸÔÛŗÔßÂÔÛÆÔá×ÔßáÔßįÔá÷ÔÛûÔá ÕßÕßÕÛ'ÕÛ9ÕßCÕÛGÕáXÕßcÕÛgÕátÕß~Õß„ÕۘÕÛ¤ÕÛ¨ÕášÕßÃÕßÉÕáŲÕÛŨÕáîÕßøÕßūÕÛ ÖÛÖß%ÖÛ)Öá:ÖßEÖÛIÖáVÖß`ÖßfÖÛzÖۆÖۊÖá›ÖßĨÖßĢÖÛēÖÛžÖáĪÖßŲÖÛŨÖáîÖßųÖÛũÖá ×ß×ß×Û2×Û6×áG×ßQ×ÛU×áf×ßq×Ûu×á‚×ߌ×ß’×ÛĒ×ÛŽ×áŋ×ßÉ×ÛÍ×áŪ×ßé×Ûí×áú×ßØß ØÛ"ØÛ&Øá7ØßAØÛEØáVØßaØÛeØárØß|Øß‚ØۚØ۞Øá¯ØßšØÛŊØáÎØßŲØÛŨØáęØßôØßúØÛŲÛŲá'Ųß1ŲÛ5ŲáFŲßQŲÛUŲábŲßlŲßrŲۊŲێŲáŸŲߊŲÛ­ŲážŲßÉŲÛÍŲáÚŲßäŲßęŲÛÚÛÚáÚß!ÚÛ%Úá6ÚßAÚÛEÚáRÚß\ÚßbÚÛzÚۏÚß™Ú۝ÚáŽÚßšÚÛŊÚáĘÚßÔÚßÚÚÛōÚÛÛßÛÛ&Ûß1ÛÛBÛßLÛßRÛÛjÛÛÛ߉Û۞ÛߊÛÛēÛßÄÛßĘÛÛâÛÛ÷ÛßÜÛÜß!ÜÛ2Üß<ÜßBÜÛZÜÛoÜßyÜێÜß™ÜÛĒÜß´ÜßēÜÛŌÜÛįÜßņÜÛŨßŨÛ"Ũß,Ũß2ŨÛJŨÛ_ŨßiŨÛ~Ũ߉ŨۚŨߤŨßĒŨÛÂŨÛ×ŨßáŨÛöŨßŪÛŪßŪß"ŪÛ8ŪÛBŪÛLŪÛVŪÛ`ŪÛjŪÛuŪۉŪãŪŨŽŪŨ˛ŪáÃŪßÍŪŨŅŪáŪŪßčŪŨėŪáßß ßŨßáßß)ßŨ-ßá>ßßHßŨLßá]ßßgßŨkßá|ß߈ßŨ—ßŨ›ßáŦß߸ßŨÃßŨÍßŨĶßŨŲßŨãßŨîßŨōßáāß āŨāá"āß-āŨ1āá>āßHāßNāŨfāŨjāá{āß…āŨšāßĨāŨŠāáļāßĀā߯āŨŪāŨũāŨáááŨ!áá.áß8áß>áŨVáŨqáŨ‘áŨĸáßŦá߲áŨĮáŨŌáŨßáŨéáŨøá âãâã)âá3âã>âßHâLâá]âßiâŨtâxâá…âß‹âá™âßŖâ§âá¸âßÄâĶâ×âáčâßôâ˙â ãããã&ã6ã:ãáGãßQãUãábãßhãárãß|ã€ãá‘ãߝãŦã°ãáÁãßÍãØãâãčãōãøãä ää/äã<äáFäãQäß[ä_äápäß|äŨ‡ä‹äá˜äßžäáŦäßļäēäáËäß×äæäęäáûäßååå"å,å2å9åIåMåáZåßdåhåáuåß{åá…åߏå“åá¤åß°åŋåÃåáÔåßāåëåõåûåæ æææ.æBæãOæã_æsæ‡æã”æážæãŠæßŗæˇæáČæßÔæŨßæãæáđæßöæáįßįįá#įß/į>įBįáSįß_įjįtįzį„įŠį‘įĄįĨįá˛įßŧįĀįáÍįßĶįáŨįßįįëįáüįßčččá,čß8čCčMčSč]čcčmčwč†čščã§čáąčãŧč߯čĘčáÛčßįčŨōčöčáéß éáéß!é%éá6éßBéQéUéáféßré}é‡éé—éé¤é´é¸éáÅéßĪéĶéáāéßæéáđéßúéūéáęßę*ę.ęá?ęßKęVę`ęfępęvę€ęŠę¤ęãŽęãČęãŌęãīęãųęãëã ë-ëBëßLëaëßkëßuëßë—ëĨëģëßÅëÉëáÕëßßëãëáīëßųëũëáėßėėá-ėß7ėß=ėUėfėßrėvėáƒėߍė‘ėáĸėß­ėąėážėßČėßÎėíėūėßííß(íß.í<íRíß\íßfí|í߆íߌí íĩíßŋíÔíßŪíßčíßōí îî.îß8î<îáHîßRîVîábîßlîpîá€îߊîŽîáŸîߊî߯îĮîØîßäîčîáøîßīīáīß"ī&īá3īß=īßCī\ī`īálīßvīzīá‹īß–īšīá§īßąīߡīÖīįīßņīđßđßđ%đ;đßEđßOđeđßođßuđ‰đđážđߤđáŽđ߸đŧđáĪđoÜđëđīđáņß ņņ!ņ'ņ1ņ7ņ?ņNņßbņã|ņ߀ņá‘ņß›ņßĨņߊņáēņßÅņßÉņáÖņßāņßęņßîņáō_ ōßōá"ōß&ōá7ōßAōßGōßRōßdōßnōßrōáƒōߎōߒōáŸōߊō߯ōßÃōßĪōßĶōáäōßîōßôōáūōßķß ķáķß)ķß8ķß<ķáMķßYķßhķßlķá}ķ߇ķߘķßĸķßŗķßĀķßÄķáÕķßáķßđķßôķáôßôß*ôß4ôßEôßOôß`ôßiôßxôß|ôáôß—ôߝôßŦôß°ôáÁôßŅôßæôßđôßõß õßõß%õß0õß:õß@õßFõßPõßVõß\õßbõßnõßrõáƒõߍõߑõáĸõß­õßąõážõßČõßÎõßæõßûõßöß öáöß%öß)öá6öß@ößFößZößjößnöáö߉öߞöߊöß­öáēößÄößĘößâöß÷öß÷ß÷ß!÷ß2÷ß<÷ßB÷ßV÷ß\÷ßp÷á„÷ãš÷ãŽ÷á˛÷áÃ÷ßÍ÷ß×÷áė÷ß÷÷áû÷áøßøßøá øá1øß;øßAøáQøáUøáføßpøßvøáøá“øßøáĄøá˛øßŊøáÁøáÎøßØøßŪøáōøáūøáųáųßųß#ųá-ųß7ųá;ųáLųßXųágųákųá|ų߈ųá—ųá›ųáŦųßļųáĮųßŅųáâųßīųáķųáúßúáúá#úá4úßDúáYúßcúátúß~úáúߘúá§úáĢúáŧú߯úßĖúáÛúáßúáđúßûáûßûá0ûß:ûáKûßTûá_ûáiûáoûáuûáûá…ûá‹ûá‘ûáûáĄûá˛ûßŧûáĀûáŅûßÜûáāûáíûß÷ûßũûáüá*üß4üá8üáIüßTüáXüáeüßoüßuüá‰üá™üáüáŽü߸üáŧüáÍüߨüáÜüáéüßķüßųüáũáũá&ũß0ũáEũßPũáTũáaũßkũßqũá‰ũážũߨũáŊũßČũáŲũßãũßéũáūáūß ūá5ūß@ūáQūß[ūßaūáuūáūá‰ūáūãąūãžūãŌūãįūßņūã˙ß ˙ã˙ß*˙ã.˙á?˙ßI˙ßO˙á_˙ãc˙át˙ß~˙߈˙ã˙ßŖ˙ãŽ˙ãš˙ãË˙ßÕ˙ãŲ˙áę˙ßõ˙ãų˙áßßã*ã6ã:áKßUß_ãcátßãƒáßšß¤ã¨ášßÃßÉáŲãŨáîßøßūã ãß%ã)á:ßEãIáVß`ßfãzã†ãŠá›ßĨßĢáĩßŋãÃáÔßāãīãķáßãã#á4ß>ãOßYãjßwã{áŒß˜ã§ãĢáŧßĖãáßëãüßãß ã/ã3áDßNßTãcãgáx߈ãß§ã¸ßÂãĶßÜãįãņã÷ãũãã ããã%ã)á:ßDãHáYßdãháußß…ãã˛ßŧãĀáŅßÜãāáíß÷ßũãã!ã%á6ß@ãDáUß`ãdáqß{߁ã™ãáŽß¸ãÍߨãÜáéßķßųãã&ß0ãEßPãaßkßqã‰ãžß¨ãŊßČãŲßãßéãũãã'ã7ãGáQãez߄ߊžĸáŗßŊßÃÎÚŪáīßųũáßá*ß4ß:RVágßq†ß‘•áĸßŦ߲ËĪáāßęîá˙ß  á ß% ß+ C X ßb w ß‚ “ ߝ ßŖ ģ Đ ßÚ Ū áī ßú ū á ß ß 3 H ßR g ßr ƒ ߍ ß“ § ­ ˇ Á Č × į ã÷ ã ã ã' á1 ã< ßV Z ák ßu y አߕ Ļ ß° Á ßÎ ã ßí ßķ   á ß" ß( 9 = áN ßX ßb f áv ߀ ߊ Ÿ ßĨ ° ģ áË ßŅ á å áö ß á  á# ß- ß3 D H áY ßc ßm q ၠߋ ß• Ē ß° ģ Æ áÖ ßÜ ė ß ß&*á6ß@ßFW[álßv߀„áßšß¤šßŋĘÚŪáīßûá áß&ß,=AáRß\ßbáswáƒßß“¤¨ášßÃßÍŅááßëßõ ß&á6ß<LPáaßkoá{ß…‰á–ß ßώÖėøū -ã8ßBFáWßaeáqß{áŒß™áŽßšŊáÎߨčßōß ß(9ßHLá]ßgßmá~‚áŽß˜ßĸˇßÁŌßÜíßö áß&ß,á=AáMßWß]nrá‰ß“—áŖß­ßˇĖßŌŨíņáßá&ß0ß:>áOßVaáqß{á‹ß•ß›Ŧ°áÁßËĪáÛßåéáößßá,ß6KßVZágßqßw¤ßŽÃßÎßßéßī&<HRXbã‹ãĸãĻĐÔáåßīķáßá ß*ß0HLá]ßgká|߇‹á˜ßĸߨĀÕßßôß˙ßß 8W[áw{áˆß’ߘŦĘĐÖėãûããBáPßZßdháyßá‰ß“—á¨ß˛ļáĮßŌÖáãßíßķ *J[ßeßk§ŗžÍ9Ũãčßîãūáã9 á1ß;ßAáN9^9sß}߃9”9¤9¨ášßÃßÉáÖ9æ9ûßß 99,9AßKßQ9b9r9‡ß‘9Ąß§9ˇ9Ö9ė9ø9ū99:9E9Tdãtã„ã”ážã˛ÉoÔßÚīķáo ß#'á8ßBßLPá`ßjßt‰ßšĨáĩßģËĪáāßėáũá ßß.2áCßOá`dápßz߀‘•áĻ߲áÃĮáĶßŨßãôøá ß ß ! á1 ß; ßE Z ß` k v ᆠߌ œ   áą ßŊ áÎ Ō áŪ ßč ßî ˙ !á!ß !á1!5!áA!ßK!ßQ!b!f!áw!߃!á”!˜!á¤!ߎ!ß´!Å!É!áÚ!ßæ!á÷!û!á"ß"ß"(","á="ßI"áZ"^"áj"ßt"ßz"‹""á "ßŦ"áŊ"Á"áÍ"ß×"ßŨ"î"ō"á#ß ##á#ß*#.#á?#ßI#M#á^#ßi#m#áz#ß„#ߊ#ĸ#Ļ#áˇ#ßÁ#Ö#ßá#å#áō#ßü#ß$$/$ß9$I$ßO$_$t$ß~$‚$á“$ßž$ĸ$á¯$ßš$ßŋ$×$ė$ßö$ %ß%'%ß1%ß7%O%d%ßn%~%ß„%%–% %Ē%ĩ%Ä%įÛ%ãî%į&ß &ß&į'&į+&á7&ßA&ßG&įX&į\&ál&ßv&įz&á†&ߐ&į”&áĄ&ßĢ&ßą&įÂ&įā&įö&į'į'į'į&'é:'ãG'ã['éw'éŽ'é'éĄ'á˛'ßŧ'ßÂ'éÍ'éŅ'áâ'ßė'ßō'á(é(á(ß!(ß'(é2(éN(éR(án(ér(á(߉(ߏ(éŖ(é¯(éŗ(áÄ(ßÎ(ßÔ(áä(éč(áų(ß)ß )é)é )é$)á5)ß?)ßE)éT)éX)ái)ßs)éw)áˆ)ß“)é—)á¤)ߎ)ß´)éĖ)éĐ)áá)ßë)éī)á*ß *é*á*ß&*ß,*éD*éH*áY*ßc*ég*áx*߃*é‡*á”*ßž*ߤ*éŧ*éĀ*áŅ*ßÛ*éß*áđ*ßû*é˙*á +ß+ß+é4+é8+áI+ßS+éW+áh+ßs+éw+á„+ߎ+ß”+éŦ+é°+áÁ+ßË+éĪ+áā+ßë+éī+áü+ß,ß ,é$,é9,ßC,éG,áX,ßc,ég,át,ß~,ß„,éœ,éą,ßģ,éĐ,ßÛ,éė,ßö,ßü,é-é)-ß3-éH-ßS-éd-ßn-ßt-éŒ-éĄ-ßĢ-éĀ-ßË-éÜ-ßæ-ßė-é.é.ß#.é8.ßC.éT.ß^.ßd.é|.é‘.ß›.é°.ßģ.éĖ.ßÖ.ßÜ.éđ.éú.é/é/é"/ë6/ãC/ãW/ël/ßv/ë‡/ߍ/ë/ëĄ/á˛/ßŧ/ßÂ/ëÍ/ëŅ/áâ/ßė/ßō/á0ë0á0ß!0ß'0ë20ëN0ëR0án0ër0á0߉0ߏ0ëŖ0ë¯0ëŗ0áÄ0ßÎ0ßÔ0áä0ëč0áų0ß1ß 1ë1ë 1ë$1á51ß?1ßE1ëT1ëX1ái1ßs1ëw1áˆ1ß“1ë—1á¤1ߎ1ß´1ëĖ1ëĐ1áá1ßë1ëī1á2ß 2ë2á2ß&2ß,2ëD2ëH2áY2ßc2ëg2áx2߃2ë‡2á”2ßž2ߤ2ëŧ2ëĀ2áŅ2ßÛ2ëß2áđ2ßû2ë˙2á 3ß3ß3ë43ë83áI3ßS3ëW3áh3ßs3ëw3á„3ߎ3ß”3ëŦ3ë°3áÁ3ßË3ëĪ3áā3ßë3ëī3áü3ß4ß 4ë$4ë94ßC4ëG4áX4ßc4ëg4át4ß~4ß„4ëœ4ëą4ßģ4ëĐ4ßÛ4ëė4ßö4ßü4ë5ë)5ß35ëH5ßS5ëd5ßn5ßt5ëŒ5ëĄ5ßĢ5ëĀ5ßË5ëÜ5ßæ5ßė5ë6ë6ß#6ë86ßC6ëT6ß^6ßd6ë|6ë‘6ß›6ë°6ßģ6ëĖ6ßÖ6ßÜ6ëđ6ëú6ë7ë7ë"767ãC7ãW7l7ßw7Œ7ß’7Ą7ļ7ßĀ7߯7Õ7Ų7áę7ßô7ø7á 8ß88á%8ß/8ß58M8l8Œ88ß§8ß­8Á8Ë8Õ8ß8é8ķ8ũ899%999ãF9ãV9á`9ãt9x9á‰9ß“9—9á¨9ßŗ9ˇ9áÄ9ßÎ9ßÔ9ė9đ9á:ß ::á :ß+:<:ßF:ßL:e:z:ß„:™:ߤ:ĩ:ßŋ:ßÅ:Ũ:ü:;á; ;á-;ß7;ß=;Q;[;q;{;…;;š;Ž;Â;ãĪ;ãč;áō;ãũ;ß<ã<ß<-<ß3<K<`<ßj<{<߇<‹<áœ<ßĸ<ē<ž<áĪ<ßŲ<Ũ<áî<ßų<ũ<á =ß=ß=2=6=áG=ßQ=U=áf=ßq=u=á‚=ߌ=ß’=Ģ=¯=áĀ=ßĘ=Î=áß=ßę=î=áû=ß>ß >#>8>ß>>V>Z>ák>ßu>y>áŠ>ß•>™>áĻ>ß°>ßļ>Ë>áÕ>ãā>ßę>˙>ß?%?)?á:?ßD?H?áY?ßd?h?áu?ß?ß…?ž?ŗ?ßŊ?Ō?ßŨ?î?ßø?ßū?@@'@1@;@J@_@ßi@~@߉@š@ߤ@ß°@Å@ßĪ@ä@ßī@Aß AßA(AGAKAágAkAáxAß‚A߈AœAĻA°AēAÄAÎAØAâAėAöAB BBB(B2BPßHPßNPfP{Pß…PšPßĨPļPßĀP߯PÚPęP˙Pß QQßQ/QDQßNQ^QßdQpQvQQ•QĨQãĩQáŋQãĪQáâQßčQáōQãũQßR Rá"Rß,R0Rá@RßJRßTRiRßoRzR…Rá•Rß›RĢR¯RáĀRßĖRáŨRáRáíRß÷RßũRSSá#Sß/Sá@SDSáPSßZSß`SqSuSá†Sß’SáŖS§SáŗSßŊSßĮSÜSßæS÷SßTTßT,T0TáATßMTá^TbTánTßxTß~TT“Tá¤TߎT˛TáÃTßÎTŌTáßTßéTßīTU UáUß&U;UßFUJUáWUßaUßgU€U„Uá•Uß›UĒUŽUáŋUßÉUßĪUáāUäUáđUßúUßVV,VCV]VrVß|V€Vá‘VßœV Vá­VߡVßŊVÕVęVßôV WßW%Wß/Wß5WIWSWZWiW~W߈W˜WßžWŽWÃWßÍWŨWßãWīWõWX$XãDXãHXīrXīvXáXß—Xī›XáŦX߲XīŊXīÁXáØXßâXīæXáũXßYīYī-Yß3YīBYīYYßeYīiYázYß„YߎYī’YáĸYߨYīŗYīˇYáÃYßÍYīŅYáęYß÷Yī ZßZīZī#Zī)Zī4Zī8ZáHZßRZß]ZīaZáqZß{Zß…ZīšZߤZīĩZßŋZīĐZßŲZīčZīėZáüZß[ī [á[ß&[ī*[á7[ßA[ßG[ī_[īs[ß}[ī’[ߝ[īŽ[߸[ßž[īÖ[īę[ßđ[īû[ī\ī\ī\ī#\ī9\ãW\k\ãx\ãˆ\á’\ãŖ\ãŽ\ß´\ãÉ\Ū\ßč\ßî\]]á]ß]ß#]4]8]áO]ßY]]]ám]ßw]߁]–]ßœ]§]˛]áÂ]ßČ]Ø]Ü]áí]ßų]á ^^á^ß$^ß*^;^?^áP^ßZ^ß`^ám^}^^á’^ßœ^ßĸ^á¯^ŋ^Ã^áÔ^ßŪ^ßä^áõ^ų^á_ß_ß_._ß8_I_ßS_d_ßm_~_‚_á“_ߝ_Ą_á˛_ßŊ_Á_áÎ_ߨ_ßä_č_áų_ß˙_á`&`ß0`ß6`G`W`[`ák`ßu`ß{`áˆ`˜`˛`߸`É`Ų`í`ß÷`ßũ`aa"aá2aßdBdáSdß]dadárdß}ddáŽdߘdßžd¸dÍdß×dėdß÷deßeße.eá8eãCeßMeQeábeßlepeáeß‹eß‘e¨eŦeášeßÅeÚeßäeßęeûe ffá fß*fß0fá=fMfQfábfßlfßrfáff“fá¤fߎfß´fáÁfŅfÕfáæfßđfßöfág gágß!gß+g@gßJg[gßegvgßgg¯gŗgáĪgĶgáđgúgh9hNhßXhmhßxh‰hß“hß™hąhÆhßĐhÔháåhßđhôháiß ißi+i@ißJißPiaiqiuiá†iߐiß–iáŖiŗiˇiáČißŌiߨiáéiíiáųißjß j"jß,j=jßGjXjßajrjvjá‡jß‘j•jáĻjßąjĩjáÂjßĖjߨjÜjáíjß÷jßũjá kkká/kß9kß?káLk\k`káqkß{k߁ká’k–káĸkßŦkßļkËkßÕkækßđklß lllá0lß:l>láOlßZl^láklßul߁l–lß l¤láĩlßĀlÄláŅlßÛlßįlülßm mámß&m*má7mßAmßMmbmßlmpmámߌmmámß§mßŗmˇmáČmßŌmÖmáįmßōmömánß nßn+n@nßJnZnßdnunßnß…n–nšnáĢnßĩnĘnßÕnŲnáænßđnßöno#oß-o=oßCoSohoßro‡oß’oŖoß­oßŗoĖoáoßëopß ppß&pß,p@pJpPpopypƒpĸpÁpĮpŅp×pöpũpq"qãBqãRqálqãwqß}qãˆqߎqáŦq°qáÁqßËqßŅqáâqæqáōqßüqßrrrá(rß2rß8ráIrMráYrßcrßmrqrárß‹rß•rĒrß´rÅrßĪrārßérørürá sßssá+sß6s:sáGsßQsßWsosƒsߍsĸsß­sžsßČsßÎsâsķs÷sátßtßtá)t-tá9tßCtßItZt^táotßytßtát”tá tßĒtß°tÁtÅtáÖtßātßętîtáútßußu#uß)u4uDuHuáYußeuávuzuá†uߐuß–u§uĢuáŧu߯uĘuáÛußæuęuá÷ußvßv v5vß?vOvßUvevzvß„v™vߤvĩvßŋvßÅvÚvāvęvôv˙váw2w߆N†R†ác†ßm†ßs†á€††”†áĨ†ß¯†ßĩ†á†Ō†į†ßņ†‡ß‡‡‡á,‡ß6‡:‡áK‡ßV‡Z‡ág‡ßq‡ßw‡‡¤‡ßއÇß·߇ßé‡ßī‡ˆˆß&ˆ6ˆß<ˆHˆZˆßdˆtˆßzˆ†ˆ˜ˆßĸˆ˛ˆß¸ˆĈʈЈڈäˆīˆá ‰‰á"‰ß,‰ß2‰á?‰O‰S‰ád‰ßn‰ßt‰á‰‘‰•‰áωß°‰ßļ‰áÉ͉׉áč‰ßō‰ßø‰áŠŠŠá*Šß4Šß:ŠáGŠWŠ[ŠálŠßvŠß|Šá‰Š™ŠŠáފ߸ŠßžŠáˊۊđŠßúŠ ‹ß‹ ‹$‹á5‹ß?‹C‹áT‹ß_‹c‹áp‹ßz‹ß€‹˜‹­‹ßˇ‹Ė‹ß׋č‹ßō‹ßø‹Œ%Œß/Œ?ŒßEŒQŒcŒßmŒ}ŒßƒŒŒ̌ÁŒ͌͌،ãŒíŒ÷Œ !+5?IS]gvŠã—ã§ãˇáÁãĖß֍ڍáíløüá ŽlŽ"Žã-Žß7Ž;ŽáLŽßRŽ]ŽgŽvŽzŽá‹Žß‘ލŽŊŽßĮŽ؎ßäŽčŽáųŽß˙Žá+ß59áJßUYáfßpßvŽ’áŖß­ß͏ŅáŪßčßß%:ßEVß`ßf~ĄáŊÁáΐßؐßېōü‘‘‘$‘.‘8‘B‘L‘V‘a‘u‘•‘ãĨ‘ãĩ‘áŋ‘ãʑßԑé‘ßķ‘ßų‘’’á’ß(’ß.’?’C’áT’ß^’ßh’l’á|’߆’ߐ’Ĩ’ßĢ’ļ’Á’áŅ’ßגį’ë’áü’ß“ “á“ß “$“á1“ß;“ßA“R“q“‡““““Ŗ“Ž“Ŋ“͓ãؓßŪ“áč“ãø“ã ”#”_.”ß4”I”M”á[”_f”ßl”}””ᒔߜ”ßĸ”áļ”ßŧ”Į”֔ë”ßõ”•ß ••á*•ß4•8•áI•ßS•W•ád•ßn•r•á•ߌ••ᥕߧ•ļ•ē•á͕ßĶ•áä•č•áô•ßū•ß–––á+–ß5–9–áE–ßK–[–_–áp–ßz–~–Ꮦߚ–ž–áĢ–ßĩ–ßģ–Ԗé–ßķ–—ß—$—ß.—ß4—L—a—ßk—{—߁——Š—ŋ—˗Ņ—ۗá—ė—ö—˜˜ã%˜ã5˜á;˜ãK˜ãV˜ß`˜u˜ß{˜Š˜Ž˜áŸ˜ßИ­˜áž˜ßɘ͘áژßä˜ßę˜ū˜™.™ã>™ãN™áT™ãd™ão™ßy™}™áޙߔ™Ŗ™§™á™ƙáâ™æ™áķ™ßũ™ßšš7šGšãWšãgšáqšãšãŒšß’šãϚǚáģšßÁšКԚáåšßīšßõšá› ›á›ß ›ß&›7›;›áL›ßV›ß\›ám›q›á}›ß‡›ß‘›Ļ›ß°›Á›ß˛ܛßå›ö›ú›á œßœœá%œß/œ3œá@œßJœßPœaœeœávœß€œ„œá•œß œ¤œáąœßģœßÁœ؜Ũœáîœßøœßūœá á0ß:>áOßZ^ákßuß{”˜áŠßŗˇáÝßɝŲîßøžßžž3žß=žRžß]žnžßxžß~ž–žĢžßĩžšžáʞß՞ŲžáæžßđžßöžŸ.ŸDŸPŸnŸtŸ~Ÿ„ŸŽŸ˜ŸŖŸ˛Ÿ͟ןáįŸßņŸõŸá ß   á ß& ß, = [ q } ƒ  — Ļ ļ ãĘ Πáß ßé ßķ ÷ áĄßĄßĄá)Ą-Ąá9ĄßCĄßMĄQĄáaĄßkĄßuĄŠĄß”ĄĨĄß¯ĄĀĄßÉĄØĄÜĄáėĄßöĄúĄá ĸßĸĸá'ĸß1ĸß7ĸOĸcĸßmĸ‚ĸߍĸžĸߨĸߎĸÂĸĶĸ×ĸáčĸßōĸßüĸŖßŖ,Ŗß8Ŗ<ŖáMŖßWŖßaŖvŖß|Ŗ‡Ŗ–ŖšŖáĢŖßĩŖšŖáĘŖßÕŖŲŖáæŖßđŖßöŖ¤%¤ß/¤L¤ßX¤m¤ßw¤Œ¤ß—¤¨¤ß˛¤ß¸¤Τؤâ¤ņ¤ĨßĨ Ĩß*Ĩ;ĨßEĨßKĨ\ĨqĨß{Ĩ‹Ĩß‘ĨĨ¨ĨŦĨáŊĨßĮĨËĨáØĨßâĨæĨáķĨßũĨßĻ ĻáĻß&Ļ;ĻßFĻJĻáWĻßaĻßgĻ{Ļ…Ļ–ĻĢĻßĩĻÆĻßĖĻØĻâĻčĻüĻ §ã§ã,§ã<§ãL§ã\§áz§‘§_œ§ßĸ§ˇ§ģ§áɧ_Ô§ßÚ§ë§ī§á¨ß ¨ß¨¨á(¨ß2¨ß<¨Q¨ßW¨b¨m¨á}¨ßƒ¨“¨¨¨ß˛¨ßŧ¨ͨßרßŨ¨í¨ņ¨áŠß ŠßŠá#Š'Šá3Šß=ŠßCŠTŠXŠáoŠßuŠá†ŠŠŠáœŠßĻŠĒŠáÁŠÅŠáØŠÜŠáîŠ˙ŠĒßĒß$Ē9Ē=ĒáIĒßSĒßYĒjĒnĒáĒ߉ĒߓǗĒá§ĒßąĒßģĒĐĒßÖĒáĒėĒáüĒßĢĢ'Ģß1Ģß7ĢLĢPĢá\ĢßfĢßlĢ}Ģ’ĢßĸĢŗĢßŋĢĪĢĶĢáäĢßîĢßôĢáŦ ŦáŦßŦß%Ŧ6Ŧ:ŦáQŦßWŦáhŦlŦá~Ŧ߈ŦŒŦáŖŦ§ŦáēŦžŦáĐŦáŦåŦáöŦß­ß ­­á­ß)­ß/­á@­D­áP­ßZ­ßd­h­áx­ß‚­ßŒ­Ą­ßĢ­ŧ­ßÆ­×­ßā­ī­ķ­áŽß ŽŽá"Žß-Ž1Žá>ŽßHŽßNŽfŽzŽß„Ž™Žß¤ŽĩŽßŋŽßÅŽŲŽęŽîŽá˙Žß ¯ ¯á¯ß#¯'¯á4¯ß>¯ßD¯U¯j¯ßt¯„¯ßН–¯œ¯̝¯¯áßƝίáÛ¯ßå¯é¯áö¯ß°ß °°á°ß)°>°ßI°M°áZ°ßd°ßj°~°ˆ°™°ް߸°ȰßŌ°ã°ßí°ßķ°ąąß#ą3ąß9ąIą^ąßhąyąßą‹ą‘ą›ąĸąģąËąãÛąãëąãûąã˛˛á$˛ß.˛2˛áC˛ßN˛R˛á_˛ßi˛ßo˛‡˛‹˛áœ˛ßϞģ˛ßÆ˛ʲáײßá˛ßį˛˙˛ŗßŗ3ŗß>ŗOŗßYŗß_ŗwŗ–ŗšŗáļŗēŗáĮŗßŅŗß×ŗëŗõŗ˙ŗ ´´´,´<´ãL´ã\´ãl´ã€´„´á•´ßŸ´Ŗ´á´´ßŋ´ôáĐ´ßÚ´ßā´ø´ü´á ĩßĩ,ĩß7ĩ;ĩáHĩßRĩßXĩpĩ…ĩߏĩ¤ĩ߯ĩĀĩßĘĩßĐĩčĩļ ļá'ļ+ļá8ļßBļßHļ\ļfļpļzļ„ļŽļļ­ļãŊļãÍļãŨļãņļõļáˇßˇˇá%ˇß0ˇ4ˇáAˇßKˇßQˇiˇmˇá~ˇßˆˇˇß¨ˇŦˇášˇßÃˇßɡáˇöˇß¸¸ß ¸1¸ß;¸ßA¸Y¸x¸|¸á˜¸œ¸áЏßŗ¸ßš¸͸׸á¸ë¸õ¸˙¸š%šã2šá<šãQšUšáfšßpšßzš’šßžšŗšßžššáĶšßŨšßįšëšáēßēáēēá/ēß9ē=ēáTēXēákēoēáē’ē–ēá§ēßąēßģēĐēßÚēëēß÷ēûēá ģßģ1ģß7ģBģQģUģáfģßpģtģá…ģߐģ”ģáĄģßĢģßąģÉģÍģáŪģßčģėģáŧßŧ&ŧß0ŧEŧßPŧaŧßkŧßqŧ…ŧŧ™ŧ¨ŧŊŧßĮŧ×ŧßáŧōŧßüŧßŊŊ(Ŋß2ŊBŊßHŊTŊ[ŊoŊ‚ŊŊ°ŊãēŊããŊãíŊãžã žãIžãSžã|žã†žã¯žãšžãâžãėžãŋãŋã6ŋFŋãVŋãfŋãvŋã†ŋã–ŋãĻŋá°ŋãģŋßÅŋÚŋßåŋéŋáúŋßĀßĀĀá#Āß-Āß3ĀáDĀHĀáTĀß^ĀßdĀuĀyĀáŠĀß”Ā˜Āá¤ĀßĒĀēĀĪĀßŲĀéĀßīĀûĀÁÁÁá%Áß/Áß9Á=ÁáNÁßXÁß^ÁáoÁsÁáÁ߉ÁߏÁ Á¤ÁáĩÁßŋÁÃÁáĪÁßÕÁåÁúÁßÂÂßÂ&Â,Â;Â?ÂáPÂßZÂßdÂhÂáyÂ߃Â߉ÂášÂžÂáĒÂß´ÂßēÂËÂāÂßęÂúÂßÃÃ%Ãß/Ã?ÃßEÃQÃWÃfÃjÃá{Ãß…ÃߏÓÃáĒÃß°ÃáÁÃÅÃáŅÃßÛÃßáÃōÃÄßÄ!Äß'Ä7ÄLÄßVÄfÄßlÄxÄ~čđÄáĸÄßŦÄßļÄēÄáËÄßÕÄßÛÄáėÄđÄáüÄßÅß ÅÅ!Åá2Åß<Å@ÅáLÅßRÅbÅwÅ߁őÅß—ÅŖÅŠÅ¸ÅŧÅáÍÅß×ÅßáÅåÅáöÅßÆßÆáÆÆá'Æß1Æß7ÆHÆ]ÆßgÆwÆß}ƍÆĸÆßŦÆŧÆßÂÆÎÆÔÆãÆįÆáøÆßĮß ĮĮá!Įß+Įß1ĮáBĮFĮáRĮß\ĮßbĮsĮˆĮß’ĮĸĮߨĮ¸ĮÍĮß×ĮįĮßíĮųĮ˙ĮČČá#Čß-Čß7Č;ČáRČßXČáiČmČáyČ߃Čß‰ČšČ¯ČßšČÉČßĪČßČôČßūČÉßÉ É&É5É9ÉáJÉßTÉß^ÉbÉásÉß}É߃Éá”ɘÉá¤ÉߎÉß´ÉÅÉÚÉßäÉôÉßúÉ ĘĘß)Ę9Ęß?ĘKĘQĘ`ĘdĘáuĘßĘß‰ĘĘážĘߨĘߎĘáŋĘÃĘáĪĘßŲĘßßĘđĘËßËËß%Ë5ËJËßTËdËßjËvË|ˋˏËá ËßĒËߴ˸ËáĪËßÕËáæËęËáöËßĖßĖĖ,Ėß6ĖFĖßLĖ\ĖqĖß{Ė‹Ėß‘ĖĖŖĖ˛ĖļĖáĮĖßŅĖßÛĖßĖáđĖßúĖßÍáÍÍá!Íß+Íß1ÍBÍWÍßaÍqÍßw͇͜ÍßĻÍļÍßŧÍČÍÎÍŨÍáÍáōÍßüÍßÎ ÎáÎß%Îß+Îá<Î@ÎáLÎßVÎß\Îm΂ÎߌΜÎßĸβÎĮÎßŅÎáÎßįÎķÎųÎĪ ĪáĪß'Īß1Ī5ĪáLĪßRĪácĪgĪásĪß}ĪßƒĪ”ĪŠĪßŗĪÃĪßÉĪŲĪîĪßøĪĐßĐĐ Đ/Đ3ĐáDĐßNĐRĐá_ĐßeĐuĐŠĐß”ĐĨĐßĢСĐÁĐËĐÕĐßĐéĐķĐũĐŅ ŅŅ2ŅãeŅãoŅã†Ņö•ŅãŸŅã¯ŅãŋŅãĪŅãßŅáŌãŌã)Ōö-Ōá>ŌßHŌßRŌöVŌágŌßqŌö†Ōß‘Ōö•ŌáĸŌߎŌö˛ŌáÃŌßÍŌöâŌßíŌöūŌß ĶöĶáĶß%Ķß+Ķá5Ķß?ĶßIĶöMĶá^ĶßiĶömĶázĶ߈ĶöŒĶáĶß§ĶßąĶöĩĶáÆĶßĖĶö×ĶöÛĶáōĶßüĶöÔáÔßÔö,Ôö0ÔáGÔßMÔö\ÔösÔßÔöƒÔá”ÔßžÔߨÔöŦÔáŧÔßÂÔöÍÔöŅÔáŨÔßįÔöëÔáÕßÕö&Õß,Õö3Õö=ÕöCÕöNÕöRÕácÕßmÕßwÕö{Õá‡Õß‘Õß—ÕáĄÕߎÕö˛ÕáÃÕßÍÕßĶÕöâÕöæÕá÷ÕßÖß ÖöÖá Öß&Öö1Öö5ÖáLÖßVÖöZÖáqÖßwÖö†ÖöŠÖáĄÖß§ÖöļÖöÍÖßŲÖöŨÖáîÖßøÖß×ö×á×ß×ö'×ö+×á7×ßA×öE×á^×ßk×ö€×߆×ö×ö—×ö×ö¨×öŦ×áŊ×ßĮ×ßŅ×öÕ×áá×ßë×ßņ×áû×ߨö ØáØß'Øß-Øö<Øö@ØáQØß[ØßeØöiØázØß„ØßŠØá›ØöŸØáĢØßĩØßģØöĖØöáØßëØöûØßŲöŲö&Ųß0Ųö@ŲßFŲöRŲöXŲögŲökŲá|Ų߆ŲߐŲö”ŲáĨŲ߯ŲßĩŲáÆŲöĘŲáÖŲßāŲßæŲö÷ŲöûŲá ÚßÚöÚá&Úß,Úö<ÚöQÚß[ÚökÚßqÚö}ÚöƒÚö’Úö–Úá§ÚßąÚßģÚöŋÚáĐÚßÚÚßāÚáņÚöõÚáÛß ÛßÛö"Ûö7ÛßAÛöQÛßWÛögÛö|Û߆Ûö–ÛßœÛö¨ÛöŽÛöŊÛöÁÛáŌÛßÜÛßæÛöęÛáûÛßÜß ÜáÜö Üá,Üß6Üß<ÜöMÜöbÜßlÜö|Üß‚Üö’Üö§ÜßąÜöÁÜßĮÜöĶÜöŲÜöčÜöėÜáũÜßŨö ŨáŨßŨö.Ũö2ŨáCŨßMŨöQŨábŨßmŨöqŨá~Ũ߈ŨߎŨö¨ŨöŦŨáŊŨßĮŨöÜŨßįŨöëŨáøŨßŪßŪö"Ūö&Ūá7ŪßAŪöEŪáVŪß`ŪödŪátŪß~Ūö“ŪßžŪöĸŪá¯ŪßšŪßŋŪöŲŪöéŪßīŪöûŪö˙Ūáßß ßö$ßá;ßßFßö]ßßißömßázß߀ßöŒßößáĄßßĢßö¯ßáĀßßĘßöÎßáŪßßčßöũßßāö āáāß#āß)āöCāöSāßYāöeāöiāá€āߊāöŽāáĨāß°āö´āáĮāßĶāö×āáäāßęāööāö áßáö&áß,áö<áöQáß[áöpáß{áöŒáß–áßœáöĩáöĘáßÔáöéáßôáöâßâßâö*âö4âö>âöHâöRâö\âöfâöpâözâö€âöŠâöâö—âöĄâö°âĀâãĐâãāâãđâããããã/ããaãeãávã߀ãߊãŽãáŸãߊã߯ãáĀãÄãáĐãßÚãßāãņãäßä äß&ä6äKäßUäeäßkäwä}äŒääáĄäßĢäßĩäšäáĘäßÔäßÚäáëäīäáûäßåß åå åá1åß;å?åáKåßQåaåvå߀ååß–åĸå¨åˇåģåáĖåßÖåßāåäåáõåß˙åßæáææá&æß0æß6æGæ\æßfævæß|æŒæĄæßĢæģæßÁæÍæĶæâæææá÷æßįß įįá įß*įß0įáAįEįáQįß[įßaįrį‡įß‘įĄįß§įˇįĖįßÖįæįßėįøįūį ččá"čß,č0čá=čßGčKčáXčßbčßlčpčáčß‹ččá čßĢč¯čáŧč߯čßĖčāčęčûč˙čáéßé/éß:é>éáKéßUéß[éséwéáˆéß’é§é߲éļéáÃéßÍéßĶéëéęß ęęß*ę;ęßEęßKęcęxęß‚ę“ęß™ęŠęžęßČęĖęáŨęßčęėęáųęßëß ëë'ë1ë;ëEëOëYëcëmësë}ëžëã¨ëãŋëĪëãßëãėėá&ėß0ėß:ė>ėáOėßYėß_ėápėtėá€ėߊėߐėĄėĨėáļėßĀėÄėáĐėßÖėæėíí'í-í<í@íáQíß[íßeíiíázíß„íߊíá›íŸíáĢíßĩíßģíĖíáíßëíûíßîî&îß0î@îßFîRîXîgîkîá|î߆îߐî”îáĨî߯îßĩîáÆîĘîáÖîßāîßæî÷îûîá īßīīá&īß,ī<īQīß[īkīßqī}īƒī’ī–īá§īßąīßģīŋīáĐīßÚīßāīáņīõīáđß đßđ"đ7đßAđQđßWđgđ|đ߆đ–đßœđ¨đŽđŊđÁđáŌđßÜđßæđęđáûđßņß ņáņ ņá,ņß6ņß<ņMņbņßlņ|ņß‚ņ’ņ§ņßąņÁņßĮņĶņŲņčņėņáũņßō ōáōß"ō&ōá3ōß=ōßGōKōá\ōßfō{ō߆ōŠōá—ōߥōß§ōģōÅōÖōëōßõōķß ķķ"ķ,ķ6ķ@ķJķTķZķdķ…ķãķãĻķļķãÆķãøķüķá ôßôß!ô%ôá6ôß@ôßFôáWô[ôágôßqôßwôˆôŒôáôß§ôĢôáˇôßŊôÍôėôõõõ#õ'õá8õßBõßLõPõáaõßkõßqõá‚õ†õá’õßœõßĸõŗõČõßŌõâõßčõøõ ößö'öß-ö9ö?öNöRöácößmößwö{öáŒöß–ößœöá­öąöáŊößĮößÍöŪöâöáķößũö÷á ÷ß÷#÷8÷ßB÷R÷ßX÷d÷j÷y÷}÷áŽ÷ߘ÷ßĸ÷Ļ÷áˇ÷ßÁ÷ßĮ÷áØ÷Ü÷áč÷ßō÷ßø÷ øøß(ø8øß>øNøcøßmø}øßƒøø•ø¤ø¨øášøßÃøßÍøŅøáâøßėøßōøáųųáųßųß#ų4ųIųßSųcųßiųyųŽųߘų¨ųߎųēųĀųĪųĶųáäųßîųōųá˙ųß ú úáúß$úß.ú2úáCúßMúbúßmúqúá~ú߈úߎúĸúŦúŊúŌúßÜúíúßķú˙ú ûûû'û1û;ûAûKûaûãnûã’ûãœûãŗûÂûãĖûã×ûßŨûãíûãũûã üãüá'üã2üß8üãMüQüábüßlüßvüzüá‡üß‘üß—ü§üĢüáŧü߯üßĐüÔüáåüßīüßõüáũ ũáũß ũß&ũ7ũLũßVũfũßlũ|ũ‘ũß›ũĢũßąũŊũÃũŌũÖũáįũßņũßûũ˙ũáūßūß ūá1ū5ūáAūßKūßQūbūfūáwū߁ū…ūá‘ūß—ū§ūÆūÜūčūîūũū˙á˙ß˙ß&˙*˙á;˙ßE˙ßK˙á\˙`˙ál˙ßv˙ß|˙˙‘˙áĸ˙ßŦ˙°˙áŧ˙ßÂ˙Ō˙į˙ßņ˙ß(,á=ßGßQUáfßpßvᇋá—ߥߧ¸Íß×įßíũß,ß2>DSWáhßrß|€á‘ߛߥá˛ļáÂßĖßŌãøßß(=ßGWß]io~‚á“ߝĄáŽß¸ŧáÉßĶßŨááōßüß á-ß7ß=Q[lß‹œßĸޏÂĖÖāęôū&,7P`ãpã€ã‹ß‘ãœßĸŋĪãßãīãúßã ß.=ãGãRßXãhãxãˆã˜áĸã­ßŗãČĖáŨßįßņ ßß2ß<MßWhßq…á–ß ßĒŽáŋßÉßĪáāäáđßúß&ß0@ßFVu‹—Ŧ°áÁßËßÕŲáęßôßúá áß%ß+<@áQß[_ákßq–ß °ßļÂČ×Ûáėßöß  á ß ß% á6 : áF ßP ßV g k á| ߆ Š á– ßœ Ŧ Á ßË Û ßá í ķ   á ß! ß+ / á@ ßJ ßP áa e áq ß{ ߁ ’ § ßą Á ßĮ × ė ßö  ß   - 1 áB ßL ßV Z ák ßu ß{ ጠ ᜠßĻ ßŦ Ŋ Ō ßÜ ė ßō   ß! 1 ß7 C I X \ ám ßw { ሠߒ – áŖ ß­ ߡ ģ áĖ ßÖ ë ßö ú á ß ß + 5 F [ ße v ß| ˆ ’ œ Ļ ° ē Ä Î Ø â ė ö *:ãJãZãjãzĄąãÁãŅãáãņ#ãDúSã]ãmã}ããáÁãŌãįúëáüßßúá%ß/ú@ßLúaßkú|߈ú™ßŖßŠúˇßÁßËúāßëúüß úáß)ß3ú7áHßNúYú]átß~ú‚á™ßŸúŽú˛áÉßĪúŪúõßúáß ß*ú.á>ßDúOúSá_ßiúmá†ß“ú¨ßŽúĩúŋúÅúĐúÔáåßīßųúũá ßßá#ß0ú4áEßOßUúdúháy߃ߍú‘áĸߨúŗúˇáÎߨúÜáķßųúú á#ß)ú8úOß[ú_ápßzß„úˆá˜ßžúŠú­ášßÃúĮáāßíúßúúúú*ú.á?ßIßSúWácßmßsá}ߊúŽáŸßŠß¯úžúÂáĶßŨßįúëáüßß áú!á-ß7ß=úNúcßmú}߃ú“ú¨ß˛úÂßČúÔúÚúéúíáūßßúá'ß1ß7áHúLáXßbßhúyú}áŽß˜úœá¨ßŽúžúĶßŨúíßķú˙úúúá)ß3ß=úAáRß\ßbásúwáƒßß“ú¤úšßÃúĶßŲúéúūßúßú*ú0ú?úCáTß^ßhúlá}߇ߍážúĸáŽß¸ßžúĪúäßîúūßúú)ß3úCßIúUú[újúná߉úášß ú°ú´áÅßĪúĶáäßīúķáß ßú*ú.á?ßIú^ßiúmáz߄ߊú¤ú¨ášßÃúĮáØßâúæáößúß ú$á1ß;ßAú[úkßqú}úá˜ßĸúŊßČúĖáßßëúīáüßúúá#ß-ú1áBßLúPá`ßjúߊúŽá›ßĨßĢúÅúÕßÛúįúëáß úá'ß2úIßUúYáfßlúxúß—ú¨ßŽúžúĶßŨúōßũúßßú7úLßVúkßvú‡ß‘ß—úŦúļúĀúĘúÔúŪúčúōúüú ú ú ú ú# ú2 B ãR ãb ãr ã‚ Ŗ ã­ ãÄ Ķ ãŨ ãč ßî ãū ã!ã!ã.!á8!ãC!ßI!ã^!b!ás!ß}!߇!Ÿ!ߊ!ßŗ!Č!ßŌ!ã!ßí!ū!ß"""á,"ß6"ß@"D"áU"ß_"ße"áv"z"á†"ߐ"ß–"§"ŧ"߯"Ö"ßÜ"ė"#ß ##ß!#-#3#B#F#áW#ßa#ßk#€#ߊ#š#ß #°#Å#ßĪ#ß#ßå#ņ#÷#$$$á%$ß/$ß9$=$áN$ßX$ß^$áo$s$á$߉$ߏ$ $¤$áĩ$ßŋ$Ã$áĪ$ßÕ$å$%%&%,%;%?%áP%ßZ%ßd%h%áy%߃%߉%áš%ž%áĒ%ß´%ßē%Ë%Ī%áā%ßę%î%áú%ß&&%&ß/&?&ßE&Q&W&f&j&á{&ß…&ߏ&“&á¤&ߎ&ß´&áÅ&É&áÕ&ßß&ßå&ö& 'ß'%'ß+';'P'ßZ'j'ßp'|'‚'‘'•'áĻ'ß°'ßē'Ī'ßŲ'é'ßī'˙'(ß(.(ß4(@(F(P(_(c(át(ß~(߈(Œ(á(ß§(ß­(áž(Â(áÎ(ߨ(ßŪ(ī()ß))ß$)4)I)ßS)c)ßi)u){)Š)Ž)áŸ)ߊ)­)áē)ßÄ)Č)áÕ)ßß)ßé)í)áū)ß**ß(*,*á9*ßC*ßI*]*g*x**ß—*¨*ߎ*ē*Ä*Î*Ø*â*ė*ö*+ +++$+/+H+X+ãh+ãx+ãˆ+ã˜+ŋ+Ī+ãß+ãī+ã˙+ã,=,ãJ,ã\,k,ãu,ã€,߆,ã–,ãĻ,ãļ,ãÆ,áĐ,ãÛ,ßá,ãö,ú,á -ß-ß-*-.-á?-ßI-ßS-W-áh-ßr-ßx-á‰--á™-ßŖ-ߊ-ē-Ī-ßŲ-é-ßī-˙-.ß...ß4.@.F.U.Y.áp.ßz..ß™.Š.߯.ŋ.Ū.ô.////#/á4/ß>/ßH/L/á]/ßg/ßm/á~/‚/áŽ/ߘ/ßž/¯/ŗ/áÄ/ßÎ/Ō/áŪ/ßä/ô/ 0ß0#0ß)050;0J0N0á_0ßi0ßs0w0áˆ0ß’0ߘ0áŠ0­0áš0ßÃ0ßÉ0Ú0Ū0áī0ßų0ũ0á 1ß1141ß>1N1ßT1`1f1u1y1áŠ1ß”1ßž1ĸ1áŗ1ßŊ1ßÃ1áÔ1Ø1áä1ßî1ßô122ß$242ß:2J2_2ßi2y2ß2‹2‘2 2¤2áģ2ßÅ2Ú2ßä2ô2ßú2 33ß)393ß?3K3Q3[3j3n3á3߉3ß“3—3á¨3߲3߸3áÉ3Í3áŲ3ßã3ßé3ú34ß4)4ß/4?4T4ß^4n4ßt4€4†4•4™4áĒ4ß´4¸4áÅ4ßĪ4Ķ4áā4ßę4ßô4ø4á 5ß5(5ß3575áD5ßN5ßT5h5r5ƒ5˜5ßĸ5ŗ5ßš5Å5Ī5Ų5ã5í5÷56 666)6/6:6S6c6ãs6ãƒ6ãŽ6ß”6ãŸ6ßĨ6Â6Ō6ãâ6ãō6ãũ6ß7ã7ß717ã57ū_7ūc7át7ß~7ū‚7á“7ߝ7ūĄ7á˛7ßŧ7ūĀ7áŅ7ßŨ7ūė7ūđ7á8ß 8ū8ū"8ū(8ū.8ū88ūC8ūG8áX8ßb8ūf8áw8ß‚8ū†8á“8ߝ8ßŖ8ūģ8ūŋ8áĐ8ßÚ8ūī8ßú8ūū8á 9ß9ß9ū39ūR9ūV9ár9ūv9áƒ9ߍ9ß“9ūĢ9ūÆ9ūæ9ū÷9ß:ß:ū:ū':ū1:ūN:ãm:ãv:ã€:ã:ãš:ãĮ:ãí:ã;ã;ã;ã%;ã1;ã?;ãQ;e;ãr;ã’;áœ;ã°;´;áÅ;ßĪ;ßŲ;ßã;į;áķ;ßũ;ß<ß<<á!<ß+<ß5<J<ßT<i<ßt<…<ߏ<ß•<Š<¯<ŧ<Ā<áŅ<ßÛ<ßå<ú<ß==ß$=5=ß?=ßE=Y=_=j==߉=ß™=Ē=ß´=ßÄ=Õ=ßß=ßë=ų=ß>>ß>ß*>8>ßB>S>ß]>ßg>|>߆>ߌ>›>Ŧ>ßļ>ßŧ>Ō>Ö>áį>ß÷>û>á ?ß?'?+?á8?ßD?T?X?ái?ßs?w?áˆ?ß’?–?á§?߲?ļ?áÃ?ßÍ?ßĶ?ë?ī?áü?ß@@ß&@*@á7@ßA@ßG@\@c@ám@ãz@ã…@ß‹@ã–@ßœ@ã§@ßą@ĩ@áÆ@ßĐ@ßÚ@ßā@áę@ßô@A'Aß:A>AáUAß`AdAáuA߁Aá‹A›AßĢAģAßÅAßĪAßÕAįAëAáüAßBßBßBBá*Bß4Bß>BßHBLBáXBßbBßlBBß‹B BßĢBŧB߯BßĖBāBæBķB÷BáCßCß(C,Cá?CßOCßYC]CájCßzC߀CáŠCß”C˜Cá¤Cß´CßēCáÄCßÎCŌCáâCßėCßöCúCáDßD+Dß5DJDßUDfDßpDßvDŠDDœDļDßŧDĘDāDßęDîDáúDßE EEE2E6EáMEßWEßgEkEá~E߈EߘEœEáŠEßŗEßŋEáÉEßĶE×EáãEßíEßųEáFß FFá'Fß1F5FáGFßQFfFßpF…FߐFĄFßĢFßąFÅFËF×FëFßõFßûF GGß#Gß-G1Gá=GßCGMGWGaGuGyGáGßšGߤG¨GáŧGáÆGĘGáÜGßæGęGáöGßHHáHßHHá/Hß9H=HáNHßXHß^HvH‡Hß“H—Há¤HߎHÃHßÎHŌHáßHßéHßīHI/Iß5ICI_IßiI…Iß‹IIĄIážIßÄIáÎIęIßôIJßJ(JCJßMJcJßiJuJœJ´JÂJØJßâJæJáōJßøJK KK!K+K5K@KJKiKãƒKã‡KąKĩKáÆKßĐKåKßđKôKáLß LßL%L/LLLãVLãcLãpLã}LãŠLã—LãŗLãˇLMMá#Mß-Mß8MSßHSLSáYSßcSßmSqSá‚SߌSSáĄSßŦS°SáŊSßĮSßÍSáSëSûS˙SáTßTTá+Tß5Tß?TCTáTTß^TsTß~T‚TáTß™TߟTŗTŊTÍTŅTáâTßėTUß UUáUß'Uß-UEUIUáZUßdUyUß„UˆUá•UߟUßĨUŊUÁUáŌUߨUįUüUßVVß&V7VßAVßGV_VtVß~V“VßžV¯VßšVßŋV×VėVßōVũVW WAWãKWãZWã^WWšWߤWÁWßËWÜWßâWčWųWũWáXßXXá)Xß3XIXßSXßYXgX}X߇Xß‘X§XßąXߡXËXāXßęXûXßYYß%Yß+Y9YOYßYYßcYyY߃Y߉YYĄYá˛YßŧYĀYáÍYß×YßáYåYáöYßZZáZß Z$Zá1Zß;ZßAZUZ_ZoZsZá„ZߎZ’ZáŖZߎZ˛ZáŋZßÉZßĪZįZüZß[[ß![7[ßA[ßG[U[k[ßu[ß[•[ߟ[ßĨ[š[Î[ߨ[é[ßķ[ \ß\ß\'\=\ßG\ßQ\g\ßq\ßw\‹\\á \ßĻ\ĩ\Ę\ßÔ\é\ßô\]ß]ß])]/]5]D]ãH]e]k]Š]ã—]ã¤]ãŗ]ãŅ]ã÷]ã ^^ã+^ã6^ßL^áV^ãa^ßk^€^ߊ^ß”^ßž^Ž^߸^ßÂ^ßÎ^Ō^áß^ßé^ßķ^ßũ^_á_ß_ß"_ß,_0_á=_ßG_ßQ_ßW_áa_ßk_o_á|_߆_ߐ_ß–_á _ßĻ_ˇ_Á_ãÎ_ãŲ_ßß_ãę_ßđ_ãû_ß` `á`Ũ2`á<`ßF`J`áh`l`á{`Ũ`“`áĒ`ßĩ`š`áĘ`ßÖ`áā`đ`ßaaßaß&a8aMaßWaßaaßka{aß…aߏaß›aŸaá°aßēaßÄaßÎaߨaÜaáéaßķaßũaßbßbbá"bß,bß6b߆ßH†ßT† X†ái†ßs†ß}†ß‡†ß‘† •†áĸ†ßŦ†ßļ†ß†ßʆ Άáۆßå†ßī†ßõ†á˙†ß ‡  ‡á‡ß#‡ß-‡ß7‡ ;‡áG‡ßQ‡ß[‡ße‡ i‡áv‡ß€‡ßЇß”‡ ˜‡áĨ‡ß¯‡ßš‡ßŋ‡áɇß͇ ׇáä‡ßî‡ßø‡ßū‡áˆßˆ 'ˆ +ˆá<ˆßFˆßPˆßZˆßdˆ hˆáuˆßˆß‰ˆß“ˆßˆ Ąˆáވ߸ˆßˆßȈáԈß܈ āˆáėˆßöˆß‰ß ‰ ‰á‰ß$‰ß.‰ß8‰ <‰áI‰ßS‰ß]‰ßg‰ k‰áx‰ß‚‰ßŒ‰ß’‰áœ‰ßω ljᡉßÁ‰ßˉß҉áۉßበú‰  ŠßŠßŠß%Š 3Š CŠßMŠßWŠßaŠ qŠß{Šß…Šß‹Š ¯ŠãЊäŠãüŠß‹ ‹á‹ß%‹ß/‹D‹ßN‹ßX‹ßb‹r‹ß|‹ß†‹ßŽ‹‹Ž‹ßŋãߋãã‹  Œ _ŒãiŒãxŒã|ŒŒ¸ŒßŒߌßéŒíŒáúŒßß!3NßXußƒáßšĢßąÍĮá؍ßâæáķßũßŽŽŽá(Žß2Ž6ŽáCŽßMŽßWŽ[ŽálŽßvŽŠŽßŽŸŽŖŽáŗŽßŊŽÁŽáŌŽßŨŽáŽáîŽßøŽßūŽ&ß04áEßPTáaßkßq† ¤áĩßģáɏßĶ׏áčßōöáß ß.ß8Iß[lßx“ǐƐßːڐöß‘‘ß"‘6‘M‘d‘€‘߆‘”‘°‘ßē‘֑ßܑņ‘’ß’!’ß+’A’ßK’ßQ’_’u’ߒ߉’Ÿ’ߊ’߯’Òؒßâ’ķ’ßũ’“ß“ß#“1“G“ßQ“ß[“q“ß{“߁“•“Ǔߴ“œßĪ“å“ßī“ßõ“””ß#”ß-”C”ßM”ßS”g”k”á|”߆”›”ßĸ”á°”ßē”ž”áĪ”ß۔ę”î”á˙”ß •• •&•0•6•=•L•P•áa•ßk•o•á{•ß…•‰•áš•ßĨ•Š•áļ•ßĀ•ßƕߕô•ßū•–ß–/–ß9–ß?–M–c–ßm–ßw––ß—–ߝ–ą–ƖßЖá–ßë–—ß —ß——5—ß?—ßI—_—ßi—ßo—ƒ—˜—ßĸ—ŗ—ßŊ—Ķ—ßŨ—ßã—ņ—˜ß˜ß˜1˜ß;˜ßA˜U˜j˜ßt˜„˜ßŽ˜Ŗ˜ßޘŋ˜ßɘßΘč˜ė˜áũ˜ß™™™á'™ß-™8™>™D™J™P™V™\™b™h™n™x™ƒ™ã‡™¤™Ē™ęãΙãŨ™ãᙚšßš#š2š6šáGšßMšáWšßašešávšß‚š‘š•šáϚ߲šŊšĮš͚ךŨšåšīšõš›ã›%›+›R›ã~›ã›ã§›ãš›ãŊ›į›ü›ßœ œœá"œß(œá2œß<œ@œáQœß]œlœpœáœßœ˜œĸœ¨œ˛œ¸œĜȜáߜßéœíœáöœááßá.ß:IMá^ßju…•Ŗ¸ßĶßŨíßúūážßžžá*žß4ž8žáDžßQžfžßpžžß‹ž›žß¨žŊžßĮž؞ßâžķžßũž ŸßŸ0Ÿß:ŸßEŸZŸßdŸßoŸsŸá„ŸßŸ¤ŸßޟßšŸŊŸáΟß؟ܟáéŸáøŸá ß   á! ß- < @ áQ ß] h r x ‚ ˆ • Ļ ß° Á ßË Û ßé ū ß ĄĄß(Ą8ĄßBĄWĄßbĄsĄß}ĄßƒĄœĄąĄßˇĄÆĄĘĄáÛĄßáĄđĄĸßĸ ĸß*ĸ@ĸßJĸßPĸ^ĸtĸß~ĸ߈ĸžĸߨĸߎĸÂĸ×ĸßáĸōĸßüĸŖßŖß"Ŗ0ŖFŖßPŖßZŖpŖßzŖß€Ŗ”ŖŠŖßŗŖÄŖßÎŖäŖßîŖßôŖ¤¤ß"¤ß,¤B¤ßL¤ßR¤b¤h¤n¤t¤z¤„¤ޤ˜¤ĸ¤¨¤ޤ´¤ē¤¤Ö¤ãå¤ãé¤ ĨĨáĨß%Ĩá/Ĩß9Ĩ=ĨáNĨßZĨiĨmĨá~ĨߊĨ•ĨŸĨĨĨ¯ĨĩĨŊĨĮĨÍĨ×ĨáĨįĨöĨãúĨ ĻáĻ Ļ*Ļ0Ļ;ĻOĻUĻ_ĻjĻ|ĻŒĻá–ĻãĄĻß§Ļã´ĻãÅĻãŲĻđĻ'ûϧ'§0§ß:§ß@§O§S§ád§ßn§ßx§Œ§ß–§š§á̧ßļ§ē§áĮ§ßҧß×§ë§ņ§ü§á ¨ß¨¨á)¨ß4¨8¨áE¨ßO¨ßU¨m¨q¨á‚¨ßŒ¨ß’¨˜¨§¨̍áŧ¨ßƨßˍŌ¨á¨å¨áö¨ßŠß ŠŠáŠß$Šß.Š2Šá>ŠßHŠßNŠ_ŠcŠátŠß~Š‚ŠáŽŠß˜ŠœŠá­Šß¸ŠŧŠáÉŠßĶŠßŲŠôŠøŠá ĒßĒĒá#Ēß-ĒBĒßMĒQĒá^ĒßhĒßnĒ‰ĒĒážĒߨĒŊĒßČĒĖĒáŲĒßãĒßéĒĢĢáĢß"Ģ&Ģá2Ģß<ĢQĢß\Ģ`ĢámĢßwĢß}Ģ˜ĢœĢá­ĢߡĢĖĢß×ĢÛĢáčĢßōĢßøĢŦŦá'Ŧß1Ŧ5ŦáBŦßJŦáXŦßbŦfŦárŦß|Ŧ€Ŧá‘ŦßœŦ Ŧá­ŦߡŦßŊŦÖŦÚŦáëŦßõŦ ­ß­­á&­ß0­ß6­N­R­ác­ßm­q­á}­ß‡­‹­áœ­ß§­Ģ­á¸­ß­ßČ­ã­į­áø­ßŽŽáŽßŽ1Žß<Ž@ŽáMŽßWŽß]ŽxŽ|ŽáŽß—ŽßĄŽĩŽßŋŽÃŽáÔŽßߎãŽáđŽßúŽß¯¯¯)¯-¯á>¯ßH¯ßR¯f¯ßp¯t¯á…¯ß¯”¯áĄ¯ß̝ßą¯ů˯Ú¯Ū¯áī¯ßų¯ũ¯á °ß°°á(°ß3°7°áD°ßN°ßT°m°q°á‚°ßŒ°°áœ°ßϰģ°ßưʰá×°ßá°ßį°ąąáąß!ą6ąßAąEąáRąß\ąßbą|ą€ąá‘ąß›ąŸąáĢąßĩąĘąßÕąŲąáæąßđąßöą˛&˛ß0˛E˛ßP˛a˛ßk˛ßw˛Œ˛ß–˛̞ßļ˛Į˛ßҞßײߺŗß(ŗ=ŗßHŗYŗßcŗßiŗ‚ŗ—ŗßĄŗļŗßÁŗŌŗßÜŗßâŗúŗ´ß´)´ß3´7´áH´ßS´W´ád´ßn´ßt´´ĸ´ßŦ´ŧ´ßÆ´Û´ßæ´÷´ßĩßĩ ĩ$ĩá5ĩß?ĩCĩáOĩßYĩnĩßyĩ}ĩáŠĩß”ĩßšĩĩĩĘĩßÔĩäĩßîĩļßļļß)ļß/ļHļ]ļßgļ|ļ߇ļ˜ļßĸļߨļÂļ×ļßáļņļßûļˇßˇ,ˇß6ˇß<ˇWˇlˇßvˇ‹ˇß–ˇ§ˇßąˇßŊˇŌˇßܡėˇßöˇ ¸ß¸'¸ß1¸ß7¸R¸g¸ßq¸¸ß‹¸ ¸ß̏ŧ¸ßƸßˏã¸õ¸ß˙¸šßš0šß:šß@šTšfšßpš…šßšĄšßĢšßąšÅšášûšē,ēß6ēß<ēQēWēaēgēqē{ēē‹ē•ēŸēŠēŗēšēŋēÅēĪēŲēßēéēīēöēģģã&ģá0ģã;ģßEģ\ģ_gģßmģ|ģ‘ģß›ģŦģ߸ģŧģáÍģߨģÜģáíģß÷ģûģá ŧßŧŧá(ŧß2ŧß8ŧPŧTŧáeŧßoŧsŧá„ŧߏŧ“ŧá ŧßĒŧß°ŧČŧŨŧßįŧßņŧŊß ŊßŊ"Ŋ7ŊßAŊVŊßaŊrŊß|Ŋß‚ŊšŊ¯ŊßšŊŊŊáÎŊßŲŊŨŊáęŊßôŊßúŊžž"ž,ž2ž<žFžPž[žožƒž”žŸžŠž¸žĖžŨžčžōžŋŋã.ŋ?ŋJŋYŋã]ŋvŋˆŋß’ŋŖŋ˛ŋĮŋßŅŋâŋßęŋøŋßĀĀáĀß!Āß'Ā2Ā<ĀFĀPĀ\ĀoĀƒĀ”ĀŸĀŠĀĪĀãÜĀãéĀãøĀã Á Áã-Áá7ÁãHÁãSÁß]ÁyÁ߃Á߉Á˜ÁŗÁßēÁáÄÁãĪÁßŲÁŨÁáîÁßøÁüÁá ÂßÂßÂ5Â9ÂáFÂßRÂgÂßmÂ|€Âá‘Âߛ°ÂßģÂŋÂáĖÂßÖÂßÜÂôÂøÂá ÃßÃ(Ãß3Ã7ÃáDÃßNÃßTÃlÃpÃáÃߋàÃßĢïÃáŧÃ߯ÃßĖÃäÃčÃáųÃßÄÄß#Ä'Äá4Äß>ÄßDÄ\Ä`ÄáqÄß{ĐÄߛğÄáŦÄßļÄßŧÄÔÄØÄáéÄßķÄÅßÅÅá$Åß.Åß4ÅLÅaÅßkÅ€ÅߋŜÅßĻÅßŦÅÄÅŲÅßãÅøÅ߯ÆßÆß$Æ=ÆRÆß\ÆqÆß|ƍÆß—ÆßÆļÆËÆßÕÆęÆßõÆĮßĮßĮ/ĮDĮßNĮcĮßnĮĮ߉ĮߏĮ¨ĮŊĮßĮĮÜĮßįĮøĮßČßČ!Č6Čß@ČDČáUČß`ČdČáqČß{ČßČšČ¯ČßšČÎČßŲČęČßôČßúČÉ(Éß2ÉGÉßRÉcÉßmÉßsɈɒɜÉĸÉŦÉļÉĀÉĘÉÔÉŪÉíÉņÉáūÉĘĘ2Ęß=ĘAĘáRĘß\ĘßfĘ{Ęß…Ę–Ęß ĘąĘßēĘÉĘÍĘáŪĘßčĘėĘáũĘßËËß#Ëß)ËCË^ËßiËmËá~Ëß„ËáĸËßŦËÁËßËËßÕËßÛËæËáôËßūËĖáĖßĖß'Ė<ĖßFĖWĖßaĖrĖß{ĖŠĖŽĖáŸĖßŠĖ­ĖážĖßÉĖÍĖáÚĖßäĖßęĖÍÍß"Í7ÍßBÍSÍß]ÍßcÍx͈͂͒͜ÍĻͰÍļÍÁÍÅÍáÖÍßæÍûÍßÎÎß Î1Îß:ÎIÎMÎá^ÎßhÎlÎá}Î߈ΙÎßŖÎߊÎÁÎÖÎßāÎõÎßĪĪßĪß!Ī:ĪOĪßYĪiĪßoĪĪ”ĪßžĪß¤ĪšĪŊĪáÉĪßĶĪßŨĪáĪáōĪßųĪ ĐĐß)Đ9Đß?ĐKĐQĐ[ĐeĐkĐqĐ}Đ˜ĐßŖĐ§Đá¸ĐßÂĐßČĐ×ĐōĐßũĐŅßŅ1Ņß<ŅMŅßWŅß]ŅrŅ|Ņ†ŅŒŅ–ŅœŅĸŅŦŅļŅĀŅÆŅĖŅĶŅŨŅįŅņŅŌŌã!Ōã1Ōá;ŌãLŌáVŌãaŌßkŌoŌá€ŌßŠŌŽŌáŸŌߊŌߝԯŌĘŌá×ŌßãŌ ĶßĶĶ"Ķá3Ķß=ĶRĶß]ĶaĶánĶßxĶß~Ķ–ĶšĶáĢĶßĩĶĘĶßÕĶŲĶáæĶßđĶßöĶÔÔá#Ôß-ÔBÔßMÔQÔá^ÔßhÔßnÔ†ÔŠÔá›ÔßĨÔēÔßÅÔÉÔáÖÔßāÔßæÔūÔÕáÕßÕ2Õß=ÕAÕáNÕßXÕß^ÕvÕzÕá‹Õß•ÕĒÕßĩÕšÕáÆÕßĐÕßÖÕîÕÖß Ö"Öß-Ö>ÖßHÖßNÖfÖ{Öß…ÖšÖßĨÖļÖßĀÖ߯ÖŪÖķÖßũÖ×á×ß×!×á.×ß8×ß>×V×k×ßu׊×ß•×Ļ×ß°×ßļ×Î×ã×ßí×Øß ØØß(Øß.ØFØ[ØßeØzØß…Ø–Øß ØßĻØžØĶØßŨØōØßũØŲßŲßŲ6ŲKŲßUŲjŲßuŲ†ŲߐŲß–ŲŽŲÃŲßÍŲâŲßíŲūŲßÚßÚ"Ú,Ú6Ú<ÚFÚPÚZÚdÚnÚxÚ‡Ú‹Úá˜ÚĸÚ­Ú¸ÚĮÚÛÚãčÚáōÚãÛá ÛãÛß"Û&Ûá7ÛßAÛEÛáVÛß`ÛßfÛ~Û‚ÛáÛߛ۟Ûá°ÛßēÛĪÛßÚÛŪÛáëÛßõÛßûÛÜÜá(Üß2ÜGÜßRÜVÜácÜßmÜßs܋܏Üá ÜßĒÜŋÜßĘÜÎÜáÛÜßåÜßëÜŨŨáŨß"Ũ7ŨßBŨFŨáSŨß]ŨßcŨ{ŨŨáŨßšŨ¯ŨßēŨžŨáËŨßÕŨßÛŨķŨ÷ŨáŪßŪ'Ūß2Ū6ŪáCŪßMŪßSŪkŪ€ŪßŠŪŸŪßĒŪģŪßÅŪßËŪãŪøŪßßßß"ß3ßß=ßßCß\ßqßß{ߐßß›ßŦßßļßßŧßÕßęßßôß āßā%āß/āß5āNācāßmā‚āߍāžāߨāߎāĮāÜāßæāûāßááß!áß'á@áUáß_átáßááßšáß ášáÎáߨáíáßøá âßâßâ2âQâUâáqâuâá‚âߌâß’â§âąâģâÅâËâÕâßâéâķâũâãããá'ã1ã@ãUãß_ãßfãqã‹ãã•ãã¤ãã¨ãÉãÍãáŪãßčãėãáũãßäß ä$ä(äá5äßAäEäáVäß`ädäáuä߀ä„äá‘äß›äߥäģäŋäáĐäßÚäŪäáīäßúäūäá åßåßå3å7åáHåßRåVåágåßråvåáƒåߍåß“å­åąåáÂåßĖåĐåááåßėåđåáũåßæß æ'æ+æá<æßFæJæá[æßfæjæáwæßæß‡æĄæĨæáļæß¿ĿáÕæßāæäæáņæßûæßįįįá,į6įEįIįáZįßdįßjįázį~įáįß™įߟįĒįÆįĘįáæįęįá÷įßčßčč'č+čá<čßFčßLčá\č`čáqčß{č߁čŒčžčߨčŦčáŊčßČčĖčáŲčßãčßéčũč é éáéß(éß.éá>éBéáSéß]éßcénézééß™ééáŽéßšéŊéáĘéßÔéßÚéōéęßę&ęß1ęBęßLęßRęjęę߉ęžęߊęēęßÄęßĘęâę÷ęßëëß!ë2ëß<ëßBëZëoëßyëŽëß™ëĒëß´ëßēëŌëįëßņëėßė"ėß,ėß2ėJė_ėßiė~ė߉ėšėߤėßĒėžėČėŌėØėâėėėöėíã í&í,í;íã?í`ídíáqíßwí‡íã‹íŦí°íáÁíßËíĪíáÜíßâíîíũíãî"î&îá3îß9îIîãMînîrîáƒîߍî‘îážîߤî°îĘîãÖîãéîãíî īáīß"ī3īBīFīáWīßaīeīávī߁ī’īßœīßĸīēīŲīųī đßđßđ.đ4đ?đYđãcđãpđã‚đã†đšđŊđáÜđßâđōđņãņã"ņã2ņãBņãVņgņvņzņá‡ņß‘ņ•ņáĸņßļņãÖņęņã÷ņáōã ōßōã"ōã-ōß7ō;ōáLōßRōáeōiōáyō߃ō߉ōášōžōáĒōß´ōßēōËōĪōáßōßéōßīōáķķáķßķß ķ1ķ5ķáEķßOķßUķáfķjķávķ߀ķ߆ķ—ķ›ķáĢķßĩķßģķáĖķĐķáÜķßæķßėķũķôáôßôß!ôá2ô6ôáBôßLôßRôcôgôáwô߁ô߇ôá˜ôœôá¨ô߲ô߸ôÉôŨôßįôßíôõõßõß)õ-õá=õßGõßMõá^õbõánõßxõß~õõ“õáŖõß­õąõáŊõßĮõËõáØõßâõßčõųõ ößö'öß-ö9ö?öOöSöádößtö‰öß“ö¤öߎöŋößČö×öÛöáėößööúöá ÷ß÷÷á'÷ß1÷ß7÷Q÷U÷áf÷ßp÷t÷á…÷ߐ÷”÷áĄ÷ßĢ÷ßą÷Ë÷Ī÷áā÷ßę÷î÷á˙÷ß øøáøß%øß+øEøIøáZøßdøhøáyøß„øˆøá•øßŸøßĨøŋøÃøáÔøßŪøâøáķøßūøųáųßųßų9ų=ųáNųßXų\ųámųßxų|ųá‰ųß“ųß™ųŗųˇųáČųßŌųÖųáįųßōųöųáúß úßú-ú1úá>úHúWú[úálúßvúzúá‹úß–ú§úßąúߡúĐúÔúáåúßīúķúáûßûûá ûß*ûß0ûHûYûhûlûá}û߇û‹ûáœûß§ûĢûá¸ûßÂûßČûâûæûá÷ûßüüáüß!ü%üá2üß<üßBü\ü`üáqüß{üüáüß›üŸüáŦüßļüßŧüÖüÚüáëüßõüųüá ũßũũá&ũß0ũß6ũPũTũáeũßoũsũá„ũߏũ“ũá ũßĒũß°ũĘũÎũáßũßéũíũáūũß ū ūáūß$ūß*ūDūHūáUū_ūnūrūáƒūߍū‘ūáĸūß­ūžūßČūßÎūįūëūáüūß˙ß ˙á˙ã"˙ß,˙0˙áA˙ßK˙O˙á`˙ßk˙o˙á|˙߆˙ߌ˙Ĩ˙Š˙áē˙ßÄ˙Ų˙ßä˙č˙áõ˙ß˙˙ß#á4ß>Sß^báoßyß™áŽß¸ÍߨÜáéßķßųá(ß2GßRVácßmßs‘áĸßŦÁßĖĐáŨßįßí áß&*á;ßFJáWßaßg–ß ĩßĀŅßÛßá÷ %/9CMWfjáwĨ߯ßēËÚŪáīßöáã ßá*ß48áIßTXáeßoßuŽ’áŖß­ÂßÍŅáŪßčßî áß'<ßGKáXßbßh‚†á—ߥļßÁÅáŌßÜßâüáß0ß;?áLßVß\vzá‹ß•ĒßĩšáÆßĐßÖđôáß$ß/3á@ßJßPj߉žßŠēßÄßĘäųßß#4ß>ßD]rß|‘ßœ­ßˇßŊÖëßõ ß & ß0 ß6 O d ßn ƒ ߎ Ÿ ߊ ߯ Č Ũ ßį ü ß  ß" ß( A V ß` u ߀ ‘ ß› ߥ ē Ī ßŲ î ßų  ß ß 3 H ßR g ßr ƒ ߍ ß“ ¨ ˛ ŧ  Ė Ö ā ę ô ū    á( 2 A V ß` ßk € ߊ ß• Ē ß´ É ßÔ å ßī ßõ  # ß- B ßM ^ ßh ßn ‡ œ ßĻ ģ ߯ × ßá ßį ß4ß?PßZß`yŽß˜­ß¸ÉßĶßŲōß&ß1BßLßRk€ßŠŸßĒģßÅßËäųßß#4ß>ßJNá_ßimá~߈ߎĨļßžČÎÔŪčōø  *4:DNXblr|†š¤Ž¸ŋÉŨņãūããã.ã>ãNáXãcßiãtßz㎟ŽÃßÍŪßęîá˙ß  áß&*á;ßEßKá[_ápßz߀‹§ĢáĮËáØßâßčüß'ß-AEáVß`ßfq}á’ßœ áąßŧĀáÍß×ßŨõųá ß)ß48áEßOßUmqá‚ߌĄßŦ°áŊßĮßÍåéáúßß$(á5ß?ßE]aárß|‘ßœ á­ßˇßŊÕęßô ß%ß/ß;PßZß`o„ߎߔŖ¸ßÂßČ×Ûáėßößßá*ß48áIßTXáeßoßuĸßŦÁßĖŨßįßí áß$ß.ß8ßBßHWlßv‹ß–§ßąßˇĪäßîßß)ß/G\ßf{߆—ߥߧŋÔßŪķßūßß7LßVkßv‡ß‘ß—¯ÄßÎŌáãßîōá˙ß ß'<ßFJá[ßfjáw߁߇Ÿ´ßžĶßŪīßųß˙'1;EOYcmw‚Œ›ĢãģáÅãĐßÖãáßįáņãüß áß%)á:ßEIáVß`ßf~‚á“ߝ˛ßŊÁáÎߨßŪöúá ß*ß59áFßPßVnráƒßĸß­ąážßČßÎæęáûß  ß% ) á6 ß@ ßF ^ b ás ß} ’ ߝ Ą Ꭰ߸ ßž Ö Ú áë ßõ  !ß!!á&!ß0!ß6!N!c!ßm!‚!ߍ!ž!ߨ!ߎ!Æ!Û!ßå!ú!ß""ß "ß&">"S"ß]"r"ß}"Ž"ߘ"ßž"ļ"Ë"ßÕ"ę"ßõ"#ß#ß#.#C#ßM#b#ßm#~#߈#ߎ#Ļ#ģ#ßÅ#Ú#ßå#ö#ß$ß$$3$ß=$R$ß]$n$ßx$ß~$–$Ģ$ßĩ$Ę$ßÕ$æ$ßđ$ßö$%#%ß-%B%ßM%^%ßh%ßn%‚%Œ%–% %Ļ%°%ē%Ä%Î%Ø%â%ņ%õ%á& &&&á0&ß:&>&áO&ßZ&^&ák&ßu&ß{&“&—&á¨&߲&Į&ßŌ&Ö&áã&ßí&ßķ& ''á 'ß*'?'ßJ'N'á['ße'ßk'ƒ'˜'ßĸ'ˇ'ßÂ'Ķ'ßŨ'ßé'í'áū'ß( (á(ß((,(á9(ßC(ßI(a(r(v(á‡(ß‘(•(áĻ(ßą(ĩ(áÂ(ßĖ(ßŌ(ę(î(á˙(ß ))ß))-)á:)ßD)ßJ)b)f)áw)߁)–)ߥ)Ĩ)á˛)ßŧ)ßÂ)Ú)Ū)áī)ßų)*ß**á**ß4*ß:*R*V*ág*ßq*†*ß‘*•*áĸ*ßŦ*߲*Ę*ß*ßé*ū*ß ++ß$+ß*+B+W+ßa+v+߁+’+ßœ+ßĸ+ē+Ī+ßŲ+î+ßų+ ,ß,ß,2,G,ßQ,f,ßq,‚,ߌ,ß’,Ē,ŋ,ßÉ,Ū,ßé,ú,ß-ß -"-7-ßA-V-ßa-r-ß|-ß‚-š-¯-ßš-Î-ßŲ-ę-ßô-ßú-.'.ß1.F.ßQ.b.ßl.ßr.Š.Ÿ.ߊ.ž.ßÉ.Ú.ßä.ßę.//ß!/6/ßA/R/ß\/ßb/z//ß™/Ž/ßš/Ę/ßÔ/ßÚ/ō/0ß0&0ß10B0ßL0ßR0j00߉0ž0ߊ0ē0ßÄ0ßĘ0Ū0č0ō0ü01 11 1*141>1H1N1X1b1l1v1€1‹1ĩ1ãÂ1ãĪ1ãŪ1ãü1ã"2ã52 I2ãV2ãa2ßw2á2ãŒ2ß–2 Ģ2ßĩ2ßŋ2ßÉ2 Ų2ßã2ßí2ßų2 ũ2á 3ß3ß3ß(3 ,3á93ßC3ßM3ßW3 [3áh3ßr3ß|3ß‚3áŒ3ß–3 š3á§3ßą3ßģ3ßÁ3áË3ßŅ3 â3 ė3ãų3ã4ß 4ã4ß4ã&4ß04 44áG4Ũ]4ág4ßq4 u4á“4 —4áĻ4Ũē4 ž4áÕ4ßā4 ä4áõ4ß5á 5 5ß+5 ;5ßE5ßQ5 c5 x5ß‚5ߌ5ß–5 Ļ5ß°5ßē5߯5 Ę5áÛ5ßå5ßī5ßų5ß6 6á6ß6ß(6ß26ß<6 @6áM6ßW6ßa6ßg6áq6ß{6 6á‹6ß•6ߟ6ߊ6 ­6áš6ßÃ6ßÍ6ß×6 Û6áč6ßō6ßü6ß7  7á7ß!7ß+7ß17á;7ßE7 I7áV7ß`7ßj7ßp7áz7߀7 ™7 7áŽ7߸7ßÂ7ßĖ7ßÖ7 Ú7áį7ßņ7ßû7ß8ß8 8á 8ß*8ß48ß:8áD8ßN8 R8á^8ßh8ßr8ß|8 €8áŒ8ß–8ß 8ßĒ8 Ž8áģ8ßÅ8ßĪ8ßŲ8 Ũ8áę8ßô8ßū8ß9á9ß9 9á)9ß39ß=9ßC9áM9ßS9 l9 }9߇9ß‘9ß—9 Ĩ9 ĩ9ßŋ9ßÉ9ßĶ9 ã9ßí9ß÷9ßũ9 :"-:ã@:"D:áT:ß^:ßh:"l:á|:߆:ߐ:"Ĩ:ßĢ:"ļ:"Á:áË:ßÕ:ßß:"ã:áī:ßų:ß˙:";";á$;ß.;"2;á>;ßH;"L;áY;ßc;ßi;"z;"˜;"Ž;"ē;"Ā;"Ę;"î;ãû;ã<ã<ã5<ã[<ãn<$‚<ã<ãš<ß°<áē<ãÅ<ßĪ<$ä<ßî<ßø<ß=$=ß=ß&=ß2=$6=áC=ßM=ßW=ßa=$e=ár=ß|=߆=ߐ=$”=áĄ=ßĢ=ßĩ=ßģ=áÅ=ßĪ=$Ķ=áā=ßę=ßô=ßú=á>ß >$>$%>ã2>ã=>ßC>ãN>ßT>ã_>ßi>$m>á€>Ũ–>á >ßĒ>$Ž>áĖ>$Đ>áß>Ũķ>$÷>á?ß?$?á.?ß:?áD?$T?ßd?$t?ß~?ߊ?$œ?$ą?ßģ?ßÅ?ßĪ?$ß?ßé?ßķ?ß˙?$@á@ß@ß(@ß2@ß<@$@@áM@ßW@ßa@ßk@ßu@$y@á†@ߐ@ßš@ß @áĒ@ß´@$¸@áÄ@ßÎ@ߨ@ßâ@$æ@áō@ßü@ßAßA$Aá!Aß+Aß5Aß?A$CAáPAßZAßdAßjAátAß~A$‚AáAß™AßŖAߊAáŗAßšA$ŌA$ÖAáįAßņAßûAßBßB$Bá Bß*Bß4Bß>BßHB$LBáYBßcBßmBßsBá}B߇B$‹Bá—BߥBßĢBßĩB$šBáÅBßĪBßŲBßãB$įBáôBßūBßCßC$Cá#Cß-Cß7Cß=CáGCßQC$UCábCßlCßvCß|Cá†CߌC$ĨC$ļCßĀCßĘCßĐC$ŪC$îCßøCßDß D$Dß&Dß0Dß6D$OD&cDãpDãzDߏDáŸDߊD&ŊDßĮD&ØDßęD&îDáEŨE&6Eß@E&`EßhE&}E(‘EãŠE߯EáĀEßĘE(ÎEáßEßéEßķE(÷EáFßF(Fá(Fß2F(6FáMFßSF(kF(oFá|F߉F(šFߤFߎF(ŋFßÉFßĶFßŨF(íFß÷FßGßG(G(0Gã:GãIGãVGãcGãˆG*œGãšGáĘGßÔG*ØGáéGßôG*øGá HßHßHß'Hß1H*BHßLHßVHß`H*qHß{Hß…H*–Hß HßĻH*´HßžHßÎHߨH*ÜHáíHß÷H*IßI*#Iß0I*4IáQIßWI*fI*jIáIá–I*ĢIßĩIßŋIßÉI*ÚIßäIßîI*˙Iß JßJ*Jß'Jß7JßAJ*EJáVJß`J*qJß{J*ŒJß™J*Já´JßĀJ*ĪJ*ĶJáčJáūJ*KßK**Kß4KßRKã…KãĩKãčKã L,!Lã>LáHLãSLß]L,aLárLß|Lß‚LáŒLß–Lß LßĒLß´L,¸LáÉLßÔL,ØLáéLßķLßũLßM, MáMß"Mß,M,0Má=MßGMßMMáWMßaMßqMß{M,MßšM,ĢMßĩM,ÆMßĶM,×MáîMßøMßūM, N,Ná&NáfBfáSfß]fßgfkfá|f߆fߌfáfĄfá­fߡfßŊfÎfãfßífũfßgg(gß2gBgßHgTgZgigmgá~g߈gß’g–gá§gßągߡgáČgĖgáØgßâgßčgųgũgáhßhhá(hß.h>hShß]hmhßshh…h”h˜háŠhßŗhßŊhÁháŌhßÜhßâháķh÷háiß ißi$i9ißCiSißYiii~i߈i˜ißžiĒi°iŋiÃiáÔißŪißčiėiáũißjß jáj"já.jß8jß>jOjdjßnj~jß„j”jŠjßŗjÃjßÉjÕjÛjęjîjá˙jß k kákß$k(ká5kß?kßIkMká^kßhklká}k߈kŒká™kßŖkߊkŊkĮkØkÜkáíkß÷k lßllá(lß2lß8lPlelßol„lߏl lßĒlß°lČlŨlßįlülßmmß"mß(m@mUmß_mpmßvm†m›mßĨmŠmáēmßÅmÉmáÖmßāmßæmúmnnn"n,n6nwMw]wãmwã}wãwãĄwļwßĀwßĘwÛwßáwņwxßx,xß2xBxFxáWxßaxßkxoxá€xߊxߐxáĄxĨxáąxßģxßÁxŌxįxßņxyßyy,yß6yFyßLyXy^ymyqyá‚yߌyß–yšyáĢyßĩyßģyáĖyĐyáÜyßæyßėyũyzázßz zá,zß2zBzWzßazqzßwzƒz‰z˜zœzá­zߡzßÁzÅzáÖzßāzßæzá÷zûzá{ß{ß{({={ßG{W{ß]{m{‚{ߌ{œ{ßĸ{Ž{´{Ã{Į{áØ{ßâ{ßė{đ{á|ß |ß|á"|&|á2|ß<|ßB|S|h|ßr|‚|߈|˜|­|ߡ|Į|ßÍ|Ų|ß|î|ō|á}ß }}á}ß(},}á9}ßC}ßM}Q}áb}ßl}p}á}ߌ}}á}ß§}ß­}Á}Ë}Ü}ā}áņ}ßû}~ß~~á,~ß6~ß<~T~i~ßs~ˆ~ß“~¤~ߎ~ß´~Ė~á~ßë~ß ß&ß,DYßctßzŠŸßŠ­ážßÉÍáÚßäßęū€€€&€0€:€@€O€_€ão€ã€ã€ãŖ€¸€ß€ßĖ€Ũ€ßã€ķ€ß.ß4DHáYßcßmqá‚ßŒß’áŖ§áŗßŊßÁԁéßķ‚ß ‚‚.‚ß8‚H‚ßN‚Z‚`‚o‚s‚ᄂߎ‚ߘ‚œ‚ᭂߡ‚ßŊ‚á΂Ō‚áŪ‚ßč‚ßî‚˙‚ƒáƒßƒ"ƒá.ƒß4ƒDƒYƒßcƒsƒßyƒ…ƒ‹ƒšƒžƒá¯ƒßšƒßÃĮƒá؃ßâƒßčƒáųƒũƒá „߄߄*„?„ßI„Y„ß_„o„„„ߎ„ž„ߤ„°„ļ„ńɄáڄßä„ßî„ō„á…ß …ß…á$…(…á4…ß>…ßD…U…j…ßt…„…ߊ…š…¯…ßš…ɅßĪ…ۅá…đ…ô…á†ß††á †ß*†.†á;†ßE†ßO†S†ád†ßn†r†áƒ†ßކ’†áŸ†ßІß¯†Æ͆Ū†â†áķ†ßũ†‡ß‡!‡á.‡ß8‡ß>‡V‡k‡ßu‡Їß•‡χß°‡ßã‡ßí‡ˆß ˆˆß(ˆß.ˆFˆ[ˆßeˆvˆß|ˆŒˆĄˆß̈¯ˆáˆßˈΈá܈ßæˆßėˆ‰ ‰‰‰(‰2‰<‰B‰Q‰2`‰ãi‰ãs‰ã‚‰ã‘‰ãljá°‰ãē‰ßĉ2ȉáډŨį‰Ũķ‰2ŠßŠßŠ2+Šß5Šß?Š2PŠßZŠß`Š2qŠ2…ŠßŠß™Š2ЊßŗŠßŊŠ2Ίß؊ßۊ2īŠ2‹ß ‹ß‹2'‹ß1‹ß;‹2L‹ßV‹ß\‹2m‹2‹ß‹‹ß•‹2Ĩ‹ß¯‹ßš‹2ʋßԋßڋ2ë‹2ī‹á˙‹ß Œ2Œß)Œ2=ŒßHŒ2\ŒßfŒßpŒ2€ŒßŠŒß”Œ2ĨŒß¯ŒßĩŒ2ƌ2ڌßåŒ2ųŒßß 2ß'ß12BßLßR2c2wß‚2’ßœßĻ2ļßĀßʍ2ۍßåßë2ŽãŽãŽã7Ž4FŽãOŽãYŽãhŽãwŽãŽá•ŽãŸŽßŠŽ4­ŽáŋŽŨĖŽŨ؎4܎áėŽßöŽß4áßß$49ßC4Tß^4oß|4ß—ßĄß§4¸4ŧáĖß֏ßā4äáđßúß4ß#44ß>4Oß\4mßwßß‡4˜4œáŦßļß4ĐáАßڐßä4ųß‘4‘ß‘4/‘ß<‘4M‘ßW‘ßa‘ßg‘4x‘4Œ‘ß–‘ß ‘4°‘ßē‘ßđ4Ų‘ßã‘4ô‘ßū‘4’ß’4-’ß7’ßA’ßG’4X’4l’ßw’4‹’ß–’4Ē’ßĩ’4š’áɒßĶ’ßŨ’4á’áí’ß÷’ß“4“ß “41“ß;“4L“ßY“4j“ßt“ß~“ß„“4•“4Гߴ“4ȓßŌ“ßܓ4ė“ßö“ß”4”ß”40”ß:”4K”ßX”4i”ßs”ß}”߃”4””4˜”ᨔ߲”ßŧ”4Ā”áĖ”ß֔ßā”4ä”áõ”ß˙”4•á•ß•4•á+•ß8•4<•áM•ßW•4h•ßr•4ƒ•ߐ•4Ą•ßĢ•ßĩ•ßģ•4Ė•4ܕßķ•ãũ•ã–ã–6'–ã0–ã:–ãI–ãX–ãq–áw–ざߋ–6–ᥖŨŽ–Ũē–6ԖßŪ–6î–ßø–ßū–6—6(—ß2—6B—ßL—ßR—6b—6|—߆—6–—ß —ßĻ—6ļ—6Зßڗ6ę—ßô—ßú—6 ˜6$˜ß.˜6>˜ßH˜ßN˜6^˜6r˜ß}˜6—˜ßĄ˜6ą˜ßģ˜ßÁ˜6Ҙ6å˜ßđ˜6 ™ß™6$™ß.™ß4™6D™6H™áX™ßc™6w™ß‚™6’™ßĨ™ãŽ™ã¸™ãřãŌ™ãę™ãô™ã šãšãšã*šã6šãRšã\šã˜šãšš͚ãښãęšãúšã ›ã›á$›ã/›ß5›ãI›M›á^›ßh›ßn›y›}›áŽ›ß˜›œ›áŠ›ßģ›Лßڛë›ßũ›œáœßœß&œß0œEœßOœßUœ`œdœáuœßœƒœá“œßœßŖœޜ˛œáœß˜ß֜ڜáæœßđœßöœáß $á1ß;?áPß[_álßvß|–°˝Īáëīáüßžß ž&ž*žá;žßQžežßožßyž‰žß“žß™žĨžŠžášžßÞĮžáĶžßŨžážáîžßøžüžá ŸßŸŸá)Ÿß3Ÿß9ŸQŸ`ŸdŸáuŸßŸƒŸáŸß™ŸŸáǟß´Ÿɟßԟ؟áåŸßīŸßõŸ  á% ß/ 3 á@ ßJ N á_ ßj n á{ ß… ß‹ Ĩ ē ßÄ Õ ßß ô ß˙ ĄßĄß Ą9ĄJĄßTĄdĄßnĄĄß‰ĄžĄßŠĄēĄßÄĄßĘĄįĄëĄáüĄßĸ ĸáĸß!ĸ%ĸá6ĸßAĸEĸáRĸß\ĸßbĸ|ĸ€ĸá‘ĸß›ĸŸĸá°ĸßģĸŋĸáĖĸßÖĸßÜĸõĸųĸá ŖßŖŖá)Ŗß4Ŗ8ŖáEŖßOŖßUŖoŖ„Ŗß•Ŗ™ŖáĒŖß´ŖßžŖßÄŖáÎŖßØŖėŖßöŖß¤ß ¤¤ß$¤ß.¤ß6¤F¤J¤á[¤ße¤ßo¤„¤ßޤߘ¤ßĸ¤˛¤ßŧ¤ßƤßΤŨ¤ō¤ßü¤ßĨ ĨáĨß&Ĩß0ĨEĨßOĨßYĨßcĨsĨß}Ĩ߇ĨߏĨžĨŗĨßŊĨŌĨßŨĨîĨßøĨßūĨĻ+Ļß5ĻFĻßPĻeĻßpρĻß‹Ļß‘ĻĒĻŋĻßÉĻŪĻßéĻúĻß§ß § §&§0§6§<§F§Q§[§u§ã§ãŒ§ã™§ã̧ģ§ã˧ãÛ§ãë§ãû§ã ¨ã¨ã+¨ã;¨áE¨ãP¨ßZ¨^¨áo¨ßy¨}¨áލß™¨¨áǍß´¨ßē¨Ō¨Ö¨áį¨ßņ¨ŠßŠŠá"Šß,Šß2ŠJŠ[ŠjŠnŠáŠß‰Šß“ŠßŠß§ŠŧŠßÆŠÖŠßāŠņŠßūŠĒáĒßĒ2Ēß=ĒNĒßXĒiĒßvĒzĒá‹Ēß•ĒßŸĒŖĒá¯ĒßšĒßŋĒĪĒĶĒáäĒßîĒōĒáūĒßĢ ĢáĢß(Ģ,Ģá9ĢßCĢßIĢcĢgĢáxĢ߂̆Ģá’ĢßœĢ Ģá­ĢßēĢĪĢßŲĢéĢßķĢŦßŦ$Ŧß.Ŧß4ŦJŦTŦ^ŦhŦrŦxŦ‚ŦŒŦ’ŦŦ˛ŦßŧŦĀŦáŅŦßÜŦāŦáíŦß÷ŦßũŦ­*­ß4­I­ßT­e­ßo­ßu­‰­­•­Ÿ­Ĩ­°­ē­É­ãÍ­9ŽáŽ9"Žá2Žß<ŽßFŽßLŽáVŽß`ŽßjŽ9nŽá~ŽßˆŽß’Ž9–ŽáĸŽßŦŽß¸Ž9ŧŽáĖŽßÖŽßāŽßęŽ9îŽáûŽß¯ß¯ß¯9.¯ß8¯ßB¯ßH¯9W¯9n¯ß{¯9¯ßš¯9ž¯áޝ߸¯ßž¯9ܯ9÷¯9°9/°?°ãO°ã_°ái°ãt°ßƒ°ß‰°ã–°ãϰãē°ž°áҰ_ܰßâ°áō°ö°á ą_ąßą%ą7ąßAąVąßaąrąß|ąß‚ą–ąĸąˇąßÁąŌąßŪąâąáķąßũąß˛á˛˛á(˛ß2˛ß<˛Q˛ßW˛b˛m˛‰˛˛áО­˛áē˛ßIJßʲŪ˛ę˛î˛á˙˛ß ŗ ŗáŗß)ŗ-ŗá:ŗßDŗßJŗbŗfŗáwŗßŗ…ŗá’ŗßžŗĸŗáŗŗßŊŗßÃŗŌŗÖŗáįŗßņŗõŗá´ß´/´ß9´V´ßb´f´áw´ß´ß‹´ß•´ßŸ´Ŗ´áŗ´ßŊ´ßĮ´ßÍ´á×´Û´áč´ßō´ßü´ßĩáĩĩ6ĩßBĩFĩáWĩßaĩßgĩvĩzĩá‹ĩß•ĩ™ĩáĒĩßĩĩšĩáÆĩßĐĩßÖĩîĩōĩáļß ļßļ"ļ&ļá7ļßAļEļáVļßaļeļárļß|ļß‚ļšļ¯ļßšļĘļßÔļåļßīļˇßˇˇá#ˇß-ˇ1ˇáBˇßMˇQˇá^ˇßhˇßnˇ†ˇЎá›ˇßĨˇЎáēˇßŎɡáÖˇßāˇßæˇūˇ¸á¸ß¸!¸á2¸ß=¸A¸áN¸ßX¸ß^¸v¸‹¸ß•¸ßŸ¸°¸ßē¸ßиÔ¸áå¸ßī¸ßų¸ũ¸á šßšßš3šß9šDšTšXšáišßsšß}ššáŽšß˜šßžšŽšÚßÍšâšßíšūšßēßē)ēß3ēHēßSēdēßnēßtēŒēĄēßĢēĀēßËēÜēßæēßėēģģß#ģ8ģßCģTģß^ģßdģ|ģ‘ģß›ģ°ģßģģĖģßÖģßÜģđģöģŧ ŧŧ3ŧGŧãTŧãdŧánŧãyŧßŧãŠŧߐŧã›ŧߥŧãŦŧ߲ŧáÅŧßĪŧĶŧáäŧßîŧßõŧáûŧãŊß ŊãŊßŊá0Ŋß:Ŋ>ŊáOŊßYŊß`ŊáfŊãqŊßwŊã‡Ŋã’ŊߘŊãŖŊߊŊã´ŊßēŊãÅŊßĪŊäŊßîŊßųŊũŊážßž-žß8ž<žáIžßSžßYžsžˆžß’ž§žß˛žÞßÍžßĶžéžķžųžŋ ŋŋ2ŋß<ŋßGŋKŋá\ŋßfŋ{ŋ߆ŋŠŋá—ŋߥŋß§ŋĀŋÕŋßßŋôŋß˙ŋĀßĀß Ā5Ā=ĀGĀRĀhĀxĀã‡Āá‘ĀãĄĀˇĀ\ÂĀßČĀ×ĀëĀßõĀß˙Āß ÁßÁÁá'Áß1Áß;ÁßAÁáKÁOÁá\ÁßfÁßpÁßvÁá|ÁŽÁ¤ÁߎÁßļÁŊÁâÁã Âã Â4ÂãAÂãPÂã_ÂãiÂßoÂáxÂã„Âã”ÂãŖÂã­ÂߡÂģÂáËÂßÕÂåÂßëÂûÂÃßÃ)Ãß3ÃDÃßNÃRÃá_ÃßiÃásÃã}Ã߃ÃáÃãœÃãĻÃ߰ôÃáÄÃßĘÃáÚÃöÃßüÃ Ä Äß*Äß4Äß>ÄßHÄLÄá\ÄßfÄßpÄßvÄá€Ä„Äá‘Äß›ÄßĨÄßĢÄáąÄÃÄßÄßįÄķÄÅßÅßÅ&Å*Åá:ÅßDÅßJÅá[Å_ÅákÅßuÅß{ŌŐÅá ÅßĒÅß°ÅáÁÅÅÅáŅÅßÛÅßåÅúÅ߯ÆßÆ0Æß9ÆJÆNÆá^ÆßhÆßnÆáƃÆáÆß™ÆßŸÆ°Æ´ÆáÄÆßÎÆŌÆáãÆßîÆōÆá˙Æß ĮßĮ#Į:ĮßDĮXĮßbĮsĮßĮƒĮá“Įß™Į¨Į¸ĮßÂĮßČĮØĮėĮßöĮßüĮ ČČ0Čß:Č>ČáOČßZČ^ČákČßuČ߁ȅČá•ČߟČßĨČáļČēČáÆČßĐČßÖČįČëČáûČßÉß ÉáÉ Éá,Éß6Éß@ÉUÉß_ÉpÉßzÉ‹Éß”ÉĨÉŠÉášÉßÃÉßÉÉáÚÉŪÉáęÉßôÉßúÉ ĘĘß%Ę:ĘßEĘVĘß`ĘßfĘʏĘߕƪĘß­ĘąĘáÂĘßĖĘßŌĘáĘōĘßøĘËËß'Ë;ËßEËVËßbËfËávË߀Ë߆Ëá—Ë›Ëá§ËßąËߡËČËĖËáÜËßâËņËõËáĖßĖßĖ$Ė(Ėá8ĖßBĖFĖáWĖßbĖfĖásĖß}ĖßƒĖĖĄĖáąĖßģĖßÁĖáŅĖß×ĖįĖëĖáûĖßÍáÍÍá(Íß2Íß8ÍEÍPÍdÍßnÍßx͉Íß“Íߙ͊ͭÍáŊÍßĮÍÜÍßįÍëÍáøÍßÎßÎ"Î6Îß@ÎPÎßVÎfÎzÎ߄ΔÎßšÎĒΞÎßČÎØÎßŪÎîÎĪß ĪĪß"Ī2ĪFĪßPĪeĪßp΁Īß‹Īß‘ĪŠĪŊĪßĮĪØĪßäĪčĪáøĪßĐĐáĐß"Đ3Đß=ĐßCĐ[ĐkĐzĐ˜Đ¸ĐÉĐßĶĐßŲĐíĐķĐũĐŅŅŅ5ŅIŅßOŅá]ŅßcŅásŅß}ҁŅá™ŅßŸŅŽŅ˛ŅáÃŅßÍŅß×ŅßįŅëŅá÷ŅßŌß ŌßŌáŌŌá,Ōß6Ōß@ŌßFŌáLŌ_ŌcŌázŌ–ŌšŌá§ŌßąŌߡŌĪŌęŌĶĶß!Ķß'ĶBĶLĶVĶbĶqĶ>€ĶãŠĶãšĶãĒĶáŊĶßÃĶááĶãüĶßÔ> ÔáÔß%Ô>)Ôá6Ôß>Ô>UÔß`Ô>uÔßÔß…Ô>”Ô>ŠÔßŗÔßšÔ>ČÔ>ŨÔßįÔßíÔ>üÔ>ÕßÕß!Õ>0Õ>4ÕáEÕßOÕ>SÕádÕßoÕ>sÕá€ÕߊÕߐÕ>¨Õ>ĮÕ>įÕ>øÕßÖßÖ>Ö>AÖ>KÖ>UÖ>_Ö>iÖ>sÖ>}Ö>‡Ö>‘Ö>›Ö>ĨÖ>¯Ö>šÖ>ÃÖ>ÍÖ>×Ö>áÖ>ëÖ>×> ×>×)×ã9×ãI×X×Qg×ãq×ã×ã‘×á¤×ßĒ×áČ×ãã×ßí×Qņ×áØß ØQØáØß%ØQ<ØßGØQ\ØßfØßlØQ{ØQØßšØß ØQ¯ØQÄØßÎØßÔØQãØQøØßŲßŲQŲQŲá,Ųß6ŲQ:ŲáKŲßVŲQZŲágŲßqŲßwŲQŲQŽŲQÎŲQßŲßéŲßīŲQÚQ ÚQÚQ!ÚQ+ÚQ5ÚQ?ÚQIÚQSÚQ]ÚQgÚQqÚQ{ÚQ…ÚQÚQ™ÚQŖÚQ­ÚQˇÚQĖÚQÖÚQåÚõÚãÛãÛ$ÛS3Ûã<ÛãFÛãZÛS^ÛáoÛßyÛß„ÛS™ÛßĨÛS°ÛSēÛSÄÛSĘÛSĐÛSÚÛSāÛSúÛãÜãÜã Üã/ÜãCÜWÜãhÜlÜá}Ü߇܋Üá˜ÜßĸÜĻÜáŗÜßšÜáÃÜßÍÜß×ÜßáÜöÜßŨŨß Ũß'Ũá5Ũß?ŨCŨáVŨocŨrŨvŨá‡Ũß“ŨžŨ¨ŨŽŨ¸ŨžŨÉŨŪŨßåŨīŨųŨŪŪ*Ūã7ŪãKŪOŪábŪŨmŪßwŪ{ŪáˆŪß’Ū–ŪáŖŪߊŪáŗŪßŊŪßĮŪßŅŪæŪßņŪßßßßßá%ßß/ß3ßáFßoSßbßfßáwß߃ߎߘߞߨߎߚßÎßßÕßßßéß÷ßāāã'āá-āã8āßBāSā^āhārā|āœāãĻāã¸āãŧāâāüāãáãáã%áã)áXáráã|áãˆáã›áãŸáŧááÆáßĐáááėáöáâã â'â-âGâãVâãZâ{â‹âšâžâáĒâĩâŋâŲâããâãōâãöâã'ã2ãAããEãbãhãwãã{ãUãßĸãUĻãá˛ãßŧãUĀãáĖãßÖãUÚãáëãßõãßûãUäU$äß=äãWäãƒäã¯äãĐäãŲäããäãīäãûäã åã/åã9åãiåãsåãŒåã™åã¨åãĩåãÂåãĪåãÜåãīåãæãæãæã*æã7æãGæãfæãpæãæĄæãŽæá¸æãÃæßÉæãÔæßÚæãåæßëæãüæã įãįã/įã@įãQįbįqį†įߐįĄįß­įÂįßĖįß×įÛįáėįßöį čßččá'čß1čß7čQčUčáfčßpč…čߐč”čáĄčßĢčßąčËčĪčáāčßęč˙čß ééáéß%éß+éEéIéáZéßdéyéß„éˆéá•éߟéßĨéŋéÃéáÔéßŪéķéßūéęáęßęßę9ę=ęáNęßXęmęßxę|ęá‰ęß“ęß™ęŗęˇęáÄęÎęŨęáęáōęßüęëáëßë-ëß7ëß=ëVëZëákëßuëŠëß•ë™ëáĻëß°ëßļëĐëÔëáåëßīëėßėėá ėß*ėß0ėJėNėá_ėßiė~ė߉ėėášėߤėßĒėÄėČėáŲėßãėøėßííáíßíß$í>íBíáSíß]íríß}ííáŽíߘíßží¸íŧíáÍíß×íėíß÷íûíáîßîßî2î6îáCîMî\î`îáqîß{îîáîß›îŦîßļîßŧîÕîŲîáęîßôîøîáīßīīá īß-ī1īáBīßLīPīá]īßgīkīáxī߁īáīß™īīáŽīßšīŊīáĘīßÔīßÚīīīáũīßđđß'đ+đá8đßBđßHđ^đálđßvđ‹đß–đšđá§đßąđߡđÍđáÛđßåđúđßņ ņáņß ņß&ņ<ņáJņßTņiņßtņxņá…ņߏņß•ņĢņášņßÃņØņßãņįņáôņßūņßōōá(ōß2ō6ōáGōßRōVōácōßmōßsō‰ōá—ōߥōļōßÁōÅōáŌōßÜōßâōøōáķßķ%ķß0ķ4ķáAķßKķßQķgķáuķßķ”ķߟķŖķá°ķßēķßĀķÖķáäķßîķôßôôáôß)ôß/ôEôáSôß]ôrôß}ôôáŽôߘôßžô´ôáÂôßĖôáôßėôđôáũôßõß õ#õá1õß;õPõß[õ_õálõßvõß|õ’õá õßĒõŋõßĘõÎõáÛõßåõßëõöáößö.öß9ö=öáJößTößZöpöá~ö߈ööߨöŦöášößÃößÉößöáíöß÷ö ÷ß÷÷á(÷ß2÷ß8÷R÷V÷ág÷ßq÷†÷ß‘÷•÷áĸ÷ßŦ÷߲÷Ė÷Đ÷áá÷ßë÷ī÷áøß øßøø#øá4øß>øBøáOøßYø]øáiøßvø‡øß‘øĸøßŦøÂøßĖøßŌøäøčøáõøáų ųáųß$ųß.ų2ųáPųTųáeųßoųßyų߃ų—ųߥųßŦų°ųáŧų߯ųßĐųÔųáæųßėųáöųúųá úßúúá,úß6úß<úFúZú^úáoúß‹úúáĒúá´úßžúÂúáÚúßāúáęúßôúûßûßû#û7ûßCûMûYûcûmû€û‘ûß›ûąûßģûßÁûĪûåûßīûßųûüßüßü/ü?üTüß^üßdürüß|ü‘üß—üĻüĒüáģüßĖüáüßčüøü ũßũß!ũ6ũß<ũKũOũá`ũßmũ|ũ€ũá‘ũß›ũßĨũēũßĀũĪũĶũáäũßņũūūáūßū#ūá4ūß?ūCūáPūßZūß`ūzū‹ūšūžūá¯ūßšūßŋūáĶūßņūß÷ūá˙ß˙˙á$˙ß.˙2˙áC˙ßN˙R˙á_˙ßi˙ßo˙ˆ˙Œ˙á˙ß§˙ŧ˙ßĮ˙Ë˙áØ˙ßâ˙ßč˙áß!6ßAEáRß\ßb|€á‘ß›°ßģŋáĖßÖßÜöúá ß*ß59áFßPßVptá…ߏ¤ß¯ŗáĀßĘßĐęîá˙ß ß)-á:ßDßJdy߃˜ßŖ´ßžßÄŪķßũß.ß8ß>Wlßv‹ß–§ßąßˇĐåßīß ß*ß0I^ßh}߈™ßŖßŠÂ×ßáößßß";PßZoßz‹ß•ß›´ÉßĶčßķßß-BßLaßl}߇ߏ™Ŗ­ŗŊĮŅÛåīūá(ß2ß<ßFßR\`áqß{ß›ŸáŦßļßŧÖÚáëßõ ßá&ß0ß6PTáeßo„ߏ“á ßĒß°ĘÎáßßéūß  á ß$ ß* D H áY ßc x ߃ ‡ á” ßž ߤ ž  áĶ ßŨ ō ßũ  á ß ß 8 I X \ ám ßw { ጠߗ ¨ ߲ ߸ Ō Ö áį ßņ  ß  á" ß, ß2 L P áa ßk € ß‹  ᜠßĻ ßŦ Æ Ę áÛ ßå ú ß  á ß ß& @ D áU ß_ t ß ƒ ᐠߚ ß  ē ž áĪ ßŲ î ßų ũ á ß ß 4 8 áI ßS h ßs w ᄠߎ ß” Ž ŋ Î Ō áã ßí ņ áß ß(ß.HLá]ßg|߇‹á˜ßĸß¨ÂÆá×ßáößáßß"<@áQß[pß{áŒß–ßœļēáËßÕęßõųáßß04áEßOdßosá€ßŠßĒŽáŋßÉŪßéíáúßß $5DHáYßcgáx߃”ߞߤžĶßŨōßũßß8MßWlßwˆß’ߘ˛ĮßŅæßņß ß-ß7LßWhßrßx’§ßąÆßŅâßėßō !ß+@ßK\ßfßl†›ßĨēßÅÖßāßæß4ß?PßZß`zß™ŽßšĘßÔßÚô ß(ß3DßNßZoßyŽß™Ēß´ßēÔéßķß$ß.ß4Ncßm‚ߍžß¨ßŽČŨßįüßß"ß(BWßav߁’ßœßĸŧŅßÛđßû ßß6KßUjßu†ßßœąßģĐßÛėßößü+ß5JßUfßpßvĨ߯ÄßĪāßęßđ ß)>ßIZßdßj€Š”ž¨˛¸ÂĖÖāęôū",6@JT^hrx‚Œ– Ē´žČĶááßëīáß áß*.á;ßEßKeiázß„™ß¤¨áĩßŋßÅßãáôßūß"á/ß9ß?Y]ánßxß˜œáŠßŗßšĶ×áčßōßá#ß-ß3MQábßlßŒáß§ß­ĮËáÜßæûß  á ß! ß' A V ß` u ߀ ‘ ß› ߥ ģ Đ ßÚ ī ßú  !ß!ß!5!J!ßT!i!ßt!…!ߏ!ß•!¯!Ä!ßÎ!ã!ßî!˙!ß "ß")">"ßH"]"ßh"y"߃"߉"Ŗ"¸"ßÂ"×"ßâ"ķ"ßũ"ß##2#ß<#Q#ß\#m#ßw#ß}#—#Ŧ#ßļ#Ë#ßÖ#į#ßņ#ß÷#$&$ß0$E$ßP$a$ßk$ßs$}$‡$‘$—$Ą$Ģ$ĩ$ŋ$É$Ķ$â$ķ$%%á%ß!%6%ßA%E%áR%ß\%ßb%|%€%á‘%ß›%°%ßģ%ŋ%áĖ%ßÖ%ßÜ%ö%ú%á &ß&*&ß5&9&áF&ßP&ßV&p&t&á…&ߏ&¤&߯&ŗ&áĀ&ßĘ&ßĐ&ę&î&á˙&ß ''ß)'-'á:'ßD'ßJ'd'h'áy'߃'˜'ßŖ'§'á´'ßž'ßÄ'Ū'ī'ū'(á(ß(!(á2(ß=(N(ßX(ß^(x(|(á(ß—(›(áŦ(ßļ(ßŧ(Õ(æ(ßō()ß)&)ß1)B)ßL)ßR)l))ß‹) )ßĢ)ŧ)߯)ßĖ)æ)û)ß**ß%*6*ß@*ßF*`*u*ß*”*ߟ*°*ßē*ßĀ*Ú*ī*ßų*+ß+*+ß4+ß:+T+i+ßs+ˆ+ß“+¤+ߎ+ß´+Ę+Ô+Ū+č+î+ø+, ,, ,*,4,>,J,áT,ã_,ßi,m,á~,߈,Œ,á,ߨ,Ŧ,áš,ßÃ,ßÉ,ã,į,áø,ß--ß"-&-á3-ß=-ßC-]-a-ár-ß|-‘-ßœ- -á­-ߡ-ßŊ-×-Û-áė-ßö- .ß..á'.ß1.ß7.Q.U.áf.ßp.….ߐ.”.áĄ.ßĢ.ßą.Ë.Ī.áā.ßę.˙.ß //á/ß%/ß+/E/I/áZ/ßd/y/ß„/ˆ/á•/ߟ/ßĨ/ŋ/Ô/ßŪ/ķ/ßū/0ß0ß090N0ßX0m0ßx0‰0ß“0ß™0ŗ0Č0ßŌ0į0ßō01ß 1ß1-1B1ßL1a1ßl1}1߇1ߍ1§1ŧ1߯1Û1ßæ1÷1ß2ß2!262ß@2U2ß`2q2ß{2߁2›2°2ßē2Ī2ßÚ2ë2ßõ2ßû23*3ß43I3ßT3e3ßo3ßu33¤3ߎ3Ã3ßÎ3ß3ßé3ßī3444#4)434=4G4Q4[4e4t4…4”4˜4áŠ4ßē4ž4áĪ4ßŲ4ßä4č4áų4ß˙4á 5ß5,5ß65G5ßQ5ß]5r5ß|55ߟ5´5ßģ5Ę5Û5ßå5ö5ß66ß 6ß&646J6ßT6ß^6t6ß~6ß„6™6Ž6߸6ßÃ6Į6áØ6ßâ6÷6ß77á7ß7ß#7=7A7áR7ß\7q7ß|7€7á7ß—7ߝ7ˇ7Ė7ßŌ7ä7ßî78ß 88ß(8ß48I8ßS8d8ßv8‹8ß’8Ą8˛8ßŧ8Í8ß×8í8ß÷8ßũ8 9'9ß19M9ßS9h9}9߇9œ9ß§9¸9ßÂ9ßČ9â9÷9ß::ß!:2:ß<:ßB:[:p:ßz::ßš:Ģ:ßĩ:ßģ:Õ:ę:ßô: ;ß;%;ß/;ß5;N;c;ßm;‚;ߍ;ž;ߨ;ߎ;Į;Ü;ßæ;û;ß<<ß!<ß'<@<U<ß_<t<ß<<ßš<ß <š<Î<ߨ<í<ßø< =ß=ß=2=G=ßQ=f=ßq=‚=ߌ=ß’=Ģ=Ā=ßĘ=ß=ßę=û=ß>ß > >2>ß<>Q>ß\>m>ßw>ß}>’>¤>ߎ>Ã>ßÎ>ß>ßé>ßī>??ß ?5?ß@?Q?ß[?ßa?w?‰?ß“?¨?ßŗ?Ä?ßÎ?ßÔ?ę?ü?ß@@ß&@7@ßA@ßG@]@o@ßy@Ž@ß™@Ē@ß´@ßē@Đ@â@ßė@Aß AAß'Aß-ACAUAß_AtAßAAßšAß AļAČAßŌAįAßōABß BßB)B;BßEBZBßeBvB߀B߆BœBŽB߸BÍBߨBéBßķBßųBC!Cß+C@CßKC\CßfCßlC‚C”CßžCŗCßžCĪCßŲCßßCõCDßD&Dß1DBDßLDßRDhDzDß„D™DߤDĩDßŋDßÅDÛDíDß÷D EßE(Eß2Eß8EME_EßiE~E߉EšEߤEßĒEŋEŅEßÛEđEßûE FßFßF1FNFoF€FߊFߐFĨF¯FšFÃFÉFĶFŨFįFņFûFGGG#G)G3G=GGGQG[GeGkGuGG‰G“GG§GąGģGÅGËGÕGßGéGķGũGHHH%H/H5H;HEHOHVHoHãyHãƒHãHãŧHãÅHãĪHãÛHãįHãõHãIIã"Iß,ICI_NIßTIcIxIß‚I߈I—IŦIßļIßŧIËIāIßęIûIßJJß"J&Já7JßAJEJáXJßbJßlJßvJzJá‘Jß›JŸJáąJßšJáÃJĮJáÔJßŪJßčJßîJáøJüJá KßKßKß#Ká-Kß7K;KáLKßVKß\KáfKjKávK߀KߊKŽKášKߤKߎKß´KÆKĘKá×KßáKßëKßõKß˙KLáLßLß$Lß*Lá4Lß>LBLáNLßXLßbLßhLárLß|LLßšLß LĢLŋLßÉLßĪLŲLåLīLųLMMá(Mß2M6MáIMßSMß]MßcMáqMuMá‚MߌMß–MßœMáĻMĒMáˇMßÁMßËMßŅMáÛMßåMéMáúMßNß NáNNá$Nß.Nß8NOßHOßNOYOmOßwOß}O‡O“OO§OŋOÃOáÚOßäOčOáúOßPPß!P7PßAPßGPUPkPßuPßP•PߟPßĨPēPžPáĪPßŲPŨPáđPßúPßQßQQá)Qß3Q7QáIQßQQá[Q_QálQßvQ߀Q߆QáQ”QáĄQßĢQßĩQßģQáÅQßĪQĶQáäQßîQßôQáūQRáRßRß"R&Rá2RßxBxáSxß^xbxáoxßyxßx™xxáŽx߸xŧxáÍxߨxÜxáéxßķxßųxyyá(yß2y6yáGyßRyVyácyßmyßsyy‘yáĸyßŦy°yáÁyßĖyĐyáŨyßįyßíyz zázß&z*zá;zßFzJzáWzßazßgzz…zá–zß z¤záĩzßĀzÄzáŅzßÛzßázûz˙zá{ß{{á/{ß:{>{áK{ßU{ß[{u{y{áŠ{ß”{˜{áŠ{ß´{¸{áÅ{ßĪ{ßÕ{ī{ķ{á|ß||á#|ß.|2|á?|ßI|ßO|i|m|á~|߈|Œ|á|ߨ|Ŧ|áš|ßÃ|ßÉ|ã|į|áø|ß}}á}ß"}&}á3}ß=}ßC}]}a}ár}ß|}€}á‘}ßœ} }á­}ߡ}ßŊ}×}ė}ß÷}û}á ~ß~ß ~5~ß?~P~ßZ~k~ßt~ƒ~‡~á˜~ßĸ~Ļ~áˇ~ßÂ~Æ~áĶ~ßŨ~ßã~ų~ß *4CGáXßbßlß‹œßώßĀĪĶáäßîōá€ß€€á€ß)€ß/€I€^€ßh€}€ßˆ€™€ßŖ€ßŠ€À؀ßâ€÷€ßßß)>ßH]ßhyßƒß‰ĸˇßÁցßáōßüß‚‚1‚ß;‚P‚ß[‚l‚ßv‚ß|‚–‚Ģ‚ßĩ‚š‚áʂßՂŲ‚áæ‚ßđ‚ßö‚ƒ%ƒß/ƒDƒßOƒ`ƒßjƒßvƒ‹ƒß•ƒǃßĩƒƃßЃßփđƒ„ß„$„ß/„@„ßJ„ßV„Z„ák„ßu„y„ኄߔ„ßš„ŗ„ĄßЄå„ßī„…ß… …ß*…ß0…J…_…ßi…~…߉…š…ߤ…ß°…ŅßĪ…ä…ßī…†ß †ß†+†ß5†J†ßU†f†ßp†ßv†Œ†’†œ†ĸ†¨†˛†ŧ†Ɔˆֆā†ę†đ†ú†‡‡‡‡$‡*‡4‡>‡D‡N‡X‡b‡l‡w‡‹‡›‡ã̇ãģ‡áŇãڇŪ‡áī‡ßų‡ßˆˆß"ˆ3ˆß=ˆNˆßWˆfˆjˆá{ˆß…ˆ‰ˆášˆßĨˆЈáļˆßˆßƈۈâˆáķˆßũˆ‰á‰ß‰!‰á.‰ß8‰ß>‰V‰Z‰ák‰ßu‰y‰áЉß•‰™‰áωß°‰ßļ‰ΉŌ‰áã‰ßí‰ņ‰áŠß ŠŠáŠß(Šß.ŠFŠJŠá[ŠßeŠiŠázŠß…ЉŠá–Šß ŠßϊļŠēŠáˊßՊęŠßõŠųŠá‹ß‹ß‹0‹4‹áE‹ßO‹S‹ád‹ßo‹s‹á€‹ßЋߐ‹Ē‹Ž‹áŋ‹ßɋ͋áŪ‹ßé‹í‹áú‹ßŒß Œ$Œ(Œá9ŒßCŒGŒáXŒßcŒgŒátŒß~Œß„ŒžŒĸŒáŗŒßŊŒԌßŨŒáŒáîŒßøŒßūŒá-ß7;áLßW[áhßrßx’–á§ßąƍßŅՍáâßėßō ŽŽá!Žß+Ž/Žá@ŽßKŽOŽá\ŽßfŽßlŽ†ŽŠŽá›ŽßĨŽēŽßŎɎá֎ßāŽß掏áßß)>ßHYßctß}ŒáĄßĢ¯áĀßˏĪá܏ßæßė áß%)á:ßEIáVß`ßf€„á•ßŸŖá´ßŋÐáАßڐßāö ‘ß‘‘'‘1‘;‘J‘N‘á_‘ßi‘ßs‘ˆ‘ß’‘Ŗ‘ß­‘ž‘ßĮ‘֑ڑáë‘ßõ‘ų‘á ’ß’’á&’ß0’ß6’P’e’ßo’„’ߏ’ ’ßĒ’ß°’ʒߒßé’ū’ß ““ß$“ß0“E“ßO“d“ßo“€“ߊ“ߐ“Š“ž“ßȓŨ“ßč“ų“ß”ß ”#”8”ßB”W”ßb”s”ß}”߉””បߨ”Ŧ”áŊ”ßĮ”ß͔æ”÷”ß••ß"•7•ßB•S•ß]•ßc•{••ßš•¯•ßē•˕ßՕßەķ•–ß–'–ß2–C–ßM–ßY–n–ßx––ߘ–Š–ßŗ–ßš–Ķ–č–ßō–—ß—#—ß-—ß3—M—b—ßl——ߌ——ß§—ß­—Į—ܗßæ—û—ߘ˜ß!˜ß-˜B˜ßL˜a˜ßl˜}˜ß‡˜ß˜§˜ŧ˜ßƘۘßæ˜÷˜ß™ß™!™6™ß@™U™ß`™q™ß{™ß™™™Ž™ß¸™͙ßؙé™ßķ™ß˙™šßš"šá3šß>šBšáOšßYšß_šsšyšƒšš—šĄš§šąšģšŚ˚՚ߚéšīšųš˙š›››#›)›3›=›G›M›W›a›k›q›{›…››•›››Ĩ›¯›š›ě؛ė›ãų›ãœáœã'œß-œã>œãOœãdœhœáyœßƒœßœĄœß̜œß˜ܜßæœßėœá+ß5ß;JNá_ßißswáˆßŽ™á´ßžáŲßߝîōá žßžž5žßAžEžáVžß`žßjžnžá~žß„žž“žáŸžßŠž­žáƞßĶžčžßîžõž˙žŸŸŸá%Ÿß/Ÿ3ŸáDŸßOŸSŸá`ŸßjŸßpŸ‰ŸŸážŸß¨ŸŦŸáŊŸßĮŸ˟á۟ßåŸúŸß   á ß  ß& > N ßT ` { ß… ‰ á  ßĢ ¯ á ßΠŌ áß ßå ņ õ áĄßĄĄá Ąß*Ą.Ąá?ĄßJĄNĄá[ĄßeĄßkĄ†ĄŠĄá›ĄßĨĄŠĄáĩĄßŋĄÔĄßߥãĄáđĄßúĄßĸĸ0ĸß:ĸJĸßTĸiĸßtĸ…ĸߏĸß•ĸ¯ĸÄĸßÎĸŪĸßčĸũĸßŖŖß#Ŗß)ŖCŖXŖßbŖwŖß‚Ŗ“ŖßŖßŖŖ¸ŖÂŖĖŖÖŖāŖęŖôŖūŖ¤¤¤#¤=¤ãF¤ãP¤ã]¤ãj¤ã‡¤ã­¤ãƤãΤãŲ¤ãå¤ãņ¤ã˙¤ãĨ]%Ĩã2ĨãRĨá\ĨãpĨ]tĨá…ĨߏĨß™ĨßŖĨ]§ĨáŗĨßŊĨßĮĨßÍĨ]ŲĨ]ŨĨáîĨßøĨßĻ] ĻáĻß#Ļß3Ļ]7ĻáDĻßNĻßZĻádĻßnĻ]rĻáĻ߉Ļß•ĻáŸĻߊĻ]­ĻáēĻßÄĻßĘĻ]ßĻ]ãĻáôĻß§]§]§á$§ß.§]2§áC§ßN§]R§á_§ßi§ßo§]‡§]œ§ßϧ]ģ§ßƧ]×§ßá§ßį§]û§]¨á ¨ã¨ã$¨ß*¨ã5¨ß;¨ãF¨ßP¨]T¨áe¨ßo¨ßy¨ß¨á‰¨ß“¨]ĩ¨]ƨßŲ¨]Ũ¨áô¨ß˙¨]ŠáŠß Šá*Š]:ŠßJŠ]ZŠßdŠßnŠßtŠ]†Š]ŠŠá›ŠßĨŠß¯ŠßšŠ]ŊŠáÉŠßĶŠßŨŠßãŠ]īŠ]ķŠá ĒßĒß$Ē](Ēá;ĒßKĒßUĒ]YĒáfĒßvĒß|Ēá†ĒߐĒ]”Ēá Ēß°ĒßļĒáĀĒßĘĒ]ŪĒßčĒßîĒ]ųĒ]ĢßĢ]#Ģ]/Ģ]9Ģ]CĢ]WĢ][ĢárĢß|ĢߌĢ]ĢáŖĢß­ĢßŊĢ]ÁĢáÎĢߨĢßäĢáîĢßøĢ]üĢáŦßŦßŦß"Ŧá,Ŧß6Ŧ]JŦßTŦßZŦ]eŦ]yŦ߃Ŧ߉Ŧ]“Ŧ]ŸŦ]ŠŦ]ŗŦ]ĮŦ]âŦßėŦßöŦ]­ß­ß­]$­]4­ß>­ßH­]L­áX­ßb­]f­ár­ß|­]€­á‘­ß›­ßĄ­]š­]Ę­ßÛ­]ü­ßŽ]Ž],Žß6Ž]RŽßXŽ]jŽ]…ŽßŽß™Ž]ŠŽßŗŽßšŽ]ÃŽ]ÔŽ]õŽßûŽ] ¯]%¯ß/¯]K¯ßQ¯]c¯]~¯ßˆ¯]ž¯ß¨¯]¸¯ß¯]ׯßâ¯]ķ¯ßũ¯ß°]°]#°]-°]7°]B°]a°ã‚°’°áœ°ã­°ãž°ãΰãã°ú°_ąmąą!ąá2ąß<ą@ąáMąßWą[ąágąßtąxąá‰ąß“ąßąßŖąáļąßŧąáĘąßÔąØąáéąßķąßũąß˛ ˛á˛ß&˛ß0˛ß:˛>˛áO˛ßV˛a˛l˛p˛á˛ß‹˛ß•˛Ǟß´˛ßž˛ßȲØ˛ßâ˛ßė˛ßō˛ú˛ ŗŗß(ŗ=ŗßHŗYŗßcŗßiŗŗ…ŗá–ŗß ŗßĒŗß´ŗ¸ŗáÉŗßĶŗßŨŗßįŗüŗß´´´´á.´ß8´ßB´W´ßa´ßk´ßu´…´ß´ß™´ßŸ´§´ļ´Ë´ßÕ´ę´ßõ´ĩßĩßĩ0ĩEĩßOĩdĩßoĩ€ĩߊĩߐĩ¨ĩŊĩßĮĩÜĩßįĩøĩßļßļļ-ļBļßLļ]ļßgļwļß„ļˆļá™ļßŖļß­ļąļážļßČļßŌļÖļáæļßđļßöļáˇß ˇˇá ˇß*ˇß0ˇá:ˇßFˇJˇáVˇß`ˇßfˇápˇß~ˇ‚ˇá“ˇßˇĄˇá˛ˇßŧˇßÆˇßСÔˇáāˇßęˇßđˇáúˇūˇá ¸ß¸ß¸"¸á.¸ß8¸<¸áH¸ßR¸V¸ág¸ßq¸ßw¸¸Ą¸ß˛¸øß͸ã¸ßí¸ßķ¸ššß!šß+šAšßKšßQšaškšwš{šáŒšß–šĢšßļšēšáĮšßŅšßךīšķšáēßēßēēá.ēß8ē<ēáMēßXē\ēáiēßsēßyē‘ē•ēáĻēß°ēßēēßÄēßÎēßÔēßēãēáôēßūēģßģß'ģß1ģAģßKģßQģ_ģoģßyģ߃ģ‡ģá“ģߝģĄģá­ģߡģģģáĖģßÖģßÜģõģŧßŧ(ŧß2ŧHŧßRŧßXŧfŧ|ŧ߆ŧߐŧĻŧß°ŧßļŧĘŧßŧßéŧßôŧ ŊßŊßŊ"Ŋá3Ŋß=ŊßHŊ]ŊßgŊkŊá|Ŋ߇Ŋ‹Ŋá˜ŊßĸŊߨŊĀŊÕŊßßŊôŊß˙Ŋžßžß ž4ž:žDžNžXžbžlžvž|ž‡ž–žãšžˇžáÅžßĪžĶžáäžßîžōžáŋß ŋßŋŋá,ŋß6ŋJŋßPŋ_ŋcŋásŋß}ŋ’ŋߝŋĄŋáŽŋ߸ŋßžŋÖŋīŋĀĀß)Āß/ĀDĀNĀYĀdĀnĀxĀ‚ĀĀœĀ_ĢĀãĩĀãÅĀãŲĀ_ŨĀáîĀßúĀõÁ_Á_Áá%Áß/Á_3ÁáDÁßOÁ_SÁá`ÁßjÁßpÁ_ˆÁ_ŒÁáÁß§Á_ĢÁážÁßČÁ_ßÁßéÁßķÁ_Âß ÂßÂ_!Â_1Âß;ÂßEÂ_IÂáUÂß_Â_cÂáoÂßyÂ_ŽÂß™Â_ÂáĒÂß´ÂßēÂ_ÖÂáéÂßķÂ_÷ÂáÃßÃ_Ãá'Ãß1Ãß7Ã_OÃ_`ÃßlÃ_pÃáÃß‹Ãß•Ã_ĒÃß´ÃßžÃßČÃ_ØÃßâÃßėÃßōÃ_úÃ_ Ä_(Ä_HÄ_YÄßcÄßiÄ_}Ä_ŒÄ_Ä_¨Ä_˛Ä_ŧÄ_ÆÄ_ÕÄåÄãõÄãÅÅa#Åã-Åã=ÅãQÅaUÅáfÅßrÅõyÅaˆÅaŒÅáÅß§ÅaĢÅáŧÅßĮÅaËÅáØÅßâÅßčÅaÆaÆáÆßÆa#Æá6Æß@ÆaDÆáWÆßaÆßkÆaoÆá{Æß…Æß‹Æá•Æa™ÆáĨÆß¯ÆßšÆaŊÆáÉÆßĶÆaׯáãÆßíÆaĮß ĮaĮáĮß(Įß.ĮaJĮá]ĮßgĮakĮá|Į߆ĮaŠĮá›ĮßĨĮßĢĮaÃĮaÔĮßāĮaäĮáõĮß˙Įß ČaČß(Čß2Čß<ČaLČßVČß`ČßfČanČa}ČaœČaŧČaÍČß×ČßŨČaņČaÉa)Éa4ÉaTÉa^ÉahÉawɇÉã—Éã§ÉļÉãēÉcÎÉßáÉcåÉáņÉßûÉc˙Éá ĘßĘcĘá&Ęß0Ęc4ĘáEĘßOĘßUĘcmĘc~ĘߘĘã¤ĘãąĘãžĘãÍĘãņĘãËã>ËãGËãQËã]ËãiËãwËã‰ËãËeĒËá¸ËßÂËßĖËßÖËeÚËáëËßöËeúËá ĖßĖßĖe#Ėá0Ėß:ĖßDĖeHĖáYĖßcĖßvĖezĖáŠĖߝĖeĄĖáŗĖßšĖáÃĖeĮĖáŲĖßãĖeįĖáųĖßÍß ÍeÍe&Íe6ÍßKÍeOÍámÍeqÍá‚ÍߌÍßĸÍeĻÍáŗÍßÅÍáĪÍßŲÍeŨÍáéÍßųÍß˙Íá ÎßÎe-Îß7ÎeMÎßSÎe_ÎesÎß}Î߃ÎeÎe™ÎeŖÎe­ÎeĀÎeŅÎßÛÎeņÎßûÎßĪeĪe%Īß/Īß9ĪeOĪßYĪß_ĪepĪá~Īß„ĪeŽĪe”ĪežĪe¨Īe˛Īe¸ĪeŋĪeÉĪeĶĪeŨĪečĪeōĪeĐãĐãĐã'Đã4ĐãaĐã‡Đã ĐãŠĐãŗĐãŋĐãËĐãŲĐãëĐg˙Đã Ņã,Ņá6ŅãJŅg_ŅßiŅßsŅß}ŅgŅß—ŅߥŅßĢŅgģŅßÅŅßËŅgØŅgÜŅáķŅßųŅgŌgŌáŌß#Ōß3Ōg7ŌáDŌßNŌß^ŌgbŌáoŌßyŌß…ŌáŌß™ŌgŌáĒŌß´ŌßĀŌáĘŌßÔŌgåŌßīŌßųŌgũŌá ĶßĶßĶg0Ķg4ĶáEĶßUĶgYĶáfĶßrĶg‚Ķg†Ķá—ĶߥĶgĨĶá˛ĶßŧĶgĀĶáŅĶßÜĶgāĶáíĶß÷ĶßũĶgÔg'Ôß1ÔgBÔßLÔgaÔßlÔg}Ô߇ÔߍÔgŖÔá­ÔãēÔãÅÔßËÔãÖÔßÜÔãįÔßņÔgõÔáÕßÕßÕß Õá*Õß4ÕgVÕggÕßzÕg~Õá•Õß Õg¤ÕáĩÕßÁÕáËÕgÛÕßëÕgûÕßÖßÖßÖg'Ög+Öá<ÖßFÖßPÖßZÖg^ÖájÖßtÖß~Ö߈ÖgŒÖá˜ÖßĸÖߨÖgĩÖgšÖáĐÖßāÖßęÖgîÖá×ß×ß×g×á,×ß<×ßB×áL×ßV×gZ×áf×ßv×ß|×á†×ߐ×g¤×ߎ×߸×gČ×ßÔ×gā×gú×ߨg ØgØg Øg*Øg>ØgBØáYØßcØßsØgwØáŠØß”Øß¤Øg¨ØáĩØßŋØßËØáÕØßߨgãØáīØßųØßŲáŲßŲg3Ųß=ŲgSŲßYŲgeŲgyŲ߃Ų߉Ųg“ŲgŸŲgŠŲgŗŲgĮŲgâŲßėŲßöŲgÚßÚßÚg$Úg4Úß>ÚßHÚgLÚáXÚßbÚgfÚárÚß|Úg€ÚáÚß—Úg›ÚáŦÚßļÚßŧÚgÔÚgåÚß÷ÚgÛßÛg,ÛgHÛßRÛgnÛßtÛg†ÛgĄÛßĢÛßĩÛgÅÛßĪÛßÕÛgßÛgđÛgÜßÜg%ÜgAÜßKÜggÜßmÜgÜgšÜߤÜgēÜßÄÜgÔÜßŪÜgīÜßųÜgŨßŨg*Ũß4Ũß:ŨgQŨg[ŨgeŨgoŨgzŨgŽŨĸŨã¯ŨášŨãÄŨßÎŨŌŨáãŨßīŨŨúŨūŨá ŪßŪáŪß)Ū-Ūá>ŪßJŪYŪ]ŪánŪßzŪ…ŪŪ•ŪŸŪĨŪŦŪŧŪĀŪáŅŪßÛŪßŪáėŪßöŪúŪáßß ßáßß!ßß+ßß5ß9ßáQßUßáfßßpßßzß~ßá‹ßß•ßßŸßŖßáÁßÅßáÖßßāßßęßßôßāßāßā!āá-āß7āßAāEāáWāß]āágākāá}ā߇ā‹āáāß§āß­āˇāËāĪāáāāßęāßááááß#áá-áß7á;ááGáßWáß]áágáßqá‹áß•áĢáßąáŊáŪáčáôáūáââ5âKâßUâß[âiââ߉âß“âŠâßŗâßšâĘâáØâßŪâčâîâøâã ããã#ã-ã7ãIãMãádãhãá{ãß…ã‰ãá›ãßĨãŠãáĩãßŋãÃãáĐãßÚãīãßúãūãá äßäßä7ä;äáLäßVäZäágäßmäáwä߁ä…äá–äßĸäąäĩäáÆäßŌäŨäįäíä÷äũä ååß!å-å7åAå^åãhåã|åã€åå§åÁåãËåã×åããåãīåãææã!æã1æãAæãQæãaæãqæáŒæã—æßæãąæÕæęæîæáįß įįá+į/įáEįIįá^įoį„įߎįß”įŖį§įá¸įßÂįÆįáĶįßŲįéįíįáūįßčßččá(čß2čß8čáEčUčYčájčßtčßzčá‡č—č›čáŦčßļčßŧčáÉčÕčáččßōčöčáéßééá"éß(é8é<éáMéßWéß^éádéãoéßyé}éáŽéߘéœéáŠéßŗéˇéáÄéßĘéáÔéßŪéßčéßōéöéáęęá#ęß-ęß7ę;ęáHęßRęß\ę`ęá~ę‚ęá“ęߝęß§ęßąęÅęßĪęßÚęŪęáęęßôęßūęëáëßëá$ë(ëá:ëßDëHëáZëßdëßjëtëˆëŒëáëß§ëßŊëÁëáÎëßāëáęëßôëøëáėßėßėá$ėß.ėHėßRėhėßnėzėŽėߘėßžė¨ė´ėžėČėÛėėėßöė íßíßí*í@íßJíßTíjíßtíßzí‹íá™íߟíŠí¯íšíÃíÍíĶíÚíäíîíøí îîá,î0îáAîßKîßQîábîfîárîß|îß‚î“î—îá¨î߲î߸îáÉîÍîáŲîßãîßíîīß īīß'ī8īßAīRīVīágīßqīßwīáˆīŒīá˜īßĸīߨīšīŊīáÎīߨīßŪīáīīķīá˙īß đßđ(đß2đCđßMđ^đßgđxđ|đáđß—đ›đáŦđߡđģđáČđßŌđߨđđđņßņ$ņß/ņ@ņßJņßPņdņtņ‰ņß“ņ¤ņß°ņ´ņáÅņßĪņßŲņßãņßíņß÷ņ ōßōōá*ōß5ō9ōáFōßPōßVōnō‚ōߌōĄōßŦōŊōßĮōßÍōáōįōņōüōķßķ,ķß8ķ<ķáMķßWķ[ķálķßwķ{ķáˆķß’ķߘķ°ķÅķßËķÚķīķßųķ ôßôô#ôá4ôß>ôßDôáQôaôeôávô߀ô߆ôá—ô›ôá§ôßąôßģôŋôáĐôßÚôŪôáëôßõôųôáõßõ õ5õß;õJõ_õßiõyõßõ‹õõß§õŧõßĮõØõßâõßčõüõö ööö&ö,ö6ö@öGöhö|öã‰öãöĄöá˛ößŧöĀöáŅößÜöāöáíöß÷ößũö÷÷á*÷ß4÷8÷áI÷ßT÷X÷áe÷ßo÷ßu÷÷ĸ÷ßŦ÷Á÷ßĖ÷Ũ÷ßį÷ßí÷ø$ø(øáDøHøáUøß_øßeøyøƒøø—øĄøĢøŌøãÜøãčøãûøã˙øųá3ų7ųáHųßRųVųácųßmų‚ųߍųžųߨųšųßĮųËųáÜųßæųęųáöųßúúáúßúß!ú2ú6úáGúßQúUúábúßlúpúá}ú߇úß‘ú•úáĻúß°ú´úáÅúßĐúÔúááúßëúßņúûû û5ûß?ûOûßUûeûzûß„û•ûß›û§ûąûˇûŊûĮûÍûØûÜûáíûß÷ûûûá üßüüá(üß2üß8üPüeüßoü„üߏü üßĒüß°üÄüÚüãéüãũũã/ũãCũaũßkũßuũ”ũ¤ũ¨ũášũßŋũáÎũāũßęũîũá ūūá!ūß+ūß1ūáBūFūáRūß\ūßbūsūwūá•ū™ūá°ūßģūŋūáĐūßÚūßāūáņūõūá˙ß ˙ß˙"˙&˙á=˙ßC˙áT˙X˙áj˙ßt˙x˙á˙“˙áĻ˙Ē˙áŧ˙Í˙Ņ˙áâ˙ßė˙ßō˙á  á ß ß# 4 E ßO ßU j n áz ß„ ߊ œ ą ßģ Ë ßŅ á ö ß  ß " ( 8 < áM ßW ß] áj z ~ Ꮰߙ ߟ á° ´ áĀ ßĘ ßÔ Ø áé ßķ ÷ á ß  á ß( 9 = áN ßX ß^ ák {  ᐠߚ ß  áą ĩ áÁ ßË ßÕ ę ßô  ß   ß) : > áO ßY ß_ ál | € á‘ ß› ߥ Ꭰž  áĶ ßŨ ßã áđ   á ß # á/ ß5 E I áZ ßd h áy ß„ ˆ ᕠߟ ßĨ ž Ķ ßŨ ō ßũ  ß ß 6 K ßU e ßk w } ƒ  “  Ŗ ŋ Ī ãß ãķ ÷ á ß  á' ß2 6 áC ßM ßS k € ߊ Ÿ ߊ ßŗ ßŊ Í ß× ßŨ ë û ß ß  á ß) - á9 ßC X ßc g át ß~ ß„ Ŗ ´ ßž Ô ßŪ ßä ō  ß ß 2 ß< ßB V u • Ļ ß° ßļ Ę č î ø ū  ã& ã0 ã= ãJ ãb ãl ム㌠㖠ãĸ ㎠ãĘ ãî  ã ã ã/ á9 ãD ßJ ãU ß_ c át ߀ Ũ‹  ᜠßĸ á° ßē ž áĪ ßÛ ę î á˙ ß   & 0 6 = M Q áb ßl ßr }  á’ ßœ   á­ ßŋ à áÔ ßŪ â áī ß  á ß ß* ß4 8 áI ßS ßY d h áy ߃ ‡ ᗠߥ ß§ ˛ ļ áÆ ßĐ ßÚ Ū áę ßô ßú   á ß$ ( á5 ß? C áT ß_ c áp ßz ߀ ‘ Ą ßĢ ŧ ߯ Ę áÛ ßæ ę á÷ ß ß ! % á6 ßL ` ßj ßt „ ߎ ß”   ¤ á´ ßž  áÎ ßØ Ü áé ßķ  ß  á$ ß. ß4 P d ßn ~ ߈ ™ ßŖ ¸ ßÃ Ô ßŪ ßä ü    á  ß* . á: ßD H áU ß_ t ß ƒ ᐠߚ ß  ģ ŋ áĐ ßÚ Ū áë ßõ   ß  á& ß0 ß6 P e ßo € ߊ Ÿ ßĒ ģ ßÅ ßË ä õ ß˙  ß * ß4 I ßT e ßo ßu ’ – á§ ßą ĩ á ßĖ á ßė đ áũ ß ß  ' + á< ßF [ ßf j áw ߁ ߇   ĩ ßŋ Đ ßâ æ á÷ ß ß   á ß& ß, < @ áQ ß[ _ áp ß{  ጠߖ ßœ ĩ š áĘ ßÔ Ø áå ßë áõ ß˙  á ß  / 3 áD ßP [ e k u { ˆ Œ ᝠߧ ßą ĩ áÆ ßĐ ßÚ ßä č áô ßū ß ß  á" ß, ß6 K ßU j ßu † ߐ ß– Ģ ą ē É Ū ßä ķ  ß # ß- B ßM ^ ßh ßn ‡ œ ßĻ ģ ߯ × ßá ßį ˙  ß ) H h ƒ ߉ ž ¨ Ž ĩ ŋ É â ö ã ã á ã- ã8 ßB F áW ßa e á~ ߊ Ž áŸ ßŠ ßŗ ˇ áÄ ßÎ ßÔ ä č áų ß  á ß# ' á4 ß> ßD \ ` áq ß{ ß… ‰ á– ß  ßĻ ļ Ë ßÕ ßÛ ę   ) : ßD ßJ ^ i ˆ 㒠㟠ãģ Ī ãė ã  á ß ß) ß3 H ßR g ßr ƒ ߍ ß“ § ­ ¸ ŧ áÍ ß× Û áė ßö ú á  ß  á' ß1 ß7 O S á` ßj n á ߊ Ž á› ßĨ ßĢ Ā Ę Ô Ú ķ  ã# - F f ãv ဠ㔠˜ áĢ Ũļ ßŧ áÉ Ų Ũ áî ßø ü á  ß  á) ß3 ß9 Q U áf ßp … ߐ ” ᥠßĢ ßą É Ū ßč ø ß  ß ß# 4 I ßS W áh ßs w ᄠߎ ß” Ŧ Á ßË ā ßë ü ß! ß ! $! 9! ßC! S! ßY! e! k! u! {! †! š! Ē! á´! ãŋ! ßÅ! ãĐ! ßÖ! ãá! ßį! ãō! ßø! ã" ß " ã" ß" ã%" ß+" ã6" ß@" Q" `" d" áu" ß" ƒ" á" ßš" ž" áĢ" ß´" áž" ãÉ" ßĪ" ãÚ" ßā" áę" ã÷" ã# ß # # á!# ß+# /# á<# ßF# J# áW# ßd# h# áy# ߃# ߉# áš# ž# áĒ# ß´# ßē# Ë# Ī# áā# ßę# ßđ# á$ $ á$ ß$ ß!$ 2$ 6$ áG$ ßQ$ ßW$ áh$ l$ áx$ ß‚$ ߈$ ™$ $ áŽ$ ߸$ ßž$ áŌ$ ߨ$ ã$ ō$ ö$ á% ß% á$% (% á4% ß>% ßD% U% Y% áj% ßv% á‡% ‹% á—% ߥ% ß§% ¸% ŧ% áÍ% ß×% ßŨ% áņ% ß÷% & & & á&& ß2& áC& G& áS& ß]& ßc& t& x& á‰& ß•& áĻ& Ē& áļ& ßĀ& ߯& ×& Û& áė& ßö& ßü& á' ß' !' 0' 4' áE' ßQ' áb' f' ár' ß|' ß‚' “' —' á¨' ß´' áÅ' É' áÕ' ßß' ßå' ö' ú' á ( ß( á(( ,( á8( ßB( ßH( Y( n( ßx( ˆ( ߎ( ž( ŗ( ßŊ( Í( ßĶ( ß( å( ë( õ( û( )  ) á) ß%) )) á6) ß@) D) áQ) ß^) b) ás) ß}) ߃) á”) ˜) á¤) ߎ) ß´) Å) É) áÚ) ßä) ßę) áû) ˙) á * ß* ß* ,* 0* áA* ßK* ßQ* áe* ßk* v* …* ‰* áš* ßĻ* áˇ* ģ* áĮ* ßŅ* ß×* č* ė* áũ* ß + á+ + á*+ ß4+ ß:+ K+ O+ á`+ ßj+ ßp+ á„+ ߊ+ •+ ¤+ ¨+ áš+ ßÅ+ áÖ+ Ú+ áæ+ ßđ+ ßö+ ,  , á, ß&, ß,, á@, ßF, Q, `, d, áu, ߁, á’, –, áĸ, ßŦ, ߲, Ã, Į, áØ, ßä, áõ, ų, á- ß- ß- &- *- á;- ßG- áX- \- áh- ßr- ßx- ‰- - áž- ßĒ- áģ- ŋ- áË- ßÕ- ßÛ- ė- đ- á. ß . á. ". á.. ß8. ß>. O. d. ßn. ~. ß„. ”. Š. ßŗ. Ã. ßÉ. Õ. ß. é. ī. õ. ˙. / / / á!/ ß+/ // á4 R4 ß\4 m4 ßs4 4 …4 4 •4 Ÿ4 Ĩ4 Ŧ4 ļ4 Ā4 Ę4 Ô4 ß4 î4 ū4 ã5 ã"5 &5 á75 ßA5 E5 áV5 ßa5 e5 ár5 ß|5 ß‚5 š5 š5 Ų5 ę5 ßô5 ßú5 6 6 6 (6 <6 iS6 ãY6 ãi6 ãt6 ßz6 ãŽ6 iŸ6 iŽ6 i˛6 áÃ6 ßÍ6 ß×6 ßŪ6 iõ6 ß˙6 i7 á7 ß7 i"7 á37 ß>7 iO7 ßY7 ß_7 iw7 iŒ7 ß–7 iĢ7 ßļ7 iĮ7 ßŅ7 ß×7 ië7 iõ7 i 8 i8 i8 i.8 i28 áC8 ßM8 iQ8 áb8 ßm8 i~8 ߈8 ߎ8 iĸ8 á˛8 iŧ8 iÆ8 iÕ8 ię8 ßô8 i 9 ß9 i%9 ß/9 ß59 iI9 iR9 i[9 ie9 io9 i‹9 i•9 iŸ9 iŠ9 iŗ9 iŌ9 ãÖ9 ķ9 : : á!: á+: ß5: F: Q: [: e: o: y: ƒ: : ž: k´: ãž: ãÎ: ãŲ: ßß: ãķ: k; k; k; á(; ß2; ß<; ßC; áV; ß`; kd; áu; ß; kƒ; á”; ߟ; k°; ßē; ßĀ; kØ; kí; ß÷; k < ß< k(< ß2< ß8< kL< kV< kl< kv< k€< k< k“< á¤< ߎ< k˛< áÃ< ßÎ< kß< ßé< ßī< k= á= k= k'= k6= kK= ßU= kj= ßu= k†= ߐ= ß–= kĒ= kŗ= kŧ= kÆ= kĐ= kė= kö= k> k > k> k-> ã1> N> u> á> ß…> á> ß™> ßŖ> ß­> ߡ> Č> ×> ė> ßö> ß? ? ß ? ß'? 1? ;? E? O? Y? c? m? w? ? ‹? œ? mŗ? ãš? ãÉ? ãÔ? ßÚ? ãî? m˙? m@ m@ á#@ ß-@ ß7@ ß>@ mU@ ß_@ mc@ át@ ß~@ m‚@ á“@ ßž@ m¯@ ßš@ ßŋ@ m×@ mė@ ßö@ m A ßA m'A ß1A ß7A mKA mUA mkA muA mA mŽA m’A áŖA ß­A mąA áÂA ßÍA mŪA ßčA ßîA mB áB mB m&B m5B mJB ßTB miB ßtB m…B ߏB ß•B mŠB m˛B mģB mÅB mĪB mëB mõB m˙B m C mC m,C ã0C MC nC áxC ß~C áˆC ß’C ßœC ßĻC ˇC ÆC ÛC ßåC ßėC áúC ßD  D D #D 8D ßBD ßID SD ]D gD qD {D …D D ™D ąD ãüD ã E ãE ã E =E áuE ‚E E á›E ߥE áĢE ßĩE ßŋE ßÉE ßĶE ßŨE ßįE ßņE õE áF ß F áF ß F ß&F 6F KF ßRF á`F ßfF ápF ßzF F ß™F °F ßēF ×F ßáF ōF ßøF  G %G ß/G LG ßVG gG ßpG ‚G ߌG ĄG ßĢG ßąG ŋG ßÉG ÚG ßäG ßîG ßøG H H .H CH ßMH ^H ßhH yH ߌH ĄH ßĢH ŧH ߯H ×H ßęH I I á,I 0I áDI HI áUI ßaI eI ávI ߀I „I á‘I ß—I ŠI ßŗI ČI ßĪI ÚI ęI îI á˙I ßJ áJ ßJ J %J /J 9J CJ MJ WJ aJ gJ sJ wJ áˆJ ß’J ß™J ŖJ ­J ˇJ ÁJ ÍJ ×J áJ ëJ õJ ˙J  K K $K o:K ãDK ãTK ã_K ßeK ãyK oŠK o™K oK áŽK ߸K ßÂK ßÉK áÜK ßæK oęK áûK ßL o L áL ß%L o6L ß@L ßFL o^L osL ß}L o’L ߝL oŽL ߸L ßžL oŌL oÜL oōL oüL oM oM oM á*M ß4M o8M áIM ßTM oeM ßoM ßuM o‰M á™M oŖM o­M oŧM oŅM ßÛM ođM ßûM o N ßN ßN o0N o9N oBN oLN oVN orN o|N o†N oN ošN ožN ãČN ã×N ãúN ãO ãO 'O ã4O á>O ãIO ßOO ã`O wO m‚O •O m O ŗO mÁO ÖO ßāO ßëO īO áP ßP P P á*P ß0P ?P CP áTP ß^P ßdP rP ß|P €P á‘P ß›P ߥP ŦP ļP ÆP ŨP ŨäP īP úP Q ã5Q IQ ãVQ ãfQ ápQ ã{Q ß…Q ‰Q ášQ ßĻQ ŨąQ ĩQ áÂQ ßČQ áÖQ ßāQ äQ áõQ ßR R R á%R ß1R T BT áTT ß^T ßdT nT ‚T †T á—T ߥT ߡT ģT áČT ßÚT áäT ßîT ōT áūT ßU ßU áU ß(U BU ßLU bU ßhU tU •U ŸU ĢU ĩU ŋU ŌU ėU V ß V ßV  V 6V ß@V ßJV `V ßjV ßpV V áV ß•V ŸV ĨV ¯V šV ÃV ÉV ĐV ÚV äV îV W W áW ß%W @W ßJW ßTW jW ßtW ß~W ŽW ߘW ßžW §W ļW ēW áËW ßÕW ŲW áæW ßėW áöW ßX X áX ß!X 0X 4X áEX ßQX \X fX lX vX |X ‰X šX ß X ŦX ļX ĀX âX ãėX ãųX ãY ãY ã-Y ã1Y iY á€Y „Y á•Y ߟY ŖY á°Y ßēY žY á×Y ßäY čY áųY ßZ ß Z Z Z á-Z ß7Z ;Z áLZ ßWZ [Z áhZ ßrZ ßxZ Z ”Z áĨZ ߯Z ŗZ áĀZ ßĘZ ÎZ áßZ ßęZ îZ áûZ ß[ ß [ $[ 9[ ßC[ T[ ß^[ s[ ß~[ [ ß™[ ߟ[ ¸[ ×[ ÷[ \ ß\ ß\ ,\ 6\ @\ K\ g\ ã€\ q\ ã˜\ ãĸ\ ãŦ\ ߲\ ãÁ\ ãĐ\ áÚ\ ãä\ ßî\ qō\ á] ß ] ß] q] á&] ß0] ß:] qN] ßX] q\] ám] ßx] q|] á‰] ß“] ß™] qą] qÅ] ßĪ] qä] ßī] q^ ß ^ ß^ q$^ q*^ q0^ q<^ qP^ ßZ^ ß`^ qn^ q~^ ߈^ ß’^ qĸ^ ߨ^ q˛^ qŧ^ qÆ^ qŅ^ qæ^ ãī^ ãų^ ã_ ã_ ã2_ ãV_ ã|_ ã_ sŖ_ ã°_ ãĐ_ áÚ_ ãî_ sō_ á` ß ` ß` ß!` s%` á1` ß;` ßE` ßO` sS` á_` ßi` ßs` s‡` ß‘` s•` áĻ` ßą` sĩ` áÂ` ßĖ` ßŌ` sę` sū` ßa sa ß(a s9a ßCa ßIa s]a sca sia sva sza á‹a ß•a ߟa sŗa ßŊa sÁa áŌa ßŨa sáa áîa ßøa ßūa sb s*b ß4b sIb ßTb seb ßob ßub s‰b sb s•b s b sĩb ßŋb ßÉb ßĶb säb ßîb ßøb ßc sc ßc ß'c ß-c s;c ßEc sVc ß`c ßjc ßpc s~c ߈c s™c ßŖc ß­c sąc áÁc ßËc ßŅc sāc sôc ßūc ßd sd s#d ß-d ß3d sId sMd á^d ßhd ßrd svd á†d ߐd ß–d sĨd sŠd ášd ßÃd ßÉd sØd sÜd áčd ßōd ßød se s e áe ß'e s+e á;e ßEe sIe áZe ßee sie áve ߀e ߆e sže sĸe á˛e ßŧe sŅe ßÜe sāe áíe ß÷e ßũe sf sf á%f ß/f sDf ßOf sSf á`f ßjf ßpf s…f sŒf á–f ãŖf ãŽf ß´f ãŋf ßÅf ãĐf ßÚf sŪf áīf ßųf ßg ß g ág ßg s?g sPg ßcg sgg á~g ߉g sg ážg ßĒg á´g sÄg ßÔg säg ßîg ßøg ßūg sh sh á%h ß/h ß9h ßCh sGh áSh ß]h ßgh ßqh suh áh ß‹h ß•h sŠh ßŗh sˇh áČh ßĶh s×h áäh ßîh ßôh s i s i ß*i s?i ßJi s[i ßei ßki si s…i s‹i s˜i sœi áŗi ßŊi ßÍi sŅi áäi ßîi ßūi sj áj ßj ß%j á/j ß5j sGj sKj ábj ßrj ß|j s€j á“j ßŖj ß­j sąj ážj ßÎj ßÔj áŪj ßäj söj súj ák ßk ß%k s)k á=k áGk sKk á]k ßgk skk áwk ߁k s…k á‘k ß›k sŸk á¯k ßšk sŊk áÎk ߨk ßŪk s÷k sl ßl sl á(l ß2l sGl ßRl sVl ácl ßml ßsl sl s‘l ál ß§l sŧl ßĮl sËl áØl ßâl ßčl sm s)m ß/m s=m sYm ßcm sm ß…m s—m s›m á¸m ßžm áČm säm ßîm s n ßn s"n sIn san son s…n ߏn s“n áŸn ßĨn s´n sĪn ßŲn sīn ßõn sũn so so so s%o s/o s:o sDo sNo smo ão ¤o ãąo ãÄo Čo áØo ßâo ßėo đo áp ß p ßp ßp #p á/p ß9p ßCp ßMp Qp á]p ßgp ßqp …p ߏp ¤p ߯p Āp ßĘp ßĐp čp q  q á&q *q á7q ßAq ßGq [q aq gq pq {q q Ŗq ã°q ãĀq ×q ëq ãøq ã r r á!r ß+r ß5r 9r áJr ßTr ß^r ßhr lr áxr ß‚r ߌr ß–r šr áĻr ß°r ßēr Îr ߨr ír ßør  s ßs ßs 1s Os Ss áos ss á€s ߊs ߐs ¤s Ēs °s šs Äs Øs ės ãųs ã t "t ß)t 3t =t Mt ãQt tet t„t tˆt á›t õĻt tĒt áÃt ßĪt tĶt áæt ßņt tõt áu ßu t!u á4u ?u tCu áRu ]u tau áou yu tu t‰u t“u tu t§u tąu tˇu tÁu tËu tŅu tÛu tåu tëu tõu t˙u t v tv tv t'v t1v t7v tAv tKv tUv t_v tiv tov tyv tƒv t‰v t“v tv tŠv ãĩv ãÁv ãÍv ãŨv jév eõv fw g w hw l%w n1w '=w oIw pUw qaw  mw ryw s…w u‘w t¤w kĩw –Æw –×w –čw –ųw – x –x –,x z=x zNx z_x –rx Œx x \Šx mēx –Ëx –Üx –čx  ôx Ây –y –'y –8y –Iy –Zy –ky –|y –y –žy –¯y –Āy –Ņy –ây –øy az õ6z –Gz –jz –vz Ēz _ģz –Úz –æz ōz ūz  { { ã${ ã.{ ã8{ ãB{ ãL{ ãV{ ã\{ ßf{ ãl{ v{ ã€{ ã†{ .{ ã•{ ã›{ ãĢ{ ã¯{ ãŋ{ ãÃ{ ãÖ{ ãî{ ãō{ ã| ã&| ã,| ã@| ãD| ã\| ã|| ã–| ãą| ãŌ| ãÚ| ãú| ã} ã'} ãA} ãQ} ãa} ãe} ãx} ãŽ} ã’} ã°} ã´} ã×} ãę} ãî} ã~ ã!~ ã7~ ãK~ ãd~ ãz~ ã™~ ã¯~ ãģ~ ãŋ~ ã×~ ã÷~ ã ã ã, ãI ãO ã^ ãz ã“ ãĨ ãā 〠〠ã;€ ãV€ ãl€ ぀ ã–€ ãŧ€ ã܀ ãø€ だだã0 ãO ãy ãĨ ãˇ ã́ ãだãų ã%‚ ãK‚ ãg‚ 㘂 ãŦ‚ ã˛‚ ãˇ‚ ãŲ‚ ãö‚ ムã-ƒ ã1ƒ ãJƒ ã\ƒ ã|ƒ 㛃 ãąƒ ãŊƒ ã̓ ãôƒ ãøƒ ã„ ã?„ ãI„ ãf„ ã{„ ã–„ ãĢ„ ã܄ ãč„ ã… ãA… ã[… ãv… ã’… ãĄ… ãÁ… ã #,09=HL]apt|€“œ Š­¸ŧÍŅŲŨėđøü %)48IMUYhluy‚†‘•ĻĒžÂËĪØÜįëôø   /3BFUYhclcscwc‡‹“—žĸ̝žÂÖÚâæíņúū %)15<@IM\`tx€„‹˜œĢ¯ÃĮĪĶÚŪįëúū")-6:IMaemq€„ŒŸŖŦ°ˇģ×Ûįëü '+:>GKRVrv‚†—›Ŗ§ļēÂÆÕŲâæíņ !26>BQU]apt}ˆŒ¨Ŧ¸ŧÍŅŲŨėđøü #'CGSWhltxƒŒŸŖˇģÃĮÖÚęîöú  )-9=NRY]dhos}”œ §ĢģŋĮËŌÖßãęîū     " & 5 9 @ D K O X \ c g p t {  Ž ’ š ž Ĩ Š ˛ ļ Ŋ Á Ę Î Õ Ų č ė ķ ÷     * . 7 ; O S d h y } Ž ’ Ŗ § ļ hē hÁ hÅ hÍ hŅ hØ hÜ hė hđ hų hũ h h h h h. h2 h; h? hF hJ h[ h_ hf hj hy j} j† jŠ jž jĸ ją jĩ jÄ jČ jĪ jĶ jÜ jā jī jķ jú jū j j j j j' j+ j4 j8 jA jE jN jR jc jg jo js jƒ j‡ jŽ j’ jĄ jĨ jà jĮ jÖ jÚ jø jü j l l l l* l. l7 l; lO lS lb lf lu ly l€ l„ l l‘ l  l¤ lĢ l¯ l¸ lŧ là lĮ lØ lÜ lå lé lō lö l˙ llll l$l4l8l?lClRlVltlxl‡l‹lšnžn­nąnĀnÄnËnĪnØnÜnënīnönúnnnnn#n'n/n3nCnGnNnRnanenn…n”n˜n´n¸nĮËŌÖŪâęîöú"&.2;?HLUYbfw{ƒ‡Ž’šžĻǞļŊÁČĖĶ׿ęņõü  !%,0AEL_QU\_imuy…‘™ĨŠšŊÄČĪĶįëōöū )-59AEUY`_eip_uy€_‘˜œĨа´ŊÁĐÔÜāđôû˙ (,=APT]arv}”œ ¨Ŧ´¸ĀÄÔØß_äčī_ü !%,09=FJQUfjrv~‚ŠŽ–šĒŽĩšÂÆĪĶÚŪįëü  #'8<CGSWcgsw†Š›Ÿ¨ŦŗˇČĖÛßčėķ÷ &*15=AIMUYaeuy‰–šĄĨļēÉÍÔØęîõų#'6:AERV]avz‹žĸąĩÄČĐÔÜāđô$(/3BFMQ`dx|ƒ‡Ž’ĄĨąĩÁÅÎŌátåtîtōtt tttt"t3t7t>tBtItMt\t`titmtttxt‰tt”t˜t§tĢt´t¸tĮtËtÔtØtátåtütttt&t*t3t7tNvRv[v_vhvlv}vv‘v•vĨvŠvŊvÁvČŨÕvŲvčvėvûv˙vvv!%-19=MQY]eiy}…‰‘•ĨŠąĩŊÁŅÕÜāįëķ÷  04=AJNbfos|€‡‹œ §ĢēžÅÉØÜåéōö !04;?NRcgvz‚†•™ĸϝŗžÂĶ×āäđô#'/3>BUYbfrvŠŽ•™Š­´¸ČĖĶ×įëúū !%.2CGVZaelpx|„ˆ”œ °´ÄČŅÕŪâëīøü  ! % , 0 9 = D H W [ b _o s z ~ † Š š ž ­ ą ¸ ŨÅ É Ũ á đ ô ũ !!!#!'!6!:!N!R![!_!h!l!u!y!Š!Ž!—!›!¤!¨!ą!ĩ!Æ!Ę!Ņ!Õ!á!å!ņ!õ!""""" "1"5"D"H"Q"U"\"`"q"u"„"ˆ""“"ž"ĸ"˛"ļ"Å"É"Đ"Ô"ß"ã"ę"î"÷"û" ####"#&#-#1#B#F#O#S#\#`#i#m#~#‚#Š#Ž#ž#ĸ#Š#­#š#Ŋ#Ė#Đ#Ų#Ũ#î#ō#ú#ū#$$$$,$0$9$=$N$R$Z$^$n$r$y$}$Œ$$—$›$Ļ$Ē$ē$ž$Í$Ņ$Ø$Ü$į$ë$ō$ö$˙$%%%%!%*%.%5%9%J%N%W%[%d%h%q%u%†%Š%’%–%Ļ%Ē%ą%ĩ%Á%Å%Ô%Ø%á%å%ö%ú%&&&&!&%&4&8&A&E&V&Z&b&f&v&z&&…&”&˜&Ą&Ĩ&Ž&˛&Æ&Ę&Ņ&Õ&å&é&ø&ü&''''''''+':'>'E'I'R'V']'a'r'v''ƒ'Œ''™''Ž'˛'ē'ž'Î'Ō'Ų'Ũ'é'í'ü'(( ((((#(4(8(@(D(T(X(_(c(r(v(~(‚(‘(•(Ą(Ĩ(ļ(ē(Â(Æ(Í(Ņ(á(å(î(ō(û(˙( ))))-)1)9)=)L)P)\)`)q)u)}))ˆ)Œ)œ) )Š)­)ļ)ē)Å)É)Ō)Ö)č)ė)ķ)÷)˙)* ***"*+*/*;*?*P*T*[*_*g*k*{**‡*‹*’*–*Ĩ*Š*˛*ļ*Ę*Î*Ö*Ú*é*í*ö*ú* ++++"+&+7+;+B+F+N+R+c+g+p+t+ƒ+‡+Ž+Ũ›+Ÿ+¨+Ŧ+Ā+Ä+Ė+Đ+ß+ã+ė+đ+,, ,,,,-,1,8,<,D,H,Y,],d,Ũq,u,,ƒ,—,›,Ŗ,§,ļ,ē,Ã,Į,Ø,Ü,ë,ī,ū,- -Ũ--$-(-<-@-H-L-[-_-h-l-}---”-Ŗ-§-Ž-Ũģ-ŋ-Æ-Ę-Ō-Ö-Ū-â-ņ-õ-ū-...#.'...2.:.>.N.R.Y.].d.h.p.t..ƒ.Ž.’.Ą.Ĩ.Ž.˛.ģ.ŋ.Æ.Ę.Ķ.×.ã.į.ö.ú. / //"/+///8/6E6I6R6V6b6f6u6y66”6›6t¨6Ŧ6ĩ6š6Ā6Ä6Í6Ņ6Ũ6á6đ6ô6 7777#7'787<7K7O7X7\7c7g7x7|7‹77˜7œ7Ŗ7§7¸7ŧ7Ë7Ī7Ø7Ü7ã7į7ø7ü7 8888#8'888<8K8O8X8\8c8g8x8|8‹88–8š8Š8­8ļ8ē8Á8Å8Î8Ō8ã8į8î8hķ8÷8ū8h 9999#9'989<9C9jH9L9S9j`9d9m9q9x9|9…9‰9š9ž9Ĩ9lĒ9Ž9ĩ9lÂ9Æ9Í9Ņ9Ú9Ū9ī9ķ9ú9m˙9: :m::$:(:/:3:<:@:Q:U:\:'a:e:l:'y:}:†:Š:‘:•:ž:ĸ:ŗ:ˇ:ž:tÃ:Į:Î:tÛ:ß:č:ė:ũ:; ;;;#;*;.;=;A;J;N;_;c;l;p;;…;Œ;;Ÿ;Ŗ;Ŧ;°;Á;Å;Î;Ō;ã;į;î;ō;<<<<#<'<0<4<E<I<P<T<c<g<p<t<…<‰<’<–<§<Ģ<˛<ļ<Å<É<Ō<Ö<į<ë<ô<ø< = ==='=+=4=8=?=C=T=X=g=k=t=x==ƒ=”=˜=§=Ģ=´=¸=ŋ=Ã=Ô=Ø=į=ë=ô=ø=˙=>>>'>+>4>8>?>C>T>X>g>k>t>x>>ƒ>”>˜>§>Ģ>ē>ž>Đ>Ô>Ũ>á>ė>đ>?? ?Ũ??$?Ũ1?5?D?H?W?[?h?l?u?y?Œ??˜?œ?Ŗ?§?¯?ŗ?Ä?Č?Đ?Ô?ã?į?û?˙?@ @@@%@)@0@4@C@G@N@R@a@e@l@p@w@{@Š@Ž@@Ą@¨@_­@ą@¸@_Å@É@Đ@Ô@Ũ@á@ę@î@õ@ų@AAAA"A&A.A2ABAFAMAQAZA^AoAsA{AA‡A‹A›AŸAĻAĒAŗAˇAČAĖAÔAØAāAäAôAøAB BBB'B+B3B7BGBKB[B_BfBjBzB~BB‘B™BB¤B¨B¸BŧBČBĖBÕBŲBíBņBøBüBCCCC&C*C:C>CJCNCWC[CoCsC‚C†CŽC’CĄCĨCšCŊCŅCÕCŨCáCčCėCũCD DDD#D*D.D=DADHDLD[D_DfDjDqDuD†DŠD’D–DĻDĒDĩDšDĖDĐDŲDŨDéDíDūDEEE%E)E9E=EFEJESEWE`EdEoEsE|E€E‘E•EœE E°E´EģEŋEÆEĘEŅEÕEäEčEđEôEFFFŨFFFŨ,F0F7F;FBFFFUFYF`FdFlFpF€F„F‹FŨF”F›FŨ¨FŦFĀFÄFĖFĐFāFäFíFņFøFüF GGG#G2G6GKGOGXG\GcGgGxG|G‹GG–GšGĸGĻGŽG˛GÁGÅGĖGĐGāGäGëG_øGüG HHHH"H&H.H2HAHEHLHPH`HdHsHwH€H„H“H—HžHĸHŠH­HŋHÃHĘHÎHāHäHëHīHöHúH IIII-I1I8IXBXRXVXeXiXzX~XˆXŒX“X—XŸXŖXŦX°XÂXÆX×XÛXãXįXöXúXYYYYYY(Y,Y>YBYSYWYiYmYtYxY‡Y‹Y’Y–YŸYŖY˛YļYŊYÁYĐYÔYÛYßYæYęYųYũYZZZZZZ/Z3Z:Z>ZNZRZaZeZlZpZ€Z„Z‹ZZŸZŖZĒZŽZ¸ZŧZÆZĘZŅZÕZßZãZíZņZøZüZ[ [[['[+[3[7[?[C[K[O[W[[[c[g[w[{[…[‰[[”[Ļ[Ē[š[Ŋ[Ä[Č[Ō[Ö[ā[ä[ë[ī[ų[ũ[\\\!\+\/\9\=\O\S\Z\^\j\n\{\\Œ\\Ÿ\Ŗ\ĩ\š\Ã\Į\Î\Ō\ä\č\÷\û\]]]] ]$]-]1]:]>]E]I]P]T]]]a]h]l]}]]ˆ]Œ]”]˜] ]¤]Ģ]¯]ļ]ē]Â]Æ]Í]Ņ]á]å]ė]đ]^^ ^^^^-^1^@^D^K^O^X^\^e^i^x^|^…^‰^’^–^§^Ģ^˛^ļ^Å^É^Đ^Ô^Ü^ā^đ^ô^û^˙^__#_'_0_4_;_?_P_T_c_g_p_t_{__‡_‹_“_—_Ÿ_Ŗ_Ģ_¯_ŋ_Ã_Ę_Î_×_Û_ä_č_ī_ķ_ü_` ` ```!`%`,`0`9`=`L`P`W`[`d`h`q`u`|`€`‰``ž`ĸ`Ē`Ž`ļ`ē`Â`Æ`Ö`Ú`á`å`î`ō`û`˙`a aaa(a,a3a7a@aDaMaQaXa\aeaiaza~a‡a‹a”a˜aĄaĨaļaēaÁaÅaÔaØaáaåaîaōaûa˙abbb!b*b.b7b;bLbPbWb[bgbkbwb{bŠbŽbŸbŖbŦb°bˇbģbĖbĐbßbãbôbøbcc cc!c%c4c8c?cCcLcPc_ccclcpcwc{cƒc‡cc”ccĄcĒcŽcˇcģcÃcĮcĐcÔcäcčcđcôcücdddd d)d-d6d:dKdOdVdZdbdfdndrd‚d†dd“d¤d¨dądĩdÆdĘdŅdÕdädčdņdõdūde eeee-e1e8etNtRtYt]tmtqt€t„t“t—tžtĸtĢt¯tžtÂtÉtÍtÖtÚtátåtötútuuuu!u%u4u8u?uCuSuWuousu‚u†u•u™u u¤uŦu°uŋuÃuĘuÎuÖuÚuéuíuôuøuvvvv&v*v1v5vMvQvXv_evivxv|vƒv_v”v›vŸv¯vŗvēvžvÆvĘvŅvÕvåvévōvövwwww'w+w2w6w>wBwIwMw]wawjwnwzw~w‡w‹wŸwŖwĒwŽwļwēwĘwÎwÕwŲwáwåwėwđwxx xxx#x3x7xFxJxZx^xmxqxx…xŒx_‘x•xœx_Šx­x´x¸xĀxÄxÔxØxßx_äxčxīx_üxyy yyy%y)y0y4yCyGyNyRyayeyly_qyuy|y_‰yy”y˜y§yĢy˛yļyÅyÉyĐyÔyãyįyöyúy zzz!z1z5zDzHzXz\zczgznzrzz…zz‘z™zz­zązÁzÅzŅzÕzézízôzøz˙z{{{{"{2{6{={A{P{T{d{h{w{{{Š{Ž{ž{ĸ{ą{ĩ{ŧ{Ā{Đ{ˆÔ{ˆŨ{ˆá{ˆí{ˆņ{ˆ|ˆ|ˆ|ˆ|ˆ|ˆ|ˆ/|ˆ3|ˆ:|ˆ>|ˆM|ˆQ|ˆX|ˆ\|ˆl|p|w|{|‚|†||“|œ| |¯|ŗ|ŧ|Ā|Į|Ë|Ķ|×|ß|ã|ķ|÷|ū|} }}}}+}/}6}:}B}F}N}R}Z}^}g}k}{}}‡}‹}›}Ÿ}Ļ}Ē}˛}ļ}ž}Â}Ō}Ö}â}æ}ō}ö} ~~~#~*~.~7~;~L~P~X~\~l~p~‚~†~~‘~™~~­~ą~Ę~Î~Ū~â~ü~  $-1:>GKRVgkuy€„‘šž¯ŗēžĮËÔØáåėđ€€€€€€(€,€=€A€I€M€]€a€k€o€v€z€ƒ€‡€€”€€Ą€˛€ļ€Ā€Ā̀Ņ€Ū€â€ī€ķ€/3<@IMVZko~‚‹ ¤Ŧ°āԁ؁áåöú ‚‚‚‚%‚)‚2‚6‚G‚K‚U‚Y‚k‚o‚†‚Š‚“‚—‚ ‚¤‚ĩ‚š‚‚Ƃ΂͂ä‚č‚ņ‚õ‚ū‚ƒƒƒ!ƒ%ƒ/ƒ3ƒEƒIƒSƒWƒaƒeƒwƒ{ƒ‚ƒ†ƒ•ƒ™ƒŖƒ§ƒšƒŊƒĮƒ˃Ũƒáƒëƒīƒ„„„„%„)„3„7„I„M„W„[„b„f„o„s„|„€„‘„•„Ÿ„Ŗ„DŽބˇ„ģ„ĄȄŲ„Ũ„ä„č„ņ„õ„ū„…………"…+…/…8…<…E…I…Z…^…f…j…z…~…ˆ…Œ…“…—… …¤…­…ą…ē…ž…Ī…Ķ…Ũ…á…ę…î…û…˙… †††!†6†:†L†P†k†o†v†z†•†™†´†¸†͆׆ú†ū†‡ ‡‡‡!‡%‡6‡:‡C‡G‡P‡T‡e‡i‡r‡v‡‡ƒ‡”‡˜‡Ą‡Ĩ‡އ˛‡ÇĮ‡҇Շ߇ã‡õ‡ų‡ˆˆˆˆ'ˆ+ˆ2ˆ6ˆEˆIˆSˆWˆiˆmˆwˆ{ˆˆ‘ˆ›ˆŸˆąˆĩˆŋˆÈՈ؈ãˆįˆųˆũˆ‰ ‰‰‰‰#‰,‰0‰A‰E‰O‰S‰Z‰^‰g‰k‰t‰x‰‰‰‰–‰š‰Ŗ‰§‰¸‰ŧ‰Ɖʉ҉ՉŪ‰â‰ë‰ī‰ø‰ü‰ ŠŠ#Š'Š7Š;ŠEŠIŠPŠTŠ]ŠaŠjŠnŠŠƒŠŠ‘ŠšŠžŠ̊¯ŠŧŠŠՊ؊ëŠīŠ‹‹‹‹‹ ‹1‹5‹F‹J‹Q‹U‹d‹h‹y‹}‹†‹Š‹›‹Ÿ‹Ļ‹Ē‹š‹Ŋ‹ċȋŅ‹Ջ܋ā‹é‹í‹ö‹ú‹ŒŒŒŒ#Œ'Œ8Œ<ŒCŒGŒPŒTŒ[Œ_ŒhŒlŒ}ŒŒŠŒŽŒŸŒŖŒŦŒ°ŒÁŒŌΌ͌åŒéŒķŒ÷Œ+/FJRVfjy}“—ĄĨ¯ŗōɍĶ׍áå÷ûŽ ŽŽŽ)Ž-Ž7Ž;ŽEŽIŽ[Ž_ŽiŽmŽwŽ{ŽŽ‘Ž˜ŽœŽĢŽ¯ŽšŽŊŽĪŽĶŽŨŽáŽķŽ÷Ž%);?IM_cmqx|…‰’–§ĢĩšĀď͏ŅڏŪīķü  ",07;DHQU^bsw‰Ą̐¯ļēÐĮАԐåéķ÷‘‘‘‘"‘&‘;‘?‘Q‘U‘h‘l‘u‘y‘‚‘†‘—‘›‘Ŧ‘°‘ˇ‘ģ‘ʑΑߑã‘ė‘đ‘’’ ’’’#’*’.’7’;’B’F’O’S’\’`’g’k’|’€’‰’’ž’ĸ’Š’­’ļ’ē’Á’ŒΒŌ’ã’į’đ’ô’“ “““'“+“5“9“K“O“Y“]“g“k“}““‘“•“Ŧ“°“¸“ŧ“Ė“Гį“ë“ô“ø“””””$”(”2”6”H”L”V”Z”d”h”z”~””‘”š”ž”¯”ŗ”ģ”ŋ”Δ͔ã”į”đ”ô”• •••(•,•6•:•L•P•Z•^•p•t•‹••™••§•Ģ•Ŋ•Á•˕ΕؕŨ•ī•ķ•ũ•– ––!–%–/–3–=–A–S–W–a–e–o–s–…–‰––”–Ŗ–§–ą–ĩ–Į–˖ՖŲ–ë–ī–ų–ũ–———!—3—7—A—E—W—Š[—Šb—Šf—Šn—Šr—Ё—Š…—ŠŽ—Š’—Šž—Šĸ—Šŗ—Ў—ŠĀ—ŠÄ—ŠË—ŠĪ—Šā—Šä—Šë—Šī—Šū—Š˜Š ˜Š ˜Š˜Œ!˜Œ(˜Œ,˜Œ;˜Œ?˜ŒH˜ŒL˜ŒU˜ŒY˜Œ`˜Œd˜Œu˜Œy˜Œ€˜Œ„˜Œ“˜Ž—˜Ž ˜ޤ˜Ž­˜Žą˜Žē˜Žž˜ŽĮ˜ŽË˜ŽÜ˜Žā˜Žį˜Žë˜Žō˜Žö˜Ž™Ž ™Ž™Ž™Ž&™Ž*™Ž3™Ž7™Ž@™ŽD™ŽU™ŽY™Žb™Žf™Žo™Žs™Ž|™Ž€™Ž‘™Ž•™ޤ™ލ™ޝ™Žŗ™Žģ™Žŋ™ŽĪ™ŽĶ™ŽÜ™Žā™Žį™Žë™Žü™ŽšŽšššš&š*š2š6šFšJšYš]šešišyš}š†šŠš›šŸšĻšĒšļšēšÁšÅšŲšŨšæšęšņšõ𐛐 ››’›’$›’(›’0›’4›’<›’@›’G›’K›’[›’_›’g›’k›’s›’w›’‡›’‹›’”›’˜›’Ÿ›’Ŗ›’´›’¸›’Į›”Ë›”Ō›”Ö›”Ũ›”ᛔ雔훔õ›”ų›” œ” œ”œ”œ”!œ”%œ”5œ”9œ”Aœ”Eœ”Mœ”Qœ”aœ”eœ”lœ”pœ”xœ”|œ”„œ”ˆœ”œ”“œ”Ŗœ”§œ”ˇœ”ģœ”Äœ”Čœ”Īœ”Ķœ”äœ”čœ”÷œûœ'+26AEPT[_koƒ“—žŨĢ¯ŋÝʝŨם۝â_įëō_÷ûž_žžžž%ž)ž2ž6žEžIžPž_UžYž`ž_mžqžyž}žž‘žĄžĨžŽž˛žšžŊžΞŌžážåžėžđž˙žŸ ŸŸ!Ÿ%Ÿ,Ÿ0Ÿ?ŸCŸTŸXŸiŸmŸ|Ÿ€ŸŸ”Ÿ›ŸŨ¨ŸŦŸŧŸŸĮŸŨԟ؟äŸčŸīŸķŸ˙Ÿ   ( , < @ G ŨT X h l s Ũ€ „ • ™ ĸ Ļ ­ ą  Æ Õ Ų ę î ÷ û ĄĄĄĄ*Ą.Ą6Ą:ĄBĄFĄNĄRĄZĄ^ĄeĄiĄyĄ}Ą…Ą‰ĄĄ”ĄĄĄĄ¨ĄŦĄģĄŋĄÎĄŌĄÜĄāĄęĄîĄĸĸĸĸĸ ĸ'ĸ+ĸ5ĸ9ĸKĸOĸYĸ]ĸoĸsĸ}ĸĸ‹ĸĸ–ĸšĸŦĸ°ĸˇĸģĸĘĸÎĸØĸÜĸãĸįĸųĸũĸ ŖŖŖŖ(Ŗ,Ŗ>ŖBŖLŖPŖZŖ^ŖpŖtŖ~Ŗ‚ŖŒŖŖĸŖĻŖ°Ŗ´ŖžŖÂŖÔŖØŖßŖãŖōŖöŖ¤¤¤¤$¤(¤:¤>¤H¤L¤^¤b¤l¤p¤‚¤†¤¤”¤›¤Ÿ¤Ф­¤ŋ¤äͤפį¤ë¤ú¤ū¤Ĩ ĨĨĨ$Ĩ(Ĩ/Ĩ3Ĩ:Ĩ>ĨGĨKĨZĨ^ĨgĨkĨ|Ĩ€ĨˆĨŒĨ›ĨŸĨ´Ĩ¸ĨÁĨÅĨÖĨÚĨãĨįĨøĨüĨĻĻĻĻ*Ļ.Ļ>ĻBĻIĻMĻaĻeĻnĻrĻyĻ}ĻŽĻ’ĻĄĻĨĻŽĻ˛ĻģĻŋĻČĻĖĻÕĻŲĻęĻîĻõĻųϧ§ §§§§#§'§.§2§B§F§Z§^§g§k§t§x§§…§–§š§Ŗ§§§°§´§Ŋ§Á§Ō§Ö§Ũ§á§í§ņ§ũ§¨¨¨¨!¨(¨,¨=¨A¨P¨T¨]¨a¨j¨n¨w¨{¨„¨ˆ¨™¨¨¤¨¨¨¯¨ŗ¨ē¨ž¨ƨʨŌ¨Ö¨Ũ¨á¨ņ¨õ¨ Š ŠŠŠ#Š'Š0Š4ŠEŠIŠRŠVŠ_ŠcŠlŠpŠŠ…ŠŒŠŠœŠ ŠŦаŠŋŠÊĖŠĐŠ׊ÛŠėŠđŠ˙ŠĒ ĒĒĒĒ#Ē'Ē1Ē5Ē<Ē@ĒJĒNĒUĒYĒcĒgĒnĒrĒ|Ē€Ē‡Ē‹Ē•Ē™Ē Ē¤ĒŽĒ˛ĒšĒŊĒĮĒËĒŌĒÖĒāĒäĒëĒīĒųĒũĒĢĢĢĢĢ!Ģ*Ģ.Ģ@ĢDĢKĢOĢVĢZĢdĢhĢoĢsĢ}ĢĢˆĢŒĢ–ĢšĢĄĢĨ̎ĢģĢÂĢ_ĪĢĶĢâĢæĢíĢ_úĢūĢ ŦŦŦ_%Ŧ)Ŧ8Ŧ<ŦCŦ_PŦTŦcŦgŦnŦ_{ŦŦŽŦ’Ŧ™Ŧ_ĻŦĒŦšŦŊŦÄŦ_ŅŦÕŦäŦčŦīŦ_üŦ­­­­_'­+­:­>­E­_R­V­e­i­p­t­~­‚­‰­­–­š­Ŧ­°­ˇ­ģ­­Æ­×­Û­â­æ­đ­ô­û­˙­ŽŽ$Ž(Ž9Ž=ŽDŽHŽWŽ[ŽlŽpŽŽ…ŽŒŽŽŸŽŖŽĒŽŽŽļŽēŽĘŽÎŽŨŽáŽōŽöŽ˙ޝ ¯¯¯#¯2¯6¯G¯K¯T¯X¯_¯c¯t¯x¯‡¯‹¯’¯–¯ ¯¤¯̝¯¯š¯Ŋ¯įȝÚ¯Ū¯å¯é¯ķ¯÷¯ū¯° °°°°-°1°8°_E°I°P°T°f°j°q°u°‡°‹°’°–°ž°ĸ°´°¸°ŋ°ðʰΰā°ä°ė°đ°û°˙°ąąą!ą1ą5ą=ąAąNąRągąkąsąwąąƒą’ą–ąą_ĒąŽąŊąÁąÉąÍąÜąāąįą_ôąøą˛ ˛˛˛&˛*˛9˛=˛D˛H˛X˛\˛l˛p˛w˛{˛ƒ˛‡˛ޞ’˛ĸ˛Ϟ­˛ą˛š˛Ŋ˛IJȲØ˛ܲã˛į˛ī˛ķ˛ŗŗ ŗ_ŗŗ%ŗ)ŗ9ŗ=ŗEŗIŗPŗTŗdŗhŗpŗtŗ{ŗŗŗ“ŗ›ŗŸŗĻŗĒŗšŗŊŗÍŗŅŗØŗ_åŗéŗøŗüŗ´´´´+´š/´š9´š=´šD´šH´šQ´šU´š^´šb´šs´šw´š´š…´šŒ´š´š™´š´šĻ´šĒ´šģ´šŋ´šČ´šĖ´šÕ´šŲ´šę´šî´šø´šü´šĩšĩšĩšĩšĩš!ĩš*ĩš.ĩš7ĩš;ĩšLĩšPĩšXĩš\ĩšlĩšpĩšwĩš{ĩš…ĩš‰ĩš“ĩš—ĩšžĩšĸĩšŠĩš­ĩšŋĩšÃĩšĖĩšĐĩšÚĩšŪĩščĩšėĩšõĩšųĩšļšļšļšļš.ļš2ļš;ļš?ļšHļšLļšUļšYļšjļšnļšuļšyļšļš…ļšļš‘ļš˜ļšœļš­ļšąļšēļšžļšĮļšËļšÜļšāļšéļšíļšöļšúļš ˇšˇšˇšˇš-ˇš1ˇš;ˇš?ˇšQˇšUˇš\ˇš`ˇšoˇšsˇšzˇ_‡ˇš‹ˇšˇšĄˇšŗˇšˇˇšÁˇšÅˇšĖˇšĐˇšâˇšæˇšõˇšųˇš¸š¸š¸š¸š'¸š+¸š5¸š9¸šC¸šG¸šY¸š]¸šg¸šk¸šu¸šy¸š‹¸š¸š™¸š¸š§¸šĢ¸šŊ¸šÁ¸šË¸šĪ¸šŲ¸šŨ¸šī¸šķ¸šú¸šū¸š šššššššš1šš5šš?ššCššUššYššcššgššyšš}šš‡šš‹ššššĄššĢšš¯ššÁšÅšĖšĐšךÛšíšņšøšüšēēēēēē'ē+ē3ē7ē?ēCēKēOēWē[ēkēoēwē{ēŽē’ē™ēē­ēąēšēŊēĖēĐē×ēÛēâēæēöēúēģ_ģģ!ģ%ģ,ģ0ģ@ģDģKģ_Xģ\ģkģoģvģzģŠģŽģžģĸģŠģ­ģĩģšģĀģÄģÔģØģßģãģëģīģöģúģ ŧŧŧŧ!ŧ%ŧ4ŧ8ŧ?ŧ_LŧPŧWŧ[ŧkŧoŧwŧ{ŧ‚ŧ†ŧ–ŧšŧĸŧĻŧ­ŧąŧÁŧÅŧÍŧŅŧØŧÜŧëŧīŧ˙ŧŊ Ŋ_ŊŊ*Ŋ.Ŋ5Ŋ9ŊIŊMŊ]ŊaŊkŊoŊvŊzŊƒŊ‡ŊŊ”ŊĨŊŠŊŗŊˇŊžŊÂŊËŊĪŊØŊÜŊíŊņŊúŊūŊž žž ž*ž.ž5ž9žBžFžOžSž\ž`žižmž~ž‚ž”ž˜ž ž¤žŦž°ž¸žŧžĖžĐžÚžŪžåžéžōžöž˙žŋ ŋŋŋŋ&ŋ*ŋ;ŋ?ŋIŋMŋVŋZŋgŋkŋxŋ|ŋ‰ŋŋšŋžŋĢŋ¯ŋÄŋČŋÚŋŪŋįŋëŋôŋøŋĀĀĀĀĀĀ0Ā4Ā;Ā?ĀGĀKĀSĀWĀ^ĀbĀsĀwĀ€Ā„ĀĀ‘ĀšĀžĀ§ĀĢĀŧĀĀĀÉĀÍĀÖĀÚĀäĀčĀņĀõĀ˙ĀÁ ÁÁÁÁ.Á2Á;Á?ÁHÁLÁVÁZÁcÁgÁyÁ}Á‡Á‹ÁÁĄÁ¨ÁŦÁŗÁˇÁÆÁĘÁÜÁāÁįÁëÁúÁūÁÂÂÂ -1:>SWhl}Â’–ŸÂŖÂ¸ÂŧÃĮĪĶäčīÂ_üÝÝÝ Ý$Ý6Ý:ÝDÝHÝZÝ^ÝeÝiÝpÝt݃݇ݎÝ’ÝĄÃĨݎÝ˛ÃÃÝĮÝØÃÜÝíÝņÝûÝ˙Ý ĝ ĝĝ#ĝ-ĝ1ĝ;ĝ?ĝQĝUĝ_ĝcĝmĝqĝƒÄ‡Ä‘ĝ•ĝŸÄŖÄĩĝšÄÃĝĮĝŅĝÕĝįĝëĝōĝöĝŝ ŝŝŝ)ŝ-ŝ7ŝ;ŝMŝQŝ[ŝ_ŝqŝuŝŝƒÅ•ŝ™ÅŖÅ§ÅšÅŊÅÅÅÉÅĐÅÔÅŨÅáÅčÅėÅķÅ÷ÅÆ ÆÆÆ%Æ)Æ0Æ4Æ;Æ?ÆFÆJÆQÆUÆ\Æ`ÆgÆkÆrÆvÆ}ƁƈƌƓƗÆĻÆĒÆąÆĩÆŧÆĀÆĪÆĶÆÚÆŪÆæÆęÆúÆūÆĮŨ ĮĮĮŨ"Į&Į:Į>ĮFĮJĮZĮ^ĮgĮkĮrĮvĮ}ĮĮ’Į–ĮĻĮĒĮąĮĩĮÆĮĘĮßĮãĮęĮîĮ÷ĮûĮ ČČČČ,Č0Č7Č;ČJČNČ_ČcČtČxČ‡Č‹ČœČ ČŠČ­Č´Č¸ČÉČÍČÜČāČņČõČūČÉ É ÉÉ"É1É5É>ÉBÉIÉMÉ^ÉbÉqÉŸuÉŸ~ÉŸ‚ÉŸ‰ÉŸÉŸžÉŸĸÉŸąÉĩÉŧÉĀÉČÉĖÉÔÉØÉßÉãÉëÉīÉ÷ÉûÉĘĘĘĘ$Ę(Ę9Ę=ĘDĘHĘPĘTĘ\Ę`ĘiĘmĘvĘzĘ‹ĘĘ˜ĘœĘŖĘ§Ę¸ĘŧĘËĘĪĘ×ĘÛĘãĘįĘīĘķĘûĘ˙ĘË ËË Ë'Ë+Ë3Ë7Ë?ËCËJËNËUËYËaËeËlËpˀ˄˓˗ˠˤËĢ˯ËĀËÄËĶË×ËßËãËëËīË˙ËĖ ĖĖĖĖ.Ė2Ė9Ė=ĖLĖPĖYĖ]ĖfĖjĖsĖwĖˆĖŒĖ•Ė™ĖĸĖĻ˝˺ĖÄĖČĖĪĖĶĖâĖæĖīĖķĖüĖÍÍÍÍ"Í+Í/Í@ÍDÍKÍOÍ^ÍbÍjÍnÍ~Í‚Í‰ÍÍœÍ ÍąÍĩÍžÍÂÍÉÍÍÍŪÍâÍņÍõÍÎ ÎÎÎÎ"Î3Î7ÎFÎJÎ[Î_ÎhÎlÎsÎwΈΌΛΟΨÎŦÎĩΚÎÂÎÆÎ×ÎÛÎäÎčÎņÎõÎūÎĪĪĪĪ"Ī.Ī2Ī>ĪBĪQĪUĪ\Ī_aĪeĪlĪ_yĪ}Ī…Ī‰Ī™ĪĪ¤Ī_ŠĪ­Ī´Ī_ÁĪÅĪÍĪŅĪáĪåĪõĪųĪĐĐ ĐĐ"Đ&Đ5Đ9ĐJĐNĐWĐ[ĐbĐfĐwĐ{ĐŠĐŽĐŸĐŖĐŦаСĐģĐĖĐĐĐßĐĄãĐĄęĐĄîĐĄöĐĄúĐĄŅĄŅĄ ŅĄŅĄŅĄŅĄ$ŅĄ(ŅĄ/ŅĄ3ŅĄCŅĄGŅĄNŅĄRŅĄZŅĄ^ŅĄeŅĄiŅĄqŅĄuŅĄ|ŅĄ€ŅĄˆŅĄŒŅĄ“ŅĄ—ŅĄ§ŅĄĢŅĄ˛ŅĄļŅĄŊŅĄÁŅĄČŅĄĖŅĄÛŅĄßŅĄæŅ_ķŅĄ÷ŅĄŌĄ ŌĄŌ_ŌĄ"ŌĄ1ŌĄ5ŌĄ<Ō_IŌĄMŌĄ\ŌĄ`ŌĄgŌ_tŌĄxŌĄ‡ŌĄ‹ŌĄ’Ō_ŸŌĄŖŌĄ˛ŌĄļŌĄŊŌ_ĘŌĄÎŌĄŨŌĄáŌĄčŌ_õŌĄųŌĄĶĄ ĶĄĶ_ ĶĄ$ĶĄ3ĶĄ7ĶĄ>Ķ_KĶĄOĶĄ^ĶĄbĶĄiĶ_vĶĄzĶĄ‰ĶĄĶĄ›ĶĄŸĶĄĩĶĄšĶĄÁĶĄÅĶĄÍĶĄŅĶĄŲĶĄŨĶĄíĶĄņĶĄøĶĄüĶĄÔĄÔĄÔĄÔĄÔĄÔĄ.ÔĄ2ÔĄ:ÔĄ>ÔĄNÔĄRÔĄ[ÔĄ_ÔĄhÔĄlÔĄsÔĄwÔĄˆÔĄŒÔĄ“ÔĄ—ÔĄĻÔĄĒÔĄŗÔĄˇÔĄČÔĄĖÔĄÔÔĄØÔĄčÔĄėÔĄķÔĄ÷ÔĄÕĄ ÕĄÕĄÕĄ%ÕĄ)ÕĄ8ÕĄ<ÕĄLÕĄPÕĄYÕĄ]ÕĄdÕĄhÕĄyÕĄ}ÕĄŒÕĄÕĄ ÕĄ¤ÕĄĩÕĄšÕĄČÕĄĖÕĄĶÕ_ØÕĄÜÕĄãÕ_čÕĄėÕĄķÕ_øÕĄüÕĄÖ_ÖĄ ÖĄÖ_ ÖĄ$ÖĄ+ÖĄ/ÖĄ7ÖĄ;ÖĄBÖĄFÖĄMÖĄQÖĄXÖĄ\ÖĄcÖĄgÖĄwÖĄ{ÖĄ‚Ö_‡ÖĄ‹ÖĄ’Ö_—ÖĄ›ÖĄĸÖ_§ÖĄĢÖĄ˛Ö_ŋÖĄÃÖĄĘÖĄÎÖĄÕÖĄŲÖĄāÖĄäÖĄëÖĄīÖĄ˙֥ץ ×_ץץ*ץ.ץ5×_:ץ>ץE×_RץVץ]ץaץhץlץ|ץ€×Ą‘ץ•ץĻץĒץŗ×Ąˇ×Ąž×ĄÂץĶץ×ץæ×Ąęץûץ˙×ĄØĄØĄ#ؤ'ؤ.ؤ2ؤ:ؤ>ؤEؤIؤQؤUؤ\ؤ`ؤhؤlؤsؤwؤ‡Ø¤‹Ø¤’ؤ–ؤžØ¤ĸØ¤ŠØ¤­Ø¤ĩؤšØ¤ĀØ¤ÄØ¤ĖØ¤ĐØ¤×Ø¤ÛØ¤ëØ¤īØ¤öؤúØ¤Ų¤Ų¤ Ų¤Ų¤Ų¤Ų¤#Ų¤'Ų¤/Ų¤3Ų¤:Ų¤>Ų¤EŲ¤IŲ¤PŲ¤TŲ¤\Ų¤`Ų¤gŲ¤kŲ¤rŲ¤vŲ¤}Ų¤Ų¤‘Ų¤•Ų¤œŲ_ŠŲ¤­Ų¤ŧŲ¤ĀŲ¤ĮŲ_ÔŲ¤ØŲ¤įŲ¤ëŲ¤ōŲ_˙Ų¤Ú¤Ú¤Ú¤Ú_*Ú¤.Ú¤=Ú¤AÚ¤HÚ_UÚ¤YÚ¤hÚ¤lÚ¤sÚ_€Ú¤„Ú¤“Ú¤—Ú¤žÚ_ĢÚ¤¯Ú¤žÚ¤ÂÚ¤ÉÚ_ÖÚ¤ÚÚ¤éÚ¤íÚ¤ôÚ_Û¤Û¤Û¤Û¤Û_,Û¤0Û¤?Û¤CÛ¤PÛ¤TÛ¤aÛ¤eÛ¤rÛ¤vÛ¤…Û¤‰Û¤–Û¤šÛ¤§Û¤ĢÛ¤ĀÛ¤ÄÛ¤ĖÛ¤ĐÛ¤ØÛ¤ÜÛ¤äÛ¤čÛ¤øÛ¤üۤܤܤܤܤܤܤ%ܤ)ܤ9ܤ=ܤEܤIܤYܤ]ܤfܤjܤsܤwܤ~ܤ‚ܤ“ܤ—ܤžÜ¤ĸܤąÜ¤ĩܤžÜ¤ÂܤĶܤ×ܤßܤãܤķܤ÷ܤūܤŨ¤Ũ¤Ũ¤Ũ¤ Ũ¤(Ũ¤,Ũ¤<Ũ¤@Ũ¤OŨ¤SŨ¤cŨ¤gŨ¤pŨ¤tŨ¤{Ũ¤Ũ¤Ũ¤”Ũ¤ŖŨ¤§Ũ¤ˇŨ¤ģŨ¤ĖŨ¤ĐŨ¤ßŨ¤ãŨ¤ęŨ_īŨ¤ķŨ¤úŨ_˙Ũ¤Ū¤ Ū_Ū¤Ū¤Ū_Ū¤#Ū¤*Ū_7Ū¤;Ū¤BŪ¤FŪ¤NŪ¤RŪ¤YŪ¤]Ū¤dŪ¤hŪ¤oŪ¤sŪ¤zŪ¤~Ū¤ŽŪ¤’Ū¤™Ū_žŪ¤ĸŪ¤ŠŪ_ŽŪ¤˛Ū¤šŪ_žŪ¤ÂŪ¤ÉŪ_ÖŪ¤ÚŪ¤áŪ¤åŪ¤ėŪ¤đŪ¤÷Ū¤ûۤߤߤߤߤ!ß_.ߤ2ߤAߤEߤLß_QߤUߤ\ß_iߤmߤtߤxߤߤƒß¤“ߤ—ߤ¨ß¤ŦߤŊߤÁߤĘߤÎߤÕߤŲߤęߤîߤũߤā¤ā¤ā¤'ā¤+ā¤:ā§>ā§Eā§Iā§Qā§Uā§]ā§aā§iā§mā§uā§yā§‰ā§ā§”ā§˜ā§ ā§¤ā§Ŧ⧰⧎ā§ģā§Âā§Æā§Öā§Úā§áā§åā§íā§ņā§ųā§ũā§á§á§á§á§#á§'á§.á§2á§9á§=á§Má§Qá§Xá_eá§iá§xá§|ᧃᧇ᧗᧛á§Ŧá§°á§Áá§Åá§Îá§Ōá§Ųá§Ũá§îá§ōá§â§â§â§â§â§â§.â§2â§AâĢEâĢLâĢPâĢWâĢ[âĢbâĢfâĢvâĢzâĢ‚â̆âĢŽâĢ’â̚âĢžâ̝âĢŗâĢēâĢžâĢÅâĢÉâĢĐâĢÔâĢäâĢčâĢīâĢķâĢûâĢ˙âĢãĢ ãĢãĢ#ãĢ2ãĢ6ãĢFãĢJãĢQãĢUãĢjãĢnãĢ~ãĢ‚ãĢ‘ãĢ•ãĢĨãĢŠã̞ãĢļãĢŋãĢÃãĢĖãĢĐãĢáãĢåãĢėãĢđãĢ÷ãĢûãĢ äĢäĢäĢäĢ$äĢ(äĢ1äĢ5äĢ>äĢBäĢSäĢWäĢ^äĢbäĢiäĢmäĢtäĢxä̇äĢ‹äĢ›ä̟ä̍äĢŦäĢĩäĢšäĢĘäĢÎäĢ×äĢÛäĢääĢčäĢųäĢũäĢåĢåĢåĢåĢ"åĢ&åĢ.åĢ2åĢBåĢFåĢWåĢ[åĢdåĢhåĢoåĢsåĢ„å̈åĢ—åĢ›å̤å̍åĢšåĢŊåĢÍå­Ņå­Ųå­Ũå­íå­ņå­øå­üå­æ­ æ­æ­æ­%æ­)æ­5æ­9æ­Hæ­Læ­Sæ­Wæ­`æ­dæ­mæ­qæ­xæ­|æ­‹æ­æ­–æ­šæ­Ąæ­Ĩæ­Ŧæ­°æ­ŋæ­Ãæ­Ėæ­Đæ­Ųæ­Ũæ­ææ­ęæ­ûæ­˙æ­į­ į­į­į­į­"į­*į­.į­>į­Bį­Rį­Vį­_į­cį­lį­pį­į­…į­Žį­’į­›į­Ÿį­°į­´į­ģį­ŋį­Îį­Ōį­Ųį­Ũį­åį­éį­ųį­ũį­č­č­č­č­&č­*č­;č­?č­Nč­Rč­[č­_č­pč­tč­„č¯ˆč¯č¯“č¯šč¯žč¯Ĩč¯Šč¯šč¯Ŋč¯Åč¯Éč¯Ņč¯Õč¯Ũč¯áč¯ōč¯öč¯ũč¯é¯é¯ é¯é¯é¯'é¯+é¯2é¯6é¯>é¯Bé¯Ié¯Mé¯bé¯fé¯ué¯yé¯‰é¯é¯”é¯˜é¯­é¯ąé¯Áé¯Åé¯Ô靨é¯čé¯ėé¯õé¯ųé¯ę¯ę¯ę¯ę¯$ę¯(ę¯/ę¯3ę¯:ę¯>ę¯Mę¯Qę¯Zę¯^ę¯gę¯kę¯tę¯xę¯ę¯…ę¯–ę¯šę¯Ąę¯Ĩę¯Ŧ杰李ę¯ģę¯Ęę¯Îę¯Ūę¯âę¯ëę¯ī杸ę¯üę¯ ë¯ë¯ë¯ë¯'ë¯+ë¯<ë¯@ë¯Gë¯Kë¯Zë¯^ë¯eë¯ië¯që¯u믅믉믚믞믧ë¯Ģë¯˛ë¯ļë¯Įë¯Ëë¯Úë¯Ūë¯įë¯ëë¯üë¯ė¯ėąėąėą ėą0ėą4ėą;ėą?ėąHėąLėąUėąYėąhėąlėąsėąwėą€ėą„ėąėą‘ėą˜ėąœėąĢėą¯ėąļėąēėąÁėąÅėąĖėąĐėąßėąãėąėėąđėąųėąũėąíą íąíąíą&íą*íą2íą6íą>íąBíąJíąNíą^íąbíąríąvíąíąƒíąŒíąíąĄíąĨíąŽíą˛íąģíąŋíąĐíąÔíąÛíąßíąîíąōíąųíąũíąîą îąîąîą.îą2îą;îą?îąFîąJîą[îą_îąnîąrîą{îąîąîą”î¨î¯îŗîēîžîÅîÉîĐîÔîãîįîîî_ķî÷îūî_īīī_īīī_#ī'ī.ī_;ī?īHīLīUīYībīfīoīsī„īˆī’ī–ī ī¤īŽī˛īŧīĀīŌīÖīßīãīėīđīųīũīđ đđđ-đ1đ8đ<đLđPđWđ_\đ`đgđ_lđpđwđ_|đ€đ‡đ_Œđđ—đ_¤đ¨đąđĩđžđÂđËđĪđØđÜđíđņđøđ_ũđņņ_ ņņņ_ņ!ņ(ņ_-ņ1ņ8ņ_EņIņRņVņ_ņcņlņpņyņ}ņŽņ’ņ›ņŸņ¨ņŦņĩņšņÂņÆņ×ņÛņâņ_įņëņōņ_÷ņûņō_ō ōō_ōō"ō_/ō3ō<ō@ōIōMōVōZōcōgōxō|ō‹ōō–ō_Ŗō§ōšōŊōÆōĘōŲōŨōîōōōķķķķ ķ$ķ.ķ2ķ<ķ@ķRķVķ_ķcķlķpķyķ}ķ†ķŠķ›ķŸķŠķ­ķˇķģķÅķÉķĶķ×ķéķíķöķúķôôôôô!ô2ô6ô@ôDôNôRô\ô`ôjônô€ô„ô‹ôô–ôšôĄôĨô´ô¸ôÂôÆôĐôÔôŪôâôėôđôõõ õõõõ#õ'õ6õ:õDõHõRõVõ`õdõvõzõƒõ‡õõ”õõĄõ˛õļõŊõÁõĐõÔõæõęõûõ˙õööö ö*ö.ö8ö<öNöRö[ö_öhölöuöyöŠöŽö˜öœöĻöĒö´ö¸öĘöÎöÕöŲöāöäöëöīöūö÷ ÷÷÷"÷,÷0÷:÷>÷P÷T÷]÷a÷j÷n÷÷ƒ÷Š÷Ž÷÷Ą÷°÷´÷Æ÷Ę÷Û÷ß÷î÷ō÷ü÷øøøø"ø2ø6øHøLø]øaørøvø‡ø‹øœø øąøĩøŧøĀøŅøÕøßøãøíøņøûø˙øųųų#ų-ų1ų;ų?ųQųUų^ųbųkųoųxų|ųų‘ų˜ųœųŠų­ųēųžųÍųŅųâųæųíųņųųųũųúúúú'ú+ú;ú?úOúSúZú__úcújú_wú{ú‚ú†úú‘ú˜úœúŖú§úļúēúÁú_ÆúĘúŅú_Ūúâúëúīúøúüúû ûûûû#û4û8ûFûJûQûUûeûiûrûvûûƒûŒûû™ûûĻûĒûŗûˇûČûĖûĶû×ûŪûâûéûíûüûü ü üü"ü)ü-ü6ü:üCüGüXü\ülüpüyü}üŽü’ü›üŸü°ü´üģüŋüÎüŌüãüįüđüôüûü˙üũũ#ũ'ũ.ũ2ũ:ũ>ũNũRũ[ũ_ũhũlũ}ũũ‰ũũ•ũ™ũŠũ­ũžũÂũÉũ_ÎũŌũŲũ_Ūũâũéũ_öũúũūū ūūūū"ū&ū5ū9ū@ū_EūIūPū_UūYū`ū_mūqūzū~ū‡ū‹ūœū ūŽū˛ūģūŋūÎūŌūÛūßūčūėūũū˙˙ ˙˙˙˙"˙1˙5˙>˙B˙S˙W˙^˙b˙k˙o˙€˙„˙”˙˜˙Š˙­˙ž˙Â˙É˙Í˙Ü˙ā˙į˙ë˙ķ˙÷˙  )-48IM\`qu…‰šž¯ŗŧĀĮËÜāōö !%7;JN_clpw{Œŗŗ˜ŗœŗ¤ŗ¨ŗ¸ŗŧŗÄŗČŗĐŗÔŗÜŗāŗņŗõŗŗŗŗŗ"ŗ&ŗ5ŗ9ŗJŗNŗU_bŗfŗrŗvŗ…ŗ‰ŗ’ŗ–ŗŸŗŖŗŦŗ°ŗÁŗÅŗĖŗĐŗ×ŗÛŗęŗîŗ÷ŗûŗŗŗŗŗŗ"ŗ3ŗ7ŗ>ŗBŗIŗMŗTŗXŗgŗkŗ{ŗŗˆŗŒŗ•ŗ™ŗĒŗŽŗˇŗģŗÄŗČŗŲŗŨŗäŗčŗ÷ŗûŗŗŗŗŗ"ŗ&ŗ7ŗ;ŗDŗHŗOŗSŗdŗhŗwŗ{ŗ„ŗˆŗ™ŗŗ­ĩąĩšĩŊĩÅĩÉĩŲĩŨĩäĩčĩņĩõĩūĩĩĩĩĩ ĩ)ĩ-ĩ>ĩBĩRV]aimuy…‘ĄĨŦ°¸ŧÄČŅÕŪâëīøü _!(_-18_EIPT]ajnuy‚†“šž§Ģ˛ļŋÃĘÎßãôø   '+BF]ax|“—žĸšŊÄČįëōö˙ $(15<@IMTXimtx“ĒŽÅÉāäëī    & * 2 6 > B R V _ c j n  ƒ ’ –  Ą Ē Ž ˇ ģ  Æ Ī Ķ ä č ņ õ ū     $ + / ; ? N R [ _ p t {   ” › Ÿ Ž ˛ à Į Đ Ô Û ß đ ô     - 1 @ D L P ` d p t ˆ Œ “ — § Ģ ´ ¸ Á Å Î Ō ã į đ ô ũ     # 2 6 ? C J N _ c r v }  ˆ Œ “ — ž ĸ Š ­ ´ ¸ ŋ à Ō Ö Ũ á ę î ÷ û     & * < @ G K Z ^ g k t x ‰  – š Ŗ § ¸ ŧ à Į Ö Ú ã į đ ô  #48?CRV_clp…Ž’›Ÿ°´ģŋÎŌÛßčėũ ,07;JNW[dhy}†Š“—¨ŦŗˇÆĘÔØâæøü '+26EISWaew{„ˆ‘•ĻĒąĩÄČŌÖāäöú%)04CGQU_cuy‚†“¤¨¯ŗÂÆĐÔŪâôø#'.2AENR\`qu~‚‹ ¤Ģ¯žÂËĪØÜíņúū  '+:>GKTXimvzƒ‡˜œŖ§ļēÃĮĐÔåéōö˙#26GKUY`dvz‰žĸŦ°ˇģÍŅāäõų$(7;LPZ^ei{Ž’Ŗ§ąĩŧĀŌÖåéúū )-<@RV`dko…”˜ĒޏŧÃĮŲŨėđ15DHZ^hlsw‰œ ˛ļČĖÛßđôū  #26GKUY`dvz‰žĸŦ°ˇģÍŅāäõų$(7;DHOS\`imvzƒ‡”ĄĢ¯¸ŧÅÉÚŪåéōö˙ #,07;DHQUfjqu~‚“—žĸąĩŧĀĪĶäčųũ &*37AENR[_pt}ŠŽ—›¤¨ąĩžÂĶ×āäíņúū  )-6:CGPTeiptƒ‡”ĄĒŽĀÄÍŅÚŪįëü '+:>EIRV_cjnƒŒ—›¤¨ąĩÆĘŅÕŪâķ÷ū /3<@QU^bsw~‚‘•žĸŗˇĀÄÕŲāäķ÷"&7;BFUYjnƒ’–§ĢŧĀĪĶäčņõü   $ ( 9 = F J Q U f j y } Ž ’ Ŗ § ļ ē Ë Ī Ø Ü ã į ø ü  !! !$!-!1!8!/B/I/_V/Z/i/šm/š|/š€/š‡/oŒ/š/š—/oœ/š /š§/o´/š¸/šŋ/oĖ/šĐ/šā/šä/šë/ođ/šô/šû/o0š0š 0o0š0š-0š10š80_E0šI0šP0šT0šd0šh0šy0ģ}0ģ„0ģˆ0ģ0ģ“0ģš0ģž0ģ­0ģą0ģ¸0_Å0ŊÉ0ŊĐ0ŊÔ0ŊÛ0Ŋß0Ŋî0Ŋō0Ŋų0_1ŋ 1ŋ1ŋ1ŋ1ŋ 1ŋ/1ŋ31ŋ:1_G1ÁK1ÁR1ÁV1Á^1Áb1Áj1Án1Á~1Á‚1ÁŠ1ÁŽ1Á–1Áš1Áĸ1ÁĻ1Áļ1Áē1ÁÁ1oÆ1ÁĘ1ÁŅ1oÖ1ÁÚ1Áá1oî1Áō1Áų1_2Á 2Á2_2Á"2Á12Á52Á<2_I2ÁM2Á\2Á`2Ág2Ák2Ás2Áw2Á€2Á„2Á“2Á—2Á¤2Á¨2Áˇ2Áģ2ÁĘ2ÁÎ2ÁŨ2Áá2Áđ2Áô2Áû2o3Á3Á 3o3Á3Á#3_03Á43Á;3_H3ÁL3Á[3Á_3Áf3_s3Áw3Á†3Š3“3—3ž3ĸ3Ē3Ž3ļ3ē3Î3Ō3Ų3Ũ3í3ņ3444444'4+4:4>4P4ÃT4Ã[4o`4Ãd4Ãk4ox4Ã|4Ã4o4”4›4Ÿ4Ž4˛4Á4Å4Ė4oŅ4Õ4Ü4oé4í4ô4o55 5o555o)5-5>5B5Q5U5f5j5y5Å}5Ō5Ő5ŗ5ś5Åĸ5ÅĻ5Åĩ5Åš5ÅĀ5_Å5ÅÉ5ÅĐ5_Ũ5Åá5Åč5_õ5Åų5Å 6Å6Å%6Å)6Å86Å<6ÅK6ÅO6ÅV6ÅZ6Åc6Åg6Åv6Åz6Ł6Ņ6Ŏ6Œ6ř6ŝ6ÅŽ6Ş6Åģ6Åŋ6ÅČ6ÅĖ6ÅÕ6ÅŲ6Åę6Åî6Å÷6Åû6Å 7Å7Å7Å7Å*7Å.7ÅB7ÅF7Åd7Åh7Åw7Å{7ř7ŝ7ÅŦ7Ű7ÅÄ7ÅČ7ÅÜ7Åā7Åī7Åķ7Å8Å8Å 8Å8Å"8Å&8Å/8Å38ÅD8ÅH8ÅY8Å]8Ål8Åp8ń8ň8ÅĻ8ÅĒ8ÅČ8ÅĖ8ÅÛ8Įß8Įî8Įō8Įų8Įũ8Į9Į9Į9Į9Į"9_/9É39É?9ÉC9ÉO9ÉS9É_9Éc9Éo9És9ɇ9ɋ9ɓ9ɗ9ɟ9ÉŖ9Éŗ9ɡ9Éž9ÉÂ9ÉÉ9ÉÍ9ÉÔ9ÉØ9Éį9Éë9Éķ9É÷9É˙9É:É:É:É':+:2:_7:;:B:_O:S:Z:^:m:q:€:„:”:˜:¨:Ŧ:ģ:ŋ:Ī:Ķ:Ú:oį:ë:ķ:÷:; ;;;; ;(;,;;;?;H;L;X;\;m;q;€;„;;‘;ĸ;Ļ;¯;ŗ;Į;Ë;Ú;ËŪ;Ëæ;Ëę;Ëú;Ëū;Ë<o <Ë<Ë<o<Ë<Ë%<o2<Ë6<Ë=<oJ<ËN<ËZ<Ë^<Ëj<Ën<Ëz<Ë~<ˊ<ˎ<Ëĸ<ËĻ<˯<Ëŗ<Ëŧ<ËĀ<ËÉ<ËÍ<ËÖ<ËÚ<Ëë<Ëī<Ëö<Ëú<Ë =Ë =Ë=Ë=Ë)=Ë-=Ë9=Ë==ËQ=ËU=Ë^=Ëb=Ëk=Ëo=Ëx=Ë|=ˍ=ˑ=Ë =ˤ=Ë­=Ëą=˸=Ëŧ=ËÍ=ËŅ=Ëā=Ëä=Ëí=Ëņ=Ëø=Ëü=Ë >Ë>Ë >Í$>Í+>Í/>Í>>ÍB>ÍI>ÍM>Í\>Í`>Íg>ol>Íp>Íw>o|>̀>͇>o”>͘>͟>oŦ>Ͱ>Íš>ÍŊ>ÍÎ>ÍŌ>ÍÛ>Íß>Íč>Íė>Íũ>Í?Í?Í ?Í?Í?Í(?Í,?Í=?ÍA?ÍJ?ÍN?ÍW?Í[?Íl?Íp?Íw?Í{?͊?͎?͗?͛?Íĸ?ÍĻ?͡?Íģ?ÍĘ?ÍÎ?Í×?ÍÛ?Íâ?Íæ?Í÷?Íû?Í @@@@!@%@-@1@@@D@K@O@V@Z@a@e@t@x@@_Œ@@™@@Š@­@Á@Å@Î@Ō@Ū@â@ö@Īú@ĪAĪ AĪAĪAĪ&AĪ*AĪ6AĪ:AĪNAĪRAĪYAĪ]AĪdAĪhAĪwAĪ{AĪ‚A_AŅ“AҚAŅžAŅĨAŅŠAŅšAŅŊAŅÆAŅĘAŅŅAŅÕAŅŪAŅâAŅëAŅīAŅBŅBŅBŅBŅBŅBŅ$BŅ(BŅ7BŅ;BŅBB_OBĶSBĶ\BĶ`BĶlBĶpBĶ„B͈BĶBĶ“BĶĸBĶĻBĶ­BĶąBĶĀBĶÄBĶËBoĐBĶÔBĶÛBoāBĶäBĶëBoøBĶüBĶCoCĶCĶCĶ!CĶ2CĶ6CĶ?CĶCCĶTCĶXCĶ_CĶcCĶrCĶvCĶC̓CĶ”C͘CĶĄCĶĨCĶļCĶēCĶÁCĶÅCĶÔCĶØCĶáCĶåCĶėCĶđCĶDĶDĶDĶDĶ!DĶ%DĶ,DĶ0DĶADĶEDĶTDXD_DcDjDnDuDyDˆDŒD•D™D D¤D­DąDēDžDĪDĶDÚDŪDåDéDđDôDûD˙DEEEoE"E)Eo6E:EAE_NEÕREÕZEÕ^EÕfEÕjEÕrEÕvEÕ~EՂEՊEՎE՞EÕĸEÕŠEÕ­EÕļEÕēEÕÃEÕĮEÕÎEÕŌEÕÛEÕßEÕčEÕėEÕõEÕųEÕFÕFÕ FÕFÕFÕFÕ-FÕ1FÕBFÕFFÕOFÕSFÕZFÕ^FÕoFÕsFՂFՆFՍFՑF՚F՞FÕ§FÕĢFÕ´FÕ¸FÕÁFÕÅFÕÖFÕÚFÕáFÕåFÕėFÕđFÕøFÕüFÕGÕGÕGÕGÕ*GÕ.GÕ5Go:GÕ>GÕEGoJGÕNGÕUGobGÕfGÕmGozGÕ~GՇGՋGՔG՘GÕŠGÕ­GÕ´GošGÕŊGÕÄGoÉGÕÍGÕÔGoáGÕåGÕöGÕúGÕH_HÕHÕ!HÕ%HÕ6HÕ:HÕCHÕGHÕPHÕTHÕ]HÕaHÕrHÕvHÕHՃHՌHՐHՙH՝HÕŽHÕ˛HÕšHÕŊHÕĖHÕĐHÕáHÕåHÕîHÕōHÕųHÕũHÕIÕIÕ!I×%I×-I×1I×9I×=I×EI×II×QI×UI×eI×iI×uI×yIׅI׉IוIיI×ĨI׊I×ŊI×ÁI×ČI×ĖI×ĶI××I׿I×ęI×ņI×õI×ũI×J× J× J×J×J×#J×'J×0J×4J×=J×AJ×RJ×VJ×]J×aJ×pJ×tJ×{J×J׈J׌JוJיJ× JפJ×­J׹J×ēJמJ×ÅJ×ÉJ×ŌJ×ÖJ×ŨJ×áJ×ōJ×öJ×ũJ×K× K×K×K×K×"K×&K×/K×3K×DK×HK×OK×SK×[K×_K×gK×kK×sK×wKׇK׋KגKזKןK×ŖK×ŦK×°KסK×ģK×ÄK×ČK×ŲK×ŨK׿K×ęK×ķK×÷K×L×L×L×L× L×$L×0L×4L×CL×GL×PL×TL×eL×iL×pL×tLׅL׉LאLהL×ŖL×§L׸L×ŧL×ÅL×ÉL×ĐL×ÔL×åL×éL×øL×üL×M× M×M×M×%M×)M×8MŲf_KfOfVf_cfgfnfŨsfwf~fŨƒf‡fŽfŨ›fŸf§fĢfŗfˇfŋfÃfËfĪfßfãfęfîfõfųfgg ggg"g)g_.g2g9g_FgJgQg_^gbgvgzgŽg’g™gg­gągĀgÄgËgĪgØgÜgëgīgögúghhhh#h'h0h4h=hAhJhNh_hchlhphh…hŒhhœh h¯hŗhēhžhĮhËhŌhÖhįhëhôhøh i iii'i+i?iCiaieitixi–išiŠi­iÁiÅiŲiŨiäičiøiüi jjjj#j'j6j:jAjEjNjRjYj]jnjrj{jjˆjŒj•j™jĒjŽjˇjģjĖjĐj×jÛjįjëjújūjk kk k)k-k>kBkIkMk\k`kikmk~k‚k‹kk k¤kĢk¯kžkÂkÖkÚkøkük ll-l1l@lDlLlPl`ldlklolvlzl‰ll”l_ĄlßĨlßŦlß°l߸lßŧlßÄlßČlßŅlßÕlßŪlßâlßëlßīlßølßülß mßmßmßmß%mß)mß1mß5mß=mßAmßQmßUmßamßemßqmßum߁m߅mߑmߕmߊmß­mß´m߸mßĀmßÄmßĖmßĐmßŲmßŨmßæmßęmßķmß÷mßnßnßnßnß nß$nß+nß/nß6nß:nßAnßEnßLnßPnß_nßcnßjn_onßsnßzn_n߃nߊn_—nߛnßĸnßĻn߯nßŗnßŧnßĀnßĮnßËnßÔnߨnßánßånßînßōnßųnßũnßoß oßoßoß(oß,oß=oßAoßJoßNoßUoßYoßjoßnoß}o߁o߈oߌoߕoߙoßĸoßĻo߯oßŗoßÄoßČoßĪoßĶoßÚoßŪoßåoßéoßøoßüoß pßpßpopßpß&po3pß7pß>poKpßOpßXpß\pßepßipßzpß~p߅poŠpߎpߕpošpߞpßĨpo˛pßļpßĮpßËpßŌp_ßpßãpßōpßöpßqß qßqßqß!qß%qß.qß2qß;qß?qßPqßTqß]qßaqßjqßnqßwqß{q߄q߈qߙqߝqߤqߨqߡqßģqßĖqßĐqßŲqßŨqßäqßčqßųqßũqß rßrßrßrß&rß*rß3rß7rßHrßLrßUrßYrßbrßfrßorßsr߄r߈rߏrߓrßĸrßĻrߡrßģrßÄrßČrßĪrßĶrßärßčrß÷ráûrásásásásásásá'sá+sá4sá8sáAsáEsáNsáRsá[sá_sáhsálsá}sásá‰sásá•sá™sáĄsáĨsá­sáąsášsáŊsáÍsáŅsáŨsáásáísáņsáũsátá tátátá!tá5tá9tá@táDtáLtáPtáXtá\táetáitártávtátáƒtáŒtátá™tátáĻtáĒtáģtáŋtáÆtáĘtáŅtáÕtáÜtáātáįtáëtáōtáötáuá uáu_uáuá u_%uá)uá0u_=uáAuáHu_MuáQuáXu_]uáauáhu_muáquáxu_…uá‰uáuá”uáuáĄuáĒuáŽuáĩuášuáÂuáÆuáĪuáĶuáÜuáāuáéuáíuáöuáúuávávávává#vá'vá8váwáBwáIwoVwáZwácwágwápwátwá…wá‰wáwo•wá™wá woĨwáŠwá°woŊwáÁwáŌwáÖwáŨw_ęwáîwáũwáxáxáxáxá#xá,xá0xá9xá=xáFxáJxá[xá_xáhxálxáuxáyxá‚xá†xáxá“xá¤xá¨xá¯xáŗxáŋxáÃxáŌxáÖxáįxáëxáôxáøxá˙xáyáyáyá'yá+yá4yá8yáIyáMyáVyáZyákyáoyávyázyá‰yáyá–yášyáŖyá§yá°yá´yáÅyáÉyáŌyáÖyáßyáãyáėyáđyázázá zázázá#zá4zá8záAzáEzáLzáPzáazáezátzáxzá‰zázá–zášzáĄzáĨzáļzáēzáÉzãÍzãÕzãŲzãázãåzãízãņzãųzãũzã{ã {ã{ã{ã){ã-{ã9{ã={ãI{ãM{ãY{ã]{ãi{ãm{ã{ã…{ãŒ{ã{ã—{ã›{ãĸ{ãĻ{ãĩ{ãš{ãĀ{ãÄ{ãĖ{ãĐ{ãØ{ãÜ{ãå{ãé{ãō{ãö{ã˙{ã|ã |ã|ã!|ã%|ã,|ã0|ã7|ã;|ãJ|ãN|ãU|ãY|ãa|ãe|ãm|ãq|ãz|ã~|ã‡|ã‹|ã”|ã˜|ãĄ|ãĨ|ãŽ|ã˛|ãģ|ãŋ|ãÆ|ãĘ|ãĶ|ã×|ãč|ãė|ãũ|ã}ã }ã}ã}ã}ã*}ã.}ã=}ãA}ãH}ãL}ãT}ãX}ã`}ãd}ãm}ãq}ãz}ã~}ã‡}ã‹}ã”}ã˜}ãĄ}ãĨ}ãŽ}ã˛}ãģ}ãŋ}ãČ}ãĖ}ãŨ}ãá}ãč}ãė}ãô}ãø}ã~ã~ã ~ã~ã ~ã$~ã-~ã1~ã=~ãA~ãM~ãQ~ã]~ãa~ãu~ãy~ã€~ã„~ãŒ~ã~ã˜~ãœ~ãĨ~ãŠ~ã˛~ãļ~ãŋ~ãÃ~ãĖ~ãĐ~ãŲ~ãŨ~ãæ~ãę~ãķ~ã÷~ããããã ã$ã+ã/ã6ã:ãAãEãLãPãWã[ãbãfãuãyã€_…ã‰ã_•ã™ã _ĨãŠã°_ĩãšãĀ_ÍãŅãŲãŨãæãęãķã÷ã€ã€㠀ã€ã€ã€ã'€ã+€ã4€ã8€ãA€ãE€ãV€ãZ€ãa€_f€ãj€ãq€_v€ãz€぀_†€㊀㑀_–€㚀ãĄ€_Ļ€ãĒ€ãą€_ž€ã€ãɀã̀ãրãڀãã€ãį€ãî€ãō€ãû€ã˙€ã㠁ãã㠁ã$ã-ã1ã:ã>ãGãKãTãXãaãeãvãz㋁㏁㘁㜁ãŖ㧁㸁ãŧãˁã΁ãցãځãããįãđãôãũã‚㠂ã‚ã‚ã#‚ã*‚ã.‚ã5‚ã9‚ã@‚ãD‚ãK‚ãO‚ã^‚ãb‚ãq‚ãu‚ã|‚o‚ㅂ㌂o‘‚㕂㜂oŠ‚㭂㴂oÁ‚ãłã΂ãŌ‚ãۂã߂ãđ‚ãô‚ãû‚oƒãƒ㠃oƒãƒãƒo(ƒã,ƒã=ƒãAƒãHƒ_UƒãYƒãhƒãlƒã}ƒぃ㊃㎃㗃㛃㤃㨃ãąƒãĩƒãƃãʃã̓ã׃ãāƒãäƒãíƒãņƒãúƒãūƒã„ã„ã„ã„ã*„ã.„ã=„ãA„ãR„ãV„ã_„ãc„ãj„ãn„ã„ツ㒄㖄㟄ãŖ„㴄㸄ãÁ„ãńãքãڄãá„ãå„ãô„ãø„ã…ã…ã…ã…ã…ã…ã0…ã4…ã=…ãA…ãJ…ãN…ãW…ã[…ãl…ãp…ãw…ã{…㊅㎅㟅ãŖ…ãŦ…㰅ãˇ…ãģ…ãĖ…ãЅã߅ãã…ãô…ãø…ã†ã†㠆ã†ã!†ã%†ã4†8†?†_D†H†O†_T†X†_†_l†p†x†|†…†‰†’†–†§†̆˛†_ˇ†ģ††_Į†ˆŌ†_׆ۆâ†_ī†ķ†û†˙†‡ ‡‡‡ ‡$‡4‡8‡@‡D‡T‡X‡a‡e‡v‡z‡‡…‡”‡˜‡Ą‡Ĩ‡ļ‡ē‡ÇĮ‡؇܇ã‡į‡ö‡ú‡ˆˆˆˆ%ˆ)ˆ:ˆ>ˆEˆIˆXˆ\ˆmˆqˆzˆ~ˆ…ˆ‰ˆšˆžˆ­ˆąˆˆƈΈ͈ڈۈīˆķˆ‰‰‰‰$‰(‰/‰3‰D‰H‰W‰[‰c‰g‰o‰s‰ƒ‰‡‰‰“‰Ŗ‰§‰ŗ‰ˇ‰ˉΉ։ډí‰ņ‰ø‰_ũ‰ŠŠ_ŠŠ Š$Š-Š1Š:Š>ŠMŠQŠ]ŠaŠpŠtŠ{ŠŨ€Š„Š‹ŠŨŠ”Š›ŠŨ Š¤Š̊Ũ°Š´ŠģŠŨŠĊˊŨЊԊۊŨčŠėŠķŠ÷Š‹‹ ‹‹ ‹$‹3‹7‹C‹G‹P‹T‹c‹g‹x‹|‹ƒ‹_ˆ‹Œ‹“‹_ ‹¤‹°‹´‹Ŋ‹Á‹ЋԋۋŨā‹ä‹ë‹Ũđ‹ô‹û‹ŨŒŒ ŒŨŒŒŒŨ(Œ,Œ5Œ9ŒBŒFŒWŒ[ŒjŒnŒzŒ~Œ‡Œ‹ŒšŒžŒ¯ŒŗŒēŒ_ĮŒˌ܌āŒėŒđŒųŒũŒ Ũ$(9=MQ]ajn}ˆ_•™ĨŠ˛ļōɍЍ_ՍŲā_íņúūŽ ŽŽ Ž,Ž0Ž9Ž=ŽLŽPŽWŽŨ\Ž`ŽgŽŨtŽxŽŽ…ŽŽŽ’ŽŖŽ§ŽŽŽ˛ŽēŽžŽΎŌŽŪŽâŽëŽīŽūŽ $59IMTXbfmqƒ‡” ¤­ąŏɏŅՏäčīķũ $04HLUYbfos|€‘•œ А­ļēÁŐΐԐېߐæęōö‘ ‘‘‘*‘.‘5‘_:‘>‘E‘_R‘V‘]‘a‘j‘n‘w‘{‘‚‘†‘‘“‘¤‘¨‘´‘¸‘Į‘ˑŌ‘֑ߑã‘ė‘đ‘÷‘û‘’’’’$’(’7’;’G’K’T’X’g’k’r’v’’ƒ’Œ’’—’›’¤’¨’š’Ŋ’ĒȒĪ’Ķ’ã’į’ķ’÷’“ “““&“_3“7“C“G“V“Z“c“g“p“t“}““’“–“ž“ĸ“˛“ļ“ŋ“ÓĖ“ГŲ“Ũ“î“ō“û“˙“” ”””*”.”5”9”E”I”U”Y”h”l”}””Дޔ•”™”ǔޔŊ”Á”ȔĖ”ՔŲ”â”æ”õ”ų”••••$•(•/•3•?•C•R•V•_•c•t•x••ƒ•”•˜•Ÿ•Ŗ•˛•ļ•Į•˕ԕؕߕã•ô•ø•– ––––#–4–8–G–K–S–W–_–c–s–w–~–‚–Š–Ž–––š–Ē–Ž–ˇ–ģ–ĖȖŲ–Ũ–æ–ę–ķ–÷–— ———"—&—7—;—B—F—U—Y—b—f—m—q—‚—†—•—9™—9 —9¤—9Ŧ—9°—9ē—9ž—9Ɨ9ʗ9ܗ9ā—9į—oô—9ø—9˜9 ˜9˜_˜9#˜92˜96˜9=˜_B˜9F˜9M˜_Z˜9^˜9g˜9k˜9t˜9x˜9‰˜9˜9”˜_Ą˜9Ĩ˜9ļ˜9ē˜9Á˜_Θ9Ԙ9á˜9å˜9î˜9ō˜9™™™™™™(™,™;™?™K™O™^™b™i™Ũn™r™y™Ũ†™Š™‘™•™ž™ĸ™Ģ™¯™ļ™ē™ə͙ܙā™ė™đ™ų™ũ™ šš!š%š,š_1š5š<š_AšEšLš_Yš]šišmšvšzš‰šš”šo™šš¤šoК­š´šoÁšŚҚ՚ۚâšņšõšüšo›› ›o›››o)›-›9›=›F›J›Y›]›d›Ũi›m›t›Ũy›}›„›Ũ‘›•›ž›ĸ›Ģ›¯›¸›ŧ›͛Ņ›ā›ä›đ›ô›ũ›œœœ%œ)œ0œ_5œ9œ@œ_EœIœPœ_]œaœmœqœzœ~œœ‘œ˜œoœĄœ¨œo­œąœ¸œoŜɜ՜؜âœæœõœųœo o o-1=AJN]ahomqxo}ˆo•™ĨŠ˛ļŝɝНo՝Ųāoåéđoũž žžžž-ž1ž8ž_=žAžHž_MžQžXž_ežižužyž‚ž†ž•ž™žĸžĻž¯žŗžŧžĀžŅž՞ܞāžéžížöžúž Ÿ ŸŸŸ#Ÿ'Ÿ8Ÿ<ŸCŸGŸVŸZŸcŸgŸpŸtŸ…Ÿ‰Ÿ’Ÿ–ŸŸŸŖŸ´Ÿ¸ŸŋŸßԟ֟ߟãŸôŸøŸ      ! % 6 : I M ^ b k o v z ‹  ž ĸ ŗ Ꭰįŋ įàįË įĪ įß įã įę įî į÷ įû įĄįĄįĄįĄį,Ąį0Ąį<Ąį@ĄįOĄįSĄįZĄį^ĄįgĄįkĄį|Ąį€ĄįĄ锡éĻĄéĒĄ鲥éļĄ鞥éÂĄéĘĄéÎĄéÖĄéÚĄéâĄéæĄéîĄéōĄéĸéĸé ĸ_ĸéĸéĸ_"ĸé&ĸé-ĸ_2ĸé6ĸé=ĸ_JĸéNĸéUĸéYĸéaĸéeĸémĸéqĸézĸé~ĸé‡ĸé‹ĸé”ĸé˜ĸéĄĸéĨĸéŽĸé˛ĸéģĸéŋĸéČĸéĖĸéŨĸéáĸéčĸ_íĸéņĸéøĸ_ũĸéŖéŖ_ ŖéŖéŖ_Ŗé!Ŗé(Ŗ_5Ŗé9Ŗé@ŖéDŖéMŖéQŖéZŖé^ŖégŖékŖétŖéxŖéŖ郪錪鐪é—Ŗ雪餪鍪靪éŗŖéŧŖéĀŖéĮŖéËŖéŌŖéÖŖéŨŖéáŖéōŖéöŖé˙Ŗé¤é ¤é¤é¤é#¤é2¤é6¤é=¤_B¤éF¤éM¤_R¤éV¤é]¤_b¤éf¤ém¤_z¤é~¤酤鉤鑤镤靤饤éǤ鎤顤éģ¤éĤéȤéҤéÕ¤éŪ¤éâ¤éë¤éī¤éĨéĨé Ĩ_ĨéĨéĨ_ Ĩé$Ĩé+Ĩ_0Ĩé4Ĩé;Ĩ_HĨéLĨéSĨéWĨé`ĨédĨémĨéqĨéxĨé|Ĩé…Ĩé‰Ĩé’Ĩé–ĨéŸĨéŖĨéĒĨéŽĨéˇĨéģĨéĘĨéÎĨéÕĨéŲĨéâĨéæĨéīĨéķĨéúĨéūĨéĻé ĻéĻéĻé'Ļé+Ļé2Ļé6Ļé>ĻéBĻéJĻéNĻéVĻéZĻébĻéfĻévĻézĻéĻé…ĻéŽĻé’Ļé›ĻéŸĻéĻĻéĒĻéŗĻéˇĻéČĻéĖĻéÕĻéŲĻéâĻéæĻéīĻéķĻé§é§é§é§é§é#§é2§é6§é?§éC§éT§éX§é_§éc§ét§éx§é§郧钧閧韧éŖ§é´§鸧éÁ§éŧéÖ§éÚ§éá§éå§éô§éø§é¨é¨é¨é¨é#¨é'¨é8¨é<¨éC¨éG¨éV¨éZ¨éc¨ég¨éx¨é|¨酨鉨隨鞨éĨ¨銨鸨éŧ¨éŨéɨéÚ¨éŪ¨éį¨éë¨éü¨éŠéŠé ŠéŠéŠé/Šé3Šé<Šé@ŠéGŠéKŠé\Šé`ŠéoŠésŠ鄩鈊鑩镩霩é Š鹊éĩŠéÄŠéČŠéŲŠéŨŠéæŠéęŠéņŠéõŠéĒé ĒéĒéĒé.Ēé2Ēé;Ēé?ĒéFĒéJĒé[Ēé_ĒénĒérĒéƒĒé‡ĒéĒé”Ēé›ĒéŸĒé°Ēé´ĒéÃĒéĮĒéØĒéÜĒéåĒééĒéđĒéôĒéĢé ĢéĢëĢë#Ģë'Ģë/Ģë3Ģë;Ģë?ĢëGĢëKĢëSĢëWĢë_ĢëcĢëkĢëoĢëvĢëzĢëŠĢëŽĢëĄĢëĨĢë­ĢëąĢëšĢëŊĢëÅĢëÉĢëŅĢëÕĢëŨĢëáĢëéĢëíĢëũĢëŦëŦ_ ŦëŦëŦ_Ŧë!Ŧë(Ŧ_-Ŧë1Ŧë8Ŧ_EŦëIŦëPŦëTŦë\Ŧë`ŦëhŦëlŦëuŦëyŦë‚Ŧë†ŦëŦë“ŦëœŦë ŦëŠŦë­ŦëļŦëēŦëÃŦëĮŦëØŦëÜŦëãŦ_čŦëėŦëķŦ_øŦëüŦë­_­ë ­ë­_­ë­ë#­_0­ë4­ë;­ë?­ëH­ëL­ëU­ëY­ëb­ëf­ëo­ës­ëz­ë~­뇭닭뒭떭럭ëŖ­ëĒ­뎭롭ëģ­ë­ëÆ­ëÍ­ëŅ­ëØ­ëÜ­ëí­ëņ­ëú­ëū­ëŽë ŽëŽëŽë-Žë1Žë8Ž_=ŽëAŽëHŽ_MŽëQŽëXŽ_]ŽëaŽëhŽ_uŽëyŽ뀮넮댮됎똎뜮ëĨŽ늎벎ëļŽëŋŽëÃŽëĖŽëĐŽëŲŽëŨŽëæŽëęŽëûŽë˙Žë¯_ ¯ë¯ë¯_¯ë¯ë&¯_+¯ë/¯ë6¯_C¯ëG¯ëN¯ëR¯ë[¯ë_¯ëh¯ël¯ës¯ëw¯뀯넯덯둯뚯랯ëĨ¯늯ë˛¯ëļ¯ëůëɯëĐ¯ëÔ¯ëŨ¯ëá¯ëę¯ëî¯ëõ¯ëų¯ë°ë°ë°ë°ë"°ë&°ë-°ë1°ë9°ë=°ëE°ëI°ëQ°ëU°ë]°ëa°ëq°ëu°ë|°뀰뉰데떰뚰륰ëĨ°뎰벰ëðëĮ°ëаëÔ°ëŨ°ëá°ëę°ëî°ë˙°ëąë ąëąëąëąë-ąë1ąë:ąë>ąëOąëSąëZąë^ąëoąësąëząë~ą덱둱뚱랱ë¯ąëŗąëŧąëĀąëŅąëÕąëÜąëāąëīąëķąëüąë˛ë˛ë˛ë˛ë"˛ë3˛ë7˛ë>˛ëB˛ëQ˛ëU˛ë^˛ëb˛ës˛ëw˛뀲넲땲뙲ë ˛뤲ëŗ˛롲ëžëIJëÕ˛ëŲ˛ëâ˛ëæ˛ë÷˛ëû˛ëŗëŗëŗëŗë*ŗë.ŗë7ŗë;ŗëBŗëFŗëWŗë[ŗëjŗënŗëŗëƒŗëŒŗëŗë—ŗë›ŗëŦŗë°ŗëŋŗëÃŗëÔŗëØŗëáŗëåŗëėŗëđŗë´ë´ë´ë´ë)´ë-´ë6´ë:´ëA´ëE´ëV´ëZ´ëi´ëm´ë~´내담돴떴뚴ëĢ´믴ëž´ë´ëĶ´ë×´ëā´ëä´ëë´ëī´ëĩëĩëĩĩĩ"ĩ+ĩ/ĩ6ĩ:ĩKĩOĩVĩZĩiĩmĩuĩyĩĩ…ĩĩ‘ĩĄĩĨĩĩĩšĩÂĩÆĩ×ĩÛĩäĩčĩųĩũĩļļļļ$ļ(ļ/ļ3ļDļHļWļ[ļlļpļļ…ļŒļļŸļŖļ´ļ¸ļÉļÍļÜļāļņļõļūļˇ ˇ ˇˇ"ˇ1ˇ5ˇ>ˇBˇIˇMˇ^ˇbˇqˇuˇ|ˇ€ˇˆˇŒˇ”ˇ˜ˇ ˇ¤ˇŦˇ°ˇŽġˡΎÖˇÚˇéˇíˇôˇøˇ¸ ¸¸¸¸#¸3¸7¸>¸B¸Q¸U¸]¸a¸i¸m¸u¸y¸¸…¸•¸™¸ĸ¸Ϗ¯¸ŗ¸ŧ¸ɸ͸Ū¸â¸é¸í¸ú¸ū¸ šššš.š2š:š>šOšSšZš^šmšqšzš~šš“šœš šąšĩšŧšĀšĪšĶšÚšŪšíšņšúšūšē ēēē!ē%ē6ē:ēCēGēPēTē]ēaējēnēēƒēŠēŽēēĄē¨ēŦē´ē¸ēĀēÄēÔēØēāēäēėēđēģģ ģģ"ģ&ģ/ģ3ģDģHģOģSģbģfģwģ{ģŒģģŸģŖģ´ģ¸ģÉģÍģÜģāģņģõģŧ ŧŧŧ&ŧ*ŧ1ŧ5ŧFŧJŧYŧí]ŧílŧípŧíxŧí|ŧí„ŧíˆŧíŧí”ŧíœŧí ŧí¨ŧíŦŧí´ŧí¸ŧíČŧíĖŧíĶŧ_ØŧíÜŧíãŧ_čŧíėŧíķŧ_øŧíüŧíŊ_ŊíŊíŊíŊí'Ŋí+Ŋí3Ŋí7Ŋí@ŊíDŊíMŊíQŊíZŊí^ŊígŊíkŊítŊíxŊíŊí…ŊíŽŊí’ŊíŖŊí§ŊíŽŊ_ŗŊíˇŊížŊ_ÃŊíĮŊíÎŊ_ĶŊí×ŊíŪŊ_ãŊíįŊíîŊ_ûŊí˙Ŋíží žížíží ží$ží-ží1ží:ží>žíEžíIžíRžíVží]žíažíjžínžíužíyž킾톾퍞푾혞휾íŖží§ží¸žíŧžíÅžíÉžíĐžíÔžíåžíéžíøžíüžíŋ_ŋí ŋíŋ_ŋíŋí#ŋ_(ŋí,ŋí3ŋ_@ŋíDŋíKŋíOŋíWŋí[ŋícŋígŋípŋítŋí}ŋíŋíŠŋíŽŋí—ŋí›ŋí¤ŋí¨ŋíąŋíĩŋíÆŋíĘŋíŅŋ_ÖŋíÚŋíáŋ_æŋíęŋíņŋ_öŋíúŋíĀ_ĀíĀíĀíĀí&Āí*Āí3Āí7Āí>ĀíBĀíKĀíOĀíXĀí\ĀíeĀíiĀípĀítĀí}ĀíĀíĀí”Āí›ĀíŸĀí¨ĀíŦĀíĩĀíšĀíĀĀíÄĀíÍĀíŅĀíÚĀíŪĀííĀíņĀíøĀíüĀíÁíÁíÁíÁíÁí Áí(Áí,Áí<Áí@ÁíGÁíKÁíTÁíXÁíaÁíeÁílÁípÁíyÁí}ÁíŽÁí’Áí›ÁíŸÁí¨ÁíŦÁíĩÁíšÁíĘÁíÎÁíÕÁíŲÁíåÁíéÁíøÁíüÁíÂí ÂíÂíÂí%Âí)Âí:Âí>ÂíEÂíIÂíXÂí\ÂíeÂíiÂízÂí~Âí‡Âí‹ÂíœÂí Âí§ÂíĢÂíēÂížÂíĮÂíËÂíÜÂíāÂíéÂííÂíūÂíÃí Ãí ÃíÃí Ãí)Ãí-Ãí>ÃíBÃíKÃíOÃí`ÃídÃíkÃíoÃí~Ãí‚Ãí‹ÃíÃí Ãí¤Ãí­ÃíąÃíÂÃíÆÃíÍÃíŅÃíāÃíäÃíõÃíųÃíÄíÄí ÄíÄí"Äí&Äí5Äí9ÄíJÄíNÄíWÄí[ÄíbÄífÄíwÄí{ÄíŠÄíŽÄíŸÄíŖÄíŦÄí°ÄíˇÄíģÄíĖÄíĐÄíßÄíãÄíôÄíøÄíÅíÅí ÅíÅí!Åí%Åí4Åí8ÅíIÅíMÅíVÅíZÅíaÅíeÅívÅízÅí‰ÅíÅížÅíĸÅíĢÅí¯ÅíļÅíēÅíËÅíĪÅíŪÅâÅęÅîÅõÅųÅÆ ÆÆÆÆ#Æ*Æ.Æ>ÆBÆIÆMÆXÆ\ÆdÆhÆsÆwÆÆƒÆŽÆ’ƚƞƊƭÆĩÆšÆÄÆČÆĐÆÔÆ߯ãÆëÆīÆúÆūÆĮ ĮĮĮ!Į%Į0Į4ĮDĮHĮOĮ_\Į`ĮpĮtĮ‰ĮĮ”Į_ĄĮĨĮĩĮšĮÎĮŌĮŲĮŨæĮęĮúĮūĮČ ČČČ,Č0Č7Č_DČHČXČ\ČqČuČ|Č_‰ČČČĄČļČēČÁČ_ÎČŌČâČæČûČ˙ČÉ ÉÉÉ/É3É;É?ÉOÉSÉbÉfÉvÉzɂɆɖɚɊɭɴÉ_ÁÉÅÉÕÉŲÉæÉęÉųÉũÉĘĘ"Ę&Ę3Ę7ĘFĘJĘQĘ_^ĘbĘrĘvĘƒĘ‡Ę–ĘšĘĢƝƏĘŧĘÃĘĮĘØĘÜĘãĘįĘķĘ÷ĘË ËËË(Ë,Ë3Ë7ËHËLË[Ë_ËoËs˃ˇˎ˒˙˝ËŦ˰ˡËģËĘËÎË×ËÛËėËđË˙ËĖĖĖĖ Ė/Ė3ĖDĖHĖOĖ_TĖXĖ_Ė_lĖpĖ|Ė€Ė‰ĖĖœĖ Ė§Ė_Ŧ˰ˎĖ_ÄĖČĖŅĖÕĖäĖčĖņĖõĖÍ ÍÍÍ#Í'Í6Í:ÍAÍ_FÍJÍQÍ_^ÍbÍkÍoÍ~Í‚Í‹ÍÍ Í¤Í­ÍąÍÂÍÆÍÍÍŅÍāÍäÍíÍņÍÎÎÎÎ$Î(Î/Î3ÎBÎFÎNÎRÎZÎ^ÎnÎrÎyÎ_~΂ΉÎ_ŽÎ’ΙÎ_ĻÎĒÎŗÎˇÎĀÎÄÎÕÎŲÎåÎéÎōÎöÎĪ ĪĪĪ'Ī+Ī2Ī6ĪGĪKĪZĪ^ĪoĪsĪ|Ī€Ī‡Ī‹ĪœĪ Ī¯ĪŗĪŧĪĀĪŅĪÕĪæĪīęĪīņĪīõĪīüĪīĐī ĐīĐīĐī Đī'Đī+Đī7Đī;ĐīGĐīKĐīRĐīVĐībĐīfĐīmĐīqĐī}ĐīĐīˆĐīŒĐī˜ĐīœĐīĢĐī¯Đī¸ĐīŧĐīÃĐīĮĐīĪĐīĶĐīÜĐīāĐīėĐīđĐīüĐīŅī Ņī ŅīŅīŅī)Ņī-Ņī5Ņī9ŅīBŅīFŅīRŅīVŅī^ŅībŅīnŅīrŅī‚Ņī†ŅīŅī‘ŅīŅīĄŅī­ŅīąŅī¸ŅīŧŅīČŅīĖŅīØŅīÜŅīãŅīįŅīķŅī÷ŅīūŅīŌīŌīŌīŌīŌī)Ōī-Ōī<Ōī@ŌīIŌīMŌīYŌī]ŌīiŌīmŌīvŌīzŌī†ŌīŠŌī–ŌīšŌīŖŌī§ŌīŗŌīˇŌīĀŌīÄŌīĐŌīÔŌīŨŌīáŌīíŌīņŌīĶīĶīĶīĶī!Ķī%Ķī-Ķī1ĶīAĶīEĶīLĶīPĶīXĶī\ĶīdĶīhĶīpĶītĶī|Ķī€ĶīˆĶīŒĶī”Ķī˜Ķī¨ĶīŦĶī¸ĶīŧĶīČĶīĖĶīØĶīÜĶīčĶīėĶīøĶīüĶīÔī Ôī Ôī$Ôī5Ôī9Ôī@ÔīDÔīPÔīTÔī`ÔīdÔīkÔīoÔī{ÔīÔī‹ÔīÔī–ÔīšÔīĻÔīĒÔīąÔīĩÔīÁÔīÅÔīŲÔīŨÔīäÔīčÔīđÔīôÔīüÔīÕīÕī ÕīÕīÕī Õī$Õī,Õī0Õī@ÕīDÕīMÕīQÕīZÕī^ÕīgÕīkÕītÕīxÕīÕī…Õī–ÕīšÕī¯ÕīŗÕīŧÕīĀÕīÉÕīÍÕīÖÕīÚÕīëÕīīÕīøÕīüÕīÖī ÖīÖīÖī'Öī+Öī:Öī>ÖīOÖīSÖī\Öī`ÖīgÖīkÖī|Öī€ÖīÖī“Öī›ÖīŸÖī¯ÖŗÖģÖŋÖÆÖĘÖŅÖÕÖŨÖáÖčÖėÖôÖøÖ˙Ö× ××××*×.×5×_:×>×E×_J×N×U×_b×f×o×s×|×€×‰××–×š×Ŗ×§×°×´×Ŋ×Á×Ō×Ö×ä×č×÷×û×ØØØØØ"Ø+Ø/Ø8Ø<ØEØIØZØ^ØmØqØØƒØŒØØŸØŖØ´Ø¸ØŋØ_ÄØČØĪØ_ÔØØØߨ_äØčØīØ_üØŲ Ų ŲŲ Ų'Ųo,Ų0Ų7ŲoDŲHŲQŲUŲfŲjŲqŲ_~Ų‚Ų“Ų—Ų¨ŲŦŲŊŲÁŲÍŲŅŲÚŲŪŲíŲņŲÚÚÚÚ*Ú.Ú5Ú9ÚHÚLÚSÚ_`ÚdÚuÚyÚ€Ú_Ú‘ÚĸÚĻÚˇÚģÚÂÚ_ĪÚĶÚäÚčÚņÚõÚūÚÛÛÛ(Û,Û3Ûo8Û<ÛCÛoHÛLÛSÛo`ÛdÛmÛqÛzÛ~ۏۓۚÛ_ŸÛŖÛĒÛ_ˇÛģÛÄÛČÛŲÛŨÛæÛęÛûÛ˙ÛÜ ÜÜ!Ü-Ü1Ü:Ü>ÜMÜQÜXÜ_]ÜaÜhÜ_uÜy܂܆ܗܛÜĸÜ_§ÜĢܲÜ_ŋÜÃÜĖÜĐÜáÜåÜîÜōÜŨŨŨŨ%Ũ)Ũ5Ũ9ŨBŨFŨUŨYŨbŨfŨwŨ{Ũ„ŨˆŨ™ŨŨ¤Ũ¨ŨˇŨģŨĖŨĐŨáŨåŨôŨøŨ˙ŨŪŪŪ'Ū+Ū<Ū@ŪOŪSŪZŪo_ŪcŪjŪowŪ{Ū„ŪˆŪ™ŪŪ¤Ū_ąŪĩŪÆŪĘŪŅŪ_ŪŪâŪéŪíŪüŪßß_ßß'ß+ß<ß@ßOßSßgßkß|߀߉ߍߔߘߊ߭ßŧßĀßŅßÕßæßęßųßũßā_ ā āā_!ā%ā.ā2āCāGāNā_[ā_āpātā…ā‰āšāžāĒāŽāˇāģāĘāÎāßāãāôāøāá ááoáá"áo/á3á<á@áQáUá\á_iámá~á‚á“á—á¨áŦá¸áŧáÅáÉáØáÜáíáņáââââ*â.â?âCâRâVâgâkâ|â€ââ“â¤â¨âšâŊâĖâĐâŲâŨâæâęâķâ÷âã ããã"ã&ã/ã3ãDãHãOãSãbãfãoãsã}ãã’ã–ãžãĸã˛ãļãĀãÄãÎãŌãäãčãņãõãūãääää"ä1ä5äFäJä\ä`äjänäuäyä‹ääžäĸäŗäˇäČäĖäÛäßäæäęäōäöäũäååååå'å+å:å>åEå_JåNåUå_Zå^åeå_råvå}ååˆåŒå›åŸåĢå¯åžåÂåĘåÎåÖåÚåęåîåõåųåæææææ#æ+æ/æ?æCæJæNæ]æaæiæmæuæyæ‰ææ”æ˜æ§æĢæŗæˇæŋæÃæĶæ׿āæäæíæņæįį įį į$į5į9įBįFįMįQįbįfįuįyį€įo…į‰įįo•į™į įo­įąįēįžįĮįËįÜįāįėįđį˙įč č_ččč_č#č*č_7č;čDčHčQčUčfčjčvčzč‰čč”čŨ™čč¤čŨŠč­č´čŨÁčÅčÎčŌčÛčßčđčôčüčéé éé é,é0é9é=éLéPéWé_\é`égé_lépéwé_„éˆé”é˜é§éĢé´é¸éÉéÍéÖéÚéëéīéöéúé ę ęę"ę3ę7ęHęLę[ę_ęhęlę}ęęˆę_ę‘ę˜ę_ęĄę¨ę_ĩęšęĀęÄęËęĪęŪęâęîęōęëë ëëëë-ë1ë8ë<ëCëGëVëZëbëfënërë‚ë†ëë‘ë ë¤ëŦë°ë¸ëŧëĖëĐë×ëÛëęëîëöëúë ėėėė,ė0ė7ė;ėJėNėWė[ėbėfėwė{ėŠėŽė•ėošėžėĨėo˛ėļėŋėÃėÔėØėäėčė÷ėûėí_í íí_í#í,í0íAíEíQíUídíhíoíŨtíxííŨŒíí™ííŽí˛íší_žíÂíÉí_ÖíÚíæíęíųíũíîî#î'î.î2îAîEîVîZîkîoî~î‚î“î—îžîĸîŠî­î´î¸îŋîÃîĘîÎîŨîáîčîėîôîøîīī īīīī#ī'ī/ī3ī;ī?īFīJīZī^īeīojīnīuīo‚ī†īŽī’īšīžīĻīĒī˛īļīĮīËīØīÜīëīīīöīŨûī˙īđŨđđđ#đ+đ/đ7đ;đKđOđVđZđbđfđnđrđzđ~đŽđ’đŸđŖđŦđ°đŋđÃđËđĪđ×đÛđãđįđ÷đûđņņņņ"ņ&ņ-ņ1ņ8ņ<ņCņGņVņZņaņeņlņpņwņ{ņ‚ņ†ņ•ņ™ņ ņoĨņŠņ°ņoĩņšņĀņoÍņŅņŲņŨņåņéņņņõņūņō ōōō#ō*ō–/ō3ō:ō–?ōCōJō–Wō[ōcōgōoōsō{ōōˆōŒōœō ō§ō_Ŧō°ōˇō_ŧōĀōĮō_ÔōØōāōäōėōđōøōüōķ ķķķ$ķ–)ķ-ķ4ķ–9ķ=ķDķ–QķUķ]ķaķiķmķuķyķ‚ķ†ķ–ķšķĄķ_ĻķĒķąķ_ļķēķÁķ_ÎķŌķÚķŪķæķęķōķöķ˙ķôôôô–#ô'ô.ô–3ô7ô>ô–KôOôWô[ôcôgôoôsô|ô€ôô”ô›ô_ ô¤ôĢô_°ô´ôģô_ČôĖôÔôØôāôäôėôđôųôũô õõõŨõ!õ(õŨ-õ1õ8õŨ=õAõHõŨUõYõaõeõmõqõyõ}õ†õŠõšõžõĨõ_ĒõŽõĩõ_ēõžõÅõ_ŌõÖõŪõâõęõîõöõúõöööö"ö–'ö+ö2ö–7ö;öBö–OöSö[ö_ögökösöwö€ö„ö”ö˜öŸö_¤ö¨ö¯ö_´ö¸öŋö_ĖöĐöØöÜöäöčöđöôöũö÷÷÷÷Ũ!÷%÷,÷Ũ1÷5÷<÷ŨI÷M÷U÷Y÷a÷e÷m÷q÷z÷~÷Ž÷’÷™÷_ž÷ĸ÷Š÷_Ž÷˛÷š÷_Æ÷Ę÷Ō÷Ö÷Ū÷â÷ę÷î÷÷÷û÷ øøøø#ø'ø/ø3ø<ø@øPøTø\ø`øpøtø}øø’ø–øøĄø°ø´øÅøÉøŌøÖøŨøáøōøöøų ųųų/ų3ųDųHųOųoTųXų_ųolųpųwų{ų‚ų†ųŽų’ų›ųŸųĻųĒų˛ųļųŊųÁųÉųÍųÔųØųāųäųõųųųú–ú úú–ú!ú(ú,ú3ú7ú?úCúLúPúWú[úcúgúnúrú‚ú†úú_’ú–úú_ĒúŽúĩúšúĀúÄúĖúĐúŲúŨúäúčúđúôúûú˙úûûûŨû#û*ûŨ7û;ûBûFûMûQûYû]ûfûjûqûuû}ûûˆûŒûœû û§û_Ŧû°ûˇû_ÄûČûĪûĶûÚûŪûæûęûķû÷ûūûü üüüü)ü-ü4ü–9ü=üDü–QüUü\ü`ügüküsüwü€ü„ü‹üü—ü›üĸüĻüļüēüÁü_ÆüĘüŅü_Ūüâüéüíüôüøüũũ ũũũũ$ũ(ũ/ũ3ũCũGũNũRũYũ]ũeũiũrũvũ}ũũ‰ũũ”ũ˜ũ¨ũŦũŗũˇũÆũĘũĶũ×ũčũėũķũ÷ũū ūūū(ū,ū3ū7ūHūLū[ū_ūpūtū…ū‰ūšūžūĨūoĒūŽūĩūoēūžūÅūoŌūÖūŨūáūčūėūķū÷ūūū˙ ˙˙˙˙"˙&˙.˙2˙9˙=˙E˙I˙Z˙^˙e˙–j˙n˙u˙–z˙~˙…˙–’˙–˙˙Ą˙¨˙Ŧ˙ŗ˙ˇ˙ž˙Â˙Ę˙Î˙×˙Û˙â˙æ˙î˙ō˙ų˙ũ˙ _!(_-18_EIPT[_fjqu}ŠŽ•™ĄĨŦ°ĀÄËŨĐÔÛŨāäëŨøü$(04=AHLTX_csw~_ƒ‡Ž_“—ž_̝ļēÁÅĖĐ×Ûãįđôû˙ &*1–6:A–FJQ–^bimtxƒŠŽ–šŖ§Ž˛ēžÅÉŲŨä_éíô_ųũ_ '+26=AIMVZaemqx|Œ—›ĸĻ­ąšŊÆĘŅÕŨáčėü '+<@GKZ^os|€‡‹œ ¯ŗÄČŲŨäč÷û –#'.2AENR[_pt{Ž’™ĻĒŗˇÆĘĶ×āäõų $-1BFOS\`qu|€“¤¨ąĩŧĀŅÕäčņõü$(/3:>EIPTcgn_sw~_‹—›Ŗ§¯ŗÄČÕŲčėķŨøüŨ (,<@OS`dmq€„•™ĸώģËĪÖÚáåīķúū    ) - 5 9 A E M Q Y ] m q ~ ‚ ‘ • œ ŨŠ ­ ĩ š Á Å Í Ņ Ų Ũ í ņ       ) - 6 : K O W [ j n  ƒ Ž ’ Ą Ĩ ļ ē É Í Ü ā é í ö ú     % ) 2 6 ? C T X a e n r {   ” › Ÿ Ģ ¯ ģ ŋ Î Ō ã į đ ô û ˙   # ' 8 < C G V Z j n w { Œ  ™  Ļ Ē ą ĩ Æ Ę Ņ Õ ä č ī ķ     # ' . 2 C G N R ^ b q u | € ‡ ‹ ’ – Ĩ Š š Ŋ Ä _É Í Ô _Ų Ũ ä _é í ô _ų ũ _!)-59BFNR[_gk|€‰œ Š­ļēÃĮØÜäčđôü  *.7;JNVZbfnr{‡‹œ ¨Ŧ´¸ĀÄÔØáåöú#'6:AŨFJQŨVZaŨnry}†Š‘•žĸąĩžÂĶ×āäõų(,=ARV_cjnƒ’–§ĢŧĀĪĶÚŪįëü (,<@HLUYaenr‚†Ž’šžŽ˛šŊÆĘĶ×Ūâëīöú  !%59@DKO^bkox|…‰šžĨа´ÃĮĐÔŨáęî˙ &*;?FJY]nr{†Š›ŸŽ˛ģŋČĖÕŲâæ÷û"+/@DKOX\eipt{†Š›ŸĻǞļžÂĘÎÖÚęî÷û #'04;?NR[_hluyŠŽ•™¨ŦŗˇŋÃĶ×čėũ!*.?CKO_ctx…Ž’Ŗ§°´ŊÁŌÖŪâōöũ!26=APTeiz~†Š’–žĸ̝ˇģÄČĐÔŨáņõ Ũ%)0Ũ59@ŨEIPŨUY`Ũmqy}…‰‘•ĄĒŽļēÃĮ×Ûęîû˙ 04;?NRbfm_z~“ŸŖŦ°ŋÃÔØäčņõ__$(/_<@IMVZcgpt…‰•™ĸĻĩšĀŨÅÉĐŨÕŲāŨíņúū !%6:IMY]fjy}Ž’™_ĻĒģŋËĪØÜëīū _+/;?HL[_pt€„‘ ¤­ąēžĮËÔØéíôø$(15<@IMTXaelp…Ž’›Ÿ¨ŦĩšĘÎÖÚãįīķû˙ (,=AHLUYbfmqx|‹˜œĨОļŋÃÔØßãėđųũ    $ ( 1 5 > B S W ^ b q u † Š “ — ž ĸ ŗ ˇ Æ Ę Ķ × ā ä í ņ !!!!"!&!7!;!D!H!Q!U!f!j!s!w!€!„!•!™!Ą!Ĩ!ĩ!š!Ā!Ä!Ķ!×!ā!ä!õ!ų!"""" "$"5"9"I"M"^"b"s"w"€"„"‹"" "¤"Ģ"¯"¸"ŧ"Å"É"Ø"Ü"å"é"ō"ö"# ###%#)#2#6#?#C#T#X#a#e#n#r#ƒ#‡#Ž#’#Ą#Ĩ#ļ#ē#Ã#Į#Î#Ō#ã#į#ö#ú#$$$$#$'$6$:$A$E$N$R$[$_$n$r${$$ˆ$Œ$$Ą$¨$Ŧ$ģ$ŋ$Č$Ė$Õ$Ų$ę$î$÷$û$%%%%$%(%7%;%L%P%Y%]%d%h%y%}%Œ%%™%%¤%¨%š%Ŋ%Ė%Đ%×%Û%ä%č%ņ%õ%&&&&&"&3&7&>&B&Q&U&^&b&k&o&€&„&&‘&š&ž&¯&ŗ&ē&ž&Í&Ņ&â&æ&ī&ķ&ú&ū&''"'&'/'3':'>'O'S'b'f'z'~'†'Š'š'ž'Ē'Ž'Â'Æ'Ī'Ķ'ß'ã'÷'û' ((((+(/(6(:(A(E(T(X(d(h(o(s(ƒ(‡(Ž(’(Ą(Ĩ(­(ą(Á(Å(Î(Ō(Û(ß(đ(ô(û(˙() )))')+)4)8)I)M)V)Z)k)o)v)z)‰))”)˜) )¤)´)¸)É)Í)Ö)Ú)á)å)ö)ú) * **"*2*6*G*K*R*V*e*i**ƒ*Š*_*“*š*_§*Ģ*˛*ļ*ŋ*Ã*Ė*Đ*Ų*Ũ*ä*č*ų*ũ*+_ + ++_++$+_1+5+<+@+J+N+X+\+f+j+t+x+‡+‹+—+›+Ē+Ž+ĩ+š+Ã+Į+Ņ+Õ+ß+ã+õ+ų+ ,,,_,,&,_+,/,6,_C,G,N,R,Y,],l,p,w,_|,€,‡,_Œ,,—,_¤,¨,ą,ĩ,ŋ,Ã,Í,Ņ,Û,ß,é,í,ö,ú, ---"-1-5->-B-L-P-Z-^-h-l-~-‚-”-˜-Ÿ-_¤-¨-¯-_´-¸-ŋ-_Ė-Đ-×-Û-â-æ-í-ņ-ø-ü- ..._..&._+./.6._C.G.P.T.^.b.l.p.z.~.ˆ.Œ.•.™.Ģ.¯.Ŋ.Á.Đ.Ô.Ũ.á.ë.ī.ų.ũ./ //!/3/7/>/ŨC/G/N/ŨS/W/^/Ũk/o/v/z//…/”/˜/Ą/Ĩ/¯/ŗ/Ŋ/Á/Ë/Ī/Ų/Ũ/æ/ę/ü/0 0 000+0/080<0K0O0X0\0f0j0t0x0‚0†0˜0œ0Ž0˛0š0_ž0Â0É0_Î0Ō0Ų0_æ0ę0ņ0õ0111_111_$1(1/1_<1@1I1M1W1[1e1i1s1w11…1Ž1’1¤1¨1ļ1ē1É1Í1Ö1Ú1ä1č1ō1ö12222,20272_<2@2G2_L2P2W2_d2h2o2s2|2€2‘2•2œ2_Ą2Ĩ2Ŧ2_ą2ĩ2ŧ2_É2Í2Ô2Ø2â2æ2đ2ô2ū23 3333#3'393=3I3M3\3`3g3k3u3y3ƒ3‡3‘3•3§3Ģ3Ŋ3Á3Č3_Í3Ņ3Ø3_Ũ3á3č3_õ3ų344 4444!4%44484?4_D4H4O4_T4X4_4_l4p4w4{4„4ˆ4’4–4Ÿ4Ŗ4Ŧ4°4ŋ4Ã4Ī4Ķ4â4æ4í4ņ4ú4ū45 555*5.5?5C5J5ŨO5S5Z5Ũ_5c5j5Ũw5{5‚5†55‘5 5¤5Ģ5¯5¸5ŧ5Å5É5Ō5Ö5ß5ã5ō5ö5˙56 6666&6*63676@6D6M6Q6Z6^6o6s6|6€66“6š6ž6§6Ģ6´6¸6Á6Å6Ö6Ú6ë6ī6ö6_û6˙67_ 777_#7'7.727A7E7L7_Q7U7\7_a7e7l7_y7}7„7ˆ7‘7•7ž7ĸ7Ģ7¯7¸7ŧ7Ë7Ī7Û7ß7î7ō7ų7ũ78 888 8$85898J8N8U8_Z8^8e8_j8n8u8_‚8†88‘8˜8œ8Ŗ8§8Ž8˛8Á8Å8Ė8_Ņ8Õ8Ü8_á8å8ė8_ų8ũ899999"9+9/989<9K9O9X9\9k9o9v9z9ƒ9‡99”99Ą9˛9ļ9Į9Ë9Ō9Ũ×9Û9â9Ũį9ë9ō9Ũ˙9: ::::(:,:3:7:@:D:M:Q:Z:^:g:k:z:~:‡:‹:”:˜:Ą:Ĩ:Ž:˛:ģ:ŋ:Đ:Ô:Ũ:á:đ:ô:û:˙:; ;;;";&;7;;;L;P;W;_\;`;g;_l;p;w;_„;ˆ;;“;ĸ;Ļ;­;_˛;ļ;Ŋ;_Â;Æ;Í;_Ú;Ū;å;é;ō;ö;˙;< <<<<,<0<<<@<O<S<Z<^<g<k<t<x<<…<–<š<Ģ<¯<ļ<_ģ<ŋ<Æ<_Ë<Ī<Ö<_ã<į<î<ō<ų<ũ<===="=_'=+=2=_7=;=B=_O=S=Z=^=g=k=t=x==…=Œ==˜=œ=­=ą=ē=ž=Í=Ņ=Ø=Ü=å=é=ō=ö=> >> >'>Ũ,>0>7>ŨD>H>O>S>b>f>m>q>z>~>‡>‹>’>–>ž>ĸ>ŗ>ˇ>Ā>Ä>Í>Ņ>â>æ>ī>ķ>?? ????/?3?D?H?Q?U?f?j?q?u?~?‚?“?—?¨?Ŧ?ĩ?š?Ā?Ä?Õ?öŲ?öā?Ũå?öé?öđ?Ũũ?ö@ö@Ũ @ö@ö@Ũ%@ö)@ö0@Ũ=@öA@öH@ŨM@öQ@öX@Ũ]@öa@öh@Ũu@öy@ö€@Ũ@ö‘@ö˜@Ũ@öĄ@ö¨@Ũ­@öą@ö¸@ŨÅ@öÉ@öĐ@ŨÕ@öŲ@öā@Ũå@öé@öđ@Ũũ@öAö AöAöAö!Aö5Aö9AöEAöIAö]AöaAöhAŨmAöqAöxAŨ}AöAöˆAŨAö‘Aö˜AŨAöĄAö¨AŨĩAöšAöĀAŨÅAöÉAöĐAŨÕAöŲAöāAŨíAöņAöųAöũAö BöBöBöBö&Bö*Bö1Bö5Bö>BöBBöKBöOBöXBö\BöcBögBöpBötBö~Bö‚Bö‹BöBö™BöBöĻBöĒBö´Bö¸BöÁBöÅBöĪBöĶBöäBöčBöōBööBöũBöCö CöCöCöCö#Cö'Cö0Cö4Cö=CöACöJCöNCöWCö[CödCöhCörCövCöCöƒCöŒCöCöšCöžCö§CöĢCöĩCöšCöÂCöÆCöĐCöÔCöŨCöáCöęCöîCö˙CöDö DöDöDöDö$Dö(Dö1Dö5DöIöQIöUIödIöhIö‚Iö†Iö—Iö›IöĸIöĻIö°Iö´IöžIöÂIöĖIöĐIöÚIöŪIöčIöėIööIöúIö JöJöJöJö$Jö(Jö0Jö4JöRöBRöIR_NRöRRöYR_^RöbRöiR_vRözRöRö…RöRö“RöRöĄRöĢRö¯RöšRöŊRöÄRöČRöŌRöÖRöŨRöáRöéRöíRö˙RöSöSöSö"Sö&Sö-Sö1Sö;Sö?SöISöMSöWSö[SöeSöiSösSöwSö‰SöSöŸSöŖSöĒS_¯SöŗSöēS_ŋSöÃSöĘS_ĪSöĶSöÚS_ßSöãSöęS_÷SöûSöTöTö TöTö Tö$Tö+T_0Tö4Tö;T_@TöDTöKT_PTöTTö[T_`TödTökT_xTö|TöƒTö‡Tö‘Tö•TöŸTöŖTö­TöąTöģTöŋTöÆTöĘTöÔTöØTößTöãTöëTöīTöUöUöUöUö$Uö(Uö/Uö3Uö=UöAUöKUöOUöYUö]UögUökUöuUöyUö‹UöUöĄUöĨUöŦU_ąUöĩUöŧU_ÁUöÅUöĖU_ŅUöÕUöÜU_áUöåUöėU_ųUöũUöVöVöVöVö"Vö&Vö-V_2Vö6Vö=V_BVöFVöMV_RVöVVö]V_bVöfVömV_zVö~Vö…Vö‰Vö“Vö—VöĄVöĨVö¯VöŗVöŊVöÁVöČVöĖVöĶVö×VößVöãVöõVöųVöWö WöWöWö#Wö'Wö1Wö5Wö?WöCWöMWöQWöcWögWöyWö}Wö„W_‰WöWö”W_™WöWö¤W_ąWöĩWöŧWöĀWöĮWöËWöÚWöŪWöåW_ęWöîWöõW_úWöūWöX_XöXöXö!Xö+Xö/Xö9Xö=XöGXöKXöRXöVXö]XöaXöiXömXöXöƒXöXö“XöĸXöĻXö­XöąXöģXöŋXöÉXöÍXößXöãXöõXöųXöYöYöYöYö$Yö(Yö/Yö3Yö=YöAYöKYöOYöaYöeYönYörYö{YöYöYö”YöYöĄYöĒYöŽYöŋYöÃYöĘYöÎYöŨYöáYöëYöīYöųYöũYöZö ZöZö!Zö+Zö/Zö9Zö=ZöGZöKZö]ZöaZöhZölZö{ZöZö‰ZöZö—Zö›ZöĨZöŠZöģZöŋZöÉZöÍZö×ZöÛZöåZöéZöûZö˙Zö [ö [ö[ö[ö%[ö)[ö3[ö7[öI[öM[öW[ö[[öe[öi[ös[öw[ö‰[ö[ö”[ö˜[ö§[öĢ[öĩ[öš[öÃ[öĮ[öŅ[öÕ[öį[öë[öõ[öų[ö\ö\ö\ö\ö'\ö+\ö5\ö9\öK\öO\öY\ö]\ög\ök\ö}\ö\ö‹\ö\ö™\ö\ö§\öĢ\öŊ\öÁ\öË\öĪ\öŲ\öŨ\öī\öķ\öũ\ö]ö ]ö]ö!]ö%]ö/]ö3]ö=]öA]öS]öW]öa]öe]öo]ös]ö…]ö‰]ö]ö”]öŖ]ö§]öą]öĩ]öĮ]öË]öÕ]öŲ]öë]öī]öų]öũ]ö^ö^ö^ö!^ö3^ö7^öA^öE^öW^ö[^öm^öq^ö{^ö^ö†^öŠ^öœ^ö ^ö˛^öļ^öĀ^öÄ^öË^öĪ^öá^öå^öô^öø^ö _ö_ö_ö_ö#_ö'_ö9_ö=_öL_P_W__\_`_g__l_p_w__|_€_‡__Œ__—__¤_¨_¯_ŗ_ŧ_Ā_É_Í_Ô_Ø_ß_ã_ę_î_÷_û_``````'`+`2`6`?`C`J`N`_`c`j`_o`s`z`_`ƒ`Š`_`“`š`_§`Ģ`˛`ļ`ŋ`Ã`Ė`Đ`Ų`Ũ`æ`ę`ķ`÷`aa aa a$a0a4aCaGaNaRa[a_ahalauaya‚a†aa“aœa aąaĩaÆaĘaŅa_ÖaÚaáa_æaęaņa_öaúab_b bb_b"b)b-b6b:bKbObVb_[b_bfb_kbobvb_{bb†b_‹bb–b_Ŗb§bŽb˛bģbŋbČbĖbÕbŲbâbæbībķbúbūbccc#c2c6c=cAcJcNcWc[cdchcqcuc~c‚c“c—c¨cŦcŗc_¸cŧcÃc_ČcĖcĶc_ØcÜcãc_đcôcûc˙cd dd!d(d_-d1d8d_=dAdHd_MdQdXd_edidpdtd}ddŠdŽd—d›d¤d¨d¯dŗdÄdČdÔdØdįdëdōdöd˙de eeee&e*e;e?ePeTe[e_`edeke_pete{e_ˆeŒe“e—e e¤e­eąeÂeÆeÍe_ŌeÖeŨe_âeæeíe_úeūef ffff#f*f.f5f9fHfLfXf\fkfofvfzfƒf‡ff”f›fŸfŽf˛fÃfĮfÎfŌfÛfßfčfėfķf÷fg ggg g$g-g1gBgFgNgRgbgfgmgqgxg|gg‘g˜gœgĢg¯gļgēgÉgÍgÖgÚgãgįgøgügh hhh'h+h2h6hEhIhRhVh_hchthxhh…hŽh’hŖh§hŽh˛hÁhÅhÖhÚhãhįhîhōhiiii+i/i8ilBlQlUlaleltlxllƒlŒll™llĻlĒlģlŋlĐlÔlÛl_ālälël_đlôlûl_m mmmm#m3m7m>m_CmGmNm_SmWm^m_kmomvmzmƒm‡mm”mmĄm¨mŦmŊmÁmÍmŅmāmämëmīmømümn nnn'n+nzMzQzXz\zhzlzszwz‹zz z¤z­ząz¸zŧzÍzŅzØzÜzæzęzņzõz{ {{{'{+{2{6{={A{R{V{]{a{p{t{ƒ{‡{–{š{Ą{_Ļ{Ē{ą{_ļ{ē{Á{_Î{Ō{Ų{Ũ{ä{č{÷{û{|_| ||_||"|_/|3|:|>|G|K|T|X|_|c|k|o|x||||‘||Ą|Ē|Ž|Ŋ|Á|Č|Ė|Õ|Ų|â|æ|÷|û| }}}_} }'}_,}0}7}_D}H}Y}]}d}_i}m}t}_y}}}„}_‘}•}œ} }Š}­}ļ}ē}Ã}Į}Î}Ō}Ú}Ū}ī}ķ}ü}~~~~~'~+~4~8~I~M~T~_Y~]~d~_i~m~t~_~…~–~š~Ą~_Ļ~Ē~ą~_ļ~ē~Á~_Î~Ō~Ų~Ũ~æ~ę~ķ~÷~ ,09=LPW[dhqu†Š›ŸĻ_̝ļ_ģŋÆ_Ķ×Ūâëīøü€ €€€%€_*€.€5€_:€>€E€_R€V€]€a€j€n€w€{€„€ˆ€€“€›€Ÿ€°€´€Ŋ€Á€ЀԀۀ߀č€ė€õ€ų€ #*_/3:_?CJ_W[bfmq€„‹_”›_ ¤́_¸ŧÁĮ΁ԁ؁Ũåéúū‚ ‚‚‚%‚)‚8‚<‚M‚Q‚Z‚^‚o‚s‚|‚€‚‘‚•‚‚Ą‚ą‚ĩ‚ŧ‚‚΂͂ڂŪ‚í‚ņ‚ø‚ü‚ ƒƒ ƒ$ƒ-ƒ1ƒ8ƒ<ƒMƒQƒYƒ]ƒeƒiƒrƒvƒ†ƒŠƒ’ƒ–ƒžƒĸƒ̃¯ƒ¸ƒŧƒ˃Ѓ؃܃äƒčƒņƒõƒ„ „„„„!„*„.„7„;„K„O„V„Z„l„p„x„|„Œ„„˜„œ„¤„¨„°„´„ŧ„Ā„ȄĖ„Ԅ؄č„ė„ô„ø„…… …………$…(…0…4…D…H…O…_T…X…_…_d…h…o…_t…x……_Œ……—…›…ĸ…Ļ…ĩ…š…Ā…_ŅɅЅ_ՅŲ…ā…_å…é…đ…_ũ…†† †††"†&†/†3†<†@†G†K†S†W†h†l†x†|†‹††–†š†Ŗ†§†°†´†Ŋ†Á†Ō†ֆŨ†_â†æ†í†_ō†ö†ũ†_‡‡ ‡_‡‡/‡3‡:‡_?‡C‡J‡_O‡S‡Z‡__‡c‡j‡_w‡{‡‚‡†‡‡“‡œ‡ ‡Ї­‡´‡¸‡‡ćՇŲ‡â‡æ‡õ‡ų‡ˆˆ ˆˆˆˆ/ˆ3ˆDˆHˆOˆ_TˆXˆ_ˆ_dˆhˆoˆ_|ˆ€ˆ‘ˆ•ˆœˆ_ĄˆĨˆŦˆ_ąˆĩˆŧˆ_Ɉ͈Ԉ؈áˆåˆîˆōˆųˆũˆ‰ ‰‰‰'‰+‰:‰>‰E‰I‰R‰V‰_‰c‰t‰x‰‰‰‰”‰_™‰‰¤‰_Љ­‰´‰_Á‰ʼnˉЉŲ‰Ũ‰æ‰ę‰û‰˙‰Š_ ŠŠŠ_ŠŠ&Š_3Š7Š>ŠBŠKŠOŠXŠ\ŠcŠgŠoŠsŠ|Š€Š‘Š•ŠžŠĸŠąŠĩŠŧŠŠɊ͊֊ڊëŠīŠ‹‹ ‹_‹‹‹_ ‹$‹+‹_8‹<‹C‹G‹N‹R‹a‹e‹l‹_q‹u‹|‹_‹…‹Œ‹_™‹‹¤‹¨‹¯‹ŗ‹ē‹ž‹Ƌʋۋߋč‹ė‹û‹˙‹Œ ŒŒŒ.Œ2Œ;Œ?ŒPŒTŒ]ŒaŒrŒvŒ~Œ‚Œ’Œ–ŒŒĄŒ°Œ´ŒģŒŋŒΌԌ،ŨŒėŒđŒ.ú2ú9Ũ>úBúIŨVúZúaŨfújúqŨ~ú‚ú‰ŨŽú’ú™ŨĻúĒúąŨžúúɍŨ֍úڍúéúíúôúøúŽú!Žú(ŽŨ-Žú1Žú8ŽŨEŽúIŽúPŽŨ]ŽúaŽúiŽúmŽú}ŽúŽú‹ŽúŽú–ŽúšŽúĄŽúĨŽúŽŽú˛ŽúģŽúŋŽúȎúĖŽúĶŽú׎úāŽúäŽúîŽúōŽúûŽú˙Žú ú úúú$ú(ú1ú5ú?úCúTúXúbúfúmúqúzú~úˆúŒú“ú—ú ú¤ú­úąúēúžúĮúˏúԏú؏úâúæúīúķúüúú úúúú%ú)ú2ú6ú@úDúMúQúZú^úoúsúzú~ú‡ú‹ú”ú˜úĄúĨúŦú°úšúŊúĮúːúԐúؐúâúæúīúķúũú‘ú ‘ú‘ú‘ú‘ú-‘ú1‘ú;‘ú?‘úF‘úJ‘úT‘úX‘úb‘úf‘úp‘út‘ú{‘ú‘ú‰‘ú‘ú”‘ú˜‘úĸ‘úĻ‘ú°‘ú´‘úģ‘úŋ‘úŅ‘úՑúį‘úë‘úķ‘ú÷‘ú˙‘ú’ú ’ú’ú’ú#’ú-’ú1’ú8’ú<’úE’úI’úS’úW’úa’úe’úl’úp’úy’ú}’ú‡’ú‹’ú•’ú™’úŖ’ú§’úą’úĩ’úŋ’úÒúĖ’úВúŲ’úŨ’úį’úë’úô’úø’ú“ú“ú“ú“ú%“ú)“ú3“ú7“ú@“úD“úQ“úU“ú_“úc“úm“úq“úz“ú~“ú‹“ú“ú™“ú“ú§“úĢ“úĩ“úš“úÓúĮ“úŅ“úՓúâ“úæ“úķ“ú÷“ú”ú”ú”ú”ú ”ú$”ú1”ú5”úG”úK”ú]”úa”úk”úo”úy”ú}”ú‡”ú‹”ú•”ú™”úŖ”ú§”úš”úŊ”úĔúȔúŌ”ú֔úā”úä”úî”úō”úü”ú•ú •ú•ú•ú•ú.•ú2•úF•úJ•úe•úi•úq•úu•ú}•ú•ú‰•ú•ú••ú™•úĄ•úĨ•úĩ•úš•úĖ•úЕúę•úî•úö•úú•ú–ú–ú–ú–ú–ú–ú&–ú*–ú2–ú6–ú>–úB–úJ–úN–ú^–úb–úi–úm–úw–ú{–ú…–ú‰–ú“–ú—–úĄ–úĨ–ú¯–úŗ–úŊ–úÁ–úĶ–úזúߖúã–úë–úī–ú÷–úû–ú—ú—ú—ú—ú%—ú)—ú0—ú4—ú;—ú?—úH—úL—úU—úY—úb—úf—úo—ús—ú}—ú—úŠ—úŽ—ú˜—úœ—úĨ—úŠ—úŗ—úˇ—úĀ—úėúΗúŌ—úŲ—úŨ—úî—úō—úü—ú˜ú˜ú ˜ú˜ú˜ú!˜ú%˜ú.˜ú2˜ú;˜ú?˜úI˜úM˜úV˜úZ˜úd˜úh˜úq˜úu˜ú˜úƒ˜úŒ˜ú˜úš˜úž˜ú¯˜úŗ˜úē˜úž˜úĮ˜ú˘úԘúؘúá˜úå˜úî˜úō˜úü˜ú™ú ™ú ™ú™ú™ú$™ú(™ú2™ú6™ú?™úC™úM™úQ™úX™ú\™úm™úq™ú{™ú™ú†™úŠ™ú”™ú˜™úĸ™úĻ™ú°™ú´™úž™ú™úĖ™úЙúיúۙúå™úé™úđ™úô™úū™úšú šú šúšúšú"šú&šú8šú<šúNšúRšúZšú^šúfšújšúršúvšú~šú‚šú’šú–šú šú¤šú̚ú¯šú¸šúŧšúƚúƚúԚúؚúâšúæšúđšúôšúūšú›ú ›ú›ú›ú›ú&›ú*›ú<›ú@›úJ›úN›úW›ú[›úh›úl›úv›úz›ú„›úˆ›ú’›ú–›ú ›ú¤›úŽ›ú˛›úŋ›úÛú͛úŅ›úŪ›úâ›úô›úø›ú œúœúœúœú&œú*œú4œú8œúBœúFœúPœúTœúfœújœúqœúuœúœúƒœúœú‘œú›œúŸœúМú­œúˇœúģœúœúƜú͜úҜúãœúįœúúúúúúú&ú*ú2ú6ú>úBúRúVúpútú|ú€úˆúŒú”ú˜ú ú¤úŦú°ú¸úŧúĝúȝúНúԝúäúčúīúķúũúžú žúžúžúžú'žú+žú5žú9žú@žúDžúKžúOžúažúežúlž_qžúužú|ž_žú…žúŒž_‘žú•žúœž_Šžú­žú´žú¸žúÁžúŞúΞúŌžú۞úߞúčžúėžúöžúúžúŸúŸúŸúŸúŸúŸú)Ÿú-Ÿú6Ÿú:ŸúDŸúHŸúQŸúUŸúgŸúkŸúrŸ_wŸú{Ÿú‚Ÿ_‡Ÿú‹Ÿú’Ÿ_—Ÿú›ŸúĸŸ_¯ŸúŗŸúēŸúžŸúȟú˟ú֟úڟúäŸúčŸúōŸúöŸúũŸú ú  ú ú ú ú" ú& ú8 ú< úH úL ú[ ú_ úf új út úx ú‚ ú† ú ú” úž úĸ úŦ ú° ú úÆ úØ úÜ úã _č úė úķ _ø úü úĄ_Ąú ĄúĄ_ĄúĄú#Ą_0Ąú4Ąú;Ąú?ĄúFĄúJĄúYĄú]ĄúdĄ_iĄúmĄútĄ_yĄú}Ąú„Ą_‰ĄúĄú”Ą_™ĄúĄú¤Ą_ąĄúĩĄúŧĄúĀĄúĘĄúÎĄúØĄúÜĄúæĄúęĄúôĄúøĄú˙Ąúĸú ĸúĸúĸúĸú$ĸú(ĸú:ĸú>ĸúJĸúNĸú]ĸúaĸúhĸúlĸúvĸúzĸú„ĸúˆĸú’ĸú–ĸú ĸú¤ĸúŽĸú˛ĸúÄĸúČĸúÚĸúŪĸúåĸ_ęĸúîĸúõĸ_úĸúūĸúŖ_ ŖúŖúŖ_ŖúŖú%Ŗ_2Ŗú6Ŗú=ŖúAŖúHŖúLŖú[Ŗú_ŖúfŖ_kŖúoŖúvŖ_{ŖúŖú†Ŗ_‹ŖúŖú–Ŗ_›ŖúŸŖúĻŖ_ŗŖúˇŖúžŖúÂŖúĖŖúĐŖúÚŖúŪŖúčŖúėŖúöŖúúŖú¤ú¤ú ¤ú¤ú¤ú¤ú.¤ú2¤ú>¤úB¤úQ¤úU¤ú\¤ú`¤új¤ún¤úx¤ú|¤ú†¤úФúœ¤ú ¤ú˛¤úļ¤úŊ¤_¤úƤúͤ_Ō¤úÖ¤úŨ¤_ę¤úî¤úõ¤úų¤úĨúĨúĨúĨúĨ_#Ĩú'Ĩú.Ĩ_3Ĩú7Ĩú>Ĩ_KĨúOĨúVĨúZĨúdĨúhĨúrĨúvĨú€Ĩú„Ĩú‹ĨúĨú–ĨúšĨúĸĨúĻĨú¸ĨúŧĨúČĨúĖĨúÛĨúßĨúæĨúęĨúôĨúøĨúĻúĻúĻúĻú.Ļú2Ļú;Ļú?ĻúHĻúLĻú]ĻúaĻúhĻúlĻúvĻúzĻú„ĻúˆĻúšĻúžĻú§ĻúĢĻú´Ļú¸ĻúÉĻúÍĻúÖĻúÚĻúãĻúįĻúøĻúüĻú§ú§ú§ú§ú$§ú(§ú2§ú6§ú@§úD§úV§úZ§úd§úh§úr§úv§ú€§ú„§ú–§úš§úĄ§úĨ§ú´§ú¸§ú§úƧúЧúÔ§úŪ§úâ§úô§úø§ú¨ú¨ú¨ú¨ú¨ú"¨ú4¨ú8¨úB¨úF¨úP¨úT¨ú^¨úb¨úl¨úp¨ú‚¨ú†¨ú¨ú”¨úž¨úĸ¨úŦ¨ú°¨ú¨úƨúͨúҍúā¨úä¨úî¨úō¨úü¨úŠú ŠúŠú Šú$Šú.Šú2Šú<Šú@ŠúRŠúVŠú`ŠúdŠúnŠúrŠú„ŠúˆŠú’Šú–Šú Šú¤ŠúļŠúēŠúÄŠúČŠúŌŠúÖŠúāŠúäŠúöŠúúŠúĒúĒúĒúĒú(Ēú,Ēú6Ēú:ĒúDĒúHĒúZĒú^ĒúhĒúlĒúvĒúzĒúŒĒúĒúšĒúžĒú¨ĒúŦĒúžĒúÂĒúÉĒúÍĒúÜĒúāĒúęĒúîĒúĢúĢúĢúĢú$Ģú(Ģú2Ģú6ĢúHĢúLĢúVĢúZĢúlĢúpĢúzĢú~ĢúĢú”ĢúĻĢúĒĢú´Ģú¸ĢúŋĢúÃĢúÕĢúŲĢúëĢúīĢúųĢúũĢúŦúŦúŦúŦú-Ŧú1ŦúCŦúGŦúQŦúUŦú\Ŧú`ŦúrŦúvŦú…Ŧ‰ŦŦ”ŦĻŦĒŦ˛ŦļŦÆŦĘŦŌŦÖŦŪŦâŦęŦîŦöŦúŦ­­­­­­&­*­:­>­F­J­R­V­^­b­j­n­v­z­‚­†­Ž­’­š­ž­Ž­˛­š­_ž­­É­_έŌ­Ų­_æ­ę­ņ­õ­ü­ŽŽŽŽ_Ž#Ž*Ž_/Ž3Ž:Ž_GŽKŽRŽVŽ_ŽcŽlŽpŽyŽ}Ž„ŽˆŽŽ”ŽĨŽŠŽĩŽšŽČŽĖŽĶŽ׎āŽäŽíŽņŽúŽūޝ¯$¯(¯0¯4¯<¯@¯H¯L¯T¯X¯`¯d¯l¯p¯€¯„¯‹¯¯–¯š¯Ą¯Ĩ¯´¯¸¯ŋ¯ï˝Đ¯Ų¯Ũ¯î¯ō¯°°°_°°°_#°'°.°_;°?°F°J°Y°]°d°_i°m°t°_y°}°„°_‘°•°œ° °а­°ļ°ē°ðĮ°ΰŌ°Ú°Ū°ī°ķ°˙°ąąąą!ą*ą.ą7ą;ąLąPąWą_\ą`ągą_ląpąwą_„ąˆąą“ąšąžą­ąąą¸ą_ŊąÁąČą_ÍąŅąØą_åąéąđąôąũą˛ ˛˛˛˛"˛&˛.˛2˛C˛G˛S˛W˛f˛j˛q˛u˛~˛‚˛‹˛˛ ˛¤˛ĩ˛š˛ž_Şɲв_Õ˛Ų˛ā˛_í˛ņ˛ø˛ü˛ŗŗŗŗ!ŗ_&ŗ*ŗ1ŗ_6ŗ:ŗAŗ_NŗRŗYŗ]ŗfŗjŗsŗwŗ€ŗ„ŗ‹ŗŗ—ŗ›ŗŦŗ°ŗšŗŊŗĖŗĐŗ×ŗÛŗäŗčŗņŗõŗ´ ´´´'´+´3´7´G´K´R´V´]´a´h´l´{´´†´Š´“´—´¨´Ŧ´Ŋ´Á´Č´_Í´Ņ´Ø´_å´é´đ´ô´ĩĩĩ_ĩĩĩ_+ĩ/ĩ6ĩ:ĩAĩEĩMĩQĩbĩfĩrĩvĩ…ĩ‰ĩĩ”ĩŖĩ§ĩ¸ĩŧĩÅĩÉĩÚĩŪĩįĩëĩüĩļļ ļļ ļ'ļ+ļ:ļ>ļEļIļXļ\ļcļgļvļzļ‹ļļ˜ļœļŖļ§ļ¸ļŧļÃļĮļŅļÕļÜļāļōļöļūˇˇ!ˇ(ˇ,ˇ=ˇAˇHˇLˇ[ˇ_ˇfˇ_kˇoˇvˇ_{ˇˇ†ˇ_‹ˇˇ–ˇ_Ŗˇ§ˇ¸ˇŧˇÃˇ_ȡˎ͎_Øˇܡãˇ_čˇėˇķˇ_¸¸ ¸¸¸¸%¸)¸2¸6¸=¸A¸R¸V¸_¸c¸r¸v¸}¸¸Џޏ—¸›¸¤¸¨¸š¸Ŋ¸θŌ¸Ų¸Ũ¸ä¸č¸ī¸ķ¸šš šššš'š+š4š8šIšMšTš_Yš]šdš_išmštš_yš}š„š_‘š•šœš š¯šŗšēš_ŋšÚĘš_ĪšĶšÚš_ßšãšęš_÷šûšēēēēē ē)ē-ē6ē:ēAēEēMēQēbēfērēvēēƒē’ē–ēēĄēĒēŽēˇēģēÄēČēŲēŨēîēōēųē_ūēģ ģ_ģģģ_ģ"ģ)ģ_6ģ:ģAģEģLģPģ_ģcģjģ_oģsģzģ_ģƒģŠģ_ģ“ģšģ_§ģĢģ˛ģļģŋģÃģĖģĐģŲģŨģæģęģņģõģũģŧŧŧ"ŧ&ŧ/ŧ3ŧBŧFŧMŧQŧZŧ^ŧgŧkŧtŧxŧ‰ŧŧžŧĸŧŠŧ_Žŧ˛ŧšŧ_žŧÂŧÉŧ_ÎŧŌŧŲŧ_æŧęŧņŧõŧüŧŊŊŊŊ_Ŋ#Ŋ*Ŋ_/Ŋ3Ŋ:Ŋ_?ŊCŊJŊ_WŊ[ŊbŊfŊoŊsŊ|Ŋ€Ŋ‰ŊŊ”Ŋ˜Ŋ Ŋ¤ŊĩŊšŊÂŊÆŊÕŊŲŊāŊäŊíŊņŊúŊūŊžž$ž(ž/ž3ž:ž>žEžIžXž\žcžgžpžtž…ž‰žšžžžĨž_ĒžŽžĩž_žÆžÍžŅžāžäžëž_đžôžûž_ŋ ŋŋŋŋ"ŋ*ŋ.ŋ?ŋCŋOŋSŋ\ŋ`ŋoŋsŋzŋ~ŋŋ‘ŋĸŋĻŋ¯ŋŗŋÄŋČŋŅŋÕŋæŋęŋōŋöŋĀ ĀĀĀ$Ā(Ā/Ā3ĀBĀFĀMĀQĀ`ĀdĀuĀyĀ‚Ā†ĀĀ‘ĀĸĀĻĀŽĀ˛ĀēĀžĀĮĀËĀÛĀßĀįĀëĀķĀ÷ĀÁÁ ÁÁ!Á%Á-Á1Á9Á=ÁFÁJÁZÁ^ÁfÁjÁrÁvÁÁƒÁŒÁÁ Áū¤ÁūĢÁū¯ÁūžÁūÂÁūÉÁūÍÁūÜÁūāÁūįÁoėÁūđÁū÷ÁoüÁūÂūÂoÂūÂūÂo,Âū0Âū9Âū=ÂūNÂūRÂū[Âū_ÂūpÂūtÂū{ÂūÂūŽÂū’Âū›ÂūŸÂū°Âū´ÂūŊÂūÁÂūŌÂūÖÂūŨÂūáÂūđÂūôÂūũÂūÃūÃū ÃūÃū!Ãū0Ãū4Ãū=ÃūAÃūHÃūLÃū]ÃūaÃūpÃtÃ|ÀÈÌÜàÊíôøÃÁÃÅÃÎÃŌÃãÃįÃîÃōÃųÃũà ÄÄÄÄ$Ä(Ä1Ä5Ä>ÄBÄSÄWÄ^ÄbÄiÄmÄ|ĀďēĜĠħÄĢÄŧÄĀÄĪÄĶÄÚÄŪÄæÄęÄōÄöÄ˙ÄÅÅÅ!Å%Å,Å0Å8Å<ÅDÅHÅXÅ\ÅmÅqÅzÅ~Å…Å‰ÅšÅžÅ­ÅąÅēÅžÅÅÅÉÅØÅÜÅåÅéÅđÅôÅũÅÆÆÆÆ Æ(Æ,Æ4Æ8ÆHÆLÆUÆYÆ`ÆdÆmÆqÆxÆ|ƅƉƚƞÆĨÆŠÆŗÆˇÆÎÆŌÆÛÆ߯đÆôÆûÆ˙ÆĮĮ!Į%Į4Į8ĮIĮMĮ^ĮbĮkĮoĮ€Į„ĮĮ‘ĮĸĮĻĮ¯ĮŗĮÄĮČĮŅĮÕĮæĮęĮķĮ÷ĮČ ČČČ&Č*Č3Č7ČHČLČUČYČjČnČuČyČˆČŒČ—Č›ČĻČĒČŊČÁČÉČÍČÕČŲČéČíČõČųČÉÉ ÉÉÉÉ$É(É0É4É<É@ÉHÉLÉTÉXÉ`ÉdÉlÉpÉxÉ|ɄɈɐɔɜɠɰɴÉģÉŨĀÉÄÉËÉŨĐÉÔÉÛÉŨčÉėÉôÉøÉĘĘĘĘ Ę$Ę,Ę0Ę@ĘDĘLĘPĘWĘ[ĘbĘfĘuĘyĘ€ĘŨ…ʉʐĘŨ•ʙʠĘŨ­ĘąĘ¸ĘŨŊĘÁĘČĘŨÍĘŅĘØĘŨŨĘáĘčĘŨõĘųĘËË ËË!Ë%Ë5Ë9ËIËMË]ËaËqËuË|Ë€Ë‰ËË–ËšËĄËĨ˴˸ËÅËÉËĐËÔËÜËāËčËėËķË÷Ë˙ËĖ ĖĖĖĖ!Ė%Ė-Ė1Ė8Ė<ĖLĖPĖWĖ[ĖdĖhĖqĖuĖ|Ė€ĖĖ“ĖšĖžĖĨĖŠĖ°Ė´ĖģĖŋĖÎĖŌĖâĖæĖīĖķĖúĖūĖÍÍ"Í&Í-Í1Í9Í=ÍEÍIÍQÍUÍ]ÍaÍiÍmÍuÍý͕͙ͨͅÍŦʹ͸ÍĀÍÄÍĖÍĐÍØÍÜÍäÍčÍđÍôÍüÍÎÎÎÎÎ&Î*Î9Î=ÎDÎHÎQÎUÎdÎhÎoÎsÎ|΀·΋ΚΞΧÎĢÎēΞÎÅÎÉÎĐÎÔÎãÎįÎöÎúÎĪĪĪĪ#Ī'Ī6Ī:ĪBĪFĪVĪZĪbĪfĪmĪqĪyĪ}Ī†ĪŠĪ‘Ī•Ī¤Ī¨Ī¯ĪŗĪģĪŋĪĐĪÔĪÛĪßĪįĪëĪķĪ÷Ī˙ĪĐĐĐĐ"Đ*Đ.Đ6Đ:ĐBĐFĐVĐZĐbĐfĐnĐrĐzĐ~ІЊКОĐĨЊадĐŧĐĀĐČĐĖĐĶĐ×ĐæĐęĐņĐõĐūĐŅ Ņ ŅŅ Ņ'Ņ+Ņ2Ņ6ŅEŅIŅXŅ\ŅeŅiŅpŅtŅ…Ņ‰Ņ˜ŅœŅŖŅ§ŅļŅēŅÂŅÆŅÎŅŌŅâŅæŅîŅōŅųŅũŅŌ ŌŌŌŌ!Ō(Ō,Ō;Ō?ŌFŌJŌRŌVŌgŌkŌsŌwŌ‡Ō‹ŌšŌžŌĨŌŠŌ°Ō´ŌÃŌĮŌÎŌŌŌÛŌßŌæŌęŌņŌõŌĶ ĶĶĶ Ķ$Ķ-Ķ1Ķ:Ķ>ĶOĶSĶ\Ķ`ĶiĶmĶ~Ķ‚Ķ‘Ķ•ĶœĶ ĶŠĶ­Ķ´Ķ¸ĶÉĶÍĶÖĶÚĶëĶīĶöĶúĶ Ô ÔÔ!Ô1Ô5ÔEÔIÔYÔ]ÔmÔqÔyÔ}Ô„ÔˆÔÔ”ÔÔĄÔ°Ô´ÔģÔŋÔĮÔËÔÜÔāÔįÔëÔúÔūÔÕ ÕÕÕÕ#Õ4Õ8Õ?ÕCÕRÕVÕ^ÕbÕrÕvÕÕƒÕ”Õ˜ÕŸÕŖÕŗÕˇÕĀÕÄÕÕÕŲÕâÕæÕíÕņÕÖÖÖÖÖÖ/Ö3ÖDÖHÖQÖUÖ\Ö`ÖqÖuÖ„ÖˆÖ—Ö›Ö¤Ö¨Ö¯ÖŗÖÄÖČÖ×ÖÛÖãÖįÖ÷ÖûÖ××××&×*×;×?×H×L×]×a×r×v׎גץ×Ĩ×Ŋ×Á×Đ×Ô×å×é×ØØØØ0Ø4ØCØGØPØTØ[Ø_ØpØtØ…Ø‰ØšØžØ­ØąØēØžØĮØËØÔØØØéØíØõØųØ Ų ŲŲŲ Ų$Ų,Ų0Ų8Ų<ŲLŲPŲYŲ]ŲnŲrŲyŲ}Ų‰ŲŲ”Ų˜ŲŦŲ°ŲšŲŊŲÆŲĘŲĶŲ×ŲčŲėŲôŲøŲÚÚÚÚÚ#Ú+Ú/Ú7Ú;ÚCÚGÚWÚ[ÚdÚhÚyÚ}Ú„ÚˆÚ”Ú˜ÚŸÚŖÚˇÚģÚÄÚČÚŅÚÕÚæÚęÚķÚ÷ÚÛÛ ÛÛÛÛ/Û3Û:Û>ÛMÛQÛXÛ\ÛkÛoÛxÛ|Û…Û‰Û’Û–Û§ÛĢÛ˛ÛļÛÅÛÉÛŌÛÖÛŨÛáÛōÛöÛÜ ÜÜÜÜ#Ü4Ü8ÜGÜKÜZÜ^ÜgÜkÜrÜv܇܋ܚܞܧÜĢܲÜļÜĮÜËÜÜÜāÜéÜíÜöÜúÜŨ ŨŨŨ'Ũ+Ũ2Ũ6ŨEŨIŨRŨVŨjŨnŨŒŨŨŸŨŖŨÁŨÅŨÔŨØŨėŨđŨŪŪ!Ū%ŪCŪGŪVŪZŪfŪjŪvŪzŪ†ŪŠŪžŪĸŪĒŪŽŪžŪÂŪÉŪÍŪÜŪāŪéŪíŪūŪß ß ßß ß)ß-ß9ß=ßFßJß^ßbßkßo߀߄ߋߏߞßĸßļßēߨßÜßëßīß āā ā$ā8ā<āZā^āmāqāā“āĸāĻā˛āļāŋāÃāŌāÖāęāîā÷āûāáááá*á.á6á:áAáEáLáPá_ácájáná}ááˆáŒá”á˜á¨áŦáŊáÁáĐáÔáÛáßáæáęáââ ââââ&â*âAâEâLâPâ_âcâkâoââƒâŽâ’âĨâŠâ´â¸âÄâČâĶâ×âęâîâõâųâããããã#ã+ã/ã;ã?ãFãJãQãUã\ã`ãhãlã|ã€ã‡ã‹ã–ãšãĸãĻãĩãšãĀãŨÅãÉãĐãŨŨãáãčãėãķã÷ãä äää-ä1ä8ä<äKäOä^äbänärää…äŒääŸäŖäĒäŽäļäēäÉäÍäÔäØäįäëäōäöäå ååå%å)å4å8åCåGå[å_åfåjåyå}å„åˆåå“åŖå§å¯åŗåÃåĮåÎåŌåáåååíåņåæææææ#æ7æ;æJæNæeæiæxæ|æ‹ææĻæĒæšæŊæÅæÉæĐæÔæÛæßæîæōæųæũæ įįįį#į'į7į;įDįHįQįUįlįpįwį{į‚į†įįĄį¨įŦįŗįˇįÎįŌįÛįßįæįęįķį÷įčččč&č*č9č=čEčIčYč]čhčlččƒčŽč’čžčĸč­čąčÄčČčĪčĶčÛčßčîčōčųčũčé ééé é$é+é/é6é:éBéFéVéZéaéeéméqéxé|é•é™é éŨĨéŠé°éŨŊéÁéČéĖéĶé×éæéęéųéũé ęęęę+ę/ę7ę;ęKęOę[ę_ęfęjęyę}ę„ęˆę—ę›ęĸęĻęŽę˛ęÁęÅęĖęĐęßęãęëęīę÷ęûę ëëëë+ë/ë:ë>ëIëMëaëeëlëpëëƒëŠëŽë•ë™ëŠë­ë´ë¸ëĀëÄëÔëØëßëãëōëöëūëėėė!ė%ė0ė4ėHėLė[ė_ėvėzė‰ėėœė ėˇėģėĘėÎėÖėÚėâėæėîėōėíííííí/í3í<í@íLíPíYí]íqíuí†íŠí›íŸíŽí˛íģíŋíËíĪíØíÜíđíôíũíî îîîî*î.î7î;îGîKîTîXîlîpîî…î–îšîĄîĨîĩî šî Áî Åî Ėî Đî ×î Ûî ęî îî õî ųî ī  ī ī ī ī #ī 3ī 7ī Hī Lī [ī _ī fī jī qī uī Œī ī —ī ›ī ¤ī ¨ī ąī ĩī Ėī Đī ×ī Ûī ęī îī öī úī  đ đ đ đ 0đ 4đ ?đ Cđ Ođ Sđ ^đ bđ uđ yđ €đ „đ Œđ đ Ÿđ Ŗđ Ēđ Žđ ļđ ēđ Æđ Ęđ Ņđ Õđ Üđ āđ įđ ëđ ķđ ÷đ ņ  ņ ņ ņ !ņ %ņ -ņ 1ņ @ņ Dņ KņŨPņ Tņ [ņŨhņ lņ sņ wņ ~ņ ‚ņ ‘ņ •ņ ¤ņ ¨ņ ¸ņ ŧņ Ãņ Įņ Öņ Úņ éņ íņ ųņ ũņ  ō ō ō ō *ō .ō 5ō 9ō Aō Eō Tō Xō _ō cō rō vō }ō ō ō ”ō œō  ō °ō ´ō ŋō Ãō Îō Ōō æō ęō ņō õō ķ ķ ķ ķ ķ ķ .ķ 2ķ :ķ >ķ Nķ Rķ Yķ ]ķ lķ pķ xķ |ķ Œķ ķ ›ķ Ÿķ Ēķ Žķ Âķ Æķ Õķ Ųķ đķ ôķ ô ô ô ô 1ô 5ô DôHôPôTô\ô`ôhôlô|ô€ô‰ôô”ô˜ôŠô­ôļôēôÆôĘôĶô×ôëôīôõõõõ(õ,õ3õ7õ>õBõJõNõVõZõcõgõnõrõyõ}õŽõ’õ™õõ¤õ¨õ°õ´õŧõĀõÉõÍõŪõâõęõîõūõö ötöööt&ö*ö3ö7öHöLöSöWöföjöqötvözöötŽö’ö™ö_žöĸöŠö_ļöēöÂöÆöÎöŌöÚöŪöįöëöķö÷ö÷÷ ÷÷÷÷%÷)÷2÷6÷>÷B÷K÷O÷_÷c÷k÷o÷w÷{÷ƒ÷‡÷÷”÷œ÷ ÷Š÷­÷Ŋ÷Á÷Č÷Ė÷Ķ÷×÷ß÷ã÷ë÷ī÷ö÷ú÷øø øøøø$ø(ø0ø4ø;ø?øGøKøRøVøføjørøvø~ø‚øŠøŽø—ø›øŖø§ø°ø´øŧøĀøÉøÍøÕøŲøâøæøöøúøųųųųųų'ų+ų;ų?ųFųJųRųVų]ųaųpųtų…ų‰ų’ų–ųųĄų˛ųļųÅųÉųÚųŪųįųëųōųöųú úúú&ú*ú2ú6ú>úBúRúVú]úaúhúlúsúwúˆúŒú“ú—úŸúŖúĢú¯úŋúÃúĘúÎúŨúáúęúîú˙úû ûûû!û2û6û?ûCûJûNû_ûcûrûvû}ûû‘û•ûžûĸûŽû˛ûžûÂûÎûŌûÛûßûķû÷ûüüüü#ü'ü/ü3üCüGüPüTüeüiürüvü‡ü‹ü’ü–üĨüŠüēüžüĪüĶüâüæü÷üûüũũũũ$ũ(ũ7ũ;ũLũPũYũ]ũdũhũyũ}ũŒũ ũ ˜ũ œũ Ŗũ §ũ Žũ ˛ũ Áũ Åũ Ėũ Đũ ßũ ãũ ęũ îũ öũ úũ  ū ū ū #ū 2ū 6ū =ū Aū Hū Lū cū gū nū rū {ū ū ˆū Œū Ŗū §ū Žū ˛ū Áū Åū Íū Ņū áū åū đū ôū ˙  ˙ ˙ ˙ &˙ *˙ 5˙ 9˙ L˙ P˙ W˙ [˙ c˙ g˙ v˙ z˙ ˙ …˙ ˙ ‘˙ ˙ Ą˙ ¨˙ Ŧ˙ ŗ˙ ˇ˙ ž˙ Â˙ Ę˙ Î˙ Ū˙ â˙ é˙ í˙ ø˙ ü˙     "Ũ' + 2Ũ? C J N U Y h l {   “ š ž ­ ą Ā Ä Đ Ô ã į î ō        + / 6 : I M T X g k s w ‡ ‹ – š Ĩ Š Ŋ Á Č Ė Û ß æ ę ņ õ      % ) 0 4 C G O S c g r v  … ™  Ŧ ° Į Ë Ú Ū í ņ    '+37?CSW`dmqx|‘›ŸŠ­ŧĀĪĶåéúū #'26HLVZnr{ŠŽ—›¤¨ŗˇČĖĶ׿ęųũ"-1:>GK^bim|€“ĄļēÂÆÎŌâæķ÷.2:>NRY]lpƒŠŽĄĒŽŋÃĘÎŨáđôũ !04>BVZcgpt…‰Ũ•™ ŨĨаŨĩšĀŨÍŅÛßķ÷$Ũ15DHW[jn}•™ˇģĘÎėđ˙   9 = L P n r  … ™  ģ ŋ Î Ō đ ô     . 2 9 = D H O S Z ^ e i x | ƒ _ˆ Œ “ _  ¤ Ģ _¸ ŧ Å É Õ Ų å é õ ų     ' + 4 8 I M T X g k  ƒ Ą Ĩ ´ ¸ Ö Ú é í   # ' 6 : X \ k o ƒ ‡ Ĩ Š ¸ ŧ Ú Ū í ņ      ! 2 6 E I V Z d h w { ˆ Œ – š Š ­ ŧ Ā É Í Ü ā į ë ō ö  o o-18_EIRV]ajn{ŒĄĨŦ°šŊÆĘĶ×āäíņúū'+26?CTX_odhoo|€‡_”˜ĸĻŗˇÄČŌÖāäöú&*;?FoKOVocgn_{‰šžĢ¯šŊĮËÕŲãįųũ )-7;EISWaew{…‰–š§ĢĩšÃĮŅÕßãõų%)37AEOS]aswƒ‹—›Ŗ§ˇģÅÉ×Ûéí÷û )-59AEMQY]mq{‘ŸŖ­ąģŋÉÍßãęî˙ #-1?CQU_cmq{‘•ŸŖąĩÃĮŅÕßãíņ(,37@DMQZ^oszoƒŠo—›ĸ_¯ŗŊÁĪĶáå÷û #,07;LP_cmqx|Ž’œ §ĢŊÁĶ×ņõ"&59KOim|€šž­ąÃĮáåôø%)04<@HL\`gkrv}ˆŒ›ŸĻoŗˇž_ËĪÖÚáåė'øü '+:>EIRV_clpy}†Š›Ÿ¨ŦŗˇžÂÉÍÔØßãėđ÷û '+48?CLPW[dhos|€‡‹”˜ŸŖŦ°ˇģÄČĪĶäčųũ &*9=FJSW`dmqz~‡‹œ Š­ļēÃĮĐÔŨáęî˙ !(,48AENR[_hluy‚†—›ĸĻ­ąēžĮËÔØáåîōû˙%)15>BKOX\eirv‡‹”˜ŸŖĒŽĩšĀÄËĪŪâëīøü '+48AENR[_pt}ŠŽ—›Ŧ°šŊÆĘĶ×āäíņúū )-6:KOVZimvzƒ‡”ĨОļŋÃĖĐŲŨîōû˙    * . 5 9 H L U Y b f o s „ ˆ ‘ • ž ĸ Ģ ¯ Ā Ä Ë Ī Ū â ë ī ø ü  !!!!'!+!#G#K#\#`#i#m#~#‚#‰##œ# #ą#ĩ#Æ#Ę#Ų#Ũ#ä#č#ņ#õ#ū#$ $$$$#$'$.$2$;$?$P$T$]$a$h$l$s$w$~$‚$‘$•$Ļ$Ē$ŗ$ˇ$ž$Â$Ķ$×$æ$ę$ņ$õ$ũ$% %%%%$%(%9%=%D%H%O%S%Z%^%g%k%r%v%%ƒ%Š%Ž%—%›%ĸ%Ļ%ˇ%ģ%Ė%Đ%Ų%Ũ%ä%č%ų%ũ% &&&&.&2&;&?&H&L&U&Y&b&f&o&s&„&ˆ&‘&•&Ļ&Ē&ą&ĩ&Ä&Č&Ņ&Õ&æ&ę&ķ&÷&'' ''"'&'/'3'D'H'O'S'b'f'o's'|'€'‘'•'ž'ĸ'Ģ'¯'Ā'Ä'Ë'Ī'Ū'â'ë'ī'(( (("(&(-(1(@(D(U(Y(j(n(}((’(–(Ÿ(Ŗ(Ē(Ž(ŋ(Ã(Ō(Ö(į(ë(ô(ø(˙()))')+)<)@)I)M)T)X)i)m)|)€)‘)•)ž)ĸ)Š)­)ž)Â)Ņ)Õ)æ)ę)ķ)÷)ū)***&***;*?*P*T*c*g*x*|*…*‰**”*Ĩ*Š*¸*ŧ*Í*Ņ*â*æ*õ*ų* +++#+2+6+G+K+\+`+o+s+„+ˆ+™++Ŧ+°+Á+Å+Ö+Ú+é+í+ū+, ,,,,+,/,>,B,S,W,`,d,k,o,€,„,“,—, ,¤,Ģ,¯,Ā,Ä,Ķ,×,Ū,â,ë,ī,ø,ü,-----!-(-,-5-9-@-D-U-Y-b-f-o-s-„-ˆ--“-›-Ÿ-¯-ŗ-ŧ-Ā-Ņ-Õ-Ū-â-ķ-÷-ū-....".3.7.@.D.U.Y.`.d.s.w.~._ƒ.‡.Ž._›.Ÿ.¨.Ŧ.Ŋ.Á.Ō.Ö.ß.ã.ę.î.˙.///'/+/4/8/?/C/T/X/g/k/r/v/…/‰/‘/•/¤/¨/ĩ/š/Ë/Ī/Ö/Ú/é/í/ô/_0000 0$0+0/0>0B0L0P0Z0^0p0t0„0ˆ0˜0œ0Ģ0¯0ļ0ē0É0Í0×0Û0í0ņ0ø0ü0 1111.121<1@1R1V1`1d1v1z11…1”1˜1ĸ1Ļ1¸1ŧ1Æ1Ę1Ü1ā1į1ë1ú1ū12 22"2,202B2F2M2Q2`2d2n2r2„2ˆ2’2–2¨2Ŧ2ŗ2ˇ2Æ2Ę2Ô2Ø2ę2î2ø2ü23333,303:3>3P3T3^3b3t3x33ƒ3’3–3¨3Ŧ3ž3Â3Ņ3Õ3į3ë3õ3ų34444)4-4?4C4M4Q4X4\4n4r44…4—4›4Ĩ4Š4°4´4Æ4Ę4Ų4Ũ4ī4ķ4ũ455 55"51555G5K5U5Y5`5d5v5z5‰55Ÿ5Ŗ5­5ą5¸5ŧ5Î5Ō5á5å5÷5û56 666&6*696=6O6S6]6a6h6l6~6‚6‘6•6Ļ6Ē6ŧ6Ā6Ī6Ķ6å6é6ø6ü6 777#7*7.797=7N7R7Y7]7d7h7o7s7‚7†77“7œ7 7Š7­7ž7Â7Ė7Đ7Ú7Ū7č7ė7ū78 8888-818@8D8N8R8d8h8w8{8…8‰8›8Ÿ8Š8­8ŋ8Ã8Ę8Î8Ũ8á8ķ8÷899 99"9&95999C9G9Y9]9o9s9‚9†9•9™9Ģ9¯9š9Ŋ9Ä9Č9Ú9Ū9í9ņ9::::/:3:H:L:^:b:r:v:…:‰:˜:œ:Ŧ:°:Â:Æ:Đ:Ô:Û:ß:ņ:õ:;;;;";&;5;9;B;F;W;[;b;f;u;y;Œ;;™;;Ž;˛;ģ;ŋ;Đ;Ô;Û;ß;î;ō;û;˙;<<<!<2<6<=<A<P<T<]<a<r<v<<ƒ<”<˜<Ÿ<Ŗ<˛<ļ<ŋ<Ã<Ô<Ø<á<å<ö<ú<====!=%=6=:=C=G=X=\=c=g=v=z=ƒ=‡=˜=œ=Ĩ=Š=ē=ž=Å=É=Ø=Ü=í=ņ=>>>>*>.>7>;>B>F>W>[>j>n>>ƒ>Œ>>—>›>Ŧ>°>ŋ>Ã>Ô>Ø>á>å>ė>đ>????)?-?6?:?A?E?V?Z?i?m?~?‚?‹??–?š?Ģ?¯?ž?Â?Ķ?×?ā?ä?ë?ī?@@@@(@,@5@9@@@D@U@Y@h@l@}@@Š@Ž@•@™@Ē@Ž@Ŋ@Á@Đ@Ô@Û@ß@î@ō@ü@AAAA!A0A4A=AAARAVA_AcAtAxAAƒA’A–AŸAŖA´A¸AÁAÅAÖAÚAáAåAôAøABBBB#B'B8BDBDTDXDgDkD|D€DŠDŽD•D™DĢD¯DžDÂDĶD×DáDåDėDđDEEEE*E.E8EGGGKG\G`GgGkGzG~G‡G‹GœG GŠG­GžGÂGÉGÍGÜGāGéGíGūGH HH H$H+H/H>HBHKHOH`HdHmHqH‚H†HH‘H H¤H­HąHÂHÆHĪHĶHäHčHīHķHIIII$I(I1I5IFIJIQIUIdIhIoI_tIxII_„IˆII_”I˜IŸI_¤I¨I¯I_ŧIĀIÉIÍIÖIÚIãIįIđIôIJ JJ_JJ J_%J)J0J_5J9J@J_EJIJPJ_]JaJjJnJwJ{J„JˆJ‘J•JĻJĒJŗJˇJžJÂJĶJ×JæJęJņJ_öJúJK_K KK_KK!K_.K2K;K?KFKJKSKWK`KdKuKyK€K_…K‰KK_•K™K K_ĨKŠK°K_ĩKšKĀK_ÍKŅKØKÜKãKįKîKōKûK˙KL LLLL"L)L-L>LBLSLWL`LdLkLoL€L„L“L—LžL_ŖL§LŽL_ŗLˇLžL_ÃLĮLÎL_ÛLßLæLęLņLõLüLM M MMM)M-M4M_9M=MDM_IMMMTM_YM]MdM_qMuM~M‚M‹MM˜MœM­MąMÂMÆMĪMĶMÚMŪMīMķMNNNN$N(N/N3NDNHNWN[NlNpNyN}N„NˆN™NNŦN°NÁNÅNÎNŌNŲNŨNîNōNOOOO#O'O.O2OCOGOVOZOkOoOxO|OƒO‡O˜OœOĢO¯OĀOÄOÍOŅOØOÜOíOņOPP PPP#P*P.P>PBPIPMP]PaPhPlP|P€PŒPP™PP¤P¨PˇPģPĘPÎP×PÛPâPæP÷PûP QQQQ"Q&Q7Q;QJQNQUQYQiQmQuQyQˆQŒQ™QQ¯QŗQēQžQÅQÉQĐQÔQÛQßQæQęQņQõQüQRR RRR%R)R2R6R?RCRLRPRYR]RfRjRsRwRˆRŒR“R—RžRĸRŠR­R´R¸RŋRÃRĘRÎRŨRáRčRoíRņRøRoũRSSo SSSoS!S(So-S1S8SoESISRSVS_ScSlSpSyS}S†SŠS›SŸS­SąSĀSÄSËSoĐSÔSÛSoāSäSëSođSôSûSoTT ToTT%T)T2T6T?TCTLTPTaTeTsTwT†TŠT‘T_–TšTĄT_ĻTĒTąT_ļTēTÁT_ÆTĘTŅT_ŪTâTëTīTøTüTU UUU'U+U9U=ULUPUWU_\U`UgU_lUpUwU_|U€U‡U_ŒUU—U_¤U¨UąUĩUžUÂUËUĪUØUÜUíUņU˙UVVVV_*V.V?VCVQVUVdVhVoVŨ|V€V‘V•V¤V¨VąVĩVÄVČVĪV_ÜVāVņVõV WWWo#W'W8W_B_K_O_X_\_e_i_r_v__ƒ_”_˜_§_Ģ_´_¸_Á_Å_Ö_Ú_ä_č_ō_ö_` ```&`*`3`7`@`D`U`Y`b`f`o`s`„`ˆ``“`ĸ`Ļ`¯`ŗ`ŧ`Ā`Ņ`Õ`Ū`â`ë`ī`aa aaa"a+a/a8ahHhLhShWhihmh|h€h‘h•hŸhŖhĒhŽhĀhÄhĶh×hčhėhöhúhiiii*i.i6i:iIiMiUiYiiimi}ii‰iiœi iąiĩiŋiÃiĘiÎiāiäiķi÷ij jjj!j%j7j;jJjNj_jcjmjqjxj|jŽj’jĄjĨjļjējÄjČjĪjĶjåjéjøjüj kkkk&k*klOlSldlhlwl{lŠlŽl•l™l l¤lĢl¯lžlÂlÔlØlįlëlülmmo mmmom m'mo,m0m7mopBpQpUp^pbpkpop€p„pp‘pšpžp¯pŗpēpžpÍpŅpÚpŪpįpëpüpq q qqq+q/q6q:qIqMqVqZqcqgqxq|q…q‰q’q–q§qĢq˛qļqÅqÉqŌqÖqįqëqôqøq r rrr'r+rsBsIs_NsRsYs_^sbsis_nsrsys_†sŠs‘sj–sšsĄsjĻsĒsąsjļsēsÁsjÎsŌsâsæsösústt ttt#t*t.t=tAtJtNt_tctjtnt}tt’t–t§tĢtētžtÆtĘtÚtŪtætętútūtuu"u&u-u1u8u~B~Q~U~^~b~s~w~~~‚~‘~•~ž~ĸ~ŗ~ˇ~Ā~Ä~Õ~Ų~ā~ä~ķ~÷~"&7;BFUYjnƒ’–ŸŖ´¸ÁÅÖÚáåôø˙€€€€#€4€8€?€C€R€V€_€c€t€x€€…€–€š€Ą€Ĩ€´€¸€Á€ŀրڀã€į€ø€ü€#'8<EIZ^eix|…‰šž§́ŧĮˁځہīķ‚‚‚‚,‚0‚9‚=‚D‚H‚Y‚]‚l‚p‚‚…‚Ž‚’‚™‚‚Ž‚˛‚Á‚łւڂã‚į‚î‚ō‚ƒƒƒƒ+ƒ/ƒ8ƒ<ƒCƒGƒXƒ\ƒkƒoƒ€ƒ„ƒƒ‘ƒ˜ƒœƒ­ƒąƒƒăՃ؃âƒæƒíƒņƒ„„„„*„.„7„;„B„F„W„[„j„n„„ƒ„Œ„„—„›„Ŧ„°„ŋ„ÄԄ؄á„å„ė„đ„…………)…-…6…:…A…E…V…Z…i…m…~…‚…‹……–…š…Ģ…¯…ž……Ķ…ׅā…ä…ë…ī…††† † † #† *† .† 5† 9† H† L† S† W† f† j† q† u† }† † ‘† •† φ dž š† Ŋ† Ć Ȇ Ά ͆ ę† î† õ† ų† ‡ ‡ ‡ ‡ *‡ .‡ 5‡ 9‡ H‡ L‡ T‡ X‡ h‡ l‡ w‡ {‡ އ ’‡ ‡ Ą‡ ­‡ ą‡ ŧ‡ ‡ ͇ ׇ Ū‡ â‡ ę‡ î‡ ũ‡ ˆ ˆ  ˆ ˆ ˆ $ˆ (ˆ /ˆ 3ˆ :ˆ >ˆ Eˆ Iˆ Qˆ Uˆ eˆ iˆ pˆ tˆ ˆ ƒˆ ‹ˆ ˆ žˆ ĸˆ ЈŨވ ˛ˆ šˆŨƈ ʈ ҈ Ո ܈ āˆ īˆ ķˆ ‰ ‰ ‰ ‰ !‰ %‰ 4‰ 8‰ G‰ K‰ W‰ [‰ j‰ n‰ u‰ y‰ ˆ‰ Œ‰ “‰ —‰ Ÿ‰ Ŗ‰ ˛‰ ļ‰ Ŋ‰ Á‰ Љ ԉ ۉ ߉ î‰ ō‰ ú‰ ū‰ Š Š Š !Š ,Š 0Š DŠ HŠ OŠ SŠ bŠ fŠ mŠ qŠ xŠ |Š ŒŠ Š ˜Š œŠ ŦŠ °Š ˇŠ ģŠ Ɗ Ί ֊ ڊ ęŠ îŠ ųŠ ũŠ ‹  ‹  ‹ $‹ 3‹ 7‹ N‹ R‹ a‹ e‹ t‹ x‹ ‹ “‹ ĸ‹"Ļ‹"Ž‹"˛‹"‹"Ƌ"͋"Ņ‹"ڋ"Ū‹"į‹"ë‹"ú‹"ū‹" Œ"Œ"Œ"!Œ"*Œ".Œ"=Œ"AŒ"QŒ"UŒ"fŒ"jŒ"qŒ_~Œ"‚Œ"ŽŒ"’Œ"ĄŒ"ĨŒ"ތ"˛Œ"Ì"ĮŒ"׌$ی$ãŒ$įŒ$îŒ$ōŒ$ųŒ$ũŒ$ $$$$*$.$5$9$A$E$U$Y$j$n$}$$ˆ$Œ$“$—$Ž$˛$š$Ŋ$ƍ$ʍ$Ķ$׍$î$ō$ų$ũ$ Ž$Ž$Ž$Ž$,Ž$0Ž$;Ž$?Ž$RŽ$VŽ$aŽ$eŽ$qŽ$uŽ$€Ž$„Ž$—Ž$›Ž$ĸŽ$ĻŽ$ŽŽ$˛Ž$ÁŽ$Ŏ$ĖŽ$Ў$؎$܎$čŽ$ėŽ$ķŽ$÷Ž$ūŽ$$ $ $$$)$-$4$8$C$G$O$S$b$f$mŨr$v$}ŨŠ$Ž$•$™$ $¤$ŗ$ˇ$Ə$ʏ$ڏ$Ū$å$é$ø$ü$ $$$$.$2$9$=$L$P$W$[$c$g$v$z$$…$”$˜$Ÿ$Ŗ$˛$ļ$ž$$Ԑ$֐$á$å$đ$ô$‘$ ‘$‘$‘$&‘$*‘$1‘$5‘$<‘$@‘$P‘$T‘$\‘$`‘$p‘$t‘${‘$‘$Ž‘$’‘$š‘$ž‘$Ž‘$˛‘$Ŋ‘$Á‘$Ė‘$Б$ä‘$č‘$÷‘$û‘$’$’$%’$)’$8’$<’$S’$W’$f’&j’&r’&v’&}’&’&ˆ’&Œ’&›’&Ÿ’&Ē’&Ž’&Á’&Œ&Ė’&В&ؒ&ܒ&ë’&ī’&ū’(“( “(“(“(“(!“(%“(4“(8“(?“(C“(R“(V“(]“(a“(p“(t“({“(“(‡“(‹“(š“(ž“(§“(Ģ“(ˇ“(ģ“(Ė“(Г(ߓ(ã“(ō“(ö“(ũ“(”(”(”(%”*)”*3”*7”*H”*L”*S”*W”*_”*c”*s”*w”*~”*‚”*Š”*Ž”*ž”*ĸ”*Ē”*Ž”*ž”*”*ɔ*͔*Ԕ*ؔ*č”*ė”*ķ”*÷”*˙”*•* •*•*•*!•*1•*5•*E•*I•*R•*V•*b•*f•*w•*{•*‚•*†•*–•*š•*Ą•*Ĩ•*Ŧ•*°•*ŋ•*Õ*ʕ*Ε*Ũ•*á•*đ•*ô•*–*–*–*–*)–*-–*<–*@–*O–*S–*b–*f–*u–*y–*‰–*–*•–*™–*¨–*Ŧ–*´–*¸–*Į–,˖,ז,ۖ,é–,í–,û–,˙–, —,—,—,"—,8—,<—,D—,H—,X—,\—,d—,h—,x—,|—,ƒ—,‡—,Ž—,’—,ĸ—,Ļ—,­—,ą—,š—,Ŋ—,ė,ȗ,ח,ۗ,ã—,į—,ī—,ķ—,ú—,ū—,˜, ˜,˜,˜,˜,!˜,1˜,5˜,>˜,B˜,K˜,O˜,a˜,e˜,l˜,p˜,x˜,|˜,ˆ˜,Œ˜,˜˜,œ˜,¤˜,¨˜,´˜,¸˜,Ę,Ș,ܘ,ā˜,đ˜,ô˜,™, ™,™,™,-™,1™,8™,<™,K™,O™,V™,Z™,i™,m™,t™,x™,™,ƒ™,Š™,Ž™,ž™,ĸ™,Ē™,Ž™,ļ™,ē™,ʙ,Ι,Ū™,â™,ō™,ö™,š, š,š,š,$š,(š,0š,4š,;š,?š,Nš,Rš,Yš,]š,lš,pš,xš,|š,„š,ˆš,˜š,œš,¤š,¨š,°š,´š,Ě,Ț,ΚŨܚ,āš,čš,ėš,ûš,˙š,›, ›,›,›,'›,+›,3›,7›,>›,B›,R›,V›,^›,b›,r›,v›,~›,‚›,’›,–›,›,Ą›,¨›,Ŧ›,ŗ›,ˇ›,ž›,›,ʛ,Λ,Ũ›,á›,ņ›,õ›,œ,œ,œ,œ,-œ,1œ,8œ,<œ,Lœ,Pœ,Wœ,[œ,jœ,nœ,uœ,yœ,ˆœ,Œœ,˜œ,œœ,°œ,´œ,Ü,Įœ,֜,ڜ,âœ,æœ,îœ,ōœ,úœ,ūœ,,,,,.,2,:,>,N,R,Z,^,f,j,r,v,†,Š,‘,•,¤,¨,°,´,Ý.Į.Ν.Ō.Ū.â.é.í.ž.ž. žEž.ž.žE)ž.-ž.4žo9ž.=ž.DžoQž0Už0_ž0cž0jž0nž0už0yž0‚ž0†ž0ž0“ž0œž0 ž0§ž0Ģž0ŧž0Āž0ʞ0Ξ0՞0Ųž0âž0æž0īž0ķž0Ÿ0Ÿ0Ÿ0Ÿ0Ÿ0 Ÿ0)Ÿ0-Ÿ06Ÿ0:Ÿ0AŸ0EŸ0VŸ0ZŸ0dŸ0hŸ0oŸ0sŸ0|Ÿ0€Ÿ0‰Ÿ0Ÿ0–Ÿ0šŸ0ŖŸ0§Ÿ0¸Ÿ0ŧŸ0Ο0ԟ0ڟ0۟0æŸ0ęŸ0ōŸ0öŸ0 0  0 0 0 0# 0, 00 09 0= 0F 0J 0S 0W 0` 0d 0u 0y 0ƒ 0‡ 0 0” 0Ą 0Ĩ 0˛ 0ļ 0à0Į 0Ô 0Ø 0å 0é 0ū 0Ą0Ą0Ą0 Ą0$Ą0,Ą00Ą08Ą0<Ą0DĄ0HĄ0XĄ0\Ą0eĄ0iĄ0rĄ0vĄ0Ą0ƒĄ0ŒĄ0Ą0ĄĄ0ĨĄ0­Ą0ąĄ0šĄ0ŊĄ0ÍĄ0ŅĄ0áĄ0åĄ0îĄ0ōĄ0ûĄ0˙Ą0ĸ0ĸ0ĸ0!ĸ0*ĸ0.ĸ0?ĸ0Cĸ0Lĸ0Pĸ0Yĸ0]ĸ0nĸ0rĸ0|ĸ0€ĸ0Šĸ0Žĸ0 ĸ0¤ĸ0Žĸ0˛ĸ0ŧĸ0Āĸ0Ōĸ0Öĸ0Ũĸ0áĸ0đĸ0ôĸ0ūĸ0Ŗ0Ŗ0Ŗ0"Ŗ0&Ŗ08Ŗ0<Ŗ0FŖ0JŖ0\Ŗ0`Ŗ0jŖ0nŖ0€Ŗ0„Ŗ0ŽŖ0’Ŗ0¤Ŗ¨ŖąŖĩŖžŖÂŖËŖĪŖāŖäŖíŖņŖøŖüŖ¤ ¤¤¤'¤+¤4¤8¤A¤E¤V¤Z¤c¤g¤n¤r¤{¤¤ˆ¤Œ¤¤Ą¤¨¤Ŧ¤ĩ¤š¤¤ƤÕ¤Ų¤â¤æ¤ī¤ķ¤ĨĨĨĨ"Ĩ&Ĩ/Ĩ3Ĩ<Ĩ@ĨQĨUĨ^ĨbĨkĨoĨ€Ĩ„Ĩ‹ĨĨžĨĸĨŗĨˇĨĀĨÄĨËĨĪĨāĨäĨķĨ÷ĨĻĻ ĻĻ Ļ$Ļ3Ļ7ĻAĻEĻWĻ[ĻeĻiĻpĻtĻ†ĻŠĻ”Ļ˜ĻŸĻŖĻĩĻšĻĀĻ_ÅĻÉĻĐĻ_ŨĻáĻčĻėĻõĻųϧ§ §§§§%§)§0§4§=§A§H§L§]§a§h§_m§q§x§_…§‰§§”§§Ą§¨§Ŧ§Ŋ§Á§ͧҧā§ä§ë§ī§ø§ü§ ¨¨"¨&¨-¨_2¨6¨=¨_J¨N¨U¨Y¨b¨f¨w¨{¨‚¨_‡¨‹¨’¨_Ÿ¨Ŗ¨Ǎލˇ¨ģ¨¨ƨרÛ¨į¨ë¨ú¨ū¨Š ŠŠŠ'Š+Š<Š@ŠGŠ_LŠPŠWŠ_dŠhŠoŠsŠ|Š€Š‘Š•ŠœŠ_ĄŠĨŠŦŠ_šŠŊŠÄŠČŠŅŠÕŠäŠčŠôŠøŠĒ ĒĒĒ'Ē+Ē2Ē_?ĒCĒJĒNĒWĒ[ĒdĒhĒyĒ}Ē„Ē_‘ǕǤǍǴǏĒĮĒËĒÚĒŪĒīĒķĒĢĢĢĢ+Ģ/Ģ6Ģ:ĢAĢEĢVĢZĢaĢeĢtĢxĢĢƒĢ’Ģ–Ģ§ĢĢĢŧĢĀĢĮĢËĢÚĢŪĢīĢķĢŦŦŦŦ,Ŧ0Ŧ9Ŧ=ŦDŦHŦYŦ]ŦnŦrŦ{ŦŦ†ŦŠŦ›ŦŸŦŽŦ˛ŦÃŦĮŦĐŦÔŦÛŦßŦđŦôŦ­­­­'­+­5­9­@­D­V­Z­d­h­o­s­…­‰­­_•­™­ ­_Ĩ­Š­°­_Ŋ­Á­Č­Ė­Ķ­×­ā­ä­ë­ī­ø­ü­ŽŽŽŽŽŽ(Ž,Ž3Ž7ŽHŽLŽSŽ_XŽ\ŽcŽ_hŽlŽsŽ_€Ž„Ž‹ŽŽ˜ŽœŽĨŽŠŽ˛ŽļŽÅŽÉŽÕŽŲŽčŽėŽķŽ÷ޝ¯ ¯¯"¯&¯7¯;¯B¯_G¯K¯R¯_W¯[¯b¯_o¯s¯z¯~¯‡¯‹¯œ¯ ¯§¯_Ŧ¯°¯ˇ¯_ŧ¯Į¯_Ô¯د߯ã¯ė¯đ¯ų¯ũ¯° °°°)°-°<°@°G°K°T°X°a°e°v°z°‹°°–°_›°Ÿ°ϰ_̰¯°ļ°_ðĮ°ΰŌ°Û°ß°đ°ô°û°_ąą ą_ąąą_(ą,ą3ą7ą@ąDąMąQą`ądąpątąƒą‡ąŽą’ą›ąŸą°ą´ąÅąÉąĐą_ÕąŲąāą_íąņąøąüą˛ ˛˛˛'˛+˛2˛_7˛;˛B˛_O˛S˛Z˛^˛m˛q˛}˛˛˛”˛Ŗ˛§˛¸˛ŧ˛˲Ξā˛ä˛ô˛ø˛˙˛ŗ ŗŗŗ#ŗ*ŗ.ŗ=ŗAŗHŗLŗ[ŗ_ŗhŗlŗ}ŗŗŠŗŽŗŸŗŖŗĒŗŽŗŊŗÁŗŌŗÖŗįŗëŗúŗūŗ´´´ ´'´+´<´@´O´S´d´h´q´u´|´€´‘´•´Ļ´Ē´ŗ´ˇ´ž´´Ķ´×´æ´ę´ô´ø´ ĩĩĩĩ#ĩ'ĩ9ĩ=ĩGĩKĩRĩVĩhĩlĩsĩ_xĩ|ĩƒĩ_ˆĩŒĩ“ĩ_ ĩ¤ĩĢĩ¯ĩļĩēĩÃĩĮĩÎĩŌĩÛĩßĩæĩęĩķĩ÷ĩūĩļ ļļļļ+ļ/ļ6ļ_;ļ?ļFļ_KļOļVļ_cļgļnļrļ{ļļˆļŒļ•ļ™ļ¨ļŦļ¸ļŧļËļĪļÖļÚļãļįļđļôļˇ ˇˇˇ%ˇ_*ˇ.ˇ5ˇ_:ˇ>ˇEˇ_RˇVˇ]ˇaˇjˇnˇˇƒˇЎ_ˇ“ˇšˇ_ŸˇŖˇǎ_ˇˇģˇ¡ÆˇΎ͎ܡāˇéˇíˇüˇ¸ ¸¸¸#¸*¸.¸7¸;¸D¸H¸Y¸]¸n¸r¸y¸_~¸‚¸‰¸_ޏ’¸™¸_ϏǏą¸ĩ¸ž¸¸͏׸Ū¸_ã¸į¸î¸_ķ¸÷¸ū¸_ šššš#š'š0š4šCšGšSšWšfšjšqšuš~š‚š“š—š¨šŦšŗš_¸šŧšÚ_ĐšÔšÛšßščšėšõšųš ēēē_ēē%ē_2ē6ē=ēAēPēTē`ēdēsēwē†ēŠē›ēŸēŽē˛ēÃēĮē×ēÛēâēæēíēņēģģ ģģ ģ$ģ+ģ/ģ>ģBģKģOģ`ģdģmģqģ‚ģ†ģģ‘ģ ģ¤ģĩģšģĘģÎģŨģáģōģöģ˙ģŧ ŧŧŧ#ŧ2ŧ6ŧGŧKŧTŧXŧ_ŧcŧtŧxŧ‰ŧŧ–ŧšŧĄŧĨŧļŧēŧÉŧÍŧ×ŧÛŧíŧņŧûŧ˙ŧŊ ŊŊ Ŋ*Ŋ.Ŋ5Ŋ9ŊKŊOŊVŊ_[Ŋ_ŊfŊ_kŊoŊvŊ_ƒŊ‡ŊŽŊ’Ŋ™ŊŊĻŊĒŊąŊĩŊžŊÂŊÉŊÍŊÖŊÚŊáŊåŊîŊōŊųŊũŊžžž_ž"ž)ž_.ž2ž9ž_FžJžQžUž^žbžkžožxž|ž‹žž›žŸžŽž˛žšžŊžÆžĘžĶžמčžėžũžŋŋ_ ŋŋŋ_ŋ!ŋ(ŋ_5ŋ9ŋ@ŋDŋMŋQŋbŋfŋmŋ_rŋvŋ}ŋ_‚ŋ†ŋŋ_šŋžŋĨŋŠŋ˛ŋļŋŋŋÃŋĖŋĐŋßŋãŋīŋķŋĀĀ ĀĀĀĀ'Ā+Ā<Ā@ĀQĀUĀ\Ā_aĀeĀlĀ_qĀuĀ|Ā_‰ĀĀ”Ā˜ĀĄĀĨĀļĀēĀÁĀ_ÆĀĘĀŅĀ_ÖĀÚĀáĀ_îĀōĀųĀũĀÁ ÁÁÁ&Á*Á6Á:ÁIÁMÁTÁXÁaÁeÁvÁzÁ‹ÁÁ–Á_›ÁŸÁĻÁ_ŗÁˇÁžÁÂÁËÁĪÁØÁÜÁíÁņÁøÁ_ũÁÂÂ_ Â$Â3Â7ÂCÂGÂVÂZÂiÂmÂ~‚‘•ÂĻÂĒÂēžÂÅÂÉÂĐÂÔÂåÂéÂđÂôÂÃÃÃÃ!Ã%Ã.Ã2ÃCÃGÃPÃTÃeÃiÃpÃtÃƒÃ‡Ã˜ÃœÃ­ÃąÃĀÃÄÃÕÃŲÃâÃæÃíÃņÃÄÄÄÄ*Ä.Ä7Ä;ÄBÄFÄWÄ[ÄlÄpÄyÄ}ĄĈęĝÄŦİÄēÄžÄĐÄÔÄŪÄâÄéÄíÄ˙ÄÅ ÅÅÅÅ.Å2Å9Å_>ÅBÅIÅ_NÅRÅYÅ_fÅjÅqÅuÅ|Å€Å‰ÅÅ”Å˜ÅĄÅĨÅŦŰŚÅŊÅÄÅČÅŅÅÕÅÜÅāÅņÅõÅüÅ_ÆÆ Æ_ÆÆÆ_)Æ-Æ4Æ8ÆAÆEÆNÆRÆ[Æ_ÆnÆrÆ~ƂƑƕƜƠƊƭÆļÆēÆËÆĪÆāÆäÆëÆ_đÆôÆûÆ_ĮĮ Į_ĮĮ#Į'Į0Į4ĮEĮIĮPĮ_UĮYĮ`Į_eĮiĮpĮ_}ĮĮˆĮŒĮ•Į™ĮĸĮĻĮ¯ĮŗĮÂĮÆĮŌĮÖĮåĮéĮđĮôĮũĮČ ČČČ#Č4Č8Č?Č_DČHČOČ_TČXČ_Č_lČpČwČ{Č„ČˆČ™ČČ¤Č_ŠČ­Č´Č_šČŊČÄČ_ŅČÕČÜČāČéČíČöČúČ É ÉÉÉ,É0É7É;ÉDÉHÉYÉ]ÉnÉrÉyÉ_~ɂɉÉ_–ɚɥÉĨɎɲÉģÉŋÉĐÉÔÉÛÉ_āÉäÉëÉ_øÉüÉĘĘĘĘ&Ę*Ę9Ę=ĘLĘPĘaĘeĘtĘxĘ‰ĘĘĘĄĘ¨ĘŦƺƎĘČĘĖĘĶĘ×ĘæĘęĘņĘõĘËËËË&Ë*Ë3Ë7ËHËLËSËWËfËjË{ËËË”ËŖË§Ë¸ËŧËÅËÉËĐËÔËåËéËøËüË ĖĖĖĖ%Ė)Ė:Ė>ĖOĖSĖ\Ė`ĖgĖkĖ|Ė€ĖĖ2“Ė2šĖ2žĖ2­Ė2ąĖ2¸Ė2ŧĖ2ĶĖ2×Ė2âĖ2æĖ2ņĖ2õĖ2Í2Í2 Í2Í2Í2 Í2+Í2/Í2=Í2AÍ2LÍ2PÍ2[Í2_Í2mÍ2qÍ2„Í2ˆÍ2Í2“Í2šÍ2žÍ2ĻÍ2ĒÍ2ąÍ2ĩÍ2ŊÍ2ÁÍ2ĐÍ2ÔÍ2ŨÍ2áÍ2ęÍ2îÍ2÷Í2ûÍ2Î2Î2Î2Î2Î2 Î2,Î20Î29Î2=Î2FÎ2JÎ2VÎ2ZÎ2kÎ2oÎ2wÎ2{Î2ƒÎ2‡Î2—Î2›Î2ĻÎ2ĒÎ2ĩÎ2šÎ2ÄÎ2ČÎ2ŅÎ2ÕÎ2ßÎ2ãÎ2îÎ2ōÎ2ũÎ2Ī2Ī2Ī2&Ī2*Ī21Ī25Ī2<Ī2@Ī2HĪ2LĪ2SĪ2WĪ2_Ī2cĪ2rĪ2vĪ2Ī2ƒĪ2ŒĪ2Ī2™Ī2Ī2¤Ī2¨Ī2°Ī2´Ī2ŊĪ2ÁĪ2ĘĪ2ÎĪ2ÚĪ2ŪĪ2īĪ2ķĪ2ûĪ2˙Ī2Đ2 Đ2Đ2Đ2*Đ2.Đ29Đ2=Đ2HĐ2LĐ2UĐ2YĐ2cĐ2gĐ2zĐ2~Đ2…Đ2‰Đ2Đ2”Đ2œĐ2 Đ2¯Đ2ŗĐ2ŧĐ2ĀĐ2ÉĐ2ÍĐ2ÖĐ2ÚĐ2áĐ2åĐ2íĐ2ņĐ2Ņ2Ņ2Ņ2Ņ2Ņ2Ņ2.Ņ22Ņ2;Ņ2?Ņ2JŅ2NŅ2WŅ2[Ņ2dŅ2hŅ2sŅ2wŅ2€Ņ2„Ņ2Ņ2“Ņ2ĄŅ2ĨŅ2ŽŅ2˛Ņ2ŊŅ2ÁŅ2ĪŅ2ĶŅ2æŅ2ęŅ2ņŅ2õŅ2üŅ2Ō2Ō2 Ō2Ō2Ō2Ō2#Ō22Ō26Ō2=Ō2AŌ2JŌ2NŌ2UŌ2YŌ2`Ō2dŌ2mŌ2qŌ2xŌ2|Ō2…Ō2‰Ō2•Ō2™Ō2 Ō2¤Ō2­Ō2ąŌ2ŊŌ2ÁŌ2ŌŌ2ÖŌ2ŪŌ2âŌ2ęŌ2îŌ2ūŌ2Ķ2 ĶŨĶ2Ķ2ĶŨ&Ķ2*Ķ21ĶŨ6Ķ2:Ķ2AĶŨNĶ2RĶ2YĶŨ^Ķ2bĶ2iĶŨvĶ2zĶ2‹Ķ2Ķ2žĶ2ĸĶ2ąĶ2ĩĶ2ŊĶ2ÁĶ2ÉĶ2ÍĶ2ŨĶ2áĶ2čĶŨõĶ2ųĶ2 Ô2Ô2Ô2!Ô20Ô24Ô2<Ô2@Ô2HÔ2LÔ2\Ô2`Ô2gÔŨtÔ2xÔ2‰Ô2Ô2œÔ2 Ô2¯Ô2ŗÔ2ģÔ2ŋÔ2ĮÔ2ËÔ2ÛÔ4ßÔ4æÔ4ęÔ4ųÔ4ũÔ4Õ4 Õ4Õ4Õ4&Õ4*Õ43Õ47Õ4BÕ4FÕ4YÕ4]Õ4dÕŨiÕ4mÕ4tÕŨÕ4…Õ4Õ4‘Õ4ĄÕ4ĨÕ4ŽÕ4˛Õ4ģÕ4ŋÕ4ČÕ4ĖÕ4ĶÕ4×Õ4āÕ4äÕ4õÕ4ųÕ4Ö4 Ö4Ö4Ö4.Ö42Ö4=Ö4AÖ4LÖ4PÖ4[Ö4_Ö4rÖ4vÖ4}ÖŨ‚Ö4†Ö4ÖŨšÖ4žÖ4ĻÖ4ĒÖ4ēÖ4žÖ4ĮÖ4ËÖ4ÔÖ4ØÖ4áÖ4åÖ4öÖ4úÖ4 ×4 ×4×4 ×4/×43×4>×4B×4M×4Q×4\×4`×4s×4w×4~×Ũƒ×4‡×4Ž×Ũ›×4Ÿ×4§×4Ģ×4ģ×4ŋ×4Č×4Ė×4Õ×4Ų×4â×4æ×4÷×4û×4 Ø4Ø4Ø4!Ø40Ø44Ø4=Ø4AØ4LØ4PØ4YØ4]Ø4fØ4jØ4uØ4yØ4‚Ø4†Ø4™Ø4Ø4¤ØŨŠØ4­Ø4´ØŨÁØ4ÅØ4ÍØ4ŅØ4áØ4åØ4ėØ4đØ4ųØ4ũØ4Ų4Ų4Ų4Ų4Ų4 Ų4'Ų4+Ų4<Ų4@Ų4OŲ4SŲ4bŲ4fŲ4uŲ4yŲ4€ŲŨ…Ų4‰Ų4ŲŨŲ4ĄŲ4¨ŲŨ­Ų4ąŲ4¸ŲŨÅŲ4ÉŲ4ĐŲŨÕŲ4ŲŲ4āŲŨíŲ4ņŲ4úŲ4ūŲ4Ú4Ú4ÚŨÚ4#Ú4*ÚŨ7Ú4;Ú4CÚ4GÚ4WÚ4[Ú4bÚ4fÚ4uÚ4yÚ4ˆÚ4ŒÚ4“Ú4—Ú4§Ú4ĢÚ4ēÚ4žÚ4ÅÚŨŌÚ4ÖÚ4įÚ4ëÚ4ōÚŨ˙Ú4Û4Û4Û4&Û4*Û49Û4=Û4LÛ4PÛ4_Û4cÛ4lÛ4pÛ4{Û4Û4Û4”Û4›ÛŨ¨Û4ŦÛ4ŧÛ4ĀÛ4ĮÛ4ËÛ4ÔÛ4ØÛ4įÛ4ëÛ4ûÛ4˙Û4Ü4Ü4Ü4Ü4%Ü4)Ü48Ü4<Ü4KÜ4OÜ4VÜŨcÜ6gÜ6nÜ6rÜ6‰Ü6Ü6”Ü6˜Ü6ŸÜ6ŖÜ6ĢÜ6¯Ü6žÜ6ÂÜ6ŅÜ6ÕÜ6ÜÜ6āÜ6įÜ6ëÜ6ķÜ6÷Ü6Ũ6 Ũ6Ũ6Ũ6Ũ6 Ũ6(Ũ6,Ũ6;Ũ6?Ũ6NŨ6RŨ6YŨ6]Ũ6dŨ6hŨ6pŨ6tŨ6ƒŨ6‡Ũ6ŽŨ6’Ũ6ĄŨ6ĨŨ6´Ũ6¸Ũ6ŋŨ6ÃŨ6ŌŨ6ÖŨ6ŨŨ6áŨ6đŨ6ôŨ6Ū6Ū6Ū6Ū6!Ū6%Ū64Ū68Ū6GŪ6KŪ6ZŪ6^Ū6eŪŨrŪ6vŪ6…Ū6‰Ū6˜Ū6œŪ6ĢŪ6¯Ū6ļŪŨÃŪ6ĮŪ6ÖŪ6ÚŪ6éŪ6íŪ6üŪ6ß6ßŨ ß6ß6ßŨ$ß6(ß6/ßŨ4ß68ß6?ßŨLß6Pß6WßŨ\ß6`ß6gßŨtßxßß…ßŽß’ßŖß§ßŽß˛ßēßžßÆßĘßĶß×ßāßäßíßņßúßūßāāā ā'ā+ā3ā7ā@āDāMāQāZā^āgākātāxāāƒā”ā˜āĸāĻā˛āļāÂāÆāŌāÖāâāæāōāöā áááá(á,á8á<áFáJáVáZácágásáwáá…á‘á•ážáĸáļáēáÆáĘáÖáÚáæáęáöáúáâ ââ"â.â2â>âBâNâRâ\â`âlâpâwâ{â‡â‹â—â›âĸâĻâēâžâÅâÉâŅâÕâŪâââëâīâøâüâã ããã'ã+ã8ã<ãGãKãVãZãeãiãtãxãƒã‡ãšãžã§ãĢã´ã¸ãÁãÅãÎãŌãÛãßãđãôãũãää äää ä$ä-ä1ä:ä>äGäKäTäXäaäeäläpää…äŒää™ääĻäĒäŗäˇäĀäÄäÍäŅäÚäŪäīäķäüäåå åååå#å,å0å9å=åFåJåSåWå^åbåkåoåxå|åƒå‡å˜åœåŖå§å°å´åŊåÁåĘåÎå×åÛåäåčåņåõåüåææææ æ)æ-æ6æ:æCæGæPæTæ]æaæjænæwæ{æ„æˆæ‘æ•æĻæĒæŗæˇæĀæÄæÍæŅæÚæŪæįæëæüæį į įįį#į'į0į4į=įAįJįNįWį[įdįhįqįuį~į‚į‹įį į¤įĢį¯įˇįģįÄįČįĐįÔįÛįßįįįëįôįøįččččč#č2č6č?čCčJčNč_čcčrčvččƒčŒčč™ččĻčĒčŗčˇčĀčÄčÕčŲčâčæčīčķčüčé é ééé#é'é8é<éEéIéRéVé_écélépéyé}é†éŠé›éŸé¨éŦéĩéšéÂéÆéĪéĶéÜéāéééíéöéúéęęęę%ę)ę2ę6ę?ęCęLęPęYę]ęfęjęsęwę€ę„ę•ę™ęĸęĻę¯ęŗęŧęĀęÉęÍęÖęÚęãęįęøęüęëëëë#ë'ë0ë4ë=ëAëJëNëWë[ëdëhëqëuë†ëŠë“ë—ë ë¤ë­ëąëēëžëĮëËëÜëāëéëíëöëúëėėėėė!ė*ė.ė7ė;ėLėPėWė[ėgėkėzė~ė‡ė‹ėœė ėŠė­ėļėēėÃėĮėØėÜėåėéėúėūėí ííí-í1í:í>íEíIíZí^ímíqí‚í†í—í›íĒíŽíˇíģíĖíĐíŲíŨíîíōíųíũí îîîî.î2î;î?îPîTî[î_înîrî{îîˆîŒî•î™îĒîŽîˇîģîÄîČîŅîÕîæîęîņîõîīīīīī"ī/ī3īDīHīQīUīfījīsīwī€ī„īŸīŖīĒīŽīēīžīÍīŅīāīäīķī÷īđđ!đ%đ6đ:đIđMđVđZđkđođ{đđ‰đđĄđĨđšđŊđÎđŌđáđåđīđķđņ ņņņņ#ņ4ņ8ņBņFņXņ\ņnņrņƒņ‡ņŽņ’ņŖņ§ņ¸ņŧņÅņÉņĐņÔņåņéņøņüņ ōōōō%ō)ō:ō>ōMōQōbōfōwō{ōŠōŽō•ō™ō ō¤ōĢō¯ōžōÂōÉōÍōÖōÚōãōįōîōōōķķķķķķ(ķ,ķ=ķAķHķLķ[ķ_ķhķlķuķyķ‚ķ†ķķ“ķ¤ķ¨ķąķĩķžķÂķËķĪķØķÜķíķņķøķüķ ôôôô!ô%ô,ô0ô7ô;ôJôNôVôZôbôfônôrô‚ô†ôŽô’ôšôžôĻôĒôēôžôÅôÉôŅôÕôŨôáôéôíôõôųô õ õõõ&õ*õ6õ:õFõJõVõZõnõrõ{õõ‹õõ›õŸõĢõ¯õÃõĮõÎõŌõŲõŨõėõđõųõũõö ööö.ö2ö;ö?öHöLö]öaömöqöxö|öˆöŒö˜öœö°ö´öŊöÁöŌöÖößöãöôöøö˙ö÷÷÷"÷&÷:÷>÷O÷S÷d÷h÷w÷{÷Œ÷÷™÷÷¤÷¨÷š÷Ŋ÷Ė÷Đ÷á÷å÷î÷ō÷ų÷ũ÷øø!ø9%ø9-ø91ø9Aø9Eø9Lø9Pø9Xø9\ø9lø9pø9wø9{ø9ƒø9‡ø9Žø9’ø9Ąø9Ĩø9Ŧø9°ø9ˇø9ģø9Čø9Ėø9Úø9Ūø9åø9éø9øø9üø9ų9ų9ų9ų9ų9ų9$ų9(ų97ų9;ų9Cų9Gų9Wų9[ų9bų9fų9nų9rų9yų9}ų9Œų9ų9—ų9›ų9Ŗų9§ų9°ų9´ų9ģų9ŋų9Đų9Ôų9Ûų9ßų9ėų9đų9ūų9ú9 ú9 ú9ú9 ú9/ú93ú9Bú9Fú9Mú9Qú9aú9eú9tú9xú9ú9ƒú9ú9”ú9ĸú9Ļú9ĩú9šú9Āú9Äú9Ķú×úßúãúėúđúųúũúû ûûûû#û+û/û7û;ûKûOûVûZûcûgûnûrûyû}ûŽû’ûšûžûĻûĒû˛ûļûžûÂûŌûÖûŨûáûęûîû÷ûûûüüüüü ü'ü+ü4ü8ü?üCüLüPüWü[üdühüoüsü„üˆü™üüĻüĒüąüĩüÆüĘüŲüŨüåüéüņüõüũüũ ũ ũũ!ũ(ũ,ũ3ũ7ũFũJũQũUũ^ũbũkũoũvũzũƒũ‡ũũ”ũ›ũŸũ¨ũŦũŗũˇũĀũÄũËũĪũØũÜũãũįũøũüũūūūū"ū&ū/ū3ū<ū@ūHūLūUūYūbūfūnūrūzū~ūŽū’ū›ūŸūĻūĒūģūŋūÎūŌūŲūŨūæūęūķū÷ūūū˙ ˙˙˙˙#˙'˙.˙2˙;˙?˙F˙J˙[˙_˙h˙l˙u˙y˙‚˙†˙˙“˙œ˙ ˙Š˙­˙ž˙Â˙É˙Í˙Ü˙ā˙į˙lė˙đ˙÷˙lü˙l l$(15>BKO`dmqx|…‰’–ŸŖŦ°šŊÆĘĶ×āäíņúū  )-6:CGPT]ajnw{„ˆ™ĻĒŗˇĀÄÍŅÚŪįëôø  !%.2;?HLUYjnuy…‘™ĨŠšŊÆĘŲŨæęķ÷ "&/3<@IMVZkovzƒ‡”ĄĒŽŋÃĖĐŲŨîōû˙ !(,;?HLUYjnw{‚†“œ ąĩžÂËĪāäíņúū-1:>OS\`qu~‚“—žĸąĩžÂĶ×āäõų $59BFW[bfuy€–‘ĸĻ­ąšŊÎŌÛßæęû˙_ $+/@DUYjn}’–ŸŖĒŽŋÃŌÖįëôø˙'+<@IMTXim|€‘•ĻĒšŊÄČŲŨæęķ÷    " & . 2 : > F J R V ^ b j n ~ ‚ Š Ž — › ¤ ¨ ą ĩ ŧ Ā É Í Ũ á é í ö ú       ( , 5 9 I M W [ g k u y … ‰ • ™ Ĩ Š Ŋ Á Č Ė Ķ × ß ã ë ī ÷ û     % ) 2 6 G K S W ^ b q u ~ ‚ Ž ’ › Ÿ Ģ ¯ à Į Î Ō Ų Ũ ä č ÷ û     " & - 1 A E M Q a e m q  … Œ  › Ÿ ¯ ŗ ģ ŋ Æ Ę Ú Ū į ë ü     " ) - < @ Q U f j y } … ‰ ™  ¤ ¨ ° ´ ŧ Ā Č Ė Ü ā é í ö ú  %):>EIX\mq‚†•™ ¤Ŧ°¸ŧÃĮĪĶÛßîōû˙  $59HLSW_cko~‚‰”˜§Ģ˛ļžÂŌÖŨáđôü'+26?CJN_cjnƒ‹žĸ̝ļēËĪØÜãįøü%)9=EIQUeipt{Ž’›ŸŽ˛ÁÅÔØáåôø !%.2CGPT]ajnƒŠ_—›Ŧ°žÂŅÕæęû˙  $+_8<MQ_crv‡‹œ ¯ŗŧĀÉÍÖÚëīŨ'+37GK\`qu†Š›Ÿ°´ÃĮÎ_Ûßđô*.?CQUdhoo|€‘•Ŗ§ļēËĪØÜãįøü "15>BKO`dlpƒŒ™ĻĒŗˇČĖāäë_đôû_ *.<@OSZŨgktx‰–šĢ¯¸ŧÍŅÚŪīķúū /3<@QUfjq_~‚”Ŗ§Ž_ŗˇž_ËĪÖÚãįöú )->BSWhl}’–ŸŖĒŽŋÃŌÖŨáōö #48GKTX_ctx‡‹’–—›ĸĻ­ąĀÄĖĐØÜäčđôü  '+37>BQU\`os|€‡‹”˜Š­´¸ŋÃŌÖåéúū !26?CJN_cjn>ƒ>‹>>–>š>Š>­>´>¸>Ā>Ä>Ô>Ø>á>å>ö>ú> > >_>>$_1>5>>>B>S>W>^_k>o>€>„>‹_˜>œ>­>ą>¸_Å>É>Ú>Ū>į>ë>ü>> > >>">)>-><>@>I>M>T>X>i>m>|Q€QˆQŒQ“Q—QĻQĒQąQĩQŊQÁQŅQÕQŪQâQķQ÷QQ Q_QQ!_.Q2Q;Q?QPQTQ[_hQlQ}QQˆ_•Q™QĒQŽQĩ_ÂQÆQ×QÛQäQčQųQũQ Q Q Q Q& Q* Q9 Q= QF QJ QQ QU Qf Qj Qy S} S„ Sˆ S” S˜ SŸ SŖ Sˇ Sģ S gĮ SË SŌ gß Sã Sę oī Sķ Sú o! !!!%!)!5!9!C!G!S!W!c!g!{!!†!Š!™!!¤!¨!ˇ!ģ!Â!Æ!×!Û!å!é!õ!ų!" ""!"(","3"7"F"J"Q"U"\"`"g"k"z"~"…"_’"–"Ĩ"Š"ŗ"ˇ"Ã"Į"Ķ"×"á"å"ņ"õ"####$#(#7#;#B#F#O#S#b#f#m#q#‚#†##”# #¤#°#´#Č#Ė#Ķ#×#Ū#â#ë#ī#ū#$ $ $$$$#$2$6$=$_J$N$U$Y$j$n$u$y$ˆ$Œ$“$—$Ļ$UĒ$U˛$Uļ$UŊ$UÁ$UĘ$UÎ$UŨ$Uá$Uč$Uė$Uõ$Uų$U%U%U%U%U!%U%%U5%U9%U@%UD%US%W%f%j%y%}%„%ˆ%‘%•%ž%ĸ%Ģ%¯%¸%ŧ%Å%É%Ú%Ū%đ%ô%ü%&&&&&)&-&=&A&K&O&Y&]&o&s&}&&‹&&Ą&Ĩ&Ŧ&°&ŋ&Ã&Í&Ņ&Û&ß&é&í&˙&' '''')'-'?'C'J'N']'a'k'o'y'}''“''Ą'Ģ'¯'Á'Å'Ė'Đ'ß'ã'í'ņ'û'˙'(((#(-(1(C(G(N(R(a(e(o(s(}((“(—(Ą(Ĩ(¯(ŗ(Å(É(Đ(Ô(ã(į(ņ(õ() )))+)/)6):)I)M)T)X)_)c)r)v)€)„)Ž)’)™))§)Ģ)Ŋ)Á)Đ)Ô)Ū)â)ė)đ)*****"*4*8*?*C*R*V*`*d*n*r*|*€*’*–* *¤*Ž*˛*ŧ*Ā*Ō*Ö*Ũ*á*đ*ô*ū*+ ++"+&+0+4+>+B+T+X+_+c+r+v+€+„+Ž+’+¤+¨+˛+ļ+Ā+Ä+Ö+Ú+á+å+ô+ø+,,,,&,*,4,8,B,F,X,\,c,g,v,z,„,ˆ,š,ž,¨,Ŧ,ž,Â,É,Í,Ü,ā,į,ë,ō,ö,ũ,----"-,-0-7-;-E-I-S-W-i-m-|-€-‘-•-Ē-Ž-ŋ-Ã-Ė-Đ-Ų-Ũ-æ-ę-ķ-÷-.. ..".&.0.4.>.B.L.P.Z.^.h.l.v.z.Œ..—.›.Ē.Ž.¸.ŧ.Æ.Ę.Ô.Ø.â.æ.đ.ô.ū./ //"/&/0/4/>/B/L/P/Z/^/h/l/v/z/„/ˆ/š/ž/Ĩ/Š/¸/ŧ/Æ/Ę/Ô/Ø/â/æ/đ/ô/ū/0 00000040>0B0L0P0Z0^0h0l0v0z0„0ˆ0’0–0¨0Ŧ0ŗ0ˇ0Æ0Ę0Ô0Ø0â0æ0đ0ô0ū01 1111(1,1>1B1L1P1Z1^1h1l1v1z1„1ˆ1’1–1 1¤1ļ1ē1Á1Å1Ô1Ø1â1æ1đ1ô1ū12 2222(2,262:2L2P2Z2^2h2l2v2z2„2ˆ2’2–2 2¤2Ž2˛2Ä2Č2Ī2Ķ2â2æ2đ2ô2ū23 3333(3,363:3D3H3Z3^3h3l3v3z3„3ˆ3’3–3 3¤3Ž3˛3ŧ3Ā3Ō3Ö3Ũ3á3đ3ô3û3˙3 4 444%4)43474>4B4L4P4Z4^4h4l4s4w4‰44—4›4Ĩ4Š4ŗ4ˇ4Á4Å4Ī4Ķ4Ũ4á4ë4ī455 555#5-515;5?5I5M5W5[5e5i5s5w55…5—5›5Ĩ5Š5ŗ5ˇ5Á5Å5Ī5Ķ5Ũ5á5ë5ī5ų5ũ56666-616;6?6I6M6W6[6e6i6s6w66…66“6Ĩ6Š6ŗ6ˇ6Á6Å6Ī6Ķ6Ũ6á6ë6ī6ų6ũ67 77!7(7,7;7?7I7M7W7[7e7i7s7w77…77“77Ą7ŗ7ˇ7Á7Å7Ī7Ķ7Ũ7á7ë7ī7ų7ũ78 888+8/868:8I8M8W8[8e8i8s8w88…88“88Ą8Ģ8¯8Á8Å8Ī8Ķ8Ũ8á8ë8ī8ų8ũ89 999#9'999=9D9H9W9[9e9i9s9w99…99“99Ą9Ģ9¯9š9Ŋ9Ī9Ķ9Ũ9á9ë9ī9ų9ũ9: :::#:':1:5:G:K:R:V:e:i:s:w::…::“::Ą:Ģ:¯:š:Ŋ:Į:Ë:Ũ:á:ë:ī:ų:ũ:; ;;;#;';1;5;?;C;U;Y;`;d;s;w;;…;;“;;Ą;Ģ;¯;š;Ŋ;Į;Ë;Õ;Ų;ë;ī;ų;ũ;< <<<#<'<1<5<?<C<M<Q<c<g<n<r<<…<<“<<Ą<Ģ<¯<š<Ŋ<Į<Ë<Õ<Ų<ã<į<ų<ũ<= ===#='=1=5=?=C=M=Q=[=_=q=u=|=€==“==Ą=Ģ=¯=š=Ŋ=Į=Ë=Õ=Ų=ã=į=ņ=õ=> >>>#>'>1>5>?>C>M>Q>[>_>i>m>>ƒ>Š>Ž>>Ą>Ģ>¯>š>Ŋ>Į>Ë>Õ>Ų>ã>į>ņ>õ>˙>???#?'?1?5???C?M?Q?[?_?i?m?w?{??‘?˜?œ?Ģ?¯?š?Ŋ?Į?Ë?Õ?Ų?ã?į?ņ?õ?˙?@ @@#@'@1@5@?@C@M@Q@[@_@i@m@w@{@…@‰@›@Ÿ@Ļ@Ē@š@Ŋ@Į@Ë@Õ@Ų@ã@į@ņ@õ@˙@A AAAA1A5A?ACAMAQA[A_AiAmAwA{A…A‰A“A—AŠA­A´A¸AĮAËAÕAŲAãAįAņAõA˙AB BBBB)B-B?BCBMBQB[B_BiBmBwB{B…B‰B“B—BĄBĨBˇBģBÅBÉBĶB×BáBåBīBķBũBC CCCC/C3CECICcCgCvCzCC…CŒCC—C›CĒCŽC¸CŧCÆCĘCÔCØCâCæCđCôCūCDDDD#D*D.D=DADHDLDWD[DbDfDqDuD|D€D“D—DĄDĨD¯DŗDŊDÁDËDĪDŲDŨDįDëDũDEE EEE"E&E9E=EEEIEYE]EgEkEuEyEƒE‡E‘E•EŸEŖE­EąEÃEĮEĪEĶEÛEßEįEëEķE÷EF FFF!F%F6F:FAFEFLFPFWF[FjFnFuFyF‚F†FF‘F F¤FĢF¯F¸FŧFÃFĮFÎFŌFãFįFîFōFGGGG5G9GHGLGfGjGyG}G‡G‹G•G™GĢG¯GšGŊGĮGËGŨGáGęGîG÷GûG HHHH,H0H8HJBJJJNJVJZJjJnJuJyJƒJ‡J‘J•JŸJŖJ­JąJģJŋJÆJĘJÔJØJâJæJđJôJK KKK"K&K0K4K>KBKLKPKZK^KhKlKvKzKŒKK—K›KĒKŽKŋKÃKÔKØKáKåKîKōKųKũKL LLL L$L+L/L8LfBfLfPfbfffmfqf€f„fŽf’fœf f˛fļfĀfÄfÎfŌfäfčfīfķfgggg&g*g4g8gJgNgUgYghglgvgzgŒggšgžg°g´gģgŋgÎgŌgÜgāgōgöghhhh!h%h4h8hBhFhXh\hfhjh|h€h‡h‹hšhžhĨhŠh¸hŧhÆhĘhÜhāhīhķhi iii.i2iDiHiZi^imiqiƒi‡i™iiŦi°iÂiÆiØiÜiëiīijjjj*j.j@jDjVjZjijmjjƒj•j™j¨jŦjģjŋjÎjŌjäjčjījķjkkkk&k*k4k8kJkNkUkYkhklkvkzkŒkkškžk°k´kģkŋkÎkŌkÜkākōkökllll!l%l4l8lBlFlXl\lfljl|l€l‡l‹lšlžl¨lŦlžlÂlĖlĐlâlælílņlmmmm$m(m2m6mHmLmSmWmfmjm|m€m’m–mĨmŠmģmŋmŅmÕmämčmúmūmnn#n'n9n=nOnSnbnfnxn|nŽn’nĄnĨnˇnģnÍnŅnānänönún ooo#o5o9oKoOo^obotoxoŠoŽooĄoąoĩoÅoÉoÚoŪočoėoöoúopppp'p+p6p:pCpGpPpTpepipppŨupyp€pŨ…p‰ppŨpĄpŗpˇpÉpÍpÔpŨápåpīpķpũpq qq!q%q?qCqRqVqpqtqƒq‡qq“q›qŸq¯qŗqÃqĮqŅqÕqßqãqíqņqrrrrr#r-r1rCrGrNrRrarerorsr}rr“r—rĄrĨr¯rŗrÅrÉrĐrÔrãrįrųrũrs sss*s.s5sŨBsFsXs\snsrsysŨ†sŠsœs sēsžsÍsŅsāsäsösús ttt#t5t9tCtGtNtRtdthtwt{tt‘tŖt§tļtētĖtĐtÚtŪtåtétût˙tuu$u(u2u6u=uAuSuWufuju|u€uŠuŽu•u™uĢu¯užuÂuÔuØuâuæuíuņuvvvv,v0v:v>vEvIv[v_vnvrv„vˆv’v–vvĄvŗvˇvÆvĘvÜvāvęvîvõvųv www"w4w8wBwFwMwQwcwgwvwzwŒwwšwžwĨwŠwģwŋwÎwŌwäwčwúwūw xx#x'x9x=xLxPxbxfxxx|x‹xxĄxĨxˇxģxĘxÎxāxäxöxúx y yy#y5y9yHyLy^ybytyxy‡y‹yyĄyŗyˇyÆyĘyÜyāyōyöyz zzz1z5zDzHzZz^zpztzƒz‡z™zz¯zŗzÂzÆzØzÜzîzōz{{{{%{){0{4{F{J{Y{]{o{s{}{{ˆ{Œ{ž{ĸ{ą{ĩ{Į{Ë{Õ{Ų{ā{ä{ö{ú{ | |||"|&|8|<|K|O|V|Z|a|e|o|s|z|~|ˆ|Œ|“|—|Ą|Ĩ|Ŧ|°|ē|ž|Å|É|Ķ|×|Ū|â|ė|đ|÷|û|} }}}&}*}1}5}<}@}J}N}U}Y}c}g}n}r}|}€}‡}‹}•}™} }¤}Ž}˛}š}Ŋ}Į}Ë}Ō}Ö}ā}ä}ë}ī}~~ ~_~~~_!~%~,~_1~5~<~_A~E~L~_Y~]~d~h~r~v~}~~‹~~–~š~¤~¨~¯~ŗ~Ŋ~Á~Ë~Ī~Ų~Ũ~ä~č~ō~ö~ _#_(,3_@DKOY]dhrv}‹™¤¨ēžÆĘŲŨäzéíôzųũ€z€€€z!€%€,€z1€5€<€zI€M€U€Y€a€e€u€y€€€z…€‰€€z•€™€ €z­€ą€¸€zŊ€Á€Ȁz̀Ņ€؀zå€é€ņ€õ€ũ€!)-=AIMUYimuy…•™ ¤Ŧ°¸ŧˁЁׁz܁āįzėđ÷z‚‚‚z‚‚‚z$‚(‚/‚z<‚@‚H‚L‚T‚X‚h‚l‚s‚zx‚|‚ƒ‚‡‚Ž‚’‚Ą‚Ĩ‚Ŧ‚°‚ˇ‚ģ‚ʂ΂ՂŲ‚â‚æ‚í‚ņ‚ƒƒ ƒƒƒƒ#ƒ'ƒ6ƒ:ƒAƒEƒTƒXƒ`ƒdƒtƒxƒƒz„ƒˆƒƒzœƒ ƒ§ƒzŦƒ°ƒˇƒzăȃЃԃ܃āƒįƒëƒûƒ˙ƒ„z „„„z#„'„.„z3„7„>„zK„O„W„[„c„g„n„r„‚„†„Ž„’„ĸ„τބ˛„„Ƅ΄Ō„ڄŪ„î„ō„ų„ũ„… ………%…)…0…z5…9…@…zE…I…P…z]…a…h…zm…q…x…z}……ˆ…z•…™…Ą…Ĩ…­…ą…Á…ŅĖ…zŅ…Յ܅ā…ī…ķ…ú…ū…† †††#†'†0†4†C†G†N†R†[†_†f†j†y†}†„†ˆ†—†›†Ŗ†§†ˇ†ģ†ˆΆë†ī†ū†‡‡"‡1‡5‡<‡zA‡E‡L‡zQ‡U‡\‡za‡e‡l‡zy‡}‡„‡z‰‡‡”‡z™‡‡¤‡zЇ­‡´‡zÁ‡Ň͇҇؇܇ä‡č‡ø‡ü‡ˆzˆ ˆˆzˆˆ#ˆz(ˆ,ˆ3ˆz@ˆDˆKˆzPˆTˆ[ˆz`ˆdˆkˆzpˆtˆ{ˆzˆˆŒˆ”ˆ˜ˆŸˆŖˆ̈¯ˆŋˆÈˈΈ׈ۈãˆįˆ÷ˆûˆ‰‰‰‰‰‰/‰3‰;‰?‰G‰K‰[‰_‰f‰j‰r‰v‰~‰‚‰’‰–‰‰zĸ‰ω­‰z˛‰ļ‰Ŋ‰zʉΉՉzډŪ‰å‰zę‰î‰õ‰zŠŠŠŠŠŠ.Š2Š9Šz>ŠBŠIŠMŠ\Š`ŠgŠkŠrŠvŠ…Š‰ŠŠ”ŠŠĄŠ°Š´ŠģŠŋŠȊˊ͊׊æŠęŠņŠõŠ‹‹‹‹$‹(‹7‹;‹J‹N‹U‹Y‹b‹f‹o‹s‹‚‹†‹Ž‹’‹ĸ‹Ļ‹¯‹ŗ‹ŧ‹Ā‹Ō‹֋č‹ė‹ķ‹oø‹ü‹ŒoŒŒŒ_(Œ,Œ<Œ@ŒGŒ_TŒXŒ_ŒcŒtŒxŒˆŒŒŒ“Œ_ Œ¤ŒŗŒˇŒŋŒÌˌΌߌãŒęŒ_īŒķŒúŒ_ '+2_?CJN]aimvzƒ‡—›ĸ_¯ŗƍ΍ŌۍߍčėüŽ Ž ŽŽŽ+Ž/Ž6Ž:ŽIŽMŽVŽZŽkŽoŽxŽ|ŽŽ‘Ž Ž¤ŽŗŽˇŽžŽŽˎĪŽŪŽâŽéŽíŽöŽúŽ#'8<CGVZcgx|”˜§ĢÏĮ֏ڏëīøü+/6:CGPT]ajnƒ‹˜œŖ§°´ŊÁʐΐאېėđøü‘‘‘‘‘ ‘(‘,‘<‘@‘G‘K‘U‘Y‘c‘g‘q‘u‘‘ƒ‘Бޑ˜‘œ‘ϑǑ´‘¸‘‘Ƒܑؑå‘é‘ō‘ö‘˙‘’ ’’’’&’*’3’7’@’D’U’Y’`’d’p’t’ƒ’‡’’”’Ļ’Ē’ŗ’ˇ’ȒĖ’Ķ’גæ’ę’ō’ö’ū’“ “““"“.“2“>“B“N“R“f“j“q“u“ˆ“Œ“““—“ϓǓŗ“ˇ“ȓ˓͓דæ“ę“ô“ø“ ””””,”0”7”;”J”N”^”b”v”z””…”˜”œ”Ŗ”§”ļ”ē”ÔĮ”ؔܔã”į”ö”ú”••••'•+•<•@•G•K•Z•^•e•i•s•w••…••“••Ą•¨•Ŧ•ļ•ē•ĕȕŌ•֕ā•ä•ö•ú•–––––!–*–.–7–;–D–H–Q–U–^–b–s–w–~–‚–Ž–’–Ą–Ĩ–Ž–˛–ĖȖŅ–Ֆæ–ę–ņ–õ–—————"—+—/—8—<—E—I—R—V—_—c—t—x——…—Ž—’—›—Ÿ—¨—Ŧ—ĩ—š——ƗĪ—Ķ—ä—č—ī—ķ—˜˜˜˜˜#˜4˜8˜A˜E˜V˜Z˜a˜e˜t˜x˜˜…˜Ž˜’˜›˜Ÿ˜¨˜Ŧ˜ĩ˜š˜ʘΘטۘä˜č˜ņ˜õ˜ū˜™ ™™ ™$™+™/™=™A™P™T™[™_™p™t™}™™’™–™™Ą™°™´™Ŋ™Á™ʙΙיۙä™č™ņ™õ™š ššš&š*š3š7š@šDšMšQšZš^šgškš|š€š‰šš–šššŖš§š°š´šŊšÁšԚ֚Ũšášđšôšüš› › ›››#›'›0›4›E›I›P›T›[›_›f›j›q›u›|›€›‡›‹›š›ž›§›Ģ›´›¸›Á›śΛŌ›ۛߛč›ė›ũ›œœ œœœœ"œ)œ-œ4œ8œ?œCœRœVœ_œcœlœpœyœ}œ†œŠœ“œ—œ œ¤œĩœšœœƜΜ͜ܜāœņœõœūœ -18<KOX\eirv‡‹’_—›ĸ_§Ģ˛_ˇģ_Į˝Ō_ߝãëī˙ž žžžž&ž*ž;ž?žFž_KžOžVž_[ž_žfž_kžožvž_ƒž‡ž–žšžŖž§ž°ž´žŊžÁžŌž֞ߞãžėžđžųžũžŸŸŸŸ,Ÿ0Ÿ9Ÿ=ŸFŸJŸSŸWŸ`ŸdŸuŸyŸ‚Ÿ†ŸŸ“ŸœŸ ŸП­ŸžŸŸɟ͟ܟāŸīŸķŸ     " + / 8 < M Q Z ^ g k t x  … – š Ą Ĩ ´ ¸ Á Å ΠŌ ã į đ ô ũ ĄĄĄĄ!Ą0Ą4Ą;Ą_@ĄDĄKĄ_PĄTĄ[Ą_hĄlĄtĄxĄˆĄŒĄ•Ą™ĄĸĄĻĄˇĄģĄÄĄČĄŅĄÕĄæĄęĄņĄõĄĸĸĸĸĸ"ĸ3ĸ7ĸ@ĸDĸMĸQĸbĸfĸmĸqĸ€ĸ„ĸĸ‘ĸĸĸĻĸ¯ĸŗĸÄĸČĸĪĸĶĸâĸæĸ÷ĸûĸ ŖŖŖ#Ŗ4Ŗ8ŖIŖMŖ\Ŗ`ŖqŖuŖ†ŖŠŖ™ŖŖŽŖ˛ŖÃŖĮŖÖŖÚŖëŖīŖ¤¤¤¤(¤,¤=¤A¤P¤T¤e¤i¤z¤~¤¤‘¤ĸ¤Ϥˇ¤ģ¤ʤΤؤܤî¤ō¤û¤˙¤ĨĨĨĨ.Ĩ2ĨCĨGĨXĨ\ĨkĨoĨ€Ĩ„Ĩ•Ĩ™Ĩ¨ĨŦĨžĨÂĨĖĨĐĨ×ĨÛĨíĨņĨĻĻĻĻ+Ļ/Ļ>ĻBĻTĻXĻiĻmĻ|πϑϕĻĻĻĒĻšĻŊĻĪĻĶĻäĻčĻ÷ĻûĻ §§"§&§5§9§K§O§`§d§s§w§‰§§ž§ĸ§ą§ĩ§ƧʧÛ§ß§î§ō§¨¨¨¨+¨/¨A¨E¨V¨Z¨i¨m¨¨ƒ¨”¨˜¨§¨̍´¨¸¨¨ƨШÔ¨Ū¨â¨ė¨đ¨ų¨ũ¨Š ŠŠŠ!Š%Š.Š2Š<Š@ŠQŠUŠdŠhŠoŠsŠ}ŠŠ‹ŠŠ™ŠŠ§ŠĢОŠļŠĀŠÄŠΊŌŠäŠčŠņŠõŠūŠĒ ĒĒĒĒ%Ē)Ē2Ē6ĒGĒKĒRĒVĒbĒfĒuĒyĒ‚Ē†Ē˜ĒœĒĨĒŠĒēĒžĒÅĒÉĒØĒÜĒãĒįĒđĒôĒūĒĢ ĢĢĢĢ$Ģ(Ģ1Ģ5Ģ>ĢBĢKĢOĢXĢ\ĢeĢiĢzĢ~Ģ‡Ģ‹Ģ”Ģ˜ĢĄĢĨĢŽĢ˛ĢģĢŋĢČĢĖĢÕĢŲĢâĢæĢīĢķĢŦŦŦŦŦ#Ŧ2Ŧ6Ŧ?ŦCŦUŦYŦbŦfŦwŦ{Ŧ‚Ŧ†Ŧ•Ŧ™Ŧ Ŧ¤Ŧ­ŦąŦēŦžŦĮŦËŦÔŦØŦßŦãŦėŦđŦųŦũŦ­ ­­­ ­$­5­9­B­F­O­S­\­`­i­m­v­z­ƒ­‡­­”­­Ą­Ē­Ž­ŋ­íĘ­έÚ­Ū­í­ņ­ú­ū­ŽŽŽ Ž1Ž5Ž<Ž@ŽOŽSŽZŽ^ŽgŽkŽtŽxŽŽ…ŽŽŽ’Ž™ŽŽĻŽĒ޺ގŽĀŽÄŽÕŽŲŽâŽæŽīŽķŽüޝ ¯ ¯¯¯#¯'¯0¯4¯E¯I¯P¯T¯`¯d¯s¯w¯€¯„¯•¯™¯ĸ¯ϝˇ¯ģ¯¯ƯÕ¯Ų¯â¯æ¯ī¯ķ¯ü¯° ° °°°#°'°0°4°E°I°R°V°_°c°l°p°y°}°†°а“°—° °¤°ĩ°š°°İŌ°Ö°å°é°đ°ô°ą ąąą'ą+ą2ą6ąEąIąRąVą_ącąląpąyą}ą†ąŠą›ąŸą¨ąŦąĩąšąÂąÆąĪąĶąÜąāąņąõąüą˛ ˛˛˛#˛,˛0˛A˛E˛N˛R˛c˛g˛n˛r˛˛…˛Œ˛˛—˛›˛Ǟޞˇ˛ģ˛IJȲҞÕ˛Ū˛â˛ķ˛÷˛˙˛ŗ ŗŗŗ#ŗ,ŗ0ŗ9ŗ=ŗFŗJŗ[ŗ_ŗhŗlŗuŗyŗ‚ŗ†ŗ—ŗ›ŗĸŗĻŗĩŗšŗÁŗÅŗĖŗĐŗßŗãŗíŗņŗûŗ˙ŗ ´ ´´#´2´6´@´D´N´R´\´`´r´v´´ƒ´Œ´´™´´Ž´˛´š´Ŋ´Ė´Đ´á´å´ö´ú´ ĩ ĩĩ"ĩ3ĩ7ĩFĩJĩ\ĩ`ĩjĩnĩuĩyĩ‹ĩĩžĩĸĩŗĩˇĩČĩĖĩÛĩßĩđĩôĩļ ļļļ.ļ2ļCļGļVļZļlļpļļ…ļ”ļ˜ļŠļ­ļžļÂļŅļÕļæļęļûļ˙#ˇ'ˇ8ˇ<ˇKˇOˇ`ˇdˇuˇyˇˆˇŒˇˇĄˇ˛ˇļˇŎɡÛˇߡđˇôˇ¸¸¸¸-¸1¸@¸D¸M¸Q¸[¸_¸i¸m¸v¸z¸„¸ˆ¸’¸–¸Ÿ¸Ŗ¸Ŧ¸°¸Á¸ŸÔ¸ظ߸ã¸í¸ņ¸û¸˙¸ š ššš"š&š0š4š>šBšLšPšbšfšošsš|š€š‰šš–šššŖš§š°š´šŊšÁšŌšÖšŨšášíšņšēē ēē#ē'ē0ē4ēEēIēPēTēcēgēnērē|ē€ēŠēŽē˜ēœēĻēĒēąēĩēŋēÃēÍēŅēÛēßēņēõēūēģ ģģģģ%ģ)ģ2ģ6ģ?ģCģLģPģaģeģlģpģ|ģ€ģģ“ģœģ ģ˛ģļģŋģÃģÔģØģßģãģōģöģũģŧ ŧŧŧŧ'ŧ+ŧ2ŧ6ŧ@ŧDŧNŧRŧYŧ]ŧgŧkŧuŧyŧƒŧ‡ŧ™ŧŧ¤ŧ¨ŧąŧĩŧžŧÂŧËŧĪŧØŧÜŧãŧįŧđŧôŧũŧŊ ŊŊŊ#Ŋ*Ŋ.Ŋ=ŊAŊKŊOŊYŊ]ŊgŊkŊuŊyŊƒŊ‡Ŋ‘Ŋ•ŊŸŊŖŊĩŊšŊÂŊÆŊĪŊĶŊÜŊāŊéŊíŊöŊúŊžžžž%ž)ž0ž4žCžGžNžRž\ž`žjžnžxž|žƒž‡ž‘ž•žŸžŖž­žąžģžŋžÉžÍžßžãžėžđžųžũžŋ ŋŋŋ ŋ$ŋ-ŋ1ŋ:ŋ>ŋGŋKŋ\ŋ`ŋgŋkŋwŋ{ŋŠŋŽŋ—ŋ›ŋŦŋ°ŋšŋŊŋÎŋŌŋŲŋŨŋėŋđŋųŋũŋĀ ĀĀĀ Ā$Ā-Ā1Ā:Ā>ĀGĀKĀTĀXĀaĀeĀnĀrĀƒĀ‡ĀĀ”ĀĀĄĀĒĀŽĀˇĀģĀÄĀČĀŅĀÕĀæĀęĀņĀõĀÁÁÁÁÁ"Á+Á/Á8Á<ÁEÁIÁRÁVÁgÁkÁtÁxÁÁ…ÁŽÁ’Á›ÁŸÁ¨ÁŦÁĩÁšÁĘÁÎÁÕÁŲÁčÁėÁõÁųÁ Â)Â-Â6Â:ÂCÂGÂPÂTÂ]ÂaÂjÂnƒŒ™ÂĻÂĒÂŗÂˇÂĀÂÄÂÍÂŅÂÚÂŪÂįÂëÂüÂÃà ÃÃÃ'Ã+Ã4Ã8ÃAÃEÃNÃRÃ[Ã_ÃhÃlÃuÃyÃŠÃŽÃ—Ã›Ã¤Ã¨ÃąÃĩÞÃÂÃËÃĪÃØÃÜÃåÃéÃúÃūÃÄ ÄÄÄ#Ä'Ä6Ä:ÄCÄGÄXÄ\ÄcÄgÄvÄzăćĘĜÄĨÄŠÄēÄžÄÅÄÉÄØÄÜÄåÄéÄōÄöÄ˙ÄÅ ÅÅÅÅ.Å2Å:Å>ÅNÅRÅ[Å_ÅhÅlÅuÅyÅ‚Å†ÅÅ“Å¤Å¨ÅąÅĩÅžÅÂÅËÅĪÅØÅÜÅåÅéÅúÅūÅÆ ÆÆÆ%Æ)Æ2Æ6Æ?ÆCÆTÆXÆaÆeÆnÆrÆ{ÆÆÆ”ƛƟÆĢƯƞÆÂÆËÆĪÆāÆäÆíÆņÆĮĮ ĮĮ Į$Į+Į/Į>ĮBĮLĮPĮZĮ^ĮhĮlĮ~Į‚Į‘Į•ĮŸĮŖĮ­ĮąĮģĮŋĮŅĮÕĮŪĮâĮëĮīĮøĮüĮ ČČČČ+Č/ČAČEČVČZČiČmČ~ȂȓȗČĻČĒČŧČĀČĘČÎČÕČŲČëČīČūČÉÉÉ(É,É;É?ÉPÉTÉeÉiÉxÉ|ɍɑÉĸÉĻÉĩÉšÉËÉĪÉāÉäÉķÉ÷É Ę ĘĘĘ!Ę%Ę6Ę:ĘIĘMĘ_ĘcĘtĘxĘ‡Ę‹ĘœĘ ĘąĘĩĘÄĘČĘŲĘŨĘîĘōĘËËËË+Ë/Ë>ËBËSËWËhËlË{Ëː˔ËĨˊ˸ËŧËÍËŅËâËæËõËųË ĖĖĖĖ#Ė'Ė8Ė<ĖKĖOĖaĖeĖvĖzĖ‰ĖĖŸĖŖĖŦ˰ˎĖģĖĖĖĐĖßĖãĖëĖīĖ÷ĖûĖÍÍÍÍÍ Í)Í-Í6Í:ÍCÍGÍOÍSÍ\Í`ÍiÍmÍ~Í‚Í‹ÍÍ–ÍšÍŖÍ§Í°Í´ÍĀÍÄÍĐÍÔÍāÍäÍđÍôÍÎÎ ÎÎÎ!Î*Î.Î:Î>ÎJÎNÎbÎfÎpÎtÎ{ÎΉ΍ΗΛÎĨÎŠÎŗÎˇÎÁÎÅÎĖÎĐÎÚÎŪÎåÎéÎûÎ˙ÎĪĪĪ#Ī*Ī.Ī@ĪDĪSĪWĪ^Ī_cĪgĪnĪ_sĪwĪ~Ī_‹ĪĪŸĪŖĪĢΝΎĪģĪËĪĪĪŲĪŨĪäĪčĪīĪķĪüĪĐ Đ ĐĐĐ#Đ'Đ0Đ4Đ;Đ?ĐHĐLĐ]ĐaĐkĐoĐvĐzĐƒĐ‡ĐĐ”ĐĐĄĐĒЎСĐģĐÄĐČĐŲĐŨĐäĐčĐņĐõĐūĐŅ ŅŅŅŅ%Ņ)Ņ0Ņ4Ņ=ŅAŅRŅVŅ`ŅdŅkŅoŅxŅ|Ņ…Ņ‰Ņ’Ņ–ŅŸŅŖŅŦŅ°ŅšŅŊŅÎŅŌŅäŅčŅđŅôŅŌŌŌŌŌ!Ō*Ō.Ō7Ō;ŌDŌHŌQŌUŌ^ŌbŌsŌwŌŌ…ŌŽŌ’ŌŸŌŖŌ°Ō´ŌÁŌÅŌŌŌÖŌãŌįŌüŌĶĶĶĶ!Ķ+Ķ/Ķ9Ķ=ĶDĶHĶRĶVĶ`ĶdĶnĶrĶĶ…ĶĶ“ĶĶĄĶĢĶ¯ĶšĶŊĶĪĶĶĶÚĶŪĶíĶņĶûĶ˙Ķ Ô ÔÔÔ%Ô)Ô;Ô?ÔIÔMÔWÔ[ÔeÔiÔsÔwԉԍԗԛÔĨÔŠÔŗÔˇÔÁÔÅÔ×ÔÛÔåÔéÔķÔ÷ÔÕÕÕÕ%Õ)Õ0Õ4ÕCÕGÕQÕUÕ_ÕcÕmÕqÕ{ÕÕ‘Õ•ÕŸÕŖÕ­ÕąÕģÕŋÕÉÕÍÕßÕãÕíÕņÕûÕ˙Õ Ö ÖÖÖ-Ö1Ö;Ö?ÖIÖMÖWÖ[ÖeÖiÖ{Ö։֍֛֗ÖĨÖŠÖŗÖˇÖÉÖÍÖ×ÖÛÖåÖéÖķÖ÷Ö××××%×)×3×7×A×E×O×S×]×a×s×w××…××“××Ą×Ģׯ×Á×Å×Ė×Đ×ß×ã×í×ņ×û×˙× Ø ØØ#Ø-Ø1Ø;Ø?ØIØMØ_ØcØjØnØ}ØØ“Ø—ØĄØĨØŦذØÂØÆØÕØŲØëØīØųØũØŲŲŲŲ-Ų1ŲCŲGŲQŲUŲ\Ų`ŲrŲvŲ…Ų]‰Ų]™Ų]Ų]ĻŲ]ĒŲ]šŲ]ŊŲ]ĖŲ]ĐŲ]ßŲ]ãŲ]ôŲ]øŲ]Ú]Ú] Ú]Ú]Ú]Ú],Ú]0Ú]7Ú];Ú]BÚ]FÚ]UÚ]YÚ]bÚ]fÚ]oÚ]sÚ]zÚ]~Ú]Ú]“Ú]ĸÚ]ĻÚ]­Ú]ąÚ]ÂÚ]ÆÚ]ÕÚ]ŲÚ]âÚ]æÚ]÷Ú]ûÚ]Û]Û]Û]Û]&Û]*Û];Û]?Û]FÛ]JÛ]YÛ]]Û]nÛ]rÛ]{Û]Û]†Û]ŠÛ]›Û]ŸÛ]ŽÛ]˛Û]ŊÛ]ÁÛ]ĖÛ]ĐÛ]ãÛ]įÛ]īÛ]ķÛ]ûÛ]˙Û]Ü] Ü]Ü]Ü]'Ü]+Ü]3Ü]7Ü]?Ü]CÜ]JÜ]NÜ]VÜ]ZÜ]bÜ]fÜ]nÜ]rÜ]zÜ]~Ü]†Ü]ŠÜ]’Ü]–Ü]žÜ]ĸÜ]ĒÜ]ŽÜ]ļÜ]ēÜ]ÂÜ]ÆÜ]ÎÜ]ŌÜ]âÜ]æÜ]íÜŨōÜ]öÜ]ũÜŨŨ]Ũ] ŨŨŨ]Ũ]&Ũ]*Ũ]2Ũ]6Ũ]FŨ]JŨ]RŨ]VŨ]^Ũ]bŨ]rŨ]vŨ]~Ũ]‚Ũ]‰Ũ]Ũ]”Ũ]˜Ũ]§Ũ]ĢŨ]˛ŨŨˇŨ]ģŨ]ÂŨŨĮŨ]ËŨ]ŌŨŨßŨ]ãŨ]ęŨŨīŨ]ķŨ]úŨŨ˙Ũ]Ū] ŪŨŪ]Ū]ŪŨŪ]#Ū]*ŪŨ7Ū];Ū]CŪ]GŪ]OŪ]SŪ]cŪ]gŪ]wŪ]{Ū]‹Ū]Ū]ŸŪ]ŖŪ]ŗŪ]ˇŪ]ŋŪ]ÃŪ]ËŪ]ĪŪ]ßŪ]ãŪ]đŪ]ôŪ]ûŪ]˙Ū]ß] ß]ß]ß]ß]"ß]*ß].ß]6ß]:ß]Bß]Fß]Mß]Qß]aß]eß]lß]pß]xß]|ß]„ß]ˆß]ß]”ß]œß] ß]¨ß]Ŧß]´ß]¸ß]Āß]Äß]Ôß]Øß]įß]ëß]ķß]÷ß]˙ß]ā] ā]ā]ā]ā]#ā]'ā]/ā]3ā];ā]?ā]Oā]Sā]Zā]^ā]eā]iā]xā]|ā]ƒā]‡ā]ā]”ā]Ŗā]§ā]Žā]˛ā]ģā]ŋā]Æā]Ęā]Ųā]Ũā]æā]ęā]ųā]ũā]á] á]á]á]%á])á]0á]4á]<á]@á]Há]Lá]Tá]Xá]`á]dá]tá]xá]á]ƒá]‹á]á]—á]›á]Ŗá]§á]¯á]ŗá]Ãá]Įá]Īá]Ķá]Ûá]ßá]įá]ëá]ķá]÷á]â] â]â]â]â]!â](â],â]3â]7â]Fâ]Jâ]Qâ]Uâ]\â]`â]gâ]kâ]râ]vâ]…â]‰â]â]”â]â]Ąâ]¨â]Ŧâ]ŗâ]ˇâ]žâ]Ââ]Ņâ]Õâ]Üâ]āâ]éâ]íâ]ôâ]øâ]˙â]ã]ã]ã]ã]!ã]0ã]4ã]<ã]@ã]Hã]Lã]\ã]`ã]hã]lã]|ã]€ã]ã]“ã]šã]žã]­ã]ąã]¸ã]ŧã]Åã]Éã]Đã]Ôã]åã]éã]ōã]öã]˙ã]ä]ä]ä]'ä]+ä];ä]?ä]Oä]Sä]Zä]^ä]nä]rä]‚ä]†ä]Žä]’ä]šä]žä]Žä]˛ä]Âä]Æä]Öä]Úä]ãä]įä]îä]ōä]å]å]åå#å'å0å4å=åAåHåLå]åaåjånåwå{å‚å†åå“åšåžå§åĢå˛åļåŋåÃåĘåÎå×åÛåäåčåņåõåūåæ æ æææ!æ%æ.æ2æ9æ=æFæJæQæUæ\æ`æiæmætæxææ…æŒææĄæĨæŽæ˛æģæŋæČæĖæŨæáæęæîæ÷æûæįįįį&į*į3į7į@įDįNįRį\į`įiįmįvįzį„įˆį‘į•į§įĢįŗįˇįžįÂįĘįÎįÖįÚįâįæįíįņįųįũįč čččč č/č3č:č>čEčIčPčTč[č_čfčjčqčuč|č€č‡č‹č’č–čĨčŠč°č´čģčŋčĶč×čŪčâčęčîčöčúčéééé"é&é/é3é<é@éQéUé\é_aéeélé_qéué|é_é…éŒé_™ééĻéĒéŗéˇéČéĖéÕéŲéâéæéíéņéúéūéę ęęę%ę)ę0ę4ęEęIęZę^ęmęqęzę~ęę“ęœę ęŠę­ę´ę¸ęÉęÍęÜęāęéęíęöęúę ëëëë"ë&ë.ë2ë:ë>ëMëQëZë^ëgëkë|ë€ë‡ë_Œëë—ë_œë ë§ë_´ë¸ëŋëÃëËëĪëØëÜëãëįëīëķëûë˙ëė ėėė)ė-ė6ė:ėAėEėNėRė[ė_ėfėjėyė}ė†ėŠė‘ė•ėĻėĒėąėĩėŊėÁėŌėÖėåėéėúėūėíí"í&í7í;íDíHíOíSídíhíwí{íŒííĄíĨí´í¸íÁíÅíĖíĐíŲíŨíäíčíņíõíüíî î îîî!î%î.î2î;î?îHîLîSîWî`îdîkîoîxî|îƒî‡îî”î›îŸîĻîĒîŗîˇîžîÂîËîĪîÖîÚîëîīîøîüîīīīīī!ī*ī.ī7ī;īBīFīOīSīZī^īgīkītīxīīƒīŒīīĄīĨīŽī˛īģīŋīČīĖīÕīŲīęīîīũīđ đđđđ(đ,đ5đ9đBđFđOđSđ\đ`điđmđvđzđƒđ‡đđ”đđĄđĒđŽđŋđÃđĖđĐđŲđŨđæđęđķđ÷đņ ņņņ(ņ,ņ5ņ9ņFņJņSņWņ`ņdņmņqņzņ~ņ‡ņ‹ņ”ņ˜ņĄņĨņŽņ˛ņģņŋņČņĖņŨņáņęņîņ÷ņûņōōōō&ō*ō1ō5ō<ō@ōQōUō^ōbōiōmōvōzōƒō‡ōō”ōōĄō¨ōŦōĩōšōĀōÄōÍōŅōÚōŪōåōéōōōöōķ ķķķ!ķ%ķ.ķ2ķ;ķ?ķFķJķSķWķ^ķbķkķoķxķ|ķƒķ‡ķķ”ķĨķŠķ°ķ´ķÅķÉķØķÜķãķįķđķôķôôôôôô&ô*ô;ô?ôHôLôUôYôhôlôsôwô†ôŠô“ô—ôžôĸôĢô¯ô¸ôŧôÅôÉôŌôÖôŨôáôęôîôõôųôõõõõõõ'õ+õ<õ@õPõTõlõpõwõ{õŠõŽõĻõĒõšõŊõÆõĘõÔõØõâõæõđõôõö öööö"ö+ö/ö8ö<öEöIöRöVö]öaöjönöuöyö‚ö†öö“öšöžö§öĢöŧöĀöĮöËöÚöŪöįöëöôöøö÷÷÷÷÷÷0÷4÷;÷?÷N÷R÷[÷_÷h÷l÷s÷w÷ˆ÷Œ÷“÷—÷Ļ÷Ē÷ģ÷ŋ÷Æ÷Ę÷Ō÷Ö÷å÷é÷đ÷ô÷ü÷øøøø ø0ø4ø;ø?øHøLø]øaøjønøøƒø’ø–øĨøŠø°ø´øŊøÁøĐøÔøÛøßøčøėøķø÷øų ųųų*ų.ų5ų9ųHųLųUųYųjųnų†ųŠų™ųųĩųšųČųĖųŨųáųņųõųú úúú/ú3úCúGúXú\úeúiúpútú…ú‰ú˜úœú­úąúēúžúÅúÉúÚúŪúíúņúøúüúûûûû"û&û-û1ûAûEûLûPûWû[ûjûnûxû|û†ûŠûŸûŖûĒûŽûˇûģûÃûĮû×ûÛûęûîûöûúû üüüü,ü0ü7ü;üGüKüRüVüjünüwü{ü‚ü†ü—ü›üĒü_Žü_ĩü_šü_Áü_Åü_Íü_Ņü_Ųü_Ũü_äü_čü_đü_ôü_ûü_˙ü_ũ_ũ_ũ_ũ_&ũ_*ũ_2ũ_6ũ_>ũ_Bũ_Qũ_Uũ_^ũ_bũ_kũ_oũ_€ũ_„ũ_‹ũ_ũ_žũ_ĸũ_Šũļũ_ēũ_Áũ_Åũ_Õũ_Ųũ_āũ_äũ_ôũ_øũ_˙ũ_ū_ū_ū_ū_"ū_)ū_-ū_6ū_:ū_Iū_Mū_Tū_Xū_aū_eū_lū_pū_ū_…ū_Žū_’ū_Ŗū_§ū_Žū_˛ū_Áū_Åū_Íū_Ņū_Øū_Üū_åū_éū_đū_ôū_˙_˙_˙_˙_%˙_)˙_2˙_6˙_G˙_K˙_R˙_V˙_b˙_f˙_u˙_y˙_‚˙_†˙_˙_“˙_¤˙_¨˙_¯˙´˙_¸˙_ŋ˙Ä˙_Č˙_Ī˙Ü˙_ā˙_į˙ô˙_ø˙_ _ __ _)_-_4_8_I_M_\a`agakasawaaƒa‹aa–ašaĸaĻa­aąaÁaÅaĖaĐaØaÜaäačađaôaaaaaa!a2a6a=aAaPaTa[halasawaaƒa‹aaŸaŖaĒaŽažaÂaÉaÍaÔaØaáaåaôaøa˙aa aaaa,a0a9a=aNaRaYa]alapaxa|aƒa‡aa”a›aŸaŽa˛aģaŋaĐaÔaŨaáaōaöaũaa aa a$a-a1a:a>aOaSaZ_acajoasaz‡a‹a’ŸaŖa´a¸aĮaËaÔaØaßaãaôaøac cccc"c+c/c>cBcIcMcVcZcacecvczcƒc‡cc”ccĄc˛cļcžcÂcŌcÖcŨcácđeôeûe˙eeeee%e)e1e5eEeIePeTeeeieueyee‘e˜eœeŖe§e¯eŗeēežeÆeĘeŅeÕeåeéeõeųe eeee,e0e<e@eTeXe_eceueye€e„e–ešeŦe°eˇeģeÕeŲeāeäeöeúe eeee5e9eAeEeUeYeaeeemeqeye}ee‘e˜eœe¤e¨e¯eŗeģeŋeĪeĶeÛeßeįeëeķe÷ee eee)e-e4e8e?eCeJeNeUeYe`edesewe~e‚e‹ee–ešeĄeĨe´e¸eŋeÃeĘeÎeÕeŲečeėeķe÷e e e e e& e* e: e> eZ e^ em eq e e‘ e  e¤ eĢ e¯ eļ eē eÉ gÍ gŨ gá gę gî gú gū g g g g g& g* g; g? gH gL gX g\ gm gq gx g| g„ gˆ g™ g gĻ gĒ gŗ gˇ gĀ gÄ gÕ gŲ gâ gæ gũ g g g g g g" g& g= gA gI gM gU gY ga ge gu gy g‚ g† g• g™ gĸ gĻ gˇ gģ gÄ gČ gĪ gĶ gÜ gā gī gķ gü g g g g$ g( g1 g5 gF gJ gS gW gh gl g{ g g† gŠ g› gŸ g¨ gŦ gŊ gÁ gĘ gÎ gß gã gė gđ g g g g g# g' g0 g4 gE gI gP gT gc gg gx g| g g‘ gš gž gĨ gŠ gē gž gÍ gŅ gÜ gā gë gī ggggggg&g*g2g6gFgJgRgVg^gbgigmgugygg…gg‘g™ggĨgŠgągĩgŊgÁgÉgÍgÕgŲgágågígņggg ŨggŨ!g%g,Ũ9g=gEgIgQgUgegigqgug}gg‘g•ggĄg¨gŦgŗgˇgÆgĘgŅŨÖgÚgáŨægęgņŨūgg ŨggŨg"g)Ũ.g2g9Ũ>gBgIŨVgZgbgfgngrg‚g†g–gšgĒgŽgžgÂgŌgÖgŨgágégígögúggggg)g-g4g8g@gDgLgPgWg[gcgggogsg{gg†gŠgšgžgĨgŠgągĩgžgÂgËgĪgāgägëgīgögúg g ggg g$g,g0g8g<gDgHgPgTg\g`ghglg|g€gg“g›gŸg§gĢgŗgˇgŋgÃgËgĪg×gÛgãgįg÷gûggg gg g$g+g/g8g<gKgOgVgZgcgggngrgg…gŽg’gĄgĨgŦg°gˇgģgĘgÎgÖgÚgâgægögúggg gggg%g)g1g5gEgIgPgTg\g`ghglgtgxg€g„g”g˜g g¤gŦg°g¸gŧgÄgČgØgÜgãgįgîgōgųgũggggg"g&g/g3g:g>gEgIgXg\gcgggngrgyg}gŒgg—g›gĒgŽgļgēgÂgÆgÖgÚgâgægögúg g ggg'g+g2g6g?gCgJgNg_gcglgpgyg}g†gŠg›gŸg¨gŦgĩgšgĘgÎgŨgágņgõgg ggg$g(g8g<gDgHgPgTgdghgxg|gŒgg¤g¨gągĩgŧgĀgŅgÕgäčņõ˙ )-?CJNVZbfnrz~Ž’™Ĩа´ŧĀČĖÔØāäėđ __(,3_@DKOW[cgos{‡‹›ŸŠ­ēžËĪÜāíņū"&59@DLP`dqu‚†›ŸĻǞļŊÁÉÍÕŲáåėđ"&;?FJRV^brvƒ‡”˜­ą¸ŧÎŌŲŨīķ .2:>FJZ^ei{‘•œ ēžÆĘŌÖæęōöū!)-48HLTX`dtx…–šĄĨŦ°ˇģĘÎÕŲâæõų37FJfjy}„ˆ“ĸĻ­ą¸ŧĖĐŲŨæęū %)26?CTX_crv}Ũ‚†Ũ’–ŨĒŽļēÂÆÎŌÚŪîōųũ      0 4 ; _@ D K _X \ c _p t { Ũˆ Œ • ™ ¤ ¨ ŗ ˇ Ę Î Ü ā ī ķ ú ū ! !!!)!-!4!Ũ9!=!D!ŨI!M!T!Ũa!e!p!t!}!!’!–!Ļ!Ē!ą!ĩ!Ã!Į!Ũ!á!č!ė!û!˙!"_ """_""&"_+"/"6"_C"G"P"T"]"a"j"n""ƒ"Š"_"“"š"_Ÿ"Ŗ"Ē"_¯"ŗ"ē"_Į"Ë"Ô"Ø"á"å"î"ō"###_###_##'#.#_3#7#>#_K#O#X#\#e#i#r#v#‡#‹#’#–#°#´#ŋ#Ã#Ô#Ø#č#ė#ķ#÷# $$ $$$+$/$6$:$I$M$V$Z$a$e$n$r${$$ˆ$Œ$$Ą$¯$ŗ$Ŋ$Á$Ī$Ķ$á$å$ķ$÷$ %%%%+%/%6%:%C%G%X%\%j%n%|%€%Ž%’%¨%Ŧ%ŗ%ˇ%Ā%Ä%Ë%Ī%Ø%Ü%å%é%ō%ö%ũ%&&&$&(&6&:&H&L&b&f&m&q&z&~&‡&‹&”&˜&Š&­&ģ&ŋ&Í&Ņ&ß&ã&ų&ũ&''''%')';'?'F'J'd'h'q'u'~'‚'‹'' '¤'Ģ'¯'Á'Å'Ė'Đ'ę'î'ö'ú' (((($(((1(5(>(B(S(W(^(b(k(o(v(z(ƒ(‡((”(Ĩ(Š(ą(ĩ(Ŋ(Á(É(Í(Õ(Ų(é(í(ö(ú( ))))!)%),)0)7);)J)N)U)Y)b)f)m)q)€)„)‹))–)š)Š)­)´)¸)Į)Ë)Ô)Ø)é)í)ū)* *$*3*7*U*Y*h*l*s*w*~*‚*‘*•*œ*_Ą*Ĩ*Ŧ*_ą*ĩ*ŧ*_É*Í*Ö*Ú*ã*į*ø*ü*+ +++%+)+:+>+G+K+\+`+n+r++…+Œ+_‘+•+œ+_Š+­+ļ+ē+Ë+Ī+Ũ+á+đ+ô+ũ+,,,,#,4,8,F,J,Y,],f,j,{,,ˆ,Œ,•,™,¨,Ŧ,ŗ,ˇ,Æ,Ę,Û,ß,č,ė,ķ,÷,- ---'-+-3-7-?-C-K-O-_-c-j-n-u-y-€-„-‹--ž-ĸ-Ē-Ž-ļ-ē-Â-Æ-Î-Ō-Ú-Ū-î-ō-ų-ũ-. ....!.).-.=.A.I.M.U.Y.a.e.m.q..….Ž.’.™..Ļ.Ē.ŗ.ˇ.ž.Â.É.Í.Õ.Ų.â.æ.í.ņ.////*/./=/A/R/V/_/c/j/n//ƒ/’/–/Ÿ/Ŗ/Ŧ/°/š/Ŋ/Æ/Ę/Û/ß/č/ė/õ/ų/0000"0&0/030:0>0G0K0T0X0i0m0t0x0‡0‹0’0ŨŸ0Ŗ0´0¸0ŋ0\Ė0Đ0á0å0õ0ų0 111 1/131:1ŨG1K1\1`1q1u1~1‚1‰11ž1ĸ1ą1ĩ1ŧ1Ā1É1Í1Ö1Ú1á1å1î1ō122222!2*2.2?2C2J2N2Z2^2m2q2z2~22“2š2ž2¯2ŗ2ē2ž2Í2Ņ2â2æ2ī2ķ2ú2ū233"3&3/333:3>3O3S3b3f3m3q3x3|3ƒ3‡3–3š3Ŗ3§3°3´3Ŋ3Á3Ō3Ö3å3é3ú3ū34444(4,45494B4F4W4[4d4h4q4u4~4‚4‹44 4¤4Ŧ4°4Ā4Ä4Ë4Ī4Ö4Ú4ę4î4÷4û4 5555*5.5?5C5T5X5a5e5l5p55…5Ž5’5Ŗ5§5°5´5Å5É5Đ5Ô5ã5į5ø5ü5 66 6$6-616B6F6P6T6f6j6r6v6†6Š6’6–6Ĩ6Š6°6_Ŋ6Á6Ņ6Õ6â6æ6õ6ų67777 7_-717A7E7R7V7e7i7y7}7Š7Ž77Ą7¨7_ĩ7š7É7Í7Ö7Ú7é7í7ô7_8888&8*898=8E8I8Q8U8e8i8y8}8„8o‰88”8o™88¤8oŠ8­8´8oÁ8Å8Í8Ņ8Ų8Ũ8å8é8ų8ũ89 999%9)91959=9A9Q9U9b9f9u9y9€9_…9‰99_•9™9 9_­9ą9š9Ŋ9Å9É9Ų9Ũ9æ9ę9ķ9÷9: ::: :$:4:8:E:I:X:\:c:_h:l:s:_x:|:ƒ:_:”:œ: :¨:Ŧ:ŧ:Ā:Į:_Ė:Đ:×:_Ü:ā:į:_ô:ø:;; ;; ;$;+;_0;4;;;_@;D;K;_X;\;d;h;p;t;„;ˆ;;”;¤;¨;ą;ĩ;Æ;Ę;Ō;Ö;æ;ę;ņ;õ;<<<<&<*<1<5<F<J<Y<]<m<q<x<|<„<ˆ<‘<•<ž<ĸ<ą<ĩ<ž<Â<Ë<Ī<ā<ä<ë<ī<ū<= == =$=-=1=B=F=U=Y=h=l=s=w=€=„=“=—=ž=ĸ=Ģ=¯=ļ=ē=Ë=Ī=Ø=Ü=í=ņ=ø=ü= >>>>->1>I>M>\>`>x>|>‹>>˜>œ>Ŗ>§>¸>ŧ>Ë>Ī>Ų>Ũ>į>ë>ũ>?? ????"?1?5?=?A?I?M?]?a?h?l?s?w?~?‚?‰??œ? ?§?_Ŧ?°?ˇ?_Ä?Č?Ī?_Ü?ā?į?ë?ķ?÷?˙?@ @@@@&@*@;@?@H@L@S@W@_@c@k@o@x@|@…@‰@’@–@@Ą@˛@ļ@ŋ@Ã@×@Û@ä@č@ô@ø@AAAA!A%A.A2AFAJA^AbAjAnAwA{A„AˆA‘A•AĻAĒAĩAšAÄAČAĶA×AęAîA÷AûAB BBB$B(B;B?BFBJBSBWB`BdBkBoBxB|B…B‰BB”BBĄB¨BŦBŊBÁBČBĖBÕBŲBâBæBíBņBúBūBC CCC'C+C2C6C=CACJCNCWC[CdChCoCsC„CˆCC“CœC CŠC­CļCēCËCĪCØCÜCãCįCīCķCûC˙CD DDD D$D-D1D8DIBIKIOIXI\IeIiIrIvIIƒI”I˜IĄIĨIŽI˛IģIŋIČIĖIŨIáIčIėIûI˙IJ JJJ"J&J/J3JDJHJQJUJ^JbJkJoJxJ|J…J‰J’J–J§JĢJ´J¸JÁJÅJÎJŌJÛJßJđJôJûJ˙JKK#K'K0K4K;K?KPKTKcKgKxK|KK‘K K¤K­KąKēKžKĮKËKÔKØKéKíKöKúKLLLLL!L2L6L=LALPLTL]LaLjLnLwL{L„LˆL™LLĻLĒLŗLˇLĀLÄLÍLŅLâLæLíLņLMMMMM!M-M1M:M>MOMSM_McMlMpM|M€M‰MMĄMĨMŦM°MšMŊMÄMČMŅMÕMÜMāMņMõMüMN N NNN#N'N8NUGUKUZU^UoUsU|U€U‡U‹UœU U¯UŗUŧUĀUÉUÍUÖUÚUëUīUøUüUV VVV'V+V4V8VAVEVNVRVcVgVnVrV~V‚V‘V•VžVĸVŗVˇVĀVÄVÕVŲVāVäVķV÷VūVW WWWW"W&W/W3W:W>WFWJWYW]WdWhWqWuW~W‚W‘W•WžWĸWĢW¯WĀWÄWËWĪWŪWâWëWīWøWüW XXXX'X+XYOYSYZY^YmYqYzY~YY“YšYžYĢY¯YÄYČYĪYĶYÛYßYîYōYųYũY ZZZZ%Z)Z1Z5ZEZIZQZUZ]ZaZiZmZ}ZZˆZŒZ“Z—ZĻZĒZąZĩZŊZÁZĐZÔZÛZßZæZęZņZõZũZ[[[[[,[0[E[I[R[V[g[k[t[x[[…[–[š[Ą[Ĩ[­[ą[š[Ŋ[Å[É[Ņ[Õ[Ũ[á[ņ[õ[ \\\\(\,\;\?\F\oK\O\V\o[\_\f\os\w\~\‚\‹\\˜\œ\Ŗ\§\ļ\ē\Æ\Ę\Ų\Ũ\ä\oé\í\ô\oų\ũ\]o]]] ])]-]6]:]A]E]T]X]a]e]t]x]]_„]ˆ]]_”]˜]Ÿ]_Ŧ]°]ˇ]ģ]Ä]Č]Ņ]Õ]Ü]ā]ī]ķ]ü]^^^^Ũ^#^*^Ũ/^3^:^Ũ?^C^J^ŨO^S^Z^Ũg^k^r^v^^ƒ^Œ^^—^›^Ē^Ž^ŋ^Ã^Ę^_Ī^Ķ^Ú^_ß^ã^ę^_÷^û^_ ___'_+_2__7_;_B__G_K_R____c_o_s_|_€__“_œ_ _Š_­_ļ_ē_Ë_Ī_ā_ä_ë__đ_ô_û__`` `_``(`,`5`9`H`L`S`_X`\`c`_h`l`s`_€`„``‘` `¤`Ģ`Ũ°`´`ģ`ŨĀ`Ä`Ë`ŨØ`Ü`å`é`ō`ö`˙`aaa)a-a4ao9a=aDaoQaUaaaeanaraa…aŒao‘a•aœaoŠa­ašaŊaÆaĘaŲaŨaäa_éaíaôa_bbbbb"b1b5b>bBbSbWbhblb{bb†bo‹bb–bo›bŸbĻboŗbˇbžbÂbËbĪbØbÜbãbįböbúbc ccc$co)c-c4coAcEcLcPcYc]cfcjcyc}c†cŠc™cc¤cŨŠc­c´cŨšcŊcÄcŨÉcÍcÔcŨŲcŨcäcŨņcõcücd d ddd)d-d>dBdId_NdRdYd_^dbdid_vdzd†dŠd“d—dĻdĒdąd_ļdēdÁd_ÆdĘdŅd_Ūdâdîdōdûd˙deeee(e,e5e9eJeNe_eceje_oeseze_eƒeŠe_—e›e§eĢe´e¸eĮeËeŌeŨ×eÛeâeŨįeëeōeŨ˙ef ffff&f*f;f?fPfTf[f_`fdfkf_xf|fˆfŒf•f™f¨fŦfŗfo¸fŧfÃfoĐfÔfāfäfífņfgg gogggo(g,g8grkBrkKrkOrkVrkZrkkrkork~rk‚rk“rk—rk rk¤rkĢrk¯rkĀrkÄrkĶrk×rkærkęrkķrk÷rkūrksksksk&sk*sk;sk?skHskLskSskWskhsklsk{ss†sŠs’s–sĨsŠs°s´sÃsĮsÎsŌsŲsŨsėsđstt tttt+t/t6t:tBtFtUtYthtlt|tm€tmˆtmŒtm˜tmœtm¨tmŦtmĀtmÄtmĖtmĐtmØtmÜtmätmčtmøtmütm um umumum2um6umCumGum[um_umlumpum{umum”um˜um um¤umŦum°um¸umŧumĖumĐumßumãumōumöum˙umvm vmvmvm#vm2vm6vmGvmKvmTvmXvm_vmcvmtvmxvm‡vm‹vmšvmžvm§vmĢvm˛vmļvmĮvmËvmÚvmŪvmīvmķvmüvmwmwm wmwm wm/w3w:w>wFwJwYw]wdwhwowsw{ww†wŠwšwžwĨwŠw°w´wÃwĮwĪwĶwÛwßwįwëwķw÷w˙wx xxxx#x'x/x3x;x?xGxKxSxWxgxkxrxvx~x‚x‘x•xxĄx¨xŦx´x¸xÁxÅxĖxĐxßxãxķx÷xy yyyy!y0y4y|N|R|Y|]|d|h|o|s|‚|†||”|ž|ĸ|Ŧ|°|Â|Æ|Ī|Ķ|Ũ|á|ī|ķ|} }}}&}*}<}@}I}M}X}\}e}i}r}v}‰}}”}˜}§}Ģ}˛}ļ}ŋ}Ã}Ō}Ö}Ũ}á}ō}ö}~ ~~~-~1~C~G~Y~]~o~s~…~‰~~”~Ŗ~§~Ž~˛~š~Ŋ~Ä~Č~×~Û~ę~î~õ~ų~  $37@DSWiomouoyo…o‰o•o™o­oąošoŊoÅoÉoŅoÕoåoéoöoúo€o €o€o#€o0€o4€oH€oL€oY€o]€oh€ol€o€o…€o€o‘€o™€o€oĨ€oŠ€oš€oŊ€oĖ€oЀo߀oã€oė€ođ€o÷€oû€o ooo#o4o8oAoEoLoPoaoeotoxo‡o‹o”o˜oŸoŖo´o¸oĮoˁo܁oāoéoíoôoøo ‚o ‚o‚ ‚'‚m:‚>‚E‚gI‚M‚T‚X‚_‚gk‚o‚~‚‚‚‰‚Ũ–‚š‚Ą‚_Ž‚˛‚š‚Ŋ‚Ė‚ЂׂŨä‚č‚ī‚ķ‚ƒƒ ƒ_ƒƒ%ƒ)ƒ8ƒ<ƒEƒIƒSƒWƒaƒeƒoƒsƒ}ƒƒ“ƒ—ƒžƒĸƒǃރļƒēƒƒƃ΃ԃâƒæƒíƒņƒųƒũƒ„„„„„ „(„,„4„8„@„D„T„X„_„_d„h„o„_|„€„‡„_”„˜„Ÿ„Ŗ„Ģ„¯„ˇ„ģ„ÄĮ„΄̈́ۄ߄ī„ķ„ũ„…………#…0…4…A…E…R…V…k…o…v…z…‰……”…˜… …¤…´…¸…ŅɅօڅī…ķ…ú…ū…† ††††!†)†-†5†9†@†D†T†X†e†i†v†z††“†š†ž†φdž˛†ļ†Ɔʆ׆ۆč†ė†‡‡ ‡‡"‡&‡-‡1‡C‡G‡Y‡]‡d‡h‡‚‡†‡އ’‡š‡ž‡އ˛‡š‡Ŋ‡·͇å‡é‡đ‡ô‡ˆˆˆˆ&ˆ*ˆ:ˆ>ˆFˆJˆRˆVˆfˆjˆqˆuˆ}ˆˆˆˆŒˆœˆ ˆ¨ˆŦˆ´ˆ¸ˆȈˈՈ؈ęˆîˆõˆųˆ‰‰ ‰‰‰"‰)‰-‰6‰:‰I‰M‰T‰X‰g‰k‰‡‰‹‰š‰ž‰ē‰ž‰͉҉؉܉ã‰į‰ö‰ú‰ŠŠ ŠŠ!Š%Š-Š1Š@ŠDŠKŠOŠZŠ^ŠoŠsŠ{ŠŠŽŠ’Š™ŠŠ¨ŠŦŠŊŠÁŠȊŨ͊Ҋ؊ŨŨŠáŠčŠŨõŠųŠ‹‹ ‹‹‹‹%‹)‹9‹=‹D‹H‹O‹S‹[‹_‹g‹k‹{‹‹†‹_‹‹‹–‹_Ŗ‹§‹Ž‹_ģ‹ŋ‹ƋŨĶ‹׋ā‹ä‹í‹ņ‹ú‹ū‹Œ ŒŒ Œ)Œ-Œ4Œ8ŒAŒEŒNŒRŒ[Œ_ŒhŒlŒ}ŒŒˆŒŒŒ•Œ™ŒĸŒό­ŒąŒēŒžŒĮŒˌԌ֌įŒëŒôŒøŒ˙Œ &*37HLSW`dmqx|…‰šž§Ģ´¸Áō֍ڍáåôøŽŽŽŽŽŽ0Ž4Ž=ŽAŽJŽNŽWŽ[ŽlŽpŽyŽ}Ž†ŽŠŽ“Ž—Ž¨ŽŦ޺ގŽƎʎێߎđŽôŽũŽ !04=AHL]apqtq|q€q‡q‹q’q–qĨqŠqąqĩqŧqĀqĪqĶqڏqŪqįqëqōqöqq qqqq!q0q4q;q?qFqJqYq]qdqhqwq{qŒqq™qq¤q¨qšqŊqːqАqáqåqîqōqųqũq‘q‘q!‘q%‘q,‘q0‘q?‘qC‘qS‘qW‘q_‘qc‘qk‘qo‘q‘qƒ‘q‹‘q‘qŸ‘sŖ‘sĢ‘s¯‘sˇ‘sģ‘sÑsĮ‘sבsۑsä‘sč‘sņ‘sõ‘s’s ’s’s’s’s ’s/’s3’s<’s@’sI’sM’s^’sb’si’sm’st’sx’s‡’s‹’sœ’s ’sŠ’s­’s´’s¸’sɒs͒sܒsā’sņ’sõ’sū’s“s “s “s“s"“s1“s5“s<“s@“sI“sM“sV“sZ“sc“sg“sv“sz“sƒ“s‡“s“s”“s“sĄ“s˛“sļ“sĮ“s˓sԓsؓsߓsã“sô“sø“s”s ”s”s ”s)”s-”s4”s8”sI”sM”s\”s`”si”sm”s„”sˆ”s‘”s•”sœ”s ”sŠ”s­”sŔsɔsŲ”sŨ”så”sé”sņ”sõ”sũ”s•s•s•s•s"•s1•s5•s>•sB•sK•sO•s`•sd•sm•sq•sx•s|•s…•s‰•s™•s•sĻ•sĒ•sŗ•sˇ•sȕsĖ•sەsߕsč•sė•sõ•sų•s –s–s–s–s$–s(–s9–s=–sL–sP–sW–s[–sd–sh–sy–s}–s†–sŠ–s‘–s•–s–sĄ–sŠ–s­–sļ–sē–sÖsĮ–sؖsܖså–sé–sđ–sô–sũ–s—s —s—s—s#—s,—s0—s7—s;—sD—sH—sY—s]—sf—sj—sq—su—s†—sŠ—s“—s——s¨—sŦ—s´—s¸—sŋ—s×sŌ—s֗sߗsã—sô—sø—s˜s˜s˜s˜s$˜s(˜s1˜s5˜sF˜sJ˜sS˜sW˜sf˜sj˜ss˜sw˜sˆ˜sŒ˜s•˜s™˜s¨˜sŦ˜sĩ˜sš˜sʘsΘsטsۘsė˜sđ˜sų˜sũ˜s™s™s™s™s,™s0™s9™s=™sN™sR™s[™s_™sp™st™s{™s™sŽ™s’™s›™sŸ™s°™s´™sŊ™sÁ™sŌ™s֙sŨ™sá™sđ™sô™s˙™sšsšsšs%šs)šs1šs5šs=šsAšsIšsMšsUšsYšsišsmšsušsyšsšs…šsŒšsšs™šsšsϚsǚs˛šsļšsŊšsÁšsɚs͚s՚sؚsāšsäšsėšsđšsøšsüšs ›s›s›Ũ›s ›s'›Ũ,›s0›s7›Ũ<›s@›sG›ŨT›sX›s`›sd›sl›sp›sx›s|›sŒ›s›s˜›sœ›s¤›s¨›s¸›sŧ›sěsțsĪ›sĶ›sڛsŪ›sí›sņ›sø›Ũũ›sœsœŨ œsœsœŨœs!œs(œŨ5œs9œs@œŨEœsIœsPœŨUœsYœs`œŨeœsiœspœŨuœsyœs€œŨ…œs‰œsœŨœsĄœsМs­œsĩœsšœsɜs͜sŨœsáœsņœsõœss sss%s)s2s6s?sCsLsPsWs[sbsfsusys†sŠs‘s•sœs s§sĢs˛sļsŊsÁsНsԝs۝sߝsčsėsõsųsžsžs žsžsžsžs+žs/žs6žs:žsAžsEžsLžsPžsWžs[žsjžsnžsžsƒžsŒžsžs—žs›žsŦžs°žsŋžsÞsԞs؞sážsåžsėžsđžsŸsŸsŸsŸs Ÿs$Ÿs,Ÿs0Ÿs8Ÿs<ŸsLŸsPŸsXŸs\ŸsdŸshŸsxŸs|Ÿs„ŸsˆŸsŸs”ŸsœŸs Ÿs°Ÿs´ŸsģŸsŋŸsƟsƟs؟sŨŸsåŸséŸsųŸsũŸs s  s s s s! s1 s5 s< s@ sH sL s\ s` so ss sz s~ s s‘ s˜ sœ sĨ sŠ s° s´ sģ sŋ sĐ sÔ sŨ sá sę sî s÷ sû sĄsĄsĄsĄs&Ąs*Ąs3Ąs7ĄsHĄsLĄs[Ąs_ĄshĄslĄsuĄsyĄs‚Ąs†Ąs—Ąs›Ąs¤Ąs¨ĄsšĄsŊĄsÄĄsČĄsץsÛĄsäĄsčĄsņĄsõĄsūĄsĸsĸsĸs ĸs$ĸs-ĸs1ĸsBĸsFĸsMĸsQĸs`ĸsdĸssĸswĸs†ĸsŠĸsšĸsžĸsŽĸs˛ĸsēĸsžĸsÅĸsÉĸsŅĸsÕĸsŪĸsâĸsņĸsõĸsüĸsŖsŖs ŖsŖs!Ŗs0Ŗ4Ŗ;Ŗ?ŖGŖKŖSŖWŖ^ŖbŖjŖnŖ~Ŗ‚ŖŠŖŽŖ–ŖšŖĸŖĻŖļŖēŖÂŖÆŖÎŖŌŖâŖæŖíŖņŖųŖũŖ¤¤¤¤$¤(¤/¤3¤B¤F¤M¤Q¤Y¤]¤d¤h¤p¤t¤„¤ˆ¤¤“¤ĸ¤Ϥˇ¤ģ¤ĤȤΤͤä¤č¤÷¤û¤ĨĨĨĨ$Ĩ(Ĩ7Ĩ;ĨBĨFĨNĨRĨZĨ^ĨeĨiĨqĨuĨ…Ĩ‰Ĩ•Ĩ™ĨĨĨŠĨĩĨšĨÍĨŅĨŨĨáĨíĨņĨĻ ĻĻĻĻ Ļ'Ļ+Ļ3Ļ7ĻGĻKĻRĻVĻeĻiĻpĻtĻ|πχϋϓϗϧĻĢϞĻļĻÅĻÉĻÚĻŪĻįĻëĻōĻöϧ §§§'§+§2§6§G§K§Z§^§i§m§§tƒ§tЧõ§t“§tš§ßŨ ( 0 8@HPX`hpx€ ˆ"$˜& (¨*°,¸.Ā0Č2Đ4Ø6ā8č;đ=ø?ADFH J(L0N8P@RHTPVXX`Zh\paxc€hˆjl˜n t¨v°|¸~ĀˆČŠĐŒØŽāč’đ”øšŸĄ¤ §(Š0Ģ8­@¯HąPŗXĩ`šhģpŊxŋ€ÁˆÐŘĮ ɨ˰͸ĪĀŅČĶĐÕØ×āŲčÛđŨøßáã9į é(ë0í8ī@öHúPūX`hpx € ˆ ˜ ¨°¸Ā Č"Đ$Ø&ā(č*đ,ø.0246 9(>0Q8S@UH]P_Xa`chepgxi€kˆmo˜q s¨tccc c $(,8<@DHLX\`dhlx|€„ˆŒ˜œ ¤¨Ŧ¸ŧĀÄČĖØÜāäčėøü  $048<@DHLX\`dptx|€„”˜œ¨Ŧ°´ĀhÄhČhĖhĐhÔhāhähčhėhøhühhhjjjj(j,j0j4j8j<jHjLjPjTjXj\jhlllpltl€l„lˆlŒll”l l¤l¨lŦl°l´lĀnÄnČnĖnĐnÔnānänčnėnđnôn (,048<@DHLX\`dhlptx|ˆŒ” ¤¨Ŧ°´ĀÄČĖĐÔāäčėøü $(,8<@DPTX\`dptx|ˆŒ” ¤¨Ŧ¸ŧĀÄČĖØÜāäđôøü  $(,8<@DHLX\`dptx|€„”˜œ¨tŦt°t´tĀtÄtČtĖtØtÜtātätđôøü  $(,8<@DPTX\hlpt€„ˆŒ” ¤¨Ŧ¸ŧĀÄĐÔØÜāäčėøü(,048<HLPT`dhlx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔāäčėđôøü (,048<HLPT`dhlx|€„”˜œ ¤°´¸ŧČĖĐÔØÜčėđôøü     $ ( , 0 4 8 < H L P T X \ h l p t x | ˆ Œ  ”   ¤ ¨ Ŧ ¸ ŧ Ā Ä Đ Ô Ø Ü ā ä đ ô ø ü       ( , 0 4 @ D H L P T X \ h l p t x | € „  ” ˜ œ   ¤ ° ´ ¸ ŧ Ā Ä Đ Ô Ø Ü ā ä đ ô ø ü       ( , 0 4 @ D H L X \ ` d h l x | € „  ” ˜ œ ¨ Ŧ ° ´ ¸ ŧ Č Ė Đ Ô ā ä č ė ø ü       ( , 0 4 @ D H L X \ ` d p t x | ˆ Œ  ” ˜ œ ¨ Ŧ ° ´ Ā Ä Č Ė Ø Ü ā ä đ ô ø ü       ( , 0 4 @ D H L X \ ` d p t x | ˆ Œ  ” ˜ œ ¨ Ŧ ° ´ ¸ ŧ Č Ė Đ Ô ā ä č ė ø ü (,04@DHLX\`dptx|ˆŒ” ¤¨Ŧ¸ŧĀÄĐÔØÜčėđô  $048<@DHLPT`dhlx|€„”˜œ ¤¨Ŧ¸ŧĀÄČĖØÜāäčėøü  $(,8<@DHLPT`dhlx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔØÜčėđô  $(,04@DHLX\`dptx|ˆŒ” ¤¨Ŧ¸ŧĀÄĐÔØÜčėđô  $(,8<@DHLX\`dhlx|€„ˆŒ˜œ ¤¨Ŧ¸|ŧ|Ā|Ä|Đ|Ô|Ø|Ü|ā|ä|đ|ô|ø|ü|| ||| |$|(|,|8|<|@|D|P|T|X|\|h|l|p|t|€~„~ˆ~Œ~˜~œ~ ~¤~¨~Ŧ~¸~ŧ~Ā~Ä~Đ~Ô~Ø~Ü~č~ė~đ~ô~  $048<HLPT`dhlx|€„ˆŒ” ¤¨Ŧ°´¸ŧČĖĐÔØÜāäčėøü (,04@DHLX\`dhlx|€„”˜œ ¤°´¸ŧĀÄČĖØÜāäčėøü  $048<HLPTX\`dptx|ˆŒ” ¤¨Ŧ¸ŧĀÄČĖØÜāäđôøü(,04@DHLX\`dptx|ˆŒ”˜œ¨Ŧ°´ĀÄČĖØÜāäđôøü  $(,048<@DHLX\`dhlx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔāäčėøü  $(,8<@DPTX\hlptx|ˆŒ” ¤¨Ŧ¸ŧĀÄČĖĐÔāäčėøü(,048<HLPTX\hlpt€„ˆŒ” ¤¨Ŧ°´ĀÄČĖĐÔāäčėøü(,04@DHLPTX\hlpt€„ˆŒ˜œ ¤¨Ŧ¸ŧĀÄČĖØÜāäđôøü (,048<HLPT`dhlx|€„ˆŒ˜œ ¤°´¸ŧČĖĐÔØÜčėđô  $048<@DPTX\`dptx|ˆŒ” ¤¨Ŧ°´¸ŧČĖĐÔØÜāäđôøü  $(,8<@DHLX\`dptx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔØÜčėđô  $(,8<@DHLX\`dptx|ˆŒ”˜œ¨Ŧ°´¸ŧČĖĐÔāäčėøü      ( , 0 4 8 < H L P T ` d h l x | € „  ” ˜ œ ¨ Ŧ ° ´ ¸ ŧ Č Ė Đ Ô Ø Ü č ė đ ô ø ü ! !!! !$!(!,!8!>>>>>(>,>0>4>@>D>H>L>X>\>`>d>p>t>x>|>ˆ>Œ>>”> >¤>¨>Ŧ>¸>ŧ>Ā>Ä>Đ>ĄÔ>ĄØ>ĄÜ>Ąā>Ąä>Ąđ>Ąô>Ąø>Ąü>Ą?Ą ?Ą?Ą?Ą?Ą?Ą ?Ą$?Ą(?Ą,?Ą0?Ą4?Ą@?ĄD?ĄH?ĄL?ĄP?ĄT?Ą`?Ąd?Ąh?Ąl?Ąp?Ąt?Ą€?Ą„?Ąˆ?ĄŒ?Ą˜?Ąœ?Ą ?Ą¤?Ą¨?ĄŦ?Ą¸?Ąŧ?ĄĀ?ĄÄ?ĄĐ?ĄÔ?ĄØ?ĄÜ?Ąč?Ąė?Ąđ?Ąô?Ą@Ą@Ą@Ą @Ą@Ą@Ą @Ą$@Ą(@Ą,@Ą0@Ą4@Ą@@ĄD@ĄH@ĄL@ĄP@ĄT@Ą`@Ąd@Ąh@Ąl@Ąx@Ą|@Ą€@Ą„@Ąˆ@ĄŒ@Ą˜@Ąœ@Ą @Ą¤@Ą°@Ą´@Ą¸@Ąŧ@ĄČ@¤Ė@¤Đ@¤Ô@¤ā@¤ä@¤č@¤ė@¤đ@¤ô@¤ø@¤ü@¤A¤A¤A¤ A¤A¤A¤ A¤$A¤(A¤,A¤8A¤>> >>> >$>(>,>8><>@>D>H>L>P>T>`>d>h>l>p>t>€>„>ˆ>Œ>>”> >¤>¨>Ŧ>¸>ŧ>Ā>Ä>Č>Ė>Ø>Ü>ā>ä>đ>ô>ø>ü>? ????? ?$?0?4?8?K> K>$K>(K>,K>8K>@K>DK>PK>TK>XK>\K>hK>lK>pK>tK>€K>„K>ˆK>ŒK>˜K>œK> K>¤K>°KQ´KQ¸KQŧKQČKQĖKQĐKQÔKQāKQäKQčKQėKQøKQüKQLQLQLQLQLQLQ(LQ,LQ0LQ4LQ@LSDLSHLSLLSPLSTLS`LdLhLlLpLtL€L„LˆLŒL˜LœL L¤L°L´L¸LŧLČLĖLĐLÔLØLÜLčLėLđLôLøLüLMMM MMM M$M0M4M8MŦž>°žQ´žQ¸žSŧžSĀžUÄžUČž]Ėž]Đž_Ôž_ØžaÜžaāžcäžcčžeėžeđžgôžgøžiüžiŋkŋkŋm ŋmŋoŋoŋqŋq ŋs$ŋs(ŋt,ŋtEXj ‡ Ą´ĮÚėū # 5 G  Y "k $} & (Ą *ŗ ,Å .× 0é 2û 4 6 81 pĪ;‚Ī=”Ī?ĻĪA¸ĪDĘĪFÜĪHîĪJĐLĐN&ĐP9ĐRLĐT_ĐVrĐX…ĐZ˜Đ\ĢĐažĐcŅĐhķĐj<Ņl„ŅnÁŅt˙ŅvTŌ|œŌ~ŲŌˆĶŠ'ĶŒPĶŽĨ͐äĶ’Ô”`ÔšŦ՝>ן\ץqؤ|Ų§ÚŠ'ÚĢúÚ­ŽÛ¯aÜąßÜŗĄŨĩæŨš‡ŪģÂŪŊûŪŋ3ßÁeāÞāÅNáĮŽáÉâËnâÍÛâĪ)ãŅ`ãĶéãÕâä׉åŲæېįŨ&čßJéáŒęã ė9ŠėįÜėéîëSīíđīĮņö\öúÍúū\û´ũŨũ™ūQ˙   É ęŒŸÁã Û"V$&Q(‰*@,s.ķ07 2 4, 6 9‹ >‘ Q–SU<]_Äaˆc¯e‚g›iAkémo7qŽsūtš ō 4H h ˆœ´Ėāô0D X"l$€&”(¨*ŧ,Đ.ä0ø2 4 648H\pŒ¨Äāô;=?0ADXxDŒF H´JČLÜNP$RHTlVX´ZØ\ī%]T€´aØc<tŦäTŒÄü4l¨ä$  Ô h jd l° nø  ]< ´  tL vU ]„  ]ŧ ô ũ ], t Č Ü ,@\”Ė<tŦäPŒ•]ÄØė(dČŅ] @|ŧā\Ŧđ4xŧĐ]LU]„°ä,l€”€‰]Čô dčLU]„]ŧ@l¸  4Hl´Øü DhŒ°ÔčüDŒ°H\€”|Ø~0DX„äø„ ¸ Ė !!T!¤!$"-"]l"¤"đ"$#8#L#`#t#°#đ#$,$D$l$”$Ā$đ$%%,%x%& &]L&U&]&™&]Ô&Ũ&]'%']`'i']˜'Ą']Ü'đ'((`(˜(ô(())™)]Č)ü)0*€*”*,+,(,h,ˆ ,Š,]Ø,á,]--]H-Q-]„--]Ā-Šø-ŒH.ŽQ.]Œ.•.]Ä.’Í.]ü.”/]4/=/]l/u/]¤/­/]Ü/40=0]t0}0]´0Ŋ0]ė0@1ŧ1 2p2„2š2]ŧ283ˆ3ė34 4]84A4]p4Ÿy4]¨4ą4]ė4õ4]05Ą95]h55¤™5]Č5đ5§ų5]86`6Š 6ĢŠ6]Ø6­á6]7¯7]H7ąQ7]€7‰7]Č7ŗŅ7]8ĩ 8]88A8]|8…8]ŧ8Å8]9 9]L9U9]ˆ9‘9]Đ9Ų9]:!:]P:šY:]ˆ:ģ‘:]Ā:ŊÉ:];ŋ ;]H;ÁQ;]€;Ŧ;<Ã<]L<U<]”<ŝ<]Ė<ĮÕ<]=É=]H=Q=]€=Ŧ=Ø=Ëá=]>Í%>]T>]>]Œ>Ī•>]Đ>ŅŲ>]?Ķ?]@?I?]„?Ս?]Ė?×Õ?]@Ų@]H@ÛQ@]@Ũ™@]Č@Ņ@]AA]XAˆA‘A]ĐAŲA]B!B]`BßiB]¨BáąB]đBãųB]8CAC]€C‰C]¸CÁC]D D]8DAD]xD9D]ŧDÅD]ôDįũD],Eé5E]tEë}E]ŧEÅE]ôEũE],F5F]dFímF]ŦFĩF]äFíF]Gī%G]dGmG]ÔGŨG]H%H]dHmH]¨HąH]āHéH](I1I]lIŧIüIJ]DJMJ]|J…J]´JŊJ]ėJõJ]4K=K]|K…K]ÄKÍK]üKL]DLöML]ŒLĐLŲL]M!M]`MiM]¨MąM]āM N8NAN]pNœNČNúŅN]OLOUO]„O°OÜOåO]P@PlPūuP]¤P­P]āP0Q9Q]hQqQ] QŠQ]čQņQ],RXRØRXS¤S $TXT€TĐT U)U]hU čUV \VeV]¤VĐVŲV]W@WIW]xWW]°WšW]ôWũW]‘e]ÄeėeQõe](fPfSYf]ˆf‘f]ĖfÕf]gxgœgĀghD i LF yûG  H Ã%—L ā .ŠT į /ŠX î 0Š\ õ 1Š` ü 2%d "4eh 6l¨@¸ S0 ‡ Vn yX0 Ģ \‡äTeå]O ą—ĸ´ ^C{ (­ ąš:  īĄīĸõ´Ļež¸ ą ĸˇ ą!ĸ''ąstd"  @[  ‹O  f  Ž|  ˜  ž  ‘Ų  ’˙  “  ”6  •R  –h  —t  ˜š  ™ŋ  šā  ›  œ&  ž<   ]  Ąy  ĸ”  ¤´  §Ô  Ēų  Ŧ Ž4 °O ąo ˛‰ ŗŖ ´Ŋ ĩ× ļņ ˇą ¸Į šæ ē ģ$ ŧO Ŋj ŋ‹ ÁĻ ÂÆ Ãæ Ä Å% Æ; Į[ Č{ ɛ Ęģ ËŌ Ėé Í Î& ĪD Đc Ã Ū ū 0>  é´ ëąE ėeŲ ōÔ(17øeq ö] ' J77lt ú+' g77y }e‹==´S Ķ´Ĩ=t Ā=É=´7Č  CíC=´“ XCC=´Ų ° C5C´øp øOIË Īn7) $N' IIeof (Š q ,ķIÁ ŧ0 5O 6| 7–0 Ŋež3n[—bŸ … ¯ĀL€‡€ €U€ŗ€P € ķ€Ā€€d°\ Ę „ĩ€€Z g§jö v €€S Ô˜ ļZVf€€ôĩûĨIC€€ö [ ŧZ ōÕ û ' !ŧ;A"ō# N"ō"e$1 ˙ß%ütZ&dect%at&hex t%t%t &octt@%Įt€' t' "t'û &t'Ø)t'G,t'•/t 'Ē3t@%ˇ6t°%Æ9tJ'Í<t(5J§%r NŠ o %'QŠ %VŠ %qYŠ (á in&applÔ š &ateoÔ %tÔ &inwÔ &outzÔ %}Ô  (;‰Ô&begŒ9  &cur9 &end’9 RSøTO \e3hMiby¨ )Å ą*Ā ėtr1*ü +´¤,F˜-Ö .Ŗģ /ĸÄ 0Žø1=ú. 2_Tpŗ ĒˆŒ 3æ>x ü 4˙J' ÷eę Í 5ca0j—6˙ „O | e6 éO ’ ’ 86U ¸ ¸ ¸ e’ 3 6í÷O Ų 3 ’ 62  eô ô ’ ú 3 64Ke ’ e6žRe6 ’ ô 76¤{eR ’ ô 76,ęO h ’ 8} đO 6 %” !%” [ 6' m%ŋ ¸ !%” 6M ieÕ Õ Û [ 6›˜% ¸  %” !6āøO & 3 ’ 6ëūO < 3 6\e] ¸ %ô 76(…ey ô ô 76) O ” O ’ 6ƒde´ ’ ô ĸ6ąeÔ ’ ô ĸ6Iqeų ¸ %ô ĸ6”Ŋeô ô ĸ6 le4ô ĸ6šeOô ĸ6r%oĢ3 ” 9›¸ ‰¸ ô 9ŖeŖô ô 9ę ĀeŊô ô 9Ŋ“¸ ׸ ô 9ü%ņô ô 6"W%¸ %ô !:tm,…ąė‡eˆˆew‰e#Še Đ‹eE ŒeŦeÂŽe2e Ę’$Ĩ“!(6î%Įô 9Ų ž¸ æ¸ ô %9šĻeô ô %9P–¸ $¸ ô %6Ė ž%IĢI%” ô 6ä%jô ô 6yÂA …ô …¸ 6ŨÉ: Ļô …6—¸ Ƹ ô …6žÔæô …e6ŦŲEô …e9iÄ%%¸ ô %6ēŠe;O 6]Ee[ô ô %6 I¸ {¸ ô %6ĩN¸ ›¸ ô %6­R¸ ģ¸ 3 %6ÕYeŌô 76‚eéô 7;üāüô ô 3 €€ô &ô ô ;h ęh ô Dô 3 @@ô cô ô U <U ô ‡ô 3 %< ōà øÃ Ū ūˇ$,´-ÔÅ 71 :. 1s;. 1 ?" 1ã@. )L e7B1 :í1s;í1 ?" 1ã@. )L Eė7„1 :'1s;'1 ?" 1ã@. )L ą0071 :w1s;w1 ?" 1ã@. )L S6˛ËH Ūô …6ãlūô …e6õ ęsô …e<˜71=8å>ø>((ø>O85|"9Ģ5:Ģû@ĢÖ FĢ õGĢTHĢĨIĢĀJĢ+KĢ ĻLĢ$$Mą(ū Ną).Pą*ÁRą+$Tą,qVą-Š]ą.$ ^ą/baą0zcą1:eą2˛ gą3Ŗną4ioą59É|Ģ–e!?ĄOũzŅ ^eä_0¯`eŌ fe Ėo0Bô 9}č h~™ í ąŠĸÍ€Ü ąÄĸCĪŠÄ1 eæDĢE` 4E´ēZ9< ¯e3O ø9<ŨO MO 9AÚb!9]Ģøw!SEū^EėF 8Gĸ XŠGP_' Gx`§HĘ;¤āæ"^HÍB û"^IfM×"d”Fž ŠJ=5" KK$āt ąbāt d˜x7) ā2Toā5čqlLæ 5Ē˙˙˙˙˙˙˙ŠM…2ĖäM/3ÖŨM 4āã 3€Pc”<  nNS }2˜:O¨dÄBPRunl‡ e3"BN “. dQˇ3Ã‚į”† Rabi!Ļj%e ą˜ĸ>ˆS´īeT9 ĖU–&eU&eVū"eYœ:W"e‘WČ "į‘Xž9%'YA YJY0HY9FZ`8œy[Ģp"&\ĩ]Ā˙˙^|Y’__¨õ_ Šõ_ĄĒõ`Ŗ Ša:da÷2b–˙˙˙˙˙˙˙ ąĖĸŧc¯´cž™cÍd cÉ eĘ…eÕ‚ e-CeY$eŒxe—ëeæ e+.fŒĨe_!ggeĪŠŠ% U: ; I$ > $ >   I : ;  : ; I8 : ;I8  : ; n  : ;  : ; I I!I/  I: ; &I9: ; : ; : ;9: ; .?: ; n<I.?: ; nI<.?: ;nI<.?: ;nI<.?: ;nI< : ; ( < : ;2  : ;I?<!.?: ;2 <d"I4#.?: ;2 <d$: ; I2 % : ;I?2 < & : ;I?2 < ' : ;I?2 <(: ;I2 )/I*/I+ : ; , : ;-9.4: ;I</:: ;0 : ; 1 : ; I?<2/I34: ; nI?<44: ; I<5: ;I6.?: ;I<78.?: ;I<9.?: ; I<: : ; ;.?: ; nI<<9: ; =:: ; > I?.?: ; I<@ : ; nA : ; B I8 CD&E9: ;F : ;G : ;I8 2 H.?: ;n2 <dI.?: ;n2 <dJ : ;I?2 <K.?: ;nI<L4: ;I<M4: ; I<N4: ; I< O.?: ;nI2 <P.?: ;nI2 <dQ.?: ;n<R: ;S.?: ;I T.4 U: ; IV.?: ; I@—BW: ; IX1X Y Y‰‚1Z.4@—B[1X Y \1 ]1^‰‚_4: ; I?<`4I?4<a4G b4Gc4Gd4Ge4Gnf.?nI4<g.?I4<$Y`8Y`˜Sû src./include/gtest/usr/include/c++/4.9.2/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/include/bits/usr/include/usr/include/c++/4.9.2/bits/usr/include/c++/4.9.2/i686-redhat-linux/bits/usr/include/c++/4.9.2/tr1/usr/include/c++/4.9.2/debug/usr/include/c++/4.9.2/ext./include/gtest/internalgtest_main.ccgtest.hiostreamstddef.htypes.hlibio.hstdio.hwchar.hstdarg.hcwcharchar_traits.hc++config.hclocaleios_base.hcwctypetuple iosfwdtime.hdebug.h predefined_ops.hnew_allocator.h numeric_traits.h locale.hpthreadtypes.hatomic_word.hwctype.hgtest-port.h gtest-internal.h gtest-death-test-internal.h gtest-linked_ptr.h gtest-printers.hcxxabi.h!ō=ģːļn<.$ō\"long int__debug_GLOBAL__sub_I_gtest_main.cc_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E5valueEwcsxfrmgoodbit_shortbufvfwprintf_IO_lock_tUnitTeststderrGetInstanceRUN_ALL_TESTStm_ydayLock_ZNSt11char_traitsIcE11to_int_typeERKc_S_atepthread_tchar_type_S_uppercasevfwscanfeofbitp_cs_precedestowctrans_Swallow_assignunsigned int_ZN7testing8internal18g_linked_ptr_mutexE__gnu_cxx_S_fixed_S_floatfieldtuple_size >_flags__int32_t_cur_columnwchar_t_S_refcounttestingvwscanf_old_offset_markerstm_mday_ZNSt11char_traitsIcE2ltERKcS2_MakeFrommon_decimal_point_S_ios_iostate_end_IO_buf_end_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE__opswcscpy_ZN7testing8UnitTest11GetInstanceEvBiggestInt_ZNSt11char_traitsIcE7not_eofERKiwcscatlconvdecimal_point__numeric_traits_integer__pthread_slist_tAssertHeldn_sep_by_spaceg_linked_ptr_mutexcopy__gnu_debugfwscanftm_wday_poswcsncmpp_sep_by_spacetm_mon_IO_save_end__count__numeric_traits_integerinternal2floatignore__elisiongetwclong long unsigned int_S_endhas_owner__S_dec_S_hexint_n_sign_posn_IO_read_base_S_scientificunitbuflocaleconv__FILE__owneradjustfield_offsetto_int_type_ZNK7testing8internal9MutexBase10AssertHeldEvwcrtomb_ZN7testing8internal9MutexBase6UnlockEviostatevalue_S_ios_seekdir_end_S_failbitfixed__cxa_atexitHelper__gnuc_va_listp_sign_posn__initialize_pputsuppercasetuple<>Initsize_tmovefloatfieldshowposputwccerrputwchar_Ios_Seekdir__priority__lockargcstdin_nextint_frac_digitsfwideint_n_cs_precedes_S_right_S_showpointint_p_cs_precedesfindbasic_ostream >negative_sign__elision_data_ZN7testing14InitGoogleTestEPiPPc__valuefputwc__nextgroupingwscanf_S_showbase_S_inchar_modeswscanfptrdiff_t_IO_markerint_type_IO_write_basewctype_S_adjustfield__max__wch_S_boolalpha__builtin_putsmbsrtowcs_S_begwcstoulwctrans_tfwprintfrightpthread_mutex_twcstofwcsspn_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE_S_ios_openmode_end_Atomic_word__listlong long intlength_S_eofbit_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperEz_IO_save_base_S_oct_S_badbitmon_groupingUnlock_ZNSt11char_traitsIcE6assignERcRKcboolboolalphashowbasefgetwc_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperES3_fgetws_S_basefield__quad_tbadbitcomparestdout_IO_backup_base_S_goodbit__dso_handle_ZNSt11char_traitsIcE6assignEPcjc__kindassign__pad1__pad2__pad3__pad4__pad5kInternalRunDeathTestFlag__is_signedungetwcfmtflagssrc/gtest_main.cc_Value_Ios_Iostatewctype_t_vtable_offset_ZSt4cerr_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE__mbstate_t_Traitsargvlong doublewcsncatopenmodewcscoll__espins_S_synced_with_stdio_ZNSt11char_traitsIcE4moveEPcPKcjfputws__static_initialization_and_destruction_0GNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2 -fPIC/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0ios_basebtowcvwprintfFromkMaxStackTraceDepthmbrtowc_IO_read_endiswctypetm_yearmbsinitwmemchr_ZNSt11char_traitsIcE2eqERKcS2_short int_ZN7testing8UnitTest3RunEvmutex__ZNSt11char_traitsIcE3eofEv_CharTwcsrtombsint_curr_symbolkMaxBiggestIntwcstoullfrac_digitsmbrlenwmemcpyscientificn_sign_posn11__mbstate_tchar_traits_S_skipws_Ios_Openmodewcsrchrto_char_typegetwchar__cxxabiv1_IO_write_end_S_internal__wchbint_n_sep_by_space__numeric_traits_integerinternal_run_death_testshowpointbinary_S_binleftmbstate_twcsftimepositive_sign__datawcsstrskipws_ZNSt11char_traitsIcE11eq_int_typeERKiS2_owner__lock_S_left_ZNSt11char_traitsIcE12to_char_typeERKiwmemmove_Ios_Fmtflags__nuserswprintfdeath_test_use_forksizetypelong unsigned int~Init_S_trunc_IO_FILE_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E8MakeFromEvwint_t_S_appnot_eofwcstodwcspbrktm_minfailbitwcstokwcstoltm_zonewmemset_S_ios_fmtflags_endsetlocale_ZNSt11char_traitsIcE6lengthEPKcunsigned char_sbufMutexBaseinternal_IO_write_ptreq_int_typethousands_sep_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minEostreamwcstoldwctob_ZNSt11char_traitsIcE4findEPKcjRS1_death_test_stylecurrency_symbolwcstoll__minswprintf_fileno_ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE15pthread_mutex_t__size__off_ttm_hourtrunckDeathTestStyleFlagsigned charmon_thousands_sepInitGoogleTestbasefieldshort unsigned int__digitstm_sec_S_unitbufmainwcscspn__builtin_va_list_S_curn_cs_precedestm_isdstseekdir_IO_read_ptrwcsncpy_ZNSt11char_traitsIcE4copyEPcPKcjint_p_sep_by_spacedoublevswscanfwcscmp_ZN7testing8internal9MutexBase4LockEvtm_gmtoff__pthread_internal_slist__align_chainwcschr__numeric_traits_integerkDeathTestUseForkwctransvswprintfkProtobufOneLinerMaxLength_flags2_S_out_ZNSt11char_traitsIcE7compareEPKcS2_jint_p_sign_posn_S_showposImplicitlyConvertiblewcslen__off64_t__ioinit_unused2_IO_buf_base_ZNSt3tr110tuple_sizeINS_5tupleIIEEEE5valueE__pthread_mutex_swmemcmpGCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ@YD GuFupu|uxut@Á AÃAÆAĮAÅC 4``8A†A ƒNG NAAF H AÃAƘ.symtab.strtab.shstrtab.text.data.bss.rodata.str1.4.text.unlikely.rel.text.startup.rel.init_array.text.__x86.get_pc_thunk.bx.rel.debug_info.debug_abbrev.rel.debug_aranges.rel.debug_ranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame.group 4<!<'<,2<";^N`˜J āCp`ø\ PD lüŒyˆ XD  ˜yļĒ/"(Ļ XQŊW"š pQ Īo"WË QÛ0Æ%eæ0+:-īX:X:¨˙ ˜Q;œ@  ŧB!ņ˙`8,   ;@YE [qv˜ŧ×īügtest_main.cc_GLOBAL__sub_I_gtest_main.cc_ZStL8__ioinit.LC0main__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE_puts_ZN7testing14InitGoogleTestEPiPPc_ZN7testing8UnitTest11GetInstanceEv_ZN7testing8UnitTest3RunEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit & ,5=Fci r x~ ‰ Ž! !&3:AHOV[ov{†“˜Ĩ´šÅŅŨéõ '4AN[hu‚œŠļÃĐŨę÷+9GXco{˜Ŗ¯¸ŋË×ãæíų3PhoŒ“Ļ­ĘŅîõ6=U\ov•žĨĩÕāėōøū %,3:AIQX_fo{‡“™Ÿ¨´ēĀÆĖÕáįíķü+B[gˆ¤˛ÎÜëú  ' 6 E S a p }  ž Ŧ ē č    – Ÿ ´ ŧ Ę ß į ũ    * 6 = D K P \ g } ™ ŋ Ú   7 S i u › Ā á  ' = ^ z • ĩ Õ ú 5PpФžØō-9EQ]iu™Ĩ˛Čį%PkŒ§Įį&<\|œŧĶęđ'-ELdkˆĒŋËÖáė÷ #.9COZep{…˜ŖŽšÄß˙P\ht€Œ˜¤°ŧČÔāėø(4@LXdp}—¨ŗŋŌāé)5AMYexƒŽĒÖų4Nc}‰•ĸ°žĖĶįî ,9@IPcjy‹—°ēŋÉÎØŨãíø&;GNkŸŦļÁÍ׿ô(1;?Rjoz…›ņ˙#,5>IM`  , dœ dlt-daemon-2.18.6/gtest-1.7.0/src/gtest-all.cc000066400000000000000000000041611377520261000204220ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: mheule@google.com (Markus Heule) // // Google C++ Testing Framework (Google Test) // // Sometimes it's desirable to build Google Test by compiling a single file. // This file serves this purpose. // This line ensures that gtest.h can be compiled on its own, even // when it's fused. #include "gtest/gtest.h" // The following lines pull in the real gtest *.cc files. #include "src/gtest.cc" #include "src/gtest-death-test.cc" #include "src/gtest-filepath.cc" #include "src/gtest-port.cc" #include "src/gtest-printers.cc" #include "src/gtest-test-part.cc" #include "src/gtest-typed-test.cc" dlt-daemon-2.18.6/gtest-1.7.0/src/gtest-all.lo000066400000000000000000000004611377520261000204460ustar00rootroot00000000000000# src/gtest-all.lo - a libtool object file # Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 # # Please DO NOT delete this file! # It is necessary for linking the library. # Name of the PIC object. pic_object='.libs/gtest-all.o' # Name of the non-PIC object non_pic_object='gtest-all.o' dlt-daemon-2.18.6/gtest-1.7.0/src/gtest-all.o000066400000000000000000120476641377520261000203150ustar00rootroot00000000000000ELFČu4(ÛÜŨŪ&'ßāáâãäåæįčéę)*ëėíîīđņōķôõö÷øųúûüũū˙     89#$,-56 /0!"23>?ABDEGHJKMNPQTUWXZ[]^`ahicdklnoqrtuwxz{}~€ƒ„†‡‰ŠŒ’“•–˜™›œžŸĄĸ¤Ĩ§¨ĒĢ­Ž°ąŗ´ļˇšēŧŊŋĀÂÃÅÆČÉËĖÎĪŅŌÔÕרÚÛŨŪāáãäæįéęėíīđōķõöøúûũ˙    !#$&')*,-/0235689;<>?ABDEGHJKMNPQSTVWYZ\]_`bcefhiklnoqrtuwxz{‚„…‡ˆŠ‹Ž‘“”•—˜š›Ÿ ĸŖ¤Ļ§ŠĢŦ­¯°˛ŗĩļ¸ēģŊžĀÁÂÄÅĮČĘËÍÎĐŅĶÔÖØŲÛÜŪāâäæčęėîđōôöøúüūķÍ´&ŧ'ķÍ´&ŧ'S‹D$‹P ‹X1Ā9Út´&‹ €yt€yƒØ˙ƒÂ9Ķuę[ÃS‹D$‹P ‹X1Ā9Út´&‹ €yƒØ˙ƒÂ9Ķuđ[ÍļS‹D$‹P ‹X1Ā9Út´&‹ €yƒØ˙ƒÂ9Ķuđ[ÍļS‹D$‹P ‹X1Ā9Út´&‹ €yƒØ˙ƒÂ9Ķuđ[Íļ‹T$‹B+B ÁøÃfķÍ´&ŧ'‹T$‹D$ƒ:uÆ@‹@‹‰T$‰D$‹A˙āļŋU‰åWVSƒė ‹}‹w ‹_Į9Ūt t&‹…Āt ‹ƒė P˙RƒÄƒÃ9Ūuį‹w…öt‰ueô[^_]éü˙˙˙eô[^_]ËW‰Ã…Ōt ƒė Rčü˙˙˙ƒÄƒė Sčü˙˙˙vŧ'Sƒė‹\$Sčü˙˙˙‰\$ ƒÄ[éü˙˙˙t&Sƒė‹\$$D$PhSčü˙˙˙ƒÄ(‰Ø[´&ŧ'WVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R ‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹|$‹t$€t9‹W‹G )ĐÁø…Āt*1ۍļ‹šƒėƒÃ‹VP˙R,‹W‹G ƒÄ)ĐÁø9ÃrŪ[^_ÃfWVS‹t$‹|$€~t:‹F‹^ )ÃÁûƒëx*Áãë vŧ'‹F‹ƒėƒë‹WP˙RƒÄƒûüuå[^_ÐWVS‹t$‹|$€~t:‹F‹^ )ÃÁûƒëx*Áãë vŧ'‹F‹ƒėƒë‹WP˙R0ƒÄƒûüuå[^_ÐWVS‹t$‹|$€~t:‹F‹^ )ÃÁûƒëx*Áãë vŧ'‹F‹ƒėƒë‹WP˙R$ƒÄƒûüuå[^_ÐWVS‹t$‹|$€~t:‹F‹^ )ÃÁûƒëx*Áãë vŧ'‹F‹ƒėƒë‹WP˙R(ƒÄƒûüuå[^_ÐWVS‹t$‹|$€~t:‹F‹^ )ÃÁûƒëx*Áãë vŧ'‹F‹ƒėƒë‹WP˙R8ƒÄƒûüuå[^_ÐUWVSƒė ‹l$ ‹\$$‹t$(€}t:‹U‹E )ĐÁø…Āt+1˙ļ‹ēƒėƒĮ‹VSP˙R ‹U‹E ƒÄ)ĐÁø9ĮrŨƒÄ [^_]Ѝt&UWVSƒė ‹t$ ‹|$$‹l$(€~t3‹F‹^ )ÃÁûƒëx#Áãëf‹F‹ƒėƒë‹UWP˙R4ƒÄƒûüuäƒÄ [^_]ÍļŋVS‰Æƒė‹Xl;Xpt‹ƒė ƒÃ‹ R˙QƒÄ;^puęÆFxƒÄ[^ÃUWVS‰Ãƒė‹‹K)ÁÁų…ÉtR‰ß‰Ķ‰Öƒã1í‰\$ 1ې´&‹T$ ‹ ¨‰đ…Ōt‹‹D0˙ƒė ƒÅQ˙ЋO˃Ä)ÁÁų9Ír҃ĉØ[^_]Ã1ÛëōvVS‰Ãƒė…ĀtXž1ö„Ōu-ëMvŧ'ƒė ƒÃƒÆRčü˙˙˙žƒÄ„Ōt*ūų/€ú uÚƒė ƒÃƒÆhčü˙˙˙žƒÄ„ŌuփÄ[^Í´&ƒė hčü˙˙˙ƒÄƒÄ[^Ívŧ'Sšƒė…Étš˙˙˙˙đÁH…É~ƒÄ[ËHY˙…ɉXîƒėRPčü˙˙˙ƒÄƒÄ[ÐU‰åWVS‰×1öƒė,‰EÔĮ vŧ'ƒėVj Wčü˙˙˙ƒÄ ‰Ãj h˙uÔčü˙˙˙ƒÄƒû˙tX‹ƒÃ‰Ú)ō‹@ô9Ƈ“EäRVWPčü˙˙˙XEäZP˙uÔčü˙˙˙‹EäƒÄƒč =u ‰Ū떍ļUā‰Ūč&˙˙˙넍t&‹‹@ô9Æwy]āj˙VWSčü˙˙˙Y^S˙uÔčü˙˙˙‹EāƒÄƒč =u ‹Eԍeô[^_]ÍUäčÜū˙˙‹Eԍeô[^_]ÃPVhhčü˙˙˙‰Ã‹Eԋƒč =tUßč§ū˙˙ƒė Sčü˙˙˙PVhhčü˙˙˙‰Ã‹Eāƒč =tĀUäčvū˙˙ëļ‰Ã‹Eäƒč =t§Uāč]ū˙˙띍t&ŧ'UWĐVS1í‰×ƒė,…ɉL$‹t$@\$ĮD$ÆD$‰D$ „†ļ‹D$ ļ(ƒÅPh+jSčü˙˙˙‰$čü˙˙˙ƒÄ PSVčü˙˙˙ƒÄ;l$tK…íD=tèuÆD$ ƒėjD$!PVčü˙˙˙ƒÄëĨt&ÆD$-ƒėjD$"PVčü˙˙˙ƒÄ농ļƒÄ,[^_]ÃVS‰Æ‰Ķƒė…Ōt+ƒė Rčü˙˙˙ƒÄ P‹SPRčü˙˙˙ƒÄ‰đƒÄ[^Í´&ƒėjh0‹ƒĀPčü˙˙˙ƒÄ‰đƒÄ[^Ѝ´&U‰åVSƒėjčü˙˙˙‰Ã‹E ƒÄ ‰‹E‰C‹E‰CE÷PC ˙uPčü˙˙˙‹EƒÄ‰eø[^]Ãƒė ‰ÆSčü˙˙˙‰4$čü˙˙˙´&Sƒė‹\$ ‹…Ōt‹B ƒč =uƒė Rčü˙˙˙ƒÄƒÄ[Ít&T$č—ü˙˙‹ëېfU‰åVSƒė‹‹u…ÛtKƒėj:Sčü˙˙˙ƒÄ…Āt!U÷)ØRPSVčü˙˙˙ƒÄeø‰đ[^]t&E÷ƒėPSVčü˙˙˙ëŨ´&E÷ƒėPhVčü˙˙˙ƒÄëÁƒė Pčü˙˙˙ëõ´&ŧ'VSƒė‹D$ ‹t$$XļļC˙K˙<*t7~<:t\ƒėhlVčü˙˙˙ƒÄ„Āu)ƒėh|Včü˙˙˙ƒÄ„Āuƒėh‚Včü˙˙˙ƒÄvƒÄ!Ø[^Ѝ´&€=đWVS‹\$t$t|ļȄĀtQ‹D$…ĀtI‹D$ƒčƒø‡š‹…čƒėPh–čü˙˙˙ƒÄ VS˙5čü˙˙˙Į$Ÿčü˙˙˙ƒÄ[^_ЃėVS˙5čü˙˙˙ƒÄ[^_Éöŧ'ƒė hđčü˙˙˙ƒÄ…Ā„l˙˙˙ƒė ˙5čü˙˙˙‰$čü˙˙˙…Ā•Āļ‰$čü˙˙˙‰ĮĸČĮ$đčü˙˙˙ƒÄ‰øé0˙˙˙t&1ĀéG˙˙˙´&ƒėhŖjčü˙˙˙Į$„čü˙˙˙Ą‰D$ ƒÄéü˙˙˙t&ƒėhŖjčü˙˙˙Į$¤čü˙˙˙Ą‰D$ ƒÄéü˙˙˙t&Sƒė‹\$hąjčü˙˙˙ƒÄ ˙s˙3hŋčü˙˙˙Į$ čü˙˙˙Ą‰D$ ƒÄ[éü˙˙˙ļŋWVSƒė‹T$ ‹B…Ā„›‹‹R …‰Æ•Á1˙1ۅŌt‹…Ā•É߉Éø„Āu„Éu ƒÄ[^_ÍvˆL$ƒė hÅčü˙˙˙ƒÄļL$„ÉtcƒėVhę hÎčü˙˙˙‰øƒÄ„ĀtŊƒė hÖčü˙˙˙ƒÄƒėShß hÎčü˙˙˙ƒÄƒÄ[^_Ãf‹R 1É1ö…Ō…j˙˙˙éz˙˙˙t&‰ø„ĀuÃék˙˙˙ļŋUW1ÉVSēƒė‹D$0‹@$‰D$ ƒĀTč/į˙˙…Ā„G‹D$0‹P$‹JT‹BX)ȃøŽ/ĮD$ ë5t&‹D$ ‹ƒ…Ûx6‹€{,u<‹JT‹BXƒD$ ‹t$ )ČÁø9ƍđ‹Z`‹Bd)ØÁø;D$ ŋļ, ļƒė Sčü˙˙˙ƒÄ…Āth‹s1í‰đ+C ƒøëW´&‰đ+C ƒÅÁø9Å}AƒėUSčü˙˙˙ƒÄ€x‰Įt܍@ƒė Pčü˙˙˙ƒÄ„Āu)‹sƒÅ‰đ+C Áø9Å|ƍ´&‹D$0‹P$é@˙˙˙t&ƒėhÜjčü˙˙˙ƒÄ ˙w˙shŋčü˙˙˙‰<$čü˙˙˙Į$ čü˙˙˙ƒÄ‹sé_˙˙˙´&ƒÄ[^_]Ѝ´&UWVSƒė ‹l$ ‹|$$‹E ‹]‰Æ)ŪÁū…öt!1É9;Suë%t&‰ĶƒÂ9zütƒÁ9ņuīƒÄ 1Ā[^_]Ѝt&S9Ât‰Á)҉ÎÁū…öu‰Âƒę‰ø‰U ƒÄ [^_]Ívŧ'ƒėQRSčü˙˙˙‹U ƒÄë͐ļŋU‰åWVSuįƒė ‹]CĮV˙u Pčü˙˙˙‹CƒÄ…Āt‹Pô…Ōu-˙5j jhČčü˙˙˙X˙5čü˙˙˙Į$čü˙˙˙eô[^_]ËK‰ĮAô=t‰ōč˛å˙˙ƒė Wčü˙˙˙´&U‰åWVSƒė$‹EĮ ‹E ‹˙pô˙učü˙˙˙‹E ƒÄ‹‹pô‰Ã…öuë~vV÷€úv#‹PôƒÃÂ9Ķtgļ3‰ņ‰ō€ųŸÁ€ú ”ÂŅtՋE‹‹Pôz;xøw‹Hü…É~ƒėW˙učü˙˙˙‹EƒÄ‹‹Pô‰ņˆ ‹E‹= u‹E ƒÃ‹‹PôÂ9Ķu™‹Eeô[^_]ÂĮ@ü‰xôÆ8ëŌ‰Ã‹E‹Aô=tUįčˇä˙˙ƒė Sčü˙˙˙´&ŧ'WVS‹|$‹\$ƒėj hęWčü˙˙˙ƒÄë#ƒė)ØPS^Wčü˙˙˙ƒÄ jhøWčü˙˙˙ƒÄƒėhôSčü˙˙˙ƒÄ…‰ÆuƃėSWčü˙˙˙ƒÄ jhôWčü˙˙˙ƒÄ[^_Ѝt&Sƒė‹\$jčü˙˙˙ĮÆ@Į@Į@ Į@‰ĮCĮCƒÄ[ЍļŋSƒė‹D$‹…Ût"‹‹@=uƒė Sčü˙˙˙‰\$ ƒÄ[éü˙˙˙ƒÄ[Ív‰\$ƒÄ[˙ā´&ŧ'‹D$‹T$9Pt39Pt‰T$‹‰D$éü˙˙˙´&Į@‰T$‹‰D$éü˙˙˙fĮ@‰T$‹‰D$éü˙˙˙vŧ'‹D$‹Ã´&‹D$‹ļ@Ѝt&‹D$‹Æ@Ѝt&‹D$‹@$‰D$éü˙˙˙‹D$‹@$‰D$éü˙˙˙‹D$‹P$‹BX+BTÁøЍ´&ŧ'‹D$‹@$‰D$éü˙˙˙ƒė ē1ɋD$‹@$ƒĀTč‡á˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTčgá˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTčGá˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTč'á˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTčá˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTčįā˙˙ƒÄ Ðfƒė ē1ɋD$‹@$ƒĀTčĮā˙˙ƒÄ Ðf‹D$‹@$‹ė‹€čÍļŋ‹D$‹@$‹ô‹€đÍļŋSƒė‹D$‹X$Sčü˙˙˙ƒÄ1Ō…Ā~ƒÄ‰Đ[Í´&ƒė ÃˆSčü˙˙˙ƒÄƒđ‰ÂƒÄ‰Đ[Ívŧ'Sƒė‹D$‹X$Sčü˙˙˙ƒÄ…Ā~ƒÄ¸[ÍļÃˆ‰\$ƒÄ[éü˙˙˙t&VS‹D$ ‹L$‹X$1Ā…Éx‹s`‹Sd)ōÁú9Ņ} ‹Ž…Ōx‹CT‹ˆ[^Í´&ŧ'‹D$‹@$ˆÃfVS‹D$ ‹\$‹H$1Ā…Ûx‹q`‹Qd)ōÁú9Ķ} ‹ž…Ōx‹AT‹[^Í´&ŧ'‹D$‹@$ĖÐf‹D$‹@$‹@Ѝt&‹D$‹@$‹€āÃf‹D$‹@$ƒĀlЍt&‹D$‹ø…Ōt ‹€ĖÆ@ķÍļSƒėh@ čü˙˙˙ƒÄ…‰Ãt!ƒėh Pčü˙˙˙ƒÄ…Ātƒė Pčü˙˙˙ƒÄƒÄ[Ãh@ Shėjčü˙˙˙X˙5čü˙˙˙Į$čü˙˙˙‰öŧ'‹D$ ™÷|$;T$”ĀЍ´&ŧ'UW1íVSƒė‹D$0‹HT‰D$ ‹@X‰L$‰D$)ČÁø…Ā„,t&‹D$1Û1ɋ<¨‹W‹G ‰Ö)ÆÁū…öuyéņ´&ƒė˙vhčü˙˙˙‹F ƒÄ…Āt-‹…Āt'ƒėhß hčü˙˙˙‹F ƒÄ…Ā„Ø‹čAŪ˙˙ƒė j čü˙˙˙‹G ‹WƒÄš‰ÖƒÃ)ÆÁū9ķsk‹4˜€~té„Éu†ƒė˙wh čü˙˙˙‹GƒÄ…Āt)‹…Ōt#ƒėhę hčü˙˙˙‹GƒÄ…Ātr‹čËŨ˙˙ƒė j čü˙˙˙ƒÄé1˙˙˙‰öŧ'‹D$ ‹HT‹@X‰L$‰D$‹D$+D$ƒÅÁø9Å‚Øū˙˙Ą‰D$0ƒÄ[^_]éü˙˙˙v1Āé#˙˙˙‰öŧ'1Ā댍ļŋVSƒė‹\$‹t$‹ƒØ9đt…Āt ƒė ‹P˙RƒÄ‰ŗØƒÄ[^Ѝļŋ‹T$‹Š„ÂˆA…ÉDÂЍļUWVS‹D$‹xT‹pX)ūÁū…öt6‹h`1ۍt&‹Ÿ‹H‹P1Ā)ĘÁú…Ōtt&‰ƒĀ9Đuö‰\ƒÃ9ķuĶ[^_]Í´&ŧ'ļD$Ívŧ'¸Ívŧ'UWVSƒė‹t$,‹|$0Včü˙˙˙‹/ƒÄ ‰ÃPVUčü˙˙˙ƒÄ1Ō…Āu ëē‰ƒÄ ‰Đ[^_]ÃSƒė \$‰D$Sh čü˙˙˙ƒÄ„ĀuƒėSh3čü˙˙˙ƒÄ„ĀtMƒėSh#čü˙˙˙ƒÄ„Āt1ƒÄ[ЃėSh7čü˙˙˙ƒÄ„ĀuåƒėSh>čü˙˙˙ƒÄƒÄ[Ѝt&ƒėSh5čü˙˙˙ƒÄ„Āužëą‰öŧ'U‰åWVSƒė,‹E‹] ‰EԋE…Ā„Ķ…Û„ˍuāEڃėPh Včü˙˙˙Y_VuäVčü˙˙˙ƒÄ jh7Včü˙˙˙X}ÜZVWčü˙˙˙‰$čü˙˙˙ƒÄ PSWčü˙˙˙‹EäƒÄƒč =u{‹Eāƒč =u~‹]܃ė1˙‹CôPS˙u‰EĐčü˙˙˙ƒÄ…ĀtCô=ueeô‰ø[^_]Ív‹UĐU€}Ôļt„‰×tԃÂŋ<=Dúëōt&eô1˙‰ø[^_]Ít&UÛčÛ˙˙éx˙˙˙v‰ōč Û˙˙év˙˙˙t&‰ōčųÚ˙˙뒉ËE܃č =tUÛčāÚ˙˙‹Eäƒč =tUÛčËÚ˙˙‹Eāƒč =tUÛčļÚ˙˙ƒė Sčü˙˙˙‰Ã‹Eäƒč =tĶUÜč–Ú˙˙ëɉÃ밉ÃëÁļŋƒėj˙t$˙t$čü˙˙˙ƒÄ…Āt'ļ‰Đƒāßū˙˙vŧ'U´EÄčåo˙˙‹E¸ƒėh´ƒĀPčü˙˙˙_X‹E¸hƒĀPčü˙˙˙‹EÄƒÄ ˙pôP‹E¸ƒĀPčü˙˙˙‹Eăăč =„Øũ˙˙éīū˙˙´&Uāč@o˙˙‰Øéū˙˙‰öŧ'Māƒė ƒĀ(jQjRPčü˙˙˙ƒÄ …Ā…ū˙˙ģéŒũ˙˙ļ‹E¸ƒėjh0ƒĀPčü˙˙˙éÍü˙˙t&UāčØn˙˙é‰ũ˙˙vU´EĐčo˙˙EÜƒė ‹[Pčü˙˙˙‰ŪƒÄƒæ„F<~&‹E܃ėhĐƒĀPčü˙˙˙_X‹EÜVƒĀPčü˙˙˙ƒÄã€t‹E܃ėhæƒĀPčü˙˙˙ƒÄE˃ė˙uÜPčü˙˙˙‹EÜƒÄ …Āt ‹ƒė P˙RƒÄ‹E¸ƒėhƒĀPčü˙˙˙‹E¸Y[ƒĀhõPčü˙˙˙‹EĖƒÄ ˙pôP‹E¸ƒĀPčü˙˙˙‹E¸ƒÄ jhrƒĀPčü˙˙˙‹E¸ƒÄ j hĒƒĀPčü˙˙˙‹EĐƒÄ ˙pôP‹E¸ƒĀPčü˙˙˙‹E˃ăč =u2‹EЃč =„ü˙˙é2ũ˙˙‹E܃ėļ÷hˇƒĀPčü˙˙˙ééū˙˙Uāčnm˙˙ëĉËE˃č =tUāčUm˙˙‹EЃč =u@‹U¸…Ōt ƒė ‹ R˙QƒÄ‹E´ƒč =tUŗč m˙˙ƒė Sčü˙˙˙‰Ã‹E؃č =tĀUāčm˙˙ëļ‰ÃëĨ‰Ã‹E܅Ātœƒė ‹P˙RƒÄ뎉ËEăč =tŒëĘƒė ‰ÆS‰ķčü˙˙˙ƒÄéu˙˙˙‰Ã‹Eŧƒč =„b˙˙˙렉ÃéY˙˙˙‰Ãée˙˙˙‰Ã‹Eƒč =„?˙˙˙éz˙˙˙‰Ã‹Eȃč =„'˙˙˙éb˙˙˙vŧ'U‰åWVSƒė$‹]jSčü˙˙˙ƒÄ…‰ÆuSÆCĮC ĮC$ĮC(ĮC,ĮC0ĮC4ĮC8ĮC<ĮC@eô[^_]Ѝ´&}ähuhDjWčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙‰<$čü˙˙˙ƒÄéS˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙fU‰åWVSƒė‹u‹†Ø…Āt eô[^_]Ãfƒė j(čü˙˙˙Į‰Ã@Y_jPčü˙˙˙ƒÄ…‰Įu ÆCĮC$‰Ø‰žØeô[^_]Ѝt&EähuhDjPčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙XZWhčü˙˙˙Eä‰$čü˙˙˙ƒÄ놉ƃė Sčü˙˙˙‰4$čü˙˙˙‰ÆEäƒė Pčü˙˙˙ƒÄëܐ´&U‰åWVSƒė8‹]s Včü˙˙˙ƒÄ…‰EÔu1čü˙˙˙‰C<‹E ƒė ÆC8‰CVčü˙˙˙ƒÄ…‰Ãumeô[^_]Ѝt&}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YX˙uÔhčü˙˙˙‰<$čü˙˙˙ƒÄés˙˙˙t&}ähHhDjWčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙ƒÄeô[^_]Ãƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ļŋU‰åWVSƒė8‹]s Včü˙˙˙ƒÄ…‰EÔu1čü˙˙˙ƒė ‰C<‹CÆC8V‰EÔčü˙˙˙ƒÄ…‰Ãum‹Eԍeô[^_]Ãf}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YX˙uÔhčü˙˙˙‰<$čü˙˙˙ƒÄés˙˙˙t&}ähHhDjWčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙‹Eԃčeô[^_]Ãƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙vŧ'U‰åWVSƒė8‹]sVčü˙˙˙ƒÄ…‰EÔu9čü˙˙˙‰C ‹C$ƒė ‹€€ÆCV‰EÔčü˙˙˙ƒÄ…‰Ãuo‹Eԍeô[^_]Ít&}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YX˙uÔhčü˙˙˙‰<$čü˙˙˙ƒÄék˙˙˙t&}ähHhDjWčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙‹Eԃčeô[^_]Ãƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙fU‰åWVSƒė8‹]sVčü˙˙˙ƒÄ…‰EÔu9čü˙˙˙‰C ‹C$ƒė ‹€„ÆCV‰EÔčü˙˙˙ƒÄ…‰Ãuo‹Eԍeô[^_]Ít&}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YX˙uÔhčü˙˙˙‰<$čü˙˙˙ƒÄék˙˙˙t&}ähHhDjWčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙‹Eԃčeô[^_]Ãƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙fU‰åWVSƒė8‹E‹X{ Wčü˙˙˙ƒÄ…‰Æu?čü˙˙˙ƒė ‰C<‹sÆC8Wčü˙˙˙ƒÄ…‰Ãu~ƒė‹˙u V˙PƒÄeô[^_]Í´&Eäh<hDjP‰EÔčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙Y˙uÔčü˙˙˙ƒÄéc˙˙˙fEähHhDjP‰Į‰EÔčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙ƒÄé#˙˙˙ƒė ˙uԉÃčü˙˙˙‰$čü˙˙˙ƒė ˙uԉÃčü˙˙˙‰$čü˙˙˙ļU‰åWVSƒė‹u‹~0‹^,9ßuë[´&‹ƒč =u,ƒÃ9ßt=‹Cƒč =tāUäčøc˙˙‹ƒč =t؍t&UäƒÃčŨc˙˙9ßuˉöŧ'‹~,…˙t ƒė Wčü˙˙˙ƒÄ‹~$‹^ 9ßu$ët‹C ƒč =u;‹Cƒč =uFƒÃ9ßtO‹Cƒč =tŌUäčzc˙˙‹C ƒč =tʐt&Uäč`c˙˙‹Cƒč =tŊvUäƒÃčEc˙˙9ßu˛‹~ …˙t ƒė Wčü˙˙˙ƒÄƒė Včü˙˙˙ƒÄ…‰Ãu eô[^_]ÍvuähyhDjVčü˙˙˙ƒÄ jhlhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeô[^_]Ãƒė ‰ÃVčü˙˙˙‰$čü˙˙˙U‰åWVS‰Ãŋ}ƒė,‹B‰Eԋ…ĀtˆîƒøŋŦā‹Bš‹pô…öuāDÁMäƒė˙rPQčü˙˙˙Včü˙˙˙‹EäƒÄ ˙pôP‹EāƒĀPčü˙˙˙‹EāƒÄ jh°ƒĀPčü˙˙˙‰<$čü˙˙˙ƒÄ P‹EāWƒĀPčü˙˙˙‹MԃÄ…Étx‹}Ô1ƒÉ˙ōŽR‰Č÷ЃčP‹Eā˙uԃĀPčü˙˙˙ļƒÄƒė˙uāSčü˙˙˙‹EāƒÄ …Āt ‹ƒė P˙RƒÄ‹Eäƒč =u>eô‰Ø[^_]Ít&ŋĩé˙˙˙ļ‹Eāƒėh0ƒĀPčü˙˙˙뚍vŧ'‰ōčYa˙˙eô‰Ø[^_]ÉËEäƒč =tUßč8a˙˙ƒė Sčü˙˙˙‰Ã‹Eā…ĀtŲƒė ‹P˙RƒÄëː´&U‰åVSEô]đƒė‹U ‹učWū˙˙EîƒėP˙uôSčü˙˙˙XZSVčü˙˙˙‹EđƒÄƒč =u‹Eôƒč =u)Įeø[^]Ít&Uīč¨`˙˙‹Eôƒč =tڍv‰Úč‘`˙˙Įeø[^]ÉËEôƒč =tUīčm`˙˙ƒė Sčü˙˙˙‰Ã‹Eđƒč =tĶUīčM`˙˙ëɐvŧ'U‰åSƒė‹U ‹ …Éu‹]üÉÍvEôč€ũ˙˙ƒė ˙uôčü˙˙˙X˙5čü˙˙˙‹EôƒÄƒč =uƒė ˙5čü˙˙˙ƒÄ‹]üÉÍvUķčØ_˙˙ëŨ‰Ã‹Eôƒč =tUķčŋ_˙˙ƒė Sčü˙˙˙ļU‰åVSEėƒė‹]Pčü˙˙˙‹EėƒÄ j$hĖƒĀPčü˙˙˙ƒÄ…Û„{ƒė Sčü˙˙˙ƒÄ P‹EėSƒĀPčü˙˙˙‹EėƒÄƒėjh‰ƒĀPčü˙˙˙‹EėƒÄ j?hôƒĀPčü˙˙˙‹EėƒÄ jh4ƒĀPčü˙˙˙ƒÄ…Û„1ƒė Sčü˙˙˙ƒÄ P‹EėSƒĀPčü˙˙˙‹EėƒÄƒėj hɃĀPčü˙˙˙‹EėƒÄ j>hTƒĀPčü˙˙˙‹EėƒÄ j=h”ƒĀPčü˙˙˙‹EėƒÄ j=hÔƒĀPčü˙˙˙‹EėƒÄ jChƒĀPčü˙˙˙‹EėƒÄ j hÖƒĀPčü˙˙˙YEô[˙uėPčü˙˙˙X]đ‹uôZ˙u˙u Sčü˙˙˙ƒÄ V˙uđhâ˙5čü˙˙˙‹EđƒÄƒč =uw‹Eôƒč =uZ‹Eė…Āt ƒė ‹P˙RƒÄeø[^]ËEėƒėh0ƒĀPčü˙˙˙é†ū˙˙´&‹Eėƒėh0ƒĀPčü˙˙˙éĐū˙˙´&‰Účš]˙˙띍´&Uëč¨]˙˙é|˙˙˙‰Ã‹Eđƒč =tUëčŒ]˙˙‹Eôƒč =tUëčw]˙˙‹Eė…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‰ÃëˉÃë܍vU¸ô‰åWVSuä}Üƒė ‹U ‹]V…ŌDĐRWčü˙˙˙‹EƒÄ…ĀxoEƒėPVčü˙˙˙‰<$}āWčü˙˙˙ƒÄ jh“Wčü˙˙˙ƒÄ VWSčü˙˙˙‹EāƒÄ ƒč =u[‹Eäƒč =u^‹E܃č =u+eô‰Ø[^_]t&ƒėWSčü˙˙˙‹E܃ăč =tՉōč\˙˙eô‰Ø[^_]vUÛčx\˙˙뛍ļ‰úči\˙˙뙉ËE܃č =tUÛčP\˙˙ƒė Sčü˙˙˙‰Ã‹Eāƒč =tUÛč0\˙˙‹Eäƒč =tžUÛč\˙˙ë´ëЉÃëãvU‰åWVSuāƒė$‹E‹]‹} ˙0Včü˙˙˙‹EāƒÄ ‹@ô…Āu&ƒėWSčü˙˙˙ƒÄ‹Eāƒč =uTeô‰Ø[^_]ƒėW}äWčü˙˙˙ƒÄ jhrWčü˙˙˙ƒÄ VWSčü˙˙˙‹EäƒÄ ƒč =t¯Ußč€[˙˙ëĨļUäčp[˙˙eô‰Ø[^_]‰ËEāƒč =tUßčM[˙˙ƒė Sčü˙˙˙‰Ã‹Eäƒč =tĶUßč-[˙˙ëÉëå‰öŧ'Uē:¸*‰åWVSMā}ԃė0ƒ}‹uQEÂPWčü˙˙˙E؉$čü˙˙˙‹^+ƒÄÁûiÛÍĖĖ˃û„8‹E؃ėhNƒĀPčü˙˙˙‹EÔƒÄ ˙pôP‹E؃ĀPčü˙˙˙X‹EØZhrƒĀPčü˙˙˙‹EØY_ƒĀhYPčü˙˙˙X‹EØZSƒĀPčü˙˙˙_X‹EØhdƒĀPčü˙˙˙‹F+ƒÄ1ۃø~P´&ƒėSVčü˙˙˙‰Į‹EØƒÄ jhrƒĀPčü˙˙˙X‹EØZWƒĀPčü˙˙˙‹F+ƒÃƒÄÁøiĀÍĖĖĖ9Ã|ˇE؃ėÆEāĮEäPEāPčü˙˙˙Y[P˙učü˙˙˙XEäZjPčü˙˙˙ƒÄ‹E؅Āt ‹ƒė P˙RƒÄ‹Eԃč =…Ĩ‹Eeô[^_]ƒėjVčü˙˙˙‰ÃƒÄ‹9EtXEāƒėÆEāhNĮEäPčü˙˙˙ZYWPčü˙˙˙Y^hrPčü˙˙˙_ZhnPčü˙˙˙Y^SPčü˙˙˙_ZP˙učü˙˙˙éP˙˙˙‹E ƒė˙0˙sčü˙˙˙ƒÄ…Āt'‹EÆĮ@é7˙˙˙UāčøX˙˙‹Eeô[^_]EāƒėÆEāhNĮEäPčü˙˙˙Y^WPčü˙˙˙u܉Į‰4$čü˙˙˙‹EÜƒÄ j hyƒĀPčü˙˙˙XZVWčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄƒė˙u Wčü˙˙˙^_h‡Pčü˙˙˙ZYhnPčü˙˙˙^_SPčü˙˙˙Y[P˙učü˙˙˙élū˙˙‰Ã‹E܅Āt ƒė ‹P˙RƒÄEäƒėjPčü˙˙˙ƒÄ‹E؅Āt ƒė ‹P˙RƒÄ‹Eԃč =tUāč÷W˙˙ƒė Sčü˙˙˙‰Ãëēëú‰ÃëØëô‰Ãëŋ´&ŧ'U‰åWVS‰Ãƒė<‹E‹u ‰Mċ‹…„…Ʉ¸ƒė‰UĀQPčü˙˙˙‹UƒÄ…Ā•Ā8„Ĩ„Ō¸ēŠDƒėĮEĐÉEԍEāh›ÆEāĮEäPčü˙˙˙YUÄ_RPčü˙˙˙_ZhrPčü˙˙˙ZYhYPčü˙˙˙Y_}ĐWPčü˙˙˙YZVPčü˙˙˙u؉E‰4$čü˙˙˙‹MØƒÄ jh‡APčü˙˙˙XZV˙uĀčü˙˙˙‹E؃Ä…Āt ‹ƒė P˙RƒÄƒėhN˙uĀčü˙˙˙YUÔ^RPčü˙˙˙u܉E‰4$čü˙˙˙‹MÜƒÄ jhAPčü˙˙˙XZV˙uĀčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄEƒėP˙uĀčü˙˙˙ZYhrPčü˙˙˙ZYhŸPčü˙˙˙ZYWPčü˙˙˙Y_˙uPčü˙˙˙_ZhÃPčü˙˙˙ZYPSčü˙˙˙‹}äƒÄ…˙t‹ƒč =uAƒė Wčü˙˙˙ƒÄeô‰Ø[^_]Ív9Č”Ā8Â…[ū˙˙ÆĮCeô‰Ø[^_]Í´&‰ōčÁU˙˙ëļ‰ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E܅Ātâƒė ‹P˙RƒÄëԉËE؅ĀtËƒė ‹P˙RƒÄëŊvŧ'Sēƒė D$$‹\$PD$$P˙t$$‰Ø‹L$$čzũ˙˙ƒÄ‰Ø[S1Ōƒė D$$‹\$PD$$P˙t$$‰Ø‹L$$čMũ˙˙ƒÄ‰Ø[t&U‰åWVS‰Ã‰×ƒė<‹u ‰Mċ˙pôjP˙učü˙˙˙ƒÄƒø˙‰ų•Ā8Á„š„ÉēŠ¸DƒėĮEĐÉEԍEāh›ÆEāĮEäPčü˙˙˙YUÄ_RPčü˙˙˙_ZhrPčü˙˙˙ZYhYPčü˙˙˙Y_}ĐWPčü˙˙˙YZVPčü˙˙˙u؉E‰4$čü˙˙˙‹MØƒÄ jh‡APčü˙˙˙XZV˙uĀčü˙˙˙‹E؃Ä…Āt ‹ƒė P˙RƒÄƒėhN˙uĀčü˙˙˙YUÔ^RPčü˙˙˙u܉E‰4$čü˙˙˙‹MÜƒÄ jhAPčü˙˙˙XZV˙uĀčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄEƒėP˙uĀčü˙˙˙ZYhrPčü˙˙˙ZYhŸPčü˙˙˙ZYWPčü˙˙˙Y_˙uPčü˙˙˙_ZhÃPčü˙˙˙ZYPSčü˙˙˙‹}äƒÄ…˙t‹ƒč =u3ƒė Wčü˙˙˙ƒÄeô‰Ø[^_]Ѝt&ÆĮCeô‰Ø[^_]Ít&‰ōč!S˙˙ëĉËE܅Āt ƒė ‹P˙RƒÄPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E؅Ātâƒė ‹P˙RƒÄëԉÃëЍvŧ'Sēƒė ‹\$˙t$$˙t$$˙t$$‹L$$‰Øčœũ˙˙ƒÄ‰Ø[vS1Ōƒė ‹\$˙t$$˙t$$˙t$$‹L$$‰Øčoũ˙˙ƒÄ‰Ø[ļU‰åWVS‰Æ‰Ķƒė<‹E ‰Mċ˙pôjP˙učü˙˙˙ƒÄƒø˙•Ā8Ã„Ė„ÛēŠ¸DƒėĮEĖ/‰EЍEāh›ÆEāĮEäPčü˙˙˙_ZUÄRPčü˙˙˙Y[hrPčü˙˙˙_ZhYPčü˙˙˙YMĖ[QPčü˙˙˙]ԉĮ‰$čü˙˙˙‹E ƒÄ‰Ų‹‹Pôčvĩ˙˙ƒėSWčü˙˙˙‹EԃÄ…Āt ‹ƒė P˙RƒÄƒėh‡Wčü˙˙˙_ZhNPčü˙˙˙YUĐ[RPčü˙˙˙]؉Į‰$čü˙˙˙‹EØƒÄ jhƒĀPčü˙˙˙XZSWčü˙˙˙‹E؃Ä…Āt ‹ƒė P˙RƒÄEƒėPWčü˙˙˙[_hrPčü˙˙˙ZYhŸPčü˙˙˙[MĖ_QPčü˙˙˙]܉Į‰$čü˙˙˙‹EƒÄ‰Ų‹‹Pô蛴˙˙ƒėSWčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄƒėhÃWčü˙˙˙ZYPVčü˙˙˙‹}äƒÄ…˙t‹ƒč =u6ƒė Wčü˙˙˙ƒÄeô‰đ[^_]Ѝ´&ÆĮFeô‰đ[^_]Ít&‰ÚčQP˙˙ëÁ‰ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E؅Ātâƒė ‹P˙RƒÄëԉËEԅĀtËƒė ‹P˙RƒÄëŊ‰Ã‹E܅Āt´ƒė ‹P˙RƒÄëĻvSēƒė ‹\$˙t$$˙t$$˙t$$‹L$$‰Øč\ũ˙˙ƒÄ‰Ø[vS1Ōƒė ‹\$˙t$$˙t$$˙t$$‹L$$‰Øč/ũ˙˙ƒÄ‰Ø[ļU‰åWVS‰Æ‰Ķƒė<‹E‹} ‰Mċ‹…Ā„…Ō„ƒėRPčü˙˙˙ƒÄ…Ā•Ā8Ä „ÛēŠ¸DƒėĮEČ/‰EĖEāh›ÆEāĮEäPčü˙˙˙YUÄ[RPčü˙˙˙[ZhrPčü˙˙˙ZYhYPčü˙˙˙YMČ[QPčü˙˙˙‰Ã‹}Љ<$‰EĀčü˙˙˙XZ˙uĀWčü˙˙˙Y_PSčü˙˙˙‹EЃÄ…Āt ‹ƒė P˙RƒÄ}ԃė Wčü˙˙˙‹EÔƒÄ jh‡ƒĀPčü˙˙˙XZWSčü˙˙˙‹EԃÄ…Āt ‹ƒė P˙RƒÄƒėhNSčü˙˙˙YUĖ[RPčü˙˙˙]؉Į‰$čü˙˙˙‹EØƒÄ jhƒĀPčü˙˙˙XZSWčü˙˙˙‹E؃Ä…Āt ‹ƒė P˙RƒÄEƒėPWčü˙˙˙Y[hrPčü˙˙˙_ZhŸPčü˙˙˙YMČ[QPčü˙˙˙‰Ã‹E}܋‰<$‰EĀčü˙˙˙XZ˙uĀWčü˙˙˙ZYPSčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄƒėhÃSčü˙˙˙ZYPVčü˙˙˙‹]äƒÄ…Ût‹ƒč =uEƒė Sčü˙˙˙ƒÄeô‰đ[^_]Í´&9Đ”Ā8Ã…÷ũ˙˙ÆĮFeô‰đ[^_]Í´&‰úč!M˙˙벉ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E܅Ātâƒė ‹P˙RƒÄëԉËE؅ĀtËƒė ‹P˙RƒÄëŊ‰Ã‹EԅĀt´ƒė ‹P˙RƒÄëĻ‰Ã‹EЅĀtƒė ‹P˙RƒÄ돍ļŋSēƒė D$$‹\$PD$$P˙t$$‰Ø‹L$$čęü˙˙ƒÄ‰Ø[S1Ōƒė D$$‹\$PD$$P˙t$$‰Ø‹L$$čŊü˙˙ƒÄ‰Ø[t&U‰åWVSƒėl‹]ŨEŨU˜ŨE ŨUŨE(ŨUˆŲĘŪáŲáŨU ŲÉßéŨØrÆĮCeô‰Ø[^_]vu´ƒė ÆEāĮEäVčü˙˙˙‹E´ƒÄ jhĒƒĀPčü˙˙˙Y_VuāVčü˙˙˙‹E´ƒÄ…Āt ‹ƒė P˙RƒÄE ƒėPVčü˙˙˙}¸‰Æ‰<$čü˙˙˙‹E¸ƒÄ jhփĀPčü˙˙˙XZWVčü˙˙˙‹E¸ƒÄ…Āt ‹ƒė P˙RƒÄEƒėPVčü˙˙˙Y^hÂPčü˙˙˙}ŧ‰Æ‰<$čü˙˙˙‹EŧƒÄ ˙u¤˙u ƒĀPčü˙˙˙XZWVčü˙˙˙‹EŧƒÄ…Āt ‹ƒė P˙RƒÄ}ƒė Wčü˙˙˙‹EĀƒÄ jhĮƒĀPčü˙˙˙YXWVčü˙˙˙‹EƒÄ…Āt ‹ƒė P˙RƒÄEƒėPVčü˙˙˙}ĉƉ<$čü˙˙˙‹EÄƒÄ jh؃ĀPčü˙˙˙XZWVčü˙˙˙‹EăÄ…Āt ‹ƒė P˙RƒÄE ƒėPVčü˙˙˙}Č‰Æ‰<$čü˙˙˙‹EČƒÄ jháƒĀPčü˙˙˙YXWVčü˙˙˙‹EȃÄ…Āt ‹ƒė P˙RƒÄ}˃ė Wčü˙˙˙‹EĖƒÄ ˙uœ˙u˜ƒĀPčü˙˙˙XZWVčü˙˙˙‹E˃Ä…Āt ‹ƒė P˙RƒÄƒėhđVčü˙˙˙ZYMQPčü˙˙˙}Đ‰Æ‰<$čü˙˙˙‹EĐƒÄ jháƒĀPčü˙˙˙YXWVčü˙˙˙‹EЃÄ…Āt ‹ƒė P˙RƒÄ}ԃė Wčü˙˙˙‹EÔƒÄ ˙u”˙uƒĀPčü˙˙˙XZWVčü˙˙˙‹EԃÄ…Āt ‹ƒė P˙RƒÄƒėhķVčü˙˙˙ZYMQPčü˙˙˙}؉Ɖ<$čü˙˙˙‹EØƒÄ jháPRčü˙˙˙YXWVčü˙˙˙‹E؃Ä…Āt ‹ƒė P˙RƒÄ}܃ė Wčü˙˙˙‹EÜƒÄ ˙uŒ˙uˆƒĀPčü˙˙˙XZWVčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄƒėhPVčü˙˙˙ZYPSčü˙˙˙‹uäƒÄ…ö„|ü˙˙‹ƒč =uƒė Včü˙˙˙ƒÄeô‰Ø[^_]´&‰účQH˙˙ëØ‰ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E´…Ātâƒė ‹P˙RƒÄëԉËE¸…ĀtËƒė ‹P˙RƒÄëŊ‰Ã‹Eŧ…Āt´ƒė ‹P˙RƒÄëĻ‰Ã‹EĀ…Ātƒė ‹P˙RƒÄ돉ËEąĀt†ƒė ‹P˙RƒÄéu˙˙˙‰Ã‹EȅĀ„h˙˙˙ƒė ‹P˙RƒÄéW˙˙˙‰Ã‹EĖ…Ā„J˙˙˙ƒė ‹P˙RƒÄé9˙˙˙‰Ã‹EЅĀ„,˙˙˙ƒė ‹P˙RƒÄé˙˙˙‰Ã‹EԅĀ„˙˙˙ƒė ‹P˙RƒÄéũū˙˙‰Ã‹E؅Ā„đū˙˙ƒė ‹P˙RƒÄéßū˙˙‰Ã‹E܅Ā„Ōū˙˙ƒė ‹P˙RƒÄéÁū˙˙´&ŧ'U‰åWVSƒė4˙u˙u‹]čü˙˙˙ƒÄ„ĀuÆĮCeô‰Ø[^_]t&EƒėuÔPEØPčü˙˙˙E‰$Včü˙˙˙EāĮ$úÆEāĮEäPčü˙˙˙ZU YRPčü˙˙˙Y_hPčü˙˙˙_ZURPčü˙˙˙ZYh Pčü˙˙˙Y_VPčü˙˙˙u܉Į‰4$čü˙˙˙‹EÜƒÄ jhƒĀPčü˙˙˙XZVWčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄE؃ėPWčü˙˙˙ZYPSčü˙˙˙‹}äƒÄ…˙t‹ƒč =uMƒė Wčü˙˙˙ƒÄ‹Eԃč =u$‹E؃č =„ãū˙˙UāčŗE˙˙éÖū˙˙ļUāč E˙˙ëŌļ‰ōč‘E˙˙ëĒ‰Ã‹E؃č =tUāčxE˙˙ƒė Sčü˙˙˙‰ÃPPEäjPčü˙˙˙‹Eԃăč =tÍUāčHE˙˙뚉ËE܅ĀtĐƒė ‹P˙RƒÄëÂë U‰åWVSƒė$˙u˙u‹]čü˙˙˙ƒÄ„ĀuÆĮCeô‰Ø[^_]t&EāƒėÆEāhúĮEäPčü˙˙˙YU ^RPčü˙˙˙_ZhPčü˙˙˙YU^RPčü˙˙˙}؉Ɖ<$čü˙˙˙‹EØƒÄ j hPRčü˙˙˙XZWVčü˙˙˙‹U؃Ä…Ōt ‹ƒė R˙PƒÄEƒėPVčü˙˙˙}܉Ɖ<$čü˙˙˙‹EÜƒÄ jh+HQčü˙˙˙YXWVčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄEƒėPVčü˙˙˙^ZhÃPčü˙˙˙ZYPSčü˙˙˙‹uäƒÄ…ö„íū˙˙‹ƒč =uƒė Včü˙˙˙ƒÄeô‰Ø[^_]‰účšC˙˙ëŪ‰ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E؅Ātâƒė ‹P˙RƒÄëԉËE܅ĀtËƒė ‹P˙RƒÄëŊfU‰åWVSƒė$˙u˙u‹]čü˙˙˙ƒÄ„ĀuÆĮCeô‰Ø[^_]t&EāƒėÆEāhúĮEäPčü˙˙˙ZU YRPčü˙˙˙}؉Ɖ<$čü˙˙˙‹EØƒÄ jhPRčü˙˙˙YXWVčü˙˙˙‹U؃Ä…Ōt ‹ƒė R˙PƒÄEƒėPVčü˙˙˙}܉Ɖ<$čü˙˙˙‹EÜƒÄ jh2HQčü˙˙˙XZWVčü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄEƒėPVčü˙˙˙ZYh+Pčü˙˙˙YU^RPčü˙˙˙^ZhÃPčü˙˙˙ZYPSčü˙˙˙‹uäƒÄ…ö„íū˙˙‹ƒč =uƒė Včü˙˙˙ƒÄeô‰Ø[^_]‰úč B˙˙ëŪ‰ÃPPEäjPčü˙˙˙‰$čü˙˙˙‰Ã‹E؅Ātâƒė ‹P˙RƒÄëԉËE܅ĀtËƒė ‹P˙RƒÄëŊfSƒė‹\$˙t$,˙t$,˙t$,˙t$,Sčü˙˙˙ƒÄ$‰Ø[‰öŧ'Sƒė ‹\$˙t$,˙t$,˙t$,˙t$,˙t$,˙t$,Sčü˙˙˙ƒÄ$‰Ø[ƒė ‹T$BP‹B+BÁøPj˙t$ čü˙˙˙ƒÄÍļŋWVS‹|$‹G|w`ŸäVƒĀPjSčü˙˙˙ƒÄV‹GX1ö+GTÁøP‹G|ƒĀPSčü˙˙˙‹WT‹GXƒÄ)ĐÁø…Āt/‹˛ƒÆBP‹B+BÁøPjSčü˙˙˙‹WT‹GXƒÄ)ĐÁø9ÆrŌ[^_Í´&ŧ'ļD$‰D$éü˙˙˙fžD$‰D$éü˙˙˙féü˙˙˙vŧ'U‰åVSƒė‹]‹C…Āt ‹ƒė P˙RƒÄCƒė Pčü˙˙˙‹s ƒÄ…öt‹ƒč =…Œƒė Včü˙˙˙ƒÄ‹s…öt‹ƒč =u]ƒė Včü˙˙˙ƒÄ‹Cƒč =u‹ƒč =u eø[^]ЍU÷čØ?˙˙‹ƒč =tät&U÷čĀ?˙˙eø[^]Éöŧ'U÷č¨?˙˙뙍ļU÷č˜?˙˙ég˙˙˙‰ÆPPC jPčü˙˙˙ZCYjPčü˙˙˙‹CƒÄƒč =tU÷č_?˙˙‹ƒč =tU÷čK?˙˙ƒė Včü˙˙˙‰ÆCƒė Pčü˙˙˙ƒÄ랐´&ŧ'U‰åWVSƒė‹E‹x‹X Į9ßt%t&‹3…ötƒė Včü˙˙˙‰4$čü˙˙˙ƒÄƒÃ9ßuߋEƒė ƒĀ8Pčü˙˙˙‹EƒÄ‹@…Āt ƒė Pčü˙˙˙ƒÄ‹E‹@ …Āt ƒė Pčü˙˙˙ƒÄ‹E‹X…Ût‹ƒč =u4ƒė Sčü˙˙˙ƒÄ‹E‹@ƒč =ueô[^_]ÍUįč_>˙˙eô[^_]ÍUįčO>˙˙ë‰ËEƒė ƒĀ8Pčü˙˙˙ƒÄ‹E‹@…Āt ƒė Pčü˙˙˙ƒÄ‹E‹@ …Āt ƒė Pčü˙˙˙ƒÄ‹EƒėjƒĀPčü˙˙˙‹EƒÄ‹@ƒč =tUįčá=˙˙ƒė Sčü˙˙˙‰Ã뛍t&Sƒė‹\$Sčü˙˙˙‰\$ ƒÄ[éü˙˙˙t&U‰åWVSƒė,‹u‹FX‹~TĮ9ø‰EÔu%ëO´&ƒė Sčü˙˙˙‰$čü˙˙˙ƒÄƒĮ9}Ôt,‹…Ûtō‹‹@=tԃė S˙ЃÄƒĮ9}ÔuŨ‰öŧ'‹~L‹^H9ßuëDt&ƒė Pčü˙˙˙ƒÄƒÃ9ßt-‹…Ātķ‹‹Rútڃė P˙ԃÃÄ9ßuŨvŧ'‹†Ø…Āt ‹ƒė P˙RƒÄ†ƒė Pčü˙˙˙‹†üƒÄ…Āt ‹ƒė P˙RƒÄ‹žø…Ût/‹C …Āx ƒė Pčü˙˙˙ƒÄ‹ƒč =…’ƒė Sčü˙˙˙ƒÄ‹žĖ…Ût$‹‹@=…Nƒė Sčü˙˙˙‰$čü˙˙˙ƒÄ†ˆƒė Pčü˙˙˙‹^l‹FpƒÄ9Øt$´&‹…Āt ‹ƒė P˙RƒÄƒÃ;^puæ‹Fl…Āt ƒė Pčü˙˙˙ƒÄ‹F`…Āt ƒė Pčü˙˙˙ƒÄ‹FT…Āt ƒė Pčü˙˙˙ƒÄ‹FH…Āt ƒė Pčü˙˙˙ƒÄƒė ˙v@čü˙˙˙ƒÄ…Āt ‹ƒė P˙RƒÄƒė ˙v@čü˙˙˙ƒÄ…‰Ãu(F ƒė Pčü˙˙˙‹FƒÄƒč =uqeô[^_]Ít&}ähÎhDjWčü˙˙˙ƒÄ jhYhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙ƒÄ끃ė S˙ЃÄé¸ū˙˙Uäčû:˙˙eô[^_]ÍUäčë:˙˙éaū˙˙‰Ã‹Fƒč =tUãčĪ:˙˙ƒė Sčü˙˙˙‰ÃFlƒė Pčü˙˙˙ƒÄ‹F`…Āt ƒė Pčü˙˙˙ƒÄ‹FT…Āt ƒė Pčü˙˙˙ƒÄ‹FH…Āt ƒė Pčü˙˙˙ƒÄF@ƒė Pčü˙˙˙ƒÄF ƒė Pčü˙˙˙ƒÄéu˙˙˙‰Ã†ˆƒė Pčü˙˙˙ƒÄé|˙˙˙‰ÃëĪ‹Vl‰Ã…Ō„z˙˙˙ƒė Rčü˙˙˙ƒÄéi˙˙˙‰Ã†øƒėjPčü˙˙˙ƒÄ‹†Ė…Āt§ƒė ‹P˙RƒÄ뙉ˆü…ĀtČƒė ‹P˙RƒÄëē‰Į‹ƒč =tUäčĀ9˙˙‰ûë´ƒė ‰ÃWčü˙˙˙ƒÄé<˙˙˙‰Ã†ƒė Pčü˙˙˙ƒÄëĨfSƒė‹\$Sčü˙˙˙‰\$ ƒÄ[éü˙˙˙t&U‰åVSƒė‹]‹s$Į…öt$‹‹@=…˜ƒė Včü˙˙˙‰4$čü˙˙˙ƒÄƒė ƒÃSčü˙˙˙ƒÄ…‰Ãueø[^]Ѝ´&uôhyhDjVčü˙˙˙ƒÄ jhlhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeø[^]Ít&ƒė V˙ЃÄén˙˙˙ƒė ‰ÃVčü˙˙˙‰$čü˙˙˙ƒė ƒÃ‰ÆSčü˙˙˙‰4$čü˙˙˙´&Sƒė‹\$Sčü˙˙˙‰\$ ƒÄ[éü˙˙˙t&U‰åWVSuäƒė0‹]‹}CĮV˙u Pčü˙˙˙ƒÄ…˙„0ƒė jčü˙˙˙ƒÄ ‰EÔVW‰ĮPčü˙˙˙ƒÄ‰{‹EƒėĮC ĮCĮCĮCĮC‰C$‹EĮC ÆC,ĮC0ĮC4‰C(C8jPčü˙˙˙ƒÄ…‰ĮuQÆCPĮCXĮC\ĮC`ĮCdĮChĮClĮCpĮCtĮCxeô[^_]ÍļhuhDjVčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙ZYWhčü˙˙˙‰4$čü˙˙˙ƒÄéX˙˙˙‰öŧ'ĮCéäū˙˙‰Æ‹C…Āt ƒė Pčü˙˙˙ƒÄ‹C …Āt ƒė Pčü˙˙˙ƒÄPPCjPčü˙˙˙ƒÄ‹Cƒč =tUãč—6˙˙ƒė Včü˙˙˙ƒė ‰ĮV‰ūčü˙˙˙ƒÄ뚃ė ˙uԉÆčü˙˙˙ƒÄ뾉ÆëēļU‰åWVSƒė4‹]˙u ‹}‹uSčü˙˙˙XCZ˙uPčü˙˙˙ƒÄ…˙„<ƒė jčü˙˙˙‰Á‰EԍEäƒÄ PW‰ĪQčü˙˙˙ƒÄ‰{…ö„˙ƒė jčü˙˙˙‰ĮEäƒÄ PVWčü˙˙˙ƒÄ‰{ ‹EƒėÆCÆCÆC‰C‹E ‰CCjPčü˙˙˙ƒÄ…‰ÆuPÆC4ĮC<ĮC@ĮCDĮCHĮCLĮCPĮCTĮCXĮC\eô[^_]Ѝt&}ähuhDjWčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙YXVhčü˙˙˙‰<$čü˙˙˙ƒÄéV˙˙˙ļĮC é˙˙˙t&ĮCéŨū˙˙‰ÆC RRjPčü˙˙˙ƒÄPPCjPčü˙˙˙ƒÄ‹Cƒč =tUãč­4˙˙‹ƒč =tUãč™4˙˙ƒė Včü˙˙˙ƒė ‰ÆWčü˙˙˙ƒÄ랉ÆëĪƒė ‰ÆWčü˙˙˙ƒÄ뚉Æë–ƒė ˙uԉÆčü˙˙˙ƒÄ딉ÆëfSƒė‹\$ ‹C;Ct@…Āt ‹T$$‰‹CƒĀ‰C‹C‰Â+SÁú;C ‰T$ t9…Āt‰ƒĀ‰CƒÄ[Ѝ´&ƒėT$(RPC Pčü˙˙˙ƒÄëŧ‰öŧ'ƒėƒÃT$RPSčü˙˙˙ƒÄëŧ´&Ą‹Hô…ÉuÍvU‰åWVSƒė0jj:hčü˙˙˙ƒÄƒø˙‰Ã„ uØPjhƒÃVčü˙˙˙ĄƒÄ‹@ô9ÇUEÜj˙ShPčü˙˙˙Į$čü˙˙˙Į‰ĮĮ$čü˙˙˙‰ÃXCZĮĮC˙˙˙˙VPčü˙˙˙^XEÜPC Pčü˙˙˙‰$čü˙˙˙‰_E׍]äƒÄ PhØSčü˙˙˙ZYS˙wčü˙˙˙‹EäƒÄƒč =…‚‹E‰}⋀ˋH ;H„Š…Ét‰9‹H ƒÁ‰H ‹E܃č =u^‹E؃č =u1eô[^_]Ѓė˙5h čü˙˙˙X˙5čü˙˙˙ƒÄëĶt&‰ÚčQ2˙˙ëÆ´&Uāč@2˙˙éq˙˙˙v‰Úč12˙˙뙍´&UāƒėƒĀRQPčü˙˙˙ƒÄél˙˙˙PShhčü˙˙˙‰Ã‹E؃č =tUÖčį1˙˙ƒė Sčü˙˙˙‰Ã‹Eäƒč =tUāčĮ1˙˙‹G…Āt ƒė ‹P˙RƒÄƒė Wčü˙˙˙ƒÄ‹E܃č =tŸUÖč“1˙˙땉ƃė S‰ķčü˙˙˙ƒÄëˉƋCƒč =táUäčh1˙˙ë׉Ãëē‰ÃëĒ‰Æ‹C ƒč =tŌUäčG1˙˙ëȉÃéw˙˙˙´&ŧ'ƒė ‹T$‹B ;Bt!…Āt ‹L$‰‹B ƒĀ‰B ƒÄ Ívŧ'ƒėƒÂL$QPRčü˙˙˙ƒÄëې´&ƒė‹D$ ‹L$$‹‰L$ ‹B ;Bt…Āt‰‹B ƒĀ‰B ƒÄÍt&ƒėƒÂL$QPRčü˙˙˙ƒÄëᐐ´&VSƒė‹t$ ‹\$$‹F9ØtAƒėPVčü˙˙˙ƒÄ…Āt ƒė ‹P˙RƒÄ…Û‰^t‹‰\$ ‹B ;Bt…Āt‰‹B ƒĀ‰B ƒÄ[^Ѝt&ƒėƒÂL$QPRčü˙˙˙ƒÄëې´&U‰åWVS}äƒė@‹]‹E ‰CCĮWhPčü˙˙˙C ĮC ‰[ĮC‰[‰CC ZYjP‰EĀčü˙˙˙ƒÄ…‰Æ…CƒėÆC8h‰EčEÔPčü˙˙˙ƒÄ…‰Æ…‹EԃėĮCHĮCLĮCPĮCTĮCX‰C@‹EÄĮC\ĮC`ĮCdĮCh‰CDƒˆĮClĮCpĮCtÆCxĮC|˙˙˙˙Įƒ€Įƒ„jP‰Eŧčü˙˙˙ƒÄ…‰Æ…ŗĖƒė ƃ Įƒ¨ĮƒŦĮƒ°Įƒ´Įƒ¸ĮƒŧĮƒĀĮƒÄĮƒČVčü˙˙˙ĮƒØÆƒÜĮƒāĮƒäĮƒčĮƒėĮƒđĮƒôĮƒøĮ$čü˙˙˙YZĮ‰ƒüEāhPčü˙˙˙ƒÄ…‰EÄ…ē‹Eāƒė ĮƒĮƒĮƒ ƃ‰ƒjčü˙˙˙ZYĮPVčü˙˙˙ƒÄeô[^_]Ѝ´&EĐhuhDjPčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙YXVhčü˙˙˙EЉ$čü˙˙˙ƒÄé„ũ˙˙vhčhDjWčü˙˙˙ƒÄ j1h8 hčü˙˙˙ƒÄ jhæhčü˙˙˙XZ˙uÄhčü˙˙˙‰<$čü˙˙˙ƒÄéíū˙˙´&EÜhuhDjPčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙YXVhčü˙˙˙E܉$čü˙˙˙ƒÄéŒũ˙˙vEØhčhDjPčü˙˙˙ƒÄ j1h8 hčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙E؉$čü˙˙˙ƒÄéŒü˙˙‰Æ‹Cƒč =tUĪčü+˙˙ƒė Včü˙˙˙‰ÆEЃė Pčü˙˙˙ƒÄëĪ‰Æ‹ƒü…Āt ƒė ‹P˙RƒÄPPƒøjPčü˙˙˙‹ƒĖƒÄ…Āt ƒė ‹P˙RƒÄƒė ˙uŧčü˙˙˙ƒÄClƒė Pčü˙˙˙‹C`ƒÄ…Āt ƒė Pčü˙˙˙ƒÄ‹CT…Āt ƒė Pčü˙˙˙ƒÄ‹CH…Āt ƒė Pčü˙˙˙ƒÄC@ƒė Pčü˙˙˙ƒÄƒė ˙uĀčü˙˙˙ƒÄé˙˙˙ƒė ‰ÆWčü˙˙˙ƒÄé6˙˙˙‰Æé|˙˙˙‰ÆE܃ė Pčü˙˙˙ƒÄéf˙˙˙‰Æëš‰ÆE؃ė Pčü˙˙˙ƒÄëĻ‰Æƒƒė Pčü˙˙˙ƒÄééū˙˙‰Æéøū˙˙‰Æé˙˙˙´&U‰åWVSƒė$‹]{ĮjWčü˙˙˙ƒÄ…‰Æu*ƒė ÆChčü˙˙˙‰ÆXZSVčü˙˙˙‰s$ƒÄeô[^_]ÍEähuhDjPčü˙˙˙ƒÄ j!h¨hčü˙˙˙ƒÄ jhæhčü˙˙˙YXVhčü˙˙˙Eä‰$čü˙˙˙ƒÄéy˙˙˙‰ÃEäƒė Pčü˙˙˙‰$čü˙˙˙ƒė ‰ÃVčü˙˙˙ƒÄƒė Wčü˙˙˙‰$čü˙˙˙‰Ãëëvŧ'€=čt¸ ÃU‰åSƒėhččü˙˙˙ƒÄ…Āu¸ ‹]üÉÍļƒė h čü˙˙˙Į$ččü˙˙˙ƒÄ hh hčü˙˙˙ƒÄ¸ ‹]üÉÃƒė ‰Ãhččü˙˙˙‰$čü˙˙˙t&U‰åWVSƒėLĄ…Ā„ęƒėj:Pčü˙˙˙ƒÄ…Ā„ÜxuäE܃ė]ÄPWVčü˙˙˙XZVSčü˙˙˙‰$čü˙˙˙‹EäƒÄƒč =…ˆ‹EĀ8/„֍EāƒėPW}ĐWčü˙˙˙YXEÔWP‰Į‰E´čü˙˙˙‰<$čü˙˙˙ƒÄčü˙˙˙M܃ė}ČQ‹@$˙pWčü˙˙˙XEĖZWPčü˙˙˙Eˉ$čü˙˙˙}؍EĖƒÄ ˙u´PWčü˙˙˙‰<$Sčü˙˙˙‹E؃ăč =…]‹E˃č =… ‹Eȃč =… ‹Eԃč =… ‹EЃč =… ‹EċPô…Ōu/ƒėS˙učü˙˙˙ƒÄ‹Eăč =…o‹Eeô[^_]Âf€|˙/uʃė Včü˙˙˙Eā‹}äP‰E´čü˙˙˙EÜƒÄ W˙u´SPčü˙˙˙‹EāƒÄ ƒč =…ŧ‹Eäƒč =…›E܃ėP˙učü˙˙˙‹E܃ăč =„h˙˙˙‰ōč1'˙˙é\˙˙˙t&EĖ]܃ėPh} Sčü˙˙˙^Eā_SP‰Æ‰E´čü˙˙˙‰4$čü˙˙˙ƒÄčü˙˙˙UȃėR‹@$˙pEÔP‰Æčü˙˙˙Y}Ø[VWčü˙˙˙‰<$čü˙˙˙uäƒÄ ˙u´WVčü˙˙˙‰4$˙učü˙˙˙‹EäƒÄƒč =…÷‹E؃č =…‹Eԃč =…å‹Eāƒč =…ô‹E܃č =„”ū˙˙v‰ōčI&˙˙é…ū˙˙t&Uāč8&˙˙ékũ˙˙vEäƒėPh˙učü˙˙˙ƒÄéUū˙˙t&‰ōč &˙˙éčũ˙˙t&‰ōčų%˙˙ééũ˙˙t&‰ōčé%˙˙éęũ˙˙t&‰ōčŲ%˙˙éëũ˙˙t&‰ōčÉ%˙˙é—ũ˙˙t&‹U´č¸%˙˙éXū˙˙vUØč¨%˙˙é7ū˙˙vUĐč˜%˙˙éüū˙˙v‰ōč‰%˙˙é˙˙˙t&‰ōčy%˙˙éîū˙˙t&‰ōči%˙˙é˙˙˙‰Ã‹Eԃč =tUĐčM%˙˙‹Eāƒč =tUĐč8%˙˙‹E܃č =tUĐč#%˙˙ƒė Sčü˙˙˙‰ÃëɉËEāƒč =tĪUäč˙$˙˙ëʼnÃëÁ‰Ã‹Eäƒč =tUĐčâ$˙˙‹E؃č =„o˙˙˙UĐčÉ$˙˙éb˙˙˙‰Ã‹E؃č =t‰ōčŽ$˙˙‹E˃č =t‰ōčš$˙˙‹Eȃč =t‰ōč†$˙˙‹Eԃč =t‰ōčr$˙˙‹EЃč =u5‹Eăč =„1˙˙˙UÃčL$˙˙é$˙˙˙‰Ãë҉Ã둉ËE܃č =tˉōč)$˙˙ëÂëâ‰Ã‹Eăč =tUāč$˙˙‹Eäƒč =„Úū˙˙Uāčõ#˙˙éÍū˙˙‰Ã뇉ÃëډÃé˙ū˙˙‰Ã‹E؃č =„lū˙˙UäčÆ#˙˙é_ū˙˙‰Ã‹Eāƒč =tUØčĒ#˙˙‹Eäƒč =„4˙˙˙UØč‘#˙˙é'˙˙˙‰ÃëŪ‰Ãéûū˙˙ë÷‰ÃéŪū˙˙´&ƒė čü˙˙˙‹@$‹„ˆJ…ŌEÁƒė Pčü˙˙˙ƒÄЍt&ƒė čü˙˙˙‹@$‹„ˆJ…ŌEÁƒė Pčü˙˙˙ƒÄЍt&Sƒė‹\$čü˙˙˙ƒė‹L$QR˙p$Sčü˙˙˙ƒÄ‰Ø[ļSƒėčü˙˙˙‹@$‹€ø…Āt>ƒėh ˙p čü˙˙˙Y‰ÃXSjIčü˙˙˙XZS‹D$˙0čü˙˙˙‰$čü˙˙˙Į$čü˙˙˙PP˙5‹D$˙0čü˙˙˙Z˙5čü˙˙˙čü˙˙˙´&U‰åWVSĩÅū˙˙ėL‹]ë‰öŧ'čü˙˙˙ƒ8…ƒėjV˙sčü˙˙˙ƒÄƒø˙t܅Ā…uĮCë včü˙˙˙ƒ8u&ƒė ˙sčü˙˙˙ƒÄƒø˙tãĮC˙˙˙˙eô[^_]Ít&…Ôū˙˙ĩØū˙˙ƒėĮ…Ôū˙˙΍Čū˙˙PVčü˙˙˙X…Æū˙˙ZPh* Sčü˙˙˙ŊĖū˙˙ƒÄ hSWčü˙˙˙X…Đū˙˙Zh WPčü˙˙˙Y…Đū˙˙[Üū˙˙VPSčü˙˙˙Xĩāū˙˙Zh•SVčü˙˙˙_Ŋäū˙˙Xh VWčü˙˙˙Yĩčū˙˙[h# WVčü˙˙˙Včü˙˙˙t&…čū˙˙ƒė Ŋäū˙˙Pčü˙˙˙ƒÄ hËhjWčü˙˙˙Y^hŧ hčü˙˙˙‹•čū˙˙ƒÄ ˙rôRPčü˙˙˙‰<$čü˙˙˙‹…čū˙˙ƒÄƒč =„­ū˙˙‰úč¤ ˙˙éĄū˙˙ƒøu‚ļ…Åū˙˙ëū˙ëĮ‰ÃEЃė˙uØPčü˙˙˙‹EƒÄ…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‰Ã‹E˃č =tÍUČčõęū˙ëšëĩëŗ‰Ã‹Eȃč =tĻUÄčØęū˙뜃ė˙u˙u W‹]Ččü˙˙˙ƒÄ S˙uĖhâ˙5čü˙˙˙‹E˃ăč =tUÄč•ęū˙ƒė ˙5čü˙˙˙ƒÄčü˙˙˙‰Ã‹E˃č =tƒUÄčhęū˙év˙˙˙vU‰åWVS1˙ž@ƒėƒėj@Včü˙˙˙ƒÄ…‰Ã„¸EįjPSVčü˙˙˙ƒÄ ‰ÆPhWčü˙˙˙FôƒÄ=umļCs<@t2čü˙˙˙ƒė ‰C<‰EЋCÆC8W‰EÔčü˙˙˙‹EԉF‰<$čü˙˙˙ƒÄ…‰EĖ…¤‹EĐƒė ‰sÆC8‰C˙˙˙‰ÃéR˙˙˙‰Ãéf˙˙˙‰Ãéz˙˙˙‰Ã둉Ã먉Ãëŋ‰Ãéj÷˙˙‰Ãé~÷˙˙‰Ãé’÷˙˙‰ÃéĻ÷˙˙‰Ãé÷˙˙‰Ãé,÷˙˙‰Ãéīö˙˙‰Ãčü˙˙˙‹…Äū˙˙…Ā„÷ō˙˙ƒė Pčü˙˙˙ƒÄéæō˙˙ë U‰åWVS‰Ķƒė4‰EÔhĻ Rčü˙˙˙ƒÄ…Ā„ƒėhą Sčü˙˙˙ƒÄ…Ā„‹ƒėhģ Sčü˙˙˙ƒÄ…Ā„ZuähhŧjVčü˙˙˙_XhÄ hčü˙˙˙ZYhˆ Pčü˙˙˙‹ƒÄ ˙rôRPčü˙˙˙‰4$čü˙˙˙‹EԃÄĮĮ@Į@‹Eԍeô[^_]Ív‹}ԃė ĮĮGĮGjčü˙˙˙‰‰Ã‰EЃĀƒÄž ‰G}䍴&…ÛtƒėW˙6Sčü˙˙˙ƒÄƒÆƒÃū uߋEԉX‹Eԍeô[^_]Íļ‹}ԃė ĮĮGĮGj čü˙˙˙‰‰Ã‰EĐƒĀ ƒÄž ‰G}䍴&…ÛtƒėW˙6Sčü˙˙˙ƒÄƒÆƒÃū@ uߋEԉX농´&‹}ԃė ĮĮGĮGjčü˙˙˙‰‰Ã‰EЃĀƒÄžė ‰G}䍴&…ÛtƒėW˙6Sčü˙˙˙ƒÄƒÆƒÃū uߋEԉXé˙˙˙‰Ã‹Eԋ…Āt ƒė Pčü˙˙˙ƒÄƒė Sčü˙˙˙ƒė ‰ÃVčü˙˙˙‰$čü˙˙˙ë˃ė Pčü˙˙˙^_S˙uĐčü˙˙˙ƒÄčü˙˙˙뭉Ãčü˙˙˙ëσė Pčü˙˙˙XYS˙uĐčü˙˙˙ƒÄčü˙˙˙ƒė Pčü˙˙˙XYS˙uĐčü˙˙˙ƒÄčü˙˙˙‰Ãčü˙˙˙éb˙˙˙‰Ãčü˙˙˙éV˙˙˙´&U‰åWVSE܃ė<‹U ‹]‹učũ˙˙‹}āEăė jSW˙uÜPčü˙˙˙ƒÄ;}Ä„Ė}؃ėj˙uWčü˙˙˙XZjh°Včü˙˙˙‹ƒÄ ˙pôPVčü˙˙˙ƒÄ ‰Ãjh Pčü˙˙˙‹EØƒÄ ˙pôPSčü˙˙˙ƒÄ jhÃPčü˙˙˙‹E؃ăč =…Ũ‹uā‹]Ü9Ūu ë.vƒÃ9Ūt!‹ƒč =tí‰úƒÃč3ŋū˙9Ūu捴&‹u܅öt ƒė Včü˙˙˙ƒÄeô[^_]Ѝt&}ÔhĘ hŧjWčü˙˙˙YXhŦ hčü˙˙˙YZhŨ Pčü˙˙˙‹ƒÄ ˙rôRPčü˙˙˙ƒÄ ‰EĀjhč Pčü˙˙˙‹M ƒÄ ‹˙pôP˙uĀčü˙˙˙YZh Pčü˙˙˙‰<$čü˙˙˙ƒÄéŽū˙˙UÔčzžū˙é˙˙˙ƒė ‰ÃWčü˙˙˙ƒÄE܃ė Pčü˙˙˙‰$čü˙˙˙‰Ã‹E؃č =tŨUÔč<žū˙ë͉ÃëĪļU‰åWVSƒėp‹}G‰EEäPEœhģ Pčü˙˙˙XZh ˙učü˙˙˙Eāu¤ƒÄ P˙wVčü˙˙˙E܍] ƒÄ Ph% Sčü˙˙˙EœƒÄVSP˙učü˙˙˙‹E ƒÄƒč =…0‹E¤ƒč =…8‹G …Ātb‹…Āt\MāuŦƒėQPVčü˙˙˙E܍]¨ƒÄ Ph* Sčü˙˙˙EœƒÄVSP˙učü˙˙˙‹E¨ƒÄƒč =…†‹EŦƒč =…‚‹G…Ātb‹…Āt\Māu´ƒėQPVčü˙˙˙E܍]°ƒÄ Ph6 Sčü˙˙˙EœƒÄVSP˙učü˙˙˙‹E°ƒÄƒč =…‹E´ƒč =…ō€ē ¸ MāuŧDƒėQPVčü˙˙˙E܍]¸ƒÄ PhA Sčü˙˙˙EœƒÄVSP˙učü˙˙˙‹E¸ƒÄƒč =…‹Eŧƒč =…]ƒė˙w\˙wXSčü˙˙˙EāY^PEÄhH Pčü˙˙˙EăÄSPEœP˙učü˙˙˙‹Eăăč =…Ū‹Eƒč =…æEāƒėPEĖ˙u Pčü˙˙˙EÜƒÄ PEČhM Pčü˙˙˙E˃ÄPEČPEœP˙učü˙˙˙‹Eȃăč =… ‹E˃č =…¨E܃ė˙uPčü˙˙˙X‹EÜZ˙pôP˙učü˙˙˙‹E܃ăč =…‹G@+G<ƒøŽĒ1ÛĮE”駍t&‹Fē‹Hô…ÉDƒė˙vPEČPčü˙˙˙MČX‹F ZhrQMЉEŒQčü˙˙˙YXEĐ˙uŒPEĖPčü˙˙˙‹EĐƒÄ ƒč =…øEāƒėPEÔ˙uĖPčü˙˙˙E؍UÔƒÄ jRPčü˙˙˙XZjh_ ˙učü˙˙˙‹EØƒÄ ˙pôP˙učü˙˙˙ƒÄ j hx Pčü˙˙˙‹E؃ăč =…|‹Eԃč =…[Eȃė‹vhrPEāPčü˙˙˙YXEāVPEÜPčü˙˙˙‹EāƒÄ ƒč =…E܃ėPEäPčü˙˙˙Z˙uä˙učü˙˙˙‹EäƒÄƒč =…Īƒėj hƒ ˙učü˙˙˙‹E܃ăč =…™‹E˃č =u|‹Eȃč =u_‹G@+G<ƒÃÁøiĀÍĖĖĖ9ÍŃėS˙učü˙˙˙‰Æ‹ƒÄ…Āt΃E”‹E”ƒø…6ū˙˙ƒėh\ ˙učü˙˙˙ƒÄéū˙˙ļUäčXšū˙뗍ļUäčHšū˙éw˙˙˙vUäč8šū˙éZ˙˙˙vUāč(šū˙é$˙˙˙vUäčšū˙éäū˙˙vUäčšū˙é˜ū˙˙vUäčø¸ū˙éwū˙˙vUäčč¸ū˙éûũ˙˙v‹E”…Āt)ƒėh ˙učü˙˙˙‹EœƒÄƒč =u)eô[^_]ЃėhW ˙učü˙˙˙‹EœƒÄƒč =t׍Uä舸ū˙eô[^_]ÍUäčx¸ū˙‹E¤ƒč =„Čú˙˙Uäč_¸ū˙éģú˙˙UäčR¸ū˙‹Eŧƒč =„áû˙˙Uäč9¸ū˙éÔû˙˙Uäč,¸ū˙‹Eƒč =„ü˙˙Uäč¸ū˙é ü˙˙Uäč¸ū˙‹E˃č =„Xü˙˙Uäčíˇū˙éKü˙˙Uäčāˇū˙érü˙˙Uäč͎ū˙éû˙˙Uä诎ū˙éãú˙˙Uä蚡ū˙émú˙˙UäčŦˇū˙éqú˙˙‰Ã‹Eȃč =tUä萡ū˙‹E˃č =uB‹Eœƒč =tU›čnˇū˙ƒė Sčü˙˙˙‰Ã‹E¨ƒč =tUäčNˇū˙‹EŦƒč =tžUäč9ˇū˙봉ËE¸ƒč =tUäč ˇū˙‹Eŧƒč =tëЉÃëŋ‰Ã‹E ƒč =tUäčöļū˙‹E¤ƒč =„b˙˙˙ëĸ‰Ã‹Eäƒč =tUāčĖļū˙‹E܃č =tUāčˇļū˙‹E˃č =tUĐčĸļū˙‹Eȃč =„˙˙˙UÄč‰ļū˙é˙˙˙‰Ã봉ËEāƒč =tēUäčiļū˙밉ËE؃č =tUäčPļū˙‹Eԃč =tŒëЉÃëí‰Ã낉ËEЃč =tˆUäč"ļū˙é{˙˙˙‰Ãét˙˙˙‰Ã‹E܃č =„€ū˙˙éŊū˙˙‰Ãé˙˙˙‰Ãémū˙˙‰Ã‹Eăč =tUäčŲĩū˙‹Eƒč =„Eū˙˙é‚ū˙˙‰Ã‹E´ƒč =„-ū˙˙éjū˙˙‰Ãé„ū˙˙‰Ã‹E°ƒč =tԍUäčĩū˙ëʉÃéôũ˙˙‰Ãë§U‰åWVSEäƒė`‹u‹] PE°hą Pčü˙˙˙ƒÄ jh  Včü˙˙˙‹E°ƒÄ ˙pôPVčü˙˙˙EāƒÄ PE¸˙sPčü˙˙˙E܍}´ƒÄ Ph% Wčü˙˙˙E¸ƒÄPE°WPVčü˙˙˙‹E´ƒÄƒč =…î‹E¸ƒč =…öƒė Sčü˙˙˙‰EäEäY_PEŧPčü˙˙˙X}ĀEÜZPh9Wčü˙˙˙EŧƒÄPE°WPVčü˙˙˙‹EƒÄƒč =…Ž‹Eŧƒč =…ļƒė Sčü˙˙˙‰EäEäY_PEÄPčü˙˙˙X}ȍEÜZPh¤ Wčü˙˙˙EăÄPE°WPVčü˙˙˙‹Eȃăč =…n‹Eăč =…vƒė Sčü˙˙˙‰EäEäY_PEĖPčü˙˙˙X}ЍEÜZPh­ Wčü˙˙˙E˃ÄPE°WPVčü˙˙˙‹EЃÄƒč =….‹E˃č =…6Eā}؃ėPh:Wčü˙˙˙EÜƒÄ PEÔhļ Pčü˙˙˙EԃÄWPE°PVčü˙˙˙‹Eԃăč =…ķ‹E؃č =…ûE܃ė˙s4˙s0Pčü˙˙˙YXEāWhH Pčü˙˙˙E܃ÄPEāPE°PVčü˙˙˙‹EāƒÄƒč =…ŧ‹E܃č =…čC8ƒėPEäPčü˙˙˙X‹EäZ˙pôPVčü˙˙˙ƒÄ jh\ Pčü˙˙˙‹EäƒÄƒč =…Ž‹C1˙‰E¤+C ƒøëLv‹E¤+C ƒĮÁø9Į}9ƒėWSčü˙˙˙ƒÄ€xtŨƒėP˙sVčü˙˙˙‹CƒĮƒÄ‰E¤‹E¤+C Áø9Į|ĮƒėjhŊ Včü˙˙˙‹E°ƒÄ ˙pôPVčü˙˙˙ƒÄ jh\ Pčü˙˙˙‹E°ƒÄƒč =…ųeô[^_]ÍUäčûąū˙‹E¸ƒč =„ ũ˙˙Uäčâąū˙éũü˙˙UāčÕąū˙‹Eŧƒč =„Jũ˙˙Uāčŧąū˙é=ũ˙˙Uāč¯ąū˙‹Eăč =„Šũ˙˙Uā薱ū˙é}ũ˙˙Uā艱ū˙‹E˃č =„Ęũ˙˙Uāčpąū˙éŊũ˙˙Uäčcąū˙‹E؃č =„ū˙˙UäčJąū˙éøũ˙˙Uäč=ąū˙‹E܃č =„<ū˙˙Uäč$ąū˙é/ū˙˙Uāčąū˙éeū˙˙Uäč ąū˙eô[^_]ÉËEāƒč =tUäčë°ū˙‹E܃č =uB‹E°ƒč =tU¯čɰū˙ƒė Sčü˙˙˙‰Ã‹E´ƒč =tUä芰ū˙‹E¸ƒč =tžUä蔰ū˙봉ËEăč =tĨUāč{°ū˙뛉ËEЃč =tUāčb°ū˙‹E˃č =„s˙˙˙ëˉÃëé‰Ã‹Eäƒč =„Z˙˙˙ëŗ‰Ã뉉ÃéM˙˙˙‰Ã‹Eԃč =tUäč°ū˙‹E؃č =„%˙˙˙éb˙˙˙‰Ã‹Eŧƒč =„ ˙˙˙éc˙˙˙‰Ã‹Eȃč =„C˙˙˙Uāč˯ū˙é6˙˙˙‰Ã‹Eƒč =tģUā蝝ū˙뱉Ãéģū˙˙‰ÃëŽfU‰åWVSEäƒėp‹}PE hĻ Pčü˙˙˙Y[hWčü˙˙˙ƒÄ jh Wčü˙˙˙‹E ƒÄ ˙pôPWčü˙˙˙‹E ƒÄē1ɋ@$‰E”ƒĀTč:Žū˙‰Eäu¤EäƒėPVčü˙˙˙X]¨EÜZPh9Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹E¨ƒÄƒč =…ŧ‹E¤ƒč =…Æ‹E ē1ɋ@$‰E”ƒĀTčĮ­ū˙‰EäuŦEäƒėPVčü˙˙˙YEÜ[]°Ph¤ Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹E°ƒÄƒč =…s‹EŦƒč =…}‹E ē1ɋ@$ƒĀTčW­ū˙‰Eäu´EäƒėPVčü˙˙˙X]¸EÜZPh­ Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹E¸MāƒÄ‰M”ƒč =…'‹E´ƒč =…Luƒė˙u”h:Včü˙˙˙E܍]ŧƒÄ Phļ Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹EŧƒÄƒč =… ‹Eƒč =…‹E uăė‹@$˙°ė˙°čVčü˙˙˙Y[]Č˙u”hÄ Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹Eȃăč =…΋Eăč =…p‹E u˃ė‹@$˙°ô˙°đVčü˙˙˙X]ĐZ˙u”hH Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹EЃÄƒč =…)‹E˃č =…ū€=tg‹E uԃė‹@$‹€ā‰EäEäPVčü˙˙˙YEÜ[]ØPhÎ Sčü˙˙˙E ƒÄVSPWčü˙˙˙‹E؃ăč =…’‹Eԃč =…t‹E ƒė‹@$‰EˆPEÜPčü˙˙˙X‹EÜZ˙pôPWčü˙˙˙‹E܃ăč =…ME؃ėPEähÚ Pčü˙˙˙‹u”EÔƒÄ Ph% Včü˙˙˙EäƒÄPE VPWčü˙˙˙‹EāƒÄƒč =…g‹Eäƒč =…oƒėh\ Wčü˙˙˙‹E ƒÄ1ۋp$‹VT‹FX)Ѓø~fvŧ'‹N`‹FdĮE”)ČÁø9Ã} ‹™…Āx‹š‰E”ƒė ˙u”čü˙˙˙ƒÄ…Ā~ƒė˙u”Wčü˙˙˙‹E ƒÄ‹p$‹VT‹FXƒÃ)ĐÁø9Ã|¤ƒėjhã Wčü˙˙˙‹E ƒÄ ˙pôPWčü˙˙˙ZYh\ Pčü˙˙˙‹E ƒÄƒč =…¯eô[^_]ËU”čãĒū˙éū˙˙‹U”čÖĒū˙éaū˙˙UäčÉĒū˙éõũ˙˙UäčŧĒū˙éƒũ˙˙Uäč¯Ēū˙éĘũ˙˙‹U”čĸĒū˙é§ü˙˙Uäč•Ēū˙‹Eƒč =„ëü˙˙Uäč|Ēū˙éŪü˙˙UäčoĒū˙é%ũ˙˙UÜčbĒū˙‹Eäƒč =„‘ū˙˙‹U”čIĒū˙é„ū˙˙Uäč<Ēū˙eô[^_]ÍMā‰Ęč*Ēū˙‹E¤ƒč =„:û˙˙Mā‰ĘčĒū˙é+û˙˙Mā‰ĘčĒū˙‹EŦƒč =„ƒû˙˙Mā‰ĘčåŠū˙étû˙˙‰ĘčŲŠū˙éÍû˙˙UäčĖŠū˙éĻũ˙˙‰Ã‹Eŧƒč =tUäč°Šū˙‹Eƒč =uB‹E ƒč =tUŸčŽŠū˙ƒė Sčü˙˙˙‰Ã‹Eȃč =tUäčnŠū˙‹Eăč =tžUäčYŠū˙봉ËE´ƒč =tĨUāč@Šū˙뛉ËE°ƒč =tUāč'Šū˙‹EŦƒč =„s˙˙˙ëˉÃëé‰Ã‹E؃č =t‹U”čų¨ū˙‹Eԃč =„E˙˙˙‹U”čā¨ū˙é8˙˙˙‰ÃëŪ‰Ã‹EЃč =tUäčū˙‹E˃č =„ ˙˙˙éI˙˙˙‰Ãëæ‰Ã‹E܃č =„đū˙˙é-˙˙˙‰Ã‹Eāƒč =tUÜčw¨ū˙‹Eäƒč =„Ãū˙˙UÜč^¨ū˙éļū˙˙‰ÃëŪ‰Ã‹E¸ƒč =„íū˙˙Uāč:¨ū˙éāū˙˙‰Ã‹E¤ƒč =„ū˙˙éÕū˙˙‰Ãésū˙˙‰Ã‹E¨ƒč =tԍUāč˙§ū˙ëʉÃéFū˙˙‰Ãéū˙˙´&ŧ'U‰åWVS ˙˙˙ėô‹uFPSčü˙˙˙‰$čü˙˙˙XŊ$˙˙˙ZSWčü˙˙˙Wčü˙˙˙ƒÄ„Āu5ƒė˙vhæ ˙5čü˙˙˙_˙5čü˙˙˙Į$čü˙˙˙´&ƒėh ˙včü˙˙˙ƒÄ…‰…˙˙˙tŽ…`˙˙˙ƒė Pčü˙˙˙‹ÆEԋ Į…`˙˙˙ĮEĐÆEՋCôĮEØĮEÜĮEāĮE䉝,˙˙˙‰Œ,˙˙˙Į…0˙˙˙…,˙˙˙CôY^jPčü˙˙˙XĄŊ4˙˙˙‹ Z‰…4˙˙˙‹@ôø‰jPčü˙˙˙‹5‹‹Fô‰”,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ ‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙YX…8˙˙˙Į…8˙˙˙Į…X˙˙˙Į…\˙˙˙ P…`˙˙˙Pčü˙˙˙XZ˙u Wčü˙˙˙ZŊ(˙˙˙…,˙˙˙YPWčü˙˙˙X˙ĩ˙˙˙˙ĩ(˙˙˙čü˙˙˙‹…(˙˙˙ƒÄƒč =…ōƒė ˙ĩ˙˙˙čü˙˙˙‹…\˙˙˙ƒÄĮ…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =…Ũ…T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙‹Fô‹ ‹‰Œ,˙˙˙Ą‹ ‰…4˙˙˙‹@ô‰”4˙˙˙‹Cô‰,˙˙˙‰Œ,˙˙˙…`˙˙˙Į…`˙˙˙‰$čü˙˙˙‹…$˙˙˙ƒÄƒč =uH‹… ˙˙˙ƒč =u eô[^_]Ѝ´&•˙˙˙čĨ¤ū˙éūū˙˙•,˙˙˙蕤ū˙eô[^_]Ѝt&•,˙˙˙č}¤ū˙ëĢv‰účq¤ū˙é˙˙˙‰Ã…,˙˙˙ƒė Pčü˙˙˙ƒÄ‹…$˙˙˙ƒč =t •˙˙˙č=¤ū˙‹… ˙˙˙ƒč =t •˙˙˙č"¤ū˙ƒė Sčü˙˙˙‰ÃëØ‰Ã‹… ˙˙˙ƒč =tፕ,˙˙˙čøŖū˙ëԉͅ`˙˙˙ƒė Į…`˙˙˙Pčü˙˙˙ƒÄé{˙˙˙‹Sô‹ ‰,˙˙˙‰Ã‰Œ,˙˙˙ëʼnÃéZ˙˙˙‰Ã‹…(˙˙˙ƒč =„2˙˙˙•˙˙˙葪ū˙é"˙˙˙‰Ã…8˙˙˙ƒė Pčü˙˙˙^…,˙˙˙_hPčü˙˙˙ƒÄél˙˙˙U‰åWVSƒėdhhčü˙˙˙ƒÄ…Ā„EĀ}ŧƒėĮE´˙˙˙˙ĮE¸˙˙˙˙P˙5WĮEĐĮEÔĮEØčü˙˙˙ƒÄĮEÜĮEāĮEä1Ûë ´&^ƒėSj|Wčü˙˙˙ƒÄƒø˙‰Æ„ƒ‹Eŧ‰ō)ڋ@ô9ÇšEĖRSWPčü˙˙˙ƒÄ‹Eā;Eät:…ĀtM˃ė]ÜQPčü˙˙˙‹EāƒÄƒĀ‰Eā‹E˃č =tUČčeĸū˙냍vMĖ]܃ėQPSčü˙˙˙ƒÄëЍvŧ'‹Eŧ‹@ô9Ø‚Žj˙S]ČWSčü˙˙˙ƒÄ‹Eā;Eä„Õ…ĀtƒėSP]Üčü˙˙˙‹EāƒÄƒĀ‰Eā‹Eȃč =…š‹E܋]ЋuԋUä‰EЋEā9ķ‰]܉uā‰EԋE؉U؉Eäuë1ļƒÃ9Ūt!‹ƒč =tíU˃Ã蚡ū˙9Ūuåļ‹]܅Ût ƒė Sčü˙˙˙ƒÄ‹Eŧƒč =…‹UЋEÔĮEĀ˙˙˙˙)ĐÁøƒøt&]ăėhh<Sčü˙˙˙Sčü˙˙˙eô1Ā[^_]ÍE´ƒėƒÂPRčü˙˙˙ƒÄ„ĀtÍE¸ƒėP‹EЃĀPčü˙˙˙ƒÄ„ĀtŠEƒėP‹EĐƒĀ Pčü˙˙˙ƒÄ„Āt‹EЃė j‰E čü˙˙˙‰Ã‹MĀ‹u¸XZ˙u S‰M¤‹}´čü˙˙˙‰{‰sƒÄ‹}ԋuЋE¤9÷‰C u ë+ƒÆ9÷t!‹ƒč =tíU܃Æ肠ū˙9÷uåļ‹}Ѕ˙t ƒė Wčü˙˙˙ƒÄeô‰Ø[^_]ÍUÜčS ū˙éâū˙˙UĖčF ū˙éYū˙˙ƒėS]ÜPSčü˙˙˙ƒÄé2ū˙˙v‰Ã‹Eăč =tUÜč ū˙EЃė Pčü˙˙˙‰$čü˙˙˙t&PShhčü˙˙˙]܉ƃė Sčü˙˙˙‹EŧƒÄƒč =tUÄčÁŸū˙‰ķëŦ‰Æ‹Eȃč =tĖUĖčϟū˙ëÂPShhčü˙˙˙ƒė ‰ÆS‰ķčü˙˙˙ƒÄém˙˙˙‰Æ‹E˃č =tUČčgŸū˙냉ÃéM˙˙˙´&ŧ'U‰åWVS‰ÃƒėƀÜčü˙˙˙‹ŗø‰Į9đt5…öt+‹F …Āx ƒė Pčü˙˙˙ƒÄ‹ƒč =uZƒė Včü˙˙˙ƒÄ‰ģø…˙t ‹ƒĖÆ@€{xt$ƒė Sčü˙˙˙‰$čü˙˙˙ƒÄeô[^_]Ѝ´&‰Øč‰ū˙ëĶ´&Uį訞ū˙뜋‰ÃAô=tUį萞ū˙ƒė Sčü˙˙˙ļ‹D$€¸ÜtķÐé˙˙˙t&ŧ'éü˙˙˙t&ŧ'éü˙˙˙vŧ'U‰åWVSEȃėX‹}Pčü˙˙˙‹EƒÄ ‹˙pôP‹EȃĀPčü˙˙˙G‰E´‰$čü˙˙˙‹G$‰$čü˙˙˙‹P+ƒÄ‰ĐÁøiĀĢĒĒĒ…Ā…:‹E‹…Āt ‹Hô…É…îEЃė˙uČPčü˙˙˙‹E UĮ[^‰EԋER‹]Đ…Ā¸EEPEØPčü˙˙˙X‹EZS‰E܍EāPčü˙˙˙YEä^uĖVSPčü˙˙˙‹EЃÄƒč =…Ô‹G$ƒė ]ԃĀ@Pčü˙˙˙‹_Z‹SP˙R‹u ƒÄ…öt(€=tĮ ļ€=…9ƒė Sčü˙˙˙X˙u´čü˙˙˙‹EȃÄ…Āt ƒė ‹P˙RƒÄeô[^_]Ív‹EȃėhƒĀPčü˙˙˙‹EƒÄ ‹˙pôP‹EȃĀPčü˙˙˙ƒÄéŪū˙˙t&‹EȃėhrƒĀPčü˙˙˙^X‹EČh[ƒĀPčü˙˙˙‹EČY[ƒĀh Pčü˙˙˙‹G$‰$čü˙˙˙‹P+ƒÄ‰ĐÁøiĀĢĒĒĒ…ĀŽaū˙˙\@ũÁãëfƒë ƒûô„Jū˙˙‹G$ƒė Pčü˙˙˙‹0EĖƒÄ Ū˙v˙6Pčü˙˙˙X‹EČZjhrƒĀPčü˙˙˙‹EĖƒÄ ˙pôP‹EȃĀPčü˙˙˙‹EČƒÄ jh°ƒĀPčü˙˙˙‹FƒÄ ˙pôP‹EȃĀPčü˙˙˙‹E˃ăč =„c˙˙˙UÔ苛ū˙éV˙˙˙‰ōč›ū˙é ū˙˙‰Ã‹E˃č =tUÔčc›ū˙ƒė ˙u´čü˙˙˙ƒÄ‹EȅĀt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‰Ãë≯ƒė S‰ķčü˙˙˙ƒÄë‰Ãëŧ‰Ã‹Eāƒč =t‰ōč ›ū˙‹E؃č =tUĖčôšū˙‹EЃč =t„UĖčߚū˙éw˙˙˙‰Ãë͉Ãëۃė jčü˙˙˙ZYSP‰Įčü˙˙˙ƒÄ hhWčü˙˙˙ƒė ‰ÆWčü˙˙˙ƒÄéd˙˙˙ļU‰åWVSuä]āƒė,‹}čü˙˙˙ƒėj˙p$Včü˙˙˙XZ˙u ‹ƒĀ PSčü˙˙˙‹ƒÄ ‹H‹P‹8‰MԉUĐčü˙˙˙ƒėVS˙uÔ˙uĐWPčü˙˙˙‹EāƒÄ ƒč =u‹Eäƒč =u#eô[^_]ÍvUßčšū˙‹Eäƒč =tāv‰Účé™ū˙eô[^_]ÉËEäƒč =tUßčʙū˙ƒė Sčü˙˙˙‰Ã‹Eāƒč =tĶUßčĒ™ū˙ëɐ´&U‰åWVSuāƒė0‹]CP˙s˙3h h h Včü˙˙˙ƒÄ€}āu`E܃ė Pčü˙˙˙‹EäƒÄ…Ā„€‹}؃ė Ph•hŧjWčü˙˙˙E܃ÄPWčü˙˙˙‰<$čü˙˙˙‹E܃Ä…Āt ‹ƒė P˙RƒÄ‹}ä…˙t‹ƒč =uGƒė Wčü˙˙˙ƒÄ‹Cƒč =ueô[^_]Íļ¸éx˙˙˙ļ‰ō蚘ū˙eô[^_]ЍUÜ記ū˙ë¯ƒė ‰EÔWčü˙˙˙‹}ԃÄ‹E܅Āt ƒė ‹P˙RƒÄPPEäjPčü˙˙˙ƒÄ‹Cƒč =t‰ōč]˜ū˙ƒė Wčü˙˙˙‰Įë߉ĮëˉĮ봐´&U‰åWVSEԃė8‹u ‹^j˙uS˙6Pčü˙˙˙ƒÄ;]Ô„Eäƒė Pčü˙˙˙‹F‹ƒÄ‰Á)ŅÁų…É„Ņ1ۍ´&)ĐÁøƒč9Ä‘‹Eäƒė<šjhūƒĀPčü˙˙˙‹ƒÄ ˙pôP‹EäƒĀPčü˙˙˙‹EäƒÄ jhūƒĀPčü˙˙˙‹F‹ƒÃƒÄ‰Á)ŅÁų9Ųv^…Ût’ƒųv‹Eäƒėjh†ƒĀPčü˙˙˙‹‹FƒÄ)ĐÁøƒč9Ã…o˙˙˙‹Eäƒėjh ƒĀPčü˙˙˙ƒÄ‹éO˙˙˙´&Eāƒė˙uäPčü˙˙˙‹EäƒÄ …Āt ƒė ‹P˙RƒÄEäƒė Pčü˙˙˙‹EäY[ƒĀhhPčü˙˙˙‹EƒÄ ‹˙pôP‹EäƒĀPčü˙˙˙X‹EäZhžƒĀPčü˙˙˙‹EāƒÄ ˙pôP‹EäƒĀPčü˙˙˙‹Eä^_ƒĀh% Pčü˙˙˙‹EäY[ƒĀh[Pčü˙˙˙X‹EäZhÁƒĀPčü˙˙˙]ÜĮ$7 hhŧjSčü˙˙˙EäƒÄPSčü˙˙˙‰$čü˙˙˙‹EäƒÄ…Āt ‹ƒė P˙RƒÄ‹Eāƒč =ueô1Ā[^_]Íeô¸[^_]ÍUäčī•ū˙ë߉ËEāƒč =tUÛč֕ū˙ƒė Sčü˙˙˙ƒė ‰ÆS‰ķčü˙˙˙ƒÄ‹Eä…ĀtËƒė ‹P˙RƒÄëŊ‹Uä‰Ã…ŌtÉƒė ‹R˙PƒÄëģ‰ÃëАļŋU‰åWVS]܍u؃ė<‹U‰Øč‡Ō˙˙EփėP‹E ˙0Včü˙˙˙XZSVčü˙˙˙‰Į‹E؃ăč =u]‹Eā‹]Ü9؉EÄu ë1vƒÃ9]Ät ‹ƒč =tė‰ōƒÃč •ū˙9]Äu名t&‹E܉EċEąĀt ƒė Pčü˙˙˙ƒÄeô‰ø[^_]ÍU×čՔū˙뙉ƃė Sčü˙˙˙‰4$čü˙˙˙‰Æ‹E؃č =tāU×詔ū˙ë֐ļU‰åWVSƒė,čü˙˙˙‹@$‹€‹€„‹R ‹H‹p‹‹Z‹z9Ų‰}Ô„gû”ų”ÃĶ„Ŋ„Ō…Ĩ‰ķ‰ū}䋃ė W‰EÔčü˙˙˙‹MäƒÄ j?hôAPčü˙˙˙‹MäƒÄ j:hAPčü˙˙˙‹MäƒÄ jh> APčü˙˙˙‹EԃÄ…Ā„0‹Eäƒė˙uԃĀPčü˙˙˙‹EäƒÄƒėjhđƒĀPčü˙˙˙‹EäƒÄ jhV ƒĀPčü˙˙˙ƒÄ…ö„Ä‹EäƒėVƒĀPčü˙˙˙‹EäƒÄƒėjh\ ƒĀPčü˙˙˙‹EäƒÄ jhV ƒĀPčü˙˙˙ƒÄ…Û„Z‹EäƒėSƒĀPčü˙˙˙‹EäƒÄƒėj&hĖƒĀPčü˙˙˙‹EäƒÄ j=hôƒĀPčü˙˙˙‹EäƒÄ jhz ƒĀPčü˙˙˙uāĮ$7 hšhŧjVčü˙˙˙ƒÄWVčü˙˙˙‰4$čü˙˙˙‹EäƒÄ…Āt ƒė ‹P˙RƒÄ1ۍeô‰Ø[^_]Ѝt&‹]ÔéWū˙˙´&}äƒė ‹W‰EĐčü˙˙˙Y‹MäXhôAPčü˙˙˙‹MäXZAh4Pčü˙˙˙‹MЃÄ…ɄۋEäƒė˙uЃĀPčü˙˙˙‹EäƒÄƒėhđƒĀPčü˙˙˙X‹EäZh€ ƒĀPčü˙˙˙‹EԃÄ…Ā„ą‹Eäƒė˙uԃĀPčü˙˙˙‹EäƒÄƒėh’ ƒĀPčü˙˙˙ƒÄ…ö„=‹EäƒėVƒĀPčü˙˙˙‹EäƒÄƒėhrƒĀPčü˙˙˙‹EäY^ƒĀh4Pčü˙˙˙X‹EäZhtƒĀPčü˙˙˙‹EäY^ƒĀh´Pčü˙˙˙X‹EäZhôƒĀPčü˙˙˙uāĮ$7 hÅhŧjVčü˙˙˙ƒÄWVčü˙˙˙‰4$čü˙˙˙‹EäƒÄ…Ā„oū˙˙ƒė ‹P˙RƒÄeô‰Ø[^_]Ѝ´&eô쉨[^_]ЋEäƒėh0ƒĀPčü˙˙˙éũ˙˙´&‹Eäƒėh0ƒĀPčü˙˙˙é3ũ˙˙´&‹Eäƒėh0ƒĀPčü˙˙˙éÉü˙˙´&‹Eäƒėh0ƒĀPčü˙˙˙éēū˙˙´&‹Eäƒėh0ƒĀPčü˙˙˙éū˙˙´&‹Eäƒėh0ƒĀPčü˙˙˙éHū˙˙ƒė ‰ÃVčü˙˙˙ƒÄ‹Eä…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‰Ã‹Eä…Ātîƒė ‹P˙RƒÄëāƒė ‰ÃVčü˙˙˙ƒÄëۉÃëšfU‰åWVSƒėH‹] ‹uSčü˙˙˙‰‰$čü˙˙˙x ‰<$čü˙˙˙Sh  WP‰Į‰EÄčü˙˙˙FƒÄjWPčü˙˙˙ƒÄ…Ā”Ā„ĀˆFtN€;¸ EÃėjPF(Pčü˙˙˙ƒÄ…ĀĮEä”Ā„ĀˆFˆEāt&ƒė ˙uÄčü˙˙˙ƒÄeô[^_]Ѝt&ÆEāĮEäu܃ė Včü˙˙˙‹EÜƒÄ jh§ ƒĀPčü˙˙˙‰$čü˙˙˙ƒÄ P‹EÜSƒĀPčü˙˙˙‹EÜƒÄ j3h0ƒĀPčü˙˙˙EԍUāĮ$hŧ h RPčü˙˙˙]؃Ä˙uÔhĀhjSčü˙˙˙ƒÄVSčü˙˙˙‰$čü˙˙˙‹Eԃăč =uA‹E܅Āt ‹ƒė P˙RƒÄ‹]ä…Û„˙˙˙‹ƒč =u'ƒė Sčü˙˙˙ƒÄéķū˙˙ļ‰Úč9Žū˙ëļ´&‰ōč)Žū˙ëĐ‰Ã‹E܅Āt ƒė ‹P˙RƒÄPPEäjPčü˙˙˙‰$čü˙˙˙‰Ãëįƒė ‰ÆS‰ķčü˙˙˙ƒÄ‹Eԃč =tˇUĶčԍū˙뭉Ãë却&ŧ'U‰åSEō]ôƒėPhSčü˙˙˙ƒÄčü˙˙˙ƒėS˙u j˙j˙uPčü˙˙˙‹EôƒÄ ƒč =u ‹]üÉÍļUķčhū˙‹]üÉÉËEôƒč =tUķčLū˙ƒė Sčü˙˙˙fSƒėčü˙˙˙„Āu ƒÄ[Íļčü˙˙˙‹X$ƒė Sčü˙˙˙‹ƒÄ‹R ú…ƒhĖ jj ˙t$čü˙˙˙ƒÄčü˙˙˙„Āt5ƒė Sčü˙˙˙‹ƒÄ‹R úu\hâ jj ˙t$čü˙˙˙ƒÄƒÄ[Ãfƒė Sčü˙˙˙‹ƒÄ‹R úu7hÔ jj˙t$čü˙˙˙ƒÄ뛃ė P˙ԃÄéo˙˙˙fƒė P˙ԃÄ뙐t&ƒė P˙ԃÄ랐t&UWŊĶMbVS‰Ãƒė,čü˙˙˙‹p$‰ž„čü˙˙˙‹@$ƒė‹¸Ė‹SW˙PXZjD$$Pčü˙˙˙šč‰4$‰Č‹L$,÷l$(‰D$‰Č‰T$÷íÁųÁú)ʉЙ‰Ņ‰ÂT$L$‰T$‰L$čü˙˙˙‹ƒÄ‹R ú…āhdjj ˙sčü˙˙˙ƒÄ…‰Åt čü˙˙˙„Ā„Ąƒė Včü˙˙˙‹ƒÄ‹R ú…´1Ō¸hí RPUčü˙˙˙XZjD$$Pčü˙˙˙šč‰Č‹L$,÷l$(‰D$‰T$‰ČēĶMbÁų÷ęÁú)ʉЙD$T$+D$T$Y]‰CX‹SW‰S\˙P$ƒÄĮ†„ƒÄ,[^_]Ívƒė Učü˙˙˙ƒÄéN˙˙˙´&ƒė P˙ԃÄé˙˙˙vŧ'ƒė P˙ԃÄé>˙˙˙f‹D$€xuķÍt&éKū˙˙vŧ'UWVS‰Ãƒė<čü˙˙˙‹@$‰˜€‰D$ ‰Æčü˙˙˙‹@$ƒė‹¸Ė‹SW˙P‰4$čü˙˙˙‹ƒÄ‹R ú…_1Ō¸h RPSčü˙˙˙^]jD$4Pčü˙˙˙šč‹k‰Č‹L$<÷l$8‰D$ ‰T$$‰ČēĶMbÁų÷ęÁú‰Đ)ș‰Ņ‰ÂT$ L$$‰č+C 1ö‰T$ ‰L$$ƒÄƒøëCvŧ'‰č+C ƒÆÁø9Æ}*ƒėVSčü˙˙˙ƒÄ€xtŪčIũ˙˙‹kƒÆ‰č+C Áø9Æ|փėjD$4Pčü˙˙˙šč‰Č‹L$<÷l$8‰D$(‰T$,‰ČēĶMbÁų÷ęÁú‰Đ)șD$(T$,+D$ T$$Y˙t$‰C0‰S4čü˙˙˙‹ƒÄ‹R úuM¸1Ōh RPSčü˙˙˙X‹ZSW˙P(‹D$Į€€ƒÄL[^_]Ívŧ'ƒė P˙ԃÄé“ū˙˙fƒė P˙ԃÄ먐t&‹D$€x,uķÍt&éū˙˙vŧ'U‰åWVSƒė\‹ ‹]…É„ļ„Ā…ú€ģÜ„Åčü˙˙˙‹‹ø…É•Āƒė‰ĮļĀPhk hX čü˙˙˙^ƒđZļĀPSčü˙˙˙‰EČļƒÄ„Ā…Ž1Ā€=…v‰ƒāEāƒė‹ŗĖjPčü˙˙˙šč‰Č‹Mä÷mā‰EЉUԉČēĶMbÁų÷ęÁú‰Đ)șEĐUԉƒč‰“ėX‹Z˙sV˙P‰øƒÄ„Ā…IĄ‰Á‰E¸Áé…‰M¨„7ƒˆÆEŋĮEˉE¤´&‹{X‹CT9Įt!‰EЍv‹EЃė ˙0čü˙˙˙ƒEĐƒÄ‹EĐ9ĮuåEāƒėjPčü˙˙˙¸č‹Mä÷mā‰EЉUԉČēĶMbÁų÷ęÁú‰Đ)ș‰Ņ‰ÂUĐMԋEȃÄ…‰U‰MÄޤ€=…¯‹ƒė˙uĖ˙sV˙P X‹Z˙sV˙P‹CL‹{HƒÄ9øt0‰EĐë vƒĮ9}Đt ‹‹‹@=tęƒė ƒĮR˙ЃÄ9}Đuᐃė‹˙sV˙PƒÄčü˙˙˙„Ā…„‹CX‹ST‰Á)ЃøŽq1˙‰MĐé.´&ƒė‹˙uĖ˙sV˙P ƒÄEāƒėjPčü˙˙˙¸č‹Mä÷mā‰EЉUԉČēĶMbÁų÷ęÁú‰Đ)șEĐUÔ+EĀUÄƒÄ ‰ƒđ‹‰“ô˙uĖ˙sV˙P4‰$čü˙˙˙ƒÄ…ĀŽyÆEŋƒė Sčü˙˙˙ƒÄ€=…,ƒEĖ‹EĖ9E¸…4ū˙˙€}¨…*ū˙˙ļEŋƒđ‹ƒėˆEĐ˙sV˙R8ļEЃÄeô[^_]Ãė h„čü˙˙˙ƒÄeô1Ā[^_]ÃÆE¨ĮE¸éŋũ˙˙v‹š…Āx'‹‚€x,u(‹EЃĮ)ĐÁø9Į}9‹K`‹Cd)ČÁø9Į|Ōļ, č{ú˙˙‹CX‹STƒĮ‰EЋEĐ)ĐÁø9Į|ʍv‹ƒė˙sV˙P,‹CH‹{LƒÄ9øt7‰EĐë fƒī9}Đt(‹Wü‹‹@ =téƒė ƒīR˙ЃÄ9}Đuā´&ƒė‹˙sV˙P0ƒÄéNū˙˙t&‹ģāG˙=ž†w]ƒĮ¸˙Ÿ†Oø‰ģāé¨ū˙˙t&ƒė ˙u¤čü˙˙˙ƒÄ„Ā…qū˙˙épū˙˙t&‹ƒāƒė ‰ƒäSčü˙˙˙ƒÄé4ũ˙˙Eāh˜hËjPčü˙˙˙YXhđhčü˙˙˙YZh. Pčü˙˙˙YZWPčü˙˙˙YZhC Pčü˙˙˙YZhŸ†Pčü˙˙˙YZh§Pčü˙˙˙Eā‰$čü˙˙˙ƒÄé-˙˙˙‰ØčNä˙˙é/û˙˙‹ …ÉtDƒéē;Ƨ‰Č÷âÁęiŸ†)ÁAéaû˙˙ƒė ˆEĐSčü˙˙˙ļEЃÄeô[^_]øé¸ũ˙˙EāƒėjPčü˙˙˙‹MäēĶMbƒÄ‰ČÁų÷ę‰ĐÁø)ČiMāčÁ늉ÍEāƒė Pčü˙˙˙‰$čü˙˙˙fĄU‰åVS‹@ô…ĀtW1ö‹E1Ō‹H$ļˆ¸h(RPQčü˙˙˙ƒđƒÄ…öļØt€>t ƒė Včü˙˙˙ƒÄeø‰Ø[^]Í´&ƒė hV čü˙˙˙ƒÄ…‰Æt“€8tƒėh Pčü˙˙˙ƒÄ‰ÃPjjh:čü˙˙˙‰$čü˙˙˙ƒÄé^˙˙˙…ö‰Ãt€>t ƒė Včü˙˙˙ƒÄƒė Sčü˙˙˙vŧ'U‰åWVSƒė8‹]sVčü˙˙˙ƒÄ…‰EÔuačü˙˙˙‰C ‹C$ƒė ÆCPčü˙˙˙‹PƒÄJô‰H‹Büƒč =…įƒė ÆCVčü˙˙˙ƒÄ…‰Ãuqeô[^_]Éöŧ'}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YX˙uÔhčü˙˙˙‰<$čü˙˙˙ƒÄéC˙˙˙t&}ähHhDjWčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙ƒÄeô[^_]ÍvUä言ū˙é ˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ‰ÃVčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙vŧ'ƒė čü˙˙˙‰D$ƒÄ éü˙˙˙ļŋU‰åWVSƒė8‹]‹u {Wčü˙˙˙ƒÄ…‰EĐ…Ščü˙˙˙‰C ‹C$ƒė ÆCPčü˙˙˙‰Á‰EԃÄ‹@;A„!…Āt$‹ƒėƒÆƒĀ‰Pø‹Vü‰PüVPčü˙˙˙‹EԃÄ‹@‹UÔƒĀ ‰Bƒė ÆCWčü˙˙˙ƒÄ…‰Ãureô[^_]Ívŧ'Eäh<hDjP‰EÔčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙XZ˙uĐhčü˙˙˙Y˙uÔčü˙˙˙ƒÄé˙˙˙EähHhDjP‰Į‰EÔčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰<$čü˙˙˙ƒÄeô[^_]ÍļƒėVP˙uÔčü˙˙˙ƒÄéûū˙˙ƒė ˙uԉÃčü˙˙˙‰$čü˙˙˙ƒė ‰ÃWčü˙˙˙‰$čü˙˙˙ƒė ˙uԉÃčü˙˙˙‰$čü˙˙˙ļU‰åS]čƒė,‹E ĮEô ‰Eė‹E‰Eđ‹E˙0Sčü˙˙˙Eô‰$Pčü˙˙˙‹EčƒÄƒč =u,čü˙˙˙UėƒėRPčü˙˙˙‹EôƒÄƒč =u‹]üÉЍt&Uįč(~ū˙ëʍļ‰Úč~ū˙‹]üÉÉËEôƒč =tUįčũ}ū˙ƒė Sčü˙˙˙‰Ã‹Ečƒč =tĶUįčŨ}ū˙ëɐvŧ'U‰åWVSƒė‹E‹} ‹@‹„°ˆJ…ŌEņ‹^$;^(tr…ÛtD‹ƒė‰GPCPčü˙˙˙‹G‰CYXG PC Pčü˙˙˙XGZPCPčü˙˙˙‹E‹^$ƒÄ‹@ƒÃ‰^$‹€Ėƒė‹WP˙R ƒÄeô[^_]Éöŧ'ƒėƒÆ WSVčü˙˙˙‹EƒÄ‹@ëÉƋCƒč =tUįč}ū˙ƒė Včü˙˙˙‰Æ‹C ƒč =tĶUįčā|ū˙ëɍ´&ŧ'U‰åWVSƒė‹}‹u ‹_$;_(tY…Ût>‹ƒė‰FPCPčü˙˙˙‹F‰CYXF PC Pčü˙˙˙XCƒÆZVPčü˙˙˙‹_$ƒÄƒÃ‰_$eô[^_]Éöŧ'G ƒėVSPčü˙˙˙ƒÄë܉ƋCƒč =tUįč6|ū˙ƒė Včü˙˙˙‰Æ‹C ƒč =tĶUįč|ū˙ëɍt&U‰åWVSƒė‹}‹u ‹_;_tY…Ût>‹ƒė‰FPCPčü˙˙˙‹F‰CYXF PC Pčü˙˙˙XCƒÆZVPčü˙˙˙‹_ƒÄƒÃ‰_eô[^_]Éöŧ'ƒėVSWčü˙˙˙ƒÄë߉ƋCƒč =tUįčy{ū˙ƒė Včü˙˙˙‰Æ‹C ƒč =tĶUįčY{ū˙ëɐļU‰åWVSƒė‹E‹u ‹x ‹_;_tV…Ût>‹ƒė‰FPCPčü˙˙˙‹F‰CYXF PC Pčü˙˙˙XCƒÆZVPčü˙˙˙‹_ƒÄƒÃ‰_eô[^_]ÍļƒėVSWčü˙˙˙ƒÄëâ‰Æ‹Cƒč =tUįčšzū˙ƒė Včü˙˙˙‰Æ‹C ƒč =tĶUįč™zū˙ëɐļU‰åWVSƒėD˙u˙u ‹]čü˙˙˙ƒÄ„Āueô[^_]Ívŧ'ƒė Sčü˙˙˙ƒÄ…‰Æ…Rčü˙˙˙‰CE˃ėÆCuĖP‹E˙0Včü˙˙˙XZVuĐVčü˙˙˙‹C0Y_‰EĀ‹C,VuØV‰Eŧčü˙˙˙XEāZVPčü˙˙˙_uÜXEāPVčü˙˙˙‹EāƒÄ}äƒč =…ƒƒėVWčü˙˙˙EÄÆ$W˙uĀ˙uŧPčü˙˙˙‹EäƒÄ‹uăč =…^‹E܃č =…]‹E؃č =…\‹EЃč =…[‹E˃č =…Z‹C09đ‰EĀ„´EāƒėP‹E˙pEÔPčü˙˙˙XEԃÆZPVčü˙˙˙‹Eԃăč =…#ƒė Sčü˙˙˙ƒÄeô[^_]Í´&}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙YXVhčü˙˙˙‰<$čü˙˙˙ƒÄéTū˙˙ļ;s4„Ģ…öt*ƒė˙uVčü˙˙˙‹EY^ƒĀP‹EƒĀPčü˙˙˙‹C0ƒÄ‰EĀ‹EƒĀ‰C0é@˙˙˙v‰účIxū˙éqū˙˙t&Uāč8xū˙é•ū˙˙v‰úč)xū˙é—ū˙˙t&‰účxū˙é˜ū˙˙t&‰úč xū˙é™ū˙˙t&‰účųwū˙éšū˙˙t&‰účéwū˙éŅū˙˙C,ƒė˙uVPčü˙˙˙ƒÄéšū˙˙‰Æ‹Eāƒč =tUäčĩwū˙‹E؃č =tUÔč wū˙‹EЃč =tUÔč‹wū˙‹E˃č =tUÔčvwū˙ƒė Sčü˙˙˙‰4$čü˙˙˙‰Æ‹EĀ‹ƒč =tŪ‰účMwū˙ëÕƒė ‰ÃWčü˙˙˙‰$čü˙˙˙‰Æëž‰ÆëĨ‰ÆëŒ‰Æép˙˙˙‰Æ‹E܃č =„]˙˙˙Uāč wū˙éP˙˙˙‰Æ‹Eäƒč =tĶUāčîvū˙ëɉƋEԃč =„c˙˙˙냐ļU‰åVSƒė‹]ĮEô ‹“„…ŌtDuôƒėjhģ Včü˙˙˙‹›„ƒÄƒÃƒė˙u VSčü˙˙˙‹EôƒÄƒč =u8eø[^]Ћƒ€…Āt6uôƒėj hą Včü˙˙˙‹›€ƒÄƒÃ8밐t&Uķč8vū˙eø[^]ЍuôƒėhĻ Včü˙˙˙ƒÄÃˆé|˙˙˙‰Ã‹Eôƒč =tUķčúuū˙ƒė Sčü˙˙˙U‰åVS]đƒė˙u Sčü˙˙˙YEô^˙uPčü˙˙˙X‹EZS˙p$čü˙˙˙‹EôƒÄƒč =u‹Eđƒč =u#eø[^]Ít&Uīčuū˙‹Eđƒč =tāvUīčxuū˙eø[^]ÉËEđƒč =tUīčZuū˙ƒė Sčü˙˙˙ƒė ‰ÆSčü˙˙˙‰4$čü˙˙˙´&ŧ'ƒė čü˙˙˙ƒė˙t$˙t$Pčü˙˙˙ƒÄÐfU‰åSEėƒė Pčü˙˙˙X‹EėZ˙u ƒĀPčü˙˙˙YEđ[˙uėPčü˙˙˙X]ôEęZP˙uđSčü˙˙˙ƒÄčü˙˙˙ƒėS˙uPčü˙˙˙‹EôƒÄƒč =u*‹Eđƒč =u5‹Eė…Āt ƒė ‹P˙RƒÄ‹]üÉЍt&Uëčxtū˙‹Eđƒč =t΍v‰Účatū˙ë‰ËEė…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‰Ã‹Eôƒč =tUëč*tū˙‹Eđƒč =tĀUëčtū˙ëļ‰ÃëåļD$ÃķËD$…Āt‹‹B˙āķËD$…Āt‹‹B˙āķÃ1ĀËD$‹@$˙ā‹D$‹@(˙āķÃķÃķÃ1ĀÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃķÃU‰åWVS}ä‰Ķ‰Æƒė8‰MÔWčü˙˙˙ƒÄ…Û‹EätSƒĀQQh|Pčü˙˙˙ƒÄ‰Ú‰øčĖ RRh˃ĀPčü˙˙˙ƒÄPP‹EähōXSčü˙˙˙‹UԃĉøčĖ ëƒĀSShŅPčü˙˙˙ëÉQQhP‹ƒÂRčü˙˙˙XZ˙uäVčü˙˙˙‹EäƒÄ …Āt,ƒė ‹P˙RƒÄë‰Ã‹Uä…Ōt ƒė ‹R˙PƒÄƒė Sčü˙˙˙eô‰đ[^_]ÐķÃķÃķÃķÃķÃķÃķÃķÃķÃéü˙˙˙éü˙˙˙éü˙˙˙éü˙˙˙éü˙˙˙éü˙˙˙éü˙˙˙éü˙˙˙˙˙,Xq˙˙''A€qĖą€ŧŗû€Ž€˙˙$Wo˙˙ 0DR˙˙ 0€Qwm˙˙ +@N˙˙6Yíœ˙˙ 5Ãun˙˙l•˜¤˙˙ B‘ĸĻ˙˙ Bh‚˙˙ iĐí˙˙5AQķ]ŒpŠî˙˙\e¯mÕĐ˙˙-Ž6•>°eА˙˙&›.Ô7ģQ›ļ˙˙5ÂAü[Âcâ–ÂŨ˙˙&'QxY˜“˙˙MVŅo˛Ė˙˙*%ē;|ž…׍đĮžĩ˙˙?\˛Ė˙˙ŒŲąœŗûö˙˙,B˙Ņ҇EŅę˙˙.wŊĩÖ˙˙IWm’ÖŧN“īĩĘ"ũ‡ĸ‹ĖN‡ŖĢÁ‡Ļ˙˙"8,Ĩvž˙˙A6ÆŠŋÆß˙˙*'2Ũi¤vÛ­ÄÜÛˆŨŋ˙˙+9ŽO)ÛŠBŽÖ’ōŠŽ‰˙˙,’ŗ ˇ˜ÉœŨ”Ëû˙˙o(hĄˆášĘƐ ŅŨ ķ Ĩˆ ŊøĘĮ Õ” ÷Į ĸ•ąŗžŲ ÉĻ įŲ Ž˙˙'đŠÕäŦˆ“ĘŽ§˙˙'“đģÉīĻČˆĄ˙˙-ōШ䐤÷æŦK÷‹Ķ˙˙-„ĸŦˆįĀ˧ŽÔS§ģƒ˙˙ a*›Áρ÷1Îü˙˙+E`ĶãĩЁĄ$ĶųĩŽÎ˙˙82ŠēŅåÜôĄ•ÜĒë%ē˜˙˙ +Ÿ@›oÜ‘ŸŊ›–˙˙+Ä1†@Šn†‰ÛĢÄĨ†Ö˙˙$Zt˙˙ %8R˙˙,Vp˙˙/qЏ˛ŧÂíŗ˙˙%\¤tŊ­¤č¸˙˙6Pēœ>˙˙ %Wr˙˙ %Wr˙˙I9b˙˙+Ũ‘ą üíD˙˙9ØŠÜŪÔ…ĐœŪÂĐí—ЍÍ˙˙FRĸgÂŊ˙˙FRĸgÂŊ˙˙9Š‰Ū……“œ‹É“ôŸ“Ō”˙˙FRĸgÂŊ˙˙"„ŽĩûÁÍČ˙˙!PAi˙˙+æ;ąDęWėá˙˙"0‚´Ī˙˙#ˇÍßí’Û˙˙%TEm˙˙l„’ĸ˙˙8F Ęwę•Ęå˙˙5$JärÅĶ…ņ?ēčāWÁËŪŋ˙˙ -G˙˙"'0é=ÕMŅVÍ^‰§b˙˙`?L… Yū f÷ xđ ’é Ŗâ ŗÛ ÄÔ ŅÍ âÆ ōŋ ƒ¸ “ą ¤Ē ŗäßË˙˙I-é<ĖHĸzé‚ЏßĶéæõķۇזĶĸí˙˙OŒYĢĻ˙˙."@´Lŗ\›j—sÔƒˇÚ´Ī˙˙AyäŨø˙˙)=?•Ūl¨‹•Ŗ,˙˙3%9Uƒäîõ(Š2”Ūüĸ˙˙.T}p‹˙˙0D&|mŠ˙˙8L&„u’˙˙@T&‡}•˙˙#&!V;ü”)ĖøčŒ˙˙EYjŸÆ/„˛­Ā˙˙,5ī Nuč Ō.ö  č ­ų Ķī Ąč ēaŽ Æč Ú.Ķ °č Áž É"č ú.­ đ[č Õ’ ūE– Ķ’ čp¤  – ô ˙˙ w§˙˙ ‚˛˙˙ 6¨œA˙˙ 6̤<˙˙+(‚T!Ô„;†Â3Ô„Đ Ôũ˙˙'ž:ĻHĸÖ˙˙'ž:ĻHĸÖ˙˙"?ŅJÕu•˙˙:#8ŋDåXÕdŨtĘ‚á–ŅŖŲąÆ•˙˙!†/Šē˙˙€”&ĘŊØ˙˙@T&Œ}š˙˙Pd&—Ĩ˙˙%xÂŒ&Õ¸ÂĐ˙˙#`t(Ÿ&Ô& ũ›Ž˙˙#`t(Ÿ&Ô&Ŗũžą˙˙#h|(˜§&Ü&Ģ…Ļš˙˙#h|(˜§&Ü&Ģ…Ļš˙˙$K-‡&Ÿą)é&´’¯Ä˙˙ĀÔ&ũ›˙˙0-™=‘i!™;•×FŦČŲ˙˙NTŅjuņīҝņė˙˙$Œ-Ŧ§˙˙ &jP:˙˙&%ŠŲŨÕôŖŋ%ŲĐ˙˙#"9éEšUˇ`‰Ĩé„˙˙/.ŦhåsĖĮ˙˙5#)%ŋ[šgŸwÃ…Ž‘ŖĄ˛¯ŊŠ˙˙5 &%ˇXąd—tģ‚ĻŽ›žĒŦĩĄ˙˙<)2&ƒe´qč˙Á›ŊĢģšäēƒß˙˙(&ė5ô[ėqđ“Íėĸ˙˙4äcč…Š!ä–˙˙'ÄVČxĨÄö˙˙4äcč…Š!ä–˙˙ ´O¸q•´æ˙˙4äcč…Š!ä–˙˙>&1¸_Ēžˇŧ与žļ<ļ˞øÛ–@˛­˙˙5äd膊!ä–˙˙"xN‘×ŋ÷0‘¸¨ØY‘Ŗ˙˙&fN˛Å›å0˛ĻņÆY˛–˙˙2dDĄĩĪÔ:ĄŸ¸ŊFĄæ¯Ąŗ˙˙:tIņÃÍáņ„ļĸ-ņāŸūNņŌˆđņƒ˙˙4äcč…Š!ä–˙˙4äcč…Š!ä–˙˙Zņpˆ‘ ņŸā-ņļģņŪÍü ņ­äË ņüūšņŧœ Ú-ņ˜ē ļņØØ ö-ņ´ö Ōņô” ’ņƒ˙˙4äcč…Š!ä–˙˙FRņmM‘Ëē鑌˙˙"O7é—€ĩ éæ—„)éû˙˙!Oé~€œ éÍ—ëBéû˙˙]­ė Õ§Ŧ˛đ ¨ô ĐüŠū­Ą×Ĩû>ŸÍŖķIŸģ đ ņ Ŧ÷˙˙]§œĪŨ‰Ų˛Ō¨ÎĐõŠņŗíŨé >¤Ķ  ų I¤Á Ō÷ Üä˙˙6d&œĒ˙˙ .ã]&č†ã¸˙˙$bFˇPÅ‹-ĮmɸÛî˙˙!Õû›Š—ŋ>‡Ęī[˙˙!Ú€ŖŸÄF”Ō÷[˙˙ޝŪų˙˙Ž%ŨŠ˙˙*ĶKČÃ˙˙S,§‡āĀø’“ÚÕ×īę”ô†đ§ĘØđė&ô•đŖ×å˙˙$,áp„&έÄáÜō˙˙% 5æEԍėĄ&ÂĘėŊ˙˙4$ā9ŠNøfôväü¤&ĐÍüË˙˙H"'hÂtÚˆŪŖ¯˛ÁēâŌûŨâΤÚŊÂŨ˙˙c%”Đ ÷É Ų° ũ¤&Đũí°(é Ŧ°Đü ä&ƒ ü °™ Ä& đ™ ˜˙˙"2â=Ã`t&­ žŨ˙˙ @u‡˙˙‹>GÄ O‹ €Ā ‘é ™¨ Ą¯ Ãą Ή áí ęėØ8Ā š¤ Ģī ßņ ˜Šŗąšš–ŨĖåĪ õČ €ˇ‡˙˙Ĩ7wŊÖ ŌČ æĪ üÆ ô ¤† ¸Ä žƒ ØíÍ ūķ ™Í ŽĒ:Ŧ úđ ‹@Å Îđ ūŲŦ ˆ™(ŗ ÄõŦ ¯ §į¯¯ Ē Á ˙˙8C0 ‘¤ĸ¨¯Ŧ°Ҏâžčí›˙˙9'c–„¨ŲšÕÆŅ×ÍčÉųÂ˙¤Ÿ˙˙/7EØWÔhĐxˉ­šŠ ĨĮ˙˙/7EØWÔhĐxˉ­šŠ ĨĮ˙˙0CQäcāt܄ؕšĻĩŦąĶ˙˙0CQäcāt܄ؕšĻĩŦąĶ˙˙ *=B]˙˙ô&kĘ Ą´ø Čč Đø ‹˜ ĀÔŖú ¸Ä Ëų Ü’ ęĢ ûÄ ‰ŋ Á ˛Ãà Øē ëä üæ Š⠛ü Šč ¯Ą 끠“Ā Ļž ĩŧ Æē ÔŨ Úßø$Ž ŗ  Ŧ Õ Ĩ á ž ō — €  † ‹ ˙˙Q IY‡j {šˆŌ™ëĻ„§yĨ…Œšî§ší÷ōé˙˙‹$K…’•™Ļ ĩŅČØÕßÛÁęûæ‹Ęž§ĢíąÍĘÛôíû€‚ĩ ŧąÃÂŽČßŧ˙˙# í6´AR´‰(íˆ˙˙5ˆYˆĄ˙%ÂÖ¯ģŪãî˙˙CW‰_*—˙˙'ØŠŽŨĒôܯŽĨ˙˙:FĘ[ęå˙˙+VbŦ}¨­‘Í8¨–š´¨Œ˙˙+:F¨a¤‘Ėą8¤úŦ˜¤Ÿ˙˙+:F¨a¤‘Ėą8¤úŦ˜¤Ÿ˙˙+:F¨a¤‘Ėą8¤úŦ˜¤Ÿ˙˙+:F¨a¤‘Ėą8¤úŦ˜¤Ÿ˙˙. ­;ŠJßVÜzÄ…šą­—˙˙2'î3ŌLv[ÛÖŽŸü´ŠH˙˙6%Õ1ŊDĩ—ąĻ¯Ëą××Î?ąĐ˙˙(iŦŦÚĖĮ˙˙ (eI\`˙˙E8~ôŊ1¤ĖŊ’€¤áĩŋžÁÚŸįÁūą¤Á˙˙0Aú™~˙˙0FŊ¯ÎØŊØ˙˙2JŪ¯ĐöŪų˙˙CW‰_*—˙˙g”&ĮŊÕ˙˙nœ&ĪÅŨ˙˙v¤&×Íå˙˙´&ęāû˙˙5ŸĀ&Šé,¤(÷ĪfÄ&í…˜Ģ˙˙%˙ĄžÁ$ņą‘Ŧŋ˙˙E ü—(ØÃ%÷(—Ŗ%Ô‚õ+ŦíËčũ’§˙€õ ŖŋŨ*áŲ*ũÕ*•Ņ*ąĘ*Á)Ō–)į’)üä/ĄŨ/ļÖ/ĘĪ/ŪČ/ķÁ/‡ē/ŗ/ąũ(Áö(Õī(ë…&°ø!ą “$š û# Jí#” ë/ŋ ´í#‡Ŗ4œœ4°•4ĀŽ4Ô‹)č„)î¯×ší#¤„3šũ2Íö2Ũī2ņ¸…‹‹ŋš…í#ŗë2Čį2Üã2ėė1€Š4”†4¨‚4Ž‹3Ķí#ėŋ6¸6•ą6ĨĒ6šÍ6ÍÆ6áÔ6į­$‹í#¤Ļ6šĸ6Íž6Ũ—6ņ6…‰6™‚6ŸĒ4ˇí#ĩÔí#íč1‚ ä1– ā1Ļ Ü1ē Õ1Î Î1Ô ‘0ķ í#Œ!é#Ą!å#ĩ!á#Å!Ũ#Ų!Ö#í!Ī#ķ!’""í#¨$Û6ũ*™+ą/Ž+¯/Ä+­/Ö+Ģ/ė+Š/‚,§/ˆ,š-Š,Å,Ŗ/Ú,Ÿ/đ,›/‚-”/˜-/Ž-†/´-/˙YNWw!ŧ›äĪ“ŅÜí‹øĖœû”ˇĘčī°Ģŧ˙˙%HÖWFŊ˜ÖŠU›Ö¸˙˙Į.šV˛gŖĒšŋŸĐË “š¨íšŒ€š•…Ļų ŨšņŦ…ĀŊšŌĨé‰ šŽšƒš“¯÷Öķčīų'ÉØķč°ŒŦ˜ÍžŦ’ ūšÆ ˙˙„,(Î dĘ vĀ ļÎ Ę‚ Üē ŠÎ °î š ‚Î –ą ¨‡ âÎ ÷Ú ‰Õ ĀÎ ŅĶ æū›Î Ēĩ “NÎ ģ ˙˙Ģ&Sƒˆë—ŠÔƒûŒ Šâ ăëÉ úËšƒÎŖŨŲ  ƒŗĒ› …ƒ˜ö §É ôƒˆÅ — ׃æú ƒ¤Įļ’é°ƒ– ˙˙B"Ë1Į7Q§ęĩđÔûôĸŽĮôø§Â˙A7' sÜÔđÚ“āÉØŖÆÁŠšÔī}˙˙JWûŠ1ųÕ<âļųÖŖœûĸ¸‡û Í¨ŖŪôYų˙˙ 2ĒpY˙˙$8EŒŌđš ęøX˙˙$@N×ō…¯"ę… ˙90,Ųžœ­ēËë!ƒĩĖčí˙˙O(‡FCĢęŊæÍĄķ‹Â‡×÷˝ŌGÆ‚ū–‘‹˙˙1¯IĪĘ˙˙(Ė=ĐfÔsúĐĮ˙˙-3|ŗ˜ŋĖĶß›¯‚ķŸĶî˙˙&­/Āģ˙˙9 gÆē Ėéé8¯ŗ“ įĒ ˆŋEē ŸE“ Ž ˙˙'%OēãĐRš¸ŽÂįėãŪ˙˙ ]x˙U>+hI”ÉžÅë†ģˇ­Ëķîū}}˙U>+hI”ËžĮíˆŋ’ģ¯Ī÷ō‚}}˙U>+hI”ÉžÅë†ģˇ­Ëķîū}}˙˙6äĻ B‡ î N˜ ˙U>+hI”ËžĮíˆŋ’ģ¯Ī÷ō‚}}˙˙ 5ĩŒI˙˙/7␤(ķĪ&„&Í­Ûî˙E88-¤*ãžĖáūįÉß­ĐË”Äßú}˙˙5>8ĸÃ×(ĩƒ'š&â€ĸ°Å˙˙#Œ/ŦDŒ§˙!3sHyWuŅØã}˙]R/D‘SČt‰˜šÎxĩÂá‹ö„…Û˜áĒߎ‚Ė8}˙˙AVšeŲ‰P˙˙*?ƒNŖy*˙˙*?€N v*˙˙-B€Q v*˙)T8V–›Ļ}˙YL'6 R^ęŠ<æ¨ÄîÕęų߈ۨ¤ũ#¨×ąļ}˙˙dbØn܆ā’äĄÄÂë֋ը䤁,ŧ&ÅåŒØĄĢˇØĻĶ˙˙ *‡ŋÚ˙˙+Ÿš˙˙ ą<ũDĪ€Ę...\n[ DEATH ] basic_string::substr%02X(null)\0autoTERMxtermxterm-colorxterm-256colorscreenscreen-256colorlinuxcygwinyestruet1[0;3%sm[----------] [ RUN ] %s.%s, where %s = %s and [ FAILED ] ]]>]]>Non-fatal failureSuccessFatal failure:: : Value of: Actual: Expected: ()" thrown in Unknown C++ exceptionWARNING: has value "". %s has value , which overflows. The value of flag --0Environment variable = , but have left unset. < , but you have =, . <>&'"&#x; (ignoring case) Which is: (Invalid Unicode 0x\'\\\a\b\f\r\t\v\x'\"" (no terminating NUL)NULL pointing to L"%testtests%s from %s, where %s = %s Google TestNote: %s filter = %s [==========] test casetest casesRunning %s from %s. [ OK ] (%s ms) %s from %s (%s ms total) TESTTESTS%s from %s ran. (%s ms total)[ PASSED ] %s. %2d FAILED %s YOU HAVE %d DISABLED %s %s, listed below: T_[WARNING][ INFO ][ FATAL ][ ERROR ]./src/gtest-port.ccOnly one stdoutstderr./src/gtest.cc./src/gtest-internal-inl.hfailed with error pthread_mutex_unlock(&mutex_)pthread_mutex_lock(&mutex_)Condition range > 0 failed. ) was requested, ).Death test: Result: failed to die. Error msg: Expected: Actual msg: Exited with exit status Terminated by signal (core dumped) ./src/gtest-death-test.ccevent=TestStart&name=event=TestCaseStart&name=event=TestProgramEnd&passed=event=TestPartResult&file=&line=&message=event=TestProgramStartFailure Unknown result type, you tried test cases.%s %sevent=TestEnd&passed=&elapsed_time=msevent=TestCaseEnd&passed=1 fatal failure1 non-fatal failureExpected: Actual: failures Actual: containing "" not a substring of Which is: The difference between is , which exceeds , where evaluates to , , and Expected: () != (), actual: vs ), actual: "" vs ") (ignoring case), actual: ") <= () pthread_key_delete(key_)Invalid shuffle range start : must be in range [0, ].Invalid shuffle range finish : must be in range [, 0xL' []unexpected status byte (, line posix::Close(read_fd()) != -1CHECK failed: File read_fd_ == -1pipe(pipe_fd) != -1child_pid != -1close(pipe_fd[0])close(pipe_fd[1])Death test count (fastUnknown death test style "" encounteredclose(args->close_fd)chdir("") failed: execve(, ...) in failed: xml) < () >= () > ( is listed more than once. No test named You forgot to list test Test @-h-?/?--help|stack != MAP_FAILEDtestsuitestestsuitetestcaseCondition false failed. Attribute is not allowed for element <>.="runnotrun > <failuresdisablederrors this->size() (which is %zu)vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)Global test environment set-up.Global test environment tear-downXML output file may not be null Could not write to the test shard status file "%s" specified by the %s environment variable. Invalid index (%d) into TestPartResultArray. C++ exception with description " is expected to be a 32-bit integer, but actuallyThe value of environment variable The default value %s is used. Invalid environment variables: you have Invalid environment variables: we require 0 <= Repeating all tests (iteration %d) . . . Note: This is test shard %d of %s. Note: Randomizing tests' orders with a seed of %d . capturer can exist at a time.Condition sockfd_ == -1 failed. MakeConnection() can't be called when there is already a connection.stream_result_to: getaddrinfo() failed: stream_result_to: failed to connect to Condition sockfd_ != -1 failed. CloseConnection() can be called only when there is a connection../include/gtest/internal/gtest-port.hpthread_mutex_destroy(&mutex_)Send() can be called only when there is a connection.stream_result_to: failed to stream to Cannot generate a number in the range [0, 0).Condition range <= kMaxRange failed. Generation of a number in [0, but this can only generate numbers in [0, Result: threw an exception. Result: illegal return in test statement. Result: died but not with expected error. Result: died but not with expected exit code: DeathTest::Passed somehow called before conclusion of testevent=TestIterationStart&iteration=pthread_mutex_init(&mutex_, NULL)Attempted redefinition of test case All tests in the same test case must use the same test fixture class. However, in test case to define a test using a fixture class different from the one used earlier. This can happen if the two fixture classes are from different namespaces and have the same name. You should probably rename one of the classes to put the tests into different event=TestIterationEnd&passed=Condition 0 <= begin && begin <= size failed. Condition begin <= end && end <= size failed. gtest_streaming_protocol_version=1.0WARNING: unrecognized streaming target "%s" ignored. pthread_key_create(&key, &DeleteThreadLocalValue)Error while reading death test internal: Death test child process reported Read from death test child process failed: posix::Write(write_fd(), &status_ch, 1)waitpid(child_pid_, &status_value, 0)Cannot run a death test outside of a TEST or TEST_F constructDeath tests use fork(), which is unsafe particularly in a threaded context. For this test, couldn't detect the number of threads.) somehow exceeded expected maximum (WARNING: unrecognized output format "%s" ignored. Condition typeid(*base) == typeid(Derived) failed. Condition !original_working_dir_.IsEmpty() failed. Failed to get the current working directory.basic_string::_S_construct null not valid can be found in this test case. pthread_setspecific(key_, holder_base)fcntl(pipe_fd[1], F_SETFD, 0) != -1sigaction( SIGPROF, &ignore_sigprof_action, &saved_sigprof_action)stack_size > kMaxStackAlignment && reinterpret_cast(stack_top) % kMaxStackAlignment == 0munmap(stack, stack_size) != -1sigaction(SIGPROF, &saved_sigprof_action, NULL)Unrecognized xml_element provided: Condition std::find(allowed_names.begin(), allowed_names.end(), name) != allowed_names.end() failed. Bad --gtest_internal_run_death_test flag: Reserved key used in RecordProperty(): class, so mixing TEST_F and TEST in the same test case is is defined using TEST. You probably want to change the TEST to TEST_F or move it to another test using two different test fixture classes. This can happen if the two classes are from different namespaces or translation units and have the same name. You should probably rename one of the classes to put the tests into different test cases." is not a valid POSIX Extended regular expression.the test fixture's constructor This test program did NOT call ::testing::InitGoogleTest before calling RUN_ALL_TESTS(). Please fix it.Condition 1 <= seed && seed <= kMaxRandomSeed failed. auxiliary test code (environments or event listeners)... Google Test internal frames ...U‰åVS‹u‹‹F9Ãt#´&‹…Āt ‹ƒė P˙RƒÄƒÃ9^uæ‹…Āt‰Eeø[^]éü˙˙˙vŧ'eø[^]ÉË…Ōt ƒė Rčü˙˙˙ƒÄƒė Sčü˙˙˙U‰åWVSƒė,‹]‹C…Āt]uä‹E ƒė˙0Včü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =ueô[^_]ÍļUãč\eô[^_]Ѝ´&ƒė jčü˙˙˙‹{ƒÄ‰EÔĮ 9øt†…˙uät‹uäƒč =uƒė Wčü˙˙˙ƒÄ‹EԉCé\˙˙˙‰ōč\ëā‰Ã‹Eäƒč =tUãč\ƒė Sčü˙˙˙Sƒė‹\$ ‹Cƒč =u#‹C ƒč =u.‹Cƒč =uAƒÄ[Ít&T$č\‹C ƒč =tÔfT$č\‹Cƒč =tɍvŧ'T$č\ƒÄ[ÃSƒė‹\$ ‹Cƒč =u‹ƒč =u'ƒÄ[Ívŧ'T$č\‹ƒč =t܍vT$č\ƒÄ[ÃSƒė‹\$ ‹C$Įƒč =uĮƒė ƒÃSčü˙˙˙ƒÄ([ÍļT$č\ëØU‰åWVSƒė8‹}hŧčü˙˙˙‰Ã@4‰$‰EÔčü˙˙˙‹5ƃ¨‹ ĮC4Įƒ¤ÆƒŠ‹FôĮƒŦĮƒ°Įƒ´Įƒ¸‰3‰ ĮCY‹NôXjŲQčü˙˙˙XĄZ‹‰C‹@ôD‰jPčü˙˙˙Ą‹s ‹@ô‰C(Į ĮC44ĮC ĮC ĮCĮCĮCĮCĮC ĮC$‰$čü˙˙˙ĮC ĮC,ĮC0 YXV˙uÔčü˙˙˙XZ‹U Eä‰˙2Pčü˙˙˙X‹EäZ˙pôP‹ƒĀPčü˙˙˙‹EäƒÄƒč =ueô[^_]ÍļUãč\eô[^_]ÉÆë‰Ãë8‰Įëd‰ÃëE‹Vô‹= ‰Æ‰<ƒė ĮC4˙uÔčü˙˙˙‰$čü˙˙˙‰4$čü˙˙˙‹Eäƒč =tUãč\‹…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙ƒė Včü˙˙˙Y^hS‰ūčü˙˙˙ƒÄë‘X^€^€^€^8^^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^€^đ]€^]0nPoPoPoPoPoPoPnpnn°nĐnđnoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPo0oPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPoPon”02unknown file./This program contains tests written using Google Test. You can use the following command line flags to control its behavior: Test Selection: @G--gtest_list_tests@D List the names of all tests instead of running them. The name of TEST(Foo, Bar) is "Foo.Bar". @G--gtest_filter=@YPOSTIVE_PATTERNS[@G-@YNEGATIVE_PATTERNS]@D Run only the tests whose name matches one of the positive patterns but none of the negative patterns. '?' matches any single character; '*' matches any substring; ':' separates two patterns. @G--gtest_also_run_disabled_tests@D Run all disabled tests too. Test Execution: @G--gtest_repeat=@Y[COUNT]@D Run the tests repeatedly; use a negative count to repeat forever. @G--gtest_shuffle@D Randomize tests' orders on every iteration. @G--gtest_random_seed=@Y[NUMBER]@D Random number seed to use for shuffling test orders (between 1 and 99999, or 0 to use a seed based on the current time). Test Output: @G--gtest_color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D Enable/disable colored output. The default is @Gauto@D. -@G-gtest_print_time=0@D Don't print the elapsed time of each test. @G--gtest_output=xml@Y[@G:@YDIRECTORY_PATH@G/@Y|@G:@YFILE_PATH]@D Generate an XML report in the given directory or with the given file name. @YFILE_PATH@D defaults to @Gtest_details.xml@D. @G--gtest_stream_result_to=@YHOST@G:@YPORT@D Stream test results to the given server. Assertion Behavior: @G--gtest_death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D Set the default death test style. @G--gtest_break_on_failure@D Turn assertion failures into debugger break-points. @G--gtest_throw_on_failure@D Turn assertion failures into C++ exceptions. @G--gtest_catch_exceptions=0@D Do not report exceptions as test failures. Instead, allow them to crash the program or throw a pop-up (on Windows). Except for @G--gtest_list_tests@D, you can alternatively set the corresponding environment variable of a flag (all letters in upper-case). For example, to disable colored text output, you can either specify @G--gtest_color=no@D or set the @GGTEST_COLOR@D environment variable to @Gno@D. For more information, please read the Google Test documentation at @Ghttp://code.google.com/p/googletest/@D. If you find a bug in Google Test (not one in your own code or tests), please report it to @G@D. GetParam()TypeParamthrow_on_failurestream_result_tostack_trace_depthshufflerepeatrandom_seedprint_timeoutputlist_testsfiltercolorcatch_exceptionsbreak_on_failurealso_run_disabled_testsinternal_run_death_testdeath_test_use_forkdeath_test_stylefastM % A H 6 * ­ ļ ¤ % 9H ­ ļ ¤ % Î 9H Ä GTEST_SHARD_STATUS_FILEGTEST_TOTAL_SHARDSGTEST_SHARD_INDEXtest_detail.xml**DeathTest:*DeathTest/*DISABLED_*:*/DISABLED_*` Stack trace: Sƒė‹\$ ‹C$Įƒč =u%Cƒė ĮPčü˙˙˙‰$čü˙˙˙ƒÄ([ÍļT$č\ëĐWVSƒė‹t$ ‹|$$‹9ût…Ût‹ƒč =uƒė Sčü˙˙˙ƒÄ‰>ƒÄ[^_Í´&T$č\ëŲU‰åWVSƒė‹u‹} ‹9ût1…Ût+‹C …Āx ƒė Pčü˙˙˙ƒÄ‹ƒč =uƒė Sčü˙˙˙ƒÄ‰>eô[^_]ÃfUįč\ëŪ‰Æ‹ Aô=tUįč\ƒė Včü˙˙˙U‰åVSƒė‹]‹u˙u Sčü˙˙˙‰4$čü˙˙˙ƒÄ PVSčü˙˙˙ƒÄeø‰Ø[^]‰Ƌ Aô=tU÷č\ƒė Včü˙˙˙U‰åWVSƒė8‹} ‹]‹uWčü˙˙˙YZ‰ÂĮ ‹‰UÔPôRSčü˙˙˙ƒÄ ˙uÔWSčü˙˙˙XZVSčü˙˙˙ƒÄeô‰Ø[^_]‰Ƌ Aô=tUįč\ƒė Včü˙˙˙U‰åWVSŊ`˙˙˙ėčWčü˙˙˙‹ÆEԋ Į…`˙˙˙ĮEĐÆEՋCôĮEØĮEÜĮEāĮE䉝,˙˙˙‰Œ,˙˙˙Į…0˙˙˙…,˙˙˙CôY^jPčü˙˙˙XĄZ‹‰Á‰…4˙˙˙…4˙˙˙Aô‰jPčü˙˙˙‹5‹ ‹Fô‰Œ,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ ‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙YX…8˙˙˙Į…8˙˙˙Į…X˙˙˙Į…\˙˙˙ PWčü˙˙˙‹E ƒÄ‹…Ā„•'˙˙˙ƒėRP…(˙˙˙Pčü˙˙˙‹…(˙˙˙4˙˙˙ƒÄ‹Pôč|p‹…(˙˙˙ƒč =… …8˙˙˙ƒėP˙učü˙˙˙‹…\˙˙˙ƒÄ Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =…ĸ…T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙‹Fô‹5‹‰´,˙˙˙Ą‰…4˙˙˙‹@ô‰”4˙˙˙‹Cô‰,˙˙˙‹ ‰<$‰œ,˙˙˙Į…`˙˙˙čü˙˙˙‹EƒÄeô[^_]Âļ…4˙˙˙ƒėhPčü˙˙˙ƒÄé˙˙˙t&•(˙˙˙č\éN˙˙˙´&•&˙˙˙č\éåū˙˙‰Ãë'‰Ãë:‰Ãë[ët‰Ã‹…(˙˙˙ƒč =t •&˙˙˙č\…,˙˙˙ƒė Pčü˙˙˙‰$čü˙˙˙…8˙˙˙ƒė Pčü˙˙˙X…,˙˙˙ZhPčü˙˙˙ƒÄƒė Į…`˙˙˙Wčü˙˙˙‰$čü˙˙˙‹Sô‹5 ‰,˙˙˙‰Ã‰´,˙˙˙ëËU‰åWVSŊ`˙˙˙ėøWčü˙˙˙‹ÆEԋ Į…`˙˙˙ĮEĐÆEՋCôĮEØĮEÜĮEāĮE䉝,˙˙˙‰Œ,˙˙˙Į…0˙˙˙X…,˙˙˙CôZjPčü˙˙˙ĄY^‰Á‰…4˙˙˙…4˙˙˙Aô‹5‰0jPčü˙˙˙‹5‹ ‹Fô‰Œ,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ ‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙X…8˙˙˙Į…8˙˙˙Į…X˙˙˙ZPWĮ…\˙˙˙ čü˙˙˙‹E ƒÄ‹…Ā„•'˙˙˙ƒėRP…(˙˙˙Pčü˙˙˙‹…(˙˙˙4˙˙˙ƒÄ‹PôčĖs‹…(˙˙˙Pôú‰•˙˙˙……8˙˙˙ƒėP˙učü˙˙˙‹…\˙˙˙ƒÄ Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =…Ŗ…T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙‹Fô‹‹5‰”,˙˙˙Ą‰…4˙˙˙‹@ô‰´4˙˙˙‹Cô‰,˙˙˙‹ ‰<$‰œ,˙˙˙Į…`˙˙˙čü˙˙˙‹EƒÄeô[^_]´&…4˙˙˙ƒėhPčü˙˙˙ƒÄé˙˙˙t&•(˙˙˙č\éM˙˙˙š…Ét/š˙˙˙˙đÁHü‰Č…Āßū˙˙…&˙˙˙ƒėP˙ĩ˙˙˙čü˙˙˙밍t&‹HüQ˙‰Pü‰ČëЉÃëëL‰Ãëb‰Ãë)‰Ãëk…8˙˙˙ƒė Pčü˙˙˙Z…,˙˙˙YhPčü˙˙˙ƒÄƒė Į…`˙˙˙Wčü˙˙˙‰$čü˙˙˙‰,˙˙˙‹Sô‹ ‰œ,˙˙˙‰Ãëˋ…(˙˙˙pôūu…,˙˙˙ƒė Pčü˙˙˙‰$čü˙˙˙ēHü…ŌtƒĘ˙đÁ…ŌŌPP…&˙˙˙PVčü˙˙˙ƒÄ뾋PüJ˙‰HüëŨU‰åSEôƒė ‹]Pčü˙˙˙YX‹E ˙0‹EôPRčü˙˙˙XZ˙uôSčü˙˙˙‹UôƒÄ …Ōt ƒė ‹R˙PƒÄ‰Ø‹]üɉËUô…Ōt ƒė ‹R˙PƒÄƒė Sčü˙˙˙U‰åSEôƒė ‹]Pčü˙˙˙‹E ƒÄ ˙p˙0‹EôPRčü˙˙˙XZ˙uôSčü˙˙˙‹UôƒÄ …Ōt ƒė ‹R˙PƒÄ‰Ø‹]üɉËUô…Ōt ƒė ‹R˙PƒÄƒė Sčü˙˙˙U‰åVSƒė‹]˙u Sčü˙˙˙XZ˙uSčü˙˙˙ƒÄeø‰Ø[^]‰Ƌ Aô=tU÷č\ƒė Včü˙˙˙U‰åVSƒė‹]‹Cƒø˙tƒė Pčü˙˙˙ĮC˙˙˙˙ƒÄeø[^]ÍvuôhahËjVčü˙˙˙ƒÄ j hÜhčü˙˙˙ƒÄ j@hhčü˙˙˙‰4$čü˙˙˙‹CƒÄ떉Ãė Včü˙˙˙‰$čü˙˙˙U‰åVSƒė˙učü˙˙˙ƒÄ…‰Ãueø[^]ÍuôhyhDjVčü˙˙˙ƒÄ jhlhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeø[^]ÉÃė Včü˙˙˙‰$čü˙˙˙U‰åVSƒė‹EÆ@Pčü˙˙˙ƒÄ…‰Ãu eø[^]ÍvuôhHhDjVčü˙˙˙ƒÄ jhųhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeø[^]ÉÃė Včü˙˙˙‰$čü˙˙˙U‰åWVSƒė(‹]Sčü˙˙˙ƒÄ…‰Æučü˙˙˙ÆC‰Ceô[^_]Ѝ}äh<hDjWčü˙˙˙ƒÄ jhhčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙‰<$čü˙˙˙ƒÄ딉Ãė Wčü˙˙˙‰$čü˙˙˙U‰åWVSƒė‹]‹Cƒø˙„‹U ƒė‹‹rôVRPčü˙˙˙ƒÄ9ÆtjuähUhËjVčü˙˙˙ƒÄ j&hÄhčü˙˙˙‹CƒÄ ˙pôPhčü˙˙˙ƒÄ ‰Įjh“Pčü˙˙˙‹C ƒÄ ˙pôPWčü˙˙˙‰4$čü˙˙˙ƒÄeô[^_]Ít&uähPhËjVčü˙˙˙ƒÄ j hÜhčü˙˙˙ƒÄ j5hŒhčü˙˙˙‰4$čü˙˙˙‹CƒÄé ˙˙˙‰Ãë‰Ãëƒė Včü˙˙˙‰$čü˙˙˙ƒė Včü˙˙˙‰$čü˙˙˙U‰åVSƒė‹]‹CĮƒø˙tƒė Pčü˙˙˙ƒÄĮC˙˙˙˙‹C ƒč =u‹Cƒč =u"eø[^]ÍvU÷č\‹Cƒč =távU÷č\eø[^]ÉƋC ƒč =tU÷č\‹KAô=tU÷č\ƒė Včü˙˙˙U‰åVSƒė‹]‹CĮƒø˙tƒė Pčü˙˙˙ƒÄĮC˙˙˙˙‹C ƒč =u'‹Cƒč =u2ƒė Sčü˙˙˙ƒÄeø[^]Í´&U÷č\‹Cƒč =tŅvU÷č\ëĉƋC ƒč =tU÷č\‹KAô=tU÷č\ƒė Včü˙˙˙U‰åVSƒė‹E‹XĮ…ÛtS‹‹@=ut‹CĮƒø˙tƒė Pčü˙˙˙ƒÄĮC˙˙˙˙‹C ƒč =u6‹Cƒč =uƒė Sčü˙˙˙ƒÄeø[^]ÍļU÷č\ëŨļU÷č\ëĀļƒė S˙ЃÄeø[^]ÉƋC ƒč =tU÷č\‹KAô=tU÷č\ƒė Včü˙˙˙U‰åVSƒė‹u‹^Į…ÛtS‹‹@=u|‹CĮƒø˙tƒė Pčü˙˙˙ƒÄĮC˙˙˙˙‹C ƒč =u>‹Cƒč =u!ƒė Sčü˙˙˙ƒÄƒė Včü˙˙˙ƒÄeø[^]ÃfU÷č\ëՍļU÷č\븍ļƒė S˙ЃÄëĀ‰Æ‹C ƒč =tU÷č\‹KAô=tU÷č\ƒė Včü˙˙˙U‰åWVSu܃ė$‹]‹‹x˙u Včü˙˙˙ƒÄ jhrVčü˙˙˙ƒÄ˙…ô‹Cƒø˙„˜‹U܃ė‹rôVRPčü˙˙˙ƒÄ9ÆtjuähUhËjVčü˙˙˙ƒÄ j&hÄhčü˙˙˙‹CƒÄ ˙pôPhčü˙˙˙ƒÄ ‰Įjh“Pčü˙˙˙‹C ƒÄ ˙pôPWčü˙˙˙‰4$čü˙˙˙ƒÄ‹E܃č =uieô[^_]ЍuāhPhËjVčü˙˙˙ƒÄ j hÜhčü˙˙˙ƒÄ j5hŒhčü˙˙˙‰4$čü˙˙˙ƒÄ‹Cé˙˙˙ƒėVS˙×뎍´&Uäč\eô[^_]ÉÃë‰Ãë ƒė Včü˙˙˙ƒÄ‹E܃č =tUÛč\ƒė Sčü˙˙˙‰Ãë‰Ãë‹E܃č =tâUäč\ëØƒė Včü˙˙˙ƒÄëĩU‰åVS]đƒė‹E ‹pEîPhSčü˙˙˙YXS]ôSčü˙˙˙‰4$čü˙˙˙ƒÄ PVSčü˙˙˙X‹EZS˙pčü˙˙˙‹EôƒÄƒč =u‹Eđƒč =u&eø[^]Í´&Uīč\‹Eđƒč =tŨv‰Úč\eø[^]ÉÃë‰Ãëëú‹Eôƒč =tUīč\‹Eđƒč =tUīč\ƒė Sčü˙˙˙U‰åVS]đƒė‹E ‹pEîPh2Sčü˙˙˙YXS]ôSčü˙˙˙‰4$čü˙˙˙ƒÄ PVSčü˙˙˙X‹EZS˙pčü˙˙˙‹EôƒÄƒč =u‹Eđƒč =u&eø[^]Í´&Uīč\‹Eđƒč =tŨv‰Úč\eø[^]ÉÃë‰Ãëëú‹Eôƒč =tUīč\‹Eđƒč =tUīč\ƒė Sčü˙˙˙U‰åWVSƒė(‹E ‹u‹X$Sčü˙˙˙ƒÄ…Ā~i¸:]ä}āƒėSPWčü˙˙˙ƒÄ WhLSčü˙˙˙‰$˙včü˙˙˙‹EäƒÄƒč =uQ‹Eāƒč =u\‹Fƒė ‹P˙R ƒÄeô[^_]Ѝt&ƒė ÃˆSčü˙˙˙ƒÄ„Āu¸”é|˙˙˙´&Ußč\‹Eāƒč =t§v‰Úč\뛉Ãë‰Ã‹Eäƒč =tUßč\‹Eāƒč =tUßč\ƒė Sčü˙˙˙U¸‰åWVSuāƒėD‹} ‹_‹Kô˙wV…ÉDØčü˙˙˙‹G}ԉEЍEЉ$Wčü˙˙˙Eĉ$Pčü˙˙˙X]ȍEÄZPhiSčü˙˙˙‰$]ĖSčü˙˙˙ƒÄ jh„Sčü˙˙˙EØƒÄ WSPčü˙˙˙YEØ[]Üh‹PSčü˙˙˙X}äZVSWčü˙˙˙‹E‰<$˙pčü˙˙˙‹EäƒÄƒč =…†‹E܃č =…•‹E؃č =…¤‹E˃č =…ŗ‹Eȃč =…‹Eăč =…Ņ‹Eԃč =…ā‹Eāƒč =…īeô[^_]Í´&UÃč\‹E܃č =„r˙˙˙´&‰úč\‹E؃č =„d˙˙˙´&‰úč\‹E˃č =„U˙˙˙´&‰úč\‹Eȃč =„F˙˙˙´&‰úč\‹Eăč =„7˙˙˙´&‰úč\‹Eԃč =„(˙˙˙´&‰úč\‹Eāƒč =„˙˙˙´&‰úč\eô[^_]ÉÃéļ‰Ãë‰ÃéɉÃë>‰Ãëy‰Ãë!‰Ãë\‰ÃëC‰Ãë~‹Eäƒč =tUÃč\‹E܃č =tUÃč\‹E؃č =tUÃč\‹E˃č =tUÃč\‹Eȃč =tUÃč\‹Eăč =tUÃč\‹Eԃč =tUÃč\‹Eāƒč =tUĐč\ƒė Sčü˙˙˙‹E˃č =t–Uäč\ëŒU‰åVSEuđ]ôƒėPVčü˙˙˙XZVh„Sčü˙˙˙‹E‰$˙pčü˙˙˙‹EôƒÄƒč =u‹Eđƒč =u'eø[^]Ѝ´&Uīč\‹Eđƒč =t܍v‰Úč\eø[^]ÉÃë‰Ã‹Eôƒč =tUīč\‹Eđƒč =tUīč\ƒė Sčü˙˙˙U‰åVSƒė‹EĮƒĀPčü˙˙˙ƒÄ…‰Ãu eø[^]ÍļuôhyhDjVčü˙˙˙ƒÄ jhlhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeø[^]ÉÃė Včü˙˙˙‰$čü˙˙˙U‰åWVSƒė(‹]CĮPčü˙˙˙ƒÄ…‰Æuƒė Sčü˙˙˙ƒÄeô[^_]Ѝ´&}ähyhDjWčü˙˙˙ƒÄ jhlhčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙‰<$čü˙˙˙ƒÄ덉Ãė Wčü˙˙˙‰$čü˙˙˙U‰åWVSE֍u؃ė0Ph•Včü˙˙˙‹E‹X‹‹xXZVuÜVčü˙˙˙ƒÄ jhrVčü˙˙˙ƒÄ˙…‹Cƒø˙„Ģ‹U܃ė‹rôVRPčü˙˙˙ƒÄ9ÆtjuähUhËjVčü˙˙˙ƒÄ j&hÄhčü˙˙˙‹CƒÄ ˙pôPhčü˙˙˙ƒÄ ‰Įjh“Pčü˙˙˙‹C ƒÄ ˙pôPWčü˙˙˙‰4$čü˙˙˙ƒÄ‹E܃č =…‹E؃č =useô[^_]ÍvuāhPhËjVčü˙˙˙ƒÄ j hÜhčü˙˙˙ƒÄ j5hŒhčü˙˙˙‰4$čü˙˙˙ƒÄ‹Cé˙˙˙´&ƒėVS˙×ép˙˙˙t&Uäč\eô[^_]ÍUäč\éc˙˙˙‰Ãë‰ÃëI‰Ãë\‰Ãë#‰Ãƒė Včü˙˙˙ƒÄ‹E܃č =tU×č\‹E؃č =tU×č\ƒė Sčü˙˙˙‹E܃č =tՍUäč\ë˃ė Včü˙˙˙ƒÄë¨U‰åWVSuԃėD‹] ‹CX‹S\ƒÃ‰EāEā‰UäPVčü˙˙˙Sčü˙˙˙ƒÄ ē:„”}ČEUÆRPWčü˙˙˙]ĖƒÄ WhčSčü˙˙˙‰$]ĐSčü˙˙˙ƒÄ jhūSčü˙˙˙}ØƒÄ VSWčü˙˙˙]܉<$Sčü˙˙˙ƒÄ jh Sčü˙˙˙X‹EZS˙pčü˙˙˙‹E܃ăč =uT‹E؃č =u_‹EЃč =uj‹E˃č =uu‹Eȃč =…|‹Eԃč =…ƒeô[^_]ÍvUĮč\‹E؃č =t¤v‰Úč\‹EЃč =tšt&‰Úč\‹E˃č =tt&‰Úč\‹Eȃč =tˆt&‰Úč\‹Eԃč =„}˙˙˙‰Úč\eô[^_]ÉÃëC‰Ãë‹E܃č =tUĮč\‹E؃č =tUĮč\‹EЃč =tUĮč\‹E˃č =tUĮč\‹Eȃč =tUĮč\‹Eԃč =tUĮč\ƒė Sčü˙˙˙‰Ã량Ãén˙˙˙‰Ãëžëķ‰Ãë͉ËEЃč =t”UÜč\ëŠU‰åWVSuԃėD‹] ‹C0‹S4‰EāEā‰UäPVčü˙˙˙Sčü˙˙˙ƒÄ ē:…”}ČOUÆRPWčü˙˙˙]ĖƒÄ WhSčü˙˙˙‰$]ĐSčü˙˙˙ƒÄ jhūSčü˙˙˙}ØƒÄ VSWčü˙˙˙]܉<$Sčü˙˙˙ƒÄ jh Sčü˙˙˙X‹EZS˙pčü˙˙˙‹E܃ăč =uO‹E؃č =uZ‹EЃč =ue‹E˃č =up‹Eȃč =u{‹Eԃč =…‚eô[^_]ÃfUĮč\‹E؃č =tŠv‰Úč\‹EЃč =tŸt&‰Úč\‹E˃č =t”t&‰Úč\‹Eȃč =t‰t&‰Úč\‹Eԃč =t‚t&‰Úč\eô[^_]ÉÃëC‰Ãë‹E܃č =tUĮč\‹E؃č =tUĮč\‹EЃč =tUĮč\‹E˃č =tUĮč\‹Eȃč =tUĮč\‹Eԃč =tUĮč\ƒė Sčü˙˙˙‰Ã량Ãén˙˙˙‰Ãëžëķ‰Ãë͉ËEЃč =t”UÜč\ëŠU‰åWVSuԃėD‹] ‹C$‹ô‹€đ‰EāEā‰UäPVčü˙˙˙‹[$Sčü˙˙˙ƒÄ…ĀŽîē:Eƍ}ȃėPRWčü˙˙˙]ĖƒÄ WhXSčü˙˙˙‰$]ĐSčü˙˙˙ƒÄ jhūSčü˙˙˙}ØƒÄ VSWčü˙˙˙]܉<$Sčü˙˙˙ƒÄ jh Sčü˙˙˙X‹EZS˙pčü˙˙˙‹E܃ăč =…†‹E؃č =…•‹EЃč =…œ‹E˃č =…Ģ‹Eȃč =…ē‹Eԃč =…ɍeô[^_]Ðƒė ÃˆSčü˙˙˙ƒÄ„Ā…øū˙˙ē”éķū˙˙t&UĮč\‹E؃č =„r˙˙˙´&‰Úč\‹EЃč =„d˙˙˙‰Úč\‹E˃č =„]˙˙˙´&‰Úč\‹Eȃč =„N˙˙˙´&‰Úč\‹Eԃč =„?˙˙˙´&‰Úč\eô[^_]ÉÃë‰Ãë?‹EЃč =tUÜč\‹E˃č =tUĮč\‹Eȃč =tUĮč\‹Eԃč =tUĮč\ƒė Sčü˙˙˙‰Ãë‰Ã밋E܃č =tUĮč\‹E؃č =tUĮč\‹EЃč =„u˙˙˙UĮč\éh˙˙˙‰Ãév˙˙˙막Ãë‰ÃëŅU‰åWVSE܍uāƒė(‹]Pčü˙˙˙‹EÜYxX‹E ˙0Včü˙˙˙X‹EāZ˙pôPWčü˙˙˙‹EāƒÄƒč =u^‹{…˙twEäƒė˙uÜPčü˙˙˙‹}äWčü˙˙˙ƒÄ PW˙sčü˙˙˙‹EäƒÄƒč =u2‹E܅Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ѝt&Uäč\똍ļ‰ōč\ëō´&ƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄée˙˙˙‰Ãë‰Ãë3‰Ã‹Eāƒč =tUäč\‹E܅Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙‹Eäƒč =t׉ōč\ëÎU‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åVSEđƒė‹]Pčü˙˙˙‹E ƒÄ ‹˙pôP‹EđƒĀPčü˙˙˙‹sƒÄ…ötjEôƒė˙uđPčü˙˙˙‹uôVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EôƒÄƒč =u%‹Eđ…Āt ƒė ‹P˙RƒÄeø‰Ø[^]Éöŧ'Uīč\ëŅļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄér˙˙˙‰Ãë‰Ã‹Eôƒč =tUīč\‹Eđ…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åVSEđƒė‹]Pčü˙˙˙X‹EđZ˙u ƒĀPčü˙˙˙‹sƒÄ…ötaEôƒė˙uđPčü˙˙˙‹uôVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EôƒÄƒč =u‹Eđ…Āt ƒė ‹P˙RƒÄeø‰Ø[^]ÍUīč\ëڍļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé{˙˙˙‰Ãë‰Ã‹Eôƒč =tUīč\‹Eđ…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åVSEđƒė‹]Pčü˙˙˙‹E ƒÄ‹0…ötxƒė Včü˙˙˙ƒÄ P‹EđVƒĀPčü˙˙˙‹sƒÄ…öt|Eôƒė˙uđPčü˙˙˙‹uôVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EôƒÄƒč =u7‹Eđ…Āt ƒė ‹P˙RƒÄeø‰Ø[^]Ív‹Eđƒėjh0ƒĀPčü˙˙˙늍Uīč\ëŋļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé`˙˙˙‰Ãë‰Ã‹Eôƒč =tUīč\‹Eđ…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSEāƒė(‹u ‹]Pčü˙˙˙‹EāƒÄ…öxtsƒė Včü˙˙˙ƒÄ PVWčü˙˙˙‹sƒÄ…öt}Eäƒė˙uāPčü˙˙˙‹uäVčü˙˙˙ƒÄ PV˙sčü˙˙˙‹EäƒÄƒč =u8‹Eā…Āt ƒė ‹P˙RƒÄeô‰Ø[^_]Ív‹@ƒėxô‹GƒČPWčü˙˙˙뉍Ußč\랍ļƒė jčü˙˙˙ZYĮ PCPčü˙˙˙ƒÄé_˙˙˙‰Ãë‰Ã‹Eäƒč =tUßč\‹Eā…Āt ƒė ‹P˙RƒÄƒė Sčü˙˙˙U‰åWVSėŦŲEŲEŲÉßéŨØw_‹E‰Ââ€ú€„_‹U‰Ņá€ų€tT‰Á‰ÃË€÷Ų…ĀIˉЉĶ÷Û €…ŌHÉË)ÉÂ)Ę9Á‰ØBƒøw'‹EÆĮ@‹Eeô[^_]t&÷Â˙˙t¤…¤ū˙˙ƒė Pčü˙˙˙‹ƅ˙˙˙‹5 Į…¤ū˙˙Į…˙˙˙ƅ˙˙˙‹CôĮ…˙˙˙Į… ˙˙˙Į…$˙˙˙Į…(˙˙˙‰pū˙˙‰´pū˙˙Į…tū˙˙…pū˙˙CôY^jPčü˙˙˙XĄĩxū˙˙‹=Z‰…xū˙˙‹@ôđ‰8jPčü˙˙˙Ą‹=‹@ô‰ŧpū˙˙…˜ū˙˙Į…pū˙˙ Į…¤ū˙˙4Į…xū˙˙ ‰$Į…|ū˙˙Į…€ū˙˙Į…„ū˙˙Į…ˆū˙˙Į…Œū˙˙Į…ū˙˙Į…”ū˙˙čü˙˙˙Y…¤ū˙˙Į…|ū˙˙Į…œū˙˙_Ŋ|ū˙˙Į… ū˙˙ WPčü˙˙˙‹…xū˙˙ŲE‹@ôŨ\$‰4$Į„|ū˙˙čü˙˙˙…`˙˙˙‰$čü˙˙˙ÆEԋ5 ‹CôĮ…`˙˙˙_ĮEĐÆEÕĮEØĮEÜĮEāĮE䉝,˙˙˙‰´,˙˙˙XĮ…0˙˙˙…,˙˙˙CôjPčü˙˙˙Ą‹=Y^‰…4˙˙˙‹@ôĩ4˙˙˙đ‰8jPčü˙˙˙Ą‹=‹@ô‰ŧ,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Ŋ8˙˙˙‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙X…`˙˙˙Į…8˙˙˙Į…X˙˙˙ZWPĮ…\˙˙˙ čü˙˙˙‹…4˙˙˙ŲE‹@ôŨ\$‰4$Į„8˙˙˙čü˙˙˙YŊ\ū˙˙…,˙˙˙^PWčü˙˙˙…pū˙˙‰$…`ū˙˙Pčü˙˙˙…hū˙˙Į$úƅhū˙˙Į…lū˙˙Pčü˙˙˙^ZU RPčü˙˙˙ZYhOPčü˙˙˙YU^RPčü˙˙˙ĩdū˙˙‰…Tū˙˙‰4$čü˙˙˙‹dū˙˙ƒÄ jhVAPčü˙˙˙XZV˙ĩTū˙˙čü˙˙˙‹…dū˙˙ƒÄ…Āt ‹ƒė P˙RƒÄƒėhY˙ĩTū˙˙čü˙˙˙ZY`ū˙˙QPčü˙˙˙ZYhPčü˙˙˙ZYWPčü˙˙˙ZYP˙učü˙˙˙‹Ŋlū˙˙ƒÄ…˙t‹ƒč =…ƒė Wčü˙˙˙ƒÄ‹…`ū˙˙ƒč =…§‹…\ū˙˙ƒč =…Ë…\˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =…w…T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙Ą‹5‹@ô‰´,˙˙˙Ą‹5‰…4˙˙˙‹@ô‰´4˙˙˙‹Cô‹5 ‰,˙˙˙‰´,˙˙˙…`˙˙˙Į…`˙˙˙‰$čü˙˙˙‹… ū˙˙ƒÄĮ…pū˙˙ Į…¤ū˙˙4Į…xū˙˙ Į…|ū˙˙ƒč =…ą…˜ū˙˙ƒė Į…|ū˙˙Pčü˙˙˙Ą‹5‹= ‹@ô‰´pū˙˙Ą‹5‰…xū˙˙‹@ô‰´xū˙˙‹Cô‰pū˙˙‰ŧpū˙˙…¤ū˙˙Į…¤ū˙˙‰$čü˙˙˙‹EƒÄeô[^_]vŧ'Š˙˙…ú˙˙é‘ų˙˙•hū˙˙č\éIū˙˙•,˙˙˙č\é?˙˙˙•hū˙˙č\éyū˙˙•hū˙˙č\é-ū˙˙‰ōč\éíũ˙˙‰Ãë ‰Ãëq‰ÃëQ‹Sô‹5 ‰pū˙˙‰Ã‰´pū˙˙…¤ū˙˙ƒė Į…¤ū˙˙Pčü˙˙˙‰$čü˙˙˙‹Sô‹5 ‰,˙˙˙‰Ã‰´,˙˙˙…`˙˙˙ƒė Į…`˙˙˙Pčü˙˙˙ƒÄ…pū˙˙ƒė Pčü˙˙˙‰$čü˙˙˙ëŗ‰Ãƒė Wčü˙˙˙_X…,˙˙˙hPčü˙˙˙ƒÄ먉Ãëc‰ÃëD‹…dū˙˙…Āt ƒė ‹P˙RƒÄPP…lū˙˙jPčü˙˙˙‹…`ū˙˙ƒÄƒč =t •hū˙˙č\‹…\ū˙˙ƒč =t •hū˙˙č\…,˙˙˙ƒė Pčü˙˙˙ƒÄéF˙˙˙‰Ã뜉Ãë‚éĖū˙˙‰Ãƒė Wčü˙˙˙X…pū˙˙ZhPčü˙˙˙ƒÄéžū˙˙U‰åWVSėŦŨEŨ•Pū˙˙ŨEŨ•Hū˙˙ßéŨ؇ ‹Tū˙˙‹…Pū˙˙‹•Tū˙˙áđųđ„´‹Lū˙˙‹ĩHū˙˙‹ŊLū˙˙áđųđ„ ‹Tū˙˙…Ɉ‹…Tū˙˙‹Pū˙˙ €‰Ã‹…Lū˙˙…Āˆ‘‹ŊLū˙˙‹…Hū˙˙Ī€‰ú9Ķs1)ČڃúwZƒøwUv‹EÆĮ@‹Eeô[^_]ļw9ÁrÉ)Á͉ȉÚëЍ´&‹Tū˙˙‹Pū˙˙ã˙˙ Ë„2˙˙˙…¤ū˙˙ƒė Pčü˙˙˙‹ƅ˙˙˙‹ Į…¤ū˙˙Į…˙˙˙ƅ˙˙˙‹CôĮ…˙˙˙Į… ˙˙˙Į…$˙˙˙Į…(˙˙˙‰pū˙˙‰”pū˙˙Į…tū˙˙…pū˙˙CôY^jPčü˙˙˙XĄĩxū˙˙Z‹‰…xū˙˙‹@ôđ‰jPčü˙˙˙Ą‹=‹@ô‰ŧpū˙˙…˜ū˙˙Į…pū˙˙ Į…¤ū˙˙4Į…xū˙˙ ‰$Į…|ū˙˙Į…€ū˙˙Į…„ū˙˙Į…ˆū˙˙Į…Œū˙˙Į…ū˙˙Į…”ū˙˙čü˙˙˙Y…¤ū˙˙Į…|ū˙˙Į…œū˙˙_Ŋ|ū˙˙Į… ū˙˙ WPčü˙˙˙‹…xū˙˙ƒÄ ‹@ô˙ĩTū˙˙˙ĩPū˙˙VĮ„|ū˙˙čü˙˙˙…`˙˙˙‰$čü˙˙˙ÆEԋ5 ‹CôĮ…`˙˙˙_ĮEĐÆEÕĮEØĮEÜĮEāĮE䉝,˙˙˙‰´,˙˙˙XĮ…0˙˙˙…,˙˙˙CôjPčü˙˙˙Ą‹=Y^‰…4˙˙˙‹@ôĩ4˙˙˙đ‰8jPčü˙˙˙Ą‹Ŋ8˙˙˙‹@ô‰”,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ ‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙X…`˙˙˙Į…8˙˙˙Į…X˙˙˙ZWPĮ…\˙˙˙ čü˙˙˙‹…4˙˙˙ƒÄ ‹@ô˙ĩLū˙˙˙ĩHū˙˙VĮ„8˙˙˙čü˙˙˙YŊ\ū˙˙…,˙˙˙^PWčü˙˙˙…pū˙˙‰$…`ū˙˙Pčü˙˙˙…hū˙˙Į$úƅhū˙˙Į…lū˙˙Pčü˙˙˙^ZU RPčü˙˙˙ZYhOPčü˙˙˙YU^RPčü˙˙˙ĩdū˙˙‰…Pū˙˙‰4$čü˙˙˙‹•dū˙˙ƒÄ jhVBPčü˙˙˙XZV˙ĩPū˙˙čü˙˙˙‹…dū˙˙ƒÄ…Āt ‹ƒė P˙RƒÄƒėhY˙ĩPū˙˙čü˙˙˙Z•`ū˙˙YRPčü˙˙˙ZYhPčü˙˙˙ZYWPčü˙˙˙ZYP˙učü˙˙˙‹Ŋlū˙˙ƒÄ…˙t‹ƒč =…1ƒė Wčü˙˙˙ƒÄ‹…`ū˙˙ƒč =…Ņ‹…\ū˙˙ƒč =…í‹…\˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =…Ą…T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙Ą‹5‹@ô‰´,˙˙˙Ą‹5‰…4˙˙˙‹@ô‰´4˙˙˙‹Cô‹5 ‰,˙˙˙‰´,˙˙˙…`˙˙˙Į…`˙˙˙‰$čü˙˙˙‹… ū˙˙ƒÄĮ…pū˙˙ Į…¤ū˙˙4Į…xū˙˙ Į…|ū˙˙ƒč =…ۍ…˜ū˙˙ƒė Į…|ū˙˙Pčü˙˙˙Ą‹=‹5‹@ô‰ŧpū˙˙Ą‰…xū˙˙‹@ô‰´xū˙˙‹Cô‰pū˙˙‹ ‰œpū˙˙…¤ū˙˙Į…¤ū˙˙‰$čü˙˙˙‹EƒÄeô[^_]t&‹Lū˙˙‹Hū˙˙ã˙˙ Ë…đų˙˙éAų˙˙‰đ‰ú÷؃Ō÷Úésų˙˙÷ØƒŌ‰Á÷ډĶéAų˙˙•hū˙˙č\éū˙˙•,˙˙˙č\é˙˙˙•hū˙˙č\éOū˙˙•hū˙˙č\éū˙˙‰ōč\éÃũ˙˙‰Ãë ‰Ãë=‰ÃëO‹Sô‹= ‰pū˙˙‰Ã‰ŧpū˙˙…¤ū˙˙ƒė Į…¤ū˙˙Pčü˙˙˙‰$čü˙˙˙‹…dū˙˙…Āt ƒė ‹P˙RƒÄPP…lū˙˙jPčü˙˙˙‹…`ū˙˙ƒÄƒč =t •hū˙˙č\‹…\ū˙˙ƒč =t •hū˙˙č\…,˙˙˙ƒė Pčü˙˙˙ƒÄ…pū˙˙ƒė Pčü˙˙˙‰$čü˙˙˙‰Ã븉ÃëΉÃëë=ƒė Wčü˙˙˙_X…,˙˙˙hPčü˙˙˙ƒÄ…`˙˙˙ƒė Į…`˙˙˙Pčü˙˙˙ƒÄ랋Sô‹= ‰,˙˙˙‰Ã‰ŧ,˙˙˙ëȉÃëĉÃéy˙˙˙‰ÃëéÆū˙˙ƒė Wčü˙˙˙X…pū˙˙ZhPčü˙˙˙ƒÄéēū˙˙U‰åVSƒė‹]˙3čü˙˙˙ƒÄ…Āt ƒė ‹P˙RƒÄƒė ˙3čü˙˙˙ƒÄ…‰Ãueø[^]ЍuôhÎhDjVčü˙˙˙ƒÄ jhYhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄeø[^]ÉÃė Včü˙˙˙‰$čü˙˙˙U‰åWVSƒė8‹}˙7čü˙˙˙ƒÄ…Āt ‹ƒė P˙RƒÄƒė ˙7čü˙˙˙ƒÄ…‰ÃtUuähÎhDjVčü˙˙˙ƒÄ jhYhčü˙˙˙ƒÄ jhæhčü˙˙˙XZShčü˙˙˙‰4$čü˙˙˙ƒÄ‹w‹_9Ūuë1ļƒÃ 9Ūt!‹Cƒč =tėUäƒÃ č\9Ūu䐍t&‹w…öt ƒė Včü˙˙˙ƒÄeô[^_]ÉEÔë‰Ãƒė Včü˙˙˙‰]ԃÄ‹_‹w9ķt‹Fƒč =tUãč\ƒÆ 9ķuä‹_…Ût ƒė Sčü˙˙˙ƒÄƒė ˙uÔčü˙˙˙U‰åWVSƒė,‹}‹u ‹G+Áø9ƉEÔr…öxn‹EÔ9Eō;ué‹]‹E)ķ…ü˙˙˙ƒû~=‰Eԉu ´&ƒėS˙uƒëčü˙˙˙E ‹ƒÄ‹Uԃmԍʃû‹2‹‰0‰ uЍeô[^_]ÍEäh:hËjP‰EĐčü˙˙˙ƒÄ j.hxhčü˙˙˙ƒÄ jhrhčü˙˙˙XZVhčü˙˙˙ƒÄ ‰ÃjhPčü˙˙˙YX˙uÔSčü˙˙˙[Zh§Pčü˙˙˙Y˙uĐčü˙˙˙ƒÄ‹EÔ9EŽ˙˙˙Eäh=hËjP‰EĐčü˙˙˙ƒÄ j.h¨hčü˙˙˙ƒÄ jhĒhčü˙˙˙XZ˙uhčü˙˙˙ƒÄ ‰ÃjhČPčü˙˙˙YXVSčü˙˙˙ƒÄ ‰Ãjh†Pčü˙˙˙XZ˙uÔSčü˙˙˙ZYh§Pčü˙˙˙X˙uĐčü˙˙˙ƒÄérū˙˙‰Ãë‰Ãëƒė ˙uĐčü˙˙˙‰$čü˙˙˙ƒė ˙uĐčü˙˙˙‰$čü˙˙˙VSƒė‹D$ ‹‹sô…ötFļƒč0ƒø w;čü˙˙˙ƒėĮ‰Æj D$PSčü˙˙˙ƒÄ‹L$ €9u‹…Éu ‰ÃÁû9Út v1ƒÄ[^ËT$$‰¸ëíU‰åWVSƒė0‹] ‹ujhūSčü˙˙˙‰đƒÄ<\ļø‡¤˙$Ŋt&ƒėjhæSčü˙˙˙ƒÄt&ƒėjhūSčü˙˙˙ƒÄ jhžSčü˙˙˙XZWSčü˙˙˙F˙ƒÄ<‡éƒėjhÁSčü˙˙˙ƒÄeô[^_]Íļƒėjh7Sčü˙˙˙ƒÄ jhūSčü˙˙˙ƒÄë͍vƒėjhéSčü˙˙˙ƒÄéh˙˙˙´&ƒėjhėSčü˙˙˙ƒÄéH˙˙˙´&ƒėjhõSčü˙˙˙ƒÄé(˙˙˙´&ƒėjhSčü˙˙˙ƒÄé˙˙˙´&ƒėjhøSčü˙˙˙ƒÄéčū˙˙´&ƒėjhīSčü˙˙˙ƒÄéČū˙˙´&ƒėjhōSčü˙˙˙ƒÄé¨ū˙˙´&ƒėjhãSčü˙˙˙ƒÄéˆū˙˙´&G⃸^†EāƒėWP‰EÔčü˙˙˙YX‹EÔPEähûPčü˙˙˙X‹EäZ˙pôPSčü˙˙˙‹EäƒÄƒč =…§‹Eāƒč =…‰ƒėjhūSčü˙˙˙‰đƒÄ„Ā„Iū˙˙VjhžSčü˙˙˙XZWSčü˙˙˙ƒÄéū˙˙EäƒėWPčü˙˙˙Y^jhŨSčü˙˙˙‹EäƒÄ ˙pôPSčü˙˙˙‹EäƒÄƒč =„×ũ˙˙Ußč\éĘũ˙˙Uäč\éj˙˙˙Ußč\éL˙˙˙‰öŧ'‰đƒėˆEāEājPSčü˙˙˙ƒÄ jhūSčü˙˙˙‰đƒÄ„Ā„‰ũ˙˙QéLũ˙˙‰Ãë‰Ãë‹Eäƒč =tUßč\‹Eāƒč =uƒė Sčü˙˙˙‰Ã‹Eäƒč =tčUßč\ëŪ¨ĐĐĐĐĐĐĐđ0PpĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐаĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐ8U‰åWVSƒė0‹] ‹ujhūSčü˙˙˙‰đƒÄ<\žø‡¤ļĀ˙$…vŧ'ƒėjhæSčü˙˙˙ƒÄt&ƒėjhūSčü˙˙˙ƒÄ jhžSčü˙˙˙XZWSčü˙˙˙F˙ƒÄ<‡éƒėjhÁSčü˙˙˙ƒÄeô[^_]Íļƒėjh7Sčü˙˙˙ƒÄ jhūSčü˙˙˙ƒÄë͍vƒėjhéSčü˙˙˙ƒÄéh˙˙˙ƒėjhėSčü˙˙˙ƒÄéP˙˙˙´&ƒėjhõSčü˙˙˙ƒÄé0˙˙˙´&ƒėjhSčü˙˙˙ƒÄé˙˙˙´&ƒėjhøSčü˙˙˙ƒÄéđū˙˙´&ƒėjhīSčü˙˙˙ƒÄéĐū˙˙´&ƒėjhōSčü˙˙˙ƒÄé°ū˙˙´&ƒėjhãSčü˙˙˙ƒÄéū˙˙´&G⃸^† Eā‰ōƒėļŌRP‰EÔčü˙˙˙YX‹EÔPEähûPčü˙˙˙X‹EäZ˙pôPSčü˙˙˙‹EäƒÄƒč =…¯‹Eāƒč =…‘ƒėjhūSčü˙˙˙‰đƒÄ„Ā„Lū˙˙VjhžSčü˙˙˙XZWSčü˙˙˙ƒÄéū˙˙v‰ņEäƒėļņVPčü˙˙˙Y^jhŨSčü˙˙˙‹EäƒÄ ˙pôPSčü˙˙˙‹EäƒÄƒč =„Ōũ˙˙Ußč\éÅũ˙˙Uäč\éb˙˙˙Ußč\éD˙˙˙t&‰đƒėˆEāEājPSčü˙˙˙ƒÄ jhūSčü˙˙˙‰đƒÄ„Ā„‰ũ˙˙QéLũ˙˙‰Ãë‰Ãë‹Eäƒč =tUßč\‹Eāƒč =uƒė Sčü˙˙˙‰Ã‹Eäƒč =tčUßč\ëŪ°ĐĐĐĐĐĐØđ0PpĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐаĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐĐ@U‰åWVSƒė ‹] ‹ujhâSčü˙˙˙ƒÄ‰Ú‰đčÜmƒė‰ĮjhūSčü˙˙˙ƒÄ…öueô[^_]Í´&ƒėjhžSčü˙˙˙YXVSčü˙˙˙ƒÄƒ˙tF˙ƒøwƒėjhÁSčü˙˙˙ƒÄeô[^_]Ít&EäƒėVPčü˙˙˙XZjhŨSčü˙˙˙‹EäƒÄ ˙pôPSčü˙˙˙‹EäƒÄƒč =tĨUãč\뛉ËEäƒč =tUãč\ƒė Sčü˙˙˙WVSƒė‹t$ ‹|$$‹9ût…Ût‹ƒč =uƒė Sčü˙˙˙ƒÄ‰>ƒÄ[^_Í´&T$č\ëŲUWVSƒė‹t$0‹|$4‹l$8‹F;FtM…Āt‹Pü‰‹FP‰VPü‹])ú‰ŅÁų…Éu‰ƒÄ[^_]Ѝ´&ƒė)ĐRWPčü˙˙˙ƒÄë܍ļ‹)ЉÃÁû…Û„‡9Æŋ‰ųĮD$ü˙˙˙)҉L$ ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‰ÃŲt‹E‰‹‰ũ)ʼnéÁų…ÉuoL+‹n)ũ‰čÁø…Āu=‹ͅĀt ƒė Pčü˙˙˙ƒÄ‰\$‰n‰^éH˙˙˙´&‰ųĮD$)Ņë‚fƒėUWQ‰L$čü˙˙˙ƒÄ‹L$ ë̐´&ƒėUPSčü˙˙˙ƒÄé~˙˙˙=˙˙˙?‡6˙˙˙Áã‰ų‰\$)Ņ1ۅĀ„F˙˙˙é(˙˙˙UWVSƒė‹t$0‹|$4‹^;^tI…Ût‹Cü‰C‰F‹D$8‹0Cü)ø‰ÂÁú…Ōu‰7ƒÄ[^_]Ít&ƒė)ÃPWSčü˙˙˙ƒÄëāļ‹)ÃÁû…Û„ 9ˆĉúģü˙˙˙)‰T$ ƒė Sčü˙˙˙‰Å‹‰ų‰D$ƒÄ‹T$ )Áęt‹D$8‹‰‰ĘÁú…Ōuh‹VL )ú‰ĐÁø…Āu6‹<…Āt ƒė Pčü˙˙˙ƒÄë‰.‰~‰^éN˙˙˙f‰úģ)Â눐t&ƒėR‰T$WQ‰L$čü˙˙˙ƒÄ‹T$ ‹L$ëǃėQ‰L$˙t$Učü˙˙˙ƒÄ‹L$ éz˙˙˙ų˙˙˙?‡0˙˙˙‰úÁã)…É…*˙˙˙‰Ņ‰D$1íé=˙˙˙UWVSƒė‹t$0‹|$4‹l$8‹F;FtM…Āt‹Pü‰‹FP‰VPü‹])ú‰ŅÁų…Éu‰ƒÄ[^_]Ѝ´&ƒė)ĐRWPčü˙˙˙ƒÄë܍ļ‹)ЉÃÁû…Û„‡9Æŋ‰ųĮD$ü˙˙˙)҉L$ ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‰ÃŲt‹E‰‹‰ũ)ʼnéÁų…ÉuoL+‹n)ũ‰čÁø…Āu=‹ͅĀt ƒė Pčü˙˙˙ƒÄ‰\$‰n‰^éH˙˙˙´&‰ųĮD$)Ņë‚fƒėUWQ‰L$čü˙˙˙ƒÄ‹L$ ë̐´&ƒėUPSčü˙˙˙ƒÄé~˙˙˙=˙˙˙?‡6˙˙˙Áã‰ų‰\$)Ņ1ۅĀ„F˙˙˙é(˙˙˙U‰åWVSƒė<‹Eƒx˙Įueô[^_]ÃPPEÔĮEÔvuĮ}ČPEØPčü˙˙˙XZVh* Wčü˙˙˙]ĖƒÄ hWSčü˙˙˙Y_}Đh SWčü˙˙˙X]܍EØZPWSčü˙˙˙Y_}āh•SWčü˙˙˙X]äZh> WSčü˙˙˙Sčü˙˙˙‰Ãë‰Ãë‰Ãë*‹Eäƒč =tUÆč\‹Eāƒč =tUÆč\‹E܃č =tUÆč\‹EЃč =tUÆč\‹E˃č =tUÆč\‹Eȃč =tUÆč\‹E؃č =t‰ōč\ƒė Sčü˙˙˙‰Ã렉Ã뱉Ãë‰ÃëĶU‰åWVSƒė<‹Eƒx˙Įueô[^_]ÃPPEÔĮEÔvuĮ}ČPEØPčü˙˙˙XZVh* Wčü˙˙˙]ĖƒÄ hWSčü˙˙˙Y_}Đh SWčü˙˙˙X]܍EØZPWSčü˙˙˙Y_}āh•SWčü˙˙˙X]äZh> WSčü˙˙˙Sčü˙˙˙‰Ãë‰Ãë‰Ãë*‹Eäƒč =tUÆč\‹Eāƒč =tUÆč\‹E܃č =tUÆč\‹EЃč =tUÆč\‹E˃č =tUÆč\‹Eȃč =tUÆč\‹E؃č =t‰ōč\ƒė Sčü˙˙˙‰Ã렉Ã뱉Ãë‰ÃëĶU‰åWVSƒė<‹Eƒx˙Įuƒė Pčü˙˙˙ƒÄeô[^_]ÃPPEÔĮEÔvuĮ}ČPEØPčü˙˙˙XZVh* Wčü˙˙˙]ĖƒÄ hWSčü˙˙˙Y_}Đh SWčü˙˙˙X]܍EØZPWSčü˙˙˙Y_}āh•SWčü˙˙˙X]äZh> WSčü˙˙˙Sčü˙˙˙‰Ãë‰Ãë‰Ãë*‹Eäƒč =tUÆč\‹Eāƒč =tUÆč\‹E܃č =tUÆč\‹EЃč =tUÆč\‹E˃č =tUÆč\‹Eȃč =tUÆč\‹E؃č =t‰ōč\ƒė Sčü˙˙˙‰Ã렉Ã뱉Ãë‰ÃëĶU‰åWVSƒė<‹Eƒx˙Įuƒė Pčü˙˙˙ƒÄeô[^_]ÃPPEÔĮEÔvuĮ}ČPEØPčü˙˙˙XZVh* Wčü˙˙˙]ĖƒÄ hWSčü˙˙˙Y_}Đh SWčü˙˙˙X]܍EØZPWSčü˙˙˙Y_}āh•SWčü˙˙˙X]äZh> WSčü˙˙˙Sčü˙˙˙‰Ãë‰Ãë‰Ãë*‹Eäƒč =tUÆč\‹Eāƒč =tUÆč\‹E܃č =tUÆč\‹EЃč =tUÆč\‹E˃č =tUÆč\‹Eȃč =tUÆč\‹E؃č =t‰ōč\ƒė Sčü˙˙˙‰Ã렉Ã뱉Ãë‰ÃëĶUWVSƒė‹t$0‹|$4‹l$8‹F;FtM…Āt‹Pü‰‹FP‰VPü‹])ú‰ŅÁų…Éu‰ƒÄ[^_]Ѝ´&ƒė)ĐRWPčü˙˙˙ƒÄë܍ļ‹)ЉÃÁû…Û„‡9Æŋ‰ųĮD$ü˙˙˙)҉L$ ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‰ÃŲt‹E‰‹‰ũ)ʼnéÁų…ÉuoL+‹n)ũ‰čÁø…Āu=‹ͅĀt ƒė Pčü˙˙˙ƒÄ‰\$‰n‰^éH˙˙˙´&‰ųĮD$)Ņë‚fƒėUWQ‰L$čü˙˙˙ƒÄ‹L$ ë̐´&ƒėUPSčü˙˙˙ƒÄé~˙˙˙=˙˙˙?‡6˙˙˙Áã‰ų‰\$)Ņ1ۅĀ„F˙˙˙é(˙˙˙UWVSƒė‹t$0‹|$4‹l$8‹F;FtM…Āt‹Pü‰‹FP‰VPü‹])ú‰ŅÁų…Éu‰ƒÄ[^_]Ѝ´&ƒė)ĐRWPčü˙˙˙ƒÄë܍ļ‹)ЉÃÁû…Û„‡9Æŋ‰ųĮD$ü˙˙˙)҉L$ ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‰ÃŲt‹E‰‹‰ũ)ʼnéÁų…ÉuoL+‹n)ũ‰čÁø…Āu=‹ͅĀt ƒė Pčü˙˙˙ƒÄ‰\$‰n‰^éH˙˙˙´&‰ųĮD$)Ņë‚fƒėUWQ‰L$čü˙˙˙ƒÄ‹L$ ë̐´&ƒėUPSčü˙˙˙ƒÄé~˙˙˙=˙˙˙?‡6˙˙˙Áã‰ų‰\$)Ņ1ۅĀ„F˙˙˙é(˙˙˙U‰åVSEôƒė‹uPčü˙˙˙‹E ƒÄ‹…ÛtPƒė Sčü˙˙˙ƒÄ P‹EôSPRčü˙˙˙ƒÄƒė˙uôVčü˙˙˙‹UôƒÄ …Ōt ƒė ‹R˙PƒÄeø‰đ[^]ļ‹Eôƒėjh0ƒĀPčü˙˙˙ë˛‰Ã‹Uô…Ōt ƒė ‹R˙PƒÄƒė Sčü˙˙˙UWVSƒė‹t$0‹|$4‹l$8‹F;FtM…Āt‹Pü‰‹FP‰VPü‹])ú‰ŅÁų…Éu‰ƒÄ[^_]Ѝ´&ƒė)ĐRWPčü˙˙˙ƒÄë܍ļ‹)ЉÃÁû…Û„‡9Æŋ‰ųĮD$ü˙˙˙)҉L$ ƒė ˙t$čü˙˙˙ƒÄ‹L$ ‰ÃŲt‹E‰‹‰ũ)ʼnéÁų…ÉuoL+‹n)ũ‰čÁø…Āu=‹ͅĀt ƒė Pčü˙˙˙ƒÄ‰\$‰n‰^éH˙˙˙´&‰ųĮD$)Ņë‚fƒėUWQ‰L$čü˙˙˙ƒÄ‹L$ ë̐´&ƒėUPSčü˙˙˙ƒÄé~˙˙˙=˙˙˙?‡6˙˙˙Áã‰ų‰\$)Ņ1ۅĀ„F˙˙˙é(˙˙˙UWVSƒė ‹\$$‹L$(‹t$ ‹l$,‹‰Ī‹C)×;Ct9Čt'ƒėUQSčü˙˙˙‹ƒÄ‰đú‰ƒÄ [^_]´&…Āt ‹U‰‹C‹ƒĀú‰C‰ƒÄ [‰đ^_]ÂWVSƒė‹\$$‹|$ …ÛuëDt&ƒė S‰ķčü˙˙˙ƒÄ…öt.ƒė˙s Wčü˙˙˙‹CƒÄ‹sƒč =tĪT$č\ëčt&ƒÄ[^_ÃUWVSƒė‹D$4‹pP‰T$ …ö„Ŗ‹D$8‰T$‹8‰đ‹oô‰î‰Åëļ‰l$‹m…ít-‹Eƒė‰ņ‹Xô9ķFË)ķQWPčü˙˙˙ƒÄ…ĀDÅĀyĪ‹m …íuĶ‹D$9D$ tF‹@ƒė‰ņ‹Xô9ķFËQPWčü˙˙˙‰ōƒÄ)څĀD…Āx‹D$0‹T$‰‹D$0ƒÄ[^_]ļ‹D$0‹T$ ‰‹D$0ƒÄ[^_]ÂU‰åWVSƒė‹E ‹pƒĀ‰E؅ö„Ą‹E‹‰Eā‹xôëļ‹Fš…Āt>‰Æ‹F‰ú‹Xô‰EÜ9ûF̓ėRP˙uā‰Uäčü˙˙˙‰ųƒÄ‹Uä)Ų…ĀDÁ…Āxŋ‹F 1ɅĀu‹E܄ɉu܉EäuAƒė)ûR˙uā˙uäčü˙˙˙ƒÄ…ĀDÅĀˆč‹E‰0Æ@‹Eeô[^_]‹u؍´&‹E 9p t.ƒė Včü˙˙˙‹}‹XƒÄ‰u܉Ƌ?‰]ä‹[ô‰}ā‹ô9û‰úFĶ뉉u܋uÜ9uØ„›‹E‹Vƒė‹‹rô‹Xô9Ū‰ŲFÎ)ķQRPčü˙˙˙ƒÄ…ĀDÃ1ö…Āxtƒė jčü˙˙˙‰Ã@ƒÄƒė˙uPčü˙˙˙‰đƒÄ˙uØļđ˙uÜSVčü˙˙˙‹E ƒÄƒ@‹E‰Æ@‹Eeô[^_]‹E܅Ā…f˙˙˙1öé˙˙˙ļžëŽëƒė žjčü˙˙˙ƒÄ‰Ã@녃ė Pčü˙˙˙‰$čü˙˙˙ƒÄčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åWVSƒė‹]…Ûtt‹‹@ü‹pūtG€>*tŋšQķĻt4uäh{hDjVčü˙˙˙ƒÄ j3h\ hčü˙˙˙‰4$čü˙˙˙ƒÄjhhSčü˙˙˙ƒÄeô[^_]Ãčü˙˙˙‰Ãƒė Včü˙˙˙‰$čü˙˙˙U‰åWVSŊ`˙˙˙ėØWčü˙˙˙‹ÆEԋ Į…`˙˙˙ĮEĐÆEՋCôĮEØĮEÜĮEāĮE䉝,˙˙˙‰Œ,˙˙˙Į…0˙˙˙X…,˙˙˙CôZjPčü˙˙˙ĄY‹ ‰Â‰…4˙˙˙…4˙˙˙Bô^‰jPčü˙˙˙Ą‹ĩ8˙˙˙‹@ô‰”,˙˙˙…T˙˙˙Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ ‰$Į…8˙˙˙Į…<˙˙˙Į…@˙˙˙Į…D˙˙˙Į…H˙˙˙Į…L˙˙˙Į…P˙˙˙čü˙˙˙XZVWĮ…8˙˙˙Į…X˙˙˙Į…\˙˙˙ čü˙˙˙‹E ƒÄ ˙p˙0…4˙˙˙Pčü˙˙˙XZV˙učü˙˙˙‹…\˙˙˙ƒÄ Į…,˙˙˙ Į…`˙˙˙4Į…4˙˙˙ Į…8˙˙˙ƒč =………T˙˙˙ƒė Į…8˙˙˙Pčü˙˙˙Ą‹5‹ ‹ ‹@ô‰´,˙˙˙Ą‰…4˙˙˙‹@ô‰Œ4˙˙˙‹Cô‰,˙˙˙‰<$‰”,˙˙˙Į…`˙˙˙čü˙˙˙‹EƒÄeô[^_]t&•+˙˙˙č\ék˙˙˙‰Ãë‰Ãë3‹Sô‹5 ‰,˙˙˙‰Ã‰´,˙˙˙ƒė Į…`˙˙˙Wčü˙˙˙‰$čü˙˙˙…,˙˙˙ƒė Pčü˙˙˙‰$čü˙˙˙‰Ãë밃ė Včü˙˙˙Y…,˙˙˙^hPčü˙˙˙ƒÄë§UWVSƒė ‹\$$‹|$(‹l$ ‹t$,)߉øÁ˙Áø…˙ŽÁįßë@ƒė˙sVčü˙˙˙ƒÄ…ĀtUƒė˙sVčü˙˙˙ƒÄ…ĀtJƒė˙sVčü˙˙˙ƒÄ…ĀtOƒÃ 9ßt`ƒė˙3Včü˙˙˙ƒÄ…Āuމ]ƒÄ ‰č[^_]´&ƒÃëåvƒÃ‰č‰]ƒÄ [^_]ļƒÃ‰č‰]ƒÄ [^_]ļ‹D$()øÁøƒøt2ƒøtƒøt=‹D$(‰EƒÄ ‰č[^_]ƒė˙7Včü˙˙˙ƒÄ…Āt*ƒĮƒė˙7Včü˙˙˙ƒÄ…ĀtƒĮƒė˙7Včü˙˙˙ƒÄ…Āuą‰}éF˙˙˙‹|$$ë”UWVSƒė ‹l$$‹t$()î‰đÁūÁø…öŽ—‹D$,Áæî‹‹{ôë.´&‹E9xôtP‹E9xôtx‹E 9xô„”ƒÅ9‹E9xôu҃ėWSPčü˙˙˙ƒÄ…Āuŋ‹D$ ‰(‹D$ ƒÄ [^_]vƒėWSPčü˙˙˙ƒÄ…Āuž‹D$ U‰‹D$ ƒÄ [^_]´&ƒėWSPčü˙˙˙ƒÄ…Ā…r˙˙˙‹D$ U‰랍´&ƒėWSPčü˙˙˙ƒÄ…Ā…V˙˙˙‹D$ U ‰és˙˙˙t&‹D$()đÁøƒøtƒøtVƒøtF‹D$ ‹L$(‰éH˙˙˙‹D$,‹(‹]ô‹9Xôt]ƒÆ‹9Xôu׃ėSUPčü˙˙˙ƒÄ…ĀuŋD$ ‰0é˙˙˙‹D$,‹(‹]ôëŅ‹L$,‹‹)‹Pô‹]ô9ÚtƒÆ밃ėRUPčü˙˙˙ƒÄ…ĀuéëŋƒėSUPčü˙˙˙ƒÄ…Āu‘ëĢ‹t$$éX˙˙˙UWVSƒė ‹\$$‹|$(‹l$ ‹t$,)߉øÁ˙Áø…˙Ž–Áįßf‹…Ātƒė˙6˙pčü˙˙˙ƒÄ…Ā„ę‹C…Ātƒė˙6˙pčü˙˙˙ƒÄ…Ā„ã‹C…Ātƒė˙6˙pčü˙˙˙ƒÄ…„܋C …Ātƒė˙6˙pčü˙˙˙ƒÄ…Ā„ŃÃ9û…z˙˙˙‹D$()ØÁøƒøt:ƒøtƒøtM‹D$(‰EƒÄ ‰č[^_]‹…Ātƒė˙6˙pčü˙˙˙ƒÄ…Āt=ƒÃ‹…Ātƒė˙6˙pčü˙˙˙ƒÄ…Āt ƒÃ‹…Āt­ƒė˙6˙pčü˙˙˙ƒÄ…Āu™v‰]ƒÄ ‰č[^_]‰öŧ'ƒÃ‰č‰]ƒÄ [^_]ļƒÃ‰]ë˃à ‰]ëÃUWVSƒė ‹t$ ‹D$$9Ætm…öu…Ātƒė hô čü˙˙˙´&ƒė)đ˙t$,j‰ÃPčü˙˙˙ƒÄƒû‰Įh t ƒėSVUčü˙˙˙ƒÄ˙u*ƒÄ ‰č[^_]ÃļˆG ëæ´&ƒÄ Ŋ [‰č^_]ÐĮG‰ÆD ëÆU‰åWVSƒė,‹E‹u ƒ8ŽŽģv‹ž‰EԍEäčlm‹}äƒėhh Wčü˙˙˙ƒÄ„Ātn‹E‹9Ët!‹EԍTŽDvŧ'‹8ƒĀ‰xø9Đuô‹Eƒéƒë‰‹Eäƒč =…@‹EƒÃ9z˙˙˙€=tčüeô[^_]Ít&ƒėhh~ Wčü˙˙˙ƒÄ„Ā…t˙˙˙ƒėhhm Wčü˙˙˙ƒÄ„Ā…V˙˙˙ƒėhhg Wčü˙˙˙ƒÄ„Ā…8˙˙˙ƒėhhĶ Wčü˙˙˙ƒÄ„Ā…˙˙˙ƒėhhŋ Wčü˙˙˙ƒÄ„Ā…üū˙˙ƒėhh` Wčü˙˙˙ƒÄ„Ā…Ūū˙˙ƒėhh§ Wčü˙˙˙ƒÄ„Ā…Āū˙˙ƒėhhU Wčü˙˙˙ƒÄ„Ā…ĸū˙˙ƒėhhN Wčü˙˙˙ƒÄ„Ā…„ū˙˙ƒėhhC Wčü˙˙˙ƒÄ„Ā…fū˙˙ƒėhh7 Wčü˙˙˙ƒÄ„Ā…Hū˙˙ƒėhh0 Wčü˙˙˙ƒÄ„Ā…*ū˙˙ƒėhh( Wčü˙˙˙ƒÄ„Ā… ū˙˙ƒėhh Wčü˙˙˙ƒÄ„Ā…îũ˙˙ƒėhh Wčü˙˙˙ƒÄ„Ā…Đũ˙˙ƒėhhô Wčü˙˙˙ƒÄ„Ā…˛ũ˙˙Eäƒėh‰ Pčü˙˙˙ƒÄ…Āu-´&‹EäÆƒč =„Āũ˙˙Uãč\éŗũ˙˙Eäƒėh€ Pčü˙˙˙ƒÄ…ĀtÍEäƒėhƒ Pčü˙˙˙ƒÄ…ĀtĢEäƒėh† Pčü˙˙˙ƒÄ…Āt“‰øčœ*„ĀuˆéJũ˙˙‰Ã‹Eäƒč =tUãč\ƒė Sčü˙˙˙U‰åWVSƒė,‹E‹} ƒ8ŽŽģv4ƒė7PEäPčü˙˙˙‹EäZYhh P‰EÔčü˙˙˙ƒÄ„Ātj‹E‹9ËtD7T‰öŧ'‹0ƒĀ‰pø9Đuô‹Eƒéƒë‰‹Eäƒč =…`‹EƒÃ9z˙˙˙€=tčüeô[^_]Ít&ƒėhh~ ˙uÔčü˙˙˙ƒÄ„Ā…v˙˙˙ƒėhhm ˙uÔčü˙˙˙ƒÄ„Ā…V˙˙˙ƒėhhg ˙uÔčü˙˙˙ƒÄ„Ā…6˙˙˙ƒėhhĶ ˙uÔčü˙˙˙ƒÄ„Ā…˙˙˙ƒėhhŋ ˙uÔčü˙˙˙ƒÄ„Ā…öū˙˙ƒėhh` ˙uÔčü˙˙˙ƒÄ„Ā…Öū˙˙ƒėhh§ ˙uÔčü˙˙˙ƒÄ„Ā…ļū˙˙ƒėhhU ˙uÔčü˙˙˙ƒÄ„Ā…–ū˙˙ƒėhhN ˙uÔčü˙˙˙ƒÄ„Ā…vū˙˙ƒėhhC ˙uÔčü˙˙˙ƒÄ„Ā…Vū˙˙ƒėhh7 ˙uÔčü˙˙˙ƒÄ„Ā…6ū˙˙ƒėhh0 ˙uÔčü˙˙˙ƒÄ„Ā…ū˙˙ƒėhh( ˙uÔčü˙˙˙ƒÄ„Ā…öũ˙˙ƒėhh ˙uÔčü˙˙˙ƒÄ„Ā…Öũ˙˙ƒėhh ˙uÔčü˙˙˙ƒÄ„Ā…ļũ˙˙ƒėhhô ˙uÔčü˙˙˙ƒÄ„Ā…–ũ˙˙Eäƒėh‰ Pčü˙˙˙ƒÄ…Āu-´&‹EäÆƒč =„ ũ˙˙Uãč\é“ũ˙˙Eäƒėh€ Pčü˙˙˙ƒÄ…ĀtÍEäƒėhƒ Pčü˙˙˙ƒÄ…ĀtĢEäƒėh† Pčü˙˙˙ƒÄ…Āt“‹EÔčœ*„Āu‡é)ũ˙˙‰Ã‹Eäƒč =tUãč\ƒė Sčü˙˙˙U‰åWVSƒė‹]…Ûtt‹‹@ü‹pūtG€>*tŋšVķĻt4uäh{hDjVčü˙˙˙ƒÄ j3h\ hčü˙˙˙‰4$čü˙˙˙ƒÄjhhSčü˙˙˙ƒÄeô[^_]Ãčü˙˙˙‰Ãƒė Včü˙˙˙‰$čü˙˙˙U‰åWVSƒė(‹u˙6čü˙˙˙ƒÄ…Ātƒė Pčü˙˙˙ƒÄeôƒĀ[^_]Í´&ƒė jčü˙˙˙Į‰Ã‹F‰CY_S˙6čü˙˙˙ƒÄ…‰Æu eôC[^_]Ãf}ähõhDjWčü˙˙˙ƒÄ j&hD hčü˙˙˙ƒÄ jhæhčü˙˙˙XZVhčü˙˙˙‰<$čü˙˙˙ƒÄ뜉Ãė Wčü˙˙˙‰$čü˙˙˙VSƒė‹\$ ‹t$$9ķuë-t&ƒÃ9Ūt!‹ƒč =tíT$ƒÃč\9Ūu䐍t&ƒÄ[^ÃU‰åWVSƒė<‹}‹u ‹G;G„“…ĀtPüƒėRPčü˙˙˙‹GƒÄƒĀƒė‰GEä˙uPčü˙˙˙‹WƒÄBøZü)đÁø‰Á…Ā÷Ņ<Š~t&CøƒėƒëPSčü˙˙˙ƒÄ9ûuéEäƒėPVčü˙˙˙‹EäƒÄƒč =ueô[^_]ÍUãč\ëî‹)ČÁø…Ā…҉ķē)ˍ•‰U˃ė Pčü˙˙˙ƒÄ‰EĐ]Љ]Čtƒė˙u˙uČčü˙˙˙ƒÄ‹‹]Đ9ƉEÔt%t&…Ûtƒė˙uÔSčü˙˙˙ƒÄƒEԃËEÔ9ÆuߋOC‰EĉÃ9ΉMÔt't&…Ût ƒėVSčü˙˙˙ƒÄƒÃƒÆ9uÔuä‹G‰Eԋ7;uÔuëDt&ƒÆ9uÔt2‹ƒč =tėUäč\ëâ9ĐvP‰ķ¸ü˙˙˙ĮEĖ˙˙˙?)Ëé&˙˙˙‹‰EԋEԅĀt ƒė Pčü˙˙˙ƒÄ‹EЋMˉ_‰ˆ‰GéÄū˙˙ë2ëq‰ÃëH騁ú˙˙˙?w¨‰ķ)˅Ō…Íū˙˙ĮEĖĮEĐéĶū˙˙ƒė Pčü˙˙˙ZYS˙uÄčü˙˙˙ƒÄčü˙˙˙‹Eäƒč =tUãč\ƒė Sčü˙˙˙‰Ã錋MЉMăė Pčü˙˙˙‹EăÄ…Āt:ƒė˙uÄ˙uĐčü˙˙˙ƒÄ‹EЅĀt ƒė Pčü˙˙˙ƒÄčü˙˙˙čü˙˙˙ƒė Sčü˙˙˙ƒÄ‹Eȋƒč =tȍUäč\뾉Ãë(ƒė Pčü˙˙˙^_S˙uĐčü˙˙˙ƒÄčü˙˙˙čü˙˙˙‰Øén˙˙˙čü˙˙˙éN˙˙˙‰Ã뜡ƒĀƒøŖtЍt&U‰åWVSƒė,‹E‹…ŌŽ$}äƒė˙u Wčü˙˙˙‰<$hčü˙˙˙‹EäƒÄƒč =…!‹ ‹59ņ‰Ëuë.ļƒÃ9Ūt!‹ƒč =tí‰úƒÃ‰MÔč\9Ū‹MÔu␋E1ۉ ‹u ‹…Āuëzvŧ'‹EƒÃƒÆ9tcƒėVWčü˙˙˙ĄƒÄ ;ty…ĀtƒėWPčü˙˙˙ĄƒÄƒĀŖ‹Eäƒč =tŽUãƒÃƒÆč\‹E9uωöŧ'ƒė˙u ˙učü˙˙˙ƒÄčü˙˙˙‹@$€¸Üt&eô[^_]ÍļƒėWPhčü˙˙˙ƒÄ둍t&č hëĶUãč\éŌū˙˙‰Ãë‰Ãë‹Eäƒč =tUãč\ƒė Sčü˙˙˙‹Eäƒč =tUãč\ƒė Sčü˙˙˙U‰åWVSƒė,Ą‹}ƒĀƒøŖteô[^_]Ívŧ'‹…Ō~č‹E ]䋉ØčlmƒėShčü˙˙˙‹EäƒÄƒč =… Ą‹ 9ȉEԉÆt8‰}‰Īë ļƒÆ9÷t!‹ƒč =tí‰ÚƒÆč\9÷u捴&‹}‹EÔ1öŖ‹…Āu ëcvƒÆ97tY‹E ‹°‰ØčlmĄ;tw…ĀtƒėSPčü˙˙˙ĄƒÄƒĀŖ‹Eäƒč =t´UãƒÆč\97uŦt&ƒė˙u Wčü˙˙˙ƒÄčü˙˙˙‹@$€¸Ü…Ōū˙˙č héČū˙˙vŧ'ƒėSPhčü˙˙˙ƒÄ듍Uãč\éæū˙˙‰Ãëëú‹Eäƒč =tUãč\ƒė Sčü˙˙˙VSƒė‹\$ ‹t$$9ķuë-t&ƒÃ 9Ūt!‹Cƒč =tėT$ƒÃ č\9Ūuãt&ƒÄ[^ÃU‰åWVSƒė8‹E˙0čü˙˙˙ƒÄ…Āt&ƒė Pčü˙˙˙ƒĀƒÄ‰EԋEԍeô[^_]Éöŧ'ƒė jčü˙˙˙Į‰Â‰EЃĀƒÄ‰EԋE‹X+XĮBĮBĮB ‰ØÁøiĀĢĒĒĒ…Ā…ŅĮEĖ‹EĖ‹MĐÉA‰A‰Y ‹M‹y‹Y9ß„Éƍļ…öt‹ƒė‰‹C‰FCPFPčü˙˙˙ƒÄƒÃ ƒÆ 9ßuՋEЃė‰pP‹E˙0čü˙˙˙ƒÄ…‰Ã„ ˙˙˙uähõhDjVčü˙˙˙Y_hD hčü˙˙˙_ZhæPčü˙˙˙ZYSPčü˙˙˙‰4$čü˙˙˙ƒÄéÔū˙˙´&=UUUw ƒė Sčü˙˙˙‰E˃Äé˙˙˙‹uĖéh˙˙˙‰Ãë čü˙˙˙čü˙˙˙‹EЋ@…Āt ƒė Pčü˙˙˙ƒÄƒė ˙uĐčü˙˙˙‰$čü˙˙˙‰Ãëëƒė Včü˙˙˙‰$čü˙˙˙ƒė Pčü˙˙˙XZV˙uĖčü˙˙˙ƒÄčü˙˙˙‰Ãë›U‰åVSƒė‹u‹] čü˙˙˙‹@$u€¸töÃu9ƒė V˙̓čeø[^]Éöŧ'öÃu ƒė V˙Ķëāv‹ƒė ‹\˙V˙ĶëĪf‹‹\˙ëŋƒú„΃úuzƒė ]ôPčü˙˙˙‹‰$˙R‹M‰ÂƒÄ‰Øčü˙˙˙RRSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙ék˙˙˙‰Ãë‰Ãë‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙ƒė ]ôPčü˙˙˙‹MƒÄ1Ō‰Øčü˙˙˙PPSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙éųū˙˙‰Ãë‰Ãë&ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åVSƒė‹u‹] čü˙˙˙‹@$u€¸töÃu9ƒė V˙̓čeø[^]Éöŧ'öÃu ƒė V˙Ķëāv‹ƒė ‹\˙V˙ĶëĪf‹‹\˙ëŋƒú„Ōƒúu|ƒė ]ôPčü˙˙˙‹‰$˙R‹M‰ÂƒÄ‰Øčü˙˙˙RRSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙1Āéi˙˙˙‰Ãë‰Ãë‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙ƒė ]ôPčü˙˙˙‹MƒÄ1Ō‰Øčü˙˙˙PPSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙1Āéõū˙˙‰Ãë‰Ãë&ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åVSƒė‹u‹] čü˙˙˙‹@$u€¸töÃu9ƒė V˙̓čeø[^]Éöŧ'öÃu ƒė V˙Ķëāv‹ƒė ‹\˙V˙ĶëĪf‹‹\˙ëŋƒú„΃úuzƒė ]ôPčü˙˙˙‹‰$˙R‹M‰ÂƒÄ‰Øčü˙˙˙RRSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙ék˙˙˙‰Ãë‰Ãë‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙ƒė ]ôPčü˙˙˙‹MƒÄ1Ō‰Øčü˙˙˙PPSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙éųū˙˙‰Ãë‰Ãë&ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åVSƒė‹u‹] čü˙˙˙‹@$u€¸töÃu9ƒė V˙̓čeø[^]Éöŧ'öÃu ƒė V˙Ķëāv‹ƒė ‹\˙V˙ĶëĪf‹‹\˙ëŋƒú„Ōƒúu|ƒė ]ôPčü˙˙˙‹‰$˙R‹M‰ÂƒÄ‰Øčü˙˙˙RRSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙1Āéi˙˙˙‰Ãë‰Ãë‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙ƒė ]ôPčü˙˙˙‹MƒÄ1Ō‰Øčü˙˙˙PPSjčü˙˙˙‹EôƒÄƒč =tUķč\čü˙˙˙1Āéõū˙˙‰Ãë‰Ãë&ƒė Pčü˙˙˙ƒÄčü˙˙˙‹Eôƒč =tUķč\čü˙˙˙ƒė Sčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åWVSƒė<‹}‹u ‹]‹G;G„Ō…Āt!‹Pôƒė‰‹Pø‰PPüƒĀRPčü˙˙˙‹GƒÄƒĀ ƒėƒÃ‰G‹Cø‰E܋CüS‰EāEäPčü˙˙˙‹WƒÄZčBđ)ķ‰Ų)ÚÁųzđiÉĢĒĒĒ…É~+‰öŧ'‹PėXôƒė‰Pø‹Pđ‰PüSPčü˙˙˙ƒÄ9û‰ØuŪ‹E܃ėƒÆ‰Fø‹Eā‰FüEäPVčü˙˙˙‹EäƒÄƒč =ueô[^_]ÍUÛč\ëî‹)ĐÁøiĀĢĒĒĒ…Ā… ‰đš)ЉEԍI‰MĖÁāƒė Pčü˙˙˙ƒÄ‰EЋEÔEЉEČt ‹‹MȃėƒÃ‰‹Cü‰AASPčü˙˙˙ƒÄ‹‹]Đ9ƉEÔt4…Ût"‹Mԃ닉‹A‰C‰ČƒĀPCPčü˙˙˙ƒÄƒEÔ ƒÃ ‹EÔ9ÆuĖ‹OC ‰EĉÃ9ΉMÔt<vŧ'…Ût‹ƒė‰‹F‰CFPCPčü˙˙˙ƒÄƒÃ ƒÆ 9uÔuԋG‰Eԋ7;uÔuëHt&ƒÆ 9uÔt6‹Fƒč =tëUÜč\ë፠9ČvV‰đĮEĖUUU)ЉEÔ¸ü˙˙˙éėū˙˙‹‰EԋEԅĀt ƒė Pčü˙˙˙ƒÄ‹EĖ‹MЉ_@‰‰Géū˙˙ë5ët‰ÃëKé܁ųUUUwĸ‰đ)ЅɉEÔ…Žū˙˙ĮEĖĮEĐé“ū˙˙ƒė Pčü˙˙˙ZYS˙uÄčü˙˙˙ƒÄčü˙˙˙‹Eäƒč =tUÛč\ƒė Sčü˙˙˙‰Ã鍋}Љ}ăė Pčü˙˙˙‹EăÄ…Āt:ƒė˙uÄ˙uĐčü˙˙˙ƒÄ‹EЅĀt ƒė Pčü˙˙˙ƒÄčü˙˙˙čü˙˙˙ƒė Sčü˙˙˙ƒÄ‹Eȋ@ƒč =tĮUÜč\ëŊ‰Ãë(ƒė Pčü˙˙˙^_S˙uĐčü˙˙˙ƒÄčü˙˙˙čü˙˙˙‰Øém˙˙˙čü˙˙˙éM˙˙˙‰Ãë›U‰åWVSƒė‹u‹} ‹]9ūtSvŧ'…Ût;‹ƒė‰FPCPčü˙˙˙YX‹F‰CF PC Pčü˙˙˙XFZPCPčü˙˙˙ƒÄƒÆƒÃ9÷uˇeô‰Ø[^_]Ãë4‰Æë‰ÆëY‹C ƒč =tUįč\‹Cƒč =tUįč\‰đƒė Pčü˙˙˙ƒÄ9]tƒė ˙učü˙˙˙ƒEƒÄ9]uéčü˙˙˙ëē‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åWVSƒė<‹u‹]‹~;~„{…˙t?‹Gėƒė‰GđPGPčü˙˙˙‹Gô‰GXGøZPG Pčü˙˙˙YXGüPGPčü˙˙˙‹~ƒÄ‹ƒėƒĮ‰~‰EԍCPEØPčü˙˙˙‹C‰EÜXC ZPEāPčü˙˙˙_XEäƒÃSPčü˙˙˙‹FƒÄHØ+M X܉Ę)ČÁúxÜiŌÍĖĖĖ…Ō~@‹Cčsėƒė‰CüVSčü˙˙˙X‹CđZ‰CCôPCPčü˙˙˙YXCøƒÃ PSčü˙˙˙ƒÄ9ū‰ķuĀ‹EԋM ƒė‰EØP‰ČƒĀPčü˙˙˙Y‹E܋M [‰AEāP‰ČƒĀ Pčü˙˙˙XEäZP‹E ƒĀPčü˙˙˙‹EäƒÄƒč =u"‹Eāƒč =u‹E؃č =ueô[^_]ÍUĶč\ëԍUĶč\ë׍UĶč\ëڋ)×Á˙iĮÍĖĖĖ…Ā…Í‹} š)׍‰‰MŧÁāƒė Pčü˙˙˙ƒÄ‰EÄ}Ät;‹ƒė‰CPGPčü˙˙˙YX‹C‰GC PG Pčü˙˙˙XGƒÃZSPčü˙˙˙ƒÄƒė˙uÄ˙u ˙6čü˙˙˙XƒÄ S˙v˙u čü˙˙˙‹~‹ƒÄ‰EĀ9ßu#ëo‹C ƒč =uV‹Cƒč =u?ƒÃ9ßtL‹Cƒč =tŌUÔč\ëȍ 9Ȇ‹} ¸đ˙˙˙ĮEŧĖĖĖ )×é%˙˙˙UÔč\뷍UÔč\렋>…˙t ƒė Wčü˙˙˙ƒÄ‹EĀ‹UĉF‹Eŧ‰€‚‰Fé•ū˙˙‰ÃëëRë~‹G ƒč =tUÔč\‹Gƒč =tUÔč\ƒė Sčü˙˙˙‹MăÄ…ÉtMƒė ˙uÄčü˙˙˙ƒÄčü˙˙˙ƒė Pčü˙˙˙ƒÄ…Ût*‹EÄ9ÉÆt-ƒė VƒÆčü˙˙˙ƒÄ9ķuíëƒė Pčü˙˙˙ƒÄƒė Wčü˙˙˙ƒÄ‹EąĀu ëŦ‰Ã錁ųĖĖĖ ‡îū˙˙‹} )ׅÉ…ū˙˙ĮEŧĮEÄéū˙˙‰Ãë‰ÃëEԃė Pčü˙˙˙‰$čü˙˙˙‹Eāƒč =tUĶč\‹E؃č =tUĶč\ƒė Sčü˙˙˙‰Ãéíū˙˙ë?‰ÃëՉÃëčü˙˙˙ëߋG ƒč =tUÔč\‹Gƒč =tŊUÔč\ëŗ‰ÃëЃė Pčü˙˙˙‹UăÄ…Ō…Ŋū˙˙é˙˙˙U‰åWVSƒė‹u‹} ‹]9ūt4vŧ'…ÛtƒėVSčü˙˙˙XFZPCPčü˙˙˙ƒÄƒÆƒÃ9÷u֍eô‰Ø[^_]Ãë‰Æ‹ƒč =tUįč\‰đƒė Pčü˙˙˙ƒÄ9]tƒė ˙učü˙˙˙ƒEƒÄ9]uéčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙U‰åWVSƒė,‹]‹u‹{;{„ä…˙t"GøƒėPWčü˙˙˙XGüZPGPčü˙˙˙‹{ƒÄEāƒėƒĮ‰{VƒÆPčü˙˙˙YEä_VPčü˙˙˙‹SƒÄBđ+E Áø…Ā~/÷Ѝrđ<Âf‰ķƒėƒîVSčü˙˙˙YXCüPCPčü˙˙˙ƒÄ9ûuۍEāƒėP˙u čü˙˙˙XEäZP‹E ƒĀPčü˙˙˙‹EäƒÄƒč =u‹Eāƒč =ueô[^_]ÍUßč\ëáUßč\ëä‹)ĮÁ˙…˙…Ũ‹M ē)Á‰ĪՉU˃ė Pčü˙˙˙ƒÄ‰EЉøEЉĮ‰EÔtƒėVPčü˙˙˙X‰øƒÆZƒĀVPčü˙˙˙ƒÄ‹;9} ‹uĐt4‰öŧ'…ötƒėWVčü˙˙˙YXGPFPčü˙˙˙ƒÄƒĮƒÆ9} uՃėƒÆV˙s˙u čü˙˙˙‰Į‹3‹CƒÄ9đt[‰EÔ닃č =u>ƒÆ9uÔt@‹Fƒč =tߍUāč\ëՍ?9×vJ‹M ĮEĖ˙˙˙)Á¸ø˙˙˙‰Īé˙˙˙Uāč\븋…Āt ƒė Pčü˙˙˙ƒÄ‹EЋMˉ{‰ȉCé§ū˙˙ú˙˙˙wŽ‹M )Á…ԉ΅Įū˙˙ĮEĖĮEĐéÍū˙˙‰Ãë‰ÃëEāƒė Pčü˙˙˙‰$čü˙˙˙‹Eāƒč =tUßč\ƒė Sčü˙˙˙‰Ãë닍Aô=tåUāč\ëۃė Pčü˙˙˙ƒÄ…ött‹EĐ9ƉÃtyƒė SƒÃčü˙˙˙ƒÄ9Ūuíëd‰Ãëë=‹Eԋƒč =tUāč\ƒė Sčü˙˙˙‹EЃÄ…Āt&ƒė ˙uĐčü˙˙˙ƒÄčü˙˙˙ƒė Pčü˙˙˙‹UЃÄ…Ōuڃė ˙uÔčü˙˙˙ƒÄ‹EЅĀuÅë҉Ãë‰Ãë ë čü˙˙˙é,˙˙˙‹ƒč =tUāč\‰Øƒė Pčü˙˙˙‹EЃÄ9đ‰Ãt‹EԉĮƒė SƒÃčü˙˙˙ƒÄ9ķuí‰}Ôčü˙˙˙‰Ãčü˙˙˙ƒė Sčü˙˙˙ƒÄér˙˙˙Sƒė$høčü˙˙˙ƒÄ hhøhčü˙˙˙XZjho čü˙˙˙Y[jh‡ ĸčü˙˙˙ĸXZjh˜ čü˙˙˙Y[h:hŠ ĸčü˙˙˙ƒÄ \$SPhčü˙˙˙ƒÄ hhhčü˙˙˙XZh h¯ čü˙˙˙ƒÄ SPhčü˙˙˙ƒÄ hhhčü˙˙˙YXhhļ čü˙˙˙ƒÄ SPhčü˙˙˙ƒÄ hhhčü˙˙˙XZjhŊ čü˙˙˙YĸXjhÎ čü˙˙˙ŖXZjhČ čü˙˙˙YŖXjhĪ čü˙˙˙ĸXZjdh× čü˙˙˙YŖXhhé čü˙˙˙ƒÄ SPhčü˙˙˙ƒÄ hhhčü˙˙˙XZjhú čü˙˙˙ƒÄ ĸĮ hhhčü˙˙˙YXhä h Įčü˙˙˙ƒÄ SPhčü˙˙˙ƒÄ hhhčü˙˙˙XZjhčü˙˙˙ƒÄ ĸShhčü˙˙˙ƒÄ hhhčü˙˙˙ƒÄ Į hhhčü˙˙˙ƒÄ ĮĮhhhĮčü˙˙˙ƒÄ([ÃN7testing8internal26ThreadLocalValueHolderBaseEN7testing8internal26GoogleTestFailureExceptionEN7testing8internal9DeathTestEN7testing8internal16DeathTestFactoryEN7testing8internal23DefaultDeathTestFactoryEN7testing31TestPartResultReporterInterfaceEN7testing8internal24HasNewFatalFailureHelperEN7testing4TestEN7testing8TestCaseEN7testing17TestEventListenerEN7testing22EmptyTestEventListenerEN7testing8UnitTestEN7testing32ScopedFakeTestPartResultReporterEN7testing8internal27OsStackTraceGetterInterfaceEN7testing8internal18OsStackTraceGetterEN7testing8internal35DefaultGlobalTestPartResultReporterEN7testing8internal38DefaultPerThreadTestPartResultReporterEN7testing8internal12UnitTestImplEN7testing8internal17StreamingListener20AbstractSocketWriterEN7testing8internal17StreamingListener12SocketWriterEN7testing8internal17StreamingListenerEN7testing8internal27PrettyUnitTestResultPrinterEN7testing8internal17TestEventRepeaterEN7testing8internal24XmlUnitTestResultPrinterEN7testing8internal13DeathTestImplEN7testing8internal16ForkingDeathTestEN7testing8internal15NoExecDeathTestEN7testing8internal13ExecDeathTestEN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderEN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderEzD+g  XÚaģē{…ļSstd=÷$2@‹'2‹'2§'2ŽŊ'2Ų'2˙'2‘(2’@(2“[(2”w(2•“(2–Š(2—ĩ(2˜Û(2™)2š!)2›L)2œg)2ž})2 ž)2Ąē)2ĸÕ)2¤õ)2§*2Ē:*2ŦZ*2Žu*2°*2ąļ*2˛Đ*2ŗę*2´+2ĩ+2ļ8+2ˇø+2¸,2š-,2ēL,2ģk,2ŧ–,2Ŋą,2ŋŌ,2Áí,2 -2Ã--2ÄM-2Ål-2Ƃ-2Įĸ-2ČÂ-2Éâ-2Ę.2Ë.2Ė0.2ÍN.2Îm.2Ī‹.2ĐĒ.2[‹2 v‹2 –‹Ũ3Så3\3^ ģ? ,4Y G4_)  †4c<  öä4gO ) G#O0ķ( ķ\8•v\8{\8\8\8\8 r*ŐĮvŐ{ŐŐŐŐ čĨ°Aųv°A{°A°A°A°A\ƒ"9v"9{"9"9"9"9 čļéđy™ë%dXė%5Îō›hdɋĪ‹4eqö&ü$†Ī‹Ī‹ltú$"ü$ŖĪ‹Ī‹ÛZŊĸ%ĮՋՋđēŠīđáՋF× FSՋՋđĪ‹‰!Ū:ۋ)ۋՋđ•h?ۋMۋՋđ5Î- ۋqۋđ4m:Ģ4‹á‹?Q ģ#?ĒĪ‹Ū5$ü$Éá‹á‹eof(øc?kH,Åv?á‹%5ŧ9%šŧ4Éy™6$%dX7'5Î=c;į‹í‹eqAM=ü$^í‹í‹ltE>ēü$|í‹í‹ÛZIÂM% ķ‹ķ‹đēMHđēķ‹F×QŨJķ‹Ūķ‹đ틉!Uoų‹ų‹ķ‹đ•hYĪBų‹&ų‹ķ‹đ5Î]Ģ ų‹Jų‹đmaWd˙‹Qe)Ńí‹Ū5iéü$ĸ˙‹˙‹eofm+>kHqĻT˙‹65Œ66267LęĀ7cëv5Ŋ%58\}ķ0æō8_đ@8`æK8cevĒ8dk;M8qDJƒ;M8sZeƒ‰ Âû8yqƒ%ņ8\‰2æō8_đK8cvĒ8d•;M8qÉĪ­;M8sßꭐŗ Âû8yö­%‚Ēp Œßh ņ!¨ū°*"ŒßCSš°*‰#Į\š%æōy$/6h!Ęž!˛Íxņ@zK{vĒ|(Îa4Rg€6ib‚ Cqƒ"  Ĩ| ”$ %ŗļ–h%¤g—h%¤q˜R %G ›Ø ķ&Vé%2&Øs%7ĸ'&9”%Bã'|9ĩ¤HҐ(˙xŋųõü$} ƒ ī(ÆÃĢü$š   ī)Ž€Į‘ŗ š ː)eQË´>Ė Ō ː)\˙Ī´Aå đ ːh(EŪ÷°* ː(jââú'°*$ 4 ː‰‰.ˇ%!ÁCːX hh‰)`íRk v ː‰*ĪW%ŧŽyŠ • ː‰+į;Ÿ=°*­ ŗ ː,%o°°*Į ː‰h+í$é°*đ ö ŋ+í(ų°*  Ő°*+Ų,ņ7ː1 7 ŋ+āŦ2#¸ÃO U ŋ+“6YÃm s ŋ*Ž: އ  Ő+ąÄAí´hĨ ĩ ŋhœ'*ÆÉK#7É Ū ŋhhœ'+I“S§2hö  ŋhh+Ä­[É$ü$ ) ŋœ'(dB_I °*œ'hoNmj‰i °*œ'hŒôv—J‰ °*h%#]ŠŠ °*ÃÃ#]ŽaÉ °*ĪĪ#]“OOé °*°*°*#]—°î °*œ'œ'Í œ™ß%( hh*Ę(%ÔwI< Q Őhhh*އ%ÆÅđe k Ő-|9¯ĄęҐ./ēŒ ’ Ő//%ąĸ ­ Ő‰/%ŠŊ Č Őא/%ˇØ í Őאhh/%Áũ Őאhh‰/%Í'<Őœ'h‰/%ÔL\Őœ'‰/%ÛlŐh%‰.,S"’Ő%01I*l/ŨļÁŐא01I2x{ŨÚåŐœ'01I=,ŨŨū Ő%0)fŽîÃ"(Ő0)qĩ5ĪAGŋ1endysÃ`fŐ1end„mĪ…ŋ0QēĶīįž¤Ő0Qē–ŗ;ÛŊÃŋ0(3ŸđįÜâŐ0(3¨đčÛûŋ0ķņÔu3h ŋ0ēÚOXh9?ŋ0ĩßĢXhX^ŋ2„#%L–sƒŐh%2„#úX˜ŖŐh0NThŧÂŋ2ūŦ%õH×âŐh2.y-FÉ÷ũŐ0•Ĩ5ģÆü$ŋ0ŽöD)¡5@ŋh0ŽöUÆņĢYdŐh1atkļąˇ|‡ŋh1atvĢŸĒŐh0žIĩ˛ōŨÃÎŐא0žIž`„ŨįōŐœ'0žIĮÔ|Ũ Ő%0åĖ%D5ßŨ/:Őא0åĖ%U‡šŨShŐאhh0åĖ%)åŨ‘Őœ'h0åĖ˙—ĒŨĒĩŐœ'0åĖ%ŒŨÎŪŐh%2ėq-!ķūŐ%35Î%ōzŨ!Őא05Î^=ŧŨ:OŐאhh05Î%Ā=ŨhxŐœ'h05Îz •Ũ‘œŐœ'05ΊˇęŨĩÅŐh%2w¸ŗK:ÚīŐÃh%0w¸ã­ŨŐhא0w¸ųî8Ũ1KŐhאhh0w¸%g&éŨdyŐhœ'h0w¸"6lŨ’ĸŐhœ'0w¸9čžŨģĐŐhh%0w¸KlĪÃéųŐÃ%0i—daUŨ"Őhh0i—të×Ã;FŐÃ0i—%†ͧÃ_oŐÃÃ0çåBŨˆŐhhא0ÃŊ—ŨļÕŐhhאhh0Ã%œŨîŐhhœ'h0Ãę:íŨ!6Őhhœ'0ÑŗŨOiŐhhh%0Ã×UŨ‚—ŐÃÃא0Ã'Ļ+Ũ°ĘŐÃÜ'h0Ã<[hŨãøŐÃÜ'0ÃQęŨŨ+ŐÃÃh%0Ãv4ÂŨD^ŐÃð*°*0ÀXAŨw‘ŐÃÜ'œ'0ËīEŨĒÄŐÃÃÃÃ0Õ¯BŨŨ÷ŐÃÃĪĪ+.#%›k|Ũ)Őhhh%+Rę%¨Ņ&ŨA[Őhhœ'hŨÜÔ°*h%‰4Ģ)%˜[ˆ°*ĸh%‰0•h%ŌŸ˜hģĐŋ°*hh2˛ %3åđŐŨ0d5Wûœ' ŋ013%pUœ'(.ŋ0ļ,'&“GMŋ0F×%āÖĘhf{ŋœ'hh0F×I§Ŗh”¤ŋאh0F×X­thŊÍŋœ'h0F×%÷8 hæöŋ%h0$KvO hŋאh0$K% |3h8Mŋœ'hh0$K”Ą™hfvŋœ'h0$K%k!hŸŋ%h06ŗχh¸Čŋאh06%/ūŗháöŋœ'hh06ŅÂhŋœ'h06ä /h8Hŋ%h0„¨ķThaqŋאh0„¨%>FwhŠŸŋœ'hh0„¨Ē˙h¸Čŋœ'h0„¨$īYháņŋ%h0¤$2äh ŋאh0¤$%Sōh3Hŋœ'hh0¤$QûHhaqŋœ'h0¤$%_V%hŠšŋ%h0’ąqŅhŗÃŋאh0’ą%jÆ÷hÜņŋœ'hh0’ąŦnh ŋœ'h0’ą%$h3Cŋ%h0rą`‡\lŋhh0ÛZÄ %…ŋא0ÛZ%“°:%Šžŋhhא0ÛZ%ĸtŲ%×öŋhhאhh0ÛZ%´ˇŸ%ŋœ'0ÛZ%ÃtÄ%3Hŋhhœ'0ÛZ%ĶJk%a{ŋhhœ'h$ 4‹%{Q°*ąâXœ'œ'œ'‰7đ˃*°*㛜'œ'œ'‰ė‹á§1°*›œ'œ'œ'‰<Â%ã)>CIœ'Őœ'œ'‰Ÿ47Č%{÷°*tâX°*°*°*‰ų‘ËŦO°*Ļ›°*°*°*‰ė7ČáDK°*Ķ›°*°*°*‰…Á%ãė CI°*Ő°*°*‰Ų!%5ņ(5Ļņ6čO6ŠbŸKpĩ6Œß ‚!¨ūų'"Œßh x õų'ŗ#Į õ%æōy•$/6Ļ  !Ęž!8 ˛Íx‚K{ĄvĒ|­ÎŸ8Rg¤8ib‚ĩ6Cqƒē6 Ĩ| ”=!%ŗļ– %¤g— %¤q˜R %G ›ņ" !&Vé%2Ļ &Øs%7;(&9”%Bã'|9ĩSĄ ‘(˙xŋˆZü$–!œ!‘(ÆÃäü$ŗ!š!‘)Ž€ĮfŸĖ!Ō!‘)eQˏå!ë!‘)\˙ĪԌū! "‘ (EŪ‹´ų' "&"‘(jââŖ2ų'="M"‘ŗŗ.ˇ%!b ‘q"  ŗ)`íL•„""‘ŗ*ĪW%ŧŽŖ"Ž"‘ŗ+į;–ôų'Æ"Ė"‘,%oŧ~ų'ā"‘ŗ +í$Œ•ų' ##û+í(ŒÎų''#2#‘ų'+Ų,=˛‘J#P#û+āŦ2-Ü h#n#û+“6ũ=Ü †#Œ#û*Ž:Ņ #Ļ#‘+ąÄAƒI ž#Î#û œ'*ÆÉK’Ŧâ#÷#û  œ'+I“SN $$û  +Ä­[ԃü$7$B$û5((d¯öb$ų'5( oNm#‚$ų'5( ŒôvlĀĸ$ų' $%#]ŠŠÅÂ$ų'Ü Ü #]ŽõĮâ$ų'č č #]“æF%ų'ų'ų'#]—Ģh"%ų'5(5(Í œ& %A%  *Ę(%ÔžĖU%j%‘   *އ%Æbķ~%„%‘-|9¯_  ‘./ēĨ%Ģ%‘//%ąģ%Æ%‘ŗ/%ŠÖ%á%‘‘/%ˇņ%&‘‘  /%Á&0&‘‘  ŗ/%Í@&U&‘5( ŗ/%Ôe&u&‘5(ŗ/%Û…&š&‘ $%ŗ.,S"Ģ&ļ&‘%01I*¯k‘Ī&Ú&‘‘01I2Ę‘ķ&ū&‘5(01I=P‘'"'‘$%0)fi?Ü ;'A'‘0)qč Z'`'û1endyö{Ü y''‘1end„M4č ˜'ž'û0Qē´!ˇ'Ŋ'‘0Qē–đ´ô Ö'Ü'û0(3Ÿąˇ!õ'û'‘0(3¨Ãāô ((û0ķņÔã3 3(9(û0ēÚŧŅ R(X(û0ĩßīū q(w(û2„#%ņŒ(œ(‘ $%2„#útMą(ŧ(‘ 0NÅú Õ(Û(û2ūŦ%õ˛æđ(û(‘ 2.y- ))‘0•Ĩ5ü$/)5)û0ŽöDCąĐ N)Y)û 0ŽöUØ Ä r)})‘ 1atkm4Đ •) )û 1atŗ Ä ¸)Ã)‘ 0žIĩĸÔ‘Ü)į)‘‘0žIžL‘* *‘5(0žIĮ‚ā‘$*/*‘$%0åĖ%DüÄ‘H*S*‘‘0åĖ%U`/‘l**‘‘  0åĖ%)Ũ#‘š*Ē*‘5( 0åĖ˙¸*‘Ã*Î*‘5(0åĖ%ü‚‘į*÷*‘ $%2ėq-ß ++‘$%35Î%ōø)‘/+:+‘‘05Î^÷1‘S+h+‘‘  05Î%‚e‘+‘+‘5( 05ÎzĨ‘Ē+ĩ+‘5(05Ί)^‘Î+Ū+‘ $%2w¸ŗëķ+,‘Ü  $%0w¸ãÂ]‘!,1,‘ ‘0w¸ųđ7‘J,d,‘ ‘  0w¸%gqē‘},’,‘ 5( 0w¸"ü ‘Ģ,ģ,‘ 5(0w¸90‘Ô,é,‘  $%0w¸KXŖÜ --‘Ü $%0i—dļ‘+-;-‘  0i—tk9Ü T-_-‘Ü 0i—%†8ĪÜ x-ˆ-‘Ü Ü 0Ã§Žž‘Ą-ļ-‘  ‘0ÃŊA5‘Ī-î-‘  ‘  0Ã%xy‘.!.‘  5( 0ÃęÉ‘:.O.‘  5(0ÃũG‘h.‚.‘   $%0Ãí˙‘›.°.‘Ü Ü ‘0Ã'Tx‘É.ã.‘Ü Ü 5( 0Ã<ʎ‘ü./‘Ü Ü 5(0ÃQ[@‘*/D/‘Ü Ü  $%0Ãvn&‘]/w/‘Ü Ü ų'ų'0À]Ą‘/Ē/‘Ü Ü 5(5(0Ë9¨‘Ã/Ũ/‘Ü Ü Ü Ü 0Õw˙‘ö/0‘Ü Ü č č +.#%›æŲ‘(0B0‘   $%+Rę%¨`‘Z0t0‘  5( ŨÜÃų'˜0 $%ŗ4Ģ)%˜ēúų'ģ0 $%ŗ0•h%Ō5¯ Ô0é0ûų'  2˛ %m!ū0 1‘‘0d5d°5("1(1û013%}R5(A1G1û0ļ,^¸ `1f1û0F×%ā㠍 1”1û5(  0F×I"ũ ­1Ŋ1û‘ 0F×XKœ Ö1æ1û5( 0F×%÷ŋž ˙12û$% 0$Kvûđ (282û‘ 0$K% í= Q2f2û5(  0$K”z 22û5( 0$K%ūč ¨2¸2û$% 06ŗw¯ Ņ2á2û‘ 06%/Ī­ ú23û5(  06Ņ€C (383û5( 06ä[a Q3a3û$% 0„¨ķŪ z3Š3û‘ 0„¨%>|[ Ŗ3¸3û5(  0„¨G⍠Ņ3á3û5( 0„¨$Đ­ ú3 4û$% 0¤$2‘P #434û‘ 0¤$%Sŀ L4a4û5(  0¤$Q-3 z4Š4û5( 0¤$%_R… Ŗ4ŗ4û$% 0’ąqĖn Ė4Ü4û‘ 0’ą%j $ õ4 5û5(  0’ąé& #535û5( 0’ą%lD L5\5û$% 0rąž[, u5…5û  0ÛZÄ %ž5Š5û‘0ÛZ%“Ûč%Â5×5û  ‘0ÛZ%ĸ.‹%đ56û  ‘  0ÛZ%´œ%(636û5(0ÛZ%Ã×%L6a6û  5(0ÛZ%ĶĄ%z6”6û  5( =!Ų!$%5ņû5Ļ‚66ÍË, ûR9>7 #!3^7 ^ \ ä˙ ÃP āŠ w$ ŽĀ (9€ [—€ væ€ ¯N€ ‡ € RI€ e°€Ā )0€€ 1Ö° –Ę S=„ ũ€€7ËŠ!g—7 kĘ CØ ՗ 9Đ ÖC ūž ŠU€€7íđ!Ä7 Ũ  Ä ,f •Ō Š €€7ģ!ĩë7 î‡ ¨Ē 1 €€8´ā:9˙€!J8:[w!R:Ä!ü$.˙€!+818F‘;ág!>8F‘%ņ!˙Ī6<”d!J—70ĩ‚!BGjJ8|8‡8,QJ80ĩ‚!SÔYJ8 8°8,QJ8J80Ŗ!vy’ĒūÉ8Ô8,QĒū0MĄ!ƒŊĒūí8ø8,QĒū<ą!i^7= !9J8>dec!9= !9>hex! 9=DĀ!9=˜ņ!9 >oct!9@==ą!9€?n !9?ü!"9?v!&9?đĒ!)9?ß(!,9?{I!/9 ?xā!39@=ôá!69°=ŗĸ!99J?ũŽ!<9=h8!N:V8=€A!Q:=i!V:=O!Y:>app!lY:ø8>ate!oY:= Ú!tY:>in!wY:>out!zY:=S !}Y: !‰Ä7>beg!Œž:Ŗ:>cur!ž:>end!’ž::RW‘:SL‘:T':\m‘:e‡‘:hĄ‘:iļ‘8%”¸=@­ŋ];/;?;ŠL%L.yŠ€P;`;ŠL%L3Ŗ€ĀwGËPx;ƒ;ŠL9%˙ČG;3Ŗ€līËP§;˛;ŠLŅ^3Ŗ€ÉĢGËPĘ;Õ;ŠL,3Ŗ€ÜYGËPí;ø;ŠL%3Ŗ€¤ĢËP<<ŠLôã3Ŗ€õqėËP3<><ŠL]3Ŗ€ācGËPV<a<ŠLU%Ų!%5ņ(3 O;ļ–nˑ‹<›<ŠLœ'Ēū3ú.;Ō^ˑŗ<š<ŠLAput;”ķAˑŅ<Ü<ŠLÜ<y™>%3Ë;? ¯ˑ ==ŦįG%ŠLG%3Ŗ€;imGˑ,=7=ŠL%3šƒ;?×íˑX=c=Ŧį%ŠL%3Ĩ";?!+ˑ„==Ŧį]ŠL]B@;?TžˑŦ=Ŧį,ŠL, š¸lš>C’ķpã=!iž7ž7ž7Cp>!ií9í9í9Cėvp!>!i|:|:|:Cėwp@>!i¤B¤B¤BCI-p_>!iP@P@P@C=p~>!iå@å@å@D˛žp!i5‘5‘5‘ É˙0WÉ?E€é0[¤B×>CI¤B!i¤B¤B¤B¤BE80[í9?CIí9!ií9í9í9í9E8.0[|:9?CI|:!i|:|:|:|:EÕz0[P@j?CIP@!iP@P@P@P@EĸĒ0[å@›?CIå@!iå@å@å@å@F@ž0[5‘CI5‘!i5‘5‘5‘5‘ īi@Ũ‘(1I<’áA“Aû‘)Ļs<œŧŲĻAŦAû‘)đú<ĻĒíŋAĘAû‘æ(l„<´>îü$áAėA’’('I<¸žü$BB’’(ņ(<ŋ_ü$%B0B’’(;I<Ã2]ü$GBRB’’(—W<Į}rü$iBtB’’J›ˆ<˙Æü$‡B’’1A ¯u<ÖYD 1AK<ØÉ?Î<ژBG¯u<ÜĪBÕB ’G¯u<ŪäBôB ’Ņ‘9%(ãā<âuâĩB CC’(tH<æ,ĒB(C.C’(SI<ę"Ÿ’ECKC ’(SI<ņ0žĩBbCmC ’%(eN<ųVõ’„CŠC ’+eN<õĩBĸC­C ’%+žI< ’ÅCĐC ’ø@+ëN< c’čCķC ’ø@+~H<ˇßĩB DD’ø@+žH<1ĩB.D9D’ø@,Žö<$wĒBMD’ø@˜B8]ëĀD@‚æ#g^D|DŒDÎL%L.nĩ#^D­DÎL%LŲ!%5ņ(8$|E04T">=JâDčDCJy™"%0d"čą-=J EECJ0*G"T<=J,E2ECJ@õí"ÅĀDGERE,L%.Ī"ĪcEiE,LŲ!%5ņ(8oF0ÜmaD˙ŠEžEŠEaR%*\FMu>¤Né#>˜O6FP^I>ŖFQ>ĸ$FRģ†>ø&Ü/>ú%I_TpFÄ6n9?ˆ; ‰Î$š…F%Ŗū$š% z§$מF%Ŗū$×%7+)ZˇF ųŌ + Í)\jG% k)ažFžr)^ž4%ŗ´)bĪF%ĐĀ)cĪF%üs)dĪF #ŋ)_Ä44ĻÚ)gÜ*ĪF"GĪF4ĻÚ)nŲ‰ūF;GūF4¸ņ)uŒ¤ĪFTGĪFS¸ņ)|Û6ūFūFˇF b*`ÚG%M€*ež4%e/*fž4GĶ*lĸG¨GĘ4GĶ*pˇGĮGĘ4Đ4Đ4I_T1ž4I_T2ž48ŖvwH1strG?HüGHĪã< JTø  H5HÛ4%Lø8U,ā4ÚGKH[HÛ4%LŲ!%5ņ(5Ļņ|HŖ)9D, u=8\Io9æō8_đoF8aF);M8qÂHČHé5;M8sØHãHé5ī5Âû8yķHūHé5%VĐũ8hūõ8i"IōđI‡H,b8\~Iõ;;M8qEIKI+6;M8s[IfI+616 Âû8yrI+6% l@vĻI8ˇœ'>ˇœ'3ũü$ī@oëI ~I+¸>@rá°ü$ŅIáIû5Ņ5Ņ5I_Tpœ'ĻI ÷)„RJ ˇF%y)‰œ'(ŗ¨)ŒBF)%J+J6(ŗ¨)Cú*‘BJHJ6ë0œ'đI"IW9,)ZëVX›R)Į K "I!:-)ÉĻI!U¨)ʡF!˜.)Ë K"ē_)Í´JēJ76"ē_)ŌĘJÚJ76=6C62˛)āörīJõJ76$ãĻIYŠü$<æō)nđKJč)]Ö;ZŦA)éiJ<žr)bž4<#ŋ)cÄ4<´‡)fœ'<Æ&)gœ'\K€XK)õŅ5oF)ö*‘Î)øëV9{)ũtX‹ )˙6"7Ŧ)ßXåX¯6]7Ŧ)õXY¯6ÄX"7Ŧ)YY¯6ĩ6ŽX+ãā) 2ŠŽX8Y>Yģ6+tH)râ˜XVY\Yģ6+öN)tWŖXtYzYģ6+SI)˜CÁ6’Y˜Y¯6+SI) _BšX°YģY¯6%+eN)(@“Á6ĶYŲY¯6+eN)/ΒšXņYüY¯6%+l„)7G>ü$ZZģ6Į6šX+ņ();Zü$D[÷[ũ[—60´…/AL/[\\—60ļ/E˜>([5\;\—60)/NÖĢ4[T\Z\—61end/WüF4[s\y\—60Qē/`KL[’\˜\—60(3/iXÕL[ą\ˇ\—60•Ĩ/”Ī1ü$Đ\Ö\—60ķņ/™í#X[ī\õ\—60ĩ/žÄSX[]]—62˛ /­Œ=)]4]6‘60w¸/ķ št_M]X]66[0w¸/í|4[v]†]6@[62i—/\Ũ9›]Ļ]64[0i—/l'X[ŋ]Ę]6Ŗ6øZ2i—/’^1ä]ô]64[4[2.y/k\ ^^60íŪ/ĢÜīX[(^3^—6Ŗ60F×/Ŋ…X4[L^W^6Ŗ60F×/ÁÔŋ@[p^{^—6Ŗ60†%/ŌÖl4[”^Ÿ^6Ŗ60†%/Ö+Œ@[¸^Ã^—6Ŗ60j%/âá94[Ü^į^6Ŗ60j%/æ$E@[_ _—6Ŗ60ŧŋ/û{ĐZ$_/_6Ŗ60ŧŋ/˙…ČĐZH_S_—6Ŗ632œ'5:tĻI5Ļ‡HÕZ ×Ņ*`ß_%M€*etX%e/*fü$GĶ*l§_­_Í6GĶ*pŧ_Ė_Í6Ķ6Ų6I_T1tXI_T2ü$tX*J8\ä`‹=æō8_đoF8aŐ">8bŋK8cŨvĒ8dא;M8qC`I`>7;M8sY`d`>7D7Âû8yt``>7%aœģ8hĄ`ūõ8iä_ōa>Z8hÃ`ūõ8iûÕōáÖ đ38wØ`ōáÖ>7éDä_ Ąˇ Hc !% Oa ä_%V,Ra%įĐSa%æ¤TaG!%V:a@aP7G!%ZOaZaP7V7)s˙eCmaxaP7\7#öPaP7%oFM-?a>ÔK@%ŦA¤õ`˛Ínä_(Ēeqë¸b7ÖaÜah7(ĒeuäV7ķaųan7(ļyÎÖ´abbn7GāČ|%b+bh7GāČ:bEbh7t7´aGāČ‚Ybdbh7đGāȆsbƒbh7đt7GŸ’bbh7%(5;§Ila´bŋbh7đ)<čŽNVŌbâbh7ađb)ˇŌãöbch7đI_TpĻä_é` Öģj֝bÖŋbÖ¨aÖÜaÖųaé`Æ&âoFãa">ä8?KåC?vĒæN?Îįw@Rgé–BibęģjCqëĀjæōėđ˛Íîä_9ķũãcécz7T9ķúcdz7€7ĮcT9ķ/d0dz7ģc†7€7Oc.9ķ>FdQdz7Œ7.ß§bdmdz7%31I§‚Ū’7…ddz7Œ725Îč2­Ĩdĩdz7ģc†70)#δ‹cÎdÔdz70),XR—cídķd˜71end5ˆ”‹c eez71end>VŲ—c+e1e˜70QēGŖL¯cJePez70QēPĒ-Ŗcieoe˜70(3Y>Ŧ¯cˆeŽez70(3bžGŖc§e­e˜70ķņŽ?ĸģcÆeĖe˜70ĩ“Iģcåeëe˜72„#ɰęffz7ģcOc0NŪÃFģc)f/f˜70•ĨįXÚü$HfNf˜7būŦAhpbfmfz7ģc0Žö „Ösc†f‘fz7ģc0Žö˙cĒfĩf˜7ģc2PB ĘfÕf˜7ģc1at6'úscíføfz7ģc1atHœŧcgg˜7ģc0õpSŦ6sc4g:gz70õp[ģËcSgYg˜70U‘cč•scrgxgz70U‘kŌc‘g—g˜7013z¨[c°gļgz7013‚wÉgcĪgÕg˜72ėq‘~Sęgõgz7†723ĩ\H hhz73w¸kt4‹c(h8hz7‹c†72w¸0žMhbhz7‹cģc†70i—}Š?‹c{h†hz7‹c0i—œ杋cŸh¯hz7‹c‹c2˛ ǞīÄhĪhz7’72.yģ Œähęhz72jÖS˙hiz7ģc†7bvXáBĮ#i3iz7đ†72ĻÁŗ™Hi]iz7‹cģc†72 ÕFæ-ri‚iz7‹cא0&—ŽŅŊģc›iĢi˜7ģcœ'2Í˙œl$ĀiËiz7[c3ĮO~?‹cãiîiz7‹c3ĮO™‹cjjz7‹c‹c.&Ä0jEj!i*‘z7*‘*‘ģc.BŌędjyjCI*‘z7*‘*‘ė.P:—“j¨jCI*‘z7*‘*‘€7I_Tp5Ļä_6 (6‹c sˇ$šėj%Žũ$š%Ų!%ũ;8\ĻkÂDæō8_đoF8až7">8bĒ7K8cĩ7vĒ8dģ7;M8qKkQkĶ7;M8saklkĶ7Ų7Âû8y|k‡kĶ7%V„D8hūõ8iėjō¤7ėj ¨9 HÖm !% OOl ėj%V,ROl%įĐSOl%æ¤TOlG!%Vüklå7G!%Zllå7ë7)s˙eĢ /l:lå7ņ7#öPClå7%oFMdF_l>ÔKJG%ŦA¤ˇk˛Ínėj(Ēeq4×÷7˜lžlũ7(Ēeu6ë7ĩlģl8(ļyŲĸvlŌlØl8GāČ|įlílũ7GāČülmũ7 8vlGāČ‚m&mũ7đGāȆ5mEmũ7đ 8GŸTm_mũ7%(5;§?&Olvmmũ7đ)<čŽ"Š”m¤mũ7Olđb)ˇ>3¸mÃmũ7đI_Tp¤7ĻėjĢk‡Í ÖëtÖ_mցmÖjl֞lÖģlĢkÆ&â¤7oFãOl">äoFKåzFvĒæ…FÎįiGRgéˆIibęëtCqëđtæōėđ˛Íîėj9ķũĨnĢn8T9ķŧnĮn88‰nT9ķ/Ũnōn8}n88n.9ķ>oo8!8.ß§$o/o8%31I§ōH'8GoRo8!825ÎčCÚgowo8}n80)#pMno–o80),ҟYn¯oĩo-81end5f–MnÎoÔo81end>˙Yníoķo-80QēGaŒqn pp80QēPlen+p1p-80(3Yi“qnJpPp80(3bÜfenipop-80ķņŽCĘ}nˆpŽp-80ĩ“Ņ}n§p­p-82„#ÉĩÂpŌp8}nn0NŪ}nëpņp-80•Ĩį'*ü$ qq-8būŦAŽŠ$q/q8}n0Žö ˇų5nHqSq8}n0Žö‘ÁAnlqwq-8}n2PB o/Œq—q-8}n1at6o5n¯qēq8}n1atHøAnŌqŨq-8}n0õpSŠ5nöqüq80õp[áAnrr-80U‘c›×5n4r:r80U‘k‚ˇAnSrYr-8013zđnrrxr8013‚Ũî)n‘r—r-82ėq‘ûŦrˇr8823ĩ ĖrŌr83w¸kAMnęrúr8Mn82w¸0ps$s8Mn}n80i—}˜éMn=sHs8Mn0i—œíOMnasqs8MnMn2˛ ĒĒM†s‘s8'82.yģZėĻsŦs82jÖrĘÁsŅs8}n8bvXáœâåsõs8đ82ĻÁc] tt8Mn}n82 ÕFåA4tDt8Mnģ70&—Ž“į}n]tmt-8}nœ'2Í˙œ}/‚tt8n3ĮOiLMnĨt°t8Mn3ĮO™ŠMnČtØt8MnMnI_Tp¤75Ļėj6›(6fđÛm ėŧ4¯1u@4ŗæoF4´ž7K4ĩĩ7ĩRž7 `Ę3oIuc3q ģ?Ėh8\v’Iæō8_đoF8a\8">8bb8K8ch8vĒ8dn8;M8q¨uŽu†8;M8sžuÉu†8Œ8Âû8yŲuäu†8%V†;8hūõ8iIuōëIu ¯x H3x !% OŦv Iu%V,RŦv%įĐSŦv%æ¤TŦvG!%VYv_v˜8G!%Znvyv˜8ž8)s˙eh<Œv—v˜8¤8#öP v˜8%oFM4Kŧv>ÔKL%ŦA¤v˛ÍnIu(ĒeqE?Ē8õvûv°8(Ēeu€ž8wwļ8(ļy´ŽĶv/w5wļ8GāČ|DwJw°8GāČYwdw°8ŧ8ĶvGāČ‚xwƒw°8đGāȆ’wĸw°8đŧ8GŸąwŧw°8%(5;§ üŦvĶwŪw°8đ)<čŽQÜņwx°8Ŧvđb)ˇLYx x°8đI_TpëĻIuv1I ÖMÖŧwÖŪwÖĮvÖûvÖwvÆ&âëoFãŦv">ä?KKåJKvĒæUKÎį]LRgé|NibęMCqëRæōėđ˛ÍîIu9ķũyyÂ8T9ķy$yÂ8Č8æxT9ķ/:yOyÂ8ÚxÎ8Č8nx.9ķ>eypyÂ8Ô8.ß§yŒyÂ8%31I§$Ú8¤y¯yÂ8Ô825ÎčēÄyÔyÂ8ÚxÎ80)#ŪĒxíyķyÂ80),ī-ļx zzā81end5v÷Ēx+z1zÂ81end>—’ļxJzPzā80QēGŒ8ÎxizozÂ80QēPrÂxˆzŽzā80(3Y' Îx§z­zÂ80(3bĄ—ÂxÆzĖzā80ķņŽXņÚxåzëzā80ĩ“ۍÚx{ {ā82„#ÉŽO{/{Â8Úxnx0NŪR‡ÚxH{N{ā80•Ĩᕞü$g{m{ā8būŦA×ä{Œ{Â8Úx0Žö Ū)’xĨ{°{Â8Úx0ŽöˆržxÉ{Ô{ā8Úx2PB )Qé{ô{ā8Úx1at6ķ¤’x ||Â8Úx1atH@Xžx/|:|ā8Úx0õpSČT’xS|Y|Â80õp[Ų§žxr|x|ā80U‘cz`’x‘|—|Â80U‘kÂÛžx°|ļ|ā8013zƒzxĪ|Õ|Â8013‚1†xî|ô|ā82ėq‘—Õ }}Â8Î823ĩģP)}/}Â83w¸k7ģĒxG}W}Â8ĒxÎ82w¸0p^l}}Â8ĒxÚxÎ80i—}˜1Ēxš}Ĩ}Â8Ēx0i—œaaĒxž}Î}Â8ĒxĒx2˛ ĒŊāã}î}Â8Ú82.y줺~ ~Â82jÖš~.~Â8ÚxÎ8bvXáâB~R~Â8đÎ82ĻÁSig~|~Â8ĒxÚxÎ82 ÕF47‘~Ą~Â8Ēxn80&—ŽÄÚxē~Ę~ā8Úxœ'2Í˙œ!ėß~ę~Â8zx3ĮOæ,Ēx Â8Ēx3ĮO™õ Ēx%5Â8ĒxĒxÚxI_Tpë5ĻIu6û6fû8xI-8\€›Pæō8_đoF8a"9">8b(9K8c.9vĒ8d49;M8qģÁL9;M8sŅÜL9R9Âû8yė÷L9%VF+8hūõ8i\ōģ\ ž HF‚ !% Oŋ€ \%V,Rŋ€%įĐSŋ€%æ¤Tŋ€G!%Vl€r€^9G!%Z€Œ€^9d9)s˙eŸ€Ē€^9j9#öPŗ€^9%oFM=RĪ€>ÔK#S%ŦA¤'€˛Ín\(ĒeqÂ0p9v9(Ēeuõd9%+|9(ļy‘æ€BH|9GāČ|W]v9GāČlwv9‚9æ€GāČ‚‹–v9đGāȆĨĩv9đ‚9GŸÄĪv9%(5;§Ęœŋ€æņv9đ)<čޝZ‚‚v9ŋ€đb)ˇÛ(‚3‚v9đI_TpģĻ\€+ Öe‰Ö΁ÖņÖڀցÖ+€Æ&âģoFãŋ€">äHRKåSRvĒæ^RÎįfSRgé’Uibęe‰Cqëj‰æōėđ˛Íî\9ķũƒƒˆ9T9ķ,ƒ7ƒˆ9Ž9ų‚T9ķ/Mƒbƒˆ9í‚”9Ž9‚.9ķ>xƒƒƒˆ9š9.ß§”ƒŸƒˆ9%31I§úņ 9ˇƒÂƒˆ9š925ÎčN†׃įƒˆ9í‚”90)#`ÔŊ‚„„ˆ90),ŧiɂ„%„Ļ91end5QČŊ‚>„D„ˆ91end>âÉ‚]„c„Ļ90QēGŖąá‚|„‚„ˆ90QēPe6Ղ›„Ą„Ļ90(3Y5á‚ē„Ā„ˆ90(3bP;ՂŲ„ß„Ļ90ķņŽQ)í‚ø„ū„Ļ90ĩ“ĪĐí‚……Ļ92„#ɡo2…B…ˆ9킁‚0NŪ›Ėí‚[…a…Ļ90•ĨįÜæü$z…€…Ļ9būŦAuŋ”…Ÿ…ˆ9í‚0Žö ‰ËĨ‚¸…Ã…ˆ9í‚0Žö‹|ą‚܅į…Ļ9í‚2PB Ύü…†Ļ9í‚1at6mXĨ‚†*†ˆ9í‚1atHfgą‚B†M†Ļ9í‚0õpSpOĨ‚f†l†ˆ90õp[Ÿlą‚…†‹†Ļ90U‘cüQĨ‚¤†Ē†ˆ90U‘kAą‚ÆɆĻ9013z‚â†č†ˆ9013‚á=™‚‡‡Ļ92ėq‘Ũ‡'‡ˆ9”923ĩ L<‡B‡ˆ93w¸kĻxŊ‚Z‡j‡ˆ9Ŋ‚”92w¸0ö‡”‡ˆ9Ŋ‚í‚”90i—}’iŊ‚­‡¸‡ˆ9Ŋ‚0i—œŋøŊ‚҇ᇈ9Ŋ‚Ŋ‚2˛ Ē @ö‡ˆˆ9 92.yģĨčˆˆˆ92jÖŊ¨1ˆAˆˆ9í‚”9bvXá Uˆeˆˆ9đ”92ĻÁ‹ˆzˆˆˆ9Ŋ‚í‚”92 ÕF82¤ˆ´ˆˆ9Ŋ‚490&—Ž#Qí‚͈ŨˆĻ9킜'2Í˙œlōˆũˆˆ9‚3ĮO'pŊ‚‰ ‰ˆ9Ŋ‚3ĮO™FāŊ‚8‰H‰ˆ9Ŋ‚Ŋ‚í‚Ŋ‚I_Tpģ5Ļ\6ž&6ųK‚ :8\.Š—Uæō8_đoF8aí9">8bķ9K8cū9vĒ8d:;M8q͉؉:;M8sé‰ô‰:":Âû8yŠŠ:%V+8hūõ8it‰ōÛ9t‰ ?à H^Œ !% O׊ t‰%V,R׊%įĐS׊%æ¤T׊G!%V„ŠŠŠ.:G!%Z™Š¤Š.:4:)s˙eØũˇŠÂŠ.:::#öPˊ.:%oFM9WįŠ>ÔKX%ŦA¤?ОÍnt‰(ĒeqŠ@: ‹&‹F:(Ēeuyá4:=‹C‹L:(ļyagūŠZ‹`‹L:GāČ|o‹u‹F:GāČ„‹‹F:R:ūŠGāČ‚Ŗ‹Ž‹F:đGāȆŊ‹Í‹F:đR:GŸÜ‹į‹F:%(5;§îk׊ū‹ ŒF:đ)<čŽz¤Œ,ŒF:׊đb)ˇR>@ŒKŒF:đI_TpÛ9Ļt‰3Š~[ Öx“Öį‹Ö ŒÖōŠÖ&‹ÖC‹3ŠÆ&âÛ9oFã׊">äDWKåOWvĒæZWÎįbXRgéZibęx“Cqë}“æōėđ˛Íît‰9ķũ-3X:T9ķDOX:^:T9ķ/ezX:d:^:™Œ.9ķ>›X:j:.ß§ŦˇX:%31I§æ0p:ĪÚX:j:25ÎčŪÍī˙X:d:0)#JՌŽŽX:0),Ŋ´áŒ7Ž=Žv:1end5L–ÕŒVŽ\ŽX:1end>4yáŒuŽ{Žv:0QēGb<ųŒ”ŽšŽX:0QēPKĻíŒŗŽšŽv:0(3Yņ~ųŒŌŽØŽX:0(3b—!íŒņŽ÷Žv:0ķņŽcuv:0ĩ“ؚ/5v:2„#ɘYJZX:™Œ0NŪ6Dsyv:0•ĨįÕ?ü$’˜v:būŦAFŦˇX:0Žö /ŊŒĐÛX:0ŽöŸ$Ɍô˙v:2PB Ũΐv:1at6lkŊŒ7BX:1atHK6ɌZev:0õpSĘsŊŒ~„X:0õp[..ɌŖv:0U‘cčžŊŒŧÂX:0U‘k/aɌېáv:013zŽûĨŒú‘X:013‚ʉąŒ‘‘v:2ėq‘k4‘?‘X:d:23ĩĮęT‘Z‘X:3w¸kŲ_Ռr‘‚‘X:Ռd:2w¸0ä—‘Ŧ‘X:Ռd:0i—}**ՌÅ‘Đ‘X:Ռ0i—œ{!Ռé‘ų‘X:ՌՌ2˛ ǎD’’X:p:2.yģŗÔ.’4’X:2jÖĘI’Y’X:d:bvXá“Ym’}’X:đd:2ĻÁØŊ’’§’X:Ռd:2 ÕFˆ”ŧ’Ė’X:Ռ:0&—Ž0 å’õ’v:œ'2Í˙œS€ ““X:ĨŒ3ĮOi(Ռ-“8“X:Ռ3ĮO™´ÕŒP“`“X:ՌՌI_TpÛ95Ļt‰6ē 6Ō-cŒųÚ8\A” \æō8_đoF8a|:">8b–'K8c‚:vĒ8dˆ:;M8qæ“ė“ :;M8sü“” :Ļ:Âû8y”"” :%V9G8hūõ8i‡“ō%‡“ iž Hq– !% Oę” ‡“%V,Rę”%įĐSę”%æ¤Tę”G!%V—””˛:G!%ZŦ”ˇ”˛:¸:)s˙e|ųƔՔ˛:ž:#öPŪ”˛:%oFMB^ú”>ÔK(_%ŦA¤R”˛Ín‡“(ĒeqˆĮÄ:3•9•Ę:(Ēeu€…¸:P•V•Đ:(ļy•m•s•Đ:GāČ|‚•ˆ•Ę:GāČ—•ĸ•Ę:Ö:•GāČ‚ļ•Á•Ę:đGāȆЕā•Ę:đÖ:GŸī•ú•Ę:%(5;§ Õę”––Ę:đ)<čŽú/–?–Ę:ę”đb)ˇw¯S–^–Ę:đI_Tp%Ļ‡“F”ą§ ֋Öú•Ö–Ö•Ö9•ÖV•F”Æ&â%oFãę”">äM^KåX^vĒæc^Îįk_RgéŠaibꋝCq됝æōėđ˛Í9ķũ@—F—Ü:T9ķW—b—Ü:â:$—T9ķ/x——Ü:—č:â:Ŧ–.9ķ>Ŗ—Ž—Ü:î:.ß§ŋ—Ę—Ü:%31I§ŒTô:â—í—Ü:î:25Îč˜˜Ü:—č:0)#0č–+˜1˜Ü:0),Ørô–J˜P˜ú:1end5}č–i˜o˜Ü:1end>°sô–ˆ˜Ž˜ú:0QēG0 —§˜­˜Ü:0QēP1—Æ˜Ė˜ú:0(3Yĩ —å˜ë˜Ü:0(3baq—™ ™ú:0ķņŽQŧ—#™)™ú:0ĩ“i —B™H™ú:2„#É'&]™m™Ü:—Ŧ–0NŪ —†™Œ™ú:0•ĨįÉ!ü$Ĩ™Ģ™ú:būŦA›ēŋ™Ę™Ü:—0Žö Ø+Жã™î™Ü:—0Žö8čܖššú:—2PB žH'š2šú:—1at6€ŧЖJšUšÜ:—1atHvjܖmšxšú:—0õpS6 Ж‘š—šÜ:0õp[ILܖ°šļšú:0U‘c˛õЖΚ՚Ü:0U‘k-°ܖîšôšú:013zp$¸– ››Ü:013‚NÁĖ,›2›ú:2ėq‘&<G›R›Ü:č:23ĩ]õg›m›Ü:3w¸kŽč–…›•›Ü:č–č:2w¸0šĒ›ŋ›Ü:č–—č:0i—}tPč–؛ã›Ü:č–0i—œÎ č–ü› œÜ:č–č–2˛ Ēæ<!œ,œÜ:ô:2.yģkAœGœÜ:2jÖĮ\œlœÜ:—č:bvXáM€œœÜ:đč:2ĻÁĨœēœÜ:č–—č:2 ÕF`ũΜߜÜ:č–ˆ:0&—Ž÷/—øœú:—œ'2Í˙œŧ€(Ü:¸–3ĮOĩGč–@KÜ:č–3ĮO™_Tč–csÜ:č–č–—I_Tp%5Ļ‡“6Ģ6<Žv–AvK’Aw|’A{X;An;A‚ƒ;Aƒ™;A„¯;A†Ø;A‰ķ;A‹ <AŽ$<A?<A_<A’<A˜Ą<Aš­<A›Ā<AœÚ<Aų<Až=A .=AĄN=Aņ­’AöĀaA÷i=Aų„=AúØ=Aûš=Aüš=Aũō=*›8\&ŸŪaæō8_đoF8aP@">8b\@K8cg@vĒ8dm@;M8qËžŅž…@;M8sážėž…@‹@Âû8yüžŸ…@%V]48hūõ8ilžōV@lž ŗŪ HVĄ !% OΟ lž%V,RΟ%įĐSΟ%æ¤TΟG!%V|Ÿ‚Ÿ—@G!%Z‘ŸœŸ—@@)s˙eQ¯ŸēŸ—@Ŗ@#öPß—@%oFM€cߟ>ÔKfd%ŦA¤7Ÿ˛Ínlž(ĒeqČPŠ@  ¯@(Ēeu”@5 ; ĩ@(ļyœėöŸR X ĩ@GāČ|g m ¯@GāČ| ‡ ¯@ģ@öŸGāČ‚› Ļ ¯@đGāȆĩ Å ¯@đģ@GŸÔ ß ¯@%(5;§¨HΟö Ą¯@đ)<čތĄ$Ą¯@Οđb)ˇÛË8ĄCĄ¯@đI_TpV@Ļlž+Ÿ 9 Öp¨Öß ÖĄÖęŸÖ Ö; +ŸÆ&âV@oFãΟ">ä‹cKå–cvĒæĄcÎįŠdRgéČfibęp¨Cqëu¨æōėđ˛Íîlž9ķũ%ĸ+ĸÁ@T9ķ<ĸGĸÁ@Į@ ĸT9ķ/]ĸrĸÁ@ũĄÍ@Į@‘Ą.9ķ>ˆĸ“ĸÁ@Ķ@.ß§¤ĸ¯ĸÁ@%31I§” Ų@ĮĸŌĸÁ@Ķ@25ÎčŊ‘ŲĄmŖsŖß@0QēG9ĮņĄŒŖ’ŖÁ@0QēPÃLåĄĢŖąŖß@0(3YgėņĄĘŖĐŖÁ@0(3bĖõåĄéŖīŖß@0ķņŽDøũĄ¤¤ß@0ĩ“—˜ũĄ'¤-¤ß@2„#ÉŒŲB¤R¤Á@ũĄ‘Ą0NŪR•ũĄk¤q¤ß@0•Ĩį`Šü$Ф¤ß@būŦAõZ¤¤¯¤Á@ũĄ0Žö ™ ĩĄȤͤÁ@ũĄ0ŽöhhÁĄė¤÷¤ß@ũĄ2PB ¯Ē ĨĨß@ũĄ1at6qqĩĄ/Ĩ:ĨÁ@ũĄ1atH/ÜÁĄRĨ]Ĩß@ũĄ0õpS/NĩĄvĨ|ĨÁ@0õp[jęÁĄ•Ĩ›Ĩß@0U‘cŖĩĄ´ĨēĨÁ@0U‘kÚåÁĄĶĨŲĨß@013zú`ĄōĨøĨÁ@013‚R”ŠĄĻĻß@2ėq‘Šë,Ļ7ĻÁ@Í@23ĩ=LĻRĻÁ@3w¸k[ÍĄjĻzĻÁ@ÍĄÍ@2w¸0ZČĻ¤ĻÁ@ÍĄũĄÍ@0i—}éßÍĄŊĻČĻÁ@ÍĄ0i—œ1FÍĄáĻņĻÁ@ÍĄÍĄ2˛ Ēßö§§Á@Ų@2.yģüŦ&§,§Á@2jÖėA§Q§Á@ũĄÍ@bvXá™2e§u§Á@đÍ@2ĻÁö~ЧŸ§Á@ÍĄũĄÍ@2 ÕF!=´§Ä§Á@ÍĄm@0&—ŽbĢũĄŨ§í§ß@ũĄœ'2Í˙œŗ/¨ ¨Á@Ą3ĮO…AÍĄ%¨0¨Á@ÍĄ3ĮO™ŅÍĄH¨X¨Á@ÍĄÍĄũĄI_TpV@5Ļlž6="JŖ a¨ĒGËdë¤ iŠddŌ nŠd@ oËoF p'ËK q2ËCq yÕ¨Û¨×C/Cq ë¨ö¨×C•¨Cq „ŠŠ×CŨC3­Í “°T•¨)Š/ŠãC3tH Ą|ūš¨GŠMŠãC3öN ­˙ ­¨eŠkŠãC3SI ļ8éCƒŠ‰Š×C3SI Â@6u¨ĄŠŦŠ×C%3eN ĪōSéCÄŠĘŠ×C3eN Ûˇ„u¨âŠíŠ×C%3~H čju¨ĒĒãCĄ¨3žI ōhŠéC(Ē3Ē×CĄ¨3žH ūÎu¨KĒVĒãCĄ¨0ëN *ūéCoĒzĒ×CĄ¨0Žö Fš¨“ĒžĒãCĄ¨ĩRŠd[ĄÖž8\gĢįhæō8_đoF8aå@">8bņ@K8cü@vĒ8dA;M8q ĢĢA;M8s"Ģ-ĢA AÂû8y=ĢHĢA%V8Ŧ8hūõ8i­Ēōë@­Ē !Ō H—­ !% OŦ ­Ē%V,RŦ%įĐSŦ%æ¤TŦG!%VŊĢÃĢ,AG!%ZŌĢŨĢ,A2A)s˙e÷ēđĢûĢ,A8A#öPŦ,A%oFM‰j Ŧ>ÔKok%ŦA¤x̞Ín­Ē(ĒeqŪ>AYŦ_ŦDA(ĒeuûF2AvŦ|ŦJA(ļyØ"7Ŧ“Ŧ™ŦJAGāČ|¨ŦŽŦDAGāČŊŦČŦDAPA7ŦGāČ‚ÜŦįŦDAđGāȆöŦ­DAđPAGŸ­ ­DA%(5;§F&Ŧ7­B­DAđ)<čŽ"<U­e­DAŦđb)ˇ¨Īy­„­DAđI_Tpë@Ļ­ĒlĢŗj Öļ´Ö ­ÖB­Ö+ŦÖ_ŦÖ|ŦlĢÆ&âë@oFãŦ">ä”jKåŸjvĒæĒjÎį˛kRgéŪmibęļ´Cqëģ´æōėđ˛Íî­Ē9ķũfŽlŽVAT9ķ}ވŽVA\AJŽT9ķ/žŽŗŽVA>ŽbA\AŌ­.9ķ>ÉŽÔŽVAhA.ß§åŽđŽVA%31I§˙]nA¯¯VAhA25Îčķ(¯8¯VA>ŽbA0)#ã.ŽQ¯W¯VA0),OįŽp¯v¯tA1end5–ÉŽ¯•¯VA1end>D˛Žޝ´¯tA0QēG#p2ŽÍ¯Ķ¯VA0QēPJæ&Žė¯ō¯tA0(3Y2Ž °°VA0(3b=F&Ž*°0°tA0ķņŽ’>ŽI°O°tA0ĩ“āB>Žh°n°tA2„#Éۘƒ°“°VA>ŽŌ­0NŪm=>ŽŦ°˛°tA0•ĨįŠmü$Ë°Ņ°tAbūŦA™å°đ°VA>Ž0Žö žõö­ ąąVA>Ž0ŽöãŽ-ą8ątA>Ž2PB IįMąXątA>Ž1at6oõö­pą{ąVA>Ž1atH\˜Ž“ąžątA>Ž0õpSqĒö­ˇąŊąVA0õp[\RŽֹܹtA0U‘cpYö­õąûąVA0U‘kĩųޞ˛tA013zІۭ3˛9˛VA013‚)ę­R˛X˛tA2ėq‘{Em˛x˛VAbA23ĩô˛“˛VA3w¸kÃJŽ̞ģ˛VAŽbA2w¸0ÉÁвå˛VAŽ>ŽbA0i—}DyŽū˛ ŗVAŽ0i—œOŽ"ŗ2ŗVAŽŽ2˛ Ē2GŗRŗVAnA2.yģVUgŗmŗVA2jÖj*‚ŗ’ŗVA>ŽbAbvXáĖĻŗļŗVAđbA2ĻÁČëËŗāŗVAŽ>ŽbA2 ÕF8_õŗ´VAŽA0&—Žģą>Ž´.´tA>Žœ'2Í˙œÂáC´N´VAŪ­3ĮO‚Žf´q´VAŽ3ĮO™ž–މ´™´VAŽŽ>ŽŽI_Tpë@5Ļ­Ē656ˆĄœ­g˛8\ĩ"pæō8_đoF8a°A">8bļAK8cŧAvĒ8dÂA;M8q$ĩ*ĩÚA;M8s:ĩEĩÚAāAÂû8yUĩ`ĩÚA%V•J8hūõ8iÅ´ō)ļÅ´ !ũ H¯ˇ !% O(ļ Å´%V,R(ļ%įĐS(ļ%æ¤T(ļG!%VÕĩÛĩėAG!%ZęĩõĩėAōA)s˙e,ļļėAøA#öPļėA%oFMÄq8ļ>ÔKĒr%ŦA¤ĩ˛ÍnÅ´(Ēeq\ūAqļwļB(ĒeuŽéōAŽļ”ļ B(ļy–ØOļĢļąļ BGāČ|ĀļÆļBGāČÕļāļBBOļGāČ‚ôļ˙ļBđGāȆˇˇBđBGŸ-ˇ8ˇB%(5;§|ĩ(ļOˇZˇBđ)<čŽEGmˇ}ˇB(ļđb)ˇH‘ˇœˇBđI_Tp)ļĻÅ´„ĩ= ÖÉžÖ8ˇÖZˇÖCļÖwļ֔ļ„ĩÆ&â)ļoFã(ļ">äĪqKåÚqvĒæåqÎįírRgé uibęÉžCqëΞæōėđ˛ÍîÅ´9ķũ~¸„¸BT9핏 ¸BBb¸T9ķ/ļ¸Ë¸BV¸"BBęˇ.9ķ>á¸ė¸B(B.ß§ũ¸šB%31I§*×.B š+šB(B25ÎčøĐ@šPšBV¸"B0)#šŖ&¸išošB0),Kš2¸ˆšŽš4B1end5Ģ&¸§š­šB1end>˜í2¸ÆšĖš4B0QēGšpJ¸åšëšB0QēPáŒ>¸ē ē4B0(3Y§ŒJ¸#ē)ēB0(3bÃÛ>¸BēHē4B0ķņŽÜV¸aēgē4B0ĩ“ËKV¸€ē†ē4B2„#ÉQ ›ēĢēBV¸ęˇ0NŪIGV¸ÄēĘē4B0•Ĩį.%ü$ãēéē4BbūŦAߥũēģBV¸0Žö ĸ!ģ,ģBV¸0Žö?q¸EģPģ4BV¸2PB ˛Åeģpģ4BV¸1at6]¸ˆģ“ģBV¸1atHxˇ¸Ģģļģ4BV¸0õpSÍ ¸ĪģÕģB0õp[F¸îģôģ4B0U‘cĨ#¸ ŧŧB0U‘kwĮ¸,ŧ2ŧ4B013z}ųöˇKŧQŧB013‚,F¸jŧpŧ4B2ėq‘i…ŧŧB"B23ĩ”šĨŧĢŧB3w¸kČŋ&¸ÃŧĶŧB&¸"B2w¸0U)čŧũŧB&¸V¸"B0i—}žČ&¸Ŋ!ŊB&¸0i—œĘt&¸:ŊJŊB&¸&¸2˛ Ē/_ŊjŊB.B2.yģÅŊ…ŊB2jÖĪEšŊĒŊBV¸"BbvX፞ŊÎŊBđ"B2ĻÁA;ãŊøŊB&¸V¸"B2 ÕF2° žžB&¸ÂA0&—ŽņņV¸6žFž4BV¸œ'2Í˙œÖz[žfžBöˇ3ĮOĩu&¸~ž‰žB&¸3ĮO™&¸ĄžąžB&¸&¸V¸I_Tp)ļ5ĻÅ´6ĶD6„ļ´ˇ žã4¯ŋ f4ą<@4ŗæoF4´"9K4ĩ.9ĩR"9 {3o2ŋc3q ģ? ŧ4ētŋ f4ŧ<@4žæoF4ŋŋK4ĀאĩRŋ YT3hŒŋc3j ģ?Œ8\FĀ5wæō8_đoF8a¤B">8bĒBK8cĩBvĒ8dģB;M8qëŋņŋĶB;M8sĀ ĀĶBŲBÂû8yĀ'ĀĶB%V_Ú8hūõ8iŒŋō;Œŋ ú† Hv !% OīĀ Œŋ%V,RīĀ%įĐSīĀ%æ¤TīĀG!%VœĀĸĀåBG!%ZąĀŧĀåBëB)s˙eŽ›ĪĀÚĀåBņB#öPãĀåB%oFM×x˙Ā>ÔKŊy%ŦA¤WžÍnŒŋ(ĒeqMs÷B8Á>ÁũB(ĒeuÖPëBUÁ[ÁC(ļy¯ÁrÁxÁCGāČ|‡ÁÁũBGāČœÁ§ÁũB CÁGāČ‚ģÁÆÁũBđGāȆÕÁåÁũBđ CGŸôÁ˙ÁũB%(5;§"ĀīĀÂ!ÂũBđ)<čŽÜ:4ÂDÂũBīĀđb)ˇŠ"XÂcÂũBđI_Tp;ĻŒŋKĀF‘ ֐ÉÖ˙ÁÖ!ÂÖ ÁÖ>ÁÖ[ÁKĀÆ&â;oFãīĀ">äâxKåíxvĒæøxÎįzRgé,|ibęÉCqë•Éæōėđ˛ÍîŒŋ9ķũEÃKÃCT9ķ\ÃgÃCC)ÃT9ķ/}ÒÃCÃCCąÂ.9ķ>¨ÃŗÃC!C.ß§ÄÃĪÃC%31I§Në'CįÃōÃC!C25Îč ÄÄCÃC0)#GšíÂ0Ä6ÄC0),“kųÂOÄUÄ-C1end5éîíÂnÄtÄC1end>Ē<ųēÄ-C0QēGŗ5ÃŦIJÄC0QēPÍÃËÄŅÄ-C0(3Yą`ÃęÄđÄC0(3b÷Xà ÅÅ-C0ķņŽlŽÃ(Å.Å-C0ĩ“šåÃGÅMÅ-C2„#ÉA}bÅrÅCÃąÂ0NŪáËőÅ-C0•ĨįÜķü$ĒŰÅ-CbūŦAä;ÄÅĪÅCÃ0Žö –KÕÂčÅķÅCÃ0ŽöŊáÂ ÆÆ-CÃ2PB ‹ã,Æ7Æ-CÃ1at6ŪÕÂOÆZÆCÃ1atHĘVáÂrÆ}Æ-CÃ0õpS 4Õ–ƜÆC0õp[éęáÂĩÆģÆ-C0U‘cMÕÂÔÆÚÆC0U‘kōáÂķÆųÆ-C013zåŊÂĮĮC013‚ fÉÂ1Į7Į-C2ėq‘aLĮWĮCC23ĩ`ĸlĮrĮC3w¸kW:íŠĮšĮCíÂC2w¸0i¯ĮÄĮCíÂÃC0i—}ŪÎíÂŨĮčĮCíÂ0i—œ‚›íÂČČCíÂíÂ2˛ ĒŦv&Č1ČC'C2.yģ=’FČLČC2jÖaČqČCÃCbvXáJØ…Č•ČCđC2ĻÁJĒČŋČCíÂÃC2 ÕFšÕÔČäČCíÂģB0&—ŽđŅÃũČ É-CÜ'2Í˙œėQ"É-ÉCŊÂ3ĮOÍÉíÂEÉPÉCíÂ3ĮO™íÂhÉxÉCíÂíÂÃI_Tp;5ĻŒŋ6~6‘×{ đ4¯ÖÉ@4ŗæoF4´¤BK4ĩĩBĩR¤B %3oîÉc3q ģ? Cœ4ē0Ę f4ŧ<@4žæoF4ŋœ'K4ĀkĩRœ' *-3hHĘc3j ģ? q\4ēĘ@4žæoF4ŋņ@K4ĀAĩRņ@ ØG4¯ÁĘ f4ą<@4ŗæoF4´å@K4ĩü@ĩRå@ ˇL3hŲĘc3j ģ? Ņ4¯Ë@4ŗæoF4´P@K4ĩg@ĩRP@ MS4ŖGË@4§ÄdoF4¨ŪdK4ŠŅdĩRŠd )4v”ËeÎ`ËfËßt—'<I_TpV@¯w%ņbP@*Kg@u¨8\SĖd~æō8_đoF8a5‘">8bīCK8cúCvĒ8dD;M8qøËūËD;M8sĖĖDDÂû8y)Ė4ĖD%VP8hūõ8i™Ëō°*™Ë e× HƒÎ !% OüĖ ™Ë%V,RüĖ%įĐSüĖ%æ¤TüĖG!%VŠĖ¯Ė*DG!%ZžĖÉĖ*D0D)s˙egŌÜĖįĖ*D6D#öPđĖ*D%oFM€ Í>ÔKė€%ŦA¤d˞Ín™Ë(ĒeqĪ4ä€Kå€vĒæ'€Îį/RgéNƒibęÕCqëĸÕæōėđ˛Íî™Ë9ķũRĪXĪTDT9ķiĪtĪTDZD6ĪT9ķ/ŠĪŸĪTD*Ī`DZDžÎ.9ķ>ĩĪĀĪTDfD.ß§ŅĪÜĪTD%31I§lDôĪ˙ĪTDfD25Îč;mĐ$ĐTD*Ī`D0)#aÃúÎ=ĐCĐTD0),‚ÕĪ\ĐbĐrD1end5 ęúÎ{ЁĐTD1end>Î\ĪšĐ ĐrD0QēGDˇĪšĐŋĐTD0QēP–>ĪØĐŪĐrD0(3Yà Ī÷ĐũĐTD0(3báŸĪŅŅrD0ķņŽņŸ*Ī5Ņ;ŅrD0ĩ“[*ĪTŅZŅrD2„#ÉrØoŅŅTD*ĪžÎ0NŪđV*Ī˜ŅžŅrD0•Ĩį1]ü$ˇŅŊŅrDbūŦA{,ŅŅÜŅTD*Ī0Žö ¤FâÎõŅŌTD*Ī0ŽöēîÎŌ$ŌrD*Ī2PB n9ŌDŌrD*Ī1at6ZÜâÎ\ŌgŌTD*Ī1atHîÎԊŌrD*Ī0õpSŽWâÎŖŌŠŌTD0õp[ĩCîÎÂŌČŌrD0U‘cøâÎáŌįŌTD0U‘kچîÎĶĶrD013z´ĘÎĶ%ĶTD013‚ÖÎ>ĶDĶrD2ėq‘)4YĶdĶTD`D23ĩ’%yĶĶTD3w¸kČ[úΗͧĶTDúÎ`D2w¸0hąŧĶŅĶTDúÎ*Ī`D0i—}=ÅúÎęĶõĶTDúÎ0i—œŨAúÎÔÔTDúÎúÎ2˛ ǰ3Ô>ÔTDlD2.yģÅSÔYÔTD2jÖĶĘnÔ~ÔTD*Ī`DbvXá=n’ÔĸÔTDđ`D2ĻÁÃmˇÔĖÔTDúÎ*Ī`D2 ÕFŗŨáÔņÔTDúÎD0&—Žŋq*Ī ÕÕrD*Īœ'2Í˙œ$…/Õ:ÕTDĘÎ3ĮObúÎRÕ]ÕTDúÎ3ĮO™aúÎuՅÕTDúÎúÎ*ĪI_Tp°*5Ļ™Ë6SŦ65šˆÎ •t4¯ãÕ@4ŗæoF4´5‘K4ĩúCĩR5‘ _U3oûÕc3q ģ?˜8\oÖXƒæō8_đoF8ašD;M8q6Ö<ÖãD;M8sLÖWÖãDéD Âû8ycÖãD% 6,@v—Ö8ˇ>ˇ3ũü$į@oÜÖ oÖ+¸>@r‰ü$ÂÖŌÖŗDאאI_Tp—Ö úÛ)„C× ˇF%y)‰(ŗ¨)Œ mŐ×ךD(ŗ¨)Ģŋ3×9×ŋDë0áÖûÕWĀ)ZôãXÃú)ĮØ ûÕ!:-)É—Ö!U¨)ʡF!˜.)ËØ"ē_)ÍĨ×Ģ×īD"ē_)Ōģ×Ë×īDõDûD2˛)āۆā׿×īDeōķ×ū×īD%$ã—ÖYŠü$<æō)nđ$ØJč)]4@ZŦA)éZ×<žr)bž4<#ŋ)cÄ4<´‡)f<Æ&)geØKØ—ڝÚE0Të)2o„ØļÚŧÚ E0Të) ’‘‘ØÕÚÛÚE0Á[)wá„ØôÚúÚ E0Á[)w„‘ØÛÛE[ÅÁ)ōfwØ4Û‘Ø[×)ÚאOÛ‘Ø[w$) ‘„ØjÛ>Ø[w$)$įg‘Ø…ÛKØ[(9)(wN„Ø Û>Ø[(9),[‘ØģÛKØ[ÅÁ)0wØÖÛKØ[×)4‚âאņÛKØ[ĻÚ)8Č_>Ø Ü>Ø[ĻÚ)<×!KØ'ÜKØ[¸ņ)@5[>ØBÜ>Ø[¸ņ)D^\KØ]ÜKØ+,?)›ũMoGu܀Ü EEXØ+G )ģČ|oGÜ¨Ü EE+Ôt)üĘ4oGĀÜĐÜ E¸ØE+RN)MzoGčÜøÜ E¸ØE+B )lôįĢØŨ%Ũ E>Ø>Øא+)…H´ĢØ=ŨMŨ E>Øא+tb)žIˆĢØeŨpŨ Eא+()ŗkÁ„؈Ũ˜Ũ E‘Ø„Ø*ĮO)×ĩpŦŨˇŨ E„Ø+žÉ)čârĢØĪŨäŨ E„Ø„Øא+žÉ)øčĩ¸ØüŨŪE‘Ø‘Øא+ą[)šnĢØ)Ū>Ū E„Ø„Øא+ą[)%´¸ØVŪkŪE‘Ø‘Øא.Qė)˜|Ū‚Ū E.Qė)š“ŪŖŪ EõD%EžØ.Qė)žšŪÄŪ E+E.‚u)ĘÕŪāŪ E%01I)G…F1EųŪß E+E0Äô)ŌôC—Öß#ßE0))ÖûĢØ<ßBß E0))Ũ]¸Ø[ßaßE1end)äiĢØz߀ß E1end)čv¸Ø™ßŸßE0Qē)īKķÅØ¸ßžß E0Qē)ķžMŌØ×ßŨßE0(3)÷ã"ÅØößüß E0(3)ûP¸ŌØāāE0•Ĩ)˙ü$4ā:āE0ķņ)t ØSāYāE0ĩ)­6ØrāxāE2˛ )e.Œā˜ā E1E0ŧ)Ņ\iįąāŧā Eא0Yb)ęޝĢØÕāāā Eא0Ûđ)7RĨĢØųā á E¸Øא0á)„ōĢØ"á2á E¸Øא*Ü;)D@›FáQá E¸Ø*Ü;)Rneáuá E¸Ø¸Ø2i—)išŠá•á EĢØ2i—)mxÂĒáĩá E¸Ø0i—)_ސØÎáŲá Eא2i—)Ɲîáūá EĢØĢØ2i—)ƒktâ#â E¸Ø¸Ø2i—)kģČ8âHâ Eŋŋ2.y)Ščč]âcâ E0F×)vžŦĢØ|â‡â Eא0F×)ƒö¸Ø âĢâEא0íŪ)@eØÄâĪâEא0†%)žöĢØčâķâ EE0†%)ĸ[¸Ø ããEE0j%)Ļ;ĢØ0ã;ã EE0j%)ǁV¸ØTã_ãEE0ŧŋ)*ē„Ôįxãƒã Eא0ŧŋ)IŲįœã§ãEא0ž—)žõˆü$ĀãÆãE32ë0EYđ:t—֐Ļä_ Û)Ŧ}åžr)ļĪF%¸=)îäK)¯ŨoF)°Å9{)ĩôã‹ )ˇšDG|˜)šRäXäÖF\|˜)ŊgäräÖF8ä(tH)Á(kä‰ääÜF(öN)ÅPß"äĻäŦäÜF(SI)É âFÃäÉäÖF(SI)ĐC5-äāäëäÖF%(eN)Ø\âFååÖF(eN)ß[-äå*åÖF%(l„)įī6ü$AåLåÜFčF-ä(ņ()ëSü$håsåÜFčFI_Tp ‹Q)ōZįžr)ūūF!¸=)>‰åK)õאoF)öŋÎ)øôã9{)ũ}å‹ )˙ŋD"7Ŧ)čåîåyE]7Ŧ)ūå æyEÍå"7Ŧ)æ$æyEEˇå+ãā) ÆFˇåAæGæ…E+tH)#ĻĄå_æeæ…E+öN).ĘŦå}æƒæ…E+SI)žV‹E›æĄæyE+SI) ŌUÂåšæÄæyE%+eN)(ÄĄ‹EÜæâæyE+eN)/(ĄÂåúæįyE%+l„)7ĘŦü$į(į…E‘EÂå+ņ();Āü$EįPį…E‘EI_Tp6™ķ6ˇ M× Ėš*`Ôį%M€*eôã%e/*fü$GĶ*lœįĸįîFGĶ*pąįÁįîFôFŲ6I_T1ôãI_T2ü$^U ^eōR÷/Z‘ė2¤/sM×%ęū/tęį´‡/gÆ&/h™ú/i—Ö?=/j—Ö˛Í/kä_Î/‚¸ØRg/ƒ¸ØCq/„ŌØæō/†Ø_set/Ž}čƒč7E`set/—“čŖč7EõD=E1č_set/ĸčÃč7ECE01I/ĮŋIEÜčįč7ECE0Äô/=ę@čééOE0´…/AÃņ%čé%éOE0ļ/EŌŲ1č>éDéOE0)/NÔI=č]écéOE1end/WĘ1=č|é‚éOE0Qē/`5ĪUč›éĄéOE0(3/i3UčēéĀéOE0•Ĩ/”Úü$ŲéßéOE0ķņ/™æačøéūéOE0ĩ/žĶačęęOE2˛ /­”Ŧ2ę=ę7EIE0w¸/ķ˙–ėVęaę7EUE č0w¸/¯=čęę7EIčUE2i—/\ĘN¤ę¯ę7E=č0i—/l`’ačČęĶę7E[Eč2i—/’îÄíęũę7E=č=č2.y/ ëë7E0íŪ/Ģ„+ač1ë<ëOE[E0F×/Ŋ2@=čUë`ë7E[E0F×/Á—BIčyë„ëOE[E0†%/ŌŊ8=čë¨ë7E[E0†%/ÖåÔIčÁëĖëOE[E0j%/â+o=čåëđë7E[E0j%/æ Ič ėėOE[E0ŧŋ/ûXËŲį-ė8ė7E[E0ŧŋ/˙dŲįQė\ėOE[EfäĢjėuė7E%325:t—Ö5Ļä_Ūį ôß*`í%M€*e}å%e/*fü$GĶ*lÉėĪė—EGĶ*pŪėîė—EEŲ6I_T1}åI_T2ü$ëV}å Qņ4¯Bí@4ŗæoF4´\8K4ĩh8ĩR\8 Ĩ?4ēyí@4žæoF4ŋb8K4Ān8ĩRb8 $Æ4ē°í@4žæoF4ŋķ9K4Ā:ĩRķ9 ąl4¯įí@4ŗæoF4´í9K4ĩū9ĩRí9 ˆH4¯î@4ŗæoF4´|:K4ĩ‚:ĩR|: Ũ˙4ēUî@4žæoF4ŋĒBK4ĀģBĩRĒB ģ”4¯Œî@4ŗæoF4´°AK4ĩŧAĩR°A Uč4ēÃî@4žæoF4ŋ\@K4Ām@ĩR\@ ۔4¯úî@4ŗæoF4´ÅK4ĩŨĩRŐôã Į@iīOHœ'3ũœ'uĖ@:ī ˙î+¸>@>EË5IīTīúFË5+¸>@Bō‰Ņ5līwīúFŅ5I_Tpœ'ī ŋI4Ŗ˛ī f4ĨS@4§ŽSĩRfS f4ŖŪī f4ĨąB@4§žBĩR–B íČ4Ŗ đ f4ĨÍk@4§ÚkĩR˛k ÅH8 :đ8Ą?\0đJ7J7Ļä_ t@iYđOH3ũ …@:ŧđ :đ+¸>@>}ņŨ„đđGŨ+¸>@BE א§đ˛đGאI_TpYđ k`FņCôĀdėđ!i\8\8\8CŅd ņ!i"9"9"9Cŧd*ņ!i°A°A°ADĮed!iŐŐŐĐŽ3‹mņg3cņ ģ?I_Tp\8 d+4ŅąņdŌ4Ķ\84įE4ԄÅyņņ\8ĩR\8YNEü$&)3‹Øņg3Îņ ģ?I_Tp"9 ü(4ŅōdŌ4Ķ"94įE4Ô­ūäņō"9ĩR"9YNEü$ 4ēHō f4ŧ<@4žæĩR*‘ \™0@ēķEb 0DŐ…ōCI–B!iŐ–B–BŐEąŪ0DŐļōCI*‘!iŐ*‘*‘ŐEƒ0DŐįōCIŐ!iŐŐŐŐEÚå0D°AķCI u!i°A u u°AEœ^0D°AIķCI°A!i°A°A°A°A4”z0Dņ\8~ķCI\8!i\8\8\8\8ElM0D"9¯ķCI"9!i"9"9"9"9Y›^ü$$–3‹áķg3×ķ ģ?I_Tpí9 ŋR4Ņ%ôdŌ4Ķí94įE4ÔRÖíķôí9ĩRí9YNEü$ņŲ3‹Lôg3Bô ģ?I_Tp|: @4ҐôdŌ4Ķ|:4įE4Ô‹Xô|ô|:ĩR|:YNEü$jS3‹ˇôg3­ô ģ?I_Tp¤B ôÖ4ŅûôdŌ4ͤB4įE4ÔkOÃôįô¤BĩR¤BYNEü$7¤3‹"õg3õ ģ?I_Tpz Õ°4ŅfõdŌ4Ķz4įE4ÔÚ".õRõzĩRzYNEü$č•3‹õg3ƒõ ģ?I_TpP@ hą4ŅŅõdŌ4ĶP@4įE4Ԁ˙™õŊõP@ĩRP@YNEü$đ*3‹øõg3îõ ģ?I_Tp°A ˛Y4Ņ<ödŌ4ͰA4įE4Ônŧö(ö°AĩR°AYNEü$Zž3‹cög3Yö ģ?I_Tpå@ b4ҧödŌ4Ķå@4įE4ÔeIoö“öå@ĩRå@YNEü$&3‹Îög3Äö ģ?I_Tp5‘ Ä4Ņ÷dŌ4Ķ5‘4įE4ÔņBÚöūö5‘ĩR5‘YNEü$S3‹9÷g3/÷ ģ?I_TpŐ Ĩd4Ņ}÷dŌ4ĶŐ4įE4ÔE÷i÷ŐĩRŐYNEü$ æ;4¯ŋ÷ f4ą<@4ŗæoF4´°*K4ĩeĩR°* ,4ēö÷@4žæoF4ŋļAK4ĀÂAĩRļA Ęų3høc3j ģ?Š+335øg35+ø ģ?I_Tp\8^|33\øg35Rø ģ?I_Tp"9§_33ƒøg35yø ģ?I_Tpí9ĸ33Ēøg35 ø ģ?I_Tp|:f;33Ņøg35Įø ģ?I_Tp¤B¤¨3:øøg3=îø ģ?I_Tpz  4Ų<ųdŌ4Ûz4įE4Üŧ&ų(ųzĩRzYNEü$}í33cųg35Yų ģ?I_TpP@N33Šųg35€ų ģ?I_Tp°AĒx33ąųg35§ų ģ?I_Tpå@3—33Øųg35Îų ģ?I_Tp5‘ū˜33˙ųg35õų ģ?I_TpŐQc5˙ú TH9í95úI_TpÛ9ķ9ķ9í9 Rg9|:^úI_Tp%–'–'|: ãh9¤B‡úI_Tp;ĒBĒB¤B ڐ9P@°úI_TpV@\@\@P@ ßÎ9å@ŲúI_Tpë@ņ@ņ@å@øĘ95‘I_Tp°*īCīC5‘Ķ)m˙û ŧ q¤B5ûI_Tp;ĒBĒB¤B Qqí9^ûI_TpÛ9ķ9ķ9í9 –$q|:‡ûI_Tp%–'–'|: íqP@°ûI_TpV@\@\@P@ ‰Úqå@ŲûI_Tpë@ņ@ņ@å@ôÉq5‘I_Tp°*īCīC5‘Ņß3‹&üg3ü ģ?I_Tp’g 33Müg35Cü ģ?I_Tp’–G33tüg35jü ģ?I_Tp˜B6æ86=8oíŧũ3.* ƒL˜V8ŸüĨüũIUH¤ ~üģüÆü[L%bøL —ģ%Úüåü[LV80ŧÎ lŅõũūüũũIy™ K%.ú Æ!ũ'ũ[L0Üm ģŖÕũ@ũKũũI%0ŧÎ €V+ũdũoũ[LũŲ!%5ņ(b.yB)&M•ũ ũ[LV8hĖõB~SҰũ[L,L~üĀDE M!OĪ6āũĪ6Ī6EjH!KĪ6úũĪ6Ī6E M!—7ū—7—7 +Pˑ8ūņ(ˑœ' +Pâˑ\ūņ(ˑ%ETh![÷PvūũPĪ6Ī6EM!WĪ6ūĪ6E¸9!_÷PĒūũPĪ6KéCbæ|E8Ŧ÷ãūBl„+xjü$×ū“R™Rēū ‡pŪ ü$˙Ų!%ņ(Ļņœ'א ēÔ Ë‘T˙Ų!%ņ(Ļņˑא ‡pę ü$Š˙Ų!%ņ(Ļņאœ' ÷ā Ļ…vŧ˙{%ŪmRå…vŪmŪm…vE8¸4ɒīÚ˙!&fS[wE:M4Éžīø˙!&–Btx ī ĻŌ|*{%ZRåŌ|ZZŌ|Eæ4ÉęīH!&˛kQ‚C„(ĻgI_TpŐ¤„¤„E7z .ƒ……~™|EaR ŨJˑ­Ų!%ņ(ˑE×$(/*‘ËI_Tp0‘Ņ58 S/ŽĻbäī'ø8iëaË '%Ų!%5ņ(5ĻņAstr~9%F@F^  JNE M!w^7m^7^7El$ÃlF‚%Ej…$ĐˑŽŲ!%ņ(ˑlFC ezÍ!iž7ž7ž7Cķp”ú!iž7I_Tp¤7ž7ž7ß7C!Tz!ií9í9í9C›–”F!ií9I_TpÛ9í9í9(:C`ze!i|:|:|:CĐÚ”’!i|:I_Tp%|:|:Ŧ:C7zą!i¤B¤B¤BC–a”Ū!i¤BI_Tp;¤B¤BßB į ĻJ˜{%,|RåJ˜,|,|J˜CF z/!iP@P@P@C‰<”\!iP@I_TpV@P@P@‘@C\z{!iå@å@å@C_픍!iå@I_Tpë@å@å@&A 6 ĻĻ›Ú{%ČfRåĻ›ČfČfĻ› ū $ü$ūĩRŠdŨCŨC H 0ü$"ĩRŠdŨCŨCC%DzA!i5‘5‘5‘CČŦ”n!i5‘I_Tp°*5‘5‘$DE_ŗ8…ü$‘I_Tp%‰‰ETŊ(/\8¯I_Tpëh8CÜŗ\ÉI_Tpë\8CŠKzč!i\8\8\8C`ĩ”!i\8I_Tpë\8\8’8Eyˆ(/"93I_Tpģ.9CD\MI_Tpģ"9C ›zl!i"9"9"9C{ĸ”™!i"9I_Tpģ"9"9X9EāC(/ŐˇI_TpŨCßë\ŅI_TpŐCĢ zđ!iŐŐŐCs>”!iŐI_TpŐŐJ7C:ˇOEI_T1I_T2ŐאE—Š0kŐvCI–B!iŐ–B–BŐ ß"0ŐļCI–B!iŐI_Tp–B–BŐJ7EwÜ Ÿ–BįĩR–BrÍŽ/–B–BŽ/EE;4ÉúÉ!&œ'Ņ5Eo-ZĘ-_Åœ'œ'œ'<Eëq-rĘPCIœ'œ'œ' S¤yņoĩR\8\8  I\8ĢYŗ{ü$v\8{\8\8\8\8 p!yņĘĩR\8\8 7ë[\8Yŗ{ü$v\8{\8\8\8\8EŲÛi)I_Tp9%ÛiÛi ŗũäņHĩR"9"9 ŌŽI"9„Yŗ{ü$v"9{"9"9"9"9 XĮ!äņŖĩR"9"9 wq["9ßYŗ{ü$v"9{"9"9"9"9E4ɉ÷{!&°*DEÂ&-Z”÷Ŗ_Ű*°*°*<E)ņ-r”÷ÆCI°*°*°*E„$á…FÛ%E'q$ĨĘjųŲ!%%Ej…$˛Ë‘%Ų!%ņ(ˑĘjEj…$îˑQŲ!%ņ(ˑ…FÚG ŅÕ ü$ŒŲ!%ņ(Ļņאœ'C›?(ĻĢI_Tp%‚:‚:CĖ=OĶI_T1I_T2œ'ŐŅ5Eœˆ0kŐCI*‘!iŐ*‘*‘Ő œĻ0ŐDCI*‘!iŐI_Tp*‘*‘ŐJ7EYŗ{ü$I_IIå@I_OIå@å@å@å@ LtŽå@zYŗ{ü$I_IIå@I_OIå@å@å@å@ Ô(Čå@ŦI_IIå@I_OIå@å@å@å@E;c0kå@ŨCIå@!iå@å@å@å@ ×0å@CIå@!iå@I_Tpë@å@å@å@&A A 0'å@]CIå@!iå@Ķ­Ēå@å@å@&A ž0vå@vå@{å@å@å@å@ 0ŋ5‘ËYŗ{ü$I_II5‘I_OI5‘5‘5‘5‘ NôŽ5‘Yŗ{ü$I_II5‘I_OI5‘5‘5‘5‘ ‹Č5‘9I_II5‘I_OI5‘5‘5‘5‘EŌí0k5‘jCI5‘!i5‘5‘5‘5‘ %v05‘ĒCI5‘!i5‘I_Tp°*5‘5‘5‘$D åV0'5‘ęCI5‘!i5‘Ķ™Ë5‘5‘5‘$D Đkv5‘ v5‘{5‘5‘5‘5‘&2?—ÚG ˞u ] Ų!%ņ(Ļņאœ' P4ˑ… Ų!%ņ(ˑ8‘žč .—x#>Ÿ ¯ aį%LUŊ˙#;… Å Õ aį%LŲ!%5ņ(jhex!­@‘ū @‘ xā!k@‘!@‘˞%´ī”N!Ų!%ņ(Ļņœ'א˞P ōHˆ!Ų!%ņ(Ļņאא ˞… ž!Ų!%ņ(Ļņא%4‘… pīĖfSø!_ÅfSrÍû.fSfSû.< _ŗĐ †"Ų!%אא4wÜ pŊ –BV"_Å–BrÍŽ/–B–BŽ/<4^  pøˆ˛k"_ŞkrÍņ/˛k˛kņ/< Ž^ ͞kÂ"{%˛krÍûͲk˛kûÍE^  Ÿ˛kķ"ĩR˛krÍņ/˛k˛kņ/ ¨¯ ģ–B%#{%–BI_Tp–B–Bא ØvŐW#vŐ{ŐŐŐŐyü Üv\8Ž#v\8{\8\8\8\8 ‹7 ĶfSĀ#{%fSrÍ ĩfSfS ĩE‘… ŸfSņ#ĩRfSrÍû.fSfSû.k§7e‚Q$ŪklQ1>‚ÎaFlT1Jô7đSŽDNtx:$œ'm4 ELZˑo$Ų!%ņ(ˑœ'ĒūËn> D8@4))Ļ‹#ž4˜$ž4úb)N‰9Ŋ$ü$ž4ž43e ÕRD?¨Ō$œ'4nE)Ŗß\Ä4ë$Ä4n‘D4›Žü$|&%ointw.$â€bQ°ˆ"$ ÅķŪÕ %>hF0n% 2Û”Gõî&%”Gö%%E÷Gû°*%īØGü°*% Gũ°* %oGū°*%^ĪG˙°*!¤SG°*!đG°*!|G°* !&TG°*$!ÕG°*(!xRG°*,!;cGR“0!įîG X“4!ChG %8!8“G%Jų'ų'ų'%Ķ'v$% ŽRJ÷'($%Ķ' SJ %5(5(Ķ'v;($% gæJK%[(Ķ'% = JR%w(Ķ'5(m ú1J{%“(Ķ'5(m ŗJę'Š(Ķ'wžeJđ' ų J'Õ(œ''Õ(v‹' +’Jm')ų'œ''Õ( a Ji%))v)‹' ԇJ˜'F)ų'F)'Õ(vœ' ŊwJø'g)$%Ķ' ũYJū'})$% @ J\%ž)ų''5(m bãJ…%ē)5(5(m ÕžJ'Õ)'Ķ' pJd%õ)Ķ'5(ų& Æ­Ją%*Ķ'5(ų& yJq%:*ų''5(ų& ÎíJŊ%Z*5(5(ų& BJl%u*5(ų& S§Jš%*5(ų& !yJr'°*°*$%Õ(v%EđŊJ›ų'Đ*ų'5(EžįJŖ%ę*5(5(Eŧ…JĀ%+5(5(EąņJ“ų'+ų'5(EjãJü'8+5(5( ĸXJW']+ų''5(]+vc+h+xtm,K…ø+%ņ@K‡%%Ļ.Kˆ%%v?K‰%%ŒũKŠ% %–CK‹%%hOKŒ%%9TK%%‹YKŽ%%K% %=1K’@%$%ŸÖK“œ'( J',5(ELJžų'-,ų'5('EurJĻ%L,5(5('EڐJ–ų'k,ų'5(' KJž',°*,'Õ(v5( ęJ'ą,5(5( ų#JÂ%Ė,5(Ė,vų' ŅJÉU%í,5(Ė, ŅJų' -ų'5(Ė, –ŅJÔ@%--5(Ė,% Ÿ_JŲG%M-5(Ė,%EķđJÄ'l-ų'5(' RRJŠ%‚-' f&JE%ĸ-5(5(' °JIų'Â-ų'5(' ËwJNų'â-ų'5(' qJRų'.ų'$%' áJY%.5(m 5KJ‚%0.5(m4ŲJāŲ5(N.5($%GJG5(m.5(5(4ŨJęŨ5(‹.5($%-øJ-ø5(Ē.5(5(™—J<™—5(Î.5($%'yųą2ō[‹2ø[‹2v‹2–‹yÔŌ,$å0 žf,܎/%<Ā,Ū ĩGĩ´,ā"/-/×E ĩzHN,æü$I/T/ĩRfS×EfSeĩ´a/l/×EŲ“e¤ęy/„/×E%rÍ ĩ Œ,´ņ/%Oņ,ļŨEGē,¸ĩ/Ā/âEאzW,žü$Ü/į/ĩR–BâE–B§y' Sū,܄0%<Ā,ŪûÍGĩ´,ā0#0ŗFûÍeĩ´00;0ŗF“œe¤ęH0S0ŗF%zN,æü$o0z0ĩR˛kŗF˛krÍûÍû.ņ/EåQ,Ď/Ŧ0§y' אE¸),ėņ/Ę0rÍûÍûÍF`ō,ėû.rÍ ĩ ĩ ,đ -æäL :„2æō =đoF ?°*"> @œ'K AevĒ Bkp OK1Q1qp Qa1l1qwī  V|1‡1q%3Y3 Y& 1Ÿ1Ē1}#13Y3 ][^1Â1Í1}/13ĨR c š 1å1õ1q˙0]bėF mÖU 22q 1˙03ĩ qqÂ˙01272}bsß XÄK2[2q 1kb.l …ō‘o2z2q 1I_Tp%ķ0˛Đ :4æō =đoF ?ų'"> @5(K AvĒ B•p Oá2į2›p Q÷23›Ąī  V33›%3Y3 Y7Ą253@3§š23Y3 ]6­2X3c3§Å23ĨR cĘ)Ą2{3‹3›•2]bėF mŦƒŸ3¯3›Ą2•23ĩ q_,•2Į3Í3§bsß ‰ūá3ņ3›Ą2•b.l …ĸ44›Ą2I_Tp$%‰2 “L7a4&I<L:%&$L;%&ģL?÷$&gwL@%§y%WPŠŀ6Z†ŗ Ȱ*<@ Đ”÷<K ŅĒ÷\Cö78PC›60~H ¤ €68%8VC›60ëN $\C>8I8PC›60žH ×n€6b8m8VC›60­Í  ˇŅ5†8Œ8VCĩRœ'āN6Œ6É ē,L7ë8&I<L:;‘&$L;;‘&ģL?÷$&gwL@%§yG% ˛ęL7-9&I<L:ĸ'&$L;ĸ'&ģL?÷$&gwL@%§y% Ë L7o9&I<L:x”&$L;x”&ģL?÷$&gwL@%§y+%üT :;æō =đoF ?F)"> @*‘K AË5vĒ BŅ5p OĮ9Í9×5p QŨ9č9×5Ũ5ī  Vø9:×5%3Y3 YŠc‡9:&:ã5Ÿ93Y3 ]÷“9>:I:ã5Ģ93ĨR cA‡9a:q:×5{9]bėF mĪQ…:•:×5‡9{93ĩ q01{9­:ŗ:ã5bsß æŅĮ:×:×5‡9Ņ5b.l …‹ë:ö:×5‡9I_Tpœ'o9 dM_õ;oFMŦĻHæōMąšH4ĨRMĩ\Ŧ;E;õ5;ėFM¸:Ļd;õ5;;.lMŋî~;õ5;4ĩM6;—;ī54ŗúMÅHrī5°;ī5¯,MĮĶĘ;õ5õ5 ĐũMĪë;ūõMĐII_TpđIĻ‡HEâ :†=æō =đoF ?6"> @6K A 6vĒ B6p OM<S<6p Qc<n<66ī  V~<‰<6%3Y3 Yäs <Ą<Ŧ<%6%<3Y3 ]ĩ–<Ä<Ī<%61<3ĨR c— <į<÷<6<]bėF m—5 ==6 <<3ĩ q<3=9=%6bsß žEM=]=6 <6b.l …/Õq=|=6 <I_TpđIõ;ē} :?æō =đoF ?Ő"> @ŋK AŨvĒ Bאp Oã=é=,7p Qų=>,727ī  V>>,7%3Y3 Y¯Ŗ=7>B>87ģ=3Y3 ]E{¯=Z>e>87Į=3ĨR cHŖ=}>>,7—=]bėF m*Ą>ą>,7Ŗ=—=3ĩ q˛1—=É>Ī>87bsß ocã>ķ>,7Ŗ=אb.l …%ä??,7Ŗ=I_Tp‹= ĻËM_w@oFMŦ`">M­`KM¯`vĒM°'`æōMą÷_4ĨRMĩ‡Š-?‚?J7Y?ėFM¸ÉôĄ?J7-?Y?.lMŋŸžģ?J7-?4ĩMÂLVY?Ô?D74ŗúMÅÆšD7í?D7¯,MĮ_@J7J7 œģMĪ(@ūõMЌ`I_Tp >ZMĪI@ūõMĐŽ`I_TpáÖCšMŧm@I_TpJ7-?אĻä_WV ŖBZ†ŗ ČŐ<@ ĐĪî<K Ņåîŋ<@ ĐIŋ<K Ņ_ŋ @Ē7K Aĩ7vĒ Bģ7p OE EÁ7p Q0E;EÁ7Į7ī  VKEVEÁ7%3Y3 Y.›ÚDnEyEÍ7ōD3Y3 ]0>æD‘EœEÍ7ūD3ĨR c¸OÚD´EÄEÁ7ÎD]bėF mĶyØEčEÁ7ÚDÎD3ĩ qUļÎDFFÍ7bsß eyF*FÁ7ÚDģ7b.l …Ņ>FIFÁ7ÚDI_Tp¤7ÂD HRM_iGoFMŦ k">M­kKM¯#kvĒM°/kæōMą˙j4ĨRMĩ´2dFšFß7FėFM¸D-ØFß7dFF.lMŋįōFß7dF4ĩMÂ÷ôF GŲ74ŗúMÅ­cŲ7$GŲ7¯,MĮa]>Gß7ß7 „DMĪ_GūõMАkI_Tp¤7ĻėjWå ňIZ†ŗ Čž7<@ Đu<K Ņu @b8K Ah8vĒ Bn8p OęIđIt8p QJ Jt8z8ī  VJ&Jt8%3Y3 YĩQĒI>JIJ€8ÂI3Y3 ]'ļIaJlJ€8ÎI3ĨR c>8ĒI„J”Jt8žI]bėF müj¨J¸Jt8ĒIžI3ĩ qyÉžIĐJÖJ€8bsß ŋáęJúJt8ĒIn8b.l …@āKKt8ĒII_Tpë’I <M_]LoFMŦhu">M­tuKM¯€uvĒM°ŒuæōMą\u4ĨRMĩË4K‰K’8`KėFM¸Ÿr¨K’84K`K.lMŋ‰ ÂK’84K4ĩM‰`KÛKŒ84ŗúMŒōŒ8ôKŒ8¯,MĮîWL’8’8 †;MĪ/LūõMĐíuI_TpëC¯UMŧSLI_Tpë’84Kn8ĻIuWX Å|NZ†ŗ Č\8<@ Đí<K Ņ-í @(9K A.9vĒ B49p OķPųP:9p Q QQ:9@9ī  V$Q/Q:9%3Y3 YWĶŗPGQRQF9ËP3Y3 ]0ĢŋPjQuQF9×P3ĨR cüęŗPQQ:9§P]bėF mšąQÁQ:9ŗP§P3ĩ q §PŲQßQF9bsß {ņķQR:9ŗP49b.l …9ņR"R:9ŗPI_Tpģ›P •‚M_fSoFMŦ{">M­‡KM¯“vĒM°ŸæōMąo4ĨRMĩEĻ=R’RX9iRėFM¸ˇąRX9=RiR.lMŋÁüËRX9=R4ĩMÂ/iRäRR94ŗúMÅ6ˆR9ũRR9¯,MĮhOSX9X9 F+MĪ8SūõMЀI_TpģCøMŧ\SI_TpģX9=R49Ļ\Wî Å’UZ†ŗ Č"9< f Îäž<@ Đīž<K Ņŋ :(Wæō =đoF ?í9"> @ķ9K Aū9vĒ B:p OīUõU :p QVV ::ī  V V+V :%3Y3 Y&¯UCVNV:ĮU3Y3 ]lDģUfVqV:ĶU3ĨR c0ō¯U‰V™V :ŖU]bėF mUn­VŊV :¯UŖU3ĩ qíŖUÕVÛV:bsß >DīV˙V :¯U:b.l …Á<WW :¯UI_TpÛ9—U ņßM_bXoFMŦ“‰">M­Ÿ‰KM¯Ģ‰vĒM°ˇ‰æōMą‡‰4ĨRMĩWį9WŽW(:eWėFM¸°˜­W(:9WeW.lMŋ•)ĮW(:9W4ĩMÂŌ“eWāW":4ŗúMÅG1":ųW":¯,MĮÕX(:(: +MĪ4XūõMĐŠI_TpÛ9CZNMŧXXI_TpÛ9(:9W:Ļt‰Ws ŁZZ†ŗ Čí9<@ Đŧí<K ŅŌí @–'K A‚:vĒ Bˆ:p Oø\ū\Ž:p Q]]Ž:”:ī  V)]4]Ž:%3Y3 Yāø\L]W]š:Đ\3Y3 ]ĩKÄ\o]z]š:Ü\3ĨR cVļ¸\’]ĸ]Ž:Ŧ\]bėF mÁbļ]Æ]Ž:¸\Ŧ\3ĩ qš­Ŧ\Ū]ä]š:bsß ŒŲø]^Ž:¸\ˆ:b.l …^@^'^Ž:¸\I_Tp% \ ĖM_k_oFMŦĻ“">M­˛“KM¯ž“vĒM°Ę“æōMąš“4ĨRMĩ WB^—^Ŧ:n^ėFM¸ëIļ^Ŧ:B^n^.lMŋuÅĐ^Ŧ:B^4ĩMÂŽDn^é^Ļ:4ŗúMÅS#Ļ:_Ļ:¯,MĮ 0_Ŧ:Ŧ: 9GMĪ=_ūõMĐ+”I_Tp%C;Mŧa_I_Tp%Ŧ:B^ˆ:Ļ‡“W”Ö ÅŠaZ†ŗ Č|:<@ Đķí<K Ņ î @\@K Ag@vĒ Bm@p O6bM­—žKM¯ŖžvĒM°¯žæōMąž4ĨRMĩu€cÕc‘@ŦcėFM¸j~ôc‘@€cŦc.lMŋˆbd‘@€c4ĩMÂB$Ŧc'd‹@4ŗúMÅ{ũ‹@@d‹@¯,MĮMĀZd‘@‘@ ]4MĪ{dūõMĐŸI_TpV@C‘æMŧŸdI_TpV@‘@€cm@ĻlžWÕĀ ÅČfZ†ŗ ČP@<@ ĐåĘ<K ŅûĘ‚ũfug{g§F0SI íaŸ­F”gšg–F0SI ô‚žČfŗgžg–F%0eN ųę÷­F×gŨg–F0eN 7÷Čfögh–F%0Žö €đfh%h§Fãf0žI A­F>hIh–Fãf0~H äŪČfbhmh§Fãf0ëN ķi­F†h‘h–Fãf0žH Ū2ČfĒhĩh§Fãf0­Í ^hœFÎhÔh§FĩR\@āN[ĄžÃ :xjæō =đoF ?å@"> @ņ@K Aü@vĒ BAp O?iEiAp QUi`iAAī  Vpi{iA%3Y3 Yl­˙h“ižiAi3Y3 ]˛ß iļiÁiA#i3ĨR cĻŨ˙hŲiéiAķh]bėF mYĖũi jA˙hķh3ĩ qÚŌķh%j+jAbsß æ?jOjA˙hAb.l …zcjnjA˙hI_Tpë@įh xM_˛koFMŦĖĒ">M­ØĒKM¯äĒvĒM°đĒæōMąĀĒ4ĨRMĩ6(‰jŪj&AĩjėFM¸ĪĶũj&A‰jĩj.lMŋ „k&A‰j4ĩMÂXĐĩj0k A4ŗúMń× AIk A¯,MĮA7ck&A&A 8ŦMĪ„kūõMĐQĢI_Tpë@CĒļMŧ¨kI_Tpë@&A‰jAĻ­ĒWS ÅŪmZ†ŗ Čå@< f ΋Ę<@ Đ–Ę<K ŅŦĘ @ļAK AŧAvĒ BÂAp Ozp€pČAp Qp›pČAÎAī  VĢpļpČA%3Y3 Yĸ\:pÎpŲpÔARp3Y3 ]Œ$FpņpüpÔA^p3ĨR cĘ:pq$qČA.p]bėF m4Z8qHqČA:p.p3ĩ qYí.p`qfqÔAbsß Ė]zqŠqČA:pÂAb.l …×VžqŠqČA:pI_Tp)ļ"p ŸĪM_íroFMŦä´">M­đ´KM¯ü´vĒM°ĩæōM਴4ĨRMĩˆGÄqræAđqėFM¸įĶ8ræAÄqđq.lMŋķĨRræAÄq4ĩMÂęėđqkrāA4ŗúMÅX@āA„rāA¯,MĮ”žræAæA •JMĪŋrūõMĐiĩI_Tp)ļCŒ'MŧãrI_Tp)ļæAÄqÂAĻÅ´WÔ Å uZ†ŗ ȰA<@ Đaî<K Ņwî @ĒBK AĩBvĒ BģBp Ow“wÁBp QŖwŽwÁBĮBī  VžwÉwÁB%3Y3 YŽ!MwáwėwÍBew3Y3 ]Š’YwxxÍBqw3ĨR c%Mw'x7xÁBAw]bėF mamKx[xÁBMwAw3ĩ qHÁAwsxyxÍBbsß ÛxxÁBMwģBb.l …ęūąxŧxÁBMwI_Tp;5w AžM_zoFMŦĢŋ">M­ˇŋKM¯ÃŋvĒM°ĪŋæōMąŸŋ4ĨRMĩC ×x,yßByėFM¸ KyßB×xy.lMŋ‡eyßB×x4ĩMÂŋy~yŲB4ŗúMÅĖ‹ŲB—yŲB¯,MĮÚĒąyßBßB _ÚMĪŌyūõMĐ0ĀI_Tp;CˆMŧöyI_Tp;ßB×xģBĻŒŋWĩ Å,|Z†ŗ ȤB @īCK AúCvĒ BDp Oŧ~Â~Dp QŌ~Ũ~D Dī  Ví~ø~D%3Y3 Y,|~D”~3Y3 ]€:ˆ~3>D ~3ĨR cĘé|~VfDp~]bėF m%zŠD|~p~3ĩ q7Xp~ĸ¨Dbsß [<ŧĖD|~Db.l …ō”āëD|~I_Tp°*d~ M_/oFMŦ¸Ë">M­ÄËKM¯ĐËvĒM°ÜËæōMąŦË4ĨRMĩ]"€[€$D2€ėFM¸ˆz€$D€2€.lMŋ`’”€$D€4ĩMÂ÷ķ2€­€D4ŗúMÅĸÆDƀD¯,MĮ ā€$D$D PM΁ūõMĐ=ĖI_Tp°*CëāMŧ%I_Tp°*$D€DĻ™ËW(Ĩ ÅNƒZ†ŗ Č5‘<@ иÕ<K ŅÎÕ‚D‚~D0eN ™ķ/]‚h‚~D%0Žö Ā[W‚Œ‚DJ0žI ß•DĨ‚°‚~DJ0~H ~H/ɂԂDJ0ëN Æa•Dí‚ø‚~DJ0žH ö—/ƒƒDJ0­Í œ\„D5ƒ;ƒDĩR5‘āNˆÎ6Æ/8C :鄿ō =đoF ?šD"> @ŋDK AÅDvĒ BËDp O°ƒļƒŅDp Qƃ҃ŅD×Dī  VáƒėƒŅD%3Y3 YZ pƒ„„ŨDˆƒ3Y3 ] |ƒ'„2„ŨD”ƒ3ĨR c19pƒJ„Z„ŅDdƒ]bėF m#(n„~„ŅDpƒdƒ3ĩ qįųdƒ–„œ„ŨDbsß áÁ°„Ā„ŅDpƒËDb.l …~qԄ߄ŅDpƒI_TpáÖXƒ ŠëM_Ŋ…oFMŦÖæōMąÖ4ĨRMĩéEú„.…KG…ėFM¸ZsM…KGú„….lMŋVīg…KGú„4ĩMŸĐ…€…éD4ŗúMÅŗéD™…éD¯,MĮz ŗ…KGKGĻûÕ]L|NZbXk_,|írČfw@a4 u ;ŽN/ †˛N0ü${)Â0R&†tK%{ŋĨAR@†¤K%{ōĩNRZ†¤K% '† =ü$‡†ĩRž7āNÛmamam 3ŋ =ü$´†ĩRņ@āNœ­—t—t Ĩ =ü$á†ĩRb8āN8xQyQy É< =ü$‡ĩRķ9āNcŒÁzÁz Ÿ =ü$;‡ĩRœ'āNsŽsŽ ē ŽSh‡ĩR"9āNK‚[w[w Ü' =ü$•‡ĩRĒBāN{Âö—ö— ´* =ü$‡ĩR\@āN[ĄR›R› 0Ē Úkī‡ĩRå@āNœ­Q‚Q‚ vH /ü$ˆĩRP@āN[ĄSS č­ =ü$IˆĩRŋāNctxtx ƒz žBvˆĩRŋāNctxtx  =ü$ŖˆĩR5‘āNˆÎЎЎE&:N–ü$ÁˆŲĸ'œ' ›Ā =ü$îˆĩR¤BāN{—Į—Į   ’@‰ĩRŐāNcpÕpÕ  xLH‰ĩR\8āN8xļÛļÛ  su‰ĩR°AāN´ˇ%ā%āEįŨN–ü$“‰Ų%°* Ũž (z‰ĩR¤BāN{—Į—Į Ô =ü$í‰ĩRļAāN´ˇ•• Ō /ü$ŠĩR"9āNK‚[w[w w }XGŠĩRí9āNcŒ °> †_tŠĩR|:āNv–ss R2 ÄdĄŠĩRP@āN[ĄSS X /ü$ΊĩRå@āNœ­Q‚Q‚ . 6ü$‹Ļ`ņ@Cå@āNœ­—tQ‚ l7 J1‹ĩR5‘āNˆÎЎЎšg /ü$ĩR5‘āNˆÎЎЎ ‚"JË\%v‹5(Ė, ëđJã,–‹5(Ė,% û JęN%ļ‹5(Ė,%y•äO7ɋ|O8O}4}dvdv4}‹}};v;v}d z38P52%‹úP9°*%ũeP:°*%q0P@°*%í\PF°* %_ŋPG°*%ŋHPH°*%°ŧPI°*%/čPJ°*%JÄPK°* %¸PL°*$%ņPM%(%ī PN%)%@øPP%*%ŒĖPR%+%6PT%,%č PV%-%!+P]%.%UYP^%/%æPa%0%QPc%1%$,Pe%2%ū—Pg%3%đ>Pn%4%[Po%5ExÍP|°*L%œ'~›'PWvŒ†ÔQ(%EnQ7,awQ8N%–rQ|sĪģQ}9%QTQ~9%žQG%?`Q9%öûQ‚9%éCQƒ@%˰Q„h>Q…%t%ņuy'*Q‡@%‡ŠQ‹@%‰ÄQ@%p[Q™@%ŋųQž@%ZšQŦ%”ËQ¯@%ŪQē%oQŊ9%…ßKKü M Kx†Ž%Ÿ+Kzü%‚+K{5Ž$-R%֍tG%ĄŽuy' ŠSƎ%Ÿ+S ü%Ģ}S!ŽŖ2T%o{Tt+%%ŗ%Tu+%sŅNTysO+TzđŽ%˜ÄT^%%R9T_9%%å<T`%%ĪëTf% %IgTo9%‚s˜'T}s6ÅT~ģsjT@%t%ˏuy'X&T€ûŽ€TƒĸWús6ÅT„i'sjT…%•cT†Öt%uy'/NdT¤9%t%0uy't%@uy'ƒLŽv@ēU %vc„}%}ĸ'vķ0}„2v„2vņ}}}$%};(v‰2}4v4v‚}vv' vv$ }$ }' }t9%v{v8 vŋ6v, v=!}=!}ŋ6}, v”6*‘v0‘œ'v°*G%}ë7vô7˜™V4G%„@Vēb‘vh‘]E6˜V¯%‡‘'L‘EeuVŨ'Ą‘'W‘EöžVÚW‘ļ‘œ'EîVĢL‘ˑœ'};vÜ@vÉ?vį@}É?}į@vü$}ü$v1Av“B}“Bv˜BvYD}ĩBv÷$qWbČ K’%žLWc%†remWd%(We%’qWjĩ|’%žLWk@%†remWl@%ÂWmV’qWvRä­’%žLWw,†remWx,iWy‡’Ų!Xm*Žq€Y]ęܒ%ÎKY‘Ž3YҁZ%ܒbWåū’v“‡%“]]ˆ]OGš Œ˜ G R“%–GĄR“%uGĸX“%ŲGĻ%v!“vn%t%n“uy'v“t%„“uy''‡%”“Ž›ÃFOų& á<X[.x”%ī~[0~%§d[22%%Šs[5Ÿ %8G[:Ē%+[;ĩ%Že[@‰%ĀR[A”%”[E~ %Žd[G2%(%Yų[JĀ,%@ķ[NŽ0%72[PŽ4%Æ~[[aŽ8%#Ö[\aŽ@%F†[]aŽH%ŠI[mG%P%ģI[nG%T+%§T\ @Ž\KŽŽ%]*G%y! ]e€•!J°]j€•!¯+]mG%!‹,]pG%!Ĩį]s•” !d]x°*!._]~€•!ę›]'‰î]‡9%‰[ä]’9%‰Ā]–9%‰Ļ]š9%‰k]ž9%‰~H]Ą9%‰”]¤9%v%#’]§ ”s%]Ē%Š]ÅmŌĮ•!ú¯]Æ’•!|]Į’•ķâ]Čž•‹+ũž1‹DĀįûŒREHžy—!Ã9Õœ'!üuÖü$!MķÚ†•!y\Û†•(REĸ?–J–ž1¤1REĨ[–f–ž1Ē1RE­w–‚–ž1œ'~REŽ”–Ÿ–ž1%0 ßąČgœ'¸–ž–°1[+šēMEü$Ū–Ē1¤1[˛IŊšūü$ū–Ē1¤1[+šĖĢ4ü$—œ'¤1[˛IÍ Đü$>—œ'¤1*˙€Đ‰ÃR—]—ž1œ'L1IãĖ‚m—ž1¤1핎%ˆöĨ— yô  Ī 1 íõWŅW˜!P W˜.ŅЗå—ļ1~—œ'%. ]ö—˜ļ1%0Ö-×kŧ1˜ ˜ļ1"Ņ 0˜;˜ļ1Â1L1I ÕK˜ļ1Â1~—Ĩ—W7} 8û˜ZF_XˏZæ(_ü$ZĘP`Ǝ2‡8;÷ā­˜ŗ˜Č12ŋ+BC9ȘΘČ12Mž:ã˜é˜Î17}ô˜Č1a˜WŨŠ r~™a˜.ŨŠt%™+™Ô1.4•x<™G™Ô1%"ŨŠ}W™b™Ô1Ú1L1I}ƒr™Ô1Ú1™WZ9ƒ š!F_‹ā1TZ9…Ž™š™å1Č1.ēžˆʙՙå1%"Z9å™đ™å1ë1L1I@ôšå1ë1ƒ™üŊK5š:Ü/M÷$Y˙Ūü$WÚ¸T^šIntZ%<}-[9%W˛ `‡šIntf,<}-gN%Wģ@zˇ›!Ī•Û4T}Į~˛šŊšá4Û4.—ūΚؚá4%0tH‚į4ōšøší40öN‚´Û4››í41getƒZÛ40›6›í40S…mÛ4O›U›á42'$‹–™j›u›á4Û4"}Į—…››á4ķ4*1I—W_¤›¯›á4ķ4ITÚG‡š'^:‘KÕ^Elåœ'㛜'‘Ģ^fäÚü$œœ'œ'‘ Ā^l1ãÄ6œ5(‘ü‰^tĢėü$>œ5(5(‘•ß^|6¸ü$^œœ'œ'‘'B^‹^€ü$~œ5(5(‘ô8^žü$žœĒ1Ē1‘Ú^”ŪWÄ6šœ%‘f ^—GßÄ6Ԝ%‘f\^šĐņÄ6īœ%’'^ûœ-5ą; %NÚČÄ6ą=*035ą>@K3595/ą@[f35Ē131IDX[?5~‰3595“SetIČRžŠ35953ûRMmĒ1ÁĮE53d5N Fœ'ߝåE5”oíQÕם‘7˙WKם ž9595%œ'‘Ę\_1°@ž9595‘…ŧj Ąež9595œ'37Äoķrü$}žƒžE53qtŒt›žĄžE53ßŖ|īhšžŋžE532 „ZמŨžE536ŧŠú%õžŸE5œ'3ĐO-eü$ŸŸE53^2–”ü$6Ÿ<ŸE53悚6ü$TŸZŸE53v%ž÷‘ü$rŸxŸE53ėĖŖ[ü$Ÿ–ŸE53>ާo—ü$ޟ´ŸE536RĒŦJü$˟ԟE5) ÁâKåŸëŸ35(~Æ„œ'  E5•° 35%ī  œĨ ī   @ U t5œ'%56q Ļe p t5%Gī  Š Š t5z5H1I Š5Ú™ t5z5$ Ô& čĩĸ•@I Sß –† TU%–ČL Uß Ä˙ ėPš—úG ņ€5—?T ô€5—+C ø€5—œŪ ûĄß —˙ž ūĄ$•T Ą$͖ €5˜u_ zļ Tž‹ iĄtĄ…5‹5[uš ԝU%Ąß ™ũí &XUU%šMax +9&U%0q 0Yå–5ĖĄŌĄœ50[§ 3 !ß ëĄņĄœ50Áü 6Ž;ß  ĸĸœ500G 9tß )ĸ/ĸœ50y… <‚-ü$HĸNĸœ50•5 Heˇü$gĸrĸœ5ĸ5Æ? gF ß Œĸ–5{Đ s°mß Ģĸ–5–5åU%Ē × čŤ•@I Sīĸ–† T%–ČL UīĸÄ˙ ėyš—úG ņ€5—?T ô€5—+C ø€5—œŪ û/Ŗīĸ—˙ž ū/Ŗ$•T /Ŗ$͖ €5˜u_ zÆĸTž‹ yŖ„Ŗ¨5Ž5[uš .ą%ŸŖīĸ™ũí &;%šMax +˜Ņ%0q 0˛š5ÜŖâŖŋ50[§ 3GCīĸûŖ¤ŋ50Áü 6‚Zīĸ¤ ¤ŋ500G 9ę5īĸ9¤?¤ŋ50y… <@iü$X¤^¤ŋ50•5 Hy´ü$w¤‚¤ŋ5Å5Æ? g%Ėīĸœ¤š5{Đ syEīĸģ¤š5š5å%ēĸW,ô ũgĨ!Ų ü$!Ōš ÕZ.,ô ˙ĨĨŠ60žĻ ˆ\ü$!Ĩ;ĨŠ6œ'%œ'œ'›ęØ vmœ'QĨŠ6œ'%œ'W:’ ¤+Ļœ2Q Ļ7Ļ€€€€x!*Ö ą+ĻT:’ ¨ĨĨ°Ĩß6+Ļ2ļ ĒüIÅĨĐĨß6+Ļ0‚ ŽgČ+ĻéĨôĨß6+Ļ":’ ˛ĻĻß6å6L1I ˛mŽĻß6å6/ŧmPš+ĻgĨ”GEAĻ ¨žŪcmĻ Ũ@ ÁsžFfŽĻ Š  Ģ…ŸĶuG:iugÄ6[ģYü$ÕĻœ'°1œ'%ŖG.”GOæĻėĻđ6@æRAϧ §đ6% ęĮmIjRĻAĻ-§3§đ6 ųZpëD%AĻT§Z§đ6 FEyrãü$AĻ{§†§đ6ü$Ąö’|ŪûAĻŖ§ާđ6mĻ™ëX_éRœ'ĸēĢcmžاĒ1G”Gˆį§ō§đ6IH1Iˆų¨đ6I^¯ę?Š%ûūÄ6%˛˙%!8`%!¨ % ^¯ė[¨u¨ö6Ē1%%%Eķ…¨¨ö6%3ˇÎøéōĒ1¨¨ލü63 ųg%ƨˍü63áSú2â%ä¨ę¨ü635ZûUø%ŠŠü6"^¯Š#Šö67L1I;Û3Šö67 ¨Wk-&žkŠŖz&Āš+œ'&7Wūâ&Ō’ŠŖz&ÔôJ5(&7¤˛9 Ÿ’Š‘ĒŸĢģuGUA’ Ą’ŠÆŠŅФ7%KS ¤}ėL;’ŠōŠøŠîHKƒč ϝ@ˇ­’ŠĒĒîHĨĖĮ Ģ›e’Š=ĒCǤ7.˛9 ŽTĒZǤ7"˛9 ąjĒuǤ7ôHL1I ąC1…Ǥ7ôHWŠ ,<ĢU\ _Ûm!2ĩ ažĒ.Š .ČĒÎĒ38. , /ßĒęĒ38%2ĖĮ WœŸ˙ĒĢ38"Š cĢ Ģ3898L1I c¤Ĩ0Ģ3898‘ĒW^YzqŦ!Ī•ŐT}Į~lĢwĢø8Ő.—ūˆĢ“Ģø8%0tHlnŨŦ̞Ģū80öN‚ÖyŐËĢŅĢū81getƒqŐęĢđĢū80S…ėŠŐ ŦŦø82'$‹‘$Ŧ/Ŧø8Ő"}Į—?ŦJŦø89*1I—˜^ŦiŦø89ITAĢ\–pkšWŸz˛­!Ī•ŋT}Į~­Ŧ¸Ŧž9ŋ.—ūÉŦÔŦž9%0tH!אíŦķŦÄ90öN‚§ŋ ­­Ä91getƒŋ+­1­Ä90S…:ËŋJ­P­ž92'$‹ą`e­p­ž9ŋ"}Į—€­‹­ž9Ę9*1I—܃Ÿ­Ē­ž9Ę9IT' ‚Ŧ/ ]ˇ­¤I ˛Č­|ŽŸpŗuGUĄ' ´Č­ü­ŽÕ9%K%i ¸Ö\ZHČ­(Ž.ŽÕ9.I ģ?ŽEŽÕ9"I žUŽ`ŽÕ9IL1I ž-+pŽÕ9I¤ÁS vĀąv!—p ü$!Ŗ r {Â.ÁU ĀŽÆŽ;UŽ=w |ŽÜŽįŽ;%2ū{ ĻĘüޝ;;0Īn€ Ōf; ¯+¯;;0&1\ åGü$D¯J¯7H2•A] Ŋ†_¯j¯;ü$Ĩtö  Xz|Žˆ¯“¯;HĨA[¯ @|Žą¯Á¯;H%Ĩ”cĄ ˇ¸|Ž߯ę¯;HĨ›ōĻ ŧq|ް°;HĨˆĸ ė:|Ž1°<°;+HĨ†ŽŖ &ƒ|ŽZ°e°;į9ĨŪ4¤ 6f|Žƒ°ް;n8Ĩ q¨ ę |ŽŦ°ˇ°;į9Ĩ]?Š ~¸ |ŽÕ°ā°;+HĨ†ĒĨ Åė |Žū° ą;HĨ†/§ ŧN |Ž'ą2ą;HĨŒl¸ ? |ŽPą`ą;H%ĨUđĒ ;ß|Ž~ą‰ą;H"Át ™ą¤ą;=HL1It šN´ą;=HWV ģ9ŗߚ͉˛!æôÔĨ!ˇÎÕ0‘! Ö%!-B×\F "ߚβ8˛;÷œ'%œ'.ߚÚI˛T˛;$;21IÚNQi˛t˛;$;#@Ö}˛;%Íą!ˇŨ*;.V žŦ˛Æ˛/;÷œ'%œ'.;Âײâ˛/;%21IÆCÍ÷˛ŗ5;5"V ßŗŗ/;;;L1Iß-[-ŗ/;;;Āąü’ _`ãŗ%î_hA;%I _iĨ%Ô_jīŗü’_c~ŗ“ŗF;ė8÷L;Ų2_fŖŗŽŗF;%Gü’_lŊŗČŗF;R;H1I_lž×ŗF;R;ûRhÄ6ãŗ>ŗˇU<Ą˙´%=õĪü$%Đü$%'šŅü$%ųŽŌÄ6%4ˆĶÄ6%VĘÔü$ %ķjÕÄ6%_¨ÖÄ6%ĸD×ü$% 8ØÄ6%ô™Ųü$ %<ÎÚ˙´$%CÛ˙´(%UxÜü$,%™¸Ũ˙´0%ãZŪÄ64%ûLßü$8ˇU¤á´į´ @ ŸBšķ´ @%ÂglBšW9Z•ĩ!gÄ6T9_6ĩAĩ@Ē10¸>b¯Tü$Zĩeĩ@49f9sĩ~ĩ@ōcÎÁ‰ĩ@% ĩW˙ãt)UyIÎÄ6™ō›~4ĀÄ6[@‡Qü$ëĩœ'œ'[S‹4Ėü$ ļĒ1Ē1ωW™q%ü$Ē1œ'5B Ōēļ!ˇÎĶœ'! Ô%!-BÕÄ6e5Bjļuļ°AÂAeŽÕ‚ļļ°A%§1IŧAŸļĒļ°AÂA#5Bŗļ°A¨ŸüēļßŋŠ2nÖéļ b` ÎîŸĶ>uG!6äG!Ļ:!D=VŲ !Īe?Ú!į2B&@!ēÄE™ !AvIßŋ@!1ƒM[ĄH!īQœ­T!H™Wv–`!Ļā\‘Ēl!īÁ_ü$x!8Vc%|!ŅHië@€!đ0oÛ9„!h&y´ˆ!Ŗ }ÂĖ!ƒīGØ!Ŧ8†ü$Ü!<Ή%ā!ā•ŒgĨä!kvŦč!ė`“vŦđ!õ$˜Âø!~‘™9ÃüĒĩBÅĒ'šĄü$TŸši¸t¸­DéGUŧŠÁēļЏ•¸­D%0Ī Ģ &@ޏ´¸­D2ŦšąoFɸÔ¸­D&@0¨Žšá&@í¸ķ¸­D2qōžœšš­D&@0Æ<Äž%,š2šõG0ERÉ­ˆ%KšQšõG0îiÎgF%jšpšõG0×oÔbę%‰ššõG0f3Ųg %¨šŽšõG0ĪfŪU %ĮšÍšõG0 ã͇%æšėšõG0Ųé…R%ē ēõG0@î0%$ē*ēõG0R]ķ @%CēIēõG0ŊĶøS^%bēhēõG0ÕĖ:ņėvŦē‡ēõG0ž =ĀCvŦ ēĻēõG0FE@úŖü$ŋēÅēõG0EDŖ/ü$ŪēäēõG0g˙JĀzCũēģõG%0nQnŒë@!ģ,ģ­D%0D‹WeË ;EģKģ­D0†ōz‡Ŧ9dģjģ­D0ø^QY˛9ƒģ‰ģõG2îŋŨA2žģŠģ­DīG0 +čŊ‘īGÂģČģ­D0ÁΈŖÄ6áģėģ­D%0g˙MßĮë@ŧŧ­Dœ'œ'ļÃ2âÄŽb?4ŧIŧ­DļÃÛ90Kȧs5ûGbŧhŧ­D2Æ:­š}ŧˆŧ­Dë@2•…´œ ŧ¨ŧ­DÛ92uēīÎ$ŊŧÃŧ­D0éū~…Dü$Üŧâŧ­D2\WĮšŊ÷ŧũŧ­D2DųĖmjŊŊ­D2leĐ֒-Ŋ8Ŋ­D4909\g4%QŊ\Ŋ­DÍļ2ģŗ2qŊwŊ­D0TgæVŅzCŊ–ŊõG0Ÿ°įG˙Û9¯ŊĩŊ­D0Ÿ°č˛Iá9ÎŊÔŊõG0uQė#ŪŲ@íŊķŊ­D05jīė‚.B žž­D05jō×Õ(B+ž1žõG2rŌ÷#"FžLž­D0g+ūĸü6ežkžõG0ú’A„žŠž­D20äēŸžĨž­D2*õė¯ĒēžĀž­D2’šûĐ/ÕžÛž­D2ËĄĞđžöž­D0Oĩ%%ŋŋõG0EV!qøß6.ŋ4ŋ­D2ú=ųN+IŋOŋ­D2ˆÕHdŋjŋ­D0 ,ōLü$ƒŋ‰ŋõG*Ũķ3…Sŋ¨ŋ­Dü$"ŸŖ¸ŋÃŋ­DHL1IŖöĶŋ­DHW)’Á˙Á!ú@!šû!@¤EŪØQŌŊĀQŌ!†ß&@TEŪÚ=ĀHĀQG2@0oFÜ8@aĀgĀQG"EŪāwĀ‚ĀQGWG*1Iāū3–ĀĄĀQGWGĢâDĀąĀQG%.å1ÃÎĀÔĀ,@Tå1ÅåĀđĀ,@2@.ū ČÁ Á,@%0oFŅÎÍ8@%Á+Á,@0oFŌ.>@DÁJÁD@1getĶD"2@cÁiÁD@ŦsetÔATÁŠÁ,@2@-îĘãH‰+æ‘ėđN8@˛Á¸ÁD@"å1ũČÁĶÁ,@J@*1IũųUįÁōÁ,@J@ĀIT&@ßŋWoz4Ã!Ī•ö6T}Į~/Â:ÂzAö6.—ūKÂVÂzA%0tH2™€AoÂu†A0öN‚čMö6ŽÂ”†A1getƒ•“ö6­ÂŗÂ†A0S…Âąö6ĖÂŌÂzA2'$‹™;įÂōÂzAö6"}Į—à ÃzAŒA*1I—Jd!Ã,ÃzAŒAIT ¨ÂWÖlziÄ!Ī•’AT}Į~dÃoØA’A.—ū€Ã‹Ã˜A%0tHØjžA¤ÃĒäA0öN‚ é’AÃÃÉäA1getƒG”’AâÃčäA0S…9’AÄĘA2'$‹HlÄ'ĘA’A"}Į—7ÄBĘAĒA*1I—•VÄaĘAĒAITiĝĖ9ŒiÄÅŸWĩuGfĖ9”ÄŸÄ’AúHfĖ9­ÄŗÄ’A@mvŽiÄČÄĶÄ’A%­ģG'ü$iÄđÄ’Aœ'°1œ'%ŖG9Ã)ļWqĖÁ:Į!ú@!šûĶž¤EŪØQŌøÅQŌ!†ß´ˇTEŪÚxŃÅ]G(B0oFÜėŧBœÅĸÅ]G"EŪā˛ÅŊÅ]GcG*1IāūTŅÅÜÅ]GcGĢâDAÅėÅ]G%.å1Ã ÆÆ:BTå1Å Æ+Æ:B(B.ū Č<ÆGÆ:B%0oFҁB`ÆfÆ:B0oFŌRč4BÆ…Æ@B1getĶŨÚ(BžÆ¤Æ@BŦsetÔĨ ēÆÅÆ:B(B-îĘãûϐ+æ‘ė{BíÆķÆ@B"å1ũĮĮ:BFB*1IũT "Į-Į:BFBAÅIT´ˇÅWoĮzoČ!Ī•LBT}Į~jĮuĮRBLB.—ū†Į‘ĮRB%0tHĸcXBĒĮ°Į^B0öN‚9ŲLBÉĮĪĮ^B1getƒ_ÎLBčĮîĮ^B0S…œLBČ ČRB2'$‹Īü"Č-ČRBLB"}Į—=ČHČRBdB*1I—L\ČgČRBdBITČ¤”Ę.vAÍŽ‰1Č{ÉŸĩEuGf‰ŽČšČLB˛Hf‰ĮČÍČLB¯1IŠXBäČīČLB˛HU23ČÉÉLB%ĨĪ6¨3Č.É9ÉLBL;ĨÎ9XČWÉ]ÉLB°‚ŋ<:ÖoÉLBL;\)!&¸AÍŽķĸBČ¯ĘČ! h%!9øiīŗ!!Ŧjīŗ .ķĸDáÉņÉĻHL;L;U /IÉĘĘĻH%ĨĪO1ėÉ0Ę;ĘĻHL;*Sn f;OĘUĘĻHąÎ`%ÉrĘxĘĻH"ķĸlˆĘ“ĘĻHŦHL1IlúBŖĘĻHŦH[†&[ e'ãŗĘĘœ'.”ĘrÛĘëĘšHL;L;T”ĘuüĘËšHLBĨtöxØ oČ%Ë0ËšHHĨUđ|CtoČNËYËšHHĨA[…āloČwˇ˚HH%ĨŒlŠŸŧ oČĨËĩËšHH%ĨˆŅ.oČĶËŪËšH+HĨ]?”Ņ oČüËĖšH+HĨ†Žš‹*oČ%Ė0ĖšHį9Ĩ qžĶ oČNĖYĖšHį9ĨŪ4ĨôoČwĖ‚ĖšHn8*‚ŋ°ÎY–ĖĄĖšHL;*?{´mæĩĖģĖšH+NíļˏãŗĶĖŪĖšHü$"”ĘēîĖųĖšH H*1Iē y ÍÍšH HiôoČ+Í6ÍšH%ÉČ?ĮŽCö mÍ " c† Å8 +ŦWÄ'Č öÍ!ČŪ 0‘TÄ'Ę ˜ÍŖÍbCœ'.{4× ´ÍŋÍbC%"Ä'ā ĪÍÚÍbChCL1I⠚ÚęÍbChCmÍWË2…Î!õ/>Ä6TË5&Î1ÎnCĒ10¸>9}(ü$JÎUÎtCzCfËcÎnÎnCŠi˛SyÎnC%ûͲQ$ŠÎ7…™ôŋÎ - ž4 ĻO û čuW-_ wmĪ!ŧ”ˆÎ.-_yęÎđÎxD.Ž}Ī ĪxD%2Qƒ<Ø!Ī,ĪxDœ'0¨NMīCEĪKĪxD;ŋōˆaĪIStrxDŒ7ÎB™•Ī!$šīC!d•›%WķK ŒĐ˜fd_N%!+ÖO%!×QÄ6TķKÛοΛD%.a#4÷ĪĐ›D%0-˛8ûÄ6Đ!Đ›D™3ITŦÄ6;ĐĄD2ŦL~Ļ'UĐĄD"ķKSeĐpĐ›D§DL1IS—ô€Đ›D§D•Ī7e|°Đ ôŖ ũ° ĩü-Gį¨Ō=­DWŽo&CōĐĸz&O&ęĐא&7ITW6Ũ&C$Ņĸz&O—ÖŅ‘&7IT, W'å ’FŅ$b ›ü$IT›WEIKŅ[ÍM`ĶÄ6nҝE­K,;‰,WČĐ íŅ$Ü/ 5÷$-s9 1^]õ} ķŖ%ÅŅ]õ} ‘ŽGÛŅmȝ]ITo]WÄ&ŠŌĸz&ĢÂŌ¯E&7IT,Wéy&CQŌĸz&OK›IŌ¯E&7IT,¤ŗ˜QŌŨŌŸo‹uGfŗ}ŌˆŌIIfŗ–ŌœŌI¯1IEO$IŗŌžŌIIŗĶšQŌŅŌI%a3 ĄWžĶW%œŠü$%Ē&@a3YĶ#Ķ…G@¸“`ŨŌ8ĶCĶ…G%ĄÖ¤eÔ0ŨŌ`ĶkĶ…Gn83ļ$§&ü$ƒĶ‰Ķ‹GGa3Ŧ˜ĶŖĶ…G‘GH1IŦÎ˛Ķ…G‘GŨŌîî”iÄdÔiÄfîîéĶôĶ—GGfîîÔÔ—GK쁎Ōü$ÃĶ)ÔHÔ—Gœ'°1œ'%ŖGĢ=ÃĶXÔ—G%Ãͤ˜†,dAĻ3Õ3Õ!ûq0‘$!˛s%(f˜†ĒÔĩÔŠG¯G.˜†fÆÔāÔŠGœ'°1œ'%KęĮL_ÆRĻiÔÕÕŠG-“îlD'cĢŠ iÔ'ÕŠG%¤Ũˆ$AĻöÕ–Ö!MĮ†Ž fŨˆgÕrÕÁGĮG.ŨˆƒÕ“ÕÁGœ'°1KųZŌø%3Õ´ÕēÕÁG2Ž  ĪÕÚÕÁG†ŽĢ˜-3ÕęÕÁG%iÔ¤ž´$-AĻ‘Ö3Õfž´"Ö-ÖĩGģG.ž´/>ÖNÖĩGœ'°1KęĮ6x™RĻûÕoÖuÖĩGĢ5ûÕ…ÖĩG%ûÕ¤{. jAĻLŲAĻ!TÆ‘0‘!lˇ”ÍG!'ž–ü$ !nm˜%! Ųš”Î!’Žž%!¨ ĸ%f{.×#×ŌGØG.{.l4×D×ŌGœ'°1UīTv–ÖZ×e×ŌG%Ĩö’ÖNv–փ׎×ŌGmĻKFEÅü$–Ö¯×ē×ŌGü$0“0{QŪœ'Ķ×Ų×ŪG0a |øú°1ō×ø×ŪG0Đî}Eöü$ØØŪG2Đķ~/,Ø7ØŌGü$0s č%%PØVØŪG2(€^CkØvØŌG%0ûjÄ5”ΏؕØŪG2āw‚PĒØĩØŌG”Î0Qaƒ{e%ÎØÔØŪG2Dm„íéØôØŌG%05Z…ą°% ŲŲŪG2ũ\†!(Ų3ŲŌG%°=ŠûEŲŌG3Õ–Ö¤ĪÚWÚW!RãlHTĪ˜Ų˜Ų}H­DĨÖ¤›AĪVŲļŲÁŲ}Hn8"ĪåŅŲÜŲ}HƒH*1IåÔđŲûŲ}HƒHĢŊXVŲ Ú}H%¤ ęWØÚW!RķlHT ĄNÚYÚqH­DĨÖ¤¤žÚwÚ‚ÚqHn8" õ’ڝÚqHwH*1IõŠëąÚŧÚqHwHĢoJÚĖÚqH%¤N‰ĄØÚēÛŸ$×uG.N‰ŖÛ ÛīGUΤØÚ#Û.ÛīG%K5'Ŧŧ_ãŗØÚOÛ_ÛīG%%Ĩ÷ŊąĸčØÚ}ÛƒÛīG"N‰´“ÛžÛīG¸HL1I´lŽÛīG¸Hēļg@ ׸4ņ+ ظ4¤'t(¸ØÚŲÜØÚ$0mà 0‘!F_Æ™!ëĖŽ$.'tē(Ü.ÜHK5'¸ ąãŗ×ÛOÜ_ÜH%%Ĩ÷Ŋž œ×Û}܃ÜH"'tΓܞÜHH*1IÎ~U˛ÜŊÜHHĢĀF×ÛÍÜH%×Û¤DÃÄ võŪ\)!‚į \FTDà Ũ Ũ%Hœ'ĨŒl aų ŪÜ>ŨNŨ%HH%Ĩ Í <8ü$hŨ%ë]Ō ™öü$‚Ũ%ƒÚC RÄ6ĄŨĒ1ü$*âq gLÄ6ģŨĒ1iā ŨCÄ6ÕŨĒ1"å vÄ6īŨœ'O<Á tđŪ&7Ē1Ē1Ē1  Ž ’"/Ū&7œ'+’Ķ ¸hOŪ&7œ'į9õģ ņöjŪ&7+Hf õ‡…Ū&7HåaG ėXÄ6ŸŪ¸9"Dà ¯ŪēŪ%H1H*1I ūiÎŪŲŪ%H1HĢ"+ŪÜéŪ%H%ŪÜ|ޤ>„ vļávf>&ß1ßCHIH.>† BßHßCHĸîu‡ Ŗđeßœ'œ'ĨtöŒ O#˙ŪƒßŽßCHHĨA[Ÿ Ņ˙ŪŦßŧßCHH%Ĩ”c Í˙ŪÚßåßCHHĨ›ō ø¤˙ŪāāCHHĨˆÉ ĄJ˙Ū,ā7āCH+HĨ†ŽÖ Z ˙ŪUā`āCHį9ĨŪ4Ū $¨˙Ū~ā‰āCHn8Ĩ qé 9é ˙Ū§ā˛āCHį9Ĩ]?ü -ü ˙ŪĐāÛāCH+HĨ†Ē åx ˙ŪųāáCHHĨ†/– ų ˙Ū"á-áCHHĨŒl( ›Ž ˙ŪKá[áCHH%ĨUđ˜ OÆ˙Ūyá„áCHHJ 9ŅšáHĢQõ˙ŪĒáCH%˙ŪųŗÚVŲoČØÚ’ŠiÄAĻČ­p ”yüQâtüfpââ IITpü*â5â In8Ģ)ęčáEâ I%čáQŌ QG‡ü$qâ%‹:ĸņã ĨúÕü$”âSS™âßÜËŸ“ ŒuĐ%Āâœ'œ' FĮœ'Öâœ' ôÍ%ėâĄD %āÎ%ã% ĄíėĄDãœ'œ' Å4Ī%8ãœ'/^´ö’ .ūœ'Wã% eIũ%mã% Uõ%ƒãĄD dŖ÷%Ŗã%Ž9% ž ķĄDžã%œ' dÖú%Ūã%]9%Ė)Ͱ*œ'wÖ0 vŦ LUŋü$ä$%$% ëôÅ+Ļ3ä$%$% āe ü$Iäü$ &ë œ'_äFÍ Fs(ü$uäü$w_…*ü${|\ü$–ä% Ũ— Ąˇ­ŽäIT›ŗä6^Š ĢĶ.%ßäIE%î:%%ĩ ī  åIT›ļpĮZHNqœ' _ú ZH9åITČ­pĮZHÕ9Čqœ'ĩEę cåITļpĮë@Irœ' ú  ü$“åITēļpĮü$­DDsœ' Iģ%Āå9Ęœ­‘?ÕuhAÕuĩ1Â'ęå9Ęœ­FQ…vhA…v X%æ9Ę8x‘?™yÔ8™y ŅD%Dæ9ĘcŒ‘? {j: {ˇęKü$[æzCˇ (Pü$ræzCĩg¯'œæ9ĘcŒFQŌ|j:Ō|ĩ2ã'Ææ9Ę{ÂFQJ˜!CJ˜wŪąŒ7›š c% r eŌæûæIC,@% X +Ļį0ä%EĖ—…ü$+į$% )ۍü$Aį%{ŊˑĐ[į%&7 ŨJ]yįITo]]ĩåX‘įĒ1&7ĩz"&ĐŠįĒ1&7ĩq&đČįITא&7 )ېü$Ūį$%ĩĄŪdöį!5&7ĩz"&Ūč!5&7ĩ0W&đ-čIT, ‘&7 Ŋvü$Cč%ĩ‚˛ŸVčŽĩá°'€č9Ę[ĄFQĻ›Ķ@Ļ›Ūžƒ™ĩOLĢčIE%ß6Ü:wžŗÄ6 ûÃ\ü$×č%%% ¯ ˜%íč%w­ēVˇ­E.œķÄ6éITų'Ŗū¸°ĐwŠü ”ü$~~ž€'´žh“´G´äŊw8Š5‘w1IÜü$ĩ´5_}é|:5‘ĩ´5b•é|:Ė,{sH.*œ'Ēéœ'vŦšw<ü$ĩ•v&OåéIT,Ōæåé¯E&7rųQšĩŨ&aęIT,¯E&7ĩü&đ/ęIT,¯E&7 !'—Ä6ZęIT1,IT2,¯E¯Eēx¨¸węĒ1%z7ē‚ž ęœ'%ˇ ŌA%ĢęhAš)篺žęœ'{3ŲÄ6Ķę'ēŲŠSíęITv;ˇņíÄ6ëĒ1ˇ!ōVü$ëzC0{XbÄ65ë b"`= d QëFÍœ'm؞p ģ{gëį9ģ†|-0¤›7gØü$“ëœ'F)ˇ÷Ÿü$Ēëœ'ČļEŌãœ'Îëœ'œ'ü$mŽkĨãü$ōëœ'œ'ī‘ôRü$ėœ'œ'šŗ'ĸ5‚´ü$4?˛Đ/uü$>ė%- y0QpÄ6!ד4iė]ī‘-J>yū۝  „Œ=Ä6“ėJŲ- ę˜¸Ä6ĀWĢVšė˜7#ú˙qÄ6âė9œ'œ'œ'ˇ\ėÄ6ūėœ'œ'{ŽÔǚü$"í5œ'ŋķ˙´%ÄJC÷˙´Fíœ'˙´ÍR|0Gü$jíœ'œ'ŋķˇ;mÅÄ6íœ'…ū?!ü$ íœ'ü$ɘœ'ŋíœ'œ'ŌŖØĖ˙´Ūíœ'˙´đ5(>ü$îœ'œ'ü$O §†Ä6îvŦ ˛čUÄ Jîœ'œ'Ē1Ē1ü$Čœ&Ä6dî+ĻOŠÜvXÄ6ƒî5(%ēžox î5('5{<öŽ‘ĐĖ$%§$%$%&7{Ŋŧ‘Đæî$%&7ŧ¤ø˙ ī^ž%œ''&7ēĻ'1ī^ž%œ''&7#2+nQīœ''&7z"6=#līœ'&7…šŒãĸÄ •īœ'œ'œ'œ':SœŽŪÄ žīœ'œ'œ'œ'ŧŽ-˙ãī^ž$%5('&7ē:< đ^ž$%5('&7#21”’)đ5('&7z"GûpDđ5(&7…š īXÄ mđœ'œ'5(5(4&–ķé>Ä6đIT%ˆ:4s5ķķÄ6­đIT,¯E#ī• Ė8Ä6ĮđvŦüaČ•ŸÄ6æđœ'%y {j5ņ%œ'JŲģų@Ž&{ļÄ6(ņ%ˇĻÁØ Ä6?ņn8ēS„â Rņn8vœš&Ũrņœ'œ'%ÆqÚėģÄ6‘ņœ'%đÃŽ­­Ä6°ņĒ15wšakŊÄ ãņœ'œ'œ'ō8÷L;žDĘÔÄ ōœ'œ'œ'%%%%9˜1Ä ?ōœ'œ'5(5(%9Ŧá•Ä hōœ'œ'œ'œ'ēēØˇÄ ‘ōœ'œ'œ'œ'Ã%Â‡Ä ÃōåU%œ'œ'U%U%UŽ%üvÄ õōå%œ'œ'%%G7w!ķIE%ß6%%Ü:Ë ęk:ü$I퉅%Ē1|:{8ēŽ‘Đuķœ%§%%&7[ŲÕŨ–Ąķœ%§%%&7‘Đz"í"KĀķ%&7{KVŽ‘Đėķœ%§%%&7\ÕīDôœ%§%%&7z"đđ2ô%&7˜‘Õæ^ôœ$%§$%$%&7z"öũŗxô$%&7ēpNS’ôITËÛ9ē÷SŦôITë@ē?ƒSÆôITV@kĖÄ6åôéG%ĩĄûˇ•úôĒ1ēÔK8 õ%ˇ1•°%$õŽ4Å(ķˆiÄ6DõIT°*Dëy,K]Gpõ%AÅ \QŌImZá‹Ä ™õœ'œ'™õ™õāq,û/{é[Ä Îõœ'œ'™õ™õĐ*~ęvÄ ÷õœ'œ'™õ™õ[+ÆŲÄ  öœ'œ'™õ™õŽ„ŊļÄ Iöœ'œ'™õ™õ‡å€Ä röœ'œ'™õ™õ â¨1QÛ9¯öœ'œ'œ'œ'ˇ­ŋÛËÛÕ9 (8 )Ä6Åöœ' , œ'Ûöœ'Ęč‰ŋ˙ö^ž$%|:Ė,4Ø‘#÷^ž%|:5‘õByöŦQGO÷%Ā \QŌIˇX[ꆎk÷īC%-PmLö6´'kH`Ÿ÷^ž%|:5‘2Kk,Ã÷^ž$%|:Ė,iŖ†–Ū÷÷Ē1 &Î øIT›ļpĮZHNqœ'*&d0ZH?øITČ­pĮZHÕ9Čqœ'üØ&Ü,løITļpĮë@Irœ'EV­‡%ø˙´ēTÉr”øV@ēŪ“s§øV@EŽa—%ŧø%& &(Õü$đøITēļpĮü$­DDsœ'Ŋę”ĻįcžÎŧ5ų˙˙˙˙˙˙˙™õŊ­.;ÚU%ŋy*ąļĮËY ۋkąk%Ä6Ÿ2čY 7Āfā3ųY ÛĀŽ 4 Z ŊŊyõr™ a˜ŊÔF\\íĀ_ŠY3Z ̚ĀąZDZ šĀFˆ[UZ  Ā0`\fZ ņĄĀo]wZ ŸsĀŠķ^ˆZ øņĀŽ_™Z Ą7ĀŪ|`ĒZ íĀ*MaģZ OĀ-‡bĖZ ãėĀžcŨZ WÅĀ6*dîZ ™ĀFŧe˙Z xÚĀ"f[ ØîÁöi%Ÿ†k/mĩ[™ü$Ŋ¯u[9Ä6Âa)‚7ĻÃp)…7Ļ˙Ã)ˆ7Ļ˙˙ÄŽ)‹7Ļ˙˙Å(Sm d[ ÅDn u[ n!Å1Õ˜[ t{lĘa{ü$ÆßÁæĸ'LÆ]įĸ'RÆŸöčĸ'TÆȕéĸ'IĮŽ ¨5‘ÆĨ”Vĸ'/Č pWØ[ /ČZŧXé[ ./ÆwFQ%ÆíR%Å×Ä\ ÁBPššw›DP{6x›DP" ¨˜7Ģ´Uā†ss_⎛<+Yų4Ģ´]ü!ü5Ģ´`1ü<ü55/Ģ´eLüWü5œ'3Ŗ€Ĩš5oüzü5ü3Ŗ€Ģhé5’üü5ü$3Ŗ€ą•u5ĩüĀü55(3Ŗ€˛,;5Øüãü5ų'3Ŗ€ˇ˜ø5ûüũ5!535béÉā!s5™˙¤˙IT¤é5´éÉ&6s5Ā˙Ë˙ITë5n8Érjs5į˙ō˙IT2ę5BęÉR“s5ITģ5„ęÉ =s55@ITÆę5ÖęÉ*Os5\gITë5(ëÉŲ s5ƒŽITjë5zëÉ $s5ĒĩITŧë5ĖëÉß?s5ŅÜITė5ėÉGs5øIT€ė5ėÉqÕs5*ITŌė5âėÉü5s5FQIT$í54íÉĐâs5mxITXķ5hķÉđ1s5”ŸITĒķ5ēķÉ;Ŗs5ģÆITüķ5 ôÉžs5âíITNô5^ôɇfs5 IT ô5°ôÉφs50;ITōô5õÉ1s5WbITDõ5TõÉåjs5~‰IT–õ5ĻõÉųXs5Ĩ°ITi'5Đöɲs5Ė×ITJ÷5Z÷É˙{s5ķūITÎ÷5Ū÷ÉŌęs5%IT'ø57øÉqis5ALITyø5‰øÉ‰ps5hsITËø5ÛøÉÜAs5šIT;ų5KųÉ ¨s5ļÁITt“5ųɸs5ŨčITĪų5ßųÉ{s5IT!ú51úÉŅ8s5+6IT05súÉ`¯s5R]ITĩú5ÅúÉ”4s5y„ITû5ûÉ^s5 ĢITYû5iûÉ#s5ĮŌITĢû5ģûÉäHs5îųIT5ũûÉĖ.s5 ITÍü5ŨüÉAËs5<GITĘ 5Ú Éŧs5cnIT 5TÉäs5Š•IT”5¤Étús5ąŧITæ5öĘŽRs5ÔITQ5aįû(1`žV%ē`Æ%/(1`Ā 7%3¸>`ÁҘü$0;7%H1I`Äâ#J77å§Ä`ĖŽ%˛_`Ņ%/§Ä`΃Ž7%B¸>`ĪÚü$ĸ 7%[y 7&nëŲnk2ŨeQ'&7Ƹ&€52Ãw/÷žŽ{3   \4 áÆ%I g÷%^ŨoÄ6%Pr%%%*sÄ6 %0tÄ6Ãw<d~\8÷œ'%œ'3æôH r÷–œb83ėLCåœ'´ēb83¨ÃR"%ŌØb83×>Uđíœ'đöb83-BX$œ'b83ã[3íü$,2b83—Î^ĸĐü$JPb83îmaĶü$hnb83da'ü$†Œb84Ňká Ä6Ĩœ'÷f0i¸Ã\8%fÃwŅÜ\8n8Ë1Ih8ë\8n8ëQ* ~ŋ %ūĩŒ8xQ*€$ * æ8būƒēŌ> I æ8n83Ū7†%n8a l ė8%3ķņ‰ÚF%„ Š ė8GQ*Ž™ ¤ æ8ō8H1IŽ›ŗ æ8ō8üW7š–!˛@0ü$!05AĢ.7šü   99T7š #  9ü$0C ŽDü$< B 902H MíÄ [ a 90-BŊGœ'z € 90Ä4ĩœ'™ Ÿ 90Ŗ€!ŋĢ9¸ à  9ų4*÷^)›k× â  95*1I7Ŧ™ö   99fģĮ   9%Ė´î97 B IT5( 9eūĖĸ9_ j ITįû 95ĖÎá9‡ ’ IT 9א0I#c9˛ Ŋ ITĄį 9ąį0Yíß9Ũ č ITG 9 é0&6@9  ITë 9n8Ėā!90 ; IT¤é 9´é˧ŗ9X c ITÔ> 9bé0Ø@îĪ9ƒ Ž ITœ' 9Ņ5Ėü59Ģ ļ IT$í 94íĖ~19Ķ Ū IT,  9‘Ė*O9û  ITë 9(ëĖ $9# . ITŧë 9ĖëĖR“9K V ITģ 9„ęĖ =9s ~ ITÆę 9ÖęĖk§9› Ļ IT% 9Ž5ˉ@9à Î ITĮč 9×čĖŲ 9ë ö ITjë 9zëĖß?9ITė 9ė0˙´T9>IIT9č 9IčĖG9fqIT€ė 9ėÍqÕ9ŠITŌė 9âėÄ ¤4ø[›ģNí<ÂĐ\F!õ/Ņ\F! Ô˛­!–ײ­ !Z{Øí!eŲü$!y/Úü$!ØÛü$!:DŨĐ9!3â´.ŒrqkvÛ9%0¨ãtEœ'•á903w *œ'Ž´á90ÕŠ{ßåœ'ÍĶá90¤Cƒ˜8œ'ėōá90đR™Úü$ á90jËœŧ"ü$*0á903’¤įS˛9IOá9"ëÖē_ƒÛ9Ē1Ē1œ'œ'ˇ­Õ9+ŊrÃB%›ĄÛ9ĪRunÉ72ļŧÛ9š$Ë ßŌÛ9"ëÖäâíÛ9į9L1IäUũÛ9į9ˤđōŦÂNí<šŸiĸuGU;`¯KVV@%ĨÁͲÎ~tzV@ĨûöĩM˜žV@ŌĀ<ē9šÜHģV@WË: v!ŋK;!qQM;!ē.O;.Ë:   ;.mX ) ;%2ū €>I ;;0Īnå;bm ;;0„{MŊ;†Œ;0P 'Ô;ĨĢ;+|Á5Ą—;ÃÉ ;*…ę<¤äŨč ;;*_XCŠ ü ;;+1RG4ü$%;*ļáH¤9? ;"Ë:ROZ ;;L1IRĒj ;;¤rŋv Ÿ}ßuGfrĸ­;ĐHfrģÁ;¯1IEMÖHØã;ĐHU‘¨Ávų;%ĨtöÄūZv"-;HĨA[É;ŸvK[;H%Ĩ”cÍ‹Ivy„;HĨ›ōĐŠvĸ­;HĨˆĶzŌvËÖ;+HĨ†ŽÖŲ—vô˙;į9ĨŪ4Ųzv(;n8Ĩ qÜČt vFQ;į9Ĩ]?ßnv voz;+HĨ†Ēâąí v˜Ŗ;HĨ†/åX vÁĖ;HĨŒlč?Đ vęú;H%ĶUđėWv;Hį!_3WWžOę_7Q %œ …ÃW%WØ_Rd6%>–_S&@%3_T‰H Tį!’ŽHæ8.į!'ŽžŽH6æ8Uܗ;%ÔߎH%ĨÖ¤FIl%ũŽHn8*˙€.ˆ"ŽHGį!_V1<ŽH”HH1I_VüâKŽH”Hš,’WŸĪ uGfš,‚&@âHfš,›Ą&@¯1I“PčH¸Ã&@âH@¸=”WØã&@%ÔÖ¤–XWü&@n8¤°g|ęå"Ÿ´‰uG!õ/ƒÄ6! †˛­!Wæ‰cŒ !:v–!N/ļ$![ž‘Ã(!e“ü$,!ė`•ē0!h&˜´8.°gV ŦÆë@œ'œ'ļÃUb Üįë@%03tœ'zC0ÕŠ˛Įœ'%zC0đR z0ü$>DzC0f3+ ˙›%]czC0Īf0 3Y%|‚zC0 5 gž%›ĄzC0Ų: [Z%ēĀzC0@? ˜§%ŲßzC0ŊĶD >%øūzC0R]I ˆī%  zC0FE#Gü$6 < zC0E&Ö%ü$U [ zC0ž ) Éēt z zC0ˆ8i Má9“ ž zC%0ø1ßI¸9ˇ Ŋ zC+S`8%p:Õ Û ë@+S`;âj:ķ ų zC+nPp [Û9!!ë@%*ā-Dū0!;!ë@ü$*âÄw xûO!Z!ë@Û9*įâ™ ĩn!t!ë@ŒÕN"|Š!ë@ĪRun} ‹Ÿ!Ĩ!ë@*,W§š!ŋ!ë@*Zv[ē‚Ķ!Ų!ë@ÄW^46ü$ķ!á9?Äc]öü$ "á9xËiĨCü$'"á9øĖnCLü$A"á9esH-ü$["á9Ȥx)kü$u"á9*ú=Ÿ X_‰"”"ë@ß6*ˆÕ¤ #p¨"Ž"ë@"°g›ž"É"ë@+HL1I›Ų"ë@+HO}$8aFˇ–Ųâü$#–אאˇ!Áâü$;#–, ‘‘ŧeg;\#eQ''&7ŧŠûNx#eQ'&7ˇ•"Ōü$”#œ'œ'ˇØâėÄ Č#–œ'ü$œ'œ'Ņ5Ņ5ˇŦ-ėÄ ü#–ü$œ'œ'אאˇÖkėÄ 0$–, ü$œ'œ'‘‘ˇ•"Ųü$L$5(5(Õj=ėÄ –5(ü$œ'œ'eūeūQĘå"QÍå"|6å"/°Đ¤D(_ $W)Ÿá$uG!F_™!Į­D$™üÜ9ųũéG1Run ”%% %éG0^T˛œ'"%(%H0Tgd/ŽzCA%G%H0Ÿ°lŒá9`%f%H0OsŽ@%%…%H0KČy‚ûGž%¤%éG0Æ<ON%Ŋ%Ã%H0ERTļ¤%Ü%â%H0îiYÉ%û%&H0×o_ī2%& &H0f3d¨V%9&?&H0Īfi‚Í%X&^&H0 lad%w&}&H0ŲqÍ5%–&œ&H0@vޝ%ĩ&ģ&H0R]{v%Ô&Ú&H0ŊĶ~‘_%ķ&ų&H0ÕĖ‚…évŦ''H0ž ‡đvŦ1'7'H0FEŒ`kü$P'V'H0Eų–ü$o'u'H0g˙”ÂzCŽ'™'H%0øšÂi¸9˛'¸'H0D‹Ļԝ HŅ'×'éG+O\´V@ī'ú'éGV@*„GÁ.,(-(éG÷œ'%Ē1Ē1*ležA(Q(éGĒ1Ē1+n ,ûë@i(t(éG%+ÄįV­DŒ(’(éG+ÄčRcõGĒ(°(H"D€Ā(Æ(éGÖZŖ… $Ü(į(éG%*¨¸‹]û()éGÂA*"G’Âŧ) )éG"D0);)éGHL1IąÖK)éGH $¤Iĩôv˙+vfIĩƒ)Ž)žHÄHfIĩœ)ĸ)žH¯1IZĘHš)Ä)žHÄHĨtööį\)â)í)žHHĨA[÷†B\) **žHH%Ĩ”cųéĢ\)9*D*žHHĨ›ōúû \)b*m*žHHĨˆûrß\)‹*–*žH+HĨ†Žü}Ü\)´*ŋ*žHį9ĨŪ4ũŊ\)Ũ*č*žHn8Ĩ qūß \)++žHį9Ĩ]?˙Đ \)/+:+žH+HĨ†Ēg \)X+c+žHHĨ†/Ã6 \)+Œ+žHHĨŒlŸ \)Ē+ē+žHH%ĨUđĀS\)Ø+ã+žHHĢã*\)ķ+žH%›%\)vWwOũÍÄ w,ąČÄ ˇ¤Ä œ'G,÷ˇüāŧ Ä6^,%ˇĢīˇ Ä6u,%×mšœ' ß>ųcĄ,Y¯g%¤ °CųcÁ,Y¯g%âēˇ7@ü$Ũ,n8ˇ0Jü$ô,n84Ŗ€:Ošŧ1-ŧ1n8EŖ€čŧ1,-ŧ15OũĶē2Ä F-5?N&O_ÔÄ6g-ITœ'Ņ5†H&OŨ Ä6ˆ-IT5(eūˇŲ¯ Ä6Š-%œ'œ'ãĖ8ōÄ Ō-œ'œ'œ'œ'}ĸ°Ä û-œ'œ'œ'œ'ãĖ“Ä $.œ'œ'Ē1Ē1}!}Ä M.œ'œ'Ē1Ē1ãĖ(ÜÄ v.œ'œ'!5!5}.R.Ä Ÿ.œ'œ'!5!5ãĖ UĐÄ Č.œ'œ'5(5(}›âÄ ņ.œ'œ'5(5(–oJëÄ /œ'œ'U%U%KhQ)#Ä C/œ'œ'%%u&OLøÄ6d/IT,¯Eˇ9@ũc{/Ē1ėi7–/|:5‘ė“9ą/|:Ė,ˇ¤j Ä6Č/Œ7K#†ü$į/Ē1Œ7kūâU'ęÄ6k53ŊīĀü$kđšÂl{ü$k°Įņúü$kĮ ͞&Ä6k ŨÕxÉÄ6kâ Ū§nü$k‚á^ēÄ6k—{í0ü$kúļķÍ˙´kœ`ųģĻ˙´kîo˙Š+ü$ŊŅBŧü$ŊŸ pĶ˙´ŊŒüĒ—ü$ŊbᏠÄ6Æœî“%dkjú^âÆü$ĀĘ ™ãX æãĀō“žôX ”nȲ'ĄY *Ā ¨¤Y MÔĀ;§'Y ‹+ĀĀŠ8Y ’ Ā•<ĢIY ×ģPzøØZY P^.åkY P‹ī|Y Ā}ÖSY 3Gví•}y—}\Fvy—vĨ—}aF}\˜va˜vû˜v™}~™Č1vƒ™} šØ@įa 2sî›a"%sÕpa#Žįa$ņ1Iža:ņq€a?Ŗ=4rtaFĪ3aKa2%âCaL֍%M<aM‰ aR2%”aS%%"eaT%% BaU2 aZŊ2%âCa[֍%M<a\‰% Ba]2ab3%âCac֍%M<ad‰%Ē5ae%%õâaf 2 %™aag 2al%3%ūamŽ%c/an+%asG3%8įat@%%â•au% azu3%„a{Ž%ĸGa|%%šwa}9%s—ĻaG4sŦaN?2sULaVa2Ų_rta^2s–ģahŊ2s+ao3sŅPav%3sNļa~G3%/a@%%°aA%%đ aC%%§ía72 t%4uy'91a€+2Į#bU&4v,4ƒ84% AŒc”4rcc4snõc4sH`c!°4%%”c#D4%K=c+ܒ%™ŗc.%„%i=c1¸4ˆƒĒ4%Ē4Žv4v”4Úvļ4vˇFvjGvoG}Ö4ž4vÚGv‡š}ÚGvˇ›}ˇ›v˙4‡ŧ15ŧ1vįû}ā}įû}wHvāvŧ›v} }v y8÷=a568V5v[5ÛabiuĻK5v$ }Ĩ 'vĒ }‘5U%}Ąvĩĸ}ĩĸvēĸ}´5%}/ŖvŤ}Ť}œ'}0‘vo9};v;v‡H}I}‡HvëIvđIvRJ}đI}RJvõ;}†=v†=v"I}WJviJ}ëI}K}iK}Kv\Jv[Z}5K}wO}šQ}[Z}\JvÕZ}š[}o_}ÕZvo_}X]}Ę]vʤvtX}Yvß_}šX}Zvt_}ß_}÷$vgĨ}<Ļđ6vAĻv ¨v?Š}?ŠvåvV}Vv[vŽvaFv‹=}?v?vä_}ä`}ä_võ`}˜a}õ`}avé`vc}Ebvc}d}0d}Åj}cvÅjv¤7v’Šv°7¤7}¤7}°7vÂD}SFvSFvėj}Ļk}ėjvˇk}Zl}ˇk}_lvĢkvÖm}mvÛm}Įn}ōn}õt}Ûmvõtv‘Ē}<ĢviG}K8ž7vI}iGvëv÷}ë}÷v’I}#Kv#KvIu}v}Iuvv}ˇv}v}ŧvvvv3x}dwv8x}$y}Oy}W}8xvWvüvŋ }ŋ vAĢvqŦ}qŦvÄ }–v–}Ä vģv¯}ģ}¯v›P},Rv,Rv\}€}\v'€}ʀ}'€}Ī€v€vF‚}wvK‚}7ƒ}bƒ}o‰}K‚vo‰v´vÆ}Æv‚Ŧv˛­}˛­Õ9vČ­vËv } vÛ9vų9Û9}Û9}ų9v—U}(Wv(Wvt‰}.Š}t‰v?Š}âŠ}?Š}įŠv3Šv^Œ}‹vcŒ}O}z}‚“}cŒv‚“v%}%}%v \}1^v1^v‡“}A”}‡“vR”}õ”}R”}ú”vF”vq–}ĸ•vv–}b—}—}•}v–v•v|ŽvvvÂv } vÍą}‰˛;vĀąv9ŗ}9ŗė8v>ŗ}īŗ}ôŗ Ë-W%n;¸4E!Md%ƒ;œ' ´MW%™;œ' šMW@%¯;œ'EAįeŽØ;]]''ō’jdivWK’ķ;%% ØW4°* <œ' W|’$<@%@% šųW^%?<œ'' ėWi'_<ų'œ'' ĢWa%<ų'œ''ĩíĸWüĄ<Ž''ō’wĖ>Wv%ĩYķWxĀ<9%Eø›W¤%Ú<œ'5‘EŊWˇ@%ų<œ'5‘%EtWģG%=œ'5‘% xKWĖ%.=œ' OWl'N=°*5(' {âWe%i=°*$% ņāW­’„=,, ¯W$,š=œ'ERŖWŅ,š=œ'5‘%E WÖN%Ø=œ'5‘%EĐWŦU%ō=œ'5‘EWW¯\% >œ'5‘Ž1f3> âm ŋw Ũ¯ ,č ŨÖg7X>%‘¨g9%%Ö#g:%v3>7EŅh¤> Z Ėä ēJ Õ œĶ eŠ Â – €€ ߀Ō>i2% #j•Ô>%–Ũj—¤>%Ņ_j˜Ô>t%ä>uy' ÜjŦ}? ]Ë ŌX ­P Ĩ ǁ Ą  Dv ¤lĀ H € Ā.€ ~€ ŗ?€ +€ Ö4€ Îs€Ā €€ ÚW€€ 49€€ Ŧ¸€€€€ ÷Æ€€€€œĩ k7ķ?!–ök9%!$k:%!Nžk;%!‹Ök<% !Q4k=‰”!Ē1k>ķ?!…šk?°*!ÅRk@ų?v¯>v}?v@}?vųŗv ĩv•ĩ&@vWvßŋ}!@v&@v!@v˙Á}˙ÁvV@vvb@V@}V@}b@vŪa}ocvocvlž}&Ÿ}lžv7Ÿ}ڟ}7Ÿ}ߟv+ŸvVĄ}‡ v[Ą}Gĸ}rĸ}¨Ē}[Ąv¨Ēvë@vv÷@ë@}ë@}÷@vįh}xjvxjv­Ē}gĢ}­ĒvxĢ}Ŧ}xĢ} ŦvlĢv—­}ČŦvœ­}ˆŽ}ŗŽ}Ā´}œ­vĀ´vÂ} ¨v4Ã}4ÃviÄv9Ã}iÄvÅ}Åv)ļvÅ})ļ}Åv"p}ŗqvŗqvÅ´}ĩ}Å´vĩ}3ļ}ĩ}8ļv„ĩv¯ˇ}āļv´ˇ} ¸}˸}Ķž}´ˇvĶžvÅv:Į}:ĮvČv?Į}ČvAÍ}AÍvfS}vB"9v+w}fSv–B}“Bŋv0w}–Bv;v°B;};}°Bv5w}ÆxvÆxvŒŋ}FĀ}ŒŋvWĀ}úĀ}WĀ}˙ĀvKĀvvÂ}§Áv{Â}gÃ}’Ã}šÉ}{ÂvšÉvz}?C¤BvK~}zv€6vP~}€6vmÍ}öÍvûÍv…Îv$vŪm}ŒCņ@vU~}Ūmv˛k}ŠCå@vZ~}˛kvŠd}ÆCP@v_~}Šdvu¨}”Ëv”Ë}u¨võC°*}°*}õCvd~}õvõv™Ë}SĖ}™ËvdĖ}Í}dĖ} ÍvXĖvƒÎ}´ÍvˆÎ}tĪ}ŸĪ}§Õ}ˆÎv§ÕvŋÎv/}ŠD5‘vSƒ}/v•Īvc%}ŒĐvēļvÜÖváÖvC×}áÖ}C×vXƒ}é„vé„vûÕ}H×vZ×}ÜÖ}Ø}rØ}$ØvM×vdį}>Ø}€Ü}ŖŪ}dį}M×vŪį}Ŗč}‘ė}Ūįv‘ė}aę}ĶęvëVví}$W}CXv}å}$æví}Âå}(įv–ė}ív`Z}í}ĩE,v]L}ÆE\8vŊ…}]Lvû.אvŽ/v|N}ôEb8v…}|NvZ}Fķ9vĮ…}ZvbX}.Fí9vĖ…}bXvk_}KF|:vŅ…}k_v,|}hFĒBvօ},|vír}…F°Avۅ}írvČf}ĸF\@vā…}Čfvņ/vw@}ÅFŐvå…}w@vôãvúî}-ä}Låviį}úîvīt%Guy'}Gvŧđva4vę…}a4v u}:GļAvī…} u}ûÕvĀ}ōÁvAÅ}-Į‡%uGmv{GpgiGvŨŌvžĶ}žĶvÃĶ}dÔvđ6viÔ}öÕvûÕ}‘Öv3Õ}LŲ°1v–Ö}QŲvQŲéGv $vØÚvēÛ}‘Ē}ēÛvW)}Â}W)v×Û}ŲÜvŪÜ}$}õŪvúŪ}úŪv˙Ū}ļáTHvģáv›v­}˙+­DvÚ}ĀávVŲ}Åáæ8v%},voČ}ĘávÉ}6Í};Í}Īáv\)} ,}\)},}vv },}WvÔá}Ôá}Ųá}Ūá}ãávčá}QâvQŌ}Vâ}QŌŨōŽNœ'WIŪrNœ'ŪÆNœ'ߨ fIqIā ”“Bß €I‹Iā ”“BßšIĨIā ”“Bßņ"´IŋIā ”ŋIûß2#ĶIŪIā ”ŋI߃ íIøIā ”øIīvŧũ߇üJJā ”JũIáW =Jâã__pēŽvčDvÁũßÉDXJcJā ”cJCJßôDwJ‚Jā ”cJßE‘JœJā ”cJßš ĢJļJā ”ļJːßĘJÕJā ”“BßžŌäJųJā ”ųJāļÄ%IäĄĀØK%Kā ”%KāļÄ%QGß59KNKā ”b@āļÄ%åXēl÷%oKâæClųoKŽvzKįRá †¤Kč/0tKčÎK0%vRá&†ŨKč/A¤KčÎKA%âæDCRá@†Lč/N¤KčÎKN%ßX L'Lā ”ļJé__aí'L‰vĀDß2EALVLā ”VLāļÄ%,Lv~üßĨüpL…Lā ”…LāļÄ%[Lv;v]ß;ĨLÄLā ”ÄLāļÄ%āŊŦÉLŠLLv^DßgDãLMā ”MāļÄ%āŊŦMÎLLß?;M:Mā ”ÄLāļÄ%āŊŦ:MLß{NMsMā ”“BŪß1IsMŪp÷Ihאß(‡M’Mā ”ŋIß(1ĄMŦMā ”ŋIß”1ģMāMā ”ŋIŪß1IāMŪp÷I ‘áp!Nâã__pēŽßq"N&Nā ”&Né__aí+N‘ŗę5â ”ANVNā ”VNāļÄ% Iߍ jNNā ”“BŪp÷Ahë__sAœ'áJŗNč•ĪōŗNčšĪō¸NɋĪ‹ßđ ĖN×Nā ”ļJßŌ æNũNā ”ļJé__nĪhßŖ OOā ”“BáĮ0Oë__sՋá)cOŪƒۋŪÜՋë__nđá) –Oë__dd°*ë__sdœ'ë__ndhėš77’ŽšOđé__p7’Žís7˜ŅOŽŽáÆũõOé__a!OĪ6é__b!OĪ6áāũPé__a!KĪ6é__b!KĪ6áúũ=Pé__a!—7é__b!—7߯üLPcPā ”…LčŪ —V8áū’Pņ(Ū!å’Pë__sœ'ˑá8ūÆPņ(Ū!åâÆPë__câ%ˑ}ƒ;ß`;āP÷Pā ”ÄLé__nĀ9%}vū}Ī6á\ū'Qé__a!['Qé__b![Ī6ũPvë7ßc8AQiQā ”iQŪ*!BJ8âî*Ē!DJ8,Qá{ū†Qé__a!WĪ6áūĒQé__a!_ĒQé__b!_Ī6ũP߇8žQķQā ”iQŪ*!SJ8ŪŊW!SJ8âî*Ē!UJ8ß°8R*Rā ”iQŪœ¨!vĒūâî*Ē!xĒūßÔ89RaRā ”iQŪčØ!Ēūâî*Ē!Ēūvĩūß…EvRŽRā ”ŽRë__ca%aRvãū}ãūßÃūŽRÅRā ”ÅRčĀa+xĘR“R™Rߟ–ŪRéRā ”ÍGߘøRSā ”Sļ1á[â Sëch‡%Ũá<Ä%MSŪ<Äœ'ŪcÜÄMSvŸ“}”âá~âqSëstÕqSSSߝ…SSā ”ÅFŪß1*Sא߉ąSČSā ”ČSérhsIÍS3595ßđáSėSā ”“BßũûSTā ”“Bė¤äœ'0Té__säœ'é__cä%ßėĻ?TTTā ”ë6āļÄ%ßŗÄcTxTā ”xTāļÄ%’AęHÔ”ŽTŖTā ”ŖTāļÄ%—GßލˇTÂTā ”ÂTü6ßˍÖTáTā ”ÂTßę¨đTûTā ”ÂTß~ UUā ”ôEßē$U/Uā ”ôEß2>UIUā ”ôEßPXUcUā ”ôEßnrU}Uā ”ôEßÃŒUĄUā ”!@āļÄ%äŧÚęŗUČUā ”ČUāļÄ%qHäûŲÚßUôUā ”ôUāļÄ%}Hß# VVā ”V9ß'V2Vā ”2V˛9ß1FVQVā ”QVŦ9ßōeVpVā ”pVá9ß„VVā ”pVß%žVŠVā ”ŠVzCßãŊVŌVā ”°BāļÄ%äšá„ äVųVā ”ųVāļÄ%CHäã+ôW%Wā ”%WāļÄ%žHßt(9WDWā ”äGß’(SW^Wā ”^WHß ÛrW‡Wā ”‡WāļÄ%īGßhŧ›WŗWā ”lHŪŠā­ë@߈ŧÂWÚWā ”lHŪÖĮ´Û9ßwŊéWôWā ”ôWõGß–ŊXXā ”lHßĩŊ"X-Xā ”ôWßöžŽtAßđ°{a“aā ”“aë__n >ŽVAߔ§a˛aā ”˛a†Aä%,ÉaÔaā ”Ôa ;ßÉÃčaķaā ”ķa¤Aß0°bbā ”gaßQš!b,bā ”ôWߏš;bFbā ”ôWߎšUb`bā ”ôWßÍšobzbā ”ôWßėš‰b”bā ”ôWß ēŖbŽbā ”ôWß*ēŊbČbā ”ôWßIē×bâbā ”ôWá–äõbIT›á˙6cŲ!%ņ(ĻņŪĘnÔ 6cŪß1Õ ;cˑאßiũVcwcIT%ā ”ģ_évalswcâ…|cˆ:Ŗ€7ĩM–c–c%}Žäߐũ˛cĶcIT%ā ”ģ_évalsĶcâ…|ckß“Ģįcōcā ”5`}•ĩäeĩZ ddā ”dd@ōcáT˙edŲ!%ņ(ĻņŪ Lę edŪÕë œ'אß­eyd„dā ”„d˜7ß‘f˜d°dā ”„dë__nģcßĖzŋdĘdā ”Ędā8ß߄Ūdédā ”édĻ9ßۏũdeā ”eë__nv:ß÷Ž)e4eā ”eßÛ CeNeā ”ŠVß]eheā ”ŠVߡweeā ”eë__n X:ß ™ŖeŽeā ”Žeú:ßʙÂeÚeā ”Úeë__n —Ü:ß”"îefā ”÷@âīiĨ 'ßÅf!fā ”!f-CßĪÅ5fMfā ”Mfë__n ÃCßj¯af‡fā ”)[Ū|%  ‡fâīi  'HßÁ¯›fÁfā ”)[Ū|%Ą ÁfâīiĄ 'Hß°Õfûfā ”)[Ū|%ĸ ûfâīiĸ '+Hß<°g5gā ”)[Ū|%Ŗ 5gâīiŖ 'į9ße°Igogā ”)[Ū|%¤ ogâīi¤ 'n8ßā°ƒgŠgā ”)[Ū|%Ĩ ŠgâīiĨ 'Hßę¯Ŋgãgā ”)[Ū|%Ļ ãgâīiĻ %Hß ą÷ghā ”)[Ū|%§ hâīi§ %Hßް1hWhā ”)[Ū|%¨ Whâīi¨ %į9ߡ°kh‘hā ”)[Ū|%Š ‘hâīiŠ %+Hß`ąĨhËhā ”)[Ū|%Ē ËhâīiĒ %Hß“¯ßhiā ”)[Ūčǝ iŪ}Ͱ %âīi˛ 'Hß2ą&iYiā ”)[ŪčǏ YiŪ}Íš %âīiģ %HßHēmixiā ”xi4BßģŒi¤iā ”¤ië__n V¸B}…ÎäUÎ2ÁiŅiā ”ŅiÖinCŠi}ái9%ߡũüijIT9%ā ”ģ_évalsjâ…|cÛißÜŅ1jIjā ”Ijë__n *ĪTDßmf]jujā ”ujë__n ģcz7ß°{‰jĄjā ”Ędë__nÚxęl S˛jŊjā ”A;ęI IÎjåjā ”A;čáSI%ßU›ôj kā ” këp‹Û4á4ßŊšk3kā ” kāļÄ%ß;1BkMkā ”Mkqß4aklkā ”lkƒßl1€k•kā ”MkāļÄ%ße¤kškā ”lkāļÄ%߲Čklā ”*;ëtÎ÷Ūe—Īœ'Ū9Đ%ëmsgŅœ'áAãlŪé¤ū%ßŅ2-l8lā ”8l›ßšLlWlā ”Wl­ß3kl€lā ”8lāļÄ%ßęl¤lā ”WlāļÄ%ßÂGŗlËlā ”Ëlë__i ØĐl?8E8ßVIälīlā ”īlP8ßwommā ”m8ßŪG"m-mā ”īlßH¤mamamßęǏmŌmā ”Ōmâīit XMn38ߨŧæmņmā ”lHßî™nnā ”Žeë__n—á¸äNnIE%ëv.Nnëi.%Ū .%î:ß Čbnxnā ”xnëp‹LBRBßuĮŒnĄnā ”xnāļÄ%߲;°nĮnā ”ÄLé__nÉ,ßŪũŨnūnIT,ā ”ģ_évalsūnâ…|c¯EßÕ;o)oā ”ÄLé__fÜ%ßū?o`oIT%ā ”ģ_évals`oâ…|cŽ5ä5Uwo‚oā ”2Vß|‘oŠoā ”Ędë__nHÚxß0¸oÃoā ”pVßsŌoŨoā ”2VáŲ!öoŪž|^á9áķ!pŪž|cá9ßÅp6pā ”édë__ní‚äTZHpSpā ”2Vß*†bpzpā ”édë__nHí‚ßĖS‰pĄpā ”Ąpë__i ØĻpjBpBß`UēpÅpā ”Åp{BßüBŲpņpā ”ņpë__i Øöp‡BBße qqā ”„dßÔd$q/qā ”„dߐD>qIqā ”Iq˜B=rq! –b‚q!‘ķb%ō|q‚qZHvrqáßäČqIT›ļpĮŪwĻ ZHŪD: NqŪĀ œ'=ėq! – r!‘ķ %ķZHúqrÕ9vėqá åIrITČ­pĮZHŪwĻ Õ9ŪD: ČqŪĀ œ'=mr! –ˆ }r!‘ķˆ %ōwr}rë@vmrá9åÃrITļpĮŪwĻ ë@ŪD: IrŪĀ œ'ßfzŌręrā ”ęrë__i Øīr3C9CßŲ6ssā ”së__i Ø sPCŅ5ßm84s?sā ”?sVC=hs! –X|s!‘ķX%ķü$vs|s­DvhsácåÅsITēļpĮü$ŪwĻ ­DŪD: DsŪĀ œ'ßÄÔsęsā ”ęsëp‹’A˜Aßlūstā ”të__i ØtCŖCßŦm/t:tā ”:tŽCßËoNtYtā ”Yt‘CßSnmtxtā ”Ytß‘n‡t’tā ”’t€C}U~ᇆÕtĩRņ@āNœ­Ū L =ÕtŪÕ >Út—t—tvGËęSË4vötuā ”ußt߈u-uā ”-uë__i Ø2u~D„D߃FuQuā ”QuDߝÚeupuā ”pu Eß7n„uœuā ”’të__i Øœu†CßW¯°uģuā ”gaß•¯ĘuÕuā ”gavÛu‡ü$ëuzCá“å@v9Ęœ­‘?Õuëc@vŪô ÕuâîíŪ%âīitŽhAßÅēTv_vā ”ôWßĻēnvyvā ”ôWƒ…vë@vyváŠ˙Đv{%ŪmRå…vŪ† ĻŪmŪ:‡ ĻŪmë__f Ļ…váĀåw9Ęœ­FQ…vëc'wŪâØ'…vhAßJNw%wā ”%wËEßļL9wQwā ”Qwë__i ØVwēEĀE}+wáŧ˙{w!&fS{w[wßĶ=wšwā ”šw,7ß>ŽwÃwā ”šwāļÄ%ßd`Ōwįwā ”įwāļÄ%>7ß3`ûwxā ”įwß+ax xā ” xP7ßb4x?xā ”?xh7ßĻ/Sxjxā ”jxčģ?,¸oxâEא}0wáÚ˙”x!&–B”xtxßÕN¨xĀxā ”Āxë__i ØÅxčEîEßķyŲxäxā ”Ędß1zķxūxā ”ĘdßiP yyā ”yųEßņN,y7yā ”yß/OFyQyā ”Āx}…á´†yĩRb8āN8xŪ L =yŪÕ >”yQyQyvŸy‡ü$¯yn8áęåz9Ę8x‘?™yëczŪô ™yâîíŪ%âīitļxÔ8ßÚZz0zā ”0zë__i Ø5zF FߎIzTzā ”eß\Žcznzā ”eßn\}zˆzā ”ˆzFßöZœz§zā ”ˆzß4[ļzÁzā ”0z}Į…áá†˙zĩRķ9āNcŒŪ L =˙zŪÕ >{ÁzÁzv{‡ü${á9áæt{9ĘcŒ‘? {ëct{Ūô  {âîíŪ%âīitáŒj:ß< ˆ{“{ā ”ŠVß ĸ{­{ā ”ŠVáDæÆ{Ū[—KzCá[æß{Ū[—PzCß?&î{ų{ā ”^Wßu'||ā ”^Wëi”%ßū-|8|ā ”ŠVßâ%G|R|ā ”^Wá„áˇ|ŪčĒ ˇ|âîĪf %âīi %âî[— ŧ|âīj %âîž| Á|H+Hį9ƒŌ|Û9vÆ|áø˙}{%ZRåŌ|Ū† ρZŪ:‡ ρZë__f ĻŌ|ßÛV,}O}ā ”O}é__p ¯UčÎK T} ::á4X’}I_TpÛ9é__aMŧ’}é__pMŧ9WčĀaMŧ—}(::ßOZĢ}ļ}ā ”ļ}3FßģXĘ}â}ā ”â}ë__i Øį}"F(Fßä]û}~ā ”~é__p ¸\čÎK #~Ž:ˆ:á=_a~I_Tp%é__aMŧa~é__pMŧB^čĀaMŧf~Ŧ:ˆ:ßXaz~…~ā ”…~PFßÄ_™~ą~ā ”ą~ë__i Øļ~?FEFß…|Ę~â~ā ”â~ë__i Øį~\FbFßtÄû~ā ”!fß6Ä ā ”!fßyx/Rā ”Ré__p MwčÎK WÁBģBáŌy•I_Tp;é__aMŧ•é__pMŧ×xčĀaMŧšßBģBßú{Žšā ”šDCß"cÍđā ”đé__p öačÎK õs@m@á{d3€I_TpV@é__aMŧ3€é__pMŧ€cčĀaMŧ8€‘@m@ß–fL€W€ā ”W€ËCßek€ƒ€ā ”ƒ€ë__i ؈€ēCĀCß5Ŗœ€§€ā ”§€Á@ßÛ¨ģ€Ō€ā ”Ō€é__x •¨×Cß÷ĸæ€ņ€ā ”§€ä]ļԁā ”…FÂAßfq'Jā ”Jé__p :pčÎK OČAÂAáŋrI_Tp)ļé__aMŧé__pMŧÄqčĀaMŧ’æAÂAßÚtρąā ”ąŠFßFsŁŨā ”Ũë__i ØâyFFß!gö‚ā ”‚ë__i Ø‚–FœFßTŖ'‚2‚ā ”2‚ß@ßŖF‚Q‚ā ”2‚}Z~á*q‚!&˛kq‚Q‚ß+j…‚¨‚ā ”¨‚é__p ˙hčÎK ­‚AAá„kë‚I_Tpë@é__aMŧë‚é__pMŧ‰jčĀaMŧđ‚&AAߟeƒƒā ”ƒ€ßeƒ)ƒā ”W€ß,ū?ƒVƒIT%ā ”ģ_čoF•VƒDߨjƒƒā ”ƒé__p |~čÎK ’ƒDDáЃI_Tp°*é__aMŧЃé__pMŧ€čĀaMŧՃ$DDßĪ>éƒ „ā ”šwé__p Ŗ=čÎK  „אáI@J„I_Tpé__aMŧJ„é__pMŧ-?čĀaMŧO„J7אßdBc„n„ā ”n„ĘFßĐ@‚„š„ā ”š„ë__i ØŸ„šFŋF}ŐáHæ„I_TpŐé__a(Ļæ„é__b(Ļë„âæ'‡(¯Å¤„¤„áđ…… …J7J7áí?4…é__aMĮ4…é__bMĮ9…J7J7ßZaM…d…ā ” xé__xed…\7ßŋax…ƒ…ā ”?x}ĩūágĒ…~™|Eé__f .aRßåüš…ąā ”Já…ī…Ų!%ņ(ŪĘnJī…ˑß҃††ā ”†āļÄ%ŅDßWÖ,†A†ā ”A†āļÄ%ãDá…Û_†ë__x)(>ØáOÛx†ë__x) >Øßî准Ÿ†ā ”Ÿ†ë__x)ÍåyEßŧÚŗ†ž†ā ”ž†EßåXŌ†ę†ā ”ę†ë__x)ÄX¯6ß9Rū† ‡ā ” ‡[6ßwR‡(‡ā ” ‡á­I‡I_Tp0‘é__r(/I‡Ņ5ß+J]‡h‡ā ”h‡6ߏđ|‡”‡ā ””‡ë__x@B™‡GאßQ1­‡Ŋ‡ā ”MkŊ‡wßJ҇č‡ā ”lké__a8s臉ß.ü‡ˆā ”“BäSˆ.ˆā ”.ˆāļÄ%šßBˆWˆā ”ÅFāļÄ%ät˛Íiˆ~ˆā ”*;āļÄ%ßwĢˆĸˆā ”ę_āļÄ%ß°Įąˆŧˆā ”ŧˆ^BßÖJЈķˆā ”ķˆé__p ĒIčÎK øˆt8n8á/L6‰I_Tpëé__aMŧ6‰é__pMŧ4KčĀaMŧ;‰’8n8ßßQO‰r‰ā ”r‰é__p ŗPčÎK w‰:949á8Sĩ‰I_Tpģé__aMŧĩ‰é__pMŧ=RčĀaMŧē‰X949ß/Ήå‰ā ”å‰čŖ¨,ā ĩ×Eä~ĩZü‰Šā ”dāļÄ%ß‚Ė Š8Šā ”8ŠŪ-B°=ŠšHL;äŽ)ôTŠ_Šā ”%WäuļŌqІŠā ”…FāļÄ%ߊq•ŠŦŠā ”Jé__p …:pá8rЊé__aMŋЊé__pMŋÄqæAߐŧäŠīŠā ”¤iáWã‹ëfdũ%ß 0‹-‹ā ”-‹čŖ¨,āûÍŗFänÎ2D‹Y‹ā ”ŅiāļÄ%ß0h‹‹ā ”ČSérhs>‹95ę럃•‹¯‹ā ”°[âæ&„0‘ߝž‹ɋā ”ČSę ;ڋī‹ā ”ČSāļÄ%äxŸ'Œ Œā ”°[ßežŒ&Œā ”°[ߊ5Œ@Œā ”°[ámãXŒëfpõĄDß3gŒŒŒā ”.ˆŪžŒ°*ë__aŒŒ‰đk ß{ §Œ˛Œā ”ÅFß7'ÁŒˌā ”^WßģĖیķŒā ”8ŠŪÜ/ļü$ßRE ā ”VLßũ'ā ”…LvËßÔ<Sā ”Sč†öbø8'áS|é__a!w^7é__b!w^7ßĄš‹Ąā ” këp~Û4ámšé__n$Ã%á‚īŲ!%ņ(čĘn$Đīé__f$ĐlFˑß(ŽŽā ”“Bßõ6Ž(Žā ”?sáhŨ?ŽëcŌ %ß37NŽYŽā ”sßfhŽsŽā ”“B}P~ᇹŽĩRœ'āNŪ L =ąŽŪÕ >ļŽsŽsŽßÎʎâŽā ”ÅFë__sžœ'ßĒņŽ ā ”ÅFŪß1ĩ אßį2-ā ”8l-ĄßĪAXā ”Wlé__a8sXŗßG1lwā ”ŋIäx ‰žā ”žāļÄ%õß;E˛Įā ”ĮāļÄ%Á7ßlkۏđā ”đāļÄ%Ķ7áÄ=!iž7ž7ž7áŽA!iž7č†zž7č:‡zž7áÍ|!iž7I_Tp¤7膔ž7č:‡”ž7|ß7ß JĨā ”ķˆāļÄ%ßÉu´ɐā ”ɐāļÄ%†8äˆŌ˜āëā ”ųJßŌĄú‘ā ”‘œ5ßņĄ‘$‘ā ”‘árĸ=‘ësam g=‘–5áŒĸ…‘Ūi9 s…‘Ūv9 tŠ‘âî˙Ũ uĄîŪ vĄ–5–5ß/ĸž‘Б⠔‘ßâŖ¸‘Ñā ”Ñŋ5ߤבâ‘ā ”ÑႤû‘ësam gû‘š5ᜤC’Ūi9 sC’Ūv9 tH’âî˙Ũ u/ŖîŪ v/Ŗš5š5ß?¤\’g’ā ”ÑßQv’‹’ā ”r‰āļÄ%ßÜš’¯’ā ”¯’āļÄ%L9ßúJÒڒā ”ķˆé__p …ĒIá¨Kū’é__aMŋū’é__pMŋ4K’8ßčS““ā ”ÅpßAĩ,“D“ā ”D“Ūš bI“@49á;‡†“ĩR"9āNK‚Ū L †“ŪÕ ‹“[w[wß-/¨“ŋ“ĩRfSā ”å‰čįv,æfSß&TΓŲ“ā ”Ąp}„0ęT/,Üđ“”⠔剔ؓęl/,Ü”+”ā ”å‰āļÄ%ßR:”Q”ā ”r‰é__p …ŗPáąRu”é__aMŋu”é__pMŋ=RX9ßV‰”ž”ā ”O}āļÄ%ßô‰­””ā ””āļÄ%:áã=æ”!ií9í9í9áú•!ií9č†zí9č:‡zí9áN•!ií9I_TpÛ9膔í9č:‡”í9N•(:ß]b•w•ā ”~āļÄ%ß”†•›•ā ”›•āļÄ% :á>ŋ•!i|:|:|:áFė•!i|:č†z|:č:‡z|:áe'–!i|:I_Tp%膔|:č:‡”|:'–Ŧ:ß˙V;–R–ā ”O}é__p …¯Uá­Wv–é__aMŋv–é__pMŋ9W(:ß^Š–Ą–ā ”~é__p …¸\áļ^Ŗé__aMŋŖé__pMŋB^Ŧ:ߎwŲ–î–ā ”RāļÄ%ß Āũ–—ā ”—āļÄ%ĶBá!>6—!i¤B¤B¤Bá’c—!i¤Bč†z¤Bč:‡z¤Báąž—!i¤BI_Tp;膔¤Bč:‡”¤Bž—ßBß~˛—Ŋ—ā ”Ŋ—mFߥ|Ņ—ܗā ”Ŋ—ßß|ë—ö—ā ”â~}օáh‡4˜ĩRĒBāN{ÂŪ L =4˜ŪÕ >9˜ö—ö—ƒJ˜;v>˜áŪ•˜{%,|RåJ˜Ū† Ļ,|Ū:‡ Ļ,|ë__f ĻJ˜ßx¤˜ģ˜ā ”Ré__p …MwáKyߘé__aMŋߘé__pMŋ×xßBßīŖķ˜ū˜ā ”2‚ßFc ™$™ā ”đé__p …öaáôcH™é__aMŋH™é__pMŋ€c‘@ßWb\™q™ā ”đāļÄ%ßėž€™•™ā ”•™āļÄ%…@á@>š™!iP@P@P@áæ™!iP@č†zP@č:‡zP@á/!š!iP@I_TpV@膔P@č:‡”P@!š‘@ß`i5šJšā ”¨‚āļÄ%ß-ĢYšnšā ”nšāļÄ%Aá_>’š!iå@å@å@á\ŋš!iå@č†zå@č:‡zå@á{úš!iå@I_Tpë@膔å@č:‡”å@úš&Aßĩh››ā ”›§Fß=g-›8›ā ”›ß{gG›R›ā ”‚}ā…ᕇ›ĩR\@āN[ĄŪ L =›ŪÕ >•›R›R›ƒĻ›V@vš›á¨ņ›{%ČfRåϛۆ ĻČfŪ:‡ ĻČfë__f ĻĻ›ß4lœ œā ”:tß1Μ2œā ”2œŪ[—9zCtCá‡oœĩRå@āNœ­Ū L oœŪÕ tœQ‚Q‚ßrlˆœ“œā ”t}‰0ę#0,Üǜēœā ”-‹ēœ“œę;0,ÜМåœā ”-‹āļÄ%ßOjôœ ā ”¨‚é__p …˙háũj/é__aMŋ/é__pMŋ‰j&AߊCNā ”NãC}_~áĩRP@āN[ĄŪ L /‘ŪÕ 0–SSáÚʝĩRŠdë__x $ʝë__y %ĪŨCŨCß/Šãũā ”Nâæ'‡ ŖŠdßkŠ žžā ”Ō€áūFžĩRŠdë__x 0Fžë__y 1KžŨCŨCßŨ~_žtžā ”ƒāļÄ%ßĖƒž˜žā ”˜žāļÄ%Dá~>ŧž!i5‘5‘5‘á"éž!i5‘č†z5‘č:‡z5‘áA$Ÿ!i5‘I_Tp°*膔5‘č:‡”5‘$Ÿ$DßŅ8ŸCŸā ”CŸrDßĖWŸnŸā ”ƒé__p …|~áz€’Ÿé__aMŋ’Ÿé__pMŋ€$Dßķ>ϟŊŸā ”šwé__p …Ŗ=áĄ?áŸé__aMŋáŸé__pMŋ-?J7ájÛ˙Ÿë__x)$KØá Û ë__x),KØßXä' > ā ”> é__x)Ŋ8äÖFß#ßR ] ā ”puán| I_Tp%|  ‰‰ß E•   ā ”Įß;k¯ ē ā ”đßíkÉ Ô ā ”Ô å7ߨlč ķ ā ”ķ ũ7ß•nĄĄā ”mßÄE!Ą=Ąā ”Įé__p mÚDÎDášFmĄé__aM¸mĄé__pM¸dFé__nM¸Fß7߁mĄĻĄā ”ķ é__pŽOlé__nŽđôę:lOˇĄĖĄā ”Ô āļÄ%߁lÛĄæĄā ”ķ ßEmõĄ ĸā ”ķ āļÄ%ßoĸ.ĸā ”māļÄ%ßÚI=ĸHĸā ”ķˆß˜uWĸbĸā ”ɐßJvqĸ|ĸā ”|ĸ˜8ß5wĸ›ĸā ”›ĸ°8ß”J¯ĸËĸā ”ķˆé__p mĒIžIá‰Kûĸé__aM¸ûĸé__pM¸4Ké__nM¸`K’8ßŪwŖ4Ŗā ”›ĸé__pŽŦvé__nŽđôę—vOEŖZŖā ”|ĸāļÄ%á‘{ŖI_Tpëé__r(/{Ŗh8á¯ĄŖI_Tpëč ]\\8áÍđÎŖ!i\8č†d\8č:‡d\8áÉũŖ!i\8č†z\8č:‡z\8ôáč8¤!i\8I_Tpë膔\8č:‡”\88¤’8ßŪvL¤W¤ā ”›ĸßĸwf¤{¤ā ”›ĸāļÄ%ßĘ~Фĸ¤ā ”ĸ¤Ūp÷œzxÂ8ßî}ļ¤Á¤ā ”ĸ¤ßãPФÛ¤ā ”r‰ßĢę¤õ¤ā ”¯’ß]€ĨĨā ”Ĩ^9ßH#Ĩ.Ĩā ”.Ĩv9ߝQBĨ^Ĩā ”r‰é__p mŗP§Pá’RŽĨé__aM¸ŽĨé__pM¸=Ré__nM¸iRX9ßņĸĨĮĨā ”.Ĩé__pŽŋ€é__nŽđôęĒ€OØĨíĨā ”ĨāļÄ%áĻI_Tpģé__r(/Ļ.9á34ĻI_Tpģč ]\"9áėđaĻ!i"9č†d"9č:‡d"9áMĻ!i"9č†z"9č:‡z"9ôálËĻ!i"9I_Tpģ膔"9č:‡”"9ËĻX9ßņ€ßĻęĻā ”.Ĩßĩųϧ⠔.ĨāļÄ%ßŨˆ§5§ā ”5§Ūp÷œ‚ˆ9߈I§T§ā ”5§áræЧ9ĘcŒFQŌ|ëc'ЧŪâØ'Ō|j:á„ņ§§čįv4Ô\8áīņŋ§čįv4Ô"9ߍ>Χę§ā ”šwé__p mŖ=—=á‚?¨é__aM¸¨é__pM¸-?é__nM¸Y?J7ßŋb.¨S¨ā ”?xé__pŽaé__nŽđôęxaOd¨y¨ā ” xāļÄ%ᙚ¨I_Tpé__r(/š¨ŨáˇI_Tpč ]\ŐáŅī¨!iŐč†zŐč:‡zŐôáđ*Š!iŐI_Tp膔Őč:‡”Ő*ŠJ7߃b>ŠSŠā ”?xāļÄ%ßĢibŠzŠā ”ujŪp÷œ[cßé=‰Š™Šā ”šw™Š27ßI`­ŠÄŠā ”įwé__a8sÄŠD7ß@aØŠīŠā ” xé__aZīŠV7ßCĒĒā ”IqáDĒI_T1I_T2é__pOŐčģ?ODĒאßVCXĒcĒā ”ņpማĒĩRŋāNcŪ L =›ĒŪÕ > ĒtxtxáEöĒCI–B!iŐč†0k–Bč:‡0k–BčD0lŐâæDc0s÷$ávIĢCI–B!iŐI_TpŪ†0–BŪ:‡0–BŪD0ŐIĢJ7áŖĢŪƒՋŪÜՋë__nđáIˆšĢĩRŋāNcŪ L šĢŪÕ žĢtxtxßĀ/ÛĢōĢĩR–Bā ”jxčįv,ž–BáŽ0Ŧ§y' čÎK,ÄŦאáļZŦĩR–BrÍŽ/č† Ÿ–Bč:‡ Ÿ–BčŖ¨ ŸŽ/ßßUiŦtŦā ”O}ßɃŦŽŦā ””ßuŠŦ¨Ŧā ”¨Ŧ.:ß`‹ŧŦĮŦā ”ĮŦF:ß™VÛŦ÷Ŧā ”O}é__p m¯UŖUáŽW'­é__aM¸'­é__pM¸9Wé__nM¸eW(:ß Œ;­`­ā ”ĮŦé__pŽ×Šé__nŽđôęŠOq­†­ā ”¨ŦāļÄ%ß ‹•­ ­ā ”ĮŦß͋¯­Ä­ā ”ĮŦāļÄ%ßč\Ķ­Ū­ā ”~ß֓í­ø­ā ”›•߈”ŽŽā ”Ž˛:ßs•&Ž1Žā ”1ŽĘ:ßĸ]EŽaŽā ”~é__p m¸\Ŧ\á—^‘Žé__aM¸‘Žé__pM¸B^é__nM¸n^Ŧ:ß–ĨŽĘŽā ”1Žé__pŽę”é__nŽđôęՔOÛŽđŽā ”ŽāļÄ%ß•˙Ž ¯ā ”1Žß╝.¯ā ”1ŽāļÄ%áøķF¯čįv4Ôí9ácô^¯čįv4Ô|:ß}wm¯x¯ā ”RßÛŋ‡¯’¯ā ”—ßĀĄ¯Ŧ¯ā ”Ŧ¯åBßxÁ˯ā ”˯ũBß5Ã߯ę¯ā ”Mf߯Žų¯°ā ”)[ß7x°/°ā ”Ré__p mMwAwá,y_°é__aM¸_°é__pM¸×xé__nM¸yßBß!Âs°˜°ā ”˯é__pŽīĀé__nŽđôęÚĀOаž°ā ”Ŧ¯āļÄ%ß!ÁͰذā ”˯ßåÁį°ü°ā ”˯āļÄ%áœæ2ą9Ę{ÂFQJ˜ëc'2ąŪâØ'J˜!CßŗÃFą[ąā ”MfāļÄ%áÎôsąčįv4Ô¤Bá9õ‹ąčįv4Ôzá¤õŖąčįv4ÔP@ßāb˛ąÎąā ”đé__p möaęaáÕcūąé__aM¸ūąé__pM¸€cé__nM¸Ŧc‘@ߥ˛7˛ā ”7˛é__pŽĪŸé__nŽđô¯@ęēŸOM˛b˛ā ”b˛āļÄ%—@ß v˛˛ā ”7˛ßÅ ˛Ĩ˛ā ”7˛āļÄ%áöŊ˛čįv4Ô°Aß$q˞č˛ā ”Jé__p m:p.párŗé__aM¸ŗé__pM¸Äqé__nM¸đqæAßZˇ,ŗQŗā ”Qŗé__pŽ(ļé__nŽđôBß&beŗpŗā ”đßģžŗŠŗā ”•™ßmŸ™ŗ¤ŗā ”b˛ßX ŗŗžŗā ”7˛ß/iÍŗØŗā ”¨‚ßüĒįŗōŗā ”nšßŽĢ´ ´ā ” ´,Aß™Ŧ ´+´ā ”+´DAßéi?´[´ā ”¨‚é__p m˙hķháŪj‹´é__aM¸‹´é__pM¸‰jé__nM¸ĩj&AßB­Ÿ´Ä´ā ”+´é__pŽŦé__nŽđôęûĢOÕ´ę´ā ” ´āļÄ%ßBŦų´ĩā ”+´ß­ĩ(ĩā ”+´āļÄ%ß›p7ĩLĩā ”JāļÄ%ßEĩ[ĩpĩā ”pĩāļÄ%ÚAęļO†ĩ›ĩā ”›ĩāļÄ%ėAázö¸ĩčįv4Ôå@ßŦ~ĮĩŌĩā ”ƒßčËáĩėĩā ”˜žßšĖûĩļā ”ļ*Dß…Íļ%ļā ”%ļBDßf9ļUļā ”ƒé__p m|~p~á[€…ļé__aM¸…ļé__pM¸€é__nM¸2€$Dß.Ιļžļā ”%ļé__pŽüĖé__nŽđôęįĖOĪļäļā ”ļāļÄ%ß.Íķļūļā ”%ļßōÍ ˇ"ˇā ”%ļāļÄ%ß$Đ1ˇ<ˇā ”IjߤKˇVˇā ”Qußâeˇpˇā ”-ußbСЎā ”Ij}SƒávˆȡĩR5‘āNˆÎŪ L =ȡŪÕ >͡ЎЎßĀĪáˇöˇā ”IjāļÄ%áåö¸čįv4Ô5‘áP÷&¸čįv4ÔŐß ƒ5¸@¸ā ”†ß&ÖO¸Z¸ā ”A†ßË×i¸t¸ā ”t¸īDߕ׈¸“¸ā ”t¸ßkŪĸ¸­¸ā ”pußūØŧ¸Į¸ā ”ž†ßÃ`߸ī¸ōáÖā ”įwī¸éDßŲššā ”ž†áį(š!&œ'(šŅ5á_š_Åœ'č†-Zœ'č:‡-Zœ'<áŖˆ€šŲĸ'č3ĘN–œ'á-­šCIœ'č†-rœ'č:‡-rœ'áé āšë__p—°*ŪY'—œ'ŪÂO—œ'á€FēâXœ'č‰$%|œ'č4Ļ%|œ'é__a%|Fēõ<ēæ,%‡ã__r%ŠËâXœ'‰áąŽē›œ'Ū‰$Ëœ'Ū4ĻËœ'ë__aĖŽēėô‰áãŅē›œ'Ū‰$áœ'Ū4Ļáœ'ë__aáŅēô‰ßîēģCIœ'ā ”ÅFč‰$%äœ'č4Ļ%äœ'é__a%ä쉐ßeu1ģIģā ”Iģë__i ØNģ.G4Gß­šbģmģā ”xißoš|ģ‡ģā ”xiácÜģv\8{\8Ū†\8Ū:‡\8ŪD\8âī__níáPūģĩR\8Ūįv\8áo]ŧYŗ{ü$v\8{\8Ū†I\8Ū:‡I\8ŪDI\8âî8SN÷$áĢŧĩR\8Ūįv!\8áĘÎŧYŗ{ü$v\8{\8Ū†[\8Ū:‡[\8ŪD[\8߸JŨŧčŧā ”čŧ€8áÂKŊé__aMÂŊŒ8ßûvŊ$Ŋā ”$Ŋļ8ßëz8ŊCŊā ”ĘdápŊI_Tp9%é__aŲpŊé__bŲuŊÛiÛißlJ‰ŊĨŊā ”ķˆé__n cžI]ákKÉŊé__aMĩÉŊé__nMĩ`K’8ßŧwŨŊöŊā ”›ĸé__n§đôäaĪžžā ”vBž49á)?žĩR"9Ūįv"9áHžžYŗ{ü$v"9{"9Ū†I"9Ū:‡I"9ŪDI"9âî8SN÷$á„ĀžĩR"9Ūįv!"9áŖŋYŗ{ü$v"9{"9Ū†["9Ū:‡["9ŪD["9ßÁQŋ)ŋā ”)ŋF9áËRFŋé__aMÂFŋR9߁Zŋeŋā ”eŋ|9ßū„yŋ„ŋā ”édßuQ“ŋ¯ŋā ”r‰é__n c§P]átRĶŋé__aMĩĶŋé__nMĩiRX9ß΁įŋĀā ”.Ĩé__n§đô}%‘áß Ā!&*‘ ĀĀáũWĀ_Å*‘č†-Z*‘č:‡-Z*‘<á% yĀĩRí9Ūįví9áD ØĀYŗ{ü$ví9{í9Ū†Ií9Ū:‡Ií9ŪDIí9âî8SN÷$ဠúĀĩRí9Ūįv!í9០IÁYŗ{ü$ví9{í9Ū†[í9Ū:‡[í9ŪD[í9ßŊVXÁcÁā ”cÁ:áĮW€Áé__aM€Á":ß&‹”ÁŸÁā ”ŸÁL:ߏŗÁžÁā ”eßqVÍÁéÁā ”O}é__n cŖU]ápW Âé__aMĩ Âé__nMĩeW(:ßį‹!Â:Âā ”ĮŦé__n§đôáÛ \ÂĩR|:Ūįv|:áú ģÂYŗ{ü$v|:{|:Ū†I|:Ū:‡I|:ŪDI|:âî8SN÷$á6 ŨÂĩR|:Ūįv!|:áU ,ÃYŗ{ü$v|:{|:Ū†[|:Ū:‡[|:ŪD[|:߯];ÃFÃā ”FÚ:áĐ^cÃé__aMÂcÃĻ:ß9•wÂÃā ”‚ÃĐ:ß)™–ÃĄÃā ”Žeßz]°ÃĖÃā ”~é__n cŦ\]áy^đÃé__aMĩđÃé__nMĩn^Ŧ:ßú•ÄÄā ”1Žé__n§đôá‘ ?ÄĩR¤BŪįv¤Bá° žÄYŗ{ü$v¤B{¤BŪ†I¤BŪ:‡I¤BŪDI¤Bâî8SN÷$áė ĀÄĩR¤BŪįv!¤Bá ÅYŗ{ü$v¤B{¤BŪ†[¤BŪ:‡[¤BŪD[¤Bß[xÅ)Åā ”)ÅÍBáeyFÅé__aMÂFÅŲBß>ÁZÅeÅā ”eÅCß.ÅyÅ„Åā ”!fßx“ůÅā ”Ré__n cAw]áyĶÅé__aMĩĶÅé__nMĩyßBß˙ÁįÅÆā ”˯é__n§đôáųÆčįv4Üzá ûdÆI_Tp;Ū†qĒBŪ:‡qĒBŪDq¤BâîŽ/xG áL †ÆĩRzŪįvzák åÆYŗ{ü$I_II¤BI_OI¤BŪ†¤BŪ:‡¤BŪD¤Bâî8S†÷$á§ ĮĩRzŪįv!záÆ VĮYŗ{ü$I_IIzI_OIzŪ†ŽzŪ:‡ŽzŪDŽzßUÄeĮpĮā ”Mfߎ{Į—Įā ”šë__n (z}K~áÁˆÕĮĩR¤BāN{ÂŪ L =ÕĮŪÕ >ÚĮ—Į—Įá $ČI_IIzI_OIzŪ†ČzŪ:‡ČzŪDČzßÄ3Č>Čā ”MfßÄĮMČeČā ”MfŪâĸ}íÂá4 ‡ČĩRP@ŪįvP@áS æČYŗ{ü$vP@{P@Ū†IP@Ū:‡IP@ŪDIP@âî8SN÷$ᏠÉĩRP@Ūįv!P@ᎠWÉYŗ{ü$vP@{P@Ū†[P@Ū:‡[P@ŪD[P@ßcfÉqÉā ”qÉ@ádŽÉé__aMŽÉ‹@ß ĸÉ­Éā ”­Éĩ@ߤÁÉĖÉā ”2‚߸bÛÉ÷Éā ”đé__n cęa]áˇcĘé__aMĩĘé__nMĩŦc‘@ßß /ĘHĘā ”7˛é__n§đôäļŌZĘjĘā ”…FjĘÂAáę ‘ĘĩR°AŪįv°Aá đĘYŗ{ü$v°A{°AŪ†I°AŪ:‡I°AŪDI°Aâî8SN÷$áE ËĩR°AŪįv!°Aád aËYŗ{ü$v°A{°AŪ†[°AŪ:‡[°AŪD[°AßHqpË{Ëā ”{ËÔAßüpËĢËā ”Jé__n c.p]áûqĪËé__aMĩĪËé__nMĩđqæAß8ˇãËüËā ”Qŗé__n§đôáRrĖé__aMÂĖāAßwļ(Ė3Ėā ”3Ė BßgēGĖRĖā ”xiá  sĖI_Tp)ļé__r(/sĖŧAáž ™ĖI_Tp)ļč ]\°AáØ ČĖ!i°Ač†z°Ač:‡z°Aôá÷ Í!i°AI_Tp)ļ膔°Ač:‡”°AÍæAßZļÍ"Íā ”Qŗßˇ1ÍFÍā ”QŗāļÄ%äÜÅØXÍmÍā ”mÍāļÄ%]GßjpÍŒÍā ”Jßĩ›ÍĻÍā ”pĩ߯ĩĩÍĀÍā ”›ĩßąļĪÍÚÍā ”Qŗá$üÍĩRå@Ūįvå@áC[ÎYŗ{ü$vå@{å@Ū†Iå@Ū:‡Iå@ŪDIå@âî8SN÷$á}ÎĩRå@Ūįv!å@ážĖÎYŗ{ü$vå@{å@Ū†[å@Ū:‡[å@ŪD[å@ß jÛÎæÎā ”æÎAákĪé__aMÂĪ Aß_ŦĪ"Īā ”"ĪJAßO°6ĪAĪā ”gaßÁiPĪlĪā ”¨‚é__n cķh]áĀjĪé__aMĩĪé__nMĩĩj&Aß ­¤ĪŊĪā ”+´é__n§đôáÚßĪĩR5‘Ūįv5‘áų>ĐYŗ{ü$v5‘{5‘Ū†I5‘Ū:‡I5‘ŪDI5‘âî8SN÷$á5`ĐĩR5‘Ūįv!5‘áT¯ĐYŗ{ü$v5‘{5‘Ū†[5‘Ū:‡[5‘ŪD[5‘ߊžĐÉĐā ”ÉĐDᔀæĐé__aMÂæĐDßKÍúĐŅā ”ŅHDß;ŅŅ$Ņā ”CŸß>3ŅOŅā ”ƒé__n cp~]á=€sŅé__aMĩsŅé__nMĩ2€$Dß Î‡Ņ Ņā ”%ļé__n§đôá•õŅvŐ{ŐŪ†ŐŪ:‡ŐŪDŐâī__nĪîáŌĩRŐŪįvŐá¯vŌYŗ{ü$vŐ{ŐŪ†IŐŪ:‡IŐŪDIŐâî8SN÷$áë˜ŌĩRŐŪįv!Őá įŌYŗ{ü$vŐ{ŐŪ†[ŐŪ:‡[ŐŪD[Őßą>öŌĶā ”Ķ87ße>Ķ1Ķā ”šwé__n c—=]ád?UĶé__aMĩUĶé__nMĩY?J7ߝbiĶ‚Ķā ”?xé__n§đôßÜa‘ĶœĶā ”œĶn7áÔ?šĶé__aMÅšĶD7ßdbÍĶđĶā ”?xé__n†đé__a†đĶt7đÆæáģ?Ôé__aMÂÔD7ßĖe(Ô3Ôā ”„dáF„ÔCIŐ!iŐč†0kŐč:‡0kŐčD0lŐâæDc0s÷$áw×ÔCIŐ!iŐI_TpŪ†0ŐŪ:‡0ŐŪD0Ő×ÔJ7áˇ7ÕCIŐ!iŐĶä_Ū†0'ŐŪ:‡0(ŐŪD0)ŐŪ"0*7ÕJ7ßė@KÕVÕā ”n„ßĩdeÕpÕā ”uj}å…áÕĩRŐāNcŪ L ŽÕŪÕ ŗÕpÕpÕßķdĮÕŌÕā ”ujßĶcáÕėÕā ”uj߯hûÕÖā ”ujë__xĒÖ’7ßZ„'ÖCÖā ”†é__p mpƒdƒá.…sÖé__aM¸sÖé__pM¸ú„é__nM¸…KGßߨ‡Ö’Öā ”puß[ŲĄÖšÖā ”puë__p)„„Øß˙ÖČÖĶÖā ”ĶÖšDߟŲįÖ˙Öā ”puë__p)—„Øäæ×)Į×&×ā ”t¸āļÄ%ßÄŪ5×J×ā ”puāļÄ%á÷k×I_Tp' é__r(/k×אß×׊×ā ”Š×ŋDáÛ¨×ë__x)‘ØáģÛÁ×ë__x)0KØáî×I_Tp9%é__aÂî×é__bÂķ×ÛiÛiá .ØŪ¯`œhŪå÷œhâī__dž>á8oØŲ!%ņ(ĻņŪ L oØŪÕ tØאאßĒֈحØā ”­Øë__x@r˛Øë__y@rˇØŗDאאßÛÚËØÖØā ”puá4ÛīØë__x)‘Øß*åūØŲā ”Ųé__x)įŲÜFčFߨG.ŲQŲā ”QŲé__a*pVŲé__b*p[ŲĘ4Đ4Đ4ßëäoŲzŲā ”> áÖÛ“Ųë__x)4KØßäŨĸŲÔŲā ”ž†ë__x)ų‘Øë__y)ų‘Øë__k)úÔŲאßúÚčŲķŲā ”ž†ß€ßÚ Úā ”ž†ßįÚ4Úā ”4Úë__x)79Ú…E‘EántÚI_T1ëI_T2ëé__pO\8čģ?OtÚn8á–ĘÚCI\8!i\8č†0k\8č:‡0k\8čD0l\8âæDc0s÷$áĮÛCI\8!i\8I_TpëŪ†0\8Ū:‡0\8ŪD0\8Û’8á}ÛCI\8!i\8ĶIuŪ†0'\8Ū:‡0(\8ŪD0)\8Ū"0*}Û’8ßŌL‘ÛœÛā ”%wßÔyĢÛļÛā ”ĸ¤}Ŋ…á‰ôÛĩR\8āN8xŪ L ôÛŪÕ ųÛļÛļÛßz ÜÜā ”ĸ¤ßKģ'Ü2Üā ”lHäôŋDÜ\Üā ”QVŪ'Vŋ\Ün8äĢsÜ~Üā ”Ôaę* DÜĻÜā ”‰Hč3’DĻÜn8áGáÜI_T1ģI_T2ģé__pO"9čģ?OáÜ49áo7ŨCI"9!i"9č†0k"9č:‡0k"9čD0l"9âæDc0s÷$á ŠŨCI"9!i"9I_TpģŪ†0"9Ū:‡0"9ŪD0"9ŠŨX9áāęŨCI"9!i"9Ķ\Ū†0'"9Ū:‡0("9ŪD0)"9Ū"0*ęŨX9á 4Ūv"9{"9Ū†v"9Ū:‡v"9ŪDv"9ßįƒCŪNŪā ”5§ß%„]ŪhŪā ”5§áRžŪI_T1)ļI_T2)ļé__pO°Ačģ?OžŪÂAázôŪCI°A!i°Ač†0k°Ač:‡0k°AčD0l°AâæDc0s÷$áĢGßCI°A!i°AI_Tp)ļŪ†0°AŪ:‡0°AŪD0°AGßæAáë§ßCI°A!i°AĶÅ´Ū†0'°AŪ:‡0(°AŪD0)°AŪ"0*§ßæAá+ņßv°A{°AŪ†v°AŪ:‡v°AŪDv°Aßbsā āā ”ąßPšā%āā ”¤i}ۅáH‰cāĩR°AāN´ˇŪ L cāŪÕ hā%ā%āߎš|ā‡āā ”¤i߀p–āĻāā ”JĻāÎAß*ĩēāŅāā ”pĩé__a8sŅāāAßÛĩåāüāā ”›ĩé__aZüāōAáŪæáIC,@%á]3á!&°*3áDá{já_Ű*č†-Z°*č:‡-Z°*<áu‰‹áŲ%č3ĘN–°*áŖ¸áCI°*č†-r°*č:‡-r°*áÉ ëáë__p“°*ŪY'“°*ŪÂO“°*áCDââX°*č‰$%|°*č4Ļ%|°*é__a%|Dââæ,%‡ã__r%ŠË‰átŒâ›°*Ū‰$˰*Ū4Ļ˰*ë__aĖŒâėô‰áĻĪâ›°*Ū‰$á°*Ū4Ļá°*ë__aáĪâô‰ßĶėâãCI°*ā ”ÅFč‰$%ä°*č4Ļ%ä°*é__a%ä㉐áÆ8ãé__n$á%áÛYãŲ!%é__c$Ĩ%áųãŲ!%ņ(čĘn$˛ãé__f$˛Ęjˑá%ĘãŲ!%ņ(čĘn$îĘãé__f$î…FˑvQßãGäãīãā ”īãĪãvúã‡@‘ ä@‘ßø;ä0äā ”ÄLč<ôãv+ĻáûæjäŪq0äën%âî:‘7Ļáį€äéc…$%á+į˜äëch%áAįšäécË%éosË&7á[įØäITo]ëxJ]ß<įäūäā ”ÄLé__põ]áyį!åësX!åëosX&7Ē1á‘įIåës&ĐIåëos&Đ&7Ē1áÍĐsåŪÜ/&Osåëos&O&7אáŠįĻåITŪÜ/&Ļåëos&&7ôאáČįĶåëch$%âîÖë‘Ķå%áŪįûåësdûåëosd&7!5áöį#æës&Ū#æëos&Ū&7!5á˙ĐMæŪÜ/&OMæëos&O&7‘á耿IT, ŪÜ/&€æëos&&7ô‘ßš&”æŠæā ”ŠæāļÄ%‘ßōŊæÕæā ”ÅFë__cĮ%ß›äæīæā ”‰_äũ˛į įā ” į'5ßSū'įHįITįûā ”ģ_évalsHįâ…|c5ęzūU^įsįā ”ģ_āļÄ%đ,ä ŒįĄįā ”`āļÄ%t%ąįuy' }Ąįß“ūÍįîįITĄįā ”ģ_évalsîįâ…|cąįáV4čŲ!%ņ(ĻņŪ L 4čŪÕ œ'אt%Ičuy' }9čßēūeč†čIT9čā ”ģ_évals†čâ…|cIčßáūĄčÂčITā ”ģ_évalsÂčâ…|cאt%×čuy'}Įčß˙ķčéITĮčā ”ģ_évalséâ…|c×čđ$,}Gß/˙<é]éITGā ”ģ_évals]éâ…|c é}Ô>ßV˙~éŸéITÔ>ā ”ģ_évalsŸéâ…|cbét%´éuy'}¤éß}˙ĐéņéIT¤éā ”ģ_évalsņéâ…|c´éߤ˙ ę-ęITëā ”ģ_évals-ęâ…|cn8t%Bęuy' }2ęßË˙^ęęIT2ęā ”ģ_évalsęâ…|cBę}ģßō˙ ęÁęITģā ”ģ_évalsÁęâ…|c„ęt%Öęuy'}ÆęßōęëITÆęā ”ģ_évalsëâ…|cÖęt%(ëuy'}ëß@DëeëITëā ”ģ_évalseëâ…|c(ët%zëuy'}jëßg–ëˇëITjëā ”ģ_évalsˇëâ…|czët%Ėëuy'}ŧëߎčë ėITŧëā ”ģ_évals ėâ…|cĖët%ėuy'}ėßĩ:ė[ėITėā ”ģ_évals[ėâ…|cėŨOŦ'ą%€ėë__x'ą%t%ėuy' }€ėßÜŦėÍėIT€ėā ”ģ_évalsÍėâ…|cėt%âėuy'}ŌėßūėíITŌėā ”ģ_évalsíâ…|câėt%4íuy'}$íß*PíqíIT$íā ”ģ_évalsqíâ…|c4íáņ"Ĩí–Ū\uâĨíŪq‡ãĒíאאę<ŸĖĀíÚíā ”°[âæ(oĶ™âßéíîā ”“BŪp÷Dhá-čîëch%áCč2îŪˇ|ŸŽßn¸AîLîā ”¤iäšČ1^îiîā ”…XßYĮxîŽîā ”xnëp~LBߎ—î˛îā ”ÚeāļÄ%ß›ÁîÖîā ”eāļÄ%߸Ŧåîúîā ”úîāļÄ%ž9áVč5ī9Ę[ĄFQĻ›ëc'5īŪâØ'Ļ›Ķ@ßoÃIī^īā ”ęsāļÄ%ß:Âmī‚īā ”‚īāļÄ%zAä í ™īŽīā ”ÔaāļÄ%ßÔŽŊīŌīā ”“aāļÄ%ß“ĸáīöīā ”§€āļÄ%äŊܸđđā ”đāļÄ%Häé˜84đ?đā ”ā1ßōxNđYđā ”ĸ¤ßƒhđsđā ”5§ßœŦ‚đ˜đā ”úîëp~ŋß§đ˛đā ”eß0—ÁđĖđā ”ÚeäžŪđéđā ”QVßöÚøđņā ”‡WßÜņņā ”đßHĀ,ņ7ņā ”%Kß,ĀFņ^ņā ”%KŪÜ/Ú^ņ2@ß+Árņ}ņā ”}ņD@ßJÁ‘ņœņā ”}ņß ÁĢņļņā ”ļņ,@ßiÁĘņâņā ”ļņŪÜ/Ôâņ2@ߝ™öņōā ”ōŪ,…Č1å1ßš™"ō7ōā ”ōāļÄ%ß•¸Fōaōā ”lHâîˇŦ€čጝōI_Tp%é__a(Ļōé__b(Ļĸōâæ'‡(¯%‚:‚:áŒčŌōIE%ŪEVLß6ëvLÜ:ßŋáōėōā ”lHßu"ûōķā ”÷@ŪEVŸ ß6á0,,ķŪæôÄ ÷ß`ā;ķSķā ”ųVŪ3’ß Sķn8t%hķuy' }XķßQ„ķĨķITXķā ”ģ_évalsĨķâ…|chķt%ēķuy'}ĒķßxÖķ÷ķITĒķā ”ģ_évals÷ķâ…|cēķt% ôuy'$}üķߟ(ôIôITüķā ”ģ_évalsIôâ…|c ôt%^ôuy'?}Nô߯zô›ôITNôā ”ģ_évals›ôâ…|c^ôt%°ôuy'} ôßíĖôíôIT ôā ”ģ_évalsíôâ…|c°ôt%õuy'>}ōôßõ?õITōôā ”ģ_évals?õâ…|cõt%Tõuy'=}Dõß;põ‘õITDõā ”ģ_évals‘õâ…|cTõt%Ļõuy'C}–õßbÂõãõIT–õā ”ģ_évalsãõâ…|cĻõßī÷õöā ”2Vß[ ööā ”ŠVß&+ö6öā ”^WáG,OöŪRŧ %ßÚ&^öiöā ”^Wá^,‚öŪĖ;ˇ %ß'‘öœöā ”^Wß &Ģöļöā ”^Wß^&ÅöĐöā ”^W}i'߉ėö ÷ITi'ā ”ģ_évals ÷â…|cĐöß"!÷,÷ā ”õ`áģŨE÷ëstrā E÷Ē1t%Z÷uy'˙}J÷ß°v÷—÷ITJ÷ā ”ģ_évals—÷â…|cZ÷áƒãÎ÷ëfd÷%ëbuf÷ŽŪíŪ÷9%t%Ū÷uy'}Î÷ß×ú÷øITÎ÷ā ”ģ_évalsøâ…|cŪ÷đĢčt%7øuy'}'øßūSøtøIT'øā ”ģ_évalstøâ…|c7øt%‰øuy'.}yøß%ĨøÆøITyøā ”ģ_évalsÆøâ…|c‰øt%Ûøuy'2}ËøßL÷øųITËøā ”ģ_évalsųâ…|cÛøá§6ųŪ-Bc6ųĒ1t%Kųuy'4};ųßsgųˆųIT;ųā ”ģ_évalsˆųâ…|cKų}t“ßšŠųĘųITt“ā ”ģ_évalsĘųâ…|cųt%ßųuy'&}ĪųßÁûųúITĪųā ”ģ_évalsúâ…|cßųt%1úuy'1}!úßčMúnúIT!úā ”ģ_évalsnúâ…|c1ú}0ßú°úIT0ā ”ģ_évals°úâ…|csút%Åúuy'"}ĩúß6áúûITĩúā ”ģ_évalsûâ…|cÅút%ûuy'(}ûß]3ûTûITûā ”ģ_évalsTûâ…|cût%iûuy'}Yûß„…ûĻûITYûā ”ģ_évalsĻûâ…|ciût%ģûuy'}ĢûßĢ×ûøûITĢûā ”ģ_évalsøûâ…|cģû}ßŌü:üITā ”ģ_évals:üâ…|cũûßf%NüYüā ”^Wß!hü€üā ”÷@ŪČBDü$ßŊ üšüā ”÷@áˇčÍüŪ\%ŪŪ\%ŪīÆ\%t%Ũüuy'}ÍüßųųüũITÍüā ”ģ_évalsũâ…|cŨüá×č7ũëch˜%đu,đíčßXĄTũjũā ”jũëx oũ…5‹5ß><ƒũšũā ”ÄLé__fāU%ßhŖŠũŋũā ”ŋũëx Äũ¨5Ž5ß9(Øũãũā ”ŋIß 1ōũũũā ”ŋIäãüĄū'ūā ”ģ_Ū)yĄ'ū!5á#[ū–, Ū\uâ[ūŪq‡ã`ū‘‘}kū5(ß †ūžūIT5(ā ”`ŪÜ/žūeū}Šūų'áųčÍūITų'č7_ķÍūŖūáĢ˙I_T1I_T2œ'é__pOŐčģ?O˙Ņ5áĶ^˙CI*‘!iŐč†0k*‘č:‡0k*‘čD0lŐâæDc0s÷$áą˙CI*‘!iŐI_TpŪ†0*‘Ū:‡0*‘ŪD0Őą˙J7áDã˙CI*‘č†-r*‘č:‡-r*‘ßjû˙5!i*‘ā ”ujŪ†*‘Ū:‡*‘âī__nEjßJjMyCI*‘ā ”ujŪ†ę*‘Ū:‡ę*‘ėôß+bˆŸā ”?xé__aŸt7}Ētœ'ēuy'á,ŨY¯g%Ū0ųŨ¤}čtœ'øuy'áĄ,Y¯g%Ū0ųâߨ/:ā ”ôEßž ITā ”ŠVßœ&cnā ”^Wßų&}ˆā ”^Wß™'—ĸā ”^WágņYŗ{ü$I_II¤BI_OI¤BۆޤBŪ:‡Ž¤BŪDޤBáŖ6I_II¤BI_OI¤BۆȤBŪ:‡Č¤BŪDȤBáĻ>xCI¤B!i¤Bč†0[¤Bč:‡0[¤BčD0\¤BáÕÉCI¤B!i¤Bč†0k¤Bč:‡0k¤BčD0l¤BâæDc0s÷$áCI¤B!i¤BI_Tp;Ū†0¤BŪ:‡0¤BŪD0¤BßBáF|CI¤B!i¤BĶŒŋŪ†0'¤BŪ:‡0(¤BŪD0)¤BŪ"0*|ßBá†Æv¤B{¤BŪ†v¤BŪ:‡v¤BŪDv¤Bß‚zÕāā ”šá“‰ĩR¤BāN{ÂŪ L ŪÕ —Į—ĮßįŽ1Iā ”)[ŪFH{ ;ä)ķ [sā ”ÔaŪFHķ ;äÉ …ā ”ÔaŪFH ;ß|ŲŦÄā ”ôUŪčĒ™­Dß=ÚĶëā ”ČUŪčĒĸ­DßÔĀúā ”ļņŪÜ/Å2@ßĸ&1ā ”§€ßVŽ@Kā ”“aߡĒZeā ”Ōmß”ĨtŒā ”ŒŪ› ¨+Ļß6ß ļā ”‚īëp~ö6ęôĶ”ĮŌā ”ŖTßSÃá÷ā ”ęsëp~’AßøÅā ”:Bß1ß%0ā ”ųVáØ$Lâî›ĨI $ß %[fā ”^Wä´Ÿx“ā ”°[âî30‘ßfĸšā ”ČSérhsDš95đéß´¸Ôüā ”lHŪY ˛&@âîˇŗ€čßÔ¸ ā ”lHßķ¸%=ā ”lHŪY ŋ&@ßLžLWā ”ôWáŖã|ëfdķ%ŪY@ķœ'đéážãĩëfdú%ëbufú]ŪíŪú9%ßK¨Ä˙ā ”˙čeėčAí%č@Gî%čœdī%ö6Ē1äÚÕ0ā ”^āļÄ%äÕdBWā ”WāļÄ%ŠGäuÖ-nƒā ”ƒāļÄ%ĩGß#×—ŧā ”]ŪOlœ'Ū‘3l°1ßrÕËđā ”^ŪOœ'Ū‘3°1ßkž˙ ā ”lHđ'éđ2éđ;éđDéߨ5 M ā ”]Ū`§~ü$߃\ g ā ”ų9ߐ¨v  ā ”ÂTßĩԐ Ī ā ”WŪOfœ'Ū‘3f°1ŪˇÎgœ'Ū g%ß-ÖŪ  ā ”ƒŪO/œ'Ū‘3/°1đMéáYé3 âîũŽŨ%î3’Ūü$äčE ] ā ”ÔaŪFH;ß1žl w ā ”lHߊž† ‘ ā ”lHßÛž  Ģ ā ”lHßĪhē Å ā ”ujáeéë Ū#_|:Ū$_5‘á}é Ū#b|:Ū$bĖ,ß~„ + ā ”+ ŨDß2„? [ ā ”†é__n cdƒ]á… é__aMĩ é__nMĩ…KGß<Ų“ ž ā ”puß{Ų­ Õ ā ”puë__x)‰Õ âî'‡)‹„ØEßĸįé  ā ” é__a*p é__b*p îFôFŲ6ß æ* B ā ”Ÿ†Ūįv)B EßĪėV y ā ”y é__a*p~ é__b*pƒ —EEŲ6á•é  éstr.*œ'ßmč¯ ē ā ”ē 7EßëÎ æ ā ”æ ë__x/Ģë OE[Eß;\˙  ā ” —6ß>Y ) ā ”) ģ6ßzY= H ā ”ę†ßZ\W b ā ” ß$Zq ‰ ā ”) ë__x);‰ Į6ß=ę Å ā ”ē ë__x/ķÅ âī__p/õiįUEt%Ú uy'!}Ę ß ö ITĘ ā ”ģ_évalsâ…|cÚ ę\ė/Z-Bā ”ē āļÄ%ßųvQ\ā ”\?G߁up{ā ”\ßŋuЕ⠔Iģ}ī…á‰ĶĩRļAāN´ˇŪ L =ĶŪÕ >Ø••á¸.CI u!i°Ač†0k uč:‡0k učD0l°AâæDc0s÷$áéCI u!i°AI_Tp)ļŪ†0 uŪ:‡0 uŪD0°AæAákržé__aMŞāAß˙ļ˛Õā ”Qŗé__n†đé__a†ÕB߃Åéôā ”mÍßgÅā ”mÍŪÜ/Ú(BßGÆ/:ā ”ßķŊITā ”lH} ßGp‘IT ā ”ģ_évals‘â…|cT߀ Ĩ°ā ”Vß%ĩŋ×ā ”dëkey_×Ē1áí‰ĩR"9āNK‚Ū L /ŪÕ 0[w[wßT-8ā ”ÅpßAG_ā ”vBŪÜRã_Ē1á\ŠëkeyyŠŪÜ/yĒ1Ē1t%¤uy':}”ßnĀáIT”ā ”ģ_évalsáâ…|c¤t%öuy'}æß•3ITæā ”ģ_évals3â…|cöáŪãQësrcĶœ't%auy'3}Qßŧ}žITQā ”ģ_évalsžâ…|caß(˛Íā ”ÍâîÄ`lHZH߸'áėā ”äGß’ûā ”QVŪ"°1ēäĄü%gā ”ų9âîÄ lHî|Á ;îß Á,îĸŗ Íߊ!všā ”÷@âîÄ€ lHî|Áƒ ;îߊ Ēéâīi‹ %đ¯éßâŧĪÚā ”lHß°Ĩéā ”ŒŪ› Ē+ĻßąŖā ”§€ßsŖ*5ā ”§€á)z{%u¨Råϛۆ Ļu¨Ū:‡ Ļu¨ë__f ĻĻ›ßÃŧ‰ ā ”lHâîxc–ü$î†įœ÷$î „Ą÷$î—ΰü$î|Á˛;îãėš%î%ģ÷$âīiŧ%âîßÁĒéâîâģŲ%߉ŋ/Gā ”lHŪÜ/3ü$äĒļŌYdā ”…FyÔ&ՉDÍô&ÚIT,¯E&7áoŊIT,čÜ/&ÚŊéos&Ú&7â|&öŗ¯EáŧéøIT,ŌæåéŪÜ/&Qøëos&Q&7¯Eáņé)IT,ŪÜ/&a)ëos&a&7¯Eá,ŌSŪÜ/&OSëos&O&7¯Eáę†IT,ŪÜ/&đ†ëos&đ&7ô¯EáúҰŪÜ/&̰ëos&Ģ&7¯EáSŅÎŪÜ/MίEá/ęIT1,IT2,ŪÜ/˜¯E¯Eá5ûWI_TpÛ9Ū†qķ9Ū:‡qķ9ŪDqí9âîŽ/xG á[ļYŗ{ü$I_IIí9I_OIí9Ū†í9Ū:‡í9ŪDí9âî8S†÷$á—Yŗ{ü$I_IIí9I_OIí9Ū†Ží9Ū:‡Ží9ŪDŽí9áĶJI_IIí9I_OIí9Ū†Čí9Ū:‡Čí9ŪDČí9á×>ŒCIí9!ií9č†0[í9č:‡0[í9čD0\í9áŨCIí9!ií9č†0kí9č:‡0kí9čD0lí9âæDc0s÷$á60CIí9!ií9I_TpÛ9Ū†0í9Ū:‡0í9ŪD0í90(:ávCIí9!ií9Ķt‰Ū†0'í9Ū:‡0(í9ŪD0)í9Ū"0*(:áļÚví9{í9Ū†ví9Ū:‡ví9ŪDví9ß×Xéôā ”ļ}ß˙ā ”e}Ė…áŠLĩRí9āNcŒŪ L LŪÕ Qß=Žepā ”eá^ûŧI_Tp%Ū†q–'Ū:‡q–'ŪDq|:âîŽ/xG áčYŗ{ü$I_II|:I_OI|:Ū†|:Ū:‡|:ŪD|:âî8S†÷$á$jYŗ{ü$I_II|:I_OI|:Ū†Ž|:Ū:‡Ž|:ŪDŽ|:á`¯I_II|:I_OI|:Ū†Č|:Ū:‡Č|:ŪDČ|:á?ņCI|:!i|:č†0[|:č:‡0[|:čD0\|:á’BCI|:!i|:č†0k|:č:‡0k|:čD0l|:âæDc0s÷$áÕCI|:!i|:I_Tp%Ū†0|:Ū:‡0|:ŪD0|:•Ŧ:áõCI|:!i|:͇“Ū†0'|:Ū:‡0(|:ŪD0)|:Ū"0*õŦ:áC?v|:{|:Ū†v|:Ū:‡v|:ŪDv|:ßā_NYā ”…~ߘhsā ”Úe}Ņ…áGŠąĩR|:āNv–Ū L ąŪÕ ļssßP˜ĘÕā ”Úeá‡û!I_TpV@Ū†q\@Ū:‡q\@ŪDqP@âîŽ/xG áu€Yŗ{ü$I_IIP@I_OIP@Ū†P@Ū:‡P@ŪDP@âî8S†÷$áąĪYŗ{ü$I_IIP@I_OIP@Ū†ŽP@Ū:‡ŽP@ŪDŽP@áíI_IIP@I_OIP@Ū†ČP@Ū:‡ČP@ŪDČP@á9?VCIP@!iP@č†0[P@č:‡0[P@čD0\P@á§CIP@!iP@č†0kP@č:‡0kP@čD0lP@âæDc0s÷$áPúCIP@!iP@I_TpV@Ū†0P@Ū:‡0P@ŪD0P@ú‘@áZ CIP@!iP@ĶlžŪ†0'P@Ū:‡0(P@ŪD0)P@Ū"0*Z ‘@áФ vP@{P@Ū†vP@Ū:‡vP@ŪDvP@átŠÜ ĩRP@āN[ĄŪ L Ü ŪÕ á SSßÔŊõ !ā ”lHá°ûL!I_Tpë@Ū†qņ@Ū:‡qņ@ŪDqå@âîŽ/xG áĢ!Yŗ{ü$I_IIå@I_OIå@Ū†å@Ū:‡å@ŪDå@âî8S†÷$á>ú!Yŗ{ü$I_IIå@I_OIå@Ū†Žå@Ū:‡Žå@ŪDŽå@áz?"I_IIå@I_OIå@Ū†Čå@Ū:‡Čå@ŪDČå@áj?"CIå@!iå@č†0[å@č:‡0[å@čD0\å@áŦŌ"CIå@!iå@č†0kå@č:‡0kå@čD0lå@âæDc0s÷$áŨ%#CIå@!iå@I_Tpë@Ū†0å@Ū:‡0å@ŪD0å@%#&Aá…#CIå@!iå@Ķ­ĒŪ†0'å@Ū:‡0(å@ŪD0)å@Ū"0*…#&Aá]Ī#vå@{å@Ū†vå@Ū:‡vå@ŪDvå@ß8¯Ū#é#ā ”“aßv¯ø#$ā ”“a᥊;$ĩRå@āNœ­Ū L /;$ŪÕ 0@$Q‚Q‚ßÎT$l$ā ”ŅiŪ35l$Ē1ßęo‰$Ą$!&å@ā ”’të__i āĄ$Q‚áΊį$Ļ`ņ@Cå@āNœ­Ū L 6į$ŪÕ 7ė$—tQ‚ß@m%%ā ”:të__n ÚkáŲûd%I_Tp°*Ū†qīCŪ:‡qīCŪDq5‘âîŽ/xG áÃ%Yŗ{ü$I_II5‘I_OI5‘Ū†5‘Ū:‡5‘ŪD5‘âî8S†÷$áË&Yŗ{ü$I_II5‘I_OI5‘Ū†Ž5‘Ū:‡Ž5‘ŪDŽ5‘áW&I_II5‘I_OI5‘Ū†Č5‘Ū:‡Č5‘ŪDČ5‘á›?™&CI5‘!i5‘č†0[5‘č:‡0[5‘čD0\5‘á9ę&CI5‘!i5‘č†0k5‘č:‡0k5‘čD0l5‘âæDc0s÷$áj='CI5‘!i5‘I_Tp°*Ū†05‘Ū:‡05‘ŪD05‘='$DáĒ'CI5‘!i5‘Ķ™ËŪ†0'5‘Ū:‡0(5‘ŪD0)5‘Ū"0*'$Dáęį'v5‘{5‘Ū†v5‘Ū:‡v5‘ŪDv5‘á‹(ĩR5‘āNˆÎŪ L (ŪÕ $(ЎЎßBĪ8(C(ā ”Ijá1‹{(ĩR5‘āNˆÎŪ L /{(ŪÕ 0€(ЎЎß7C”(Ÿ(ā ”Iqßø‚Ž(Æ(ā ”Quë__n JáÕâ(âîQmcß,Īņ(ü(ā ”ü(xDáZęa)ëstr¸a)Ūŗv¸%Ūđ$šz7âîØēcīposģhâîëĄŊĒ1áwęš)ëstr œ'Ū(í %âīiĸ%=ž)! –BŌ)!‘ķB%ķ%Ė)Ō)zCvž)áę*Ū}A*ŪD:Bš)âīsumC%âīiD'hAáĢęd*ëstrŗœ'âîņĄ´FÍâīpģœ'īchÃĸ'ážę‹*če*Ų'âãmsgÚįûöDA¯*čč^.n%č)ˆ.n%ßļEž*Ö*ā ”ŽRë__c3%÷¯*Ģœō*+øž*‘øČ*‘÷ÕJâ`œ!+++øäJ‘ųîœZ+ú$îûü‘‘ũCœr+‘+ū ”Íûü‘‘ũ]œŠ+ˇ+˙ ”Í‘€Ĩ! œĪ+Ũ+˙ ”÷@‘€ŋ! œõ+,˙ ”÷@‘÷*Kû*œ,),ø9K‘ßV8,C,ā ”b@÷),Î~œ_,i,ø8,‘ßzx,ƒ,ā ”b@÷i,MœŸ,Š,øx,‘ũžœÁ,Ī,˙ ”b@‘ũÄ)œį,ū,˙ ”%W‘ū,‘Hũí)œ-;-˙ ”%W‘;-‘%‘Hũ*œX-o-˙ ”%W‘o-‘HũD*œŒ-Ŗ-˙ ”%W‘Ŗ-‘Hũm*œĀ-×-˙ ”%W‘×-‘+Hũ–*œô- .˙ ”%W‘ .‘į9ũŋ*œ(.?.˙ ”%W‘?.‘n8ũč*œ\.s.˙ ”%W‘s.‘į9ũ+œ.§.˙ ”%W‘§.‘+Hũ:+œÄ.Û.˙ ”%W‘Û.‘Hũc+œø./˙ ”%W‘/‘HũŒ+œ,/L/˙ ”%W‘L/‘%‘Hũē+œi/€/˙ ”%W‘€/‘Hũ9Éœ/Ģ/˙ ”…X‘÷ūVčĘœĮ/Ņ/øW‘ũ­œé/÷/˙ ”Í‘ũŅœ00˙ ”Í‘á "60Ūž|iá9ũ‚ 0œN0Į0˙ ”ŠV‘‚{+#6 ƒG{ø<{‘# Ÿ„+#…V{>„+#…e{]‚0:ú(0›á'"ā0Ūž|ná9ũĄP*œø0q1˙ ”ŠV‘‚{[; ƒG{ø<{‘# Ÿ„[…V{Ž„[…e{͂Į0húŌ0 áA"Š1Ūž|sá9ũĀ€*œĸ1˙1˙ ”ŠV‘‚{‹@ ƒG{ø<{‘# Ÿ„‹…V{*„‹…e{Iá["2Ūž|xá9ũß°*œ022˙ ”ŠV‘‚{ģE ƒG{ø<{‘# Ÿ„ģ…V{‡„ģ…e{Ļ÷|ˆīāœŠ2ß2ø-|‘‚eä J ø)e‘# Ÿø)e‘# Ÿũeßœ÷23˙ ”ųV‘3‘Hũåßœ+3B3˙ ”ųV‘B3‘Hũáœ_3v3˙ ”ųV‘v3‘Hũ[ᜓ3Ē3˙ ”ųV‘Ē3‘Hß_Üž3É3ā ”đ÷¯3œđœå3ī3øž3‘€CĶ#œ4&4ū ”&4ä†3’f+4ø…Gn8÷ūJZ‚œL4V4øK‘÷}TBúœr4|4øŽT‘÷ŌV¨7œ˜4ĸ4øäV‘÷ĄUžÎœž4Č4øŗU‘÷ÍU]œä4î4øßU‘÷ūJ˛œ 5(5øK‘‡á\ ü‘‘÷ÕJ¯œD5b5øäJ‘‡á\ ü‘‘÷*KŪöœ~5œ5ø9K‘‡á\ ü‘‘÷}T§œ¸5Ö5øŽT‘‡á\ ü‘‘÷ĄUPPœō56øŗU‘‡á\ ü‘‘÷ÍUvœ,6J6øßU‘‡á\ ü‘‘÷ŌVĀÄœf6„6øäV‘‡á\ ü‘‘÷ūVÎLœ 6ž6øW‘‡á\ ü‘‘áĶęÜ6ITvëxS;߯Žë67ā ”)[āļÄ%ˆÜ6Š0vœ79øë6‘‰ü°H$x 7ƒ$ąúą‚P˜H$(ƒ‡˜ƒz˜úm˜/‚ž6R ŦúĐ6zŠ7ąlw I8ƒFą‹ذlŠƒį°Œd°l ƒs°ƒ‰°ú}°Œ/°p˛ƒ:°ƒR°úF°ÃŒ°pMšƒ°ƒ)°ú°ÃŽá\ ‰7ąˆw 9ƒFą‚ذˆŠƒį°d° ƒs°ƒ‰°ú}°î„/°‘˛ƒ:°ƒR°úF°°‘Mšƒ°ƒ)°ú°šá\ Ļö\ ÷Ü6аœ.9L9øë6‘ž7ŽËá\ ũ.ÜĐ!œd9Š9˙ ”đ‘%‘%‘ ‘č÷0N!UœĻ9Ā9øAN‘ûü‘‘÷0NɁ!œÜ9:øAN‘’0N ” :úAN‘Ž!á\ ˆRfXzNœ1:–:øaf‘økf‘„6ƒkfƒaf„6…zf3‹f0  úfjúfjˆŒfˇ¸PNœ˛:;ø›f‘øĨf‘„d6ƒĨfƒ›f„d6…´f‚‹fdPĄ úfšúfšˆÆfė: Nœ3;˜;øÕf‘øßf‘„´6ƒßfƒÕf„´6…îfŅ‹f´pĸ úfúfˆg&ƒđNœ´;<øg‘øg‘„6ƒgƒg„6…(g ‹fŖ úfWúfWˆ:g6f@Nœ5<š<øIg‘øSg‘„T6ƒSgƒIg„T6…bgo‹fT°¤ úfĻúfĻˆtgÅėNœļ<=øƒg‘øg‘„¤6ƒgƒƒg„¤6…œgž‹f¤ĐĨ úfõúfõˆŽgŧqāOœ7=¤=øŊg‘øĮg‘„ô7úĮg úŊg,„ô7…ÖgK‚fôĻ úfƒúfƒˆčgŧN0OœĀ=->ø÷g‘øh‘„D7úh¨ú÷gĮ„D7…hæ‚fD§ úfúfˆ"hę€OœI>ļ>ø1h‘ø;h‘„”7ú;hCú1hb„”7…Jh‚f”¨ úfšúfšˆ\h~¸ĐOœŌ>??økh‘øuh‘„ä7úuhŪúkhũ„ä7…„h‚fäŠ úfTúfTˆ–h;ß Oœ[?Č?øĨh‘ø¯h‘„47ú¯hyúĨh˜„47…žhˇ‚f4Ē úfīúfīˆĐh@p[œä?X@øßh‘øéh‘øöh‘„Œ7ƒöhƒéhƒßh„Œ7…i‹fŒđ˛ úfKúfKˆi?ĐTœt@ô@ø&i‘ø0i‘ø=i‘„ė0ú=i`ú0isú&i†„ė0…Li™‚fėģ úfÎúfΓ×m00œ A­Aúæmりm7ōú¸m „7…ÄmC ‰ôl7 XŽAúm ‚¤l7$úŊl øŗlō;A‚-mE XúŠę¨B ƒ.¨úD¨ ú8¨%„Bę§F ˛ƒõ§ú ¨8ú¨Tŋ§F MšƒΧúä§8úاTOá\ ß‘LLā ”ÅFë__s˙œ'ßC+LPLā ”“BŪp÷ąhë__nąh›íę eœ`QœĄ7í`QgUQžretîÄ6ˇ8ŸPžatī' hŸ đ€5a‰ģŽŅņMúԎŧúʎä‚õKŅŋúLŧúLäāhŠLč˜öŗMúBL4ú5L’ú+LÆŠ[NčĀŗŦMúNīútN’újNÆŠ‹IčāCĄMúšIƐ $$‘ŠâŽ øöįMúûŽ'úņŽTŠ3ˆö_NúBˆtŠqI@#&Nú€It‹LX#úL‰úLžš:wBüRu`ŠL@xķ÷NúBLąú5LĶú+LņŠ[N@ŗđNúN6útNĶújNņ‰‹I@CåNúšIņĶ$$‘VŠâŽX¨ķ+OúûŽ^úņŽČaŠ3ˆaĀķŖOúBˆ ŠqIaā#jOú€I ‹Ljø#úL^úLšš„wBüRud‰3ˆÕķPúBˆč‰qIÕ#âOú€Ič‚LÛ#úLũúL*šęwBüRud‰3ˆîö“PøBˆudŸ‰qIî#ZPø€IudŸ‚Lô#úL=úLjš wBüRu`Ė͉˜Œ°îįPú§Œ}‚XŒ°ŧƒ~ŒƒqŒúgŒ}„ĸ úBˆĖ‰qIĸ#Qú€IĖ‚LĒ#úLāúL ššwBüRu_Âö\ Ē1vĶå›;# ĀœËR††G;eQ †ß;'A†íŪ<'m os<&7‘Ą98=ë‘[0ĸi>'ŒPĸj?€5Ģ’cPa IWRú„PéúwPü‰Oa LRú"Oéi 9] t :$’—PŽ DŠRú¸PúĢP;ž :$’—P­ FŊRú¸PNúĢPzŊ :$a Q] –Ž_Đ XœãRĨSú¤_øŽ_úŽ_Ÿ—cPŨ p™WSú„PĖúwPę‰OŨ LSú"Oːæ 9] ö :$„ ƒŽ_ú¤_ŒcP —ø„P0ŸúwP+ :$ßÎĒ´SØSā ”ŌmāļÄ%âīit 0MnˆĨSŗŒtœôSdVø´S‘™,ŊT…ĘSC‰ôl 0^Túm‚¤l$úŊløŗlō T‰Gm  1 TúVm´‚¤l 6úŊléƒŗl‚-m* 0úœZ¤3ĘZ‘¤ŸsĘœ'‘„ (ŸGkËœ';‰T ŌöYú#TeúTz ‹]  .YĒ1Ļ>ũÔ'0 œänŗˆ-Z_Zā ”_ZŪ9‰ė8ŪæôŠ÷Ūr‹dZF;L;÷Z,@ %œ…ZŧZú-Zú7ZŽøDZ‘øQZ‘ ûe ü‘‘ ÷—up œØZëZøŦ‘øļ‘÷Ä ŗ œ[[øĶ‘øŨ‘÷bgF° œ6[l[ø!b‘‚øa´ Īøb‘#TŸøb‘#TŸáë…[Ū[—VzCũpšĀ *œ[ú[˙ ”ôW‘‚ëuË Õƒvøv‘#TŸ„Ë …"vÂ„Ë …1vá÷,bg đ œ\5\ø;b‘š ­AüP‘#T÷FbU  œQ\p\øUb‘š& ­AüP‘#T÷`b͇0 œŒ\Ģ\øob‘šF ­AüP‘#T÷zb…RP œĮ\æ\ø‰b‘šf ­AüP‘#T÷”b0p œ]!]øŖb‘š† ­AüP‘#T÷Žb @ œ=]\]øŊb‘šĻ ­AüP‘#T÷ČbS^° œx]—]ø×b‘卑AüP‘#TũČģĐ !œ¯]Ķ]˙ ”lH‘¤Ũ%‘‘č §ÃX@OHœ^@¨ĐX‘h¨] Ŗã›lPDœH^Ĩlhslœ'‘Ĩrhslœ'‘mČ] äë ¸Z^r^ā ”`Ūūõ¸r^9÷H^Ī Sœ“^_øZ^‘ød^‘‰`˛ēÅ^ú*` ‰Å_Õŧī^úŪ_d úÔ_Ą År] ‘Аëá\ ķö\ §éŦœu_‚ī_ É•`øū_‘‚Å_•Ū_øÔ_‘#Ÿ§sį“? œÖ_‚ī_$ Ε`øū_‘‚Å_'•Ū_øÔ_‘#ŸŖœ@Dœ`Ĩlhs5(‘Ĩrhs5(‘]Đ*Ŗ>œ.Dœ€`Ĩlhs.œ'‘Ĩrhs.œ'‘‚;YŖ 3úRYÖ úFYõ ­â] Ŗ^œBā0œÂ`ĨlhsB5(‘ĨrhsC5(‘ũ] Ŗ~œZ4œßaŠstr[ßa!œī&[äa4!XŸļV\€5T!ŸƒW]€5Š!Š_Yp\{aúnY¨!‹qIÛú€I¨!‹WI-úfI¨!Š_Y¨]ĶaúnYČ!‹qIČÛú€IČ!‹WIČ-úfIČ!Ž9`Ē1Ē1ßŪøa bā ”ÅFë__c-%âîC/v ›ëP!œĶfĨss{ b‘āČfžstr|Ķfč!Ÿß}0‘1"žend~0‘D"Ē3’€Ä6‘ŠÕãV|Ábúäãž"l(‰ŌSl}ũbúáSč!‚WIlúfIč!‰_Yo~cúnY˛"‰˜Œr€ecú§Œû"‚XŒrŧƒ~ŒƒqŒúgŒû"™Ž‚dežch‚œ'#‰ģŽ˜„ÕcúԎE#ƒʎ‚õK˜ŋúLE#ƒL¨h‹Žæŧ0†úĮæ]#ƒŊæ‹éaŧ0Éúb]#ƒøa0…b†#‰‹Iŧ/sdƒšI‚qIŧÕƒ€I‚WIŧ-ƒfI‰Nį2dúĻNĨ#úšNŊ#‰qIė3Ņdƒ€I‚WIė-ƒfIŠ×NîH3VeúđNÕ#úæNé#„ûúđNū#úæN$’œJūÕ3eƒĢJN׃ĻNúšN'$ßŠ3ˆ`ŠÜeúBˆ@$‰qI#Ŗeú€I@$‹Lx#úL|$úL¸$š1wBüRuc™=EfƒBˆ‰qI=# fƒ€I‚LD#úLö$úL#%šSwBüRuc‰3ˆSŠŊføBˆudŸ‰qIS#„fø€IudŸ‚LY#úL6%úLc%šhwBüRuc‹Âqö\ Ē1÷īæc€œôfgøį‘”&bßà g/gā ”`ŪVĘ)/g5ßŦCgYgā ”ę_ëp‹Ő÷g›kãœugHjøg‘ø!g‘‰īæ,ągúįv%$&b‰ŌS$,ígúáS•%‚WI$úfI•%ŠõK',KhúLŪ%úL&‰O'@hú"OŪ%-9] :hŠ3ˆ:¨,ÃhúBˆ&ŠqI:Č#Šhú€I&‹LCā#úLW&úL“&š`wBüRucŠ4gzø+oiúMgĻ&úCgÅ&Š3ˆ”ŽdiúBˆÚ&‰qI”#+iú€IÚ&‹Lœ(#úLø&úL'šÁwBüRvŦá\ ‰˜Œƒ+ģiú§Œ4'‚XŒƒŧƒ~ŒúqŒS'úgŒ4'‰3ˆÅ,3jøBˆudŸ‰qIÅ#úiø€IudŸ‚LË#úL'úLŽ'šÚwBüRuczr] ãö\ ßÔ{Wjojā ”Ędë__n ÚxĢĒ BœŠjˆk˙ ”2V‘ĨiĒ%‘‰eo˛ĢëjúwoÁ'‚°d˛Vúŋd((úŋd((Š‚oÄ@­kkú›oM(ú‘ow(ŠHjÄ`JHkúajM(úWjw(â$$‹zjÆxKƒ‰jú“jī(‚ _ĐŦÕ^ ßį…—k¯kā ”édë__n í‚Ģ2ŗđBœĘkČl˙ ”2V‘Ĩiŗ%‘‰6p´+lúHp)‚Īd[úŪdi)úŪdi)ŠSpļĢlúlpŽ)úbp¸)Šˆk¨JˆlúĄkŽ)ú—k¸)2$$‚pKƒpú(p0*‚ _ ĩ%^ ęĒ/Ųlîlā ”ÆEāļÄ%ĢOē@›œ mao˙ ”QV‘‚§¤Kˆģúļ¤C*‚{¤N…ŧƒФú”¤h*‚ũŖQžƒ2¤ú&¤–*ú¤Š*ÎŖQ—ƒîŖƒâŖ„QĄŖQ~ƒÁŖúĩŖ×*Œ€Ŗ`Āgú”Ŗ +ŒČl`Ā]úŲl +—3ˆ`ā/nnúBˆE+ŠqI`ø#5nú€IE+‹Lf #úLg+úLš+šąwBüR‘_—3ˆm( /ånúBˆ×+ŠqImH #Ŧnú€I×+‹Ls` #úLų+úL3,šĖwBüR‘_3ˆ/úBˆQ,‰qI#oú€IQ,‚L‡#úL,úL÷,š—wBüR‘_äĪsoˆoā ”vBāļÄ%Ģi/āœŖoÔs˙ ”QV‘‰§¤ëˆ0ūqúļ¤%-‚{¤î…ŧƒФú”¤J-‚ũŖņžƒ2¤ú&¤i-ú¤|-ÎŖņ—ƒîŖƒâŖ„ņĄŖņ~ƒÁŖúĩŖ›-Œ€Ŗ€ gú”ŖŅ-ŒČl€ ]úŲlŅ-—3ˆ  / qúBˆ .ŠqI¸ #Ķpú€I .‹LĐ #úL+.úL}.šQwBüR‘_—3ˆ č /ƒqúBˆ›.ŠqI  #Jqú€I›.‹L #úLŊ.úL÷.šlwBüR‘_3ˆ!/úBˆ/‰qI!#Ŋqú€I/‚L'#úLQ/úLģ/š7wBüR‘_‚:§s`1úI§é/‹§s@ ŧƒ§ú'§0‚ĻyWžƒÅĻúšĻ00ú­Ļ0aĻyW—ƒĻƒuĻ„yW4ĻyW~ƒTĻúHĻC0ŒĻˆX gú'Ļy0ŒaoˆX ]úsoy0Š3ˆˆx ĪWsúBˆą0ŠqIˆ˜ #sú€Ią0‹L° #úLé0úL#1šĖwBüR‘_‚3ˆ›ĪúBˆA1‰qI›#’sú€IA1‚LĄ#úL}1úLĪ1šąwBüR‘_Ģ’7đ`œīsct˙ ”2V‘Đ ži8%ũ1Šeoûđ 8Wtúwo2‹°dûđ VúŋdR2úŋdR20ojũDPBœ{tdu˙ ”ŠV‘‹{R , ƒG{ú<{w2 …V{Ŧ2 …e{Ë2‰ŨojDuúčoí2„púčo3ŠÃop( _&uúŌoE3|Ôs‚Šos_ú¸o3‚§z„úļze3ũc Bœ|uIv˙ ”ŠV‘‹{ĸ@ 1 ƒG{ú<{}3@ …V{˛3@ …e{Ņ3‰öoē)vúpķ3„Āúp4‰ŠoÃdvú¸o4ĖÔs‚§zÔúļzK4ũšđDœavFw˙ ”ôW‘‹ëuōX Ńvúvc4X …"v™4X …1v¸4‰­{ &wú¸{Ú4„ ú¸{í4‚“{ Lúĸ{í4‚y{ #úˆ{í4du‚xt&ú‡t5ũ2š@Dœ^w'x˙ ”ôW‘‹ëuBp Ęƒvúv5p …"vN5p …1vm5‰Æ{ZxúŅ{5„` úŅ{ĸ5‚y{` Qúˆ{ĸ5idu‚xtvú‡tĩ5áÆ,@xŪ3’@@xn8ĢąE4œ`xŗxū ”2VÍ5‹¯y›ˆ Fƒ×yúĖyė5ˆ …æy6ˆ …õy<6áŨ,ĖxŪ3’JĖxn8ĢĐOĐ4œėx?yū ”2Vˆ6‹¯yÛ  Pƒ×yúĖy§6  …æyĖ6  …õy÷6÷eoiŨœ[y‘yøwo‘‚°dVøŋd‘# Ÿøŋd‘# Ÿ÷6púÖ0œ­yãyøHp‘‚Īd4 [øŪd‘#,ŸøŪd‘#,ŸßŅ´ōyũyā ”ũy @ß–zzā ”Í÷zŠ=@Šœ8z=€øz‘ŠãyX¸ d€úōyC7’˜ŒX¤Ģzú§Œ–7‚XŒXŧƒ~ŒúqŒ8úgŒ?8’˜Œ_¤özú§Œã8‚XŒ_ŧƒ~ŒúqŒ8úgŒ?8’˜Œh¤A{ú§Œ`9‚XŒhŧƒ~ŒúqŒ8úgŒ?8’˜Œo¤Œ{ú§ŒŨ9‚XŒoŧƒ~ŒúqŒZ:úgŒ†:’˜Œv¤×{ú§Œ;‚XŒvŧƒ~ŒúqŒš;úgŒÆ;’˜Œ}¤"|ú§ŒP<‚XŒ}ŧƒ~ŒúqŒÍ<úgŒP<—vSĄØ ¨X|øSŸú…Sų<ąū’vSļ Š‹|úSi=ú…S=Áū—vSĐø Ģž|úS×=ú…Sī=Ûū’vSā Ŧņ|úSR>ú…Sj>ëū—vSú Ž$}úSĀ>ú…SØ>ū—vS6( ´W}úS;?ú…SS?Aū’3ˆZ¤Î}øBˆs4Ÿ‰qIZ#•}ø€Is4Ÿ‚L`#úLļ?úLã?šowBüRuw’3ˆo¤E~øBˆsŸ‰qIo# ~ø€IsŸ‚Lu#úLö?úL#@š„wBüRuw’3ˆ„¤ŧ~øBˆsŸ‰qI„#ƒ~ø€IsŸ‚LŠ#úL6@úLc@š™wBüRuw’3ˆ™¤3øBˆsŸ‰qI™#ú~ø€IsŸ‚LŸ#úLv@úLŖ@šŽwBüRuw’3ˆŽ¤ĒøBˆsŸ‰qIŽ#qø€IsŸ‚L´#úLļ@úLã@šÃwBüRuw3ˆÃ¤øBˆsŸ‰qIÃ#äø€IsŸ‚LÉ#úLö@úL#AšØwBüRuwXr] áá\ éö\ ßį´L€a€ā ”ũyāļÄ%ßép€…€ā ”ÍāļÄ%÷a€‹!đ+œĄ€Ą‡øp€‘Š=€ @ iŒ‡úL€6A—vSX Ŋü€úSTAú…SŽA7ū’vS< ž/úSļAú…SãAGū—vSUx ĀbúS Bú…SEB`ū’vSe Á•úSmBú…SšBpū—vS~ ÃȁúSÂBú…SüB‰ū—vS¸¨ ÉûúS$Cú…S^CÃū—3ˆĪĀ šr‚úBˆ†C‰qIĪ#9‚ú€I†C‹LÕØ #úL¨CúLĘCš@wBüRuw—3ˆÜđ šé‚úBˆčC‰qIÜ#°‚ú€IčC‹Lâ #úL DúL,DšPwBüRuw—3ˆé š`ƒúBˆJD‰qIé#'ƒú€IJD‹Lī8 #úLlDúLŽDš`wBüRuw—3ˆöP š×ƒúBˆŦD‰qIö#žƒú€IŦD‹Lüh #úLÎDúLđDšpwBüRuw—3ˆ€ šN„úBˆE‰qI#„ú€IE‹L ˜ #úL0EúLREš€wBüRuw—3ˆ° šÅ„úBˆpE‰qI#Œ„ú€IpE‹LČ #úL’EúL´EšwBüRuw’3ˆ”š<…øBˆs4Ÿ‰qI”#…ø€Is4Ÿ‚Lš#úLŌEúL˙EšŠwBüRuw’3ˆŠšŗ…øBˆsŸ‰qIŠ#z…ø€IsŸ‚L¯#úLFúL?FšžwBüRuw’3ˆžš*†øBˆsŸ‰qIž#ņ…ø€IsŸ‚LÄ#úLRFúLFšĶwBüRuw’3ˆĶšĄ†øBˆsŸ‰qIĶ#h†ø€IsŸ‚LŲ#úL’FúLŋFščwBüRuw’3ˆčš‡øBˆsŸ‰qIč#߆ø€IsŸ‚Lî#úLŌFúL˙FšũwBüRuw3ˆũšøBˆsŸ‰qIũ#R‡ø€IsŸ‚L#úLGúL?GšwBüRuw(á\ ö\ ÷a€ƒ™ œŊ‡ۇøp€‘.…€Ž;á\ ÷×mÎ$@œ÷‡ˆúæmRG‡Oô@üP‘ũz `/œ-ˆވ˙ ”ŠV‘Ĩii %‘⠟áSj %qG‚nlj ˜@nø5n‘ø*n‘#Ÿ‚”es/ƒŖeƒŖeũų /œÆˆG‰˙ ”÷@‘Ĩip %‘ø ŸáSq %„G‚nœq ˜@nø5n‘ø*n‘#Ÿ‚”eŖ/ƒŖeƒŖeáŧ`‰Ūž|ËÛ9ũZ!Ā>œx‰Š˙ ”÷@‘‰T§Ø › ų‰ƒ|§úq§—G‚Ø|Ø (ƒ}ƒ}úõ|ŧG‚G‰ā ŦúR‰ûGņˆoŌˆo÷ße#p$œ ŠeŠøîe‘„…úe3H‹”eĨ úŖeRHúŖeRH§3Zvd0œ‡Šø>Z‘§’YõvP(œŪ‹øY‘('‹…ŦYjH‰ŌSU ūŠøáSŸ‚WIUøfIŸ`ž`ŗ`Č^HĶ‹úYˆHHŦŦYHŦģY…ČY›H‰yYĐ# Š‹ø„Y?ŸŨķ;ė^^^+^@^U^j^j`›5ë€÷œ;¤ņĄ= FÍ‘Šfmt= œ'ŽHm`ŸQ> ”“ÍHĒeÉD ÷$ȟá+F ÷$I‰ ZĖe ƒŒú&Z\^ Ė"] č"] r^ N’YaŒ^ ũŧ߀,œSˆ˙ ”ųV‘ˆ‘Ū‹›œ^ ŽŦ´^ HũÛā°,œĨڍ˙ ”ųV‘ڍ‘ŋŪ‹Ëœ^ ŽÜ´^ Hũ7āāDœ÷gŽ˙ ”ųV‘¤ž|Ö gŽ‘‰€ZôØ HŽú˜ZÂIú‹ZîI"] ôŪ‹ ] Ž$´^ į9›Që0ĶœŌ¤ž|p Ō‘ˆŸÕŠq 0‘JŸ¤Cr 0‘!JЧ`:¨q 0úļ`?J‰n`:|÷Žú}`jJ‚ŌSE}úáSŸJ‚WIEúfIŸJŠÁ`GČr ¨úĐ`ÁJŠn`Gđ„oú}`ėJ‚ŌSY …úáS!K‚WIY úfI!K‰"] ¨"] ž"] Ô"] į9ßäēæ ā ”ôWëiJ%âîáSK%§R|9ŅxœÎ’ø]|‘ސ…l|4K‹ß{( øî{‘‹Fb(iúUbGKš1­AüP‘\#T„C=ƒ]|„C=Ŧl|„C=…{|uKŠ8|CH $‘úG|ŦK‹bCHZú!bĀK‹øaCHĪúbâKúbâKhŦˆ|Šų{`€ ߑú| Lú|+L‹׏`€•úđ Lúæ?L€…ũVL‚n“Kú@n—Lú5n Lú*nŦL‚”e“/ƒŖeƒŖe™ĀĀŋ’…—|ĮLŠ|Ā˜ 1’ƒ-|‹eĀ˜J ƒ)eƒ)eČ…¤|ņL‰Šoü a’ú¸o%M‰Ão˙  ‹’úŌoNM ÔsņˆG Ū‹Z "] b lސn ] šduß-ÉŨ’ô’ā ”MfčâĸŽíÂũ¯ “œ “ؔ˙ ”)[‘¤FH€ ;‘āži 'ˆM‰fĨ  h“úf§Múf§M‰&fĀ ‚ ’“ú5fŧMú?fŅM‹>Čā ƒ ƒWČúMČũM‹Βā ~úį’/NúŨ’ũM’pĮ⠐”•‰ĮøĮōēŒßĮį ‘ƒČƒ ČƒüĮ‹Įį ŌƒHĮƒ;Įƒ.Į‹†Æį ˛úĮÆQNúēÆoNú­ÆN …ÖÆ¸N‹Æį ŒúFÆQNú9ÆoNú,ƍN …UÆØN!É^ ßŨį”˙”ā ”yCŪŸģ œ'÷ؔA0!‡œ•–øį”‘øņ”‘‰ŌSR! i•úáSūN‚WIR!úfIūN‰3ˆ˜! ߕøBˆsŸ‰qI˜!#¨•ø€IsŸ‚L !#øLVúL0OšŽ!wBüRv‘R!w!ë^ ƒ!´^ !_ ˇ!ö\ ›ĄŨĀ!ōœw™Ĩstrr w™‘8l™ĒĄ7s Ä6‘‰˜ŒÉ! s ™–ú§ŒCO‚XŒÉ! ŧƒ~ŒúqŒWOúgŒCO‰‹IŌ!t š–úšIxOPø˜žitu ĪŒOŠôâ!pu —úŽäO‹WIâ!prúfIäOŠ(Žø!v K—ú3ŽP‹ÅZø!¨Ķ úĐZPŠYŽ"Ču k—úhŽ7PŠ?Ž"ču ‹—úNŽWP‹éa#"w úbPƒøa…b¨P‰‹I#"/˜ƒšI‚qI#"Õƒ€I‚WI#"-ƒfI‰NQ"22˜úĻNÆPúšNîP‰qIV"3f˜ƒ€I‚WIV"-ƒfIŠ×N["3ë˜úđNQúæN$Q„€"úđNFQúæNYQ’œJ€"ÕȘƒĢJNŠ"׃ĻNúšNnQF"™’" a™ƒBˆ‰qI’"#(™ƒ€I‚Lš"#úL†QúLŗQšŠ"wBüRugâ!˛"ö\ Ē1›ŪĀ"{œŌš¤áėŽ &7‘¤13¯ œ'‘„Ë"lŸMY° œ'ÆQ‰cPË"ą šø„PęŸúwPRÛ":$™ā"Dšîŗ 0‘‰cPđ"ˇ Qšú„P3RúwPKR#:$Š*I#0ŗ ˆšøIIôŸúėP.<œŧļ‰lh. 1Ģļúlåcq.§_ Y.Ŋ_ ‘ƒ.˛ާ.œ§ųmž .œ ˇø(ų‘‚vSŖ.døS‘ø…SŸą.ū›NėĀ.œpˇĨptr×]‘¤3’×ī‘‘„Ã.ĒũŽØ%‘x§ – ā.œ°ˇ„ã.¨ ‘x¨$ ‘wō. ˇ÷„‹„/œĖˇ¸ø•‹‘„/ ŦĄ‹^/ „•"^/ú^øc/Č_ ÷¯í6 /œ/¸Ŗ¸øĀí‘„#/¨Ė푘5^#/ÔúM^ dú@^Ud‚ S#/Īú?S dú2SUd5/å_ °ZŸÚ@/5œŊ¸yš˙ ”°[‘„C/,ŗ3’Ûü$jdĄÍøâyš‘Ą(oî™â‘˜’5^C/ī\šúM^‰dú@^Ņd‚ SC/Īú?S‰dú2SŅdU/å_ YS^/ đúdSæd95°–Ÿø€/œ˜šöš˙ ”°[‘_Y€/˙ønY‘‚qI€/Ûø€I‘‚WI€/-øfI‘÷fŦJ / œēNēøx‘„ / ¨„‘‚[^Ļ/ øf^‘÷ī‹[°/œjēāēøŒ‘‹ėS°/Ø(øûS‘‹‹I°/Ø6øšI‘‚qI°/Õø€I‘‚WI°/-øfI‘ĢŸ@Đ/=œûē5ģ˙ ”°[‘đŸ3’I%üdä/` Ž 0Ŗ¸Ģԟ_0ŊœPģ÷ŧū ”ČSežsrcdœ'EeŸđ$eõCpeŸ\If°*še‰ŌS0`ĶģúáSÃe‚WI0úfIÃe‰_Y20gķģúnYųeŠq^0(ywŧúŠ^fú€^7f‹’ŗ0(3úĢŗfúĄŗ7fŠO0@}kŧú"Ofœ09] §0O‰q^ļ0a×ŧøŠ^Ÿú€^Vf‚’ŗļ03øĢŗŸúĄŗVfÆ0O00 ` F09` Žļ0W` ßKŊŊā ”ČSčãŠ@ŊĒ1´åeĐ0đœ ŋXŋĩcwdn ŋ‘ß_—÷ŧ11˜o˙ŊúŊufúŊũf’3ˆ§1@îŊøBˆV‰qI§1#´Ŋø€IV‚LŦ1#úLIgúLxgšž1wBüRuß_‘:1B15ģ—3ˆB1¸owžúBˆ‹gŠqIB1Ø#=žú€I‹g‹LN1đ#úLágúL!hšs1wBüRuß_’3ˆ1&oīžúBˆqh‰qI1 #ĩžú€Iqh‚LŠ1#úL‡húLļhšœ1wBüRuß_1l` ‘11Ĩ1ö\ t%ŋļy'°Ąž–Ā1Ęœ7ŋ™Á˙ ”°[‘ŽÁŗ&—0‘Éh’„‹Î1 —ēŋú•‹įh„Î1 ŦĄ‹^Î1 „•"^/ú^Mi×1Č_ —÷ŧô1(˜jĀúŊaiúŊÉi’3ˆr2@YĀúBˆ-j‰qIr2# Āú€I-j‚Lw2#úLLjúLyjš†2wBüRus‘û125ģ—3ˆ2H˜áĀúBˆŒjŠqI2h#¨Āú€IŒj‹L 2€#úLÄjúLķjšH2wBüRus’Y‹ 2 ˜Áúr‹kúh‹Įú€IHr‚LY4#úL[rúLˆršh4wBüRut‘Đ3Ø35ģ—3ˆØ3ČŠ˙ĮúBˆ›rŠqIØ3č#ÆĮú€I›r‹Lá3#úL×rúLsš4wBüRut’q^ø3§XČúŠ^Qsú€^is‚’ŗø33úĢŗQsúĄŗis 4O’3ˆ44 ŠĪČúBˆ‰s‰qI44#–Čú€I‰s‚L:4#úLžsúLËsšI4wBüRuo’3ˆn4ĨFÉøBˆutŸ‰qIn4# Éø€IutŸ‚Lt4#úLŪsúL tšƒ4wBüRuo‘Ē3R4ö\ ĢƒžU4˛œsÉ#Ė˙ ”°[‘‰ī‹ž4VĘúŒt‚ėSž4(úûSt‚‹Iž46úšIt‚qIž4Õú€It‚WIž4-úfIt‰Y‹ą4 X@Ęúr‹Ttúh‹st‘ģ4‰LĐ4 XwĘúBL†t•5Lú+LÉt‘Ũ4Š÷ŧŨ4X(ËúŊčtúŊ u’3ˆ*5@ËúBˆVu‰qI*5#ŪĘú€IVu‚L/5#úLuuúLĸuš>5wBüR‘o‘æ4î45ģŠ3ˆî48X ËúBˆĩuŠqIî4P#gËú€Iĩu‚L÷4#úLČuúLõuš5wBüR‘o‰3ˆ 5 XĖúBˆv‰qI 5#ßËú€Iv‚L5#úLvúLJvš5wBüR‘o(5ö\ ĢŸ/P5ęœ>ĖxĪ˙ ”°[‘hmĪĒŋ…8 ‘X‰ī‹^50õĖúŒ]v‚ėS^5(úûS]v‚‹I^56úšI]v‚qI^5Õú€I]v‚WI^5-úfI]vŠɋĢ5ˆ8ˆÍúڋ“vŒ3ˆĢ5¨;úBˆĻvŠqIĢ5Č#NÍú€IĻv‹L´5ā#úLŪvúLķvš6wBüRu_‰ɋÍ59Îúڋw3ˆÍ5;úBˆw‰qIÍ5#áÍú€Iw‚LĶ5#úL&wúL;wšá5wBüRw‰ɋ69ŽÎúڋNw3ˆ6;úBˆNw‰qI6#tÎú€INw‚L 6#úLcwúLxwš6wBüRw™#6:ĪøڋudŸ3ˆ#6;øBˆudŸ‰qI#6#Īø€IudŸ‚L)6#úL‹wúL¸wš86wBüRu_‰5Ŗ¸ĸ5XɐĢ5åĐÄ5#ːņ5āē!6ö\ °Ũžw@6ˆœ’ĪÉÔ˙ ”°[‘ąōwœ'‘øžÔĄJAx\F‘X——­^6 xŌĐúĘ­ËwúŊ­x ŦŨ­ŠõKk6@y YĐúLåxúLAy‰Ok6 NĐú"Oåxs69] €6h™O7ĘĐúBˆ´y‰qIO7#‘Đú€I´y‚LU7#úLÉyúLöyšd7wBüRu_‘j6X?ŅúBˆ zŠqI€6x#Ņú€I z‹L‰6#úLŽzúL{šH7wBüRu_—_Y§6¨{^ŅúnY/{’Lĩ6{—ŅúBL[{ú5L|{ú+L/{‘Á6—÷ŧÃ6Ā{CŌúŊ¨{úŊ×{’3ˆ˛7@2ŌøBˆW‰qI˛7#ųŅø€IW‚Lˇ7#úL|úL-|šÆ7wBüRu_‘Ę6Ō65ģ—3ˆŌ6ā{ēŌúBˆ@|ŠqIŌ6#Ōú€I@|‹LÛ6#úLb|úL„|š87wBüRu_—3ˆâ60}1ĶúBˆĸ|ŠqIâ6P#øŌú€Iĸ|‹Lč6p#úLÄ|úLæ|š#7wBüRs—Y‹7ˆ}`Ķúr‹}úh‹}‘ 7™d7ŋĶúBˆ+}‰qId7#˜Ķú€I+}‚Lj7#úL@}úLU}’3ˆ€7}6ÔúBˆh}‰qI€7#ũĶú€Ih}‚L†7#úL}}úL’}š•7wBüRu_’3ˆ™7{­ÔúBˆĨ}‰qI™7#tÔú€IĨ}‚LŸ7#úLē}úLį}šŽ7wBüRu_‘^6 6Â`z7ö\ Ļ ŲÂĐ7œę‚–ŒîÔÕā ”ÕāļÄ%ž1÷ŨÔ¸Wā77œ$ÕLÕøîÔ‘ú7‡` 8‡` Ž8 ` ´ū–™ 84œ¤Õ str™œ'‘ re™¤Õ‘„'8)ĄūžœĮ•‘hH8ŗ` ¤1§˜^ Đ`84œ&ÖøĨ^‘øą^‘™g8čÕŦž^„o8!úą^ú}úĨ^~„o8!¨ž^‘hˆ8ŗ` á] QÖŲ!%ņ(ŪĘn4QÖˑß'ũeÖ}Öā ”Jë__c ģ%ˆ_†9 8–œ™Öë×ø&_‘Šį^¤8 ņĢ׃_ƒö^Œ&Ö¤8 qƒCÖŠVÖŠ8Ā5uוoÖ ƒeÖŠ‰…˛8ā ŧ%×ú…-~69t$‹gRļ8ø ŧú€RK~úvR_~„đ8.ú€R}~úvR‘~ų8ņE‰ąÎ85Ÿ×úá…¤~Ö8›<Î8š<„9ú&_ˇ~‰ _,9ôßא19^ ,9´^ ˇ;ĐW@9œ&ؤˇÎWĄD‘R9î` Ž_9a ˇ!Đ]`9|œáؤˇÎ]ĄD‘ŸyŊ^€5Ë~ŸJ°_õCé~Ÿfa'Ÿk?b'1Ǥm\F‘s9ëא}9 ` Œ9î` ­9$a ‘Æ9Î9W` ßĐđØ!Ųā ”!ŲâîˇÎAЍî¤B\FâƒBˆ›DßæĪ5ŲJŲā ”!ŲāļÄ%v›D›yėā9ŅœpÛ¤p„JŲ‘(eÛǤ…\F‘ŠáØņ9@…¸ÚúđØP@…üØcŦ Ų‰ÜZ :AûŲøôZRŸúįZŒ0:B_ Š@Œ;:`C%ÚúKŒ A:]_ ™’:ŽÚƒBˆ‰qI’:#UÚƒ€I‚L™:#úLžúL뚨:wBüRug:´^  :Ia :da ;:&ØŠ&ŲJ:x‡ZÛú5ŲūŠ3ˆU:4OÛúBˆ€ŠqIU:¨#Ûú€I€‹LX:Ā#úL>€úL`€š:wBüRugU:za n:á\ ą:ö\ ›“ėĀ:œÛĶ:PŲ§ ø ā:œ˛Ûķ:PŲ›Ŗė;}œÆŨ¤O)Ģ˜7‘‰°I;J­ģŨúŋI~€‰ī¨;4¨Ũƒ$ŠúŠ‘€ú Ф€;4—ú⍑€úÔ¨¤€„;4ÔI;4~úôI‘€účIˇ€ŒŸ¨/;āgúŗ¨‌3ˆ/;ā]úBˆ qI/;#ĘÜú€I​L4;ø#úLúLTšG;wBüR‘_‚/ŠS;Šú>Šr¨S; ƒ.¨úD¨…ú8¨Ą„S;ę§W; ˛ƒõ§ú ¨´ú¨Ёŋ§W; MšƒΧúä§´úاЁ`;á\ l;á\ ĻõĶ,:€;œá\#3Ūč†GNeQčíŪN'éosO&7âæ,S€5æęT€5âæFY_€5›ž;¤œ)āą†GneQ‘ąíŪn'‘ oso&7‘ŒÚŨŸ;púũŨãúņŨ‚úåŨC‚¸ Ū„¸Ū@’ŅPŸ; QčŪúęP‚úāPぐŠ;č<’cPŠ;Qßø„PTŸúwPm‚š;:$™Ä;9Áß…$Ū€‚’cPÖ;]ißú„P§‚úwPŋ‚æ;:$šÖ;kQßüP‘üR0üQ@šú;kQüP‘üR ‘? ūüQ ‘‘? ū—cPũ;(bāú„PĶ‚úwP낇<:$ü‘iü‘1š/<kQüPwüR0üQsēô,@<„œå os:å‘ą3’: å‘’;_V<@°āúJ_ƒŌSV<XúáSLƒ‚WIV<úfILƒ’U_m<<>áúd_ŽƒėSm<MúûSă‚‹Im<6úšIă‚qIm<Õú€Iă‚WIm<-úfIă—cP~<@<âú„P„úwP1„‰O~<áú"Og„‹<9] ™H=( âú„P†„úwPš„‹=PJ=XúVP­„úLPÁ„’PR= ˜âú0P­„ú$PԄ_=ũš<:$’cP<LÁå>^ >"] Œzj>HOø‰j‘ø“jR÷ĄjÚF >œ æ8æø˛j‘°d$>Tøŋd‘øŋd‘ęī@Iæ^æā ”SāļÄ%÷8æČŗCœzæįøIæ‘—3ˆ`@úæúBˆzˆŠqI€#Áæú€Izˆ‹L˜#úLŦˆúL؈šAwBüR‘o2L@úAL÷ˆ‘-ßH+įWįā ”WįāļÄ%āŊŦ\įë__mø8Û4Lv… ߎ vį•įā ”•įāļÄ%āŊŦšįaįLߌDŽįÍįā ”MāļÄ%āŊŦÍįLä üäįīįā ”ģ_÷Ōįí.@>Ŧœ č†ęøäį‘ŠįS>°Ũé•Iįú+į‰Š S>ā`čúY‰‘`>Šgį`>  éúŠįωúvįĮ‰ŠŸį`>H #?ščƒÂįúŽįĮ‰Ņ> ũŠ MÖ>p #?éčƒ/MúM˙‰ö> ũ‚ÔLÜ?#?ƒ÷LøãLSŠ-?ˆ  éúFZŠú<zŠ—ķŒ?¨ cXéúzŠ‘Z?˜Œh?cú§ŒĮŠ‚XŒh?ŧƒ~ŒúqŒ‹úgŒĮЉaL›?ÆéúpL,‹‘Ģ?x? ũ‘Į?‘Ô?Š|x?Č ęú•A‹ú‹n‹Šš{?ā ’gęú⍎‹ú֍¤‹ŒķQ{?ø $ŌúRĪ‹ú Rė‹ø …RŒS>r] ŗ?á\ ģ?ö\ ēšėđ?īœĢđ¤áfĢđ‘¤M?œ'‘¤ņĐœ'‘ ¤cœ'‘! đŸaYœ'Œģmsgįû‘\ŠT`ų?0!}ëúc`JŒŠ`ų?P!Dëú*`jŒ‚ŌS@úáS’Œ‚WI@úfI’Œ‰ˇį!@čëú×į´ŒúÍį܌„!@…|cŒcP$@h!ƒú„P´ŒúwP 7@:$ŠŽ_:@€!ėúŽ_.ú¤_Ļ—cPB@ !™nėú„PՍúwP草OB@ cėú"OՍK@9] \@:$Ā!ƒŽ_ú¤_ސ|AcPŠOč\@Ø!ķėúoč-ŽƒečØ!…|cŒcPb@đ!ƒú„P-ŽúwPUސu@:$ŠŽ_x@"›íúŽ_uŽú¤_͎—cP€@("™yíú„PüŽúwP‰O€@ níú"Oüސ‰@9] š@:$H"ƒŽ_ú¤_?œAcPŠēéĨ@`" îúÚéTúĐél`"…|cŒcP¨@x"ƒú„PTúwPģ@:$ŠŽ_ŧ@˜" 6îúŽ_ąú¤_ɏĖ@cPŠ&éĖ@¸" ™îúFéŪƒ<鍸"…|cŒcPŌ@Đ"ƒú„PŪúwPöâ@:$‰Očå@ īúočúeč>„å@…|cŒcPč@č"ƒú„PúwPmû@:$ŠŽ_ū@# ŦīúŽ_ú¤_՗cPA#™Šīú„PôúwP‘‰OA īú"OôA9]  A:$8#ƒŽ_ú¤_7‘ŧAcPŠīæ#AP# ÖīúįL‘1A&bŠMį1Ah# 7đú^įn‘Œk1A€#Uúkn‘‹åj1A˜#úūj‘úôjn‘‰MįÁA •đø^įudŸkÁAUøkudŸ‚åjÁA•ūjøôjudŸ!@īįßAö\ 9ēâė圓ķœaėœ'¤‘œĀíœ'鑝°#ˆķĒ-Bîįû‘\‰nķ#đFņúŽķ0’ú„ķH’„#…|c3cP‰&é?đŒņúFé[’ú<és’„?…|cQcPŠOčTČ#ôÎņúo膒úečž’Č#…|cgcP‰Āķvōōúāķú’úÖķ“„v…|c†cP‰&éˆôZōúFé'“ú<éO“„ˆ…|cšcPŠīæœā#ö„ōúįb“Ĩ&bŠMįĨø#öåōú^į‘“ŒkĨ$Uúk‘“‹åjĨ($úūjĀ“úôj‘“‰MįŋöFķú^įā“kŋUúkā“‚åjŋúūjõ“úôjⓐīįš?ËRmķüPwüRsštËRüPwüRuTÛö\ á-ĩķéosčĩķésbčēķŧ15v˙´ēūėāA$œ˛˙¤%Ô˛˙‘ĨstrÔœ'‘¤Ü/Ôŋķ‘@$§˙ģendÖ°*‘PŸ{9ס˙ ”Ÿ3’æ"íO”x$ĀųģmsgÜįû‘TŠH꥗cP-F°*™hú„PvĄúwP‰Ą‰O-F ]ú"OvĄ6F9] GF:$Đ*ƒŽ_ú¤_šĄ¤FcPŠMįWFč*„ëú^įÎĄŒkWF+UúkÎĄ‹åjWF+úūjđĄúôjÎĄ‰MįĻF„Iø^įudŸkĻFUøkudŸ‚åjĻF•ūjøôjudŸ÷EސFīįWFÅķÄFö\ ējíĐFtœa œšŧÅœ'ĸ0+V ĒeÆ\F‘Xǝ|Éįû‘\‰ŌëæFĮ3øōë7Ÿúčëbĸ„æF…|cŒcPéFX+ƒø„P7ŸúwPĢĸüF:$ŠŽ_˙Fp+ĮŒúŽ_Îĸú¤_öĸˆ+ƒŽ_ú¤_LŖŨGcPGcPŠīæG +Į˛ƒį)G&bŠMį)G¸+Įú^įaŖŒk)GĐ+UúkˇŖ‹åj)Gč+úūj¤úôjˇŖ,žiĘ',¤Š_YKG,Ę„únYK¤‹qIKG0,Ûú€IK¤‹WIKGH,-úfIK¤Šũ`G`,ËŽú*ũ`¤mGa ‹œcmGx,˃ŧcú˛c‚¤x,…|cŒ—PvG˜,ƒú¸P—¤úĢPǤ‚G:$ŠīæG¸,Î8úįŊ¤œG&bŠMįœGĐ,É™ú^įų¤ŒkœGč,Uúkų¤‹åjœG-úūj5Ĩúôjų¤Š3ˆ˛G-ÎúBˆUĨ‰qI˛G#Øú€IUĨ‹L¸G0-#úL‘ĨúLÍĨšęGwBüRud‰3ˆöG ΉúBˆ ωqIöG#Pú€I Ļ‚LüG#úL ĻúLMϚ HwBüRu_‰MįHÉęú^į`ĻkHUúk`Ļ‚åjHúūjuĻúôj`Ļ™-HA ø^įudŸk-HUøkudŸ‚åj-H•ūjøôjudŸæFīįKGīįHö\ ›íPHjœv ¤šŧūœ'‘¤ ūü$‘H-ǝ|˙\F‘lîˆĪ0‘‰yYgH â ú„Y‰ĻsHķ;Š3ˆ‹Hh-Z øBˆ‘lŸ‰qI‹H#! ø€I‘lŸ‹L’H€-#úLĻúLĘϚąHwBüR‘kšgHsüP‘lüR‘› íĀHPœ‹ ¤šŧœ'‘¤ œ'‘˜-ǝ|\F‘lîÜ/ 0‘ŠyYŅH°- ÷ ú„YøĻŨHķ;Š3ˆäHČ-!o øBˆ‘lŸŠqIäHč-#6 ø€I‘lŸ‹LđH.#úL §úL9§š IwBüR‘kšŅHsüP‘lüR‘ēŋíIÁœr¤šŧœ'‘¤ ˙´‘.gǝ| \F‘LîˆĪ 0‘Ē3’˙´‘PŠyY'IH.  ú„Yg§2Iķ;ŠĀķNI`.‡ úāķ{§úÖķç`.…|cŒcPTI€.ƒú„P{§úwP÷§dI:$Š‹čdI .F úĢč¨úĄčF¨ .…|cŒõbdIĀ.ƒú(c¨úco¨‰‹IdIŲ 9 úšI¨‚qIdIÕú€I¨‚WIdI-úfI¨zI:$ŠMįˆIč.§ ú^į’¨ŒkˆI/Uúk썋åjˆI/úūj Šúôj썊3ˆĒI0/úBˆ5ЊqIĒIP/#æ ú€I5Š‹L°Ip/#úLWŠúLyК`JwBüRudŠ@cŪIˆ/aú`c—ŠúVcŋŠˆ/…|cëI=ŠīæėI /‹úįነųI&bŠ3ˆJ¸/úBˆNJqIJĐ/#Ęú€IĒ‚LJ#úLĒúL-ǚJwBüRw‰Mį Jdú^į@Ēk JUúk@Ē‚åj JúūjUĒúôj@ljMįmJÅú^įiĒkmJUúkiĒ‚åjmJúūj~Ēúôjilj3ˆ€J$=úBˆ’ljqI€J#ú€I’Ē‚L†J#úL§ĒúLÔǚ•JwBüRuS‰Mį¤Jžú^įįĒk¤JUúkįĒ‚åj¤JúūjüĒúôjįlj3ˆģJøBˆudŸ‰qIģJ#Ũø€IudŸ‚LÁJ#øLu\ŸúL̚ĪJwBüRwš'Is4üPuTüRuNIīįˆIÅķÜIīįJ"] AJ´^ žJö\ ß!ü˜ā ”ģ_émsg`˜5ˆr2œšÎø‘ø‹‘—įč/`••Iįú+į#̊ 0úũĢ‘&Šgį&00ÂúŠįYŦúvįyŦŠŸį&h0#?oƒÂįúŽįyŦ— ũŠ M˜˜0#?Ÿƒ/MúMH­¸ ũ‚ÔL #?ƒ÷LúãL#ފ-ð0XúF6Žú<bŽ—ķŒÃĐ0cúbŽ‘˜Œ*cú§ŒįŽ‚XŒ*ŧƒ~ŒúqŒp¯úgŒįމaLŽ~úpL„¯‘< ũ‘ ‘—īæ>đ0ažúᙝN&b’|D`įú•°ú‹š°—õbO1arú(c(ąúc~ą‰‹IOŲ gúšI(ą‚qIOÕú€I(ą‚WIO-úfI(ąb:$—3ˆb81aéúBˆ–ąŠqIbX1#°ú€I–ą‹Lkp1#úLŌąúL˛šˆwBüRuc’3ˆĐa`úBˆ!˛‰qIĐ#'ú€I!˛‚LÖ#úL6˛úLc˛šåwBüRuc’kå`Ĩúkv˛‚åjåúūj‰˛úôjv˛r] Čá\ Đö\ ö\ ēŪíāJKœÕ'¤öqœ'‘¤ˆÄœ'‘¤xcü$‘ˆ1Ę'Ÿ$"흲ŸŪ%"íō˛ 1Ũģmsg:ā‘X‰üpK;Ãú#ü&ŗúünŗ„pK…|cŒcPsKČ1ƒú„P&ŗúwPĸŗ†K:$ŠoûˆKā1<úûÅŗú…û ´ā1…|c™KcPŠÖö™Kø1<lúööA´úėö‰´ø1…|cŒcPŸK2ƒú„PA´úwPŊ´¯K:$ŠÁû¯K82<ĶúáûŨ´ú×û%ĩ82…|cŒcPĩKX2ƒú„PŨ´úwPYĩÅK:$Š:íÅKx2=:úZíyĩúPíÁĩx2…|cŒcPËK˜2ƒú„PyĩúwPõĩÛK:$ŠoûÛK¸2=Ąúûļú…û]ļ¸2…|cŒcPáKØ2ƒú„PļúwP‘ļņK:$Š&éņKø2=úFéąļú<éųļø2…|cŒcP÷K3ƒú„PąļúwP-ˇL:$Š@cL83=Jú`cMˇúVcĨˇ83…|cL=ŠēéLX3>ąúÚéŲˇúĐé!¸X3…|cŒcPLx3ƒú„PŲˇúwPU¸,L:$ŠÁû,L˜3>úáûu¸ú×ûŊ¸˜3…|cŒcP2L¸3ƒú„Pu¸úwPņ¸BL:$Š&éBLØ3>úFéšú<éYšØ3…|cŒcPHLđ3ƒú„PšúwPšXL:$Š@cZL4>Áú`c­šúVcõš4…|cgL=ŠēégL 4>(úÚé)ēúĐéqē 4…|cŒcPmL@4ƒú„P)ēúwPĨē}L:$ŠMį‰L`4>‰ú^įÅēŒk‰Lx4Uúkųē‹åj‰L4úūjRģúôjųē‰īæŸL ?ŗúįŠģĢL&bŠ3ˆļL¨4?+úBˆšģŠqIļLČ4#ōú€Išģ‹LŋLā4#úLÛģúLũģšŲNwBüRu\™*O…ú^įŧk*OUúkŧ‚åj*Oúūj0ŧúôjŧ™AOßú^įDŧkAOUúkDŧ‚åjAOúūjYŧúôjDŧ‰3ˆŋO?WúBˆmŧ‰qIŋO#ú€Imŧ‚LÅO#úL‚ŧúL¯ŧšÔOwBüRu\‰MįÔO"A¸ú^įÂŧkÔO"UúkÂŧ‚åjÔO"úūj×ŧúôjÂŧpKīᑉLļLŪ‹ØL´^ ø4z"ģmsg2ā‘TŠûôM539ú=ûëŧú3û3Ŋ5…|cNcPŠÁûN054{úáûgŊú×û¯Ŋ05…|cNcPŠÖöNP54ŊúööãŊúėö+žP5…|c-NcPŠ@c-Np54˙ú`c_žúVc§žp5…|c#?3ƒ/MúM(ՐžV ũ‚ÔLhY#?ƒ÷LúãLÕŠ-ÔV@>Į3úF—Õú<Ģ՗ķŒÔVh>c3úĢՑFW˜ŒiW cú§ŒւXŒiW ŧƒ~ŒúqŒmÖúgŒ։aLGY!í3úpL‚Ö‘`YyW ũ‘1Y‘DYŠYãyW€>f5ú‚ãąÖúvãČ֌Á1‹W¨>$´úÚ1×úĐ1׍¨>…é18׋Ē…‹WČ> ‚úš…׋V֐Xč> púoÖM×úeÖo׊‰…“X? ŧË4ú…×Yt$‹gRX(? ŧú€Rę×úvR ؍H?ú€RQØúvRsؐÁXņEŠ”ã™W`?f{5úŊã•ØúąãšØŒ*R™Wx?$đú9RŲúCR3Ų?…RRS؊ÕãēW¨?gĨ5úäã€ŲĘW(Š(ĘWČ?g7ú (˛ŲŠ8æĘWč?5}6úIæäŲ—3ˆĘW@@[6úBˆڊqIĘW(@#!6ú€IڋLūW@@#úLHÚúLzښëXwBüRuĢ~2L X@úAL˜Ú‘"X‰D("XA5ë6ƒg(úS(ŧڊ–L+XX@#;Č6ƒšLúĨLāڋÔL1Xp@#;ƒ÷LúãLۂaLcX5úpL(ۑ{XšW=‘Y Yö\ hYö\ ŧԜrYĻœ2>¤Ü/r%‘ˆ@>ģsss ‘¤~Šį–Y°@s@9•Iįú+įeۊ –YØ@Á7ú°Û‘ĢYŠgįĢYAm8úŠįÜúvį4܊ŸįĢY8A#?8ƒÂįúŽį4ܐZ ũŠ MZhA#?J8ƒ/MúMܐAZ ũ‚ÔL]#?ƒ÷LúãLņ܊-WZ€A9úFŨú<Ũ—ķŒWZ¨Acģ8úŨ‘ÉZ˜ŒėZ cú§Œ~Ũ‚XŒėZ ŧƒ~ŒúqŒŨŨúgŒ~Ũ‰aL÷\!)9úpLōŨ‘]üZ ũ‘á\‘ô\ŠYãūZĀAtW:ú‚ã!Ūúvã8یÁ1[čA$´úÚ1uŪúĐ1ŠŪčA…é1¨Ū‹Ē…[B ‚úš…ŠŪ‹VÖ8\(B púoÖŊŪúeÖßۊ‰…;\HB ŧ:ú…ũېˇ\t$‹gRE\hB ŧú€RZßúvR|ߍˆBú€RÁßúvRãߐi\ņEŠ”ã'[ Btˇ:úŊãāúąã)āŒ*R'[¸B$đú9RāúCRŧāĐB…RRÜāŠŅP*[čBuë:úęP÷āúāP&áa[č<‰ ä8[tŧ;ƒ#äúäqáÕ'A[„úā'ÕႯQA[!¯úÕQčáúČQ âúžQÕá„A[…äQ*₆QA[!VúQ>âú‘Q`âõOA[!`ú P>âúP*≠äG[tƒ<ƒ#äúäuâķ'G[„úū'Õá‚2QG[!múKQĀâúAQÕá„G[…ZQäâ‚QG[!EúQĀâúQ`âŅOG[!\účOĀâúÜOäâŠÕãb[Cv­<úäã˙âr[(Š(r[(Cv>ú (1ãŠ8ær[HC5…=úIæcã—3ˆr[hC@c=úBˆ•ãŠqIr[ˆC#)=ú€I•ã‹LĻ[ C#úLĮãúLųãš›\wBüRuĢ~2Lą[@úALä‘Ę[‰D(Ę[A5ķ=ƒg(úS(;䉖LÚ[#;Đ=ƒšLúĨL_ä‚ÔLõ[#;ƒ÷LúãLƒä‚aL \5úpL§ä‘#\‘Č\Đ\ö\ ]ö\ ē‚Ũ@]…œFĨstrD F‘¤TqD ü$‘¸C FģmE įû‘XØCEžiG 'ä䉋IY]G ī>úšIå‚qIY]Õú€Iå‚WIY]-úfIåđCžchH ĸ'8å‰.ë]"N p?úNë"æúDë:愐]"…|cŒcP“]Dƒú„P"æúwPOæĻ]:$Šœc˛] De ×?úŧcræú˛cŠæ D…|cŒ—P˛]8Dƒú¸PŸæúĢPžæÃ^:$‰.ëđ] K B@úNëŅæúDëéæ„đ] …|cŒcPķ]XDƒú„PŅæúwPūæ^:$‰Ōë^U ­@úōë!įúčë9į„^…|cŒcP^pDƒú„P!įúwPNį0^:$‰Üę8^ Q Aúüęqįúōę‰į„8^ …|cŒcP;^ˆDƒú„PqįúwPžįN^:$‰Ōë^^"[ ƒAúōëÁįúčëŲį„^^"…|cŒcPa^ Dƒú„PÁįúwPîįt^:$‰(Ž€^'` ŋAú3Žč‚ÅZ€^Ķ úĐZč‰œcĐ^ ] &Bƒŧcú˛c1č„Đ^ …|cŒ—PĶ^¸Dƒú¸PFčúĢPfčé^:$‰œcđ^ W Bƒŧcú˛cyč„đ^ …|cŒ—Pķ^ĐDƒú¸PŽčúĢPŽč _:$ŠÖö(_čDb ôBúööÁčúėöŲččD…|cŒcP,_Eƒú„PÁčúwPîč<_:$Š‹č<_(Eb ŗCúĢčéúĄč#é(E…|cŒõb<_HEƒú(céúc8鉋I<_Ų ĻCúšIé‚qI<_Õú€Ié‚WI<_-úfIéR_:$Š&éR_pEc DúFé[éú<ésépE…|cŒcPX_Eƒú„P[éúwPˆéh_:$Š3ˆh_°Eb ’DúBˆ¨éŠqIh_ČE#YDú€I¨é‚Lq_#úLŊéúLę隇_wBüR‘[‰3ˆ_b EúBˆę‰qI_#ŅDú€Ię‚L–_#úL-ęúLZęšĨ_wBüR‘['_47ŠīæŊ]āEk @EúįmęË]&bŠMįË]øEk ĄEú^į‚ęŒkË]FUúk‚ę‹åjË](Fúūj—ęúôj‚ę‰MįĨ_ k Fú^įĢękĨ_ UúkĢę‚åjĨ_ úūjĀęúôjĢęY]īįÁ_ö\ Ē1ē…ŪĐ_œ*M¤3’H *M‘@FMĒޏI įû‘T`F(LžiJ %ÔęŠ6på_€FJ ēFúHp,ë‹Īdå_€F[úŪdJëúŪdJ덨FŸ¯*K /My늎_`ØFL uGƒŽ_ú¤_—ë—cP`øF™SGú„PÆëúwPŲë‰O` HGú"OÆë `9] `:$GƒŽ_ú¤_ ėacPŠ&é`0GL ØGúFéėƒ<é0G…|cŒcP `PGƒú„PėúwPVė3`:$Š&é3`pGM ;HúFévėƒ<épG…|cŒcP9`Gƒú„PvėúwPŽėI`:$Š‹čI`°GM öHúĢčÎėƒĄč°G…|cŒõbI`ĐGƒú(cÎėúcũ뉋II`Ų éHúšIÎė‚qII`Õú€IÎė‚WII`-úfIÎė_`:$Š&é_`øGM YIúFé-íƒ<éøG…|cŒcPe`Hƒú„P-íúwPeíu`:$Š3ˆu`8HM ŅIúBˆ…íŠqIu`XH#˜Iú€I…í‹L~`pH#úL´íúLã횀awBüRu[Š3ˆ‰`ˆHM IJúBˆî‰qI‰`#Jú€Iî‹L`¨H#úL#îúLEîš+awBüRudŠ,÷Í`ČHM sJú7÷sîß`2>Š&éā`čHL ÚJúFéŌîú<éīčH…|cŒcPæ`Iƒú„PŌîúwPVīö`:$‰Û`ã`L &Kƒę`‚ŌSã`ÚƒáS‚WIã`ƒfI‰3ˆĨaM žKúBˆvī‰qIĨa#eKú€Ivī‚LĢa#úL‹īúL¸īšēawBüRu[‰3ˆēaM LúBˆËī‰qIēa#ŨKú€IËī‚LĀa#úLāīúL đšĪawBüRu[¸`¯k‘Í`Šīæ@aIO RLúį đNa&bŠMįNa0IO ŗLú^įBđŒkNaHIUúkBđ‹åjNa`IúūjdđúôjBđ‰Mį‡aO Mú^įxđk‡aUúkxđ‚åj‡aúūjđúôjxđå_īᐪaö\ ¸949÷8æY0KœPMNøIæ‘—8æxI@NúIæĄđ—3ˆI@îMúBˆËđŠqI°I#ĩMú€IËđ‹LČI#úLũđúL*ņšIwBüR‘o2L@úALHņ‘-5á\ ÷4g‘Kœ7NĖNøCg‘øMg‘Š3ˆāIŽÁNúBˆgņ‰qI#ˆNú€Igņ‹LøI#úL…ņúLŋņšIwBüR‘o-á\ ßB âNOITįûā ”`ŪÜ/OITįû5ēîāažœhZ¤Ŗčœ'‘¤ęŦéœ'‘¤üęhZ‘ ¤ĪAëmZ‘¤l"ėü$‘J]Zģmsgíįû‘L‰ˇįbîõOø×į›ŸúÍįŨņ„b…|cŒcPb(Jƒø„P›ŸúwP ōb:$ŠŽ_b@JîPúŽ_/ōú¤_‡ō—cP"bXJ™{Pú„PÃōúwPÖō‰O"b pPú"OÃō+b9] dåWú^įíųk>dUúkíų‚åj>dúūjúúôjíų6cīįzcg‰sį%c û\X‚ī_%c Îú`úúū_Bú‚Å_)cúŪ_~úúÔ_ĒúŠzįœc Mû@YúŒįæú‹~ˆœcĀMúˆû‹4gœcāMúMgDûúCgûŠ3ˆĻcNŽ3YúBˆdû‰qIĻc#úXú€Idû‹LĢcN#úL‚ûúL¤ûš7dwBüRvģcá\ ‰MįžcûĄYú^įÂûkžcUúkÂû‚åjžcúūjäûúôjÂû‰zįQdûįYúŒįøû‚~ˆQdúˆ ü^d4g‰Mįad"ûHZú^į:ükad"Uúk:ü‚åjad"úūjOüúôj:übīįœcw^}dö\ Ē1Ē1ßj ˆZ§ZITā ”`ŪÜ/§ZITאŊB Ā d#œĮZ‚_˙ ”V‘0Nw_ĒÁÄ ‘Šī_ądHNÁ<[ú`cüúū_{ü‚Å_ąd•Ū_úÔ_ŧü‰`¸dÂ\[ú*`ũŠrZÄd`NÃ;_ú’Z8ũúˆZLũŠ‹čĐdxN0\ƒĢčúĄč‚ũxN…|cŒõbĐd˜Nƒƒ(cúcąũ‰‹IĐdŲ #\ƒšI‚qIĐdÕƒ€I‚WIĐd-ƒfIåd:$ŠgådĀNn^ú!gÔũúgöũ‰īæīd,ƒ\úįūūd&b‰ŌSūd,ŋ\úáSCū‚WIūdúfICūŠõKeāN,]úLrūúL›ū‰Oe ]ú"Orūe9] ehŠ3ˆeøN,•]úBˆ¯ūŠqIeO#\]ú€I¯ū‹Le0O#úLŅūúLķūšPewBüRuo‰˜Œde+á]ú§Œ˙‚XŒdeŧƒ~ŒúqŒ<˙úgŒ˙‰3ˆ~e,Y^úBˆP˙‰qI~e# ^ú€IP˙‚L„e#úLe˙úL’˙š“ewBüRuober] te4g‰Mį$eĪ^ú^įĨ˙k$eUúkĨ˙‚åj$eúūjē˙úôjĨ˙‰Mį“e0_ú^įÎ˙k“eUúkÎ˙‚åj“eúūjã˙úôjÎ˙Đdīį„ĻeúŒį÷˙‚~ˆŠeúˆŗe4gģeö\ ē,-ĐeŖœpf¤-BĶpf‘ŠĖNÖeHOÔÕdúėN7úâNoŠįđe€OĘaú1įžú'į֍€O…|cŒ“ķøe¨OƒúŠķúžķJ—īæøeČOéR`úįf&b—õbfāOéŨ`ú(csúcŲ‰‹IfŲ Ō`úšIs‚qIfÕú€Is‚WIf-úfIsf:$—3ˆfPéTaúBˆŠqIf P#aú€I‹Lf8P#úL]úL™šČfwBüRu\3ˆ\géøBˆuXŸ‰qI\g#Žaø€IuXŸ‚Lbg#úLˇúLäšqgwBüRu\Šg)fPPdú!g÷úg3‰īæ4f,búįoCf&b‰ŌSCf,YbúáSĢ‚WICfúfIĢŠõKFfxP,ˇbúLîúL1‰OFf Ŧbú"OîOf9] ^fhŠ3ˆ^fP,/cúBˆQŠqI^f°P#öbú€IQ‹LgfČP#úL‰úL¸š×fwBüRv‰˜Œüf+{cú§ŒÖ‚XŒüfŧƒ~ŒúqŒúgŒÖ‰3ˆ-g,ķcúBˆ‰qI-g#ēcú€I‚L3g#úL*úL?šAgwBüRvúfr]  g4g‰Mįnfidú^įRknfUúkR‚åjnfúūjúôjR‰MįAgĘdú^įĄkAgUúkĄ‚åjAgúūjļúôjĄđeīįŠsįÜeāPÔ1e‹ī_ÜeāPΕ`úū_Ę‚Å_äe•Ū_úÔ_ųŠzįŽføPÔfúŒį(‹~ˆŽfQúˆW‹4gŽf8QúMg†úCgWŠ3ˆ˜fXQŽfúBˆĻ‰qI˜f#Īeú€IĻ‹LfpQ#úLÄúLæšįfwBüRw­fá\ ‰zįgÔ[fúŒį‚~ˆgúˆ#g4gŽfw^+gö\ 5ßŌ„fšfā ”‚īëp‹ö6ßu¨Šfžfā ”˙āļÄ%÷uf™;yœÚf0hø„f‘øŽf‘ŠšfˆQŽhúŠfF’īŠ õ4gúúŠd)da —3ˆ, QķĢgúBˆw‰qI,#rgú€Iw‹L1¸Q#úL•úLˇšXwBüRug3ˆ\ķøBˆS‰qI\#ágø€IS‚La#úLÕúLšpwBüRugAá\ yö\ §—­a.WœMiøŊ­‘øĘ­‘ĐQBi¨Ũ­‘‰õKy ĖhúLúLW‰O Áhú"O9] *h™:;iøBˆu‰qI:#iø€Iu‚L?#úLƒúL°šNwBüRuw‘Wö\ ›!uœkŲ!%ņ(Ļņ¤ L%´œ'‘¤Õ%ĩk‘čQk J%¸ø@%šhîC%ēËi˛iĒß1%ģĻi‘‰O %ē jú"OÐ9] ‰˜Œ%ģWjú§Œų‚XŒŧƒ~ŒúqŒ% úgŒų‰‹I"%ŧwjúšI9 ™XčjúBˆ{ ‰qIX#¯jú€I{ ‚L]#úL úLŧ šlwBüRug1>hGuö\ א›Jî€gĀœŒoœ2ŧœ+ĻĪ RoģstrĄë‘XŠ6äāgRĢkúNäW úAäk RŦ[äŠ6ääg0RŦÄkúNäƒ úAä— 0RŦ[䊗­.hHRžĻlúĘ­¯ úŊ­į HRŦŨ­ŠõK:hhRy -lúL úLE Ghh™īhžlúBˆe ‰qIīh#elú€Ie ‚Lôh#úLy úLĻ šiwBüRu[‘7hŠ3ˆGh€RžmúBˆš ŠqIGh R#ålú€Iš ‹LPh¸R#úL× úLų ščhwBüRu[‰3ˆ[h%ž–múBˆ ‰qI[h#]mú€I ‚Lah#úL, úLA šshwBüRvŠ6ä€hĐR§ÍmúNäT úAäh ĐRŦ[äŠ6ä hčR°núNä€ úAä” čR…[äŦ Š6äąhSą?núNä úAä SŦ[äŠ6äšh S˛vnúNä, úAä@  SŦ[ä‰3ˆižînúBˆX ‰qIi#ĩnú€IX ‚L i#úLm úLš šiwBüRu[‰3ˆi&žfoúBˆ­ ‰qIi#-oú€I­ ‚L i #úL úLī š/iwBüRu[‘´g hw(.hMi8iö\ ›dî@iÜœ-sĨstrÜ5(‘œĪÜ%8S"sĒáėā ‘¤~`S˜qžiá%ExSŸŠ&â+χŠõbĸi Sî˜pú(cšúcˉ‹IĸiŲ púšIš‚qIĸiÕú€Iš‚WIĸi-úfIšši:$Š3ˆšiĀSîqúBˆŠqIšiāS#×pú€I‹LÅiøS#úL;úLxšÚiwBüRu§~‰3ˆ˙jîŒqøBˆu¨~Ÿ‰qI˙j #Rqø€Iu¨~Ÿ‚Lk#úL–úLÅškwBüRu§~ĄikŠ(ōiTđsú (ØŠ8æōi0T5prúIæ —3ˆōiPT@NrúBˆ<ŠqIōipT#rú€I<‹L&jˆT#úLnúL šßjwBüRu¨~2L1j@úALž‘Jj‰D(JjK5Ūrƒg(úS(≖L_j#;ģrƒšLúĨL‚ÔLzj#;ƒ÷LúãL*‚aL•j5úpLN‘­j‘jiōi&bÉjø+‘õjũjö\ ›ƒî kÚœĩuœ)yx5(‹œēx'Šmsgy5ų TĒužiz'0Š‹č[kČT|LtúĢčrúĄč”ČT…|cŒõb[kāTƒú(crúc´‰‹I[kŲ ?túšIr‚qI[kÕú€Ir‚WI[k-úfIruk:$Š3ˆukU|ÄtúBˆÍŠqIuk U#‹tú€IÍ‹L~k8U#úLīúLšØkwBüRucŠœc kPU€'uƒŧcú˛c/PU…|cŒ—PŖkhUƒú¸PCúĢPWÁk:$‰3ˆÜk|ŸuøBˆudŸ‰qIÜk#fuø€IudŸ‚Lâk#úLzúL§šņkwBüRuc[kŒoúkö\ ÷ũũ˜ølœŅuNvøū‘øū‘ŠÉũlˆUĸ;vúØũē‹ÄIl UÛúĶIē‹ĨIl¸U-ú´Iēšl-süQsŖœõ lOœ†v¤įõ5(‘ú€I*‚Lrs#úL¤*úLš*š€swBüRv‰3ˆ”s ¨īúBˆĖ*‰qI”s#ļú€IĖ*‚Lšs#úLá*úL+šŠswBüRu_‰3ˆ´s¨g‘øBˆu`Ÿ‰qI´s#.‘ø€Iu`Ÿ‚Lēs#úL!+úLN+šÉswBüRu_s`;s †Gs †\sO˛sö\ ›žīĐsēœ““^ž$%œ)5(a+Šlen'+Šos&7š+„ŨsĸĒÃ40‘/ŸŸmÜü$å+‰cPŨs O’ø„P/ŸúwPš+ęs:$™ęs…^“ŸáS',¨[žcur;(N,‰ĢåtĒúļåx,„t…Äåx,-t¤a ŠcP8tĐ[ ø’ú„P—,úwP¯,Kt:$‰cPKt ,“ú„PÂ,úwPÚ,[t:$š tŊ€B“üRvšktŊ€üP‘\üRv‚cPotø„PßúwPí,t:$áãīΓ^ž$%Ū)5(ëlen'ëos&7› đtNœŠ”¤)15(‘Ĩlen1'‘Ĩos1&7‘‹““ tč[2úÁ“-ú´“D-ú§“z-ŠcPŗt\'t”ú„P°-úwPČ-ŽĐt:$šŗtš‘Š”üQs‡Ūtš‘üR‘1üQ‘›)đātaœŸ•ĨsG5(‘ĨosG&7‘‰Øäņt K•úņäį-úįä.ûtc=‰cPûtKB•ú„P;.úwPS. u:$‰cP(uIy•ø„PŸúwPf.8u:$uø+‡#uš‘üP‘üQ‘§Øå 5Puœ2–øã呸î告xMPu(\e–ø‡M‘‹ÄIPu@\ÕøĶI‘‹ĨIPuX\-ø´I‘‡buš‘üQ‘áxŠW–ëstr&Ô5(ëos&Ô&7›g-ĪœũIT5(¤Ü/&Oũ‘p\čģss&P ‘¤~Šį˜\&Pg˜•Iįú+į….Š Ā\č–úĐ.‘Šgįđ\”—úŠį/úvį8/ŠŸį ]#?A—ƒÂįúŽį8/† ũŠ M†P]#?q—ƒ/MúMƒ/Ž ũ‚ÔLW#?ƒ÷LúãL0Š-Äh]*˜úF0ú<Q0—ķŒĐ]câ—úQ0‘6˜ŒT cú§ŒÆ0‚XŒT ŧƒ~ŒúqŒ/1úgŒÆ0‰aL<P˜úpLD1‘Oc ũ‘&‘9Š2–k¨]&QNœúJ–Z1ú=–Ī1ŠRæŠØ]&Øž™úqæ2údæk2Ø]‹(æŠØ]&ôú@æ2ú3æk2‹æŠØ]&Xúæ2ú æk2‹ØåŠØ]&ßúîå2úãåk2‰xMŠe†™ú‡Mk2‚ÄIŠÕúĶIk2‚ĨIŠ-ú´Ik2šĄš‘üQu´~Š…æĄđ]&Øđšú”æš2ŠÄIĄ^#ų™úĶIš2‚ĨIĄ-ú´Iš2‹NĒ(^#úNŨ2úN3P^úND3úNZ3—ŨKĀh^öãšúôKo3účK„3™É ¨šúôKŲ3účKî3€KÉ Rú—KŲ3ú‹Kî3ĒKø TúÁK4úĩK4„ø …ĪK>4ō"Š…æq€^&Ø=œú”æQ4‰ÄIq #K›úĶIQ4‚ĨIq-ú´IQ4‹Nz˜^#úNu4úN™4„™6øNuĻ~ŸøNV—ŨK™°^ö0œ˜ôKøčKvŸ™Ĩú›úôKˇ4účKĖ4€KĨRú—Kˇ4ú‹KĖ4ĒKÄ T˜ÁKøĩKvŸ„Ä ¨ĪKRŋ"‘А¤cPŠÕãŧĐ^&Rxœúäãá4Î(Š(Îč^&Ráú (5Š8æÎ_5PúIæE5—3ˆÎ(_@.úBˆw5ŠqIÎH_#ôœú€Iw5‹L`_#úLŠ5úLÛ5šģwBüRu¨~2L @úALų5‘&ŠD(&x_5žƒg(úS(6Š–L/_#;›ƒšLúĨLA6‹ÔLQ¨_#;ƒ÷LúãLe6‹aL`Ā_5úpL‰6‘y‘‘Wö\ ™ö\ eū›Dđpuۜˠ¤Ŗ œ'‘¤ęŦ œ'‘¤üØ 5(‘ ¤Û 5(‘‰éŽu ¸ž‚ī_Žu Éú`­6úū_Á6‚Å_‘uúŪ_Ô6úÔ_č6Š3ˆÜuØ_0ŸúBˆũ6ŠqIÜuø_#÷žú€Iũ6‹Låu`#úL7úL%7švwBüRu_‰3ˆėu¨ŸúBˆC7‰qIėu#oŸú€IC7‚Lōu#úLX7úLm7švwBüRv‰3ˆv   úBˆ€7‰qIv#įŸú€I€7‚Lv#úL•7úLÂ7š)vwBüRu_‰3ˆ4v˜ øBˆu`Ÿ‰qI4v#_ ø€Iu`Ÿ‚L:v#úLÕ7úL8šIvwBüRu_‡uÖ_ģuW–ĮuW–ÜuO2vö\ ›¯ĘPvœiĨŠstr[ œ'8(`^ĨĒ3’\ ãŗ‘‰˜Œ_v\ WĄú§Œb8‚XŒ_vŧƒ~ŒúqŒv8úgŒb8@`ā¤žch^ %Š8Šéašvh`g áĸúbž8ƒøah`…bÜ8‰‹Išv/ōĄƒšI‚qIšvÕƒ€I‚WIšv-ƒfI‰NÅv2ĸúĻN9úšN/9‰qIČv3Pĸƒ€I‚WIČv-ƒfIŠ×NĘv€`3ÕĸúđNG9úæNg9„hwúđN‰9úæN9’œJkwÕ˛ĸƒĢJNuw ׃ĻNúšN˛9ŊvŠ3ˆw˜`d YŖúBˆË9ŠqIw¸`# Ŗú€IË9‹LwĐ`#úLí9úL:š`wwBüRu_Š3ˆ&wč`d ŅŖúBˆ-:‰qI&w#˜Ŗú€I-:‹L,wa#úLB:úLo:š>wwBüRud‰3ˆŸwd I¤úBˆ‚:‰qIŸw#¤ú€I‚:‚LĨw#úL—:úLÄ:š´wwBüRu_‰3ˆ´wd Á¤úBˆ×:‰qI´w#ˆ¤ú€I×:‚Lēw#úLė:úL;šÉwwBüRu_öv47 wMiw™€wIĨƒBˆ‰qI€w#Ĩƒ€I‚L…w#úL,;úLY;š”wwBüRu_kvr_ wvwö\ ēmđnœĶĻIT%ą7_ķĶĻ‘’@côØĨú`cl;úVc˜;„…|c&=—īæ(aôĻúįĮ;1&b—Mį10aôaĻú^įé;Œk1HaUúké;‹åj1`aúūj <úôjé;’MįRôžĻø^įutŸkRUøkutŸ‚åjR•ūjøôjutŸīįnö\ ˆ:›ˆ-Đwœ“ĒœíŪ¯ %<œ2° œ'n<¤0Āą œ'‘‰—­ôw˛ –§øĘ­°ŸúŊ­<„ôwŦŨ­‰õKxy ާúLû<úL#=xh‘xŠ—­xxaŗ ž¨úĘ­‹=úŊ­;>xaŦŨ­ŠõKx˜ay )¨úL˜>úLH?‰Ox ¨ú"O˜>!x9] ,xh™žx–¨øBˆW‰qIžx#]¨ø€IW‚LÃx#úL‡?úL´?šŌxwBüRu_‘xŠ3ˆ,x°a˛ ŠúBˆĮ?ŠqI,xĐa#Ũ¨ú€IĮ?‹L5xča#úL@úLU@š`xwBüRu_Š3ˆFŒk5čcUúk>F‹åj5dúūj`Fúôj>F’MįVô–˛ø^įutŸkVUøkutŸ‚åjV•ūjøôjutŸīįrö\ ¯Eũ‰āĐ{2œČ˛Ž´˙ ”ųV‘¤ž|é Ž´‘‰ŠoÛ{ę ŗú¸otF‰ÃoŪ{ę /ŗúŌoŦFä{Ôs‰€Z|ī cŗú˜ZĘFú‹ZG|"] Š3ˆY|dõ ÛŗúBˆGŠqIY|8d#ĸŗú€IG‹Lb|Pd#úL8GúLZGšā|wBüRuk‰3ˆä|õ S´øBˆulŸ‰qIä|#´ø€IulŸ‚Lę|#úLxGúLĨGšų|wBüRukū{Ū‹|ÔsK|ąY|"] w|´^ ’| ] ¯|Ū‹É|lސ}ö\ į9ũ˛ā}œË´@ˇ˙ ”ųV‘¤[—ü @ˇ‘hd5ˇĒĮ˙ \F‘`Š3ˆŒ}ˆd zĩúBˆ¸GŠqIŒ}¨d#Aĩú€I¸G‹L•}Ād#úLÍGúLâGšØ}wBüRugŠ3ˆĒ}Ød ōĩúBˆHŠqIĒ}đd#šĩú€IH‚Lŗ}#úLHúL*HšÅ}wBüRv‰3ˆÜ}  jļúBˆ=H‰qIÜ}#1ļú€I=H‚Lâ}#úLRHúLHšņ}wBüRup‰3ˆü} âļøBˆulŸ‰qIü}#Šļø€IulŸ‚L~#úL’HúLŋHš~wBüRug6}2šM}ØĻ ˇüPuhüQ4[}Ū‹v}ąŒ}"] Ē}´^ ú}ö\ +Hũ-á ~jœ]ˇ%Ā˙ ”ųV‘¤čĒ( %Ā‘%‘eĀŸ$ƒ6 %ŌHŸAë@ %I‰ö8~ - Ųˇú+ö:IA~…[‰6öA~- ¸úAöŗIšW~ØĻüPu`üQ‹ŠOöW~ e- [¸ú^öŅI‹ČbW~ e~ú×bJJo~­A‰ŌSd~- —¸úáSiJ‚WId~úfIiJ‰iöo~- ͏útö˜Jš†~ØĻüPu\üQ4Š3ˆ—~8e- KšúBˆļJŠqI—~Xe#šú€IļJ‹L ~pe#úL˙JúLHKšđ€wBüRu[Š3ˆĢ~ˆe- ÚúBˆvKŠqIĢ~ e#Ššú€IvK‹Lą~¸e#úL˜KúLēKšwBüRu\‰‚öÅ~0 ˙šú‘öØK‚H[Å~ˆúW[ LŠ3ˆø~Đe0 wēúBˆ!LŠqIø~đe#>ēú€I!L‹Lf#úLCLúLeLš€wBüRu[‰œö$4 ŊēúĢöƒL‚,b$eú;bÍL9­A‰iö94 ųēútöáLšPØĻüPu`üQ4Š3ˆ_ f4 qģúBˆ˙LŠqI_@f#8ģú€I˙L‹LhXf#úL;MúLwMšā€wBüRu\Šß{spf6 ˇģúî{•M‹FbspfiúUbžM…­AОŒˆˆf7 \ŧúÁŒŌM‹_vˆˆfŒúnvûM‹Evˆˆf@úTvûM™˜€(OŧúTv'N‰b[›€EDŧúq['N§€Ôs“Fw¨fžŸĪf8 %HNŠß{žČf8 Ŋŧúî{qN‹FbžČfiúUbN°­A‰iöÁ: ŊútöŖNš×ØĻüPu`üRwüQ4Š3ˆæāf: xŊúBˆÁNŠqIæg#?Ŋú€IÁN‹Līg#úLãNúLOš wBüRu\‰3ˆm: đŊúBˆ#O‰qIm#ˇŊú€I#O‚Ls#úL8OúLeOš‚wBüRu\ÁŪ‹æ"] €R|"€"] Šļö(€0g@ _žúÅöxO‹`b(€0gmúob‹O7€­AŠ3ˆ'Hg0 מúBˆĒO‰qI'#žžú€IĒO‹L-`g#úLŋOúLÔOšiwBüRu[‰3ˆ?- OŋúBˆįO‰qI?#ŋú€IįO‚LE#úLüOúL)PšTwBüRu[‰3ˆT - ĩŋúBˆāĄˇÎļÄ6‘ŧ’˜Œ/ˆļŪÖú§Œb‚XŒ/ˆŧƒ~ŒúqŒcúgŒb—vSaˆl¸×úS3cú…S…cmˆū—3ˆmˆl¸ˆ×úBˆģcŠqImˆ8l#O×ú€Iģc‹LyˆPl#úLŨcúLûcšį‰wBüRv’3ˆ„ˆ¸í×úBˆd‰qI„ˆ#Æ×ú€Id‚LŠˆ #úL.dúLCd’÷ŧ•ˆŊ&ØúŊVdúŊēd‘Ÿˆ§ˆ5ģ—ɋ´ˆhlŊ¸ØúڋeŒ3ˆ´ˆˆl;úBˆeŠqI´ˆ¨l#~Øú€Ie‹LŊˆĀl#úLfeúL¯ešŠwBüRu`—3ˆȈØlŊ/ŲúBˆÍe‰qIȈ#öØú€IÍe‹LΈđl#úL fúLFfš÷‰wBüRv—vS;‰mģbŲúS…fú…S×fG‰ū—3ˆG‰ mģŲŲúBˆ gŠqIG‰@m# Ųú€I g‹LS‰Xm#úL/gúLMgš§‰wBüRv—3ˆZ‰pmģPÚúBˆkg‰qIZ‰#Úú€Ikg‹L`‰ˆm#úLgúL¯gšˇ‰wBüRv—3ˆg‰ mēĮÚúBˆÍg‰qIg‰#ŽÚú€IÍg‹Lm‰¸m#úLīgúLhšĮ‰wBüRv—3ˆt‰Đmē>ÛúBˆ/h‰qIt‰#Ûú€I/h‹Lz‰čm#úLQhúLshš׉wBüRv’3ˆ‰ēĩÛúBˆ‘h‰qI‰#|Ûú€I‘h‚L‡‰#úLĻhúLģhš™‰wBüRv—3ˆŠnē,ÜúBˆÎh‰qIŠ#ķÛú€IÎh‹LŠn#úLãhúLøhšnŠwBüRud’3ˆ$Š ŊŖÜúBˆ i‰qI$Š#jÜú€I i‚L*Š#úL iúLMiš9ŠwBüRuC’3ˆDЏŨúBˆ`i‰qIDŠ#áÜú€I`i‚LJŠ#úLuiúLĸišYŠwBüRud’3ˆYŠ ¸ŨúBˆĩi‰qIYŠ#XŨú€Iĩi‚L_Š#úLĘiúLßi’ɋrŠŊŪúڋōi3ˆrŠ;úBˆōi‰qIrŠ#×Ũú€Iōi‚LxŠ#úLjúL4jš‡ŠwBüRu`’3ˆŠģˆŪúBˆGj‰qIŠ#OŪú€IGj‚L•Š#úL\júL‰jš¤ŠwBüRud’3ˆ¤Šģ˙ŪúBˆœj‰qI¤Š#ÆŪú€Iœj‚LNJ#úLąjúLŪjššŠwBüRud’3ˆšŠēvßúBˆņj‰qIšŠ#=ßú€Iņj‚LŋŠ#úLkúL3kšΊwBüRud’3ˆΊ6ēíßúBˆFk‰qIΊ#´ßú€IFk‚LԊ0#úL[kúLˆkšįŠwBüRudRˆ—­aˆ—­´ˆ”ÁøˆiĨ ‰—­‰*,‰—­;‰—­BŠö\ 9595Ŗ@ž‹Äœã¤Aã‘¤Ętĸ㑤ōœ'‘ 0n’ãĒŗs‘Ÿψ%›kН‹‹Pnėāúž‹æk‘+‹‰¯í8‹ váúĀíl„8‹ ¨Ė푈5^8‹ ÔúM^8lú@^jl‚ S8‹ Īú?S8lú2SjlE‹å_ ŠĸSg‹hnĪáúģS~lúąSžlŒvSg‹€nJúS~lú…Sžln‹ūŠɋn‹˜ncâúڋōlŒ3ˆn‹°n;úBˆōlŠqIn‹Čn#(âú€Iōl‚Lw‹#úL$múLomš†‹wBüRu™ž‹đâúڋ‚m3ˆž‹;úBˆ‚m‰qIž‹#ĩâú€I‚m‚LŖ‹#úL•múLÄmš˛‹wBüRu‰ɋŊ‹‡ãøڋuŸ3ˆŊ‹;øBˆuŸ‰qIŊ‹#Lãø€IuŸ‚LË#úL×múLnšŌ‹wBüRud‹'֐ģ‹ö\ 9595›Įđā‹Ņœ§é¤ˇÎČœ'‘¤ Č%‘ānœéĒėÉ\F‘PŠ—­%ŒoŅ×äúĘ­núŊ­QnoŦŨ­ŠõK4Œ0oy ^äúLŖnúLûnAŒh™}ĪäúBˆ:o‰qI}#–äú€I:o‚Lƒ#úLOoúLdoš‘wBüRv‘1ŒŠ—­OŒHoҎåúĘ­woúŊ­ŋoHoŦŨ­ŠõK[Œhoy @åúL púLEphŒh™™¯åøBˆu‰qI™#våø€Iu‚Lž#úLqpúLžpš­wBüRuW‘XŒŠ3ˆhŒ€oŅ/æúBˆąpŠqIhŒ o#öåú€Iąp‹LqŒ¸o#úLĪpúLņpšđŒwBüRuWŠ3ˆxŒĐoҧæúBˆq‰qIxŒ#næú€Iq‹L~Œčo#úL1qúLSqš˙ŒwBüRvŠ3ˆ…ŒpŅįúBˆqq‰qI…Œ#ææú€Iqq‹L‹Œp#úL“qúLĩqšwBüRvŠ3ˆ’Œ0pŅ—įúBˆĶqŠqI’ŒPp#^įú€IĶq‹L˜Œpp#úLõqúLrš֌wBüRv‰3ˆ ŅčúBˆ5r‰qI#Öįú€I5r‚L#úLJrúLwrš+wBüRuW‰3ˆ6Ņ‡čúBˆŠr‰qI6#Nčú€IŠr‚L<#úLŸrúLĖršKwBüRuW‰3ˆKŅ˙čúBˆßr‰qIK#Æčú€Ißr‚LQ#úLôrúL!sš`wBüRuW‰3ˆ`ŅwéúBˆ4s‰qI`#>éú€I4s‚Lf#úLIsúLvsšuwBüRuW‘Œ%ŒiĨOŒ*ŋŒ—­4ö\ äŋ—åšéûéā ”SŪ_hå~—ŪˇÎåœ'Ū å%âîHį0‘ˆ§é“AĀ}œę îøšé‘øÃ鑸Đ鑸Ũé‘ ˆpî…ėé‰sŠį^ޏpëXëƒ_ƒö^Œ&ÖޏpqƒCÖŠVÖ Žāp5"ë•oÖ ƒeÖŠ‰… Žq ŧŌęú…˛st$‹gR"Ž(q ŧú€RÛsúvRīs„°Ž8ú€R túvR!tšŽņE‰ą>Ž 5Lëúá…4tFŽ›<>Žš<‰ŌSŽė”ëúáSGt‚WIŽúfIGt‰cPKŽ ëČëú„PtúwPŽtTŽ:$‰cPWŽëüëú„P×túwP˙tdŽ:$ŠcPgŽ@qėŌėú„PuúwP;u‰OkŽ Oėú"OYutŽ9] XqĮėú„PluúwP€u‹=PŽpqúVP“uúLP§u’PōŽ ˜ģėú0P“uú$Pēu˙ށũŽ:$ŠcP‚ސqėíú„PÎuúwPöu’Ž:$Š3ˆ’ލqė~íúBˆvŠqI’ŽČq#Eíú€Iv‹L›Žāq#úLPvúLŒvšwBüRuc‰3ˆėöíøBˆudŸ‰qI#Ŋíø€IudŸ‚L%#úLĒvúL×vš4wBüRucާã=ö\ ßĘĪîOîā ”!Ųëfd%âîrŧ*'øîŖZ,%›æđ@ĪœŋņĨfd{%‘¤ĩb{œ'‘¤áė{JŲ‘‰cPn}Âîú„PęvƒwP‚:$ŠcP…øq}īú„PwƒwP‰O īú"O0w–9] r…īú„PCwƒwP‹=PĨ(rúVPWwúLPkw—PģPr ˜yīú0PWwú$P~wАũĨ:$‰cP¨~Āīú„P‘wƒwPŧ:$Š îĶhr€xņú%îŠwúîČw‰˜Œā5đú§Œũw‚XŒāŧƒ~ŒúqŒ/xúgŒũwˆrõđ¨3î‘D…@îCxŠq^) r-ĖđúŠ^nxú€^x‹’ŗ) r3úĢŗnxúĄŗxŠO)¸r}Āđú"OnxiO#ßa u´^ Ia Аda ‰3ˆęmņøBˆsŸ‰qIę#4ņø€IsŸ‚Lđ#øLuLŸúLĩxšūwBüRvāõa nûéď}ÖŅr] ā}֐čö\ ‘á\ ‘ö\ ›ņ‘œŪņ$‘Oî§ Á0‘œōD‘Oîũ;ĘP‘'œōØô˙ ”Øô‘ØršôĒ71r }?‘@ĒŨv ų?‘¸Ÿ8Ōz %Čx‰cPz‘o ’ōú„PæxƒwPŽ‘:$‰cP‘‘p Âōú„PyƒwPĸ‘:$™į‘„ķŸj5‚ ų?&y#’ b ?’*b R’da Šõbū’ør“ Œķú(c9yúcNy‰‹Iū’Ų ķúšI9y‚qIū’Õú€I9y‚WIū’-úfI9y“:$Šõb“s“ ôú(cayúcvy‰‹I“Ų ôúšIay‚qI“Õú€Iay‚WI“-úfIay+“:$z‘ûéĒ‘}֐ܑTb t’b ‘’’b ¨’û鐚’cP’cPʒ}֐í’ûéū’cP“cP3“}֐I“}֐\“}֐o“}֐Q“ö\ d“ö\ w“ö\ ĻHßUĘėô÷ôā ”Øô÷Ũô%œõ˛õøėô‘‰cPEaOõø„PÜŸƒwPY:$‰cP\bõú„P‰yƒwPm:$da Eûéu}֐ˆ}֐ö\ ß+™Áõæõā ”æõāļÄ%âî–Ôy%Ô1÷˛õĀœöÅöøÁõ‘(sēö…×õĄy‰cP5yWöø„PlŸƒwPI:$‰cPLy‡öú„PĘyƒwP]:$¨b 5ûéj=r}֐‡}֐ö\ ßŗ˜Ôöīöā ”ā1âî–ÔH%÷ÅöC9—œ ÷É÷øÔö‘Hsž÷…āöây‰cP=H[÷ø„PųŸƒwPQ:$‰cPTH‹÷ú„P zƒwPe:$Äb =ûér=z}֐}֐—ö\ ߘ˜Ø÷ķ÷ā ”ā1âî–Ô<%÷É÷÷āšœø×øøØ÷‘hsÂø…ä÷#z‰cPE<_øø„PŸƒwPY:$‰cP\<øú„PWzƒwPm:$Úb Eûéz=‚}֐’}֐ đb šö\ ßĘæøųā ”ØôŪ-BOųâīlenS%L;÷×ø1ė"œ/ųŨûøæø‘øđø‘€sČû…˙øozŠ_Y˜sS­ųúnY‚z‹qI°sÛú€I‚z‹WI°s-úfI‚zŠcPGČsVŨųú„P–zƒwP[:$Šõb[āsWeúú(cÎzƒc‰‹I[Ų ZúúšIÎz‚qI[Õú€IÎz‚WI[-úfIÎzo:$ŠcPtøsW™úú„PãzúwPûz:$ŠõbtW!ûú(c{ƒc‰‹IŲ ûúšI{‚qIÕú€I{‚WI-úfI{‘:$‰cPŊPQûú„P.{ƒwPŅ:$‰cPÔQûú„PV{ƒwPå:$+üb Gû鐙}֐Ŋûéí}֐ }֐}֐ö\ "ö\ ĢĐĨ#€“Eœøûū˙ ”Œ‘¤sÉ#+Ļ‘‰cPʓ)Eüú„Pn{ƒwPŪ“:$‰cPá“*uüú„P–{ƒwPō“:$‰ŅPô“*ĨüúęPŽ{ƒāP˙“č<‰cP”*Ųüú„PÁ{úwPŲ{”:$‰cP”+ ũú„Pí{úwP|$”:$‰ŅP&”+=ũúęP|ƒāP3”č<‰cP6” +qũú„P0|úwPH|C”:$‰cPu”'Ąũú„P[|ƒwP‰”:$‰cPŒ”(Ņũú„Pƒ|ƒwP”:$ʓûéK”}֐u”ûéĒ”}֐˛”ö\ Ŋ”}֐Ŕö\ áņ=ūčüļ%âãmˇįû¯Ž×Д&œUūŅ˙ ”]‘¤=Cü$‘(tÆĒ.\F‘ŦŸžü$›|ĒJ°įû‘°‰ øđ”Īū•PŲŠ–ė •Pt6˙úļė"}úŦėZ}Pt…|cŒcP•htƒú„P"}úwP¨}#•:$ŠŽ_&•€t˙˙ƒŽ_ú¤_Č}—cP.• t™¸˙ú„P~úwP)~‰O.• ­˙ú"O~7•9] H•:$ĀtƒŽ_ú¤_Z~ŒcPK•Øt—ú„Pp~úwPˆ~v˜:$Š&éH•øtbúFéŦ~ƒ<éøt…|cŒcPN•uƒú„PŦ~úwPô~a•:$Šnķ“•8u"¤úŽķú„ķ<8u…|c§•cPЖ덕Pu#æúļė`úŦėxPu…|cē•cPŠ‹čē•pu#ĨúĢčŽúĄčŖpu…|cŒõb畐uƒú(cŽúcš‰‹Iē•Ų ˜úšIŽ‚qIē•Õú€IŽ‚WIē•-úfIސЕ:$Š3ˆЕ¸u# úBˆęŠqIЕĐu#äú€Ię‚LŲ• #úL˙úL€ču¨ŸD•+÷$'€‰ŌS^–+búáS>€‚WI^–úfI>€Š˜^a–v+Ūúą^p€úĨ^§€™a–  Ŧž^„0˜úą^ŀúĨ^ņ€„0˜¨ž^‘XE˜ŗ` Šøy– v/ ú¯øúĨø, v…|c–cPŠ–ė–8v0búļėiúŦ끁8v…|cĸ–cPŠ&鯖Xv0¤úF鰁ú<éȁXv…|cĖcPŠ–ėƖpv1æúļ뿁úŦėūpv…|c֖cPŠ‹č֖ˆv1ĨúĢč‚úĄč&‚ˆv…|cŒõb֖¨vƒú(c‚úc9‚‰‹I֖Ų ˜úšI‚‚qI֖Õú€I‚‚WI֖-úfI‚ë–:$Š3ˆë–Đv1 úBˆQ‚ŠqIë–čv#äú€IQ‚‚Lô– #úLf‚úL{‚‰3ˆāš1oøBˆuHŸ‰qIāš#Jø€IuHŸ‚Læš#øLu`ŸøLPšv–PLüPuHüRu´š¯–ËRüPu¸üRsŠ3ˆ—w6 úBˆŽ‚ŠL—w#úLŖ‚úL¸‚š—wBüRu`‚qI¸™#ú€IŽ‚Šū›˜0w5Oú#ū˂0w¨1ū‘T’Āķŋ˜“úāķé‚úÖķƒ„ŋ˜…|c͘cP—ä÷͘PwĀÔúøƒúú÷.ƒPw…|cå™cP’@c՘Āƒ`cúVcCƒ„՘…|câ˜=’$ėí˜ÆZúDėXƒú:ėpƒ„혅|c™cP—īæ™pw˃úį…ƒ™&b—Mį™ˆwËãú^į§ƒŒk™ wUúk§ƒ‹åj™¸wúūjɃúôj§ƒ’MįhšËCú^į郏khšUúk郂åjhšúūjūƒúôj郐ǘīįŠáø)™Đw4‘úų„ú÷ø:„Đw…|c=™cPŠ–ė=™čw5Ķúļė^„úŦ놄čw…|cP™cPŠ‹čP™x5’ úĢčĒ„úĄčĖ„x…|cŒõbP™(xƒú(cĒ„úcđ„‰‹IP™Ų … úšIĒ„‚qIP™Õú€IĒ„‚WIP™-úfIĒ„f™:$Š&éf™Px5ų úFé!…ú<éI…Px…|cŒcPl™pxƒú„P!…úwPm…|™:$Š–ė|™x6` úļė…úŦėĩ…x…|cŒcP‚™°xƒú„P…úwPŲ…’™:$Ћ蒙Đx6 úĢčų…úĄč†Đx…|cŒõb’™đxƒú(cų…úc?†‰‹I’™Ų  úšIų…‚qI’™Õú€Ių…‚WI’™-úfIų…¨™:$Š3ˆ¨™y5— úBˆp†ŠqI¨™8y#^ ú€Ip†‹Lą™Py#úL’†úL´†šō™wBüRu`‰3ˆö™5 úBˆŌ†‰qIö™#Ö ú€IŌ†‚Lü™#úLį†úL‡š šwBüRu`‰3ˆ š 6u úBˆ'‡‰qI š#N ú€I'‡‚Lš#úL<‡úLQ‡Š=ø—hyˇ ú]ød‡úSøŒ‡hy…|c/—cPŠ–ė/—€yų úļė°‡úŦėȇ€y…|cB—cPŠ‹čB— y¸ úĢčŪ‡úĄčô‡ y…|cŒõbB—Āyƒú(cŪ‡úc ˆ‰‹IB—Ų Ģ úšIŪ‡‚qIB—Õú€IŪ‡‚WIB—-úfIŪ‡X—:$Š3ˆX—čyúBˆ;ˆŠqIX—z#÷ ú€I;ˆ‚La—#úLQˆúLfˆ‰øģ—&dú¯øyˆúĨøĄˆ„ģ—…|cĪ—cPŠ–ėŅ—z'ĻúļėňúŦėŨˆz…|câ—cPŠ‹čâ—0z'eúĢčķˆúĄč‰0z…|cŒõbâ—Pzƒú(cķˆúc‰‰‹Iâ—Ų XúšIķˆ‚qIâ—Õú€Iķˆ‚WIâ—-úfIķˆø—:$Š3ˆø—xz'ËúBˆO‰ŠqIø—z#¤ú€IO‰‚L˜#úLd‰úLy‰‰3ˆš'1úBˆŒ‰‰qIš# ú€IŒ‰‚L…š #úLĄ‰úL3ˆĨš#—úBˆɉ‰qIĨš#pú€Iɉ‚L̚#úL߉úLô‰‰3ˆȚ#ũúBˆŠ‰qIȚ#Öú€IŠ‚LΚ#úLŠúL1Љ•?'úįDАõ•&bŠųõ•¨z?wú(ų’Š‹vSõ•ĀzdúS’Šú…SāŠ–ūŠ3ˆ–Øz?īúBˆ(‹ŠqI–øz#ļú€I(‹‹L –{#úLk‹úL§‹šˆ˜wBüRu`‰Mį–Pú^įŋk–Uúkŋ‚åj–úūj÷‹úôjŋŠ3ˆ)–({@ČúBˆŒ‰qI)–#ú€IŒ‹L/–@{#úLIŒúLxŒš ˜wBüRu`‰Mįš)ú^į–ŒkšUúk–Œ‚åjšúūjŦŒúôj–Œ‰3ˆ+š @ĸúBˆŒ‰qI+š#hú€IŒ‚L1š#úL֌úLš@šwBüRuŗ‰3ˆKš?úBˆ‰qIKš#áú€I‚LQš#úL-úLBš`šwBüRu` •īįš“•PLBüPu@üRu´š—PLaüPuŧüRu´…—û鐖—cPž—}Öšģ—PLüPuDüRu´š›˜PLģüPuPüRu´›š}֐Išö\ ßņÉāõā ”ØôāļÄ%÷ҍrŦœ;øā‘‰ŨôKDúėôU"da Š3ˆ,X{IŧúBˆu‰qI,#ƒú€Iu‹L2p{#úLŊúLųšXwBüRuwŠ3ˆ9ˆ{I4úBˆ'ŽŠqI9 {#ûú€I'Ž‹L?¸{#úLOŽúLqŽšpwBüRuw‰3ˆyI˛øBˆu# Ÿ‰qIy#yø€Iu# Ÿ‚L#úLŽúLŧŽšŽwBüRuw‰3ˆŽI0øBˆu#Ÿ‰qIŽ#÷ø€Iu#Ÿ‚L”#úLĪŽúLüŽšŖwBüRuwŦö\ ÷ŅÖˇœW›øā‘ŠŅ Đ{L†úā‰ŨôKŠúėô-"da Š3ˆ,č{I!úBˆK‰qI,#čú€IK‹L2|#úLmúLœšhwBüRuwŠ3ˆ9|I™úBˆʏŠqI90|#`ú€Iʏ‹L?H|#úLėúLš€wBüRuw‰3ˆ„IøBˆs Ÿ‰qI„#Øø€Is Ÿ‚LŠ#úL,úLYš™wBüRuw‚3ˆ™IøBˆsŸ‰qI™#Lø€IsŸ‚LŸ#úLlúL™šŽwBüRuwOá\ ˇö\ äÍ.­Âā ”8ŠāļÄ%ˆ›øœŨœŪø­‘Š}n `|.vúŒnŦ‹Sn `|•lnúbnŦ‹Ņ$ˆ|ŽúāôŠŅ$¨|Liúāô‰Ũô2KŒúėô‘;da Š3ˆEČ|IúBˆ;‘‰qIE#Ëú€I;‘‹LKā|#úL]‘úL‘šwBüRuwŠ3ˆRø|I|úBˆ‘‰qIR#Cú€I‘‹LX}#úLŋ‘úLᑚ€wBüRuw‰3ˆĒIôøBˆs Ÿ‰qIĒ#ģø€Is Ÿ‚L°#úL˙‘úL,’šŋwBüRuw‚3ˆŋIøBˆsŸ‰qIŋ#/ø€IsŸ‚LÅ#úL?’úLl’šÔwBüRuwhá\ Ũö\ ˆ›˛Íāœfø­‘Š› (}.Qú­’‹}n @}.úŒnŠ’‹Sn @}•lnúbnŠ’‹Ņ$`}ŽúāےŠŅ$€}LCúāے‰Ũô2Kfúėô“;da Š3ˆE }IŪúBˆ"“‰qIE#Ĩú€I"“‹LK¸}#úLD“úLf“š˜wBüRuwŠ3ˆRĐ}IVúBˆ„“‰qIR#ú€I„“‹LXč}#úLĻ“úLȓšˆwBüRuw‰3ˆ­IÎøBˆs Ÿ‰qI­#•ø€Is Ÿ‚Lŗ#úLæ“úL”šÂwBüRuw‚3ˆÂIøBˆsŸ‰qIÂ# ø€IsŸ‚LČ#úL&”úLS”š×wBüRuwhá\ tá\ āö\ ß]Éuā ”…XŪ-B<L;ˆf:Ö¯œŽP$øu‘ø‘Š—­~=¨ øĘ­rŸúŊ­f”~ŦŨ­‰õKy / øLrŸúL-h™Š  úBˆ]•‰qIŠ#g ú€I]•‚L#úLr•úLŸ•šŸwBüRud‘Š×ø< ~=U#úđø˛•úæø– ~…˙øj–Š_YHH~S9!únY}–‚qIHÛú€I}–‚WIH-úfI}–ŠcPx`~Vi!ú„PŦ–ƒwP‰:$Šõb‰x~Wņ!ú(cä–ƒc‰‹I‰Ų æ!úšIä–‚qI‰Õú€Iä–‚WI‰-úfI䖐:$ŠcPĸ~W%"ú„Pų–úwP—¯:$Šõb¯¨~W­"ú(c/—ƒc‰‹I¯Ų ĸ"úšI/—‚qI¯Õú€I/—‚WI¯-úfI/—ŋ:$‰cPøPŨ"ú„PD—ƒwP :$‰cP Q #ú„P|—ƒwP:$Yüb uûéĮ}֐õûé%}֐a}֐Ē}ÖŠ3ˆĘĀ~=Í#úBˆ”—‰qIĘ#”#ú€I”—‹LĐØ~#úLЗúL ˜šHwBüRud‰3ˆd&=E$úBˆ*˜‰qId# $ú€I*˜‚Lj #úL?˜úLl˜šywBüRu[‚ö\ ũĖÛœh$'˙ ”8Š‘¤ž|š'‘‰LZ ›Ũ$ú[Z˜‚ŌS wúáSØ‚WI úfIØŠ—­ đ~›x%úĘ­™úŊ­D™đ~ŦŨ­ŠõK,y p%úL°™úLŲ™‰O, e%ú"O°™49] ?h‘,ŠŠ@ ›Ŧ%ú*Š[šú Š­šMfŠ3ˆM@›$&úBˆđšŠqIM`#ë%ú€Iđš‹LVx#úLB›úL~›š€wBüRuoŠ3ˆ]›œ&úBˆŦ›ŠqI]¨#c&ú€IŦ›‹LcĀ#úLΛúL—wBüRs‰3ˆ¨›'úBˆ œ‰qI¨#Û&ú€I œ‚LŽ#úL!œúLNœšŊwBüRuo‰3ˆŊ›Œ'øBˆupŸ‰qIŊ#S'ø€IupŸ‚LÃ#úLaœúLŽœšŌwBüRuo‘ Ûö\ į9ũĩËÛœē'ī*˙ ”8Š‘¤[—ī*‘‰ë[ ‘/(úú[Ąœ‚ŌS úáS圂WI úfI圊—­ Ø‘Ę(úĘ­=úŊ­fØŦŨ­ŠõK,đy Â(úLŌúLû‰O, ˇ(ú"OŌ49] ?h‘,ŠŠ@€‘ū(ú*Š}žú ŠĪžMfŠ3ˆM(€‘v)úBˆŸŠqIMH€#=)ú€IŸ‹LV`€#úLdŸúL Ÿš€wBüRuoŠ3ˆ]x€‘î)úBˆΟŠqI]€#ĩ)ú€IΟ‹Lc¨€#úLđŸúL š—wBüRs‰3ˆ¨‘f*úBˆ. ‰qI¨#-*ú€I. ‚LŽ#úLC úLp šŊwBüRuo‰3ˆŊ‘Ū*øBˆupŸ‰qIŊ#Ĩ*ø€IupŸ‚LÃ#úLƒ úL° šŌwBüRuo‘ Ûö\ +H¯0Ë œ +C.˙ ”8Š‘¤čĒ|C.‘ОŒĀ€Î+úÁŒà‹_vĀ€Œúnvã ‹EvĀ€@úTvã ™ˆÁ+úTvĄ‰b[‹Eļ+úq[Ą—ÔsFwŠˌ؀ú+ƒåŒúی0Ą‘5ŠŠDđ€.,ú*ŠCĄú Š“ĄOfŠ3ˆOĻ,úBˆŧĄŠqIO(#m,ú€IŧĄ‹LX@#úLôĄúL#ĸš¸wBüRu_Š3ˆ_X-úBˆQĸŠqI_p#å,ú€IQĸ‹Leˆ#úLqĸúL‘ĸšĪwBüRs‰ĸˆl‚>-úąˆ¯ĸ‰3ˆ×ļ-úBˆÄĸ‰qI×#}-ú€IÄĸ‚LŨ#úLŲĸúLŖšėwBüRu_‰3ˆė..øBˆu`Ÿ‰qIė#õ-ø€Iu`Ÿ‚Lō#úLŖúLFŖšwBüRu_DMi ö\ HũYĖ1œ`.8˙ ”8Š‘¤'VĨ8‘ 8ŸėĻœ'YŖ‰U_Ļ'/úd_‚ŖėSMúûSŨŖ‚‹I6úšIŨŖ‚qIÕú€IŨŖ‚WI-úfIŨŖŠ—­]ЁŠ 0úĘ­R¤úŊ­ǤЁŦŨ­ŠõKlđy /úL=ĨúLĨĨyh™0øBˆuLŸ‰qI#Č/ø€IuLŸ‚L #úLPĻúL}Ļš/wBüRud‘iŠŠ¨‚Ģ=0ú*АĻú иϐļfŠ3ˆļ ‚Ģĩ0úBˆH§ŠqIļ@‚#|0ú€IH§‹LŋX‚#úLš§úLاšXwBüRuCŠ3ˆĘp‚Ē-1úBˆ¨ŠqIʈ‚#ô0ú€I¨‹LĐ ‚#úL&¨úLF¨šwwBüRwŠ3ˆÛ¸‚ĒĨ1úBˆd¨ŠqIÛЂ#l1ú€Id¨‹Láč‚#úL†¨úL¨¨š—wBüRwŠ3ˆėƒŠ2úBˆƨŠqIėƒ#ä1ú€Iƨ‹Lō0ƒ#úLč¨úL ŠšˇwBüRwŠ3ˆũHƒŠ•2úBˆ(ŠŠqIũ`ƒ#\2ú€I(Š‹Lxƒ#úLJŠúLlŠš×wBüRwŠ3ˆƒŠ 3úBˆŠŠŠqI¨ƒ#Ô2ú€IŠŠ‹Lƒ#úLŦŠúLΊš÷wBüRwŠ3ˆ؃Ē…3úBˆėŠŠqIđƒ#L3ú€IėŠ‹L%„#úLĒúL0ĒšwBüRwŠ3ˆ0 „Ģũ3úBˆNĒŠqI08„#Ä3ú€INĒ‹L6P„#úLpĒúL’Ēš7wBüRw‰3ˆiĢu4úBˆ°Ē‰qIi#<4ú€I°Ē‚Lo#úLÅĒúLōĒš~wBüRuC‰3ˆ~Ēí4úBˆĢ‰qI~#´4ú€IĢ‚L„#úLĢúLGĢš“wBüRuC‰3ˆ“Ēe5úBˆZ̉qI“#,5ú€IZĢ‚L™#úLoĢúLœĢš¨wBüRuC‰3ˆ¨ŠŨ5úBˆ¯Ģ‰qI¨#¤5ú€I¯Ģ‚LŽ#úLÄĢúLņĢšŊwBüRuC‰3ˆŊŠU6úBˆŦ‰qIŊ#6ú€IŦ‚LÃ#úLŦúLFŦšŌwBüRuC‰3ˆŌŠÍ6úBˆYŦ‰qIŌ#”6ú€IYŦ‚LØ#úLnŦúL›ŦšįwBüRuC‰3ˆįĒE7úBˆŽŦ‰qIį# 7ú€IŽŦ‚Lí#úLÃŦúLđŦšüwBüRuC‰3ˆüĢŊ7úBˆ­‰qIü#„7ú€I­‚L#úL­úLE­šwBüRuP(Ë =iĨIË ]Mi‡*›—­¨*ö\ n8ũYËŋœ,8…:˙ ”8Š‘…:‘¤}Í…%‘ŠŠ&h„‡†8ú*ŠX­ú Š­4fŠ3ˆ4€„†ū8úBˆŽŠqI4 „#Å8ú€IŽ‹L=¸„#úLXŽúL”ŽšhwBüRuoŠ3ˆDЄ†v9úBˆÂŽŠqIDč„#=9ú€IÂŽ‹LJ…#úLâŽúL¯šwBüRs‰3ˆŒ†î9úBˆ ¯‰qIŒ#ĩ9ú€I ¯‚L’#úL5¯úLb¯šĄwBüRuo‰3ˆĄ†f:øBˆupŸ‰qIĄ#-:ø€IupŸ‚L§#úLu¯úLĸ¯šļwBüRuoiĨ&Miŋö\ Hß™™:´:ā ”æõâî–Ôu%÷Ėđ˜>›ŨœĐ:X<øŪ𑊊: ›… Ÿ;ú™:ĩ¯0……Ĩ:÷¯‰cP…›u;;ø„P¨ŸƒwP™›:$‰cPœ›uk;ú„P+°ƒwP­›:$›c …›ûéē›=›}֐՛}Ö‰?đ!› ö;úNđC°‚ĸ!›úĸC°bĸ!›}úqĸC°‰Yđ6› M<úhđx°‚Ĩ6›ú#Ĩx°õ¤6›}úĨx°Ũ›ö\ ÷öīâ Ÿœt<N=øđ‘ОõH…¸C=úÁõ­°H……×õą‰cPEyß<ø„PlŸƒwPY:$‰cP\y=ú„P.ąƒwPm:$¨b Eûéz=‚}֐—}֐Ÿö\ ÷öīž:Ēœj=j>øđ‘Šöī h…¸U>úđFą‹˛õ €…¸úÁõpą€……×õ­ą‰cPUyđ=ø„PlŸƒwPi:$‰cPly >ú„PáąƒwP}:$¨b Uû鐊=’}֐ĸ}֐-á\ Ēö\ ũŠģā›čœ‚>?˙ ”lH‘Šņ œ …ęn?úņųą‹Š:œČ…ēú™:-˛腅Ĩ:t˛‰cP`œu ?ú„P¨˛ƒwPqœ:$‰cPtœu9?ú„PвƒwP…œ:$œc ]œû鐒œ=œ}֐Ü}֐ œr] ­œá\ ĩœö\ ÷ÅoFМ3œŠ?ēAøÔ‘øŪ‘†ĨA…í貊įņܜ(†ŗÉ@úō&ŗøöņōí‹É÷ܜ(††úØ÷&ŗH†Ŋ@…ä÷\ŗ‰cP5<Z@ú„PļŗƒwPI:$‰cPL<Š@ú„PŪŗƒwP]:$åœÚb 5ûél=t}֐č}֐ôœđb ‹ōúœh†´ú"ōöŗ‹Åöúœh†ˆúÔö.´†…āöW´‰cP•H?Aú„P‹´ƒwPŠ:$‰cPŦHoAú„Pŗ´ƒwPŊ:$ Äb •ûéʝ=Ō}֐û}֐đö\ žö\ ÷7ō ž6œÖAŪCøFō‘¸†ÉC…RōË´Šįņžā†ŦíBúō ĩøöņōRō‹É÷žā††úØ÷ ĩ‡áB…ä÷?ĩ‰cPuž<~Bú„PĩƒwP‰ž:$‰cPŒž<ŽBú„PŠĩƒwPž:$%žÚb užûéŦž=´ž}֐+Ÿ}֐4žđb ‹ō4ž(‡­ú"ōÁĩ‹Åö4ž(‡ˆúÔöųĩ`‡…āö"ļ‰cP՞HcCú„PaļƒwPéž:$‰cPėžH“Cú„P‰ļƒwPũž:$JžÄb ՞ûé Ÿ=Ÿ}֐>Ÿ}֐3Ÿö\ FŸö\ ũ(%PŸ>œöC F˙ ”^W‘˜‡ôEŸˇf€čĄļŠįņ\ŸĀ‡fEúōßļøöņō D‹É÷\ŸĀ‡†úØ÷ßļ⇠E…ä÷ˇ‰cPŊŸ<ŠDú„PWˇƒwPҟ:$‰cPԟ<ŲDú„PˇƒwPåŸ:$eŸÚb ŊŸûéôŸ=üŸ}֐s }֐tŸđb ‹ōzŸˆgú"ō—ˇ‹ÅözŸˆˆúÔöΎ(ˆ…āöøˇ‰cP HŽEú„P7¸ƒwP1 :$‰cP4 HžEú„P_¸ƒwPE :$ŸÄb  ûéR =Z }֐† }֐{ ö\ Ž ö\ ũG% >œ!F4H˙ ”^W‘XˆHŸˇn€čw¸Šįņœ €ˆnCGúōĩ¸øöņō8F‹É÷œ €ˆ†úØ÷ĩ¸ ˆ7G…ä÷븉cPũ <ÔFú„P-šƒwPĄ:$‰cPĄ<Gú„PUšƒwP%Ą:$Ĩ Úb ũ ûé4Ą=<Ą}֐ŗĄ}֐´ đb ‹ōē Āˆoú"ōmš‹Åöē ĀˆˆúÔöĨš舅āöΚ‰cP]ĄHšGú„P ēƒwPqĄ:$‰cPtĄHéGú„P5ēƒwP…Ą:$Đ Äb ]Ąû鐒Ą=šĄ}ÖÆĄ}֐ģĄö\ ÎĄö\ ¯YÚĐĄIœLH€J˙ ”ČU‘¤3’Ĩ€J‘Š7ōߥ‰ĻkJúFōMē‰ŦRōŠįņߥ0‰ŦŽIúōēøöņōŽH‹É÷ߥ0‰†úØ÷ēX‰‚I…ä÷Ķē‰cPHĸ<Iú„PģƒwP\ĸ:$‰cP_ĸ<OIú„P:ģƒwPpĸ:$čĄÚb Hĸûé}ĸ=†ĸ}֐üĸ}֐öĄđb ‹ōöĄx‰­ú"ōRģ‹ÅööĄx‰ˆúÔöŠģ ‰…āö¨ģ‰cPĒĸHJú„PįģƒwPžĸ:$‰cPÁĸH4Jú„PŧƒwPŌĸ:$ ĸÄb Ēĸûéßĸ=įĸ}֐Ŗ}֐Ŗö\ Ŗö\ n8߃ƒ”JŠJā ”5§āļÄ%ßpy¸JÍJā ”ĸ¤āļÄ%ä¤ßJôJā ”QVāļÄ%÷ÍJXb Ŗ œK9QøßJ‘‰…J,Ŗw¤†Mú”J'ŧ‰Ļ2Ŗa¨ĶLƒÅĻúšĻIŧú­Ļ\ŧaĻ2Ŗa—ƒĻƒuĻ„2Ŗa4Ļ2Ŗa~ƒTĻúHĻoŧŒĻ@ŖČ‰gú'ĻšŧŒao@ŖČ‰]úsošŧŠ3ˆ@Ŗč‰ĪYLúBˆŌŧŠqI@ŖŠ# Lú€IŌŧ‹LEŖ Š#úL ŊúL,ŊšƒŖwBüRud‚3ˆSŖĪúBˆJŊ‰qISŖ#”Lú€IJŊ‚LYŖ#úL†ŊúLĀŊšhŖwBüRud‚ęĻ“ŖŠúųĻîŊ“Ĩ“Ŗ ƒĸĨú¸ĨžúŦĨ,ž„“Ŗ^Ĩ—Ŗ ˛ƒiĨúĨ?žúuĨ[ž3Ĩ—Ŗ MšƒBĨúXĨ?žúLĨ[ž Ŗá\ ‰ŠJŖŖ¤hPú¸Jnž‰ũŖŠŖz¨ĩOƒ2¤ú&¤žú¤ŖžÎŖŠŖz—ƒîŖƒâŖ„ŠŖzĄŖŠŖz~ƒÁŖúĩŖļžŒ€Ŗ°Ŗ@Šgú”ŖážŒČl°Ŗ@Š]úŲláž—3ˆ°Ŗ`Š/ÅNúBˆŋŠqI°ŖxŠ#ŒNú€Iŋ‹L敖Š#úL;ŋúL]ŋš¤wBüRud—3ˆŊŖ¨Š/å‰qI§#Đuú€I>å‚L­#úLSåúL€åšŧwBüRuG‰3ˆŧĄvúBˆ“å‰qIŧ#Hvú€I“å‚LÂ#úL¨åúLÕåšŅwBüRuG‰3ˆŅ ųvúBˆčå‰qIŅ#Āvú€Ičå‚L×#úLũåúL*æšæwBüRuG‰3ˆæŸqwúBˆ=æ‰qIæ#8wú€I=æ‚Lė#úLRæúLæšûwBüRuG‰3ˆûŸéwúBˆ’æ‰qIû#°wú€I’æ‚L#úL§æúLÔæšwBüRuG‰3ˆ5ĄaxúBˆįæ‰qI#(xú€Iįæ‚L/#úLüæúL)įš%wBüRuG(ą`MiŠ*.ö\ į9ũŪËTœ§xŠ€˙ ”8Š‘¤[—”Š€‘‰“{% • yúĸ{<į‚y{% #úˆ{<į+duŠˌ.X—•:yú匎įúیÅį‘KŠ—­]p—–zúĘ­!čúŊ­ičp—ŦŨ­ŠõKl—y ŖyúLüčúLTéyh™=zøBˆuPŸ‰qI=#Ûyø€IuPŸ‚LC#úLåéúLęšRwBüRu\‘iŠ—­‡¨——zúĘ­%ęúŊ­mꍨ—ŦŨ­ŠõK–Ā—y …zúLāęúL(ëŖh‘“ŠŠ¤Ø——Ázú*ŠĒëú ŠėąfŠ3ˆąø——9{úBˆVėŠqIą˜#{ú€IVė‹Lē0˜#úL¨ėúLäėšwBüRuGŠ3ˆÁH˜–ą{úBˆíŠqIÁ`˜#x{ú€Ií‹LĮx˜#úL2íúLRíš/wBüRsŠ3ˆΐ˜–)|úBˆpíŠqIؘ#đ{ú€Ipí‹LÔ˜#úL’íúL´íšGwBüRsŠ3ˆÛؘ•Ą|úBˆŌíŠqIÛđ˜#h|ú€IŌí‹Lá™#úLôíúLîš_wBüRsŠ3ˆč ™•}úBˆ4îŠqIč8™#ā|ú€I4î‹LîP™#úLVîúLxîšwwBüRsŠ3ˆõh™–‘}úBˆ–îŠqIõ€™#X}ú€I–î‹Lû˜™#úL¸îúLÚwBüRs‰3ˆŸ— ~úBˆøî‰qIŸ#Đ}ú€Iøî‚LĨ#úL īúL:īš´wBüRuG‰3ˆ´–~úBˆMī‰qI´#H~ú€IMī‚Lē#úLbīúLīšÉwBüRuG‰3ˆÉ–ų~úBˆĸī‰qIÉ#Ā~ú€Iĸī‚LĪ#úLˇīúLäīšŪwBüRuG‰3ˆŪ•qúBˆ÷ī‰qIŪ#8ú€I÷ī‚Lä#úL đúL9đšķwBüRuG‰3ˆķ•éúBˆLđ‰qIķ#°ú€ILđ‚Lų#úLađúLŽđšwBüRuG‰3ˆ5–a€úBˆĄđ‰qI#(€ú€IĄđ‚L/#úLļđúLãđšwBüRuG%ą]Mi‡*&ö\ +Hũ‡ËÅœ§€*‰˙ ”8Š‘¤čĒŠ*‰‘%‘‰‚ö ú‘ööđ‚H[ˆúW[!ņОŒ1°™ŒށúÁŒ5ņ‹_v1°™Œúnv`ņ‹Ev1°™@úTv`ņ™0ĄúTvŒņ‰b[3E–úq[Œņ?Ôs7FwŠˌBș‹ځƒåŒúی­ņ‘XŠ—­jč™Œŧ‚úĘ­ÁņúŊ­ōč™ŦŨ­ŠõKyšy C‚úLŦōúL퐆h™´‚úBˆŋķ‰qI#{‚ú€Iŋķ‚L #úLÔķúLôšwBüRu\‘vŠ—­” š-ƒúĘ­ôúŊ­lô šŦŨ­ŠõKŖ8šy %ƒúLßôúL7õ°h‘ ŠŠąPšaƒú*Ššõú Š öžfŠ3ˆžpš؃úBˆöŠqIžš# ƒú€Iö‹LĮ¨š#úLpöúLŦöš`wBüRuGŠ3ˆŌšŒQ„úBˆÚöŠqIŌØš#„ú€IÚö‹LØđš#úLúöúL÷šwBüRsŠ3ˆã›ŒɄúBˆ8÷ŠqI㠛#„ú€I8÷‹Lé8›#úLZ÷úL|÷š—wBüRsŠ3ˆôP›‹A…úBˆš÷ŠqIôh›#…ú€Iš÷‹Lú€›#úLŧ÷úLŪ÷šˇwBüRsŠ3ˆ˜›‹š…úBˆü÷ŠqI°›#€…ú€Iü÷‹L ț#úLøúL@øš×wBüRsŠ3ˆā›Œ1†úBˆ^øŠqIø›#ø…ú€I^ø‹Lœ#úL€øúLĸøš÷wBüRs‰3ˆ‹ІúBˆĀø‰qI#p†ú€IĀø‚L"#úLÕøúLųš1wBüRuG‰3ˆ1‹!‡úBˆų‰qI1#č†ú€Ių‚L7#úL*ųúLWųšFwBüRuG‰3ˆF&Œ™‡úBˆjų‰qIF#`‡ú€Ijų‚LL #úLųúLŦųš[wBüRuG‰3ˆlˆúBˆŋų‰qIl#؇ú€Iŋų‚Lr#úLÔųúLúšwBüRuG‰3ˆŒ‰ˆúBˆú‰qI#Pˆú€Iú‚L‡#úL)úúLVúš–wBüRuG‰3ˆ–/Œ‰úBˆiú‰qI–#Ȉú€Iiú‚Lœ)#úL~úúLĢúš¯wBüRuG.ąjMi”*dö\ HˆĖNU=œK‰mŽøâN‘øėN‘Šį (œX‹ú1įžúú'įöú(œ…|cŒ“ķ PœƒúŠķ%ûúžķ]û—īæ €œéā‰úį%û+&b—õb,¨œékŠú(c†ûúcÔû‰‹I,Ų `ŠúšI†û‚qI,Õú€I†û‚WI,-úfI†û::$—3ˆ:ȜéâŠúBˆũûŠqI:čœ#Њú€Iũû‹LC#úLKüúL”üš°wBüRud3ˆöéúBˆ˛ü‰qIö#‹ú€I˛ü‚Lü#úLĮüúLôüš wBüRudŠgJ–ú!gũúgPũ‰īæQ,Ģ‹úį„ũ`&b‰ŌS`,į‹úáSÍũ‚WI`úfIÍũŠõKc8,EŒúLūúLJū‰Oc :Œú"Oūi9] vhŠ3ˆvP,ŊŒúBˆ^ūŠqIvp#„Œú€I^ū‹Lˆ#úLūúLŧūšŋwBüRv‰˜ŒÔ+ ú§ŒÚū‚XŒÔŧƒ~ŒúqŒ˙úgŒÚū‰3ˆ',øBˆudŸ‰qI'#Hø€IudŸ‚L-#øLu`ŸúL˙š;wBüRvŌr] ä4g‰Mį†÷ú^į,˙k†Uúk,˙‚åj†úūjN˙úôj,˙‰Mį XŽú^įb˙k Uúkb˙‚åj úūjw˙úôjb˙īį'ö\ ¯’ œŒŽã’ITĄį˙ ”`‘¤Ü/ã’‘Šˇį Ņú×į‹˙úÍįÁ˙ …|c’o_ƒūŽú~_Á˙ŒcPĀƒú„Pđ˙úwP&‰O% Lú"OT.9] čÄú„PgúwP{‹=P<žúVPžúLP˛’PĄ ˜¸ú0Pžú$PŐށũ9:$Šg9 ž’ú!gŲúg‰īæC,$úįIR&b‰ŌSR,`úáS…‚WIRúfI…ŠõKU@ž,žúLÁúLę‰OU ŗú"OÁ[9] hhŠ3ˆhXž,6‘úBˆūŠqIhxž#ũú€Iū‹Lqž#úL-úL\š¸wBüRu_‰˜ŒĖ+‚‘ú§Œz‚XŒĖŧƒ~ŒúqŒĨúgŒz‰3ˆę,ú‘úBˆš‰qIę#Á‘ú€Iš‚Lđ#úLÎúLûš˙wBüRu_Ęr] Ü4g‰Mįxp’ú^įkxUúk‚åjxúūj0úôj‰Mį˙Βø^įu`Ÿk˙Uøku`Ÿ‚åj˙•ūjøôju`Ÿīįö\ ąįˆrZ›ûœ“į–øˆZ‘ø’Z‘Š‹č¨žՓúĢčDúĄčd¨ž…|cŒõbĀžƒú(cDúc“Š‹IāžŲ Č“úšID‹qIøžÕú€ID‹WIŸ-úfID,:$Šg,(Ÿ–ú!gļúgō‰īæ6,(”úį&E&b‰ŌSE,d”úáSb‚WIEúfIbŠõKHHŸ,”úLžúLĮ‰OH ˇ”ú"OžN9] [hŠ3ˆ[`Ÿ,:•úBˆÛŠqI[€Ÿ#•ú€IÛ‹Ld˜Ÿ#úL úL9š˜wBüRuo‰˜ŒŦ+†•ú§ŒW‚XŒŦŧƒ~ŒúqŒ‚úgŒW‰3ˆĘ,ū•úBˆ–‰qIĘ#ŕú€I–‚LĐ#úLĢúLØšßwBüRuoĒr] ŧ4g‰Mįkt–ú^įëkkUúkë‚åjkúūj úôjë‰MįßŌ–ø^įupŸkßUøkupŸ‚åjß•ūjøôjupŸīįûö\ ¯Ŋ œ—]›ITG˙ ”`‘¤Ü/]›‘Š&é°ŸK˜úFé!ú<éW°Ÿ…|c’o_ƒx—ú~_WŒcPПƒú„P†úwPŧ‰O% Ɨú"Oę.9] øŸ>˜ú„PũúwP‹=P< úVP4úLPH’PĄ ˜2˜ú0P4ú$P[ށũ9:$Šg90 ‰šú!goúg̉īæC,ž˜úįߐR&b‰ŌSR,ژúáS‚WIRúfIŠõKUP ,8™úLWúL€‰OU -™ú"OW[9] hhŠ3ˆhh ,°™úBˆ”ŠqIhˆ #w™ú€I”‹Lq  #úLÃúLōš¸wBüRu_‰˜ŒĖ+ü™ú§Œ ‚XŒĖŧƒ~ŒúqŒ; úgŒ ‰3ˆę,tšúBˆO ‰qIę#;šú€IO ‚Lđ#úLd úL‘ š˙wBüRu_Ęr] Ü4g‰Mįxęšú^ᤠkxUúk¤ ‚åjxúūjÆ úôj¤ ‰Mį˙H›ø^įu`Ÿk˙Uøku`Ÿ‚åj˙•ūjøôju`Ÿīįö\  é¯č 뜁›ōžITë˙ ”`‘¤Ü/ōž‘Šö鸠ā›úęÚ ú ęú ¸ …|c%)āŠg%Đ žú!g) úge ‰īæ/,3œúį™ >&b‰ŌS>,oœúáSÕ ‚WI>úfIÕ ŠõKAđ ,͜úL úL: ‰OA œú"O G9] ThŠ3ˆTĄ,EúBˆN ŠqIT(Ą# ú€IN ‹L]@Ą#úL} úLŦ šˆwBüRuo‰˜Œœ+‘ú§ŒĘ ‚XŒœŧƒ~ŒúqŒõ úgŒĘ ‰3ˆē, žúBˆ ‰qIē#Нú€I ‚LĀ#úL úLK šĪwBüRuošr] Ŧ4g‰Mįdžú^į^ kdUúk^ ‚åjdúūj€ úôj^ ‰MįĪŨžø^įupŸkĪUøkupŸ‚åjĪ•ūjøôjupŸīįëö\ n8ß  Ÿ,ŸIT¤éā ”`ŪÜ/,ŸIT¤é´éˆ÷žj-œMŸ™Ŗø Ÿ‘øŸ‘ŠēéXĄ‡ úÚé” úĐéĘ XĄ…|c’o_ƒ´Ÿú~_Ę ŒcPxĄƒú„Pų úwP/ ‰O%  ú"O] .9]  Ąz ú„Pp úwP„ ‹=P<¸ĄúVP§ úLPģ ’PĄ ˜n ú0P§ ú$PÎ ށũ9:$Šg9ØĄÅĸú!gâ úg‰īæC,Ú úįRR&b‰ŌSR,ĄúáSŽ‚WIRúfIŽŠõKUøĄ,tĄúLĘúLķ‰OU iĄú"Oʐ[9] hhŠ3ˆhĸ,ėĄúBˆŠqIh0ĸ#ŗĄú€I‹LqHĸ#úL6úLeš¸wBüRu_‰˜ŒĖ+8ĸú§Œƒ‚XŒĖŧƒ~ŒúqŒŽúgŒƒ‰3ˆę,°ĸúBˆÂ‰qIę#wĸú€I‚Lđ#úL×úLš˙wBüRu_Ęr] Ü4g‰Mįx&Ŗú^įkxUúk‚åjxúūj9úôj‰Mį˙„Ŗø^įu`Ÿk˙Uøku`Ÿ‚åj˙•ūjøôju`Ÿīįö\ ß; ¯ŖĮŖITÔ>ā ”`ŪÜ/ĮŖbéē°ņ@ŦBœŨ­œ'‘œ'‘œ'‘ ¤9dŨ­‘¤æôe÷‘¤rfâ­‘`ĸŌ­ĒüØg\F‘Lģmsgjįû‘Pžrtį­MŠĄjvŦ˜ĸkФú˛jŒŒ°dvŦ˜ĸTúŋdŒúŋdŒŠˇįŦ°ĸlë¤ú×įûúÍį#°ĸ…|c¤ŦcPŠ‹č¤ŦČĸlĒĨúĢčEúĄčrČĸ…|cŒõb¤Ŧčĸƒú(cEúc”‰‹I¤ŦŲ ĨúšIE‚qI¤ŦÕú€IE‚WI¤Ŧ-úfIEēŦ:$Š&éģŦŖlėĨúFéˇú<éߍŖ…|cÍŦcPЎįÍŦ0Ŗm.Ļú×įúÍį)0Ŗ…|cāŦcPŠ@cáŦPŖmlĻƒ`cúVcKPŖ…|cīŦ=ŠHęņŦhŖmŽĻúhęmú^ę•hŖ…|c­cP€ŖĀ§žin%ˇŠĄj­˜Ŗn §ú˛jÖŒ°d­˜ŖTúŋdÖúŋdÖŠ&é$­¸Ŗos§úFéôú<é ¸Ŗ…|cŒcP*­ØŖƒú„PôúwP!:­:$Šöé;­øŖoĩ§úęAú ęTøŖ…|cI­)ā"­Ŋj‰sįg­ q"¨‚ī_g­ Îú`iúū_‰‚Å_k­úŪ_ÃúÔ_ãŠzįˆ­¤|h¨úŒį‹~ˆˆ­0¤úˆ”­4g‰Mį—­jɨú^į:k—­Uúk:‚åj—­úūjvúôj:Š3ˆĒ­H¤‚AŠúBˆ–‰qIĒ­#Šú€I–‹L°­`¤#úLŌúLšhŽwBüRu`Šsįå­x¤vŖŠ‹ī_å­x¤Îú`Lúū_l‚Å_î­úŪ_ĻúÔ_Ɖ*I7Ž{׊úIIčú¯4g‰MįA¯jŠŦú^į*kA¯Uúk*‚åjA¯úūj?úôj*‰3ˆT¯.‚!­úBˆS‰qIT¯#čŦú€IS‚LZ¯(#úLhúL•ši¯wBüRu`‘kŦvŦīį|­ĖN‡­w^Ķ­Ŋjû­mސŽrZŽį–Žmސ'Žb›2Žw^‘ŽmސšŽrZčŽrZõŽ÷ž¯mސ ¯b›¯w^r¯ö\ ō8L;n8¯c œ ޞITœ'˙ ”`‘¤Ü/˛‘ŠŽ_@ĨõŽúŽ_¨ú¤_Ô—cP `Ĩ™ŽŽú„PúwP‰O ŖŽú"O)9] ::$€ĨƒŽ_ú¤_FŒcP=˜Ĩ—ú„P[úwPsŽ:$Šg:¸Ĩ3ąú!g–úgŌ‰īæD,H¯úįS&b‰ŌSS,„¯úáSB‚WISúfIBŠõKVØĨ,â¯úL~úL§‰OV ׯú"O~\9] ihŠ3ˆiđĨ,Z°úBˆģŠqIiĻ#!°ú€Iģ‹Lr(Ļ#úLęúLš¸wBüRuo‰˜ŒĖ+ϰú§Œ7‚XŒĖŧƒ~ŒúqŒbúgŒ7‰3ˆę,ąúBˆv‰qIę#å°ú€Iv‚Lđ#úL‹úL¸š˙wBüRuoĘr] Ü4g‰Mįy”ąú^įˏkyUúkË‚åjyúūjíúôjˉMį˙ōąø^įupŸk˙UøkupŸ‚åj˙•ūjøôjupŸīįö\ Ņ5áx#2˛Ū\uŌœ'Ūq‡Ōœ'ߎ H˛`˛IT$íā ”`ŪÜ/`˛4íē”#¯Vœ´¸–œ'œ˛íü$œŖĒîœ';¤šãîœ'‘¤\uī´¸‘¤q‡īš¸‘@ĻŠ¸Ÿ™ķ÷$ŠĒûô0‘‘HŠ ˛¨¯hĻđYŗú$˛Ēú˛Õ‹*I¸¯€ĻÖúIIķúš(¯ĸĪú^įÛ8Œk>š@¯Uúk"9‹åj>šX¯úūjŒ9úôj"9‰MįqēĐú^į¸9kqēUúk¸9‚åjqēúūjÍ9úôj¸9šīį>šgŠpūŒšp¯úŅƒūú†ūá9ŠMį°šˆ¯žĐú^į :Œk°š ¯Uúk :‹åj°š¸¯úūjB:úôj :‰MįZē˙Đú^įb:kZēUúkb:‚åjZēúūjw:úôjb:œšīᐧš†v°šgŠzįŨšĐ¯öŌúŒį‹:‹~ˆŨšđ¯úˆē:‹4gŨš°úMgé:úCgē:Š3ˆįš0°ŽõŅúBˆ ;‰qIįš#ŧŅú€I ;‹LėšH°#úL';úLI;š?ēwBüRwüšá\ ‰éē ņdŌ‚ī_ē Éú`g;úū_{;‚Å_ ēúŪ_™;úÔ_­;‰zįCēöĒŌúŒįĪ;‚~ˆCēúˆä;Pē4gI¸mސU¸ė­b¸į–o¸mސ{¸ė­šmސšė­ašė­nšį–{šmސ‡šė­Ôšį–Ũšw^Xēö\ eūeū›Ÿ.Āē/œšĶ¤ŖĒ œ'‘¤šã œ'‘œ\u 5(<œq‡ 5(J<šæēËüPsüR1üQ‘›Č.đē,œ0Ô¤ŖĒœ'‘¤šãœ'‘œ\u5(<œq‡5(É<šģËüPsüR0üQ‘ßŪ FÔeÔITëā ”`ŪÜ/eÔITë(ëˆ0Ô„9œ†ÔŌØøFÔ‘øPÔ‘Š.ë`°ĀÕúNë=úDëE=`°…|c’o_ƒíÔú~_E=ŒcP€°ƒú„Pt=úwPĒ=‰O% ;Õú"OØ=.9] ¨°ŗÕú„Pë=úwP˙=‹=P<°úVP">úLP6>’PĄ ˜§Õú0P">ú$PI>ށũ9:$Šg9ā°ū×ú!g]>úg™>‰īæC,ÖúįÍ>R&b‰ŌSR,OÖúáS ?‚WIRúfI ?ŠõKUą,­ÖúLE?úLn?‰OU ĸÖú"OE?[9] hhŠ3ˆhą,%×úBˆ‚?ŠqIh8ą#ėÖú€I‚?‹LqPą#úLą?úLā?š¸wBüRu_‰˜ŒĖ+q×ú§Œū?‚XŒĖŧƒ~ŒúqŒ)@úgŒū?‰3ˆę,é×úBˆ=@‰qIę#°×ú€I=@‚Lđ#úLR@úL@š˙wBüRu_Ęr] Ü4g‰Mįx_Øú^į’@kxUúk’@‚åjxúūj´@úôj’@‰Mį˙ŊØø^įu`Ÿk˙Uøku`Ÿ‚åj˙•ūjøôju`Ÿīįö\ ß čØŲITŧëā ”`ŪÜ/ŲITŧëĖëˆŌØ-Ųœ(ŲtŨøčØ‘øōØ‘ŠŌëhąbÚúōëČ@účëū@hą…|c’o_ƒŲú~_ū@ŒcPˆąƒú„P-AúwPcA‰O% ŨŲú"O‘A.9] °ąUÚú„P¤AúwP¸A‹=P<ČąúVPÛAúLPīA’PĄ ˜IÚú0PÛAú$PBށũ9:$Šg9čą Üú!gBúgRB‰īæC,ĩÚúį†BR&b‰ŌSR,ņÚúáSÂB‚WIRúfIÂBŠõKU˛,OÛúLūBúL'C‰OU DÛú"OūB[9] hhŠ3ˆh ˛,ĮÛúBˆ;CŠqIh@˛#ŽÛú€I;C‹LqX˛#úLjCúL™Cš¸wBüRu_‰˜ŒĖ+Üú§ŒˇC‚XŒĖŧƒ~ŒúqŒâCúgŒˇC‰3ˆę,‹ÜúBˆöC‰qIę#RÜú€IöC‚Lđ#úL DúL8Dš˙wBüRu_Ęr] Ü4g‰MįxŨú^įKDkxUúkKD‚åjxúūjmDúôjKD‰Mį˙_Ũø^įu`Ÿk˙Uøku`Ÿ‚åj˙•ūjøôju`Ÿīįö\ ß. ŠŨĸŨITģā ”`ŪÜ/ĸŨ„ęßV ŊŨÕŨITÆęā ”`ŪÜ/ÕŨÖęß~ đŨŪIT%ā ”`ŪÜ/ŪŽ5ßĻ #Ū;ŪITĮčā ”`ŪÜ/;Ū×čßÎ VŪnŪITjëā ”`ŪÜ/nŪzëßö ‰ŪĄŪITėā ”`ŪÜ/ĄŪėēãņ ģ2œņ¤zœ'‘¤zœ'‘¤6œ'‘ ¤âX%‘¤įX%‘¤kē%‘ p˛ ņŸG´5D‰`ėBģUßúrėŸD‰éOģ ˇß‚ī_Oģ Éú`šDúū_ÍD‚Å_RģúŪ_āDúÔ_ôDŠtŨh쐞!áø”ŨĒŸúŠŨ EŠŠęģ°˛JāúĒęPEú ęxE°˛…|cŒcP…ģȲƒú„PPEúwPÛE•ģ:$ŠMįĄģā˛Ģāú^įûEŒkĄģø˛Uúk;F‹åjĄģŗúūjíGúôj;F‰Mį*ŋ áú^į Hk*ŋUúk H‚åj*ŋúūj#Húôj HģīįĄģg‰sįnģ }á‚ī_nģ Ε`úū_7H‚Å_rģ•Ū_úÔ_~HЧŨÄģ(ŗäâúĮŨ­HúŊŨÕHŠÜęŅģHŗ âúüęūHúōę&IHŗ…|cŒcP×ģ`ŗƒú„PūHúwP|Iįģ:$ŠMįđģxŗnâú^įœIŒkđ쐺UúkįI‹åjđ썺úūj}KúôjįI‰MįAŋĪâú^įKkAŋUúkK‚åjAŋúūjŗKúôjKŅģīįđģgŠÚŨ ŧĀŗGäúúŨĮKúđŨīKŠ)o-ŧāŗpãƒIoú?oLāŗ…|cŒo3ŧøŗƒúonLúoĒLBŧ7=ŠMįKŧ´Ņãú^įĘLŒkKŧ(´UúkM‹åjKŧ@´úūj„NúôjM‰MįXŋ2äú^į¤NkXŋUúk¤N‚åjXŋúūjēNúôj¤N-ŧīįKŧgŠ ŪaŧX´Žåú-ŪÎNú#ŪöNŠŨčmŧp´×äúũčOúķčæú ëŲQú–ëRĩ…|cŒcPÂŧ ĩƒú„PŲQúwPSRŌŧ:$ŠMįÛŧ8ĩŸæú^įsRŒkÛŧPĩUúkēR‹åjÛŧhĩúūjŨSúôjēR‰Mį†ŋįú^įũSk†ŋUúkũS‚åj†ŋúūjTúôjũSŧŧīįÛŧgŠsŪūŧ€ĩ|čú“Ū&Tú‰ŪNTŠ$ė Ŋ ĩĨįúDėwTú:ėŸT ĩ…|cŒcPŊ¸ĩƒú„PwTúwPņT!Ŋ:$ŠMį*ŊĐĩčú^įUŒk*ŊčĩUúkXU‹åj*ŊļúūjVVúôjXU‰Mį ŋgčú^įvVk ŋUúkvV‚åj ŋúūj‹VúôjvV Ŋīį*ŊgŠÚŨ@ŊļßéúúŨŸVúđŨĮVŠ)oLŊ0ļéƒIoú?oåV0ļ…|cŒoRŊHļƒúo7WúosWaŊ7=ŠMįjŊ`ļiéú^į“WŒkjŊxļUúkÚW‹åjjŊļúūjŗXúôjÚW‰MįžŋĘéú^įĶXkžŋUúkĶX‚åjžŋúūjčXúôjĶXLŊīįjŊgŠsŪšŊ¨ļFëú“ŪüXú‰Ū$YŠ$ė§ŊČļoęúDėMYú:ėuYČļ…|cŒcP­Ŋāļƒú„PMYúwPĮYŊŊ:$ŠMįÆŊøļĐęú^įįYŒkÆŊˇUúk.Z‹åjÆŊ(ˇúūjâZúôj.Z‰MįÜŋ1ëú^į[kÜŋUúk[‚åjÜŋúūj[úôj[§ŊīᐯŊgŠÚŨÜŊ@ˇŠėúúŨ+[úđŨS[Š)očŊXˇŌëƒIoú?oq[Xˇ…|cŒoîŊpˇƒúoÃ[úo˙[ũŊ7=ŠMįžˆˇ3ėú^į\Œkž ˇUúkf\‹åjž¸ˇúūjõ\úôjf\‰Mįúŋ”ėú^į]kúŋUúk]‚åjúŋúūj*]úôj]čŊīįžgŠsŪ6žĐˇîú“Ū>]ú‰Ūf]Š$ėCžđˇ9íúDė]ú:ėˇ]đˇ…|cŒcPIž¸ƒú„P]úwP ^Yž:$ŠMįbž ¸šíú^į)^Œkbž8¸Uúkp^‹åjbžP¸úūjÚ^úôjp^‰MįĀûíú^įú^kĀUúkú^‚åjĀúūj_úôjú^CžīįbžgŠÚŨxžh¸pīúúŨ#_úđŨK_Š)o„ž€¸œîƒIoú?oi_€¸…|cŒoŠž˜¸ƒúoŦ_úoč_™ž7=ŠMįĸž°¸ũîú^į`ŒkĸžČ¸Uúk`‹åjĸžā¸úūj@`úôj`‰Mį6Ā[īø^įu\Ÿk6ĀUøku\Ÿ‚åj6Ā•ūjøôju\Ÿ„žīįĸžgŠzįĪžø¸TđúŒįT`‹~ˆĪžšúˆƒ`‹4gĪž8šúMg˛`úCgƒ`Š3ˆŨžXšŽGđúBˆÆ`‰qIŨž#đú€IÆ`‹Lâžpš#úLä`úLašŋwBüRwōžá\ ‰zįŋšđúŒį1a‚~ˆŋúˆFa ŋ4gÄģ뭐ŧ뭐 ŧ0Ԑ¯ŧ뭐ūŧ뭐ŽŊ÷žšŊ뭐*žŌؐ6žė­Æžį–Īžw^(ŋö\ ¯œ3ņŠõIT9č˙ ”`‘¤Ü/Šõ‘ŠOčˆšxōúočsaúečŠaˆš…|c’o_ƒĨņú~_ŠaŒcP¨šƒú„PØaúwPb‰O% ķņú"OøÄ#úL#†úLU†šËwBüRuč|2LI@úALs†‘b‰D(bF5ģƒg(úS(ŗ†‰–Lw#;˜ƒšLúĨL冂ÔL’#;ƒ÷LúãL‡‹aL¨Å5úpLI‡‘ĀŠ(Ā(ÅCGú (ģ‡Š8æĀPÅ5ļúIæí‡—3ˆĀpÅ@”úBˆˆŠqIÅ#Zú€Iˆ‹Lô¨Å#úLQˆúLƒˆšģwBüRuŦ~2L˙@úALĄˆ‘‰D(F5$ƒg(úS(ňŠÔL#ĀÅ#;ƒ÷LúãL鈂–L3#;ƒšLúĨL ‰‚aL^5úpL1‰‘v‰zįŋAúŒįn‰‚~ˆŋúˆ‰Ī4g‰3ˆĪBúBˆˉŠqIĪØÅ#Ėú€Iˉ‹LÕđÅ#úLâ‰úLŠšíwBüRuč|‰3ˆíCúBˆ$ЉqIí #Eú€I$Š‚Lö#úL:ŠúLiŠšwBüRuč|Į&bÜ&bņ 뭐Ԩ%뭐Œmސ›rZ¨0ԐąrZŧw^‘t‘1ö\ |ö\ ›ņ. Å'œn¤zJœ'‘¤zJœ'‘¤âXKU%‘ ¤įXKU%‘žÅōß^¤}•ā ”Ñërhs H•Å5ēÃō œķ%å%¤z%œ'‘¤z&œ'‘¤âX'%‘ ¤įX(%‘ÆŪ%īlhs/Ťīrhs/ŤĒāĨ8 ‘č|Ē,Ú< ‘¤~Šn(0Æ0”ú‡|Šú}¤ŠŠM’(PÆ KÂú\’¤Š‰Š‘( ?Ĩú¸‘¤Š‹ȑhÆ ?úבˊŠM’L€Æ Kú\’äŠ‰Š‘L ?ú¸‘䊋ȑ Æ ?úב‹‹’p¸Æ Mú ’4‹ú’l‹¸ÆŦ'’Ŧ4’Šâ‘pØÆ uuú푤‹‹â‘‘đÆ vúí‘ü‹‰éČ +ö‚ī_Č Éú`4Œúū_HŒ‚Å_ÎúŪ_gŒúÔ_{ŒŠįĮ8ÄúIį Œú+įŒŠ 0ĮEú<‘)Šgį)XĮņúŠį4ŽúvįlŽŠŸį)ˆĮ#?žƒÂįúŽįlސŦ ũŠ M­¸Į#?΃/MúM莐Ԡũ‚ÔL¨#?ƒ÷LúãLWŠ-éĐĮ‡úFmú<ą—ķŒéøĮc?úą‘[˜Œ} cú§Œ•‚XŒ} ŧƒ~ŒúqŒ…‘úgŒ•‰aLĀ!­úpL§‘‘ؐޠũ‘ë‘ūŠšŽČ9$úâ֑ú֍’ŒķQ—0Č$ŌúRo’ú RĪ’HȅR“Šoš`Č9Xúoc“úo…“ˇ7=ŠįˇxČ<&úIįŪ“ú+į"”Š ˇ˜Č§ú°”‘ÅŠgįɸČSúŠį>•úvį^•ŠŸįÉčČ#?ƒÂįúŽį^•- ũŠ M-É#?0ƒ/MúM땐U ũ‚ÔL´.#?ƒ÷LúãLw–Š-p(ÉéúF–ú<Ũ–—ķŒpPÉcĄúŨ–‘⏘Œ cú§Œh—‚XŒ ŧƒ~ŒúqŒų—úgŒh—‰aL–úpL˜‘¯ ũ‘€‘“ŠšhÉ=†úâ=˜ú֍‹˜ŒķQˆÉ$ŌúRō˜ú R%™ É…Ri™Šo¸É=ēúoš™úođ™87=‰sįoA‚ī_oÎú`Wšúū_š‚Å_v úŪ_öšúÔ_.›Š÷žĢØÉAƒúŸ|›ú ŸěŠēéŋøÉŦúÚéŲ›úĐé!œøÉ…|cŒcPČĘƒú„PŲ›úwPŠœØ:$ŠMįæ(Ę ú^įǜŒkæ@ĘUúkǜ‹åjæXĘúūjũœúôjǜ‰Mįánú^įkáUúk‚åjáúūj3úôjŋīᐿgŠzįBpĘAg úŒįG‹~ˆBĘúˆy‹4gB°ĘúMgĢúCgyŠ3ˆOĐĘŽZ úBˆ˝‰qIO#! ú€I˝‹LTčĘ#úLéúL žš—wBüRvhá\ Š3ˆkËBā úBˆ+ž‰qIk #Ļ ú€I+ž‹LtË#úL]žúLžš[wBüRuč|Š3ˆ0ËCY!úBˆ­ž‰qI #!ú€I­ž‹LˆHË#úLߞúLŸš‹wBüRuč|Š(“`Ë<Â"ú (/ŸŠ8æ“€Ë51"úIæaŸ—3ˆ“ Ë@"úBˆ“ŸŠqI“ĀË#Õ!ú€I“Ÿ‹LÄØË#úLáŸúL š{wBüRuč|2LĪ@úAL1 ‘č‰D(čF5Ÿ"ƒg(úS(q ‰–Lũ#;|"ƒšLúĨLŖ ‚ÔL#;ƒ÷LúãLÕ ‹aL.đË5úpLĄ‘FŠ(FĖC+$ú (yĄŠ8æF0Ė5š#úIæĢĄ—3ˆFPĖ@x#úBˆŨĄŠqIFpĖ#>#ú€IŨĄ‹LzˆĖ#úLĸúLAĸškwBüRuŦ~2L…@úAL_ĸ‘ž‰D(žF5$ƒg(úS(ƒĸŠ–LŠ Ė#;å#ƒšLúĨL§ĸ‚ÔLÎ#;ƒ÷LúãLËĸ‚aLä5úpLīĸ‘ü‰zį÷Aq$úŒį,Ŗ‚~ˆ÷úˆ[Ŗ4g‰3ˆBę$úBˆŠŖŠqI¸Ė#°$ú€IŠŖ‹L ĐĖ#úL ŖúLĪŖš%wBüRuč|‰3ˆ%Cc%úBˆâŖ‰qI% #)%ú€IâŖ‚L.#úLøŖúL'¤š@wBüRuč|M&bb&b†ņ’뭐ŸŌؐĢ뭐mސ!rZ.0Ԑ7rZBw^‘O‘aáö\ iö\ ›/ĐÅ/œR&¤zQœ'‘¤zQœ'‘¤âXR%‘ ¤įXR%‘öŚßđĀa&†&ā ”ļņāļÄ%âî–ÔÎ%ˆR& b¯œĸ&Š'øa&‘‰îĘË&ú$î:¤čĖu'…w&M¤‰cPUÎ'ø„PYŸƒwPi:$‰cPlÎB'ú„Pv¤ƒwP}:$/^c Uû鐊=’}֐§}֐tc ¯ö\ ß+Æ™'ž'ā ”āļÄ%âî–ÔÎ%ˆŠ'u=œÚ'Ŋ,ø™'‘‰îĘ(ú$îޤÍĒ(…¯'Ą¤‰cPQÎG(ú„PʤƒwPb:$‰cPeÎw(ú„Pō¤ƒwPv:$0^c Nû鐃=‹}֐ķ}Ö‰æDŽMĪĢ*úõD Ĩ‰ČĖ”7¨ø)ƒũĖúņĖĨúåĖ2Ĩ™Ė”7—úšĖĨú­Ė2Ĩ„”7 E”7~ú*EĨúEEĨŒx˧ ÍgúŒĖpĨŒ_Ч Í]úqŠpĨ‹3ˆ§ ÍŌúBˆ¨Ĩ‰qI§#š)ú€I¨Ĩ‹L­8Í#úLäĨúLĻšŋwBüRud‚"ÍËŠú1Í<ĻŗË ƒ,ŗúBŗQĻú6ŗmĻ„Ëč˛Ī ˛ƒķ˛ú ŗ€Ļú˙˛œĻŊ˛Ī Mšƒ˞úⲀĻúÖ˛œĻØá\ ‰æDųD΍,øõDwŸ‰ČĖ˙#¨÷+ƒũĖúņ˝ĻúåĖÂĻ™Ė˙#—úšĖ¯Ļú­ĖÂĻ„˙# E˙#~ú*E¯ĻøEVxĖgúŒĖÕĻ_Š]úqŠÕĻ‚3ˆŌúBˆõωqI#¸+ú€IõĻ‚L #úL§úLD§šwBüRuc‚"Í"Šø1ÍwŸŗ" ƒ,ŗúBŗW§ø6ŗS„"č˛&˛ƒķ˛ú ŗs§ú˙˛§Ŋ˛&Mšƒ˞úâ˛s§úÖ˛§/á\ tc =ö\ ›õōķœ!0IE%¤EV7ß6‘¤)7%‘Ĩend7%‘Ĩv8Ü:‘ PÍ 0Ÿķņ9%ĸ§Š”ehÍ9[-úŖeاúŖeا™7Q-.ŸÍIC%¨€ÍîĀÛD%Ÿq§E%G¨Šŗeo¨ÍFĀ-ƒÂeƒĖe‰ŗevFâ-ƒÂeƒĖe‰aō~F!.úōk¨úuō~¨„~…ō‘¨gŨû‰cP¨:].ú„P¤¨ƒwPŧ:$‰cPŋ;.ú„PܨƒwPĐ:$‰cPâ;Á.ú„Pô¨úwP Аī:$‰cP8=ņ.ú„P*ŠƒwPL:$‰cPO>!/ú„PbŠƒwP`:$‰cPt>U/ú„PzŠúwP’А:$‰cP?‰/ú„P°ŠúwPČŠœ:$¨ûéŨ=ú=cP}֐8ûéo=Š=§=´cPŊ}֐Ø}֐ë}֐āö\ ķö\ ÷ėōX_Æ$œ=0Ą0øûō‘øķ‘‚§ō Æ  úÆōæŠøšō‘‰”e Æ M•0ƒŖeƒŖe ÆŊ,ũ4ŋ0Ƃœš0á1˙ ”lH‘‰Ōō=Æûæ0úáō.ĒŠøaTÆĀÍ˙1úbYĒúbYĒØÍĖ1ži'qĒŠøapÆđÍS1úb¨Ēúb¨Ē‚ėō†ÆúķĀĒúûōĶĒ‚§ō‰Æ  úÆōæĒúšōĀlj”eŠÆ Mŋ1ƒŖeƒŖeœÆŊ,PÆŊ,mÆŊ,›!ķmœ3‰…%Ĩstrę3‘¤ψę|:‘Îģendķ°*‘l˙N%ŸØQ2Ģ42ŸOĄ÷$FĢŸ3’ %f̉ėSîč2øûS‘‚‹I6øšI‘‚qIÕø€I‘‚WI-øfI‘‰îî3ú îĢ"Ŋ_ :š=Ē1áIķV3œ%§%écŽ%éosŽ&7›uķcœX;œ%§% cÕ%‘ osÕ&7‘0ÎM;æˇãØĄķ’cP ×ã3ø„PūŸúwP¤Ģ:$—#3HÎØÅ8úJ3Ŧú@3lŦ’cP8—>4ú„PÉ­úwP᭐H:$’cP¨‘q4ú„Pô­úwP ސ¸:$’cPĐ š¤4ú„PŽúwP7ސā:$’cPđ ×4ú„PJŽúwPbސ:$’cP Š 5ú„PuŽúwPŽ :$’cP0 Ŗ=5ú„P ŽúwP¸Ž@:$’cPP Ŧp5ú„PËŽúwP㎐`:$’cPp  Ŗ5ú„PöŽúwP¯€:$’cP ĻÖ5ú„P!¯úwP9¯ :$’cP° ” 6ú„PL¯úwPd¯Ā:$’jäĐ¯(6úuäw¯—õb€Îŗŗ6ú(cī¯úcC°‰‹IŲ ¨6úšIqIÕú€IWI-úfI:$—3ˆ Îŗ*7úBˆ„°ŠqIĀÎ#ņ6ú€I„°‹LØÎ#úLž°úLø°šŌwBüR‘[—3ˆ#đÎŗĄ7úBˆą‰qI##h7ú€Ią‹L)Ī#úL6ąúLpąšÅwBüR‘`’—Pâ°Ô7ú¸PŽąúĢPšąô:$’3ˆŗK8úBˆĖą‰qI#8ú€IĖą‚L%#úLáąúL˛š4wBüR‘[’3ˆ4ŗ°8úBˆ!˛‰qI4#‰8ú€I!˛‚L:#úL5˛úLJ˛ėw(Mi—cPP ĪŲ9ú„P]˛úwPĩ˛`:$Č:$D:$:$—cP`HĪāS9ú„P ŗúwPTŗp:$_:$’cP‡ę†9ú„P”ŗúwPŦŗ—:$—cP}hĪčš9ú„PŋŗúwPẐŒ:$—õbŒ€Īč@:ú(c´ƒc‰‹IŒŲ 5:úšI´‚qIŒÕú€I´‚WIŒ-úfI´œ:$—3ˆœ Īčˇ:úBˆ&´ŠqIœ¸Ī#~:ú€I&´‚LĨ#úL;´úLh´š¸wBüR‘[’3ˆLč.;úBˆ{´‰qIL#õ:ú€I{´‚LR#úL´úLĨ´šawBüR‘[y=h=}w(Jö\ ›ĻķĀÆœ;žcí%¸´ osí&7‘‡ÎÆV3ü‘‘áĀķĐ;œ%§%écŽ%éosŽ&7›ėķkœŌCœ%§% cÕ%‘ osÕ&7‘ĐĪĮCæˇãØĄķ’cP ×]<ø„PūŸúwP×´:$—;čĪØ?AúÄ;;ĩúē;Ÿĩ’cP@—¸<ú„PAļúwPYļP:$’cP°‘ë<ú„PlļúwP„ļĀ:$’cPØš=ú„P—ļúwP¯ļč:$’cPđ Q=ú„PÂļúwPÚļ:$’cP Š„=ú„PíļúwPˇ :$’cP0 Ŗˇ=ú„PˇúwP0ˇ@:$’cPP Ŧę=ú„PCˇúwP[ˇ`:$’cPp  >ú„PnˇúwP†ˇ€:$’cP ĻP>ú„P™ˇúwPąˇ :$’cP° ”ƒ>ú„PġúwPܡĀ:$’jäĐ¯ĸ>úuäõb Đŗ-?ú(c]¸úcą¸‰‹IŲ "?úšI]¸‚qIÕú€I]¸‚WI-úfI]¸:$—3ˆ@Đŗ¤?úBˆō¸ŠqI`Đ#k?ú€Iō¸‹LxĐ#úL,šúLfššßwBüR‘[—3ˆ(Đŗ@úBˆ„š‰qI(#â?ú€I„š‹L.¨Đ#úL¤šúLŪššŌwBüR‘`’—Pę°N@ú¸PüšúĢP'ēü:$’3ˆ'ŗÅ@úBˆ:ē‰qI'#Œ@ú€I:ē‚L-#úLOēúL|ēš<wBüR‘[’3ˆ<ŗ*AúBˆē‰qI<#Aú€Iē‚LB#úLŖēúL¸ēņw(Mi—cPXĀĐؐAú„PËēúwP#ģh:$Đ:$I:$ :$—cPhčĐāÍAú„PzģúwPÂģx:$d:$’cPęBú„PŧúwPŧŸ:$—cPŠŅč3Bú„P-ŧúwPUŧ™:$—õb™ ŅčēBú(cŧƒc‰‹I™Ų ¯BúšIŧ‚qI™Õú€Iŧ‚WI™-úfIŧŠ:$—3ˆŠ@Ņč1CúBˆ”ŧŠqIŠXŅ#øBú€I”ŧ‚L˛#úLŠŧúLÖŧšÅwBüR‘[’3ˆTč¨CúBˆéŧ‰qIT#oCú€Iéŧ‚LZ#úLūŧúLŊšiwBüR‘[=m=Šw(Rö\ ›ôĐÆœDžcđ%&Ŋ osđ&7‘‡ŪÆĐ;ü‘‘›2ôūœ/Gœ$%§$% cÕ$%‘ osÕ&7‘pŅ$GŗˇãØĄķEŊ’cP רDø„PâŸúwPyŊ:$—cP(ŅŲŪDø„PūŸúwPÆŊ::$’cPPāEø„PžŸúwPž`:$’cPyęGEú„P=žúwPUž‰:$—cPĨ¨Ņč}Eø„PŨŸúwPhž´:$—õb´ĀŅčFú(c‡žƒc‰‹I´Ų ųEúšI‡ž‚qI´Õú€I‡ž‚WI´-úfI‡žÄ:$—3ˆÄāŅč{FúBˆœžŠqIÄøŅ#BFú€Iœž‚LÍ#úLąžúLŪžšÜwBüRuc’3ˆāčōFøBˆudŸ‰qIā#šFø€IudŸ‚Læ#úLņžúLŋšõwBüRucš(¤{GüPvüRsi=Ĩw(ūö\ ›^ôāÆœ}G wcö$%‘ osö&7‘‡åÆDü‘‘ü‘‘ßP­ŒGĸGā ”úîëp‹ŋ÷}Gą`KœžGSHøŒG‘ø–G‘Š3ˆŌŽHHúBˆ1ŋ‰qI#Hú€I1ŋ‹L(Ō#úLOŋúL‰ŋšIwBüR‘o-á\ äZ“eHzHā ”ų9āļÄ%ˆSHo8đÆAœ–H‚LøeH‘ŠÖîĮ@Ō“gIúåî§ŋ‹}GĮ@Ōú–GÖŋúŒG§ŋŠ3ˆ$Į`ŌŽ[IúBˆęŋ‰qI$Į#"Iú€Ięŋ‹L)ĮxŌ#úLĀúL*ĀšČĮwBüRuw=Įá\ ŠÖî@ĮŌ“/JúåîHĀ‹}G@ĮŌú–GwĀúŒGHĀŠ3ˆGĮ¨ŌŽ#JúBˆ‹Ā‰qIGĮ#ęIú€I‹Ā‹LLĮĀŌ#úLŠĀúLËĀš¸ĮwBüRuw\Įá\ Š3ˆ_ĮØŌ“§JúBˆé‰qI_Į#nJú€IéĀ‹LeĮđŌ#úL ÁúLGÁšˆĮwBüRuwŠ3ˆlĮĶ“KúBˆuÁŠqIlĮ Ķ#æJú€IuÁ‹LqĮ8Ķ#úL“ÁúLĩÁš ĮwBüRuwŠÖîĪĮPĶ“IKúåîĶÁÜĮ}GŠÖîÜĮhĶ“sKúåîéĮ}G‰3ˆéĮ“ëKúBˆ-ŠqIéĮ€Ķ#˛Kú€I-‹LėĮ˜Ķ#úLBÂúLošČwBüRuw‰3ˆČ“cLúBˆ‚‰qIČ#*Lú€I‚‚LČ#úL•ÂúLšČwBüRuwĮôJČö\ ,ČôJáxô LITËëxSÛ9߯¯LÄLā ”÷@āļÄ%÷ LžU@ČLœāL°Rø¯L‘‰T§XČ)d gMƒ|§úq§Õ‚Ø|XČ)(ƒ}ƒ}úõ|ę‚‚LbČ Ŧú”L5ÐoČzHwČá\ ŠŽîČ°Ķb 9NúîSË ¯Č°ĶŠú¯SÏ–ޙȠƒĨŽúģŽxÃú¯ŽšÃ„™ČaŽČ ˛ƒlŽú„Ž­ÃúxŽĪÏ6ŽČ MšƒEŽú[Ž­ÃúOŽĪÐĻČá\ ‰˛îŠČb OúÁîâ ­ŠČŠú¯­âÏ,­¯Č ƒ;­úQ­úÃúE­Ä„¯Č÷ŦŗČ ˛ƒ­ú­/Äú­QďĖŦŗČ MšƒÛŦúņŦ/ÄúåŦQĐŧČá\ ŠÖîŋČČĶb ĶOúåîdÄ‹}GŋČČĶú–GŒÄúŒGdÄŠ3ˆÉČāĶŽĮOúBˆ Ä‰qIÉČ#ŽOú€I Ä‹LÎČøĶ#úLžÄúLāÄšÉwBüRugŪČá\ Š3ˆáČÔb KPúBˆūĉqIáČ #Pú€IūÄ‹LęČ(Ô#úLFÅúL‚ÅšÉwBüRug‰Žî'Éb Qúî•Å‚ ¯'ÉŠú¯•ŏ–Ž-É ƒĨŽúģŽ­Åú¯ŽĪÅ„-ɏaŽ1É ˛ƒlŽú„ŽâÅúxŽÆ6Ž1É MšƒEŽú[ŽâÅúOŽÆ:Éá\ ‰˛î=Éb īQúÁîÆ‚ ­=ÉŠú¯­Æ,­CÉ ƒ;­úQ­/ÆúE­QÆ„Cɏ÷ŦGÉ ˛ƒ­ú­dÆú­†ÆĖŦGÉ MšƒÛŦúņŦdÆúåŦ†ÆPÉá\ ŠÖîVÉ@Ôb Rúåî™ÆdÉ}G‰3ˆdÉ(b ‘RúBˆÉÆŠqIdÉXÔ#XRú€IÉÆ‹LgÉpÔ#úLáÆúLĮšÉwBüRugČôJ$ÉôJˆÉö\ ÷ LbüÉœĖRęRø¯L‘žÉÄLŽĢÉá\ á’ôSITëxSë@áŦô&SITëxSV@ßt¸5SJSā ”lHāļÄ%ˆ&S9‡°ÉœfSaø5S‘‰ĐvČÉ^à Tƒøvúív!Į‚‹vČÉ^(ƒÂvƒĩvú¨vSĮ‹ęRØÉˆÔ ŦúüR­Į‚ LØÉTú¯LËĮáÉÄLéÉá\ ‰˙î&ĘJÆ™Tƒ'īúīŪĮ‚Ŧ›&ĘJ(ƒã›ƒ֛úɛVČ‹S0Ę Ô ŦúSŖČ‚*K0ĘTú9KÁȐ9Ęá\ Š:ī•ʸÔÁßTúIīÔČ‹Ås•ʸÔúŪs>ÉúÔsÔČŠ^īŽĘĐÔÁbVúmī‚É‹ufŽĘĐÔúŽfėÉú„f‚ÉŠšf¸ĘđÔŽVVúŠf0Ę’īŠŋĘ õkUúúŠYʐČĘda —3ˆËĘÕķâUúBˆlʉqIËĘ#ŠUú€IlĘ‹LĐĘ(Õ#úLŠĘúLŦĘšuĖwBüRud3ˆŒÍķúBˆĘʉqIŒÍ#Vú€IĘĘ‚L‘Í#úLŨĘúL Ëš ÍwBüRudäĘá\ ЇīįĘ@ÕÁ˛Vú™īË‚Ü6Ëí úë6‡Ë Ë7Ëá\ ŠĨS$ËXÕÁ+Yú´SšËxՊW…ĘSöˉôl$Ë 0+WúmšË‚¤l$Ë$úŊlšËúŗl%ˉGm'Ë 1mWúVmšË‚¤l'Ë6úŊl}Ėƒŗl‚-mJË 0úŅr] ‘SҐkŅr] ‘{ҐĐŌö\ īŌá\ Ķá\ á úÉlI_TpÛ9Ū†9ķ9Ū:‡9ķ9ŪD9í9âîŽ/@G ßĖ’Øl mā ”eë__nŽë__sŽœ'âîC“`“ũ§’hœ%mŲt˙ ”e‘œâĸGՌ)ÚĨ__xGŲt‘ĀמnŸęĨQÛ9SÚ‰Y} LŅmúm}qÚú…}Úúy}¤Ú} MŊú,}qÚúB}Úú6}¤Ú‹•3Ø×SúˎÚúŋåÚú˛"Û‹úĀ3Ø×‚ú;ÁˇÚú.ÁåÚú!Á"Û‹yĀ3Ø×_úēŽÚú­ĀåÚú Ā"ۍØ×…ÉĀ@Û‹}l3Ø×VúĢlˇÚúžlåÚú‘l"ۍØ×…ēl`ې]É^ „hîC^`“Ÿ0=``“†ÛŸYWaĨŒËÛŸ€obĨŒõÛŠÉlhđ×_’oøīlōŠc •âløØlVđׅūl]܉eh koƒ)eƒ)e‚CŊq“øcŊō*oƒWŊŠ„Ø`¸oƒ>ú1‡ÜŠÂ”(Øa;pú!¯܃+(؏éÁ”ĒúôÁØÜƒÂžÁ”MļúÍÁØÜúãÁë܃×Á r] ‰Y}Š ižpúm}˙Üú…}Ũúy}HŨ}Š MŊú,}˙ÜúB}Ũú6}HŨŠ5´@Ørirƒ‚úukŨúh•Ũú[ŗŨ‹Ũ´@Ø0.ƒ*úkŨú•ŨúŗŨ‹Œ´@Ø0úÁkŨúĩ•ŨúŠŗŨ@؅ĪŅŨŒJ´@Ø0~úkŨús•ŨúgŗŨŒ´@Ø0]ú<kŨú/•Ũú"ŗŨ‹ļ´@ØŌú÷kŨúę•ŨúŨŗŨ‹W´@Ø˛ú˜kŨú‹•Ũú~ŗŨ@؅§ŅŨ‹ ´@ØŒú9kŨú,•ŨúŗŨ@؅HņŨ;É^ Š5ÅXØy4tƒ‚úuŪúhAŪú[aŪ‹ŨÅXØ0.ƒ*úŪúAŪúaŪ‹ŒÅXØ0úÁŪúĩAŪúŠaŪX؅ĪŪŒJÅXØ0~úŪúsAŪúgaŪŒÅXØ0]ú<Ūú/AŪú"aŪ‹ļÅXØŌú÷ŪúęAŪúŨaŪ‹WÅXØ˛ú˜Ūú‹AŪú~aŪX؅§Ū‹ ÅXØŒú9Ūú,AŪúaŪX؅HŸŪÉ^ ‚,­×Šú;­ÅŪúQ­ØŪúE­ķŪ„×÷ŦÛ ˛ú­ßú­ßú­4ߏĖŦÛ MšúÛŦßúņŦßúåŦ4ߐäá\ :á5ú*uI_Tp%Ū†9–'Ū:‡9–'ŪD9|:âîŽ/@G ßߜ9unuā ”Žeë__nŽ—ë__sŽœ'âîC“sũēœfœ†u:}˙ ”Úe‘œâĸGč–GßĨ__xG:}‘xØwŸęĨQ%|߉(~ L2vú<~šßúT~ÅßúH~úߏė} MŊúû}šßú~Åßú~úß‹ú/ØSú1+āú$\āúŠā‹ŨÂ/Ø‚úÃ+āúÃ\āúÊā‹\Â/Ø_úÂ+āúÂ\āúƒÂŠāØ…ŦÂĮā‹Ūt/ØVú u+āú˙t\āúōtŠāØ…uįāUÉ^ „bîC^sŸ0=`s áŸYWa¸–Rៀob¸–páŠ*ub¨Ø_ķwøPuōŠc •Cuø9uV¨Ø…_uØá‰”ebĖwƒŖeƒŖe‚CŊg“øcŊō‹wƒWŊŠyzĀØ`xƒŖú–âŠõÇčØaœxúÄ?âƒÄč؏ĖÇĒú×ÃhâƒãÏĄÃ‡Mļú°ÃhâúÆÃ{âƒēАr] ‰(~Ŗ i˙xú<~âúT~­âúH~Íâė}Ŗ MŊúû}âú~­âú~Í⊚¯ŲrĘzƒįúÚđâúÍãúĀ,ã‹B¯Ų0.ƒú‚đâúuãúh,ã‹ņ¯Ų0ú&đâúãú,ãŲ…4X㌯¯Ų0~úäđâúØãúĖ,ãŒj¯Ų0]úĄđâú”ãú‡,㋯ŲŌú\đâúOãúB,ã‹ŧ¯Ų˛úũđâúđãúã,ãŲ… Xã‹p¯ŲŒúžđâú‘ãú„,ãŲ…­xã2É^ Šš¸ Ųy•|ƒįúÚŽãúÍØãúĀä‹B¸ Ų0.ƒú‚ŽãúuØãúhä‹ņ¸ Ų0ú&ŽãúØãúä Ų…4!䌯¸ Ų0~úäŽãúØØãúĖäŒj¸ Ų0]úĄŽãú”Øãú‡ä‹¸ ŲŌú\ŽãúOØãúBä‹ŧ¸ Ų˛úũŽãúđØãúãä Ų… !ä‹p¸ ŲŒúžŽãú‘Øãú„ä Ų…­AäÉ^ ‚–ŽĪŠúĨŽwäúģŽŠäú¯ŽĨä„ĪaŽĶ ˛úlޏäú„ŽËäúxŽæä6ŽĶ MšúEޏäú[ŽËäúOŽæäÜá\ ˆ:ß‘N}f}ā ”eë__x‘f}d:ß2›z}’}ā ”Úeë__x‘’}č:ũ;!͇œ¯}"˙ ”÷@‘œž|w Û9ųäŠ?}ĶHŲx d~úX}1åúN}^å‰Y} Ķ •Y~úm} åú…}ĩåúy}Ęå} Ķ MŊú,} åúB}ĩåú6}ĘårĶ m‰”e6Ķy Ž~úŖeŨåúŖeŨå‹k}>ĶhŲy ú„}æúz}Yæ‰(~GĶ•ú<~›æúT~°æúH~Åæė}GĶMŊúû}›æú~°æú~Åæ’Ķnuá^únI_Tp;Ū†9ĒBŪ:‡9ĒBŪD9¤BâîŽ/@G ßäČ}˛ā ”!fë__nŽÃë__sŽœ'âîC“xÉũŋČhœĘ~‡˙ ”Mf‘œâĸGíÂäæĨ__xG~‡‘ŲcŸęĨQ;į‰\ Lv€úp,įúˆJįú|_į  MŊú/,įúEJįú9_዁3¨ŲSú¸rįúĢ įúžŨį‹ĀÄ3¨Ų‚úÅrįúôÄ įúįÄŨį‹?Ä3¨Ų_ú€ÄrįúsÄ įúfÄŨį¨Ų…Äûį‹"3¨ŲVúPrįúC įú6Ũį¨Ų…_č]É^ „hîC^xɟ0=`xÉAčŸYWaŊ†čŸ€obŊ°čŠnhĀŲ_7‚ø”ōŠc •‡ø}VĀŲ…Ŗé‰fh ‚ƒfƒf‚CŊq“øcŊō΁ƒWŊŠā„ØŲ`]‚ƒ úũBéŠØÅ”øŲaā‚úįÅjéƒņōøŲ¯Å”ĒúēÅ“éƒÆÅ„Å”Mļú“Å“éúŠÅĻ郝Ő r] ‰\Š iCƒúpēéúˆØéú|ę Š MŊú/ēéúEØéú9ęŠ!´Úr…ƒnúa&ęúTPęúGnę‹É´Ú0.ƒú &ęúüPęúīnę‹x´Ú0ú­&ęúĄPęú•nęڅģŒęŒ6´Ú0~úk&ęú_PęúSnęŒņ´Ú0]ú(&ęúPęúnę‹ĸ´ÚŌúã&ęúÖPęúÉnę‹†Æ´Ú˛úĮÆ&ęúēÆPęú­ÆnęڅÖÆŒę‹Æ´ÚŒúFÆ&ęú9ÆPęú,ÆnęڅUÆŦę;É^ Š!Å(ÚyŲ†ƒnúaŌęúTüęúGë‹ÉÅ(Ú0.ƒú Ōęúüüęúīë‹xÅ(Ú0ú­ŌęúĄüęú•ë(څģ:ëŒ6Å(Ú0~úkŌęú_üęúSëŒņÅ(Ú0]ú(Ōęúüęúë‹ĸÅ(ÚŌúãŌęúÖüęúÉ닆ÆÅ(Ú˛úĮÆŌęúēÆüęú­Æë(څÖÆ:ë‹ÆÅ(ÚŒúFÆŌęú9Æüęú,Æë(څUÆZëÉ^ ‚d°×Šús°€ëú‰°“ëú}°Žë„׏/°Û ˛ú:°ÁëúR°ÔëúF°īë°Û Mšú°Áëú)°Ôëú°īëäá\ ģBßĘĘ’‡ˇ‡ā ”8ŠŪÎrˇ‡ŪŽWrŧ‡L;L;ßĐÉЇõ‡ā ”ØôŪÎDõ‡ŪŽWDú‡L;L;ßĄĖˆˆā ”8Šß7Į(ˆ@ˆā ”Mfë__x‘@ˆC¯Āž Ķ‚œ]ˆîū ”lHėHÚãĒ?_ü‰ėS ĶũˈøûSŸ‚‹I Ķ6øšIŸhڞposū€5ėŠLÕĶ€Ú‰úBLfėú5L ėú+LĀė‘é͊Lé͘Ú´‰úBLčėú5L íú+L3íŠ[NéͰÚŗ­‰úN[íútN íújN3튋IéĶČÚCĸ‰úšI3íbÕ$$‘ Ԋƒ‡ÔāÚėŒúЇƒíúœ‡üíú’‡fîŠÁ‡0ÔÛs!‹úᇰîúڇ)īúЇˆī‰3ˆãÕ!E’ŠúBˆÔī‰qIãÕ#YŠú€IÔī‚LéÕ#úLéīúLđšøÕwBüRud‰3ˆÖE ‹úBˆ)đ‰qIÖ#Ҋú€I)đ‚L Ö#úL>đúLkđšÖwBüRud‘HԑWԐ_Ôō‰iî_ÔsG‹ƒ‚îúxî~đŠ˙‡bÔ8Ûs‘ŒúˆēđŠŠyÔ`Û´š‹ú*Šîđú Š$ņ‚ÔfŠ3ˆ‚ÔxÛ´ŒúBˆMņŠqI‚Ô˜Û#Ų‹ú€IMņ‹L‹Ô°Û#úLkņúLņš ÕwBüRu`‰3ˆ„Õ´ŠŒúBˆĢņ‰qI„Õ#QŒú€IĢņ‚LŠÕ#úLĀņúLíņš™ÕwBüRu`‘wԉ}n™Õs׌úŒnō‚Sn™Õúlnōúbnō-Ôr] ÜÕá\ ŠI–ÔČÛĪúe)ōú[Rō‹"ĸÔāÛô ú;ōú1Ģō‹ˆĸÔøÛ| ú2ˆæōú(ˆķ‰\ŽÔ •úpVķúˆkķú|€ķ ŽÔ MŊú/VķúEkķú9€ķIÕ˛Š3ˆŊÔÜGŽúBˆ“ķ‰qIŊÔ#Žú€I“ķ‹LÃÔ0Ü#úLÂķúLņķš/ÕwBüRsŠ3ˆĘÔHÜŋŽúBˆô‰qIĘÔ#†Žú€Iô‹LĐÔ`Ü#úL1ôúLSôšÕwBüRs‰3ˆdÕ 7úBˆqô‰qIdÕ#ūŽú€Iqô‚LjÕ#úL†ôúLŗôšyÕwBüRuV‰3ˆ¸Õ¯úBˆÆô‰qI¸Õ#vú€IÆô‚LžÕ#úLÛôúLõšÍÕwBüRuVĮĶ͐Ôr] ķÔ"] ˙Ô´^ ĩÕá\ ‚Õö\ Ē1÷"ĻĘ0ÖGœļø1‘ú;õ‹ˆ7ÖxÜ| ú2ˆSõú(ˆ€õ‰\?Ö •ǐúpÂõúˆ×õú|ėõ ?Ö MŊú/ÂõúE×õú9ėõrÖ˛÷I €€ÖGœŌž‘ø[‘øe‘‹"‘Ö˜Üô ú;˙õú1)ö‹ˆ‘Ö°Ü| ú2ˆaöú(ˆŽö‰\™Ö •‘‘úpĖöúˆáöú|öö ™Ö MŊú/ĖöúEáöú9ööÂÖ˛ˆs¤äĐÖwœē‘Ւø…‘ø‘ĐÜʒú ÷ú…'÷‹I×ĐÜúe ÷ú['÷‹"×čÜô ú;E÷ú1c÷‹ˆ×Ũ| ú2ˆš÷ú(ˆÔ÷‰\× •ŧ’úpøúˆ&øú|;ø × MŊú/øúE&øú9;øBײîÖā›áŠÁ“âīkeyäâî–Ôį%áÅÆ-“âīkeyäâî–Ôį%ßX¸<“T“ā ”lHŪŋ…šéGˆ-“ ËP×Wœp“—žø<“‘øF“‘Н‹V× ŨŊ¨“úž‹Nø‘z׉}× ŊŌ“úúŦų‰Ä‡× Ŋü“úŨ}ųúĶĖųŠŠ:—×@ŨŊŋ”ú™:úpŨ…Ĩ:ˆú‰cPčŲu[”ú„PŌúƒwPųŲ:$‰cPüŲu‹”ú„PúúƒwP Ú:$¤×c åŲûéÚ=%Ú}֐{Û}ÖŠë´×˜ŨŊĒ•ƒúúû‹Ւ´×ØŨōØŨ¨â’‘LŪ…ņ’tû‰cPÛįD•ú„PžûƒwPÛ:$‰cPÛįt•ú„PæûƒwP-Û:$Ė×Ĩc Ûûé:Û=EÛ}֐{Ü}ÖŠĖđÜ×8ŪŊ7—úŪđūûŠŠ:Ü×pŪ Œ–ú™:ūû¨Ū…Ĩ:mü‰cP¨Úu(–ú„PˇüƒwPšÚ:$‰cPŧÚuX–ú„PßüƒwPÍÚ:$lØc ĨÚûéÚÚ=åÚ}֐aÜ}Ö‰?đ‰Ø ã–úNđ÷ü‚ĸ‰Øúĸ÷übĸ‰Ø}úqĸ÷ü‚Yđ§Ø úhđsũ‚Ĩ§Øú#Ĩsũõ¤§Ø}úĨsũ‰ß×ŊŽ—ú&īũ‚¤ŗß×úŗŗīũŠŗß×}ú™ŗīũŠ1ôרŪŊå—ú@mū‹´ôרŪú ´mūŒōŗôרŪ}ú´mū‰˛đØŊ<˜úÁđëū‚ŽØú&Žëūø­Ø}úŽëū‰K-ØŊ¯˜úZi˙‚ø -Ø .úĄi˙‚Ų -Øúč i˙ē -Ø}úÉ i˙‰eŲ Ŋؘú~æ˙út*‰‘6Ų Ŋ™úǧú ë‰ļNŲē#™úĮh‰ŌTŲŊM™úëˆúᨊ÷ZŲđŪŊ‰šú%Š“ZŲ ßÃ5š ߨ“‘X@߅“ĸ‰cPEÚįЙú„PƒwPVÚ:$‰cPYÚįšú„P0ƒwPjÚ:$hŲĨc BÚûéyÚ=Ú}֐DÜ}Ö‚2î|ŲÄúAîH‚ĀÍ|ŲúĪÍHĻÍ|Ų}úĩÍH‰°ŲžКú%›‰ɋOÛ Ŋ<›úڋŽ3ˆOÛ ;úBˆŽ‰qIOÛ#›ú€IŽ‚LUÛ#úLÃúLđšdÛwBüRuO‰:ī‚ÛŊ‚›úIī‚Ås‚ÛúŪsúÔsŠ^ī˜Û`ßŊŦ›úmī-¨Ûuf‰‡ī¨ÛŊĖ›ú™ī\‰ŽîÛÛŊžœúîr‚ ¯ÛÛŠú¯r–ŽŪÛ ƒĨŽúģŽˆú¯ŽĻ„ŪۏaŽåÛ ˛ƒlŽú„ŽšúxŽ×6ŽåÛ MšƒEŽú[ŽšúOŽ×îÛá\ ‰ŽīņÛŊpúŊīę‚ĩņÛŠúĩꏐ´ôÛ ƒŸ´úĩ´úŠ´„ôۏ[´øÛ ˛ƒf´ú~´1úr´O0´øÛ Mšƒ?´úU´1úI´OÜá\ ‰ŌīÜŊBžúáīb‚˛ÜŠú˛b˛Ü ƒ˛ú(˛xú˛–„܏α Ü ˛ƒŲąúņąŠúåąĮŖą Ü Mšƒ˛ąúČąŠúŧąĮÜá\ éØīšLŲr] ŽŲr] ŊŲsmÛö\ ĖÛôJ‘Ûۑ#ܑ1ܑ‘Üß°(Ļžąžā ”äG÷—ž!T°ÜæœÍžԟøĻž‘ŠŠ:ÅÜx߀™Ÿú™:ڍ˜ß…Ĩ:ø‰cPŨu5Ÿú„P7ƒwP)Ũ:$‰cP,ŨueŸú„POƒwP=Ũ:$ÍÜc ŨûéJŨ=UŨ}֐kŨ}֐įÜr] ōÜT“sŨö\ ~Ũá\ ‘ŠŨ’Ũö\ §0ųũ ŨŒœY °ß ¨= ÁŨr^ åŨąž$ŪÆc ™åŨ&N ¨= ņŨŒ^ ŪÖc ,Ūö\ Ŗšĩ”0Ū¸œMļØßBļŸ6•0‘gî륙0‘ĒHŊ ‘ŧĒ3’­‘T‰ŌS9Ū•û øáSŸ‚WI9ŪøfIŸ‰TFŪ™/Ąú#T”úTÐQŪ‹] Š÷ŧhŪđß āĄúŊÖúŊ ’3ˆ=ã@ĪĄúBˆ\‰qI=ã#–Ąú€I\‚LCã#úLqúLžšRãwBüR‘\‘|ې„Ū5ģāMĸúBˆąŠqI„Ū8ā#ĸú€Ią‹LŪPā#úL úLå š(áwBüR‘\‰f˜ŪĄēĸúx „˜Ū…„ ‚ŌS˜ŪúáS ‚WI˜ŪúfI ‰÷ŧˇŪĻôĸúŊ. úŊ› ‘ÆŪÎŪ5ģ‰LāŪĻgŖú[ ‚–[āŪ_úĨ[2 ŌSāŪNúáS2 ‚WIāŪúfI2 Š÷ŧíŪhāĻĄŖúŊJ úŊ§ ‘øŪß5ģŠ“߈⍤úŦ8 úĸa ŒĸS߈āEúģS8 úąSa ŒvSß āJúS8 ú…Sa ßūŠɋ߸āϞ¤úڋ— Œ3ˆߨā;úBˆĩ ŠqIßøā#x¤ú€Iĩ ‹L(ßá#úLúL%š—áwBüRvŠɋ3ß(áĻEĨúڋCŒ3ˆ3ß@á;úBˆe‰qI3ß# Ĩú€Ie‹L9ßXá#úLĄúLŋšWáwBüRvŠ3ˆDßpáĻŊĨúBˆŨ‰qIDß#„Ĩú€IŨ‹LJ߈á#úL˙úLšgáwBüRvŠɋUß áĻPĻúڋ;Œ3ˆU߸á;úBˆ;‰qIUß#Ļú€I;‹L[ßĐá#úL]úL{šwáwBüRvŠ3ˆfßčáĻČĻúBˆ™‰qIfß#Ļú€I™‹Llßâ#úLģúLŲš‡áwBüRvŠī‹zßâĒ §úŒ÷‚ėSzß(úûS÷‚‹Izß6úšI÷Šɋß0â°ŗ§úڋhŒ3ˆßHâ;úBˆh‰qIß#y§ú€Ih‹L–ß`â#úL{úLŽšáwBüRv‰ŌSÃ߯ī§úáSĄ‚WIÃßúfIĄxâw¨úڋÕŒ3ˆāߘâ;úBˆŠqIā߸â#=¨ú€I‹LéßĐâ#úLMúL”š¸áwBüR‘TŠ3ˆôßčâ¯ņ¨úBˆ˛‰qIôß#ļ¨ú€I˛‹Lúßã#úLÛúL š¨áwBüR‘°Šɋā㯄Šúڋ(Œ3ˆā0ã;úBˆ(ŠqIāHã#JŠú€I(‚Lā#úL=úLPš/āwBüRvŠ÷ŧMā`ãž5ĒúŊcúŊå’3ˆLâ@$ĒúBˆ\‰qILâ#ëŠú€I\‚LRâ#úLoúLœšaâwBüR‘`‘^āfā5ģ‰Luāž¨Ēú[¯‚–[uā_úĨ[ŌSuāNúáS‚WIuāúfIŠ÷ŧ‡āxãžYĢúŊÚúŊD’3ˆã @HĢúBˆx‰qIã#Ģú€Ix‚L‡ã#úL‹úL¸ššãwBüR‘`‘’āšā5ģŠɋĩā ãžėĢúڋËŒ3ˆĩāĀã;úBˆéŠqIĩāāã#˛Ģú€Ié‹Lžāøã#úL7úLqšČáwBüR‘LŠɋÉāäžŦúڋŒ3ˆÉā(ä;úBˆ­‰qIÉā#EŦú€I­‹LĪā@ä#úLåúLšįáwBüRvŠ3ˆÚāXäž÷ŦúBˆ!‰qIÚā#žŦú€I!‹Lāāpä#úLPúLyš×áwBüRvŠɋëāˆäžŠ­úڋ—Œ3ˆëā ä;úBˆ—‰qIëā#P­ú€I—‹Lņā¸ä#úLšúLך÷áwBüRv‰3ˆüāžđ­úBˆõ‰qIüā#É­ú€Iõ‚Lá#úL úL‰3ˆūážhŽúBˆ0‰qIūá#/Žú€I0‚Lâ#úLEúLršâwBüR‘L‰ɋâžûŽúڋ…3ˆâ;úBˆ…‰qIâ#ÁŽú€I…‚Lâ#úLšúLĮš(âwBüR‘L‰3ˆ(â$žs¯úBˆÚ‰qI(â#:¯ú€IÚ‚L.â#úLīúLš=âwBüR‘L‰ɋiâž°úڋ/3ˆiâ;úBˆ/‰qIiâ#˝ú€I/‚Loâ#úLBúLoš~âwBüR‘L‰ɋ~â ž™°úڋ‚3ˆ~â ;úBˆ‚‰qI~â#_°ú€I‚‚L„â#úL•úLš—âwBüR‘L‰ɋžâĻ,ąúڋՏ3ˆžâ;úBˆÕ‰qIžâ#ō°ú€IÕ‚L¤â#úLčúLûš˛âwBüRv‰ɋ˛âĻŋąúڋ3ˆ˛â;úBˆ‰qI˛â#…ąú€I‚L¸â#úL#úL6šÆâwBüRv‰3ˆÆâĻ7˛úBˆI‰qIÆâ#ūąú€II‚LĖâ#úL^úLqšÚâwBüRv‰ɋÚâĻʲúڋ„3ˆÚâ;úBˆ„‰qIÚâ#˛ú€I„‚Lāâ#úL™úLŦšîâwBüRv‰3ˆîâ Ļ0ŗúBˆŋ‰qIîâ# ŗú€Iŋ‚Lôâ#úLÔúLį‰ɋûâ(°Äŗúڋú3ˆûâ(;úBˆú‰qIûâ#‰ŗú€Iú‚Lã"#úLúL>šãwBüR‘ŋ‰ɋ#ã¯W´úڋQ3ˆ#ã;úBˆQ‰qI#ã#´ú€IQ‚L)ã#úLfúLyš7ãwBüRv™Rã/Č´úBˆŒ‰qIRã#´ú€IŒ‚LXã)#úLŸúLĖškãwBüR‘\™ĄãTĩúڋߏ3ˆĄã;úBˆß‰qIĄã#ĩú€Iß‚L§ã#úLôúL!šļãwBüR‘T™ļã2ÅĩúBˆ4‰qIļã#Œĩú€I4‚Lŧã,#úLGúLtšĪãwBüR‘T‘sŪ‘ĩېÖŪ0‘ėېߔÁ‘ßĀß[XĪߙÁāßSā‘ā‘Mānā0‘†āĒā”Á‘ĩā‘DáFâö\ ›&đã+œŦļ‰žķãtļøã0‰ÜûãtĄļú'܇äEx›8 ä+œ ˇ‰ž#äzāļ(ä0‰Ü+äzˇú'ܨGäŅx›ÆôPä*œcˇéG‘¤Ũ%‘‰žXäXˇ]ä0qä—]›åô€äxœĒ¸ą-BûǏ‘„„ätŗšŧ˙ÂTɉž„䎐‰ä0‰=‰ä üˇúLį‚˜a‰ä ˙ú§a™–ä>t¸îŋ…ĄDŠW–äĐäK¸ún-úbEĻäôc ˛äd Āä*d Čä´^ ÔäGd ‰ _ķä ”¸øä^ įä*d ķä´^ Ē1áúôšëfd8%âîīģ9įûîJ°:J÷îÃ;;%âî^G%¯3Ųå]œšžÆ˙ ”]‘čäÆĒšŧĒ%‘Ŋ}Ÿk?Ģ%Y‰œ÷.å˛š•Ā÷úŗ÷‚ú§÷<åZd ‰2]Lå ļˇšúA]úK]/å%žŸ‹Î%C‰īŠbå ÎüšúúŠamåda ‰3ˆöéÎuēúBˆ‰qIöé #;ēú€I‚L˙é#úL—úLÆšęwBüR‘Ã}‰3ˆęÎîēúBˆŲ‰qIę #´ēú€IŲ‚Lę#úLīúLš,ęwBüR‘Ã}‰3ˆ,ęÎgģúBˆ1‰qI,ę #-ģú€I1‚L5ę#úLGúLvšGęwBüR‘Ã}‰3ˆGęÎāģúBˆ‰‰qIGę #Ļģú€I‰‚LPę#úLŸúLΚbęwBüR‘Ã}‰3ˆbę&ÎYŧúBˆá‰qIbę #ŧú€Iá‚Lkę#úL÷úL&šęwBüR‘Ã}‰3ˆˆę+ÎŌŧúBˆ9‰qIˆę #˜ŧú€I9‚L‘ę"#úLOúL~š§ęwBüR‘Ã}‰3ˆëÎKŊúBˆ‘‰qIë #Ŋú€I‘‚Lë#úL¤úLĶš ëwBüR‘Ã}‰3ˆ ë=ÎÄŊúBˆæ‰qI ë #ŠŊú€Iæ‚L)ë4#úLųúL( š?ëwBüR‘Ã}]åŊ_ ŽåiĨ‘Âå×嗭ë嗭æ*旭)旭=旭Cæcˇ‰s]uåĪOžú‚]; úŒ]O Šõbƒæ(åĖÛžú(cd úcz ‰‹IƒæŲ ĐžúšId ‚qIƒæÕú€Id ‚WIƒæ-úfId –æ:$Š3ˆžæ@åĖSŋúBˆ ŠqIžæXå#ŋú€I ‚LĒæ#úLŖ úLļ šŧæwBüRw‰2]įæ Ŋ}ŋúA]É úK]Ũ Н¸ûæpåÃÅúē¸ņ på¨ȸ‘Ė}¨Õ¸‘ā}…â¸;!‰œ÷ į>ūŋúĀ÷o!úŗ÷Ģ!ú§÷""/įZd ˆåáÁ…ņ¸l"Šõbį¨åIžĀú(c›"úcŋ"‰‹IįŲ “ĀúšI›"‚qIįÕú€I›"‚WIį-úfI›"Ŗį:$Š3ˆĶįĀåIÁúBˆŌ"ŠqIĶįāå#ŨĀú€IŌ"‹Lßįøå#úLö"úL3#šbéwBüR‘ā}‰3ˆĶé#IÁúBˆQ#‰qIĶé #VÁú€IQ#‚LÜé#úLg#úL–#šîéwBüR‘ā}dįmļįû鐐įcP°įcPžį=ËįcPĶį}֐Đé}ÖŠīæåčæE ÂúįŠ#úč&bŠõbé(æE“Âú(cÛ#ƒc‰‹IéŲ ˆÂúšIÛ#‚qIéÕú€IÛ#‚WIé-úfIÛ#,é:$Š3ˆ4é@æE ÃúBˆ˙#ŠqI4éXæ#ŌÂú€I˙#‚L@é#úL$úL($šRéwBüRv‰3ˆuéE„ÃúBˆ;$‰qIué #JÃú€I;$‚L~é#úLQ$úL€$šéwBüR‘Ø}‰Mįęį&JåÃú^į“$kęį&Uúk“$‚åjęį&úūjŠ$úôj“$‰`÷čN@pÄú€÷Ŋ$úv÷Đ$„čN…|cŒcPčpæƒú„PŊ$úwPæ$ŠO萿cÄú"OŊ$^č:$‰Mįé5JŅÄú^į˙$ké5Uúk˙$‚åjé5úūj%úôj˙$įīįHįŊ_ éûé4é}֐ré}Ö‰2]fč Ā/ÅúA])%úK]=%‰ŅP­č ČcÅúęPQ%úāPd%´čč<‰2]Ņč ēÅúA]w%úK]‹%‰3ˆĪę$ĖÆúBˆŸ%‰qIĪę #ĖÅú€IŸ%‚LØę#úLĩ%úLä%šîęwBüR‘Ü}%åŊ_ ]æmļræû鐃æcPžæ}֐čû鐞čcPĢčcPÁčcPÉč}֐žę}֐ūę}֐¯éö\ ¸éŊ_ Æęö\ ũe×`ëÅœļÆƒË˙ ”]‘¤JpÖmĻ‘°æxËĒmáÚĸ'‘šČæmËŸ‹Ū%÷%‰ƒšëŪDĮ•§úš&úŽ6&¨ëüb ‰3ˆOėŪŊĮúBˆJ&‰qIOė#ƒĮú€IJ&‚LUė#úL_&úLŽ&šdėwBüR‘ŋ‰3ˆdėŪ6ČúBˆĄ&‰qIdė#üĮú€IĄ&‚Ljė#úL´&úLã&šyėwBüR‘ŋ‰3ˆyėŪ¯ČúBˆö&‰qIyė#uČú€Iö&‚Lė#úL 'úL:'šŽėwBüR‘ŋ‰3ˆŽėŪ(ÉúBˆM'‰qIŽė#îČú€IM'‚L”ė#úLb'úL‘'šŖėwBüR‘ŋ‰3ˆŖėŪĄÉúBˆ¤'‰qIŖė#gÉú€I¤'‚LŠė#úLš'úLč'š¸ėwBüR‘ŋ‰3ˆ¸ėŪĘúBˆû'‰qI¸ė#āÉú€Iû'‚Lžė#úL(úL?(šÍėwBüR‘ŋ‰3ˆÍėŪ“ĘúBˆR(‰qIÍė#YĘú€IR(‚LĶė#úLg(úL–(šâėwBüR‘ŋ‰3ˆâėCŪ ËúBˆŠ(‰qIâė#ŌĘú€IŠ(‚Lčė=#úLž(úLí(š÷ėwBüR‘ŋ•ëŊ_ ĶëiĨ‘äëö뗭ė—­ė*%ė—­6ė—­Gė—­MėcˇēëGd íö\ ũ“Õ0íŨœ›ËQĐ˙ ”^‘āæFĐĒ™Á%%‘¸įĐŸ‹&%)‰3ˆ6î &WĖúBˆ)‰qI6î#Ėú€I)‚L<î#úL3)úLb)šKîwBüR‘ģ‰3ˆVî&ĐĖúBˆu)‰qIVî#–Ėú€Iu)‚L\î#úLŠ)úLš)škîwBüR‘ģ‰3ˆkî&IÍúBˆĖ)‰qIkî#Íú€IĖ)‚Lqî#úLß)úL*š€îwBüR‘ģ‰3ˆ€î&ÂÍúBˆ!*‰qI€î#ˆÍú€I!*‚L†î#úL6*úLe*š•îwBüR‘ģ‰3ˆ•î&;ÎúBˆx*‰qI•î#Îú€Ix*‚L›î#úL*úLŧ*šĒîwBüR‘ģ‰3ˆĒî&´ÎúBˆĪ*‰qIĒî#zÎú€IĪ*‚L°î#úLä*úL+šŋîwBüR‘ģ‰3ˆŋî&-ĪúBˆ&+‰qIŋî#ķÎú€I&+‚LÅî#úL;+úLj+šÔîwBüR‘ģ‰3ˆÔî9&ĻĪúBˆ}+‰qIÔî#lĪú€I}+‚LÚî3#úL’+úLÁ+šíîwBüR‘ģmíŊ_ €ízd ēíiĨ‘ËíŨ헭î헭ûí* .4îcˇ‰ė\‹í';Đúû\Ô+ú]ķ+\횐Tîö\ ßD×`ĐuĐā ”]āļÄ%÷\¨j\œ‘ĐuÔøn‘Š  į-jÔú,‹QĐ įú`Đ,‰3ˆąvLŅúBˆ1,‰qIą#Ņú€I1,‚Lˇ#úLF,úLs,šÆwBüRuF‰3ˆÆvÄŅúBˆ†,‰qIÆ#‹Ņú€I†,‚LĖ#úL›,úLČ,šÛwBüRuF‰3ˆÛv<ŌúBˆÛ,‰qIÛ#Ōú€IÛ,‚Lá#úLđ,úL-šđwBüRuF‰3ˆđv´ŌúBˆ0-‰qIđ#{Ōú€I0-‚Lö#úLE-úLr-šwBüRuF‰3ˆv,ĶúBˆ…-‰qI#ķŌú€I…-‚L #úLš-úLĮ-šwBüRuF‰3ˆv¤ĶúBˆÚ-‰qI#kĶú€IÚ-‚L #úLī-úL.š/wBüRuF‰3ˆ/-vÔúBˆ/.‰qI/#ãĶú€I/.‚L5'#úLD.úLY.šCwBüRv<iĨ‘J\—­m—­}*ޗ­Ÿ—­ĨcˇLö\ ÷0˙†\œ‘ÔuØøB‘Š  8įdjØúl.‹QĐ 8įú`Đl.‰3ˆąvLÕúBˆ—.‰qIą#Õú€I—.‚Lˇ#úLŦ.úLŲ.šÆwBüRuF‰3ˆÆvÄÕúBˆė.‰qIÆ#‹Õú€Iė.‚LĖ#úL/úL./šÛwBüRuF‰3ˆÛv<ÖúBˆA/‰qIÛ#Öú€IA/‚Lá#úLV/úLƒ/šđwBüRuF‰3ˆđv´ÖúBˆ–/‰qIđ#{Öú€I–/‚Lö#úLĢ/úLØ/šwBüRuF‰3ˆv,×úBˆë/‰qI#ķÖú€Ië/‚L #úL0úL-0šwBüRuF‰3ˆv¤×úBˆ@0‰qI#k×ú€I@0‚L #úLU0úL‚0š/wBüRuF‰3ˆ/-vØúBˆ•0‰qI/#ã×ú€I•0‚L5'#úLĒ0úLŋ0šCwBüRv<iĨ‘J\—­m—­}*ޗ­Ÿ—­ĨcˇLö\ ÷\ōthœ‘Ø›Üøn‘Š\ Pį-†ÜúnŌ0‹  Pį-úŌ0‹QĐ Pįú`ĐŌ0‰3ˆŊvgŲúBˆ 1‰qIŊ#.Ųú€I 1‚LÃ#úL51úLb1šŌwBüRuF‰3ˆŌvßŲúBˆu1‰qIŌ#ĻŲú€Iu1‚LØ#úLŠ1úLˇ1šįwBüRuF‰3ˆįvWÚúBˆĘ1‰qIį#Úú€IĘ1‚Lí#úLß1úL 2šüwBüRuF‰3ˆüvĪÚúBˆ2‰qIü#–Úú€I2‚L#úL42úLa2šwBüRuF‰3ˆvGÛúBˆt2‰qI#Ûú€It2‚L#úL‰2úLļ2š&wBüRuF‰3ˆ&vŋÛúBˆÉ2‰qI&#†Ûú€IÉ2‚L,#úLŪ2úL 3š;wBüRuF‰3ˆ;-v7ÜúBˆ3‰qI;#ūÛú€I3‚LA'#úL33úLH3šOwBüRvHiĨ‘Vh—­y—­‰*𗭐̗­ącˇ!á\ Xö\ ÷0ahœˇÜÁāøB‘Š0 hįdŦāúB[3‹  hįdú[3‹QĐ hįú`Đ[3‰3ˆŊvŨúBˆŠ3‰qIŊ#TŨú€IŠ3‚LÃ#úLž3úLë3šŌwBüRuF‰3ˆŌvŪúBˆū3‰qIŌ#ĖŨú€Iū3‚LØ#úL4úL@4šįwBüRuF‰3ˆįv}ŪúBˆS4‰qIį#DŪú€IS4‚Lí#úLh4úL•4šüwBüRuF‰3ˆüvõŪúBˆ¨4‰qIü#ŧŪú€I¨4‚L#úLŊ4úLę4šwBüRuF‰3ˆvmßúBˆũ4‰qI#4ßú€Iũ4‚L#úL5úL?5š&wBüRuF‰3ˆ&våßúBˆR5‰qI&#Ŧßú€IR5‚L,#úLg5úL”5š;wBüRuF‰3ˆ;-v]āúBˆ§5‰qI;#$āú€I§5‚LA'#úLŧ5úLŅ5šOwBüRvHiĨ‘Vh—­y—­‰*𗭐̗­ącˇ!á\ Xö\ ßÕĻĐāëāā ”ë6âîŖÃPų9÷Áā+MībœáÔáøĐā‘€įÉáŦÜā‰ž īP@á%ī0‰3ˆTīS¸áøBˆutŸ‰qITī#áø€IutŸ‚LZī#úLä5úL6šiīwBüRus‘JīRīcˇrīö\ ÷ŧč8€īNœđáDâøË‘øÕ‘øâ‘‹ˆˆī˜įøŽ‘øĄ‘ú—$6ŽīëāēĻĻĐī2œã¤“0Yœ'‘¤a Y°1‘¤ˇÎZœ'‘¤ Z%‘ ¤ĸŗZŖG‘‰žĶī[ČâØī0‹đØī°į[ú˙C6‹ŲaØī°įúčab6¯NÖđœãķ˙ ”ƒ‘Čįķîe*7€5Ēŋ#<ፑXŸJķ‰6Šd*đč9‚æ•o*č¨}*‘X—Qų%đ čÛõãøqųx Ÿúgų§6 č…|cŒcP(đ8čƒø„Px ŸúwP÷6;đ:$—“ų;đXčÜ[äúŗų7úŠųR7Xč…|cŒcPAđxčƒú„P7úwP¯7Qđ:$—OčQđ˜čÜÁäúočĪ7úeč8˜č…|cŒcPWđ¸čƒú„PĪ7úwPd8gđ:$—&égđØčÜ'åúFé„8ú<éŧ8Øč…|cŒcPmđøčƒú„P„8úwP9}đ:$—åų}đéŪåúú99úûųq9é…|cŒcPƒđ8éƒú„P99úwPÎ9“đ:$—īæ”đXéáļåúįî9Ąđ&b—MįĄđxéáæú^įK:ŒkĄđéUúkK:‹åjĄđ¨éúūj¨:úôjK:’MįZöávæú^įÔ:kZöUúkÔ:‚åjZöúūjį:úôjÔ:%đīįŠõbÉđĀé9 įú(cû:ƒc‰‹IÉđŲ ˙æúšIû:‚qIÉđÕú€Iû:‚WIÉđ-úfIû:Ũđ:$Š3ˆåđØé9‚įúBˆž<ŠqIåđøé#Iįú€Iž<‹Lîđę#úLi>úLČ>š_ķwBüRvŠų ņ(ę?Ōįú(ųæ>‹vS ņ@ędúSæ>ú…S˙?-ņūŠ3ˆ-ņXę?JčúBˆg@ŠqI-ņxę#čú€Ig@‹L6ņę#úL€AúLmBšPķwBüR‘T‰ Aņ@jčUņOî‰ Uņ HŠčaņ´^ ¨ę韋N%‹B…ņŊ_ •ņda $ōiĨ‘8ōMō—­`ō—­qō*ō—­ō—­žō—­¤ōcˇ‰ŗ]ņO:éúÂ]ŠBúĖ]ČB‰žŖņVZ鐨ņ0Ўa¨ņĀęV éúÉaÜB‚[˛ņ -ú[Cú[CØęîퟋZ%GC‰3ˆVõZ4ęúBˆeC‰qIVõ#úéú€IeC‚L\õ#úL{CúLĒCškõwBüR‘ˇ‰3ˆkõ Z­ęúBˆŊC‰qIkõ#sęú€IŊC‚Lqõ#úLŌCúLDš„õwBüR‘ˇ‰3ˆ‹õZ&ëúBˆD‰qI‹õ#ėęú€ID‚L‘õ#úL)DúLXDš õwBüR‘ˇ‰3ˆ¤õZŸëúBˆkD‰qI¤õ#eëú€IkD‚LĒõ#úL€DúL¯DššõwBüR‘ˇ‰3ˆŊõZėúBˆÂD‰qIŊõ#Ūëú€IÂD‚LÃõ#úL×DúLEšŌõwBüR‘ˇ‰3ˆÖõ$Z‘ėúBˆE‰qIÖõ#Wėú€IE‚LÜõ#úL.EúL]EšëõwBüR‘ˇ‰3ˆúõZ íúBˆpE‰qIúõ#Đėú€IpE‚Lö#úLƒEúL˛EšöwBüR‘ˇ‰3ˆ3ö'ZƒíúBˆÅE‰qI3ö#Iíú€IÅE‚L9ö!#úLÚEúL FšHöwBüR‘ˇÕņŊ_ éņda ĮōiĨ‘Øōíō—­ķ—­ķ*헭0ķ—­>ķ—­DķcˇŠs]ņņë[îú‚]FúŒ];F‰& ôņ\Bîú? OFú5 cF‰Ų]tņLlîúč]‚Fúō]G‰3ˆņķKåîúBˆ)G‰qIņķ#Ģîú€I)G‚L÷ķ#úL>GúLmGšôwBüR‘¸‰3ˆôK^īúBˆ€G‰qIô#$īú€I€G‚L ô#úL“GúLÂGšôwBüR‘¸‰3ˆôK×īúBˆÕG‰qIô#īú€IÕG‚L!ô#úLęGúLHš0ôwBüR‘¸‰3ˆ0ôKPđúBˆ,H‰qI0ô#đú€I,H‚L6ô#úLAHúLpHšEôwBüR‘¸‰3ˆEôKÉđúBˆƒH‰qIEô#đú€IƒH‚LKô#úL˜HúLĮHšZôwBüR‘¸‰3ˆZôKBņúBˆÚH‰qIZô#ņú€IÚH‚L`ô#úLđHúLIšoôwBüR‘¸‰3ˆoô!KģņúBˆ2I‰qIoô#ņú€I2I‚Luô#úLGIúLvIš„ôwBüR‘¸‰3ˆö ?3ōúBˆ‰I‰qIö#úņú€I‰I‚Lö#úLžIúLËIš,öwBüR‘TÉđûéåđ}֐ņ™d ‘ ņfņ¯d €ķiĨ‘–퐍헭ģķ—­Ęķ*Ûķ—­éķ—­īķcˇŦôiĨ‘Ãô×ô—­ęô—­öô*õ—­õ—­õcˇƒö}֐ôö\ †ŽũÔ öœ,ķÛū˙ ”ŖT‘¤“0œ'‘¤a °1‘¤ˇÎ‚œ'‘ ¤ ‚%‘¤ĸŗƒŖG‘ëÆūŸÄ„lHŪIŸšŧ…ÂTņIĒ­‡%‘@‰žŠö„åķŽö0‰=ˇö†!ôúLŪI‚˜aˇö˙ú§a0JŠM ŊöPëˆ]ôú\ FJ‹7VŊöPëÄúFVYJŠų>÷h돭ôú(ųnJ‹vS>÷€ëdúSnJú…S¤JK÷ūŠ3ˆK÷˜ë%õúBˆÜJŠqIK÷¸ë#ėôú€IÜJ‹LT÷Đë#úLúJúLKš˜ųwBüRuGŠ3ˆ_÷č돝õúBˆ:K‰qI_÷#dõú€I:K‹Le÷ė#úLiKúL˜Kš§ųwBüRsŠ3ˆp÷ėŽöúBˆļK‰qIp÷#Üõú€IļK‹Lv÷0ė#úLåKúLLšˇųwBüRsŠ3ˆ÷HėöúBˆ2L‰qI÷#Töú€I2L‹L‡÷`ė#úLaLúLLšĮųwBüRsŠ3ˆ’÷xė÷úBˆŽL‰qI’÷#Ėöú€IŽL‹L˜÷ė#úLĐLúLōLš‡ųwBüRs‰3ˆŖ÷k÷úBˆM‰qIŖ÷#D÷ú€IM‚LŠ÷ #úL%MúL:M‰$dĀ÷ “Ÿ÷úWdMMúJdyMĖ÷ö‰$døŖĶ÷úWd—MúJdßMøö‰$døĨøúWd'NúJdoN/øö‰Ī BøDĻĨøúõ ˇNúč ËNúŪ ßN‹ŧBø¨ė0úâˇNúÕËNúËßN‹ˆBøĀėúގNúĄËNú—ßNJøëāŠųŋøØėŽõøú(ųO‹vSŋøđėdúSOú…S3OĖøūŠ3ˆĖøíŽmųúBˆ[OŠqIĖø(í#4ųú€I[O‹LÕø@í#úLyOúL›OšÔųwBüRu\‰3ˆāø(­åųúBˆšO‰qIāø#Ŧųú€IšO‚Læø"#úLÎOúLãOš˙øwBüRs‰ ųP¤—úúÁ öOú´ Pú§ *Púš >Pú RP‹ŧųXíhúâ*PúÕ>PúËRP‹ˆųpíúŽ*PúĄ>Pú—RPųëā‰3ˆÛųŽûúBˆŠP‰qIÛų#Öúú€IŠP‚Láų#úLŸPúLĖPšđųwBüRu\‰3ˆđų"­‡ûúBˆßP‰qIđų#Nûú€IßP‚Löų#úLôPúL!QšúwBüRu\‰3ˆ)ú˙ûúBˆ4Q‰qI)ú#Æûú€I4Q‚L/ú#úLIQúLvQš>úwBüRuG‰3ˆBúwüúBˆ‰Q‰qIBú#>üú€I‰Q‚LHú#úLžQúLËQšWúwBüRuG‰3ˆ[úīüúBˆŪQ‰qI[ú#ļüú€IŪQ‚Laú#úLķQúL RšpúwBüRuG‰3ˆtúŽgũúBˆ3R‰qItú#.ũú€I3R‚Lzú#úLHRúLuRš‰úwBüRuG‰3ˆúßũúBˆˆR‰qIú#Ļũú€IˆR‚L“ú#úLRúLĘRšĸúwBüRuG‰3ˆĻúWūøBˆudŸ‰qIĻú#ūø€IudŸ‚LŦú#úLŨRúL SšģúwBüRuGōöiĨūöiĨ÷Mi ÷—­-÷*>÷—­@ør] ąøMiŋø—­ųr] úá\ úö\ %úö\ › õĀú œ> ¤Uŋ°Ž‘™Đúų3 ŸQą> SŸģŗˇ0‘jSˆí}Ÿ‹˛%žS‰3ˆĄũ˛Ã˙úBˆÜS‰qIĄũ#‰˙ú€IÜS‚L§ũ#úLņSúL TšļũwBüR‘ŋ‰3ˆļũ˛<úBˆ3T‰qIļũ#ú€I3T‚Lŧũ#úLFTúLuTšËũwBüR‘ŋ‰3ˆËũ˛ĩúBˆˆT‰qIËũ#{ú€IˆT‚LŅũ#úL›TúLĘTšāũwBüR‘ŋ‰3ˆāũ˛.úBˆŨT‰qIāũ#ôú€IŨT‚Læũ#úLōTúL!UšõũwBüR‘ŋ‰3ˆõũ˛§úBˆ4U‰qIõũ#mú€I4U‚Lûũ#úLIUúLxUš ūwBüR‘ŋ‰3ˆ ū˛ úBˆ‹U‰qI ū#æú€I‹U‚Lū#úL UúLĪUšūwBüR‘ŋ‰3ˆū˛™úBˆâU‰qIū#_ú€IâU‚L%ū#úL÷UúL&Vš4ūwBüR‘ŋ‰3ˆ4ū•˛úBˆ9V‰qI4ū#Øú€I9V‚L:ū#úLNVúL}VšMūwBüR‘ŋÕúŊ_ éúda üiĨ‘ ü2ü—­Eü—­Rü*eü—­vü—­‡ü—­ücˇŠLöú¨í¸đú[V‹–[öúČí_úĨ[ŖVŒŌSöúčíNúáSŖV‹WIöúîúfIŖV‰3ˆüģhúBˆČV‰qIü#/ú€IČV‚L•ü#úLŨVúL Wš¤üwBüR‘L‰3ˆ¤üģāúBˆW‰qI¤ü#§ú€IW‚LĒü#úL0WúL]WššüwBüR‘L‰3ˆšüģXúBˆpW‰qIšü#ú€IpW‚Lŋü#úL…WúL˛WšÎüwBüR‘L‰3ˆÎüģĐúBˆÅW‰qIÎü#—ú€IÅW‚LÔü#úLÚWúLXšãüwBüR‘L‰3ˆãü ģHúBˆX‰qIãü#ú€IX‚Léü#úL-XúLZXšøüwBüR‘L‰3ˆũĮĀúBˆmX‰qIũ#‡ú€ImX‚L ũ#úL‚XúL¯XšũwBüR‘D‰3ˆũĮ8úBˆÂX‰qIũ#˙ú€IÂX‚Lũ#úLÕXúLYš-ũwBüR‘D‰3ˆ-ũưúBˆY‰qI-ũ#wú€IY‚L3ũ#úL*YúLWYšBũwBüR‘D‰3ˆBũÆ(úBˆjY‰qIBũ#īú€IjY‚LHũ#úLYúLŦYšWũwBüR‘D‰3ˆWũÆ úBˆŋY‰qIWũ#gú€IŋY‚L]ũ#úLÔYúLZšlũwBüR‘D‰3ˆlũÆ úBˆZ‰qIlũ#ßú€IZ‚Lrũ#úL)ZúLVZšũwBüR‘D‰3ˆũ Į úBˆiZ‰qIũ#W ú€IiZ‚L‡ũ#úL|ZúLŠZššũwBüR‘Döú0ûģd 'ûŅd /ûmļ‘JûZû—­kû—­zû—­û—­šû* ûcˇ¯ûmļ‘ĀûĐû—­ãû—­đû*öûcˇũö\ C vmĪˆ3 Š Đūwœe € øE ‘øO ‘(îu úO ŧZúE ÚZ‹I˙(î"úeŧZú[ÚZ‹"˙@îô ú;øZú1[‹ˆ˙Xî| ú2ˆM[ú(ˆ‡[‰\˙ •g úpÄ[úˆŲ[ú|î[ ˙ MŊú/Ä[úEŲ[ú9î[B˙˛îūā›ũĨžP˙8œ˜ é˙ ”lH‘xîŪŸđ3íé\‰$da˙î÷ øWd ŸúJd\n˙ö‰ŌSƒ˙đ3 úáSx\‚WIƒ˙úfIx\Š|[–˙ îđS ú‹[§\Š3ˆ§˙¸îđË úBˆŌ\ŠqI§˙Øî#’ ú€IŌ\‹L°˙đî#úLô\úL]š8wBüRuoŠ3ˆˇ˙īõC úBˆ4]ŠqIˇ˙(ī# ú€I4]‹LŊ˙Hī#úLV]úLx]š wBüRut‰ķįĐ˙ņ ú&č–]účŽ]‚$dĐ˙ úWd–]úJdŽ]Ū˙ö‰3ˆ?õúBˆÃ]‰qI?#Ü ú€IÃ]‚LE#úLØ]úL^šTwBüRuo‰3ˆmđúBˆ^‰qIm#Tú€I^‚Ls#úL-^úLZ^š‚wBüRuoa˙[X˙Y ‹˙r] –˙˙”§˙3 õ˙"] ´^ já\ ]ö\ Ē1á‡ú:I_TpV@Ū†9\@Ū:‡9\@ŪD9P@âîŽ/@G ßħI~ā ”2‚ë__nŽũĄë__sŽœ'âîC“X¨ũŸ§hœ–J˙ ”§€‘œâĸGÍĄm^Ĩ__xGJ‘`ī/ŸęĨQV@—^‰ú LBú€ĩ^ú&€Ķ^ú€č^ž MŊúÍĩ^úãĶ^ú×č^‹_ 3xīSú– û^ú‰ )_ú| f_‹É3xī‚úIÉû^ú<É)_ú/Éf_‹‡Č3xī_úČČû^úģČ)_úŽČf_xī…×Č„_‹î3xīVúû^ú)_úf_xī…+¤_]É^ „hîC^X¨Ÿ0=`X¨Ę_ŸYWaĄ`Ÿ€obĄ9`Š:hī_ø`ōŠc •SøIVī…oĄ`‰ä˜h Üƒķ˜ƒķ˜‚CŊq“øcŊō›ƒWŊФ „¨ī`)ƒÎ úÁ Ë`Š Ę”ČīaŦú/Ęķ`ƒ9ʍČī÷É”ĒúĘaƒĘĖÉ”MļúÛÉaúņÉ/aƒåɐ r] ‰úŠ iú€Caú&€aaú€ŒažŠ MŊúÍCaúãaaú׌aŠ˙´āīrÚƒL ú? ¯aú2 Ųaú% ÷a‹§´āī0.ƒôúį¯aúÚŲaúÍ÷a‹V´āī0ú‹¯aúŲaús÷aāī…™bŒ´āī0~úI¯aú=Ųaú1÷aŒĪ´āī0]ú¯aúųŲaúė÷a‹€´āīŌúÁ¯aú´Ųaú§÷a‹!´āī˛úb¯aúUŲaúH÷aāī…qb‹Õ´āīŒú¯aúöŲaúé÷aāī…5b;É^ Š˙ÅøīyĨƒL ú? [bú2 …bú% Ĩb‹§Åøī0.ƒôúį[búÚ…búÍĨb‹VÅøī0ú‹[bú…búsĨbøī…™ÃbŒÅøī0~úI[bú=…bú1ĨbŒĪÅøī0]ú[búų…búėĨb‹€ÅøīŌúÁ[bú´…bú§Ĩb‹!Åøī˛úb[búU…búHĨbøī…qÃb‹ÕÅøīŒú[búö…búéĨbøī…ãbÉ^ ‚˛×Šú˛ cú(˛cú˛7c„×ÎąÛ ˛úŲąJcúņą]cúåąxcŖąÛ Mšú˛ąJcúČą]cúŧąxcäá\ m@ßĻ^vā ”§€ë__x‘vÍ@ũ×'Sœ“e˙ ”äG‘Šenv´V@‹cŠOĸđšHúhÃcú^ũc‰úĒ •=ú€?dú&€Udú€jdžĒ MŊúÍ?dúãUdú×jdÚ~‚æ Ëšúõ }dá°úąI_Tpë@Ū†9ņ@Ū:‡9ņ@ŪD9å@âîŽ/@G ß´Āõā ”gaë__nŽ>Žë__sŽœ'âîC“™´ũāŗhœ Á ˙ ”“a‘œâĸGޏdĨ__xGÁ ‘8đĻŸęĨQë@âd‰˛‚ LšúƂeúŪ‚eúŌ‚3ev‚ MŊú…‚eú›‚eú‚3e‹Š#3PđSúÁ#Feú´#teú§#ąe‹}Î3Pđ‚úžÎFeúąÎteú¤Îąe‹üÍ3Pđ_ú=ÎFeú0Îteú#ÎąePđ…LÎĪe‹e3PđVú“Feú†teúyąePđ…ĸīe]É^ „hîC^™´Ÿ0=`™´fŸYWaŪ­ZfŸ€obŪ­„fŠąhhđ_zø×ōŠc •ĘøĀVhđ…æėf‰øah Sƒbƒb‚CŊq“øcŊōƒWŊŠ7œ„€đ` ƒaœúTœgЕΔ đa#ú¤Ī>gƒŽĪ đlĪ”ĒúwĪggƒƒĪAĪ”MļúPĪggúfĪzgƒZΐ r] ‰˛‚Š i†úƂŽgúŪ‚ŦgúŌ‚×gv‚Š MŊú…‚Žgú›‚Ŧgú‚×gŠ*#´¸đrQƒw#új#úgú]#$húP#Bh‹Ō"´¸đ0.ƒ#ú#úgú#$húø"Bh‹"´¸đ0úļ"úgúĒ"$húž"Bh¸đ…Ä"`hŒ?"´¸đ0~út"úgúh"$hú\"BhŒú!´¸đ0]ú1"úgú$"$hú"Bh‹Ģ!´¸đŌúė!úgúß!$húŌ!Bh‹L!´¸đ˛ú!úgú€!$hús!Bh¸đ…œ!`h‹!´¸đŒú.!úgú!!$hú!Bh¸đ…=!€h;É^ Š*#ÅĐđy ƒw#új#Ļhú]#ĐhúP#đh‹Ō"ÅĐđ0.ƒ#ú#Ļhú#Đhúø"đh‹"ÅĐđ0úļ"ĻhúĒ"Đhúž"đhĐđ…Ä"iŒ?"ÅĐđ0~út"Ļhúh"Đhú\"đhŒú!ÅĐđ0]ú1"Ļhú$"Đhú"đh‹Ģ!ÅĐđŌúė!Ļhúß!ĐhúŌ!đh‹L!ÅĐđ˛ú!Ļhú€!Đhús!đhĐđ…œ!i‹!ÅĐđŒú.!Ļhú!!Đhú!đhĐđ…=!.iÉ^ ‚´×ŠúŸ´Tiúĩ´giúŠ´‚i„׏[´Û ˛úf´•iú~´¨iúr´Ãi0´Û Mšú?´•iúU´¨iúI´Ãiäá\ Aē$õĻœˇ"IT°*ą7_ķˇ"‘—)ƒđđôĀ!úIƒÖiú?ƒöi—cP ņ™u!ú„P%júwP8j‰O j!ú"O%j)9] ::$(ņúIƒhjú?ƒ|jŒcP:@ņ—ú„P‘júwPŠj†:$—īæ=`ņôå!ƒįI&b—MįIxņôE"ú^įĖjŒkIņUúkĖj‹åjI¨ņúūjîjúôjĖj’MįŠôĸ"ø^įutŸkŠUøkutŸ‚åjŠ•ūjøôjutŸīįĻö\ DáŲú#I_Tp°*Ū†9īCŪ:‡9īCŪD95‘âîŽ/@G ßņÔ#L#ā ”CŸë__nŽ*Īë__sŽœ'âîC“…ÕũĖÔhœd#+˙ ”Ij‘œâĸGúÎkĨ__xG+‘Āņũ$ŸęĨQ°*,k‰—ƒ L$ú̃JkúÃhkúˇƒ}k[ƒ MŊújƒJkú€ƒhkútƒ}k‹ĸ'3ØņSúŲ'kúĖ'žkúŋ'ûk‹`Đ3Øņ‚úĄĐkú”Đžkú‡Đûk‹ßĪ3Øņ_ú АkúĐžkúĐûkØņ…/Đl‹ŧ"3ØņVúę"kúŨ"žkúĐ"ûkØņ…ų"9l]É^ „hîC^…ÕŸ0=`…Õ_lŸYWaĘΤlŸ€obĘÎÎlŠ#hđņ_Ņ%ø.#ōŠc •!#ø#Vđņ…=#6m‰)Ÿh Ē%ƒ8Ÿƒ8Ÿ‚CŊq“øcŊōi%ƒWŊŠį'„ō`÷%ƒ(ú(`mŠxŅ”(ōaz&ú‡Ņˆmƒ‘Ņ(ōOŅ”ĒúZŅąmƒfŅ$Ņ”Mļú3ŅąmúIŅÄmƒ=Ґ r] ‰—ƒŠ iŨ&ú̃ØmúÃömúˇƒ!n[ƒŠ MŊújƒØmú€ƒömútƒ!nŠB'´@ōr¨(ƒ'ú‚'Dnúu'nnúh'Œn‹ę&´@ō0.ƒ7'ú*'Dnú'nnú'Œn‹™&´@ō0úÎ&DnúÂ&nnúļ&Œn@ō…Ü&ĒnŒW&´@ō0~úŒ&Dnú€&nnút&ŒnŒ&´@ō0]úI&Dnú<&nnú/&Œn‹Ã%´@ōŌú&Dnú÷%nnúę%Œn‹d%´@ō˛úĨ%Dnú˜%nnú‹%Œn@ō…´%Ēn‹%´@ōŒúF%Dnú9%nnú,%Œn@ō…U%Ęn;É^ ŠB'ÅXōys*ƒ'ú‚'đnúu'oúh':o‹ę&ÅXō0.ƒ7'ú*'đnú'oú':o‹™&ÅXō0úÎ&đnúÂ&oúļ&:oXō…Ü&XoŒW&ÅXō0~úŒ&đnú€&oút&:oŒ&ÅXō0]úI&đnú<&oú/&:o‹Ã%ÅXōŌú&đnú÷%oúę%:o‹d%ÅXō˛úĨ%đnú˜%oú‹%:oXō…´%Xo‹%ÅXōŒúF%đnú9%oú,%:oXō…U%xoÉ^ ‚Šļ׊ú™ļžoú¯ļąoúŖļĖo„׏UļÛ ˛ú`ļßoúxļōoúlļ p*ļÛ Mšú9ļßoúOļōoúCļ päá\ DũĶtœ5+N,˙ ”Ij‘†âĸoúÎ p __xoN,‘ xōĸ__nr…ÕJp’"ˇr¸+ú1ˇpp‚u$úuppƒu—į'˜ōrā+ƒ(ø(ōB+’—ƒPvB,ú̃ĻpúÃÅpúˇƒäp[ƒPMŊújƒĻpú€ƒÅpútƒäp4L#`Dũ˜Ũ_œk,î-˙ ”pu‘Š__x)Ø„Ø÷p°ōī__y)Ū„ØŠØÖČō)ßâ-úįÖ-qúņÖKq‰’Ö )šP-úĄÖuqúĢÖˆq‚CÖ )…ƒNÖúfÖ§qúZÖˆqÖ Mšƒ'Öú=Ö§qú1Öˆq#á\ ‚—Ÿ6")™ƒϟú°Ÿģq3ˆ6" …úBˆģqŠqI6āō#Ģ-ú€Iģq‹L9øō#ƒLúLíqšRwBüR‘o6S,ßlũ-L.ā ”“BŪß1ÄL.âî6ÅÆî‚KĮîCȁī__rĘ%אũ‡âØœi.2˙ ”ž†‘Ĩ__k)„2‘ķž__j)†¸ØrŠŲŲ(ķ)†Ŋ.účŲ#rŠ“Ų@ķ)†c0úĸŲNrúÆŲyrúšŲ™rúŦŲÃr‚yØC")ũúˆØėrúŸØsú’Øs‚.ØC"@súaØsúTØs‚î-C" ú.súũ-s„C"….Fs…#.esŦ0.…=.ŽsŠ‹ICXķÆų/úšIs‚qICÕú€Is‚WIC-úfIsŠNĢFpķĘ30ƒsĢúfĢŦsúYĢĘs]ņd ‹ø×SˆķĖƒØƒØˆķŦ؉yØz$)ˆĪ1úˆØėrúŸØŨsú’Øt‚.Øz$@súaØŨsúTØt‚î-z$ ú.Ũsúũ-t„z$….t…#.)tŦ0.…=.Øë__p)p>Øë__v)pŲ2âîÉ)sü$ī__z)w„Øאũ˜āķœö2a:˙ ”pu‘Ĩ__v)Õa:‘đķV:Ÿœ)ŲoGĮtŠ2ô)ÚI6ú128uú'2Xuô…@2xu…M2ĸu…Z2×u…g21vŠŧØ(ô) Ĩ3úËØTvŠyØ>@ô)Ĩ 5úˆØĪvúŸØãvú’Øøv‹.Ø>@ô@súaØãvúTØøv‹î->@ô ú.ãvúũ-øv@ô…. w…#.wŦ0.…=.=w‰‹I>Į¤4úšIãv‹qI>XôÕú€Iãv‹WI>Xô-úfIãvŠNĢNpôĘŪ4ƒsĢúfĢ[wúY̆w^ņd ‹ø×^ˆôĖƒØƒØˆôŦ؉y؇)°!6úˆØĻwúŸØēwú’ØÎw‚.؇@súaØēwúTØÎw‚î-‡ ú.ēwúũ-Îw„‡….âw…#.õwŦ0.…=.xŠṄ ôĘō5ƒsĢúfĢ1xúYĢ]x˜ņd ‹ø×ЏôĖƒØƒØ¸ôŦØ‚`ŲĐ.)ŽúoŲ‰xŲ$‰Ú ¨ )áu6ƒ˙ ƒķ úé ĄxŠ{2Đô)ß-:úŽ2ĀxúĄ2āxú”2yúŠ27yĐô…Ŋ2WyŦĘ2‰yØ *)tŒ8úˆØĸyúŸØļyú’ØŪy‚.Ø *@súaØļyúTØŪy‚î- * ú.ļyúũ-Ūy„ *….ōy…#.zŦ0.…=.$zŠ‹I đôÆË7úšIŪy‹qI õÕú€IŪy‹WI õ-úfIŪyŠ‹I(õĮ#8úšIBz‚qIÕú€IBz‚WI-úfIBzŠNĢ@õĘ]8ƒsĢúfĢjzúYĢ}z/ņd ‹ø×%XõĖƒØƒØXõŦØŠž =põ)w!:ƒ­ úˇ zpõŦÆ Š„ =˜õ)‹:9ƒ“ ‹[ =˜õ)ƒf úr ČzŒ0 =˜õMļúI Čzƒ? úU čzGr] Ār] ŠšÖIĀõ)V9ƒČÖŠڃOāõ)Œ9ƒéƒú˙ƒ{úķƒ@{‘[‰’ÖĶ):ƒĄÖƒĢÖ‚CÖĶ)…ƒNÖ•fÖƒZ֏ÖĶMšƒ'Ö•=Öƒ1֐Ûá\ Ķe ã'e ę-e p˜$‹Ú søõ)߃˙ ƒķ úé ^{ķö\ א›Dõœœ3;%AÅ \QŌ¤­ÍyI‘‰ŸR{Æ:úŽR}{ú¸R{‰cPH{ö:ú„P¸{ƒwP\:$Hûéd}֐y9e ‰\e ”}֐œö\ ›C/Ņœ*@IT,¤Ü/&O*@‘ö@ģss&P ‘¤~Šį8ö&PC=•Iįú+įā{Š höÄ;ú+|‘Šgį˜öp<úŠįs|úvį“|ŠŸįĐö#?<ƒÂįúŽį“|† ũŠ M†÷#?M<ƒ/MúMŪ|Ž ũ‚ÔL`#?ƒ÷LúãLE}Š-É(÷=úF[}ú<“}—ķŒÉH÷cž<ú“}‘;˜ŒS cú§Œü}‚XŒS ŧƒ~ŒúqŒo~úgŒü}‰aLx,=úpL„~‘‹b ũ‘š‘ĖŠ‹b`÷&Q{>ú–š~úŖŪ~‹Xb`÷&Ŧújš~úwŪ~`÷‹.b`÷&ôú9š~úFŪ~‹ũb`÷&Xúš~úŪ~‹Âb`÷&xúëŪ~úŪš~ƒŲúÔE‹‰b`÷&Rƒ›ú§Ū~`÷|&öŗŒĄnb`÷&õúēnqú°nŪ~y=ŠÕã{x÷&RĨ>úäㅐ„(Š(„÷&R@ú (ˇŠ8æ„°÷5}?úIæé—3ˆ„Đ÷@[?úBˆ#€ŠqI„đ÷#!?ú€I#€‹L¸ø#úLU€úL‡€šSwBüRuĢ~2LÃ@úALĨ€‘ÜŠD(Ü ø5ë?ƒg(úS(ɀŠ–Lį8ø#;Č?ƒšLúĨL퀋ÔLíPø#;ƒ÷LúãL‹aLpø5úpL5‘4‘ĸ“ö\ Ēö\ ¯E›põđœzC¤ŖZœ'‘¤ęŦ[œ'‘¤üØ\™õ‘ ¤Û]™õ‘ŠĶˆøfĶ@úûYú‹ĩˆø™úĀ•/3;ŠĶ% øf#Aúû܁úî ‚‹ĩ% ø™úĀ ‚;3;Š3ˆP¸øf›AúBˆR‚ŠqIPØø#bAú€IR‚‹LYđø#úLŠ‚úLš‚š¸wBüRu_Š3ˆ`ųfBúBˆׂ‰qI`#ÚAú€Iׂ‹Lf ų#úLƒúL5ƒš§wBüRv‰é€ _uB‚ī_€ Éú`Sƒúū_gƒ‚Å_ƒúŪ_…ƒúÔ_™ƒ‰3ˆŧ fíBúBˆģƒ‰qIŧ#´Bú€Iģƒ‚LÂ#úLЃúLũƒšŅwBüRu_‰3ˆÜfeCøBˆu`Ÿ‰qIÜ#,Cø€Iu`Ÿ‚Lâ#úL„úL=„šņwBüRu_POÚö\ ēĨõ0œ\K¤z{œ'‘¤z{œ'‘¤âX{™õ‘ ¤įX{™õ‘‰é, {0D‚ī_, Éú`P„úū_d„‚Å_/úŪ_w„úÔ_‹„ŠĶH8ų{€Dúû „úîÄ‹ĩH8ų™úĀĐ[3;ŠĶNPų{ŅDøûu¸Ÿúî …‹ĩNPų™úĀ …g3;‰sįq {3E‚ī_q Îú`7…úū_W…‚Å_uúŪ_‘…úÔ_ą…ŠŌØŽhų{šFúōØĶ…účØû…ŠŌ뜈ųÃEúōë†účë8†ˆų…|cŒcPĸ ųƒú„P†úwPc†˛:$ŠMįŊ¸ų$Fú^įƒ†ŒkŊĐųUúkŖ†‹åjŊčųúūjč†úôjŖ†‰Mį…Fú^įü†kUúkü†‚åjúūj‡úôjü†œīįŊgŠ0Ôøú{HúPÔ%‡úFÔ=‡Š.ë ú*GúNëf‡úDë~‡ ú…|cŒcP 8úƒú„Pf‡úwP‘‡:$ŠMį$Pú‹Gú^įą‡Œk$húUúką‡‹åj$€úúūjćúôją‡‰MįģėGú^į؇kģUúk؇‚åjģúūjí‡úôj؇īį$gŠzįP˜ú{åHúŒįˆ‹~ˆP¸úúˆˆ‹4gPØúúMg+ˆúCgˆŠ3ˆZøúŽØHúBˆ?ˆ‰qIZ#ŸHú€I?ˆ‹L_û#úL]ˆúLˆšˇwBüRvoá\ Š3ˆr(û{]IúBˆˆ‰qIr#$Iú€Iˆ‹Lx@û#úL˛ˆúLĮˆš¨wBüRu`‰3ˆ!{ÕIúBˆåˆ‰qI#œIú€I刂L…#úLúˆúL'‰š˜wBüRu`‰zįÎ {JúŒį:‰‚~ˆÎ úˆg‰Û4g‰3ˆÛ{“JúBˆ”‰ŠqIÛXû#ZJú€I”‰‹LŪpû#úLЉúL։šķwBüRu`‰3ˆķ { KúBˆé‰‰qIķ#ŌJú€I鉂Lų#úLū‰úL+ŠšwBüRu`‚ņŽė­â뭐īņørZGrZPw^ö\ ēÎõ0Cœ:S¤z~œ'‘¤z~œ'‘¤âX~™õ‘ ¤įX~™õ‘ŠĶ\ˆû~Lúû>ŠúîoŠ‹ĩ\ˆû™úĀoАo3;ŠĶb û~PLúûĊúî芋ĩb û™úĀ芐{3;‰sį… ~˛L‚ī_… Îú`"‹úū_Z‹‚Å_‰úŪ_Ž‹úÔ_æ‹ŠŌØĸ¸û~NúōØ"ŒúčØZŒŠŌë°ØûBMúōëoŒúčë§ŒØû…|cŒcPļđûƒú„PoŒúwPėŒÆ:$ŠMįŅüŖMú^į ŒkŅ üUúkF‹åjŅ8üúūj–úôjF‰MįūNú^įkūUúk‚åjūúūj׍úôj°īįŅgŠ0Ô Pü~}OúPÔëúFÔ#ŽŠ.ëpüŠNúNëLŽúD넎pü…|cŒcPˆüƒú„PLŽúwP­Ž/:$ŠMį8 ü Oú^į͎Œk8¸üUúk͎‹åj8ĐüúūjëŽúôj͎‰Mį^hOø^įu\Ÿk^Uøku\Ÿ‚åj^•ūjøôju\Ÿīį8gŠzįdčü~aPúŒį ‹~ˆdũúˆ-‹4gd(ũúMgOúCg-Š3ˆnHũŽTPúBˆo‰qIn#Pú€Io‹Ls`ũ#úLúL¯š÷wBüRvƒá\ Š3ˆ†xũ~ŲPúBˆ͏‰qI†# Pú€I͏‹LŒũ#úLīúLščwBüRu`‰3ˆ“~QQúBˆ/‰qI“#Qú€I/‚L™#úLDúLqš¨wBüRu`‰é˛ ~ŗQ‚ī_˛ Éú`„úū_˜‚Å_ĩúŪ_̐úÔ_ŋ‰zį ~ųQúŒįԐ‚~ˆ úˆ‘4g‰3ˆ~qRúBˆ.‘ŠqI¨ũ#8Rú€I.‘‹L!Āũ#úLC‘úLp‘š6wBüRu`‰3ˆ6(~éRúBˆƒ‘‰qI6#°Rú€Iƒ‘‚L<"#úL˜‘úLőšKwBüRu`–ņĸ뭐ö뭐ņ rZ[rZdw^Tö\ ē÷õ€Cœ[¤zœ'‘¤zœ'‘¤âX™õ‘ ¤įX™õ‘ŠĶŦØũŪSúûؑúî ’‹ĩŦØũ™úĀ ’ŋ3;ŠĶ˛đũ.Túû^’úî‚’‹ĩ˛đũ™úĀ‚’Ë3;‰sįÕ T‚ī_Õ Îú`ŧ’úū_ô’‚Å_ŲúŪ_H“úÔ_€“ЧŨōū÷UúĮŨŧ“úŊŨô“ŠÜę(ū Uúüę ”úōęA”(ū…|cŒcP@ūƒú„P ”úwP†”:$ŠMį!XūUú^įĻ”Œk!pūUúk┋åj!ˆūúūj0•úôj┉MįNâUú^į\•kNUúk\•‚åjNúūjq•úôj\•īį!gŠ0Ô\ ū[WúPÔ…•úFÔŊ•Š.ëiĀū‡VúNëæ•úD떍Āū…|cŒcPoØūƒú„Pæ•úwPG–:$ŠMįˆđūčVú^įg–Œkˆ˙Uúkg–‹åjˆ ˙úūj…–úôjg–‰MįŽFWø^įu\ŸkŽUøku\Ÿ‚åjŽ•ūjøôju\ŸiīįˆgŠzį´8˙?XúŒįĨ–‹~ˆ´X˙úˆĮ–‹4g´x˙úMgé–úCgĮ–Š3ˆž˜˙Ž2XúBˆ —‰qIž#ųWú€I —‹Lð˙#úL'—úLI—šGwBüRvĶá\ Š3ˆÖČ˙ˇXúBˆg—‰qIÖ#~Xú€Ig—‹LÜā˙#úL‰—úLĢ—š8wBüRu`‰3ˆã/YúBˆɗ‰qIã#öXú€Iɗ‚Lé#úLŪ—úL ˜šøwBüRu`‰é ‘Y‚ī_ Éú`˜úū_2˜‚Å_úŪ_E˜úÔ_Y˜‰zįa ×YúŒįn˜‚~ˆa úˆ›˜n4g‰3ˆnOZúBˆȘŠqInø˙#Zú€IȘ‹Lq#úLŨ˜úL ™š†wBüRu`‰3ˆ†(ĮZúBˆ™‰qI†#ŽZú€I™‚LŒ"#úL2™úL_™š›wBüRu`æņō뭐F뭐Sņ\rZĢrZ´w^¤ö\ ē öĐCœöb¤z„œ'‘¤z„œ'‘¤âX„™õ‘ ¤įX„™õ‘ŠĶü(„ŧ[úûr™úîŖ™‹ĩü(™úĀŖ™ 3;ŠĶ @„ \úûø™úîš‹ĩ @™úĀš 3;‰sį%  „n\‚ī_%  Îú`Všúū_Žš‚Å_) úŪ_âšúÔ_›ŠŌØB X„Õ]úōØV›účØŽ›ŠŌëP xū\úōëŖ›účëۛx…|cŒcPV ƒú„PŖ›úwP œf :$ŠMįq ¨_]ú^į@œŒkq ĀUúkzœ‹åjq ØúūjƜúôjzœ‰Mįž Ā]ú^įöœkž Uúköœ‚åjž úūj úôjöœP īįq gŠ0ÔŦ đ„9_úPԝúFÔWŠ.ëš e^úN뀝úD븝…|cŒcPŋ (ƒú„P€úwPáĪ :$ŠMᨠ@Æ^ú^įžŒkØ XUúkž‹åjØ púūjžúôjž‰Mįū $_ø^įu\Ÿkū Uøku\Ÿ‚åjū •ūjøôju\Ÿš īᐨ gŠzį ˆ„`úŒį?ž‹~ˆ ¨úˆaž‹4g ČúMgƒžúCgažŠ3ˆ čŽ`úBˆŖž‰qI #×_ú€IŖž‹L #úLÁžúLãžš— wBüRv# á\ Š3ˆ& „•`úBˆŸ‰qI& #\`ú€IŸ‹L, 0#úL#ŸúLEŸšˆ wBüRu`‰3ˆ3 „ aúBˆcŸ‰qI3 #Ô`ú€IcŸ‚L9 #úLxŸúLĨŸšH wBüRu`‰éR  „oa‚ī_R  Éú`¸Ÿúū_˟‚Å_U úŪ_ߟúÔ_ķŸ‰zįą  „ĩaúŒį ‚~ˆą  úˆ5 ž 4g‰3ˆž „-búBˆb ŠqIž H#ôaú€Ib ‹LÁ `#úLw úL¤ šÖ wBüRu`‰3ˆÖ („ĨbúBˆˇ ‰qIÖ #lbú€Iˇ ‚LÜ "#úLĖ úLų šë wBüRu`6 ņB 뭐– 뭐Ŗ ņŦ rZû rZ w^ô ö\ ēIö CœÔj¤z‡œ'‘¤z‡œ'‘¤âX‡™õ‘ ¤įX‡™õ‘ŠĶL x‡šcúû Ąúî=Ą‹ĩL x™úĀ=Ą_ 3;ŠĶR ‡ęcúû’ĄúîļĄ‹ĩR ™úĀļĄk 3;‰sįu  ‡Ld‚ī_u  Îú`đĄúū_(ĸ‚Å_y úŪ_|ĸúÔ_´ĸЧŨ’ ¨‡ŗeúĮŨđĸúŊŨ(ŖŠÜę  ČÜdúüę=ŖúōęuŖČ…|cŒcPĻ āƒú„P=ŖúwP窐ļ :$ŠMįÁ ø=eú^įÚŖŒkÁ Uúk¤‹åjÁ (úūjd¤úôj¤‰Mįî žeú^ᐤkî Uúk¤‚åjî úūjĨ¤úôj¤  īįÁ gŠ0Ôü @‡gúPÔš¤úFÔņ¤Š.ë `CfúNëĨúDëRĨ`…|cŒcP xƒú„PĨúwP{Ĩ :$ŠMį( ¤fú^į›ĨŒk( ¨Uúk›Ĩ‹åj( ĀúūjšĨúôj›Ĩ‰MįN gø^įu\ŸkN Uøku\Ÿ‚åjN •ūjøôju\Ÿ īį( gŠzįT ؇ûgúŒįŲĨ‹~ˆT øúˆûĨ‹4gT úMgĻúCgûĨŠ3ˆ^ 8ŽîgúBˆ=ωqI^ #ĩgú€I=Ļ‹Lc P#úL[ĻúL}Ļšį wBüRvs á\ Š3ˆv h‡shúBˆ›Ļ‰qIv #:hú€I›Ļ‹L| €#úLŊĻúLßĻšØ wBüRu`‰3ˆƒ ‡ëhúBˆũωqIƒ #˛hú€IũĻ‚L‰ #úL§úL?§š˜ wBüRu`‰éĸ  ‡Mi‚ī_ĸ  Éú`R§úū_f§‚Å_Ĩ úŪ_y§úÔ_§‰zį  ‡“iúŒįĸ§‚~ˆ  úˆΧ 4g‰3ˆ ‡ júBˆü§ŠqI ˜#Ōiú€Iü§‹L °#úL¨úL>¨š& wBüRu`‰3ˆ& (‡ƒjúBˆQ¨‰qI& #Jjú€IQ¨‚L, "#úLf¨úL“¨š; wBüRu`† ņ’ 뭐æ 뭐ķ ņü rZK rZT w^D ö\ ›ž!Eœo_ÅfSrÍû.ą† pfS‘ą:‡ pfS‘ąŖ¨ qû.‘ <‘Čŗö? tīύ—N“  tvkøx“ōújøk“ō k’“0 |ôkú˛“ę¨ú¨“›Š“0 ,įú6“įŠú,“›Š‚ú`0 cú-a›Šú a‚ǐ<ö’“C €rlú˛“ŽĒú¨“=Ģ“C ,įú6“‰Ģú,“=Ģ‚ú`C cú-a=Ģú aŦOö’“V „đlú˛“2Ŧú¨“‘Ŧ“V ,įú6“ÆŦú,“‘Ŧ‚ú`V cú-a‘Ŧú a­bö’“p xnmú˛“E­ú¨“ũ­“p ,įú6“IŽú,“ũ­‚ú`p cú-aũ­ú a鎐{ö—ŋ“‚0 zmúΓ¯—ŋ“ H ~ŦmúΓ=¯—ŋ“¸` ‚ËmúΓe¯’“û ŒInú˛“¯ú¨“ĸ¯“û ,įú6“ĩ¯ú,“ĸ¯‚ú`û cú-aĸ¯ú aȝö’ŋ“  ŽhnúΓô¯’“ ænú˛“ °ú¨“!°“ ,įú6“4°ú,“!°‚ú` cú-a!°ú aG°ö’ŋ“" ’oúΓs°“% ”ú˛“‹°ú¨“ °“% ,įú6“ŗ°ú,“ °‚ú`% cú-a °ú aư0öáø!°oŲ!%Ū LĐ °oŪÕŅ ĩoאא›"Áœlw_Å–BrÍŽ/ą† p–B‘ą:‡ p–B‘ąŖ¨ qŽ/‘ <‘xŗö? tÉīō°—Ģ ˜ t[pøĢĢōāoøžĢōīo—ÃĢ8° |;qúåĢ6ąúÛĢ–ąŒo8°,ŋúĸožąú•oŪą‰‹I8Ō ˙púšIŪą‚qI8Õú€IŪą‚WI8-úfIŪą‚NĢÔ úsĢ2˛úfĢE˛úYĢX˛›ņd —ÃĢ@Č €rúåĢk˛úÛ̝˛Œo@Č,ŋúĸoײú•o÷˛‰‹I@Ō ßqúšI÷˛‚qI@Õú€I÷˛‚WI@-úfI÷˛‚NĢĀÔ úsĢ3ŗúfĢFŗúYĢYŗËņd —ÃĢHā „ûrúåĢlŗúṴ̂ŗŒoHā,ŋúĸoØŗú•oøŗ‰‹IHŌ ŋrúšIøŗ‚qIHÕú€Iøŗ‚WIH-úfIøŗ‚NĢčÔ úsĢ4´úfĢG´úYĢZ´ķņd ’ÃĢ_ xÛsúåĢm´úÛĢÖ´o_,ŋúĸoū´ú•oĩ‰‹I_Ō ŸsúšIĩ‚qI_Õú€Iĩ‚WI_-úfIĩ‚NĢgÔ úsĢyĩúfĢŒĩúYĢŸĩrņd ’IĒĸ zúsúXǞĩ’IĒÖ ~túXĒÚĩ’IĒū ‚8túXĒļ—ÃĢ@ø uúåĢ*ļúÛĢLļŒo@ø,ŋúĸotļú•o”I@Ō ÜtúšI”ļ‚qI@Õú€I”ļ‚WI@-úfI”ļ‚NĢ¤Ô ús̞ļúfĢÅļúY̨ņd ’IĒG ’7uúXĒëļ’ÃĢJ ”vúå̎úÛ̎oJ,ŋúĸo0ˇú•oDˇ‰‹IJŌ ÛuúšIDˇ‚qIJÕú€IDˇ‚WIJ-úfIDˇ‚NĢQÔ úsĢWˇúfĢjˇúYĢ}ˇ\ņd —ÃĢy ŒOwúå̐ˇúÛĢÁˇŒoy,ŋúĸoŲˇú•oíˇŠ‹Iy(Ō ģvúšI¸‹qIyHÕú€I¸‹WIyH-úfI¸Š‹I}`Ō wúšIíˇ‚qI}Õú€Iíˇ‚WI}-úfIíˇ‚NĢÔ úsĢ,¸úfĢ?¸úYĢR¸›ņd IĒ‹ ŽúXĒe¸ßS0„w›wĩR˛kā ”-‹čįv,æ˛k›V"xœ"{_ŞkrÍņ/ą† p˛k‘ą:‡ p˛k‘ąŖ¨ qņ/‘ <‘xŗö? tõī}¸—7œ ° t=xøaœōÁwøTœōĐw’lw0 x‘xƒŽwú„wŖ¸ œ2,įú$œظúœë¸CČ] ’lwN |åxƒŽwú„w š œQ,įú$œUšúœhšbČ] ’lwm €9yƒŽwú„wš œp,įú$œģšúœΚČ] ’lwŒ" „yƒŽwú„wėš œ,įú$œ ēúœē Č] ’lwá ŒáyƒŽwú„w;ē œã,įú$œNēúœaēôČ] ’yœû Žzúˆœtē’lwū TzƒŽwú„wŒē œ,įú$œŸēúœ˛ēČ] ’yœ ’szúˆœÅē’lw ”ĮzƒŽwú„wŨē œ,įú$œđēúœģ.Č] —yœPĐ zæzúˆœģ’yœh ~{úˆœ>ģyœp ‚úˆœfģá"g{{%˛krÍûÍŪ† ͞kŪ:‡ ͞kŪŖ¨ ÔûÍáŦ0ˆ{rÍûÍčŖ¨,ėûÍáÂ"Ę{ĩR˛krÍņ/č† Ÿ˛kč:‡ Ÿ˛kčŖ¨ Ÿņ/ß“˛Ų{ |ā ”“ačâĸoŽé__xo |âã__nr™´bAßX˛|7|ā ”“aë__x‘7|bAũėģp |œT|lˆ˙ ”lH‘¤¨ãMœ'‘¤ÕŠNœ'‘¤ŗWOļ‘ ¤?YPѝčWˆŸ[—Rž´ŽģĒ:ÁZ÷@‘XŠE$‰ Tü|ú^$ŊģúT$)ŧ‘• Šé#• (T>}úø#Ōŧ‹īs• (6útXŊƒūs‰Ī#  T€}úŪ#$ž‚īs  $útœžƒūsŠ"{Ļ @TcƒúY{HŋúL{Ųŋú?{cĀŠ¯iĻ p Ũã}úËiHŋúÁiŦĀ‘° Šg{ą ˆ Ũ¨ú{{?Á—¯ią °,í1~úËi?ÁúÁi Á‘ŋ —‹Á Č,í…~ú ‹Âú‹pÂŒ¯iÁ Č,áúËiÂúÁipÂ‘Ë —2‹Ë ā,íúD‹Ū‹3ˆË 2úBˆFÊqIË  #Ū~ú€IFËL× 8#úLäÃúLqÄšwBüRs2‹Î,íøD‹u`Ÿ‚3ˆÎ2øBˆu`Ÿ‰qIÎ#mø€Iu`Ÿ‚LÔ#úLÄúLŧÄšįwBüRudŠˆ{â P Ũā€úŊ{Īăą{ƒĨ{’™œâ  ĸ'€ú´œĪÄúǜJŏ¯iâ  ,ÜúËiĪÄúÁiJÅ‘ī —ŋœh ĸՀúМ­ÅŒ2‹ˆ,ÜúD‹Æ‹3ˆ¨2úBˆšÆŠqIČ#š€ú€IšÆ‹Lā#úL ĮúLmĮš—wBüRv›wŠŋœ  ŨúМ‹ĮŒ2‹ ,ÜúD‹‹Į‹3ˆ0 2úBˆûĮ‰qI#Tú€IûĮ‹LH #úLQČúLÁČš'wBüRsŠ2‹)`  Ũ#‚úD‹īČ‹3ˆ)x 2úBˆÉŠqI) #éú€IÉ‹L/¨ #úLMÉúLoÉšGwBüRs‰2‹Q Ũˇ‚úD‹É‚3ˆQ2úBˆÉ‰qIQ#}‚ú€IÉ‚LW#úLĸÉúLĪÉšfwBüRuO‚ŋœļ ŨúМâɏ2‹ļ,ÜúD‹âÉ‚3ˆļ2úBˆâɉqIļ#'ƒú€IâÉ‚Lŧ#úL÷ÉúL ĘšĘwBüRvŠ2‹:Ā T÷ƒúD‹Ę‹3ˆ:Ø 2úBˆĘŠqI:đ #Ŋƒú€IĘ‹L@ #úLAĘúLcĘšgwBüRsŠ3ˆK To„úBˆĘŠqIK8 #6„ú€IĘ‹LQP #úLŖĘúLÅĘš‡wBüRsŠ3ˆąh _į„úBˆãĘŠqIąˆ #Ž„ú€IãĘ‹Lē  #úLËúL[ËšwBüRu\Šņ$Ö¸ f …ú %y˃%ŠĘ{ęĐ fž…úī{ŌËúã{ôËúŲ{-ĖĐ …ũ{[Ė’˛‚: v˛…úƂœĖúŪ‚¯ĖúŌ‚ÄĖv‚: MŊú…‚œĖú›‚¯Ėú‚ÄːõŠ| č iU†ú)|×Ėú|ųˉ˛‚Ģ •J†úƂ/ÍúŪ‚GÍúŌ‚\͏v‚Ģ MŊú…‚/Íú›‚GÍú‚\͐õ‰”eÃl†úŖeoÍúŖeoÍŠk}Ņ l‡ú„}ŖÍúz}Ō͉(~Ų• ‡ú<~ÎúT~,ÎúH~AΏė}ŲMŊúû}Îú~,Îú~Aΐ5nu‰2‹fTLJúD‹c΂3ˆf2úBˆcΉqIf#p‡ú€Ic΂Ll#úLxÎúLĨΚ{wBüRuO‰3ˆ{&T"ˆúBˆ¸Î‰qI{#é‡ú€I¸Î‚L #úLÍÎúLúʐwBüRuO‘‰ zr] c‘ĸ¯pYŦá\ ™ö\ ´ö\ ßŧ{ˆ­ˆā ”lHŪŗWŽļŪ?YÃŪž|Û9›röđōœĪޤ¨ãŠœ'‘¤3Ēœ'‘¤ÕŠĢœ'‘¤¤CŦœ'‘ ¤Ôx­ˇ­‘¤ŗWŽŋÛ‘¤?Y¯ËÛ‘¤dˇ°Õ9‘0 ēŽŸž|ąų9 ĪŠ3ˆAP ŗԉúBˆAĪŠqIAp #›‰ú€IAĪ‹LJˆ #úL„ĪúLĀĪšXwBüRu_Š3ˆU  ŗLŠúBˆŪΉqIU#Šú€IŪĪ‹L[¸ #úL'ĐúLpĐšGwBüRv‰žf ´lАk0ŠlˆqĐ ´ŸúŸˆŽĐú’ˆÍĐú…ˆŅú{ˆ=҉ Œq˜‹úŒŒŅėSqoúûSņŅ‚‹Iq6úšIņŅŠ§`{ø Ąx‹úļ`FŌ‰n`{|?‹ú}`oŌ‚ŌS†}úáSžŌ‚WI†úfIžŌŠĸSÁ ™Ņ‹úģSąŌúąSāŌŒvSÄ( JúSąŌú…SāԐĐūŠɋĐH ™dŒúڋ3ĶŒ3ˆĐh ;úBˆ3ĶŠqIĐˆ #*Œú€I3Ķ‹LŲ  #úLUĶúLwĶšgwBüRw‰ ŒäšģŒúŒ•ĶėSäoúûS•Ķ‚‹Iä6úšI•͉ɋČ™NúڋŊĶ3ˆČ;úBˆŊ͉qIČ#ú€IŊĶ‚LÎ#úLŌĶúLįĶšÜwBüRwœ<|Ļ—}Á"ŊûécP!cP)}֐w}Ö‰3ˆŗŽúBˆú͉qI#Ūú€IúĶ‚L•#úLÔúL<Ôš¤wBüRu_‰3ˆ¤$ŗŽúBˆOÔ‰qI¤#VŽú€IOÔ‚LĒ#úLdÔúL‘ÔššwBüRu_‘ ‘(r] A˛hŒá\ ö\ Âö\ §āšQ œ2‘øôš‘øē‘ø ē‘øē‘ ¸ ,Ŧ#ēŦ/ē(Ŋ$Đ ƒēú ē¤ÔúēÄÔúôšīԍР…#ē$Õ…/ē{Õ—€š3đ %ˆžú šÄÔú”šīÔŒ-š3đ -vúMšÄÔúAšīÔ—­šC %ŒúŌšÔÕúÅšôÕú¸š)Ö‹cOC ™úˆO]Öú{OôÕúnO)Ö‰0OPi]úUOŠÖúHOŧÖú;OĪ֐[fe ‚Ns gƒĻNúšNâÖ’ŊNK%Œ úĖN{Õ—×N^( %’%‘úđNõÖúæN6ׄøđNSøæNW’œJÕũƒĢJN™׃ĻNøšNws"# ŸC4 ŖëĩāđÕœķœ¤¨ãāķœ‘¤aáøœ‘@ čœŸß#âũœnמpæ0‘á×îŽ0į0‘Ē/čÄ6‘TĒX]éÄ6‘XŠ—­öh â7’øĘ­PŸúŊ­G؍h ŦŨ­ŠõK ˆ y /’øLPŸúLsؐh‘ ‰ŌSüâs’úáS%Ų‚WIüúfI%ŲŠ—­  â“úĘ­QŲúŊ­zŲ  ŦŨ­ŠõK&Č y “úLÚúLHÚ‰O& û’ú"Oڐ.9] 9h™§w“øBˆuXŸ‰qI§#>“ø€IuXŸ‚L­#úLģÚúLčÚšĀwBüRu`‘&Š3ˆ9ā â÷“úBˆûÚŠqI9#ž“ú€IûÚ‹LB#úLˆÛúLëÛšwBüRu`‰ŌSMæ3”úáS Ü‚WIMúfI ÜŠTS0įg”ú#TQÜúTáאa‹] ‰˜Œhčŗ”ú§ŒÜ‚XŒhŧƒ~ŒúqŒŨúgŒ5Ũ‰˜Œoé˙”ú§Œ˛Ũ‚XŒoŧƒ~ŒúqŒŨúgŒ˛ŨŠÖēHîߕúģ"ŪúģƒŪúøēŅŪúîēß—“ē`%厕úÁē"Ūú´ēƒŪú§ēŅŪ`‹Kē`äúyē"ŪúlēƒŪú_ēŅŪ`ŒāšXŒ%åƒ~ŒƒqŒúgŒ^ߊvSxî–úS^ßú…S§ß›ūŠ3ˆ›˜î‹–úBˆûߊqI›¸#R–ú€Iûß‹L¤Đ#úL*āúLYāšwBüRuWŠvSÁčīŋ–úSwāú…SĻāĖūŠ3ˆĖī7—úBˆāāŠqIĖ(#ū–ú€Iāā‹LÕ@#úLáúL>áš(wBüRuW‰ėSāđĢ—úûS\á‚‹Iā6úšI\á‚qIāÕú€I\á‚WIā-úfI\á‰ŌSųį—úáS~á‚WIúfI~áŠ3ˆXé_˜úBˆ“áŠqIx#&˜ú€I“á‹L #úLĩáúL×ášowBüRsŠ3ˆ¨čטúBˆõáŠqIĀ#ž˜ú€Iõá‹LØ#úLâúL9⚇wBüRsŠ3ˆđųO™úBˆWâŠqI#™ú€IWâ‹L# #úLyâúL›âšŸwBüRs‰q^° ōŠ™úŠ^šâú€^Ņâ‚’ŗ° 3úĢŗšâúĄŗŅâÃOŠq^Đ8ë-šúŠ^ūâú€^ã‹’ŗĐ83úĢŗūâúĄŗã‰OĐ }!šú"OūâŲ9] ęOŠq^ęPė‡šúŠ^Jãú€^bã‹’ŗęP3úĢŗJãúĄŗbãũO‰3ˆ/âíšúBˆ‚ã‰qI/#ƚú€I‚ã‚L5#úL—ãúLŦã‰3ˆIīe›úBˆŋã‰qII#,›ú€Iŋã‚LO#úLÔãúLäš^wBüRuW‰3ˆ^éŨ›úBˆä‰qI^#¤›ú€Iä‚Ld#úL)äúLVäšswBüRuW‰3ˆsčUœúBˆiä‰qIs#œú€Iiä‚Ly#úL~äúLĢ䚈wBüRu`‰3ˆˆų͜úBˆžä‰qIˆ#”œú€Ižä‚LŽ#úLĶäúLč䚝wBüRu`‘øpYMpYEö\ Ē1Ē1Ē1ũ8ŊĐeœLĄ˙ ”lH‘¤ĸagÍļ‘hAĄŸh"íûäŸŪj"íåŸS]q%^åŸ"¯r%ē坈,Ąžis'æŠøa¨sȝúb}æúb}æĀŸ[—t÷@ņ柨ãuLĄįā  žjx'VįŠedx+žƒ)eƒ)e(Ÿž|yų9™įĒaz\F‘\Ÿ<¤}÷$ÍįŸũ„÷$čŸ°q‰÷$YčŸlK÷$y艚üšʞúŋü™čú˛ü­čúĨüÁčŠYüēH–ôžúrüÕčúhü éŠ3ˆŊ`—lŸúBˆ)éŠqIŊ€#3Ÿú€I)é‹Là#úLKéúLméš wBüRu_‰3ˆ—äŸøBˆudŸ‰qI#̟ø€IudŸ‚L$#úL‹éúL¸éš3wBüRu_‘pY/2‘apY‰Yüjv4 úrüËéúhüëéŠ3ˆ¨¸˜Ŧ úBˆę‰qI¨#s ú€Ię‹LŽĐ#úLCęúLręščwBüRud‰3ˆū ˜$ĄúBˆę‰qIū#ë ú€Ię‚L#úLĨęúLŌęšwBüRud‘aũŧ˙ŧ˙ö\ Ē1´Œ3@gœˇĸą-B3œ'‘čŦĸæÄâ40‘’*IN4ÂĄøIIŸúëúģ…ëúøē˜ëúîēÎë—“ē`%åyĸúÁē>ëú´ē…ëú§ē˜ë‹Kē`äúyē>ëúlē…ëú_ē˜ëmāšXŒm%åƒ~ŒúqŒ÷ëúgŒ"ė‘ŽĨö\ á¯öāĸëstr )œ'âîŧ& *œ'áÅö Ŗëstr œ'âîŧ& œ'ŋ;Ĩ.3°Mœ#ŖW˛˙ ”W˛‘ąˇÎ.4œ'‘ą .4%‘†2.4œ'@ėL˛Ū‡.5@[Ą˜$.<įû‘¸ĄR].=Ūį‘HŗÅŽ.`\˛Tė—ˆ Č8.:æŖú“ vėSË.+úS–ė×„e ’  í#.=X¤ú¯ ĩė“¸í#/úĸ¸ĩė‚y¸í#)˜úˆ¸ĩė‹Z¸íP)Đúi¸ríhŅĢŗkē.>œ'/FĢĄ3.@\F‘Dŗe.Fü$pî—ˇĸ .@ęĨúÂĸœî ŦŅĸ‰T *ö¤•#T,úTœî‹] ‰Öē& +âĨúģÅîúģōîúøēīúîēī’“ē&%åļĨúÁēÅîú´ēōîú§ēī„&‚Kē&äúyēÅîúlēōîú_ēī„&3āšXŒ9%åƒ~ŒúqŒ8īúgŒKī‘’ŋ < .AĻúØ ^īúÎ ĒīMQ.—Üę\¸.BƒĻúüęvđúōęŽđ¸…|cŒcP_Đƒú„PvđúwP¤đr:$—‹črđ.BA§úĢčČđúĄčÛđđ…|cŒõbrƒú(cČđúcņđ‰‹IrŲ 4§úšIČđ‚qIrÕú€IČđ‚WIr-úfIČđˆ:$—=øˆ8.B§§ú]øņúSø-ņ8…|cŒcPŽPƒú„PņúwPCņž:$—3ˆžh.V ¨úBˆcņŠqIž#å§ú€Icņ‹L§¸#úL¯ņúLō—ā ĄĐ.Tr¨ú9ōúö QōĐ…|cŒcPĄđƒú„P9ōúwPgōÂ:$™8#Šĸit.GhŖ‡ō’H .HʨúW Ãō‚‡/Xú‡Ãō—. (.Gķ¨ú= Ûō1Ō$$d;.JúWdķōúJdķGö—Ž N(.QcŠú§ 2ķú Eķ(Ŧļ _Ū2’3ˆs .CŽŠƒBˆ‚Ls #ƒLƒLš{wBüR‘D—$ė€@.SĒúDėrķú:ėŠķ@…|cŒcPƒXƒú„PrķúwP ķ–:$—‹č–x.SŌĒúĢčÄķúĄč×ķx…|cŒõb–˜ƒú(cÄķúcí퉋I–Ų ÅĒúšIÄķ‚qI–Õú€IÄķ‚WI–-úfIÄķŦ:$3ˆV.VúBˆô‰qIV# Ģú€Iô‚L\#úL$ôúLQôškwBüR‘Dāĸ˛>.>úëĸdô„˛>…úĸwôŠT˛Ā ¨Ģú#TŠôúTdôŊ‹] ‚SĶ #úSšôß„e ™Íę'Žĸit.XhŖØô’H Í.Y)ŦúW .õ‚‡Í/Xú‡.õ—. đØ.XRŦú= FõųŌ$—ŋ đ.[…ŦúØ ^õúÎ |õ'Q.—3ˆ'.[üŦúBˆÁõŠqI'0#ÃŦú€IÁõ‹L*H#úLßõúLũõšœwBüRw’ä÷A.\f­úøöúú÷Cö„A…|cŒcPDhƒú„PöúwPgöW:$—Ž_]€.\ž­úŽ_‹öú¤_­ö ŗ­ƒŽ_ú¤_ŅöĩcPqcP—ēéq¸.\ ŽúÚéįöƒĐ鍸…|cŒcPwĐƒú„PįöúwP˙öŠ:$‘’.`PŽúį÷Æ&b’ķįÆ.aŠŽú&čC÷účTė‚$dÆ úWdC÷úJdTėĶö—3ˆŪč.` ¯úBˆk÷‰qIŪ#įŽú€Ik÷‹Lä#úL€÷úLĢ÷š"wBüRw’ë.=d¯ú-É÷&×ë/Zú5×É÷úS,’Mįú.hįú^įö÷kúUúkö÷‚åjúúūj øúôjö÷’&.=°ú- ø&×&/Zú5× ø5S,’Mį5!.hh°ú^įMøk5!UúkMø‚åj5!úūjcøúôjMø’3ˆs.`ß°úBˆwø‰qIs#ϰú€Iwø‚Ly#úLŒøúLšøšˆwBüR‘@’ŌS”.cąøáS‘ ‚WI”øfI‘ —3ˆŗ.c‘ąúBˆĖøŠqIŗ0#Xąú€IĖø‚Lŧ#úLßøúL ųšËwBüR‘@’ _Ü.e°ąá^ ’3ˆã.c#˛øBˆW‰qIã#ęąø€IW‚Lé#úLųúLLųšøwBüR‘@íīįœ§ãŗBc Ų´^ Tö\ Š6Ē1ų!*œ´ú,*_ųH’´…;*˜ųPŦJ*…U*âųŠThģÚ˛•#T@úT ú‹] ŠÖē(€Á‹ŗúģ)úúģcúúøēŒúƒîēŒ“ē(€%åúÁē)úú´ēcúú§ēŒú€‹Kē(€äúyē)úúlēcúú_ēŒú€5āšŠ3ˆF˜ÁûŗƒBˆ‰qIF#Âŗƒ€I‹LL¸#úLŸúúL´úšČwBüRuf‰3ˆüÁr´ƒBˆ‰qIü#2´ƒ€I‚L˙#úLėúúLûšwBüPvtüRufFŪ‹žŪ‹īŪ‹ö\ ›Ûö]œC¸^ž$%¤#|:‘¤$Ė,‘Đ.¸ži%9ûđ[ŋŗ[[+ŗĒM_\F‘\žarg0‘cû‰ŌS5nĩúáSŒû‚WI5úfIŒû™R*ŒĩžjB%Žû‰$d LĀĩúWdÁûúJdéûąö‰$dåLôĩúWd#üúJd;üöö‰$dũM(ļúWd˜üúJd°üö‰$dM\ļúWdõüúJd ũ&öŠ3ˆ‡ÔļúBˆ:ũŠqI‡(#›ļú€I:ũ‹LH#úL\ũúL~ũšāwBüRuc‰3ˆ?LˇøBˆudŸ‰qI?#ˇø€IudŸ‚LE#úLœũúLÉũšTwBüRucš5~zpˇüPudĀĀūs2$v"K+ŗĶ+ŗņ+ŗŋŗ-ŋŗK+ŗiŋŗ‡ŋŗĨ+ŗÃŋŗá+ŗ˙;+ŗYwŋŗ•+ŗš45­üPw´a˛]ö\ §ë ÄX œ‹¸øö ‘ø ‘‡%´ü‘‘ü‘‘›˙ö~œŧ^ž%¤#|:‘¤$5‘‘`ŧži%Üũ€[ŋŗ[[+ŗĒM_\F‘\žarg0‘ūŠŌS7˜\šúáS1ū‹WI7˜úfI1ū™V&zšžjB%Sū‰$dĀLŽšúWdfūúJdŽūŅö‰$dLâšúWdČūúJdāūö‰$dMēúWd=˙úJdU˙.ö‰$d5MJēúWdš˙úJd˛˙FöŠ3ˆ‡°ÂēúBˆß˙ŠqI‡Đ#‰ēú€Iß˙‹Lđ#úLúL#šwBüRuc‰3ˆ`:ģøBˆudŸ‰qI`#ģø€IudŸ‚Lf#úLAúLnšuwBüRuc7Æ O+ŗÕ+ŗõ+ŗŋŗ5ŋŗU+ŗuŋŗ•ŋŗĩ+ŗÕŋŗõ+ŗ5U+ŗu•ŋŗĩ+ŗšU5­üPuT´a˛~ö\ §Å ‘F0œ`ŧøĐ ‘øŨ ‘‡5‹¸ü‘‘ü‘‘›#÷œœ-Ŋ%Ā \QŌ¤­ÍyI‘‰ŸR{ĀŧúŽRú¸R”‰cPH{đŧú„PŧƒwP\:$Hûéd}֐y9e ‰\e ”}֐œö\ ßšÁ<ŊŊā ”}ņâî*íųJîãWķ%Kî\ôųJâî–Ôõ%÷-ŊđNÚœŊ ŋø<Ŋ‘ŋ…HŊä…UŊ…bŊ‰ņ)đîŊú,ņ-Š7ņB8ķžúPņMúFņ’Pž…qŊȉcP…õ_žø„PD ŸƒwP™:$‰cPœõžú„PüƒwP­:$Z™e …ûéē=Â}֐Ō}Ö‰ņföâžú,ņtc #`ŧBr] Úö\ ÷üá@âœ(ŋëĀø ‘Š‚ņLhēāĀú‘ņ4‹cņLhĶúrņ4‹-ŊLhŌú<Ŋ4h…HŊ¨…UŊÆ…bŊƉņdđĘŋú,ņäŠ7ņ‚ˆķôŋúPņúFņJ žĀ…qŊs‰cPÍõ;Āø„PD ŸƒwPá:$‰cPäõkĀú„P§ƒwPõ:$›™e Íûé= }֐}Ö‰ņ¤öžĀú,ņŋTtc d`ŧ‚r] "ö\ ÷œ0ęœÁāÂø%‘ø/‘Šģņ<¸ĀÕÂøÔņō/úĘņŌ‹œņ<ØÔúĢņŌ‹-Ŋ<ØŅú<ŊŌØ…HŊF…UŊd…bŊd‰ņWđŋÁú,ņŠ7ņzķéÁúPņ¯úFņõ “Â…qŊ+‰cPÅõ0Âø„PD ŸƒwPŲ:$‰cPÜõ`Âú„P_ƒwPí:$“™e Åûéú= }֐ }Ö‰ņŸöŗÂú,ņwDtc T`ŧzr]  ö\ ß#ĶīÂÃā ”&4āļÄ%÷āÂŅę œ Ã4Åøī‘’ž5 bHÐ: 0—= 8b)Åú/—ú%Ø‹ģņ= 8ĀøÔņō\ÃúĘņö‹œņ= XÔúĢņö‹-Ŋ= XŅú<ŊöX…HŊ…UŊ8…bŊ8ŠņX €đÄú,ņcŠ7ņz ˜ķ<ÄúPņƒúFņ™°æÄ…qŊΉcPÅ õƒÄø„PD ŸƒwPŲ :$‰cPÜ õŗÄú„PƒwPí :$“ ™e Å ûéú =!}֐!}Ö‰ņœ öÅú,ņH tc X `ŧz r]  !ö\ ÷āÂr !œPÅnŸ.!ÃŽ;!á\ ßž}ÅĸÅā ”ĸÅāļÄ%âîÄ<lHŽH÷nÅi–@!0œÃÅĘø}Å‘ČâÉ…“Å;‰žR!<ƐW!0Š`!č@ÜĮú/‰ú%˛‹ģņ`!čĀúÔņĐúĘņ‹œņ`!ÔúĢņ‹-Ŋ`!Ņú<Ŋ…HŊ,…UŊJ…bŊJ‰ņ‚!đČÆú,ņuŠ7ņĒ"8ķōÆúPņˆúFņžP™Į…qŊÔ‰cPõ"õ6Įú„P ƒwP #:$‰cP #õfĮú„P; ƒwP#:$Æ"™e õ"ûé*#=2#}֐h#}Ö‰ņĪ"öšĮú,ņS n!tc ‚!`ŧĒ"r] ‹Å›!p>úŪg úÔĒ pŦíŠįņ›!˜ŗÉúōí úöņ ‹É÷›!˜†úØ÷í ĀøČ…ä÷> ‰cPU"<•Čú„PŒ ƒwPi":$‰cPl"<ÅČú„P´ ƒwP}":$Ē!Úb U"û鐌"=”"}֐B#}֐Ŋ!đb ‹ōÃ!č´ú"ōĖ ‹ÅöÃ!čˆúÔöô …āö ‰cPņ!HzÉú„P; ƒwP":$‰cP"HĒÉú„Pc ƒwP":$Ķ!Äb ņ!ûé&"=."}֐U#}֐J#ö\ ]#ö\ p#ö\ ÷nÅИp#œĘ;Ęø}Å‘~#§ÅŽ‹#á\ ß ĶJĘUĘā ”&4÷;Ę™˛#ÄœqĘ×ÍøJĘ‘’žĻ#\™ĘĢ#0—üŽ#(\Ėú { ‹‚ņŽ#Pēú‘ņ¤ ‹cņŽ#PĶúrņ¤ ‹-ŊŽ#PŌú<Ŋ¤ P…HŊÖ …UŊô …bŊô ‰ņÉ#đLËú,ņ Š7ņ$xķvËúPņ0 úFņT ŅË…qŊˆ 3$™e õ$ûé%cP%cP%=&%}֐L%}Ö‰ņA$öņËú,ņĘ š#tc É#`ŧ$r] ’žÔ#]3ːŲ#0—Ü#°]ÂÍú/Ũ ú%) ‹ģņÜ#°ĀúÔņR úĘņŠ ‹œņÜ#ØÔúĢņŠ ‹-ŊÜ#ØŅú<ŊŠ Ø…HŊŧ …UŊÚ …bŊÚ Šņ÷#đúĖú,ņŠ7ņZ$ ķ$ÍúPņ0úFņT8Í…qŊ•s$™e Ĩ$ûéļ$cPÃ$cPÎ$=Ö$}֐9%}Ö‰ņ}$öŸÍú,ņãį#tc ÷#`ŧZ$r] A%ö\ T%ö\ ũ`%,œīÍųĶ˙ ”ĸÅ‘XĐĶŸÄ/lH‰žl%/7ΐq%0Šüz%x4ŗĪú ‹‚ņz% ēú‘ņŗ‹cņz% Ķúrņŗ‹-Ŋz% Ōú<Ŋŗ …HŊķ…UŊ…bŊ‰ņ™%đëÎú,ņ:Š7ņZ&ČķĪúPņMúFņāpĪ…qŊŗs&™e ¨'û鐚'cPÆ'cPŅ'=Ú'}֐o(}Ö‰ņ&öĪú,ņõ…%tc ™%`ŧZ&r] ŠĄ%5CŅú/ú%H‹ģņĄ%ĀúÔņfúĘņŽ‹œņĄ%0ÔúĢņŽ‹-ŊĄ%0Ņú<ŊŽ0…HŊŌ…UŊđ…bŊđ‰ņÃ%đ{Đú,ņŠ7ņš&`ķĨĐúPņ,úFņBxŅ…qŊvŗ&™e (ûé(cP(cP'(=0(}֐Z(}Ö‰ņĀ&ö Ņú,ņĩ¯%tc Ã%`ŧš&r] Š7ōØ%˜1ŌúFōȍ˜ŦRōŠįņÛ%¸ŦeŌúō#úöņW‹É÷Û%¸†úØ÷#čYŌ…ä÷Ÿ‰cPH'<öŅú„PáƒwP\':$‰cP_'<&Ōú„P ƒwPp':$ä%Úb H'ûé'=ˆ'}֐„(}֐÷%đb ‹ō÷%­ú"ō!&Åö‹Å&(2úŪYúÔ‚(ŦíŠįņ&Hŗ§ĶúōÅúöņî‹É÷&H†úØ÷ōp…ä÷&‰cPč&<BĶú„PtƒwPü&:$‰cP˙&<rĶú„PœƒwP':$&Úb č&ûé'=('}֐E(}Ö‹ō/&´ú"ō´B&ÅöM(ö\ b(ö\ w(ö\ Œ(ö\ ßÔ Ôā ”ĸÅŪ3’æ8÷ųĶ!$(%œ<ÔYÔøÔ‘øÔ‘ą(×ÍߝhԍÔā ”ĸÅŪõ(6Ū3’(æ8÷YÔUĀ(%œŠÔĪÔøhÔ‘ørÔ‘øÔ‘á(×ͧÔI8Fœ‰ÕúčIĖøôI‘ŒŸ¨¨gúŗ¨Œ3ˆ¨]úBˆ‰qI#NÕú€I‹L$Ā#úL;úLuš7wBüR‘oßŲÎ˜ÕŖÕā ”ü(ßD͞ÕĘÕā ”Ijë__x‘ĘÕ`Dß5dŪÕöÕā ”ujë__x>öÕŒ7ßâb Ö!Öā ”?xé__nˇđáTōrÖCI–B!iŐč†0D–Bč:‡0D–BčD0EŐâæŅ>0GŐßKĪŠÖ°ÖIStrā ”ü(ŪČĶˆ°Öâīi‰—cŒ7ß ĪÄÖÜÖā ”ü(Ūp\ƒœ'áO÷˛×Ū$ęīCŪd•ę%âîQëmĪîė†Žî84îvl84îæ÷$õX×%õ ×îĐ9÷$îŽa€5îH/!oKîÕ+€5îž,oKâ@%ßđÎÁ×ä×ā ”ü(āļÄ%âīi~úÎũāÔđ(œü×û˙ ”W‘ØđŸÄMôW“ŸšŧNÂTĻîŖÃPpVĒ­Q%‘čzĒŋ#Xፑ }Ēŧ%^\F‘ėzĒ;la\F‘đzĒQfŋΑ°}îrķ‰žü(MÄØ)0‰= )OŲúL“‚˜a )˙ú§aš‰ŗ] )T*ŲúÂ]ĪúĖ]ã‰LZz)`‚Ųú[Z‚ŌSz)wúáS‚WIz)úfI‰fZ})`ÚŲúuZ-‚ŌS})túáS-‚WI})úfI-HÚúBˆ@ŠqI6* #Úú€I@‹LB*8#úLúLLšá5wBüR‘œ}PˇÚúBˆj‰qIM* #|Úú€Ij‹LV*h#úLĻúLšŅ5wBüR‘Ôz€&ÛúBˆ!‰qIa* #ëÚú€I!‹Lj*˜#úL]úLēšÁ5wBüR‘Ôz°•ÛúBˆØ‰qIu* #ZÛú€IØ‹L~*Č#úLúLqšą5wBüR‘ÔzāÜúBˆ‰qI‰* #ÉÛú€I‹L’*ø#úLúL^šĄ5wBüR‘Ôz sÜúBˆ|‰qI* #8Üú€I|‹LĻ*( #úL¸úLš‘5wBüR‘Ôz@ âÜúBˆ3ŠqIā+` #§Üú€I3‹Lė+x #úLÉúLš5wBüR‘Ôz QŨúBˆ0‰qI÷+ #Ũú€I0‹L,¨ #úL~úLĮšq5wBüR‘ÔzĀ ĀŨúBˆå‰qI , #…Ũú€Iå‹L,Ø #úL3úL|ša5wBüR‘Ôzđ /ŪúBˆš‰qI, #ôŨú€Iš‹L(,!#úLčúL1šQ5wBüR‘Ôz !žŪúBˆO‰qI3, #cŪú€IO‹L<,8!#úLúL暁6wBüR‘ÔzP! ßúBˆ ‰qIG, #ŌŪú€I ‹LP,h!#úL` úLļ šq6wBüR‘Ôz€!|ßúBˆÔ ‰qI[, #Aßú€IÔ ‹Ld,˜!#úL0!úL†!ša6wBüR‘Ôz°!ëßúBˆ¤!‰qIo, #°ßú€I¤!‹Lx,Č!#úL"úLV"šQ6wBüR‘Ôzā!ZāúBˆt"‰qIƒ, #āú€It"‹LŒ,ø!#úLĐ"úL&#šA6wBüR‘Ôz"ÉāúBˆD#‰qI—, #Žāú€ID#‹L ,("#úL #úLö#š16wBüR‘Ôz@"8áúBˆ$‰qIĢ, #ũāú€I$‹L´,X"#úLp$úLÆ$š!6wBüR‘Ôzp"§áúBˆä$‰qIŋ, #láú€Iä$‹LČ,ˆ"#úL@%úL–%š6wBüR‘ÔzŠ3ˆĶ, "e!âúBˆ´%‰qIĶ, #æáú€I´%‹LÜ,¸"#úL)&úL&šA5wBüR‘ÔzЉÕį,Đ"f9ãú˜Õ&ŠŖÕį,đ"ztâúŧÕķ&ú˛ÕI'%-L#Š)(đ,#yËâú8(&‹ ļđ,#úļ&Œėĩđ,#}úûĩ&‚Ōˇę9yúáˇŸ'‚ūļę9Šú ˇŸ'Šļđ9  ƒ™ļú¯ļ´'úŖļÖ'Áđ9 ŠÆ(%-0#gŖæ0#ŦĶ(ÂõĶ%-p#m‹ĪÕ7-ˆ#múčÕé'úŪÕ(ŠžĶ7-Ā#@šäúãĶu(ú×Ķž(úÍĶô(—ûÕ7-đ#ˆtäúÖž(ú Öô(ŒZĶ7-$šƒiĶúsĶž($Œ1Ķ5($ǃ<ĶúHĶW)ŒĶ5($MļƒĶú+Ķ“)úĶW),5r] :ë$ÉŠ>-‡úâŠu(úØŠô(Šjd9-@$@ŧäƒydƒydŠöĒˆ-X$DîåƒCĢú6Ģŗ)ƒ)ĢƒĢ‹ĨĒˆ-X$0úÚĒŗ)ƒÎĒƒÂĒX$…čĒį)Œ!Öˆ-X$0~úVÖŗ)ƒJÖú>Ö[*X$…dÖŠ*’Ē˜-0Kåú7ĒÉ*ú+Ē˙*‘Ļ-’ ; 0PËåúā¨5+úÔ¨S+„ ; ;ÔI ;e ;'e RD-e ‚/ŠRD@ø>Š‘Ėz¨XD ƒ.¨úD¨q+ú8¨“+„XDę§`D˛ƒõ§ú ¨Ļ+ú¨Č+ŋ§`DMšƒΧúä§Ļ+úاČ+iDá\ ‰rÖÕ-Pg\įú”ÖÛ+úŠÖe,„Õ-P…ŖÖī,‰8ā- Œ įúC<-ę-´e ŠŸ(đ-x$Œ0įú¸(\-ƒŽ(‰IĒ.‰PįúXĒ|-.+аI%.$g?éúŋI¤-Šī¨%.¨$¨Œčƒ$ŠúŠĶ-ú Šū-Œ%.¨$—úā¨Ķ-úÔ¨ū-¨$ŒÔI%.¨$~úôIĶ-účI).Ÿ¨G.%gúŗ¨T.3ˆG.%]úBˆT.‰qIG.#Lčú€IT.‚LL. #úLŒ.úLŽ.š^.wBüR‘Ôz‚/Šl.Šú>ŠÁ.¨l. ƒ.¨úD¨>/ú8¨`/„l.ę§p. ˛ƒõ§ú ¨s/ú¨•/ŋ§p. MšƒΧúä§s/úا•/y.á\ ‰ĩÖ|.;hÃéúÎÖ¨/úÄÖŊ/‰8|.„’éúC¨/Š.´e ŠŸ(.Ā$„¸éú¸(:0ƒŽ(ˇ.+ŠĩÖˇ.Ø$iGęúÎÖŽ0úÄÖÃ0‰8ˇ. „ęúCŽ0Â.´e ŠŸ(Č.đ$„<ęú¸(@1ƒŽ(ã.+Šųū.%k—ęú(ų´1‹vSū. %dúS´1ú…S[2 /ūŠ3ˆ /8%këúBˆķ2ŠqI /X%#Öęú€Iķ2‹L/p%#úL3úL 4š6wBüR‘Ôz‰  /m1ë4/Oî‰ 4/ pQë@/´^ ŠÜÖ@/ˆ%rGúôÖ*4úįÖ?4ˆ%¨×‘¨}…×U4¨×‘Č}¨*בÔ~…7×^5ā%æī…Jד5‰3ˆC?ėúBˆĮ5‰qIC #ėú€IĮ5‚L%C#úLÜ5úL 6š7CwBüR‘ü|‰3ˆ7C¸ėúBˆ6‰qI7C #~ėú€I6‚L@C#úL46úLc6šRCwBüR‘ü|‰3ˆRC1íúBˆv6‰qIRC #÷ėú€Iv6‚L[C#úL‹6úLē6šmCwBüR‘ü|‰3ˆmCĒíúBˆÍ6‰qImC #píú€IÍ6‚LvC#úLã6úL7šˆCwBüR‘ü|‰3ˆˆC#îúBˆ%7‰qIˆC #éíú€I%7‚L‘C#úL;7úLj7šŖCwBüR‘ü|‰3ˆŖCœîúBˆ}7‰qIŖC #bîú€I}7‚LŦC#úL“7úLÂ7šžCwBüR‘ü|‰3ˆžCīúBˆÕ7‰qIžC #Ûîú€IÕ7‚LĮC#úLë7úL8šŲCwBüR‘ü|‰3ˆŲCt{īúBˆ-8‰qIŲC #Tīú€I-8‚LâCk#úLC8úLX8•/Ŋ_ Ē/Ée €4iĨ‘™4Ž4—­Â4—­Ō4*æ4—­ú4—­5—­5cˇ&Jû…k×k8…xן8……×Ū8…’×N9¨^×”‰ ¨2cđ„¨2¨ ‘ŧ}¨$ ‘œ}ŧ2 ˇ‰3ˆĄ64ŨđúBˆ‘9‰qIĄ6 #ĸđú€I‘9‚LĒ6#úL§9úLŧ9šŧ6wBüR‘Čz‰3ˆŧ64WņúBˆĪ9‰qIŧ6 #ņú€IĪ9‚LÅ6#úLâ9úL÷9š×6wBüR‘Čz‰3ˆ×64ŅņúBˆ :‰qI×6 #–ņú€I :‚Lā6#úL :úL5:šō6wBüR‘Čz‰3ˆō64KōúBˆH:‰qIō6 #ōú€IH:‚Lû6#úL^:úLs:š 7wBüR‘Čz‰3ˆ 74ÅōúBˆ†:‰qI 7 #Šōú€I†:‚L7#úLœ:úLą:š(7wBüR‘Čz‰3ˆ(74?ķúBˆÄ:‰qI(7 #ķú€IÄ:‚L17#úLÚ:úLī:šC7wBüR‘Čz‰3ˆC74ĨķúBˆ;‰qIC7 #~ķú€I;‚LL7 #úL;úL-;‰3ˆ}7/ôúBˆ@;‰qI}7 #äķú€I@;‚L†7#úLV;úLk;š˜7wBüR‘Čz‰3ˆ˜7/™ôúBˆ~;‰qI˜7 #^ôú€I~;‚LĄ7#úL”;úLŠ;šŗ7wBüR‘Čz‰3ˆŗ7/õúBˆŧ;‰qIŗ7 #Øôú€Iŧ;‚Lŧ7#úLŌ;úLį;šÎ7wBüR‘Čz‰3ˆÎ7/õúBˆú;‰qIÎ7 #Rõú€Iú;‚L×7#úL<úL%<šé7wBüR‘Čz‰3ˆé7/öúBˆ8<‰qIé7 #Ėõú€I8<‚Lō7#úLN<úLc<š8wBüR‘Čz‰3ˆ8/möúBˆv<‰qI8 #Föú€Iv<‚L 8 #úLŒ<úLĄ<‰3ˆ18$/įöúBˆ´<‰qI18 #Ŧöú€I´<‚L:8#úLĮ<úLÜ<šP8wBüR‘Čz‰3ˆA#a÷úBˆī<‰qIA #&÷ú€Iī<‚L A#úL=úL=šAwBüR‘Čz‰3ˆA#Û÷úBˆ-=‰qIA # ÷ú€I-=‚L'A#úL@=úLU=š9AwBüR‘Čz‰3ˆ9A#UøúBˆh=‰qI9A #øú€Ih=‚LBA#úL~=úL“=šTAwBüR‘Čz‰3ˆTA#ĪøúBˆĻ=‰qITA #”øú€IĻ=‚L]A#úLŧ=úLŅ=šoAwBüR‘Čz‰3ˆoA#IųúBˆä=‰qIoA #ųú€Iä=‚LxA#úLú=úL>šŠAwBüR‘Čz‰3ˆŠA#ÃųúBˆ">‰qIŠA #ˆųú€I">‚L“A#úL8>úLM>šĨAwBüR‘Čz‰3ˆĨA9#)úúBˆ`>‰qIĨA #úú€I`>‚LŽA0#úLv>úL‹>Ņ/úe æ/f -04f 80_f c0iĨ‘|0‘0—­Ĩ0—­ĩ0*É0—­Ũ0—­ã0cˇ2iĨ‘2.2—­B2—­R2*f2—­z2—­€2cˇ2r^ Ô2Œ^ É8iĨ‘â8÷8—­ 9—­9*/9—­C9—­I9cˇH&…˙…ĸמ>‰3ˆ;@ØûúBˆĮ>‰qI; #ûú€IĮ>‚L(;#úLŨ>úLō>š:;wBüR‘Čz‰3ˆ:;@RüúBˆ?‰qI:; #üú€I?‚LC;#úL?úL-?šU;wBüR‘Čz‰3ˆU;@ĖüúBˆ@?‰qIU; #‘üú€I@?‚L^;#úLV?úLk?šp;wBüR‘Čz‰3ˆp;@FũúBˆ~?‰qIp; # ũú€I~?‚Ly;#úL”?úLŠ?š‹;wBüR‘Čz‰3ˆ‹;@ĀũúBˆŧ?‰qI‹; #…ũú€Iŧ?‚L”;#úLŌ?úLį?šĻ;wBüR‘Čz‰3ˆĻ;@:ūúBˆú?‰qIĻ; #˙ũú€Iú?‚L¯;#úL@úL%@šÁ;wBüR‘Čz‰3ˆÁ;@´ūúBˆ8@‰qIÁ; #yūú€I8@‚LĘ;#úLN@úLc@šÜ;wBüR‘Čz‰3ˆÜ;@˙úBˆv@‰qIÜ; #ķūú€Iv@‚Lå;#úLŒ@úLĄ@1Ŋ_ 1Ée Č3iĨ‘á3ö3—­ 4—­4*.4—­B4—­V4—­\4cˇŠ3ˆ8h&D˙˙úBˆ´@ŠL8€&#â˙úLĘ@úLß@š#8wBüR‘Ėz‚qIĻ: #ú€I´@‰3ˆ:DyúBˆō@‰qI: #>ú€Iō@‚L :#úLAúLAš:wBüR‘Čz‰3ˆ:DķúBˆ0A‰qI: #¸ú€I0A‚L(:#úLCAúLXAš::wBüR‘Čz‰3ˆ::DmúBˆkA‰qI:: #2ú€IkA‚LC:#úLAúL–AšU:wBüR‘Čz‰3ˆU:DįúBˆŠA‰qIU: #Ŧú€IŠA‚L^:#úLŋAúLÔAšp:wBüR‘Čz‰3ˆp:DaúBˆįA‰qIp: #&ú€IįA‚Ly:#úLũAúLBš‹:wBüR‘Čz‰3ˆ‹:DÛúBˆ%B‰qI‹: # ú€I%B‚L”:#úL;BúLPBšĻ:wBüR‘Čzu/yf í0¯d 2Ûūh9iĨ‘9–9—­Ē9—­ē9*Î9—­â9—­č9cˇ˜&Ÿ‹s%cB‰3ˆŪAsÜúBˆB‰qIŪA #Ąú€IB‚LįA#úL—BúLŦBšųAwBüR‘Đz‰3ˆųAsVúBˆŋB‰qIųA #ú€IŋB‚LB#úLÕBúLęBšBwBüR‘Đz‰3ˆBsĐúBˆũB‰qIB #•ú€IũB‚LB#úLCúL(Cš/BwBüR‘Đz‰3ˆ/BNsJúBˆ;C‰qI/B #ú€I;C‚L8BE#úLQCúLfCšNBwBüR‘Đz‰3ˆ}BsÄúBˆyC‰qI}B #‰ú€IyC‚L†B#úLCúL¤Cš˜BwBüR‘Đz‰3ˆ˜Bs>úBˆˇC‰qI˜B #ú€IˇC‚LĄB#úLĘCúLßCšŗBwBüR‘Đz‰3ˆŗBs¸úBˆōC‰qIŗB #}ú€IōC‚LŧB#úLDúLDšÎBwBüR‘Đz‰3ˆÎBNs2úBˆ0D‰qIÎB #÷ú€I0D‚L×BE#úLCDúLXDšíBwBüR‘Đz51Ŋ_ L1da 3iĨ‘(3=3—­Q3—­a3*u3—­‰3—­3—­Ŗ3cˇŠŲ]T1¸&tÃúč]kDƒō]Šs]W1Đ&uíú‚]—DúŒ]ÃDО×c1đ&fĸ úÁרD'Ķ…××E‰"ˇc1~fú1ˇØD‚uc1$úuØDúuRE‰pˇp1~¨úˇØD‚up16úuŠEƒu‰Vˇ…1~ČúeˇŖE1 ` ‚Ōˇž1}úáˇģE‚ūļž1Šú ˇģEŠļž1 ƒ™ļú¯ļęEúŖļ F„ž1Uļĸ1 ˛ƒ`ļúxļFúlļAF*ļĸ1 Mšƒ9ļúOļFúCļAFĢ1á\ ‰& i1vĖ ú? TFú5 €FŠ3ˆŽ1 'eF úBˆŦF‰qIŽ1 # ú€IŦF‹Lˇ18'#úLŪFúL Gšņ5wBüR‘ÔzŠ3ˆÂ1P'wĀ úBˆ+G‰qIÂ1 #… ú€I+G‹LË1h'#úLOGúLqGšį2wBüR‘ÔzО×W7€'f/ úÁ׏G™W7&h …×׹G‰"ˇW7~= ú1ˇG‚uW7$úuGúuīGŠVˇn7˜'~] úeˇHv7 ` ‚ŌˇU8}úáˇ/H‚ūļU8Šú ˇ/HŠļ[8 ƒ™ļú¯ļDHúŖļfH„[8Uļ_8 ˛ƒ`ļƒxļúlļyH*ļ_8 Mšƒ9ļƒOļúCļyHh8á\ ‰3ˆk8e¨ úBˆŒH‰qIk8 #n ú€IŒH‚Lt8#úLĸHúLŅHš†8wBüR‘¨{‰3ˆ†8$w! úBˆäH‰qI†8 #į ú€IäH‚L8#úLúHúL)IšĄ8wBüR‘ëz™÷;” úBˆ#úLĪMúLūMš>wBüR‘œ}™>;¤úBˆN‰qI> #jú€IN‚L>2#úL&NúLUNš5>wBüR‘œ}‰3ˆĢ?\úBˆhN‰qIĢ? #ãú€IhN‚L´?#úL{NúLĒNšÆ?wBüR‘”}‰3ˆÆ?\–úBˆŊN‰qIÆ? #\ú€IŊN‚LĪ?#úLĶNúLOšá?wBüR‘”}‰3ˆá?\úBˆO‰qIá? #Õú€IO‚Lę?#úL+OúLZOšü?wBüR‘”}‰3ˆü?\ˆúBˆmO‰qIü? #Nú€ImO‚L@#úLƒOúL˛Oš@wBüR‘”}‰3ˆ@\úBˆÅO‰qI@ #Įú€IÅO‚L @#úLÛOúL Pš2@wBüR‘”}‰3ˆ2@\zúBˆP‰qI2@ #@ú€IP‚L;@#úL3PúLbPšM@wBüR‘”}‰3ˆM@\ķúBˆuP‰qIM@ #šú€IuP‚LV@‡#úL‹PúLēPšl@wBüR‘”}‰3ˆŨ@&kmúBˆÍP‰qIŨ@ #2ú€IÍP‚Læ@#úLãPúLøPšü@wBüR‘ÔzG)™d e)”f ‘Ÿ)´)—­Ö)—­ō)—­ *—­&*—­6*—­Į*iĨÜ*iĨņ*iĨ‘+++—­?+—­S+—­h+—­|+—­’+*Ļ+—­ļ+*Ę+—­ā+*Ā‘ü.‘û:r>iĨ‘Ž>Ŗ>—­š>—­Ë>*á>—­÷>—­ũ>cˇ?iĨ‘:?O?—­e?—­w?*?—­Ŗ?—­Š?cˇĒ8ö\ ßyjGCI*‘ā ”ujŪ†—*‘Ū:‡—*‘ë__a˜Gô€7á…ōCI*‘!iŐč†0D*‘č:‡0D*‘čD0EŐâæŅ>0GŐ›d/€DČœ'œĖsū' Q‰$dŽD ˙ųøWdĻ ŸúJdæQ™Dö‰$d¤D-úWdÁRúJd)S˛Dö‰$dŊDaúWdØSúJd0TËDöŠõb E°'íú(cŸTúcĀT‰‹I EŲ âúšIŸT‚qI EÕú€IŸT‚WI E-úfIŸTE:$‰ŌÕ E DúáÕĶT‚%x Eú4xĶTx E}úxĶTŠøHEČ'1 ú ōT‹ûHEā'úƒ7ú**UúōTúbUŠyHEø'™ßƒ’úˆbUŒÉŠHEø'€ƒâŠúØŠbU(‹5KE(úd™UúWŅUúM V(‹ã˙KE(īú™UúŅUúû˙ V(…&@VŠZĶKE0(čúiĶ VúsĶ@V0(Œ1ĶKE0(Ēú<Ķ VúHĶ@VŒĶKE0(MļúĶ Vú+ĶlVúĶ@ViEr] ‹^˙~EX( ƒĢ˙úž˙˜Vú‘˙ĪVú„˙W‹ ˙~EX(0úB˙˜Vú6˙ĪVú*˙WX(…P˙?WŒL~EX(0~ú˜VúuĪVúikWX(…™W’Ōū~E0KÉúûūÂWúīūíW‘˜E’ÚF 0P úā¨#XúÔ¨AX„ÚF åFÔIÚFe íF'e öF-e ŠøŠEp(Ô#ú aX‹ûŠE˜(úƒ7ú*™XúaXúŅXĀ(Ų"‹5ŠEĀ(údũXúW5YúMmYĀ(‹ã˙ŠEĀ(īúũXú5Yúû˙mYĀ(…&™YŠZĶ3Fø(’!úiĶmYúsĶ™Yø(Œ1Ķ3Fø(Ēú<ĶmYúHĶ™YŒĶ3Fø(MļúĶmYú+ĶÅYúĶ™YQFr] ‹^˙fF ) ƒĢ˙úž˙ņYú‘˙(Zú„˙`Z‹ ˙fF )0úB˙ņYú6˙(Zú*˙`Z )…P˙˜ZŒLfF )0~úņYúu(ZúiÄZ )…ũZ’ŌūfF0Ks"úûū&[úīū\[‘€F’G 0Pą"ú⍒[úÔ¨°[„G (GÔIGe 0G'e CG-e Šy0F@)™ #ƒ’úˆŅXŒÉŠ0F@)€ƒâŠúØŠŅX‚/ŠžF™ú>ŠĐ[¨ŖF ƒ.¨úD¨ä[ú8¨\„ŖFę§§F˛ƒõ§ú ¨\ú¨7\ŋ§§FMšƒΧúä§\úا7\°Fá\ ŠēĀEX)Á&úĪJ\‹ûĀEx)úƒ7ú*’\úJ\úÚ\ŠyĀE˜)™o$ƒ’úˆÚ\ŒÉŠĀE˜)€ƒâŠúØŠÚ\°)‹5ÃE°)úd]úWY]úMĄ]°)‹ã˙ÃE°)īú]úY]úû˙Ą]°)…&Ø]ŠZĶÃEØ)x%úiĶĄ]úsĶØ]Ø)Œ1ĶÃEØ)Ēú<ĶĄ]úHĶØ]ŒĶÃEØ)MļúĶĄ]ú+Ķ^úĶØ]áEr] ‹^˙öE* ƒĢ˙úž˙H^ú‘˙^ú„˙ˇ^‹ ˙öE*0úB˙H^ú6˙^ú*˙ˇ^*…P˙ī^ŒLöE*0~úH^úu^úi_*…T_’ŌūöE0KY&úûū}_úīūŗ_‘F’G 0P—&úā¨é_úÔ¨`„G  GÔIGe G'e 7G-e ëDûéüDcP EcP E}֐ŧFö\ ĮF}֐ĪFö\ Ē1áķ"R'{%–BI_TpŪ† ģ–BŪ:‡ ģ–BŪÎK ŧR'א›īŨPGÚœ‡.¤áė &7‘¤à ‡.‘¤3Ä Œ.‘¤Ü/Å ‘.‘  *|.ŸyÆ –.'`‰ 'mGÉ ((úD'V`ú7'–`ú*'¸`‚ŦmG ăMŦƒAŦƒ5Ŧ€Gēo‰,÷ŒGÎ R(ú7÷Î`G2>ŠcPŸGH*Î †(ú„Pú`úwP2aŦG:$ŠõbŦG`*Î )ú(c[aƒc‰‹IŦGŲ )úšI[a‚qIŦGÕú€I[a‚WIŦG-úfI[aģG:$ŠcPĀGx*Î B)ú„PnaúwP–aÍG:$ŠõbÍG*Î Ę)ú(cŋaƒc‰‹IÍGŲ ŋ)úšIŋa‚qIÍGÕú€Iŋa‚WIÍG-úfIŋaŨG:$ŠcPāG¨*Î ū)ú„P÷aúwPbíG:$Š3ˆíGĀ*Î v*úBˆ2bŠqIíGā*#=*ú€I2b‹LöGø*#úLjbúL™bšæHwBüRuT‰°IHJÎ [,úŋIˇb‰ī¨H4¨¨+ƒ$ŠúŠŲbú ŠėbH4—úā¨ŲbúÔ¨ėb„H4ÔIH4~úôIŲbúčI˙bŒŸ¨H+gúŗ¨*cŒ3ˆH+]úBˆ*c‰qIH#j+ú€I*c‹LH(+#úLbcúL„cš-HwBüRw‚/Š;HŠú>Šĸc¨;H ƒ.¨úD¨Äcú8¨āc„;Hę§?H ˛ƒõ§ú ¨ķcú¨dŋ§?H MšƒΧúä§ķcúاdHHá\ Šõb‹H@+Ë į,ú(c"dúc5d‰‹I‹HŲ Ü,úšI"d‚qI‹HÕú€I"d‚WI‹H-úfI"dšH:$ŠcPHX+Ë -ú„PHdúwP`d­H:$Šõb­Hp+Ë Ŗ-ú(cdƒcŠ‹I­Hˆ+Ų ˜-úšId‹qI­H +Õú€Id‹WI­H¸+-úfIdÁH:$‰3ˆIÎ .úBˆ“d‰qII#â-ú€I“d‚LI#úL¨dúLÕdš$IwBüRuTšjG9.üPu\üRu mHûé~HcP‹HcPÎHcPÖH}֐öH}Ö‘I Iö\ Ē1Ē1Ē1Œ7›/Ū0I°œ%I¤áėĶ &7‘¤¨ãÔ œ'‘¤ž|Õ %I‘Đ+Iî3’Ö *IĒ5q× \F‘”Ÿņ1ë %čd‰Šoô īŗ‘DĒ zø īŗ‘T‰U_Lķ 8úd_ÚqėSLMúûSr‚‹IL6úšIr‚qILÕú€Ir‚WIL-úfIrŠ ŠcPŸL¸0õ 49ú„P—súwPīsŽL:$ŠõbŽLĐ0ö ŧ9ú(ctƒc‰‹IŽLŲ ą9úšIt‚qIŽLÕú€It‚WIŽL-úfItĀL:$ŠcPÃLč0÷ đ9ú„PKtúwP“tĐL:$Š3ˆĐL1ö h:úBˆĻtŠqIĐL 1#/:ú€IĻt‹LŲL81#úLâtúLušhNwBüRudŠ3ˆäLP1ö ā:úBˆúBˆ`x‰qIP#>ú€I`x‚L…P#úLuxúLĸxš”PwBüRu`‰3ˆ”Pø ŗ>úBˆĩx‰qI”P#z>ú€Iĩx‚LšP#úLĘxúL÷xšŠPwBüRu`‰3ˆŠPô +?úBˆ y‰qIŠP#ō>ú€I y‚L¯P#úLyúLLyšžPwBüRuP‰3ˆžP$ú Ŗ?úBˆ_y‰qIžP#j?ú€I_y‚LÄP#úLtyúLĄyš×PwBüRuD™âP@úBˆ´y‰qIâP#Û?ú€I´y‚LčP#úLÉyúLŪyš÷PwBüRud‰3ˆûPö Œ@úBˆņy‰qIûP#S@ú€Iņy‚LQ#úLzúL3zšQwBüRud‰3ˆQö ō@úBˆFz‰qIQ#Ë@ú€IFz‚LQ#úL[zúLpz™)Q#cAúBˆƒz‰qI)Q#*Aú€Iƒz‚L/Q#úL˜zúLÅzš>QwBüRud8LáiRL—­dL—­‘‹L M—­M—­AM–MM|™ōMcPĮMojŠ3ˆ—Nč2 >BúBˆØzŠqI—N3#Bú€IØz‹L N83#úLüzúL{šØNwBüRud‰3ˆģOč ļBúBˆ<{‰qIģO#}Bú€I<{‚LÁO#úLQ{úL~{šĐOwBüRud‰3ˆĐO č CúBˆ‘{‰qIĐO#õBú€I‘{‚LÖO#úLĻ{úLģ{‰3ˆŨO  •CúBˆÎ{‰qIŨO#[Cú€IÎ{‚LãO#úLä{úL|šōOwBüRu›‰3ˆũOŪ DúBˆ&|‰qIũO#ÔCú€I&|‚LP#úL<|úLi|šPwBüRud‰3ˆP Ū sDúBˆ||‰qIP#LDú€I||‚LP#úL’|úL§|Š3ˆPP3é ëDúBˆē|ŠLPh3#ÎDúLĪ|úLä|š'PwBüRud‚qILQ#ú€Iē|‰3ˆ+På cEúBˆ÷|‰qI+P#*Eú€I÷|‚L1P#úL }úL:}š@PwBüRud‰3ˆ@På ÉEúBˆM}‰qI@P#ĸEú€IM}‚LFP#úLc}úLx}‰3ˆUPÚ AFúBˆ‹}‰qIUP#Fú€I‹}‚L[P#úLĄ}úLÎ}šjPwBüRud‰3ˆjPÚ §FúBˆá}‰qIjP#€Fú€Iá}‚LpP#úL÷}úL ~‰3ˆrQį GúBˆ~‰qIrQ#æFú€I~‚LxQ#úL4~úLa~š‡QwBüRud‰3ˆ‡Qį …GúBˆt~‰qI‡Q#^Gú€It~‚LQ#úL‰~úLž~‰3ˆŸQá ëGúBˆą~‰qIŸQ#ÄGú€Ią~‚LĨQ#úLĮ~úLÜ~‰3ˆžQ"á cHúBˆī~‰qIžQ#*Hú€Iī~‚LÄQ#úLúL2šĶQwBüRud‘TIcIcP‘vI‘‹IœIW'‘ßI‘ôIJW'‘HJ‘]JnJW'‘ĩJ‘ĘJÛJW'KÕ-‘&K:KW'‘rK‘‡KžKW'ŌKF—NcPĀNcPûOö\ į9¸9n8›OŪāQŪœZ¤áė &7‘¤[— Z‘€3ZĒĻņ \F‘¨ŠcPR¨3 ēIø„P  ŸúwPER:$ŠõbRĀ3 BJú(cnƒc‰‹IRŲ 7JúšIn‚qIRÕú€In‚WIR-úfIn!R:$Š3ˆ[Rā3 ēJúBˆņŠqI[R4#Jú€Iņ‹LdR4#úLq€úLԀšeUwBüRudŠ3ˆoR04 2KúBˆŠqIoRH4#ųJú€I‹LuR`4#úL&úLHš~UwBüRudŠ3ˆÁRx4 ĒKúBˆfŠqIÁR˜4#qKú€If‹LĘR°4#úL‚úL’‚š‹UwBüRu`Š3ˆÕRČ4 "LúBˆĀ‚ŠqIÕRā4#éKú€IĀ‚‹LÛRø4#úLä‚úLƒš¤UwBüRu`Š3ˆ'S5 šLúBˆ$ƒŠqI'S05#aLú€I$ƒ‹L0SH5#úLǃúL„šąUwBüRu`Š3ˆ;S`5 MúBˆH„ŠqI;Sx5#ŲLú€IH„‹LAS5#úLj„úLŒ„šĘUwBüRu`Š3ˆS¨5 ŠMúBˆĒ„ŠqISČ5#QMú€IĒ„‹L–Sā5#úL0…úL …š×UwBüRu`Š3ˆĄSø5 NúBˆ΅ŠqIĄS6#ÉMú€I΅‹L§S(6#úLđ…úL†šđUwBüRu`Š3ˆîS@6 zNúBˆ0†ŠqIîS`6#ANú€I0†‹L÷Sx6#úL“†úLö†šũUwBüRudŠ3ˆT6 ōNúBˆ$‡ŠqIT¨6#šNú€I$‡‹LTĀ6#úLD‡úLf‡šVwBüRudŠ3ˆKTØ6 jOúBˆ„‡ŠqIKTø6#1Oú€I„‡‹LTT7#úL͇úLˆš#VwBüRudŠ3ˆ_T(7 âOúBˆDˆŠqI_T@7#ŠOú€IDˆ‹LeTX7#úLfˆúLˆˆš#¨dú€IąĄ‹L„[(>#úLíĄúL)ĸšū\wBüRu\Š3ˆ[@>; [eúBˆWĸŠqI[X># eú€IWĸ‹L•[p>#úLyĸúL›ĸš]wBüRu”™´[xĸfži> %šĸŠ8|ŧ[ˆ>> ÚeúG|Øĸ‹bŧ[ˆ>Zú!bŖ‹øaŧ[ˆ>Īúb%Ŗúb%Ŗ‰ų{Ķ[ ? fú|NŖú|nŖ‚׏Ķ[ •úđNŖú揂Ŗ„Ķ[ …ũ™Ŗ‹nĶ[¨>Kú@n˛Ŗú5nNŖú*nĮŖ‹”eĶ[Ā>/ƒŖeƒŖeū[Š1\4IŠcP,\Ø>B Öfú„PâŖúwP ¤<\:$Šõb<\đ>B ^gú(c(¤ƒc‰‹I<\Ų SgúšI(¤‚qI<\Õú€I(¤‚WI<\-úfI(¤L\:$Š3ˆY\?B ÖgúBˆh¤ŠqIY\(?#gú€Ih¤‹Lb\@?#úL¨¤úL䤚$]wBüRud‰3ˆ›]- NhúBˆĨ‰qI›]#hú€IĨ‚LĄ]#úLĨúLEĨš°]wBüRud‰3ˆ°] - ´húBˆXĨ‰qI°]#hú€IXĨ‚Lļ]#úLmĨúL‚Ĩ‰3ˆŊ] B -iúBˆ•Ĩ‰qIŊ]#ķhú€I•Ĩ‚LÃ]#úLĢĨúLÚĨšŌ]wBüRuŸ‰3ˆŨ]0 ĨiúBˆíĨ‰qIŨ]#liú€IíĨ‚Lã]#úLĻúL/Ļšō]wBüRud‰3ˆō] 0 júBˆBωqIō]#äiú€IBĻ‚Lø]#úLWĻúLlĻŠ3ˆ˙]X?9 ƒjúBˆĻŠL˙]p?#fjúL”ĻúLŠĻš^wBüRud‚qIŧ^#ú€Iω3ˆ ^, ûjúBˆŧωqI ^#Âjú€IŧĻ‚L^#úLŌĻúLįĻš ^wBüRu`‰3ˆ$^) skúBˆúωqI$^#:kú€IúĻ‚L*^#úL§úL=§š9^wBüRu`‰3ˆ9^) ŲkúBˆP§‰qI9^#˛kú€IP§‚L?^#úLf§úL{§‰3ˆR^6 SlúBˆާ‰qIR^#lú€Iާ‚LX^#úLŖ§úL¸§šg^wBüRu”‰3ˆg^$6 ÍlúBˆ˧‰qIg^#’lú€I˧‚Lm^#úLā§úLõ§š€^wBüRu”‰3ˆ‹^2 EmúBˆ¨‰qI‹^# mú€I¨‚L‘^#úL¨úLJ¨š ^wBüRud‰3ˆ ^2 ĢmúBˆ]¨‰qI ^#„mú€I]¨‚LĻ^#úLr¨úL‡¨‰3ˆÔ^; #núBˆš¨‰qIÔ^#ęmú€Iš¨‚LÚ^#úL¯¨úLܨšé^wBüRu\‰3ˆé^$; ›núBˆī¨‰qIé^#bnú€ILī^#úLŠúL1Šš_wBüRu\‰3ˆ _ , oúBˆDЉqI _#Únú€IDŠ‚L_#úLZŠúL‡Šš&_wBüRu`‰3ˆ-_' yoúBˆšŠ‰qI-_#Roú€IšŠ‚L3_#úL°ŠúLÅŠ‰3ˆL_%' ņoúBˆØŠ‰qIL_#¸oú€IØŠ‚LR_#úLîŠúLĒša_wBüRu`‘ŪWëWcP9XiĨ‘MX\XW'ŦXiĨ‘ĀXĪXW'YiĨ‘0Y?YW'‘~Y‘“YĸYW'åY÷Æ‘øYZW'JZÕ-‘]ZlZW'šZiĨ‘ÍZÜZW'[F‘T[‘i[{[W'Ž[cPY\cPÛ]ö\ Hũ Ũ€_€œqNy˙ ”yC‘¤čĒ Ny‘%‘ˆ?CyŸjĖ ĄD.ĒĒŸģ ‘˜~ĒvĢ ‘œ~Ēáė1  ‘¤~Š÷ŧ†_°? 6rúŊĀĒúŊzĢ’3ˆMc@%rúBˆŦ‰qIMc #ëqú€IŦ‚LVc#úL)ŦúLXŦšhcwBüRuŦ~‘Ÿ_§_5ģŠÜZø_Ø? jrúôZkŦúįZŖŦ`B_ Šį`đ?1 8túIįˇŦú+įãŦŠ `@šrú­‘$`Šgį$`8@esúŠįŽúvį;ŽŠŸį$`h@#?sƒÂįúŽį;ސ’` ũŠ M“`˜@#?Bsƒ/MúM׎ē` ũ‚ÔLc##?ƒ÷LúãLb¯Š-Đ`°@ûsúFx¯ú<˜¯—ķŒĐ`Đ@cŗsú˜¯‘Ba˜Œ^a cú§Œ%°‚XŒ^a ŧƒ~ŒúqŒްúgŒ%°‰aLlc!!túpLð‘…cua ũ‘åc‘øcŠ3ˆ§ač@3 ątúBˆō°ŠqI§aA#wtú€Iō°‹Lŗa A#úLSąúLĄąšģbwBüRuŸ~Š(Ėa8A1 vú (ŋąŠ8æĖa`A5ˆuúIæ ˛—3ˆĖa€A@fuúBˆ[˛ŠqIĖa A#-uú€I[˛‹Lb¸A#úLОúL÷˛šībwBüRw2L b@úALŗ‘$b‰D($bA5öuƒg(úS(cŗŠ–L-bĐA#;ĶuƒšLúĨLąŗ‹ÔL?bđA#;ƒ÷LúãL˙ŗ‹aLebB5úpLM´‘}bŠɋ}b B ­vúڋ´´Œ3ˆ}b@B;úBˆĩŠqI}b`B#rvú€Iĩ‹L‰bxB#úL^ĩúLŦĩšãbwBüRuŦ~ŠɋbB4 AwúڋĘĩŒ3ˆb¨B;úBˆĘĩ‰qIb #wú€IĘĩ‹L™bĀB#úL ļúLJļšËbwBüRuŦ~‰ɋc Õwúڋhļ3ˆc;úBˆhļ‰qIc #šwú€Ihļ‚Lc#úL~ļúL­ļš#cwBüRuŸ~‰ɋ#c*4 ixúڋĀļ3ˆ#c*;úBˆĀļ‰qI#c #.xú€IĀļ‚L,c!#úLÖļúLˇš>cwBüRuŸ~‰3ˆ°c&3 âxúBˆˇ‰qI°c #¨xú€Iˇ‚Lšc#úL.ˇúL]ˇšĪcwBüRuŸ~ļ_åĐŧ_#ːŲ_Bc å_´^ ņ__ €a$Z•a&b§a*d Ėa]_ ‘cGcö\ Há%#˜yvŐ{ŐŪ†vŐŪ:‡vŐŪDvŐß‚i§yÜyā ”„dë__nŽģcë__sŽœ'âîC“Ejáļō-zCIŐ!iŐč†0DŐč:‡0DŐčD0EŐâæŅ>0GŐũ]iķœEzi…˙ ”uj‘œâĸG‹cpˇĨ__xGi…‘ØB#}ĒęĨQ‘\Š„øBLözú%„įˇú=„ûˇú1„¸ŒڃøBMŊúéƒįˇú˙ƒûˇúķƒ¸‘,ŠSyJCSü{úŠy.¸ú}yA¸ƒpy‹˜ŌJC‚úŲŌ.¸úĖŌA¸ƒŋŌ‹ŌJC_úXŌ.¸úKŌA¸ƒ>ŌC…gŌa¸‹ ŅJCVú×Ņ™¸úĘҏƒŊŅC…æŅš‹vSk(CúSšú…S:šxūŠvS@CW,|úSMšƒ…SŒūŠ3ˆŒXCW¤|úBˆ‡šŠqIŒxC#k|ú€I‡š‹L•C#úLŠšúLËššŦwBüRuc‰3ˆ(%W}úBˆéš‰qI(#ã|ú€Iéš‚L.#úLūšúL+ēš=wBüRuc‘G¨C^…îC^EjŸ0=`Ej>ēŸYWa[csēŸ€ob[cˇēŠ˜yŽĀC_ö}úžyrģúąyĒģú§yÖģĀC…Íyŧ‰jdސŌ}ƒydƒyd‚CŊĩ“úcŊ7ŧƒWŊŠvÕŊčC`~ƒ Õú“ÕoŧŠZĶĐDaŖ~úiĶĮŧƒsĶD1ĶĐĒú<ĶķŧƒHĶĶĐMļúĶķŧú+ĶŊúĶŊŲr] Š„ß(Di ú%„/Ŋú=„CŊú1„oŊŒڃß(DMŊúéƒ/Ŋú˙ƒCŊúķƒoŊ‘õŠÜÔú@Drp€ƒ)ÕúÕņŊƒÕúÕdž‹„Ôú@D0.ƒŅÔúÄÔņŊƒˇÔúĒÔdž‹3Ôú@D0úhÔņŊƒ\ÔúPÔdž@D…vÔwžŒÜyú@D0~úzņŊƒzúųyßž@D…z9ŋ’Ē0K€ú7ĒLŋƒ+Ē‘’Æ 0PL€ƒā¨úÔ¨ŋ„Æ ŅÔI”-e Æe Ų'e ŠÜÔ2hDyāƒ)ÕúÕŧŋúÕ ĀƒÕ‹„Ô2hD0.ƒŅÔúÄÔŧŋúˇÔ ĀƒĒÔ‹3Ô2hD0úhÔŧŋú\Ô ĀƒPԍhD…vÔZĀŒÜy2hD0~úzŧŋúz ĀúųyžĀhD…zŨĀ’Ē@0K~ú7ĒÁú+ĒhÁ‘N’ 0Pŧúā¨ŠÁúÔ¨ĮÁ„  ÔIe ('e Ū-e ‰ī¨d*ˆķ‚ƒ$ŠúŠķÁú ŠÂd*—úā¨ķÁúԨ„d*ÔId*~úôIķÁúčI&Ÿ¨xgúŗ¨D3ˆx]úBˆD‰qIx#ĩ‚ú€ID‚L}#úL|ÂúLÚŒwBüRud‰¨¯Š‚ƒƒ.¨ƒD¨ú8¨Ö„¯ę§ļ ˛ƒõ§ƒ ¨ú¨ęŋ§ļ MšƒΧƒä§úاęŋá\ ‰ī¨f„ėƒƒ$ŠúŠūÂú ŠÃf—úā¨ūÂúԨÄftÔI‰¨w…{„ƒ.¨ƒD¨ú8¨1Äwę§~ ˛ƒõ§ƒ ¨ú¨]Ïŋ§~ MšƒΧƒä§úا]Їá\ ‰ŊŸ 5…ƒȟúԟqÏ—Ÿ Mƒϟú°ŸqÏ3ˆ  …úBˆqÉqI #ú„ú€IqÂL¨#úL…ÃúL˛ÃšˇwBüRud\e 'e e ę-e Fö\ אßÕg}…•…ā ”ujë__x‘•…†7›k÷dœ“D “Ē %‘ŦĒáS%‘°Ēec‘HĒ5Z%‘¸‰$d d5†øWdŸøJdŸdö‰ŌÕBdŒ†úáÕÅÂ%xBdú4x ďxBd}úx ÄŠ)_dĀD{Žú) Åú&)OÅú )‹ÅĀD¨5)‘T…B)ķʼnŌÕ_dē/‡úáÕbÆ‚%x_dú4xbƏx_d}úxbƝđD˜‹…Q)iĮŠLd EÂۇúBLßĮú5L-Čú+LVČŠ[Nd@EŗԇúNŠČútN-ČújNVČŠ‹Id`ECɇúšIVȐyg$$‘ģdŠn…ždxEÂxˆú‡…ŌČú}…1ɉ„Æd•mˆú%„Éú=„ŽÉú1„ÛɏڃÆdMŊú郁Éú˙ƒŽÉúķƒÛÉ‘Úde-z‰3ˆædÂđˆúBˆîɉqIæd#ˇˆú€IîÉ‚Lėd#úLĘúLJĘšûdwBüRuLŠL eEŋˆ‰úBL]Ęú5LŒĘú+LÎĘŠ[N e¨Eŗ‰úN+ËútNŒĘújNÎʉ‹I eCv‰úšIÎʐÍg$$‘;eŠn…>eĀEŋ%Šú‡…cËú}…˙ˉ„Je•Šú%„žĖú=„ëĖú1„͏ڃJeMŊú郞Ėú˙ƒëĖúķƒÍ‘[e-g-zŠ3ˆgeØEŋŠúBˆ*͉qIge#dŠú€I*Í‹LmeđE#úLsÍúLėÍšgwBüR‘H‰3ˆĨgŋ‹úBˆ ΉqIĨg#܊ú€I ΂LĢg#úLÎúLLΚēgwBüR‘H‰3ˆäg‹úBˆ_ΉqIäg#T‹ú€I_΂Lęg#úLtÎúLĄÎšųgwBüR‘DdÍŠėÕxeFÆ’ŒúÖ´ÎúûÕEĪ‹>…xeF¯úW…´ÎúM…EĪ—Ē„xe Fg Œúʄ´Îúž„EĪ F…؄ŽĪ—Ē„~e@FhZŒúʄĄĪúž„8Ѝ@F…؄ĐŒĒ„e`FiúʄĩĐúž„LŅ`F…؄•ŅŠ°IŠexFÆsŽúŋI¨ŅŠī¨ŠeF¨Āƒ$ŠúŠ9Ōú ŠmŌŒŠeF—úā¨9ŌúÔ¨mŌFŒÔIŠeF~úôI9ŌúčI€ŌŒŸ¨¯e¨Fgúŗ¨ĢŌŒ3ˆ¯e¨F]úBˆĢŌ‰qI¯e#‚ú€IĢŌ‹L´eĀF#úLãŌúLĶšÆewBüRuP‚/ŠĶeŠú>Š;Ķ¨Ķe ƒ.¨úD¨æĶú8¨Ô„Ķeę§×e ˛ƒõ§ú ¨?Ôú¨[ԏŋ§×e MšƒΧúä§?Ôúا[Ԑāeá\ ‘‡gŠ3ˆãeØFķŽúBˆnÔ‰qIãe#ēŽú€InÔ‹LéeđF#úLËÔúL\Õš gwBüR‘XŠjd÷eG/úydzÕúydzÕ‰Nj7f0Gú]jÃÕúgjōÕ‰NjOf1qú]jÖúgjAÖ‰Njif2›ú]jaÖúgjÖŠĩ–f G9éúō°ÖúæęÖúÚ×úÎ>×úÄmבĨfаIŽfHG9ʑúŋIĸ×Šī¨ˇfpG¨‘ƒ$ŠúŠÄ×ú Š×׌ˇfpG—úā¨Ä×úÔ¨×׍pGŒÔIˇfpG~úôIÄ×účIę׌Ÿ¨ĮfˆGgúŗ¨ØŒ3ˆĮfˆG]úBˆØ‰qIĮf#ؐú€IØ‹LĖf G#úLMØúL‡ØšŪfwBüRu`‚/ŠëfŠú>ŠĨ؏¨ëf ƒ.¨úD¨ĮØú8¨ãØ„ëfę§īf ˛ƒõ§ú ¨öØú¨Ųŋ§īf MšƒΧúä§öØúاؐøfá\ ‰3ˆ:g4B’úBˆ%Ų‰qI:g# ’ú€I%Ų‚L@g#úL:ŲúLgŲšOgwBüR‘X‰3ˆ‡gē’úBˆzŲŠqI‡g¸G#’ú€IzŲ‹LŠgĐG#úLŲúLēŲšŸgwBüR‘@‘\d!fMi'fcˇAfá1[fá1ufá1Œfr] ‘[gÚgá\ cgö\ –‘ hÉœ0“z•ú  ÍŲŠ] "hčGĮ”úl ÚŠuf'hHøŧ”úŽfWÚú„f€ÚŠšf7h HŽą”úŠfÆÚ’īŠ>h õʓúúŠäڐGhda —3ˆJh8HķA”úBˆ÷Ú‰qIJh#”ú€I÷Ú‹LOhPH#úLÛúL7Ûš¸hwBüRug3ˆēhķøBˆV‰qIēh#w”ø€IV‚LÁh#úLUÛúL‚ÛšĐhwBüRug_há\ 'hš…‰w hh)•ú† •Û‚ˇalh æúÉaÁÛ‚[lh -ú[×Ûú[ëÛŠ×mvhhH[•úæmÜš§hô@üPs…h€ hEˆŲhö\ ÷‘ Ğāhœ–•Ē•ø  ‘Žõh“›{÷ĐœŦš^ž%œ#k|:,Üœ$k5‘@ÜŠvS=€Hs–úSTÜú…SrܐJūŠ3ˆJ˜Hs•–úBˆšÜŠqIJ¸H#\–ú€IšÜ‹LSĐH#úLÎÜúL Ũš‡wBüRucŠĢ ^čHwæ—úē (Ũ‹SŠdIŧƒbŠúlŠpŨ‚ī¨j6žƒ$ŠúŠƒŨú Š–Ũj6—úā¨ƒŨúÔ¨–Ũ„j6ÔIj6~úôIƒŨúčIŠŨŒŸ¨Igúŗ¨ßŨŒ3ˆI]úBˆßŨ‰qI#Ļ—ú€IßŨ‹L„8I#úLŪúL9Ūš˜wBüRwXI—™žix%WŪŠn…׀Iyœ˜ú‡…¤Ūú}…íŪ‰„į•‘˜ú%„Eßú=„]ßú1„rߏڃįMŊúéƒEßú˙ƒ]ßúķƒrß‘õo-zŠ3ˆ˜Iy™úBˆ…߉qI#ۘú€I…ß‹L °I#úL§ßúLáßš wBüRuc‰3ˆ˛yŒ™øBˆudŸ‰qI˛#S™ø€IudŸ‚L¸#úLāúL<āšĮwBüRucׯ ‰Å 0~˙úŨ OāúĐ {ā>‹¸‰ž> 뙐F0Š‘ IČIšú  ›ā}“‰3ˆ”sšúBˆšā‰qI”#Tšú€Išā‚Lš#úLÎāúLûāšŠwBüRuc=Æ ˛ö\ Đö\ ›{/iœūš¤#|:‘¤$5‘‘‡iĒ•ü‘‘ü‘‘›Ÿ÷Ĩœ¨Ÿ^ž$%¤#k|:‘¤$kĖ,‘ŠvSEāIsr›úSáø…SŸSūŠ3ˆSøIsę›úBˆFáŠqISJ#ą›ú€IFá‹L\0J#úLdáúL†áš|wBüRucŠĢ gHJw7úē ¤á‹SŠl`JŧƒbŠúlŠĖá‹ī¨r€Jžƒ$ŠúŠ÷áú ŠĖግr€J—úā¨÷áúÔ¨ĖፀJŒÔIr€J~úôI÷áúčI⌟¨˜Jgúŗ¨KâŒ3ˆ˜J]úBˆKâ‰qI#÷œú€IKâ‹L”°J#úLƒâúLĨâšĨwBüRsČJ˙žžix%ÃâŠn…ÜđJyíú‡…ãú}…L㉄é•âú%„”ãú=„Ŧãú1„ÁãڃéMŊú郔ãú˙ƒŦãúķƒÁã‘÷o-zŠ3ˆKyežúBˆÔã‰qI#,žú€IÔã‹L  K#úLöãúL0äšwBüRuc‰3ˆ‡yŨžøBˆudŸ‰qI‡#¤žø€IudŸ‚L#úLNäúL{äšœwBüRucšÜ~züPsĀĀūv2$u "‰ë ( ~3Ÿú Žäúö ēä4´‰ž4 SŸ<0‰‘ ?!}Ÿú  ÍäQ“šE~zŸüPsĀĀūu Ĩö\ ›–/iœúŸ¤#“|:‘¤$“Ė,‘‡iūšü‘‘ü‘‘§ E˜FœĐ úEāäø*E‘ŒxĖ8KgúŒĖåŒ_Š8K]úqŠå‹3ˆ8KŌúBˆOå‰qI#” ú€IOå‹L%PK#úL‹åúLÅåš8wBüR‘oßиß ÷ ā ”¤ië__x>÷ (Bß}ˇ Ą"Ąā ”Qŗé__nˇđáįōsĄCI u!i°Ač†0D uč:‡0D učD0E°AâæŅ>0G°AũÕÆņœ‹ĄĻ˙ ”Ļ‘hKúĨŸ*íųJãåŸãWķmÍæŸ\ôųJæŠÚ#€KđõĄúé8æŠôJ˜KķoĨú Xæú€æ‹Đ XČKÚúé Øæúß įŠŖXøK@JŖúČįúŧGįø˛uT—ü X(Lˆ%ŖúĄGįø ĄuTŒÔËXPLšƒãËúíËGįPLŒĢË``LǃļËúÂËČįŒ€Ë``LMļƒËúĨË(čú™ËČįpr] Œë$Öāg‡úīāįøåāuTŠ^i^xL@lŖƒmiƒmiŠ.°LDģ¤ƒ{únHčƒaƒT‹Ũ°L0úHčƒƒúL… ŠčŒ"Ą°L0~úWĄHčƒKĄú?ĄÂ荐L…eĄäč’hŪĀ$0KZ¤ƒ‘Ūú…Ū.éņ€Ä Sƒ úoé‘Ū’™ĖÚ 0P˜¤úšĖŖéú­ĖÁé„Ú å E‘-e Úe í'e ‚"Í‘@ú1Íáéŗ— ƒ,ŗúBŗõéú6ŗę„—č˛› ˛ƒķ˛ú ŗ(ęú˙˛HęŊ˛› Mšƒ˞úâ˛(ęúÖ˛Hꐤá\ ¸LŅĨŸ–Ôõ%[ę˙™e !ûé2cP?cPH=P}֐É}֐tc #f:Jr] ˛á\ ēö\ Ņö\ @BßT#Ļ^Ļā ”ÆEč V<÷čm=œ'čČ%>%čVĘ?œ'¯ú' iŠœvĻ ŗ˙ ”äG‘¤r1Â÷‘¤ėÜ'‘¤¨ÃÄ%‘ ¤-BÅ ŗ‘¤ĶWÆ%ŗ‘ØLŗģmsgĮįû‘@ŸˇĘ€č„ęĒ3’Ú÷‘L‰‹č5iČ˧øĢ葸Ąč‘DŸ„5i…|cŒõb5iøLƒø(c‘úcˇęŠ‹I5iMŲ ŋ§øšI‘‹qI5i(MÕø€I‘‹WI5i@M-øfI‘Mi:$‰įņSiʨúōÚęúöņë[iÉ÷Š:[iXMËF¨úI/ë‹ cipMđú/QëkisĄŠ^ikiˆMËp¨úmiuëúmiuë‰&éĀjĖļ¨úFé“ëú<éģë„Āj…|cÔjcPŠOčÖj MĖø¨úočŨëúečė M…|cįjcPŠZįj¸MĖ:Šúz'ėúpOė¸M…|cújcPĐM†­žiÎ%qėŠ:újčMΙŠúI„ė‹ kNđú/Ļė ksĄŠ^i kNÎÊúmiĘėúmiĘė0Nî}JĐ*ŗŠ:ĒƒŒiƒ–iŠ&éck˜NŅĨĒúFé#íú<é[퍘N…|cŒcPgk¸Nƒú„P#íúwPŠíwk:$Š‹čwkØNŅdĢúĢčĒíúĄčĖíØN…|cŒõbwkøNƒú(cĒíúcî퉋IwkŲ WĢúšIĒí‚qIwkÕú€IĒí‚WIwk-úfIĒ퐍k:$Š&ék OŌËĢúFéîú<é9î O…|cŒcP“k@Oƒú„PîúwP[îŖk:$Š‹čŖk`OŌŠŦúĢč{îúĄčî`O…|cŒõbŖk€Oƒú(c{îúcŋIŖkŲ }ŦúšI{î‚qIŖkÕú€I{î‚WIŖk-úfI{k:$Š3ˆšk¨OŅ­úBˆâîŠqIškĀO#ÉŦú€Iâî‚LÂk#úLīúL>īšÕkwBüR‘P‰3ˆčkŅz­úBˆQī‰qIčk#A­ú€IQī‚Lîk#úLfīúL“īšũkwBüR‘Pbk§ã‰ŌS†iÖ­úáSĻī‚WI†iúfIĻīŠīæšiØOÜė­úįŪīŠi&bŠĻŠiđOÜ8¯úQĻđúEĻYđú9Ļđú-Ļāđú#Ļņ’3ˆClDĒŽúBˆŽņ‰qICl#qŽú€IŽņ‚LIl#úLŖņúLļņšWlwBüRv’3ˆWlD!¯úBˆÉņ‰qIWl#čŽú€IÉņ‚L]l#úLŪņúL ōšllwBüR‘H‘ĐiâiQĄ‘ōi‰ŌS¸iÜt¯úáSō‚WI¸iúfIōŠ3ˆōi PÜė¯úBˆZōŠqIōi@P#ŗ¯ú€IZō‹LûiXP#úL–ōúLÛōšákwBüRv‰üjŨN°ú ųō‹‚ņ jpPēú‘ņķ‹cņ jpPĶúrņķj-ŊŠō^jPĘx°ú"ō=ķgjÅöŠMįgj¨PüŲ°ú^įUķŒkgjĀPUúkUķ‹åjgjØPúūjjķúôjUķŠ$ėˆjđP׹úDė~ķú:ė–ķđP…|cœjcPŠ‹čœjQ×ÚąúĢčĢķúĄčŋķQ…|cŒõbœj Qƒú(cĢķúcÔķŠ‹Iœj@QŲ ÍąúšIĢķ‹qIœjXQÕú€IĢķ‹WIœjpQ-úfIĢ퐴j:$‰ōũkʲú"ō÷ķlÅö‰Mį l"üe˛ú^įôk l"Uúkô‚åj l"úūj$ôúôjô™ll"Ö˛úBˆ8ô‰qIll#˛ú€I8ô‚Lrl#úLMôúLzôšlwBüR‘H5iīį‘^j‘8l˜l¯f Ŗlę\ļlÃf ÁlŨf 'lö\ Ē1Ē1ÂAĢâ˛gĐlčœJŗ„ĩ˙ ”„ĩ‘¤-Bg‰ĩ‘Š3ˆ0mˆQnßŗúBˆôŠqI0m¨Q#Ļŗú€Iô‹L9mĀQ#úLßôúLõš`mwBüRu_Š3ˆ@mØQnW´úBˆIõŠqI@mđQ#´ú€IIõ‹LFmR#úLiõúL‰õšwmwBüRs‰3ˆm nĪ´úBˆ§õ‰qIm#–´ú€I§õ‚L‡m#úLŧõúLéõš–mwBüRu_‰3ˆĄmnGĩøBˆu`Ÿ‰qIĄm#ĩø€Iu`Ÿ‚L§m#úLüõúL)öšļmwBüRu_įl0õl—]m mm00m^ϐŸmö\ 5;5䓺” ĩÅĩā ”_ZāļÄ%âîG•–ˆŽĩFĀmXœáĩĩšø ĩ‘ R珍ļĩ‘XŠ–nHR•‘ļúĨ<ö‹T`nHRúc`<ö‰`nWļú*`pö‚ŌSnúáSŦö‚WInúfIŦö‰Mį@n•ōļú^įŋök@nUúkŋö‚åj@núūjÔöúôjŋöŠzįVnhR•ÖˇúŒįčö‹~ˆVn€Rúˆ1÷‹4gVn˜RúMgz÷úCg1÷Š3ˆ]n°RŽɡúBˆš÷‰qI]n#ˇú€Iš÷‹LbnČR#úL¸÷úLÚ÷š¸nwBüRu\rná\ ‰MįĖn•7¸ú^įø÷kĖnUúkø÷‚åjĖnúūj øúôjø÷‰zįßn•}¸úŒį!ø‚~ˆßnúˆ6øėn4gímĖŖnīį+nēV8n/ŗ@n—WÆn—WŠ3ˆunāR”2šúBˆcø‰qIun#ų¸ú€Icø‹L{nøR#úL…øúLÁøš§nwBüRv‰3ˆīn)”ĒšúBˆßø‰qIīn#qšú€Ißø‚Lõn##úLôøúL ųšowBüRv oö\ áą/ėšŪŌj ėšâî’ įûâīi'Œ7ēČ/ oŗœÃ¤cqѤ*{#Ã‘Š '&oS‡ēúD'ųú7'Hųú*'jų‹Ŧ&oS ăMŦƒAŦƒ5Ŧ@oēoŠĩšLo(S{žúĀš€ų(S¨Īš‘\™]oãƒŊ…ŪšžųŠjd`o@SīēƒydƒydŠjdxoXSģƒydƒydŠ&éˆopSxģúFéŊųú<éÕųpS…|cŒcP‹oSƒú„PŊųúwPęųĄo:$‰‰dŽožģƒ˜dúĸd úŠ‹čĄo¸SIŧƒĢčúĄč*ú¸S…|cŒõbĄoØSƒƒ(cúc?ú‰‹IĄoŲ <ŧƒšI‚qIĄoÕƒ€I‚WIĄo-ƒfIļo:$Š&éļoT°ŧúFéoúú<é‡úT…|cŒcPŧo Tƒú„PoúúwPœúĖo:$‰ēéëoŊúÚéŧúúĐéÔú„ëo…|cŒcPîo@Tƒú„PŧúúwPéúp:$‚.ëp'úNëûúDë1û„p'…|cŒcPpXTƒú„PûúwPFû/p:$Šīæ@ppT­ŊúįvûOp&bŠMįOpˆTžú^įŋûŒkOp TUúkü‹åjOp¸TúūjQüúôjü‰Mį¸qožú^į‰ük¸qUúk‰ü‚åj¸qúūjžüúôj‰üXoīįŠ“ųqpĐTŊžúŗų˛üúŠųúüĐT…|c„pcPŠ‹č„pđThŋƒĢčúĄč[ũđT…|cŒõb„pUƒƒ(cúc¯ũŠ‹I„p8UŲ [ŋƒšI‹qI„pPUÕƒ€I‹WI„phU-ƒfIœp:$Šēép€UĒŋúÚéßũúĐéū€U…|c¯pcPŠ‹č¯p UiĀúĢčkūúĄč§ū U…|cŒõb¯pĀUƒú(ckūúcûū‰‹I¯pŲ \ĀúšIkū‚qI¯pÕú€Ikū‚WI¯p-úfIkūÅp:$ŠoûÅpčU ĢĀúû+˙ú…ûc˙čU…|cØpcPŠOčØpV íĀúočˇ˙úečī˙V…|cëpcPŠ&éėp(V /ÁúFéCú<é{(V…|cūpcP‰Mį/qÁú^įĪk/qUúkĪ‚åj/qúūjūúôjĪŠ3ˆEq@VÂúBˆ‰qIEq#ĪÁú€I‹LKqXV#úLMúL|šqqwBüRud‰3ˆuq€ÂúBˆš‰qIuq#GÂú€Iš‚L{q#úL¯úLÜšŠqwBüRu[‰MįŖqáÂú^įīkŖqUúkī‚åjŖqúūjúôjīqpīįqēV'q/ŗ/q—W“qö\  q—WĒ1Œ7ŖÕ(āqŲœoƤĖs(oÆ‘¤š )tÆ‘Š3ˆrpV+×ÃúBˆŠqIrV#žÃú€I‹Lr¨V#úLPúLš‹rwBüRuW‰°I&rS+¸ÅúŋIŠī¨,rĀV¨Åƒ$ŠúŠŋú ŠŪŒ,rĀV—úā¨ŋúÔ¨ŪĀVŒÔI,rĀV~úôIŋúčIņŒŸ¨@rØVgúŗ¨Œ3ˆ@rØV]úBˆ‰qI@r#ĮÄú€I‹LErđV#úLTúLvšVrwBüRv‚/ŠfrŠú>Š”¨fr ƒ.¨úD¨ļú8¨Ō„frę§mr ˛ƒõ§ú ¨ōú¨ŋ§mr MšƒΧúä§ōúاvrá\ ‰3ˆĸr+0ÆøBˆuXŸ‰qIĸr#÷Åø€IuXŸ‚L¨r#úL"úLOšˇrwBüRuWšųqNÆüPsüRu‘ rrņš‘˜r rö\ Ē149ēõĀržœQĶWFĶŸÄšlHbî[—›ŠVŸÄ|žpVuŸē,Ÿí“ŸE\ 0‘Ŋî5'ŖpVŸkƒ¤í.Ÿœ Ĩ0‘W‰žÉrš7ĮÎr0ŠLZãr0WĨĮú[Z—‹ŌSãr0WwúáSĀ‹WIãr0WúfIĀŠLZërHW įĮú[Zī‹ŌSërHWwúáS ‹WIërHWúfI pWŸNÄŠ÷$IŸ?˜Ģ÷$g˜WyÎî đ´0‘ŸY/ļ0‘•ŠfZ"sĀWŧČúuZŗ‹ŌS"sĀWtúáSŗ‹WI"sĀWúfIŗŠdô0sØWēöČú„ôÆúzôØW…|cŒcP3sđWƒú„PÆúwPBFs:$ŠĒFsXģ]ÉúĘeúĀX…|cŒcPLs0Xƒú„PeúwPƐ\s:$ŠŠę\sPXŧÄÉúĒęæú ęPX…|cŒcPbspXƒú„PæúwPGrs:$ŠŽ_rsXŧĘúŽ_gú¤_ŋ¸XĘƒŽ_ú¤_čÄvcP’scPŠēé’sĐXŊ€ĘúÚéũƒĐéĐX…|cŒcP˜sđXƒú„PũúwP5 Ģs:$ŠÜęĢsYžãĘúüęU ƒōęY…|cŒcPąs(Yƒú„PU úwP Ás:$ŠŽ_Äs@Yž<ËúŽ_gú¤_­ `Y1˃Ž_ú¤_Ü ¤vcPÜscPŠüÜsxYžŸËúņ ƒxY…|cŒcPâs˜Yƒú„Pņ úwP) õs:$ŠÜęõs¸YŋĖúüęI ƒōꍸY…|cŒcPûsĐYƒú„PI úwP  t:$ŠŽ_tčYŋ[ĖúŽ_Ą ú¤_Ų ZPĖƒŽ_ú¤_ „vcP&tcPŠåų&t ZŋžĖúú ƒûų Z…|cŒcP,t@Zƒú„P úwPE ?t:$ŠZõ?t`ZĀ!Íúzõe ƒpõ`Z…|cŒcPEt€Zƒú„Pe úwP Ut:$ŠÜęUt ZÁ„Íúüę­ ƒōꍠZ…|cŒcP[t¸Zƒú„P­ úwPÕ kt:$‰Mį™tēåÍú^įõ k™tUúkõ ‚åj™túūj úôjõ ‰Mį7wēFÎú^į k7wUúk ‚åj7wúūj3 úôj 0sīᐇtēV‘t/ŗ™t—W4w—WŠfZÖtĐZČŅÎúuZG ‹ŌSÖtĐZtúáSG ‹WIÖtĐZúfIG ŠdôátčZÆĪú„ôZ úzô’ čZ…|côtcPŠļôôt[ĮUĪúÖôÕ úĖô […|cucPŠŽ_u [ČŽĪúŽ_P ú¤_¨ H[ŖĪƒŽ_ú¤_ë wcP'ucPŠēé'u`[ČėĪúÚéƒĐé`[…|c>ucPŠoû?u€[É*ĐúûHƒ…û€[…|cQucPŠŽ_Qu [ɃĐúŽ_P ú¤_Č[xĐƒŽ_ú¤_ؐ$wcPqucPЎįquā[ĘÁĐú×įîƒÍįā[…|cˆucPŠŽ_‹uø[ĘŅúŽ_&ú¤_^\ŅƒŽ_ú¤_šävcPŖucPŠ&éŖu0\ĘXŅúF鯃<é0\…|cēucPŠõēuP\Ë–Ņú(õ׃õP\…|cÍucPŠZõÎup\ĖÔŅúzõ˙ƒpõp\…|cāucPŠõāu\ÍŌú(õ'ƒõ\…|cķucPŠĒôu°\ÎPŌúĘOƒĀ°\…|cvcP‰Mį4vÆąŌú^įwk4vUúkw‚åj4vúūj™úôjw‰MįUwÆĶú^į­kUwUúk­‚åjUwúūjÂúôj­átīį"vēV,v/ŗ4v—Wuw—WSwö\ ŋ>—Ē€wœkĶŲ˙ ”Õ‘ąa ǜ'‘Č\÷Øŗ¤Ô¯€5ÖŗļP°õCõ’8wĢÚĶúC6•w´e ā\˙ĶŗĮpŊ0‘_ôwíf ]ÄØĄ…Ā–‘X—ī_ųw(]ĀgÔú`Šúū_Š‹Å_ųwH]úŪ_ãúÔ_—ãü?x`]ÁÍÔúũ%úųüM`]…|cŒcPExx]ƒú„P%úwPUx:$—Ž_Ux]ÁOÕúŽ_°ú¤_ØŒcPUx¨]™ú„PúwP!‰OUx CÕú"O]x9] nx:$—gnxĐ]ÂąÕú‡Qƒ}Đ]…|cŒcPtxč]ƒú„PQúwPy„x:$—3ˆĪx^Ā(ÖúBˆ™ŠqIĪx^#īÕú€I™‹LŌx0^#úLŽúLæš'ywBüRs’MįßxÁˆÖú^įkßxUúk‚åjßxúūj&úôj—zįōxP^Âk×úŒįF‹~ˆōxh^úˆh‹4gōx€^úMgŠúCghŠ3ˆũx˜^Ž^×úBˆĒ‰qIũx#%×ú€IĒ‹Ly°^#úLČúLęš7ywBüRvyá\ ’Mį;yÁË×ú^įk;yUúk‚åj;yúūjúôj’zįNyÂØúŒį1‚~ˆNyúˆF[y4g’3ˆwy‡ØúBˆs‰qIwy#NØú€Is‚L}y#úLˆúLĩšŒywBüRuS?xīįĸx†ęŊxēVĮx/ŗĪx—Wty—WŸwr_ Ēw ` ŧwQ] Ëwíf xW` cyö\ ›Ã÷ y}œKÚ¤r1†÷‘¤-B‡KÚ‘Š3ˆÕyČ^ŽŲúBˆČŠqIÕyč^#uŲú€IČ‹LŪy_#úLúLVšøywBüRus‰3ˆ˙y&ÚøBˆutŸ‰qI˙y#íŲø€IutŸ‚Lz#úLiúL–šzwBüRus‘šyÁy0Õy^ϐzö\ Ē1ēŪ÷ƒœŨŨIT›ļpĮ¤wĻ'ZH‘œD:'NqФĀ'œ'‘ ‰ž ?Âڐ0Šˆq"_BöÚúēqíú­q%ú q™vzJÜžeHŨŨĮŠ3ˆŖ0_K‹ÛúBˆÚŠqIŖH_#RÛú€IÚ‚LŦ#úLíúLšģwBüRus‰3ˆÍKÜúBˆ-‰qIÍ#ĘÛú€I-‚LĶ#úLBúLošâwBüRus‚e š™°đ+ÜüPsüQuŖŲĀ-e į-e Š3ˆ`_OÂÜúBˆ‚ŠqIx_#‰Üú€I‚‚L#úL•úLš-wBüRus_ņÜÃčŨHe P'e z-e ‰3ˆPOiŨúBˆÕ‰qIP#0Ũú€IÕ‚LV#úLęúLšewBüRusÄ\sđö\ üe š °đĒŨüPsüR0üQuŲ2-e j-e sö\ ƒö\ âŨ}W#IˆŖĖĖ zëœ ŪšŪø˛‘™$z 1ŪŦž)zyƍ¨_ø˛‘¨_…ž*‰ž8z`pې=z0Izj>ozPڐwzMzj>ĻzPڐšzj>ÛzPÚē ø‡œEâITČ­pĮZH¤wĻ'Õ9‘œD:'ČqH¤Ā'œ'‘ ‰ž ?.ߐ0Šr"Ā_Bbßú;rŒú.rÄú!r.Ø_˛āžeHEâfŠ3ˆŖđ_KķßúBˆyŠqIŖ`#ēßú€Iy‚LŦ#úLŒúLššģwBüRus‰3ˆĪKkāúBˆĖ‰qIĪ#2āú€IĖ‚LÕ#úLáúLšäwBüRus‚e š™°đ“āüPsüQuŖŲĀ-e é-e Š3ˆ `O*áúBˆ!ŠqI8`#ņāú€I!‚L #úL4úLaš/wBüRusP`YáÃJâLe T'e ~-e ‰3ˆTOŅáúBˆt‰qIT#˜áú€It‚LZ#úL‰úLļšiwBüRusÄ\sōö\ ūe š °đâüPsüR0üQuŲ4-e n-e wö\ ‡ö\ âŨI“{žœgâ×ãú%ɍh`…1Ŧ>ŦK…XŠÃX{ˆ` Į⍈`¨ĐX‘XR{¨] ‰ž{ įâ#{0‰ŗW&{ ãúÂWúĖWRŠaÜ1{¨` 1ãúsÜ~‰ÃX|A eã„|A¨ĐX‘X|¨] ‰ŗW[| % ãúÂWĨúĖW¸1{0”{j>š{šŪĮ{M{j>|Pڐy|Ŗ÷72°|œķã.äø%‘™´| #äŦ1Ŧ>ŦKŦXŽÅ|Oâē?øƒœģįITļpĮ¤wĻ'ë@‘œD:'IrˤĀ'œ'‘ ‰ž ? ä0Šƒr"Ā`BÔäúĩrú¨rHú›r˛™vz(æžeHģįęŠ3ˆŖØ`KiåúBˆũŠqIŖđ`#0åú€Iũ‚LŦ#úLúL=šģwBüRus‰3ˆÍKáåúBˆP‰qIÍ#¨åú€IP‚LĶ#úLeúL’šâwBüRus‚e š™°đ æüPsüQuŖŲĀ-e į-e Š3ˆaO æúBˆĨŠqI a#gæú€IĨ‚L#úL¸úLåš-wBüRus8aĪæÃĀįHe P'e z-e ‰3ˆPOGįúBˆø‰qIP#įú€Iø‚LV#úL úL:šewBüRusÄ\sđö\ üe š °đˆįüPsüR0üQuŲ2-e j-e sö\ ƒö\ âŨI“gĐ|ËœŨįåéúvMPa…‚„ŦŦœ‰žŲ|€ #čŪ|0‰ŒWá|  Mčú›W„úĨWĮŠaÜō|haƒ mčúsÜķŠÃX5}€aŠ č€a¨ĐX‘XC}¨]  aSé…Ģ Š|H}Āa‹ ÷čú-|9 ‹eH}ĀaJ ú)ee ú)ee ‰ŧ}Œ Héú%z ™ŧ}=éŦ1Ŧ>ŦKŦXĮ}O␚}ވ‰ÃXŲ}BŽ ‡é„Ų}B¨ĐX‘Xč}¨] ‰ŒW`~• ąéú›W˜ úĨW­ ō|0 }j>5}.ä3~j>W~.ä÷g‹ ~œę6ęøv‘™¤~ +ęŦ‚ŦŦœŽĩ~ÅįáløięčÍû‡˙´âæčėˆáiæŅ Ž%át!‚ęŪ[—Në@áø›ęëenvrV@á”ø´ęëenvsV@á§øÛęč›—%âæĖP›%ˆz…DĀ~œ÷ęæņø‰‘đa?ëŦ•ŦĸŦ¯ŦŧŦÉŦÖŦãøœ^ bÛņú‰Á b…•!…ĸu!…¯ˆ!…ŧī!ŦÉ…ÖB"…ã–"Š‘ é~8bÍëú  Á šƒ“üPsŠÃXWPb´ũëPb¨ĐX‘Xk¨] ‰aÜ]˛ėúsÜÛ"hbKņ…ō,# bŦ˙Š_vÔČbėÂėúnv‡#‹EvÔČb@úTv‡#đbļėúTvÍ#Šb[ÔcEĢėúq[Í#ƒÔs„Fw‰Āö%ŋRíúĪā#‚Đvö%Čƒøvúív$‚‹vö%(ƒÂvƒĩvú¨v_$‚ię€ Ŧútęĸ$ €`‰ŠÃX€(cÁ‚í(c¨ĐX‘X)€¨] ‰˙7Ķėíƒ'īúīÃ$‚Ŧ›™€7(ƒã›ƒ֛úɛį$‚‚검 Ŧúę4%@cī…R%Šbė€XcŲFîú!bq%‹øaė€XcĪúb%úb%Ššĸ‚€cÛĪîúŗĸŗ%úŠĸë%€c…Āĸū%‹n‚˜cRú@nD&ú5nŗ%ú*nY&‚”e:‚/ƒŖeƒŖe‹g"‚°cÛƒvČcīŦ‚ŦŦœU‚Åį‰|‚âmīúo&‚׀|‚Zúæ€o&‚\€|‚$úu€o&ƒk€‰‚âËīú*…&‚€‚Húœ€…&‚\€‚6úu€›&ƒk€‰5‚‚>âBđƒlƒ_ƒRŠũ‚āc Ģ%đƒ žŒõ‚‚āc ¸ƒƒ‹›ę›‚øc ŦúĻęą&‰ÃX"9ævđ„"9¨ĐX‘X0¨] Š´ęŪ‚dúņúŋęĪ&d…Íę'ZƒûékƒcPxƒcPƒ=ŽƒcP›ƒ=¨ƒcPŗƒ}֐U„}ÖŠÚ(ƒ0dÅ+ņúķ'úé8'ä€MļœŲ̐=ƒĄ0Š6ę̓Hd­ąņúAęN'Hd…Oęl'…[ęŒ'ŒÃX„`d‰`d¨ĐX‘X#„¨] û~§Î-üƒè]„ö\ ēŧø‡œrõITēļpĮü$¤wĻ'­D‘œD:'DsŦ'¤Ā'œ'‘ ‰ž ?[ō0Š‚s"xdBōúˇsđ'úĒs((ús’(dßķžeHrõĘ(Š3ˆŖ¨dK ķúBˆŨ(ŠqIŖĀd#įōú€IŨ(‚LŦ#úLđ(úL)šģwBüRus‰3ˆĪK˜ķúBˆ0)‰qIĪ#_ķú€I0)‚LÕ#úLE)úLr)šäwBüRus‚e š™°đĀķüPsüQuŖŲĀ-e é-e Š3ˆØdOWôúBˆ…)ŠqIđd#ôú€I…)‚L #úL˜)úLÅ)š/wBüRuse†ôÃwõLe T'e ~-e ‰3ˆTOūôúBˆØ)‰qIT#Åôú€IØ)‚LZ#úLí)úL*šiwBüRusÄ\sōö\ ūe š °đ?õüPsüR0üQuŲ4-e n-e wö\ ‡ö\ âŨI߇͋õŗõā ”ŗõŪ‡BĘ œ'âî‰QŅ ĄDbCßŖÍĮõÜõā ”ŗõāļÄ%ũę$`„Õœôõ”÷˙ ”äG‘ e‰÷ŸSJ÷$-*îŲ='ö͉_Y`„LöønYŸ‰ {„ -vöú9E*ú/\*Џõ „@eY öúĮõo*ĩ„za ŠyYȄXe)Ęöú„Y‡*Մķ;Š|õՄpe)Q÷ú•õŸ*ú‹õŊ*„ã„2…¤õÕ*ŠÜZㄈeŅ ;÷úôZķ*úįZ +ņ„B_ … g  …]_ ‰¸õ… Y~÷øĮõōö)…za š„æņ5…ö\ ũ)@…†œŦ÷3û˙ ”äG‘ eûŸˇ”€č)+ŠįņO…Āe”ÎøúōX+øöņōÃ÷‹É÷O…Āe†úØ÷X+čeÂø…ä÷+‰cPՅ<_øú„PÛ+ƒwPé…:$‰cPė…<øú„P,ƒwPũ…:$U…Úb Յûé †=†}֐ž†}֐d…đb Š:g…f•ųúI,‹ j…(fđú/H,|…sĄŠՊ|…Hf•úúäŠi,‹ŦŠˆ…hf¸úˇŠ|,úʏ,Œ†Šˆ…hfMĀú•Š|,úŸŠ,Œ_Šˆ…hf …úqŠ,‹3ˆˆ…hfŌúBˆ­,‰qIˆ…#Ņųú€I­,‹LŽ…€f#úLĪ,úL-šˆ†wBüRudŠō™…˜f•íúú"ō6-‹Åö™…˜fˆúÔön-¸f…āö—-‰cP5†Hˆúú„PË-ƒwPI†:$‰cPL†H¸úú„Pķ-ƒwP]†:$Ļ…Äb 5†ûéj†=r†}֐˜†}Ö‚ō †•ú"ō .̆Åö †ö\ ŗ†ö\ Ɔö\ äU Š EûZûā ”ZûāļÄ%t5÷3û YІœ{û™ûøEû‘؆0Žä†”÷áĮîûv°A{°AŪ†°AŪ:‡°AŪD°Aâī__naîßžũû2üā ”xië__nŽV¸ë__sŽœ'âîC“ąžáķƒüCI°A!i°Ač†0D°Ač:‡0D°AčD0E°AâæŅ>0G°AũøŊ~œ›ü ˙ ”¤i‘œâĸG&¸#.Ĩ__xG ‘āf@ ĒęĨQ)ļ‘T‰T%LqũúhĨ.ú€š.útë.%MŊú'Ĩ.ú=š.ú1ë.ņ€"! ‚ú /úI/‘=Šņ€FgQũƒ úu/‘eŠŦßhgSÉūúãßą/úÖßã/ƒÉß‹Ëhg‚úSËą/úFËã/ƒ9Ë‹‘Ęhg_úŌĘą/úÅĘã/ƒ¸Ęg…áĘ-0‹™ûhgVúĐûe0úÃûą0ƒļûg…ßû1‚HʐúdĘ(1úZĘJ1‹vS–0gŌúSl1ú…S1ŠūŠHʲHgW˙údĘŸ1ƒZĘ‹vSĩ`gŌúSÁ1ƒ…SÎūŠ_Š΀gW¯˙úqŠû1‹3ˆΠgŌúBˆ2ŠqIÎĀg#u˙ú€I2‹Lרg#úL?2úLa2šîwBüRu[‚_О%WúqŠ2‚3ˆ˛%ŌúBˆ”2‰qI˛# ú€I”2‚L¸#úLŠ2úLÖ2šĮwBüRu[đg îC^ąžŸ0=`ąžé2ŸYWaöˇ/3Ÿ€oböˇs3Šîûđh_ úü.4úüf4úũû’4h…#üž4‰^iđ ī ƒmiƒmi‚CŊũ“úcŊķ4ƒWŊŠ+ā0h`9 ƒUāúHā+5ŠÔË`haĀ úã˃5ƒíˍ`hĢËĒúļ˯5ƒÂˏ€ËMļúË¯5úĨËÃ5ú™Ë×5#r] ŠT)€hiN úhë5ú€˙5útE6Œ)€hMŊú'ë5ú=˙5ú1E6Œņ€4˜h ‚ú Ļ6úė6‘QŠLßV°hrĶ ƒ™ßúŒß#7ƒßúrß–7‹ôŪV°h0.ƒAßú4ß#7ƒ'ßúß–7‹ŖŪV°h0úØŪ#7ƒĖŪúĀŪ–7°h…æŪŠ7Œ2üV°h0~úgü#7ƒ[üúOü8°h…uük8’hŪ`&0Ku ú‘Ū~8ƒ…Ūņ€d"Sú Â8ƒ‘ƒ’™ĖQ 0P¯ ƒšĖú­Ė9„Q \ E-e Qe d'e ŠLߝØhy\ ƒ™ßúŒß29ú߁9ƒrß‹ôŪØh0.ƒAßú4ß29ú'߁9ƒß‹ŖŪØh0úØŪ29úĖہ9ƒĀŪØh…æŪĐ9Œ2üØh0~úgü29ú[ü9ƒOüØh…uü:’hŪ°!0Kú ƒ‘Ūú…ŪS:ņ€´Sƒ ú”:‘Î’™ĖŸ 0P8 úšĖČ:ú­Ėæ:„Ÿ Ē EŸe ˛'e i-e ‰ČĖä+ˆ‹ ƒũĖúņĖ;úåĖ2;™Ėä+—úšĖ;ú­Ė2;„ä+ Eä+~ú*E;úEE;xĖøgúŒĖc;_Šø]úqŠc;‚3ˆøŌúBˆ›;‰qIø#L ú€I›;‚Lū#úL×;úL<š wBüRu\‰ŗ3Š ƒ,ŗƒBŗú6ŗ1<„3č˛: ˛ƒķ˛ƒ ŗú˙˛E<Ŋ˛: Mšƒ˞ƒâ˛úÖ˛E<Cá\ ‰ČĖđ„„ ƒũĖúņĖY<úåĖx<™Ėđ—úšĖY<ú­Ėx<„đū E‰ŗ… ƒ,ŗƒBŗú6ŗŒ<„č˛ ˛ƒķ˛ƒ ŗú˙˛¸<Ŋ˛ Mšƒ˞ƒâ˛úÖ˛¸<á\ ‰ŦŠ*é ƒˇŠúÊĖ<†Š*Mƒ•ŠúŸŠĖ<_Š* …úqŠĖ<‚3ˆ*ŌúBˆā<‰qI* #­ ú€Iā<‚L3#úLø<úL%=šBwBüRu\æe 'e 'e u-e Đö\ ÂAßpŧ1 I ā ”¤ië__x‘I "Bũį(đ†Ęœf Å ˙ ”äG‘¤}J‹Å ‘iĻ Ÿˇ€č8=Šįņ‡ i˜ úōt=øöņō ‹É÷‡ i†úØ÷t=HiŒ …ä÷¨=‰cP¸‡<) ú„P>ƒwPˇ:$‰cP·<Y ú„P*>ƒwPā‡:$‡Úb ¸‡ûéī‡=ø‡}֐˛ˆ}֐‡đb Š:‡hiŽŪ úIB>‹ !‡€iđú/o>3‡sĄŠ" ;‡˜iŽ  ú; >ú1 ģ>‰TG‡(•• úh?ú€3?útS?G‡(MŊú'?ú=3?ú1S?ņ€K‡$ ‚ú ?úŸ?‘f‡uˆƒüŠōx‡°iŽ ú"ōË?‹Åöx‡°iˆúÔö@Đi…āö!@‰cPˆH ú„PU@ƒwP.ˆ:$‰cP1ˆHJ ú„P}@ƒwPBˆ:$…‡Äb ˆûéOˆ=Wˆ}ÖŠˆ}Ö‚ō’ˆŽú"ō•@ˆÅö’ˆö\ Ĩˆö\ ēˆö\ ÂAä0 ž Ü  ā ”ZûŪˇÎž œ'Ū ž %Ū-Bž  âî}J  )ļ5÷Ę ŋûˆÅœ? t øÜ ‘øæ ‘øķ ‘ø ‘ øii ¨ ‘dŠīæĈ jŖ   úį­@čˆ&b‰G͈   úYũ@‚˜Œ͈Ōú§ŒFA‚XŒ͈ŧƒ~ŒúqŒ§AúgŒFAŠvSčˆ8jŖ < úSģAú…S%BôˆūŠ3ˆôˆPjŖ ´ úBˆ†BŠqIôˆpj#{ ú€I†B‹Lũˆˆj#úLØBúLCš8‰wBüRugŠ_Љ jĨ H úqŠ2C‹3ˆ‰ĀjŌúBˆnCŠqI‰āj# ú€InC‹L‰øj#úLĒCúLæCšG‰wBüRs‰_ŠN‰ Ĩ Ü úqŠD‚3ˆN‰ ŌúBˆD‰qIN‰#ĸ ú€ID‚LT‰#úL.DúL[Dšc‰wBüRug‰3ˆn‰Ŗ T øBˆuhŸ‰qIn‰# ø€IuhŸ‚Lt‰#úLnDúL›Dšƒ‰wBüRug ‰0‰N l‰ö\ ęÃ/… • ā ”ÆE• n8›Iķčœú CI\8!i\8††0D\8ŽDą:‡0D\8‘ąD0E\8‘kī ŗŅ>0G\8ãD—>Ú (k0KV úgÚ Eú[ÚCEŒt $@kSú nEú… —E’3ˆ}/Ë úBˆĩE‰qI}#’ ú€IĩE‚Lƒ#úLĘEúL÷Eš’wBüRug’3ˆ’/B úBˆ F‰qI’#  ú€I F‚L˜#úLFúLLFš§wBüRug‘8‘M‘\’ÎŖ˛0PĐ úîŖ_FúâŖ}F„˛ĄŖ˛~úÁŖ_FúĩŖ‘F€Ŗē gú”ŖŊF‘Ő˛e Ö'e ß-e čö\ á\#? v\8{\8Ū†v\8Ū:‡v\8ŪDv\8ęÜ/P ` ā ”ÆE` n8ߥ~t Š ā ”Ędë__nŽÚxë__sŽœ'âîC“5ũ|~hœÁ g# ˙ ”ĸ¤‘¤âĸGĒx‘Ĩ__xGg# ‘XkĒ ĒęĨQë‘LŠũˆ€kL ú‰ŨFú)‰ Gú‰8GŒÁˆ€kMŊúЈŨFúæˆ Gúڈ8GŒt ˜k ‚ú aGú… G’3ˆ/ úBˆšG‰qI#Ë ú€IšG‚L"#úLÎGúLûGš1wBüRuT’3ˆ1/{ úBˆH‰qI1#B ú€IH‚L7#úL#HúLPHšFwBüRuT‘4‘I‘XŠt ^°kQē ú cHú… ›H’3ˆŅ/0 úBˆ×H‰qIŅ#÷ ú€I×H‚L×#úLėHúLIšæwBüRuS’3ˆæ//§ úBˆ,I‰qIæ#n ú€I,I‚Lė)#úLAIúLnIšûwBüRuS‘y‘Ž‘‰ú ĻZSc ú1 Iú$ ĻIú äI‚ŧĻZ‚úĀŧIúŗŧĻIúĻŧäI‚ūģĻZ_ú?ŧIú2ŧĻIú%ŧäI„ĻZ…NŧøI‚‡ģĻZVúžģ0Júąģ|Jú¤ģäI„ĻZ…ÍģáJ‚? Ā:úZ ôJúP #K—vSÆØk/ú úSRKú…SeKĶū’vSŪ/- úS’Kú…SņKčūvSđ /úS8Lú…SrL÷ūŠ? økW" úZ ŸLúP ÁL—vSl/ŋ úSāLú…S2Mū—vS%8l/ō úSbMú…S´M4ūŒvS5Xl/úSÔMú…SNFūŠČlF€lWŖ úŲlIN—3ˆF l/¸ úBˆkNŠqIFĀl# ú€IkN‹LOØl#úLNúL¯Nš€wBüRuS—3ˆVđl// úBˆÍN‰qIV#ö ú€IÍN‹L\m#úLīNúLOšŠwBüRuSŒ3ˆc m/úBˆ/O‰qIc#i ú€I/O‹Li8m#úLQOúLsOš”wBüRuS‘ɝPmR# îC^5Ÿ0=`5‘OŸYWazxÆOŸ€obzx PŠe –pm_} ú‹ ŸPú~ įPút Qpm…š KQ‰°d– Y ƒŋdƒŋd‚CŊŖ“úcŊ€QƒWŊŠŧÛĢ˜m`Ŗ ƒæÛúŲÛČQŠÎŊžĀma* úŨŊ0RƒįŊĀmĨŊžĒú°Ŋ\RƒŧŊzŊžMļú‰Ŋ\RúŸŊpRú“Ŋ„RĮr] ŠũˆÍØmi˛ ú‰™Rú)‰­Rú‰ûRŒÁˆÍØmMŊúЈ™Rú戭RúڈûRŒt Ōđm ‚ú KSú… ™S’3ˆã/& úBˆØS‰qIã#í ú€IØS‚Lé#úLíSúLTšøwBüRuT’3ˆø/ úBˆ-T‰qIø#d ú€I-T‚Lū#úLBTúLoTš wBüRuT‘æ‘û‘ Š"Û nra ƒoÛúbÛ‚TúUÛēTƒHÛ‹ĘÚ n0.ƒÛú Û‚TúũÚēTƒđÚ‹yÚ n0úŽÚ‚TúĸÚēTƒ–ڍn…ŧÚæTš Š"Û# ny ƒoÛúbÛUƒUÛúHÛGU‹ĘÚ# n0.ƒÛú ÛUƒũÚúđÚGU‹yÚ# n0úŽÚUƒĸÚú–ÚGU n…ŧÚgU/š ŠũŖ:8nˆ! ƒ2¤ú&¤ŸUú¤ŊUŒÎŖ:8n—ƒîŖƒâŖ8nŒĄŖ:8n~ƒÁŖúĩŖĐUŒ€Ŗ@Pngú”ŖîUŒČl@Pn]úŲlîU—3ˆ@pn/, úBˆ1V‰qI@#ķ ú€I1V‹LFˆn#úLmVúLVšĢwBüRuT—3ˆM n/Ŗ úBˆ­V‰qIM#j ú€I­V‹LS¸n#úLéVúLWšĄwBüRuT3ˆa/úBˆ6W‰qIa#Ũ ú€I6W‚Lg#úLWúLÆWšvwBüRuT‰Ŗ¯ŠĢ! ƒŖƒ%ŖúŖŲW„¯Ëĸŗ ˛ƒÖĸƒîĸúâĸėW ĸŗ Mšƒ¯ĸƒÅĸúšĸėWŧá\ ŠŖ Đn…6" ƒŖƒ%ŖúŖ˙WĐnËĸ ˛ƒÖĸƒîĸúâĸX ĸ Mšƒ¯ĸƒÅĸúšĸX+á\ ‰ũŖC„Č" ƒ2¤ƒ&¤ƒ¤ÎŖC—ƒîŖƒâŖ„CĄŖC~ƒÁŖúĩŖ'XŒ€ŖLčngú”ŖjX‘X‰ڒm # ƒå’úņ’–X´’m MƒÒú͒–X‘ve 3'e <e je -e Ue Ņö\ ö\ n8ßô|{# “# ā ”ĸ¤ë__x‘“# Î8¯˜Ų‰ōœ°# ú% ˙ ”ôU‘¤3’œú% ‘‰Üĸ‰í# ú'ÜŠXŠ2Üļ‰oĪ% úNÜÖXúDÜôX‹l# ļ‰oĀú…# ÖXú{# 5YŠũˆž‰8o•Ã% ú‰|Yú)‰ĢYú‰ÉYŒÁˆž‰8oMŊúЈ|YúæˆĢYúڈÉYŒt ‰Po ‚ú įYú… Z’3ˆKŠ /7% úBˆ#Z‰qIKŠ#ū$ ú€I#Z‚LQŠ#úL8ZúLeZš`ŠwBüRug’3ˆkŠ/Ž% øBˆs Ÿ‰qIkŠ#u% ø€Is Ÿ‚LqŠ#úLxZúLĨZš€ŠwBüRug‘։‘뉑ú‰>ŠŠ ‰aÜ Šžī% úsܸZiŠö\ n8÷2Ü\LŠŧœ& ô' øDÜ‘øNÜ‘Šl# ŸŠhoĀé' ú…# ÎZú{# [Šũˆ§Š€o•Ū' ú‰^[ú)‰€[ú‰Â[ŒÁˆ§Š€oMŊúЈ^[ú戀[úڈÂ[Œt ̊˜o ‚ú ā[ú… "\’3ˆ‹ /R' úBˆ@\‰qI‹#' ú€I@\‚L‹#úLU\úL‚\š*‹wBüRug’3ˆ5‹/É' øBˆs Ÿ‰qI5‹#' ø€Is Ÿ‚L;‹#úL•\úLÂ\šJ‹wBüRug‘ŋŠ‘Ԋ‘㊐‹Š 3‹ö\ ÷~ÜēŌP‹šœ( č) øÜ‘ø™Ü‘—l# _‹°oEŨ) ú…# Õ\ú{# #]Šũˆg‹Čo•Ō) ú‰Y]ú)‰w]ú‰š]ŒÁˆg‹ČoMŊúЈY]úæˆw]úڈš]Œt k‹āo ‚ú ×]ú… ^’3ˆŌ‹ /F) úBˆ7^‰qIŌ‹# ) ú€I7^‚L؋#úLL^úLy^šį‹wBüRug’3ˆō‹/Ŋ) øBˆs Ÿ‰qIō‹#„) ø€Is Ÿ‚Lø‹#úLŒ^úLš^šŒwBüRug‘‹‘”‹‘Ŗ‹ˋŠ đ‹ö\ ũߌšœ* , ˙ ”ĸÅ‘¤3’G , ‘Š~Ü"ŒøoHū+ ú™ÜĖ^úÜ_Œl# "ŒpEú…# Ė^ú{# _Šũˆ*Œ(p•ō+ ú‰8_ú)‰V_ú‰˜_ŒÁˆ*Œ(pMŊúЈ8_úæˆV_úڈ˜_Œt .Œ@p ‚ú ļ_ú… ø_’3ˆ’Œ /f+ úBˆ`‰qI’Œ#-+ ú€I`‚L˜Œ#úL+`úLX`š§ŒwBüRug’3ˆ˛Œ/Ũ+ øBˆs Ÿ‰qI˛Œ#¤+ ø€Is Ÿ‚L¸Œ#úLk`úL˜`šĮŒwBüRug‘BŒ‘WŒ‘fŒ‹ŒŠ °Œö\ n8á~ķu, CI"9!i"9č†0D"9č:‡0D"9čD0E"9õb, æŅ>0G"9CI"9!i"9ä˜Ī‡, —, ā ”vB—, 49§, ō;ĢœZ. ú+, Ģ`ø7, ‘øC, ‘XpO. …U, Õ`—ĢÜ pp0Kļ- úÔÜ˙`úČÜ*aŒu, $ˆpSú‘, Uaú‡, sa‰3ˆX΍- úBˆ‘a‰qIX#o- ú€I‘a‚L]#úL¤aúLŅašlwBüRug‘.‘=’aĻw0P0. úĻäaúuĻ÷a„w4Ļw~úTĻäaúHĻ bĻ gú'Ļ7b‘Аwe ›'e ĸ-e Ģö\ áų¯. v"9{"9Ū†"9Ū:‡"9ŪD"9âī__nīžß´ˆž. ķ. ā ”édë__nŽí‚ë__sŽœ'âîC“H‰ũˆÎœ / ˜= ˙ ”5§‘¤âĸGŊ‚‘Ĩ__xG˜= ‘ p%4 ĒęĨQģ‘XŠ|‰ĀpL^0 ú‰Wbú¨‰ƒbúœ‰ĘbŒ@‰ĀpMŊúO‰Wbúe‰ƒbúY‰ĘbŒu, Øp ‚ú‘, ķbú‡, :c‰3ˆĻĪO0 úBˆcc‰qIĻ#0 ú€Icc‚LĢ#úLvcúLŖcšēwBüRu`‘,‘;Šu, AđpQ 1 ú‘, ļcú‡, d‰3ˆ‚$Ī˙0 úBˆBd‰qI‚#Æ0 ú€IBd‚Lˆ#úLWdúL„dš—wBüRu_‘W‘c‰īŨl9S„2 ú&Ū—dúŪÂdú Ūúd‚Āžl9‚úŋ—dúôžÂdúįžúd‚?žl9_ú€ž—dúsžÂdúfžúd„l9…že‚Z. l9Vú‘. —dú„. Feúw. úd„l9… . ˜e‚öŊ‚úžšeúžÛe‰vS‚ĪM2 úSųeú…S fū‚vS” ĪúSfú…S4fžūŠöŊĨqW3 úžIfúžƒfŠvSĨ0qĪá2 úSIfú…Sƒf´ū‹vSĩHqĪúSŖfú…SčfÆūŠaoÆpqW4 úsogŠ3ˆƐqĪŠ3 úBˆ:gŠqIưq#p3 ú€I:g‹LĪČq#úL\gúL~gšķwBüRu_‹3ˆÖāqĪúBˆœg‰qIÖ#ä3 ú€Iœg‹LÜøq#úLžgúLāgšũwBüRu_‘zrƒ= îC^H‰Ÿ0=`H‰ūgŸYWa‚3hŸ€ob‚khН. ˙(r_ø4 úÕ. ūhúČ. 6iúž. bi(r…ä. Ži‰Īd˙Ô4 ƒŪdƒŪd‚CŊ“úcŊÃiƒWŊŠN“Pr`5 ƒx“úk“ûiŠØŋ$€raĨ5 úįŋSjƒņŋ€r¯ŋ$ĒúēŋjƒÆŋ„ŋ$Mļú“ŋjúŠŋ“júŋ§j-r] Š|‰3 rią6 ú‰ģjú¨‰Ījúœ‰kŒ@‰3 rMŊúO‰ģjúe‰ĪjúY‰kŒu, ?¸r ‚ú‘,  kú‡, đk‰3ˆđĪĸ6 úBˆ$l‰qIđ#i6 ú€I$l‚Lø#úL8lúLelšwBüRu`‘I‘ZŠŨ_Đrr9 ƒÜŨúĪŨxlúÂŨČlúĩŨÜl‹7Ũ_Đr0.ƒ„ŨúwŨxlújŨČlú]ŨÜl‹æÜ_Đr0úŨxlúŨČlúŨÜlĐr…)ŨīlŒ, _Đr0~úC, xlú7, Člú+, ?mĐr…U, ~m—ĢÜpčr0Kn8 úÔÜÚmúČÜnŒu, tsSú‘, Fnú‡, on‰3ˆkĪ`8 úBˆ˜n‰qIk#'8 ú€I˜n‚Lp#úLĢnúLØnšwBüRu`‘~‘’aĻŠ'0Pã8 øĻVøuĻuP„Š'4ĻŠ'~øTĻVúHĻënŒĻ›sgú'Ļ.o‘§Še ļ'e Ŋ-e ŠŨ›0syļ9 ƒÜŨúĪŨZoƒÂŨúĩŨƒo‹7Ũ›0s0.ƒ„ŨúwŨZoƒjŨú]Ũƒo‹æÜ›0s0úŨZoƒŨúŨƒo0s…)ŨŖo­, АώPsˆM; ƒÅĻúšĻÛoú­ĻpŒaώPs—ƒĻƒuĻPsŒ4ώPs~ƒTĻúHĻpŒĻģhsgú'Ļ7pŒaoģhs]úso7pŠ3ˆģˆsĪĶ: úBˆzpŠLģ s#ļ: úLÃpúL qšéwBüRu`‚qIÔ#ú€Izp‹3ˆĀ¸sĪúBˆq‰qIĀ#; ú€Iq‹LÅĐs#úLUqúLwqšwBüRu`‰“ĨŠÜ; ƒĸĨƒ¸ĨúŦĨ•q„^Ĩ ˛ƒiĨƒĨúuĨ¨q3Ĩ MšƒBĨƒXĨúLĨ¨q#á\ ‰ĻĖ$„n< ƒÅĻƒšĻƒ­ĻaĻĖ$—ƒĻƒuĻ„Ė$4ĻĖ$~ƒTĻúHĻģqŒĻÕčsgú'Ļūq‘ናĨt…ų< ƒĸĨƒ¸ĨúŦĨ*rt^Ĩ˛ƒiĨƒĨúuĨ>r3ĨMšƒBĨƒXĨúLĨ>r%á\ ‰Q”@F= ƒ\”úh”Rr+”@Mƒ:”úD”Rr‘KÅe e -'e 6e f-e Æe ‚ö\  ö\ 49áŽ#â= {%fSrÍ ĩŪ† ĶfSŪ:‡ ĶfSŪŖ¨ Ô ĩáĘ0> rÍ ĩčŖ¨,ė ĩáĀ#E> ĩRfSrÍû.č† ŸfSč:‡ ŸfSčŖ¨ Ÿû.߇T> l> ā ”5§ë__x‘l> ”9ĢąÆЌšœŒ> lL ˙ ”QV‘¤ĖsÆlL ‘¤š ĮqL ‘tWL ŸˇË€čfrŸ›SĖM‰ŖrŠįņ@tËß? úōírøöņōÃ> ‹É÷@t†úØ÷írhtĶ? …ä÷"s‰cP}Ž<p? ú„PasƒwP‘Ž:$‰cP”Ž< ? ú„P‰sƒwPĨŽ:$ Úb }Žû鐲Ž=ēŽ}֐ }֐đb а9ˆtÎ@ úÉĄsúŋ t‘CŠNŪC tÎQ@ ú]Ū‘t‹zpC t6ú“pÍtƒ‰pŠ4ŪK¸tΓ@ úCŪ u‹zpK¸t$ú“p uƒ‰pŠ= NĐtÎ$G úÔ= EuúĮ= šuúē= ÚuŠøcNu Ũö@ údEuú d:v‘[Šâ= \ u ŨģB úö= ąv—øc\Hu,íDA údąvú dw‘g—ŋ‰hhu,í˜A ú؉|wúΉŨwŒøchhu,áúd|wú dŨw‘v—ę‰vˆu,í+B úü‰„x‹3ˆv¨uZúBˆÍxŠqIvČu#ņA ú€IÍx‹L‚āu#úLŋyúL zšwBüRwę‰–,íúü‰+z‚3ˆ–ZúBˆ+z‰qI–#€B ú€I+z‚Lœ#úL@zúLmzšĢwBüRudŠ> øu ŨĄD ú8> €zƒ,> ƒ > ’ߓ ĸ:C úú“€zúđ“Özøc ,Üúd€zú dÖz‘——”Ģv ĸčC ú”,{Œę‰Ģ8v,Üúü‰‚{‹3ˆĢXvZúBˆō{ŠqIĢxv#­C ú€Iō{‹Lˇv#úL–|úLė|š(wBüRu`’”] ĸ–D ú” }ę‰],Üúü‰ }‚3ˆ]ZúBˆ }‰qI]#[D ú€I }‚Lc#úL}úLL}šrwBüRu`ĢÔjŠ”¨v ŨPE ú”_}Œę‰Āv,Üúü‰_}‹3ˆØvZúBˆĩ}‰qI#E ú€Iĩ}‹Lȍđv#úL?~úL•~š7wBüRwŠę‰Ķw ŨäE úü‰ŗ~‹3ˆĶ wZúBˆ ‰qIĶ#ĒE ú€I ‹LŲ8w#úLyúLĪšGwBüRw‰ę‰Ģ ŨxF úü‰í‚3ˆĢZúBˆí‰qIĢ#>F ú€Ií‚Lą#úL€úL/€šĀwBüRuT‚”= Ũú”B€ę‰= ,Üúü‰B€‚3ˆ= ZúBˆB€‰qI=#čF ú€IB€‚LC#úLW€úL„€šVwBüRu`Šę‰äPwθG úü‰—€‹3ˆähwZúBˆ—€‰qIä#~G ú€I—€‹Lę€w#úLí€úLCšWwBüRwŠ3ˆõ˜wÎ0H úBˆa‰qIõ#÷G ú€Ia‹Lû°w#úLˇúL ‚šgwBüRwŠNŪŽČwĪrH ú]Ū+‚‹zpŽČw6ú“pt‚ƒ‰pŠ8+ŽāwĶÄH úQŊ‚ƒG‹vS+ŽxäúSŊ‚ƒ…S9ŽūŠ3ˆ9Ž xĶ ȎpxĐ”J ú^> qƒúT> ЃŠ|‰Ņސx•‰J ú‰؃ú¨‰úƒúœ‰&„Œ@‰ŅސxMŊúO‰؃úe‰úƒúY‰&„Œu, Վ¨x ‚ú‘, 9„ú‡, e„‰3ˆũĪzJ úBˆx„‰qIũ#SJ ú€Ix„‚L#úLŒ„úLĄ„‘᎑öސŒķ. ‰ę‰ĀÎ(K úü‰´„‚3ˆĀZúBˆ´„‰qIĀ#îJ ú€I´„‚LƏ#úLɄúLö„šՏwBüRuT‰3ˆՏΠK úBˆ …‰qIՏ#gK ú€I …‚Lۏ#úL…úLK…šęwBüRuT‰ōęĶĘK ú"ō^…ķÅöŠ3ˆ ĀxĶ@L øBˆuTŸŠL Øx##L øLudŸøLPšwBüRw‚qIv#ø€IuTŸįŒ(Ñ7‘*ސûö\ (ö\ Ē149ũŊßœŽL O ˙ ”lH‘¤š ĐO ‘đxO ĒĖsŅÄ6‘lŸæHŌŦ9v…‰˜Œ›Ņ"M ú§ŒŸ…‚XŒ›ŧƒ~ŒúqŒ†úgŒŸ…Šq^ŦyÕ|M úŠ^8†ú€^P†‹’ŗŦy3úĢŗ8†úĄŗP†ŋOŠ3ˆؐ(yŪôM úBˆp†ŠqIؐHy#ģM ú€Ip†‹Lá`y#úLŦ†úL膚(‘wBüRusŠq^úxyØNN úŠ^‡ú€^‡‹’ŗúxy3úĢŗ‡úĄŗ‡ ‘O‰q^0‘Û‚N úŠ^>‡ú€^V‡A‘’ŗ‰3ˆQ‘ŪúN øBˆutŸ‰qIQ‘#ÁN ø€IutŸ‚LW‘#úLv‡úLŖ‡šf‘wBüRusؐq> o‘ö\ 49ßâ$O IO ā ”vBŪĄYÔIO ŪŠŪÔNO Ē1Ē1ũ-(p‘˛œkO Q ˙ ”äG‘ĨkeyQ ‘¤Ü/†Q ‘ŠO u‘yPP ú;O ļ‡ú.O ú‡ú$O >ˆ‰3ˆņ‘ÕCP úBˆˆ‰qIņ‘# P ú€Iˆ‚L÷‘#úLՈúL‰š’wBüRuo‘„‘‘’‘Šao ‘¸y\Q úso‰Š3ˆ ‘ØyĪįP úBˆg‰ŠqI ‘øy#ŽP ú€Ig‰‹LŠ‘z#úLŖ‰úL߉šБwBüRuo‹3ˆ°‘(zĪúBˆ ŠŠqI°‘@z#"Q ú€I Š‹Lļ‘Xz#úL-ŠúLOŠšč‘wBüRuo ‘vL ’ö\ ‘’"’ö\ Ē1Ē1§dË,0’œĘQ øo‘ø|‘8’0I’SO ēyP’œƒU Ĩkey~ƒU ‘¤Ü/~%‘pzxU Ēßõįû‘dŠ@c`’z€]R ø`cōîQ úVcmŠz…|cq’=Šīær’¨z‡R úįœŠ’&bŠd”’ČzÅR ú|؊úo(‹™’0Ļ’SO Š3ˆĻ’āz=S úBˆ`‹ŠqIĻ’{#S ú€I`‹‹L¯’{#úL˜‹úLĮ‹šč’wBüRukŠ3ˆļ’0{ĩS úBˆõ‹ŠqIļ’H{#|S ú€Iõ‹‹Lŧ’`{#úLŒúL7Œš˙’wBüRs‰MįҁT ú^įUŒkÒUúkUŒ‚åjÒúūjwŒúôjUŒ‰MᓁwT ú^į‹Œk“Uúk‹Œ‚åj“úūj Œúôj‹Œ‰3ˆ!“īT úBˆ´Œ‰qI!“#ļT ú€I´Œ‚L'“#úLɌúLöŒš6“wBüRuk‰3ˆ6“gU úBˆ ‰qI6“#.U ú€I ‚L<“#úLúLKšK“wBüRuk`’īį‘‘’“ö\ Ē1Åú1ĒœâW ‹*Ą.n•–*Æĸ*˙˙‰˜Œŗ u V ø§ŒŸ‚XŒŗ ŧƒ~ŒúqŒ^úgŒ„‰˜ŒR g\V ø§ŒŸ‚XŒR ŧƒ~ŒúqŒŦøgŒŸŠŌÕsx{ĻŧV øáÕŸ‹%xsx{ø4xŸŒxsx{}øxŸ‘%Öc 3a Fa Ya ov ‘‚™Öc Ēv ‘šĐÖc áv ‘đÖc a (‹ ;‹ Na a‹ wv ‘†Öc Ģa ŅÖc ėv ‘ûÖc  a ‘8OÖc pÖc ĨÖc ĮĢF¨X“ĮÖFŠX“ĮžčFĒX“ČĄŪŽÉį/Éö/É0É0É#0É20ÉA0ÉP0É_0Én0É}0ÉŒ0É›0ÉŦ0ÉŊ0ÉÎ0Ęß0dÉė0ģÉû0§ ģÉ 1 GÉ1 $íÉ)1} YûÉ91k ĢûÉI1X ģÉY1@ ĒÉi1 čÉu1 čɁ1ė ëɍ1ä ĘŨ2ÉđøËų˙˙˙˙˙˙˙ÉųėÉ,ųÉ@ųĮčÉOųĶ 0É_ųŋ ģÉoų§ ÉųɐųģÉĄų ĮčÉąų~ ĮčÉÁųm ÆęÉŅųg ŧëÉáų` ĄįÉņųU ŧëÉúN ĄįÉúC 9čÉ!ú7 ŧëÉ1ú0  ÉAú( YûÉQú ĮčÉaú ĮčÉqúô ˁúŸ†É‘úÉ úĘąúÍŋú˙ÍÎú˙˙ĖŨú˙˙2ęÉîúę ĄįÉ˙úß t%˜[ ļy'ž †[ Éû@É!ûāĘ,ûLĘ9ûRĘFûTĘSûIĘmû/GÉzû5¤éɈûĘ—ûʤû€ėÉąûôÉÂûÔÉÎûĐÉÚûĖÉ$øÎ)FĪ+4aP€€€€xĐ64ŌĶ˙˙˙ŅÖ8}õ Ņ9“€Ī99ęÄ€€~ŌD9*H˙ĶšĻŦôĶđÛ*=ŅFF‡AĶ1Ņ<ŅŽŅ60s7„7Dö\ ŽÔĘÆ‡ö ] ŽÕØĀi§%"] % CFj%9] œ'mÕŽ˜͝9%Q] œ' [°F‚%r] °*'œ'm4š77€Ë9Ž‹] đՑƤ°*¨] œ'%EĮŋgG%Â] Â] X>vĄŽEœ/%â] œ'œ' ;†%ũ] œ'œ'E ŅJŦ%^ 5(5(vo$´ļ%W Ō”Fs%F^ ĄDœ'ų& SvFZ%\^ ĄD \ %r^ %Öķ5%†^ †^ v,אøœ^ †^ ÕŨŧ‘%´^ œ'E^ōFō%É^ ĄDÕԑü}Žë^ Ž]9%ÕÃ'/9%_ ]''ĄDĩtôW%_ %ÕmSōް*B_ œ'œ' ÄFĄD]_ œ'œ'E*°Fí%r_ ĄD ͝Ž'ˆ_ œ'Ež÷“%§_ œ'œ'' •čœ°*Ŋ_ %~>m2|:Õĩe6D°*å_ œ'% đ%` %œ'MS G4@% ` œ'Ē4Ú7‚~OŽ9` đÖNļŽW` Ž%y'Æ7†žHl` Ž {ŋ\˙°*‡` °*'ĩ€3]>š` š` v†•ĩØķWãŗ` Ž •Ø]6%Ũ` Ũ` œ''č` %vã` †•vĮ• gvFí%a ĄD@%% ZFō@%$a ĄD K*FÅ'Ia Ž''ĄD Lē\%da %% lØ\a%za %EÛXF˛%a œ'Eg‹n%¤a %E;•nx%ša %EH•KķÎa Îa Ôa vh+vÚa VŽ ŸÄWk%õa °*jdup\% b %E*oq%*b %%%EĢúo‰%Ib %Ib ‰”vOb ¯> ™dk–%yb œ'œ'˙?yb vų?ĩ<“kœ’b ų? sokŸœ'¨b % Zpô%žb žb vˏ š\p%Úb žb "Îpü%đb žb wņpƎ O\n¸’c %]' ¸pī%7c žb 7c v=c ú ŋGFd%^c ĄDœ'm Öp^%tc  kIpaŽŠc Øžvector::_M_insert_aux ˆ^pY%Āc Āc Lv×<+Öc †^ Ö5%ôc LŽŽ $F2ĄDd %œ' dHF=%*d %ĄDÕ*ÁėH%Gd œ'ĄDĩOĐ\[Zd % 7\h¸’zd %Ž'EÕÖqˆÖ™d ֍|:% \Ą%¯d |:wAS\ô֍ č›\ņ%Ņd œ' Ãa\'%ņd œ'īCīCÕ¨p֖%e ]]9%ÖŽ'e ŽŲ‡)Ųũ}ˇFÖá*Ž\e ]a5a5%Ú|`™RÖNŽŽ„e Ž]y'EŸ2nv%™e % ō+pd%´e ]E7¯°*Ée œ' Ab%ée %ée ôe vīe 84v84wn\Ō%E\dr9Ž4f Ž'%%%ĀEöÄsQ%Yf Yf Ž%Žmv„“E^'rL%yf Ž'ET„b×%Žf Žf vį’EŠTt %¯f %%mÖÚŽÃf 9%מ)Ũf ŽŽL×ĩ(íf Ž ø]2% g š` œ'%/FË']''ĄD% U$ > 9: ; : ; : ; : ;  : ; : ; (  : ;  I8 9: ; .?: ;I</II.?: ;I<: ; I.?: ; n<&I.?: ; nI<.?: ;nI<.?: ;nI<.?: ;nI<: ;I.?: ;n<.?: ;nI< : ; I8 2 : ; I2 .?: ; 2 <dI4 .?: ; 2 <d! : ;I8 ".?: ;<d#.?4<d$ : ;I?2 <% : ; I8 & : ; I?<'.?: ; nI<(.?: ; nI<d).?: ; n<d*.?: ;n<d+.?: ;nI<d,.?: ;nI<d-.?: ;nI<..?: ;2 <d/.?: ; 2 <cd0.?: ;nI2 <d1.?: ;nI2 <d2.?: ;n2 <d3.?: ; nI2 <d4.?: ; nI<5/I6<7 : ; 8<9 : ;2 : : ;I?<;.?: ;2 <d<: ;I2 = : ;I?2 < > : ;I?2 < ? : ;I?2 <@.?: ; L 2 <dA.?: ; nI2 <dB.?: ; nI2 <dC.?: ; <D.?: ; <E.?: ; I<F.?: ; I<G.?: ; <dH.?: ; n<dI/IJ.?: ; nI<dK.?: ;nIL M2 <dL.?: ;n<dM : ; N : ;O9P4: ;I<Q:: ;R : ; S.?: ; nI<T.?: ;2 <cdU.?: ;L 2 <dV : ; 2 W : ;X : ;2 Y0I Z : ;I8 2 [.?: ;nI2 <\.?: ; <cd].?: ;<cd^<_.?: ; 2 <d`.?: ; 2 <cda : ; 2 b.?: ; n2 <dc : ; d : ; I8 2 e.?4<df.?42 <dg : ;h.?: ; n2 <di.?L 42 <dj.?: ;I<k4: ; nI?<l4: ; I<mn.?: ; n<o$ > p Iq : ; nr : ; s : ; ItIu!I/ v Iw.?: ;I<x : ; y9: ; z.?: ; I<d{.: ; I<|:: ; } I~.?: ; I< € : ; n : ; ‚ I8 ƒ„&…!† : ; I8 ‡Iˆ: ; ‰ : ;I 8 Š : ;n‹9: ;Œ : ;.?: ;2 <dŽ : ;.?42 <d: ;I2 ‘.?: ; nI2 <’.?: ; <d“.?: ; n2 <d”.?: ; nI2 <• : ;– : ;I— : ; I?2 <˜ : ;I8 ™.?: ;nI2 <š.?: ;nI2 <›.?: ;nI2 <dœ : ;I?2 <  : ; ž : ; 2 Ÿ I8 42  .?: ; nIL M2 <dĄ.?: ; nL M2 <dĸ.?: ;n2 <Ŗ.?: ;n2 <¤ : ;Ĩ.?: ;nL M2 <dĻ.?: ;nI2 <§.?I4<d¨ : ;Š : ;2 Ē : ;I8Ģ.?L 42 <dŦ.?: ;n2 <d­.?: ; nIL M2 <dŽ : ;2 ¯.?nI42 <d°.?: ;n2 <dą.?: ;nL M<d˛9ŗ.?: ;L 2 <d´.?: ;<ĩ.?: ;<ļ/ˇ.: ;I<¸.G<š.: ;I<ē.: ;<ģ.?: ;n<ŧ.: ; <Ŋ4: ;nI?<ž4: ;I<ŋ4: ; nI?<Ā4: ; I<Á4: ; I<Â4: ;I< Ã4: ;I<Ä4: ;I<Å4: ;I<Æ4: ; I< Į4: ;I?<Č4: ; I<É.?: ; I2 <dĘ.?: ; I2 <dË.?I42 <dĖ.?: ;I2 <dÍ.?: ;I2 <dÎ.?: ;n2 <Ī.?: ;n<dĐ.?: ;nIL M<dŅ.?I42 <dŌ.?: ;nIL M<dĶ.?: ;nL M2 <dÔ.?: ; nL M2 <dÕ.: ;I<Ö.?: ;L <d×.: ; I<Ø : ; Ų : ; IÚÛ: ;Ü : ; Ũ.?: ;I Ū: ;Iß.G dāI4á.G â ã4: ; Iä.G: ; då.: ; I æ4: ; Iį5Ič: ; Ié: ; Ię.G: ; dë: ;Iė.?: ; I í.?: ; î4: ;Iī4: ;Iđ.G ņ.G: ; ōdķIdô õ ö.4 ÷.1n@d—Bø1ų.1@—Bú1û‰‚•BüŠ‚‘Bũ.G@d—BūI4˙I4€.G@dI‚1X Yƒ1„ …41†: ; I‡‰‚•B1ˆ.1n@d–B‰1X YŠ1RUX Y‹1RUX YŒ1RUX Y  Uމ‚•B11X Y ‰‚1‘‰‚’1X Y “.1@d–B”.1@–B•1 –.1@d—B—1RUX Y ˜1 ™ š‰‚1›.G@—Bœ: ;I Už4: ;IŸ4: ;I : ; IĄ4: ; Iĸ4: ; IŖ.G: ;@—B¤: ;IĨ: ;IĻ.1n@—B§.1n@—B¨41Š: ;IĒ4: ;IĢ.G: ;@d—BŦ41­.1n@dŽ4: ;I ¯.G@d–B°.G: ; @d—Bą: ; I˛.G@—Bŗ4: ; I´.G: ; @—Bĩ4: ; Iļ!I/ˇ.G;@—B¸41 š‰‚1ē.G@–Bģ4: ;Iŧ.G: ;@–BŊ.G: ;@d–Bž: ; Iŋ.G: ; @d–BĀŠ‚1‘BÁ Â1RUX YÃ4Iĉ‚“BÅ.4@—BÆ1Į4: ; I?<Č4I?4<É4GĘ4G Ë4GĖ4GÍ4GÎ4GĪ4Gn Đ4GnŅ4Gn Ō4GnĶ4GnÔ.?n4<Õ.?nI4<Ö.?I4<×.?4<Ø6Ų.?4<Ú.?I4<‘P‘P%10Ÿ1NP(1R“1GR“GJrŸ“JNR“:NQUa0ŸaxPXaR“aqR“qtrŸ“txR“atrtxQ…‘0Ÿ‘¨Pˆ‘R“‘ĄR“Ą¤rŸ“¤¨R“ĩÁ0ŸÁØP¸ÁR“ÁŅR“ŅÔrŸ“ÔØR“‘‘"RHLu#ŸHLS“LbS“besŸ“elS“ˆS“R^PlxVxzuz~‘…VpxVxzuz~‘™R‘™RS ‘"0Ÿ"1S18sŸ8JSJ‘#Ÿar0ŸrSˆsŸˆšSdš‘#ŸąÂ0ŸÂŅSŅØsŸØęS´ę‘#Ÿ0Ÿ!S!(sŸ(:S:‘#ŸQb0ŸbqSqxsŸxŠSTŠ‘#ŸĄ˛0Ÿ˛ÁSÁČsŸČÚS¤Ú‘#Ÿņ‘+Wņ‘+Vü˙sŸ˙S‘# p2&1Ÿô‘#Ÿ+vŸAV‘V{WAV‘V{VLOsŸOTSTV‘# p2&1ŸDV‘#ŸV{vŸ‘Ļ‘ĻËW‘Ļ‘ĻËVœŸsŸŸ¤S¤Ļ‘# p2&1Ÿ”Ļ‘#ŸĻËvŸáö‘öWáö‘öVėīsŸīôSôö‘# p2&1Ÿäö‘#ŸövŸ1F‘FkW1F‘FkV<?sŸ?DSDF‘# p2&1Ÿ4F‘#ŸFkvŸ‰š0ŸšŠWŠąwŸąÃWŒÃuŸéUéWéVô÷sŸ÷üSüū v p2&1ŸėvŸ0?P?_V_`ķPŸ0?pėŸ?_vėŸ_`ķP#lŸ:HS“HNs|Ÿ“N^S“NVō;A`kPk{S{ŋWŋÉķPŸÉËSËÍķPŸ`”R“Q“ŋÍR“Q“`ˆ0ŸˆŋSÉÍ0Ÿ`ˆ0ŸˆŠUŠąuŸąŋUÉÍ0Ÿk{S{ŋWŋÉķPŸÉËSËÍķPŸĐæPæöSösŸS/sŸ/7S9TSÛæ0ŸæųVų˙vŸ˙V)v~Ÿ)3V9UV`–P–ŸķPŸ`–R–ŸķRŸ`–pŸ–ŸķP#Ÿm{ ˙Ÿm{pŸ€ ˙Ÿ€pŸƒQ pŸ-‘#Ÿ$‘oŸ$(R(-‘oŸ(P(S()‘)FSFG‘(sŸ()‘#Ÿ)FsŸFG‘#Ÿ4‘oŸ48R8G‘oŸ#P)8PawŸab‘#ŸKVS;S;@stŸ@_S#S#'stŸ';S;DstŸ#sŸ#'s|Ÿ';sŸ;Ds|Ÿ'‘oŸ-8‘oŸ8?R?K‘oŸ'P-?PKawŸab‘#ŸKS w w<ŸK`VOS w w<ŸO[V jWjk‘jwŸjk‘#ŸKVS;S;@stŸ@hS#S#'stŸ';S;DstŸ#sŸ#'s|Ÿ';sŸ;Ds|Ÿ'‘oŸ-8‘oŸ8?R?K‘oŸ'P-?PKjwŸjk‘#ŸKS w w<ŸKiVOS w w<ŸO[VBVS2S27s|Ÿ7VSSs|Ÿ2S2;s|Ÿ‘oŸ$/‘oŸ/6R6B‘oŸP$6PBXWXY‘BJ ww4ŸBWVFJ ww4ŸFRV ļRļzWz|ķRŸ|WķRŸ W ļpļ{uT{|tP|ŽuTŽtP uTļ&V&*S*5V:XVĸVÂĶVė VŅßPßíSí<sŸ<LS sŸÂĶSėîsŸŅ ŸÂ ŸŅ{uT{|tP|ŽuTŽtP uT uTņR(svŸ*5svŸŸRŸ svŸėîsvŸņ(V*5V Vė Vņ<W Wė Wņ<Ÿ Ÿė Ÿ P<udŸė udŸ <uTė uT<udŸ<u`Ÿ9P< ˙ŸÂė ˙Ÿ<XVÂĶV<zWz|ķRŸ|WķRŸÂėW<ŸÂėŸXxSx{u`Ÿ{|t\Ÿ|‹S‹Žu`ŸŽt\ŸĶÕSÕėu`ŸX{uT{|tP|ŽuTŽtPĶėuTgxSx{u`Ÿ{|t\Ÿ|‹S‹Žu`ŸŽt\Ÿj{udŸ{|t`Ÿ|ŽudŸŽt`ŸjtPtxs<Ÿx{u`<Ÿ{|t\<Ÿ|ƒPÕėu`ŸÛåudŸåéRéėudŸÛéPôūu`Ÿū R  u`Ÿô P°ļPļ{uT{|tP|ŽuTŽtP uTĸÂuTĒ´u_Ÿ´¸R¸Âu_ŸĒ¸P  P Đ ķPŸ B RB Î WÎ Đ ķRŸ B QB Đ ‘H8 B 0Ÿt  Uƒ — P— Ŗ uw"ŸŖ ļ Pļ  uw"Ÿa  Sa  VŽ — ‘Y—  p Ŗ ‘Y‰ Ŗ V­ ļ ‘Zļ ŧ pŧ  ‘ZŖ  VĐ å På V  P ' V' ( PŨ å Rå ˙ SŨ á p#Ÿ  P ' V' ( P p#Ÿ -S“-?S“FTS“WYS“u@VFUVWtV u@VFUVWtV u#Ÿ4vŸWtvŸ*4ō T4@VFUV4; vv4ŸFU vv4Ÿ4EPFWP8; vv4Ÿ8EP[c vv4Ÿ[gR_c vv4Ÿ_gRA s us t tt ‡ uA s us t tt ‡ uA s us t t t ‡ uA s u s t tt ‡ u A D PD q Sq t pt ‡ Sž Ģ Rŧ Ä RÄ Č sž Ģ r Ÿŧ Ä r ŸÄ Č s# Ÿ¤ ˇ ‘oŸŧ Ä ‘oŸÄ Č RČ Í ‘oŸ¤ Ģ Pŧ Č PŪ  S R Så  :Ÿ ( :ŸG R :Ÿå  S ( SG R Sû ˙ ‘˙  S ( S˙  :Ÿ˙  S@ \ ‘\ d pxŸ@ ` ‘Å Ņ 0ŸŅ č PČ Ņ R“Ņ á R“á ä rŸ“ä č R“šÄpŸÄßu #Ÿßāt#Ÿāķu #ŸÕÜSÜŨvŨßu#ßāt#ÕŨvŸŨßu#Ÿßāt#ŸŖŦRŦĩ‘ŖŦPŦĩ‘3‘9D‘-‘9D‘ )P)-rt9BPBDrt#8Q9DQ3‘9D‘ -‘9D‘l&udŸ&)‘\Ÿ):udŸ:=‘\Ÿ=qudŸo”S†ŠRŠ”V”&uT&)‘L):uT:=‘L=quTS”u o&udŸ&)‘\Ÿ):udŸ:=‘\Ÿ=qudŸ†”uŽøSøsŸ#S)7S”Ģ7ŸŧžPžõVõQĘĪQĪuPįōdįîpr"ŸîuPîptŸõuPõptŸpuP"Ÿ&udŸ&)‘\Ÿ):udŸ:=‘\Ÿ&ucŸ&)‘[Ÿ):ucŸ:=‘[Ÿ"P"&ud<Ÿ&)‘\<Ÿ)0PDNucŸNRRRqucŸDRPYcucŸcgRgqucŸYgPu #P$QudŸQR‘\ŸRgudŸgh‘\ŸÃãudŸ'OVReVÃãV'(s@QudŸQR‘\ŸRgudŸgh‘\ŸCQucŸQR‘[ŸRgucŸgh‘[ŸC_P‰–P–ÃuT‰ÃsŸ”¯WēÃWœ¯VēÃVœŖPēĀPƒ–P–ÃuT‰–p–ŖuTēĀuTËÕucŸÕŲRŲãucŸËŲP¯ĩPĩĖtĖĐtÕÖtÖ×tרtØŨtŨât ˛ĩp ŸĩÄt# ŸÄĐRÕáRáât$ÄĖt# ŸĖĐt# ŸÕÖt# ŸÖ×t# Ÿ×Øt# ŸØŨt# ŸŨât # ŸÆĐR˙Ptt%&t&'t'(t(-t-2t p,Ÿt#,ŸR%1R12t$t#,Ÿt#,Ÿ%&t#,Ÿ&'t#,Ÿ'(t#,Ÿ(-t#,Ÿ-2t #,ŸRKŲw ŸŲÛ‘# ŸNØVØŲw$ŲÛ‘#$QÚUQØVØŲw$ŲÛ‘#$QYVYĮSĮĖslŸĖ×SY}S}slŸĮSĮĐslŸYms Ÿ—¤s Ÿf‘_ŸŦ‘_ŸŦ°R°Ä‘_ŸÄËRËĐ‘_ŸfpP°PmzsŸąžsŸs‘_ŸˇÄ‘_ŸÄËRËĐ‘_ŸsPˇËPY}sŸ}s|ŸĮsŸĮĐs|ŸY‘_Ÿ‡’‘_Ÿ’–R–Ŧ‘_ŸŦ°R°Ä‘_ŸÄËRËĐ‘_ŸYcPcms<Ÿ‡–Pëív Ÿíđ‘# ŸîyWyv$ņvUņyWyv$ņųWųgSglslŸl}SųS!slŸ!gSgpslŸų s Ÿ7Ds Ÿ!‘_Ÿ=L‘_ŸLPRPd‘_ŸdkRkp‘_ŸP=PP sŸQ^sŸ!‘_ŸWd‘_ŸdkRkp‘_Ÿ!PWkPųsŸ!s|Ÿ!gsŸgps|Ÿų!‘_Ÿ'2‘_Ÿ26R6L‘_ŸLPRPd‘_ŸdkRkp‘_ŸųP s<Ÿ'6Psív,Ÿíđ‘#,ŸyîWîđ‘#0yīUyWĮSĮĖsxŸĖėS—S—›sxŸ›ĮSĮĐsxŸ—S—›sxŸąĮSĮĐsxŸ›‘_ŸļÄ‘_ŸÄËRËĐ‘_Ÿ›PļËP—sŸ—›s|Ÿ›ĮsŸĮĐs|Ÿ›‘_ŸĄŦ‘_ŸŦ°R°Ä‘_ŸÄËRËĐ‘_ŸŠPŠ”s<ŸĄ°Pđ0ŸBSûCVCD‘DOVOP‘ûCv ŸCD‘# ŸYŒ‘# ŸŒ‘w Ÿ‘’‘# ŸYa0ŸaŒV\‡S“‡S“jvRvwsw{rdŸpvRvwsw{rdŸpvrŸv{R„ŒōŋtŠÜ‘# ŸÜáw Ÿáâ‘# ŸŠą0ŸąÜVŦ×S“×ßS“ēÆRÆĮsĮËrdŸĀÆRÆĮsĮËrdŸÔÜōĀuų.‘#TŸ.2vԟ24‘#TŸų0Ÿ.Wü)S“)1S“ RR&.ōĨvI~‘#TŸ~‚vԟ‚„‘#TŸIQ0ŸQ~WLyS“yS“ZhR`hRv~ōĸwĀ‘ĀÄR•Ā‘# ŸĀÄr Ÿ•Ą0ŸĄĀRĀÄ0Ÿ˜ĄP“ĄŗP“ŗĩplŸ“ĀÂP“ÂÄr “Đ‘RÕ‘# Ÿr ŸÕá0ŸáR0ŸØáP“áķP“ķõplŸ“P“r “h‹P‹USUVvVWu#WXt#XéSh‹pŸ‹ĻsŸĻ°P°UsŸUVv#ŸVW u##ŸWX t##ŸXésŸh‹p‹ĻsĻĢphopŸovpŸv}pŸ}‹p4Ÿ‹6s4Ÿ6@P@Us4ŸUVv#4ŸVW u##4ŸWX t##4ŸXés4Ÿh‹pŸ‹ĩsŸĩĀPĀUsŸUVv#ŸVW u##ŸWX t##ŸXésŸh‹pŸ‹ĐsŸĐÚPÚUsŸUVv#ŸVW u##ŸWX t##ŸXésŸo‹pŸ‹ßsŸßęPęUsŸUVv#ŸVW u##ŸWX t##ŸXésŸo‹p‹ĻsĻĢpovpŸv}pŸ}‹p4Ÿ‹6s4Ÿ6@P@Us4ŸUVv#4ŸVW u##4ŸWX t##4ŸXés4Ÿv‹pŸ‹úsŸúPUsŸUVv#ŸVW u##ŸWX t##ŸXésŸv‹p‹ĻsĻĢpv}pŸ}‹p4Ÿ‹6s4Ÿ6@P@Us4ŸUVv#4ŸVW u##4ŸWX t##4ŸXés4Ÿ}‹p4Ÿ‹6s4Ÿ6@P@Us4ŸUVv#4ŸVW u##4ŸWX t##4ŸXés4Ÿ}‹p‹ĻsĻĢpĄĻsŸĻ°P°UsŸUVv#ŸVW u##ŸWX t##ŸXésŸļXŸļĀPĀUsŸUVv#ŸVW u##ŸWX t##ŸÍXŸÍĐsŸĐÚPÚUsŸUVv#ŸVW u##ŸWX t##ŸāXŸāęPęUsŸUVv#ŸVW u##ŸWX t##Ÿ÷XŸ÷úsŸúPUsŸUVv#ŸVW u##ŸWX t##Ÿ3XŸ36s4Ÿ6@P@Us4ŸUVv#4ŸVW u##4ŸWX t##4Ÿ`juwŸjnRnéuwŸ`nPuuwŸƒRƒéuwŸuƒPŠ”uwŸ”˜R˜éuwŸŠ˜PŸŠuwŸŠ­R­éuwŸŸ­P´žuwŸžÂRÂéuwŸ´ÂPÉĶuwŸĶ×R×éuwŸÉ×P +S2S),sŸ,6P6+sŸ2sŸ)+Ÿ2Ÿ<FPF+sŸ2’sŸ<+Ÿ2’ŸRUsŸU_P_+sŸ2’sŸR+Ÿ2’ŸeoPo+sŸ2’sŸe+Ÿ2’Ÿ{~sŸ~ˆPˆ+sŸ2’sŸ{+Ÿ2’Ÿĩ¸s4Ÿ¸ÂPÂ+s4Ÿ2’s4Ÿĩ+Ÿ2’ŸĪ+s4Ÿ2’s4ŸÕ+uwŸ2’uwŸÕÜP2?PÜ+sŸB’sŸâ+uwŸB’uwŸâéPBOPé+sŸR’sŸī+uwŸR’uwŸīöPR_Pö+sŸb’sŸü+uwŸb’uwŸüPboP+sŸr’sŸ +uwŸr’uwŸ PrP+sŸ‚’sŸ+uwŸ‚’uwŸP‚Pš¤uwŸ¤¨R¨uwŸš¨P¯šuwŸšŊRŊuwŸ¯ŊPÄÎuwŸÎŌRŌuwŸÄŌPŲãuwŸãįRįuwŸŲįPîøuwŸøüRüuwŸîüP uwŸ RuwŸP@O‘ORP‚ŒR˛ŧRŌØs ŸØū‘# ŸÕØs “ØßS“ßčS“čņs|Ÿ“ßčsčëPëės|ėđpdŸ0Ÿ"P"‘#Ÿ[‹VŒßVĐvSpuP€‘wS’íVíī‘ŸīV‘ŸwV§ī1Ÿī0Ÿkw1ŸĖíVíī‘ŸĖī‘īV‘ŸīS‘6=Pôúsúütü‘dôúsGYPŪô0ŸdfPfjS6Ū‘ŪãRã‘6Ū‘#ŸŪãrŸã‘#ŸEGPGY‘#GŪ‘ŪãRã‘GY‘# ŸŪãr Ÿãô‘# ŸYjR1=P),P,0‘#$0Y‘\9[0Ÿ[‘\ƒVy ‘\9y ‘@[Rƒ‘#$C[rԟƒ ‘#$#TŸ[‘\y ‘\[y ‘ƒ‘#$[g‘\2$s"gt ‘\2$rā"Ē´ p2$rā"[y  ˙Ÿƒ ‘#$#`ŸĀŅ0ŸŅ! U4 y UŅįWú˙P˙! W4 y Wü˙P˙! W4 y Wü˙pŸ˙ P ! wŸ4 y wŸ ģ 0Ÿģ Ņ QĨ Ņ uŸ° Ņ uŸ° ģ 0Ÿģ Í QÍ Ņ qŸā !uŸ!!‘#Ÿ!#!uŸā !S“!#!S“į ö S!#!Sį ö P!!Pį ö R!!R!#!sŸį ö 1Ÿ!#!1Ÿë ö q4Ÿ!!q4ŸR!”!sŸ”!˜!‘#Ÿ˜!ˇ!sŸ !­!PÃ!õ!uŌ!Õ!pÕ!Ũ!uŌ!õ!u ī!õ!P“õ!"S“"h"S“h"j"sŸ“j"z"S“€""S“č!ę!Pę!õ!u õ! "V"b"Vb"s"Q€""Qī!A"u j"s"u " "ōÖj"s"ōÖ#"b"Vb"s"Q€""Q."s"W€""WQ"b"ōœ—€"Š"ōœ—Q"Y"pr"Ÿ["s"W€""W["e"ptŸ€""ptŸ€""W€""ptŸŠ""pw"Ÿš"¤"ugŸ¤"¨"R¨"˛"ugŸš"¨"PË"ā"‘ā"ę"Sę"ë"të"ī"‘`#8#SË"#‘#:#W:#;#‘đ"#øŸđ"#‘ā"ę"Sę"ë"të"ī"‘`#8#S$#:#W:#;#‘#Ė#‘Ē#ģ#Sģ#ŋ#‘ā#ü#‘$$P$$‘$-$P-$1$‘ā#ö#‘ö#$R$$R$5$R`$j$‘j$k$Pp${$‘€$‹$‘°$ģ$‘Ņ$Ô$PÔ$Ø$‘#$ņ$ô$Pô$ø$‘#$%%P%%‘#$1%4%P4%8%‘#$Q%T%PT%X%‘#$q%t%Pt%x%‘#$‘%”%P”%˜%‘#$ë%&S&&S&%&sø~Ÿ&&S&%&sø~Ÿ;&Q&SR&^&S^&f&sø~Ÿf&j&‘ˆŸR&^&S^&f&sø~Ÿf&j&‘ˆŸ}& &S &ĸ&‘#$’&Ÿ&‘2$v"}& &s⟠&ĸ& ‘#$#`Ÿå&ī&R3sŸ34‘#Ÿ4}sŸ}~‘#Ÿ<‘oŸ<@R@T‘oŸTXRXt‘oŸtxRx~‘oŸP"s<Ÿ4@P"s ŸANs Ÿ4‘oŸGT‘oŸTXRXt‘oŸtxRx~‘oŸ%PGXP"/sŸYfsŸ(4‘oŸ_t‘oŸtxRx~‘oŸ(4P_xP%sŸ%&‘#Ÿ&UsŸUV‘#Ÿ4‘oŸ48R8L‘oŸLPRPV‘oŸP!s<Ÿ&8P%S%&‘9USUV‘&‘oŸ>L‘oŸLPRPV‘oŸ&P>PPN'X'‘#ĖŸN'X'0ŸN'X'‘#Ė…'”'P'Ž'Pw'˜' Ÿ'Į' Ÿw'„'P„'˜'S'Į'Sđ'(0Ÿ(H)U])t)U ((‘#TŸ(H)‘\#TŸ])t)‘\#TŸ+(H)W])t)W+(A(0ŸA(§(1Ÿ§(Â(QÂ()1Ÿ)')Q])t)1Ÿ+(A(0ŸA(2)S])t)SA(Š(V¸()V])t)VX(§(V])g)VX(§(v Ÿ])g)v Ÿz((V])g)Vz((v Ÿ])g)v Ÿˆ(Š(PŌ()Wg)t)WŌ()wŸg)t)wŸô()Wg)t)Wô()wŸg)t)wŸū()Pä)ü)0Ÿü)-*Së)-*‘#TŸ* *P *)*s2$w")*-*s2$w"**0Ÿ*"*P* *pŸ *"* s2$w"#Ÿ|*ƒ*Pƒ**S *ļ*Pļ*î*sî*ī*tpī*+s++tp+7+så+é+Pé+,uP,,tL,,,uP\,i,uP, ,R ,,,rŸz+,,7Ÿ<,Ô,7Ÿz+€+V€++t+…+t…+,u`Ÿ,,t\Ÿ,,,u`Ÿ<,Ô,u`Ÿ‰+,,7Ÿ<,•,7Ÿŗ,Đ,7Ÿ‰+,V,,udŸ,,t`Ÿ,,,V<,•,Vŗ,Đ,Vĩ,Ė,udŸģ,Å,u\ŸÅ,É,RÉ,Ė,u\Ÿģ,É,P›+Õ+SÕ+,u ,,t,,,u <,\,S\,i,u i,k,Sk,•,u Ė,Î,SÎ,Đ,u ›+,V,,udŸ,,t`Ÿ,,,V<,•,VĖ,Đ,Vĸ+Õ+SÕ+,u ,,t,,,u <,\,S\,i,u i,k,Sk,€,u ĸ+Ú+WÚ+,u\Ÿ,,tXŸ,,,u\Ÿ<,\,W\,i,u\Ÿi,€,Wk,€,u\Ÿq,{,u[Ÿ{,,R,€,u[Ÿq,,Pģ+,V,,udŸ,,t`Ÿ,,,V<,i,Vž+,u[Ÿ,,tWŸ,,,u[Ÿ<,i,u[Ÿž+Å+P<,G,PÅ+,u`Ÿ,,t\Ÿ,,,u`ŸM,i,u`ŸË+,udŸ,,t`Ÿ,,,udŸM,i,udŸË+Ō+PM,V,PŌ+,u\Ÿ,,tXŸ,,,u\Ÿ\,i,u\Ÿņ+,u\Ÿ,,tXŸ\,i,u\Ÿô+,udŸ,,t`Ÿ\,i,udŸô+û+Pû+,stŸ\,f,Pf,i,stŸ€,•,udŸ†,,u[Ÿ,”,R”,•,u[Ÿ†,”,P•,ŗ,u`Ÿ›,Ĩ,u[ŸĨ,Š,RŠ,ŗ,u[Ÿ›,Š,Pō,ū,P-"-PE-J-PJ-q-SN-m-SN-m-‘ -­-Ÿh.p.R//‘#/'/‘˜Ÿ'/,/P,/./t./4/‘„4/>/‘˜Ÿ#/(/‘@/o/0Ÿo/u/RC/G/‘˜ŸG/L/PL/N/tN/T/‘„T/u/‘˜ŸC/H/‘^/o/‘˜Ÿä/ô/Pö/ 0P0ļ0‘ļ0Ė0WĖ0Í0‘!0T0ST0_0sŸ_0¯0S2040P40°0V°0ĩ0‘2040P40T0VT0›0P0Ž0‘Ž0ą0Wļ0Ė0WĖ0Í0‘20Ž0‘Ž0ą0W–0°0V°0ĩ0‘–0Ž0‘Ž0ą0Wļ0Ė0WĖ0Í0‘11[1S[1^1uā_Ÿ^1a1tÜ_Ÿa1y1Sy1|1uā_Ÿ|11tÜ_Ÿ11S1Ĩ1uā_ŸĨ1§1S§1Ā1uā_Ÿ11\1V\1a1Pa1z1Vz1|1u|11t1Ā1VŦ1š1uß_Ÿš1Ŋ1RŊ1Ā1uß_ŸŦ1Ŋ1PK1[1S[1^1uā_Ÿ^1a1tÜ_Ÿa1y1Sy1|1uā_Ÿ|11tÜ_ŸN1^1uß_Ÿ^1a1tÛ_Ÿa1|1uß_Ÿ|11tÛ_ŸN1Z1PZ1[1s<Ÿ[1^1uā_<Ÿ^1a1tÜ_<Ÿa1r1P1Ĩ1uā_ŸŠ1—1uß_Ÿ—1›1R›1Ĩ1uß_ŸŠ1›1PÚ1ņ1P2)2PË1į1Vį12u 22t242V4252u 5282t82P2u U2Š2u Ë1Đ1vô12V22utŸ22tpŸ82J2VU2W2VW2n2utŸp2r2Vr2Š2utŸô12S22u22t82J2SU2W2SW2n2up2ˆ2Sˆ2Š2ur2ˆ2Sˆ2Š2uw22usŸ2…2R…2Š2usŸw2…2P 22V22utŸ22tpŸ82J2V 22usŸ22toŸ82J2usŸ 22P82G2P242V4252u 5282t232S3282PW2n2utŸ]2g2usŸg2k2Rk2n2usŸ]2k2P“2™2u`Ÿ™2ū2Wū2˙2u`Ÿ˙23‘XŸ3'3W'3(3u`Ÿ(3+3t\Ÿ+3f3WŽ2ü2Sü2˙2udŸ˙23‘\Ÿ3%3S%3(3udŸ(3+3t`Ÿ+3-3S-3K3udŸK3M3SM3d3udŸd3f3SÅ2ü2Sü2˙2udŸ˙23‘\Ÿ3%3S%3(3udŸ(3+3t`ŸÅ2ū2Wū2˙2u`Ÿ˙23‘XŸ3'3W'3(3u`Ÿ(3+3t\ŸŌ2ü2Sü2˙2udŸ˙23‘\Ÿ3%3S%3(3udŸ(3+3t`ŸŌ2ė2Sė2˙2u`Ÿ˙23‘XŸ33S3(3u`Ÿ(3+3t\ŸÕ2˙2u_Ÿ˙23‘WŸ3(3u_Ÿ(3+3t[ŸÕ2Ü2P33Pė2˙2u`Ÿ˙23‘XŸ3(3u`Ÿ(3+3t\Ÿī2˙2udŸ˙23‘\Ÿ3(3udŸ(3+3t`Ÿī2û2Pû2˙2u`<Ÿ˙23‘X<Ÿ33P-3K3u`Ÿ33=3u_Ÿ=3A3RA3K3u_Ÿ33A3PM3d3udŸS3]3u_Ÿ]3a3Ra3d3u_ŸS3a3P‹3Š3Pķ3 4P~3‡3P‡3Ę3u ķ34u #424u l4…4u €3¤3V¤3Ĩ3tĨ3Š3tķ3û3V‹3°3upŸ°3Æ3VÆ3đ3upŸđ3ķ3‘hŸķ3 4upŸ 4#4‘hŸ#424V24l4upŸl4…4V”3Š3upķ3 4upŦ3°3V°3ą3tą3ĩ3tĩ3Æ3utŸ#424utŸl4…4utŸŦ3°3upŸ°3Æ3V#424Vl4…4Vŧ3Æ3utŸ#424utŸŋ3Æ3uoŸ#424uoŸŋ3Æ3P#4/4PÆ3đ3upŸđ3ķ3‘hŸ4 4upŸ 4#4‘hŸR4l4upŸÆ3î3Sî3ķ3P44S4#4PR4j4ST4j4SY4c4utŸc4g4Rg4l4utŸY4g4PŪ3đ3upŸđ3ķ3‘hŸ4 4upŸ 4#4‘hŸá3đ3utŸđ3ķ3‘lŸ4 4utŸ 4#4‘lŸá3í3Pí3đ3up<Ÿđ3ķ3‘h<Ÿ44Pķ34Ÿķ3û3upŸû34V44R4upŸ:4D4uoŸD4H4RH4R4uoŸ:4H4Pt4~4uoŸ~4‚4R‚4…4uoŸt4‚4P›4ē4Pē4É4‘É4Ü4PÜ4B5‘ą4ē4Pē4ž4‘ą4ž4SÉ4Ô4VÔ4Ö4tÖ4×4t×4Ø4tØ4Ü4t É4Ü4PÜ4B5‘Ũ4 5V 5(5‘pŸ(5*5V*5B5‘pŸŨ4 5S 5(5‘(5@5S@5B5‘*5@5S@5B5‘/595‘oŸ95=5R=5B5‘oŸ/5=5Pô45V÷45‘oŸ55R55‘oŸ÷45P 5(5‘pŸ55‘oŸ55R5(5‘oŸ55P^5u5Vu5w5uw5x5tx5:6Vą56Wą5Í5WÍ5ã5u`Ÿã56W66u`Ÿ´56u_Ÿ´5ģ5Pø5˙5PÍ5ã5u`ŸĶ5ã5udŸĶ5ā5P66u`Ÿ 66udŸ 66P)636u_Ÿ3676R76:6u_Ÿ)676P^6ø6uø6û6t û6,7u,7/7t /7u7uz7Č7u^6õ6Sõ6ø6udŸø6û6t`Ÿû6)7S)7,7udŸ,7/7t`Ÿ/7O7SO7z7udŸz7|7S|7~7udŸ~7€7S€7—7udŸ—7™7S™7°7udŸ°7˛7S˛7Č7udŸk6ø6uø6û6t û6,7u,7/7t /7d7u~77u—7Č7uk6ö6Vö6ø6u`Ÿø6û6t\Ÿû6*7V*7,7u`Ÿ,7/7t\Ÿ/7d7V~77V—7Č7VO7d7u`ŸU7_7u_Ÿ_7c7Rc7d7u_ŸU7c7P†6õ6Sõ6ø6udŸø6û6t`Ÿû6)7S)7,7udŸ,7/7t`Ÿ/7M7S~7€7S€77udŸ—7™7S™7°7udŸ°7˛7S˛7Č7udŸ‰6ø6u_Ÿø6û6t[Ÿû6,7u_Ÿ,7/7t[Ÿ/7M7u_Ÿ~77u_Ÿ—7Č7u_Ÿ‰6”6P:7G7P§6ī6u /7:7u —7Č7u §6ļ6u <u`<Ÿ§6ī60Ÿ/7:70Ÿ—7Č70ŸÃ6ī6udŸ/7:7udŸ—7Č7udŸÃ6ī6W/7:7W—7Č7Wˇ7Á7u_ŸÁ7Å7RÅ7Č7u_Ÿˇ7Å7PØ6ī6udŸ/7:7udŸÛ6ī6u_Ÿ/7:7u_ŸÛ6â6P/777Pâ6ī6u`Ÿ77u`Ÿč6ī6udŸ77udŸč6ô6P7"7Pû67u û67Wd7q7udŸj7q7u_Ÿj7q7P€77u`Ÿ†77u_Ÿ†77P™7°7udŸŸ7Š7u_ŸŠ7­7R­7°7u_ŸŸ7­7Po8u8Ru88‘o88‘˛8æ8Sį869Sļ819:Ÿļ8æ8Sį819Sį89:Ÿį89SÎ8Õ8P919‘x9|9P|9Ų9U‚9‹9P‹9×9V‚9‘90Ÿ‘9œ9P­9ē9P‚9‘90Ÿ‘9Ö9Sņ92:S2:3:P3:C:S’:–:S :(:s;:C:S’:–:S™:Ŗ:ugŸŖ:§:R§:ą:ugŸ™:§:PJ:q:Sƒ:’:SU:q:sŸƒ:’:sŸ^:q:ugŸƒ:’:ugŸ^:e:Pƒ::P;o;U;S;V;%;S;B;SB;G;s|ŸG;o;S%;+;S+;/;s|Ÿ/;B;SB;K;s|Ÿ%;/;‘_Ÿ4;?;‘_Ÿ?;F;RF;S;‘_Ÿ%;/;P4;F;PS;o;US;[; uu4ŸS;o;VW;[; uu4ŸW;c;VŸ;<‘<<V<<‘<4<VŸ; <‘ <<S<4<SŸ;<‘<<W<4<WŠ;¸;Pķ;ų;Rų;ũ; ‘? ūŸÖ;ũ;cŸÖ;ũ;‘ũ;<iŸũ;<‘<<V<<‘T<Š<PŠ<B=‘B=J=PJ=Ä=‘T<Š<pŸŠ<B=‘#ŸB=J=pŸJ=Ä=‘#Ÿs<Š<PŠ<B=‘B=J=PJ=Ä=‘s<Š<pŸŠ<B=‘#ŸB=J=pŸJ=Ä=‘#Ÿ~<Š<RŠ<<‘\B=g=0Ÿ~<ģ<Sģ<6=‘B=g=Sg=Ä=‘~<Š<RŠ<<‘\B=g=0ŸB=g=SR=g=1ŸR=^=RR=Y=r<B=“Ÿg=Ä=“Ÿ<ģ<Sģ<6=‘g=Ä=‘ģ<B=•Ÿg=Ä=•Ÿģ<Į<PĮ<:=Sg=Ä=SČ<=Vž=ŋ=VČ<:=Sg=Ä=SÛ<B=˜Ÿg=Ä=˜ŸÛ<:=Sg=Ä=Së<<=Wg=Ä=Wë<:=Sg=Ä=Sö< =Wž=ŋ=0Ÿž=ŋ=SĒ=ŋ=1ŸĒ=ļ=RĒ=ą=r =:=Sg=ž=Sŋ=Ä=S =B=:Ÿg=ž=:Ÿŋ=Ä=:Ÿ =(= ss<"Ÿg=x=sp"Ÿŋ=Ã=sp"Ÿ=;=Vg=ž=Vŋ=Ä=V=B=:Ÿg=ž=:Ÿ=;=Vg=ž=Vg=ž=:Ÿg=ž=V2=A=Pß=ä=Pä=ķ=‘>>‘á=ä=Pä=ķ=‘>>‘ķ=>‘ķ=>R>>‘'s$Ÿ'2‘#$Ÿ2Cs$Ÿ<‘oŸ<@R@C‘oŸP2@P'S'2‘X>_>P_>•?S•?˜?u˜?™?t™?ė?SX>~?W~?•?s4Ÿ•?˜?u#4Ÿ˜?™?t#4Ÿ™?ė?WÎ?Ī?tĪ?Ķ?uŧļ>•?S•?˜?u˜?™?t™?ė?Sá>æ>Pæ>é>Qé>˜?ud˜?™?t`ģ?Á?udÁ?Ü?sŸÜ?ė?ud!?™?HŸģ?Ü?HŸ!?–?V–?˜?u# Ÿ˜?™?t# Ÿģ?×?V×?Ü?s Ÿh?–?v$Ÿ–?˜?u#0Ÿ˜?™?t#0Ÿģ?×?v$Ÿ×?Ü?s0Ÿo?r?s0›?ģ?s4Ÿ?•?S•?˜?u˜?™?t?˜?u˜?™?tƒ?™?AŸ“ƒ?—?W—?˜?ud˜?™?t`ƒ?‘? wud<"Ÿƒ?™?AŸƒ?‘? wud<"#@QAuTQATAtPdAßAuTķ?l@u TAAu ķ?l@u #ŸTAAu #Ÿ@@P@@u #!@TA›ŸdAßA›Ÿ!@QAudŸQATAt`ŸdAßAudŸ!@1@ud#Ÿ1@6@P:@x@ōĒęx@Ā@ōēęĀ@å@ōäęū@TAōĘędAAōĒęAĄAōēęĄAÁAōĘę:@QAudŸQATAt`ŸdAÁAudŸB@\@WB@J@ud#ŸR@V@pŸV@[@PdAAudŸb@TAĻŸAÁAĻŸb@o@pŸo@t@Px@Ā@ōēęĀ@å@ōäęū@TAōĘęAĄAōēęĄAÁAōĘęx@QAudŸQATAt`ŸAÁAudŸ€@š@V€@„@ud#Ÿ@”@pŸ”@™@PAĄAudŸĨ@å@žŸĨ@å@udŸĨ@­@ud#Ÿ­@ĩ@pŸĩ@ē@PĀ@å@ōäęĀ@å@udŸŌ@å@ÁŸŌ@Ü@pŸÜ@á@På@TA˛ŸĄAÁA˛Ÿå@QAudŸQATAt`ŸĄAÁAudŸå@í@ud#Ÿí@õ@pŸõ@ú@Pū@TAōĘęĄAÁAōĘęū@QAudŸQATAt`ŸĄAÁAudŸA ASA Aud#ŸAApŸAAPĄAÁAudŸ#AQAudŸQATAt`Ÿ7AQAudŸQATAt`Ÿ7ATA0ŸRQSQvķRŸvySyåķRŸQUuTUvķQŸvˆuTˆåķQŸ#Q|Ÿ#QW?Qß?HPTvÅŸˆŊÅŸÛåÅŸTvudŸˆŊudŸÛäudŸäåt`ŸvˆŅŸvˆudŸˆŊPŸÛåPŸˆ™PœŊudŸÛäudŸäåt`ŸĢŊudŸÛäudŸäåt`ŸĢŊ0ŸÛå0ŸŋÛudŸŋÛ0Ÿ˙A&BP&B+Br+B3BP:CCCPCCKCr€€€xŸ B&BP&B+Br:CCCPCCKCr€€€xŸvSvwvtŸwyuT4ŸyztP4ŸzŒSŒvtŸuT4ŸtP4Ÿ”–S–˜vtŸœžSž vtŸĐvtŸ>xWxyuyztzŽWŽut”˜Wœ WĐWSyudŸyzt`ŸzudŸt`Ÿ”˜udŸĐåudŸSVw#ŸhyudŸyzt`ŸzudŸt`ŸkyucŸyzt_ŸzucŸt_Ÿk‡PĐåudŸÖāucŸāäRäåucŸÖäPåWå0ŸKKPKØLVåL"MVáMPNVŅNŪNV*OXOVŊOôOV K&KP&KYLSåL‚MSáM NSpKØLDŸŅNŪNDŸ*OXODŸŊOôODŸpKØLWŅNŪNW*OXOWŊOôOWpK€Kw#Ÿ€K…KPˆKØLk ŸŅNŪNk Ÿ*OAOk ŸŊOôOk ŸˆKØLWŅNŪNW*OAOWŊOôOWŸKØLpŸŅNŪNpŸ*OAOpŸŊOôOpŸŸKØLWŅNŪNW*OAOWŊOôOWŸKŠKpŸŠKŽKPĩKØLX ŸŅNŪNX Ÿ*OAOX ŸŊOôOX ŸĩKØLWŅNŪNW*OAOWŊOôOWĩKŋKpŸŋKÄKPËKØLtŸŅNŪNtŸ*OAOtŸŊOôOtŸËKØLWŅNŪNW*OAOWŊOôOWËKÕKpŸÕKÚKPáKØLk ŸŅNŪNk Ÿ*OAOk ŸŊOôOk ŸáKØLWŅNŪNW*OAOWŊOôOWáKëKpŸëKđKP÷KØL„ŸŅNŪN„Ÿ*OAO„ŸŊOôO„Ÿ÷KØLWŅNŪNW*OAOWŊOôOW÷KLpŸLLP LZLō-ZLØLōŅNŪNō*OAOōŊOôOō LØLWŅNŪNW*OAOWŊOôOWLØL†ŸŅNŪN†Ÿ*OAO†ŸŊOôO†ŸLØLWŅNŪNW*OAOWŊOôOWL&LpŸ&L+LP2LØLX ŸŅNŪNX Ÿ*OAOX ŸŊOôOX Ÿ2LØLWŅNŪNW*OAOWŊOôOW2LY?Yt?YCYtmV‹VuŦ~Ÿ‹VŽVPŽVˆXuŦ~ŸˆX‹X‘¤~Ÿ‹X†YuŦ~Ÿ´V…Wu´~Ÿ…W‹WV‹WˆXu´~ŸˆX‹X‘Ŧ~Ÿ‹XGYu´~ŸhY‚Yu´~ŸhY‚YuŦ~ŸøVGYHŸøVMWu¸~ŸMWiWPiWtWttWxWtxWˆXu¸~ŸˆX‹X‘°~Ÿ‹XGYu¸~ŸaWiWp$ŸiWtWt#$ŸtWxWt#$ŸxWˆXuÜ~ŸˆX‹X‘Ô~Ÿ‹XGYuÜ~ŸsWxWuÜ~GYMYuā~ŸMY_YP_YhYuā~ŸˆW Y0Ÿ“ˆW‹WV‹WˆXu´~ŸˆX‹X‘Ŧ~Ÿ‹X Yu´~Ÿ‹W Y0Ÿ‹W†XV‹X YV•W™Wvô‹XŪX ŸđXY Ÿ‹XŪXVđXYV›XŠXQŠX˛Xu¤~˛XĀXRĀXŪXu¤~đXYu¤~YYQYYu¤~XŪX ŸđXY ŸXŠXQŠX˛Xu¤~˛XĀXRĀXŪXu¤~đXYu¤~˛XŪX ŸđXY Ÿ˛XŪXu¤~đXYu¤~™W‹X2Ÿ“ŪXđX2Ÿ“™WŗWu´~ŸŗW¸WP¸WˆXu´~ŸˆX‹X‘Ŧ~ŸŪXđXu´~Ÿ™WœW upt"ĖŸœWŗW up"ĖŸ™W‹X2ŸŪXđX2Ÿ™WœW upt"ÄœWĸWup"ÄÁWˆXuŦ~ŸˆX‹X‘¤~ŸŪXđXuŦ~ŸĶWˆXuŦ~ŸˆX‹X‘¤~ŸŪXđXuŦ~ŸņWˆXu¸~ŸˆX‹X‘°~ŸŪXđXu¸~ŸûWˆXuÜ~ŸˆX‹X‘Ô~ŸŪXđXuÜ~ŸūWˆXuĢ~ŸˆX‹X‘Ŗ~ŸŪXđXuĢ~ŸūW XPŪXęXP XˆXu¸~ŸˆX‹X‘°~Ÿ"XˆXuŦ~ŸˆX‹X‘¤~Ÿ>XˆXu´~ŸˆX‹X‘Ŧ~ŸSXˆXuŦ~ŸˆX‹X‘¤~ŸcXiXuā~ŸiXzXPzXˆXuā~ŸˆX‹X‘Ø~Ÿ“Y ZuŦ~Ÿ ZZPZ0\uŦ~Ÿ0\3\‘¤~Ÿ3\6]uŦ~Ÿ“YœYuā~ŸœYĒYPĒYėZuā~ŸėZûZPûZ0\uā~Ÿ0\3\‘Ø~Ÿ3\6]uā~Ÿî\ī\tī\ķ\tīY ZuŦ~Ÿ ZZPZ0\uŦ~Ÿ0\3\‘¤~Ÿ3\6]uŦ~Ÿ Z.Zu´~Ÿ.Z1ZP1Z[u´~Ÿ[[V[0\u´~Ÿ0\3\‘Ŧ~Ÿ3\÷\u´~Ÿ]2]u´~Ÿ]2]uŦ~Ÿ{Z÷\HŸ{ZĐZu¸~ŸĐZėZPėZ÷Zt÷ZûZtûZ0\u¸~Ÿ0\3\‘°~Ÿ3\÷\u¸~ŸäZėZp$ŸėZ÷Zt#$Ÿ÷ZûZt#$ŸûZ0\uÜ~Ÿ0\3\‘Ô~Ÿ3\÷\uÜ~ŸöZûZuÜ~÷\ũ\uā~Ÿũ\]P]]uā~Ÿ[Đ\0Ÿ“[[V[0\u´~Ÿ0\3\‘Ŧ~Ÿ3\Đ\u´~Ÿ[Đ\0Ÿ[.\V3\Đ\V#['[vô3\†\ Ÿ \ˇ\ Ÿ3\†\V \ˇ\VC\Q\QQ\Z\u ~Z\h\Rh\†\u ~ \˛\u ~˛\ļ\Qļ\ˇ\u ~E\†\ Ÿ \˛\ ŸE\Q\QQ\Z\u ~Z\h\Rh\†\u ~ \˛\u ~Z\†\ Ÿ \˛\ ŸZ\†\u ~ \˛\u ~'[3\2Ÿ“†\ \2Ÿ“'[>[u´~Ÿ>[A[RA[U[u´~ŸU[`[P`[0\u´~Ÿ0\3\‘Ŧ~Ÿ†\ \u´~Ÿ'[8[ upt"ĖŸ8[>[ ur"ĖŸ'[3\2Ÿ†\ \2Ÿ'[8[ upt"ÄO[0\u¤~0\3\‘œ~†\ \u¤~O[U[u´~ŸU[`[P`[0\u´~Ÿ0\3\‘Ŧ~Ÿ†\ \u´~Ÿ8[>[u´~Ÿ>[A[RA[U[u´~ŸU[`[P`[0\u´~Ÿ0\3\‘Ŧ~Ÿ†\ \u´~ŸA[`[RA[3\JŸ†\ \JŸA[3\8Ÿ†\ \8ŸA[O[r A[3\ ĩŸ†\ \ ĩŸA[`[r ŸA[U[u´~ŸU[`[P`[0\u´~Ÿ0\3\‘Ŧ~Ÿ†\ \u´~ŸA[3\ @Ÿ†\ \ @ŸA[O[ r  ĩ8!Ÿi[0\uŦ~Ÿ0\3\‘¤~Ÿ†\ \uŦ~Ÿ{[0\uŦ~Ÿ0\3\‘¤~Ÿ†\ \uŦ~Ÿ™[0\u¸~Ÿ0\3\‘°~Ÿ†\ \u¸~ŸŖ[0\uÜ~Ÿ0\3\‘Ô~Ÿ†\ \uÜ~ŸĻ[0\uĢ~Ÿ0\3\‘Ŗ~Ÿ†\ \uĢ~ŸĻ[ą[P†\š\Pą[0\u¸~Ÿ0\3\‘°~ŸĘ[0\uŦ~Ÿ0\3\‘¤~ŸÚ[0\u´~Ÿ0\3\‘Ŧ~Ÿõ[0\uŦ~Ÿ0\3\‘¤~Ÿ \\uā~Ÿ\"\P"\0\uā~Ÿ0\3\‘Ø~ŸY]g]0Ÿg]Ŋ]Sî]_SY]é]Vé]î]‘î]Å_Vz]Ĩ]RĨ]Ŋ]‘Sî]^R^^‘S^/^R/^5^‘S5^M^RM^S^‘SS^s^Rs^y^‘Sy^–^R–^§^ps"§^Č^‘SČ^Ö^RÖ^î^‘Sî^ö^Rö^_‘S__ps"_Ĩ_‘S]Ļ]‘Ÿ]Ļ]‘\Ÿ] ]‘\#Ÿ ]Ĩ]P§^Č^ōõ>§^Č^‘\Ÿž^Â^QÂ^Č^‘Zē^Â^Pî]^ŒŸî]^‘\Ÿî]^‘\#Ÿ^^P^5^œŸ^5^‘\Ÿ^*^‘\#Ÿ*^/^P5^S^–Ÿ5^S^‘\Ÿ5^H^‘\#ŸH^M^P^^y^ŖŸ^^y^‘\Ÿ^^n^‘\#Ÿn^s^Py^Č^‘S_Ĩ_‘SČ^î^‘\Ÿã^č^rč^î^‘Yã^č^Pî^_‘\Ÿ__r__‘X__P,_Ĩ_ĒŸ,_Ĩ_‘\Ÿ,_6_pŸ6_;_PB_Ž_‘`ŸB_Ž_‘\ŸB_L_‘\#ŸL_Q_PX_Ž_ŽŸX_Ž_‘\ŸX_b_pŸb_g_Pn_Ž_‘`Ÿq_‚_‘[Ÿ‚_†_R†_Ž_‘[Ÿq_z_Pz__‘`<Ÿ_†_P_Ĩ_‘`Ÿ–_ _‘[Ÿ _¤_R¤_Ĩ_‘[Ÿ–_¤_PŊ]î]‘\ŸŅ]î]‘\ŸŅ]î]0ŸĨ_Á_‘\ŸĨ_Á_0Ÿå_ū_0Ÿū_&aS&a+asŸ+acWųcdWPb~bĻŸPb~buTŸPbXbuT#ŸXb`bpŸ`bebPkb~bWkb~buTŸkbnbuT#ŸrbubpŸubzbP~bŪc˛Ÿųcad˛Ÿ}dšd˛Ÿ~bÛcuTŸÛcŪctPŸųcaduTŸ}dšduTŸ~b†buT#Ÿ†bŽbpŸŽb“bP—bŪcōOųcadōO}dšdōO—bÛcuTŸÛcŪctPŸųcaduTŸ}dšduTŸŸbšbSŸbŖbuT#Ÿ¯bŗbpŸŗb¸bPųcduTŸÂbÛb˛ŸÂbÛbuTŸÂbĘbuT#ŸĘbŌbpŸŌb×bPÛb"cSîbcßîbcuTŸîböbuT#ŸöbūbpŸūbcP ccuTŸ ccuT#ŸccpŸccP0cÛcuTŸÛcŪctPŸdaduTŸ}dšduTŸ0cÛcu`ŸÛcŪct\Ÿdadu`Ÿ}dšdu`Ÿ>cÛcuTŸÛcŪctPŸdQduTŸdšduTŸ>ctcStcuctucyctycÛcuXŸÛcŪctTŸd-dS-dQduXŸdƒdSƒdšduXŸEcÛcuTŸÛcŪctPŸdQduTŸdšduTŸEcÚcWdQdWdšdWOcŲcVŲcÛcu\ŸÛcŪctXŸddQduXŸ>dQd0ŸcŪc0Ÿdad0Ÿ}dšd0ŸcÛcu`ŸÛcŪct\Ÿdadu`Ÿ}dšdu`Ÿ)cŪc0Ÿdad0Ÿ}dšd0Ÿ)cÛcudŸÛcŪct`ŸdadudŸ}dšdudŸĸcÛcu`ŸÛcŪct\Ÿ-du¸~Ÿ>bPbu¸~Ÿ‚t´~Ÿ‚Øu¸~ŸŪ7u¸~ŸRbp$ŸbuÜ~Ÿ‚tØ~Ÿ‚ØuÜ~ŸŪ7uÜ~Ÿ\buÜ~7Ruā~Ÿk–u´~Ÿ– Q u´~Ÿ‚t°~Ÿ‚Ôu´~ŸŪu´~Ÿk„P„…t…‰t‚ŽPŽ–u ™ Q ĩu´~Ÿ¸Đu´~ŸŪûu´~Ÿ™ĩu¨~Ÿ¸Đu¨~ŸŪûu¨~ŸĄĩu¨~Ÿ¸Đu¨~ŸĒĩuĻ~Ÿ¸ĐuĻ~ŸĒĩP¸ĘPāûu¨~ŸéöuĻ~ŸöúRúûuĻ~ŸéúPĩuŦ~Ÿ‚t¨~Ÿ¤¸uŦ~ŸĐuŦ~Ÿ‚t¨~Ÿ¤¸uŦ~Ÿîu¸~Ÿ‚t´~Ÿ¤¸u¸~ŸøuÜ~Ÿ‚tØ~Ÿ¤¸uÜ~Ÿûu¨~Ÿ‚t¤~Ÿ¤¸u¨~ŸûP¤˛Pu¸~Ÿ‚t´~ŸuŦ~Ÿ‚t¨~Ÿ5u´~Ÿ‚t°~ŸJuŦ~Ÿ‚t¨~Ÿcuā~Ÿ‚tÜ~Ÿ.r8r1Ÿ.r8rS1r8r0Ÿ1r8rsŸ‚r˛rV…r˛ru_Ÿ…rŒrPĸr¯rPŒrĸrudŸ’rĸru`Ÿ’rŸrP´rŌrudŸērÄru_ŸÄrČrRČrŌru_ŸērČrPÚräru_ŸärčrRčrëru_ŸÚrčrPss1ŸssSss0ŸsssŸbs’sVes’su_ŸeslsP‚ssPls‚sudŸrs‚su`ŸrssP”s˛sudŸšs¤su_Ÿ¤s¨sR¨s˛su_Ÿšs¨sPēsÄsu_ŸÄsČsRČsËsu_ŸēsČsPĐsésPés‰tU‰tŠtķPŸĐsésRésˆtWˆtŠtķRŸĐsésQés‡tV‡tŠtķQŸęsös0Ÿ ttp1)Ÿktotp1)Ÿęsös0Ÿ t>tS>tktsŸktotSôs tQt,tQ,tot‘\t,tQ,tot‘\8totŸ8totVKtot/ŸKtotVot‡tV‡tŠtķQŸ tËtSËtĪt‘ĐtŲtSŲtŪt‘œt˛tR˛tĮt‘ĐtØtRØtŪt‘œt˛tP˛tˇt‘ĐtŨtPŨtŪt‘ŗtĐtŸŗtËtSËtĪt‘ņtuSu"uP"u#u‘ņtuVu"uQ"u#u‘ût#u!Ÿût uP#u@uV@uAu‘zuŦ~Ÿz}P}†uŦ~Ÿ†‰t¨~Ÿ‰ĪuŦ~Ÿ uā~Ÿ …W…†uā~Ÿ†‰tÜ~Ÿ‰ĪW34t48t\zuŦ~Ÿz}P}†uŦ~Ÿ†‰t¨~Ÿ‰ĪuŦ~Ÿ›u´~Ÿ›žPž–u´~Ÿ– Q †u´~Ÿ†‰t°~Ÿ‰u´~Ÿ<u´~ŸWĪu´~ŸWquŦ~Ÿč HŸ HŸ<HŸqĪHŸč=u¸~Ÿ=bPb†u¸~Ÿ†‰t´~Ÿ‰ u¸~Ÿ u¸~Ÿ<u¸~ŸqĪu¸~ŸQbp$Ÿb†uÜ~Ÿ†‰tØ~Ÿ‰ uÜ~Ÿ uÜ~Ÿ<uÜ~ŸqĪuÜ~Ÿ^buÜ~<Wuā~Ÿk–u´~Ÿ– Q †u´~Ÿ†‰t°~Ÿ‰u´~Ÿ u´~Ÿu´~ŸqĪu´~Ÿk„P„…t…‰t‰–P–žu ™ Q ŧu´~ŸĀu´~Ÿ u´~Ÿq‚u´~Ÿ™Īu´~Ÿ™ŧu¨~ŸĀu¨~Ÿ u¨~Ÿq‚u¨~Ÿ™Īu¨~ŸĄŧu¨~ŸĀu¨~ŸļŧuĻ~ŸĀuĻ~ŸļŧRĀÕRÕôu”~ôūRūu”~ĀuĻ~ŸĀu”~Ā ˙ŸĀÕp|ŸÕņu¨~4Ÿņôu”~#Ÿôp|Ÿu¨~4ŸÉÕ ˙ŸÉÕp|Ÿô ˙Ÿôp|Ÿu¨~4ŸûQq‚u¨~Ÿ™Īu¨~Ÿz‚uĻ~Ÿ™ĪuĻ~Ÿz‚V™ĪVĨŦ ˙ŸĨŦvŸŧ†uŦ~Ÿ†‰t¨~ŸŦĀuŦ~Ÿ×†uŦ~Ÿ†‰t¨~ŸŦĀuŦ~Ÿõ†u¸~Ÿ†‰t´~ŸŦĀu¸~Ÿ˙†uÜ~Ÿ†‰tØ~ŸŦĀuÜ~Ÿ†u¨~Ÿ†‰t¤~ŸŦĀu¨~Ÿ PŦēP †u¸~Ÿ†‰t´~Ÿ&†uŦ~Ÿ†‰t¨~Ÿ<†u´~Ÿ†‰t°~ŸQ†uŦ~Ÿ†‰t¨~Ÿj†uā~Ÿ†‰tÜ~ŸŽu˜u1ŸŽu˜uS‘u˜u0Ÿ‘u˜usŸâuvVåuvu_ŸåuėuPvvPėuvudŸōuvu`Ÿōu˙uPv2vudŸv$vu_Ÿ$v(vR(v2vu_Ÿv(vP:vDvu_ŸDvHvRHvKvu_Ÿ:vHvPPvzv‘zv9wV9w>wvŸ>wOwVTw~wVwĪwVSv†vuevfvwzvÕvSÛv÷vSAwNwSbw~wSšvÕvSbw~wS¨v­vQ­vÕvuTbw~wuTÅvÕvō†Ąbwuwō†ĄÅvĘvpr"ŸĘvÕvuTbw~wuTĘvÕvptŸbw~wptŸbw~wuTbw~wptŸuw~wpuT"ŸwEwudŸTwbwudŸwEwu_ŸTwbwu_Ÿw&wPTw_wP&wEwu`Ÿ,w6wudŸ6w=wR=wEwudŸ,w=wPŸw´wudŸĨw¯wu_Ÿ¯wŗwRŗw´wu_ŸĨwŗwP´wËwu`ŸēwÄwu_ŸÄwČwRČwËwu_ŸēwČwP…wwu_Ÿw“wR“wwu_Ÿ…w“wPMu MP‘P_u MutŸMP‘lŸPnutŸ(MutŸMP‘lŸ7MutŸMP‘lŸ7P0ŸĐwķwRķwRxuTRxSxtPSx€xuT€xxtPxÔxuTĐwčwQčwÔxķQŸôwúwVúwûwtûw˙wt˙wRxu`ŸRxSxt\ŸSx€xu`Ÿ€xxt\ŸxÔxu`Ÿx˜x°ŸēxÔx°ŸxPxVPxRxudŸRxSxt`ŸSx~xV~x€xudŸ€xxt`Ÿx˜xVēxÔxVxOxSOxRxķQuķR1)(ŸRxSxķQtķR1)(ŸSx}xS}x€xķQuķR1)(Ÿ€xxķQtķR1)(ŸēxžxSžxÔxķQuķR1)(ŸxPxVPxRxudŸRxSxt`ŸSx~xV~x€xudŸ€xxt`ŸēxÔxVxOxSOxRxķQuķR1)(ŸRxSxķQtķR1)(ŸSx}xS}x€xķQuķR1)(Ÿ€xxķQtķR1)(ŸŧxžxSžxÔxķQuķR1)(ŸxQxWQxSxPSxxWxxPŧxÔxWÃxÍxu_ŸÍxŅxRŅxÔxu_ŸÃxŅxP2xPxVPxRxudŸRxSxt`ŸSx~xV~x€xudŸ€xxt`Ÿ5xRxu_ŸRxSxt[ŸSx€xu_Ÿ€xxt[Ÿ5x?xP?xIxv<ŸSx_xPuwŸ>BRBLuwŸ4BPœģPģ&‚u &‚)‚t)‚;‚P;‚H‚u H‚K‚tK‚”‚u ™‚ƒu ŧ)‚/ŸK‚ƒ/ŸŧÕVՁ&‚u\Ÿ&‚)‚tXŸK‚y‚u\Ÿy‚{‚V{‚å‚u\Ÿå‚ƒVí‚÷‚udŸ÷‚û‚Rû‚ƒudŸí‚û‚Pâ$‚V$‚&‚udŸ&‚)‚t`ŸK‚y‚V™‚›‚V›‚Æ‚udŸŨ‚á‚Vâ#‚S#‚&‚u&‚)‚tK‚y‚S™‚ą‚Są‚Æ‚uŨ‚ß‚S߂á‚u›‚ą‚S ‚Ē‚u[ŸĒ‚Ž‚RŽ‚ą‚u[Ÿ ‚Ž‚Pų$‚V$‚&‚udŸ&‚)‚t`ŸK‚y‚Vü&‚u[Ÿ&‚)‚tWŸK‚y‚u[Ÿü‚PY‚g‚P‚&‚u`Ÿ&‚)‚t\ŸK‚Y‚u`Ÿj‚y‚u`Ÿ ‚&‚udŸ&‚)‚t`ŸK‚Y‚udŸj‚y‚udŸ ‚‚Pj‚v‚P‚&‚u\Ÿ&‚)‚tXŸK‚Y‚u\Ÿ‚&‚udŸ&‚)‚t`ŸK‚Y‚udŸ‚‚PK‚V‚P)‚H‚uH‚K‚t )‚E‚SE‚K‚P{‚™‚u\Ÿ‚‹‚u[Ÿ‹‚‚R‚™‚u[Ÿ‚‚Pą‚Æ‚udŸˇ‚Á‚u[ŸÁ‚Å‚RłƂu[Ÿˇ‚Å‚PƂŨ‚u`ŸĖ‚Ö‚u[ŸÖ‚Ú‚RڂŨ‚u[ŸĖ‚Ú‚P@ƒNƒPNƒ“ƒVW…c…Pc……VˆˆVN„Q…SQ…T…u`ŸT…W…t\Ÿ„…t†SQ„T…uŖŸT…W…tŸŸ„…t†uŖŸQ„\„P„……P\„T…u\ŸT…W…tXŸ•…t†u\Ÿb„T…u`ŸT…W…t\Ÿ•…t†u`Ÿb„m„P•…ž…Pm„T…uTŸT…W…tPŸ¤…t†uTŸs„T…u`ŸT…W…t\Ÿ¤…t†u`Ÿs„~„P¤…Ž…P~„T…uPŸT…W…tLŸ´…t†uPŸ„„T…u`ŸT…W…t\Ÿ´…t†u`Ÿ„„„P´…ž…P„T…uHŸT…W…tDŸÄ…t†uHŸ•„T…u`ŸT…W…t\ŸÄ…t†u`Ÿ•„ „Pą΅P „T…uDŸT…W…t@ŸÔ…t†uDŸĻ„T…u`ŸT…W…t\ŸÔ…t†u`ŸĻ„ą„PÔ…Ū…Pą„T…uŧŸT…W…t¸Ÿä…t†uŧŸˇ„T…u`ŸT…W…t\Ÿä…t†u`Ÿˇ„„Pä…î…P„T…u¸ŸT…W…t´Ÿô…t†u¸ŸČ„T…u`ŸT…W…t\Ÿô…t†u`ŸČ„Ķ„Pô…ū…PĶ„T…u°ŸT…W…tŦŸ†t†u°ŸŲ„T…u`ŸT…W…t\Ÿ†t†u`ŸŲ„ä„P††Pä„T…uŦŸT…W…t¨Ÿ†t†uŦŸę„T…u`ŸT…W…t\Ÿ†t†u`Ÿę„õ„P††Põ„T…u´ŸT…W…t°Ÿ$†t†u´Ÿû„T…u`ŸT…W…t\Ÿ$†t†u`Ÿû„…P$†.†P…T…u@ŸT…W…tŧŸ4†t†u@Ÿ …T…u`ŸT…W…t\Ÿ4†t†u`Ÿ ……P4†>†P…T…uLŸT…W…tHŸD†t†uLŸ…T…u`ŸT…W…t\ŸD†t†u`Ÿ…(…PD†N†P(…T…uXŸT…W…tTŸT†t†uXŸ.…T…u`ŸT…W…t\ŸT†t†u`Ÿ.…9…PT†^†P9…T…udŸT…W…t`Ÿd†t†udŸ?…T…u`ŸT…W…t\Ÿd†t†u`Ÿ?…J…Pd†n†Pv†‹†u`Ÿ|†††uŖŸ††Š†RІ‹†uŖŸ|†Š†P‹† †u\Ÿ‘†›†uŖŸ›†Ÿ†RŸ† †uŖŸ‘†Ÿ†P †ĩ†uTŸĻ†°†uŖŸ°†´†R´†ĩ†uŖŸĻ†´†Pĩ†Ę†uPŸģ†Å†uŖŸÅ†É†RɆʆuŖŸģ†É†Pʆ߆uHŸĐ†Ú†uŖŸÚ†Ū†Rۆ߆uŖŸĐ†Ū†P߆ô†uDŸå†ī†uŖŸī†ķ†Rķ†ô†uŖŸå†ķ†Pô† ‡uŧŸú†‡uŖŸ‡‡R‡ ‡uŖŸú†‡P ‡‡u¸Ÿ‡‡uŖŸ‡‡R‡‡uŖŸ‡‡P‡3‡u°Ÿ$‡.‡uŖŸ.‡2‡R2‡3‡uŖŸ$‡2‡P3‡H‡uŦŸ9‡C‡uŖŸC‡G‡RG‡H‡uŖŸ9‡G‡PH‡]‡u´ŸN‡X‡u¨ŸX‡\‡R\‡]‡u¨ŸN‡\‡P]‡r‡u@Ÿc‡m‡u¨Ÿm‡q‡Rq‡r‡u¨Ÿc‡q‡Pr‡‡‡uLŸx‡‚‡u¨Ÿ‚‡†‡R†‡‡‡u¨Ÿx‡†‡P‡‡œ‡uXŸ‡—‡u¨Ÿ—‡›‡R›‡œ‡u¨Ÿ‡›‡Pœ‡ē‡udŸĸ‡Ŧ‡u¨ŸŦ‡°‡R°‡ē‡u¨Ÿĸ‡°‡P#ˆgˆuDŸgˆ•ˆW•ˆâˆuDŸâˆåˆ‘ŧŸåˆŲ‰uDŸŲ‰ė‰Wė‰ŠuDŸŠŠt@ŸŠBŠuDŸBŠYŠWYŠ‹uDŸ6ˆQˆuDåˆ÷ˆuDaˆgˆWgˆhˆthˆlˆtlˆ•ˆuLŸŲ‰ė‰uLŸBŠYŠuLŸaˆgˆuDŸgˆ•ˆWŲ‰ė‰WBŠYŠWsˆ•ˆuLŸŲ‰ė‰uLŸyˆ•ˆVŲ‰ė‰Vyˆ„ˆPŲ‰æ‰P„ˆ•ˆuHŸŠˆ•ˆudŸŠˆ•ˆP•ˆâˆuDŸâˆåˆ‘ŧŸė‰ŠuDŸŠŠt@ŸŠŠuDŸpЉŠuDŸ˙Š‹uDŸ•ˆâˆudŸâˆåˆ‘\Ÿė‰ŠudŸŠŠt`ŸŠŠudŸpЉŠudŸ˙Š‹udŸēˆâˆudŸâˆåˆ‘\Ÿė‰ŠudŸŠŠt`ŸŠŠudŸŊˆâˆu`Ÿâˆåˆ‘XŸė‰Šu`ŸŠŠt\ŸŠŠu`ŸŊˆČˆPŠŠPȈâˆuDŸâˆåˆ‘ŧŸė‰ŠuDŸŠŠt@ŸÎˆâˆudŸâˆåˆ‘\Ÿė‰ŠudŸŠŠt`ŸÎˆŪˆPۈâˆuD<Ÿâˆåˆ‘ŧ<Ÿė‰ö‰P;‰A‰WA‰B‰tB‰F‰tF‰’‰u`Ÿž‰Ų‰u`ŸŠ¤Šu`Ÿ;‰A‰uDŸA‰’‰Wž‰Ų‰WŠ¤ŠWM‰’‰u`Ÿž‰Ų‰u`ŸS‰’‰Vž‰Ų‰VS‰Z‰Pž‰Ļ‰PZ‰’‰u\ŸŠ‰Ų‰u\Ÿ`‰’‰udŸŠ‰Ų‰udŸ`‰g‰PЉļ‰Pg‰’‰uXŸš‰Ų‰uXŸm‰’‰udŸš‰Ų‰udŸm‰t‰Pš‰Æ‰Pt‰’‰uPŸÉ‰Ų‰uPŸz‰’‰udŸÉ‰Ų‰udŸz‰‰Pɉ։P‰’‰uTŸ‡‰’‰udŸ‡‰’‰PŠ$ŠuTŸŠ$ŠudŸŠ$ŠP$ŠBŠuDŸ*Š4ŠuCŸ4Š8ŠR8ŠBŠuCŸ*Š8ŠPDŠYŠuLŸJŠTŠudŸTŠXŠRXŠYŠudŸJŠXŠPYŠfŠuHŸ_ŠfŠudŸ_ŠfŠPrЉŠudŸxŠ‚Šu`Ÿ‚ІŠR†Š‰Šu`ŸxІŠPŠ¤Šu`Ÿ•ŠŸŠudŸŸŠŖŠRŖŠ¤ŠudŸ•ŠŖŠP¤ŠšŠu\ŸĒŠ´ŠudŸ´Š¸ŠR¸ŠšŠudŸĒЏŠPšŠÎŠuXŸŋŠÉŠudŸÉŠÍŠR͊ΊudŸŋŠÍŠPΊėŠuPŸÔŠâŠudŸâŠæŠRæŠėŠudŸÔŠæŠP+‹2‹0Ÿ2‹N‹WN‹W‹RW‹ˆ‹Wˆ‹œ‹Rœ‹Ô‹W‹—‹V—‹œ‹Pœ‹Ô‹V2‹N‹Vˆ‹—‹V—‹œ‹P2‹N‹uŸˆ‹™‹uŸ™‹œ‹tŒŸ2‹<‹v2‹N‹uŸg‹™‹uŸ™‹œ‹tŒŸģ‹Ô‹uŸ2‹N‹Vg‹—‹V—‹œ‹Pģ‹Ô‹V2‹N‹uŸt‹™‹uŸ™‹œ‹tŒŸ2‹N‹uŸw‹‹uŸ‹…‹R…‹™‹uŸ™‹œ‹t‹Ÿw‹…‹Pž‹ģ‹VŖ‹­‹uŸ­‹ą‹Rą‹ģ‹uŸŖ‹ą‹PË͋uŸÍ‹Ņ‹RŅ‹Ô‹uŸÃ‹Ņ‹P%ŒŸŒ“ŸâŒ“Ÿ4ą“Ÿ%Œ+ŒW+Œ,Œt,Œ0Œt0ŒŸŒuXŸâŒuXŸ4ąuXŸ4ŒŸŒ“ŸâŒ“Ÿ4`“Ÿw““Ÿ—ą“Ÿ4ŒŸŒW⌍W4`Ww“W—ąW}“u\Ÿƒ“udŸƒPOŒŸŒ“ŸâŒ“Ÿ4K“Ÿ—ą“ŸOŒŸŒV⌍V46V6KudŸ—™V™ąudŸ[ŒŸŒ“ŸâŒ“Ÿ—ą“Ÿ[ŒŸŒu⌍u—ąuž¨uWŸ¨ŦRŦąuWŸžŦPnŒŸŒV⌍VqŒŸŒuWŸâŒuWŸqŒxŒPâŒīŒPxŒŸŒu\ŸōŒu\Ÿ~ŒŸŒudŸōŒudŸ~Œ…ŒPōŒūŒP…ŒŸŒu`Ÿu`Ÿ‹ŒŸŒudŸudŸ‹Œ’ŒPP’ŒŸŒuXŸÅŒĪŒuXŸ˜ŒŸŒudŸČŒĪŒudŸ˜Œ¤ŒPȌՌP4uXŸ&uWŸ&*R*4uWŸ*P6KudŸ<FuWŸFJRJKuWŸ<JPK`u\ŸQ[uWŸ[_R_`uWŸQ_P`wu`ŸfpuWŸptRtwuWŸftPô§ŽVĒŽV=VŽKŽSĒŽåŽSS"Ž:Ÿ"ŽKŽSĒŽåŽSĒŽåŽ:ŸĒŽåŽS>ŽEŽPŽŠŽudŸŠŽĒŽt`ŸĒŽudŸt`Ÿ=udŸIާŽV厏VIŽSŽPSŽĻŽS厏SWŽĒްŸåŽ°ŸWŽĻŽS厏SgލŽW厏WgŽĻŽS厏SkŽŽW厏0ŸåŽSōŽ1ŸōŽūŽRōŽųŽr‚ŽĒŽ•Ÿ•Ÿ‚ŽĻŽSS˜ŽŠŽudŸŠŽĒŽt`ŸudŸt`Ÿ›ŽŠŽucŸŠŽĒŽt_ŸucŸt_Ÿ›ŽĒŽPP%/ucŸ/3R3=ucŸ%3PnĮ¤Ÿ¨č¤Ÿ…ĮS¨ÕSĨS¨Õ0ŸģÕ1ŸÆĪPƐɐR¨ĮüŸĶÛuۏߏPĶÖP֏“S“•w萑SꏓsŸ“•w#Ÿč‘sŸęņs)+P+–uD–—t@)–uLŸ–—tHŸ)“sŸ“•w#ŸđũPܑį‘P…’’Pz‘­‘ŸQ“d“Ÿ‘‘­‘@Ÿî‘k’S“;“vŸ“ “P!“;“v Ÿ!“*“P\}Ÿ4P4yS|~SL|æŸ<P<S„†ST„æŸP,V/DPDšV\‡æŸ#5V%u GœÄŸüÄŸ"ÄŸaœsŸrœ“Ÿr€P€œW‡œs ŸŊüÜŸÜŸÔøŒŸĘ“C”ŸŸ”˛”Ÿá“C”DŸô“C”S”C”PŸ””uT”C”dŸ”C”uT&”C”@K$Ÿ6”C”bŸ6”B”Pu”Ÿ”3Ÿ˛”Å”3ŸŒ”Ÿ”ėŸ•æ•0Ÿæ•<–S<–D–PD–˜0Ÿ˜'˜S'˜{˜0Ÿ{˜˜S˜š0ŸIšKšSbš¸š0ŸÆšöš0Ÿ•+šeŸIšŋšeŸÆšöšeŸ•C–u¸ŸC–D–t´ŸD–+šu¸ŸIšŋšu¸ŸÆšöšu¸Ÿ••pŸ•"•P&•C–u¸ŸC–D–t´ŸD–šu¸ŸIš¸šu¸ŸÆšöšu¸Ÿ.•H•V.•6•u¸#Ÿ>•B•pŸB•G•PZ˜{˜u¸ŸZ˜{˜0ŸZ˜p˜u¸#Ÿp˜u˜PN•Z˜rŸ{˜šrŸIš¸šrŸÆšöšrŸN•[•pŸ[•`•P“•䕐ŸÆšŪšŸ“•ä•u¸ŸÆšŪšu¸ŸŦ•䕐ŸŦ•ä•u¸ŸĀ•ä•u@ŸĀ•ä•u¸ŸĀ•Õu¸#ŸĮ•Ę•pŸĘ•Ī•P֕ä•u@ŸŲ•ä•u`ŸŲ•ä•PH˜Z˜p0)Ÿ^–˙–u´Ÿ'˜Z˜u´ŸŪšöšu´Ÿa–k–P'˜9˜P9˜<˜s<˜D˜pXŸa–k–R'˜D˜R'˜9˜P9˜<˜s<˜D˜pXŸ'˜D˜R~–˙–äŸŪšöšäŸ~–Ĩ–u¸ŸĨ–Ž–PŽ–˙–u¸ŸŪšöšu¸Ÿ”–˙–Ÿ”–Ĩ–u¸ŸĨ–Ž–PŽ–˙–u¸Ÿ´–˙–rŸ´–ģ–Pģ–˙–SƖ˙–ĒŸÆ–˙–Sܖ˙–uHŸÜ–˙–Sܖߖs#Ÿņ–˙–uHŸô–˙–u`Ÿô–˙–P¸™Î™uPŸž™Î™u`Ÿž™Î™P¤˜ë˜SΙę™Sŋ˜Ķ˜ĐŸŋ˜Ķ˜u\Ÿ×™ę™ˇŸ×™ę™u\ŸÕ˜å˜u\Ÿí˜™æŸí˜™u\Ÿ™Î™u\Ÿę™ šu\Ÿ™Î™u\Ÿę™ šu\Ÿ™Î™0Ÿę™ š0Ÿhš}šu\Ÿhš}š0Ÿ)™Î™Ÿę™ šŸ)™Î™u¸Ÿę™ šu¸ŸB™Î™õŸę™ô™õŸB™Î™u¸Ÿę™ô™u¸ŸV™Î™uLŸę™ô™uLŸV™Î™u¸Ÿę™ô™u¸ŸV™Y™u¸#Ÿ]™`™pŸ`™e™Pl™Î™rŸę™ô™rŸl™Î™u¸Ÿę™ô™u¸Ÿl™v™pŸv™{™P‚™Î™ĒŸę™ô™ĒŸ‚™Î™u¸Ÿę™ô™u¸Ÿ‚™Œ™pŸŒ™‘™P˜™Î™uPŸę™ô™uPŸ˜™Î™u¸Ÿę™ô™u¸Ÿ˜™›™u¸#ŸŸ™ĸ™pŸĸ™§™PŽ™Î™uLŸę™ô™uLŸą™Î™u`Ÿę™ô™u`Ÿą™¸™Pę™ņ™Pö™ šuLŸü™šu`Ÿš šR š šu`Ÿü™ šP ššuPŸššu`ŸššP—n—tŸŖš¸štŸ—n—u¸ŸŖš¸šu¸Ÿ4—n—Ÿ4—n—u¸ŸH—n—uŧŸH—n—u¸ŸH—K—u¸#ŸO—R—pŸR—W—P^—n—uŧŸa—n—u`Ÿa—n—Pģ—˜´Ÿ}šŽš´Ÿģ—˜u¸Ÿ}šŽšu¸ŸŅ—˜ŸŅ—˜u¸Ÿč—˜uDŸč—˜u¸Ÿč—ë—u¸#Ÿī—ō—pŸō—÷—Pū—˜uDŸ˜˜u`Ÿ˜˜PšŽšuDŸ…šŽšu`Ÿ…šŽšPĨš¸šuŧŸĢš¸šu`ŸĢš¸šPȚۚu@ŸÎšŪšu`ŸÎšŪšPæ•C–u¸ŸC–D–t´Ÿ˜'˜u¸Ÿ{˜˜u¸ŸIšXšu¸Ÿõ•A–VA–C–uXŸC–D–tTŸ˜'˜V{˜˜VIšXšVõ•D–Ÿ˜'˜Ÿ{˜˜ŸIšXšŸ–A–VA–C–uXŸC–D–tTŸ˜'˜V{˜˜V –C–u`ŸC–D–t\Ÿ˜'˜u`Ÿ{˜˜u`Ÿ ––P{˜‡˜P–C–u¸ŸC–D–t´Ÿ˜'˜u¸Ÿ–D–0Ÿ˜'˜0Ÿ)–C–u´ŸC–D–t°Ÿ˜'˜u´Ÿ/–C–u`ŸC–D–t\Ÿ˜'˜u`Ÿ/–<–P˜˜Pš+šu¸Ÿš+š0Ÿ+šIšu´Ÿ1š;šuŗŸ;š?šR?šIšuŗŸ1š?šPKšXšuXŸQšXšu`ŸQšXšP,uwŦu,Lu# ŸLMt# ŸMvu# Ÿvwt# Ÿ2LuwŸLMtsŸMvuwŸvwtsŸ2<P<Fs <ŸMWP9Fu#ŸXeu#Ÿ?FuwŸ^euwŸ?MP^oP‰uwŸ‰RŦuwŸP”žuwŸžĸRĸŦuwŸ”ĸP VSYˇS,S‚ˇS,Vs ŸY‚s Ÿ2XuwŸXY‘oŸY‚uwŸ2<P<Fs <ŸYgP9FsŸhusŸ?FuwŸnuuwŸ?FPnPŠ”uwŸ”˜R˜ˇuwŸŠ˜PŸŠuwŸŠ­R­ˇuwŸŸ­Pcu#Ÿr§u#Ÿ§¨t#Ÿ¨Ũu#Ÿ$kSr’S¨ŨS2ES¨ŨSEks Ÿr’s ŸKkuwŸr’uwŸKRP‚PRksŸr‚sŸXkuwŸr‚uwŸX_PrP°ēuwŸēžRžŨuwŸ°žPÅĪuwŸĪĶRĶŨuwŸÅĶP |V~­V­āu|vŸ~­vŸ­āu#Ÿ$kS~šSĢāS2ESĢāSEks Ÿ~šs ŸKkuwŸ~šuwŸKRPŠ—PRksŸ~ŠsŸXkuwŸ~ŠuwŸX_P~‡PŗŊuwŸŊÁRÁāuwŸŗÁPČŌuwŸŌÖRÖāuwŸČÖPSu ß9u PTu X\u ‚†u ŠĄu HVHŪu\ŸŪß‘TŸßãVã0u\Ÿ09V9Ou\ŸOP‘TŸP‚u\Ÿ‚†V†Šu\ŸŠĄVĄ¯u\ŸŠĄu\ŸšudŸšžRžĄudŸžP<HVHĮu\ŸßãVã0u\ŸPTu\ŸXdu\Ÿ†Šu\ŸĄ¯u\Ÿ<ĮSß0SPRSRTuX\u†ˆSQcVHĮu\Ÿ†Šu\ŸĄ¯u\ŸxĮÄŸ†ŠÄŸĄ¯ÄŸĮsŸ Į“Ÿ ŽPŽĮWĩĮs Ÿø0ÜŸPTÜŸXdÜŸ 0ŒŸĘŪu\ŸŪß‘TŸ9Ou\ŸOP‘TŸĐŪudŸŪß‘\Ÿ9OudŸOP‘\ŸĐßP9GPdyu\Ÿjtu[ŸtxRxyu[ŸjxPpu pqtqu ž‘žÖu pu #Ÿpqt#Ÿqu #Ÿž‘#ŸžÖu #Ÿ oVqœVžÛV &S&'t'+t+pupŸpqtlŸqupŸž‘hŸžÛupŸ,oVqœVĸŊV,nSnputŸpqtpŸq›S›utŸž‘lŸĸ¤S¤ĻutŸĻ¨S¨ŊutŸDnSnputŸpqtpŸq›S›utŸž‘lŸDLPLpupqtquž‘SnSnputŸpqtpŸq›S›utŸž‘lŸVpuoŸpqtkŸquoŸž‘gŸV`P`js<ŸqP]jupŸ€upŸcjS†utŸcqP†–P¨ŊutŸŽ¸uoŸ¸ŧRŧŊuoŸŽŧPÃÍuoŸÍŅRŅÛuoŸÃŅPpu pqtqu žtžÖu pu #Ÿpqt#Ÿqu #Ÿžt#ŸžÖu #Ÿ oVqœVžÛV &S&'t'+t+pupŸpqtlŸqupŸžtlŸžÛupŸ,oVqœVĸŊV,nSnputŸpqtpŸq›S›utŸžtpŸĸ¤S¤ĻutŸĻ¨S¨ŊutŸDnSnputŸpqtpŸq›S›utŸžtpŸDLPLpupqtqužtSnSnputŸpqtpŸq›S›utŸžtpŸVpuoŸpqtkŸquoŸžtkŸV`P`js<ŸqP]jupŸ€upŸcjS†utŸcqP†–P¨ŊutŸŽ¸uoŸ¸ŧRŧŊuoŸŽŧPÃÍuoŸÍŅRŅÛuoŸÃŅP.u ƒ¨u Sƒ‘S‘¨sø~Ÿƒ‘S‘¨sø~Ÿ$VDS‚udŸ‚ƒ‘\Ÿ¨ŅSÕ×S×ėudŸD€V¨ŅVÕėVUS‚udŸ‚ƒ‘\Ÿ¨ŅSX‚u_Ÿ‚ƒ‘WŸ¨Ņu_ŸXbPbls<Ÿ¨ˇP_lW¸Åu`ŸelSžÅudŸelPžÎPl€vŸ×ėudŸŨįu_ŸįëRëėu_ŸŨëPōüu_ŸüR u_ŸōP#MS?ASegS.W.Hu HItI>u >?‘?u 1u .wŸ.Hu #ŸHIt#ŸI>u #Ÿ>?‘#Ÿ?u #Ÿ1u #Ÿ]?„ŸFU„ŸYe„ŸiŌ„Ÿ1„Ÿ]cScdtdhthHuHŸHItDŸI>uHŸ>?‘@ŸFUuHŸYeuHŸiŌuHŸ1uHŸl?„ŸFU„ŸY]„Ÿae„ŸiŊ„Ÿ1„ŸlŒSŒHuLŸHItHŸI>uLŸ>?‘DŸFJuLŸJLSLUuLŸY]uLŸacSceuLŸiŊuLŸ1uLŸ *udŸ*.R.1udŸ .P¨GWGHudŸHIt`ŸI=W=>udŸ>?‘\ŸFJWi~W¨HuHItI>u>?‘FJui~uŧGWGHudŸHIt`ŸI=W=>udŸ>?‘\ŸŋHuCŸHItŋŸI>uCŸ>?‘ģŸŋÍPÍÛw<ŸIWPĘÛSXiu\ŸĐÛW^iudŸĐŪP^vPÛėuXŸwˆuXŸáėudŸ}ˆudŸáīP}–PėũuLŸ—¨uLŸōũudŸ¨udŸōPļPũuHŸˇČuHŸudŸŊČudŸPŊÖPuDŸ×čuDŸudŸŨčudŸ"PŨöP0uTŸ÷uTŸ%0udŸũudŸ%3PũP0Au`Ÿ(u`Ÿ6AudŸ(udŸ6IP6Pi~udŸoyuCŸy}R}~uCŸo}P~“u\Ÿ„ŽuCŸŽ’R’“uCŸ„’P“¨uXŸ™ŖuCŸŖ§R§¨uCŸ™§P¨ŊuLŸŽ¸uCŸ¸ŧRŧŊuCŸŽŧPŊŌuHŸÃÍuCŸÍŅRŅŌuCŸÃŅPŌįuDŸØâuCŸâæRæįuCŸØæPįüuTŸí÷uCŸ÷ûRûüuCŸíûPüu`Ÿ uPŸ RuPŸP&USUWutŸWXtpŸXƒSƒ…utŸ…†tpŸŠŒSŒĄutŸ&WuWXtX…u…†tŠĄu:USUWutŸWXtpŸXƒSƒ…utŸ…†tpŸ=WuoŸWXtkŸX…uoŸ…†tkŸ=GPGQs<ŸXgPDQVhuupŸJQSnuutŸJXPn~PŒĄutŸ’œuoŸœ R ĄuoŸ’ P§ąuoŸąĩRĩŋuoŸ§ĩP ›d›Sd›g›ug›h›th›Ī›SĪ›Đ›u››P›e›Vh›„›P„›Ũ›Vœ›Ę›æŸ!›d›s Ÿd›g›u# Ÿg›h›t# Ÿ6›d›s,Ÿd›g›u#,Ÿg›h›t#,Ÿ)u#Ÿ)*t#Ÿ*‹u#Ÿ‹Œt#ŸŒ’u#Ÿ!DPD‰SŒŽS\ŒæŸ 4S8™S™uP4sŸ8™sŸ™u#Ÿ"$P$5V8TPTĒVl—柜œPœ?œS?œCœPCœČœSœœpŸœœPœ?œsŸ?œCœpŸCœČœsŸ&œ(œP(œAœWCœKœPKœČœW`œĸœ¨ŸĩœČœ¨ŸtœĸœæŸÜœßœs Ÿ“ߜV“ÚV“ŨžV“ܜߜs ŸßœVÚVŨžVíœīœPīœuTtP4P4ÜuTܝŨ‘LŨžuT5|ŸŨđŸL|æŸōí|Ũōíđžō흝V|ÚVđžVP|”P”ŲSđõS•ŨųŸđžųŸŦŨæŸžžs Ÿ“ž[žV“^žŸV“ ŸFŸV“žžs Ÿž[žV^žŸV ŸFŸV-ž/žP/žEžuT^žtžPtžŧžuT Ÿ3ŸuTužŧžŸ Ÿ3ŸŸŒžŧžæŸEž^žōRōŧž ŸōRō3ŸFŸōRōEž[žVŧžŸV3ŸFŸVQžVžPVžZžSŧžÔžPԞŸS3Ÿ8ŸS՞ ŸųŸ3ŸFŸųŸėž ŸæŸ\Ÿ_ŸsŸ“_ŸĄŸV“¤Ÿe V“h Ž V“\Ÿ_ŸsŸ_ŸĄŸV¤Ÿe Vh Ž VmŸoŸPoŸ‹ŸuT¤ŸŧŸPŧŸ uTh { uTŊŸ Ÿh { ŸÔŸ æŸ‹Ÿ¤Ÿō D h ō D{ Ž ō D‹ŸĄŸV e V{ Ž V—ŸœŸPœŸ ŸS  P d S{ € S h ųŸ{ Ž ųŸ4 h æŸœ Ÿ sŸ“Ÿ á V“ä ĨĄV“¨ĄÎĄV“œ Ÿ sŸŸ á Vä ĨĄV¨ĄÎĄV­ ¯ P¯ Ë uTä ü Pü DĄuT¨ĄģĄuTũ DĄŸ¨ĄģĄŸĄDĄæŸË ä ō8FDĄ¨Ąō8FģĄÎĄō8FË á VDĄĨĄVģĄÎĄV× Ü PÜ ā SDĄ\ĄP\Ą¤ĄSģĄĀĄS]Ą¨ĄųŸģĄÎĄųŸtĄ¨ĄæŸßĄĸSĸĸw`Ÿ)ĸŽĸSŽĸĸĸw`Ÿīĸ÷ĸS÷ĸŖw`ŸßĄâĄs ŸâĄĸW)ĸĸĸWīĸŖWīĄņĄPņĄ˙ĄV)ĸ3ĸP3ĸŽĸVīĸŖVHĸŽĸŸīĸŖŸ_ĸŽĸæŸ˙Ą)ĸōŽHŽĸīĸōŽHŖŖōŽH˙ĄĸWŽĸĸĸWĸĸPĸ%ĸSŽĸ“ĸP“ĸīĸSŖ ŖSĒĸīĸųŸŖŖųŸÁĸīĸæŸ,ŖJ¤v,ŸM¤S¤v,Ÿ2Ŗ“ŖW2Ŗ8ŖS2Ŗ~ŖS~ŖƒŖsxŸƒŖŠŖS8ŖOŖSOŖSŖsxŸSŖ~ŖS~Ŗ‡ŖsxŸ8ŖOŖSOŖSŖsxŸhŖ~ŖS~Ŗ‡ŖsxŸEŖLŖudŸmŖtŖudŸEŖSŖPmŖ‚ŖP8ŖOŖsŸOŖSŖs|ŸSŖ~ŖsŸ~Ŗ‡Ŗs|Ÿ8ŖSŖudŸYŖcŖudŸcŖgŖRgŖ“ŖudŸ8ŖBŖPBŖLŖs<ŸYŖgŖP“ŖJ¤v,ŸM¤S¤v,Ÿ“Ŗ›Ŗ v4v,8Ÿ“ŖĻŖW—Ŗ›Ŗ v4v,8Ÿ—ŖŖŖWŖŖJ¤v ŸM¤S¤v ŸŠŖ#¤WŠŖ¯ŖSŠŖ¤S¤¤slŸ¤C¤S¯ŖÍŖSÍŖŅŖslŸŅŖ¤S¤¤slŸ¯ŖŊŖs ŸæŖķŖs ŸļŖŊŖudŸėŖķŖudŸļŖĀŖPėŖ˙ŖPŊŖĘŖsŸ¤ ¤sŸÃŖĘŖudŸ¤ ¤udŸÃŖŅŖP¤¤P¯ŖÍŖsŸÍŖŅŖs|ŸŅŖ¤sŸ¤¤s|Ÿ¯ŖŅŖudŸ×ŖáŖudŸáŖåŖRåŖ#¤udŸ¯ŖŗŖPŗŖŊŖs<Ÿ×ŖåŖP#¤J¤v ŸM¤S¤v Ÿ#¤+¤ v(v DŸ#¤K¤WM¤Ģ¤W­¤Ā¤W'¤+¤ v(v DŸ'¤3¤W3¤J¤VM¤S¤VC¤d¤Pd¤Š¤S­¤˛¤S|¤­¤æŸ,V,-t-1t1uXŸtTŸuXŸ€tTŸ€uXŸhulu‘•u™ŖuŪõuhu#Ÿlu#Ÿ‘•u#Ÿ™Ŗu#ŸŪõu#Ÿ!,V,-t-1t1uXŸtTŸuXŸ€tTŸ€uXŸ!S|S€S‘“S•—S™›SŸS&,V,-t-1t1uXŸtTŸuXŸ€tTŸ€uXŸ5™rŸĀrŸŪrŸ5]V]u\ŸtXŸ V Xu\ŸXlVlu\Ÿ€tXŸ€‘u\Ÿ‘•V•™u\ŸĀu\ŸŪõVõu\ŸŪõu\ŸäîudŸîōRōõudŸäōPQ]V]Üu\Ÿ V Xu\Ÿ•™u\ŸĢu\Ÿõu\ŸQÜSXS•—SŸSfxV]Üu\Ÿ•™u\Ÿõu\ŸÜÄŸ•™ÄŸõÄŸ¤ÜsŸĩÜ“ŸĩÃPÃÜWĘÜs Ÿ XÜŸĢÜŸ4XŒŸßu\ŸtXŸlu\Ÿ€tXŸ€u\ŸåudŸt`ŸludŸ€t`Ÿ€udŸåđP€‡PĢĀu\ŸąģuWŸģŋRŋĀuWŸąŋPđuXŸtTŸluXŸ€tTŸöudŸt`ŸludŸ€t`ŸöPlwPĀŪuXŸÆĐuWŸĐÔRÔŪuWŸÆÔP¤ĨRĨĖĨķRŸĖĨÚĨRÚĨHĻķRŸÖ¤ ĨrĖĨÚĨP¤ĨrŸĨĖĨķR#ŸĖĨÚĨrŸÚĨHĻķR#Ÿđ¤ĨRĨĖĨķRŸÚĨHĻķRŸđ¤ĨrŸĨĖĨķR#ŸÚĨHĻķR#ŸĨËĨudŸËĨĖĨt`ŸÚĨĻudŸĻĻt`Ÿ1ĻHĻudŸĨÉĨVÉĨËĨu`ŸËĨĖĨt\ŸÚĨĻVĻĻu`ŸĻĻt\Ÿ1ĻHĻVĨ)Ĩv#Ÿ)Ĩ.ĨP5ĨĖĨ°ŸÚĨϰŸ5ĨÉĨVÉĨËĨu`ŸËĨĖĨt\ŸÚĨĻVĻĻu`ŸĻĻt\Ÿ5Ĩ?ĨpŸ?ĨDĨPEĨÉĨVÉĨËĨu`ŸËĨĖĨt\ŸÚĨĻVĻĻu`ŸĻĻt\ŸEĨkĨWÚĨöĨWEĨLĨv#ŸTĨXĨpŸXĨ]ĨPdĨÉĨVÉĨËĨu`ŸËĨĖĨt\ŸÚĨĻVĻĻu`ŸĻĻt\ŸhĨpĨQpĨrĨWrĨŠĨuThĨ„Ĩv#Ÿ„Ĩ‰ĨPÚĨöĨu`ŸĨĨËĨu`ŸËĨĖĨt\ŸöĨĻu`ŸĻĻt\ŸĨĨĖĨ0ŸöĨĻ0ŸĩĨËĨudŸËĨĖĨt`ŸöĨĻudŸĻĻt`ŸģĨËĨu`ŸËĨĖĨt\ŸöĨĻu`ŸĻĻt\ŸģĨĮĨPĮĨËĨud<ŸËĨĖĨt`<ŸöĨĻPĻ1ĻudŸĻ#Ļu_Ÿ#Ļ'ĻR'Ļ1Ļu_ŸĻ'ĻPˆĻŠĻSŠĻĢĻupŸĢĻŦĻ‘hŸŦĻŲĻSŲĻÛĻupŸÛĻÜĻ‘hŸ‹ĻĢĻuoŸĢĻŦĻ‘gŸŦĻÛĻuoŸÛĻÜĻ‘gŸ‹Ļ•ĻP•ĻŸĻs<ŸŦώĻP’ĻŸĻutŸ¸ĻÅĻutŸ˜ĻŸĻSžĻÅĻupŸ˜ĻŦĻPžĻÎĻPŪĻüĻutŸäĻîĻuoŸîĻōĻRōĻüĻuoŸäĻōĻP§§uoŸ§§R§§uoŸ§§P5§|§u|§}§t}§Ĩ§u5§?§R?§|§u |§}§t}§Ĩ§u @§|§utŸ|§}§tpŸ}§Ē§utŸ]§|§utŸ|§}§tpŸ}§Š§utŸ`§|§usŸ|§}§toŸ}§Š§usŸ`§g§P}§‡§P’§œ§usŸœ§ §R §Ē§usŸ’§ §Pħ_ŠulŸ_Š`ŠthŸ`Š ĒulŸÄ§Ô§ul#ŸÔ§Ų§PŨ§éŠō)aĒ Ēō)aŨ§_ŠulŸ_Š`ŠthŸ`ŠéŠulŸĒ ĒulŸå§˙§Så§í§ul#Ÿõ§ų§pŸų§ū§P`ŠyŠulŸ¨`ЉŸyŠéЉŸĒ ljŸ¨¨pŸ¨¨P¨`ŠôŸyŠéŠôŸĒ ĒôŸ¨(¨pŸ(¨-¨P4¨`Š4ŸyŠéŠ4ŸĒ Ē4Ÿ4¨>¨pŸ>¨C¨PG¨`Šō)ayŠéŠō)aĒ Ēō)aG¨_ŠulŸ_Š`ŠthŸyŠéŠulŸĒ ĒulŸO¨i¨SO¨S¨ul#Ÿ_¨c¨pŸc¨h¨PyŠ™ŠulŸo¨`ŠÉŸ™ŠéŠÉŸĒ ĒÉŸo¨|¨pŸ|¨¨Pˆ¨`ŠTŸ™ŠéŠTŸĒ ĒTŸˆ¨’¨pŸ’¨—¨Pž¨`Š”Ÿ™ŠéŠ”ŸĒ Ē”Ÿž¨¨¨pŸ¨¨­¨P´¨`ŠÔŸ™ŠéŠÔŸĒ ĒÔŸ´¨ž¨pŸž¨Ã¨Pʨ`ŠŸ™ŠéŠŸĒ ĒŸĘ¨Ô¨pŸÔ¨Ų¨Pā¨`ŠÖŸ™ŠéŠÖŸĒ ĒÖŸā¨ę¨pŸę¨ī¨Põ¨_ŠulŸ_Š`ŠthŸ™ŠéŠulŸĒ ĒulŸŠ_ŠutŸ_Š`ŠtpŸ™ŠéŠutŸĒ ĒutŸ/Š]ŠS]Š_ŠupŸ_Š`ŠtlŸ™ŠŊŠS2Š_ŠukŸ_Š`ŠtgŸ™ŠŊŠukŸ2Š9ŠPŠŠˇŠP9Š_ŠutŸ_Š`ŠtpŸ™ŠŠŠutŸ?Š_ŠupŸ_Š`ŠtlŸ™ŠŠŠupŸ?ŠFŠP™ŠĻŠPFŠ_ŠulŸ_Š`ŠthŸFŠ`Š0ŸŋŠÔŠupŸÅŠĪŠukŸĪŠĶŠRĶŠÔŠukŸÅŠĶŠPÔŠéŠutŸÚŠäŠukŸäŠčŠRčŠéŠukŸÚŠčŠPéŠĒulŸéŠĒ0ŸNǟĒ“ŸŨĒųĒ“ŸĢMĢ“ŸNĒTĒWTĒUĒtUĒYĒtYǟĒu\ŸŨĒųĒu\ŸĢMĢu\Ÿ]ǟĒ“ŸŨĒųĒ“ŸĢ0Ģ“ŸGĢIĢ“Ÿ]ǟĒWŨĒųĒWĢ0ĢWGĢIĢW{ǟĒWŨĒųĒW~ǟĒu[ŸŨĒųĒu[Ÿ~Ē…ĒPŨĒįĒP…ĒŸĒudŸęĒųĒudŸ‹ĒŸĒu`ŸęĒųĒu`Ÿ‹Ē’ĒPęĒöĒP’ĒŸĒu\ŸĀĒĘĒu\Ÿ˜ĒŸĒudŸÃĒĘĒudŸ˜Ē¤ĒPÃĒĐĒPûĒĢu\ŸĢ Ģu[Ÿ ĢĢRĢĢu[ŸĢĢPĢ0Ģu`Ÿ!Ģ+Ģu[Ÿ+Ģ/ĢR/Ģ0Ģu[Ÿ!Ģ/ĢP0ĢGĢudŸ6Ģ@Ģu[Ÿ@ĢDĢRDĢGĢu[Ÿ6ĢDĢPSĢĢuĢ Ģ‘ ĢųĢuųĢüĢ‘üĢŦuŦ7Ŧu‡ĢĢu`ŸĢ Ģ‘XŸâĢųĢu`ŸųĢüĢ‘XŸĢĢudŸĢ Ģ‘\ŸâĢųĢudŸųĢüĢ‘\ŸĢ™ĢP™ĢĢu`<ŸĢ Ģ‘X<ŸâĢīĢP ĢâĢrŸŦ7ŦrŸ Ģ§ĢW§Ģ¨Ģt¨ĢŦĢtŦĢâĢu Ŧ7Ŧu °ĢâĢrŸŦ7ŦrŸ°ĢâĢWŦ7ŦWÎĢâĢWŅĢÛĢu_ŸÛĢßĢRßĢâĢu_ŸŅĢßĢPūĢŦu`ŸŦŦu_ŸŦŦRŦŦu_ŸŦŦPŦ5ŦudŸ$Ŧ.Ŧu_Ÿ.Ŧ2ŦR2Ŧ5Ŧu_Ÿ$Ŧ2ŦP1=p Ÿ1utžužŸtŸu.?uC\u`ûūŸ.9ūŸ=?ūŸC\ūŸ`fSfgtgkuŦkuLŸtHŸžuLŸžŸtHŸŸûuLŸ.9uLŸ=?uLŸC\uLŸoŸūŸŖæūŸ.9ūŸ=?ūŸC\ūŸoSuPŸtLŸžuPŸžŸtLŸŖæuPŸ.0S09uPŸ=?uPŸCESE\uPŸKUu\ŸUYRY\u\ŸKYPŠŸ ŸŖŅ Ÿ29 Ÿ=? ŸŠWuXŸtTŸWžuXŸžŸtTŸŖŅW29W=?W™Ÿ Ÿ§ŧ Ÿ29 Ÿ=? Ÿ™Su\ŸtXŸ›S›žu\ŸžŸtXŸ§ŧu\Ÿ24S49u\Ÿ=?SĢSu\ŸtXŸ›S›žu\ŸžŸtXŸ=?SĢŗPŗutžužŸt=?uēSu\ŸtXŸ›S›žu\ŸžŸtXŸŊuGŸtCŸžuGŸžŸtCŸŊĮPĮŅs<ŸPÄŅW -uXŸĘŅS&-u\ŸĘÔP&6PŅŪuPŸ7DuPŸ×Ūu\Ÿ=Du\Ÿ×áP=NPŪëuLŸO\uLŸäëu\ŸU\u\ŸäîPUfPëüuHŸgtuHŸņüu\Ÿmtu\Ÿņ˙Pm~Pü uTŸuTŸ u\Ÿ…u\ŸP…–P§ŧu\Ÿ­ˇuGŸˇģRģŧuGŸ­ģPŧŅuXŸÂĖuGŸĖĐRĐŅuGŸÂĐPŅæuPŸ×áuGŸáåRåæuGŸ×åPæûuLŸėöuGŸöúRúûuGŸėúPûuHŸ uGŸ RuGŸP.uTŸ uGŸ $R$.uGŸ$P%NSN u t–u –—t—!u &7u 79S9Tu .:p0)Ÿ. u t–u–—t—u&7u;Tu]ķūŸ&1ūŸ57ūŸ;TūŸ]cScdtdhth uLŸ tHŸ–uLŸ–—tHŸ—ķuLŸ&1uLŸ57uLŸ;TuLŸl—ūŸ›ŪūŸ&1ūŸ57ūŸ;TūŸlŠSŠ uPŸ tLŸ–uPŸ–—tLŸ›ŪuPŸ&(S(1uPŸ57uPŸ;=S=TuPŸCMu\ŸMQRQTu\ŸCQP‡— Ÿ›É Ÿ*1 Ÿ57 Ÿ‡ W  uXŸ tTŸ•W•–uXŸ–—tTŸ›ÉW*1W57W–— ŸŸ´ Ÿ*1 Ÿ57 Ÿ– S  u\Ÿ tXŸ“S“–u\Ÿ–—tXŸŸ´u\Ÿ*,S,1u\Ÿ57S¨ S  u\Ÿ tXŸ“S“–u\Ÿ–—tXŸ57S¨°P° u t–u–—t57uˇ S  u\Ÿ tXŸ“S“–u\Ÿ–—tXŸē uGŸ tCŸ–uGŸ–—tCŸēÄPÄÎs<ŸPÁÎW%uXŸĮÎS%u\ŸĮŅP.PÎÛuPŸ/<uPŸÔÛu\Ÿ5<u\ŸÔŪP5FPÛčuLŸGTuLŸáču\ŸMTu\ŸáëPM^PčõuHŸ_luHŸîõu\Ÿelu\ŸîøPevPõuTŸw„uTŸûu\Ÿ}„u\ŸûP}ŽPŸ´u\ŸĨ¯uGŸ¯ŗRŗ´uGŸĨŗP´ÉuXŸēÄuGŸÄČRČÉuGŸēČPÉŪuPŸĪŲuGŸŲŨRŨŪuGŸĪŨPŪķuLŸäîuGŸîōRōķuGŸäōPķuHŸųuGŸRuGŸųP&uTŸuGŸR&uGŸP1S1Qu /Tu (s$.1S1Qu /Tu 1BS/9S9Tsø~Ÿ/9S9Tsø~ŸBGuj/ūŸTūŸ1ūŸd´ūŸģÅūŸjpSpqtqutu.uLŸ./tHŸTūuLŸū˙tHŸ˙uLŸ1uLŸd´uLŸģÅuLŸy/ūŸTūŸūŸdhūŸl´ūŸģÅūŸy—S—.uPŸ./tLŸTūuPŸū˙tLŸ˙SuPŸuPŸdhuPŸl´uPŸģÁuPŸÁÃSÃÅuPŸuPŸ u\ŸRu\Ÿ P”/ ŸT˙ Ÿdh Ÿl– ŸģÁ Ÿ”-W-.uXŸ./tTŸTũWũūuXŸū˙tTŸdhWl–WģÁWŖ/ ŸT˙ Ÿdh Ÿl ŸģŊ ŸŖ+S+.u\Ÿ./tXŸTûSûūu\Ÿū˙tXŸdfSfhu\Ÿlu\ŸģŊSĩ+S+.u\Ÿ./tXŸTûSûūu\Ÿū˙tXŸĩŊPÄ+S+.u\Ÿ./tXŸTûSûūu\Ÿū˙tXŸĮ.uGŸ./tCŸTūuGŸū˙tCŸĮÕPÕãs<ŸT_PŌãW`quXŸØãSfqu\ŸØæPf~PãôuPŸuPŸéôu\Ÿ…u\Ÿé÷P…–PôuLŸ—¨uLŸúu\Ÿ¨u\ŸúPļPuHŸˇČuHŸ u\ŸŊČu\Ÿ PŊÖP'uTŸ×čuTŸ'u\ŸŨču\Ÿ/PŨöP1uLŸ",uGŸ,0R01uGŸ"0P1FuHŸ7AuGŸAEREFuGŸ7EPFduTŸLVuGŸVZRZduGŸLZPlu\Ÿr|uGŸ|€R€uGŸr€P–uXŸ‡‘uGŸ‘•R•–uGŸ‡•P–´uPŸœĒuGŸĒŽRŽ´uGŸœŽPZu Ŗ˛u Áėu ô u ĸu\ŸĸŖtXŸŖ=u\ŸZu Ŗ˛u Áėu ô u MWŖ˛Wô W0 V ĸu`ŸĸŖt\ŸŖėVđ V'=V0MWŖ˛Wô W@ V ĸu`ŸĸŖt\ŸŖėVđôV'=VCĸudŸĸŖt`ŸŖėudŸđôudŸ'=udŸCJPŖ¯Pö u`ŸüudŸ R  udŸü PJĸu\ŸĸŖtXŸ˛ėu\Ÿđôu\Ÿ'=u\ŸJŸSŸŖP˛ėSđōSQĸu\ŸĸŖtXŸ˛Áu\Ÿđôu\Ÿ'=u\Ÿ`ĸudŸĸŖt`Ÿ˛ÁudŸđôudŸ'=udŸcĄW˛ÁWđôW'=Wcds|ĸudŸĸŖt`Ÿ˛ÁudŸĸu`ŸĸŖt\Ÿ˛Áu`Ÿ†P˛žPÔŪPŪßtßãtÚÛp-:P†ĸu\ŸĸŖtXŸ†Ŗ0Ÿ 'u\Ÿ '0Ÿ<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0Ÿ?u šÄu †upŸ†‡tlŸ‡ûupŸ&up#Ÿ&+P2†upŸ†‡tlŸ‡ÄupŸČßupŸ2„S„‡P‡ÄSČĘS6†upŸ†‡tlŸ‡šupŸČßupŸE†utŸ†‡tpŸ‡šutŸČßutŸH…V‡šVČßVHIsa†utŸ†‡tpŸ‡šutŸd†uoŸ†‡tkŸ‡šuoŸdkP‡—PŦļPļˇtˇģt˛ŗpĘßutŸĐÚuoŸÚŪRŪßuoŸĐŪPk†upŸ†‡tlŸk‡0Ÿ<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0Ÿ8u Š´u upŸ€tlŸ€ëupŸ+upŸ€tlŸ€´upŸ¸ĪupŸ+}S}€P€´S¸ēS/upŸ€tlŸ€ŠupŸ¸ĪupŸ>utŸ€tpŸ€ŠutŸ¸ĪutŸA~V€ŠV¸ĪVABsZutŸ€tpŸ€ŠutŸ]uoŸ€tkŸ€ŠuoŸ]dP€‡PœĻPϧt§ĢtĸŖpēĪutŸĀĘuoŸĘÎRÎĪuoŸĀÎPdupŸ€tlŸd€0Ÿ<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0ŸØ­Ú­PÚ­`ŽSuŽ ¯S¯¯Sv¯x¯S~Ŧ‡­VČ­ŽVŽ7Žu7Ž`ŽVuŽ“ŽV“ŽâŽu¯*¯uv¯x¯u|¯‚¯VŦ‡­NŸ|¯~¯NŸŦ‡­uXŸ|¯~¯uXŸĒŦŌŦWŌŦ‡­uTŸ|¯~¯uTŸĒŦ‡­uXŸ|¯~¯uXŸĒŦ´ŦuX#Ÿ´ŦšŦPŋŦ‡­rŸ|¯~¯rŸŋŦ‡­uXŸ|¯~¯uXŸŌŦ‡­YŸ|¯~¯YŸŌŦ‡­uXŸ|¯~¯uXŸåŦ‡­uXŸ|¯~¯uXŸņŦ‡­dŸ|¯~¯dŸņŦ‡­uXŸ|¯~¯uXŸ ­­0Ÿ­a­S ­‡­V|¯~¯V*­a­rŸ*­a­uXŸ*­4­pŸ4­9­P?­a­W?­a­uXŸa­‡­0Ÿ|¯~¯0Ÿa­v­u`Ÿv­{­P{­‡­u`Ÿ|¯~¯u`Ÿk­‡­0Ÿ|¯~¯0Ÿk­‡­udŸ|¯~¯udŸŒ­—­u`ŸŒ­“­P“­—­udŸ—­Å­uXŸÅ­Č­tTŸ`ŽrŽuXŸrŽuŽtTŸ—­Č­0Ÿ`ŽuŽ0ŸĒ­Å­uTŸÅ­Č­tPŸ`ŽrŽuTŸrŽuŽtPŸ°­Å­u`ŸÅ­Č­t\Ÿ`ŽrŽu`ŸrŽuŽt\Ÿ°­ž­Pž­Å­uT<ŸÅ­Č­tP<Ÿ`ŽgŽPß­7Ž0Ÿv¯x¯0Ÿß­â­u`Ÿâ­ú­Pú­7Žu`Ÿv¯x¯u`Ÿé­7Ž0Ÿv¯x¯0Ÿé­7ŽudŸv¯x¯udŸ7Ž?Žu ?ŽBŽtBŽFŽt7Ž?ŽsNŽ`Ž1ŸNŽ`ŽuTŽ`Ž0ŸTŽ`Žu#ŸuŽ0¯0ŸuŽxŽu`ŸxސŽPŽ0¯u`ŸŽ0¯0ŸŽ0¯udŸŸŽ0¯yŸŸŽĻŽPĻŽęŽW¯0¯W­Ž0¯yŸ­ŽéŽV鎯u\Ÿ¯0¯V­ŽˇŽpŸˇŽŧŽPĖŽéŽV鎯u\ŸĖޝ0Ÿ¯0¯u\Ÿ¯0¯0Ÿ0¯A¯u`Ÿ0¯3¯udŸ3¯=¯P=¯A¯udŸA¯T¯uXŸA¯T¯0ŸT¯r¯uTŸZ¯d¯u`Ÿd¯h¯Rh¯r¯u`ŸZ¯h¯PDu •°u ēĶu ”upŸ”•tlŸ•upŸ :V (up#Ÿ04pŸ49P•°upŸ•°0Ÿ•¨up#Ÿ¨­P@”upŸ”•tlŸ°äupŸč˙upŸ@’S’•P°äSčęSD”upŸ”•tlŸ°ēupŸč˙upŸS”utŸ”•tpŸ°ēutŸč˙utŸV“V°ēVč˙VVWso”utŸ”•tpŸ°ēutŸr”uoŸ”•tkŸ°ēuoŸryP°ˇPĖÖPÖ×t×ÛtŌĶpę˙utŸđúuoŸúūRū˙uoŸđūPy”upŸ”•tlŸy•0Ÿ¯Ä¯RįmąķRŸmą}ąR}ąæąķRŸ¯¨¯Q¨¯ląuDląmąt@mąąuDą‘ąt@‘ąæąuDدmą0Ÿ‘ąæą0Ÿ¨¯Ä¯PmąuąPuą}ąu¨¯Ä¯Qmą}ąQž¯Ä¯Qž¯Ä¯Pô¯mą0Ÿ‘ąæą0Ÿô¯÷¯u`Ÿ÷¯ °P °ląu`Ÿląmąt\Ÿ‘ąæąu`Ÿ°mą0Ÿ‘ąæą0Ÿ°ląudŸląmąt`Ÿ‘ąæąudŸH°mą‡Ÿ‘ąĄą‡Ÿ¸ąæą‡ŸH°N°u@\°mą‡Ÿ‘ąĄą‡Ÿ¸ąæą‡Ÿ\°ĸ°Vĸ°ląuXŸląmątTŸ‘ąĄąuXŸ¸ąĪąuXŸĪąæąV\°f°qŸf°k°P}°ĸ°Vĸ°ląuXŸląmątTŸ‘ąĄąuXŸ¸ąĪąuXŸ}°ĸ°Vĸ°Ū°uXŸŪ°jąVjąląu\ŸląmątXŸ‘ąĄąV¸ąēąuXŸēąĪąu\Ÿ}°mą0Ÿ‘ąĄą0Ÿ¸ąĪą0ŸŠ°mąŸ‘ąĄąŸ¸ąĪąŸŠ°¯°u@Ŋ°mąŸ‘ąĄąŸ¸ąĪąŸŊ°jąVjąląu\ŸląmątXŸ‘ąĄąV¸ąĪąVŊ°Į°qŸĮ°Ė°PŪ°jąVjąląu\ŸląmątXŸ‘ąĄąVŪ°mą0Ÿ‘ąĄą0ŸēąĪąu\ŸēąĪą0ŸGąląu`Ÿląmąt\Ÿ‘ąĄąu`ŸGąląudŸląmąt`Ÿ‘ąĄąudŸGąmą0Ÿ‘ąĄą0ŸKącąW‘ąĄąWPącąu\Ÿ‘ąĄąu\ŸPąWąP‘ąžąP}ą‘ą1Ÿ}ąąSą‘ąP€ą‘ą0Ÿ€ąąsŸą‘ąpŸŖą¸ąu`ŸŖą¨ąudŸ¨ą¯ąP¯ą¸ąudŸđą˛‘ ˛ ˛p ˛˛‘`˛˛‘ đąũą‘ũą˛p˛˛t˛˛‘d˛˛‘ ˛3˛‘ 3˛:˛p:˛B˛‘`B˛L˛‘ ˛*˛‘*˛3˛p3˛4˛t4˛B˛‘dB˛L˛‘P˛r˛Rr˛†´ķRŸP˛r˛Qr˛ŋ˛uDŋ˛Æ˛rÆ˛´uD´´t@´3´uD3´4´t@4´†´uD†˛´0Ÿ4´†´0Ÿ`˛Cŗu´3´u3´4´t k´z´u`˛ų˛Vų˛Cŗu ´1´V1´3´u 3´4´tk´z´u ĸ˛´0Ÿ4´†´0Ÿĸ˛Ĩ˛u`ŸĨ˛ē˛P瞴u`Ÿ´´t\Ÿ4´†´u`ŸŽ˛´0Ÿ4´†´0ŸŽ˛´udŸ´´t`Ÿ4´†´udŸö˛´‡Ÿ4´V´‡Ÿk´‚´‡Ÿö˛ü˛u@ ŗ´‡Ÿ4´V´‡Ÿk´‚´‡Ÿ ŗPŗVPŗ´uXŸ´´tTŸ4´V´uXŸk´‚´V ŗŗqŸŗŗP+ŗPŗVPŗ´uXŸ´´tTŸ4´V´uXŸ+ŗPŗVPŗŒŗuXŸŒŗ´V´´u\Ÿ´´tXŸ4´A´VA´C´uXŸC´V´u\Ÿ+ŗ´0Ÿ4´V´0Ÿm´‚´uXŸm´‚´0ŸWŗ´Ÿ4´V´ŸWŗ]ŗu@kŗ´Ÿ4´V´Ÿkŗ´V´´u\Ÿ´´tXŸ4´V´VkŗuŗqŸuŗzŗPŒŗ´V´´u\Ÿ´´tXŸ4´A´VŒŗ´0Ÿ4´A´0ŸC´V´u\ŸC´V´0Ÿõŗ´u`Ÿ´´t\Ÿ4´A´u`Ÿõŗ´udŸ´´t`Ÿ4´A´udŸõŗ´0Ÿ4´A´0Ÿųŗ´W4´A´Wūŗ´u\Ÿ4´A´u\Ÿūŗ´P4´>´P´4´1Ÿ´0´S0´4´P#´4´0Ÿ#´0´sŸ0´4´pŸV´k´u`ŸV´[´udŸ[´b´Pb´k´udŸđ´ĩRĩmˇķRŸđ´ĩQĩ^ĩuD^ĩdĩrdĩįļuDįļčļt@čļˇuDˇˇt@ˇmˇuD$ĩčļ1Ÿˇmˇ1ŸĩŌĩučļˇuˇˇt ?ˇNˇuĩĩPĩŌĩu čļˇu ˇˇt?ˇNˇu @ĩčļ0Ÿˇmˇ0Ÿ@ĩCĩu`ŸCĩXĩPXĩįļu`Ÿįļčļt\Ÿˇmˇu`ŸLĩčļ0Ÿˇmˇ0ŸLĩįļudŸįļčļt`ŸˇmˇudŸĩŌĩu ?ˇNˇu ĩ—ĩP—ĩŲĩW?ˇVˇWžĩŌĩu ?ˇNˇu žĩęĩSęĩįļuTŸįļčļtPŸˇˇuTŸ(ˇ?ˇuTŸ?ˇAˇSAˇmˇuTŸēĩęĩSęĩįļuTŸįļčļtPŸˇˇuTŸ(ˇ?ˇuTŸVˇmˇuTŸēĩęĩSęĩ#ļuTŸ#ļAļSAļ•ļuXŸ•ļäļSäļįļu\ŸįļčļtXŸˇˇS(ˇ*ˇuTŸ*ˇ?ˇuXŸVˇXˇuXŸXˇmˇu\Ÿēĩčļ0Ÿˇˇ0Ÿ(ˇ?ˇ0ŸVˇmˇ0ŸAˇVˇuTŸAˇVˇ0ŸöĩčļŸˇˇŸ(ˇ?ˇŸVˇmˇŸöĩũĩPũĩBļW(ˇ?ˇWļčļŸˇˇŸ(ˇ?ˇŸVˇmˇŸļAļSAļįļuXŸįļčļtTŸˇˇuXŸ(ˇ*ˇS*ˇ?ˇuXŸVˇmˇuXŸļļpŸļļP#ļAļSAļįļuXŸįļčļtTŸˇˇuXŸVˇmˇuXŸ#ļAļSAļ•ļuXŸ•ļäļSäļįļu\ŸįļčļtXŸˇˇSVˇXˇuXŸXˇmˇu\Ÿ#ļčļ0Ÿˇˇ0ŸVˇmˇ0Ÿ*ˇ?ˇuXŸ*ˇ?ˇ0ŸkļrļPrļŋļWVˇmˇWyļäļSäļįļu\ŸįļčļtXŸˇˇSVˇXˇSXˇmˇu\Ÿ•ļäļSäļįļu\ŸįļčļtXŸˇˇS•ļčļ0Ÿˇˇ0ŸÂļįļu`Ÿįļčļt\Ÿˇˇu`ŸÂļįļudŸįļčļt`ŸˇˇudŸÂļčļ0Ÿˇˇ0ŸÆļŪļWˇˇWËļŪļu\Ÿˇˇu\ŸËļŌļPˇˇPčļˇ1ŸčļˇVˇˇPķļˇ0ŸķļˇvŸˇˇpŸˇ(ˇu`ŸˇˇudŸˇˇPˇ(ˇudŸĐˇęˇR꡴ēķRŸĐˇ¸Q¸ēuDē ēt@ ēēQē0ēuD0ē1ēt@1ē´ēuD¸ ē1Ÿ1ē´ē1Ÿęˇ¸P ēēPēēu꡸R ēēR0¸ ē0Ÿ1ē´ē0Ÿ0¸3¸u`Ÿ3¸H¸PH¸ēu`Ÿē ēt\Ÿ1ē´ēu`Ÿ<¸ ē0Ÿ1ē´ē0Ÿ<¸ēudŸē ēt`Ÿ1ē´ēudŸ}¸¸P¸ šS†ēˆēSēŸēS§¸ēuPŸē ētLŸ1ēAēuPŸXēēuPŸ§¸č¸uPŸč¸šWšDšuTŸDšcšScšļšuXŸļšēWēēu\Ÿē ētXŸ1ēAēWXēZēuXŸZēoēu\ŸoēqēuTŸqē†ēuXŸ†ēˆēuPŸˆēēuTŸ§¸ ē0Ÿ1ēAē0ŸXēē0Ÿˇ¸ ē‡Ÿ1ēAē‡ŸXēē‡Ÿˇ¸ šS†ēˆēSɸ ē‡Ÿ1ēAē‡ŸXēē‡ŸÉ¸šWšēuTŸē ētPŸ1ēAēuTŸXē†ēuTŸ†ēēWɏ͏pŸĶ¸Ø¸P踚WšēuTŸē ētPŸ1ēAēuTŸXē†ēuTŸč¸šWšDšuTŸDšcšScšļšuXŸļšēWēēu\Ÿē ētXŸ1ēAēWXēZēuXŸZēoēu\ŸoēqēuTŸqē†ēuXŸč¸ ē0Ÿ1ēAē0ŸXē†ē0ŸˆēēuTŸˆēē0Ÿš ēŸ1ēAēŸXē†ēŸššPšošWoē†ēW%š ēŸ1ēAēŸXē†ēŸ%šcšScšēuXŸē ētTŸ1ēAēuXŸXēoēuXŸoēqēSqē†ēuXŸ%š/špŸ/š4šPDšcšScšēuXŸē ētTŸ1ēAēuXŸXēoēuXŸDšcšScšļšuXŸļšēWēēu\Ÿē ētXŸ1ēAēWXēZēuXŸZēoēu\ŸDš ē0Ÿ1ēAē0ŸXēoē0Ÿqē†ēuXŸqē†ē0Ÿ‰šŒšPŒšāšSXēZēSļšēWēēu\Ÿē ētXŸ1ēAēWļš ē0Ÿ1ēAē0ŸZēoēu\ŸZēoē0Ÿãšēu`Ÿē ēt\Ÿ1ēAēu`ŸãšēudŸē ēt`Ÿ1ēAēudŸãš ē0Ÿ1ēAē0Ÿįš˙šS1ēAēSėš˙šu\Ÿ1ēAēu\ŸėšķšP1ē>ēPē1ē1Ÿē.ēV.ē1ēP ē1ē0Ÿ ē.ēvŸ.ē1ēpŸCēXēu`ŸCēHēudŸHēOēPOēXēudŸĀēÖē‘ ÖēŨēpŨēåē‘`åēīē‘ ĀēÍē‘ÍēÖēpÖē×ēt×ēåē‘dåēīē‘đēģ‘ ģ ģp ģģ‘`ģģ‘ đēúē‘úēģpģģtģģ‘dģģ‘<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0Ÿ<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0ŸIģYģ[eģ~ģ[@ģBģõ %õ %ŸOģYģ1ŸOģYģSRģYģ0ŸRģYģsŸyģ›ģu`Ÿ›ģÉģVÉģūžu`Ÿūžŋt\ŸŋRĀu`Ÿ…ģŋĒŸ(ŋRĀĒŸ…ģ›ģV›ģœģtœģ ģt ģūžu´Ÿūžŋt°Ÿŋŋu´Ÿ(ŋRĀu´Ÿ…ģģpŸģ”ģP§ģūžu´Ÿūžŋt°Ÿŋŋu´Ÿ?ŋRĀu´Ÿ§ģöģu´Ÿöģ#ŧW#ŧQŧu¸ŸQŧdŧWdŧ’ŧuŧŸ’ŧ˛ŧW˛ŧáŧu@ŸáŧŊWŊ0ŊuDŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋW?ŋAŋu´ŸAŋXŋu¸ŸXŋoŋuŧŸoŋ†ŋu@Ÿ†ŋ ŋuDŸ ŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿ§ģŋ0Ÿ?ŋRĀ0Ÿ*ŋ?ŋu´Ÿ*ŋ?ŋ0Ÿeģ›ģu`Ÿ›ģÉģVÉģūžu`Ÿūžŋt\ŸŋRĀu`ŸrģūžudŸūžŋt`ŸŋRĀudŸÉģŋ֟?ŋRĀ֟ÉģĐģPĐģŧV?ŋVŋV×ģŋ֟?ŋRĀ֟×ģ#ŧW#ŧūžu¸Ÿūžŋt´Ÿŋŋu¸Ÿ?ŋVŋWVŋRĀu¸Ÿ×ģáģpŸáģæģPöģ#ŧW#ŧūžu¸Ÿūžŋt´Ÿŋŋu¸ŸVŋRĀu¸Ÿöģ#ŧW#ŧQŧu¸ŸQŧdŧWdŧ’ŧuŧŸ’ŧ˛ŧW˛ŧáŧu@ŸáŧŊWŊ0ŊuDŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWVŋXŋu¸ŸXŋoŋuŧŸoŋ†ŋu@Ÿ†ŋ ŋuDŸ ŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿöģŋ0ŸVŋRĀ0ŸAŋVŋu¸ŸAŋVŋ0Ÿ%ŧŋō$ßVŋRĀō$ß%ŧ,ŧP,ŧ´ŧVVŋ„ŋV3ŧdŧWdŧūžuŧŸūžŋt¸ŸŋŋuŧŸVŋmŋWmŋRĀuŧŸ3ŧūžu ūžŋtœŋŋu VŋRĀu 3ŧ<ŧpŸ<ŧAŧPQŧdŧWdŧūžuŧŸūžŋt¸ŸŋŋuŧŸmŋRĀuŧŸQŧdŧWdŧ’ŧuŧŸ’ŧ˛ŧW˛ŧáŧu@ŸáŧŊWŊ0ŊuDŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWmŋoŋuŧŸoŋ†ŋu@Ÿ†ŋ ŋuDŸ ŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\ŸQŧŋ0ŸmŋRĀ0ŸXŋmŋuŧŸXŋmŋ0ŸaŧŋĮŸmŋRĀĮŸaŧ´ŧVmŋ„ŋVsŧŋĮŸmŋRĀĮŸsŧ˛ŧW˛ŧūžu@ŸūžŋtŧŸŋŋu@Ÿmŋ„ŋW„ŋRĀu@Ÿsŧ}ŧpŸ}ŧ‚ŧP’ŧ˛ŧW˛ŧūžu@ŸūžŋtŧŸŋŋu@Ÿ„ŋRĀu@Ÿ’ŧ˛ŧW˛ŧáŧu@ŸáŧŊWŊ0ŊuDŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋW„ŋ†ŋu@Ÿ†ŋ ŋuDŸ ŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿ’ŧŋ0Ÿ„ŋRĀ0Ÿoŋ„ŋu@Ÿoŋ„ŋ0Ÿ´ŧŋØŸ„ŋRĀØŸ´ŧģŧPģŧŊV„ŋžŋVÂŧŋØŸ„ŋRĀØŸÂŧŊWŊūžuDŸūžŋt@ŸŋŋuDŸ„ŋžŋWžŋRĀuDŸÂŧĖŧpŸĖŧŅŧPáŧŊWŊūžuDŸūžŋt@ŸŋŋuDŸžŋRĀuDŸáŧŊWŊ0ŊuDŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWžŋ ŋuDŸ ŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿáŧŋ0ŸžŋRĀ0Ÿ†ŋžŋuDŸ†ŋžŋ0ŸŊŋ៞ŋRĀáŸŊ ŊP ŊŸŊVžŋÚŋVŊŋ៞ŋRĀáŸŊCŊWCŊūžuHŸūžŋtDŸŋŋuHŸžŋŧŋWŧŋRĀuHŸŊŊpŸŊ ŊP0ŊCŊWCŊūžuHŸūžŋtDŸŋŋuHŸŧŋRĀuHŸ0ŊCŊWCŊpŊuHŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWŧŋžŋuHŸžŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿ0Ŋŋ0ŸŧŋRĀ0Ÿ ŋŧŋuHŸ ŋŧŋ0Ÿ@ŊŋōęŪŧŋRĀōęŪ@ŊŸŊVŧŋÚŋVRŊŊWŊūžuLŸūžŋtHŸŋŋuLŸŧŋÚŋWÚŋRĀuLŸRŊūžu˜ūžŋt”ŋŋu˜ŧŋRĀu˜RŊ[ŊpŸ[Ŋ`ŊPpŊŊWŊūžuLŸūžŋtHŸŋŋuLŸÚŋRĀuLŸpŊŊWŊĖŊuLŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWÚŋÜŋuLŸÜŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\ŸpŊŋ0ŸÚŋRĀ0ŸžŋÚŋuLŸžŋÚŋ0ŸŸŊŋáŸÚŋRĀ៟ŊĻŊPĻŊ;žVÚŋĀV­ŊŋáŸÚŋRĀ៭ŊßŊWßŊūžuPŸūžŋtLŸŋŋuPŸÚŋøŋWøŋRĀuPŸ­ŊˇŊpŸˇŊŧŊPĖŊßŊWßŊūžuPŸūžŋtLŸŋŋuPŸøŋRĀuPŸĖŊßŊWßŊ žuPŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWøŋúŋuPŸúŋĀuTŸĀ6ĀuXŸ6ĀRĀu\ŸĖŊŋ0ŸøŋRĀ0ŸÜŋøŋuPŸÜŋøŋ0ŸÜŊŋōúŪøŋRĀōúŪÜŊ;žVøŋĀVîŊ9žW9žūžuTŸūžŋtPŸŋŋuTŸøŋĀWĀRĀuTŸîŊūžuūžŋtŒŋŋuøŋRĀuîŊ÷ŊpŸ÷ŊüŊP ž9žW9žūžuTŸūžŋtPŸŋŋuTŸĀRĀuTŸ ž9žW9žhžuTŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋWĀĀuTŸĀ6ĀuXŸ6ĀRĀu\Ÿ žŋ0ŸĀRĀ0ŸúŋĀuTŸúŋĀ0Ÿ;žŋáŸĀRĀáŸ;žBžPBžŌžVĀRĀVIžŋáŸĀRĀáŸIž{žW{žūžuXŸūžŋtTŸŋŋuXŸĀ4ĀW4ĀRĀuXŸIžSžpŸSžXžRhž{žW{žūžuXŸūžŋtTŸŋŋuXŸ4ĀRĀuXŸhž{žW{ž¨žuXŸ¨žũžWũžūžu\ŸūžŋtXŸŋŋW4Ā6ĀuXŸ6ĀRĀu\Ÿhžŋ0Ÿ4ĀRĀ0ŸĀ4ĀuXŸĀ4Ā0Ÿxžŋō ß4ĀRĀō ßxžŌžV4ĀRĀVŠžũžWũžūžu\ŸūžŋtXŸŋŋW4ĀRĀWŠžūžuˆūžŋt„ŋŋuˆ4ĀRĀuˆŠž“žpŸ“ž˜žP¨žũžWũžūžu\ŸūžŋtXŸŋŋW¨žŋ0ŸÕžūžu`Ÿūžŋt\Ÿŋŋu`ŸÕžūžudŸūžŋt`ŸŋŋudŸÕžŋ0ŸŨžüžVŋŋVâžūžu\ŸūžŋtXŸŋŋu\ŸâžéžPŋŋPŋ(ŋu`ŸŋŋudŸŋŋPŋ(ŋudŸ<V<Cu •°VēĶu ”u`Ÿ”•t\Ÿ•u`Ÿ#<V<Cu •°VēĶu #9W•ĄWĄ­u`#Ÿ%9V•°0Ÿ•ĄWĄ­u`#ŸĄ°1ŸĄ°WĄ¨w?”u`Ÿ”•t\Ÿ°äu`Ÿč˙u`Ÿ?‘S‘•P°äSčęSC”u`Ÿ”•t\Ÿ°ēu`Ÿč˙u`ŸR”udŸ”•t`Ÿ°ēudŸč˙udŸU’V°ēVč˙VUVsn”udŸ”•t`Ÿ°ēudŸq”u_Ÿ”•t[Ÿ°ēu_ŸqxP°ˇPĖÖPÖ×t×ÛtŌĶpę˙udŸđúu_ŸúūRū˙u_ŸđūPx”u`Ÿ”•t\Ÿx•0Ÿ~ˆĀ1Ÿ~ˆĀSĀˆĀ0ŸĀˆĀsŸˇĀŅÁ0ŸņÁ1Â0ŸˇĀēĀu`ŸēĀŅĀPŅĀŅÁu`ŸņÁ1Âu`ŸÅĀŅÁ0ŸņÁ1Â0ŸÅĀŅÁudŸņÁ1ÂudŸÁŅÁŸÂ1ŸÁÁPÁhÁWÂ1ÂW ÁŅÁŸÂ1Ÿ ÁŅÁVÂ1ÂV Á*ÁpŸ*Á/ÁP?ÁŅÁV?ÁŅÁ0ŸkÁŅÁu`ŸkÁŅÁudŸkÁŅÁ0ŸoÁ‡ÁWÂÁŅÁWtÁ‡Áu\ŸÂÁŅÁu\ŸtÁ{ÁPÂÁÎÁP‡ÁÂÁuTŸÁÂÁu`ŸÁ”ÁP˛ÁŋÁP”Á˛ÁuXŸšÁ¨Áu`Ÿ¨ÁŦÁRŦÁ˛Áu`ŸšÁŦÁPĶÁņÁuXŸŲÁãÁu`ŸãÁįÁRįÁņÁu`ŸŲÁįÁPķÁÂu`ŸÂÂRÂÂu`ŸķÁøÁudŸøÁ˙ÁP˙ÁÂudŸÂÂuTŸ ÂÂu`ŸÂÂRÂÂu`Ÿ ÂÂP^ÂhÂ1Ÿ^ÂhÂSaÂhÂ0ŸaÂhÂsŸxÂ{Âu`Ÿ{“ÂP“œÃu`ŸœÃŸÃt\ŸŸÃîÃu`Ÿ‚œÃudŸœÃŸÃt`ŸŸÃîÃudŸžÂŠÃŸĀÃîßžÂÅÂPÅ ÃVĀÃ×ÃVĖŠÃŸĀÃîÃŸĖ ÃW ÜÃuXŸœÃŸÃtTŸŸÃŠÃuXŸĀÃ×ÃW×ÃîÃuXŸĖÂÖÂpŸÖÂÛÂRë ÃW ÜÃuXŸœÃŸÃtTŸŸÃŠÃuXŸ×ÃîÃuXŸë ÃW Ã:ÃuXŸ:ÛÃW›ÃœÃu\ŸœÃŸÃtXŸŸÃŠÃW×ÃŲÃuXŸŲÃîÃu\ŸëŠÃ0Ÿ×ÃîÃ0ŸÂÃ×ÃuXŸÂÃ×Ã0Ÿ ÊÃ+Ÿ×ÃîÃ+Ÿ ÃÃPÃXÃV×ÃîÃVÊÃ+Ÿ×ÃîÃ+ŸÛÃW›ÃœÃu\ŸœÃŸÃtXŸŸÃŠÃW×ÃîÃWÃ%ÃpŸ%Ã*ÃQ:ÛÃW›ÃœÃu\ŸœÃŸÃtXŸŸÃŠÃW:ÊÃ0ŸsÜÃu`ŸœÃŸÃt\ŸŸÃŠÃu`ŸsÜÃudŸœÃŸÃt`ŸŸÃŠÃudŸsÊÃ0Ÿ{ÚÃVŸÃŠÃV€ÃœÃu\ŸœÃŸÃtXŸŸÃŠÃu\Ÿ€Ã‡ÃPŸÃĻÃPĢÃĀÃu`ŸĢðÃudŸ°ÃˇÃPˇÃĀÃudŸÄÄ1ŸÄÄSÄÄ0ŸÄÄsŸ(Ä+Äu`Ÿ+ÄCÄPCÄLÅu`ŸLÅOÅt\ŸOŞÅu`Ÿ2ÄLÅudŸLÅOÅt`ŸOŞÅudŸUÄYÅŸpŞÅŸUÄ\ÄP\ĤÄVpŇÅVcÄYÅŸpŞÅŸcÄĸÄWĸÄLÅuXŸLÅOÅtTŸOÅYÅuXŸpŇÅW‡ÅžÅuXŸcÄmÄpŸmÄrÄR‚ÄĸÄWĸÄLÅuXŸLÅOÅtTŸOÅYÅuXŸ‡ÅžÅuXŸ‚ÄĸÄWĸÄŅÄuXŸŅÄKÅWKÅLÅu\ŸLÅOÅtXŸOÅYÅW‡Å‰ÅuXŸ‰ÅžÅu\Ÿ‚ÄYÅ0Ÿ‡ÅžÅ0ŸrŇÅuXŸrŇÅ0Ÿ¤ÄYÅ2Ÿ‡ÅžÅ2Ÿ¤ÄĢÄPĢÄÅV‡ÅžÅV˛ÄYÅ2Ÿ‡ÅžÅ2Ÿ˛ÄKÅWKÅLÅu\ŸLÅOÅtXŸOÅYÅW‡ÅžÅW˛ÄŧÄpŸŧÄÁÄQŅÄKÅWKÅLÅu\ŸLÅOÅtXŸOÅYÅWŅÄYÅ0Ÿ#ÅLÅu`ŸLÅOÅt\ŸOÅYÅu`Ÿ#ÅLÅudŸLÅOÅt`ŸOÅYÅudŸ#ÅYÅ0Ÿ+ÅJÅVOÅYÅV0ÅLÅu\ŸLÅOÅtXŸOÅYÅu\Ÿ0Å7ÅPOÅVÅP[ÅpÅu`Ÿ[Å`ÅudŸ`ÅgÅPgÅpÅudŸyōf“RōfyōY“RōY1yōf“ ōfDyōYDyōfDUōYUyōfUyōfy“1Ÿyu“P“0Ÿu#Ÿ“pŸ †HŸ RHŸ %uđ|Ÿ%(P(Íuđ|ŸÍÖPÖ×t×ÛtÛƒuđ|Ÿƒ†‘č|Ÿ Ruđ|Ÿ Ļu¤}ŸĻŽPŽču¤}ŸčP7u¤}Ÿ7=uā~Ÿ=DPDiuā~ŸiŽPŽƒuā~Ÿƒ†‘Ø~Ÿ ėuā~Ÿėđu¤}Ÿôøuā~Ÿø1u¤}Ÿ1euā~Ÿ|'uā~Ÿ'Ru¤}Ÿ–—t—›tDEtEIt%uđ|Ÿ%(P(Íuđ|ŸÍÖPÖ×t×ÛtÛƒuđ|Ÿƒ†‘č|Ÿ Ruđ|ŸEOVOƒuø|Ÿƒ†‘đ|Ÿ ėuø|Ÿđøuø|ŸøVuø|Ÿ1'uø|Ÿ'RVøuđ|Ÿ“†HŸ ėHŸđøHŸ1'HŸ,RHŸ“uü|Ÿ]W]uü|Ÿu¸~ŸšWšƒu¸~Ÿƒ†‘°~Ÿ ėu¸~Ÿôøuü|Ÿ1Iuü|Ÿ|~uü|Ÿ~ŠWŠ'u¸~Ÿ,RWüu }Ÿ]w$Ÿ]u }ŸuÜ~Ÿšw$ŸšƒuÜ~Ÿƒ†‘Ô~Ÿ ėuÜ~Ÿôøu }Ÿ1Iu }Ÿ|~u }Ÿ~Šw$ŸŠ'uÜ~Ÿ,Rw$Ÿ u }ŠŽuÜ~u¤}Ÿ(P(1u¤}Ÿ†8Ÿ“ ė8Ÿ“đø8Ÿ“1'8Ÿ“OVOƒuø|Ÿƒ†‘đ|Ÿ ėuø|Ÿđøuø|Ÿ1'uø|Ÿ$uv<" ˆŸŸ uv<"ĖŸ†8Ÿ ė8Ÿđø8Ÿ1'8Ÿ$ uv<" „Ÿ uv<"Č2ƒuƒ†‘  ėuđøu1eu|Āu'u2OVOƒuø|Ÿƒ†‘đ|Ÿ ėuø|Ÿđøuø|Ÿ1'uø|Ÿ7†HŸ ėHŸôøHŸ1eHŸ|'HŸ7ĸuŦ~ŸĸĨPĨŋuŦ~ŸŋÆPƃuŦ~Ÿƒ†‘¤~Ÿ ėuŦ~ŸôøuŦ~Ÿ1euŦ~Ÿ|'uŦ~Ÿ7=uā~Ÿ=DPDiuā~ŸiŽPŽƒuā~Ÿƒ†‘Ø~Ÿ ėuā~Ÿôøuā~Ÿ1euā~Ÿ|'uā~Ÿ–—t—›t„ĸuŦ~ŸĸĨPĨŋuŦ~ŸŋÆPƃuŦ~Ÿƒ†‘¤~Ÿ ėuŦ~ŸôøuŦ~Ÿ1euŦ~Ÿ|'uŦ~ŸēÉu´~ŸÉĀVĀƒu´~Ÿƒ†‘Ŧ~Ÿ ėu´~Ÿ1:V:Iu´~Ÿ|ĄVĄ'u´~Ÿ1IuŦ~Ÿ†HŸ ėHŸ~'HŸu¸~ŸšWšƒu¸~Ÿƒ†‘°~Ÿ ėu¸~Ÿ~ŠWŠ'u¸~Ÿ}šw$ŸšƒuÜ~Ÿƒ†‘Ô~Ÿ ėuÜ~Ÿ~Šw$ŸŠ'uÜ~ŸŠŽuÜ~IOuā~ŸOaPaeuā~Ÿ†8Ÿ“ ė8Ÿ“Ą'8Ÿ“ĀVĀƒu´~Ÿƒ†‘Ŧ~Ÿ ėu´~ŸĄ'u´~ŸŸ uv<"ĖŸ†8Ÿ ė8ŸĄ'8ŸŸ uv<"Č­ƒuƒ†‘ ėuĄĀu'u­ĀVĀƒu´~Ÿƒ†‘Ŧ~Ÿ ėu´~ŸĄ'u´~ŸÜ†0Ÿ ė0ŸŠí0Ÿ'0ŸÜâuč|Ÿâ˙P˙ƒuč|Ÿƒ†‘ā|Ÿ ėuč|ŸŠíuč|Ÿ'uč|Ÿđ†0Ÿ ė0ŸŠí0Ÿ'0Ÿđƒuė|Ÿƒ†‘ä|Ÿ ėuė|ŸŠíuė|Ÿ'uė|Ÿ%†VŸ ėVŸŠŋVŸ#'VŸ%1uÔ|B†VŸ ėVŸŠŋVŸ#'VŸBmVmƒuä|Ÿƒ†‘Ü|Ÿ °V°Āuä|ŸĀėVŠŋV#'VBLqŸLQPimVmƒuä|Ÿƒ†‘Ü|Ÿ °V°Āuä|ŸĀėVi†0Ÿ ė0ŸŠŋuä|ŸŠŋ0ŸÅƒuč|Ÿƒ†‘ā|Ÿ ėuč|ŸÅƒuė|Ÿƒ†‘ä|Ÿ ėuė|ŸÅ†0Ÿ ė0ŸÉåWāėWÎåuä|Ÿāėuä|ŸÎŲPāæPåƒuā|Ÿƒ†‘Ø|Ÿ āuā|Ÿîƒuč|Ÿƒ†‘ā|Ÿ āuč|ŸîųP ĒPųƒuÜ|Ÿƒ†‘Ô|Ÿ°āuÜ|Ÿƒuč|Ÿƒ†‘ā|Ÿ°āuč|Ÿ PĐÚP ƒuŦ~Ÿƒ†‘¤~Ÿ°ĐuŦ~Ÿ1ƒu¸~Ÿƒ†‘°~Ÿ°Đu¸~Ÿ;ņuÜ~Ÿņƒu }Ÿƒ†‘˜}Ÿ°Āu }ŸĀĐuÜ~Ÿ>ƒuč|Ÿƒ†‘ā|Ÿ°Đuč|Ÿ>IPĀĘPI˙u¸~Ÿ˙ƒuü|Ÿƒ†‘ô|Ÿ°Āu¸~ŸbƒuŦ~Ÿƒ†‘¤~Ÿ°ĀuŦ~Ÿwƒu´~Ÿƒ†‘Ŧ~Ÿ°Āu´~Ÿ’ƒuŦ~Ÿƒ†‘¤~Ÿ°ĀuŦ~Ÿ¨Žuā~ŸŽŋPŋ^uā~Ÿ^du¤}ŸduPuƒu¤}Ÿƒ†‘œ}Ÿ°Āuā~ŸÉƒuđ|Ÿƒ†‘č|Ÿ°Āuđ|Ÿįƒuü|Ÿƒ†‘ô|Ÿ°Āuü|Ÿņƒu }Ÿƒ†‘˜}Ÿ°Āu }ŸôƒuŦ~Ÿƒ†‘¤~Ÿ°ĀuŦ~Ÿô˙P°ēP˙ƒuü|Ÿƒ†‘ô|Ÿƒuđ|Ÿƒ†‘č|ŸNƒuđ|Ÿƒ†‘č|Ÿ3ƒuø|Ÿƒ†‘đ|Ÿ^du¤}ŸduPuƒu¤}Ÿƒ†‘œ}Ÿŋčuč|ŸčėRėíuč|ŸŋĮuė|ŸĮÎPÎíuė|ŸĪíuā|ŸÛčuč|ŸčėRėíuč|ŸÛėPíuÜ|Ÿöuč|ŸRuč|ŸöP(Åōâ ō(Åōâ ōøōLÅōâøō Pō /ōpÅōâøō/PōpÅōâøō/Pōp‘ō‘Åōâøō/@ō@Pō‘Åōâøō/@ōÅâ1ŸÅßußâPÎâ0ŸÎßu#ŸßâpŸ HŸP HŸŸuđ|ŸŸĸPĸSuđ|ŸS\P\]t]ata uđ|Ÿ  tė|ŸP uđ|Ÿ u¤}Ÿ (P(bu¤}ŸbPˇu¤}ŸˇŊuā~ŸŊÄPÄéuā~ŸéP uā~Ÿ  tÜ~ŸPœuā~Ÿœ u¤}Ÿ ¨uā~Ÿ¨áu¤}ŸáRuā~ŸiŌuā~ŸŲ u¤}ŸŽtŽ’tøųtųũt‚Ÿuđ|ŸŸĸPĸSuđ|ŸS\P\]t]ata uđ|Ÿ  tė|ŸP uđ|ŸšĪVĪ uø|Ÿ  tô|ŸPœuø|Ÿ ¨uø|Ÿ¨ĀVáŲuø|ŸŲ V¨Āuđ|Ÿ  HŸPœHŸ ¨HŸáŨHŸâ HŸ }uü|Ÿ}ŨWŨ”uü|Ÿ”?W? u¸~Ÿ  t´~ŸPœu¸~Ÿ ¨u¸~ŸáRu¸~Ÿiqu¸~ŸquWuwuü|ŸwW–u¸~Ÿ´Ōuü|ŸŲŨWâ Wv}u }Ÿ}Ũw$ŸŨ”u }Ÿ”?w$Ÿ? uÜ~Ÿ  tØ~ŸPœuÜ~Ÿ ¨uÜ~ŸáRuÜ~ŸiquÜ~Ÿquw$Ÿuwu }Ÿww$Ÿ–uÜ~Ÿ´Ōu }ŸŲŨw$Ÿâ w$Ÿ‡u } uÜ~ĀÆu¤}ŸÆØPØáu¤}Ÿ— AŸ“PœAŸ“ ¨AŸ“áŲAŸ“—ĪVĪ uø|Ÿ  tô|ŸPœuø|Ÿ ¨uø|ŸáŲuø|Ÿ—š upt" ˆŸš uv<" ˆŸ upt"ĖŸ! uv<"ĖŸ— AŸPœAŸ ¨AŸáŲAŸ—š upt" „š  uv<" „ upt"Č! uv<"ȲˇuĐ|iŌuĐ|˛ĪVĪ uø|Ÿ  tô|ŸPœuø|Ÿ ¨uø|ŸáŲuø|Ÿˇ HŸPœHŸ ¨HŸáRHŸiŌHŸˇ"uŦ~Ÿ"%P%EuŦ~ŸELPL uŦ~Ÿ  t¨~ŸPœuŦ~Ÿ ¨uŦ~ŸáRuŦ~ŸiŌuŦ~ŸˇŊuā~ŸŊÄPÄéuā~ŸéP uā~Ÿ  tÜ~ŸPœuā~Ÿ ¨uā~ŸáRuā~ŸiŌuā~ŸŽtŽ’t"uŦ~Ÿ"%P%EuŦ~ŸELPL uŦ~Ÿ  t¨~ŸPœuŦ~Ÿ ¨uŦ~ŸáRuŦ~ŸiŌuŦ~Ÿ:Iu´~ŸIFVF u´~Ÿ  t°~ŸPœu´~Ÿ ¨u´~ŸáRu´~Ÿiqu´~Ÿq–V´ÎV´ÎuŦ~Ÿ” HŸPœHŸ ¨HŸáRHŸiuHŸw–HŸ”?W? u¸~Ÿ  t´~ŸPœu¸~Ÿ ¨u¸~ŸáRu¸~Ÿiqu¸~ŸquWwW–u¸~Ÿũ?w$Ÿ? uÜ~Ÿ  tØ~ŸPœuÜ~Ÿ ¨uÜ~ŸáRuÜ~ŸiquÜ~Ÿquw$Ÿww$Ÿ–uÜ~Ÿ uÜ~–œuā~ŸœŽPŽ´uā~Ÿ AŸ“PœAŸ“ ¨AŸ“áRAŸ“iqAŸ“FVF u´~Ÿ  t°~ŸPœu´~Ÿ ¨u´~ŸáRu´~Ÿiqu´~Ÿ upt"ĖŸ! uv<"ĖŸ AŸPœAŸ ¨AŸáRAŸiqAŸ upt"Č! uv<"Č3 uČ|  tÄ|PœuČ| ¨uČ|áøuČ|iquČ|3FVF u´~Ÿ  t°~ŸPœu´~Ÿ ¨u´~ŸáRu´~Ÿiqu´~Ÿb 0ŸPœ0Ÿ ¨0Ÿá%0Ÿbhuč|Ÿh…P… uč|Ÿ  tä|ŸPœuč|Ÿ ¨uč|Ÿá%uč|Ÿv 0ŸPœ0Ÿ ¨0Ÿá%0Ÿv uė|Ÿ  tč|ŸPœuė|Ÿ ¨uė|Ÿá%uė|ŸĢ VŸPœVŸ ¤VŸá÷VŸĢˇuĐ|Č VŸPœVŸ ¤VŸá÷VŸČķVķ uä|Ÿ  tā|ŸP`V`puä|ŸpœV ¤Vá÷VČŌrŸŌ×PīķVķ uä|Ÿ  tā|ŸP`V`puä|ŸpœVī 0ŸPœ0Ÿá÷uä|Ÿá÷0ŸK uč|Ÿ  tä|ŸPœuč|ŸK uė|Ÿ  tč|ŸPœuė|ŸK 0ŸPœ0ŸOkWœWTkuä|Ÿœuä|ŸT_P–Pk uā|Ÿ  tÜ|ŸPuā|Ÿt uč|Ÿ  tä|ŸPuč|ŸtPPZP uÜ|Ÿ  tØ|Ÿ`uÜ|Ÿˆ uč|Ÿ  tä|Ÿ`uč|Ÿˆ“P€ŠP“ uŦ~Ÿ  t¨~Ÿ`€uŦ~Ÿˇ u¸~Ÿ  t´~Ÿ`€u¸~ŸÁwuÜ~Ÿw u }Ÿ  tœ}Ÿ`pu }Ÿp€uÜ~ŸÄ uč|Ÿ  tä|Ÿ`€uč|ŸÄĪPpzPĪ…u¸~Ÿ… uü|Ÿ  tø|Ÿ`pu¸~Ÿč uŦ~Ÿ  t¨~Ÿ`puŦ~Ÿũ u´~Ÿ  t°~Ÿ`pu´~Ÿ uŦ~Ÿ  t¨~Ÿ`puŦ~Ÿ.4uā~Ÿ4EPEäuā~Ÿäęu¤}ŸęûPû u¤}Ÿ  t }Ÿ`puā~ŸO uđ|Ÿ  tė|Ÿ`puđ|Ÿm uü|Ÿ  tø|Ÿ`puü|Ÿw u }Ÿ  tœ}Ÿ`pu }Ÿz uŦ~Ÿ  t¨~Ÿ`puŦ~Ÿz…P`jP… uü|Ÿ  tø|Ÿž uđ|Ÿ  tė|Ÿš uø|Ÿ  tô|ŸÎ uđ|Ÿ  tė|Ÿäęu¤}ŸęûPû u¤}Ÿ  t }Ÿ÷ uč|Ÿ $R$%uč|Ÿ÷˙uė|Ÿ˙P%uė|Ÿ%uā|Ÿ uč|Ÿ $R$%uč|Ÿ$P%@uÜ|Ÿ.;uč|Ÿ;?R?@uč|Ÿ.?P!P6TPT™SœžSlœæŸ"P7MPM”SčęSQŽYŸčųYŸeŽæŸŽáwŸ”ËV”šS”ēSēŋstŸŋßSšŖSŖ§stŸ§ēSēÃstŸšŖsŸŖ§s|Ÿ§ēsŸēÃs|Ÿš§udŸ­ˇudŸˇžRžËudŸš§P­žPËáwŸËĶ w w<ŸËāVĪĶ w w<ŸĪÛV˙"S˙VV"vtŸvŸ"v|Ÿ ucŸR"ucŸ P"* w w<Ÿ&* w w<Ÿ&2S.P.NuT“P“ķuT7u-uÅÉuÍĶu?bSbftf‚sŸ‚ŒSgjpu "ŸjyP{ˆR{ˆP‚ˆQ¨xŸÅÉxŸÍāxŸŋrŸāŸāîPîûS8ŨŸÉͨŸāķ¨ŸOÅĒŸrÅČŸr€P€SÅ†Ÿ›P›ÅSÆ ÆrŸ ÆÆPÆÆtÆÆ‘hÆ$Æ‘#Ÿ=ÆŽÆ‘ŽÆąÆW௞Æ‘PÆŽÆ‘#TŸmÆÆ0ŸƆÆV†ÆœÆvŸœÆŽÆVpÆŽÆ‘#TŸƒÆŽÆSƒÆ›ÆRƒÆ‰ÆrŸ‰ÆÆPÆ”Æt”ƛƑh:UP“R“`dP“R“LU1Ÿ`m1ŸLUP`kPkmr!s žSžĸ‘ĸS‘SJ‘JLSLc‘&žSžĸ‘ĸS‘SJ‘JLSLc‘&GPG‡V‡ WĸˇPˇÍVÍßPßčVč˙P˙VP(V(?P?HVH_P_hVhPˆVˆŸPŸ¨V¨ŋPŋČVČĶPĶQVQ^P^pWpVŊWŊVPAVAcW8KæŸ8KSĸÍ7ŸĸÍSÍčéŸÍčSčėŸčS(õŸ(S(HŸ(HSHhøŸHhShˆīŸhˆSˆ¨ōŸˆ¨S¨Č㟨ČSČĶp˙ŸĶQv˙ŸQ^p˙Ÿ^pw˙ŸŊv˙Ÿp˙ŸAv˙Ÿp‘`ŸŊĀ‘`ŸĀÄRÄב`Ÿ‘`Ÿ4‘`ŸpSŊ×SS‘4‘p‘`ŸŊĀ‘`ŸĀÄRÄב`Ÿp‘[ŸŊÍ‘[ŸÍŅRŅב[Ÿ#PĘŅP#p‘PŊĘ‘P)p‘`ŸŊĀ‘`ŸĀÄRÄĘ‘`Ÿ)4PŊÄPčëPëķpķ‘\×S4‘`Ÿ%/‘[Ÿ/3R34‘[Ÿ%3P4A‘P:A‘[Ÿ:APKĸūŸ¸ÍūŸ4ŊūŸôūŸJYūŸKžSžĸ‘¸ÍS4ŊSôSJLSLY‘`šžŸQŊžŸžŸJYžŸ`šSQŊSSJLSLY‘‡šÁŸ‡šS}ŊŨŸJYŨŸ}ŊSJLSLY‘’Ŋ‘`ŸĸŊ‘`ŸĨŗ‘[ŸŗˇRˇŊ‘[ŸĨˇPLY‘`ŸRY‘[ŸRYPĀÆÉÆ‘ÉÆÍÆP ĻSĻĒ‘Ē!S!#‘#%S%R‘RTSTk‘&ĻSĻĒ‘Ē!S!#‘#%S%R‘RTSTk‘&/P/V¨WĒVVVcPcuWuƒVƒ‰Q‰ŒVŒĘWĘVPIVIkW@SæŸ@SSĒÕ7ŸĒÕSÕđéŸÕđSđėŸđS(õŸ(S(HŸ(HSHhøŸHhShˆīŸhˆSˆ¨ōŸˆ¨S¨Č㟨ČSČVvH$H&ŸVcpH$H&ŸcuwH$H&ŸĘvH$H&ŸpH$H&ŸIvH$H&Ÿ u‘`ŸĘÍ‘`ŸÍŅRŅä‘`Ÿ#‘`Ÿ'<‘`Ÿ uSĘäS!S!#‘'<‘u‘`ŸĘÍ‘`ŸÍŅRŅä‘`Ÿu‘[ŸĘÚ‘[ŸÚŪRŪä‘[Ÿ(P×ŪP(u‘PĘבP.u‘`ŸĘÍ‘`ŸÍŅRŅב`Ÿ.9PĘŅPđķPķûpû‘\äS'<‘`Ÿ-7‘[Ÿ7;R;<‘[Ÿ-;P<I‘PBI‘[ŸBIPSĒūŸĀÕūŸ9ĘūŸüūŸRaūŸSĻSĻĒ‘ĀÕS9ĘSüSRTSTa‘hĸžŸVĘžŸžŸRažŸhĸSVĘSSRTSTa‘ĸÁŸĸSŠĘŨŸRaŨŸŠĘSRTSTa‘ŸĘ‘`Ÿ¯Ę‘`Ÿ˛Ā‘[ŸĀÄRÄĘ‘[Ÿ˛ÄPTa‘`ŸZa‘[ŸZaPĐÆŲÆ‘ŲÆŨÆP-9P9GWI’W”ūW ESEHu HItIS”āSāųu -ESEHu HItIS”āSāųu IS”āSāųu y”ÁŸySĨāSāųu ēŪudŸĘŪudŸÍ×ucŸ×ÛRÛŪucŸÍÛPæđucŸđôRôūucŸæôP0S9KS0‘oŸ9D‘oŸDHRHK‘oŸ$P9HP Į|Įs ŸĮ¤Įs Ÿ§ĮÍĮs Ÿ ĮÍĮ0Ÿ$Į@ĮVēĮÍĮV)Į@ĮuwŸēĮÍĮuwŸ)Į4ĮPēĮĮĮP@Į|ĮsŸĮ¤ĮsŸ§ĮēĮsŸ@ĮēĮ0ŸGĮ_ĮV§ĮēĮVLĮ_ĮuwŸ§ĮēĮuwŸLĮSĮP§ĮˇĮP_Į|ĮsŸĮ¤ĮsŸeĮ~ĮuwŸ~ĮĮtsŸĮĻĮuwŸĻĮ§ĮtsŸeĮnĮPnĮxĮs<ŸĮ‡ĮPlĮ|ĮSˆĮ¤ĮSqĮxĮuwŸĮ”ĮuwŸqĮĮPĮŸĮPĪĮÔĮs ŸÔĮÛĮPÛĮČs ŸÜĮāĮsŸāĮčĮPčĮČsŸéĮČsŸōĮüĮuwŸüĮČRČČuwŸōĮČPČČSČČuwŸČČRČČuwŸČČPXČ\Čp ŸXČ\ČS“\ČzČS“zČ}ČsŸ“}ȁČS“ÉÉS“bȁČVÉ'ÉV–Č™ČpŸ™ČĄČu#Ÿ™ČĄČu# u#4Ÿ™ČĨČPČĄČu# u#4ŸČĨČPŠČˇČu# Ÿ¯ČˇČu#u# 4Ÿ¯ČģČPŗČˇČu#u# 4ŸŗČģČPŋČŲČu#Ÿ ÉÉu#ŸŋČÉ0ŸÉČáČS ÉÉSÎČáČugŸ ÉÉugŸÎČÕČP ÉÉPáČøČu#ŸøČųČ‘#ŸųČÉu#ŸÉ Ét#ŸęČøČugŸøČųČ‘_ŸųČÉugŸÉ ÉtcŸęČÉP'É5Éu#Ÿ-É5Éu# u#4Ÿ-É9ÉP1É5Éu# u#4Ÿ1É9ÉP=ÉKÉu# ŸCÉKÉu#u# 4ŸCÉOÉPGÉKÉu#u# 4ŸGÉOÉPSÉ[Éu#Ÿ[É^ÉpŸ^ÉcÉPdɃÉu#ŸpÉzÉugŸzÉ~ÉR~ɈÉugŸpÉ~ÉPČÉņËvԟôËjĖvԟmĖÍÍvԟÍÉėÉW“ėÉīÉwŸ“īÉôÉW“ôÉĘW“ĘĘwŸ“ĘĘW“ŅÉôÉSöÉĘSŅÉėÉSĘņËvȟôËjĖvȟmĖ|ĖvȟšĖœĖvȟÍ Ívȟ ÍDÍvȟpÍrÍvȟŠÍˇÍvȟ&Ę<ĘS“<Ę?ĘsŸ“?ĘCĘS“CĘ_ĘS“_ĘbĘs|Ÿ“,Ę8ĘPEĘ[ĘP,Ę8ĘPžĘņËvüŸôËjĖvüŸmĖ|ĖvüŸšĖœĖvüŸÍ ÍvüŸ ÍDÍvüŸŠÍˇÍvüŸžĘ|Ė0ŸšĖœĖ0ŸÍ Í0Ÿ ÍDÍ0ŸŠÍˇÍ0ŸŽĘņËvøŸôËjĖvøŸmĖ|ĖvøŸšĖœĖvøŸÍ ÍvøŸ ÍBÍvøŸŠÍˇÍvøŸŽĘ|Ė0ŸšĖœĖ0ŸÍ Í0Ÿ ÍBÍ0ŸŠÍˇÍ0Ÿ¸ĘįĘSmĖzĖSŠÍĸÍSŋĘĮĘPËĘįĘSmĖzĖSĐĘįĘudŸmĖzĖudŸĐĘÛĘPmĖtĖPŒÍĸÍS‘Í›ÍudŸ›ÍŸÍRŸÍ¤ÍudŸ‘ÍŸÍPįĘņËvĖŸôËjĖvĖŸzĖ|ĖvĖŸšĖœĖvĖŸÍ ÍvĖŸ ÍBÍvĖŸ¤ÍˇÍvĖŸËËS-ËņËvėŸôËOĖvėŸ]ĖjĖvėŸzĖ|ĖvėŸ ÍBÍvėŸ¤ÍˇÍvėŸ-ËMËS“MËÎËS“$Í)ÍS“-ËOĖōÛV]ĖmĖōÛVzĖ|ĖōÛV ÍBÍōÛV¤ÍˇÍōÛV-ËUËvđŸ$ÍBÍvđŸJËUËōÛVUËņËvėŸôËOĖvėŸ]ĖjĖvėŸzĖ|ĖvėŸ Í$ÍvėŸ¤ÍˇÍvėŸUË]Ë vôvė4ŸUËaËPYË]Ë vôvė4ŸYËaËP)ÍBÍvėŸ)Í5Í vôvė4Ÿ)Í9ÍR1Í5Í vôvė4Ÿ1Í9ÍReËņËvāŸôËOĖvāŸ]ĖjĖvāŸzĖ|Ėv⟠Í$ÍvāŸ¤ÍˇÍvāŸhËpË včvā4ŸhËtËPlËpË včvā4ŸlËtËPxËņËvԟôËOĖvԟ]ĖjĖvԟzĖ|Ėvԟ Í$Ívԟ¤ÍˇÍvԟ{ËƒË vÜvÔ4Ÿ{ˇËPËƒË vÜvÔ4ŸˇËP‹ËņËvȟôËOĖvȟ]ĖjĖvȟzĖ|Ėvȟ Í$Ívȟ¤ÍˇÍvȟŽË–Ë vĐvČ4ŸŽËšËP’Ë–Ë vĐvČ4Ÿ’ËšËPžËņËvŸôËOĖvŸ]ĖjĖvŸzĖ|ĖvŸ Í$ÍvŸ¤ÍˇÍvŸŠË¸ËPÎËĐËPĐËđËSôË ĖP ĖOĖS]ĖiĖSzĖ|ĖS¤ÍŠÍSĖOĖYŸ¤ÍˇÍYŸ$ĖOĖæŸâËņËvŸ]ĖjĖvŸåËķËudŸķËôËt`Ÿ]ĖlĖudŸlĖmĖt`ŸåËôËP]ĖdĖP|˚ĖvŸ‚ĖŒĖucŸŒĖĖRĖšĖucŸ‚ːĖPĢĖķĖvāŸŽĖļĖ včvā4ŸŽĖēĖP˛ĖļĖ včvā4Ÿ˛ĖēĖPžĖķĖvԟÁĖÉĖ vÜvÔ4ŸÁĖÍĖPÅĖÉĖ vÜvÔ4ŸÅĖÍĖPŅĖķĖvȟÔĖÜĖ vĐvČ4ŸÔĖāĖPØĖÜĖ vĐvČ4ŸØĖāĖPDÍJÍvøŸJÍTÍPTÍXÍvøŸXÍpÍvĖŸr͊ÍvüŸr͊Í0ŸÎ,ÎV,Î2ÎsŸ2Î?ÎS?ÎdÎPdΊÎSžÎÃÎSeÎŦÎlŸžÎŅÎlŸ|ÎŦÎæŸ]Ī`ĪWgĐ|Đ0Ÿ]Ī`ĪsŸgĐ|ĐsŸ¨ĪŽĪs8ŸŽĪĩĪPĩĪĐs8Ÿ ĐgĐs8Ÿ|Đ´Đs8ŸŌĐäĐs8ŸŊĪŋĪPŋĪĐW Đ!ĐP!ĐgĐW|Đ~ĐWŌĐ×ĐW%ĐgШŸŌĐäШŸ9ĐgĐæŸÃĪĐs؟ØĪĐsäŸ`ĪĐs Ÿ ĐgĐs Ÿ|Đ´Đs ŸŌĐäĐs Ÿ{ĪĐsŸ ĐgĐsŸ|Đ´ĐsŸŌĐäĐsŸ~Đ´ĐsŸĐ‰Đ s s4ŸĐĐP…ЉРs s4Ÿ…ЍĐP‘Đ´Đs Ÿ”ĐœĐ ss 4Ÿ”Đ ĐP˜ĐœĐ ss 4Ÿ˜Đ ĐP¤ĐŠĐsŸŠĐ°ĐP°Đ´ĐsŸ´ĐŌĐsŸēĐÄĐucŸÄĐČĐRČĐŌĐucŸēĐČĐPVŅYŅWlŌ|Ō0ŸVŅYŅsŸlŌ|ŌsŸ~ҁŅWZŌlŌ0Ÿ~ҁŅs ŸZŌlŌs ŸœŅŸŅsŸŸŅĻŅPĻŅ÷ŅsŸûŅZŌsŸ|ŌŽŌsŸĐŌāŌsŸŽŅ°ŅP°ŅøŅVûŅŌPŌZŌV|Ō~ŌVĐŌÕŌVŌZŌ¨ŸĐŌāŌ¨Ÿ,ŌZŌæŸ´Ņ÷Ņs<ŸÉŅ÷Ņsȟ~ԁŌs ŸŌŠŌPŠŌŽŌs ŸŽŌ“ŌsŸ“ŌšŌPšŌžŌsŸžŌŗŌsŸ¤ŌŽŌucŸŽŌ˛ŌR˛ŌŗŌucŸ¤Ō˛ŌPŗŌĐŌS¸ŌÂŌucŸÂŌÆŌRÆŌĐŌucŸ¸ŌÆŌP‘FWHhW3@SHbS@VHbV'p|Ÿ'P3>PHUPUWv4Ÿ35R5>p|ŸHUp|ŸUWv8Ÿ3@WHbW3@1ŸHb1Ÿ5>r4ŸH\r4Ÿ”Ÿq4ŸŸŠ‘\4Ÿ q4ŸYhq4ŸŠíSíøvCSОS˛Á0ŸÁÅsu"ŸÅĶQ×øUQ(‘\(C0Ÿ|Pø1ŸChP„Cō2mWhō2møV CVYhV”ŠV”Š0ŸŠøVCVŠļUļø‘C‘ŠĢsq"ŸĢēQ´íSíøvCS´øWCW´ÁP(:P´ø1ŸC1Ÿ¸Ču4Ÿ(Cu4ŸÅĶQQ(‘\ÅĶvvÅøW(WÅø1Ÿ(1ŸĘ×u4Ÿ(u4Ÿ×øV×ß vp4Ÿ×ãPÛįVÛß vp4ŸÛãP‘BWDĪWîfW,<VDZV,V,<‘DZ‘:s|ŸDMs|ŸMO ‘#8Ÿ:SDMSMO ‘#4Ÿ,:SDMSMO ‘#4Ÿ,/s|Ÿ/1P1:s|ŸDMs|ŸMO ‘#8Ÿ,<WDZW,<1ŸDZ1Ÿ1:p4ŸDTp4Ÿ‡r4ŸŖ‘\4Ÿųûr4ŸQfr4ŸŖîUû>UŖ¯U¯¸0Ÿ¸ŋuq"ŸŋĘQĪîWûQ ‘X >0ŸrƒQîû1Ÿ>[Q[f vp2&1$Ÿz>ō“uOfō“uƒîVų>VQfV‡ŖV‡Ŗ0ŸŖîVû>VŖî‘û>‘ŖĨur"ŸĨąR¯îUû>U¯ĪWû>W¯Ę‘Xû‘X >‘X¯î1Ÿû>1Ÿ¯¸q4Ÿ 1q4Ÿ1>‘\4ŸŋĘQûQ ‘XŋÁRÁĘvû vŋĪWû Wŋî1Ÿû 1ŸÁĘr4Ÿûr4Ÿ ‘\4ŸĪîVĪ× vp4ŸĪÛPĶßVĶ× vp4ŸĶÛPĶ*Ķ‘XĶgĶ‘gĶqĶrqĶwĶ‘ĶgĶ‘ŸgĶqĶRqĶ—Ķ‘ŸĶSĶs ŸSĶXĶ‘# ŸX͆Ķs Ÿ†Ķ—Ķ‘# Ÿ Ķ3Ķs Ÿ Ķ3Ķ‘Ÿ Ķ-ĶP6ĶSĶsŸSĶXĶ‘#Ÿw͆ĶsŸ†Ķ—Ķ‘#ŸEĶXĶ‘lŸw͊Ķ‘lŸŠĶ‘ĶR‘Ķ—Ķ‘lŸEĶSĶsŸSĶXĶ‘#Ÿw͆ĶsŸ†Ķ—Ķ‘#ŸGĶSĶsŸGĶSĶ‘lŸGĶPĶPPĶSĶs‘FWHhW3@SHbS@VHbV'p|Ÿ'P3>PHUPUWv4Ÿ35R5>p|ŸHUp|ŸUWv8Ÿ3@WHbW3@1ŸHb1Ÿ5>r4ŸH\r4Ÿ”Ÿq4ŸŸŠ‘\4Ÿ q4ŸYhq4ŸŠíSíøvCSОS˛Á0ŸÁÅsu"ŸÅĶQ×øUQ(‘\(C0Ÿ|Pø1ŸChP„Cō×WhōאøV CVYhV”ŠV”Š0ŸŠøVCVŠļUļø‘C‘ŠĢsq"ŸĢēQ´íSíøvCS´øWCW´ÁP(:P´ø1ŸC1Ÿ¸Ču4Ÿ(Cu4ŸÅĶQQ(‘\ÅĶvvÅøW(WÅø1Ÿ(1ŸĘ×u4Ÿ(u4Ÿ×øV×ß vp4Ÿ×ãPÛįVÛß vp4ŸÛãP ĶąĶ‘ĪĶčĶPčĶ/ÔsŸßÔōÔPōÔÕSQÕdÕsŸūÕÖsŸÕĶčĶPčĶ/ÔsŸQÕdÕsŸūÕÖsŸÕĶ×Ô0ŸÕ"Ö0ŸÕĶ×ÔŸÕ"ÖŸéĶ×Ô ˙ŸÕ"Ö ˙ŸéĶ/ÔSQÕdÕSūÕÖSéĶ×ÔŸÕ"ÖŸéĶ×ÔŸÕ"ÖŸ!ÔMÔu\ŸMÔQÔPQÔRÔtRÔVÔtVÔ×Ôu\ŸÕQÕu\Ÿ‚Õ¸Õu\ŸĪÕúÕu\ŸūÕ"Öu\Ÿ!ÔIÔVIÔ×ÔuXŸÕQÕuXŸ‚Õ¸ÕuXŸĪÕŅÕVŅÕúÕuXŸūÕÖVÖ"ÖuXŸ!Ô,ÔP,Ô×ÔWÕQÕW‚Õ¸ÕWĪÕúÕWūÕ"ÖW4ÔMÔu\ŸMÔQÔPQÔRÔtRÔVÔtVÔ×Ôu\ŸÕQÕu\Ÿ‚ÕŦÕu\ŸĪÕúÕu\ŸÖ"Öu\Ÿ4ÔIÔVIÔ×ÔuXŸÕQÕuXŸ‚ÕŦÕuXŸĪÕŅÕVŅÕúÕuXŸÖ"ÖuXŸ4ÔhÔShÔlÔwĪÕ×ÕS×ÕÛÕtáÕúÕSÖÖSãÕúÕsŸéÕķÕudŸķÕ÷ÕR÷ÕúÕudŸéÕ÷ÕPÖÖs Ÿ ÖÖudŸÖÖRÖÖudŸ ÖÖPkÔ×ÔwŸÕQÕwŸ‚ÕŦÕwŸÖ"ÖwŸkÔ×ÔWÕQÕW‚ÕŦÕWÖ"ÖWyÔ×ÔSÕQÕS‚Õ„ÕS„Õ™ÕudŸyÔ×ÔWÕQÕW‚Õ™ÕWˆÔ×ÔSÕQÕS‹Ô×Ôu`ŸÕQÕu`Ÿ‹Ô–ÔPÕÕP„Õ™ÕudŸŠÕ”Õu`Ÿ”Õ˜ÕR˜Õ™Õu`ŸŠÕ˜ÕP™ÕŦÕwŸ™ÕŦÕ0Ÿ–Ô×ÔWÕÕW%ÕQÕW–Ô×Ôu#ĖŸÕÕu#ĖŸ%ÕQÕu#ĖŸĸÔŊÔW1ÕQÕWĸÔŊÔP1ÕAÕPAÕBÕu#ĖBÕHÕpxŸĸÔ×Ôu`ŸÕÕu`Ÿ%ÕQÕu`ŸĸÔŊÔpŸ1ÕAÕpŸAÕBÕ u#Ė#ŸBÕHÕPŽÔŊÔpŸŽÔŊÔu`ŸŽÔˇÔQŊÔ×Ôu\ŸÕÕu\Ÿ%Õ1Õu\ŸÃÔ×ÔudŸÕÕudŸ%Õ1ÕudŸÃÔĘÔP%Õ.ÕPĘÔ×ÔuXŸÕÕuXŸĐÔ×ÔudŸÕÕudŸĐÔ×ÔPÕÕPdՂÕuXŸjÕtÕuVŸtÕxÕRxՂÕuVŸjÕxÕP¸ÕĪÕu\ŸžÕČÕuVŸČÕĖÕRĖÕĪÕuVŸžÕĖÕP0ÖIÖ‘VÖjÖ‘jÖqÖqqÖwÖ‘7ÖjÖ‘ŸjÖqÖQqÖwÖ‘Ÿ7ÖRÖrŸRÖVÖ‘#ŸVÖfÖrŸfÖwÖ‘#Ÿ?ÖRÖrŸ?ÖRÖ‘Ÿ?ÖLÖP‘Ö¨ÖQŦÖēÖQēÖĮÖ‘Ö¨ÖRŦÖļÖRļÖģÖ‘ģÖÁÖrxŸ‘ÖēÖ‘lŸēÖÁÖQÁÖĮÖ‘lŸ‘Ö¨ÖrŸŦÖļÖrŸļÖģÖ‘#ŸģÖÁÖR™Ö¨ÖrŸ™Ö¨Ö‘lŸ™ÖĸÖP×%×S+×G×S×%×V+×G×V×%×S+×G×S ×%×R+×6×R6×;×v;×A×rxŸ×%בlŸ+×:בlŸ:×A×QA×GבlŸ×%×rŸ+×6×rŸ6×;×v#Ÿ;×A×R×%×rŸ×%בlŸ××Pe×h×sŸh×y×Py×ÄŲsŸÄŲÅŲvŧ~ŸÅŲĮŲu@HŸĮŲČŲt¸€ŸČŲ§ÜsŸz×ÄŲSÄŲÅŲv´~ŸÅŲĮŲu@ ŸĮŲČŲt¸ˆŸČŲ§ÜSz×}×s Ÿ}ח×P—×›×s›×ÄŲs ŸÄŲÅŲvĀ~ŸÅŲĮŲu@DŸĮŲČŲt¸|ŸČŲ§Üs Ÿ‡×ÄŲSÄŲÅŲv´~ŸÅŲĮŲu@ ŸĮŲČŲt¸ˆŸČŲ§ÜS‡×ÄŲsŸÄŲÅŲvČ~ŸÅŲĮŲu@<ŸĮŲČŲt¸tŸČŲ§ÜsŸŸ×Ŗ×PŖ×ĮŲu@ĮŲČŲtŧČŲOÛu@OÛmÛs ŸmۙÛu@™Û9Üs Ÿ9ܧÜu@Ģ׹×Pą×Ķ×VČŲĶŲPĶŲ-ÚVMÛOÛVmÛoÛVčŲ-Ú¨ŸmۀÛ¨ŸüŲ-ÚæŸÃ×ÄŲsŸÄŲÅŲvô~ŸÅŲĮŲu@# ŸĮŲČŲt¸HŸ-ÚMÛsŸ€Û§ÜsŸĶ×Ų×PŲ×sØVíÚķÚPķÚMÛViÜkÜVmÜoÜVÛMÛ8 Ÿm܀Ü8 ŸÛMÛæŸaØkØPkØĮŲuŧĮŲČŲt¸-ÚíÚuŧ€Û™Ûuŧ™Û&ÜsˆŸ9ÜiÜuŧ€Ü§ÜuŧsØyØPyØØV‰Ú“ÚP“ÚíÚVLÜNÜVSÜUÜV¨ÚíÚ¨ŸSÜiܨŸŧÚíÚæŸ‰ØĮŲuŧ# ŸĮŲČŲt¸# Ÿ-ډÚuŧ# Ÿ€Û™Ûuŧ# Ÿ™ÛĪÛs¨Ÿ9ÜLÜuŧ# Ÿ€Ü§Üuŧ# Ÿ§ØĮŲuŧ#,ŸĮŲČŲt¸#,Ÿ-ډÚuŧ#,Ÿ€Û™Ûuŧ#,Ÿ™ÛĪÛs´Ÿ9ÜLÜuŧ#,Ÿ€Ü§Üuŧ#,Ÿ'ØÄŲsȟÄŲÅŲvü~ŸÅŲĮŲu@#(ŸĮŲČŲt¸@Ÿ-ÚíÚsȟ€Û&Üsȟ9ÜiÜsȟ€Ü§Üsȟ'ØÄŲsԟÄŲÅŲvˆŸÅŲĮŲu@#4ŸĮŲČŲt¸4Ÿ-ÚíÚsԟ€Û&Üsԟ9ÜiÜsԟ€Ü§Üsԟ'ØÄŲsāŸÄŲÅŲv”ŸÅŲĮŲu@#@ŸĮŲČŲt¸(Ÿ-ÚíÚsāŸ€Û&ÜsāŸ9ÜiÜsāŸ€Ü§ÜsāŸ'ØÄŲsėŸÄŲÅŲv ŸÅŲĮŲu@#LŸĮŲČŲt¸LŸ-ÚíÚsėŸ€Û&ÜsėŸ9ÜiÜsėŸ€Ü§ÜsėŸŲČŲ0Ÿ-ډÚ0Ÿ€ÛÁÛ0Ÿ9ÜLÜ0Ÿ€Ü Ü0ŸŲÄŲsäŸÄŲÅŲvŸÅŲĮŲu@#ÄŸĮŲČŲt¸#\Ÿ-ډÚs䟀ÛÁÛsäŸ9ÜLÜs䟀ܠÜsäŸ6ŲČŲ0Ÿ-ډÚ0Ÿ€ÛÁÛ0Ÿ9ÜLÜ0Ÿ€Ü Ü0Ÿ6ŲÄŲsøŸÄŲÅŲv,ŸÅŲĮŲu@#ØŸĮŲČŲt¸#pŸ-ډÚsøŸ€ÛÁÛsøŸ9ÜLÜsøŸ€Ü ÜsøŸNŲ]ŲP]ŲbŲsüTŲ]ŲP]ŲbŲsüTŲÄŲsüŸÄŲÅŲv0ŸÅŲĮŲu@#ÜŸĮŲČŲt¸#tŸ-ډÚsüŸ€Û˜ÛsüŸ9ÜLÜsüŸ€Ü™ÜsüŸZŲÄŲs€ŸÄŲÅŲv4ŸÅŲĮŲu@#āŸĮŲČŲt¸#xŸ-ډÚs€Ÿ€Û˜Ûs€Ÿ9ÜLÜs€Ÿ€Ü™Üs€ŸpŲvŲPvŲĮŲuDĮŲČŲt@-ÚAÚPAډÚuD€Û˜ÛuD9ÜLÜuD€Ü™ÜuDEډÚ8 Ÿ9ÜLÜ8 ŸYډÚæŸ§ŲÄŲs„ŸÄŲÅŲv8ŸÅŲĮŲu@#äŸĮŲČŲt¸#|Ÿ€Ü™Üs„Ÿ°ŲŧŲPOÛmÛsŸUÛ_ÛuOŸ_ÛcÛRcÛmÛuOŸUÛcÛP‚Û˜ÛsüŸ‚Û˜Û0Ÿ˜Û ÛsøŸ Û§ÛP§ÛÁÛsøŸ¨ÛÁÛsĖŸÛÛ&ÜsāŸŪÛéÛ sčsā4ŸŪÛíÛPåÛéÛ sčsā4ŸåÛíÛPņÛ&ÜsԟôÛüÛ sÜsÔ4ŸôÛÜPøÛüÛ sÜsÔ4ŸøÛÜPÜ&ÜsȟÜÜ sĐsČ4ŸÜÜP ÜÜ sĐsČ4Ÿ ÜÜPŋÜūÜWŨ–ŨWÔÜÖÜPÖÜéÜVŨŨPŨsŨV’Ũ–ŨVŨsŨ¨Ÿ,Ũ]ŨæŸ>ŪPŪP-á3áP3áCáFŪĄß:ŸŽß-á:ŸLáčã:ŸFŪPŪPsŪĄßVŽß4āVá-áVLáŊáVœâxãVŸãčãVsŪĄßSŽß4āSá-áSLáŊáSœâžâSžâã‘@ŸããSãã‘@ŸããSã!ã‘@Ÿ!ã#ãS#ã9ã‘@Ÿ9ã=ãS=ãpã‘@ŸpãrãSrãtã‘@ŸtãvãSvãxã‘@ŸŸãĄãSĄãÔã‘@ŸÔãÖãSÖãØã‘@ŸØãÚãSÚãßã‘@ŸßãããSããčã‘@Ÿ=ãRã‘@ŸCãMã‘\ŸMãQãRQãRã‘\ŸCãQãPŠŪĄßVŽß4āVá-áVLáŊáVœâ;ãVpãtãVŸãčãVŪ§Ū‘\Ÿ§Ū´ŪP´ŪĄß‘\ŸŽßÃß‘\ŸÃßÎßPÎß4ā‘°á#á‘\Ÿ#á'áR'á-á‘\ŸLáœá‘\ŸœáŊá‘°œâ!ã‘\Ÿ!ã0ã‘°0ã;ã‘\Ÿpãtã‘\ŸŸãØã‘°Øãčã‘\ŸŪ˜ŪPá'áP˜ŪĄßSŽß4āSLáŊáSœâžâSžâã‘@ŸããSãã‘@ŸããSã!ã‘@Ÿ!ã#ãS#ã9ã‘@Ÿ9ã;ãSpãrãSrãtã‘@ŸŸãĄãSĄãÔã‘@ŸÔãÖãSÖãØã‘@ŸØãÚãSÚãßã‘@ŸßãããSããčã‘@Ÿ›Ū§ŪP§Ū´ŪsˇŪžŪWžŪÅŪtÅŪzß‘LŸLáœá‘LŸœâûâ‘LŸã!ã‘LŸ9ã;ã‘LŸØãčã‘LŸˇŪēŪ‘PŸēŪÅŪPÅŪßŪWßŪzß‘°Láœá‘°œâûâ‘°ããWã!ã‘°9ã;ã‘°Øãčã‘°ÖŪãŪPÖŪāŪp$#ŸņŪßWßzß‘DŸLáœá‘DŸœâÚâ‘DŸã!ã‘DŸ9ã;ãWáãčãWņŪ÷ŪP÷ŪûŪ‘HŸûŪßPß ß‘HŸ ßßPßzß‘HŸLáœá‘HŸœâÚâ‘HŸã!ã‘HŸ9ã;ã‘HŸáãčã‘HŸßzßWLáœáWœâ˛âWßzßSLáœáSœâžâSžâ˛â‘@Ÿ%ßzßWLáœáW%ß3ßW3ßUß‘HŸUßzß‘°Lálá‘HŸláŒá‘°ŒáœáW(ßzßVLáœáV(ß3ßPŒá–áP3ßzß‘HŸLáŒá‘HŸ3ßUß‘HŸUßzß‘°Lálá‘HŸláŒá‘°9ßzßVLáŒáV9ßDßPLáVáPDßzß‘DŸ\áŒá‘DŸJßzßV\áŒáVJßUßP\áfáPUßzß‘°láŒá‘°[ßzßVláŒáV[ßfßPláváPfßzß‘LŸ|áŒá‘LŸlßzßV|áŒáVlßwßP|á†áPzߥßSŽß4āSœáŊáS!ã#ãS#ã0ã‘@ŸŸãĄãSĄãÔã‘@ŸÔãÖãSÖãØã‘@ŸßĄßS–ߥßV–ߥßPĀß4āVœáŊáV!ã0ãVŸãØãVæß4ā‘°œáŊá‘°!ã0ã‘°æßā‘°ā4ā‘XŸœáŊá‘°!ã#ã‘°#ã0ã‘XŸéß4ā‘TŸœáŗá‘TŸŗáˇáRˇáŊá‘TŸ!ã0ã‘TŸéßôßP­áˇáPôß4āVœá­áV!ã0ãVúß4ā‘°œá­á‘°!ã0ã‘°úßāPœá§áPā4ā‘XŸā4āVā.āPMā‹āS‹ā á‘XŸŊá=â‘XŸFâHâSHâJâ‘XŸJâLâSLâcâ‘XŸcâeâSeâœâ‘XŸxãŸã‘XŸMāQā‘\ŸQā]āP]āāVā á‘°Ŋá=â‘°FâJâ‘°JâgâVgâœâ‘°xãŸã‘°LâcâVRâ\â‘`Ÿ\â`âR`âcâ‘`ŸRâ`âPnāxāPnāuāp$#Ÿ‹āāVā á‘PŸŊáüá‘PŸüáūáVūáâ‘PŸgâœâ‘PŸxãã‘PŸãŸãV‹ā áWŊáâWgâœâWxãŸãWãŸãW‡ã•ã‘`Ÿ•ã™ãR™ãŸã‘`Ÿ‡ã™ãPģā áVŊáüáVģāÉāVÉāëāWëā á‘°ŊáÍáVÍáėáWėáüá‘°žā á‘LŸŊáÃá‘LŸÃáĮáRĮáüá‘LŸžāÉāPŊáĮáPÉā áWÍáüáWÉāëāWëā á‘°ÍáėáWėáüá‘°Īā áVÍáüáVĪāÚāPÜáæáPÚā á‘PŸÍáÜá‘PŸėáüá‘PŸāā áVÍáÜáVėáüáVāāëāPÍáÖáPëā á‘°ėáüá‘°ņā áVėáüáVņāüāPėáöáPüā á‘XŸá áVá áPūáâ‘PŸââ‘LŸââRââ‘LŸââPâ(â‘°â#â‘LŸ#â'âR'â(â‘LŸâ'âP(â=â‘XŸ.â8â‘LŸ8â<âR<â=â‘LŸ.â<âPiâ~âVoâyâ‘LŸyâ}âR}â~â‘LŸoâ}âP~âœâW„â’â‘LŸ’â–âR–âœâ‘LŸ„â–âPžâ˛âW¤â˛âV¤âąâP˛âÆâ‘HŸ¸âÆâV¸âÅâPÆâÚâ‘DŸĖâÚâVĖâŲâPÚâîâ‘°āâîâVāâíâPîâûâ‘LŸôâûâVôâûâPûâã‘@Ÿãã‘ŋŸããRãã‘ŋŸããP#ã0ã‘XŸ)ã0ãV)ã0ãPRãpãVXãfã‘\ŸfãjãRjãpã‘\ŸXãjãPĄãļã‘°§ãąã‘TŸąãĩãRĩãļã‘TŸ§ãĩãPļãÔãVŧãĘã‘TŸĘãÎãRÎãÔã‘TŸŧãÎãPûãäPääpø~Ÿ+ä6äP6ä>äpø~Ÿ’äĨäPÔäÔäP‰äŒäp$Œä’äP‰äŒäp$#øŸŒä’äpøŸ–äÔä Ÿ–äžäp å$åP<åUåPÁæÍæPåUåVUåCæ‘Á}ŸCætæVtæÁæ‘Á}ŸÁæ įV įfč‘Á}ŸfčxčVxčŅč‘Á}ŸŅčŨčVŨč]ë‘Á}Ÿ.å3åsLåUå‘LåUå1ŸUå\åPmå„åPbåhåshålåtöé摨}Ÿ˙é ę‘Ã}Ÿ ęęRęę‘Ã}Ÿ˙éęPę,ę‘Ė}Ÿę'ę‘Ã}Ÿ'ę+ęR+ę,ę‘Ã}Ÿę+ęP,ęGę‘Č}Ÿ5ęBę‘Ã}ŸBęFęRFęGę‘Ã}Ÿ5ęFęPGębę‘Ä}ŸPę]ę‘Ã}Ÿ]ęaęRaębę‘Ã}ŸPęaęPbę†ę‘Ô}Ÿkę|ę‘Ã}Ÿ|ę€ęR€ę†ę‘Ã}Ÿkę€ęPˆęŦę‘Ü}Ÿ‘ęĸę‘Ã}ŸĸęĻęRĻęŦę‘Ã}Ÿ‘ęĻęPë ëVëë‘Ã}ŸëëRë ë‘Ã}ŸëëP ëDëW)ë:ë‘Ã}Ÿ:ë>ëR>ëDë‘Ã}Ÿ)ë>ëPuå„å‘uå„å ˙ŸŒæÁæ‘ä}ŸŒæ•æP§æÁæ‘ä}ŸĒæÁæWĒæģæPįæķæ‘įæķæ4ŸįĨįW čfčWŨčWéWgééW¯éÅéWŦęŗęW2įGįP ččPŨčëčPŗéˇéP įfč˙ŸŨčĻé˙Ÿ¯éôé˙ŸŦęŗę˙Ÿ įjįVjį č‘ä}Ÿ čfčVŨčéVéĻé‘ä}Ÿ¯éŗé‘ä}ŸŗéÅéVÅéôé‘ä}ŸŦęŗęV įĨįW čfčWŨčWéWgééW¯éÅéWŦęŗęWUįęį‘°}Wégé‘°}Åéôé‘°}™įęᑨ}ŸWég鑨}Ÿ™įĸįPÜįęᑨ}ŸWég鑨}Ÿßįęį‘ā}ŸWé]é‘ā}Ÿ]éaéRaégé‘ā}ŸßįęįPWéaéPĶéđ鑨}ŸÜééé‘ā}ŸééíéRíéđé‘ā}ŸÜéíéPåčWé‘Đ}Ÿgéé‘Đ}Ÿ¯éŗé‘Đ}ŸéWé‘ā}Ÿgéué‘ā}Ÿ=éWé‘ā}Ÿ@éWéV@éQéPuéé‘ā}Ÿ~é‹é‘Ø}Ÿ‹ééRéé‘Ø}Ÿ~ééPęį č‘Đ}Ÿęį č0ŸčfčVčfč‘Đ}Ÿč]č‘Đ}#ŸéĻé‘Đ}ŸéĻé0Ÿfčrč‘fčrč2Ÿ­čĩčW­čŗčPŅčŨč‘ŅčŨč3ŸĪęķę‘ä}ŸØęéę‘Ü}ŸéęíęRíęķę‘Ü}ŸØęíęP‹ë”ëP¨ëšëP‹ëĖëSĖë%í‘ŊŸšëŸëvOėdė‘`ŸUė_ė‘ŋŸ_ėcėRcėdė‘ŋŸUėcėPdėyėVjėtė‘ŋŸtėxėRxėyė‘ŋŸjėxėPyėŽė‘XŸė‰ė‘ŋŸ‰ėėRėŽė‘ŋŸėėPŽėŖė‘TŸ”ėžė‘ŋŸžėĸėRĸėŖė‘ŋŸ”ėĸėPŖė¸ė‘HŸŠėŗė‘ŋŸŗėˇėRˇė¸ė‘ŋŸŠėˇėP¸ėÍė‘DŸžėČė‘ŋŸČėĖėRĖėÍė‘ŋŸžėĖėPÍėâė‘@ŸĶėŨė‘ŋŸŨėáėRáėâė‘ŋŸĶėáėPâėí‘PŸčėōė‘ŋŸōėöėRöėí‘ŋŸčėöėPaílíP€í‹íP6îTî‘PŸ<îFî‘ģŸFîJîRJîTî‘ģŸ<îJîPVîkî‘`Ÿ\îfî‘ģŸfîjîRjîkî‘ģŸ\îjîPkî€îVqî{î‘ģŸ{îîRî€î‘ģŸqîîP€î•î‘XŸ†îî‘ģŸî”îR”î•î‘ģŸ†î”îP•îĒî‘TŸ›îĨî‘ģŸĨîŠîRŠîĒî‘ģŸ›îŠîPĒîŋî‘HŸ°îēî‘ģŸēîžîRžîŋî‘ģŸ°îžîPŋîÔî‘DŸÅîĪî‘ģŸĪîĶîRĶîÔî‘ģŸÅîĶîPÔîōî‘@ŸÚîčî‘ģŸčîėîRėîōî‘ģŸÚîėîP‹í’íS’í–í‘‹í–íP P GuL\uąÆudŸˇÁuFŸÁÅRÅÆuFŸˇÅPÆÛu`ŸĖÖuFŸÖÚRÚÛuFŸĖÚPÛđu\ŸáëuFŸëīRīđuFŸáīPđuPŸöuFŸRuFŸöPuLŸ uFŸRuFŸ P/uHŸ *uFŸ*.R./uFŸ .P/LuXŸ5LuGŸ5BP P GuL\uąÆudŸˇÁuFŸÁÅRÅÆuFŸˇÅPÆÛu`ŸĖÖuFŸÖÚRÚÛuFŸĖÚPÛđu\ŸáëuFŸëīRīđuFŸáīPđuPŸöuFŸRuFŸöPuLŸ uFŸRuFŸ P/uHŸ *uFŸ*.R./uFŸ .P/LuXŸ5LuGŸ5BP P +u+,t,,P,SuXhuŊŌudŸÃÍuFŸÍŅRŅŌuFŸÃŅPŌįu`ŸØâuFŸâæRæįuFŸØæPįüu\Ÿí÷uFŸ÷ûRûüuFŸíûPüuPŸ uFŸ RuFŸP&uLŸ!uFŸ!%R%&uFŸ%P&;uHŸ,6uFŸ6:R:;uFŸ,:P;XuXŸAXuGŸANP P +u+,t,,P,SuXhuŊŌudŸÃÍuFŸÍŅRŅŌuFŸÃŅPŌįu`ŸØâuFŸâæRæįuFŸØæPįüu\Ÿí÷uFŸ÷ûRûüuFŸíûPüuPŸ uFŸ RuFŸP&uLŸ!uFŸ!%R%&uFŸ%P&;uHŸ,6uFŸ6:R:;uFŸ,:P;XuXŸAXuGŸANPZīdīusŸdīhīRhīrīusŸZīhīPˆīÍīSÍīÎīÛīp$ÛīäīPØīÛīp$#üŸÛīäīpüŸfņ{ņPô“ôP%đņVņUķ‘\ŸUķŠķVŠķZö‘\ŸZöŠöVŠö‘ö‘\Ÿ%đ5đv#Ÿ5đ:đPAđ„ô° ŸôZö° Ÿxö‘ö° ŸAđņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\ŸAđKđpŸKđPđPWđ„ô[ŸôZö[Ÿxö‘ö[ŸWđņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\ŸWđađpŸađfđPmđ„ô°ŸôZö°Ÿxö‘ö°ŸmđņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\ŸmđwđpŸwđ|đPƒđ„ôØ ŸôZöØ Ÿxö‘öØ ŸƒđņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\ŸƒđđpŸđ’đP˜đņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\Ÿ§đņVņUķ‘\ŸUķŠķVŠķ„ô‘\ŸôZö‘\ŸxöŠöVŠö‘ö‘\Ÿ§đ„ô0ŸôZö0Ÿxö‘ö0Ÿ_öxöV_öxö0ŸĪđÅņSÅņÉņ‘XŸÉņōSōō‘XŸōņķSņķ„ô‘XŸô"õS"õ'õ‘XŸ'õ)õS)õ.õ‘XŸ.õ0õS0õ5õ‘XŸ5õ7õS7õ<õ‘XŸ<õ>õS>õCõ‘XŸCõEõSEõJõ‘XŸJõVõSVõ‰õ‘XŸ‰õ‹õS‹õĸõ‘XŸĸõ¤õS¤õģõ‘XŸģõŊõSŊõÔõ‘XŸÔõÖõSÖõíõ‘XŸíõúõSúõö‘XŸ1ö3öS3öJö‘XŸJöUöSUöZö‘XŸxö}öS}öˆö‘XŸŠö‘öSëđÅņSÅņÉņ‘XŸÉņōSōō‘XŸōņķSņķ„ô‘XŸô"õS"õ'õ‘XŸ'õ)õS)õ.õ‘XŸ.õ0õS0õ5õ‘XŸ5õ7õS7õ<õ‘XŸ<õ>õS>õCõ‘XŸCõEõSEõJõ‘XŸJõVõSVõ‰õ‘XŸ‰õ‹õS‹õĸõ‘XŸĸõ¤õS¤õģõ‘XŸģõŊõSŊõÔõ‘XŸÔõÖõSÖõíõ‘XŸíõúõSúõö‘XŸ1ö3öS3öJö‘XŸJöUöSUöZö‘XŸŠö‘öSîđņVņUķ‘\ŸUķŠķVŠķ„ô‘\Ÿôö‘\Ÿ1öZö‘\ŸŠö‘ö‘\ŸîđųđPUķ^ķP ņÅņSÅņÉņ‘XŸÉņōSōō‘XŸōUķSô õSTõVõSVõ‰õ‘XŸ‰õ‹õS‹õĸõ‘XŸĸõ¤õS¤õģõ‘XŸģõŊõSŊõÔõ‘XŸÔõÖõSÖõíõ‘XŸōõúõSúõö‘XŸ1ö3öS3öJö‘XŸJöUöSUöZö‘XŸŠö‘öS ņUķŸô õŸTõíõŸōõöŸ1öZöŸŠö‘öŸ3ņÅņSÅņÉņ‘XŸÉņōSōō‘XŸōUķSô õSTõVõSVõ‰õ‘XŸ‰õ‹õS‹õĸõ‘XŸĸõ¤õS¤õģõ‘XŸģõŊõSŊõÔõ‘XŸÔõÖõSÖõíõ‘XŸōõúõSúõö‘XŸ1ö3öS3öJö‘XŸJöUöSUöZö‘XŸŠö‘öS6ņƒō‘TŸƒō¤ōW¤ō$ķ‘TŸ$ķDķWDķKķ‘TŸKķOķROķUķ‘TŸôúô‘TŸúô õWTõÔõ‘TŸÔõíõWōõøõ‘TŸøõöW1öJöWJöOö‘TŸOöSöWSöZö‘TŸŠöŒö‘TŸŒö‘öW6ņAņPDķOķP{ņ„ņP•ņ ņPņĮņWĮņÉņ‘ņ§ņ‘`¨ņĢņp$#ĖŸĢņ¸ņpĖŸ¨ņÉņ0Ÿ¨ņĢņp$#ĖĢņ¸ņpˏņÄņPÉņÔņPéņôņPVõkõ‘¸Ÿ\õfõ‘ˇŸfõjõRjõkõ‘ˇŸ\õjõPkõ‰õ‘Ŧqõõ‘ˇŸõƒõRƒõ‰õ‘ˇŸqõƒõP‹õĸõ‘°‘õ›õ‘ˇŸ›õŸõRŸõĸõ‘ˇŸ‘õŸõP¤õģõ‘@ŸĒõ´õ‘ˇŸ´õ¸õR¸õģõ‘ˇŸĒõ¸õPŊõÔõ‘LŸÃõÍõ‘ˇŸÍõŅõRŅõÔõ‘ˇŸÃõŅõPÖõíõ‘PŸÜõæõ‘ˇŸæõęõRęõíõ‘ˇŸÜõęõPúõöWö ö‘ˇŸ ööRöö‘ˇŸööP3öJö‘XŸ9öCö‘ˇŸCöGöRGöJö‘ˇŸ9öGöPņņōWōō‘ņņō‘\ûņō1ŸûņōWōō‘rņĮņWĮņÉņ‘ÉņōWōō‘ō)ōW)ō¤ō‘¤ō¸ōW¸ōDķ‘Tõíõ‘ōõö‘1öZö‘Šö‘ö‘rņ{ņPņķô‘XŸ÷ķô‘¸ŸôôRôô‘¸Ÿ÷ķôPôôW ôô‘¸ŸôôRôô‘¸Ÿ ôôPô0ô‘PŸ!ô+ô‘¸Ÿ+ô/ôR/ô0ô‘¸Ÿ!ô/ôP0ôEô‘DŸ6ô@ô‘¸Ÿ@ôDôRDôEô‘¸Ÿ6ôDôPEôZô‘@ŸKôUô‘¸ŸUôYôRYôZô‘¸ŸKôYôPZôoô‘ŧŸ`ôjô‘¸ŸjônôRnôoô‘¸Ÿ`ônôPoô„ô‘Ŧuôô‘¸ŸôƒôRƒô„ô‘¸ŸuôƒôPö1ö‘XŸö'ö‘TŸ'ö+öR+ö1ö‘TŸö+öPąöĀöPŊöëöSž÷í÷Sņ÷BøS•øĄøSųųSąöĀöpøŸŊöÔöRŊöÔörŸ>÷´÷SvųĖųS¤úĻúSĻúŊúudŸ>÷´÷ŸvųĖųŸ¤úŊúŸQ÷´÷SvųĖųST÷´÷uGŸvųĖųuGŸT÷_÷PŒų—ųP_÷´÷u`ŸvųŒųu`ŸųĖųu`Ÿe÷´÷udŸvųŒųudŸųĖųudŸe÷p÷PųĻųPp÷´÷uTŸvųŒųuTŸŦųĖųuTŸv÷´÷udŸvųŒųudŸŦųĖųudŸv÷÷PŦųļųP÷´÷uPŸvųŒųuPŸŧųĖųuPŸ‡÷´÷udŸvųŒųudŸŧųĖųudŸ‡÷’÷PŧųÆųP’÷´÷uLŸvųŒųuLŸ˜÷´÷udŸvųŒųudŸ˜÷Ŗ÷Pvų†ųPŖ÷´÷u\ŸŠ÷´÷udŸŠ÷´÷Pž÷đ÷uđ÷ņ÷tņ÷øuž÷í÷Sņ÷øSøņøEŸųvųEŸĖųúEŸú'úEŸøņøŸųvųŸĖųúŸú'úŸøņø¨ ŸĖųú¨ Ÿúú¨ Ÿ%ú'ú¨ ŸøņøŸĖųúŸúúŸ%ú'úŸBøEøuBøEøu BøIøPIø•øS%ú'úSŋøņøSĖųÛųSÛųđųudŸŋøņøŸĖųđųŸŌøņøSĖųŲųSÕøņøu\ŸĖųŲųu\ŸÕøāøPĖųĶųPāøņøu`ŸæøņøudŸæøņøPųuųuuųvų‘ųųuųųuųųu ųųPųrųSrųuųuuųvų‘ÛųđųudŸáųëųu\ŸëųīųRīųđųu\ŸáųīųPđųúu`Ÿöųúu\ŸúúRúúu\ŸöųúP)ú@úu\Ÿ/ú9úuGŸ9ú=úR=ú@úuGŸ/ú=úPBúYúuLŸHúRúuGŸRúVúRVúYúuGŸHúVúP[úrúuPŸaúkúuGŸkúoúRoúrúuGŸaúoúPtú‹úuTŸzú„úuGŸ„úˆúRˆú‹úuGŸzúˆúPú¤úu`Ÿ“úúuGŸúĄúRĄú¤úuGŸ“úĄúPŦúļúuGŸļúēúRēúŊúuGŸŦúēúPĖú4ûS4û û‘ ûŠûSŠûöû‘öûųûSųûÉū‘ûûPûöû‘°üøü‘°ũŸũ‘°Rūnū‘°Šū´ū‘°ÎúÔúPéúõúPĄũļũ‘`Ÿ§ũąũ‘ŋŸąũĩũRĩũļũ‘ŋŸ§ũĩũPļũËũVŧũÆũ‘ŋŸÆũĘũRĘũËũ‘ŋŸŧũĘũPËũāũWŅũÛũ‘ŋŸÛũßũRßũāũ‘ŋŸŅũßũPāũõũ‘TŸæũđũ‘ŋŸđũôũRôũõũ‘ŋŸæũôũPõũ ū‘HŸûũū‘ŋŸū ūR ū ū‘ŋŸûũ ūP ūū‘DŸūū‘ŋŸūūRūū‘ŋŸūūPū4ū‘@Ÿ%ū/ū‘ŋŸ/ū3ūR3ū4ū‘ŋŸ%ū3ūP4ūRū‘PŸ:ūHū‘ŋŸHūLūRLūRū‘ŋŸ:ūLūPöúųúPöúųúp$#Ÿųú˙úpŸü¤ü‘`Ÿ•üŸü‘LŸŸüŖüRŖü¤ü‘LŸ•üŖüP¤üšüWĒü´ü‘LŸ´ü¸üR¸üšü‘LŸĒü¸üPšüÎü‘TŸŋüÉü‘LŸÉüÍüRÍüÎü‘LŸŋüÍüPÎüãü‘PŸÔüŪü‘LŸŪüâüRâüãü‘LŸÔüâüPãüøüVéüķü‘LŸķü÷üR÷üøü‘LŸéü÷üPũũ‘`Ÿ ũũ‘DŸũũRũũ‘DŸ ũũPũ-ũWũ(ũ‘DŸ(ũ,ũR,ũ-ũ‘DŸũ,ũP-ũBũ‘TŸ3ũ=ũ‘DŸ=ũAũRAũBũ‘DŸ3ũAũPBũWũ‘PŸHũRũ‘DŸRũVũRVũWũ‘DŸHũVũPWũlũ‘LŸ]ũgũ‘DŸgũkũRkũlũ‘DŸ]ũkũPlũũ‘Ŧrũ|ũ‘DŸ|ũ€ũR€ũũ‘DŸrũ€ũPũŸũV‡ũ•ũ‘DŸ•ũ™ũR™ũŸũ‘DŸ‡ũ™ũP˙%˙S+˙G˙S˙%˙V+˙G˙V˙%˙S+˙G˙S ˙%˙R+˙6˙R6˙;˙v;˙A˙rxŸ˙%˙‘lŸ+˙:˙‘lŸ:˙A˙QA˙G˙‘lŸ˙%˙rŸ+˙6˙rŸ6˙;˙v#Ÿ;˙A˙R˙%˙rŸ˙%˙‘lŸ˙˙Pa˙˙S˙Ę˙upŸĘ˙Ë˙tlŸË˙S&upŸ&'tlŸ'=upŸ=?S?ˆupŸ˙ˇ˙utŸ'=utŸ]ˆutŸ›˙ ˙P ˙ˇ˙u'=u­˙ˇ˙utŸ'=utŸ°˙ˇ˙uoŸ'=uoŸ°˙ˇ˙P'7Pˇ˙Ä˙upŸupŸŊ˙Ä˙utŸ utŸŊ˙Ë˙P PË˙ŸË˙upŸ?]upŸEOuoŸOSRS]uoŸESPm„utŸs}uoŸ}R„uoŸsP‘FWHhW3@SHbS@VHbV'p|Ÿ'P3>PHUPUWv4Ÿ35R5>p|ŸHUp|ŸUWv8Ÿ3@WHbW3@1ŸHb1Ÿ5>r4ŸH\r4Ÿ”Ÿq4ŸŸŠ‘\4Ÿ q4ŸYhq4ŸŠíSíøvCSОS˛Á0ŸÁÅsu"ŸÅĶQ×øUQ(‘\(C0Ÿ|Pø1ŸChP„CōŖWhōŖøV CVYhV”ŠV”Š0ŸŠøVCVŠļUļø‘C‘ŠĢsq"ŸĢēQ´íSíøvCS´øWCW´ÁP(:P´ø1ŸC1Ÿ¸Ču4Ÿ(Cu4ŸÅĶQQ(‘\ÅĶvvÅøW(WÅø1Ÿ(1ŸĘ×u4Ÿ(u4Ÿ×øV×ß vp4Ÿ×ãPÛįVÛß vp4ŸÛãP°‘ÁŌ‘ŌŲpŲã‘ĸŊ‘ŸÁŌ‘ŸŌŲPŲ㑟ĸŊqȟÁÎqȟÎĶ ‘#$#HŸĶŲQĒŊqȟĒŊ‘ŸĒŗRĸŊQÁÎQÎĶ‘#$ĶŲq¸Ÿ‘FWHhW3@SHbS@VHbV'p|Ÿ'P3>PHUPUWv4Ÿ35R5>p|ŸHUp|ŸUWv8Ÿ3@WHbW3@1ŸHb1Ÿ5>r4ŸH\r4Ÿ”Ÿq4ŸŸŠ‘\4Ÿ q4ŸYhq4ŸŠíSíøvCSОS˛Á0ŸÁÅsu"ŸÅĶQ×øUQ(‘\(C0Ÿ|Pø1ŸChP„CōWhōøV CVYhV”ŠV”Š0ŸŠøVCVŠļUļø‘C‘ŠĢsq"ŸĢēQ´íSíøvCS´øWCW´ÁP(:P´ø1ŸC1Ÿ¸Ču4Ÿ(Cu4ŸÅĶQQ(‘\ÅĶvvÅøW(WÅø1Ÿ(1ŸĘ×u4Ÿ(u4Ÿ×øV×ß vp4Ÿ×ãPÛįVÛß vp4ŸÛãPCu jˆu gutŸgjtpŸjĻutŸ :S (ut#Ÿ04pŸ49Rjˆu jˆutŸjˆ0Ÿj€ut#Ÿ€…POgutŸgjtpŸOj0Ÿ‘FWHhW3@SHbS@VHbV'p|Ÿ'P3>PHUPUWv4Ÿ35R5>p|ŸHUp|ŸUWv8Ÿ3@WHbW3@1ŸHb1Ÿ5>r4ŸH\r4Ÿ”Ÿq4ŸŸŠ‘\4Ÿ q4ŸYhq4ŸŠíSíøvCSОS˛Á0ŸÁÅsu"ŸÅĶQ×øUQ(‘\(C0Ÿ|Pø1ŸChP„Cōq#Whōq#øV CVYhV”ŠV”Š0ŸŠøVCVŠļUļø‘C‘ŠĢsq"ŸĢēQ´íSíøvCS´øWCW´ÁP(:P´ø1ŸC1Ÿ¸Ču4Ÿ(Cu4ŸÅĶQQ(‘\ÅĶvvÅøW(WÅø1Ÿ(1ŸĘ×u4Ÿ(u4Ÿ×øV×ß vp4Ÿ×ãPÛįVÛß vp4ŸÛãP‘3QItQ Ew4ŸIpw4ŸCSCI‘IlSlt‘IlSlt‘IqUqt‘ I\P ‘ S"t#\S*W?TWS"t?TS*WS"t*1ŸsŸ"t#Ÿ?TsŸBQPpŦ‘X“ŦēR“ !P!Ŧ‘ēĘ‘!P!Ŧ‘ēĘ‘Ŧ‘ēĘ‘2R2?U?ē‘X.V.2P?ˇUzŦ‘2Ŧ‘2?uŸ?C‘X#ŸCluŸNUSUVpt2CVNSQSĩV2CPetP2CWNļWN\PzŦ‘X#ŸŦērŸzŦ‘zĩV…´SžĻP…‘P…ļWēĘ‘ēĘ‘\ĘØRēĘ‘ĘÎP¨ž“0Ÿ“0Ÿ“u\“0Ÿ“tX“ĸ0Ÿ“u\“ĸ­0Ÿ“V“­ķ0Ÿ“u\“*užÁu*u žÁu 8>Pv}PžÁuX P *uX<>PžÁP*1Ÿ*80Ÿ8>Q>m1Ÿmv0Ÿv‡QžÁ1ŸâūP“›ĸ0Ÿ“P*u *ģuX4ŸģžtT4ŸžÁu ÁuX4ŸtT4ŸķuX4Ÿ>Su <>pŸ>Su*‡W*>SF‡S*3PmtP*>u\N]P]‚u\*>u`N‡u`‡u ‡u›ĸ@Ÿ‡ŒS‡ēWĸW ¨P“P‡ģu`ģžt\ĸu`‡ģudģžt`ĸudĐūō{3¨ģuģžP)uĸ¯uu\tXĸ­V­ķu\0Ÿĸķ0Ÿ)u ĸ¯u =fVfoPo‹V¯ąVąĘ1ŸĘķV )u =u\#ŸąĘu\#Ÿ )u'S'(pt9V7=PąŋP=u\#ŸąĘu\#Ÿ.R.P=UuUVtVZtąĘu=1Ÿ¯ķ1Ÿ=0Ÿ¯ķ0ŸLUuUVtVZtČĘuLZPČĘPzuPGP„Ÿ‰œŸHg\ Ÿ‰œ\ ŸzuŦ~Ÿz}P}AuŦ~ŸAD‘¤~ŸDŅuŦ~Ÿ uā~Ÿ @W@Auā~ŸAD‘Ø~ŸDŅWÆĮtĮËt\zuŦ~Ÿz}P}AuŦ~ŸAD‘¤~ŸDŅuŦ~Ÿ¤su´~ŸsxPxAu´~ŸAD‘Ŧ~ŸDXu´~Ÿ\xu´~Ÿ“Ņu´~Ÿ`xuŦ~ŸíXHŸ\`HŸ“ŽHŸ°ŅHŸíįVįAu¸~ŸAD‘°~ŸDXV\`V“ŽV°ÁVÁŅu¸~ŸSįv$ŸįAuÜ~ŸAD‘Ô~ŸDXv$Ÿ\`v$Ÿ“Žv$Ÿ°Áv$ŸÁŅuÜ~Ÿ]auÜ~x“uā~ŸhAu AD‘DXu \`u “u hsu´~ŸsxPxAu´~ŸAD‘Ŧ~ŸDXu´~Ÿ\`u´~Ÿ“Ēu´~ŸhX0Ÿ\`0Ÿ“Ē0Ÿhkp{AuŦ~ŸAD‘¤~ŸDXuŦ~ŸAuŦ~ŸAD‘¤~ŸDXuŦ~ŸĢįVįAu¸~ŸAD‘°~ŸDXVĩAuÜ~ŸAD‘Ô~ŸDXuÜ~Ÿ¸AuĢ~ŸAD‘Ŗ~ŸDXuĢ~Ÿ¸ÃPDRPÃAu¸~ŸAD‘°~ŸÜAuŦ~ŸAD‘¤~ŸũAu´~ŸAD‘Ŧ~ŸAuŦ~ŸAD‘¤~Ÿ%Auā~ŸAD‘Ø~Ÿ/uPŸ/vuHŸvytDŸ–ķuHŸuHŸ.P.vuHŸvytDŸ–ķuHŸ/vuHŸvytDŸ–ķuHŸ/2uPŸ2:P:vuPŸvytLŸ–ķuPŸVtVtvu`Ÿvyt\Ÿ–ēVYvu_Ÿvyt[Ÿ–ēu_ŸY`PЎP`vudŸvyt`Ÿ–ŠudŸfvu`Ÿvyt\Ÿ–Šu`ŸfmP–ĻPy–1ŸyS–Pƒ–0ŸƒsŸ–pŸŧÚudŸÂĖu_ŸĖĐRĐÚu_ŸÂĐPâėu_ŸėđRđķu_ŸâđP,61Ÿ,6S/60Ÿ/6sŸH[u@Ÿ[0u¸ŸHKu¸ŸKUPUVtVZtZ0u¸Ÿ[^u@Ÿ^fPf0u@Ÿgķ0Ÿ,0Ÿgju`ŸjPķu`Ÿ,u`Ÿuķ0Ÿ,0ŸuķudŸ,udŸŽÎŸ(ŸŽ”u´ĸΟ(ŸĸņWņÎuXŸ(WĸŦqŸŦąPÃņWņÎuXŸÃņWņ*uXŸ*šVšģuXŸģÎu\ŸÃÎ0Ÿ(uXŸ(0ŸũΟũPSWšÎW Ο ÎV pŸP*šV*š0ŸģÎu\ŸģÎ0ŸVšu`ŸVšudŸVš0ŸZrWĒšW_ru\ŸĒšu\Ÿ_fPĒļPrĒuPŸxĒu`ŸxP§PuTŸ…“u`Ÿ“—R—u`Ÿ…—PÎîu`ŸîōRōķu`ŸÎĶudŸĶÚPÚķudŸÛķuPŸäîu`ŸîōRōķu`ŸäōPķuTŸųu`ŸRu`ŸųP\ou@ŸoĒu¸ŸÛsu¸Ÿ\_u¸Ÿ_iPijtjntnĒu¸ŸÛsu¸ŸoĒu¸ŸÛsu¸Ÿoru@ŸrzPzĒu@ŸÛsu@Ÿ{Ē0ŸÛ60ŸTX0Ÿ\s0Ÿ{~u`Ÿ~•P•Ēu`ŸÛ6u`ŸTXu`Ÿ\su`Ÿ‰Ē0ŸÛ60ŸTX0Ÿ\s0Ÿ‰ĒudŸÛ6udŸTXudŸ\sudŸĸĒOŸÛOŸ\sOŸĸ¨u´ļĒOŸÛOŸ\sOŸļWĒuXŸÛüuXŸüW\suXŸļĀqŸĀÅP×WĒuXŸÛüuXŸ\suXŸ×W>uXŸ>ĒVÛüV\^uXŸ^su\Ÿ×Ē0ŸÛü0Ÿ\s0ŸūuXŸū0ŸĒŸÛüŸ\sŸPgW\sWĒŸÛüŸ\sŸĒVÛüV\sV)pŸ).P>ĒVÛüV>Ē0ŸÛü0ŸjĒu`ŸÛüu`ŸjĒudŸÛüudŸjĒ0ŸÛü0Ÿn†WęüWs†u\Ÿęüu\ŸszPęöP†ĒuPŸÛęuPŸŒĒu`ŸÛęu`ŸŒ“PÛįP“ĒuTŸ™Ŗu`ŸŖ§R§Ēu`Ÿ™§P˛ŧ1Ÿ˛ŧSĩŧ0ŸĩŧsŸ1u`Ÿ15R56u`ŸudŸP6udŸ6uPŸ'1u`Ÿ15R56u`Ÿ'5P6TuTŸ<Fu`ŸFJRJTu`Ÿ<JPŦŋu@Ÿŋúu¸Ÿ+Ãu¸ŸŦ¯u¸Ÿ¯šPšētēžtžúu¸Ÿ+Ãu¸Ÿŋúu¸Ÿ+Ãu¸ŸŋÂu@ŸÂĘPĘúu@Ÿ+Ãu@ŸËú0Ÿ+†0Ÿ¤¨0ŸŦÃ0ŸËÎu`ŸÎåPåúu`Ÿ+†u`Ÿ¤¨u`ŸŦÃu`ŸŲú0Ÿ+†0Ÿ¤¨0ŸŦÃ0ŸŲúudŸ+†udŸ¤¨udŸŦÃudŸōú! Ÿ+a! ŸŦÃ! Ÿōøu´ú! Ÿ+a! ŸŦÃ! ŸUWUúuXŸ+LuXŸLaWŦÃuXŸqŸP'UWUúuXŸ+LuXŸŦÃuXŸ'UWUŽuXŸŽúV+LVŦŽuXŸŽÃu\Ÿ'ú0Ÿ+L0ŸŦÃ0ŸNauXŸNa0ŸaúŸ+LŸŦßahPhˇWŦÃWoúŸ+LŸŦßoúV+LVŦÃVoypŸy~PŽúV+LVŽú0Ÿ+L0Ÿēúu`Ÿ+Lu`ŸēúudŸ+LudŸēú0Ÿ+L0ŸžÖW:LWÃÖu\Ÿ:Lu\ŸÃĘP:FPÖúuPŸ+:uPŸÜúu`Ÿ+:u`ŸÜãP+7PãúuTŸéķu`Ÿķ÷R÷úu`Ÿé÷P 1Ÿ S 0Ÿ sŸau`Ÿ…R…†u`ŸafudŸfmPm†udŸn†uPŸwu`Ÿ…R…†u`Ÿw…P†¤uTŸŒ–u`Ÿ–šRš¤u`ŸŒšPü u@Ÿ J u¸Ÿ{  u¸Ÿü˙u¸Ÿ˙ P  t  t J u¸Ÿ{  u¸Ÿ J u¸Ÿ{  u¸Ÿ  u@Ÿ  P J u@Ÿ{  u@Ÿ J 0Ÿ{ Ö 0Ÿô ø 0Ÿü  0Ÿ  u`Ÿ 5 P5 J u`Ÿ{ Ö u`Ÿô ø u`Ÿü  u`Ÿ) J 0Ÿ{ Ö 0Ÿô ø 0Ÿü  0Ÿ) J udŸ{ Ö udŸô ø udŸü  udŸB J ' Ÿ{ ą ' Ÿü  ' ŸB H u´V J ' Ÿ{ ą ' Ÿü  ' ŸV Ĩ WĨ J uXŸ{ œ uXŸœ ą Wü  uXŸV ` qŸ` e Pw Ĩ WĨ J uXŸ{ œ uXŸü  uXŸw Ĩ WĨ Ū uXŸŪ J V{ œ Vü ū uXŸū  u\Ÿw J 0Ÿ{ œ 0Ÿü  0Ÿž ą uXŸž ą 0Ÿą J Ÿ{ œ Ÿü  Ÿą ¸ P¸  Wü  Wŋ J Ÿ{ œ Ÿü  Ÿŋ J V{ œ Vü  Vŋ É pŸÉ Î PŪ J V{ œ VŪ J 0Ÿ{ œ 0Ÿ J u`Ÿ{ œ u`Ÿ J udŸ{ œ udŸ J 0Ÿ{ œ 0Ÿ & WŠ œ W & u\ŸŠ œ u\Ÿ  PŠ – P& J uPŸ{ Š uPŸ, J u`Ÿ{ Š u`Ÿ, 3 P{ ‡ P3 J uTŸ9 C u`ŸC G RG J u`Ÿ9 G PR \ 1ŸR \ SU \ 0ŸU \ sŸą Ņ u`ŸŅ Õ RÕ Ö u`Ÿą ļ udŸļ Ŋ PŊ Ö udŸž Ö uPŸĮ Ņ u`ŸŅ Õ RÕ Ö u`ŸĮ Õ PÖ ô uTŸÜ æ u`Ÿæ ę Rę ô u`ŸÜ ę PL _ u@Ÿ_ š u¸ŸË c u¸ŸL O u¸ŸO Y PY Z tZ ^ t^ š u¸ŸË c u¸Ÿ_ š u¸ŸË c u¸Ÿ_ b u@Ÿb j Pj š u@ŸË c u@Ÿk š 0ŸË & 0ŸD H 0ŸL c 0Ÿk n u`Ÿn … P… š u`ŸË & u`ŸD H u`ŸL c u`Ÿy š 0ŸË & 0ŸD H 0ŸL c 0Ÿy š udŸË & udŸD H udŸL c udŸ’ š . ŸË  . ŸL c . Ÿ’ ˜ u´Ļ š . ŸË  . ŸL c . ŸĻ õ Wõ š uXŸË ė uXŸė  WL c uXŸĻ ° qŸ° ĩ PĮ õ Wõ š uXŸË ė uXŸL c uXŸĮ õ Wõ . uXŸ. š VË ė VL N uXŸN c u\ŸĮ š 0ŸË ė 0ŸL c 0Ÿî  uXŸî  0Ÿ š ŸË ė ŸL c Ÿ  P W WL c W š ŸË ė ŸL c Ÿ š VË ė VL c V  pŸ  P. š VË ė V. š 0ŸË ė 0ŸZ š u`ŸË ė u`ŸZ š udŸË ė udŸZ š 0ŸË ė 0Ÿ^ v WÚ ė Wc v u\ŸÚ ė u\Ÿc j PÚ æ Pv š uPŸË Ú uPŸ| š u`ŸË Ú u`Ÿ| ƒ PË × Pƒ š uTŸ‰ “ u`Ÿ“ — R— š u`Ÿ‰ — Pĸ Ŧ 1Ÿĸ Ŧ SĨ Ŧ 0ŸĨ Ŧ sŸ ! u`Ÿ! % R% & u`Ÿ  udŸ  P & udŸ & uPŸ ! u`Ÿ! % R% & u`Ÿ % P& D uTŸ, 6 u`Ÿ6 : R: D u`Ÿ, : P,W,0 ‘s5&Ÿ?CWCE ‘s5&Ÿ0lsŸ“lpshŸ“‘›sŸ“›S“ŖsŸ“ŖŦsxŸ“Ŧ˛p8Ÿ“˛ģsŸ“ģÄspŸ“ÄĘp@Ÿ“ĘŲshŸ“0pV‘­V­˛‘ ˛ÅVÅĘ‘ ĘŲV0lsŸlpshŸ‘›sŸ›SŖsŸŖŦsxŸŦ˛p8Ÿ˛ģsŸģÄspŸÄĘp@ŸĘŲshŸ06s67t7;‘PClsŸ“lpspŸ“ŖsŸ“ŖŦS“Ŧ˛p“˛ģsŸ“ģÄsxŸ“ÄĘp8Ÿ“ĘŲspŸ“CpV­V­˛‘ ˛ÅVÅĘ‘ ĘŲVClsŸlpspŸŖsŸŖŦSŦ˛p˛ģsŸģÄsxŸÄĘp8ŸĘŲspŸCIsIJtJN‘PVlsŸ“lpsxŸ“˛ģsŸ“ģÄS“ÄĘp“ĘŲsxŸ“VpV˛ÅVÅĘ‘ ĘŲVVlsŸlpsxŸ˛ģsŸģÄSÄĘpĘŲsxŸV\s\]t]a‘P0lS“lps`Ÿ“p‚S“‘›S“›sxŸ“ŖS“ŖŦspŸ“Ŧ˛p@Ÿ“˛ģS“ģÄshŸ“ÄĘpHŸ“ĘŲs`Ÿ“0…V‘­V­˛‘ ˛ÅVÅĘ‘ ĘŲV0lSlps`Ÿp‚S‘›S›sxŸŖSŖŦspŸŦ˛p@Ÿ˛ģSģÄshŸÄĘpHŸĘŲs`Ÿpusuvtvz‘P0pōúj‘ŲōújCpōújŲōújVpōúj˛ŲōújûW“ûVûWûwt‘P ōúj%W“%V%Wwt‘P"%ōúj%7W“%7V%7W%*w*+t+/‘P(V(1 ‘u4&Ÿ¸ŧVŧÁ ‘u4&Ÿ1WuŸ“W_utŸ“ļuŸ“ļšR“š uŸ“ utŸ“1_ōūoōūo1_‘ ‘ 1WuŸW_utŸļuŸļšRš uŸ utŸĩWŗSšP@WuŸ“W_uxŸ“š uŸ“ uxŸ“@_ōūošōūo@_‘ š‘ @WuŸW_uxŸš uŸ uxŸšáWšáSšĘPHWu Ÿ“W_u|Ÿ“á u Ÿ“ u|Ÿ“H_ōūoáōūoH_‘ á‘ HWu ŸW_u|Ÿá u Ÿ u|Ÿá Wá SáōP1WU“W_upŸ“_U“ļU“ļšr|Ÿ“š U“ upŸ“1ōūoōūo1‘ ‘ 1WUW_upŸ_UļUļšr|Ÿš U upŸgWgSgqP1_ōāoōāo@_ōāošōāoH_ōāoáōāo@JV“¤¸V“@Jōūo¤¸ōūo@J‘ ¤¸‘ @JV¤¸V¤¸S¤¸U¤ŽPGJōāoJcV“JcōūoJc‘ JcVQcSQcUQ[PyŽV“ސv|Ÿ“¤V“y¤ōūoy¤‘ yŽVސv|Ÿ¤V„¤‘ šR¤UšP‹ōāo,W,. ‘s4&Ÿ.ŋVG]V]b‘ bxV2BP2ŋVG]V]b‘ bxVNŋVG]V]b‘ bxVQaPQŋVG]V]b‘ bxVmŋVbxVp€PpŋVbxVŒŋVpxVŸPŋVpxVáūVãķPãūVûūōÁwūVPVōÁw5V-P5VNŋōÁwGxōÁwmŋōÁwbxōÁwŒŋōÁwpxōÁw:lW“nƒW“GŒW“‰  S  t ” t” muPŸmntLŸnōuPŸōķtLŸķėuPŸ‰  uTŸ Ā SĀ muTŸmntPŸnōuTŸōķtPŸķOuTŸOQSQ™uTŸ™›S›uTŸŸSŸėuTŸš  pԟ mu#TŸmnt#TŸnču#TŸķ(u#TŸ:{u#TŸ™u#TŸĄėu#TŸš  p؟ mu#XŸmnt#XŸnyp؟yíu#XŸíqŸĀu#XŸķq؟$u#XŸ:OqŸO{u#XŸ™u#XŸĄėu#XŸ  mu#TŸmnt#TŸnču#TŸķ(u#TŸ:{u#TŸ™u#TŸĄėu#TŸ  mu#TŸmnt#TŸnâu#TŸâęqԟęQĀu#TŸķ$u#TŸ:OQO{u#TŸ™u#TŸĄėu#TŸĻ Ā SĀ muTŸmntPŸnōuTŸōķtPŸķOuTŸOQSQ{uTŸ™›S›uTŸĄėuTŸĻ Ē u#X“Ē mu@“mntŧ“nÅu@“œu@“ u@“O{u@“™u@“Ąėu@“Ļ  W“W“O{W“™W“´ėW“Ļ Š uXŸŠ ¯ P¯ ˇ uXŸˇ ž Pž muXŸmntTŸnōuXŸōķtTŸķ{uXŸ™uXŸĄėuXŸ¸ ž Pž muXŸmntTŸnōuXŸōķtTŸķfuXŸĄėuXŸ¸ kVkmu`Ÿmnt\ŸnđVđōu`Ÿōķt\ŸķfVĄėVÁ kVkmu`Ÿmnt\ŸnđVđōu`Ÿōķt\ŸķOVĄėVÁ Ä u\ŸÄ Ę PĘ mu\ŸmntXŸnōu\ŸōķtXŸķOu\ŸĄėu\ŸŅ kVkmu`Ÿmnt\ŸnđVđōu`Ÿōķt\ŸķOVĄĖVŅ  V udŸ)u\Ÿ):uXŸ:KuTŸV'u\Ÿ'8uXŸGXuTŸŒœudŸ´ļVļĖu\Ÿ× jSjmudŸmnt`ŸnīSīōudŸōķt`ŸķOSĄĻSĻ´udŸ´ļSļĖudŸ× â PPÔâudŸâæRæėudŸÔæPâ å u\Ÿå î Pî mu\ŸmntXŸnu\Ÿōu\ŸōķtXŸķOu\ŸĄĖu\Ÿâ mudŸmnt`ŸnudŸōudŸōķt`ŸķOudŸĄĖudŸ mudŸmnt`ŸnudŸōudŸōķt`ŸķOudŸĄ´udŸ udŸmu\ŸmntXŸnu\ŸŒu\ŸŒœudŸœōu\ŸōķtXŸķOu\ŸĄ´u\Ÿ udŸ)u\Ÿ):uXŸ:KuTŸ'u\Ÿ'8uXŸGXuTŸŒœudŸ mu`Ÿmnt\Ÿnu`Ÿōu`Ÿōķt\ŸķOu`ŸĄ´u`Ÿ PŒ–Pmu\ŸmntXŸnu\ŸŒu\Ÿœōu\ŸōķtXŸķOu\ŸĄ´u\Ÿ)u\Ÿ):uXŸ:KuTŸ'u\Ÿ'8uXŸGXuTŸmudŸmnt`ŸnudŸŒudŸœōudŸōķt`ŸķOudŸĄ´udŸ,P,:u\<Ÿ&P):uXŸ'8uXŸ):uXŸ:KuTŸ'8uXŸGXuTŸ/:udŸ-8udŸ/=P-FPQfuXŸWauOŸaeRefuOŸWePļĖu\ŸŧĖu`ŸŧÉP:KuTŸGXuTŸ@KudŸMXudŸ@NPMfPK\uPŸgxuPŸQ\udŸmxudŸQ\Pm†PąudŸœōudŸōķt`ŸķOudŸēu\Ÿœōu\ŸōķtXŸķOu\ŸēÅP PâįPįęqüęípüíu#|u@#Ÿ:Owüęu`Ÿ:Ou`ŸęR“:AR“AC wü2$q"Ÿ“ęQu#TŸ:OQę rq4Ÿ:A rq4ŸAC wü2$4Ÿ:OQ:Ou`Ÿ:FPœĀu`Ÿķ u`ŸœĀu#TŸķqԟ u#TŸĢĀu#TŸĢĀu`ŸĢˇPÉâqāŸâču#`Ÿ$4qāŸ×ōudŸōķt`Ÿ$:udŸ×âqāŸâču#`Ÿ$4qāŸŲâqāŸâču#`ŸŲčudŸŲåPåču#df{uTŸlvuOŸvzRz{uOŸlzP{™uPŸ‹uOŸ‹R™uOŸPG¯S¯ŗPŗqSÆČSG°V°˛udŸ˛ŗt`ŸŗVÆŪVJ˛u_Ÿ˛ŗt[Ÿŗu_ŸÆŪu_ŸJUPLWPU˛u`Ÿ˛ŗt\ŸŗLu`Ÿ]u`ŸÆŪu`Ÿ[˛udŸ˛ŗt`ŸŗLudŸ]udŸÆŪudŸ[fP?FPq¯S¯ŗPŗ?S]qSÆČSqŽu ŗ?u ]ru ÆŪu qŽuŗ?u]ruÆŪuqtPt˛uT˛ŗtPŗ?uT]uTÆŪuTqtpŸt˛uT#Ÿ˛ŗtP#Ÿŗ?uT#Ÿ]uT#ŸÆŪuT#ŸqtpŸt{uT#Ÿŗ1uT#Ÿ]uT#ŸÆŪuT#Ÿ{¯S¯ŗP1?S{¯sŸ¯ŗpŸ1?sŸ†ˆPÁ1udŸ]udŸÆŪudŸÁĘuT#ŸĘĪPĪ1uT#Ÿ]uT#ŸÆŪuT#ŸÖ1udŸ]udŸŲ1u`Ÿ]u`ŸŲäP]fPä1uT#ŸluT#ŸČŪudŸÎŪu`ŸÎÛP¤udŸ•Ÿu_ŸŸŖRŖ¤u_Ÿ•ŖP¤šu`ŸĒ´u_Ÿ´¸R¸šu_ŸĒ¸P(x‘ ‘(5P5x‘ ‘(mVmp‘pxV V=BPBlSlm‘vŸmp‘‘ŸpxS SKZPZnWnoutŸopptŸpsPsxW WNx‘ ‘NmVmp‘pxV VNoUopPpxU UNlSlm‘vŸmp‘‘ŸpxS SP^SP^VP^UsxU^lSlm‘vŸmp‘‘Ÿ S^nWnoutŸopptŸ W?4W45uXŸ56tTŸ6ŠWŠĒuXŸĒĢtTŸĢ-WG•WŸĨWS`R`uDĢÎuDÎØRØ˙uD -uDG•uDŸĨuDōuĢ@uEÅu 2S25udŸ56t`Ÿ6§S§ĒudŸĒĢt`ŸĢ/S/EudŸEISIŸudŸŸŖSŖĨudŸĨ§S§ÅudŸķōu Ģ@u EÅu hV˙ VĨÅV2S25udŸ56t`Ÿ6§S§ĒudŸĒĢt`ŸĢ-SGISI•udŸŸŖSŖĨudŸĨ§S§ÅudŸ&hV˙ VĨÅV&4W45uXŸ56tTŸ6ŠWŠĒuXŸĒĢtTŸĢ-WG•WŸÅW­ģu`ŸģŋRŋÅu`Ÿ­ŋP?2S25udŸ56t`Ÿ6§S§ĒudŸĒĢt`ŸĢ-SGISI•udŸŸŖSŖĨudŸB5u`Ÿ56t\Ÿ6Ēu`ŸĒĢt\ŸĢ-u`ŸG•u`ŸŸĨu`ŸBMP˙PM˙Ÿ -ŸG•ŸŸĨŸS˙-Ÿ --ŸG•-ŸŸĨ-Ÿh“u\Ÿ“šPš5u\Ÿ56tXŸ6Ēu\ŸĒĢtXŸĢ˙u\Ÿ -u\ŸG•u\ŸŸĨu\Ÿo‹u\ÎØu`hou\Ÿo5u`Ÿ56t\Ÿ6Ēu`ŸĒĢt\ŸĢ˙u`Ÿ -u`ŸG•u`ŸŸĨu`Ÿo5u`Ÿ56t\Ÿ6Ēu`ŸĒĢt\ŸĢ˙u`Ÿ -u`ŸG•u`ŸŸĨu`Ÿ‚uVŸ‚‹P‹îuVŸĢÃuVŸ -uVŸG^uVŸŸĄuVŸ‚P‚¸V¸ãvŸ V-vŸŸĄVîuDĢÃuD -uDG^uDŸĄuDîudŸĢÃudŸ -udŸG^udŸŸĄudŸ”îudŸĢÃudŸ -udŸG^udŸŸĄudŸ”šPšîu\ŸĢÃu\Ÿ -u\ŸG^u\ŸŸĄu\ŸĄîudŸĢÃudŸ -udŸ¤îuWŸĢÃuWŸ -uWŸ¤¯P PÅîudŸĢÃudŸ-udŸÅËPËîu`ŸĢÃu`Ÿ-u`ŸŌîudŸĢÃudŸ-udŸÕîuWŸĢÃuWŸ-uWŸÕāP'Pāîu\ŸĢÃu\Ÿ6au`Ÿ u`ŸWau`Ÿ udŸZaudŸ PZnPu\Ÿr|u\ŸudŸu|udŸ Pu†P*uXŸ‡”uXŸ#*udŸ”udŸ#.PžPĢÍ ŸĢŗu\ŸŗÂPÂÃu\ŸÎØRØ˙uDÎãu\ŸãéPé˙u\Ÿđ˙ŸđüPü˙u`Ÿ/<udŸ5<u`Ÿ5<PI^udŸOYuWŸY]R]^uWŸO]P^•u`ŸdnuWŸnrRr•uWŸdrPs•u\Ÿyƒu`Ÿƒ‡R‡•u`Ÿy‡Pˆ•uXŸŽ•u`ŸŽ•P  P uHßuLßā‘DāûuLûütHü5uLB0ŸB˛uPÛ}uPŋßuPßā‘Hęü0Ÿü5uPB0ŸBÎuDÛ‡uDŋßuDßāPęü0Ÿü5uDB0ŸBŧu@ŋŪWŪßu@ß⑏āęu@ęü0Ÿü5u@pԟUu#TŸŋÅpԟÅßu#TŸßā‘#TŸęûu#TŸûüt#TŸQŋWāęWü5Waßu`Ÿßā‘XŸāęu`Ÿü5u`Ÿn„0Ÿ„ØuTÛčQčĨuTü5uT„čSņĨSüūSS„ÎQÎčVJVhŸQŸĨV5V„PÎs2EPEJshŸs¯1Ÿh•1Ÿ¯Î0Ÿh•1Ÿš¯uPš¯uLš¯uHēĀPĀÎw,yƒPƒ•sēčWyĨWŊÎudŸ€•udŸÃÎu_ŸŠ•u_ŸÃÎPŠŸP$.u_Ÿ.2R25u_Ÿ$2Paę0Ÿü50ŸaŋWāęWü5WĨßu`Ÿßā‘XŸāęu`ŸŽßudŸßā‘\ŸāęudŸŽĩPāįPūu`ŸudŸRudŸPKyVyzu z}t}˜V˜™u ™œ‘œ§V`cuwŸclRlzuwŸz}tsŸĨ§uwŸ`lP`yVyzu z}tĨ§V`xSx}PĨ§SrwPwxsx}prxSx}P°į‘ Æ$‘ qũ‘ ÂVũ‘”ËŌvŌÖPí?‘LŸ?GPGHtHLtLT‘LŸT^R^‘LŸ!P!"t"&t&î‘LŸîųPų)‘LŸ)4P4ũ‘LŸ?‘LŸ?GPGHtHLtLT‘LŸT^R^‘LŸ!P!"t"&t&î‘LŸîųPų)‘LŸ)4P4ũ‘LŸÄVëĮVĮ$0ŸToVoũ0Ÿ N0ŸNs1Ÿ€Į0ŸÄVëĮVToV&)‘DŸ)2R2<‘DŸ&2P&<V&6‘HŸ6<W9<P9<W<ëW W‘HŸ$WTmWoũW<?‘LŸ?GPGHtHLtLë‘LŸ T‘LŸT^R^‘LŸ!P!"t"&t&î‘LŸîųPų$‘LŸTm‘LŸoũ‘LŸ\žx Ÿ\ž‘ŧŸ\l‘ŧ#ŸlqPxžWxž‘ŧŸx‚‘ŧ#Ÿ‚‡PŽž4 ŸŽž‘ŧŸŽ˜pŸ˜P¤ëWe€WĮW‘HŸ$WoũW§ë‘DŸhv‘DŸvzRz€‘DŸĮØ‘DŸØæPæ$‘ oũ‘ §˛PhzP˛Į Ÿ˛Į‘ŧŸ˛ŧpŸŧÁP9S“9;P“;sS“€ĮS“s‘#Ÿ";ō€¨;AsABtBFt"sWNsWNT‘LŸT^R^s‘LŸ€ĮP Ÿ€Į‘ŧŸ€‘ŧ#Ÿ•PœĮWœĮ‘ŧŸœĻ‘ŧ#ŸĻĢPVmW\f‘DŸfjRjm‘DŸ\jP˛ÄVĐëV˛ë,ŸĮ$,Ÿoũ,ŸĶÚvÚŪPÍS“P“S“$S“oqS“Š—S“͡‘#ŸæōßĢæVˇVæ‘LŸ!P!"t"&t&ˇ‘LŸæV0ˇVæW3ˇW3:P’›PA’_ ŸĄˇ_ ŸA’‘ŧŸĄˇ‘ŧŸAQ‘ŧ#ŸQVPZ’sŸĄˇsŸZ’‘ŧŸĄˇ‘ŧŸĄˇ‘ŧŸw’‰Ÿw„pŸ„‰Pˇ$‘ŧŸqũ‘ŧŸÆ$ŸqũŸŪ$‘ äW‘HŸ$WäëP!Pëî‘LŸîųPų‘LŸú‘ŧŸú0Ÿ&)‘LŸ)4P4T‘LŸ5T‘ŧŸ5T0ŸsŠ‘ yƒ‘@Ÿƒ‡R‡Š‘@Ÿy‡PšáWŧÆ‘@ŸÆĘRĘá‘@ŸŧĘPéķ‘@Ÿķ÷R÷ũ‘@Ÿé÷P@Ÿ:VZēVĘ÷VzW|…W‡ĩWēÕWÚøWúWWPĻēPĘÚP:VÚ÷V(+ugŸ+4P4ÚugŸúugŸ(+P+ÚSúüS(:VLÚufŸLSPSZvtŸēĮPĮĘvtŸ˙ ufŸ  R ufŸ˙ P vtŸ1ŸĻSŧ?S8fWŧØWå]W5ĻudŸŧ]udŸRfS Ø‰ Ÿå=‰ Ÿ ŖudŸŖ°P°ØudŸå=udŸå=€ ŸåčudŸčõPõudŸ P udŸ%P%=udŸũ=ƒ ŸũudŸ P udŸ%P%=udŸ=† ŸudŸ%P%=udŸ‡˜udŸĘØudŸ˜ucŸÍØucŸ˜PÍßPEOucŸOSRS]ucŸESP1ŸĻSŧ`SJNPNĻuTŧ~uT7ĻudŸŧ~udŸVgSĀø‰ Ÿ^‰ ŸĀÃudŸÃĐPĐøudŸ^udŸ^€ ŸudŸP udŸ -P-8udŸ8EPE^udŸ^ƒ Ÿ udŸ -P-8udŸ8EPE^udŸ5^† Ÿ58udŸ8EPE^udŸ‡˜udŸęøudŸ˜ucŸíøucŸ˜Pí˙PfpucŸptRt~ucŸftPGP„Ÿ‰œŸHg\ Ÿ‰œ\ Ÿ"P1APPjSjnp|ŸnÉS#,P,1p|ŸJavŸamu#Ÿmnt#ŸnÍu#ŸJMPMjSjnp|ŸnÉSacPckVn„P„ÚVœĮæŸcjSjnp|ŸLqvŸqsu#@Ÿstt#@ŸtĸvŸĸ°u#@Ÿ°ąt#@Ÿąu#@ŸTcPtP­SąSdgPglp|ŸŠĸvğĸ°u#DŸ°ąt#DŸąu#DŸŠP­SąSĸ¤P¤ŽVąĖPĖ"VäæŸ¤­S<dvŸdfu#@Ÿfgt#@ŸgšvŸšĢu#@ŸĢŦt#@ŸŦ u#@ŸDSPgyPˆ¨S¨Ŧp|ŸŦ STZPZgp|Ÿ‚švğšĢu#DŸĢŦt#DŸŦ u#DŸ‚…P…¨S¨Ŧp|ŸŦ SšœPœŠVŦÄPÄ VÜ æŸœ¨S¨Ŧp|Ÿ= e Ve h ph Ļ VĻ Š pŠ  !V= f Wh š W= f wŸh š wŸH W Ph y Pˆ Ĩ SĨ Š p|ŸŠ  !SX [ P[ h p|Ÿ‚ š wğ‚ … P… Ĩ SĨ Š p|ŸŠ  !Sš œ Pœ § WŠ ŗ Pŗ  !WÜ  !柜 Ĩ SĨ Š p|Ÿ^!ˆ!S’!Ú!SÚ!6"v`Ÿ9"Í"S7#<#S<#]#v`Ÿf!Š!Vœ"7#V]#p#Vf!ˆ!Sœ"Í"Sf!Š!ōÆœ"7#ōÆ]#p#ōÆf!ˆ!sŸœ"Í"sŸn!!Pœ"Š"Pģ"Å"RÅ"7#uT]#p#uT‚!ˆ!Pĩ"Í"sğĩ"¸"P¸"Å"RÅ"7#uT]#p#uTÍ"Ī"PĪ"Ú"SÚ"ô"Pô"7#S]#b#Sõ"7#D Ÿ]#p#D Ÿ #7#æŸĪ"Ú"uTĨ!Š!PŠ!8"uT8"9"tP9"œ"uT7#]#uTĨ!Ú!SÚ!6"v`Ÿ9"œ"S7#<#S<#]#v`ŸĨ!6"V9"œ"V7#]#VĨ!œ"ōČ7#]#ōȲ!¸!P¸!8"uP8"9"tL9"T"PT"œ"uP7#]#uPU"œ"Ÿ7#J#Ÿl"œ"æŸÍ!9"ōČJ#]#ōČÍ!6"VJ#]#VÚ!đ!Pđ!5"SJ#O#Sņ!9"ųŸJ#]#ųŸ"9"柎#Ī#W$A$WÛ$ã$WŽ#Ī#wŸ$A$wŸÛ$ã$wŸš#Č#P$$P($F$VÛ$.%VA%T%VÉ#Ī#P"$A$wğÛ$ã$wğ"$%$P%$F$VÛ$.%VA%T%V;$A$PA$F$uTÛ$ô$Pô$.%uTA%T%uTA$F$VÜ#$S$$pF$†$S†$Š$pŠ$Û$S.%3%SÜ#$WF$}$WŠ$“$WÜ#$ōGĖF$Û$ōGĖ.%A%ōGĖÜ#$wŸF$}$wŸŠ$“$wŸį#ö#PF$Y$Ph$‡$V‡$Š$p|ŸŠ$Û$V.%A%V÷#ú#Pú#$p|Ÿb$}$wğŠ$“$wğb$e$Pe$‡$V‡$Š$p|ŸŠ$Û$V.%A%V{$}$P}$‰$uT‰$Š$tPŠ$¤$P¤$Û$uT.%A%uT}$‡$V‡$Š$p|Ÿt%É%SĶ%I&SI&K&w`ŸM&ē&SČ&â'S8(@(S@(M(w`Ÿb(j(Sw((S(Œ(w`Ÿz%É%SM&ē&S'â'Sb(j(Sz%É%sŸM&ē&sŸ'â'sŸb(j(sŸ…%˜%PM&Y&Ph&‰&W'â'Wb(w(W™%Ÿ%Pb&‰&sğ'â'sğb(j(sğb&e&Pe&‰&W'â'Wb(w(W{&&P&‰&uP'“'P“'â'uPb(w(uP&‰&W§%Đ%VĐ%Ķ%p‰&Č&Vâ'8(VM(b(V§%É%S‰&ē&S§%Ķ%ōČΉ&Č&ōČĪâ'8(ōČĪM(b(ōČΧ%É%sŸ‰&ē&sŸ¯%Â%P‰&™&P¨&Č&Wâ'8(WM(b(WÃ%É%Pĸ&ē&sğĸ&Ĩ&PĨ&Č&Wâ'8(WM(b(Wē&Ā&PĀ&Č&Sâ'ë'Pë'8(SM(U(SĀ&Č&WĶ%I&SI&K&w`ŸČ&'S8(@(S@(M(w`Ÿw((S(Œ(w`ŸÛ%K&WČ&'W8(M(Ww(Œ(WÛ%M&ōhŅČ&'ōhŅ8(M(ōhŅw(Œ(ōhŅė%ō%Pō%&uP0'3'P3''uPw(Œ(uPH''Ÿw(Œ(Ÿ_''æŸ÷%M&ōhŅČ&0'ōhŅ8(M(ōhŅ&J&VČ&0'V8(M(V&I&SI&K&w`ŸČ&0'S8(@(S@(M(w`Ÿ&K&WČ&0'W8(M(W&M&ō¸ŌČ&0'ō¸Ō8(M(ō¸Ō&&,&P,&L&uLL&M&tHČ&Ķ&PĶ&0'uL8(M(uLč&0'Ÿ8(M(Ÿ˙&0'æŸ5&M&ō¸Ō ‘ 2S27s|Ÿ7DSSs|Ÿ2S2;s|Ÿ‘oŸ$/‘oŸ/6R6;‘oŸP$6P))P)F)R))pøŸ )3)‘ ).)P.)3)‘#q))Vq))vŸ}))V?*Í*WÍ*†5‘Ôz†5æ5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘ÔzB*í4‘œ}Ÿí45S5Ü5‘œ}ŸÜ5ā5Rā5Ą8‘œ}ŸĒ8=‘œ}ŸŖ@C‘œ}ŸCCSCōC‘œ}ŸōCôCSôCųC‘œ}ŸųCûCSûCqD‘œ}ŸB*M*PÖ5ā5PM*Ö5‘Đzæ5Ą8‘ĐzĒ8=‘ĐzŖ@qD‘ĐzV*Í*WÍ*†5‘Ôz†5Ö5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘ÔzV*a*PÆ5Đ5Pa*Æ5‘Ėzæ5Ą8‘ĖzĒ8=‘ĖzŖ@qD‘Ėzj*Í*WÍ*†5‘Ôz†5Æ5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘Ôzj*u*Pļ5Ā5Pu*ļ5‘Øzæ5Ą8‘ØzĒ8=‘ØzŖ@qD‘Øz~*Í*WÍ*†5‘Ôz†5ļ5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘Ôz~*‰*PĻ5°5P‰*0‘Ŧ}Ÿ0,0Q,0†2‘Ŧ}Ÿ†2Ž2PŽ2Ļ5‘Ŧ}Ÿæ5Ą8‘Ŧ}ŸĒ8=‘Ŧ}ŸŖ@qD‘Ŧ}Ÿ’*Í*WÍ*†5‘Ôz†5Ļ5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘Ôz’**P–5 5P*–5‘Čzæ5Ą8‘ČzĒ8=‘ČzŖ@qD‘ČzĻ*Í*WÍ*†5‘Ôz†5–5Wæ5Ą8‘ÔzĒ8†=‘Ôz†==WŖ@qD‘ÔzĻ*ą*P†55Pé+<-V<-65‘¤{Ÿ65†5Væ56‘¤{Ÿ6†6V†6†8‘¤{ŸĒ8č9‘¤{Ÿč9ũ9Vũ9õ;‘¤{Ÿt=‚=‘¤{ŸÛ@qD‘¤{Ÿė+†5‘Ôzæ5†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôzė+÷+Pv5€5P÷+v5‘ {Ÿæ5†8‘ {ŸĒ8õ;‘ {Ÿt=‚=‘ {ŸÛ@qD‘ {Ÿ,v5‘Ôzæ5†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz, ,Pf5p5P ,f5‘˜{Ÿæ5†8‘˜{ŸĒ8õ;‘˜{Ÿt=‚=‘˜{ŸÛ@qD‘˜{Ÿ,f5‘Ôzæ5†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz,,PV5`5P,V5‘”{Ÿæ5†8‘”{ŸĒ8õ;‘”{Ÿt=‚=‘”{ŸÛ@qD‘”{Ÿ(,V5‘Ôzæ5†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz(,3,PF5P5P3,F5‘Œ{Ÿæ5†8‘Œ{ŸĒ8õ;‘Œ{Ÿt=‚=‘Œ{ŸÛ@qD‘Œ{Ÿ<,F5‘Ôzæ5†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz<,G,Pv6€6PG,F5‘ˆ{Ÿæ5v6‘ˆ{Ÿ†6†8‘ˆ{ŸĒ8õ;‘ˆ{Ÿt=‚=‘ˆ{ŸÛ@qD‘ˆ{ŸP,F5‘Ôzæ5v6‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘ÔzP,[,Pf6p6P[,F5‘„{Ÿæ5f6‘„{Ÿ†6†8‘„{ŸĒ8õ;‘„{Ÿt=‚=‘„{ŸÛ@qD‘„{Ÿd,F5‘Ôzæ5f6‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôzd,o,PV6`6Po,F5‘€{Ÿæ5V6‘€{Ÿ†6†8‘€{ŸĒ8õ;‘€{Ÿt=‚=‘€{ŸÛ@qD‘€{Ÿx,F5‘Ôzæ5V6‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôzx,ƒ,PF6P6Pƒ,F5‘üzŸæ5F6‘üzŸ†6†8‘üzŸĒ8õ;‘üzŸt=‚=‘üzŸÛ@qD‘üzŸŒ,F5‘Ôzæ5F6‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘ÔzŒ,—,P66@6P—,F5‘øzŸæ566‘øzŸ†6†8‘øzŸĒ8õ;‘øzŸt=‚=‘øzŸÛ@qD‘øzŸ ,F5‘Ôzæ566‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz ,Ģ,P&606PĢ,F5‘{Ÿæ5&6‘{Ÿ†6†8‘{ŸĒ8õ;‘{Ÿt=‚=‘{ŸÛ@qD‘{Ÿ´,F5‘Ôzæ5&6‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz´,ŋ,P6 6Pŋ,F5‘œ{Ÿæ56‘œ{Ÿ†6†8‘œ{ŸĒ8õ;‘œ{Ÿt=‚=‘œ{ŸÛ@qD‘œ{ŸČ,F5‘Ôzæ56‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘ÔzČ,Ķ,P66PĶ,F5‘¨{Ÿæ56‘¨{Ÿ†68‘¨{Ÿ8…8R…8†8‘¨{ŸĒ8õ;‘¨{Ÿt=‚=‘¨{ŸÛ@qD‘¨{ŸÜ,F5‘Ôzæ56‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘ÔzÜ,į,P65@5Pį,65‘Øzæ56‘Øz†6†8‘ØzĒ8õ;‘Øzt=‚=‘ØzÛ@qD‘Øz -65‘Ôzæ56‘Ôz†6†8‘ÔzĒ8õ;‘Ôzt=‚=‘ÔzÛ@qD‘Ôz -65‘Øzæ56‘Øz†6†8‘ØzĒ8õ;‘Øzt=‚=‘ØzÛ@qD‘Øzę9ũ9‘Øzđ9ũ9‘Øz#‘Øz4Ÿđ9ũ9P7-‚-S565Sũ9:S7-65‘Ėzæ56‘Ėz†6_8‘ĖzĒ8č9‘Ėzũ9õ;‘Ėzt=‚=‘ĖzÛ@qD‘Ėza-‚-S565Sũ9:Sa-i-Pi-k-v2&Ÿ5+5P+565v2&Ÿũ9:P::v2&Ÿa-65‘Ėzæ56‘Ėz†6_8‘ĖzĒ8č9‘Ėzũ9õ;‘Ėzt=‚=‘ĖzÛ@qD‘Ėz5+5P+565v2&Ÿũ9:P::v2&Ÿ5650Ÿũ9:0Ÿˆ-Ī-W†6Ÿ6W;;WKDqDWˆ-51Ÿæ561Ÿ†6W71Ÿ{7U81ŸĒ8č91Ÿ:Ũ:1Ÿä:õ;1Ÿt=‚=1ŸÛ@qD1Ÿ’-Š-S“;;S“KDMDS“ˆ-’-W’-Ũ-V†6Ÿ6W;;VKDqDV’-¯-S¯-Ŋ-s|Ÿ;;SKDMDS’-Ŧ-VŦ-Ũ-v|Ÿ;;VKDqDV ;;VKDqDV ;;WKDqDWXDdD‘Ėz#‘Ėz4ŸXDhDP`DdD‘Ėz#‘Ėz4Ÿ`DhDPÉ-5‘Ėzæ56‘Ėz’6W7‘Ėz{7U8‘ĖzĒ8č9‘Ėz:Ũ:‘Ėzä:;‘Ėz;õ;‘Ėzt=‚=‘ĖzÛ@KD‘ĖzÉ-5‘Øzæ56‘Øz’6W7‘Øz{7U8‘ØzĒ8č9‘Øz:Ũ:‘Øzä:;‘Øz;õ;‘Øzt=‚=‘ØzÛ@KD‘ØzÉ-.S“..s|Ÿ“.5.S“’6Ÿ6‘Ä}“ä:ö:S“Ũ-å-så-é-tđ-l.1Ÿä:;1Ÿ.l.ōÖæä:ë:ōÖæ%.l.‘Ėz’6Ÿ6‘Ėzä:ë:‘Ėz%.5.S’6Ÿ6‘Ä}ä:ë:S%.7.W’6Ÿ6‘Ä}ä:ë:W%.l.W’6Ÿ6‘Ä}ä:ë:W7.C.WC.G.w|ŸG.`.W`.l.w|Ÿ7.G.‘ÔzL.l.‘ÔzL.].Pl.5‘Ėzæ56‘ĖzŸ6W7‘Ėz{7U8‘ĖzĒ8č9‘Ėz:Ũ:‘Ėz;õ;‘Ėzt=‚=‘ĖzÛ@KD‘Ėzl.t.‘Ėz#‘Ėz4Ÿl.ĸ.Vp.t.‘Ėz#‘Ėz4Ÿp.|.V|.‰.‘đz|.5‘Øzæ56‘ØzŸ6W7‘Øz{7U8‘ØzĒ8č9‘Øz:Ũ:‘Øz;õ;‘Øzt=‚=‘ØzÛ@KD‘Øz.51Ÿæ561ŸŸ6W71Ÿ{7U81ŸĒ8č91Ÿ:Ũ:1Ÿ;õ;1Ÿt=‚=1ŸÛ@KD1Ÿˇ.Á.‘ôzˇ.5‘Øzæ56‘ØzŸ6W7‘Øz{7U8‘ØzĒ8č9‘Øz:Ũ:‘Øz;õ;‘Øzt=‚=‘ØzÛ@KD‘ØzČ.51Ÿæ561ŸŸ6W71Ÿ{7U81ŸĒ8č91Ÿ:Ũ:1Ÿ;õ;1Ÿt=‚=1ŸÛ@KD1Ÿū.ˆ/Sˆ/5‘Ŧ{Ÿæ5ö5‘Ŧ{Ÿö56SŸ6W7‘Ŧ{Ÿ{7U8‘Ŧ{ŸĒ8č9‘Ŧ{Ÿ:Ũ:‘Ŧ{Ÿ;õ;‘Ŧ{Ÿt=‚=‘Ŧ{ŸÛ@Ũ@SŨ@KD‘Ŧ{Ÿū.5Ÿæ56ŸŸ6W7Ÿ{7U8ŸĒ8č9Ÿ:Ũ:Ÿ;õ;Ÿt=‚=ŸÛ@KDŸ/ˆ/Sˆ/5‘Ŧ{Ÿæ5ö5‘Ŧ{Ÿö56SŸ6W7‘Ŧ{Ÿ{7U8‘Ŧ{ŸĒ8č9‘Ŧ{Ÿ:Ũ:‘Ŧ{Ÿ;õ;‘Ŧ{Ÿt=‚=‘Ŧ{ŸAKD‘Ŧ{Ÿ/5‘Ôzæ56‘ÔzŸ6W7‘Ôz{7U8‘ÔzĒ8č9‘Ôz:Ũ:‘Ôz;õ;‘Ôzt=‚=‘ÔzAKD‘Ôz/ /Pö56P@/t/‘¤}@/t/‘Øzc//0 ˙Ÿ/000P00‚0Sã0ņ0 ˙Ÿņ0÷0P÷0i1Si1z1‘# ā1€2 ˙Ÿ2Ü2 ˙Ÿî2ö2SŖ3Ę3S\45 ˙Ÿ{78 ˙Ÿ(8U8 ˙ŸĒ8I9 ˙ŸI9‡9SŲ:Û:SAÜA ˙Ÿ_B{B ˙ŸCCSCD ˙Ÿ˛/Ė/ã0ė02œ2/”/PĒ/Ė/Pã0ė0P2œ2PC7C‘Čz%C2C‘ü|Ÿ2C6CR6C7C‘ü|Ÿ%C6CP7CRC‘œ}Ÿ@CMC‘ü|ŸMCQCRQCRC‘ü|Ÿ@CQCPRCmC‘Äz[ChC‘ü|ŸhClCRlCmC‘ü|Ÿ[ClCPmCˆC‘”}ŸvCƒC‘ü|ŸƒC‡CR‡CˆC‘ü|ŸvC‡CPˆCŖC‘ˆ}Ÿ‘CžC‘ü|ŸžCĸCRĸCŖC‘ü|Ÿ‘CĸCPŖCžC‘„}ŸŦCšC‘ü|ŸšCŊCRŊCžC‘ü|ŸŦCŊCPžCŲC‘€}ŸĮCÔC‘ü|ŸÔCØCRØCŲC‘ü|ŸĮCØCPŲCōC‘}ŸâCōC‘ĖzâCōCPÖ/å/På/j0Vā1æ1VĒ8Đ8Vî/ū/Pū/J0Wā12WĒ8ļ8PtB{BWô/ã0@Ÿā1€2@ŸŸ6W7@Ÿ{78@Ÿ(8U8@Ÿt=‚=@Ÿ_B{B@ŸūBC@Ÿ00wp"Ÿ0,0Pā1æ1v@r””0.(w"ŸĄ6ŧ6‘ŧ|ŸĒ6ŧ6‘ČzĒ6ģ6Pŧ6×6VÅ6×6‘ČzÅ6Ö6P×6ō6‘´|Ÿā6ō6‘Čzā6ņ6Pō6 7‘¨|Ÿû6 7‘Čzû6 7P 7(7‘¤|Ÿ7(7‘Čz7'7P(7C7‘ |Ÿ17C7‘Čz17B7PC7W7‘°|ŸL7W7‘ĖzL7W7P}7˜7‘Ø|Ÿ†7˜7‘Čz†7—7P˜7ŗ7‘Ô|ŸĄ7ŗ7‘ČzĄ7˛7Pŗ7Î7‘Č|Ÿŧ7Î7‘Čzŧ7Í7PÎ7é7‘Ä|Ÿ×7é7‘Čz×7č7Pé78‘Ā|Ÿō78‘Čzō78P88‘Đ|Ÿ 88‘Ėz 88P18U8V:8U8‘Čz:8O8PAA‘ü|Ÿ AA‘Čz AAPA9AV'A9A‘Čz'A8AP9ATA‘ô|ŸBATA‘ČzBASAPTAoA‘č|Ÿ]AoA‘Čz]AnAPoAŠA‘ä|ŸxAŠA‘ČzxA‰APŠAĨA‘ā|Ÿ“AĨA‘Čz“A¤APĨAžA‘đ|ŸŽAžA‘ĖzŽAžAP˙01P1-1PI9U9P;:;‘œ|Ÿ(;:;‘Čz(;9;P:;U;VC;U;‘ČzC;T;PU;p;‘”|Ÿ^;p;‘Čz^;o;Pp;‹;‘|Ÿy;‹;‘Čzy;Š;P‹;Ļ;‘„|Ÿ”;Ļ;‘Čz”;Ĩ;PĻ;Á;‘€|Ÿ¯;Á;‘Čz¯;Ā;PÁ;Ü;‘ü{ŸĘ;Ü;‘ČzĘ;Û;PÜ;õ;‘Œ|Ÿå;õ;‘Ėzå;õ;PĻ:ŋ:‘ė{Ÿ¯:ŋ:‘Ėz¯:ŋ:P::‘ø{Ÿ ::‘Čz ::P:::V(:::‘Čz(:9:P::U:‘đ{ŸC:U:‘ČzC:T:PU:p:‘ä{Ÿ^:p:‘Čz^:o:Pp:‹:‘ā{Ÿy:‹:‘Čzy:Š:P‹:Ļ:‘Ü{Ÿ”:Ļ:‘Čz”:Ĩ:P-141PO1W1PŪAųA‘¸{ŸįAųA‘ĐzįAøAPųAB‘´{ŸBB‘ĐzBBPB/B‘°{ŸB/B‘ĐzB.BP/BSB‘ŧ{Ÿ8BSB‘Đz8BMBP}B˜B‘Ė{Ÿ†B˜B‘Đz†B—BP˜BŗBVĄBŗB‘ĐzĄB˛BPŗBÎB‘Ä{ŸŧBÎB‘ĐzŧBÍBPÎBōBW×BōB‘Đz×BėBPT1ā1‘Ü2î2‘æ5ö5‘]1ā1‘Ü2î2‘æ5ö5‘]1z1‘¤}p1ā1‘ØzÜ2î2‘Øzæ5ö5‘Øzp1ˆ1S“ˆ11s|Ÿ“1Ü1S“Ü2î2S“æ5ö5S“p1ā1ōÜ2î2ōæ5ö5ōp1ž1‘Øz#Ÿ1ž1ōž1ā1‘ØzÜ2î2‘Øzæ5ö5‘Øzž1Ļ1‘Øz#‘Øz4Ÿž1Ē1Pĸ1Ļ1‘Øz#‘Øz4Ÿĸ1Ē1Pp1ā11ŸÜ2î21Ÿæ5ö51Ÿp1ā1‘Ü2î2‘æ5ö5‘Ž1ā1‘ôzŸÜ2î2‘ôzŸæ5ö5‘ôzŸˇ1ā1‘ÔzÜ2î2‘Ôzæ5ö5‘Ôzˇ1Â1Pæ5đ5PÂ1ā1‘đzŸÜ2î2‘đzŸË1ā1‘ÔzÜ2î2‘ÔzË1Ø1PÜ2æ2PW7{7‘ØzU8_8‘Øz]7q7V“q7v7v|Ÿ“v7{7V“U8_8V“W7{7ōí U8_8ōí v7{7ōí U8_8‘Øz[8_8‘Øz#‘Øz4Ÿ[8_8P_8g8Pk8†8‘ôzŸt88‘¨{Ÿ8…8R…8†8‘¨{Ÿt8…8P†8Ą8‘đzŸ8œ8‘ëzŸœ8 8R 8Ą8‘ëzŸ8 8P÷;<V<<‘Ôz<<P<-<‘ {Ÿ<-<‘Ôz<,<P-<H<‘˜{Ÿ6<H<‘Ôz6<G<PH<c<‘”{ŸQ<c<‘ÔzQ<b<Pc<~<‘Œ{Ÿl<~<‘Ôzl<}<P~<™<‘ˆ{Ÿ‡<™<‘Ôz‡<˜<P™<´<‘„{Ÿĸ<´<‘Ôzĸ<ŗ<P´<Ī<‘€{ŸŊ<Ī<‘ÔzŊ<Î<PĪ<ę<‘üzŸØ<ę<‘ÔzØ<é<Pę<=‘øzŸķ<=‘Ôzķ<=P= =‘{Ÿ= =‘Ôz==P =;=‘œ{Ÿ)=;=‘Ôz)=:=P;=_=‘¨{ŸD=_=‘ÔzD=Y=P=Ē=W˜=Ĩ=‘œ}ŸĨ=Š=RŠ=Ē=‘œ}Ÿ˜=Š=PĒ=Å=‘Đzŗ=Ā=‘œ}ŸĀ=Ä=RÄ=Å=‘œ}Ÿŗ=Ä=PÅ=ā=‘ĖzÎ=Û=‘œ}ŸÛ=ß=Rß=ā=‘œ}ŸÎ=ß=Pā=û=‘Øzé=ö=‘œ}Ÿö=ú=Rú=û=‘œ}Ÿé=ú=Pû=>‘Ŧ}Ÿ>>‘œ}Ÿ>>R>>‘œ}Ÿ>>P>:>‘Čz>0>‘œ}Ÿ0>4>R4>:>‘œ}Ÿ>4>PĢ?Æ?W´?Á?‘”}ŸÁ?Å?RÅ?Æ?‘”}Ÿ´?Å?PÆ?á?‘Ė}ŸĪ?Ü?‘”}ŸÜ?ā?Rā?á?‘”}ŸĪ?ā?Pá?ü?‘Ā}Ÿę?÷?‘”}Ÿ÷?û?Rû?ü?‘”}Ÿę?û?Pü?@‘ }Ÿ@@‘”}Ÿ@@R@@‘”}Ÿ@@P@2@‘œ}Ÿ @-@‘”}Ÿ-@1@R1@2@‘”}Ÿ @1@P2@M@‘˜}Ÿ;@H@‘”}ŸH@L@RL@M@‘”}Ÿ;@L@PM@q@‘´}ŸV@g@‘”}Ÿg@k@Rk@q@‘”}ŸV@k@PŨ@A‘Ŧ{Ÿæ@A‘Ôzæ@û@P€D˜DR˜DAESAEEEķRŸEEmESmEēEķRŸēEåESåE)FķRŸ)FUFSUFœFķRŸœFžFSžFŧFķRŸŧFÁFSÁFĪFķRŸĪFŅFSŅFíFķRŸíFīFSīFHGķRŸŽD˜DR˜DAESAEEEķRŸEEmESmEēEķRŸēEåESåE)FķRŸ)FUFSUFœFķRŸœFžFSžFŧFķRŸŧFÁFSÁFĪFķRŸĪFŅFSŅFíFķRŸíFīFSīFHGķRŸ¤D¯Eą Ÿ)FœFą ŸŧFíFą ŸīFøFą ŸG0Gą ŸGSiF†FV†FœFv|ŸG0GVGSG0GSGSG0GuPSP>SLSw<ŸŠU°UP;SLSuDŸąUÂUuDŸASLSu`ŸˇUÂUu`ŸASLSPˇUÉUP“S¸SW¸S\UuPŸ\U]UtLŸĪUõUWõU]VuPŸ]V^VtLŸ^V‚VuPŸW*WuPŸ5WbWuPŸŗWžWuPŸ–S\Uu`Ÿ\U]Ut\ŸĪU]Vu`Ÿ]V^Vt\Ÿ^V‚Vu`ŸW*Wu`Ÿ5WbWu`ŸŗWžWu`Ÿ–S¤SP¤S˛Sw<ŸĪUÖUPĄS˛SuLŸ×UčUuLŸ§S˛Su`ŸŨUčUu`Ÿ§S˛SPŨUīUPôS\UuTŸ\U]UtPŸõU]VuTŸ]V^VtPŸ^V‚VuTŸW*WuTŸŗWēWuTŸ÷S\UudŸ\U]Ut`ŸõU]VudŸ]V^Vt`Ÿ^V‚VudŸW*WudŸŗWēWudŸ÷STPTTuT<ŸõUüUPTTWũUVuXŸTTudŸVVudŸTTPVVPQT\Uu`Ÿ\U]Ut\ŸV]Vu`Ÿ]V^Vt\ŸW*Wu`ŸTT\UudŸ\U]Ut`ŸV]VudŸ]V^Vt`ŸW*WudŸTTbTPbTpTu`<ŸV"VP_TpTu\Ÿ#V4Vu\ŸeTpTudŸ)V4VudŸeTpTP)V;VPpTYUSAVZVSWWSW*Wu …T\UudŸ\U]Ut`ŸAV]VudŸ]V^Vt`ŸW*WudŸ…TZUVAV[VVW*WV’T]U\ ŸAV^V\ Ÿ’TžTPĨT\UudŸ\U]Ut`ŸAV]VudŸ]V^Vt`Ÿ¨T\Uu`Ÿ\U]Ut\ŸAV]Vu`Ÿ]V^Vt\Ÿ¨TŗTPAVHVPŗTÅT0ŸÅTUWŗTYUSNVZVSŗTUs ŸU]UŊ ŸNV^VŊ ŸUZUVNV[VV'U\Uu°Ÿ\U]UtŦŸNV]Vu°Ÿ]V^VtŦŸ4U]U\ ŸNV^V\ Ÿ4U@UPGU\Uu°Ÿ\U]UtŦŸNV]Vu°Ÿ]V^VtŦŸJU\UudŸ\U]Ut`ŸNV]VudŸ]V^Vt`ŸJU]UPNVUVP`VuVu`ŸfVpVudŸpVtVRtVuVudŸfVtVPuV‚Vu\Ÿ{V‚VudŸ{V‚VP‚V Vu°ŸˆV’Vu¯Ÿ’V–VR–V Vu¯ŸˆV–VPĸVˇVu´Ÿ¨V˛VudŸ˛VļVRļVˇVudŸ¨VļVPˇVÄVu¸ŸŊVÄVudŸŊVÄVPĐVŨVuDŸÖVŨVu`ŸÖVŨVPW*WudŸW*Wu`ŸW*WPéVūVuPŸīVųVu`ŸųVũVRũVūVu`ŸīVũVPūVWuLŸWWu`ŸWWP7WLWuTŸ=WGWudŸGWKWRKWLWudŸ=WKWPLWbWuXŸRWbWudŸRWbWPdWzWuŧŸjWzWu`ŸjWzWP|WšWuHŸ‚WWu`ŸW”WR”WšWu`Ÿ‚W”WPœWŗWu@ŸĸWŦWu`ŸŦW°WR°WŗWu`ŸĸW°WPîWŊ] ŸÛ]C_ ŸJ_q_ ŸîWs\Wu\*]W,]Ŋ]WÛ]C_WJ_q_WXPXu ŸPX[XP[Xt\u Ÿt\u\tœŸu\+]u Ÿ+],]tœŸ,]Ŋ]u ŸÛ]C_u ŸJ_q_u ŸXXPX[u u\ö\u ,]Œ]u ™]Ŋ]u Û]˙]u ^ē^u _C_u J_q_u X!XP!X%Xu #$%X‘Xu”,]V]u”+_C_u”J_c_u”bXąXSąXt\u¨Ÿt\u\t¤Ÿu\+]u¨Ÿ+],]t¤Ÿ,]V]SV]Ŋ]u¨ŸÛ]^u¨Ÿ"^+_u¨Ÿc_q_u¨ŸeXt\u`Ÿt\u\t\Ÿu\+]u`Ÿ+],]t\Ÿ,]Ŋ]u`ŸÛ]^u`Ÿ"^+_u`Ÿc_q_u`ŸeXsXPsXXs<Ÿ,]5]PpXXV6]G]u¤ŸvXXu`Ÿ<]G]u`ŸvXXP<]P]PX[u u\ö\u V]Œ]u ™]Ŋ]u Û]˙]u ^^u "^ē^u _+_u c_q_u ‘X”XP”X˜Xu #$˜XKYu”V]€]u” ^^u”"^P^u” _+_u”ÕX YS Yt\u°Ÿt\u\tŦŸu\+]u°Ÿ+],]tŦŸV]€]S€]Ŋ]u°ŸÛ]^u°ŸP^+_u°Ÿc_q_u°ŸØXt\u`Ÿt\u\t\Ÿu\+]u`Ÿ+],]t\ŸV]Ŋ]u`ŸÛ]^u`ŸP^+_u`Ÿc_q_u`ŸØXæXPæXôXs<ŸV]_]PãXôXV`]q]uŦŸéXôXu`Ÿf]q]u`ŸéXôXPf]z]PôX[u u\ö\u €]Œ]u ™]Ŋ]u Û]˙]u ^^u P^ē^u _+_u c_q_u YKYu” ^^u” _+_u”HY„YS„Yt\u¸Ÿt\u\t´Ÿu\ļ\u¸Ÿļ\Ã\SÃ\+]u¸Ÿ+],]t´Ÿ€]Œ]SŒ]Ŋ]u¸ŸÛ] ^u¸ŸP^ _u¸Ÿc_q_u¸ŸNYYYQYYÆ[u”Æ[t\u`Ÿt\u\t\Ÿu\]u”]+]u`Ÿ+],]t\Ÿ€]†]Q†]Ŋ]u”Û] ^u”P^ _u”c_q_u”NYYYP€]†]PYYt\u´Ÿt\u\t°Ÿu\+]u´Ÿ+],]t°ŸŒ]Ŋ]u´ŸÛ] ^u´ŸP^ _u´Ÿc_q_u´Ÿ_Yt\u`Ÿt\u\t\Ÿu\+]u`Ÿ+],]t\ŸŒ]Ŋ]u`ŸÛ] ^u`ŸP^ _u`Ÿc_q_u`Ÿ_YjYPļ\Ŋ\P¨YįYSįYt\uŧŸt\u\t¸Ÿu\ļ\uŧŸÃ\é\Sé\+]uŧŸ+],]t¸ŸŒ]™]uŧŸÛ]˙]uŧŸP^ _uŧŸj_q_uŧŸĢYt\udŸt\u\t`Ÿu\ļ\udŸÃ\+]udŸ+],]t`ŸŒ]™]udŸÛ]˙]udŸP^ _udŸj_q_udŸĢYšYPšYĮYs<ŸÃ\Ę\PļYĮYVË\Ü\u@ŸŧYĮYudŸŅ\Ü\udŸŧYĮYPŅ\ã\PĮY[u u\ļ\u é\ö\u Û]˙]u P^ē^u j_q_u ĮYŲYu #$ŲYäYP ZNZSNZt\uHŸt\u\tDŸu\œ\uHŸœ\Š\SŠ\ļ\uHŸé\ö\Sö\+]uHŸ+],]tDŸŒ]™]uHŸP^ _uHŸZt\udŸt\u\t`Ÿu\ļ\udŸé\+]udŸ+],]t`ŸŒ]™]udŸP^ _udŸZZPé\đ\PZt\uDŸt\u\t@Ÿu\ļ\uDŸö\+]uDŸ+],]t@ŸŒ]™]uDŸP^ _uDŸ!Zt\udŸt\u\t`Ÿu\ļ\udŸö\+]udŸ+],]t`ŸŒ]™]udŸP^ _udŸ!Z,ZPœ\Ŗ\P,Z[u u\œ\u Š\ļ\u P^ē^u ,Z>Zu #$>ZIZPrZžZSžZt\uPŸt\u\tLŸu\\uPŸ\œ\SŠ\ļ\Sö\+]uPŸ+],]tLŸŒ]™]uPŸP^‰^uPŸē^ _uPŸuZt\udŸt\u\t`Ÿu\œ\udŸŠ\ļ\udŸö\+]udŸ+],]t`ŸŒ]™]udŸP^‰^udŸē^ _udŸuZ€ZPŠ\°\P€Zt\uLŸt\u\tHŸu\œ\uLŸö\+]uLŸ+],]tHŸŒ]™]uLŸP^‰^uLŸē^ _uLŸ†Zt\udŸt\u\t`Ÿu\œ\udŸö\+]udŸ+],]t`ŸŒ]™]udŸP^‰^udŸē^ _udŸ†Z‘ZP\–\PâZ[Su\\SåZ[u`Ÿu\\u`ŸåZđZP‚\‰\PđZ[uTŸu\‚\uTŸöZ[u`Ÿu\‚\u`ŸöZ[Pu\|\P[[u [[u #$[t\ut\u\tŒö\+]u+],]tŒŒ]™]uē^ _u![t\u\Ÿt\u\tXŸö\+]u\Ÿ+],]tXŸŒ]™]u\Ÿē^ _u\Ÿ![s\Wö\*]WŒ]™]Wē^ _W1[t\u\Ÿt\u\tXŸö\+]u\Ÿ+],]tXŸŒ]™]u\ŸŌ^ _u\Ÿ4[t\udŸt\u\t`Ÿö\+]udŸ+],]t`ŸŒ]™]udŸŌ^ _udŸ4[?[PŒ]“]P[t\u`Ÿt\u\t\Ÿö\+]u`Ÿ+],]t\Ÿ„[t\u\Ÿt\u\tXŸö\+]u\Ÿ+],]tXŸ„[’[P’[ [u`<Ÿö\ũ\P[ [udŸū\]udŸ•[ [u`Ÿ]]u`Ÿ•[ [P]]P´[Æ[0ŸÆ[,\S´[ŋ[Pŋ[ų[u #\,\u š[Æ[V#\,\u #$ŧ[Æ[vԟ#\,\ u #$#TŸÆ[#\S#\,\sŸÆ[ų[u #\,\u #$æ[ķ[s2$q"Æ[,\ ˙Ÿ#\,\ u #$#`Ÿ,\u\㠟],]㠟,\s\W]*]WB\t\u Ÿt\u\tœŸ]+]u Ÿ+],]tœŸ_\t\u Ÿt\u\tœŸ]+]u Ÿ+],]tœŸb\t\udŸt\u\t`Ÿ]+]udŸ+],]t`Ÿb\u\P]#]P›]°]uŧŸĄ]Ģ]udŸĢ]¯]R¯]°]udŸĄ]¯]P°]Ŋ]u@Ÿļ]Ŋ]udŸļ]Ŋ]PŊ]Û]u ŸÃ]Í]uŸŸÍ]Ņ]RŅ]Û]uŸŸÃ]Ņ]PŨ]ō]uHŸã]í]udŸí]ņ]Rņ]ō]udŸã]ņ]Pō]˙]uDŸø]˙]udŸø]˙]Pŧ^Ō^u\ŸÂ^Ō^udŸÂ^Ō^P ^^u´Ÿ^^u`Ÿ^^P$^9^u°Ÿ*^4^u`Ÿ4^8^R8^9^u`Ÿ*^8^P9^L^uŦŸ?^L^u`Ÿ?^L^PR^g^uXŸX^g^u`ŸX^f^Pg^…^uTŸm^…^u`Ÿm^^P‹^ ^uPŸ‘^›^udŸ›^Ÿ^RŸ^ ^udŸ‘^Ÿ^P ^ļ^uLŸĻ^ļ^udŸĻ^ļ^PÔ^é^u`ŸÚ^ä^u\Ÿä^č^Rč^é^u\ŸÚ^č^Pé^_udŸī^ũ^u\Ÿũ^_R__u\Ÿī^_P _+_u¸Ÿ_!_u`Ÿ!_%_R%_+_u`Ÿ_%_P-_C_u¤Ÿ3_C_u`Ÿ3_C_PL_c_u¨ŸR_\_u`Ÿ\_`_R`_c_u`ŸR_`_P€_Ã_0Ÿņ_ `0Ÿ ``P`§bu”~§b¨bt~¨bŌbu”~ŌbĶbt~Ķbcu”~Gcjc0Ÿjc§cu”~Žcdu”~•_˜_vŸ˜_ž_Pž_Š`vŸŠ`§bu#Ÿ§b¨bt#Ÿ¨bŌbu#ŸŌbĶbt#ŸĶbcu#ŸGcjcvŸjc€cu#Ÿc§cu#ŸŽcdu#Ÿƒ_Œ_u ~ŸŒ_*`S*`§bu ~Ÿ§b¨btœ~Ÿ¨bŌbu ~ŸŌbĶbtœ~ŸĶbGcu ~ŸGcIcSIcKcu ~ŸKcMcSMcdu ~ŸMcjcu ~ŸVcccuŦ~ŸccgcRgcjcuŦ~ŸVcgcPņ_c Ÿjc§c ŸŽcd Ÿņ_`v`cHŸjc§cHŸŽcdHŸ`…`uŦ~Ÿ…`ˆ`Pˆ`auŦ~Ÿa”aP”a§buŦ~Ÿ§b¨bt¨~Ÿ¨bŌbuŦ~ŸŌbĶbt¨~ŸĶbcuŦ~Ÿjc§cuŦ~ŸŽcduŦ~Ÿ``uā~Ÿ`#`P#`oauā~ŸoataPta§buā~Ÿ§b¨btÜ~Ÿ¨bŌbuā~ŸŌbĶbtÜ~ŸĶbcuā~Ÿjc§cuā~ŸŽcduā~Ÿōcķctķc÷cth`…`uŦ~Ÿ…`ˆ`Pˆ`auŦ~Ÿa”aP”a§buŦ~Ÿ§b¨bt¨~Ÿ¨bŌbuŦ~ŸŌbĶbt¨~ŸĶbcuŦ~Ÿjc§cuŦ~ŸŽcduŦ~ŸĨ`‡aW‡a§bu´~Ÿ§b¨bt°~Ÿ¨bŌbu´~ŸŌbĶbt°~ŸĶbcu´~Ÿc§cWŽcÔcu´~ŸÔcícWícdu´~Ÿc§cuŦ~Ÿô`cHŸŽcdHŸô`Jau¸~ŸJaoaPoapatpatatta§bu¸~Ÿ§b¨bt´~Ÿ¨bŌbu¸~ŸŌbĶbt´~ŸĶbcu¸~ŸŽcdu¸~Ÿ^aoap$Ÿoapat#$Ÿpatat#$Ÿta§buÜ~Ÿ§b¨btØ~Ÿ¨bŌbuÜ~ŸŌbĶbtØ~ŸĶbcuÜ~ŸŽcduÜ~ŸhatauÜ~lcrcuā~Ÿrc„cP„ccuā~Ÿ°aĻbWĻb§bu¨~Ÿ§b¨bt¤~Ÿ¨bŅbWŅbŌbu¨~ŸŌbĶbt¤~ŸĶbôbWŗa§buŸ~Ÿ§b¨bt›~Ÿ¨bŌbuŸ~ŸŌbĶbt›~ŸĶbôbuŸ~ŸŗažaP¨bēbPÕa§buŦ~Ÿ§b¨bt¨~ŸĀbŌbuŦ~ŸŌbĶbt¨~ŸĶbôbuŦ~Ÿķa§bu¸~Ÿ§b¨bt´~ŸĀbŌbu¸~ŸŌbĶbt´~ŸĶbôbu¸~Ÿũa§buÜ~Ÿ§b¨btØ~ŸĀbŌbuÜ~ŸŌbĶbtØ~ŸĶbôbuÜ~Ÿb§bu¨~Ÿ§b¨bt¤~ŸĀbŌbu¨~ŸŌbĶbt¤~ŸĶbôbu¨~Ÿb bPåbîbP b§bu¸~Ÿ§b¨bt´~ŸĀbŌbu¸~ŸŌbĶbt´~ŸĶbåbu¸~Ÿ$b§buŦ~Ÿ§b¨bt¨~ŸĀbŌbuŦ~ŸŌbĶbt¨~ŸĶbåbuŦ~Ÿ:b§bu´~Ÿ§b¨bt°~ŸĀbŌbu´~ŸŌbĶbt°~ŸĶbåbu´~ŸUb§buŦ~Ÿ§b¨bt¨~ŸĀbŌbuŦ~ŸŌbĶbt¨~ŸĶbåbuŦ~Ÿebkbuā~Ÿkb|bP|b§buā~Ÿ§b¨btÜ~ŸĀbŌbuā~ŸŌbĶbtÜ~ŸĶbåbuā~Ÿ†b§bu¤~Ÿ§b¨bt ~ŸĀbŌbu¤~ŸŌbĶbt ~ŸĶbåbu¤~Ÿ†bbu¤~Ÿb§bu ~Ÿ§b¨btœ~ŸĀbŌbu ~ŸŌbĶbtœ~ŸĶbåbu¤~Ÿ‰b§buŦ~Ÿ§b¨bt¨~ŸĀbŌbuŦ~ŸŌbĶbt¨~ŸĶbåbuŦ~Ÿ‰bbPĶbâbPb§bu ~Ÿ§b¨btœ~ŸĀbŌbu ~ŸŌbĶbtœ~Ÿ™b§buŦ~Ÿ§b¨bt¨~ŸĀbŌbuŦ~ŸŌbĶbt¨~Ÿ™b¨bPĀbĘbPc#cu¤~ŸccuŸ~Ÿc"cR"c#cuŸ~Ÿc"cP#c>cu ~Ÿ,c9cuŸ~Ÿ9c=cR=c>cuŸ~Ÿ,c=cP°cÔcu¨~ŸšcĘcuŸ~ŸĘcÎcRÎcÔcuŸ~ŸšcÎcP‘ĄV¤;VbdVŽĒVÚ V(FVMV ĮVåīVAu"p|Ÿ"+R+PScSSUPUcrxŸSœ0Ÿ¤Ž0ŸÜā0Ÿ(=0ŸSœS¤ŽSÜŪSSUPUcrxŸcks|ŸkwPws|ŸXcPqwPws|ŸqS‚udŸ‚‹P‹œudŸ¤ŽudŸ’œudŸ¤ŽudŸ•œucŸ¤ŽucŸ•œP¤ĢP(=udŸ.8ucŸ8<R<=ucŸ.<PÆßs4ŸĨĒs4Ÿņ s4ŸßŽuPĒÜuPāåuP (uPFķuPßøuPø)0Ÿ2;P;buDØÚuDÚÜuPāå0Ÿ (uDFMuDMSuPSwuDš0ŸŊŲ0ŸŲåuDīķ0ŸŽÜōŠc ā(ōŠc FķōŠc ŽÜ1Ÿā(1ŸFķ1ŸŽíuŽĒuå uŊÆ1ŸÆØR‘ĒRå RĩÜōŒ}ā(ōŒ}FķōŒ}ŊŽōRz•ÜōRzāåōRzí(ōRzFķōRzÆíuĨĒuņ uĐßuĐß0ŸĐßuLßíußíuíđtđôtßâuPs"ŸâũSũŽuHĒÚuHÚÜSāåuH (uHFMuHMSSSķuHSŽuPĒÚuPāåuP (uPFMuP uPŊåuPīķuPPŽ1ŸĒÚ1Ÿāå1Ÿ (1ŸFM1Ÿ 1ŸŊå1Ÿīķ1ŸPuT%/PāåuT uTŊŲuTīķuTSuTāåuT uTŊŲuTīķuT uPÆŲuPīķuP9;P;ŽuDĒÚuD (uDFMuDŲåuD9;Q;buTØÚuT (uTFMuTŲåuT9Ž1ŸĒÚ1Ÿ (1ŸFM1ŸŲå1Ÿ;QVØÚV (VFMVŲåV9;P;ŽSĒÚS (SFHS;WVWbv|ŸØÚV (VFMVŲåV;TSTbs|ŸØÚS (SFHS(SFHS(uDFMuDŲåuDdŽuTǝuTdkVdŽVĒØVksVsxv|ŸxŽVǝv|ŸkxudŸ}‡udŸ‡‹R‹ŽudŸĒ¯udŸ}‹P¯ØuTļÂuTfsPswuDfwuPwuPšŊuPåīuP~ŠuP šuH¨˛udŸ˛ļRļšudŸ¨ļP:d'fuTŸ1fguTŸgRg‘LŸRgZgPZgh‘LŸ:d_duTŸ_dĶdu`ŸĶdādSādeu`ŸeeSeVeu`ŸVeaeSae'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR g&g‘XŸ&g5gS5gJg‘XŸJgNgRNgOg‘XŸcg|g‘XŸ|gŧgSŧgâg‘XŸâgûgS_d'f|Ÿ1fOg|Ÿcgûg|Ÿ_d'fuTŸ1fguTŸgOg‘LŸcgûg‘LŸ_d'fW1f fW fgu@Ÿgg‘¸ŸgOgWcgÍgWÍgâg‘¸ŸâgûgWtdxd0ŸƒdĶdSũdeSe4eS4e5et5e6et6e:etcgygSŧgÍgS_dĶdu`ŸĶdādSādeu`ŸeeSeVeu`ŸVeaeSae'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR g&g‘XŸ&g5gS5gJg‘XŸJgNgRNgOg‘XŸcg|g‘XŸ|gŧgSŧgâg‘XŸâgûgSxdƒdV’d dP deVe#eP#eeVg5gVcgygVŖgĨgVŧgÍgVâgägV¤dēdRēdĶdvsŸũdevsŸcgxgRxgygvsŸ¤dĶdSũdeScgygSxdƒdW¤deWcgygWâgûgWxdƒdŸ¤deŸcgygŸâgûgŸxdƒduPŸždÍduPŸÍdŲdQŲdeuPŸeeQeeuPŸâgûg‘HŸxdƒdu`ŸždĶdu`ŸĶdādSādeu`ŸeeSâgûgSÆdĶdu`ŸĶdādSādædu`ŸÆdÍduPŸÍdŲdQŲdæduPŸÆdŲdPxdƒduPŸædũduPŸxdƒduLŸėdöduLŸödúdRúdũduLŸėdúdPe'f ˙Ÿ1fOg ˙ŸŖgâg ˙Ÿe4eS4e5et5e6et6e:etŧgÍgSe'fW1f fW fgu@Ÿgg‘¸ŸgOgWŖgÍgWÍgâg‘¸Ÿe'fŸ1fOgŸŖgâgŸ>eVeSVeZetZe'fuLŸ1fguLŸgg‘DŸg&gS&g'gt'g(gt(g,gt,gOg‘DŸŖgŧg‘DŸÍgâg‘DŸ>eVeu`ŸVeaeSae'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR g&g‘XŸ&g5gS5gJg‘XŸJgNgRNgOg‘XŸŖgŧgSÍgâg‘XŸJeVeu`ŸVeaeSaegeu`ŸJeVeSVeZetZegeuLŸJeZePge'fuLŸ1fguLŸgg‘DŸ5gOg‘DŸÍgâg‘DŸmežeuPŸžeÅeRÅe'fuPŸ1fguPŸgg‘HŸggRgg‘HŸ5gOg‘HŸÍgâg‘HŸmexePggPĨgŧg‘DŸĢgĩg‘HŸĩgšgRšgŧg‘HŸĢgšgPägûg‘HŸęgôg‘DŸôgøgRøgûg‘DŸęgøgPxe'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR gg‘XŸ5gJg‘XŸJgNgRNgOg‘XŸÍgâg‘XŸxe'fuTŸ1fguTŸgg‘LŸ5gOg‘LŸÍgâg‘LŸ~eĸeSe'fudŸ1fÖfudŸÖfŨfrŸŨfgudŸgg‘\Ÿg grŸ gg‘\Ÿ5gJg‘\ŸJgNgrŸNgOg‘\ŸÍgâg‘\Ÿe'fuXŸ1fguXŸgg‘PŸ5gOg‘PŸÍgâg‘PŸe'fV1f”fVggV5gOgV’e'fuhŸ1fÖfuhŸÖfŨfrŸŨfguhŸgg‘`Ÿg grŸ gg‘`Ÿ5gJg‘`ŸJgNgrŸNgOg‘`ŸÍgâg‘`Ÿ’e'fu\Ÿ1fgu\Ÿgg‘TŸ5gOg‘TŸÍgâg‘TŸ˜eĸePže'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR gg‘XŸ5gJg‘XŸJgNgRNgOg‘XŸÍgâg‘XŸže'fV1f”fVggV5gOgVžeĸeSžeÁeSÁeÆes|ŸÆeĶeSĸeĢeSĢe¯es|Ÿ¯eÁeSÁeĘes|Ÿĸe¯euPŸ´ežeuPŸžeÅeRÅeĶeuPŸĸe¯eP´eÅePĶe'fu`Ÿ1fÖfu`ŸÖfŨfRŨfëfu`ŸëfguTŸgg‘LŸgg‘XŸg gR gg‘XŸ5gJg‘XŸJgNgRNgOg‘XŸÍgâg‘XŸĶeÛe uhu`4Ÿëfķf u\uT4ŸĶefS1fŽfSggS×eÛe uhu`4Ÿ×eãeSãe'fW1f fW fgu@Ÿgg‘¸ŸggW5gOgWÍgâg‘¸Ÿée'fu`Ÿ1fÖfu`ŸÖfŨfRŨfgu`Ÿgg‘XŸg gR gg‘XŸ5gJg‘XŸJgNgRNgOg‘XŸÍgâg‘XŸéeôePg gP÷e'fuTŸ1fguTŸgg‘LŸ5gOg‘LŸÍgâg‘LŸ1fguTŸgg‘LŸÍgâg‘LŸ1fg1ŸÍgâg1ŸHfguTŸgg‘LŸÍgâg‘LŸHfg2ŸÍgâg2ŸbfguTŸgg‘LŸÍgâg‘LŸbfg3ŸÍgâg3Ÿ f¤fQ¤fgu¨gg‘ Ígâg‘  f´fV´fĀfsÍgŌgV fąfWąfĀfsÍgâgW fgu¤gg‘œÍgâg‘œ fgSggPÍgÕgSÕgŲgtŧfguTŸgg‘LŸŧfëfWŧfĀfVŧfŲfVŲfŪfv|ŸŪfgVĀfÃfVÃfĮfv|ŸĮfŲfVŲfâfv|ŸĀfĮfu`ŸĖfÖfu`ŸÖfŨfRŨfëfu`ŸĀfĮfPĖfŨfPëfguTŸgg‘LŸëfķf u\uT4ŸëfgWīfķf u\uT4ŸīfûfW:gOg‘@Ÿ@gJg‘XŸJgNgRNgOg‘XŸ@gNgP‡gŖgWgšg‘@ŸšgžgRžgŖg‘@ŸgžgPh&hP&h”hS”h˜hķPŸ˜hžhSžhŲhķPŸ"h&hP&h”hS”h˜hķPŸ˜hžhSžhŲhķPŸ/h:hP:h–hW˜hŲhW/h”hsøŸ”h˜hķP#øŸ˜hžhsøŸžhŲhķP#øŸ7hbhVŠhŲhV>hFhPJhbhVŠhēhVOhbhugŸŠhēhugŸOhVhPŠhˇhPÁhËhugŸËhĪhRĪhŲhugŸÁhĪhPhh”hS”h˜hķPŸ˜hŠhSlhvhsĖŸlhvh0ŸlhvhsĖvh”hS”h˜hķPŸ˜hŠhS‘‘=RWZĐW=RŸZĐŸPRWZŒW”W˛ĐWSRucŸZŒucŸ”ucŸ˛ĐucŸS^P†P^RŸZŸ”Ÿ˛ĐŸdrQjŽVjrQjrQrSs|ŸĨSr{S{s|ŸSŸs|ŸrudŸ„ŸudŸrP„—PĢļ0ŸļS sŸ 'SZtS’SļÍudŸ×'udŸZtudŸ”udŸ˛ĐudŸļÍŸ×'ŸZtŸ”Ÿ˛ĐŸįŸįudŸįôPļÍudŸ'udŸļÍucŸ ucŸR'ucŸļÃPÃÍud<Ÿ P¸ÂucŸÂÆRÆĐucŸ¸ÆP'6u 69t9=t'6u9=tIRPt|P”˛udŸš¤ucŸ¤¨R¨˛ucŸš¨PEƒSƒ…udŸ…‡S‡ĨudŸYS…‡S\ucŸ…‡ucŸ\gPt{PgtŸ…‡Ÿw‚P‚tuT…‡uTw‚Q‚ŗWw‚P‚ V Ĩv|ŸĨ¸V‚‹V‹v|Ÿ V Šv|Ÿ‚udŸ”ŗudŸ‚P”¤PŊÅ0ŸÅVvŸ#VVtV…‡VÅĪudŸÜ#udŸVtudŸ…‡udŸÅĪŸÜ#ŸVtŸ…‡ŸéŸéudŸéöPÅĪudŸ#udŸÅĪucŸ ucŸR#ucŸÅĪP P—ucŸ—›R›ĨucŸ›P#.u ./t/3t#VW?PP ‘ 3S38stŸ8DSSstŸ3S3<stŸsŸs|Ÿ3sŸ3<s|Ÿ‘oŸ%0‘oŸ07R7<‘oŸP%7P"P7IPôøPøXuPēžuPĀŅuP#&P&,p|ŸUēu#ŸXŒu#ŸUXPX–R–XuPXoRo‡uP‡‹R‹ņuP^ēu#ŸXŒu#Ÿ^aPaņuT‡ēu#ŸXŒu#Ÿ‡–P–ž s2&ĢÕĒÕzŸXoPo{ s2&ĢÕĒÕzŸƒ… s2&ĢÕĒÕzŸ‡‹P‹Œ s2&ĢÕĒÕzŸXoPo{ s2&ĢÕĒÕzŸƒ… s2&ĢÕĒÕzŸ‡‹P‹Œ s2&ĢÕĒÕzŸX{0ŸƒŒ0Ÿ°ēPēXuL{ƒPŒ§uLēņuL°X1Ÿ{ƒ1ŸŒ§1Ÿēņ1Ÿ°ēS“{ƒS“°ēPēëV{ƒPŒ§VžĀVŅņVēįVįëvtŸŒ§VžĀVŅņVÄáVŒ§VžĀVŅņVŒ§VÚņVŒ§uLÚņuL‘§uT—ŸuT#uT<Ÿ—ŖP›ŸuT#uT<Ÿ›ŖP P XSēŧSSiZiP“Zi l‘°“+lÉl‘°“5iGi‘D#ŸGiLiPSiZiPZi l‘°+lÉl‘°Si lōíĻ+lÉlōíĻ[ifiw$fijip€~Ÿ[iciw$#€ŸcijiPsiuiPkkPŧjÚkrŸækũkrŸŧjÚk‘DŸækũk‘DŸÖjÚk[Ÿækũk[ŸÖjÚk‘DŸækũk‘DŸėjÚk Ÿækũk ŸėjÚk‘DŸækũk‘DŸk.kPújkw$k kp€~Ÿújkw$#€Ÿk kPkkP ŸovÉv> Ÿ)w7w> ŸbsątWovÉvW)w7wWbslsqŸlsqsPÄstō&ČtątōČov‰vōȉvŠvō&Č)w7wōČxsątWovÉvW)w7wWŠvÉvudŸ˜sątđŸovŠvđŸ)w7wđŸ˜sĨspŸĨsĒsPąsątV ŸovŠvV Ÿ)w7wV ŸąsģspŸģsĀsPÄsątudŸovŠvudŸ)w7wudŸ‰vŠvudŸâsąt\ Ÿov‰v\ Ÿ)w7w\ ŸâsīspŸīsôsPûsątV Ÿov‰vV Ÿ)w7wV ŸûstpŸt tPtątōČov‰vōČ)w7wōČtątudŸov‰vudŸ)w7wudŸov‰vudŸ,tątĖŸ)w7wĖŸ,t9tpŸ9t>tPEtątôŸ)w7wôŸEtOtpŸOtTtP[tątz Ÿ)w7wz Ÿ[tetpŸetjtP™tątudŸ™tąt0Ÿ7wJwudŸ7wJw0ŸĐtØtPátXvôŸÉv)wôŸSwzwôŸátVvWVvWvudŸWvXvt`ŸÉv)wWSwzwWųtXv4ŸÉv)w4Ÿjwzw4ŸųtVvWVvWvudŸWvXvt`ŸÉv)wWjwzwWWu‹uōׯ‹uXvōĮÉvévōĮ w)wōׯjwzwōĮ uVvWVvWvudŸWvXvt`ŸÉv)wWjwzwWév wudŸ-uXvđŸÉvévđŸ w)wđŸjwzwđŸCuXv€ ŸÉvév€ Ÿ w)w€ Ÿjwzw€ ŸWuWvudŸWvXvt`ŸÉvévudŸ w)wudŸjwzwudŸ w)wudŸwuXv’ ŸÉvév’ Ÿjwzw’ Ÿ‹uXvōĮÉvévōĮjwzwōĮ‹uWvudŸWvXvt`ŸÉvévudŸjwzwudŸÉvévudŸŠuXvrŸjwzwrŸŋuXv4Ÿjwzw4ŸŌuXvtŸjwzwtŸåuXv´Ÿjwzw´ŸøuXvôŸjwzwôŸ4vWvudŸWvXvt`Ÿ4vXv0ŸUwjwudŸUwjw0Ÿĸw´wW´wģwtˇwģwPģw!xW!x"xuD"x#xt@#x’yWŒw xS#xĨxS9y;ySåwîwPîwīwtīwķwtx xP#x3x0Ÿx xu`Ÿ#xŠxu`ŸŠxĄxRĄx’yu`Ÿ x#x0Ÿ,x’y0Ÿ x xudŸ,x’yudŸExNy§ Ÿgy’y§ ŸEx;yV;yNyu\ŸgylyVlyŽyu\ŸŽy’yVExOxpŸOxTxPUx9yōxĶgy’yōxĶUx9yVgylyVlyŽyu\ŸŽy’yVUxĨxSUxXxv#ŸdxhxpŸhxmxPtx9y0Ÿgy’y0Ÿtx~xpŸ~xƒxPĪx9yuTŸØxõxSõxyuXŸy)yS)y9yuXŸØxßxPy&yPßxyu\Ÿ)y9yu\Ÿßxy0Ÿ)y9y0Ÿōxyu`Ÿ)y9yu`ŸōxyudŸ)y9yudŸōxy0Ÿ)y9y0ŸũxyS)y9ySyyu\Ÿ)y9yu\Ÿy yP)y6yP;yNyu\Ÿ;yNy0ŸNycyu`ŸNySyudŸSyZyPZycyudŸwyŽyuTŸ}y‡yuSŸ‡y‹yR‹yŽyuSŸ}y‹yPÛyčySčyéyutŸéyęytpŸęyûySûyüyutŸüyũytpŸŪyéyusŸéyęytoŸęyüyusŸüyũytoŸŪy÷yPzzusŸzzRzzusŸzzP‘S“V“"-S“V“^fS“V“"-u^ëuđnusƒu"-u “V“^ëu “V“ëđ“V“đnu “V“ns“V“sƒu “V“"-u^ëuđnusƒu‚‰PŠÅSŦļusŸļēRēÅusŸŦēPÍâutŸĶŨusŸŨáRáâusŸĶáP7S(usŸ(,R,7usŸ,PPeutŸV`usŸ`dRdeusŸVdP@z­zSŽz {S‘S“V“"-S“V“^fS“V“"-u^íuōruw‡u"-u “V“^íu “V“íō“V“ōru “V“rw“V“w‡u “V“"-u^íuōruw‡u‚‰PŠĮSŦļusŸļēRēĮusŸŦēPĪäutŸÕßusŸßãRãäusŸÕãP;S *usŸ*.R.;usŸ .PTiutŸZdusŸdhRhiusŸZhP{"{P"{i|Si|m|ķPŸm|Ž|S&{j|Vm|Ž|VĀ{Æ{PÆ{K|Um||U–|Ž|U&{i|Si|m|ķPŸm|Ž|S1{4{p$#ĖŸ4{?{pĖŸX|j|VX|m|0Ÿ‘S“V“"-S“V“^fS“V“"-u^ëuđnusƒu"-u “V“^ëu “V“ëđ“V“đnu “V“ns“V“sƒu “V“"-u^ëuđnusƒu‚‰PŠÅSŦļusŸļēRēÅusŸŦēPÍâutŸĶŨusŸŨáRáâusŸĶáP7S(usŸ(,R,7usŸ,PPeutŸV`usŸ`dRdeusŸVdPĐ|Ũ|PŨ|r~Sr~v~ķPŸv~›~Së|ņ|Pņ|6}V6}v~‘ŧv~Ž~VŽ~›~‘ŧë|r~Sr~v~ķPŸv~›~Sō|õ|p$#ĖŸõ|}pĖŸŒ}–}0Ÿ–}Ų}VŒ}r~Sr~v~ķPŸŽ~›~SŒ}Ų}s Ÿ–}ĸ}Pŧ}Æ}P`~v~‘ŧ`~v~0Ÿé~ãS‚„S„ „u „ „t „I„SI„]„u¤ˆŸû~ 0Ÿ PŧWŧÁPÁčW‚‚PĮƒ „W „G„W"P07p0.Ÿ7ãuH0.Ÿ‚ģƒuH0.ŸĮƒ „uH0.Ÿ „ „tD0.Ÿ „]„uH0.ŸWč0Ÿč́uŋ‚‚0Ÿ‚ģƒuŋ „„0ŸG„]„uŋÆÔPỐu¸‚ģƒu¸ „„P„„G„]„u¸ÎÔQỐu¨‚ģƒu¨ „„QG„]„u¨WãsĖŸ‚ģƒsĖŸ „„sĖŸG„I„sĖŸI„]„u¤#DŸÎč0Ÿč°uLŗʁPʁ́uL‚ģƒuL „„0ŸG„]„uL|́SԂ#ƒSEƒģƒSG„I„SI„]„u¤ˆŸƒ#ƒSč́S‚ģƒSG„I„SI„]„u¤ˆŸč́sԟ‚ģƒsԟG„I„sԟI„]„u¤4ŸöũP“ũ €uP“ €€uP#Ÿ“€€uP“ũ€uP€ €t“€ sȟ‚Ԃsȟ™€Ĩ€W“Ĩ€Ģ€wŸ“Ģ€°€W“°€ĀW“Āʀw|Ÿ“Ĩ€°€R˛€ƀRė€ 0Ÿ‚m‚Wė€ S‚m‚Sō€ sԟ‚m‚sԟ‚.‚W.‚7‚wŸ7‚^‚W^‚m‚wŸ‚m‚S‚"‚P"‚.‚w2$q".‚7‚w2$q"O‚T‚w2$q"‚m‚ ˙Ÿ‚m‚sāŸ|‚Ԃsȟ‚Ԃsȟ‚Ԃs˟Ž‚˜‚R›‚¯‚RŪ‚ë‚Wë‚ų‚wŸEƒģƒWG„]„Wë‚ų‚W#ƒ8ƒsā8ƒ<ƒP#ƒEƒsäŸÍƒ҃Q„"„Q҃ԃQԃčƒqŸčƒëƒqŸëƒđƒP‘S“V“"-S“V“^fS“V“"-u^íuōruw‡u"-u “V“^íu “V“íō“V“ōru “V“rw“V“w‡u “V“"-u^íuōruw‡u‚‰PŠĮSŦļusŸļēRēĮusŸŦēPĪäutŸÕßusŸßãRãäusŸÕãP;S *usŸ*.R.;usŸ .PTiutŸZdusŸdhRhiusŸZhPh„i„pt0.Ÿ{„“„{„™„QĨ„Á„ōöÁ„…V ŸÜ„đ„Pđ„…V܄…ōöö„…P……Sã„… Ÿã„đ„Pđ„…VO…´…V“ˇ…z†V“}†ƆV“O…´…Vˇ…z†V}†ƆV]…_…P_…ļ…uTļ…ˇ…‘Lˇ…ԅPԅ|†uT|†}†tP}†ƆuTՅ†Ÿŗ†ƆŸė…†æŸq…v…Pv…w…s$w…{…p€~Ÿq…v…p€Ÿv…{…P‚…‹…Pˆ…‹…Pˆ…™…Q}†‡†Qˆ…™…qŸ}†‡†qŸŽ…ļ…udŸļ…ˇ…‘\Ÿ†|†udŸ|†}†t`Ÿ}† †udŸŽ…™…P}†‡†P™…ˇ…ōÃ÷†}†ōÃ÷† †ōÃ÷™…´…V†z†V† †V­…ˇ…P†4†P4†y†S†’†S5†}†ųŸ† †ųŸL†}†æŸĨ†ŗ†ōÃ÷‘ÉVđžVŅ×VâäV.Va–V˛ĐV×V*RVpzVYu6ptŸ67w<Ÿ7<plŸ6P67w7<pxŸ"6ptŸ67w<Ÿ7<plŸ"6P67w7<pxŸOŪu\Ÿæđu\Ÿcgu\Ÿ˛Įu\ŸhwrtŸw}w<Ÿ}‡pŸhnrhŸnsSswrhŸw}wHŸ}‡pxŸhŪ0Ÿæđ0Ÿcg0Ÿ˛Į0ŸhwrtŸw}w<Ÿ}‡pŸ‡¨pxŸ¨˛sŸhnrhŸnsSswrhŸw}wHŸ}‡pxŸ‡¨plŸ¨˛sxŸƒ‡Q‡¨plŸ¨˛sxŸ‡¨pxŸ¨˛sŸĸ˛Sĸ¨P¨˛s Ÿ˛Ūu\Ÿæđu\ŸÄĮudŸĮÍPÍŪudŸæđudŸÔŪu\Ÿæđu\ŸÔŪudŸæđudŸ×Ūu[Ÿæđu[Ÿ×ŪPæíP˛Įu\Ÿ˛ĮudŸ¸Âu[ŸÂÆRÆĮu[Ÿ¸ÆP)uT<Ÿ$)p<Ÿ).uT<Ÿ}–p<Ÿ)uP.cuPgluP–˛uPĐ~uP)TuPT”0ŸĻPĻâuD_auDacuPgl0Ÿ–˛uDĐ×uD×ŨuPŨuDD0ŸHd0ŸdpuDz~0ŸđcōŠc g˛ōŠc Đ~ōŠc đc1Ÿg˛1ŸĐ~1ŸđKu.ul–u1Ÿ"Q.Ql–QũcōŠ g˛ōŠ Đ~ōŠ ō¨ücō¨üglō¨üt˛ō¨üĐ~ō¨üKu$.u}–u)u)0Ÿ)uL)Ku)?S?KuKTsxŸacsxŸ×ŨsxŸ)/uPuT"Ÿ/6P6uH.cuHgluH–˛uHĐ~uH4?S?KuKTsxŸacsxŸ×ŨsxŸ46P6TuHacuH×ŨuH^`S`uP.auPgluP–˛uPĐ×uP*uPHpuPz~uP^`P^1Ÿ.a1Ÿgl1Ÿ–˛1ŸĐ×1Ÿ*1ŸHp1Ÿz~1Ÿ^`P`ŠuTšPgluT*uTHduTz~uT^`S`ŠuTgluT*uTHduTz~uTd†uTgluT*uTHduTz~uT*uPQduPz~uP¤ĻPĻuD.auD–˛uDĐ×uDdpuD¤ĻQĻâuT_auT–˛uTĐ×uTdpuT¤1Ÿ.a1Ÿ–˛1ŸĐ×1Ÿdp1Ÿ¤ĻPĻS.aS–˛SĐŌSĻÔSÔâstŸ_aS–˛SĐŌS´ŅS_aS–˛SĐŌSŸ˛SĐŌSŸ˛uDĐ×uDdpuDäuT.3uTäëVäV._VëķVķøvtŸøV.3vtŸëķvŸķøv|ŸøvŸ.3v|Ÿëøu\Ÿūu\Ÿ R u\Ÿ.3u\Ÿū P3_uT:FuTđũPũuDđuPuPDHuPpzuPuP*DuH*DuH#Ÿ3=u\Ÿ=ARADu\Ÿ3AP‡”‡W“–‡ˆW“bˆ}ˆW“’ˆēˆW“‡”‡W–‡ˆWbˆ}ˆW’ˆēˆW‡‡P‡•‡uP•‡–‡tL–‡Ŗ‡PŖ‡aˆuPaˆbˆ‘HbˆēˆuP¸‡ˆŸĨˆēˆŸĪ‡ˆæŸ(‡-‡P-‡.‡s$.‡2‡p€~Ÿ(‡-‡p€Ÿ-‡2‡P;‡S‡VS‡o‡vxŸbˆ}ˆV;‡>‡P>‡e‡Qe‡•‡uT•‡–‡tPˆˆuTbˆtˆQtˆ}ˆuTG‡e‡Qe‡x‡uTG‡S‡VS‡o‡vxŸG‡V‡PV‡`‡q`‡e‡pxŸK‡S‡VS‡o‡vxŸK‡V‡PV‡`‡q`‡e‡pxŸx‡–‡ō ˆbˆō }ˆ’ˆō x‡”‡WˆˆWŒ‡–‡PˆˆPˆ^ˆS}ˆ…ˆSˆbˆųŸ}ˆ’ˆųŸ1ˆbˆæŸ—ˆĨˆō Ũˆ*‰u*‰+‰‘ +‰K‰uK‰L‰tL‰g‰ul‰…‰uÈ*‰ulŸ*‰+‰‘dŸ+‰K‰ulŸK‰L‰thŸL‰…‰ulŸÃˆëˆutŸëˆķˆPķˆ*‰utŸ*‰+‰‘lŸ+‰K‰utŸK‰L‰tpŸL‰…‰utŸÔˆįˆutčˆ)‰S)‰*‰uhŸ*‰+‰‘`Ÿ+‰J‰SJ‰K‰uhŸK‰L‰tdŸl‰n‰Sn‰…‰uhŸčˆëˆutŸëˆķˆPķˆ*‰utŸ*‰+‰‘lŸ+‰K‰utŸK‰L‰tpŸl‰…‰utŸúˆ)‰S)‰*‰uhŸ*‰+‰‘`Ÿ+‰J‰SJ‰K‰uhŸK‰L‰tdŸũˆ*‰ugŸ*‰+‰‘_Ÿ+‰K‰ugŸK‰L‰tcŸũˆ‰P+‰7‰P‰*‰ulŸ*‰+‰‘dŸ:‰K‰ulŸK‰L‰thŸ‰*‰utŸ*‰+‰‘lŸ:‰K‰utŸK‰L‰tpŸ‰*‰uhŸ*‰+‰‘`Ÿ:‰K‰uhŸK‰L‰tdŸ‰+‰P:‰F‰PN‰l‰ulŸN‰l‰utŸT‰^‰ugŸ^‰b‰Rb‰l‰ugŸT‰b‰Pt‰~‰ugŸ~‰‚‰R‚‰…‰ugŸt‰‚‰P ‘ pVswVy{VuiSsÚSbVbivlŸswVy{VeSeislŸsÚS$_VswVy{V$_SsÚS}’s ŸƒugŸ‘R‘’ugŸƒ‘P’ŠsŸ˜ĸugŸĸĻRĻŠugŸ˜ĻP˛ÖSØÚS˛ēu˛ĀuĀÄtÉŅuēĀuĀÄtpuuLu[wlŸwlŸLwlŸ[WWLW[wlŸwlŸLwlŸ[WWLW1w Ÿ",uTŸ,0R01uTŸ"0P1HwŸ7AuTŸAEREHuTŸ7EPi–S–ŦspŸšģspŸ SipuTŸx–uTŸĩûuTŸ uTŸŅæu`Ÿ×áuSŸáåRåæuSŸ×åPæûuXŸėöuSŸöúRúûuSŸėúP °plŸ°ĀvDŸ ĻpXŸĻŠQаpXŸ°Āv(Ÿ Āu  p0Ÿx–0Ÿĩš0ŸŊŅ0Ÿ °plŸ°ĀvDŸĀđs|ŸđūspŸūvŸ ĻpXŸĻŠQаpXŸ°Āv(ŸĀđshŸđūs\Ÿūv|ŸŧĀRĀđshŸđūs\Ÿūv|ŸĀđs|ŸđūspŸūvŸĖVĖđSđūstŸūvŸÛŪstŸŪâPâãtãįtįđstŸđūshŸūvŸÛâsŸâįPįđsŸđūs|ŸūvŸęísxŸíöPöūslŸūv Ÿęđs ŸđūSūv ŸpuTŸx–uTŸu Q uXŸPttpuXŸx–uXŸ u #ŸqŸP%(u`Ÿ(+P+/t/3t3pu`Ÿx–u`Ÿ%.q Ÿ.3P9=P=AtAEtEpudŸx–udŸ9:u #Ÿ=@pŸ@EPLpuTŸx–uTŸLpudŸx–udŸOpuSŸx–uSŸOVPxPVpu`Ÿ‚–u`Ÿ\puSŸ‚–uSŸ\cP‚‰PcpuXŸŒ–uXŸipuSŸŒ–uSŸipPŒ“PĩÍwDŸ”™wDŸšĩwDŸÍxuD™‰uD uDuDLhuDÍ uD #0Ÿ#4S7:u@ÛßuDßáSáã0Ÿã uD3aSam0Ÿ uDLhuD–ĩōŠc  ōŠc ōŠc LhōŠc –ĩ1Ÿ 1Ÿ1ŸLh1Ÿ–Ũux™u‰ĩuĢĩ1ŸĩÆQ{™Q‰ĩQŖĩō  ō ō Lhō ĢxōÎ ƒ‰ōÎ •ĩōÎ  ōÎ ōÎ LhōÎ ĩŨu”™ušĩužÍužÍ0ŸžÍuŧÍŨuÍS spŸÛŨspŸS  SLhSÍĐuDw"ŸĐ2WÛ‰W WWLhWŌS spŸÛŨspŸS  SLhSŌ WÛßWã W WLhWãøw ŸéķuTŸķ÷R÷øuTŸé÷Pø wŸūuTŸ R  uTŸū P xuD™ÛuDßãuD3muD u tt x1Ÿ™Û1Ÿßã1Ÿ3m1Ÿ#4SßáS3aS#$u *.t#x1Ÿ™Û1Ÿßá1Ÿ3a1Ÿ7xW™¯W7@S7xS™ÛS@]S]aslŸaxS™­S­¯slŸ@]s Ÿ]asxŸ™­s Ÿ­¯sxŸFauTŸ™¯uTŸFMPŖĒPM]sŸ]aspŸ™ŖsŸ­¯spŸSauTŸ™ŖuTŸ­¯uTŸSZP™ P@]sŸ]as|ŸaxsŸ™­sŸ­¯s|Ÿ@auTŸgquTŸquRuxuTŸ™¯uTŸguP¯ÛWŗŋWy‚uD .uDCLuDLSVSWtWXvlŸXaVLSVSWtWavlŸmyWĸ‰ĉPĉ͉u#'Š=ŠPļ‰%ŠW'Š‚ŠWļ‰ ŠV'Š6ŠV6ŠIŠv`ŸIŠKŠViŠkŠVļ‰ Šv Ÿ'Š6Šv Ÿ6ŠIŠVIŠKŠv ŸiŠkŠv Ÿž‰ Šv ŸIŠKŠv ŸiŠkŠv Ÿž‰ ŠWIŠ‚ŠWž‰ŠSIŠ‚ŠS‰ŠWIŠ‚ŠW‰ŠSIŠ‚ŠSKŠiŠsŸQŠ[ŠugŸ[Š_ŠR_ŠiŠugŸQŠ_ŠPqŠ{ŠugŸ{ŠŠRŠ‚ŠugŸqŠŠP ŠŠpĖŸŸŠۊVۊöŠu öŠ÷Št÷Š‹V‹.‹u 3‹L‹u œŠõŠw ŸõŠöŠu# ŸöŠ÷Št# Ÿ÷ŠL‹w Ÿ§ŠīŠw Ÿ‹L‹w Ÿ§ŠۊVۊīŠu ‹‹V‹.‹u 3‹L‹u §ŠæŠS‹L‹S̊ۊVۊéŠu ‹‹V‹.‹u 3‹L‹u ̊æŠS‹L‹S‹3‹sŸ‹%‹ugŸ%‹)‹R)‹3‹ugŸ‹)‹P;‹E‹ugŸE‹I‹RI‹L‹ugŸ;‹I‹P_‹›‹V›‹ļ‹u ‹tˇ‹Ō‹VŌ‹ë‹u đ‹ Œu \‹ĩ‹Wĩ‹ļ‹u‹tˇ‹ ŒWg‹¯‹WЋ ŒWg‹›‹V›‹¯‹u ЋŌ‹VŌ‹ë‹u đ‹ Œu g‹Ļ‹SЋ ŒSk‹›‹V›‹Š‹u ЋŌ‹VŌ‹ë‹u đ‹ Œu k‹Ļ‹SЋ ŒSŌ‹đ‹sŸØ‹â‹ugŸâ‹æ‹Ræ‹đ‹ugŸØ‹æ‹Pø‹ŒugŸŒŒRŒ ŒugŸø‹ŒP"Œ^ŒV^ŒyŒu yŒzŒtzŒ’ŒV’Œ̌u °ŒɌu "ŒxŒWzŒɌW*ŒrŒWŒɌW*Œ^ŒV^ŒrŒu Œ’ŒV’Œ̌u °ŒɌu *ŒiŒSŒɌS.Œ^ŒV^ŒlŒu Œ’ŒV’Œ̌u °ŒɌu .ŒiŒSŒɌS’Œ°ŒsŸ˜ŒĸŒugŸĸŒόRό°ŒugŸ˜ŒόP¸ŒŒugŸÂŒƌRƌɌugŸ¸ŒƌP ‘ QVTXVuJSTSCVCJvxŸTXVFSFJsxŸTS$@VTXV$@STSXnS]gugŸgkRknugŸ]kPwSwuw…u…‰tŽ–u…u…‰tNu ¤uĻŧu"wxŸ"+P+>wxŸ ¤wxŸĻŧwxŸ>W ¤WĻŧW"wxŸ"+P+>wxŸ ¤wxŸĻŧwxŸ>W ¤WĻŧWĻŧWĢĩu`ŸĩšRšŧu`ŸĢšPMQVQRtRVtV{v|Ÿjnv|Ÿ‚—v|ŸMVPVãu`Ÿë˙u`Ÿf—u`Ÿ‚—u`Ÿˆ’u_Ÿ’–R–—u_Ÿˆ–Pf~rxŸ~ˆVˆĨSflrpŸloPo{rpŸ{~Vf~u fã0Ÿë˙0Ÿfj0Ÿn‚0ŸflrpŸloPo{rpŸ{~V~ˆvpŸˆĨspŸrxPx~p Ÿ‚ˆvpŸˆĨspŸ‚ˆVˆĨSˆĨVˆĨS‘Ĩs|Ÿ‘ĨsŸĨ¨u`Ÿ¨ŗPŗãu`Ÿë˙u`ŸĨŦu ¯ŗtšŊPŊÁtÁÅtÅãudŸë˙udŸšēu #ŸŊĀpŸĀÅPĖãu`Ÿë˙u`ŸĖãudŸë˙udŸĪãu_Ÿë˙u_ŸĪÖPëōPÖãu`Ÿõ˙u`ŸÜãu_Ÿõ˙u_ŸÜãPõüP3w8Ÿ q8ŸMfq8Ÿ3ëuP <uP¤ĻuPŧÎuP3]uP]›0ŸĄąVˇëW <W¤ĻVŧęVęuP-@uP@N0Ÿ[a0ŸkÎ0Ÿ˙fōŠc ¤ĻōŠc ŧÎōŠc ˙f1Ÿ¤Ļ1ŸŧÎ1Ÿ˙Cuë u<fu1Ÿ,Rî R<fRfōŽ4 ¤ĻōŽ4 ŧÎōŽ4 ëō/ ō<ō/ Dfō/ ¤Ļō/ ŧÎō/ Cu uMfu$3u$30Ÿ$3uL3Cu3OVO]v|Ÿęîv|ŸîđVđv|Ÿ-@V38uPw"Ÿ8HPH_W_žuT¤ĻuTŧęuTęW-@W[auTkąuT?OVO]v|Ÿęîv|ŸîđVđv|Ÿ-@V?HPH]WęW-@WđuTøu`ŸRu`ŸøP_ëuP <uP¤ĻuPŧęuP[auPkÎuP_gu _gW_ë1Ÿ <1Ÿ¤Ļ1Ÿŧę1Ÿ[a1ŸkÎ1Ÿ_¯W¤ĻWŧęW[aWk›W_guPgĄVĄąvxŸ¤ĻvxŸŧęvxŸ[aVkÎVg“W“›wxŸ[aWk›Wg–V–›vxŸ[aVkÎVtW[aWk›WtV[aVkÎVkVpzu`Ÿz~R~u`Ÿp~PŠ›uP›ĸSĸĻtϧsxŸ§¸S›ĸSĸĻtĻąsxŸĄąV¤ĻVŧęVĄĸu ¨ŦtĄë1Ÿ <1Ÿ¤Ļ1Ÿŧę1ŸˇĀPĀëuT uTˇĀVˇëV <VĀĪVĪÔvxŸÔëV VvxŸĀĪvŸĪÔv|ŸÔëvŸ vŸv|ŸĀÔu`ŸÚäu`ŸäčRčëu`Ÿ u`ŸÚčPĀĪVĪÔvxŸ VvxŸÅÔu`Ÿ u`ŸÅĖP P"P"PĖÕuPÕÜSÜātāásxŸáęSÕÜSÜātāęsxŸNWuP(uP@NuT]ŽS“aސS“u“(‰S“ Ž1ŽVMŽ^ŽVŽæŽV˙Ž V|”V(*V]ŽSaސSu(‰SP+VaŽ|ŽP|ŽŽV(V}ŽŽŸ(Ÿ”ŽŽæŸ9=V=>t>BtB`ŽuLŸ`ŽaŽtHŸÂŽęuLŸûuLŸ,‰uLŸ9=uPŸ=RVRStSZtZ`ŽuPŸ`ŽaŽtLŸÂŽęuPŸûuPŸ,.V.‰uPŸH]Žs,ŸÂŽՏs,Ÿûs,Ÿ0‰s,ŸHMŽs0ŸÂŽՏs0Ÿûs0Ÿ0‰s0ŸK]Žs,ŸÂŽՏs,Ÿûs,Ÿ0‰s,ŸVZtZ`ŽuPŸ`ŽaŽtLŸÂŽՏuPŸûuPŸ0‰uPŸVŽu@“ lu@“”Տu@“0tu@“VZP“Z`Žuŧ“`ŽaŽt¸“ŽՏuŧ“ûuŧ“0‰uŧ“VkVk`ŽuXŸ`ŽaŽtTŸÂŽՏuXŸûuXŸ02V24uXŸ46V6‰uXŸ`kVk`ŽuXŸ`ŽaŽtTŸÂŽĀuXŸûuXŸ46V6‰uXŸ`fPfou`ŸouPu`Žu`Ÿ`ŽaŽt\ŸÂŽĀu`Ÿûu`Ÿ4‰u`Ÿlou`ŸouPu`Žu`Ÿ`ŽaŽt\ŸÂŽĢu`Ÿûu`Ÿ;‰u`Ÿl´V´`Žu\Ÿ`ŽaŽtXŸÂŽ u\Ÿ V”u\Ÿ”–V–Ģu\Ÿûu\Ÿ;=V=[u\Ÿ[]V]‰u\Ÿ|`Žu`Ÿ`ŽaŽt\ŸÂŽ”u`Ÿûu`Ÿ;‰u`Ÿ|ąu`ŸąudŸÂĶu\ŸĶäuXŸä`ŽuPŸ`ŽaŽtLŸÂŽ uPŸ u`Ÿ-udŸ-<u\Ÿ<LuXŸL”uPŸûuPŸ;=u`Ÿ=[u\Ÿ[]u`Ÿ]tudŸt‰uPŸ‚_ŽW_Ž`ŽudŸ`ŽaŽt`ŸÂŽ”WûW;‰W‚P P–Ģu`ŸœĻudŸĻĒRĒĢudŸœĒP`Žu\Ÿ`ŽaŽtXŸÂŽ u\Ÿ”u\Ÿûu\Ÿ;‰u\Ÿ`ŽudŸ`ŽaŽt`ŸÂŽ udŸ”udŸûudŸ;‰udŸą`ŽudŸ`ŽaŽt`ŸÂŽ udŸ”udŸûudŸt‰udŸąudŸÂ`Žu\Ÿ`ŽaŽtXŸÂŽ u\Ÿ-udŸ-”u\Ÿûu\Ÿt‰u\ŸąudŸÂĶu\ŸĶäuXŸä`ŽuPŸ`ŽaŽtLŸÂŽ uPŸ-udŸ-<u\Ÿ<LuXŸL”uPŸûuPŸt‰uPŸˇ`Žu`Ÿ`ŽaŽt\ŸÂŽ u`Ÿ”u`Ÿûu`Ÿt‰u`ŸˇP'P]tudŸcmu`ŸmqRqtu`ŸcqP`Žu\Ÿ`ŽaŽtXŸÂŽ u\Ÿ-”u\Ÿûu\Ÿt‰u\ŸÂĶu\ŸĶäuXŸä`ŽuPŸ`ŽaŽtLŸÂŽ uPŸ-<u\Ÿ<LuXŸL”uPŸûuPŸt‰uPŸČ`ŽudŸ`ŽaŽt`ŸÂŽ udŸ-”udŸûudŸt‰udŸČĶP-6PĶ`ŽuXŸ`ŽaŽtTŸÂŽ uXŸ<”uXŸûuXŸt‰uXŸĶäuXŸä`ŽuPŸ`ŽaŽtLŸÂŽ uPŸ<LuXŸL”uPŸûuPŸt‰uPŸŲ`ŽudŸ`ŽaŽt`ŸÂŽ udŸ<”udŸûudŸt‰udŸŲäP<FPĢĀuXŸąģuTŸģŋRŋĀuTŸąŋP=[u\ŸCQu`ŸQURU[u`ŸCUPä`ŽuPŸ`ŽaŽtLŸÂŽ uPŸL”uPŸûuPŸt‰uPŸę`ŽudŸ`ŽaŽt`ŸÂŽ udŸL”udŸûudŸt‰udŸęõPLVPõ`ŽuLŸ`ŽaŽtHŸÂŽ uLŸ\”uLŸûuLŸt‰uLŸû`ŽudŸ`ŽaŽt`ŸÂŽ udŸ\”udŸûudŸt‰udŸûŽP\fPŽ]Žs,ŸÂŽ s,Ÿl”s,Ÿûs,Ÿt‰s,ŸŽMŽs0ŸÂŽ s0Ÿl”s0Ÿûs0Ÿt‰s0Ÿ2Ž8ŽP8ŽMŽuTŸl|uTŸt‰uTŸ?ŽMŽuTŸl|uTŸBŽMŽudŸl|udŸBŽMŽPlvPMŽaŽōÃ> Žێuێ܎t܎āŽt|…uŽ s,Ÿ|”s,Ÿû s,ŸŅŽ s,Ÿû s,ŸŅŽێuێ܎t܎āŽtŅŽæŽVՎێuێ܎t܎āŽtՎæŽVũ u@ udŸ PĀՏuPŸÆЏuTŸĐԏRԏՏuTŸÆԏPՏęuLŸÛåuTŸåéRéęuTŸÛéPęûōÃ> ːėS‘,‘SJ‘O‘S“¯utŸ¯ːVːîutŸîī‘lŸī.‘utŸ.‘/‘tpŸ/‘o‘utŸĸ¯ut¯žvī ‘ut/‘@‘utŦːģ ŸŦ¯utŸ¯ːVېîutŸîī‘lŸ‘.‘utŸ.‘/‘tpŸáîusŸîī‘kŸ‘.‘usŸ.‘/‘toŸáīP‘'‘Pú‘ą ŸúũutŸũ‘V/‘O‘Ļ Ÿ/‘3‘utŸ3‘O‘VW‘a‘usŸa‘e‘Re‘o‘usŸW‘e‘Ps‘ÑuÑđt đî‘uî‘ī‘t ī‘"’us‘Ñu Ñđtđî‘u î‘ī‘tī‘"’u s‘x‘upŸx‘Á‘SÁ‘ÑupŸÃ‘đtlŸÄ‘ė‘Sė‘î‘upŸî‘ī‘tlŸī‘ņ‘Sņ‘’upŸ’"’Sņ‘’upŸ÷‘’uoŸ’’R’’uoŸ÷‘’PĻ‘Á‘SÁ‘ÑupŸÃ‘đtlŸÄ‘ė‘Sė‘î‘upŸî‘ī‘tlŸĻ‘ÑutŸÃ‘đtpŸÄ‘î‘utŸî‘ī‘tpŸŠ‘ÑuoŸÃ‘đtkŸÄ‘î‘uoŸî‘ī‘tkŸŠ‘ŗ‘Pŗ‘Ŋ‘ut<ŸÄ‘Ī‘P°‘Ŋ‘SБŨ‘upŸļ‘Ŋ‘uoŸÖ‘Ũ‘uoŸļ‘đP֑į‘P`’ڒulŸÚ’ے‘dŸÛ’Q“ulŸv’ڒulŸÚ’ے‘dŸÛ’“ulŸ“Q“ulŸ”’Ų’SŲ’ڒutŸÚ’ے‘lŸÛ’“S“!“S!“6“utŸ”’ڒuڒے‘Û’“u“6“uŦ’Ų’SŲ’ڒutŸÚ’ے‘lŸÛ’“S¯’ڒukŸÚ’ے‘cŸÛ’“ukŸ¯’š’Pš’Òs<ŸÛ’į’Pļ’ÒupŸč’õ’upŸŧ’ÒSî’õ’utŸŧ’ÒPî’ū’PÒڒulŸÚ’ے‘dŸÃ’ے0Ÿ““ulŸ““0Ÿ!“6“utŸ'“1“ukŸ1“5“R5“6“ukŸ'“5“P6“M“upŸ<“F“ukŸF“J“RJ“M“ukŸ<“J“PŊĐ\oŗOŸOĒŸ\oÄQ“ !-GbkYtã~VCåKKyWulĪnrL—š"ŦˇŨā¯ÛÛ 1ŋŸĒ\TÅ=ûëR ¯=ķmckūKhfh\\hhhhĻht_ØķœŅEÁx ]~œÚFķĐĨFņƒ‡ƒ‡~čhĢÎĒlsz€psz€;>AFdl‹Ž‘–´ŧÛŪáæ +.16T\{~†¤ŦËÎŅÖŒ”´ˇēŋkŋÉÍksŦ¯ļģÛ3@Pafiw€†ˆ‹€†ˆ‹€†ˆ‹  ) )09 09 09 ['8;@-8;@ ['8;@-8;@/27$/27¨Ē°q|„ ¨ĒĀq|„ĸ Ā(0q|„ĸ číņ   ĸčíņüĸčíņô   &035@&035@@XÂÕ@IÂÕXadgadgq|„adgjjq|„    + Č     < Č H P S t } Č Ũ ę ė í đ ų    4;AP8;APA e h k ž Ģ Ā Í ¤ Ģ Ā Í Ø Ū á   R  C34@  #VY\_b)1=qVY\_blŧõû îõû )1)1':=@:=@JX`:=@CCJX`z€‰Å”ŖēŜŖēÅÄÉĖĪÕâÄÆÕâÆÉĖĪ%2%2`zÄĮĖ`m—ą`f—fmąmząÄĮĖmsąˇszˇÄĮĖ!dgl 7Q7= =Q Qdgl QWWdglsvyĶˆ”›ÄĮĖˆ”ąÄĮĖˆąļ”ļÄĮĖōôû9<Aû"RT\Œpsv|ĸ¤ŦÜōôü.BDL~›žĀÂÛūXfhNZØĄŖĻ˛ĩļĐÜßāú 6AHK 8,8;<Uade~ŠŽ¸ÃĮĘĪÜ8HÕÜ8HÜéHXâéHXéöXhīöXhöhxühxxˆ xˆˆ”ˆ”bdlŒ’”œŧ  U[_†ĐĐpsu€‡Žëđw:n|×ā:GLQåįGLQdāåįøGLāã)C)1CHwzƒˆ`w“€ `n“°ĀÃÅĘØŨāã  į 8 € Ĩ Ņ ā ū !#!ā ų û ū !#!į ö !#!É!s"€"˛"â!å!č!s"€"’"â!å!č!ę!í!ī!ø!""#"ø!û!""""""""j"o"""e"j"#"e"€"’"["e"€"’"####Ē#ˇ#ģ#Ā#ë%ú%&&;&H&X&b&f&k&X&b&f&k&8A8A"AYAG"GY"/Yy"(Y_(/_y0909!9Q9>!>Qd'˜''Į'd'n's'u'w'•''Į'ō'ô'(Q)X)t)ō'ô'(H)`)t)((2):)=)@) (2)`)t)$(((+(2)`)t)+(8(§(Š(Ŧ(ą(H(§(ĩ(2)`)t)z(Š(`)p)ô()p)t)* * **R+û+,0,3,5,@,Ô,z+—+š+›+ĩ,Ô,‰+—+š+›+—+š+›+ĩ+¸+ģ+k,€,ĸ+ĩ+¸+ģ+ĩ+¸+ģ+Å+@,P,ĩ+¸+ģ+ž+ž+Å+@,P,Å+Ō+P,`,Ë+Ō+P,`,Ō+Õ+Ú+Ũ+â+å+ņ+û+`,k,ô+û+`,k,ã,- -"-°/ļ/¸/ģ/Ø/ė/000 00Ž0ą0É00“0–0§00“0–0Ÿ0Ņ0Ø0Ü0â0ã0é0ī0ų0ü0U1h1s11Ā111B1H1K1§1Ā1B1H1K1U1h1s1B1H1K1N1N1U1h1s1Î12 2-2@2Š2ô122 2r2Š222 22@2W222 2 2 22@2W2–2œ2ĸ2ö233-3f3–2œ2ĸ2Ž2Å2Ė2Ī2Ō2Å2Ė2Ī2Ō2Ė2Ī2Ō2Ü233Ė2Ī2Ō2Ü233Ė2Ī2Ō2Õ2Õ2Ü233æ2é2ė2ö233æ2é2ė2ö233æ2é2ė2ī2ī2ö233x3{3~3č3ø34(4…4x3{3~3‹3x3{3~3€3Ŧ3ļ3š3ŧ3ļ3š3ŧ3Æ3(444ļ3š3ŧ3ŋ3ŋ3Æ3(444Æ3Ø3Û3Ū3T4n4Ø3Û3Ū3č344Ø3Û3Ū3á3á3č344Ũ4î4ņ4ô4*5B5î4ņ4ô4 5î4ņ4ô4÷4V5X5^5n5€5:6Ģ5Ž5ą5ģ5ø56Ģ5Ž5ą5ģ5ø56Ģ5Ž5ą5´5´5ģ5ø56F6L6R6ī67#707Č7^6€6ƒ6†6O7d7k6€6ƒ6†6€6ƒ6†6”6@7O7€6ƒ6†6‰6‰6”6@7O7§6Ē6­6¯6Ã6Ō6Õ6Ø6˛7Č7Ō6Õ6Ø6â607@7Ō6Õ6Ø6Û6Û6â607@7â6ī6 777#7â6č6 7777č6ī67#77 777¤8Ö8đ891969Š8Ā8đ891969˛8ļ81969ļ8Ā8đ89d9f9m9Î9ī9w:ˆ:ą:ņ9A:C:F:’:ą:;:A:C:F:J:e:ˆ:’:U:e:ˆ:’:U:X:[:^:X:[:^:e:ˆ:’:/;?;B;G;4;?;B;G;Ÿ;<<4<ũ;<< <~<<H=p=J=M=R=p=ļ<š<ģ<Č<ë< = =ŋ=ĸ=Ĩ=Ē=ŋ= =6===H=p= =ŋ=Ä==(=p= =ŋ=Ä===ŋ=Ä==(=p= =2=6===H=>>>> 8C 8CS>V>X>x?~??›?Ģ?ģ?ė?S>V>X>`>f>m>s>‹>Ž>ļ>`>f>m>s>‹>Ž>ļ>?? ?Ü?ė?`>f>m>s>‹>Ž>ļ>Ķ>Ö>Ü>á>ö>?? ? ?!?o??? ? ?!?Z?x?{??ƒ?{?~?ƒ?‘?{?~?†?‘?ų?ü?@GAXAßAų?ü?@@XAhAų?ü?@@$@.@1@:@:@\@_@b@hAˆAB@O@R@S@V@\@_@b@hAˆA\@_@b@x@b@l@o@x@x@š@@ @ˆA¨A€@@@‘@”@š@@ @ˆA¨AĨ@ŧ@ŋ@Ā@¨@˛@ĩ@ŧ@ŋ@Ā@ŧ@ŋ@Ā@Ė@Ī@Ō@Ė@Ī@Ō@å@Ō@Ų@Ü@å@č@ō@õ@ū@ū@#A¨AÁAAAAAA A A#A¨AÁA#A1A4A7A1A4A7AGA1A4A7AGA1A4A7AGA ÛTgjmœĨ¨ĢĨ¨ĢŋĨ¨ĢŋĨ¨ĢŋæAéAīAB!B&B0B0C3C5C@CE0BCPDD¸DíDFAFGFGFJFFĻFWFZF]FtFWFZF]FtFWFZF]FtFØFÛFāFŋGÉGęGöGDHéFķFöF˙F˙FGÉGâGGGÉGâGG)G,G/G)G,G/G?G)G,G/G?G)G,G/G?GKGNGQGGKGNG‚G…GKGNG‚G…GKGNG‚G…G`GmGpGvGmGpGvG‚G…GˆGvGyG|G‚G…GˆGGœGŸGĸGœGŸGĸG˛GœGŸGĸG˛GœGŸGĸG˛G˛GŋGâGęG¸GŋGâGęGVH^HbH™H¨HąH‹H™H¨HąH’H™H¨HąHÄH÷HI IŅHŨHāHâHäHčHíH÷HI IäHčHíHđHđH÷HI IIIII"IģIĐI`JmJŅJ'I2I7I9INIQITIdIgIjITI[I^IdIgIjIdIgIjIzI}I€IdIgIjInItIzI}I€IˆI‹II IˆI‹II IˆI‹II IĒIģIDJGJJJ`JĒI°IDJGJJJMJ°IģIMJ`JŪIėIīIđIėIīIđIúIJ J J JJ J JJ> Ā&,39QT|&,39QT|ÃÆĖ Ž&,39QT|˜ž˜ž¸ÃÆĖĪã1ÃÆĖĪã>DFORSORSW\behbehr€ˆbehkkr€ˆéJņJK+PdKØLŅNŪN*OXOŋOöOsK}K€KˆKˆK™KœKŸK™KœKŸK¯K˛KĩKŸKĻKŠK¯K˛KĩK¯K˛KĩKÅKČKËKĩKŧKŋKÅKČKËKÅKČKËKÛKŪKáKËKŌKÕKÛKŪKáKÛKŪKáKņKôK÷KáKčKëKņKôK÷KņKôK÷KL L L÷KūKLL L LL L LLLLLLL,L/L2LL#L&L,L/L2L,L/L2LBLELHL2L9LXSX1X7XSXcX–YœYĨY#\&\)\8\6]–YœYĨYüZ[[Ō\6]–YœYĨYĢYąYĩYģYĐYĶYīYĢYąYĩYģYĐYĶYīYWZ]6]ĢYąYĩYģYĐYĶYīYZZ ZZZ ZAZWZ]Z{ZÉZĐZäZėZöZWZ]Z{ZÉZūZ[['[8\\ \š\['[8\\ \š\[#[8\\ \š\8\Q\`\\ \š\;\=\C\E\˛\š\E\Q\`\\ \˛\`\\ \˛\'[*[-[8['[*[-[8['[*[-[8[*[-[O[b[h[i[b[h[i[r[x[{[r[x[{[#\\ \r[x[™[Ę[\ \r[x[Ŗ[ą[\ \r[x[Ŗ[Ļ[Ļ[ą[\ \F]I]S]á]đ]Å_Y]Ŋ]đ]Ĩ_p]ĩ]đ]Ĩ_“]] ]˛]˛]ĩ]§^Đ^˛]ĩ]Ž^ˇ^ē^Đ^ķ]ũ]^^^'^*^8^;^E^H^X^a^k^n^€^Ķ^ā^ã^đ^ķ^___(_+_,_<_?_B_,_3_6_<_?_B_<_?_B_R_U_X_<_?_B_F_L_R_U_X_R_U_X_h_k_n_X___b_h_k_n_h_k_n__h_k_n_q_Ŋ]Ë]Î]Ņ]Ë]Î]Ņ]á]Ë]Î]Ņ]á]Ë]Î]Ņ]á]Ö_Ų_ß_daxaÕaå_@axa‡aĨaÕaå_ë_š` `Ŗ`Ļ`+a4a`š`Ž`#a&a+axa‡aĨaÕa``` `ų` a` `````` `a a`` `3`6`9` `*`-`3`6`9`3`6`9`I`L`O`9`@`C`I`L`O`I`L`O`_`b`e`I`L`O`S`Y`_`b`e`_`b`e`u`x`{`e`l`o`u`x`{`u`x`{`‰`xa‡au`x`{`~`~`‰`xa‡a‰`š` a#a&a+a`š` a#a&a+aÍ`Đ`Ķ`ā`å`æ`ā`ã`æ`ų`æ`í`đ`ų`@aNaQaTaNaQaTadaNaQaTadaNaQaTada-@K @K @K$@K$@KøaŅcācždbbbbb?bācd"b/b2b3b6bdQdƒdžd7c=c>cmc d0dƒdžd7c:c>cBcEcmc d0dƒdžd7c:c>cBcEcJcMcOcJcMcOcYc\c_cYc\c_cmc d0dYc\c_cbcbcmc d0dzc}c€cczc}c€cczc}c€ccœcŸcĸcžc0d>dœcŸcĸcžc0d>dœcŸcĸcžc0d>dĻc˛c0d>dĢc˛c0d>dŽd7eHeÃeąd¸dĀdÂdÄd7eHeĻeĐdŌdÕdådčdëdĐdŌdÕdŲdßdådčdëdådčdëd$eHe“eeeeeeee$eHeXeeeeee$eHeXeÖeŲeãeäeëefĀfāfđfg-gsgđeķeõe)fĀfĐf\gsgøe)fĀfĐf\gsgøef f ff f fffffff)fĀfĐffffff)fĀfĐf)fnfĐfāfđfg-gAgFf^fafdf^fafdfnfĐfāf^fafdfgfgfnfĐfāfÜeāeäeëeŽf‘f”f°fāfđfŽf‘f”f°fāfđfŽf‘f”f°fāfđf˜f¤fāfđff¤fāfđf8Py,8P\18P\-:WJXugˇgČg@iāgägįgígägįgđgķg.hGhJhMhīhi:hGhJhMhGhJhMh[hāhīhGhJhMhPhPh[hāhīh€h…h‰hŒh h¤h¨hŽhąh´hˇhšhŧhŋhšhŧhÅhČhLiPiSi­j°jŗjĀjkjiāi˙jktiˆiiŌiÕiÚi˙jkĸi¨iŠišiŋiÂišiŋiÂiŌiÕiÚišiŋiÂiÅiÅiŌiÕiÚiōiøiûi­jÔjæjōiøijJjÔjæjōiøi#j1jÔjæjōiøi#j&j&j1jÔjæj&k(k/k1k4k–k kúk[kukxk{k[kdkokukxk{kukxk{kˆkĐkÜkukxk{k~k~kˆkĐkÜk k­k°kÁkŖk­k˛kĩkģkÁkll llll llll ll†lšll l†ll”lšll lšll lĒl¸lĀlšll lŖlŖlĒl¸lĀlmmm mmmmmm mmm m*m8m@mmm m#m#m*m8m@m‘m™mœmŸm™mœmŸm¯m™mœmŸm¯m™mœmŸm¯mwozo{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ĩo1qZq_qhqkqmqoqtqFqZq_qhqđqôqøqúqđqôqøqúqđqôqøqúq ruxˆl cfil "(=@\"(=@\ÄRl"(=@\‡Œ‡ŒŽÄĘč6>\ÄĘč6kĩˆ¨ĀûŠ–™ĄĄĩĀāĒĩĀāĩĮÍĐĮÍĐr¨ĀĮÍî¨ĀĮÍø¨ĀĮÍøûû¨ĀY\c(.5JJY\cY\cr|rr‚rŒr¨r´r|rr‚r…r…rŒr¨r´r\s_sbslsˆs”s\s_sbseseslsˆs”sņstt tt;t>tkt8t;t>tKt tĮtËtĐtĶtØtŲtŪtŗtĮtËtĐtPuTuXuZuPuTuXuZuPuTuXuZu y|Ī cfiq "(=@\"(=@\ÄWq"(=@\†‹†‹ŽÄĘč6=QT^ÄĘč6kŧ°Āq‚™ĪŠ–™ĄĄŧ¤°ĀĄĒ°ļǰļŧ¤°Ā¤°ĀĀÕøq‚™Īz‚™Ī™žĄŦÄĪŧÎÔ×ÎÔ×y°ĀÎÔõ&°ĀÎÔ˙ °ĀÎÔ˙ °Ā&`cj/5<QQ`cj`cjyÜußuâuėuvvÜußuâuåuåuėuvv_vHwXwĪwwvzv}vHwXw€wŸwĪwšvÕvhw€wĘvÕvhw€wwww&wXwhwwwwww&wXwhw&w6w9w>w,w6w9w>w(147147G147G147Gx,x/x2xžxÔxx,x/x2x,x/x2x“w“ū’“““““!“+“ u~(}†— 0š œ¨"# G[^a[^att„‡„‡‘Ҕ͔á”į”đ”<–H–öš • ••&••••&•&•H•K•N•`˜€˜.•;•>•?•B•H•K•N•`˜€˜K•N•c˜m˜p˜€˜H•K•N•a•d•g•N•X•[•a•d•g•“•¨•Ģ•Ŧ•¨•Ģ•Ŧ•ē•Ŋ•Ā•ē•Ŋ•Ā•Đ•Ķ•Ö•ē•Ŋ•Ā•Ä•Ę•Đ•Ķ•Ö•Đ•Ķ•Ö•ä•Đ•Ķ•Ö•Ų•^–—0˜`˜āšöša–k–0˜H˜y––’–”––’–”–ĸ–Ĩ–¨–¯–˛–´–Æ–Æ–Ö–Ų–Ü–Ö–Ų–Ü–ë–î–ņ–Ö–Ų–Ü–ā–å–ë–î–ņ–ë–î–ņ–—ë–î–ņ–ô–——¸™Î™——ž™Î™›˜)™Î™ę™hššĶ˜Õ˜Î™Ô™×™ę™™™™™™™™)™™™™)™™™™)™)™=™@™B™=™@™B™P™S™V™P™S™V™f™i™l™P™S™V™Z™`™f™i™l™f™i™l™|™™‚™l™s™v™|™™‚™|™™‚™’™•™˜™‚™‰™Œ™’™•™˜™’™•™˜™¨™Ģ™Ž™’™•™˜™œ™ĸ™¨™Ģ™Ž™¨™Ģ™Ž™¸™ę™ö™¨™Ģ™Ž™ą™ą™¸™ę™ö™—/—2—4—/—2—4—B—E—H—B—E—H—X—[—^—B—E—H—L—R—X—[—^—X—[—^—p—X—[—^—a—Ņ—â—å—č—â—å—č—ø—û—ū—â—å—č—ė—ō—ø—û—ū—ø—û—ū—˜ø—û—ū—˜õ•–––õ•–––––––€˜˜––– – ––€˜˜)–:–˜ ˜/–:–˜ ˜,9PX29PX9FXp9?X^?F^p F`ˇ,9`h29`h9Fh„9?hn?Fn„ kxĄĒŨ$kx˜ĒŨ$_x˜ĒŨERˆ˜KRˆ˜R_xˆX_xˆ k€ā k€ā$k€ ­ā$_€ ­āER KR R_€X_€ <ŠĄ<Įā0XdĄ¯HKNQx‰Œ‰Œĸĸ¯˛ĩ¯˛ĩŋĘ×@HĐ×@H @CD,@CD@CDMPSMPS]x€MPSVV]x€]j€—]c€†cj†— @CD,@CD@CDMPSMPS]x€MPSVV]x€]j€—]c€†cj†—ˆž5ž°DORUORU_°¸ORUXX_°¸_l¸×_e¸želž× AP7i1]y|1ly|¨ļšŧļšŧĘPXļšŧŋŋĘPXĘÛXwĘĐX^ĐÛ^wÛėw—Ûáw}áė}—ėũ—ˇėō—ōũˇũˇ×ũˇŊŊ××÷×ŨŨ÷0÷%÷ũ%0ũ0A7066A7&47:47:D`h47:==D`hDQhDJhnJQn ›!›p›Ũ› ››p›Ũ›#0…ŽŸ $@Ē $@Ē œœœ3œHœ¤œˇœČœœ,œHœ¤œˇœČœœ(œHœ¤œˇœČœÜœ ÕŨžÜœ÷œ €ŨđÜœīœ €Ũđúœ€Õđžúœũœ€ÕđžžSž`žŸŸŸ ŸFŸž4ž7ž:ž`žĀž Ÿ3Ÿž/ž`žĀž Ÿ3Ÿ4ž7ž=žBžEžSžĀžŸŸŸ3ŸFŸ4ž7žAžBžEžSžĀžŸŸŸ3ŸFŸ\Ÿ™Ÿ¨ŸZ ] ` h Ž \ŸzŸ¨Ÿ h { \ŸoŸ¨Ÿ h { zŸ™Ÿ Z ] ` { Ž zŸƒŸ‡Ÿ™Ÿ Z ] ` { Ž œ Ų č šĄĄ Ą¨ĄÎĄœ ē č HĄ¨ĄģĄœ ¯ č HĄ¨ĄģĄē Ų HĄšĄĄ ĄģĄÎĄē Ã Į Ų HĄšĄĄ ĄģĄÎĄßĄĸ0ĸŖßĄöĄųĄüĄ0ĸĸīĸŖßĄņĄ0ĸĸīĸŖöĄųĄ˙ĄĸĸīĸŖŖöĄųĄĸĸĸīĸŖŖ@ŖLŖSŖ{Ŗ~ŖƒŖ@ŖLŖhŖ{Ŗ~ŖƒŖ@ŖEŖhŖmŖEŖLŖmŖ{Ŗ~ŖƒŖ°ŖĘŖŅŖ¤¤¤°ŖŊŖæŖ¤°ŖļŖæŖėŖļŖŊŖėŖ¤ŊŖĘŖ¤¤¤¤ŊŖÃŖ¤¤ÃŖĘŖ¤¤¤¤3¤E¤P¤Ĩ¤­¤Ā¤đp€ĀŪ!đp€ĀŪ&QŪõQÜ`ŸĢõ]`cfžĄ¤žĄ¤ˇˇÄĮĘÄĮĘÔßđ€Ÿåđ€ŸđũpxöũpxȤ֤ͤđ¤ĐĨāĨđ¤ũ¤ĨĨĨĨĨ/Ĩ2Ĩ5ĨĨĨĨ#Ĩ)Ĩ/Ĩ2Ĩ5Ĩ/Ĩ2Ĩ5ĨEĨ5Ĩ<Ĩ?ĨEĨEĨ^ĨaĨdĨEĨQĨTĨUĨXĨ^ĨaĨdĨ^ĨaĨdĨ“ĨāĨĻhĨ{Ĩ~ĨĨ„ĨĨhĨrĨsĨzĨĨ“ĨāĨĻ“ĨŸĨĸĨĨĨŸĨĸĨĨĨĩĨŸĨĸĨĨĨĩĨŸĨĸĨĨĨĩĨĩĨÂĨĻĻģĨÂĨĻĻ‚Ļ…ĻˆĻ’Ļ°Ļ¸Ļ‚Ļ…ĻˆĻ‹Ļ‹Ļ’Ļ°Ļ¸Ļ’ĻŸĻ¸ĻĪĻ’Ļ˜Ļ¸ĻžĻ˜ĻŸĻžĻĪĻ8§x§€§Ē§8§g§€§Ē§W§Z§]§g§€§Œ§W§Z§]§`§`§g§€§Œ§ĩ§¸§ž§YŠ`Š ĒĮ§Ņ§Ô§Ũ§Ũ§˙§¨¨`Š€Šå§ō§õ§ö§ų§˙§¨¨`Š€Š˙§¨¨¨¨¨¨¨¨¨¨¨¨¨¨.¨1¨4¨¨%¨(¨.¨1¨4¨.¨1¨4¨G¨4¨;¨>¨G¨G¨i¨l¨o¨€Š ŠO¨\¨_¨`¨c¨i¨l¨o¨€Š Ši¨l¨o¨‚¨…¨ˆ¨o¨y¨|¨‚¨…¨ˆ¨‚¨…¨ˆ¨˜¨›¨ž¨ˆ¨¨’¨˜¨›¨ž¨˜¨›¨ž¨Ž¨ą¨´¨ž¨Ĩ¨¨¨Ž¨ą¨´¨Ž¨ą¨´¨Ä¨Į¨Ę¨´¨ģ¨ž¨Ä¨Į¨Ę¨Ä¨Į¨Ę¨Ú¨Ũ¨ā¨Ę¨Ņ¨Ô¨Ú¨Ũ¨ā¨Ú¨Ũ¨ā¨ņ¨ô¨õ¨ā¨į¨ę¨ņ¨ô¨õ¨ņ¨ô¨õ¨˙¨ŠŠ)Š,Š/Š9аŠŋŠ)Š,Š/Š2Š2Š9аŠŋŠ9ŠFРаŠ?ŠFРаŠĒĒĒ!Ē*ǟǰĒŅĒāĒMĢuĒxĒ{Ē…ĒāĒđĒuĒxĒ{Ē~Ē~Ē…ĒāĒđĒ…Ē’ĒđĒûNjǒĒđĒûĒ’ĒŸĒēĒŊĒĀĒŅĒ’Ē˜ĒēĒŊĒĀĒÃǘǟĒÃĒŅĒVĢYĢ\Ģ_Ģe̠̔ĢđĢūĢ7ŦVĢYĢ\Ģ_ĢeĢṁ̔ĢčĢđĢĢ”ĢčĢđĢČĢËĢÎĢčĢČĢËĢÎĢŅĢ1NQT`|‚E\o|‚ЧĒĢ™§Ȩ̄ĒĢ´ˇē´ˇēÄ ´ˇēŊŊÄ ÄŅ 7ÄĘ &ĘŅ&7ŅŪ7OŅ×7=×Ū=OŪëOgŪäOUäëUgëügëņgmņümü —ü… …—.KNQ]y|=Tly|‡¤§¨–¤§¨¤§¨ą´ˇą´ˇÁą´ˇēēÁÁÎ/ÁĮĮÎ/ÎÛ/GÎÔ/5ÔÛ5GÛčG_ÛáGMáčM_čõ_wčî_eîõewõwõûw}û}1B0JBX[^JXj†‰Œy†‰Œ”ą´ĩŖą´ĩą´ĩžÁÄžÁÄŌX`žÁÄĮĮŌX`Ōã`ŌØ`fØãfãô—ãé…éô…—ô—ˇôú—úˇˇ× ˇŊ Ŋ×'×÷×Ũ'Ũ÷ J¨¸ö  J¨¸ö  ,/0,/0:=@:=@J¨¸:=@CCJ¨¸J†¸ö'=cvy|vy|†¸Čvy|†¸Č9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°Ā,/2 &,/2,/2kßH[^a[^ak [^addk 9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°Ā%(+%(+d€ĪATWZTWZd€TWZ]]d€9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°ĀAŦKŦPŦVŦYŦ]Ŧ`Ŧģ­Č­hŽuŽ‚¯vŦ{Ŧ~Ŧ‡ŦŦ¤Ŧ§ŦĒŦ¤Ŧ§ŦĒŦģŦžŦŋŦ¤Ŧ§ŦĒŦŽŦ´ŦģŦžŦŋŦģŦžŦŋŦÍŦĐŦŌŦÍŦĐŦŌŦáŦäŦåŦáŦäŦåŦņŦņŦ­­ ­­­ ­a­­­I­N­T­]­$­'­*­;­>­?­*­1­4­;­>­?­;­>­?­I­Q­T­ˆ­‹­Œ­”­ˆ­‹­Œ­”­Ē­ģ­`Žhް­ģ­`ŽhŽå­é­î­õ­{ŽŽ„Ž‹ŽšŽŽŸŽÜޝ0¯§ŽĒŽ­Žŋޭ޴ގŽŋŽÆŽÉŽĖŽÜŽÆŽÉŽĖŽÜŽÆŽÉŽĖŽÜŽ:=@˜° -014:=@˜°=@›Ĩ¨°:=@y°˙Viloiloy°Āilorry°Ā›¯ž¯¤¯cąpą‡ą˜ąæą¨¯Đ¯pąuą¸¯Å¯Č¯Ë¯H°K°N°°ŅąæąV°Y°\°n°\°c°f°n°w°z°}°°w°z°}°°w°z°}°°Š°Ŧ°¯°î°ēąŅąˇ°ē°Ŋ°Ī°Ŋ°Ä°Į°Ī°Ø°Û°Ū°î°Ø°Û°Ū°î°Ø°Û°Ū°î°AąDąGącą˜ąŖąAąDąGącą˜ąŖąAąDąGącą˜ąŖąKąWą˜ąŖąPąWą˜ąŖąc˛´ ´*´8´†´c˛y˛{˛~˛ö˛ų˛ü˛;ŗm´†´ŗŗ ŗŗ ŗŗŗŗ%ŗ(ŗ+ŗ;ŗ%ŗ(ŗ+ŗ;ŗ%ŗ(ŗ+ŗ;ŗWŗZŗ]ŗœŗC´V´eŗhŗkŗ}ŗkŗrŗuŗ}ŗ†ŗ‰ŗŒŗœŗ†ŗ‰ŗŒŗœŗ†ŗ‰ŗŒŗœŗīŗōŗõŗ´8´C´īŗōŗõŗ´8´C´īŗōŗõŗ´8´C´ųŗ´8´C´ūŗ´8´C´ũ´ĩĩŪļđļúļˇmˇũ´ĩĩĩũ´ĩĩĩũ´ĩĩĩũ´ĩĩĩũ´ĩĩĩ‹ĩŽĩĩĘĩAˇXˇ˜ĩ›ĩžĩĒĩ˜ĩ›ĩ ĩĸĩ˜ĩ›ĩ ĩĸĩ˜ĩ›ĩ ĩĸĩ´ĩˇĩēĩĘĩ´ĩˇĩēĩĘĩ´ĩˇĩēĩĘĩņĩôĩöĩ3ļ*ˇAˇūĩļļļļ ļļļļ ļ#ļ3ļļ ļ#ļ3ļļ ļ#ļ3ļfļiļkļĨļXˇmˇsļvļyļ…ļsļvļ{ļ}ļsļvļ{ļ}ļsļvļ{ļ}ļļ’ļ•ļĨļļ’ļ•ļĨļļ’ļ•ļĨļŧļŋļÂļŪŧļŋļÂļŪŧļŋļÂļŪÆļŌËļŌŨˇāˇæˇ˙šē'ē8ē´ēęˇ ¸ē珎¸Ÿē´ēĄ¸¤¸§¸ˇ¸Ą¸¤¸§¸ˇ¸Ą¸¤¸§¸ˇ¸ˇ¸ø¸ˆēŸēÃ¸Æ¸É¸Û¸É¸Đ¸Ķ¸Û¸â¸å¸č¸ø¸â¸å¸č¸ø¸â¸å¸č¸ø¸šššTšqēˆēš"š%š7š%š,š/š7š>šAšDšTš>šAšDšTš>šAšDšTšŒšÆšZēqē°šŗšļšÆš°šŗšļšÆš°šŗšļšÆšŨšāšãš˙š8ēCēŨšāšãš˙š8ēCēŨšāšãš˙š8ēCēįšķš8ēCēėšķš8ēCē9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°Ā9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°Ā@ģYģhģõžŋRĀhģnģyģˇģ*ŋAŋģ‚ģ…ģ—ģ…ģŒģģ—ģĄģ¤ģ§ģˇģĄģ¤ģ§ģˇģĄģ¤ģ§ģˇģÄģĮģÉģŧAŋXŋŅģÔģ×ģéģ×ģŪģáģéģđģķģöģŧđģķģöģŧđģķģöģŧ ŧ#ŧ%ŧaŧXŋoŋ-ŧ0ŧ3ŧDŧ3ŧ9ŧ<ŧDŧKŧNŧQŧaŧKŧNŧQŧaŧKŧNŧQŧaŧaŧĸŧoŋ†ŋmŧpŧsŧ…ŧsŧzŧ}ŧ…ŧŒŧŧ’ŧĸŧŒŧŧ’ŧĸŧŒŧŧ’ŧĸŧ¯ŧ˛ŧ´ŧņŧ†ŋ ŋŧŧŋŧÂŧÔŧÂŧÉŧĖŧÔŧÛŧŪŧáŧņŧÛŧŪŧáŧņŧÛŧŪŧáŧņŧūŧŊŊ@Ŋ ŋžŋ ŊŊŊ#ŊŊŊŊ#Ŋ*Ŋ-Ŋ0Ŋ@Ŋ*Ŋ-Ŋ0Ŋ@Ŋ*Ŋ-Ŋ0Ŋ@Ŋ@Ŋ€ŊžŋÜŋLŊOŊRŊcŊRŊXŊ[ŊcŊjŊmŊpŊ€ŊjŊmŊpŊ€ŊjŊmŊpŊ€ŊšŊŊŸŊÜŊÜŋúŋ§ŊĒŊ­ŊŋŊ­Ŋ´ŊˇŊŋŊÆŊÉŊĖŊÜŊÆŊÉŊĖŊÜŊÆŊÉŊĖŊÜŊÜŊžúŋĀčŊëŊîŊ˙ŊîŊôŊ÷Ŋ˙Ŋž ž žžž ž žžž ž žž6ž9ž;žxžĀ6ĀCžFžIž[žIžPžSž[žbžežhžxžbžežhžxžbžežhžxžxž¸ž6ĀRĀ„ž‡žŠž›žŠžž“ž›žĸžĨž¨ž¸žĸžĨž¨ž¸žĸžĨž¨ž¸žĪžŌžÕžõžŋŋĪžŌžÕžõžŋŋĪžŌžÕžõžŋŋŨžéžŋŋâžéžŋŋ9<?˜° #9<?˜°<?˜°<?›žĄ°9<?x°˙Uhknhknx°Āhknqqx°Ā ÁÁÁOÁÂ1ÂÁÁ Á2Á Á'Á*Á2Á9Á<Á?ÁOÁ9Á<Á?ÁOÁ9Á<Á?ÁOÁeÁhÁkÁ‡ÁČÁĶÁeÁhÁkÁ‡ÁČÁĶÁeÁhÁkÁ‡ÁČÁĶÁoÁ{ÁČÁĶÁtÁ{ÁČÁĶÁ‡Á”Á¸ÁČÁÁ”Á¸ÁČÁ  ÂÂ~‚‡Ž¹ÂŧžÂûÂÂÃŲÃÆÂÉÂĖÂŪÂĖÂĶÂÖÂŪÂåÂčÂëÂûÂåÂčÂëÂûÂåÂčÂëÂûÂà à ÃJÃŲÃîÃÃÃÃ-ÃÃ"Ã%Ã-Ã4Ã7Ã:ÃJÃ4Ã7Ã:ÃJÃ4Ã7Ã:ÃJÃmÃpÃsÓàÃĢÃmÃpÃsÓàÃĢÃmÃpÃsÓàÃĢÃ{ÇàÃĢÀÇàÃĢÃ.Ä2Ä7Ä>ÄPÄSÄUĒÄrʼnÅ]Ä`ÄcÄuÄcÄjÄmÄuÄ|ÄĂĒÄ|ÄĂĒÄ|ÄĂĒğÄĸĤÄáĉŞÅŦĝĞÄÄIJĚÄŧÄÄÄËÄÎÄŅÄáÄËÄÎÄŅÄáÄËÄÎÄŅÄáÄÅ Å#ÅCÅPÅ[ÅÅ Å#ÅCÅPÅ[ÅÅ Å#ÅCÅPÅ[Å+Å7ÅPÅ[Å0Å7ÅPÅ[Å †˜vy|Rt˜  4  ø1.R ¯ĩŧÂŨā¯ĩŧÂŨāoø¯ĩŧÂŨā3DE3DEZou“áčü ou“á '2 '2 '2 '2771e€Š7IR\]„IR\]„ę1IIR\]„­¸ē­¸ēÕęđbi}€Šęđb•˜›ĸ­˜›ĸ­˜›ĸ­•˜›ĸ­ŗŋĀ%+1yŠŋ9?BTBILT`fiy`fiy`fiyŧÂÅåāøŧÂÅåāøŧÂÅåāøÉŲāøÎŲāøåų °îų °ų Đā Đā ĀÆÉĀĐ 1bĀĐ ;IĀĐ ;>>IĀĐ¨ĀÆÉĀÆÉvy|°ĀĀÆį°ĀĀÆņ˙°ĀĀÆņôô˙°Ā#)N^ĪÕØÛÕØÛíÕčü˙ (ģčP(L Lp""pģč0Pp‘@P‘ŗ0@Ž”—¨áâ )/6<WZ‚)/6<WZ‚é¨Ā)/6<WZ‚­¸š­¸šÔéī [bv}‡éī [Ž”—š§˛—š§˛—š§˛š§˛ˇˇwâˇÉŌÜŨÉŌÜŨ`fp´âÉŌÜŨ-8:-8:Upv”âéũ pv”â(3(3(3(39EFĢąˇ˙á÷ŋÅČÚČĪŌÚæėī˙æėī˙æėī˙BHKk¨BHKk¨BHKk¨O_¨T_¨kP`tP`“€ˆ“€“FLOp€“™ˇčp€“™ÁĪp€“™ÁÄÄĪp€.FLOFLOü˙`pFLmž`pFLw…`pFLwzz…`pНšÎ  %%8@•ž¯&Žęų§ˇēŋ­ˇēŋˆķX_blo{~†ovy{TÆWÆYÆ_ÆWÆYÆpÆŽÆpÆsÆvÆ{ƟÆĸÆĨÆĒÆZ`mš¨c#&P¨¸Đ4ŊôL#Ęâ#Ęâ#4ŊĘ)4ŊĘP`¸Đ4Dô`pQ_}Œ’Œ’œŸĸœŸĸŊœŸĸĨĸ°k#&X°ĀØ9Ęü'T  (×ę(×ę(9Ę×.9Ę×XhĀØ9Iü hxVd'Š™œŸ™œŸŠŦ¯ŠŦ¯ĘŠŦ¯˛APŒ˜ū(+-:Ĩ´ˇē´ˇēÄĮĘÄĮĘāÄĮĘÍ$@K$@KĮĮ Į@ĮĀĮĪĮ$Į4ĮĀĮĪĮ)Į4ĮĀĮĪĮ@Į_Į°ĮĀĮGĮSĮ°ĮĀĮLĮSĮ°ĮĀĮ_ĮlĮ€ĮˆĮeĮlĮ€ĮˆĮlĮxĮˆĮ ĮlĮqĮˆĮĮqĮxĮĮ ĮĪĮŅĮÔĮÜĮÜĮŨĮāĮéĮéĮėĮīĮōĮėĮīĮōĮȐȓȖȩČŋČáČ ÉÉÉČÕČ ÉÉÎČÕČ ÉÉáČņČųČÉęČņČųČÉVÉ[É^ÉdÉdÉgÉjÉpÉgÉjÉpɌɨÉīÉöÉĘ0Ę?ĘEĘbʕʛʞʮʮĘįĘmĖ|ĖŒÍ¤Í¸ĘÛĘmĖ|ĖŒÍ¤ÍËĘÛĘmĖ|ĖĐĘÛĘmĖ|ĖįĘËOĖ]Ė$Ë*Ë-ËeË$ÍDÍ$Ë*Ë-ËU˞ËĐËøËOĖ¤ÍšÍŧËĐËøËOĖ¤ÍšÍÜËßËâËėË]ĖeĖÜËßËâËåËåËėË]ĖeĖ,ÎAÎPÎĨΞÎŅÎ]Ī`ĪpĐ~ĐcĪfĪĢĪĐĐpĐŌĐäĐcĪfĪĢĪÃĪĐpĐŌĐäĐcĪfĪĢĪŋĪĐpĐŌĐäĐ{Ī‰ĪĪ–Ī¤ĐĻĐŠĐ´ĐVŅYŅpŌ~Ō~ҁŅ`ŌpŌ„Ņ‡ŅœŅķŅŌ`ŌĐŌäŌ„Ņ‡ŅœŅ´ŅŌ`ŌĐŌäŌ„Ņ‡ŅœŅ°ŅŌ`ŌĐŌäŌŽŌŌ“ŌžŌ@Ph3>Phh„CQ„”QY”ŠYh´Á0CÅĶÕ×0<Hb/:Hbbz>Jz‡đJQY[‡ŖQY[f¯¸ >¸ģŋĘĖĪ Ķ6Ķ`ĶiĶlĶ€Ķ>ĶAĶEĶSĶ€ĶƒĶ†Ķ—Ķ@Ph3>Phh„CQ„”QY”ŠYh´Á0CÅĶÕ×0 ĶŦĶšĶ×ÔāÔ"ÖšĶ×ÔāÔ"ÖÕĶāĶãĶéĶéĶ ÔQÕdÕéĶüĶQÕdÕéĶîĶņĶôĶÔÔ!ԖÔÕ(ՄÕŦÕŅÕ"Ö0Ô3Ô4Ô_ÔhÔkÔãÕ"ÖbÔhÔkԖÔÕ(ՄՙÕyԂԅԈԂԅԈԖÔÕ(ՂԅԈԋԋԖÔÕ(ՖÔŊÔ8ÕQÕĸÔŊÔ8ÕQÕĸÔŊÔ8Õ>ÕAÕQÕŊÔĘÔ(Õ8ÕÃÔĘÔ(Õ8ÕĘÔ×ÔÕÕĐÔ×ÔÕÕ7ÖRÖ`ÖcÖfÖwְ֑֨ÖĮÖ‘Ö¨Ö°ÖŗÖļÖĮÖ×%×0×G××%×0×G××%×0×3×6×G×V×Y×e×h×n×zחלןױ׷×ģ×ĐŲ0ÚoÛ‚Û—×œ×Ÿ×ą×ĐŲ0ÚoÛ‚Û´×ˇ×ģ×Ā×Ã×ÜרØ$Ø'ØđÚOÛo܂ܴ׷×ģ×Ā×Ã×Ü×đÚOÛo܂ܴ׷×ģ×Ā×Ã×Ų×đÚOÛo܂ÜÜ×ß×'Ø-ØaØy؂ØãؐÚđÚUÜoÜÜ×ß×'Ø-ØaØy؂؉ؐÚđÚUÜoÜÜ×ß×'Ø-ØaØyؐÚđÚUÜoÜô×ØØØZŲyŲ|ŲšŲĄŲ§Ų0ڐÚ9ÜUÜZŲyŲ0ڐÚ9ÜUÜZŲvŲ0ڐÚ9ÜUܘۚ۠ۨÛÅÜÖÜŲÜŨÜŨsŨÅÜÖÜŨsŨ ŨŠŨˇŨČŨØŨåŨŪ,Ū9ŪĄß°ßčãhŪkŪsŪ„Ū‡ŪŠŪ=ãRã„Ū‡ŪŠŪ˜Ū á0á„Ū‡ŪŠŪŪŪ˜Ū á0áíŪđŪņŪß ß ßßß"ß%ßßß"ß%ßß"ß%ß3ߐá áß"ß%ß3ߐá áß"ß%ß(ß(ß3ߐá á3ßDßPá`á3ßDßPá`á9ßDßPá`áDßUß`ápáJßUß`ápáUßfßpá€áUßfßpá€á[ßfßpá€áfßz߀áálßz߀ááz߁߰ߡߐߥßá áßĄßá á–ߥßá áāßãßæßôß°áĀáāßãßæßôß°áĀáāßãßæßéßéßôß°áĀáôßā á°áúßā á°áāāā8āāāā8āāāāāMāiāLâiâ‡āŠā‹āšāā āãĄãĩā¸āģāÉāĀáĐáĩā¸āģāÉāĀáĐáĩā¸āģāžāžāÉāĀáĐáÉāÚāāáđáÉāÚāāáđáĪāÚāāáđáÚāëāĐáāáāāëāĐáāáëāüāđáūáëāüāđáūáņāüāđáūá–äĻä§äŠä å|åˆå]ëXåuåˆåHæöéŗęë]ëƒæ‰æŒæ–æžæ¤æ§æÁæžæ¤æ§æĒæûæfčŨčöéUįęįWégéÅéöéį–į™įĨįĶįŲįÜįęįWégéĶįŲįÜįßįßįęįWégéåčúčééééé,é4é:é=éWé4é:é=é@éčEčKčSčVčfččEčKčNčQčSčaëfëtë%íë°ëēë%í1í3í>íDíPíŽí í īhíˆí í ī  \  \ ,h ,h ī2ī7īrīˆīšīÆīÉīØīÛīŪīäīđđđŧņŋņÄņĐņûņūņōō‘öđđđˇđZöxö%đ;đ>đAđ(đ2đ5đ;đ>đAđ;đ>đAđQđTđWđAđHđKđQđTđWđQđTđWđgđjđmđWđ^đađgđjđmđgđjđmđ}đ€đƒđmđtđwđ}đ€đƒđ}đ€đƒđ”đ—đ˜đƒđŠđđ”đ—đ˜đ”đ—đ˜đĄđ¤đ§đĄđ¤đ§đˇđĄđ¤đ§đˇđĄđ¤đ§đˇđÉđĖđĪđŨđåđčđëđųđXķdķåđčđëđîđîđųđXķdķ ņ-ņ0ņ3ņ ņ-ņ0ņ3ņ-ņ0ņ3ņAņHķXķ-ņ0ņ3ņ6ņ6ņAņHķXķ€ņņō¨ō¨ņĢņ˛ņŧņĐņņņ¨ōHķVõö3öZöņņôņøņûņŠöļ÷Ā÷ä÷į÷ė÷ø÷iųlųqų€ųŊúŊöÃöÅöČö>÷K÷N÷Q÷>÷K÷N÷Q÷K÷N÷Q÷_÷ų ųK÷N÷Q÷T÷T÷_÷ų ų_÷p÷ ų°ųe÷p÷ ų°ųp÷÷°ųĀųv÷÷°ųĀų÷’÷ĀųĖų‡÷’÷ĀųĖų’÷Ŗ÷€ųų˜÷Ŗ÷€ųųBø}øƒø†øBøvøƒø†øŋøĖøĪøŌøŋøĖøĪøŌøĖøĪøŌøāøĖųÛųĖøĪøŌøÕøÕøāøĖųÛųųOųUųXųųHųUųXųĐúņúöûüĄũÉūöúųúüú˙úûûöúųúüú˙úûûöúųúüú˙úûûöúųúüú˙úûû˙%˙0˙G˙˙%˙0˙G˙˙%˙0˙3˙6˙G˙U˙X˙[˙Ä˙Đ˙ 0ˆ–˙™˙›˙ ˙§˙Ē˙­˙ˇ˙0?§˙Ē˙­˙°˙°˙ˇ˙0?ˇ˙Ä˙ ˇ˙Ŋ˙ Ŋ˙Ä˙  @Ph3>Phh„CQ„”QY”ŠYh´Á0CÅĶÕ×0ĸŊČËÎá@Ph3>Phh„CQ„”QY”ŠYh´Á0CÅĶÕ×0=pŠ -014::=pŠ:=s}€Š=ILOILO_ILO_ILO_@Ph3>Phh„CQ„”QY”ŠYh´Á0CÅĶÕ×09;?Ph #*X#6X69?B9?BXŦĀĘ!8!8pCFKSFKU`SU`ez}‚Š}‚Š’”—’”—žąžƒķ¨žžČ>cfm>CFNN^`c^`fm‡ŠŒ›ŠŒ› svz¨ķ % '2%'27=[]`ą´šķ=Ią´šĀÃÅIOĀÃÅĘO[]`svzƒ 47:HŅ beh`“°Ņ "(=@\"(=@\šŋÉ`x"(=@\†‹ŒŖ¤†‹ŒŖ¤ŽÉĪí;?]ÉĪí;beh{{„Š„Š4H`„ŠĢÜH`„ŠĩÃH`„Šĩ¸¸ÃH`Ü%įíũíķ%%4%(/%(/;PSV`°ŧPSVYY`°ŧ`m °fm °HNQ[NQ[gŽ‘”Ķ0œŸĸ´ĸŠŦ´ŊĀÃĶŊĀÃĶŊĀÃĶøûũ:ģÎ  $'*:$'*:$'*:PSVr°ģPSVr°ģPSVr°ģZf°ģ_f°ģr °x °ÛŪáäŪáäķ\beobeo{ĸĨ¨įū°ŗļČļŊĀČŅÔ×įŅÔ×įŅÔ×į N^s1&)18;>N8;>N8;>Ndgj†đūdgj†đūdgj†đūnzđūszđū†“āđŒ“āđ!$'!$'6Ŧ˛ĩŋ˛ĩŋËōõø7Na !$'7!$'7!$'7\_ažŽÃiloovyˆ‹Žžˆ‹Žžˆ‹Žž´ˇēÖ@N´ˇēÖ@N´ˇēÖ@NžĘ@NÃĘ@NÖã0@Üã0@nqtwqtw†ü       B E H ‡ ž ą P S V h V ] ` h q t w ‡ q t w ‡ q t w ‡ Ŧ ¯ ą î ū  š ŧ ŋ Ņ ŋ Æ É Ņ Ø Û Ū î Ø Û Ū î Ø Û Ū î    &  ž    &  ž    &  ž    ž    ž & 3 €  , 3 €  ž Á Ä Į Á Ä Į Ö L R U _ R U _ k ’ • ˜ × î    Ŗ Ļ ¸ Ļ ­ ° ¸ Á Ä Į × Á Ä Į × Á Ä Į × ü ˙  > N c    !    ! ( + . > ( + . > ( + . > T W Z v ā î T W Z v ā î T W Z v ā î ^ j ā î c j ā î v ƒ Đ ā | ƒ Đ ā        &  …˜ŖĨ¨¸ģŊĀŲīûE !‚…˜  ŖĨ¨¸ģŊĀ ĢĀÁ 8@ĸ@HĀÖHWčū@G¤¸y‹¤y}„‡y}}„ Õá;PSUXhx !PSUXv |  fpëķė‰ • ˜ š • ˜ š   Ļ :G QfļėĻ ą ˇ ¸ ą ˇ ¸ â  Îėą ˇ ¸ Á Á Ë Î Ô Ë Î Ô â  Ë Î Ô â  Ë Î Ô × × â  â            ) ') ') ') '):'G):'G)/'-/:-G:KGg:KGg:@GM@KMgK\gKQgmQ\mą´ˇÅ$ą´ˇēēÅ$ÖŲâåę:Q ÃķøūŅÔ×č$)/:ö˙ЏâADGUP`ADGJJUP`Uf@P[f@PqϏ@`Čâ{ˆ8@ÁĐĶÖÄĮĘĐĶÖĐĶÖä`lĐĶÖä`lĐĶÖŲŲä`l0ƒˆ0fs€ 35;=CIN^s€^f öųü*@Ÿ°Åöų 9<?§Å&9<?9<?M9<?BBMSdfh“”“”“”›žĄ›žĄ¯ ›žĄ¤¤¯ ÁÄÅĖĪŌĖĪŌā /ĖĪŌÕÕā / WrWZ Zrr‡ruu‡*‡Ÿ#‡#*ŸĐęíđęíđŲÕāņū5Õāęū5%ÂÍH¸āęū5djn¨5dgnsŅÔÛāˆŅč¨5ēŊ}€ŊŅ€ƒ‡¨ŊÀƒ‡ŠÃŅŠ¨¨¸āꎸāęNr€‘`moršŧŋũČŪäįíđÍVs˛đÍVs<đ\rux_ilruxruxˆ‹Žrux|‚ˆ‹Žˆ‹ŽžŽ•˜žžĄ¤˛_besžĄ¤§_beh§˛hsĄ¤Ŧ¯˛ÍĄ¤˛šŧÍ(479N_be€–™œƒ–™œ–™œŦ¯˛–™œ ĻŦ¯˛˛ĀÂÄđü˙'-0'-0:’Ą'*03*-3:’ĄDNQ]]qtwĄˇtwĄˇqtw’w„’Ūë&äë&ŗļšËŗļšŧ ōü "(58:FILSĀĐLSĀĐ ĻĀ] ˜Ā]‡˜ĀÃĘ凍ĀÃĘ͍˜Íå ĻĀ~ ˜Ā~7:GJ‡˜āãę‡āãę퍘í &),8cfipÚBHJPPcpÚLjx§¸"‚ˆŠ¤¸"<_p¤° <TW]pœŸĸ° z€‚ˆˆœ° = ` p Ą °  != [ ] ` p Ÿ °  !X [ ] ` z € ‚ ˆ ˆ œ °  !R!Š!˜!1"@"p#`!c!f!Š! "7#]#p#`!c!f!ˆ! "7#]#p#Ē"°"ĩ"ģ"ģ"Ī"ā"7#]#p#›!ĸ!Ĩ!1"@" "7#]#›!ĸ!Ĩ!Ā!@" "7#J#›!ĸ!Ĩ!¸!@" "7#J#Ã!Ę!Í!1"J#]#Ã!Æ!Í!1"J#]#Ž#Ņ#$P$ā$.%A%T%Ž#Ī#$P$ā$.%A%T%$ $"$($($A$ā$.%A%T%Ü#˙#P$‚$$ā$.%A%Ü#ú#ü#˙#P$€$$ā$.%A%÷#ú#ü#˙#Z$`$b$h$h$}$$ā$.%A%l%Ë%Ø%E&P&Œ(z%Ą%P&&'č'b(w(z%Ÿ%P&&'č'b(w(Z&`&b&h&h&&'č'b(w(Ą%¤%§%Ë%&Đ&č'8(M(b(Ą%¤%§%É%&Đ&č'8(M(b(š& &ĸ&¨&¨&Ā&č'8(M(b(Ø%&0''w(Œ(Û%÷%ú%&&&0''w(Œ(Û%ō%0''w(Œ(÷%ú%&& &&&E&Đ&0'8(M(&/&5&<&Đ&0'8(M(&,&Đ&0'8(M(/&2&<&E&/27$/27ü(&))).)8)Ø1ā1qD6*<*?*M*Ö5æ56*<*?*B*B*M*Ö5æ5M*a*Æ5Ö5V*a*Æ5Ö5a*u*ļ5Æ5j*u*ļ5Æ5u*‰*Ļ5ļ5~*‰*Ļ5ļ5‰**–5Ļ5’**–5Ļ5*ą*†5–5Ļ*ą*†5–5ā+æ+é+÷+v5†5ā+æ+é+ė+ė+÷+v5†5÷+ ,f5v5, ,f5v5 ,,V5f5,,V5f5,3,F5V5(,3,F5V53,G,v6Œ6<,G,v6Œ6G,[,f6v6P,[,f6v6[,o,V6f6d,o,V6f6o,ƒ,F6V6x,ƒ,F6V6ƒ,—,66F6Œ,—,66F6—,Ģ,&666 ,Ģ,&666Ģ,ŋ,6&6´,ŋ,6&6ŋ,Ķ,66Č,Ķ,66Ķ,į,65F5Ü,į,65F5į,%-*---ę9ũ9į,đ,ú,- -%-*---đ,ú,--%-*---Õ-565Œ6Ą6ũ9:;;MDqD%-*---7-7-Õ-565Œ6Ą6ũ9:;;MDqD7-9->-\-a-ˆ-565ũ9:7-9-a-ˆ-565ũ9:7-9-a-i-565ũ9:9->-\-a-ˆ-Ã-;;MDRDđ-ö-ú-ũ-%.|.ä:ë:%.l.ä:ë:.–.Ŧ.¯.ˇ.ä.ę.ë.Č.Î.Ø.Û.ū. ///ū. /// /// /ö56 ///// /ö56@/01ā1Ü2¨35Ą6W7}7U8Ē8ę9:ä:;÷;AŪACMD/˛/`45CMDŋ/č0ā1€22Ü2Ą6W7}7818U8Ē8I9AŪA1#1¨3`4;÷;818Ļ:ä:818¯:ä:01T1đ2¨3ŪACT1W1Z1]1W1Z1]1c1m1p1c1i1p1Ž1c1i1p1ž1Ž1Â1æ5ö5ˇ1Â1æ5ö5Â1Ö1Ü2į2Ë1Ö1Ü2į2W7}7U8k8n7q7v7}7 E EEEHEŠEŅFøFHEŠEŅFøFHEKENEbEKENEbEŠEŅFøFKENEbEiEkEpEsEvE~EŠEŅFøFŠE¯E!FŧFG2G>GHGŠE¯E!FŧFG2G>GHGŠE¯E!F0F3F6FJFžFG2G>GHG3F6FJFQFSFXF[F^FfF‘FG2G>GHG0F3F6FJFĀE!FøFG2G>GĀE!FøFG2G>GĀEÃEÆEÚEÃEÆEÚE!FøFG2G>GÃEÆEÚEáEãEčEëEîEöE!FøFG2G>GVGYG\G_GeGKHXH*IŸGŦGŽGąGŦGŽGąGĀGĀGÍGĐGĶGÍGĐGĶGāGāGíGđGķGíGđGķGHŪHëHíGđGķGöGöGHŪHëHH%H(H-HH%H(H-H‹HHHHH­H°HŗH­H°HŗHÃH­H°HŗHĩH­H°HŗHĩH­H°HŗHĩHeŧgÍg e.eŧgÍg>egeg:ggexeggmexeggxeŠeŒežexe~e„e‡eŒee~ee‡eŠee•ee„e•ežeŠeŒežeãeŠeŒežeĶe¯ežeÁeÆe´ežeÁeÆeãe÷eggée÷egg÷eúeff–fšf fŽf´fˇfšfŧfŽf´fˇfšfŧfûfūfgˇfšfŧfëfĮfÖfŲfŪfĖfÖfŲfŪf‡gŠgggŠgggĨg"hhh°hŲh'h-h/hhh°hŲh7hVh°hŲhJhVh°hēhOhVh°hēhvh|h h°h=JMPJMP^”JMPSS^”^ ĨŽd ĨŽ“˜š„“˜š ĨŽ0`x˛Đ×`x   IRxESVYSVYgt‡SVY\\gt‡gļ¸Ŋltwļ¸Ŋrtwŗ Ĩ” Ĩļ¸Ŋ(`t‡ĨÜ`t 038%038 ,@ņ#&),JPUîņô`§ŅņX[^îņô`§ŅņX[g|‡°`{‡ŒX[‡°`{‡ŒX[‡–`{‡Œ^g|‡°ë{‡Œ‘Ņņîņô`ĀŅ&i)i/i}jˆjÉl5iAiGiMi5i8i;i=i5i8i;i=i5i8i;i=i[ikipisicikipisikipisi~iÖjįjęjėjįjęjėjújújÚkčkũkúj kkkk kkk kkkktuple iosfwdstl_function.hcstdlibbasic_ios.tccpostypes.hfunctexcept.hostream_insert.hstdio.hlibio.hstdarg.h stddef.h wchar.htime.hnumeric_traits.halloc_traits.htype_traits.hdebug.h locale.htypes.hsched.htime.hpthreadtypes.hatomic_word.h wctype.hstdlib.htypes.h sigset.hselect.h stat.hunistd.hregex.hgtest-string.hgtest-spi.hgtest-death-test.hsiginfo.hsignal.hsigaction.hstdlib-float.hstdlib-bsearch.hfcntl-linux.htime.h socket_type.hsockaddr.hsocket.hnetdb.hgthr-default.h errno.hctype.hsocket.h pthread.hwait.h mman.h sched.hfcntl.hcxxabi.h˛™ ž KJ Ŧ‚ ÂÖ Ú Žą´šõöøųúûüũū˙€ƒ¸ķîøĀō éožÉË.ļ{fœ™J1 äožŅČą{.œžJ… ßožæœŖJ… Úožæœ¨J…ÆrJŧ ô<§eōƒYKŽ֐ ´äƒ¨e. ×.†dt ŊJ‹< õit‹f¨j‚X ŊJ‰ÖJLÁtJKķä{t<īm‘‚īmÖ‘<īm<‘XŸ<îm’‚îmÖ’<îm<’XŸ<ím“‚ímÖ“<ím<“XŸ<ėm”‚ėmÖ”<ėm<”XŸ<ëm•‚ëmÖ•<ëm<•XŸ<ęm–‚ęmÖ–<ęm<–XŸ<ém—‚4<čm˜‚4<įm™‚4<æmš‚4<åm›‚4tģŪmŖ‚ģe=ÜmŦŖ<Ũm<ŖXNËtģÕmŦ‚å˙†°z< ęst ˙~Ü~JŠÖJņo/0ŸOnsž JƒufŗJ' X¯tœ~īÖOs<.ú‚0ōP ,K´K,ŦAJÁ@ Ę|žæœ¸J…=/Ą=/Ą>/Ą=/Ą=/Ą=/Ą=/ žJLķw- SX,<ģ./Č<ƒLL!§]ŠÉōjG<9<ģB.?<€ äžzJø<Ėt#šzJø<Ņt˛ <ƒLL!§]Š*ō<ƒL Jâ~ČY¨\Ēō<ƒ’k  OĘu ļēƒfK/ŸģōÍwfŗ<Íw<ŗ<Íw<Ũ}žļ<¸|<ë f?c[ƒ€{ž€.ƒĸu°.Ú<=;=‘Ây<2X­.° tÔtfv< t< JĢuJCf› tĸuäCt=äCfÂ'JKģöē<ƒäwtœÖ÷xJy.“<íx<“<ę ‹xXž<ƒÛwtĨ‚îxJy.œ<áČ‹xX—žt‚|Jâ<Ču<ĮäCf=tCfö~tĮtCf=ōCf=<Cfö~Čš ē<ķČt{Jâ<Ču<ĮäCf=tCfö~tĮtCf=ōCf=<Cfö~Čš ē;ž~<Ēw<ĮäCXö~tĮtCf=ōCXö~Öš ē“įwŸYo3ÖLõ\öē™ÖYë[.ę<Ÿmä[qĘ.ˇ{X†3öQtŊ”öKäģ#PJ2 ŪžKsKÍ ŗtēå-ČôČ<ē~Öōä>åØ?æĸyÖū<Č>ōú<Ž~ Zjė<Š~ æ št‡-Zf„,hĄ Ķ~f¯fJi­.Ķ|<J„J JŊ†9MG‚<FJ;.‡öŒ}."[ <su“ ŦäZ;Ydž§{ē”<ė|ž”<ė|f”<ė|.°<ōzäŽ<Ļ ÔlžŦ<Ôl<C<“Ŧ”<ė|ž”<ė|f”<ė|ž”<‚}fū<‚}.jž<ū<ė|t”<œtä|<œ ­~žÍ|Čŗ<Í|<C<ņŦĢÖæ~<š¯U1i˙[ē”<ė|ž”<˙|ņJē‚} ū<‚} ū<€}fî#<‡bČų<‡b”}Čė<”}<ēĸi ĸ<ŧ.ļl ė|t”<˙|ƒŗ"Åj‚ģélēYÖ'<Y<=Äz.ŧ.Ųz. ēv.ž<ĒkJÖfŅlf¯<Ņl<‰Jōzäb<ûĢzžÕ<Ģz<C<œtv7ēæzōhēf>Cfœävōzē˙<Ô'Čzf¸<ŗz<ÍJČz<㠝{tč~X˜<č~.°<ōzäŽ<Ļ ÔlžŦ<Ôl<C<:Ŧ‰Ŧōzäb<ûēĢzēÕ<Ģz<C<œtvÆē¸ČČ<¸<Ą{JCXžtĮēÖz@hēfÔ<Ž{fCfœÖvŸ{<CfŦ Ȑg‡YK<=ožiē-/e<d<<;L;>;rČÚČŠuēĢzČÕ<Ģz<C<=ŦCfĄ Ö/<kJ<;=;jŦ/.bJ=<a<<b<‚>^< <>;ûvōCX=Cf=äCfė äģI=iĄ9… tˇvŦÉ fë ÔlōŦfÔl<C<ņ ČÖŊv à fÅx<‹|ČížC<"VŦ#õ‚ĸzJ# ž ŦžŨ t;=mČ&Ŋv‚C‰tg-u-=ģ‘Š{ ´<ĒkfÖŦÔlfŦ<Ôl<C<žu;Q˙yžā<žž‚z<ā. }<āfžfy<ŗ{tCfąČ„{JüJ„{Jũ. Ņ‚JƒLåũ[ž{žK;=;={f´<ĒkfÖXÔlfŦ<Ôl<C<Št”{ÖCfĒōK;=;=Š{f´<ĒkfÖXÔlfŦ<Ôl<C<Ŧt‘{ÖCfõg;uŋY‚'<Ys->-FXŠuäö äotûŦĢz‚Õ<Ģz<C<=tCfÄtųnfCfÄųnēCf=äCf=äCXŲēt>ģļqōĘ<¸p< |JŠ.M,@ÚlÖĻ<Úl<C<ät§ŪlÖCf°$ƒs=/ƒmfƒf‡ŪÎĨäŨvŧr‚Ŧ|žÔ<ŋ ‚†īlÖ‘<īl<C<=ŦCfĪŦ×j#v%Üx¨tØx<¨X ûl? Cf=Cfųž‚ģo<ā~<æf­ č 1’¸l*Č<¸l<C<‰t×ũvtčŧl$CfŒ&ƒs= .zēģįc#Šl)×<Šl<C<•t¨lÖØ<¨l<C<=)Cf=CfšȐ=ļēŨvŧrXŦ|ČÔ<ŋ ‚õ€lÖ€<€l<C<=ŦCfžŦnķ<ũk0ƒ<ũk<C<ÂŦŸ§oÖŪ Jüfųkä‡<ųk<C<īŦæ~Jš<æ~.šÚ Ļo<Ú.˙|ē‚Xķkä<ķk<C<ËŦ’¨o%Üä¤o.Ü..‘Põ×ųmÖ<gfūÖęk0Cf=1Cf= Cf =ä Cf=.CfS琒fī{.ŽÃfŊn<ÃtģŊnžÃ<Ŋn<ų~ž‘ė‚”~<ė<C<=tCf=tCfXtö~.Šä å< Cf=CX=Cf=äCf=žCfĨ#’RŽV0 fÔÕĮš,ō/äČ!;!ēō!;!ēō/ä!;!ƒižũ<ƒi<C<=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCf=ŦCfģŦwX <w< <‚iüCf=äCf=äCf=äCf=äCf=äCf=äCf=äCf=äCf =ä Cf =ä Cf=äCf=äCf=äCf=äCfE~’:Ū<¤tƒķ#‚~ēū<‚~fC<=ŦCfĐ~ŦŸüŦđž<đ<C<=ŦCfNŦā0!;!äđä‚~ēū<‚~fC<=tCf=tCf=tCf=tCfNpīäCf=tCf=Cf=äCf=.Cf=fCf=äCf=äCf=äCf+<ĸ~fŪ<<ĸ~<ā䊞Ø~ČY-/Œ‚‚~tū<‚~<C<2‚ ÖCX=CfØē!WYe:>¯rČŅ <¯r<C<=tCfŽt¯r‚CfŽ ¯rä Cf=CfīŦt>lũ}‚ƒģĮnŦš<Įn<C<ötÆl<CfĘČY;<=Čof”<ė|ž”<˙|ņ‚ē‚} ū<‚} ū<ė|f<€<ė|ž”<ė|f”<ė|ž”<ė|f”<ė|ž”<˙|ņ‚ē‚} ū<‚} ū<ė|f<€<ė|ž”<ė|f”<ė|ž”<ė|f”<ė|ž”<ė|f”<ė|ž”<ė|f”<ė|ž”<ė|f”<ė|ž”<œtä|<œ ” žŪp<Ž<” æp#š<æp<C<=tCfœtvē ēĪot–_Cf =ä Cf œävÍ|ä!WYe‚ņt{<ņ‚ņt{<ņ‚ņt{<ņ‚ņt{<ņ‘†¸>rē!;!ē!;!œ{‚‚~Čū<‚~<C<=ŦCf=ŦCf=ŦCf=ŦCf=ŦCfŋŦ2š ž¨uēs„c<XaēØ ‚ˇu É Ŧšu uÍyē§4tÃ|fŗ< XÃg;ķũzÖ‚~Čū<‚~<C<=ŦCf´"Īyē§4Ît‹|fõ<ŧēX;YúxjCf=äCfļŦ‡yfCf=.Cf=.Cf=.Cf=.Cf=.CfĀ<v*Ö4ízX•<ëz<•<ëz •< ō0:æ+ä!;!ÖÉsf0.Évf < .Č.ûz‚Cf=äCf =ä Cf =ä Cf=äCf=Cf=äCf=äCf=äCf =ä Cf =ä Cf=äCf=Cf=äCf=äCf=äCf=äCf!=ä!Cf#=ä#Cf%=ä%CfĢ–Xƒwŧ-=S.Ÿkf īy‚•fųjŦß<Ąp<ΐY;=˙sf‚ ōLĩbÖË<įdō™<įd.™XŊbtÃ<Ŋb<C<=tCf†tösē… LšbŦĮ<šb<C<†XˇbÖCf€tŊbōCfÄē=†Úit īy‚•ȤfâiŦĪ~<ą<.Ŗk䐟đ‚˜~ÖĮyJš<Įy<C<=tCf÷tŸy.ø<étÆy2Cf=Cf‹Ȑ‹y#ø<ũtĶ ­~Ö‹yžøJũt y ā< y<č~‚˜<ü<ė|t”<„~‚ņ{<ņ¤bäŦ‚Ÿ=;=šb.é<Ėc<Ë~JéXJ…Pž1ē”?¯c‚é{<CfŸÖé<—btéXƒ=;=7%?28@ö?w.äWG˛cJé{<æ <š_JC<=ČCfƒ!žœbžäŦ'‚XJ(t“_ČCf=CfÃ~Ŧ‚fæ}Ö™ JÄtČŧ .čr<Õ.Ķ’:>vÜ <.ŖsäJof<)¨fk<J;=~X ÅÖ¤ ‚Ät./™<×{ä”<ė|ž”<Ž~fō<Â<ĒkJÖfĒkfÖ<žn<ė|t”<–~fę<–~<C<vŦ ēÖÆ}. ē.Ŋå< ›wäŪ)Ā&.Üzf)Ôē.Ŧ~ē)Ô<.Ŧ~.Ĩ..Ūlä/ŦJˇ~/É<ˇ~<C<“t”<ė|ž”<Ž~fō<Â<ĒkJÖfĒkfÖ<žn<ė|t”<)Ô.ízf)Ãē.Ŋ~ē)Ã<.Ŋ~.i/Ņä.¯{</Ņ<}ŦC</ŧ<}<C<.ë~t(t”<ė|ž”<˙|ēMjō<€<ė|ž”<€}ēœXš äČ.õl<Ė‚Cf)ÛtÁä .Ûyē)âXÁä Ÿ{fCf=fCf.ķ~ž.ž~<ĘŦ.ļ~<Ę<C<.ô~ä´ •ttCfÃ#fgsŗ\<Ö#ÖĒ\.Ö#.“hfōČŽh<ō.ė\ē”#<¯\<Ķ#tK=LLLLMxž„îęæoōå<Ú\žC<ō$ōîŲ^ōĩ<ƒulŪyf/¸ēgžfg.fg<Ūy,hŗzXōf]<#X#až"ĄËÆyēXWŦ/XŦÍyōŗfÍy<C<=ŦC=ŦC=ŦC=ŦC=ŦCõŦWIg;ģeX)<!e!Č<X</Ö<!š!Čy‚¸fČy<C<=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC=ŦC­ŦēyÆžēy‚Ŗ<#ž•~XëX˜~<õ{žå.Ė{X´Č›|X‚,gg0 ō0w÷Č ĘŦšyž Šföf ŠJö< ã~t<9ŨyžĮ"CXAä ŊJå ēąyÖ ’fîf ’Xî<Ī‚ąyŦ ’fîf ’žî<ᐙ~fį Ā{.‚~Ŧūf‚~<C<¤Ŧ€<Wē(fXŦ( Kן"ÉÉ[91ķe/ f"/…Zšz#/Č,֝}Xô|<Œ<ô|< ÕfĨ}fP Õ<Ĩf  ī~X‘tŲ$Œ 8 J <ō<<<MŦV¸ Īx¸¯ŲélJC= C= C= C= C= C= C éŦĨfŧ ī~X‘< ī~Xž|tC= C= C= C= C= C=$Cąžf ŊJŋēC= Cŗž!ŸŨxĄf ĩČĮtC= C= C= C= C= C= Cö~5t0įwt00SÜžC= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C= C=KC= C= C= C= C= Cė2R X   XXcRX   XXÔy‚C= C= C= C= C= C= C=‡C=ēC= C= C= C= C= C= C =0 C"= "C$= $C&= &C=EC= C= C= C=EC= C= C= C= C= C= C= C0Ū~kĶXf Ŋ‚ äŦî<“zŦíŦ•zÖëŦ—zÖ¯Ÿt3á .Ķ<­xžŅr‚ŗ ŅrÖ  <s<  <Ÿ t áv.  X āv<  <Ëv‚0wēŋ ցfŅr  <s<  <Ÿ t áv.  X āv<  <Ëv‚0wēŋ ÖŌvä  <s<  <Ÿ t áv.  X āv<  <Ëv‚0wēŋ Ö˜wČX ŊJ˜ J0ČrJ00SŦˇ0ō0SŦ00SŦ›÷Čh:>:h Ûg‚§.˜~ēļl.Ž~Čō.Â<žnäŽ~Čō<Â<žnČ–~Čę<–~<C<šŦŊ}fĮōCXö~ËX ŊJáē zČ&0ÚhŦĻ.Ž|<žžn<Ž~ōō<Ž~<´.ķÖŠ +ßhXCf垐Īk<ŗf"åe=ÖĶh­<Ķh<C<=ŦCf“Ŧ~<Ą}Jˇ.L&Īhą<Īh<C<=ŦCf“Ŧų}<Š}Jģ.K&Ėh´<Ėh<C<=ŦCfõŦ"JČh¸<Čh<C<=ŦCf÷Ŧ&Æh<ē<Æh<C<=ŦCføŦ(Åhfģ<Åh<C<=ŦCfųŦŧhōÄ<đ{ ÔlēŦ<Ôl<C<ŸŦŨfšhž¨~<ĻČķ;˛h Îöjfˆ€jJŽ~ōō<Â<žnČ–~Čę<–~<C<ŦŦ‘hōCf=äCf=äCf=äCf=äCf=äCfŦ-‘hžCf=äCf=tCf=Cf =ä Cf=.Cf=.Cf=äCf=.Cf=Cf=äCf= Cf= Cf=Cf°Čg;<=æôiōŽ~Čō<Â<–pō¸J'†häú<†h<C<=ŦCfīÖĘJ'„häü<„h<C<=ŦCfõÖĮ 'hä˙fhfC<=ŦCfŊŦ)€hä€<€h<C<=ŦCfĘŦö<Šjfö<%ũgäƒ<ũg<C<=ŦCfÍŦõ<‹jfõ<%ûgä…<ûg<C<=ŦCfÄŦŧ0÷gä‰<÷g<C<=ŦCfîŦÛ<Ĩj<ÛŦėgŦ”< { ÔlžŦ<Ôl<C<ËŦ*ōg Ž<ōg<C<=ŦCfĖŦ>Ņj‚¯XŅj Ŋ<Ãt }XJķČ!Ījt¯<Ņj<¯XŲiJŽ~ōō<Â<éēëgŦ•<ëg<C<ĶŦęg^Cf=-CfĶäęg Cf=$Cf=5Cf=äCf=tCf=Cf=äCf=.Cf=.Cf=äCf=.Cf=äCf=ČCf=äCf=XCf= Cf=äCf=ČCf=Cf=‚Cf¨.¨hfØff>ĻhP "iČŦm„|ü<„|rîx‚ Ÿ{ēCf´ t91Y‰tCfŽ tîxōvԒ›Öhd>%‚t.ū <‚t<C<štŊ}fÃ.Ŋ}<ĮäCXö~Ët Ŋtž ēW‚t.CfŠ txõY fw. ,Č<ē<2­ÁōøJÃztBē><Ö<ė|t”<đ}fŦ‚} ū<‚} ū<ė|f”<ė|ž”<Š}f<rí‚C<=<C<œtv¸Ą{ŦCXžt2vqēÁz‚íōCf— #RxfDžs(â <žs<C<  tsCfížKšvŦ¸ ‚ģ" ē„Kut„zf ōxō—ōŊt.à X­utŒ~‚Î f X‚v<ū <‚vf˛tt×Ņ X¯t<Ņ 5‡T2ëŧœt<×å 3…+?G?\<¸s<ņ žpŦtttbōK€ŦŦt…~‚Õ ē Xw<˙<wfuްs<×Ö~XĒ<Ö~2ü XŽs.Ō ‚„r<ü X„r<ü šrč Öp  ōmōK€Ŧ’d>ŠŠä€Č_°824#'‹eJĖf´jfƒû-ģ°",>=-=ĸcfÛfĨcŦ ͤiž ܍iž×‹/õd‚‹f .é Ų{gÆ. š|tŠfžˇcōĘžtëd ×­+i9i+iÜbž¨. J’DōÂō[‚‚Éũ<ƒ<ũ.ēXHö`ä¤<Ģt‘rfĘ<ļc<ĘXļct }‚ĪJÛJļcfĘ‚{ ųcē Ōf ĐhÖ °‘;ág¯k<=ŗ{‚á<í~<˛{JáXÂ{Ö īyēĐJÅ$ą;KĮä­k ÛytĨ* ČĪyą*ĮXŽhÖĢJĀJ´.âž•lJëĒf˙Ũy<{ Cf=CfÔ~JĪf īy‚­Jč>¯yfא{ Cf=Cf×t‘;=Ë< īy‚­Jč>˛}fÔ֐{ Cf=Cf× t‘e= ēč| Y‘‚đ|fJ‘u úž†}< ú.}f ˙X}<XēSä-<SfC<ęŦ Č~ž‹< õ~<‹fC<=ŦCf=ŦCf=ŦCf=ŦCf éŦö< Šx.öÛyJ(Ĩ.Î=Õyē¯<Ņy<ļ.ų<åÂ{JŽ~<ō<Â<žn.Ž~Čō<Â<ürž°wēĮ{Jš(žČ‚=;gXģČytCf=tCfÜtáy CfÜ áyCf=äCfČ‚=;gXģČytCf=tCfÜtáy"Cf=XCf=äCf­‚Ū~<ĸ<Ū~fLŧē;gXģČytCf=tCfÜtbēā~- ˙yCf=äCf­‚Ū~<ĸ<Ū~fLŧē;gXģČytCf=tCfÜtbēā~5Ÿ{ČCf=äCfģŧ fÄu<<=ģ XŠuÎÖÕyē¯<‡}<ų<åÂ{tŽ~ō<Â<žn.Ž~Čō<Â<üržh‚đy<CfÎtĮ{tš%m.uōŨyēCf=äCfå™ Y;‹y<öfŨ äoēûŦސŌ~<Ž ũxƒ<ũx<C<=tCfŦt‘yXCfŦ‘yCf=äCf Y;•y<ėfį äoēûŦސŌ~<Ž ũxƒ<ũx<C<=tCfĸt›yXCfĸ›yCf=äCfûēÉ{fņČIX1äũxŦƒ<ũx<C<=tCf’t€<‘Â{ō<gfņČ÷xCf=‚Cf=äCf¤ #U^z<<€y<ƒ}X_ē!<_<ã ēŠuä”Čė~<”<⠂ŠuäŽÖŌ~<Ž ũxƒ<ũx<C<=tCf=tCf=tCf=tCf=tCf¨Ŧ•y Cf=Cf= Cf= Cf= Cf¨ •yōCf=äCf=äCf=äCf=äCf=äCf=/Cf‰ h:<ŗ{<Ī<š{ÖņUX+<U<í ēŠuäŠČö~<Š<ė ‚ŠuäŽÖŌ~<Ž ũxƒ<ũx<C<=ŦCf=ŦCf=ŦCf=ŦCf=ŦCfžŦˇ{<gfņ÷xXCf=‚Cf= Cf=Cf=CfžŸyōCf=äCf=äCf=äCf=äCf=äCf=äCf)™g˜<įz<<=č~f°<Đy °<ōzČŽ<Ļ ÔlžŦ<Ôl<C<:t‰tōzäb<ûĢzžÕ<Ģz<C<œtv{ē/hēfŽCfœävŸ{JCf™g;Vt../ÉxJ(ˇ.YĮ >Vt...ÉxtˇX.Ûw<Ŋ}fĮ.Cfö~žË< ŊJá ēãÛwäŊ}fĮJCfö~ä˞ ŊJfĢ}‚Õ.Ģ}<iPôr>œÉ<ˇ|ē(í~<-//’.3r‚Ũt(¤~.ÜōĨ~äĒŦŊČÚt(§~.Ų ¨~äØē¨~äĒŦ1éģzXÉf”tėzf[Xq<‚Ėēmdē!.bgԐÂfÁ}ȡ.ÉXˇ<ˆ É}8•7A˛‚Ô}.ŦÖī|¨)<”ō%Ž<Ļ ÔlžŦ<Ôl<C<=ŦCf§ŦĮ}ōšČÉ}Ö¯ČŽ~äō<Â<ÔlžŦ<Ôl<C<ķ=4 Į}ōšČ–~ÖCf=äCf= CfԐÂfÁ}ȡ.ÉXˇ<ˆÉ}8•7A˛‚Ô}.ŦÖī| )<”ō*Ž<Ļ ÔlžŦ<Ôl<C<=ŦCf§ŦĮ}ōšČÉ}ÖD¯ Ž~äō<Â<ÔlžŦ<Ôl<C<ķ84 Į}ōšČ–~ÖCf=äCf= CfԐÂfÁ}ČŋēÁ}<ŋ.Į}Č tŦäÉ}ō•‚˛‚Ô}.ˇ¯ČŽ~äō<Â<ÔlžŦ<Ôl<C<=.CfŠfƒhŸ{JCXžtŧ0Åtž ¸~‚Íēj:ī ū{ē˜zt č‚˜z. Åtž ¸~‚Íēj:īJ+€x‚‚Y€Jœ{Jä<­N}t&Î ų|f&‡f ų|f#—f é~f#—J é~f#—J é~<#—ŦgĄ~.#ßXĄ~ #ßfĄ~ #žžÜ}Ŧ#¤f"“}žČf"¸ČÉNČ|J°<ˆž¯}XŅ<¯}<ū.å}›fm<‹|ČížC<"VŦ#õ‚ĸzŦ# fĶfĸzž# J Ŧ#Ô~< Ŧt&ŋä;=#•z& Ŧt&žžČ}ē! ī ĸŦ ŪyJ ĸ‚ âyJ ž< äy<ęä œmēät  mēāt ¤mēržęJ ˜mŦ ÷t Ŧ{< Ô. Ŧ{Ŧ Ô. Ŧ{< Ôō Ŧ{< Ô. Ŧ{<n‚ävÅē ŦmŦ ãtņ < °mŦ ßtņ < ´mŦua‚ ī ĸŦ ây‚ ž< äy<¯Ö¯<ŅnX¯<ŅnX¯< ĸm睂¯<¯nXŅÖ ĨmJ"fčŅÖ ›rJ Ŧ{čJŅÖ ›r‚ ’{‚ŅÖ ›r‚ –{$äŒt¯. ›rXļ|<¯.¯nXŅÖ ÁmJX°‚˙ f ›rJ”|XŅÖ¯nfŅÖ ĸmf  ī ĸŦ ŪyJ ĸ‚ âyJ ž< äy<,ņäĶ.,­aŦĶ<,­aŦĶ<,­aŦĶ< ŧ`Öäv,ĖēĶ. ĩet,ø{<Ķ. ĩet,ø{<Ķ. Û`žB ÔJ Ŧ{< Ô. Ŧ{< Ôō ’{f î. –{f%út‡NƒO-V<%*.-Vf%*.Üf%¤~fÕ.‡<­.ŋÖ%B‚ßČ%ĄČm<X8‚ t.˜&‘;=Š\J˙#<WJɁOj8æ[.CfĒ$Ŧ;֔ZKēU‡SˆzXŠxX ‚vX ‚uX ‚sX‚rX‚qX‚pX‚oX‚nX‚mX‚kX‚iX‚gXÉm‚ā<á[ē¤$<Ü[tC<ütā< mJā< mJā<Lrá[ŦCf˜&‘;=Š\f˙#<\Č˙#<J‘Oj8æ[.CfĒ$Ŧ;֔ZKēq‡oˆztŠxt ‚vt ‚ut ‚st‚rt‚qt‚pt‚ot‚nt‚mt‚kt‚it‚gtÉm‚ā<á[ē¤$<Ü[tC<ütā< mJā< mJā<L€á[ŦCfø>J+€x‚‚Y€Jœ{Jä<­N}të >uuÁe<<ļgžfg.f0e<<rĸxJ(Ū.ãX„Į CXö~ŦŐj ¸~ēĖJ ´~<Íō>:>ŧË<ĩ~<ËfK <t< <sž J‚~Čū<‚~<C<Ątū Ī|t ´‚. ˙{X Öyēäķ‚0Õ}.ĢX0Õ}< f0w.˛Ö70Ķ}f˛J0Î}< t0wŋŨ}.Į<CXŖ = ū{JŸz ŊtŸē>;;0…t ū{‚˜zJ0¤ž00SŦÜ‚Cf ’Öüf’ū}ž3 Ŋt˜ē0Č}X°X¯ēC‚0Ū~J00SŦ°ēę&…9[.kf–ʸ]ä‚~Čū<‚~<C<ĖŦâfČufĮJCXö~’&.§dXŲ×š`ž īyō•X–{‚Cfˆ%žhžÉ`ÖéŦ`֐{4Cf=tCfę&‘W=?9[.q h¸]ä‚~Öū<‚~<C<ĖŦâXČufÖ.Ēw<ĮtCXö~š XŲ<§d.ŲX!š`Č īyČ•X–{‚Cfˆ%žkÆ`ēéŦ‹gō{'CfãX„Į Cfö~Ŧôë ’Ÿul<l<<8gžfgXĐu<° <ĩy<Ė{´J›|Ŧäh,==0ē ō˙J0ø|ä÷t´ <Ėv<´ <t3 đttw0_< ē0hXĶXf ŊJ… ē„0Ųt00SŦ Ĩ‚ƒwf– Ŧ_8Ŧ>đXŦHō*X?9idäqžœ<äq<C<Øäåq CfØäÚ?9iâāqž <āq<C<Üäw ”æq‚CfÜäwōĨ‚ƒwf– Ŧ_8Ŧ>đXŦHō*X?9idäqžœ<äq<C<Øä XÜqäCfØäÚ?9iâāqž <āq<C<Üä]r䔿q‚CfÜäwōĨ‚ƒwf– Ŧ_8Ŧ>đXŦHō*X?9idäqžœ<äq<C<Øäåq CfØäÚ?9iâāqž <āq<C<Üäw ”æq‚CfÜäwōĨ‚ƒwf– Ŧ_8Ŧ>đXŦHō*X?9idäqžœ<äq<C<Øä XÜqäCfØäÚ?9iâāqž <āq<C<Üä]r䔿q‚CfÜäwōŐ” ¸~ēĐJũ~ōƒ<ũ~fƒ<XË<ĩ~<Ëf´ÖŲf§<ؐsž´fŲ<§<Ųē‚~žū<‚~<C<Ątū Ī|Č ´‚. ˙{X ÖyÖäĐŦŖä0Õ}.ĢX0Õ}< .˙J0ø|"˛Ö70Ķ}f˛J0Î}< ē˙J0ø|ēŋŨ}.Į<CfŖ = ū{JŸzē ŊtĄē:==:0…t ū{‚˜zJ č.˜z<0¤‚00SŦÜ‚CfâÖŦf’ū}ž3 Ŋt˜ē0Č}X°X¯ēC0Ū~J00SŦ°ē0Ðl \J0; žÚ<Cf=äCf0Ū~w‚ Ŧ0kēÅj ¸~ē­J Dā}f¤4Ü}<¤<Ë<‘|üf„|<ü<„|‚ü<„| üfsŦ‘|füf„|<ü.„|JüX„|tüf„| ü<„|JüX„|ēüf‚~fū<‚~<C<=tCf=tCfĄtū&Ī|Č ´‚< ˙{X ÖyŦä­X0Ī;ųō0‡~<‹ä0õ}XhfĮfCf=tCfö~tĮtCfŖ = ū{‚Ÿz, ŊJ ē;==:0žXCf=äCfŽä’ î}ž˜ÖxX’æ}tw Jw< X˜ ‡~ē,ēã ō ū{ē˜zX­#V<Cf=äCfŽ)¯tCf=äCfŽJ’0Ðl üJ0û|Ŧ žÚÖCX0Ū~w‚ Ŧ0kēqŐj ¸~ēÍJ€(€f„Xü<„<Ë<= .sÖ J¤JÜf‚~fū<‚~<C<=tCfĄtūŦĪ|t ´‚< ˙{X ÖyÖäÍēĻČ0Õ}. üJ0û|Ŧ4Ŧų<0‡~<‹Ö0õ}Xh<ĮCXö~tĮ‚CfŖ = ū{JŸz$ ŊJŸē>;;0…Ŧ ū{‚˜zX č.˜z.­ōV<Cf=ČCXŽ’æ}tw Jw< XĮäC‚Žä’ î}ž˜ÖxX’ …~ž,ÖÍ.¯žCX0Ū~w Jw< X0kžq°X.í1\Jķōۋ]ŖÜzē^/ 7 7Üz ^& Öu  X&Üz ^6ŪÖĸ<Tâžā}<‡ēų{ž + Ös< Xü'Ŧ<Ԟŋ<ą{<Ī<ą{äĪž.Č{Xnext_segmentline_ZNSt6vectorIiSaIiEE6assignEjRKi__sigset_tPrettyUnitTestResultPrinter_ZN7testing22EmptyTestEventListeneraSERKS0_current_test_resultbreak_on_failureCStringEquals_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE10deallocateEPS2_jiterator_traits_ZNK7testing8internal24HasNewFatalFailureHelper21has_new_fatal_failureEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE2atEjPrintAsStringLiteralTotesting_internalRawType_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmiEi_ZNSt11char_traitsIcE4copyEPcPKcj_ZNSt6vectorIPcSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6__S_oct_ZN7testing8TestCase11ClearResultEv_TypestartPrintStringTo__copy_move_backwardread_ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_E_ZN7testing8internal24HasNewFatalFailureHelperD0Ev_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKw_ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolder7pointerEv_ZNK7testing8internal13FloatingPointIfE8sign_bitEv_ZN7testing8TestCase16RunSetUpTestCaseEvstrtof_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKw__alloc_traits >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_S_keyEPKSt13_Rb_tree_nodeIS1_E_ZN7testing32ScopedFakeTestPartResultReporter4InitEvstrtoloperator<< _ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE10_S_on_swapERS4_S6__ZN7testing8internal13DeathTestImpl12set_write_fdEi_ZN7testing8TestInfoaSERKS0___haystackIsNotSubstringallocatorgetwcconstruct >ImplicitCast__ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE2atEjgtest_arline_number__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE2atEj_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEptEvCheckedDowncastToActualType >::ValueHolder, testing::internal::ThreadLocalValueHolderBase>socklen_t_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE7reserveEj_Rb_tree_node_base__niter_base_ZNKSt6vectorIiSaIiEE8capacityEvHandleExceptionsInMethodIfSupported_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEi_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5frontEv__copy_move_backward_a_ZN7testing8internal27PrettyUnitTestResultPrinter11OnTestStartERKNS_8TestInfoE_ZN7testing18TestEventListeners22SetDefaultXmlGeneratorEPNS_17TestEventListenerEHandleSehExceptionsInMethodIfSupportedMSG_EOR_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_rightmostEv_ZN7testing8internal12UnitTestImpl21set_current_test_infoEPNS_8TestInfoE_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmIEiswprintftype__ZNKSs5rfindERKSsj__uninit_copy<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*>si_codebasic_stringstreamsockfd__ZNKSt3setISsSt4lessISsESaISsEE11upper_boundERKSs_ZNKSt9_IdentityISsEclERKSsmbsinit_ZNKSt6vectorIiSaIiEE8max_sizeEv~ExecDeathTest_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EEixEj__numeric_traits_integerfrac_digits_ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestEoperator<< last_errorfailbitUniversalPrint >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt17_Rb_tree_iteratorISsEuninitialized_copybreak_on_failure__ZNK7testing8internal10scoped_ptrIKSsEdeEv_ZNSbIwSt11char_traitsIwESaIwEEpLEPKwTestEventListenerswap*>expected_expressiondata_internal_run_death_test__rhsactual_ZNKSt17_Rb_tree_iteratorIPKcEdeEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4rendEv_ZNK7testing8internal8FilePath21FileOrDirectoryExistsEv11__mbstate_tIsPathSeparator_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE13_M_deallocateEPS2_j_ZN7testing8internal17StreamingListener12SocketWriterD0Ev_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE15_M_erase_at_endEPS1_si_errno_ZN7testing8internal12UnitTestImpl21set_current_test_caseEPNS_8TestCaseE_ZNK7testing8internal10scoped_ptrIKSsE3getEv_ZN7testing8internal13DeathTestImpl11set_spawnedEbpair_ZN7testing19TestPartResultArrayaSERKS0_impl__normal_iterator, std::allocator > >vector >_ZNKSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE13get_allocatorEvcopy_backward*, std::basic_string*>_ZNSt6vectorISsSaISsEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EES5_should_run__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_insert_equalERKS1_FloatingPointLE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_S_keyEPKSt13_Rb_tree_nodeISsETypeIdfor_each<__gnu_cxx::__normal_iterator >, void (*)(testing::Environment*)>_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_erase_auxESt23_Rb_tree_const_iteratorIS1_ES9_StrError_Destroy_ZNKSbIwSt11char_traitsIwESaIwEE13get_allocatorEv_M_insert_lower_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8pop_backEv~StreamingListeneroperator- >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSsTEST_ENCOUNTERED_RETURN_STATEMENT_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEE4baseEv_ZN7testing4Test14RecordPropertyERKSsiiterator_traits<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE10_S_on_swapERS4_S6__ZNSt11char_traitsIwE11eq_int_typeERKjS2___cxa_begin_catchsrc_texterror_message_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5beginEvoperator delete_ZNKSt12_Vector_baseIPcSaIS0_EE13get_allocatorEv_ZNSt6vectorIPcSaIS0_EE4dataEv_Allocator_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE2atEjoriginal_reporter__ZN9__gnu_cxx13new_allocatorISsE10deallocateEPSsj_ZN7testing8internal23kTestTypeIdInGoogleTestE_ZN9__gnu_cxx13new_allocatorIPKcE7destroyEPS2_operator<< , std::allocator >file__ZN7testing8TestCaseaSERKS0_AssertHeld_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4dataEv_ZNK9__gnu_cxx17__normal_iteratorIPcSsE4baseEv_ZN7testing8internal17TestEventRepeaterD2Ev_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_S_leftEPKSt18_Rb_tree_node_basereverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >TestPartResultTypeToString_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE8max_sizeERKS4__ZN7testing8UnitTest14AddEnvironmentEPNS_11EnvironmentE_ZNSs7reserveEj_ZNSt12_Vector_baseIPcSaIS0_EE17_M_create_storageEj_Iter_equals_val, std::allocator > >InitGoogleTestRETURNED_ZNKSt12_Vector_baseIiSaIiEE13get_allocatorEvregistered_testsoperator booluser_msg_string_ZN7testing8internal13ExecDeathTestD0EvAbstractSocketWriter__ino_toriginal_working_dir_iterator_traits, std::allocator >*>_ZN7testing8internal12UnitTestImpl31GetGlobalTestPartResultReporterEvregex_ZNK7testing8internal12UnitTestImpl21successful_test_countEv_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEplEinormalized_seed_ZN7testing14TestPartResult14ExtractSummaryEPKcStackLowerThanAddress_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmiEitest_propertiesmove_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7addressERS3__CharToperator<< _ZN7testing14ExitedWithCodeC2Eiunsigned int_ZN7testing8internal12UnitTestImpl34InitDeathTestSubprocessControlInfoEvignoring_casePrintTowcstold_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE17_M_create_storageEj_ZNSt10_Iter_baseIN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS4_SaIS4_EEEELb0EE7_S_baseES9__ZN9__gnu_cxx14__alloc_traitsISaIiEE17_S_select_on_copyERKS1_copy_backward_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwj_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjj_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE8max_sizeERKS4__ZN9__gnu_cxx17__normal_iteratorIPKcSsEmIEiClearTestResult_ZNKSs11_M_disjunctEPKc_vptr.UnitTestdestinternal_run_death_test_flag_size_t_ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv_M_destroy_noderegoff_tparameterlower_bound_ZNSt6vectorIPcSaIS0_EE8pop_backEv_ZNK7testing8internal12UnitTestImpl11random_seedEv_ZNK7testing8internal13DeathTestImpl6statusEvlast_sep_ZN7testing8internal16UniversalPrinterISsE5PrintERKSsPSopthread_mutex_tad_hoc_test_result_bool_ZN7testing8internal15CodePointToUtf8Ejunicode_code_pointcomma__distanceFloatingPoint_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjFormatForComparisonFailureMessage_ZNK7testing14TestPartResult14fatally_failedEvString_Category~TestFactoryBasekUniversalFilter__builtin_fwrite_ZN7testing8internal13GetTestTypeIdEv_ZNSs4_Rep7_M_grabERKSaIcES2__M_copyreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >argvs_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___cxa_throw_ZN9__gnu_cxx13new_allocatorIwE8allocateEjPKv_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_summary_rdstatekStackTraceDepthFlagfreadTestPartResultArraythread_count__copy_move_b*, std::basic_string*>operator!= >_S_blackos_stack_trace_getter_ZNSo9_M_insertIPKvEERSoT___cxa_guard_abort_ZN7testing8internal12UnitTestImpl12ShuffleTestsEv_sigfaultGTEST_SHARD_INDEXMSG_CONFIRM__is_normal_iterator_ZNSt6vectorIiSaIiEEixEjTearDownTestCaseFunc__miter_basekThresholdint_n_cs_precedesbinary_function, std::allocator >, std::basic_string, std::allocator >, bool>_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc_M_key_compareallocator_ZN7testing15AssertionResultlsIA3_cEERS0_RKT_~ForkingDeathTest_ZNKSt6vectorISsSaISsEE6rbeginEvatexitreverse_iterator<__gnu_cxx::__normal_iterator > > >kReservedTestSuiteAttributesDeathTestImpl_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS1_E_ZN7testing7MessageC2Evfwrite_ZNKSs13find_first_ofEcj_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmmEisi_addr_lsb_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_range_checkEj_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmIEi_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_equal_ESt23_Rb_tree_const_iteratorIS1_ERKS1__ZNSt6vectorIiSaIiEE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmmEv_Valcurrent_test_info_operator<< GTEST_ERRORforwarding_enabledsiginfo_t_ZN7testing8internal29ParameterizedTestCaseInfoBaseaSERKS1_kColorEncodedHelpMessage_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_jjstringstream_Key_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNSbIwSt11char_traitsIwESaIwEE4_Rep7_M_grabERKS1_S5_~SingleFailureChecker_ZNK7testing8UnitTest22test_case_to_run_countEvpop_backrend_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjsuccessful_test_count_ZNKSs5rfindEPKcjjname_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEpLEioutput_format_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderaSERKS5_rebind~ScopedPrematureExitFileoperator<< _ZN7testing8internal2RE9FullMatchEPKcRKS1_MSG_RSTOnTestPartResult_ZN7testing4Test15HasFatalFailureEv__cxa_atexit_ZN7testing8internal17PrintWideStringToERKSbIwSt11char_traitsIwESaIwEEPSocur_addr_ZN7testing8internal12UnitTestImpl27parameterized_test_registryEv_ZNKSs5beginEv_ZNK7testing8internal13DeathTestImpl7outcomeEv__cxa_guard_acquirefind_first_ofn_cs_precedes__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_output_ZN7testing8internal27PrettyUnitTestResultPrinterD2EvGetTestPartResult_ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_jjoutput_GetPrefixUntilComma_ZN7testing8internal24XmlUnitTestResultPrinter24IsNormalizableWhitespaceEcLock_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6rbeginEvCOLOR_GREENoperator<< _ZN7testing8internal16ForkingDeathTestC2EPKcPKNS0_2REEline_num_S_right_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE8allocateEjPKvMakeFrom_S_empty_rep_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS__Znwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEpLEi__is_null_pointermethod_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc_ZNK9__gnu_cxx13new_allocatorIPcE7addressERKS1__ZNKSs7compareEjjRKSsset_current_test_case_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE13_M_deallocateEPS2_j_ZN7testing7MessagelsEPw__iterator_category__is_normal_iterator_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2_iterator_traitsallocatorUniversalPrintCharArray_ZN9__gnu_cxx13new_allocatorIPcE9constructEPS1_RKS1___alloc_traits >operator!= >__destroy__elems_beforevalue_compare_ZNSt11char_traitsIwE2eqERKwS2__ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE8capacityEv9siginfo_t~TestEventRepeater_ZN7testing10TestResultaSERKS0__ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4dataEv_ZNK7testing8TestCase17test_to_run_countEvseekdirGetCurrentExecutableNametest_case_name__Destroy*, std::basic_string >operator- >_vptr.UnitTestImpl_ZN9__gnu_cxx17__normal_iteratorIPKcSsEpLEi_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEvexpression_textOnTestCaseEndbytes_readtm_hour_ZNSt6vectorISsSaISsEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EESignAndMagnitudeToBiasedoperator<< __trip_countreportable_test_count_M_insert_ZNSt3setISsSt4lessISsESaISsEE4findERKSs_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_jw_ZNK7testing8internal29ParameterizedTestCaseInfoBase17GetTestCaseTypeIdEvCaptureStdout_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3___addressof >_ZNKSt3setISsSt4lessISsESaISsEE4findERKSsunknown fileExecDeathTestArgs_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE8max_sizeEv__gthread_active_ptrkExponentBitCountstatus_ok_ZNK7testing8internal13FloatingPointIdE13exponent_bitsEv_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwj_ZNKSt6vectorIPcSaIS0_EE5frontEv_S_out_ZN7testing8internal24XmlUnitTestResultPrinter18EscapeXmlAttributeERKSs_Destroystrrchr_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE9constructEPS3_RKS3__ZN7testing8internal12UnitTestImpl11RunAllTestsEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4swapERS4__ZN7testing8internal9DeathTest4WaitEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmmEi_HasBase_ZN7testing18TestEventListenersD2Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE9push_backERKS2__vptr.AbstractSocketWriter_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmmEv_ZNK7testing8internal8FilePath5c_strEvdo_widen_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4rendEv_ZN7testing8internal12UnitTestImpl31SetGlobalTestPartResultReporterEPNS_31TestPartResultReporterInterfaceE_ZNK7testing19TestPartResultArray4sizeEv_ZNK7testing8TestCase6PassedEvPopGTestTracesign_bitrebind_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE13_M_deallocateEPS2_jDeathTest_ZNKSt6vectorISsSaISsEE4rendEv_ZNK7testing15AssertionResult7messageEv_ZNK7testing8internal17TestEventRepeater18forwarding_enabledEva_value_paramoperator!__iterator_categoryfputcoperator&operator*operator+iterator_traitsoperator-_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE11_M_allocateEjfputs_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_operator<operator=operator>FormatForComparison_ZNSs9_M_mutateEjjj_ZN7testing17TestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZNKSt3setISsSt4lessISsESaISsEE5beginEv_ZN7testing8internal6Random6ReseedEj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE17_M_insert_unique_ESt23_Rb_tree_const_iteratorIS1_ERKS1_rebindSOCK_RAW_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal7PrintToEhPSo_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcEis_selectedsystemwcsrtombsTestProperty_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EEixEj__valFailFromInternalError_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS1_ESA_RKS1__timer_ZN7testing10TestResult17AddTestPartResultERKNS_14TestPartResultEquot_ZNSt6vectorISsSaISsEE6rbeginEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE6rbeginEvthrow_on_failure_operator|operator~atof_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmIEiatoiatol_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6rbeginEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE3endEvPrintToStringconstruct_ZN7testing4Test13SetUpTestCaseEv_ZN7testing8internal17TestEventRepeateraSERKS1__ZNSt3setISsSt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsEgoodbitwcstombswrite_Rb_tree_iterator_ZN7testing8internal26ThreadLocalValueHolderBaseaSERKS1__Znaj_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEpLEi__k2_M_eraseCreateDirectoriesRecursively_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EES9_exit_status_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EEfull_pattern_S_hexowner__sigpoll_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_M_endEvint_p_sep_by_spacekMaxRangeGetStringFunctor_ZN7testing8internal12AssertHelper16AssertHelperDataaSERKS2__Rb_tree_const_iterator, std::allocator > >_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE15_M_erase_at_endEPS2_IsAbsolutePathfailed_test_case_count_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5frontEv_ZNSs4_Rep10_M_disposeERKSaIcEfputwc_Iterator_Iter_base_M_clone_nodeParseStringFlagFilterMatchesTestfputwsMakeConnection~basic_stringCmpHelperSTRCASEEQiterator_traits<__gnu_cxx::__normal_iterator > > >index_ZNK7testing8TestInfo6resultEv_ZNKSs12find_last_ofERKSsj_ZN7testing8UnitTestC2Ev_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorIiSaIiEEaSERKS1_fcntl_ZNK7testing8internal17TestPropertyKeyIsclERKNS_12TestPropertyE~DeathTestImpl_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderaSERKS7__ZN7testing8internal13FloatingPointIfE8InfinityEv_S_ios_openmode_end_ZN7testing8TestCaseD2EvGTestFlagSaverGetOutputFormat_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcj_ZN7testing8internal18SetInjectableArgvsEPKSt6vectorISsSaISsEErandom_ZN9__gnu_cxx14__alloc_traitsISaISsEE8max_sizeERKS1__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11upper_boundERKSs_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE2atEjstrtold_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEdeEvoperator<< suffix_len_ZNSt6vectorIPcSaIS0_EE5frontEvportset_up_tc__maskTestPassed_M_destroyMSG_MOREnew_holder_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE10_S_on_swapERS3_S5__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE2atEj_M_fill_assign_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE4findERKS1_operator<< _ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPwoperator<< _ZNKSs7_M_iendEv_ZN7testing8internal11ScopedTraceD2Evresume_pos_ZNK7testing8internal12UnitTestImpl18ad_hoc_test_resultEvtm_yday_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_fill_assignEjRKS2__ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_putwcharftell__miter_base<__gnu_cxx::__normal_iterator > >SOCK_STREAM_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_icomparestream_result_to__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE7reserveEj_ZN7testing8internal12AssertHelperaSERKS1_ExecDeathTestSpawnChild__blksize_t_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjj_M_upper_bound_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEixEiPrintCharAndCodeTo_ZN7testing14TestPartResultD2EvAddEnvironment_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_maximumEPKSt18_Rb_tree_node_basepthread_mutex_unlock_ZNKSt6vectorIPcSaIS0_EE3endEvint_curr_symbolset_write_fd~GTestLog_ZN7testing8UnitTest14PushGTestTraceERKNS_8internal9TraceInfoEnum_runnable_tests_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEixEi_ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5beginEv_ZN7testing8internal12AssertHelperD2Ev_ZNK9__gnu_cxx13new_allocatorIcE7addressERKcpthread_key_create_TrivialValueTypesfind_if<__gnu_cxx::__normal_iterator >, testing::internal::TestCaseNameIs>translate_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_wcstoul__is_normal_iteratorsa_data_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_index___mode_t_ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT___cxa_bad_typeid_DestroyFLAGS_gtest_repeat__n1pair, std::_Rb_tree_const_iterator >_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_read_fd_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEpLEi_Destroysrc/gtest-all.cc~basic_stringbufFormatFileLocation_ZNSt6vectorIPcSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EE_M_insert_equalconst_reverse_iteratorwchar_t_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE7destroyERS4_PS3__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6rbeginEv_ZNK7testing7Message9GetStringEv_markers__assignable__copy_move_backwardOnEnvironmentsSetUpStart_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE17_S_select_on_copyERKS5___alloc_traits >_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEaSERKS3_iostatea_write_fd__pad1__pad2__pad3__copy_move_a__pad5a_filefieldssi_overrun_ZNK7testing8internal8FilePath28CreateDirectoriesRecursivelyEvRecordProperty_ZNK7testing8internal13DeathTestImpl7read_fdEv_M_get_Tp_allocatorgetwchar__destroy*>_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_rootEv_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmIEi_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4dataEv_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4rendEv_ZNKSt17_Rb_tree_iteratorIPKcEneERKS2_current_test_case_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE2atEj_ZN9__gnu_cxx3divExxkSizestdout_is_ttycopy_backward_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEplEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEE4baseEv_ZN7testing8internal24XmlUnitTestResultPrinter17OutputXmlTestInfoEPSoPKcRKNS_8TestInfoE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE9push_backERKS2__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZNK7testing8UnitTest18ad_hoc_test_resultEvtotal_test_case_count_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEplEioperator<< __copy_move_backward_aoperator<< _ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE10deallocateEPS2_jcur_pattern_ZN7testing4TestaSERKS0__ZNSt6vectorIPN7testing8TestInfoESaIS2_EE2atEj_ZN7testing15AssertionResult13AppendMessageERKNS_7MessageEIsSubstringImpl >__copy_move_a2_ZN7testing32ScopedFakeTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultEMSG_DONTWAITiterator_traits_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNSt13_Rb_tree_nodeISsE9_M_valptrEvkElidedFramesMarkerset_read_fdParseInternalRunDeathTestFlagstatus__ZN7testing8internal19TypedTestCasePState25VerifyRegisteredTestNamesEPKciS3__ZNSt6vectorIPcSaIS0_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEjRKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_erase_auxESt23_Rb_tree_const_iteratorISsES7_GetMutableTestCase*DeathTest:*DeathTest/*_ZNKSs16find_last_not_ofEPKcj__osRelease_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEmiEi_IO_write_base__distance_ZNSt3setISsSt4lessISsESaISsEE11upper_boundERKSs_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEptEvUniversalPrinter, std::allocator > >GoogleTestFailureException_ZN7testing8TestCase14UnshuffleTestsEvreason_ZN7testing8internal23GetLastErrnoDescriptionEv__miter_base__builtin_memcmp_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6rbeginEvfront_ZN7testing8internal7PrintToEPKwPSowmemsetsetfillkTestcase_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EEixEj__copy_move_backward_a2FormatCompilerIndependentFileLocationpush_backtotal_shards_envsubstr_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE6rbeginEv_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE17_S_select_on_copyERKS3__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EEixEjincrement_death_test_count_ZNKSt6vectorIiSaIiEE5beginEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13_Rb_tree_implIS5_Lb0EE13_M_initializeEv_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE10deallocateERS3_PS2_jst_ino_ZNKSt6vectorIiSaIiEE3endEvxml_element_S_terminal_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7addressERS4_OsStackTraceGetter_Compare_ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestEstrtouliterator_traits_ZNKSs4findEPKcjmbstate_t_ZN7testing17TestEventListener9OnTestEndERKNS_8TestInfoEPrintToString_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE8allocateERS4_jlast_death_test_message_~_Rb_treeStrCaseCmp_ZN7testing8internal35DefaultGlobalTestPartResultReporterC2EPNS0_12UnitTestImplETHREWPrintTestNameis_valid__ZN7testing8internal35DefaultGlobalTestPartResultReporterD0EvMSG_TRUNC_ZN7testing8internal13DeathTestImpl5AbortENS0_9DeathTest11AbortReasonEDefaultPrintTodelimiterIsDigit_ZNSt11char_traitsIcE7not_eofERKi__it__destroy_ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5__ZNKSs12find_last_ofEPKcjj__u_quad_t_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEiputwcTestPartResult__normal_iterator > >shuffle__ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEv_Vector_base >_M_is_leaked_ZN7testing8internal17StreamingListeneraSERKS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6assignEjRKS2__ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwj_ZN7testing8internal20ShouldRunTestOnShardEiii_ZNK7testing8internal10scoped_ptrISsEptEvPrint_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEioperator-*, std::vector > >__uninit_copyoperator<< reserved_names_SelfStart_ZNK9__gnu_cxx13new_allocatorISsE7addressERKSsThis program contains tests written using Google Test. You can use the following command line flags to control its behavior: Test Selection: @G--gtest_list_tests@D List the names of all tests instead of running them. The name of TEST(Foo, Bar) is "Foo.Bar". @G--gtest_filter=@YPOSTIVE_PATTERNS[@G-@YNEGATIVE_PATTERNS]@D Run only the tests whose name matches one of the positive patterns but none of the negative patterns. '?' matches any single character; '*' matches any substring; ':' separates two patterns. @G--gtest_also_run_disabled_tests@D Run all disabled tests too. Test Execution: @G--gtest_repeat=@Y[COUNT]@D Run the tests repeatedly; use a negative count to repeat forever. @G--gtest_shuffle@D Randomize tests' orders on every iteration. @G--gtest_random_seed=@Y[NUMBER]@D Random number seed to use for shuffling test orders (between 1 and 99999, or 0 to use a seed based on the current time). Test Output: @G--gtest_color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D Enable/disable colored output. The default is @Gauto@D. -@G-gtest_print_time=0@D Don't print the elapsed time of each test. @G--gtest_output=xml@Y[@G:@YDIRECTORY_PATH@G/@Y|@G:@YFILE_PATH]@D Generate an XML report in the given directory or with the given file name. @YFILE_PATH@D defaults to @Gtest_details.xml@D. @G--gtest_stream_result_to=@YHOST@G:@YPORT@D Stream test results to the given server. Assertion Behavior: @G--gtest_death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D Set the default death test style. @G--gtest_break_on_failure@D Turn assertion failures into debugger break-points. @G--gtest_throw_on_failure@D Turn assertion failures into C++ exceptions. @G--gtest_catch_exceptions=0@D Do not report exceptions as test failures. Instead, allow them to crash the program or throw a pop-up (on Windows). Except for @G--gtest_list_tests@D, you can alternatively set the corresponding environment variable of a flag (all letters in upper-case). For example, to disable colored text output, you can either specify @G--gtest_color=no@D or set the @GGTEST_COLOR@D environment variable to @Gno@D. For more information, please read the Google Test documentation at @Ghttp://code.google.com/p/googletest/@D. If you find a bug in Google Test (not one in your own code or tests), please report it to @G@D. BoolFromGTestEnv_ZNSt6vectorIPcSaIS0_EE15_M_erase_at_endEPS0__ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwjInteger__find_if<__gnu_cxx::__normal_iterator >, __gnu_cxx::__ops::_Iter_pred >strcasecmpst_ctim_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6assignEjRKS1__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4dataEvtuple_size >_ZNKSt6vectorIPcSaIS0_EE4backEv_Vector_base >_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE8capacityEv_M_leak_hardprefix_len_ZNKSs13find_first_ofERKSsj_ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5__ZN7testing4Test5SetupEvGTestLogSeverity_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE17_S_select_on_copyERKS3__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag_vptr.TestCase_ZNK7testing8UnitTest21total_test_case_countEv_ZNKSt9_IdentityIPKcEclERKS1__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EES9__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE7reserveEj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEv_ZN9__gnu_cxx17__normal_iteratorIPcSsEppEitoupper_vptr.ThreadLocalValueHolderBase_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_rightmostEv Stack trace: _ZN9__gnu_cxx17__normal_iteratorIPcSsEppEv__normal_iterator, std::allocator > >_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEixEi__datCodePointToUtf8_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_fill_assignEjRKS2_test_namenot_bol_ZNSs3endEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmIEi_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE8max_sizeEv_ZN7testing8internal12UnitTestImplD0EvIsRootDirectorymemcpyFloatingPointLE_ZN7testing8internal6RandomaSERKS1__ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperEz_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_range_checkEj_ZNSbIwSt11char_traitsIwESaIwEE4_Rep15_M_set_sharableEvFlushInfoLog_ZN7testing15AssertionResultlsIA12_cEERS0_RKT___s1construct_ZNSt3setISsSt4lessISsESaISsEE6insertESt23_Rb_tree_const_iteratorISsERKSsreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseERKSsHasFailurewcsncpy_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE3endEv_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT_back_ZNK7testing10TestResult6PassedEvcopy_ZN7testing8internal12UnitTestImpl21os_stack_trace_getterEv_S_construct_aux15pthread_mutex_tregex_tmbrtowcresultRandom~ParameterizedTestCaseInfoBase_ZNSt3setISsSt4lessISsESaISsEE5eraseERKSs_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7addressERKS3__ZN7testing8internal12UnitTestImpl14RecordPropertyERKNS_12TestPropertyE__numeric_traits_integerfreeaddrinfo_M_limitoperator<< _ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4rendEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt17_Rb_tree_iteratorIS1_ES9__ZNK7testing8internal8FilePath12CreateFolderEv_ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE3getEv_ZNSt6vectorISsSaISsEE3endEvkPathSeparator_ZN7testing12TestPropertyD2Evvfprintfiterator_traits, std::allocator >*>~Mutexisxdigitmatched_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_disposeERKS1__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_maximumEPSt18_Rb_tree_node_basesi_fd_ZNSt6vectorISsSaISsEE4backEv_next_S_basefieldStringType__is_move_iterator_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE3endEv__niter_base_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8___uninitialized_copy_a_S_scientificerase_ZNK7testing8internal8FilePath15IsRootDirectoryEv_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4rendEv_ZN7testing17TestEventListener11OnTestStartERKNS_8TestInfoEallocator, std::allocator > > >_ZNK7testing10TestResult15GetTestPropertyEi_ZN7testing32ScopedFakeTestPartResultReporterD0Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6resizeEjS2_is_wide_stringstack_trace_depth_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEdeEvchar_type_ZN7testing4TestD0Evwctype_t_ZNKSs5rfindEPKcj_ZNSt6vectorISsSaISsEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EEjRKSs_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPiS1_EEjRKi_DestroyReinterpretBitsai_canonnameConfigureStreamingOutputalso_run_disabled_tests_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEv_ZN7testing15AssertionResultlsISsEERS0_RKT__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_erase_auxESt23_Rb_tree_const_iteratorISsESkipPrefix_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEppEi_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_upper_boundEPSt13_Rb_tree_nodeIS1_ESA_RKS1__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEptEv_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE11_M_allocateEjsaved_sigprof_actionoperator<< low_bits_IteratorR_ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEjj_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11__rb_verifyEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt17_Rb_tree_iteratorISsES7_successspawned__ZNSt13_Bit_iteratorppEi__sigchld_clock_ttear_down_tc__Vector_base >_ZNKSt5ctypeIcE13_M_widen_initEv__destroy_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEvmatchFLAGS_gtest_stack_trace_depth_ZNSt13_Bit_iteratorppEv_ZN7testing17TestEventListener20OnTestIterationStartERKNS_8UnitTestEikDeathTestStyleFlag_ZN7testing8internal18FormatFileLocationEPKci_ZN7testing15AssertionResultlsIA2_cEERS0_RKT__ZNKSt6vectorIPcSaIS0_EE4sizeEvcatch_exceptionsg_injected_test_argvs_ZNKSs4findEcj_M_get_insert_equal_pos_ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv_ZN7testing28FLAGS_gtest_stream_result_toEreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE28_M_get_insert_hint_equal_posESt23_Rb_tree_const_iteratorIS1_ERKS1_PostFlagParsingInit_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE7reserveEj_ZNK7testing8internal12UnitTestImpl28internal_run_death_test_flagEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8pop_backEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5beginEv__positionqsortSocketWriter_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEplEi_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEw_ZNKSs4findERKSsj_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5beginEvkAsIs_ZNK7testing8internal12UnitTestImpl6PassedEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_ES9__ZNSt18_Rb_tree_node_base10_S_maximumEPS__ZNK7testing8UnitTest22failed_test_case_countEv_M_end_of_storage_ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE17_M_insert_unique_ESt23_Rb_tree_const_iteratorISsERKSs__exchange_and_add_singleTearDownTestCase__x_copy_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE7destroyERS4_PS3__ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE8allocateERS3_j_Alloc_pad__uninitialized_copy_a*, std::basic_string >_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE9CreateKeyEvgettervwscanfexponent_bitsputcharselected_Setwoperator<< _ZNK7testing8TestCase21reportable_test_countEvdeath_test_count__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5frontEv_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4rendEv_M_headerinternal_run_death_test_SplitStringfind_last_of~TestEventListener__is_normal_iterator<__gnu_cxx::__normal_iterator > > >WideStringToUtf8_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5emptyEvuninitialized_copy<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*>__oldoperator- >_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5frontEvneedle_expr_ZN7testing8internal12UnitTestImpl18ConfigureXmlOutputEvunit_test__uninitialized_move_if_noexcept_a >reverse_iterator<__gnu_cxx::__normal_iterator > > >~set_ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_Rb_tree_const_iteratorfabs_ZN7testing8internal14CapturedStream14ReadEntireFileEP8_IO_FILE_ZNSt3setISsSt4lessISsESaISsEE4swapERS3___vtt_parm_Destroy_M_ibeginactual_expression_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5clearEv_ZNSt6vectorISsSaISsEE6assignEjRKSsGetRandomSeedFromFlag_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7addressERS3__ZN7testing8internal17AppendUserMessageERKSsRKNS_7MessageEoperator!=*, std::vector > >__enable_if__throw_out_of_range_fmt_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4sizeEvGetTestPartResultReporterForCurrentThread__copy_move_backward_a_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmIEiInternalRunDeathTestFlag_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_j_ZNK7testing8UnitTest21reportable_test_countEvF_OWNER_PGRP_ZNSt6vectorISsSaISsEE5eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EES5__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing14IsNotSubstringEPKcS1_S1_S1___off64_t_Iter_base<__gnu_cxx::__normal_iterator > >, false>__copy_move_a_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE12_M_check_lenEjPKc__gnu_cxx__typeEqFailureexpected_to_be_substringGetCapturedStringExitedUnsuccessfully_ZNK7testing8UnitTest20original_working_dirEvDeleteThreadLocalValue_ZN7testing8internal24HasNewFatalFailureHelperC2Evoperator+, std::allocator >_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC2EPNS0_12UnitTestImplEoperator==_vptr.TestFactoryBase_M_current_ZNSs7replaceEjjjc_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5clearEv_Destroy_ZNKSs13find_first_ofEPKcjj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNK7testing8internal13FloatingPointIdE12AlmostEqualsERKS2__Iter_pred__copy_move_aoperator<< _ZNSt6vectorIiSaIiEE4rendEvtest_case_infos__ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEE4baseEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS1_Earray___copy_move_backward_a2_sigsys_ZN9__gnu_cxx13new_allocatorIiE8allocateEjPKvreverse_iterator<__gnu_cxx::__normal_iterator > > >_S_create_Arg1_Arg2_ZNSt6vectorIPcSaIS0_EE6rbeginEv_ZNK7testing8internal13FloatingPointIfE12AlmostEqualsERKS2__Vector_base, std::allocator >, std::allocator, std::allocator > > >_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4rendEvattributesstack_trace_depth_MSG_FASTOPEN_Destroy_aux_ZN7testing8internal17StreamingListener10FormatBoolEbdefault__ZN7testing14KilledBySignalC2EiFullMatchreverse_iterator<__gnu_cxx::__normal_iterator > > >g_captured_stderrSetGlobalTestPartResultReporterpair, std::allocator > >, bool>PrintAsCharLiteralToabs_errorRegisterParameterizedTests_ZNKSt6vectorIPcSaIS0_EEixEjGetTestTypeId/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0__copy_move_a2 >, __gnu_cxx::__normal_iterator > >test_indexValidateTestPropertyargs__M_insert_uniqueoperator<< UInt32RemoveExtensionkStreamResultToFlagkCurrentDirectoryStringname_template_ZNSt6vectorIiSaIiEE2atEjflag_ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEiiterator_traits_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEdeEv_ZN7testing8internal13HasOneFailureEPKcS2_S2_RKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZNKSt6vectorISsSaISsEE12_M_check_lenEjPKcbool_constantkShuffleFlag_ZNKSt18_Bit_iterator_baseltERKS___uninit_copyCharType_ZNK7testing8TestCase30reportable_disabled_test_countEv_ZN9__gnu_cxx14__alloc_traitsISaISsEE7destroyERS1_PSsungetwcoperator- >__copy_move_achild_argcurrency_symbol_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEptEvgettimeofday_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4findERKS1_locationShowWideCString__wchb_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE11_M_allocateEj_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjwoperator!= >_ZN7testing35FLAGS_gtest_also_run_disabled_testsEIsSubstringPred >_ZNKSt6vectorIiSaIiEE4dataEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_copyEPKSt13_Rb_tree_nodeISsEPS7__S_value~TestPropertyKeyIs_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE9constructEPS2_RKS2___exchange_and_addbasic_string__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >_ZNSt6vectorIPcSaIS0_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmIEinew_allocator_ZNK9__gnu_cxx13new_allocatorIiE7addressERi_Iter_base_M_range_initializefirst_is_TEST_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEi_M_checkglobal_test_part_result_reporter_mutex_AddTestInfo_ZNSt3setISsSt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsES5___size_ZNSt6vectorIPcSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EE_ZNSt10_Iter_baseIPN7testing14TestPartResultELb0EE7_S_baseES2__ZNK7testing10TestResult18HasNonfatalFailureEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZNKSt18_Bit_iterator_basegeERKS__ZNKSs5emptyEv__builtin_unwind_resume_ZN7testing31FLAGS_gtest_death_test_use_forkEunary_function_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6rbeginEvResult_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4backEv_ZNK7testing8TestCase10type_paramEva_current_test_infoAssumeRole_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS2_EES8__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE3endEv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11equal_rangeERKS1__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseEPKSsS7___ostream_type__insert_left_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_S_leftEPSt18_Rb_tree_node_base_ZNKSt6vectorISsSaISsEE4dataEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE3endEv_M_check_length_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_insert_equal_lowerERKS1__ZNKSt23_Rb_tree_const_iteratorISsEptEvdeath_test_use_fork__S_app_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE18_M_fill_initializeEjRKS3__ZNKSs4findEPKcjj_ZN7testing22EmptyTestEventListenerD2Ev_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE8allocateERS3_jMSG_OOB_ZN7testing8internal12UnitTestImpl9listenersEv__syscall_slong_t__alloc_traits, std::allocator > > >__alloc_traits >_ZN7testing8internal15UnitTestOptions17FilterMatchesTestERKSsS3__Identityp_sep_by_space_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE8capacityEvstart_timestampappendIsDirectoryTestDisabled_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE6rbeginEv_ZNK7testing8internal12AssertHelperaSERKNS_7MessageEsetlocale_ZNK7testing8UnitTest17failed_test_countEvbase_ZN7testing8internal17StreamingListenerD0Ev_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6assignEjRKS2_host_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmiEi_Setprecisionfailed_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev__copy_move_bbasic_streambufDefaultGlobalTestPartResultReporter_ZNKSt3setISsSt4lessISsESaISsEE6rbeginEv_IO_write_ptr_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEcGTEST_WARNING_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_rightEPSt18_Rb_tree_node_base_ZN7testing8internal2RE12PartialMatchEPKcRKS1__S_in_ZN7testing17TestEventListener18OnTestIterationEndERKNS_8UnitTestEicopynew_allocator_mode_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE8max_sizeEvwcscasecmpGTestLog_ZN7testing12TestProperty8SetValueERKSs__socket_type_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZN7testing8internal13FloatingPointIdE3MaxEvminpair, bool>SumOverTestCaseList_Vector_base >_ZNSt12_Vector_baseIPcSaIS0_EE12_Vector_impl12_M_swap_dataERS3__ZNK9__gnu_cxx17__normal_iteratorIPKcSsEptEv__ops_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE8max_sizeEvpair_ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE_ZN7testing8internal19FormatForComparisonIxxE6FormatERKx_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11equal_rangeERKS1__ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE10deallocateERS4_PS3_j_Tp_alloc_typetest_detail.xml_Constructfull_regex_len_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5clearEv_ZNKSt3setISsSt4lessISsESaISsEE11lower_boundERKSsSOCK_RDM_ZNSt12_Vector_baseIiSaIiEE11_M_allocateEjCloneCString_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4rendEv_ZNKSt6vectorIPcSaIS0_EE5beginEv_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEcoperator!=, std::allocator >_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEplEiWrite_M_fill_initializekDefaultDeathTestStyle__normal_iterator > >waitpidtimezonetest_property_count_ZNK7testing10TestResult19test_property_countEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EEaSERKS4__Vector_base >reverse_iterator<__gnu_cxx::__normal_iterator > > >an_outcome_S_ate_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_fill_assignEjRKS2_regexecmatches_filter__ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11equal_rangeERKS1_expected_posoutcome__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EEaSERKS7__ZNKSt6vectorISsSaISsEE3endEv_ZNKSs7compareEjjRKSsjj_ZN9__gnu_cxx13new_allocatorIiE9constructEPiRKi_ZNSt18_Bit_iterator_base12_M_bump_downEv_ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw_ZNKSt3setISsSt4lessISsESaISsEE5emptyEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6assignEjRKS3__ZN7testing8internal23ScopedPrematureExitFileaSERKS1__Destroy_ZN7testing8internal6String13CStringEqualsEPKcS3__Rb_tree_iterator, std::allocator > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_get_Node_allocatorEvlast_in_range_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4sizeEv_ZNSt6vectorIPcSaIS0_EE2atEj__find_if<__gnu_cxx::__normal_iterator*, std::vector > >, __gnu_cxx::__ops::_Iter_equals_val > >_ZNSsaSEcUniversalPrinter, std::allocator > >_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEv_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc_ZN7testing8internal12UnitTestImpl12environmentsEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4findERKS1_kSignBitMaska_value__uninit_copy*>countlong long unsigned int_ZN7testing8TestInfo15ClearTestResultEPS0__ZNSs6appendERKSs_ZN7testing8internal6String12FormatHexIntEiconstruct_vptr.TestEventListenerCaseInsensitiveCStringEquals_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7addressERKS3_pair, std::allocator > >, bool>kDeathTestUseForkuppercase_ZNSbIwSt11char_traitsIwESaIwEEpLEwparameterized_test_registry__ZNKSbIwSt11char_traitsIwESaIwEE4rendEvconstructFormatTestCaseCount_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5frontEvFLAGS_gtest_stream_result_to_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE8capacityEv_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE9constructEPS2_RKS2_MakeAndRegisterTestInfounsigned char_ZNK7testing8internal24InternalRunDeathTestFlag5indexEv_M_grab_ZNKSt23_Rb_tree_const_iteratorIPKcEdeEv_ZN7testing14IsNotSubstringEPKcS1_PKwS3_stack_traceoperator<< ClearResultregmatch_tFLAGS_gtest_death_test_style_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EEixEj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEi_ZN7testing8internal13ParseBoolFlagEPKcS2_Pb_ZN7testing8internal14ParseFlagValueEPKcS2_bUnitTestOptions_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmmEv_ZN9__gnu_cxx17__normal_iteratorIPcSsEmmEi__gnu_debug_ZN9__gnu_cxx17__normal_iteratorIPcSsEmmEvSOCK_DGRAM_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE7reserveEj__is_char__outTypeIdHelper_ZNK7testing14TestPartResult9file_nameEv_ZN7testing8internal6String12CloneCStringEPKc_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE8max_sizeEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4backEv_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE9constructEPS3_RKS3_test_info_list_fwide_ZN7testing8internal17StreamingListener5StartEv__iterator_category<__gnu_cxx::__normal_iterator > >_ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5beginEvoutput_file_for_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestEventListener*)>F_OWNER_GID_ZNKSt6vectorIiSaIiEEixEj_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE7pointerEv_ZN7testing8internal27OsStackTraceGetterInterface16UponLeavingGTestEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5clearEv_ZNSs6insertEjPKcj_ZN7testing8internal27PrettyUnitTestResultPrinter9OnTestEndERKNS_8TestInfoE_ZNK7testing8UnitTest15start_timestampEv_ZNKSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE19_M_get_Tp_allocatorEvkChunkSize_ZNSt6vectorIPcSaIS0_EE3endEv~GoogleTestFailureExceptionHandleSehExceptionsInMethodIfSupportedSetDefaultResultPrinterwcsspn~_Iter_pred_ZNSt6vectorISsSaISsEE6resizeEjSsoperator<< _ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5frontEvGetAnsiColorCode__copy_move_backward_a2__alloc_traits, std::allocator > > > >_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE18_M_fill_initializeEjRKS2__Rb_tree_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5clearEv_ZN7testing8internal6String17WideCStringEqualsEPKwS3_streamraw_seed_ZNK7testing8internal12UnitTestImpl15start_timestampEvmax_length_ZNK7testing14TestPartResult6passedEv_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE8max_sizeEvFOpen_sifields_ZN7testing17TestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestEInfinitycan_be_nullwctyperesults_GetTestProperty__copy_move_backward_a_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13_M_clone_nodeEPKSt13_Rb_tree_nodeIS1_E_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4dataEv_Destroy_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE7destroyERS3_PS2_HandleSehExceptionsInMethodIfSupported_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5countERKS1_TEST_name__xstat_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEi_ZN7testing8internal24XmlUnitTestResultPrinter18OutputXmlAttributeEPSoRKSsS4_S4__ZNSs12_M_leak_hardEv_M_insert_unique__Ios_Iostate_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEviterator_traits_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE9constructEPS2_RKS2__ZNSsixEj_ZN7testing8internal6String10FormatByteEh_ZNSt6vectorIN7testing12TestPropertyESaIS1_EEaSERKS3__ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE8allocateEjPKvSetTestPartResultReporterForCurrentThreadOnEnvironmentsSetUpEnd_ZNSspLERKSsAddArguments >size_typeEnvironment_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEvfull_regex_srand_Destroy__delta_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmmEifreeset_catch_exceptionspart_ZN9__gnu_cxx14__alloc_traitsISaIPcEE8max_sizeERKS2_TypedTestCasePState_ZN7testing8internal14GTestMutexLockaSERKS1__ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmmEv_ZN7testing8internal9DeathTest24last_death_test_message_EtypeCreateCodePointFromUtf16SurrogatePair_ZNSt13_Bit_iteratormmEiConfigureXmlOutputalso_run_disabled_tests__ZNSt13_Bit_iteratormmEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE2atEj_ZNSt6vectorIPN7testing8TestCaseESaIS2_EEixEjinit_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEvother_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs_ZNK7testing8internal13DeathTestImpl7spawnedEvOnTestProgramStart_Unwind_Resumeai_flagskDeathTestThrew_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj_ZN7testing11EnvironmentD0EvTearDown_Rb_tree_node_ZNSs4_Rep10_M_refdataEv__cxxabiv1_ZN7testing8internal17Int32FromEnvOrDieEPKci__pos_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE3endEvtype_info_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmiEi_ZNSt6vectorIPcSaIS0_EE4backEvwcsstrTesthost_name__ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4sizeEvkReservedTestSuitesAttributes_ZN7testing7MessagelsERKSbIwSt11char_traitsIwESaIwEEpath_ZN7testing8internal16ForkingDeathTest4WaitEv_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5emptyEvClearAdHocTestResultst_size_ZN7testing8internal24XmlUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4backEv_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE8max_sizeEv_ZNSt6vectorISsSaISsEE2atEj_ZNKSt13_Rb_tree_nodeIPKcE9_M_valptrEvFLAGS_gtest_death_test_use_fork_ZN7testing8internal12UnitTestImpl18death_test_factoryEv_Rb_tree_impl, std::allocator > >, false>_ZN7testing8UnitTest18GetMutableTestCaseEi_ZNKSs5c_strEvreverse_iterator<__gnu_cxx::__normal_iterator > > >exit_code_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE11_M_allocateEjtest_properties__ZN7testing8TestCaseD0Ev_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_rootEvfraction_bits_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE5resetEPS3_testing_Result_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEpLEitm_mday_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEdeEv__niter_baseAppend_ZNKSt12_Vector_baseIPcSaIS0_EE19_M_get_Tp_allocatorEv_Iter_predsi_addr_ZN9__gnu_cxx13new_allocatorIwE9constructEPwRKw_ZN7testing8internal2RE12PartialMatchERKSsRKS1_RunAllTests__miter_base_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE3endEvGetTestCase_M_swap_data_ZNSt10_Iter_baseIPPN7testing11EnvironmentELb0EE7_S_baseES3_~basic_iostream_M_erase_at_enditerator_traitschild_pidallocator_ZNK9__gnu_cxx13new_allocatorIPcE7addressERS1__ZNK7testing8internal8FilePath11IsDirectoryEv_ZNKSt4lessISsEclERKSsS2_precisioncopy<__gnu_cxx::__normal_iterator >, __gnu_cxx::__normal_iterator > >MSG_NOSIGNALkOutputFlag_ZN7testing7MessagelsEPFRSoS1_E_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6assignEjRKS1_ad_hoc_test_result_ZNSt3setISsSt4lessISsESaISsEE5clearEvsingular_form_Iter_base_ZN7testing31TestPartResultReporterInterface20ReportTestPartResultERKNS_14TestPartResultEoperator<< _ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEpLEi__are_samebinary_function__resoperator<< kTestTotalShardsiterator_traits_ZN9__gnu_cxx17__normal_iteratorIPcSsEpLEibasic_streambuf >_ZNSt6vectorISsSaISsEE18_M_fill_initializeEjRKSs_call_addroriginal_working_dir_ZN7testing18TestEventListeners23SuppressEventForwardingEv_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw_ZNKSs7compareERKSsExitSummary_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEE4baseEvtimeval_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE4sizeEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EEixEj_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE9push_backERKS3___normal_iterator > >~DeathTest_ZNSbIwSt11char_traitsIwESaIwEE6resizeEjwvector, std::allocator >, std::allocator, std::allocator > > >fopen_ZNSbIwSt11char_traitsIwESaIwEEaSEPKw_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4dataEvdifference_typerebind_ZNSo5flushEvsetprecision_M_value_field_ZN9__gnu_cxx14__alloc_traitsISaIPcEE10deallocateERS2_PS1_j_S_badbit~OsStackTraceGetterInterfacecaller_frame__ZNSs7_M_dataEPcwcslenline_endtype_param__ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj_ZNK7testing8internal12UnitTestImpl17failed_test_countEvenvironSOCK_CLOEXEClisteners_kInternalRunDeathTestFlag5div_tGetGlobalTestPartResultReporterScopedTracewcstoullboolalpha_ZN7testing8internal16ForkingDeathTest13set_child_pidEi_ZN7testing8internal13FloatingPointIfE24SignAndMagnitudeToBiasedERKj_Link_type_ZN7testing8internal14StackGrowsDownEv_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6resizeEjS2_Normalizetest_propertywrite_fd_swapreverse_iterator, std::allocator > > >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE12_M_check_lenEjPKcscientificCaptureStream_S_showposGTEST_TOTAL_SHARDS_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE3setERKS5_predicate_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEdeEvpair, std::allocator > >, std::_Rb_tree_iterator, std::allocator > > >_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5beginEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEPKw_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwDelete_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_valueEPKSt18_Rb_tree_node_baselldiv_t_ZN7testing8internal30GetBoolAssertionFailureMessageERKNS_15AssertionResultEPKcS5_S5_~_Alloc_hider_M_create_nodedeath_test_count_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEpLEi_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5frontEv_ZN7testing8UnitTest27parameterized_test_registryEv_ZNSbIwSt11char_traitsIwESaIwEE5eraseEjj_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEpLEiBiggestConvertible_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4dataEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE3endEvMSG_TRYHARD_ZN7testing8internal18OsStackTraceGetter17CurrentStackTraceEii_IO_buf_basematches_filter_ZNSt13_Bit_iteratorpLEi__FILE__pthread_internal_slist~InternalRunDeathTestFlag_ZNKSt18_Bit_iterator_baseneERKS__ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEixEifilename__ZNSt18_Bit_iterator_base10_M_bump_upEv_ZNSbIwSt11char_traitsIwESaIwEE5clearEv_S_endTestBody_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4backEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEdeEvget_allocator_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE12_M_check_lenEjPKc_ZNSt14_Bit_reference4flipEv_ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE8allocateEjPKvcaptured_stream_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEixEikUnknownFile_ZNKSt12_Vector_baseISsSaISsEE19_M_get_Tp_allocatorEv_ZNSt6vectorIPcSaIS0_EEaSERKS2_test_indices_operator!=<__gnu_cxx::__normal_iterator > >_ZNK9__gnu_cxx13new_allocatorISsE7addressERSsPrintTo_ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_uniqueERKS1__ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEikStdErrFileno_ZN7testing8internal13DeathTestImpl26ReadAndInterpretStatusByteEv~DefaultDeathTestFactory_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEv_ZNKSt13_Rb_tree_nodeISsE9_M_valptrEv_ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7destroyEPS4_SuppressTestEventsIfInSubprocessAddArgument_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEppEv_M_initializefastmap_accurate_ZNSbIwSt11char_traitsIwESaIwEE7_M_leakEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSs7replaceEjjPKcjkBreakOnFailureFlaglong unsigned int__uninitialized_copy_a_ZN7testing8internal20SingleFailureCheckerC2EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSsword_list_ZN7testing8internal12UnitTestImpl41SetTestPartResultReporterForCurrentThreadEPNS_31TestPartResultReporterInterfaceEtm_isdst_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE8max_sizeEvint_n_sign_posn_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE9push_backERKS2_operator!= >HasGoogleTestFlagPrefix_ZNKSt6vectorIPcSaIS0_EE2atEj_ZNKSbIwSt11char_traitsIwESaIwEE9_M_ibeginEv_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE3getEv_ZN7testing8internal16InDeathTestChildEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE9push_backERKS1_TypeParam_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEixEiegptr_ZNKSt9type_infoeqERKS__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE__intptr_tClearTestPartResultsoperator==<__gnu_cxx::__normal_iterator > >CharFormatvfwprintf_ZN7testing17TestEventListener16OnTestPartResultERKNS_14TestPartResultE_ZNK7testing8UnitTest11GetTestCaseEi_ZN7testing8internal7g_argvsE_ZNSt14_Bit_referenceaSERKS_EscapeXmlText_ZNSbIwSt11char_traitsIwESaIwEE6insertEjjw_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11lower_boundERKSsstrchr_ZNKSt5ctypeIcE8do_widenEc__normal_iterator > >fixed_IO_read_base_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4rendEv__find_if<__gnu_cxx::__normal_iterator >, __gnu_cxx::__ops::_Iter_pred >_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEptEv_ZNSbIwSt11char_traitsIwESaIwEE4swapERS2__ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4rendEv_ZNKSt6vectorIiSaIiEE5emptyEvScopedFakeTestPartResultReporterkThrowOnFailureFlag__alloc_ZNSt11char_traitsIcE2ltERKcS2__ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE3getEvIsSubstringPred_M_insert_ZNK7testing8TestInfo13is_reportableEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4rendEvsockaddr_ZN7testing8DoubleLEEPKcS1_dd__debug_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4backEvfull_name_Swallow_assignwcstod_ZNK7testing14TestPartResult7messageEvreset_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE8max_sizeEv_ZNSt6vectorIiSaIiEE4dataEv_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7addressERKS3___addressofuninitialized_copy_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv_ZN7testing8internal15UnitTestOptions13MatchesFilterERKSsPKcreg_syntax_t_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate_ZNK7testing8internal8FilePath15RemoveExtensionEPKc_vptr.Test_ZN7testing8internal13FloatingPointIfE3MaxEvwmemcmp_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S5_S5_value_type_ZNSs15_M_replace_safeEjjPKcjsuffix_Const_Link_type_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseERKS1_this_test_info_ZN7testing8internal13ExecDeathTest32GetArgvsForDeathTestChildProcessEvconstructInitGoogleTestImpl_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmiEi_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE10deallocateEPS2_j_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEStreamableToStringskipwshas_owner_operator!=_Iter_base__is_move_iterator_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4sizeEv__cxa_rethrow_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE7destroyERS4_PS3__ZNSt6vectorIN7testing14TestPartResultESaIS1_EEixEjsocket_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEi_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE18_M_fill_initializeEjRKS2_property_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKw~EmptyTestEventListener_ZN7testing11EnvironmentD2Ev_ZNK7testing10TestResult17GetTestPartResultEirebind_Iter_base_Rb_tree_colortv_sec_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcjuse_color_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5clearEv_ZN7testing8UnitTest17AddTestPartResultENS_14TestPartResult4TypeEPKciRKSsS6__ZNSt6vectorIPcSaIS0_EE7reserveEj_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE12_Vector_impl12_M_swap_dataERS5_test_properites_mutex__unused2IN_PROGRESSpid_t__are_same__destroyUniversalTersePrinterPrintCharsAsStringToIsSubstringImpl >GetStreamset_should_run_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5beginEvbtowc_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5frontEv_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__M_node_counttm_ming_init_gtest_countMSG_WAITALLoperator<< _ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5beginEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE8max_sizeERKS3__ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_jjbasic_stringstrcmp_ZNK7testing8internal12UnitTestImpl6FailedEv_ZN7testing8internal12UnitTestImpl24ConfigureStreamingOutputEv_ZNSt6vectorIiSaIiEE6rbeginEv_ZN7testing8internal30WriteToShardStatusFileIfNeededEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc_ZN7testing8internal24HasNewFatalFailureHelper20ReportTestPartResultERKNS_14TestPartResultE_ZNK9__gnu_cxx13new_allocatorIPKcE8max_sizeEv_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_ES7_ai_addr_ZNK9__gnu_cxx13new_allocatorISsE8max_sizeEv__strThreadLocalfailuresfwscanf~AbstractSocketWriter_DestroyCreateFolder_ZN7testing9internal220PrintBytesInObjectToEPKhjPSoisspace_ZNKSs8_M_limitEjj_ZN7testing16AssertionFailureERKNS_7MessageEglobal_test_part_result_repoter__ZNSs4swapERSs_ZNKSt3setISsSt4lessISsESaISsEE4rendEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE17_M_create_storageEj__uninitialized_move_if_noexcept_a >_ZN7testing8internal12UnitTestImpl11FilterTestsENS1_18ReactionToShardingE_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEplEifailure_message_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_lower_boundEPKSt13_Rb_tree_nodeIS1_ESB_RKS1__ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jjStreamableToStringAlmostEqualsInDeathTestChild_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6rbeginEvShouldShardoperator<< _ZNK9__gnu_cxx13new_allocatorIwE7addressERKw_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEppEi_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8max_sizeEv_ZNKSt17_Rb_tree_iteratorISsEeqERKS0__ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_get_Node_allocatorEv_ZN7testing14InitGoogleTestEPiPPcfind_if<__gnu_cxx::__normal_iterator >, testing::internal::TestPropertyKeyIs>GetEnviron_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEppEvdefault_val_ZNK7testing8TestInfo11value_paramEv_ZNSt3setISsSt4lessISsESaISsEE11lower_boundERKSs_ZNSs6insertEjRKSsjj_ZN7testing14InitGoogleTestEPiPPwCmpHelperSTRNEMSG_WAITFORONE_ZN7testing8internal9MutexBase6UnlockEv_ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EEoperator&=pattern_DeathTestFactory_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_E_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7addressERS3__ZN7testing8internal24XmlUnitTestResultPrinterD2Ev_ZN7testing8internal18OsStackTraceGetterD0EvTestEventListeners_ZNSt11char_traitsIcE4moveEPcPKcj~AssertHelperkTestShardIndex_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11upper_boundERKSs_ZN7testing8internal17StreamingListener12SocketWriter14MakeConnectionEv_ZNK7testing8internal13FloatingPointIfE13fraction_bitsEv_M_refcopy_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing12TestPropertyES4_EET0_T_S6_S5_si_uid_ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv_Destroy_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7destroyEPS3__ZN7testing8internal26GoogleTestFailureExceptionC2ERKNS_14TestPartResultEsa_mask_S_floatfieldsizetypeIsSubstringImpl_ZN7testing4TestC2Ev_ZNSs4_Rep10_M_refcopyEv~TestPartResultReporterInterfacepremature_exit_file_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwjj__errno_location_ZNSt11char_traitsIwE3eofEv_ZNKSt23_Rb_tree_const_iteratorIPKcEeqERKS2_new_allocator_ZNKSt6vectorIPcSaIS0_EE6rbeginEvoperator()_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_rightmostEv_ZNK7testing10TestResult6FailedEv_M_get_insert_unique_pos_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE19_M_get_Tp_allocatorEv_ZN7testing16AssertionFailureEvMSG_SYN__value_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEi_ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT__ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE17_S_select_on_copyERKS4_success_scoped_ptr, std::allocator > >sigactiondirectory_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEveofbit_ZNSt3tr110tuple_sizeINS_5tupleIIEEEE5valueE_ZNSs4_Rep26_M_set_length_and_sharableEj_ZNSt6vectorIPcSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6_CaseInsensitiveWideCStringEquals_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8key_compEv_ZNSt13_Rb_tree_nodeIPKcE9_M_valptrEvgtest_trace_stack_should_ZNSt11char_traitsIwE4copyEPwPKwj_ZNSt10_Iter_baseIPPcLb0EE7_S_baseES1_printf_ZNSt12_Vector_baseISsSaISsEE12_Vector_impl12_M_swap_dataERS2__ZN7testing8internal13DeathTestImpl10set_statusEi__lentm_monrepeat__ZN7testing8TestCase22TestReportableDisabledEPKNS_8TestInfoEsi_pid__off_t_M_get_Node_allocator__resultdefault_global_test_part_result_reporter_factory_new_allocatorrebindDoubleNearPredFormatreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_valueEPKSt13_Rb_tree_nodeIS1_Eflag_str_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE8allocateERS3_j_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPc_ZNKSt23_Rb_tree_const_iteratorISsE13_M_const_castEv_ZNKSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE19_M_get_Tp_allocatorEv_M_rightmostIsSpace_ZNSolsEd_ZNSolsEf_ZNSolsEi_ZNSolsEjdiffobj_bytesShuffleRange_syscall_ZNSolsEx_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EEkBitCountmarker__wch_ZN7testing8internal12UnitTestImpl14UnshuffleTestsEvlistener_Arg__copy_move_boperator== >_ZdaPv__alloc_swap, std::allocator > >, true>StackGrowsDownFloatingPointUnionoperator++ignore_ZNSt10_Iter_baseIPPN7testing8TestCaseELb0EE7_S_baseES3_operator+=__glibc_reserved4__glibc_reserved5range_width~Test_ZNK7testing8TestCase18ad_hoc_test_resultEv__string_typePrintFailedTestsallocator, std::allocator > >trace_ZNKSt14_Bit_referenceltERKS__ZN7testing8internal27PrettyUnitTestResultPrinter15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal21UniversalTersePrinterIPKwE5PrintES3_PSoInitGoogleTestImpl_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmIEibasic_string, std::allocator >flag_lenCapturedStreamwcsncat__lhs_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEaSERKS4__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEnew_allocatorsetstate_ZNSt6vectorIiSaIiEE14_M_fill_assignEjRKi_ZN7testing8internal9DeathTestC2Ev_ZN7testing8internal9Arguments4ArgvEv_ZNSbIwSt11char_traitsIwESaIwEE6resizeEj_ZNK7testing8TestCase11GetTestInfoEi_ZNSt11char_traitsIwE7compareEPKwS2_j_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEEptEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5frontEvoperator--Delete_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8max_sizeEv__elision_data_Containeroperator-=operator->FormatTimeInMillisAsSecondsShuffleoperator<< _ZN7testing8internal15GetTimeInMillisEvtm_year_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5frontEvLIVED_ZNSs16_S_construct_auxIPcEES0_T_S1_RKSaIcESt12__false_typereverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >GetMutableTestInfo_ZNK9__gnu_cxx17__normal_iteratorIPcSsEdeEvMSG_DONTROUTE_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8pop_backEv~_Vector_impl_M_widen_initargsto_int_type_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE12_M_check_lenEjPKc_M_set_sharableenvironments_ZSt7nothrow_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE12_Vector_impl12_M_swap_dataERS5___iter_equals_val >unit_test__ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmIEi_ZNKSbIwSt11char_traitsIwESaIwEE4dataEvallocateoperator<< ai_nextParseInt32Flagnew_value_ZN9__gnu_cxx17__normal_iteratorIPcSsEmIEi__is_move_iterator, std::allocator >*>__builtin_strstr_ZNSt6vectorISsSaISsEE9push_backERKSs_IO_write_end~TestCaseNameIs__uninitialized_copy_a_IO_save_basepptrtm_wday_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE3setERKS3_kExponentBitMask_ZNSt11char_traitsIwE7not_eofERKj_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5frontEv_ZN7testing32ScopedFakeTestPartResultReporterC2ENS0_13InterceptModeEPNS_19TestPartResultArrayE__are_same_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_minimumEPKSt18_Rb_tree_node_base_ZN7testing8internal18g_init_gtest_countE_ZN7testing8UnitTest4implEva_typetest_part_resultlast_death_test_case__ZNSt12_Vector_baseISsSaISsEE13_M_deallocateEPSsj_ZNK9__gnu_cxx17__normal_iteratorIPcSsEixEi_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7destroyEPS3__ZNKSt6vectorIPcSaIS0_EE8capacityEv_ZNSt11char_traitsIwE12to_char_typeERKjdistance__new_start_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_S_keyEPKSt18_Rb_tree_node_baseSetInjectableArgvsos_stack_trace_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEE4baseEv_ZNK9__gnu_cxx13new_allocatorIPcE8max_sizeEvint_type~TestEventListeners_ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEvMSG_PEEKremoveval1val2_ZN7testing8internal24XmlUnitTestResultPrinter29TestPropertiesAsXmlAttributesERKNS_10TestResultEsegmentn_sign_posnactual_message_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4backEva_key_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_rightEPKSt18_Rb_tree_node_base_ZNK7testing8internal8FilePath14RemoveFileNameEvwrite_fdrebind, std::allocator > > >captured_fd_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE13_M_deallocateEPS1_jWait_ZN7testing17TestEventListener18OnTestProgramStartERKNS_8UnitTestEOnTestIterationStartuninitialized_copy*, std::basic_string*>_ZNKSt6vectorIPcSaIS0_EE8max_sizeEv_M_end_ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE19_M_get_Tp_allocatorEvFormatByteiterator_traits_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEE4baseEv_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_basekDeathTestReturned_S_copy_chars_ZNKSt6vectorIPcSaIS0_EE5emptyEvtotal_test_count_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEjRKS3_IsValidXmlCharacter_ZNSt6vectorIPN7testing8TestCaseESaIS2_EEaSERKS4__ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E8MakeFromEv_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEpLEiArgumentsstreamable_ZNSs7_M_copyEPcPKcj_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEaSERKS7_signum__Rb_tree_impl_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_minimumEPSt18_Rb_tree_node_baseColoredPrintfkColorFlag~Environmentsa_sigaction_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmIEi_IteratorL_ZN7testing8internal10scoped_ptrIKSsE5resetEPS2__ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE9push_backERKS2__ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwjstack_sizesi_stimeshard_testsGetNextRandomSeed__arg_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmIEi_Iter_baseallocator >_ZN7testing10TestResultD2Ev_M_insert_equal_lowerreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_ZNSt13_Bit_iteratormIEi_ZN7testing15AssertionResultlsIA11_cEERS0_RKT__ZNK7testing8UnitTest4implEv_ZN9__gnu_cxx13new_allocatorISsE9constructEPSsRKSs_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEdeEv_ZNSt11char_traitsIcE3eofEvfastmap_ZNKSt3setISsSt4lessISsESaISsEE11equal_rangeERKSspthread_key_tmmap_ZNK7testing8UnitTest30reportable_disabled_test_countEvgetaddrinfo_Iter_base, std::allocator >*, false>TestReportablefull_flag__niter_base*>_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5countERKSs_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwjst_uid__builtin_strrchrstr_valdefault_per_thread_test_part_result_reporter_thousands_sep_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_destroy_nodeEPSt13_Rb_tree_nodeISsE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE15_M_insert_lowerEPSt18_Rb_tree_node_baseRKS1__ZN7testing8internal17TestEventRepeater7ReleaseEPNS_17TestEventListenerE_ZNK7testing8internal24InternalRunDeathTestFlag4lineEv__copy_move_bPrintByteSegmentInObjectTo_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4rendEvInt32_ZNK7testing8internal2RE7patternEv_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmmEv_ZNSt6vectorISsSaISsEED2Ev_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKccopya_test_case_name_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS5___copy_move_bEscapeXmlAttribute_ForwardIterator_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEE4baseEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_Bit_reference_ZN7testing8internal24XmlUnitTestResultPrinteraSERKS1_gtest_trace_stack_ZNSt8ios_base4setfESt13_Ios_Fmtflags_ZN7testing8internal12UnitTestImpl20ClearAdHocTestResultEv_ZN7testing8internal15NoExecDeathTestD2Evwords_ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEdeEvstart_timestamp__ZNKSt17_Rb_tree_iteratorISsEdeEv_ZNKSs7compareEjjPKcj_ZNK7testing8UnitTest6PassedEv_Destroy_aux_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5beginEvcopy_backward_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE11_M_allocateEjdestroy_ZNSs6insertEjPKc_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE5resetEPS2__ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6rbeginEv_ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEig_help_flagFlagToEnvVar_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEppEia_file_name_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE5emptyEvwidenF_OWNER_TIDnonfatally_failed_ZN7testing8internal19UniversalPrintArrayEPKcjPSoReactionToSharding__quad_tenable_ZN9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE10deallocateEPS3_j_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_upper_boundEPSt13_Rb_tree_nodeISsES8_RKSs_ZNSt3setIPKcSt4lessIS1_ESaIS1_EEaSERKS5_file_stat_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_beginEvgai_strerror__new_finishcopy_backwardtest_case_to_run_countFLAGS_gtest_show_internal_stack_framesnew_allocator_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6rbeginEvgtest_flag_saver__ZNSt6vectorISsSaISsEE7reserveEjoperator<< kPathSeparatorString_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsEOnTestEndbitsRemoveTrailingPathSeparator~ScopedTracereverse_iteratoris_attribute_ZNKSt6vectorIiSaIiEE4rendEv_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7destroyEPS2__ZNKSt6vectorIPcSaIS0_EE12_M_check_lenEjPKcdistance__normal_iterator > >wcsncmp_ZNKSt18_Bit_iterator_baseleERKS__ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE10deallocateERS3_PS2_j_ZNK7testing8internal8FilePath7IsEmptyEv__normal_iterator > >_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEdeEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5frontEv_M_right_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4findERKS1___copy_move_a2_ZNK7testing8internal8FilePath27RemoveTrailingPathSeparatorEvbase_name_M_get_insert_hint_unique_pos_ZN7testing8internal15NoExecDeathTestD0Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Evtowctrans_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_beginEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSs2atEj__uninitialized_copy_afilenoRunTearDownTestCase_ZN7testing17TestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4swapERS4__ZN7testing8internal11CmpHelperLEEPKcS2_xxcharoperator- >_S_refcount__digits_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE21_M_get_Node_allocatorEv__normal_iterator > >_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwj__is_normal_iteratorfixture_class_id_ZN7testing8internal27PrettyUnitTestResultPrinter27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEvswprintf_Value_ZNSs4_Rep10_M_destroyERKSaIcE_ZN7testing4Test8TestBodyEvUniversalPrinterdetailexpr1expr2_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE28_M_get_insert_hint_equal_posESt23_Rb_tree_const_iteratorISsERKSs__uninit_copy_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE15_M_erase_at_endEPS2___are_samefixture_class_id__ZN7testing28FLAGS_gtest_break_on_failureEFLAGS_gtest_print_timeType_IsMove_ZN7testing8internal29PrintFullTestCommentIfPresentERKNS_8TestInfoEoperator<< __copy_move_backward_a__is_normal_iterator_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EEixEjtest_info_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE23_M_get_insert_equal_posERKSs_ZNSt6vectorIiSaIiEE3endEvMutexBase_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6resizeEjS2__ZN7testing14IsNotSubstringEPKcS1_RKSsS3_tv_usec_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE3endEvHelpermemmoveFindLastPathSeparatorpair, std::_Rb_tree_iterator >_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE10deallocateERS4_PS3_j_ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_j_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4rendEvCOLOR_DEFAULT_ZNK7testing8internal12UnitTestImpl21reportable_test_countEvto_char_type_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE7destroyEPS3_length_ZN7testing8internal13CaptureStderrEvwide_c_str_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_equal_ESt23_Rb_tree_const_iteratorISsERKSs_ZN7testing8internal6String32CaseInsensitiveWideCStringEqualsEPKwS3_operator<<_M_set_leaked_ZNSt6vectorIiSaIiEE15_M_erase_at_endEPi_ZN7testing8internal11CmpHelperGTEPKcS2_xx_M_clonesigset_t_ZNK7testing14TestPartResult11line_numberEvcapacityoperator()<__gnu_cxx::__normal_iterator*, std::vector > > >_ZN7testing8internal26GoogleTestFailureExceptionD0Ev_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmiEi_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Evsetf_ZN7testing8TestCase19RunTearDownTestCaseEvFileOrDirectoryExists_ZNSbIwSt11char_traitsIwESaIwEE6appendEjw_ZN7testing8internal17TestEventRepeater11OnTestStartERKNS_8TestInfoEthis_fixture_id_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEdeEv_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKwsetwhas_tests_to_run_ZNK7testing8internal8FilePath21FindLastPathSeparatorEvsigemptyset_ZNSspLEPKcoperator==_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_M_endEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmmEi_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmIEiis_nan_ZNKSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEvvalue_compparent_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEpLEi__first_ZN7testing24ValidateTestPropertyNameERKSsRKSt6vectorISsSaISsEECOLOR_RED__copy_move_backward_a2ExecDeathTestoperator<< _ZN7testing8internal17TestEventRepeater22set_forwarding_enabledEb_ZN7testing8internal13ExecDeathTestD2Ev__tmpkRepeatFlag_ZN7testing8internal12UnitTestImplD2Ev_ZNKSs6substrEjjhaystack_ZN7testing8internal12UnitTestImpl19current_test_resultEvkey_type_M_rootExtractSummarymbsrtowcsDefinedTestIter_S_beg_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlUnitTestEPSoRKNS_8UnitTestE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_insert_equal_lowerERKSsoperator>=number_ZNK7testing8internal12UnitTestImpl22failed_test_case_countEvvalue_str_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11__rb_verifyEvOtherOperand_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE9CreateKeyEv_ZN7testing8internal13PrintStringToERKSsPSo_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4dataEvWideCStringEquals_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5frontEvkAlsoRunDisabledTestsFlagbasic_ostream_ZN9__gnu_cxx14__alloc_traitsISaISsEE8allocateERS1_j~UnitTestImpl_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEi_S_construct_ZNSt10_Iter_baseIPiLb0EE7_S_baseES0_listeners_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEixEi_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEv_ZN7testing8internal11CmpHelperEQEPKcS2_xx_ZNSt6vectorISsSaISsEE5clearEv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6rbeginEv_ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEixEi__pid_tAbortReason_ConstructkReservedTestCaseAttributes_ZNK7testing8internal10scoped_ptrIKSsEptEv_ZNKSt6vectorISsSaISsEE4backEvint_frac_digits_ZNSt12_Vector_baseIPcSaIS0_EE11_M_allocateEj_ZNK7testing8UnitTest17current_test_caseEv_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEppEi_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKw_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5emptyEv_ZNKSt17_Rb_tree_iteratorIPKcEptEv_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEppEv_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5___is_normal_iterator_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEdeEv__copy_move_b_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseERKS1_vector >PrintCharAndCodeTo_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE3endEv_ZN9__gnu_cxx13new_allocatorIcE7destroyEPcs1_expressionOutputXmlTestInfo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5clearEv_ZNSt8ios_base9precisionEi_ZN7testing8internal19UniversalPrintArrayEPKwjPSo_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4dataEv__uninitialized_move_if_noexcept_a >_M_iend_ZNK7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE3getEvTearDownEnvironmentkDeathTestCaseFiltersi_tidnewline_anchorst_rdev__sigaction_handler_S_empty_rep_storage__copy_move_a2_ZN7testing8UnitTest3RunEviterator_traitsg_argvs_ZN9__gnu_cxx13new_allocatorIPcE7destroyEPS1__ZNSs6assignEPKcExecDeathTestChildMainlocaltime_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE8capacityEv_ZNKSbIwSt11char_traitsIwESaIwEE7_M_dataEv_ZN7testing8internal14DeathTestAbortERKSs_ZN7testing8internal14CmpHelperSTRNEEPKcS2_S2_S2_value_param___pfnStreamableToStringold_reporter__ZNSs6resizeEjcTimeInMillis_ZN7testing32ScopedFakeTestPartResultReporterD2Ev_DestroykMaxUlpsmemcmp_ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSoforwarding_enabled__M_check_len__is_normal_iterator_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11lower_boundERKS1___rb_verify_ZN7testing28FLAGS_gtest_throw_on_failureE_S_bin~ScopedFakeTestPartResultReporterint_n_sep_by_space_ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6__ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE2atEj_IO_marker_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE8max_sizeEv_ZNK7testing14ExitedWithCodeclEi_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEdeEvtest_case_indices__ZN7testing8internal11g_help_flagE_FacetDeathTestOutcome_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE5resetEPS6_print_time__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE18_M_fill_initializeEjRKS1__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5beginEv_ZNSs6appendERKSsjjIsNotContainer_ZN7testing8internal10ParseInt32ERKNS_7MessageEPKcPiAssertHelperDataFLAGS_gtest_break_on_failure_Destroy_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7addressERS4__ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE12_Vector_impl12_M_swap_dataERS5_re_nsubGetAbsolutePathToOutputFilehas_new_fatal_failure_INTERCEPT_ONLY_CURRENT_THREADiterator_traits_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11lower_boundERKS1__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEdeEvDefaultPerThreadTestPartResultReporter_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE4swapERS4_bytes_last_read_BI1_BI2_ZNKSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE19_M_get_Tp_allocatorEvptr__ZN7testing8UnitTest9listenersEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEE4baseEvai_socktype__is_move_iterator_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEiPrintFullTestCommentIfPresentwctrans_S_truncscoped_ptr, std::allocator > >_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEv_ZNKSs7compareEPKc__pad4_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5beginEvset_elapsed_time_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEixEi_S_ios_iostate_end_ZN7testing8internal17GetCapturedStderrEvFLAGS_gtest_coloroperator<< ~new_allocator~ThreadLocal_ZN7testing8internal8FilePath22GenerateUniqueFileNameERKS1_S3_PKcwidth_ZNSbIwSt11char_traitsIwESaIwEE4_Rep12_S_empty_repEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx13new_allocatorIwE7destroyEPw_ZNKSt6vectorISsSaISsEE4sizeEv__uninitialized_move_if_noexcept_a >_ZNKSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13get_allocatorEvoperator<< strtoll~UnitTestReadReportFailureInUnknownLocation_ZN7testing8internal12UnitTestImpl28CurrentOsStackTraceExceptTopEi__baseInt32FromGTestEnv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEdeEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >user_msgerrnum_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEixEi__copy_move_backward_a2emptyinstance_ZN7testing8internal29ParameterizedTestCaseRegistryaSERKS1_val1_ss__copy_move_b__end_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE10deallocateERS3_PS2_jobject_ZN7testing8internal14CapturedStream11GetFileSizeEP8_IO_FILE_ZN7testing18FLAGS_gtest_repeatE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEdeEv__mbstate_t_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_maximumEPKSt18_Rb_tree_node_baseDeleteSelf___normal_iterator > >_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S6_S6_tz_minuteswestkDefaultOutputFile_M_valptr_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE18_M_fill_initializeEjRKS1__ZN7testing8internal17TestEventRepeaterD0Ev_ZNKSt23_Rb_tree_const_iteratorIPKcE13_M_const_castEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEpLEitype_param_S_internal_ZN7testing8internal10scoped_ptrISsE7releaseEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEdeEvconst_referenceOnEnvironmentsTearDownStart__uninit_copy_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE10_S_on_swapERS4_S6__ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7addressERKS2_output_dir_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE3endEvset_last_death_test_message_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5beginEv_ZN7testing16AssertionSuccessEvport_num_COLOR_YELLOWrebindreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSsreservedeath_test_index_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEixEi_M_disjunct_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwj_M_leak_ZNSs7_M_leakEv~Arguments_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEv_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPiS1_EERKierrors_str__is_move_iteratorfloatfieldg_executable_path_ZNKSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE13get_allocatorEvForEach, void (*)(testing::TestInfo*)>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_insert_equalERKSsrm_so_ZNSt6vectorIPcSaIS0_EE4swapERS2_elapsedfclose_ZN7testing8internal8FilePath11ConcatPathsERKS1_S3__S_unitbuf_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEixEi_ZNKSt4lessIPKcEclERKS1_S4_kHexEscapeFLAGS_gtest_internal_run_death_testAssertionSuccessright_ZNKSbIwSt11char_traitsIwESaIwEEixEj_ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEjRKS0__ZNKSs2atEj_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE7releaseEv_ZNK7testing8internal13FloatingPointIdE4bitsEv_ZNKSbIwSt11char_traitsIwESaIwEE6_M_repEvallocatorline__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE5emptyEvoperator< , std::allocator >_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE17_S_select_on_copyERKS3__ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEixEioriginal_dir_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZN7testing8internal7PrintToEwPSo_ZNSbIwSt11char_traitsIwESaIwEE6rbeginEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE15_M_insert_lowerEPSt18_Rb_tree_node_baseRKSsMessage_M_parent_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5beginEv_ZNKSbIwSt11char_traitsIwESaIwEE6rbeginEv6ldiv_t_ZNKSt17_Rb_tree_iteratorIPKcEeqERKS2_EmptyTestEventListener_Destroyaddrinfoiterator_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_lower_boundEPKSt13_Rb_tree_nodeISsES9_RKSsmemset_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE8max_sizeEv_M_length_ZN7testing8internal11CmpHelperGEEPKcS2_xxchar_traitsFLAGS_gtest_random_seed_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE10deallocateERS3_PS2_jfactoryregex__Setfill_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4backEvreverse_iterator >pthread_mutex_init_ZNKSs9_M_ibeginEv_ZN7testing8internal6String28CaseInsensitiveCStringEqualsEPKcS3_insert_ZN7testing8internal17TestEventRepeater13OnTestCaseEndERKNS_8TestCaseE__miter_baseTypeWithSize<4u>_ZNSt12_Vector_baseISsSaISsEE19_M_get_Tp_allocatorEv_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE6insertERKS1__ZN7testinglsERSoRKNS_14TestPartResultEHasOneFailureCmpHelperSTREQ_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8pop_backEvdefined_test_names__ZNK7testing10TestResult15test_propertiesEvCmpHelperSTRCASENE_ZN7testing8UnitTestD2Ev_ZNSt11char_traitsIwE2ltERKwS2__ZN7testing18FLAGS_gtest_outputE_Iter_equals_valexit_code__ZNSt6vectorIiSaIiEE7reserveEj_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEi_Ios_SeekdirListTestsMatchingFilter_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_rebind, std::allocator > >_ZN7testing8internal37FormatCompilerIndependentFileLocationEPKci_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEppEvGenerateUniqueFileName_ZNKSt6vectorISsSaISsEE2atEjchar_traitskMaxBiggestInt__builtin_puts_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolder7pointerEvoutput_name__addressoffile_size_ZNSt8ios_base5widthEi_ZN7testing8internal12UnitTestImpl23ClearNonAdHocTestResultEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___alloc_traits >GetThreadCount_ZN7testing8UnitTest14RecordPropertyERKSsS2_~GTestMutexLock_M_dataplusallocator__uninitialized_move_if_noexcept_a >_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE7reserveEj~basic_ostreamequal_range_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_plural_form_M_predinternal_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE10_S_on_swapERS4_S6__ZNK7testing8internal12UnitTestImpl11GetTestCaseEi_M_left__builtin_putcharnothrow_t__destroyTestEventRepeater__builtin_fputsnew_test_case_ZNK9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE8max_sizeEv_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEixEjkDeathTestLivedparameterized_tests_registered_ldiv_t_ZNKSs13find_first_ofEPKcjForEach, void (*)(testing::TestCase*)>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsE_ZNSs18_S_construct_aux_2EjcRKSaIcE_ZN7testing10TestResult20ValidateTestPropertyERKSsRKNS_12TestPropertyE_Vector_base >INTERCEPT_ALL_THREADSva_listinfoline_number_ZN7testing8TestInfoC2ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseEShouldRunTestOnShard_S_synced_with_stdioInt32FromEnvOrDieIsEmptyTestFailedpositive_sign_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKcshard_index_env__lockmkstempKilledBySignal__in_chrg_ZN7testing8internal27PrettyUnitTestResultPrinterD0Evclone_ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2__ZNSt11char_traitsIwE11to_int_typeERKw__normal_iterator, std::allocator > >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_range_checkEj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_Estatement__ZN7testing8internal13ExecDeathTest10AssumeRoleEv__builtin_strchr_ZN9__gnu_cxx14__alloc_traitsISaIPcEE17_S_select_on_copyERKS2_kFatalFailuretest_idMSG_CMSG_CLOEXEC_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEdeEvGetEnvchild_pid___miter_basescoped_ptr_ZNSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEv~AssertionResultRegisterTests_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS1_ERKS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNK7testing8TestCase12elapsed_timeEv_ZNSs5clearEvSetUpEnvironmentin_color_moderange_ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE8max_sizeEv_M_lower_bound_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE__ptrContainer_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4sizeEvStreamingListener_ZN7testing8internal17TestEventRepeater6AppendEPNS_17TestEventListenerECreateKey__copy_move_b_ZN7testing8internal12UnitTestImplC2EPNS_8UnitTestEoperator<< _ZNSt3setISsSt4lessISsESaISsEE11equal_rangeERKSs_ZNSt6vectorIN7testing12TestPropertyESaIS1_EEixEj_ZNKSt6vectorISsSaISsEE5frontEv_ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE17_M_create_storageEj_ZN7testing8internal13FloatingPointIdE24SignAndMagnitudeToBiasedERKyxmloutThreadLocal > >_ZN7testing8internal17Int32FromGTestEnvEPKci_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_upper_boundEPKSt13_Rb_tree_nodeIS1_ESB_RKS1__Predicateiterationvector >_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE3getEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt17_Rb_tree_iteratorIS1_E_ZN7testing15AssertionResultC2ERKS0__ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_string_value__c1__c2__alloc_traits >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE14_M_range_checkEj_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEixEi_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE8max_sizeERKS4__ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE8max_sizeERKS3__M_finishactual_predicate_valuewcstof_ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE_ZNK7testing8internal12UnitTestImpl17current_test_caseEvwcstokwcstol_ZNKSs16find_last_not_ofERKSsj_ZNKSbIwSt11char_traitsIwESaIwEE6lengthEv_ZN9__gnu_cxx13new_allocatorIPKcE9constructEPS2_RKS2_operator== >iterator_typeInitDeathTestSubprocessControlInfo_S_failbit__normal_iterator__ch_ZN7testing8internal23DefaultDeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE_vptr.DeathTest_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE14_M_create_nodeERKS1__ZN7testing29FLAGS_gtest_stack_trace_depthESOCK_SEQPACKETGetElementOrtest_to_run_count_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE10deallocateERS4_PS3_j_ZN7testing8internal35DefaultGlobalTestPartResultReporteraSERKS1__ZN7testing13PrintToStringIPKcEESsRKT___int32_t__normal_iterator > >kMaxStackAlignment_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7destroyEPS4_operator<< UnshuffleTests_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE9push_backERKS1__ZNK7testing8internal12UnitTestImpl17gtest_trace_stackEvpthread_key_deletest_mtimuncaptured_fd__ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs_ZNSt6vectorISsSaISsEEixEjtm_zone_Bit_type_ZN7testing8UnitTestaSERKS0__ZNKSt12_Vector_baseISsSaISsEE13get_allocatorEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5beginEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE19_M_get_Tp_allocatorEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4backEv_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE__distance_ZN7testing8internal9Arguments11AddArgumentEPKcclose_ZNSt6vectorIPcSaIS0_EE6resizeEjS0__ZNKSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE13get_allocatorEvfunctorVerifyRegisteredTestNamesFormatCountableNounPrintBytesInObjectTo_ZN7testing15AssertionResultlsIA7_cEERS0_RKT_PrintCharAndCodeTo_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6resizeEjS2__ZN7testing8internal11CmpHelperLTEPKcS2_xx__is_move_iteratorbinary_ZNK7testing8TestInfo10should_runEv_ZN7testing8internal11ScopedTraceaSERKS1_rebindEscapeXmlFormatIntWidth2_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEptEvallocator_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE17_M_create_storageEj__uninitialized_copy_a_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4backEv_Rb_tree_node, std::allocator > >_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE13_M_deallocateEPS1_jcopy_backwardStatStruct__pthread_mutex_sGetInstance_S_construct_aux_2skip_count_ZN7testing8internal25ReportInvalidTestCaseTypeEPKcS2_ifile_name__ZNK7testing10TestResult16total_part_countEvsa_familyFLAGS_gtest_filter_ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_shard_index_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmIEi__dso_handle_ZN7testing8internal18CmpHelperSTRCASEEQEPKcS2_S2_S2__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEplEi_ZN7testing8internal17TestEventRepeater16OnTestProgramEndERKNS_8UnitTestEtime_t_Alloc_hider_ZNSs10_S_compareEjj_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmiEi_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_a_current_test_case_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4swapERS3_for_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestCase*)>_ZNKSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE19_M_get_Tp_allocatorEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE15_M_erase_at_endEPS2__ZNK7testing8TestCase14test_info_listEvRemoveInvalidXmlCharactersnew_allocator >_ZNKSt13_Bit_iterator13_M_const_castEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE14_M_fill_assignEjRKS3__ZN7testing32ScopedFakeTestPartResultReporteraSERKS0_ForEach, void (*)(testing::TestEventListener*)>_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_range_checkEj_ZNSt12_Vector_baseISsSaISsEE17_M_create_storageEj_ZNKSs17find_first_not_ofERKSsj_ZN9__gnu_cxx13new_allocatorISsE7destroyEPSs7lldiv_tregs_allocated_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEi_ZN7testing18TestEventListeners23SetDefaultResultPrinterEPNS_17TestEventListenerErandom_access_iterator_tag_M_offset_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4dataEv_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEvuninitialized_copy_ZNK7testing8TestInfo10type_paramEvint_p_cs_precedes_ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE6rbeginEv__uninitialized_copy_a<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*, testing::internal::TraceInfo>bsearch_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_range_checkEjshould_shard_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE12_M_check_lenEjPKc_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEplEimon_grouping_M_deallocate_Node_allocator_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmmEiParseGoogleTestFlagsOnlyImpl_ZNKSs4rendEv_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwj_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmmEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS3_S5_EETestCasePassed_offset_ZN7testing28FLAGS_gtest_death_test_styleE_M_replace_safe_ZNK7testing8internal12UnitTestImpl22test_case_to_run_countEvGetCapturedStdout__numeric_traits_integer_ZN7testing8internal24HasNewFatalFailureHelperD2Ev_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEjw_M_beginbasic_istream >_ZN7testing8internal38DefaultPerThreadTestPartResultReporteraSERKS1___kindlow_byte_Destroy >_old_offsetfile_namembstowcs_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE15_M_erase_at_endEPS1__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4rendEv_ZNKSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE13get_allocatorEvrepeat_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE8max_sizeERKS4__ZNSs7replaceEjjPKcFormatBooloperator<< basic_ios >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE3endEvuninitialized_copy~basic_streambuf_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE7destroyERS3_PS2__ZNKSt18_Bit_iterator_baseeqERKS__cur_column_ZN7testing4Test18HasNonfatalFailureEvGetArgvsForDeathTestChildProcessoperator<< spawnedthrow_on_failure_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE3endEvFormatEpochTimeInMillisAsIso8601_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_leftmostEv_ZNSt11char_traitsIcE6lengthEPKcFormatTestCount_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE23_M_get_insert_equal_posERKS1__ZN7testing8internal7PrintToEaPSo_S_construct_auxOnTestProgramEndreverse_iterator<__gnu_cxx::__normal_iterator > > >_M_value_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE4sizeEvpthread_self_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Evsizelist_tests~_Rb_tree_implextension_Tp1ShouldRunTestCase_ZNK7testing10TestResult16death_test_countEv__pred_iter_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE17_S_select_on_copyERKS3__ZNK7testing8internal24InternalRunDeathTestFlag4fileEv__copy_move_b_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv__destroyset_spawned_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE5emptyEv_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE8pop_backEv__copy_move_a2exitGTEST_INFOtime_structFileNo_ZN7testing8internal14CapturedStreamaSERKS1_key_compDefaultPrintNonContainerTo_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE8max_sizeERKS5__ZNSt6vectorIiSaIiEE8pop_backEv_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE_ZNSt6vectorIiSaIiEE4backEvcopyvalue_messageGTEST_FATAL_ZNKSs4_Rep12_M_is_leakedEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11lower_boundERKSs_ZN7testing8TestCase10TestFailedEPKNS_8TestInfoEoperator[]_ZN7testing8internal24XmlUnitTestResultPrinter19IsValidXmlCharacterEc_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4swapERS4__ZN7testing10TestResult5ClearEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx13new_allocatorIPKcE7addressERKS2_strncmp_ZNKSs16find_last_not_ofEPKcjj__n2_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmmEvp_cs_precedeswint_t_ZNK7testing8internal24InternalRunDeathTestFlag8write_fdEv__cxa_guard_releasePrintCharsAsStringTo_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZNSt12_Vector_baseIiSaIiEE12_Vector_impl12_M_swap_dataERS2_mblen__blkcnt_t__are_samebasic_iosGetBoolAssertionFailureMessage_ZN7testing8internal23DefaultDeathTestFactoryD2Evoperator<< decimal_pointkey_compareIsDirconnect_S_select_on_copy_ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv_ZN7testing28FLAGS_gtest_catch_exceptionsE__uninitialized_copy_a_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_get_nodeEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4dataEv_ZN7testing8internal11ScopedTraceC2EPKciRKNS_7MessageE__nlink_tUniversalPrintexpected_value_ZN7testing8internal27PrettyUnitTestResultPrinter13OnTestCaseEndERKNS_8TestCaseE_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4sizeEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE7destroyERS3_PS2__S_ios_fmtflags_end_ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_jAssertionFailure_ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi_M_c__niter_base_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE12_Vector_impl12_M_swap_dataERS5__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmIEi~scoped_ptr_M_n_M_p_ZNSt10_Iter_baseIPN7testing12TestPropertyELb0EE7_S_baseES2__M_t_ZNKSbIwSt11char_traitsIwESaIwEE8max_sizeEv_ZNKSt6vectorISsSaISsEEixEjMakeFileName_ZNKSt5ctypeIcE5widenEc_M_set_length_and_sharable_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_NS4_IPKwS2_EES9___next_Rb_tree_const_iterator~_Vector_base_ZNKSbIwSt11char_traitsIwESaIwEE5beginEv__pfa_line_ZNSt11char_traitsIwE6lengthEPKw_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSt3setISsSt4lessISsESaISsEE8max_sizeEv_ZN7testing8TestCase14set_should_runEb_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEi_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEvdisabled_test_count_M_dataintercept_mode~TestCase_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8capacityEvexpected_predicate_value_IO_buf_endshort unsigned int_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEpLEi_IO_backup_base_ZNSs6appendEPKcj_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tagTestPartFatallyFailed_ZN7testing11Environment8TearDownEv_ZNK7testing8internal10scoped_ptrISsE3getEv_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_key_reportable_disabled_test_count_M_create_storageconstruct_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5beginEv__copy_move_a2_ZN7testing8internal6String23EndsWithCaseInsensitiveERKSsS3__ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE9constructEPS3_RKS3_iterator_traits_ZN9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEpLEi_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE8max_sizeEv_ZN7testing8internal13CaptureStdoutEv__normal_iterator > >StringFromGTestEnv__s2_M_insert_equal__ZNKSs17find_first_not_ofEPKcjj_S_ios_seekdir_end_ZN7testing8internal35FLAGS_gtest_internal_run_death_testE_M_disposeGetCurrentOsStackTraceExceptTopreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > > >ios_base__copy_move_backward_a2_ZNSt17_Rb_tree_iteratorISsEppEv_shortbuf_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE8allocateERS4_j_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EEaSERKS4_kDisableTestFilter_S_goodbitn_sep_by_space_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_create_nodeERKSs_M_insert_timespecAssertHelper_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5countERKS1__ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE12_Vector_impl12_M_swap_dataERS6__ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE10deallocateERS4_PS3_j_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4sizeEvTypeWithSize<8u>kTestsuites_vptr.TestPartResultReporterInterface_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7addressERS2_this_test_name_Destroy*>_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE14_M_fill_assignEjRKS1_ChopLowBits_ZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczFDOpenIsNormalizableWhitespaceelapsed_timeParseNaturalNumber_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjjTEST_THREW_EXCEPTION_ZNSt6vectorIN7testing14TestPartResultESaIS1_EEaSERKS3_FormatCxxExceptionMessage_ZN7testing8internal24XmlUnitTestResultPrinter13EscapeXmlTextEPKcnegative_signoperator delete []__miter_basebegin_string_quoteoperator!= >__copy_move_a2showpointtermdouble_ZNK7testing8UnitTest17current_test_infoEvlock__destroy_ZN7testing18TestEventListeners7ReleaseEPNS_17TestEventListenerE_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7addressERS3__ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestEkProtobufOneLinerMaxLength_ZN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmmEiset_statusresult__ZN7testing8internal13FloatingPointIdE8InfinityEvCmpHelperEQallowed_names_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE7destroyERS4_PS3__ZNK7testing14KilledBySignalclEi_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5beginEvresults_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmiEioperator<< _ZNK7testing15AssertionResult15failure_messageEvuse_forklesselement_namefatally_failedallocatorStringStreamToStringFailed_ZN7testing8internal29ParseInternalRunDeathTestFlagEvGeneratecopy_ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE8max_sizeEvpassed_ZN7testing8internal17TestEventRepeater9OnTestEndERKNS_8TestInfoE_ZNKSt13_Bit_iteratordeEv_ZN7testing8internal20SingleFailureCheckerD2Evtuple<>case_listcondition_ZN7testing8internal10scoped_ptrISsE5resetEPSs_ZN7testing8internal5MutexD2Ev~vector_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE7destroyERS5_PS4__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_mbtowccopy_backward_ZNSs4rendEv__cxa_end_catch__normal_iterator > >_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE19_M_get_Tp_allocatorEv__is_move_iterator_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEpLEi_ZNSs7replaceEjjRKSsjjCmpHelperGE_ZN7testing8internal12UnitTestImpl32SuppressTestEventsIfInSubprocessEvmax_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE18_M_fill_initializeEjRKS2___compar_fn_t__copy_move_backward_a*, std::basic_string*>CmpHelperGT_ZN7testing8internal24HasNewFatalFailureHelperaSERKS1_parent_ldivtable_sizetotal_shardsholder__pid_type__pathGTestColoroperator()<__gnu_cxx::__normal_iterator > >_ZN7testing8internal26ThreadLocalValueHolderBaseD0Evoperator<< _ZN7testing8internal14CapturedStream17GetCapturedStringEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4rendEv__align__alloc_traits >_ZN7testing17TestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestEiterator_traits_ZNSt11char_traitsIcE11eq_int_typeERKiS2__ZN9__gnu_cxx13new_allocatorISsE8allocateEjPKv_ZNKSt13_Bit_iteratorixEi_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE8allocateEjPKvstdoutflush >_ZNKSt6vectorISsSaISsEE14_M_range_checkEjmutex_ZN7testing8internal12UnitTestImpl23ListTestsMatchingFilterEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5beginEv~MessageSetValue_ZNK7testing14TestPartResult17nonfatally_failedEv_ZN7testing8internal15ParseStringFlagEPKcS2_PSs~NoExecDeathTest_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE7reserveEj_ZNSs6assignERKSs_ZNSs6appendEjc_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEvregistered___normal_iterator > >_ZNSs4_Rep8_M_cloneERKSaIcEj_ZN7testing23FLAGS_gtest_random_seedE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6assignEjRKS2_st_nlink_ZNK7testing18TestEventListeners22EventForwardingEnabledEvkFilterFlag__copy_move_backward_a2_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE18_M_fill_initializeEjRKS2_basic_stringbuf, std::allocator >_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEEaSERKS6_MSG_PROXY_ZNSt11char_traitsIwE6assignEPwjw_S_compare_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_M_insert_EPSt18_Rb_tree_node_baseS9_RKS1__ZN7testing8internal16BoolFromGTestEnvEPKcb_ZNKSs5rfindEcj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_minimumEPKSt18_Rb_tree_node_base__miter_base_ZN9__gnu_cxx14__alloc_traitsISaIPcEE8allocateERS2_j_ZN7testing8internal24XmlUnitTestResultPrinter21OutputXmlCDataSectionEPSoPKc__uninitialized_copy_a<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string*, std::basic_string >_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwjpipe_fd__sighandler_ttz_dsttime_M_put_node_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE4sizeEv__max_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEpLEi_S_leftai_family__begfdopen__copy_mfind_first_not_ofhas_new_fatal_failure_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE10deallocateEPS3_jlong double_Vector_impl_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5emptyEvupper_boundDirectoryExistsa_status_ZN7testing8TestCase14test_info_listEvabortfilter_flaga_line_number_ZNK7testing8TestCase6FailedEv_ZNK9__gnu_cxx17__normal_iteratorIPcSsEplEi_Iter_ZNKSs13get_allocatorEv_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE11_M_allocateEj_ZN7testing17FLAGS_gtest_colorEreverse_iterator<__gnu_cxx::__normal_iterator > > >__k1munmap_ZN7testing8internal17StreamingListener9UrlEncodeEPKclocaleconvUniversalPrintCharArrayScopedPrematureExitFileoperator!= >_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE8allocateERS4_j_ZNK7testing8internal14TestCaseNameIsclEPKNS_8TestCaseE__cxa_free_exception_M_mutatecopy_Rb_tree_decrement_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_leftmostEvkMaxCodePoint1kMaxCodePoint2kMaxCodePoint3kMaxCodePoint4beginwstring_S_construct__pred_iter__copy_move_backward_a__clock_t__fmtfl_ZNKSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE5emptyEvkStackTraceMarker_ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoECmpHelperLE_ZNSt18_Rb_tree_node_base10_S_minimumEPS_rebindp_sign_posn_ZN7testing8internal15TestFactoryBaseaSERKS1_CmpHelperLTinternal_run_death_test_flag_ZNKSt3setISsSt4lessISsESaISsEE5countERKSsallocated_ZN7testing8internal21UniversalTersePrinterIPKcE5PrintES3_PSos2_expression_ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT__Rb_tree, std::less, std::allocator >_S_on_swapfirst_fixture_id_ZN7testing4Test14RecordPropertyERKSsS2___copy_move_a__copy_move_backward_a2_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE10deallocateERS5_PS4_j_ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs__uninit_copy_ZN7testing14IsNotSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEpLEi_M_get_nodeflush__mempositive_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4swapERS4__ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE10value_compEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE15_M_erase_at_endEPS3_valuetest_part_results_name_CmpHelperNEmessage_TestPartNonfatallyFailed_S_uppercase_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E5valueEgrouping_ZNK7testing8TestCase10should_runEvcopy_backwardGetTimeInMillis_ZNSt6vectorIPN7testing8TestInfoESaIS2_EEaSERKS4__ZNKSt6vectorIiSaIiEE6rbeginEv_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEplEiresult_typeoperator<< >_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcE_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE5emptyEv_GLOBAL__sub_I__ZN7testing8internal17kStackTraceMarkerEflip_ZN7testing8TestInfo3RunEvoperator- >_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_fill_assignEjRKS2__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmiEiFLAGS_gtest_also_run_disabled_testsaddressHasNewFatalFailureHelperlconvregfreeflag_enda_regexReadEntireFile_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEptEv_ZNKSbIwSt11char_traitsIwESaIwEE4sizeEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5frontEvmkdir_ZNKSbIwSt11char_traitsIwESaIwEE3endEv_ZNSt6vectorISsSaISsEE6insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSsDIEDkQuoteBegin_ZNSt12_Vector_baseIPcSaIS0_EE19_M_get_Tp_allocatorEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE10deallocateEPS4_jeq_int_type_ZNK7testing8internal13FloatingPointIdE8sign_bitEvgtest_output_flagnpos_ZN7testing8TestCase10TestPassedEPKNS_8TestInfoE_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE6rbeginEvabs_error_expr_ZNSt6vectorISsSaISsEE5frontEvHasFatalFailure_ZNSt18_Rb_tree_node_base10_S_maximumEPKS_strdupinternal2__uninitialized_copy_aoperator- >_ZN7testing4Test10HasFailureEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEmiEi_ZNKSs6_M_repEv__uninit_copytext_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE8allocateEjPKv__normal_iteratorpost_flag_parse_init_performed__ZN7testing8internal32FormatEpochTimeInMillisAsIso8601ExTestPropertyKeyIs_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEE7releaseEv_ZN7testing8internal17g_executable_pathE_ZN7testing15AssertionResultlsIA5_cEERS0_RKT_ParameterizedTestCaseInfoBasestack_grows_down_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11upper_boundERKS1_posix_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE3endEvvector_ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT_allocator_ZNK7testing8internal9MutexBase10AssertHeldEv_ZN7testing8internal17TestEventRepeater15OnTestCaseStartERKNS_8TestCaseE_M_allocate_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSs6rbeginEvnum_readtest_countpstr_M_erase_aux_Construct_ZNSt6vectorIiSaIiEE9push_backERKi__minOutputXmlAttribute_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6rbeginEvkTestShardStatusFile_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE3endEv__ownerSetup_should_be_spelled_SetUpoperator<< _ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal17GetCapturedStreamEPPNS0_14CapturedStreamE_Construct, char const*>_ZNKSbIwSt11char_traitsIwESaIwEE7_M_iendEv_ZN7testing8internal11ShouldShardEPKcS2_b_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE17_M_create_storageEj_ZN7testing10TestResultC2Ev_ZNSs4_Rep15_M_set_sharableEvsa_family_t_M_bump_up_ZN7testing8internal18StreamableToStringIiEESsRKT__ZN7testing8internal17TestEventRepeater18OnTestIterationEndERKNS_8UnitTestEi_ZNSbIwSt11char_traitsIwESaIwEE5beginEvPredicateswapiterator_traits_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE5emptyEv_ZSt16__throw_bad_castv_ZNK7testing8internal12UnitTestImpl16total_test_countEv_vtable_offsetSetUpTestCaseFuncTestResultwctrans_t_ZNK7testing8UnitTest11random_seedEv__addressofOVERSEE_TEST_ZNKSt3setISsSt4lessISsESaISsEE8key_compEv_ZN7testing8internal24XmlUnitTestResultPrinterC2EPKcdot_extension_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_set_forwarding_enabled_M_impl_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Evsi_sigvalvwprintf_ZN7testing8TestInfo26increment_death_test_countEv_M_range_check_ZNSt23_Rb_tree_const_iteratorIPKcEppEipremature_exit_filepath~GTestFlagSaver_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5_CheckedDowncastToActualType::ValueHolder, testing::internal::ThreadLocalValueHolderBase>_ZNSt23_Rb_tree_const_iteratorIPKcEppEv_ZNK7testing8internal12UnitTestImpl12elapsed_timeEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8key_compEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE8capacityEv_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE7addressERKS3__ZNK7testing15AssertionResultcvbEvCountIf, bool (*)(const testing::TestInfo*)>_ZNK7testing8TestInfo14test_case_nameEvPassed_ZN7testing8internal2RE9FullMatchERKSsRKS1__ZN7testing8internal13FloatingPointIdE38DistanceBetweenSignAndMagnitudeNumbersERKyS4__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE18_M_fill_initializeEjRKS2__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEdeEvpointerkStdOutFileno_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEEaSERKS5__ZNKSt6vectorISsSaISsEE8capacityEv_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS3_S3_forward_iterator_tagfastst_modean_index_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8capacityEv_ZN9__gnu_cxx14__alloc_traitsISaIN7testing8internal9TraceInfoEEE8allocateERS4_jiterator_traits_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE_ZNSt6vectorISsSaISsEE8pop_backEv_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEplEi_ZNKSt6vectorIiSaIiEE14_M_range_checkEjtest_result_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEaSERKS5__InputIterator_S_skipwsdest_ptrClosepthread_getspecificTestFactoryBase_ZNKSt6vectorISsSaISsEE8max_sizeEv_ZNK7testing8internal12UnitTestImpl17current_test_infoEv_ZN9__gnu_cxx14__alloc_traitsISaIiEE10deallocateERS1_Pij__copy_move_backward_a2_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__M_leftmost_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE6rbeginEv_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE8max_sizeEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8pop_backEv_ZN7testing8TestCase12TestDisabledEPKNS_8TestInfoE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEixEibits__ZN7testing22EmptyTestEventListenerD0Ev__uninitialized_move_if_noexcept_a >allocator_ZN7testing17TestEventListeneraSERKS0___uninit_copy_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE4swapERS5__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE24_M_get_insert_unique_posERKSs_M_get_insert_hint_equal_pos_M_move_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_rightEPSt18_Rb_tree_node_base__niter_base_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv_ZNSs13_S_copy_charsEPcS_S__ZNSt10_Iter_baseIPPN7testing17TestEventListenerELb0EE7_S_baseES3__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE6resizeEjS1__ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEE4baseEvoperator<< >_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_jnext_seed_ZNKSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE19_M_get_Tp_allocatorEv_ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_range_checkEjcerrdefault_result_printer_pfile_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag_ZN9__gnu_cxx13new_allocatorIPKcE10deallocateEPS2_jtest_case_count_ZN7testing8internal24XmlUnitTestResultPrinter9EscapeXmlERKSsbwctob_ZNKSt6vectorISsSaISsEE5beginEv_IO_save_end_ZNK7testing8internal12UnitTestImpl19disabled_test_countEvst_gidrelative_path__throw_logic_error_ZN7testing8internal9DeathTest11LastMessageEv__normal_iterator > >_ZN7testing8internal12UnitTestImpl20set_catch_exceptionsEb_ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE__ioinit_ZNKSs8capacityEv_DestroykFractionBitCount__gid_t__are_same, std::allocator >*, std::basic_string, std::allocator >*>new_allocatorFClose_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_bIsUtf16SurrogatePair_ZNSs5eraseEjj_ZNKSs4dataEv_ZN7testing8internal18OsStackTraceGetteraSERKS1_construct_ZNSt23_Rb_tree_const_iteratorISsEppEi_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEEaSERKS4_PrintAsCharLiteralTo_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmIEistr_len_ZNSt23_Rb_tree_const_iteratorISsEppEv__uninitialized_move_if_noexcept_a >UniversalPrint >ClearNonAdHocTestResult_ZNKSt23_Rb_tree_const_iteratorIPKcEptEv_ZN7testing17TestEventListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal6String15FormatIntWidth2Eioperator== >_ZNKSs6lengthEvSetDefaultXmlGenerator_ZN7testing8internal16WideStringToUtf8EPKwiwcsftime_ZNKSs8max_sizeEv~DefaultGlobalTestPartResultReporter_FwdIterator_ZN7testing8internal14CmpHelperSTREQEPKcS2_PKwS4__ZN7testing8internal6IsTrueEbtear_down_tc_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE17_M_create_storageEj_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6resizeEjS2__ZN7testing8internal17StreamingListener6SendLnERKSs_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEplEi_ZNK7testing8TestCase19disabled_test_countEv_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_leakedEv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZNSt17_Rb_tree_iteratorISsEmmEi_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_S_maximumEPSt18_Rb_tree_node_base_ZN7testing8TestCase18GetMutableTestInfoEi_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEplEiBaseholder_base_ZNSt17_Rb_tree_iteratorISsEmmEv_ZNSt12__alloc_swapISaISsELb1EE8_S_do_itERS0_S2_argumentpartial_regex__ZN7testing8internal19TypedTestCasePState11AddTestNameEPKciS3_S3_ConcatPaths_ZN7testing8internal15TestFactoryBase10CreateTestEv__pointer_ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Evtestsnegative_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE10_S_on_swapERS5_S7__ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE9constructEPS3_RKS3__S_boolalpha_ZNSbIwSt11char_traitsIwESaIwEE6assignEjw_ZNK7testing8internal12UnitTestImpl17test_to_run_countEvtest_shard_file__uninit_copy__initialize_pAppendMessage_ZN9__gnu_cxx14__alloc_traitsISaISsEE10_S_on_swapERS1_S3_targetmutex_arg_string_ZN7testing8TestCase12ShuffleTestsEPNS_8internal6RandomE_ZNK7testing8UnitTest17test_to_run_countEv_ZN7testing8internal27OsStackTraceGetterInterface17CurrentStackTraceEii__copy_move_backward_anew_allocatortest_info_listHONOR_SHARDING_PROTOCOL_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE4backEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4rendEvelapsed_time__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4dataEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4backEv_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_execveg_in_fast_death_test_childTestPropertiesAsXmlAttributesdummy__ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev_ZN7testing8internal20StringStreamToStringEPSt18basic_stringstreamIcSt11char_traitsIcESaIcEEstream_name_ZN9__gnu_cxx13new_allocatorIiE10deallocateEPij_Pointer_Rb_tree_insert_and_rebalance_ZNSt11char_traitsIwE6assignERwRKwuninitialized_copyin_subprocess_for_death_testpthread_mutexattr_t_ZNK9__gnu_cxx13new_allocatorIPKcE7addressERS2_for_each > >, void (*)(testing::Environment*)>_ZN7testing8internal16GetAnsiColorCodeENS0_10GTestColorE_ZN9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmIEifound_Destroy_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEdeEv_ZN7testing8internal29ParameterizedTestCaseInfoBase13RegisterTestsEvShouldUseColorcopy_backwarditerator_categoryPrintXmlUnitTest_S_eofbit_ZN7testing8internal17TestEventRepeater16OnTestPartResultERKNS_14TestPartResultEoperator<< _Iter_predfailed_test_countassertion_result_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_valueEPKSt13_Rb_tree_nodeISsE__nusersconst_iterator_ZNKSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE13get_allocatorEv_M_capacityTestCaseoperator== >~Init_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_S_leftEPKSt18_Rb_tree_node_baseFILE_filenoDoubleLEoperator|=severity_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EEixEj_ZNSt11char_traitsIcE6assignERcRKcCaptureStderrallocator_ZNK7testing8internal8FilePath19RemoveDirectoryNameEvCreateTest~TestPartResult_ZNK7testing8internal13FloatingPointIdE6is_nanEvoperator<< _ZN7testing8internal18StreamableToStringIPcEESsRKT__ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEmIEi_ZN7testing8internal9DeathTest10AssumeRoleEv_ZNKSt6vectorIiSaIiEE2atEjHasNonfatalFailureFormatWordListvector >filter_outcome_ZNSt6vectorIiSaIiEE5clearEv_M_color_ZN7testing8TestCase13ShouldRunTestEPKNS_8TestInfoE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEixEi_ZNSbIwSt11char_traitsIwESaIwEEaSERKS2__ZN7testing8internal8GTestLog9GetStreamEv_ZN7testing8internal27OsStackTraceGetterInterfaceaSERKS1_internal_flag_ZNSt12_Vector_baseISsSaISsEE11_M_allocateEjignore_sigprof_actionOnTestIterationEnd_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5frontEvscoped_ptr_ZNKSs3endEv_ZNK7testing8internal8FilePath6stringEv_ZNSt6vectorIPcSaIS0_EE6assignEjRKS0__ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE10deallocateEPS3_j_ZN7testing8internal13FloatingPointIfE38DistanceBetweenSignAndMagnitudeNumbersERKjS4_getpagesize_ZNKSt6vectorIPcSaIS0_EE14_M_range_checkEj_ZNSt6vectorIPcSaIS0_EE14_M_fill_assignEjRKS0__ZNK7testing8internal10scoped_ptrISsEdeEv_ZNSo5writeEPKci_ZN7testing22FLAGS_gtest_list_testsE_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_jctype__socklen_t_ZNSt11char_traitsIwE4moveEPwPKwj_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEplEiFloatLEStreamWideCharsToMessage_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6resizeEjS1__ZN7testing10TestResult26increment_death_test_countEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEoperator==, std::allocator >partial_regexsival_ptrHasSameFixtureClass_Destroyproperty_name_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE2atEj_M_refcountis_runnable_ZN7testing8internal17TestEventRepeater22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZNK7testing14TestPartResult4typeEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEplEi~TestInfo__dev_t_Base_ptr_ZN7testing8internal17StreamingListener12SocketWriterD2Ev_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_lower_boundEPSt13_Rb_tree_nodeISsES8_RKSsIsTrue_ZNSt12_Vector_baseIPN7testing17TestEventListenerESaIS2_EE19_M_get_Tp_allocatorEvfilter_M_bump_downfull_pathnameEXECUTE_TESTMSG_ERRQUEUE__uninitialized_copy_a*, std::basic_string*, std::basic_string >new_allocator_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE5eraseESt23_Rb_tree_const_iteratorISsES7__ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZN7testing8internal20ExitedUnsuccessfullyEineedle_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE4sizeEv_ZN7testing7MessagelsEPKw_Bit_iterator_ZN9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmIEi_ZNK7testing8UnitTest16total_test_countEvper_thread_test_part_result_reporter_fseek~DeathTestFactory_ZN7testing18TestEventListenersC2Evbasic_stringstream, std::allocator >ptrdiff_t_ZN7testing8internal14ShouldUseColorEb_ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EEset, std::allocator >_Distance_archF_OWNER_PIDwmemmove~TestResultset_outcome__destroy__alloc_traits >_ZNK9__gnu_cxx17__normal_iteratorIPcSsEmiEi_ZSt24__throw_out_of_range_fmtPKczbasic_iostream_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_GetLastErrnoDescriptionwcrtombwstrclear_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE3endEv_ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE9constructEPS4_RKS4_failure_ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE10deallocateEPS4_j__check_facet >_ZN7testing8internal17TestEventRepeater18OnTestProgramStartERKNS_8UnitTestE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEplEi_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv__espins_ZNSsaSEPKcdefault_result_printer_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEplEi_ZNSbIwSt11char_traitsIwESaIwEE3endEvrm_eo_ZN7testing8TestCase19ClearTestCaseResultEPS0_operator<< _ZNSs14_M_replace_auxEjjjcWriteToShardStatusFileIfNeeded_Rep_baseenv_varvalue_holderfirst_test_info_ZNSspLEckPrintTimeFlag_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE6insertESt23_Rb_tree_const_iteratorIS1_ERKS1__ZN7testing10TestResult20ClearTestPartResultsEv__copy_move_backward_anew_allocator, std::allocator > >MSG_FINreverse_iterator<__gnu_cxx::__normal_iterator > > >st_atim_ZN7testing11Environment5SetUpEvst_dev_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmIEi__is_signedcountsCloseConnection__state_ZNKSt3setISsSt4lessISsESaISsEE4sizeEv_ZN7testing18TestEventListeners6AppendEPNS_17TestEventListenerEfirst_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE15_M_erase_at_endEPS2__ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjjInit_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE7pointerEvGetTestCaseName_ZNKSt14_Bit_referenceeqERKS__ZNKSbIwSt11char_traitsIwESaIwEE5emptyEvMSG_CTRUNC__normal_iterator > >_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEptEv__alloc_traits >_ZN7testing8internal2REaSERKS1__ZN7testing8internal12UnitTestImpl17gtest_trace_stackEvnum_failuresenvironments_Delete__copy_move_b_M_insert_ZN9__gnu_cxx13new_allocatorIwE10deallocateEPwj_ZN7testing8internal10scoped_ptrIKSsEaSERKS3__ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE7destroyERS4_PS3_PrintTestPartResult__copy_move_backward_a2*, std::basic_string*>_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11equal_rangeERKSsgtest_ar__Identity, std::allocator > >AlwaysTrueoperator<< >set_current_test_infoTEST_DID_NOT_DIEwcscollopenmode_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_leftmostEvvalue_~TestPropertyoperator!= >_ZN7testing8internal27FormatTimeInMillisAsSecondsEx_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13_Rb_tree_implIS3_Lb0EE13_M_initializeEv__last_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEdeEv_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEptEv_ZNK7testing8internal12UnitTestImpl30reportable_disabled_test_countEvOnTestCaseStart__prioritydeath_test_style_kCatchExceptionsFlag_ZNSs12_S_constructEjcRKSaIcE__addressofuninitialized_copy*>ForkingDeathTestdeath_test_factory_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE8max_sizeERKS3_OsStackTraceGetterInterface_ZNSs7_M_moveEPcPKcj__copy_move_backward_a_ZNSt18_Rb_tree_node_base10_S_minimumEPKS_ParameterizedTestCaseRegistry_ZNSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE13_M_deallocateEPS3_j__time_t_ZN7testing8internal17StreamingListener20AbstractSocketWriteraSERKS2_signumMutexpathname__miter_base*>_ZN7testing8TestCase3RunEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_jj_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_S_valueEPKSt18_Rb_tree_node_baseFloatingPoint_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing17TestEventListenerEEE17_S_select_on_copyERKS4_fgetwc_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4swapERS5__ZN7testing8internal12UnitTestImpl18GetMutableTestCaseEi_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4rendEv_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6rbeginEv_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4dataEvrelease_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZNK7testing8internal12UnitTestImpl26successful_test_case_countEvnew_allocator_ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEiParseBoolFlagParseInt32OnTestStartread_fd__ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEistrstrcolor__ZN9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmmEv_ZNSs6resizeEj__vtbl_ptr_typeGTestIsInitialized_Is_pod_comparator__destroy_ZN7testing19FLAGS_gtest_shuffleEGetInjectableArgvsFormatDeathTestOutput_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11equal_rangeERKSs_ZNSbIwSt11char_traitsIwESaIwEEaSEwunary_function, std::allocator >, std::basic_string, std::allocator > >puts_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_S_leftEPSt18_Rb_tree_node_base__gnuc_va_listdeath_test_factory__ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_beginEv__builtin_memmoveGetOrCreateValue_ZNK7testing8internal8FilePath15DirectoryExistsEvThreadLocal_ZN9__gnu_cxx14__alloc_traitsISaIPcEE7destroyERS2_PS1__ZNKSt6vectorIN7testing14TestPartResultESaIS1_EE3endEv_ZNSt23_Rb_tree_const_iteratorIPKcEmmEiAbortSingleFailureChecker_ZN7testing11IsSubstringEPKcS1_RKSsS3__flags2_ZNSt23_Rb_tree_const_iteratorIPKcEmmEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE21_M_get_Node_allocatorEv~HasNewFatalFailureHelper_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE8max_sizeERKS4__flagsthisbasic_ostream >_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4dataEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEplEiclose_fd_ZN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEikDeathTestInternalErrorrandom___is_move_iterator_ZN7testing8internal30ReportFailureInUnknownLocationENS_14TestPartResult4TypeERKSs_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE3endEv_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE7addressERKS4__ZNK7testing8UnitTest6FailedEv_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE8allocateEjPKvtest_casesrcfile__miter_basewmemchr_ZN7testing18TestEventListeners8repeaterEvIsPrintableAsciiGetTypeId_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEmiEiiswctypethis_is_TEST_ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv_Rb_tree_iterator__builtin_strlen_ZNKSs4copyEPcjj_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE10deallocateERS4_PS3_j__is_normal_iterator, std::allocator >*>__uninitialized_copy_ZN7testing8internal15NoExecDeathTest10AssumeRoleEv_ZN7testing15AssertionResultaSERKS0__ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEplEicatch_exceptions__ZN7testing11Environment5SetupEv__ssize_t__niter_base<__gnu_cxx::__normal_iterator > >_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE8max_sizeEv_InIteratorseedgtest_msgallocator_ZN7testing8internal16UniversalPrinterIxE5PrintERKxPSo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_chdirsival_intstrtod_ZNK7testing8TestCase21successful_test_countEvStreamableToString_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjReportInvalidTestCaseTypeUnsignedChar_ZN7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEE7releaseEv_ZN7testing8internal17StreamingListenerD2Ev_ZNKSs16find_last_not_ofEcjPatternMatchesString_ZN7testing15AssertionResultlsINS_7MessageEEERS0_RKT_gtest_retval_ZN7testing8internal18StringFromGTestEnvEPKcS2_Fromstrlen_ZN7testing8internal13FloatingPointIfE15ReinterpretBitsEjstack_top_ZN7testing8internal38DefaultPerThreadTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultEPrintOnOneLinebasic_iostream >_ZNKSbIwSt11char_traitsIwESaIwEE4findEwj_ZNSs6insertEjjc__fmtkFractionBitMaskUnitTestImpl_ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi_ZNSbIwSt11char_traitsIwESaIwEE4_Rep13_M_set_leakedEv_ZN7testing8internal29ParameterizedTestCaseRegistry13RegisterTestsEv_ZNKSt6vectorIPcSaIS0_EE4rendEvkSuccessOutputXmlCDataSectionGetCapturedStreamRemoveFileName__uninitialized_move_if_noexcept_a >_ZNSbIwSt11char_traitsIwESaIwEE2atEj_ZNSbIwSt11char_traitsIwESaIwEEixEj_ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKw_ZNSt23_Rb_tree_const_iteratorISsEmmEiparse_success_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwS8_DeathTestAbort_ZNSt23_Rb_tree_const_iteratorISsEmmEvcoloncolor__uninitialized_move_if_noexcept_a >_vptr.Environment_Destroybasefield_ZNSt11char_traitsIcE7compareEPKcS2_j_ZN7testing8internal14CmpHelperSTREQEPKcS2_S2_S2__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE4backEvreverse_iterator<__gnu_cxx::__normal_iterator > > >RemoveDirectoryName_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperES3__Rep_typeis_disabled~basic_ios__niter_base_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE13_M_deallocateEPS2_jcontentShouldRunTestReportTestPartResultcurrent_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE2atEj__normal_iterator > >_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEmiEi_ZNKSt23_Rb_tree_const_iteratorISsEdeEv_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE6rbeginEv_M_fill_insertbasic_stringbufAddTestName_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEppEvnothrow_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmiEiis_spawnedoperator<< _ZN7testing8internal23DefaultDeathTestFactoryD0Evvector >_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2_Argvoperator<< _ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestPartResultERKNS_14TestPartResultE_ZSt19__throw_logic_errorPKc__prec__pred_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_beginEv_ZN7testing4Test16TearDownTestCaseEv_ZNSt12_Vector_baseIPN7testing8TestInfoESaIS2_EE19_M_get_Tp_allocatorEvSecretSOCK_DCCP_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEptEv_Ios_OpenmodeDelete_ZN7testing4Test5SetUpEv_ZN7testing18TestEventListenersaSERKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_put_nodeEPSt13_Rb_tree_nodeISsE_ZNSs6appendEPKc_S_cur_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE14_M_range_checkEjshowposSetUpTestCasestdin__pthread_slist_t_ZNKSs4_Rep12_M_is_sharedEv_ZNSt11char_traitsIcE12to_char_typeERKi_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE12_M_check_lenEjPKc_ZNSolsEPFRSt8ios_baseS0_E_ZN7testing15AssertionResultlsEPFRSoS1_E_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseEPKS1_S9_GetFileSize_ZNSt6vectorISsSaISsEE4rendEv_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE8allocateERS3_j_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc_ZNKSt23_Rb_tree_const_iteratorISsEeqERKS0__ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZNK9__gnu_cxx13new_allocatorIiE8max_sizeEvvfwscanf_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwjj_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1_reverse_iterator<__gnu_cxx::__normal_iterator > > >_ZSt17__throw_bad_allocv_ZNKSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE13get_allocatorEvdummyatoll_ZNSo9_M_insertImEERSoT_num_selected_tests_ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwjjoperator<< _ZNSt12_Vector_baseIiSaIiEE17_M_create_storageEjfind<__gnu_cxx::__normal_iterator*, std::vector > >, std::basic_string >_ZNKSt6vectorIiSaIiEE4backEvbuffershort intsnprintf_ZNKSbIwSt11char_traitsIwESaIwEE5c_strEvwmemcpy~FilePathcurrent_test_info_ZNK7testing8internal13DeathTestImpl8write_fdEvForEach, void (*)(testing::Environment*)>_ZN7testing8internal13FloatingPointIdE15ReinterpretBitsEy_Iter_basefind_last_not_of_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6rbeginEv_ZNK7testing10TestResult12elapsed_timeEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_rootEv_ZNKSt6vectorIPN7testing8TestCaseESaIS2_EE3endEvuninitialized_copy<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*>ThreadLocalValueHolderBase__normal_iterator, std::allocator > >sa_flagstestoperator<< GetCapturedStderr_ZN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEppEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_upper_boundEPKSt13_Rb_tree_nodeISsES9_RKSs_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refdataEvNoExecDeathTest_ZNSt6vectorISsSaISsEE5beginEv_ZNKSs8_M_checkEjPKc_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6resizeEjS3__vptr.DeathTestFactorybasic_istream_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE11_M_allocateEj_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEixEi__exchange_and_add_dispatchReseed_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEptEvcopy_backwardconstructParseFlagValue_ZN7testing8internal24XmlUnitTestResultPrinterD0Ev_ZNK9__gnu_cxx17__normal_iteratorIPKcSsE4baseEv_Construct, std::basic_string >_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE2atEj_ZNSbIwSt11char_traitsIwESaIwEE4rendEv_ZN7testing8internal18CmpHelperSTRCASENEEPKcS2_S2_S2__ZN7testing8internal17GetCapturedStdoutEv__iterator_category<__gnu_cxx::__normal_iterator > >PushGTestTrace_ZN7testing8internal17TestEventRepeater24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN9__gnu_cxx13new_allocatorIcE8allocateEjPKvAssertionResult_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5beginEvuninitialized_copy_ZN9__gnu_cxx14__alloc_traitsISaISsEE17_S_select_on_copyERKS1_operator- >dup2rbegin__gthread_active_pnames_ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKwj_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEE4baseEv_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE12_Vector_impl12_M_swap_dataERS5_CountIf, bool (*)(const testing::TestCase*)>_sigchldoutput_file_vptr.ParameterizedTestCaseInfoBase__uid_tGTEST_SHARD_STATUS_FILEerrorPrintXmlTestCase_ZN9__gnu_cxx17__normal_iteratorIPKcSsEppEicode_point_ZNSs6assignERKSsjj_ZNKSt6vectorIiSaIiEE4sizeEv_ZNSt10_Iter_baseIPN7testing8internal9TraceInfoELb0EE7_S_baseES3_mon_thousands_sep_ZN7testing8UnitTest13PopGTestTraceEv_ZN9__gnu_cxx17__normal_iteratorIPKcSsEppEv_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EEixEj_ZNK7testing18TestEventListeners22default_result_printerEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEmiEiLogToStderrwcscatUponLeavingGTest_Vector_base >_ZNSo9_M_insertIxEERSoT__ZN7testing8internal9DeathTest27set_last_death_test_messageERKSs_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_MutexLock_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE4backEvrepeater__Const_Base_ptroperator!= >getcwdSendLn_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT__ZNSt3setISsSt4lessISsESaISsEEaSERKS3_set_os_stack_trace_getter_ZNKSt23_Rb_tree_const_iteratorISsEneERKS0__ZN7testing8internal15UnitTestOptions27GetAbsolutePathToOutputFileEv_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEE4baseEv__normal_iterator > >pair, bool>repeaterbasic_stringstatus_valuePrintTestPartResultToStringa_name_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZNKSsixEj_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1__ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv_ZN7testing8internal21UniversalTersePrinterIxE5PrintERKxPSo_ZN7testing8internal14GetThreadCountEvreplace_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EjwRKS1_XmlUnitTestResultPrinter_ZNK9__gnu_cxx17__normal_iteratorIPcSsEptEv_ZN7testing8internal2RE4InitEPKc_ZNK9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE7addressERKS3_AppendUserMessageUniversalTersePrinter_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE13get_allocatorEv_ZNKSs7compareEjjPKc__suseconds_t_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmiEi_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minE_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE5clearEvshuffle_RandomAccessIterator_ZN9__gnu_cxx14__alloc_traitsISaIiEE7destroyERS1_Pi_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIS3_S2_EES6_PrintColorEncoded_M_is_sharediterator_traits_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8internal29ParameterizedTestCaseInfoBaseESt6vectorIS4_SaIS4_EEEmiEi_ZNSt6vectorIiSaIiEE18_M_fill_initializeEjRKi_ZNSt6vectorISsSaISsEE14_M_fill_assignEjRKSsscoped_ptr_ZN7testing8internal17kStackTraceMarkerE_ZN7testing8internal12UnitTestImpl11GetTestCaseEPKcS3_PFvvES5_premature_exit_filepath__S_constructparameterized_test_registry_ZN7testing8internal6Random8GenerateEj_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEi_Vector_baseiterator_traits<__gnu_cxx::__normal_iterator > > >_ZN7testing18FLAGS_gtest_filterE_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmiEi__copy_m_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEppEva_message__are_same_ZNSt6vectorIPcSaIS0_EE18_M_fill_initializeEjRKS0_TestCaseNameIs_M_insert_M_mask_ZN7testing8internal10scoped_ptrIKSsE7releaseEvis_reportableTestReportableDisabled_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEE4baseEvreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE10deallocateEPS3_j_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj_ZN7testing4Test3RunEvIsSubstring_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tagallocator_typeSetUp__comp_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE7pointerEvpthread_mutex_lockassignrandom_seed__ZN7testing8internal15UnitTestOptions15GetOutputFormatEv_ZSt4cerr_ZNSbIwSt11char_traitsIwESaIwEE7_M_dataEPwfilefillCurrentOsStackTraceExceptTop_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZN7testing8internal35DefaultGlobalTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE17_M_create_storageEj_ZN7testing15AssertionResultlsIPKcEERS0_RKT__ZNSt12_Vector_baseIPcSaIS0_EE13_M_deallocateEPS0_j_exit_ZN7testing11IsSubstringEPKcS1_PKwS3_DistanceBetweenSignAndMagnitudeNumbers_ZNK7testing14TestPartResult6failedEvImplicitlyConvertible_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE6assignEjRKS2__ZN7testing8internal27PrettyUnitTestResultPrinter16PrintFailedTestsERKNS_8UnitTestE_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE12_M_check_lenEjPKcerror_num_M_initialize_dispatch10regmatch_t_ZN7testing17TestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing19TestPartResultArray6AppendERKNS_14TestPartResultE_S_red~ThreadLocalValueHolderBase_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE10_S_on_swapERS3_S5__ZNK9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7addressERS2__ZN7testing10TestResult16set_elapsed_timeExarguments_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxEoperator!= >_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5beginEvgtest_error_ZNSbIwSt11char_traitsIwESaIwEEpLERKS2__ZN7testing8internal20DoubleNearPredFormatEPKcS2_S2_ddd_ZN7testing8internal8GTestLogaSERKS1__ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKcClearTestCaseResult_M_insert_aux~TraceInfo_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_state__S_adjustfield~AssertHelperData_ZNSt10_Iter_baseIPPN7testing8TestInfoELb0EE7_S_baseES3_ai_protocol_ZN7testing8internal16UniversalPrinterISbIwSt11char_traitsIwESaIwEEE5PrintERKS5_PSoTestInfo_Iter_base_vptr.OsStackTraceGetterInterfacefind_ZN7testing8internal8FilePath12MakeFileNameERKS1_S3_iPKc_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE17_S_select_on_copyERKS4__ZN7testing8internal8FilePath13GetCurrentDirEvparsedgetenv_ZNSt17_Rb_tree_iteratorIPKcEppEiParseGoogleTestFlagsOnlyImplintercept_mode__ZN7testing8internal10SkipPrefixEPKcPS2__Bit_iterator_base_ZNSt17_Rb_tree_iteratorIPKcEppEv_ZNK7testing12TestProperty5valueEv__wide_IO_read_endHandleExceptionsInMethodIfSupported_ZNK7testing8internal10scoped_ptrINS0_17StreamingListener20AbstractSocketWriterEEptEvwcschrIsSubstringPred >__builtin_va_list_ZNKSt3setISsSt4lessISsESaISsEE13get_allocatorEv__cxa_allocate_exceptionoperator new []val2_ss_ZNSt14_Bit_referenceaSEbpathname__ZNKSt6vectorISsSaISsEE5emptyEvstream_result_to__copy_m_S_minimumnew_allocator_ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE3getEvIsXDigit_IO_FILE_ZN7testing8internal24InternalRunDeathTestFlagaSERKS1_uninitialized_copy_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4rendEv_ZN7testing8internal24GetCurrentExecutableNameEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE2atEj__statbufis_previous_hex_ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13get_allocatorEvservinfo__false_typewcsrchr__uninitialized_move_if_noexcept_a*, std::basic_string*, std::allocator > >_ZN9__gnu_cxx13new_allocatorIPN7testing8TestCaseEE8allocateEjPKv__is_null_pointerbiased1biased2_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_jValueHolder_ZNK7testing8internal13DeathTestImpl9statementEv_ZNSt6vectorISsSaISsEEaSERKS1_PrintWideStringTo_Vector_base >bool_valuepattern_ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE_ZNKSt17_Rb_tree_iteratorISsEptEv_ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZNKSt13_Bit_iteratorplEi__is_move_iterator__alloc_traits >IsATTY~basic_stringstream_ZN9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7destroyEPS2__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE13_M_clone_nodeEPKSt13_Rb_tree_nodeISsE_M_const_castlldiv_ZN7testing8internal9MutexBase4LockEv_ZN7testing8internal12UnitTestImpl41GetTestPartResultReporterForCurrentThreadEvstatus_ch_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_M_endEvSuppressEventForwardingoperator<< >adjustfield_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE14_M_fill_assignEjRKS1__ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjwctomb_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6_S_keyEPKSt18_Rb_tree_node_baseIsSubstringImplsi_utimeUniversalTersePrinter_Key_compare_ZN7testing8internal6String15ShowWideCStringEPKwswscanfwcscspn_ZN7testing8internal9DeathTest6PassedEbhaystack_exprtest_case_nameformatiterator_traitsDISABLED_*:*/DISABLED_*Clear_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2___uninitialized_copy_a_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEmiEi_Funct_ZNK7testing8internal13FloatingPointIfE4bitsEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEppEv__uninit_copy<__gnu_cxx::__normal_iterator >, testing::internal::TraceInfo*>_S_showbase~basic_istreamconstruct_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE5emptyEvsigval_t_ZNKSt14_Bit_referencecvbEvsi_bandsigvalGetUnitTestImpl_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE8allocateERS4_jwcscmpsyntax_ValueT_ZNK9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEptEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_M_insert_EPSt18_Rb_tree_node_baseS7_RKSsiterator_traitsGetTestCaseTypeIdstrerrorstderr_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE5clearEv_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2__ZNK7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEptEvstreamsize_S_max_size_lock_ZN7testing7MessagelsEb__uninit_copy_ZN9__gnu_cxx13new_allocatorIPcE8allocateEjPKv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEE4baseEvInterceptMode10__sigset_t_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE5frontEv_ZNSs12_S_empty_repEv_ZNSs6assignEjc_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE8pop_backEv_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE8allocateEjPKvnum_disabled_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EEaSERKS4__ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE9push_backERKS2__ZNSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEjRKS2__ZN7testing8internal17StreamingListener12SocketWriter4SendERKSs_ZNSolsEPKv_ZNK7testing8internal29ParameterizedTestCaseInfoBase15GetTestCaseNameEv_ZN7testing8internal17TestEventRepeater27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal13DeathTestImpl11set_read_fdEi_ZNK7testing15AssertionResultntEvGetCurrentDir__is_normal_iterator_ZNSt18_Bit_iterator_base7_M_incrEivswscanf_ZNSo9_M_insertIdEERSoT__ZNK7testing14TestPartResult7summaryEv__normal_iterator > >_ZNSs5beginEvkMaxStackTraceDepth_ZNSs13_S_copy_charsEPcPKcS1_IGNORE_SHARDING_PROTOCOL_chainDefaultDeathTestFactoryfor_each<__gnu_cxx::__normal_iterator >, void (*)(testing::TestInfo*)>_ZNK7testing8TestCase16total_test_countEv_ZNSt6vectorISsSaISsEE4swapERS1__ZNSs6rbeginEvuninitialized_copy_ZNK7testing8UnitTest12elapsed_timeEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEE4baseEv_ZN7testing8internal27PrettyUnitTestResultPrinter13PrintTestNameEPKcS3_wcstollwcsxfrm_ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_jdistance_ZN9__gnu_cxx13new_allocatorIN7testing12TestPropertyEE7destroyEPS2__ZNKSt9_IdentityISsEclERSsleftfmtflagskTestsuitewcscpy_S_maximum_ZNKSt3setISsSt4lessISsESaISsEE10value_compEv_ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE12_M_check_lenEjPKc_ZN7testing11IsSubstringEPKcS1_S1_S1_fflushpair, std::allocator > >, std::_Rb_tree_const_iterator, std::allocator > > >vectorst_blksize_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE6rbeginEvkListTestsFlagreverse_iterator, std::allocator > > >_ZNK7testing12TestProperty3keyEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEE4baseEv_M_assign_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refcopyEv_ZN9__gnu_cxx14__alloc_traitsISaISsEE10deallocateERS1_PSsj_ZNKSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE19_M_get_Tp_allocatorEv~PrettyUnitTestResultPrintersa_handlerg_linked_ptr_mutex_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_rootEv_ZNKSt6vectorIPN7testing11EnvironmentESaIS2_EE4rendEvkMaxRandomSeed_ZN7testing8internal12UnitTestImplaSERKS1_PrintAsCharLiteralTo_ZN7testing8internal10AlwaysTrueEv__mode_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlTestCaseEPSoRKNS_8TestCaseE_IO_read_ptrset, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > > >_ZN7testing13PrintToStringIxEESsRKT__ZN7testing8internal12UnitTestImpl6randomEvconstruct_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEi_ZNK9__gnu_cxx17__normal_iteratorIPKN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEptEvfalse_type_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4dataEv_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EEixEj_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEmmEvHandleSehExceptionsInMethodIfSupported_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEjwRKS1__M_incr_ZNK7testing8internal13DeathTestImpl5regexEv_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEptEv_ZN7testing8TestCase11AddTestInfoEPNS_8TestInfoEPrintBytesInObjectToImpl~allocatorrandom_seed_flag_ZN7testing8internal9DeathTest5AbortENS1_11AbortReasonEshowbase__copy_move_a_ZN7testing4Test19HasSameFixtureClassEvFLAGS_gtest_throw_on_failureAlwaysFalsekSpecialEscape_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEdeEv_Vector_base >_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing11EnvironmentEEE17_S_select_on_copyERKS4_rebind >_ZN7testing8UnitTest11GetInstanceEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE10_S_minimumEPSt18_Rb_tree_node_base_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEdeEv_ZN9__gnu_cxx13new_allocatorIPN7testing17TestEventListenerEE7destroyEPS3_new_allocator_ZN7testing8internal12UnitTestImpl17current_test_infoEv_ZNSt3setISsSt4lessISsESaISsEE6insertERKSs_ZNKSs12find_last_ofEPKcjBits__uninitialized_copy_S_fixed_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_RKS2_UnitTest_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE4backEv_ZNK9__gnu_cxx17__normal_iteratorIPKcSsEdeEvmax_size_ZN7testing8internal20SingleFailureCheckeraSERKS1__Traits_ZN7testing8internal9DeathTestaSERKS1_default_valuesigned char_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_get_nodeEvisattybidirectional_iterator_tag_ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKwj_ZN7testing8internal27PrettyUnitTestResultPrinter20OnTestIterationStartERKNS_8UnitTestEiHandleExceptionsInMethodIfSupportedFLAGS_gtest_output_ZN7testing8internal10scoped_ptrINS0_16DeathTestFactoryEEaSERKS3_FloatingPoint__copy_m_ZN9__gnu_cxx14__alloc_traitsISaIPcEE10_S_on_swapERS2_S4_wcspbrka_statement_ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEixEioperator<< Sendsubstr__ZN7testing11IsSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7_negation_ZNSt11char_traitsIcE2eqERKcS2__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEixEi_ZNK7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEEptEvHandleExceptionsInMethodIfSupported_M_refdataendl >_ZNK7testing8TestCase4nameEv__throw_bad_alloc_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11_M_leftmostEvprint_timeregcomp_ZNSt10_Iter_baseIPSsLb0EE7_S_baseES0__ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7addressERKS2_scoped_ptrChar_kill_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE7addressERKS2_severity_pthread_mutex_destroy_ZNSt6vectorIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE6insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEjRKS3__ZNSolsEPFRSoS_Evprintf_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE12_Vector_impl12_M_swap_dataERS4_operator<< _sbuf_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE11equal_rangeERKS1_FLAGS_gtest_catch_exceptions_ZN7testing8internal27PrettyUnitTestResultPrinter24OnEnvironmentsSetUpStartERKNS_8UnitTestEdef_optional_ZNSt6vectorIiSaIiEE5frontEvtruncreporter_ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEjjRKS1__ZN7testing8internal18g_linked_ptr_mutexE_ZNSt6vectorIPcSaIS0_EE4rendEv_ZN7testing8internal18OsStackTraceGetterD2Ev_ZNKSbIwSt11char_traitsIwESaIwEE7compareERKS2___throw_bad_cast__uninitialized_copy_a_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6assignEjRKS2_strtoull__ostream_insert >fwprintf_Destroy__is_normal_iterator_ZN9__gnu_cxx14__alloc_traitsISaIN7testing14TestPartResultEEE7destroyERS3_PS2__ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestElong int_ZNSt11char_traitsIcE6assignEPcjc_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE7_M_copyEPKSt13_Rb_tree_nodeIS1_EPS9_ToUppervector >_ZN7testing13PrintToStringIPKwEESsRKT_operator-*, std::vector > >default_xml_generatorFormatHexIntstatus_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISsEEE10_S_on_swapERS3_S5__ZNK9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorIiSaIiEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPiS1_EEjRKi_ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE7releaseEv_ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE8allocateEjPKv_ZN7testing4Test8TearDownEvarray_ZNKSt12_Vector_baseIPN7testing8internal29ParameterizedTestCaseInfoBaseESaIS3_EE19_M_get_Tp_allocatorEv_ZNSt6vectorISsSaISsEE6insertEN9__gnu_cxx17__normal_iteratorIPSsS1_EEjRKSs_ZNKSs7_M_dataEv_ZNSt12_Vector_baseIiSaIiEE13_M_deallocateEPijiteratoroperator!= >__destroy_ZN7testing8internal18StreamableToStringIxEESsRKT_socket_writer__ZN9__gnu_cxx17__normal_iteratorIPKcSsEmmEidescriptionGetDefaultFilter_ZN9__gnu_cxx17__normal_iteratorIPKcSsEmmEvbasic_string, std::allocator >_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEplEi_ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEvIsContainerTest_ZNSs4_Rep13_M_set_leakedEvreverse_iterator >_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_sharedEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8___uninit_copy*, std::basic_string*>_ZN7testing8internal13DeathTestImpl6PassedEb_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4backEv_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE7pointerEv_ZN7testing8internal5MutexaSERKS1_no_sub_ZNSs6insertEjRKSs_Rb_tree, std::allocator >, std::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >_ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEjjPKwj_ZN7testing8internal10scoped_ptrISsEaSERKS2__ZNSt6vectorIPcSaIS0_EE5clearEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE24_M_get_insert_unique_posERKS1__ZN7testing8internal17TestEventRepeater20OnTestIterationStartERKNS_8UnitTestEi_S_do_ituninitialized_copySOCK_NONBLOCK_ZNK9__gnu_cxx13new_allocatorIPN7testing8TestInfoEE8max_sizeEvRunSetUpTestCase_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE8pop_backEv_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE3endEv_ZN7testing8UnitTestD0Ev_ZN7testing8internal31GetCurrentOsStackTraceExceptTopEPNS_8UnitTestEi_ZN7testing8internal9DeathTest6CreateEPKcPKNS0_2REES3_iPPS1_random_seed_ZNK9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS2_SaIS2_EEEmiEiFilePath_Atomic_wordimpl_Format_ZNK7testing18TestEventListeners21default_xml_generatorEvos_stack_trace_getter__ZN9__gnu_cxx13new_allocatorIPcE10deallocateEPS1_j_ZN7testing17TestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE__is_normal_iterator_ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultEpipe_ZNKSt6vectorIPcSaIS0_EE4dataEvsi_signo_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZNK9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEptEvCreateSOCK_PACKETiterator_S_keyTestRoleless, std::allocator > >allocator_KeyOfValue_ZN7testing8internal15UnitTestOptions20PatternMatchesStringEPKcS3__ZNKSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE19_M_get_Tp_allocatorEvwprintf_ZNK9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEE4baseEvvector >_ZN9__gnu_cxx17__normal_iteratorIPKN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEpLEi_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE14_M_fill_assignEjRKS2_operator- >__normal_iterator > >floatdeath_test_use_forktest_cases__ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEmmEv_ZNK9__gnu_cxx17__normal_iteratorIPN7testing8internal9TraceInfoESt6vectorIS3_SaIS3_EEEptEv_ZNSt6vectorISsSaISsEE4dataEv__needlenum_chars_M_repBiggestInt_ZN7testing7FloatLEEPKcS1_ff_Iter_base<__gnu_cxx::__normal_iterator > >, true>set_child_pid__copy_mFLAGS_gtest_list_testsmbrlen_ZNSs9push_backEc_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEiGetParam()re_pattern_buffer_ZN7testing4TestD2Ev_ZNK7testing8internal13FloatingPointIfE13exponent_bitsEvssize_t_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing17TestEventListenerESt6vectorIS3_SaIS3_EEEppEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNKSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE13get_allocatorEvargc_Ios_Fmtflags_M_replace_aux_ZN7testing8internal7PrintToEPKcPSo~CapturedStream__niter_baseresize_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZNSt11char_traitsIcE11to_int_typeERKc_ZN7testing14ExitedWithCodeaSERKS0_argvoperator<< _ZN7testing32ScopedFakeTestPartResultReporterC2EPNS_19TestPartResultArrayE_ZNSt6vectorISsSaISsEE15_M_erase_at_endEPSserrors_ZNKSt6vectorIPN7testing8TestInfoESaIS2_EEixEj_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEvDerivedforever_ZNK7testing19TestPartResultArray17GetTestPartResultEi_ZNKSs17find_first_not_ofEcjseconds_IIter__niter_base_ZN7testing7MessageaSERKS0___elision_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE12_M_erase_auxESt23_Rb_tree_const_iteratorIS1_E_ZNSt6vectorIiSaIiEE6resizeEji_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE11_M_allocateEjUrlEncode_ZNK9__gnu_cxx13new_allocatorIcE7addressERc_ZNSt10_Iter_baseIN9__gnu_cxx17__normal_iteratorIPPN7testing17TestEventListenerESt6vectorIS4_SaIS4_EEEELb1EE7_S_baseES9_CurrentStackTrace_ZN7testing8internal16DeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE__data_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEdeEvtest_part_resultsTestCaseFaileddiv_t__normal_iterator > >reverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt17_Rb_tree_iteratorIPKcEmmEi_ZN7testing4Test11DeleteSelf_EvStrDup__copy_move_ZNK7testing8TestInfo4nameEv_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSs16_S_construct_auxIPKcEEPcT_S3_RKSaIcESt12__false_type_ZNSt17_Rb_tree_iteratorIPKcEmmEv__dynamic_cast__is_move_iterator~XmlUnitTestResultPrinterBasicNarrowIoManip__list_ZNSt9basic_iosIcSt11char_traitsIcEE4fillEctv_nsec_ZN7testing38FLAGS_gtest_show_internal_stack_framesEUnlock_ZNK7testing10TestResult15HasFatalFailureEvpthread_setspecific__dnewinput_iterator_tag~ParameterizedTestCaseRegistryprinted_test_case_name_M_start_ZNK9__gnu_cxx13new_allocatorIwE8max_sizeEvusedSkipCommaTestPartResultReporterInterface__numeric_traits_integer_ZNSt6vectorIN7testing14TestPartResultESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZN7testing8TestCase14TestReportableEPKNS_8TestInfoEUInt_ZNK7testing8internal13FloatingPointIfE6is_nanEv_ZNK9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEplEioperator!= >_ZNK9__gnu_cxx17__normal_iteratorIPN7testing14TestPartResultESt6vectorIS2_SaIS2_EEEixEidefault_xml_generator__ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE_ZNSt6vectorIPN7testing8TestInfoESaIS2_EEixEjstackset_up_tc_TEST_F_namesecond_ZNSsaSERKSsis_disabled_OnEnvironmentsTearDownEnd~SocketWriter_Num_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE15_M_erase_at_endEPS2__ZNKSt6vectorIiSaIiEE12_M_check_lenEjPKc_ZN9__gnu_cxx14__alloc_traitsISaIiEE10_S_on_swapERS1_S3__ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Evdashstatement_ZN7testing22FLAGS_gtest_print_timeE_ZNSt12_Vector_baseIN7testing12TestPropertyESaIS1_EE19_M_get_Tp_allocatorEv_ZNKSt13_Bit_iteratormiEiExitedWithCodehintstm_gmtoff_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestInfoEEE17_S_select_on_copyERKS4__ZN7testing8internal14CmpHelperSTRNEEPKcS2_PKwS4__ZNKSt3setISsSt4lessISsESaISsEE3endEvoperator<< _ZN7testing7MessageC2ERKS0_UniversalPrintArrayst_blocks_ZN7testing8internal12UnitTestImpl25set_os_stack_trace_getterEPNS0_27OsStackTraceGetterInterfaceEpthread_tprefix_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8internal29ParameterizedTestCaseInfoBaseEEE8allocateERS5_jDeathTestThreadWarningdata_ZN9__gnu_cxx17__normal_iteratorIPPcSt6vectorIS1_SaIS1_EEEppEv_ZNKSs4sizeEv__miter_base_ZN7testing8internal17StreamingListener20AbstractSocketWriter4SendERKSsallocator > >_ZNSt6vectorIPcSaIS0_EE9push_backERKS0_ai_addrlenkNonFatalFailure_ZNKSbIwSt11char_traitsIwESaIwEE2atEj_ZN7testing8internal21StackLowerThanAddressEPKvPbStat_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISsERKSs_ZNSt17_Rb_tree_iteratorISsEppEic_str_ZN7testing8internal13CaptureStreamEiPKcPPNS0_14CapturedStreamEsi_statusParseGoogleTestFlagsOnly_ZNK7testing8UnitTest19disabled_test_countEv__niter_baseoperator<< _ZNKSt6vectorIPN7testing8TestInfoESaIS2_EE2atEjg_captured_stdout_ZN9__gnu_cxx14__alloc_traitsISaIPKcEE8max_sizeERKS3__ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestEdeath_test_style_ZNKSs15_M_check_lengthEjjPKc_ZN9__gnu_cxx14__alloc_traitsISaIPN7testing8TestCaseEEE10_S_on_swapERS4_S6__ZNK9__gnu_cxx13new_allocatorIwE7addressERwoperator new_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEi__class_type_info_ZNK9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEptEvbadbit_ZN7testing8TestInfoD2EvGetTestInfo_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEmmEvruntime_errorEndsWithCaseInsensitivevector >__countGTestMutexLocksam1ostreamsam2long_value_ZN7testing8internal8GTestLogD2Ev_Vector_base >_ZN7testing8internal18GetInjectableArgvsEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEppEi_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestInfoESt6vectorIS3_SaIS3_EEEpLEi_ZNKSt6vectorIN7testing12TestPropertyESaIS1_EE4rendEvrebind_ZN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEppEv_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE7reserveEj_ZNSt12_Vector_baseIPN7testing8TestCaseESaIS2_EE13_M_deallocateEPS2_j_ZNSt12_Vector_baseIN7testing14TestPartResultESaIS1_EE12_Vector_impl12_M_swap_dataERS4_Setupsuccessful_test_case_countstat_ZNSt6vectorIiSaIiEE4swapERS1_exceptionReadAndInterpretStatusByte_ZN7testing8internal18OsStackTraceGetter19kElidedFramesMarkerEsa_restorerallocator_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE4swapERS5__M_node_ZNSs6assignEPKcj_ZN7testing8internal15GetUnitTestImplEvShuffleTests__iterator_categoryconst_pointer_ZNK9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE7addressERKS4_fgetws_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE13get_allocatorEvrand__cursummaryArrayAsVector<8>int_p_sign_posn_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE5eraseESt23_Rb_tree_const_iteratorIS1_E_ZN7testing8internal12UnitTestImpl11AddTestInfoEPFvvES3_PNS_8TestInfoE_ZNSt6vectorISsSaISsEE5eraseEN9__gnu_cxx17__normal_iteratorIPSsS1_EE_ZN9__gnu_cxx13new_allocatorIPN7testing11EnvironmentEE9constructEPS3_RKS3_GetReservedAttributesForElementmode_ZN9__gnu_cxx13new_allocatorIiE7destroyEPioperator<< _ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4swapERS3_operator<< tm_sec__size_typekMaxParamLength_ZN9__gnu_cxx13new_allocatorIPKcE8allocateEjPKv__static_initialization_and_destruction_0new_allocator_ZN7testing8internal8GTestLogC2ENS0_16GTestLogSeverityEPKciactual_valueoperator<< _ZNSo3putEc_ZNK7testing10TestResult17test_part_resultsEvmessageTraceInfo__normal_iterator > >_ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEiFLAGS_gtest_shuffle_ZNSs7replaceEjjRKSs_ZN7testing8internal17StreamingListener12SocketWriteraSERKS2_new_allocator, std::allocator > > >value_paramArrayAsVector<6>_ZNSs4_Rep9_S_createEjjRKSaIcE__addressof >kValueParamLabel_Destroy_ZdlPv_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE8key_compEv_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwjlist_tests__ZN9__gnu_cxx14__alloc_traitsISaIiEE8max_sizeERKS1_~ValueHolder_ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE11upper_boundERKS1_term_supports_color_Rb_tree_increment_ZNKSt9_IdentityIPKcEclERS1__ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPKcEE9constructEPS4_RKS4__S_base_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2__ZNKSt6vectorIN7testing8internal9TraceInfoESaIS2_EE4dataEv_ZNK7testing8internal12UnitTestImpl21total_test_case_countEv_ZNSt6vectorIPcSaIS0_EEixEj~OsStackTraceGetterkTestTypeIdInGoogleTestdeallocatemask_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE3endEv_Reppbase_ZN7testing8internal14ParseInt32FlagEPKcS2_Pi_ZN7testing8TestCaseC2EPKcS2_PFvvES4_AddTestPartResult__is_normal_iteratorfprintf_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6_M_endEvtotal_part_count_ZNSt12_Vector_baseIN7testing8internal9TraceInfoESaIS2_EE17_M_create_storageEjnot_eofSkipSpacesnot_eolPrintToString_ZNSs4_Rep12_S_empty_repEvmon_decimal_pointcurrent_test_case_operator<< _ZNKSs17find_first_not_ofEPKcjoperator<< vector >unitbuf_ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEjPKcPartialMatchiterator_traits<__gnu_cxx::__normal_iterator > > >in_death_test_child_process~DefaultPerThreadTestPartResultReporter_ZNSs9_M_assignEPcjc_ZNK7testing8internal8FilePath14IsAbsolutePathEv_ZNSt11char_traitsIwE4findEPKwjRS1_ValidateTestPropertyNamereferencerfind_Referencewscanf_ZN7testing8internal12AssertHelperC2ENS_14TestPartResult4TypeEPKciS5___osize_DestroyToPrint_ZNK9__gnu_cxx13new_allocatorIiE7addressERKi_ZN7testing8internal8FilePath9NormalizeEv_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEppEi_ZNKSt6vectorIiSaIiEE5frontEv_ZN7testing8internal24XmlUnitTestResultPrinter26RemoveInvalidXmlCharactersERKSs__are_same_ZNK7testing8internal12UnitTestImpl16catch_exceptionsEvkRandomSeedFlag__iterator_category<__gnu_cxx::__normal_iterator*, std::vector > > >_ZlsRKN7testing8internal6SecretEi_ZN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEppEv_ZNK7testing8UnitTest26successful_test_case_countEvoperator()<__gnu_cxx::__normal_iterator > >_S_showpoint_ZN7testing8internal17TestEventRepeater25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11upper_boundERKS1__IO_lock_t_ZN9__gnu_cxx14__alloc_traitsISaIN7testing12TestPropertyEEE10_S_on_swapERS3_S5__ZN9__gnu_cxx13new_allocatorIPN7testing8internal29ParameterizedTestCaseInfoBaseEE8allocateEjPKv_ZN7testing8internal13DeathTestImpl11set_outcomeENS0_16DeathTestOutcomeE_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE_ZN7testing31TestPartResultReporterInterfaceaSERKS0__ZNSt12_Vector_baseIPN7testing11EnvironmentESaIS2_EE19_M_get_Tp_allocatorEv__copy_m_ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_PKvPFvvES6_PNS0_15TestFactoryBaseEnew_allocator_ZNK9__gnu_cxx13new_allocatorIN7testing14TestPartResultEE7addressERS2__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE4backEvEventForwardingEnabled__alloc_traits >_Rb_tree_impl, false>_ZN7testing8internal8FilePath3SetERKS1_should_runstring_ZNKSt17_Rb_tree_iteratorISsEneERKS0_kTypeParamLabel__simplefork_ZNSt11char_traitsIcE4findEPKcjRS1___is_move_iteratorproperty_with_matching_keylong long int_ZNKSt3setIPKcSt4lessIS1_ESaIS1_EE8max_sizeEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEEmmEv_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5_intptr_t_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPPN7testing11EnvironmentESt6vectorIS4_SaIS4_EEEEE4baseEv_ZN7testing8internal26GoogleTestFailureExceptionD2Ev_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE5clearEv_ZNKSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE11upper_boundERKS1__ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE6rbeginEv_ZN9__gnu_cxx17__normal_iteratorIPKPN7testing8TestCaseESt6vectorIS3_SaIS3_EEEpLEi_ZNK7testing8UnitTest21successful_test_countEv_ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7destroyEPS3__ZN9__gnu_cxx14__alloc_traitsISaIiEE8allocateERS1_jcopyMatchesFilteroperator<=19pthread_mutexattr_t_ZN7testing8internal2RED2Ev_ZN7testing10TestResult14RecordPropertyERKSsRKNS_12TestPropertyECountIf, bool (*)(const testing::TestPartResult&)>_ZNSt6vectorIN7testing12TestPropertyESaIS1_EE2atEjGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2LastMessage_ZNKSt6vectorIPN7testing17TestEventListenerESaIS2_EE4rendEv_ZNK7testing8TestCase17failed_test_countEvscoped_ptr, std::allocator > >_Iter_basegtest_color_ZNKSs12find_last_ofEcj_ZNKSt23_Rb_tree_const_iteratorIPKcEneERKS2__ZN9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE10deallocateEPS3_j_ZNK7testing8internal13FloatingPointIdE13fraction_bitsEv_ZNSt8_Rb_treeIPKcS1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE4swapERS7__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_S_rightEPKSt18_Rb_tree_node_base_ZN7testing8internal8FilePathaSERKS1_vector >_ZNKSbIwSt11char_traitsIwESaIwEE6substrEjj_ZN7testing8internal11CmpHelperNEEPKcS2_xx_S_dec_DestroyFilterTestsfirst_test_nameTestCaseInfoContainer_ZNSt3setIPKcSt4lessIS1_ESaIS1_EE5clearEva_type_param_ZNK9__gnu_cxx13new_allocatorIN7testing8internal9TraceInfoEE7addressERS3__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE12_M_rightmostEv_ZNKSt18_Bit_iterator_basegtERKS_GCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ0DXl€ ” ¨ŧĐäø  4H\p„˜ŦĀÔčü$8L 0AƒnÃhP*AƒhÄ€*Aƒhà°*AƒhÃŧāĐäø  đ4#H\p„˜ŦĀÔčü$8zPLR| ˆ@$0vA…B F‡†ƒc.[ ÃAÆAĮAÅ F D ÃAÆAĮAÅ A °°AƒCE LAÃ(ÔĐ!AƒC$I(E,A0HCà !AƒCK LAÃ48NA‡A †AƒkFA LJà AÆAĮ4pPNA‡A †AƒkFA LJà AÆAĮ4¨ NA‡A †AƒkFA LJà AÆAĮ4āđNA‡A †AƒkFA LJà AÆAĮ4@NA‡A †AƒkFA LJà AÆAĮ4PNA‡A †AƒkFA LJà AÆAĮ4ˆāOA‡A †AƒvFA FFà AÆAĮ4Ā0OA‡A †AƒvFA FFà AÆAĮ4ø€OA‡A †AƒvFA FFà AÆAĮ40ĐOA‡A †AƒvFA FFà AÆAĮ4h OA‡A †AƒvFA FFà AÆAĮH p[A…A ‡A†AƒC o$F(A,A0L LAÃAÆ AĮAÅHėĐTA…A ‡A†AƒC r$F(A,A0F HAÃAÆ AĮAÅ0800A†A ƒENF FL AÃAÆDl`mA…A ‡A†AƒE0}A‡A †AƒPBA HJAA HIà AÆAĮÄ 0 Ø @ %ė p    ° ( Ā *AƒhÃD đ CV\  CVt 0 CVŒ P CV¤ p CVŧ  CVÔ ° CV(ė Đ !AƒC$I(E,A0HCÃ$HAƒH8BA†A ƒCH NJG HG AÃAÆ $´0ĖČP(A†A ƒCOA HGEA HG  AÃAÆE CEA HGEA HGEA HHE HAEA HGEA HGEA HGEA HGEA HGEA HGEA HF CÃAÆt˜€÷H‡A †AƒwAE HAAF TA à AÆAĮB CAAF HA à AÆAĮJ CE HKF s€,CEB ]0°,CEB ]0PāDAƒCIB HCBE ]AÃt„0ĶA‡A †AƒC { Aà AÆAĮD G,E0H L$A(E,E0J G,E0H C$A(E,E0H C Aà AÆAĮC püxA…A ‡C†AƒH0•(H&CAƒC `,D0HAÃG ƒ4,"@>ŦŪA…B F‡†ƒƒ.É ÃAÆAĮAÅ A 4d"đ?īũA…B F‡†ƒy. ÃAÆAĮAÅ G <œ"åA…B C‡†ƒh.L.R.c.R.`ÃAÆAĮAÅ @Ü"āA$2A…B I‡†ƒ{ ÃAÆAĮAÅ F ].é ÃAÆAĮAÅ G @ #EÃA…B F‡†ƒo.O ÃAÆAĮAÅ F G ÃAÆAĮAÅ A @d#āEä•A…B F‡†ƒx.W ÃAÆAĮAÅ E F ÃAÆAĮAÅ G @¨#ĐFt˛A…B C‡†ƒa.Î ÃAÆAĮAÅ A g ÃAÆAĮAÅ A L4(PHjA‡A †AƒC T,D0H f Cà AÆAĮG LCà AÆAĮ0„(ĀHPAƒC P,D0H Z CÃC LCÃDp$IÁāA…B I‡†ƒm.y ÃAÆAĮAÅ K — ÃAÆAĮAÅ A D¸$A…B F‡†ƒ‰.ä ÃAÆAĮAÅ G L ÃAÆAĮAÅ A 4%āJK?A…B F‡†ƒL ÃAÆAĮAÅ H .48%0Pī˛A…B O‡†ƒo.Ø ÃAÆAĮAÅ D 4p% SãŨA…B C‡†ƒ.Ä ÃAÆAĮAÅ F 8¨%VvA…B O‡†ƒo.ô ÃAÆAĮAÅ H r.8ä%YĻ9A…B O‡†ƒr. ÃAÆAĮAÅ H z.4 &@]…jA…B I‡†ƒU.G ÃAÆAĮAÅ E 4X&Đ_ŽA…B I‡†ƒy.V ÃAÆAĮAÅ J (Ø*KAƒC ],G0PAÃG ƒ<+KA‡A †AƒC a,A0H E Aà AÆAĮH 4ü&āažŊA…B F‡†ƒi.Æ ÃAÆAĮAÅ E 04' d#ųA…B E†ƒc.r ÃAÆAÅ I 4h'ĐeŖA…B I‡†ƒO.Ë ÃAÆAĮAÅ G 4 'yLA…B F‡†ƒ[.f ÃAÆAĮAÅ C 0Ø'WXA…B E†ƒ].N ÃAÆAÅ C 4 (uhA…B F‡†ƒc.d ÃAÆAĮAÅ C 4D(€gĀtA…B F‡†ƒt ÃAÆAĮAÅ H a.4|(@iÜ“A…B I‡†ƒP. ÃAÆAĮAÅ F 4´( kÚĩA…B C‡†ƒJ.j ÃAÆAĮAÅ C 4-lAƒCWCÃHT- lOAƒC O$B(A,A0E,C E AÃK C$E(E,A0H EAÃ4X)plwĮA…B Gƒ[.[ Åà H N ÃÅ A 4)đlw×A…B Gƒ[.[ Åà H N ÃÅ A 4Č)pmgįA…B C‡†ƒT.k ÃAÆAĮAÅ A 4*ām5ûA…B C‡†ƒ~ ÃAÆAĮAÅ I A.@€. p\CMBEA HE K C M CBEA HHxÄ.€p–A…A ‡C†AƒG$B(E,A0H ^,A0H G$B(E,A0H$B(E,A0H S$B(E,A0H CAÃAÆ AĮAÅ4@/ qTA†A ƒCx  AÃAÆI C CÃAÆ\x/€qaA†A ƒCOAA HBEA P GÃAÆJƒ†CBEA HC AÃAÆØ/đq<¤+lA…B C‡†ƒ{..f.ē ÃAÆAĮAÅ I 4ä+rÛRA…B F‡†ƒe ÃAÆAĮAÅ G Z.U. 4,đrÛiA…B F‡†ƒe ÃAÆAĮAÅ G Z.U. xœ0ĐsēA…A ‡C†AƒG4B8EJ A…B F‡†ƒG ÃAÆAĮAÅ E d.˜ ÃAÆAĮAÅ A D`8 >q A…B F‡†ƒG ÃAÆAĮAÅ E d.˜ ÃAÆAĮAÅ A 4¨8ĐĄI˜ A…B F‡†ƒL ÃAÆAĮAÅ H g.Dā8 Ŗ Ā A…B F‡†ƒ  ÃAÆAĮAÅ D d.u ÃAÆAĮAÅ A D(9Ų A…B F‡†ƒd.Ô ÃAÆAĮAÅ D t ÃAÆAĮAÅ A Dp9¤ˆ A…B C‡†ƒN.´ ÃAÆAĮAÅ E } ÃAÆAĮAÅ A <¸9PĻÅ0 A…B E†ƒ\.u ÃAÆAÅ E i ÃAÆAÅ A 4ø9 §ŠG A…B DƒM Åà D N.v ÃÅ D 00:°§]W A…B H†ƒZ.ˆ ÃAÆAÅ A @d:Ē= A…G C‡†ƒn.\ ÃAÆAĮAÅ H g ÃAÆAĮAÅ F @¨:PĢ፠A…B C‡†ƒi.[ ÃAÆAĮAÅ C V ÃAÆAĮAÅ C Dė:\Ä A…B C‡†ƒc.č ÃAÆAĮAÅ D ƒ ÃAÆAĮAÅ A D4;Tũ A…B C‡†ƒ`.ä ÃAÆAĮAÅ C ƒ ÃAÆAĮAÅ A D|;Å6A…B C‡†ƒl.ų ÃAÆAĮAÅ B Ë ÃAÆAĮAÅ A 4Ä;=vA…B F‡†ƒ].y ÃAÆAĮAÅ F 4ü;ĸA…B I‡†ƒh.] ÃAÆAĮAÅ D 04<ûÄA…B H†ƒ\.] ÃAÆAÅ J 4h<åA…B I‡†ƒh.] ÃAÆAĮAÅ D 0 <ëA…B H†ƒU.] ÃAÆAÅ A 4Ô<(A…B I‡†ƒh.] ÃAÆAĮAÅ D D =@ŦBJA…L F‡†ƒ^.Q ÃAÆAĮAÅ C § ÃAÆAĮAÅ C 0T=ŒA…B H†ƒj.] ÃAÆAÅ D Dˆ=¯VŽA…B C‡†ƒr.a ÃAÆAĮAÅ D ] ÃAÆAĮAÅ H (Bđą/AƒHIED NCÃ(DB ˛,AƒEIED NCÃD(>P˛6ÔA…B C‡†ƒ`.a ÃAÆAĮAÅ F P ÃAÆAĮAÅ E (¸B´-AƒHHDD NCÃ(äBĀ´*AƒEHDD NCÃPČ>đ´}ūA…B C‡†ƒ^.Q.J.Ņ.J.Z ÃAÆAĮAÅ I P ÃAÆAĮAÅ E (dCpˇ-AƒHHDD NCÃ(C ˇ*AƒEHDD NCÃDt?Сä4A…B C‡†ƒn.Á ÃAÆAĮAÅ H ] ÃAÆAĮAÅ H (DĀē/AƒHIED NCÃ(0Dđē,AƒEIED NCÃ4@rA…B I‡†ƒh.] ÃAÆAĮAÅ D 4L@”A…B I‡†ƒh.] ÃAÆAĮAÅ D D„@ ģ2ļA…B F‡†ƒv ÃAÆAĮAÅ F R. ÃAÆAĮAÅ J 4Ė@HA…B I‡†ƒh.] ÃAÆAĮAÅ D 4A`ĀŅjA…B F‡†ƒe ÃAÆAĮAÅ G Z.D"A…B I‡†ƒZ.{.S.`.S.].S.Z ÃAÆAĮAÅ A ŗ ÃAÆAĮAÅ A DÄ]€_€î"A…B C‡†ƒ\. ÃAÆAĮAÅ I _ ÃAÆAĮAÅ F 8 ^ķ4#A…B F‡†ƒj.m ÃAÆAĮAÅ A .DH^dx#A…B F‡†ƒN.Ö ÃAÆAĮAÅ A Đ ÃAÆAĮAÅ A 4^hÉÆ#A…B C‡†ƒl.R ÃAÆAĮAÅ I cāh4Ü^Đ×#Y…B F‡†ƒd. ÃAÆAĮAÅ G \ci4(_Ĩ˙#A…B F‡†ƒY ÃAÆAĮAÅ K ^.¨ci(ŧcFA†A ƒC ~ AÃAÆ8 _ņ($A…B F‡†ƒj ÃAÆAĮAÅ J ™.Ž.4Ü_ iŠd$A…B I‡†ƒ\.9 ÃAÆAĮAÅ D H`Đlčˇ$A…B C‡†ƒk.X.R. f ÃAÆAĮAÅ D c ÃAÆAĮAÅ A L``ĀmXÎ$A…B C‡†ƒb. U.i. M.S ÃAÆAĮAÅ G [ ÃAÆAĮAÅ B H°` oŗņ$A…B I‡†ƒp.y. M.v ÃAÆAĮAÅ A I ÃAÆAĮAÅ A 4ü`āqŲ"%A…B C‡†ƒ`.y ÃAÆAĮAÅ A `4aĀrž9%A…B F‡†ƒx.A. J.k ÃAÆAĮAÅ F ]. J.m ÃAÆAĮAÅ I K ÃAÆAĮAÅ B <˜a€wv%A…B F‡†ƒ– ÃAÆAĮAÅ F R.c. e.4Øa y}Ą%A…B Dƒi. Y Åà G L ÃÅ A @bƒ´%A…B E†ƒc.I ÃAÆAÅ J T.J.h.J.{.Œœf zëAƒCL AÃG KA JTBBD HLA JPBBD HC AÃC CA JPBBD HEA EJA EJA E@äb‡ &A…B E†ƒc.I ÃAÆAÅ J T.J.j.J.}.°pg{žA…A ‡F†AƒE@YHILAPDLAHBLEPL@TDBHBLCPH@VLAPJ@[DAHALAPFLAHBLEPALAHFLAPI@M AÃAÆ AĮAÅD CLAPH@OLAPE@RLAPE@$h°|@đcƒd&A…B E†ƒc.I ÃAÆAÅ J T.J.h.J.{.´|hĐ|ËA…A ‡A†AƒEP_XI\A`PP[TAXA\A`F\AXB\E`QPcXA\A`HP`XB\E`A\D`PPWTAXA\A`F\CXA\A`TAÃAÆ AĮAÅKPƒ…†‡C\A`EPJ\A`EP4i ~TeĀ~ŧ&A…B F‡†ƒ ÃAÆAĮAÅ A V ÃAÆAĮAÅ A a.Ą ÃAÆAĮAÅ A @Xe‡Ø&A…B E†ƒc.I ÃAÆAÅ J T.J.j.J.}.0œe`„Õ0'F…B B†ƒk.i ÃAÆAÅ H @Đe@…†>'A…B F‡†ƒn.| ÃAÆAĮAÅ J š ÃAÆAĮAÅ D \jІCL8,f~t'A…B F‡†ƒ›.~ ÃAÆAĮAÅ A Į.Dhfđ†Ęŧ'A…B F‡†ƒu.d ÃAÆAĮAÅ K ž ÃAÆAĮAÅ G 8°fˆÅõ'A…B Aƒ_.a.M.Y Åà F [ ÃÅ A 8ėfč(A…B F‡†ƒj.| ÃAÆAĮAÅ A ^.8(gh4(A…B F‡†ƒ{.0 ÃAÆAĮAÅ A ļ.4dg‰ō”(A…B F‡†ƒM.} ÃAÆAĮAÅ J 4œgŠŧĢ(A…B F‡†ƒv.d ÃAÆAĮAÅ J 4ÔgP‹šÁ(A…B F‡†ƒv.d ÃAÆAĮAÅ J 4 hŒš×(A…B F‡†ƒy.d ÃAÆAĮAÅ G 8DhĢđ(A…B F‡†ƒ`.g ÃAÆAĮAÅ A B.8€hÎ)A…B F‡†ƒm.ą ÃAÆAĮAÅ A =.HŧhЌšl)A…B F‡†ƒY ÃAÆAĮAÅ K r.t. .x ÃAÆAĮAÅ H <ißÔ)A…B E†ƒb.r ÃAÆAÅ B | ÃAÆAÅ B <Hip‘˛ã)A…B B†ƒX.t ÃAÆAÅ E d ÃAÆAÅ A Đm0’CHDDA H0ŦiP’ų)A…B GƒR.h.M.y Åà F ”(nĒAƒC,E0H$E(E,E0F,A(B,E0F,A(B,E0P,A(B,E0F,A(E,E0M$E(A,E0H$E(E,E0F,A(E,E0H$A(A,E0H$E(E,E0F,A(E,E0H$A(A,E0H$E(E,E0F,A(B,E0F,F(B,E0K,A(B,E0F,F(B,E0K,A(B,E0F,F(E,E0H$A(A,E0H$E(E,E0F,A(B,E0H$T(E,E0F,A(E,E0R$A(A,E0H$E(E,E0F,A(B,E0H$F(E,E0H$E(E,E0H$O(E,E0H$Y(E,E0RAÃ.symtab.strtab.shstrtab.rel.text.data.bss.text.unlikely._ZNKSt5ctypeIcE8do_widenEc.text._ZNKSt5ctypeIcE8do_widenEc.text.unlikely._ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev.text._ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev.text.unlikely.DeleteThreadLocalValue.text.DeleteThreadLocalValue.text.unlikely._ZN7testing4Test11DeleteSelf_Ev.text._ZN7testing4Test11DeleteSelf_Ev.text.unlikely._ZN7testing4Test5SetupEv.text._ZN7testing4Test5SetupEv.text.unlikely._ZN7testing8TestCase16RunSetUpTestCaseEv.text._ZN7testing8TestCase16RunSetUpTestCaseEv.text.unlikely._ZN7testing8TestCase19RunTearDownTestCaseEv.text._ZN7testing8TestCase19RunTearDownTestCaseEv.text.unlikely._ZN7testing11EnvironmentD2Ev.text._ZN7testing11EnvironmentD2Ev.text.unlikely._ZN7testing11Environment5SetUpEv.text._ZN7testing11Environment5SetUpEv.text.unlikely._ZN7testing11Environment8TearDownEv.text._ZN7testing11Environment8TearDownEv.text.unlikely._ZN7testing11Environment5SetupEv.text._ZN7testing11Environment5SetupEv.text.unlikely._ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE.text.unlikely._ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEi.text._ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEi.text.unlikely._ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE.text.unlikely._ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestE.text.unlikely._ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE.text._ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE.text.unlikely._ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE.text._ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE.text.unlikely._ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultE.text._ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultE.text.unlikely._ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE.text._ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE.text.unlikely._ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE.text._ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE.text.unlikely._ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestE.text.unlikely._ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE.text.unlikely._ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi.text._ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi.text.unlikely._ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE.text._ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE.text.unlikely._ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEv.text._ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEv.text.unlikely._ZN7testing22EmptyTestEventListenerD2Ev.text._ZN7testing22EmptyTestEventListenerD2Ev.rel.text.unlikely.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE.text._ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE.text._ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE.text._ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE.text._ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE.text.unlikely._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Ev.text._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Ev.text.unlikely._ZN7testing8internal23DefaultDeathTestFactoryD2Ev.text._ZN7testing8internal23DefaultDeathTestFactoryD2Ev.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinterD2Ev.text._ZN7testing8internal27PrettyUnitTestResultPrinterD2Ev.text.unlikely._ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev.text._ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev.text.unlikely._ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Ev.text._ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Ev.text.unlikely._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev.rel.text._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev.text.unlikely._ZN7testing8internal26ThreadLocalValueHolderBaseD0Ev.rel.text._ZN7testing8internal26ThreadLocalValueHolderBaseD0Ev.text.unlikely._ZN7testing11EnvironmentD0Ev.rel.text._ZN7testing11EnvironmentD0Ev.text.unlikely._ZN7testing8internal23DefaultDeathTestFactoryD0Ev.rel.text._ZN7testing8internal23DefaultDeathTestFactoryD0Ev.text.unlikely._ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev.rel.text._ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev.text.unlikely._ZN7testing8internal35DefaultGlobalTestPartResultReporterD0Ev.rel.text._ZN7testing8internal35DefaultGlobalTestPartResultReporterD0Ev.text.unlikely._ZN7testing8internal27PrettyUnitTestResultPrinterD0Ev.rel.text._ZN7testing8internal27PrettyUnitTestResultPrinterD0Ev.text.unlikely._ZN7testing22EmptyTestEventListenerD0Ev.rel.text._ZN7testing22EmptyTestEventListenerD0Ev.rel.gcc_except_table.rodata.str1.1.text.unlikely._ZN7testing8internal26GoogleTestFailureExceptionD2Ev.rel.text._ZN7testing8internal26GoogleTestFailureExceptionD2Ev.text.unlikely._ZN7testing8internal26GoogleTestFailureExceptionD0Ev.rel.text._ZN7testing8internal26GoogleTestFailureExceptionD0Ev.text.unlikely._ZN7testing8internal24XmlUnitTestResultPrinterD2Ev.rel.text._ZN7testing8internal24XmlUnitTestResultPrinterD2Ev.text.unlikely._ZN7testing8internal24XmlUnitTestResultPrinterD0Ev.rel.text._ZN7testing8internal24XmlUnitTestResultPrinterD0Ev.text.unlikely._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Ev.rel.text._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Ev.text.unlikely._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Ev.rel.text._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Ev.text.unlikely._ZNSt6vectorISsSaISsEED2Ev.rel.text._ZNSt6vectorISsSaISsEED2Ev.rodata.str1.4.text.unlikely._ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev.rel.text._ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev.text.unlikely._ZN7testing15AssertionResult13AppendMessageERKNS_7MessageE.rel.text._ZN7testing15AssertionResult13AppendMessageERKNS_7MessageE.text.unlikely._ZN7testing14TestPartResultD2Ev.rel.text._ZN7testing14TestPartResultD2Ev.text.unlikely._ZN7testing12TestPropertyD2Ev.rel.text._ZN7testing12TestPropertyD2Ev.text.unlikely._ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev.rel.text._ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev.text.unlikely._ZN7testing7MessageC2ERKS0_.rel.text._ZN7testing7MessageC2ERKS0_.rel.rodata.text.unlikely._ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev.rel.text._ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev.text.unlikely._ZN7testing8internal10scoped_ptrISsE5resetEPSs.rel.text._ZN7testing8internal10scoped_ptrISsE5resetEPSs.text.unlikely._ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2_.rel.text._ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2_.text.unlikely._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3_.rel.text._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3_.text.unlikely._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_.rel.text._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_.text.unlikely._ZN7testing13PrintToStringIPKcEESsRKT_.rel.text._ZN7testing13PrintToStringIPKcEESsRKT_.text.unlikely._ZN7testing13PrintToStringIPKwEESsRKT_.rel.text._ZN7testing13PrintToStringIPKwEESsRKT_.text.unlikely._ZN7testing8internal18StreamableToStringIiEESsRKT_.rel.text._ZN7testing8internal18StreamableToStringIiEESsRKT_.text.unlikely._ZN7testing8internal18StreamableToStringIxEESsRKT_.rel.text._ZN7testing8internal18StreamableToStringIxEESsRKT_.text.unlikely._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_.rel.text._ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_.text.unlikely._ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv.rel.text._ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv.text.unlikely._ZN7testing8internal5MutexD2Ev.rel.text._ZN7testing8internal5MutexD2Ev.text.unlikely._ZN7testing8internal9MutexBase6UnlockEv.rel.text._ZN7testing8internal9MutexBase6UnlockEv.text.unlikely._ZN7testing8internal9MutexBase4LockEv.rel.text._ZN7testing8internal9MutexBase4LockEv.text.unlikely._ZN7testing8internal17StreamingListener12SocketWriter4SendERKSs.rel.text._ZN7testing8internal17StreamingListener12SocketWriter4SendERKSs.text.unlikely._ZN7testing8internal17StreamingListener12SocketWriterD2Ev.rel.text._ZN7testing8internal17StreamingListener12SocketWriterD2Ev.text.unlikely._ZN7testing8internal17StreamingListener12SocketWriterD0Ev.rel.text._ZN7testing8internal17StreamingListener12SocketWriterD0Ev.text.unlikely._ZN7testing8internal17StreamingListenerD2Ev.rel.text._ZN7testing8internal17StreamingListenerD2Ev.text.unlikely._ZN7testing8internal17StreamingListenerD0Ev.rel.text._ZN7testing8internal17StreamingListenerD0Ev.text.unlikely._ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs.rel.text._ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs.text.unlikely._ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoE.rel.text._ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoE.text.unlikely._ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE.rel.text._ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE.text.unlikely._ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestE.rel.text._ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestE.text.unlikely._ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE.rel.text._ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE.text.unlikely._ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEi.rel.text._ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEi.text.unlikely._ZN7testing8internal18OsStackTraceGetterD2Ev.rel.text._ZN7testing8internal18OsStackTraceGetterD2Ev.text.unlikely._ZN7testing8internal18OsStackTraceGetterD0Ev.rel.text._ZN7testing8internal18OsStackTraceGetterD0Ev.text.unlikely._ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestE.rel.text._ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestE.text.unlikely._ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE.rel.text._ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE.text.unlikely._ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE.rel.text._ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE.text.unlikely._ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEi.rel.text._ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEi.text.unlikely._ZN7testing15AssertionResultlsINS_7MessageEEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsINS_7MessageEEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA11_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA11_cEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsISsEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsISsEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA2_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA2_cEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA3_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA3_cEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIPKcEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIPKcEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA5_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA5_cEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA7_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA7_cEERS0_RKT_.text.unlikely._ZN7testing15AssertionResultlsIA12_cEERS0_RKT_.rel.text._ZN7testing15AssertionResultlsIA12_cEERS0_RKT_.text.unlikely._ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5_.rel.text._ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5_.text.unlikely._ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5_.rel.text._ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5_.text.unlikely._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev.rel.text._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev.text.unlikely._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Ev.rel.text._ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Ev.text.unlikely._ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EE.rel.text._ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EE.text.unlikely._ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT_.rel.text._ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT_.text.unlikely._ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo.rel.text._ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo.rel.rodata._ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo.text.unlikely._ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo.rel.text._ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo.rel.rodata._ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo.text.unlikely._ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo.rel.text._ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo.text.unlikely._ZN7testing8internal10scoped_ptrIKSsE5resetEPS2_.rel.text._ZN7testing8internal10scoped_ptrIKSsE5resetEPS2_.text.unlikely._ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.rel.text._ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.text.unlikely._ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi.rel.text._ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi.text.unlikely._ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.rel.text._ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.text.unlikely._ZN7testing8internal15NoExecDeathTestD2Ev.rel.text._ZN7testing8internal15NoExecDeathTestD2Ev.text.unlikely._ZN7testing8internal13ExecDeathTestD2Ev.rel.text._ZN7testing8internal13ExecDeathTestD2Ev.text.unlikely._ZN7testing8internal15NoExecDeathTestD0Ev.rel.text._ZN7testing8internal15NoExecDeathTestD0Ev.text.unlikely._ZN7testing8internal13ExecDeathTestD0Ev.rel.text._ZN7testing8internal13ExecDeathTestD0Ev.text.unlikely._ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.rel.text._ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.text.unlikely._ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.rel.text._ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.text.unlikely._ZN7testing8internal18StreamableToStringIPcEESsRKT_.rel.text._ZN7testing8internal18StreamableToStringIPcEESsRKT_.text.unlikely._ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_.rel.text._ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_.text.unlikely._ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_.rel.text._ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_.text.unlikely._ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE.rel.text._ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE.text.unlikely._ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs.rel.text._ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs.text.unlikely._ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs.rel.text._ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs.text.unlikely._ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0_.rel.text._ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0_.text.unlikely._ZN7testing13PrintToStringIxEESsRKT_.rel.text._ZN7testing13PrintToStringIxEESsRKT_.text.unlikely._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tag.rel.text._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tag.text.unlikely._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag.rel.text._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag.text.unlikely._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag.rel.text._ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag.text.unlikely._ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag.rel.text._ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag.text.unlikely._ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT_.rel.text._ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT_.text.unlikely._ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT_.rel.text._ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT_.text.unlikely._ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0_.rel.text._ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0_.text.unlikely._ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv.rel.text._ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv.text.unlikely._ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3_.rel.text._ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3_.text.unlikely._ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs.rel.text._ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs.text.unlikely._ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT_.rel.text._ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT_.text.unlikely._ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT_.rel.text._ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT_.text.unlikely._ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6_.rel.text._ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6_.text.unlikely._ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv.rel.text._ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv.text.unlikely._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc.rel.text._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc.text.unlikely._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc.rel.text._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc.text.unlikely._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc.rel.text._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc.text.unlikely._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKc.rel.text._ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKc.text.unlikely._ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.rel.text._ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_.text.unlikely._ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5_.rel.text._ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5_.text.unlikely._ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_.rel.text._ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_.text.unlikely._ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing12TestPropertyES4_EET0_T_S6_S5_.rel.text._ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing12TestPropertyES4_EET0_T_S6_S5_.text.unlikely._ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_.rel.text._ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_.rel.text.startup.rel.init_array.bss._ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_E.rel.rodata._ZTIN7testing8internal26ThreadLocalValueHolderBaseE.rodata._ZTSN7testing8internal26ThreadLocalValueHolderBaseE.rel.rodata._ZTIN7testing8internal26GoogleTestFailureExceptionE.rodata._ZTSN7testing8internal26GoogleTestFailureExceptionE.rel.rodata._ZTIN7testing8internal9DeathTestE.rodata._ZTSN7testing8internal9DeathTestE.rel.rodata._ZTIN7testing8internal16DeathTestFactoryE.rodata._ZTSN7testing8internal16DeathTestFactoryE.rodata._ZTSN7testing8internal23DefaultDeathTestFactoryE.rel.rodata._ZTIN7testing8internal23DefaultDeathTestFactoryE.rel.rodata._ZTIN7testing31TestPartResultReporterInterfaceE.rodata._ZTSN7testing31TestPartResultReporterInterfaceE.rodata._ZTSN7testing8internal24HasNewFatalFailureHelperE.rel.rodata._ZTIN7testing8internal24HasNewFatalFailureHelperE.rodata._ZTSN7testing4TestE.rel.rodata._ZTIN7testing4TestE.rodata._ZTSN7testing8TestCaseE.rel.rodata._ZTIN7testing8TestCaseE.rel.rodata._ZTIN7testing17TestEventListenerE.rodata._ZTSN7testing17TestEventListenerE.rel.rodata._ZTIN7testing22EmptyTestEventListenerE.rodata._ZTSN7testing22EmptyTestEventListenerE.rodata._ZTSN7testing8UnitTestE.rel.rodata._ZTIN7testing8UnitTestE.rodata._ZTSN7testing32ScopedFakeTestPartResultReporterE.rel.rodata._ZTIN7testing32ScopedFakeTestPartResultReporterE.rel.rodata._ZTIN7testing8internal27OsStackTraceGetterInterfaceE.rodata._ZTSN7testing8internal27OsStackTraceGetterInterfaceE.rodata._ZTSN7testing8internal18OsStackTraceGetterE.rel.rodata._ZTIN7testing8internal18OsStackTraceGetterE.rodata._ZTSN7testing8internal35DefaultGlobalTestPartResultReporterE.rel.rodata._ZTIN7testing8internal35DefaultGlobalTestPartResultReporterE.rodata._ZTSN7testing8internal38DefaultPerThreadTestPartResultReporterE.rel.rodata._ZTIN7testing8internal38DefaultPerThreadTestPartResultReporterE.rodata._ZTSN7testing8internal12UnitTestImplE.rel.rodata._ZTIN7testing8internal12UnitTestImplE.rel.rodata._ZTIN7testing8internal17StreamingListener20AbstractSocketWriterE.rodata._ZTSN7testing8internal17StreamingListener20AbstractSocketWriterE.rel.rodata._ZTIN7testing8internal17StreamingListener12SocketWriterE.rodata._ZTSN7testing8internal17StreamingListener12SocketWriterE.rel.rodata._ZTIN7testing8internal17StreamingListenerE.rodata._ZTSN7testing8internal17StreamingListenerE.rodata._ZTSN7testing8internal27PrettyUnitTestResultPrinterE.rel.rodata._ZTIN7testing8internal27PrettyUnitTestResultPrinterE.rodata._ZTSN7testing8internal17TestEventRepeaterE.rel.rodata._ZTIN7testing8internal17TestEventRepeaterE.rodata._ZTSN7testing8internal24XmlUnitTestResultPrinterE.rel.rodata._ZTIN7testing8internal24XmlUnitTestResultPrinterE.rodata._ZTSN7testing8internal13DeathTestImplE.rel.rodata._ZTIN7testing8internal13DeathTestImplE.rodata._ZTSN7testing8internal16ForkingDeathTestE.rel.rodata._ZTIN7testing8internal16ForkingDeathTestE.rodata._ZTSN7testing8internal15NoExecDeathTestE.rel.rodata._ZTIN7testing8internal15NoExecDeathTestE.rodata._ZTSN7testing8internal13ExecDeathTestE.rel.rodata._ZTIN7testing8internal13ExecDeathTestE.rel.rodata._ZTIN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE.rodata._ZTSN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE.rel.rodata._ZTIN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE.rodata._ZTSN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE.rel.rodata._ZTVN7testing8internal26GoogleTestFailureExceptionE.rel.rodata._ZTVN7testing8internal9DeathTestE.rel.rodata._ZTVN7testing8internal17StreamingListener12SocketWriterE.rel.rodata._ZTVN7testing8internal17StreamingListenerE.rel.rodata._ZTVN7testing32ScopedFakeTestPartResultReporterE.rel.rodata._ZTVN7testing8internal35DefaultGlobalTestPartResultReporterE.rel.rodata._ZTVN7testing8internal38DefaultPerThreadTestPartResultReporterE.rel.rodata._ZTVN7testing4TestE.rel.rodata._ZTVN7testing8TestCaseE.rel.rodata._ZTVN7testing8internal27PrettyUnitTestResultPrinterE.rel.rodata._ZTVN7testing8internal17TestEventRepeaterE.rel.rodata._ZTVN7testing8internal24XmlUnitTestResultPrinterE.rel.rodata._ZTVN7testing8internal18OsStackTraceGetterE.rel.rodata._ZTVN7testing8UnitTestE.rel.rodata._ZTVN7testing8internal12UnitTestImplE.rel.rodata._ZTVN7testing8internal13DeathTestImplE.rel.rodata._ZTVN7testing8internal16ForkingDeathTestE.rel.rodata._ZTVN7testing8internal15NoExecDeathTestE.rel.rodata._ZTVN7testing8internal13ExecDeathTestE.rel.rodata._ZTVN7testing8internal23DefaultDeathTestFactoryE.rel.rodata._ZTVN7testing8internal24HasNewFatalFailureHelperE.rel.rodata._ZTVN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE.rel.rodata._ZTVN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE.rodata.cst4.rel.debug_info.debug_abbrev.rel.debug_loc.rel.debug_aranges.rel.debug_ranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame.group¯n4 ˝n@ܯnT Νn` Đ¯nl ҝnx Ō¯n„ ͝nŨ¯n¤ Ö¯n° ׯnŧ دnČ Ų¯nÔ Ú¯nā Û¯nė ܯnø Ũ¯n Ū¯n ߯n ā¯n( á¯n4 â¯n@ ã¯nL ä¯nX å¯nd æ¯npŪ¯n„ đ¯n ņ¯nœ ō¯n¨ ķ¯n´ß¯nČā¯nÜá¯nđâ¯nã¯nä¯n,å¯n@æ¯nT į¯n` č¯nl p¯nx é¯n„ ę¯në¯n¤ ė¯n° Y¯nŧ ]¯nČ ^¯nÔ _¯nā m¯nė s¯nø y¯n |¯n ¯n —¯n( í¯n4 ›¯n@ ¯nL  ¯nXî¯nlī¯n€ Ŧ¯nŒ ­¯n˜ ޝn¤ ¯¯n° °¯nŧ ą¯nČđ¯nÜ Á¯nč Ɲnô ˯n ˝n  ͯn ίn$ Νn0 Đ¯n< ҝnH Ō¯nT Ô¯n` ā¯nl á¯nx ã¯n„ į¯n é¯nœ ņ¯n¨ ō¯n´ ņ¯nĀ ô¯nĖö¯nÜø¯nė ú¯nø ü¯n ¯n ¯n ¯n(ķ¯n<ô¯nP I¯n\ K¯nh L¯nt M¯n€ N¯nŒ O¯n˜ P¯n¤ R¯n° X¯nŧ ^¯nČ e¯nÔ f¯nā g¯nė j¯nø u¯n x¯n z¯n }¯n( ‘¯n4 Ą¯n@ ¤¯nL §¯nX Нnd ǝnp š¯n| ŧ¯nˆ ž¯n” Á¯n  ƯnŦ Ɲn¸ ˯nÄ Đ¯nĐ Ņ¯nÜG¯nä[¯nėŨ¯nô­¯nü߯ná¯n â¯nã¯nä¯n$å¯n,æ¯n4į¯n<č¯nDé¯nLę¯nTë¯n\ė¯ndí¯nlî¯ntī¯n|đ¯n„ņ¯nŒō¯n”ķ¯nœô¯n¤õ¯nŦö¯n´÷¯nŧø¯nÄų¯nĖú¯nÔû¯nÜü¯näũ¯nėū¯nô˙¯nü¯n¯n ¯n¯n¯n$¯n,¯n4¯n<¯nD ¯nL ¯nT ¯n\ ¯nd ¯nl¯nt¯n|¯n„¯nŒ¯n”¯nœ¯n¤Z¯nŦY¯n´|¯nŧ{¯nįnĖ8¯nÔĨ¯nÜŠ¯n䇯nėL¯nôO¯nü~¯n ¯n ¯n  ¯n '¯n$ ļ¯n, ¯n4 ¯n< 1¯nD ;¯nL B¯nT C¯n\ ¯nd ƒ¯nl ,¯nt ~€ Q“ $`ž×%Ҝ+āœų 0āœZāœ{æœŋđœúōœ =l ’2ē@ŲDP @Z{` ­jŲpür,€S‚†°’ā ¤^°Ŧ˛ĀW´НŌcāĩ❠đTō¤žëžGžšžį ž+ "ž} 0žÆ 2ž& @ž} BžÛ Pž0 Ržˆ `ž× bž, pžx ržØ €ž/ ‚žf ž˜ ’žæ” „Ąx§ xŸ €Ÿh‚ŸŅŸ1’Ÿ ŸĸŸc°ŸŊ˛Ÿ'ŸˆŸÉПԟFāŸ‚âŸŌđŸōŸf Ē   üĄ$y Á  Ŋ ĸ'ü& ,0 ( ĸ*O6 ”@  ĸ-ĖF  P  ĸ0gV ¸` ´ $ĸ3üf Ep A ,ĸ6v ŧ€ ¸ 4ĸ9*ę <ĸ@;2ĸĘ4ÖØWāØS |ĸ?’đØÚđØ!Ö ŒĸBŲ[ Ų-W ¤ĸE”NŲÚPŲGÖ ŧĸ(H˜Ų| Ųbx äĸ KØÚAÚk= Ŗ(N|ÚË€ÚYĮ ,ŖQė2ÜÚ„û`ėF`ėtB DŖU„ÔėŌāėãÎ \ŖhXÄíFĐí~B ÄŖ@[lNîPîV™ ¤(^ÁĻî °îC ,¤(aDôîsīo T¤d™@ņĶ @• dĨfĄ˙é ˙Kå ôŠ0i$l˙fp˙Kb $Ēl›ŧ˙ûĀ˙y÷ <Ē8oN 9˜ @W” tĒ0rÕ —! u! ¤Ē@u\!–! l’! äǐxÃ!Œũ!Īų! tŦ {*"_p"`nl" Ž ~Š"Îī"Đrë" 4Ž (#B p#P Ll# TŽ(„Ģ#œ $  $ |Ž`‡V$0 ˆ$0 „$ ÜŽpŠ­$Ā č$Ā —ä$ L¯p%X O%` šK% ŧ¯x{%ú Î% "Ę% 4°Č“&" a&0 Ŧ]& ü°`–Ą&Ü î&ā ˇę& \ąh™.'˜m' Ũi' ÄąpœŸ'~Ū'€āÚ' 4˛xŸ(`m(`¯i( Ŧ˛ĸŊ()Û) ŧŗ€Ĩ`)ėŧ)đÛ¸) <´€¨ *Ėh*Đ d* ŧ´Ģ¸*Ú+ā1+ LĩĀŽs+Õ+ ŋŅ+ ˇpą*,āj,āŸf, |ˇx´,€Ũ,€ĒŲ, ôˇ€ˇ-*o-0k- t¸@ēÁ-4.@\. ´šxŊ^.œ¸. T´. ,ģxĀ/ô e/!Åa/ ¤ŧ€Ã¸/Æ#0Đ#=ũ/ $žÆ=0%0%{0 ´žxÉ´0,&ķ00&ûī0 ,ŋhĖ%1,'f10'b1 ”ŋxĪš1L(ë1P(ëį1 ĀhŌ/2<)p2@)l2 tĀxÕ¤2\*ä2`*ā2 ėĀ€Ø3|+X3€+T3 lÁxÛŒ3œ,Í3 ,É3 äÁxŪ4ŧ-C4Ā-?4 \Âxáx4Û.Õ4ā.RŅ4 Ԑä%527‚5@7 ~5 dƐįŌ5F@36P@¯/6 ôÉxę‡6Aã6A=ß6 lʨí27=B‘7@Bķ7 Ë@đã73D+8@Dm'8 TĖķf8­DŽ8°DcĒ8 dĖāöí8Hté8 DÎčø*9ˆIr9Ikn9 ,Ņāûą9üLt­9 Ķčũî9pN6:pNū2: ôÕ˜q:nOĩ:pOKą: ŒÖė:ŧOf;ĀOhb; ¤Ö(Ķ;(Q4<0Qf0< ĖÖ( ˆ<–R = Rh= ôÖ( ƒ=TĀ=T\ŧ= ×čđ=lU+>pU\'> ØčY>ĖV–>ĐVh’> ėØđÆ>8X?@Xhũ> ÜŲđ/?¨Y­?°YhŠ? ĖÚ(@[˜@ [h”@ ôÚ(Aˆ\LA\ĻHA Û8!†A6]îA@]hęA TÛ($IB¨^ŠB°^tĨB |Û'üB$_eC0__aC „Û *ÁC_D_ØD ¤Û-\Dh`ŧDp`ķ¸D ´Ûh0EcbÁEpbœŊE Üp3fF cžFcŅšF ŒÜ`6ÉFáeŸGđeE›G ėŨ89hH5gI@gÁ I $Ū8<ŠIixJixtJ \Ū8?:KˆjKj ‰K ”Ū0BĶK0k$L0k] L ÄŪ0EhLnšLn~ĩL ôā0HũLr´Mrœ°M $ãpK^NŦrĐN°rÚĖN ”ãN5OŠsxOsFtO $äQŽOÖsPāsķP 4äTkPĶv˛PāvĐŽP 4åøWėP°x3Q°xĨ/Q ,æāZmQUzËQ`zFĮQ į]RĻz‰R°zņ…R įĐ`éRĄ|VS°|ƒRS ėįČcļS3~9T@~‡5T ´čČf¯TĮ UĐƒU |éČi„USûU`‡÷U DęČleVč‚čVđ‚~äV ëo^Wn†ÎWp†čĘW ė`r1XX‡ąX`‡h­X lė¸u$Yȋ’YЋĢŽY $îHxķY|ŒqZ€ŒÎmZ lîx{æZPĒâZ äīh}øZü’ôZ Lķ[“C[“?[ Tķ‚[ “0 ŋ[P“ ģ[ dķ…û[`“0 ;\“7\ |ķˆe\˜““\¸“\ Œķ‹Å\Ā“& ÷\”- 4]0” 0] œķq]<”m] ´ķ‘Š]`”, á] ”. ^Д ^ Äķ•Y^ܔy^ė”u^ Üķ˜•^ô”š^•ĩ^ ėķ›Ũ^•Ų^ üķ_•5_8• 1_ ô d_`•# “_ƒ•ˇ_˜•ŗ_ $ô¤×_ •- `Е ` 4ô§Q`ܕM` LôŠŽ`–1 Ë`@–( ah– ˙` \ô­7a€–9 €aŧ– |a tô°Åaā–< b—  b ŒôŗYb@—" ‹bd—‡b ¤ôļŊbl—šb ´ô¸c€—= ScĀ— Oc Äôģ”cā—5 Ųc˜ Õc Üôž d@˜' ?d€˜1 €d´˜ |d ôôÂŊd˜' ôdč˜ đd õÅ'e™. ee0™ ae $õČŸe@™# Ōed™ Îe <õËf€™& 7f¨™ 3f TõÎifĀ™% žfč™ šf lõŅĪfš# g$š ūf „õÔ5g0š 1g œõÖ’g@šQ@ķg”š īg ´õŲUhšV@ģh›ˇh Ėõ Üûh@› ÷h ėõ(Ū)i`›%i ö(āni€›D@ji <ö€âĨițĄi ŧö äâiā›Ūi Üö æ+jø›'j üö čwj œ sj ÷(ę—j@œ“j D÷ėģj€œD@ˇj \÷€îüjD@øj Ü÷€đ3k€D@/k \ø€ōqkȝmk Üø(ôŠkāĨk ųöÍkđÉk ųø˙kž ûk 4ų(ú2l ž .l \ų(ühl@ž dl „ų8ūl`ž ™l ŧų8Đl€žĖl ôų  m˜ž m ú Km°žGm 4úŦmĀž¨m LúnОnԞ/g n dúø0 +n \=n_ Í9n \+ ÜLn"ĒČHn t&¸_nęŽH€[n , &@'qn2/Ÿ mn l3(°}n0Ņ9T]ˆn0%—-‘nR—ĨnT—ŧoĄn 8(˜ļnxō°aĖ (TüŽņ˙×ŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙      !"#$&')*,-/0235689;=>?AB00×X`m×ŊІ×ö`?×DEGHJKMNPQS e×N Ā׍Đ X×TUWXšč fÅđÚČÚ]ę f…ß fZ[]^Ž@ fŌ *—×āÚ8fhĐڒÔÚŧĖÚ`aęå"ĐFt×cdJk fiX ffhiklnoqrtu‰ kÚ×Ëpmg×ām5×P p\׃€p–×wxŧĐsē×z{}~õĐw׍ f€ƒ„?ô f†‡‰ŠŒ’“•–˜™›œžŸĄĸ¤Ĩ§¨ĒĢ­Ž°ąŗ´ļˇšēd¤ˆ×ŧŊŋĀÂÃÅÆČÉËĖÎĪŅŌÔÕרސ¯V×P˛6×Uđ´}×ÂСä×ÚÛŨŪāáãäæįéęėíīđōķõöøúûũ˙   čÚG (Úv} f˜Āú × !#$&')*,-/0235689;<>?ɏ fABí§ f ×J @Ÿ fDE{  f­ ~ fŲ m f g f) Ķ fU ŋ f ` fŖ § fÕ U fü N f C fG 7 fo 0 f“ ( f¸  få  f ô fGHJKMNPQ= Øڈ ”ÚŅ €DČ×  f0 f] ė fSTˆ hÉ×VWYZ\]_`bcefË {ž×hiī Đ|Ë×klnoqrtuwxz{}Ē}KøÚZä f‚„…‡ˆŠ‹Ž‘“”•—˜š›Ÿ ĸŖ¤Ļ§ŠĢŦ­¯°˛ŗĩļ¸ēģŊžĀÁÂÄÅĮČĘËÍÎĐŅĶÔÖØŲÛÜŪāâäæčęėîđōôöøúüū   €ĩŌúU ‡!Ŋ"ū#<$q%¤&ú'(M*m+‹,Ā-Ü8û<5=aDŽUÜV%`Oa      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖw"ܒ"ŪĮ"Ūü"ā"â3"äL "æu "čĄ"ęž"ęÛ"ėü"î "đA"ō‰"ôÔ"ö""øn"úŗ"üô"ūA""Â""b"Ģ" ņ" B"j"’×Ģ×Į 0×˙P*×,€*×[°*׆ā×°""`"Ŋ"đ×N#×Ē""`"’"Ä"ú"0" q" ˛""đ""."$‰"'Å"*â"- "0U "3“ "6É "9ņ 0v×!2!D!đ]!l!0vט!°×Ä!Đ!×"""?K"!Ü"˜""?Í"!"B#N×N#PN× # N×é#đN×.$@N×$N×Ô$āO×$%0O×w%€Oך%ĐO×& O×J&p[י&ĐT׿&î&õ&'-"EG'D!ōy'›'-"EÎ'G"H(b"KW(!Ŧ(b"K)k"NX)Y"Qs)Y"QŽ))¯)ž)Đ)ķ)ü)*Q*t"U‰*t"UÁ*0 W×+ +0 W×S+ =×z+ =ץ+Đ ‚×Ú+€Úû+,,` ‹×Y,đ >ז,0 ×ŧ,Ąō,@ %×X-e-@ %×Ë-p ×.!æY.p ×Ē. ×ū.!č>/ ג/° ×Ī/Ā *× 0đ ×J0PB×y0 ײ0 B×Ũ00 ×#1P ×^1p כ1 ×Ķ1° × 2Đ !×O2H×w2„2PD×ļ2Ŋ2 S×â2 S×3×'3 ×G3@D×}3„3D×Å3Đ3ā0×4 44×]4P!×ē4ō45€×#5ã"X^5 B׌5’5đBמ5@›×î5ā×6đ`×06đD×r6@D×°64×Ü6Đ4× 7×870×h7@Š×}7 !ę‘7’ÚÃ7‘Úî7Ú8ŒÚ98K8Úv8Ú¤8ˆÚÅ8Ú9„Ú%9|ÚJ9xÚp9tڑ9pÚŗ9lÚß9hÚ :dÚ5:@Š×J:đ+×_:đ+×t: ׉:@×Ę:`/×ī:/×;Ā>×>;$×e;0מ;P(×Å;Ė;€÷×< <<*<1<8<L<€,ר<­<´<°,×=āD×b=0Ķ×Ļ=x×ú= “×C>K>0!‡׀>‡>Ž>“>0!‡×Č>Ā!ō×?Ā"{×e?v?}?ĩ?@#C×Ų?@#C×ũ?#B×!@#B×E@ā#V׆@@$׹@P$ ×ė@`$ ×'Ap$×[A€$׋A$×ēA°$×ęAĀ$×Bā$×DB%×|B %׊B@%רB`%×C€%×-C %×VCĀ%×|Cā%FכC0&;×ēCp&2×ßC°& × DĀ&2×6D' ×WD~"[wD~"[—DV"^ĩDV"^ĶD' ×E '×&E0' ×ZE@'ץE`'gרEŪEåEĐ'×Fđ'„×RF€)3×´FĀ)×îFā)R×#G@*×AGP*×dG`*@׍G•G@+”×ÂGā,F×īG0-B×H1H€-3×ZHmHĀ- ׍HĀ- ×­HĐ-×ÎHđ- ×îHđ- ×I.!×/I0.×\IP.<׌IIĻI.×ÔI ÚJ .×OJĀ.ׁJā.רJ/×āJčJ /× K(K@/5×ZK€/׌K / ×ŊK°/×ëKĐ/=×L L0Ŋ×JLPLWL^LĐ0đ׍L”LĀ1Ę×ĘL2Ö×ûL Ú$Mp3×UM4˛דMP5ę×ŌM@6ˆ×NĐ7×-Nā77×INQNVNā77×rN 84םNĨN`84×ÔN 8–×öNO OO;OSO 8–×uO@9ײO¸OžO`9|×ūOPā9Ņ×DPIPOPVPĀ:׀Pā:×ĒP;}×éP€;×Q Ú2Q;¤×fQQ@<„×§QąQíQĐ=J×$R >×MRC"a‚R´RáRōRC"a'S@>Ŧ×?SRS‡S­SōS'T8TKTUT@>Ŧ×mTđ?ī×ÃTāA$×øT˙TEÃ×,UāEä×ZUbUPHj׎UĀHPמUIÁ×ëU"dV"d#VāJK×MV0Pī×yVąV Sã×åVūVVv×-WYĻ×WW@]…זWĐ_×÷WK"i,XK"l[Xāaž׉X d#×ĢXĐeŖרXy"o%YW"r\Yu"u“Y€gĀ×ģY@iÜ×įY/Z6Zl×kZ lOלZplw×ļZđlw×ĪZØZ qT× [€qa×.[I[đq×u[l"xœ[rÛ×Î[đrÛ×\tN×6\āta×Z\Puפ\Ī"{Ë\ö\2]i]puÛכ]Pv×Ņ]n"~^āxÔ×W^Āy×°^r"ã^ü^Đ{2×H_}י_ ~j×đ_L"„%`q×Y`i`r`ƒ ×Ģ`ĩ` ˆä×î`‹Ä×0aā‹Ņ×^aĀ}ךaĀ}×Öa@Ī×bb"b‘×Hb0‘×nbP‘'×ļbÂbÉbŅbŪbëb"‡4c"ŠScic"Šˆc—"°cÅcš"ëcūc d""“KdQd€“E×xdД&×ĨdŦ"–ßd!āeŦ"–Reˇ"™ŒeŨ"œ¸eD!âãeŨ"œfā"Ÿ;f¯"ĸ…fÛ"ĨĘfÛ"¨g "Ģ]g1"ŽŽgŋ"ąũg›Ũ×h,h›Ũ×HhŸ"´uh!ôĄhŸ"´ÎhĒ"ˇûhā›č×7iМ3×ĸiž6×čiPŸ>×j >×>jĐĄIרj Ŗ ×Äj Ŗ ×āj"ē,kPĻÅ×vk’kPĻÅ×Ük §Š×7l°§]×olwlĒ=׸lPĢį×ķl\"Ŋ5mT"Ā|mÅ"ÃÉm="Æ˙m"É.nû"ĖZn"Īˆnë"ŌÆn"Õôn@ŦB×Zo"؇ođą/×­o ˛,×Öočo´-×pĀ´*×9peppˇ-×Ļp ˇ*×ępņpĀē/×qđē,×@q"Ûnq"Ūœq ģ2×Ôq"ár`ĀŅ×5r@ÂŽ×grđÃŽםrR"äįr Å'×s "įNsĐÅ/×ls¯"ęēsÎsás¯"ę/t="íxt="íÁtķ"đ uÆ$×Fu0Ƃ×yum"ķŽuˇuc"öėuĀÆ×vk"ûCvĐÆ×evū"švāÆ×ŧvK"ívđÆA×wđÆA×w@ČL×8w!ėPw@ČL×iwÉׂw°É׊w!øĪw°É×öwĐÍ×xđÍ÷×6x!öNxđÍ÷×gxđÎ׀xĪę×ĻxĪę×ĖxŅ×yŅ×Zyh"Áyf" z͇×@zh" ąz Ķ‚×đz0ÖG×8{€ÖG×x{ĐÖw×Ę{P×W×ū{|!B|D!îw|P×W×Ģ|°Üæ×Ä|°Üæ×Ũ| ŨŒ×}}}-}0Ū¸×r}đã+ז} ä+×Ŋ}Pä*×~€äx×-~4~:~@~F~å]׈~~`ëÅ×Ô~0íŨ× \"4 !ú[\"…\"­\"Õh"˙h"'€īb×J€ !Ūl€īb׏€€īNׯ€ !üđ€€īN×'Đī2×dđטĸ ö×ú !ū#‚ !J‚P‚X‚_‚Đūw×°‚P˙8×é‚h"TƒS׌ƒh"ķƒĻ"!'„h"$|„t"'Ʉ_"*…Ø"-`…g…ķ"0´…ä…&†8†F†V†œ"3õ†Q!ØJ‡ !ÖŸ‡!‚͇â‡ķ‡Ņ"6ˆđ×Cˆ0×nˆ0Cיˆ€C×ĈĐC×īˆ C׉E"9Ũ‰Á"<qŠx"?-‹p |×l‹đō×ɋ "B Œ&ŒEŒLŒđÕ׍ŒĐe×׌@g×Ä f0°M×}…ļ]"Eô“ÚŽ ×LŽ~"HŠŽ0×ŋŽœ"KcV!ÛŊ !ؐÚ"Nv!Аä@â×4‘0ę׊‘ ×ܑ!’ ×A’ !×t’@!0×Ļ’!äג@!0× “p#×;“#Ä×n“#Äץ“`%,×֓(%×!”(%×l”Ā(%×˔Ā(%×*•F"QZ•đ(׌•’•™•Ĩ•¯•ģ•Ā•ƕ͕æ•PGÚ×7–0I°׏–āQŪ×ã–ĀWą×7—€_€׋—ķ"TŨ—dטāh×M˜Đ"W˜`Ú̘i×͘Ĩ"Z™i×#™F"]n™ņ"`ș iŠ×š.š !…bšnšƒšĐlč׸šĀmX×įšĀmX×› oŗ×V›āqŲם›Āržל€w׿›y}×Aœƒ"c›œŦœ zë×܇"f3°|×Nƒ"iŦ ~×ĮĀ~×ų‡"l]ž`„Õ×xž@…†מžĐ†×ĞІ×ęž~"oZŸđ†ĘיŸĀˆÅ×ĐŸĀˆÅ× č"rd h"uŅ ‰ō×8ĄŠŧ×zĄP‹šךĄŒš×ĸĢ"xoĸÎ"{ÚĸЌš×Ŗß×cŖtŖp‘˛ץŖ0’×ĘŖP’×ņŖ ¤!¤+¤ÚZ¤€¤0!„´¤Ũ¤0!‡Ĩ'Ĩ!ˆIĨ!ŠkĨ!‹•Ĩ&!ŋĨ-!ŽđĨ !!Ļ!‘QĻ,!“Ļ.!”ŗĻ !•åĻ!—ųĻ!˜ §!š%§!›=§!_§!Ÿ§ ! ¨§#!ĸΧ!Ŗį§!¤˙§-!Ļ0¨ !§a¨!Š–¨1!Ģ˨(!Ŧ÷¨ !­#Š9!¯`Š !°Š<!˛ŨŠ !ŗĒ"!ĩCĒ!ļiĒ!¸ĒĒ=!ēëĒ !ģ$Ģ5!Ŋ]Ģ !žˆĢ'!ĀŗĢ1!ÁčĢ !ÂŦ'!ÄHŦ !ÅsŦ.!ĮĨŦ !Č×Ŧ#!ĘūŦ !Ë%­&!ÍO­ !Îy­%!Đĸ­ !ŅË­#!Ķō­ !ÔŽ6ŽIŽĀ fˆŽ@ Ú˛ŽqÚįŽ gtest-all.cc_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEv.part.102_ZN7testing8internalL19SumOverTestCaseListERKSt6vectorIPNS_8TestCaseESaIS3_EEMS2_KFivE.constprop.389_ZN7testing8internalL14PrintOnOneLineEPKci.constprop.390_ZNSs4_Rep10_M_disposeERKSaIcE.part.7_ZN7testing8internalL21FormatDeathTestOutputERKSs_ZN7testing12_GLOBAL__N_126PrintByteSegmentInObjectToEPKhjjPSo_ZN7testing7MessagelsIKcEERS0_RKPT_.isra.62CSWTCH.1179_ZGVZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczE13in_color_mode_ZZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczE13in_color_mode_ZN7testing8internalL15kTypeParamLabelE_ZN7testing8internalL16kValueParamLabelE_ZN7testingL20kTestShardStatusFileE_ZN7testing8internalL23HasGoogleTestFlagPrefixEPKc_ZN7testing8internalL26g_in_fast_death_test_childE_ZN7testing8internalL23kCurrentDirectoryStringE_ZN7testing8internalL17g_captured_stdoutE_ZN7testing8internalL17g_captured_stderrE_ZN7testing8internalL21g_injected_test_argvsE_ZN7testing8internalL25FormatCxxExceptionMessageEPKcS2__ZN7testing8internalL12FlagToEnvVarEPKc_ZN7testingL15kTestShardIndexE_ZN7testingL16kTestTotalShardsE_ZN7testing8internalL24StreamWideCharsToMessageEPKwjPNS_7MessageE_ZN7testing8internal18StreamableToStringIPwEESsRKT_.isra.349_ZN7testing8internalL20PrintAsCharLiteralToIwwEENS0_10CharFormatET0_PSo_ZN7testing8internalL22PrintAsStringLiteralToEwPSo_ZN7testing8internalL20PrintCharsAsStringToIcEEvPKT_jPSo_ZN7testing8internalL20PrintCharsAsStringToIwEEvPKT_jPSo_ZN7testingL19FormatCountableNounEiPKcS1__ZN7testingL16kUniversalFilterE_ZN7testing8internalL12kUnknownFileE_ZN7testing8internalL27PrintTestPartResultToStringERKNS_14TestPartResultE_ZN7testing12_GLOBAL__N_115IsSubstringImplIPKcEENS_15AssertionResultEbS3_S3_RKT_S7__ZN7testing12_GLOBAL__N_115IsSubstringImplISsEENS_15AssertionResultEbPKcS4_RKT_S7__ZN7testing12_GLOBAL__N_115IsSubstringImplISbIwSt11char_traitsIwESaIwEEEENS_15AssertionResultEbPKcS8_RKT_SB__ZN7testing12_GLOBAL__N_115IsSubstringImplIPKwEENS_15AssertionResultEbPKcS6_RKT_S9__ZGVZN7testing8UnitTest11GetInstanceEvE8instance_ZZN7testing8UnitTest11GetInstanceEvE8instance_ZN7testingL18kDefaultOutputFileE_ZN7testing8internalL22ExecDeathTestChildMainEPv_ZN7testingL20kDeathTestCaseFilterE_ZN7testingL18kDisableTestFilterE_ZN7testing8internalL17PrintColorEncodedEPKc.constprop.388_ZN7testing8internalL24kColorEncodedHelpMessageE_ZN7testing8internalL25kAlsoRunDisabledTestsFlagE_ZN7testing8internalL19kBreakOnFailureFlagE_ZN7testing8internalL20kCatchExceptionsFlagE_ZN7testing8internalL10kColorFlagE_ZN7testing8internalL19kDeathTestStyleFlagE_ZN7testing8internalL17kDeathTestUseForkE_ZN7testing8internalL11kFilterFlagE_ZN7testing8internalL25kInternalRunDeathTestFlagE_ZN7testing8internalL14kListTestsFlagE_ZN7testing8internalL11kOutputFlagE_ZN7testing8internalL14kPrintTimeFlagE_ZN7testing8internalL15kRandomSeedFlagE_ZN7testing8internalL11kRepeatFlagE_ZN7testing8internalL12kShuffleFlagE_ZN7testing8internalL20kStackTraceDepthFlagE_ZN7testing8internalL19kStreamResultToFlagE_ZN7testing8internalL19kThrowOnFailureFlagE_ZGVZN7testing8internalL23ExecDeathTestSpawnChildEPKPciE16stack_grows_down_ZZN7testing8internalL23ExecDeathTestSpawnChildEPKPciE16stack_grows_down_ZN7testingL31GetReservedAttributesForElementERKSs_ZN7testingL28kReservedTestSuiteAttributesE_ZN7testingL29kReservedTestSuitesAttributesE_ZN7testingL27kReservedTestCaseAttributesE_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEv.part.358_ZN7testing8TestInfo3RunEv.part.366_ZN7testing8TestCase3RunEv.part.367_GLOBAL__sub_I__ZN7testing8internal17kStackTraceMarkerE_ZStL8__ioinit_ZN7testingL22kDefaultDeathTestStyleE_ZN7testing8internal26ThreadLocalValueHolderBaseD5Ev_ZN7testing11EnvironmentD5Ev_ZN7testing22EmptyTestEventListenerD5Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD5Ev_ZN7testing8internal23DefaultDeathTestFactoryD5Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD5Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD5Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD5Ev_ZN7testing8internal26GoogleTestFailureExceptionD5Ev_ZN7testing8internal24XmlUnitTestResultPrinterD5Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD5Ev_ZNSt6vectorISsSaISsEED5Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD5Ev_ZN7testing14TestPartResultD5Ev_ZN7testing12TestPropertyD5Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED5Ev_ZN7testing7MessageC5ERKS0__ZN7testing8internal5MutexD5Ev_ZN7testing8internal17StreamingListener12SocketWriterD5Ev_ZN7testing8internal17StreamingListenerD5Ev_ZN7testing8internal18OsStackTraceGetterD5Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED5Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED5Ev_ZN7testing8internal15NoExecDeathTestD5Ev_ZN7testing8internal13ExecDeathTestD5Ev_ZNKSt5ctypeIcE8do_widenEc_ZN7testing8internal26ThreadLocalValueHolderBaseD2Ev_ZN7testing8internal26ThreadLocalValueHolderBaseD1EvDeleteThreadLocalValue_ZN7testing4Test11DeleteSelf_Ev_ZN7testing4Test5SetupEv_ZN7testing8TestCase16RunSetUpTestCaseEv_ZN7testing8TestCase19RunTearDownTestCaseEv_ZN7testing11EnvironmentD2Ev_ZN7testing11EnvironmentD1Ev_ZN7testing11Environment5SetUpEv_ZN7testing11Environment8TearDownEv_ZN7testing11Environment5SetupEv_ZN7testing22EmptyTestEventListener18OnTestProgramStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing22EmptyTestEventListener24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing22EmptyTestEventListener11OnTestStartERKNS_8TestInfoE_ZN7testing22EmptyTestEventListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing22EmptyTestEventListener9OnTestEndERKNS_8TestInfoE_ZN7testing22EmptyTestEventListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing22EmptyTestEventListener27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing22EmptyTestEventListener18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing22EmptyTestEventListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17StreamingListener20AbstractSocketWriter15CloseConnectionEv_ZN7testing22EmptyTestEventListenerD2Ev_ZN7testing22EmptyTestEventListenerD1Ev_ZN7testing4Test5SetUpEv_ZN7testing4Test8TearDownEv_ZNK7testing8TestCase30reportable_disabled_test_countEv_ZNK7testing8TestCase19disabled_test_countEv_ZNK7testing8TestCase21reportable_test_countEv_ZNK7testing8TestCase17test_to_run_countEv_ZNK7testing8TestCase16total_test_countEv_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal18OsStackTraceGetter16UponLeavingGTestEv_ZN7testing8internal24HasNewFatalFailureHelper20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD2Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD1Ev_ZN7testing8internal23DefaultDeathTestFactoryD2Ev_ZN7testing8internal23DefaultDeathTestFactoryD1Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD2Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD1Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD2Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD1Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD2Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD1Ev_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderD0Ev_ZdlPv_ZN7testing8internal26ThreadLocalValueHolderBaseD0Ev_ZN7testing11EnvironmentD0Ev_ZN7testing8internal23DefaultDeathTestFactoryD0Ev_ZN7testing8internal38DefaultPerThreadTestPartResultReporterD0Ev_ZN7testing8internal35DefaultGlobalTestPartResultReporterD0Ev_ZN7testing8internal27PrettyUnitTestResultPrinterD0Ev_ZN7testing22EmptyTestEventListenerD0Ev_ZN7testing8internal17TestEventRepeaterD2Ev__gxx_personality_v0_ZTVN7testing8internal17TestEventRepeaterE_Unwind_Resume_ZN7testing8internal17TestEventRepeaterD1Ev_ZN7testing8internal17TestEventRepeaterD0Ev_ZN7testing8internal18OsStackTraceGetter17CurrentStackTraceEii_ZNSsC1EPKcRKSaIcE_ZN7testing8internal26GoogleTestFailureExceptionD2Ev_ZTVN7testing8internal26GoogleTestFailureExceptionE_ZNSt13runtime_errorD2Ev_ZN7testing8internal26GoogleTestFailureExceptionD1Ev_ZN7testing8internal26GoogleTestFailureExceptionD0Ev_ZN7testing8internal17TestEventRepeater18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater24OnEnvironmentsSetUpStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal17TestEventRepeater11OnTestStartERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal17TestEventRepeater27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater22OnEnvironmentsSetUpEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater25OnEnvironmentsTearDownEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater9OnTestEndERKNS_8TestInfoE_ZN7testing8internal17TestEventRepeater13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal17TestEventRepeater16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal17TestEventRepeater18OnTestIterationEndERKNS_8UnitTestEiputcharprintf_ZNSs4_Rep10_M_destroyERKSaIcE_ZN7testing8internal24XmlUnitTestResultPrinterD2Ev_ZTVN7testing8internal24XmlUnitTestResultPrinterE_ZNSs4_Rep20_S_empty_rep_storageE_ZN7testing8internal24XmlUnitTestResultPrinterD1Ev_ZN7testing8internal24XmlUnitTestResultPrinterD0Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD2Ev_ZTVN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD1Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderD0Ev_ZNSt6vectorISsSaISsEED2Ev_ZNSt6vectorISsSaISsEED1Ev_ZNKSs4findEcj_ZNSs6appendEPKcj_ZNSsC1ERKSsjj_ZNSs6appendERKSs_ZSt24__throw_out_of_range_fmtPKczsnprintfstrlen_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i_ZN7testing8internal29ParameterizedTestCaseRegistryD2Ev_ZN7testing8internal29ParameterizedTestCaseRegistryD1Ev_ZN7testing8internal12AssertHelperC2ENS_14TestPartResult4TypeEPKciS5__Znwj_ZN7testing8internal12AssertHelperC1ENS_14TestPartResult4TypeEPKciS5__ZN7testing8internal12AssertHelperD2Ev_ZN7testing8internal12AssertHelperD1Ev_ZN7testing8internal15UnitTestOptions15GetOutputFormatEv_ZN7testing18FLAGS_gtest_outputEstrchr_ZNSsC1EPKcjRKSaIcE_ZN7testing8internal15UnitTestOptions20PatternMatchesStringEPKcS3__ZN7testing8internal15UnitTestOptions13MatchesFilterERKSsPKc_ZN7testing8internal13GetTestTypeIdEv_ZN7testing8internal12TypeIdHelperINS_4TestEE6dummy_E_ZN7testing8internal20SingleFailureCheckerC2EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZNSsC1ERKSs_ZN7testing8internal20SingleFailureCheckerC1EPKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing8internal35DefaultGlobalTestPartResultReporterC2EPNS0_12UnitTestImplE_ZTVN7testing8internal35DefaultGlobalTestPartResultReporterE_ZN7testing8internal35DefaultGlobalTestPartResultReporterC1EPNS0_12UnitTestImplE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC2EPNS0_12UnitTestImplE_ZTVN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZN7testing8internal38DefaultPerThreadTestPartResultReporterC1EPNS0_12UnitTestImplE_ZNK7testing8internal12UnitTestImpl21total_test_case_countEv_ZNK7testing8internal12UnitTestImpl22test_case_to_run_countEv_ZNK7testing8internal12UnitTestImpl21successful_test_countEv_ZNK7testing8TestCase21successful_test_countEv_ZNK7testing8internal12UnitTestImpl17failed_test_countEv_ZNK7testing8TestCase17failed_test_countEv_ZNK7testing8internal12UnitTestImpl30reportable_disabled_test_countEv_ZNK7testing8internal12UnitTestImpl19disabled_test_countEv_ZNK7testing8internal12UnitTestImpl21reportable_test_countEv_ZNK7testing8internal12UnitTestImpl16total_test_countEv_ZNK7testing8internal12UnitTestImpl17test_to_run_countEv_ZN7testing8internal12UnitTestImpl28CurrentOsStackTraceExceptTopEi_ZN7testing8internal15GetTimeInMillisEvgettimeofday_ZN7testing8internal6String13CStringEqualsEPKcS3_strcmp_ZN7testing15AssertionResultC2ERKS0__ZN7testing15AssertionResultC1ERKS0__ZN7testing16AssertionSuccessEv_ZN7testing16AssertionFailureEv_ZN7testing8internal6String17WideCStringEqualsEPKwS3_wcscmp_ZN7testing8internal6String28CaseInsensitiveCStringEqualsEPKcS3_strcasecmp_ZN7testing8internal6String32CaseInsensitiveWideCStringEqualsEPKwS3_wcscasecmp_ZN7testing8internal6String23EndsWithCaseInsensitiveERKSsS3__ZN7testing8internal20StringStreamToStringEPSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv_ZNSs7reserveEj_ZNK7testing7Message9GetStringEv_ZN7testing15AssertionResult13AppendMessageERKNS_7MessageE_ZNK7testing10TestResult17GetTestPartResultEiabort_ZNK7testing10TestResult15GetTestPropertyEi_ZN7testing10TestResult20ClearTestPartResultsEv_ZN7testing10TestResult5ClearEv_ZNK7testing10TestResult6FailedEv_ZNK7testing8internal12UnitTestImpl26successful_test_case_countEv_ZNK7testing8internal12UnitTestImpl22failed_test_case_countEv_ZNK7testing10TestResult15HasFatalFailureEv_ZNK7testing10TestResult18HasNonfatalFailureEv_ZNK7testing10TestResult16total_part_countEv_ZNK7testing10TestResult19test_property_countEv_ZN7testing4TestC2Ev_ZTVN7testing4TestE_ZN7testing35FLAGS_gtest_also_run_disabled_testsE_ZN7testing28FLAGS_gtest_break_on_failureE_ZN7testing28FLAGS_gtest_catch_exceptionsE_ZN7testing17FLAGS_gtest_colorE_ZNSs6assignERKSs_ZN7testing28FLAGS_gtest_death_test_styleE_ZN7testing31FLAGS_gtest_death_test_use_forkE_ZN7testing18FLAGS_gtest_filterE_ZN7testing8internal35FLAGS_gtest_internal_run_death_testE_ZN7testing22FLAGS_gtest_list_testsE_ZN7testing22FLAGS_gtest_print_timeE_ZN7testing23FLAGS_gtest_random_seedE_ZN7testing18FLAGS_gtest_repeatE_ZN7testing19FLAGS_gtest_shuffleE_ZN7testing29FLAGS_gtest_stack_trace_depthE_ZN7testing28FLAGS_gtest_stream_result_toE_ZN7testing28FLAGS_gtest_throw_on_failureE_ZN7testing4TestC1Ev_ZN7testing4TestD2Ev_ZN7testing4TestD1Ev_ZN7testing4TestD0Ev_ZN7testing8internal12UnitTestImpl26RegisterParameterizedTestsEv_ZNK7testing8TestCase11GetTestInfoEi_ZN7testing8TestCase18GetMutableTestInfoEi_ZN7testing8TestCase11ClearResultEv_ZN7testing8TestCase14UnshuffleTestsEv_ZN7testing8internal16GetAnsiColorCodeENS0_10GTestColorE_ZN7testing8internal14ShouldUseColorEbgetenv_ZN7testing8internal13ColoredPrintfENS0_10GTestColorEPKczstdoutvfprintf__cxa_guard_acquirefilenoisatty__cxa_guard_release_ZN7testing8internal27PrettyUnitTestResultPrinter24OnEnvironmentsSetUpStartERKNS_8UnitTestEputsfflush_ZN7testing8internal27PrettyUnitTestResultPrinter27OnEnvironmentsTearDownStartERKNS_8UnitTestE_ZN7testing8internal27PrettyUnitTestResultPrinter11OnTestStartERKNS_8TestInfoE_ZN7testing8internal29PrintFullTestCommentIfPresentERKNS_8TestInfoE_ZN7testing8internal27PrettyUnitTestResultPrinter16PrintFailedTestsERKNS_8UnitTestE_ZN7testing8internal17TestEventRepeater7ReleaseEPNS_17TestEventListenerEmemmove_ZN7testing8internal24XmlUnitTestResultPrinterC2EPKcstderrfwriteexit_ZN7testing8internal24XmlUnitTestResultPrinterC1EPKc_ZN7testing8internal24XmlUnitTestResultPrinter26RemoveInvalidXmlCharactersERKSs_ZN7testing8internal24XmlUnitTestResultPrinter21OutputXmlCDataSectionEPSoPKc_ZNSo5writeEPKcistrstr_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc_ZN7testing18TestEventListenersC2Ev_ZN7testing18TestEventListenersC1Ev_ZN7testing18TestEventListenersD2Ev_ZN7testing18TestEventListenersD1Ev_ZN7testing18TestEventListeners7ReleaseEPNS_17TestEventListenerE_ZN7testing18TestEventListeners8repeaterEv_ZNK7testing18TestEventListeners22EventForwardingEnabledEv_ZN7testing18TestEventListeners23SuppressEventForwardingEv_ZNK7testing8UnitTest26successful_test_case_countEv_ZNK7testing8UnitTest22failed_test_case_countEv_ZNK7testing8UnitTest21total_test_case_countEv_ZNK7testing8UnitTest22test_case_to_run_countEv_ZNK7testing8UnitTest21successful_test_countEv_ZNK7testing8UnitTest17failed_test_countEv_ZNK7testing8UnitTest30reportable_disabled_test_countEv_ZNK7testing8UnitTest19disabled_test_countEv_ZNK7testing8UnitTest21reportable_test_countEv_ZNK7testing8UnitTest16total_test_countEv_ZNK7testing8UnitTest17test_to_run_countEv_ZNK7testing8UnitTest15start_timestampEv_ZNK7testing8UnitTest12elapsed_timeEv_ZNK7testing8UnitTest6PassedEv_ZNK7testing8UnitTest6FailedEv_ZNK7testing8UnitTest11GetTestCaseEi_ZNK7testing8UnitTest18ad_hoc_test_resultEv_ZN7testing8UnitTest18GetMutableTestCaseEi_ZN7testing8UnitTest9listenersEv_ZN7testing14TestPartResultD2Ev_ZN7testing14TestPartResultD1Ev_ZN7testing12TestPropertyD2Ev_ZN7testing12TestPropertyD1Ev_ZNK7testing8UnitTest20original_working_dirEv_ZNK7testing8UnitTest11random_seedEv_ZN7testing8UnitTest27parameterized_test_registryEv_ZN7testing8internal12UnitTestImpl32SuppressTestEventsIfInSubprocessEv_ZN7testing8internal30WriteToShardStatusFileIfNeededEvfopenfclose_ZN7testing8internal20ShouldRunTestOnShardEiii_ZN7testing8internal12UnitTestImpl23ListTestsMatchingFilterEv_ZN7testing8internal12UnitTestImpl25set_os_stack_trace_getterEPNS0_27OsStackTraceGetterInterfaceE_ZN7testing8internal12UnitTestImpl19current_test_resultEv_ZN7testing8internal12UnitTestImpl14UnshuffleTestsEv_ZN7testing8internal6IsTrueEb_ZN7testing8internal10AlwaysTrueEv_ZN7testing8internal10SkipPrefixEPKcPS2_strncmp_ZN7testing8internal14ParseFlagValueEPKcS2_b_ZN7testing8internal13ParseBoolFlagEPKcS2_Pb_ZN7testing8internal15ParseStringFlagEPKcS2_PSs_ZNSs6assignEPKcj_ZN7testing8internal16InDeathTestChildEv_ZNKSs7compareEPKc_ZN7testing14ExitedWithCodeC2Ei_ZN7testing14ExitedWithCodeC1Ei_ZNK7testing14ExitedWithCodeclEi_ZN7testing14KilledBySignalC2Ei_ZN7testing14KilledBySignalC1Ei_ZNK7testing14KilledBySignalclEi_ZN7testing8internal20ExitedUnsuccessfullyEi_ZN7testing8internal23GetLastErrnoDescriptionEv__errno_locationstrerror_ZN7testing8internal9DeathTest11LastMessageEv_ZN7testing8internal9DeathTest24last_death_test_message_E_ZN7testing8internal9DeathTest27set_last_death_test_messageERKSs_ZN7testing8internal21StackLowerThanAddressEPKvPb_ZN7testing8internal14StackGrowsDownEv_ZNK7testing8internal8FilePath21FindLastPathSeparatorEvstrrchr_ZNK7testing8internal8FilePath21FileOrDirectoryExistsEv__xstat_ZNK7testing8internal8FilePath15DirectoryExistsEv_ZNK7testing8internal8FilePath15IsRootDirectoryEv_ZNK7testing8internal8FilePath14IsAbsolutePathEv_ZNK7testing8internal8FilePath11IsDirectoryEv_ZNK7testing8internal8FilePath12CreateFolderEvmkdir_ZN7testing8internal8FilePath9NormalizeEv_Znajmemset_ZdaPv_ZN7testing8internal8FilePath13GetCurrentDirEvgetcwd_ZNK7testing8internal8FilePath19RemoveDirectoryNameEv_ZN7testing8internal24GetCurrentExecutableNameEv_ZN7testing8internal17g_executable_pathE_ZNK7testing8internal8FilePath14RemoveFileNameEv_ZNK7testing8internal8FilePath27RemoveTrailingPathSeparatorEv_ZNK7testing8internal8FilePath28CreateDirectoriesRecursivelyEv_ZNK7testing8internal8FilePath15RemoveExtensionEPKc_ZN7testing8internal14GetThreadCountEv_ZN7testing8internal2RED2Evregfreefree_ZN7testing8internal2RED1Ev_ZN7testing8internal2RE9FullMatchEPKcRKS1_regexec_ZN7testing8internal2RE12PartialMatchEPKcRKS1__ZN7testing8internal8GTestLogD2Ev_ZSt4cerr_ZNSo3putEc_ZNSo5flushEv_ZNKSt5ctypeIcE13_M_widen_initEv_ZSt16__throw_bad_castv_ZN7testing8internal8GTestLogD1Ev_ZN7testing8internal14CapturedStream11GetFileSizeEP8_IO_FILEfseekftell_ZN7testing8internal14CapturedStream14ReadEntireFileEP8_IO_FILEfread_ZN7testing8internal17GetCapturedStreamEPPNS0_14CapturedStreamEdup2closeremove_ZN7testing8internal17GetCapturedStdoutEv_ZN7testing8internal17GetCapturedStderrEv_ZN7testing8internal18SetInjectableArgvsEPKSt6vectorISsSaISsEE_ZN7testing8internal18GetInjectableArgvsEv_ZN7testing8internal7g_argvsE_ZN7testing9internal220PrintBytesInObjectToEPKhjPSo_ZNSo9_M_insertImEERSoT__ZN7testinglsERSoRKNS_14TestPartResultE_ZNSolsEi_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate_ZNK7testing19TestPartResultArray17GetTestPartResultEi_ZNK7testing19TestPartResultArray4sizeEv_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE_ZTVSt15basic_streambufIcSt11char_traitsIcEE_ZNSt6localeD1Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev_ZN7testing7MessageC2Ev_ZNSt8ios_baseC2Ev_ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZTVSt9basic_iosIcSt11char_traitsIcEE_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNSt6localeC1Ev_ZNSt8ios_baseD2Ev_ZNSdD2Ev_ZN7testing7MessageC1Ev_ZN7testing8internal30GetBoolAssertionFailureMessageERKNS_15AssertionResultEPKcS5_S5__ZN7testing8internal10ParseInt32ERKNS_7MessageEPKcPistrtol_ZN7testing8internal17Int32FromEnvOrDieEPKci_ZN7testing8internal14ParseInt32FlagEPKcS2_Pitoupper_ZN7testing8internal16BoolFromGTestEnvEPKcb_ZN7testing8internal18StringFromGTestEnvEPKcS2__ZN7testing8internal17Int32FromGTestEnvEPKci_ZN7testing7MessageC2ERKS0__ZN7testing7MessageC1ERKS0__ZN7testing8internal11ShouldShardEPKcS2_b_ZN7testing8internal6String12FormatHexIntEi_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev_ZN7testing8internal27FormatTimeInMillisAsSecondsEx_ZNSo9_M_insertIdEERSoT__ZN7testing8internal6String15FormatIntWidth2Ei_ZN7testing8internal6String10FormatByteEh_ZN7testing8internal24XmlUnitTestResultPrinter9EscapeXmlERKSsb_ZN7testing8internal24XmlUnitTestResultPrinter29TestPropertiesAsXmlAttributesERKNS_10TestResultE_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev_ZN7testing8internal10scoped_ptrISsE5resetEPSs_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_b_ZNK7testing15AssertionResultntEv_ZN7testing16AssertionFailureERKNS_7MessageE_ZN7testing8internal10scoped_ptrINS0_24InternalRunDeathTestFlagEE5resetEPS2__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZN7testing8internal15CodePointToUtf8Ej_ZN7testing8internal16WideStringToUtf8EPKwi_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmodewcslen_ZN7testing7MessagelsERKSbIwSt11char_traitsIwESaIwEE_ZN7testing8internal6String15ShowWideCStringEPKw_ZN7testing7MessagelsEPKw_ZN7testing7MessagelsEPwisxdigit_ZN7testing8internal19UniversalPrintArrayEPKcjPSo_ZN7testing8internal7PrintToEPKcPSo_ZNSo9_M_insertIPKvEERSoT__ZN7testing8internal13PrintStringToERKSsPSo_ZN7testing13PrintToStringIPKcEESsRKT__ZN7testing8internal14CmpHelperSTREQEPKcS2_S2_S2__ZN7testing8internal18CmpHelperSTRCASEEQEPKcS2_S2_S2__ZN7testing8internal19UniversalPrintArrayEPKwjPSo_ZN7testing8internal7PrintToEPKwPSo_ZN7testing8internal17PrintWideStringToERKSbIwSt11char_traitsIwESaIwEEPSo_ZN7testing13PrintToStringIPKwEESsRKT__ZNSbIwSt11char_traitsIwESaIwEEC1EPKwRKS1__ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1__ZN7testing8internal14CmpHelperSTREQEPKcS2_PKwS4__ZN7testing8internal17StreamingListener9UrlEncodeEPKc_ZN7testing8internal18StreamableToStringIiEESsRKT__ZN7testing8internal27PrettyUnitTestResultPrinter15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal27PrettyUnitTestResultPrinter20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing8internal18StreamableToStringIxEESsRKT__ZNSo9_M_insertIxEERSoT__ZN7testing8internal27PrettyUnitTestResultPrinter9OnTestEndERKNS_8TestInfoE_ZN7testing8internal27PrettyUnitTestResultPrinter13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal27PrettyUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8__ZN7testing8internal8FilePath11ConcatPathsERKS1_S3__ZNSs6appendEjc__divdi3_ZN7testing8internal32FormatEpochTimeInMillisAsIso8601Exlocaltime_ZN7testing8internal8FilePath12MakeFileNameERKS1_S3_iPKc_ZN7testing8internal8FilePath22GenerateUniqueFileNameERKS1_S3_PKc_ZN7testing8internal18FormatFileLocationEPKci_ZN7testing8internal8GTestLogC2ENS0_16GTestLogSeverityEPKci_ZN7testing8internal8GTestLogC1ENS0_16GTestLogSeverityEPKci_ZN7testing8internal13CaptureStreamEiPKcPPNS0_14CapturedStreamEdupmkstemp_ZN7testing8internal13CaptureStdoutEv_ZN7testing8internal13CaptureStderrEv_ZN7testing8internal17StreamingListener12SocketWriter14MakeConnectionEvgetaddrinfosocketconnectfreeaddrinfogai_strerror_ZN7testing8internal17StreamingListener12SocketWriter15CloseConnectionEv_ZN7testing8internal5MutexD2Evpthread_mutex_destroy_ZN7testing8internal5MutexD1Ev_ZN7testing8internal9MutexBase6UnlockEvpthread_mutex_unlock_ZN7testing8internal9MutexBase4LockEvpthread_mutex_lockpthread_self_ZN7testing8internal17StreamingListener12SocketWriter4SendERKSswrite_ZN7testing8internal6Random8GenerateEj_ZN7testing8internal13DeathTestImpl6PassedEb_ZN7testing8internal17StreamingListener12SocketWriterD2Ev_ZTVN7testing8internal17StreamingListener12SocketWriterE_ZN7testing8internal17StreamingListener12SocketWriterD1Ev_ZN7testing8internal17StreamingListener12SocketWriterD0Ev_ZN7testing8internal17StreamingListenerD2Ev_ZTVN7testing8internal17StreamingListenerE_ZN7testing8internal17StreamingListenerD1Ev_ZN7testing8internal17StreamingListenerD0Ev_ZN7testing8internal17StreamingListener20AbstractSocketWriter6SendLnERKSs_ZN7testing8internal17StreamingListener11OnTestStartERKNS_8TestInfoE_ZN7testing8internal17StreamingListener15OnTestCaseStartERKNS_8TestCaseE_ZN7testing8internal17StreamingListener16OnTestProgramEndERKNS_8UnitTestE_ZN7testing8internal17StreamingListener16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal17StreamingListener20OnTestIterationStartERKNS_8UnitTestEi_ZN7testing10TestResultC2Evpthread_mutex_init_ZN7testing10TestResultC1Ev_ZN7testing8internal18OsStackTraceGetterD2Ev_ZTVN7testing8internal18OsStackTraceGetterE_ZN7testing8internal18OsStackTraceGetterD1Ev_ZN7testing8internal18OsStackTraceGetterD0Ev_ZN7testing8internal12UnitTestImpl21os_stack_trace_getterEv_ZN7testing8internal12UnitTestImpl31SetGlobalTestPartResultReporterEPNS_31TestPartResultReporterInterfaceE_ZN7testing8internal12UnitTestImpl31GetGlobalTestPartResultReporterEv_ZNK7testing8UnitTest17current_test_caseEv_ZNK7testing8UnitTest17current_test_infoEv_ZN7testing8internal38DefaultPerThreadTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing10TestResultD2Ev_ZN7testing10TestResultD1Ev_ZN7testing8internal17StreamingListener18OnTestProgramStartERKNS_8UnitTestE_ZN7testing8internal26GoogleTestFailureExceptionC2ERKNS_14TestPartResultE_ZNSt13runtime_errorC2ERKSs_ZN7testing8internal26GoogleTestFailureExceptionC1ERKNS_14TestPartResultE_ZN7testing8internal27PrettyUnitTestResultPrinter16OnTestPartResultERKNS_14TestPartResultE_ZN7testing8internal25ReportInvalidTestCaseTypeEPKcS2_ifprintf_ZN7testing8internal37FormatCompilerIndependentFileLocationEPKci_ZN7testing8internal17AppendUserMessageERKSsRKNS_7MessageE_ZN7testing8internal17StreamingListener9OnTestEndERKNS_8TestInfoE_ZN7testing8internal17StreamingListener13OnTestCaseEndERKNS_8TestCaseE_ZN7testing8internal17StreamingListener18OnTestIterationEndERKNS_8UnitTestEi_ZN7testing15AssertionResultlsINS_7MessageEEERS0_RKT__ZN7testing15AssertionResultlsIA11_cEERS0_RKT__ZN7testing15AssertionResultlsISsEERS0_RKT__ZN7testing15AssertionResultlsIA2_cEERS0_RKT__ZN7testing15AssertionResultlsINS_14TestPartResultEEERS0_RKT__ZN7testing15AssertionResultlsIA3_cEERS0_RKT__ZN7testing8internal13HasOneFailureEPKcS2_S2_RKNS_19TestPartResultArrayENS_14TestPartResult4TypeERKSs_ZN7testing15AssertionResultlsIPKcEERS0_RKT__ZN7testing11IsSubstringEPKcS1_S1_S1__ZN7testing14IsNotSubstringEPKcS1_S1_S1__ZNKSs4findEPKcjj_ZN7testing11IsSubstringEPKcS1_RKSsS3__ZN7testing14IsNotSubstringEPKcS1_RKSsS3__ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjj_ZN7testing11IsSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7__ZN7testing14IsNotSubstringEPKcS1_RKSbIwSt11char_traitsIwESaIwEES7_wcsstr_ZN7testing11IsSubstringEPKcS1_PKwS3__ZN7testing14IsNotSubstringEPKcS1_PKwS3__ZN7testing15AssertionResultlsIA5_cEERS0_RKT__ZN7testing15AssertionResultlsIA7_cEERS0_RKT__ZN7testing8internal20DoubleNearPredFormatEPKcS2_S2_ddd_ZN7testing15AssertionResultlsIA12_cEERS0_RKT__ZN7testing8internal14CmpHelperSTRNEEPKcS2_PKwS4__ZN7testing8internal14CmpHelperSTRNEEPKcS2_S2_S2__ZN7testing8internal18CmpHelperSTRCASENEEPKcS2_S2_S2__ZN7testing8internal15FloatingPointLEIfEENS_15AssertionResultEPKcS4_T_S5__ZN7testing7FloatLEEPKcS1_ff_ZN7testing8internal15FloatingPointLEIdEENS_15AssertionResultEPKcS4_T_S5__ZN7testing8DoubleLEEPKcS1_dd_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Evpthread_getspecificpthread_key_delete_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED1Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED2Ev_ZN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEED1Ev_ZN7testing8internal12ShuffleRangeIiEEvPNS0_6RandomEiiPSt6vectorIT_SaIS5_EE_ZN7testing8TestCase12ShuffleTestsEPNS_8internal6RandomE_ZN7testing8internal12UnitTestImpl12ShuffleTestsEv_ZN7testing8internal18ParseNaturalNumberIiEEbRKSsPT_strtoull_ZN7testing8internal18PrintCharAndCodeToIhhEEvT0_PSo_ZN7testing8internal7PrintToEhPSo_ZN7testing8internal18PrintCharAndCodeToIhaEEvT0_PSo_ZN7testing8internal7PrintToEaPSo_ZN7testing8internal18PrintCharAndCodeToIwwEEvT0_PSo_ZN7testing8internal7PrintToEwPSo_ZN7testing8internal10scoped_ptrIKSsE5resetEPS2__ZN7testing8TestInfoD2Ev_ZN7testing8TestInfoD1Ev_ZN7testing8TestCaseD2Ev_ZTVN7testing8TestCaseE_ZN7testing8TestCaseD1Ev_ZN7testing8TestCaseD0Ev_ZN7testing8internal12UnitTestImplD2Ev_ZTVN7testing8internal12UnitTestImplE_ZN7testing8internal12UnitTestImplD1Ev_ZN7testing8internal12UnitTestImplD0Ev_ZN7testing8UnitTestD2Ev_ZTVN7testing8UnitTestE_ZN7testing8UnitTestD1Ev_ZN7testing8UnitTestD0Ev_ZN7testing8TestCaseC2EPKcS2_PFvvES4__ZN7testing8TestCaseC1EPKcS2_PFvvES4__ZN7testing8TestInfoC2ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE_ZN7testing8TestInfoC1ERKSsS2_PKcS4_PKvPNS_8internal15TestFactoryBaseE_ZNSt6vectorIPN7testing8TestInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi_ZN7testing8TestCase11AddTestInfoEPNS_8TestInfoE_ZNSt6vectorIPN7testing17TestEventListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal12UnitTestImpl24ConfigureStreamingOutputEv_ZN7testing8internal17TestEventRepeater6AppendEPNS_17TestEventListenerE_ZN7testing18TestEventListeners6AppendEPNS_17TestEventListenerE_ZN7testing18TestEventListeners23SetDefaultResultPrinterEPNS_17TestEventListenerE_ZN7testing8internal12UnitTestImplC2EPNS_8UnitTestEpthread_key_create_ZTVN7testing8internal23DefaultDeathTestFactoryE_ZTVN7testing8internal27PrettyUnitTestResultPrinterE_ZN7testing8internal12UnitTestImplC1EPNS_8UnitTestE_ZN7testing8UnitTestC2Ev_ZN7testing8UnitTestC1Ev_ZN7testing8UnitTest11GetInstanceEv__dso_handle__cxa_atexit__cxa_guard_abort_ZN7testing8internal15UnitTestOptions27GetAbsolutePathToOutputFileEv_ZN7testing4Test15HasFatalFailureEv_ZN7testing4Test18HasNonfatalFailureEv_ZN7testing8internal31GetCurrentOsStackTraceExceptTopEPNS_8UnitTestEi_ZN7testing8internal14DeathTestAbortERKSsfdopenfputcfputs_exit_ZN7testing8internal13DeathTestImpl26ReadAndInterpretStatusByteEvread_ZN7testing8internal13DeathTestImpl5AbortENS0_9DeathTest11AbortReasonE_ZN7testing8internal16ForkingDeathTest4WaitEvwaitpid_ZN7testing8internal15NoExecDeathTestD2Ev_ZTVN7testing8internal13DeathTestImplE_ZN7testing8internal15NoExecDeathTestD1Ev_ZN7testing8internal13ExecDeathTestD2Ev_ZN7testing8internal13ExecDeathTestD1Ev_ZN7testing8internal15NoExecDeathTestD0Ev_ZN7testing8internal13ExecDeathTestD0Ev_ZN7testing8internal9DeathTestC2Ev_ZTVN7testing8internal9DeathTestE_ZN7testing8internal9DeathTestC1Ev_ZN7testing8internal16ForkingDeathTestC2EPKcPKNS0_2REE_ZTVN7testing8internal16ForkingDeathTestE_ZN7testing8internal16ForkingDeathTestC1EPKcPKNS0_2REE_ZN7testing8internal9DeathTest6CreateEPKcPKNS0_2REES3_iPPS1__ZN7testing8internal15NoExecDeathTest10AssumeRoleEvpipefork_ZN7testing8internal23DefaultDeathTestFactory6CreateEPKcPKNS0_2REES3_iPPNS0_9DeathTestE_ZTVN7testing8internal15NoExecDeathTestE_ZTVN7testing8internal13ExecDeathTestEchdirenvironexecve_ZN7testing18TestEventListeners22SetDefaultXmlGeneratorEPNS_17TestEventListenerE_ZN7testing8internal12UnitTestImpl18ConfigureXmlOutputEv_ZNSt6vectorIPN7testing11EnvironmentESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8UnitTest14AddEnvironmentEPNS_11EnvironmentE_ZNSt6vectorIPN7testing8TestCaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8internal18StreamableToStringIPcEESsRKT__ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt6vectorIPcSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE_ZNKSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSsmemcmp_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS___cxa_begin_catch__cxa_rethrow__cxa_end_catch_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalISt6vectorINS0_9TraceInfoESaIS4_EEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZTSN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZTIN7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE11ValueHolderE_ZTIN7testing8internal26ThreadLocalValueHolderBaseE__dynamic_cast__cxa_bad_typeid_ZN7testing13PrintToStringIxEESsRKT__ZN7testing8internal11CmpHelperEQEPKcS2_xx_ZN7testing8internal11CmpHelperNEEPKcS2_xx_ZN7testing8internal11CmpHelperLEEPKcS2_xx_ZN7testing8internal11CmpHelperLTEPKcS2_xx_ZN7testing8internal11CmpHelperGEEPKcS2_xx_ZN7testing8internal11CmpHelperGTEPKcS2_xx_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_St26random_access_iterator_tag_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEENS0_5__ops16_Iter_equals_valIS2_EEET_SB_SB_T0_St26random_access_iterator_tag_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_St26random_access_iterator_tag_ZN7testing8internal12UnitTestImpl11GetTestCaseEPKcS3_PFvvES5__ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_PKvPFvvES6_PNS0_15TestFactoryBaseE_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag_ZSt19__throw_logic_errorPKc_ZNSs4_Rep9_S_createEjjRKSaIcEmemcpy_ZN7testing8internal15UnitTestOptions17FilterMatchesTestERKSsS3__ZN7testing8internal12UnitTestImpl11FilterTestsENS1_18ReactionToShardingE_ZN7testing14TestPartResult14ExtractSummaryEPKc_ZN7testing8internal17kStackTraceMarkerE_ZN7testing8internal19TypedTestCasePState25VerifyRegisteredTestNamesEPKciS3_isspace_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIwEEvPiPPT__ZN7testing8internal11g_help_flagE_ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPw_ZN7testing8internal28ParseGoogleTestFlagsOnlyImplIcEEvPiPPT__ZN7testing8internal24ParseGoogleTestFlagsOnlyEPiPPc_ZN7testing8internal27CheckedDowncastToActualTypeINS0_11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderENS0_26ThreadLocalValueHolderBaseEEEPT_PT0__ZTSN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZTIN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderE_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv_ZTVN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE11ValueHolderEpthread_setspecific_ZN7testing8internal12UnitTestImpl41GetTestPartResultReporterForCurrentThreadEv_ZN7testing8internal12UnitTestImpl41SetTestPartResultReporterForCurrentThreadEPNS_31TestPartResultReporterInterfaceE_ZN7testing8internal24HasNewFatalFailureHelperD2Ev_ZTVN7testing8internal24HasNewFatalFailureHelperE_ZN7testing8internal24HasNewFatalFailureHelperD1Ev_ZN7testing8internal24HasNewFatalFailureHelperD0Ev_ZN7testing32ScopedFakeTestPartResultReporterD2Ev_ZTVN7testing32ScopedFakeTestPartResultReporterE_ZN7testing32ScopedFakeTestPartResultReporterD1Ev_ZN7testing32ScopedFakeTestPartResultReporterD0Ev_ZN7testing8internal24HasNewFatalFailureHelperC2Ev_ZN7testing8internal24HasNewFatalFailureHelperC1Ev_ZN7testing32ScopedFakeTestPartResultReporter4InitEv_ZN7testing32ScopedFakeTestPartResultReporterC2EPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC1EPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC2ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZN7testing32ScopedFakeTestPartResultReporterC1ENS0_13InterceptModeEPNS_19TestPartResultArrayE_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZN7testing8internal13ExecDeathTest10AssumeRoleEvfcntlstrdupsigemptysetsigactiongetpagesizemmapclonemunmap_ZSt17__throw_bad_allocv_ZN7testing8internal24XmlUnitTestResultPrinter18OutputXmlAttributeEPSoRKSsS4_S4__ZN7testing8internal24XmlUnitTestResultPrinter17OutputXmlTestInfoEPSoPKcRKNS_8TestInfoE_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlTestCaseEPSoRKNS_8TestCaseE_ZN7testing8internal24XmlUnitTestResultPrinter16PrintXmlUnitTestEPSoRKNS_8UnitTestE_ZN7testing8internal24XmlUnitTestResultPrinter18OnTestIterationEndERKNS_8UnitTestEi_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs_ZN7testing8internal29ParseInternalRunDeathTestFlagEv_ZN7testing8internal12UnitTestImpl19PostFlagParsingInitEv_ZN7testing8internal18InitGoogleTestImplIcEEvPiPPT__ZN7testing8internal18g_init_gtest_countE_ZN7testing14InitGoogleTestEPiPPc_ZN7testing8internal18InitGoogleTestImplIwEEvPiPPT__ZN7testing14InitGoogleTestEPiPPw_ZNSt12_Destroy_auxILb0EE9__destroyIPN7testing8internal9TraceInfoEEEvT_S6__ZNK7testing8internal11ThreadLocalISt6vectorINS0_9TraceInfoESaIS3_EEE16GetOrCreateValueEv_ZN7testing8UnitTest17AddTestPartResultENS_14TestPartResult4TypeEPKciRKSsS6___cxa_allocate_exception_ZTIN7testing8internal26GoogleTestFailureExceptionE__cxa_throw__cxa_free_exception_ZNK7testing8internal12AssertHelperaSERKNS_7MessageE_ZN7testing8internal20SingleFailureCheckerD2Ev_ZN7testing8internal20SingleFailureCheckerD1Ev_ZN7testing24ValidateTestPropertyNameERKSsRKSt6vectorISsSaISsEE_ZN7testing10TestResult20ValidateTestPropertyERKSsRKNS_12TestPropertyE_ZN7testing4Test19HasSameFixtureClassEv_ZN7testing8internal2RE4InitEPKcregcomp_ZN7testing8internal30ReportFailureInUnknownLocationENS_14TestPartResult4TypeERKSs_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc_ZTISt9exception_ZN7testing4Test3RunEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_15TestFactoryBaseEPNS_4TestEEET0_PT_MS6_FS5_vEPKc_ZN7testing8TestInfo3RunEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_8TestCaseEvEET0_PT_MS4_FS3_vEPKc_ZN7testing8TestCase3RunEv_ZN7testing8internal12UnitTestImpl11RunAllTestsEv_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS0_12UnitTestImplEbEET0_PT_MS4_FS3_vEPKc_ZN7testing8UnitTest3RunEv_ZN7testing8UnitTest13PopGTestTraceEv_ZN7testing8internal11ScopedTraceD2Ev_ZN7testing8internal11ScopedTraceD1Ev_ZNSt6vectorIN7testing8internal9TraceInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZN7testing8UnitTest14PushGTestTraceERKNS_8internal9TraceInfoE_ZN7testing8internal11ScopedTraceC2EPKciRKNS_7MessageE_ZN7testing8internal11ScopedTraceC1EPKciRKNS_7MessageE_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing14TestPartResultES4_EET0_T_S6_S5__ZNSt6vectorIN7testing14TestPartResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZN7testing8internal35DefaultGlobalTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZN7testing10TestResult17AddTestPartResultERKNS_14TestPartResultE_ZN7testing19TestPartResultArray6AppendERKNS_14TestPartResultE_ZN7testing32ScopedFakeTestPartResultReporter20ReportTestPartResultERKNS_14TestPartResultE_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN7testing12TestPropertyES4_EET0_T_S6_S5__ZNSt6vectorIN7testing12TestPropertyESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZN7testing10TestResult14RecordPropertyERKSsRKNS_12TestPropertyE_ZN7testing8internal12UnitTestImpl14RecordPropertyERKNS_12TestPropertyE_ZNSs6assignEPKc_ZN7testing8UnitTest14RecordPropertyERKSsS2__ZN7testing4Test14RecordPropertyERKSsS2__ZN7testing4Test14RecordPropertyERKSsi_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitD1Ev_ZNSsD1Ev_ZN7testing8internal23kTestTypeIdInGoogleTestE_ZTVN10__cxxabiv117__class_type_infoE_ZTSN7testing8internal26ThreadLocalValueHolderBaseE_ZTVN10__cxxabiv120__si_class_type_infoE_ZTSN7testing8internal26GoogleTestFailureExceptionE_ZTISt13runtime_error_ZTIN7testing8internal9DeathTestE_ZTSN7testing8internal9DeathTestE_ZTIN7testing8internal16DeathTestFactoryE_ZTSN7testing8internal16DeathTestFactoryE_ZTSN7testing8internal23DefaultDeathTestFactoryE_ZTIN7testing8internal23DefaultDeathTestFactoryE_ZTIN7testing31TestPartResultReporterInterfaceE_ZTSN7testing31TestPartResultReporterInterfaceE_ZTSN7testing8internal24HasNewFatalFailureHelperE_ZTIN7testing8internal24HasNewFatalFailureHelperE_ZTSN7testing4TestE_ZTIN7testing4TestE_ZTSN7testing8TestCaseE_ZTIN7testing8TestCaseE_ZTIN7testing17TestEventListenerE_ZTSN7testing17TestEventListenerE_ZTIN7testing22EmptyTestEventListenerE_ZTSN7testing22EmptyTestEventListenerE_ZTSN7testing8UnitTestE_ZTIN7testing8UnitTestE_ZTSN7testing32ScopedFakeTestPartResultReporterE_ZTIN7testing32ScopedFakeTestPartResultReporterE_ZTIN7testing8internal27OsStackTraceGetterInterfaceE_ZTSN7testing8internal27OsStackTraceGetterInterfaceE_ZTSN7testing8internal18OsStackTraceGetterE_ZTIN7testing8internal18OsStackTraceGetterE_ZTSN7testing8internal35DefaultGlobalTestPartResultReporterE_ZTIN7testing8internal35DefaultGlobalTestPartResultReporterE_ZTSN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZTIN7testing8internal38DefaultPerThreadTestPartResultReporterE_ZTSN7testing8internal12UnitTestImplE_ZTIN7testing8internal12UnitTestImplE_ZTIN7testing8internal17StreamingListener20AbstractSocketWriterE_ZTSN7testing8internal17StreamingListener20AbstractSocketWriterE_ZTIN7testing8internal17StreamingListener12SocketWriterE_ZTSN7testing8internal17StreamingListener12SocketWriterE_ZTIN7testing8internal17StreamingListenerE_ZTSN7testing8internal17StreamingListenerE_ZTSN7testing8internal27PrettyUnitTestResultPrinterE_ZTIN7testing8internal27PrettyUnitTestResultPrinterE_ZTSN7testing8internal17TestEventRepeaterE_ZTIN7testing8internal17TestEventRepeaterE_ZTSN7testing8internal24XmlUnitTestResultPrinterE_ZTIN7testing8internal24XmlUnitTestResultPrinterE_ZTSN7testing8internal13DeathTestImplE_ZTIN7testing8internal13DeathTestImplE_ZTSN7testing8internal16ForkingDeathTestE_ZTIN7testing8internal16ForkingDeathTestE_ZTSN7testing8internal15NoExecDeathTestE_ZTIN7testing8internal15NoExecDeathTestE_ZTSN7testing8internal13ExecDeathTestE_ZTIN7testing8internal13ExecDeathTestE_ZNKSt13runtime_error4whatEv__cxa_pure_virtual_ZN7testing8internal18OsStackTraceGetter19kElidedFramesMarkerE_ZN7testing8internal18g_linked_ptr_mutexE_ZN7testing38FLAGS_gtest_show_internal_stack_framesE__pthread_key_createD –ĸ ē Ū]äû# ]%$D]I$b“%˛(Č1Ô]Ü234 (R3]4k(’]—pœ5Ģ(ž Å]ĘpĪ5Ü(õ(U ]] 6e 7p 8š 8š 8â 7ō 8 ] 8; <a { ƒ  Ĩ (° Ú Aė B C" 8 ]> L  Æ D B D1 Gz Lš Oô T V4 ëT ėt í” ī´ îŪ ]ä ^i`Á<ĖIįī YfŠhjhmt(‡nž]¤2Ûnī((E(Z(m lŅrŲpŪ5!r)p.5g(t(ˆ(ž(¸(((((>(X(Ž(ĸ(ˇ(,qxvČvVeVM~T<[(b(k(r(y(€(‡€š§‚­ƒˇ„ŊƒÆ…Ņ†×ƒá‡įƒđˆûAƒ ‰Š‹$Œ,7Ž=ƒDa(v(‹( (ĩ(Ę(Ũå ~€%.‚3ƒ>„CƒN…W†\ƒg‡lƒwˆ€A…ƒ‰˜Š ‹ŠŒąēŽŋƒËÖ(ã(đ(ũ( (($›(°(Å(Ú(ī(( *‘ÎuíuAW‚`]fgu]{g”]šgŠ]¯gž]Ä_Ô]Ų›â]č_÷]ũ_ ]_!]'_6]<_K]Q_`]f_‚—ēÃ]Č$ĶØžß]ä$÷üžŸ-2 :ĄJšQX]ĸ„]‹œ’p—¤œ´]ģœÂpĮ¤Ėé]đœũ]$#€]…$šŸ]¤$ĩ]ē$ƐË]Đ$VĩVí• v< ]C œQ ]V $^ ¨j #!ĢD!'N!e!­n!ps!Žz!­!Ĩ‹!¯Ą!(ŗ! Î!(Ū!nB"n\"(›"(Ž" Ņ"]×"8ė"ŗö"]ü"8#] #´ #ĩ*#]0#8K#<Q# ¤#¯# Ä$Tä$V%ë$%ėD%íd%ī„%îí%x&v=&xe'j'›{']'Ú‘'Ûž'¤'pĢ'œ˛'ˇ'ĨÃ'¯O(]T($l(q(]v($•(#É(]Î($æ(ë(]đ($ )#I)q*7€*äŽ*]ŗ*ãÃ*]Č*ãØ*]Ũ*ãõ*]ú*ã +]+ã%+]*+ãp+]v+‚+IŒ+]’+2ž+IĻ+7ą+2ŋ+(Ė+(æ+äõ+(r,(‡,(œ,(¯, ŧ,(î,å?-åS-7a-č„-]‰-„Ž-ęš-Ą-‡U.ķ`.]m.ô.‘.ö¨.ö­.ƒî.ø /û1/ũQ/ũā/,0B0˜07Ŗ0čŧ0]Â0č 1 1]-161I>1O1(‹1(Ą1 ­1(Ķ1ûî1÷1I˙1 2(&2IQ2 ^2(x2(¤2]Ē2ą2 ˇ2Iŋ2Č2ƒÖ2(â2 đ2(43(G3 T3(„3û3(Ļ3C˛3ƒĀ3(Ė3IÔ3â3(44č;4(N4 Z4(u4(ˇ4IŲ43â4Ię4ø4(5($5 05(…5ūž5§5 ĩ5(Ā5Ô5(í5 6(6 *6(T6]Z6f6Io67|62Š6(œ6kŊ63Æ6IÎ6Ü6(é6(7I7(V7(k7(v7 ‡7( 7(¸7(ö78D8„8Ĩ8Ž8Å8Ę8Ō8õ89Ė#9­(9Ĩ-9r29N9!o9 y9ˆ9!Š9$Â9CĘ9ũ9Ĩ :&:'$:],:Ú7:#=:ÛQ:(_:(j:š:(­: É:Ī:%é:ī:% ;5;(\;h;q;;†;-Ĩ;/¯;]ĩ;8Ü;]â;8 <]E<]a<]f<]‡<7–<8Ŗ<]Š<8˛<1ž<]Ä<8Ė<7×<8á<]į<8û<7=8.=[=2u=ˆ=Ėŗ=2Ā=ø=pũ=$>rO><\>;b><o><v>=Í>>Ø><â><ō>>÷><ũ><??????$?7V?@]?6k?(t?>Ą?=§?A¯?ˇ? Ã?9Ę?<Đ?Bá?<@:*@]3@8G@7X@8h@]q@8…@7–@8Ž@]ˇ@8Č@ĩÕ@]Ū@8î@]÷@8 A7A8-Al[A]oA]xAĩA]˜Aĩ¯A]¸AĩÛA ûAF8B:EB]NB8dBlsB8B(”BpB8ĒB]ŗB8ÂBĩĪB]ØB8æBlīB]ôB$C(CCĨHC:UC]^C8tClƒC8‘C(¤Cp­C8ēC]ÃC8ŌCĩßC]čC8öCl˙C]D$D(D"DĨ‡D ”D(ŋD(ØD(ôD(E›3E:@EpIE8QE7bE8pEEąE¯ĪE ķEå F:F]"F82F7CF8SFE—F] FĩĀF âF:īF]øF8Gĩ%GlGG:iGI~G8˜GlšG(ĐG]ŲGĩũG(H oH›{H]“H(ŲH›ņH(.I›JI:WI]`I8vI8„IEąI(ØI:įI1õIlūIpJ$J(8J=JĨNJ(‡J(šJ ÂJ( KGKGlK:yKp‚K8ŒK•KĩĸK]ĢK8¸KÁK8ÎK]×K8äKíK8úK]L8L1L](L85L>L8KL]TL8cL1pL]yL8…LN§Ll˛LœĀL(ĪLÔLĨáL¯đL:ũLpM8MMĩ&M],Mĩ;M1HM]QM8^MgM8tM]}M8‰MNĢMlļMœÄM(ĶMØMĨđM:úMpNĩNNĩ N])Nĩ8N1BN]KNĩUN^NĩkN]qNĩ}NNŸNlĒNœ¸N(ÃNČNĨO O(ÆO(ũO(DP;JP<TP<^P=˛P>¸P<ÄP<ÚP>āP<æP<Q? Q?Q?!Q7bQ@tQ6ˆQ(•Q>šQ1ĘQmŨQ?įQ?ņQ?ûQ6R(R7"R8+R<1R<=R<CR<sR={RAąR=ˇRAŋR ĐRQØR éR9öR<üRBS<FS;LS<VS<`S=´S>šS<ŋS<ÜS>áS<įS<T? T?T?(T7iT@wT6‹T(T>ĸTŌŽTSšTmĖT?ÖT?āT?ęT6ōT( U7U8U<U<"U<(U<7U<dU=iUA›U=ĄUAŠU ēUQÂU ÍU9ÚU<āUBîU<$V;*V<4V<>V=’V>—V<žV<ēV>ĀV<ÆV<āV?ęV?ôV?W7BW@SW6oW(uW>ĩW1ÆWmŲW?ãW?íW?÷W6˙W(X7X8'X<-X<3X<?X<oX=wXAŊXĐXĖYYQY -Y9:Y<@YBVY=\YAdY sY<§Y;­Y<ˇY<ÁY=Z>Z<3Z<=Z>CZ<IZ<cZ?mZ?wZ?„Z7ÅZ@ÖZ6ōZ(øZ>][/n[m[?‹[?•[?Ÿ[6§[(Ā[7Æ[8Ī[<Û[<á[<\<\=\Ae\x\Ėŗ\Ä\QĖ\ Ũ\9ę\<đ\B]= ]A] #]<U]:‰]™]]ĸ]8Į]lų]]^8#^],^8A^]J^8g^]p^8ŋ^8å^8_8#_U/_]8_8N_8[_]d_8r_(—_(Ŋ_ á_:`7`8&`]/`8<`]E`8[`8h`]q`8`(`(´`sÉ`Û`Vé`]ō`8a]aĩJalŸa Ŧa(Áa(ũa: b]b8'b78b8EbęYb]bb8wb8‡b]b8¤b7ĩb8Ëb]Ôb8ãbę÷b]c8c82c:FclUc8cc(vcp˜caŦc(ˇcįc]đcĩd]dĩZdYyd Šd(Ėd:ád8údle7e2e(^e<fe(peY…e(¯eYˇe ėe:flf8f(?flKf7Zf2hf(Šfažf(Šföf<ūf(gYgY'g 4g(cg(°ghP$h]*h_3hI=h]Ch2Qh(bh(õh( i(!i(4i fibi`ĩi8Æi(îilj? j?j?j6'j(@j7Fj8Kj<Qj<`j<fj<{j<j<Ąj=ŠjAÅjcņjQųj  k(Wkaqk8k(Ŋk8ãk(ök 8laYl]_l‚le–l8¤l(Đl(ãl mem8$m(Pm(cm ‚m:‹mg•mlĶm ÷mn] n86n]Š KŠ(`Š(yŠ(–Š(̊(Š(Պ(!‹]'‹A‹ũ`‹‡j‹ƒx‹(¤‹(ˇ‹ ċ(⋐Œ!Œy-ŒI7Œ]=Œ2KŒTŒI^Œ]dŒ2rŒ(Œ(ŒŒ(™Œ(´Œ]ģŒ^Ɍ((0 =(R(g(„(Ÿ(Į]Ū]č]í]Ž‰ŽŽ5Ž:ŽBŽPŽ8ZŽ]`Ž8pŽ7{Ž8ˆŽ]ŽŽ8œŽ(ĩŽȎĖûŽ2&(9 b]jŠt]y~8’7œĄ8Žpŗ¸8Ā͏<܏ã(ŽečqĨ}&†'ąŊː2ܐä ņ(‘ ‘ ‘‘] ‘Œ4‘9‘]@‘Œn‘]v‘Š€‘p…‘Š‘8”‘p™‘ž‘8Ļ‘ؑ’’“;’”N’'p’•’–œ’]¤’ŠĢ’p°’ĩ’ĩž’ĩƒá’]é’Šđ’põ’ú’ĩ “8“]“ĩ'“8/“E“M“ X“`“ k“s“ ž“]ƓŠГpՓړ8ä“pé“î“8ö“û“/”]”8”p ”8/”/9”]?”8G”i”]q”Š{”]€”…”8”p””™”8ϔޔ š”Á” ÷”ũ”%•:•]•83•7D•8T•]]•8š•pŖ•ĩ­•]ļ•ĩĖ•8ڕ(ņ•lų•öū•ƒ –(0–(‚–p‹–ĩ˜–]ž–ĩĩ–]Ā–ĩĮ–]Ō–ĩį–8õ–("—]+—ĩ8—]>—ĩT—8b—(y—]—Šˆ—p—’—ĩš——p˗ĩ՗]Ū—ĩô—8˜(A˜i˜]r˜8Ϙ:Ƙ]Θĩۘ1ô˜]ũ˜ĩ™l0™p9™ĩF™]L™ĩb™8o™]x™8…™]Ž™8¤™8˛™(ŋ™(ؙ]á™ĩũ™(š(2š(Eš Rš(†š(—šŦš(Κ(įš(›ŗy›p›Š‹›p›•›8Ÿ›]¤›Š›8ą›ļ›1ž›Ņ›Ų› œ< œļœŗQœpYœŠcœphœmœ8wœ]|œœ8‰œŽœ1™œМąœ ŋœáœžđœŸœ)p1Š;]@E8O]TY8ch1p‰p‘Š›] Ĩ8¯]´š8ÁƝ1Νäė ÷˙ !žž0žŸFžœižpqžŠ{ž]€ž…ž8ž]”ž™ž8Ŗž¨ž1°žɞpŅžŠ۞]āžåž8īž]ôžųž8ŸŸ1Ÿ'Ÿ/Ÿ :ŸBŸ aŸžpŸŸŒŸœąŸpšŸŠß]ȟ͟8ן]ܟáŸ8ëŸđŸ1øŸ p Š# ]( - 87 ]< A 8I N 1V o w  ‚ Š  Ą ž° ŸĖ œņ pų ŠĄ]Ą Ą8Ą]Ą!Ą8+Ą0Ą18ĄQĄpYĄŠcĄ]hĄmĄ8wĄ]|ĄĄ8‰ĄŽĄ1–Ą¯ĄˇĄ ÂĄĘĄ 䥞ōĄŸĸœ9ĸpDĸŠNĸ]SĸXĸ8bĸ]gĸlĸ8tĸyĸ1‚ĸ™ĸpĻĸаĸ]ĩĸēĸ8Äĸ]ÉĸÎĸ8ÖĸÛĸ1ãĸøĸŖ  ŖŖ FŖ(ZŖ(nŖ(œŖˇŖ(ÄŖ(ØŖ(íŖ(¤(,¤8¤™Y¤pa¤Šk¤pp¤u¤8¤]„¤‰¤8‘¤–¤1ž¤´¤ŧ¤ ɤ]æ¤]Ĩ‰Ĩ:+Ĩ88Ĩ]AĨ8IĨ7ZĨ8†Ĩ8›ĨlŧĨ(ŅĨ]įĨ]đĨĩĻ(-Ļ uĻ~ĻÃŒĻ(™Ļ(ĄĻŋĻ(ŅĻåĻ(øĻ §(G§¤N§S§Ĩa§(l§q§Ĩ“§(ϧ §:ͧpÖ§8ę§7û§8 ¨]¨8!¨p*¨87¨p@¨8T¨7e¨8u¨]~¨8‹¨p”¨8Ą¨pǍ8ˇ¨p8ͨpÖ¨8ã¨]ė¨8ú¨lЉŠ] Š­%ŠĮ3Š(@Š(gŠ]pŠĩ‡Š]ŠĩÆŠ(ÛŠ(Ē Ē3ĒJĒyVĒI`Ē]fĒ2qǁĒ(ŒĒ(™Ē(ļĒIÄĒ(Ģ(Ģ "Ģ(7Ģ(iĢl€ĢIŽĢ(ŠĢIŗĢ]šĢ2Ä́ŌĢ(Ŧ(Ŧ %Ŧ(BŦ]GŦ]gŦrŦ:—Ŧ] ŦĩļŦ8ĀŦ]ÉŦĩÖŦ]ÜŦĩëŦ1õŦ]ūŦĩ­3-­]6­8E­0x­Íƒ­a­Yą­(Ī­3ę­]÷­ÎŽĪŽ] ŽĐŽ]ŽÎ#ŽŅ.ŽaCŽ´€Ž]ŽÎ–ŽĪŖŽ:°Ž]šŽ8ÂŽpäŽĪëŽ]ņŽŌøŽ]ūŽÎ¯Ņ¯a:¯Y[¯(n¯ Á¯´Û¯]ā¯]í¯]ø¯] °Î°Ô°]"°Đ)°]/°Î;°ÔD°ÔR°:_°]h°8s°p‘°]™°ÎĨ°Ôŗ°:°]ɰ8Ô°pų°Ôą]ąĐ ą]ąÎąÔ'ąÔ.ą]4ąĐ=ąaQą(\ąŦąY´ą o˛×‰˛]ޞ]›˛]Ϟ]ˇ˛ÎÃ˛Ôʲ]вĐײ]Ũ˛Îé˛Ôō˛Īŗ: ŗ]ŗ8!ŗp?ŗ]GŗÎSŗÔaŗ:nŗ]wŗ8‚ŗp§ŗÔŽŗ]´ŗĐģŗ]ÁŗÎĘŗÔÕŗĪÜŗ]âŗĐëŗa˙ŗ( ´_´Yg´ ĩÚ'ĩ],ĩ]9ĩ]Dĩ]UĩÎaĩÔhĩ]nĩĐuĩ]{ĩ·ĩÔ”ĩ:°ĩpÎĩ]ÔĩŌÛĩ]áĩÎíĩÔúĩ:ļ]ļ8ļp<ļÔCļ]IļĐPļ]VļÎbļÔoļ:‹ļpŠļ]¯ļиļaĖļ(×ļˇY$ˇ ¸Ũ¸]¸])¸]4¸]E¸ÎQ¸ÔX¸]^¸Đe¸]k¸Îw¸Ô‰¸:”¸f¸pŋ¸:ˏ]Õ¸8Ū¸pü¸]šÎšÔš:(š]1š8:šp]šÔdš]jšĐqš]wšÎƒšÔ˜š:ŖšfŦšpĘš]ĐšĐŲšaíš(øšLēYTē {ģ:ˆģ]‘ģ8ģpĀģÔÍģ:Úģ]ãģ8ėģpŧÔŧ]ŧā)ŧ:>ŧSGŧpiŧ:vŧ]ŧ8ˆŧpĢŧÔ¸ŧ:Åŧ]Îŧ8×ŧpúŧÔŊ:Ŋ]Ŋ8&ŊpHŊ:]ŊSfŊp„Ŋ]ŠŊŌ–ŊÔŖŊ:°Ŋ]šŊ8ÂŊpäŊ:ųŊSžp ž]&žá2žÔ?ž:Lž]Už8^žp€ž:•žSžžpŧž]žĐËžaãž(îžŋY$ŋ sĀe§ĀsŗĀsŊĀ]ÎĀãÚĀÔáĀ]įĀáķĀÔúĀ]Áã ÁĪÁ:#Á],Á85ÁpXÁĪaÁauÁ(€ÁŽÁ(›Á(ÚÁ(íÁ üÁY Â(SÂ_ƒÂ]ÂãœÂÔŖÂ]ŠÂáĩÂÔÂÂ:ĪÂ]ØÂ8áÂpÃÔÃ:Ã]'Ã80ÃpSÃÔZÃ]`ÃĐiÃaÃ(ŒÃ´ÃYŧà Äg3Ä]@ÄãLÄÔYÄ:fÄ]oÄ8xÄp›ÄÔ¨Ä:ĩÄ]žÄ8ĮÄpęÄÔņÄ]÷ÄáÅÔ Å]ÅĐÅa1Å(<ÅdÅYlÅ ēÅįōÅéÆņLÆņiÆņ˜ÆņĮŋ*Į(9ĮMĮ(XĮfĮ(rĮ(ŽĮ(ØĮüåĮüķĮ(Č(Č (ČŋTČkČũsČŒČŋĸȸČĪČ(ÚČëČ( Éŋ6ÉLÉ`ÉüqÉ(„É šÉ˙ÄÉŨÉ˙åÉĘ5ĘPĘ‘ĘđÄĘ'ŅĘ(āĘ÷ĘË Ë Ëŋ^Ëq˄˗ËĨËėÃËíØËšæË(Ėp ĖŠĖ]ĖĖ8'Ė],Ė1Ė89Ė>Ė1FĖƒĖ(–Ė ¤Ė:ˇĖĘĖŨĖėĖîûĖšÍŋ6ÍQÍ]’Í(ĢÍÄÍđÚÍÎÎÎ%Î4ΙYÎpaΊkÎppÎuÎ8Î]„ΉÎ8‘ΖÎ1žÎÅÎÍÎ ÛΚãÎ úÎ'Ī1ĪFĪ<VΞκĐpĐŠ(Đp-Đ2Đ8<Đ]AĐFĐ8NĐSĐ1[ЩНЭĐüģĐ(ÎĐ ÛĐíĐŅI%ŅI:Ņ<OŅgŅ<wŅŖŅŗ ŌpŌŠŌp Ō%Ō8/Ō]4Ō9Ō8AŌFŌ1NŌ‡Ōü—ŌüĨŌ(šŌ(ĖŌ ×ŌëŌĶnĶŽĶĄĶŽžĶŽÃĶ1ÜĶŽåĶ3ęĶŽÔŽ Ô3Ô<ÔŠ)Ô<6ÔĨDÔISÔI[Ô‘mÔpsÔ~ÔŦŒÔ(ÄÔ(ŅÔ(åÔŽęÔpīÔ$öԝûÔĨEÕTÕ]YÕp^Õ5kÕ(~Õ ‹Õ(ąÕŋÕ(ØÕęÕ( Ö(nÖžÖęÖē>×j×p×]v×€×LŠ×O ×ŗŧ×ĪČ×hØŗåØļHŲ<PŲ^ŲĪdŲĒŲ<˛ŲšŲŲŲpáŲŠëŲpđŲõŲ8˙Ų]Ú Ú8ÚÚ1!Ú6Úp>ÚŠHÚpMÚRÚ8\Ú]aÚfÚ8pÚuÚ1}Ú™ÚpĄÚŠĢÚp°ÚĩÚ8ŋÚ]ÄÚÉÚ8ŅÚÖÚ1áÚųÚpÛŠ ÛpÛÛ8Û]$Û)Û81Û6Û1AÛVÛ(iÛ wÛ¤Û]ČÛŋ×Û:ęÛũÛÜÜî-Üš@Ü]Üw܍ÜđÁÜÉÜŗãÜ<îÜ ŨpŨŠŨp Ũ%Ũ8/Ũ]4Ũ9Ũ8AŨFŨ1QŨgŨoŨ zŨ†ŨšŽŨ ĸŨĒŨ¸ŨŊŨŸÉŨÜŨáŨčŨíŨĸõŨúŨ˙Ũ Ū  ŪŪ Ū!(Ū :ŪAMŪBoŪxŪI€ŪŽŪ(ąŪÂŪIĘŪŌŪčŪôŪI˙Ū߂߃)ß(:ß(Kß(\ß(mß(‰ßI—ß(ŧß@Ëß Ü߈ęß(ûß(āIā(CāIāZāIbājā‚āŽāI–āĻā‚ąāIŋā(Đā(áā(ōā(á(8á]@áâ(â(/â(Bâ Sâ(pâ(…â(Ĩâ(šâ(Íâ(áâ(õâ(ã(*ã(Dã(Yã(ˆã(¨ã(Ŋã(ôãäy$äCäzYämä\…äšä]ĸä'Žä(ŧä)ÄäĨĐä*Øä­ãä)ęä­īäĨôär!åķ8å,Yåķiå'Ēåy¸å]žåĖå]Ķå^āå]įå^ũå æ]æ^æ]%æ^2æ]9æ^?æ&Yæōfæ]næŠuæpzææĩ’æ8šæĢæ(į:+į,Dįķ`įōsį]{įŠ‚įp‡įŒįĩŸį8Ļį]Ŧįĩēį1Áį]ĮįĩĪįāį(Zč8~č]‰čАčp•čščĩĄč]§čĩ°č/ˇč]ŊčĩÅčöčl é]éŠ#é(é80éAé(néé(Ģé ´éķĖéŨé(ę(ę(6ę(Qę(lę(’ę(ēęÂę Ųę(úęë(*ë(‘ëķ¤ëĄļë*ĪëyÚë]āëëë]ōë^üë]ė^ėė]!ė^+ėp2ė^<ė]Cė^Iė&Vė(kė(€ė(•ė(Ēė(ŋė(Ôė(éė(üė Xí+iíķ|í/ļíyÁí]ĮíŌí]Ųí^ãí]ęí^÷íî]î^îpî^#î]*î^0î&=î(Pî ]î(rî(‡î(œî(ąî(Æî(Ûî(ī8!ī@īpFīNī&[ī(nī Šī7ģī;Ôī!đ:.đp7đ8DđpMđ8Zđ]cđ8pđ]yđ8†đpđ8đlŊđ]ÅđŠÔđŲđ8áđīđ(ūđ?ņ]ņ$ņö)ņƒ7ņ(EņJņ]QņŒ]ņĨbņ@ņķ‘ņ'¤ņ­ņŅņķåņ' ōy.ō]4ō?ō]Iō^Sō]\ō^mōtō]{ō^…ō]Œō^“ō]šō^ ō&ÃōyÎō]Ôōßō]éō^ķō]üō^ ķķ]ķ^%ķ],ķ^3ķ]:ķ^@ķ&|ķyŒķ]’ķķ]¤ķ^Žķ]ˇķ^ÆķĐķ]×ķ^Ūķ]åķ^ëķ&øķ( ô("ô(7ô(Lô(aô(vô(‰ô ¨ôyļô]ŋôĘô]Ķô^Ũô]æô^ōôüô]õ^ õ]õ^õ&]õ(rõ(’õ(Ģõ(Äõ(Ũõ(ö(ö(:ö(öĒöîöyúöy÷] ÷_÷p÷^)÷3÷]:÷^B÷öG÷ƒU÷(f÷(w÷(ˆ÷(™÷(Ē÷(Č÷ęø] ø„øę!ø]&ø„+øę<ø<Fø7øBĸø„§ø]­ø_´ø]ģø^ÃøöČøƒÖø(įø(ų<ų7QųCâų(÷ų( ú ú!ú 0ú(Iú(bú({ú(”ú(­ú(Ņúķåú'ōúûDûE#ûF+ûō=û]FûVû^`û]gû^vû^€û]‰û^–ûœû&Ģûōļû]ŧûĖû^Öû]ßû^ėûōû& üyü]ü'ü].ü^8ü]Aü^NüXü]aü^kü]rü^|ü]ƒü^‰ü&–ü(Ģü(Āü(Õü(ęü(ũü  ũ(ũ(4ũ(Iũ(^ũ(sũ(ˆũ(¨ũ(Ŋũ(Ōũ(įũ(üũ(ū(&ū(;ū(ęūē>˙]˙@d˙]j˙ę}˙"‡˙<’˙ŦŖ˙Gą˙(ž˙(Ô˙]Ú˙ęė˙pņ˙$ø˙ũ˙Ĩ (F(Y ft(ÖI+^7^LZZ(g(Ã(Ö ã(W^c^m]~ãŠÔ˜:Ĩ]Ž8špŪÔå]ëãôĪ:]8 pCĪLa`(ky(†(×Yå(ú(  k^w^]’ãžÔŦ:š]Â8ÍpōÔų]˙ãĪ:"]+84pWĪ`at((š(Y((=(P ģ^Į^Ņ]âãîÔü: ]8pBÔI]OãXĪe:r]{8„p§Ī°aÄ(ĪŨ(ę(jYx((   ^ ^! ]2 ã> ÔL :Y ]b 8m p’ Ô™ ]Ÿ 㨠Īĩ : ]Ë 8Ô p÷ Ī a ( - (: (ē YČ (Ũ (đ  [ ^g ^q ]‚ ㎠Ԝ :Š ]˛ 8Ŋ pâ Ôé ]ī ãø Ī : ] 8$ pG ĪP ad (o } (Š ( Y (- (@  … ‘ IŦ Iģ IĮ IØ (ë Iũ g((0(A(R(v<‹ žĨĢEģ(K.(N(n(K1X(m(‚(• ¨° Ŋ(Õ($<= K(\(g˜hĸŊĖƒÚ(÷]˙Šp ĩpĩ%s{ ˆ–(Ģ(ž Ī(I]2"I*752C(O†]Bk(r(ˆj—ƒĨ(ŧČƒÖ(ôE (($(IE[(v(Ž(šŋčÕ7æčķ]ųč6(A P(e(z((Ž(ôųG G]Ä(ũ E+n6W]E‹(¯(( %(OqU´ijŠĄ Ķsé:B/jIPe]n8„8‘]š8¨(šBÛsũ-tCę[Ri(‰]’8¨8ĩpž8õt#P4(J]S8mĩ}]†8¨]ąĩÂlÉ]Īęå(öO1OP ](z(˜‰¤]Ē­¯ĮŊ(Đ­ÕĨŨrę( B1j<]BœM(”]šœå]ëœ( Pė`z~<„~—ÁpÉŠĶpØŨ8į]ėņ8ųū1 @ėPzv<|~špÁŠËpĐÕ8ß]äé8ņö1ū   . ƒ6 D ėT zv <| ~ š pÁ ŠË pĐ Õ 8ß ]ä é 8ņ ö 1!!! *!‚N!‡S!j!ė~!zĻ!žš!ŸĪ!œå!pí!Š÷!]ü!"8 "]""8"""1*"I"pQ"Š["]`"e"8o"]t"y"8ƒ"ˆ"1"Ļ"<Ŧ"~Â"é"pņ"Šû"p##8#]##8!#&#1.#>#F# Q#Y# d#l# z#†ž#ƒ§#ĩ#ėÅ#zÕ#ã#ėķ#z$<$~/$V$<\$~o$™$pĄ$Ѝ$p­$˛$ĩš$]ŋ$ĩĘ$1Ō$é$pņ$Šø$pũ$%ĩ %]%ĩ%1"%5%=% H%P% m%%ė•%zĢ%ėŋ%zā%žķ%Ÿ &›&ž>&›V&<\&~o&–&<œ&~¯&Ų&pä&Šî&]ķ&ø&8']' '8''1$'9'pD'ŠN']S'X'8b']g'l'8v'{'1„'™'p¤'ŠĢ'p°'ĩ'ĩŧ']Â'ĩÍ'1Ö'ņ'pü'Š(p( (ĩ(](ĩ#(1,(A(I( V(^( k(s( €(ˆ( (‡­(ŒÔ(‡Ũ(Œũ(C)?a)“)]›)Š)]°)^Ã)Ō)^ß)]î)^*^*]"*^2*^C*(W*(k*(*(“*(§*(Ã*yØ*yí*y+]+ +]'+^4+;+^H+]O+^d+^q+]x+^Ž+›+]ĸ+^˛+ŋ+]Æ+^Ü+í+(,(,(),(=,(Q,(e,(y,(,(Ą,(ĩ,(É,(Ũ,(!-M&-.--ĸ-Iæ-” .NM.(u.†.”ŗ.Nž.”ß.Nō.]ø./ö/ƒ/($/)/]0/Œ2^N2[2]b2^o2pv2^|2&”2™2Ÿ¸2øÆ2Ë2Đ2ĸ 3y3]$323]93^F3]M3^]3j3]q3^~3]…3^’3]™3^Ÿ3&Ä3y×3]Ũ3ë3]ō3^˙3]4^4#4]*4^74p>4^K4]R4^X4&|4y4]•4Ŗ4]Ē4^ˇ4]ž4^Î4Õ4]â4^ī4pö4^5] 5^5&(5<Ģ6(Æ6(á6(ü6(7(27(M7(r7‡7(ĸ7(Ŋ7(Ø7(ķ7(8(;8(d8u8(8(Ļ8 Å8yØ8]Ū8ė8]ķ8^9]9^9$9]+9^89]?9^E9&d9yw9]}9‹9]’9^Ÿ9]Ļ9^ļ9Ã9]Ę9^×9]Ū9^ä9&ū9›:():(D:(_:(z:(•:(°:(÷:0;U;‘;V);(D;(_;(z;(•;(°;(Ë;(æ;(<(<(7<(R<(m<(ˆ<(Ŗ<(ž<(Ų<(ô<(=(*=(E=(™=(´=(Ī=(ę=(>( >(n>y‚>]Š>˜>]Ÿ>^Ŧ>]ĩ>^Į>Ô>]Ũ>^ę>pķ>^ų>&?y.?]6?D?]K?^X?]a?^s?€?]‰?^–?]Ÿ?^Ĩ?&ĩ?(Đ?(ë?(@(!@(<@(W@(į@( A((A(CA(^A(yA(”A(¯A(čA(B(B(9B(‡B(ĸB(ŊB(ØB(&C(AC(\C(wC(’C(­C(ČC(ãC(NDWeDD]•Dę¨D]ŽDęÁD]ĮDęßD]įDŠîD]ķDøDĩ˙DpEĩE8EeE<wE”EŖEŨE<īE FFMF<_F|F‹FŦF¸F ÃFËF ÖFUáF‘éFVōFWũFUG‘GVGU$G‘,GV3GW?GW|Gf™GVĸG]¨G8ˇG8ÃG]ÉG8ŲG8ãG]éG8÷G(H(DHaH]iHŠpHpuHzHĩH]‡Hĩ–H8ŖH]ŠH8ŊH8ÄH]ĘHĩŌHōHI0 I I(JI]PIWI]_IĩrII]‡I˜IœĻI(ˇI(ÛIęI]đIJœJ( J(DJSJ]YJjJœxJ(‰J(˜J]J]ąJĀJ]ÆJ×JœåJ(öJ(KRK]"K6KœDK(UK(nK}K]ƒKšKœ¨K(šK(ÎKWßK8íK(4LČAL]NL^`L^nL(‡L™LVĸL]ĒL8ŧL8ÆL]ĖL8ÚL(ëL(˙L] M^M^'M(=MąIM˛WM(gM]oM8}M(ŽM(›M(ÃMqæM]îMĩ‹N]“NĩĄN(´N]ŧNĩĘN(īN(O(;O(aO(ÂO(×O(äO(÷O P(P(2P(GP(\P(qP(†P(›P(°P(ÅP(éP(Q(Q(0Q(SQ(yQ(ŽQ(ĻQ(ÅQ(÷Q]ũQR] R8R80R?R]ERWRœeR(vR(…Rí—RyĨR]ĢRŊRœËR(ÜR(ëRVũRy S]S#Sœ1S(BS(QSëcSyqS]wS‰Sœ—S(¨S(ŊS]ÃSŌS]ØSęSœøS( T(!TR,T]2TGTœUT(fT(|TW‹T8•T]›T8ŠT(ŪT•ôTU]U8-U87U]=U8KU(lU(’U(¸U(ŪU(V(*V(gV(|V(‰V(œV ŠV(žV(×V(đV(W(W(>W(SW(kW(ƒW(ŖW(ÔW]ÚWáWpįWĩņW]÷W8X8Xí5XyCX]IXXXœfX(wX(…XV¨XyļX]ŧXËXœŲX(ęX(øXëYy&Y],Y;YœOY(`Y(tY]zY‰Y]YžYœŦY(ŊY(áY…îY]ôYZœZ("Z(FZRSZ]YZhZœvZ(‡Z(“ZŒĩZyÃZ]ÉZØZœæZ(÷Z([W'[85[(J[]P[_[]e[w[œ…[(–[(¤[]Ē[ĩú[í \ž2\]8\8H\8O\]U\ĩc\(Ō\(](=](g](ĸ](ˇ](Ä](×] ä](ų](^(+^(@^(Y^(n^(’^(§^(Ã^(Û^(đ^(_(4_(S_(›_IŖ_˛_ ¸_Ę_]Đ_­Õ_ĮÜ_­á_Ĩí_¯ü_]`Ú `;&`<0`<:`=Ž`>”`< `<ļ`>ŧ`<Â`<Ü`?æ`?đ`?ũ`7>a@Pa6da(qa>|aŸ‘alŖa)´a(ČaÛÛa?åa?īa?ųa6b(b7 b8)b</b<;b<Ab<qb=ybAŠb(šb(cQc(-c(Cc Wc({c=cA’c<ēc(ác9îc<ôcB d]d‡dę=d‡Xd‹d1ˇd3ÖdIíd( eĄ7e3WeIne(ĩe(Üeęe(f‡fpf_#f&=fôWfôqfôˆf<ĄfIÍf(ôf)gĄAg(Wg0_g kg]pgpug5ƒg0‘g(Ŧg(ŋg]ÄgpÉg5Ögëg(#hĸCh'Ph([hhH‰hÂh(Õh 1i:Ii8WigiĒĨilži]ĖiŪipîiüi(j}/j€JjZjŌcj›jq˜jĩ°j8Įj]ĐjĩÚj]ãjĩđj]öjĩkĒIkĒ^k‰jk]sk8‰k8–k]Ÿk8ĩk8Ãk(īk(l›#l 4lŌJl(^l(sl(”lŦŸl§lŦl­˛lŽŊl¯ãlņl\mÉm,mĢ:m(Gm(gm(ˆm(›m ¨m(Ųm]Ūm]ãm]émĶūm:n]'n;4n°cn(nn|n(‘n]Ân>čnYön(o Lq(|q(q œq>rrŗ r(Fr(rr”r0œr Šr(ĘrûrGsG,s:9spBs8OspXs8es]ns8Žsĩžs]§s8´s]Ŋs8Øsĩčs]ņs8ūs]t8"tĩ2tp;t8HtpQt8^t]gt8qt]{t]ƒt;t°•t>Ũt:įtpđtĩũtpuĩ#uĩ1u]:uĩDu]Muĩmuĩ{u]„uĩŸuĩ­u]ļuĩÃupÉuĩĶupÜuĩéupīuĩųupvĩ v]v]v;(v°0v>wv]€vĩ—v] vĩˇv]Āvĩ×v]āvĩ÷v]wĩw] wĩ0w>Ow qw>‘w”›w7ĻwŦw]¸w6ĮwˇŪw]đwˇx;x:Hx]Qx8Yx7jx8wxp€x8x]’x]—x]žxDąx]šx;Ãx°Ëx>Ųx(y(yWyY_y py>~y(¯y]ĩyŊyŅyĢßy(z(z %zĩ9zEzšSzô^z]kzšsz#€zšŽzô•z]ĸzšĩzšÃzôĘz]×zš{-{N{^{šž{ôŠ{pĩ{ŧÃ{#Ô{šâ{ôī{Đô{]ü{š |^u|ģÚ|î| }š}ô$}Ō)}]1}ž?}^ĩ}–ä}^/~š=~ôD~ĶK~]S~žË~ĨŨ~v÷~ؐO)o3ˆFŒg^Ŋ‹ €—%€^n€Œ¸€Öā€#,^€x˜āĄŒīpô¤Ą‚׃v9ƒķNƒ]VƒŠ]ƒpbƒgƒĩnƒ]tƒĩ}ƒ1„ƒ]Šƒĩ—ƒ1žƒ]¤ƒĩ¯ƒɃŠøƒŨ„^Q„Y„ a„‡~„‰„ĀŽ„p–„Áą„(Ė„]Ņ„›į„]í„Úü„]…Ž …Û%…(1… Q…ž`…Ÿx…Ē…(ĸ…œɅpŅ…Šۅ]ā…å…8ī…]ô…ų…8††1†)†p1†Š;†]@†E†8O†]T†Y†8a†f†1n†”†œ† §†›¯† 熆 Ԇ‡ž‡Ÿ/‡Ēb‡I‡œЇp´‡Šž‡]Çȇ8Ō‡]ׇ܇8æ‡ë‡1ô‡ ˆpˆŠ ˆ]%ˆ*ˆ84ˆ]9ˆ>ˆ8FˆKˆ1SˆqˆÆ†ˆŽˆ ™ˆ›Ąˆ ވļˆ Ј(äˆlđˆƒūˆ(‰‰Į ‰(U‰(h‰ u‰(Ō‰Iį‰Iö‰I:ŠËRŠ(eŠ rŠ(ģŠIЊIߊI ‹Ë‹(/‹ <‹({‹I‹IŸ‹IĮ‹ËŲ‹(ė‹ ų‹(>ŒISŒIbŒI‡ŒË™Œ(ŦŒ šŒ(㌴žŸ3?IWIcIrIƒ(“I§e¸(ɍ(ڍ(ë(ü(&Ž5ŽƒCŽ(RŽ›qŽpyŽŠƒŽ]ˆŽŽ8—Ž]œŽĄŽ8ŠŽŽŽ1ļŽŨŽIōŽIˆŅ(˛(Į(܏(ī›÷ ($ D(d(}(ž(ĩ]ģčԐŌâ(‘] ‘č7‘]=‘ÔX‘(k‘ €‘IŽ‘Iœ‘ĶĒ‘(ˇ‘(ב(ø‘( ’ ’Ô’ 4’E’Õ\’:m’1{’l’•’ĸ’Õ°’(Ŋ’(ī’(“ (“(=“({Įa I5g7¨ĨØĨ Ĩŧ#ũ#Ē$Ē2$Ē|$wŒ$xŧ$Rg&vY)Ĩ 0ū˛08[9"<8>=`q8Ėt8ĘÆöÚÆøáÆú§ÉįÍĪ!u1x7!‡#i¤i§ā†Ã:)p/ĩ;B]MĩZ]cĩp|]‚ĩ‹]–ĩĄl× &ē&­\&ē`&­´&ē¸&­('ē,'­   '(% '( 5>,.(<T,.(<T`%(3Kdp B l)762D(\v<…((¨ŊĖ(Öß (()(=H(U`(u((5?(M 6(7)8=<";(<5<<=“>™< <´>š<ŋ<Ņ?Ø?ß?æ7@6-(8>Jl^8l(„Ĩ<´=ŧAÄĖ ×(áü 9 <B  $(,048<@DHLPTX\`dhlptx|€„ˆŒ”˜œ ¤¨Ŧ°´¸ŧĀÄČĖĐÔØÜāäčėđôøü  $(,048<@DHLPTX\`dhlptx|€„ˆŒ”˜œ ¤¨Ŧ°´¸ŧĀÄČĖĐÔØÜāäč]ė]đ]ė ]đ ]ô ]ø ]ü ] ] ] ] ] ] ] ] ]$ ]( ], ]0 ]4 ]8 ]< ]Ā p 6(#7)81E()E%'2(=Tb(lu I7&2@(JS 7(-n:2C4^(hq ;<$<.=‚>ˆ<<Ē>°<ļ<Đ?Ú?ä?ņ72@D6X(_>†Ģ(ÃmÖ?ā?ę?ô6ü(78$<*<6<U<i=nA’]˜ĩ¯Įę(÷Q 9*<0B@=FAN W<;<$<.=‚>‡< <Ē>°<ļ<Đ?Ú?ä?ņ72@C6Z(_>†tŦuĘmŨ?į?ņ?û6(7"8+<1<=<\<p=uAš] ĩˇÁîv"9/<5BE=KAS b<|uQ• šģv:"1-lj :&}1ln I45(?H '9]AŠKpPU8_pdi8q„Œ  ™)p1Š;p@E8O]TY8af1nƒ‹ œ1p9ŠC]HM8W]\a8in1v‹“ žŸ9pAŠK]PU8_]di8qv1~Ž– 'Ą;]CŠMpRW8fk8w]}88•ą]šŠÃpČÍ8×pÜá8é   Ĩ'3(@(T_(l€(Š•(Ÿ¨ Ĩ'3(@(Kdo(|‹(• (Ēŗ Ч)Ĩ7'L(Y(d|Œą(ģÆ(ĐŲ Š§)Ĩ7'L(Y(dp„”´(žÉ(ĶÜ I#])22 UĄi]qŠ{p€…8”™8Ĩ]Ģ8ģ8ÃŅ(é]ņŠûp8p8!D]k(u~ ‘(›Ļ](I07;2IŦW(d(|‡(“¯(šÄ(Î× ](I07;2IŦW(d(|‡(“¯(šÄ(Î× x ]1:]@_KŦY(f(“vŸ]´ŋ(ËŪ(čķ(ũ ]$x9yExS]Y_eIo]u2ƒ]—^¤˛ŦĀ(Ņ(â(ķ(((&(7(T_(s~(“ž(ŗž(ĶŪ(ķū((3p(z…(š(¤¯(šÄ(ÎŲ(ãî(ø(  !(+yp"_0Ŧ>(K(do({“(¨(˛ģ  ļ™9pAŠKpPU8_]di8qv1~“› ļ™)IpQŠ[p`e8o]ty8†1ŽžĻ ].I8]>2G jĄ~]†Šp•š8ŠŽ8ē]Ā8Đ8Øæ(÷(]Š#p(-87p<A8It„¤˛(ŧĮ(ŅÚ å(īú$|*v2]9]JV]\_hIr]x2†’Iœ]ĸ2°Ŧž(Ë(Ø(å(ō(('(3>(KV(cn({†(“Ž(¸Ã(ÍØ(âí(÷( (!* L(V!|'V/]6]GS]Y_eIo]u2ƒI™]Ÿ2­Ŧģ(Č(Õ(â(ī(ü((+6(CN([f(s~(‹Ļ(°ģ(ÅĐ(Úå(īú((" D(N*|3xC]T`pf_rI|]‚2œIĻ]Ŧ2ēŦČ(Ų(ę(û( ((;vK]\g({†(“ž(ŗž(ĶŪ(ķ(#(-8(BM(W` s(}ˆ(’(Ģ:'l68D(\le7r2€(ŦģÎ<Ö(āYũ(# .(7:*758NlW7d2r(Ē2´Æ<Î(ØYņ(û :(8AlJ7W2e(”Ļ<Ž(¸YŅ(Û÷ :*758NlW7d2r(Ē2´Æ<Î(ØYņ(û :!0:lC7P2^(„–<ž(¨YÁ(Ëį :*758NlW7d2r(Ē2´Æ<Î(ØYņ(û :%768OlX7e2s(Ą]Ē8´Æ<Î(ØYņ(û :*758NlW7d2r(Ē2´Æ<Î(ØYņ(û :*758NlW7d2r(Ē2´Æ<Î(ØYņ(û :*758NlW7d2r(Ē2´Æ<Î(ØYņ(û Ģ;ą<ž<Č=.>4<@<V>[<a<{?…??œ7Ũ@î6 (>3SA;K<X=Š>Ž<´<Ņ>Ö<Ü<ö?? ?7^@o6†(‹>ŽSÃlØlå]üãÔ]á!Ô5:E]N8\p}]ˆÎ—Īž]¤ā­Ī¸aĪ(Ūī((?#?-?76?(X7^8c<i<x<~<—<´=ŧAĪ?Ų?ã?í6õ(78<<%<4<:<j=rA§ˇĮ×ãũ<=%A- 6<X=^ApQx …9’<˜BËYÜ(é÷(Q39@<FB%;+<8<B=¨>Ž<ģ<Đ>Õ<Û<õ?˙? ?7W@h6ƒ(Š>ŗSÁ;Ë<Ø=)>.<4<Q>V<\<|?†??7Ū@ī6( >4SIl^lk]‚ãŽÔ•]›á§Ôģ:Ë]Ô8âp]ÎĪ$]*ā3Ī>aU(du(‰(Ÿ?Š?ŗ?Ŋ6Å(Ū7ä8é<ī<ū<<<:=BAU?_?i?s6{(”7š8Ÿ<Ĩ<Ģ<ē<Ų<đ=øAWgw‡“­<Ī=ÕAŨ Y(!/(<KQ]Qe |9‰<BĨ=ĢAš<į9ô<úBė+íIpQŠ[]`e8o]ty8†1ŽŖĢ ė,íBpJŠT]Y^8h]mr8z1‡Ž(ģÔī (+9 cĸ™]¤ŠŽpŗ¸8Â]ĮĖ8ÔŲ1å]ë8ö1ũ]ĩ )]4Š>pCH8R]W\8fk1w]}8†1’]˜8Ŗ1Ē]°ĩšÔÜ įī ķ6õ]8/˙>]D8V]\8f]l8u1]“8Ž]´8ž]Ä8Ö]Ü8ö]ü8]86]<8V]\8v]|8–]œ8ļ]ŧ8čPö]ü_ 8(*(:]@8U][8d1yP‚]ˆ8˜8Ļ(´ÁÎđ8ú]8&(0;(F S(]ūūū ūūūūū ū$ū(ū,ū0ū4ū8ū<ū@ūDūHūLūPūTūXū\ū`ūdūhūlūpūtūxū|ū€ū„ūˆūŒūū”ū˜ūœū ū¤ū¨ūŦū°ū´ū¸ūŧūĀūÄūČūĖūĐūÔūØūÜūāūäūčūėūđūôūøūüūūūū ūūūūū ū$ū(ū,ū0ū4ū8ū<ū@ūDūHūLūPūTūXū\ū`ūdūhūlūpū]82F]L8^]d8n]t8}1•]›8ļ]ŧ8Æ]Ė8Ū]ä8ö]ü8]86]<8V]\8v]|8–]œ8ļ]ŧ8íPû]_8(/(?]E8Z]`8i1†P]•8Ĩ8ŗ(ÁÎÛø8]8.(8C(N [(e  $(,048<@DHLPTX\`dhlptx|€„ˆŒ”˜œ ¤¨Ŧ°´¸ŧĀÄČĖĐÔØÜāäčėđôøü  $(,048<@DHLPTX\`dhlp]8$0]68V]\8e1]…8ĄPĒ]°8Ā8Î(Øį(ņú ()EYĢœ<āĢ7ĢQĢŒ<ØĢ.ĢYĢœ<āĢ7Ģ18y@]FQ]X^b]i^yƒ]Š^”]›^Ą&¸(ÂÍ(×â(ė÷( (!(+6(?H 18y@]FQ]X^b]i^yƒ]Š^”]›^Ą&¸(ÂÍ(×â(ė÷( (!(+6(?H 1DyL]R]]d^n]u^…]–^ ]§^­&Ä(ÎŲ(ãî(ø( ("-(7B(KT 1DyL]R]]d^n]u^…]–^ ]§^­&Ä(ÎŲ(ãî(ø( ("-(7B(KT YĢœ<āĢ7ĢYĢœ<āĢ7Ģ:%768Ely]‚8ĸ YĢœ<āĢ7Ģ0M2OC(NYQŽQZQ”QÕS+QC<WIlTŧ<ĪU×ßVæWī Y&Y<pDŠNpSX8`jZo[u\…]˜ ;<$<.=‚>‡<Ž<Ē>¯<ĩ<Õ?ß?é?ö77@E6Y(^>u}€m“??§?ą6š(Ō7Ø8Ũ<ã<é<ī<ū<+=0AOe<=‡A žQĻ ĩ9Â<ČB8ęKę^ęwęęę,ęnQ—QĮQīQXQ—QĢQ?`^`}`œ`đ` `*`p$k?lWm`(„(1<AGæŽ(¨v°Ä€ÉĪæâįí悐 į„#)į<…AGæZ†_eįx‡}ƒį–ˆ›Ąæ´AšŋįԉאŨæđŠõûH‹H,Œ17æJOUHhŽmsį†‹‘æ§]­ęÅvÎ(Üė]ōę] ę]"ę0F(PY 3L=BKæŽ(¨v°Ä€ÉŅæäéņæ‚ į$„)1įD…IQæd†iqᄇ‰‘į¤ˆŠąæÄAɐŅįä‰éņæŠ H$‹)1HDŒIQædiqH„މ‘į¤ŠąæĮ]Íęåvî(ü ]ę$]*ę<]BęQg(qz {&{<pDŠNpSX8`j|o[u\…]˜ ėz><D~VypŠ‹p•8Ÿ]¤Š8ąļ1žÎÖ %(3(ICItƒˆƒ–(¨Õ<ņIIJI~(ˆģU‘$V/(9B XUp‘ƒ‹VW™UŠ(ŗÂUÍ‘ÕVÚWæWĨ Ĩ9LA FƒT(`-f-…(”§-ĶLØ-á-ņIö-- (:xBf-kĄyƒ›(ĨŽ š(ÃĖ  ĨĨAJ Oƒ](h-n-•(Ąš-ØŨ-ã-ķIø--(0u8Mf-kĄxŽ(˜Ą &(4ėXF<L,ÚIûpŠ$p).ĩ5];ĩD1Ll<ˆ›W Žļ ÅÍ ÖUáŠéV~U•9Ÿ¸­(ˇŧWÔ(ŪãWė øU9¸().WDULVW(afWo vW ~U•9Ÿ¸­(ˇŧWÖ(āåWî úU 9¸!(+0WHUPV[(ejWs zWƒ ~U•9Ÿ¸­(ˇŧWÔ(ŪãWė øU9¸().WDULVW(afWo vW ~U•9Ÿ¸­(ˇŧWÖ(āåWî úU 9¸!(+0WHUPV[(ejWs zWƒ 9IaIĨƒĘƒØ(ę<MIIĘI˙( ?›UĻŠŽVš(ÃĖ âUúŠ VW#U4(>MUXŠ`VeWqW4IIIXI„(Ž™(ŖŽUÁŌŌVÛWä 0IEITIuIŠI™IĪƒäƒķƒƒ0ƒBƒP(](j(|†Ã<âI÷IIĘ+ĘG(T(h(r§¸ę(ô˙( U'/V8UTŌfUrŌÅŌÍ Ø(âí(÷ W#(-8(BQU*I9I^(hsU†Ô—VžW§ (I7ISI_I‹ƒšƒ°ƒÂƒĐ(Ũ(īų)<EIVIzI‰IŠĐÆ(Û(åvÔ~ ‰(“œ Ŧ(ļÁUŨÔų( U!)V2UGÔbWq({†UŖÔ˛VšWÂU ØŲ! *]/J8]=BJG€P]UJ\]a]fkKy‚~†‹‚Ú• œĄ]ĻK°†ĩŊ†ĮÚĖ Ķ]Ø]ŨKįAėôųAūÚ  ]J‰]$L)Š2]7L=‹E]JJOŒX]]Lci]n]sK}Ž‚ŠŽ”Ú™ ĸ]§J¯ĩ š(žÃ ČÚÍ ÔŲ]ßÛãGčKō„÷˙„ Ú ]J$…*]/‡4<A‡FÚK TöX(]bögÚl u--ˆ-’0˜-Ą yÜŨŪßāÜâÜäŪåãÜčŪéįÜëÜíÜđŪōīÜķŪõįÜøŪų÷ŪûįŪũįÜ˙ÜŪŪņŪīŪ īŪ ņŪ áŪŪŪŪY[Ū{[­ áĻ § —Ē ĢÁąÛÜ Ž$­(°,Ę0Ë4â8ã<Ė@¯öˆ ‰Īü˙ Ėūũ žėéęŅî û đ{Ŗņ z$§(Å,~04Ļ8ō<€@ķ   ! $(,048<"@  ) *ŲÚÛÜ Ũ$Ū(ß,ā0á4â8ã< @åúˇ ¸ôô    Ŗ-.Ŗ-2 5>.Ŗ-4 6’.Ŗ-æų Aę„ …õZ- .|÷ Ô ŲŲŲ×!Ø(Ų/ŲíŲõŲŲŲŲ*Ų=ŲPŲWŲdŲtŲ}Ų–ŲĻŲ¯ŲČŲØŲáŲúŲŲŲ)Ų5Ų@ŲKŲQŲoŲŒŲ¤ŲĢŲČŲĪŲâŲéŲŲ Ų*Ų1ŲNŲUŲrŲyŲ‘Ų˜ŲĢŲ˛ŲŅŲÚŲáŲņŲüŲ ŲŲ!Ų(ŲGŲeŲ}Ų„ŲĄŲ¨ŲģŲÂŲßŲæŲŲ Ų'Ų.ŲKŲRŲjŲqŲ„Ų‹ŲĒŲŗŲēŲßŲįŲōŲŲŲŲ)Ų5ŲKŲfŲƒŲ–ŲĸŲŽŲēŲĐŲëŲŲŲ'Ų4ŲTŲiŲuŲ‡Ų”Ų ŲŦŲ¸ŲÄŲĐŲÜŲčŲôŲ Ų Ų Ų% Ų7 ŲB ŲM ŲX Ų^ Ųg Ųm Ų„ ŲŠ ŲĄ Ų§ Ųē ŲĀ ŲĶ ŲŲ Ųņ Ų÷ Ų Ų Ų5 Ų< ŲY Ų_ Ųw Ų~ Ų– Ų Ų´ Ųģ ŲŲ Ųā Ų÷ Ųū Ų Ų! Ų8 Ų? ŲV Ų] Ųt Ų{ ŲŽ Ų• Ųļ ŲŊ Ųß Ųæ Ų Ų Ų* Ų1 ŲJ ŲQ Ųj Ųq ŲŠ Ų‘ ŲĒ Ųą ŲĘ ŲŅ Ųę Ųņ Ų Ų Ų) Ų0 ŲR ŲY Ųl Ųs Ų| Ų“ ŲŽ ŲÉ Ųî ŲŲ=Ų]Ų‚ŲžŲĨŲÂŲÉŲæŲíŲ ŲŲ)Ų0ŲOŲnŲ†ŲŲĨŲŦŲÄŲËŲãŲęŲŲ Ų!Ų(Ų@ŲGŲ_ŲfŲ„Ų‹Ų¤ŲĢŲÃŲĘŲãŲęŲūŲŲŲ$ŲAŲHŲkŲŽŲĢŲ˛ŲĪŲÖŲķŲúŲŲŲ;ŲBŲiŲpŲ’Ų™ŲļŲŊŲßŲæŲ˙ŲŲ"Ų)ŲPŲWŲyŲ€ŲŲ¤ŲÆŲÍŲđŲ÷ŲŲ ŲLŲSŲz؁تŲĒŲŅŲØŲúŲŲ#Ų*ŲGŲNŲpŲwŲžŲĨŲÖŲŨŲ ŲŲ7Ų>ŲjŲqŲ˜ŲŸŲËŲŌŲųŲŲ,Ų3Ų_ŲfŲ’Ų™ŲÅŲĖŲøŲ˙Ų*Ų1Ų\ŲcŲ€Ų†ŲŖŲĒŲŅŲØŲņŲøŲŲŲ/Ų6ŲNŲUŲ|ŲƒŲĨŲŦŲÎŲÕŲ÷ŲūŲ Ų'ŲNŲUŲwŲ~Ų Ų§ŲÉŲĐŲ÷ŲūŲ Ų'ŲIŲPŲrŲyŲ Ų§ŲÉŲĐŲōŲųŲŲ"ŲIŲPŲrŲyŲ›ŲĸŲÄŲËŲōŲųŲŲ"ŲDŲKŲmŲtŲ‘Ų˜ŲŋŲÆŲ÷ŲūŲŲ"ŲIŲPŲŲ‡Ų”Ų˛ŲšŲÆŲäŲëŲøŲŲ!ŲDŲJŲWŲuŲ|Ų‰Ų§ŲŽŲģŲÔŲäŲ Ų Ų Ų Ų# Ų- Ų9 ŲL ŲY Ųy ŲŽ Ųš ŲŦ Ųš ŲÅ ŲŅ ŲŨ Ųé Ųõ Ų!Ų !Ų!Ų%!Ų1!Ų>!ŲP!Ų[!Ųf!Ųq!Ųw!Ų€!Ų†!Ų!ŲŖ!Ųē!ŲĀ!ŲĶ!ŲŲ!Ųė!Ųō!Ų "Ų"Ų'"Ų-"ŲN"ŲU"Ųr"Ųx"ؐ"Ų—"Ų¯"Ųļ"ŲÍ"ŲÔ"Ųō"Ųų"Ų#Ų#Ų3#Ų:#ŲQ#ŲX#Ųo#Ųv#Ų#Ų”#Ų§#ŲŽ#ŲĪ#ŲÖ#Ųø#Ų˙#Ų $Ų'$ŲC$ŲJ$Ųc$Ųj$Ųƒ$ŲŠ$ŲŖ$ŲĒ$ŲÃ$ŲĘ$Ųã$Ųę$Ų%Ų %Ų#%Ų*%ŲB%ŲI%Ųk%Ųr%Ų…%ŲŒ%Ų•%ŲŦ%ŲĮ%Ųâ%Ų&Ų1&ŲV&Ųv&Ų›&Ųˇ&Ųž&ŲÛ&Ųâ&Ų˙&Ų'Ų#'Ų*'ŲB'ŲI'Ųh'Ų‡'ŲŸ'ŲĻ'Ųž'ŲÅ'ŲŨ'Ųä'Ųü'Ų(Ų(Ų"(Ų:(ŲA(ŲY(Ų`(Ųx(Ų(Ų(Ų¤(ŲŊ(ŲÄ(ŲÜ(Ųã(Ųü(Ų)Ų)Ų)Ų6)Ų=)ŲZ)Ųa)Ų„)Ų§)ŲÄ)ŲË)Ųč)Ųī)Ų *Ų*Ų0*Ų7*ŲT*Ų[*Ų‚*Ų‰*ŲĢ*Ų˛*ŲĪ*ŲÖ*Ųø*Ų˙*Ų+Ų+Ų;+ŲB+Ųi+Ųp+Ų’+Ų™+Ųļ+ŲŊ+Ųß+Ųæ+Ų ,Ų,Ų2,Ų9,Ųe,Ųl,Ų“,Ųš,Ųŧ,ŲÃ,Ųę,Ųņ,Ų-Ų-Ų<-ŲC-Ų`-Ųg-Ų‰-ؐ-Ųˇ-Ųž-Ųī-Ųö-Ų".Ų).ŲP.ŲW.Ųƒ.ŲŠ.Ųą.Ų¸.Ųä.Ųë.Ų/Ų/ŲE/ŲL/Ųx/Ų/ŲĢ/Ų˛/ŲŪ/Ųå/Ų0Ų0ŲC0ŲJ0Ųu0Ų|0Ų™0ŲŸ0Ųŧ0ŲÃ0Ųę0Ųņ0Ų 1Ų1Ų)1Ų01ŲH1ŲO1Ųg1Ųn1Ų•1Ųœ1Ųž1ŲÅ1Ųį1Ųî1Ų2Ų2Ų92Ų@2Ųg2Ųn2ؐ2Ų—2Ųš2ŲĀ2Ųâ2Ųé2Ų3Ų3Ų93Ų@3Ųb3Ųi3Ų‹3Ų’3Ųš3ŲĀ3Ųâ3Ųé3Ų 4Ų4Ų44Ų;4Ųb4Ųi4Ų‹4Ų’4Ų´4Ųģ4ŲŨ4Ųä4Ų 5Ų5Ų45Ų;5Ų]5Ųd5Ų†5Ų5ŲĒ5Ųą5ŲØ5Ųß5Ų6Ų6Ų46Ų;6Ųb6Ųi6Ųš6ŲŖ6ŲŦ6Ųļ6Ųģ6ŲÅ6ŲĐ6ŲÜ6Ųâ6Ųč6Ųî6Ųô6Ųú6Ų7Ų7Ų7Ų7Ų7Ų#7Ų*7Ų17Ų97ŲA7ŲH7ŲO7ŲV7Ų_7Ųk7Ųq7Ųw7Ų}7Ųƒ7Ų‰7Ų7Ų˜7Ų¤7ŲĒ7Ų°7Ųļ7Ųŧ7ŲÅ7ŲŅ7Ų×7ŲŨ7Ųã7Ųė7Ųõ7Ų8Ų8Ų8Ų28ŲK8ŲW8Ųd8Ųk8Ųˆ8Ų8Ųą8Ų¸8ŲÕ8ŲÜ8Ųų8Ų9Ų'9ŲC9ŲQ9Ųm9Ų{9ŲŠ9Ų™9Ų¨9Ųˇ9ŲÆ9ŲÕ9Ųä9Ųō9Ų:Ų:Ų":Ų0:Ų>:Ųm:Ų–:Ų¤:Ų;Ų;Ų@;Ųa;Ųg;Ų„;ؐ;Ų–;Ųŗ;Ųš;ŲÖ;ŲÜ;Ųų;Ų˙;Ų<Ų"<Ų?<ŲE<Ųb<Ųk<Ųt<Ųz<Ųœ<Ųĸ<ŲĀ<ŲŨ<Ųé<Ųī<Ų=Ų=Ų=Ų8=Ų>=ŲP=Ųd=Ųj=Ų|=ؐ=Ų–=Ų¤=Ųš=ŲÅ=ŲĐ=Ųä=Ųī=Ų>Ų>Ų">Ų->ŲA>ŲL>Ų`>Ųk>Ų>Ų†>Ų›>Ų§>Ųļ>Ųŋ>ŲØ>Ųį>Ųđ>Ų ?Ų?Ų!?Ų:?ŲI?ŲR?Ųk?Ųz?Ųƒ?Ųœ?Ų§?Ų°?ŲĘ?ŲÖ?Ųâ?Ųî?Ų @Ų"@Ų(@Ų?@ŲE@Ųa@Ųg@Ųƒ@Ų‰@ŲĨ@ŲĢ@ŲĮ@ŲÍ@ŲŨ@Ųí@Ųų@ŲAŲAŲAŲ(AŲ2AŲDAŲPAŲ\AŲ{A؁AŲ”AŲšAŲ­AŲŗAŲËAŲŅAŲíAŲķAŲBŲBŲ1BŲ7BŲSBŲYBŲuBŲ{BŲ™BŲĢBŲļBŲÁBŲÖBŲõBŲûBŲCŲCŲ/CŲ5CŲLCŲRCŲnCŲtCŲ‹CŲ’CŲŽCŲĩCŲŅCŲØCŲôCŲûCŲDŲDŲ:DŲADŲ_DŲhDŲDŲŽDŲˇDŲÁDŲĘDŲŅDŲéDŲõDŲüDŲEŲEŲ3EŲSEŲjEŲsEŲ}EŲ†EŲEŲĒEŲˇEŲžEŲãEŲōEŲųEŲFŲFŲ*FŲ?FŲGFŲbFŲmFŲyFŲ†FŲ’FŲŸFŲĢFŲąFŲ¸FŲÄFŲĐFŲÛFŲįFŲķFŲ˙FŲ GŲGŲ#GŲ)GŲÄŲ]ÄŲ|ÄŲ”ÄŲ›ÄŲŗÄŲēÄŲŌÄŲŲÄŲņÄŲøÄŲÅŲÅŲ/ÅŲ6ÅŲNÅŲUÅŲsÅŲzÅŲ’ÅŲ™ÅŲąÅŲˇÅŲĐÅŲ×ÅŲôÅŲûÅŲÆŲÆŲ>ÆŲaÆŲ~ÆŲ…ÆŲÆŲ¤ÆŲŧÆŲÃÆŲÛÆŲâÆŲúÆŲĮŲĮŲ ĮŲ8ĮŲ?ĮŲXĮŲ_ĮŲsĮŲyĮŲ›ĮŲĸĮŲÅĮŲĖĮŲéĮŲđĮŲČŲČŲ2ČŲ9ČŲMČŲTČŲrČŲxČŲ–ČŲČŲĀČŲĮČŲåČŲėČŲÉŲÉŲ.ÉŲ4ÉŲQÉŲWÉŲ‡ÉŲ‘ÉŲ–ÉŲ ÉŲŦÉŲˇÉŲÂÉŲÍÉŲ×ÉŲįÉŲīÉŲûÉŲĘŲĘŲĘŲ'ĘŲ1ĘŲAĘŲIĘŲUĘŲ`ĘŲkĘŲvĘŲ€ĘŲŒĘŲ—ĘŲĸĘŲ­ĘŲ¸ĘŲÂĘŲŌĘŲÚĘŲæĘŲņĘŲüĘŲËŲËŲËŲ(ËŲ3ËŲ>ËŲHËŲTËŲgËŲyËŲ‚ËŲ‹ËŲšËŲ­ËŲšËŲÅËŲŅËŲŨËŲéËŲ˙ËŲĖŲ5ĖŲ>ĖŲIĖŲYĖŲeĖŲwĖŲƒĖŲĖŲ›ĖŲ°ĖŲĘĖŲĐĖŲčĖŲũĖŲ ÍŲÍŲ$ÍŲ/ÍŲ5ÍŲLÍŲRÍŲiÍŲoÍŲ†ÍŲ›ÍŲēÍŲÔÍŲķÍŲ ÎŲÎŲ/ÎŲ5ÎŲRÎŲXÎŲzÎŲ‰ÎŲŋÎŲËÎŲ×ÎŲãÎŲīÎŲûÎŲĪŲĪŲĪŲ+ĪŲ7ĪŲCĪŲYĪŲzĪŲĨĪŲÁĪŲŨĪŲãĪŲĐŲĐŲ%ĐŲ,ĐŲDĐŲKĐŲjĐŲ‰ĐŲĄĐŲ¨ĐŲĀĐŲĮĐŲßĐŲæĐŲūĐŲŅŲŅŲ$ŅŲ<ŅŲCŅŲ[ŅŲbŅŲ€ŅŲ‡ŅŲŸŅŲĻŅŲžŅŲÄŅŲŨŅŲäŅŲŌŲŌŲ%ŌŲ,ŌŲKŌŲnŌŲ‹ŌŲ’ŌŲĒŌŲąŌŲÉŌŲĐŌŲčŌŲīŌŲĶŲĶŲ&ĶŲ-ĶŲEĶŲLĶŲeĶŲlĶŲ€ĶŲ†ĶŲ¨ĶŲ¯ĶŲŌĶŲŲĶŲöĶŲũĶŲÔŲ&ÔŲ?ÔŲFÔŲZÔŲaÔŲÔŲ…ÔŲŖÔŲĒÔŲÍÔŲÔÔŲōÔŲųÔŲÕŲ"ÕŲ;ÕŲAÕŲ^ÕŲdÕŲ”ÕŲžÕŲŖÕŲ­ÕŲšÕŲÄÕŲĪÕŲÚÕŲäÕŲôÕŲüÕŲÖŲÖŲ'ÖŲ=ÖŲXÖŲpÖŲ|ÖŲ…ÖŲŽÖŲ˜ÖŲĢÖŲ˛ÖŲâÖŲôÖŲ×Ų×Ų×Ų#×Ų:×ŲN×Ų[×Ųo×Ų|×Ų‰×Ų–×ŲŦ×ŲĖ×ŲĶ×Ųį×Ų˙×ŲØŲØŲ%ØŲ1ØŲ?ØŲLØŲYØŲfØŲxØŲ…ØŲ’ØŲŸØŲŦØŲšØŲÆØŲĶØŲāØŲįØŲ˙ØŲŲŲŲŲ%ŲŲ=ŲŲDŲŲ\ŲŲcŲŲ|ŲŲƒŲŲ ŲŲ§ŲŲĀŲŲĮŲŲäŲŲëŲŲÚŲ ÚŲ"ÚŲ)ÚŲAÚŲHÚŲ`ÚŲgÚŲÚŲ†ÚŲžÚŲĨÚŲŊÚŲÄÚŲÜÚŲãÚŲûÚŲÛŲÛŲ!ÛŲ5ÛŲ<ÛŲPÛŲWÛŲkÛŲrÛŲ†ÛŲÛŲĄÛŲ¨ÛŲŧÛŲÃÛŲ×ÛŲŪÛŲōÛŲųÛŲ ÜŲÜŲ(ÜŲ/ÜŲCÜŲJÜŲ^ÜŲeÜŲ†ÜŲÜŲŠÜŲ°ÜŲŅÜŲØÜŲųÜŲŨŲ&ŨŲ-ŨŲNŨŲUŨŲqŨŲxŨŲ™ŨŲ ŨŲ¸ŨŲŋŨŲåŨŲėŨŲŪŲŪŲ?ŪŲFŪŲlŪŲƒŪŲŠŪŲÅŪŲáŪŲčŪŲßŲ ßŲ$ßŲ+ßŲCßŲJßŲißŲˆßŲ ßŲ§ßŲŋßŲÆßŲŪßŲåßŲũßŲāŲāŲ#āŲ;āŲBāŲZāŲaāŲyāŲ€āŲ™āŲ āŲŊāŲÄāŲáāŲčāŲ áŲáŲ3áŲ:áŲRáŲYáŲváŲ}áŲ–áŲáŲļáŲŊáŲÚáŲááŲ˙áŲâŲ$âŲ+âŲIâŲPâŲdâŲkâŲˆâŲâŲŦâŲŗâŲĐâŲ×âŲôâŲûâŲãŲãŲ<ãŲCãŲ`ãŲgãŲ„ãŲ‹ãŲ¨ãŲ¯ãŲĮãŲĐãŲŲãŲâãŲëãŲõãŲäŲ äŲäŲ#äŲ.äŲ9äŲDäŲYäŲsäŲyäؐäŲ–äŲ­äŲŗäŲĘäŲĐäŲėäŲōäŲ åŲåŲ+åŲ1åŲRåŲXåŲ~åŲŠåŲ•åŲĸåŲ­åŲ¸åŲÃåŲÎåŲŲåŲīåŲ æŲ*æŲ1æŲHæŲOæŲfæŲmæŲ„æŲ‹æŲĸæŲŠæŲÅæŲĖæŲãæŲęæŲįŲ įŲ.įŲ5įŲ[įŲ`įŲjįŲvįŲ‚įŲŽįŲŖįŲÕįŲÚįŲßįŲëįŲöįŲčŲčŲčŲ&čŲ2čŲ>čŲJčŲVčŲbčŲÄčŲËčŲččŲīčŲéŲéŲ&éŲ-éŲEéŲLéŲkéŲƒéŲŠéŲĸéŲŠéŲÁéŲČéŲāéŲįéŲ˙éŲęŲęŲ%ęŲ>ęŲEęŲgęŲnęؐęŲ—ęŲ°ęŲˇęŲŲęŲāęŲūęŲëŲëŲ ëŲ=ëŲDëŲaëŲhëŲ…ëŲŒëŲŠëŲ°ëŲÍëŲÔëŲņëŲøëŲėŲėŲ9ėŲ@ėŲ]ėŲvėŲėŲˆėŲ—ėŲŖėŲ¯ėŲģėŲĐėŲ íŲíŲ#íŲ.íŲ9íŲCíŲOíŲZíŲeíŲpíŲzíŲ†íŲ‘íŲœíŲ§íŲąíŲŊíŲČíŲĶíŲŪíŲčíŲôíŲ˙íŲ îŲîŲîŲ+îŲ6îŲAîŲLîŲVîŲbîŲmîŲxîŲƒîŲîŲ™îŲ¤îŲ¯îŲēîŲÄîŲĐîŲÛîŲæîŲņîŲīŲ īŲīŲīŲ2īŲ9īŲUīŲ\īŲ‡īŲ“īŲžīŲŠīŲŗīŲŋīŲĘīŲÕīŲßīŲëīŲöīŲđŲ đŲđŲđŲ1đŲ;đŲGđŲPđŲZđŲmđŲtđؐđŲ—đŲÂđŲÎđŲŲđŲíđŲøđŲ ņŲņŲ+ņŲ2ņŲGņŲ]ņŲnņŲzņŲ…ņŲ‹ņŲžņŲ§ņŲ˛ņŲČņŲŲņŲåņŲđņŲöņŲ ōŲōŲōŲ)ōŲ4ōŲ?ōŲIōŲUōŲdōŲmōŲ†ōŲ•ōŲžōŲˇōŲÆōŲĪōŲčōŲ÷ōŲķŲķŲ(ķŲ1ķŲJķŲPķŲ]ķŲfķŲķŲŽķŲ—ķŲ°ķŲģķŲŅķŲâķŲîķŲųķŲ˙ķŲôŲôŲ&ôŲ<ôŲMôŲYôŲdôŲjôŲ}ôŲ†ôŲ‘ôŲ§ôŲ¸ôŲÄôŲĪôŲÕôŲčôŲņôŲüôŲõŲ#õŲ/õŲ:õŲ@õŲSõŲ\õŲgõŲ}õŲŽõŲšõŲĨõŲĢõŲžõŲĮõŲŌõŲčõŲųõŲöŲöŲöŲ)öŲ2öŲ=öŲSöŲdöŲpöŲ{ö؁öŲ”öŲöŲ¨öŲžöŲĪöŲÛöŲæöŲėöŲ˙öŲ÷Ų÷Ų)÷Ų:÷ŲF÷ŲQ÷ŲW÷Ųj÷Ųs÷Ų~÷ŲŠ÷Ų•÷Ų ÷ŲĢ÷Ųļ÷ŲĀ÷ŲĖ÷Ų×÷Ųâ÷Ųí÷Ų÷÷ŲøŲøŲ%øŲ6øŲLøŲ]øŲsøŲ„øŲšøŲĢøŲÁøŲŌøŲčøŲųøŲųŲųŲųŲ)ųŲ2ųŲ=ųŲSųŲdųŲzųŲ‹ųŲĄųŲ˛ųŲČųŲŲųŲīųŲúŲ úŲ6úŲ_úŲˆúŲąúŲÚúŲûŲ ûŲ6ûŲ_ûŲˆûŲąûŲÚûŲüŲüŲ'üŲ=üŲNüŲdüŲuüŲzüŲüŲˆüŲŽüŲĻüŲĮüŲÍüŲæüŲíüŲũŲũŲ(ũŲ/ũŲLũŲSũŲpũŲyũŲ‚ũŲˆũŲĄũŲ§ũŲĮũŲáũŲûũŲūŲ%ūŲ9ūŲIūŲ]ūŲ|ūŲ‘ūŲĢūŲģūŲÄūŲĘūŲéūŲųūŲ˙Ų ˙Ų˙Ų/˙Ų8˙ŲA˙ŲU˙Ųe˙Ųn˙Ųw˙Ų‹˙Ų›˙Ų¤˙ŲŊ˙ŲĖ˙ŲÛ˙Ųę˙Ųų˙Ų ŲŲ+Ų:ŲIŲhŲwŲ†Ų–ŲŸŲŽŲĖŲÕŲđŲŲŲ Ų/ŲGŲTŲnŲƒŲ’Ų›Ų¯ŲēŲÎŲŲŲûŲŲŲ%ŲGŲRŲfŲqŲ“ŲžŲ˛ŲŊŲßŲīŲøŲŲŲ0Ų;Ų]ŲhŲ|Ų‡ŲŠŲšŲÂŲÛŲëŲ˙ŲŲ#Ų.ŲBŲMŲoŲ’Ų°ŲĘŲÕŲéŲôŲŲ4ŲNŲYŲmŲxŲšŲ¸ŲŌŲŨŲņŲüŲŲFŲUŲ^Ųw؇ؐ؎دŲĪŲčŲ÷ŲŲŲ.Ų=ŲQŲaŲpŲ€ŲŠŲ“ŲŦŲŧŲËŲÛŲåŲîŲŲ*Ų:ŲIŲYŲcŲlŲ…Ų•Ų¤Ų´ŲžŲĮŲāŲīŲūŲ Ų& Ų6 ŲE ŲU Ų_ Ųh ؁ Ų‘ Ų  Ų° Ųē Ųà ŲÜ Ųė Ųû Ų Ų Ų Ų7 ŲG ŲV Ųf Ųp Ųy Ų’ Ųĸ Ųą ŲÁ ŲË ŲÔ Ųí Ųũ Ų Ų Ų& Ų/ ŲM Ų] Ųl Ų| Ų¨ Ų¸ ŲĮ Ų× Ų Ų5 ŲE ŲT Ųd Ųn Ųw ؐ Ų  Ų¯ Ųŋ ŲÉ ŲŌ Ųë Ųû Ų Ų Ų$ Ų- ŲF ŲV Ųe Ųu Ų Ųˆ ŲĄ Ųŋ ŲŲ Ųä Ųø ŲŲ%Ų5ŲDŲTŲ^ŲgŲ€ŲŲŸŲ¯ŲšŲÂŲÛŲëŲúŲ ŲŲŲ6ŲFŲUŲeŲoŲxŲ‘ŲĄŲ°ŲĀŲĘŲĶŲėŲüŲ ŲŲ%Ų.ŲGŲVŲ_ŲxŲˆŲ‘Ų¸ŲČŲŅŲÚŲøŲŲ9ŲIŲRŲ[ŲoŲ—ŲĻŲ¯ŲČŲØŲáŲŲŲ!Ų*ŲHŲpŲŲˆŲĄŲąŲēŲáŲņŲúŲŲ!Ų1Ų:ŲSŲ{ŲŠŲ“ŲŦŲŧŲÅŲėŲüŲŲŲ,Ų<ŲEŲ^ŲmŲ|Ų‹Ų¤ŲŗŲĮŲÜŲëŲúŲ ŲŲ&Ų5Ų>ŲWŲgŲpŲyŲŲŦŲÔŲãŲėŲŲŲŲEŲTŲhŲxŲ¤ŲÖŲåŲîŲŲŲ ŲGŲWŲ`ŲiŲ‡Ų—Ų ŲšŲČŲŅŲęŲúŲŲ*Ų:ŲCŲ\ŲlŲ˜Ų¨ŲÔŲŲŲŲ7ŲGŲPŲw؇ؙؐ؎ŲĮŲĐŲéŲųŲ%Ų5ŲaŲ“ŲĸŲĢŲÄŲÔŲŨŲŲŲŲ&ŲDŲTŲ]ŲvŲ†Ų˛ŲÂŲîŲ Ų/Ų8ŲQŲaŲjŲ‘ŲĄŲĒŲŗŲŅŲáŲęŲŲŲ?ŲOŲ{Ų­ŲŧŲÅŲŪŲîŲ÷ŲŲ.Ų7Ų@Ų^ŲnŲwؐؠŲĖŲÜŲŲ:ŲIŲRŲkŲ{Ų„ŲĢŲģŲÄŲÍŲëŲûŲ Ų Ų( Ų8 ŲA ŲJ Ų^ Ųn Ųw Ų† Ų Ų° ŲÖ Ųß Ų˙ Ų!Ų!Ų)!Ų2!Ų;!ŲO!ŲV!Ųc!Ųl!Ųu!Ų‰!Ų™!Ųĸ!ŲĢ!Ųŋ!ŲÅ!ŲŌ!ŲÛ!Ųų!Ų "Ų"Ų#"Ų0"Ų9"ŲW"Ų]"Ųj"Ųs"Ų‘"ŲĄ"ŲĒ"ŲÃ"ŲŌ"ŲÛ"Ųô"Ų#Ų&#Ų6#Ų?#Ų]#Ųm#Ųv#Ų#ŲŸ#Ų¨#ŲÁ#ŲĐ#ŲŲ#Ųō#Ųø#Ų$Ų $Ų$Ų%$Ų+$Ų;$ŲA$ŲN$ŲW$Ųu$Ų{$Ų€$Ų†$Ų™$Ų $Ųž$ŲÄ$ŲĶ$ŲŲ$Ųė$Ųō$Ų˙$Ų%Ų%Ų %Ų'%Ų.%Ų5%Ų<%ŲC%ŲJ%ŲQ%ŲX%Ų_%Ųd%Ųo%Ų{%Ų‡%Ų“%ŲŸ%ŲĢ%Ųˇ%ŲÃ%ŲĐ%ŲŨ%Ųę%Ų÷%Ų&Ų&Ų&Ų+&Ų8&ŲE&ŲR&Ų_&Ųl&Ųy&Ų†&Ų“&Ų &Ų­&Ųē&ŲĮ&ŲÔ&Ųá&Ųī&Ųú&Ų'Ų'Ų'Ų)'Ų:'ŲE'ŲQ'Ų]'Ų|'؁'ŲŒ'Ų¨'Ųž'ŲÚ'Ų(Ų(ŲA(Ų\(Ųx(Ų”(ŲĒ(Ųļ(ŲÜ(Ų)Ų")ŲM)Ųh)Ų~)ŲŸ)Ųģ)ŲÖ)Ųö)Ų*Ų;*Ų[*Ųv*Ų‘*Ųˇ*ŲŅ*Ųë*Ų+Ų+Ų9+Ųt+Ų€+ŲŒ+Ų˜+Ų¤+Ų°+Ųŧ+ŲČ+ŲÔ+Ųā+Ųė+Ųų+Ų,Ų.,ŲM,Ųl,Ų—,Ų˛,ŲĶ,Ųî,Ų-Ų.-ŲN-Ųm-Ųƒ-ŲŖ-ŲÃ-Ųã-Ų.Ų.Ų1.Ų7.ŲO.ŲV.Ųn.Ųt.ŲŒ.Ų“.ŲĢ.Ų˛.ŲĪ.Ųņ.Ųü.Ų/Ų/Ų./ŲA/ŲU/Ųm/Ų…/Ų/Ų›/Ų§/ŲÁ/ŲÔ/Ųč/Ųō/Ųū/Ų 0Ų$0Ų<0ŲT0Ųg0Ų{0Ų0Ųž0Ų­0Ųŧ0ŲË0ŲÖ0Ųô0Ų1Ų 1Ų1Ų$1Ų01Ų<1ŲR1Ųm1Ųˆ1ŲŽ1ŲĢ1Ųą1ŲÎ1ŲÔ1Ųö1Ųü1Ų2Ų 2Ų82Ų>2Ų\2Ųb2ŲŠ2Ų–2Ųĸ2ŲŽ2Ųē2ŲÆ2ŲŌ2Ųč2Ų3Ų3Ų$3ŲA3ŲG3Ųd3Ųj3ŲŒ3Ų’3Ų°3Ųļ3ŲÎ3ŲÔ3Ųō3Ųø3Ų 4Ų,4Ų74ŲB4ŲM4ŲX4Ųb4Ųo4Ų}4ŲŠ4Ų—4Ų¤4Ųģ4Ų×4ŲŪ4Ųö4Ųũ4Ų5Ų5Ų45Ų;5ŲX5Ų_5Ųw5Ų~5Ų›5Ųĸ5Ųŋ5ŲÆ5Ųã5Ųę5Ų6Ų6Ų+6Ų26ŲO6ŲV6Ųn6Ųw6؁6ŲŽ6Ųœ6ŲŠ6Ųļ6ŲÃ6ŲÚ6Ųö6Ųũ6Ų7Ų7Ų47Ų;7ŲS7ŲZ7Ųw7Ų~7Ų–7Ų7Ųē7ŲÁ7ŲŪ7Ųå7Ų8Ų 8Ų&8Ų-8ŲJ8ŲQ8Ųn8Ųu8Ų8Ų–8Ų 8ŲĨ8ŲĒ8Ųļ8ŲÁ8ŲĖ8Ų×8Ųâ8Ųė8Ųø8Ų9Ų9Ų9Ų$9Ų.9Ų:9ŲE9ŲP9Ų[9Ųf9Ųp9Ų|9Ųˆ9Ų”9Ų 9ŲŦ9Ų¸9ŲÎ9Ųé9Ų:Ų :Ų':Ų-:ŲJ:ŲP:Ųr:Ųx:Ų–:Ųœ:Ų´:Ųē:ŲØ:ŲŪ:Ų;Ų;Ų;Ų(;Ų.;ŲF;ŲL;Ųe;Ųk;Ų;Ų…;Ų˜;Ųž;Ųą;Ųˇ;ŲË;Ų×;Ųė;Ųö;Ų<Ų<Ų<Ų&<Ų2<Ų><ŲT<Ųo<ŲŠ<ؐ<Ų­<Ųŗ<ŲĐ<ŲÖ<Ųø<Ųū<Ų=Ų"=Ų:=Ų@=Ų^=Ųd=ŲŒ=Ų˜=Ų¤=Ų°=Ųŧ=ŲČ=ŲÔ=Ųę=Ų>Ų >Ų&>ŲC>ŲI>Ųf>Ųl>ŲŽ>Ų”>Ų˛>Ų¸>ŲĐ>ŲÖ>Ųô>Ųú>Ų"?Ų.?Ų9?ŲD?ŲO?ŲZ?Ųe?Ųk?Ųƒ?Ų‰?Ųĸ?Ų¨?Ųŧ?ŲÂ?ŲÕ?ŲÛ?Ųî?Ųô?Ų@Ų@Ų)@Ų5@ŲJ@Ųn@Ųx@Ų…@Ų“@Ų @Ų­@Ųē@ŲŅ@Ųí@Ųô@Ų AŲAŲ+AŲ2AŲJAŲQAŲnAŲuAŲAŲ”AŲąAŲ¸AŲÕAŲÜAŲųAŲBŲBŲ$BŲABŲHBŲeBŲlBŲ„BŲBŲ—BŲ¤BŲ˛BŲŋBŲĖBŲŲBŲæBŲũBŲCŲ CŲ8CŲ?CŲWCŲ^CŲvCŲ}CŲšCŲĄCŲšCŲĀCŲŨCŲäCŲDŲDŲ%DŲ,DŲIDŲPDŲmDŲtDŲ‘DŲ˜DŲ°DŲšDŲÃDŲĪDŲÛDŲįDŲķDŲ˙DŲ EŲ!EŲRŲIRŲTRŲ_RŲjRŲuRŲ{RŲ“RŲ™RŲ˛RŲ¸RŲĖRŲŌRŲåRŲëRŲūRŲSŲSŲ$SŲ9SŲ]SŲgSŲtSŲ‚SŲSŲœSŲŠSŲļSŲÍSŲéSŲđSŲTŲTŲ'TŲ.TŲFTŲMTŲjTŲqTŲ‰TؐTŲ­TŲ´TŲŅTŲØTŲõTŲüTŲUŲ UŲ=UŲDUŲaUŲhUŲ€UŲ‰UŲ“UŲ˜UŲ¤UŲ°UŲŧUŲČUŲÔUŲāUŲöUŲVŲ,VŲ2VŲOVŲUVŲrVŲxVŲšVŲ VŲžVŲÄVŲÜVŲâVŲWŲWŲ.WŲ:WŲEWŲPWŲ[WŲfWŲqWŲwWŲWŲ•WŲŽWŲ´WŲČWŲÎWŲáWŲįWŲúWŲXŲXŲ XŲ5XŲYXŲcXŲpXŲ~XŲ‹XŲ˜XŲĨXŲŧXŲØXŲßXŲ÷XŲūXŲYŲYŲ5YŲ_Ųb_Ųl_Ųy_Ų‡_Ų”_ŲĄ_ŲŽ_ŲÅ_Ųá_Ųč_Ų`Ų`Ų`Ų&`Ų>`ŲE`Ųb`Ųi`؁`Ųˆ`ŲĨ`ŲŦ`ŲÉ`ŲĐ`Ųí`Ųô`ŲaŲaŲ5aŲeŲEeŲ]eŲdeŲ|eŲƒeŲ eŲ§eŲŋeŲÆeŲãeŲęeŲfŲfŲ+fŲ2fŲOfŲVfŲsfŲzfŲ—fŲžfŲļfŲŋfŲÉfŲÖfŲäfŲņfŲūfŲ gŲ"gŲ>gŲEgŲ]gŲdgŲ|gŲƒgŲ›gŲĸgŲŋgŲÆgŲŪgŲågŲhŲ hŲ&hŲ-hŲJhŲQhŲnhŲuhŲ’hŲ™hŲļhŲŊhŲÕhŲŪhŲčhŲôhŲiŲ iŲiŲ$iŲ0iŲFiŲaiŲ|iŲ‚iŲŸiŲĨiŲÂiŲČiŲęiŲđiŲjŲjŲ,jŲ2jŲPjŲVjŲ~jŲŠjŲ•jŲ jŲĢjŲļjŲÁjŲĮjŲßjŲåjŲūjŲkŲkŲkŲ1kŲ7kŲJkŲPkŲdkŲpkŲ…kŲŠkŲŗkŲĀkŲÎkŲÛkŲčkŲõkŲlŲlŲ5lŲxŲ\xŲbxŲzxŲ€xŲžxŲ¤xŲĖxŲØxŲãxŲîxŲųxŲyŲyŲyŲ-yŲ3yŲLyŲRyŲfyŲlyŲyŲ…yŲ˜yŲžyŲ˛yŲžyŲĶyŲ÷yŲzŲzŲzŲ)zŲ6zŲCzŲPzŲgzŲƒzŲŠzŲĸzŲŠzŲÁzŲČzŲāzŲįzŲ{Ų {Ų#{Ų*{ŲG{ŲN{Ųk{Ųr{Ų{Ų–{Ųŗ{Ųē{Ų×{ŲŪ{Ųû{Ų|Ų|Ų#|Ų-|Ų:|ŲH|ŲU|Ųb|Ųo|Ų†|Ųĸ|ŲŠ|ŲÁ|ŲČ|Ųā|Ųį|Ų˙|Ų}Ų#}Ų*}ŲB}ŲI}Ųf}Ųm}ŲŠ}Ų‘}ŲŽ}Ųĩ}ŲŌ}ŲŲ}Ųö}Ųũ}Ų~Ų!~Ų9~ŲB~Ųe~Ųq~Ų}~Ų‰~Ų•~ŲĄ~Ų­~ŲÃ~ŲŪ~Ųų~Ų˙~ŲŲ"Ų?ŲEŲgŲmŲ‹Ų‘ŲŠŲ¯ŲÍŲĶŲûŲ€Ų€Ų€Ų(€Ų3€Ų>€ŲD€Ų\€Ųb€Ų{€Ų€Ų•€Ų›€ŲŽ€Ų´€ŲĮ€Ų̀Ųá€Ųí€ŲŲ&Ų0Ų=ŲKŲXŲeŲrŲ‰ŲĨŲŦŲāŲˁŲãŲęŲ‚Ų ‚Ų&‚Ų-‚ŲE‚ŲL‚Ųi‚Ųp‚Ų‚Ų”‚Ųą‚Ų¸‚ŲՂŲ܂Ųų‚ŲƒŲƒŲ$ƒŲ<ƒŲEƒŲOƒŲYƒŲeƒŲqƒŲ}ƒŲ‰ƒŲ•ƒŲĄƒŲˇƒŲԃŲíƒŲķƒŲ„Ų„Ų3„Ų9„Ų[„Ųa„Ų„Ų…„Ų„ŲŖ„ŲÁ„ŲĮ„Ųī„Ųû„Ų…Ų…Ų…Ų/…Ų5…ŲN…ŲT…Ųh…Ųn…؁…Ų‡…Ųš…Ų …Ų´…Ųõ…Ų†Ų †Ų'†ŲA†Ų[†Ųk†Ųt†Ųˆ†Ų˜†ŲĄ†Ųĩ†ŲņŲΆŲâ†Ųō†Ųû†Ų‡Ų‡Ų(‡Ų<‡ŲL‡ŲU‡Ųi‡Ųy‡Ų‚‡Ų–‡ŲχŲ¯‡ŲÇŲ͇Ų܇Ųđ‡ŲˆŲ ˆŲˆŲ-ˆŲ6ˆŲJˆŲZˆŲcˆŲwˆŲ‡ˆŲˆŲ¤ˆŲŗˆŲˆŲԈŲۈŲīˆŲ˙ˆŲ‰Ų‰Ų,‰Ų5‰ŲI‰ŲY‰Ųb‰Ųv‰Ų…‰Ų”‰Ų¤‰Ų­‰ŲÁ‰Ų҉ŲډŲî‰Ųū‰ŲŠŲŠŲ+ŠŲ4ŠŲHŠŲXŠŲaŠŲuŠŲ…ŠŲŽŠŲĸŠŲ˛ŠŲģŠŲΊŲߊŲčŠŲņŠŲ‹Ų‹Ų‹Ų2‹Ų>‹ŲG‹Ų\‹Ųw‹Ų—‹Ųˇ‹ŲŒŲŒŲŒŲ*ŒŲ6ŒŲBŒŲNŒŲZŒŲfŒŲrŒŲ~ŒŲŠŒŲ–ŒŲĸŒŲތŲēŒŲƌŲԌŲیŲęŒŲöŒŲŲŲŲ&Ų3ŲMŲ^ŲiŲtŲŲŠŲ•Ų ŲĢŲļŲÁŲĖŲ׍ŲōŲũŲŽŲŽŲ ŽŲ+ŽŲ6ŽŲAŽŲLŽŲWŽŲbŽŲnŽŲzŽŲ‡ŽŲĸŽŲŽŽŲēŽŲĮŽŲŌŽŲŪŽŲņŽŲŲ Ų&Ų2Ų?ŲJŲVŲbŲnŲzŲ†ŲšŲĨŲ°ŲĖŲۏŲäŲīŲûŲŲSŲM‘ŲX‘Ųn‘Ųˆ‘Ųĸ‘Ųˇ‘Ų)’Ų2’ŲL’ŲZ’Ųc’Ų}’Ų‹’Ų”’ŲŽ’Ųš’ŲĮ’ŲВŲŨ’Ųč’Ųķ’Ų“Ų"“Ų.“Ų:“ŲF“Ų•“Ų “ŲŦ“Ų¸“ŲēŲГŲܓŲč“Ųô“Ų”Ų ”Ų”Ų$”Ų0”Ų<”ŲH”ŲT”Ų`”Ųl”Ų~”ŲŠ”Ų–”ŲĄ”ŲŽ”Ųģ”ŲȔŲՔŲâ”Ųī”Ųü”Ų •Ų•Ų,•Ų=•ŲN•Ų_•Ųp•Ų‡•Ų“•Ų¤•Ų­•Ųē•ŲȕŲՕŲâ•Ųû•Ų–Ų–Ų"–Ų –Ų§–Ųŋ–ŲƖŲߖŲæ–Ų˙–Ų—Ų—Ų&—Ų?—ŲF—Ų^—Ųe—Ų€—Ų—Ų“—Ų™—ŲŸ—ŲĻ—Ųŗ—ŲĀ—Ųæ—Ų˜Ų ˜Ų!˜Ų<˜ŲC˜Ųb˜Ųo˜Ų}˜Ų‹˜Ų™˜Ų ˜Ų´˜Ųģ˜ŲΘŲ֘Ųë˜Ų™Ų™Ų,™ŲH™Ųc™Ųj™Ų„™Ų‘™Ųž™Ųē™Ų֙Ųņ™Ųø™ŲšŲšŲ+šŲ6šŲQšŲ_šŲzšŲˆšŲ•šŲĸšŲžšŲښŲášŲųšŲ›Ų›Ų7›Ų>›ŲV›Ų]›Ųv›Ų‘›Ų˜›ŲŊ›ŲʛŲЛŲå›Ųë›ŲœŲ œŲ œŲ&œŲ@œŲFœŲ`œŲfœŲ€œŲ†œŲ œŲϜŲģœŲÁœŲ֜ŲܜŲņœŲŲŲŲ1ŲLŲgŲmŲ‘ŲĒŲ°ŲȝŲΝŲįŲíŲøŲūŲ"žŲ(žŲBžŲHžŲfžŲlžŲ„žŲŠžŲĸžŲ¨žŲĀžŲƞŲŪžŲäžŲŸŲŸŲŸŲ%ŸŲ=ŸŲCŸŲ[ŸŲaŸŲyŸŲŸŲ—ŸŲŸŲĩŸŲģŸŲ͟Ų؟ŲėŸŲōŸŲ  Ų% Ų1 ŲV Ųq Ų‹ Ų‘ ŲĢ Ų¸ ŲÆ ŲĶ Ųā Ųí Ųú ŲĄŲĄŲ&ĄŲ2ĄŲ?ĄŲYĄŲuĄŲ|ĄŲ‘ĄŲ˜ĄŲĒĄŲ´ĄŲģĄŲĶĄŲÚĄŲōĄŲųĄŲĸŲĸŲ0ĸŲ7ĸŲOĸŲVĸŲsĸŲzĸŲĸŲ”ĸŲŦĸŲģĸŲČĸŲÖĸŲãĸŲđĸŲũĸŲ ŖŲŖŲ$ŖŲ6ŖŲBŖŲOŖŲiŖŲ…ŖŲŒŖŲĄŖŲ¨ŖŲēŖŲÄŖŲËŖŲãŖŲęŖŲ¤Ų ¤Ų!¤Ų(¤Ų@¤ŲG¤Ų_¤Ųf¤Ųƒ¤ŲФŲ¤Ų¤¤Ųŧ¤ŲˤŲؤŲå¤Ųō¤Ų ĨŲĨŲ=ĨŲDĨŲhĨŲvĨŲˆĨŲ•ĨŲąĨŲ¸ĨŲŅĨŲØĨŲõĨŲĻŲĻŲ,ĻŲCĻŲTĻŲaĻŲgĻŲoĻŲ|ĻŲ‚ĻŲˆĻؐĻŲ›ĻŲ§ĻŲŽĻŲÖĻŲíĻŲ§Ų§Ų5§Ų;§Ų\§Ųb§Ųˆ§ŲާŲ°§Ųˇ§Ų§ŲɧŲŲ§Ųķ§Ųų§Ų¨Ų¨Ų&¨Ų2¨Ų?¨ŲL¨Ųv¨Ų‘¨Ų—¨Ų¯¨Ųĩ¨ŲͨŲ͍Ųë¨Ųņ¨Ų ŠŲ$ŠŲ+ŠŲEŠŲSŠŲZŠŲlŠŲzŠŲŠŲ”ŠŲĻŠŲąŠŲŌŠŲŲŠŲųŠŲĒŲ!ĒŲ(ĒŲDĒŲ[ĒŲvĒŲ}ĒŲ’ĒŲŸĒŲĢĒŲ¸ĒŲĪĒŲëĒŲōĒŲĢŲ!ĢŲ(ĢŲBĢŲOĢŲ\ĢŲxĢŲ”ĢŲ›ĢŲŗĢŲēĢŲŲĢŲņĢŲøĢŲŦŲŦŲ0ŦŲKŦŲRŦŲwŦŲƒŦؐŦŲŦŲšŦŲÕŦŲÜŦŲôŦŲûŦŲ­Ų2­Ų9­ŲQ­ŲX­Ųq­ŲŒ­Ų“­Ų¸­ŲĘ­ŲÜ­Ųį­ŲŽŲŽŲ/ŽŲFŽŲaŽŲhŽŲ~ŽŲ–ŽŲŖŽŲ°ŽŲĮŽŲčŽŲīŽŲ¯Ų¯Ų,¯Ų3¯ŲK¯ŲR¯Ųl¯Ųs¯Ų•¯Ųœ¯ŲïŲƝŲė¯Ųķ¯Ų°Ų°Ų>°ŲE°Ųg°Ųn°Ų°Ų—°Ųš°Ų°Ųâ°Ųé°Ų ąŲąŲ4ąŲ;ąŲbąŲiąŲŠąŲĨąŲŦąŲÁąŲÎąŲÛąŲčąŲõąŲ˛Ų˛Ų9˛ŲU˛Ų\˛Ųu˛Ų˛Ųœ˛ŲĮ˛Ųã˛Ųę˛ŲŗŲŗŲ%ŗŲ?ŗŲKŗŲWŗŲcŗŲoŗŲ”ŗŲ¯ŗŲÉŗŲĪŗŲäŗŲúŗŲ´Ų´Ų´Ų*´Ų6´ŲB´ŲN´ŲZ´Ųf´Ųr´Ų~´ŲŠ´Ų–´Ųĸ´ŲŽ´Ųē´ŲÆ´ŲŌ´Ųč´ŲĩŲ ĩŲĩŲ&ĩŲBĩŲIĩŲfĩŲ€ĩŲ›ĩŲŠĩŲ°ĩŲģĩŲÂĩŲĖĩŲĶĩŲėĩŲķĩŲ ļŲļŲ*ļŲ7ļŲDļŲQļŲ^ļŲvļŲļŲĢļŲŧļŲĪļŲŨļŲãļŲëļŲöļŲˇŲˇŲˇŲ*ˇŲ7ˇŲDˇŲQˇŲ^ˇŲkˇŲxˇŲ…ˇŲ’ˇŲŸˇŲŦˇŲšˇŲÆˇŲ͎ŲāˇŲíˇŲúˇŲ¸Ų¸Ų!¸Ų.¸Ų<¸ŲK¸ŲY¸Ųu¸Ų–¸Ų¸Ųĩ¸Ųŧ¸ŲÕ¸ŲܸŲô¸Ųû¸ŲšŲšŲ3šŲ:šŲRšŲYšŲqšŲxšŲšŲ—šŲ¯šŲļšŲΚŲÕšŲíšŲôšŲ ēŲēŲ+ēŲ2ēŲJēŲQēŲiēŲpēŲˆēŲēŲ§ēŲŽēŲÆēŲÍēŲåēŲėēŲ ģŲģŲ-ģŲ4ģŲLģŲSģŲkģŲrģŲŠģŲ‘ģŲĒģŲąģŲÉģŲĐģŲíģŲôģŲ ŧŲ'ŧŲJŧŲQŧŲiŧŲpŧŲ‰ŧؐŧŲŠŧŲ°ŧŲÄŧŲËŧŲãŧŲęŧŲūŧŲŊŲŊŲ ŊŲ9ŊŲ@ŊŲ]ŊŲdŊŲxŊŲŊŲ—ŊŲžŊŲļŊŲŊŊŲÕŊŲÜŊŲôŊŲûŊŲžŲžŲ2žŲ9žŲMžŲTžŲlžŲsžŲ‹žŲ’žŲĻžŲ­žŲÁžŲČžŲÜžŲãžŲ÷žŲūžŲŋŲŋŲ5ŋŲ<ŋŲPŋŲWŋŲkŋŲrŋŲŠŋŲ‘ŋŲŠŋŲÄŋŲËŋŲāŋŲíŋŲúŋŲĀŲ ĀŲ-ĀŲIĀŲPĀŲhĀŲƒĀŲŠĀŲŖĀŲžĀŲÕĀŲņĀŲ ÁŲÁŲ,ÁŲ3ÁŲRÁŲrÁŲ‹ÁŲ’ÁŲ›ÁŲĸÁŲšÁŲÔÁŲÛÁŲÂŲÂŲÂŲ;ÂŲWÂŲ^ÂŲvÂŲ}ÂŲœÂŲ´ÂŲģÂŲĶÂŲÚÂŲķÂŲÃŲÃŲ:ÃŲGÃŲTÃŲpÃŲŒÃŲ“ÃŲĢÃŲ˛ÃŲŅÃŲéÃŲđÃŲÄŲÄŲ(ÄŲCÄŲJÄŲkÄŲ|ÄŲ‡ÄŲ ÄŲ´ÄŲÕÄŲÛÄŲÅŲ(ÅŲ5ÅŲCÅŲ[ÅŲhÅŲ„ÅŲ‹ÅŲŖÅŲžÅŲÅÅŲŪÅŲųÅŲÆŲ,ÆŲHÆŲOÆŲgÆŲnÆŲÆŲ­ÆŲÆÆŲÍÆŲÖÆŲŨÆŲôÆŲĮŲĮŲ@ĮŲMĮŲZĮŲvĮŲ’ĮŲ™ĮŲąĮŲ¸ĮŲ×ĮŲīĮŲöĮŲČŲČŲ.ČŲIČŲPČŲqČŲƒČŲ–ČŲĄČŲēČŲĪČŲĶČŲđČŲÉŲÉŲ;ÉŲBÉŲ_ÉŲfÉŲƒÉŲ‘ÉŲĒÉŲˇÉŲÄÉŲŅÉŲōÉŲĘŲĘŲ<ĘŲCĘŲWĘŲ^ĘŲyĘŲ”ĘŲ›ĘŲ°ĘŲˇĘŲËĘŲėĘŲ ËŲËŲ2ËŲ9ËŲ[ËŲbËŲ‰ËؐËŲˇËŲžËŲāËŲįËŲ ĖŲĖŲ2ĖŲ9ĖŲ[ĖŲbĖŲƒĖŲŠĖŲĸĖŲŠĖŲŧĖŲÃĖŲßĖŲúĖŲÍŲÍŲHÍŲUÍŲ[ÍŲaÍŲgÍŲnÍŲ{ÍŲˆÍŲ¤ÍŲĀÍŲÛÍŲâÍŲüÍŲ ÎŲÎŲ2ÎŲ9ÎŲVÎŲpÎŲ•ÎŲĄÎŲ§ÎŲ­ÎŲŗÎŲšÎŲĀÎŲÍÎŲÚÎŲņÎŲ ĪŲĪŲ-ĪŲ4ĪŲLĪŲnĪŲ{ĪŲˆĪŲ–ĪŲąĪŲžĪŲËĪŲįĪŲĐŲ ĐŲ"ĐŲ)ĐŲ<ĐŲCĐŲVĐŲqĐŲxĐŲ’ĐŲžĐŲ¤ĐŲĒĐŲąĐŲ¸ĐŲÁĐŲĪĐŲÖĐŲķĐŲŅŲŅŲ%ŅŲ2ŅŲGŅŲTŅŲ[ŅŲoŅŲxŅŲ‚ŅŲŅŲœŅŲŖŅŲŦŅŲŗŅŲÆŅŲÍŅŲÜŅŲîŅŲüŅŲŌŲ ŌŲ.ŌŲ5ŌŲSŌŲeŌŲpŌŲ‰ŌŲžŌŲĸŌŲĀŌŲßŌŲöŌŲĶŲĶŲ$ĶŲEĶŲKĶŲlĶŲrĶŲŠĶŲ¤ĶŲĒĶŲÅĶŲÜĶŲõĶŲ ÔŲÔŲJÔŲkÔŲƒÔؐÔŲÔŲļÔŲáÔŲčÔŲÕŲÕŲÕŲ5ÕŲMÕŲZÕŲsÕŲ”ÕŲ›ÕŲģÕŲÂÕŲÜÕŲũÕŲÖŲ.ÖŲOÖŲVÖŲwÖŲ˜ÖŲ°ÖŲŊÖŲĘÖŲ×ÖŲäÖŲņÖŲūÖŲ ×Ų$×ŲE×Ųg×Ųn×Ų×Ų–×Ųģ×ŲÂ×ŲÚ×Ųá×Ųų×ŲØŲØŲØŲ8ØŲ?ØŲWØŲ^ØŲwØŲ~ØŲ–ØŲØŲļØŲŊØŲÕØŲÜØŲõØŲüØŲŲŲŲŲ5ŲŲ<ŲŲXŲŲpŲŲ}ŲŲšŲŲĄŲŲÂŲŲŨŲŲäŲŲũŲŲÚŲ1ÚŲ>ÚŲ[ÚŲbÚŲƒÚŲžÚŲĨÚŲžÚŲÚÚŲėÚŲ÷ÚŲÛŲ/ÛŲ6ÛŲaÛŲhÛŲ„ÛŲŸÛŲĻÛŲĀÛŲĖÛŲŲÛŲņÛŲūÛŲ ÜŲÜŲ/ÜŲ6ÜŲaÜŲhÜŲ„ÜŲŸÜŲĻÜŲŋÜŲāÜŲøÜŲŨŲ"ŨŲ)ŨŲOŨŲVŨŲiŨŲpŨŲƒŨŲŠŨŲĸŨŲŠŨŲŧŨŲÃŨŲÖŨŲŨŨŲđŨŲ÷ŨŲŪŲŪŲ0ŪŲ7ŪŲPŪŲWŪŲkŪŲrŪŲ†ŪŲŪŲ ŪŲģŪŲÂŪŲÛŪŲßŲßŲ2ßŲJßŲQßŲgßŲnßؐßŲ—ßŲžßŲÅßŲįßŲîßŲāŲāŲ9āŲ@āŲbāŲiāŲ‹āŲ’āŲ´āŲģāŲŨāŲäāŲáŲ áŲ/áŲ6áŲ]áŲdáŲ…áŲŒáŲœáŲęáŲâŲâŲ7âŲ\âŲsâŲâŲšâŲĻâŲÁâŲ×âŲíâŲãŲãŲ:ãŲBãŲXãŲnãŲ„ãŲ¤ãŲŋãŲßãŲōãŲūãŲäŲ4äŲJäŲ`äŲväŲ‚äŲ—äŲ´äŲšäŲáäŲõäŲ åŲ!åŲ;åŲOåŲdåŲ{åŲ”åŲ¤åŲ­åŲÂåŲÎåŲ×åŲëåŲûåŲæŲæŲ(æŲ1æŲFæŲ]æŲtæŲ€æŲ‰æŲžæŲĒæŲŗæŲĮæŲĶæŲßæŲüæŲįŲ,įŲBįŲ\įŲ{įŲ“įŲĢįŲÉįŲāįŲøįŲčŲ.čŲEčŲXčŲdčŲmč؁čŲŽčŲŦčŲ¸čŲØčŲîčŲúčŲéŲ(éŲ4éŲ=éŲFéŲNéŲZéŲgéŲéŲ–éŲąéŲžéŲæéŲķéŲęŲ0ęŲ\ęŲyęŲ‘ęŲ­ęŲŋęŲÕęŲīęŲëŲëŲ#ëŲ6ëŲ=ëŲRëŲYëŲiëŲpëŲuëŲ|ëŲ•ëŲĢëŲ˛ëŲĪëŲÖëŲķëŲúëŲėŲėŲ&ėŲ,ėŲ?ėŲFėŲOėŲVėŲjėŲqėŲzė؁ėŲ”ėŲ›ėŲ¤ėŲĢėŲēėŲÁėŲäėŲ˙ėŲíŲ(íŲ/íŲGíŲNíŲlíŲ‚íŲ‰íŲĄíŲ¨íŲĀíŲĮíŲßíŲæíŲîŲ îŲîŲ$îŲKîŲRîŲeîŲlîŲ…îŲĄîŲ°îŲšîŲÍîŲčîŲķîŲ īŲīŲ2īŲ9īŲRīŲYīŲmīŲtīŲ–īŲīŲĀīŲËīŲåīŲņīŲ đŲđŲ*đŲ1đŲEđŲLđŲnđŲtđŲŽđŲ”đŲŽđŲĩđŲČđŲĪđŲįđŲîđŲņŲņŲņŲ*ņŲAņŲSņŲZņŲsņŲzņŲ’ņŲ™ņŲąņŲ¸ņŲäņŲëņŲōŲōŲ@ōŲGōŲiōŲpōŲ’ōŲ™ōŲĻōŲÄōŲËōŲØōŲöōŲũōŲ"ķŲ)ķŲ6ķŲJķŲYķŲbķŲvķŲ|ķŲ…ķŲŽķŲ§ķŲ­ķŲÁķŲĐķŲŲķŲíķŲķķŲüķŲôŲôŲôŲ3ôŲ9ôŲBôŲKôŲ_ôŲeôŲzôŲ”ôŲŽôŲĮôŲÎôŲæôŲėôŲüôŲõŲ%õŲ+õŲEõŲLõŲYõŲbõŲqõŲxõŲšõŲĻõŲ­õŲĪõŲÖõŲøõŲ˙õŲ!öŲ(öŲJöŲQöŲsöŲzöŲ°öŲÆöŲÜöŲãöŲėöŲ÷Ų÷Ų÷Ų$÷Ų+÷Ų8÷ŲA÷ŲQ÷Ųl÷Ųs÷Ų|÷Ųƒ÷ŲŒ÷Ų ÷Ų§÷Ų°÷ŲÄ÷ŲË÷Ųß÷Ųæ÷Ų÷÷Ų øŲøŲ'øŲ@øŲGøŲXøŲmøŲƒøŲ–øŲ¨øŲŊøŲÄøŲØøŲōøŲųøŲųŲųŲ$ųŲ.ųŲ4ųŲ<ųŲAųŲGųŲQųŲ[ųŲaųŲkųŲqųŲ{ų؁ųŲˆųŲ’ųŲ™ųŲŖųŲ­ųŲŗųŲŊųŲÃųŲÍųŲĶųŲŨųŲãųŲíųŲķųŲũųŲúŲ úŲúŲúŲ#úŲ-úŲ3úŲ=úŲCúŲMúŲSúŲ]úŲcúŲmúŲsúŲ}úŲƒúŲ’úŲ˜úŲĸúŲŠúŲŗúŲÁúŲĐúŲßúŲđúŲûúŲûŲ ûŲûŲûŲ"ûŲ.ûŲ;ûŲHûŲUûŲbûŲoûŲ|ûŲŠûŲ™ûŲĻûŲŗûŲžûŲÃûŲĪûŲÛûŲčûŲüŲ üŲ"üŲ=üŲXüŲ^üŲ{ü؁üŲžüŲ¤üŲÁüŲĮüŲäüŲęüŲũŲ ũŲ%ũŲ+ũŲDũŲkũŲ’ũŲšũŲāũŲūŲ.ūŲUūŲ{ūŲ•ūŲŧūŲãūŲ ˙Ų1˙ŲX˙Ų˙ŲĻ˙ŲÍ˙Ųô˙ŲŲBŲiؐ؎ŲŪŲŲ,ŲSŲzŲĄŲČŲīŲŲ=ŲdŲ‹Ų˛ŲŲŲŲ'ŲNŲuŲœŲÃŲęŲŲ8Ų_Ų†Ų­ŲÔŲûŲ"ŲIŲpŲ—ŲžŲæŲōŲūŲŲŲ<ŲBŲ\ŲhŲtŲŲ•Ų´ŲŋŲÅŲßŲėŲųŲŲ ŲŲŲ%Ų1Ų=ŲIŲUŲŲ…ŲŲŖŲģŲÁŲŲŲßŲ÷ŲũŲŲŲ3Ų9ŲQŲWŲoŲuŲŲ“ŲĢŲÄŲŪŲũŲ Ų Ų+ Ų1 ŲJ ŲP Ųm Ųs Ų‹ ŲĨ ŲĢ ŲÅ ŲŌ Ųß Ųė Ų Ų$ Ų+ ŲC ŲJ Ųb Ųi ؁ Ųˆ Ų  Ų§ ŲÄ ŲË Ųã Ųę Ų Ų ŲD Ųl Ų“ Ųš Ųž ŲÅ Ųé Ųđ Ų Ų= Ųd Ųk ؐ Ų¸ Ųā Ų Ų0 ŲX Ų€ Ų¨ ŲĐ Ųø ŲŲ&ŲKŲsŲŲŽŲˇŲÄŲŌŲŨŲęŲ ŲŲŲ!Ų(Ų/Ų:ŲAŲLŲSŲ^ŲeŲ{Ų‚Ų—Ų¯ŲļŲĶŲÚŲöŲũŲŲŲ1ŲDŲKŲ_ŲfŲ…Ų Ų§ŲŧŲÉŲÖŲãŲ Ų#Ų*ŲBŲIŲcŲ€ŲšŲĩŲÂŲĪŲÜŲéŲöŲŲŲ6Ų=ŲUŲ\ŲtŲ{Ų“ŲšŲ˛ŲšŲŅŲØŲđŲ÷ŲŲŲ3Ų:ŲWŲ^ŲuŲ|Ų“ŲšŲ˛ŲšŲÖŲŨŲõŲüŲŲŲ2Ų9ŲPŲWŲjŲqŲ„ŲŸŲĻŲģŲĖŲŲŲæŲķŲŲ ŲŲ'Ų4ŲAŲNŲ[ŲwŲ~Ų–ŲŲĩŲŧŲÔŲÛŲķŲúŲŲŲ1Ų8ŲPŲ„Ų‹ŲĒŲŊŲÄŲĶŲîŲõŲŲ!Ų+Ų6ŲXŲ_Ų|ŲƒŲ Ų§ŲÃŲĐŲŨŲęŲ÷ŲŲ*Ų1ŲJŲQŲnŲuŲŲ”ŲŦŲŗŲĘŲŅŲéŲđŲŲŲ&Ų-Ų@Ų[ŲbŲxŲŠŲ•ŲŽŲÃŲĮŲäŲŲ Ų/Ų6Ų]ŲdŲ†ŲŲ¯ŲļŲØŲßŲŲŲ*Ų1ŲSŲZŲ|ŲƒŲĨŲŦŲÎŲÕŲüŲŲ'Ų8ŲEŲKŲYŲjŲvŲ‚ŲžŲŋŲáŲčŲ ŲŲ#Ų=ŲCŲYŲjŲuŲŽŲŖŲ§ŲÄŲåŲëŲ ŲŲ'Ų4ŲAŲNŲ[ŲhŲuŲ‚ŲŲœŲĮŲčŲīŲŲŲ&Ų-ŲEŲLŲdŲkŲƒŲŠŲĸŲŠŲÁŲČŲāŲįŲ˙Ų Ų Ų% Ų= ŲD Ų\ Ųc Ų{ Ų‚ ŲŸ ŲĻ Ųž ŲÅ ŲÜ Ųã Ųú Ų!Ų!Ų$!ŲŲ>Ų!>Ų'>Ų->Ų4>Ų@>ŲL>Ų_>Ųk>Ųq>Ųw>Ų}>Ųƒ>Ų‰>Ų>Ų•>Ų>ŲĨ>Ų°>Ųŧ>ŲČ>Ųî>Ųô>Ųú>Ų?Ų?Ų ?Ų?Ų?Ų?Ų&?Ų-?Ų4?Ų;?ŲB?ŲI?ŲQ?ŲY?Ųa?Ųi?Ųs?Ų~?Ų‹?Ų˜?ŲĨ?Ų˛?Ųŋ?ŲĖ?ŲŲ?Ųæ?Ų}GŲ,IŲ>IŲKIŲhIŲ‚IŲœIŲļIŲÕIŲīIŲJŲZJŲyJŲ“JŲ­JŲĖJŲæJŲđJŲKŲKŲ;KŲEKŲPKŲcKŲKŲ™KŲˇKŲÃKŲŅKŲęKŲöKŲLŲCLŲMLŲrLŲ|LŲ§LŲąLŲģLŲåLŲīLŲųLŲMŲ'MŲ1MŲPMŲZMŲgMŲ‰MŲŖMŲŊMŲĮMŲÔMŲNŲCNŲMNŲlNŲvNŲœNŲ¨NŲÎNŲčNŲOŲ=OŲJOŲ˜OŲģOŲNPŲXPŲoPŲyPŲŖPŲ­PŲâPŲCQŲMQŲ\QŲĀQŲĘQŲ×QŲæQŲRŲRŲRŲ;RŲERŲTRŲxRŲ°RŲēRŲāRŲúRŲ"SŲ4SŲASŲ‡SŲ‘SŲŗSŲãSŲũSŲTŲATŲKTŲeTŲoTؐTŲšTŲšTŲØTŲōTŲ UŲ&UŲ@UŲZUŲtUŲŽUŲ˜UŲĩUŲŋUŲáUŲëUŲ VŲ)VŲHVŲgVŲ†VŲ VŲŋVŲÉVŲæVŲđVŲWŲWŲ;WŲUWŲtWŲ~WŲWŲ§WŲÄWŲÎWŲëWŲ XŲ$XŲ>XŲXXŲrXŲ|XŲžXŲēXŲėXŲųXŲYŲYŲ.YŲpYŲ†YŲŸYŲŽYŲŊYŲĘYŲåYŲ ZŲZŲ(ZŲ@ZŲ]ZŲwZŲZŲšZŲˇZŲéZŲöZŲ[Ų[Ų?[ŲY[Ųs[Ų[Ų§[ŲÆ[Ųâ[Ųü[Ų\Ų8\ŲB\Ųe\Ųo\ؐ\Ų¯\ŲÉ\Ųã\Ųũ\Ų]Ų)]ŲC]ŲM]Ųj]Ų„]ŲĒ]ŲÄ]Ųę]Ųô]Ų^ŲB^Ų‚^ŲĀ^Ųø^Ų_Ų(_Ų2_ŲL_Ųf_Ų€_ŲĻ_Ų°_ŲÖ_Ų`Ų `Ų,`ŲK`Ųe`Ų`Ųž`Ų¸`ŲŌ`Ųė`ŲaŲaŲaŲ"aŲ/aŲQaŲ}aŲŠaŲËaŲęaŲ bŲ#bŲ=bŲWbŲqbŲ‹bŲĨbŲŋbŲŲbŲcŲ cŲcŲcŲ*cŲXcŲ}cŲƒcŲ´cŲécŲ dŲ0dŲ9dŲBdŲLdŲYdŲ{dŲšdŲÁdŲādŲ˙dŲ+eŲEeŲ_eŲyeŲĨeŲÄeŲđeŲfŲ7fŲcfŲmfŲfŲ§fŲ×fŲáfŲgŲgŲKgŲUgŲ…gŲgŲŋgŲÉgŲųgŲhŲ3hŲ=hŲmhŲwhŲ§hŲąhŲáhŲëhŲøhŲ(iŲ2iŲ?iŲoiŲŽiŲÃiŲūiŲ3jŲ_jŲ‹jŲ´jŲĐjŲÚjŲöjŲ kŲ*kŲDkŲckŲ‚kŲŒkŲĻkŲ°kŲĘkŲßkŲėkŲlŲ/lŲNlŲmlŲwlŲ‘lŲ›lŲĩlŲælŲmŲ$mŲ>mŲXmŲsmŲ|mŲ†mŲ“mŲēmŲčmŲnŲBnŲdnŲŽnŲ˜nŲ˛nŲßnŲoŲAoŲyoŲ“oŲēoŲÔoŲęoŲpŲ pŲJpŲdpŲ‹pŲŧpŲÛpŲ qŲ&qŲ@qŲXqŲeqŲœqŲĸqŲ¯qŲŧqŲŌqŲßqŲrŲ#rŲ0rŲ=rŲSrŲ`rŲ—rŲrŲĒrŲˇrŲÔrŲsŲ6sŲNsŲ[sŲ•sŲŸsŲŦsŲšsŲÖsŲtŲ1tŲPtŲotŲ‰tŲŠtŲ˛tŲŧtŲÉtŲøtŲuŲHuŲguŲ†uŲ˛uŲĖuŲ÷uŲvŲvŲ$vŲVvŲpvŲ—vŲ vŲĒvŲˇvŲÜvŲåvŲúvŲwŲ;wŲmwŲ‘wŲ°wŲēwŲÔwŲŪwŲũwŲxŲ6xŲUxŲ_xŲ†xŲĒxŲÛxŲõxŲyŲ.yŲHyŲcyŲlyŲvyŲƒyŲģyŲÄyŲŲyŲčyŲzŲKzŲezŲzŲžzŲ¸zŲĶzŲÜzŲæzŲķzŲ+{Ų4{ŲI{ŲX{ŲŠ{Ų¤{Ųē{ŲĶ{Ųđ{Ų |Ų/|ŲI|Ų_|Ųn|ŲŠ|ŲĻ|Ųä|Ųí|Ų÷|Ų}Ų.}ŲD}Ų‡}Ų­}ŲĖ}Ųũ}Ų~ŲV~Ų|~Ų›~ŲĖ~Ųũ~ŲŲ1ŲGŲŠŲ°ŲĪŲåŲ(€ŲN€Ųm€Ųž€ŲŊ€Ųč€ŲŲ)Ų?Ų‚Ų¨ŲĮŲøŲ)‚ŲH‚Ųc‚Ų‡‚Ų‚Ųā‚ŲƒŲ ƒŲAƒŲKƒŲlƒŲ‚ƒŲŃŲëƒŲ„Ų?„Ųe„Ų„„ŲڄŲO…Ųz…Ų•…Ųģ…ŲЅŲŲ…Ųã…Ų†Ų†Ų.†Ų8†Ų‰†Ųĩ†ŲԆŲ‡Ų‡Ų_‡Ų~‡Ų¯‡Ų͇Ųū‡ŲˆŲ%ˆŲDˆŲNˆŲkˆŲuˆŲˆŲ™ˆŲŗˆŲԈŲčˆŲ+‰ŲQ‰Ųg‰ŲljŲЉŲډŲū‰ŲŠŲ"ŠŲ,ŠŲVŠŲsŠŲ}ŠŲ—ŠŲæŠŲ‹Ų"‹ŲF‹ŲP‹Ųj‹Ų—‹ŲŖ‹ŲĀ‹Ų܋Ųæ‹ŲŒŲŒŲ7ŒŲiŒŲsŒŲЌŲÌŲŨŒŲįŒŲŲŲ>ŲHŲŲōŲ΍Ų؍ŲŽŲŽŲPŽŲjŽŲ…ŽŲŽŽŲ˜ŽŲĨŽŲĖŽŲķŽŲũŽŲŲCŲnŲ‹Ų•Ų´ŲžŲŨŲįŲŲ Ų*Ų6ŲMŲ`ŲlŲ’ŲœŲļŲŲâŲüŲ‘ŲO‘Ų\‘Ųk‘Ųx‘Ų ‘Ųē‘ŲŲ‘Ų ’Ų’Ų)’Ų6’Ų^’Ųx’Ų‚’Ųœ’ŲĻ’ŲŒŲ“Ų.“Ų8“ŲZ“Ųc“Ųm“Ųz“Ų “ŲǓش“ŲГŲō“Ų”Ų"”Ų<”Ų‹”Ų•”Ų¯”Ųš”ŲĶ”Ųō”Ųü”Ų•Ų•Ų2•Ų>•Ųd•Ųn•Ųˆ•Ų’•ŲŦ•Ų˕ŲՕŲá•Ųø•Ų –Ų–Ų=–ŲŒ–ŲۖŲå–Ų˙–Ų —Ų#—ŲB—ŲL—ŲX—Ųo—Ų‚—ŲŽ—Ų´—ŲĶ—Ųí—Ų˜Ų˜Ų˜Ų(˜Ų\˜Ųe˜Ųo˜Ų|˜ŲϘŲõ˜Ų™Ų^™Ųh™Ų‚™ŲŒ™ŲĻ™ŲřŲĪ™ŲۙŲō™ŲšŲšŲ7šŲAšŲ[šŲešŲšŲžšŲ¨šŲ´šŲ˚ŲۚŲęšŲ›Ų/›ŲI›Ųd›Ųm›Ųw›Ų„›Ų¸›ŲÁ›Ų˛Ų؛ŲœŲœŲ&œŲCœŲLœŲVœŲcœŲŠœŲŦœŲԜŲܜŲöœŲEŲeŲnŲxŲ…Ų§ŲåŲņŲžŲ#žŲažŲkžŲ…žŲžŲŠžŲȞŲŌžŲŪžŲõžŲŸŲŸŲ:ŸŲYŸŲ¨ŸŲ) ŲT Ų— Ųą ŲË Ųę Ų ĄŲ#ĄŲƒĄŲšĄŲÃĄŲŨĄŲ÷ĄŲĸŲĸŲ%ĸŲ?ĸŲYĸŲsĸŲ’ĸŲąĸŲŖŲGŖŲQŖŲ–ŖŲ­ŖŲˇŖŲÃŖŲÚŖŲäŖŲđŖŲ ¤Ų¤Ų(¤ŲN¤Ųh¤Ųr¤ŲŒ¤Ų–¤Ų¸¤ŲŌ¤Ųė¤ŲĨŲ%ĨŲDĨŲ¤ĨŲÚĨŲäĨŲ)ĻŲ@ĻŲJĻŲVĻŲmĻŲwĻŲƒĻŲœĻŲ¯ĻŲģĻŲáĻŲûĻŲ§Ų§Ų)§ŲK§Ų`§Ųi§Ų~§Ųœ§Ų´§ŲЧŲ0¨Ųf¨Ųp¨Ųĩ¨ŲˍŲÖ¨Ųâ¨Ųû¨ŲŠŲŠŲ@ŠŲJŠŲdŠŲnŠŲ‹ŠŲ¯ŠŲÚŠŲĒŲ9ĒŲZĒŲoĒŲxĒŲ‚ĒŲĒŲąĒŲēĒŲÄĒŲĐĒŲÜĒŲęĒŲĢŲ ĢŲĢŲ+ĢŲ8ĢŲ[ĢŲhĢŲĢŲ–ĢŲ ĢŲ­ĢŲĶĢŲŨĢŲįĢŲūĢŲŦŲ$ŦŲ-ŦŲ7ŦŲCŦŲOŦŲkŦŲ…ŦŲŸŦŲžŦŲŨŦŲ=­Ųs­Ų}­Ų—­Ųą­Ųģ­ŲÕ­Ųī­Ų ŽŲ(ŽŲGŽŲ§ŽŲŨŽŲįŽŲ¯Ų¯Ų%¯Ų;¯ŲS¯Ųo¯Ų‰¯ŲŖ¯Ų¯Ųá¯Ųû¯Ų°Ųu°Ų̰Ųĩ°ŲΰŲé°Ųķ°ŲąŲąŲ&ąŲHąŲRąŲhąŲ€ąŲ˜ąŲ´ąŲ˛ŲO˛ŲY˛Ųx˛Ų’˛Ųœ˛Ų˛˛ŲβŲ.ŗŲgŗŲŗŲ›ŗŲĩŗŲĪŗŲéŗŲ´Ų"´ŲA´ŲĄ´Ų×´Ųá´Ųû´ŲĩŲĩŲ9ĩŲCĩŲ]ĩŲgĩŲˆĩŲ’ĩŲ­ĩŲÉĩŲãĩŲũĩŲļŲ;ļŲ›ļŲŅļŲÛļŲõļŲˇŲˇŲ3ˇŲMˇŲgˇŲˇŲœˇŲĨˇŲ¯ˇŲŧˇŲãˇŲíˇŲ¸Ų¸Ų7¸ŲQ¸Ųk¸ŲЏŲ¤¸Ųž¸Ų׸Ųá¸ŲšŲšŲ9šŲCšŲOšŲkšŲušŲŒšŲ–šŲĸšŲĮšŲÔšŲėšŲöšŲēŲ%ēŲ=ēŲWēŲaēŲnēŲŸēŲŠēŲļēŲæēŲđēŲúēŲģŲ3ģŲdģŲ~ģŲ“ģŲœģŲĻģŲŗģŲĀģŲčģŲōģŲ ŧŲŧŲŧŲ'ŧŲ4ŧŲAŧŲPŧŲiŧŲsŧŲ‹ŧŲ•ŧŲžŧŲ¨ŧŲĩŧŲÂŧŲßŧŲŊŲ:ŊŲ‹ŊŲßŊŲ žŲ)žŲ3žŲKžŲUžŲ^žŲhžŲužŲ‚žŲ‘žŲĒžŲ´žŲĖžŲÖžŲßžŲéžŲöžŲŋŲ ŋŲ\ŋŲ{ŋŲ•ŋŲéŋŲĀŲ1ĀŲ;ĀŲGĀŲcĀŲmĀŲ…ĀŲĀŲ˜ĀŲĸĀŲ¯ĀŲŧĀŲËĀŲäĀŲîĀŲÁŲÁŲÁŲ#ÁŲ0ÁŲ=ÁŲZÁŲ–ÁŲĩÁŲĪÁŲ#ÂŲFÂŲPÂŲhÂŲrÂŲ{ÂŲ…ÂŲ’ÂŲŸÂŲŽÂŲĮÂŲŅÂŲéÂŲķÂŲüÂŲÃŲÃŲ ÃŲ=ÃŲyÃŲ˜ÃŲ˛ÃŲÄŲ)ÄŲ3ÄŲKÄŲUÄŲ^ÄŲhÄŲuÄŲ‚ÄŲ‘ÄŲĒÄŲ´ÄŲĖÄŲÖÄŲßÄŲéÄŲöÄŲÅŲ ÅŲ\ÅŲ{ÅŲ•ÅŲéÅŲ ÆŲ.ÆŲ;ÆŲHÆŲWÆŲpÆŲzÆŲ’ÆŲ¯ÆŲŧÆŲÉÆŲØÆŲņÆŲûÆŲĮŲ0ĮŲ=ĮŲJĮŲgĮ؁ĮŲŠĮŲ˛ĮŲŧĮŲÉĮŲūĮŲ ČŲČŲ5ČŲOČŲYČŲqČŲ{ČŲ“ČŲČŲĻČŲ°ČŲŊČŲĘČŲŲČŲōČŲüČŲÉŲÉŲ'ÉŲ1ÉŲ>ÉŲKÉŲhÉŲ¤ÉŲÃÉŲŨÉŲ1ĘŲ\ĘŲ{ĘŲ…ĘŲĘŲ§ĘŲ°ĘŲēĘŲĮĘŲÔĘŲãĘŲüĘŲËŲËŲ(ËŲ1ËŲ;ËŲHËŲUËŲrËŲ‘ËŲåËŲ*ĖŲIĖŲŽĖŲĨĖŲ¯ĖŲģĖŲÔĖŲįĖŲķĖŲÍŲ3ÍŲ=ÍŲZÍŲdÍŲƒÍŲÍŲˇÍŲŅÍŲæÍŲđÍŲÎŲÎŲÎŲ%ÎŲ2ÎŲ?ÎŲNÎŲgÎŲqÎŲ‰ÎŲ“ÎŲœÎŲĻÎŲŗÎŲĀÎŲŨÎŲĪŲ8ĪŲRĪŲĻĪŲÉĪŲĶĪŲëĪŲõĪŲūĪŲĐŲĐŲ"ĐŲ1ĐŲJĐŲTĐŲlĐŲvĐŲĐŲ‰ĐŲ–ĐŲŖĐŲĀĐŲüĐŲŅŲ5ŅŲ‰ŅŲŦŅŲĩŅŲŋŅŲĖŅŲŲŅŲŌŲ ŌŲ#ŌŲ-ŌŲ6ŌŲ@ŌŲMŌŲZŌŲiŌŲ‚ŌŲŒŌŲ¤ŌŲŽŌŲˇŌŲÁŌŲÎŌŲÛŌŲøŌŲĶŲkĶŲ“ĶŲĪĶŲ*ÔŲ?ÔŲHÔŲRÔŲ^ÔŲjÔŲxÔؐÔŲ™ÔŲŦÔŲšÔŲÆÔŲčÔŲņÔŲúÔŲÕŲÕŲÕŲ+ÕŲMÕŲgÕŲ‚ÕŲ‹ÕŲ•ÕŲĸÕŲÉÕŲãÕŲũÕŲ)ÖŲ‰ÖŲŖÖŲĘÖŲéÖŲ×Ų×Ų7×ŲA×؁×ŲØŲØŲ:ØŲCØŲLØŲVØŲcØŲŠØŲÍØŲŲŲ0ŲŲqŲŲ¤ŲŲęŲŲÚŲÚŲiÚŲ…ÚŲŽÚŲ˜ÚŲ¤ÚŲ°ÚŲžÚŲÖÚŲßÚŲōÚŲ˙ÚŲ ÛŲ.ÛŲ7ÛŲ@ÛŲJÛŲWÛŲdÛŲqÛŲ“ÛŲ­ÛŲČÛŲŅÛŲÛÛŲčÛŲÜŲ)ÜŲFÜŲPÜŲuÜŲ‘ÜŲ›ÜŲÖÜŲōÜŲûÜŲŨŲŨŲŨŲ+ŨŲCŨŲLŨŲ_ŨŲlŨŲyŨŲ›ŨŲ¤ŨŲ­ŨŲˇŨŲÄŨŲŅŨŲŪŨŲûŨŲŪŲŪŲŪŲ(ŪŲEŪŲ_ŪŲ“ŪŲ¯ŪŲ¸ŪŲÂŪŲÎŪŲÚŪŲčŪŲßŲ ßŲßŲ)ßŲ6ßŲXßŲaßŲjßŲtß؁ßŲŽßŲ›ßŲ¸ßŲÁßŲËßŲØßŲåßŲāŲāŲ7āŲ@āŲJāŲWāŲ~āŲ˜āŲŧāŲįāŲ%áŲDáŲNáŲZáŲváŲ€áŲ—áŲĄáŲ­áŲŌáŲßáŲ÷áŲâŲ âŲ,âŲUâŲ_âŲlâŲâŲ§âŲ´âŲäâŲîâŲøâŲãŲDãŲeãŲnãŲxãŲ ãŲŠãŲŗãŲæãŲäŲ%äŲCäŲ]äŲéäŲ[åŲŒåŲÆåŲ5æŲfæŲ–æŲ æŲŋæŲææŲįŲ)įŲ`įŲjįŲŽįŲ˜įŲĪįŲ˙įŲčŲčŲčŲ(čŲgčŲŖčŲõčŲ>éŲ€éŲŌéŲęŲ`ęŲĸęŲôęŲFëŲ˜ëŲęëŲ<ėŲbėŲŽėŲíŲRíŲ‚íŲŒíŲ™íŲÂíŲÎíŲëíŲõíŲ&îŲCîŲ`îŲzîŲŸîŲŠîŲÃîŲÍîŲįîŲņîŲ īŲīŲ)īŲKīŲUīŲoīŲyīŲ›īŲĨīŲŋīŲÉīŲãīŲíīŲ đŲđŲ6đŲPđŲjđŲ„đŲŠđŲÃđŲāđŲúđŲņŲ.ņŲHņŲRņŲtņŲ“ņŲ­ņŲĖņŲÖņŲøņŲōŲ$ōŲ.ōŲHōŲTōŲ‘ōŲģōŲãōŲũōŲķŲ ķŲ=ķŲGķŲ†ķŲØķŲ*ôŲ|ôŲÎôŲ õŲrõŲÄõŲųõŲöŲ-öŲCöŲ`öŲvöŲ“öŲ­öŲĮöŲîöŲ#÷Ųx÷ŲÂ÷Ųü÷ŲUøŲ§øŲųøŲ*ųŲiųŲĢųŲũųŲOúŲ‘úŲãúŲ5ûŲ‡ûŲŲûŲüŲPüŲjüŲtüŲ‘üŲ§üŲ´üŲÁüŲûüŲVũŲ…ũŲĢũŲÚũŲôũŲūŲūŲ8ūŲBūŲOūŲˆūŲ’ūŲÂūŲũūŲ˙Ų"˙Ų,˙Ų8˙ŲD˙ŲR˙Ųj˙Ųs˙Ų†˙Ų“˙Ų ˙ŲÂ˙ŲĖ˙ŲØ˙Ųķ˙Ųũ˙ŲŲŲEŲOŲYŲfŲŠŲÆŲŅŲŲŲ1ŲKŲeŲŲ™ŲŽŲËŲØŲåŲŲŲ*ŲBŲKŲUŲaŲmŲ„ŲŲ—ŲŖŲ¯ŲŊŲÕŲŪŲņŲūŲ Ų-Ų6Ų?ŲIŲVŲcŲpŲŲ–Ų Ų­ŲēŲ×ŲėŲõŲ˙Ų Ų3Ų=Ų]ŲgŲ‡Ų‘ŲŽŲ¸ŲÕŲßŲüŲŲ(ŲBŲ\ŲvŲ€ŲĸŲÉŲãŲŲ'Ų?Ų]ŲzŲ†Ų¤ŲÖŲāŲīŲ Ų'Ų1ŲNŲpŲŠŲÆŲĐŲÜŲčŲôŲŲ'ŲDŲNŲpŲzŲ™ŲŖŲ°ŲÍŲ×ŲäŲ Ų7 ŲA Ų^ Ųx Ų’ Ųœ ŲŠ Ųļ Ųà Ųā Ųę Ų÷ Ų Ų& ŲG ŲQ Ųn Ųˆ Ųĸ Ųŧ ŲŌ Ųß Ųø Ų Ų" ŲA Ų• Ų¯ ŲČ Ųë Ų, Ų6 ŲX Ųą ŲĐ Ų Ų Ų? ŲY Ųs ŲŸ Ųø Ų/Ų9ŲSŲrŲŒŲ§Ų°ŲēŲĮŲéŲōŲüŲŲŲ"Ų:ŲCŲVŲcŲpŲ´ŲëŲŲŲ1ŲKŲrŲ§ŲÁŲčŲņŲûŲŲ/ŲIŲSŲ~ŲÂŲŲŲ´ŲĀŲãŲũŲŲ'Ų3Ų@ŲMŲZŲxŲ„Ų‘ŲžŲŅŲëŲõŲŲ,ŲAŲJŲTŲaŲ‹Ų—Ų¤ŲąŲžŲËŲØŲåŲŲŲ1Ų;Ų[ŲeŲpŲŲāŲŲ;ŲlŲ˜ŲÂŲđŲ!Ų.Ų;ŲJŲcŲ€ŲŲšŲŠŲÂŲßŲėŲųŲ$Ų1Ų>ŲVŲ_ŲiŲuŲŲ˜ŲĄŲĢŲˇŲÃŲŅŲéŲōŲŲŲŲAŲJŲSŲ]ŲjŲwŲ„ŲĄŲĒŲ´ŲÁŲÎŲëŲŲ Ų)Ų3Ų@ŲgŲ†Ų“Ų Ų¯ŲČŲåŲōŲ˙ŲŲ'ŲDŲQŲ^Ų‰Ų–ŲŖŲģŲÄŲÎŲÚŲæŲũŲŲŲŲ(Ų6ŲNŲWŲjŲwŲ„ŲĻŲ¯Ų¸ŲÂŲĪŲÜŲéŲŲŲŲ&Ų3ŲPŲjŲ…ŲŽŲ˜ŲĨŲĖŲëŲøŲŲŲ-ŲJŲWŲdŲsŲŒŲŠŲļŲÃŲîŲûŲŲ Ų)Ų3Ų?ŲKŲbŲkŲuŲŲŲ›ŲŗŲŧŲĪŲÜŲéŲ Ų Ų Ų' Ų4 ŲA ŲN Ųk Ųt Ų~ Ų‹ Ų˜ Ų° Ųš Ųà ŲĐ Ų÷ Ų!Ų#!Ų0!Ų?!ŲX!Ųu!Ų‚!Ų!Ųž!Ųˇ!ŲÔ!Ųá!Ųî!Ų"Ų&"Ų3"ŲK"ŲT"Ų^"Ųj"Ųv"Ų"Ų–"Ų "ŲŦ"Ų¸"ŲÆ"ŲŪ"Ųį"Ųú"Ų#Ų#Ų6#Ų?#ŲH#ŲR#Ų_#Ųl#Ųy#Ų–#ŲŸ#ŲŠ#Ųļ#ŲÃ#Ųā#Ųú#Ų$Ų$Ų"$Ų/$ŲV$Ų`$؁$Ų‹$Ų˛$Ųģ$ŲÄ$ŲÎ$ŲÛ$Ų%Ų.%Ų;%ŲH%ŲW%Ųp%Ų%Ųš%Ų§%Ųļ%ŲĪ%Ųė%Ųų%Ų&Ų1&Ų>&ŲK&Ųc&Ųl&Ųv&Ų‚&ŲŽ&ŲĨ&ŲŽ&Ų¸&ŲÄ&ŲĐ&ŲŪ&Ųö&Ų˙&Ų'Ų'Ų,'ŲN'ŲW'Ų`'Ųj'Ųw'Ų„'Ų‘'ŲŽ'Ųˇ'ŲÁ'ŲÎ'ŲÛ'Ųķ'Ųü'Ų(Ų(Ų:(ŲO(ŲX(Ųb(Ųo(Ų–(Ų°(ŲÕ(Ųķ(Ų)Ų()Ų7)ŲS)Ų€)Ų¤)Ųą)Ųå)Ųō)Ų=*Ųq*Ų*Ų˜*Ų¤*ŲĀ*ŲÜ*Ųā* +Ų+1+ E+ÕK+ `+ t+Ų|+Õ‚+ —+Ģ+ŲŊ+Ņ+Ųã+÷+Ų ,Ų ,:,ŲI,ŲM,z,Ų‰,Ų,¯,Ã,ŲÕ,é,Ų --ŲF- Z-Ųz-"Ž-ŲŽ-$Â-Ųâ-&ö-Ų.(*.ŲJ.*^.Ų~.,’.Ų˛..Æ.Ųæ.0ú.Ų/2./ŲW/4k/Ų‹/6Ÿ/Ųą/Ųĩ/8×/ë/Ųũ/0Ų*0Ų<0P0Ųa000Õ•0Ŗ0Õ­0ž0ÕÔ0Ųæ0ú0Ų 1+191Õ?1M1ÕW1h1Õ~1ؐ1¤1Ųĩ1Õ1ã1Õé1÷1Õ 2Ų222ŲC2c2q2Õw2…2Õ“2Ų—2¸2å2;ų2Ų3=-3ŲM3?a3؁3A•3ŲĀ3ŲĪ3ŲĶ3õ3 4Ų4Õ4Ų!4Õ64Ų:4C\4Ų`4E‚4Ų†4G¨4ŲŦ4IÎ4ŲŌ4Kô4Ųø4M5M.5Ų25OO5Oh5Ųl5Q‰5Qĸ5ŲĻ5SÃ5SÜ5Ųā5Uũ5U6Ų6W76WP6ŲT6Yq6YŠ6ŲŽ6[Ģ6[í6Ų÷6Ų7Ų 7+7F7ÕP7m7Õw7ˆ7Õ•7™7×°7´7×Į7Ë7×ã7Õé7×ķ7÷7×8Õ88×58Õ;8O8j888ÕŖ8ą8Í8Õ×8ķ8Õų8 99Ų999C9R9f9Ų…99Ų”9_ą9_Æ9ŲĘ9aë9a˙9Õ:a :a:Ų:E:[:i:Õs:w:ׄ:ÕŽ:Õœ:Ų :Æ:Ü:ę:Õô:ø:×;Õ;Õ;Ų!;G;];k;Õu;y;׆;Ր;Õž;Ųĸ;Č;Ū;ė;Õö;ú;×<Õ<Õ<Ų#<I<_<m<Õw<{<׈<Õ’<Õ <Ų¤<Ę<ā<î<Õø<ü<× =Õ=Õ!=Ų%=K=Y=Õc=Õi=w=Ձ=’=Õœ=ÕĒ=ŲŽ=Ô=â=Õė=Õō=>Õ >>Õ%>Õ3>Ų7>]>k>Õu>Õ{>‰>Õ“>¤>ÕŽ>Õŧ>ŲĀ>æ>ô>Õū>Õ??Õ?-?Õ7?ÕE?ŲI?o?}?Õ‡?Ս?›?ÕĨ?ļ?ÕĀ?ÕÎ?ŲŌ?@@+@Õ5@9@×F@ÕP@Õ^@Ųb@‘@Ÿ@ÕŠ@Õŗ@Õš@Į@ÕŅ@â@Õė@Õú@AÕA-AÕ3AAAÕKA`AÕjA{AÕ‡AĶ”AĨAÕŗAĮAÕŅAÕ×A×áAÕįAõAÕ˙AB×BÕBÕ(BaÕHaLa×YaÕcaga×taՁa…a×–aÕ a¤a׹aÕģaŋa×ĖaÕÕaúaŲbŲ,bKb×`bÕfbŲqbÕ‚bÕˆbŲbĄbײbÕ¸bĮbÜbÕæb÷bÕccÕ#c8cÕBc_cÕgccÕ‰cžcÕŽcŋcÕËcÛcßc×ėcÕücd× dÕd×#dÕ-dHd_dydŽdÕ˜dÕŖdžd×dÛd×ėdÕödÕüd eÕeÕe9eOeÕXejene×eÕ‰ežeÕŠe­e×ēeÕÄeÕĘeŪeöef#fÕ-fÕ3fKfjfŠf›fÕĨfÕĢfŋfĘfŪfŲâf˙fgŲ#gŲEgŲ_gŲcgwgwĸgÕ¨gwˇgwĖgÕÖgwįgÕķgw÷g×hÕhÕhw1hÕ7hwBhwQhwUh×fhÕphwth×…hՐhw”hץhÕĢhÕąhwÉhwÍh×ŪhÕčhÕōhwöh×iÕiw&iÕ1iw5i×BiÕLiÕRiwfiwuiwŠiÕ”iwĢiÕĩiÕÁiwāiwjwjÕjÕ!jw5jw?jwYjŲxjŒjŲĢjĀjÕĘjÛjÕåjÕņjõj×kÕkÕkk×/kÕ9kÕ?kNkRk×ekÕqk~k™kŲ¸kĖkŲëklÕ llÕ%lÕ1l5l×FlÕPlÕZl^l×olÕylÕlŽlĨlÕąlžlÛlŲålŲ÷l mŲm-mÕ7mNmÕXmomÕymÕƒm›mŠmŋmÕÉmÍm×ŲmÕãmįm×ķmÕũmn×nÕnn×0nÕ;n?n×LnÕVnÕ\ntnxn׈nÕ’n–n×§nÕ˛nļn×ÃnÕÍnÕĶnënûnÕooÕ%o6oÕ@oÕFouoŲoŲ‘oĨoŲļoËoÕÕoėoÕöo pÕpÕ!p9pGp]pÕgpkp×wpՁp…pבpÕ›pŸpׯpÕšpŊp×ÎpÕŲpŨp×ępÕôpÕúpqq×&qÕ0q4q×EqÕPqTq×aqÕkqÕqq‰q™qÕŖq¸qÕÃqÔqÕŪqÕäqrrÕr#r×6rÕ@rWrÕarÕkrƒr‘r§rÕąrĩr×ÁrÕËrĪr×ÛrÕårér×úrÕss×sÕ$s(s×5sÕ?sÕEs]snsÕxssÕ˜sŠsÕŗsÕšsŨsņsŲūs× tÕtt×,tÕ6t:t×GtÕQtÕYtit}tŲŽt’t×ĨtÕĢt×ĩtÕģt×ÅtÕĪtätÕętøtÕuu×uÕu,u=uÕJu[uÕju~uŲu“u×ĻuÕŦu×ļuÕŧuׯuÕĐuåuÕëuųuÕvvÕv/v@vÕOvcvŲtvxv׋vÕ‘v×›vÕĄv×ĢvÕĩvĘvÕĐvŪvÕčvųvÕwwÕw,w=wÕLw`wŲqwuw׈wÕŽwטwÕžwרwÕ˛wĮwÕÍwÛwÕåwöwÕüw xxÕ4xŲNxbxŲjxÕtxxx׋xÕ‘x×›xÕĄx×ĢxÕĀxŲÚxîxŲöxÕyy×yÕy×'yÕ-y×7yÕEyŲIyjy—yŲ›yŧyôyŲzŲ"zŲ&zGzKz×\zÕfzzzÕ„z›zÕĨzÕązÅzÕĪzæzÕđzÕüz{Õ{1{Õ;{ÕG{[{Õe{|{Õ†{Õ’{Ļ{Õ°{Į{ÕŅ{ÕŨ{ņ{Õû{|Õ|Õ(|,|×>|‚I|ÕO|^|r|Õ||Õ‚|‘|•|×Ĩ|Õ¯|Õĩ|Ä|Ø|Õâ|Õč|÷|û|× }Õ}Õ}*}.}×>}ÕH}ÕN}]}{}›}Ŧ}Õļ}Õŧ}Ô}ō}~#~Õ-~Õ3~K~i~‰~š~Õ¤~ÕĒ~Â~ā~ÕÕ!9WwˆÕ’Õ˜°ĘęûÕ€Õ € €*€4€N€ŲX€Ųr€Ų|€Ų‹€Ų€°€´€×ŀÕ΀̀×ã€Õí€Õ퀁Õ Õ&59×IÕSÕYh|Õ†ÕŒ›Ÿ×¯ÕšÕŋ΁ԁ×âÕėÕō‚‚ׂՂ4‚Õ?‚C‚×P‚ÕZ‚Õ`‚x‚|‚׌‚Õ–‚Ģ‚Õļ‚ē‚×Į‚ÕŅ‚Õׂī‚ķ‚×ƒÕ ƒ"ƒÕ-ƒ1ƒ×>ƒÕHƒÕNƒfƒjƒ×zƒÕ„ƒ™ƒÕ¤ƒ¨ƒ×ĩƒÕŋƒÕŃŨƒáƒ×ņƒÕûƒ„Õ„„×,„Õ6„Õ<„T„X„×h„Õr„‡„Õ’„–„×Ŗ„Õ­„Õŗ„˄é„ ……Õ$…Õ*…B…`…€…‘…Õ›…ÕĄ…š…ׅ÷…†Õ†Õ†0†N†n††Õ‰†Õ†§†ņå†ö†Õ‡Õ‡‡8‡X‡i‡Õs‡Õy‡އ˜‡§‡Ų̇ȇŌ‡á‡Ųå‡ũ‡Õˆˆ/ˆŲJˆ×PˆŲ[ˆÕeˆ“ˆ´ˆȈŲãˆ×éˆŲôˆÕūˆ,‰T‰Ųf‰z‰Ų‹‰ωÕ°‰͉Õ׉č‰Õî‰û‰ ŠŲŠ+Š9ŠÕCŠGŠ×TŠÕ^ŠÕkŠŲoŠŠŲ‘ŠNJ׸ŠÕŠ؊‚äŠ÷Š‚‹ ‹‹‹)‹×7‹Õ=‹×I‹×Y‹Õc‹z‹]‹Œ‹–‹ ‹Ē‹´‹ž‹ȋՋä‹ô‹ŲŒÕŒ×ŒŲ'ŒÕ-ŒŲ:Œ@ŒŲKŒÕUŒjŒÕtŒÕzŒ‰ŒžŒÕ¨ŒÕތŊŒԌãŒøŒÕūŒ '1AUŲku“§ŲŊĮŅåųŲŽŲŽ/ŽÕ9ŽÕ?ŽJŽTŽ^ŽrŽ‚ŽŲ’Ž×˜ŽŲŖŽÕŠŽŲ´ŽÕžŽŽ×ĶŽÕŨŽōŽÕũŽÕ)Õ6:×KÕUY×jÕu†ÕĄÕĒ´žȏčŲ˙ŲŲ/×=ÕGK×ae×rÕx °žÕȐː×ŨÕįë×øÕ‘‘בՑÕ&‘×6‘:‘×K‘ÕU‘Õ_‘c‘×p‘Õz‘Õ€‘׊‘Õ”‘Ĩ‘Õ¯‘Õš‘ÕÑá‘ķ‘Õũ‘’×’’×3’×=’ÕG’\’Õg’|’Õ‚’’—’Ą’Ģ’ĩ’Á’ߒŲé’Ųú’“Ų“Ų+“×:“ÕD“Y“Õc“Õn“ƒ“Ս“Õ˜“œ“ׯ“Õš“Ŋ“×ʓÕԓÕŪ“û“Ķ” ”×)”-”×L”P”×]”Õg”Õq”Õw”ׁ”Õ‹””ל”Õϔհ”Õļ”×Ā”ÕƔé”Ųķ”Ų•Ų •3•H•ÕR•c•Õo•ޕޕĮ•Õ͕á•į•ņ•û•––4–×>–ŲS–h–Õr–‰–Õ“–ÕŸ–´–Õģ–×Ī–ÕŲ–Ũ–×î–Õø–ü–× —Õ——×*—Õ4—8—×E—ÕQ—U—×f—Õq—u—׆—Õ‘—•—×ĸ—ÕŽ—׸—Õ—Ũ—ô—˜#˜Õ-˜Õ8˜S˜l˜p˜×˜Õ‹˜Õ‘˜Ÿ˜ÕИÕŗ˜Θä˜Õí˜ú˜™.™?™ÕI™ÕO™c™n™‚™’™Ųĸ™Ų˛™ŧ™ŲĮ™ÕŅ™č™]ķ™Õų™ššŲ#š8šÕBšÕHšWš[š×nš]yšÕšŠš”šŖšļš]ÁšÕĮšæšŲõšŲųš›0›K›f›€››Ų“›Ģ›Õĩ›š›×ƛÕĖ›֛é›ũ›ŲœÕ œŲœÕœ&œ0œ?œŲCœhœ|œŲ“œŲ—œ¸œМÕܜđœŲøœÕūœ !Ų)Õ/>ŲBc|ĻŲĒÕȝםŲ۝ü žÕž#žŲ'žHžYžÕ_žožŲsž”žĨžÕĢžģžĪžŲāžņžÕ÷žŸŲ Ÿ,Ÿ=ŸÕCŸSŸgŸŲxŸ‰ŸÕŸŸŸŲŖŸğ՟Õ۟ëŸŲīŸ / Ų3 T s Ųw ˜ œ ×Š Õŗ ˇ ×Ä ÕĘ Ü Õæ û ÕĄ ĄĄ2ĄŲCĄGĄ×TĄÕZĄ×hĄÕrĄ‡ĄÕŽĄ™ĄŠĄŲ­ĄץņĄÕ÷ĄĸÕĸ0ĸÕ:ĸ\ĸŲ`ĸĸĢĸŲÂĸŲÕĸéĸŲŖ&Ŗ4ŖÕ>ŖjŖŒŖŲŖąŖĐŖŲÔŖ~õŖ~ųŖ× ¤Õ¤~(¤Õ3¤~7¤×D¤ÕN¤ÕT¤~l¤~p¤×€¤ÕФ~ޤן¤ÕǤ~ޤ×ģ¤ÕŤÕˤ~ã¤~į¤×ķ¤Õũ¤~Ĩ×ĨÕĨ~!Ĩ×.ĨÕ8ĨÕ>Ĩ~WĨŲ[Ĩ€|Ĩ€€ĨבĨÕ›Ĩ€°ĨÕģĨ€ŋĨ×ĖĨÕÖĨÕÜĨ€ôĨ€øĨ×ĻÕĻ€Ļ×$ĻÕ/Ļ€3Ļ×@ĻÕJĻÕPĻ€iĻŲmĻŽĻ¯ĻĪĻôĻظϧ.§Ų?§^§Ųb§ƒ§”§Õž§¯§Õš§ÕƧÖ§×ܧŲí§ņ§×¨ ¨¨×¨Ų'¨Õ1¨F¨ÕP¨ÕV¨a¨k¨u¨¨•¨Ų™¨ɨŨ¨Ųę¨×đ¨Ųū¨×ŠÕŠŠ×0ŠÕ:ŠÕAŠ×GŠŲRŠÕXŠŲcŠÕiŠ×xŠÕ‚ІŠ× Š×ĻŠŲąŠÕģŠĐŠÕÚŠëŠÕ÷ŠûŠ× ĒÕĒ+ĒÕ6ĒGĒÕQĒbĒÕoĒ„ĒÕŽĒŸĒÕĢǝĒ×ĀĒÕĘĒßĒÕęĒûĒÕĢĢÕĢ)Ģ3Ģ=ĢGĢQĢ[ĢeĢsĢƒĢ—ĢŲ¤ĢŲšĢŲŊĢßĢķĢŲŦŦÕŦ2ŦÕ<ŦÕGŦXŦÕ^ŦlŦÕvŦzŦׇŦÕ‘ŦÕ ŦŲ¤ŦÂŦŲÆŦÖŦæŦŲöŦŲ­­Ų­Õ!­+­;­V­Õ\­f­p­z­„­Ž­Ŗ­ŲŦ­Ųĩ­Ųŋ­ŲĖ­Ųß­Ųõ­Ųū­ŲŽŲŽ;ŽŲKŽŲ[Ž×eŽŲuŽŲ€ŽÕ†ŽŲ‘ŽÕ›ŽŸŽ×°ŽÕēŽÕĀŽ×ĐŽÔŽ×åŽÕīŽÕõޝ¯Õ¯1¯Õ<¯M¯ÕW¯Õ]¯q¯}¯¯×’¯Õœ¯Õĸ¯×˛¯ļ¯×Į¯ÕҝÕÛ¯đ¯Õö¯° °°Õ(°=°ÕH°Y°Õc°Õi°}°…°×“°Õ°Ą°×˛°ÕŊ°Á°×ΰÕذÕŪ°ō°×ąÕ ąąÕ*ą.ą×;ąÕEąÕKącągą×xąÕ‚ą“ąÕąŽąÕģąŋą×ĐąÕÚąīąÕúąūą× ˛Õ˛Õ˛/˛A˛ÕK˛`˛Õk˛|˛Õ†˛ÕŒ˛ ˛˛˛Õŧ˛ҞÕܲí˛Õ÷˛Õũ˛ŗŗ"ŗ1ŗQŗŲaŗŲqŗ×wŗŲ‚ŗÕˆŗŖŗŲÅŗåŗŲõŗŲ´´Ų´Õ$´9´ÕC´ÕM´^´Õh´Õr´‡´Õ´˜´¤´´´Č´Ū´]ë´„ō´ĩĩÕĩ,ĩÕ9ĩŲ=ĩhĩŲlĩ¤ĩŲŽĩŲÄĩŲČĩõĩ ļŲļŲ/ļ?ļŲRļsļ‡ļœļÕĸļ­ļˇļÂļŌļŲÖļķļˇöˇ&ˇFˇŲVˇ`ˇŲvˇŲzˇЎώļˇŲēˇסëˇ¸Õ¸¸Ų¸:¸R¸b¸Õl¸Õv¸‡¸Õ‘¸Õ—¸̏ŋ¸ŲˏÖ¸Ųā¸Õæ¸Ųõ¸Ų ššÕ'šÕ1šBšÕLšÕRšbšršÕ†šššŲĢšÄšŪšüšŲēē5ēTēŲXēyē}ēדē—ē×­ēĮēéēũēŲ ģ×ģŲģÕ!ģ+ģ>ģRģŲZģÕ`ģ×qģÕwģŲ‚ģÕˆģŲ“ģ՝ģ˛ģÕŧģÍģÕŲģîģÕųģũģ×ŧÕŧÕ"ŧ&ŧ×3ŧÕ=ŧÕGŧKŧ×\ŧÕbŧmŧ}ŧ”ŧ]ŸŧÕŠŧŧŧ]ĮŧÕÍŧŲŧãŧíŧŊŲŊŲ*Ŋ:Ŋ×XŊ\Ŋ×lŊÕvŊÕ€ŊœŊēŊËŊÕÕŊÕÛŊđŊöŊž ž×žÕ#ž'ž×8žÕCžGž×TžÕ^žÕdž}ž‘žÕ›ž°žÕģžĖžÕÖžÕÜžņžûžŋ%ŋ9ŋŲFŋ×PŋŲZŋÕdŋxŋÕ~ŋ’ŋŠŋÕ¯ŋĀŋÄŋ×ÔŋÕŪŋÕčŋüŋÕĀĀÕ&Ā7ĀÕAĀÕGĀ[ĀaĀpĀtĀׄĀÕŽĀ’Ā×ŖĀÕŽĀ˛Ā×ŋĀÕÉĀÕĪĀįĀûĀÕÁÕ ÁÁ*ÁÕ4ÁIÁÕTÁeÁÕoÁÕuÁ‰ÁÁŸÁ¯ÁךÁŲÍÁŅÁ×âÁÕčÁķÁ  ÂÕÂ!Â0Â4Â×EÂÕOÂÕYÂ]Â×iÂÕsÂÕy‰ÂמÂÕ¨ÂŦÂ׸ÂÕÂÂÆÂ××ÂÕâÂæÂ×ķÂÕũÂÕÃà Ã×1ÃÕ;Ã?Ã×KÃÕUÃYÃ×jÃÕuÃyÃ׆ÃՐÃՖïÃÄÃÕÎÃŪÃÕčÃũÃÕÄÄÕ#ÄÕ)ÄBÄWÄÕaÄqÄÕ{ĐÄÕ›ÄŦÄÕļÄÕŧÄŅÄÜÄíÄÅŲÅ×ÅŲ"ÅÕ;Å?Å×OÅÕUÅ×eÅiÅ×yÅՃŇÅדÅÕÅĄÅ׎ÅÕģÅŌÅÕØÅéÅũÅÕÆÆÕ(ÆÕ4Æ8Æ×HÆÕRÆÕXÆgÆkÆ×{ÆÕ…ƉÆ×šÆÕĨÆŠÆ×ļÆÕĀÆÕÆÆŪÆâÆ×ōÆÕüÆÕĮĮÕ$Į9ĮÕDĮUĮÕ_ĮÕeĮyĮĮŽĮ’Į×ĸĮÕŦĮ°Į×ÁĮÕĖĮĐĮ×ŨĮÕįĮÕíĮČČÕ#ČÕ-Č>ČÕHČÕNČ^ČrČÕ|Č‘ČÕœČ­ČÕˇČÕŊČÕČķČÉ$ÉÕ.ÉÕ4ÉHÉOÉaÉuÉ؆ɛÉÕĨÉļÉÕĀÉŅÉÕÛÉėÉÕöÉĘÕĘ+ĘÕ5ĘÕ;ĘFĘ[ĘÕlĘÕrĘ}ʁĘ×’ĘÕœĘÕĻĘēĘÕÄĘŲĘÕäĘõĘÕ˙ĘÕËËË.Ë2Ë×CËÕMËQË×bËÕmË~ËÕˆËÕŽËĻËģËÕÅËÚËÕåËöËÕĖÕĖĖ,Ė@ĖŲMĖ×WĖŲkĖ€ĖÕŠĖ›ĖÕĨĖļĖÕĀĖŅĖÕÛĖėĖÕûĖ˙Ė×ÍÕÍÍ×*ÍÕ4Í8Í×IÍÕTÍXÍ×eÍÕoÍÕuÍŽÍŖÍÕ­ÍŊÍÕĮÍÜÍÕįÍøÍÕÎÕÎ!Î6ÎÕ@ÎPÎÕZÎoÎÕz΋ÎÕ•Î՛ΰÎĖÎæÎĪĪÕ!ĪÕ'Ī<ĪFĪPĪZĪdĪo΀ΔĪŲĄĪŲ°Ī×ēĪŲÍĪŅĪ×áĪÕëĪÕņĪ×ĐĐ×ĐÕ ĐÕ*Đ?ĐÕEĐPĐ[ĐmĐÕwĐŒĐÕ—Đ¨ĐÕ˛ĐÕ¸ĐĖĐÔĐ×âĐÕėĐđĐ×ŅÕ ŅŅ×ŅÕ'ŅÕ-ŅEŅIŅ×YŅÕdŅxŅÕ‚ŅÕŒŅÕ’ŅŅĄŅ׹ŅÕģŅÕÅŅáŅ˙ŅŌÕŌÕ Ō4Ō:ŌIŌMŌ×]ŌÕgŌkŌ×|ŌÕ‡Ō‹ŌטŌÕĸŌÕ¨ŌĀŌÄŌ×ÔŌÕŪŌâŌ×ķŌÕūŌĶ×ĶÕĶÕĶ7Ķ;Ķ×KĶÕUĶÕ[ĶbĶtĶÕ~Ķ“ĶÕžĶ¯ĶÕšĶÕÅĶŲĶÕãĶøĶÕÔÔÕÔÕ$Ô<ÔPÔÕZÔoÔÕzÔ‹ÔÕ•ÔÕ›Ô¯ÔĩÔĀÔĪÔŲĶÔđÔŲúÔŲÕŲÕ/Õ9ÕCÕTՁՋÕŲšÕ¯ÕŲŗÕÕÕęÕøÕÕÖÕÖÖ2ÖŲ;ÖŲEÖŲgÖŲƒÖŲ‡Ö¨ÖŦÖ×ÉÖÍÖ×ßÖãÖ×××××Õ×+×/××<×ÕF×ÕL×Z×Õd×Õj×{א×Õ–×Ą×­×ģ×ÕÅ×Ö×á×ķרبØ.Ø>ØŲNØ×TØŲ_ØÕeØŲpØÕvØŲØÕ‡ØŲ’ØÕ˜ØŲŠØŗØŊØĮØŅØרōØŲūØŲ ŲŲ7ŲŲAŲŲVŲfŲŲvŲ×€ŲŲ•Ų™Ų×ĒŲÕ°Ų×ēŲÕĘŲáŲ]ėŲÕōŲÚÚ×ÚÕÚ'Ú?Ú[ÚlÚÕvÚÕ|ڐښڤڎڞÚÂÚ×ĶÚÕŨÚáÚ×ōÚÕüÚÛ×ÛÕÛ Û×-ÛÕ7ÛÕ=ÛQÛ\ÛgÛvÛ†Û•ÛŲ™ÛŠÛ¸ÛČÛŲÜÛņÛÕûÛÜÕ ÜÕ*Ü:ÜÕDÜÕJÜXÜhÜÕrÜÕ|Ü€Ü׌ÜÕ–ÜšÜ×ĻÜÕ°ÜÅÜÕĐÜÔÜ×áÜÕëÜÕņÜŨŨÕ)Ũ?ŨÕIŨÕOŨ]ŨsŨÕ}ŨÕ‡ŨŨÕ§ŨÕ­ŨŊŨĖŨŲĐŨįŨŲķŨŲ ŪŲŪŲ&ŪŲ9ŪIŪŲXŪŲyŪ}Ū׉ŪÕ“Ū՝ŪÕŖŪ×ģŪĪŪÕŲŪÕßŪîŪß]ßÕß ß2ßÕ<ßPßÕZßÕ`ßkߏßĮßËß×ÛßÕåßÕëßúß] ā/āMāŲ`ātāÕ~āŽāÕ˜āŠāÕļāĘāÕÔāäāÕîā˙āÕ ááÕ$á5áÕDáHá×XáÕbáÕlááÕ‡á’á¤áÕŽáÕ¸áŧá×ÉáÕĶáÕŨáņáÕûáÕâââ1âÕ;âÕAâPâTâ×dâÕnâÕtâƒâ—âÕĄâÕĢâĀâÕÆâŅâāâôâÕūâÕããã×'ãÕ1ãÕ;ãPãÕVãaãsãÕ}ãÕ‡ã‹ãטãÕĸãÕŦãĀãÕĘãÕŅãŨãėãđã× ää×äÕ&ä*ä×;äÕEäÕOäSä×däÕjäyä}ä׊äÕ”äÕšä¨äÕ˛äÕ¸äÉäÍä×ŪäÕääīäûäåŲåBåVåÕ`åpåÕzåÕ‚å”åÕžåÕ¨å¸åÃåŌåÖå×õåŲųåæKæŲUæŲdæŲh扉才æ×æÕ§æ‰Ģæ×ŧæÕĮæ‰Ëæ×ØæÕâæÕ迉į‰įÕį‰-įŲ7įŲAįŲxįŲ‚įŲŒįŲ°įŲēįŲÄįŲæįŲõįŲųįčč×6čÕ@čDč×UčÕ[čfčjč×{čÕ…čՏč“č×ĒčÕ°čŋčÃč×ÚčÕāčīčéé×%éÕ/éÕ9é=é×MéÕSé^énéÕxééÕ™éÕĻéģéÕÁéČéŌéØéãéįé×øéÕęÕ ęę×"ęÕ,ęÕ6ę:ę×FęÕPęÕVę×`ęÕięsę}ęŒęœęŲŦęŲŧęŲĖęŲÜę׿ęŲņęÕ ëë× ëÕ*ë.ë×?ëÕJë[ëÕeëvëÕƒë˜ëÕĸëÕ¨ëŊëÁë×ÍëÕ×ëÕŨëîëōë×ėÕ ėÕėė×+ėÕ5ėÕ?ėTėÕZėeėpė×€ėÕ†ė–ėšė×ĢėÕˇė×ČėĖėרėÕâėÕčėųėũė×íÕíÕ"í&í×6íÕ@íÕJí_íÕeípí{í׋íÕ‘íĄíĨí×ļíÕĀíÕÆí××íÛí×įíÕņíÕ÷íî î×îÕ'îÕ-î<î@î×QîÕ]î×nîrî×~îÕˆîÕŽîŸî´îÕžîÕÄîŲîŨî×éîÕķîÕųî īī×īÕ)īÕ3ī7ī×GīÕQīÕ[īpīÕvīīŒīלīÕĸī˛īļī×ĮīÕÍīÜīāī×ņīÕûī˙ī× đÕđđ×&đÕ0đÕ=đ\đvđ—đĸđļđ9ÆđŲŅđÕ×đŲâđÕčđ×ōđŲņ9ņÕ%ņÕ+ņ9<ņ9Lņ9aņÕkņÕqņ9‚ņ9’ņ9–ņ×§ņÕąņÕˇņ×Äņ9Ôņ9éņÕķņÕųņ9 ō9ō9/ōÕ9ōÕ?ō9Pō9`ō9dō×uōÕ{ō9Šō9ŽōןōÕŠō9­ōךōÕÃō9Įō×ÔōÕŪōÕëō9ķÕ ķ9ķÕ$ķ95ķÕ?ķÕHķ9Rķ9oķ9Šķ9ËķÛķŲûķŲ ô×%ôŲ0ôÕ6ôŲAôÕGô×eôiô×zôÕ„ôÕŠô×›ôŸô×ĢôÕĩôÕģôĖôĐô×áôÕëôÕņô×õõ×õÕõÕ&õ*õ×:õÕ@õOõSõ×cõÕmõÕwõŒõÕ–õ§õÕąõÂõÕËõÚõŪõ×îõÕøõüõ× öÕöö×)öÕ3öÕ9öQöaöÕkö€öÕ‹öœöÕĻöÕŦöĮöËö×ÜöÕæöÕėö×ũö÷× ÷Õ÷Õ÷.÷2÷×C÷ÕM÷ÕS÷×d÷h÷×t÷Õ~÷Õ„÷•÷™÷×Ē÷Õ´÷Õē÷É÷Í÷×Ū÷Õę÷×û÷˙÷× øÕøÕø,ø0ø×AøÕGøVøZø×køÕuøyø×ŠøÕ•ø™ø×ĻøÕ°øÕļøÎøãøÕíøũøÕųųÕ"ųÕ/ųDųÕNųcųÕnųųÕ‰ųՏųŖų­ųˇųÂų×āųäų×õųÕ˙ųú×úÕúú×*úÕ4úÕAúEú×VúÕ`úÕfú×wú{úׇúÕ‘úÕ—ú¨úŦú×ŊúÕĮúÕÍú×Ūúâú×îúÕøúÕûû×ûÕû+û/û×?ûÕIûÕSûhûÕrûƒûՍûžûÕ§ûļûēû×ĘûÕÔûØû×éûÕôûøû×üÕüÕü-üGügüxüÕ‚üÕˆüŖü§ü׸üÕÂüÕČü×ŲüŨü×éüÕķüÕųü ũũ×ũÕ)ũÕ/ũ×@ũDũ×PũÕZũÕ`ũqũuũ׆ũՐũÕ–ũĨũŠũ×ēũÕÆũ××ũÛũ×įũÕņũÕ÷ũū ū×ūÕ#ū2ū6ū×GūÕQūUū×fūÕqūuūׂūÕŒūÕ’ūĒūŋūÕÉūŪūÕéūúūÕ˙Õ ˙"˙7˙ÕA˙Q˙Õ[˙l˙Õv˙Õ˙‰˙“˙ž˙Š˙Â˙â˙Ųō˙×ü˙Ų Ų!×2Õ8G\ÕfÕl…×‘Õ›ÕĄ˛ļ×ĮÕŅÕÛß×ëÕõÕ˙Õ%59×JÕTX×dÕnr×Õ‰Õ–ĩĪđú>ŲNŲ^×hŲsÕ}’ÕœÕĸˇģ×ĮÕŅÕ×čė×ũÕÕ×%Õ/Õ9NÕT_j×zÕ€”×ĨÕ¯ŗ×ŋÕÉÍ×ÚÕäÕņ*KU_jy‰Ų”Õš×¤Ų´ŲČß]ęÕđ ×]"Õ(9=×NÕXÕ^×rÕxƒ’–׊¸ŧ×ÍÕ×Û×įÕņõ×Õ Õ×(Õ26×GÕQU×bÕlp×}ÕŠŽ×ŸÕĨ´¸×ËÕŅ×âæ×ōÕüÕ×)Õ/>B×SÕ]a×mÕw{׈Ւ՟Ŗ×´ÕžĶÕŪâ×īÕųÕ˙,Õ6KÕVgÕqÕw¤ÕŽžÕČŲÕãÕė " C M X g w Ų‡ Ų— ם Ų­ Ųž Ķ ÕŲ č ė × ' + ×8 ÕB ÕH \ | Œ Ųœ ŲŦ ײ Ų ŲĶ × ×č Õî ũ  ×  ×< @ ×M ÕW Õ] q ‘ Ą Ųą ŲÁ ×Ë ŲÛ Ųč Ųü  × Õ & * ×; ÕE ÕK ×\ ` ×l Õv Õ|  ‘ ×ĸ ÕŦ Õ˛ ×à Į ×Ķ ÕŨ Õį ü Õ  Õ! 2 Õ; L P ×a Õk o ×{ Õ… ‰ ×– Õ  Õ­ ą × ÕĖ Đ ×á Õė đ ×ũ ÕÕ %)×:ÕDÕJ×Wgk×|Õ‚‘•×ĻÕ°´×ÅÕĐáÕëÕņ Õ(8ÕBSÕ]ÕjÕ‰™ÕŖ´ÕžÕËāÕę˙Õ Õ%Õ+CXÕbrÕ|Õ—Õ¤ÃãūÕ6@JT^iƒŲŖŲ§ŅÕ×ėÕöú× Õ ×1Õ;ÕEI×`ÕfuyאՖĨŧÕȍĖ×ŨÕįÕņõ×Õ &Õ0GÕQÕ^sÕy€Š›Ÿ×¯ÕĩÄØÕâÕíņ×Õ Õ*Õ4EÕO`Õix|׌Ֆš×ĢÕļē×ĮÕŅÕ׍īÕ "Õ->ÕHÕNfzÕ„•ÕŸÕ§ąģÅÔäŲôŲŲ×Ų)Õ/Ų:Õ@×^sÕ}Õƒ˜œ×¨Õ˛Õ¸ÉÍ×ŪÕčÕî×û × Õ*Õ0×AE×QÕ[ÕarvׇՑ՗רŦ׸ÕÂÕČŲŨ×îÕøÕū××Õ)Õ/@D×UÕ_Õe×vz׆ՐՖ§Ģ×ŧÕÆÕĖ×Ũá×íÕ÷Õũ×#Õ-Õ3×@PT×eÕoÕu׆Š×–Õ Õώģ×ĖÕÖÕÜ×íņ×ũÕÕ "×3Õ=ÕC×TX×dÕnÕt…‰×šÕ¤ÕĒסĮË×ÜÕæÕė×ũ× ÕÕ.2×CÕMQ×]Õgk×xՂՏ¤ÕĒšŊ×ÎÕØÜ×íÕøü× ÕÕ-?ÕIYÕctÕ~Õ‡™ÕŖŗÕŊÎÕØÕåúÕÕ$5Õ?ÕE]rÕ|ŒÕ–§ÕąÕēÄĘÔß×ũ×ÕÕ"×/?C×TÕ^Õd×q…×–Õ ÕĻ×ŗÃĮרÕâÕč×õ ×Õ$Õ*×7GK×\ÕfÕl×y‰×žÕ¨ÕŽ×ģËĪ×āÕęî×úÕ  × Õ Õ, A ÕG V Z ×k Õu y ׊ Õ• ™ ×Ļ Õ° Õļ Ę Ü Õæ ö Õ!!Õ!Õ$!6!Õ@!P!ÕZ!k!Õu!Õ‚!—!ÕĄ!ļ!ÕÁ!Ō!ÕÜ!Õâ!ú!"Õ")"Õ3"D"ÕN"ÕW"a"g"q"|"ך"ž"ׯ"Õš"Õŋ"×Đ"Ô"×ā"Õę"Õđ"##×#Õ #Õ&#×3#C#G#×X#Õb#Õh#×u#…#‰#ך#Õ¤#ÕĒ#ס#Į#Ë#×Ü#Õæ#Õė#×ũ#$× $Õ$Õ$.$2$×C$ÕM$ÕS$×d$h$×t$Õ~$Õ„$•$™$×Ē$Õ´$Õē$×Ë$Ī$×Û$Õå$Õë$ü$%×%Õ%%×+%Õ5%9%×F%ÕP%Õ]%r%Õx%‡%‹%ל%ÕĻ%Ē%×ģ%ÕÆ%Ę%××%Õá%Õį%û% &Õ&'&Õ1&B&ÕL&ÕU&g&Õq&&Õ‹&œ&ÕĻ&Õŗ&Č&ÕŌ&į&Õō&'Õ 'Õ'+'@'ÕJ'Z'Õd'u'Õ'Õˆ'’'œ'ĸ'Ŧ'ˇ'Á'Ė'â'Ų(Ų"(Ų,(Ų6(ŲU(Ų_(Ųi(Ų€((Ų (מ(Â(×Ú(Õä(č(×ų(Õ˙( ))×)Õ))Õ3)7)×N)ÕT)c)g)×~)Õ„)“)ˇ)ģ)×Ė)ÕÖ)Õā)ä)×ô)Õú)**Õ*6*Õ@*ÕM*b*Õh*o*y**Š*Ž*×Ĩ*Õ¯*ŋ*ÕÉ*Ú*Õä*Õî*Õô*+Õ ++Õ'+Õ1+A+ÕK+Õ[+v+Õ€++Õš+Ģ+Õĩ+Õģ+É+ÕĶ+ä+Õî+Õø+,Õ,Õ",&,×7,Õ=,L,P,×a,Õk,o,×€,ÕŠ,Ž,מ,Õ¨,Ŧ,×Ŋ,ÕČ,Ė,×Ų,Õã,Õé,--Õ-$-?-ÕI-M-×d-Õo-s-׆-Õ’-Ŗ-ÕŠ-ą-ģ-Â-Ė-Û-ú-×..×4.Õ>.B.×S.ÕY.d.h.×y.Õƒ.Ս.‘.ר.ÕŽ.Ŋ.Á.ר.ÕŪ.í.//×&/Õ0/Õ:/>/×N/ÕT/_/o/Õy//Õš/Õ§/ŧ/ÕÂ/É/Ķ/Ų/ä/č/×ų/Õ0Õ 000×-0Õ30B0F0×W0Õa0e0×v0Õ€0„0×”0Õž0ĸ0×ŗ0Õž0Â0×Ī0ÕŲ0Õß0ø01Õ111×51Õ?1C1×Z1Õe1i1×|1Õˆ1Œ1×™1ÕŸ1§1Ž1¸1Ō1ŲÜ1Ųë1Ų22Ų!2×?2C2×[2Õe2i2×z2Õ€2‹22× 2ÕĒ2Õ´2¸2×Ī2ÕÕ2ä2č2×˙2Õ33+3Õ73;3×L3ÕV3Õ`3d3×t3Õz3…3•3ÕŸ3ļ3ÕĀ3ÕÍ3â3Õč3ī3ų3˙3 44×4Õ)4Õ3474×C4ÕM4ÕS4×]4Õg4k4×x4Õ‚4†4ד4՝4Õ§4Ģ4×ŧ4ÕÂ4Ņ4Õ4×â4Õė4Õō4×ü4Õ5Õ 5!5%5×65Õ@5ÕJ5N5×Z5Õd5Õj5×t5Ձ5…5×–5Õœ5Ģ5¯5×Ā5ÕĘ5Î5×ß5Õé5í5×ũ5Õ6 6×6Õ'6+6×86ÕB6ÕH6a6q6Õw6ƒ6ž6Õ¨6Ŧ6×Ã6ÕÎ6Ō6×å6Õņ67Õ777!7+7=7M7Ų]7×{77×—7ÕĄ7Ĩ7×ļ7Õŧ7Į7Ë7×Ü7Õæ7Õđ7ô7× 8Õ8 8$8×;8ÕA8P8g8Õs8w8׈8Õ’8Õœ8 8×°8Õļ8Á8Ņ8ÕÛ8ō8Õü8Õ 99Õ$9+959;9F9J9×[9Õe9Õo9s9×9Õ‰9Տ9×™9ÕŖ9§9×´9Õž9Â9×Ī9ÕŲ9Õã9į9×ø9Õū9 ::×:Õ(:Õ.:×8:ÕB:ÕH:]:a:×r:Õ|:Õ†:Š:×–:Õ :ÕĻ:×°:ÕŊ:Á:×Ō:ÕÜ:Õâ:ņ: ;Õ;&;Õ0;A;ÕK;ÕU;Õ[;i;Õs;„;ÕŽ;Õ˜;¨;Õ˛;ÕÂ;Ũ;Õį;÷;Õ<<Õ<Õ"<0<Õ:<K<ÕU<Õ_<o<Õy<Õ‰<<מ<Õ¤<ŗ<ˇ<×Č<ÕŌ<Ö<×į<Õņ<õ<×=Õ==×$=Õ/=3=×@=ÕJ=ÕP=i=y=Õ=‹=Ļ=Õ°=Ë=ÕÖ=í=Õų= >Õ>>>)>8>X>Ųh>×€>ד>՝>˛>Õŧ>Í>Õ×>č>Õņ>×?Õ ? ?Õ*?Õ0?E?I?×U?Õ_?Õe?v?z?׋?Õ•?Õ›?×Ŧ?°?×ŧ?ÕÆ?ÕĖ?Ũ?ō?Õü?Õ@@@×'@Õ1@Õ7@H@]@Õg@Õm@‚@†@×’@Õœ@Õĸ@ŗ@Č@ÕŌ@ÕØ@í@ņ@×ũ@ÕAÕ AA3AÕ=AÕCAXA\A×hAÕrAÕxA‰AžAÕ¨AšAÕÅAāAÕæAûA˙A× BÕBÕB,BGBÕMBbBfB×rBÕ|BÕ‚B“B—BרBÕ˛BÕ¸B×ÉBÍB×ŲBÕãBÕéBúBūB×CÕCÕC×0C4C×@CÕJCÕTCiCÕsC„CÕŽCŸCÕ¨CšCŊC×ÎCÕØCÕŪC×īCķC×˙CÕ DÕD D$D×5DÕ?DCD×TDÕ_DpDÕzDÕ€D˜D­DÕˇDĖDÕ×DčDÕōDÕøD EE E×1EÕ7EFEJE×[EÕeEiE×uEÕEƒEאEÕšEÕ§EŧEÕÆEÖEÕāEņEÕûEÕFF#F3FŲCF×MFŲ]F×pFÕzF~F׏FÕ™FF×ĒFÕ´FÕŧF×ÂFŲÍFÕ×FÛF×ōFÕüFG×GÕGÕ$G9GÕ?GJGUG×eGÕkG{GGאGÕœG×­GąG×ŊGÕĮGÕÍGŪGâG×ķGÕ˙G×HH× HÕ*HÕ0HAHEH×VHÕbH×sHwH׃HՍHÕ—HŦHÕļHĮHÕŅHâHÕëHüHI×IÕI×.I2I×>IÕHIÕNI_IcI×tIÕ~I‚IדIÕžIĸIׯIÕšIÕŋI×IÛI×ėIÕöI JÕJJ×'JÕ1JÕ7JOJSJ×dJÕjJyJ}J׎JÕ˜JÕžJׯJŗJ×ŋJÕÉJÕĪJāJûJK,KAKÕKK`KÕkK|KÕ†KÕŒK¤KšKÕÃKØKÕãKôKÕūKÕLL"L.L2L×CLÕILXL\L×mLÕwL{LׇLÕ‘L•L×ĸLÕŦLÕšLÎLÕØLčLÕōLMÕ MÕM!M:MŲ>M’_M’cM×sMÕ}M’MבMÕ›M’ŸM×°MÕģM’ŋM×ĖMÕÖMÕÜM’ôM’NÕ N’N’!NŲ%N”ON”SN×dNÕnN”ƒNÕŽN”’NןNÕŠNÕ¯N”ÃN”äNŲîNŲ OOŲ,OŲWÕHWLW×XWÕbWfW×sWÕ}WÕŠWŸWÕŠWšWÕÃWÔWÕŪWÕįWņWXX&XÕ0XÕ:XKXÕUXÕbXfX×wXՁX…X×’XÕœX X×­XÕˇXÕÁXÅX×ÖXÕāXõXÕYY×YÕYÕ!Y5YFY[YÕeYuYÕYYÕšYÕ§YŧYÕÆY×YÕŨYíYZÕ ZZÕ&Z7ZÕAZÕJZTZ_ZŠZŲ”ZŲĩZÉZŲÖZ×āZŲõZųZ× [Õ[Õ[6[ÕB[W[Õb[f[×w[Ձ[Õ‹[[×Ļ[ÕŦ[×Ŋ[Á[×Ķ[ÕŨ[ø[\%\6\:\×K\ÕU\Õ_\t\Õz\‰\ž\Õ¨\š\ÕÅ\É\×Ú\Õä\Õî\]Õ ]]#]']×8]ÕB]F]×W]Õb]f]×s]Õ}]Õƒ]›]°]Õē]Ņ]ÕÛ]Õį]ü]Õ^^Õ&^7^ÕA^ÕG^[^e^t^‰^Õ“^Ŗ^Õ­^ž^ÕČ^ÕÕ^ę^Õô^_Õ__Õ)_Õ2_=_K_ÕU_f_Õl_y_ˆ_˜_ŲŦ_°_×Á_ÕË_ÕÕ_Ų_×ę_Õô_Õú_× ``×`Õ%`Õ/`3`×C`ÕI`X`\`×l`Õv`Õ€`•`ÕŸ`°`Õē`Ë`ÕÔ`ã`į`×÷`Õaa×aÕ!a%a×2aÕg×NgÕXg–mgÕxg–|g׉gÕ“gÕ™g–ąg–Ég–įg–øgÕhÕh–h–'h–6hŲ:h˜\h×th˜‰hÕ“h՝h˜˛hÕ¸h˜Ãh˜Îh˜éh˜i˜iÕ#iÕ)i˜=i˜Di˜SišbiŲkiŲtiŲ~iŲŽiŲži×§iŲŗiŲĀiŲŌiŲįišüiÕjšjš&jÕ0jšGjÕQjÕ]jšrjÕyjš‹jÕ•jšĒjÕĩjšÆjÕĐjÕÖjšęjšôjšūjš kšk-kŲ8kÕ>k×\k`k×qkÕ{kՁkדk—kרkÕ˛kÕ¸k×ĘkÎk×ßkÕékÕīk×˙kl×lÕlÕ$l/lAlÕKl`lÕkl|lÕ†lÕŒl lŦl°l×ÁlÕËlĪl×ālÕëlīl×ülÕmÕ m$m9mÕCmXmÕcmtmÕ~mÕ„mœm m׹mÕģmÕÁm×Ķm×m×čmÕōmÕøm×nÕnn×#nÕ-nÕ3n×EnIn×ZnÕdnÕjn×|n‘nÕ›n°nÕģnĖnÕÖnÕÜnôn oÕo(oÕ3oDoÕNoÕTohonoxoƒo’o˛oŲŊoÕÃo×ÍoŲŪo×ņoÕ÷o×ũoŲpÕpp×'pÕ1pÕ;pPpÕZpkpÕup†pՏpžpĸp×ŗpÕŊpÁp×ŌpÕŨpáp×îpÕøpÕūpq7qXqiqÕsqÕyqŽqžqĸq×ŗqÕŊqÁq×ŌqÕÜqāq×đqÕúqūq×rÕrr×+rÕ5rÕ;rTrdrÕjrvr‘rÕ›rļrÕÁrØrÕärõrÕûrs sss$s3sCsŲNsÕTsŲ_sÕpsÕvs׉sÕ“s—sרsÕ˛sÕ¸s×ÉsÍs×ŲsÕãsÕístÕ ttÕ't8tÕAtRtVt×gtÕqtut׆tÕ‘t•t×ĸtÕŦtÕ˛tĘtÎt×åtÕët×ütu× uÕuÕu-uLulu}uÕ‡uՍuĄuŦuģuŲŋuéuíu×ūuÕv v×vÕ#v'v×4vÕ=vWvgvŲwvvvŖvŲ°vŲÄvČv×ŲvÕãvÕév×úvūv× wÕwÕw3wÕ=wNwÕXwiwÕrwƒw‡wטwÕĸwĻwסwÕÂwÆw×ĶwÕŨwÕãwûwx:xKxÕUxÕ[xoxyx‹xŸxŲŦxŲĀxÄx×ÕxÕßxÕåx×öxúx×yÕyÕy/yÕ9yJyÕTyeyÕnyyƒy×”yÕžyĸy×ŗyÕžyÂy×ĪyÕŲyÕßy÷yz6zGzÕQzÕWzkzuz„zĨzŠzךzÕŋzÎzŌz×âzÕėzđz×üzÕ{ {×{Õ!{Õ.{L{f{‡{‘{›{Ē{š{ŲÂ{ŲÔ{Õã{Õí{|Õ |Õ| |4|Õ>|ÕD|S|g|Õq|Õw|†|š|Õ¤|ÕĒ|š|Í|Õ×|ÕŨ|ė|}Õ }Õ}}3}Õ=}ÕC}R}f}Õp}Õv}…}™}ÕŖ}ÕŠ}¸}Ė}ÕÖ}ÕÜ}ë}˙}Õ ~~×~Õ(~Õ2~G~ÕQ~b~Õl~}~Õ†~•~™~׊~Õŗ~ˇ~×Č~ÕĶ~×~×ä~Õî~Õô~ × Õ*?ÕJN×[ÕeÕkƒ—ÕĄÕ§ļĘÕÔéÕô€Õ€Õ€-€A€ÕK€`€Õk€|€Õ†€ÕŒ€ €Ē€´€ÀۀÕę€Õô€ÕÕ'=]HÕNYhwŲŲŒÕÕ­ÕŗŊŲʁ]ҁŲ܁Õæũ]‚Õ‚‚'‚Ų2‚Õ8‚M‚ÕW‚l‚Õr‚‚–‚Õ ‚ÕĻ‚ĩ‚ʂÕԂÕڂé‚ú‚ÕƒÕ ƒ*ƒ=ƒ]HƒÕNƒeƒŲoƒŲšƒǃŲŨƒáƒ×îƒÕøƒÕ„Õ „„×!„Õ+„Õ1„<„F„a„’„§„Õą„Õˇ„ƄۄÕå„Õë„ú„…]…Õ"…-…7…W…Ų[…………ן…Ŗ…ך…Ŋ…×Ō…†Ą&†Ų6†×T†ĄX†×p†Õz†Ą~†×†Õ•†Ą †Ą¤†×ĩ†Õŋ†ÕɆĄÍ†×ä†Õꆥų†Ąũ†×‡Õ‡Ą)‡ĄM‡ĄQ‡×b‡Õl‡Õv‡Ąz‡×ЇÕ‡Ą›‡ĄĢ‡Õĩ‡ĄĖ‡ÕևÕã‡Ąø‡Õū‡ĄˆĄˆĄˆĄ ˆĄ$ˆ×5ˆÕ?ˆÕIˆĄMˆ×^ˆÕhˆÕnˆ×xˆĄ|ˆ×‰ˆÕ“ˆÕˆĄĄˆ×ވÕ¸ˆÕˆĄÆˆ×͈ÕŨˆÕįˆĄüˆÕ‰Ą‰Õ!‰Ą2‰Õ;‰ĄW‰Ą[‰×l‰Õv‰Ą‹‰Õ–‰Ąš‰×§‰Õą‰Õˇ‰ĄĐ‰Ąå‰Õī‰ĄŠÕŠĄ ŠÕ*ŠÕ0ŠĄEŠĄKŠĄZŠĄ^Š×oŠÕuŠĄ„ŠĄˆŠ×™ŠÕŖŠĄ§Š×¸ŠÕŠĄÆŠ×֊ÕāŠĄäŠ×õŠÕ‹Ą‹×‹Õ‹Õ!‹Ą:‹ĄJ‹ÕP‹Ą\‹Ą`‹×w‹Õ‹Ą…‹×œ‹Õ§‹ĄĢ‹×ž‹ÕʋĄÎ‹×ۋÕዥ鋥đ‹Ąú‹ĄŒŒŲ.ŒŲ>ŒŲNŒŲbŒwŒˆŒÕ’ŒÕœŒ­ŒÕˇŒÕČȌ×،ÕãŒįŒ×øŒÕ×ÕÕ$<QÕ[pÕ{ŒÕ–Õœ´ɍÕĶčÕķŽÕŽÕŽ,ŽKŽkŽ|ŽÕ†ŽÕŒŽ ŽĒŽ´ŽžŽȎ׎įŽŲ÷ŽŲŲŲ+@QÕ[ÕevÕ€Õ‘×ĸÕŦ°×ÁÕĖЏ×ŨÕįÕ폐Õ$9ÕDUÕ_Õe}’ÕœąÕŧ͐ÕאÕŨõ‘4‘E‘ÕO‘ÕU‘i‘s‘}‘‡‘‘‘ ‘¯‘Ųš‘ŲđÕՑÕå‘Õë‘õ‘Ų’] ’Ų’Õ’5’]@’ÕF’Q’_’Ųj’Õp’ׁ’Õ‹’ ’ÕĻ’´’Õē’ʒΒ×ߒÕé’Õī’ū’“Õ“Õ#“.“D“d“w“]‚“Õˆ“Ÿ“ŲŠ“Ųԓä“Ų””×(”Õ2”Õ<”ÕF”J”×[”Õe”Õk”v”Œ”¯”ā”õ”Õ˙”Õ••)•Õ3•Õ9•H•_•]j•Õp•{•…•Ĩ•ŲŠ•Ε͕×í•ņ•×– –× –]–¤t–Ų„–×ĸ–¤Ļ–מ–ÕȖ¤Ė–×Ũ–Õ㖤ō–×—Õ —Õ—¤—×2—Õ8—¤G—¤K—×b—Õh—¤w—¤Ž—Õš—¤ž—ׯ—Õš—ÕפĮ—×חÕŨ—¤č—¤ø—Õ˜¤˜Õ#˜Õ0˜¤E˜ÕK˜¤R˜¤\˜¤b˜¤m˜¤q˜×‚˜ÕŒ˜Õ–˜¤š˜×̘Õĩ˜Õģ˜×Ř¤É˜×֘Õā˜Õę˜¤î˜×û˜Õ™Õ™¤™× ™Õ*™Õ4™¤I™ÕS™¤d™Õn™¤™Õˆ™¤¤™¤¨™×š™ÕÙ¤Į™×ؙÕ♤ķ™Õ˙™¤š×šÕšÕ š×*šÕ4šÕ>š¤Bš×RšÕ\šÕbš¤tšÕ~šÕˆš¤˜šÕĸšÕޚ¤žšÕȚÕΚ¤ÜšÕ嚤öš¤úš× ›Õ›¤*›Õ4›¤E›ÕQ›¤U›×b›Õl›Õr›¤“›¤—›×´›¤Æ›ÕЛÕڛ¤ę›Õô›Õœ¤œ¤2œ¤?œ¤Eœ¤Tœ¤Xœ×iœÕoœ¤~œ¤‚œ×“œÕœ¤Ąœ×˛œÕŧœ¤Āœ×МÕڜ¤Ūœ×īœÕúœ¤ūœ× ÕÕ¤4¤DÕJ¤V¤Z×qÕ{¤×–ÕĄ¤Ĩ×¸Õĝ¤Č×՝Õ۝¤ã¤ę¤ô¤žžŲ(žŲ8žŲHžŲ\žqž‚žÕŒžÕ–ž§žÕąžÕžžž×ĶžÕŨžáž×ōžÕũžŸ×ŸÕŸÕŸ6ŸKŸÕUŸjŸÕuŸ†ŸÕŸÕ–ŸޟßÕ͟âŸÕíŸūŸÕ Õ & E e v Õ€ Õ† š ¤ Ž ¸  Ņ ė Õō ×ü ŲĄ&ĄÕ0ĄGĄÕQĄÕYĄ×mĄÕwĄ{Ą×ŒĄÕ˜Ą×ĸĄÕŦĄĮĄŪĄøĄ ĸÕĸÕ"ĸ=ĸVĸZĸ×kĸÕuĸÕ{ĸ‰ĸÕ“ĸ՝ĸ¸ĸÎĸÕ×ĸįĸëĸ×üĸÕŖ Ŗ×ŖÕ&Ŗ*Ŗ×7ŖÕAŖÕGŖ_ŖcŖ×tŖÕ~Ŗ“ŖÕžŖĸŖ×¯ŖÕšŖÕŋŖ×ŖėŖÕöŖ ¤Õ¤'¤Õ1¤Õ7¤O¤d¤Õn¤ƒ¤ÕޤŸ¤ÕФÕ¯¤äͤפâ¤ú¤Ĩ'ĨÕ1ĨÕ7ĨKĨUĨ`ĨoĨφĨŲ™ĨĻ­ĨÕˇĨÕŊĨĻÎĨĻŪĨĻâĨ×ōĨÕøĨĻĻĻ Ļ×ĻÕ%ĻĻ)Ļ×5ĻÕ?ĻĻCĻ×PĻÕZĻÕgĻĻ…ĻϟĻĻĀĻĻĘĻĻŪĻîĻŲųĻÕ˙ĻŲ §Õ§Ų$§;§]F§ÕL§`§u§Õ§Õ…§§œ§ §×ą§Õģ§ÕÁ§×ҧէ׿§Õđ§Õú§¨Õ¨ ¨+¨E¨c¨t¨Õ~¨Õ„¨˜¨¤¨¨¨×š¨ÕèĮ¨×بÕã¨į¨×ô¨Õū¨ÕŠŠ Š×1ŠÕ;Š?Š×PŠÕ[Š_Š×lŠÕvŠÕ|Š”ŠŠŠÕŗŠČŠÕĶŠäŠÕîŠÕôŠ Ē!ĒÕ+Ē@ĒÕKĒ\ĒÕfĒÕlĒ€ĒŠĒ™Ē­ĒŲēĒŲĘĒ×ÔĒŲčĒėĒ×ũĒÕĢĢÕ'Ģ8ĢÕBĢSĢÕ`ĢdĢ×uĢÕĢƒĢ×”ĢÕŸĢŖĢ×°ĢÕēĢÕĀĢØĢ÷ĢŦ(ŦÕ2ŦÕ8ŦLŦVŦoŦ]vŦ€ŦŠŦ”ŦžŦŠŦŊŦŅŦŲŪŦŲîŦŲūŦ×­Ų­Õ­4­†?­R­†[­i­Ųt­Õ~­‚­×“­Õ™­¤­Ž­Ŋ­Ō­ÕØ­į­ü­ÕŽŽ]#Ž'Ž×8ŽÕBŽFŽ×SŽÕYŽiŽ~ŽÕˆŽ™ŽÕĨŽēŽÕĀŽÕŽ]áŽåŽ×öŽÕ¯¯×¯Õ ¯$¯×1¯Õ;¯ÕA¯Y¯]¯×n¯Õx¯¯Õ˜¯œ¯×НÕŗ¯Õš¯ҝæ¯Õđ¯°Õ°!°Õ+°Õ1°I°h°ˆ°™°ÕŖ°ÕаŊ°Į°ҰÛ°å°ī°ų°ąą"ąĒ9ąŲLąĒ`ąÕjąÕpąĒ…ąlją×•ąÕŸąÕĨąĒļąĒēą×ĘąÕĐąĒßąĒãą×ķąÕũąĒ˛× ˛Õ˛Ē˛×(˛Õ2˛Õ?˛Ē]˛Ēw˛ǘ˛Ēĸ˛Ēļ˛ʲŲײŲë˛ŗÕ ŗ ŗÕ&ŗ5ŗJŗÕTŗÕZŗiŗmŗ×~ŗÕˆŗŒŗ×ŗÕ¨ŗŦŗ×šŗÕÃŗÕÉŗáŗ´ ´1´Õ;´ÕA´U´_´i´s´}´‡´‘´›´Ĩ´š´Í´ŲÚ´Ųę´×ô´Ųĩ ĩ×ĩÕ'ĩ+ĩ×<ĩÕGĩKĩ×XĩÕbĩÕhĩ€ĩ„ĩוĩÕŸĩŖĩ×´ĩÕŋĩĐĩÕÚĩÕāĩøĩ ļÕļ,ļÕ7ļHļÕRļÕXļpļļ¯ļĀļÕĘļÕĐļäļîļˇ]ˇˇ"ˇ,ˇ7ˇKˇ_ˇŲlˇŲ…ˇ×ˇŲšˇÕ ˇŲ̎ÕĩˇʡÕСߡôˇÕúˇ¸]¸¸×0¸Õ:¸>¸×K¸ÕQ¸a¸v¸Õ€¸‘¸Õ¸˛¸Õ¸¸͸]Ų¸Ũ¸×î¸Õø¸ü¸× šÕšš×)šÕ3šÕ9šQšUš×fšÕpštš×…šÕš”š×ĄšÕĢšÕąšÉšŪšÕčšųšÕē ē×ēÕ$ē(ē×9ēÕDēHē×UēÕ_ēÕeē}ē’ēÕœē­ēÕŗēÃēØēÕŪēķē]˙ēģ×ģÕģ"ģ×3ģÕ>ģBģ×OģÕYģÕ_ģwģ{ģ׌ģÕ–ģšģ×§ģÕ­ģŊģÁģ×ŌģÕÜģāģ×íģÕ÷ģûģ×ŧÕŧ ŧÕ*ŧ?ŧÕFŧQŧ^ŧ×hŧŲsŧÕ}ŧŧ×’ŧÕœŧ ŧ×­ŧÕŗŧÃŧØŧÕŪŧúŧ]Ŋ Ŋ×ŊÕ%Ŋ)Ŋ×:ŊÕEŊIŊ×VŊÕ`ŊÕfŊ~Ŋ“Ŋ՝Ŋ˛ŊÕŊŊÎŊÕØŊÕŪŊōŊüŊžžž#ž×4žÕ>žBž×OžÕUžežiž×zžÕ„ž™žÕ¤ž¨ž×ĩžÕŋžÕÅžŨžōžÕüžŋÕŋ-ŋÕ7ŋÕ=ŋUŋjŋÕtŋ‰ŋÕ”ŋĨŋÕ¯ŋÕˇŋÁŋËŋÕŋßŋéŋķŋũŋĀĀĀ0ĀŦ?ĀŲHĀŲQĀŲ[ĀŲkĀŲ{Ā×…ĀŲ–ĀŦąĀŦĐĀŦáĀÕëĀÕņĀŦÁŦ ÁŦÁŦ5ÁŲ>ÁŲGÁŲQÁŲ^ÁŲlÁŲyÁŲœÁŦÁŲģÁŲĘÁ×įÁûÁÕÂÂÕÂ0ÂÕ=ÂAÂ×QÂÕ[ÂÕaÂ×m‰ŠÂēÂÕÄÂÕĘÂŪÂäÂôÂøÂ×ÃÕÃÕÃ0ÃÕ:ÃOÃÕZÃkÃÕuÃÕ{ÏÕäèÃ׸ÃÕÂÃÆÃ××ÃÕâÃæÃ×ķÃÕũÃÕÄÄÄ×/ÄÕ9ÄNÄÕYÄ]Ä×jÄÕtÄÕzÄ’Ä–Ä×ĻÄÕ°Ä´Ä×ĀÄÕĘÄßÄÕęÄîÄ×ûÄÕÅÕ Å$Å8ÅÕBÅÕHÅSÅgÅÕqŁÅÕ‹Å ÅÕĢÅŧÅÕÆÅÕĖÅåÅųÅÕÆÆÕ#Æ4ÆÕ>ÆÕDÆ\ÆpÆÕzƏÆÕšÆĢÆÕĩÆÕģÆĪÆŲÆäÆũÆĮ×&ĮŲ7ĮŲBĮÕLĮPĮ×aĮÕkĮoĮ×€ĮÕ‹ĮĮלĮÕĻĮÕŦĮÅĮÉĮ×ÚĮÕäĮųĮÕČČ×ČÕČÕ%Č=ČAČ×RČÕ\ČqČÕ|Č€Č׍ČÕ—Č՝ČĩČšČ×ĘČÕÔČéČÕôČøČ×ÉÕÉÕÉ-É1É×BÉÕLÉaÉÕlÉpÉ×}ÉÕ‡ÉՍÉĨÉŠÉ×ēÉÕÄÉŲÉÕäÉčÉ×õÉÕ˙ÉÕĘĘ!Ę×2ĘÕ<ĘQĘÕ\Ę`Ę×mĘÕwĘÕ}ʕʙĘ×ĒĘÕ´ĘÉĘÕÔĘØĘ×åĘÕīĘÕõĘ ËË×"ËÕ,ËAËÕLËPË×]ËÕgËÕm˅ˉËךËդ˚ËÕÄËČË×ÕËÕßËÕåËũËĖ×ĖÕĖ1ĖÕ<Ė@Ė×MĖÕWĖÕ]ĖuĖyĖ׊ĖÕ”ĖŠĖմˏĖ×ÅĖÕĪĖÕÕĖíĖņĖ×ÍÕ Í!ÍÕ,Í0Í×=ÍÕGÍÕMÍeÍiÍ×zÍÕ„Í™ÍդͨÍ×ĩÍÕŋÍÕÅÍŨÍáÍ×ōÍÕüÍÎÕÎ Î×-ÎÕ7ÎÕ=ÎUÎjÎÕtΉÎÕ”ÎĨÎÕ¯ÎÕĩÎÎÎãÎÕíÎĪÕ ĪĪÕ(ĪÕ.ĪGĪ\ĪÕfĪ{ĪՆΗĪÕĄĪÕ§ĪĀĪÕĪÕßĪôĪÕ˙ĪĐÕĐÕ Đ9ĐNĐÕXĐmĐÕxЉĐÕ“ĐÕ™Đ˛ĐĮĐÕŅĐæĐÕņĐŅÕ ŅÕŅ+Ņ@ŅÕJŅ_ŅÕjŅ{ŅÕ…ŅÕ‹Ņ¤ŅšŅÕÃŅØŅÕãŅôŅÕūŅÕŌŌ2ŌÕ<ŌQŌÕ\ŌmŌÕwŌÕ}Ō–ŌĢŌÕĩŌĘŌÕÕŌæŌÕđŌÕöŌĶ$ĶÕ.ĶCĶÕNĶ_ĶÕiĶÕoĶˆĶĶÕ§ĶŧĶÕĮĶØĶÕâĶÕčĶÔÔÕ Ô5ÔÕ@ÔQÔÕ[ÔÕaÔzԏÔÕ™ÔŽÔÕšÔĘÔÕÔÔÕÚÔķÔÕÕÕ'ÕÕ2ÕCÕÕMÕÕSÕhÕrÕ|ՆՐ՚դՎոÕÂÕĖÕÖÕāÕęÕôÕūÕÖÖÖ/Ö?ÖŲNÖŲ]ÖŲlÖŲ{Ö×…ÖŲ™Ö­ÖÕˇÖÎÖÕØÖÕäÖčÖ×øÖÕ×Õ××××+×Õ5×9××J×ÕU×Y××f×Õp×Õv׎×ĸ×ÕŦ×Á×ÕĖ×Ũ×Õį×ÕķרըըØ,Ø0Ø×@ØÕJØNØ×ZØÕdØhØ×yØÕ„؈Ø×•ØÕŸØÕĨØžØÂØ×ŌØÕÜØņØÕüØŲ× ŲÕŲÕŲ5Ų9Ų×IŲÕSŲÕYŲhŲlŲ×|ŲÕ†ŲŠŲ×›ŲÕĻŲĒŲסŲÕÁŲÕĮŲßŲãŲ×ķŲÕũŲÚÕÚ!Ú×.ÚÕ8ÚÕ>ÚVÚZÚ×jÚÕtÚ‰ÚÕ”Ú˜Ú×ĨÚÕ¯ÚÕĩÚÍÚŅÚ×áÚÕëÚÛÕ ÛÛ×ÛÕ&ÛÕ,ÛDÛXÛÕbÛwÛÕ‚Û“Û՝ÛÕŖÛģÛŋÛ×ĪÛÕŲÛîÛÕųÛũÛ× ÜÕÜÕÜ2ÜFÜÕPÜeÜÕp܁ÜÕ‹ÜÕ‘ÜŠÜŊÜÕĮÜÜÜÕįÜøÜÕŨÕŨ Ũ4ŨÕ>ŨSŨÕ^ŨoŨÕyŨÕ…Ũ™ŨÕŖŨŗŨÕŊŨŌŨÕŨŨîŨÕøŨÕūŨŪ+ŪÕ5ŪJŪÕUŪfŪÕpŪÕvŪŽŪĸŪÕŦŪÁŪÕĖŪŨŪÕįŪÕíŪßßÕ#ß8ßÕCßTßÕ^ßÕdß|ߐß՚߯ßÕēßËßÕÕßÕÛßīßųßā āā!ā+ā5ā@ā\ālāŲ|āŲŒāŲœā×ĻāŲˇāŲÂāÕĖāĐā×áāÕįāōāáÕ á%á5áÕ?áÕIáZáÕdáÕjá|á€áבáÕ›áÕĨáŠá×ĩáÕŋáÕÅáÕáŲá×ęáÕôáøá×âÕââ×#âÕ.â?âÕIâÕOâeâwâՁâ‘âÕ›â°âÕģâĖâÕÖâÕÜâöâã1ãRãcãÕmãÕsã‰ã”ã­ãŊãŲÍãŲŨã×įãŲûã˙ã×äÕäÕ ä×0ä4ä×EäÕOäÕUä`äräÕ|ä‘äÕœä­äÕˇäÕŊäŅäŨäáä×ōäÕüäÕå×åå×'åÕ1åÕ7åBå]å|ååÕ—å՝åąåŊåÁå×ŌåÕÜåāå×ņåÕüåæ× æÕæÕæ5æ9æ×JæÕTæiæÕtæxæ×…æÕæÕ•æ­æąæ×ÂæÕĖæáæÕėæđæ×ũæÕįÕ į%į)į×:įÕDįHį×YįÕdįhį×uįÕįÕ…įį˛įÕŧįŅįÕÜįíįÕ÷įÕũįč*čÕ4čIčÕTčečÕočÕuččĸčÕŦčÁčÕĖčŨčÕįčÕíčééÕ$é9éÕDéUéÕ_éÕeéyéé‰é“éžéģéŲÅéŲŌéŲßéŲîéŲęŲę=ę×KęÕUęYę×vęzę׌ęę׎ę˛ę×ÃęÕÉęØęÜę×éęÕķęÕųęëÕëÕë(ë=ëÕCëNë^ësëÕ}ëŽëÕšë¯ëÕšëÕŋëÎëãëÕíëÕķëėė×ėÕ!ėÕ+ė@ėÕFėQė×_ėÕiėÕsėwėׄėÕŽėÕ˜ėŦėÕļėÕŊėÉėØėÜė×íėÕ÷ėÕũė íí×!íÕ+í/í×@íÕKíOí×\íÕfíÕlí„íŖíÃíÔíÕŪíÕäíøíîîŲ5îŲBîŲUîtîŲ„îŲ˜î­îÕšîČîĖî×ŨîÕíîīÕīī×!īÕ1ī5ī×BīÕLīÕVīZī×jīÕtīÕ{ī‡ī–īĢīÕˇīÆīĘī×ÛīÕåīÕīīđÕđ%đÕ/đÕ7đ×NđÕXđ\đ×mđÕwđՁđ…đ×’đÕœđÕĻđĒđ×ģđÕÂđÎđØđâđėđûđņ:ņUņÕ[ņoņzņ„ņŽņ˜ņĸņŦņļņÅņÕņäņŲčņøņōōŲ(ō×2ōŲBōŲSōŲ^ōÕhō}ōÕ‰ō˜ō­ōÕšōÄōŌōŲŨōÕãōíō÷ōķ ķ×ķÕ%ķÕ/ķDķÕNķ_ķÕiķzķÕƒķ’ķ–ķ×§ķÕąķÕģķĐķÕÚķëķÕõķôÕôô$ô.ô8ôBôLôVô`ôjôtô~ôˆô’ôœôĻô°ôģôÅôĪôîôŲũôŲõ¯"õ¯9õpFõ¯Uõ¯jõÕvõ¯õ¯‹õ¯•õ¯Ÿõ¯Šõ¯ÃõŲÍõŲŲõŲņõŲõõąö× öÕ*öąAöpNöą]öąröÕ~öą‰öą“öąöą§öąąöąŧöąÖöŲâöŲõöŲųöŗ÷×$÷Õ.÷ŗE÷]R÷ŗa÷ŗv÷Õ‚÷ŗ÷ŗ—÷ŗĄ÷ŗĢ÷ŗĩ÷ŗĀ÷ŗÚ÷Ųæ÷Ųų÷Ųũ÷ĩø×(øÕ2øĩIø]VøĩeøĩzøÕ†øĩ‘øĩ›øĩĨøĩ¯øĩšøĩÄøĩÎøĩčøŲōøŲųŲųˇCų×QųÕ[ųˇ_ų×pųÕzųˇ~ų׋ųÕ•ųˇ™ų×ĻųÕŗųˇˇų×ČųÕÔųˇãųˇįų×øųÕúˇúÕ'úˇ8úÕBúˇSúÕ\úˇkúˇoú×€úÕŠúՐúˇŸúˇŖú×´úÕÄúˇŲúÕãúˇôúÕūúˇûÕûˇ'ûˇ<ûÕHûˇWûˇlûÕxûˇƒûˇûˇ—ûˇĄûˇĢûˇĩûˇŋûˇĘûˇÔûˇæûúûŲüŲü0üÕ<üKü`üÕlü{üüÕœüĢüĀüÕĘüÕĐüßüôüÕūüÕũũ(ũÕ4ũCũXũÕbũÕhũwũŒũÕ˜ũ§ũŧũÕČũĶũŨũįũņũûũūū%ūŲCūWūŲdūŲtū×~ūŲūŲšūÕ ūŲĩūÆūÕūŲū×ęūÕôūÕúū× ˙˙×˙Õ%˙Õ+˙<˙@˙×W˙Õa˙e˙×u˙Õ˙Õ‰˙ž˙Õ¤˙¯˙ē˙×Ę˙ÕÔ˙Ø˙×ä˙Õî˙Õô˙ ×Õ&×7;×GÕQÕWhl×}Õ‡Õ×šĒŽ×ŋÕÉÕĪ×Üėđ×Õ Õ×"&×2Õ<ÕF[ÕevÕ€‘ÕšĢ¯×ĀÕĘÎ×ßÕęûÕÕ ×Ų"Õ,AÕK\Õhl×}ՇՍĸ°ÕēÕĀĶäč×ųÕÕ ×&*×;ÕEÕK×Xhl×}Õ‡Õ×šĒŽ×ŋÕÉÕĪ×Üėđ×Õ Õ×"&×2Õ<ÕF[ÕevÕ€‘ÕšĢ¯×ĀÕĘÎ×ßÕęûÕÕ0PqŽ˛×ÃÕÍŅ×âÕėÕō Õ&*×;ÕA×ThÕrÕx‰™×­ÕˇÕŊ×ĘÚôÕú /Õ9Õ?P`d×tÕz‰×Õ§ĢסÕÁÅ×ŌÕÜÕéũÕÕ!2Õ<ÕEUY×jÕtÕzׇ—›×ŦÕļÕŧ×ÉŲŨ×îÕøÕū×  × Õ) Õ3 H ÕR c Õm ~ Õ‡ ˜ œ ×­ Õˇ ÕŊ ×Î Ō ×Ū Õč Õî ˙  × Õ Õ$ ×5 9 ×E ÕO ÕU f j ×{ Õ… Õ‹ ל   ×Ŧ Õļ ÕĀ Õ Õß đ Õú  Õ % ) ×: ÕD H ×Y Õd h ×u Õ Õ…  ˛ Õŧ Ņ ÕÜ í Õ÷ Õũ  * Õ4 I ÕT e Õo Õ{  א Õš Õ  ×­ Ŋ Á ×Ō ÕÜ Õâ ×ī ˙  × Õ Õ$ ×5 9 ×E ÕO ÕY n Õx ‰ Õ“ ¤ Õ­ ž  ×Ķ ÕŨ á ×ō Õũ ÕÕ$9ÕCÕIZjn×ՉՏלŦ°×ÁÕËÕŅ×âæ×ōÕüÕÕ%6Õ@QÕZko×€ÕŠŽ×ŸÕĒģÕÅÕŅæÕđÕ!Õ+Õ7LÕVkÕv‡Õ‘՝˛ÕŧŅÕÜíÕ÷ÕÕ-1×BÕLP×]ÕgÕm}×’Õœ ×ąÕŧĀ×ÍÕ×ÕŨõ Õ$Õ.?ÕIÕVZ×kÕuŠÕ•™×ĻÕ°ÕļÎãÕíũÕÕ"Õ/DÕNcÕnՉՏ¨ŊÕĮÜÕįøÕÕ&DcmwŸŊČâŲėŲûŲ˙š š5Õ;šJšN×_Õiš~Õ‰š×šÕ¤ÕĒšÂšÆ××Õášå×öÕš×ÕÕ"š:š\ššÕšÕ š¸šÚšũšÕÕš2šAŲEģfģj×{Õ…ģšÕ ģ¯ģŗ×ÄÕÎģãÕîģō×˙Õ Õģ'ģ+×<ÕFģJ×[Õfģj×wՁՇģŸģžģŪģīÕųÕ˙ģģ2ģRģcÕmÕsģˆģ’ģ¯ŲšŲČŲĖŊíŊņ×Õ Ŋ×$Õ.Ŋ2×?ÕIŊM×^ÕhŊ}ÕƒŊ’Ŋ–×§ÕąŊÆÕŅŊÕ×âÕėÕōŊ Ŋ×Õ)Ŋ>ÕIŊM×ZÕdÕjŊ‚ŊĄŊÁŊŌÕÜÕâŊúŊŊ5ŊFÕPÕVŊkŊxŊ‡Ų‹ŋŦŋ°×ÁÕËŋĪ×ÜÕæŋę×ūÕŋ ×Õ#ŋ'×8ÕBŋWÕ]ŋlŋpׁՋŋ ÕĢŋ¯×ŧÕÆÕĖŋäŋč×ųÕŋÕ#ŋ'×4Õ>ÕDŋ\ŋ{ŋ›ŋŦÕļÕŧŋÔŋīŋŋ Õ*Õ0ŋEŋSŋ]ŋwŲŲ˜ŲœÁÆÁĘ×Ũ]čÕî×ūÁ ] Õ& Á1 ÁC ÕM Áb Õm Á~ Õˆ ÕŽ Áĸ ÁŽ Á˛ ×à ÕÍ ÕĶ ×Ũ Õį Áë ×ü Õ!Á!Õ!!Á2!Õ?!ÁC!×T!Õ`!Áo!Ás!ׄ!Õ”!ÁŠ!Õŗ!ÁÄ!ÕÎ!Áß!Õč!Á÷!Áû!× "Õ"Õ"Á+"Á/"×@"ÕP"Áe"Õo"Á€"ÕŠ"Á›"Õ¤"Áŗ"ÁČ"ÕÔ"Áã"Áø"Õ#Á#Á#Á##Á-#Á7#ÁA#ÁK#Á[#Á_#×p#Õz#Á#Õš#Áž#×Ģ#Õĩ#Õģ#ÁĶ#Áč#Õō#Á$Õ$Á#$Õ-$Õ3$ÁG$ÁV$Ãj$Ųw$Ų‹$à$ÕĒ$Ãģ$ÕÅ$ÃÖ$Õã$Ãį$×ø$Õ%Õ%×%Ã%×-%Õ7%ÕA%ÃV%Õ\%Ãg%Ãr%Ã~%Â%ד%՝%ÕŖ%Ã˛%Ãļ%×Į%ÕŅ%ÃÕ%׿%Õņ%Ãõ%×&Õ &Õ&Ã*&Ã.&×?&ÕI&ÃM&×^&Õi&Ãm&×z&Õ„&ÕŠ&Ãĸ&Ãˇ&ÕÁ&ÃÖ&Õá&Ãō&Õü&Õ'Ã'Ã9'ÃY'Ãj'Õt'Õz'Î'Ô'è'Åŧ'ŲÉ'ŲŨ'Åō'Õü'Å (Õ(Å((Õ5(Å9(×J(ÕT(ÕZ(×j(Ån(×(Õ‰(Õ“(Ũ(ÕŽ(Åš(ÅÄ(ÅĐ(ÅÔ(×å(Õī(Õõ(Å)Å)×)Õ#)Å')×8)ÕC)ÅG)×T)Õ^)Õd)Å|)ŀ)ב)Õ›)ş)×°)Õģ)Åŋ)×Ė)ÕÖ)ÕÜ)Åô)Å *Õ*Å(*Õ3*ÅD*ÕN*ÕT*Ål*ŋ*ÅĢ*Åŧ*ÕÆ*ÕĖ*Åā*Åæ*Åú*Į+Ų+Ų/+Į3+×D+ÕN+ĮR+×_+Õi+Įm+×z+Õ€+Į’+Õœ+Įą+Õ¸+ĮÃ+ĮÔ+ĮØ+×ī+Õõ+Į,Į,×,Õ,Õ%,Į4,Į8,×I,ÕS,ĮW,×h,Õs,Įw,ׄ,ÕŽ,Õ”,ĮŦ,Į°,×Á,ÕË,ĮĪ,×ā,Õë,Įī,×ü,Õ-Õ -Į$-Į9-ÕD-ĮY-Õc-Įx-Õƒ-Į”-Õž-Õ¤-Įŧ-ĮÛ-Įû-Į .Õ.Õ.Į0.Į:.ĮN.Éb.Ųo.Ų.׉.Ų”.Õž.Éŗ.ÕŊ.ÉÍ.Õ×.Éč.Õō.É/Õ /É/Õ-/É1/×B/ÕL/ÕR/×b/Éf/×w/Ձ/Õ‡/ɒ/ÉŽ/ÉÎ/Éß/Õé/Õī/É0É0É0×$0Õ.0Õ40ÉC0ÉG0×X0Õb0Éf0×w0Õ‚0Ɇ0ד0՝0ÕŖ0Éģ0Éŋ0×Đ0ÕÚ0ÉŪ0×ī0Õú0Éū0× 1Õ1Õ1É31É71×H1ÕR1ÉV1×g1Õr1Év1׃1Ս1Õ“1ÉĢ1ɯ1×Ā1ÕĘ1ÉÎ1×ß1Õę1Éî1×û1Õ2Õ 2É#2É'2×82ÕB2ÉF2×W2Õb2Éf2×s2Õ}2Õƒ2ɛ2ɟ2×°2Õē2Éž2×Ī2ÕÚ2ÉŪ2×ë2Õõ2Õû2É3É3×(3Õ23É63×G3ÕR3ÉV3×c3Õm3Õs3ɋ3ɏ3× 3ÕĒ3ÉŽ3×ŋ3ÕĘ3ÉÎ3×Û3Õå3Õë3É4É4Õ"4É74ÕB4ÉS4Õ]4Õc4É{4ɐ4Õš4ɯ4Õē4ÉË4ÕÕ4ÕÛ4Éķ4É5Õ5É'5Õ25ÉC5ÕM5ÕS5Ék5ɀ5ÕŠ5ɟ5ÕĒ5Éģ5ÕÅ5ÕË5Éã5Éø5Õ6É6Õ"6É36Õ=6ÕC6É[6Ép6Õz6ɏ6Õš6ÉĢ6Õĩ6Õģ6ÉĶ6Éč6Õō6É7Õ7É#7Õ-7Õ37ÉK7É`7Õj7É7ÕŠ7ɛ7ÕĨ7ÕĢ7Éŋ7ÉÉ7ÉĶ7ÉŨ7Éį7Éņ7Éû7É8É8Ë.8ŲD8ŲX8Ë\8×m8Õw8Õ}8ˌ8ː8ץ8ÕĢ8˯8×Ā8ÕË8ËĪ8×Ü8Õæ8Õė8Ë9Ë9×9Õ#9Ë'9×89ÕC9ËG9×T9Õ^9Õd9Ë|9ˑ9Õ›9˰9Õģ9ËĖ9ÕÖ9ÕÜ9Ëô9Ë:Ë3:ËD:ÕN:ÕT:Ëh:Ër:Ë|:˛:Ų§:Ųē:Ųž:ß:ã:×ô:Õú:×;Õ;%;p2;A;V;Õb;m;w;;‹;•;Ĩ;ē;ÕÄ;Õ;Õß;ī;Õü;<Õ<,<Õ6<F<ÕO<^<Ųb<̓<͇<ט<Õž<ר<Õ˛<ÍÉ<pÖ<Íå<Íú<Õ=Í=Í=Í%=Í/=Í9=ÍE=ÍT=ŲX=Īy=Ī}=׎=Õ˜=Μ=׊=Õ¯=ך=ÕÃ=ĪÚ=pį=Īö=Ī >Õ>Ī">Ī,>Ī6>Ī@>ĪJ>ĪW>Īa>Īp>„>Ų•>™>×Ē>Õ´>¸>×Å>ÕË>×Õ>Õß>ô>Õ??$?Õ0?;?E?O?Y?c?p?z?„?“?Ų—?Ŋ?×Ë?ÕÕ?Ų?×ę?Õö?Ķ@@×@Õ@×&@Õ0@E@ÕQ@`@u@Ձ@Œ@–@ @Ē@´@ŋ@Ī@Ķ@×ā@Õę@î@×û@ÕA× AÕA*AÕ6AEAZAÕfAqA{A…AA™A§AąAĀAŲÄAáA×īAÕųAũA×BÕBĶ%B)B×6BÕKYKÕcKÕmK…K“KŠKÕŗKˇK×ÃKÕÍKŅK×ŨKÕįKëK×üKÕL L×LÕ&L*L×7LÕALÕGL_LpLÕzLLÕšLĢLÕĩLÕģLŲLęLÕôL MÕMÕM(M>MÕHMÕRMhMÕrMÕxMŒMĄMÕĢMÆMÕĐMÕÚMōMNNÕ N$N×0NÕ:N>N×JNÕTNXN×hNÕrNvNׇNÕ’N–N×ŖNÕ­NÕŗNËNĪN×ßNÕéNíN×ūNÕ O O×OÕ$OÕ*OBOROÕ\OqOÕ|OOÕ—O՝OģOĖOÕÖOėOÕöOÕüO P PÕ*PÕ4PJPÕTPÕZPnPrP׃PÕ‰PדP՝P´PpÁPĐPåPÕņPüPQQQ$Q0Q?QŅSQŲmQŅqQׂQÕŒQÕ–QŅĢQÕļQŅēQ×ĮQÕŅQÕÛQŅßQ×ōQ]ũQÕR×RŅ(RÕ2RÕ8RŅCRŅURÕ_RŅtRÕRҐRÕšRÕ RŅ´RŅĀRŅÄR×ÕRÕßRÕåR×īRÕųRŅũR×SÕSŅ)SÕ3SŅDSÕQSŅUS×fSÕrSҁSŅ…S×–SÕĻSŅģSÕÅSŅÖSÕāSŅņSÕúSŅ TŅ T×TÕ(TÕ.TŅ=TŅAT×RTÕbTŅwTՁTŅ’TÕœTŅ­TÕļTŅÅTŅÚTÕæTŅõTŅ UÕUŅ!UŅ+UŅ5UŅ?UŅIUŅSUŅ]UŅmUŅqUׂUÕŒUŅĄUÕŦUҰU×ŊUÕĮUÕÍUŅåUŅöUÕVŅVÕ VŅ1VÕ;VÕAVŅ[VŅ_V×pVÕzVŅVÕšVŅžV×ĢVÕĩVÕģVŅĶVŅčVÕōVŅWÕWŅ#WÕ-WÕ3WŅGWŅMWŅaWqWŲ|WÕ†WŠW×›WÕĻWģWÕÅWÕWÕßWđWÕũWX×XÕX,XÕ6XGXÕQXbXÕlX}XÕŒXXץXÕĢXÕąX×ÂXÆX×ŌXÕÜXÕæXûXÕYYÕ Y1YÕ:YKYOY×`YÕjYÕpYׁY…YבYÕ›YÕĄY˛YļY×ÍYÕ×YÛY×įYÕņYÕûYZÕZ!Z1Z5Z×LZÕVZZZ×jZÕtZÕ~Z‚ZדZÕšZĨZ×ĩZÕģZËZĪZ×âZņZõZ×[Õ[[× [Õ*[.[×;[ÕE[ÕR[V[×g[Õq[†[Õ‘[•[×ĸ[ÕŦ[Õ˛[Ę[ß[Õé[ū[Õ \\Õ$\Õ*\B\a\{\œ\Ļ\°\Ī\ŲŲ\Ųđ\Ųô\]"]×3]Õ=]A]×R]Õ]]a]×n]Õx]Õ~]–]š]×Ģ]Õĩ]š]×Ę]ÕÕ]Ų]׿]Õđ]Õö]^#^Õ-^B^ÕM^^^Õh^Õn^†^Ĩ^Å^Ö^Õā^Õæ^ú^__$_:_ŲI_Ųf_Ųj__מ_Õ¨_Õ˛_ļ_×Į_ÕÍ_××_Õá_å_×ö_Õ``×`Õ `$`×1`Õ;`ÕA`Y`x`˜`Š`Õŗ`Õš`Í`ë`õ`a aa+aŲ;aŲKaŲ[a×eaŲyaap›aÕĄaļaēa×ČapĶaÕŲaęaîa×˙aÕ bÕbb×'bÕ1bÕ;bPbÕVbablb×|bÕ‚b’b–b×§bÕŗb×ÄbČb×ÔbÕŪbÕäbõbųb× cÕc×'c+c×7cÕAcÕGcXc\c×mcÕyc׊cŽcךcÕ¤cÕĒcģcŋc×ĐcÕÚcÕäcčc×øcÕdÕ d!dÕ'd2d=d×MdÕSdcdgd×xdÕ„dוd™d×ĨdÕ¯dÕĩdÆdĘd×ÛdÕįd×ødüd×eÕeÕe)e-e×>eÕJe×[e_e×keÕueÕ{eŒeeץeÕ­eמeÂe×ÎeÕØeÕŪeīeķe×fÕf×!f%f×1fÕ;fÕAfRfVf×gfÕsfׄfˆf×”fÕžfÕ¤fĩfšf×ĘfÕĐfßfôfÕūfgÕgg×0gÕ:g>g×OgÕZg^g×kgÕugÕ{g“g—gרgÕ˛gĮgÕŌgÖg×ãgÕígÕķg h hÕ*h:hÕDhUhÕ_hÕlhhÕ‹h hÕĢhŧhÕÆhÕĖhähųhÕiiÕ#i4iÕ>iÕDi\iqiÕ{i‹iÕ•iĻiÕ°iÕšiÃiÍiØiįi÷iŲjŲj×!jŲ5jJjÕTjÕZjnjƒjՍjÕ“jžjĒjŽj×ŋjÕÉjÍj×ŪjÕéjíj×újÕkÕ k"k&k×7kÕAkVkÕakek×rkÕ|kÕ‚kškžkׯkÕškŊk×ÎkÕŲkŨk×ękÕôkÕúkl'lÕ1lFlÕQlblÕllÕrlŠlŸlÕŠlžlÕÉlÚlÕälÕęlmmÕ!m6mÕAmRmÕ\mÕbmvm|m†mm—mĻmļmŲÆmŲÖm×āmŲômøm× nÕnn"n×3nÕ=nRnÕ]nan×nnÕxnÕ~n–nĢnÕĩnÕģnĪnänÕînÕôn˙n oo× oÕ*o.o×?oÕJo[oÕeoÕkoƒo˜oÕĸoˇoÕÂoĶoÕŨoÕãoûopÕp/pÕ:pKpÕUpÕ[popup€p™pÔ­pŲēpŲÎpÔępÔqÔqÔq×%qÕ/qÕ5qÔ@qÔDq×UqÕ_qÕeq×uqÔyq׊qÕ”qÕšqÔĨqÔÁqÔáqÔōqÕüqÕrÔrÔ"rÔ&r×7rÕArÕGr×WrÔ[r×lrÕvrÕ|rԇrԓrԗrרrÕ˛rÕ¸rÔĮrÔËr×ÜrÕærÔęr×ûrÕsÔ s×sÕ!sÕ'sÔ?sÔCs×TsÕ^sÔbs×ssÕ~sԂs׏sÕ™sÕŸsÔˇsÔģs×ĖsÕÖsÔÚs×ësÕösÔús×tÕtÕtÔ/tÔ3t×DtÕNtÔRt×ctÕntÔrt×tÕ‰tՏtÔ§tÔĢt×ŧtÕÆtÔĘt×ÛtÕætÔęt×÷tÕuÕuÔuÔ#u×4uÕ>uÔBu×SuÕ^uÔbu×ouÕyuÕuԗuÔŦuÕļuÔËuÕÖuÔįuÕņuÕ÷uÔvÔ$vÕ.vÔCvÕNvÔ_vÕivÕovԇvԜvÕĻvÔģvÕÆvÔ×vÕávÕįvÔ˙vÔwÕwÔ3wÕ>wÔOwÕYwÕ_wÔwwԌwÕ–wÔĢwÕļwÔĮwÕŅwÕ×wÔīwÔxÕxÔ#xÕ.xÔ?xÕIxÕOxÔcxÔmxÔwxԁxԕxÖŠxŲļxŲĘxÖßxÕéxÖúxÕyÖyÖy×%yÕ/yÕ5yÖ@yÖDy×UyÕ_yÕey×uyÖyy׊yÕ”yÕšyÖĨyÖÁyÖáyÖōyÕüyÕzÖzÖ"zÖ&z×7zÕAzÕGz×WzÖ[z×lzÕvzÕ|zևz֓z֗zרzÕ˛zÕ¸zÖĮzÖËz×ÜzÕæzÖęz×ûzÕ{Ö {×{Õ!{Õ'{Ö?{ÖC{×T{Õ^{Öb{×s{Õ~{ւ{׏{Õ™{ÕŸ{Öˇ{Öģ{×Ė{ÕÖ{ÖÚ{×ë{Õö{Öú{×|Õ|Õ|Ö/|Ö3|×D|ÕN|ÖR|×c|Õn|Ör|×|Õ‰|Տ|Ö§|ÖĢ|×ŧ|ÕÆ|ÖĘ|×Û|Õæ|Öę|×÷|Õ}Õ}Ö}Ö#}×4}Õ>}ÖB}×S}Õ^}Öb}×o}Õy}Õ}֗}ÖŦ}Õļ}ÖË}ÕÖ}Öį}Õņ}Õ÷}Ö~Ö$~Õ.~ÖC~ÕN~Ö_~Õi~Õo~և~֜~ÕĻ~Öģ~ÕÆ~Ö×~Õá~Õį~Ö˙~ÖÕÖ3Õ>ÖOÕYÕ_Öw֌Õ–ÖĢÕļÖĮÕŅÕ×ÖīÖ€Õ€Ö#€Õ.€Ö?€ÕI€ÕO€Öc€Öm€Öw€ց€֕€ØŠ€Ųļ€ŲĶ€Øč€Õō€ØÕØ×$Õ.Ø2×?ÕIØM×ZÕ`ØrÕ|ؑÕ˜ØŖØ´ظ×΁ÕՁØāØä×õÕ˙Õ‚ׂ؂×*‚Õ4‚Õ:‚ØE‚ØW‚Õa‚Øv‚Ձ‚ؒ‚Õœ‚Õĸ‚Øļ‚ØÂ‚ØÆ‚×ׂÕá‚Õį‚×÷‚Øû‚× ƒÕƒÕƒØ'ƒØ3ƒØ7ƒ×HƒÕRƒÕXƒØgƒØkƒ×|ƒÕ†ƒ؊ƒ×›ƒÕσØĒƒ×ˇƒÕÁƒÕĮƒØßƒØãƒ×ôƒÕūƒØ„ׄՄØ"„×/„Õ9„Õ?„ØW„Ø[„×l„Õv„Øz„׋„Õ–„ؚ„×§„Õą„Õˇ„ØĪ„ØĶ„×ä„Õî„Øō„×…Õ…Ø…×…Õ)…Õ/…ØG…ØK…×\…Õf…Øj…×{…Õ†…؊…×—…ÕĄ…Õ§…Øŋ…ØÃ…×ԅÕŪ…Øâ…×ķ…Õū…؆׆ՆՆØ7†ØL†ÕV†Øk†Õv†؇†Õ‘†Õ—†د†ØÄ†ÕΆØã†Õî†Ø˙†Õ ‡Õ‡Ø'‡Ø<‡ÕF‡Ø[‡Õf‡Øw‡Õ‡Õ‡‡؟‡Ø´‡Õž‡ØĶ‡ÕŪ‡Øī‡Õų‡Õ˙‡ØˆØ,ˆÕ6ˆØKˆÕVˆØgˆÕqˆÕwˆ؏ˆؤˆÕވØÃˆÕΈØßˆÕéˆÕīˆØ‰Ø ‰Ø‰Ø!‰Ø5‰Ų9‰Úc‰Úg‰×x‰Õ‚‰Õˆ‰×™‰ڝ‰×ЉÕŗ‰ÕŊ‰ÚÁ‰×҉Õ׉Úæ‰Úę‰×ú‰ÕŠÕŠÚ#ŠÕ-ŠÚ>ŠÕHŠÚYŠÕbŠÚqŠÚuŠ×…ŠÕŠړŠ×¤ŠÕ¯ŠÚŗŠ×ŠÕƊÕЊÚčŠÚøŠÕ‹Ú‹Õ"‹Ú3‹Õ=‹ÕC‹Ú^‹Úb‹×s‹Õ}‹Õ‡‹ڜ‹Õĸ‹Úą‹ÚÆ‹ÕЋÚá‹Õí‹Úņ‹×ŒÕ ŒÕŒÚ+ŒÕ1ŒÚ<ŒÚKŒÚOŒ×`ŒÕjŒÚnŒ×ŒÕŠŒڎŒ×›ŒÕĨŒÕ̌ÚÌÚØŒÕâŒÚųŒÕÕÚ.ÚNÚiÕoڃڍڜÚąÕģÚˍÕՍÚæÕđÕũÚŽÕŽÚ,ŽÕ6ŽÚGŽÕQŽÕZŽÚdŽÚsŽ܎ŽŲ›ŽŲ¯ŽÜŗŽ×ĎÕΎÕԎ×åŽÜųŽÕÜ×ÕÕ(Ü=ÕCÜN×\ÕfÕpÜt×Õ‹Õ•ÜŠÕŗÕēÜƏÜ׏Üۏ×ėÕöÕÜÕÜ*Ü?ÕIÜZÕfÜj×{Õ…ÕܤÕǐÜĩÜĐÜȐ×ؐÕãÜį×øÕ‘ܑבՑÕ$‘Ü<‘ÜQ‘Õ[‘Ür‘Õ|‘Õˆ‘ܝ‘Õ§‘Üŧ‘ÕĮ‘ÜØ‘Õâ‘Õč‘Üü‘Ü’Ü’Ü*’Õ4’ÜD’ÕN’Ü_’Õi’Õv’ܕ’ܯ’ÜВÜڒÜî’Ųō’Ū“Ū “×1“Õ;“ÕA“×R“ŪV“×b“Õl“Õv“Ūz“׋“Õ•“Ū™“×ϓհ“Ū´“×Á“ÕʓŪۓŪߓ×đ“Õú“Õ”Ū”Õ”Ū.”ŪC”ÕM”Ū^”Õj”Ūn”×”Õ‰”Õ“”Ū¨”ÕŽ”Ūš”ŪȔŪĖ”×Ũ”Õį”Ūë”×ü”Õ•Ū •וÕ"•Õ(•Ū@•ŪU•Õ_•Ūv•Õ€•ÕŒ•ŪĄ•ÕĢ•ŪĀ•Õ˕ŪܕÕæ•Õė•Ū–Ū –Ū–Ū.–Õ8–ŪH–ÕR–Ūc–Õm–Õz–Ū™–Ūŗ–ŪԖŪŪ–Ūí–ā—Ų—Ų)—ā-—×>—ÕH—ÕN—×_—ās—Õ~—ā‚—×Ž—Õ˜—Õĸ—⎗ÕŊ—āȗ×֗Õā—Õę—āî—×û—Õ˜Õ˜ā#˜Õ-˜Õ4˜ā@˜āQ˜āU˜×f˜Õp˜Õz˜ā˜Õ•˜⤘āš˜ÕØāԘÕā˜āä˜×õ˜Õ˙˜Õ ™ā™Õ$™ā/™ā>™āB™×S™Õ]™āa™×r™Õ}™⁙׎™Õ˜™Õž™āļ™ā˙Õՙāė™Õö™ÕšāšÕ!šā6šÕAšāRšÕ\šÕbšāvšā€šāš⤚ÕޚāžšÕȚāؚÕãšÕđšā›ā)›āJ›āT›āh›⃛ؐ›Ų¤›⨛ך›ÕÛÕɛ×֛âæ›âę›×û›ÕœÕœâ$œÕ*œâ9œâNœÕXœâiœÕuœâyœ×ŠœÕ”œÕžœâŗœÕšœâĜâ͜âל×čœÕōœâöœ×Õâ×#Õ-Õ3âKâ`Õj⁝Õ‹Õ—âŦÕļâ˝Õ֝âįÕņÕ÷⠞âžâ$žâ9žÕCžâSžÕ]žânžÕxžÕ…ž⤞⾞âߞâéžâŸŲŸŲ7ŸŲ;ŸäeŸäiŸ×zŸÕ„ŸÕŠŸ×›Ÿ䯟ÕēŸ侟×ƟÕԟÕ۟äķŸÕųŸä × Õ Õ& ä* ×7 ÕA ÕK ä_ Õi Õp ä| 䍠䑠×ĸ ÕŦ Õļ äË ÕŅ äā äõ Õ˙ äĄÕĄä Ą×1ĄÕ;ĄÕEĄäZĄÕ`ĄäkĄäzĄä~Ą×ĄÕ™Ą䝡׎ĄÕšĄäŊĄ×ĘĄÕÔĄÕÚĄäōĄäĸÕĸä(ĸÕ2ĸÕ>ĸäSĸÕ]ĸärĸÕ}ĸäŽĸÕ˜ĸÕžĸä˛ĸäŧĸäËĸäāĸÕęĸäúĸÕŖäŖÕŖÕ,ŖäKŖäeŖ䆪䐪äąŖŲģŖŲŌŖũŖŲ ¤Ų¤Ų-¤×7¤Ų`¤Õj¤n¤×¤Õ‰¤¤×™¤ÕŖ¤Õ¯¤ŗ¤×ĤÕΤÕÔ¤×á¤ņ¤õ¤×ĨÕĨÕĨ×'Ĩ+Ĩ×7ĨÕAĨÕKĨ`ĨÕjĨ{ĨÕ…Ĩ–ĨÕŸĨ°Ĩ´Ĩ×ÅĨÕĪĨÕÕĨ×âĨōĨöĨ×ĻÕĻÕĻ×$Ļ4Ļ8Ļ×OĻÕUĻ×bĻrĻvĻׇĻÕ‘ĻÕ—ĻפϰĻ×ÃĻÕÍĻŅĻ×âĻÕėĻđĻ×üĻÕ§Õ§§×'§Õ1§Õ7§×H§L§×X§Õb§Õh§y§}§×ާÕ˜§Õž§×̧ˇ§ƧÛ§ė§Õö§Õ¨¨Õ¨Õ(¨,¨×=¨ÕG¨K¨×X¨Õ^¨n¨ƒ¨Õ¨¨Õ§¨¸¨Õ¨Õ΍͍×ä¨ÕՊŠ×ŠÕ)ŠÕ/ŠGŠKŠ×\Š`Š×mŠÕwŠÕŠ’ŠÕœŠÕŠŠžŠÕČŠÕΊŨŠōŠĒÕ ĒÕĒ(ĒÕ2ĒÕ?ĒCĒ×TĒXĒ×eĒÕoĒÕyĒŠĒÕ”ĒÕĄĒĨĒ×ļĒÕĀĒÕĘĒÎĒ×ßĒÕéĒÕīĒ×ĢĢ×ĢÕĢÕ Ģ1Ģ5Ģ×FĢÕPĢTĢ×`ĢÕjĢnĢ×{ĢÕ…ĢՒ̧ĢÕąĢÁĢÕËĢÜĢÕæĢÕīĢųĢŦŦÕ'Ŧ8ŦÕ>ŦNŦcŦÕmŦ}ŦÕ‡Ŧ˜ŦÕĸŦÕ¯ŦÄŦÕÎŦãŦÕîŦ˙ŦÕ ­Õ­#­)­3­=­G­Q­[­e­o­y­ƒ­­—­Ą­Ģ­ĩ­ŋ­É­Ô­ō­æ ŽŲŽŲ.Žæ2Ž×CŽÕMŽÕWŽæ[Ž×kŽÕuŽÕŽ攎ÕšŽæĨŽæ°Ž×ĀŽÕĘŽæÎŽ×ÚŽÕäŽÕęŽæûŽæ˙Ž×¯Õ¯Õ$¯æ9¯Õ?¯æN¯æc¯Õm¯æ~¯ÕН掯ן¯ÕНÕŗ¯æČ¯ÕίæŲ¯æč¯æė¯×ũ¯Õ°æ °×°Õ'°æ+°×8°ÕB°ÕH°æ`°æu°Õ°新Õ °ÕŦ°æÁ°Õ˰æā°Õë°æü°ÕąÕ ąæ ąæ*ąæ9ąæNąÕXąæhąÕrąæƒąÕąÕšąæšąæĶąæôąæū࿞Ų&˛ŲJ˛ŲT˛Ųk˛z˛Ų„˛Ų˛Õ•˛Ų ˛ÕϞŲļ˛ŲÆ˛ŲÖ˛×ā˛Ųë˛Õņ˛Ųŗ ŗ×ŗÕ$ŗÕ.ŗ2ŗ×?ŗÕIŗÕOŗ_ŗtŗ…ŗÕŗÕ™ŗĒŗÕ´ŗÕÁŗÅŗ×ÖŗÕāŗÕęŗîŗ×˙ŗÕ ´Õ´× ´$´×0´Õ:´Õ@´Q´U´×f´Õp´t´×€´ÕŠ´Ž´×›´ÕĨ´Õ˛´Ņ´ë´ ĩĩ%ĩ)ĩ×:ĩÕDĩÕNĩRĩ×cĩÕmĩÕsĩׄĩˆĩ×”ĩÕžĩÕ¤ĩĩĩšĩ×ĘĩÕÔĩØĩ×äĩÕîĩōĩ×˙ĩÕ ļÕļ+ļÕ5ļEļÕOļ`ļÕjļÕsļ}ļŒļļץļÕĢļ¯ļ×ŧļÕÆļĘļ××ļÕáļÕëļīļ×ˇÕ ˇˇÕ*ˇ.ˇ×;ˇÕEˇÕKˇ_ˇpˇ…ˇ–ˇÕ ˇÕǎģˇÕŎÕŌˇįˇÕņˇ¸Õ¸¸¸(¸2¸<¸F¸P¸Z¸d¸n¸x¸‚¸Œ¸–¸ ¸̏ĸÔ¸Ųä¸Ųô¸Ų˙¸ÕšŲšÕš;šKšŲ[šŲkšŲvšÕ|šŲ‡šÕš˛šÁšŲËšŲÖšÕÜšŲįšÕíšŲũšŲ ēŲē×'ēŲ2ēÕ8ēŲLēPē×aēÕkēÕuēēÕ—ēÕĄēļēÕĀēŅēÕÛēėēÕõēģģ+ģÕ5ģÕ?ģPģÕZģÕgģkģ×|ģÕ†ģՐģ”ģ×ĨģÕ¯ģÕĩģׯģĘģ×ÖģÕāģÕæģ÷ģûģ× ŧÕŧŧ×&ŧÕ0ŧ4ŧ×AŧÕKŧÕXŧmŧÕwŧ‡ŧÕ‘ŧĸŧÕŦŧÕĩŧŋŧÎŧŌŧ×ãŧÕíŧÕ÷ŧûŧ× ŊÕŊÕŊ×-Ŋ1Ŋ×=ŊÕGŊÕMŊ^ŊbŊ×sŊÕ}ŊŊ׍ŊÕ—Ŋ›ŊרŊÕ˛ŊÕŋŊÔŊÕŪŊîŊÕøŊ žÕžÕž&ž5ž9ž×JžÕTžXž×ežÕožsž×€žÕŠžÕ”ž˜ž×ŠžÕŗžČžÕĶžמ×äžÕîžÕôžŋŋ.ŋ?ŋÕIŋÕSŋdŋÕnŋÕ{ŋŋÕšŋĢŋÕąŋŊŋĮŋŅŋÛŋåŋīŋųŋĀ ĀĀ!Ā+Ā5Ā?ĀIĀTĀmĀ}ĀŲĀŲĀŲ­ĀŲŊĀėĀüĀŲ ÁŲÁŲ,ÁŲ<Á}ÁŲ‡ÁŲžÁ­ÁŲˇÁŲÂÁÕČÁŲĶÁÕŲÁŲéÁŲųÁŲ Â×ÂŲÂÕ$ÂŲ8Â<Â×MÂÕWÂÕaÂeÂ×yÂÕƒÂՍ‘Â×ĸÂÕŦ°Â×ŊÂÕĮÂËÂרÂÕáÂņÂÃÃÕ!ÃÕ+Ã<ÃÕFÃÕSÃWÃ×hÃÕrÃÕ|ÀÃבÃÕ›ÃÕĨÊÃ×ēÃÕÄÃČÃ×ÕÃÕßÃãÃ×đÃÕųÃÄÄ×%ÄÕ/Ä3Ä×?ÄÕIÄMÄ×ZÄÕdÄÕqĆÄՐĠÄÕĒÄģÄÕÅÄÕÎÄØÄįÄëÄ×üÄÕÅÕÅÅ×%ÅÕ/ÅÕ5Å×FÅJÅ×VÅÕ`ÅÕfÅwÅ{Å׌ÅÕ–ÅšÅ×ĻÅÕ°Å´Å×ÁÅÕËÅÕØÅíÅÕ÷ÅÆÕÆ"ÆÕ,ÆÕ5Æ?ÆNÆRÆ×iÆÕsÆwÆ×ŽÆÕ˜ÆœÆ×ŗÆˇÆ×ĘÆÎÆ×āÆ÷ÆûÆ× ĮÕĮĮ×&ĮÕ0Į4Į×AĮÕKĮÕXĮwĮ‘Į˛ĮŧĮËĮĪĮ×āĮÕęĮîĮ×ûĮÕČ Č×ČÕ ČÕ*Č.Č×?ČÕIČ^ČÕiČmČ×zČÕ„ČÕŠČžČ¯ČÄČÕČÕßČÕéČúČÕÉÕÉ&ÉÕ0ÉAÉÕGÉSÉ]ÉgÉqÉ{É…ÉÉ™ÉŖÉ­ÉˇÉÁÉËÉÕÉāÉųÉ ĘŲĘŲ)ĘŲ9ĘŲIĘxĘˆĘŲ˜ĘŲ¨ĘŲ¸ĘŲČĘūĘŲ ËŲË,ËŲ6ËŲAËÕGËŲRËÕXËŲhËŲxËŲˆË×’ËŲËÕŖËŲˇËģË×ĖËÕÖËÕÜËëËĖĖÕĖÕ%Ė6ĖÕ@ĖÕMĖQĖ×hĖÕrĖvĖׇĖÕ‘Ė•ĖץĖÕĢ˝Ė×ŧĖÕÆĖÕĶĖōĖ Í-Í7ÍAÍPÍTÍ×eÍÕoÍÕyÍ}Í׎ÍÕ˜ÍÕžÍ×¯ÍŗÍ×ŋÍÕÉÍÕĪÍāÍäÍ×õÍÕ˙ÍÎ×ÎÕÎÎ×*ÎÕ4ÎÕAÎVÎÕ`ÎpÎÕz΋ÎÕ•ÎÕžÎ¨ÎˇÎģÎ×ĖÎÕÖÎÕāÎäÎ×õÎÕ˙ÎÕĪ×ĪĪ×&ĪÕ0ĪÕ6ĪGĪKĪ×\ĪÕfĪjĪ×vĪՀ΄ĪבĪÕ›ĪÕ¨ĪŊĪÕĮĪ×ĪÕáĪōĪÕüĪÕĐĐĐ"Đ×9ĐÕCĐGĐ×XĐÕbĐfĐ×rĐÕ|Đ€Đ׍ĐÕ—ĐÕ¤ĐšĐÕÃĐĶĐÕŨĐîĐÕøĐÕŅ ŅŅ$Ņ(Ņ×9ŅÕCŅGŅ×TŅÕ^ŅbŅ×oŅÕyŅÕƒŅ‡ŅטŅÕĸҎŅÕÂŅÆŅ×ĶŅÕŨŅÕãŅ÷ŅŌŌ.ŌÕ8ŌÕBŌSŌÕ]ŌÕjŌŌÕ‰ŌšŌÕ ŌŦŌļŌĀŌĘŌÔŌŪŌčŌōŌüŌĶĶĶ$Ķ/ĶHĶXĶŲhĶŲxĶŲƒĶÕ‰ĶŲ”ĶÕšĶŋĶĪĶŲßĶŲīĶŲúĶÕÔŲ ÔÕÔHÔŲRÔŲpÔŲtÔėžÔėĸÔ×ŗÔÕŊÔÕÃÔ×ÔÔėčÔÕķÔė÷Ô×ÕÕ ÕÕÕė,ÕÕ2Õė=Õ×KÕÕUÕÕ_ÕėcÕ×pÕÕzÕÕ„Õė˜ÕÕĸÕÕŠÕėĩÕėÆÕėĘÕ×ÛÕÕåÕÕīÕėÖÕ ÖėÖė.ÖÕ8ÖėIÖÕUÖėYÖ×jÖÕtÖÕ~Öė“ÖÕ™Öė¤ÖėŗÖėˇÖ×ČÖÕŌÖėÖÖ×įÖÕōÖėöÖ××Õ ×Õ×ė+×ė@×ÕJ×ėa×Õk×Õw×ėŒ×Õ–×ėĢ×Õļ×ėĮ×ÕŅ×Õ××ėë×ėõ×ėØėØÕ#Øė3ØÕ=ØėNØÕXØÕeØ넨ėžØėŋØėÉØėęØŲôØŲŲŲŲî@ŲîDŲ×UŲÕ_ŲÕeŲ×vŲîŠŲÕ•Ųî™Ų×ĨŲÕ¯ŲÕšŲîÎŲÕÔŲîßŲ×íŲÕ÷ŲÕÚîÚ×ÚÕÚÕ&Úî:ÚÕDÚÕKÚîWÚîhÚîlÚ×}ÚÕ‡ÚÕ‘ÚîĻÚÕŦÚîģÚîĐÚÕÚÚîëÚÕ÷ÚîûÚ× ÛÕÛÕ Ûî5ÛÕ;ÛîFÛîUÛîYÛ×jÛÕtÛîxÛ׉ÛÕ”Ûî˜Û×ĨÛÕ¯ÛÕĩÛîÍÛîâÛÕėÛîÜÕ ÜÕÜî.ÜÕ8ÜîMÜÕXÜîiÜÕsÜÕyÜîÜî—ÜîĻÜîģÜÕÅÜîÕÜÕßÜîđÜÕúÜÕŨî&Ũî@ŨîaŨîkŨîŒŨŲ–ŨŲŋŨŲÉŨŲōŨŲüŨŲ%ŪŲ/ŪŲXŪŲbŪŲ‹ŪŲ•ŪŲŦŪŧŪŲĖŪŲÜŪŲėŪŲüŪŲ ßŲß×&ßŲ1ßÕ;ßPßÕ[ßp߁ßÕ‹ßÕ•ßĻßÕ°ßÕŊßÁß×Ôß]ßßÕéßíß×ūßÕāÕā×ā#ā×/āÕ9āÕ?āPāTā×eāÕoāsā×āÕ‰āāךāÕ¤āÕąāÆāÕĐāāāÕęāûāÕáÕáá'á<áTáÕ^áváÕƒá‡áטáÕĸáÕŦá°á×ÁáÕËáÕŅá×âáæá×ōáÕüáÕâââ×(âÕ2â6â×BâÕLâPâ×]âÕgâÕtâ‰âÕ“âŖâÕ­âžâÕČâÕŅâÛâęâîâ×˙âÕ ãÕãã×.ãÕ4ã×EãIã×UãÕ_ãÕeãvãzã׋ãÕ•ã™ã×ĨãÕ¯ãŗã×ĀãÕĘãÕ×ãėãÕöãäÕä!äÕ+äÕ4ä>äMäQä×bäÕläÕväzä׋äÕ•äÕ›ä×Ŧä°ä×ŧäÕÆäÕĖäŨäáä×ōäÕüäå× åÕåå×'åÕ1åÕ>åSåÕ]åmåÕwåˆåÕ’åÕ›åĨå´å¸å×ÉåÕĶåÕŨåáå×ōåÕüåտ׿æ×#æÕ-æÕ3æDæHæ×YæÕcægæ×sæÕ}ææ×ŽæÕ˜æÕĨæēæÕÄæÔæÕŪæīæÕųæÕį įįį×0įÕ:įÕDįHį×YįÕcįÕiį×zį~į׊įÕ”įÕšįĢį¯į×ĀįÕĘįÎį×ÚįÕäįčį×õįÕ˙įÕ č!čÕ+č;čÕEčVčÕ`čÕičsč‚č†č×—čÕĄčÕĢč¯čׯčÕĖč×Ũčáč×íčÕ÷čÕũčéé×#éÕ-é1é×=éÕGéKé×XéÕbéÕoé„éÕŽéžéÕ¨éšéÕÃéÕĖéÖéåééé×úéÕęÕęę×#ęÕ-ęÕ3ę×DęHę×TęÕ^ęÕdęuęyę׊ęÕ”ę˜ęפęÕŽę˛ę×ŋęÕÉęÕÖęëęÕõęëÕë ëÕ*ëÕ3ë=ëLëPë×aëÕkëÕuëyëאëÕ–ë×§ëĢëסëÕÁëÕĮëØëÜë×íëÕ÷ëûë×ėÕėė×"ėÕ,ėÕ9ėNėÕXėhėÕrėƒėՍėÕ–ė ė¯ėŗė×ÄėÕÎėÕØėÜė×íėÕ÷ėÕũė×íí×íÕ(íÕ.í?íCí×TíÕ^íbí×níÕxí|í׉íÕ“íÕ íĩíÕŋíĪíÕŲíęíÕôíÕũíîîî×+îÕ5îÕ?îCî×ZîÕ`î×qîuîׁîÕ‹îÕ‘îĸîĻîסîÕÁîÅî×ŅîÕÛîßî×ėîÕöîÕī"ī<ī]īgīvīzī׋īÕ•ī™ī×ĻīÕ°ī´ī×ÁīÕËīÕÕīŲī×ęīÕôī đÕđđ×%đÕ/đÕ5đIđZđođÕyđŠđՐđœđĻđ°đēđÄđÎđØđâđėđöđņ ņņđ5ņŲBņŲVņđZņ×kņÕuņÕ{ņ׌ņđ ņÕĢņđ¯ņ×ģņÕÅņÕĪņđäņÕęņđõņ×ōÕ ōÕōđō×(ōÕ2ōÕ<ōđPōÕZōÕaōđmōđ~ōđ‚ōדō՝ōÕ§ōđŧōÕÂōđŅōđæōÕđōđķÕ ķđķ×"ķÕ,ķÕ6ķđKķÕQķđ\ķđkķđoķ×€ķÕŠķđŽķןķÕĒķđŽķ×ģķÕÅķÕËķđãķđøķÕôđôÕ#ôÕ/ôđDôÕNôđcôÕnôđôÕ‰ôՏôđŖôđ­ôđŧôđŅôÕÛôđëôÕõôđõÕõÕõđ<õđVõđwõđõđ•õĨõŲĩõŲįõüõ öÕöÕ!ö2öÕ<öÕIö^öoöÕyöÕƒö”öÕžöÕĢö¯ö×ĀöÕĘöÕÔöØö×éöÕķöÕųö× ÷÷×÷Õ$÷Õ*÷;÷?÷×P÷ÕZ÷^÷×j÷Õt÷x÷×…÷Տ÷Õœ÷ģ÷Õ÷ö÷øøø×$øÕ.ø2ø×?øÕIøMø×ZøÕdøÕnørø×ƒøÕøĸøÕ­øąø×žøÕČøÕÎøâøķø÷ø×ųÕų'ųÕ2ų6ų×CųÕMųÕSųkų€ųÕŠųŸųÕĒųģųÕÅųÕËųãųøųÕúúÕ"ú3úÕ=úÕCú[úpúÕzú‹úÕ‘úĄúļúÕĀúÄú×ÕúÕāúäú×ņúÕûúÕûûû)û3û=ûGûQû[ûeûoûyûƒû¤ûŲŽûŲÅûÕûŲåûŲü,ü=üÕGüÕQübüÕlüÕyü}ü׎ü’ü×ĻüÕ°üČüÕÕüŲü×ęüÕôüÕūüũ×ũÕũÕ#ũ×4ũ8ũ×DũÕNũÕTũeũiũ×zũÕ„ũˆũ×”ũÕžũĸũׯũÕšũÕÆũÛũÕåũõũÕ˙ũūÕūÕ#ū-ū<ū@ū×QūÕ[ūÕeūiū×zūÕ„ūÕŠū×›ūŸū×ĢūÕĩūÕģūĖūĐū×áūÕëūīū×ûūÕ˙ ˙×˙Õ ˙Õ-˙L˙f˙‡˙‘˙ ˙¤˙×ĩ˙Õŋ˙Ã˙×Đ˙ÕÚ˙Ū˙×ë˙Õõ˙Õ˙˙×Õ3Õ>B×OÕYÕ_s„™ÕŖ´ÕēÆĐÚäîø  AŲKŲbrŲ‚Ų´ÉÚÕäÕî˙Õ Õ×+/×CÕMeÕrvׇՑ՛Ÿ×°ÕēÕĀ×ŅÕ×áÕëÕņ×Õ!%×1Õ;?×LÕVÕcxÕ‚’Õœ­ÕˇÕĀĘŲŨ×îÕøÕ×Õ!Õ'×8<×HÕRÕXim×~ÕˆŒ×˜ÕĸĻ×ŗÕŊÕĘé$.=A×RÕ\`×mÕw{׈Ւ՜ ×ąÕģĐÕÛß×ėÕöÕü!6Õ@QÕWcmw‹•ŸŠŗŊ×ŲøōŲŲ!Ų1ŲAŲQ×uŲ†Ų›ōŸ×°ÕēÕÄōČ×ŲÕãōôÕōÕō0Õ<ōMÕWÕ]ōwōŒÕ—ō¨ÕļōËōÜÕæÕđō Õ Õ ō ×- Õ7 ÕA ōE ×V Õ\ ōg ōk ×| Õ† Ր ō” ×Ģ Õą ōĀ ōÄ ×Û Õá ōđ ō Õ ō ×( Õ2 Õ< ō@ ×P ÕV ōa ōq Õ{ ō’ Õœ ÕŠ ōž ÕÄ ōË ōÕ ōÛ ōæ ōę ×û Õ Õ ō × Õ) Õ/ ×9 ÕF ōJ ×[ Õe Õk ōz ō~ ׏ Õ™ ÕŖ ō§ ׸ Õž ōÉ ōÍ ×Ū Õč Õō ōö × Õ ō" ō& ×= ÕC ōR ōi Õu ōy ׊ Õ” Õž ōĸ ײ Õ¸ ōà ōĶ ÕŨ ōô Õū Õ ō Õ& ō- ō7 ō= ōH ōL ×] Õg Õq ōu ׁ Õ‹ Õ‘ ×› Õ¨ ōŦ ×Ŋ ÕĮ ÕÍ ōÜ ōņ ōÕ Õō'Õ1Õ>ōB×SÕ]Õgōk×|ՆՌםōĄ×­ÕˇÕŊōÎōŌ×ãÕíōņ×ũÕō ×Õ"Õ/ōDÕNō^ÕhōyÕƒÕŒō–ōĨōŠ×ēÕÄōČ×ÕÕßōã×đÕúÕō×Õ#ō8ÕCōG×TÕ^Õdōxō‰ō×žÕ¨ōŊÕČōĖ×ŲÕãÕéōō×Õ!ō6ÕAōE×RÕ\Õbō{ōא՚ōž×¯ÕšōŊ×ÍÕ×ōÛ×ėÕ÷ōû×ÕÕō1ōAÕGōSōnÕxō“ÕžōĩÕÁōÅ×ŌÕØōäōč×ųÕō×Õ"ō&×6Õ@ōD×UÕ`ōd×qÕ{ՁōšōĒÕ°ōŧō×Õáōå×üÕōÕ*ō;ÕAōMōbÕlō}Õƒō“ō¨Õ˛ōļ×ĮÕŌōÖ×ãÕíÕķō ō!Õ+ō@ÕKō\ÕfÕlōō‹ō•ōŸōŠōŗōŊōĮōŅōÛōåōīōõōüōō%Ų5ŲEŲUŲeŲ ô¯ŲšŲÉŲŲŲéŲų×Ų.ŲCôG×XÕbÕlôpׁՋô ÕĢô¯×ŧÕČôĖ×ŨÕįôüÕô ×Õ$ô(×5Õ?ÕE×[ô_×pÕ{ô׌՚ô¯ôĀÕĘÕÔôåÕīÕüô×ÕÕ%ô)×:Õ@ôKôO×`ÕjÕtôx׏Օô¤ô¨×ŋÕÅôÔôëÕ÷ôû× ÕÕ ô$×4Õ:ôEôUÕ_ôvՀՍôĸÕ¨ô¯ôšôŋôĘôÎ×ßÕéÕķô÷×Õ Õ×Õ*ô.×?ÕIÕOô^ôb×sÕ}Õ‡ô‹×œÕĸô­ôą×ÂÕĖÕÖôÚ×ņÕ÷ôô ×!Õ'ô6ôMÕYô]×nÕxÕ‚ô†×–Õœô§ôˇÕÁôØÕâÕīôÕ ôôô!ô,ô0×AÕKÕUôY×eÕoÕu×ÕŒô×ĄÕĢÕąôĀôÕôæÕđÕúô ÕÕ"ô&×7ÕAÕKôO×`ÕjÕpׁô…×‘Õ›ÕĄô˛ôļ×ĮÕŅôÕ×áÕëôī×üÕÕô(Õ2ôBÕLô]ÕgÕpôzô‰ô×žÕ¨ôŦךÕÃôĮ×ÔÕŪÕčôė×ũÕ ô Õ' ô+ ×8 ÕB ÕH ô\ ôm ôq ׂ ÕŒ ôĄ ÕŦ ô° ×Ŋ ÕĮ ÕÍ ôæ ôę ×û Õ!ô!Õ%!ô)!×6!Õ@!ÕF!ô_!ôc!×t!Õ~!ô‚!ד!՝!ôĄ!׹!Õģ!ôŋ!×Đ!ÕÛ!ôß!×ė!Õö!Õü!ô"ô%"Õ+"ô7"ôR"Õ\"ôw"Õ‚"ô™"ÕĨ"ôŠ"×ļ"Õŧ"ôČ"ôĖ"×Ũ"Õį"ôë"×ü"Õ#ô #×#Õ$#ô(#×9#ÕD#ôH#×U#Õ_#Õe#ô~#ôŽ#Õ”#ô #ôģ#ÕÅ#ôÉ#×ā#Õë#ô$Õ$ô$Õ%$ô1$ôF$ÕP$ôa$Õg$ôw$ôŒ$Õ–$ôš$×Ģ$Õļ$ôē$×Į$ÕŅ$Õ×$ôđ$ô%Õ%ô$%Õ/%ô@%ÕJ%ÕP%ôe%ôo%ôy%ôƒ%ô%ô—%ôĄ%ôĢ%ôĩ%ôŋ%ôÉ%ôĶ%ôŲ%ôā%ôę%ôų% &Ų&Ų)&Ų9&ŲI&c&Ųm&Ųy&ŲŒ&ؐ&öą&öÆ&ÕÍ&×Û&Õå&öü&] 'ö'ö-'Õ9'öD'öN'öX'öb'öl'öw'ö'ö›'ŲĨ'Ųą'ŲÄ'ŲČ'øé'øū'Õ(×(Õ(ø2(Õ>(øM(øb(Õn(øy(øƒ(ø(ø—(øĄ(ø°(øÅ(ÕĪ(øę(Õô(Õū(ø)Õ)Õ)ø,)ø<)ÕF)ÕP)øT)×`)Õj)øn)×z)Õ„)øˆ)ו)ÕŸ)ø´)Õŋ)øÃ)×Đ)ÕÚ)Õā)øū)ø*Õ*ø/*Õ9*Õ?*øM*øc*Õm*Õw*ø*Õ—*՝*øą*øĐ*øë*Õõ*Õ˙*ø+Õ+Õ+ø-+ø=+ÕO+ø_+Õi+øy+Õƒ+ø”+Õž+øŗ+Õž+øĪ+ÕŲ+Õß+øũ+ø,ø.,Õ<,øJ,ø`,Õj,Õt,øŠ,Õ”,Õš,øĒ,ø´,øÃ,úÚ,Ųę,Ų-×"-Ų--Õ7-ú;-×L-ÕV-Õ]-úk-Ųv-Õ|-ׂ-Ų-Ųš-Õ¤-ú¨-ׯ-úč-úũ-Õ.Õ .ú.Õ#.ú3.úH.ÕT.úc.úx.Õ„.ú“.ú¨.Õ˛.Õ¸.úĮ.úÜ.Õč.ú÷.ú /Õ/ú'/úÕ>Õ>#>7>ÕA>ÕG>V>j>Õt>Õz>‰>>Õ¨>Ŧ>×ŧ>ÕÆ>ÕĐ>å>Õī>?Õ ??Õ$?3?7?×G?ÕQ?U?×f?Õq?u?ׂ?ÕŒ?Õ’?Ē?Ž?מ?ÕČ?Ũ?Õč?ė?×ų?Õ@Õ @!@5@Õ?@ÕE@T@h@Õr@‡@Õ’@Ŗ@Õ­@Õŗ@Ë@ß@Õé@ū@Õ AAÕ$AÕ,A6AEAIA×YAÕcAÕiAsA}A‡A–AšA×ĒAÕ´AÕēAÄAĶAįAÕņAÕ÷AB B×BÕ$BÕ*B9B=B×MBÕ]BrBÕ|BBÕ—B¨BÕąBĀBÄB×ÔBÕŪBâB×ķBÕūBCÕCÕC7CKCÕUCjCÕuC†CՐCÕ–CĒC´CžCÉCØCđCÕDD,DŲ5DŲZD×dDŲnDÕxDŽD]™DÕŸDŽD˛D×ÄD]ĪDÕÕDäDúD]EÕ EE.EÕ8EÕ>EMEQE×cE]nEÕtEƒE‡E×—EÕ§EŧEÕÆE×EÕáEōEÕûE FF×FÕ(F,F×=FÕHFYFÕcFÕiFFŸFŋFĐFÕÚFÕāFôFGG&G5GaGŽGŲ¨GŲŦGÖGÚG×ëGÕõG HÕHH×&HÕ0HÕ6HJHgHŲqHŲ€HŲ„HĨHŠH×ēHÕÄHČH×ÕHÕßHÕéHíH×ūHÕIIÕ(I,I×9IÕCIÕII]ImIqIׂIÕŒIIםIÕ§IÕąIĩIׯIÕĐIåIÕđIôI×JÕ JÕJ%J5J9J×JJÕTJiJÕtJxJ×…JՏJÕ•J­JąJ×ÂJÕĖJĐJ×áJÕėJđJ×ũJÕKÕ K%K)K×:KÕ@KOKSK×dKÕjKyKŽKÕ˜KœK×­KÕ¸KŧK×ÉKÕĶKÕŲKņKLÕL%LÕ0LALÕKLÕQLeLoLyLąLŲģLŲĘLŲÎLīL MÕM1MÕ;MLMÕRM\MmMqMׂMÕŒMMםMÕ§MŊMÕĮMÕÍMÛMņMÕûMÕNNÕ%NÕ+N?NTNÕ^NoNÕyNNÕ™NÕŸN­NÃNÕÍNÕ×NíNÕ÷NÕũNOO×&OÕ0O4O×AOÕKOÕUOYO×jOÕtO‰OÕ”O˜O×ĨOÕ¯OÕĩOÉOŲOŨO×îOÕøO PÕPP×)PÕ3PÕ9PQPfPÕpPPÕ‹PĄPÕĢPÕąPŋPÕPÕßPÕéP˙PÕ QÕQ#Q8QÕBQSQÕ]QsQÕ}QÕƒQ‘Q§QÕąQÕģQŅQÕÛQÕáQõQųQ× RÕRR4RÕ>RBR×SRÕ^RbR×oRÕyRÕR“RR§RļRŲēR×RáR7SŲASŲPSŲTSuSSÕšSˇSÕÁSÅS×ŌSÕÜSíSÕķSũST*TÕ4TQTÕ[T_T×lTÕvT‡TՍTŸTŖT×´TÕžTÂT×ĪTÕŲTÕåTéT×úTÕUU×UÕUÕ)U-U×>UÕHU\UÕbUqUuU×…UՏU¤UÕ¯UŗU×ĀUÕĘUÕĐUčUøUÕVVÕ"V3VÕ=VÕCVXVhVlV×}VÕ‡V˜VÕžV¨V¸VŧV×ÍVÕĶV×áVÕëVWÕ WWÕ%WÕ1WFWÕPWaWÕsW„WՐWĨWÕ¯WĀWÕĘWāWÕęWÕđWūWXÕXÕ(X>XÕHXÕNXbXsXÕ}XŽXÕ˜XŽXÕ¸XÕžXĖXâXÕėXÕöX YÕYÕY1YFYÕPYaYÕkYYÕ‹YÕ‘YŸYĩYÕŋYÕÉYßYÕéYÕīYZZÕ"Z3ZÕ=ZSZÕ]ZÕcZqZ‡ZÕ‘ZÕ›ZąZÕģZÕÁZÕZęZÕôZ[Õ[%[Õ/[Õ5[C[Y[Õc[Õm[ƒ[Ս[Õ“[§[Ģ[×ŧ[ÕÆ[Û[Õâ[×đ[Õú[\Õ\*\?\ÕK\V\`\j\t\~\‰\˜\œ\×­\Õˇ\ģ\×Į\ÕŅ\Õ\׿\Õņ\õ\×]Õ ]Õ]+]@]ÕJ]Z]Õd]y]Õ„]•]ÕŸ]ÕĨ]ž]Ķ]ÕŨ]î]Õø]^Õ^Õ^,^B^ÕL^ÕV^l^Õv^Õ|^^Ĩ^Õ¯^Ā^ÕĘ^ā^Õę^Õđ^ū^_Õ_Õ(_>_ÕH_ÕN_b_w_Ձ_’_Õœ_˛_Õŧ_ÕÂ_Đ_æ_Õđ_Õú_`Õ`Õ `4`I`ÕO`^`s`Õ~`“`՝`Ž`Õ¸`ÕĀ`Æ`Đ`Ö`ā`æ`ė`ō`ü`aŲ a(a2aLaŲVaŲeaŲiaŠaŸaÕĨa¯ažaÂa×ĶaÕŲa×ãaÕíabÕbb2bÕ>bIbSb]bgbqb}b‡bbœbŲ bŊbĮbábŲëbŲøbŲcŲcŲ$cŲ(cmcqcׂcÕŒcÕ—c›c×ŦcÕļcēc×ËcÕŅc×ÛcÕåcúcÕdd*dÕ6dAdKdUd_didydŽdÕ˜dŠdÕŗdÃdÕĐdádÕëdüdÕeeÕ$e9eÕCeTeÕ^eneÕ{eeאeÕšeže×ĢeÕĩeše×ÅeÕŌeįeÕņefÕ f"fÕ,fÕ2f@fVfÕ`fÕjf€fÕŠfՐf¤fšfÕÃfÔfÕŪfôfÕūfÕgg(gÕ2gÕy By×UyÕ_yÕiyÕsy wyׄyÕŽyÕ˜yÕžyרyÕ˛y ļy×ÂyÕĖyÕÖyÕāy äy×đyÕúyÕzÕz z×zÕ)zÕ3zÕ=z Az×NzÕXzÕbzÕhz×rzÕ|z €z׍zÕ—zÕĄzÕ§z׹zÕˇz Đz Ôz×ëzÕõzÕ˙zÕ {  {× {Õ*{Õ4{Õ>{ B{×O{ÕY{Õc{Õi{×s{Õ}{ {׍{Õ—{ÕĄ{ÕĢ{ ¯{×ģ{ÕÅ{ÕĪ{ÕŲ{ Ũ{×ę{Õô{Õū{Õ|  |×|Õ#|Õ-|Õ3|×=|ÕG| K|×X|Õb|Õl|Õr|×||Õ‚| ›| Ŧ|Õļ|ÕĀ|ÕÆ| Ô| ä|Õî|Õø|Õ} }Õ}Õ&}Õ,} P}Ų|}Ų}ą}Ųž}ŲÉ}ÕĶ}×}×č}Õō}Õü}~Õ~Õ%~Õ/~?~ÕI~ÕS~Õ[~j~~Õ‰~Õ”~˜~×Ĩ~Õ¯~Õš~Î~ÕØ~Õâ~Õė~ü~ÕÕÕ8ŲEŲRŲaŲŲĨŲ¸ ĖŲŲŲäÕú×€Ų€Õ€ .€Õ8€ÕB€ÕL€ \€Õf€Õp€Õ|€ €€×€Õ—€ÕĄ€ÕĢ€ ¯€×ŧ€ÕƀÕЀÕڀ Ū€×ë€Õõ€Õ˙€Õ×Õ ×*Õ4Õ>ÕD×NÕT e oŲ|Ų‡ÕŲ˜ÕžŲЁÕŗ ˇ×ʁĶā×ęÕô ‚ )‚Ķ=‚ A‚×X‚Õc‚ g‚×x‚Õ„‚׎‚ ž‚ÕŽ‚ ž‚ÕȂÕԂ æ‚ û‚ÕƒÕƒÕƒ )ƒÕ3ƒÕ=ƒÕIƒ Mƒ×dƒÕnƒÕxƒÕ‚ƒ †ƒ×™ƒÕŖƒÕ­ƒÕˇƒ ģƒ×ȃÕԃÕ܃Õâƒ×ėƒÕöƒ úƒ×„Õ„Õ„Õ$„ („×4„Õ>„ÕH„ÕR„ V„×c„Õm„Õw„Ձ„ …„×’„Õœ„ÕĻ„ÕŦ„×ļ„ÕĀ„ Ą×Ņ„ÕۄÕå„Õë„×õ„Õû„ … …×/…Õ9…ÕC…ÕM… Q…×d…Õn…Õx…Õ‚… †…ד…՝…Õ§…Õ­…ס…ÕÁ… Ņ×Ņ…ÕۅÕå…Õī… ķ…×˙…Õ †Õ†Õ† !†×.†Õ8†ÕB†ÕL† P†×]†Õg†Õq†Õw†×†Õ‹† †×œ†ÕφÕ°†Õļ†×†ÕƆ ߆ đ†Õú†Õ‡Õ ‡ ‡ (‡Õ2‡Õ<‡ÕF‡ V‡Õ`‡Õj‡Õp‡ ”‡Ųž‡Ų̇ŲŌ‡Ų܇Ųé‡ŲˆŲ*ˆŲKˆ_ˆŲgˆÕmˆ×wˆŲ„ˆŽˆψŽąˆĈŽ͈×ۈÕčˆėˆ×ũˆÕ‰Õ‰Õ‰"‰&‰×7‰ÕA‰ÕK‰ÕU‰Y‰×j‰Õt‰Õ~‰Õˆ‰Œ‰×‰Õ¤‰¯‰ē‰ž‰×ΉÕŲ‰Õã‰Õí‰ņ‰×ŠÕ ŠÕŠÕ Š5ŠÕ?ŠTŠÕ_ŠpŠÕzŠÕ€Š˜Š­ŠÕˇŠˊÕ׊čŠÕōŠÕøŠ ‹‹‹'‹B‹ÕM‹Q‹×b‹Õl‹p‹×‹Õ‹‹Õ‘‹ ‹¤‹×ĩ‹Õŋ‹Ë×ԋÕߋã‹×đ‹Õú‹ÕŒŒ-ŒÕ7ŒLŒÕWŒhŒÕrŒÕxŒŒŒ—ŒŦŒÕļŒĮŒÕҌÕ،ãŒōŒöŒ×ÕÕ×,Õ6Õ@D×QÕ[ÕezÕ„ÕŽÕ˜¨Õ˛ÕŧÕčՍŲ×ęÕô ŽÕŽŽ×%ŽÕ/ŽÕ5ŽMŽQŽ×bŽÕlށŽÕŒŽŽ×ŽÕ§ŽÕ­ŽŎڎÕäŽųŽÕÕÕ%=RÕ\qÕ|Õ—ÕąģŏĪŲåųŲũÕ(,×9ÕCÕMbÕlÕvÕ€ÕšÕ¤ÕŦŧŲęî×ûÕ‘Õ‘‘× ‘Õ*‘Õ4‘I‘ÕS‘Õ]‘Õg‘w‘Ձ‘Õ‹‘Õ“‘¤‘Ų¨‘Α×ܑÕæ‘Õđ‘ô‘×’Õ ’Õ’’×&’Õ0’Õ:’>’×K’ÕU’Õ_’t’Õ~’Õˆ’Õ’’ĸ’ÕŦ’Õļ’Õž’Ė’ķ’Ų“Ų>“ŲH“ŲZ“Ų^“ˆ“Œ“ם“ÕŖ“Ž“ÓÕ͓Õؓí“Õ÷“Õ””×”Õ”×'”Õ1”F”ÕR”a”v”Õ‚””—”Ą”Ģ”ĩ”Ŕɔ×ā”Õę”î”×÷”ווՕ/•Õ;•J•_•Õk•v•€•Š•”•ž•°•´•×ŕÕΕ͕×ä•Õę•×ô•Õū•–Õ–.–C–ÕO–Z–d–n–x–‚–’–§–Õą––ÕĖ–ܖÕé–ú–Õ——Õ—/—Õ=—R—Õ\—m—Õw—‡—Õ”—˜—׊—Õŗ—ˇ—×ėÕΗŌ—×Ū—Õë—˜Õ ˜˜Õ%˜5˜ÕB˜W˜Õa˜r˜Õ|˜˜Õ—˜§˜Õĩ˜ʘÕԘÕߘô˜Õū˜Õ ™™Õ)™>™ÕH™ÕS™W™×h™Õr™v™×ƒ™×’™×œ™ÕĻ™ģ™ÕĮ™֙ë™Õ÷™š šš š*š;šLšÕVšgšÕqššÕš¤šÕ¯šĚÕΚۚÕčšũšÕ››Õ#›Õ)›B›W›Õa›r›Õ|›Õˆ›Œ›×›ÕŖ›˛›Į›ÕŌ›į›Õņ›œÕ œ"œÕ,œÕ2œ@œVœÕ`œÕjœ€œÕŠœÕœ¤œšœÕÜԜÕۜôœÕūœÕ(Õ2Õ<RÕ\Õbv‹Õ•ĻÕ°ƝÕНÕ֝äúÕžÕž$žÕ.žÕ4žDžNžXžbžlžvž€ž†žŒž’ž¨žŲˇžŲģžܞāž×ņžÕ÷ž×ŸÕ Ÿ ŸÕ,Ÿ;ŸPŸÕ\ŸgŸqŸ{Ÿ…ŸŸ›ŸĨŸ¯ŸšŸßɟ؟ŲܟėŸ×üŸ    ! 5 ; E P b r ×| Ų‡ Õ Ųš ŲĢ Ųŋ Ö Aá ô AĄĄÕ ĄÕ&Ą5Ą9Ą×JĄÕTĄÕ^ĄrĄÕ|Ą‘ĄÕœĄ­ĄÕˇĄÕŊĄŅĄץâĄ×đĄÕúĄūĄ×ĸÕĸĸ×+ĸÕ5ĸÕ;ĸSĸhĸÕnĸ|ĸÕ†ĸ—ĸÕĄĸ˛ĸÕĀĸÕĸÕßĸÕåĸëĸúĸŖÕŖ*ŖÕ4ŖDŖÕNŖ_ŖÕmŖqŖ×‚ŖÕŒŖÕ’Ŗ˜Ŗ§ŖĢŖ×ŧŖÕÆŖÕĐŖÔŖ×āŖÕęŖÕôŖøŖ×¤Õ¤Õ¤%¤)¤×:¤ÕD¤H¤×T¤Õ^¤b¤×s¤Õ~¤‚¤×¤Õ™¤ÕŸ¤¸¤ŧ¤×ͤÕפÛ¤×į¤Õņ¤ĨÕĨĨ×"ĨÕ,ĨÕ2ĨKĨOĨ×`ĨÕjĨĨÕŠĨŽĨ×›ĨÕĨĨÕĢĨÃĨĮĨרĨÕâĨæĨ×ōĨÕüĨĻÕĻ Ļ×-ĻÕ7ĻÕ=ĻVĻZĻ×kĻÕuĻŠĻÕ•Ļ™Ļ×ĻĻÕ°ĻÕļĻÎĻŌĻ×ãĻÕíĻūĻÕ§§Õ&§*§×;§ÕE§I§×U§Õ_§t§Õ§ƒ§×§Õš§Õ §š§ΧÕاé§Õņ§×˙§Õ ¨ ¨×¨Õ#¨'¨×8¨ÕC¨G¨×T¨Õ^¨Õd¨}¨¨×’¨Õœ¨ą¨Õŧ¨×ͨÕרÕŨ¨÷¨û¨× ŠÕŠŠ×&ŠÕ0Š4Š×EŠÕPŠaŠÕkŠÕqŠŠŠŽŠ×ŸŠÕŠŠÕŗŠĮŠÕŅŠæŠÕņŠĒÕ ĒÕĒ&Ē,Ē;ĒPĒÕZĒkĒÕuĒ…ĒÕĒ ĒÕŽĒ˛Ē×ÃĒÕÍĒÕ×ĒëĒÕõĒ ĢÕĢ&ĢÕ0ĢÕ6ĢJĢPĢ_ĢcĢ×tĢÕ~Ģ‚Ģ׎ĢÕ˜ĢœĢ×­ĢÕ¸ĢŧĢ×ÉĢÕĶĢÕŲĢōĢöĢ×ŦÕŦŦ×!ŦÕ+Ŧ@ŦÕKŦOŦ×\ŦÕfŦÕlŦ…Ŧ‰ŦךŦÕ¤ŦšŦÕÄŦČŦ×ÕŦÕßŦÕåŦũŦ­×­Õ­ ­×,­Õ6­K­ÕV­Z­×g­Õq­Õw­­Ĩ­Õ¯­Ä­ÕĪ­ā­Õę­Õö­ ŽÕŽ*ŽÕ5ŽFŽÕPŽÕVŽnŽƒŽÕŽŽÕ§ŽŧŽÕĮŽØŽÕâŽÕčŽ¯¯Õ ¯5¯Õ@¯Q¯Õ[¯Õa¯y¯ޝÕ˜¯¨¯Õ˛¯Į¯ÕŌ¯ã¯Õí¯Õķ¯ °!°Õ+°;°ÕE°Z°Õe°v°Õ€°Õ†°Ÿ°´°Õž°ΰÕذí°Õø° ąÕąÕą2ąGąÕQąaąÕką€ąÕ‹ąœąÕĻąÕŦąÅąÚąÕäąųąÕ˛˛Õ˛Õ%˛=˛R˛Õ\˛l˛Õv˛‹˛Õ–˛§˛Õą˛Õˇ˛вå˛Õպ ŗÕ*ŗÕ6ŗKŗÕUŗeŗÕoŗ„ŗÕŗ ŗÕĒŗÕ°ŗĘŗßŗÕéŗųŗÕ´´Õ#´4´Õ>´ÕD´Y´k´Õu´Š´Õ•´Ļ´Õ°´Õļ´Ę´Ü´Õæ´ö´ÕĩĩÕ ĩ1ĩÕ;ĩÕAĩVĩhĩÕrĩ‡ĩÕ’ĩŖĩÕ­ĩÕŗĩĮĩÍĩĶĩŨĩãĩíĩķĩũĩļļļļ'ļ-ļ7ļ=ļDļSļgļxļ‡ļœļÕŖļ˛ļÆļ×ļæļûļÕˇˇ*ˇŲ>ˇOˇZˇiˇyˇŲˆˇ’ˇŲœˇÕώˇˇÆˇÛˇÕåˇöˇÕūˇ ¸Ų¸!¸×2¸Õ<¸ÕB¸M¸W¸a¸k¸z¸‹¸–¸ ¸ʸŲ׸Ųä¸Ųķ¸ŲššŲ(š×2šŲCšŲNšÕXštšÕ~šÕ„š“š¨šÕ˛šÕšš×ÚŲΚÕØšíšÕķšēēÕ!ē6ēÕAēRēÕ\ēÕbē{ēēÕšē¯ēÕēēËēÕÕēÕÛēôē ģÕģ(ģÕ3ģDģÕNģÕTģmģ‚ģÕŒģĄģÕŦģŊģÕĮģÕÍģæģûģÕŧŧÕ%ŧ6ŧÕ@ŧÕFŧ_ŧtŧÕ~ŧ“ŧÕžŧ¯ŧÕšŧÕŋŧØŧíŧÕ÷ŧ ŊÕŊ(ŊÕ2ŊÕ8ŊQŊfŊÕpŊ…ŊՐŊĄŊÕĢŊÕąŊÆŊĐŊÚŊāŊęŊôŊūŊžžž+ž@žÕJžÕUžYž×jžÕtžÕ~ž“žÕžŽžÕ¸žÉžÕŌžážåž×öžÕŋŋ×ŋÕ ŋ1ŋÕ;ŋÕAŋYŋnŋÕxŋÕƒŋ‡ŋטŋÕžŋ×ŧŋÕÆŋÛŋÕåŋÕīŋÕõŋĀ×ĀÕĀĀ×-ĀÕ7ĀÕAĀVĀÕ`ĀqĀÕ{ĀŒĀՕ¤ĀךĀÕÃĀĮĀרĀÕãĀįĀ×ôĀÕūĀÕÁÁ2ÁÕ<ÁQÁÕ\ÁmÁÕwÁÕ}Á’ÁœÁĻÁ°ÁēÁÄÁÎÁØÁįÁëÁ×üÁÕÂÂÂ×&ÂÕ6ÂKÂÕUÂfÂÕpÂՊ™Â׎ÂÕ¸ÂŧÂ×ÍÂÕØÂéÂÕķÂÕųÂÃ&ÃÕ0ÃEÃÕPÃaÃÕkÃÕqÊßÃՊÚÃÕÃÃÔÃÕŪÃÕëÃÄÕ ÄÕÄ%Ä)Ä×5ÄÕ?ÄÕIÄMÄ×^ÄÕeÄvÄ‹ÄÕ•ÄĨÄÕ¯ÄĀÄÕĘÄÕĶÄŨÄįÄņÄûÄ Å ÅÕ*ÅÕ5ÅJÅÕTÅÕZÅiÅ~ÅÕˆÅՓŨÅÕ˛ÅĮÅÕŌÅãÅÕíÅÕķÅÆÆÆ&Æ0Æ:ÆDÆNÆXÆbÆlÆvƁƋƕƤƸÆŲÅÆŲÕÆ×߯ŲđÆ×úÆŲĮÕĮ+ĮÕ5ĮÕ;ĮJĮ_ĮÕiĮ~ĮÕ‰ĮšĮÕ¤ĮÕĒĮÃĮØĮÕâĮ÷ĮÕČČÕČÕ#Č<ČQČÕ[ČpČÕ{ČŒČÕ–ČÕœČĩČĘČÕÔČéČÕôČÉÕÉÕÉ.ÉCÉÕMÉbÉÕmÉ~ÉÕˆÉՎɧÉŧÉÕÆÉÛÉÕæÉ÷ÉÕĘÕĘ Ę5ĘÕ?ĘTĘÕ_ĘpĘÕzĘÕ€Ę™ĘŽĘÕ¸ĘÍĘÕØĘéĘÕķĘÕųĘËË"Ë(Ë2Ë<ËFËPËZËdËoËzˉ˝ËŲĒË×´ËŲÅË×ĪËŲÚËÕäËųËÕĖĖÕ#Ė4ĖÕ>ĖÕDĖ]ĖrĖÕ|Ė‘ĖÕœĖ­ĖÕˇĖÕŊĖÖĖëĖÕõĖ ÍÕÍ&ÍÕ0ÍÕ6ÍOÍdÍÕn̓ÍÕŽÍŸÍÕŠÍÕ¯ÍČÍŨÍÕįÍüÍÕÎÎÕ"ÎÕ(ÎAÎVÎÕ`ÎuÎՀΑÎÕ›ÎÕĄÎēÎĪÎÕŲÎîÎÕųÎ ĪÕĪÕĪ3ĪHĪÕRĪgĪÕrĪƒĪՍĪՓ΍ΞĪŧĪÆĪĖĪÖĪāĪęĪôĪūĪĐĐ,ĐÕ6ĐÕ=ĐHĐbĐŲlĐŲ{ĐŲРФĐ×ĩĐÕŋĐÃĐ×ĐĐÕÚĐīĐÕųĐŅÕŅ*ŅÕ4ŅÕ:ŅRŅgŅÕq҆ŅÕ‘ŅĸŅÕŦŅÕ˛ŅĘŅßŅÕéŅūŅÕ ŌŌÕ$ŌÕ*ŌBŌWŌÕaŌvŌՁԒŌÕœŌÕĸŌēŌĪŌÕŲŌîŌÕųŌ ĶÕĶÕĶ2ĶGĶÕQĶfĶÕqĶ‚ĶÕŒĶÕ’ĶĒĶŋĶÕÉĶŪĶÕéĶúĶÕÔÕ ÔÔ(Ô.Ô8ÔBÔLÔVÔ`ÔlÔ{ÔŲÔ Ô¤Ô×ĩÔÕŋÔÃÔ×ĐÔÕÚÔīÔÕųÔÕÕÕ*ÕÕ4ÕÕ:ÕRÕgÕÕqÕ†ÕÕ‘ÕĸÕÕŦÕÕ˛ÕĘÕßÕÕéÕūÕÕ ÖÖÕ$ÖÕ*ÖBÖWÖÕaÖvÖՁ֒ÖÕœÖÕĸÖēÖĪÖÕŲÖîÖÕųÖ ×Õ×Õ×2×G×ÕQ×f×Õqׂ×ÕŒ×Õ’×Ē×ŋ×ÕÉ×Ū×Õé×ú×ÕØÕ ØØ(Ø.Ø8ØBØLØVØ`ØlØ{ØŲؠؤØ×ĩØÕŋØÃØ×ĐØÕÚØŪØ×ëØÕõØ ŲÕŲ)ŲÕ4ŲEŲÕOŲÕUŲmŲ‚ŲÕŒŲĄŲÕŦŲŊŲÕĮŲÕÍŲåŲúŲÕÚÚÕ$Ú5ÚÕ?ÚÕEÚ]ÚrÚÕ|Ú‘Ú՜ڭÚÕˇÚÕŊÚÕÚęÚÕôÚ ÛÕÛ%ÛÕ/ÛÕ5ÛMÛbÛÕlہÛՌ۝ÛÕ§ÛÕ­ÛÅÛÚÛÕäÛųÛÕÜÜÕÜÕ%Ü9ÜCÜIÜSÜ]ÜgÜqÜ{ÜˆÜ’ÜĄÜŲĨÜÆÜĘÜ×ÛÜÕåÜéÜ×öÜÕŨŨ×ŨÕŨ0ŨÕ:ŨOŨÕZŨkŨÕuŨÕ{Ũ“Ũ¨ŨÕ˛ŨĮŨÕŌŨãŨÕíŨÕķŨ Ū ŪÕ*Ū?ŪÕJŪ[ŪÕeŪÕkŪƒŪ˜ŪÕĸŪˇŪÕÂŪĶŪÕŨŪÕãŪûŪßÕß/ßÕ:ßKßÕUßÕ[ßs߈ßÕ’ß§ßÕ˛ßÃßÕÍßÕĶßëßāÕ āāÕ*ā;āÕEāÕKā_āiāoāyāƒāā—āĄāŽā¸āŌāŲŪāŲņāŲõāá×&á7áFáeá…á–áÕ áÕĻáēáĀáËáÚáŲŪáââ×4âÕ:âJâZâŲjâŲzâŲŠâŲšâŲŽâŋâÎâŌâ×ßâÕéâíâ×úâÕããŲ(ã×2ãŲ?ãŲOãŲZãÕdãhã×|ã׏ã“ã×Ĩãp°ãÕļã×ĮãËã×ŲãpäãÕęãûã˙ã×äÕäÕä×0ä4ä×@äÕJäÕPäaäeä×uäÕäÕ…ä×–äšä×ĻäÕ°äÕļäĮäËä×ÛäÕåäÕëä×üäå× åÕåÕå-å1å×AåÕKåÕQå×båfå×råÕ|åÕ‚å“å—å×§åÕ­åŧåĀå×ĐåÕÚåŪå×ęåÕôåøå׿տտ0æÕ:æJæÕTæeæÕoæÕxæˆæŒæ×æÕ­æÂæÕĖæŨæÕįæøæÕįįį×%įÕ/į3į×DįÕOįSį×`įÕjįÕpįˆįŒįםįÕ§įĢį׸įÕÂįÕČįØįÜį×íįÕ÷įûį× čÕčč×(čÕ2čÕ8čPčačpččŒč×–čŲĄčÕ§čąčģčÅčËčÕčßčéčķčũčéé+éÕ5éÕ@éQé`édé×uéÕééÕšéÕĸé×ŦéŲˇéÕÁéÖéÕāéõéÕęęÕęÕ!ę:ęOęÕYęnęÕyęŠęÕ”ęÕšęŗęČęÕŌęįęÕōęëÕ ëÕë,ëAëÕKë`ëÕkë|ëÕ†ëÕŒëĨëēëÕÄëŲëÕäëõëÕ˙ëÕėė3ėÕ=ėRėÕ]ėnėÕxėÕ~ė—ėŦėÕļėËėÕÖėįėÕņėÕ÷ėí%íÕ/íDíÕOí`íÕjíÕpí…íí™íŖíŠíŗíŊíĮíŅíÛíåíôíøí× îÕîÕî3îÕ=îÕHî]îÕgîÕrî‡îÕ‘îĻîÕąîÂîÕĖîÕŌîëîīÕ īīÕ*ī;īÕEīÕKīdīyīÕƒī˜īÕŖī´īÕžīÕÄīŨīōīÕüīđÕđ-đÕ7đÕ=đVđkđÕuđŠđÕ•đĻđÕ°đÕļđĪđäđÕîđņÕņņÕ)ņÕ/ņHņ]ņÕgņ|ņÕ‡ņ˜ņÕĸņÕ¨ņÁņÖņÕāņõņÕōōÕōÕ!ō5ō?ōIōSōYōcōmōsō}ō‡ō‘ō›ōĨō¯ōšōŋōÉōĶōŨōįōņōûōķķ.ķŲ;ķŲKķŲ[ķŲkķŲ{ķŲ‹ķוķŲ ķÕĻķŲąķÕˇķŲËķÜķëķôÕ ôôÕ'ô+ô×<ôÕFôJô×WôÕcôgô×xôÕ‚ô†ôדô՝ôÕŖôŗôˇô×ČôÕŌôÖô×įôÕōôöô×õÕ õÕõ+õ/õ×@õÕJõ_õÕjõnõ×{õÕ…õÕ‹õŖõ§õ׸õÕÂõ×õÕâõæõ×ķõÕũõÕööö×0öÕ:öOöÕZö^ö×köÕuöÕ{ö“ö—öרöÕ˛öĮöÕŌöÖö×ãöÕíöÕķö ÷ ÷Õ*÷?÷ÕJ÷[÷Õe÷Õq÷†÷Ր÷Õ–÷Ĩ÷ē÷ÕÄ÷ÕĘ÷Ų÷î÷Õø÷Õū÷ ø"øÕ,øÕ6øÕ@øDø×QøÕ[øÕeøÕoøsø×€øÕŠøÕ”øÕšøĢø¯ø×ĀøÕĘøÎø×ÛøÕåøÕëøûø˙ø×ųÕųų×/ųÕ:ų>ų×KųÕUųÕ[ųsųˆųÕ’ų§ųÕ˛ųÃųÕÍųÕĶųëųúÕ úÕúÕúÕ(úÕ2ú6ú×CúÕMúÕWúÕaúeú×rúÕ|úÕ†úÕŒúú˛úÕŧúŅúÕÜúíúÕ÷úÕũúû*ûÕ4ûIûÕTûeûÕoûÕuûûĸûÕŦûÁûÕĖûŨûÕįûÕíûüüÕ$ü9üÕDüUüÕ_üÕeü}ü’üÕœüąüÕŧüÍüÕ×üÕŨüõü ũÕũ)ũÕ4ũEũÕOũÕUũmũ‚ũÕŒũĄũÕŦũŊũÕĮũÕÍũåũū$ū5ūÕ?ūÕEūYūcūmūwūū‹ū•ūŸūŠūŗūŊūČūŌūáūņūŲ˙˙Ų˙Õ ˙Ų+˙Õ1˙×;˙ŲF˙ÕP˙e˙Õo˙„˙Տ˙ ˙ÕĒ˙Õ°˙É˙Ū˙Õč˙ũ˙ÕÕ#Õ)BWÕavՁ’ÕœÕĸģĐÕÚīÕú ÕÕ4IÕShÕs„ÕŽÕ”­ÂÕĖáÕėũÕÕ &;ÕEZÕevÕ€Õ†Ÿ´ÕžĶÕŪīÕųÕ˙(28BLV`jtƒ‡×˜ÕĸĻ×ŗÕŊÁ×ÍÕ×Û×čÕö Õ*Õ5FÕPÕVnƒÕĸÕ­žÕČÕÎæûÕÕ%6Õ@ÕF^sÕ}’՝ŽÕ¸ÕžÖëÕõ Õ&Õ0Õ6NcÕm‚ՍžÕ¨ÕŽÆÛÕåúÕÕ Õ&>SÕ]rÕ}ŽÕ˜ÕžļËÕÕęÕõÕÕ.CÕMbÕm~ÕˆÕŽĻģÕÅÚÕåöÕ Õ  3 Õ= R Õ] n Õx Õ~ ’ œ Ļ ° ē Ā Ę Ô Ū č ō ü     * 5 O ŲS y ׇ Õ‘ Õ› Ÿ ×Ŧ Õļ ÕĀ Ä ×Ņ ÕÛ Õå é ×ö Õ Õ  Õ) Õ3 Õ= M ÕW Õa Õi w † š Ų§ ׹ Ųŧ ÕÆ Ũ ]č Õî ũ  Õ - Õ9 = ×N ÕY ] ×n Õx | ׍ Õ˜ œ ׊ Õŗ Õš Ņ Õ ×æ Õđ ô × Õ  ×! Õ+ Õ1 I ^ Õh Õr ƒ Ս Õ“ Ŗ ¸ Õ × Õâ ķ Õũ Õ0Õ:OÕZkÕuÕ{™Ŗ­ˇÁËÕāŲŲŲ-ŲKŲqŲ„˜ŲĨŲ°ÕÆ×ĐŲÛÕåúÕÕÕ(Õ2Õ<ÕHL×YÕcÕmÕw{׈Ւ՜ÕĻĒסÕÁÕËÕŅ×ÛÕåé×öÕÕ Õ×Õ 1;ŲHŲSÕYŲdÕjŲuՃזĶŦ×ļÕĀâõĶ  ×$Õ/3×DÕP×ZjÕzŠÕ”Õ ˛ĮÕŅÕÛÕåõÕ˙Õ Õ×0Õ:ÕDÕNR×eÕoÕyÕƒ‡×”՞ըՎ׸ÕÂÆ×ŌÕÜÕæÕđô×Õ ÕÕ"×/Õ9ÕCÕMQ×^ÕhÕrÕxׂՌ×Õ§ÕąÕˇ×ÁÕĮāä×ûÕÕÕ×0Õ:ÕDÕNR×_ÕiÕsÕy׃Ս‘×Õ§ÕąÕģŋ×ËÕÕÕßÕéí×úÕÕÕ×)Õ3Õ=ÕC×MÕW[×hÕrÕ|Ղ׌ՒĢŧÕÆÕĐÕÖäôÕūÕÕ"Õ,Õ6Õ<`؁•Ų­Õˇģ×ĖÕÖÕāõÕ˙Õ Õ#Õ-Õ7Õ?N_Õ{ŲˆŲ•Ų¤ŲÂŲčŲûŲŲ'Õ=×GŲRÕ\qÕ{ՅՏŸÕŠÕŗÕŋÃ×ĐÕÚÕäÕîō×˙Õ ÕÕ!×.Õ8ÕBÕH×RÕ\`×mÕwՁՇב՗¨˛ŲŋŲĘÕĐŲÛÕáŲėÕöú× Ķ#×-Õ7YlĶ€„×›ÕĻĒ×ģÕĮ×ŅáÕņÕ Õ)>ÕHÕRÕ\lÕvÕ€ÕŒ×§ÕąÕģÕÅÉ×ÜÕæÕđÕúū× ÕÕÕ%×/Õ9=×IÕSÕ]Õgk×wՁՋՕ™×ĻÕ°ÕēÕÄČ×ÕÕßÕéÕī×ųÕ×ÕÕ(Õ.×8Õ>W[×rÕ|ՆՐ”×§ÕąÕģÕÅÉ×ÖÕāÕęÕđ×úÕ×ÕÕ(Õ26×BÕLÕVÕ`d×qÕ{ՅՏ“× ÕĒÕ´Õē×ÄÕÎŌ×ßÕéÕķÕų× Õ " 3 Õ= ÕG ÕM [ k Õu Õ Õ‰ ™ ÕŖ Õ­ Õŗ Ė ã Ųö ú × !Õ!Õ!"!×2!Õ"ÕK"i"ƒ"¤"Ž"Ō"Ųß"Ųė"Ųû"Ų#Ų?#ŲR# f#Ųs#Ų~#Õ”#מ#ŲŠ#Õŗ# Č#ÕŌ#ÕÜ#Õæ# ö#Õ$Õ $Õ$ $×'$Õ1$Õ;$ÕE$ I$×V$Õ`$Õj$Õt$ x$×…$Տ$Õ™$ÕŸ$׊$Õŗ$ ˇ$×Ä$ÕÎ$ÕØ$ÕŪ$×č$Õî$ ˙$  %Ų%Ų!%Õ'%Ų2%Õ8%ŲC%ÕM% Q%×d%Ķz%ׄ%ÕŽ% °% Ã%Ķ×% Û%×ō%Õũ% &×&Õ&×(& 8&ÕH& X&Õb&Õn& €& •&ÕŸ&ÕŠ&Õŗ& Ã&ÕÍ&Õ×&Õã& į&×ū&Õ'Õ'Õ'  '×3'Õ='ÕG'ÕQ' U'×b'Õl'Õv'Õ|'׆'Ր' ”'× 'ÕĒ'Õ´'Õž' Â'×Î'ÕØ'Õâ'Õė' đ'×ũ'Õ(Õ(Õ( (×,(Õ6(Õ@(ÕF(×P(ÕZ( ^(×k(Õu(Õ(Õ…(׏(Õ•( Ž( ˛(×É(ÕĶ(ÕŨ(Õį( ë(×ū(Õ)Õ)Õ)  )×-)Õ7)ÕA)ÕG)×Q)Õ[) _)×k)Õu)Õ)Õ‰) )×™)ÕŖ)Õ­)Õˇ) ģ)×Č)ÕŌ)ÕÜ)Õæ) ę)×÷)Õ*Õ *Õ*×*Õ%* )*×6*Õ@*ÕJ*ÕP*×Z*Õ`* y* Š*Õ”*Õž*Õ¤* ˛* Â*ÕĖ*ÕÖ*Õā* đ*Õú*Õ+Õ + #+"7+ŲD+ŲN+Õc+×s+Õ}+"‘+Õ›+"Ŧ+Õž+"Â+×Ú+Ķæ+"ú+Õ,Õ,Õ,"(,Õ2,Õ<,ÕD,"Y,$m,Ų…,Õ‹,×ĸ,$Ļ,ס,ÕÁ,ÕË,$ā,Õę,Õô,$ -Õ-Õ-$5-Õ?-ÕE-$V-$m-Õw-$‡-Õ‘-$•-×Ļ-Õą-$ĩ-×Č-ÕÎ-$ä-$˙-Ų .Ų.Ų%.Ų2.ŲW.&k.Ųˆ.×™.ÕŖ.&§.׸.ÕÃ.&Į.ר.Õâ.Õė.Õö.Õ/&/Õ/Õ%/Õ//&@/ÕJ/ÕT/&e/Õo/Õu/&ƒ/Ս/՝/Õ§/&Ģ/×ŧ/ÕÆ/&×/Õá/&ō/Õ˙/&0×0Õ$0Õ*0&90&=0×R0×i0&~0Õˆ0Õ’0Õœ0&­0Õˇ0ÕÁ0&Ō0ÕÜ0Õâ0&đ0Õú0Õ 1Õ1&1×)1Õ31&D1ÕN1&_1Õl1&p1ׇ1Õ‘1Õ—1&Ļ1&Ē1×ŋ1×Õ1&æ1Õđ1&2Õ 2Õ)2Ų\2ŲŒ2Ųŋ2Ųä2(ø2Ų3×3Ų*3Õ43(83×I3ÕS3ÕY3×c3Õm3Õw3Ձ3Õ‹3(3× 3ÕĢ3(¯3×Ā3ÕĘ3ÕÔ3ÕŪ3(â3×ī3Õų3Õ4(4×4Õ4Õ$4×.4Õ84ÕH4ÕR4(g4Õq4(u4ׂ4ÕŒ4(4ם4ÕĒ4(Ž4×Å4ÕĪ4ÕÕ4(ä4(č4×ũ4×5((5Õ25Õ<5ÕF5(W5Õa5Õk5(|5Õ†5ÕŒ5(š5Õ¤5Õ´5Õž5(Â5×Ų5Õã5Õé5(ø5(ü5×6×'6(86Õ>6(O6(p6Õ{6(6א6Õš6Õ¤6ÕŽ6Õ´6מ6ÕÎ6(ã6Õí6Õ÷6Õ7(7Õ7Õ&7(77ÕA7ÕG7(U7Õ_7Õo7Õy7(}7׎7Õ˜7(œ7׊7Õŗ7(ˇ7×Ä7ÕŅ7(Õ7׿7Õđ7(8Õ 8(8Õ)8(-8×D8ÕN8ÕT8(c8(g8×|8×’8(–8×­8Õŗ8×Ã8(Į8×Ū8(â8×õ8Õ˙8(9×9Õ9Õ%9(/9(@9(D9×\9(`9×w9Ձ9Õ‡9(’9(ŗ9(×9(ö9(:( :(:(#:(3:(7:×P:ÕX:(l:*{:Ų„:ŲŽ:Ųĸ:*ˇ:ÕÁ:ÕĖ:*á:Õí:*ø:*;* ;*;* ;**;*9;,P;Ų`;×~;,‚;ך;Õ¤;,¨;ך;Õŋ;,Ę;,Î;×ß;Õé;Õķ;,÷;×<Õ<,#<,'<×><ÕD<,S<,j<Õv<,z<׋<Õ•<ÕŸ<,Ŗ<×ŗ<Õš<,Ä<,Ô<ÕŪ<,õ<Õ˙<Õ =,!=Õ'=,.=,8=,>=,I=,M=×^=Õh=Õr=,v=׃=Ս=Õ“=ם=,Ą=׎=Õ¸=ÕÂ=,Æ=×Ķ=ÕŨ=Õį=,ë=×ø=Õ>Õ>Õ>, >×3>Õ9>×J>,N>×Z>Õd>Õj>,>,…>×–>Õœ>,Ģ>,¯>×Ā>ÕĘ>,Î>×ß>Õé>,í>×ũ>Õ?, ?×?Õ'?,+?×8?ÕB?ÕH?,a?,q?Õw?,ƒ?,‡?מ?Õ¨?,Ŧ?×Ã?ÕÎ?,Ō?×å?Õņ?,õ?×@Õ@,@,@,!@,5@E@ŲU@Ųe@Ųu@Ų‰@@מ@Õ¨@Õ˛@ļ@×Ã@ÕÉ@Ų@Ũ@×î@Õø@ÕAA×AÕA)A-A×>AÕHALA×]AÕhAlA×yAÕƒAÕ‰AĄAĨA×ļAÕĀAÕAÕāAäA×ņAÕûAÕBB.B?BÕIBÕSBdBÕnBÕ{BBÕšB¯BÕēBËBÕÕBÕÛBķBC2CCCÕMCÕSCgCqC€CCŲ CŲ°CŲĀCŲÔCéCúCÕDÕDDÕ)DÕ6D:D×KDÕUDÕ_DcD×pDÕvD†DŠD×ĻDÕ°D´D×ÁDÕĮD×DėDũDÕEÕE"EÕ,EÕ9E=E×NEÕXEÕbEfE×wEՁEÕ‡EטEœEרEÕ˛EÕ¸EÉEÍE×ŪEÕčEėE×øEÕFF×FÕFÕ*F?FÕIFYFÕcFtFÕ~FÕ‡F‘F F¤F×ĩFÕŋFÕÉFÍF×ŪFÕčFÕîF×˙FG×GÕGÕG0G4G×EGÕOGSG×_GÕiGmG×zGÕ„GÕ‘GĻGÕ°GĀGÕĘGÛGÕåGÕîGøGH H×HÕ&H*H×7HÕAHEH×RHÕ\HÕfHjH×{HÕ…HšHÕĨHŠH×ļHÕĀHÕÆHÚHëHīH×IÕ IIÕ*I.I×;IÕEIÕKIcIxIÕ‚I—IÕĸIŗIÕŊIÕÃIÛIđIÕúI JÕJ!J6JÕ@JDJ×UJÕ`JdJ×qJÕ{JՁJ™JŽJÕ¸JÍJÕØJéJÕķJÕųJ KK!K+K5K?KIKSKbKrKŲ‚KŲ’KŲĸKŲļKēK×ËKÕÕKÕßKãK×đKÕöKL L×LÕ%LÕ/L3L×@LÕFLVLkL|LÕ†LՐLĄLÕĢLÕ¸LŧL×ÍLÕ×LÕáLåL×öLÕMÕM×MM×'MÕ1MÕ7MHMLM×]MÕgMkM×wMՁM…M×’MÕœMÕŠMžMÕČMØMÕâMķMÕũMÕNNN#N×4NÕ>NÕHNLN×]NÕgNÕmN×~N‚N׎NÕ˜NÕžN¯NŗN×ÄNÕÎNŌN×ŪNÕčNėN×ųNÕOÕO/OIOjOtOƒO‡OטOÕĸOĻO×ŗOÕŊOÁO×ÎOÕØOÕâOæO×÷OÕPPÕ!P%P×2PÕRBR×ORÕYRÕ_RwRŒRÕ–RĢRÕļRĮRÕŅRÕ×RëRõR˙R SSS'S1S@SPSŲ`SŲpSŲ€SŲ”S˜S׊SÕŗSÕŊSÁS×ÎSÕÔSäSčS×ųSÕTÕ TT×TÕ$T4TITZTÕdTÕnTTÕ‰TÕ–TšT×ĢTÕĩTÕŋTÃT×ÔTÕŪTÕäT×õTųT×UÕUÕU&U*U×;UÕEUIU×UUÕ_UcU×pUÕzUÕ‡UœUÕĻUļUÕĀUŅUÕÛUÕäUîUũUV×VÕVÕ&V*V×;VÕEVÕKV×\V`V×lVÕvVÕ|VV‘V×ĸVÕŦV°V×ŧVÕÆVĘV××VÕáVÕîV W'WHWRWaWeW×vWÕ€W„WבWÕ›WŸW×ŦWÕļWÕĀWÄW×ÕWÕßWôWÕ˙WX×XÕXÕ X4XEXIX×ZXÕdXyXÕ„XˆXוXÕŸXÕĨXŊXŌXÕÜXņXÕüX YÕYÕY5YJY[YÕeYÕoY€YÕŠYÕ—YŦYÕļYĮYÕÍYŨYōYÕüYZ×ZÕZ Z×-ZÕ7ZÕ=ZUZjZÕtZ‰ZÕ”ZĨZÕ¯ZÕĩZÉZĶZŨZįZņZûZ[[[.[Ų>[ŲN[Ų^[Ųr[v[ׇ[Õ‘[Õ›[Ÿ[×Ŧ[Õ˛[Â[Æ[××[Õá[Õë[ī[×ü[Õ\\'\8\ÕB\ÕL\]\Õg\Õt\x\׉\Õ“\՝\Ą\ײ\Õŧ\ÕÂ\×Ķ\×\×ã\Õí\Õķ\]]×]Õ#]']×3]Õ=]A]×N]ÕX]Õe]z]Õ„]”]Õž]¯]Õš]ÕÂ]Ė]Û]ß]×đ]Õú]Õ^^×^Õ#^Õ)^×:^>^×J^ÕT^ÕZ^k^o^×€^ÕŠ^Ž^ך^Õ¤^¨^×ĩ^Õŋ^ÕĖ^ë^_&_0_?_C_×T_Õ^_b_×o_Õy_}_׊_Õ”_Õž_ĸ_×ŗ_ÕŊ_Ō_ÕŨ_á_×î_Õø_Õū_`#`'`×8`ÕB`W`Õb`f`×s`Õ}`Õƒ`›`°`Õē`Ī`ÕÚ`ë`Õõ`Õû`a(a9aÕCaÕMa^aÕhaÕuaŠaÕ”aĨaÕĢaģaĐaÕÚaŪa×īaÕúaūa× bÕbÕb3bHbÕRbgbÕrbƒbՍbÕ“b§bąbģbÅbĪbŲbãbíbüb cŲcŲ,cŲn.On.cnÕnn.‚nÕŒnÕ–n.ĻnÕ°nÕēn.ËnÕÕnÕÛn.ėn.oÕ o.oÕ%oÕ/o.?oÕIoÕSo.doÕnoÕto.oŲ—oŲ¤oŲĀo0ĪoŲØoŲâoŲņoŲpŲp×pŲ(pÕ2p06p×HpĶUpĶap0ep×upÕpÕ‰p0p×™pÕŖpÕ­p0ÂpÕĖp0ŨpÕįp0øpÕq0qÕ qÕ*qÕ0q0Aq0Eq×UqÕ_qÕiq0mq×yqÕƒqՍq0ĸqÕŦq0ŊqÕĮq0ØqÕåq0öqÕrÕ rÕr0!r0%r×5rÕ?rÕIr0Mr×YrÕcrÕmr0‚rÕŒr0rÕ§r0¸rÕÅr0ÖrÕārÕęrÕđr0s0sÕsÕ)s09sÕCsÕMs0bsÕls0}sÕ‡s0˜sÕĨs0ļsÕĀsÕĘsÕĐs0ás0õsÕt0tÕt03tÕ>t0Bt×RtÕ\tÕft0jt×vtÕ€tÕŠt0ŸtÕŠt0ētÕÄt0ÕtÕât0ķtÕũtÕuÕ u0u02uÕ=u0QuÕ[uÕeu0uuÕuÕ‰u0žuÕ¨u0šuÕÃu0ÔuÕáu0ōuÕüuÕvÕ v0v0!v×1vÕ;vÕEv0Iv×UvÕ_vÕiv0mv×~vÕˆv0Œv×™vÕŖv0§v×´vÕÁv0Åv×ÖvÕāv0ņvÕûv0 wÕw0*wÕ4wÕ>wÕDw0Uw0ewÕ|wŲ†wؐwŲĄw2°wŲšwŲÃwŲŌwŲáwŲúw×xŲ xÕx2x×*xĶ7xĶCx2]xÕgx2wxՁxÕ‡x2—x2ąxÕģx2ËxÕÕxÕÛx2ëx2yÕy2yÕ)yÕ/y2?y2YyÕcy2syÕ}yÕƒy2“y2­yÕˇy2ĮyÕŅyÕ×y2įy2ûyÕz2 zÕ*z2:zÕDzÕJz2Zz2nzÕyz2“z՝z2­zÕˇzÕŊz2Íz2Ņz×ázÕėz2{Õ {2{Õ.{Ų7{ŲA{ŲN{Ų[{Ųs{Ų}{Ų”{Ų{Ų§{Ųŗ{Ųŋ{ŲÛ{Ųå{Ų!|ŲB|V|Ųc|Ųs|Ųƒ|Ų“|ŲŖ|×­|Ų¸|Õž|ŲŌ|Ö|×į|Õņ|Õ÷|}}×}Õ!}%}×2}ÕD}Y}Õc}t}Õ†}Š}×›}ÕĨ}Õ¯}Õš}Ŋ}×Î}ÕØ}ÕŪ}é}í}×ū}Õ~ ~×~Õ&~Õ,~7~;~×K~ÕU~Õ_~c~×o~Õy~Õ~‹~~ן~ÕŠ~­~×ē~ÕÄ~Č~×Ų~Õä~č~×õ~Õ˙~Õ8Ss„ÕŽÕ”Ž˛×ÃÕŲíÕ÷Õ€€Õ€Õ!€-€1€×A€ÕK€O€×[€Õe€i€×v€Õ€€„€×•€Õ €¤€×ą€Õģ€ÕÁ€׀æ€ę€×û€Õ ×Õ#×0Õ:OÕZ^×kÕuÕ{•™×ǁÕ´¸×ŁÕ΁́×äÕīķ×‚Õ ‚Õ‚)‚>‚ÕH‚Y‚Õc‚x‚Õƒ‚”‚Õž‚Õ¤‚Ŋ‚΂Õ؂č‚Õō‚ƒÕ ƒ"ƒÕ-ƒ>ƒÕHƒÕNƒiƒmƒ×~ƒÕˆƒŒƒ×™ƒÕŖƒ§ƒ×¸ƒÕÃĮƒ×ԃÕۃÕäƒũƒ„ׄՄ „×1„Õ<„@„×M„ÕW„Õ]„u„y„׊„Õ”„˜„׊„Õ´„¸„×ńÕĪ„ÕՄí„ņ„×…Õ……×(…Õ2…Õ<…ÕB…×L…ÕV…j…Õt…Õ~…Õˆ…˜…Õĸ…ÕŦ…Õ´…ąȅ×Ų…Õã…Õí…†Õ †Õ†Õ †0†Õ:†ÕD†ÕL†[†p†Õz†Õ…†‰†×š†Õ¤†ÕކÆÕ͆Õ׆Õá†ņ†Õû†Õ‡Õ ‡‡1‡Õ;‡L‡ÕV‡k‡Õv‡‡‡Õ‘‡Õ—‡°‡ŇÕ·ä‡Õī‡ˆÕ ˆÕˆ$ˆ*ˆ4ˆ>ˆDˆNˆYˆcˆ}ˆŲ‡ˆŲ”ˆŲĄˆŲŗˆÈŲ͈ŲãˆŲķˆŲ‰Ų‰Ų#‰Ų3‰ŲC‰×M‰ŲX‰Õb‰f‰×w‰Õ‰…‰×–‰ÕĄ‰Ĩ‰×˛‰Õŧ‰Õ‰ډŪ‰×ī‰Õų‰ŠÕŠŠ×*ŠÕ4ŠÕ:ŠRŠcŠrŠvŠ×‡ŠÕ‘ŠÕ›ŠÕĨŠÕ¯ŠĊÕΊۊÕčŠųŠÕ‹ ‹×‹Õ%‹:‹ÕE‹V‹Õ`‹q‹Õ~‹‚‹×“‹Õ‹Õ§‹Ģ‹×ˇ‹ÕÁ‹ÕĮ‹׋ۋ×ė‹Õö‹ú‹×ŒÕŒŒ×%ŒÕ0Œ4Œ×AŒÕKŒÕQŒjŒŒÕ‰Œ™ŒÕŖŒ´ŒÕÁŒ֌ÕāŒđŒÕúŒÕ+Õ5Õ;PZdnx‚Œ–ĨēÕčŲÕäõÕ˙ÕŽŽ2ŽÕ<ŽQŽÕ\ŽmŽÕwŽÕ}Ž‘Ž—ŽŽ§ŽąŽŧŽƎՎŲŲŽ5 ×#5.×>ÕHÕRÕX×bÕlÕv5z×ŠÕ”Õž5ĸ×ŽÕ¸Õď5ȏ×؏ÕâÕėÕö5ú×ÕÕÕ%5:ÕDÕNÕT5c5zÕ‡5›Õϐ5ǐ×ēÕĐÕʐ5č5‘5'‘5;‘K‘Ų[‘Ųk‘×u‘Ų€‘Տ‘Õ•‘Ųĸ‘Ų˛‘ŲƑʑ×Ũ‘]č‘Õî‘×ū‘’×’] ’Õ&’1’=’R’Õ\’m’Õy’}’׎’Õ˜’Õž’׎’˛’×ÒÕ͒Õגė’Õō’ũ’“$“D“U“Õ_“Õe“y“…“‰“ך“Õ¤“¨“ך“Õēȓ×ՓÕߓÕå“ũ“”Õ”-”Õ9”=”×N”ÕX”Õ^”m”‚”ÕŒ”Ŗ”Õ­”Õš”ΔÕؔī”Õų”Õ• •וÕ$•Õ.•Õ8•ÕB•F•×V•Õ`•Õj•Õp•×z•~•׋•Õ••ÕŸ•ÕĨ•×Ģ•Ŋ•Ų•Õå•é•×ú•Õ–Õ –––×.–Õ8–<–×M–ÕX–\–×i–Õs–Õy–‘–•–×Ļ–Õ°–Õļ–Ŗɖ×ږÕä–č–×ų–Õ——×—Õ—Õ%—=—R—Õ\—m—Õw—ˆ—Õ’—Ŗ—Õą—ƗÕЗá—Õí—ņ—×˜Õ ˜˜×!˜Õ,˜0˜×=˜ÕG˜ÕM˜e˜i˜×z˜Õ„˜ˆ˜×™˜Õ¤˜¨˜×ĩ˜Õŋ˜ÕŘŨ˜á˜×ō˜Õü˜™×™Õ™ ™×-™Õ7™Õ=™U™j™Õt™Õ~™™Õ™™ÕŸ™¯™ŗ™×ęÕΙÕؙܙ×é™Õķ™Õũ™šÕš#š3š7š×HšÕRšÕ\š`š×mšÕwšÕ}ššĸšÕŦšÁšÕ˚ŨšÕįšÕķš›Õ›'›Õ2›C›ÕM›ÕS›k›€›ÕŠ›Ÿ›ÕĒ›ģ›ÕśÕ˛ã›ø›ÕœœÕ"œ3œÕ=œÕCœ[œpœÕzœœÕšœ̜ÕĩœÕģœΜ՜ߜęœŲ)Ų9×CŲNÕTŲ_ÕeŲpÕvŲÕ‡×šÕ¤¨×šÕÝÕʝ×НŲ۝ÕáŲėÕō×žÕžž×-ž×3žŲ>žÕDžŲTžŲ_žÕežŲpžÕvžŲžÕ‡žŲ’žÕœžąžÕģžÕŞÕОԞ×åžÕīžÕúžūž×ŸÕŸŸ×.ŸÕ9Ÿ=Ÿ×JŸÕTŸÕZŸrŸ‘ŸąŸŸÕ˟ÕԟæŸėŸöŸ  % Õ/ Õ: > ×O ÕY n Õy } ×Š Õ” Õš ˛ Į ÕŅ æ Õņ ĄÕ ĄÕĄ&Ą.Ą8ĄCĄYĄiĄŲxĄ×‚ĄŲ’Ą¨ĄqŗĄÕšĄČĄÜĄÕæĄÕđĄÕúĄÕĸĸ×ĸÕ"ĸÕ,ĸÕ2ĸ×<ĸ@ĸ×MĸÕWĸÕaĸÕgĸ×mĸĸ•ĸÕŸĸÕ§ĸŽĸĶĸŲüĸŲŖ%ŖŲ2ŖŲAŖŲPŖŲZŖÕ`Ŗ×iŖŲuŖŲ…ŖŲ”ŖŲžŖÕ¨ŖŦŖ×ŧŖÕÆŖÖŖÕÜŖėŖ¤Õ ¤¤Õ$¤5¤Õ?¤C¤×P¤ÕZ¤×d¤Ųn¤Õt¤×~¤Ų¤Ų—¤ÕĄ¤Ĩ¤×ĩ¤Õģ¤×ˤį¤Õí¤ü¤ĨÕĨÕ%ĨÕ/ĨÕ9ĨMĨÕWĨÕaĨÕgĨuĨ†ĨՐĨÕšĨÕ ĨĒĨŧĨŌĨÕÜĨÕäĨđĨĻÕĻÕĻ#Ļ'Ļ×7ĻÕAĻÕGĻ×XĻ\Ļ×hĻÕrĻÕxĻ‰ĻĻםĻÕ§ĻÕ­ĻמĻÂĻ×ÎĻÕØĻÕâĻ÷ĻÕ§§Õ§-§Õ6§G§K§×[§Õe§Õk§×|§€§×Œ§Õ–§Õœ§­§ą§×Á§Õ˧Χ×ā§Õë§ī§×ü§Õ¨Õ¨¨×&¨Õ0¨Õ6¨×G¨K¨×W¨Õa¨Õg¨t¨‹¨Õ•¨ЍÕŗ¨ĨÕШÔ¨×ä¨Õę¨ų¨ ŠÕŠÕŠ)Š-Š×=ŠÕGŠÕMŠ×YŠiŠƒŠœŠ´Š¸Š×ČŠÕŌŠÕØŠ×éŠíŠ×ųŠÕĒÕ ĒĒĒ×.ĒÕ8ĒÕ>Ē×OĒSĒ×_ĒÕiĒÕsĒˆĒÕ’ĒŖĒÕ­ĒžĒÕĮĒØĒčĒÕōĒĢÕĢ#ĢÕ-ĢÕ3ĢLĢ\ĢÕbĢpĢÕzĢ~Ģ׏ĢÕ™ĢÕŸĢŽĢŋĢÕÅĢĶĢęĢÕôĢŦÕŦ#ŦÕ/Ŧ3Ŧ×CŦÕIŦXŦ\Ŧ×lŦÕvŦÕ|Ŧ‹ŦŦןŦÕŠŦ­ŦמŦÕÉŦÍŦ×ÚŦÕäŦÕęŦ­­Õ ­Õ&­;­?­×K­ÕU­Õ[­l­p­×€­ÕЭՐ­×¤­ÕĒ­ĩ­Ä­Č­×Ø­Õä­×õ­ų­×ŽÕŽÕŽ"Ž-ŽAŽÕGŽVŽjŽÕtŽÕ~ŽŽÕ™ŽÕŸŽ¯ŽŗŽ×ÃŽÕÍŽâŽÕíŽņŽ×ūŽÕ¯Õ¯&¯:¯ÕD¯T¯ÕZ¯j¯~¯Õˆ¯˜¯Õĸ¯ŗ¯ÕŊ¯ÕƝŪ¯Õ蝸¯Õū¯°"°Õ,°<°ÕF°W°Õa°Õn°‚°ÕŒ°Ą°ÕŦ°Ŋ°ÕĮ°ÕͰå°ą ą$ą×4ąÕ>ąBą×SąÕ^ąoąÕyąÕą—ą§ąļąŌąđą˛Õ ˛Õ˛%˛/˛9˛C˛N˛g˛{˛Õ˛×˛Õ•˛×Ĩ˛Õ¯˛ŗ˛×˲ÕҞā˛ä˛×õ˛Õ˙˛Õ ŗÕŗŗ×)ŗÕ3ŗÕ=ŗÕCŗ×MŗQŗ×^ŗÕhŗÕrŗÕxŗ×~ŗ‘ŗ•ŗ×ŦŗČŗĖŗ×ŲŗÕãŗÕéŗ´´8´I´ÕS´ÕY´t´~´ˆ´”´Ŗ´:˛´Ųŧ´ŲĖ´ŲÜ´×ī´Õõ´×ĩŲ.ĩÕ8ĩ:MĩÕWĩ:hĩÕpĩ:‡ĩÕ’ĩ:§ĩÕąĩÕˇĩ:Æĩ:ÛĩÕåĩÕëĩ:úĩ:ļÕļÕļ:.ļ:CļÕMļÕSļ:bļ:fļ×wļՁļ:…ļ×–ļÕĄļ:ĨļײļÕŧļÕÂļ:Úļ:ųļ:ˇ:*ˇÕ4ˇÕ:ˇ:Nˇ:rˇ:|ˇ:†ˇ:ˇ:šˇ:¤ˇ:ގ:¸ˇ:¡:ˎ:Öˇ:āˇ:ęˇ:ôˇ:ūˇ:¸:¸:¸:0¸::¸:I¸ŲM¸o¸‘¸M ¸ŲǏŲē¸Ųʸ×Ũ¸Õã¸×šŲšÕ&šM*š×;šÕEšMIš×VšÕ^šMušÕ€šM•šÕŸšÕĨšM´šMÉšÕĶšÕŲšMčšMũšÕēÕ ēMēM1ēÕ;ēÕAēMPēMTē×eēÕoēMsēׄēՏēM“ē× ēÕĒēÕ°ēMČēMįēMģMģÕ"ģÕ(ģM<ģMFģMPģMZģMdģMnģMxģM‚ģMŒģM–ģM ģMĒģM´ģMžģMČģMŌģMÜģMæģMđģMŧMŧMŧŲ"ŧDŧfŧOuŧŲ~ŧŲˆŧŲœŧOąŧÕģŧÕÆŧOÛŧÕįŧOōŧOüŧOŊOŊOŊO$ŊO>ŊŲJŊŲWŊŲdŊŲsŊŲ‡ŊŲ‹ŊQ¨Ŋ×ļŊÕĀŊÕĘŊÕÔŊQéŊÕôŊQøŊ× žÕžÕž×(žÕ2žQIžpVžQežQzžÕ†žQ‘žQ›žQĨžQ¯žQšžQČžQŨžÕäžQîžQøžQŋQŋŲŋ7ŋ;ŋ×LŋÕVŋZŋ×gŋÕqŋuŋׂŋÕˆŋ×’ŋÕœŋÕĻŋÕ°ŋÅŋÕĐŋÔŋ×åŋÕīŋÕöŋ×ĀÕĀ%Āp2ĀAĀVĀÕbĀmĀwĀĀ‹Ā•Ā¤ĀšĀÕĀĀĘĀÔĀâĀņĀŲõĀÁ#Á×6ÁĶAÁÕKÁOÁ×\ÁÕfÁjÁ×wÁÕ}ÁׇÁÕ‘ÁÕ›ÁÕĨÁēÁÕÅÁÉÁ×ÚÁÕäÁÕëÁ×ųÁÕÂÂp'Â6ÂKÂÕWÂbÂlÂv€Š™ŽÂÕĩÂŋÂÉÂ×ÂņÂŲûÂŲ ÃŲÃ/Ã?ÃNÃRÃ×bÃÕlÃÕvÃzÃ׉ÃĶ”ÃÕžÃĸÃׯÃÕšÃŊÃ×ĘÃÕĐÃ×ÚÃÕäÃÕîÃÕøÃüÃ× ÄÕÄÄ×-ÄÕ7ÄÕ>Ä×LÄÕVÄmÄpzĉĞÄÕĒÄĩÄŋÄÉÄĶÄŨÄėÄÅÕÅÅÅ+Å:ÅŲ>Å[ÅeÅÅŲ‰ÅŲ•ÅŲ­ÅŲąÅÎÅ×ÜÅÕæÅ÷ÅÆ Æ×ÆÕ%ÆÕ/Æ3Æ×@ÆÕJÆÕTÆXÆ×eÆÕoÆsÆ×€ÆÕ†Æ×ÆÕšÆÕ¤ÆÕŽÆÃÆÕÎÆŌÆ×ãÆÕíÆÕôÆ×ĮÕ Į!ĮÕ-Į<ĮQĮÕ]ĮhĮrĮ|Į†ĮĮŸĮ´ĮÕģĮÅĮĪĮâĮæĮ×ķĮÕũĮÕČ×ČČ×(ČÕ2ČÕ<Č@Č×MČÕSČ×aČÕkČ€ČÕŒČ›Č°ČÕŧČĮČŅČÛČåČīČúČ ÉÉ×ÉÕ%É)É×6ÉÕ<É×FÉÕPÉeÉÕqɀɕÉÕĄÉŦÉļÉĀÉĘÉÔÉäÉîÉøÉĘŲ Ę(Ę2ĘLĘŲ[ĘŲ_Ę€ĘĘŸĘŖĘ×ŗĘÕŊĘÁĘ×ÎĘÕØĘÜĘ×éĘÕķĘ÷Ę×ËÕ Ë×ËÕËÕ(ËÕ2ËGËÕRËVË×gËÕqËÕxË׆ËՌ˖ˠËĒË´ËžËČË×ËėËÕķËũËĖĖ*Ė9Ė=Ė×MĖÕWĖÕaĖeĖ×rĖÕ|ĖÕ†ĖŠĖ×—ĖÕĄĖĨĖײĖÕ¸Ė×ÂĖÕĖĖÕÖĖÕāĖäĖ×õĖÕÍÍ×ÍÕÍÕ&Í×4ÍÕ:ÍDÍNÍXÍbÍlÍvÍ…ÍšÍÕĄÍĢÍĩÍÄÍÎÍŨÍņÍŲūÍ×ÎŲÎÕÎ.Î=ÎAÎ×RÎÕ\Î`Î×mÎÕwÎ{Î׈ÎՒΖÎ×ŖÎÕŠÎ×ŗÎÕŊÎÕĮÎÕŅÎæÎÕņÎõÎ×ĪÕĪÕĪ×%ĪÕ+Ī5Ī?ĪIĪSĪ]ĪgĪvĪ‹ĪÕ’ĪœĪĻĪšĪŊĪ×ÎĪÕØĪÕâĪæĪ×ķĪÕũĪÕĐ Đ×ĐÕ"Đ&Đ×3ĐÕ9Đ×CĐÕMĐÕWĐÕaĐvĐÕĐ…Đ×–ĐÕ ĐÕ§Đ×ĩĐÕģĐÅĐĪĐŲĐãĐíĐ÷ĐŅŅÕ"Ņ,Ņ6ŅIŅMŅ×^ŅÕdŅ×tŅxŅ׉ŅÕ“ŅÕŅĄŅ׎ŅÕ´Ņ×ÂŅÕĖŅáŅÕíŅüŅŌÕŌ(Ō2Ō<ŌFŌPŌ[ŌkŌoŌ×|ŌÕ‚Ō“Ō—ŌפŌÕŽŌÕ´Ō×ÄŌČŌ×ŲŌÕãŌÕíŌņŌ×ūŌÕĶ×ĶÕĶ-ĶÕ9ĶHĶ]ĶÕiĶtĶ~ĶˆĶ’ĶœĶ­ĶąĶמĶÕÄĶŌĶÜĶæĶđĶ ÔŲÔŲ&ÔŲ*ÔPÔjÔŲtÔ؁ÔŲ“ÔŲ—ÔÆÔÕÔŲŲÔSíÔÕÕSÕ×ÕÕÕSÕ×*ÕÕ4ÕSIÕÕTÕSXÕ×eÕÕoÕÕuÕSšÕŲ´ÕŲāÕŲ ÖŲ-ÖŲ6ÖŲ@ÖŲLÖŲXÖŲfÖŲŒÖŲ–ÖŲÆÖŲĐÖŲéÖŲöÖŲ×Ų×Ų×Ų,×Ų9×ŲL×Ų`×Ųm×Ųz×Ų‡×Ų”×Ų¤×ŲÃ×ŲÍ×Ųę×ū×Ų Ø×ØŲ ØÕ&ØŲ1ØÕ7ØŲDØŲUØŲfØŲwØŲˆØŲ™ØŲĒØģØĘØߨÕéØúØÕŲŲÕ%ŲÕ0ŲEŲÕOŲ`ŲÕjŲ{ŲÕˆŲŲÕ§Ų¸ŲÕÂŲĶŲÕÜŲ×ęŲÕôŲøŲ× ÚÕÚÚ×%ÚÕ/ÚÕ5ÚJÚ×XÚÕbÚwÚÕ‚Ú†ÚדÚ՝ÚÕŖÚšÚ×ĮÚÕŅÚæÚÕņÚõÚ×ÛÕ ÛÕÛ(Û×6ÛÕ@ÛUÛÕ`ÛdÛ×qÛÕ{ÛՁۗÛ×ĨÛÕ¯ÛÄÛÕĪÛĶÛ×āÛÕęÛÕđÛÜ×ÜÕÜ3ÜÕ>ÜBÜ×OÜÕYÜÕ_ÜuÜ׃ÜՍܑÜ×ĸÜÕ­ÜąÜמÜÕČÜÕÎÜäÜ×ōÜÕüÜŨÕŨ Ũ×-ŨÕ7ŨÕ=ŨSŨ×aŨÕkŨ€ŨÕ‹ŨŨלŨÕĻŨÕŦŨÂŨ×ĐŨÕÚŨīŨÕúŨūŨ× ŪÕŪÕŪ1Ū×?ŪÕIŪ^ŪÕiŪmŪ×zŪÕ„ŪÕŠŪ Ū׎ŪÕ¸ŪÍŪÕØŪÜŪ×éŪÕķŪÕųŪß×ßÕ'ß<ßÕGßKß×XßÕbßÕhß~ß׌ßÕ–ßĢßÕļßēß×ĮßÕŅßÕ×ßíß×ûßÕāāÕ%ā)ā×6āÕ@āÕFā\ā×jāÕtā‰āÕ”ā˜ā×ĨāÕ¯āÕĩāËā×ŲāÕãāøāÕáá×áÕáÕ$á:á×HáÕRágáÕrává׃áՍáÕ“á­áąá×ÂáÕĖáááÕėáđá×ũáÕâÕ â'â+â×<âÕFâJâ×[âÕeâÕkâzâ~â׏âÕ™ââ×ĒâÕ´â¸â×ÄâÕŅâââÕėâũâÕããÕ'ãÕ-ã?ãCã×Pã×`ãdã×qãuãׂãÕŒãÕ–ãšã×ĢãÕĩãÕŋãÕÉãÍã×ŨãÕįãÕņãõã×äÕ ä×ää×-äÕ7ä;ä×MäÕWäÕ]ägäzäŠäÕ”äÕ ä¤ä×ÂäÆä×ŨäÕķä÷ä×åÕå× åÕ*å.å×:åÕJåÕPå×ZåÕdåxåÕ‚åÕˆå“å§åÕąåÕˇåÁåÍå×åáåôåæ%æÕ/æÕ5æCæYæÕcæÕmæƒæÕæÕ“æŠæžæÕČæÕÎæÜæÕææûæÕįįį×%įÕ6įKįÕRįbįfį×wįՁį…įלįÕĻįÕ°į´į×ĀįÕĘįÕĐį×ÚįŪį×ęįÕôįÕūįčÕč(čÕ2čGčÕRčcčÕmčÕsč’čŖčÕ­čÃčÕÍčÕĶčáč÷čÕéÕ é!éÕ+éÕ1éEéZéÕdéÕnéƒéÕ‰é˜éœé×­éÕēéÉéÍé×ŪéÕčéÕōéęÕ ęę ę×1ęÕ>ęMęQę×bęÕlępę×}ęÕ‡ęՍęęĄęײęÕŧęĀę×ŅęÕÜęāę×íęÕ÷ęÕũęë(ë7ëHëWë[ë×lëÕvëÕ|ëאëÕŽëÕ´ë×ÂëÕĖëáëÕëëėÕ ėėÕ&ėÕ,ėEėZėÕdėyėÕ„ė•ėÕŸėÕĨėžėĶėÕŨėōėÕũėíÕíÕí7íLíÕVíkíÕví‡íÕ‘íÕ—í°íÅíÕĪíäíÕīíîÕ îÕî)î>îÕHî]îÕhîyîÕƒîÕ‰îĸîˇîÕÁîÖîÕáîōîÕüîÕīī0īÕ:īOīÕZīkīÕuīÕ}ī‡ī‘ī›īĄīĢīĩīŋīÉīĶīŨīčī×öīÕđÕ đÕđÕ đ*đ;đYđiđ~đÕˆđđÕ¨đšđÕÃđÕÉđãđøđÕņņÕ"ņ3ņÕ=ņÕCņ]ņrņÕ|ņ‘ņÕœņ­ņÕˇņÕŊņ×ņėņÕöņ ōÕō'ōÕ1ōÕ7ōQōfōÕpō…ōՐōĄōÕĢōÕąōËōāōÕęō˙ōÕ ķķÕ%ķÕ+ķEķZķÕdķyķÕ„ķ•ķÕŸķÕĢķĀķÕĘķßķÕęķûķÕôÕ ô%ô:ôÕDôYôÕdôuôÕôÕ…ôŸô´ôÕžôĶôÕŪôīôÕųôÕ˙ôõ.õÕ8õMõÕXõiõÕsõÕyõ“õ¨õÕ˛õĮõÕŌõãõÕíõÕķõ ö"öÕ,öAöÕLö]öÕgöÕsöˆöÕ’ö§öÕ˛öÃöÕÍöÕĶöíö÷Õ ÷!÷Õ,÷=÷ÕG÷ÕM÷g÷|÷Õ†÷›÷ÕĻ÷ˇ÷ÕÁ÷ÕĮ÷á÷ö÷ÕøøÕ ø1øÕ;øÕAø[øpøÕzøøÕšøĢøÕĩøÕģøÕøęøÕôø ųÕų%ųÕ/ųÕ5ųOųdųÕnųƒųÕŽųŸųÕŠųÕ¯ųÉųŪųÕčųũųÕúúÕ#úÕ+ú5ú?úIúSú]úcúmúwúú‹ú•úŸúŠú¯úšúÃúÍú×úáúëúõú˙ú ûûû#û-û7ûAûLû×ZûÕdûyûÕƒû˜ûÕŖû´ûÕžûÕÄûŪûķûÕũûüÕü.üÕ8üÕ>üXümüÕwüŒüÕ—ü¨üÕ˛üÕ¸üŌüįüÕņüũÕũ"ũÕ,ũÕ2ũLũaũÕkũ€ũÕ‹ũœũÕĻũÕŦũÆũÛũÕåũúũÕūūÕ ūÕ&ū@ūUūÕ_ūtūÕūūÕšūÕ ūēūĪūÕŲūîūÕųū ˙Õ˙Õ˙&˙0˙:˙@˙J˙T˙^˙h˙r˙|˙‹˙˙× ˙ÕĒ˙Ž˙×ŋ˙ÕÉ˙ÕĪ˙č˙ų˙ÕÕ$9ÕDUÕ_Õe”ÕžŗÕžĪÕŲÕßųÕ-Õ8IÕSÕYsˆÕ’§Õ˛ÃÕÍÕĶíÕ !Õ,=ÕGÕMg|Õ†›ÕώÕÁÕĮŨįņû )3=I×SŲ^Õh}Õ‡œÕ§¸ÕÂÕČâ÷ÕÕ!2Õ<ÕB\qÕ{Õ›ŦÕļÕŧÖëÕõ Õ&Õ0Õ6PeÕo„Տ ÕĒÕ°ĘßÕéūÕ Õ$Õ*DYÕcxÕƒ”ÕžÕ¤žĶÕŨōÕũÕÕ4>HRXblv€Š”Ŗ§×¸ÕÉÍ×ŪÕčÕķ÷×Õ×Õ&;ÕEVÕ`ÕlÕ‹œÕŽÃÕĘŲęÕô Õ % Õ/ Õ5 C Y Õc Õm ƒ Ս Õ“ ¨ Ŋ ÕĮ ÕŌ Ö ×į Õņ  Õ  ×" Õ, Õ2 L P ×a Õk € Õ‹  ל ÕĻ ÕŦ Æ Ę ×Û Õá ķ Õũ  Õ - Õ7 ÕC G ×X Õ_ n  Õ‰ š Õ¤ ē ÕÄ ÕĘ Ø ô Õū  Õ 5 J ÕT i Õt … Տ Õ• Ž à ÕÍ â Õí ū Õ Õ # 5 Õ? T Õ_ p Õz Õ€ – ¨ Õ˛ Į ÕŌ ã Õí Õķ  Õ%:ÕEVÕ`Õf|ŽÕ˜­Õ¸ÉÕĶÕŲīÕ  Õ+<ÕFÕLbtÕ~“Õž¯ÕšÕŋÕįÕņÕ"Õ,Õ2HZÕdyÕ„•ÕŸÕĨģÍÕ×ėÕ÷ÕÕ.@ÕJ_Õj{Õ…Õ‹ĄŗÕŊŌÕŨîÕøÕū&Õ0EÕPaÕkÕq‡™ÕŖ¸ÕÃÔÕŪÕäú Õ+Õ6GÕQÕWl~ÕˆÕ¨šÕÃÕÉŪđÕúÕ+Õ5Õ;PbÕlÕŒÕ§Õ­ÂÔÕŪķÕūÕÕ4FÕPeÕpÕ‹Õ‘ĒŋÕÉŪÕéúÕÕ #8ÕBWÕbsÕ}ÕƒœąÕģĐÕÛėÕöÕü*Õ4IÕTeÕoÕuŽŖÕ­ÂÕÍŪÕčÕîÕ&;ÕFWÕaÕg€•ÕŸ´ÕŋĐÕÚÕāųÕ-Õ8IÕSÕYoyƒ‰“§ąģÅĪŲãéķũ%/9CMSYcis}‡‘›Ĩ¯ĩŋÉĶŨįō ŲŲŲ,ŲXŲaŲkŲwŲƒŲ‘ŲŖŗŲžÕČß]ęÕđ˙ÕÕ$3HÕRÕXgk×|ՆՐĨÕ¯ĀÕĘÛÕäķÕ#Õ-=ÕJN×_Õim×€ÕŠÕ”ÕžĸךÕÃĮ×ŲÕá×ëī×üÕÕÕ× $×1Õ;ÕEÕK×UÕ_c×tÕ~Մ׎’×žÕ¨Õ˛ļ×ÂÕĖÕÖÕÜîō×ÕÕÕ#'×4Õ>ÕHÕN×XÕbf×rÕ|ՆՌזՠ´ÕžÕÄĪãÕíÕķũ   7 ; ×L ÕV Z ×m Õw Ձ Õ‡ ו ™ ×Ļ Õ° Õē ÕĀ ×Ę Î ×Û Õå Õī Õõ ×˙ Õ ! !×!Õ(!Õ.!×8!/B/×S/Õ]/a/×r/Õ}//׎/Õ˜/Õž/ļ/ē/×Ë/ÕÕ/Ų/×ę/Õõ/ų/×0Õ0Õ0.0C0ÕM0b0Õm0~0Õˆ0™0ÕĻ0Ē0×ģ0ÕÅ0É0×Ú0Õå0é0×ö0Õ1Õ11"1×31Õ=1R1Õ]1a1×n1Õx1Õ~1–1Ģ1Õĩ1Ę1ÕÕ1æ1Õđ12Õ22×#2Õ-212×B2ÕM2Q2×^2Õh2Õn2†2Š2×›2ÕĨ2ē2ÕÅ2É2×Ö2Õā2Õæ2ū23×3Õ3!3×23Õ=3A3×N3ÕX3Õ^3v3z3׋3Õ•3™3×Ē3Õĩ3š3ׯ3ÕĐ3ÕÖ3î3ō3×4Õ 44×"4Õ-414×>4ÕH4ÕN4f4j4×{4Õ…4‰4ך4ÕĨ4Š4×ļ4ÕĀ4ÕÆ4Ū4â4×ķ4Õũ45×5Õ5!5×.5Õ85Õ>5V5Z5×k5Õu5y5׊5Õ•5™5×Ļ5Õ°5Õļ5Î5Ō5×ã5Õí5Õ÷5 6Õ6'6Õ16B6ÕK6Z6^6×o6Õy6}6׎6Õ™66×Ē6Õ´6Õē6Î6×á6Õë6ī6×7Õ 77×7Õ%7Õ-7×37Ų@7×J7ŲZ7Ųj7Ų~7“7՝7­7Õˇ7Č7ÕŌ7ã7Õí7ū7Õ 88×"8Õ,808×<8ÕF8J8×W8Õd8h8×y8Õƒ8‡8ט8ÕŖ8§8×´8Õž8ÕÄ8Ü8ā8×ņ8Õ÷89 9×9Õ%9Õ+9:9>9×O9Õ_9t9Õ~99Õ™9Ē9Õŗ9Â9Æ9××9Õá9Õį9ö9ú9× :Õ::×*:Õ5:9:×F:ÕP:ÕV:n:r:׃:Ս:ĸ:Õ­:ą:מ:ÕČ:ÕÎ:æ:û:Õ;;Õ;0;Õ=;A;×R;Õ\;`;×q;Õ|;€;׍;Õ—;՝;ĩ;š;×Ę;ÕÔ;Ø;×é;Õô;ø;×<Õ<Õ<-<1<×B<ÕL<ÕR<a<e<×v<Õ€<„<ו<Õ <¤<׹<Õģ<ÕÁ<Ų<Ũ<×î<Õø< =Õ==×)=Õ3=Õ9=Q=U=×f=Õp=…=Ր=”=ץ=ÕĢ=Õą=É=Ū=Õč=ũ=Õ>>Õ#>Õ)>A>V>Õ`>u>Õ€>‘>Õ›>ÕĄ>š>Î>ÕØ>í>Õø> ?Õ?Õ?1?F?ÕP?e?Õp??Õ‹?Õ‘?Ĩ?ˇ?ÕÁ?Ö?Õá?ō?Õü?Õ@@/@Õ9@N@ÕY@j@Õt@Õz@’@§@Õą@Æ@ÕŅ@â@Õė@Õô@AÕA%AÕ0AAAÕKAÕQAeAoAyAƒA‰A“AA§AąAŧAĖAĐA×áAÕëAīA×BÕ BB×BÕ&BÕ,BDBYBÕcBxBÕƒB”BÕžBÕ¤BŧBŅBÕÛBđBÕûB CÕCÕ"C7CÕACVCÕaCrCÕ|CÕ‚C›C°CÕēCĪCÕÚCëCÕõCÕûCD(DÕ2DGDÕRDcDÕmDÕyD}D׎DÕ˜DœD×­DÕˇDÕŊDÔDåDÕņDEÕE%EÕ0EAEÕKEÕQEiE~EÕˆEEÕ¨EšEÕÃEÕĪEäEÕîEFÕFFÕ)FÕ/FGF\FÕfF{FÕ†F—FÕĄFÕ­FÂFÕĖFáFÕėFũFÕGÕ G%G:GÕDGYGÕdGuGÕGÕ‹G GÕĒGŋGÕĘGÛGÕåGÕņGHÕH%HÕ0HAHÕKHÕQHeHkHuH{HH‹H‘H—HĄH§H­HˇHŊHÃHÍH×HŨHįHíHķHũHIII:IJIŲZIŲjI×tIŲ‰II× I]ĢIÕąIĀIÄI×ÕIÕåIúIÕJJÕJ0JÕ9JHJLJ×]JÕgJkJ×|JÕ‡J‹JטJÕĸJÕ¨JĀJÄJ×ÕJÕßJãJ×ôJÕ˙JK×KÕKÕ K8K\B\×O\ÕY\Õ_\w\Œ\Õ–\§\Õ­\É\Í\×Ū\Õč\ė\×ũ\Õ] ]×]Õ#]Õ)]A]E]×V]Õ`]d]×u]Õ€]„]ב]Õ›]ÕĄ]š]Î]ÕØ]é]Õī]˙]^×^Õ^"^×3^Õ>^B^×O^ÕY^Õ_^y^}^׎^Õ˜^­^Õ¸^ŧ^×É^ÕĶ^ÕŲ^ķ^÷^×_Õ__×'_Õ2_6_×C_ÕM_ÕS_k_o_×€_ÕŠ_Ž_ן_ÕĒ_Ž_×ģ_ÕÅ_ÕË_ã_į_×ø_Õ``×`Õ`#`×4`Õ>`B`×S`Õ^`b`×o`Õy`Õ`—`›`×Ŧ`Õļ`Ë`ÕÖ`Ú`×į`Õņ`Õ÷`aa×$aÕ.a2a×?aÕKaOa×`aÕjana×aÕŠaŽa×›aÕĨaÕĢaÃaĮaרaÕâa÷aÕbb×bÕbÕ#b;b?b×PbÕZb^b×obÕzb~b׋bÕ•bÕ›bĩbšb×ĘbÕÔbébÕôbøb×cÕcÕc/c3c×DcÕNcRc×_cÕkcoc×€cÕŠcÕ”cŠcÕŗcÄcÕÎcßcÕčc÷cûc× dÕdd×+dÕ6d:d×GdÕQdÕWdodsdׄdÕŽd’d×ŖdÕŽd˛d×ŋdÕÉdÕĪdįdëd×üdÕe e×eÕ&e*e×7eÕAeÕGe]eteÕ~e‚eדe՝eĄe׎eÕ¸eŧe×ÉeÕĶeÕāeõeÕ˙eÕ ffÕ$fÕ*f8fÕBfFf×SfÕ]fÕgfÕqfuf׏f™f¨fŦf×ŊfÕĮfÕÍfÜfāf×ņfÕggÕ g1gÕ;gLgÕUgdghg×ygÕƒg‡gטgÕŖg§g×´gÕžgÕÄgÜgņgÕûghÕh,hÕ6hÕnÕHn]nÕhnynÕƒnÕ‰nĄnļnÕĀnÕnÕānņnÕûnÕoo.oÕ8oMoÕXoioÕsoÕo”oÕžoŗoÕžoĪoÕŲoÕßoķoųop ppp'p-p7pApGpQpWp]pgpqpwpp‹p‘p›pĨpĢpĩpŋpÅpËpÕpßpępūpqŲqŲ8q×BqŲMqÕSqŲdqŲuqŲŠqŽqןqÕŠqÕŗqĮqÕŅqæqÕņqrÕ rÕr'r-rtBt×StÕ]tat×rtÕ}tt׎tÕ˜tÕžtˇtģt×ĖtÕÖtÚt×ëtÕõtųt× uÕuu×(uÕ3u7u×DuÕNuÕTulu|uÕ‚uŽuŠuÕŗuˇu×ÎuÕŲuŨu×đuÕüuv× vÕvv#v×4vÕ>vBv×NvÕXv\v×mvÕxv|v׉vÕ“vÕ™vŗvˇv×ČvÕŌvÖv×âvÕėvwÕ ww×wÕ'wÕ-wGw\wÕfwvwÕ€w•wÕ wąwÕģwÕÁwÛwđwÕúw xÕx)xÕ4xExÕOxÕUxox„xÕŽxŖxÕŽxŋxÕÉxÕĪxäxîxøxy yy y*y4y>yEy_yŲhyŲryŲyŲŒyŲŠyŲĪyŲčyŲņyŲûyŲzŲzŲ!zŲ3z[GzŲTzŲ_zÕuz×zŲ“z[—zרzÕ˛zÕŧzÕÆz[Ęz×ÖzÕāzÕęzÕđz[üz[{×{Õ{Õ+{[/{×<{ÕF{ÕV{[Z{×g{Õq{Õ}{ׇ{Õ‘{[•{×ĸ{ÕŦ{Õ¸{×Â{ÕĖ{[Đ{×Ũ{Õį{Õí{[|[|×|Õ#|[2|[6|×G|ÕQ|[U|×f|Õq|[u|ׂ|ÕŒ|Õ’|[Ē|[ŋ|ÕÉ|[Ū|Õé|[ú|Õ}Õ }[}[%}×/}Ų<}ŲG}ÕM}ŲX}Õ^}Ųi}Õs}[w}׈}Õ’}Õœ}Õĸ}×Ŧ}Õļ}[Ø}[é}Õü}[~×~Õ"~[&~×7~ÕC~×M~[]~Õm~[}~Õ‡~Õ‘~Õ—~[Š~[­~מ~ÕČ~ÕŌ~ÕÜ~[ā~×ė~Õö~ÕÕ[[×-Õ=ÕG[K×^ÕnÕx[|×‰Õ™ÕŸ×ŠÕŗ[ˇ×ÃÕĶÕŲ×ãÕí[€Õ €[€[2€Õ8€[B€[N€[X€[b€[v€[z€×‘€Õ›€ÕĢ€[¯€×€ÕĖ€Õ܀[ā€×í€Õ÷€Õ× Õ[×'Õ1Õ;ÕA×KÕU[iÕsÕy[„[˜ÕĸÕ¨[˛[ž[ȁ[ԁ[æ[‚Õ ‚Õ‚[%‚Õ/‚Õ5‚[C‚[S‚Õ]‚Õg‚[w‚Ձ‚[‘‚Õ›‚[°‚Õģ‚[Ė‚ÕւÕ܂[ų‚[ƒÕ ƒ[.ƒ[JƒÕTƒ[pƒÕvƒ[ˆƒ[ŖƒÕ­ƒÕˇƒ[ĮƒÕ҃Õ׃[áƒ[ōƒ[„Õ„['„[C„ÕM„[i„Õo„[„[œ„ÕĻ„[ŧ„ÕƄ[քÕā„[õ„Õ…[…Õ…Õ!…[7…[A…[K…[U…[`…[…Ų …°…×ē…Ų˅Ų܅Ųė…Ų††]%†‡,†;†P†ÕZ†k†Õu†…†Õ’†–†×§†Õą†Õģ†ÕÁ†×ԆÕŪ†ķ†Õũ†‡Õ‡(‡Õ1‡×?‡ÕI‡M‡×^‡Õh‡Õr‡Õ|‡€‡×‘‡Õ›‡ÕĨ‡Õ¯‡ŗ‡×ćÕˇևá‡å‡×ö‡ÕˆÕ ˆˆÕ)ˆÕ3ˆÕ=ˆMˆÕWˆÕaˆÕgˆoˆ~ˆ“ˆÕˆ˛ˆÕŊˆΈÕ؈Õۈöˆúˆ× ‰Õ‰Õ‰Õ)‰-‰×>‰ÕH‰ÕR‰Õ\‰q‰Õx‰ƒ‰މ’‰×Ŗ‰Õ­‰Õˇ‰ˉÕ։Õā‰Õę‰ú‰ÕŠÕŠÕŠŠ+Š/Š×@ŠÕJŠ_ŠÕjŠnŠ×{ŠÕ…ŠÕ‹ŠŖŠ¸ŠÕŠ׊ÕâŠķŠÕũŠÕ‹‹0‹Õ:‹O‹ÕZ‹k‹Õu‹Õ{‹‹ž‹ĸ‹×ŗ‹ÕŊ‹ÕĮ‹ˋ×؋Õâ‹Õė‹đ‹×ŒÕ ŒÕŒ×ŒÕ&Œ*Œ×:ŒÕDŒÕJŒ×TŒÕ`ŒdŒ×pŒÕzŒÕ€Œ×ŠŒÕ˜ŒœŒ×­ŒÕˇŒģŒ×ԌÕ܌ÕæŒęŒ×öŒÕÕ×× Õ*Õ48×DÕNR×^Õh}ÕˆŒ×™ÕŖÕŠƍ׍Õá÷ÕŽÕŽŽ+ŽÕ5ŽÕ?ŽUŽÕ_ŽÕeŽuށޅŽ×–ŽÕ ŽĩŽÕĀŽĎ×ŅŽÕێÕáŽųŽũŽ×ÕÕ#8ÕBÕMbÕlÕwŒÕ–ÕĄĨ×ļÕĀÕʏÕԏÕŪÕäīķ×Õ×)Õ3Õ=A×MÕWÕ]×gk×wÕÕ‹×›ÕĨА×ĩÕŋԐÕߐã×đÕúÕ‘‘.‘Õ8‘N‘ÕX‘Õ^‘l‘‚‘ÕŒ‘Õ–‘Ŧ‘Õļ‘Õŧ‘Бå‘Õī‘’Õ’ ’Õ*’Õ0’H’]’Õg’k’×|’Õ‡’‹’ט’Õĸ’Õ¨’ŧ’’Ė’֒ā’ę’ô’ū’“““6“Õ@“D“×U“Õ_“c“×t“Õ~“Õˆ“Œ“ם“Õ§“ģ“ÕÁ“Гԓ×ä“Õî“”Õ””×”Õ)”Õ/”G”_”}”Ž”Õ˜”Õž”ŗ”ž”͔â”Õė”ũ”Õ••Õ"•Õ/•3•×D•ÕJ•]•g•q•€•Ų„•Ą•°•^ŋ•ŲɕŲԕÕڕŲå•Õī•^ķ•×–Õ–Õ–^#–^'–×8–ÕB–^F–×W–Õb–^f–×s–Õ}–Õƒ–^›–^Ÿ–×°–Õē–^ž–×Ņ–Õۖ^ō–Õü–Õ—^—Õ —Õ&—^4—^D—ÕN—ÕX—^\—×h—Õr—^v—ׂ—ÕŒ—^Ą—ÕŦ—^°—×Ŋ—ÕĮ—Õ͗^č—×û—Õ˜^ ˜×˜Õ$˜Õ.˜^C˜ÕM˜ÕW˜Õa˜^q˜Õ{˜Õ…˜Õ‹˜^“˜^ĸ˜^Ϙס˜ÕÁ˜^֘Õá˜^å˜×ō˜Õü˜Õ™^™^9™^Y™^j™Õt™Õz™^Ž™^™^˛™Õŧ™Õ™^Ņ™^â™^ņ™^õ™×šÕ š^š^0šÕ:š^OšÕZš^kšÕušÕ{š^š^™š^Ŗš^˛ššŲԚŲâš›`›Ų›Ų-›ŲA›`E›×V›Õb› i›`x›`|›×›Õ—›`››×Ŧ›Õˇ›`ģ›×țÕŌ›Õ؛`đ›`ô›×œÕœ`œ×&œÕ0œ`4œ×GœÕQœÕ[œ`_œ×kœÕuœÕ{œ×…œ`‰œ×•œÕŸœÕМ`­œ×šœÕÜ`Įœ×͜ÕŨœ`ōœÕũœ`×ÕÕ`9×LÕV`Z×kÕuÕ`”ÕžÕ¨Õ˛`ÕĖÕ֝Õܝ`ä`ķ`÷×žÕž`'žÕ2ž`6ž×CžÕMžÕSž`kž`Šž`Ēž`ģžÕŞÕ˞`ߞ`Ÿ`ŸÕ$ŸÕ*Ÿ`9Ÿ`JŸ`YŸ`nŸÕtŸ`Ÿ`ŸŸ`ޟžŸŲΟŲ۟ Ų b Õ+ b/ ×; ÕE bI ×U Õ_ bc ×p Õz b Õš bž ×Ģ Õĩ Õģ bá Ų ĄŲ.ĄŲ7ĄŲAĄŲMĄŲYĄŲgĄŲyĄdĄŲšĄ×¤ĄŲ¯ĄÕĩĄŲĀĄÕÆĄŲŅĄÕÛĄdߥ×đĄÕûĄd˙Ą×ĸÕĸÕ$ĸd(ĸ×5ĸÕ?ĸÕIĸdMĸ×^ĸÕhĸÕ{ĸdĸ׏ĸÕĸĸdĻĸ׸ĸÕžĸ×ČĸdĖĸ×ŪĸÕčĸdėĸ×ūĸÕŖÕŖdŖd+Ŗd;ŖÕPŖdTŖ×rŖdvŖ×ŖÕŖŖd§Ŗ×´ŖÕÆŖ×ĐŖÕÚŖdŪŖ×ęŖÕúŖÕ¤× ¤Õ¤d.¤Õ8¤dN¤ÕT¤d`¤dt¤Õ~¤Õ„¤dޤdš¤d¤¤dޤdÁ¤dŌ¤Õܤdō¤Õü¤ÕĨdĨd&ĨÕ0ĨÕ:ĨdPĨÕZĨÕ`ĨdqĨ×{ĨŲ†ĨÕŒĨd–Ĩd ĨdĒĨd´ĨdžĨdČĨdĶĨdŨĨdįĨdņĨdüĨdĻd%ĻŲ/ĻŲ;ĻŲGĻŲSĻŲdĻxĻŲ…ĻŲ•ĻŲĨĻŲĩĻŲÅĻŲÕĻ×īĻŲúĻÕ§Ų§8§M§Q§×f§Õp§t§×ާ’§×¨§Ŧ§×Á§Ō§į§Õņ§Õ÷§¨ ¨×¨Õ%¨)¨×6¨Õ<¨L¨P¨×a¨Õk¨Õv¨‹¨Õ•¨Õ›¨Ŧ¨ŧ¨×ҍÕÛ¨Õá¨×î¨ū¨Š×ŠÕŠÕ#Š×0Š<Š×OŠÕYŠ]Š×nŠÕxŠ|Š×‰ŠÕŠŸŠŖŠ×´ŠÕžŠÕÅŠ×ËŠŲÜŠāŠ×ņŠÕûŠ˙Š× ĒÕĒ"Ē&Ē×DĒHĒ×YĒÕcĒÕiĒ×zĒ~Ē׊ĒÕ”ĒÕšĒĢǝĒ×ĀĒÕĘĒÕĐĒ×áĒåĒ×ņĒÕûĒÕĢĢÕ$Ģ5ĢÕ?ĢPĢÕYĢjĢnĢ×ĢÕ‰ĢՏĢנ̤Ģ×°ĢÕēĢÕĀĢŅĢÕĢ׿ĢÕđĢÕöĢ×Ŧ Ŧ×ŦÕ!ŦÕ+Ŧ@ŦÕJŦ[ŦÕeŦvŦÕŦŦ”Ŧ×ĨŦÕ¯ŦŗŦ×ÄŦÕĪŦāŦÕęŦÕđŦ­­Õ'­<­ÕG­X­Õb­Õh­|­Œ­Ą­ÕĢ­ŧ­ÕČ­Ė­×Ũ­Õã­ō­ö­×ŽÕŽÕŽÕ%ŽÕ/ŽÕ9ŽMŽÕWŽlŽÕwŽˆŽÕ’ŽÕ˜Ž°ŽÄŽÕÎŽãŽÕîŽ˙ŽÕ ¯Õ¯#¯)¯3¯>¯S¯Õ]¯n¯Õz¯~¯×¯Õ™¯¯×ޝÕš¯Ŋ¯×ƝÕÔ¯ÕÚ¯ō¯°Õ°°×"°Õ,°0°×=°ÕC°T°X°×i°Õo°~°‚°×“°Õ°Ą°×­°Õˇ°ģ°×ȰÕŌ°Õß°ã°×ô°Õū°Õą×ą!ą%ą×6ąÕ@ąÕFą×Wą[ą×gąÕqąÕ{ąą×ąÕšąžą×ĢąÕĩąšą×ÆąÕĪąāąõąÕûą ˛˛Õ)˛9˛ÕC˛T˛Õ^˛Õg˛y˛Õƒ˛˜˛ÕŖ˛´˛Õž˛ÕIJØ˛â˛č˛î˛ø˛ŗ ŗŗ8ŗLŗŲYŗŲmŗqŗ×‚ŗÕŒŗŗ×ĄŗÕŦŗ°ŗ×ŊŗÕĮŗÕÍŗåŗéŗ×úŗÕ´´×´Õ$´(´×5´Õ?´ÕE´]´r´Õ|´‘´Õœ´­´Õˇ´ÕŊ´Õ´ô´ĩ%ĩÕ/ĩÕ5ĩIĩSĩ]ĩgĩqĩ{ĩĸĩŲŦĩŲ¸ĩŲËĩŲĪĩėĩ×ļļ×ļÕ"ļ&ļ×3ļÕ=ļRļÕ]ļnļÕxļ‰ļÕ—ļŦļÕļļÆļÕĐļáļÕëļÕøļüļ× ˇÕˇˇ×(ˇÕ2ˇ6ˇ×CˇÕMˇÕWˇ[ˇ×lˇÕvˇ‹ˇÕ–ˇšˇ×§ˇÕąˇÕˇˇˡܡņˇÕûˇ ¸Õ¸&¸Õ0¸Õ=¸R¸Õ\¸m¸Õs¸¸‰¸“¸¸§¸ą¸ĸ×Õ¸Õ߸ô¸Õ˙¸š×šÕšÕ š8šMšÕWšlšÕwšˆšÕ’šÕ˜šŦššŲŅšŲ÷šēŲēŲ+ē/ē×@ēÕJēÕTēÕ^ēbē×}ēē‘ē×ĸēÕ¨ēסēÉēÕĶē×ē×õēųē×ģģ×,ģÕ6ģÕ<ģ×MģQģ×]ģÕgģÕmģ~ģ™ģÕ¤ģ¨ģ×ŋģÕÅģ×ÖģÚģ×ėģÕöģŧ(ŧ>ŧOŧSŧ×dŧÕnŧÕtŧ×…ŧ‰ŧוŧÕŸŧÕĨŧļŧËŧÕÕŧÕÛŧđŧôŧ×ŊÕ ŊÕŊ!Ŋ2ŊÕ<ŊÕBŊWŊ[Ŋ×gŊÕqŊÕwŊ‰ŊŊמŊÕ¤ŊŗŊˇŊ×ČŊÕŌŊÖŊ×âŊÕėŊđŊ×ũŊÕžÕž)žÕ3žCžÕMž^žÕhžÕqžž…ž×–žÕ žÕĻž×ŗžÞĮž×ŪžÕäž×õžųž× ŋÕŋŋ×0ŋ4ŋ×GŋKŋ×]ŋnŋrŋ׃ŋՍŋÕ“ŋ× ŋ°ŋ´ŋ×ÅŋÕĪŋÕÕŋ׿ŋęŋ×öŋÕĀÕ ĀĀÕ)Ā:ĀÕDĀUĀÕ^ĀoĀsĀׄĀÕŽĀÕ”Ā×ĄĀąĀĩĀׯĀÕĐĀÕÖĀ×ãĀķĀ÷Ā×ÁÕÁÕÁ×%Á5ÁJÁÕTÁdÁÕnÁÁÕ‰ÁÕ–ÁšÁ×ĢÁÕĩÁĘÁÕÕÁŲÁ׿ÁÕđÁÕöÁÂ#ÂÕ-ÂBÂÕMÂ^ÂÕhÂÕn†›ÂÕĨÂĩÂÕŋÂĐÂÕÚÂÕãÂíÂ÷Âà ÃÃ1ÃAÃŲQÃŲeÃiÃ×zÃՄÈÃ×™ÃդèÃ×ĩÃÕŋÃÕÅÃŨÃōÃÕüÃÄ×ÄÕ!ÄÕ+Ä/Ä×;ÄÕEÄÕKÄ×UÄYÄ×eÄÕoÄÕyÄ}Ä׉ÄÕ“Ä—Ä×ŖÄÕ­ÄÂÄÕÍÄŅÄ×ŪÄÕčÄÕîÄ ÅÅÕ&Å<ÅÕFÅÕLÅZÅpÅÕzÅÕ„ÅšÅÕ¤ÅÕĒÅžÅŨÅũÅÆÕÆÕÆ2ÆPÆVÆ`ÆfÆÆÆ×™ÆŲ¤ÆÕĒÆŲˇÆŲÂÆÕČÆŲĶÆÕŲÆŲäÆÕęÆŲ÷ÆŲĮÕĮŲĮÕĮ.Į=ĮAĮ×RĮÕ\Į`Į×mĮÕwĮ{Į׈ĮÕ•Į™Į×ĒĮÕ´Į¸Į×ÅĮÕĪĮĶĮ×āĮÕéĮ×īĮŲúĮÕČŲ ČÕČ×ČŲ(ČŲ3ČÕ=ČAČ×RČÕ\Č`Č×mČÕwČ{Č׈ČÕ•Č™Č×ĒČÕ´ČÕēČ×ËČĪČ×ÛČÕåČÕëČüČÉ×ÉÕÉÕ!É×2É6É×BÉÕLÉÕRÉcÉgÉ×xÉÕ‚ÉÕˆÉיɝÉ׊ÉÕŗÉÕšÉĘÉÎÉ×ßÉÕéÉÕīÉ×ĘÕ ĘĘ#Ę'Ę×8ĘÕDĘ×UĘYĘ×eĘÕoĘÕuʆʊĘ×›ĘÕ§Ę׸ĘŧĘ×ČĘÕŌĘÕØĘéĘíĘ×ūĘÕËÕË×"ËÕ(Ë3ËBËFË×WËÕcË×tËxËׄËÕŽËÕ”ËĨËŠË×ēËÕÆË××ËÛË×įËÕņËÕ÷ËĖ Ė×ĖÕ'ĖÕ-Ė×AĖÕGĖRĖaĖeĖ×vĖÕ‚Ėד˗Ė×ŖĖÕ­ĖÕŗĖÄĖČĖ×ŲĖÕåĖ×öĖúĖ×ÍÕÍÕÍ'Í+Í×<ÍÕHÍ×YÍ]Í×iÍÕsÍÕyÍŠÍŸÍÕŠÍšÍÕÃÍÔÍÕŪÍÕëÍÎÕ ÎÎÕ$Î5ÎÕ?ÎÕHÎRÎ\ÎfÎpÎ΃Î×”ÎÕžÎĸÎׯÎÕšÎŊÎ×ĘÎÕ×ÎÛÎ×ėÎÕöÎÕüÎ× ĪĪĪ×.ĪÕ8ĪÕ>Ī×KĪ[Ī_Ī×pĪÕzĪÕ€Ī×”ĪÕšĪĨδΏĪ×ÉĪÕÕĪ×âĪōĪöĪ×ĐÕĐ× Đ0Đ4Đ×EĐÕOĐÕUĐ×iĐÕoĐzĐ‰ĐĐמĐÕĒĐסĐĮĐËĐ×ÜĐÕæĐÕėĐ×ŅÕŅŅ Ņ$Ņ×5ŅÕAŅ×NŅ^ŅbŅ×sŅÕŅ×ŒŅœŅ Ņ׹ŅÕŊŅ×ĘŅÚŅŪŅ×īŅÕûŅ×ŌŌŌ×-ŌÕ9Ō×FŌVŌkŌÕuŌ…ŌÕŌ ŌÕĒŌÕˇŌĖŌÕÖŌæŌÕđŌĶÕ ĶÕĶĶ(Ķ2Ķ<ĶHĶYĶmĶŲzĶŲ‰ĶדĶŲĶÕŖĶŲ­ĶÕˇĶËĶÕŅĶÜĶ׿ĶŲđĶÕöĶÔ× ÔŲÔ"Ô×2ÔÕ<ÔÕFÔJÔ×WÔÕaÔÕmÔqÔׁÔÕ‹ÔÕ‘Ô×ĸÔĻÔײÔÕŧÔÕÂÔĶÔ×Ô×įÔÕņÔÕûÔ˙Ô× ÕÕÕÕÕ4ÕÕ:ÕEÕUÕYÕ×iÕÕuÕ׆ՊÕ×–ÕÕ ÕÕĻÕˇÕģÕ×ËÕÕÕÕŲÕ×ęÕÕõÕųÕ×ÖÕÖÕÖ.ÖBÖÕLÖ\ÖÕfÖwÖՁÖÕŽÖ’Ö×ĸÖÕŦÖ°Ö×ŊÖÕĮÖËÖרÖÕâÖÕėÖđÖ××Õ × ×Õ+×/××<×ÕF×ÕL×`×q×…×Տן×ÕŠ×ē×ÕÄ×ÕŅ×å×ÕīרըØ*ØÕ4ØIØÕTØeØÕoØÕuØ‰Ø“ØØ§ØąØģØÆØĐØÚØäØîØųØŲŲŲ(ŲŲ<Ų@Ų×QŲÕ[Ų_Ų×pŲÕ{ŲŲ׌ŲÕ–ŲÕœŲ´ŲĶŲķŲÚÕÚÕÚ(Ú.Ú8ÚBÚVÚfmÚŲsÚŲƒÚŲŽÚÕ”ÚŲ¨ÚfšÚfČÚfĖÚ×ŨÚÕįÚÕņÚÕøÚfÛÕÛfÛ×.ÛÕ8Ûf<Û×MÛÕXÛfiÛÕsÛÕyÛf‘ÛfĻÛÕ°ÛfÅÛÕĐÛfáÛÕëÛÕņÛfÜfÜf-Üf7ÜfAÜfPÜfTÜ×eÜÕoÜfsÜׄÜՏÜf ÜÕĒÜÕ°ÜfÄÜ×ÔÜfŪÜfčÜf÷Üf ŨÕŨf+ŨÕ6ŨfGŨÕQŨÕWŨfkŨftŨf~ŨfˆŨfŦŨfļŨfĀŨfĘŨfÔŨfķŨŲ÷ŨŪ(Ū3Ū×BŪ×LŪÕVŪgŪrŪ|Ū†ŪŪšŪ¤ŪŽŪŋŪhÕŪŲßŪŲīŪŲúŪÕßŲßh%ßh4ßh8ß×IßÕSßÕ]ßÕdß×wßՁßh…ß×–ßÕ ßh¤ß×ĩßÕĀßhŅßÕÛßÕáßhųßhāÕāh-āÕ8āhIāÕSāÕYāhmāhwāh•āhŸāhŠāh¸āhŧā×ÍāÕ×āhÛā×ėāÕ÷āháÕáÕáh,á×<áhFáhPáh_áhtáÕ~áh“áÕžáh¯áÕšáÕŋáhĶáhÜáhæáhđáhâhâh(âh2âh<âhUâmâÕsâ×}âÕ“â՝âĄâ׎â×ŊâÍâŪâíâãÕ ãÕãã×,ãÕ7ãHã[ãkã€ãÕŠãÕ‘ã›ãĨã¯ãšãÃãÍãŨãŲáãūã%ä4äkKäŲQäŲaäŲläÕräŲ†äk—äkĻäkĒä×ģäÕÅäÕĪäÕÖäkíäÕ÷äkûä× åÕåkå×+åÕ6åkGåÕQåÕWåkoåk„åÕŽåkŖåÕŽåkŋåÕÉåÕĪåkãåkíåk ækækæk.æk2æ×CæÕMækQæ×bæÕmæk~æÕˆæÕŽækĸæ×˛ækŧækÆækÕækęæÕôæk įÕįk%įÕ/įÕ5įkIįkRįk\įkfįkŠįk”įkžįk¨įk˛įkËįãįÕéį×ķįÕ čč)č>čÕHčÕSčWč×hčÕsčwčׄčדčŸč×­čÕˇčģč×ĖčÕÖčÚč×įčÕņčÕũčéÕé?éJéYéjé}ééĸéÕŦéÕŗéŊéĮéŅéÛéëéŲīé ę-ęCęŲQęŲ]ęŲvęŲÁęŲĪęŲáęŲåęë×6ëAë×OëÕUë×_ëÕiëÕsëÕ}ëՍëÕ—ëÕĄëĨë×ļëÕŧëĶë×ë×äë×ķëėėÕė×-ėÕ3ė×CėGė×XėÕbėfė×sėÕyėׇėÕ‘ė•ė×ĻėÕ­ė¸ėČėŨėÕįėūėÕí%íÕ/í@íÕFíXí\í×ií×xíˆíŖíÕ­íĘíÕÔíåíÕîí×üíÕî î×îÕ%î)î×6îÕ@îÕLîPî×aîÕkîÕqî×{îÕ…î‰î×–îÕ îÕĒîÕ´îÕîŲî×čî×īī*īÕ4īEīÕOī`īÕsīˆīÕ’īŖīÕ­īžīÕŅīøīüī×đđ×+đ/đ×<đÕHđYđlđ|đ€đבđÕ—đץđÕ§đąđģđÅđĪđŲđãđíđ÷đņ ņ×ņÕ&ņÕ-ņ7ņAņQņUņ×fņÕlņ×vņÕ€ņÕŠņŽņ×–ņ×ĨņŗņŊņĮņŅņŨņėņnōŲ ōŲōŲ'ōÕ-ōŲAōnRōnaōneō×vōÕ€ōÕŠōÕ‘ōפōÕŽōn˛ō×ÃōÕÍōnŅō×âōÕíōnūōÕķÕķn&ķn;ķÕEķnZķÕeķnvķÕ€ķÕ†ķnšķn¤ķnÂķnĖķnÖķnåķnéķ×úķÕônô×ôÕ$ôn5ôÕ?ôÕEônYô×iônsôn}ônŒônĄôÕĢônĀôÕËônÜôÕæôÕėônõn õnõnõnAõnKõnUõn_õniõnõŲ—õŲĻõŲÉõŲĶõŲâõöõŲö× öŲöÕöŲ/öFö‡RögöÕqöÕ|ö€öבöÕ—öĻöĒö×ģöÕÁöĐöÔö×åöÕīöÕõö÷Õ ÷÷×"÷Õ,÷Õ2÷=÷G÷W÷n÷Ķu÷€÷‹÷š÷Ž÷Ųģ÷×Å÷ŲĐ÷ÕÚ÷Ū÷×ī÷Õû÷Ķø ø×øÕø×+øÕ5øJøÕVøeøzøÕ†ø‘ø›øĨø¯øšøÄøÔøØø×éøÕķø÷ø×ųÕ ųųų×/ųÕ9ų=ų×JųÕTųÕ^ųbų×nųÕxųÕ‚ų†ų×’ųÕœų ų×­ųÕˇųĖųÕ×ųÛų×čųÕōųÕøųúú×)úÕ3ú7ú×DúÕJú×TúÕ^úsúÕúŽúŖúÕ¯úēúÄúÎúØúâúķúûÕ ûû û*ûGûŲQûŲeûŲiû†ûûĨûŲŽûŲ¸ûŲÅûŲŌûŲ˙ûŲ%üŲ>üŲGüŲQüŲ]üŲiüŲwüŲ‰üpüŲĒüŲĩüÕËü×ÕüŲéüpūüÕũÕũÕũp,ũÕ6ũÕ@ũÕJũpZũÕdũÕjũpwũp{ũ×’ũÕ˜ũpŖũp§ũ׸ũÕÂũÕŌũpÖũ×ãũÕíũÕũũpū×ūÕūÕ$ū×.ūÕ8ūp<ū×IūÕSūÕ_ū×iūÕsūp„ūÕŽūÕ˜ūpœū׊ūÕŗūÕšūpĪūpĶū×äūÕôūpøū×˙Õ˙p!˙p%˙×6˙Õ@˙pD˙×Q˙Õ[˙p_˙×p˙Õ{˙p˙׌˙Õ–˙Õœ˙pĩ˙pÆ˙ÕĐ˙pá˙Õë˙p Õ p Õ& Õ, pB ×L ŲY Ųd Õj Ųu Õ{ Ų† Ր p” ×Ĩ Õ¯ Õš Õŋ ×É ÕĶ põ p Õ p ×4 Õ? pC ×T Õ` ×j pz ÕŠ pš Õ¤ ÕŽ Õ´ pÆ pĘ ×Û Õå Õī Õų pũ ×  Õ Õ Õ' p+ ×7 ÕA ÕG pT pX ×o Õ Õ‰ p ×  Õ° Õē pž ×Ë ÕÛ Õá ×ë Õõ pų × Õ Õ ×% Õ/ pC ÕS pc Õo p{ p• Õ› pĨ pą pģ pÅ pŲ pŨ ×ô Õū Õ p ×% Õ/ Õ? pC ×P ÕZ Õf ×p Õz p~ ׊ Õ” Õ  ×Ē Õ´ pÎ ÕØ pî Õô p p Õ Õ$ p. p: pD pN pb p} Õ‡ Õ‘ pĄ ÕĢ Õą pŋ pĪ ÕŲ Õã pķ Õũ p  Õ p( Õ2 pG ÕR pc Õm Õs p‘ p˛ Õ¸ pÆ pâ Õė p Õ p  p; ÕE ÕO p_ Õi Õo py pŠ pĢ Õą pŋ pÛ Õå p Õ p p4 Õ> pT Õ^ pn Õx p‰ Õ“ p¨ Õŗ pÄ ÕÎ ÕÔ pë põ p˙ p p p3 ŲT h Ųu Ų… ׏ Ųš Õ¤ ¨ ך ÕÅ ĶĐ Ô ×á Õį ×õ Õ˙  Õ / D ÕP [ e o y ƒ Ž ž ĸ ×ŗ ÕŊ Á ×Î ÕÔ ä č ×ų Õ Õ " Õ, Õ6 Õ@ P ÕZ Õd Õn ~ Õˆ ÕŽ — Ļ Ē ×ģ ÕÅ É ×Ö ÕÜ ×æ Õđ  Õ  5 ÕA L V ` j t … – Õœ ¨ ˛ ŧ Ū Ųč Ųõ Ų Ų Ų) Ų- e ×| € ב Õ— Ļ ģ ÕÅ Ö Õā ÷ Õ Õ  ×# Õ- Õ3 B F ×W Õa e ×v Ձ … ×’ Õœ Õĸ ē ž ×Ī ÕŲ Ũ ×ę Õô ø ×  Õ  ×% Õ/ Õ5 N c Õm ~ Õˆ  Õ¨ š Õà ÕÉ â  ! 2 Õ< ÕB V ` k ‡ Ų  r¯ Ų¸ Ų ŲĖ ÕŌ Ųá Ųđ ×ú Ų Õ r ×" Õ, Õ6 r: ×F ÕP ÕZ rn Õx r Õ˜ rŠ Õŗ Õš rŅ rå Õī r Õ r  Õ* Õ0 rD rJ rP r\ rp Õz Õ€ rŽ rž Õ¨ Õ˛ r ÕČ rŌ rÜ ræ rņ r Ų Ų Ų& Ų3 ŲR Ųv Ųœ Ų¯ tà ŲĐ Ųđ ×ú Ų t ×# Õ- Õ7 ÕA tE ×Q Õ[ Õe Õo ts × Õ‰ Õ“ t§ Õą tÆ ÕŅ tâ Õė Õō t  t Õ( t= ÕH tY Õc Õi t} tƒ t‰ t– tš ×Ģ Õĩ Õŋ tĶ ÕŨ tō Õũ t Õ Õ t6 tJ ÕT ti Õt t… Տ Õ• tŠ t¯ tĩ tĀ tÕ Õß Õé Õķ t Õ Õ Õ" t3 Õ= ÕG ÕM t[ Õe tv Õ€ ÕŠ Ր tž Õ¨ tš Õà ÕÍ tŅ ×á Õë Õņ t t Õ Õ$ t3 tC ÕM ÕS ti tm ×~ Õˆ Õ’ t– ×Ļ Õ° Õļ tÅ tÉ ×Ų Õã Õé tø tü × Õ Õ t( t, ×= ÕG tK ×[ Õe ti ×z Õ… t‰ ×– Õ  ÕĻ tž t ×Ō ÕÜ tņ Õü t ×  Õ Õ t5 t9 ×E ÕO td Õo ts ×€ ÕŠ Ր tĨ tŦ ×ļ Ųà ŲÎ ÕÔ Ųß Õå Ųđ Õú tū × Õ Õ# Õ) ×3 Õ= t_ tp Õƒ t‡ מ ÕŠ t­ מ ÕĘ ×Ô tä Õô t Õ Õ Õ t0 t4 ×E ÕO ÕY Õc tg ×s Õ} Õ‡ Õ‘ t• ץ ÕĢ Õĩ tÉ ÕĶ tč Õķ t Õ Õ t, t@ ÕJ t_ Õj t{ Õ… Õ‹ tŸ tĨ tĢ t¸ tŧ ×Ķ ÕŨ Õí tņ × Õ Õ t" ×/ Õ9 ÕE ×O ÕU tg tk ׂ Õ’ Õœ t  ×ŗ Õà ÕÍ tŅ ×Ū Õî Õô ×ū Õ t t ×1 Õ; ÕE tI ×] ×g tk ×} Õ‡ t‹ ×— ÕĄ tĨ ׹ Õģ tŋ ×Ī ÕŲ tî Õų tũ × Õ Õ t2 t6 ×F ÕP te Õp tt ׁ Õ‹ Õ‘ tŠ tš Õà tØ Õã tô Õū Õ! t"! tC! ÕI! tW! ts! Õ}! t™! ÕŸ! tą! tĩ! ×Ō! ÕØ! ×â! tū! Õ" t$" Õ*" t<" tc" t{" t‰" tŸ" ÕŠ" t­" ך" Õŋ" tÎ" té" Õķ" t # Õ# t# t!# t+# t5# t?# tI# tT# t^# t}# Ųž# ˛# Ųŋ# ŲĶ# č# Õķ# ÷# ×$ Õ$ Õ$  $ ×-$ Õ7$ ÕA$ E$ ×V$ Õ`$ Õj$ Õt$ x$ ׄ$ ÕŽ$ Õ˜$ Õĸ$ Ļ$ ײ$ Õŧ$ ÕÆ$ Ú$ Õä$ ų$ Õ% % Õ% Õ%% =% [% {% Œ% Õ–% Õœ% °% ļ% ŧ% Å% Õ% ę% Õņ% & Ų & 3& 7& ×H& ÕR& Õ\& `& ×q& Õ{& Õ…& Տ& “& ן& ÕŠ& Õŗ& ÕŊ& Á& ×Í& Õ×& Õá& õ& Õ˙& ' Õ' 0' Õ:' Õ@' X' v' –' §' Õą' Õˇ' Ë' Ņ' ×' ā' ë' ú' Ųū' (( ,( ×<( ÕF( ÕP( T( ×e( Õo( Õy( Õƒ( ‡( ד( ՝( Õ§( Õą( ĩ( ×Á( ÕË( ÕÕ( é( Õķ( ) Õ) $) Õ.) Õ4) L) j) Š) ›) ÕĨ) ÕĢ) ŋ) Å) Ë) Ô) ß) î) * Ų* Ų#* '* ×8* ÕB* ÕL* P* ×\* Õf* Õp* t* ×…* Տ* Õ™* ÕŖ* §* ×ŗ* ÕŊ* ÕĮ* ÕŅ* Õ* ×á* Õë* Õõ*  + Õ+ (+ Õ3+ D+ ÕN+ ÕT+ l+ Š+ Ē+ ģ+ ÕÅ+ ÕË+ ß+ å+ ë+ ô+ , , Ų#, Ų-, Ų9, ŲE, ŲW, Ųc, Ųl, Ų‰, Ųĸ, ŲĻ, vē, ÕŌ, ×ā, Õę, vî, ×ū, Õ- Õ- v- ×"- Õ,- Õ6- vK- ÕU- vj- Õu- v†- Ր- Õ–- vĒ- v°- vŧ- vĐ- ÕÚ- Õā- vî- vū- Õ. Õ. v". Õ(. v2. v<. vF. vQ. vf. Ųo. Ųy. Ų†. Ų“. ŲĀ. Ųæ. Ųų. x / Ų/ Ų:/ ×D/ ŲX/ x\/ ×m/ Õw/ Ձ/ Õ‹/ x/ ×›/ ÕĨ/ Õ¯/ Õš/ xŊ/ ×É/ ÕĶ/ ÕŨ/ xō/ Õü/ x0 Õ0 x-0 Õ70 Õ=0 xQ0 xW0 xd0 xh0 ×y0 Õƒ0 Ս0 xĸ0 ÕŦ0 xÁ0 ÕĖ0 xŨ0 Õį0 Õí0 x1 x1 x1 x'1 Õ11 Õ;1 ÕE1 xV1 Õ`1 Õj1 Õt1 x…1 Տ1 Õ™1 ÕŸ1 x­1 Õˇ1 xČ1 ÕŌ1 ÕÜ1 Õâ1 xđ1 Õú1 x 2 Õ2 Õ2 x42 Õ>2 ÕD2 xS2 xd2 Õn2 Õt2 xŠ2 xŽ2 ן2 ÕŠ2 Õŗ2 xˇ2 ×Č2 ÕŌ2 ÕØ2 xį2 xë2 ×ø2 Õ3 Õ3 x3 x3 ×-3 Õ73 x;3 ×L3 ÕV3 xZ3 ×k3 Õv3 xz3 ׇ3 Õ‘3 Õ—3 x¯3 xŗ3 ×Ā3 ÕĘ3 xß3 Õę3 xî3 ×û3 Õ4 Õ 4 x 4 x'4 ×14 Ų>4 ŲI4 ÕO4 ŲZ4 Õ`4 Ųk4 Õu4 xy4 ׊4 Õ”4 Õž4 Õ¤4 ׎4 Õ¸4 xÚ4 xë4 Õū4 x5 ×5 Õ$5 x(5 ×95 ÕE5 ×O5 x_5 Õo5 x5 Õ‰5 Õ“5 Õ™5 xĢ5 x¯5 ×Ā5 ÕĘ5 ÕÔ5 ÕŪ5 xâ5 ×î5 Õø5 Õ6 Õ 6 x6 ×6 Õ&6 Õ06 xE6 ÕO6 xd6 Õo6 x€6 ÕŠ6 Ր6 x¤6 xĒ6 xˇ6 xģ6 ×Ō6 ÕÜ6 Õæ6 Õđ6 xô6 ×7 Õ7 Õ7 Õ%7 x)7 ×67 Õ@7 ÕJ7 ÕP7 ×Z7 Õd7 xh7 ×t7 Õ~7 Õˆ7 ÕŽ7 ט7 Õĸ7 xĻ7 ×ļ7 ÕĀ7 ÕĘ7 xÎ7 ×Ú7 Õä7 Õî7 x8 Õ 8 x"8 Õ-8 x>8 ÕH8 ÕN8 xb8 xh8 xt8 x•8 xŖ8 xģ8 ÕÅ8 xÉ8 ×Õ8 ÕÛ8 xå8 xī8 xų8 x 9 x9 ×(9 Õ89 ÕB9 xF9 ×Y9 Õi9 Õs9 xw9 ׄ9 Õ”9 Õš9 פ9 ÕĒ9 xŧ9 xĀ9 ××9 Õá9 Õë9 xī9 ×: × : x: ×#: Õ-: x1: ×=: ÕG: xK: ×W: Õa: xe: ×v: Õ€: x„: ו: ÕŸ: ÕĨ: xŧ: xÍ: ÕŲ: xŨ: ×ę: Õô: x ; Õ; x; ×%; Õ/; Õ5; xS; xt; Õz; xˆ; x¤; ÕŽ; xĘ; ÕĐ; xâ; x < x!< x/< xE< ÕO< xS< ×_< Õe< xt< xx< ו< Õ›< ×Ĩ< xÁ< ÕË< xį< Õí< x˙< x= Õ$= x:= Õ@= xH= xR= x\= xf= xp= xz= x…= x= xŠ= Ų˛= Ųŧ= ŲÉ= ŲÖ= Ųî= Ųø= Ų> Ų> Ų"> Ų.> Ų:> ŲV> Ųz> Ž> Ų›> ŲĢ> Ųģ> ×Å> ŲĐ> ÕÖ> Ųá> Õë> ī> ×? Õ ? Ķ? ? ×(? Õ.? ×N ÕDN TN iN ÕsN ÕyN ˆN §N ĮN ØN ÕâN ÕčN üN O &O Ų0O Ų=O ŲYO mO ŲŠO ŲžO ĸO ×ŗO ÕŊO ÕĮO ÕŅO æO ÕđO P ÕP !P Õ+P Õ1P EP KP VP ZP ×kP ÕuP yP ׊P Õ”P ˜P ׊P Õ´P ¸P ×ÅP ÕĪP ÕÕP íP ņP ×ūP ÕQ  Q ×Q Õ(Q ,Q ×9Q ÕCQ ÕIQ ^Q hQ rQ xQ ‘Q Ų•Q ˇQ ÁQ ĐQ đQ ŲR × R ŲR "R ×5R Ķ@R ÕFR ×SR cR gR ×xR Õ~R R ‘R ×ĸR ÕŦR Õ˛R ŧR ËR ĪR ×āR ÕęR îR ×˙R Õ S S ×S Õ%S Õ+S CS GS ×XS ÕbS fS ×wS Õ‚S †S דS ՝S ÕŖS ģS ĐS ÕÚS ęS ÕôS T ÕT ÕT 1T Õ;T KT ÕUT fT ÕpT Õ}T ’T ÕœT ąT ÕŧT ÍT Õ×T ÕŨT õT  U ÕU )U Õ4U EU ÕOU ÕUU iU sU zU ŠU ŲŽU yĸU yÁU yØU  ãU yúU ÕV ÕV y'V ö2V yIV ÕUV öbV yfV ×yV -„V yˆV ×—V -ĸV yĻV ×´V -žV yÄV yÎV yØV yâV yėV yöV yüV yW yW yW y W y*W y0W y:W yDW yNW yXW ybW ylW yvW y|W y†W yW yšW y¤W yĒW y´W yžW yÄW yÎW yØW yäW ŲđW ŲüW ŲX ŲX „$X 0X €BJN]ajnw{†Š›ŸŽ˛ēžÍŅÚŪįëöú *.6:IMVZcgrv‡‹“—ĻĒŗˇĀÄĪĶäčøü/3<@IMX\eiz~‘˜œ¤¨°´ÃĮÎŌÚŪîōaaa#a37?CJNW[jn‚†Ž’™ĻĒšŊŅÕŨáčėõų  $,07;DHW[os{†Š“—ĻĒžÂĘÎÕŲâæõų ,08<KOX\cgƒ‡“—¨Ŧ´¸ĮËĶ׿ęķ÷ū".2CGOSbfnr…Ž’™šŊÉÍŪâęîũ   )-48TXdhy}…‰˜œ¤¨ˇģÄČĪĶīķ˙ $+/8<KO`dsw†Š™ĻĒąĩÎŌãįîōųũ   ! + / C G P T _ c t x  ĶŒ  — › ĸ Ļ ­ ą ģ ŋ Æ Ę Ü ā ė đ       / 3 ; ? F J S W ^ b r v }  ˆ Œ – š Ą Ĩ ˇ ģ  Æ Í Ņ Ú Ū å é ō ö ũ      ' + 4 8 ? C L P W [ j n u y ‹  – š Ŧ ° š Ŋ Ņ Õ æ ę û ˙   % ) 8 g< gE gI g] ga gj gn gu gy gŠ gŽ g iĄ i¨ iŦ i´ i¸ iŋ ià iĶ i× iā iä iđ iô iũ i i i i" i& i- i1 iB iF iM iQ i` kd km kq k… k‰ k˜ kœ kĢ k¯ kļ kē kà kĮ kÖ kÚ ká kå kî kō kų kũ kkkkk(k,k5k9kJkNkWk[kdkhkoksk„kˆkk“kĸkĻk¯kŗkĮkËkãkįkökúkkk%m)m0m4mDmHmQmUmimmm|m€mm“mšmžm§mĢmēmžmÅmÉmŌmÖmŨmámōmöm˙mm mmmm.m2m;m?mHmLmSmWmhmlmsmwm†mŠm“m—mĢm¯mĮmËmÚmŪmömúm o oo o/o3o:o>oGoKoZo^oeoiorovo}oo’o–oŸoŖoŦo°oˇoģoĖoĐo×oÛoęoîoõoųo o o%o)o8o<oToXogkrv}‹–𤍎ģÃĮĐÔŨáęî÷û "&-18<CGNRaelpw{„ˆ“œ §ĢŧĀĮ]ĖĐ×]äčđôü  $48?COS_cjnz~’–Ą¨ŦŗˇÆĘŅÕÜāīķú]˙ ]]'+26?CTX`dtx‰žĸąĩžÂĶ×Ūâņõü #'6:A]FJQ]^bimvzƒ‡Ž’›Ÿ¨ŦŗˇČĖÔØāäėđøü $(15<@IM^bkox|…‰šžĨŠĩšÅÉÕŲčėũ *.=AJNUYjn}ˆŒ”˜ ¤Ŧ°¸ŧĖĐāäíņøü  $+/AELPW[mqx|Œ˜œĢ¯ļēÆĘŅÕéíü'+;?NRZ^fjz~‘˜œŖ§Ž˛šŊĖĐ×Ûęî +/CuGuPuTu]uaujunuuƒu‹uu–ušuĄuĨu´u¸uĀuÄuËuĪuÖuÚuéuíuųuũuu uuu&Ķ3u7u>uBuQuUueuiuu…uŒuuŸuŖuģuŋuÎuŌuęuîuũuuuu,08<DHX\dhpt„ˆ”œ °´ŧĀČĖÜāįëōöū '+;?HLUYmqz~‡‹’–§Ģ˛ļÅÉĐÔãįđôũ!(,;?GKRVeiz~‘™Ž˛ÂÆÎŌáåîōû˙   # , 0 < @ L P d h o s {  Š Ž Ą Ĩ Ž ˛ ž  Ö Ú á å õ ų !!!! !$!4!8!@!D!T!X!_!c!k!o!v!z!Š!Ž!•!™!¨!Ŧ!´!¸!Č!Ė!Ô!Ø!č!ė!õ!ų!""""" "1"5"D"H"O"S"Z"^"f"j"r"v"~"‚"Š"Ž"ž"ĸ"˛"ļ"ŋ"Ã"Ė"Đ"Ų"Ũ"æ"ę"û"˙"####'#+#2#6#E#I#P#]]#a#h#l#s#w#†#Š#‘#•#Ĩ#Š#°#ĶŊ#Á#Õ#Ų#é#í#ū#$$$'$+$@$D$M$Q$Z$^$g$k$|$€$‰$$–$š$Ŗ$§$¸$ŧ$Ã$Į$Ķ$×$ã$į$ö$ú$%%%%#%'%6%:%C%G%N%R%c%g%v%wz%w‚%w†%w•%w™%wĸ%wĻ%w¯%wŗ%wŧ%wĀ%wÉ%wÍ%wŪ%wâ%wé%wí%wô%wø%w&w &w&w&w(&w,&w5&w9&wB&wF&wW&w[&wd&wh&wq&wu&w~&w‚&w“&w—&wĻ&wĒ&wą&wĩ&wÅ&wÉ&wÚ&wŪ&wå&wé&wø&wü&w'w'w'w'w!'w%'w4'w8'w?'wC'wS'wW'w_'wc'wl'wp'w'w…'wŽ'w’'w™'w'wŽ'w˛'wÁ'Å'Ė'Đ'Ø'Ü'ä'č'đ'ô'ü'(( (((((,(5(9(M(Q(X(\(c(g(w({(‡(‹(—(›(§(Ģ(ˇ(ģ(Į(Ë(×(Û(ī(ķ()) ))))%)))1)5)=)A)I)M)U)Y)i)m)v)z)Ž)’)™))¤)¨)¸)ŧ)Č)Ė)Ø)Ü)č)ė)ø)ü)* ***0*4*C*G*P*T*h*l*s*w**ƒ*–*š*Š*­*´*¸*Ā*Ä*×*Û*â*æ*í*ņ*ú*ū* ++++%+)+0+4+E+I+R+V+g+k+t+x++…+Œ++™++¤+¨+š+Ŋ+Ä+Č+×+Û+ä+č+ų+ũ+, ,,,,",3,7,>,B,Q,U,^,b,k,o,x,|,,‘,š,ž,§,Ģ,˛,ļ,ŋ,Ã,Ę,Î,×,Û,â,æ,÷,û,----%-)-2-6-J-N-U-Y-i-m-|-€-‡-‹-›-Ÿ-Ļ-Ē-ą-ĩ-ž-Â-Ņ-Õ-Ü-ā-é-í-ô-ø- . ...+./.8.<.E.I.P.T.].a.h.l.}..ˆ.Œ.›.Ÿ.¨.Ŧ.Ŋ.Á.Ę.Î.×.Û.â.æ.÷.û.////"/&///3/2B2R2V2_2c2w2{2‡2‹2”2˜2Ŧ2°2¸2ŧ2Ë2Ī2Ø2Ü2í2ņ2ø2ü23333$3(30343E3I3R3V3e3i3p3Ķ}333‘3š3ž3˛3ļ3ž3Â3Ņ3Õ3Ū3â3ķ3÷3ū34 444#4*4.464:4K4O4V4Ķc4g4s4w44…4™44Ĩ4Š4¸4ŧ4Å4É4Ú4Ū4í4ņ455 5Ķ55(5,565:5N5R5Z5^5m5q5z5~55“5ĸ5Ļ5ĩ5š5Ā5ĶÍ5Ņ5Ų5Ũ5ė5đ5ü56666!6(6,6<6@6I6M6V6Z6e6i6r6v6ˆ6Œ6”6˜6§6Ģ6ˇ6ģ6Ė6Đ6Ø6Ü6ã6į6÷6û67777 7$7-717C7G7N7R7Y7]7e7i7t7x7ƒ7‡7–7š7Ŗ7§7°7´7ģ7ŋ7Č7Ė7Ø7Ü7ë7ī7ū78888#8+8/8?8C8L8P8Y8]8f8j8s8w8€8„8‹88˜8œ8¨8Ŧ8ģ8ŋ8Î8Ō8ã8į8đ8ô8ũ899 999%9)989<9K9O9`9d9m9q9z9~9…9‰9’9–9ĸ9Ļ9ĩ9š9Č9Ė9Ũ9á9ę9î9÷9û9:::::#:2:6:E:I:Z:^:f:j:r:v:†:Š:“:—: :¤:­:ą:ē:ž:Å:É:Ō:Ö:â:æ:õ:ų:; ;;!;*;.;7;;;B;F;O;S;_;c;r;v;…;‰;š;ž;Ļ;Ē;˛;ļ;Æ;Ę;Ķ;×;ā;ä;í;ņ;ø;ü;< <<<(<,<;<?<P<T<]<a<j<n<u<y<‚<†<’<–<Ĩ<Š<¸<ŧ<Í<Ņ<Ų<Ũ<å<é<ų<ũ<= ===="=.=2=A=E=T=X=i=m=t=„=…=Œ==™==Š=­=ŧ=Ā=×=Û=â=†ī=ķ=ü=>> >>>$>(>7>;>R>V>]>‡j>n>u>y>‚>†>’>–>Ĩ>Š>Ā>Ä>Ë>AØ>Ü>å>é>đ>ô>ũ>? ?? ?$?;???F?ŽS?W?`?d?k?o?x?|?ˆ?Œ?›?Ÿ?ļ?ē?Ã?Į?Î?Ō?ã?į?ö?ú?@@@@#@'@6@:@C@G@N@R@c@g@v@z@ƒ@‡@Ž@’@Ŗ@§@ļ@ē@Ã@Į@Î@Ō@ã@į@ö@ú@AAAA#A'A6A:AAAEATAXAaAeAlApAyA}AŽA’A™A‚žAĸAŠA‚ļAēAÁAÅAÎAŌAãAįAîA„ķA÷AūA„ BBBB#B'B0B4BEBIBPB†UBYB`B†mBqBxB|B…B‰BšBžBĨB‡ĒBŽBĩB‡ÂBÆBĪBĶBÚBŪBįBëBüBCCA CCCA$C(C1C5CR]KROR_RcRjRnRvRzR‚R†R•R™R R¤R´R¸RČRĖRĶR×RįRëRķR÷RūRS SSSS)S-S5S9S@SDSKSOS^SbSkSoS~S‚S’S–SĻSĒSēSžSÅSÉSÜSāSįSëSūST T T T$T+T/TBTFTMTQTdThToTsT†TŠT‘T•T¨TŦTŗTˇTžTÂTÔTØTßTãTõTųTUU UUUU2U6U=UAUKUOUdUhUoUsU†UŠU U¤UŽU˛UÉUÍUÜU~āU~éU~íU~ųU~ũU~V~ V~V~"V~+V~/V~6V~:V~CV~GV~NV~RV~[V~_V~fV~jV~{V~V~†V~ŠV~–V~šV~ŠV~­V~ļV~ēV~ËV~ĪV~ØV~ÜV~åV~éV~đV~ôV~ũV~W~W~ W~W~!W~(W~,W~;W~?W~HW~LW~]W~aW~jW~nW~wW~{W~‚W~†W~—W~›W~ĸW~ĻW~ĩW€šW€ÂW€ÆW€ŌW€ÖW€ßW€ãW€÷W€ûW€X€X€X€X€X€ X€'X€+X€aEaIaXa\aeaiaravaaƒa”a˜aĄaĨaŽa˛aģaŋaĐaÔaÛaßaîaōaûa˙ab bbb*b.b7b;bDbHbYb]bfbjbsbwbˆbŒb“b—b b¤bĢb¯bĀbÄbÕbŲbâbæbíbņbcccc*c.c7c;cBcFcWc[cjcncucycˆcŒc“c—cĻcĒcšcŊcÍcŅcØc‡åcécøcüc dddd&d*d2d6d?dCdUdYdjdndvdzd‰dd—d›dĸdĻdŽd˛dģdŋdŅdÕdædędüdee eee&e*e1e5eEeIePeTe]eaepete{ee†eŠešežeĨeŠe°e´eÃeĮeĪeĶeÚeŪeåeéeųeũef fff#f'f7f;fCfGfVfZfafefufyf€f„fŽf’fœf f§fĢfĩfšfÃfĮfÎfŌfÜfāfįfëfũfgg gggg"g*g.g6g:gIgMgWg[gbgfgxg|g‹gg–gšg¤g¨g˛gļgŊgÁgËgĪgágågīgķgũgh hh!h%h,h0hlBlIlMlVlZlclglnlrl{ll†lŠl“l—lĻlĒląlĩlžlÂlËlĪlÖlÚlãlįlølülmmmmm!m(m,m5m9mJmNmUmYmbmfmomsmzm~m‡m‹mœm m§mĢm´m¸mÁmÅmĖmĐmŲmŨmîmōmûm˙mn nnn*n.n5n9nHnLnUnYnbnfnonsn„nˆn‘n•nžnĸnĢn¯nĀnÄnËnĪnÛnßnënīnūnooo o$o+o/o@oDoSoWoholouoyo€o„o•o™o¨oŦoŗoˇoÆoĘoŅoÕoŨoáoéoíoõoųo p ppp p$p,p0p?pCpLpPpWp[pdphpqpup~p‚p‹pp–pšpŖp§pļpēpÂpÆpÖpÚpápåpípņpųpũpq qqq(q,q5q9q@qDqKqOq^qbqkqoq€q„qq‘qĸqĻq­qąqĀqÄqÍqŅqÚqŪqįqëqôqøq r rrrr#r*r.r5r9rHrLr[r_rhrlrsrwrˆrŒr›rŸr¨rŦrĩršrÂrÆr×rÛrärčrņrõrūrssss"s.s2s>sBsQsUs\sismsvszs‰ssžsĸsĢs¯sļsēsËsĪsŪsâsësīsösús ttt"t)t-t5t9t@tDtTtXt_tctstwt†tŠt‘t•ttĄtŠt­tĩtštÉtÍtÔtØtčtėtķt÷tuu uu u$u+u/u7u;uBuFuVuZuaueuuuyu‚u†uu‘uĸuĻuĩušuČuĖuÕuŲuāuäuõuųuv vv!v*v.v5v9vJvNv]vavhvlvtvxv€v„v“v—vĻvĒvąvĩvžvÂvÉvÍvŪvâvķv÷vūvwww&w*w;w?wNwRwcwgwxw|w‹ww˜wœwŖw§w¸wŧwËwĪw×wÛwãwįwīwķwûw˙wx xxx&x*x3x7x@xDxKxOxXx\xexixpxtx}xxˆxŒx•x™x x¤x­xąx¸xŧxÅxÉxĐxÔxåxéxņxõxũxy y yyy!y%y-y1yAyEyLyPyYy]yfyjyqyuy~y‚y‹yy–yšyĄyĨy´y¸yÉyÍyÖyÚyáyåyöyúy z zzz!z%z.z2z9z=zFzJzSzWz^zbzizmzvzzzz…zŽz’z™zzŽz˛zģzŋzČzĖzÕzŲzâzæzīzķzüz{{{{ {/{3{;{?{G{K{[{_{|{€{ˆ{Œ{”{˜{¨{Ŧ{ĩ{š{Â{Æ{×{Û{â{æ{í{ņ{|| ||||-|1|@|D|M|Q|b|f|o|s|„|ˆ||“|ĸ|Ļ|¯|ŗ|Ä|Č|Ņ|Õ|æ|ę|ņ|õ|}}}}+}/}@}D}U}Y}h}l}}}}’}–}Ĩ}Š}ē}ž}Į}Ë}Ō}Ö}į}ë}ú}ū}~ ~~~-~1~8~<~K~O~_~c~j~n~}~~‘~•~¤~¨~ˇ~ģ~Ë~Ī~Ö~Ú~é~í~ô~ø~ "15=APTcgnry}Œ ¤Ģ¯žÂËĪÖÚëīū€ € €€ €)€-€>€B€K€O€`€d€k€o€~€‚€‘€•€¤€¨€ˇ€ģ€€ƀĪ€Ķ€â€æ€í€ņ€ú€ū€ '+48?CTX_crv…‰ĄĨ´¸Ёԁãįīķúū‚ ‚‚‚%‚)‚0‚4‚C‚G‚O‚S‚Z‚^‚m‚q‚€‚„‚‹‚‚§‚Ģ‚˛‚]ŋ‚ÂĶ‚ׂŪ‚]ë‚ī‚÷‚û‚ƒƒƒƒ!ƒ%ƒ-ƒ1ƒ8ƒ<ƒLƒPƒYƒ]ƒiƒmƒvƒzƒŽƒ’ƒ™ƒƒĨƒЃ°ƒ´ƒăȃ҃Ճáƒåƒîƒōƒ„ „„„„!„1„5„<„@„H„L„S„W„g„k„r„v„†„Š„š„ž„­„ą„Á„ńԄ؄č„ė„ķ„]ø„ü„…]…………'…+…;…?…F…]K…O…V…]c…g…n…r…y…}…Œ……—…›…Ē…Ž…ĩ…š…ȅĖ…Ķ…]؅܅ã…]đ…ô…û…˙…††††,†0†7†;†J†N†]†a†q†u†„†ˆ†˜†œ†̆¯†ŋ†ÆʆΆՆŲ†č†ė†ô†ø†‡‡‡‡(‡,‡8‡<‡P‡T‡[‡_‡f‡j‡y‡}‡…‡‰‡™‡‡¤‡¨‡ˇ‡ģ‡ˇ·Ū‡â‡ņ‡õ‡ü‡ˆˆ ˆˆ ˆ'ˆ+ˆ3ˆ7ˆGˆKˆ[ˆ_ˆfˆjˆzˆ‰~ˆ‰‡ˆ‰‹ˆ‰—ˆ‰›ˆ‰Ŧˆ‰°ˆ‰šˆ‰Ŋˆ‰Äˆ‰Čˆ‰Ųˆ‰Ũˆ‰äˆ‰čˆ‰÷ˆ‰ûˆ‰‰‰‰‰‰‰!‰%‰,‰0‰9‰=‰F‰J‰Y‰]‰d‰h‰q‰u‰‚‰†‰“‰—‰ωlj˛‰ļ‰Į‰ˉŌ‰։߉ã‰ė‰đ‰˙‰Š ŠŠŠŠ!Š%Š-Š1Š9Š=ŠFŠJŠZŠ^ŠfŠjŠzŠ~Š…Š‰Š–ŠšŠ§Š̊˛ŠļŠĮŠˊԊ؊åŠéŠöŠúŠ‹‹‹‹,‹0‹A‹E‹L‹P‹Y‹]‹n‹r‹z‹~‹Ž‹’‹¤‹¨‹¯‹ŗ‹ģ‹ŋ‹Ī‹Ķ‹ė‹đ‹ŒŒŒ"Œ*Œ.Œ6Œ:ŒJŒNŒVŒZŒjŒnŒzŒ~Œ’Œ–ŒŒĄŒ´Œ¸ŒŋŒ]ČȌΌ]܌āŒéŒíŒöŒúŒ .29Ķ>BIĶNRYĶ^biĶnryĶ~‚‰ĶŽ’™ĶĻĒŗˇĀčՍŲčėøüŽ ŽŽŽ-Ž1Ž8Ž]=ŽAŽHŽ]UŽYŽbŽfŽuŽyŽ€ŽĶ…މސŽĶ•ޙޠŽĶĨŽŠŽ°ŽĶĩŽšŽĀŽĶ͎ŅŽڎŪŽįŽëŽüŽ#,0?CTX_]lp…‘•žĸąĩŧĶɏ͏Ūâé]öú!]&*1]>BKOX\mq}АސĄ¨Ķ­ą¸ĶŐɐԐ֐ߐãôø‘ ‘‘‘$‘(‘7‘;‘L‘P‘Y‘]‘n‘r‘{‘‘‘”‘¤‘9¨‘9¯‘9ŗ‘9ē‘9ž‘9ȑ9Ė‘9Ķ‘9ב9é‘9í‘9ô‘9ø‘9’9’9’9’9’9’90’94’9;’pH’9L’9[’9_’9f’]s’9w’9†’9Š’9‘’]–’9š’9Ą’]Ļ’9Ē’9ą’]ž’9’9˒9Ī’9ؒ9ܒ9å’9é’9ú’9ū’9“]“9“9'“9+“92“]7“9;“9B“]O“9S“9b“9f“9o“9s“9|“9€“9‘“9•“9ž“9ĸ“9Ģ“9¯“9Ā“9ē9Ė“9Г9ā“9ä“9õ“9ų“9 ” ””” ”$”+”/”6”:”O”S”Z”^”f”j”q”u”Дޔ•”]š”ž”Ĩ”]ǔޔĩ”]”ƔΔ͔ܔā”ņ”õ”•••• •$•,•0•@•D•M•Q•Z•^•o•s•{••‡•‹•›•Ÿ•ϕǕą•ĩ•ĕȕΕ͕ڕŪ•í•ņ•ø•ü•––––!–%–,–0–?–C–L–P–Y–]–n–r–y–}–Œ––Ą–Ĩ–Ž–˛–š–Ŋ–ΖŌ–á–å–ė–pņ–õ–ü–p—— —p——&—*—3—7—H—L—X—\—k—o—v—]{——†—]‹——–—]Ŗ—§—°—´—Ŋ—Á—Ō—֗ߗã—ō—ö—ũ—Ķ˜˜ ˜Ķ˜˜˜Ķ*˜.˜7˜;˜D˜H˜Y˜]˜d˜]i˜m˜t˜]y˜}˜„˜]‘˜•˜ž˜ĸ˜ą˜ĩ˜ž˜˜˘Θā˜ä˜í˜ņ˜™™™™$™(™/™3™B™F™W™[™k™o™€™„™•™™™¨™Ŧ™ĩ™š™ʙΙŪ™â™é™]î™ō™ų™]ū™š š]šš#š'š0š4šEšIšUšYšhšlštšxš€š„š”š˜šĄšĨšޚ˛šÚĮšΚ͚ۚߚīšķšúšūš› ›››#›'›.›2›A›E›L›P›W›[›j›n›u›y›ˆ›Œ›•›™›Ē›Ž›ĩ›š›țĖ›՛Ų›ā›ä›õ›ų›œ œœpœœ#œp0œ4œ=œAœRœVœbœfœuœyœ€œ]…œ‰œœ]œĄœǜޜŋœÜ˜МߜãœęœĶīœķœúœĶ )-4]9=D]QU^bqu~‚“—¨ŦŊÁȝĖ۝ߝđôž žžž-ž1žAžEžLžPžXž\ždžhžožsž{žž‡ž‹ž“ž—žžžĸž˛žļžŊžpžƞ͞pڞŪžåžéžōžöž˙žŸŸŸ"Ÿ&Ÿ5Ÿ9Ÿ@ŸĶEŸIŸPŸĶ]ŸaŸhŸlŸuŸyŸ‚Ÿ†Ÿ•Ÿ™Ÿ Ÿ¤ŸŦŸ°Ÿ¸ŸŧŸ˟ПܟāŸéŸíŸüŸ      ! % 4 8 @ D T X _ c j n u y € „ “ — ž ]Ŗ § Ž ]ģ ŋ Æ Ę Ķ × ā ä ķ ÷ ĄĄĄĄ!ĄĶ&Ą*Ą1ĄĶ>ĄBĄIĄMĄVĄZĄcĄgĄvĄzĄ‰ĄĄ™ĄĄĻĄĒĄšĄŊĄÎĄŌĄÛĄߥđĄôĄĸĸĸĸĸĸ(ĸ,ĸ3ĸ7ĸAĸEĸLĸPĸbĸfĸoĸsĸ|ĸ€ĸ‰ĸĸ–ĸšĸĢĸ¯ĸģĸŋĸÎĸŌĸŲĸĶŪĸâĸéĸĶöĸúĸŖŖŖŖŖ!Ŗ*Ŗ.Ŗ7Ŗ;ŖLŖPŖaŖeŖnŖrŖ{ŖŖˆŖŒŖ•Ŗ™ŖĸŖĻŖˇŖģŖÄŖČŖŅŖÕŖŪŖâŖëŖīŖ¤¤ ¤¤¤¤,¤0¤8¤<¤K¤O¤`¤d¤o¤s¤‚¤†¤—¤›¤ǤޤŊ¤Á¤ʤΤפÛ¤ä¤č¤ų¤ũ¤Ĩ ĨĨĨ Ĩ$Ĩ5Ĩ9ĨAĨEĨUĨYĨbĨfĨoĨsĨ|Ĩ€Ĩ‘Ĩ•ĨžĨĸĨĢĨ¯Ĩ¸ĨŧĨÍĨŅĨØĨÜĨčĨėĨøĨüĨ ĻĻ Ļ$Ļ-Ļ1Ļ8Ļ<ĻMĻQĻ`ĻdĻuĻyĻ‰ĻĻĻĄĻĒĻŽĻĩĻšĻĘĻÎĻÕĻŲĻåĻéĻøĻüĻ §§§§$§(§9§=§D§H§T§X§g§k§{§§†§]‹§§–§]›§Ÿ§ϧ]̧¯§ļ§]çĮ§ΧŌ§Ų§Ũ§ä§č§÷§û§¨¨¨¨$¨(¨1¨5¨F¨J¨Q¨U¨\¨`¨o¨s¨¨ƒ¨’¨–¨¨Ą¨¨¨Ŧ¨ģ¨ŋ¨ƨʨҍÕ¨Ū¨â¨é¨í¨ö¨ú¨ Š ŠŠŠ!Š%Š5Š9ŠBŠFŠWŠ[ŠdŠhŠyŠ}Š„ŠˆŠ—Š›ŠĸŠĶ§ŠĢОŠĶŋŠÊĖŠĐŠáŠåŠîŠōŠĒĒĒĒ-Ē1Ē@ĒDĒUĒYĒiĒmĒ~ǂǒǖǧĒĢǴǏĒŋĒÃĒÔĒØĒįĒëĒüĒĢĢĢ#Ģ'Ģ.Ģ2Ģ9Ģ=ĢFĢJĢWĢ[ĢhĢlĢsĢwĢ€Ģ„Ģ‘Ģ•ĢĸĢĻĢ­ĢąĢēĢžĢÅĢÉĢŌĢÖĢŨĢáĢęĢîĢũĢŦ ŦŦŦŦ!Ŧ%Ŧ-Ŧ1Ŧ9Ŧ=ŦEŦIŦYŦ]ŦeŦiŦyŦ}Ŧ„ŦˆŦ‘Ŧ•ŦĸŦĻŦŗŦˇŦžŦÂŦËŦĪŦÜŦāŦíŦņŦøŦüŦ­ ­­­­!­(­,­5­9­H­L­U­Y­b­f­s­w­„­ˆ­‘­•­ž­ĸ­¯­ŗ­Ā­Ä­Í­Ņ­Ú­Ū­į­ë­ô­ø­ŽŽŽŽ#Ž'Ž6Ž:ŽBŽFŽNŽRŽbŽfŽmŽqŽ~Ž‚ŽŽ“ŽšŽžŽĢŽ¯ŽŧŽĀŽĮŽËŽŌŽÖŽįŽëŽôŽøŽ¯¯¯¯!¯%¯1¯5¯A¯E¯N¯R¯[¯_¯p¯t¯„¯ˆ¯™¯¯¤¯¨¯°¯´¯ŧ¯Ā¯Č¯Ė¯Ô¯Ø¯ā¯ä¯ė¯đ¯°° °°°°)°-°:°>°E°I°R°V°c°g°t°x°°ƒ°Œ°°—°›°¤°¨°š°Ŋ°Ä°Č°Đ°Ô°Ü°ā°į°ë°ķ°÷°˙°ą ąąąą(ą,ą5ą9ąBąFąOąSą\ą`ąiąmą~ą‚ą–ąšąŖą§ą°ą´ąŊąÁąŌąÖąßąãąėąđąųąũą˛˛!˛%˛6˛:˛C˛G˛N˛R˛c˛g˛v˛z˛‰˛˛˛Ą˛¨˛Ŧ˛ŗ˛ˇ˛ž˛²ɲͲÔ˛Ø˛߲ã˛ō˛ö˛ũ˛ŗŗ ŗŗŗ&ŗ*ŗ1ŗp6ŗ:ŗAŗpFŗJŗQŗpVŗZŗaŗpnŗrŗyŗ}ŗ„ŗˆŗŗ“ŗĸŗĻŗ˛ŗļŗÅŗÉŗĐŗÕŗŲŗāŗåŗéŗđŗõŗųŗ´ ´´´´#´'´.´2´A´E´L´]Q´U´\´]a´e´l´]q´u´|´]‰´´”´˜´Ÿ´Ŗ´Ē´Ž´Ŋ´Á´Ę´δŨ´á´č´í´ņ´ø´ũ´ĩĩ ĩĩĩ%ĩ)ĩ0ĩ4ĩ;ĩ?ĩFĩJĩYĩ]ĩfĩjĩyĩ}ĩ„ĩ]‰ĩĩ”ĩ]™ĩĩ¤ĩ]Šĩ­ĩ´ĩ]ÁĩÅĩĖĩĐĩ×ĩÛĩâĩæĩõĩųĩļļļļ ļ%ļ)ļ0ļ5ļ9ļ@ļEļIļPļ]ļaļhļlļsļwļ~ļ‚ļ‘ļ•ļžļĸļąļĩļŧļ]ÁļÅļĖļ]ŅļÕļÜļ]áļåļėļ]ųļũˇˇˇˇ-ˇ1ˇ:ˇ>ˇMˇQˇXˇĶ]ˇaˇhˇĶmˇqˇxˇĶ}ˇˇˆˇĶˇ‘ˇ˜ˇĶĨˇЎ°ˇ´ˇģˇŋˇÆˇʡŲˇŨˇäˇ]éˇíˇôˇ]ųˇũˇ¸] ¸ ¸¸]!¸%¸,¸0¸7¸;¸B¸F¸U¸Y¸b¸f¸u¸y¸€¸…¸‰¸¸•¸™¸ ¸Ĩ¸Џ°¸Ŋ¸Á¸ȸˏ͏׸Ū¸â¸ņ¸õ¸ū¸šššš]!š%š,š]1š5š<š]AšEšLš]Yš]šdšhšošsšzš~šš‘šššžš­šąš¸šĶŊšÁšČšĶÍšŅšØšĶŨšáščšĶõšųšēē ēēēē)ē-ē4ē]9ē=ēDē]IēMēTē]Yē]ēdē]qēuē|ē€ē‡ē‹ē’ē–ēĨēŠē˛ēļēÅēÉēĐēÔēÛēßēæēęēųēũēģģģģģģ'ģ+ģ2ģ6ģ?ģCģRģVģ^ģbģjģnģvģzģŠģŽģ—ģ›ģ¤ģ¨ģšģŊģÆģĘģÛģßģčģėģũģŧŧ ŧŧŧ0ŧ4ŧDŧHŧYŧ]ŧmŧqŧ‚ŧ†ŧŧ“ŧšŧžŧ¯ŧŗŧÂŧÆŧ×ŧÛŧëŧīŧöŧpûŧ˙ŧŊp ŊŊŊpŊŊ&Ŋp3Ŋ7Ŋ>ŊBŊIŊMŊTŊXŊgŊkŊrŊwŊ{Ŋ‚Ŋ‡Ŋ‹Ŋ’Ŋ—Ŋ›ŊĸŊ¯ŊŗŊēŊžŊÅŊÉŊĐŊÔŊãŊįŊîŊ]ķŊ÷ŊūŊ]žžž]žžž]+ž/ž6ž:žAžEžLžPž_žcžjžĶožsžzžĶžƒžŠžĶž“žšžĶ§žĢž˛žļžŊžÁžČžĖžÛžßžæž]ëžīžöž]ûž˙žŋ] ŋŋŋ]#ŋ'ŋ.ŋ2ŋ9ŋ=ŋDŋHŋWŋ[ŋbŋgŋkŋrŋwŋ{ŋ‚ŋ‡ŋ‹ŋ’ŋŸŋŖŋĒŋŽŋĩŋšŋĀŋÄŋĶŋ×ŋŪŋ]ãŋįŋîŋ]ķŋ÷ŋūŋ]ĀĀĀ]ĀĀ&Ā*Ā1Ā5Ā<Ā@ĀOĀSĀZĀ^ĀeĀiĀpĀtĀƒĀ‡ĀŽĀ’Ā™ĀĀ¤Ā¨ĀąĀĩĀŧĀĀĀÉĀÍĀÜĀāĀčĀėĀôĀøĀÁÁÁÁ!Á%Á.Á2ÁCÁGÁPÁTÁeÁiÁrÁvÁ‡Á‹Á’Á–ÁĨÁŠÁēÁžÁÎÁŌÁãÁįÁ÷ÁûÁ ÂÂÂÂ$Â(Â9Â=ÂLÂPÂaÂeÂuÂy€Âp…‰Âp•™ ÂpĨаÂpŊÂÁÂČÂĖÂĶÂ×ÂŪÂâÂņÂõÂÃÃÃÃÐ$Ã(Ã/Ð4Ã8Ã?ÐDÃHÃOÐ\Ã`ÃgÃkÃrÃvÃ}ÁÐÔÛÃ] Ã¤ÃĢÃ]°Ã´ÃģÃ]ĀÃÄÃËÃ]ØÃÜÃãÃįÃîÃōÃųÃũà ÄÄÄĶÄ Ä'ÄĶ,Ä0Ä7ÄĶ<Ä@ÄGÄĶTÄXÄ_ÄcÄjÄnÄuÄyĈČēÄ]˜ÄœÄŖÄ]¨ÄŦÄŗÄ]¸ÄŧÄÃÄ]ĐÄÔÄÛÄßÄæÄęÄņÄõÄÅÅÅÅ$Å(Å/Ő4Å8Å?ŐDÅHÅOŐTÅXÅ_ŐlÅpÅwÅ{Å‚Å†ÅÅ‘Å Å¤Å­ÅąÅĀÅÄÅËÅ]ĐÅÔÅÛÅ]āÅäÅëÅ]đÅôÅûÅ]Æ ÆÆÆÆ"Æ)Æ-Æ<Æ@ÆIÆMÆ\Æ`ÆgÆkÆrÆvÆ}ƁƐƔƛƟÆĻÆĒÆąÆĩÆžÆÂÆÉÆÍÆÖÆÚÆéÆíÆõÆųÆĮĮ ĮĮ!Į%Į.Į2Į;Į?ĮPĮTĮ]ĮaĮrĮvĮĮƒĮ”Į˜ĮŸĮŖĮ˛ĮļĮĮĮËĮÛĮßĮđĮôĮČČČČ&Č*Č1Č5ČFČJČYČ]ČnČrČ‚Č†ČČ”Č›ČŸČŠČ­ČˇČģČÍČŅČÛČßČæČęČôČøČ˙ČÉ ÉÉÉÉ1É5É=ÉAÉQÉUÉ_ÉcÉjÉnÉxÉ|ɆɊɜɠɧÉĢÉĩÉšÉÃÉĮÉÎÉŌÉŲÉŨÉįÉëÉúÉūÉĘ ĘĘĘ(Ę,Ę3Ę7Ę?ĘCĘKĘOĘYĘ]ĘdĘhĘrĘvʀʄʎʒʤʨʹĘĩĘÁĘÅĘŅĘÕĘßĘãĘėĘđĘúĘūĘË ËËË,Ë0ËAËEËOËSËZË^ËpËtË{Ëˉˍ˗˛ËĸËĻËĩËšËČËĖËÕËŲËęËîËöËúË ĖĖĖ"Ė+Ė/Ė@ĖDĖUĖYĖ`ĖdĖnĖrĖ|Ė€Ė‡Ė‹ĖšĖžĖ¨ĖŦĖžĖÂĖŲĖŨĖįĖëĖõĖųĖ ÍÍÍÍ'Í+Í=ÍAÍKÍOÍYÍ]ÍoÍsÍ}ÍÍ‹ÍÍĄÍĨÍ¯ÍŗÍŊÍÁÍĶÍ×ÍŪÍâÍņÍõÍ˙ÍÎÎÎ#Î'Î9Î=ÎGÎKÎ]ÎaÎkÎo΁΅ΏΓΚΞΨÎŦΞÎÂÎĖÎĐÎ×ÎÛÎåÎéÎķÎ÷Î Ī ĪĪĪ"Ī&Ī0Ī4Ī>ĪBĪQĪUĪ]ĪaĪqĪuĪĪƒĪŠĪŽĪ˜ĪœĪĻĪĒĪŧĪĀĪĘĪÎĪÕĪŲĪãĪįĪîĪōĪüĪĐ ĐĐĐĐ.Đ2Đ:Đ>ĐNĐRĐ\Đ`ĐgĐkĐuĐyĐƒĐ‡ĐŽĐ’Đ™ĐĐ¯ĐŗĐŧĐĀĐĘĐÎĐØĐÜĐåĐéĐōĐöĐŅ ŅŅ!Ņ3Ņ7ŅRŅVŅ]ŅaŅ|Ņ€Ņ›ŅŸŅēŅžŅáŅåŅīŅķŅúŅūŅŌ ŌŌŌ$Ō(Ō:Ō>ŌHŌLŌVŌZŌlŌpŌzŌ~ŌˆŌŒŌžŌĸŌŠŌ­ŌˇŌģŌÅŌÉŌØŌÜŌæŌęŌôŌøŌ ĶĶĶĶ&Ķ*Ķ<Ķ@ĶGĶKĶZĶ^ĶhĶlĶ~Ķ‚ĶŒĶĶĸĶĻͰʹͯĶĘĶÔĶØĶęĶîĶøĶüĶÔÔÔ Ô'Ô+Ô5Ô9ÔCÔGÔYÔ]ÔgÔkÔrÔvԀԄԋԏԙԝԧÔĢÔŊÔÁÔÉÔÍÔŨÔáÔëÔīÔöÔúÔÕÕÕÕ(Õ,Õ6Õ:ÕAÕEÕOÕSÕ]ÕaÕkÕoՁՅ՗՛ÕĢÕ¯ÕšÕŊÕÄÕČÕĐÕÔÕÜÕāÕęÕîÕøÕüÕÖÖÖÖ+Ö/Ö;Ö?ÖIÖMÖWÖ[ÖmÖqÖ‚Ö†ÖÖ”Ö›ÖŸÖąÖĩÖČÖĖÖĶÖ×ÖáÖåÖīÖķÖ× ×××%×)×8×<×M×Q×Z×^×o×s×z×~׍בטל×Ĩ׊װ״×Ŋ×Á×Ę×Î×Õ×Ų×ę×î×÷×û× ØØØØ$Ø(Ø/Ø3Ø<Ø@ØQØUØ^ØbØsØwØ€Ø„Ø•Ø™ØŖØ§ØšØŊØĮØËØŌØÖØāØäØîØōØŲŲŲŲ3Ų7Ų?ŲCŲSŲWŲfŲjŲ€Ų„ŲŽŲ’ŲœŲ Ų˛ŲļŲĀŲÄŲÎŲŌŲäŲčŲōŲöŲÚÚÚÚ$Ú(Ú2Ú6ÚHÚLÚVÚZÚdÚhÚzÚ~Ú…Ú‰Ú˜ÚœÚĻÚĒÚŧÚĀÚĘÚÎÚāÚäÚîÚōÚÛÛÛÛ(Û,Û6Û:ÛAÛEÛOÛSÛeÛiÛsÛwÛ~ۂیېۚ۞۰۴۞ÛÂÛÉÛÍÛ×ÛÛÛâÛæÛđÛôÛūÛÜÜÜ Ü$Ü4Ü8ÜBÜFÜMÜQÜ[Ü_ÜiÜmÜ܃܍ܑܘܜÜĻÜĒÜąÜĩÜŋÜÃÜÍÜŅÜÛÜßÜņÜõÜŨ ŨŨŨ)Ũ-Ũ4Ũ8Ũ@ŨDŨLŨPŨZŨ^ŨhŨlŨ~Ũ‚Ũ‹ŨŨ›ŨŸŨĢŨ¯ŨšŨŊŨĮŨËŨŨŨáŨōŨöŨŪŪ ŪŪ!Ū%Ū8Ū<ŪCŪGŪQŪUŪ_ŪcŪuŪyŪŠŪŽŪ•Ū™Ū¨ŪŦŪŊŪÁŪĘŪÎŪßŪãŪęŪîŪũŪßß ßßß ß$ß-ß1ß:ß>ßEßIßZß^ßgßkß|ß€ß‡ß‹ß”ß˜ßŸßŖßŦß°ßÁßÅßÎßŌßãßįßđßôßā āāā)ā-ā7ā;āBāFāPāTā[ā_āiāmāwā{āā‘āĄāĨāŧāĀāČāĖāÜāāā÷āûāáááá&á*á4á8á?áCáMáQá[á_áqáuááƒáŠáŽá˜áœáŖá§áąáĩáŋáÃáÕáŲáčáėáõáųá ââââ*â.â>âBâKâOâ`âdâuâyâƒâ‡âŽâ’âœâ âĒâŽâĀâÄâÎâŌâäâčâ˙âã ãããã1ã5ã?ãCãMãQãcãgãqãuããƒã•ã™ãŖã§ãąãĩãĮãËãÕãŲãããįãųãũãääää%ä)ä;ä?äIäMä_äcämäqäƒä‡ä‘ä•ä§äĢäĩäšäĀäÄäÎäŌäääčäđäôäûä˙äåååå%å)å8å<åCåGåOåSåZå^åfåjåqåuå}ååˆåŒå”å˜åŸåŖåĢå¯åļåēåÅåÉåŅåÕåÜåāåčåėåķå÷å˙åæææ"æ&æ-æ]:æ>æOæSæ_æcærævæ}æĶп޿ŸæŖæĒæŽæžæÂæŅæÕæÜæ]éæíæūæįįį!į%į,į]9į=įNįRį^įbįqįuį|į]‰įįžįĸįŽį˛įÁįÅįĖį]ŲįŨįîįōįūįčččč!č1č5čFčJčRčVčfčjčyč}čŽč’čščžčŽč˛čÁčÅčĖč]ŲčŨčîčōčûč˙čéé#é'é8é<éHéLé[é_éfé]séwéˆéŒé•é™é¨éŦéŊéÁéĘéÎéÕéŲéęéîéõéųéę ęęę-ę1ę:ę>ęEęIęZę^ęmęqę‚ę†ę—ę›ęĢę¯ęĀęÄęÔęØęāęäęëęīęøęüęëëëëëë,ë0ë7ë;ëJëNëWë[ëdëhëyë}ë„ëˆë—ë›ë¤ë¨ëąëĩëÆëĘëŲëŨëéëíëöëúë ė ėė"ė)ė].ė2ė9ė]>ėBėIė]VėZėcėgėvėzėė]†ėŠė‘ė]–ėšėĄė]Žė˛ėģėŋėÎėŌėÛėßėčėėėũėí íííí-í1í8í]=íAíHí]MíQíXí]eíiíríví…í‰í’í–íŸíŖí´í¸íÁíÅíÎíŌíãíįíîíōíîîîî#î'î0î4îEîIîPîTî`îdîsîwî€î„î‹îî—î›îŖî§î°î´îŊîÁîŌîÖîŨî]âîæîíî]ōîöîũî]īī ī]īī'ī+ī4ī8īAīEīVīZīcīgīvīzī‹īī˜īœīŖī§ī¸īŧīËīĪīāīäīíīņīøīüī đđ đ$đ-đ1đBđFđOđSđdđhđxđ|đđ‘đĄđ’Ĩđ’Ŧđ’°đ’¸đ’ŧđ’Ëđ’Īđ’Øđ’Üđ’čđ’ėđ’ũđ’ņ’ ņ’ņ’ņ’ņ’*ņ’.ņ’5ņ’9ņ’Hņ’Lņ’Sņ’Wņ’gņ”kņ”rņ”vņ”…ņ”‰ņ”’ņ”–ņ”Ÿņ”Ŗņ”Ēņ”Žņ”ŋņ”Ãņ”Ęņ”Îņ”Ũņáņęņîņ÷ņûņ ōōō ō/ō3ō:ōĶ?ōCōJōĶOōSōZōĶ_ōcōjōĶoōsōzō͇ō‹ō”ō˜ōĄōĨōŽō˛ōÃōĮōÖōÚōæōęōķō÷ōķ ķķķ&ķ*ķ9ķ=ķDķHķWķ[ķbķ]oķsķ„ķˆķ”ķ˜ķĄķĨķ´ķ¸ķĮķËķÜķāķėķđķųķũķ ôôô]ô ô'ô],ô0ô7ô]DôHôQôUô^ôbôkôoô€ô„ôô”ôôĄô°ô´ôģôĶĀôÄôËôĶĐôÔôÛôĶčôėôõôųôõõõõ$õ(õ7õ;õGõKõTõXõgõkõ|õ€õ‡õ]”õ˜õŠõ­õšõŊõÆõĘõŲõŨõėõđõ÷õ]öööö)ö-ö6ö:öIöMö^öbönörö{ööŽö’ö›öŸö¨öŦöĩöšöĘöÎö×öÛöäöčöņöõö÷ ÷÷÷ ÷$÷-÷1÷B÷F÷M÷Q÷Y÷]÷e÷i÷r÷v÷÷ƒ÷Š÷Ž÷—÷›÷ĸ÷Ļ÷ˇ÷ģ÷Ä÷Č÷Ņ÷Õ÷Ū÷â÷ķ÷÷÷ū÷ø ø øø ø'ø+ø4ø8øAøEøLøPø_øcøjønøuøyøˆøŒø“ø—ø ø¤ø­øąøĀøÄøÍøŅøÚøŪøīøķøúøūø ųų"ų&ų/ų3ų:ų>ųOųSųbųfųoųsų|ų€ų‘ų•ųžųĸųĢų¯ų¸ųŧųÍųŅųŲųŨųíųņųúúúú"ú&ú.ú2úBúFúOúSú\ú`úiúmú~ú‚úŠúŽú–úšúĒúŽúˇúģúÄúČúŅúÕúæúęúķú÷úûûûû"û&û/û3ûDûHûPûTûdûhûoûsû‚û†ûû“û¤û¨û¯ûŗûÂûÆûĪûĶûäûčûøûüû üüüü%ü)ü:ü>üOüSücügü{üü†üŠü‘ü•üœü üŠü­üŧüĀüÉüÍüÖüÚüãüįüîüōüũũũũ ũ$ũ8ũ<ũLũPũWũ[ũbũfũoũsũ‚ũ†ũũ“ũœũ ũąũĩũÁũÅũÔũØũáũåũöũúũūūūū!ū%ū.ū2ūCūGūPūTū]ūaūrūvū}ūūˆūŒū›ūŸū¯ūŗūŧūĀūŅūÕūŪūâūķū÷ūūū˙˙˙˙ ˙(˙,˙<˙@˙P˙T˙e˙i˙r˙v˙}˙˙’˙–˙Ĩ˙Š˙ē˙ž˙Î˙Ō˙ã˙į˙÷˙û˙$(7;CGOS[_os|€‰žĸĒŽļēÂÆÖÚãįđôũ"*.6:JNUY`dsw~‚‹˜œŖ§°´ģŋÆĘŲŨäčīķ '+26?CJN]ajnw{„ˆ™¤¨ˇģÄČĪĶäč÷û"37@DMQZ^os|€‰–šĢ¯ļēÃĮĐÔÛßîōųũ !15=AQU\`imvz‰–𪧏ŧÃĮÖÚáåíņ*.?CRV_clp…‘ĄĨļēĘÎ×Ûäčųũ (,59BFW[dhqu†Š’–ĻĒąĩÄČŅÕæęņõ&*15F–J–Q–U–d–h–w–{–‚–†–•–™–ĸ–Ļ–ˇ–ģ–Â–Æ–Õ–Ų–â–æ–í–ņ–––˜˜ ˜$˜,˜0˜8˜<˜C˜G˜W˜[˜c˜g˜o˜s˜ƒ˜‡˜˜”˜›˜Ÿ˜°˜´˜ÃšĮšÎšŌšÚšŪšæšęšųšũš š š š š% š) š9 š= šD šH šP šT š\ š` šg šk š{ š š š“ šœ š  š§ šĢ šŧ šĀ šĪ Ķ Û ß į ë ķ ÷ ˙      ( , 3 7 C G W [ k o v Ķƒ ‡ — › ĸ ͝ ŗ ē ]ŋ à Ę ]Ī Ķ Ú ]į ë ō ö ũ     ! ( ]- 1 8 ]E I Q U e i y } † Š ‘ • Ļ Ē š Ŋ Ä Č × Û ä č ų ũ     , 0 A E T X h l s Ķ€ „ ” ˜ Ÿ ĶŦ ° ŧ Ā Į Ë × Û į ë      Ķ, 0 @ D K ĶX \ m q z ~ … ‰ š ž ­ ą  Æ Ī Ķ Ú Ū ī ķ &*15EIQU\`imtx‡‹šž¨ŦļēĖĐÚŪčėķ÷%);?IMW[bfx|ƒ‡–𤍝ŗÅÉØÜæęôø &*<@JNX\nr|€ŠŽ ¤Ģ¯žÂĖĐâæđô *.8<NR\`gkuy‹–šĄĨ¯ŗÂÆÍŅØÜæęųũ 04<@GKRV_crvƒ”˜ ¤´¸ÍŅÚŪīķü /3CGW[bfz~‡‹’–§ĢēžÅÉŲŨæęķ÷ "&-18<CGOS[_fjz~’–ŸŖŦ°šŊÎŌÛßčėõų %)59HLUY`duyˆŒ•™ĸϝŗŧĀŅÕÜāįëōöū )-AENR[_hl}ŠŽ—›¤¨šŊÄČÔØäč÷û$(7;JNUYbfw{‹–𤍝ŗŊÁČĖÖÚáåīķúū !%,0:>EISW^blpw{…‰”žĸŠ­ļēĖĐ×Ûâæđôû˙  '+26=AHLSW^bimtxƒŠŽ•™ ¤Ģ¯ļēÁÅĖĐÚŪåéû˙]"15<]IMTXgkr]ƒŠŽĄ¨]ĩšĀÄĶ×Ū]ëīöú  ]!%,0?CJ]W[bfuy€]‘˜œĢ¯ļ]ÃĮÎŌáåė]ųũ"&04;?HL^bim|€‡‹’–¨ŦģŋĐÔÛßîō#'6:AEMQaetx‰–šĄĨļēÉÍŪâëīöú ")-7;BFPT[_qu|€ŠŽ•™Ŗ§Ž˛ÄČĪ]Üāįëũ ")-48AEW[bfmqƒ‡Ž’™¯ŗģŋĘÎáåíņū   # ' / 3 ; ? N R Z ^ m q x ]… ‰ ˜ œ Ŗ ]° ´ à Į Ö Ú â æ õ ų !!!!!!%!-!1!8!4¤B4¤Q4¤U4¤_4¤c4¤u4¤y4¤ƒ4¤‡4¤™4¤4¤¤4¤¨4¤ˇ4¤ģ4¤Ė4¤Đ4¤á4¤å4¤ī4¤ķ4¤ũ4¤5¤5¤5¤!5¤%5¤/5¤35¤E5¤I5¤S5¤W5¤a5¤e5¤w5¤{5¤…5¤‰5¤“5¤—5¤Š5¤­5¤ˇ5¤ģ5¤Å5¤É5¤Û5¤ß5¤æ5¤ę5¤ų5¤ũ5¤6¤ 6¤6¤!6¤+6¤/6¤A6¤E6¤O6¤S6¤e6¤i6¤s6¤w6¤‰6¤6¤—6¤›6¤­6ą6Á6Å6Ô6Ø6č6ė6ũ6777%7)70747C7G7X7\7m7q7€7„7•7™7ĸ7Ļ7­7ą7Â7Æ7Õ7Ų7â7æ7í7ņ78888!8%8,80898=8D8H8O8S8b8f8v8z8Š8Ž8•8™8 8¤8Ģ8¯8ž8Â8É8Í8Ü8ā8į8ë8ķ8÷89 99Ķ99"9Ķ/939G9K9S9W9g9k9t9x9‰999Ą9˛9ļ9Ë9Ī9Ø9Ü9í9ņ9ú9ū9::::-:1:B:F:O:S:Z:^:o:s:‚:†:—:›:¤:¨:¯:ŗ:Ä:Č:×:Û:ė:đ:ų:ũ:;;;;,;0;9;=;D;H;Y;];l;Ļp;Ļx;Ļ|;Ļ„;ψ;Ϙ;Ϝ;ĻĨ;ĻŠ;Ϟ;Ļļ;ĻĮ;ĻË;ĻÔ;ĻØ;Ļé;Ļí;Ļö;Ļú;Ļ <Ļ<Ļ<#<*<.<6<:<B<F<N<R<Z<^<n<r<y<}<<“<š<ž<Ļ<Ē<˛<ļ<ŋ<Ã<Ė<Đ<Ų<Ũ<æ<ę<û<˙<=] ===]#='=.=2=;=?=H=L=S=W=`=d=m=q=x=|=‹==–=š=ą=ĩ=Ė=Đ=×=Û=ō=ö= >>>>;>?>F>J>S>W>`>d>k>o>x>|>…>‰>˜>œ>Ŗ>§>ž>Â>Ų>Ũ>ä>č>˙>???%?)?H?L?S?W?^?b?i?m?t?x?‡?‹?”?˜?Ÿ?Ŗ?´?¸?Į?Ë?Ō?Ö?ß?ã?ė?đ?÷?û?@@@@&@*@3@7@@@D@U@Y@`@d@p@t@ƒ@‡@@”@Ĩ@Š@°@´@Å@É@Đ@Ô@ã@į@ø@ü@A AAA%A)A8AFĒBFĒKFĒOFĒ`FĒdFĒtFxFFƒFŒFF—F›FŦF°FˇFģFĘFÎFÖFÚFâFæFîFōFGGGG#G'G8GIEIIIPITI[I_IgIkIrIvI~I‚I‰II”I˜I I¤IŗIˇIžIÂIŅIÕIÜIāIįIëIōIöIūIJ J JJJ J$J+J/J7J;JJJNJUJYJiJmJvJzJƒJ‡J˜JœJŖJ§JļJēJÃJĮJĐJÔJŨJáJęJîJ˙JK KKKK&K*K3K7KHKLKSKWKcKgKvKzKƒK‡K˜KœKĨKŠKēKžKÅKÉKØKÜKãKįKîKōKųKũK LL!L%L.L2LCLGLPLTLeLiLpLtLƒL‡LŽL’L™LL¤L¨L¯LŗLēLžLÍLŅLáLåLėLđL˙LM MMMM&M*M;M?MHMLMUMYMbMfMwM{M‚M†M•M™M M¤MĢM¯MžMÂMŌMÖMŨMáMčMėMûM˙MN NNN'N+N2N6NHNLNSNWN^NbNqNuN|N€NN“NŖN§NŽN˛NÁNÅNÎNŌNãNįNđNôNO OOO#O'O8OTGTKTTTXTiTmTtTxT‡T‹T“T—T§TĢT˛TļTÅTÉTÚTŪTįTëTōTöTU UUU/U3UaHaLaSaWaiama|a€a‘a•aŸaŖaĒaŽaĀaÄaĶa×ačaėaöaúabbbb*b.b?bCbMbQbXb\bnbrbb…bŽb’b™bbĻbĒb´b¸bÁbÅbĖbĐbŲbŨbæbębķb÷būbcccc#c3c7c>cBcJcNcVcZcccgcpctc…c‰c’c–ccĄc¨cŦcģcŋcČcĖcŨcácčcėcûc˙cd ddd.d2dCdGdVdZdcdgdqdud~d‚d‹dd˜dœdĨdŠdēdždĮdËdÔdØdádådîdōdûd˙de ee!e*e.e7e;eDeHeQeUefejesewe€e„ee‘ešeže¯eŗeēežeÍeŅeÚeŪečeėeõeųe ffff$f(f1f5fFfJfQfUfafefrfvf…f‰ff”fœf f¨fŦfĩfšfÂfÆf×fÛfäfčfīfķfúfūf gggg/g3g:g>gMgQgXg\gkgogxg|gg‘gšgžg¯gŗgēgžgÍgŅgÚgŪgīgķgüghhhh h/h3hoOoSodohowo{o‚o]‡o‹o’o]—o›oĸo]§oĢo˛o]ŋoÃoĘoÎoÕoŲoāoäoíoņoøoüo ppp]p!p(p]-p1p8p]EpIpQpUp]papqpup~p‚p‰ppžpĸpąpĩpŧpĀpĪpĶpÜpāpņpõpüpqqqq q1q5q>qBqSqWq^qbqqquq~q‚q“q—q q¤qĩqšqĀqÄqĶq×qāqäqõqųqrrrr"r&r5r9rJrNrWr[rbrfrwr{rŠrŽrŸrŖrŦr°rˇrģrĖrĐrßrãrôrørss ss!s%s4s8sIsMsVsZsasesvszs‰ss”s˜sŸsŖs˛sļsŊsÁsČsĖsÛsßsīsķsúsūs tt!t%t4t8tGtKtTtXtatetntrt{ttt”t›tŸtŽt˛tštŊtÄtČt×tÛtât]įtëtōt]˙tu uuu!u(u,u;u?uFuJuYu]ulupu€u„u“u—u§uĢuēužuÎuŌuŲu]Ūuâuéu]öuúuvvvv!v%v.v2v;v?vPvTv]vavjvnvwv{vŒvv—v›vĒvŽvˇvģvÂvÆv×vÛvęvîvõv]úvūvw]www!w0w4wCwGwWw[wkwow~w‚w‘w•wœwpŠw­wĩwšwČwĖwĶw×wŪwâwęwîwũwx xxxx/x3xCxGxNxRxZx^xnxrx{xxx”xxĄxĩxšxČxĖxĶx×xæxęxņxpöxúxypyyyp&y*y9y=yNyRyayeyvyzy‰y¯y¯”ypĄyąĨyąŦyą°yąˇyąģyąĘyąÎyąÕy]âyŗæyŗíyŗņyŗøyŗüyŗ zŗzŗz]#zĩ'zĩ.zĩ2zĩ9zĩ=zĩDzĩHzĩWzĩ[zĩbz]ozˇszˇ‚zˇ†zˇ–zˇšzˇĄzpĻzˇĒzˇązpļzˇēzˇÁzpÎzˇŌzˇãzˇįzˇîz]ûzˇ˙zˇ{ˇ {ˇ{ˇ{ˇ.{ˇ2{ˇ9{p>{ˇB{ˇI{pV{ˇZ{ˇa{pn{r{y{p~{‚{‰{p–{š{Ą{pŽ{˛{Á{Å{Ė{]Ų{Ũ{í{ņ{ø{p| |||0|4|;|]H|L|[|_|f|]k|o|v|]ƒ|‡|Ž|p›|Ÿ|§|Ģ|˛|ļ|Ŋ|Á|É|Í|Ô|Ø|ā|ä|ë|ī|÷|û|}}}}"}&}-}]2}6}=}]B}F}M}]Z}^}h}l}v}z}„}ˆ}’}–}¨}Ŧ}ĩ}š}Č}Ė}Ö}Ú}ä}č}ō}ö}~~~~)~-~:~>~G~K~Z~^~p~t~{~]ˆ~Œ~™~~Ŧ~°~ˇ~]ŧ~Ā~Į~]Ė~Đ~×~]Ü~ā~į~]ô~ø~p$(/p<@JN`dk]x|Ž’Ŗ§šŊĘÎ×Ûęî˙€€€'€+€>€B€L€P€Z€^€p€t€{€€†€Š€’€–€§€Ģ€˛€ļ€ŀɀЀԀ܀ā€ņ€õ€pp,0:>EISWimt]…“šž°´ģ]ȁˁׁ́æęņ]ū‚‚‚&‚*‚9‚=‚Q‚U‚f‚j‚{‚‚Ž‚’‚Ŗ‚§‚¸‚ŧ‚˂Ī‚ւڂé‚í‚ô‚]ƒƒƒƒ!ƒ].ƒ2ƒCƒGƒXƒ\ƒcƒ]pƒtƒ…ƒ‰ƒ’ƒ–ƒ§ƒ̃´ƒ¸ƒɃ̓Ճ؃éƒíƒūƒ„„„„p"„&„-„p:„>„H„L„^„b„i„]n„r„y„]†„Š„”„˜„DŽބˇ„ģ„Ė„ЄڄŪ„đ„ô„…………!…%…,…]1…5…<…]I…M…W…[…m…q…z…~……‘…˜…]…Ą…¨…]ĩ…š…ÅĮ…Ų…Ũ…æ…ę…ų…ũ…† †††)†-†?†C†P†T†]†a†p†t†}††’†–†Ÿ†Ŗ†´†¸†ŋ†ÆŌ†ֆį†ë†ô†ø†˙†‡‡‡'‡+‡<‡@‡Q‡U‡d‡h‡o‡]t‡x‡‡]Œ‡‡š‡ž‡°‡´‡ģ‡]ȇˇŪ‡â‡ô‡ø‡ ˆˆˆˆ(ˆ,ˆ;ˆ?ˆQˆUˆfˆjˆyˆ}ˆ„ˆp‰ˆˆ”ˆpĄˆĨˆ¯ˆŗˆňɈЈ]Ũˆáˆķˆ÷ˆ‰ ‰‰"‰/‰3‰<‰@‰O‰S‰d‰h‰y‰}‰Œ‰‰Ą‰Ĩ‰ļ‰ē‰ɉ͉߉ã‰ô‰ø‰Š ŠŠ Š1Š5ŠDŠHŠRŠVŠ`ŠdŠnŠrŠ|Š€Š’Š–ŠŠĄŠNJފˇŠģŠŠƊ͊ҊāŠäŠëŠöđŠôŠûŠö‹‹ ‹ö‹‹‹ö(‹,‹3‹7‹@‹D‹M‹Q‹X‹\‹k‹o‹x‹|‹…‹‰‹’‹–‹§‹Ģ‹˛‹ļ‹ŋɋĶ‹׋á‹å‹÷‹û‹ŒŒŒŒ%Œ)Œ3Œ7ŒIŒMŒVŒZŒcŒgŒxŒ|ŒƒŒ‡Œ–ŒšŒŦŒ°ŒŒČ֌ڌäŒčŒīŒķŒ -1BFUšYšašešušyš…š‰š•š™šĨšŠšŊšÁšĘšÎš×šÛšäščšųšũšŽšŽšŽšŽš'Žš+Žš7Žš;ŽšOŽšSŽš\Žš`ŽšqŽšuŽš|Žš€ŽšŽš“ŽšœŽš Žš§ŽšĢŽšŧŽšĀŽšĪŽšĶŽšÜŽšāŽšįŽšëŽšüŽššģģģģ-ģ1ģ8ģ<ģKģOģXģ\ģmģqģzģ~ģ‡ģ‹ģœģ ģ§ģĢģˇģģģʏģΏģ׏ģۏģėģđģųģũģģģģģ,ģ0ģ9ģ=ģDģHģYģ]ģlģpģyģ}섐숐왐ģģŦŊ°ŊŧŊŊːŊАŊܐŊāŊôŊøŊ˙Ŋ‘Ŋ ‘Ŋ‘Ŋ‘Ŋ!‘Ŋ(‘Ŋ,‘Ŋ;‘Ŋ?‘ŊH‘ŊL‘Ŋ]‘Ŋa‘Ŋj‘Ŋn‘Ŋ‘Ŋƒ‘ŊŠ‘ŊŽ‘Ŋ‘ŊĄ‘ŊĒ‘ŊŽ‘Ŋŋ‘ŊÑŊĖ‘ŊБŊá‘Ŋå‘Ŋė‘Ŋđ‘Ŋ˙‘Ŋ’Ŋ ’Ŋ’Ŋ’Ŋ’Ŋ,’Ŋ0’Ŋ?’ŊC’ŊL’ŊP’ŊW’Ŋ[’Ŋl’Ŋp’Ŋ’ŋƒ’ŋŠ’ŋŽ’ŋ•’ŋ™’ŋŠ’ŋ­’ŋļ’ŋē’ŋÒŋĮ’ŋےŋߒŋæ’ŋę’ŋņ’ŋõ’ŋ“ŋ“ŋ“ŋ“ŋ"“ŋ&“ŋ/“ŋ3“ŋD“ŋH“ŋQ“ŋU“ŋf“ŋj“ŋq“ŋu“ŋ„“ŋˆ“ŋ‘“ŋ•“ŋĻ“ŋĒ“ŋŗ“ŋˇ“ŋȓŋĖ“ŋĶ“ŋדŋæ“ŋę“ŋķ“ŋ÷“ŋū“ŋ”ŋ”ŋ”ŋ&”ŋ*”ŋ3”ŋ7”ŋ>”ŋB”ŋS”ŋW”ŋf”Áj”Ár”Áv”Á~”Á‚”ÁŠ”ÁŽ”Á–”Áš”Áĸ”ÁĻ”Áļ”Áē”ÁÁ”ÁŔÁΔÁŌ”Á۔ÁߔÁæ”Áę”Áķ”Á÷”Áū”Á•Á •Á•Á•Á•Á%•Á)•Á0•Á4•Á=•ÁA•ÁH•ÁL•Á]•Áa•Ár•Áv•Á•Áƒ•ÁŠ•ÁŽ•ÁŸ•ÁŖ•Á˛•Áļ•ÁŊ•ÁÁ•ÁʕÁΕÁՕÁŲ•Áâ•Áæ•Áī•Áķ•Áü•Á–Á –Á –Á–Á"–Á)–Á-–Á4–Á8–Á?–ÁC–ÁK–ÁO–ÁW–Á[–Áj–Án–Á}–Á–ÁŠ–ÁŽ–Á—–Á›–ÁŦ–Á°–Áˇ–pŧ–ÁĀ–ÁĮ–pĖ–ÁЖÁזpä–Áč–Áų–Áũ–Á—]—Á—Á—Á —Á/—Á3—ÁD—ÁH—ÁO—pT—ÁX—Á_—pd—Áh—Áo—p|—Á€—Á‡—p”—Á˜—ÁĄ—ÁĨ—ÁŽ—Á˛—Áģ—Áŋ—ÁЗÁԗÁŨ—Áá—Áę—Áî—Á÷—Áû—Á ˜Á˜Á˜Á˜Á*˜Á.˜Á?˜ÁC˜ÁL˜ÁP˜ÁW˜Á[˜Ál˜Áp˜Á˜Ø˘ϘטۘÃŖ˜ç˜ï˜Ãŗ˜ÃØÃĮ˜Ã͘ÃטÃã˜Ãį˜Ãķ˜Ã÷˜Ã™Ã™Ã™Ã™Ã&™Ã*™Ã1™Ã5™ÃD™ÃH™ÃO™ÃS™Ã[™Ã_™Ãg™Ãk™Ãt™Ãx™Á™řΙҙۙߙð™ô™Ãģ™Ãŋ™ÃÆ™ÃʙÃŲ™ÃŨ™Ãä™Ãč™Ãņ™Ãõ™Ãū™Ãšà šà šÃšÃšÃ#šÃ'šÃ.šÃ2šÃ;šÃ?šÃFšÃJšÃ[šÃ_šÃfšÃjšÃsšÃwšÀšĚ˚ϚؚܚíšÃąšøšÃŧšÃĚÃȚÃКÃԚÃܚÃāšÃđšÃôšÃûšÃ˙šÃ›à ›Ã›Ã›à ›Ã$›Ã-›Ã1›ÃB›ÃF›ÃO›ÃS›Ã\›Ã`›Ãi›Ãm›Ã~››ɛ͛ٛݛÃŦ›ð›ڛÃŊ›ÃΛÃŌ›ÃŲ›ÃŨ›Ãî›Ãō›Ãų›Ãũ›à œÃœÃ!œÃ%œÃ.œÃ2œÃ9œÃ=œÃNœÃRœÃaœÃeœÃnœÃrœÃyœÃ}œΜҜÃĄœÅĨœÅ­œÅąœÅšœÅŊœÅŜÅɜÅҜÅ՜ÅåœÅéœÅõœÅųœÅÅ ÅÅÅ%Å)Å=ÅAÅHÅLÅSÅWÅfÅjÅqÅuÅ}ŁʼnōŖŚÅŖŧ۝Å´ÅŊÅÁÅŌÅ֝ÅŨÅáÅčÅėÅûÅ˙ÅžÅ žÅžÅžÅ žÅ$žÅ+žÅ/žÅ8žÅ<žÅEžÅIžÅPžÅTžÅ]žÅažÅhžÅlžÅ}žŁžňžŌžŕžřžÅĸžÅĻžÅ­žÅąžÅēžÅžžÅĪžÅĶžÅڞÅŪžÅæžÅęžÅōžÅöžÅūžÅŸÅŸÅŸÅŸÅ!ŸÅ*ŸÅ.ŸÅ7ŸÅ;ŸÅBŸÅFŸÅOŸÅSŸÅdŸÅhŸÅqŸÅuŸÅ~ŸłŸŋŸŏŸÅ ŸŤŸÅ̟ůŸÅģŸÅŋŸÅΟÅԟÅ۟ÅߟÅđŸÅôŸÅûŸÅ˙ŸÅ Å Å Å Å. Å2 ÅC ÅG ÅP ÅT Å[ Å_ Åp Åt Ń Ň Ő Ŕ ś ş Ű Å´ ÅàĮĮ ĮĪ ĮĶ Įã Įį Įî Įō Įų Įũ ĮĄĮĄĮĄĮĄĮ0ĄĮ4ĄĮCĄĮGĄĮNĄĮRĄĮ[ĄĮ_ĄĮhĄĮlĄĮsĄĮwĄĮ~ĄĮ‚ĄĮ“ĄĮ—ĄĮžĄĮĸĄĮŠĄĮ­ĄĮŧĄĮĀĄĮĮĄĮËĄĮÔĄĮØĄĮáĄĮåĄĮôĄĮøĄĮĸĮĸĮĸĮĸĮ#ĸĮ'ĸĮ.ĸĮ2ĸĮ>ĸĮBĸĮQĸĮUĸĮ\ĸĮ`ĸĮqĸĮuĸĮ|ĸĮ€ĸĮ‘ĸĮ•ĸĮœĸĮ ĸĮ¯ĸĮŗĸĮÄĸĮČĸĮŲĸĮŨĸĮæĸĮęĸĮņĸĮõĸĮŖĮ ŖĮŖĮŖĮ&ŖĮ*ŖĮ1ŖĮ5ŖĮFŖĮJŖĮYŖÉ]ŖÉdŖÉhŖÉoŖÉsŖɂŖɆŖɍŖɑŖəŖɝŖÉĨŖÉŠŖÉąŖÉĩŖÉŊŖÉÁŖÉÉŖÉÍŖÉŨŖÉáŖÉęŖÉîŖÉúŖÉūŖÉ ¤É¤É¤É¤É*¤É.¤É:¤É>¤ÉR¤ÉV¤É]¤]b¤Éf¤Ém¤]r¤Év¤É}¤]‚¤Ɇ¤ɍ¤]’¤ɖ¤ɝ¤]ǤÉŽ¤Éĩ¤Éš¤ÉÁ¤ÉŤÉͤÉҤÉÚ¤ÉŪ¤Éį¤Éë¤Éô¤Éø¤ÉĨÉĨÉĨÉĨÉĨÉĨÉ(ĨÉ,ĨÉ=ĨÉAĨÉHĨ]MĨÉQĨÉXĨ]]ĨÉaĨÉhĨ]mĨÉqĨÉxĨ]}ĨɁĨɈĨ]ĨɑĨɘĨ]ĨĨÉŠĨɰĨÉ´ĨÉŊĨÉÁĨÉĘĨÉÎĨÉ×ĨÉÛĨÉäĨÉčĨÉņĨÉõĨÉüĨÉĻÉ ĻÉ ĻÉĻÉĻÉ!ĻÉ%ĻÉ.ĻÉ2ĻÉ;ĻÉ?ĻÉPĻÉTĻÉ]ĻÉaĻÉhĻÉlĻÉ}ĻɁĻɐĻɔĻɛĻɟĻɨĻÉŦĻÉĩĻÉšĻÉĀĻÉÄĻÉÍĻÉŅĻÉÚĻÉŪĻÉåĻÉéĻÉøĻÉüĻÉ§É§É§É§É§É §É(§É,§É4§É8§ÉH§ÉL§ÉS§ÉW§É`§Éd§Ém§Éq§Éx§É|§Ʌ§ɉ§ɚ§ɞ§ɧ§Ȩ́Éĩ§Éš§ɧÉÆ§ÉاÉܧÉã§Éį§Éķ§É÷§É¨É ¨É¨É¨É&¨É*¨É1¨É5¨ÉF¨ÉJ¨ÉQ¨ÉU¨Éd¨Éh¨Éq¨Éu¨Ɇ¨Ɋ¨ɓ¨ɗ¨ɨ¨ÉŦ¨Éŗ¨ɡ¨ÉƨÉʨÉ͍ÉרÉč¨Éė¨Éõ¨Éų¨É ŠÉŠÉŠÉŠÉ(ŠÉ,ŠÉ5ŠÉ9ŠÉJŠÉNŠÉWŠÉ[ŠÉlŠÉpŠÉwŠÉ{ŠɊŠɎŠɗŠɛŠÉŦŠɰŠÉšŠÉŊŠÉΊÉŌŠÉŲŠÉŨŠÉėŠÉđŠÉųŠÉũŠÉĒÉĒÉĒÉĒÉ0ĒÉ4ĒÉ;ĒÉ?ĒÉNĒÉRĒÉ[ĒÉ_ĒÉpĒÉtĒÉ}ĒɁĒɒĒɖĒɝĒÉĄĒɰĒÉ´ĒÉÅĒÉÉĒÉŌĒÉÖĒÉŨĒÉáĒÉōĒÉöĒÉĢÉ ĢÉĢÉĢÉ'ĢÉ+ĢÉ2ĢÉ6ĢÉGĢÉKĢÉZĢÉ^ĢÉoĢÉsĢÉ|ĢɀĢɇĢɋĢɜĢÉ ĢɯĢÉŗĢÉÄĢÉČĢÉŅĢÉÕĢÉÜĢÉāĢÉņĢÉõĢÉŦÉŦÉŦÉŦÉ&ŦÉ*ŦÉ1ŦÉ5ŦÉFŦÉJŦÉYŦÉ]ŦÉnŦÉrŦÉ{ŦÉŦɆŦɊŦɛŦɟŦÉŽŦɲŦÉÃŦÉĮŦÉĐŦÉÔŦÉÛŦÉßŦÉđŦÉôŦÉ­É­É­É­É%­É)­É0­É4­ÉE­ÉI­ÉX­Ë\­Ëc­Ëg­Ëp­Ët­Ë}­ˁ­ˈ­ˌ­˕­˙­Ëĸ­ËĻ­Ë­­Ëą­Ë­ËÆ­ËέËŌ­ËÚ­ËŪ­Ëæ­Ëę­Ëō­Ëö­ËŽË ŽËŽËŽËŽË"ŽË+ŽË/ŽË6ŽË:ŽËCŽËGŽËXŽË\ŽËeŽËiŽËrŽËvŽËŽ˃Ž˔Ž˘Ž˟ŽËŖŽ˯ŽËŗŽËÂŽËÆŽËÍŽËŅŽËâŽËæŽËíŽËņŽË¯Ë¯Ë ¯Ë¯Ë ¯Ë$¯Ë5¯Ë9¯ËB¯ËF¯ËM¯ËQ¯Ëb¯Ëf¯Ëu¯Ëy¯˂¯ˆ¯ˍ¯ˑ¯Ëĸ¯ËϝËĩ¯š¯į˝Đ¯دܯã¯į¯÷¯û¯°° °°°°+°/°6°]C°G°P°T°`°d°x°|°…°‰°•°™°­°Íą°ÍŊ°ÍÁ°ÍͰÍҰÍŨ°Íá°Íí°Íņ°ÍąÍ ąÍąÍąÍąÍąÍ.ąÍ2ąÍ9ą]FąĪJąĪQąĪUąĪ\ąĪ`ąĪpąĪtąĪ{ąĪąΈąΌąĪ•ąĪ™ąĪ­ąĪąąΏąĪŧąĪÃąĪĮąĪÎąĪŌąĪáąĪåąĪėą]ųąũą˛˛˛˛˛˛-˛1˛:˛>˛E˛I˛R˛V˛_˛c˛t˛x˛˛ƒ˛Оޞ•˛™˛¨˛Ŧ˛ŗ˛p¸˛ŧ˛Ã˛pвÔ˛Û˛]č˛ė˛÷˛û˛ŗŗŗŗ&ŗ*ŗ3ŗ7ŗ>ŗBŗIŗMŗ\ŗ`ŗgŗkŗsŗwŗŗƒŗŠŗŽŗ–ŗšŗĸŗĻŗļŗēŗÁŗ]ÆŗĘŗŅŗ]Ūŗâŗéŗ]öŗúŗ´Ķ´ ´´Ķ´´!´Ķ.´2´9´=´D´H´W´[´b´f´m´q´x´|´‹´´–´]›´Ÿ´Ļ´]ŗ´ˇ´ž´]Ë´Ī´Ú´Ū´į´ë´ô´ø´ ĩ ĩĩĩ!ĩ%ĩ,ĩ0ĩ?ĩCĩJĩNĩVĩZĩaĩeĩmĩqĩĩ…ĩŒĩ]‘ĩ•ĩœĩ]Šĩ­ĩ´ĩ]ÁĩÅĩĖĩĶŅĩÕĩÜĩĶáĩåĩėĩĶųĩũĩļļļļ"ļ&ļ-ļ1ļ8ļ<ļCļGļNļRļaļeļlļ]qļuļ|ļ]‰ļļ”ļ]ĄļĨļ°ļ´ļŊļÁļĘļÎļßļãļėļđļ÷ļûˇˇ ˇ$ˇ,ˇ0ˇ7ˇ;ˇCˇGˇWˇ[ˇbˇ]gˇkˇrˇ]ˇƒˇЎ]—ˇ›ˇĸˇĶ§ˇ̎˛ˇĶˇˇģˇ¡ĶΎ͎ÚˇŪˇåˇéˇøˇüˇ¸¸¸¸¸¸$¸(¸7¸;¸B¸]G¸K¸R¸]_¸c¸j¸]w¸{¸†¸Џ“¸—¸ ¸¤¸ĩ¸š¸¸Ƹ͸ҏظܸë¸ī¸ö¸ú¸šš šššš-š1š8š]=šAšHš]UšYš`š]mšqšxšĶ}ššˆšĶš‘š˜šĶĨšŠš°š´šģšŋšΚŌšŲšŨšäščšīšķšúšūš ēēē]ē!ē(ē]5ē9ē@ē]MēQēXē\ēeēiēpētē}ēēˆēŒēēĄēĒēŽēĩēšēĀēÄēĶē×ēŪēâēéēíēôēøē˙ēģģģģ]"ģ&ģ-ģ]:ģ>ģEģ]RģVģ]ģĶbģfģmģĶrģvģ}ģĶŠģŽģ•ģ™ģ¨ģŦģŗģˇģžģÂģÉģÍģÔģØģįģëģōģ]÷ģûģŧ]ŧŧŧ]'ŧ+ŧ4ŧ8ŧIŧMŧ\ŧ`ŧoŧsŧzŧ~ŧ‡ŧ‹ŧšŧžŧĨŧŠŧ˛ŧļŧŊŧÁŧŌŧÖŧŨŧáŧęŧîŧõŧųŧ ŊŊŊŊ,Ŋ0Ŋ7Ŋ;ŊJŊNŊWŊ[ŊdŊhŊqŊuŊ†ŊŠŊ“Ŋ—Ŋ Ŋ¤ŊĢŊ¯ŊĀŊÄŊËŊĪŊÛŊßŊîŊōŊûŊ˙Ŋžž,ž0ž?žCž[ž_žnžrž{žžž”žŖž§žļžēžÁžÅžΞŌžážåžėžđžųžũžŋŋŋŋ&ŋ*ŋ;ŋ?ŋHŋLŋ]ŋaŋhŋlŋ{ŋŋˆŋŒŋŋĄŋĒŋŽŋŋŋÃŋĘŋÎŋŨŋáŋęŋîŋ÷ŋûŋĀĀĀĀ&Ā*Ā3Ā7Ā>ĀBĀSĀWĀ^ĀbĀnĀrĀĀ…ĀŽĀ’ĀŖĀ§ĀŋĀÃĀĘĀÎĀÕĀŲĀčĀėĀÁÁÁÁ"Á&Á5Á9Á@ÁDÁKÁOÁ^ÁbÁiÁ]vÁŅzÁҁÁŅ…ÁŅÁŅ‘ÁŅ™ÁŅÁŅĻÁŅĒÁŅŗÁҎÁŅĀÁŅÄÁŅÍÁŅŅÁŅâÁŅæÁŅîÁŅōÁŅúÁŅūÁŅÂŅ ÂŅÂŅÂŅ&ÂŅ*ÂŅ6ÂŅ:ÂŅFÂŅJÂŅVÂŅZÂŅfÂŅjÂŅ~ÂŅ‚Â҉ÂŅÂŅ•ÂŅ™ÂŅĄÂŅĨÂŅŽÂҞÂŅģÂŅŋÂŅČÂŅĖÂŅÕÂŅŲÂŅęÂŅîÂŅõÂŅųÂŅÃŅÃŅ ÃŅÃŅÃŅÃŅ!ÃŅ%ÃŅ,ÃŅ0ÃŅ?ÃŅCÃŅJÃŅNÃŅVÃŅZÃŅbÃŅfÃŅoÃŅsÃŅ|ÃŅ€Ã҉ÃŅÃŅ–ÃҚÃŅĢÃҝÃŅļÃ]ģÃŅŋÃŅÆÃ]ËÃŅĪÃŅÖÃ]ãÃŅįÃŅîÃŅōÃŅûÃŅ˙ÃŅÄŅ ÄŅÄŅÄŅ ÄŅ$ÄŅ+ÄŅ/ÄŅ8ÄŅ<ÄŅEÄŅIÄŅRÄŅVÄŅ]ÄŅaÄŅjÄŅnÄŅwÄŅ{ÄŅ‚Ä҆ÄŅ—ÄŅ›ÄŅŦÄҰÄŅšÄŅŊÄŅÄÄŅČÄŅŲÄŅŨÄŅėÄŅđÄŅ÷ÄŅûÄŅÅŅÅŅÅŅÅŅÅŅ ÅŅ)ÅŅ-ÅŅ6ÅŅ:ÅŅKÅŅOÅŅVÅŅZÅŅaÅŅeÅŅlÅŅpÅŅÅ҃ÅŅ’ÅŅ–ÅҟÅŅŖÅŅŦÅҰÅŅÁÅŅÅÅŅĖÅpŅÅŅÕÅŅÜÅpáÅŅåÅŅėÅpųÅŅũÅŅÆŅÆŅÆ]&ÆŅ*ÆŅ1ÆŅ5ÆŅDÆŅHÆŅYÆŅ]ÆŅdÆpiÆŅmÆŅtÆpÆŅ…ÆҌÆp™ÆŅÆŅĻÆŅĒÆŅŗÆҎÆŅĀÆŅÄÆŅÍÆŅŅÆŅâÆŅæÆŅīÆŅķÆŅüÆŅĮŅ ĮŅ ĮŅĮŅĮŅ+ĮŅ/ĮŅ6ĮŅ:ĮŅIĮŅMĮŅ^ĮŅbĮŅkĮŅoĮŅvĮŅzĮŅ‹ĮŅĮŅžĮŅĸĮŅĢĮҝĮҏĮŅŧĮŅÅĮŅÉĮŅÚĮŅŪĮŅįĮŅëĮŅôĮŅøĮŅČŅČŅČŅČŅ!ČŅ%ČŅ4ČŅ8ČŅIČŅMČŅVČŅZČŅaČŅeČŅvČŅzČ҉ČČ”Č˜ČĸČĻČ­ČąČÃČĮČĪČĶČâČæČīČķČ˙ČÉ ÉÉ$É(É/É3É=ÉAÉSÉWÉ`ÉdÉpÉtɈɌɕəÉĸÉĻɝɺÉŧÉĀÉŅÉÕÉÜÉāÉéÉíÉöÉúÉĘĘĘĘĘĘ.Ę2Ę>ĘBĘQĘUĘ\Ę]aĘeĘlĘ]yĘ}Ę„ĘˆĘ‘Ę•ĘžĘĸĘŠĘ­ĘļĘēĘËĘĪĘØĘÜĘëĘīĘöĘúĘËËËËËË(Ë,Ë=ËAËHËLË[Ë_ËkËoËxË|Ë‹ËË–ËšËŖË§Ë°Ë´ËģËŋËČËĖËŨËáËčËėËķË÷ËĖ ĖĖĖ*Ė.Ė?ĖCĖLĖPĖYĖ]ĖfĖjĖ{ĖĖ‡Ė‹Ė›ĖŸĖ¨ĖŦĖĩĖšĖÂĖÆĖ×ĖÛĖäĖčĖņĖõĖūĖÍÍÍÍ"Í.Í2Í>ÍBÍQÍUÍfÍjÍsÍwÍ~͓͂͗ÍĻÍĒÍąÍĩÍžÍÂÍËÍĪÍÖÍÚÍãÍįÍøÍüÍÎ ÎÎÎÎ#Î4Î8Î?ÎCÎOÎSÎbÎfÎoÎsÎ„ÎˆÎÎ“Î¤Î¨Î¯ÎŗÎÂÎÆÎ×ÎÛÎäÎčÎīÎķÎĪĪĪĪ$Ī(Ī/Ī3ĪDĪHĪWĪ[ĪcĪgĪoĪsĪƒĪ‡ĪŽĪ’ĪšĪžĪĻĪĒĪēĪžĪĮĪËĪÔĪØĪéĪíĪöĪúĪĐĐĐĐ%Đ)Đ2Đ6ĐGĐKĐRĐVĐeĐiĐrĐvĐ}ЁВЖĐĨЊвĐļĐŋĐÃĐÔĐØĐäĐčĐ÷ĐûĐŅĶŅ ŅŅĶŅ#Ņ,Ņ0Ņ9Ņ=ŅFŅJŅ[Ņ_ŅnŅrŅ~Ņ‚Ņ‹ŅŅžŅĸŅŗŅˇŅžŅ]ÃŅĮŅÎŅ]ĶŅ×ŅŪŅ]ëŅīŅøŅüŅ ŌŌŌpŌŌ&Ōp+Ō/Ō6ŌpCŌGŌPŌTŌcŌgŌnŌpsŌwŌ~ŌpƒŌ‡ŌŽŌp›ŌŸŌ¨ŌŦŌģŌŋŌÆŌĶËŌĪŌÖŌĶÛŌßŌæŌĶķŌ÷ŌĶĶ ĶĶĶĶ/Ķ3ĶBĶFĶRĶVĶ_ĶcĶrĶv͇͋͒Ķ]—Ķ›ĶĸĶ]§ĶĢ͞Ķ]ŋĶÃĶĖĶĐĶßĶãĶęĶpīĶķĶúĶp˙ĶÔ ÔpÔÔ$Ô(Ô7Ô;ÔBÔpGÔKÔRÔpWÔ[ÔbÔpoÔsÔ|ԀԏԓԚÔpŸÔŖÔĒÔp¯ÔŗÔēÔpĮÔËÔÔÔØÔįÔëÔōÔp÷ÔûÔÕpÕ ÕÕpÕ#Õ,Õ0Õ?ÕCÕJÕ]OÕSÕZÕ]_ÕcÕjÕ]wÕ{Õ„ÕˆÕ—Õ›Õ¤Õ¨ÕąÕĩÕžÕÂÕĶÕ×ÕāÕäÕíÕņÕúÕūÕÖÖÖÖ'Ö+Ö4Ö8ÖGÖKÖTÖXÖaÖeÖvÖzÖÖ…Ö”Ö˜ÖĄÖĨÖŽÖ˛ÖÃÖĮÖĐÖÔÖŨÖáÖōÖöÖũÖ××××!×2×6×F×J×[×_×h×l×s×w׈׌כןװ״×Ŋ×Á×Č×Ė×Ũ×á×đ×ôר ØØØ$Ø])Ø-Ø4Ø]9Ø=ØDØ]QØUØ\Ø`ØhØlØtØxØØ…ØŽØ’ØŖØ§ØŽØ]ŗØˇØžØ]ÃØĮØÎØ]ĶØרŪØ]ëØīØöØúØŲŲ ŲŲŲ#Ų*Ų.Ų=ŲAŲJŲNŲ_ŲcŲjŲnŲ}ŲŲŠŲŽŲŸŲŖŲŦŲ°ŲÁŲÅŲĖŲĐŲßŲãŲėŲđŲÚÚÚÚ#Ú'Ú.Ú2ÚAÚEÚVÚZÚcÚgÚnÚrÚƒÚ‡Ú–ÚšÚĢÚ¯Ú¸ÚŧÚÃÚĮÚØÚÜÚëÚīÚÛÛ ÛÛÛÛ-Û1Û@ÛDÛLÛPÛXÛ\ÛdÛhÛpÛtÛ|Û€ÛÛ”ÛÛĄÛĒÛŽÛˇÛģÛĖÛĐÛŲÛŨÛæÛęÛķÛ÷ÛÜ ÜÜÜ#Ü'Ü3Ü7ÜFÜJÜQÜ]VÜZÜaÜ]nÜrÜyÜ}Ü…Ü‰Ü‘Ü•ÜÜĄÜąÜĩÜŧÜ]ÁÜÅÜĖÜ]ŲÜŨÜäÜčÜ÷ÜûÜ ŨŨŨŨ"Ũ&Ũ7Ũ;ŨJŨNŨ_ŨcŨlŨpŨwŨ{ŨŒŨŨŸŨŖŨ´Ũ¸ŨÁŨÅŨĖŨĐŨáŨåŨôŨÔøŨÔ ŪÔŪÔŪÔŪÔ"ŪÔ&ŪÔ.ŪÔ2ŪÔ:ŪÔ>ŪÔFŪÔJŪÔRŪÔVŪÔfŪÔjŪÔqŪ]vŪÔzŪԁŪ]†ŪԊŪԑŪ]–ŪԚŪÔĄŪ]ŽŪÔ˛ŪÔšŪÔŊŪÔÅŪÔÉŪÔŌŪÔÖŪÔßŪÔãŪÔėŪÔđŪÔųŪÔũŪÔßÔ ßÔßÔßÔ ßÔ$ßÔ-ßÔ1ßÔBßÔFßÔMß]RßÔVßÔ]ß]bßÔfßÔmß]rßÔvßÔ}ß]‚ßԆßԍß]šßԞßÔĨßÔŠßÔ˛ßÔļßÔŋßÔÃßÔĖßÔĐßÔŲßÔŨßÔæßÔęßÔņßÔõßÔūßÔāÔ āÔāÔāÔāÔ+āÔ/āÔ8āÔ<āÔCāÔGāÔXāÔ\āÔkāÔoāÔvā]{āÔāԆā]‹āԏāԖā]›āԟāÔĻā]ŗāÔˇāÔžāÔÂāÔËāÔĪāÔØāÔÜāÔãāÔįāÔđāÔôāÔũāÔáÔáÔ áÔáÔáÔ&áÔ*áÔ1á]6áÔ:áÔAá]FáÔJáÔQá]VáÔZáÔaá]náÔráÔyáÔ}áԆáԊáԓáԗáԞáÔĸáÔĢáÔ¯áÔ¸áÔŧáÔÅáÔÉáÔĐáÔÔáÔŨáÔááÔđáÔôáÔûáÔ˙áÔâÔ âÔâÔâÔ âÔ$âÔ-âÔ1âÔ:âÔ>âÔMâÔQâÔXâÔ\âÔdâÔhâÔpâÔtâÔ|âԀâԈâԌâԜâÔ âÔ§âÔĢâÔ´âÔ¸âÔÁâÔÅâÔĖâÔĐâÔŲâÔŨâÔîâÔōâÔûâÔ˙âÔãÔ ãÔãÔãÔ*ãÔ.ãÔ5ãÔ9ãÔEãÔIãÔXãÔ\ãÔcãÔgãÔxãÔ|ãԃãԇãԘãԜãÔŖãÔ§ãÔļãÔēãÔÃãÔĮãÔØãÔÜãÔåãÔéãÔúãÔūãÔäÔ äÔäÔäÔ%äÔ)äÔ:äÔ>äÔGäÔKäÔ\äÔ`äÔgäÔkäÔzäÔ~äԇäԋäԜäÔ äÔŠäÔ­äÔžäÔÂäÔÉäÔÍäÔÜäÔāäÔéäÔíäÔūäÔåÔ åÔåÔ åÔ$åÔ+åÔ/åÔ>åÔBåÔSåÔWåÔ`åÔdåÔkåÔoåԀåԄåԓåԗåÔ¨åÔŦåÔĩåÔšåÔĀåÔÄåÔÕåÔŲåÔčåÔėåÔũåÔæÔ æÔæÔæÔæÔ*æÔ.æÔ=æÔAæÔRæÔVæÔ_æÔcæÔjæÔnæÔæԃæԒæԖæÔ§æÔĢæÔ´æÔ¸æÔŋæÔÃæÔÔæÔØæÔįæÔëæÔüæÔįÔ įÔ įÔįÔįÔ)įÔ-įÔ<įÖ@įÖGįÖKįÖSįÖWįÖ_įÖcįÖkįÖoįÖwįÖ{įփįևį֏į֓į֚į֞įÖŽįÖ˛įÖÅįÖÉįÖŅįÖÕįÖŨįÖáįÖéįÖíįÖõįÖųįÖčÖčÖ čÖčÖ!čÖ%čÖ,č]1čÖ5čÖ<č]AčÖEčÖLč]QčÖUčÖ\č]ičÖmčÖtčÖxčրčքč֌č֐č֙č֝čÖĻčÖĒčÖŗčÖˇčÖĀčÖÄčÖÍčÖŅčÖÚčÖŪčÖįčÖëčÖüčÖéÖé] éÖéÖé]éÖ éÖ'é],éÖ0éÖ7é]<éÖ@éÖGé]TéÖXéÖ_éÖcéÖléÖpéÖyéÖ}éֆé֊é֓é֗éÖ éÖ¤éÖĢéÖ¯éÖ¸éÖŧéÖÅéÖÉéÖĐéÖÔéÖåéÖééÖōéÖöéÖũéÖęÖęÖęÖ%ęÖ)ęÖ0ę]5ęÖ9ęÖ@ę]EęÖIęÖPę]UęÖYęÖ`ę]męÖqęÖxęÖ|ęօę։ę֒ę֖ę֝ęÖĄęÖĒęÖŽęÖˇęÖģęÖÂęÖÆęÖÍęÖŅęÖāęÖäęÖëę]đęÖôęÖûę]ëÖëÖ ë]ëÖëÖë](ëÖ,ëÖ3ëÖ7ëÖ@ëÖDëÖMëÖQëÖXëÖ\ëÖeëÖiëÖrëÖvëÖëփë֊ë֎ë֗ë֛ëÖĒëÖŽëÖĩëÖšëÖÂëÖÆëÖĪëÖĶëÖÚëÖŪëÖįëÖëëÖôëÖøëÖėÖ ėÖėÖėÖėÖ"ėÖ*ėÖ.ėÖ6ėÖ:ėÖBėÖFėÖVėÖZėÖaėÖeėÖnėÖrėÖ{ėÖėֆė֊ė֓ė֗ėÖ¨ėÖŦėÖĩėÖšėÖÂėÖÆėÖĪėÖĶėÖäėÖčėÖīėÖķėÖ˙ėÖíÖíÖíÖíÖ!íÖ2íÖ6íÖ=íÖAíÖRíÖVíÖ]íÖaíÖpíÖtíÖ}íցí֒í֖í֟íÖŖíÖ´íÖ¸íÖŋíÖÃíÖŌíÖÖíÖßíÖãíÖôíÖøíÖîÖîÖîÖîÖ!îÖ%îÖ4îÖ8îÖAîÖEîÖVîÖZîÖcîÖgîÖxîÖ|îփîևî֖î֚îÖŖîÖ§îÖ¸îÖŧîÖÅîÖÉîÖÚîÖŪîÖåîÖéîÖøîÖüîÖ īÖīÖīÖīÖ%īÖ)īÖ:īÖ>īÖMīÖQīÖbīÖfīÖoīÖsīÖzīÖ~ī֏ī֓īÖĸīÖĻīÖˇīÖģīÖÄīÖČīÖĪīÖĶīÖäīÖčīÖ÷īÖûīÖ đÖđÖđÖđÖ$đÖ(đÖ9đÖ=đÖLđÖPđÖađÖeđÖnđÖrđÖyđÖ}đ֎đ֒đÖĄđÖĨđÖļđÖēđÖÃđÖĮđÖÎđÖŌđÖãđÖįđÖöđØúđØņØņØ ņØņØ!ņØ%ņØ5ņØ9ņØ@ņØDņØLņØPņØ`ņØdņØkņØoņØvņØzņ،ņؐņؗņ؛ņØ­ņØąņØÁņØÅņØĖņ]ŅņØÕņØÜņ]áņØåņØėņ]ņņØõņØüņ]ōØōØ ō]ōØōØ$ōØ(ōØ0ōØ4ōØ<ōØ@ōØIōØMōØVōØZōØcōØgōØpōØtōØ}ō؁ō؊ō؎ōؗō؛ōØŦōذōØˇō]ŧōØĀōØĮō]ĖōØĐōØ×ō]ÜōØāōØįō]ėōØđōØ÷ō]üōØķØķ]ķØķØķØ#ķØ,ķØ0ķØ9ķØ=ķØFķØJķØSķØWķØ^ķØbķØkķØoķØxķØ|ķ؅ķ؉ķؒķؖķ؟ķØŖķØĒķØŽķØŋķØÃķØÔķØØķØáķØåķØėķØđķØôØôØôØôØô]$ôØ(ôØ/ô]4ôØ8ôØ?ô]DôØHôØOô]TôØXôØ_ô]lôØpôØwôØ{ô؄ô؈ôؑôؕô؜ôØ ôØŠôØ­ôØļôØēôØÁôØÅôØĖôØĐôØßôØãôØęô]īôØķôØúô]˙ôØõØ õ]õØõØõ]õØ#õØ*õ]7õØ;õØBõØFõØOõØSõØ\õØ`õØgõØkõØtõØxõ؁õ؅õ،õؐõؙõ؝õØĻõØĒõØšõØŊõØÄõØČõØŅõØÕõØŪõØâõØéõØíõØöõØúõØ öØöØöØ"öØ)öØ-öØ6öØ:öØCöØGöØNöØRöØ[öØ_öØpöØtöØ}ö؁ö؊ö؎öؗö؛öØŦöذöØˇöØģöØĮöØËöØÚöØŪöØåöØéöØúöØūöØ÷Ø ÷Ø÷Ø÷Ø%÷Ø)÷Ø8÷Ø<÷ØE÷ØI÷ØZ÷Ø^÷Øg÷Øk÷Ø|÷؀÷؇÷؋÷ؚ÷؞÷ا÷ØĢ÷Øŧ÷ØĀ÷ØÉ÷ØÍ÷ØŪ÷Øâ÷Øé÷Øí÷Øü÷ØøØ øØ øØøØ"øØ+øØ/øØ@øØDøØKøØOøØ^øØbøØkøØoø؀ø؄ø؍øؑøØĸøØĻøØ­øØąøØĀøØÄøØÕøØŲøØâøØæøØíøØņøØųØųØųØųØ*ųØ.ųØ7ųØ;ųØBųØFųØWųØ[ųØjųØnųØų؃ų،ųؐųؗų؛ųØŦųذųØŋųØÃųØÔųØØųØáųØåųØėųØđųØúØúØúØúØ)úØ-úØ6úØ:úØAúØEúØVúØZúØiúØmúØ~ú؂ú؋ú؏úؖúؚúØĢúدúØžúÚÂúÚĘúÚÎúÚÖúÚÚúÚâúÚæúÚöúÚúúÚûÚûÚûÚûÚ%ûÚ)ûÚ1ûÚ5ûÚ=ûÚAûÚIûÚMûÚ]ûÚaûÚhûÚlûÚsûÚwûچûڊûڑûڕûڞûÚĸûÚĢûÚ¯ûÚļûÚēûÚÁûÚÅûÚÔûÚØûÚßûÚãûÚęûÚîûÚũûÚüÚüÚ üÚüÚüÚ"üÚ&üÚ-üÚ1üÚ8üÚ<üÚKüÚOüÚXüÚ\üÚeüÚiüÚrüÚvüÚüڃüڔüژüڟüÚŖüÚ˛üÚļüÚĮüÚËüÚÔüÚØüÚßüÚãüÚôüÚøüÚũÚ ũÚũÚũÚ!ũÚ%ũÚ.ũÚ2ũÚ;ũÚ?ũÚPũÚTũÚ[ũÚ_ũÚfũÚjũÚqũÚuũڄũڈũڑũڕũڞũÚĸũÚĢũÚ¯ũÚ¸ũÚŧũÚÍũÚŅũÚÚũÚŪũÚįũÚëũÚôũÚøũÚūÚūÚūÚūÚ!ūÚ%ūÚ,ūÚ0ūÚ7ūÚ;ūÚJūÚNūÚ^ūÚbūÚkūÚoūÚxūÚ|ūڍūڑūښūڞūÚ§ūÚĢūÚŧūÚĀūÚĮūÚËūÚÚūÚŪūÚåūÚéūÚņūÚõūÚ˙Ú ˙Ú˙Ú˙Ú,˙Ú0˙Ú9˙Ú=˙ÚN˙ÚR˙Úb˙Úf˙Úw˙Ú{˙ڋ˙܏˙ܖ˙ܚ˙Üĸ˙ÜĻ˙Ü­˙Üą˙ÜÁ˙ÜÅ˙ÜÎ˙ÜŌ˙ÜÛ˙Üß˙Üđ˙Üô˙Üû˙Ü˙˙ÜÜ ÜÜÜ&Ü*Ü1Ü5Ü<Ü@ÜTÜXÜgÜkÜ{Ü܆܊ܞÜĸܲÜļÜÅÜÉÜŲÜŨÜæÜęÜķÜ÷ÜÜÜÜÜ Ü$Ü+Ü/Ü6Ü:ÜIÜMÜVÜZÜcÜgÜpÜt܅܉ܒܖܟÜŖÜŦܰÜÁÜÅÜĖÜĐÜ×ÜÛÜęÜîÜūÜÜ ÜÜÜÜ-Ü1Ü:Ü>ÜGÜKÜ\Ü`ÜgÜkÜzÜ~܅܉ܑܕÜĨÜŠÜšÜŊÜÎÜŌÜÛÜßÜæÜęÜûÜ˙ÜÜÜÜÜ0Ü4ÜDŪHŪPŪTŪdŪhŪqŪuŪ~Ū‚Ū“Ū—ŪŖŪ§ŪļŪēŪÃŪĮŪĐŪÔŪŨŪáŪōŪöŪũŪŪŪ ŪŪŪ&Ū*Ū3Ū7Ū@ŪDŪMŪQŪbŪfŪoŪsŪ|Ū€Ū‰ŪŪžŪĸŪŠŪ­Ū´Ū¸ŪĮŪËŪÛŪßŪčŪėŪõŪųŪ ŪŪŪŪ$Ū(Ū9Ū=ŪDŪHŪWŪ[ŪbŪfŪnŪrŪ‚Ū†Ū–ۚŪĢŪ¯Ū¸ŪŧŪÃŪĮŪØŪÜŪëŪīŪøŪüŪ ŪŪ!ā%ā,ā0ā8ā<āCāGāWā[ādāhāqāuā†āŠā‘ā•āāĄā¨āŦāŧāĀāĮāËāŌāÖāęāîāũāāāāā ā4ā8āHāLā[ā_āoāsā|ā€ā‰āā–āšāĢā¯āļāēāÁāÅāĖāĐāßāãāėāđāųāũāā āāā(ā,ā5ā9āBāFāWā[ābāfāmāqā€ā„ā”ā˜āĄāĨāŽā˛āÃāĮāĐāÔāŨāáāōāöāũā ā ā ā ā ā' ā+ ā; ā? āO āS ād āh āq āu ā| †ā‘ ā• ⤠⍠āą āĩ ⯠āĘ āÚ âŪ âæ âę âú âū â â â â â) â- â6 â: âC âG âP âT âe âi âp ât â{ â ↠⊠♠❠âĻ âĒ âŗ ⡠âĀ âÄ âÕ âŲ ââ âæ âī âķ âü â â â â â â' â+ â: â> âN âR â[ â_ âh âl â} ⁠⊠⎠◠⛠âŦ â° ⡠âģ âĘ âÎ âÕ âŲ âá âå âõ âų â â â â" â+ â/ â6 â: âK âO â^ âb âk âo †℠┠ä˜ äŸ äŖ äĢ ä¯ äļ äē äĘ äÎ ä× äÛ ää äč äų äũ ä ä ä ä ä ä ä/ ä3 ä: ä> äE äI ä] äa äp ät ä„ äˆ ä ä“ ä§ äĢ äģ äŋ äÎ äŌ äâ äæ äī äķ äü ää ä ää"ä)ä-ä4ä8ä?äCäRäVä_äcäläpäyä}äŽä’ä›äŸä¨äŦäĩäšäĘäÎäÕäŲäāäääķä÷ää äää!ä%ä6ä:äCäGäPäTäeäiäpätäƒä‡äŽä’äšäžäŽä˛äÂäÆä×äÛäääčäīäķäääää$ä(ä9ä=äMQX\cgnry}Œ—›ĸĻŽ˛šŊÄČĐÔÜāčėû˙] ]#'04EIPT]arvƒ”˜¤¨ˇģÂ]ĮËŌ]ßãėđ ]])-6:KOX\mqx]}ˆ]•™ĸώģÃĮÖÚáåôø˙] !%.2AETXimuy‰–šĄĨޞÃĮĪĶãįđô %):>GKTXaevz‚†–šŖ§°´ŊÁŌÖßãėđųũ)-9=LPX\lpy}„ˆ‘•ĻǞļÆĘĶ×čėõų)-=AQUei}‘•žĸŠ­žÂŌÖįëō]˙ (,3]@DKOX\kox|‹–šĢ¯ŋÃÔØčėũ *.?CSWhluy€„•™¨æŦæ´æ¸æĀæÄæÔæØæáæåæîæōæææææ&æ*æ3æ7æFæJæ[æ_æf]sæwæƒæ‡æ–æšæŖæ§æ°æ´æŊæÁæŌæÖæŨæáæčæėæķæ÷ææ æææ æ$æ-æ1æBæFæOæSæ\æ`æiæmæ~æ‚æ‰ææ”æ˜æ§æĢæģæŋæČæĖæÕæŲæęæîæ÷æûæææææ$æ(æ7æ;æBæFæNæRæbæfævæzæ‹ææ˜æœæŖæ§æ¸æŧæËæĪæØæÜæíæņæ %);?FJRV^bjnvzŠŽ–šĒŽĩšĀÄÕŲāäķ÷ %)9=FJQU^bko€„Œ ¤­ąēžĪĶÚ]ßãę]īķú] &]+/6];?F]SW^bkox|…‰’–ĨОļÅÉĐÔŨáęî÷û $(/3<@IMTXaevz‚†Ž’ĸĻ­]˛ļŊ]ÂÆÍ]ÚŪîōų]ū  ]   ]& * 1 5 > B K O V Z i m v z ‰  ” ˜ Ą Ĩ Ž ˛ Á Å Í Ņ á å ö ú  !!!!$!(!9!=!F!J!S!W!h!l!t!x!ˆ!Œ!“!—!Ļ!Ē!ŗ!ˇ!Č!Ė!Ķ!×!æ!ę!ú!ū!" ""","0"9"="N"R"c"g"p"t"{"""”"œ" "¨"Ŧ"ĩ"š"É"Í"Õ"Ų"á"å"î"ō"û"˙"####'#+#4#8#H#L#T#X#`#d#m#q#z#~#Ž#’#™##¯#ŗ#ē#ž#Æ#Ę#Ō#Ö#Ū#â#ę#î#ö#ú#$$$$"$&$6$:$B$F$N$R$Z$^$n$r$y$}$…$‰$$”$œ$ $¨$Ŧ$ŧ$Ā$Č$Ė$Ü$ā$é$í$ô$ø$%%%%#%'%/%3%C%G%P%T%]%a%r%v%}%]‚%†%%]’%–%%]Ē%Ž%ž%Â%É%]Î%Ō%Ų%]Ū%â%é%]ö%ú%&&&&&&(&,&;&?&H&L&[&_&f&j&s&w&€&„&•&™& &¤&­&ą&¸&ŧ&Å&É&Ō&Ö&Ũ&á&ę&î&˙&' '''#'4'8'H'L'S']X'\'c']p't'„'ˆ'']”'˜'Ÿ']Ŧ'°'ˇ'ģ'Ä'Č'Ņ'Õ'ä'č'ņ'õ'((((( ()(-(<(@(H(L(\(`(q(u(…(‰(’(–(Ÿ(Ŗ(´(¸(Á(Å(Î(Ō(ã(į(ī(ķ())))!)%).)2)C)G)N)R)a)e)u)y)€)„)“)—)§)Ģ)´)¸)É)Í)Ū)â)ë)ī)ö)ú) ****,*0*7*;*C*G*O*S*[*_*g*k*s*w**ƒ*“*—*Ÿ*Ŗ*ŗ*ˇ*ŋ*Ã*Ë*Ī*×*Û*ë*ī*ö*ú*++++++.+2+:+>+N+R+[+_+f+j+s+w+€+„+•+™+Ą+Ĩ+ĩ+š+Â+Æ+Ī+Ķ+ä+č+đ+ô+,,,,,,-,1,9,=,M,Q,X,\,e,i,r,v,,ƒ,Œ,,—,›,Ŧ,°,ˇ,ģ,Ä,Č,Ņ,Õ,Ū,â,ë,ī,-- ----#-'-0-4-;-?-H-L-U-Y-`-d-m-q-z-~-‡-‹-œ- -¨-Ŧ-´-¸-Ā-Ä-Ô-Ø-é-í-ũ-..] ...].!.(.]-.1.8.]E.I.P.T.[._.n.r.y.]~.‚.‰.]Ž.’.™.]ž.ĸ.Š.]ļ.ē.Á.Å.Î.Ō.Û.ß.č.ė.ķ.÷.////"/&/5/9/@/D/M/Q/Z/^/g/k/|/€/‡/‹/”/˜/Ÿ/Ŗ/Ŧ/°/š/Ŋ/Ä/Č/Ņ/Õ/æ/ę/ō/ö/ū/000'0+0;0?0F0J0Q0U0d0h0o0s0|0€0‰00”0˜0Ÿ0Ŗ0´0¸0ŋ0Ã0Ė0Đ0Ų0Ũ0ė0đ0ø0ü0 1111&1*1;1?1H1L1U1Y1j1n1v1z1Š1Ž1•1™1¨1Ŧ1ĩ1š1Ę1Î1Õ1Ų1č1ė1ü122 222.222;2?2P2T2e2i2r2v2}22’2–22Ą2ŗ2ˇ2ž2Â2Ę2Î2Ö2Ú2á2å2í2ņ2ų2ũ2 3333-31383<3C3G3X3\3c3g3v3z3‚3†3–3š3Ŗ3§3Ž3˛3ģ3ŋ3Č3Ė3Ũ3á3é3í3ũ34 4444,40474;4B4F4M4Q4`4d4m4q4z4~4‡4‹4œ4 4Š4­4´4¸4Á4Å4Ė4Đ4Ų4Ũ4ä4č4ņ4õ4ū45 5 555#5'50545=5A5J5N5_5c5k5o5w5{5‹55–5]›5Ÿ5Ļ5]Ģ5¯5ļ5]Ã5Į5Î5Ō5á5å5ė5]ņ5õ5ü5]66 6]66$6(61656>6B6K6O6X6\6k6o6x6|6‹66–6š6Ŗ6§6°6´6Ŋ6Á6Ō6Ö6Ũ6á6ę6î6õ6ų677 7777'7+72767?7C7L7P7Y7]7n7r7z7~7†7Š7š7ž7¯7ŗ7Ã7Į7Î7]Ķ7×7Ū7]ã7į7î7]û7˙78 888$8(8/8]4888?8]D8H8O8]\8`8g8k8t8x88…8Ž8’8›8Ÿ8Ļ8Ē8ģ8ŋ8Č8Ė8Û8ß8æ8ę8ķ8÷899 99"9&9-919:9>9E9I9R9V9_9c9j9n9w9{9Œ99˜9œ9¤9¨9¸9ŧ9Í9Ņ9á9å9ė9đ9÷9û9 ::::":&:/:3:B:F:N:R:b:f:w:{:‹::˜:œ:Ĩ:Š:ē:ž:Į:Ë:Ô:Ø:é:í:õ:ų: ; ;;;';+;4;8;I;M;T;X;g;k;{;;†;Š;™;;­;ą;ē;ž;Ī;Ķ;ä;č;ņ;õ;ü;<<<<!<)<-<6<:<J<N<V<Z<b<f<o<s<|<€<<”<œ< <¨<Ŧ<ĩ<š<É<Í<Õ<Ų<á<å<î<ō<û<˙<=ė=ė=ė=ė&=ė*=ė1=ė5=ėE=ėI=ėR=ėV=ė_=ėc=ėt=ėx=ė=ėƒ=ė‹=ė=ė–=ėš=ėĒ=ėŽ=ėĩ=ėš=ėĀ=ėÄ=ėØ=ėÜ=ėë=ėī=ė˙=ė>ė >ė>ė">ė&>ė6>ė:>ėI>ėM>ė]>ėa>ėj>ėn>ėw>ė{>ė„>ėˆ>ė™>ė>ė¤>ė¨>ė¯>ėŗ>ėē>ėž>ėÍ>ėŅ>ėÚ>ėŪ>ėį>ėë>ėô>ėø>ė ?ė ?ė?ė?ė#?ė'?ė0?ė4?ėE?ėI?ėP?ėT?ė[?ė_?ėn?ėr?ė‚?ė†?ė?ė“?ėœ?ė ?ėą?ėĩ?ėž?ėÂ?ėË?ėĪ?ėā?ėä?ėë?ėī?ėū?ė@ė @ė @ė@ė@ė)@ė-@ė=@ėA@ėR@ėV@ė_@ėc@ėj@ėn@ė@ėƒ@ė’@ė–@ėŸ@ėŖ@ė´@ė¸@ėČ@îĖ@îĶ@î×@îß@îã@îę@îî@îū@îAî AîAîAîAî-Aî1Aî8AîRBRSRWR`RdRsRwR~R‚R‹RR˜RœRĨRŠRēRžRÅRÉRŌRÖRŨRáRęRîRõRųRSS SSSS%S)S2S6S=SASJSNSUSYSbSfSoSsSzS~S‡S‹S”S˜SĄSĨSŽS˛SģSŋSČSĖSŨSáSéSíSũSTTT&T*T1T]6T:TAT]NTRTYT]TdThTwT{T‚T]‡T‹T’T]ŸTŖTĒTŽTˇTģTÄTČTŅTÕTÜTāTņTõTūTUUUU U)U-U6U:UCUGUXU\UcUgUpUtU{UUˆUŒU“U—U U¤UĢU¯U¸UŧUÃUĮUĐUÔUÛUßUčUėUõUųUVV VVVV'V+V4V8VAVEVVVZVbVfVvVzV‹VVŸVŖVĒV͝VŗVēVĶĮVËVŌVÖVåVéVđVôVũVW WWWW"W&W7W;WDWHWQWUW^WbWsWwW€W„W“W—WžWĸWĢW¯W¸WŧWÅWÉWÚWŪWåWéWōWöWũWX XXXX"X&X-X1X:X>XEXIXRXVX_XcXjXnXwX{X„XˆX‘X•XžXĸXŗXˇXŋXÃXĶX×XčXėXüXYY] YYY]$Y(Y/Y3Y:Y>YMYQYXY]]YaYhY]uYyY€Y„YY‘YšYžY§YĢY˛YļYĮYËYÔYØYįYëYōYöY˙YZ ZZZZ.Z2Z9Z=ZFZJZQZUZ^ZbZiZmZvZzZZ…ZŽZ’Z›ZŸZĻZĒZŗZˇZĀZÄZÍZŅZâZæZîZōZ[[[[+[/[6[Ķ;[?[F[ĶS[W[^[b[q[u[|[€[‰[[–[š[Ŗ[§[Ž[˛[Ã[Į[Đ[Ô[Ũ[á[ę[î[˙[\ \\\#\*\.\7\;\D\H\Q\U\f\j\q\u\~\‚\‰\\–\š\Ą\Ĩ\Ž\˛\ģ\ŋ\Æ\Ę\Ķ\×\ā\ä\õ\ų\]]]]*].]>]B]I]]N]R]Y]]f]j]q]u]|]€]]“]š]]Ÿ]Ŗ]Ē]]ˇ]ģ]Â]Æ]Ī]Ķ]Ü]ā]é]í]ô]ø] ^ ^^^)^-^4^8^A^E^N^R^[^_^p^t^{^^ˆ^Œ^“^—^ ^¤^­^ą^¸^ŧ^Å^É^Ú^Ū^æ^ę^ú^ū^__#_'_._Ķ3_7_>_ĶK_O_V_Z_i_m_t_x__…_Ž_’_™__Ŧ_°_š_Ŋ_Æ_Ę_Ķ_×_č_ė_õ_ų_` ``` `$`-`1`@`D`T`X`a`e`n`r`ƒ`‡``”``Ą`˛`ļ`Æ`Ę`Ņ`Õ`ä`č`ņ`õ`ū`aaaa"a1a5aFaJaSaWa^abasađwađ~ađ‚ađŠađŽađ•ađ™ađŠađ­ađļađēađÃađĮađØađÜađãađįađīađķađúađūađbđbđbđbđ$bđ(bđcđBcđKcđOcđXcđ\cđmcđqcđzcđ~cđ‡cđ‹cđ”cđ˜cđŠcđ­cđ´cđ¸cđŋcđÃcđŌcđÖcđæcđęcđķcđ÷cđdđdđdđdđ"dđ&dđ/dđ3dđDdđHdđOdđSdđbdđfdđmdđqdđydđ}dđdđ‘dđĄdđĨdđļdđēdđÃdđĮdđÎdđŌdđãdđįdđödđúdđeđeđeđeđ,e0e@eDeSeWegeke|e€eˆeŒeœe eŠe­e´e¸eÁeÅeÖeÚeâeæeöeúeffff#f](f,f3f]@fDfKfOfVfZfifmftf]yf}f„f]‘f•fœf f¯fŗfŧfĀfĪfĶfâfæföfúf gg g$g4g8g?gCgRgVg_gcgtgxggƒg’g–g§gĢgŧgĀgĮgËgÚgŪgīgķgüghh hh h/h3hDhHhQhUh\h`hqhuh„hˆh‘h•hœh hąhĩhžhÂhÉhÍhŪhâhķh÷hii ii i$i3i7iGiKiZi^iniriƒi‡ii”i›iŸi¨iŦiĩišiĘiÎi×iÛiäičiųiũij] j jj]!j%j,j0j7j;jJjNjUj]Zj^jej]rjvj}jjŠjŽj—j›j¤j¨j¯jŗjÄjČjŅjÕjäjčjījķjüjk k kkk+k/k6k:kCkGkNkRk[k_khklkskwk€k„k•k™kĄkĨkĩkškĘkÎkŪkâkék]îkōkųk]l llll l/l3l:l]?lClJl]Wl[lblflolsl|l€l‡l‹lšlžl§lĢlēlžlÅlÉlŌlÖlßlãlōlölm mmm m$m5m9mBmFmOmSmdmhmxm|mƒm‡m–mšmŖm§m°m´mÅmÉmĐmÔmãmįmømümn nnn%n)n9n=nLnPn`ndnunyn‚n†nn‘nšnžn§nĢnŧnĀnÉnÍnÖnÚnënīnön]ûn˙no]ooo"o)o-o€ōN€ōR€ōY€ō]€ōg€ōk€ōu€ōy€ōƒ€ō‡€ō™€ō€ōĨ€ōŠ€ōą€ōĩ€ōŊ€ōÁ€ōŅ€ōՀō߀ōã€ōę€ōî€ōø€ōü€ōō ōōō"ō&ō8ō<ōDōHōPōTō\ō`ōpōtō~ō‚ōŒōōšōžō¨ōŦōžōōɁ]΁ōԁō؁]ہōâōé]îōōōų]‚ō ‚ō‚ō‚ō&‚]+‚ō/‚ō6‚];‚ō?‚ōF‚]K‚ōO‚ōV‚]c‚ōg‚ōn‚ōr‚ō|‚ō€‚ōŠ‚ōŽ‚ō•‚ō™‚ōŖ‚ō§‚ōŽ‚ō˛‚ōš‚ōŊ‚ōĖ‚ōЂōŲ‚ōŨ‚ōė‚ōđ‚ō÷‚ōû‚ōƒō ƒōƒōƒōƒō"ƒō,ƒō0ƒō?ƒōCƒōKƒōOƒō_ƒōcƒōuƒōyƒō‰ƒōƒō—ƒō›ƒōĨƒōЃōģƒōŋƒōɃō̓ō׃ōۃōíƒōņƒōųƒōũƒō „ō„ō„ō„ō+„ō/„ō9„ō=„ōO„ōS„ōZ„ō^„ōm„ōq„ō{„ō„ō‰„ō„ōŸ„ōŖ„ō­„ōą„ōģ„ōŋ„ōŅ„ōՄō܄ōā„ōī„ōķ„ōũ„ō…ō …ō…ō!…ō%…ō/…ō3…ō=…ōA…ōS…ōW…ō^…ōb…ōq…ōu…ō…ōƒ…ō…ō‘…ōŖ…ō§…ōą…ōĩ…ōŋ…ōÅōՅōŲ…ōã…ōį…ōņ…ōõ…ō˙…ō†ō †ō†ō#†ō'†ō1†ō5†ō?†ōC†ōU†ōY†ō`†ōd†ōs†ōw†ō†ō…†ō†ō“†ō†ōĄ†ōŗ†ōˇ†ōÁ†ōņōΆō͆ōå†ōé†ōķ†ō÷†ō‡ō‡ō‡ō‡ō%‡ō)‡ō3‡ō7‡ōI‡ōM‡ōW‡ō[‡ōb‡ōf‡ōp‡ōt‡ō~‡ō‚‡ō‰‡ō‡ō—‡ō›‡ōĨ‡ōЇōģ‡ōŋ‡ōɇō͇ōׇōۇōí‡ōņ‡ōû‡ō˙‡ō ˆō ˆōˆō#ˆō-ˆō1ˆō;ˆō?ˆōQˆōUˆō_ˆōcˆōmˆōqˆōƒˆō‡ˆōŽˆō’ˆōĄˆōĨˆō¯ˆōŗˆōňōɈō͈ō׈ōéˆōíˆō÷ˆōûˆō ‰ō‰ō‰ō‰ō1‰ō5‰ō?‰ōC‰ōJ‰ōN‰ōX‰ō\‰ōn‰ōr‰ō|‰ō€‰ō‡‰ō‹‰ō‰ōĄ‰ō̉ō¯‰ōļ‰ōē‰ōˉōЉōâ‰ōæ‰ōđ‰ōô‰ōû‰ō˙‰ōŠōŠō$Šō(Šō:Šō>ŠōHŠōLŠōSŠōWŠōiŠōmŠō|Šô€Šô‡ŠĶŒŠôŠô—ŠĶ¤Šô¨Šô¯ŠĶ´Šô¸ŠôŋŠĶˊôЊô׊ĶäŠôčŠôīŠĶôŠôøŠô˙ŠĶ‹ô‹ô‹Ķ‹ô ‹ô'‹Ķ4‹ô8‹ô?‹ĶD‹ôH‹ôO‹ĶT‹ôX‹ô_‹Ķl‹ôp‹ôw‹Ķ|‹ô€‹ô‡‹ĶŒ‹ô‹ô—‹Ķ¤‹ô¨‹ô¯‹Ķ´‹ô¸‹ôŋ‹ĶċôȋôĪ‹Ķԋô؋ôߋĶä‹ôč‹ôī‹Ķü‹ôŒôŒĶ ŒôŒôŒĶŒô Œô'ŒĶ4Œô8ŒôHŒôLŒôTŒôXŒôgŒôkŒô{ŒôŒô‹ŒôŒô Œô¤ŒôŦŒô°ŒôŒôČôΌôԌô،ôŨŒôįŒôëŒôōŒôöŒôūŒôô ôôôô&ô*ô<ô@ôJôNôUôYôcôgônôrô|ô€ôŠôŽô•ô™ôŖô§ôŽô˛ôŧôĀôʍô΍ô؍ô܍ôæôęôôôøôŽôŽôŽôŽôŽô"Žô4Žô8Žô@ŽôDŽôLŽôPŽôXŽô\ŽôlŽôpŽôzŽô~Žô…Žô‰Žô“Žô—ŽôžŽôĸŽôĒŽôŽŽôļŽôēŽôĎôȎôŌŽô֎ôčŽôėŽôķŽô÷Žôôôôôô!ô+ô/ô6ô:ôDôHôWô[ômôqôyô}ô…ô‰ô‘ô•ôôĄôąôĩôŋôÏôʏôΏô؏ô܏ôãôįôņôõô˙ôô ôôôô)ô-ô7ô;ôBôFôPôTô[ô_ôiômôwô{ô‚ô†ô•ô™ôŖô§ô°ô´ôžôôːôΐôؐôŨôįôëôõôųô‘ô‘ô‘ô‘ô‘ô#‘ô,‘ô0‘ô:‘ô>‘ôG‘ôK‘ôU‘ôY‘ôc‘ôg‘ôp‘ôt‘ô…‘ô‰‘ô’‘ô–‘ô§‘ôĢ‘ôĩ‘ôš‘ôĀ‘ôđô֑ôڑôä‘ôč‘ôō‘ôö‘ô’ô’ô’ô’ô!’ô%’ô/’ô3’ô=’ôA’ôK’ôO’ôY’ô]’ôo’ôs’ô„’ôˆ’ôœ’ô ’ô°’ô´’ôĪ’ôĶ’ôےôߒôį’ôë’ôķ’ô÷’ô“ô “ô“ô“ô2“ô6“ôE“ôI“ôc“ôg“ôp“ôt“ô…“ô‰“ô“ô”“ôž“ôĸ“ôŦ“ô°“ôē“ôž“ôȓôĖ“ôŪ“ôâ“ôę“ôî“ôö“ôú“ô”ô”ô”ô”ô"”ô&”ô0”ô4”ô;”ô?”ôI”ôM”ôT”ôX”ôb”ôf”ôp”ôt”ô~”ô‚”ôŒ”ô”ôš”ôž”ô°”ô´”ôž”ô”ôɔô͔ôהô۔ôâ”ôæ”ôđ”ôô”ôū”ô•ô •ô•ô•ô•ô(•ô,•ô>•ôB•ôJ•ôN•ô^•ôb•ôl•ôp•ôw•ô{•ô…•ô‰•ô•ô”•ôž•ôĸ•ôŦ•ô°•ôē•ôž•ôȕôĖ•ô֕ôڕôė•ôđ•ôú•ôū•ô–ô –ô–ô–ô!–ô%–ô/–ô3–ô=–ôA–ôK–ôO–ôY–ô]–ôd–ôh–ôw–ô{–ô–ô‘–ô™–ô–ôĨ–ôŠ–ôą–ôĩ–ôŊ–ôÁ–ôɖô͖ôŨ–ôá–ôč–ôė–ôö–ôú–ô—ô—ô—ô—ô —ô$—ô.—ô2—ô<—ô@—ôG—ôK—ôR—ôV—ôh—ôl—ôu—ôy—ôƒ—ô‡—ô‘—ô•—ôŸ—ôŖ—ô­—ôą—ôģ—ôŋ—ôɗô͗ô֗ôڗôã—ôį—ôų—ôũ—ô˜ô˜ô˜ô ˜ô'˜ô+˜ô=˜ôA˜ôK˜ôO˜ôY˜ô]˜ôg˜ôk˜ôu˜ôy˜ô‹˜ô˜ô–˜ôš˜ô¤˜ô¨˜ô˛˜ôļ˜ô˜ôĘôΘôԘôܘôā˜ôō˜ôö˜ô™ô ™ô%™ô)™ô1™ô5™ô=™ôA™ôI™ôM™ôU™ôY™ôi™ôm™ô|™ô€™ôš™ôž™ô§™ôĢ™ô´™ô¸™ôÁ™ôřôΙôŌ™ôۙôߙôđ™ôô™ôû™ô˙™ô šô šôšôšô%šô)šô3šô7šôAšôEšôWšô[šôcšôgšôošôsšô{šôšôšô“šôšôĄšô¨šôŦšôļšôēšôĚôȚôԚô֚ôāšôäšôöšôúšô›ô›ô›ô›ô›ô›ô.›ô2›ô<›ô@›ôJ›ôN›ôX›ô\›ôf›ôj›ô|›ô€›ô‡›]Œ›ô›ô—›]œ›ô ›ô§›]Ŧ›ô°›ôˇ›]ěôțôŲ›ôŨ›ôä›]é›ôí›ôô›]ų›ôũ›ôœ] œô œôœ]!œô%œô,œô0œô:œô>œôHœôLœôSœôWœôaœôeœôlœôpœôwœô{œôŠœôŽœô—œô›œôǜôޜôĩœôšœôÜôĮœôҜô՜ôܜôāœôęœôîœôũœôô ô ôô!ô3ô7ôGôKôUôYôcôgôyô}ô‡ô‹ô•ô™ôĢô¯ôˇôģô˝ôĪô֝ôڝôéôíô÷ôûô žôžôžôžô+žô/žô9žô=žôGžôKžô]žôažôkžôožôyžô}žôžô“žôšžôžžô­žôąžôģžôŋžôɞô͞ôߞôãžôížôņžôûžô˙žôŸôŸôŸô Ÿô/Ÿô3Ÿô=ŸôAŸôKŸôOŸôaŸôeŸôoŸôsŸô}ŸôŸô“Ÿô—ŸôĄŸôĨŸô¯ŸôŗŸôŊŸôÁŸô˟ôΟôáŸôåŸôīŸôķŸôũŸô ô ô ô ô" ô1 ô5 ô? ôC ôM ôQ ô[ ô_ ôq ôu ô ôƒ ô ô‘ ôŖ ô§ ôą ôĩ ôŋ ôàôÕ ôŲ ôã ôį ôņ ôõ ôĄô ĄôĄôĄô Ąô$Ąô.Ąô2Ąô<Ąô@ĄôGĄôKĄôUĄôYĄôcĄôgĄôyĄô}Ąô‡Ąô‹Ąô•Ąô™ĄôĢĄô¯ĄôšĄôŊĄôĮĄôËĄôŨĄôáĄôëĄôīĄôųĄôũĄôĸôĸôĸô!ĸô+ĸô/ĸôAĸôEĸôLĸôPĸô_ĸôcĸômĸôqĸôƒĸô‡ĸô‘ĸô•ĸô§ĸôĢĸôĩĸôšĸôËĸôĪĸôŲĸôŨĸôīĸôķĸôũĸôŖôŖô ŖôŖôŖô,Ŗô0Ŗô:Ŗô>ŖôEŖôIŖô[Ŗô_ŖôiŖômŖôtŖôxŖôŠŖôŽŖô Ŗô¤ŖôŽŖô˛ŖôšŖôŊŖôĪŖôĶŖôâŖôæŖôøŖôüŖô¤ô ¤ô¤ô¤ô'¤ô+¤ô:¤ö>¤öM¤öQ¤öX¤ö\¤öc¤ög¤öv¤öz¤ö¤]ޤø’¤øĄ¤øĨ¤øŦ¤ø°¤øˇ¤øģ¤øĘ¤øÎ¤øÕ¤]Ú¤øŪ¤øå¤]ō¤øö¤øũ¤] ĨøĨøĨø#Ĩø2Ĩø6ĨøEĨøIĨøPĨøTĨø]ĨøaĨøpĨøtĨø{ĨøĨøˆĨøŒĨø“Ĩø—Ĩø¨ĨøŦĨøĩĨøšĨøÂĨøÆĨøĪĨøĶĨøäĨøčĨøņĨøõĨøūĨøĻø Ļø ĻøĻø"Ļø)Ļø-Ļø<Ļø@ĻøQĻøUĻømĻøqĻø€Ļø„ĻøœĻø Ļø¯ĻøŗĻøÂĻøÆĻøÕĻøŲĻøāĻøäĻøõĻøųĻø§ø§ø§ø§ø$§ø(§ø/§ø3§øD§øH§øW§ø[§øs§øw§ø§ø“§øĸ§úϧú­§úą§úš§úŊ§úħúȧúاúܧúä§úč§úđ§úô§úü§ú¨ú¨ú¨ú¨ú¨ú'¨ú+¨ú4¨ú8¨úG¨úK¨úX¨ú\¨úk¨úo¨ú~¨ú‚¨ú‘¨ú•¨ú¤¨ú¨¨ú¯¨p´¨ú¸¨úŋ¨pĨúȨú΍pܨúā¨úį¨]ô¨úø¨ú˙¨] ŠúŠúŠúŠú*Šú.Šú5Šp:Šú>ŠúEŠpJŠúNŠúUŠpbŠúfŠúmŠ]zŠú~Šú…Š]’Šú–ŠúŠúĄŠú°Šú´ŠúģŠ]ČŠúĖŠúĶŠú׊úæŠęŠķŠ÷ŠūŠĒ ĒĒĒĒ.Ē2Ē:Ē>ĒEĒIĒYĒ]ĒqĒuĒ}ĒĒˆĒŒĒ•Ē™Ē¨ĒŦĒĀĒÄĒĶĒ×ĒæĒęĒķĒ÷ĒūĒĢ ĢĢĢü"Ģü.Ģü2ĢüFĢüJĢüRĢüVĢüfĢüjĢüqĢüuĢü|Ģü€ĢüĢü”Ģü¤Ģū¨Ģū¯ĢūŗĢūģĢūŋĢūÆĢūĘĢūŌĢūÖĢūŨĢūáĢūéĢūíĢūôĢūøĢūŦū ŦūŦūŦūŦū#Ŧū*Ŧū.Ŧū6Ŧū:ŦūAŦūEŦūMŦūQŦūXŦū\ŦūlŦūpŦūwŦū{Ŧū‚Ŧū†ŦūŦū‘Ŧū˜ŦūœŦūŖŦū§ŦūŽŦū˛ŦūšŦūŊŦūÄŦūČŦūĪŦūĶŦūÚŦūŪŦūåŦūéŦūđŦūôŦūûŦū˙Ŧū­ū ­ū­ū­ū­ū ­ū'­ū+­ū2­ū6­ū=­ūA­ūH­ūL­ūS­ūW­ū^­ūb­ūi­ūm­ūt­ūx­ū­ūƒ­ūŠ­ūŽ­ū•­ū™­ū ­ū¤­ūĢ­ū¯­ūļ­ūē­ūÉ­ūÍ­ūÔ­]á­ūå­ūô­ūø­ū˙­] ŽūŽūŽū#Žū*Ž]7Žū;ŽūJŽūNŽūUŽ]bŽūfŽūuŽūyŽū€Ž]Žū‘Žū Žū¤ŽūĢŽ]¸ŽūŧŽūËŽūĪŽūÖŽ]ãŽūįŽūöŽūúŽū¯]¯ū¯ū!¯ū%¯ū,¯]9¯ū=¯ūL¯ūP¯ūW¯]d¯ūh¯ūw¯ū{¯ū‡¯ū‹¯ū—¯ū›¯ū§¯ū̝ūˇ¯ūģ¯ūĮ¯ū˯ūׯūÛ¯ūī¯ūķ¯ūü¯ū°ū °ū °ū°ū°ū!°ū%°ū.°ū2°ūC°ūG°ūN°ūR°ūY°ū]°ūd°ūh°ūp°ūt°ū„°ūˆ°ū‘°ū•°ūž°ūĸ°ūаū­°ūž°ū°ū˰ūΰūذūܰūã°ūį°ūø°ūü°ūąūąūąūąū"ąū&ąū6ąū:ąūCąūGąūPąūTąū[ąū_ąūpąūtąū{ąūąūŽąū’ąū™ąūąūĨąūŠąūšąūŊąūĖąūĐąūáąūåąūîąūōąūųąūũąū˛ū˛ū!˛ū%˛ū5˛ū9˛ūJ˛ūN˛ū]˛ūa˛ūh˛]m˛ūq˛ūx˛]}˛ū˛ūˆ˛]˛ū‘˛ū˜˛]˛ūĄ˛ū¨˛]ĩ˛ūš˛ūžūIJū˞ūвūײūÛ˛ūâ˛ūæ˛ūí˛ūņ˛ūø˛ūü˛ū ŗūŗūŗ]ŗū ŗū'ŗ],ŗū0ŗū7ŗ]<ŗū@ŗūGŗ]TŗūXŗū_ŗūcŗūjŗūnŗūuŗūyŗū€ŗū„ŗū”ŗū˜ŗūŸŗ]Ŧŗū°ŗūŋŗūÃŗūĘŗ]ĪŗūĶŗūÚŗ]įŗūëŗūōŗūöŗūũŗū´ū´ū´ū&´ū*´ū;´ū?´ūH´ūL´ūS´ūW´ūh´ūl´ū{´ū´ū´ū”´ūĨ´ūŠ´ū¸´ŧ´Ä´Č´×´Û´â´æ´î´ō´ų´ũ´ĩ ĩĩĩĩ ĩ'ĩ+ĩ;ĩ?ĩFĩJĩRĩVĩ]ĩaĩiĩmĩtĩxĩ€ĩ„ĩ‹ĩĩŸĩŖĩĒĩŽĩĩĩšĩĀĩÄĩËĩĪĩÖĩÚĩáĩåĩėĩđĩ÷ĩûĩļļ ļļļļ#ļ'ļ.ļ2ļAļEļLļ]Yļ]ļlļpļwļ]„ļˆļ—ļ›ļĸļ]¯ļŗļÂļÆļÍļ]ÚļŪļíļņļøļ]ˇ ˇˇˇ#ˇ]0ˇ4ˇCˇGˇNˇ][ˇ_ˇnˇrˇyˇ]†ˇЎ™ˇˇ¤ˇ]ąˇĩˇġȡΎ]ܡāˇīˇķˇ¸¸¸¸"¸&¸3¸7¸D¸H¸]¸a¸j¸n¸w¸{¸‚¸†¸¸“¸œ¸ ¸ą¸ĩ¸ŧ¸Į¸˸Ō¸Ö¸Ū¸â¸ō¸ö¸˙¸š šššš,š0š9š=šFšJšQšUšfšjšqšuš„šˆšš”š¤š¨šąšĩšžššÉšÍšŪšâšéšíšüšēē ēēē'ē+ē:ē>ēOēSē\ē`ēgēkē|ē€ēē“ēŖē§ē¸ēŧēËēĪēÖē]Ûēßēæē]ëēīēöē]ûē˙ēģ] ģģģ]#ģ'ģ.ģ2ģ:ģ>ģEģIģPģTģ[ģ_ģfģjģzģ~ģ…ģ]ŠģŽģ•ģ]šģžģĨģ]ĒģŽģĩģ]ÂģÆģÍģŅģØģÜģãģįģîģōģŧŧ ŧ]ŧŧ-ŧ1ŧ8ŧ]=ŧAŧHŧ]UŧYŧ`ŧdŧkŧoŧŧƒŧ”ŧ˜ŧŠŧ­ŧļŧēŧÁŧÅŧÖŧÚŧéŧíŧūŧŊŊŊ&Ŋ*Ŋ2Ŋ6ŊEŊIŊPŊTŊ[Ŋ_ŊfŊjŊyŊ}Ŋ„ŊˆŊŊ”ŊœŊ Ŋ§ŊĢŊ˛ŊļŊÆŊĘŊŅŊÕŊŨŊáŊéŊíŊôŊøŊ˙Ŋžžžž"ž)ž-ž=žAžHž]UžYžhžlžsžwž‡ž‹žœž žąžĩžžžžÉžÍžŪžâžņžõžūžŋ ŋ ŋŋ"ŋ1ŋ5ŋ<ŋ@ŋOŋSŋ\ŋ`ŋiŋmŋtŋxŋ‰ŋŋ”ŋ˜ŋ§ŋĢŋ´ŋ¸ŋÁŋÅŋÖŋÚŋęŋîŋõŋųŋĀ ĀĀĀ*Ā.Ā5Ā9ĀHĀLĀUĀYĀbĀfĀwĀ{Ā‹ĀĀ–ĀšĀŠĀ­ĀļĀēĀËĀĪĀÖĀÚĀéĀíĀöĀúĀ ÁÁÁÁ%Á)Á2Á6ÁGÁKÁRÁVÁbÁfÁuÁyÁ€Á„Á“Á—Á Á¤ÁĩÁšÁĀÁÄÁĶÁ×ÁāÁäÁëÁīÁ ÂÂÂÂ-Â1ÂBÂFÂOÂSÂZÂ^ÂoÂs‚†•™ÂĸÂĻ­¹ÂÂÂÆÂÕÂŲÂęÂîÂ÷ÂûÂÃÃÃà Ã$Ã5Ã9Ã@ÃDÃSÃWÃ`ÃdÃxÃ|ÃšÃžÃ­ÃąÃĪÃĶÃâÃæÃúÃūÃÄ Ä/Ä3ÄQÄUÄdÄhÄtÄxČĐĠĤÄĢįĞÄÂÄËÄĪÄāÄäÄëÄīÄūÄÅÅÅÅ"Å.Å2ÅFÅJÅSÅWÅ`ÅdÅmÅqÅ‚Å†Å•Å™Å­ÅąÅĪÅĶÅâÅæÅÆÆÆÆ/Æ3ÆQÆUÆdÆhƆƊƙƝƊƭÆļÆēÆÉÆÍÆáÆåÆîÆōÆųÆũÆĮĮ!Į%Į/Į3Į=ĮAĮSĮWĮ`ĮdĮoĮsĮ|Į€Į‰ĮĮ˜ĮœĮ­ĮąĮ¸ĮŧĮËĮĪĮŪĮâĮėĮđĮúĮūĮČ ČČČ$Č(Č2Č6Č@ČDČVČZČcČgČrČvČČƒČŒČČŖČ§ČŽČ˛ČÁČÅČÔČØČâČæČđČôČūČÉ ÉÉÉÉ(É,É>ÉBÉJÉNÉVÉZÉbÉfÉnÉrɂɆɐɔɞÉĸÉŦɰÉēÉžÉČÉĖÉÖÉÚÉėÉđÉøÉüÉĘĘĘĘĘ Ę0Ę4Ę;Ę?ĘFĘJĘYĘ]ĘlĘpĘwĘ{ĘŠĘŽĘ—Ę›ĘŦʰʡĘģĘĘĘÎĘŨĘáĘęĘîĘõĘųĘ ËËË!Ë+Ë/Ë9Ë=ËGËKËUËYËcËgËqËuˇˋ˚˞˨ËŦËļËēËÄËČËŌËÖËāËäËöËúËĖĖĖĖ%Ė)Ė0ĖĶ5Ė9Ė@ĖĶEĖIĖPĖĶUĖYĖ`ĖĶeĖiĖpĖĶ}ĖĖ‹ĖĖĄĖĨĖŦĖĶšĖŊĖĮĖËĖÕĖŲĖãĖįĖņĖõĖ˙ĖÍÍÍ3Í7ÍFÍJÍdÍhÍwÍ{͍͑ÍĢͯ͞ÍÂÍÜÍāÍīÍķÍũÍÎ ÎÎÎÎ'Î+Î5Î9ÎKÎOÎiÎmÎ|΀ΚΞέιÎģÎŋÎÉÎÍÎ×ÎÛÎåÎéÎķÎ÷Î Ī Ī'Ī+Ī:Ī>ĪXĪ\ĪkĪoĪyĪ}Ī‡Ī‹Ī•Ī™ĪŖĪ§ĪąĪĩĪĮĪËĪåĪéĪøĪüĪĐĐ)Đ-Đ7Đ;ĐEĐIĐSĐWĐaĐeĐoĐsĐ…Đ‰Đ˜ĐœĐŖĐ§ĐŽĐ˛ĐšĐŊĐÄĐČĐĪĐĶĐÚĐŪĐíĐņĐøĐ]ũĐŅŅ]ŅŅ Ņ]-Ņ1Ņ:Ņ>ŅOŅSŅ\Ņ`ŅiŅmŅvŅzŅ‹ŅŅ–ŅšŅŠŅ­ŅžŅÂŅËŅĪŅÖŅÚŅëŅīŅūŅŌŌŌ2Ō6ŌEŌIŌcŌgŌvŌzŌŒŌŌĒŌŽŌŊŌÁŌÛŌßŌîŌōŌĶĶ"Ķ&Ķ5Ķ9ĶSĶWĶfĶjĶtĶxĶĶƒĶ•Ķ™ĶĢ͝ĶÁĶÅĶÕĶŲĶčĶėĶõĶųĶÔ ÔÔÔÔ"Ô1Ô5Ô<ÔpAÔEÔLÔpYÔ]ÔdÔ]qÔuÔ|Ô€ÔÔ”ÔÔĄÔ˛ÔļÔŋÔÃÔĘÔÎÔ×ÔÛÔäÔčÔņÔõÔÕ ÕÕÕÕ Õ'Õ+Õ2Õ6Õ=ÕAÕPÕTÕ[Õp`ÕdÕkÕpxÕ|ÕƒÕ]Õ”ÕĻÕĒÕŧÕĀÕÉÕÍÕÖÕÚÕãÕįÕøÕüÕÖ ÖÖÖÖ#Ö4Ö8ÖIÖMÖeÖiÖxÖ|Ö”Ö˜Ö§ÖĢÖŧÖĀÖØÖÜÖëÖīÖ× ×××'×+×2×6×G×K×\×`×i×m×t×x׉׍לנק×Ģ×ģ×ŋ×Č×Ė×Ũ×á×č×ė×üר Ø ØØ"Ø+Ø/Ø6Ø:ØCØGØPØTØ]ØaØrØvØ}؁؈،ؓؗ؞Øĸ؊حØŧØĀØĮØpĖØĐØרpäØčØīØ]üØŲŲŲ'Ų+Ų4Ų8Ų?ŲCŲTŲXŲaŲeŲlŲpŲŲ…Ų–ŲšŲŖŲ§ŲŽŲ˛ŲÃŲĮŲÖŲÚŲéŲíŲöŲúŲÚÚÚÚ)Ú-Ú5Ú9Ú@ÚDÚSÚWÚ^ÚbÚqÚuÚ|Ú€ÚÚ“Ú¤Ú¨ÚˇÚģÚÂÚÆÚÍÚŅÚåÚéÚđÚôÚũÚÛ ÛÛ"Û&Û-Û1Û@ÛDÛLÛPÛ`ÛdÛoÛsÛ†ÛŠÛ•Û™ÛĨÛŠÛ´Û¸ÛËÛĪÛÖÛÚÛâÛæÛõÛųÛÜÜ ÜÜÜ Ü'Ü+Ü2Ü6Ü=ÜAÜIÜMÜ]ÜaÜhÜlÜtÜx܇܋ܒÜĶ—Ü›ÜĸÜܺ͝ÜēÜžÜÅÜÉÜØÜÜÜëÜīÜ˙ÜŨ ŨŨŨ!Ũ(Ũ,Ũ4Ũ8ŨHŨLŨXŨ\ŨkŨoŨvŨzŨ‚Ũ†Ũ•Ũ™Ũ Ũ¤ŨŗŨˇŨžŨÂŨŅŨÕŨŨŨáŨņŨõŨŪŪŪŪ"Ū&Ū-Ū1ŪAŪEŪMŪQŪaŪeŪlŪpŪŪƒŪ‹ŪŪŸŪŖŪŽŪ˛ŪÅŪÉŪØŪÜŪķŪ÷Ūß ßßß4ß8ßGß Kß Sß Wß ^ß bß iß mß |ß €ß ‡ß ‹ß šß žß Ĩß Šß ąß ĩß Åß Éß Ōß Öß ßß ãß úß ūß ā  ā ā ā +ā /ā 6ā :ā Aā Eā \ā `ā iā mā tā xā ā …ā Žā ’ā Šā ­ā ´ā ¸ā Įā Ëā Ķā ×ā įā ëā öā úā  á á á  á ,á 0á ;á ?á Rá Vá ]á aá pá tá {á á ‡á ‹á —á ›á ĸá Ļá ­á ąá ¸á ŧá Äá Čá Øá Üá ãá įá īá ķá úá ūá â â "âĶ'â +â 2âĶ?â Câ Jâ Nâ Uâ Yâ hâ lâ {â â â “â šâ žâ ­â ąâ šâ Ŋâ Íâ Ņâ Ũâ áâ đâ ôâ ûâ ˙â ã ã ã ã ,ã 0ã 8ã <ã Dã Hã Xã \ã dã hã xã |ã ‡ã ‹ã –ã šã Žã ˛ã šã Ŋã Äã Čã Øã Üã ãã įã īã ķã ä ä ä ä !ä %ä -ä 1ä Aä Eä Pä Tä _ä cä wä {ä Šä Žä Ĩä Šä ¸ä ŧä Ëä Īä æä ęä ųäũäå åååå!å1å5å>åBåIåMå^åbåkåoå{ååˆåŒå å¤åĩåšåĘåÎåŨåáåęåîåúåūåæ ææ#æ,æ0æ9æ=æDæHæYæ]æfæjævæzæƒæ‡æ›æŸæ°æ´æÅæÉæĐæÔæäæ čæ đæ ôæ ûæ ˙æ į į į į ,į 0į 7į ;į Jį Nį _į cį rį vį }į į ˆį Œį  į ¤į Ģį ¯į ¸į ŧį Åį Éį Ũį áį čį ėį ûį ˙į č  č č č *č .č Ač Eč Pč Tč `č dč oč sč †č Šč ‘č •č č Ąč °č ´č ģč ŋč Įč Ëč ×č Ûč âč æč íč ņč øč üč é é é é #é 'é /é 3é Bé Fé MéĶRé Vé ]éĶjé né ué yé €é „é “é —é Ļé Ēé ēé žé Åé Éé Øé Üé ãé įé īé ķé ę ę ę ę &ę *ę 1ę 5ę =ę Aę Pę Tę [ę _ę nę rę yę }ę Œę ę ˜ę œę Ŧę °ę ģę ŋę Ōę Öę Ũę áę čę ėę üę ë ë  ë ë  ë 'ë +ë :ë >ë Fë Jë Zë ^ë ië më €ë „ë “ë —ë Žë ˛ë Áë Åë Ôë Øë īë ķë ėėėė!ė%ė.ė2ė9ė=ėDėHėQėUėfėjėqėuė~ė‚ė‹ėė ė¤ėŦė°ėĀėÄėËėŽĐėÔėÛėŽčėėėõėųė íííí í$í3í7í>íŽCíGíNíŽ[í_ífí]kíoíví]ƒí‡íí”í›íŸí§íĢíŗíˇíĀíÄíÍíŅíÚíŪíįíëíüíîî îîî!î%î.î2î9î=îFîJîQîUîfîjîqîuî|î€î‡î‹î’î–îîĄî°î´îŊîÁîČîĖîÔîØîāîäîíîņîúîūîī īīī)ī-ī4ī8īAīEīNīRī[ī_īfījīsīwīˆīŒī“ī—īŸīŖīĒīŽīļīēīÁīÅīÔīØīéīíīöīúīđđđđ)đ-đ>đBđKđOđVđZđkđođ~đ‚đ‹đđ˜đœđĨđŠđēđžđÅđÉđĐđÔđÛđßđîđōđųđũđņņņņ$ņ(ņ/ņ3ņ:ņ>ņMņQņXņ\ņkņoņxņ|ņņ‘ņ˜ņœņĢņ¯ņĀņÄņÍņŅņØņÜņíņņņōōōō)ō-ō4ō8ō?ōCōRōVōcōgōtōxōō‘ō˜ōœōĢō¯ōļōēōÁōÅōŅōÕōæōęōķō÷ōķķķķ"ķ&ķ/ķ3ķCķGķVķZķkķoķ€ķ„ķ“ķ—ķ ķ¤ķ­ķąķÂķÆķĪķĶķÜķāķņķõķüķôôôô ô1ô5ô>ôBôSôWô^ôbôqôuô†ôŠô“ô—ôžôĸôŗôˇôÆôĘôÛôßôčôėôķô÷ôõ õõõ'õ+õ3õ7õ?õCõSõWõ`õdõkõoõ€õ„õõ‘õõĄõĒõŽõÂõÆõ×õÛõėõđõ˙õö öööö)ö-ö4ö8ö?öCöLöPöaöeönöröyö}öŽö’ö›öŸö¨öŦöšöŊöĖöĐöáöåöööúö ÷ ÷÷÷'÷+÷2÷6÷E÷I÷P÷T÷c÷g÷n÷r÷y÷}÷…÷‰÷š÷ž÷§÷Ģ÷´÷¸÷ŋ÷Ã÷Ô÷Ø÷á÷å÷î÷ō÷ū÷øøø&ø*ø;ø?øNøRø[ø_øføjøsøwøø…ø‘ø•øŖø§ø¸øŧøÃøĮøŅøÕøâøæøôøøøų ųųųų#ų+ų/ų8ų<ųFųJųVųZųhųlų}ųųˆųŒų–ųšų§ųĢųšųŊųĖųĐųŲųŨųįųëų÷ųûų ú úú"ú)ú-ú5ú9úBúFúNúRú[ú_úgúkútúxúˆúŒú“ú—úžúĸúŠú­ú´ú¸úŋúÃúŌúÖúŨúpâúæúíúpúúūúû]ûû û$û.û2û>ûBûPûTû^ûbûtûxûûƒûŠûŽû•û™û û¤ûĢû¯ûžûÂûÉûpÎûŌûŲûpæûęûņû]ūûü ü üüü#ü'ü0ü4ü=üAüKüOüXü\ümüqüxü|üƒü‡üŽü’ü™üü¤ü¨üˇüģüÂüpĮüËüŌüpßüãüęü]÷üûüũ ũũũ*ũ.ũ;ũ?ũIũMũZũ^ũsũwũ„ũˆũ•ũ™ũĻũĒũˇũģũÅũÉũÖũÚũīũķũũũū ūūūū-ū1ū;ū?ūIūMūWū[ūmūqū{ūū‰ūū™ūūĢū¯ūšūŊūĮūËūÕūŲūëūīūųūũū˙ ˙˙˙)˙-˙7˙;˙E˙I˙S˙W˙i˙m˙w˙{˙…˙‰˙•˙™˙Ļ˙Ē˙´˙¸˙Â˙Æ˙Đ˙Ô˙æ˙ę˙ō˙ö˙ū˙ *.8<EIVZgkuyƒ‡‘•§ĢŗˇŋÃËĪ×Ûëīųũ (,6:DHRVhlswˆŒ“—¨ŦļēÃĮÔØåéķ÷%)37@DQUbfpt~‚ŒĸĻ­ąšŊÅÉĐÔÜāčėôø p#p04;]HLVZcgtx…‰›ŸŽ˛ÃĮĐÔÛßđô-1;?FJ\`rvˆŒĻĒšŊ×Ûęî"15OSbfx|–šŠ­ĮËÚŪåéøü$(7;BpOSZ]gkrv}ˆA”˜ĄĨޞÃĮÖÚáåėđ÷û  $+/6:AELPW[dhos|€‡‹”˜ŸŖŦ°ˇģÄČĪĶÜāįëôø˙ $(/3<@GK\`qu~‚‰žĸąĩŧĀĮËŌÖŨáčėķ÷     " + / 8 < C G P T ] a h l u y ‚ †  “ œ   Š ­ ļ ē à Į Đ Ô å é đ ô       $ ( / 3 < @ G K T X _ c l p w { „ ˆ  “ š ž § Ģ ˛ ļ ŋ à Ę Î × Û â æ ī ķ ú ū     . 2 9 = E I R V _ c l p y } † Š › Ÿ ¨ Ŧ ŗ ˇ ž  Ë Ī Ø Ü å é đ ô ũ     # 2 6 J N U Y b f o s | € ‰  ” ˜ § Ģ ˛ ļ ŋ à Ę Î × Û â æ ī ķ ü      # ' 8 < C G N R a e l p w { ‚ † — › ĸ Ļ ĩ š Ā Ä Í Ņ Ú Ū į ë ô ø  %)04CGPTeirvƒŒĄĨŦ°ŋÃĘÎŨáęî˙ !(,;?HL]ahl{†Š™ĻĒģŋÆĘŲŨäč÷û #'04;?HLSWhl{Ž’ĄĨŦ°ˇģÂÆÕŲâæīķ"+/8<MQZ^gkrvƒ”˜ŸŖ˛ļŊÁČĖÛßčėõų (,=APTcgnr{ˆŒ“— ¤Ģ¯¸ŧÃĮĐÔåéōöũ "&/3:>GK\`os|€‡‹œ ¯ŗÂÆÚŪåéōö˙ $(15DHOSZ^eix|‹˜œŖ§¸ŧËĪÖÚéíôø˙ "&7;DHQU\`qu|€“šž­ą¸ŧÅÉĐÔåéđô!%.2;?PT[_fjy}„ˆ—›¤¨šŊÄČ×Ûâæõų !04EIRV]arv…‰šž§Ģ˛ļĮËÚŪīķü  /3BFOSZ^os‚†•™ĸĻ­ąÂÆÕŲčėû˙#'6:IM^bqu„ˆ™Ŧ°ŋÃÔØįëúū!(,>BQUfjy}ŒŸŖŦ°ˇģĖĐßãôø !%48GKTX_ctx‡‹’–¨ŦŗˇÉÍÔØįëķ÷ -18]EIY]dhos‚†‘›ŸĻĒ´¸ŋÃÍŅØÜæęņõ /3CGNRaemq…—›Ĩа´ÆĘŲŨīķũ "15GKUY`dvz‰ŸŖ­ą¸ŧÎŌáå÷û &*9=OS]ahl~‚‘•¤¨˛ļŊÁĶ׿ęųũ    ( , ; ? O S d h z ~  ‘ Ŗ § ļ ē É Í Ũ á ņ õ ü !! !!!!!!(!,!;!?!F!J!Q!U!\!`!o!s!|!€!‰!!–!š!Ģ!¯!ļ!ē!Ä!Č!Ī!Ķ!Ú!Ū!č!ė!ö!ú!""""""&"-"1"8"<"C"G"N"R"Y"]"l"p"y"}"†"Š"›"Ÿ"Š"­"ŋ"Ã"Ō"Ö"ā"ä"ö"ú"#####!#3#7#>#B#Q#U#g#k#u#y#€#„#–#š#Š#­#ˇ#ģ#Å#É#Û#ß#é#í#˙#$$$($,$;$?$Q$U$_$c$j$n$€$„$“$—$Š$­$Ŋ$Á$Đ$Ô$æ$ę$˙$%%%)%-%=%A%Q%U%d%h%w%{%‹%%Ÿ%Ŗ%ĩ%š%Ã%Į%Î%Ō%ä%č%÷%û%&&&& &$&6&:&J&N&_&c&m&q&x&|&Ž&’&Ą&Ĩ&´&¸&Â&Æ&Í&Ņ&ã&į&ö&ú& ''''$'(':'>'M'Q'b'f'p't'{''‘'•'¤'¨'š'Ŋ'Į'Ë'Ō'Ö'č'ė'û'˙'((("()(-(?(C(R(V(g(k(u(y(€(„(–(š(Š(­(ž(Â(Ė(Đ(×(Û(í(ņ()) )))")3)7)A)E)L)P)b)f)u)y)Š)Ž)˜)œ)Ŗ)§)š)Ŋ)Ė)Đ)ß)ã)í)ņ)ø)ü)**!*%*6*:*D*H*O*S*e*i*x*|**‘*›*Ÿ*Ļ*Ē*ŧ*Ā*Ī*Ķ*ä*č*ō*ö*ũ*+++&+*+;+?+I+M+T+X+j+n+}++’+–+ +¤+Ģ+¯+Á+Å+Ô+Ø+ß+ã+ķ+÷+, ,,,,!,1,5,F,J,S,W,^,b,s,w,†,Š,›,Ÿ,¨,Ŧ,ŗ,ˇ,Č,Ė,Û,ß,đ,ô,ũ,-- --!-0-4-E-I-R-V-]-a-r-v-…-‰-š-ž-§-Ģ-˛-ļ-Į-Ë-Ú-Ū-ī-ķ-ü-.. .. ./.3.D.H.Y.].l.p.w.{.ƒ.‡.—.›.Ŧ.°.š.Ŋ.Ä.Č.Ų.Ũ.ė.đ.//////./2/A/E/V/Z/c/g/n/r/ƒ/‡/–/š/Ģ/¯/¸/ŧ/Ã/Į/Ø/Ü/ë/ī/00 0000-010@0D0U0Y0b0f0m0q0‚0†0•0™0Ē0Ž0ŋ0Ã0Ō0Ö0Ũ0á0é0í0õ0ų011 11 1$15191B1F1M1Q1b1f1u1y1Š1Ž1—1›1ĸ1Ļ1ˇ1ģ1Ę1Î1ß1ã1ė1đ1÷1û1 222#24282A2E2L2P2a2e2t2x2‰22–2š2Ą2Ĩ2ļ2ē2É2Í2Ū2â2ë2ī2ö2ú2 333"33373H3L3[3_3f3j3r3v3~3‚3‰33•3™3Š3­3ž3Â3Ë3Ī3Ö3Ú3ë3ī3ū3444 4$4+4/4@4D4S4W4h4l4u4y4€4„4•4™4¨4Ŧ4Ŋ4Á4Ę4Î4Õ4Ų4ę4î4ũ45555#5*5.5?5C5R5V5g5k5t5x55ƒ5”5˜5§5Ģ5ŧ5Ā5Ņ5Õ5ä5č5ņ5õ5ü5666$6(6/636C6G6O6S6b6f6s6w6‰66”6˜6§6Ģ6˛6ļ6ŋ6Ã6Ę6Î6×6Û6â6æ6÷6û67 777%7p*7.757p:7>7E7pR7V7]7a7j7n7u7y7‚7†77“7š7ž7¯7ŗ7ŧ7Ā7Ī7Ķ7Ú7]ß7ã7ę7]ī7ķ7ú7]8 8888#8*8.878;8D8H8O8S8d8h8q8u8„8ˆ88]”8˜8Ÿ8]¤8¨8¯8]ŧ8Ā8Į8Ë8Ô8Ø8ß8ã8ė8đ8ų8ũ89999&9*999=9D9pI9M9T9pY9]9d9pq9u9|9€9‰99”9˜9Ą9Ĩ9Ž9˛9š9Ŋ9Î9Ō9Û9ß9î9ō9ų9ũ9: ::::":+:/:6:::K:O:V:Z:c:g:n:r:{::ˆ:Œ:“:—:¨:Ŧ:´:¸:Ā:Ä:Ô:Ø:į:ë:û:˙:; ;;;;";+;/;6;:;C;G;N;R;[;_;f;j;s;w;~;‚;‹;;–;š;Ŗ;§;Ž;˛;ģ;ŋ;Æ;Ę;Ķ;×;Ū;â;ë;ī;ö;ú;<<<<<<&<*<3<7<><B<K<O<V<Z<c<g<n<r<{<<†<Š<“<—<ž<ĸ<Ģ<¯<ž<Â<É<Í<Ö<Ú<á<å<î<ō<ų<ũ<= ===="=)=-=6=:=A=E=N=R=Y=]=f=j=q=u=~=‚=‰==–=š=Ą=Ĩ=Ž=˛=š=Ŋ=Æ=Ę=Ņ=Õ=Ū=â=é=í=ö=ú=>>>>>>&>*>1>5>>>B>I>M>V>Z>i>m>t>x>>…>Œ>>™>>Ļ>Ē>ŗ>ˇ>Č>Ė>Ķ>×>æ>ę>ņ>õ>ū>? ? ???!?%?,?0?7?;?D?H?O?S?\?`?g?k?t?x??ƒ?Œ??—?›?¤?¨?¯?ŗ?ŧ?Ā?Į?Ë?Ô?Ø?ß?ã?ė?đ?˙?@ @ö@@@ö@#@*@ö/@3@:@ö?@C@J@öO@S@Z@ög@k@r@v@@ƒ@Š@Ž@—@›@ĸ@Ļ@­@ą@¸@ŧ@Å@É@Đ@Ô@Ũ@á@č@ė@õ@ų@AA AAAA%A)A0A4A=AAAHALAUAYA`AdAmAqA€A„AA‘A˜AœAĨAŠA°A´AŊAÁAČAĖAÕAŲAâAæAíAņAúAūAB BBBB!B(B,B5B9B@BDBMBQBZB^BmBqBxB|B‹BB–BšBŠB­B´B¸BČBĖBÜBāBíBņBCCCC'C+C4C8CGCKCRCVCeCiC{CC‰CC”C˜CĒCŽCŊCÁCŌCÖCāCäCëCīCDDDD)D-D7D;DBDFDXD\DkDoD€D„DŽD’D™DD¯DŗDÂDÆD×DÛDåDéDđDôDE EEE.E2EGBGLGPGWG[GmGqG€G„G“G—GĄGĨGŦG°GÂGÆGÕGŲGęGîGøGüGHHHH,H0HAHEHOHSHZH^HpHtHƒH‡H˜HœHĻHĒHąHĩHĮHËHÚHŪHđHôHūHI I II#I2I6IGIKIUIYI`IdIvIzI‰IIžIĸIĢI¯IļIēIËIĪIŪIâIņIõIüIJJ JJJJ!J0J4JFJJJYJ]JnJrJyJ}J„JˆJJ“J¤J¨J¯Jö´J¸JŋJöÄJČJĪJöÜJāJįJëJúJūJK KK K'K+K:K>KGKKKTKXKiKmKvKzKƒK‡K˜KœKŖK§KļKēKÃKĮKĐKÔKåKéKōKöK˙KLLLL#L2L6L?LCLLLPLaLeLnLrL{LLL”L›LŸLŽL˛LģLŋLĐLÔLŨLáLōLöLũLMMM%M)M:M>MMMQMYM]MeMiMyM}M„MˆM—M›MĸM]§MĢM˛M]ˇMģMÂM]ĮMËMŌM]ßMãMęM„īMķMúM„˙MN N„NNN„'N+N2N]7N;NBN]GNKNRN]WN[NbN]oNsNzN„NƒNŠN„N“NšN„ŸNŖNĒN„ˇNģNËNĪNßNãNęNîNõNųNO OOOO"O3O7O>OöCOGONOö[O_OfOjOyO}O†OŠO›OŸOĻOĒOšOŊOÎOŌOãOįOöOúOPPPP*P.P>PBPRPVP]PaPhPlPuPyPŠPŽPŸPŖPŦP°PˇPģPĖPĐPßPãPôPøPQQ QQ!Q%Q4Q8QIQMQVQZQaQeQvQzQ‰QQžQĸQĢQ¯QļQēQËQĪQŪQâQķQ÷QRR RR R$R3R7RHRLRURYR`RdRuRyRˆRŒRRĄRĒRŽRĩRšRĘRÎRŨRáRęRîRõRųR SSS!S(S,S4S8S?SCSKSOSVSZSjSnSuSyS‚S†SS“SœS SŠS­SžSÂSÉSÍSÜSāSņSõS˙ST TT T$T3T7TFTJTTTXT_TcTuTyTˆTŒT›TŸTŠT­T´T¸TĘTÎTŨTáTōTöTUU UU!U%U4U8UIUMUWU[UbUfUxU|U‹UU U¤UŽU˛UšUŊUĪUĶUâUæU÷UûUV VVV&V*V9V=VNVRV\V`VgVkV}VVV”VŖV§VŗVˇVČVĖVŨVáVęVîVõVųV WWW!W0W4W=WAWHWLW]WaWpWtW…W‰W’W–WWĄW˛WļWÅWÉWÚWŪWįWëWōWöWX XXX-X1X:X>XEXIXZX^XmXqX‚X†XX“XšXžX¯XŗXÂXÆXÕXŲXâXæXíXņXYYYY*Y.Y7Y;YBYFYWY[YjYnYYƒYŒYY—Y›YŦY°YŋYÃYÔYØYáYåYėYđYZZZZ)Z-Z6Z:ZAZEZVZZZiZmZ|Z€Z‰ZZ”Z˜ZŠZ­ZŧZĀZĮZËZÚZŪZåZéZøZüZ[[[[![%[,[0[8[<[M[Q[Z[^[g[k[r[v[‡[‹[”[˜[Ą[Ĩ[ą[ĩ[Ä[Č[Ų[Ũ[î[ō[\\ \\\\&\*\1\5\>\B\K\O\X\\\c\g\x\|\…\‰\’\–\§\Ģ\˛\ļ\ž\Â\Ō\Ö\ß\ã\ô\ø\]]]]!]%]4]8]A]E]V]Z]c]g]x]|]ƒ]‡]–]š]Ą]]Ž]˛]Ã]Į]Ø]Ü]å]é]đ]ô]^ ^^^-^1^:^>^E^I^Z^^^m^q^y^}^„^ˆ^—^›^ĸ^Ļ^ĩ^š^Ā^Ä^Ķ^×^č^ė^û^˙^_ ___)_-_4_8_A_E_N_R_f_j_q_u_„_ˆ__”_¤_¨_ŗ_ˇ_Ę_Î_Ų_Ũ_é_í_ø_ü_````&`*`9`=`D`H`P`T```d`k`o`v`z``…``‘`Ą`Ĩ`Ŧ`°`¸`ŧ`Ë`Ī`Ö`ĶÛ`ß`æ`Ķķ`÷`ū`a a aa a/a3aCaGaNaRaaaealapaxa|aŒaaœa a¯aŗaēažaÆaĘaŲaŨaäača÷aûabbbb!b%b5b9bDbHb[b_bfbjbqbub…b‰b‘b•bĨbŠb°b´bÃbĮbĪbĶbãbįbōböb c cc c7c;cJcNc]cacxc|c‹cc—c›cŖc§c¯cŗcÃcĮcĐcÔcŨcácčcėcũcd dddd,d0d?dCdUdYdjdnd}ddˆdŒd“d—dĸdĻd¸dŧdÄdČdĪdĶdâdædídņdee eee"e3e7eFeJeQeUe\e`etexeeƒeŒee™eeąeĩeŧeĀeĪeĶeÛeßeīeķeūefff$f(f4f8fCfGfZf^fefifqfuf„fˆff“f›fŸfĢf¯fļfēfÁfÅfĖfĐfØfÜfėfđf÷fûfgggg!gĶ&g*g1gĶ>gBgIgMgTgXgggkgzg~gŽg’g™ggŦg°gˇgģgÃgĮg×gÛgįgëgúgūgh hhh$h(h/h3hBhFhMhQh`hdhlhph€h„hh“hĻhĒhąhĩhŧhĀhĐhÔhÜhāhđhôhûh˙hiiii.i2i=iAiTiXigiki‚i†i•i™i¨iŦiÃiĮiÖiÚiâiæiöiúijjjj%j)j8jo Eo Io Xo \o do ho xo |o ‡o ‹o žo ĸo ąo ĩo Ėo Đo ßo ão ōo öo  p p  p"$p",p"0p"7p";p"Jp"Np"Yp"]p"pp"tp"{p"p"‡p"‹p"’p"–p"Ļp"Ēp"ąp"ĩp"Åp"Ép"Đp"Ôp"äp"čp"÷p$ûp$q$q$q$q$q$q$-q$1q$8q$r&Nr&Rr&Yr&]r&er&ir&yr&}r&…r&‰r&™r&r&¤r&¨r&¯r&ŗr&Ãr&Įr&Îr&Ōr&Ųr&Ũr&ėr&đr&s&s&s&s&!s&%s&1s&5s&Fs&Js&Qs&Us&es&is&ps&ts&{s&s&Žs&’s&™s&s&Ŧs&°s&ˇs&ģs&Ęs&Îs&Ũs&ás&ís&ņs&t&t&t&t&)t&-t&v(Bv(Tv(Xv(_v(cv(kv(ov({v(v(‹v(v(—v(›v(§v(Ģv(ˇv(ģv(Īv(Ķv(ãv(įv(øv(üv( w(w(w(#w(*w(.w(=w(Aw(Hw(Lw([w(_w(gw(kw(rw(vw(†w(Šw(’w(–w(Ļw(Ēw(ēw(žw(Îw(Ōw(âw(æw(õw(ųw(x(x(x(x(x("x(1x(5x(=x(Ax(Ix(Mx(]x(ax(ix(mx(ux(yx(‰x(x(”xĶĄx(Ĩx(­x(ąx(Āx(Äx(Ėx(Đx(āx(äx(ėx(đx(øx(üx(y(y(y(y(#y('y(7y(;y(Cy(Gy(Wy([y(by(fy(my(qy(xy(|y(ƒy(‡y(y(“y(ĸy(Ļy(ļy(ēy(Æy(Ęy(Ūy(ây(ōy(öy(ũy(z(z(z($z((z(/z(3z(Bz(Fz(Rz(Vz(jz(nz(}z(z(z(”z(œz( z(¨z(Ŧz(´z(¸z(Čz(Ėz(Ôz(Øz(čz(ėz(ôz(øz({( {({({( {(${(,{(0{(@{(D{(K{(O{(^{(b{(j{(n{(}{*{*{*”{*›{Z {*¤{*Ģ{Z¸{*ŧ{*Ã{pČ{*Ė{*Ķ{pā{,ä{,î{,ō{,ų{,ũ{,|, |,|,|,+|,/|,9|,=|,D|,H|,R|,V|,`|,d|,s|,w|,|,ƒ|,“|,—|,Ą|,Ĩ|,Ŧ|,°|,ē|,ž|,Č|,Ė|,Ū|,â|,ė|,đ|,÷|,û|,}, },},},!},%},/},3},E},I},[},_},g},k},s},w},},ƒ},“},—},ž},ĸ},Ŧ},°},ē},ž},Å},É},Đ},Ô},Û},ß},æ},ę},ü},~, ~, ~,~,~,%~,)~,2~,6~,?~,C~,L~,P~,Y~,]~,o~,s~,„~,ˆ~,š~,ž~,Ļ~,Ē~,˛~,ļ~,ž~,Â~,Ę~,Î~,Ū~,â~,ė~,đ~,÷~,û~,, ,,,!,%,/,3,E,I,Q,U,],a,q,u,…,‰,“,—,Ą,Ĩ,ˇ,ģ,Å,É,Ķ,×,é,í,ô,ø,€,€,€,€,#€,'€,1€,5€,?€,C€,U€,Y€,c€,g€,q€,u€,‡€,‹€,’€,–€,Ĩ€,Š€,ŗ€,ˇ€,ɀ,̀,׀,ۀ,í€,ņ€,û€,˙€,,,,#,5,9,C,G,Y]fjsw€„•™ĸρ­ąēžĮˁ܁āéíöú ‚‚‚‚#‚'‚0‚4‚=‚A‚R‚V‚]‚a‚j‚n‚w‚{‚Ђނ—‚›‚¤‚¨‚š‚Ŋ‚ĂȂׂۂä‚č‚ņ‚õ‚ƒ ƒƒƒ ƒ$ƒ5ƒ9ƒ@ƒDƒSƒWƒgƒkƒrƒvƒ…ƒ‰ƒ™ƒƒσǃģƒŋƒЃԃŨƒáƒčƒėƒũƒ„„„„!„(„,„=„A„P„T„d„h„w„{„‹„„ „¤„­„ą„ÄĮ„Ņ„Մ܄ā„č„ė„ô„ø„ …………"…&…7…;…C…G…W…[…d…h…o…s…|…€…‘…•……Ą…ą…ĩ…ž……Ķ…ׅŪ…]ã…į…î…]û…˙…†††] †$†+†]8†<†C†G†P†T†c†g†p†t†ƒ†‡†ކ’†Ŗ†§†ކ˛†ģ†ŋ†Ɔʆ͆׆č†ė†ü†‡‡‡%‡)‡0‡]=‡A‡H‡L‡S‡W‡f‡j‡q‡]~‡‚‡‘‡•‡ž‡ĸ‡ą‡ĩ‡ćȇ؇܇í‡ņ‡ˆˆˆˆ+ˆ/ˆ?ˆCˆJˆNˆ]ˆaˆjˆnˆˆƒˆŠˆŽˆˆĄˆ˛ˆļˆĮˆˈԈֈåˆéˆúˆūˆ‰ ‰‰‰'‰+‰:‰>‰G‰K‰R‰V‰g‰k‰t‰x‰‰ƒ‰”‰˜‰Љ­‰ļ‰ē‰Á‰ʼn։ډé‰í‰ū‰Š ŠŠŠŠ+Š/Š>ŠBŠKŠOŠYŠ]ŠoŠsŠ}ŠŠˆŠŒŠ”Š˜Š Š¤Šފ˛ŠĊȊԊ֊čŠėŠõŠųŠ‹‹ ‹‹"‹&‹.‹2‹:‹>‹F‹J‹Z‹^‹g‹k‹r‹v‹‹ƒ‹Œ‹‹™‹‹Ž‹˛‹ē‹ž‹ƋʋŌ‹֋æ‹ę‹ķ‹÷‹ŒŒ ŒŒ"Œ&Œ-Œ]2Œ6Œ=Œ]BŒFŒMŒ]ZŒ^ŒoŒsŒzŒ]ŒƒŒŠŒ]Œ“ŒšŒ]§Œ̌˛ŒļŒŋŒÌˌЌ׌یėŒđŒųŒũŒ $(15FJQU^bimtx…–šĸĻŽ˛ƍ׍ۍëīö]û˙Ž] ŽŽŽ]#Ž'Ž.Ž2Ž9Ž=ŽLŽPŽWŽ]\Ž`ŽgŽ]lŽpŽwŽ]„ŽˆŽŽ“ŽšŽžŽ­ŽąŽēŽžŽ͎ŅŽ؎܎ëŽīŽ÷ŽûŽ -1:>OS[_osz~‘šž¯ŗēž͏ŅڏŪīķü /3DHQU\`qu„ˆ˜œ̐¯ŋÐԐؐáåėđ‘‘‘‘‘‘.‘2‘C‘G‘P‘T‘[‘_‘p‘t‘ƒ‘‡‘˜‘œ‘Ĩ‘Š‘°‘´‘őɑܑؑå‘é‘ķ‘÷‘ ’ ’’’"’&’.’2’:’>’H’L’^’b’l’p’‚’†’’“’š’ž’§’Ģ’ŧ’Ā’ȒĖ’Ԓؒā’ä’ô’ø’““ ““““&“*“3“7“H“L“T“X“`“d“l“p“€“„““‘“š“ž“§“Ģ“ŧ“Ā“Į“]Ė“Гד]ܓā“į“]ô“ø“ ” ””]””$”])”-”4”]A”E”L”P”Y”]”f”j”q”u”†”Š”“”—”ϔǔą”ĩ”ž””˔Ī”ā”ä”ë””ü”••••••0•4•<•@•H•L•\•`•q•u•…•‰••]••™• •]Ĩ•Š•°•]Ŋ•Á•ȕ˕͕וæ•ę•ņ•]ö•ú•–]– ––]–"–)–-–4–8–G–K–T–X–g–k–r–v–…–‰–‘–•–Ĩ–Š–˛–ļ–Į–˖Ԗؖé–í–õ–ų– — ———'—+—4—8—I—M—T—X—g—k—t—x—‰——–—š—Ģ—¯—ļ—ē—ɗ͗Ū—â—ë—ī—ö—ú— ˜˜˜"˜2˜6˜E˜I˜Y˜]˜n˜r˜{˜˜†˜Š˜›˜Ÿ˜¨˜Ŧ˜ŗ˜ˇ˜Ș˘Ũ˜á˜ę˜î˜õ˜ų˜ ™™™!™2™6™?™C™J™N™_™c™r™v™™ƒ™™‘™Ŗ™§™ą™ĩ™ŧ™Ā™șĖ™ԙؙâ™æ™ø™ü™š šš š)š-š4š8šAšEšVšZšbšfšnšršzš~šŽš’š›šŸšϚǚŗšˇššĚ͚Қâšæšîšōšúšūš› ›››'›+›4›8›A›E›V›Z›a›]f›j›q›]v›z››]Ž›’›Ŗ›§›Ž›]ŗ›ˇ›ž›]ÛĮ›Λ]ۛߛæ›ę›ķ›÷›œœ œœ œ$œ-œ1œ@œDœKœOœXœ\œeœiœzœ~œ…œ‰œ’œ–œœĄœ¨œŦœĩœšœƜΜ֜ڜâœæœöœúœ #*]/3:]?CJ]W[bfmq€„‹]”›] ¤Ģ]¸ŧÝĮΝŌáåîōžž žžž#ž+ž/ž?žCžLžPžažežnžržƒž‡žž“žŖž§žŽž˛žÁžŞΞŌžãžįžîžōžŸŸŸŸ#Ÿ'Ÿ0Ÿ4ŸEŸIŸPŸTŸcŸgŸxŸ|Ÿ…Ÿ‰ŸŸ”ŸĨŸП¸ŸŧŸ˟ПߟãŸķŸ÷Ÿ       $ 5 9 B F M Q b f w { „ ˆ  “ ¤ ¨ ˇ ģ Ė Đ Ų Ũ ä č ų ũ  ĄĄĄĄ'Ą+Ą=ĄAĄKĄOĄVĄZĄbĄfĄnĄrĄ|Ą€Ą’Ą–Ą Ą¤ĄļĄēĄÃĄĮĄÎĄŌĄÛĄߥđĄôĄüĄĸĸ ĸĸĸ(ĸ,ĸ5ĸ9ĸ@ĸDĸMĸQĸZĸ^ĸgĸkĸ|ĸ€ĸˆĸŒĸ”ĸ˜ĸ ĸ¤ĸ´ĸ¸ĸÁĸÅĸÎĸŌĸÛĸßĸđĸôĸûĸ]ŖŖ Ŗ]ŖŖŖ](Ŗ,Ŗ=ŖAŖHŖ]MŖQŖXŖ]]ŖaŖhŖ]uŖyŖ€Ŗ„ŖŖ‘ŖšŖžŖĨŖŠŖēŖžŖĮŖËŖÚŖŪŖåŖéŖōŖöŖ˙Ŗ¤¤¤¤#¤,¤0¤7¤;¤B¤F¤O¤S¤d¤h¤p¤t¤|¤€¤¤”¤Ĩ¤Фš¤Ŋ¤Ĥ]ɤͤÔ¤]Ų¤Ũ¤ä¤]ņ¤õ¤ü¤ĨĨ ĨĨĨ%Ĩ]*Ĩ.Ĩ5Ĩ]:Ĩ>ĨEĨ]RĨVĨ]ĨaĨhĨlĨ{ĨĨˆĨŒĨ›ĨŸĨĻĨĒĨšĨŊĨÅĨÉĨŲĨŨĨæĨęĨûĨ˙ĨĻ ĻĻ!Ļ)Ļ-Ļ=ĻAĻHĻLĻ[Ļ_ĻhĻlĻ}ĻĻˆĻŒĻ›ĻŸĻ¨ĻŦĻŊĻÁĻĘĻÎĻßĻãĻęĻîĻũϧ§§§#§*§.§?§C§R§V§f§j§y§}§§‘§ĸ§ϧ¯§ŗ§ē§ž§Χͧܧā§į§ë§ü§¨¨¨¨"¨)¨-¨>¨B¨Q¨U¨f¨j¨s¨w¨~¨‚¨“¨—¨ύ.Ǎ.ą¨.ĩ¨.Ĩ.Ȩ.΍.͍.ę¨.î¨.ų¨.ũ¨.Š. Š.Š.Š.$Š.(Š.3Š.7Š.BŠ.FŠ.TŠ.XŠ.cŠ.gŠ.rŠ.vŠ.„Š.ˆŠ.›Š.ŸŠ.ĻŠ.ĒŠ.ąŠ.ĩŠ.ŊŠ.ÁŠ.ČŠ.ĖŠ.ÔŠ.ØŠ.įŠ.ëŠ.ôŠ.øŠ.Ē.Ē.Ē.Ē.Ē.Ē.&Ē.*Ē.3Ē.7Ē.CĒ.GĒ.PĒ.TĒ.]Ē.aĒ.mĒ.qĒ.‚Ē.†Ē.ŽĒ.’Ē.šĒ.žĒ.ŽĒ.˛Ē.ŊĒ.ÁĒ.ĖĒ.ĐĒ.ÛĒ.ßĒ.čĒ.ėĒ.öĒ.úĒ.Ģ. Ģ.Ģ.Ģ.&Ģ.*Ģ.=Ģ.AĢ.HĢ.LĢ.SĢ.WĢ._Ģ.cĢ.jĢ.nĢ.vĢ.zĢ.‰Ģ.Ģ.–Ģ.šĢ.ŖĢ.§Ģ.°Ģ.´Ģ.ģĢ.ŋĢ.ĮĢ.ËĢ.ÔĢ.ØĢ.áĢ.åĢ.ņĢ.õĢ.Ŧ. Ŧ.Ŧ.Ŧ.Ŧ."Ŧ.2Ŧ.6Ŧ.AŦ.EŦ.PŦ.TŦ._Ŧ.cŦ.lŦ.pŦ.zŦ.~Ŧ.‘Ŧ.•Ŧ.œŦ. Ŧ.§Ŧ.ĢŦ.ŗŦ.ˇŦ.ÆŦ.ĘŦ.ĶŦ.×Ŧ.āŦ.äŦ.íŦ.ņŦ.øŦ.üŦ.­.­.­.­.%­.)­.1­.5­.E­.I­.R­.V­.a­.e­.n­.r­.{­.­.Š­.Ž­.—­.›­.Ļ­.Ē­.¸­.ŧ­.Å­.É­.Ô­.Ø­.æ­.ę­.ũ­.Ž.Ž. Ž.Ž.Ž.Ž.#Ž.*Ž..Ž.6Ž.:Ž.IŽ.MŽ.TŽ.XŽ.aŽ.eŽ.lŽ.pŽ.wŽ.{Ž.„Ž.ˆŽ.Ž.“Ž.œŽ. Ž.ŦŽ.°Ž.ˇŽ.ģŽ.ÄŽ.ČŽ.ÔŽ.ØŽ.éŽ.íŽ.õŽ.ųŽ.¯.¯.¯.¯. ¯Ķ%¯.)¯.0¯Ķ=¯.A¯.H¯ĶM¯.Q¯.X¯Ķe¯.i¯.p¯Ķu¯.y¯.€¯Ķ¯.‘¯.ĸ¯.ϝ.ĩ¯.š¯.ȝ.˝.Ô¯.د.ā¯.ä¯.ô¯.ø¯.˙¯Ķ °.°.!°.%°.4°.8°.G°.K°.S°.W°._°.c°.s°.w°.~°Ķ‹°.°. °.¤°.ŗ°.ˇ°.ư.ʰ.Ō°.Ö°.Ū°.â°.ō°0ö°0ũ°0ą0ą0ą0ą0ą06ą0:ą0Eą0Ią0Tą0Xą0cą0gą0pą0tą0ą0ƒą0–ą0šą0ĄąĶĻą0Ēą0ąąĶžą0Âą0Ęą0Îą0Ūą0âą0ëą0īą0øą0üą0˛0 ˛0˛0˛0˛0!˛02˛06˛0E˛0I˛0X˛0\˛0k˛0o˛0z˛0~˛0‰˛0˛0˜˛0œ˛0¯˛0ŗ˛0ē˛Ķŋ˛0Ã˛0ʲĶײ0Û˛0ã˛0į˛0÷˛0û˛0ŗ0ŗ0ŗ0ŗ0ŗ0"ŗ03ŗ07ŗ0Fŗ0Jŗ0Yŗ0]ŗ0lŗ0pŗ0{ŗ0ŗ0Šŗ0Žŗ0™ŗ0ŗ0°ŗ0´ŗ0ģŗĶĀŗ0Äŗ0ËŗĶØŗ0Üŗ0äŗ0čŗ0øŗ0üŗ0´0 ´0´0´0´0#´04´08´0G´0K´0Z´0^´0m´0q´0z´0~´0‰´0´0–´0š´0Ŗ´0§´0˛´0ļ´0ŋ´0ô0Ö´0Ú´0á´Ķæ´0ę´0ņ´Ķū´0ĩ0 ĩ0ĩ0ĩ0"ĩ0)ĩ0-ĩ06ĩ0:ĩ0Aĩ0Eĩ0Lĩ0Pĩ0Yĩ0]ĩ0dĩ0hĩ0yĩ0}ĩ0Œĩ0ĩ0Ÿĩ0Ŗĩ0˛ĩ0ļĩ0ŊĩĶÂĩ0Æĩ0ÍĩĶÚĩ0Ūĩ0åĩĶęĩ0îĩ0õĩĶļ0ļ0 ļĶļ0ļ0ļĶ*ļ0.ļ07ļ0;ļ0Lļ0Pļ0WļĶ\ļ0`ļ0gļĶtļ0xļ0€ļ0„ļ0”ļ0˜ļ0Ÿļ0Ŗļ0˛ļ0ļļ0Åļ0Éļ0Øļ0Üļ0ëļ0īļ0öļ͎0ˇ0ˇ0ˇ0#ˇĶ0ˇ04ˇ0Dˇ0Hˇ0Wˇ0[ˇ0jˇ0nˇ0}ˇ0ˇ0ˇ0”ˇ0ˇ0Ąˇ0Ŧˇ0°ˇ0Áˇ0Ŏ0ˎĶŲˇ0Ũˇ0íˇ0ņˇ0øˇ0üˇ0¸0 ¸0¸0¸0,¸00¸0?¸0C¸0R¸0V¸0e¸0i¸0p¸Ķ}¸2¸2ˆ¸2Œ¸2Ŗ¸2§¸2ޏ2˛¸2š¸2Ŋ¸2Ÿ2ɸ2ظ2ܸ2ë¸2ī¸2ö¸2ú¸2š2š2 š2š2 š2$š2+š2/š26š2:š2Bš2Fš2Uš2Yš2hš2lš2sš2wš2~š2‚š2Šš2Žš2š2Ąš2¨š2Ŧš2ģš2ŋš2Κ2Ōš2Ųš2Ũš2ėš2đš2÷š2ûš2 ē2ē2ē2!ē2(ē2,ē2;ē2?ē2Nē2Rē2aē2eē2tē2xē2ēĶŒē2ē2Ÿē2Ŗē2˛ē2ļē2Åē2Éē2ĐēĶŨē2áē2đē2ôē2ģ2ģ2ģ2ģ2!ģĶ&ģ2*ģ21ģĶ>ģ2Bģ2IģĶNģ2Rģ2YģĶfģ2jģ2qģĶvģ2zģ2ģĶŽģ’ģ›ģŸģ¨ģŦģŊģÁģČģĖģÔģØģāģäģíģņģúģūģŧ ŧŧŧ)ŧ-ŧ6ŧ:ŧAŧEŧNŧRŧ[ŧ_ŧhŧlŧuŧyŧ‚ŧ†ŧŧ‘ŧšŧžŧĨŧŠŧ˛ŧļŧŊŧÁŧŌŧÖŧāŧäŧđŧôŧŊŊŊŊ Ŋ$Ŋ0Ŋ4Ŋ@ŊDŊXŊ\ŊfŊjŊvŊzŊ†ŊŠŊ”Ŋ˜Ŋ¤Ŋ¨ŊąŊĩŊÁŊÅŊĪŊĶŊßŊãŊėŊđŊüŊž žž$ž(ž4ž8žDžHžTžXždžhžtžxž„žˆžœž žŦž°žŧžĀžĖžĐžÚžŪžåžéžõžųžŋ ŋŋŋ ŋ$ŋ0ŋ4ŋHŋLŋSŋWŋ`ŋdŋmŋqŋzŋ~ŋ‡ŋ‹ŋ”ŋ˜ŋŸŋŖŋŦŋ°ŋˇŋģŋÄŋČŋŲŋŨŋęŋîŋøŋüŋĀ ĀĀĀ#Ā'Ā1Ā5Ā?ĀCĀMĀQĀcĀgĀpĀtĀ}ĀĀŠĀŽĀ—Ā›ĀŦĀ°ĀšĀŊĀÄĀČĀŅĀÕĀÜĀāĀéĀíĀöĀúĀÁÁÁÁÁ!Á*Á.Á?ÁCÁJÁNÁWÁ[ÁdÁhÁqÁuÁ~Á‚Á‹ÁÁ Á¤ÁĢÁ¯Á¸ÁŧÁÅÁÉÁĐÁÔÁŨÁáÁęÁîÁõÁųÁ Â Â$Â-Â1Â8Â<ÂEÂIÂRÂVÂ]ÂaÂpÂtÂ}ˆŒ•™ÂĸÂĻÂ¯ÂŗÂŧÂĀÂÉÂÍÂŪÂâÂéÂíÂöÂúÂÃÃÃÃÃÃ(Ã,Ã3Ã7ÃFÃJÃQÃUÃ^ÃbÃkÃoÃxÃ|Ã…Ã‰ÃÃ”ÃÃĄÃĒÃŽÃˇÃģÃÄÃČÃĪÃĶÃäÃčÃīÃķÃüÃÄ Ä ÄÄÄ!Ä%Ä.Ä2Ä9Ä=ÄDÄHÄQÄUÄ\Ä`ÄqÄuÄ|ĀďēĜĠħÄĢÄŧÄĀÄĪÄĶÄÜÄāÄįÄëÄôÄøÄÅÅÅÅÅÅ(Å,Å5Å9ÅJÅNÅWÅ[ÅdÅhÅqÅuÅ~Å‚Å‹ÅÅ˜ÅœÅ­ÅąÅēÅžÅĮÅËÅÔÅØÅáÅåÅîÅōÅûÅ˙ÅÆÆÆ!Æ*Æ.Æ7Æ;ÆDÆHÆQÆUÆ^ÆbÆkÆoÆxÆ|ƅƉƚƞƧÆĢƴƸÆÁÆÅÆÎÆŌÆÛÆ߯čÆėÆõÆųÆ ĮĮĮĮ$Į(Į1Į5Į>ĮBĮKĮOĮXĮ\ĮmĮqĮxĮ|Į‹ĮĮ˜ĮœĮĨĮŠĮ˛ĮļĮŋĮÃĮĖĮĐĮŲĮŨĮæĮęĮûĮ˙ĮČ ČČČ"Č&Č/Č3Č<Č@ČQČUČ^ČbČkČoČxČ|Č…Č‰Č’Č–ČŸČŖČŦȰČÁČÅČĖČĐČÜČāČīČķČüČÉÉÉÉ"É+É/É8É<ÉMÉQÉZÉ^ÉoÉsÉzÉ~ɍɑÉĸÉĻɝɺÉēÉžÉĪÉĶÉâÉæÉ÷ÉûÉ ĘĘĘ#Ę,Ę0ĘAĘEĘNĘRĘcĘgĘnĘrĘĘ…ĘŽĘ’ĘŖĘ§Ę°Ę´ĘÅĘÉĘĐĘÔĘãĘįĘđĘôĘũĘË ËËË#Ë,Ë0Ë9Ë=ËFËJË[Ë_ËfËjËyË}˄ˈˑ˕˞ËĸË­ËąËŊËÁËŌËÖËßËãËôËøËĖĖĖĖ-Ė1Ė8Ė<ĖHĖLĖ[Ė_ĖnĖrĖĖ…ĖœĖ Ė¯ĖŗĖÄĖČĖ×ĖÛĖäĖčĖųĖũĖ Í ÍÍÍ/Í3ÍGÍKÍ\Í`ÍoÍsÍ}ÍÍÍ‘ÍŖÍ§Í°Í´ÍŊÍÁÍŌÍÖÍāÍäÍđÍôÍÎ ÎÎÎ,Î0ÎAÎEÎLÎPÎcÎgÎxÎ|΅ΉΐΔÎĨΊθÎŧÎÍÎŅÎÚÎŪÎåÎéÎúÎūÎ ĪĪĪĪ#Ī'Ī.Ī2ĪAĪEĪLĪPĪYĪ]ĪfĪjĪqĪuĪ„ĪˆĪ‘Ī•ĪžĪĸĪĢΝĪĀĪÄĪËĪĪĪŪĪâĪëĪīĪøĪüĪĐ ĐĐĐ'Đ+Đ4Đ8ĐAĐEĐNĐRĐ[Đ_ĐpĐtĐ{ĐĐŽĐ’Đ™ĐĐ¤Đ¨Đ¯ĐŗĐēĐžĐÍĐŅĐŲĐŨĐåĐéĐņĐõĐŅ ŅŅŅŅ!Ņ)Ņ-Ņ=ŅAŅHŅLŅTŅXŅ`ŅdŅlŅpŅxŅ|ŅŒŅŅ™ŅŅŠŅ­ŅšŅŊŅÉŅÍŅŲŅŨŅņŅõŅūŅŌŌŌŌ"Ō.Ō2ŌFŌJŌQŌUŌ\Ō`ŌoŌsŌ|Ō€Ō‰ŌŌžŌĸŌąŌĩŌžŌÂŌËŌĪŌāŌäŌđŌôŌûŌ˙Ō ĶĶĶĶ3Ķ7Ķ@ĶDĶUĶYĶbĶfĶwĶ{͕͙͂͆ĶĨĶŠĶŊĶÁĶŌĶÖĶįĶëĶúĶūĶÔÔÔ Ô'Ô+Ô<Ô@ÔOÔSÔdÔhÔqÔuÔ|Ô€Ô‘Ô•Ô¤Ô5¨Ô5°Ô5´Ô5ÄÔ5ČÔ5ĪÔ5ĶÔ5ÛÔ5ßÔ5īÔ5ķÔ5úÔ5ūÔ5Õ5 Õ5Õ5Õ5$Õ5(Õ5/Õ53Õ5:Õ5>Õ5KÕ5OÕ5]Õ5aÕ5hÕ5lÕ5{Õ5Õ5†Õ5ŠÕ5‘Õ5•Õ5žÕ5ĸÕ5ĢÕ5¯Õ5ļÕ5ēÕ5ÁÕ5ÅÕ5ÔÕ5ØÕ5āÕ5äÕ5ôÕ5øÕ5˙Õ5Ö5 Ö5Ö5Ö5Ö5)Ö5-Ö54Ö58Ö5?Ö5CÖ5JÖ5NÖ5]Ö5aÖ5hÖ5lÖ5yÖ5}Ö5‹Ö5Ö5–Ö5šÖ5ŠÖ5­Ö5ŧÖ5ĀÖ5ĪÖ5ĶÖ5âÖ5æÖ5õÖ5ųÖ5×5×5×5×5#×5'×56×5:×5A×5E×5N×5R×5[×5_×5n×r×y×}׆׊דחמ×ĸ×Ģׯ׸×ŧ×Ã×Į×Î×Ō×á×å×ė×đ×ø×ü×ØØØØØØ'Ø+Ø3Ø7ØGØKØSØWØ_ØcØsØwØ~Ø‚Ø‹ØØ˜ØœØŖØ§Ø°Ø´ØŊØÁØČØĖØÕØŲØāØäØíØņØøØüØŲ ŲŲŲ%Ų)Ų1Ų5Ų=ŲAŲQŲUŲ\Ų`ŲgŲkŲzŲ~Ų…Ų‰Ų’Ų–ŲŸŲŖŲĒŲŽŲˇŲģŲÄŲČŲĪŲĶŲÚŲŪŲįŲëŲōŲöŲ˙ŲÚ ÚÚÚ#Ú*Ú.Ú5Ú9ÚHÚLÚSÚWÚ`ÚdÚmÚqÚxÚ|Ú…Ú‰Ú’Ú–ÚÚĄÚ¨ÚŦÚģÚŋÚČÚĖÚĶÚ×ÚčÚėÚûÚ˙ÚÛ ÛÛÛ Û$Û+Û/Û8Û<ÛEÛIÛPÛTÛ[Û_ÛhÛlÛsÛwۈیەۙÛĸÛĻÛ¯ÛŗÛŧÛĀÛÉÛÍÛÖÛÚÛëÛīÛöÛúÛ Ü Ü܆ÜÜ$܆)Ü-Ü4܆9Ü=ÜD܆QÜUÜ^ÜbÜkÜoÜxÜ|܍ܑܚܞÜĨ܊ܲÜļÜŋÜÃÜĖÜĐÜŲÜŨÜæÜęÜķÜ÷ÜŨŨŨŨ!Ũ%Ũ5Ũ9ŨBŨFŨOŨSŨ\Ũ`ŨiŨmŨvŨzŨƒŨ‡ŨŨ”ŨŨĄŨ˛ŨļŨŋŨÃŨĖŨĐŨŲŨŨŨæŨęŨķŨ÷ŨŪŪ ŪŪ"Ū&Ū/Ū3Ū:Ū>ŪGŪKŪTŪXŪaŪeŪnŪrŪƒŪ‡ŪŽŪ’Ū™ŪŪĻŪĒŪąŪĩŪžŪÂŪŅŪÕŪŨŪáŪéŪíŪõŪųŪßßßß"ß&ß/ß3ß<ß@ßIßMß^ßbßkßoßxß|߅߉ߒߖߧßĢ߲ßļßŋßÃßĖßĐßŲßŨßæßęßûß˙ßā āāā*ā.ā7ā;āDāHāYā]ādāhāwā{ā„āˆā‘ā•āĻāĒāąāĩāžāÂāËāĪāāāäāíāņāúāūāááá á)á-á>áBáIáMá\á`áiámá~á‚á“á—á á¤áĩášáÂáÆá×áÛáâáæáõáųáââââ$â(â9â=âDâHâWâ[âdâhâyâ}â†âŠâ›âŸâĻâĒâšâŊâÄâŅâÕâŪâââéâíâūâã ã ãã!ã*ã.ã5ã9ãJãNãUã]bãfãmãqã‚ã†ã—ã›ãŦã°ãŋãÃãÔãØãáãåãėãđãääää)ä-ä6ä:äAäEäVäZäiämä~ä‚ä‹ää–äšäĢä¯äžäÂäĶä×äčäėäûä˙äå ååå&å*å2å6å>åBåJåNå^åbåjånåvåzå‚å†åŽå’åšåžåĻåĒåēåžåÆåĘåŌåÖåŪåâåęåîåõåųåææææ!æ%æ-æ1æ8æ<æDæHæQæUæ]æaæiæmæ}ææ‹ææ›æŸæŠæ­æšæŊæÉæÍæŲæŨæņæõæüæįį įįį'į+į4į8įAįEįVįZįbįfįnįrįyį}į…į‰į™įį¤į¨į¯įŗįēįžįÍįŅįØįÜįãįįįîįōįųįũįčččč"č&č.č2č9č=čEčIčYč]čečičyč}č…č‰č™čč­čąčÁčÅčÕčŲčāčäčėčđč÷čûč éééé)é-é6é:éKéOéXé\éméqéxé|é‹éé˜éœéŖé§é¸éŧéËéĪé×éÛéëéīéöéúéęęęę!ę%ę.ę2ęCęGęPęTę]ęaęręvę}ęęę”ęĨęŠę˛ęļęŊęÁęŌęÖęåęéęđęôęüęëë ëëëë#ë+ë/ë>ëBëKëOëVëZëcëgëpëtë…ë‰ë˜ëœëŖë§ë¯ëŗëģëŋëÎëŌëŲëŨëäëčë÷ëûëėėėė"ė&ė-ė1ė@ėDėTėXėaėeėvėzėė…ė–ėšėĸėĻėĩėšėÂėÆėÍėŅėŲėŨėåėéėōėöėũėí íííí!í%í-í1í:í>íEíIíRíVí]íaírívííƒíŠíŽí–íšíĸíĻí¯íŗíēížíĮíËíŌíÖíŪíâíęíîí÷íûíîîîîîî/î3î:î>îEîIîQîUî\î`îpîtî|î€îˆîŒîœî î§îĢî˛îļîÅîÉîŌîÖîŨîáîōîöîī īīī%ī)ī8ī<īKīOī^ībīiīmītīxīī…īŒīī—ī›īĒīŽīˇīģīÂīÆīÎīŌīÚīŪīįīëīôīøī˙īđ đđđđ#đ'đ/đ3đ<đ@đGđKđTđXđađeđvđzđđ]Žđ’đ¤đ¨đĩđšđČđĖđÛđßđņđõđņņņņ ņ]-ņ1ņCņGņPņTņcņgņnņrņyņ}ņ„ņˆņ‘ņ•ņœņ ņ¯ņŗņŧņĀņÉņÍņÔņØņáņåņîņōņųņũņō ōōō&ō*ō9ō=ōDōpQōUōgōkōtōxō‡ō‹ō”ō˜ōĄōĨōŽō˛ōÃōĮōÛōßōæōĶķō÷ō˙ōķ ķķķ#ķ2ķ6ķEķIķRķVķ]ķaķrķvķ}ķ]ŠķŽķ ķ¤ķąķĩķÄķČķ×ķÛķíķņķūķôôô$ô(ô1ô5ô<ô@ôQôUôdôhôwô{ôŠôŽô—ô›ô¤ô¨ôšôŊôÅôÉôØôÜôåôéôōôöô˙ôõ õõõõ.õ2õFõJõQõĶ^õbõiõmõ|õ€õ‰õõ”õ˜õ õ¤õŦõ°õÁõÅõĖõĐõßõãõęõîõũõöö ööö&ö]+ö/ö6ö]CöGöQöUögököxö|ö‹öö˜öœö­öąöģöŋöŅöÕöįöëöōö]˙ö÷ ÷÷÷#÷-÷1÷C÷G÷N÷]S÷W÷^÷]k÷o÷€÷„÷‹÷÷˜÷œ÷Ģ÷¯÷ļ÷ē÷É÷Í÷Ö÷Ú÷á÷å÷ö÷ú÷ øø ø$ø-ø1ø8ø<øMøQøcøgøwø{øŒøø™øø¤ø¨øšøŊøĖøĐøßøãøėøđø÷øûø ųųų#ų,ų0ų7ų;ųLųPų_ųcųjųoųsųzų~ų…ų‰ų˜ųœųŖų§ųŽų˛ųšųŊųÄųČųĪųĶųâųæųíųņųøųüų úúúú)ú-ú6ú:úAúEúNúRúcúgúnúrúyú}úŒúúŸúŖú´ú¸úŋúÃúĖúĐú×úÛúėúđúųúũúûûûû$û(û9û:=û:Eû:Iû:Pû:Tû:cû:gû:nû:rû:yû:}û:Œû:û:™û:û:Žû:˛û:Áû:Åû:Ėû]Ņû:Õû:Üû]éû:íû:öû:úû:ü:ü:ü:ü:#ü:'ü:.ü];ü:?ü:Hü:Lü:Sü:Wü:`ü:dü:kü:oü:xü:|ü:ƒü:‡ü:˜ü:œü:Ŗü]°ü:´ü:Ŋü:Áü:Čü:Ėü:Õü:Ųü:āü:äü:õü:ųü:ũ] ũ:ũ:ũ:ũ:%ũ:)ũ::ũ:>ũ:Gũ:Kũ:\ũ:`ũ:iũ:mũ:~ũ:‚ũ:‰ũ:ũ:œũ: ũ:Šũ:­ũ:´ũ:¸ũ:Éũ:Íũ:ÜũMāũMčũMėũMķũM÷ũMūM ūMūMūMūM!ūM1ūM5ūM>ūMBūMSūMWūMfūMjūMqū]vūMzū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=˙MA˙MH˙]U˙MY˙Mb˙Mf˙Mm˙Mq˙Mz˙M~˙M…˙M‰˙Mš˙Mž˙MĨ˙]˛˙Mļ˙Mŋ˙MÃ˙MĘ˙MÎ˙Mß˙Mã˙Mė˙Mđ˙MMMMM#M'M.M2MAMEMNMRMYM]MnMrMO…O”O˜OŸ|¤O¨O¯|ŧOĀOĮpĖOĐO×päQčQīQķQQQ QQQQ-Q1Q8Q<QMQQQZQ^QjQnQzQ~Q’Q–QQĄQ¨QŦQĩQšQČQĖQĶQ×QŪQâQéQíQüQQ]QQQ#Q48BFRVbfpt€„”¨ŦŗˇÆĘŅÕäčīķ"&26JNUY`dsw~‚‰”˜§Ģ˛]ŋÃŌÖāäđô".2FJQUdhos|€“šž¯ŗŊÁÍŅŨáõų +/6:AELP_cj]w{‚†—›ĸĻŽ˛šŊÅÉØÜãįöú%)8<CGPTcgnrƒ‡™¤¨¯ŗŧĀĪĶÚŪåéđô]&*;?FJQU^bimtx‰”˜ŸŖ˛ļŊÁĐÔÛĶāäëĶđôûĶ ,07;JNUYaeuyˆŒžĸŠ­´¸ĀÄÔØßãęîõų     p# ' . p; ? F ]S W g k r v ~ ‚ Š Ž – š Ē Ž ĩ š  Æ Í Ņ Ø Ü í ņ ø ü     ! Ķ& * 1 Ķ> B I M U Y a e l p x | Œ  — ]œ   § ]´ ¸ ŋ ]Ė Đ × ĶÜ ā į Ķô ø ˙     ! ( , ; ? F ]K O V ]c g n ]{  † Š ‘ • ¤ ¨ ˛ ļ Ā Ä Ö Ú á å ô ø ˙     ! 0 4 > B T X _ c j n u y ˆ Œ “ — Ÿ Ŗ Ē Ž ļ ē Ę Î Ũ á č ė ô ø ˙      ) - 4 8 ? C R V ] Ķb f m Ķr v } ĶŠ Ž ˜ œ Ļ Ē ŧ Ā Į Ë Ú Ū å é ō ö ũ 04>BTX_cjnw{‚†•™ ¤Ŧ°¸ŧÃĮĪĶãįîō&*15<@GKTX_cjnƒŠŽ•™ ¤ŗˇÁÅĪĶŨáķ÷ū '+:>MQ[_imƒŠŽ•™ ¤ŗˇžÂĘÎÕŲáåõų #*.59HLSWfjqĶvzĶ†Š‘Ķ–šĄĶޞŧĀŌÖŨáđôû˙ ,0BFMQX\cgvz…Œ—›ĸĻĩšČĖĶ×āäëīöú#'.29=DHW[bĶgkrĶw{‚͇‹’ĶŸŖĒŽļēÁÅÍŅáåė]ņõü]  ]!%,Ķ15<ĶAELĶY]dhos‚†‘šžĨа´ÅÉĐÔÛßîōųĶū ĶĶ&*15=AIMTX`dtx]„ˆ]œ §]´¸ŋĶĖSĐSØSÜSãSįSđSôSSSSSSS&S*S;S?SHSLSUSYS`SdSuSyS€S„S“—ĻĒšŊĪĶãįîō -1@DKOX\cgpt}ˆŒĄĢ¯ļēÄČĪĶŨáëīųũ!+/6:LPW[jnw{„ˆ‘•ĻĒąĩžÂÉÍÖÚãįîō!%.2;?HL]ahluy€„‘šžĨŠēžÅÉØÜåéōö˙#,07;DHQU\`qu|€“Ą¨ŦļēÁÅĪĶŨáëī $(15>BIM^bim|€‰–𪧏ŧÃĮĐÔÛßčėõų $37>BLPW[eipt~‚Œ—›ĨŠŗˇÉÍÖÚãįđôũ!04>BLPZ^hl~‚‹˜œĨОļĮËŌÖåéķ÷!37@DMQZ^gk|€‡‹šž¨ŦļēÄČŌÖčėõų 15<@OS]akoy}‡‹ĄĒގģÄČŅÕæęņõ     $ . 2 < @ J N ` d m q z ~ ‡ ‹ ” ˜ Ą Ĩ ļ ē Á Å Ô Ø â æ đ ô ū ! !!!!0!4!=!A!J!N!W![!d!h!q!u!†!Š!‘!•!¤!¨!˛!ļ!Ā!Ä!Î!Ō!Ü!ā!ę!î!"" """"'"+"4"8"A"E"V"Z"a"e"t"x"‚"†""”"ž"ĸ"Ŧ"°"ē"ž"Đ"Ô"Ũ"á"ę"î"÷"û"####&#*#1#5#D#H#R#V#`#d#n#r#|#€#Š#Ž# #¤#­#ą#ē#ž#Į#Ë#Ô#Ø#á#å#ö#ú#$$$$"$&$0$4$>$B$L$P$Z$^$p$t$}$$Š$Ž$—$›$¤$¨$ą$ĩ$Æ$Ę$Ņ$Õ$ä$č$ō$ö$%%%%% %*%.%@%D%M%Q%Z%^%g%k%t%x%%…%–%š%Ą%Ĩ%´%¸%Â%Æ%Đ%Ô%Ū%â%é%í%÷%û%& &&&)&-&6&:&C&G&P&T&]&a&j&n&&ƒ&Š&Ž&&Ą&Ē&Ž&ˇ&ģ&Ä&Č&Ņ&Õ&Ū&â&ķ&÷&'' ''''''+'4'8'I'M'V'Z'c'g'p't'}''Š'Ž'Ÿ'Ŗ'´'¸'Ö'Ú'é'í'ô'ø'˙'((((#(,(0(9(=(F(J(S(W(`(d(u(y(€(„(‹((ž(ĸ(Š(­(¸(ŧ(Ã(Į(Ō(Ö(Ũ(á(ô(ø())))))(),)5)9)B)F)W)[)b)f)q)u)|)€)“)—)Ÿ)Ŗ)ŗ)ˇ)ž)Â)É)Í)Ô)Ø)į)ë)ķ)÷)˙)* ****#*'*/*3*;*?*G*K*[*_*h*l*u*y*Š*Ž*•*™* *¤*Ģ*¯*ļ*ē*É*Í*Ô*Ø*á*å*ė*đ*˙*+ ++++"+&+5+9+@+D+S+W+^+b+q+u+“+—+Ļ+Ē+Č+Ė+Û+ß+č+ė+õ+ų+,,,,, ,),-,6,:,C,G,P,T,e,i,r,v,,ƒ,Œ,,™,,Ļ,Ē,ŗ,ˇ,Ā,Ä,Í,Ņ,Ú,Ū,ī,ķ,ü,- ----'-+-<-@-H-L-\-`-h-l-|-€-‡-ĶŒ--—-ͤ-¨-ą-ĩ-ž-Â-Ķ-×-Ū-â-ë-ī-ū-. . ...).-.4.8.A.E.T.X._.c.l.p.w.{.Œ..™..Ž.˛.Á.Å.Î.Ō.Û.ß.č.ė.õ.ų.///// /)/-/>/B/`/d/s/w/•/™/¨/Ŧ/Ŋ/Á/Ę/Î/×/Û/ä/č/ņ/õ/ū/0 0000%0)0:0>0F0J0R0V0^0b0j0n0v0z0‚0†0Ž0’0š0ž0Ž0˛0Ã0Į0Đ0Ô0Ũ0á0ę0î0÷0û011111"1+1/1@1D1L1P1X1\1d1h1p1t1|1€1ˆ1Œ1”1˜1 1¤1´1¸1ŋ1Ã1Í1Ņ1Û1ß1æ1ę1ô1ø122222"2,202:2>2E2I2[2_2f2ök2o2v2ö{22†2ö‹22–2ö›2Ÿ2Ļ2öĢ2¯2ļ2öģ2ŋ2Æ2öË2Ī2Ö2öÛ2ß2æ2öķ2÷2ū23 3333%3)33373A3E3O3S3]3a3k3o3y3}33“3œ3 3Š3­3ļ3ē3Ã3Į3Đ3Ô3Ũ3á3ę3î3÷3û3 4444*4.4?4C4U4Y4b4f4m4q4x4|4…4‰44”4›4Ÿ4Ē4Ž4ˇ4ģ4Ä4Č4Ī4Ķ4Ú4Ū4į4ë4ô4ø4555555$5(51555>5B5I5M5^5b5i5…m5q5x5…|5€5‡5…“5—5ž5ĸ5Š5­5´5¸5Į5Ë5Ü5ā5ę5î5õ5ų5 666"64686B6F6M6Q6c6g6v6z6‹66™66¤6¨6ē6ž6Í6Ņ6ã6į6ņ6õ6ü6777%7)7;7?7I7M7T7X7j7n7}77“7—7Ą7Ĩ7Ŧ7°7Â7Æ7Õ7Ų7ë7ī7ų7ũ78888-818C8G8X8\8k8o8v8z88…8Œ88Ÿ8Ŗ8Ē8Ž8ĩ8š8Ā8Ä8Ë8Ī8Ū8â8ë8ī8ø8ü89 9999#9,90999=9N9R9^9b9i9m9x9‘9•9§9Ģ9ŧ9Ā9Ī9Ķ9â9æ9÷9û9 :: :$:5:9:H:L:^:b:s:w:†:Š:œ: :ą:ĩ:Ä:Č:Ú:Ū:ī:ķ:;;;;-;1;@;D;V;Z;k;o;~;‚;”;˜;Š;­;ŧ;Ā;Ō;Ö;į;ë;ú;ū;<<%<)<8<<<N<R<c<g<v<z<Œ<<Ą<Ĩ<´<¸<Į<Ë<Ü<ā<ī<ķ<= ===-=1=@=D=U=Y=h=l=~=‚=“=—=Ļ=Ē=ŧ=Ā=Ņ=Õ=ä=č=ú=ū=>>">&>8><>M>Q>`>d>v>z>‹>>ž>ĸ>Š>­>´>¸>Į>Ë>Ũ>á>ō>ö>? ???-?1?@?D?V?Z?k?o?~?‚?”?˜?Š?­?ŧ?Ā?Ō?Ö?į?ë?ú?ū?@@%@)@8@<@N@R@c@g@v@z@Œ@@Ą@Ĩ@´@¸@Ę@Î@ß@ã@ō@ö@A AA!A0A4ACAGAXA\AkAoAA…A–AšAŠA­AŋAÃAÔAØAįAëAũABBB%B)B;B?BPBTBcBgBnBrBB…B—B›BŦB°BŋBÃBÕBŲBęBîBũBCCC(C,C;C?CQCUCfCjCyC}CC“C¤C¨CˇCģCĘCÎCßCãCōCöCD DD!D0D4DCDGDXD\DkDoDwD{DƒD‡D—D›DŖD§D¯DŗDÃDĮDØDÜDåDéDōDöDE EEE#E'E0E4E=EAEREVE]EĶbEfEmEĶrEvE}EĶŠEŽEŖE§EŽEĶģEŋEČEĖEÕEŲEęEîE FFF#FAFEFTFXF`FdFlFpF€F„FŒFF˜FœFŦF°FēFžFČFĖFŪFâFëFīFøFüF GGGG+G/G9G=GOGSG\G`GqGuG|G€GG“GœG GąGĩGžGÂGÍGŅGÚGŪGīGķGúGĶ˙GH HĶHH"HĶ/H3HDHHHfHjHyH}HŒHHĸHĻH°H´HģHŋHŅHÕHäHčHúHūHI III)I-IQHQLQSQWQaQeQlQpQzQ~Q…Q‰Q“Q—QžQĸQŦQ°QˇQģQÅQÉQĐQÔQæQęQņQõQüQR RRRR#R'R.R2RUEUJUNUUUbUfUnUrUyU}U…U‰U™UU¤UŠU­U´UšUŊUÄUŅUÕUÜUáUåUėUņUõUüU V VVV V$V,V0V@VDVLVPVXV\VlVpVxV|V„VˆV˜VœVŖV§V¯VŗVģVŋVĪVĶVÚVßVãVęVīVķVúVW WWWW"W'W+W2W?WCWKWOWWW[WkWoWvW{WW†WŠW™WW¤W¨W¯WŗWÂWÆWÍWŅWÚWŪWíWņWøWüWX XXX#X'X.X2XAXEXMXQXaXeXlXqXuX|XX…XŒX™XX¤XŠX­X´XšXŊXÄXŅXÕXŨXáXéXíXũXYY YYYY!Y(Y5Y9Y@YEYIYPYUYYY`YmYqYyY}Y…Y‰Y™YYĨYŠYąYĩYÅYÉYŅYÕYŨYáYņYõYüYZZ ZZZ(Z,Z3Z8Z[B[I[M[\[`[g[k[t[x[[ƒ[’[–[[Ą[°[´[ŧ[Ā[Đ[Ô[ä[č[\\\\7\;\J\N\U\Z\^\e\j\n\u\z\~\…\’\–\\ĸ\Ļ\­\˛\ļ\Ŋ\Â\Æ\Í\Ú\Ū\æ\ę\ņ\õ\ũ\]]]]!]%],]1]5]<]A]E]L]Y]]]d]i]m]t]y]}]„]‰]]”]Ą]Ĩ]­]ą]¸]ŧ]Ä]Č]Ø]Ü]ä]č]đ]ô]ü]^^^^ ^(^,^4^8^H^L^S^W^_^c^k^o^^ƒ^Š^^“^š^Ÿ^Ŗ^Ē^ˇ^ģ^Â^Į^Ë^Ō^×^Û^â^ī^ķ^û^˙^_ ___&_+_/_6_:_A_E_T_X___c_j_n_}__ˆ_Œ_•_™_ _¤_ŗ_ˇ_ž_Â_Ë_Ī_Ö_Ú_é_í_ô_ø_` ```'`+`4`8`A`E`V`Z`a`e`l`p`w`{`ƒ`‡`–`š`Ŗ`§`¸`ŧ`Î`Ō`Ú`Ū`æ`ę`ú`ū`a] aaa]aa%a]2a6a=aAaHaLa[a_anaraya]~a‚a‰a]–ašaĄaĨaŦa°aŋaÃaĘaÎa×aÛaäača÷aûab]b bb]b#b2b6b=bAbJbNbWb[bjbnbwb{b„bˆb™bb¤b¨bˇbģbÄbČbŲbŨbėbđb˙bc cccc*c.c5c9cBcFcMcQcbcfcocsc„cˆcc“cĸcĻc¯cŗcÄcČcācäcķc÷cdd"d&d5d9dHdLdSd]`dddkdoddƒd“d—d¨dŦdĩdšdĀdÄdÕdŲdčdėdôdødee eeee.e2e9e=eJeNe[e_efejewe{eˆeŒe›eŸeĻeĒe´e¸eÂeÆeĐeÔeŪeâeéeíe÷eûef fff!f%f7f;fDfHfQfUf^fbfkfofxf|f…f‰f’f–fŸfŖf´f¸fŋfÃfĪfĶfâfæfífņfgggg%g)g0g4gCgGgNgRg_gcgpgtg{ggŒgggĄg¨gŦgŗgˇgžgÂgÉgÍgÜgāgégígúgūg hhhh)h-h:h>hGhKhThXhahehnhrhƒh‡hŽh’hĸhĻh­hąhĀhÄhÍhŅhâhæhíhņhiiii$i(i1i5iFiJiQiUidihioisi€i„i‘i•iœi i­iąižiÂiÉiÍiÔiØißiãięiîiũij jjjj,j0j9j=jJjNj[j_jhjljujyj‚j†jj“j¤j¨j¯jŗjÃjĮjÎjŌjájåjîjōjkkkk!k%k/k3kEkIkRkVkgkkkrkvk…k‰kk”kžkĸkŦk°kēkžkČkĖkĶk×kákåkīkķkũkl ll!l%l.l2l;l?lHlLlUlYlblflolsl|l€l‰llžlĸlŠl­lšlŊlĖlĐl×lÛlílņlúlūlmmmm-m1m:m>mGmKmTmXmamemnmrm{mmˆmŒmmĄmĒmŽmˇmģmÄmČmŅmÕmŪmâmëmīmømüm nnnn(n,n;n?nFnJn[n_nhnln}nnˆnŒn›nŸn¨nŦnĩnšnÂnÆnĪnĶnÜnānņnõnūno oooo%o)o2o6oGoKoRoVobofouoyo‚o†o—o›o¤o¨ošoŊoÄoČo×oÛoäočoņoõoūop pppp-p1p9p=pMpQpZp^pgpkptpxpp…pŽp’pŖp§p°p´pŊpÁpĘpÎp×pÛpäpčpųpũpqqqq#q'q.q2q9q=qDqHqOqSqZq^qeqiqpqtq{qqŽq’q›qŸq°q´qÁqÅqÚqŪqåqéqđqôqûq˙qrrrr(r,r5r9rJrNrUrYr`rdrkror~r‚r‹rr˜rœrĨrŠrēržrĮrËrÔrØrárårörúrsssss!s2s6s=sAsPsTs[s_shslsusys‚s†s—s›sĸs]§sĢs˛s]ˇsģsÂs]ĮsËsŌs]×sÛsâs]īsķsûs˙sttt t)t-t6t:tKtOtVt][t_tft]ktotvt]{tt†t]“t—tĻtĒtŗtˇtĀtÄtÍtŅtâtætītķtütu u uu"u)u-uwGwKw\w`wiwmw~w‚w‰wwœw wŠw­wžwÂwËwĪwāwäwëwīwūwx xx x$x-x1xBxFxMxQx`xdxuxyx‚x†xx‘xĸxĻxĩxšxĘxÎx×xÛxâxæx÷xûx yyy#y,y0y7y;yLyPy_ycytyxyy…yŒyyĄyĨy´y¸yÉyÍyŪyâyņyõyz zzzz"z3z7zFzJz[z_zpztzƒz‡z˜zœzĨzŠz°z´zÅzÉzØzÜzæzęzüz{ { {{"{){-{<{@{Q{U{^{b{i{m{~{‚{‘{•{Ļ{Ē{ģ{ŋ{Î{Ō{ä{č{ō{ö{ũ{|||&|*|<|@|I|M|T|X|i|m|||€|’|–|§|Ģ|ē|ž|Ī|Ķ|ä|č|÷|û| }}}}%})}:}>}M}Q}c}g}x}|}‹}}Ą}Ĩ}Ž}˛}š}Ŋ}Î}Ō}á}å}÷}û} ~~~#~4~8~A~E~L~P~a~e~t~x~‰~~ž~ĸ~ą~ĩ~Į~Ë~Ü~ā~ī~ķ~ !26EIPT[_nr|€‡‹•™Ŗ§ąĩŋÃÍŅÛßņõü€ €€€€#€'€1€5€?€C€M€Q€[€_€q€u€~€‚€‹€€˜€œ€Ĩ€Š€˛€ļ€ŋ€ÀԀ؀߀ã€ī€ķ€&*37HLSWfjqu~‚Œ—›¤¨˛ļŋÁˁЁ؁Ũæęķ÷‚ ‚‚‚"‚&‚/‚3‚<‚@‚I‚M‚V‚Z‚c‚g‚p‚t‚}‚‚’‚–‚‚Ą‚­‚ą‚Ā‚Ă΂Ō‚ä‚č‚ņ‚õ‚ƒ ƒƒƒ$ƒ(ƒ/ƒ3ƒ<ƒ@ƒIƒMƒTƒXƒaƒeƒnƒrƒ{ƒƒˆƒŒƒ•ƒ™ƒǃރˇƒģƒăȃ҃Ճۃâƒëƒīƒøƒüƒ„ „„„%„)„5„9„H„L„U„Y„j„n„w„{„Œ„„—„›„DŽބĩ„š„„Ƅ΄̈́ڄŪ„į„ë„ô„ø„………………0…4…=…A…J…N…W…[…d…h…q…u…~…‚…‹…… …¤…Ģ…¯…ģ…ŋ…΅Ō…ۅ߅đ…ô…ũ…††††!†0†4†=†A†J†N†W†[†d†h†q†u†~†‚†“†—† †¤†­†ą†ē†ž†Į†ˆԆ؆á†å†ö†ú†‡‡‡‡$‡(‡/‡3‡D‡H‡Q‡U‡f‡j‡q‡u‡„‡ˆ‡‘‡•‡ž‡ĸ‡̇¯‡¸‡ŧ‡͇҇ڇŪ‡į‡ë‡ô‡ø‡ˆˆˆˆ!ˆ%ˆ1ˆ5ˆDˆHˆQˆUˆfˆjˆsˆwˆˆˆŒˆ“ˆ—ˆψLjąˆĩˆŧˆˆĮˆˈۈ߈čˆėˆõˆųˆ‰‰‰‰$‰(‰/‰3‰:‰>‰M‰Q‰X‰]]‰a‰h‰]u‰y‰ˆ‰Œ‰•‰™‰ĸ‰ω¯‰ŗ‰ĉȉ҉ՉŪ‰â‰ë‰ī‰ŠŠ ŠŠŠ"Š*Š.Š=ŠAŠHŠLŠ[Š_ŠpŠtŠ{Š]€Š„Š‹Š]˜ŠœŠŖŠ§ŠļŠēŠĊȊԊ֊āŠäŠöŠúŠ‹]‹ ‹‹]‹"‹1‹5‹?‹C‹M‹Q‹[‹_‹q‹u‹~‹‚‹‹‹‹˜‹œ‹­‹ą‹¸‹ŧ‹ˋĪ‹ā‹ä‹í‹ņ‹ø‹ü‹ ŒŒ Œ$Œ5Œ9ŒJŒNŒ]ŒaŒsŒwŒŒ…ŒŒŒŒĸŒόĩŒšŒˌΌ،܌ãŒįŒøŒüŒ !%6:IM^bsw†Š›Ÿ°´ÍĮ؍܍åéđôŽ ŽŽŽ-Ž1ŽBŽFŽUŽYŽjŽnŽwŽ{ނކޗޛŽĒŽŽŽŋŽÎԎ؎įŽëŽũŽ%):>GKRVgkz~“œ §ĢŧĀĪĶڏ]ߏãę]īķú] !(,37FJTX_cmq{‰—›ĨАŗˇɐ͐Ԑؐāäėđøü‘‘‘‘‘ ‘(‘,‘<‘@‘G‘K‘V‘Z‘c‘g‘p‘t‘}‘‘’‘–‘‘Ą‘Ģ‘¯‘š‘Ŋ‘Į‘ˑՑŲ‘ā‘ä‘î‘ō‘ü‘’ ’’ ’$’-’1’:’>’G’K’T’X’a’e’n’r’{’’’”’›’Ÿ’Ģ’¯’ž’’ɒ͒ߒã’ė’đ’““ “““#“+“/“7“;“C“G“O“S“[“_“g“k“s“w““ƒ“““—“ž“ĸ“­“ą“ē“ž“Į“˓ԓؓá“å“ö“ú“”””””!”+”/”9”=”D”H”R”V”`”d”n”r”„”ˆ”‘”•”ž”ĸ”Ģ”¯”¸”ŧ”ŔɔŌ”֔ߔã”ô”ø”˙”•••"•&•-•1•C•G•P•T•e•i•p•t•ƒ•‡••“•›•Ÿ•§•Ģ•ŗ•ˇ•ŋ•Õ˕Ī•וەã•į•÷•û•––––&–*–1–5–?–C–M–Q–[–_–f–j–t–x–‚–†––‘–›–Ÿ–Š–­–ˇ–ģ–͖Ņ–ؖܖå–é–ō–ö–˙–— ————&—*—1—5—>—B—K—O—X—\—m—q—x—|—‹——™——§—Ģ—ĩ—š—×Į—Ņ—՗ߗã—í—ņ—˜˜˜˜˜!˜*˜.˜7˜;˜D˜H˜Q˜U˜^˜b˜s˜w˜~˜‚˜‘˜•˜œ˜ ˜ǘޘ¸˜ŧ˜ƘʘҘ՘ߘã˜í˜ņ˜û˜˙˜ ™ ™™™-™1™:™>™G™K™T™X™a™e™n™r™{™™ˆ™Œ™•™™™Ē™Ž™ĩ™š™řəؙܙã™į™ø™ü™š ššš%š)š8š<šDšHšPšTš\š`šhšlštšxšˆšŒš—š›šǚޚĩššššƚΚ͚ܚāšįšëšôšøš˙š› ››››&›*›;›?›H›L›U›Y›b›f›o›s›|›€›‰››ž›ĸ›Š›­›ŧ›Ā›ɛ֛͛ڛã›į›đ›ô›ũ›œ œœœ#œ,œ0œ9œ=œFœJœSœWœ`œdœmœqœ‚œ†œœ‘œ œ¤œŦœ°œ¸œŧœĜȜ؜ܜįœëœúœūœ #,07;BFOS\`imvz‹˜œĨŠ˛ļŋÝĖНŲŨæęķ÷ž žžž&ž*ž3ž7ž@žDžMžQžZž^žgžkžtžxžž…ž–žšžŖž§ž°ž´žŊžÁžʞΞמ۞äžčžņžõžŸ ŸŸŸ$Ÿ(Ÿ/Ÿ3ŸBŸFŸOŸSŸdŸhŸoŸsŸ‚Ÿ†ŸŸ“Ÿ¤Ÿ¨ŸąŸĩŸƟƟҟ՟äŸčŸøŸüŸ     ! % . 2 ; ? H L ] a j n w { „ ˆ ‘ • ž ĸ ŗ ˇ ž  É Í Ô Ø į ë ô ø ĄĄĄĄĄĄ(Ą,Ą=ĄAĄJĄNĄWĄ[ĄdĄhĄqĄuĄ~Ą‚Ą“Ą—ĄžĄĸĄąĄĩĄžĄÂĄËĄĪĄØĄÜĄíĄņĄúĄūĄĸ ĸĸĸ)ĸ-ĸ4ĸ8ĸDĸHĸWĸ[ĸdĸhĸyĸ}ĸ†ĸŠĸ›ĸŸĸĻĸĒĸšĸŊĸÅĸÉĸØĸÜĸãĸįĸīĸķĸŖŖŖŖ%Ŗ)Ŗ3Ŗ7ŖNŖRŖYŖ]ŖnŖrŖ‚Ŗ†Ŗ™ŖŖ˛ŖļŖĮŖËŖâŖæŖíŖ]ōŖöŖũŖ] ¤¤¤¤(¤,¤6¤:¤D¤H¤R¤V¤h¤l¤v¤z¤„¤ˆ¤’¤–¤¨¤Ŧ¤ĩ¤š¤¤ƤΤͤä¤č¤ī¤ķ¤ĨĨĨĨ%Ĩ)Ĩ0Ĩ4ĨEĨIĨXĨ\ĨmĨqĨ‚Ĩ†Ĩ•Ĩ™ĨĢĨ¯ĨšĨŊĨÄĨČĨÚĨŪĨíĨņĨĻĻĻĻĻĻ/Ļ3ĻBĻFĻWĻ[ĻlĻpĻĻƒĻ”Ļ˜ĻŠĻ­ĻŧĻĀĻŌĻÖĻįĻëĻúĻūϧ§§!§(§,§=§A§P§T§f§j§{§§ާ’§Ŗ§§§¸§ŧ§˧Χā§ä§õ§ų§¨ ¨¨!¨*¨.¨5¨9¨J¨N¨]¨a¨r¨v¨‡¨‹¨š¨ž¨¯¨ŗ¨ŧ¨Į¨˨ܨā¨ī¨ķ¨ŠŠŠŠŠ Š1Š5ŠDŠHŠZŠ^ŠgŠkŠrŠvŠ‡Š‹ŠšŠžŠ°Š´ŠÅŠÉŠØŠÜŠîŠōŠûŠ˙ŠĒ ĒĒĒ.Ē2Ē:Ē>ĒFĒJĒQĒUĒ^ĒbĒkĒoĒxĒ|Ē…Ē‰Ē’Ē–ĒžĒĸĒĢǝĒĀĒÄĒÍĒŅĒØĒÜĒåĒéĒõĒųĒĢ ĢĢĢ%Ģ)Ģ5Ģ9ĢBĢFĢRĢVĢbĢfĢzĢ~ĢˆĢŒĢ“Ģ—ĢĄĢĨ̝̺ĢŊĢÁĢËĢĪĢŲĢŨĢäĢčĢōĢöĢũĢŦŦŦ)Ŧ-Ŧ7Ŧ;ŦBŦFŦXŦ\ŦkŦoŦvŦ]{ŦŦ†Ŧ]‹ŦŦ–Ŧ]ŖŦ§ŦˇŦģŦÃŦĮŦĪŦĶŦãŦįŦņŦõŦüŦ­ ­­­­#­'­1­5­?­C­M­Q­[­_­i­m­­ƒ­­‘­˜­œ­Ļ­Ē­ą­ĩ­ŋ­íÍ­Ņ­Û­ß­é­í­÷­û­Ž ŽŽŽ'Ž+Ž;Ž?ŽIŽMŽTŽXŽbŽfŽmŽqŽ{ŽŽ‰ŽŽ—Ž›ŽĨŽŠŽŗŽˇŽÁŽÅŽ׎ÛŽâŽæŽđŽôŽūޝ ¯¯¯¯(¯,¯3¯7¯A¯E¯L¯P¯b¯f¯x¯|¯„¯ˆ¯˜¯œ¯ϝǝą¯ĩ¯Ŋ¯Á¯ɯͯׯÛ¯å¯é¯ķ¯÷¯°°°°%°)°2°6°B°F°R°V°`°d°n°r°|°€°аް˜°œ°ް˛°ðĮ°ҰÕ°ܰā°ō°ö°ũ°ą ąąąą$ą(ą2ą6ą@ąDąSąWąaąeąoąsą}ąą‹ąąĄąĨąŦą°ąŋąÃąÍąŅąÛąßąéąíą÷ąûą ˛˛˛˛)˛-˛7˛;˛E˛I˛[˛_˛i˛m˛w˛{˛…˛‰˛“˛—˛О­˛ˇ˛ģ˛Şɲ͞ײá˛å˛÷˛û˛ŗŗŗŗ#ŗ'ŗ1ŗ5ŗ?ŗCŗMŗQŗcŗgŗqŗuŗŗƒŗŗ‘ŗ›ŗŸŗąŗĩŗŋŗÃŗÍŗŅŗÛŗßŗéŗíŗ˙ŗ´ ´´´´)´-´7´;´M´Q´[´_´f´j´t´x´‚´†´´”´ž´ĸ´´´¸´´Æ´Đ´Ô´Ū´â´ė´đ´ĩĩĩĩĩ"ĩ,ĩ0ĩ:ĩ>ĩHĩLĩ^ĩbĩlĩpĩzĩ~ĩˆĩŒĩ–ĩšĩŦĩ°ĩˇĩģĩĘĩÎĩØĩÜĩæĩęĩôĩøĩ ļļļļ&ļ*ļ4ļ8ļJļNļUļYļhļlļ~ļ‚ļŒļļ—ļ›ļ­ļąļĀļÄļÖļÚļäļčļīļķļˇ ˇˇˇ.ˇ2ˇ<ˇ@ˇGˇKˇ]ˇaˇpˇ[tˇ[|ˇ[€ˇ[‡ˇ[‹ˇ[’ˇ[–ˇ[ˇ[Ąˇ[¨ˇ[Ŧˇ[ŗˇ[ˇˇ[žˇ[¡[ɡ[͡[Ôˇ[Øˇ[įˇ[ëˇ[ûˇ[˙ˇ[¸[ ¸[¸[¸[.¸[2¸[A¸[E¸[L¸[P¸[a¸[e¸[m¸[q¸[y¸[}¸[…¸[‰¸[™¸[¸[¤¸[¨¸[¯¸[ŗ¸[¸[Ƹ[͸[ҏ[Ú¸[Ū¸[į¸[ë¸[ō¸[ö¸[š[ š[š[š[%š[)š[:š[>š[Mš[Qš[Zš[^š[eš[iš[rš[vš[‡š[‹š[”š[˜š[Šš[­š[ļš[ēš[Ëš[Īš[Öš[Úš[éš[íš[ūš[ē[ ē[ē[ē[ē[+ē[/ē[>ē[Bē[Mē[Qē[\ē[`ē[sē[wē[ē[ƒē[‹ē[ē[—ē[›ē[Ŗē[§ē[ˇē[ģē[Ãē[Įē[Īē[Ķē[Úē[Ūē[æē[ęē[ōē[öē[ūē[ģ[ ģ[ģ[ģ[ģ["ģ[&ģ[.ģ[2ģ[:ģ[>ģ[Fģ[Jģ[Rģ[Vģ[^ģ[bģ[rģ[vģ[}ģĶ‚ģ[†ģ[ģĶ’ģ[–ģ[ģĶĒģ[Žģ[ļģ[ēģ[Âģ[Æģ[Öģ[Úģ[âģ[æģ[îģ[ōģ[ŧ[ŧ[ŧ[ŧ[ŧ[ŧ[$ŧ[(ŧ[7ŧ[;ŧ[BŧĶGŧ[Kŧ[RŧĶWŧ[[ŧ[bŧĶoŧ[sŧ[zŧĶŧ[ƒŧ[ŠŧĶŧ[“ŧ[šŧĶŸŧ[Ŗŧ[Ēŧ͝ŧ[ŗŧ[ēŧĶĮŧ[Ëŧ[Ķŧ[×ŧ[ßŧ[ãŧ[ķŧ[÷ŧ[Ŋ[ Ŋ[Ŋ[Ŋ[/Ŋ[3Ŋ[CŊ[GŊ[OŊ[SŊ[[Ŋ[_Ŋ[oŊ[sŊ[€Ŋ[„Ŋ[‹Ŋ[Ŋ[—Ŋ[›Ŋ[ŖŊ[§Ŋ[ŽŊ[˛Ŋ[ēŊ[žŊ[ÆŊ[ĘŊ[ŌŊ[ÖŊ[ŨŊ[áŊ[ņŊ[õŊ[üŊ[ž[ž[ ž[ž[ž[ ž[$ž[,ž[0ž[8ž[<ž[Dž[Hž[Pž[Tž[dž[hž[wž[{ž[ƒž[‡ž[ž[“ž[›ž[Ÿž[§ž[Ģž[ŗž[ˇž[ŋž[Þ[Ëž[Īž[ßž[ãž[ęž[îž[öž[úž[ŋ[ŋ[ ŋ[ŋ[ŋ[ŋ[%ŋ[)ŋ[9ŋ[=ŋ[Lŋ[Pŋ[Xŋ[\ŋ[dŋ[hŋ[pŋ[tŋ[|ŋ[€ŋ[ŋ[”ŋ[œŋ[ ŋ[¨ŋ[Ŧŋ[ŧŋ[Āŋ[Įŋ[Ëŋ[Ķŋ[×ŋ[ßŋ[ãŋ[ëŋ[īŋ[÷ŋ[ûŋ[ Ā[Ā[Ā[Ā["Ā[&Ā[.Ā[2Ā[:Ā[>Ā[FĀ[JĀ[ZĀ[^Ā[fĀ[jĀ[rĀ[vĀ[~Ā[‚Ā[ŠĀ[ŽĀ[žĀ[ĸĀ[ŠĀ[­Ā[´Ā[¸Ā[ŋĀ[ÃĀ[ĘĀ[ÎĀ[ŨĀ[áĀ[čĀ[ėĀ[ķĀ[÷Ā[ūĀ[Á[ Á[ Á[Á[ Á['Á[+Á[4Á[8Á[?Á[CÁ[JÁ[NÁ[UÁ[YÁ[hÁ[lÁ[sÁ[wÁ[€Á[„Á[‹Á[Á[–Á[šÁ[ŠÁ[­Á[´Á[¸Á[ĮÁ[ËÁ[ĶÁ[×Á[ßÁ[ãÁ[ķÁ[÷Á[˙Á[Â[Â[Â[&Â[*Â[1Â[5Â[DÂ[HÂ[OÂ[SÂ[\Â[`Â[gÂ[kÂ[|Â[€Â[‰Â[Â[–Â[šÂ[ĄÂ[ĨÂ[ŽÂ[˛Â[ÃÂ[ĮÂ[ÖÂ[ÚÂ[ęÂ[îÂ[ūÂ[Ã[ Ã[ Ã[Ã[!Ã[1Ã[5Ã[=Ã[AÃ[IÃ[MÃ[]Ã[aÃ[qÃ[uÃ[…Ã[‰Ã[’Ã[–Ã[Ã[ĄÃ[˛Ã[ļÃ[ÅÃÉÃŌÃÖÃßÃãÃėÃđÃ÷Ãûà ÄÄÄÄ&Ä*Ä1Ä5Ä>ÄBÄIÄMÄVÄZÄaÄeÄnÄrÄ{ÄĆĊēėĠĤÄĢįĸÄŧÄÃÄĮÄĐÄÔÄÛÄßÄčÄėÄõÄųÄÅÅ ÅÅ Å$Å-Å1Å:Å>ÅOÅSÅ\Å`ÅiÅmÅvÅzÅ‹ÅÅ–ÅšÅĄÅĨÅŽÅ˛ÅŧÅĀÅĮÅËÅŌÅÖÅāÅäÅķÅ÷Å˙ÅÆ ÆÆÆÆ Æ$Æ,Æ0Æ8Æ<ÆDÆHÆOÆSÆbÆfÆoÆsÆzÆ~Æ‡Æ‹Æ’Æ–ÆŸÆŖÆĒÆŽÆˇÆģÆÄÆČÆĪÆĶÆÜÆāÆéÆíÆôÆøÆĮĮ ĮĮĮĮ$Į(Į1Į5Į>ĮBĮIĮMĮVĮZĮiĮmĮtĮxĮĮƒĮŠĮŽĮ•Į™Į Į¤ĮĢĮ¯ĮļĮēĮÁĮÅĮĖĮĐĮßĮãĮęĮîĮúĮūĮ ČČČČ-Č1Č8Č<ČCČGČVČZČaČeČlČpČwČ{ČŠČŽČ•Č]šČžČĨČ]ĒČŽČĩČ]ēČžČÅČ]ŌČÖČßČãČėČđČ÷ČûČÉÉÉÉÉ É1É5É>ÉBÉKÉOÉVÉZÉcÉgÉnÉrÉÉ…ÉŽÉ’É™ÉÉŽÉ˛ÉģÉŋÉÆÉĘÉÛÉßÉîÉōÉûÉ˙ÉĘĘĘ!Ę*Ę.Ę5Ę9ĘJĘNĘ]ĘaĘjĘnĘwĘ{ĘŒĘĘ—Ę›ĘŖĘ§Ę¯ĘŗĘģĘŋĘÎĘŌĘŲĘŨĘäĘčĘņĘõĘ˙ĘË ËËËË+Ë/Ë6Ë];Ë?ËFË]KËOËVË]cËgËnËrËzË~Ë‡Ë‹Ë”Ë˜ËĄËĨËŦ˰˸ËŧËÄËČËĐËÔËŨËáËęËîË˙ËĖ ĖĖĖĖ$Ė(Ė1Ė5Ė<Ė@ĖIĖMĖVĖZĖaĖeĖnĖrĖyĖ}Ė†ĖŠĖ‘Ė•ĖžĖĸĖŠĖ­ĖžĖÂĖËĖĪĖÖĖÚĖëĖīĖöĖúĖÍÍÍÍ*Í.Í7Í;ÍDÍHÍQÍUÍ^ÍbÍsÍẁ̈́͋͏͘͜ÍĨ͊ͲÍļÍŊÍÁÍĘÍÎÍ×ÍÛÍėÍđÍ÷ÍûÍ ÎÎÎ#Î,Î0Î7Î;ÎLÎPÎ_ÎcÎtÎxÎÎ…ÎŒÎÎĄÎĨδθÎÁÎÅÎÎÎŌÎŲÎŨÎæÎęÎķÎ÷ÎūÎĪ ĪĪĪĪ#Ī'Ī0Ī4ĪEĪIĪRĪVĪ_ĪcĪlĪpĪyĪ}ĪŽĪ’ĪĄĪĨĪŽĪ˛ĪģĪŋĪČĪĖĪÕĪŲĪâĪæĪīĪķĪüĪĐ Đ ĐĐĐ#Đ'Đ8Đ<ĐEĐIĐRĐVĐ_ĐcĐlĐpĐĐ…ĐŒĐĐ—Đ›ĐĸĐĻĐĩĐšĐÂĐÆĐĪĐĶĐÜĐāĐéĐíĐöĐúĐŅŅŅŅŅ!Ņ*Ņ.Ņ7Ņ;ŅLŅPŅYŅ]ŅfŅjŅsŅwҀ҄ҕҙҍŅŦŅĩŅšŅÂŅÆŅÍŅŅŅÚŅŪŅįŅëŅōŅöŅ˙ŅŌ ŌŌŌŌ$Ō(Ō9Ō=ŌDŌHŌOŌSŌZŌ^ŌmŌqŌ€Ō„Ō‹ŌŌ˜ŌœŌĢŌ¯ŌļŌēŌÃŌĮŌÎŌŌŌãŌįŌđŌôŌũŌĶĶ ĶĶ!Ķ(Ķ,Ķ;Ķ?ĶHĶLĶUĶYĶ`ĶdĶmĶqĶzĶ~Ķ‡Ķ‹Ķ”Ķ˜ĶŸĶŖĶŦĶ°ĶšĶŊĶÄĶČĶŅĶÕĶæĶęĶúĶūĶÔÔ!Ô%Ô,Ô0Ô?ÔCÔ[Ô_ÔnÔrÔyÔ}Ô„ÔˆÔ‘Ô•ÔŸÔŖÔĒÔŽÔĩÔšÔËÔĪÔØÔÜÔåÔéÔđÔôÔũÔÕ ÕÕÕÕ"Õ&Õ/Õ3Õ:Õ>ÕGÕKÕ\Õ`ÕgÕkÕzÕ~Õ‡Õ‹Õ”Õ˜ÕĄÕĨÕŽÕ˛ÕÃÕĮÕĐÕÔÕŨÕáÕōÕöÕūÕÖÖÖÖ#Ö,Ö0ÖAÖEÖMÖQÖaÖeÖnÖrÖ{Ö֐ְִ֔֜֠ÖģÖŋÖČÖĖÖÕÖŲÖęÖîÖõÖųÖ×××××#×+×/×>×B×K×O×X×\×m×q×x×|׃ׇ׎ג×ĸ×Ļם׺×Ä×Č×××Û×ę×î×õ×ų×ØØØØ Ø$Ø-Ø1Ø8Ø<ØMØQØZØ^ØgØkØrØv؇؋ؒؖØĨØŠØ˛ØļØĮØËØãØįØöØúØŲŲ%Ų)Ų:Ų>ŲGŲKŲRŲVŲgŲkŲzŲ~ŲŲ‘ŲšŲžŲĨŲŠŲēŲžŲÍŲŅŲØŲÜŲãŲįŲņŲõŲüŲÚÚÚÚ!Ú(Ú,Ú6Ú:ÚAÚEÚWÚ[ÚbÚfÚmÚqÚ€Ú„ÚŽÚ’ÚŸÚŖÚ­ÚąÚÆÚĘÚŅÚÕÚäÚčÚ÷ÚûÚÛÛÛÛ"Û&Û7Û;ÛBÛFÛUÛYÛbÛfÛmÛqÛ‚Û†Û•Û™Û Û¤ÛŽÛ˛ÛÁÛÅÛ×ÛÛÛëÛīÛÜÜ ÜÜÜÜ,Ü^0Ü^@Ü^DÜ^TÜ^XÜ^_Ü^cÜ^rÜ^vÜ^}Ü ‚Ü^†Ü^Ü šÜ^žÜ^ĨÜ^ŠÜ^°Ü^´Ü^ģÜ^ŋÜ^ÎÜ^ŌÜ^ÛÜ^ßÜ^čÜ^ėÜ^õÜ^ųÜ^ Ũ^Ũ^Ũ^Ũ^(Ũ^,Ũ^3Ũ-8Ũ^<Ũ^CŨ-HŨ^LŨ^SŨ-XŨ^\Ũ^cŨ-pŨ^tŨ^ƒŨ^‡Ũ^–Ũ^šŨ^ŠŨ^­Ũ^´Ũ^¸Ũ^ŋŨ^ÃŨ^ĖŨ^ĐŨ^ßŨ^ãŨ^ęŨ^îŨ^÷Ũ^ûŨ^Ū^Ū^Ū^Ū^$Ū^(Ū^9Ū^=Ū^DŪ^HŪ^WŪ^[Ū^cŪ^gŪ^nŪ^rŪ^{Ū^Ū^†Ū^ŠŪ^‘Ū^•Ū^¤Ū^¨Ū^ąŪ^ĩŪ^žŪ^ÂŪ^ËŪ^ĪŪ^ØŪ^ÜŪ^íŪ^ņŪ^øŪ-ũŪ^ß^ß- ß^ß^ß-ß^!ß^(ß--ß^1ß^8ß-Eß^Iß^Pß-]ß^aß^rß^vß^…ß^‰ß^’ß^–ß^§ß^Ģß^´ß^¸ß^Áß^Åß^Ėß^Đß^áß^åß^ėß^đß^üß^ā^ā^ā^ā^ ā^'ā^+ā^<ā^@ā^Oā^Sā^[ā^_ā^gā^kā^{ā^ā^‡ā^‹ā^›ā^Ÿā^Ļā^Ēā^šā^Ŋā^Îā^Ōā^Ûā^ßā^æā^ęā^ûā^˙ā^á`á`á`á`&á`*á`1á`5á`Fá`Já`Qá`Uá`dá`há`qá`uá`†á`Šá`‘á`•á`¤á`¨á`¯á-´á`¸á`ŋá-Ėá`Đá`×á`Ûá`ãá`įá`÷á`ûá`â`â`â`â` â`$â`+â`/â`8â`<â`Kâ`Oâ`Vâ`Zâ`câ`gâ`nâ`râ`ƒâ`‡â`â`”â`Ĩâ`Šâ`°â`´â`Ãâ`Įâ`Īâ`Ķâ`Úâ`Ūâ`įâ`ëâ`ōâ`öâ`ũâ`ã`ã`ã`ã`!ã`*ã`.ã`7ã`;ã`Lã`Pã`Wã-\ã``ã`gã-lã`pã`wã-|ã`€ã`‡ã-”ã`˜ã`Ÿã-Ŧã`°ã`Áã`Åã`Ôã`Øã`áã`åã`öã`úã`ä`ä`ä`ä`ä`ä`0ä`4ä`;ä`?ä`Nä`Rä`[ä`_ä`fä`jä`{ä`ä`Žä`’ä`šä`žä`Ļä`Ēä`ēä`žä`Íä`Ņä`āäbääbėäbđäb÷äbûäbåbåbåbåb"åb&åb/åb3åb:åb>åbOåbSåb\åb`åbiåbmåbvåbzåb‹åbåb˜åbœåbĨåbŠåb°åb´åbÅåbÉåbĐåbÔåbãådįådîådōådædæd ædædædæd$æd(æd8æd<ædCædGædXæd\ædhædlæ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/įd3įdGįdKįdRįdVįdhįdlįdsįdwįd‰įdįdŸįdŖįdĒįdŽįdČįdĖįdĶįd×įdéįdíįd˙įdčd čdčd(čd,čd4čd8čdHčdLčdSčdWčd_čdcčdjčdnčdvčdzč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.éd2éd9éd=édFédJédQédUéd\éd`édoédsédzéd~éd…éd‰édéd”édŖéd§édŽéd˛édÁédÅédÍédŅédáédåédõédųédędęd(ęd,ędHędLęd[ęd_ędfędjędqęduęd„ęˆę‘ę•ę ę¤ęˇęģęĮęËęÚęŪęåęéęōęöęë ëëĶëë"ëĶ/ë3ë;ë?ëQëUëbëfëuëyë€ë„ë“ë—ëžë]Ŗë§ëŽë]ģëŋëČëĖëŨëáëčë]íëņëøë]ė ėėė'ė+ė2ė]7ė;ėBė]OėSė\ė`ėqėuė„ėˆėė”ėĻėĒėˇėģėĘėÎėŨėáėéėíė˙ėííí#í'í.í]3í7í>í]CíGíNí][í_íhílíuíyíŠíŽí—í›íĒíŽíˇíģíĖíĐíŲíŨíîíōíūíîîîî]!î%î,î]9î=îFîJî[î_îhîlî{îîˆîŒîîĄîĒîŽîŋîÃîĪîĶîâîæîīîķîīīīīī"ī)ī-ī>īBīQīUīfījīsīwī~ī‚ī“ī—īĻīĒī˛īļīžīÂīĘīÎīŪīâīëīīīøīüīđ đđđ%đ)đ0đ4đ;đ?đFđJđYđ]đeđiđqđuđ}đđ‰đđđĄđ¨đŦđ´đ¸đĀđÄđĖđĐđāđäđėđđđøđüđņņņņ%ņ)ņ0ņ4ņ=ņAņJņNņUņYņaņeņnņrņ{ņņŽņ’ņŖņ§ņļņēņÉņÍņŪņâņëņīņöņúņ ōōō"ō+ō/ō8ō<ōEōIōZō^ōgōkōtōxōō…ō–ōšōĄōĨōŽō˛ōšōŊōÆōĘōÛōßōæōęōųōũōķ ķķķ*ķ.ķ=ķAķHķĶUķYķjķnķ~ķ‚ķ‰ķq–ķšķĢķ¯ķŋķÃķÔķØķäķčķ÷ķûķôĶôô$ô(ô8ô<ôMôQôZô^ôeôiôzô~ôô‘ô˜ôœôĨôŠô˛ôļôŊôÁôĘôÎôßôãôėôđôųôũôõ õõõ&õ*õ6õ:õIõMõTõXõiõmõtõxõ‰õõ”õ˜õ§õĢõŧõĀõÉõÍõÔõØõéõíõüõö ö ööö)ö-ö<ö@öGöKöRöVö]öaöpötö}ööŠöŽö—ö›öŦö°öŋöÃöÔöØöčöėöõöųö÷÷÷÷÷ ÷1÷5÷>÷B÷K÷O÷X÷\÷e÷i÷z÷~÷†÷Š÷š÷ž÷Ĩ÷Š÷¸÷ŧ÷Å÷É÷Ú÷Ū÷å÷é÷ø÷ü÷ øø!ø%ø6ø:øCøGøNøRøcøgøpøtø…ø‰ø’ø–øŸøŖøŦø°øÁøÅøĖøĐøßøãøôøøø ų ųų ų(ų,ų4ų8ųHųLųUųYųjųnų€ų„ų‹ųųžųĸųĒųŽųŊųÁųČų]ÕųŲųęųîų÷ųûų úúúú*ú.ú?úCúOúSú\ú`úoúsúzú]‡ú‹úœú úŠú­úŧúĀúĮú]ÔúØúéúíúųúũúû ûûû$û]1û5ûFûJûVûZûcûgûvûzûƒû‡ûû”ûûĄûĒûŽûŋûÃûĖûĐûŲûŨûæûęûķû÷ûü üüü"ü&ü/ü3ü<ü@üQüUü]üaüiümüuüyü‰üüžüĸü˛üļüŊüpÂüÆüÍüpŌüÖüŨüpâüæüíüpúüūüũ ũũũũ#ũ,ũ0ũ9ũ=ũFũJũ[ũ_ũhũlũsũwũ€ũ„ũũ‘ũšũžũ¯ũŗũŋũÃũĖũĐũßũãũęũ]īũķũúũ]˙ũū ū]ūū$ū(ū/ū3ū<ū@ūIūMūVūZūkūoūxū|ū…ū‰ū’ū–ū§ūĢū´ū¸ūŋūÃūĖūĐūŲūŨūæūęūûū˙ū ˙˙˙˙+˙/˙6˙];˙?˙F˙]K˙O˙V˙]c˙g˙p˙t˙{˙˙ˆ˙Œ˙•˙™˙ĸ˙Ļ˙ˇ˙ģ˙Â˙]Į˙Ë˙Ō˙]×˙Û˙â˙]ī˙ķ˙ü˙ !%.2CGN]SW^]cgn]{ˆŒ“— ¤­ąēžĪĶÜāéíū "+/8<MQZ^gk|€‡‹šž¯ŗŧĀĮËÜāīķ#'04=APT]ajnƒŠŽĄĒŽŋÃĘÎŪâņõü   '+48?CTXaevz…”˜ĄĨļēŌÖŪâōö"&/3:>OSbfuy€„“—žĸŠ­ŊÁČĖÔØßãëī÷û.29=DHW[bfnry}„ˆ—›ĸĻ­ąĀÄÍŅÚŪīķúū '+48IMTXgktGz~‡G•™ ¤ŗˇÆĘŅpÖÚápæęņpöúp$(/3BFRVeippuy€p…‰pĄ¨ŦŗˇÆĘĶ׿ęņ]öú] ]")-48GKTXgkrĶw{‚͇‹’Ķ—›ĸ̞ͧĶŋÃĘÎÕŲčėũ  ]   ] ! ( ]5 9 B F U Y ` ]e i p ]u y € ] ‘ š ž ­ ą ē ž Į Ë Ü ā ņ õ ü ]   ]   ]) - 6 : I M T ]Y ] d ]i m t ] … Ž ’ Ą Ĩ Ŧ Ķą ĩ ŧ ĶÁ Å Ė ĶŲ Ũ æ ę ķ ÷    ! ( p- 1 8 pE I R V e i p pu y € p ‘ š ž ­ ą ¸ ]Ŋ Á Č ]Õ Ų â æ õ ų    " 3 7 G K Z ^ e pj n u pz ~ … p’ –  Ą Ē Ž ˇ ģ  Æ Õ Ų ā på é đ põ ų  p    % ) 2 6 = A P T [ Ķ` d k Ķp t { Ķ€ „ ‹ ͐ ” › ͍ Ŧ ŗ ˇ Ā Ä Í Ņ Ø Ü ë ī  ]] $+]04;]HLS]X\c]hls]x|ƒ]”ĄĒގģÄČŲŨîōų]ū ]]&*1Ķ6:AĶFJQĶ^bkox|…‰šž¯ŗē]ŋÃĘ]×Ûâpįëōp˙ pp'+2p7;BpOSZp_cjpw{„ˆ™­ąÂÆÖÚáåõų #'6:AELP_cjnvzŠŽ•™Š­ļēÃĮÎŌãįīķ%)0]59@]MQX\eipt}”Ą°´ģĶĀÄËĶØÜãįîōû˙!%15>BQU\paelpy}†Š™Ž˛šŊÆĘŅÕæęņõ&*26FJSWhluyŠŽ–šĒŽĩšČĖÕŲęîõų !15FJSW^bswˆŒ•™ ¤ĩšČĖĶ×āäíņøü '+48AEVZimvz…–šŠf­fĩfšfÅfÉfÕfŲfífņfųfũff fff%f)f6f:fGfKfVfZfgfkfvfzff“f›fŸf§fĢfŗfˇfĮfËfÚfŪfífņfúfūff fff-f1fBfFfOfSfZf^fofsf‚f†f•f™fĸfĻf­fąfÂfÆfÕfŲfęfîf÷fûfffff*.59HhLhThXhdhhhthxhŒhh˜hœh¤h¨h°h´hÄhČhÕhŲhæhęhõhųhh hhh.h2h:h>hFhJhRhVhfhjhyh}hŒhh™hh¤h¨hšhŊhĖhĐháhåhîhōhųhũhhh!h%h4h8hAhEhLhPhahehthxh‰hh–hšhĄhĨhļhēhÉÍÔØßãíņ ")-48?CRV]ako~‚“ĨЏŧĖkĐkØkÜkčkėkøkükkkk k(k,k4k8kHkLkYk]kjknkyk}kŠkŽk™kk˛kļkžkÂkĘkÎkÖkÚkękîkũkkkkk!k(k,k=kAkPkTkekikrkvk}kk’k–kĨkŠk¸kŧkÅkÉkĐkÔkåkékøkük kkkk%k)k:k>kMQX\cgqu„ˆ“šž§Ģ˛ļĮËŌÖāäķ÷    & * 9 = D H R V e i z ~ … ‰ ˜ œ ­ ą Á Å Ė Đ × Û ã į ī ķ ú ū !! !$!+!/!6!:!A!E!L!P!W![!b!f!u!y!ˆ!Œ!—!›!§!Ģ!ˇ!ģ!Į!Ë!×!Û!ī!ķ!û!˙!" """!"%"-"1"B"F"M"Q"Z"^"g"k"r"v"}"‹"…"–"š"Ą"Ĩ"Ž"˛"ģ"ŋ"Æ"Ę"Û"ß"é"í"÷"û"# ###,#0#8#<#D#H#O#S#[#_#g#k#s#w#‡#‹#’#–##Ą#¨#Ŧ#ŗ#ˇ#Í#Ņ#ā#ä#ë#ī#ö#ú#$$$$)$-$7$;$E$I$_$c$l$p$z$~$Œ$$ĸ$Ļ$¯$ŗ$Ã$Į$Ņ$Õ$į$ë$ô$ø$%%%%%!%4%8%?%C%R%V%^%b%q%u%|%€%%“%%Ą%ŗ%ˇ%ž%Â%Ë%Ī%Ö%Ú%ë%ī%ū%& & &&&+&/&D&H&Y&]&o&s&…&‰&›&Ÿ&ą&ĩ&ŧ&Ā&Ī&Ķ&Ú&Ū&į&ë&ō&ö&' '''%')'8'<'N'R'Y']'l'p'w'{'Œ''™''Ŧ'n°'n¸'nŧ'nČ'nĖ'nØ'nÜ'nđ'nô'nü'n(n(n (n(n(n((n,(n9(n=(nJ(nN(nY(n](nj(nn(ny(n}(n’(n–(nž(nĸ(nĒ(nŽ(nļ(nē(nĘ(nÎ(nŨ(ná(nđ(nô(nũ(n)n)n )n)n!)n0)n4)nE)nI)nR)nV)n])na)nr)nv)n…)n‰)n˜)nœ)nĨ)nŠ)n°)n´)nÅ)nÉ)nØ)nÜ)ní)nņ)nú)nū)n*n *n*n*n-*1*E*I*P*\*`*o*s*z*͇*‹*’*]Ÿ*Ŗ*Ē*Ž*Ŋ*Á*Č*ĶÕ*Ų*ā*ä*ķ*÷*ū*] ++++)+-+6+:+C+G+X+\+c+g+n+r++…+Œ++˜+œ+¤+¨+¯+ŗ+ģ+ŋ+Į+Ë+Û+ß+æ+]ë+ī+ö+],,,],,&,*,2,6,H,L,V,Z,i,m,|,€,,“,š,ž,­,ą,ē,ž,Ī,Ķ,Ü,ā,é,í,ö,ú,----#-'-6-:-A-ĶF-J-Q-ĶV-Z-a-Ķn-r-y-}-„-ˆ-—-›-ĸ-Ļ-­-ą-¸-ŧ-Ë-Ī-Ö-]Û-ß-æ-]ķ-÷-ū-] ...Ķ#.p'.p/.p3.p:.p>.pE.pI.pP.pT.p[.p_.pf.pj.pq.pu.p|.p€.p‡.p‹.p’.p–.pĨ.pŠ.pš.pŊ.pÆ.pĘ.pÖ.pÚ.pë.pī.pö.pú.p/p/p/p/p$/p(/p4/p8/pI/pM/pT/pX/p`/pd/pu/py/p‚/p†/p/p“/pœ/p /pą/pĩ/pž/pÂ/pÎ/pŌ/pã/pį/pđ/pô/pû/p˙/p0p 0p0p0p-0p10p90p=0pE0pI0pQ0pU0pe0pi0pr0pv0p‚0p†0p0p“0pœ0p 0pą0pĩ0pž0pÂ0pÉ0pÍ0pÖ0pÚ0pæ0pę0pķ0p÷0p1p1p1p1p(1p,1p51p91pJ1pN1pW1p[1pl1pp1p1pƒ1pŠ1pŽ1pŸ1pŖ1pŦ1p°1pÁ1pÅ1pÎ1pŌ1pŲ1pŨ1pæ1pę1pû1p˙1p2p 2p2p!2p*2p.2p?2pC2pL2pP2pa2pe2pl2pp2p2pƒ2p”2p˜2pŠ2p­2pļ2pē2pÁ2pÅ2pÖ2pÚ2pé2pí2pų2pũ2p3p 3p3p3p/3p33p;3p?3pG3pK3pS3pW3p_3pc3ps3pw3p3pƒ3p‹3p3p–3pš3pĸ3pĻ3pŽ3p˛3pē3pž3pÆ3pĘ3pŌ3pÖ3pŪ3pâ3pę3pî3pö3pú3p4p4p4p4p4p4p.4p24p94Ķ>4pB4pI4ĶN4pR4pY4Ķf4pj4pr4pv4p~4p‚4p’4p–4pž4pĸ4pĒ4pŽ4pž4pÂ4pĘ4pÎ4pÕ4pŲ4pā4pä4pķ4p÷4pū4Ķ5p5p5Ķ5p5p5Ķ+5p/5p65Ķ;5p?5pF5ĶK5pO5pV5Ķ[5p_5pf5Ķk5po5pv5Ķƒ5p‡5p5p“5p›5pŸ5p¯5pŗ5pÃ5pĮ5p×5pÛ5pë5pī5p˙5p6p 6p6p6p6p#6p'6p06p46pE6pI6pW6p[6pb6pf6pn6pr6pz6p~6p†6pŠ6p’6p–6pĻ6pĒ6pą6pĩ6pŊ6pÁ6pĘ6pÎ6p×6pÛ6pė6pđ6p÷6pû6p7p7p7p7p#7p'7p.7p27p:7p>7pF7pJ7pR7pV7p^7pb7pj7pn7pv7pz7p‚7p†7p–7pš7pŠ7p­7pĩ7pš7pÁ7pÅ7pÍ7pŅ7pŲ7pŨ7på7pé7pņ7põ7pũ7p8p8p8p8p 8p(8p,8p38p78p?8pC8pK8pO8pW8p[8pk8po8p~8p‚8pŠ8pŽ8p–8pš8pĸ8pĻ8pŽ8p˛8pÂ8pÆ8pÎ8pŌ8pÚ8pŪ8pæ8pę8pō8pö8p9p 9p9p9p9p"9p29p69p=9pA9pI9pM9pU9pY9pa9pe9pm9pq9p9p…9pŒ9p9p˜9pœ9p¤9p¨9p°9p´9pŧ9pĀ9pĐ9pÔ9pÜ9pā9pč9pė9pô9pø9p:p:p:p:p:p#:p*:p.:p5:p9:p@:pD:pS:pW:p^:pb:pk:po:pv:pz:p:p…:p”:p˜:pŸ:pŖ:pĒ:pŽ:pĩ:pš:pČ:pĖ:pĶ:p×:pæ:pę:pō:pö:pū:p;p;p;p;p";p2;p6;pE;pI;pP;pT;pc;pg;pn;pr;p{;p;p†;pŠ;p›;pŸ;p¨;pŦ;pĩ;pš;pÂ;pÆ;p×;pÛ;pä;pč;pņ;põ;pü;p<p <p <p<p"<p1<p5<pE<pI<pY<p]<pd<ph<px<p|<pŒ<p<p˜<pœ<p¤<p¨<p¸<pŧ<pĖ<pĐ<pā<pä<pø<pü<p=p =p=p=p%=p)=p8=<=E=I=R=V=_=c=t=x==ƒ=Š=Ž=•=™=¨=Ŧ=ŗ=ˇ=ŋ=Ã=Ë=Ī=Ö=Ú=â=æ=î=ō=>> >]>>>]*>.>5>]B>F>M>Q>Y>]>o>s>}>>>”>›>Ÿ>¨>Ŧ>ģ>ŋ>Æ>Ę>Ņ>Õ>Ũ>á>é>í>õ>ų>?????#?3?7?>?B?S?W?^?b?j?n??ƒ?Š?Ž?Ÿ?Ŗ?Ē?Ž?ļ?ē?Ë?Ī?Ö?ĶÛ?ß?æ?Ķë?ī?ö?Ķ@@@@!@%@,@0@7@;@B@F@U@Y@`@]e@i@p@]}@@ˆ@]•@™@ @Ķ­@ą@š@Ŋ@Å@É@Ņ@Õ@Ũ@á@é@í@ũ@A AAAA$A(A1A5AFAJASAWA^AbAkAoAxA|A…A‰A’A–A§AĢAģAŋAÆAĘAĶA×AāAäAëAīAøAüAB BBB%B)B2B6B=BABJBNBWB[BdBhBqBuB†BŠB‘B•BžBĸBĢB¯BļBēBÃBĮBØBÜBåBéBōBöB˙BCCCC#C2C6C?CCCLCPCYC]CnCrC{CCˆCŒC•C™CĒCŽCˇCģCÄCČCŅCÕCæCęCņCõCDDDD.D2D;D?DFDJD[D_DnDrD{DD†DŠD›DŸDŽDr˛DrēDržDrÅDrÉDrĐDrÔDrãDrįDrīDrķDrúDrūDr ErErErEr%Er)Er0Er4ErCErGErNErREr[Er_ErnErrEryEr}Er„ErˆEr—Er›ErĸErĻErĩEršErĘErÎEr×ErÛErâEræEr÷ErûEr FrFrFr#Fr,Fr0Fr7Fr;FrLFrPFr_FrcFrjFrnFr}FrFr‘Fr•FrFrĄFrŠFr­FrŊFrÁFrÉFrÍFrŨFtáFtéFtíFtõFtųFt Gt GtGtGt#Gt'Gt8GtVtBVtKVtOVtXVt\VtmVtqVtzVt~VtVt“VtšVtžVt­VtąVtēVtžVtĮVtËVtÔVtØVtéVtíVtöVtúVtWtWtWtWt#Wt'Wt6Wt:WtCWtGWtPWtTWt]WtaWtjWtnWtWtƒWtŒWtWt™WtWt¤Wt¨WtąWtĩWtÆWtĘWtŲWtŨWtėWtđWt˙WtXtXtXt'Xt+Xt3Xt7Xt>XtBXtJXtNXtWXt[XtjXtnXtuXtyXtXt…Xt–XtšXtŠX­X´X¸XÃXĮXÖXÚXáXåXôXøX˙XY YYYY"Y&Y5Y9YBYFYOYSYZY^YgYkY|Y€Y‰YY–YšYĢY¯YļYēYÉYÍYÔYØYįYëYōYöYZ ZZZ#Z'Z8Z]F]J]Y]]]d]h]w]{]‚]†]Ž]’]™]]Ĩ]Š]š]Ŋ]Ä]Č]×]Û]â]æ]î]ō]ų]ũ]^ ^^^$^(^7^;^L^P^Y^]^d^h^y^}^Œ^^™^^¤^¨^š^Ŋ^Ė^Đ^×^Û^ã^į^ī^ķ^ú^ū^_ ___%_)_8_<_C_G_V_Z_a_e_m_q_x_|_„_ˆ_˜_œ_Ŗ_§_ļ_ē_Á_Å_Í_Ņ_Ø_Ü_ä_č_ø_ü_````+`/`8`<`C`G`X`\`k`o`x`|`ƒ`‡`˜`œ`Ģ`v¯`vˇ`vģ`vÂ`vÆ`vÕ`vŲ`vá`vå`vė`vđ`v˙`vav avavavav*av.av5av9avBavFavUavYav`avdavsavwav~av‚av‘av•av¤av¨avąavĩavŧavĀavŅavÕaväavčav÷avûav bvbvbvbv#bv'bv7bv;bvCbvGbvWbx[bxcbxgbxobxsbxƒbx‡bxbx”bx›bxŸbx¨bxŦbxĩbxšbxĘbxÎbxÕbxŲbxābxäbxķbx÷bxcxcx cxcxcxcx%cx)cx:cx>cxEcxIcxPcxTcxccxgcxvcxzcxƒcx‡cxŽcx’cxŖcx§cxļcxēcxÁcxÅcxÍcxŅcxŲcxŨcxæcxęcxķcx÷cxdx dxdxdx dx$dx-dx1dxBdxFdxWdx[dxddxhdxodxsdx„dxˆdx—dx›dx¤dx¨dx¯dxŗdxÂdxÆdxĪdxĶdxÚdxŪdxįdxëdxúdxūdxexexexex&ex*ex2ex6exFexJexSexWex^exbexkexoexvexzexƒex‡ex˜exœexŖex§exšexŊexÆexĘexÛexßexæexęexųexũex fxfxfx#fx4fx8fxIfxMfxVfxZfxafxefxnfxrfxƒfx‡fxfx“fxŖfx§fxŽfx˛fxēfxžfxÆfxĘfxĶfx×fxčfxėfxøfxüfxgx gxgxgx%gx)gx:gx>gxGgxKgx\gx`gxigxmgx~gx‚gx‰gxgxœgx gxŠgx­gxžgxÂgxËgxĪgxāgxägxëgxīgxūgxhx hxhxhx hx3hx7hx?hxChxKhxOhxWhx[hxkhxohxwhx{hxƒhx‡hxŽhx’hx™hxhx¤hx¨hx¯hxŗhxēhxžhxÆhxĘhxŌhxÖhxŪhxâhxęhxîhxūhxix iĶixixiĶix"ix)iĶ6ix:ixBixFixNixRixbixfixnixrixzix~ixŽix’ixšixžixĨixŠix°ix´ixÃixĮixÎiĶĶix×ixŪiĶãixįixîiĶûix˙ixjĶ jxjxjĶjxjx&jĶ+jx/jx6jĶ;jx?jxFjĶSjxWjx_jxcjxkjxojxjxƒjx“jx—jx§jxĢjxģjxŋjxĪjxĶjxÚjxŪjxįjxëjxôjxøjx˙jxkx kxkxkx#kx0kx4kx;kx?kxFkxJkxRkxVkx^kxbkxjkxnkxukxykx€kx„kxŒkxkx kx¤kxĢkx¯kx¸kxŧkxÅkxÉkxĐkxÔkxŨkxákxđkxôkxûkx˙kxlx lxlxlx$lx(lx8lxrxBrxRrxVrxfrjrsrwr€r„rŽr’rŖr§rŽr˛ršrŊrÄrČrĪrĶrÚrŪrírņrørürssss"s&s-s1s8svEvIvRvVv_vcvlvpvyv}v„vˆv‘v•vœv vąvĩvŧvĀvÉvÍvÖvÚvãvįvđvôvûv˙vwwww(w,w3w7w@wDwMwQwZw^wgwkw|w€w‰ww”w˜wĄwĨwŽw˛wģwŋwČwĖwŨwáwčwėwõwųwxxxxxx'x+x2x6x?xCxLxPxWx[xdxhxoxsx„xˆx‘x•xžxĸxĢx¯x¸xŧxÍxŅxÚxŪxįxëxôxøxyyyyyy(y,y5y9yByFyOySy\y`yiymyvyzyƒy‡yy”yyĄyĒyŽyŋyÃyĘyÎy×yÛyäyčyīyķyúyūy zzzz+z/z@zDzMzQzXz\zmzqz€z„zz‘zšzžz§zĢz´z¸zÁzÅzÖzÚzãzįzđzôzũz{ {{{{,{0{9{={F{J{S{W{`{d{m{q{‚{†{{“{œ{ {Š{­{ļ{ē{Ã{Į{Đ{Ô{Ũ{á{ō{ö{˙{| ||||&|*|3|7|@|D|M|Q|Z|^|g|k|t|x||…|–|š|Ŗ|§|°|´|Ŋ|Á|Ę|Î|×|Û|ė|đ|÷|û| }}}#},}0}7};}L}P}_}c}l}p}y}}}†}Š}“}—} }¤}ĩ}š}Â}Æ}Ī}Ķ}Ü}ā}é}í}ö}ú}~~~~~!~*~.~?~C~L~P~Y~]~f~j~s~w~€~„~•~™~ ~¤~ŗ~ˇ~Ā~Ä~Í~Ņ~Ú~Ū~į~ë~ô~ø~  #'04=AJNW[dhy}†Š“— ¤­ąēžĪĶÚŪíņ€€€€€€/€3€B€F€W€[€d€h€o€s€„€ˆ€—€›€¤€¨€ą€ĩ€ž€€ˀĪ€؀܀í€ņ€ú€ū€ !%.2CGNRaenr{ˆŒ•™ĸρˇģāȁҁՁہâëīøü ‚‚‚‚+‚/‚8‚<‚E‚I‚R‚V‚_‚c‚t‚x‚‚…‚Ž‚’‚›‚Ÿ‚¨‚Ŧ‚Ŋ‚Á‚ȂĖ‚ՂŲ‚â‚æ‚÷‚û‚ƒƒƒƒ&ƒ*ƒ;ƒ?ƒFƒJƒYƒ]ƒdƒĶqƒuƒ}ƒƒ‰ƒƒ•ƒ™ƒЃ­ƒļƒēƒÃĮƒ؃܃åƒéƒúƒūƒ„ „„„&„*„9„=„E„I„Q„U„e„i„x„|„Œ„„Ą„Ĩ„´„¸„Ʉ̈́քڄá„å„ö„ú„ … ……"…+…/…6…:…K…O…^…b…i…Ķv…z…………Œ……Ÿ…Ŗ…Ŧ…°…ˇ…ģ…ąȅŅ…ՅŪ…â…ë…ī…†† ††††$†(†8†<†C†]P†T†]†a†p†t†}††Іކ—†›†Ŧ†°†š†Ŋ†Ɔʆ͆׆č†ė†ķ†÷†‡ ‡‡]‡"‡+‡/‡>‡B‡I‡]V‡Z‡c‡g‡v‡z‡ƒ‡‡‡އ’‡Ŗ‡§‡ļ‡ē‡‡Ƈ·Ō‡ڇŪ‡æ‡ę‡ú‡ū‡ˆ ˆˆˆˆ"ˆ*ˆ.ˆ>ˆBˆKˆOˆVˆZˆcˆgˆpˆtˆ{ˆˆˆˆŒˆ•ˆ™ˆ ˆ¤ˆ­ˆąˆˆĈՈ؈âˆæˆíˆņˆ‰‰‰‰ ‰$‰-‰1‰:‰>‰E‰I‰R‰V‰g‰k‰t‰x‰‰…‰މ’‰Ŗ‰§‰°‰´‰Ŋ‰Á‰ʉΉ߉ã‰ę‰î‰ú‰ū‰ ŠŠŠŠ-Š1Š:Š>ŠOŠSŠZŠ^ŠmŠqŠzŠ~Š‡Š‹ŠœŠ ŠЊ­ŠļŠēŠÊĮŠ؊܊ãŠįŠđŠôŠũŠ‹‹ ‹‹‹(‹,‹4‹8‹@‹D‹L‹P‹`‹d‹k‹o‹x‹|‹…‹‰‹˜‹œ‹Ĩ‹Š‹˛‹ļ‹Į‹ˋŌ‹֋â‹æ‹õ‹ų‹ŒŒŒŒ"Œ&Œ7Œ;ŒBŒFŒUŒYŒbŒfŒwŒ{Œ‹ŒŒ Œ¤Œ´Œ¸ŒɌ͌֌ڌáŒåŒöŒúŒ  "+/6:KO^ybyi myqyxö„yˆy ”y˜yŸöŦy°yˇöĶ ( 0 8@HPX`hpx€ ˆ"$˜& (¨*°,¸.Ā0Č2Đ4Ø6ā8č;đ=ø?ACEG I(K0M8O@QHSPUXW`Yh[p_xa€gˆik˜m o¨u°w¸~€ȉĐ9؍ā’č”đ–ø˜šĄ¤Ļ Ē(Ŧ0¯8ą@ŗHĩPˇXš`ģhŊpŋxÁ€ÈŐĮ˜É ˨ͰΏŅĀÔČÖĐØØÚāÜčŪđāøâäæėî đ(ō0ô8ö@øHúPüXū`hpx€ ˆ ˜ ¨°¸ĀČ Đ"Ø$ā&č(đ*ø,.025 :(M0O8Q@SH[P^X``bhdpfxh€kˆnp˜r t¨v°x¸y  $048<@DPTX\`dptx|€„”˜œ ¤°´¸ŧĀÄĐÔØÜāäđôøü(,048<HLPT`dhlptx|ˆŒ” ¤¨Ŧ¸gŧgĀgÄgĐgÔgØgÜgčiėiđiôiiii iii i$i(i,i8i<i@iDiPkTkXk\khklkpktk€k„kˆkŒk˜mœm m¤m°m´m¸mŧmČmĖmĐmÔmāoäočoėoøoüooo $(,8<@DHLPTX\hlptx|€„ˆŒ˜œ ¤¨Ŧ°´ĀÄČĖĐÔāäčėøü  $(,04@DHLX\`dhlx|€„”˜œ¨Ŧ°´ĀÄČĖĐÔāäčėøü $048<@DPTX\`dptx|€„”˜œ¨uŦu°u´uĀuÄuČuĖuØÜāäđôøü  $(,04@DHLX\`dptx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔāäčėđôøü $048<HLPT`dhlx|€„w”w˜wœw¨wŦw°w´w¸wŧwČwĖwĐwÔwāwäwčwėwøwüwwwwwww(w,w0w4w@DHLPT`dhlx|€„”˜œ¨Ŧ°´ĀÄČĖĐÔāäčėøü      ( , 0 4 8 < H L P T ` d h l p t € „ ˆ Œ  ”   ¤ ¨ Ŧ ¸ ŧ Ā Ä Đ Ô Ø Ü č ė đ ô ø ü      $ ( , 0 4 @ D H L X \ ` d h l x | € „ ˆ Œ ˜ œ   ¤ ° ´ ¸ ŧ Ā Ä Đ Ô Ø Ü ā ä đ ô ø ü       ( , 0 4 @ D H L X \ ` d p t x | ˆ Œ  ”   ¤ ¨ Ŧ ¸ ŧ Ā Ä Č Ė Ø Ü ā ä č ė ø ü       ( , 0 4 @ D H L X \ ` d h l x | € „  ” ˜ œ ¨ Ŧ ° ´ Ā Ä Č Ė Ø Ü ā ä đ ô ø ü      $ ( , 8 < @ D P T X \ h l p t € „ ˆ Œ ˜ œ   ¤ ° ´ ¸ ŧ Č Ė Đ Ô ā ä č ė ø ü (,048<HLPT`dhlptx|ˆŒ”˜œ¨Ŧ°´¸ŧČĖĐÔØÜāäđôøü (,048<HLPTX\hlpt€„ˆŒ˜œ ¤¨Ŧ°´¸ŧČĖĐÔāäčėđô  $(,8<@DPTX\`dptx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔØÜčėđô  $048<HLPT`dhlx|€„ˆŒ˜œ ¤°~´~¸~ŧ~Č~Ė~Đ~Ô~ā~ä~č~ė~ø~ü~~~~~~~(~,~0~4~@~D~H~L~X~\~`~d~p€t€x€|€ˆ€Œ€€”€ €¤€¨€Ŧ€¸€ŧ€Ā€Ä€Đ€Ô€Ø€Ü€čėđô  $048<@DPTX\`dptx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔØÜčėđôøü  $(,8<@DPTX\`dhlx|€„ˆŒ˜œ ¤°´¸ŧĀÄČĖØÜāäđôøü(,04@DHLX\`dptx|€„”˜œ¨Ŧ°´ĀÄČĖØÜāäđôøü(,04@DHLX\`dhlptx|€„ˆŒ˜œ ¤¨Ŧ¸ŧĀÄČĖØÜāäđôøü (,048<HLPTX\hlpt€„ˆŒ˜œ ¤¨Ŧ°´ĀÄČĖØÜāäđôøü (,048<HLPT`dhlx|€„ˆŒ˜œ ¤¨Ŧ¸ŧĀÄĐÔØÜčėđôøü(,04@DHLX\`dhlx|€„”˜œ¨Ŧ°´¸ŧČĖĐÔØÜčėđô  $(,8<@DPTX\hlptx|ˆŒ”˜œ¨Ŧ°´¸ŧČĖĐÔāäčėøü  $(,04@DHLX\`dhlx|€„”˜œ¨Ŧ°´ĀÄČĖĐÔāäčėđô  $048<@DPTX\`dptx|ˆŒ” ¤¨Ŧ°´ĀÄČĖĐÔāäčėøü(,04@DHLPT`dhlx|€„”˜œ¨Ŧ°´ĀÄČĖĐÔāäčėøü(,04@DHLX\`dptx|ˆŒ” ¤¨Ŧ¸ŧĀÄČĖĐÔāäčėđô  $048<HLPT`‰d‰h‰l‰p‰t‰€‰„‰ˆ‰Œ‰˜‰œ‰ ‰¤‰°´¸ŧĀÄČĖĐÔāäčėđôøü       $ ( , 0 4 8 < H L P T X \ ` d p t x | ˆ Œ  ” ˜ œ ¨ Ŧ ° ´ ¸ ŧ Č Ė Đ Ô ā ä č ė ø ü !!!!!! !$!0!4!8!>> >>> >$>(>,>0>4>@>D>H>L>P>T>X>\>h>l>p>t>€>„>ˆ>Œ>>”>˜>œ>¨>Ŧ>°>´>¸>ŧ>Č>Ė>Đ>Ô>Ø>Ü>č>ė>đ>ô>ø>ü>? ?????(?,?0?4?8?>>>>>(>,>0>4>@>D>H>L>X>\>`>d>p>t>x>|>ˆ>Œ>>”>˜>œ>¨>Ŧ>°>´>Ā>Ä>Č>Ė>Ø>Ü>ā>ä>đ>ô>ø>ü>? ?????(?,?0?4?@?D?H?L?X?\?`?d?p?t?x?|?ˆ?Œ??”?˜?œ? ?¤?°?´?¸?ŧ?Ā?Ä?Č?Ė?Ø?Ü?ā?ä?đ?ô?ø?ü?@@@@@@ @$@(@,@8@<@@@D@H@L@P@T@X@\@h@l@p@t@x@|@€@„@ˆ@Œ@˜@œ@ @¤@°@´@¸@ŧ@Ā@Ä@Đ@Ô@Ø@Ü@č@ė@đ@ô@ø@ü@A AAA A$A(A,A8AîîÜî,ī|ī(đÔđPņ üņ"Fō$}ō&3ķ(dô*¯ô,÷õ.Ųö0ō÷2Õø5Kų:WúMnûOšûQ üS2ü[ėũ^˛ū`z˙bŸ˙dyfhÅkjnprmtĒvõxė y 4H \ p„˜ŦĀÔčü$ 8"L$`&t(ˆ*œ,°.Ä0Ø2ė468(<Plˆ¤ĀÔ;č=ü?A$8LC`EtGˆIœK°MÄOØQėSUW(Y<[[ py\´Ø_a<tŦäTŒÄü4l¤đ<p¸ D gd iœ kØ m oX a \œ  l uu \Ŧ ĩ \ā   \@ „ Č Ü đ   , H ` x  ¨ Ā Ø đ Dpy\¨ŧĐü(Lpy\´āwé\$Lt°đ4l¤Ü8\p„\¸Á\ė$Hl¤¸Ėœ4TˆtØá\\HÄč$8L`tˆœ°ÄÜô $<Tl€”Đ$8\p~œ€ČÜđh|4H€”¨ølu\°Ü @Th|¤Üđ(HhŒ°ÄØė ˜ Ą \ā é \ !)!\d!m!\¤!­!\Ø!á!\""\T"h"”"Ā"ė"<#h#Đ#Ų#\$4$`$°$Ä$,%&8&L&‰x&&\°&š&\č&9ņ&\('1'\l'u'\°'š'\ô'ũ'\8(ˆ(ŧ(Å(\) )\L)U)\„))\ŧ)Å)\ô)ũ)\0*9*\l*u*\¤*­*\Ü*’+”H+Q+\€+‰+\´+Ŋ+\ė+–õ+\$,˜-,\X,ša,\,™,\Č,Ņ,\- -\8-X-¤-­-\Ü-å-\..\L.U.\„.Č.D/|/Ü/đ/Ąų/\0090\h0q0\ 01H1¨1ŧ1¤Å1\ü12\42=2\l2Ļu2\˜2Ą2\Ü2å2\33\H3ĒQ3\t3}3\¨3ą3\Ü3å3\4Ŧ4\H4Q4\Œ4•4\Ô4Ũ4\5%5\X5a5\œ5Ĩ5\ä5í5\6<6\6e6\¤6¯­6\Ø6ąá6\7ŗ!7\X7ĩa7\7ˇ™7\Č7Ņ7\8 8\t8š}8\´8ģŊ8\č8Ŋņ8\(9ŋ19\\9Áe9\¤9í9\ä9Åí9\$:Į-:\\:Ée:\¤:Ë­:\ä:í:\;Í%;\\;Īe;\”;;\Ø;á;\<%<\d<m<\Ŧ<ĩ<\ô<ũ<\,=5=\t=Ņ}=\ŧ=Å=\> >\D>M>\|>…>\°>š>\ô>ũ>\8?ÔA?\€?։?\Č?ØŅ?\@Ú@\H@ÜQ@\€@Ū‰@\´@āŊ@\ė@âõ@\ Aä)A\XAaA\ AæŠA\ÔAŨA\BHBtB}B\ŧBčBCC\hC”CĀCÉC\D4D`DėiD\˜DîĄD\ĐDŲD\Eđ!E\PEYE\ˆE‘E\ĐEŲE\Fō!F\`F”FôF\ÜFGöG\TGø]G\ŒGú•G\ÄGčGDHü€Hū‰H\¸HĖHÕH\II!I\\IpI°IšI\đIųI\4JXJaJ\ JÄJÍJ\K(K1K\`KiK\˜KL ˜LÜL \MeM\”MĀMėM # endif // GTEST_OS_MAC # include # include # include # if GTEST_OS_LINUX # include # endif // GTEST_OS_LINUX # include # if GTEST_OS_WINDOWS # include # else # include # include # endif // GTEST_OS_WINDOWS # if GTEST_OS_QNX # include # endif // GTEST_OS_QNX #endif // GTEST_HAS_DEATH_TEST #include "gtest/gtest-message.h" #include "gtest/internal/gtest-string.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ namespace testing { // Constants. // The default death test style. static const char kDefaultDeathTestStyle[] = "fast"; GTEST_DEFINE_string_( death_test_style, internal::StringFromGTestEnv("death_test_style", kDefaultDeathTestStyle), "Indicates how to run a death test in a forked child process: " "\"threadsafe\" (child process re-executes the test binary " "from the beginning, running only the specific death test) or " "\"fast\" (child process runs the death test immediately " "after forking)."); GTEST_DEFINE_bool_( death_test_use_fork, internal::BoolFromGTestEnv("death_test_use_fork", false), "Instructs to use fork()/_exit() instead of clone() in death tests. " "Ignored and always uses fork() on POSIX systems where clone() is not " "implemented. Useful when running under valgrind or similar tools if " "those do not support clone(). Valgrind 3.3.1 will just fail if " "it sees an unsupported combination of clone() flags. " "It is not recommended to use this flag w/o valgrind though it will " "work in 99% of the cases. Once valgrind is fixed, this flag will " "most likely be removed."); namespace internal { GTEST_DEFINE_string_( internal_run_death_test, "", "Indicates the file, line number, temporal index of " "the single death test to run, and a file descriptor to " "which a success code may be sent, all separated by " "the '|' characters. This flag is specified if and only if the current " "process is a sub-process launched for running a thread-safe " "death test. FOR INTERNAL USE ONLY."); } // namespace internal #if GTEST_HAS_DEATH_TEST namespace internal { // Valid only for fast death tests. Indicates the code is running in the // child process of a fast style death test. static bool g_in_fast_death_test_child = false; // Returns a Boolean value indicating whether the caller is currently // executing in the context of the death test child process. Tools such as // Valgrind heap checkers may need this to modify their behavior in death // tests. IMPORTANT: This is an internal utility. Using it may break the // implementation of death tests. User code MUST NOT use it. bool InDeathTestChild() { # if GTEST_OS_WINDOWS // On Windows, death tests are thread-safe regardless of the value of the // death_test_style flag. return !GTEST_FLAG(internal_run_death_test).empty(); # else if (GTEST_FLAG(death_test_style) == "threadsafe") return !GTEST_FLAG(internal_run_death_test).empty(); else return g_in_fast_death_test_child; #endif } } // namespace internal // ExitedWithCode constructor. ExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) { } // ExitedWithCode function-call operator. bool ExitedWithCode::operator()(int exit_status) const { # if GTEST_OS_WINDOWS return exit_status == exit_code_; # else return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_; # endif // GTEST_OS_WINDOWS } # if !GTEST_OS_WINDOWS // KilledBySignal constructor. KilledBySignal::KilledBySignal(int signum) : signum_(signum) { } // KilledBySignal function-call operator. bool KilledBySignal::operator()(int exit_status) const { return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_; } # endif // !GTEST_OS_WINDOWS namespace internal { // Utilities needed for death tests. // Generates a textual description of a given exit code, in the format // specified by wait(2). static std::string ExitSummary(int exit_code) { Message m; # if GTEST_OS_WINDOWS m << "Exited with exit status " << exit_code; # else if (WIFEXITED(exit_code)) { m << "Exited with exit status " << WEXITSTATUS(exit_code); } else if (WIFSIGNALED(exit_code)) { m << "Terminated by signal " << WTERMSIG(exit_code); } # ifdef WCOREDUMP if (WCOREDUMP(exit_code)) { m << " (core dumped)"; } # endif # endif // GTEST_OS_WINDOWS return m.GetString(); } // Returns true if exit_status describes a process that was terminated // by a signal, or exited normally with a nonzero exit code. bool ExitedUnsuccessfully(int exit_status) { return !ExitedWithCode(0)(exit_status); } # if !GTEST_OS_WINDOWS // Generates a textual failure message when a death test finds more than // one thread running, or cannot determine the number of threads, prior // to executing the given statement. It is the responsibility of the // caller not to pass a thread_count of 1. static std::string DeathTestThreadWarning(size_t thread_count) { Message msg; msg << "Death tests use fork(), which is unsafe particularly" << " in a threaded context. For this test, " << GTEST_NAME_ << " "; if (thread_count == 0) msg << "couldn't detect the number of threads."; else msg << "detected " << thread_count << " threads."; return msg.GetString(); } # endif // !GTEST_OS_WINDOWS // Flag characters for reporting a death test that did not die. static const char kDeathTestLived = 'L'; static const char kDeathTestReturned = 'R'; static const char kDeathTestThrew = 'T'; static const char kDeathTestInternalError = 'I'; // An enumeration describing all of the possible ways that a death test can // conclude. DIED means that the process died while executing the test // code; LIVED means that process lived beyond the end of the test code; // RETURNED means that the test statement attempted to execute a return // statement, which is not allowed; THREW means that the test statement // returned control by throwing an exception. IN_PROGRESS means the test // has not yet concluded. // TODO(vladl@google.com): Unify names and possibly values for // AbortReason, DeathTestOutcome, and flag characters above. enum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED, THREW }; // Routine for aborting the program which is safe to call from an // exec-style death test child process, in which case the error // message is propagated back to the parent process. Otherwise, the // message is simply printed to stderr. In either case, the program // then exits with status 1. void DeathTestAbort(const std::string& message) { // On a POSIX system, this function may be called from a threadsafe-style // death test child process, which operates on a very small stack. Use // the heap for any additional non-minuscule memory requirements. const InternalRunDeathTestFlag* const flag = GetUnitTestImpl()->internal_run_death_test_flag(); if (flag != NULL) { FILE* parent = posix::FDOpen(flag->write_fd(), "w"); fputc(kDeathTestInternalError, parent); fprintf(parent, "%s", message.c_str()); fflush(parent); _exit(1); } else { fprintf(stderr, "%s", message.c_str()); fflush(stderr); posix::Abort(); } } // A replacement for CHECK that calls DeathTestAbort if the assertion // fails. # define GTEST_DEATH_TEST_CHECK_(expression) \ do { \ if (!::testing::internal::IsTrue(expression)) { \ DeathTestAbort( \ ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ + ::testing::internal::StreamableToString(__LINE__) + ": " \ + #expression); \ } \ } while (::testing::internal::AlwaysFalse()) // This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for // evaluating any system call that fulfills two conditions: it must return // -1 on failure, and set errno to EINTR when it is interrupted and // should be tried again. The macro expands to a loop that repeatedly // evaluates the expression as long as it evaluates to -1 and sets // errno to EINTR. If the expression evaluates to -1 but errno is // something other than EINTR, DeathTestAbort is called. # define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \ do { \ int gtest_retval; \ do { \ gtest_retval = (expression); \ } while (gtest_retval == -1 && errno == EINTR); \ if (gtest_retval == -1) { \ DeathTestAbort( \ ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ + ::testing::internal::StreamableToString(__LINE__) + ": " \ + #expression + " != -1"); \ } \ } while (::testing::internal::AlwaysFalse()) // Returns the message describing the last system error in errno. std::string GetLastErrnoDescription() { return errno == 0 ? "" : posix::StrError(errno); } // This is called from a death test parent process to read a failure // message from the death test child process and log it with the FATAL // severity. On Windows, the message is read from a pipe handle. On other // platforms, it is read from a file descriptor. static void FailFromInternalError(int fd) { Message error; char buffer[256]; int num_read; do { while ((num_read = posix::Read(fd, buffer, 255)) > 0) { buffer[num_read] = '\0'; error << buffer; } } while (num_read == -1 && errno == EINTR); if (num_read == 0) { GTEST_LOG_(FATAL) << error.GetString(); } else { const int last_error = errno; GTEST_LOG_(FATAL) << "Error while reading death test internal: " << GetLastErrnoDescription() << " [" << last_error << "]"; } } // Death test constructor. Increments the running death test count // for the current test. DeathTest::DeathTest() { TestInfo* const info = GetUnitTestImpl()->current_test_info(); if (info == NULL) { DeathTestAbort("Cannot run a death test outside of a TEST or " "TEST_F construct"); } } // Creates and returns a death test by dispatching to the current // death test factory. bool DeathTest::Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test) { return GetUnitTestImpl()->death_test_factory()->Create( statement, regex, file, line, test); } const char* DeathTest::LastMessage() { return last_death_test_message_.c_str(); } void DeathTest::set_last_death_test_message(const std::string& message) { last_death_test_message_ = message; } std::string DeathTest::last_death_test_message_; // Provides cross platform implementation for some death functionality. class DeathTestImpl : public DeathTest { protected: DeathTestImpl(const char* a_statement, const RE* a_regex) : statement_(a_statement), regex_(a_regex), spawned_(false), status_(-1), outcome_(IN_PROGRESS), read_fd_(-1), write_fd_(-1) {} // read_fd_ is expected to be closed and cleared by a derived class. ~DeathTestImpl() { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); } void Abort(AbortReason reason); virtual bool Passed(bool status_ok); const char* statement() const { return statement_; } const RE* regex() const { return regex_; } bool spawned() const { return spawned_; } void set_spawned(bool is_spawned) { spawned_ = is_spawned; } int status() const { return status_; } void set_status(int a_status) { status_ = a_status; } DeathTestOutcome outcome() const { return outcome_; } void set_outcome(DeathTestOutcome an_outcome) { outcome_ = an_outcome; } int read_fd() const { return read_fd_; } void set_read_fd(int fd) { read_fd_ = fd; } int write_fd() const { return write_fd_; } void set_write_fd(int fd) { write_fd_ = fd; } // Called in the parent process only. Reads the result code of the death // test child process via a pipe, interprets it to set the outcome_ // member, and closes read_fd_. Outputs diagnostics and terminates in // case of unexpected codes. void ReadAndInterpretStatusByte(); private: // The textual content of the code this object is testing. This class // doesn't own this string and should not attempt to delete it. const char* const statement_; // The regular expression which test output must match. DeathTestImpl // doesn't own this object and should not attempt to delete it. const RE* const regex_; // True if the death test child process has been successfully spawned. bool spawned_; // The exit status of the child process. int status_; // How the death test concluded. DeathTestOutcome outcome_; // Descriptor to the read end of the pipe to the child process. It is // always -1 in the child process. The child keeps its write end of the // pipe in write_fd_. int read_fd_; // Descriptor to the child's write end of the pipe to the parent process. // It is always -1 in the parent process. The parent keeps its end of the // pipe in read_fd_. int write_fd_; }; // Called in the parent process only. Reads the result code of the death // test child process via a pipe, interprets it to set the outcome_ // member, and closes read_fd_. Outputs diagnostics and terminates in // case of unexpected codes. void DeathTestImpl::ReadAndInterpretStatusByte() { char flag; int bytes_read; // The read() here blocks until data is available (signifying the // failure of the death test) or until the pipe is closed (signifying // its success), so it's okay to call this in the parent before // the child process has exited. do { bytes_read = posix::Read(read_fd(), &flag, 1); } while (bytes_read == -1 && errno == EINTR); if (bytes_read == 0) { set_outcome(DIED); } else if (bytes_read == 1) { switch (flag) { case kDeathTestReturned: set_outcome(RETURNED); break; case kDeathTestThrew: set_outcome(THREW); break; case kDeathTestLived: set_outcome(LIVED); break; case kDeathTestInternalError: FailFromInternalError(read_fd()); // Does not return. break; default: GTEST_LOG_(FATAL) << "Death test child process reported " << "unexpected status byte (" << static_cast(flag) << ")"; } } else { GTEST_LOG_(FATAL) << "Read from death test child process failed: " << GetLastErrnoDescription(); } GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd())); set_read_fd(-1); } // Signals that the death test code which should have exited, didn't. // Should be called only in a death test child process. // Writes a status byte to the child's status file descriptor, then // calls _exit(1). void DeathTestImpl::Abort(AbortReason reason) { // The parent process considers the death test to be a failure if // it finds any data in our pipe. So, here we write a single flag byte // to the pipe, then exit. const char status_ch = reason == TEST_DID_NOT_DIE ? kDeathTestLived : reason == TEST_THREW_EXCEPTION ? kDeathTestThrew : kDeathTestReturned; GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1)); // We are leaking the descriptor here because on some platforms (i.e., // when built as Windows DLL), destructors of global objects will still // run after calling _exit(). On such systems, write_fd_ will be // indirectly closed from the destructor of UnitTestImpl, causing double // close if it is also closed here. On debug configurations, double close // may assert. As there are no in-process buffers to flush here, we are // relying on the OS to close the descriptor after the process terminates // when the destructors are not run. _exit(1); // Exits w/o any normal exit hooks (we were supposed to crash) } // Returns an indented copy of stderr output for a death test. // This makes distinguishing death test output lines from regular log lines // much easier. static ::std::string FormatDeathTestOutput(const ::std::string& output) { ::std::string ret; for (size_t at = 0; ; ) { const size_t line_end = output.find('\n', at); ret += "[ DEATH ] "; if (line_end == ::std::string::npos) { ret += output.substr(at); break; } ret += output.substr(at, line_end + 1 - at); at = line_end + 1; } return ret; } // Assesses the success or failure of a death test, using both private // members which have previously been set, and one argument: // // Private data members: // outcome: An enumeration describing how the death test // concluded: DIED, LIVED, THREW, or RETURNED. The death test // fails in the latter three cases. // status: The exit status of the child process. On *nix, it is in the // in the format specified by wait(2). On Windows, this is the // value supplied to the ExitProcess() API or a numeric code // of the exception that terminated the program. // regex: A regular expression object to be applied to // the test's captured standard error output; the death test // fails if it does not match. // // Argument: // status_ok: true if exit_status is acceptable in the context of // this particular death test, which fails if it is false // // Returns true iff all of the above conditions are met. Otherwise, the // first failing condition, in the order given above, is the one that is // reported. Also sets the last death test message string. bool DeathTestImpl::Passed(bool status_ok) { if (!spawned()) return false; const std::string error_message = GetCapturedStderr(); bool success = false; Message buffer; buffer << "Death test: " << statement() << "\n"; switch (outcome()) { case LIVED: buffer << " Result: failed to die.\n" << " Error msg:\n" << FormatDeathTestOutput(error_message); break; case THREW: buffer << " Result: threw an exception.\n" << " Error msg:\n" << FormatDeathTestOutput(error_message); break; case RETURNED: buffer << " Result: illegal return in test statement.\n" << " Error msg:\n" << FormatDeathTestOutput(error_message); break; case DIED: if (status_ok) { const bool matched = RE::PartialMatch(error_message.c_str(), *regex()); if (matched) { success = true; } else { buffer << " Result: died but not with expected error.\n" << " Expected: " << regex()->pattern() << "\n" << "Actual msg:\n" << FormatDeathTestOutput(error_message); } } else { buffer << " Result: died but not with expected exit code:\n" << " " << ExitSummary(status()) << "\n" << "Actual msg:\n" << FormatDeathTestOutput(error_message); } break; case IN_PROGRESS: default: GTEST_LOG_(FATAL) << "DeathTest::Passed somehow called before conclusion of test"; } DeathTest::set_last_death_test_message(buffer.GetString()); return success; } # if GTEST_OS_WINDOWS // WindowsDeathTest implements death tests on Windows. Due to the // specifics of starting new processes on Windows, death tests there are // always threadsafe, and Google Test considers the // --gtest_death_test_style=fast setting to be equivalent to // --gtest_death_test_style=threadsafe there. // // A few implementation notes: Like the Linux version, the Windows // implementation uses pipes for child-to-parent communication. But due to // the specifics of pipes on Windows, some extra steps are required: // // 1. The parent creates a communication pipe and stores handles to both // ends of it. // 2. The parent starts the child and provides it with the information // necessary to acquire the handle to the write end of the pipe. // 3. The child acquires the write end of the pipe and signals the parent // using a Windows event. // 4. Now the parent can release the write end of the pipe on its side. If // this is done before step 3, the object's reference count goes down to // 0 and it is destroyed, preventing the child from acquiring it. The // parent now has to release it, or read operations on the read end of // the pipe will not return when the child terminates. // 5. The parent reads child's output through the pipe (outcome code and // any possible error messages) from the pipe, and its stderr and then // determines whether to fail the test. // // Note: to distinguish Win32 API calls from the local method and function // calls, the former are explicitly resolved in the global namespace. // class WindowsDeathTest : public DeathTestImpl { public: WindowsDeathTest(const char* a_statement, const RE* a_regex, const char* file, int line) : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {} // All of these virtual functions are inherited from DeathTest. virtual int Wait(); virtual TestRole AssumeRole(); private: // The name of the file in which the death test is located. const char* const file_; // The line number on which the death test is located. const int line_; // Handle to the write end of the pipe to the child process. AutoHandle write_handle_; // Child process handle. AutoHandle child_handle_; // Event the child process uses to signal the parent that it has // acquired the handle to the write end of the pipe. After seeing this // event the parent can release its own handles to make sure its // ReadFile() calls return when the child terminates. AutoHandle event_handle_; }; // Waits for the child in a death test to exit, returning its exit // status, or 0 if no child process exists. As a side effect, sets the // outcome data member. int WindowsDeathTest::Wait() { if (!spawned()) return 0; // Wait until the child either signals that it has acquired the write end // of the pipe or it dies. const HANDLE wait_handles[2] = { child_handle_.Get(), event_handle_.Get() }; switch (::WaitForMultipleObjects(2, wait_handles, FALSE, // Waits for any of the handles. INFINITE)) { case WAIT_OBJECT_0: case WAIT_OBJECT_0 + 1: break; default: GTEST_DEATH_TEST_CHECK_(false); // Should not get here. } // The child has acquired the write end of the pipe or exited. // We release the handle on our side and continue. write_handle_.Reset(); event_handle_.Reset(); ReadAndInterpretStatusByte(); // Waits for the child process to exit if it haven't already. This // returns immediately if the child has already exited, regardless of // whether previous calls to WaitForMultipleObjects synchronized on this // handle or not. GTEST_DEATH_TEST_CHECK_( WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(), INFINITE)); DWORD status_code; GTEST_DEATH_TEST_CHECK_( ::GetExitCodeProcess(child_handle_.Get(), &status_code) != FALSE); child_handle_.Reset(); set_status(static_cast(status_code)); return status(); } // The AssumeRole process for a Windows death test. It creates a child // process with the same executable as the current process to run the // death test. The child process is given the --gtest_filter and // --gtest_internal_run_death_test flags such that it knows to run the // current death test only. DeathTest::TestRole WindowsDeathTest::AssumeRole() { const UnitTestImpl* const impl = GetUnitTestImpl(); const InternalRunDeathTestFlag* const flag = impl->internal_run_death_test_flag(); const TestInfo* const info = impl->current_test_info(); const int death_test_index = info->result()->death_test_count(); if (flag != NULL) { // ParseInternalRunDeathTestFlag() has performed all the necessary // processing. set_write_fd(flag->write_fd()); return EXECUTE_TEST; } // WindowsDeathTest uses an anonymous pipe to communicate results of // a death test. SECURITY_ATTRIBUTES handles_are_inheritable = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; HANDLE read_handle, write_handle; GTEST_DEATH_TEST_CHECK_( ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable, 0) // Default buffer size. != FALSE); set_read_fd(::_open_osfhandle(reinterpret_cast(read_handle), O_RDONLY)); write_handle_.Reset(write_handle); event_handle_.Reset(::CreateEvent( &handles_are_inheritable, TRUE, // The event will automatically reset to non-signaled state. FALSE, // The initial state is non-signalled. NULL)); // The even is unnamed. GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != NULL); const std::string filter_flag = std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" + info->test_case_name() + "." + info->name(); const std::string internal_flag = std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" + file_ + "|" + StreamableToString(line_) + "|" + StreamableToString(death_test_index) + "|" + StreamableToString(static_cast(::GetCurrentProcessId())) + // size_t has the same width as pointers on both 32-bit and 64-bit // Windows platforms. // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx. "|" + StreamableToString(reinterpret_cast(write_handle)) + "|" + StreamableToString(reinterpret_cast(event_handle_.Get())); char executable_path[_MAX_PATH + 1]; // NOLINT GTEST_DEATH_TEST_CHECK_( _MAX_PATH + 1 != ::GetModuleFileNameA(NULL, executable_path, _MAX_PATH)); std::string command_line = std::string(::GetCommandLineA()) + " " + filter_flag + " \"" + internal_flag + "\""; DeathTest::set_last_death_test_message(""); CaptureStderr(); // Flush the log buffers since the log streams are shared with the child. FlushInfoLog(); // The child process will share the standard handles with the parent. STARTUPINFOA startup_info; memset(&startup_info, 0, sizeof(STARTUPINFO)); startup_info.dwFlags = STARTF_USESTDHANDLES; startup_info.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE); startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE); startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE); PROCESS_INFORMATION process_info; GTEST_DEATH_TEST_CHECK_(::CreateProcessA( executable_path, const_cast(command_line.c_str()), NULL, // Retuned process handle is not inheritable. NULL, // Retuned thread handle is not inheritable. TRUE, // Child inherits all inheritable handles (for write_handle_). 0x0, // Default creation flags. NULL, // Inherit the parent's environment. UnitTest::GetInstance()->original_working_dir(), &startup_info, &process_info) != FALSE); child_handle_.Reset(process_info.hProcess); ::CloseHandle(process_info.hThread); set_spawned(true); return OVERSEE_TEST; } # else // We are not on Windows. // ForkingDeathTest provides implementations for most of the abstract // methods of the DeathTest interface. Only the AssumeRole method is // left undefined. class ForkingDeathTest : public DeathTestImpl { public: ForkingDeathTest(const char* statement, const RE* regex); // All of these virtual functions are inherited from DeathTest. virtual int Wait(); protected: void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; } private: // PID of child process during death test; 0 in the child process itself. pid_t child_pid_; }; // Constructs a ForkingDeathTest. ForkingDeathTest::ForkingDeathTest(const char* a_statement, const RE* a_regex) : DeathTestImpl(a_statement, a_regex), child_pid_(-1) {} // Waits for the child in a death test to exit, returning its exit // status, or 0 if no child process exists. As a side effect, sets the // outcome data member. int ForkingDeathTest::Wait() { if (!spawned()) return 0; ReadAndInterpretStatusByte(); int status_value; GTEST_DEATH_TEST_CHECK_SYSCALL_(waitpid(child_pid_, &status_value, 0)); set_status(status_value); return status_value; } // A concrete death test class that forks, then immediately runs the test // in the child process. class NoExecDeathTest : public ForkingDeathTest { public: NoExecDeathTest(const char* a_statement, const RE* a_regex) : ForkingDeathTest(a_statement, a_regex) { } virtual TestRole AssumeRole(); }; // The AssumeRole process for a fork-and-run death test. It implements a // straightforward fork, with a simple pipe to transmit the status byte. DeathTest::TestRole NoExecDeathTest::AssumeRole() { const size_t thread_count = GetThreadCount(); if (thread_count != 1) { GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count); } int pipe_fd[2]; GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); DeathTest::set_last_death_test_message(""); CaptureStderr(); // When we fork the process below, the log file buffers are copied, but the // file descriptors are shared. We flush all log files here so that closing // the file descriptors in the child process doesn't throw off the // synchronization between descriptors and buffers in the parent process. // This is as close to the fork as possible to avoid a race condition in case // there are multiple threads running before the death test, and another // thread writes to the log file. FlushInfoLog(); const pid_t child_pid = fork(); GTEST_DEATH_TEST_CHECK_(child_pid != -1); set_child_pid(child_pid); if (child_pid == 0) { GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[0])); set_write_fd(pipe_fd[1]); // Redirects all logging to stderr in the child process to prevent // concurrent writes to the log files. We capture stderr in the parent // process and append the child process' output to a log. LogToStderr(); // Event forwarding to the listeners of event listener API mush be shut // down in death test subprocesses. GetUnitTestImpl()->listeners()->SuppressEventForwarding(); g_in_fast_death_test_child = true; return EXECUTE_TEST; } else { GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); set_read_fd(pipe_fd[0]); set_spawned(true); return OVERSEE_TEST; } } // A concrete death test class that forks and re-executes the main // program from the beginning, with command-line flags set that cause // only this specific death test to be run. class ExecDeathTest : public ForkingDeathTest { public: ExecDeathTest(const char* a_statement, const RE* a_regex, const char* file, int line) : ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { } virtual TestRole AssumeRole(); private: static ::std::vector GetArgvsForDeathTestChildProcess() { ::std::vector args = GetInjectableArgvs(); return args; } // The name of the file in which the death test is located. const char* const file_; // The line number on which the death test is located. const int line_; }; // Utility class for accumulating command-line arguments. class Arguments { public: Arguments() { args_.push_back(NULL); } ~Arguments() { for (std::vector::iterator i = args_.begin(); i != args_.end(); ++i) { free(*i); } } void AddArgument(const char* argument) { args_.insert(args_.end() - 1, posix::StrDup(argument)); } template void AddArguments(const ::std::vector& arguments) { for (typename ::std::vector::const_iterator i = arguments.begin(); i != arguments.end(); ++i) { args_.insert(args_.end() - 1, posix::StrDup(i->c_str())); } } char* const* Argv() { return &args_[0]; } private: std::vector args_; }; // A struct that encompasses the arguments to the child process of a // threadsafe-style death test process. struct ExecDeathTestArgs { char* const* argv; // Command-line arguments for the child's call to exec int close_fd; // File descriptor to close; the read end of a pipe }; # if GTEST_OS_MAC inline char** GetEnviron() { // When Google Test is built as a framework on MacOS X, the environ variable // is unavailable. Apple's documentation (man environ) recommends using // _NSGetEnviron() instead. return *_NSGetEnviron(); } # else // Some POSIX platforms expect you to declare environ. extern "C" makes // it reside in the global namespace. extern "C" char** environ; inline char** GetEnviron() { return environ; } # endif // GTEST_OS_MAC # if !GTEST_OS_QNX // The main function for a threadsafe-style death test child process. // This function is called in a clone()-ed process and thus must avoid // any potentially unsafe operations like malloc or libc functions. static int ExecDeathTestChildMain(void* child_arg) { ExecDeathTestArgs* const args = static_cast(child_arg); GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd)); // We need to execute the test program in the same environment where // it was originally invoked. Therefore we change to the original // working directory first. const char* const original_dir = UnitTest::GetInstance()->original_working_dir(); // We can safely call chdir() as it's a direct system call. if (chdir(original_dir) != 0) { DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + GetLastErrnoDescription()); return EXIT_FAILURE; } // We can safely call execve() as it's a direct system call. We // cannot use execvp() as it's a libc function and thus potentially // unsafe. Since execve() doesn't search the PATH, the user must // invoke the test program via a valid path that contains at least // one path separator. execve(args->argv[0], args->argv, GetEnviron()); DeathTestAbort(std::string("execve(") + args->argv[0] + ", ...) in " + original_dir + " failed: " + GetLastErrnoDescription()); return EXIT_FAILURE; } # endif // !GTEST_OS_QNX // Two utility routines that together determine the direction the stack // grows. // This could be accomplished more elegantly by a single recursive // function, but we want to guard against the unlikely possibility of // a smart compiler optimizing the recursion away. // // GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining // StackLowerThanAddress into StackGrowsDown, which then doesn't give // correct answer. void StackLowerThanAddress(const void* ptr, bool* result) GTEST_NO_INLINE_; void StackLowerThanAddress(const void* ptr, bool* result) { int dummy; *result = (&dummy < ptr); } bool StackGrowsDown() { int dummy; bool result; StackLowerThanAddress(&dummy, &result); return result; } // Spawns a child process with the same executable as the current process in // a thread-safe manner and instructs it to run the death test. The // implementation uses fork(2) + exec. On systems where clone(2) is // available, it is used instead, being slightly more thread-safe. On QNX, // fork supports only single-threaded environments, so this function uses // spawn(2) there instead. The function dies with an error message if // anything goes wrong. static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { ExecDeathTestArgs args = { argv, close_fd }; pid_t child_pid = -1; # if GTEST_OS_QNX // Obtains the current directory and sets it to be closed in the child // process. const int cwd_fd = open(".", O_RDONLY); GTEST_DEATH_TEST_CHECK_(cwd_fd != -1); GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(cwd_fd, F_SETFD, FD_CLOEXEC)); // We need to execute the test program in the same environment where // it was originally invoked. Therefore we change to the original // working directory first. const char* const original_dir = UnitTest::GetInstance()->original_working_dir(); // We can safely call chdir() as it's a direct system call. if (chdir(original_dir) != 0) { DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + GetLastErrnoDescription()); return EXIT_FAILURE; } int fd_flags; // Set close_fd to be closed after spawn. GTEST_DEATH_TEST_CHECK_SYSCALL_(fd_flags = fcntl(close_fd, F_GETFD)); GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(close_fd, F_SETFD, fd_flags | FD_CLOEXEC)); struct inheritance inherit = {0}; // spawn is a system call. child_pid = spawn(args.argv[0], 0, NULL, &inherit, args.argv, GetEnviron()); // Restores the current working directory. GTEST_DEATH_TEST_CHECK_(fchdir(cwd_fd) != -1); GTEST_DEATH_TEST_CHECK_SYSCALL_(close(cwd_fd)); # else // GTEST_OS_QNX # if GTEST_OS_LINUX // When a SIGPROF signal is received while fork() or clone() are executing, // the process may hang. To avoid this, we ignore SIGPROF here and re-enable // it after the call to fork()/clone() is complete. struct sigaction saved_sigprof_action; struct sigaction ignore_sigprof_action; memset(&ignore_sigprof_action, 0, sizeof(ignore_sigprof_action)); sigemptyset(&ignore_sigprof_action.sa_mask); ignore_sigprof_action.sa_handler = SIG_IGN; GTEST_DEATH_TEST_CHECK_SYSCALL_(sigaction( SIGPROF, &ignore_sigprof_action, &saved_sigprof_action)); # endif // GTEST_OS_LINUX # if GTEST_HAS_CLONE const bool use_fork = GTEST_FLAG(death_test_use_fork); if (!use_fork) { static const bool stack_grows_down = StackGrowsDown(); const size_t stack_size = getpagesize(); // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead. void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED); // Maximum stack alignment in bytes: For a downward-growing stack, this // amount is subtracted from size of the stack space to get an address // that is within the stack space and is aligned on all systems we care // about. As far as I know there is no ABI with stack alignment greater // than 64. We assume stack and stack_size already have alignment of // kMaxStackAlignment. const size_t kMaxStackAlignment = 64; void* const stack_top = static_cast(stack) + (stack_grows_down ? stack_size - kMaxStackAlignment : 0); GTEST_DEATH_TEST_CHECK_(stack_size > kMaxStackAlignment && reinterpret_cast(stack_top) % kMaxStackAlignment == 0); child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args); GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1); } # else const bool use_fork = true; # endif // GTEST_HAS_CLONE if (use_fork && (child_pid = fork()) == 0) { ExecDeathTestChildMain(&args); _exit(0); } # endif // GTEST_OS_QNX # if GTEST_OS_LINUX GTEST_DEATH_TEST_CHECK_SYSCALL_( sigaction(SIGPROF, &saved_sigprof_action, NULL)); # endif // GTEST_OS_LINUX GTEST_DEATH_TEST_CHECK_(child_pid != -1); return child_pid; } // The AssumeRole process for a fork-and-exec death test. It re-executes the // main program from the beginning, setting the --gtest_filter // and --gtest_internal_run_death_test flags to cause only the current // death test to be re-run. DeathTest::TestRole ExecDeathTest::AssumeRole() { const UnitTestImpl* const impl = GetUnitTestImpl(); const InternalRunDeathTestFlag* const flag = impl->internal_run_death_test_flag(); const TestInfo* const info = impl->current_test_info(); const int death_test_index = info->result()->death_test_count(); if (flag != NULL) { set_write_fd(flag->write_fd()); return EXECUTE_TEST; } int pipe_fd[2]; GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); // Clear the close-on-exec flag on the write end of the pipe, lest // it be closed when the child process does an exec: GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1); const std::string filter_flag = std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" + info->test_case_name() + "." + info->name(); const std::string internal_flag = std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" + file_ + "|" + StreamableToString(line_) + "|" + StreamableToString(death_test_index) + "|" + StreamableToString(pipe_fd[1]); Arguments args; args.AddArguments(GetArgvsForDeathTestChildProcess()); args.AddArgument(filter_flag.c_str()); args.AddArgument(internal_flag.c_str()); DeathTest::set_last_death_test_message(""); CaptureStderr(); // See the comment in NoExecDeathTest::AssumeRole for why the next line // is necessary. FlushInfoLog(); const pid_t child_pid = ExecDeathTestSpawnChild(args.Argv(), pipe_fd[0]); GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); set_child_pid(child_pid); set_read_fd(pipe_fd[0]); set_spawned(true); return OVERSEE_TEST; } # endif // !GTEST_OS_WINDOWS // Creates a concrete DeathTest-derived class that depends on the // --gtest_death_test_style flag, and sets the pointer pointed to // by the "test" argument to its address. If the test should be // skipped, sets that pointer to NULL. Returns true, unless the // flag is set to an invalid value. bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test) { UnitTestImpl* const impl = GetUnitTestImpl(); const InternalRunDeathTestFlag* const flag = impl->internal_run_death_test_flag(); const int death_test_index = impl->current_test_info() ->increment_death_test_count(); if (flag != NULL) { if (death_test_index > flag->index()) { DeathTest::set_last_death_test_message( "Death test count (" + StreamableToString(death_test_index) + ") somehow exceeded expected maximum (" + StreamableToString(flag->index()) + ")"); return false; } if (!(flag->file() == file && flag->line() == line && flag->index() == death_test_index)) { *test = NULL; return true; } } # if GTEST_OS_WINDOWS if (GTEST_FLAG(death_test_style) == "threadsafe" || GTEST_FLAG(death_test_style) == "fast") { *test = new WindowsDeathTest(statement, regex, file, line); } # else if (GTEST_FLAG(death_test_style) == "threadsafe") { *test = new ExecDeathTest(statement, regex, file, line); } else if (GTEST_FLAG(death_test_style) == "fast") { *test = new NoExecDeathTest(statement, regex); } # endif // GTEST_OS_WINDOWS else { // NOLINT - this is more readable than unbalanced brackets inside #if. DeathTest::set_last_death_test_message( "Unknown death test style \"" + GTEST_FLAG(death_test_style) + "\" encountered"); return false; } return true; } // Splits a given string on a given delimiter, populating a given // vector with the fields. GTEST_HAS_DEATH_TEST implies that we have // ::std::string, so we can use it here. static void SplitString(const ::std::string& str, char delimiter, ::std::vector< ::std::string>* dest) { ::std::vector< ::std::string> parsed; ::std::string::size_type pos = 0; while (::testing::internal::AlwaysTrue()) { const ::std::string::size_type colon = str.find(delimiter, pos); if (colon == ::std::string::npos) { parsed.push_back(str.substr(pos)); break; } else { parsed.push_back(str.substr(pos, colon - pos)); pos = colon + 1; } } dest->swap(parsed); } # if GTEST_OS_WINDOWS // Recreates the pipe and event handles from the provided parameters, // signals the event, and returns a file descriptor wrapped around the pipe // handle. This function is called in the child process only. int GetStatusFileDescriptor(unsigned int parent_process_id, size_t write_handle_as_size_t, size_t event_handle_as_size_t) { AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE, FALSE, // Non-inheritable. parent_process_id)); if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) { DeathTestAbort("Unable to open parent process " + StreamableToString(parent_process_id)); } // TODO(vladl@google.com): Replace the following check with a // compile-time assertion when available. GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t)); const HANDLE write_handle = reinterpret_cast(write_handle_as_size_t); HANDLE dup_write_handle; // The newly initialized handle is accessible only in in the parent // process. To obtain one accessible within the child, we need to use // DuplicateHandle. if (!::DuplicateHandle(parent_process_handle.Get(), write_handle, ::GetCurrentProcess(), &dup_write_handle, 0x0, // Requested privileges ignored since // DUPLICATE_SAME_ACCESS is used. FALSE, // Request non-inheritable handler. DUPLICATE_SAME_ACCESS)) { DeathTestAbort("Unable to duplicate the pipe handle " + StreamableToString(write_handle_as_size_t) + " from the parent process " + StreamableToString(parent_process_id)); } const HANDLE event_handle = reinterpret_cast(event_handle_as_size_t); HANDLE dup_event_handle; if (!::DuplicateHandle(parent_process_handle.Get(), event_handle, ::GetCurrentProcess(), &dup_event_handle, 0x0, FALSE, DUPLICATE_SAME_ACCESS)) { DeathTestAbort("Unable to duplicate the event handle " + StreamableToString(event_handle_as_size_t) + " from the parent process " + StreamableToString(parent_process_id)); } const int write_fd = ::_open_osfhandle(reinterpret_cast(dup_write_handle), O_APPEND); if (write_fd == -1) { DeathTestAbort("Unable to convert pipe handle " + StreamableToString(write_handle_as_size_t) + " to a file descriptor"); } // Signals the parent that the write end of the pipe has been acquired // so the parent can release its own write end. ::SetEvent(dup_event_handle); return write_fd; } # endif // GTEST_OS_WINDOWS // Returns a newly created InternalRunDeathTestFlag object with fields // initialized from the GTEST_FLAG(internal_run_death_test) flag if // the flag is specified; otherwise returns NULL. InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() { if (GTEST_FLAG(internal_run_death_test) == "") return NULL; // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we // can use it here. int line = -1; int index = -1; ::std::vector< ::std::string> fields; SplitString(GTEST_FLAG(internal_run_death_test).c_str(), '|', &fields); int write_fd = -1; # if GTEST_OS_WINDOWS unsigned int parent_process_id = 0; size_t write_handle_as_size_t = 0; size_t event_handle_as_size_t = 0; if (fields.size() != 6 || !ParseNaturalNumber(fields[1], &line) || !ParseNaturalNumber(fields[2], &index) || !ParseNaturalNumber(fields[3], &parent_process_id) || !ParseNaturalNumber(fields[4], &write_handle_as_size_t) || !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) { DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + GTEST_FLAG(internal_run_death_test)); } write_fd = GetStatusFileDescriptor(parent_process_id, write_handle_as_size_t, event_handle_as_size_t); # else if (fields.size() != 4 || !ParseNaturalNumber(fields[1], &line) || !ParseNaturalNumber(fields[2], &index) || !ParseNaturalNumber(fields[3], &write_fd)) { DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + GTEST_FLAG(internal_run_death_test)); } # endif // GTEST_OS_WINDOWS return new InternalRunDeathTestFlag(fields[0], line, index, write_fd); } } // namespace internal #endif // GTEST_HAS_DEATH_TEST } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/src/gtest-filepath.cc000066400000000000000000000336361377520261000214570ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: keith.ray@gmail.com (Keith Ray) #include "gtest/gtest-message.h" #include "gtest/internal/gtest-filepath.h" #include "gtest/internal/gtest-port.h" #include #if GTEST_OS_WINDOWS_MOBILE # include #elif GTEST_OS_WINDOWS # include # include #elif GTEST_OS_SYMBIAN // Symbian OpenC has PATH_MAX in sys/syslimits.h # include #else # include # include // Some Linux distributions define PATH_MAX here. #endif // GTEST_OS_WINDOWS_MOBILE #if GTEST_OS_WINDOWS # define GTEST_PATH_MAX_ _MAX_PATH #elif defined(PATH_MAX) # define GTEST_PATH_MAX_ PATH_MAX #elif defined(_XOPEN_PATH_MAX) # define GTEST_PATH_MAX_ _XOPEN_PATH_MAX #else # define GTEST_PATH_MAX_ _POSIX_PATH_MAX #endif // GTEST_OS_WINDOWS #include "gtest/internal/gtest-string.h" namespace testing { namespace internal { #if GTEST_OS_WINDOWS // On Windows, '\\' is the standard path separator, but many tools and the // Windows API also accept '/' as an alternate path separator. Unless otherwise // noted, a file path can contain either kind of path separators, or a mixture // of them. const char kPathSeparator = '\\'; const char kAlternatePathSeparator = '/'; const char kPathSeparatorString[] = "\\"; const char kAlternatePathSeparatorString[] = "/"; # if GTEST_OS_WINDOWS_MOBILE // Windows CE doesn't have a current directory. You should not use // the current directory in tests on Windows CE, but this at least // provides a reasonable fallback. const char kCurrentDirectoryString[] = "\\"; // Windows CE doesn't define INVALID_FILE_ATTRIBUTES const DWORD kInvalidFileAttributes = 0xffffffff; # else const char kCurrentDirectoryString[] = ".\\"; # endif // GTEST_OS_WINDOWS_MOBILE #else const char kPathSeparator = '/'; const char kPathSeparatorString[] = "/"; const char kCurrentDirectoryString[] = "./"; #endif // GTEST_OS_WINDOWS // Returns whether the given character is a valid path separator. static bool IsPathSeparator(char c) { #if GTEST_HAS_ALT_PATH_SEP_ return (c == kPathSeparator) || (c == kAlternatePathSeparator); #else return c == kPathSeparator; #endif } // Returns the current working directory, or "" if unsuccessful. FilePath FilePath::GetCurrentDir() { #if GTEST_OS_WINDOWS_MOBILE // Windows CE doesn't have a current directory, so we just return // something reasonable. return FilePath(kCurrentDirectoryString); #elif GTEST_OS_WINDOWS char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); #else char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); #endif // GTEST_OS_WINDOWS_MOBILE } // Returns a copy of the FilePath with the case-insensitive extension removed. // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns // FilePath("dir/file"). If a case-insensitive extension is not // found, returns a copy of the original FilePath. FilePath FilePath::RemoveExtension(const char* extension) const { const std::string dot_extension = std::string(".") + extension; if (String::EndsWithCaseInsensitive(pathname_, dot_extension)) { return FilePath(pathname_.substr( 0, pathname_.length() - dot_extension.length())); } return *this; } // Returns a pointer to the last occurence of a valid path separator in // the FilePath. On Windows, for example, both '/' and '\' are valid path // separators. Returns NULL if no path separator was found. const char* FilePath::FindLastPathSeparator() const { const char* const last_sep = strrchr(c_str(), kPathSeparator); #if GTEST_HAS_ALT_PATH_SEP_ const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator); // Comparing two pointers of which only one is NULL is undefined. if (last_alt_sep != NULL && (last_sep == NULL || last_alt_sep > last_sep)) { return last_alt_sep; } #endif return last_sep; } // Returns a copy of the FilePath with the directory part removed. // Example: FilePath("path/to/file").RemoveDirectoryName() returns // FilePath("file"). If there is no directory part ("just_a_file"), it returns // the FilePath unmodified. If there is no file part ("just_a_dir/") it // returns an empty FilePath (""). // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath FilePath::RemoveDirectoryName() const { const char* const last_sep = FindLastPathSeparator(); return last_sep ? FilePath(last_sep + 1) : *this; } // RemoveFileName returns the directory path with the filename removed. // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". // If the FilePath is "a_file" or "/a_file", RemoveFileName returns // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does // not have a file, like "just/a/dir/", it returns the FilePath unmodified. // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath FilePath::RemoveFileName() const { const char* const last_sep = FindLastPathSeparator(); std::string dir; if (last_sep) { dir = std::string(c_str(), last_sep + 1 - c_str()); } else { dir = kCurrentDirectoryString; } return FilePath(dir); } // Helper functions for naming files in a directory for xml output. // Given directory = "dir", base_name = "test", number = 0, // extension = "xml", returns "dir/test.xml". If number is greater // than zero (e.g., 12), returns "dir/test_12.xml". // On Windows platform, uses \ as the separator rather than /. FilePath FilePath::MakeFileName(const FilePath& directory, const FilePath& base_name, int number, const char* extension) { std::string file; if (number == 0) { file = base_name.string() + "." + extension; } else { file = base_name.string() + "_" + StreamableToString(number) + "." + extension; } return ConcatPaths(directory, FilePath(file)); } // Given directory = "dir", relative_path = "test.xml", returns "dir/test.xml". // On Windows, uses \ as the separator rather than /. FilePath FilePath::ConcatPaths(const FilePath& directory, const FilePath& relative_path) { if (directory.IsEmpty()) return relative_path; const FilePath dir(directory.RemoveTrailingPathSeparator()); return FilePath(dir.string() + kPathSeparator + relative_path.string()); } // Returns true if pathname describes something findable in the file-system, // either a file, directory, or whatever. bool FilePath::FileOrDirectoryExists() const { #if GTEST_OS_WINDOWS_MOBILE LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str()); const DWORD attributes = GetFileAttributes(unicode); delete [] unicode; return attributes != kInvalidFileAttributes; #else posix::StatStruct file_stat; return posix::Stat(pathname_.c_str(), &file_stat) == 0; #endif // GTEST_OS_WINDOWS_MOBILE } // Returns true if pathname describes a directory in the file-system // that exists. bool FilePath::DirectoryExists() const { bool result = false; #if GTEST_OS_WINDOWS // Don't strip off trailing separator if path is a root directory on // Windows (like "C:\\"). const FilePath& path(IsRootDirectory() ? *this : RemoveTrailingPathSeparator()); #else const FilePath& path(*this); #endif #if GTEST_OS_WINDOWS_MOBILE LPCWSTR unicode = String::AnsiToUtf16(path.c_str()); const DWORD attributes = GetFileAttributes(unicode); delete [] unicode; if ((attributes != kInvalidFileAttributes) && (attributes & FILE_ATTRIBUTE_DIRECTORY)) { result = true; } #else posix::StatStruct file_stat; result = posix::Stat(path.c_str(), &file_stat) == 0 && posix::IsDir(file_stat); #endif // GTEST_OS_WINDOWS_MOBILE return result; } // Returns true if pathname describes a root directory. (Windows has one // root directory per disk drive.) bool FilePath::IsRootDirectory() const { #if GTEST_OS_WINDOWS // TODO(wan@google.com): on Windows a network share like // \\server\share can be a root directory, although it cannot be the // current directory. Handle this properly. return pathname_.length() == 3 && IsAbsolutePath(); #else return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]); #endif } // Returns true if pathname describes an absolute path. bool FilePath::IsAbsolutePath() const { const char* const name = pathname_.c_str(); #if GTEST_OS_WINDOWS return pathname_.length() >= 3 && ((name[0] >= 'a' && name[0] <= 'z') || (name[0] >= 'A' && name[0] <= 'Z')) && name[1] == ':' && IsPathSeparator(name[2]); #else return IsPathSeparator(name[0]); #endif } // Returns a pathname for a file that does not currently exist. The pathname // will be directory/base_name.extension or // directory/base_name_.extension if directory/base_name.extension // already exists. The number will be incremented until a pathname is found // that does not already exist. // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. // There could be a race condition if two or more processes are calling this // function at the same time -- they could both pick the same filename. FilePath FilePath::GenerateUniqueFileName(const FilePath& directory, const FilePath& base_name, const char* extension) { FilePath full_pathname; int number = 0; do { full_pathname.Set(MakeFileName(directory, base_name, number++, extension)); } while (full_pathname.FileOrDirectoryExists()); return full_pathname; } // Returns true if FilePath ends with a path separator, which indicates that // it is intended to represent a directory. Returns false otherwise. // This does NOT check that a directory (or file) actually exists. bool FilePath::IsDirectory() const { return !pathname_.empty() && IsPathSeparator(pathname_.c_str()[pathname_.length() - 1]); } // Create directories so that path exists. Returns true if successful or if // the directories already exist; returns false if unable to create directories // for any reason. bool FilePath::CreateDirectoriesRecursively() const { if (!this->IsDirectory()) { return false; } if (pathname_.length() == 0 || this->DirectoryExists()) { return true; } const FilePath parent(this->RemoveTrailingPathSeparator().RemoveFileName()); return parent.CreateDirectoriesRecursively() && this->CreateFolder(); } // Create the directory so that path exists. Returns true if successful or // if the directory already exists; returns false if unable to create the // directory for any reason, including if the parent directory does not // exist. Not named "CreateDirectory" because that's a macro on Windows. bool FilePath::CreateFolder() const { #if GTEST_OS_WINDOWS_MOBILE FilePath removed_sep(this->RemoveTrailingPathSeparator()); LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str()); int result = CreateDirectory(unicode, NULL) ? 0 : -1; delete [] unicode; #elif GTEST_OS_WINDOWS int result = _mkdir(pathname_.c_str()); #else int result = mkdir(pathname_.c_str(), 0777); #endif // GTEST_OS_WINDOWS_MOBILE if (result == -1) { return this->DirectoryExists(); // An error is OK if the directory exists. } return true; // No error. } // If input name has a trailing separator character, remove it and return the // name, otherwise return the name string unmodified. // On Windows platform, uses \ as the separator, other platforms use /. FilePath FilePath::RemoveTrailingPathSeparator() const { return IsDirectory() ? FilePath(pathname_.substr(0, pathname_.length() - 1)) : *this; } // Removes any redundant separators that might be in the pathname. // For example, "bar///foo" becomes "bar/foo". Does not eliminate other // redundancies that might be in a pathname involving "." or "..". // TODO(wan@google.com): handle Windows network shares (e.g. \\server\share). void FilePath::Normalize() { if (pathname_.c_str() == NULL) { pathname_ = ""; return; } const char* src = pathname_.c_str(); char* const dest = new char[pathname_.length() + 1]; char* dest_ptr = dest; memset(dest_ptr, 0, pathname_.length() + 1); while (*src != '\0') { *dest_ptr = *src; if (!IsPathSeparator(*src)) { src++; } else { #if GTEST_HAS_ALT_PATH_SEP_ if (*dest_ptr == kAlternatePathSeparator) { *dest_ptr = kPathSeparator; } #endif while (IsPathSeparator(*src)) src++; } dest_ptr++; } *dest_ptr = '\0'; pathname_ = dest; delete[] dest; } } // namespace internal } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/src/gtest-internal-inl.h000066400000000000000000001326011377520261000221110ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // Utility functions and classes used by the Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) // // This file contains purely Google Test's internal implementation. Please // DO NOT #INCLUDE IT IN A USER PROGRAM. #ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_ #define GTEST_SRC_GTEST_INTERNAL_INL_H_ // GTEST_IMPLEMENTATION_ is defined to 1 iff the current translation unit is // part of Google Test's implementation; otherwise it's undefined. #if !GTEST_IMPLEMENTATION_ // A user is trying to include this from his code - just say no. # error "gtest-internal-inl.h is part of Google Test's internal implementation." # error "It must not be included except by Google Test itself." #endif // GTEST_IMPLEMENTATION_ #ifndef _WIN32_WCE # include #endif // !_WIN32_WCE #include #include // For strtoll/_strtoul64/malloc/free. #include // For memmove. #include #include #include #include "gtest/internal/gtest-port.h" #if GTEST_CAN_STREAM_RESULTS_ # include // NOLINT # include // NOLINT #endif #if GTEST_OS_WINDOWS # include // NOLINT #endif // GTEST_OS_WINDOWS #include "gtest/gtest.h" // NOLINT #include "gtest/gtest-spi.h" namespace testing { // Declares the flags. // // We don't want the users to modify this flag in the code, but want // Google Test's own unit tests to be able to access it. Therefore we // declare it here as opposed to in gtest.h. GTEST_DECLARE_bool_(death_test_use_fork); namespace internal { // The value of GetTestTypeId() as seen from within the Google Test // library. This is solely for testing GetTestTypeId(). GTEST_API_ extern const TypeId kTestTypeIdInGoogleTest; // Names of the flags (needed for parsing Google Test flags). const char kAlsoRunDisabledTestsFlag[] = "also_run_disabled_tests"; const char kBreakOnFailureFlag[] = "break_on_failure"; const char kCatchExceptionsFlag[] = "catch_exceptions"; const char kColorFlag[] = "color"; const char kFilterFlag[] = "filter"; const char kListTestsFlag[] = "list_tests"; const char kOutputFlag[] = "output"; const char kPrintTimeFlag[] = "print_time"; const char kRandomSeedFlag[] = "random_seed"; const char kRepeatFlag[] = "repeat"; const char kShuffleFlag[] = "shuffle"; const char kStackTraceDepthFlag[] = "stack_trace_depth"; const char kStreamResultToFlag[] = "stream_result_to"; const char kThrowOnFailureFlag[] = "throw_on_failure"; // A valid random seed must be in [1, kMaxRandomSeed]. const int kMaxRandomSeed = 99999; // g_help_flag is true iff the --help flag or an equivalent form is // specified on the command line. GTEST_API_ extern bool g_help_flag; // Returns the current time in milliseconds. GTEST_API_ TimeInMillis GetTimeInMillis(); // Returns true iff Google Test should use colors in the output. GTEST_API_ bool ShouldUseColor(bool stdout_is_tty); // Formats the given time in milliseconds as seconds. GTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms); // Converts the given time in milliseconds to a date string in the ISO 8601 // format, without the timezone information. N.B.: due to the use the // non-reentrant localtime() function, this function is not thread safe. Do // not use it in any code that can be called from multiple threads. GTEST_API_ std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms); // Parses a string for an Int32 flag, in the form of "--flag=value". // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. GTEST_API_ bool ParseInt32Flag( const char* str, const char* flag, Int32* value); // Returns a random seed in range [1, kMaxRandomSeed] based on the // given --gtest_random_seed flag value. inline int GetRandomSeedFromFlag(Int32 random_seed_flag) { const unsigned int raw_seed = (random_seed_flag == 0) ? static_cast(GetTimeInMillis()) : static_cast(random_seed_flag); // Normalizes the actual seed to range [1, kMaxRandomSeed] such that // it's easy to type. const int normalized_seed = static_cast((raw_seed - 1U) % static_cast(kMaxRandomSeed)) + 1; return normalized_seed; } // Returns the first valid random seed after 'seed'. The behavior is // undefined if 'seed' is invalid. The seed after kMaxRandomSeed is // considered to be 1. inline int GetNextRandomSeed(int seed) { GTEST_CHECK_(1 <= seed && seed <= kMaxRandomSeed) << "Invalid random seed " << seed << " - must be in [1, " << kMaxRandomSeed << "]."; const int next_seed = seed + 1; return (next_seed > kMaxRandomSeed) ? 1 : next_seed; } // This class saves the values of all Google Test flags in its c'tor, and // restores them in its d'tor. class GTestFlagSaver { public: // The c'tor. GTestFlagSaver() { also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests); break_on_failure_ = GTEST_FLAG(break_on_failure); catch_exceptions_ = GTEST_FLAG(catch_exceptions); color_ = GTEST_FLAG(color); death_test_style_ = GTEST_FLAG(death_test_style); death_test_use_fork_ = GTEST_FLAG(death_test_use_fork); filter_ = GTEST_FLAG(filter); internal_run_death_test_ = GTEST_FLAG(internal_run_death_test); list_tests_ = GTEST_FLAG(list_tests); output_ = GTEST_FLAG(output); print_time_ = GTEST_FLAG(print_time); random_seed_ = GTEST_FLAG(random_seed); repeat_ = GTEST_FLAG(repeat); shuffle_ = GTEST_FLAG(shuffle); stack_trace_depth_ = GTEST_FLAG(stack_trace_depth); stream_result_to_ = GTEST_FLAG(stream_result_to); throw_on_failure_ = GTEST_FLAG(throw_on_failure); } // The d'tor is not virtual. DO NOT INHERIT FROM THIS CLASS. ~GTestFlagSaver() { GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_; GTEST_FLAG(break_on_failure) = break_on_failure_; GTEST_FLAG(catch_exceptions) = catch_exceptions_; GTEST_FLAG(color) = color_; GTEST_FLAG(death_test_style) = death_test_style_; GTEST_FLAG(death_test_use_fork) = death_test_use_fork_; GTEST_FLAG(filter) = filter_; GTEST_FLAG(internal_run_death_test) = internal_run_death_test_; GTEST_FLAG(list_tests) = list_tests_; GTEST_FLAG(output) = output_; GTEST_FLAG(print_time) = print_time_; GTEST_FLAG(random_seed) = random_seed_; GTEST_FLAG(repeat) = repeat_; GTEST_FLAG(shuffle) = shuffle_; GTEST_FLAG(stack_trace_depth) = stack_trace_depth_; GTEST_FLAG(stream_result_to) = stream_result_to_; GTEST_FLAG(throw_on_failure) = throw_on_failure_; } private: // Fields for saving the original values of flags. bool also_run_disabled_tests_; bool break_on_failure_; bool catch_exceptions_; std::string color_; std::string death_test_style_; bool death_test_use_fork_; std::string filter_; std::string internal_run_death_test_; bool list_tests_; std::string output_; bool print_time_; internal::Int32 random_seed_; internal::Int32 repeat_; bool shuffle_; internal::Int32 stack_trace_depth_; std::string stream_result_to_; bool throw_on_failure_; } GTEST_ATTRIBUTE_UNUSED_; // Converts a Unicode code point to a narrow string in UTF-8 encoding. // code_point parameter is of type UInt32 because wchar_t may not be // wide enough to contain a code point. // If the code_point is not a valid Unicode code point // (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted // to "(Invalid Unicode 0xXXXXXXXX)". GTEST_API_ std::string CodePointToUtf8(UInt32 code_point); // Converts a wide string to a narrow string in UTF-8 encoding. // The wide string is assumed to have the following encoding: // UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) // UTF-32 if sizeof(wchar_t) == 4 (on Linux) // Parameter str points to a null-terminated wide string. // Parameter num_chars may additionally limit the number // of wchar_t characters processed. -1 is used when the entire string // should be processed. // If the string contains code points that are not valid Unicode code points // (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output // as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding // and contains invalid UTF-16 surrogate pairs, values in those pairs // will be encoded as individual Unicode characters from Basic Normal Plane. GTEST_API_ std::string WideStringToUtf8(const wchar_t* str, int num_chars); // Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file // if the variable is present. If a file already exists at this location, this // function will write over it. If the variable is present, but the file cannot // be created, prints an error and exits. void WriteToShardStatusFileIfNeeded(); // Checks whether sharding is enabled by examining the relevant // environment variable values. If the variables are present, // but inconsistent (e.g., shard_index >= total_shards), prints // an error and exits. If in_subprocess_for_death_test, sharding is // disabled because it must only be applied to the original test // process. Otherwise, we could filter out death tests we intended to execute. GTEST_API_ bool ShouldShard(const char* total_shards_str, const char* shard_index_str, bool in_subprocess_for_death_test); // Parses the environment variable var as an Int32. If it is unset, // returns default_val. If it is not an Int32, prints an error and // and aborts. GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val); // Given the total number of shards, the shard index, and the test id, // returns true iff the test should be run on this shard. The test id is // some arbitrary but unique non-negative integer assigned to each test // method. Assumes that 0 <= shard_index < total_shards. GTEST_API_ bool ShouldRunTestOnShard( int total_shards, int shard_index, int test_id); // STL container utilities. // Returns the number of elements in the given container that satisfy // the given predicate. template inline int CountIf(const Container& c, Predicate predicate) { // Implemented as an explicit loop since std::count_if() in libCstd on // Solaris has a non-standard signature. int count = 0; for (typename Container::const_iterator it = c.begin(); it != c.end(); ++it) { if (predicate(*it)) ++count; } return count; } // Applies a function/functor to each element in the container. template void ForEach(const Container& c, Functor functor) { std::for_each(c.begin(), c.end(), functor); } // Returns the i-th element of the vector, or default_value if i is not // in range [0, v.size()). template inline E GetElementOr(const std::vector& v, int i, E default_value) { return (i < 0 || i >= static_cast(v.size())) ? default_value : v[i]; } // Performs an in-place shuffle of a range of the vector's elements. // 'begin' and 'end' are element indices as an STL-style range; // i.e. [begin, end) are shuffled, where 'end' == size() means to // shuffle to the end of the vector. template void ShuffleRange(internal::Random* random, int begin, int end, std::vector* v) { const int size = static_cast(v->size()); GTEST_CHECK_(0 <= begin && begin <= size) << "Invalid shuffle range start " << begin << ": must be in range [0, " << size << "]."; GTEST_CHECK_(begin <= end && end <= size) << "Invalid shuffle range finish " << end << ": must be in range [" << begin << ", " << size << "]."; // Fisher-Yates shuffle, from // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle for (int range_width = end - begin; range_width >= 2; range_width--) { const int last_in_range = begin + range_width - 1; const int selected = begin + random->Generate(range_width); std::swap((*v)[selected], (*v)[last_in_range]); } } // Performs an in-place shuffle of the vector's elements. template inline void Shuffle(internal::Random* random, std::vector* v) { ShuffleRange(random, 0, static_cast(v->size()), v); } // A function for deleting an object. Handy for being used as a // functor. template static void Delete(T* x) { delete x; } // A predicate that checks the key of a TestProperty against a known key. // // TestPropertyKeyIs is copyable. class TestPropertyKeyIs { public: // Constructor. // // TestPropertyKeyIs has NO default constructor. explicit TestPropertyKeyIs(const std::string& key) : key_(key) {} // Returns true iff the test name of test property matches on key_. bool operator()(const TestProperty& test_property) const { return test_property.key() == key_; } private: std::string key_; }; // Class UnitTestOptions. // // This class contains functions for processing options the user // specifies when running the tests. It has only static members. // // In most cases, the user can specify an option using either an // environment variable or a command line flag. E.g. you can set the // test filter using either GTEST_FILTER or --gtest_filter. If both // the variable and the flag are present, the latter overrides the // former. class GTEST_API_ UnitTestOptions { public: // Functions for processing the gtest_output flag. // Returns the output format, or "" for normal printed output. static std::string GetOutputFormat(); // Returns the absolute path of the requested output file, or the // default (test_detail.xml in the original working directory) if // none was explicitly specified. static std::string GetAbsolutePathToOutputFile(); // Functions for processing the gtest_filter flag. // Returns true iff the wildcard pattern matches the string. The // first ':' or '\0' character in pattern marks the end of it. // // This recursive algorithm isn't very efficient, but is clear and // works well enough for matching test names, which are short. static bool PatternMatchesString(const char *pattern, const char *str); // Returns true iff the user-specified filter matches the test case // name and the test name. static bool FilterMatchesTest(const std::string &test_case_name, const std::string &test_name); #if GTEST_OS_WINDOWS // Function for supporting the gtest_catch_exception flag. // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. // This function is useful as an __except condition. static int GTestShouldProcessSEH(DWORD exception_code); #endif // GTEST_OS_WINDOWS // Returns true if "name" matches the ':' separated list of glob-style // filters in "filter". static bool MatchesFilter(const std::string& name, const char* filter); }; // Returns the current application's name, removing directory path if that // is present. Used by UnitTestOptions::GetOutputFile. GTEST_API_ FilePath GetCurrentExecutableName(); // The role interface for getting the OS stack trace as a string. class OsStackTraceGetterInterface { public: OsStackTraceGetterInterface() {} virtual ~OsStackTraceGetterInterface() {} // Returns the current OS stack trace as an std::string. Parameters: // // max_depth - the maximum number of stack frames to be included // in the trace. // skip_count - the number of top frames to be skipped; doesn't count // against max_depth. virtual string CurrentStackTrace(int max_depth, int skip_count) = 0; // UponLeavingGTest() should be called immediately before Google Test calls // user code. It saves some information about the current stack that // CurrentStackTrace() will use to find and hide Google Test stack frames. virtual void UponLeavingGTest() = 0; private: GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface); }; // A working implementation of the OsStackTraceGetterInterface interface. class OsStackTraceGetter : public OsStackTraceGetterInterface { public: OsStackTraceGetter() : caller_frame_(NULL) {} virtual string CurrentStackTrace(int max_depth, int skip_count) GTEST_LOCK_EXCLUDED_(mutex_); virtual void UponLeavingGTest() GTEST_LOCK_EXCLUDED_(mutex_); // This string is inserted in place of stack frames that are part of // Google Test's implementation. static const char* const kElidedFramesMarker; private: Mutex mutex_; // protects all internal state // We save the stack frame below the frame that calls user code. // We do this because the address of the frame immediately below // the user code changes between the call to UponLeavingGTest() // and any calls to CurrentStackTrace() from within the user code. void* caller_frame_; GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter); }; // Information about a Google Test trace point. struct TraceInfo { const char* file; int line; std::string message; }; // This is the default global test part result reporter used in UnitTestImpl. // This class should only be used by UnitTestImpl. class DefaultGlobalTestPartResultReporter : public TestPartResultReporterInterface { public: explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test); // Implements the TestPartResultReporterInterface. Reports the test part // result in the current test. virtual void ReportTestPartResult(const TestPartResult& result); private: UnitTestImpl* const unit_test_; GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter); }; // This is the default per thread test part result reporter used in // UnitTestImpl. This class should only be used by UnitTestImpl. class DefaultPerThreadTestPartResultReporter : public TestPartResultReporterInterface { public: explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test); // Implements the TestPartResultReporterInterface. The implementation just // delegates to the current global test part result reporter of *unit_test_. virtual void ReportTestPartResult(const TestPartResult& result); private: UnitTestImpl* const unit_test_; GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter); }; // The private implementation of the UnitTest class. We don't protect // the methods under a mutex, as this class is not accessible by a // user and the UnitTest class that delegates work to this class does // proper locking. class GTEST_API_ UnitTestImpl { public: explicit UnitTestImpl(UnitTest* parent); virtual ~UnitTestImpl(); // There are two different ways to register your own TestPartResultReporter. // You can register your own repoter to listen either only for test results // from the current thread or for results from all threads. // By default, each per-thread test result repoter just passes a new // TestPartResult to the global test result reporter, which registers the // test part result for the currently running test. // Returns the global test part result reporter. TestPartResultReporterInterface* GetGlobalTestPartResultReporter(); // Sets the global test part result reporter. void SetGlobalTestPartResultReporter( TestPartResultReporterInterface* reporter); // Returns the test part result reporter for the current thread. TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread(); // Sets the test part result reporter for the current thread. void SetTestPartResultReporterForCurrentThread( TestPartResultReporterInterface* reporter); // Gets the number of successful test cases. int successful_test_case_count() const; // Gets the number of failed test cases. int failed_test_case_count() const; // Gets the number of all test cases. int total_test_case_count() const; // Gets the number of all test cases that contain at least one test // that should run. int test_case_to_run_count() const; // Gets the number of successful tests. int successful_test_count() const; // Gets the number of failed tests. int failed_test_count() const; // Gets the number of disabled tests that will be reported in the XML report. int reportable_disabled_test_count() const; // Gets the number of disabled tests. int disabled_test_count() const; // Gets the number of tests to be printed in the XML report. int reportable_test_count() const; // Gets the number of all tests. int total_test_count() const; // Gets the number of tests that should run. int test_to_run_count() const; // Gets the time of the test program start, in ms from the start of the // UNIX epoch. TimeInMillis start_timestamp() const { return start_timestamp_; } // Gets the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } // Returns true iff the unit test passed (i.e. all test cases passed). bool Passed() const { return !Failed(); } // Returns true iff the unit test failed (i.e. some test case failed // or something outside of all tests failed). bool Failed() const { return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed(); } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. const TestCase* GetTestCase(int i) const { const int index = GetElementOr(test_case_indices_, i, -1); return index < 0 ? NULL : test_cases_[i]; } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. TestCase* GetMutableTestCase(int i) { const int index = GetElementOr(test_case_indices_, i, -1); return index < 0 ? NULL : test_cases_[index]; } // Provides access to the event listener list. TestEventListeners* listeners() { return &listeners_; } // Returns the TestResult for the test that's currently running, or // the TestResult for the ad hoc test if no test is running. TestResult* current_test_result(); // Returns the TestResult for the ad hoc test. const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; } // Sets the OS stack trace getter. // // Does nothing if the input and the current OS stack trace getter // are the same; otherwise, deletes the old getter and makes the // input the current getter. void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter); // Returns the current OS stack trace getter if it is not NULL; // otherwise, creates an OsStackTraceGetter, makes it the current // getter, and returns it. OsStackTraceGetterInterface* os_stack_trace_getter(); // Returns the current OS stack trace as an std::string. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // CurrentOsStackTraceExceptTop(1), Foo() will be included in the // trace but Bar() and CurrentOsStackTraceExceptTop() won't. std::string CurrentOsStackTraceExceptTop(int skip_count) GTEST_NO_INLINE_; // Finds and returns a TestCase with the given name. If one doesn't // exist, creates one and returns it. // // Arguments: // // test_case_name: name of the test case // type_param: the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase* GetTestCase(const char* test_case_name, const char* type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc); // Adds a TestInfo to the unit test. // // Arguments: // // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case // test_info: the TestInfo object void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc, TestInfo* test_info) { // In order to support thread-safe death tests, we need to // remember the original working directory when the test program // was first invoked. We cannot do this in RUN_ALL_TESTS(), as // the user may have changed the current directory before calling // RUN_ALL_TESTS(). Therefore we capture the current directory in // AddTestInfo(), which is called to register a TEST or TEST_F // before main() is reached. if (original_working_dir_.IsEmpty()) { original_working_dir_.Set(FilePath::GetCurrentDir()); GTEST_CHECK_(!original_working_dir_.IsEmpty()) << "Failed to get the current working directory."; } GetTestCase(test_info->test_case_name(), test_info->type_param(), set_up_tc, tear_down_tc)->AddTestInfo(test_info); } #if GTEST_HAS_PARAM_TEST // Returns ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. internal::ParameterizedTestCaseRegistry& parameterized_test_registry() { return parameterized_test_registry_; } #endif // GTEST_HAS_PARAM_TEST // Sets the TestCase object for the test that's currently running. void set_current_test_case(TestCase* a_current_test_case) { current_test_case_ = a_current_test_case; } // Sets the TestInfo object for the test that's currently running. If // current_test_info is NULL, the assertion results will be stored in // ad_hoc_test_result_. void set_current_test_info(TestInfo* a_current_test_info) { current_test_info_ = a_current_test_info; } // Registers all parameterized tests defined using TEST_P and // INSTANTIATE_TEST_CASE_P, creating regular tests for each test/parameter // combination. This method can be called more then once; it has guards // protecting from registering the tests more then once. If // value-parameterized tests are disabled, RegisterParameterizedTests is // present but does nothing. void RegisterParameterizedTests(); // Runs all tests in this UnitTest object, prints the result, and // returns true if all tests are successful. If any exception is // thrown during a test, this test is considered to be failed, but // the rest of the tests will still be run. bool RunAllTests(); // Clears the results of all tests, except the ad hoc tests. void ClearNonAdHocTestResult() { ForEach(test_cases_, TestCase::ClearTestCaseResult); } // Clears the results of ad-hoc test assertions. void ClearAdHocTestResult() { ad_hoc_test_result_.Clear(); } // Adds a TestProperty to the current TestResult object when invoked in a // context of a test or a test case, or to the global property set. If the // result already contains a property with the same key, the value will be // updated. void RecordProperty(const TestProperty& test_property); enum ReactionToSharding { HONOR_SHARDING_PROTOCOL, IGNORE_SHARDING_PROTOCOL }; // Matches the full name of each test against the user-specified // filter to decide whether the test should run, then records the // result in each TestCase and TestInfo object. // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests // based on sharding variables in the environment. // Returns the number of tests that should run. int FilterTests(ReactionToSharding shard_tests); // Prints the names of the tests matching the user-specified filter flag. void ListTestsMatchingFilter(); const TestCase* current_test_case() const { return current_test_case_; } TestInfo* current_test_info() { return current_test_info_; } const TestInfo* current_test_info() const { return current_test_info_; } // Returns the vector of environments that need to be set-up/torn-down // before/after the tests are run. std::vector& environments() { return environments_; } // Getters for the per-thread Google Test trace stack. std::vector& gtest_trace_stack() { return *(gtest_trace_stack_.pointer()); } const std::vector& gtest_trace_stack() const { return gtest_trace_stack_.get(); } #if GTEST_HAS_DEATH_TEST void InitDeathTestSubprocessControlInfo() { internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag()); } // Returns a pointer to the parsed --gtest_internal_run_death_test // flag, or NULL if that flag was not specified. // This information is useful only in a death test child process. // Must not be called before a call to InitGoogleTest. const InternalRunDeathTestFlag* internal_run_death_test_flag() const { return internal_run_death_test_flag_.get(); } // Returns a pointer to the current death test factory. internal::DeathTestFactory* death_test_factory() { return death_test_factory_.get(); } void SuppressTestEventsIfInSubprocess(); friend class ReplaceDeathTestFactory; #endif // GTEST_HAS_DEATH_TEST // Initializes the event listener performing XML output as specified by // UnitTestOptions. Must not be called before InitGoogleTest. void ConfigureXmlOutput(); #if GTEST_CAN_STREAM_RESULTS_ // Initializes the event listener for streaming test results to a socket. // Must not be called before InitGoogleTest. void ConfigureStreamingOutput(); #endif // Performs initialization dependent upon flag values obtained in // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest // this function is also called from RunAllTests. Since this function can be // called more than once, it has to be idempotent. void PostFlagParsingInit(); // Gets the random seed used at the start of the current test iteration. int random_seed() const { return random_seed_; } // Gets the random number generator. internal::Random* random() { return &random_; } // Shuffles all test cases, and the tests within each test case, // making sure that death tests are still run first. void ShuffleTests(); // Restores the test cases and tests to their order before the first shuffle. void UnshuffleTests(); // Returns the value of GTEST_FLAG(catch_exceptions) at the moment // UnitTest::Run() starts. bool catch_exceptions() const { return catch_exceptions_; } private: friend class ::testing::UnitTest; // Used by UnitTest::Run() to capture the state of // GTEST_FLAG(catch_exceptions) at the moment it starts. void set_catch_exceptions(bool value) { catch_exceptions_ = value; } // The UnitTest object that owns this implementation object. UnitTest* const parent_; // The working directory when the first TEST() or TEST_F() was // executed. internal::FilePath original_working_dir_; // The default test part result reporters. DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_; DefaultPerThreadTestPartResultReporter default_per_thread_test_part_result_reporter_; // Points to (but doesn't own) the global test part result reporter. TestPartResultReporterInterface* global_test_part_result_repoter_; // Protects read and write access to global_test_part_result_reporter_. internal::Mutex global_test_part_result_reporter_mutex_; // Points to (but doesn't own) the per-thread test part result reporter. internal::ThreadLocal per_thread_test_part_result_reporter_; // The vector of environments that need to be set-up/torn-down // before/after the tests are run. std::vector environments_; // The vector of TestCases in their original order. It owns the // elements in the vector. std::vector test_cases_; // Provides a level of indirection for the test case list to allow // easy shuffling and restoring the test case order. The i-th // element of this vector is the index of the i-th test case in the // shuffled order. std::vector test_case_indices_; #if GTEST_HAS_PARAM_TEST // ParameterizedTestRegistry object used to register value-parameterized // tests. internal::ParameterizedTestCaseRegistry parameterized_test_registry_; // Indicates whether RegisterParameterizedTests() has been called already. bool parameterized_tests_registered_; #endif // GTEST_HAS_PARAM_TEST // Index of the last death test case registered. Initially -1. int last_death_test_case_; // This points to the TestCase for the currently running test. It // changes as Google Test goes through one test case after another. // When no test is running, this is set to NULL and Google Test // stores assertion results in ad_hoc_test_result_. Initially NULL. TestCase* current_test_case_; // This points to the TestInfo for the currently running test. It // changes as Google Test goes through one test after another. When // no test is running, this is set to NULL and Google Test stores // assertion results in ad_hoc_test_result_. Initially NULL. TestInfo* current_test_info_; // Normally, a user only writes assertions inside a TEST or TEST_F, // or inside a function called by a TEST or TEST_F. Since Google // Test keeps track of which test is current running, it can // associate such an assertion with the test it belongs to. // // If an assertion is encountered when no TEST or TEST_F is running, // Google Test attributes the assertion result to an imaginary "ad hoc" // test, and records the result in ad_hoc_test_result_. TestResult ad_hoc_test_result_; // The list of event listeners that can be used to track events inside // Google Test. TestEventListeners listeners_; // The OS stack trace getter. Will be deleted when the UnitTest // object is destructed. By default, an OsStackTraceGetter is used, // but the user can set this field to use a custom getter if that is // desired. OsStackTraceGetterInterface* os_stack_trace_getter_; // True iff PostFlagParsingInit() has been called. bool post_flag_parse_init_performed_; // The random number seed used at the beginning of the test run. int random_seed_; // Our random number generator. internal::Random random_; // The time of the test program start, in ms from the start of the // UNIX epoch. TimeInMillis start_timestamp_; // How long the test took to run, in milliseconds. TimeInMillis elapsed_time_; #if GTEST_HAS_DEATH_TEST // The decomposed components of the gtest_internal_run_death_test flag, // parsed when RUN_ALL_TESTS is called. internal::scoped_ptr internal_run_death_test_flag_; internal::scoped_ptr death_test_factory_; #endif // GTEST_HAS_DEATH_TEST // A per-thread stack of traces created by the SCOPED_TRACE() macro. internal::ThreadLocal > gtest_trace_stack_; // The value of GTEST_FLAG(catch_exceptions) at the moment RunAllTests() // starts. bool catch_exceptions_; GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl); }; // class UnitTestImpl // Convenience function for accessing the global UnitTest // implementation object. inline UnitTestImpl* GetUnitTestImpl() { return UnitTest::GetInstance()->impl(); } #if GTEST_USES_SIMPLE_RE // Internal helper functions for implementing the simple regular // expression matcher. GTEST_API_ bool IsInSet(char ch, const char* str); GTEST_API_ bool IsAsciiDigit(char ch); GTEST_API_ bool IsAsciiPunct(char ch); GTEST_API_ bool IsRepeat(char ch); GTEST_API_ bool IsAsciiWhiteSpace(char ch); GTEST_API_ bool IsAsciiWordChar(char ch); GTEST_API_ bool IsValidEscape(char ch); GTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch); GTEST_API_ bool ValidateRegex(const char* regex); GTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str); GTEST_API_ bool MatchRepetitionAndRegexAtHead( bool escaped, char ch, char repeat, const char* regex, const char* str); GTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str); #endif // GTEST_USES_SIMPLE_RE // Parses the command line for Google Test flags, without initializing // other parts of Google Test. GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, char** argv); GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv); #if GTEST_HAS_DEATH_TEST // Returns the message describing the last system error, regardless of the // platform. GTEST_API_ std::string GetLastErrnoDescription(); # if GTEST_OS_WINDOWS // Provides leak-safe Windows kernel handle ownership. class AutoHandle { public: AutoHandle() : handle_(INVALID_HANDLE_VALUE) {} explicit AutoHandle(HANDLE handle) : handle_(handle) {} ~AutoHandle() { Reset(); } HANDLE Get() const { return handle_; } void Reset() { Reset(INVALID_HANDLE_VALUE); } void Reset(HANDLE handle) { if (handle != handle_) { if (handle_ != INVALID_HANDLE_VALUE) ::CloseHandle(handle_); handle_ = handle; } } private: HANDLE handle_; GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle); }; # endif // GTEST_OS_WINDOWS // Attempts to parse a string into a positive integer pointed to by the // number parameter. Returns true if that is possible. // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use // it here. template bool ParseNaturalNumber(const ::std::string& str, Integer* number) { // Fail fast if the given string does not begin with a digit; // this bypasses strtoXXX's "optional leading whitespace and plus // or minus sign" semantics, which are undesirable here. if (str.empty() || !IsDigit(str[0])) { return false; } errno = 0; char* end; // BiggestConvertible is the largest integer type that system-provided // string-to-number conversion routines can return. # if GTEST_OS_WINDOWS && !defined(__GNUC__) // MSVC and C++ Builder define __int64 instead of the standard long long. typedef unsigned __int64 BiggestConvertible; const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10); # else typedef unsigned long long BiggestConvertible; // NOLINT const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); # endif // GTEST_OS_WINDOWS && !defined(__GNUC__) const bool parse_success = *end == '\0' && errno == 0; // TODO(vladl@google.com): Convert this to compile time assertion when it is // available. GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed)); const Integer result = static_cast(parsed); if (parse_success && static_cast(result) == parsed) { *number = result; return true; } return false; } #endif // GTEST_HAS_DEATH_TEST // TestResult contains some private methods that should be hidden from // Google Test user but are required for testing. This class allow our tests // to access them. // // This class is supplied only for the purpose of testing Google Test's own // constructs. Do not use it in user tests, either directly or indirectly. class TestResultAccessor { public: static void RecordProperty(TestResult* test_result, const std::string& xml_element, const TestProperty& property) { test_result->RecordProperty(xml_element, property); } static void ClearTestPartResults(TestResult* test_result) { test_result->ClearTestPartResults(); } static const std::vector& test_part_results( const TestResult& test_result) { return test_result.test_part_results(); } }; #if GTEST_CAN_STREAM_RESULTS_ // Streams test results to the given port on the given host machine. class StreamingListener : public EmptyTestEventListener { public: // Abstract base class for writing strings to a socket. class AbstractSocketWriter { public: virtual ~AbstractSocketWriter() {} // Sends a string to the socket. virtual void Send(const string& message) = 0; // Closes the socket. virtual void CloseConnection() {} // Sends a string and a newline to the socket. void SendLn(const string& message) { Send(message + "\n"); } }; // Concrete class for actually writing strings to a socket. class SocketWriter : public AbstractSocketWriter { public: SocketWriter(const string& host, const string& port) : sockfd_(-1), host_name_(host), port_num_(port) { MakeConnection(); } virtual ~SocketWriter() { if (sockfd_ != -1) CloseConnection(); } // Sends a string to the socket. virtual void Send(const string& message) { GTEST_CHECK_(sockfd_ != -1) << "Send() can be called only when there is a connection."; const int len = static_cast(message.length()); if (write(sockfd_, message.c_str(), len) != len) { GTEST_LOG_(WARNING) << "stream_result_to: failed to stream to " << host_name_ << ":" << port_num_; } } private: // Creates a client socket and connects to the server. void MakeConnection(); // Closes the socket. void CloseConnection() { GTEST_CHECK_(sockfd_ != -1) << "CloseConnection() can be called only when there is a connection."; close(sockfd_); sockfd_ = -1; } int sockfd_; // socket file descriptor const string host_name_; const string port_num_; GTEST_DISALLOW_COPY_AND_ASSIGN_(SocketWriter); }; // class SocketWriter // Escapes '=', '&', '%', and '\n' characters in str as "%xx". static string UrlEncode(const char* str); StreamingListener(const string& host, const string& port) : socket_writer_(new SocketWriter(host, port)) { Start(); } explicit StreamingListener(AbstractSocketWriter* socket_writer) : socket_writer_(socket_writer) { Start(); } void OnTestProgramStart(const UnitTest& /* unit_test */) { SendLn("event=TestProgramStart"); } void OnTestProgramEnd(const UnitTest& unit_test) { // Note that Google Test current only report elapsed time for each // test iteration, not for the entire test program. SendLn("event=TestProgramEnd&passed=" + FormatBool(unit_test.Passed())); // Notify the streaming server to stop. socket_writer_->CloseConnection(); } void OnTestIterationStart(const UnitTest& /* unit_test */, int iteration) { SendLn("event=TestIterationStart&iteration=" + StreamableToString(iteration)); } void OnTestIterationEnd(const UnitTest& unit_test, int /* iteration */) { SendLn("event=TestIterationEnd&passed=" + FormatBool(unit_test.Passed()) + "&elapsed_time=" + StreamableToString(unit_test.elapsed_time()) + "ms"); } void OnTestCaseStart(const TestCase& test_case) { SendLn(std::string("event=TestCaseStart&name=") + test_case.name()); } void OnTestCaseEnd(const TestCase& test_case) { SendLn("event=TestCaseEnd&passed=" + FormatBool(test_case.Passed()) + "&elapsed_time=" + StreamableToString(test_case.elapsed_time()) + "ms"); } void OnTestStart(const TestInfo& test_info) { SendLn(std::string("event=TestStart&name=") + test_info.name()); } void OnTestEnd(const TestInfo& test_info) { SendLn("event=TestEnd&passed=" + FormatBool((test_info.result())->Passed()) + "&elapsed_time=" + StreamableToString((test_info.result())->elapsed_time()) + "ms"); } void OnTestPartResult(const TestPartResult& test_part_result) { const char* file_name = test_part_result.file_name(); if (file_name == NULL) file_name = ""; SendLn("event=TestPartResult&file=" + UrlEncode(file_name) + "&line=" + StreamableToString(test_part_result.line_number()) + "&message=" + UrlEncode(test_part_result.message())); } private: // Sends the given message and a newline to the socket. void SendLn(const string& message) { socket_writer_->SendLn(message); } // Called at the start of streaming to notify the receiver what // protocol we are using. void Start() { SendLn("gtest_streaming_protocol_version=1.0"); } string FormatBool(bool value) { return value ? "1" : "0"; } const scoped_ptr socket_writer_; GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamingListener); }; // class StreamingListener #endif // GTEST_CAN_STREAM_RESULTS_ } // namespace internal } // namespace testing #endif // GTEST_SRC_GTEST_INTERNAL_INL_H_ dlt-daemon-2.18.6/gtest-1.7.0/src/gtest-port.cc000066400000000000000000000655121377520261000206450ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #include "gtest/internal/gtest-port.h" #include #include #include #include #if GTEST_OS_WINDOWS_MOBILE # include // For TerminateProcess() #elif GTEST_OS_WINDOWS # include # include #else # include #endif // GTEST_OS_WINDOWS_MOBILE #if GTEST_OS_MAC # include # include # include #endif // GTEST_OS_MAC #if GTEST_OS_QNX # include # include #endif // GTEST_OS_QNX #include "gtest/gtest-spi.h" #include "gtest/gtest-message.h" #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-string.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ namespace testing { namespace internal { #if defined(_MSC_VER) || defined(__BORLANDC__) // MSVC and C++Builder do not provide a definition of STDERR_FILENO. const int kStdOutFileno = 1; const int kStdErrFileno = 2; #else const int kStdOutFileno = STDOUT_FILENO; const int kStdErrFileno = STDERR_FILENO; #endif // _MSC_VER #if GTEST_OS_MAC // Returns the number of threads running in the process, or 0 to indicate that // we cannot detect it. size_t GetThreadCount() { const task_t task = mach_task_self(); mach_msg_type_number_t thread_count; thread_act_array_t thread_list; const kern_return_t status = task_threads(task, &thread_list, &thread_count); if (status == KERN_SUCCESS) { // task_threads allocates resources in thread_list and we need to free them // to avoid leaks. vm_deallocate(task, reinterpret_cast(thread_list), sizeof(thread_t) * thread_count); return static_cast(thread_count); } else { return 0; } } #elif GTEST_OS_QNX // Returns the number of threads running in the process, or 0 to indicate that // we cannot detect it. size_t GetThreadCount() { const int fd = open("/proc/self/as", O_RDONLY); if (fd < 0) { return 0; } procfs_info process_info; const int status = devctl(fd, DCMD_PROC_INFO, &process_info, sizeof(process_info), NULL); close(fd); if (status == EOK) { return static_cast(process_info.num_threads); } else { return 0; } } #else size_t GetThreadCount() { // There's no portable way to detect the number of threads, so we just // return 0 to indicate that we cannot detect it. return 0; } #endif // GTEST_OS_MAC #if GTEST_USES_POSIX_RE // Implements RE. Currently only needed for death tests. RE::~RE() { if (is_valid_) { // regfree'ing an invalid regex might crash because the content // of the regex is undefined. Since the regex's are essentially // the same, one cannot be valid (or invalid) without the other // being so too. regfree(&partial_regex_); regfree(&full_regex_); } free(const_cast(pattern_)); } // Returns true iff regular expression re matches the entire str. bool RE::FullMatch(const char* str, const RE& re) { if (!re.is_valid_) return false; regmatch_t match; return regexec(&re.full_regex_, str, 1, &match, 0) == 0; } // Returns true iff regular expression re matches a substring of str // (including str itself). bool RE::PartialMatch(const char* str, const RE& re) { if (!re.is_valid_) return false; regmatch_t match; return regexec(&re.partial_regex_, str, 1, &match, 0) == 0; } // Initializes an RE from its string representation. void RE::Init(const char* regex) { pattern_ = posix::StrDup(regex); // Reserves enough bytes to hold the regular expression used for a // full match. const size_t full_regex_len = strlen(regex) + 10; char* const full_pattern = new char[full_regex_len]; snprintf(full_pattern, full_regex_len, "^(%s)$", regex); is_valid_ = regcomp(&full_regex_, full_pattern, REG_EXTENDED) == 0; // We want to call regcomp(&partial_regex_, ...) even if the // previous expression returns false. Otherwise partial_regex_ may // not be properly initialized can may cause trouble when it's // freed. // // Some implementation of POSIX regex (e.g. on at least some // versions of Cygwin) doesn't accept the empty string as a valid // regex. We change it to an equivalent form "()" to be safe. if (is_valid_) { const char* const partial_regex = (*regex == '\0') ? "()" : regex; is_valid_ = regcomp(&partial_regex_, partial_regex, REG_EXTENDED) == 0; } EXPECT_TRUE(is_valid_) << "Regular expression \"" << regex << "\" is not a valid POSIX Extended regular expression."; delete[] full_pattern; } #elif GTEST_USES_SIMPLE_RE // Returns true iff ch appears anywhere in str (excluding the // terminating '\0' character). bool IsInSet(char ch, const char* str) { return ch != '\0' && strchr(str, ch) != NULL; } // Returns true iff ch belongs to the given classification. Unlike // similar functions in , these aren't affected by the // current locale. bool IsAsciiDigit(char ch) { return '0' <= ch && ch <= '9'; } bool IsAsciiPunct(char ch) { return IsInSet(ch, "^-!\"#$%&'()*+,./:;<=>?@[\\]_`{|}~"); } bool IsRepeat(char ch) { return IsInSet(ch, "?*+"); } bool IsAsciiWhiteSpace(char ch) { return IsInSet(ch, " \f\n\r\t\v"); } bool IsAsciiWordChar(char ch) { return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || ('0' <= ch && ch <= '9') || ch == '_'; } // Returns true iff "\\c" is a supported escape sequence. bool IsValidEscape(char c) { return (IsAsciiPunct(c) || IsInSet(c, "dDfnrsStvwW")); } // Returns true iff the given atom (specified by escaped and pattern) // matches ch. The result is undefined if the atom is invalid. bool AtomMatchesChar(bool escaped, char pattern_char, char ch) { if (escaped) { // "\\p" where p is pattern_char. switch (pattern_char) { case 'd': return IsAsciiDigit(ch); case 'D': return !IsAsciiDigit(ch); case 'f': return ch == '\f'; case 'n': return ch == '\n'; case 'r': return ch == '\r'; case 's': return IsAsciiWhiteSpace(ch); case 'S': return !IsAsciiWhiteSpace(ch); case 't': return ch == '\t'; case 'v': return ch == '\v'; case 'w': return IsAsciiWordChar(ch); case 'W': return !IsAsciiWordChar(ch); } return IsAsciiPunct(pattern_char) && pattern_char == ch; } return (pattern_char == '.' && ch != '\n') || pattern_char == ch; } // Helper function used by ValidateRegex() to format error messages. std::string FormatRegexSyntaxError(const char* regex, int index) { return (Message() << "Syntax error at index " << index << " in simple regular expression \"" << regex << "\": ").GetString(); } // Generates non-fatal failures and returns false if regex is invalid; // otherwise returns true. bool ValidateRegex(const char* regex) { if (regex == NULL) { // TODO(wan@google.com): fix the source file location in the // assertion failures to match where the regex is used in user // code. ADD_FAILURE() << "NULL is not a valid simple regular expression."; return false; } bool is_valid = true; // True iff ?, *, or + can follow the previous atom. bool prev_repeatable = false; for (int i = 0; regex[i]; i++) { if (regex[i] == '\\') { // An escape sequence i++; if (regex[i] == '\0') { ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) << "'\\' cannot appear at the end."; return false; } if (!IsValidEscape(regex[i])) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) << "invalid escape sequence \"\\" << regex[i] << "\"."; is_valid = false; } prev_repeatable = true; } else { // Not an escape sequence. const char ch = regex[i]; if (ch == '^' && i > 0) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'^' can only appear at the beginning."; is_valid = false; } else if (ch == '$' && regex[i + 1] != '\0') { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'$' can only appear at the end."; is_valid = false; } else if (IsInSet(ch, "()[]{}|")) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'" << ch << "' is unsupported."; is_valid = false; } else if (IsRepeat(ch) && !prev_repeatable) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'" << ch << "' can only follow a repeatable token."; is_valid = false; } prev_repeatable = !IsInSet(ch, "^$?*+"); } } return is_valid; } // Matches a repeated regex atom followed by a valid simple regular // expression. The regex atom is defined as c if escaped is false, // or \c otherwise. repeat is the repetition meta character (?, *, // or +). The behavior is undefined if str contains too many // characters to be indexable by size_t, in which case the test will // probably time out anyway. We are fine with this limitation as // std::string has it too. bool MatchRepetitionAndRegexAtHead( bool escaped, char c, char repeat, const char* regex, const char* str) { const size_t min_count = (repeat == '+') ? 1 : 0; const size_t max_count = (repeat == '?') ? 1 : static_cast(-1) - 1; // We cannot call numeric_limits::max() as it conflicts with the // max() macro on Windows. for (size_t i = 0; i <= max_count; ++i) { // We know that the atom matches each of the first i characters in str. if (i >= min_count && MatchRegexAtHead(regex, str + i)) { // We have enough matches at the head, and the tail matches too. // Since we only care about *whether* the pattern matches str // (as opposed to *how* it matches), there is no need to find a // greedy match. return true; } if (str[i] == '\0' || !AtomMatchesChar(escaped, c, str[i])) return false; } return false; } // Returns true iff regex matches a prefix of str. regex must be a // valid simple regular expression and not start with "^", or the // result is undefined. bool MatchRegexAtHead(const char* regex, const char* str) { if (*regex == '\0') // An empty regex matches a prefix of anything. return true; // "$" only matches the end of a string. Note that regex being // valid guarantees that there's nothing after "$" in it. if (*regex == '$') return *str == '\0'; // Is the first thing in regex an escape sequence? const bool escaped = *regex == '\\'; if (escaped) ++regex; if (IsRepeat(regex[1])) { // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so // here's an indirect recursion. It terminates as the regex gets // shorter in each recursion. return MatchRepetitionAndRegexAtHead( escaped, regex[0], regex[1], regex + 2, str); } else { // regex isn't empty, isn't "$", and doesn't start with a // repetition. We match the first atom of regex with the first // character of str and recurse. return (*str != '\0') && AtomMatchesChar(escaped, *regex, *str) && MatchRegexAtHead(regex + 1, str + 1); } } // Returns true iff regex matches any substring of str. regex must be // a valid simple regular expression, or the result is undefined. // // The algorithm is recursive, but the recursion depth doesn't exceed // the regex length, so we won't need to worry about running out of // stack space normally. In rare cases the time complexity can be // exponential with respect to the regex length + the string length, // but usually it's must faster (often close to linear). bool MatchRegexAnywhere(const char* regex, const char* str) { if (regex == NULL || str == NULL) return false; if (*regex == '^') return MatchRegexAtHead(regex + 1, str); // A successful match can be anywhere in str. do { if (MatchRegexAtHead(regex, str)) return true; } while (*str++ != '\0'); return false; } // Implements the RE class. RE::~RE() { free(const_cast(pattern_)); free(const_cast(full_pattern_)); } // Returns true iff regular expression re matches the entire str. bool RE::FullMatch(const char* str, const RE& re) { return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str); } // Returns true iff regular expression re matches a substring of str // (including str itself). bool RE::PartialMatch(const char* str, const RE& re) { return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str); } // Initializes an RE from its string representation. void RE::Init(const char* regex) { pattern_ = full_pattern_ = NULL; if (regex != NULL) { pattern_ = posix::StrDup(regex); } is_valid_ = ValidateRegex(regex); if (!is_valid_) { // No need to calculate the full pattern when the regex is invalid. return; } const size_t len = strlen(regex); // Reserves enough bytes to hold the regular expression used for a // full match: we need space to prepend a '^', append a '$', and // terminate the string with '\0'. char* buffer = static_cast(malloc(len + 3)); full_pattern_ = buffer; if (*regex != '^') *buffer++ = '^'; // Makes sure full_pattern_ starts with '^'. // We don't use snprintf or strncpy, as they trigger a warning when // compiled with VC++ 8.0. memcpy(buffer, regex, len); buffer += len; if (len == 0 || regex[len - 1] != '$') *buffer++ = '$'; // Makes sure full_pattern_ ends with '$'. *buffer = '\0'; } #endif // GTEST_USES_POSIX_RE const char kUnknownFile[] = "unknown file"; // Formats a source file path and a line number as they would appear // in an error message from the compiler used to compile this code. GTEST_API_ ::std::string FormatFileLocation(const char* file, int line) { const std::string file_name(file == NULL ? kUnknownFile : file); if (line < 0) { return file_name + ":"; } #ifdef _MSC_VER return file_name + "(" + StreamableToString(line) + "):"; #else return file_name + ":" + StreamableToString(line) + ":"; #endif // _MSC_VER } // Formats a file location for compiler-independent XML output. // Although this function is not platform dependent, we put it next to // FormatFileLocation in order to contrast the two functions. // Note that FormatCompilerIndependentFileLocation() does NOT append colon // to the file location it produces, unlike FormatFileLocation(). GTEST_API_ ::std::string FormatCompilerIndependentFileLocation( const char* file, int line) { const std::string file_name(file == NULL ? kUnknownFile : file); if (line < 0) return file_name; else return file_name + ":" + StreamableToString(line); } GTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line) : severity_(severity) { const char* const marker = severity == GTEST_INFO ? "[ INFO ]" : severity == GTEST_WARNING ? "[WARNING]" : severity == GTEST_ERROR ? "[ ERROR ]" : "[ FATAL ]"; GetStream() << ::std::endl << marker << " " << FormatFileLocation(file, line).c_str() << ": "; } // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. GTestLog::~GTestLog() { GetStream() << ::std::endl; if (severity_ == GTEST_FATAL) { fflush(stderr); posix::Abort(); } } // Disable Microsoft deprecation warnings for POSIX functions called from // this class (creat, dup, dup2, and close) #ifdef _MSC_VER # pragma warning(push) # pragma warning(disable: 4996) #endif // _MSC_VER #if GTEST_HAS_STREAM_REDIRECTION // Object that captures an output stream (stdout/stderr). class CapturedStream { public: // The ctor redirects the stream to a temporary file. explicit CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) { # if GTEST_OS_WINDOWS char temp_dir_path[MAX_PATH + 1] = { '\0' }; // NOLINT char temp_file_path[MAX_PATH + 1] = { '\0' }; // NOLINT ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path); const UINT success = ::GetTempFileNameA(temp_dir_path, "gtest_redir", 0, // Generate unique file name. temp_file_path); GTEST_CHECK_(success != 0) << "Unable to create a temporary file in " << temp_dir_path; const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE); GTEST_CHECK_(captured_fd != -1) << "Unable to open temporary file " << temp_file_path; filename_ = temp_file_path; # else // There's no guarantee that a test has write access to the current // directory, so we create the temporary file in the /tmp directory // instead. We use /tmp on most systems, and /sdcard on Android. // That's because Android doesn't have /tmp. # if GTEST_OS_LINUX_ANDROID // Note: Android applications are expected to call the framework's // Context.getExternalStorageDirectory() method through JNI to get // the location of the world-writable SD Card directory. However, // this requires a Context handle, which cannot be retrieved // globally from native code. Doing so also precludes running the // code as part of a regular standalone executable, which doesn't // run in a Dalvik process (e.g. when running it through 'adb shell'). // // The location /sdcard is directly accessible from native code // and is the only location (unofficially) supported by the Android // team. It's generally a symlink to the real SD Card mount point // which can be /mnt/sdcard, /mnt/sdcard0, /system/media/sdcard, or // other OEM-customized locations. Never rely on these, and always // use /sdcard. char name_template[] = "/sdcard/gtest_captured_stream.XXXXXX"; # else char name_template[] = "/tmp/captured_stream.XXXXXX"; # endif // GTEST_OS_LINUX_ANDROID const int captured_fd = mkstemp(name_template); filename_ = name_template; # endif // GTEST_OS_WINDOWS fflush(NULL); dup2(captured_fd, fd_); close(captured_fd); } ~CapturedStream() { remove(filename_.c_str()); } std::string GetCapturedString() { if (uncaptured_fd_ != -1) { // Restores the original stream. fflush(NULL); dup2(uncaptured_fd_, fd_); close(uncaptured_fd_); uncaptured_fd_ = -1; } FILE* const file = posix::FOpen(filename_.c_str(), "r"); const std::string content = ReadEntireFile(file); posix::FClose(file); return content; } private: // Reads the entire content of a file as an std::string. static std::string ReadEntireFile(FILE* file); // Returns the size (in bytes) of a file. static size_t GetFileSize(FILE* file); const int fd_; // A stream to capture. int uncaptured_fd_; // Name of the temporary file holding the stderr output. ::std::string filename_; GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream); }; // Returns the size (in bytes) of a file. size_t CapturedStream::GetFileSize(FILE* file) { fseek(file, 0, SEEK_END); return static_cast(ftell(file)); } // Reads the entire content of a file as a string. std::string CapturedStream::ReadEntireFile(FILE* file) { const size_t file_size = GetFileSize(file); char* const buffer = new char[file_size]; size_t bytes_last_read = 0; // # of bytes read in the last fread() size_t bytes_read = 0; // # of bytes read so far fseek(file, 0, SEEK_SET); // Keeps reading the file until we cannot read further or the // pre-determined file size is reached. do { bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file); bytes_read += bytes_last_read; } while (bytes_last_read > 0 && bytes_read < file_size); const std::string content(buffer, bytes_read); delete[] buffer; return content; } # ifdef _MSC_VER # pragma warning(pop) # endif // _MSC_VER static CapturedStream* g_captured_stderr = NULL; static CapturedStream* g_captured_stdout = NULL; // Starts capturing an output stream (stdout/stderr). void CaptureStream(int fd, const char* stream_name, CapturedStream** stream) { if (*stream != NULL) { GTEST_LOG_(FATAL) << "Only one " << stream_name << " capturer can exist at a time."; } *stream = new CapturedStream(fd); } // Stops capturing the output stream and returns the captured string. std::string GetCapturedStream(CapturedStream** captured_stream) { const std::string content = (*captured_stream)->GetCapturedString(); delete *captured_stream; *captured_stream = NULL; return content; } // Starts capturing stdout. void CaptureStdout() { CaptureStream(kStdOutFileno, "stdout", &g_captured_stdout); } // Starts capturing stderr. void CaptureStderr() { CaptureStream(kStdErrFileno, "stderr", &g_captured_stderr); } // Stops capturing stdout and returns the captured string. std::string GetCapturedStdout() { return GetCapturedStream(&g_captured_stdout); } // Stops capturing stderr and returns the captured string. std::string GetCapturedStderr() { return GetCapturedStream(&g_captured_stderr); } #endif // GTEST_HAS_STREAM_REDIRECTION #if GTEST_HAS_DEATH_TEST // A copy of all command line arguments. Set by InitGoogleTest(). ::std::vector g_argvs; static const ::std::vector* g_injected_test_argvs = NULL; // Owned. void SetInjectableArgvs(const ::std::vector* argvs) { if (g_injected_test_argvs != argvs) delete g_injected_test_argvs; g_injected_test_argvs = argvs; } const ::std::vector& GetInjectableArgvs() { if (g_injected_test_argvs != NULL) { return *g_injected_test_argvs; } return g_argvs; } #endif // GTEST_HAS_DEATH_TEST #if GTEST_OS_WINDOWS_MOBILE namespace posix { void Abort() { DebugBreak(); TerminateProcess(GetCurrentProcess(), 1); } } // namespace posix #endif // GTEST_OS_WINDOWS_MOBILE // Returns the name of the environment variable corresponding to the // given flag. For example, FlagToEnvVar("foo") will return // "GTEST_FOO" in the open-source version. static std::string FlagToEnvVar(const char* flag) { const std::string full_flag = (Message() << GTEST_FLAG_PREFIX_ << flag).GetString(); Message env_var; for (size_t i = 0; i != full_flag.length(); i++) { env_var << ToUpper(full_flag.c_str()[i]); } return env_var.GetString(); } // Parses 'str' for a 32-bit signed integer. If successful, writes // the result to *value and returns true; otherwise leaves *value // unchanged and returns false. bool ParseInt32(const Message& src_text, const char* str, Int32* value) { // Parses the environment variable as a decimal integer. char* end = NULL; const long long_value = strtol(str, &end, 10); // NOLINT // Has strtol() consumed all characters in the string? if (*end != '\0') { // No - an invalid character was encountered. Message msg; msg << "WARNING: " << src_text << " is expected to be a 32-bit integer, but actually" << " has value \"" << str << "\".\n"; printf("%s", msg.GetString().c_str()); fflush(stdout); return false; } // Is the parsed value in the range of an Int32? const Int32 result = static_cast(long_value); if (long_value == LONG_MAX || long_value == LONG_MIN || // The parsed value overflows as a long. (strtol() returns // LONG_MAX or LONG_MIN when the input overflows.) result != long_value // The parsed value overflows as an Int32. ) { Message msg; msg << "WARNING: " << src_text << " is expected to be a 32-bit integer, but actually" << " has value " << str << ", which overflows.\n"; printf("%s", msg.GetString().c_str()); fflush(stdout); return false; } *value = result; return true; } // Reads and returns the Boolean environment variable corresponding to // the given flag; if it's not set, returns default_value. // // The value is considered true iff it's not "0". bool BoolFromGTestEnv(const char* flag, bool default_value) { const std::string env_var = FlagToEnvVar(flag); const char* const string_value = posix::GetEnv(env_var.c_str()); return string_value == NULL ? default_value : strcmp(string_value, "0") != 0; } // Reads and returns a 32-bit integer stored in the environment // variable corresponding to the given flag; if it isn't set or // doesn't represent a valid 32-bit integer, returns default_value. Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { const std::string env_var = FlagToEnvVar(flag); const char* const string_value = posix::GetEnv(env_var.c_str()); if (string_value == NULL) { // The environment variable is not set. return default_value; } Int32 result = default_value; if (!ParseInt32(Message() << "Environment variable " << env_var, string_value, &result)) { printf("The default value %s is used.\n", (Message() << default_value).GetString().c_str()); fflush(stdout); return default_value; } return result; } // Reads and returns the string environment variable corresponding to // the given flag; if it's not set, returns default_value. const char* StringFromGTestEnv(const char* flag, const char* default_value) { const std::string env_var = FlagToEnvVar(flag); const char* const value = posix::GetEnv(env_var.c_str()); return value == NULL ? default_value : value; } } // namespace internal } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/src/gtest-printers.cc000066400000000000000000000277631377520261000215350ustar00rootroot00000000000000// Copyright 2007, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Google Test - The Google C++ Testing Framework // // This file implements a universal value printer that can print a // value of any type T: // // void ::testing::internal::UniversalPrinter::Print(value, ostream_ptr); // // It uses the << operator when possible, and prints the bytes in the // object otherwise. A user can override its behavior for a class // type Foo by defining either operator<<(::std::ostream&, const Foo&) // or void PrintTo(const Foo&, ::std::ostream*) in the namespace that // defines Foo. #include "gtest/gtest-printers.h" #include #include #include // NOLINT #include #include "gtest/internal/gtest-port.h" namespace testing { namespace { using ::std::ostream; // Prints a segment of bytes in the given object. void PrintByteSegmentInObjectTo(const unsigned char* obj_bytes, size_t start, size_t count, ostream* os) { char text[5] = ""; for (size_t i = 0; i != count; i++) { const size_t j = start + i; if (i != 0) { // Organizes the bytes into groups of 2 for easy parsing by // human. if ((j % 2) == 0) *os << ' '; else *os << '-'; } GTEST_SNPRINTF_(text, sizeof(text), "%02X", obj_bytes[j]); *os << text; } } // Prints the bytes in the given value to the given ostream. void PrintBytesInObjectToImpl(const unsigned char* obj_bytes, size_t count, ostream* os) { // Tells the user how big the object is. *os << count << "-byte object <"; const size_t kThreshold = 132; const size_t kChunkSize = 64; // If the object size is bigger than kThreshold, we'll have to omit // some details by printing only the first and the last kChunkSize // bytes. // TODO(wan): let the user control the threshold using a flag. if (count < kThreshold) { PrintByteSegmentInObjectTo(obj_bytes, 0, count, os); } else { PrintByteSegmentInObjectTo(obj_bytes, 0, kChunkSize, os); *os << " ... "; // Rounds up to 2-byte boundary. const size_t resume_pos = (count - kChunkSize + 1)/2*2; PrintByteSegmentInObjectTo(obj_bytes, resume_pos, count - resume_pos, os); } *os << ">"; } } // namespace namespace internal2 { // Delegates to PrintBytesInObjectToImpl() to print the bytes in the // given object. The delegation simplifies the implementation, which // uses the << operator and thus is easier done outside of the // ::testing::internal namespace, which contains a << operator that // sometimes conflicts with the one in STL. void PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count, ostream* os) { PrintBytesInObjectToImpl(obj_bytes, count, os); } } // namespace internal2 namespace internal { // Depending on the value of a char (or wchar_t), we print it in one // of three formats: // - as is if it's a printable ASCII (e.g. 'a', '2', ' '), // - as a hexidecimal escape sequence (e.g. '\x7F'), or // - as a special escape sequence (e.g. '\r', '\n'). enum CharFormat { kAsIs, kHexEscape, kSpecialEscape }; // Returns true if c is a printable ASCII character. We test the // value of c directly instead of calling isprint(), which is buggy on // Windows Mobile. inline bool IsPrintableAscii(wchar_t c) { return 0x20 <= c && c <= 0x7E; } // Prints a wide or narrow char c as a character literal without the // quotes, escaping it when necessary; returns how c was formatted. // The template argument UnsignedChar is the unsigned version of Char, // which is the type of c. template static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { switch (static_cast(c)) { case L'\0': *os << "\\0"; break; case L'\'': *os << "\\'"; break; case L'\\': *os << "\\\\"; break; case L'\a': *os << "\\a"; break; case L'\b': *os << "\\b"; break; case L'\f': *os << "\\f"; break; case L'\n': *os << "\\n"; break; case L'\r': *os << "\\r"; break; case L'\t': *os << "\\t"; break; case L'\v': *os << "\\v"; break; default: if (IsPrintableAscii(c)) { *os << static_cast(c); return kAsIs; } else { *os << "\\x" + String::FormatHexInt(static_cast(c)); return kHexEscape; } } return kSpecialEscape; } // Prints a wchar_t c as if it's part of a string literal, escaping it when // necessary; returns how c was formatted. static CharFormat PrintAsStringLiteralTo(wchar_t c, ostream* os) { switch (c) { case L'\'': *os << "'"; return kAsIs; case L'"': *os << "\\\""; return kSpecialEscape; default: return PrintAsCharLiteralTo(c, os); } } // Prints a char c as if it's part of a string literal, escaping it when // necessary; returns how c was formatted. static CharFormat PrintAsStringLiteralTo(char c, ostream* os) { return PrintAsStringLiteralTo( static_cast(static_cast(c)), os); } // Prints a wide or narrow character c and its code. '\0' is printed // as "'\\0'", other unprintable characters are also properly escaped // using the standard C++ escape sequence. The template argument // UnsignedChar is the unsigned version of Char, which is the type of c. template void PrintCharAndCodeTo(Char c, ostream* os) { // First, print c as a literal in the most readable form we can find. *os << ((sizeof(c) > 1) ? "L'" : "'"); const CharFormat format = PrintAsCharLiteralTo(c, os); *os << "'"; // To aid user debugging, we also print c's code in decimal, unless // it's 0 (in which case c was printed as '\\0', making the code // obvious). if (c == 0) return; *os << " (" << static_cast(c); // For more convenience, we print c's code again in hexidecimal, // unless c was already printed in the form '\x##' or the code is in // [1, 9]. if (format == kHexEscape || (1 <= c && c <= 9)) { // Do nothing. } else { *os << ", 0x" << String::FormatHexInt(static_cast(c)); } *os << ")"; } void PrintTo(unsigned char c, ::std::ostream* os) { PrintCharAndCodeTo(c, os); } void PrintTo(signed char c, ::std::ostream* os) { PrintCharAndCodeTo(c, os); } // Prints a wchar_t as a symbol if it is printable or as its internal // code otherwise and also as its code. L'\0' is printed as "L'\\0'". void PrintTo(wchar_t wc, ostream* os) { PrintCharAndCodeTo(wc, os); } // Prints the given array of characters to the ostream. CharType must be either // char or wchar_t. // The array starts at begin, the length is len, it may include '\0' characters // and may not be NUL-terminated. template static void PrintCharsAsStringTo( const CharType* begin, size_t len, ostream* os) { const char* const kQuoteBegin = sizeof(CharType) == 1 ? "\"" : "L\""; *os << kQuoteBegin; bool is_previous_hex = false; for (size_t index = 0; index < len; ++index) { const CharType cur = begin[index]; if (is_previous_hex && IsXDigit(cur)) { // Previous character is of '\x..' form and this character can be // interpreted as another hexadecimal digit in its number. Break string to // disambiguate. *os << "\" " << kQuoteBegin; } is_previous_hex = PrintAsStringLiteralTo(cur, os) == kHexEscape; } *os << "\""; } // Prints a (const) char/wchar_t array of 'len' elements, starting at address // 'begin'. CharType must be either char or wchar_t. template static void UniversalPrintCharArray( const CharType* begin, size_t len, ostream* os) { // The code // const char kFoo[] = "foo"; // generates an array of 4, not 3, elements, with the last one being '\0'. // // Therefore when printing a char array, we don't print the last element if // it's '\0', such that the output matches the string literal as it's // written in the source code. if (len > 0 && begin[len - 1] == '\0') { PrintCharsAsStringTo(begin, len - 1, os); return; } // If, however, the last element in the array is not '\0', e.g. // const char kFoo[] = { 'f', 'o', 'o' }; // we must print the entire array. We also print a message to indicate // that the array is not NUL-terminated. PrintCharsAsStringTo(begin, len, os); *os << " (no terminating NUL)"; } // Prints a (const) char array of 'len' elements, starting at address 'begin'. void UniversalPrintArray(const char* begin, size_t len, ostream* os) { UniversalPrintCharArray(begin, len, os); } // Prints a (const) wchar_t array of 'len' elements, starting at address // 'begin'. void UniversalPrintArray(const wchar_t* begin, size_t len, ostream* os) { UniversalPrintCharArray(begin, len, os); } // Prints the given C string to the ostream. void PrintTo(const char* s, ostream* os) { if (s == NULL) { *os << "NULL"; } else { *os << ImplicitCast_(s) << " pointing to "; PrintCharsAsStringTo(s, strlen(s), os); } } // MSVC compiler can be configured to define whar_t as a typedef // of unsigned short. Defining an overload for const wchar_t* in that case // would cause pointers to unsigned shorts be printed as wide strings, // possibly accessing more memory than intended and causing invalid // memory accesses. MSVC defines _NATIVE_WCHAR_T_DEFINED symbol when // wchar_t is implemented as a native type. #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) // Prints the given wide C string to the ostream. void PrintTo(const wchar_t* s, ostream* os) { if (s == NULL) { *os << "NULL"; } else { *os << ImplicitCast_(s) << " pointing to "; PrintCharsAsStringTo(s, wcslen(s), os); } } #endif // wchar_t is native // Prints a ::string object. #if GTEST_HAS_GLOBAL_STRING void PrintStringTo(const ::string& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); } #endif // GTEST_HAS_GLOBAL_STRING void PrintStringTo(const ::std::string& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); } // Prints a ::wstring object. #if GTEST_HAS_GLOBAL_WSTRING void PrintWideStringTo(const ::wstring& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); } #endif // GTEST_HAS_GLOBAL_WSTRING #if GTEST_HAS_STD_WSTRING void PrintWideStringTo(const ::std::wstring& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); } #endif // GTEST_HAS_STD_WSTRING } // namespace internal } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/src/gtest-test-part.cc000066400000000000000000000100771377520261000216000ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: mheule@google.com (Markus Heule) // // The Google C++ Testing Framework (Google Test) #include "gtest/gtest-test-part.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ namespace testing { using internal::GetUnitTestImpl; // Gets the summary of the failure message by omitting the stack trace // in it. std::string TestPartResult::ExtractSummary(const char* message) { const char* const stack_trace = strstr(message, internal::kStackTraceMarker); return stack_trace == NULL ? message : std::string(message, stack_trace); } // Prints a TestPartResult object. std::ostream& operator<<(std::ostream& os, const TestPartResult& result) { return os << result.file_name() << ":" << result.line_number() << ": " << (result.type() == TestPartResult::kSuccess ? "Success" : result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : "Non-fatal failure") << ":\n" << result.message() << std::endl; } // Appends a TestPartResult to the array. void TestPartResultArray::Append(const TestPartResult& result) { array_.push_back(result); } // Returns the TestPartResult at the given index (0-based). const TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { if (index < 0 || index >= size()) { printf("\nInvalid index (%d) into TestPartResultArray.\n", index); internal::posix::Abort(); } return array_[index]; } // Returns the number of TestPartResult objects in the array. int TestPartResultArray::size() const { return static_cast(array_.size()); } namespace internal { HasNewFatalFailureHelper::HasNewFatalFailureHelper() : has_new_fatal_failure_(false), original_reporter_(GetUnitTestImpl()-> GetTestPartResultReporterForCurrentThread()) { GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); } HasNewFatalFailureHelper::~HasNewFatalFailureHelper() { GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread( original_reporter_); } void HasNewFatalFailureHelper::ReportTestPartResult( const TestPartResult& result) { if (result.fatally_failed()) has_new_fatal_failure_ = true; original_reporter_->ReportTestPartResult(result); } } // namespace internal } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/src/gtest-typed-test.cc000066400000000000000000000072621377520261000217610ustar00rootroot00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #include "gtest/gtest-typed-test.h" #include "gtest/gtest.h" namespace testing { namespace internal { #if GTEST_HAS_TYPED_TEST_P // Skips to the first non-space char in str. Returns an empty string if str // contains only whitespace characters. static const char* SkipSpaces(const char* str) { while (IsSpace(*str)) str++; return str; } // Verifies that registered_tests match the test names in // defined_test_names_; returns registered_tests if successful, or // aborts the program otherwise. const char* TypedTestCasePState::VerifyRegisteredTestNames( const char* file, int line, const char* registered_tests) { typedef ::std::set::const_iterator DefinedTestIter; registered_ = true; // Skip initial whitespace in registered_tests since some // preprocessors prefix stringizied literals with whitespace. registered_tests = SkipSpaces(registered_tests); Message errors; ::std::set tests; for (const char* names = registered_tests; names != NULL; names = SkipComma(names)) { const std::string name = GetPrefixUntilComma(names); if (tests.count(name) != 0) { errors << "Test " << name << " is listed more than once.\n"; continue; } bool found = false; for (DefinedTestIter it = defined_test_names_.begin(); it != defined_test_names_.end(); ++it) { if (name == *it) { found = true; break; } } if (found) { tests.insert(name); } else { errors << "No test named " << name << " can be found in this test case.\n"; } } for (DefinedTestIter it = defined_test_names_.begin(); it != defined_test_names_.end(); ++it) { if (tests.count(*it) == 0) { errors << "You forgot to list test " << *it << ".\n"; } } const std::string& errors_str = errors.GetString(); if (errors_str != "") { fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), errors_str.c_str()); fflush(stderr); posix::Abort(); } return registered_tests; } #endif // GTEST_HAS_TYPED_TEST_P } // namespace internal } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/src/gtest.cc000066400000000000000000005475161377520261000176740ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) #include "gtest/gtest.h" #include "gtest/gtest-spi.h" #include #include #include #include #include #include #include #include #include #include #include #include // NOLINT #include #include #if GTEST_OS_LINUX // TODO(kenton@google.com): Use autoconf to detect availability of // gettimeofday(). # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT # include // NOLINT # include // NOLINT // Declares vsnprintf(). This header is not available on Windows. # include // NOLINT # include // NOLINT # include // NOLINT # include // NOLINT # include #elif GTEST_OS_SYMBIAN # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT #elif GTEST_OS_ZOS # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT // On z/OS we additionally need strings.h for strcasecmp. # include // NOLINT #elif GTEST_OS_WINDOWS_MOBILE // We are on Windows CE. # include // NOLINT #elif GTEST_OS_WINDOWS // We are on Windows proper. # include // NOLINT # include // NOLINT # include // NOLINT # include // NOLINT # if GTEST_OS_WINDOWS_MINGW // MinGW has gettimeofday() but not _ftime64(). // TODO(kenton@google.com): Use autoconf to detect availability of // gettimeofday(). // TODO(kenton@google.com): There are other ways to get the time on // Windows, like GetTickCount() or GetSystemTimeAsFileTime(). MinGW // supports these. consider using them instead. # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT # endif // GTEST_OS_WINDOWS_MINGW // cpplint thinks that the header is already included, so we want to // silence it. # include // NOLINT #else // Assume other platforms have gettimeofday(). // TODO(kenton@google.com): Use autoconf to detect availability of // gettimeofday(). # define GTEST_HAS_GETTIMEOFDAY_ 1 // cpplint thinks that the header is already included, so we want to // silence it. # include // NOLINT # include // NOLINT #endif // GTEST_OS_LINUX #if GTEST_HAS_EXCEPTIONS # include #endif #if GTEST_CAN_STREAM_RESULTS_ # include // NOLINT # include // NOLINT #endif // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ #if GTEST_OS_WINDOWS # define vsnprintf _vsnprintf #endif // GTEST_OS_WINDOWS namespace testing { using internal::CountIf; using internal::ForEach; using internal::GetElementOr; using internal::Shuffle; // Constants. // A test whose test case name or test name matches this filter is // disabled and not run. static const char kDisableTestFilter[] = "DISABLED_*:*/DISABLED_*"; // A test case whose name matches this filter is considered a death // test case and will be run before test cases whose name doesn't // match this filter. static const char kDeathTestCaseFilter[] = "*DeathTest:*DeathTest/*"; // A test filter that matches everything. static const char kUniversalFilter[] = "*"; // The default output file for XML output. static const char kDefaultOutputFile[] = "test_detail.xml"; // The environment variable name for the test shard index. static const char kTestShardIndex[] = "GTEST_SHARD_INDEX"; // The environment variable name for the total number of test shards. static const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS"; // The environment variable name for the test shard status file. static const char kTestShardStatusFile[] = "GTEST_SHARD_STATUS_FILE"; namespace internal { // The text used in failure messages to indicate the start of the // stack trace. const char kStackTraceMarker[] = "\nStack trace:\n"; // g_help_flag is true iff the --help flag or an equivalent form is // specified on the command line. bool g_help_flag = false; } // namespace internal static const char* GetDefaultFilter() { return kUniversalFilter; } GTEST_DEFINE_bool_( also_run_disabled_tests, internal::BoolFromGTestEnv("also_run_disabled_tests", false), "Run disabled tests too, in addition to the tests normally being run."); GTEST_DEFINE_bool_( break_on_failure, internal::BoolFromGTestEnv("break_on_failure", false), "True iff a failed assertion should be a debugger break-point."); GTEST_DEFINE_bool_( catch_exceptions, internal::BoolFromGTestEnv("catch_exceptions", true), "True iff " GTEST_NAME_ " should catch exceptions and treat them as test failures."); GTEST_DEFINE_string_( color, internal::StringFromGTestEnv("color", "auto"), "Whether to use colors in the output. Valid values: yes, no, " "and auto. 'auto' means to use colors if the output is " "being sent to a terminal and the TERM environment variable " "is set to a terminal type that supports colors."); GTEST_DEFINE_string_( filter, internal::StringFromGTestEnv("filter", GetDefaultFilter()), "A colon-separated list of glob (not regex) patterns " "for filtering the tests to run, optionally followed by a " "'-' and a : separated list of negative patterns (tests to " "exclude). A test is run if it matches one of the positive " "patterns and does not match any of the negative patterns."); GTEST_DEFINE_bool_(list_tests, false, "List all tests without running them."); GTEST_DEFINE_string_( output, internal::StringFromGTestEnv("output", ""), "A format (currently must be \"xml\"), optionally followed " "by a colon and an output file name or directory. A directory " "is indicated by a trailing pathname separator. " "Examples: \"xml:filename.xml\", \"xml::directoryname/\". " "If a directory is specified, output files will be created " "within that directory, with file-names based on the test " "executable's name and, if necessary, made unique by adding " "digits."); GTEST_DEFINE_bool_( print_time, internal::BoolFromGTestEnv("print_time", true), "True iff " GTEST_NAME_ " should display elapsed time in text output."); GTEST_DEFINE_int32_( random_seed, internal::Int32FromGTestEnv("random_seed", 0), "Random number seed to use when shuffling test orders. Must be in range " "[1, 99999], or 0 to use a seed based on the current time."); GTEST_DEFINE_int32_( repeat, internal::Int32FromGTestEnv("repeat", 1), "How many times to repeat each test. Specify a negative number " "for repeating forever. Useful for shaking out flaky tests."); GTEST_DEFINE_bool_( show_internal_stack_frames, false, "True iff " GTEST_NAME_ " should include internal stack frames when " "printing test failure stack traces."); GTEST_DEFINE_bool_( shuffle, internal::BoolFromGTestEnv("shuffle", false), "True iff " GTEST_NAME_ " should randomize tests' order on every run."); GTEST_DEFINE_int32_( stack_trace_depth, internal::Int32FromGTestEnv("stack_trace_depth", kMaxStackTraceDepth), "The maximum number of stack frames to print when an " "assertion fails. The valid range is 0 through 100, inclusive."); GTEST_DEFINE_string_( stream_result_to, internal::StringFromGTestEnv("stream_result_to", ""), "This flag specifies the host name and the port number on which to stream " "test results. Example: \"localhost:555\". The flag is effective only on " "Linux."); GTEST_DEFINE_bool_( throw_on_failure, internal::BoolFromGTestEnv("throw_on_failure", false), "When this flag is specified, a failed assertion will throw an exception " "if exceptions are enabled or exit the program with a non-zero code " "otherwise."); namespace internal { // Generates a random number from [0, range), using a Linear // Congruential Generator (LCG). Crashes if 'range' is 0 or greater // than kMaxRange. UInt32 Random::Generate(UInt32 range) { // These constants are the same as are used in glibc's rand(3). state_ = (1103515245U*state_ + 12345U) % kMaxRange; GTEST_CHECK_(range > 0) << "Cannot generate a number in the range [0, 0)."; GTEST_CHECK_(range <= kMaxRange) << "Generation of a number in [0, " << range << ") was requested, " << "but this can only generate numbers in [0, " << kMaxRange << ")."; // Converting via modulus introduces a bit of downward bias, but // it's simple, and a linear congruential generator isn't too good // to begin with. return state_ % range; } // GTestIsInitialized() returns true iff the user has initialized // Google Test. Useful for catching the user mistake of not initializing // Google Test before calling RUN_ALL_TESTS(). // // A user must call testing::InitGoogleTest() to initialize Google // Test. g_init_gtest_count is set to the number of times // InitGoogleTest() has been called. We don't protect this variable // under a mutex as it is only accessed in the main thread. GTEST_API_ int g_init_gtest_count = 0; static bool GTestIsInitialized() { return g_init_gtest_count != 0; } // Iterates over a vector of TestCases, keeping a running sum of the // results of calling a given int-returning method on each. // Returns the sum. static int SumOverTestCaseList(const std::vector& case_list, int (TestCase::*method)() const) { int sum = 0; for (size_t i = 0; i < case_list.size(); i++) { sum += (case_list[i]->*method)(); } return sum; } // Returns true iff the test case passed. static bool TestCasePassed(const TestCase* test_case) { return test_case->should_run() && test_case->Passed(); } // Returns true iff the test case failed. static bool TestCaseFailed(const TestCase* test_case) { return test_case->should_run() && test_case->Failed(); } // Returns true iff test_case contains at least one test that should // run. static bool ShouldRunTestCase(const TestCase* test_case) { return test_case->should_run(); } // AssertHelper constructor. AssertHelper::AssertHelper(TestPartResult::Type type, const char* file, int line, const char* message) : data_(new AssertHelperData(type, file, line, message)) { } AssertHelper::~AssertHelper() { delete data_; } // Message assignment, for assertion streaming support. void AssertHelper::operator=(const Message& message) const { UnitTest::GetInstance()-> AddTestPartResult(data_->type, data_->file, data_->line, AppendUserMessage(data_->message, message), UnitTest::GetInstance()->impl() ->CurrentOsStackTraceExceptTop(1) // Skips the stack frame for this function itself. ); // NOLINT } // Mutex for linked pointers. GTEST_API_ GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex); // Application pathname gotten in InitGoogleTest. std::string g_executable_path; // Returns the current application's name, removing directory path if that // is present. FilePath GetCurrentExecutableName() { FilePath result; #if GTEST_OS_WINDOWS result.Set(FilePath(g_executable_path).RemoveExtension("exe")); #else result.Set(FilePath(g_executable_path)); #endif // GTEST_OS_WINDOWS return result.RemoveDirectoryName(); } // Functions for processing the gtest_output flag. // Returns the output format, or "" for normal printed output. std::string UnitTestOptions::GetOutputFormat() { const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); if (gtest_output_flag == NULL) return std::string(""); const char* const colon = strchr(gtest_output_flag, ':'); return (colon == NULL) ? std::string(gtest_output_flag) : std::string(gtest_output_flag, colon - gtest_output_flag); } // Returns the name of the requested output file, or the default if none // was explicitly specified. std::string UnitTestOptions::GetAbsolutePathToOutputFile() { const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); if (gtest_output_flag == NULL) return ""; const char* const colon = strchr(gtest_output_flag, ':'); if (colon == NULL) return internal::FilePath::ConcatPaths( internal::FilePath( UnitTest::GetInstance()->original_working_dir()), internal::FilePath(kDefaultOutputFile)).string(); internal::FilePath output_name(colon + 1); if (!output_name.IsAbsolutePath()) // TODO(wan@google.com): on Windows \some\path is not an absolute // path (as its meaning depends on the current drive), yet the // following logic for turning it into an absolute path is wrong. // Fix it. output_name = internal::FilePath::ConcatPaths( internal::FilePath(UnitTest::GetInstance()->original_working_dir()), internal::FilePath(colon + 1)); if (!output_name.IsDirectory()) return output_name.string(); internal::FilePath result(internal::FilePath::GenerateUniqueFileName( output_name, internal::GetCurrentExecutableName(), GetOutputFormat().c_str())); return result.string(); } // Returns true iff the wildcard pattern matches the string. The // first ':' or '\0' character in pattern marks the end of it. // // This recursive algorithm isn't very efficient, but is clear and // works well enough for matching test names, which are short. bool UnitTestOptions::PatternMatchesString(const char *pattern, const char *str) { switch (*pattern) { case '\0': case ':': // Either ':' or '\0' marks the end of the pattern. return *str == '\0'; case '?': // Matches any single character. return *str != '\0' && PatternMatchesString(pattern + 1, str + 1); case '*': // Matches any string (possibly empty) of characters. return (*str != '\0' && PatternMatchesString(pattern, str + 1)) || PatternMatchesString(pattern + 1, str); default: // Non-special character. Matches itself. return *pattern == *str && PatternMatchesString(pattern + 1, str + 1); } } bool UnitTestOptions::MatchesFilter( const std::string& name, const char* filter) { const char *cur_pattern = filter; for (;;) { if (PatternMatchesString(cur_pattern, name.c_str())) { return true; } // Finds the next pattern in the filter. cur_pattern = strchr(cur_pattern, ':'); // Returns if no more pattern can be found. if (cur_pattern == NULL) { return false; } // Skips the pattern separater (the ':' character). cur_pattern++; } } // Returns true iff the user-specified filter matches the test case // name and the test name. bool UnitTestOptions::FilterMatchesTest(const std::string &test_case_name, const std::string &test_name) { const std::string& full_name = test_case_name + "." + test_name.c_str(); // Split --gtest_filter at '-', if there is one, to separate into // positive filter and negative filter portions const char* const p = GTEST_FLAG(filter).c_str(); const char* const dash = strchr(p, '-'); std::string positive; std::string negative; if (dash == NULL) { positive = GTEST_FLAG(filter).c_str(); // Whole string is a positive filter negative = ""; } else { positive = std::string(p, dash); // Everything up to the dash negative = std::string(dash + 1); // Everything after the dash if (positive.empty()) { // Treat '-test1' as the same as '*-test1' positive = kUniversalFilter; } } // A filter is a colon-separated list of patterns. It matches a // test if any pattern in it matches the test. return (MatchesFilter(full_name, positive.c_str()) && !MatchesFilter(full_name, negative.c_str())); } #if GTEST_HAS_SEH // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. // This function is useful as an __except condition. int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) { // Google Test should handle a SEH exception if: // 1. the user wants it to, AND // 2. this is not a breakpoint exception, AND // 3. this is not a C++ exception (VC++ implements them via SEH, // apparently). // // SEH exception code for C++ exceptions. // (see http://support.microsoft.com/kb/185294 for more information). const DWORD kCxxExceptionCode = 0xe06d7363; bool should_handle = true; if (!GTEST_FLAG(catch_exceptions)) should_handle = false; else if (exception_code == EXCEPTION_BREAKPOINT) should_handle = false; else if (exception_code == kCxxExceptionCode) should_handle = false; return should_handle ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH; } #endif // GTEST_HAS_SEH } // namespace internal // The c'tor sets this object as the test part result reporter used by // Google Test. The 'result' parameter specifies where to report the // results. Intercepts only failures from the current thread. ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( TestPartResultArray* result) : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD), result_(result) { Init(); } // The c'tor sets this object as the test part result reporter used by // Google Test. The 'result' parameter specifies where to report the // results. ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( InterceptMode intercept_mode, TestPartResultArray* result) : intercept_mode_(intercept_mode), result_(result) { Init(); } void ScopedFakeTestPartResultReporter::Init() { internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); if (intercept_mode_ == INTERCEPT_ALL_THREADS) { old_reporter_ = impl->GetGlobalTestPartResultReporter(); impl->SetGlobalTestPartResultReporter(this); } else { old_reporter_ = impl->GetTestPartResultReporterForCurrentThread(); impl->SetTestPartResultReporterForCurrentThread(this); } } // The d'tor restores the test part result reporter used by Google Test // before. ScopedFakeTestPartResultReporter::~ScopedFakeTestPartResultReporter() { internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); if (intercept_mode_ == INTERCEPT_ALL_THREADS) { impl->SetGlobalTestPartResultReporter(old_reporter_); } else { impl->SetTestPartResultReporterForCurrentThread(old_reporter_); } } // Increments the test part result count and remembers the result. // This method is from the TestPartResultReporterInterface interface. void ScopedFakeTestPartResultReporter::ReportTestPartResult( const TestPartResult& result) { result_->Append(result); } namespace internal { // Returns the type ID of ::testing::Test. We should always call this // instead of GetTypeId< ::testing::Test>() to get the type ID of // testing::Test. This is to work around a suspected linker bug when // using Google Test as a framework on Mac OS X. The bug causes // GetTypeId< ::testing::Test>() to return different values depending // on whether the call is from the Google Test framework itself or // from user test code. GetTestTypeId() is guaranteed to always // return the same value, as it always calls GetTypeId<>() from the // gtest.cc, which is within the Google Test framework. TypeId GetTestTypeId() { return GetTypeId(); } // The value of GetTestTypeId() as seen from within the Google Test // library. This is solely for testing GetTestTypeId(). extern const TypeId kTestTypeIdInGoogleTest = GetTestTypeId(); // This predicate-formatter checks that 'results' contains a test part // failure of the given type and that the failure message contains the // given substring. AssertionResult HasOneFailure(const char* /* results_expr */, const char* /* type_expr */, const char* /* substr_expr */, const TestPartResultArray& results, TestPartResult::Type type, const string& substr) { const std::string expected(type == TestPartResult::kFatalFailure ? "1 fatal failure" : "1 non-fatal failure"); Message msg; if (results.size() != 1) { msg << "Expected: " << expected << "\n" << " Actual: " << results.size() << " failures"; for (int i = 0; i < results.size(); i++) { msg << "\n" << results.GetTestPartResult(i); } return AssertionFailure() << msg; } const TestPartResult& r = results.GetTestPartResult(0); if (r.type() != type) { return AssertionFailure() << "Expected: " << expected << "\n" << " Actual:\n" << r; } if (strstr(r.message(), substr.c_str()) == NULL) { return AssertionFailure() << "Expected: " << expected << " containing \"" << substr << "\"\n" << " Actual:\n" << r; } return AssertionSuccess(); } // The constructor of SingleFailureChecker remembers where to look up // test part results, what type of failure we expect, and what // substring the failure message should contain. SingleFailureChecker:: SingleFailureChecker( const TestPartResultArray* results, TestPartResult::Type type, const string& substr) : results_(results), type_(type), substr_(substr) {} // The destructor of SingleFailureChecker verifies that the given // TestPartResultArray contains exactly one failure that has the given // type and contains the given substring. If that's not the case, a // non-fatal failure will be generated. SingleFailureChecker::~SingleFailureChecker() { EXPECT_PRED_FORMAT3(HasOneFailure, *results_, type_, substr_); } DefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter( UnitTestImpl* unit_test) : unit_test_(unit_test) {} void DefaultGlobalTestPartResultReporter::ReportTestPartResult( const TestPartResult& result) { unit_test_->current_test_result()->AddTestPartResult(result); unit_test_->listeners()->repeater()->OnTestPartResult(result); } DefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter( UnitTestImpl* unit_test) : unit_test_(unit_test) {} void DefaultPerThreadTestPartResultReporter::ReportTestPartResult( const TestPartResult& result) { unit_test_->GetGlobalTestPartResultReporter()->ReportTestPartResult(result); } // Returns the global test part result reporter. TestPartResultReporterInterface* UnitTestImpl::GetGlobalTestPartResultReporter() { internal::MutexLock lock(&global_test_part_result_reporter_mutex_); return global_test_part_result_repoter_; } // Sets the global test part result reporter. void UnitTestImpl::SetGlobalTestPartResultReporter( TestPartResultReporterInterface* reporter) { internal::MutexLock lock(&global_test_part_result_reporter_mutex_); global_test_part_result_repoter_ = reporter; } // Returns the test part result reporter for the current thread. TestPartResultReporterInterface* UnitTestImpl::GetTestPartResultReporterForCurrentThread() { return per_thread_test_part_result_reporter_.get(); } // Sets the test part result reporter for the current thread. void UnitTestImpl::SetTestPartResultReporterForCurrentThread( TestPartResultReporterInterface* reporter) { per_thread_test_part_result_reporter_.set(reporter); } // Gets the number of successful test cases. int UnitTestImpl::successful_test_case_count() const { return CountIf(test_cases_, TestCasePassed); } // Gets the number of failed test cases. int UnitTestImpl::failed_test_case_count() const { return CountIf(test_cases_, TestCaseFailed); } // Gets the number of all test cases. int UnitTestImpl::total_test_case_count() const { return static_cast(test_cases_.size()); } // Gets the number of all test cases that contain at least one test // that should run. int UnitTestImpl::test_case_to_run_count() const { return CountIf(test_cases_, ShouldRunTestCase); } // Gets the number of successful tests. int UnitTestImpl::successful_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::successful_test_count); } // Gets the number of failed tests. int UnitTestImpl::failed_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::failed_test_count); } // Gets the number of disabled tests that will be reported in the XML report. int UnitTestImpl::reportable_disabled_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::reportable_disabled_test_count); } // Gets the number of disabled tests. int UnitTestImpl::disabled_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::disabled_test_count); } // Gets the number of tests to be printed in the XML report. int UnitTestImpl::reportable_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::reportable_test_count); } // Gets the number of all tests. int UnitTestImpl::total_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::total_test_count); } // Gets the number of tests that should run. int UnitTestImpl::test_to_run_count() const { return SumOverTestCaseList(test_cases_, &TestCase::test_to_run_count); } // Returns the current OS stack trace as an std::string. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // CurrentOsStackTraceExceptTop(1), Foo() will be included in the // trace but Bar() and CurrentOsStackTraceExceptTop() won't. std::string UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) { (void)skip_count; return ""; } // Returns the current time in milliseconds. TimeInMillis GetTimeInMillis() { #if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__) // Difference between 1970-01-01 and 1601-01-01 in milliseconds. // http://analogous.blogspot.com/2005/04/epoch.html const TimeInMillis kJavaEpochToWinFileTimeDelta = static_cast(116444736UL) * 100000UL; const DWORD kTenthMicrosInMilliSecond = 10000; SYSTEMTIME now_systime; FILETIME now_filetime; ULARGE_INTEGER now_int64; // TODO(kenton@google.com): Shouldn't this just use // GetSystemTimeAsFileTime()? GetSystemTime(&now_systime); if (SystemTimeToFileTime(&now_systime, &now_filetime)) { now_int64.LowPart = now_filetime.dwLowDateTime; now_int64.HighPart = now_filetime.dwHighDateTime; now_int64.QuadPart = (now_int64.QuadPart / kTenthMicrosInMilliSecond) - kJavaEpochToWinFileTimeDelta; return now_int64.QuadPart; } return 0; #elif GTEST_OS_WINDOWS && !GTEST_HAS_GETTIMEOFDAY_ __timeb64 now; # ifdef _MSC_VER // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996 // (deprecated function) there. // TODO(kenton@google.com): Use GetTickCount()? Or use // SystemTimeToFileTime() # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4996) // Temporarily disables warning 4996. _ftime64(&now); # pragma warning(pop) // Restores the warning state. # else _ftime64(&now); # endif // _MSC_VER return static_cast(now.time) * 1000 + now.millitm; #elif GTEST_HAS_GETTIMEOFDAY_ struct timeval now; gettimeofday(&now, NULL); return static_cast(now.tv_sec) * 1000 + now.tv_usec / 1000; #else # error "Don't know how to get the current time on your system." #endif } // Utilities // class String. #if GTEST_OS_WINDOWS_MOBILE // Creates a UTF-16 wide string from the given ANSI string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the wide string, or NULL if the // input is NULL. LPCWSTR String::AnsiToUtf16(const char* ansi) { if (!ansi) return NULL; const int length = strlen(ansi); const int unicode_length = MultiByteToWideChar(CP_ACP, 0, ansi, length, NULL, 0); WCHAR* unicode = new WCHAR[unicode_length + 1]; MultiByteToWideChar(CP_ACP, 0, ansi, length, unicode, unicode_length); unicode[unicode_length] = 0; return unicode; } // Creates an ANSI string from the given wide string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the ANSI string, or NULL if the // input is NULL. const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { if (!utf16_str) return NULL; const int ansi_length = WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, NULL, 0, NULL, NULL); char* ansi = new char[ansi_length + 1]; WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, ansi, ansi_length, NULL, NULL); ansi[ansi_length] = 0; return ansi; } #endif // GTEST_OS_WINDOWS_MOBILE // Compares two C strings. Returns true iff they have the same content. // // Unlike strcmp(), this function can handle NULL argument(s). A NULL // C string is considered different to any non-NULL C string, // including the empty string. bool String::CStringEquals(const char * lhs, const char * rhs) { if ( lhs == NULL ) return rhs == NULL; if ( rhs == NULL ) return false; return strcmp(lhs, rhs) == 0; } #if GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING // Converts an array of wide chars to a narrow string using the UTF-8 // encoding, and streams the result to the given Message object. static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length, Message* msg) { for (size_t i = 0; i != length; ) { // NOLINT if (wstr[i] != L'\0') { *msg << WideStringToUtf8(wstr + i, static_cast(length - i)); while (i != length && wstr[i] != L'\0') i++; } else { *msg << '\0'; i++; } } } #endif // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING } // namespace internal // Constructs an empty Message. // We allocate the stringstream separately because otherwise each use of // ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's // stack frame leading to huge stack frames in some cases; gcc does not reuse // the stack space. Message::Message() : ss_(new ::std::stringstream) { // By default, we want there to be enough precision when printing // a double to a Message. *ss_ << std::setprecision(std::numeric_limits::digits10 + 2); } // These two overloads allow streaming a wide C string to a Message // using the UTF-8 encoding. Message& Message::operator <<(const wchar_t* wide_c_str) { return *this << internal::String::ShowWideCString(wide_c_str); } Message& Message::operator <<(wchar_t* wide_c_str) { return *this << internal::String::ShowWideCString(wide_c_str); } #if GTEST_HAS_STD_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& Message::operator <<(const ::std::wstring& wstr) { internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); return *this; } #endif // GTEST_HAS_STD_WSTRING #if GTEST_HAS_GLOBAL_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& Message::operator <<(const ::wstring& wstr) { internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); return *this; } #endif // GTEST_HAS_GLOBAL_WSTRING // Gets the text streamed to this object so far as an std::string. // Each '\0' character in the buffer is replaced with "\\0". std::string Message::GetString() const { return internal::StringStreamToString(ss_.get()); } // AssertionResult constructors. // Used in EXPECT_TRUE/FALSE(assertion_result). AssertionResult::AssertionResult(const AssertionResult& other) : success_(other.success_), message_(other.message_.get() != NULL ? new ::std::string(*other.message_) : static_cast< ::std::string*>(NULL)) { } // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. AssertionResult AssertionResult::operator!() const { AssertionResult negation(!success_); if (message_.get() != NULL) negation << *message_; return negation; } // Makes a successful assertion result. AssertionResult AssertionSuccess() { return AssertionResult(true); } // Makes a failed assertion result. AssertionResult AssertionFailure() { return AssertionResult(false); } // Makes a failed assertion result with the given failure message. // Deprecated; use AssertionFailure() << message. AssertionResult AssertionFailure(const Message& message) { return AssertionFailure() << message; } namespace internal { // Constructs and returns the message for an equality assertion // (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. // // The first four parameters are the expressions used in the assertion // and their values, as strings. For example, for ASSERT_EQ(foo, bar) // where foo is 5 and bar is 6, we have: // // expected_expression: "foo" // actual_expression: "bar" // expected_value: "5" // actual_value: "6" // // The ignoring_case parameter is true iff the assertion is a // *_STRCASEEQ*. When it's true, the string " (ignoring case)" will // be inserted into the message. AssertionResult EqFailure(const char* expected_expression, const char* actual_expression, const std::string& expected_value, const std::string& actual_value, bool ignoring_case) { Message msg; msg << "Value of: " << actual_expression; if (actual_value != actual_expression) { msg << "\n Actual: " << actual_value; } msg << "\nExpected: " << expected_expression; if (ignoring_case) { msg << " (ignoring case)"; } if (expected_value != expected_expression) { msg << "\nWhich is: " << expected_value; } return AssertionFailure() << msg; } // Constructs a failure message for Boolean assertions such as EXPECT_TRUE. std::string GetBoolAssertionFailureMessage( const AssertionResult& assertion_result, const char* expression_text, const char* actual_predicate_value, const char* expected_predicate_value) { const char* actual_message = assertion_result.message(); Message msg; msg << "Value of: " << expression_text << "\n Actual: " << actual_predicate_value; if (actual_message[0] != '\0') msg << " (" << actual_message << ")"; msg << "\nExpected: " << expected_predicate_value; return msg.GetString(); } // Helper function for implementing ASSERT_NEAR. AssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2, const char* abs_error_expr, double val1, double val2, double abs_error) { const double diff = fabs(val1 - val2); if (diff <= abs_error) return AssertionSuccess(); // TODO(wan): do not print the value of an expression if it's // already a literal. return AssertionFailure() << "The difference between " << expr1 << " and " << expr2 << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n" << expr1 << " evaluates to " << val1 << ",\n" << expr2 << " evaluates to " << val2 << ", and\n" << abs_error_expr << " evaluates to " << abs_error << "."; } // Helper template for implementing FloatLE() and DoubleLE(). template AssertionResult FloatingPointLE(const char* expr1, const char* expr2, RawType val1, RawType val2) { // Returns success if val1 is less than val2, if (val1 < val2) { return AssertionSuccess(); } // or if val1 is almost equal to val2. const FloatingPoint lhs(val1), rhs(val2); if (lhs.AlmostEquals(rhs)) { return AssertionSuccess(); } // Note that the above two checks will both fail if either val1 or // val2 is NaN, as the IEEE floating-point standard requires that // any predicate involving a NaN must return false. ::std::stringstream val1_ss; val1_ss << std::setprecision(std::numeric_limits::digits10 + 2) << val1; ::std::stringstream val2_ss; val2_ss << std::setprecision(std::numeric_limits::digits10 + 2) << val2; return AssertionFailure() << "Expected: (" << expr1 << ") <= (" << expr2 << ")\n" << " Actual: " << StringStreamToString(&val1_ss) << " vs " << StringStreamToString(&val2_ss); } } // namespace internal // Asserts that val1 is less than, or almost equal to, val2. Fails // otherwise. In particular, it fails if either val1 or val2 is NaN. AssertionResult FloatLE(const char* expr1, const char* expr2, float val1, float val2) { return internal::FloatingPointLE(expr1, expr2, val1, val2); } // Asserts that val1 is less than, or almost equal to, val2. Fails // otherwise. In particular, it fails if either val1 or val2 is NaN. AssertionResult DoubleLE(const char* expr1, const char* expr2, double val1, double val2) { return internal::FloatingPointLE(expr1, expr2, val1, val2); } namespace internal { // The helper function for {ASSERT|EXPECT}_EQ with int or enum // arguments. AssertionResult CmpHelperEQ(const char* expected_expression, const char* actual_expression, BiggestInt expected, BiggestInt actual) { if (expected == actual) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, FormatForComparisonFailureMessage(expected, actual), FormatForComparisonFailureMessage(actual, expected), false); } // A macro for implementing the helper functions needed to implement // ASSERT_?? and EXPECT_?? with integer or enum arguments. It is here // just to avoid copy-and-paste of similar code. #define GTEST_IMPL_CMP_HELPER_(op_name, op)\ AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ BiggestInt val1, BiggestInt val2) {\ if (val1 op val2) {\ return AssertionSuccess();\ } else {\ return AssertionFailure() \ << "Expected: (" << expr1 << ") " #op " (" << expr2\ << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ << " vs " << FormatForComparisonFailureMessage(val2, val1);\ }\ } // Implements the helper function for {ASSERT|EXPECT}_NE with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(NE, !=) // Implements the helper function for {ASSERT|EXPECT}_LE with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(LE, <=) // Implements the helper function for {ASSERT|EXPECT}_LT with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(LT, < ) // Implements the helper function for {ASSERT|EXPECT}_GE with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(GE, >=) // Implements the helper function for {ASSERT|EXPECT}_GT with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(GT, > ) #undef GTEST_IMPL_CMP_HELPER_ // The helper function for {ASSERT|EXPECT}_STREQ. AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual) { if (String::CStringEquals(expected, actual)) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, PrintToString(expected), PrintToString(actual), false); } // The helper function for {ASSERT|EXPECT}_STRCASEEQ. AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual) { if (String::CaseInsensitiveCStringEquals(expected, actual)) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, PrintToString(expected), PrintToString(actual), true); } // The helper function for {ASSERT|EXPECT}_STRNE. AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2) { if (!String::CStringEquals(s1, s2)) { return AssertionSuccess(); } else { return AssertionFailure() << "Expected: (" << s1_expression << ") != (" << s2_expression << "), actual: \"" << s1 << "\" vs \"" << s2 << "\""; } } // The helper function for {ASSERT|EXPECT}_STRCASENE. AssertionResult CmpHelperSTRCASENE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2) { if (!String::CaseInsensitiveCStringEquals(s1, s2)) { return AssertionSuccess(); } else { return AssertionFailure() << "Expected: (" << s1_expression << ") != (" << s2_expression << ") (ignoring case), actual: \"" << s1 << "\" vs \"" << s2 << "\""; } } } // namespace internal namespace { // Helper functions for implementing IsSubString() and IsNotSubstring(). // This group of overloaded functions return true iff needle is a // substring of haystack. NULL is considered a substring of itself // only. bool IsSubstringPred(const char* needle, const char* haystack) { if (needle == NULL || haystack == NULL) return needle == haystack; return strstr(haystack, needle) != NULL; } bool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) { if (needle == NULL || haystack == NULL) return needle == haystack; return wcsstr(haystack, needle) != NULL; } // StringType here can be either ::std::string or ::std::wstring. template bool IsSubstringPred(const StringType& needle, const StringType& haystack) { return haystack.find(needle) != StringType::npos; } // This function implements either IsSubstring() or IsNotSubstring(), // depending on the value of the expected_to_be_substring parameter. // StringType here can be const char*, const wchar_t*, ::std::string, // or ::std::wstring. template AssertionResult IsSubstringImpl( bool expected_to_be_substring, const char* needle_expr, const char* haystack_expr, const StringType& needle, const StringType& haystack) { if (IsSubstringPred(needle, haystack) == expected_to_be_substring) return AssertionSuccess(); const bool is_wide_string = sizeof(needle[0]) > 1; const char* const begin_string_quote = is_wide_string ? "L\"" : "\""; return AssertionFailure() << "Value of: " << needle_expr << "\n" << " Actual: " << begin_string_quote << needle << "\"\n" << "Expected: " << (expected_to_be_substring ? "" : "not ") << "a substring of " << haystack_expr << "\n" << "Which is: " << begin_string_quote << haystack << "\""; } } // namespace // IsSubstring() and IsNotSubstring() check whether needle is a // substring of haystack (NULL is considered a substring of itself // only), and return an appropriate error message when they fail. AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } #if GTEST_HAS_STD_WSTRING AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } #endif // GTEST_HAS_STD_WSTRING namespace internal { #if GTEST_OS_WINDOWS namespace { // Helper function for IsHRESULT{SuccessFailure} predicates AssertionResult HRESULTFailureHelper(const char* expr, const char* expected, long hr) { // NOLINT # if GTEST_OS_WINDOWS_MOBILE // Windows CE doesn't support FormatMessage. const char error_text[] = ""; # else // Looks up the human-readable system message for the HRESULT code // and since we're not passing any params to FormatMessage, we don't // want inserts expanded. const DWORD kFlags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS; const DWORD kBufSize = 4096; // Gets the system's human readable message string for this HRESULT. char error_text[kBufSize] = { '\0' }; DWORD message_length = ::FormatMessageA(kFlags, 0, // no source, we're asking system hr, // the error 0, // no line width restrictions error_text, // output buffer kBufSize, // buf size NULL); // no arguments for inserts // Trims tailing white space (FormatMessage leaves a trailing CR-LF) for (; message_length && IsSpace(error_text[message_length - 1]); --message_length) { error_text[message_length - 1] = '\0'; } # endif // GTEST_OS_WINDOWS_MOBILE const std::string error_hex("0x" + String::FormatHexInt(hr)); return ::testing::AssertionFailure() << "Expected: " << expr << " " << expected << ".\n" << " Actual: " << error_hex << " " << error_text << "\n"; } } // namespace AssertionResult IsHRESULTSuccess(const char* expr, long hr) { // NOLINT if (SUCCEEDED(hr)) { return AssertionSuccess(); } return HRESULTFailureHelper(expr, "succeeds", hr); } AssertionResult IsHRESULTFailure(const char* expr, long hr) { // NOLINT if (FAILED(hr)) { return AssertionSuccess(); } return HRESULTFailureHelper(expr, "fails", hr); } #endif // GTEST_OS_WINDOWS // Utility functions for encoding Unicode text (wide strings) in // UTF-8. // A Unicode code-point can have upto 21 bits, and is encoded in UTF-8 // like this: // // Code-point length Encoding // 0 - 7 bits 0xxxxxxx // 8 - 11 bits 110xxxxx 10xxxxxx // 12 - 16 bits 1110xxxx 10xxxxxx 10xxxxxx // 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx // The maximum code-point a one-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint1 = (static_cast(1) << 7) - 1; // The maximum code-point a two-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint2 = (static_cast(1) << (5 + 6)) - 1; // The maximum code-point a three-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint3 = (static_cast(1) << (4 + 2*6)) - 1; // The maximum code-point a four-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint4 = (static_cast(1) << (3 + 3*6)) - 1; // Chops off the n lowest bits from a bit pattern. Returns the n // lowest bits. As a side effect, the original bit pattern will be // shifted to the right by n bits. inline UInt32 ChopLowBits(UInt32* bits, int n) { const UInt32 low_bits = *bits & ((static_cast(1) << n) - 1); *bits >>= n; return low_bits; } // Converts a Unicode code point to a narrow string in UTF-8 encoding. // code_point parameter is of type UInt32 because wchar_t may not be // wide enough to contain a code point. // If the code_point is not a valid Unicode code point // (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted // to "(Invalid Unicode 0xXXXXXXXX)". std::string CodePointToUtf8(UInt32 code_point) { if (code_point > kMaxCodePoint4) { return "(Invalid Unicode 0x" + String::FormatHexInt(code_point) + ")"; } char str[5]; // Big enough for the largest valid code point. if (code_point <= kMaxCodePoint1) { str[1] = '\0'; str[0] = static_cast(code_point); // 0xxxxxxx } else if (code_point <= kMaxCodePoint2) { str[2] = '\0'; str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[0] = static_cast(0xC0 | code_point); // 110xxxxx } else if (code_point <= kMaxCodePoint3) { str[3] = '\0'; str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[0] = static_cast(0xE0 | code_point); // 1110xxxx } else { // code_point <= kMaxCodePoint4 str[4] = '\0'; str[3] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[0] = static_cast(0xF0 | code_point); // 11110xxx } return str; } // The following two functions only make sense if the the system // uses UTF-16 for wide string encoding. All supported systems // with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16. // Determines if the arguments constitute UTF-16 surrogate pair // and thus should be combined into a single Unicode code point // using CreateCodePointFromUtf16SurrogatePair. inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { return sizeof(wchar_t) == 2 && (first & 0xFC00) == 0xD800 && (second & 0xFC00) == 0xDC00; } // Creates a Unicode code point from UTF16 surrogate pair. inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first, wchar_t second) { const UInt32 mask = (1 << 10) - 1; return (sizeof(wchar_t) == 2) ? (((first & mask) << 10) | (second & mask)) + 0x10000 : // This function should not be called when the condition is // false, but we provide a sensible default in case it is. static_cast(first); } // Converts a wide string to a narrow string in UTF-8 encoding. // The wide string is assumed to have the following encoding: // UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) // UTF-32 if sizeof(wchar_t) == 4 (on Linux) // Parameter str points to a null-terminated wide string. // Parameter num_chars may additionally limit the number // of wchar_t characters processed. -1 is used when the entire string // should be processed. // If the string contains code points that are not valid Unicode code points // (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output // as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding // and contains invalid UTF-16 surrogate pairs, values in those pairs // will be encoded as individual Unicode characters from Basic Normal Plane. std::string WideStringToUtf8(const wchar_t* str, int num_chars) { if (num_chars == -1) num_chars = static_cast(wcslen(str)); ::std::stringstream stream; for (int i = 0; i < num_chars; ++i) { UInt32 unicode_code_point; if (str[i] == L'\0') { break; } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) { unicode_code_point = CreateCodePointFromUtf16SurrogatePair(str[i], str[i + 1]); i++; } else { unicode_code_point = static_cast(str[i]); } stream << CodePointToUtf8(unicode_code_point); } return StringStreamToString(&stream); } // Converts a wide C string to an std::string using the UTF-8 encoding. // NULL will be converted to "(null)". std::string String::ShowWideCString(const wchar_t * wide_c_str) { if (wide_c_str == NULL) return "(null)"; return internal::WideStringToUtf8(wide_c_str, -1); } // Compares two wide C strings. Returns true iff they have the same // content. // // Unlike wcscmp(), this function can handle NULL argument(s). A NULL // C string is considered different to any non-NULL C string, // including the empty string. bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) { if (lhs == NULL) return rhs == NULL; if (rhs == NULL) return false; return wcscmp(lhs, rhs) == 0; } // Helper function for *_STREQ on wide strings. AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const wchar_t* expected, const wchar_t* actual) { if (String::WideCStringEquals(expected, actual)) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, PrintToString(expected), PrintToString(actual), false); } // Helper function for *_STRNE on wide strings. AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const wchar_t* s1, const wchar_t* s2) { if (!String::WideCStringEquals(s1, s2)) { return AssertionSuccess(); } return AssertionFailure() << "Expected: (" << s1_expression << ") != (" << s2_expression << "), actual: " << PrintToString(s1) << " vs " << PrintToString(s2); } // Compares two C strings, ignoring case. Returns true iff they have // the same content. // // Unlike strcasecmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. bool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) { if (lhs == NULL) return rhs == NULL; if (rhs == NULL) return false; return posix::StrCaseCmp(lhs, rhs) == 0; } // Compares two wide C strings, ignoring case. Returns true iff they // have the same content. // // Unlike wcscasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL wide C string, // including the empty string. // NB: The implementations on different platforms slightly differ. // On windows, this method uses _wcsicmp which compares according to LC_CTYPE // environment variable. On GNU platform this method uses wcscasecmp // which compares according to LC_CTYPE category of the current locale. // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the // current locale. bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs, const wchar_t* rhs) { if (lhs == NULL) return rhs == NULL; if (rhs == NULL) return false; #if GTEST_OS_WINDOWS return _wcsicmp(lhs, rhs) == 0; #elif GTEST_OS_LINUX && !GTEST_OS_LINUX_ANDROID return wcscasecmp(lhs, rhs) == 0; #else // Android, Mac OS X and Cygwin don't define wcscasecmp. // Other unknown OSes may not define it either. wint_t left, right; do { left = towlower(*lhs++); right = towlower(*rhs++); } while (left && left == right); return left == right; #endif // OS selector } // Returns true iff str ends with the given suffix, ignoring case. // Any string is considered to end with an empty suffix. bool String::EndsWithCaseInsensitive( const std::string& str, const std::string& suffix) { const size_t str_len = str.length(); const size_t suffix_len = suffix.length(); return (str_len >= suffix_len) && CaseInsensitiveCStringEquals(str.c_str() + str_len - suffix_len, suffix.c_str()); } // Formats an int value as "%02d". std::string String::FormatIntWidth2(int value) { std::stringstream ss; ss << std::setfill('0') << std::setw(2) << value; return ss.str(); } // Formats an int value as "%X". std::string String::FormatHexInt(int value) { std::stringstream ss; ss << std::hex << std::uppercase << value; return ss.str(); } // Formats a byte as "%02X". std::string String::FormatByte(unsigned char value) { std::stringstream ss; ss << std::setfill('0') << std::setw(2) << std::hex << std::uppercase << static_cast(value); return ss.str(); } // Converts the buffer in a stringstream to an std::string, converting NUL // bytes to "\\0" along the way. std::string StringStreamToString(::std::stringstream* ss) { const ::std::string& str = ss->str(); const char* const start = str.c_str(); const char* const end = start + str.length(); std::string result; result.reserve(2 * (end - start)); for (const char* ch = start; ch != end; ++ch) { if (*ch == '\0') { result += "\\0"; // Replaces NUL with "\\0"; } else { result += *ch; } } return result; } // Appends the user-supplied message to the Google-Test-generated message. std::string AppendUserMessage(const std::string& gtest_msg, const Message& user_msg) { // Appends the user message if it's non-empty. const std::string user_msg_string = user_msg.GetString(); if (user_msg_string.empty()) { return gtest_msg; } return gtest_msg + "\n" + user_msg_string; } } // namespace internal // class TestResult // Creates an empty TestResult. TestResult::TestResult() : death_test_count_(0), elapsed_time_(0) { } // D'tor. TestResult::~TestResult() { } // Returns the i-th test part result among all the results. i can // range from 0 to total_part_count() - 1. If i is not in that range, // aborts the program. const TestPartResult& TestResult::GetTestPartResult(int i) const { if (i < 0 || i >= total_part_count()) internal::posix::Abort(); return test_part_results_.at(i); } // Returns the i-th test property. i can range from 0 to // test_property_count() - 1. If i is not in that range, aborts the // program. const TestProperty& TestResult::GetTestProperty(int i) const { if (i < 0 || i >= test_property_count()) internal::posix::Abort(); return test_properties_.at(i); } // Clears the test part results. void TestResult::ClearTestPartResults() { test_part_results_.clear(); } // Adds a test part result to the list. void TestResult::AddTestPartResult(const TestPartResult& test_part_result) { test_part_results_.push_back(test_part_result); } // Adds a test property to the list. If a property with the same key as the // supplied property is already represented, the value of this test_property // replaces the old value for that key. void TestResult::RecordProperty(const std::string& xml_element, const TestProperty& test_property) { if (!ValidateTestProperty(xml_element, test_property)) { return; } internal::MutexLock lock(&test_properites_mutex_); const std::vector::iterator property_with_matching_key = std::find_if(test_properties_.begin(), test_properties_.end(), internal::TestPropertyKeyIs(test_property.key())); if (property_with_matching_key == test_properties_.end()) { test_properties_.push_back(test_property); return; } property_with_matching_key->SetValue(test_property.value()); } // The list of reserved attributes used in the element of XML // output. static const char* const kReservedTestSuitesAttributes[] = { "disabled", "errors", "failures", "name", "random_seed", "tests", "time", "timestamp" }; // The list of reserved attributes used in the element of XML // output. static const char* const kReservedTestSuiteAttributes[] = { "disabled", "errors", "failures", "name", "tests", "time" }; // The list of reserved attributes used in the element of XML output. static const char* const kReservedTestCaseAttributes[] = { "classname", "name", "status", "time", "type_param", "value_param" }; template std::vector ArrayAsVector(const char* const (&array)[kSize]) { return std::vector(array, array + kSize); } static std::vector GetReservedAttributesForElement( const std::string& xml_element) { if (xml_element == "testsuites") { return ArrayAsVector(kReservedTestSuitesAttributes); } else if (xml_element == "testsuite") { return ArrayAsVector(kReservedTestSuiteAttributes); } else if (xml_element == "testcase") { return ArrayAsVector(kReservedTestCaseAttributes); } else { GTEST_CHECK_(false) << "Unrecognized xml_element provided: " << xml_element; } // This code is unreachable but some compilers may not realizes that. return std::vector(); } static std::string FormatWordList(const std::vector& words) { Message word_list; for (size_t i = 0; i < words.size(); ++i) { if (i > 0 && words.size() > 2) { word_list << ", "; } if (i == words.size() - 1) { word_list << "and "; } word_list << "'" << words[i] << "'"; } return word_list.GetString(); } bool ValidateTestPropertyName(const std::string& property_name, const std::vector& reserved_names) { if (std::find(reserved_names.begin(), reserved_names.end(), property_name) != reserved_names.end()) { ADD_FAILURE() << "Reserved key used in RecordProperty(): " << property_name << " (" << FormatWordList(reserved_names) << " are reserved by " << GTEST_NAME_ << ")"; return false; } return true; } // Adds a failure if the key is a reserved attribute of the element named // xml_element. Returns true if the property is valid. bool TestResult::ValidateTestProperty(const std::string& xml_element, const TestProperty& test_property) { return ValidateTestPropertyName(test_property.key(), GetReservedAttributesForElement(xml_element)); } // Clears the object. void TestResult::Clear() { test_part_results_.clear(); test_properties_.clear(); death_test_count_ = 0; elapsed_time_ = 0; } // Returns true iff the test failed. bool TestResult::Failed() const { for (int i = 0; i < total_part_count(); ++i) { if (GetTestPartResult(i).failed()) return true; } return false; } // Returns true iff the test part fatally failed. static bool TestPartFatallyFailed(const TestPartResult& result) { return result.fatally_failed(); } // Returns true iff the test fatally failed. bool TestResult::HasFatalFailure() const { return CountIf(test_part_results_, TestPartFatallyFailed) > 0; } // Returns true iff the test part non-fatally failed. static bool TestPartNonfatallyFailed(const TestPartResult& result) { return result.nonfatally_failed(); } // Returns true iff the test has a non-fatal failure. bool TestResult::HasNonfatalFailure() const { return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0; } // Gets the number of all test parts. This is the sum of the number // of successful test parts and the number of failed test parts. int TestResult::total_part_count() const { return static_cast(test_part_results_.size()); } // Returns the number of the test properties. int TestResult::test_property_count() const { return static_cast(test_properties_.size()); } // class Test // Creates a Test object. // The c'tor saves the values of all Google Test flags. Test::Test() : gtest_flag_saver_(new internal::GTestFlagSaver) { } // The d'tor restores the values of all Google Test flags. Test::~Test() { delete gtest_flag_saver_; } // Sets up the test fixture. // // A sub-class may override this. void Test::SetUp() { } // Tears down the test fixture. // // A sub-class may override this. void Test::TearDown() { } // Allows user supplied key value pairs to be recorded for later output. void Test::RecordProperty(const std::string& key, const std::string& value) { UnitTest::GetInstance()->RecordProperty(key, value); } // Allows user supplied key value pairs to be recorded for later output. void Test::RecordProperty(const std::string& key, int value) { Message value_message; value_message << value; RecordProperty(key, value_message.GetString().c_str()); } namespace internal { void ReportFailureInUnknownLocation(TestPartResult::Type result_type, const std::string& message) { // This function is a friend of UnitTest and as such has access to // AddTestPartResult. UnitTest::GetInstance()->AddTestPartResult( result_type, NULL, // No info about the source file where the exception occurred. -1, // We have no info on which line caused the exception. message, ""); // No stack trace, either. } } // namespace internal // Google Test requires all tests in the same test case to use the same test // fixture class. This function checks if the current test has the // same fixture class as the first test in the current test case. If // yes, it returns true; otherwise it generates a Google Test failure and // returns false. bool Test::HasSameFixtureClass() { internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); const TestCase* const test_case = impl->current_test_case(); // Info about the first test in the current test case. const TestInfo* const first_test_info = test_case->test_info_list()[0]; const internal::TypeId first_fixture_id = first_test_info->fixture_class_id_; const char* const first_test_name = first_test_info->name(); // Info about the current test. const TestInfo* const this_test_info = impl->current_test_info(); const internal::TypeId this_fixture_id = this_test_info->fixture_class_id_; const char* const this_test_name = this_test_info->name(); if (this_fixture_id != first_fixture_id) { // Is the first test defined using TEST? const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId(); // Is this test defined using TEST? const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId(); if (first_is_TEST || this_is_TEST) { // The user mixed TEST and TEST_F in this test case - we'll tell // him/her how to fix it. // Gets the name of the TEST and the name of the TEST_F. Note // that first_is_TEST and this_is_TEST cannot both be true, as // the fixture IDs are different for the two tests. const char* const TEST_name = first_is_TEST ? first_test_name : this_test_name; const char* const TEST_F_name = first_is_TEST ? this_test_name : first_test_name; ADD_FAILURE() << "All tests in the same test case must use the same test fixture\n" << "class, so mixing TEST_F and TEST in the same test case is\n" << "illegal. In test case " << this_test_info->test_case_name() << ",\n" << "test " << TEST_F_name << " is defined using TEST_F but\n" << "test " << TEST_name << " is defined using TEST. You probably\n" << "want to change the TEST to TEST_F or move it to another test\n" << "case."; } else { // The user defined two fixture classes with the same name in // two namespaces - we'll tell him/her how to fix it. ADD_FAILURE() << "All tests in the same test case must use the same test fixture\n" << "class. However, in test case " << this_test_info->test_case_name() << ",\n" << "you defined test " << first_test_name << " and test " << this_test_name << "\n" << "using two different test fixture classes. This can happen if\n" << "the two classes are from different namespaces or translation\n" << "units and have the same name. You should probably rename one\n" << "of the classes to put the tests into different test cases."; } return false; } return true; } #if GTEST_HAS_SEH // Adds an "exception thrown" fatal failure to the current test. This // function returns its result via an output parameter pointer because VC++ // prohibits creation of objects with destructors on stack in functions // using __try (see error C2712). static std::string* FormatSehExceptionMessage(DWORD exception_code, const char* location) { Message message; message << "SEH exception with code 0x" << std::setbase(16) << exception_code << std::setbase(10) << " thrown in " << location << "."; return new std::string(message.GetString()); } #endif // GTEST_HAS_SEH namespace internal { #if GTEST_HAS_EXCEPTIONS // Adds an "exception thrown" fatal failure to the current test. static std::string FormatCxxExceptionMessage(const char* description, const char* location) { Message message; if (description != NULL) { message << "C++ exception with description \"" << description << "\""; } else { message << "Unknown C++ exception"; } message << " thrown in " << location << "."; return message.GetString(); } static std::string PrintTestPartResultToString( const TestPartResult& test_part_result); GoogleTestFailureException::GoogleTestFailureException( const TestPartResult& failure) : ::std::runtime_error(PrintTestPartResultToString(failure).c_str()) {} #endif // GTEST_HAS_EXCEPTIONS // We put these helper functions in the internal namespace as IBM's xlC // compiler rejects the code if they were declared static. // Runs the given method and handles SEH exceptions it throws, when // SEH is supported; returns the 0-value for type Result in case of an // SEH exception. (Microsoft compilers cannot handle SEH and C++ // exceptions in the same function. Therefore, we provide a separate // wrapper function for handling SEH exceptions.) template Result HandleSehExceptionsInMethodIfSupported( T* object, Result (T::*method)(), const char* location) { #if GTEST_HAS_SEH __try { return (object->*method)(); } __except (internal::UnitTestOptions::GTestShouldProcessSEH( // NOLINT GetExceptionCode())) { // We create the exception message on the heap because VC++ prohibits // creation of objects with destructors on stack in functions using __try // (see error C2712). std::string* exception_message = FormatSehExceptionMessage( GetExceptionCode(), location); internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure, *exception_message); delete exception_message; return static_cast(0); } #else (void)location; return (object->*method)(); #endif // GTEST_HAS_SEH } // Runs the given method and catches and reports C++ and/or SEH-style // exceptions, if they are supported; returns the 0-value for type // Result in case of an SEH exception. template Result HandleExceptionsInMethodIfSupported( T* object, Result (T::*method)(), const char* location) { // NOTE: The user code can affect the way in which Google Test handles // exceptions by setting GTEST_FLAG(catch_exceptions), but only before // RUN_ALL_TESTS() starts. It is technically possible to check the flag // after the exception is caught and either report or re-throw the // exception based on the flag's value: // // try { // // Perform the test method. // } catch (...) { // if (GTEST_FLAG(catch_exceptions)) // // Report the exception as failure. // else // throw; // Re-throws the original exception. // } // // However, the purpose of this flag is to allow the program to drop into // the debugger when the exception is thrown. On most platforms, once the // control enters the catch block, the exception origin information is // lost and the debugger will stop the program at the point of the // re-throw in this function -- instead of at the point of the original // throw statement in the code under test. For this reason, we perform // the check early, sacrificing the ability to affect Google Test's // exception handling in the method where the exception is thrown. if (internal::GetUnitTestImpl()->catch_exceptions()) { #if GTEST_HAS_EXCEPTIONS try { return HandleSehExceptionsInMethodIfSupported(object, method, location); } catch (const internal::GoogleTestFailureException&) { // NOLINT // This exception type can only be thrown by a failed Google // Test assertion with the intention of letting another testing // framework catch it. Therefore we just re-throw it. throw; } catch (const std::exception& e) { // NOLINT internal::ReportFailureInUnknownLocation( TestPartResult::kFatalFailure, FormatCxxExceptionMessage(e.what(), location)); } catch (...) { // NOLINT internal::ReportFailureInUnknownLocation( TestPartResult::kFatalFailure, FormatCxxExceptionMessage(NULL, location)); } return static_cast(0); #else return HandleSehExceptionsInMethodIfSupported(object, method, location); #endif // GTEST_HAS_EXCEPTIONS } else { return (object->*method)(); } } } // namespace internal // Runs the test and updates the test result. void Test::Run() { if (!HasSameFixtureClass()) return; internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported(this, &Test::SetUp, "SetUp()"); // We will run the test only if SetUp() was successful. if (!HasFatalFailure()) { impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &Test::TestBody, "the test body"); } // However, we want to clean up as much as possible. Hence we will // always call TearDown(), even if SetUp() or the test body has // failed. impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &Test::TearDown, "TearDown()"); } // Returns true iff the current test has a fatal failure. bool Test::HasFatalFailure() { return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure(); } // Returns true iff the current test has a non-fatal failure. bool Test::HasNonfatalFailure() { return internal::GetUnitTestImpl()->current_test_result()-> HasNonfatalFailure(); } // class TestInfo // Constructs a TestInfo object. It assumes ownership of the test factory // object. TestInfo::TestInfo(const std::string& a_test_case_name, const std::string& a_name, const char* a_type_param, const char* a_value_param, internal::TypeId fixture_class_id, internal::TestFactoryBase* factory) : test_case_name_(a_test_case_name), name_(a_name), type_param_(a_type_param ? new std::string(a_type_param) : NULL), value_param_(a_value_param ? new std::string(a_value_param) : NULL), fixture_class_id_(fixture_class_id), should_run_(false), is_disabled_(false), matches_filter_(false), factory_(factory), result_() {} // Destructs a TestInfo object. TestInfo::~TestInfo() { delete factory_; } namespace internal { // Creates a new TestInfo object and registers it with Google Test; // returns the created object. // // Arguments: // // test_case_name: name of the test case // name: name of the test // type_param: the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. // value_param: text representation of the test's value parameter, // or NULL if this is not a value-parameterized test. // fixture_class_id: ID of the test fixture class // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case // factory: pointer to the factory that creates a test object. // The newly created TestInfo instance will assume // ownership of the factory object. TestInfo* MakeAndRegisterTestInfo( const char* test_case_name, const char* name, const char* type_param, const char* value_param, TypeId fixture_class_id, SetUpTestCaseFunc set_up_tc, TearDownTestCaseFunc tear_down_tc, TestFactoryBase* factory) { TestInfo* const test_info = new TestInfo(test_case_name, name, type_param, value_param, fixture_class_id, factory); GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info); return test_info; } #if GTEST_HAS_PARAM_TEST void ReportInvalidTestCaseType(const char* test_case_name, const char* file, int line) { Message errors; errors << "Attempted redefinition of test case " << test_case_name << ".\n" << "All tests in the same test case must use the same test fixture\n" << "class. However, in test case " << test_case_name << ", you tried\n" << "to define a test using a fixture class different from the one\n" << "used earlier. This can happen if the two fixture classes are\n" << "from different namespaces and have the same name. You should\n" << "probably rename one of the classes to put the tests into different\n" << "test cases."; fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), errors.GetString().c_str()); } #endif // GTEST_HAS_PARAM_TEST } // namespace internal namespace { // A predicate that checks the test name of a TestInfo against a known // value. // // This is used for implementation of the TestCase class only. We put // it in the anonymous namespace to prevent polluting the outer // namespace. // // TestNameIs is copyable. class TestNameIs { public: // Constructor. // // TestNameIs has NO default constructor. explicit TestNameIs(const char* name) : name_(name) {} // Returns true iff the test name of test_info matches name_. bool operator()(const TestInfo * test_info) const { return test_info && test_info->name() == name_; } private: std::string name_; }; } // namespace namespace internal { // This method expands all parameterized tests registered with macros TEST_P // and INSTANTIATE_TEST_CASE_P into regular tests and registers those. // This will be done just once during the program runtime. void UnitTestImpl::RegisterParameterizedTests() { #if GTEST_HAS_PARAM_TEST if (!parameterized_tests_registered_) { parameterized_test_registry_.RegisterTests(); parameterized_tests_registered_ = true; } #endif } } // namespace internal // Creates the test object, runs it, records its result, and then // deletes it. void TestInfo::Run() { if (!should_run_) return; // Tells UnitTest where to store test result. internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); impl->set_current_test_info(this); TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); // Notifies the unit test event listeners that a test is about to start. repeater->OnTestStart(*this); const TimeInMillis start = internal::GetTimeInMillis(); impl->os_stack_trace_getter()->UponLeavingGTest(); // Creates the test object. Test* const test = internal::HandleExceptionsInMethodIfSupported( factory_, &internal::TestFactoryBase::CreateTest, "the test fixture's constructor"); // Runs the test only if the test object was created and its // constructor didn't generate a fatal failure. if ((test != NULL) && !Test::HasFatalFailure()) { // This doesn't throw as all user code that can throw are wrapped into // exception handling code. test->Run(); } // Deletes the test object. impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( test, &Test::DeleteSelf_, "the test fixture's destructor"); result_.set_elapsed_time(internal::GetTimeInMillis() - start); // Notifies the unit test event listener that a test has just finished. repeater->OnTestEnd(*this); // Tells UnitTest to stop associating assertion results to this // test. impl->set_current_test_info(NULL); } // class TestCase // Gets the number of successful tests in this test case. int TestCase::successful_test_count() const { return CountIf(test_info_list_, TestPassed); } // Gets the number of failed tests in this test case. int TestCase::failed_test_count() const { return CountIf(test_info_list_, TestFailed); } // Gets the number of disabled tests that will be reported in the XML report. int TestCase::reportable_disabled_test_count() const { return CountIf(test_info_list_, TestReportableDisabled); } // Gets the number of disabled tests in this test case. int TestCase::disabled_test_count() const { return CountIf(test_info_list_, TestDisabled); } // Gets the number of tests to be printed in the XML report. int TestCase::reportable_test_count() const { return CountIf(test_info_list_, TestReportable); } // Get the number of tests in this test case that should run. int TestCase::test_to_run_count() const { return CountIf(test_info_list_, ShouldRunTest); } // Gets the number of all tests. int TestCase::total_test_count() const { return static_cast(test_info_list_.size()); } // Creates a TestCase with the given name. // // Arguments: // // name: name of the test case // a_type_param: the name of the test case's type parameter, or NULL if // this is not a typed or a type-parameterized test case. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase::TestCase(const char* a_name, const char* a_type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc) : name_(a_name), type_param_(a_type_param ? new std::string(a_type_param) : NULL), set_up_tc_(set_up_tc), tear_down_tc_(tear_down_tc), should_run_(false), elapsed_time_(0) { } // Destructor of TestCase. TestCase::~TestCase() { // Deletes every Test in the collection. ForEach(test_info_list_, internal::Delete); } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. const TestInfo* TestCase::GetTestInfo(int i) const { const int index = GetElementOr(test_indices_, i, -1); return index < 0 ? NULL : test_info_list_[index]; } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. TestInfo* TestCase::GetMutableTestInfo(int i) { const int index = GetElementOr(test_indices_, i, -1); return index < 0 ? NULL : test_info_list_[index]; } // Adds a test to this test case. Will delete the test upon // destruction of the TestCase object. void TestCase::AddTestInfo(TestInfo * test_info) { test_info_list_.push_back(test_info); test_indices_.push_back(static_cast(test_indices_.size())); } // Runs every test in this TestCase. void TestCase::Run() { if (!should_run_) return; internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); impl->set_current_test_case(this); TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); repeater->OnTestCaseStart(*this); impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &TestCase::RunSetUpTestCase, "SetUpTestCase()"); const internal::TimeInMillis start = internal::GetTimeInMillis(); for (int i = 0; i < total_test_count(); i++) { GetMutableTestInfo(i)->Run(); } elapsed_time_ = internal::GetTimeInMillis() - start; impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &TestCase::RunTearDownTestCase, "TearDownTestCase()"); repeater->OnTestCaseEnd(*this); impl->set_current_test_case(NULL); } // Clears the results of all tests in this test case. void TestCase::ClearResult() { ad_hoc_test_result_.Clear(); ForEach(test_info_list_, TestInfo::ClearTestResult); } // Shuffles the tests in this test case. void TestCase::ShuffleTests(internal::Random* random) { Shuffle(random, &test_indices_); } // Restores the test order to before the first shuffle. void TestCase::UnshuffleTests() { for (size_t i = 0; i < test_indices_.size(); i++) { test_indices_[i] = static_cast(i); } } // Formats a countable noun. Depending on its quantity, either the // singular form or the plural form is used. e.g. // // FormatCountableNoun(1, "formula", "formuli") returns "1 formula". // FormatCountableNoun(5, "book", "books") returns "5 books". static std::string FormatCountableNoun(int count, const char * singular_form, const char * plural_form) { return internal::StreamableToString(count) + " " + (count == 1 ? singular_form : plural_form); } // Formats the count of tests. static std::string FormatTestCount(int test_count) { return FormatCountableNoun(test_count, "test", "tests"); } // Formats the count of test cases. static std::string FormatTestCaseCount(int test_case_count) { return FormatCountableNoun(test_case_count, "test case", "test cases"); } // Converts a TestPartResult::Type enum to human-friendly string // representation. Both kNonFatalFailure and kFatalFailure are translated // to "Failure", as the user usually doesn't care about the difference // between the two when viewing the test result. static const char * TestPartResultTypeToString(TestPartResult::Type type) { switch (type) { case TestPartResult::kSuccess: return "Success"; case TestPartResult::kNonFatalFailure: case TestPartResult::kFatalFailure: #ifdef _MSC_VER return "error: "; #else return "Failure\n"; #endif default: return "Unknown result type"; } } namespace internal { // Prints a TestPartResult to an std::string. static std::string PrintTestPartResultToString( const TestPartResult& test_part_result) { return (Message() << internal::FormatFileLocation(test_part_result.file_name(), test_part_result.line_number()) << " " << TestPartResultTypeToString(test_part_result.type()) << test_part_result.message()).GetString(); } // Prints a TestPartResult. static void PrintTestPartResult(const TestPartResult& test_part_result) { const std::string& result = PrintTestPartResultToString(test_part_result); printf("%s\n", result.c_str()); fflush(stdout); // If the test program runs in Visual Studio or a debugger, the // following statements add the test part result message to the Output // window such that the user can double-click on it to jump to the // corresponding source code location; otherwise they do nothing. #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE // We don't call OutputDebugString*() on Windows Mobile, as printing // to stdout is done by OutputDebugString() there already - we don't // want the same message printed twice. ::OutputDebugStringA(result.c_str()); ::OutputDebugStringA("\n"); #endif } // class PrettyUnitTestResultPrinter enum GTestColor { COLOR_DEFAULT, COLOR_RED, COLOR_GREEN, COLOR_YELLOW }; #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE // Returns the character attribute for the given color. WORD GetColorAttribute(GTestColor color) { switch (color) { case COLOR_RED: return FOREGROUND_RED; case COLOR_GREEN: return FOREGROUND_GREEN; case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN; default: return 0; } } #else // Returns the ANSI color code for the given color. COLOR_DEFAULT is // an invalid input. const char* GetAnsiColorCode(GTestColor color) { switch (color) { case COLOR_RED: return "1"; case COLOR_GREEN: return "2"; case COLOR_YELLOW: return "3"; default: return NULL; }; } #endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE // Returns true iff Google Test should use colors in the output. bool ShouldUseColor(bool stdout_is_tty) { const char* const gtest_color = GTEST_FLAG(color).c_str(); if (String::CaseInsensitiveCStringEquals(gtest_color, "auto")) { #if GTEST_OS_WINDOWS // On Windows the TERM variable is usually not set, but the // console there does support colors. return stdout_is_tty; #else // On non-Windows platforms, we rely on the TERM variable. const char* const term = posix::GetEnv("TERM"); const bool term_supports_color = String::CStringEquals(term, "xterm") || String::CStringEquals(term, "xterm-color") || String::CStringEquals(term, "xterm-256color") || String::CStringEquals(term, "screen") || String::CStringEquals(term, "screen-256color") || String::CStringEquals(term, "linux") || String::CStringEquals(term, "cygwin"); return stdout_is_tty && term_supports_color; #endif // GTEST_OS_WINDOWS } return String::CaseInsensitiveCStringEquals(gtest_color, "yes") || String::CaseInsensitiveCStringEquals(gtest_color, "true") || String::CaseInsensitiveCStringEquals(gtest_color, "t") || String::CStringEquals(gtest_color, "1"); // We take "yes", "true", "t", and "1" as meaning "yes". If the // value is neither one of these nor "auto", we treat it as "no" to // be conservative. } // Helpers for printing colored strings to stdout. Note that on Windows, we // cannot simply emit special characters and have the terminal change colors. // This routine must actually emit the characters rather than return a string // that would be colored when printed, as can be done on Linux. void ColoredPrintf(GTestColor color, const char* fmt, ...) { va_list args; va_start(args, fmt); #if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS || GTEST_OS_IOS const bool use_color = false; #else static const bool in_color_mode = ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0); const bool use_color = in_color_mode && (color != COLOR_DEFAULT); #endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS // The '!= 0' comparison is necessary to satisfy MSVC 7.1. if (!use_color) { vprintf(fmt, args); va_end(args); return; } #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); // Gets the current text color. CONSOLE_SCREEN_BUFFER_INFO buffer_info; GetConsoleScreenBufferInfo(stdout_handle, &buffer_info); const WORD old_color_attrs = buffer_info.wAttributes; // We need to flush the stream buffers into the console before each // SetConsoleTextAttribute call lest it affect the text that is already // printed but has not yet reached the console. fflush(stdout); SetConsoleTextAttribute(stdout_handle, GetColorAttribute(color) | FOREGROUND_INTENSITY); vprintf(fmt, args); fflush(stdout); // Restores the text color. SetConsoleTextAttribute(stdout_handle, old_color_attrs); #else printf("\033[0;3%sm", GetAnsiColorCode(color)); vprintf(fmt, args); printf("\033[m"); // Resets the terminal to default. #endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE va_end(args); } // Text printed in Google Test's text output and --gunit_list_tests // output to label the type parameter and value parameter for a test. static const char kTypeParamLabel[] = "TypeParam"; static const char kValueParamLabel[] = "GetParam()"; void PrintFullTestCommentIfPresent(const TestInfo& test_info) { const char* const type_param = test_info.type_param(); const char* const value_param = test_info.value_param(); if (type_param != NULL || value_param != NULL) { printf(", where "); if (type_param != NULL) { printf("%s = %s", kTypeParamLabel, type_param); if (value_param != NULL) printf(" and "); } if (value_param != NULL) { printf("%s = %s", kValueParamLabel, value_param); } } } // This class implements the TestEventListener interface. // // Class PrettyUnitTestResultPrinter is copyable. class PrettyUnitTestResultPrinter : public TestEventListener { public: PrettyUnitTestResultPrinter() {} static void PrintTestName(const char * test_case, const char * test) { printf("%s.%s", test_case, test); } // The following methods override what's in the TestEventListener class. virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestCaseStart(const TestCase& test_case); virtual void OnTestStart(const TestInfo& test_info); virtual void OnTestPartResult(const TestPartResult& result); virtual void OnTestEnd(const TestInfo& test_info); virtual void OnTestCaseEnd(const TestCase& test_case); virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} private: static void PrintFailedTests(const UnitTest& unit_test); }; // Fired before each iteration of tests starts. void PrettyUnitTestResultPrinter::OnTestIterationStart( const UnitTest& unit_test, int iteration) { if (GTEST_FLAG(repeat) != 1) printf("\nRepeating all tests (iteration %d) . . .\n\n", iteration + 1); const char* const filter = GTEST_FLAG(filter).c_str(); // Prints the filter if it's not *. This reminds the user that some // tests may be skipped. if (!String::CStringEquals(filter, kUniversalFilter)) { ColoredPrintf(COLOR_YELLOW, "Note: %s filter = %s\n", GTEST_NAME_, filter); } if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) { const Int32 shard_index = Int32FromEnvOrDie(kTestShardIndex, -1); ColoredPrintf(COLOR_YELLOW, "Note: This is test shard %d of %s.\n", static_cast(shard_index) + 1, internal::posix::GetEnv(kTestTotalShards)); } if (GTEST_FLAG(shuffle)) { ColoredPrintf(COLOR_YELLOW, "Note: Randomizing tests' orders with a seed of %d .\n", unit_test.random_seed()); } ColoredPrintf(COLOR_GREEN, "[==========] "); printf("Running %s from %s.\n", FormatTestCount(unit_test.test_to_run_count()).c_str(), FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); fflush(stdout); } void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart( const UnitTest& /*unit_test*/) { ColoredPrintf(COLOR_GREEN, "[----------] "); printf("Global test environment set-up.\n"); fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) { const std::string counts = FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); ColoredPrintf(COLOR_GREEN, "[----------] "); printf("%s from %s", counts.c_str(), test_case.name()); if (test_case.type_param() == NULL) { printf("\n"); } else { printf(", where %s = %s\n", kTypeParamLabel, test_case.type_param()); } fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { ColoredPrintf(COLOR_GREEN, "[ RUN ] "); PrintTestName(test_info.test_case_name(), test_info.name()); printf("\n"); fflush(stdout); } // Called after an assertion failure. void PrettyUnitTestResultPrinter::OnTestPartResult( const TestPartResult& result) { // If the test part succeeded, we don't need to do anything. if (result.type() == TestPartResult::kSuccess) return; // Print failure message from the assertion (e.g. expected this and got that). PrintTestPartResult(result); fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { if (test_info.result()->Passed()) { ColoredPrintf(COLOR_GREEN, "[ OK ] "); } else { ColoredPrintf(COLOR_RED, "[ FAILED ] "); } PrintTestName(test_info.test_case_name(), test_info.name()); if (test_info.result()->Failed()) PrintFullTestCommentIfPresent(test_info); if (GTEST_FLAG(print_time)) { printf(" (%s ms)\n", internal::StreamableToString( test_info.result()->elapsed_time()).c_str()); } else { printf("\n"); } fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) { if (!GTEST_FLAG(print_time)) return; const std::string counts = FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); ColoredPrintf(COLOR_GREEN, "[----------] "); printf("%s from %s (%s ms total)\n\n", counts.c_str(), test_case.name(), internal::StreamableToString(test_case.elapsed_time()).c_str()); fflush(stdout); } void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( const UnitTest& /*unit_test*/) { ColoredPrintf(COLOR_GREEN, "[----------] "); printf("Global test environment tear-down\n"); fflush(stdout); } // Internal helper for printing the list of failed tests. void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { const int failed_test_count = unit_test.failed_test_count(); if (failed_test_count == 0) { return; } for (int i = 0; i < unit_test.total_test_case_count(); ++i) { const TestCase& test_case = *unit_test.GetTestCase(i); if (!test_case.should_run() || (test_case.failed_test_count() == 0)) { continue; } for (int j = 0; j < test_case.total_test_count(); ++j) { const TestInfo& test_info = *test_case.GetTestInfo(j); if (!test_info.should_run() || test_info.result()->Passed()) { continue; } ColoredPrintf(COLOR_RED, "[ FAILED ] "); printf("%s.%s", test_case.name(), test_info.name()); PrintFullTestCommentIfPresent(test_info); printf("\n"); } } } void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, int /*iteration*/) { ColoredPrintf(COLOR_GREEN, "[==========] "); printf("%s from %s ran.", FormatTestCount(unit_test.test_to_run_count()).c_str(), FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); if (GTEST_FLAG(print_time)) { printf(" (%s ms total)", internal::StreamableToString(unit_test.elapsed_time()).c_str()); } printf("\n"); ColoredPrintf(COLOR_GREEN, "[ PASSED ] "); printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str()); int num_failures = unit_test.failed_test_count(); if (!unit_test.Passed()) { const int failed_test_count = unit_test.failed_test_count(); ColoredPrintf(COLOR_RED, "[ FAILED ] "); printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str()); PrintFailedTests(unit_test); printf("\n%2d FAILED %s\n", num_failures, num_failures == 1 ? "TEST" : "TESTS"); } int num_disabled = unit_test.reportable_disabled_test_count(); if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) { if (!num_failures) { printf("\n"); // Add a spacer if no FAILURE banner is displayed. } ColoredPrintf(COLOR_YELLOW, " YOU HAVE %d DISABLED %s\n\n", num_disabled, num_disabled == 1 ? "TEST" : "TESTS"); } // Ensure that Google Test output is printed before, e.g., heapchecker output. fflush(stdout); } // End PrettyUnitTestResultPrinter // class TestEventRepeater // // This class forwards events to other event listeners. class TestEventRepeater : public TestEventListener { public: TestEventRepeater() : forwarding_enabled_(true) {} virtual ~TestEventRepeater(); void Append(TestEventListener *listener); TestEventListener* Release(TestEventListener* listener); // Controls whether events will be forwarded to listeners_. Set to false // in death test child processes. bool forwarding_enabled() const { return forwarding_enabled_; } void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; } virtual void OnTestProgramStart(const UnitTest& unit_test); virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test); virtual void OnTestCaseStart(const TestCase& test_case); virtual void OnTestStart(const TestInfo& test_info); virtual void OnTestPartResult(const TestPartResult& result); virtual void OnTestEnd(const TestInfo& test_info); virtual void OnTestCaseEnd(const TestCase& test_case); virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test); virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); virtual void OnTestProgramEnd(const UnitTest& unit_test); private: // Controls whether events will be forwarded to listeners_. Set to false // in death test child processes. bool forwarding_enabled_; // The list of listeners that receive events. std::vector listeners_; GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater); }; TestEventRepeater::~TestEventRepeater() { ForEach(listeners_, Delete); } void TestEventRepeater::Append(TestEventListener *listener) { listeners_.push_back(listener); } // TODO(vladl@google.com): Factor the search functionality into Vector::Find. TestEventListener* TestEventRepeater::Release(TestEventListener *listener) { for (size_t i = 0; i < listeners_.size(); ++i) { if (listeners_[i] == listener) { listeners_.erase(listeners_.begin() + i); return listener; } } return NULL; } // Since most methods are very similar, use macros to reduce boilerplate. // This defines a member that forwards the call to all listeners. #define GTEST_REPEATER_METHOD_(Name, Type) \ void TestEventRepeater::Name(const Type& parameter) { \ if (forwarding_enabled_) { \ for (size_t i = 0; i < listeners_.size(); i++) { \ listeners_[i]->Name(parameter); \ } \ } \ } // This defines a member that forwards the call to all listeners in reverse // order. #define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \ void TestEventRepeater::Name(const Type& parameter) { \ if (forwarding_enabled_) { \ for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { \ listeners_[i]->Name(parameter); \ } \ } \ } GTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest) GTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest) GTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase) GTEST_REPEATER_METHOD_(OnTestStart, TestInfo) GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult) GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo) GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase) GTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest) #undef GTEST_REPEATER_METHOD_ #undef GTEST_REVERSE_REPEATER_METHOD_ void TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test, int iteration) { if (forwarding_enabled_) { for (size_t i = 0; i < listeners_.size(); i++) { listeners_[i]->OnTestIterationStart(unit_test, iteration); } } } void TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test, int iteration) { if (forwarding_enabled_) { for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { listeners_[i]->OnTestIterationEnd(unit_test, iteration); } } } // End TestEventRepeater // This class generates an XML output file. class XmlUnitTestResultPrinter : public EmptyTestEventListener { public: explicit XmlUnitTestResultPrinter(const char* output_file); virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); private: // Is c a whitespace character that is normalized to a space character // when it appears in an XML attribute value? static bool IsNormalizableWhitespace(char c) { return c == 0x9 || c == 0xA || c == 0xD; } // May c appear in a well-formed XML document? static bool IsValidXmlCharacter(char c) { return IsNormalizableWhitespace(c) || c >= 0x20; } // Returns an XML-escaped copy of the input string str. If // is_attribute is true, the text is meant to appear as an attribute // value, and normalizable whitespace is preserved by replacing it // with character references. static std::string EscapeXml(const std::string& str, bool is_attribute); // Returns the given string with all characters invalid in XML removed. static std::string RemoveInvalidXmlCharacters(const std::string& str); // Convenience wrapper around EscapeXml when str is an attribute value. static std::string EscapeXmlAttribute(const std::string& str) { return EscapeXml(str, true); } // Convenience wrapper around EscapeXml when str is not an attribute value. static std::string EscapeXmlText(const char* str) { return EscapeXml(str, false); } // Verifies that the given attribute belongs to the given element and // streams the attribute as XML. static void OutputXmlAttribute(std::ostream* stream, const std::string& element_name, const std::string& name, const std::string& value); // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. static void OutputXmlCDataSection(::std::ostream* stream, const char* data); // Streams an XML representation of a TestInfo object. static void OutputXmlTestInfo(::std::ostream* stream, const char* test_case_name, const TestInfo& test_info); // Prints an XML representation of a TestCase object static void PrintXmlTestCase(::std::ostream* stream, const TestCase& test_case); // Prints an XML summary of unit_test to output stream out. static void PrintXmlUnitTest(::std::ostream* stream, const UnitTest& unit_test); // Produces a string representing the test properties in a result as space // delimited XML attributes based on the property key="value" pairs. // When the std::string is not empty, it includes a space at the beginning, // to delimit this attribute from prior attributes. static std::string TestPropertiesAsXmlAttributes(const TestResult& result); // The output file. const std::string output_file_; GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter); }; // Creates a new XmlUnitTestResultPrinter. XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file) : output_file_(output_file) { if (output_file_.c_str() == NULL || output_file_.empty()) { fprintf(stderr, "XML output file may not be null\n"); fflush(stderr); exit(EXIT_FAILURE); } } // Called after the unit test ends. void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, int /*iteration*/) { FILE* xmlout = NULL; FilePath output_file(output_file_); FilePath output_dir(output_file.RemoveFileName()); if (output_dir.CreateDirectoriesRecursively()) { xmlout = posix::FOpen(output_file_.c_str(), "w"); } if (xmlout == NULL) { // TODO(wan): report the reason of the failure. // // We don't do it for now as: // // 1. There is no urgent need for it. // 2. It's a bit involved to make the errno variable thread-safe on // all three operating systems (Linux, Windows, and Mac OS). // 3. To interpret the meaning of errno in a thread-safe way, // we need the strerror_r() function, which is not available on // Windows. fprintf(stderr, "Unable to open file \"%s\"\n", output_file_.c_str()); fflush(stderr); exit(EXIT_FAILURE); } std::stringstream stream; PrintXmlUnitTest(&stream, unit_test); fprintf(xmlout, "%s", StringStreamToString(&stream).c_str()); fclose(xmlout); } // Returns an XML-escaped copy of the input string str. If is_attribute // is true, the text is meant to appear as an attribute value, and // normalizable whitespace is preserved by replacing it with character // references. // // Invalid XML characters in str, if any, are stripped from the output. // It is expected that most, if not all, of the text processed by this // module will consist of ordinary English text. // If this module is ever modified to produce version 1.1 XML output, // most invalid characters can be retained using character references. // TODO(wan): It might be nice to have a minimally invasive, human-readable // escaping scheme for invalid characters, rather than dropping them. std::string XmlUnitTestResultPrinter::EscapeXml( const std::string& str, bool is_attribute) { Message m; for (size_t i = 0; i < str.size(); ++i) { const char ch = str[i]; switch (ch) { case '<': m << "<"; break; case '>': m << ">"; break; case '&': m << "&"; break; case '\'': if (is_attribute) m << "'"; else m << '\''; break; case '"': if (is_attribute) m << """; else m << '"'; break; default: if (IsValidXmlCharacter(ch)) { if (is_attribute && IsNormalizableWhitespace(ch)) m << "&#x" << String::FormatByte(static_cast(ch)) << ";"; else m << ch; } break; } } return m.GetString(); } // Returns the given string with all characters invalid in XML removed. // Currently invalid characters are dropped from the string. An // alternative is to replace them with certain characters such as . or ?. std::string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters( const std::string& str) { std::string output; output.reserve(str.size()); for (std::string::const_iterator it = str.begin(); it != str.end(); ++it) if (IsValidXmlCharacter(*it)) output.push_back(*it); return output; } // The following routines generate an XML representation of a UnitTest // object. // // This is how Google Test concepts map to the DTD: // // <-- corresponds to a UnitTest object // <-- corresponds to a TestCase object // <-- corresponds to a TestInfo object // ... // ... // ... // <-- individual assertion failures // // // // Formats the given time in milliseconds as seconds. std::string FormatTimeInMillisAsSeconds(TimeInMillis ms) { ::std::stringstream ss; ss << ms/1000.0; return ss.str(); } // Converts the given epoch time in milliseconds to a date string in the ISO // 8601 format, without the timezone information. std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms) { // Using non-reentrant version as localtime_r is not portable. time_t seconds = static_cast(ms / 1000); #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4996) // Temporarily disables warning 4996 // (function or variable may be unsafe). const struct tm* const time_struct = localtime(&seconds); // NOLINT # pragma warning(pop) // Restores the warning state again. #else const struct tm* const time_struct = localtime(&seconds); // NOLINT #endif if (time_struct == NULL) return ""; // Invalid ms value // YYYY-MM-DDThh:mm:ss return StreamableToString(time_struct->tm_year + 1900) + "-" + String::FormatIntWidth2(time_struct->tm_mon + 1) + "-" + String::FormatIntWidth2(time_struct->tm_mday) + "T" + String::FormatIntWidth2(time_struct->tm_hour) + ":" + String::FormatIntWidth2(time_struct->tm_min) + ":" + String::FormatIntWidth2(time_struct->tm_sec); } // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream, const char* data) { const char* segment = data; *stream << ""); if (next_segment != NULL) { stream->write( segment, static_cast(next_segment - segment)); *stream << "]]>]]>"); } else { *stream << segment; break; } } *stream << "]]>"; } void XmlUnitTestResultPrinter::OutputXmlAttribute( std::ostream* stream, const std::string& element_name, const std::string& name, const std::string& value) { const std::vector& allowed_names = GetReservedAttributesForElement(element_name); GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) != allowed_names.end()) << "Attribute " << name << " is not allowed for element <" << element_name << ">."; *stream << " " << name << "=\"" << EscapeXmlAttribute(value) << "\""; } // Prints an XML representation of a TestInfo object. // TODO(wan): There is also value in printing properties with the plain printer. void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, const char* test_case_name, const TestInfo& test_info) { const TestResult& result = *test_info.result(); const std::string kTestcase = "testcase"; *stream << " \n"; } const string location = internal::FormatCompilerIndependentFileLocation( part.file_name(), part.line_number()); const string summary = location + "\n" + part.summary(); *stream << " "; const string detail = location + "\n" + part.message(); OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str()); *stream << "\n"; } } if (failures == 0) *stream << " />\n"; else *stream << " \n"; } // Prints an XML representation of a TestCase object void XmlUnitTestResultPrinter::PrintXmlTestCase(std::ostream* stream, const TestCase& test_case) { const std::string kTestsuite = "testsuite"; *stream << " <" << kTestsuite; OutputXmlAttribute(stream, kTestsuite, "name", test_case.name()); OutputXmlAttribute(stream, kTestsuite, "tests", StreamableToString(test_case.reportable_test_count())); OutputXmlAttribute(stream, kTestsuite, "failures", StreamableToString(test_case.failed_test_count())); OutputXmlAttribute( stream, kTestsuite, "disabled", StreamableToString(test_case.reportable_disabled_test_count())); OutputXmlAttribute(stream, kTestsuite, "errors", "0"); OutputXmlAttribute(stream, kTestsuite, "time", FormatTimeInMillisAsSeconds(test_case.elapsed_time())); *stream << TestPropertiesAsXmlAttributes(test_case.ad_hoc_test_result()) << ">\n"; for (int i = 0; i < test_case.total_test_count(); ++i) { if (test_case.GetTestInfo(i)->is_reportable()) OutputXmlTestInfo(stream, test_case.name(), *test_case.GetTestInfo(i)); } *stream << " \n"; } // Prints an XML summary of unit_test to output stream out. void XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream, const UnitTest& unit_test) { const std::string kTestsuites = "testsuites"; *stream << "\n"; *stream << "<" << kTestsuites; OutputXmlAttribute(stream, kTestsuites, "tests", StreamableToString(unit_test.reportable_test_count())); OutputXmlAttribute(stream, kTestsuites, "failures", StreamableToString(unit_test.failed_test_count())); OutputXmlAttribute( stream, kTestsuites, "disabled", StreamableToString(unit_test.reportable_disabled_test_count())); OutputXmlAttribute(stream, kTestsuites, "errors", "0"); OutputXmlAttribute( stream, kTestsuites, "timestamp", FormatEpochTimeInMillisAsIso8601(unit_test.start_timestamp())); OutputXmlAttribute(stream, kTestsuites, "time", FormatTimeInMillisAsSeconds(unit_test.elapsed_time())); if (GTEST_FLAG(shuffle)) { OutputXmlAttribute(stream, kTestsuites, "random_seed", StreamableToString(unit_test.random_seed())); } *stream << TestPropertiesAsXmlAttributes(unit_test.ad_hoc_test_result()); OutputXmlAttribute(stream, kTestsuites, "name", "AllTests"); *stream << ">\n"; for (int i = 0; i < unit_test.total_test_case_count(); ++i) { if (unit_test.GetTestCase(i)->reportable_test_count() > 0) PrintXmlTestCase(stream, *unit_test.GetTestCase(i)); } *stream << "\n"; } // Produces a string representing the test properties in a result as space // delimited XML attributes based on the property key="value" pairs. std::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes( const TestResult& result) { Message attributes; for (int i = 0; i < result.test_property_count(); ++i) { const TestProperty& property = result.GetTestProperty(i); attributes << " " << property.key() << "=" << "\"" << EscapeXmlAttribute(property.value()) << "\""; } return attributes.GetString(); } // End XmlUnitTestResultPrinter #if GTEST_CAN_STREAM_RESULTS_ // Checks if str contains '=', '&', '%' or '\n' characters. If yes, // replaces them by "%xx" where xx is their hexadecimal value. For // example, replaces "=" with "%3D". This algorithm is O(strlen(str)) // in both time and space -- important as the input str may contain an // arbitrarily long test failure message and stack trace. string StreamingListener::UrlEncode(const char* str) { string result; result.reserve(strlen(str) + 1); for (char ch = *str; ch != '\0'; ch = *++str) { switch (ch) { case '%': case '=': case '&': case '\n': result.append("%" + String::FormatByte(static_cast(ch))); break; default: result.push_back(ch); break; } } return result; } void StreamingListener::SocketWriter::MakeConnection() { GTEST_CHECK_(sockfd_ == -1) << "MakeConnection() can't be called when there is already a connection."; addrinfo hints; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; // To allow both IPv4 and IPv6 addresses. hints.ai_socktype = SOCK_STREAM; addrinfo* servinfo = NULL; // Use the getaddrinfo() to get a linked list of IP addresses for // the given host name. const int error_num = getaddrinfo( host_name_.c_str(), port_num_.c_str(), &hints, &servinfo); if (error_num != 0) { GTEST_LOG_(WARNING) << "stream_result_to: getaddrinfo() failed: " << gai_strerror(error_num); } // Loop through all the results and connect to the first we can. for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != NULL; cur_addr = cur_addr->ai_next) { sockfd_ = socket( cur_addr->ai_family, cur_addr->ai_socktype, cur_addr->ai_protocol); if (sockfd_ != -1) { // Connect the client socket to the server socket. if (connect(sockfd_, cur_addr->ai_addr, cur_addr->ai_addrlen) == -1) { close(sockfd_); sockfd_ = -1; } } } freeaddrinfo(servinfo); // all done with this structure if (sockfd_ == -1) { GTEST_LOG_(WARNING) << "stream_result_to: failed to connect to " << host_name_ << ":" << port_num_; } } // End of class Streaming Listener #endif // GTEST_CAN_STREAM_RESULTS__ // Class ScopedTrace // Pushes the given source file location and message onto a per-thread // trace stack maintained by Google Test. ScopedTrace::ScopedTrace(const char* file, int line, const Message& message) GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { TraceInfo trace; trace.file = file; trace.line = line; trace.message = message.GetString(); UnitTest::GetInstance()->PushGTestTrace(trace); } // Pops the info pushed by the c'tor. ScopedTrace::~ScopedTrace() GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { UnitTest::GetInstance()->PopGTestTrace(); } // class OsStackTraceGetter // Returns the current OS stack trace as an std::string. Parameters: // // max_depth - the maximum number of stack frames to be included // in the trace. // skip_count - the number of top frames to be skipped; doesn't count // against max_depth. // string OsStackTraceGetter::CurrentStackTrace(int /* max_depth */, int /* skip_count */) GTEST_LOCK_EXCLUDED_(mutex_) { return ""; } void OsStackTraceGetter::UponLeavingGTest() GTEST_LOCK_EXCLUDED_(mutex_) { } const char* const OsStackTraceGetter::kElidedFramesMarker = "... " GTEST_NAME_ " internal frames ..."; // A helper class that creates the premature-exit file in its // constructor and deletes the file in its destructor. class ScopedPrematureExitFile { public: explicit ScopedPrematureExitFile(const char* premature_exit_filepath) : premature_exit_filepath_(premature_exit_filepath) { // If a path to the premature-exit file is specified... if (premature_exit_filepath != NULL && *premature_exit_filepath != '\0') { // create the file with a single "0" character in it. I/O // errors are ignored as there's nothing better we can do and we // don't want to fail the test because of this. FILE* pfile = posix::FOpen(premature_exit_filepath, "w"); fwrite("0", 1, 1, pfile); fclose(pfile); } } ~ScopedPrematureExitFile() { if (premature_exit_filepath_ != NULL && *premature_exit_filepath_ != '\0') { remove(premature_exit_filepath_); } } private: const char* const premature_exit_filepath_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedPrematureExitFile); }; } // namespace internal // class TestEventListeners TestEventListeners::TestEventListeners() : repeater_(new internal::TestEventRepeater()), default_result_printer_(NULL), default_xml_generator_(NULL) { } TestEventListeners::~TestEventListeners() { delete repeater_; } // Returns the standard listener responsible for the default console // output. Can be removed from the listeners list to shut down default // console output. Note that removing this object from the listener list // with Release transfers its ownership to the user. void TestEventListeners::Append(TestEventListener* listener) { repeater_->Append(listener); } // Removes the given event listener from the list and returns it. It then // becomes the caller's responsibility to delete the listener. Returns // NULL if the listener is not found in the list. TestEventListener* TestEventListeners::Release(TestEventListener* listener) { if (listener == default_result_printer_) default_result_printer_ = NULL; else if (listener == default_xml_generator_) default_xml_generator_ = NULL; return repeater_->Release(listener); } // Returns repeater that broadcasts the TestEventListener events to all // subscribers. TestEventListener* TestEventListeners::repeater() { return repeater_; } // Sets the default_result_printer attribute to the provided listener. // The listener is also added to the listener list and previous // default_result_printer is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) { if (default_result_printer_ != listener) { // It is an error to pass this method a listener that is already in the // list. delete Release(default_result_printer_); default_result_printer_ = listener; if (listener != NULL) Append(listener); } } // Sets the default_xml_generator attribute to the provided listener. The // listener is also added to the listener list and previous // default_xml_generator is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) { if (default_xml_generator_ != listener) { // It is an error to pass this method a listener that is already in the // list. delete Release(default_xml_generator_); default_xml_generator_ = listener; if (listener != NULL) Append(listener); } } // Controls whether events will be forwarded by the repeater to the // listeners in the list. bool TestEventListeners::EventForwardingEnabled() const { return repeater_->forwarding_enabled(); } void TestEventListeners::SuppressEventForwarding() { repeater_->set_forwarding_enabled(false); } // class UnitTest // Gets the singleton UnitTest object. The first time this method is // called, a UnitTest object is constructed and returned. Consecutive // calls will return the same object. // // We don't protect this under mutex_ as a user is not supposed to // call this before main() starts, from which point on the return // value will never change. UnitTest* UnitTest::GetInstance() { // When compiled with MSVC 7.1 in optimized mode, destroying the // UnitTest object upon exiting the program messes up the exit code, // causing successful tests to appear failed. We have to use a // different implementation in this case to bypass the compiler bug. // This implementation makes the compiler happy, at the cost of // leaking the UnitTest object. // CodeGear C++Builder insists on a public destructor for the // default implementation. Use this implementation to keep good OO // design with private destructor. #if (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) static UnitTest* const instance = new UnitTest; return instance; #else static UnitTest instance; return &instance; #endif // (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) } // Gets the number of successful test cases. int UnitTest::successful_test_case_count() const { return impl()->successful_test_case_count(); } // Gets the number of failed test cases. int UnitTest::failed_test_case_count() const { return impl()->failed_test_case_count(); } // Gets the number of all test cases. int UnitTest::total_test_case_count() const { return impl()->total_test_case_count(); } // Gets the number of all test cases that contain at least one test // that should run. int UnitTest::test_case_to_run_count() const { return impl()->test_case_to_run_count(); } // Gets the number of successful tests. int UnitTest::successful_test_count() const { return impl()->successful_test_count(); } // Gets the number of failed tests. int UnitTest::failed_test_count() const { return impl()->failed_test_count(); } // Gets the number of disabled tests that will be reported in the XML report. int UnitTest::reportable_disabled_test_count() const { return impl()->reportable_disabled_test_count(); } // Gets the number of disabled tests. int UnitTest::disabled_test_count() const { return impl()->disabled_test_count(); } // Gets the number of tests to be printed in the XML report. int UnitTest::reportable_test_count() const { return impl()->reportable_test_count(); } // Gets the number of all tests. int UnitTest::total_test_count() const { return impl()->total_test_count(); } // Gets the number of tests that should run. int UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); } // Gets the time of the test program start, in ms from the start of the // UNIX epoch. internal::TimeInMillis UnitTest::start_timestamp() const { return impl()->start_timestamp(); } // Gets the elapsed time, in milliseconds. internal::TimeInMillis UnitTest::elapsed_time() const { return impl()->elapsed_time(); } // Returns true iff the unit test passed (i.e. all test cases passed). bool UnitTest::Passed() const { return impl()->Passed(); } // Returns true iff the unit test failed (i.e. some test case failed // or something outside of all tests failed). bool UnitTest::Failed() const { return impl()->Failed(); } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. const TestCase* UnitTest::GetTestCase(int i) const { return impl()->GetTestCase(i); } // Returns the TestResult containing information on test failures and // properties logged outside of individual test cases. const TestResult& UnitTest::ad_hoc_test_result() const { return *impl()->ad_hoc_test_result(); } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. TestCase* UnitTest::GetMutableTestCase(int i) { return impl()->GetMutableTestCase(i); } // Returns the list of event listeners that can be used to track events // inside Google Test. TestEventListeners& UnitTest::listeners() { return *impl()->listeners(); } // Registers and returns a global test environment. When a test // program is run, all global test environments will be set-up in the // order they were registered. After all tests in the program have // finished, all global test environments will be torn-down in the // *reverse* order they were registered. // // The UnitTest object takes ownership of the given environment. // // We don't protect this under mutex_, as we only support calling it // from the main thread. Environment* UnitTest::AddEnvironment(Environment* env) { if (env == NULL) { return NULL; } impl_->environments().push_back(env); return env; } // Adds a TestPartResult to the current TestResult object. All Google Test // assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call // this to report their results. The user code should use the // assertion macros instead of calling this directly. void UnitTest::AddTestPartResult( TestPartResult::Type result_type, const char* file_name, int line_number, const std::string& message, const std::string& os_stack_trace) GTEST_LOCK_EXCLUDED_(mutex_) { Message msg; msg << message; internal::MutexLock lock(&mutex_); if (impl_->gtest_trace_stack().size() > 0) { msg << "\n" << GTEST_NAME_ << " trace:"; for (int i = static_cast(impl_->gtest_trace_stack().size()); i > 0; --i) { const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1]; msg << "\n" << internal::FormatFileLocation(trace.file, trace.line) << " " << trace.message; } } if (os_stack_trace.c_str() != NULL && !os_stack_trace.empty()) { msg << internal::kStackTraceMarker << os_stack_trace; } const TestPartResult result = TestPartResult(result_type, file_name, line_number, msg.GetString().c_str()); impl_->GetTestPartResultReporterForCurrentThread()-> ReportTestPartResult(result); if (result_type != TestPartResult::kSuccess) { // gtest_break_on_failure takes precedence over // gtest_throw_on_failure. This allows a user to set the latter // in the code (perhaps in order to use Google Test assertions // with another testing framework) and specify the former on the // command line for debugging. if (GTEST_FLAG(break_on_failure)) { #if GTEST_OS_WINDOWS // Using DebugBreak on Windows allows gtest to still break into a debugger // when a failure happens and both the --gtest_break_on_failure and // the --gtest_catch_exceptions flags are specified. DebugBreak(); #else // Dereference NULL through a volatile pointer to prevent the compiler // from removing. We use this rather than abort() or __builtin_trap() for // portability: Symbian doesn't implement abort() well, and some debuggers // don't correctly trap abort(). *static_cast(NULL) = 1; #endif // GTEST_OS_WINDOWS } else if (GTEST_FLAG(throw_on_failure)) { #if GTEST_HAS_EXCEPTIONS throw internal::GoogleTestFailureException(result); #else // We cannot call abort() as it generates a pop-up in debug mode // that cannot be suppressed in VC 7.1 or below. exit(1); #endif } } } // Adds a TestProperty to the current TestResult object when invoked from // inside a test, to current TestCase's ad_hoc_test_result_ when invoked // from SetUpTestCase or TearDownTestCase, or to the global property set // when invoked elsewhere. If the result already contains a property with // the same key, the value will be updated. void UnitTest::RecordProperty(const std::string& key, const std::string& value) { impl_->RecordProperty(TestProperty(key, value)); } // Runs all tests in this UnitTest object and prints the result. // Returns 0 if successful, or 1 otherwise. // // We don't protect this under mutex_, as we only support calling it // from the main thread. int UnitTest::Run() { const bool in_death_test_child_process = internal::GTEST_FLAG(internal_run_death_test).length() > 0; // Google Test implements this protocol for catching that a test // program exits before returning control to Google Test: // // 1. Upon start, Google Test creates a file whose absolute path // is specified by the environment variable // TEST_PREMATURE_EXIT_FILE. // 2. When Google Test has finished its work, it deletes the file. // // This allows a test runner to set TEST_PREMATURE_EXIT_FILE before // running a Google-Test-based test program and check the existence // of the file at the end of the test execution to see if it has // exited prematurely. // If we are in the child process of a death test, don't // create/delete the premature exit file, as doing so is unnecessary // and will confuse the parent process. Otherwise, create/delete // the file upon entering/leaving this function. If the program // somehow exits before this function has a chance to return, the // premature-exit file will be left undeleted, causing a test runner // that understands the premature-exit-file protocol to report the // test as having failed. const internal::ScopedPrematureExitFile premature_exit_file( in_death_test_child_process ? NULL : internal::posix::GetEnv("TEST_PREMATURE_EXIT_FILE")); // Captures the value of GTEST_FLAG(catch_exceptions). This value will be // used for the duration of the program. impl()->set_catch_exceptions(GTEST_FLAG(catch_exceptions)); #if GTEST_HAS_SEH // Either the user wants Google Test to catch exceptions thrown by the // tests or this is executing in the context of death test child // process. In either case the user does not want to see pop-up dialogs // about crashes - they are expected. if (impl()->catch_exceptions() || in_death_test_child_process) { # if !GTEST_OS_WINDOWS_MOBILE // SetErrorMode doesn't exist on CE. SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); # endif // !GTEST_OS_WINDOWS_MOBILE # if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE // Death test children can be terminated with _abort(). On Windows, // _abort() can show a dialog with a warning message. This forces the // abort message to go to stderr instead. _set_error_mode(_OUT_TO_STDERR); # endif # if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE // In the debug version, Visual Studio pops up a separate dialog // offering a choice to debug the aborted program. We need to suppress // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement // executed. Google Test will notify the user of any unexpected // failure via stderr. // // VC++ doesn't define _set_abort_behavior() prior to the version 8.0. // Users of prior VC versions shall suffer the agony and pain of // clicking through the countless debug dialogs. // TODO(vladl@google.com): find a way to suppress the abort dialog() in the // debug mode when compiled with VC 7.1 or lower. if (!GTEST_FLAG(break_on_failure)) _set_abort_behavior( 0x0, // Clear the following flags: _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump. # endif } #endif // GTEST_HAS_SEH return internal::HandleExceptionsInMethodIfSupported( impl(), &internal::UnitTestImpl::RunAllTests, "auxiliary test code (environments or event listeners)") ? 0 : 1; } // Returns the working directory when the first TEST() or TEST_F() was // executed. const char* UnitTest::original_working_dir() const { return impl_->original_working_dir_.c_str(); } // Returns the TestCase object for the test that's currently running, // or NULL if no test is running. const TestCase* UnitTest::current_test_case() const GTEST_LOCK_EXCLUDED_(mutex_) { internal::MutexLock lock(&mutex_); return impl_->current_test_case(); } // Returns the TestInfo object for the test that's currently running, // or NULL if no test is running. const TestInfo* UnitTest::current_test_info() const GTEST_LOCK_EXCLUDED_(mutex_) { internal::MutexLock lock(&mutex_); return impl_->current_test_info(); } // Returns the random seed used at the start of the current test run. int UnitTest::random_seed() const { return impl_->random_seed(); } #if GTEST_HAS_PARAM_TEST // Returns ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. internal::ParameterizedTestCaseRegistry& UnitTest::parameterized_test_registry() GTEST_LOCK_EXCLUDED_(mutex_) { return impl_->parameterized_test_registry(); } #endif // GTEST_HAS_PARAM_TEST // Creates an empty UnitTest. UnitTest::UnitTest() { impl_ = new internal::UnitTestImpl(this); } // Destructor of UnitTest. UnitTest::~UnitTest() { delete impl_; } // Pushes a trace defined by SCOPED_TRACE() on to the per-thread // Google Test trace stack. void UnitTest::PushGTestTrace(const internal::TraceInfo& trace) GTEST_LOCK_EXCLUDED_(mutex_) { internal::MutexLock lock(&mutex_); impl_->gtest_trace_stack().push_back(trace); } // Pops a trace from the per-thread Google Test trace stack. void UnitTest::PopGTestTrace() GTEST_LOCK_EXCLUDED_(mutex_) { internal::MutexLock lock(&mutex_); impl_->gtest_trace_stack().pop_back(); } namespace internal { UnitTestImpl::UnitTestImpl(UnitTest* parent) : parent_(parent), #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4355) // Temporarily disables warning 4355 // (using this in initializer). default_global_test_part_result_reporter_(this), default_per_thread_test_part_result_reporter_(this), # pragma warning(pop) // Restores the warning state again. #else default_global_test_part_result_reporter_(this), default_per_thread_test_part_result_reporter_(this), #endif // _MSC_VER global_test_part_result_repoter_( &default_global_test_part_result_reporter_), per_thread_test_part_result_reporter_( &default_per_thread_test_part_result_reporter_), #if GTEST_HAS_PARAM_TEST parameterized_test_registry_(), parameterized_tests_registered_(false), #endif // GTEST_HAS_PARAM_TEST last_death_test_case_(-1), current_test_case_(NULL), current_test_info_(NULL), ad_hoc_test_result_(), os_stack_trace_getter_(NULL), post_flag_parse_init_performed_(false), random_seed_(0), // Will be overridden by the flag before first use. random_(0), // Will be reseeded before first use. start_timestamp_(0), elapsed_time_(0), #if GTEST_HAS_DEATH_TEST death_test_factory_(new DefaultDeathTestFactory), #endif // Will be overridden by the flag before first use. catch_exceptions_(false) { listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter); } UnitTestImpl::~UnitTestImpl() { // Deletes every TestCase. ForEach(test_cases_, internal::Delete); // Deletes every Environment. ForEach(environments_, internal::Delete); delete os_stack_trace_getter_; } // Adds a TestProperty to the current TestResult object when invoked in a // context of a test, to current test case's ad_hoc_test_result when invoke // from SetUpTestCase/TearDownTestCase, or to the global property set // otherwise. If the result already contains a property with the same key, // the value will be updated. void UnitTestImpl::RecordProperty(const TestProperty& test_property) { std::string xml_element; TestResult* test_result; // TestResult appropriate for property recording. if (current_test_info_ != NULL) { xml_element = "testcase"; test_result = &(current_test_info_->result_); } else if (current_test_case_ != NULL) { xml_element = "testsuite"; test_result = &(current_test_case_->ad_hoc_test_result_); } else { xml_element = "testsuites"; test_result = &ad_hoc_test_result_; } test_result->RecordProperty(xml_element, test_property); } #if GTEST_HAS_DEATH_TEST // Disables event forwarding if the control is currently in a death test // subprocess. Must not be called before InitGoogleTest. void UnitTestImpl::SuppressTestEventsIfInSubprocess() { if (internal_run_death_test_flag_.get() != NULL) listeners()->SuppressEventForwarding(); } #endif // GTEST_HAS_DEATH_TEST // Initializes event listeners performing XML output as specified by // UnitTestOptions. Must not be called before InitGoogleTest. void UnitTestImpl::ConfigureXmlOutput() { const std::string& output_format = UnitTestOptions::GetOutputFormat(); if (output_format == "xml") { listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter( UnitTestOptions::GetAbsolutePathToOutputFile().c_str())); } else if (output_format != "") { printf("WARNING: unrecognized output format \"%s\" ignored.\n", output_format.c_str()); fflush(stdout); } } #if GTEST_CAN_STREAM_RESULTS_ // Initializes event listeners for streaming test results in string form. // Must not be called before InitGoogleTest. void UnitTestImpl::ConfigureStreamingOutput() { const std::string& target = GTEST_FLAG(stream_result_to); if (!target.empty()) { const size_t pos = target.find(':'); if (pos != std::string::npos) { listeners()->Append(new StreamingListener(target.substr(0, pos), target.substr(pos+1))); } else { printf("WARNING: unrecognized streaming target \"%s\" ignored.\n", target.c_str()); fflush(stdout); } } } #endif // GTEST_CAN_STREAM_RESULTS_ // Performs initialization dependent upon flag values obtained in // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest // this function is also called from RunAllTests. Since this function can be // called more than once, it has to be idempotent. void UnitTestImpl::PostFlagParsingInit() { // Ensures that this function does not execute more than once. if (!post_flag_parse_init_performed_) { post_flag_parse_init_performed_ = true; #if GTEST_HAS_DEATH_TEST InitDeathTestSubprocessControlInfo(); SuppressTestEventsIfInSubprocess(); #endif // GTEST_HAS_DEATH_TEST // Registers parameterized tests. This makes parameterized tests // available to the UnitTest reflection API without running // RUN_ALL_TESTS. RegisterParameterizedTests(); // Configures listeners for XML output. This makes it possible for users // to shut down the default XML output before invoking RUN_ALL_TESTS. ConfigureXmlOutput(); #if GTEST_CAN_STREAM_RESULTS_ // Configures listeners for streaming test results to the specified server. ConfigureStreamingOutput(); #endif // GTEST_CAN_STREAM_RESULTS_ } } // A predicate that checks the name of a TestCase against a known // value. // // This is used for implementation of the UnitTest class only. We put // it in the anonymous namespace to prevent polluting the outer // namespace. // // TestCaseNameIs is copyable. class TestCaseNameIs { public: // Constructor. explicit TestCaseNameIs(const std::string& name) : name_(name) {} // Returns true iff the name of test_case matches name_. bool operator()(const TestCase* test_case) const { return test_case != NULL && strcmp(test_case->name(), name_.c_str()) == 0; } private: std::string name_; }; // Finds and returns a TestCase with the given name. If one doesn't // exist, creates one and returns it. It's the CALLER'S // RESPONSIBILITY to ensure that this function is only called WHEN THE // TESTS ARE NOT SHUFFLED. // // Arguments: // // test_case_name: name of the test case // type_param: the name of the test case's type parameter, or NULL if // this is not a typed or a type-parameterized test case. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase* UnitTestImpl::GetTestCase(const char* test_case_name, const char* type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc) { // Can we find a TestCase with the given name? const std::vector::const_iterator test_case = std::find_if(test_cases_.begin(), test_cases_.end(), TestCaseNameIs(test_case_name)); if (test_case != test_cases_.end()) return *test_case; // No. Let's create one. TestCase* const new_test_case = new TestCase(test_case_name, type_param, set_up_tc, tear_down_tc); // Is this a death test case? if (internal::UnitTestOptions::MatchesFilter(test_case_name, kDeathTestCaseFilter)) { // Yes. Inserts the test case after the last death test case // defined so far. This only works when the test cases haven't // been shuffled. Otherwise we may end up running a death test // after a non-death test. ++last_death_test_case_; test_cases_.insert(test_cases_.begin() + last_death_test_case_, new_test_case); } else { // No. Appends to the end of the list. test_cases_.push_back(new_test_case); } test_case_indices_.push_back(static_cast(test_case_indices_.size())); return new_test_case; } // Helpers for setting up / tearing down the given environment. They // are for use in the ForEach() function. static void SetUpEnvironment(Environment* env) { env->SetUp(); } static void TearDownEnvironment(Environment* env) { env->TearDown(); } // Runs all tests in this UnitTest object, prints the result, and // returns true if all tests are successful. If any exception is // thrown during a test, the test is considered to be failed, but the // rest of the tests will still be run. // // When parameterized tests are enabled, it expands and registers // parameterized tests first in RegisterParameterizedTests(). // All other functions called from RunAllTests() may safely assume that // parameterized tests are ready to be counted and run. bool UnitTestImpl::RunAllTests() { // Makes sure InitGoogleTest() was called. if (!GTestIsInitialized()) { printf("%s", "\nThis test program did NOT call ::testing::InitGoogleTest " "before calling RUN_ALL_TESTS(). Please fix it.\n"); return false; } // Do not run any test if the --help flag was specified. if (g_help_flag) return true; // Repeats the call to the post-flag parsing initialization in case the // user didn't call InitGoogleTest. PostFlagParsingInit(); // Even if sharding is not on, test runners may want to use the // GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding // protocol. internal::WriteToShardStatusFileIfNeeded(); // True iff we are in a subprocess for running a thread-safe-style // death test. bool in_subprocess_for_death_test = false; #if GTEST_HAS_DEATH_TEST in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL); #endif // GTEST_HAS_DEATH_TEST const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex, in_subprocess_for_death_test); // Compares the full test names with the filter to decide which // tests to run. const bool has_tests_to_run = FilterTests(should_shard ? HONOR_SHARDING_PROTOCOL : IGNORE_SHARDING_PROTOCOL) > 0; // Lists the tests and exits if the --gtest_list_tests flag was specified. if (GTEST_FLAG(list_tests)) { // This must be called *after* FilterTests() has been called. ListTestsMatchingFilter(); return true; } random_seed_ = GTEST_FLAG(shuffle) ? GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0; // True iff at least one test has failed. bool failed = false; TestEventListener* repeater = listeners()->repeater(); start_timestamp_ = GetTimeInMillis(); repeater->OnTestProgramStart(*parent_); // How many times to repeat the tests? We don't want to repeat them // when we are inside the subprocess of a death test. const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat); // Repeats forever if the repeat count is negative. const bool forever = repeat < 0; for (int i = 0; forever || i != repeat; i++) { // We want to preserve failures generated by ad-hoc test // assertions executed before RUN_ALL_TESTS(). ClearNonAdHocTestResult(); const TimeInMillis start = GetTimeInMillis(); // Shuffles test cases and tests if requested. if (has_tests_to_run && GTEST_FLAG(shuffle)) { random()->Reseed(random_seed_); // This should be done before calling OnTestIterationStart(), // such that a test event listener can see the actual test order // in the event. ShuffleTests(); } // Tells the unit test event listeners that the tests are about to start. repeater->OnTestIterationStart(*parent_, i); // Runs each test case if there is at least one test to run. if (has_tests_to_run) { // Sets up all environments beforehand. repeater->OnEnvironmentsSetUpStart(*parent_); ForEach(environments_, SetUpEnvironment); repeater->OnEnvironmentsSetUpEnd(*parent_); // Runs the tests only if there was no fatal failure during global // set-up. if (!Test::HasFatalFailure()) { for (int test_index = 0; test_index < total_test_case_count(); test_index++) { GetMutableTestCase(test_index)->Run(); } } // Tears down all environments in reverse order afterwards. repeater->OnEnvironmentsTearDownStart(*parent_); std::for_each(environments_.rbegin(), environments_.rend(), TearDownEnvironment); repeater->OnEnvironmentsTearDownEnd(*parent_); } elapsed_time_ = GetTimeInMillis() - start; // Tells the unit test event listener that the tests have just finished. repeater->OnTestIterationEnd(*parent_, i); // Gets the result and clears it. if (!Passed()) { failed = true; } // Restores the original test order after the iteration. This // allows the user to quickly repro a failure that happens in the // N-th iteration without repeating the first (N - 1) iterations. // This is not enclosed in "if (GTEST_FLAG(shuffle)) { ... }", in // case the user somehow changes the value of the flag somewhere // (it's always safe to unshuffle the tests). UnshuffleTests(); if (GTEST_FLAG(shuffle)) { // Picks a new random seed for each iteration. random_seed_ = GetNextRandomSeed(random_seed_); } } repeater->OnTestProgramEnd(*parent_); return !failed; } // Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file // if the variable is present. If a file already exists at this location, this // function will write over it. If the variable is present, but the file cannot // be created, prints an error and exits. void WriteToShardStatusFileIfNeeded() { const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile); if (test_shard_file != NULL) { FILE* const file = posix::FOpen(test_shard_file, "w"); if (file == NULL) { ColoredPrintf(COLOR_RED, "Could not write to the test shard status file \"%s\" " "specified by the %s environment variable.\n", test_shard_file, kTestShardStatusFile); fflush(stdout); exit(EXIT_FAILURE); } fclose(file); } } // Checks whether sharding is enabled by examining the relevant // environment variable values. If the variables are present, // but inconsistent (i.e., shard_index >= total_shards), prints // an error and exits. If in_subprocess_for_death_test, sharding is // disabled because it must only be applied to the original test // process. Otherwise, we could filter out death tests we intended to execute. bool ShouldShard(const char* total_shards_env, const char* shard_index_env, bool in_subprocess_for_death_test) { if (in_subprocess_for_death_test) { return false; } const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1); const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1); if (total_shards == -1 && shard_index == -1) { return false; } else if (total_shards == -1 && shard_index != -1) { const Message msg = Message() << "Invalid environment variables: you have " << kTestShardIndex << " = " << shard_index << ", but have left " << kTestTotalShards << " unset.\n"; ColoredPrintf(COLOR_RED, msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (total_shards != -1 && shard_index == -1) { const Message msg = Message() << "Invalid environment variables: you have " << kTestTotalShards << " = " << total_shards << ", but have left " << kTestShardIndex << " unset.\n"; ColoredPrintf(COLOR_RED, msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (shard_index < 0 || shard_index >= total_shards) { const Message msg = Message() << "Invalid environment variables: we require 0 <= " << kTestShardIndex << " < " << kTestTotalShards << ", but you have " << kTestShardIndex << "=" << shard_index << ", " << kTestTotalShards << "=" << total_shards << ".\n"; ColoredPrintf(COLOR_RED, msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } return total_shards > 1; } // Parses the environment variable var as an Int32. If it is unset, // returns default_val. If it is not an Int32, prints an error // and aborts. Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) { const char* str_val = posix::GetEnv(var); if (str_val == NULL) { return default_val; } Int32 result; if (!ParseInt32(Message() << "The value of environment variable " << var, str_val, &result)) { exit(EXIT_FAILURE); } return result; } // Given the total number of shards, the shard index, and the test id, // returns true iff the test should be run on this shard. The test id is // some arbitrary but unique non-negative integer assigned to each test // method. Assumes that 0 <= shard_index < total_shards. bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { return (test_id % total_shards) == shard_index; } // Compares the name of each test with the user-specified filter to // decide whether the test should be run, then records the result in // each TestCase and TestInfo object. // If shard_tests == true, further filters tests based on sharding // variables in the environment - see // http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide. // Returns the number of tests that should run. int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ? Int32FromEnvOrDie(kTestTotalShards, -1) : -1; const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ? Int32FromEnvOrDie(kTestShardIndex, -1) : -1; // num_runnable_tests are the number of tests that will // run across all shards (i.e., match filter and are not disabled). // num_selected_tests are the number of tests to be run on // this shard. int num_runnable_tests = 0; int num_selected_tests = 0; for (size_t i = 0; i < test_cases_.size(); i++) { TestCase* const test_case = test_cases_[i]; const std::string &test_case_name = test_case->name(); test_case->set_should_run(false); for (size_t j = 0; j < test_case->test_info_list().size(); j++) { TestInfo* const test_info = test_case->test_info_list()[j]; const std::string test_name(test_info->name()); // A test is disabled if test case name or test name matches // kDisableTestFilter. const bool is_disabled = internal::UnitTestOptions::MatchesFilter(test_case_name, kDisableTestFilter) || internal::UnitTestOptions::MatchesFilter(test_name, kDisableTestFilter); test_info->is_disabled_ = is_disabled; const bool matches_filter = internal::UnitTestOptions::FilterMatchesTest(test_case_name, test_name); test_info->matches_filter_ = matches_filter; const bool is_runnable = (GTEST_FLAG(also_run_disabled_tests) || !is_disabled) && matches_filter; const bool is_selected = is_runnable && (shard_tests == IGNORE_SHARDING_PROTOCOL || ShouldRunTestOnShard(total_shards, shard_index, num_runnable_tests)); num_runnable_tests += is_runnable; num_selected_tests += is_selected; test_info->should_run_ = is_selected; test_case->set_should_run(test_case->should_run() || is_selected); } } return num_selected_tests; } // Prints the given C-string on a single line by replacing all '\n' // characters with string "\\n". If the output takes more than // max_length characters, only prints the first max_length characters // and "...". static void PrintOnOneLine(const char* str, int max_length) { if (str != NULL) { for (int i = 0; *str != '\0'; ++str) { if (i >= max_length) { printf("..."); break; } if (*str == '\n') { printf("\\n"); i += 2; } else { printf("%c", *str); ++i; } } } } // Prints the names of the tests matching the user-specified filter flag. void UnitTestImpl::ListTestsMatchingFilter() { // Print at most this many characters for each type/value parameter. const int kMaxParamLength = 250; for (size_t i = 0; i < test_cases_.size(); i++) { const TestCase* const test_case = test_cases_[i]; bool printed_test_case_name = false; for (size_t j = 0; j < test_case->test_info_list().size(); j++) { const TestInfo* const test_info = test_case->test_info_list()[j]; if (test_info->matches_filter_) { if (!printed_test_case_name) { printed_test_case_name = true; printf("%s.", test_case->name()); if (test_case->type_param() != NULL) { printf(" # %s = ", kTypeParamLabel); // We print the type parameter on a single line to make // the output easy to parse by a program. PrintOnOneLine(test_case->type_param(), kMaxParamLength); } printf("\n"); } printf(" %s", test_info->name()); if (test_info->value_param() != NULL) { printf(" # %s = ", kValueParamLabel); // We print the value parameter on a single line to make the // output easy to parse by a program. PrintOnOneLine(test_info->value_param(), kMaxParamLength); } printf("\n"); } } } fflush(stdout); } // Sets the OS stack trace getter. // // Does nothing if the input and the current OS stack trace getter are // the same; otherwise, deletes the old getter and makes the input the // current getter. void UnitTestImpl::set_os_stack_trace_getter( OsStackTraceGetterInterface* getter) { if (os_stack_trace_getter_ != getter) { delete os_stack_trace_getter_; os_stack_trace_getter_ = getter; } } // Returns the current OS stack trace getter if it is not NULL; // otherwise, creates an OsStackTraceGetter, makes it the current // getter, and returns it. OsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() { if (os_stack_trace_getter_ == NULL) { os_stack_trace_getter_ = new OsStackTraceGetter; } return os_stack_trace_getter_; } // Returns the TestResult for the test that's currently running, or // the TestResult for the ad hoc test if no test is running. TestResult* UnitTestImpl::current_test_result() { return current_test_info_ ? &(current_test_info_->result_) : &ad_hoc_test_result_; } // Shuffles all test cases, and the tests within each test case, // making sure that death tests are still run first. void UnitTestImpl::ShuffleTests() { // Shuffles the death test cases. ShuffleRange(random(), 0, last_death_test_case_ + 1, &test_case_indices_); // Shuffles the non-death test cases. ShuffleRange(random(), last_death_test_case_ + 1, static_cast(test_cases_.size()), &test_case_indices_); // Shuffles the tests inside each test case. for (size_t i = 0; i < test_cases_.size(); i++) { test_cases_[i]->ShuffleTests(random()); } } // Restores the test cases and tests to their order before the first shuffle. void UnitTestImpl::UnshuffleTests() { for (size_t i = 0; i < test_cases_.size(); i++) { // Unshuffles the tests in each test case. test_cases_[i]->UnshuffleTests(); // Resets the index of each test case. test_case_indices_[i] = static_cast(i); } } // Returns the current OS stack trace as an std::string. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in // the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. std::string GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, int skip_count) { // We pass skip_count + 1 to skip this wrapper function in addition // to what the user really wants to skip. return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1); } // Used by the GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_ macro to // suppress unreachable code warnings. namespace { class ClassUniqueToAlwaysTrue {}; } bool IsTrue(bool condition) { return condition; } bool AlwaysTrue() { #if GTEST_HAS_EXCEPTIONS // This condition is always false so AlwaysTrue() never actually throws, // but it makes the compiler think that it may throw. if (IsTrue(false)) throw ClassUniqueToAlwaysTrue(); #endif // GTEST_HAS_EXCEPTIONS return true; } // If *pstr starts with the given prefix, modifies *pstr to be right // past the prefix and returns true; otherwise leaves *pstr unchanged // and returns false. None of pstr, *pstr, and prefix can be NULL. bool SkipPrefix(const char* prefix, const char** pstr) { const size_t prefix_len = strlen(prefix); if (strncmp(*pstr, prefix, prefix_len) == 0) { *pstr += prefix_len; return true; } return false; } // Parses a string as a command line flag. The string should have // the format "--flag=value". When def_optional is true, the "=value" // part can be omitted. // // Returns the value of the flag, or NULL if the parsing failed. const char* ParseFlagValue(const char* str, const char* flag, bool def_optional) { // str and flag must not be NULL. if (str == NULL || flag == NULL) return NULL; // The flag must start with "--" followed by GTEST_FLAG_PREFIX_. const std::string flag_str = std::string("--") + GTEST_FLAG_PREFIX_ + flag; const size_t flag_len = flag_str.length(); if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL; // Skips the flag name. const char* flag_end = str + flag_len; // When def_optional is true, it's OK to not have a "=value" part. if (def_optional && (flag_end[0] == '\0')) { return flag_end; } // If def_optional is true and there are more characters after the // flag name, or if def_optional is false, there must be a '=' after // the flag name. if (flag_end[0] != '=') return NULL; // Returns the string after "=". return flag_end + 1; } // Parses a string for a bool flag, in the form of either // "--flag=value" or "--flag". // // In the former case, the value is taken as true as long as it does // not start with '0', 'f', or 'F'. // // In the latter case, the value is taken as true. // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. bool ParseBoolFlag(const char* str, const char* flag, bool* value) { // Gets the value of the flag as a string. const char* const value_str = ParseFlagValue(str, flag, true); // Aborts if the parsing failed. if (value_str == NULL) return false; // Converts the string value to a bool. *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F'); return true; } // Parses a string for an Int32 flag, in the form of // "--flag=value". // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { // Gets the value of the flag as a string. const char* const value_str = ParseFlagValue(str, flag, false); // Aborts if the parsing failed. if (value_str == NULL) return false; // Sets *value to the value of the flag. return ParseInt32(Message() << "The value of flag --" << flag, value_str, value); } // Parses a string for a string flag, in the form of // "--flag=value". // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. bool ParseStringFlag(const char* str, const char* flag, std::string* value) { // Gets the value of the flag as a string. const char* const value_str = ParseFlagValue(str, flag, false); // Aborts if the parsing failed. if (value_str == NULL) return false; // Sets *value to the value of the flag. *value = value_str; return true; } // Determines whether a string has a prefix that Google Test uses for its // flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_. // If Google Test detects that a command line flag has its prefix but is not // recognized, it will print its help message. Flags starting with // GTEST_INTERNAL_PREFIX_ followed by "internal_" are considered Google Test // internal flags and do not trigger the help message. static bool HasGoogleTestFlagPrefix(const char* str) { return (SkipPrefix("--", &str) || SkipPrefix("-", &str) || SkipPrefix("/", &str)) && !SkipPrefix(GTEST_FLAG_PREFIX_ "internal_", &str) && (SkipPrefix(GTEST_FLAG_PREFIX_, &str) || SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str)); } // Prints a string containing code-encoded text. The following escape // sequences can be used in the string to control the text color: // // @@ prints a single '@' character. // @R changes the color to red. // @G changes the color to green. // @Y changes the color to yellow. // @D changes to the default terminal text color. // // TODO(wan@google.com): Write tests for this once we add stdout // capturing to Google Test. static void PrintColorEncoded(const char* str) { GTestColor color = COLOR_DEFAULT; // The current color. // Conceptually, we split the string into segments divided by escape // sequences. Then we print one segment at a time. At the end of // each iteration, the str pointer advances to the beginning of the // next segment. for (;;) { const char* p = strchr(str, '@'); if (p == NULL) { ColoredPrintf(color, "%s", str); return; } ColoredPrintf(color, "%s", std::string(str, p).c_str()); const char ch = p[1]; str = p + 2; if (ch == '@') { ColoredPrintf(color, "@"); } else if (ch == 'D') { color = COLOR_DEFAULT; } else if (ch == 'R') { color = COLOR_RED; } else if (ch == 'G') { color = COLOR_GREEN; } else if (ch == 'Y') { color = COLOR_YELLOW; } else { --str; } } } static const char kColorEncodedHelpMessage[] = "This program contains tests written using " GTEST_NAME_ ". You can use the\n" "following command line flags to control its behavior:\n" "\n" "Test Selection:\n" " @G--" GTEST_FLAG_PREFIX_ "list_tests@D\n" " List the names of all tests instead of running them. The name of\n" " TEST(Foo, Bar) is \"Foo.Bar\".\n" " @G--" GTEST_FLAG_PREFIX_ "filter=@YPOSTIVE_PATTERNS" "[@G-@YNEGATIVE_PATTERNS]@D\n" " Run only the tests whose name matches one of the positive patterns but\n" " none of the negative patterns. '?' matches any single character; '*'\n" " matches any substring; ':' separates two patterns.\n" " @G--" GTEST_FLAG_PREFIX_ "also_run_disabled_tests@D\n" " Run all disabled tests too.\n" "\n" "Test Execution:\n" " @G--" GTEST_FLAG_PREFIX_ "repeat=@Y[COUNT]@D\n" " Run the tests repeatedly; use a negative count to repeat forever.\n" " @G--" GTEST_FLAG_PREFIX_ "shuffle@D\n" " Randomize tests' orders on every iteration.\n" " @G--" GTEST_FLAG_PREFIX_ "random_seed=@Y[NUMBER]@D\n" " Random number seed to use for shuffling test orders (between 1 and\n" " 99999, or 0 to use a seed based on the current time).\n" "\n" "Test Output:\n" " @G--" GTEST_FLAG_PREFIX_ "color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\n" " Enable/disable colored output. The default is @Gauto@D.\n" " -@G-" GTEST_FLAG_PREFIX_ "print_time=0@D\n" " Don't print the elapsed time of each test.\n" " @G--" GTEST_FLAG_PREFIX_ "output=xml@Y[@G:@YDIRECTORY_PATH@G" GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n" " Generate an XML report in the given directory or with the given file\n" " name. @YFILE_PATH@D defaults to @Gtest_details.xml@D.\n" #if GTEST_CAN_STREAM_RESULTS_ " @G--" GTEST_FLAG_PREFIX_ "stream_result_to=@YHOST@G:@YPORT@D\n" " Stream test results to the given server.\n" #endif // GTEST_CAN_STREAM_RESULTS_ "\n" "Assertion Behavior:\n" #if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS " @G--" GTEST_FLAG_PREFIX_ "death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\n" " Set the default death test style.\n" #endif // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS " @G--" GTEST_FLAG_PREFIX_ "break_on_failure@D\n" " Turn assertion failures into debugger break-points.\n" " @G--" GTEST_FLAG_PREFIX_ "throw_on_failure@D\n" " Turn assertion failures into C++ exceptions.\n" " @G--" GTEST_FLAG_PREFIX_ "catch_exceptions=0@D\n" " Do not report exceptions as test failures. Instead, allow them\n" " to crash the program or throw a pop-up (on Windows).\n" "\n" "Except for @G--" GTEST_FLAG_PREFIX_ "list_tests@D, you can alternatively set " "the corresponding\n" "environment variable of a flag (all letters in upper-case). For example, to\n" "disable colored text output, you can either specify @G--" GTEST_FLAG_PREFIX_ "color=no@D or set\n" "the @G" GTEST_FLAG_PREFIX_UPPER_ "COLOR@D environment variable to @Gno@D.\n" "\n" "For more information, please read the " GTEST_NAME_ " documentation at\n" "@G" GTEST_PROJECT_URL_ "@D. If you find a bug in " GTEST_NAME_ "\n" "(not one in your own code or tests), please report it to\n" "@G<" GTEST_DEV_EMAIL_ ">@D.\n"; // Parses the command line for Google Test flags, without initializing // other parts of Google Test. The type parameter CharType can be // instantiated to either char or wchar_t. template void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { for (int i = 1; i < *argc; i++) { const std::string arg_string = StreamableToString(argv[i]); const char* const arg = arg_string.c_str(); using internal::ParseBoolFlag; using internal::ParseInt32Flag; using internal::ParseStringFlag; // Do we see a Google Test flag? if (ParseBoolFlag(arg, kAlsoRunDisabledTestsFlag, >EST_FLAG(also_run_disabled_tests)) || ParseBoolFlag(arg, kBreakOnFailureFlag, >EST_FLAG(break_on_failure)) || ParseBoolFlag(arg, kCatchExceptionsFlag, >EST_FLAG(catch_exceptions)) || ParseStringFlag(arg, kColorFlag, >EST_FLAG(color)) || ParseStringFlag(arg, kDeathTestStyleFlag, >EST_FLAG(death_test_style)) || ParseBoolFlag(arg, kDeathTestUseFork, >EST_FLAG(death_test_use_fork)) || ParseStringFlag(arg, kFilterFlag, >EST_FLAG(filter)) || ParseStringFlag(arg, kInternalRunDeathTestFlag, >EST_FLAG(internal_run_death_test)) || ParseBoolFlag(arg, kListTestsFlag, >EST_FLAG(list_tests)) || ParseStringFlag(arg, kOutputFlag, >EST_FLAG(output)) || ParseBoolFlag(arg, kPrintTimeFlag, >EST_FLAG(print_time)) || ParseInt32Flag(arg, kRandomSeedFlag, >EST_FLAG(random_seed)) || ParseInt32Flag(arg, kRepeatFlag, >EST_FLAG(repeat)) || ParseBoolFlag(arg, kShuffleFlag, >EST_FLAG(shuffle)) || ParseInt32Flag(arg, kStackTraceDepthFlag, >EST_FLAG(stack_trace_depth)) || ParseStringFlag(arg, kStreamResultToFlag, >EST_FLAG(stream_result_to)) || ParseBoolFlag(arg, kThrowOnFailureFlag, >EST_FLAG(throw_on_failure)) ) { // Yes. Shift the remainder of the argv list left by one. Note // that argv has (*argc + 1) elements, the last one always being // NULL. The following loop moves the trailing NULL element as // well. for (int j = i; j != *argc; j++) { argv[j] = argv[j + 1]; } // Decrements the argument count. (*argc)--; // We also need to decrement the iterator as we just removed // an element. i--; } else if (arg_string == "--help" || arg_string == "-h" || arg_string == "-?" || arg_string == "/?" || HasGoogleTestFlagPrefix(arg)) { // Both help flag and unrecognized Google Test flags (excluding // internal ones) trigger help display. g_help_flag = true; } } if (g_help_flag) { // We print the help here instead of in RUN_ALL_TESTS(), as the // latter may not be called at all if the user is using Google // Test with another testing framework. PrintColorEncoded(kColorEncodedHelpMessage); } } // Parses the command line for Google Test flags, without initializing // other parts of Google Test. void ParseGoogleTestFlagsOnly(int* argc, char** argv) { ParseGoogleTestFlagsOnlyImpl(argc, argv); } void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) { ParseGoogleTestFlagsOnlyImpl(argc, argv); } // The internal implementation of InitGoogleTest(). // // The type parameter CharType can be instantiated to either char or // wchar_t. template void InitGoogleTestImpl(int* argc, CharType** argv) { g_init_gtest_count++; // We don't want to run the initialization code twice. if (g_init_gtest_count != 1) return; if (*argc <= 0) return; internal::g_executable_path = internal::StreamableToString(argv[0]); #if GTEST_HAS_DEATH_TEST g_argvs.clear(); for (int i = 0; i != *argc; i++) { g_argvs.push_back(StreamableToString(argv[i])); } #endif // GTEST_HAS_DEATH_TEST ParseGoogleTestFlagsOnly(argc, argv); GetUnitTestImpl()->PostFlagParsingInit(); } } // namespace internal // Initializes Google Test. This must be called before calling // RUN_ALL_TESTS(). In particular, it parses a command line for the // flags that Google Test recognizes. Whenever a Google Test flag is // seen, it is removed from argv, and *argc is decremented. // // No value is returned. Instead, the Google Test flag variables are // updated. // // Calling the function for the second time has no user-visible effect. void InitGoogleTest(int* argc, char** argv) { internal::InitGoogleTestImpl(argc, argv); } // This overloaded version can be used in Windows programs compiled in // UNICODE mode. void InitGoogleTest(int* argc, wchar_t** argv) { internal::InitGoogleTestImpl(argc, argv); } } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/src/gtest_main.cc000066400000000000000000000033451377520261000206630ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. #include #include "gtest/gtest.h" GTEST_API_ int main(int argc, char **argv) { printf("Running main() from gtest_main.cc\n"); testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/src/gtest_main.lo000066400000000000000000000004641377520261000207070ustar00rootroot00000000000000# src/gtest_main.lo - a libtool object file # Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 # # Please DO NOT delete this file! # It is necessary for linking the library. # Name of the PIC object. pic_object='.libs/gtest_main.o' # Name of the non-PIC object non_pic_object='gtest_main.o' dlt-daemon-2.18.6/gtest-1.7.0/src/gtest_main.o000066400000000000000000000501541377520261000205340ustar00rootroot00000000000000ELFĖ;4(Running main() from gtest_main.ccL$ƒäđ˙qüU‰åVSQ‰Ëƒė‹qhčü˙˙˙XZVSčü˙˙˙ƒÄčü˙˙˙ƒė Pčü˙˙˙ƒÄeôY[^]aüÍļƒėhčü˙˙˙ƒÄ hhhčü˙˙˙ƒÄÃP‡W| Ĩ ļÔ0KåÁëŠn É(eint‡'Ģ 7l`ƒæ„zâą_ ”õ8Âöe4ûĢ üĢnũĢ ūĢ ˙Ģ ‚ Ģ Ģ nĢ ãĢ$ Ę Ģ( ĖĢ, ī0 æ õ4  e8 _e< …@ Ķ>D Ģ LF nûG p H ¸%—L " .ŠT ) /ŠX 0 0Š\ 7 1Š` > 2%d d4eh ų6l@¸ S! ‡ Vn ģX0 œ \‡ŲTe]O ą—ĸö ^Cp (­üą‚š|  īĄīķĸõŠĻež¸ ą ĸˇ ą!ĸ''ąstd"  @[  ‹O  f  Ž|  ˜  ž  ‘Ų  ’˙  “  ”6  •R  –h  —t  ˜š  ™ŋ  šā  ›  œ&  ž<   ]  Ąy  ĸ”  ¤´  §Ô  Ēų  Ŧ Ž4 °O ąo ˛‰ ŗŖ ´Ŋ ĩ× ļņ ˇą ¸Į šæ ē ģ$ ŧO Ŋj ŋ‹ ÁĻ ÂÆ Ãæ Ä Å% Æ; Į[ Č{ ɛ Ęģ ËŌ Ėé Í Î& ĪD Đc Ã Ū ū 0/  é´ü 빇 ėe ō (17øeq öN ' J77lt ú ' g77ģ ne‹==´• Ä´Ĩ=ĸ ą=É=´7Ŋ R CíC=´ˆ ICC=´ ō C5C´øa ~øOIĀ Än7 $?' IIeof (š b ,čIļ ŧ0 5O 6| 7–r Ŋe¯3nÁPŒW v ņĀA€|€9€J€¤€A € ä€Ā€€Ļ°ž Ę•„Ļ€€K g§[ëũ Yg _€€• ÔÚ øœK[€€éĩûį>8€€į [ ąZ įÕ = ' !ą;A"ō#ũN"ō"e$s ˙ß%> tZ&dect%Vt&hex t%t%t &octt@% t€' t'H "t'ė &t'Í)t'8,t'Š/t 'Ÿ3t@%Ŧ6t°%ˇ9tJ'Â<t(*J§%´ NŠ o %QŠ %€VŠ %fYŠ (# in&applÔ š &ateoÔ %ö tÔ &inwÔ &outzÔ %p}Ô  (,‰Ô&begŒ9  &cur9 &end’9 RSøTO \e3hMib§¨ )ļ ą* ėtr1*ü +Ф,;˜-Ö .Ŗģ /ĸÄ 0Ŗø12ú. 2_Tpŗ ›ˆŒ 3Û>ē ü 4đJ' 9 eß ~  5Ta0 j—6đ „O | e6Q éO ’ ’ 86— ¸ ¸ ¸ e’ 3 6÷O Ų 3 ’ 6t  eô ô ’ ú 3 6)Ke ’ e6Re6 ’ ô 76™{eR ’ ô 76!ęO h ’ 8n đO 6û %” !%” [ 6 m%ŋ ¸ !%” 6> ieÕ Õ Û [ 6Ũ˜% ¸  %” !6ÕøO & 3 ’ 6āūO < 3 6\e] ¸ %ô 76j…ey ô ô 76k O ” O ’ 6xde´ ’ ô ĸ6ąeÔ ’ ô ĸ6:qeų ¸ %ô ĸ6…Ŋeô ô ĸ6ö le4ô ĸ6ûšeOô ĸ6úr%oĢ3 ” 9 ›¸ ‰¸ ô 9ŽŖeŖô ô 9, ĀeŊô ô 9˛“¸ ׸ ô 9ôü%ņô ô 6W%¸ %ô !:tm,…ąŨ‡eyˆeh‰eŠe Å‹e6 ŒeĄeˇŽe#e 쒐$–“!(6ß%Įô 9 ž¸ æ¸ ô %9ŽĻeô ô %9A–¸ $¸ ô %6Ŋ ž%IĢI%” ô 6&%jô ô 6jÂA …ô …¸ 6É: Ļô …6ˆ¸ Ƹ ô …6Ôæô …e6îŲEô …e9^Ä%%¸ ô %6ĢŠe;O 6NEe[ô ô %6 I¸ {¸ ô %6ĻN¸ ›¸ ô %6žR¸ ģ¸ 3 %6ÆYeŌô 762‚eéô 7;íāíô ô 3 qqô &ô ô ;Y ęY ô Dô 3 11ô cô ô F <F ô ‡ô 3 %<‚ ōà øÃ Ū ūŦ$,´-Ôļ 71ū:. 1ĩ;. 1_ ?" 1Ô@. )Ž eô7B1ū:í1ĩ;í1_ ?" 1Ô@. )Ž Eá7„1ū:'1ĩ;'1_ ?" 1Ô@. )Ž ą0%71ū:w1ĩ;w1_ ?" 1Ô@. )Ž S6ŖËH Ūô …6öãlūô …e6æ ęsô …e<71=8å>ø>((ø>O85|9Ģ&:Ģ)@ĢĮ FĢ æGĢIHĢ–IĢ JĢKĢ ÔLĢ$Mą(ī Ną)#Pą*ļRą+Tą,fVą-]ą. ^ą/aą0kcą1/eą2Ŗ gą3”ną4^oą59ē|Ģ–e!?’ĄOōˆSŠīeT{ ĖU‹&eUö&eVī"eJœ:W"e‘W "į‘Xž+%'Y3 Y<Y"ZY+FZEP(œy[ĢS!&\ĩ]Ā˙˙^]Ytq_ ¨õ_à Šõ_–Ēõ`å Ša:da÷2b–˙˙˙˙˙˙˙ ąĖĸŧc¯´cž™cÍd cÉ eĘz€€€€xfÕÄ ˙˙˙g-4 gYeŒi€€~h—-˙gæ g+#iΚeq!j\eĪŠŠ% U: ; I$ > $ >   I : ;  : ; I8 : ;I8  : ; n  : ;  : ; I I!I/  I: ; &I9: ; : ; : ;9: ; .?: ; n<I.?: ; nI<.?: ;nI<.?: ;nI<.?: ;nI< : ; ( < : ;2  : ;I?<!.?: ;2 <d"I4#.?: ;2 <d$: ; I2 % : ;I?2 < & : ;I?2 < ' : ;I?2 <(: ;I2 )/I*/I+ : ; , : ;-9.4: ;I</:: ;0 : ; 1 : ; I?<2/I34: ; nI?<44: ; I<5: ;I6.?: ;I<78.?: ;I<9.?: ; I<: : ; ;.?: ; nI<<9: ; =:: ; > I?.?: ; I<@ : ; nA : ; B I8 CD&E9: ;F : ;G : ;I8 2 H.?: ;n2 <dI.?: ;n2 <dJ : ;I?2 <K.?: ;nI<L4: ;I<M4: ; I<N4: ; I< O.?: ;nI2 <P.?: ;nI2 <dQ.?: ;n<R: ;S.?: ;I T.4 U: ; IV.?: ; I@—BW: ; IX1X Y Y‰‚1Z.4@—B[1X Y \1 ]1^‰‚_4: ; I?<`4I?4<a4G b4Gc4Gd4Ge4Gn f4Gng4Gn h4Gni.?nI4<j.?I4<$JP(JPxRû src./include/gtest/usr/include/c++/4.9.2/usr/lib/gcc/i686-redhat-linux/4.9.2/include/usr/include/bits/usr/include/usr/include/c++/4.9.2/bits/usr/include/c++/4.9.2/i686-redhat-linux/bits/usr/include/c++/4.9.2/tr1/usr/include/c++/4.9.2/debug/usr/include/c++/4.9.2/ext./include/gtest/internalgtest_main.ccgtest.hiostreamstddef.htypes.hlibio.hstdio.hwchar.hstdarg.hcwcharchar_traits.hc++config.hclocaleios_base.hcwctypetuple iosfwdtime.hdebug.h predefined_ops.hnew_allocator.h numeric_traits.h locale.hpthreadtypes.hatomic_word.hwctype.hgtest-port.h gtest-internal.h gtest-death-test-internal.h gtest-linked_ptr.h gtest-printers.hcxxabi.h!J=ŸĖļn<$<\ōlong int__debugint_p_cs_precedes_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E5valueEwcsxfrmgoodbit_shortbufvfwprintf_IO_lock_tUnitTeststderrGetInstanceRUN_ALL_TESTStm_ydayLock_ZNSt11char_traitsIcE11to_int_typeERKc_S_atepthread_tchar_type_S_uppercasevfwscanfeofbitp_cs_precedestowctrans_Swallow_assignunsigned int_ZN7testing8internal18g_linked_ptr_mutexE__gnu_cxx_S_fixed_S_floatfieldtuple_size >_flags__int32_t_cur_columnwchar_t_S_refcounttestingvwscanf_old_offset_markerstm_mday_ZNSt11char_traitsIcE2ltERKcS2_MakeFrommon_decimal_point_S_ios_iostate_end_IO_buf_end_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE__opswcscpy_ZN7testing8UnitTest11GetInstanceEvBiggestInt_ZNSt11char_traitsIcE7not_eofERKiwcscatlconvdecimal_point__numeric_traits_integer__pthread_slist_tAssertHeldn_sep_by_spaceg_linked_ptr_mutexcopy__gnu_debugfwscanftm_wday_poswcsncmpp_sep_by_spacetm_mon_IO_save_end__count__numeric_traits_integerinternal2floatignore__elisiongetwclong long unsigned int_S_endhas_owner__S_dec_S_hexint_n_sign_posn_IO_read_base_S_scientificunitbuflocaleconv__FILE__owneradjustfield_offsetto_int_type_ZNK7testing8internal9MutexBase10AssertHeldEvwcrtomb_ZN7testing8internal9MutexBase6UnlockEviostatevalue_S_ios_seekdir_end_S_failbitfixed__cxa_atexitHelper__gnuc_va_listp_sign_posn__initialize_pputsuppercasetuple<>Initsize_tmovefloatfieldshowposputwccerrputwchar_Ios_Seekdir__priority__lockargcstdin_nextint_frac_digitsfwideint_n_cs_precedes_S_right_S_showpointGNU C++ 4.9.2 20150212 (Red Hat 4.9.2-6) -mtune=generic -march=i686 -g -O2findbasic_ostream >negative_sign__elision_data_ZN7testing14InitGoogleTestEPiPPc__valuefputwc__nextgroupingwscanf_S_showbase_GLOBAL__sub_I_main_S_inchar_modeswscanfptrdiff_t_IO_markerint_type_IO_write_basewctype_S_adjustfield__max__wch_S_boolalpha__builtin_putsmbsrtowcs_S_begwcstoulwctrans_tfwprintfrightpthread_mutex_twcstofwcsspn_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE_S_ios_openmode_end_Atomic_word__listlong long intlength_S_eofbit_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperEz_IO_save_base_S_oct_S_badbitmon_groupingUnlock_ZNSt11char_traitsIcE6assignERcRKcboolboolalphashowbasefgetwc_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E6HelperES3_fgetws_S_basefield__quad_tbadbitcomparestdout_IO_backup_base_S_goodbit__dso_handle_ZNSt11char_traitsIcE6assignEPcjc__kindassign__pad1__pad2__pad3__pad4__pad5kInternalRunDeathTestFlag__is_signedungetwcfmtflagssrc/gtest_main.cc_Value_Ios_Iostatewctype_t_vtable_offset_ZSt4cerr_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE__mbstate_t_Traitsargvlong doublewcsncatopenmodewcscoll__espins_S_synced_with_stdio_ZNSt11char_traitsIcE4moveEPcPKcjfputws__static_initialization_and_destruction_0/home/user/projects/ascgit/ascgit003.dlt-daemon/build/gtest-1.7.0ios_basebtowcvwprintfFromkMaxStackTraceDepthmbrtowc_IO_read_endiswctypetm_yearmbsinitwmemchr_ZNSt11char_traitsIcE2eqERKcS2_short int_ZN7testing8UnitTest3RunEvmutex__ZNSt11char_traitsIcE3eofEv_CharTwcsrtombsint_curr_symbolkMaxBiggestIntwcstoullfrac_digitsmbrlenwmemcpyscientificn_sign_posn11__mbstate_tchar_traits_S_skipws_Ios_Openmodewcsrchrto_char_typegetwchar__cxxabiv1_IO_write_end_S_internal__wchbint_n_sep_by_space__numeric_traits_integerinternal_run_death_testshowpointbinary_S_binleftmbstate_twcsftimepositive_sign__datawcsstrskipws_ZNSt11char_traitsIcE11eq_int_typeERKiS2_owner__lock_S_left_ZNSt11char_traitsIcE12to_char_typeERKiwmemmove_Ios_Fmtflags__nuserswprintfdeath_test_use_forksizetypelong unsigned int~Init_S_trunc_IO_FILE_ZN7testing8internal21ImplicitlyConvertibleIPKvS3_E8MakeFromEvwint_t_S_appnot_eofwcstodwcspbrktm_minfailbitwcstokwcstoltm_zonewmemset_S_ios_fmtflags_endsetlocale_ZNSt11char_traitsIcE6lengthEPKcunsigned char_sbufMutexBaseinternal_IO_write_ptreq_int_typethousands_sep_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minEostreamwcstoldwctob_ZNSt11char_traitsIcE4findEPKcjRS1_death_test_stylecurrency_symbolwcstoll__minswprintf_fileno_ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE15pthread_mutex_t__size__off_ttm_hourtrunckDeathTestStyleFlagsigned charmon_thousands_sepInitGoogleTestbasefieldshort unsigned int__digitstm_sec_S_unitbufmainwcscspn__builtin_va_list_S_curn_cs_precedestm_isdstseekdir_IO_read_ptrwcsncpy_ZNSt11char_traitsIcE4copyEPcPKcjint_p_sep_by_spacedoublevswscanfwcscmp_ZN7testing8internal9MutexBase4LockEvtm_gmtoff__pthread_internal_slist__align_chainwcschr__numeric_traits_integerkDeathTestUseForkwctransvswprintfkProtobufOneLinerMaxLength_flags2_S_out_ZNSt11char_traitsIcE7compareEPKcS2_jint_p_sign_posn_S_showposImplicitlyConvertiblewcslen__off64_t__ioinit_unused2_IO_buf_base_ZNSt3tr110tuple_sizeINS_5tupleIIEEEE5valueE__pthread_mutex_swmemcmpGCC: (GNU) 4.9.2 20150212 (Red Hat 4.9.2-6)zR| ˆ8JD GuEutu|uxsÁ AÃAÆAÅC $XP(CE HEEE H.symtab.strtab.shstrtab.text.data.bss.rodata.str1.4.text.unlikely.rel.text.startup.rel.init_array.rel.debug_info.debug_abbrev.rel.debug_aranges.rel.debug_ranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame4!4'4,24";VN`xJ ŧBX`Ø\ Cp܋l C  |gŲŽ@"(Š P Ąh" 4P ŗ€"V¯ TPŋ0Ö%VĘ0,:-ĶY:į\:|ã \PØ:ņ@Đ ÔAįņ˙P(#   2J7<^‚ĩÂÚgtest_main.cc_GLOBAL__sub_I_main_ZStL8__ioinitmainputs_ZN7testing14InitGoogleTestEPiPPc_ZN7testing8UnitTest11GetInstanceEv_ZN7testing8UnitTest3RunEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit'/8TYafkp !&3:AHOV[ov{†“˜Ĩ´šÅŅŨéõ '4AN[hu‚œŠļÃĐŨę÷+9GXco{˜Ŗ¯¸ŋË×ãæíų3PhoŒ“Ļ­ĘŅîõ6=U\ov•žĨĩÕāėōøū %,3:AIQX_fo{‡“™Ÿ¨´ēĀÆĖÕáįíķü+B[gˆ¤˛ÎÜëú  ' 6 E S a p }  ž Ŧ ē č    – Ÿ ´ ŧ Ę ß į ũ    * 6 = D K P \ g } ™ ŋ Ú   7 S i u › Ā á  ' = ^ z • ĩ Õ ú 5PpФžØō-9EQ]iu™Ĩ˛Čį%PkŒ§Įį&<\|œŧĶęđ'-ELdkˆĒŋËÖáė÷ #.9COZep{…˜ŖŽšÄß˙P\ht€Œ˜¤°ŧČÔāėø(4@LXdp}—¨ŗŋŌāé)5AMYexƒŽĒÖų4Nc}‰•ĸ°žĖĶįî ,9@IPcjy‹—°ēŋÉÎØŨãíø&;GNkŸŦļÁÍ׿ô(1;?Rjoz…›ņ˙ $.:EO[_r  , \dlt-daemon-2.18.6/gtest-1.7.0/test/000077500000000000000000000000001377520261000164055ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/test/.deps/000077500000000000000000000000001377520261000174165ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/test/.deps/gtest_all_test.Po000066400000000000000000000000101377520261000227220ustar00rootroot00000000000000# dummy dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-death-test_ex_test.cc000066400000000000000000000071371377520261000236450ustar00rootroot00000000000000// Copyright 2010, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // // Tests that verify interaction of exceptions and death tests. #include "gtest/gtest-death-test.h" #include "gtest/gtest.h" #if GTEST_HAS_DEATH_TEST # if GTEST_HAS_SEH # include // For RaiseException(). # endif # include "gtest/gtest-spi.h" # if GTEST_HAS_EXCEPTIONS # include // For std::exception. // Tests that death tests report thrown exceptions as failures and that the // exceptions do not escape death test macros. TEST(CxxExceptionDeathTest, ExceptionIsFailure) { try { EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(throw 1, ""), "threw an exception"); } catch (...) { // NOLINT FAIL() << "An exception escaped a death test macro invocation " << "with catch_exceptions " << (testing::GTEST_FLAG(catch_exceptions) ? "enabled" : "disabled"); } } class TestException : public std::exception { public: virtual const char* what() const throw() { return "exceptional message"; } }; TEST(CxxExceptionDeathTest, PrintsMessageForStdExceptions) { // Verifies that the exception message is quoted in the failure text. EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(throw TestException(), ""), "exceptional message"); // Verifies that the location is mentioned in the failure text. EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(throw TestException(), ""), "gtest-death-test_ex_test.cc"); } # endif // GTEST_HAS_EXCEPTIONS # if GTEST_HAS_SEH // Tests that enabling interception of SEH exceptions with the // catch_exceptions flag does not interfere with SEH exceptions being // treated as death by death tests. TEST(SehExceptionDeasTest, CatchExceptionsDoesNotInterfere) { EXPECT_DEATH(RaiseException(42, 0x0, 0, NULL), "") << "with catch_exceptions " << (testing::GTEST_FLAG(catch_exceptions) ? "enabled" : "disabled"); } # endif #endif // GTEST_HAS_DEATH_TEST int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); testing::GTEST_FLAG(catch_exceptions) = GTEST_ENABLE_CATCH_EXCEPTIONS_ != 0; return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-death-test_test.cc000066400000000000000000001243441377520261000231510ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // Tests for death tests. #include "gtest/gtest-death-test.h" #include "gtest/gtest.h" #include "gtest/internal/gtest-filepath.h" using testing::internal::AlwaysFalse; using testing::internal::AlwaysTrue; #if GTEST_HAS_DEATH_TEST # if GTEST_OS_WINDOWS # include // For chdir(). # else # include # include // For waitpid. # endif // GTEST_OS_WINDOWS # include # include # include # if GTEST_OS_LINUX # include # endif // GTEST_OS_LINUX # include "gtest/gtest-spi.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. # define GTEST_IMPLEMENTATION_ 1 # include "src/gtest-internal-inl.h" # undef GTEST_IMPLEMENTATION_ namespace posix = ::testing::internal::posix; using testing::Message; using testing::internal::DeathTest; using testing::internal::DeathTestFactory; using testing::internal::FilePath; using testing::internal::GetLastErrnoDescription; using testing::internal::GetUnitTestImpl; using testing::internal::InDeathTestChild; using testing::internal::ParseNaturalNumber; namespace testing { namespace internal { // A helper class whose objects replace the death test factory for a // single UnitTest object during their lifetimes. class ReplaceDeathTestFactory { public: explicit ReplaceDeathTestFactory(DeathTestFactory* new_factory) : unit_test_impl_(GetUnitTestImpl()) { old_factory_ = unit_test_impl_->death_test_factory_.release(); unit_test_impl_->death_test_factory_.reset(new_factory); } ~ReplaceDeathTestFactory() { unit_test_impl_->death_test_factory_.release(); unit_test_impl_->death_test_factory_.reset(old_factory_); } private: // Prevents copying ReplaceDeathTestFactory objects. ReplaceDeathTestFactory(const ReplaceDeathTestFactory&); void operator=(const ReplaceDeathTestFactory&); UnitTestImpl* unit_test_impl_; DeathTestFactory* old_factory_; }; } // namespace internal } // namespace testing void DieWithMessage(const ::std::string& message) { fprintf(stderr, "%s", message.c_str()); fflush(stderr); // Make sure the text is printed before the process exits. // We call _exit() instead of exit(), as the former is a direct // system call and thus safer in the presence of threads. exit() // will invoke user-defined exit-hooks, which may do dangerous // things that conflict with death tests. // // Some compilers can recognize that _exit() never returns and issue the // 'unreachable code' warning for code following this function, unless // fooled by a fake condition. if (AlwaysTrue()) _exit(1); } void DieInside(const ::std::string& function) { DieWithMessage("death inside " + function + "()."); } // Tests that death tests work. class TestForDeathTest : public testing::Test { protected: TestForDeathTest() : original_dir_(FilePath::GetCurrentDir()) {} virtual ~TestForDeathTest() { posix::ChDir(original_dir_.c_str()); } // A static member function that's expected to die. static void StaticMemberFunction() { DieInside("StaticMemberFunction"); } // A method of the test fixture that may die. void MemberFunction() { if (should_die_) DieInside("MemberFunction"); } // True iff MemberFunction() should die. bool should_die_; const FilePath original_dir_; }; // A class with a member function that may die. class MayDie { public: explicit MayDie(bool should_die) : should_die_(should_die) {} // A member function that may die. void MemberFunction() const { if (should_die_) DieInside("MayDie::MemberFunction"); } private: // True iff MemberFunction() should die. bool should_die_; }; // A global function that's expected to die. void GlobalFunction() { DieInside("GlobalFunction"); } // A non-void function that's expected to die. int NonVoidFunction() { DieInside("NonVoidFunction"); return 1; } // A unary function that may die. void DieIf(bool should_die) { if (should_die) DieInside("DieIf"); } // A binary function that may die. bool DieIfLessThan(int x, int y) { if (x < y) { DieInside("DieIfLessThan"); } return true; } // Tests that ASSERT_DEATH can be used outside a TEST, TEST_F, or test fixture. void DeathTestSubroutine() { EXPECT_DEATH(GlobalFunction(), "death.*GlobalFunction"); ASSERT_DEATH(GlobalFunction(), "death.*GlobalFunction"); } // Death in dbg, not opt. int DieInDebugElse12(int* sideeffect) { if (sideeffect) *sideeffect = 12; # ifndef NDEBUG DieInside("DieInDebugElse12"); # endif // NDEBUG return 12; } # if GTEST_OS_WINDOWS // Tests the ExitedWithCode predicate. TEST(ExitStatusPredicateTest, ExitedWithCode) { // On Windows, the process's exit code is the same as its exit status, // so the predicate just compares the its input with its parameter. EXPECT_TRUE(testing::ExitedWithCode(0)(0)); EXPECT_TRUE(testing::ExitedWithCode(1)(1)); EXPECT_TRUE(testing::ExitedWithCode(42)(42)); EXPECT_FALSE(testing::ExitedWithCode(0)(1)); EXPECT_FALSE(testing::ExitedWithCode(1)(0)); } # else // Returns the exit status of a process that calls _exit(2) with a // given exit code. This is a helper function for the // ExitStatusPredicateTest test suite. static int NormalExitStatus(int exit_code) { pid_t child_pid = fork(); if (child_pid == 0) { _exit(exit_code); } int status; waitpid(child_pid, &status, 0); return status; } // Returns the exit status of a process that raises a given signal. // If the signal does not cause the process to die, then it returns // instead the exit status of a process that exits normally with exit // code 1. This is a helper function for the ExitStatusPredicateTest // test suite. static int KilledExitStatus(int signum) { pid_t child_pid = fork(); if (child_pid == 0) { raise(signum); _exit(1); } int status; waitpid(child_pid, &status, 0); return status; } // Tests the ExitedWithCode predicate. TEST(ExitStatusPredicateTest, ExitedWithCode) { const int status0 = NormalExitStatus(0); const int status1 = NormalExitStatus(1); const int status42 = NormalExitStatus(42); const testing::ExitedWithCode pred0(0); const testing::ExitedWithCode pred1(1); const testing::ExitedWithCode pred42(42); EXPECT_PRED1(pred0, status0); EXPECT_PRED1(pred1, status1); EXPECT_PRED1(pred42, status42); EXPECT_FALSE(pred0(status1)); EXPECT_FALSE(pred42(status0)); EXPECT_FALSE(pred1(status42)); } // Tests the KilledBySignal predicate. TEST(ExitStatusPredicateTest, KilledBySignal) { const int status_segv = KilledExitStatus(SIGSEGV); const int status_kill = KilledExitStatus(SIGKILL); const testing::KilledBySignal pred_segv(SIGSEGV); const testing::KilledBySignal pred_kill(SIGKILL); EXPECT_PRED1(pred_segv, status_segv); EXPECT_PRED1(pred_kill, status_kill); EXPECT_FALSE(pred_segv(status_kill)); EXPECT_FALSE(pred_kill(status_segv)); } # endif // GTEST_OS_WINDOWS // Tests that the death test macros expand to code which may or may not // be followed by operator<<, and that in either case the complete text // comprises only a single C++ statement. TEST_F(TestForDeathTest, SingleStatement) { if (AlwaysFalse()) // This would fail if executed; this is a compilation test only ASSERT_DEATH(return, ""); if (AlwaysTrue()) EXPECT_DEATH(_exit(1), ""); else // This empty "else" branch is meant to ensure that EXPECT_DEATH // doesn't expand into an "if" statement without an "else" ; if (AlwaysFalse()) ASSERT_DEATH(return, "") << "did not die"; if (AlwaysFalse()) ; else EXPECT_DEATH(_exit(1), "") << 1 << 2 << 3; } void DieWithEmbeddedNul() { fprintf(stderr, "Hello%cmy null world.\n", '\0'); fflush(stderr); _exit(1); } # if GTEST_USES_PCRE // Tests that EXPECT_DEATH and ASSERT_DEATH work when the error // message has a NUL character in it. TEST_F(TestForDeathTest, EmbeddedNulInMessage) { // TODO(wan@google.com): doesn't support matching strings // with embedded NUL characters - find a way to workaround it. EXPECT_DEATH(DieWithEmbeddedNul(), "my null world"); ASSERT_DEATH(DieWithEmbeddedNul(), "my null world"); } # endif // GTEST_USES_PCRE // Tests that death test macros expand to code which interacts well with switch // statements. TEST_F(TestForDeathTest, SwitchStatement) { // Microsoft compiler usually complains about switch statements without // case labels. We suppress that warning for this test. # ifdef _MSC_VER # pragma warning(push) # pragma warning(disable: 4065) # endif // _MSC_VER switch (0) default: ASSERT_DEATH(_exit(1), "") << "exit in default switch handler"; switch (0) case 0: EXPECT_DEATH(_exit(1), "") << "exit in switch case"; # ifdef _MSC_VER # pragma warning(pop) # endif // _MSC_VER } // Tests that a static member function can be used in a "fast" style // death test. TEST_F(TestForDeathTest, StaticMemberFunctionFastStyle) { testing::GTEST_FLAG(death_test_style) = "fast"; ASSERT_DEATH(StaticMemberFunction(), "death.*StaticMember"); } // Tests that a method of the test fixture can be used in a "fast" // style death test. TEST_F(TestForDeathTest, MemberFunctionFastStyle) { testing::GTEST_FLAG(death_test_style) = "fast"; should_die_ = true; EXPECT_DEATH(MemberFunction(), "inside.*MemberFunction"); } void ChangeToRootDir() { posix::ChDir(GTEST_PATH_SEP_); } // Tests that death tests work even if the current directory has been // changed. TEST_F(TestForDeathTest, FastDeathTestInChangedDir) { testing::GTEST_FLAG(death_test_style) = "fast"; ChangeToRootDir(); EXPECT_EXIT(_exit(1), testing::ExitedWithCode(1), ""); ChangeToRootDir(); ASSERT_DEATH(_exit(1), ""); } # if GTEST_OS_LINUX void SigprofAction(int, siginfo_t*, void*) { /* no op */ } // Sets SIGPROF action and ITIMER_PROF timer (interval: 1ms). void SetSigprofActionAndTimer() { struct itimerval timer; timer.it_interval.tv_sec = 0; timer.it_interval.tv_usec = 1; timer.it_value = timer.it_interval; ASSERT_EQ(0, setitimer(ITIMER_PROF, &timer, NULL)); struct sigaction signal_action; memset(&signal_action, 0, sizeof(signal_action)); sigemptyset(&signal_action.sa_mask); signal_action.sa_sigaction = SigprofAction; signal_action.sa_flags = SA_RESTART | SA_SIGINFO; ASSERT_EQ(0, sigaction(SIGPROF, &signal_action, NULL)); } // Disables ITIMER_PROF timer and ignores SIGPROF signal. void DisableSigprofActionAndTimer(struct sigaction* old_signal_action) { struct itimerval timer; timer.it_interval.tv_sec = 0; timer.it_interval.tv_usec = 0; timer.it_value = timer.it_interval; ASSERT_EQ(0, setitimer(ITIMER_PROF, &timer, NULL)); struct sigaction signal_action; memset(&signal_action, 0, sizeof(signal_action)); sigemptyset(&signal_action.sa_mask); signal_action.sa_handler = SIG_IGN; ASSERT_EQ(0, sigaction(SIGPROF, &signal_action, old_signal_action)); } // Tests that death tests work when SIGPROF handler and timer are set. TEST_F(TestForDeathTest, FastSigprofActionSet) { testing::GTEST_FLAG(death_test_style) = "fast"; SetSigprofActionAndTimer(); EXPECT_DEATH(_exit(1), ""); struct sigaction old_signal_action; DisableSigprofActionAndTimer(&old_signal_action); EXPECT_TRUE(old_signal_action.sa_sigaction == SigprofAction); } TEST_F(TestForDeathTest, ThreadSafeSigprofActionSet) { testing::GTEST_FLAG(death_test_style) = "threadsafe"; SetSigprofActionAndTimer(); EXPECT_DEATH(_exit(1), ""); struct sigaction old_signal_action; DisableSigprofActionAndTimer(&old_signal_action); EXPECT_TRUE(old_signal_action.sa_sigaction == SigprofAction); } # endif // GTEST_OS_LINUX // Repeats a representative sample of death tests in the "threadsafe" style: TEST_F(TestForDeathTest, StaticMemberFunctionThreadsafeStyle) { testing::GTEST_FLAG(death_test_style) = "threadsafe"; ASSERT_DEATH(StaticMemberFunction(), "death.*StaticMember"); } TEST_F(TestForDeathTest, MemberFunctionThreadsafeStyle) { testing::GTEST_FLAG(death_test_style) = "threadsafe"; should_die_ = true; EXPECT_DEATH(MemberFunction(), "inside.*MemberFunction"); } TEST_F(TestForDeathTest, ThreadsafeDeathTestInLoop) { testing::GTEST_FLAG(death_test_style) = "threadsafe"; for (int i = 0; i < 3; ++i) EXPECT_EXIT(_exit(i), testing::ExitedWithCode(i), "") << ": i = " << i; } TEST_F(TestForDeathTest, ThreadsafeDeathTestInChangedDir) { testing::GTEST_FLAG(death_test_style) = "threadsafe"; ChangeToRootDir(); EXPECT_EXIT(_exit(1), testing::ExitedWithCode(1), ""); ChangeToRootDir(); ASSERT_DEATH(_exit(1), ""); } TEST_F(TestForDeathTest, MixedStyles) { testing::GTEST_FLAG(death_test_style) = "threadsafe"; EXPECT_DEATH(_exit(1), ""); testing::GTEST_FLAG(death_test_style) = "fast"; EXPECT_DEATH(_exit(1), ""); } # if GTEST_HAS_CLONE && GTEST_HAS_PTHREAD namespace { bool pthread_flag; void SetPthreadFlag() { pthread_flag = true; } } // namespace TEST_F(TestForDeathTest, DoesNotExecuteAtforkHooks) { if (!testing::GTEST_FLAG(death_test_use_fork)) { testing::GTEST_FLAG(death_test_style) = "threadsafe"; pthread_flag = false; ASSERT_EQ(0, pthread_atfork(&SetPthreadFlag, NULL, NULL)); ASSERT_DEATH(_exit(1), ""); ASSERT_FALSE(pthread_flag); } } # endif // GTEST_HAS_CLONE && GTEST_HAS_PTHREAD // Tests that a method of another class can be used in a death test. TEST_F(TestForDeathTest, MethodOfAnotherClass) { const MayDie x(true); ASSERT_DEATH(x.MemberFunction(), "MayDie\\:\\:MemberFunction"); } // Tests that a global function can be used in a death test. TEST_F(TestForDeathTest, GlobalFunction) { EXPECT_DEATH(GlobalFunction(), "GlobalFunction"); } // Tests that any value convertible to an RE works as a second // argument to EXPECT_DEATH. TEST_F(TestForDeathTest, AcceptsAnythingConvertibleToRE) { static const char regex_c_str[] = "GlobalFunction"; EXPECT_DEATH(GlobalFunction(), regex_c_str); const testing::internal::RE regex(regex_c_str); EXPECT_DEATH(GlobalFunction(), regex); # if GTEST_HAS_GLOBAL_STRING const string regex_str(regex_c_str); EXPECT_DEATH(GlobalFunction(), regex_str); # endif // GTEST_HAS_GLOBAL_STRING const ::std::string regex_std_str(regex_c_str); EXPECT_DEATH(GlobalFunction(), regex_std_str); } // Tests that a non-void function can be used in a death test. TEST_F(TestForDeathTest, NonVoidFunction) { ASSERT_DEATH(NonVoidFunction(), "NonVoidFunction"); } // Tests that functions that take parameter(s) can be used in a death test. TEST_F(TestForDeathTest, FunctionWithParameter) { EXPECT_DEATH(DieIf(true), "DieIf\\(\\)"); EXPECT_DEATH(DieIfLessThan(2, 3), "DieIfLessThan"); } // Tests that ASSERT_DEATH can be used outside a TEST, TEST_F, or test fixture. TEST_F(TestForDeathTest, OutsideFixture) { DeathTestSubroutine(); } // Tests that death tests can be done inside a loop. TEST_F(TestForDeathTest, InsideLoop) { for (int i = 0; i < 5; i++) { EXPECT_DEATH(DieIfLessThan(-1, i), "DieIfLessThan") << "where i == " << i; } } // Tests that a compound statement can be used in a death test. TEST_F(TestForDeathTest, CompoundStatement) { EXPECT_DEATH({ // NOLINT const int x = 2; const int y = x + 1; DieIfLessThan(x, y); }, "DieIfLessThan"); } // Tests that code that doesn't die causes a death test to fail. TEST_F(TestForDeathTest, DoesNotDie) { EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(DieIf(false), "DieIf"), "failed to die"); } // Tests that a death test fails when the error message isn't expected. TEST_F(TestForDeathTest, ErrorMessageMismatch) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_DEATH(DieIf(true), "DieIfLessThan") << "End of death test message."; }, "died but not with expected error"); } // On exit, *aborted will be true iff the EXPECT_DEATH() statement // aborted the function. void ExpectDeathTestHelper(bool* aborted) { *aborted = true; EXPECT_DEATH(DieIf(false), "DieIf"); // This assertion should fail. *aborted = false; } // Tests that EXPECT_DEATH doesn't abort the test on failure. TEST_F(TestForDeathTest, EXPECT_DEATH) { bool aborted = true; EXPECT_NONFATAL_FAILURE(ExpectDeathTestHelper(&aborted), "failed to die"); EXPECT_FALSE(aborted); } // Tests that ASSERT_DEATH does abort the test on failure. TEST_F(TestForDeathTest, ASSERT_DEATH) { static bool aborted; EXPECT_FATAL_FAILURE({ // NOLINT aborted = true; ASSERT_DEATH(DieIf(false), "DieIf"); // This assertion should fail. aborted = false; }, "failed to die"); EXPECT_TRUE(aborted); } // Tests that EXPECT_DEATH evaluates the arguments exactly once. TEST_F(TestForDeathTest, SingleEvaluation) { int x = 3; EXPECT_DEATH(DieIf((++x) == 4), "DieIf"); const char* regex = "DieIf"; const char* regex_save = regex; EXPECT_DEATH(DieIfLessThan(3, 4), regex++); EXPECT_EQ(regex_save + 1, regex); } // Tests that run-away death tests are reported as failures. TEST_F(TestForDeathTest, RunawayIsFailure) { EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(static_cast(0), "Foo"), "failed to die."); } // Tests that death tests report executing 'return' in the statement as // failure. TEST_F(TestForDeathTest, ReturnIsFailure) { EXPECT_FATAL_FAILURE(ASSERT_DEATH(return, "Bar"), "illegal return in test statement."); } // Tests that EXPECT_DEBUG_DEATH works as expected, that is, you can stream a // message to it, and in debug mode it: // 1. Asserts on death. // 2. Has no side effect. // // And in opt mode, it: // 1. Has side effects but does not assert. TEST_F(TestForDeathTest, TestExpectDebugDeath) { int sideeffect = 0; EXPECT_DEBUG_DEATH(DieInDebugElse12(&sideeffect), "death.*DieInDebugElse12") << "Must accept a streamed message"; # ifdef NDEBUG // Checks that the assignment occurs in opt mode (sideeffect). EXPECT_EQ(12, sideeffect); # else // Checks that the assignment does not occur in dbg mode (no sideeffect). EXPECT_EQ(0, sideeffect); # endif } // Tests that ASSERT_DEBUG_DEATH works as expected, that is, you can stream a // message to it, and in debug mode it: // 1. Asserts on death. // 2. Has no side effect. // // And in opt mode, it: // 1. Has side effects but does not assert. TEST_F(TestForDeathTest, TestAssertDebugDeath) { int sideeffect = 0; ASSERT_DEBUG_DEATH(DieInDebugElse12(&sideeffect), "death.*DieInDebugElse12") << "Must accept a streamed message"; # ifdef NDEBUG // Checks that the assignment occurs in opt mode (sideeffect). EXPECT_EQ(12, sideeffect); # else // Checks that the assignment does not occur in dbg mode (no sideeffect). EXPECT_EQ(0, sideeffect); # endif } # ifndef NDEBUG void ExpectDebugDeathHelper(bool* aborted) { *aborted = true; EXPECT_DEBUG_DEATH(return, "") << "This is expected to fail."; *aborted = false; } # if GTEST_OS_WINDOWS TEST(PopUpDeathTest, DoesNotShowPopUpOnAbort) { printf("This test should be considered failing if it shows " "any pop-up dialogs.\n"); fflush(stdout); EXPECT_DEATH({ testing::GTEST_FLAG(catch_exceptions) = false; abort(); }, ""); } # endif // GTEST_OS_WINDOWS // Tests that EXPECT_DEBUG_DEATH in debug mode does not abort // the function. TEST_F(TestForDeathTest, ExpectDebugDeathDoesNotAbort) { bool aborted = true; EXPECT_NONFATAL_FAILURE(ExpectDebugDeathHelper(&aborted), ""); EXPECT_FALSE(aborted); } void AssertDebugDeathHelper(bool* aborted) { *aborted = true; ASSERT_DEBUG_DEATH(return, "") << "This is expected to fail."; *aborted = false; } // Tests that ASSERT_DEBUG_DEATH in debug mode aborts the function on // failure. TEST_F(TestForDeathTest, AssertDebugDeathAborts) { static bool aborted; aborted = false; EXPECT_FATAL_FAILURE(AssertDebugDeathHelper(&aborted), ""); EXPECT_TRUE(aborted); } # endif // _NDEBUG // Tests the *_EXIT family of macros, using a variety of predicates. static void TestExitMacros() { EXPECT_EXIT(_exit(1), testing::ExitedWithCode(1), ""); ASSERT_EXIT(_exit(42), testing::ExitedWithCode(42), ""); # if GTEST_OS_WINDOWS // Of all signals effects on the process exit code, only those of SIGABRT // are documented on Windows. // See http://msdn.microsoft.com/en-us/library/dwwzkt4c(VS.71).aspx. EXPECT_EXIT(raise(SIGABRT), testing::ExitedWithCode(3), "") << "b_ar"; # else EXPECT_EXIT(raise(SIGKILL), testing::KilledBySignal(SIGKILL), "") << "foo"; ASSERT_EXIT(raise(SIGUSR2), testing::KilledBySignal(SIGUSR2), "") << "bar"; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_EXIT(_exit(0), testing::KilledBySignal(SIGSEGV), "") << "This failure is expected, too."; }, "This failure is expected, too."); # endif // GTEST_OS_WINDOWS EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_EXIT(raise(SIGSEGV), testing::ExitedWithCode(0), "") << "This failure is expected."; }, "This failure is expected."); } TEST_F(TestForDeathTest, ExitMacros) { TestExitMacros(); } TEST_F(TestForDeathTest, ExitMacrosUsingFork) { testing::GTEST_FLAG(death_test_use_fork) = true; TestExitMacros(); } TEST_F(TestForDeathTest, InvalidStyle) { testing::GTEST_FLAG(death_test_style) = "rococo"; EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_DEATH(_exit(0), "") << "This failure is expected."; }, "This failure is expected."); } TEST_F(TestForDeathTest, DeathTestFailedOutput) { testing::GTEST_FLAG(death_test_style) = "fast"; EXPECT_NONFATAL_FAILURE( EXPECT_DEATH(DieWithMessage("death\n"), "expected message"), "Actual msg:\n" "[ DEATH ] death\n"); } TEST_F(TestForDeathTest, DeathTestUnexpectedReturnOutput) { testing::GTEST_FLAG(death_test_style) = "fast"; EXPECT_NONFATAL_FAILURE( EXPECT_DEATH({ fprintf(stderr, "returning\n"); fflush(stderr); return; }, ""), " Result: illegal return in test statement.\n" " Error msg:\n" "[ DEATH ] returning\n"); } TEST_F(TestForDeathTest, DeathTestBadExitCodeOutput) { testing::GTEST_FLAG(death_test_style) = "fast"; EXPECT_NONFATAL_FAILURE( EXPECT_EXIT(DieWithMessage("exiting with rc 1\n"), testing::ExitedWithCode(3), "expected message"), " Result: died but not with expected exit code:\n" " Exited with exit status 1\n" "Actual msg:\n" "[ DEATH ] exiting with rc 1\n"); } TEST_F(TestForDeathTest, DeathTestMultiLineMatchFail) { testing::GTEST_FLAG(death_test_style) = "fast"; EXPECT_NONFATAL_FAILURE( EXPECT_DEATH(DieWithMessage("line 1\nline 2\nline 3\n"), "line 1\nxyz\nline 3\n"), "Actual msg:\n" "[ DEATH ] line 1\n" "[ DEATH ] line 2\n" "[ DEATH ] line 3\n"); } TEST_F(TestForDeathTest, DeathTestMultiLineMatchPass) { testing::GTEST_FLAG(death_test_style) = "fast"; EXPECT_DEATH(DieWithMessage("line 1\nline 2\nline 3\n"), "line 1\nline 2\nline 3\n"); } // A DeathTestFactory that returns MockDeathTests. class MockDeathTestFactory : public DeathTestFactory { public: MockDeathTestFactory(); virtual bool Create(const char* statement, const ::testing::internal::RE* regex, const char* file, int line, DeathTest** test); // Sets the parameters for subsequent calls to Create. void SetParameters(bool create, DeathTest::TestRole role, int status, bool passed); // Accessors. int AssumeRoleCalls() const { return assume_role_calls_; } int WaitCalls() const { return wait_calls_; } int PassedCalls() const { return passed_args_.size(); } bool PassedArgument(int n) const { return passed_args_[n]; } int AbortCalls() const { return abort_args_.size(); } DeathTest::AbortReason AbortArgument(int n) const { return abort_args_[n]; } bool TestDeleted() const { return test_deleted_; } private: friend class MockDeathTest; // If true, Create will return a MockDeathTest; otherwise it returns // NULL. bool create_; // The value a MockDeathTest will return from its AssumeRole method. DeathTest::TestRole role_; // The value a MockDeathTest will return from its Wait method. int status_; // The value a MockDeathTest will return from its Passed method. bool passed_; // Number of times AssumeRole was called. int assume_role_calls_; // Number of times Wait was called. int wait_calls_; // The arguments to the calls to Passed since the last call to // SetParameters. std::vector passed_args_; // The arguments to the calls to Abort since the last call to // SetParameters. std::vector abort_args_; // True if the last MockDeathTest returned by Create has been // deleted. bool test_deleted_; }; // A DeathTest implementation useful in testing. It returns values set // at its creation from its various inherited DeathTest methods, and // reports calls to those methods to its parent MockDeathTestFactory // object. class MockDeathTest : public DeathTest { public: MockDeathTest(MockDeathTestFactory *parent, TestRole role, int status, bool passed) : parent_(parent), role_(role), status_(status), passed_(passed) { } virtual ~MockDeathTest() { parent_->test_deleted_ = true; } virtual TestRole AssumeRole() { ++parent_->assume_role_calls_; return role_; } virtual int Wait() { ++parent_->wait_calls_; return status_; } virtual bool Passed(bool exit_status_ok) { parent_->passed_args_.push_back(exit_status_ok); return passed_; } virtual void Abort(AbortReason reason) { parent_->abort_args_.push_back(reason); } private: MockDeathTestFactory* const parent_; const TestRole role_; const int status_; const bool passed_; }; // MockDeathTestFactory constructor. MockDeathTestFactory::MockDeathTestFactory() : create_(true), role_(DeathTest::OVERSEE_TEST), status_(0), passed_(true), assume_role_calls_(0), wait_calls_(0), passed_args_(), abort_args_() { } // Sets the parameters for subsequent calls to Create. void MockDeathTestFactory::SetParameters(bool create, DeathTest::TestRole role, int status, bool passed) { create_ = create; role_ = role; status_ = status; passed_ = passed; assume_role_calls_ = 0; wait_calls_ = 0; passed_args_.clear(); abort_args_.clear(); } // Sets test to NULL (if create_ is false) or to the address of a new // MockDeathTest object with parameters taken from the last call // to SetParameters (if create_ is true). Always returns true. bool MockDeathTestFactory::Create(const char* /*statement*/, const ::testing::internal::RE* /*regex*/, const char* /*file*/, int /*line*/, DeathTest** test) { test_deleted_ = false; if (create_) { *test = new MockDeathTest(this, role_, status_, passed_); } else { *test = NULL; } return true; } // A test fixture for testing the logic of the GTEST_DEATH_TEST_ macro. // It installs a MockDeathTestFactory that is used for the duration // of the test case. class MacroLogicDeathTest : public testing::Test { protected: static testing::internal::ReplaceDeathTestFactory* replacer_; static MockDeathTestFactory* factory_; static void SetUpTestCase() { factory_ = new MockDeathTestFactory; replacer_ = new testing::internal::ReplaceDeathTestFactory(factory_); } static void TearDownTestCase() { delete replacer_; replacer_ = NULL; delete factory_; factory_ = NULL; } // Runs a death test that breaks the rules by returning. Such a death // test cannot be run directly from a test routine that uses a // MockDeathTest, or the remainder of the routine will not be executed. static void RunReturningDeathTest(bool* flag) { ASSERT_DEATH({ // NOLINT *flag = true; return; }, ""); } }; testing::internal::ReplaceDeathTestFactory* MacroLogicDeathTest::replacer_ = NULL; MockDeathTestFactory* MacroLogicDeathTest::factory_ = NULL; // Test that nothing happens when the factory doesn't return a DeathTest: TEST_F(MacroLogicDeathTest, NothingHappens) { bool flag = false; factory_->SetParameters(false, DeathTest::OVERSEE_TEST, 0, true); EXPECT_DEATH(flag = true, ""); EXPECT_FALSE(flag); EXPECT_EQ(0, factory_->AssumeRoleCalls()); EXPECT_EQ(0, factory_->WaitCalls()); EXPECT_EQ(0, factory_->PassedCalls()); EXPECT_EQ(0, factory_->AbortCalls()); EXPECT_FALSE(factory_->TestDeleted()); } // Test that the parent process doesn't run the death test code, // and that the Passed method returns false when the (simulated) // child process exits with status 0: TEST_F(MacroLogicDeathTest, ChildExitsSuccessfully) { bool flag = false; factory_->SetParameters(true, DeathTest::OVERSEE_TEST, 0, true); EXPECT_DEATH(flag = true, ""); EXPECT_FALSE(flag); EXPECT_EQ(1, factory_->AssumeRoleCalls()); EXPECT_EQ(1, factory_->WaitCalls()); ASSERT_EQ(1, factory_->PassedCalls()); EXPECT_FALSE(factory_->PassedArgument(0)); EXPECT_EQ(0, factory_->AbortCalls()); EXPECT_TRUE(factory_->TestDeleted()); } // Tests that the Passed method was given the argument "true" when // the (simulated) child process exits with status 1: TEST_F(MacroLogicDeathTest, ChildExitsUnsuccessfully) { bool flag = false; factory_->SetParameters(true, DeathTest::OVERSEE_TEST, 1, true); EXPECT_DEATH(flag = true, ""); EXPECT_FALSE(flag); EXPECT_EQ(1, factory_->AssumeRoleCalls()); EXPECT_EQ(1, factory_->WaitCalls()); ASSERT_EQ(1, factory_->PassedCalls()); EXPECT_TRUE(factory_->PassedArgument(0)); EXPECT_EQ(0, factory_->AbortCalls()); EXPECT_TRUE(factory_->TestDeleted()); } // Tests that the (simulated) child process executes the death test // code, and is aborted with the correct AbortReason if it // executes a return statement. TEST_F(MacroLogicDeathTest, ChildPerformsReturn) { bool flag = false; factory_->SetParameters(true, DeathTest::EXECUTE_TEST, 0, true); RunReturningDeathTest(&flag); EXPECT_TRUE(flag); EXPECT_EQ(1, factory_->AssumeRoleCalls()); EXPECT_EQ(0, factory_->WaitCalls()); EXPECT_EQ(0, factory_->PassedCalls()); EXPECT_EQ(1, factory_->AbortCalls()); EXPECT_EQ(DeathTest::TEST_ENCOUNTERED_RETURN_STATEMENT, factory_->AbortArgument(0)); EXPECT_TRUE(factory_->TestDeleted()); } // Tests that the (simulated) child process is aborted with the // correct AbortReason if it does not die. TEST_F(MacroLogicDeathTest, ChildDoesNotDie) { bool flag = false; factory_->SetParameters(true, DeathTest::EXECUTE_TEST, 0, true); EXPECT_DEATH(flag = true, ""); EXPECT_TRUE(flag); EXPECT_EQ(1, factory_->AssumeRoleCalls()); EXPECT_EQ(0, factory_->WaitCalls()); EXPECT_EQ(0, factory_->PassedCalls()); // This time there are two calls to Abort: one since the test didn't // die, and another from the ReturnSentinel when it's destroyed. The // sentinel normally isn't destroyed if a test doesn't die, since // _exit(2) is called in that case by ForkingDeathTest, but not by // our MockDeathTest. ASSERT_EQ(2, factory_->AbortCalls()); EXPECT_EQ(DeathTest::TEST_DID_NOT_DIE, factory_->AbortArgument(0)); EXPECT_EQ(DeathTest::TEST_ENCOUNTERED_RETURN_STATEMENT, factory_->AbortArgument(1)); EXPECT_TRUE(factory_->TestDeleted()); } // Tests that a successful death test does not register a successful // test part. TEST(SuccessRegistrationDeathTest, NoSuccessPart) { EXPECT_DEATH(_exit(1), ""); EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); } TEST(StreamingAssertionsDeathTest, DeathTest) { EXPECT_DEATH(_exit(1), "") << "unexpected failure"; ASSERT_DEATH(_exit(1), "") << "unexpected failure"; EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_DEATH(_exit(0), "") << "expected failure"; }, "expected failure"); EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_DEATH(_exit(0), "") << "expected failure"; }, "expected failure"); } // Tests that GetLastErrnoDescription returns an empty string when the // last error is 0 and non-empty string when it is non-zero. TEST(GetLastErrnoDescription, GetLastErrnoDescriptionWorks) { errno = ENOENT; EXPECT_STRNE("", GetLastErrnoDescription().c_str()); errno = 0; EXPECT_STREQ("", GetLastErrnoDescription().c_str()); } # if GTEST_OS_WINDOWS TEST(AutoHandleTest, AutoHandleWorks) { HANDLE handle = ::CreateEvent(NULL, FALSE, FALSE, NULL); ASSERT_NE(INVALID_HANDLE_VALUE, handle); // Tests that the AutoHandle is correctly initialized with a handle. testing::internal::AutoHandle auto_handle(handle); EXPECT_EQ(handle, auto_handle.Get()); // Tests that Reset assigns INVALID_HANDLE_VALUE. // Note that this cannot verify whether the original handle is closed. auto_handle.Reset(); EXPECT_EQ(INVALID_HANDLE_VALUE, auto_handle.Get()); // Tests that Reset assigns the new handle. // Note that this cannot verify whether the original handle is closed. handle = ::CreateEvent(NULL, FALSE, FALSE, NULL); ASSERT_NE(INVALID_HANDLE_VALUE, handle); auto_handle.Reset(handle); EXPECT_EQ(handle, auto_handle.Get()); // Tests that AutoHandle contains INVALID_HANDLE_VALUE by default. testing::internal::AutoHandle auto_handle2; EXPECT_EQ(INVALID_HANDLE_VALUE, auto_handle2.Get()); } # endif // GTEST_OS_WINDOWS # if GTEST_OS_WINDOWS typedef unsigned __int64 BiggestParsable; typedef signed __int64 BiggestSignedParsable; # else typedef unsigned long long BiggestParsable; typedef signed long long BiggestSignedParsable; # endif // GTEST_OS_WINDOWS // We cannot use std::numeric_limits::max() as it clashes with the // max() macro defined by . const BiggestParsable kBiggestParsableMax = ULLONG_MAX; const BiggestSignedParsable kBiggestSignedParsableMax = LLONG_MAX; TEST(ParseNaturalNumberTest, RejectsInvalidFormat) { BiggestParsable result = 0; // Rejects non-numbers. EXPECT_FALSE(ParseNaturalNumber("non-number string", &result)); // Rejects numbers with whitespace prefix. EXPECT_FALSE(ParseNaturalNumber(" 123", &result)); // Rejects negative numbers. EXPECT_FALSE(ParseNaturalNumber("-123", &result)); // Rejects numbers starting with a plus sign. EXPECT_FALSE(ParseNaturalNumber("+123", &result)); errno = 0; } TEST(ParseNaturalNumberTest, RejectsOverflownNumbers) { BiggestParsable result = 0; EXPECT_FALSE(ParseNaturalNumber("99999999999999999999999", &result)); signed char char_result = 0; EXPECT_FALSE(ParseNaturalNumber("200", &char_result)); errno = 0; } TEST(ParseNaturalNumberTest, AcceptsValidNumbers) { BiggestParsable result = 0; result = 0; ASSERT_TRUE(ParseNaturalNumber("123", &result)); EXPECT_EQ(123U, result); // Check 0 as an edge case. result = 1; ASSERT_TRUE(ParseNaturalNumber("0", &result)); EXPECT_EQ(0U, result); result = 1; ASSERT_TRUE(ParseNaturalNumber("00000", &result)); EXPECT_EQ(0U, result); } TEST(ParseNaturalNumberTest, AcceptsTypeLimits) { Message msg; msg << kBiggestParsableMax; BiggestParsable result = 0; EXPECT_TRUE(ParseNaturalNumber(msg.GetString(), &result)); EXPECT_EQ(kBiggestParsableMax, result); Message msg2; msg2 << kBiggestSignedParsableMax; BiggestSignedParsable signed_result = 0; EXPECT_TRUE(ParseNaturalNumber(msg2.GetString(), &signed_result)); EXPECT_EQ(kBiggestSignedParsableMax, signed_result); Message msg3; msg3 << INT_MAX; int int_result = 0; EXPECT_TRUE(ParseNaturalNumber(msg3.GetString(), &int_result)); EXPECT_EQ(INT_MAX, int_result); Message msg4; msg4 << UINT_MAX; unsigned int uint_result = 0; EXPECT_TRUE(ParseNaturalNumber(msg4.GetString(), &uint_result)); EXPECT_EQ(UINT_MAX, uint_result); } TEST(ParseNaturalNumberTest, WorksForShorterIntegers) { short short_result = 0; ASSERT_TRUE(ParseNaturalNumber("123", &short_result)); EXPECT_EQ(123, short_result); signed char char_result = 0; ASSERT_TRUE(ParseNaturalNumber("123", &char_result)); EXPECT_EQ(123, char_result); } # if GTEST_OS_WINDOWS TEST(EnvironmentTest, HandleFitsIntoSizeT) { // TODO(vladl@google.com): Remove this test after this condition is verified // in a static assertion in gtest-death-test.cc in the function // GetStatusFileDescriptor. ASSERT_TRUE(sizeof(HANDLE) <= sizeof(size_t)); } # endif // GTEST_OS_WINDOWS // Tests that EXPECT_DEATH_IF_SUPPORTED/ASSERT_DEATH_IF_SUPPORTED trigger // failures when death tests are available on the system. TEST(ConditionalDeathMacrosDeathTest, ExpectsDeathWhenDeathTestsAvailable) { EXPECT_DEATH_IF_SUPPORTED(DieInside("CondDeathTestExpectMacro"), "death inside CondDeathTestExpectMacro"); ASSERT_DEATH_IF_SUPPORTED(DieInside("CondDeathTestAssertMacro"), "death inside CondDeathTestAssertMacro"); // Empty statement will not crash, which must trigger a failure. EXPECT_NONFATAL_FAILURE(EXPECT_DEATH_IF_SUPPORTED(;, ""), ""); EXPECT_FATAL_FAILURE(ASSERT_DEATH_IF_SUPPORTED(;, ""), ""); } #else using testing::internal::CaptureStderr; using testing::internal::GetCapturedStderr; // Tests that EXPECT_DEATH_IF_SUPPORTED/ASSERT_DEATH_IF_SUPPORTED are still // defined but do not trigger failures when death tests are not available on // the system. TEST(ConditionalDeathMacrosTest, WarnsWhenDeathTestsNotAvailable) { // Empty statement will not crash, but that should not trigger a failure // when death tests are not supported. CaptureStderr(); EXPECT_DEATH_IF_SUPPORTED(;, ""); std::string output = GetCapturedStderr(); ASSERT_TRUE(NULL != strstr(output.c_str(), "Death tests are not supported on this platform")); ASSERT_TRUE(NULL != strstr(output.c_str(), ";")); // The streamed message should not be printed as there is no test failure. CaptureStderr(); EXPECT_DEATH_IF_SUPPORTED(;, "") << "streamed message"; output = GetCapturedStderr(); ASSERT_TRUE(NULL == strstr(output.c_str(), "streamed message")); CaptureStderr(); ASSERT_DEATH_IF_SUPPORTED(;, ""); // NOLINT output = GetCapturedStderr(); ASSERT_TRUE(NULL != strstr(output.c_str(), "Death tests are not supported on this platform")); ASSERT_TRUE(NULL != strstr(output.c_str(), ";")); CaptureStderr(); ASSERT_DEATH_IF_SUPPORTED(;, "") << "streamed message"; // NOLINT output = GetCapturedStderr(); ASSERT_TRUE(NULL == strstr(output.c_str(), "streamed message")); } void FuncWithAssert(int* n) { ASSERT_DEATH_IF_SUPPORTED(return;, ""); (*n)++; } // Tests that ASSERT_DEATH_IF_SUPPORTED does not return from the current // function (as ASSERT_DEATH does) if death tests are not supported. TEST(ConditionalDeathMacrosTest, AssertDeatDoesNotReturnhIfUnsupported) { int n = 0; FuncWithAssert(&n); EXPECT_EQ(1, n); } TEST(InDeathTestChildDeathTest, ReportsDeathTestCorrectlyInFastStyle) { testing::GTEST_FLAG(death_test_style) = "fast"; EXPECT_FALSE(InDeathTestChild()); EXPECT_DEATH({ fprintf(stderr, InDeathTestChild() ? "Inside" : "Outside"); fflush(stderr); _exit(1); }, "Inside"); } TEST(InDeathTestChildDeathTest, ReportsDeathTestCorrectlyInThreadSafeStyle) { testing::GTEST_FLAG(death_test_style) = "threadsafe"; EXPECT_FALSE(InDeathTestChild()); EXPECT_DEATH({ fprintf(stderr, InDeathTestChild() ? "Inside" : "Outside"); fflush(stderr); _exit(1); }, "Inside"); } #endif // GTEST_HAS_DEATH_TEST // Tests that the death test macros expand to code which may or may not // be followed by operator<<, and that in either case the complete text // comprises only a single C++ statement. // // The syntax should work whether death tests are available or not. TEST(ConditionalDeathMacrosSyntaxDeathTest, SingleStatement) { if (AlwaysFalse()) // This would fail if executed; this is a compilation test only ASSERT_DEATH_IF_SUPPORTED(return, ""); if (AlwaysTrue()) EXPECT_DEATH_IF_SUPPORTED(_exit(1), ""); else // This empty "else" branch is meant to ensure that EXPECT_DEATH // doesn't expand into an "if" statement without an "else" ; // NOLINT if (AlwaysFalse()) ASSERT_DEATH_IF_SUPPORTED(return, "") << "did not die"; if (AlwaysFalse()) ; // NOLINT else EXPECT_DEATH_IF_SUPPORTED(_exit(1), "") << 1 << 2 << 3; } // Tests that conditional death test macros expand to code which interacts // well with switch statements. TEST(ConditionalDeathMacrosSyntaxDeathTest, SwitchStatement) { // Microsoft compiler usually complains about switch statements without // case labels. We suppress that warning for this test. #ifdef _MSC_VER # pragma warning(push) # pragma warning(disable: 4065) #endif // _MSC_VER switch (0) default: ASSERT_DEATH_IF_SUPPORTED(_exit(1), "") << "exit in default switch handler"; switch (0) case 0: EXPECT_DEATH_IF_SUPPORTED(_exit(1), "") << "exit in switch case"; #ifdef _MSC_VER # pragma warning(pop) #endif // _MSC_VER } // Tests that a test case whose name ends with "DeathTest" works fine // on Windows. TEST(NotADeathTest, Test) { SUCCEED(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-filepath_test.cc000066400000000000000000000561451377520261000227060ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: keith.ray@gmail.com (Keith Ray) // // Google Test filepath utilities // // This file tests classes and functions used internally by // Google Test. They are subject to change without notice. // // This file is #included from gtest_unittest.cc, to avoid changing // build or make-files for some existing Google Test clients. Do not // #include this file anywhere else! #include "gtest/internal/gtest-filepath.h" #include "gtest/gtest.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ #if GTEST_OS_WINDOWS_MOBILE # include // NOLINT #elif GTEST_OS_WINDOWS # include // NOLINT #endif // GTEST_OS_WINDOWS_MOBILE namespace testing { namespace internal { namespace { #if GTEST_OS_WINDOWS_MOBILE // TODO(wan@google.com): Move these to the POSIX adapter section in // gtest-port.h. // Windows CE doesn't have the remove C function. int remove(const char* path) { LPCWSTR wpath = String::AnsiToUtf16(path); int ret = DeleteFile(wpath) ? 0 : -1; delete [] wpath; return ret; } // Windows CE doesn't have the _rmdir C function. int _rmdir(const char* path) { FilePath filepath(path); LPCWSTR wpath = String::AnsiToUtf16( filepath.RemoveTrailingPathSeparator().c_str()); int ret = RemoveDirectory(wpath) ? 0 : -1; delete [] wpath; return ret; } #else TEST(GetCurrentDirTest, ReturnsCurrentDir) { const FilePath original_dir = FilePath::GetCurrentDir(); EXPECT_FALSE(original_dir.IsEmpty()); posix::ChDir(GTEST_PATH_SEP_); const FilePath cwd = FilePath::GetCurrentDir(); posix::ChDir(original_dir.c_str()); # if GTEST_OS_WINDOWS // Skips the ":". const char* const cwd_without_drive = strchr(cwd.c_str(), ':'); ASSERT_TRUE(cwd_without_drive != NULL); EXPECT_STREQ(GTEST_PATH_SEP_, cwd_without_drive + 1); # else EXPECT_EQ(GTEST_PATH_SEP_, cwd.string()); # endif } #endif // GTEST_OS_WINDOWS_MOBILE TEST(IsEmptyTest, ReturnsTrueForEmptyPath) { EXPECT_TRUE(FilePath("").IsEmpty()); } TEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) { EXPECT_FALSE(FilePath("a").IsEmpty()); EXPECT_FALSE(FilePath(".").IsEmpty()); EXPECT_FALSE(FilePath("a/b").IsEmpty()); EXPECT_FALSE(FilePath("a\\b\\").IsEmpty()); } // RemoveDirectoryName "" -> "" TEST(RemoveDirectoryNameTest, WhenEmptyName) { EXPECT_EQ("", FilePath("").RemoveDirectoryName().string()); } // RemoveDirectoryName "afile" -> "afile" TEST(RemoveDirectoryNameTest, ButNoDirectory) { EXPECT_EQ("afile", FilePath("afile").RemoveDirectoryName().string()); } // RemoveDirectoryName "/afile" -> "afile" TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) { EXPECT_EQ("afile", FilePath(GTEST_PATH_SEP_ "afile").RemoveDirectoryName().string()); } // RemoveDirectoryName "adir/" -> "" TEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) { EXPECT_EQ("", FilePath("adir" GTEST_PATH_SEP_).RemoveDirectoryName().string()); } // RemoveDirectoryName "adir/afile" -> "afile" TEST(RemoveDirectoryNameTest, ShouldGiveFileName) { EXPECT_EQ("afile", FilePath("adir" GTEST_PATH_SEP_ "afile").RemoveDirectoryName().string()); } // RemoveDirectoryName "adir/subdir/afile" -> "afile" TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) { EXPECT_EQ("afile", FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile") .RemoveDirectoryName().string()); } #if GTEST_HAS_ALT_PATH_SEP_ // Tests that RemoveDirectoryName() works with the alternate separator // on Windows. // RemoveDirectoryName("/afile") -> "afile" TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) { EXPECT_EQ("afile", FilePath("/afile").RemoveDirectoryName().string()); } // RemoveDirectoryName("adir/") -> "" TEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) { EXPECT_EQ("", FilePath("adir/").RemoveDirectoryName().string()); } // RemoveDirectoryName("adir/afile") -> "afile" TEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) { EXPECT_EQ("afile", FilePath("adir/afile").RemoveDirectoryName().string()); } // RemoveDirectoryName("adir/subdir/afile") -> "afile" TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) { EXPECT_EQ("afile", FilePath("adir/subdir/afile").RemoveDirectoryName().string()); } #endif // RemoveFileName "" -> "./" TEST(RemoveFileNameTest, EmptyName) { #if GTEST_OS_WINDOWS_MOBILE // On Windows CE, we use the root as the current directory. EXPECT_EQ(GTEST_PATH_SEP_, FilePath("").RemoveFileName().string()); #else EXPECT_EQ("." GTEST_PATH_SEP_, FilePath("").RemoveFileName().string()); #endif } // RemoveFileName "adir/" -> "adir/" TEST(RemoveFileNameTest, ButNoFile) { EXPECT_EQ("adir" GTEST_PATH_SEP_, FilePath("adir" GTEST_PATH_SEP_).RemoveFileName().string()); } // RemoveFileName "adir/afile" -> "adir/" TEST(RemoveFileNameTest, GivesDirName) { EXPECT_EQ("adir" GTEST_PATH_SEP_, FilePath("adir" GTEST_PATH_SEP_ "afile").RemoveFileName().string()); } // RemoveFileName "adir/subdir/afile" -> "adir/subdir/" TEST(RemoveFileNameTest, GivesDirAndSubDirName) { EXPECT_EQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_, FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile") .RemoveFileName().string()); } // RemoveFileName "/afile" -> "/" TEST(RemoveFileNameTest, GivesRootDir) { EXPECT_EQ(GTEST_PATH_SEP_, FilePath(GTEST_PATH_SEP_ "afile").RemoveFileName().string()); } #if GTEST_HAS_ALT_PATH_SEP_ // Tests that RemoveFileName() works with the alternate separator on // Windows. // RemoveFileName("adir/") -> "adir/" TEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) { EXPECT_EQ("adir" GTEST_PATH_SEP_, FilePath("adir/").RemoveFileName().string()); } // RemoveFileName("adir/afile") -> "adir/" TEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) { EXPECT_EQ("adir" GTEST_PATH_SEP_, FilePath("adir/afile").RemoveFileName().string()); } // RemoveFileName("adir/subdir/afile") -> "adir/subdir/" TEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) { EXPECT_EQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_, FilePath("adir/subdir/afile").RemoveFileName().string()); } // RemoveFileName("/afile") -> "\" TEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) { EXPECT_EQ(GTEST_PATH_SEP_, FilePath("/afile").RemoveFileName().string()); } #endif TEST(MakeFileNameTest, GenerateWhenNumberIsZero) { FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"), 0, "xml"); EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string()); } TEST(MakeFileNameTest, GenerateFileNameNumberGtZero) { FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"), 12, "xml"); EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.string()); } TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) { FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_), FilePath("bar"), 0, "xml"); EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string()); } TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) { FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_), FilePath("bar"), 12, "xml"); EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.string()); } TEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) { FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"), 0, "xml"); EXPECT_EQ("bar.xml", actual.string()); } TEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) { FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"), 14, "xml"); EXPECT_EQ("bar_14.xml", actual.string()); } TEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) { FilePath actual = FilePath::ConcatPaths(FilePath("foo"), FilePath("bar.xml")); EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string()); } TEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) { FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_), FilePath("bar.xml")); EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string()); } TEST(ConcatPathsTest, Path1BeingEmpty) { FilePath actual = FilePath::ConcatPaths(FilePath(""), FilePath("bar.xml")); EXPECT_EQ("bar.xml", actual.string()); } TEST(ConcatPathsTest, Path2BeingEmpty) { FilePath actual = FilePath::ConcatPaths(FilePath("foo"), FilePath("")); EXPECT_EQ("foo" GTEST_PATH_SEP_, actual.string()); } TEST(ConcatPathsTest, BothPathBeingEmpty) { FilePath actual = FilePath::ConcatPaths(FilePath(""), FilePath("")); EXPECT_EQ("", actual.string()); } TEST(ConcatPathsTest, Path1ContainsPathSep) { FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_ "bar"), FilePath("foobar.xml")); EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "foobar.xml", actual.string()); } TEST(ConcatPathsTest, Path2ContainsPathSep) { FilePath actual = FilePath::ConcatPaths( FilePath("foo" GTEST_PATH_SEP_), FilePath("bar" GTEST_PATH_SEP_ "bar.xml")); EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "bar.xml", actual.string()); } TEST(ConcatPathsTest, Path2EndsWithPathSep) { FilePath actual = FilePath::ConcatPaths(FilePath("foo"), FilePath("bar" GTEST_PATH_SEP_)); EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_, actual.string()); } // RemoveTrailingPathSeparator "" -> "" TEST(RemoveTrailingPathSeparatorTest, EmptyString) { EXPECT_EQ("", FilePath("").RemoveTrailingPathSeparator().string()); } // RemoveTrailingPathSeparator "foo" -> "foo" TEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) { EXPECT_EQ("foo", FilePath("foo").RemoveTrailingPathSeparator().string()); } // RemoveTrailingPathSeparator "foo/" -> "foo" TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveTrailingSeparator) { EXPECT_EQ("foo", FilePath("foo" GTEST_PATH_SEP_).RemoveTrailingPathSeparator().string()); #if GTEST_HAS_ALT_PATH_SEP_ EXPECT_EQ("foo", FilePath("foo/").RemoveTrailingPathSeparator().string()); #endif } // RemoveTrailingPathSeparator "foo/bar/" -> "foo/bar/" TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) { EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar", FilePath("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_) .RemoveTrailingPathSeparator().string()); } // RemoveTrailingPathSeparator "foo/bar" -> "foo/bar" TEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) { EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar", FilePath("foo" GTEST_PATH_SEP_ "bar") .RemoveTrailingPathSeparator().string()); } TEST(DirectoryTest, RootDirectoryExists) { #if GTEST_OS_WINDOWS // We are on Windows. char current_drive[_MAX_PATH]; // NOLINT current_drive[0] = static_cast(_getdrive() + 'A' - 1); current_drive[1] = ':'; current_drive[2] = '\\'; current_drive[3] = '\0'; EXPECT_TRUE(FilePath(current_drive).DirectoryExists()); #else EXPECT_TRUE(FilePath("/").DirectoryExists()); #endif // GTEST_OS_WINDOWS } #if GTEST_OS_WINDOWS TEST(DirectoryTest, RootOfWrongDriveDoesNotExists) { const int saved_drive_ = _getdrive(); // Find a drive that doesn't exist. Start with 'Z' to avoid common ones. for (char drive = 'Z'; drive >= 'A'; drive--) if (_chdrive(drive - 'A' + 1) == -1) { char non_drive[_MAX_PATH]; // NOLINT non_drive[0] = drive; non_drive[1] = ':'; non_drive[2] = '\\'; non_drive[3] = '\0'; EXPECT_FALSE(FilePath(non_drive).DirectoryExists()); break; } _chdrive(saved_drive_); } #endif // GTEST_OS_WINDOWS #if !GTEST_OS_WINDOWS_MOBILE // Windows CE _does_ consider an empty directory to exist. TEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) { EXPECT_FALSE(FilePath("").DirectoryExists()); } #endif // !GTEST_OS_WINDOWS_MOBILE TEST(DirectoryTest, CurrentDirectoryExists) { #if GTEST_OS_WINDOWS // We are on Windows. # ifndef _WIN32_CE // Windows CE doesn't have a current directory. EXPECT_TRUE(FilePath(".").DirectoryExists()); EXPECT_TRUE(FilePath(".\\").DirectoryExists()); # endif // _WIN32_CE #else EXPECT_TRUE(FilePath(".").DirectoryExists()); EXPECT_TRUE(FilePath("./").DirectoryExists()); #endif // GTEST_OS_WINDOWS } // "foo/bar" == foo//bar" == "foo///bar" TEST(NormalizeTest, MultipleConsecutiveSepaparatorsInMidstring) { EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar", FilePath("foo" GTEST_PATH_SEP_ "bar").string()); EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar", FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").string()); EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar", FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").string()); } // "/bar" == //bar" == "///bar" TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringStart) { EXPECT_EQ(GTEST_PATH_SEP_ "bar", FilePath(GTEST_PATH_SEP_ "bar").string()); EXPECT_EQ(GTEST_PATH_SEP_ "bar", FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").string()); EXPECT_EQ(GTEST_PATH_SEP_ "bar", FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").string()); } // "foo/" == foo//" == "foo///" TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringEnd) { EXPECT_EQ("foo" GTEST_PATH_SEP_, FilePath("foo" GTEST_PATH_SEP_).string()); EXPECT_EQ("foo" GTEST_PATH_SEP_, FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_).string()); EXPECT_EQ("foo" GTEST_PATH_SEP_, FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_).string()); } #if GTEST_HAS_ALT_PATH_SEP_ // Tests that separators at the end of the string are normalized // regardless of their combination (e.g. "foo\" =="foo/\" == // "foo\\/"). TEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) { EXPECT_EQ("foo" GTEST_PATH_SEP_, FilePath("foo/").string()); EXPECT_EQ("foo" GTEST_PATH_SEP_, FilePath("foo" GTEST_PATH_SEP_ "/").string()); EXPECT_EQ("foo" GTEST_PATH_SEP_, FilePath("foo//" GTEST_PATH_SEP_).string()); } #endif TEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) { FilePath default_path; FilePath non_default_path("path"); non_default_path = default_path; EXPECT_EQ("", non_default_path.string()); EXPECT_EQ("", default_path.string()); // RHS var is unchanged. } TEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) { FilePath non_default_path("path"); FilePath default_path; default_path = non_default_path; EXPECT_EQ("path", default_path.string()); EXPECT_EQ("path", non_default_path.string()); // RHS var is unchanged. } TEST(AssignmentOperatorTest, ConstAssignedToNonConst) { const FilePath const_default_path("const_path"); FilePath non_default_path("path"); non_default_path = const_default_path; EXPECT_EQ("const_path", non_default_path.string()); } class DirectoryCreationTest : public Test { protected: virtual void SetUp() { testdata_path_.Set(FilePath( TempDir() + GetCurrentExecutableName().string() + "_directory_creation" GTEST_PATH_SEP_ "test" GTEST_PATH_SEP_)); testdata_file_.Set(testdata_path_.RemoveTrailingPathSeparator()); unique_file0_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"), 0, "txt")); unique_file1_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"), 1, "txt")); remove(testdata_file_.c_str()); remove(unique_file0_.c_str()); remove(unique_file1_.c_str()); posix::RmDir(testdata_path_.c_str()); } virtual void TearDown() { remove(testdata_file_.c_str()); remove(unique_file0_.c_str()); remove(unique_file1_.c_str()); posix::RmDir(testdata_path_.c_str()); } std::string TempDir() const { #if GTEST_OS_WINDOWS_MOBILE return "\\temp\\"; #elif GTEST_OS_WINDOWS const char* temp_dir = posix::GetEnv("TEMP"); if (temp_dir == NULL || temp_dir[0] == '\0') return "\\temp\\"; else if (temp_dir[strlen(temp_dir) - 1] == '\\') return temp_dir; else return std::string(temp_dir) + "\\"; #elif GTEST_OS_LINUX_ANDROID return "/sdcard/"; #else return "/tmp/"; #endif // GTEST_OS_WINDOWS_MOBILE } void CreateTextFile(const char* filename) { FILE* f = posix::FOpen(filename, "w"); fprintf(f, "text\n"); fclose(f); } // Strings representing a directory and a file, with identical paths // except for the trailing separator character that distinquishes // a directory named 'test' from a file named 'test'. Example names: FilePath testdata_path_; // "/tmp/directory_creation/test/" FilePath testdata_file_; // "/tmp/directory_creation/test" FilePath unique_file0_; // "/tmp/directory_creation/test/unique.txt" FilePath unique_file1_; // "/tmp/directory_creation/test/unique_1.txt" }; TEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) { EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string(); EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); EXPECT_TRUE(testdata_path_.DirectoryExists()); } TEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) { EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string(); EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); // Call 'create' again... should still succeed. EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); } TEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) { FilePath file_path(FilePath::GenerateUniqueFileName(testdata_path_, FilePath("unique"), "txt")); EXPECT_EQ(unique_file0_.string(), file_path.string()); EXPECT_FALSE(file_path.FileOrDirectoryExists()); // file not there testdata_path_.CreateDirectoriesRecursively(); EXPECT_FALSE(file_path.FileOrDirectoryExists()); // file still not there CreateTextFile(file_path.c_str()); EXPECT_TRUE(file_path.FileOrDirectoryExists()); FilePath file_path2(FilePath::GenerateUniqueFileName(testdata_path_, FilePath("unique"), "txt")); EXPECT_EQ(unique_file1_.string(), file_path2.string()); EXPECT_FALSE(file_path2.FileOrDirectoryExists()); // file not there CreateTextFile(file_path2.c_str()); EXPECT_TRUE(file_path2.FileOrDirectoryExists()); } TEST_F(DirectoryCreationTest, CreateDirectoriesFail) { // force a failure by putting a file where we will try to create a directory. CreateTextFile(testdata_file_.c_str()); EXPECT_TRUE(testdata_file_.FileOrDirectoryExists()); EXPECT_FALSE(testdata_file_.DirectoryExists()); EXPECT_FALSE(testdata_file_.CreateDirectoriesRecursively()); } TEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) { const FilePath test_detail_xml("test_detail.xml"); EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively()); } TEST(FilePathTest, DefaultConstructor) { FilePath fp; EXPECT_EQ("", fp.string()); } TEST(FilePathTest, CharAndCopyConstructors) { const FilePath fp("spicy"); EXPECT_EQ("spicy", fp.string()); const FilePath fp_copy(fp); EXPECT_EQ("spicy", fp_copy.string()); } TEST(FilePathTest, StringConstructor) { const FilePath fp(std::string("cider")); EXPECT_EQ("cider", fp.string()); } TEST(FilePathTest, Set) { const FilePath apple("apple"); FilePath mac("mac"); mac.Set(apple); // Implement Set() since overloading operator= is forbidden. EXPECT_EQ("apple", mac.string()); EXPECT_EQ("apple", apple.string()); } TEST(FilePathTest, ToString) { const FilePath file("drink"); EXPECT_EQ("drink", file.string()); } TEST(FilePathTest, RemoveExtension) { EXPECT_EQ("app", FilePath("app.cc").RemoveExtension("cc").string()); EXPECT_EQ("app", FilePath("app.exe").RemoveExtension("exe").string()); EXPECT_EQ("APP", FilePath("APP.EXE").RemoveExtension("exe").string()); } TEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) { EXPECT_EQ("app", FilePath("app").RemoveExtension("exe").string()); } TEST(FilePathTest, IsDirectory) { EXPECT_FALSE(FilePath("cola").IsDirectory()); EXPECT_TRUE(FilePath("koala" GTEST_PATH_SEP_).IsDirectory()); #if GTEST_HAS_ALT_PATH_SEP_ EXPECT_TRUE(FilePath("koala/").IsDirectory()); #endif } TEST(FilePathTest, IsAbsolutePath) { EXPECT_FALSE(FilePath("is" GTEST_PATH_SEP_ "relative").IsAbsolutePath()); EXPECT_FALSE(FilePath("").IsAbsolutePath()); #if GTEST_OS_WINDOWS EXPECT_TRUE(FilePath("c:\\" GTEST_PATH_SEP_ "is_not" GTEST_PATH_SEP_ "relative").IsAbsolutePath()); EXPECT_FALSE(FilePath("c:foo" GTEST_PATH_SEP_ "bar").IsAbsolutePath()); EXPECT_TRUE(FilePath("c:/" GTEST_PATH_SEP_ "is_not" GTEST_PATH_SEP_ "relative").IsAbsolutePath()); #else EXPECT_TRUE(FilePath(GTEST_PATH_SEP_ "is_not" GTEST_PATH_SEP_ "relative") .IsAbsolutePath()); #endif // GTEST_OS_WINDOWS } TEST(FilePathTest, IsRootDirectory) { #if GTEST_OS_WINDOWS EXPECT_TRUE(FilePath("a:\\").IsRootDirectory()); EXPECT_TRUE(FilePath("Z:/").IsRootDirectory()); EXPECT_TRUE(FilePath("e://").IsRootDirectory()); EXPECT_FALSE(FilePath("").IsRootDirectory()); EXPECT_FALSE(FilePath("b:").IsRootDirectory()); EXPECT_FALSE(FilePath("b:a").IsRootDirectory()); EXPECT_FALSE(FilePath("8:/").IsRootDirectory()); EXPECT_FALSE(FilePath("c|/").IsRootDirectory()); #else EXPECT_TRUE(FilePath("/").IsRootDirectory()); EXPECT_TRUE(FilePath("//").IsRootDirectory()); EXPECT_FALSE(FilePath("").IsRootDirectory()); EXPECT_FALSE(FilePath("\\").IsRootDirectory()); EXPECT_FALSE(FilePath("/x").IsRootDirectory()); #endif } } // namespace } // namespace internal } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-linked_ptr_test.cc000066400000000000000000000100351377520261000232310ustar00rootroot00000000000000// Copyright 2003, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: Dan Egnor (egnor@google.com) // Ported to Windows: Vadim Berman (vadimb@google.com) #include "gtest/internal/gtest-linked_ptr.h" #include #include "gtest/gtest.h" namespace { using testing::Message; using testing::internal::linked_ptr; int num; Message* history = NULL; // Class which tracks allocation/deallocation class A { public: A(): mynum(num++) { *history << "A" << mynum << " ctor\n"; } virtual ~A() { *history << "A" << mynum << " dtor\n"; } virtual void Use() { *history << "A" << mynum << " use\n"; } protected: int mynum; }; // Subclass class B : public A { public: B() { *history << "B" << mynum << " ctor\n"; } ~B() { *history << "B" << mynum << " dtor\n"; } virtual void Use() { *history << "B" << mynum << " use\n"; } }; class LinkedPtrTest : public testing::Test { public: LinkedPtrTest() { num = 0; history = new Message; } virtual ~LinkedPtrTest() { delete history; history = NULL; } }; TEST_F(LinkedPtrTest, GeneralTest) { { linked_ptr a0, a1, a2; // Use explicit function call notation here to suppress self-assign warning. a0.operator=(a0); a1 = a2; ASSERT_EQ(a0.get(), static_cast(NULL)); ASSERT_EQ(a1.get(), static_cast(NULL)); ASSERT_EQ(a2.get(), static_cast(NULL)); ASSERT_TRUE(a0 == NULL); ASSERT_TRUE(a1 == NULL); ASSERT_TRUE(a2 == NULL); { linked_ptr a3(new A); a0 = a3; ASSERT_TRUE(a0 == a3); ASSERT_TRUE(a0 != NULL); ASSERT_TRUE(a0.get() == a3); ASSERT_TRUE(a0 == a3.get()); linked_ptr a4(a0); a1 = a4; linked_ptr a5(new A); ASSERT_TRUE(a5.get() != a3); ASSERT_TRUE(a5 != a3.get()); a2 = a5; linked_ptr b0(new B); linked_ptr a6(b0); ASSERT_TRUE(b0 == a6); ASSERT_TRUE(a6 == b0); ASSERT_TRUE(b0 != NULL); a5 = b0; a5 = b0; a3->Use(); a4->Use(); a5->Use(); a6->Use(); b0->Use(); (*b0).Use(); b0.get()->Use(); } a0->Use(); a1->Use(); a2->Use(); a1 = a2; a2.reset(new A); a0.reset(); linked_ptr a7; } ASSERT_STREQ( "A0 ctor\n" "A1 ctor\n" "A2 ctor\n" "B2 ctor\n" "A0 use\n" "A0 use\n" "B2 use\n" "B2 use\n" "B2 use\n" "B2 use\n" "B2 use\n" "B2 dtor\n" "A2 dtor\n" "A0 use\n" "A0 use\n" "A1 use\n" "A3 ctor\n" "A0 dtor\n" "A3 dtor\n" "A1 dtor\n", history->GetString().c_str()); } } // Unnamed namespace dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-listener_test.cc000066400000000000000000000230671377520261000227340ustar00rootroot00000000000000// Copyright 2009 Google Inc. All rights reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // // The Google C++ Testing Framework (Google Test) // // This file verifies Google Test event listeners receive events at the // right times. #include "gtest/gtest.h" #include using ::testing::AddGlobalTestEnvironment; using ::testing::Environment; using ::testing::InitGoogleTest; using ::testing::Test; using ::testing::TestCase; using ::testing::TestEventListener; using ::testing::TestInfo; using ::testing::TestPartResult; using ::testing::UnitTest; // Used by tests to register their events. std::vector* g_events = NULL; namespace testing { namespace internal { class EventRecordingListener : public TestEventListener { public: explicit EventRecordingListener(const char* name) : name_(name) {} protected: virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { g_events->push_back(GetFullMethodName("OnTestProgramStart")); } virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, int iteration) { Message message; message << GetFullMethodName("OnTestIterationStart") << "(" << iteration << ")"; g_events->push_back(message.GetString()); } virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) { g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpStart")); } virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) { g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpEnd")); } virtual void OnTestCaseStart(const TestCase& /*test_case*/) { g_events->push_back(GetFullMethodName("OnTestCaseStart")); } virtual void OnTestStart(const TestInfo& /*test_info*/) { g_events->push_back(GetFullMethodName("OnTestStart")); } virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) { g_events->push_back(GetFullMethodName("OnTestPartResult")); } virtual void OnTestEnd(const TestInfo& /*test_info*/) { g_events->push_back(GetFullMethodName("OnTestEnd")); } virtual void OnTestCaseEnd(const TestCase& /*test_case*/) { g_events->push_back(GetFullMethodName("OnTestCaseEnd")); } virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) { g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownStart")); } virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) { g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownEnd")); } virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, int iteration) { Message message; message << GetFullMethodName("OnTestIterationEnd") << "(" << iteration << ")"; g_events->push_back(message.GetString()); } virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) { g_events->push_back(GetFullMethodName("OnTestProgramEnd")); } private: std::string GetFullMethodName(const char* name) { return name_ + "." + name; } std::string name_; }; class EnvironmentInvocationCatcher : public Environment { protected: virtual void SetUp() { g_events->push_back("Environment::SetUp"); } virtual void TearDown() { g_events->push_back("Environment::TearDown"); } }; class ListenerTest : public Test { protected: static void SetUpTestCase() { g_events->push_back("ListenerTest::SetUpTestCase"); } static void TearDownTestCase() { g_events->push_back("ListenerTest::TearDownTestCase"); } virtual void SetUp() { g_events->push_back("ListenerTest::SetUp"); } virtual void TearDown() { g_events->push_back("ListenerTest::TearDown"); } }; TEST_F(ListenerTest, DoesFoo) { // Test execution order within a test case is not guaranteed so we are not // recording the test name. g_events->push_back("ListenerTest::* Test Body"); SUCCEED(); // Triggers OnTestPartResult. } TEST_F(ListenerTest, DoesBar) { g_events->push_back("ListenerTest::* Test Body"); SUCCEED(); // Triggers OnTestPartResult. } } // namespace internal } // namespace testing using ::testing::internal::EnvironmentInvocationCatcher; using ::testing::internal::EventRecordingListener; void VerifyResults(const std::vector& data, const char* const* expected_data, int expected_data_size) { const int actual_size = data.size(); // If the following assertion fails, a new entry will be appended to // data. Hence we save data.size() first. EXPECT_EQ(expected_data_size, actual_size); // Compares the common prefix. const int shorter_size = expected_data_size <= actual_size ? expected_data_size : actual_size; int i = 0; for (; i < shorter_size; ++i) { ASSERT_STREQ(expected_data[i], data[i].c_str()) << "at position " << i; } // Prints extra elements in the actual data. for (; i < actual_size; ++i) { printf(" Actual event #%d: %s\n", i, data[i].c_str()); } } int main(int argc, char **argv) { std::vector events; g_events = &events; InitGoogleTest(&argc, argv); UnitTest::GetInstance()->listeners().Append( new EventRecordingListener("1st")); UnitTest::GetInstance()->listeners().Append( new EventRecordingListener("2nd")); AddGlobalTestEnvironment(new EnvironmentInvocationCatcher); GTEST_CHECK_(events.size() == 0) << "AddGlobalTestEnvironment should not generate any events itself."; ::testing::GTEST_FLAG(repeat) = 2; int ret_val = RUN_ALL_TESTS(); const char* const expected_events[] = { "1st.OnTestProgramStart", "2nd.OnTestProgramStart", "1st.OnTestIterationStart(0)", "2nd.OnTestIterationStart(0)", "1st.OnEnvironmentsSetUpStart", "2nd.OnEnvironmentsSetUpStart", "Environment::SetUp", "2nd.OnEnvironmentsSetUpEnd", "1st.OnEnvironmentsSetUpEnd", "1st.OnTestCaseStart", "2nd.OnTestCaseStart", "ListenerTest::SetUpTestCase", "1st.OnTestStart", "2nd.OnTestStart", "ListenerTest::SetUp", "ListenerTest::* Test Body", "1st.OnTestPartResult", "2nd.OnTestPartResult", "ListenerTest::TearDown", "2nd.OnTestEnd", "1st.OnTestEnd", "1st.OnTestStart", "2nd.OnTestStart", "ListenerTest::SetUp", "ListenerTest::* Test Body", "1st.OnTestPartResult", "2nd.OnTestPartResult", "ListenerTest::TearDown", "2nd.OnTestEnd", "1st.OnTestEnd", "ListenerTest::TearDownTestCase", "2nd.OnTestCaseEnd", "1st.OnTestCaseEnd", "1st.OnEnvironmentsTearDownStart", "2nd.OnEnvironmentsTearDownStart", "Environment::TearDown", "2nd.OnEnvironmentsTearDownEnd", "1st.OnEnvironmentsTearDownEnd", "2nd.OnTestIterationEnd(0)", "1st.OnTestIterationEnd(0)", "1st.OnTestIterationStart(1)", "2nd.OnTestIterationStart(1)", "1st.OnEnvironmentsSetUpStart", "2nd.OnEnvironmentsSetUpStart", "Environment::SetUp", "2nd.OnEnvironmentsSetUpEnd", "1st.OnEnvironmentsSetUpEnd", "1st.OnTestCaseStart", "2nd.OnTestCaseStart", "ListenerTest::SetUpTestCase", "1st.OnTestStart", "2nd.OnTestStart", "ListenerTest::SetUp", "ListenerTest::* Test Body", "1st.OnTestPartResult", "2nd.OnTestPartResult", "ListenerTest::TearDown", "2nd.OnTestEnd", "1st.OnTestEnd", "1st.OnTestStart", "2nd.OnTestStart", "ListenerTest::SetUp", "ListenerTest::* Test Body", "1st.OnTestPartResult", "2nd.OnTestPartResult", "ListenerTest::TearDown", "2nd.OnTestEnd", "1st.OnTestEnd", "ListenerTest::TearDownTestCase", "2nd.OnTestCaseEnd", "1st.OnTestCaseEnd", "1st.OnEnvironmentsTearDownStart", "2nd.OnEnvironmentsTearDownStart", "Environment::TearDown", "2nd.OnEnvironmentsTearDownEnd", "1st.OnEnvironmentsTearDownEnd", "2nd.OnTestIterationEnd(1)", "1st.OnTestIterationEnd(1)", "2nd.OnTestProgramEnd", "1st.OnTestProgramEnd" }; VerifyResults(events, expected_events, sizeof(expected_events)/sizeof(expected_events[0])); // We need to check manually for ad hoc test failures that happen after // RUN_ALL_TESTS finishes. if (UnitTest::GetInstance()->Failed()) ret_val = 1; return ret_val; } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-message_test.cc000066400000000000000000000122661377520261000225320ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // Tests for the Message class. #include "gtest/gtest-message.h" #include "gtest/gtest.h" namespace { using ::testing::Message; // Tests the testing::Message class // Tests the default constructor. TEST(MessageTest, DefaultConstructor) { const Message msg; EXPECT_EQ("", msg.GetString()); } // Tests the copy constructor. TEST(MessageTest, CopyConstructor) { const Message msg1("Hello"); const Message msg2(msg1); EXPECT_EQ("Hello", msg2.GetString()); } // Tests constructing a Message from a C-string. TEST(MessageTest, ConstructsFromCString) { Message msg("Hello"); EXPECT_EQ("Hello", msg.GetString()); } // Tests streaming a float. TEST(MessageTest, StreamsFloat) { const std::string s = (Message() << 1.23456F << " " << 2.34567F).GetString(); // Both numbers should be printed with enough precision. EXPECT_PRED_FORMAT2(testing::IsSubstring, "1.234560", s.c_str()); EXPECT_PRED_FORMAT2(testing::IsSubstring, " 2.345669", s.c_str()); } // Tests streaming a double. TEST(MessageTest, StreamsDouble) { const std::string s = (Message() << 1260570880.4555497 << " " << 1260572265.1954534).GetString(); // Both numbers should be printed with enough precision. EXPECT_PRED_FORMAT2(testing::IsSubstring, "1260570880.45", s.c_str()); EXPECT_PRED_FORMAT2(testing::IsSubstring, " 1260572265.19", s.c_str()); } // Tests streaming a non-char pointer. TEST(MessageTest, StreamsPointer) { int n = 0; int* p = &n; EXPECT_NE("(null)", (Message() << p).GetString()); } // Tests streaming a NULL non-char pointer. TEST(MessageTest, StreamsNullPointer) { int* p = NULL; EXPECT_EQ("(null)", (Message() << p).GetString()); } // Tests streaming a C string. TEST(MessageTest, StreamsCString) { EXPECT_EQ("Foo", (Message() << "Foo").GetString()); } // Tests streaming a NULL C string. TEST(MessageTest, StreamsNullCString) { char* p = NULL; EXPECT_EQ("(null)", (Message() << p).GetString()); } // Tests streaming std::string. TEST(MessageTest, StreamsString) { const ::std::string str("Hello"); EXPECT_EQ("Hello", (Message() << str).GetString()); } // Tests that we can output strings containing embedded NULs. TEST(MessageTest, StreamsStringWithEmbeddedNUL) { const char char_array_with_nul[] = "Here's a NUL\0 and some more string"; const ::std::string string_with_nul(char_array_with_nul, sizeof(char_array_with_nul) - 1); EXPECT_EQ("Here's a NUL\\0 and some more string", (Message() << string_with_nul).GetString()); } // Tests streaming a NUL char. TEST(MessageTest, StreamsNULChar) { EXPECT_EQ("\\0", (Message() << '\0').GetString()); } // Tests streaming int. TEST(MessageTest, StreamsInt) { EXPECT_EQ("123", (Message() << 123).GetString()); } // Tests that basic IO manipulators (endl, ends, and flush) can be // streamed to Message. TEST(MessageTest, StreamsBasicIoManip) { EXPECT_EQ("Line 1.\nA NUL char \\0 in line 2.", (Message() << "Line 1." << std::endl << "A NUL char " << std::ends << std::flush << " in line 2.").GetString()); } // Tests Message::GetString() TEST(MessageTest, GetString) { Message msg; msg << 1 << " lamb"; EXPECT_EQ("1 lamb", msg.GetString()); } // Tests streaming a Message object to an ostream. TEST(MessageTest, StreamsToOStream) { Message msg("Hello"); ::std::stringstream ss; ss << msg; EXPECT_EQ("Hello", testing::internal::StringStreamToString(&ss)); } // Tests that a Message object doesn't take up too much stack space. TEST(MessageTest, DoesNotTakeUpMuchStackSpace) { EXPECT_LE(sizeof(Message), 16U); } } // namespace dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-options_test.cc000066400000000000000000000174021377520261000225760ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: keith.ray@gmail.com (Keith Ray) // // Google Test UnitTestOptions tests // // This file tests classes and functions used internally by // Google Test. They are subject to change without notice. // // This file is #included from gtest.cc, to avoid changing build or // make-files on Windows and other platforms. Do not #include this file // anywhere else! #include "gtest/gtest.h" #if GTEST_OS_WINDOWS_MOBILE # include #elif GTEST_OS_WINDOWS # include #endif // GTEST_OS_WINDOWS_MOBILE // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ namespace testing { namespace internal { namespace { // Turns the given relative path into an absolute path. FilePath GetAbsolutePathOf(const FilePath& relative_path) { return FilePath::ConcatPaths(FilePath::GetCurrentDir(), relative_path); } // Testing UnitTestOptions::GetOutputFormat/GetOutputFile. TEST(XmlOutputTest, GetOutputFormatDefault) { GTEST_FLAG(output) = ""; EXPECT_STREQ("", UnitTestOptions::GetOutputFormat().c_str()); } TEST(XmlOutputTest, GetOutputFormat) { GTEST_FLAG(output) = "xml:filename"; EXPECT_STREQ("xml", UnitTestOptions::GetOutputFormat().c_str()); } TEST(XmlOutputTest, GetOutputFileDefault) { GTEST_FLAG(output) = ""; EXPECT_EQ(GetAbsolutePathOf(FilePath("test_detail.xml")).string(), UnitTestOptions::GetAbsolutePathToOutputFile()); } TEST(XmlOutputTest, GetOutputFileSingleFile) { GTEST_FLAG(output) = "xml:filename.abc"; EXPECT_EQ(GetAbsolutePathOf(FilePath("filename.abc")).string(), UnitTestOptions::GetAbsolutePathToOutputFile()); } TEST(XmlOutputTest, GetOutputFileFromDirectoryPath) { GTEST_FLAG(output) = "xml:path" GTEST_PATH_SEP_; const std::string expected_output_file = GetAbsolutePathOf( FilePath(std::string("path") + GTEST_PATH_SEP_ + GetCurrentExecutableName().string() + ".xml")).string(); const std::string& output_file = UnitTestOptions::GetAbsolutePathToOutputFile(); #if GTEST_OS_WINDOWS EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str()); #else EXPECT_EQ(expected_output_file, output_file.c_str()); #endif } TEST(OutputFileHelpersTest, GetCurrentExecutableName) { const std::string exe_str = GetCurrentExecutableName().string(); #if GTEST_OS_WINDOWS const bool success = _strcmpi("gtest-options_test", exe_str.c_str()) == 0 || _strcmpi("gtest-options-ex_test", exe_str.c_str()) == 0 || _strcmpi("gtest_all_test", exe_str.c_str()) == 0 || _strcmpi("gtest_dll_test", exe_str.c_str()) == 0; #else // TODO(wan@google.com): remove the hard-coded "lt-" prefix when // Chandler Carruth's libtool replacement is ready. const bool success = exe_str == "gtest-options_test" || exe_str == "gtest_all_test" || exe_str == "lt-gtest_all_test" || exe_str == "gtest_dll_test"; #endif // GTEST_OS_WINDOWS if (!success) FAIL() << "GetCurrentExecutableName() returns " << exe_str; } class XmlOutputChangeDirTest : public Test { protected: virtual void SetUp() { original_working_dir_ = FilePath::GetCurrentDir(); posix::ChDir(".."); // This will make the test fail if run from the root directory. EXPECT_NE(original_working_dir_.string(), FilePath::GetCurrentDir().string()); } virtual void TearDown() { posix::ChDir(original_working_dir_.string().c_str()); } FilePath original_working_dir_; }; TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithDefault) { GTEST_FLAG(output) = ""; EXPECT_EQ(FilePath::ConcatPaths(original_working_dir_, FilePath("test_detail.xml")).string(), UnitTestOptions::GetAbsolutePathToOutputFile()); } TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithDefaultXML) { GTEST_FLAG(output) = "xml"; EXPECT_EQ(FilePath::ConcatPaths(original_working_dir_, FilePath("test_detail.xml")).string(), UnitTestOptions::GetAbsolutePathToOutputFile()); } TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithRelativeFile) { GTEST_FLAG(output) = "xml:filename.abc"; EXPECT_EQ(FilePath::ConcatPaths(original_working_dir_, FilePath("filename.abc")).string(), UnitTestOptions::GetAbsolutePathToOutputFile()); } TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithRelativePath) { GTEST_FLAG(output) = "xml:path" GTEST_PATH_SEP_; const std::string expected_output_file = FilePath::ConcatPaths( original_working_dir_, FilePath(std::string("path") + GTEST_PATH_SEP_ + GetCurrentExecutableName().string() + ".xml")).string(); const std::string& output_file = UnitTestOptions::GetAbsolutePathToOutputFile(); #if GTEST_OS_WINDOWS EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str()); #else EXPECT_EQ(expected_output_file, output_file.c_str()); #endif } TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithAbsoluteFile) { #if GTEST_OS_WINDOWS GTEST_FLAG(output) = "xml:c:\\tmp\\filename.abc"; EXPECT_EQ(FilePath("c:\\tmp\\filename.abc").string(), UnitTestOptions::GetAbsolutePathToOutputFile()); #else GTEST_FLAG(output) ="xml:/tmp/filename.abc"; EXPECT_EQ(FilePath("/tmp/filename.abc").string(), UnitTestOptions::GetAbsolutePathToOutputFile()); #endif } TEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithAbsolutePath) { #if GTEST_OS_WINDOWS const std::string path = "c:\\tmp\\"; #else const std::string path = "/tmp/"; #endif GTEST_FLAG(output) = "xml:" + path; const std::string expected_output_file = path + GetCurrentExecutableName().string() + ".xml"; const std::string& output_file = UnitTestOptions::GetAbsolutePathToOutputFile(); #if GTEST_OS_WINDOWS EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str()); #else EXPECT_EQ(expected_output_file, output_file.c_str()); #endif } } // namespace } // namespace internal } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-param-test2_test.cc000066400000000000000000000055041377520261000232420ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // // Tests for Google Test itself. This verifies that the basic constructs of // Google Test work. #include "gtest/gtest.h" #include "test/gtest-param-test_test.h" #if GTEST_HAS_PARAM_TEST using ::testing::Values; using ::testing::internal::ParamGenerator; // Tests that generators defined in a different translation unit // are functional. The test using extern_gen is defined // in gtest-param-test_test.cc. ParamGenerator extern_gen = Values(33); // Tests that a parameterized test case can be defined in one translation unit // and instantiated in another. The test is defined in gtest-param-test_test.cc // and ExternalInstantiationTest fixture class is defined in // gtest-param-test_test.h. INSTANTIATE_TEST_CASE_P(MultiplesOf33, ExternalInstantiationTest, Values(33, 66)); // Tests that a parameterized test case can be instantiated // in multiple translation units. Another instantiation is defined // in gtest-param-test_test.cc and InstantiationInMultipleTranslaionUnitsTest // fixture is defined in gtest-param-test_test.h INSTANTIATE_TEST_CASE_P(Sequence2, InstantiationInMultipleTranslaionUnitsTest, Values(42*3, 42*4, 42*5)); #endif // GTEST_HAS_PARAM_TEST dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-param-test_test.cc000066400000000000000000001011021377520261000231470ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // // Tests for Google Test itself. This file verifies that the parameter // generators objects produce correct parameter sequences and that // Google Test runtime instantiates correct tests from those sequences. #include "gtest/gtest.h" #if GTEST_HAS_PARAM_TEST # include # include # include # include # include # include // To include gtest-internal-inl.h. # define GTEST_IMPLEMENTATION_ 1 # include "src/gtest-internal-inl.h" // for UnitTestOptions # undef GTEST_IMPLEMENTATION_ # include "test/gtest-param-test_test.h" using ::std::vector; using ::std::sort; using ::testing::AddGlobalTestEnvironment; using ::testing::Bool; using ::testing::Message; using ::testing::Range; using ::testing::TestWithParam; using ::testing::Values; using ::testing::ValuesIn; # if GTEST_HAS_COMBINE using ::testing::Combine; using ::std::tr1::get; using ::std::tr1::make_tuple; using ::std::tr1::tuple; # endif // GTEST_HAS_COMBINE using ::testing::internal::ParamGenerator; using ::testing::internal::UnitTestOptions; // Prints a value to a string. // // TODO(wan@google.com): remove PrintValue() when we move matchers and // EXPECT_THAT() from Google Mock to Google Test. At that time, we // can write EXPECT_THAT(x, Eq(y)) to compare two tuples x and y, as // EXPECT_THAT() and the matchers know how to print tuples. template ::std::string PrintValue(const T& value) { ::std::stringstream stream; stream << value; return stream.str(); } # if GTEST_HAS_COMBINE // These overloads allow printing tuples in our tests. We cannot // define an operator<< for tuples, as that definition needs to be in // the std namespace in order to be picked up by Google Test via // Argument-Dependent Lookup, yet defining anything in the std // namespace in non-STL code is undefined behavior. template ::std::string PrintValue(const tuple& value) { ::std::stringstream stream; stream << "(" << get<0>(value) << ", " << get<1>(value) << ")"; return stream.str(); } template ::std::string PrintValue(const tuple& value) { ::std::stringstream stream; stream << "(" << get<0>(value) << ", " << get<1>(value) << ", "<< get<2>(value) << ")"; return stream.str(); } template ::std::string PrintValue( const tuple& value) { ::std::stringstream stream; stream << "(" << get<0>(value) << ", " << get<1>(value) << ", "<< get<2>(value) << ", " << get<3>(value) << ", "<< get<4>(value) << ", " << get<5>(value) << ", "<< get<6>(value) << ", " << get<7>(value) << ", "<< get<8>(value) << ", " << get<9>(value) << ")"; return stream.str(); } # endif // GTEST_HAS_COMBINE // Verifies that a sequence generated by the generator and accessed // via the iterator object matches the expected one using Google Test // assertions. template void VerifyGenerator(const ParamGenerator& generator, const T (&expected_values)[N]) { typename ParamGenerator::iterator it = generator.begin(); for (size_t i = 0; i < N; ++i) { ASSERT_FALSE(it == generator.end()) << "At element " << i << " when accessing via an iterator " << "created with the copy constructor.\n"; // We cannot use EXPECT_EQ() here as the values may be tuples, // which don't support <<. EXPECT_TRUE(expected_values[i] == *it) << "where i is " << i << ", expected_values[i] is " << PrintValue(expected_values[i]) << ", *it is " << PrintValue(*it) << ", and 'it' is an iterator created with the copy constructor.\n"; it++; } EXPECT_TRUE(it == generator.end()) << "At the presumed end of sequence when accessing via an iterator " << "created with the copy constructor.\n"; // Test the iterator assignment. The following lines verify that // the sequence accessed via an iterator initialized via the // assignment operator (as opposed to a copy constructor) matches // just the same. it = generator.begin(); for (size_t i = 0; i < N; ++i) { ASSERT_FALSE(it == generator.end()) << "At element " << i << " when accessing via an iterator " << "created with the assignment operator.\n"; EXPECT_TRUE(expected_values[i] == *it) << "where i is " << i << ", expected_values[i] is " << PrintValue(expected_values[i]) << ", *it is " << PrintValue(*it) << ", and 'it' is an iterator created with the copy constructor.\n"; it++; } EXPECT_TRUE(it == generator.end()) << "At the presumed end of sequence when accessing via an iterator " << "created with the assignment operator.\n"; } template void VerifyGeneratorIsEmpty(const ParamGenerator& generator) { typename ParamGenerator::iterator it = generator.begin(); EXPECT_TRUE(it == generator.end()); it = generator.begin(); EXPECT_TRUE(it == generator.end()); } // Generator tests. They test that each of the provided generator functions // generates an expected sequence of values. The general test pattern // instantiates a generator using one of the generator functions, // checks the sequence produced by the generator using its iterator API, // and then resets the iterator back to the beginning of the sequence // and checks the sequence again. // Tests that iterators produced by generator functions conform to the // ForwardIterator concept. TEST(IteratorTest, ParamIteratorConformsToForwardIteratorConcept) { const ParamGenerator gen = Range(0, 10); ParamGenerator::iterator it = gen.begin(); // Verifies that iterator initialization works as expected. ParamGenerator::iterator it2 = it; EXPECT_TRUE(*it == *it2) << "Initialized iterators must point to the " << "element same as its source points to"; // Verifies that iterator assignment works as expected. it++; EXPECT_FALSE(*it == *it2); it2 = it; EXPECT_TRUE(*it == *it2) << "Assigned iterators must point to the " << "element same as its source points to"; // Verifies that prefix operator++() returns *this. EXPECT_EQ(&it, &(++it)) << "Result of the prefix operator++ must be " << "refer to the original object"; // Verifies that the result of the postfix operator++ points to the value // pointed to by the original iterator. int original_value = *it; // Have to compute it outside of macro call to be // unaffected by the parameter evaluation order. EXPECT_EQ(original_value, *(it++)); // Verifies that prefix and postfix operator++() advance an iterator // all the same. it2 = it; it++; ++it2; EXPECT_TRUE(*it == *it2); } // Tests that Range() generates the expected sequence. TEST(RangeTest, IntRangeWithDefaultStep) { const ParamGenerator gen = Range(0, 3); const int expected_values[] = {0, 1, 2}; VerifyGenerator(gen, expected_values); } // Edge case. Tests that Range() generates the single element sequence // as expected when provided with range limits that are equal. TEST(RangeTest, IntRangeSingleValue) { const ParamGenerator gen = Range(0, 1); const int expected_values[] = {0}; VerifyGenerator(gen, expected_values); } // Edge case. Tests that Range() with generates empty sequence when // supplied with an empty range. TEST(RangeTest, IntRangeEmpty) { const ParamGenerator gen = Range(0, 0); VerifyGeneratorIsEmpty(gen); } // Tests that Range() with custom step (greater then one) generates // the expected sequence. TEST(RangeTest, IntRangeWithCustomStep) { const ParamGenerator gen = Range(0, 9, 3); const int expected_values[] = {0, 3, 6}; VerifyGenerator(gen, expected_values); } // Tests that Range() with custom step (greater then one) generates // the expected sequence when the last element does not fall on the // upper range limit. Sequences generated by Range() must not have // elements beyond the range limits. TEST(RangeTest, IntRangeWithCustomStepOverUpperBound) { const ParamGenerator gen = Range(0, 4, 3); const int expected_values[] = {0, 3}; VerifyGenerator(gen, expected_values); } // Verifies that Range works with user-defined types that define // copy constructor, operator=(), operator+(), and operator<(). class DogAdder { public: explicit DogAdder(const char* a_value) : value_(a_value) {} DogAdder(const DogAdder& other) : value_(other.value_.c_str()) {} DogAdder operator=(const DogAdder& other) { if (this != &other) value_ = other.value_; return *this; } DogAdder operator+(const DogAdder& other) const { Message msg; msg << value_.c_str() << other.value_.c_str(); return DogAdder(msg.GetString().c_str()); } bool operator<(const DogAdder& other) const { return value_ < other.value_; } const std::string& value() const { return value_; } private: std::string value_; }; TEST(RangeTest, WorksWithACustomType) { const ParamGenerator gen = Range(DogAdder("cat"), DogAdder("catdogdog"), DogAdder("dog")); ParamGenerator::iterator it = gen.begin(); ASSERT_FALSE(it == gen.end()); EXPECT_STREQ("cat", it->value().c_str()); ASSERT_FALSE(++it == gen.end()); EXPECT_STREQ("catdog", it->value().c_str()); EXPECT_TRUE(++it == gen.end()); } class IntWrapper { public: explicit IntWrapper(int a_value) : value_(a_value) {} IntWrapper(const IntWrapper& other) : value_(other.value_) {} IntWrapper operator=(const IntWrapper& other) { value_ = other.value_; return *this; } // operator+() adds a different type. IntWrapper operator+(int other) const { return IntWrapper(value_ + other); } bool operator<(const IntWrapper& other) const { return value_ < other.value_; } int value() const { return value_; } private: int value_; }; TEST(RangeTest, WorksWithACustomTypeWithDifferentIncrementType) { const ParamGenerator gen = Range(IntWrapper(0), IntWrapper(2)); ParamGenerator::iterator it = gen.begin(); ASSERT_FALSE(it == gen.end()); EXPECT_EQ(0, it->value()); ASSERT_FALSE(++it == gen.end()); EXPECT_EQ(1, it->value()); EXPECT_TRUE(++it == gen.end()); } // Tests that ValuesIn() with an array parameter generates // the expected sequence. TEST(ValuesInTest, ValuesInArray) { int array[] = {3, 5, 8}; const ParamGenerator gen = ValuesIn(array); VerifyGenerator(gen, array); } // Tests that ValuesIn() with a const array parameter generates // the expected sequence. TEST(ValuesInTest, ValuesInConstArray) { const int array[] = {3, 5, 8}; const ParamGenerator gen = ValuesIn(array); VerifyGenerator(gen, array); } // Edge case. Tests that ValuesIn() with an array parameter containing a // single element generates the single element sequence. TEST(ValuesInTest, ValuesInSingleElementArray) { int array[] = {42}; const ParamGenerator gen = ValuesIn(array); VerifyGenerator(gen, array); } // Tests that ValuesIn() generates the expected sequence for an STL // container (vector). TEST(ValuesInTest, ValuesInVector) { typedef ::std::vector ContainerType; ContainerType values; values.push_back(3); values.push_back(5); values.push_back(8); const ParamGenerator gen = ValuesIn(values); const int expected_values[] = {3, 5, 8}; VerifyGenerator(gen, expected_values); } // Tests that ValuesIn() generates the expected sequence. TEST(ValuesInTest, ValuesInIteratorRange) { typedef ::std::vector ContainerType; ContainerType values; values.push_back(3); values.push_back(5); values.push_back(8); const ParamGenerator gen = ValuesIn(values.begin(), values.end()); const int expected_values[] = {3, 5, 8}; VerifyGenerator(gen, expected_values); } // Edge case. Tests that ValuesIn() provided with an iterator range specifying a // single value generates a single-element sequence. TEST(ValuesInTest, ValuesInSingleElementIteratorRange) { typedef ::std::vector ContainerType; ContainerType values; values.push_back(42); const ParamGenerator gen = ValuesIn(values.begin(), values.end()); const int expected_values[] = {42}; VerifyGenerator(gen, expected_values); } // Edge case. Tests that ValuesIn() provided with an empty iterator range // generates an empty sequence. TEST(ValuesInTest, ValuesInEmptyIteratorRange) { typedef ::std::vector ContainerType; ContainerType values; const ParamGenerator gen = ValuesIn(values.begin(), values.end()); VerifyGeneratorIsEmpty(gen); } // Tests that the Values() generates the expected sequence. TEST(ValuesTest, ValuesWorks) { const ParamGenerator gen = Values(3, 5, 8); const int expected_values[] = {3, 5, 8}; VerifyGenerator(gen, expected_values); } // Tests that Values() generates the expected sequences from elements of // different types convertible to ParamGenerator's parameter type. TEST(ValuesTest, ValuesWorksForValuesOfCompatibleTypes) { const ParamGenerator gen = Values(3, 5.0f, 8.0); const double expected_values[] = {3.0, 5.0, 8.0}; VerifyGenerator(gen, expected_values); } TEST(ValuesTest, ValuesWorksForMaxLengthList) { const ParamGenerator gen = Values( 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500); const int expected_values[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500}; VerifyGenerator(gen, expected_values); } // Edge case test. Tests that single-parameter Values() generates the sequence // with the single value. TEST(ValuesTest, ValuesWithSingleParameter) { const ParamGenerator gen = Values(42); const int expected_values[] = {42}; VerifyGenerator(gen, expected_values); } // Tests that Bool() generates sequence (false, true). TEST(BoolTest, BoolWorks) { const ParamGenerator gen = Bool(); const bool expected_values[] = {false, true}; VerifyGenerator(gen, expected_values); } # if GTEST_HAS_COMBINE // Tests that Combine() with two parameters generates the expected sequence. TEST(CombineTest, CombineWithTwoParameters) { const char* foo = "foo"; const char* bar = "bar"; const ParamGenerator > gen = Combine(Values(foo, bar), Values(3, 4)); tuple expected_values[] = { make_tuple(foo, 3), make_tuple(foo, 4), make_tuple(bar, 3), make_tuple(bar, 4)}; VerifyGenerator(gen, expected_values); } // Tests that Combine() with three parameters generates the expected sequence. TEST(CombineTest, CombineWithThreeParameters) { const ParamGenerator > gen = Combine(Values(0, 1), Values(3, 4), Values(5, 6)); tuple expected_values[] = { make_tuple(0, 3, 5), make_tuple(0, 3, 6), make_tuple(0, 4, 5), make_tuple(0, 4, 6), make_tuple(1, 3, 5), make_tuple(1, 3, 6), make_tuple(1, 4, 5), make_tuple(1, 4, 6)}; VerifyGenerator(gen, expected_values); } // Tests that the Combine() with the first parameter generating a single value // sequence generates a sequence with the number of elements equal to the // number of elements in the sequence generated by the second parameter. TEST(CombineTest, CombineWithFirstParameterSingleValue) { const ParamGenerator > gen = Combine(Values(42), Values(0, 1)); tuple expected_values[] = {make_tuple(42, 0), make_tuple(42, 1)}; VerifyGenerator(gen, expected_values); } // Tests that the Combine() with the second parameter generating a single value // sequence generates a sequence with the number of elements equal to the // number of elements in the sequence generated by the first parameter. TEST(CombineTest, CombineWithSecondParameterSingleValue) { const ParamGenerator > gen = Combine(Values(0, 1), Values(42)); tuple expected_values[] = {make_tuple(0, 42), make_tuple(1, 42)}; VerifyGenerator(gen, expected_values); } // Tests that when the first parameter produces an empty sequence, // Combine() produces an empty sequence, too. TEST(CombineTest, CombineWithFirstParameterEmptyRange) { const ParamGenerator > gen = Combine(Range(0, 0), Values(0, 1)); VerifyGeneratorIsEmpty(gen); } // Tests that when the second parameter produces an empty sequence, // Combine() produces an empty sequence, too. TEST(CombineTest, CombineWithSecondParameterEmptyRange) { const ParamGenerator > gen = Combine(Values(0, 1), Range(1, 1)); VerifyGeneratorIsEmpty(gen); } // Edge case. Tests that combine works with the maximum number // of parameters supported by Google Test (currently 10). TEST(CombineTest, CombineWithMaxNumberOfParameters) { const char* foo = "foo"; const char* bar = "bar"; const ParamGenerator > gen = Combine(Values(foo, bar), Values(1), Values(2), Values(3), Values(4), Values(5), Values(6), Values(7), Values(8), Values(9)); tuple expected_values[] = {make_tuple(foo, 1, 2, 3, 4, 5, 6, 7, 8, 9), make_tuple(bar, 1, 2, 3, 4, 5, 6, 7, 8, 9)}; VerifyGenerator(gen, expected_values); } # endif // GTEST_HAS_COMBINE // Tests that an generator produces correct sequence after being // assigned from another generator. TEST(ParamGeneratorTest, AssignmentWorks) { ParamGenerator gen = Values(1, 2); const ParamGenerator gen2 = Values(3, 4); gen = gen2; const int expected_values[] = {3, 4}; VerifyGenerator(gen, expected_values); } // This test verifies that the tests are expanded and run as specified: // one test per element from the sequence produced by the generator // specified in INSTANTIATE_TEST_CASE_P. It also verifies that the test's // fixture constructor, SetUp(), and TearDown() have run and have been // supplied with the correct parameters. // The use of environment object allows detection of the case where no test // case functionality is run at all. In this case TestCaseTearDown will not // be able to detect missing tests, naturally. template class TestGenerationEnvironment : public ::testing::Environment { public: static TestGenerationEnvironment* Instance() { static TestGenerationEnvironment* instance = new TestGenerationEnvironment; return instance; } void FixtureConstructorExecuted() { fixture_constructor_count_++; } void SetUpExecuted() { set_up_count_++; } void TearDownExecuted() { tear_down_count_++; } void TestBodyExecuted() { test_body_count_++; } virtual void TearDown() { // If all MultipleTestGenerationTest tests have been de-selected // by the filter flag, the following checks make no sense. bool perform_check = false; for (int i = 0; i < kExpectedCalls; ++i) { Message msg; msg << "TestsExpandedAndRun/" << i; if (UnitTestOptions::FilterMatchesTest( "TestExpansionModule/MultipleTestGenerationTest", msg.GetString().c_str())) { perform_check = true; } } if (perform_check) { EXPECT_EQ(kExpectedCalls, fixture_constructor_count_) << "Fixture constructor of ParamTestGenerationTest test case " << "has not been run as expected."; EXPECT_EQ(kExpectedCalls, set_up_count_) << "Fixture SetUp method of ParamTestGenerationTest test case " << "has not been run as expected."; EXPECT_EQ(kExpectedCalls, tear_down_count_) << "Fixture TearDown method of ParamTestGenerationTest test case " << "has not been run as expected."; EXPECT_EQ(kExpectedCalls, test_body_count_) << "Test in ParamTestGenerationTest test case " << "has not been run as expected."; } } private: TestGenerationEnvironment() : fixture_constructor_count_(0), set_up_count_(0), tear_down_count_(0), test_body_count_(0) {} int fixture_constructor_count_; int set_up_count_; int tear_down_count_; int test_body_count_; GTEST_DISALLOW_COPY_AND_ASSIGN_(TestGenerationEnvironment); }; const int test_generation_params[] = {36, 42, 72}; class TestGenerationTest : public TestWithParam { public: enum { PARAMETER_COUNT = sizeof(test_generation_params)/sizeof(test_generation_params[0]) }; typedef TestGenerationEnvironment Environment; TestGenerationTest() { Environment::Instance()->FixtureConstructorExecuted(); current_parameter_ = GetParam(); } virtual void SetUp() { Environment::Instance()->SetUpExecuted(); EXPECT_EQ(current_parameter_, GetParam()); } virtual void TearDown() { Environment::Instance()->TearDownExecuted(); EXPECT_EQ(current_parameter_, GetParam()); } static void SetUpTestCase() { bool all_tests_in_test_case_selected = true; for (int i = 0; i < PARAMETER_COUNT; ++i) { Message test_name; test_name << "TestsExpandedAndRun/" << i; if ( !UnitTestOptions::FilterMatchesTest( "TestExpansionModule/MultipleTestGenerationTest", test_name.GetString())) { all_tests_in_test_case_selected = false; } } EXPECT_TRUE(all_tests_in_test_case_selected) << "When running the TestGenerationTest test case all of its tests\n" << "must be selected by the filter flag for the test case to pass.\n" << "If not all of them are enabled, we can't reliably conclude\n" << "that the correct number of tests have been generated."; collected_parameters_.clear(); } static void TearDownTestCase() { vector expected_values(test_generation_params, test_generation_params + PARAMETER_COUNT); // Test execution order is not guaranteed by Google Test, // so the order of values in collected_parameters_ can be // different and we have to sort to compare. sort(expected_values.begin(), expected_values.end()); sort(collected_parameters_.begin(), collected_parameters_.end()); EXPECT_TRUE(collected_parameters_ == expected_values); } protected: int current_parameter_; static vector collected_parameters_; private: GTEST_DISALLOW_COPY_AND_ASSIGN_(TestGenerationTest); }; vector TestGenerationTest::collected_parameters_; TEST_P(TestGenerationTest, TestsExpandedAndRun) { Environment::Instance()->TestBodyExecuted(); EXPECT_EQ(current_parameter_, GetParam()); collected_parameters_.push_back(GetParam()); } INSTANTIATE_TEST_CASE_P(TestExpansionModule, TestGenerationTest, ValuesIn(test_generation_params)); // This test verifies that the element sequence (third parameter of // INSTANTIATE_TEST_CASE_P) is evaluated in InitGoogleTest() and neither at // the call site of INSTANTIATE_TEST_CASE_P nor in RUN_ALL_TESTS(). For // that, we declare param_value_ to be a static member of // GeneratorEvaluationTest and initialize it to 0. We set it to 1 in // main(), just before invocation of InitGoogleTest(). After calling // InitGoogleTest(), we set the value to 2. If the sequence is evaluated // before or after InitGoogleTest, INSTANTIATE_TEST_CASE_P will create a // test with parameter other than 1, and the test body will fail the // assertion. class GeneratorEvaluationTest : public TestWithParam { public: static int param_value() { return param_value_; } static void set_param_value(int param_value) { param_value_ = param_value; } private: static int param_value_; }; int GeneratorEvaluationTest::param_value_ = 0; TEST_P(GeneratorEvaluationTest, GeneratorsEvaluatedInMain) { EXPECT_EQ(1, GetParam()); } INSTANTIATE_TEST_CASE_P(GenEvalModule, GeneratorEvaluationTest, Values(GeneratorEvaluationTest::param_value())); // Tests that generators defined in a different translation unit are // functional. Generator extern_gen is defined in gtest-param-test_test2.cc. extern ParamGenerator extern_gen; class ExternalGeneratorTest : public TestWithParam {}; TEST_P(ExternalGeneratorTest, ExternalGenerator) { // Sequence produced by extern_gen contains only a single value // which we verify here. EXPECT_EQ(GetParam(), 33); } INSTANTIATE_TEST_CASE_P(ExternalGeneratorModule, ExternalGeneratorTest, extern_gen); // Tests that a parameterized test case can be defined in one translation // unit and instantiated in another. This test will be instantiated in // gtest-param-test_test2.cc. ExternalInstantiationTest fixture class is // defined in gtest-param-test_test.h. TEST_P(ExternalInstantiationTest, IsMultipleOf33) { EXPECT_EQ(0, GetParam() % 33); } // Tests that a parameterized test case can be instantiated with multiple // generators. class MultipleInstantiationTest : public TestWithParam {}; TEST_P(MultipleInstantiationTest, AllowsMultipleInstances) { } INSTANTIATE_TEST_CASE_P(Sequence1, MultipleInstantiationTest, Values(1, 2)); INSTANTIATE_TEST_CASE_P(Sequence2, MultipleInstantiationTest, Range(3, 5)); // Tests that a parameterized test case can be instantiated // in multiple translation units. This test will be instantiated // here and in gtest-param-test_test2.cc. // InstantiationInMultipleTranslationUnitsTest fixture class // is defined in gtest-param-test_test.h. TEST_P(InstantiationInMultipleTranslaionUnitsTest, IsMultipleOf42) { EXPECT_EQ(0, GetParam() % 42); } INSTANTIATE_TEST_CASE_P(Sequence1, InstantiationInMultipleTranslaionUnitsTest, Values(42, 42*2)); // Tests that each iteration of parameterized test runs in a separate test // object. class SeparateInstanceTest : public TestWithParam { public: SeparateInstanceTest() : count_(0) {} static void TearDownTestCase() { EXPECT_GE(global_count_, 2) << "If some (but not all) SeparateInstanceTest tests have been " << "filtered out this test will fail. Make sure that all " << "GeneratorEvaluationTest are selected or de-selected together " << "by the test filter."; } protected: int count_; static int global_count_; }; int SeparateInstanceTest::global_count_ = 0; TEST_P(SeparateInstanceTest, TestsRunInSeparateInstances) { EXPECT_EQ(0, count_++); global_count_++; } INSTANTIATE_TEST_CASE_P(FourElemSequence, SeparateInstanceTest, Range(1, 4)); // Tests that all instantiations of a test have named appropriately. Test // defined with TEST_P(TestCaseName, TestName) and instantiated with // INSTANTIATE_TEST_CASE_P(SequenceName, TestCaseName, generator) must be named // SequenceName/TestCaseName.TestName/i, where i is the 0-based index of the // sequence element used to instantiate the test. class NamingTest : public TestWithParam {}; TEST_P(NamingTest, TestsReportCorrectNamesAndParameters) { const ::testing::TestInfo* const test_info = ::testing::UnitTest::GetInstance()->current_test_info(); EXPECT_STREQ("ZeroToFiveSequence/NamingTest", test_info->test_case_name()); Message index_stream; index_stream << "TestsReportCorrectNamesAndParameters/" << GetParam(); EXPECT_STREQ(index_stream.GetString().c_str(), test_info->name()); EXPECT_EQ(::testing::PrintToString(GetParam()), test_info->value_param()); } INSTANTIATE_TEST_CASE_P(ZeroToFiveSequence, NamingTest, Range(0, 5)); // Class that cannot be streamed into an ostream. It needs to be copyable // (and, in case of MSVC, also assignable) in order to be a test parameter // type. Its default copy constructor and assignment operator do exactly // what we need. class Unstreamable { public: explicit Unstreamable(int value) : value_(value) {} private: int value_; }; class CommentTest : public TestWithParam {}; TEST_P(CommentTest, TestsCorrectlyReportUnstreamableParams) { const ::testing::TestInfo* const test_info = ::testing::UnitTest::GetInstance()->current_test_info(); EXPECT_EQ(::testing::PrintToString(GetParam()), test_info->value_param()); } INSTANTIATE_TEST_CASE_P(InstantiationWithComments, CommentTest, Values(Unstreamable(1))); // Verify that we can create a hierarchy of test fixtures, where the base // class fixture is not parameterized and the derived class is. In this case // ParameterizedDerivedTest inherits from NonParameterizedBaseTest. We // perform simple tests on both. class NonParameterizedBaseTest : public ::testing::Test { public: NonParameterizedBaseTest() : n_(17) { } protected: int n_; }; class ParameterizedDerivedTest : public NonParameterizedBaseTest, public ::testing::WithParamInterface { protected: ParameterizedDerivedTest() : count_(0) { } int count_; static int global_count_; }; int ParameterizedDerivedTest::global_count_ = 0; TEST_F(NonParameterizedBaseTest, FixtureIsInitialized) { EXPECT_EQ(17, n_); } TEST_P(ParameterizedDerivedTest, SeesSequence) { EXPECT_EQ(17, n_); EXPECT_EQ(0, count_++); EXPECT_EQ(GetParam(), global_count_++); } class ParameterizedDeathTest : public ::testing::TestWithParam { }; TEST_F(ParameterizedDeathTest, GetParamDiesFromTestF) { EXPECT_DEATH_IF_SUPPORTED(GetParam(), ".* value-parameterized test .*"); } INSTANTIATE_TEST_CASE_P(RangeZeroToFive, ParameterizedDerivedTest, Range(0, 5)); #endif // GTEST_HAS_PARAM_TEST TEST(CompileTest, CombineIsDefinedOnlyWhenGtestHasParamTestIsDefined) { #if GTEST_HAS_COMBINE && !GTEST_HAS_PARAM_TEST FAIL() << "GTEST_HAS_COMBINE is defined while GTEST_HAS_PARAM_TEST is not\n" #endif } int main(int argc, char **argv) { #if GTEST_HAS_PARAM_TEST // Used in TestGenerationTest test case. AddGlobalTestEnvironment(TestGenerationTest::Environment::Instance()); // Used in GeneratorEvaluationTest test case. Tests that the updated value // will be picked up for instantiating tests in GeneratorEvaluationTest. GeneratorEvaluationTest::set_param_value(1); #endif // GTEST_HAS_PARAM_TEST ::testing::InitGoogleTest(&argc, argv); #if GTEST_HAS_PARAM_TEST // Used in GeneratorEvaluationTest test case. Tests that value updated // here will NOT be used for instantiating tests in // GeneratorEvaluationTest. GeneratorEvaluationTest::set_param_value(2); #endif // GTEST_HAS_PARAM_TEST return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-param-test_test.h000066400000000000000000000044471377520261000230270ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: vladl@google.com (Vlad Losev) // // The Google C++ Testing Framework (Google Test) // // This header file provides classes and functions used internally // for testing Google Test itself. #ifndef GTEST_TEST_GTEST_PARAM_TEST_TEST_H_ #define GTEST_TEST_GTEST_PARAM_TEST_TEST_H_ #include "gtest/gtest.h" #if GTEST_HAS_PARAM_TEST // Test fixture for testing definition and instantiation of a test // in separate translation units. class ExternalInstantiationTest : public ::testing::TestWithParam { }; // Test fixture for testing instantiation of a test in multiple // translation units. class InstantiationInMultipleTranslaionUnitsTest : public ::testing::TestWithParam { }; #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_TEST_GTEST_PARAM_TEST_TEST_H_ dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-port_test.cc000066400000000000000000001142661377520261000220750ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Authors: vladl@google.com (Vlad Losev), wan@google.com (Zhanyong Wan) // // This file tests the internal cross-platform support utilities. #include "gtest/internal/gtest-port.h" #include #if GTEST_OS_MAC # include #endif // GTEST_OS_MAC #include #include // For std::pair and std::make_pair. #include #include "gtest/gtest.h" #include "gtest/gtest-spi.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ using std::make_pair; using std::pair; namespace testing { namespace internal { TEST(IsXDigitTest, WorksForNarrowAscii) { EXPECT_TRUE(IsXDigit('0')); EXPECT_TRUE(IsXDigit('9')); EXPECT_TRUE(IsXDigit('A')); EXPECT_TRUE(IsXDigit('F')); EXPECT_TRUE(IsXDigit('a')); EXPECT_TRUE(IsXDigit('f')); EXPECT_FALSE(IsXDigit('-')); EXPECT_FALSE(IsXDigit('g')); EXPECT_FALSE(IsXDigit('G')); } TEST(IsXDigitTest, ReturnsFalseForNarrowNonAscii) { EXPECT_FALSE(IsXDigit(static_cast(0x80))); EXPECT_FALSE(IsXDigit(static_cast('0' | 0x80))); } TEST(IsXDigitTest, WorksForWideAscii) { EXPECT_TRUE(IsXDigit(L'0')); EXPECT_TRUE(IsXDigit(L'9')); EXPECT_TRUE(IsXDigit(L'A')); EXPECT_TRUE(IsXDigit(L'F')); EXPECT_TRUE(IsXDigit(L'a')); EXPECT_TRUE(IsXDigit(L'f')); EXPECT_FALSE(IsXDigit(L'-')); EXPECT_FALSE(IsXDigit(L'g')); EXPECT_FALSE(IsXDigit(L'G')); } TEST(IsXDigitTest, ReturnsFalseForWideNonAscii) { EXPECT_FALSE(IsXDigit(static_cast(0x80))); EXPECT_FALSE(IsXDigit(static_cast(L'0' | 0x80))); EXPECT_FALSE(IsXDigit(static_cast(L'0' | 0x100))); } class Base { public: // Copy constructor and assignment operator do exactly what we need, so we // use them. Base() : member_(0) {} explicit Base(int n) : member_(n) {} virtual ~Base() {} int member() { return member_; } private: int member_; }; class Derived : public Base { public: explicit Derived(int n) : Base(n) {} }; TEST(ImplicitCastTest, ConvertsPointers) { Derived derived(0); EXPECT_TRUE(&derived == ::testing::internal::ImplicitCast_(&derived)); } TEST(ImplicitCastTest, CanUseInheritance) { Derived derived(1); Base base = ::testing::internal::ImplicitCast_(derived); EXPECT_EQ(derived.member(), base.member()); } class Castable { public: explicit Castable(bool* converted) : converted_(converted) {} operator Base() { *converted_ = true; return Base(); } private: bool* converted_; }; TEST(ImplicitCastTest, CanUseNonConstCastOperator) { bool converted = false; Castable castable(&converted); Base base = ::testing::internal::ImplicitCast_(castable); EXPECT_TRUE(converted); } class ConstCastable { public: explicit ConstCastable(bool* converted) : converted_(converted) {} operator Base() const { *converted_ = true; return Base(); } private: bool* converted_; }; TEST(ImplicitCastTest, CanUseConstCastOperatorOnConstValues) { bool converted = false; const ConstCastable const_castable(&converted); Base base = ::testing::internal::ImplicitCast_(const_castable); EXPECT_TRUE(converted); } class ConstAndNonConstCastable { public: ConstAndNonConstCastable(bool* converted, bool* const_converted) : converted_(converted), const_converted_(const_converted) {} operator Base() { *converted_ = true; return Base(); } operator Base() const { *const_converted_ = true; return Base(); } private: bool* converted_; bool* const_converted_; }; TEST(ImplicitCastTest, CanSelectBetweenConstAndNonConstCasrAppropriately) { bool converted = false; bool const_converted = false; ConstAndNonConstCastable castable(&converted, &const_converted); Base base = ::testing::internal::ImplicitCast_(castable); EXPECT_TRUE(converted); EXPECT_FALSE(const_converted); converted = false; const_converted = false; const ConstAndNonConstCastable const_castable(&converted, &const_converted); base = ::testing::internal::ImplicitCast_(const_castable); EXPECT_FALSE(converted); EXPECT_TRUE(const_converted); } class To { public: To(bool* converted) { *converted = true; } // NOLINT }; TEST(ImplicitCastTest, CanUseImplicitConstructor) { bool converted = false; To to = ::testing::internal::ImplicitCast_(&converted); (void)to; EXPECT_TRUE(converted); } TEST(IteratorTraitsTest, WorksForSTLContainerIterators) { StaticAssertTypeEq::const_iterator>::value_type>(); StaticAssertTypeEq::iterator>::value_type>(); } TEST(IteratorTraitsTest, WorksForPointerToNonConst) { StaticAssertTypeEq::value_type>(); StaticAssertTypeEq::value_type>(); } TEST(IteratorTraitsTest, WorksForPointerToConst) { StaticAssertTypeEq::value_type>(); StaticAssertTypeEq::value_type>(); } // Tests that the element_type typedef is available in scoped_ptr and refers // to the parameter type. TEST(ScopedPtrTest, DefinesElementType) { StaticAssertTypeEq::element_type>(); } // TODO(vladl@google.com): Implement THE REST of scoped_ptr tests. TEST(GtestCheckSyntaxTest, BehavesLikeASingleStatement) { if (AlwaysFalse()) GTEST_CHECK_(false) << "This should never be executed; " "It's a compilation test only."; if (AlwaysTrue()) GTEST_CHECK_(true); else ; // NOLINT if (AlwaysFalse()) ; // NOLINT else GTEST_CHECK_(true) << ""; } TEST(GtestCheckSyntaxTest, WorksWithSwitch) { switch (0) { case 1: break; default: GTEST_CHECK_(true); } switch (0) case 0: GTEST_CHECK_(true) << "Check failed in switch case"; } // Verifies behavior of FormatFileLocation. TEST(FormatFileLocationTest, FormatsFileLocation) { EXPECT_PRED_FORMAT2(IsSubstring, "foo.cc", FormatFileLocation("foo.cc", 42)); EXPECT_PRED_FORMAT2(IsSubstring, "42", FormatFileLocation("foo.cc", 42)); } TEST(FormatFileLocationTest, FormatsUnknownFile) { EXPECT_PRED_FORMAT2( IsSubstring, "unknown file", FormatFileLocation(NULL, 42)); EXPECT_PRED_FORMAT2(IsSubstring, "42", FormatFileLocation(NULL, 42)); } TEST(FormatFileLocationTest, FormatsUknownLine) { EXPECT_EQ("foo.cc:", FormatFileLocation("foo.cc", -1)); } TEST(FormatFileLocationTest, FormatsUknownFileAndLine) { EXPECT_EQ("unknown file:", FormatFileLocation(NULL, -1)); } // Verifies behavior of FormatCompilerIndependentFileLocation. TEST(FormatCompilerIndependentFileLocationTest, FormatsFileLocation) { EXPECT_EQ("foo.cc:42", FormatCompilerIndependentFileLocation("foo.cc", 42)); } TEST(FormatCompilerIndependentFileLocationTest, FormatsUknownFile) { EXPECT_EQ("unknown file:42", FormatCompilerIndependentFileLocation(NULL, 42)); } TEST(FormatCompilerIndependentFileLocationTest, FormatsUknownLine) { EXPECT_EQ("foo.cc", FormatCompilerIndependentFileLocation("foo.cc", -1)); } TEST(FormatCompilerIndependentFileLocationTest, FormatsUknownFileAndLine) { EXPECT_EQ("unknown file", FormatCompilerIndependentFileLocation(NULL, -1)); } #if GTEST_OS_MAC || GTEST_OS_QNX void* ThreadFunc(void* data) { pthread_mutex_t* mutex = static_cast(data); pthread_mutex_lock(mutex); pthread_mutex_unlock(mutex); return NULL; } TEST(GetThreadCountTest, ReturnsCorrectValue) { EXPECT_EQ(1U, GetThreadCount()); pthread_mutex_t mutex; pthread_attr_t attr; pthread_t thread_id; // TODO(vladl@google.com): turn mutex into internal::Mutex for automatic // destruction. pthread_mutex_init(&mutex, NULL); pthread_mutex_lock(&mutex); ASSERT_EQ(0, pthread_attr_init(&attr)); ASSERT_EQ(0, pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE)); const int status = pthread_create(&thread_id, &attr, &ThreadFunc, &mutex); ASSERT_EQ(0, pthread_attr_destroy(&attr)); ASSERT_EQ(0, status); EXPECT_EQ(2U, GetThreadCount()); pthread_mutex_unlock(&mutex); void* dummy; ASSERT_EQ(0, pthread_join(thread_id, &dummy)); # if GTEST_OS_MAC // MacOS X may not immediately report the updated thread count after // joining a thread, causing flakiness in this test. To counter that, we // wait for up to .5 seconds for the OS to report the correct value. for (int i = 0; i < 5; ++i) { if (GetThreadCount() == 1) break; SleepMilliseconds(100); } # endif // GTEST_OS_MAC EXPECT_EQ(1U, GetThreadCount()); pthread_mutex_destroy(&mutex); } #else TEST(GetThreadCountTest, ReturnsZeroWhenUnableToCountThreads) { EXPECT_EQ(0U, GetThreadCount()); } #endif // GTEST_OS_MAC || GTEST_OS_QNX TEST(GtestCheckDeathTest, DiesWithCorrectOutputOnFailure) { const bool a_false_condition = false; const char regex[] = #ifdef _MSC_VER "gtest-port_test\\.cc\\(\\d+\\):" #elif GTEST_USES_POSIX_RE "gtest-port_test\\.cc:[0-9]+" #else "gtest-port_test\\.cc:\\d+" #endif // _MSC_VER ".*a_false_condition.*Extra info.*"; EXPECT_DEATH_IF_SUPPORTED(GTEST_CHECK_(a_false_condition) << "Extra info", regex); } #if GTEST_HAS_DEATH_TEST TEST(GtestCheckDeathTest, LivesSilentlyOnSuccess) { EXPECT_EXIT({ GTEST_CHECK_(true) << "Extra info"; ::std::cerr << "Success\n"; exit(0); }, ::testing::ExitedWithCode(0), "Success"); } #endif // GTEST_HAS_DEATH_TEST // Verifies that Google Test choose regular expression engine appropriate to // the platform. The test will produce compiler errors in case of failure. // For simplicity, we only cover the most important platforms here. TEST(RegexEngineSelectionTest, SelectsCorrectRegexEngine) { #if GTEST_HAS_POSIX_RE EXPECT_TRUE(GTEST_USES_POSIX_RE); #else EXPECT_TRUE(GTEST_USES_SIMPLE_RE); #endif } #if GTEST_USES_POSIX_RE # if GTEST_HAS_TYPED_TEST template class RETest : public ::testing::Test {}; // Defines StringTypes as the list of all string types that class RE // supports. typedef testing::Types< ::std::string, # if GTEST_HAS_GLOBAL_STRING ::string, # endif // GTEST_HAS_GLOBAL_STRING const char*> StringTypes; TYPED_TEST_CASE(RETest, StringTypes); // Tests RE's implicit constructors. TYPED_TEST(RETest, ImplicitConstructorWorks) { const RE empty(TypeParam("")); EXPECT_STREQ("", empty.pattern()); const RE simple(TypeParam("hello")); EXPECT_STREQ("hello", simple.pattern()); const RE normal(TypeParam(".*(\\w+)")); EXPECT_STREQ(".*(\\w+)", normal.pattern()); } // Tests that RE's constructors reject invalid regular expressions. TYPED_TEST(RETest, RejectsInvalidRegex) { EXPECT_NONFATAL_FAILURE({ const RE invalid(TypeParam("?")); }, "\"?\" is not a valid POSIX Extended regular expression."); } // Tests RE::FullMatch(). TYPED_TEST(RETest, FullMatchWorks) { const RE empty(TypeParam("")); EXPECT_TRUE(RE::FullMatch(TypeParam(""), empty)); EXPECT_FALSE(RE::FullMatch(TypeParam("a"), empty)); const RE re(TypeParam("a.*z")); EXPECT_TRUE(RE::FullMatch(TypeParam("az"), re)); EXPECT_TRUE(RE::FullMatch(TypeParam("axyz"), re)); EXPECT_FALSE(RE::FullMatch(TypeParam("baz"), re)); EXPECT_FALSE(RE::FullMatch(TypeParam("azy"), re)); } // Tests RE::PartialMatch(). TYPED_TEST(RETest, PartialMatchWorks) { const RE empty(TypeParam("")); EXPECT_TRUE(RE::PartialMatch(TypeParam(""), empty)); EXPECT_TRUE(RE::PartialMatch(TypeParam("a"), empty)); const RE re(TypeParam("a.*z")); EXPECT_TRUE(RE::PartialMatch(TypeParam("az"), re)); EXPECT_TRUE(RE::PartialMatch(TypeParam("axyz"), re)); EXPECT_TRUE(RE::PartialMatch(TypeParam("baz"), re)); EXPECT_TRUE(RE::PartialMatch(TypeParam("azy"), re)); EXPECT_FALSE(RE::PartialMatch(TypeParam("zza"), re)); } # endif // GTEST_HAS_TYPED_TEST #elif GTEST_USES_SIMPLE_RE TEST(IsInSetTest, NulCharIsNotInAnySet) { EXPECT_FALSE(IsInSet('\0', "")); EXPECT_FALSE(IsInSet('\0', "\0")); EXPECT_FALSE(IsInSet('\0', "a")); } TEST(IsInSetTest, WorksForNonNulChars) { EXPECT_FALSE(IsInSet('a', "Ab")); EXPECT_FALSE(IsInSet('c', "")); EXPECT_TRUE(IsInSet('b', "bcd")); EXPECT_TRUE(IsInSet('b', "ab")); } TEST(IsAsciiDigitTest, IsFalseForNonDigit) { EXPECT_FALSE(IsAsciiDigit('\0')); EXPECT_FALSE(IsAsciiDigit(' ')); EXPECT_FALSE(IsAsciiDigit('+')); EXPECT_FALSE(IsAsciiDigit('-')); EXPECT_FALSE(IsAsciiDigit('.')); EXPECT_FALSE(IsAsciiDigit('a')); } TEST(IsAsciiDigitTest, IsTrueForDigit) { EXPECT_TRUE(IsAsciiDigit('0')); EXPECT_TRUE(IsAsciiDigit('1')); EXPECT_TRUE(IsAsciiDigit('5')); EXPECT_TRUE(IsAsciiDigit('9')); } TEST(IsAsciiPunctTest, IsFalseForNonPunct) { EXPECT_FALSE(IsAsciiPunct('\0')); EXPECT_FALSE(IsAsciiPunct(' ')); EXPECT_FALSE(IsAsciiPunct('\n')); EXPECT_FALSE(IsAsciiPunct('a')); EXPECT_FALSE(IsAsciiPunct('0')); } TEST(IsAsciiPunctTest, IsTrueForPunct) { for (const char* p = "^-!\"#$%&'()*+,./:;<=>?@[\\]_`{|}~"; *p; p++) { EXPECT_PRED1(IsAsciiPunct, *p); } } TEST(IsRepeatTest, IsFalseForNonRepeatChar) { EXPECT_FALSE(IsRepeat('\0')); EXPECT_FALSE(IsRepeat(' ')); EXPECT_FALSE(IsRepeat('a')); EXPECT_FALSE(IsRepeat('1')); EXPECT_FALSE(IsRepeat('-')); } TEST(IsRepeatTest, IsTrueForRepeatChar) { EXPECT_TRUE(IsRepeat('?')); EXPECT_TRUE(IsRepeat('*')); EXPECT_TRUE(IsRepeat('+')); } TEST(IsAsciiWhiteSpaceTest, IsFalseForNonWhiteSpace) { EXPECT_FALSE(IsAsciiWhiteSpace('\0')); EXPECT_FALSE(IsAsciiWhiteSpace('a')); EXPECT_FALSE(IsAsciiWhiteSpace('1')); EXPECT_FALSE(IsAsciiWhiteSpace('+')); EXPECT_FALSE(IsAsciiWhiteSpace('_')); } TEST(IsAsciiWhiteSpaceTest, IsTrueForWhiteSpace) { EXPECT_TRUE(IsAsciiWhiteSpace(' ')); EXPECT_TRUE(IsAsciiWhiteSpace('\n')); EXPECT_TRUE(IsAsciiWhiteSpace('\r')); EXPECT_TRUE(IsAsciiWhiteSpace('\t')); EXPECT_TRUE(IsAsciiWhiteSpace('\v')); EXPECT_TRUE(IsAsciiWhiteSpace('\f')); } TEST(IsAsciiWordCharTest, IsFalseForNonWordChar) { EXPECT_FALSE(IsAsciiWordChar('\0')); EXPECT_FALSE(IsAsciiWordChar('+')); EXPECT_FALSE(IsAsciiWordChar('.')); EXPECT_FALSE(IsAsciiWordChar(' ')); EXPECT_FALSE(IsAsciiWordChar('\n')); } TEST(IsAsciiWordCharTest, IsTrueForLetter) { EXPECT_TRUE(IsAsciiWordChar('a')); EXPECT_TRUE(IsAsciiWordChar('b')); EXPECT_TRUE(IsAsciiWordChar('A')); EXPECT_TRUE(IsAsciiWordChar('Z')); } TEST(IsAsciiWordCharTest, IsTrueForDigit) { EXPECT_TRUE(IsAsciiWordChar('0')); EXPECT_TRUE(IsAsciiWordChar('1')); EXPECT_TRUE(IsAsciiWordChar('7')); EXPECT_TRUE(IsAsciiWordChar('9')); } TEST(IsAsciiWordCharTest, IsTrueForUnderscore) { EXPECT_TRUE(IsAsciiWordChar('_')); } TEST(IsValidEscapeTest, IsFalseForNonPrintable) { EXPECT_FALSE(IsValidEscape('\0')); EXPECT_FALSE(IsValidEscape('\007')); } TEST(IsValidEscapeTest, IsFalseForDigit) { EXPECT_FALSE(IsValidEscape('0')); EXPECT_FALSE(IsValidEscape('9')); } TEST(IsValidEscapeTest, IsFalseForWhiteSpace) { EXPECT_FALSE(IsValidEscape(' ')); EXPECT_FALSE(IsValidEscape('\n')); } TEST(IsValidEscapeTest, IsFalseForSomeLetter) { EXPECT_FALSE(IsValidEscape('a')); EXPECT_FALSE(IsValidEscape('Z')); } TEST(IsValidEscapeTest, IsTrueForPunct) { EXPECT_TRUE(IsValidEscape('.')); EXPECT_TRUE(IsValidEscape('-')); EXPECT_TRUE(IsValidEscape('^')); EXPECT_TRUE(IsValidEscape('$')); EXPECT_TRUE(IsValidEscape('(')); EXPECT_TRUE(IsValidEscape(']')); EXPECT_TRUE(IsValidEscape('{')); EXPECT_TRUE(IsValidEscape('|')); } TEST(IsValidEscapeTest, IsTrueForSomeLetter) { EXPECT_TRUE(IsValidEscape('d')); EXPECT_TRUE(IsValidEscape('D')); EXPECT_TRUE(IsValidEscape('s')); EXPECT_TRUE(IsValidEscape('S')); EXPECT_TRUE(IsValidEscape('w')); EXPECT_TRUE(IsValidEscape('W')); } TEST(AtomMatchesCharTest, EscapedPunct) { EXPECT_FALSE(AtomMatchesChar(true, '\\', '\0')); EXPECT_FALSE(AtomMatchesChar(true, '\\', ' ')); EXPECT_FALSE(AtomMatchesChar(true, '_', '.')); EXPECT_FALSE(AtomMatchesChar(true, '.', 'a')); EXPECT_TRUE(AtomMatchesChar(true, '\\', '\\')); EXPECT_TRUE(AtomMatchesChar(true, '_', '_')); EXPECT_TRUE(AtomMatchesChar(true, '+', '+')); EXPECT_TRUE(AtomMatchesChar(true, '.', '.')); } TEST(AtomMatchesCharTest, Escaped_d) { EXPECT_FALSE(AtomMatchesChar(true, 'd', '\0')); EXPECT_FALSE(AtomMatchesChar(true, 'd', 'a')); EXPECT_FALSE(AtomMatchesChar(true, 'd', '.')); EXPECT_TRUE(AtomMatchesChar(true, 'd', '0')); EXPECT_TRUE(AtomMatchesChar(true, 'd', '9')); } TEST(AtomMatchesCharTest, Escaped_D) { EXPECT_FALSE(AtomMatchesChar(true, 'D', '0')); EXPECT_FALSE(AtomMatchesChar(true, 'D', '9')); EXPECT_TRUE(AtomMatchesChar(true, 'D', '\0')); EXPECT_TRUE(AtomMatchesChar(true, 'D', 'a')); EXPECT_TRUE(AtomMatchesChar(true, 'D', '-')); } TEST(AtomMatchesCharTest, Escaped_s) { EXPECT_FALSE(AtomMatchesChar(true, 's', '\0')); EXPECT_FALSE(AtomMatchesChar(true, 's', 'a')); EXPECT_FALSE(AtomMatchesChar(true, 's', '.')); EXPECT_FALSE(AtomMatchesChar(true, 's', '9')); EXPECT_TRUE(AtomMatchesChar(true, 's', ' ')); EXPECT_TRUE(AtomMatchesChar(true, 's', '\n')); EXPECT_TRUE(AtomMatchesChar(true, 's', '\t')); } TEST(AtomMatchesCharTest, Escaped_S) { EXPECT_FALSE(AtomMatchesChar(true, 'S', ' ')); EXPECT_FALSE(AtomMatchesChar(true, 'S', '\r')); EXPECT_TRUE(AtomMatchesChar(true, 'S', '\0')); EXPECT_TRUE(AtomMatchesChar(true, 'S', 'a')); EXPECT_TRUE(AtomMatchesChar(true, 'S', '9')); } TEST(AtomMatchesCharTest, Escaped_w) { EXPECT_FALSE(AtomMatchesChar(true, 'w', '\0')); EXPECT_FALSE(AtomMatchesChar(true, 'w', '+')); EXPECT_FALSE(AtomMatchesChar(true, 'w', ' ')); EXPECT_FALSE(AtomMatchesChar(true, 'w', '\n')); EXPECT_TRUE(AtomMatchesChar(true, 'w', '0')); EXPECT_TRUE(AtomMatchesChar(true, 'w', 'b')); EXPECT_TRUE(AtomMatchesChar(true, 'w', 'C')); EXPECT_TRUE(AtomMatchesChar(true, 'w', '_')); } TEST(AtomMatchesCharTest, Escaped_W) { EXPECT_FALSE(AtomMatchesChar(true, 'W', 'A')); EXPECT_FALSE(AtomMatchesChar(true, 'W', 'b')); EXPECT_FALSE(AtomMatchesChar(true, 'W', '9')); EXPECT_FALSE(AtomMatchesChar(true, 'W', '_')); EXPECT_TRUE(AtomMatchesChar(true, 'W', '\0')); EXPECT_TRUE(AtomMatchesChar(true, 'W', '*')); EXPECT_TRUE(AtomMatchesChar(true, 'W', '\n')); } TEST(AtomMatchesCharTest, EscapedWhiteSpace) { EXPECT_FALSE(AtomMatchesChar(true, 'f', '\0')); EXPECT_FALSE(AtomMatchesChar(true, 'f', '\n')); EXPECT_FALSE(AtomMatchesChar(true, 'n', '\0')); EXPECT_FALSE(AtomMatchesChar(true, 'n', '\r')); EXPECT_FALSE(AtomMatchesChar(true, 'r', '\0')); EXPECT_FALSE(AtomMatchesChar(true, 'r', 'a')); EXPECT_FALSE(AtomMatchesChar(true, 't', '\0')); EXPECT_FALSE(AtomMatchesChar(true, 't', 't')); EXPECT_FALSE(AtomMatchesChar(true, 'v', '\0')); EXPECT_FALSE(AtomMatchesChar(true, 'v', '\f')); EXPECT_TRUE(AtomMatchesChar(true, 'f', '\f')); EXPECT_TRUE(AtomMatchesChar(true, 'n', '\n')); EXPECT_TRUE(AtomMatchesChar(true, 'r', '\r')); EXPECT_TRUE(AtomMatchesChar(true, 't', '\t')); EXPECT_TRUE(AtomMatchesChar(true, 'v', '\v')); } TEST(AtomMatchesCharTest, UnescapedDot) { EXPECT_FALSE(AtomMatchesChar(false, '.', '\n')); EXPECT_TRUE(AtomMatchesChar(false, '.', '\0')); EXPECT_TRUE(AtomMatchesChar(false, '.', '.')); EXPECT_TRUE(AtomMatchesChar(false, '.', 'a')); EXPECT_TRUE(AtomMatchesChar(false, '.', ' ')); } TEST(AtomMatchesCharTest, UnescapedChar) { EXPECT_FALSE(AtomMatchesChar(false, 'a', '\0')); EXPECT_FALSE(AtomMatchesChar(false, 'a', 'b')); EXPECT_FALSE(AtomMatchesChar(false, '$', 'a')); EXPECT_TRUE(AtomMatchesChar(false, '$', '$')); EXPECT_TRUE(AtomMatchesChar(false, '5', '5')); EXPECT_TRUE(AtomMatchesChar(false, 'Z', 'Z')); } TEST(ValidateRegexTest, GeneratesFailureAndReturnsFalseForInvalid) { EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(NULL)), "NULL is not a valid simple regular expression"); EXPECT_NONFATAL_FAILURE( ASSERT_FALSE(ValidateRegex("a\\")), "Syntax error at index 1 in simple regular expression \"a\\\": "); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("a\\")), "'\\' cannot appear at the end"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("\\n\\")), "'\\' cannot appear at the end"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("\\s\\hb")), "invalid escape sequence \"\\h\""); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("^^")), "'^' can only appear at the beginning"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(".*^b")), "'^' can only appear at the beginning"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("$$")), "'$' can only appear at the end"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("^$a")), "'$' can only appear at the end"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("a(b")), "'(' is unsupported"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("ab)")), "')' is unsupported"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("[ab")), "'[' is unsupported"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("a{2")), "'{' is unsupported"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("?")), "'?' can only follow a repeatable token"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("^*")), "'*' can only follow a repeatable token"); EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex("5*+")), "'+' can only follow a repeatable token"); } TEST(ValidateRegexTest, ReturnsTrueForValid) { EXPECT_TRUE(ValidateRegex("")); EXPECT_TRUE(ValidateRegex("a")); EXPECT_TRUE(ValidateRegex(".*")); EXPECT_TRUE(ValidateRegex("^a_+")); EXPECT_TRUE(ValidateRegex("^a\\t\\&?")); EXPECT_TRUE(ValidateRegex("09*$")); EXPECT_TRUE(ValidateRegex("^Z$")); EXPECT_TRUE(ValidateRegex("a\\^Z\\$\\(\\)\\|\\[\\]\\{\\}")); } TEST(MatchRepetitionAndRegexAtHeadTest, WorksForZeroOrOne) { EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, 'a', '?', "a", "ba")); // Repeating more than once. EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, 'a', '?', "b", "aab")); // Repeating zero times. EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, 'a', '?', "b", "ba")); // Repeating once. EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, 'a', '?', "b", "ab")); EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '#', '?', ".", "##")); } TEST(MatchRepetitionAndRegexAtHeadTest, WorksForZeroOrMany) { EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, '.', '*', "a$", "baab")); // Repeating zero times. EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '.', '*', "b", "bc")); // Repeating once. EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '.', '*', "b", "abc")); // Repeating more than once. EXPECT_TRUE(MatchRepetitionAndRegexAtHead(true, 'w', '*', "-", "ab_1-g")); } TEST(MatchRepetitionAndRegexAtHeadTest, WorksForOneOrMany) { EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, '.', '+', "a$", "baab")); // Repeating zero times. EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, '.', '+', "b", "bc")); // Repeating once. EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '.', '+', "b", "abc")); // Repeating more than once. EXPECT_TRUE(MatchRepetitionAndRegexAtHead(true, 'w', '+', "-", "ab_1-g")); } TEST(MatchRegexAtHeadTest, ReturnsTrueForEmptyRegex) { EXPECT_TRUE(MatchRegexAtHead("", "")); EXPECT_TRUE(MatchRegexAtHead("", "ab")); } TEST(MatchRegexAtHeadTest, WorksWhenDollarIsInRegex) { EXPECT_FALSE(MatchRegexAtHead("$", "a")); EXPECT_TRUE(MatchRegexAtHead("$", "")); EXPECT_TRUE(MatchRegexAtHead("a$", "a")); } TEST(MatchRegexAtHeadTest, WorksWhenRegexStartsWithEscapeSequence) { EXPECT_FALSE(MatchRegexAtHead("\\w", "+")); EXPECT_FALSE(MatchRegexAtHead("\\W", "ab")); EXPECT_TRUE(MatchRegexAtHead("\\sa", "\nab")); EXPECT_TRUE(MatchRegexAtHead("\\d", "1a")); } TEST(MatchRegexAtHeadTest, WorksWhenRegexStartsWithRepetition) { EXPECT_FALSE(MatchRegexAtHead(".+a", "abc")); EXPECT_FALSE(MatchRegexAtHead("a?b", "aab")); EXPECT_TRUE(MatchRegexAtHead(".*a", "bc12-ab")); EXPECT_TRUE(MatchRegexAtHead("a?b", "b")); EXPECT_TRUE(MatchRegexAtHead("a?b", "ab")); } TEST(MatchRegexAtHeadTest, WorksWhenRegexStartsWithRepetionOfEscapeSequence) { EXPECT_FALSE(MatchRegexAtHead("\\.+a", "abc")); EXPECT_FALSE(MatchRegexAtHead("\\s?b", " b")); EXPECT_TRUE(MatchRegexAtHead("\\(*a", "((((ab")); EXPECT_TRUE(MatchRegexAtHead("\\^?b", "^b")); EXPECT_TRUE(MatchRegexAtHead("\\\\?b", "b")); EXPECT_TRUE(MatchRegexAtHead("\\\\?b", "\\b")); } TEST(MatchRegexAtHeadTest, MatchesSequentially) { EXPECT_FALSE(MatchRegexAtHead("ab.*c", "acabc")); EXPECT_TRUE(MatchRegexAtHead("ab.*c", "ab-fsc")); } TEST(MatchRegexAnywhereTest, ReturnsFalseWhenStringIsNull) { EXPECT_FALSE(MatchRegexAnywhere("", NULL)); } TEST(MatchRegexAnywhereTest, WorksWhenRegexStartsWithCaret) { EXPECT_FALSE(MatchRegexAnywhere("^a", "ba")); EXPECT_FALSE(MatchRegexAnywhere("^$", "a")); EXPECT_TRUE(MatchRegexAnywhere("^a", "ab")); EXPECT_TRUE(MatchRegexAnywhere("^", "ab")); EXPECT_TRUE(MatchRegexAnywhere("^$", "")); } TEST(MatchRegexAnywhereTest, ReturnsFalseWhenNoMatch) { EXPECT_FALSE(MatchRegexAnywhere("a", "bcde123")); EXPECT_FALSE(MatchRegexAnywhere("a.+a", "--aa88888888")); } TEST(MatchRegexAnywhereTest, ReturnsTrueWhenMatchingPrefix) { EXPECT_TRUE(MatchRegexAnywhere("\\w+", "ab1_ - 5")); EXPECT_TRUE(MatchRegexAnywhere(".*=", "=")); EXPECT_TRUE(MatchRegexAnywhere("x.*ab?.*bc", "xaaabc")); } TEST(MatchRegexAnywhereTest, ReturnsTrueWhenMatchingNonPrefix) { EXPECT_TRUE(MatchRegexAnywhere("\\w+", "$$$ ab1_ - 5")); EXPECT_TRUE(MatchRegexAnywhere("\\.+=", "= ...=")); } // Tests RE's implicit constructors. TEST(RETest, ImplicitConstructorWorks) { const RE empty(""); EXPECT_STREQ("", empty.pattern()); const RE simple("hello"); EXPECT_STREQ("hello", simple.pattern()); } // Tests that RE's constructors reject invalid regular expressions. TEST(RETest, RejectsInvalidRegex) { EXPECT_NONFATAL_FAILURE({ const RE normal(NULL); }, "NULL is not a valid simple regular expression"); EXPECT_NONFATAL_FAILURE({ const RE normal(".*(\\w+"); }, "'(' is unsupported"); EXPECT_NONFATAL_FAILURE({ const RE invalid("^?"); }, "'?' can only follow a repeatable token"); } // Tests RE::FullMatch(). TEST(RETest, FullMatchWorks) { const RE empty(""); EXPECT_TRUE(RE::FullMatch("", empty)); EXPECT_FALSE(RE::FullMatch("a", empty)); const RE re1("a"); EXPECT_TRUE(RE::FullMatch("a", re1)); const RE re("a.*z"); EXPECT_TRUE(RE::FullMatch("az", re)); EXPECT_TRUE(RE::FullMatch("axyz", re)); EXPECT_FALSE(RE::FullMatch("baz", re)); EXPECT_FALSE(RE::FullMatch("azy", re)); } // Tests RE::PartialMatch(). TEST(RETest, PartialMatchWorks) { const RE empty(""); EXPECT_TRUE(RE::PartialMatch("", empty)); EXPECT_TRUE(RE::PartialMatch("a", empty)); const RE re("a.*z"); EXPECT_TRUE(RE::PartialMatch("az", re)); EXPECT_TRUE(RE::PartialMatch("axyz", re)); EXPECT_TRUE(RE::PartialMatch("baz", re)); EXPECT_TRUE(RE::PartialMatch("azy", re)); EXPECT_FALSE(RE::PartialMatch("zza", re)); } #endif // GTEST_USES_POSIX_RE #if !GTEST_OS_WINDOWS_MOBILE TEST(CaptureTest, CapturesStdout) { CaptureStdout(); fprintf(stdout, "abc"); EXPECT_STREQ("abc", GetCapturedStdout().c_str()); CaptureStdout(); fprintf(stdout, "def%cghi", '\0'); EXPECT_EQ(::std::string("def\0ghi", 7), ::std::string(GetCapturedStdout())); } TEST(CaptureTest, CapturesStderr) { CaptureStderr(); fprintf(stderr, "jkl"); EXPECT_STREQ("jkl", GetCapturedStderr().c_str()); CaptureStderr(); fprintf(stderr, "jkl%cmno", '\0'); EXPECT_EQ(::std::string("jkl\0mno", 7), ::std::string(GetCapturedStderr())); } // Tests that stdout and stderr capture don't interfere with each other. TEST(CaptureTest, CapturesStdoutAndStderr) { CaptureStdout(); CaptureStderr(); fprintf(stdout, "pqr"); fprintf(stderr, "stu"); EXPECT_STREQ("pqr", GetCapturedStdout().c_str()); EXPECT_STREQ("stu", GetCapturedStderr().c_str()); } TEST(CaptureDeathTest, CannotReenterStdoutCapture) { CaptureStdout(); EXPECT_DEATH_IF_SUPPORTED(CaptureStdout(), "Only one stdout capturer can exist at a time"); GetCapturedStdout(); // We cannot test stderr capturing using death tests as they use it // themselves. } #endif // !GTEST_OS_WINDOWS_MOBILE TEST(ThreadLocalTest, DefaultConstructorInitializesToDefaultValues) { ThreadLocal t1; EXPECT_EQ(0, t1.get()); ThreadLocal t2; EXPECT_TRUE(t2.get() == NULL); } TEST(ThreadLocalTest, SingleParamConstructorInitializesToParam) { ThreadLocal t1(123); EXPECT_EQ(123, t1.get()); int i = 0; ThreadLocal t2(&i); EXPECT_EQ(&i, t2.get()); } class NoDefaultContructor { public: explicit NoDefaultContructor(const char*) {} NoDefaultContructor(const NoDefaultContructor&) {} }; TEST(ThreadLocalTest, ValueDefaultContructorIsNotRequiredForParamVersion) { ThreadLocal bar(NoDefaultContructor("foo")); bar.pointer(); } TEST(ThreadLocalTest, GetAndPointerReturnSameValue) { ThreadLocal thread_local_string; EXPECT_EQ(thread_local_string.pointer(), &(thread_local_string.get())); // Verifies the condition still holds after calling set. thread_local_string.set("foo"); EXPECT_EQ(thread_local_string.pointer(), &(thread_local_string.get())); } TEST(ThreadLocalTest, PointerAndConstPointerReturnSameValue) { ThreadLocal thread_local_string; const ThreadLocal& const_thread_local_string = thread_local_string; EXPECT_EQ(thread_local_string.pointer(), const_thread_local_string.pointer()); thread_local_string.set("foo"); EXPECT_EQ(thread_local_string.pointer(), const_thread_local_string.pointer()); } #if GTEST_IS_THREADSAFE void AddTwo(int* param) { *param += 2; } TEST(ThreadWithParamTest, ConstructorExecutesThreadFunc) { int i = 40; ThreadWithParam thread(&AddTwo, &i, NULL); thread.Join(); EXPECT_EQ(42, i); } TEST(MutexDeathTest, AssertHeldShouldAssertWhenNotLocked) { // AssertHeld() is flaky only in the presence of multiple threads accessing // the lock. In this case, the test is robust. EXPECT_DEATH_IF_SUPPORTED({ Mutex m; { MutexLock lock(&m); } m.AssertHeld(); }, "thread .*hold"); } TEST(MutexTest, AssertHeldShouldNotAssertWhenLocked) { Mutex m; MutexLock lock(&m); m.AssertHeld(); } class AtomicCounterWithMutex { public: explicit AtomicCounterWithMutex(Mutex* mutex) : value_(0), mutex_(mutex), random_(42) {} void Increment() { MutexLock lock(mutex_); int temp = value_; { // Locking a mutex puts up a memory barrier, preventing reads and // writes to value_ rearranged when observed from other threads. // // We cannot use Mutex and MutexLock here or rely on their memory // barrier functionality as we are testing them here. pthread_mutex_t memory_barrier_mutex; GTEST_CHECK_POSIX_SUCCESS_( pthread_mutex_init(&memory_barrier_mutex, NULL)); GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&memory_barrier_mutex)); SleepMilliseconds(random_.Generate(30)); GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&memory_barrier_mutex)); GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&memory_barrier_mutex)); } value_ = temp + 1; } int value() const { return value_; } private: volatile int value_; Mutex* const mutex_; // Protects value_. Random random_; }; void CountingThreadFunc(pair param) { for (int i = 0; i < param.second; ++i) param.first->Increment(); } // Tests that the mutex only lets one thread at a time to lock it. TEST(MutexTest, OnlyOneThreadCanLockAtATime) { Mutex mutex; AtomicCounterWithMutex locked_counter(&mutex); typedef ThreadWithParam > ThreadType; const int kCycleCount = 20; const int kThreadCount = 7; scoped_ptr counting_threads[kThreadCount]; Notification threads_can_start; // Creates and runs kThreadCount threads that increment locked_counter // kCycleCount times each. for (int i = 0; i < kThreadCount; ++i) { counting_threads[i].reset(new ThreadType(&CountingThreadFunc, make_pair(&locked_counter, kCycleCount), &threads_can_start)); } threads_can_start.Notify(); for (int i = 0; i < kThreadCount; ++i) counting_threads[i]->Join(); // If the mutex lets more than one thread to increment the counter at a // time, they are likely to encounter a race condition and have some // increments overwritten, resulting in the lower then expected counter // value. EXPECT_EQ(kCycleCount * kThreadCount, locked_counter.value()); } template void RunFromThread(void (func)(T), T param) { ThreadWithParam thread(func, param, NULL); thread.Join(); } void RetrieveThreadLocalValue( pair*, std::string*> param) { *param.second = param.first->get(); } TEST(ThreadLocalTest, ParameterizedConstructorSetsDefault) { ThreadLocal thread_local_string("foo"); EXPECT_STREQ("foo", thread_local_string.get().c_str()); thread_local_string.set("bar"); EXPECT_STREQ("bar", thread_local_string.get().c_str()); std::string result; RunFromThread(&RetrieveThreadLocalValue, make_pair(&thread_local_string, &result)); EXPECT_STREQ("foo", result.c_str()); } // DestructorTracker keeps track of whether its instances have been // destroyed. static std::vector g_destroyed; class DestructorTracker { public: DestructorTracker() : index_(GetNewIndex()) {} DestructorTracker(const DestructorTracker& /* rhs */) : index_(GetNewIndex()) {} ~DestructorTracker() { // We never access g_destroyed concurrently, so we don't need to // protect the write operation under a mutex. g_destroyed[index_] = true; } private: static int GetNewIndex() { g_destroyed.push_back(false); return g_destroyed.size() - 1; } const int index_; }; typedef ThreadLocal* ThreadParam; void CallThreadLocalGet(ThreadParam thread_local_param) { thread_local_param->get(); } // Tests that when a ThreadLocal object dies in a thread, it destroys // the managed object for that thread. TEST(ThreadLocalTest, DestroysManagedObjectForOwnThreadWhenDying) { g_destroyed.clear(); { // The next line default constructs a DestructorTracker object as // the default value of objects managed by thread_local_tracker. ThreadLocal thread_local_tracker; ASSERT_EQ(1U, g_destroyed.size()); ASSERT_FALSE(g_destroyed[0]); // This creates another DestructorTracker object for the main thread. thread_local_tracker.get(); ASSERT_EQ(2U, g_destroyed.size()); ASSERT_FALSE(g_destroyed[0]); ASSERT_FALSE(g_destroyed[1]); } // Now thread_local_tracker has died. It should have destroyed both the // default value shared by all threads and the value for the main // thread. ASSERT_EQ(2U, g_destroyed.size()); EXPECT_TRUE(g_destroyed[0]); EXPECT_TRUE(g_destroyed[1]); g_destroyed.clear(); } // Tests that when a thread exits, the thread-local object for that // thread is destroyed. TEST(ThreadLocalTest, DestroysManagedObjectAtThreadExit) { g_destroyed.clear(); { // The next line default constructs a DestructorTracker object as // the default value of objects managed by thread_local_tracker. ThreadLocal thread_local_tracker; ASSERT_EQ(1U, g_destroyed.size()); ASSERT_FALSE(g_destroyed[0]); // This creates another DestructorTracker object in the new thread. ThreadWithParam thread( &CallThreadLocalGet, &thread_local_tracker, NULL); thread.Join(); // Now the new thread has exited. The per-thread object for it // should have been destroyed. ASSERT_EQ(2U, g_destroyed.size()); ASSERT_FALSE(g_destroyed[0]); ASSERT_TRUE(g_destroyed[1]); } // Now thread_local_tracker has died. The default value should have been // destroyed too. ASSERT_EQ(2U, g_destroyed.size()); EXPECT_TRUE(g_destroyed[0]); EXPECT_TRUE(g_destroyed[1]); g_destroyed.clear(); } TEST(ThreadLocalTest, ThreadLocalMutationsAffectOnlyCurrentThread) { ThreadLocal thread_local_string; thread_local_string.set("Foo"); EXPECT_STREQ("Foo", thread_local_string.get().c_str()); std::string result; RunFromThread(&RetrieveThreadLocalValue, make_pair(&thread_local_string, &result)); EXPECT_TRUE(result.empty()); } #endif // GTEST_IS_THREADSAFE } // namespace internal } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-printers_test.cc000066400000000000000000001406641377520261000227600ustar00rootroot00000000000000// Copyright 2007, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Google Test - The Google C++ Testing Framework // // This file tests the universal value printer. #include "gtest/gtest-printers.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "gtest/gtest.h" // hash_map and hash_set are available under Visual C++. #if _MSC_VER # define GTEST_HAS_HASH_MAP_ 1 // Indicates that hash_map is available. # include // NOLINT # define GTEST_HAS_HASH_SET_ 1 // Indicates that hash_set is available. # include // NOLINT #endif // GTEST_OS_WINDOWS // Some user-defined types for testing the universal value printer. // An anonymous enum type. enum AnonymousEnum { kAE1 = -1, kAE2 = 1 }; // An enum without a user-defined printer. enum EnumWithoutPrinter { kEWP1 = -2, kEWP2 = 42 }; // An enum with a << operator. enum EnumWithStreaming { kEWS1 = 10 }; std::ostream& operator<<(std::ostream& os, EnumWithStreaming e) { return os << (e == kEWS1 ? "kEWS1" : "invalid"); } // An enum with a PrintTo() function. enum EnumWithPrintTo { kEWPT1 = 1 }; void PrintTo(EnumWithPrintTo e, std::ostream* os) { *os << (e == kEWPT1 ? "kEWPT1" : "invalid"); } // A class implicitly convertible to BiggestInt. class BiggestIntConvertible { public: operator ::testing::internal::BiggestInt() const { return 42; } }; // A user-defined unprintable class template in the global namespace. template class UnprintableTemplateInGlobal { public: UnprintableTemplateInGlobal() : value_() {} private: T value_; }; // A user-defined streamable type in the global namespace. class StreamableInGlobal { public: virtual ~StreamableInGlobal() {} }; inline void operator<<(::std::ostream& os, const StreamableInGlobal& /* x */) { os << "StreamableInGlobal"; } void operator<<(::std::ostream& os, const StreamableInGlobal* /* x */) { os << "StreamableInGlobal*"; } namespace foo { // A user-defined unprintable type in a user namespace. class UnprintableInFoo { public: UnprintableInFoo() : z_(0) { memcpy(xy_, "\xEF\x12\x0\x0\x34\xAB\x0\x0", 8); } private: char xy_[8]; double z_; }; // A user-defined printable type in a user-chosen namespace. struct PrintableViaPrintTo { PrintableViaPrintTo() : value() {} int value; }; void PrintTo(const PrintableViaPrintTo& x, ::std::ostream* os) { *os << "PrintableViaPrintTo: " << x.value; } // A type with a user-defined << for printing its pointer. struct PointerPrintable { }; ::std::ostream& operator<<(::std::ostream& os, const PointerPrintable* /* x */) { return os << "PointerPrintable*"; } // A user-defined printable class template in a user-chosen namespace. template class PrintableViaPrintToTemplate { public: explicit PrintableViaPrintToTemplate(const T& a_value) : value_(a_value) {} const T& value() const { return value_; } private: T value_; }; template void PrintTo(const PrintableViaPrintToTemplate& x, ::std::ostream* os) { *os << "PrintableViaPrintToTemplate: " << x.value(); } // A user-defined streamable class template in a user namespace. template class StreamableTemplateInFoo { public: StreamableTemplateInFoo() : value_() {} const T& value() const { return value_; } private: T value_; }; template inline ::std::ostream& operator<<(::std::ostream& os, const StreamableTemplateInFoo& x) { return os << "StreamableTemplateInFoo: " << x.value(); } } // namespace foo namespace testing { namespace gtest_printers_test { using ::std::deque; using ::std::list; using ::std::make_pair; using ::std::map; using ::std::multimap; using ::std::multiset; using ::std::pair; using ::std::set; using ::std::vector; using ::testing::PrintToString; using ::testing::internal::FormatForComparisonFailureMessage; using ::testing::internal::ImplicitCast_; using ::testing::internal::NativeArray; using ::testing::internal::RE; using ::testing::internal::Strings; using ::testing::internal::UniversalPrint; using ::testing::internal::UniversalPrinter; using ::testing::internal::UniversalTersePrint; using ::testing::internal::UniversalTersePrintTupleFieldsToStrings; using ::testing::internal::kReference; using ::testing::internal::string; #if GTEST_HAS_TR1_TUPLE using ::std::tr1::make_tuple; using ::std::tr1::tuple; #endif // The hash_* classes are not part of the C++ standard. STLport // defines them in namespace std. MSVC defines them in ::stdext. GCC // defines them in ::. #ifdef _STLP_HASH_MAP // We got from STLport. using ::std::hash_map; using ::std::hash_set; using ::std::hash_multimap; using ::std::hash_multiset; #elif _MSC_VER using ::stdext::hash_map; using ::stdext::hash_set; using ::stdext::hash_multimap; using ::stdext::hash_multiset; #endif // Prints a value to a string using the universal value printer. This // is a helper for testing UniversalPrinter::Print() for various types. template string Print(const T& value) { ::std::stringstream ss; UniversalPrinter::Print(value, &ss); return ss.str(); } // Prints a value passed by reference to a string, using the universal // value printer. This is a helper for testing // UniversalPrinter::Print() for various types. template string PrintByRef(const T& value) { ::std::stringstream ss; UniversalPrinter::Print(value, &ss); return ss.str(); } // Tests printing various enum types. TEST(PrintEnumTest, AnonymousEnum) { EXPECT_EQ("-1", Print(kAE1)); EXPECT_EQ("1", Print(kAE2)); } TEST(PrintEnumTest, EnumWithoutPrinter) { EXPECT_EQ("-2", Print(kEWP1)); EXPECT_EQ("42", Print(kEWP2)); } TEST(PrintEnumTest, EnumWithStreaming) { EXPECT_EQ("kEWS1", Print(kEWS1)); EXPECT_EQ("invalid", Print(static_cast(0))); } TEST(PrintEnumTest, EnumWithPrintTo) { EXPECT_EQ("kEWPT1", Print(kEWPT1)); EXPECT_EQ("invalid", Print(static_cast(0))); } // Tests printing a class implicitly convertible to BiggestInt. TEST(PrintClassTest, BiggestIntConvertible) { EXPECT_EQ("42", Print(BiggestIntConvertible())); } // Tests printing various char types. // char. TEST(PrintCharTest, PlainChar) { EXPECT_EQ("'\\0'", Print('\0')); EXPECT_EQ("'\\'' (39, 0x27)", Print('\'')); EXPECT_EQ("'\"' (34, 0x22)", Print('"')); EXPECT_EQ("'?' (63, 0x3F)", Print('?')); EXPECT_EQ("'\\\\' (92, 0x5C)", Print('\\')); EXPECT_EQ("'\\a' (7)", Print('\a')); EXPECT_EQ("'\\b' (8)", Print('\b')); EXPECT_EQ("'\\f' (12, 0xC)", Print('\f')); EXPECT_EQ("'\\n' (10, 0xA)", Print('\n')); EXPECT_EQ("'\\r' (13, 0xD)", Print('\r')); EXPECT_EQ("'\\t' (9)", Print('\t')); EXPECT_EQ("'\\v' (11, 0xB)", Print('\v')); EXPECT_EQ("'\\x7F' (127)", Print('\x7F')); EXPECT_EQ("'\\xFF' (255)", Print('\xFF')); EXPECT_EQ("' ' (32, 0x20)", Print(' ')); EXPECT_EQ("'a' (97, 0x61)", Print('a')); } // signed char. TEST(PrintCharTest, SignedChar) { EXPECT_EQ("'\\0'", Print(static_cast('\0'))); EXPECT_EQ("'\\xCE' (-50)", Print(static_cast(-50))); } // unsigned char. TEST(PrintCharTest, UnsignedChar) { EXPECT_EQ("'\\0'", Print(static_cast('\0'))); EXPECT_EQ("'b' (98, 0x62)", Print(static_cast('b'))); } // Tests printing other simple, built-in types. // bool. TEST(PrintBuiltInTypeTest, Bool) { EXPECT_EQ("false", Print(false)); EXPECT_EQ("true", Print(true)); } // wchar_t. TEST(PrintBuiltInTypeTest, Wchar_t) { EXPECT_EQ("L'\\0'", Print(L'\0')); EXPECT_EQ("L'\\'' (39, 0x27)", Print(L'\'')); EXPECT_EQ("L'\"' (34, 0x22)", Print(L'"')); EXPECT_EQ("L'?' (63, 0x3F)", Print(L'?')); EXPECT_EQ("L'\\\\' (92, 0x5C)", Print(L'\\')); EXPECT_EQ("L'\\a' (7)", Print(L'\a')); EXPECT_EQ("L'\\b' (8)", Print(L'\b')); EXPECT_EQ("L'\\f' (12, 0xC)", Print(L'\f')); EXPECT_EQ("L'\\n' (10, 0xA)", Print(L'\n')); EXPECT_EQ("L'\\r' (13, 0xD)", Print(L'\r')); EXPECT_EQ("L'\\t' (9)", Print(L'\t')); EXPECT_EQ("L'\\v' (11, 0xB)", Print(L'\v')); EXPECT_EQ("L'\\x7F' (127)", Print(L'\x7F')); EXPECT_EQ("L'\\xFF' (255)", Print(L'\xFF')); EXPECT_EQ("L' ' (32, 0x20)", Print(L' ')); EXPECT_EQ("L'a' (97, 0x61)", Print(L'a')); EXPECT_EQ("L'\\x576' (1398)", Print(static_cast(0x576))); EXPECT_EQ("L'\\xC74D' (51021)", Print(static_cast(0xC74D))); } // Test that Int64 provides more storage than wchar_t. TEST(PrintTypeSizeTest, Wchar_t) { EXPECT_LT(sizeof(wchar_t), sizeof(testing::internal::Int64)); } // Various integer types. TEST(PrintBuiltInTypeTest, Integer) { EXPECT_EQ("'\\xFF' (255)", Print(static_cast(255))); // uint8 EXPECT_EQ("'\\x80' (-128)", Print(static_cast(-128))); // int8 EXPECT_EQ("65535", Print(USHRT_MAX)); // uint16 EXPECT_EQ("-32768", Print(SHRT_MIN)); // int16 EXPECT_EQ("4294967295", Print(UINT_MAX)); // uint32 EXPECT_EQ("-2147483648", Print(INT_MIN)); // int32 EXPECT_EQ("18446744073709551615", Print(static_cast(-1))); // uint64 EXPECT_EQ("-9223372036854775808", Print(static_cast(1) << 63)); // int64 } // Size types. TEST(PrintBuiltInTypeTest, Size_t) { EXPECT_EQ("1", Print(sizeof('a'))); // size_t. #if !GTEST_OS_WINDOWS // Windows has no ssize_t type. EXPECT_EQ("-2", Print(static_cast(-2))); // ssize_t. #endif // !GTEST_OS_WINDOWS } // Floating-points. TEST(PrintBuiltInTypeTest, FloatingPoints) { EXPECT_EQ("1.5", Print(1.5f)); // float EXPECT_EQ("-2.5", Print(-2.5)); // double } // Since ::std::stringstream::operator<<(const void *) formats the pointer // output differently with different compilers, we have to create the expected // output first and use it as our expectation. static string PrintPointer(const void *p) { ::std::stringstream expected_result_stream; expected_result_stream << p; return expected_result_stream.str(); } // Tests printing C strings. // const char*. TEST(PrintCStringTest, Const) { const char* p = "World"; EXPECT_EQ(PrintPointer(p) + " pointing to \"World\"", Print(p)); } // char*. TEST(PrintCStringTest, NonConst) { char p[] = "Hi"; EXPECT_EQ(PrintPointer(p) + " pointing to \"Hi\"", Print(static_cast(p))); } // NULL C string. TEST(PrintCStringTest, Null) { const char* p = NULL; EXPECT_EQ("NULL", Print(p)); } // Tests that C strings are escaped properly. TEST(PrintCStringTest, EscapesProperly) { const char* p = "'\"?\\\a\b\f\n\r\t\v\x7F\xFF a"; EXPECT_EQ(PrintPointer(p) + " pointing to \"'\\\"?\\\\\\a\\b\\f" "\\n\\r\\t\\v\\x7F\\xFF a\"", Print(p)); } // MSVC compiler can be configured to define whar_t as a typedef // of unsigned short. Defining an overload for const wchar_t* in that case // would cause pointers to unsigned shorts be printed as wide strings, // possibly accessing more memory than intended and causing invalid // memory accesses. MSVC defines _NATIVE_WCHAR_T_DEFINED symbol when // wchar_t is implemented as a native type. #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) // const wchar_t*. TEST(PrintWideCStringTest, Const) { const wchar_t* p = L"World"; EXPECT_EQ(PrintPointer(p) + " pointing to L\"World\"", Print(p)); } // wchar_t*. TEST(PrintWideCStringTest, NonConst) { wchar_t p[] = L"Hi"; EXPECT_EQ(PrintPointer(p) + " pointing to L\"Hi\"", Print(static_cast(p))); } // NULL wide C string. TEST(PrintWideCStringTest, Null) { const wchar_t* p = NULL; EXPECT_EQ("NULL", Print(p)); } // Tests that wide C strings are escaped properly. TEST(PrintWideCStringTest, EscapesProperly) { const wchar_t s[] = {'\'', '"', '?', '\\', '\a', '\b', '\f', '\n', '\r', '\t', '\v', 0xD3, 0x576, 0x8D3, 0xC74D, ' ', 'a', '\0'}; EXPECT_EQ(PrintPointer(s) + " pointing to L\"'\\\"?\\\\\\a\\b\\f" "\\n\\r\\t\\v\\xD3\\x576\\x8D3\\xC74D a\"", Print(static_cast(s))); } #endif // native wchar_t // Tests printing pointers to other char types. // signed char*. TEST(PrintCharPointerTest, SignedChar) { signed char* p = reinterpret_cast(0x1234); EXPECT_EQ(PrintPointer(p), Print(p)); p = NULL; EXPECT_EQ("NULL", Print(p)); } // const signed char*. TEST(PrintCharPointerTest, ConstSignedChar) { signed char* p = reinterpret_cast(0x1234); EXPECT_EQ(PrintPointer(p), Print(p)); p = NULL; EXPECT_EQ("NULL", Print(p)); } // unsigned char*. TEST(PrintCharPointerTest, UnsignedChar) { unsigned char* p = reinterpret_cast(0x1234); EXPECT_EQ(PrintPointer(p), Print(p)); p = NULL; EXPECT_EQ("NULL", Print(p)); } // const unsigned char*. TEST(PrintCharPointerTest, ConstUnsignedChar) { const unsigned char* p = reinterpret_cast(0x1234); EXPECT_EQ(PrintPointer(p), Print(p)); p = NULL; EXPECT_EQ("NULL", Print(p)); } // Tests printing pointers to simple, built-in types. // bool*. TEST(PrintPointerToBuiltInTypeTest, Bool) { bool* p = reinterpret_cast(0xABCD); EXPECT_EQ(PrintPointer(p), Print(p)); p = NULL; EXPECT_EQ("NULL", Print(p)); } // void*. TEST(PrintPointerToBuiltInTypeTest, Void) { void* p = reinterpret_cast(0xABCD); EXPECT_EQ(PrintPointer(p), Print(p)); p = NULL; EXPECT_EQ("NULL", Print(p)); } // const void*. TEST(PrintPointerToBuiltInTypeTest, ConstVoid) { const void* p = reinterpret_cast(0xABCD); EXPECT_EQ(PrintPointer(p), Print(p)); p = NULL; EXPECT_EQ("NULL", Print(p)); } // Tests printing pointers to pointers. TEST(PrintPointerToPointerTest, IntPointerPointer) { int** p = reinterpret_cast(0xABCD); EXPECT_EQ(PrintPointer(p), Print(p)); p = NULL; EXPECT_EQ("NULL", Print(p)); } // Tests printing (non-member) function pointers. void MyFunction(int /* n */) {} TEST(PrintPointerTest, NonMemberFunctionPointer) { // We cannot directly cast &MyFunction to const void* because the // standard disallows casting between pointers to functions and // pointers to objects, and some compilers (e.g. GCC 3.4) enforce // this limitation. EXPECT_EQ( PrintPointer(reinterpret_cast( reinterpret_cast(&MyFunction))), Print(&MyFunction)); int (*p)(bool) = NULL; // NOLINT EXPECT_EQ("NULL", Print(p)); } // An assertion predicate determining whether a one string is a prefix for // another. template AssertionResult HasPrefix(const StringType& str, const StringType& prefix) { if (str.find(prefix, 0) == 0) return AssertionSuccess(); const bool is_wide_string = sizeof(prefix[0]) > 1; const char* const begin_string_quote = is_wide_string ? "L\"" : "\""; return AssertionFailure() << begin_string_quote << prefix << "\" is not a prefix of " << begin_string_quote << str << "\"\n"; } // Tests printing member variable pointers. Although they are called // pointers, they don't point to a location in the address space. // Their representation is implementation-defined. Thus they will be // printed as raw bytes. struct Foo { public: virtual ~Foo() {} int MyMethod(char x) { return x + 1; } virtual char MyVirtualMethod(int /* n */) { return 'a'; } int value; }; TEST(PrintPointerTest, MemberVariablePointer) { EXPECT_TRUE(HasPrefix(Print(&Foo::value), Print(sizeof(&Foo::value)) + "-byte object ")); int (Foo::*p) = NULL; // NOLINT EXPECT_TRUE(HasPrefix(Print(p), Print(sizeof(p)) + "-byte object ")); } // Tests printing member function pointers. Although they are called // pointers, they don't point to a location in the address space. // Their representation is implementation-defined. Thus they will be // printed as raw bytes. TEST(PrintPointerTest, MemberFunctionPointer) { EXPECT_TRUE(HasPrefix(Print(&Foo::MyMethod), Print(sizeof(&Foo::MyMethod)) + "-byte object ")); EXPECT_TRUE( HasPrefix(Print(&Foo::MyVirtualMethod), Print(sizeof((&Foo::MyVirtualMethod))) + "-byte object ")); int (Foo::*p)(char) = NULL; // NOLINT EXPECT_TRUE(HasPrefix(Print(p), Print(sizeof(p)) + "-byte object ")); } // Tests printing C arrays. // The difference between this and Print() is that it ensures that the // argument is a reference to an array. template string PrintArrayHelper(T (&a)[N]) { return Print(a); } // One-dimensional array. TEST(PrintArrayTest, OneDimensionalArray) { int a[5] = { 1, 2, 3, 4, 5 }; EXPECT_EQ("{ 1, 2, 3, 4, 5 }", PrintArrayHelper(a)); } // Two-dimensional array. TEST(PrintArrayTest, TwoDimensionalArray) { int a[2][5] = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 0 } }; EXPECT_EQ("{ { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 0 } }", PrintArrayHelper(a)); } // Array of const elements. TEST(PrintArrayTest, ConstArray) { const bool a[1] = { false }; EXPECT_EQ("{ false }", PrintArrayHelper(a)); } // char array without terminating NUL. TEST(PrintArrayTest, CharArrayWithNoTerminatingNul) { // Array a contains '\0' in the middle and doesn't end with '\0'. char a[] = { 'H', '\0', 'i' }; EXPECT_EQ("\"H\\0i\" (no terminating NUL)", PrintArrayHelper(a)); } // const char array with terminating NUL. TEST(PrintArrayTest, ConstCharArrayWithTerminatingNul) { const char a[] = "\0Hi"; EXPECT_EQ("\"\\0Hi\"", PrintArrayHelper(a)); } // const wchar_t array without terminating NUL. TEST(PrintArrayTest, WCharArrayWithNoTerminatingNul) { // Array a contains '\0' in the middle and doesn't end with '\0'. const wchar_t a[] = { L'H', L'\0', L'i' }; EXPECT_EQ("L\"H\\0i\" (no terminating NUL)", PrintArrayHelper(a)); } // wchar_t array with terminating NUL. TEST(PrintArrayTest, WConstCharArrayWithTerminatingNul) { const wchar_t a[] = L"\0Hi"; EXPECT_EQ("L\"\\0Hi\"", PrintArrayHelper(a)); } // Array of objects. TEST(PrintArrayTest, ObjectArray) { string a[3] = { "Hi", "Hello", "Ni hao" }; EXPECT_EQ("{ \"Hi\", \"Hello\", \"Ni hao\" }", PrintArrayHelper(a)); } // Array with many elements. TEST(PrintArrayTest, BigArray) { int a[100] = { 1, 2, 3 }; EXPECT_EQ("{ 1, 2, 3, 0, 0, 0, 0, 0, ..., 0, 0, 0, 0, 0, 0, 0, 0 }", PrintArrayHelper(a)); } // Tests printing ::string and ::std::string. #if GTEST_HAS_GLOBAL_STRING // ::string. TEST(PrintStringTest, StringInGlobalNamespace) { const char s[] = "'\"?\\\a\b\f\n\0\r\t\v\x7F\xFF a"; const ::string str(s, sizeof(s)); EXPECT_EQ("\"'\\\"?\\\\\\a\\b\\f\\n\\0\\r\\t\\v\\x7F\\xFF a\\0\"", Print(str)); } #endif // GTEST_HAS_GLOBAL_STRING // ::std::string. TEST(PrintStringTest, StringInStdNamespace) { const char s[] = "'\"?\\\a\b\f\n\0\r\t\v\x7F\xFF a"; const ::std::string str(s, sizeof(s)); EXPECT_EQ("\"'\\\"?\\\\\\a\\b\\f\\n\\0\\r\\t\\v\\x7F\\xFF a\\0\"", Print(str)); } TEST(PrintStringTest, StringAmbiguousHex) { // "\x6BANANA" is ambiguous, it can be interpreted as starting with either of: // '\x6', '\x6B', or '\x6BA'. // a hex escaping sequence following by a decimal digit EXPECT_EQ("\"0\\x12\" \"3\"", Print(::std::string("0\x12" "3"))); // a hex escaping sequence following by a hex digit (lower-case) EXPECT_EQ("\"mm\\x6\" \"bananas\"", Print(::std::string("mm\x6" "bananas"))); // a hex escaping sequence following by a hex digit (upper-case) EXPECT_EQ("\"NOM\\x6\" \"BANANA\"", Print(::std::string("NOM\x6" "BANANA"))); // a hex escaping sequence following by a non-xdigit EXPECT_EQ("\"!\\x5-!\"", Print(::std::string("!\x5-!"))); } // Tests printing ::wstring and ::std::wstring. #if GTEST_HAS_GLOBAL_WSTRING // ::wstring. TEST(PrintWideStringTest, StringInGlobalNamespace) { const wchar_t s[] = L"'\"?\\\a\b\f\n\0\r\t\v\xD3\x576\x8D3\xC74D a"; const ::wstring str(s, sizeof(s)/sizeof(wchar_t)); EXPECT_EQ("L\"'\\\"?\\\\\\a\\b\\f\\n\\0\\r\\t\\v" "\\xD3\\x576\\x8D3\\xC74D a\\0\"", Print(str)); } #endif // GTEST_HAS_GLOBAL_WSTRING #if GTEST_HAS_STD_WSTRING // ::std::wstring. TEST(PrintWideStringTest, StringInStdNamespace) { const wchar_t s[] = L"'\"?\\\a\b\f\n\0\r\t\v\xD3\x576\x8D3\xC74D a"; const ::std::wstring str(s, sizeof(s)/sizeof(wchar_t)); EXPECT_EQ("L\"'\\\"?\\\\\\a\\b\\f\\n\\0\\r\\t\\v" "\\xD3\\x576\\x8D3\\xC74D a\\0\"", Print(str)); } TEST(PrintWideStringTest, StringAmbiguousHex) { // same for wide strings. EXPECT_EQ("L\"0\\x12\" L\"3\"", Print(::std::wstring(L"0\x12" L"3"))); EXPECT_EQ("L\"mm\\x6\" L\"bananas\"", Print(::std::wstring(L"mm\x6" L"bananas"))); EXPECT_EQ("L\"NOM\\x6\" L\"BANANA\"", Print(::std::wstring(L"NOM\x6" L"BANANA"))); EXPECT_EQ("L\"!\\x5-!\"", Print(::std::wstring(L"!\x5-!"))); } #endif // GTEST_HAS_STD_WSTRING // Tests printing types that support generic streaming (i.e. streaming // to std::basic_ostream for any valid Char and // CharTraits types). // Tests printing a non-template type that supports generic streaming. class AllowsGenericStreaming {}; template std::basic_ostream& operator<<( std::basic_ostream& os, const AllowsGenericStreaming& /* a */) { return os << "AllowsGenericStreaming"; } TEST(PrintTypeWithGenericStreamingTest, NonTemplateType) { AllowsGenericStreaming a; EXPECT_EQ("AllowsGenericStreaming", Print(a)); } // Tests printing a template type that supports generic streaming. template class AllowsGenericStreamingTemplate {}; template std::basic_ostream& operator<<( std::basic_ostream& os, const AllowsGenericStreamingTemplate& /* a */) { return os << "AllowsGenericStreamingTemplate"; } TEST(PrintTypeWithGenericStreamingTest, TemplateType) { AllowsGenericStreamingTemplate a; EXPECT_EQ("AllowsGenericStreamingTemplate", Print(a)); } // Tests printing a type that supports generic streaming and can be // implicitly converted to another printable type. template class AllowsGenericStreamingAndImplicitConversionTemplate { public: operator bool() const { return false; } }; template std::basic_ostream& operator<<( std::basic_ostream& os, const AllowsGenericStreamingAndImplicitConversionTemplate& /* a */) { return os << "AllowsGenericStreamingAndImplicitConversionTemplate"; } TEST(PrintTypeWithGenericStreamingTest, TypeImplicitlyConvertible) { AllowsGenericStreamingAndImplicitConversionTemplate a; EXPECT_EQ("AllowsGenericStreamingAndImplicitConversionTemplate", Print(a)); } #if GTEST_HAS_STRING_PIECE_ // Tests printing StringPiece. TEST(PrintStringPieceTest, SimpleStringPiece) { const StringPiece sp = "Hello"; EXPECT_EQ("\"Hello\"", Print(sp)); } TEST(PrintStringPieceTest, UnprintableCharacters) { const char str[] = "NUL (\0) and \r\t"; const StringPiece sp(str, sizeof(str) - 1); EXPECT_EQ("\"NUL (\\0) and \\r\\t\"", Print(sp)); } #endif // GTEST_HAS_STRING_PIECE_ // Tests printing STL containers. TEST(PrintStlContainerTest, EmptyDeque) { deque empty; EXPECT_EQ("{}", Print(empty)); } TEST(PrintStlContainerTest, NonEmptyDeque) { deque non_empty; non_empty.push_back(1); non_empty.push_back(3); EXPECT_EQ("{ 1, 3 }", Print(non_empty)); } #if GTEST_HAS_HASH_MAP_ TEST(PrintStlContainerTest, OneElementHashMap) { hash_map map1; map1[1] = 'a'; EXPECT_EQ("{ (1, 'a' (97, 0x61)) }", Print(map1)); } TEST(PrintStlContainerTest, HashMultiMap) { hash_multimap map1; map1.insert(make_pair(5, true)); map1.insert(make_pair(5, false)); // Elements of hash_multimap can be printed in any order. const string result = Print(map1); EXPECT_TRUE(result == "{ (5, true), (5, false) }" || result == "{ (5, false), (5, true) }") << " where Print(map1) returns \"" << result << "\"."; } #endif // GTEST_HAS_HASH_MAP_ #if GTEST_HAS_HASH_SET_ TEST(PrintStlContainerTest, HashSet) { hash_set set1; set1.insert("hello"); EXPECT_EQ("{ \"hello\" }", Print(set1)); } TEST(PrintStlContainerTest, HashMultiSet) { const int kSize = 5; int a[kSize] = { 1, 1, 2, 5, 1 }; hash_multiset set1(a, a + kSize); // Elements of hash_multiset can be printed in any order. const string result = Print(set1); const string expected_pattern = "{ d, d, d, d, d }"; // d means a digit. // Verifies the result matches the expected pattern; also extracts // the numbers in the result. ASSERT_EQ(expected_pattern.length(), result.length()); std::vector numbers; for (size_t i = 0; i != result.length(); i++) { if (expected_pattern[i] == 'd') { ASSERT_NE(isdigit(static_cast(result[i])), 0); numbers.push_back(result[i] - '0'); } else { EXPECT_EQ(expected_pattern[i], result[i]) << " where result is " << result; } } // Makes sure the result contains the right numbers. std::sort(numbers.begin(), numbers.end()); std::sort(a, a + kSize); EXPECT_TRUE(std::equal(a, a + kSize, numbers.begin())); } #endif // GTEST_HAS_HASH_SET_ TEST(PrintStlContainerTest, List) { const string a[] = { "hello", "world" }; const list strings(a, a + 2); EXPECT_EQ("{ \"hello\", \"world\" }", Print(strings)); } TEST(PrintStlContainerTest, Map) { map map1; map1[1] = true; map1[5] = false; map1[3] = true; EXPECT_EQ("{ (1, true), (3, true), (5, false) }", Print(map1)); } TEST(PrintStlContainerTest, MultiMap) { multimap map1; // The make_pair template function would deduce the type as // pair here, and since the key part in a multimap has to // be constant, without a templated ctor in the pair class (as in // libCstd on Solaris), make_pair call would fail to compile as no // implicit conversion is found. Thus explicit typename is used // here instead. map1.insert(pair(true, 0)); map1.insert(pair(true, 1)); map1.insert(pair(false, 2)); EXPECT_EQ("{ (false, 2), (true, 0), (true, 1) }", Print(map1)); } TEST(PrintStlContainerTest, Set) { const unsigned int a[] = { 3, 0, 5 }; set set1(a, a + 3); EXPECT_EQ("{ 0, 3, 5 }", Print(set1)); } TEST(PrintStlContainerTest, MultiSet) { const int a[] = { 1, 1, 2, 5, 1 }; multiset set1(a, a + 5); EXPECT_EQ("{ 1, 1, 1, 2, 5 }", Print(set1)); } TEST(PrintStlContainerTest, Pair) { pair p(true, 5); EXPECT_EQ("(true, 5)", Print(p)); } TEST(PrintStlContainerTest, Vector) { vector v; v.push_back(1); v.push_back(2); EXPECT_EQ("{ 1, 2 }", Print(v)); } TEST(PrintStlContainerTest, LongSequence) { const int a[100] = { 1, 2, 3 }; const vector v(a, a + 100); EXPECT_EQ("{ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, " "0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... }", Print(v)); } TEST(PrintStlContainerTest, NestedContainer) { const int a1[] = { 1, 2 }; const int a2[] = { 3, 4, 5 }; const list l1(a1, a1 + 2); const list l2(a2, a2 + 3); vector > v; v.push_back(l1); v.push_back(l2); EXPECT_EQ("{ { 1, 2 }, { 3, 4, 5 } }", Print(v)); } TEST(PrintStlContainerTest, OneDimensionalNativeArray) { const int a[3] = { 1, 2, 3 }; NativeArray b(a, 3, kReference); EXPECT_EQ("{ 1, 2, 3 }", Print(b)); } TEST(PrintStlContainerTest, TwoDimensionalNativeArray) { const int a[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; NativeArray b(a, 2, kReference); EXPECT_EQ("{ { 1, 2, 3 }, { 4, 5, 6 } }", Print(b)); } // Tests that a class named iterator isn't treated as a container. struct iterator { char x; }; TEST(PrintStlContainerTest, Iterator) { iterator it = {}; EXPECT_EQ("1-byte object <00>", Print(it)); } // Tests that a class named const_iterator isn't treated as a container. struct const_iterator { char x; }; TEST(PrintStlContainerTest, ConstIterator) { const_iterator it = {}; EXPECT_EQ("1-byte object <00>", Print(it)); } #if GTEST_HAS_TR1_TUPLE // Tests printing tuples. // Tuples of various arities. TEST(PrintTupleTest, VariousSizes) { tuple<> t0; EXPECT_EQ("()", Print(t0)); tuple t1(5); EXPECT_EQ("(5)", Print(t1)); tuple t2('a', true); EXPECT_EQ("('a' (97, 0x61), true)", Print(t2)); tuple t3(false, 2, 3); EXPECT_EQ("(false, 2, 3)", Print(t3)); tuple t4(false, 2, 3, 4); EXPECT_EQ("(false, 2, 3, 4)", Print(t4)); tuple t5(false, 2, 3, 4, true); EXPECT_EQ("(false, 2, 3, 4, true)", Print(t5)); tuple t6(false, 2, 3, 4, true, 6); EXPECT_EQ("(false, 2, 3, 4, true, 6)", Print(t6)); tuple t7(false, 2, 3, 4, true, 6, 7); EXPECT_EQ("(false, 2, 3, 4, true, 6, 7)", Print(t7)); tuple t8( false, 2, 3, 4, true, 6, 7, true); EXPECT_EQ("(false, 2, 3, 4, true, 6, 7, true)", Print(t8)); tuple t9( false, 2, 3, 4, true, 6, 7, true, 9); EXPECT_EQ("(false, 2, 3, 4, true, 6, 7, true, 9)", Print(t9)); const char* const str = "8"; // VC++ 2010's implementation of tuple of C++0x is deficient, requiring // an explicit type cast of NULL to be used. tuple t10(false, 'a', 3, 4, 5, 1.5F, -2.5, str, ImplicitCast_(NULL), "10"); EXPECT_EQ("(false, 'a' (97, 0x61), 3, 4, 5, 1.5, -2.5, " + PrintPointer(str) + " pointing to \"8\", NULL, \"10\")", Print(t10)); } // Nested tuples. TEST(PrintTupleTest, NestedTuple) { tuple, char> nested(make_tuple(5, true), 'a'); EXPECT_EQ("((5, true), 'a' (97, 0x61))", Print(nested)); } #endif // GTEST_HAS_TR1_TUPLE // Tests printing user-defined unprintable types. // Unprintable types in the global namespace. TEST(PrintUnprintableTypeTest, InGlobalNamespace) { EXPECT_EQ("1-byte object <00>", Print(UnprintableTemplateInGlobal())); } // Unprintable types in a user namespace. TEST(PrintUnprintableTypeTest, InUserNamespace) { EXPECT_EQ("16-byte object ", Print(::foo::UnprintableInFoo())); } // Unprintable types are that too big to be printed completely. struct Big { Big() { memset(array, 0, sizeof(array)); } char array[257]; }; TEST(PrintUnpritableTypeTest, BigObject) { EXPECT_EQ("257-byte object <00-00 00-00 00-00 00-00 00-00 00-00 " "00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 " "00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 " "00-00 00-00 00-00 00-00 00-00 00-00 ... 00-00 00-00 00-00 " "00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 " "00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 " "00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00>", Print(Big())); } // Tests printing user-defined streamable types. // Streamable types in the global namespace. TEST(PrintStreamableTypeTest, InGlobalNamespace) { StreamableInGlobal x; EXPECT_EQ("StreamableInGlobal", Print(x)); EXPECT_EQ("StreamableInGlobal*", Print(&x)); } // Printable template types in a user namespace. TEST(PrintStreamableTypeTest, TemplateTypeInUserNamespace) { EXPECT_EQ("StreamableTemplateInFoo: 0", Print(::foo::StreamableTemplateInFoo())); } // Tests printing user-defined types that have a PrintTo() function. TEST(PrintPrintableTypeTest, InUserNamespace) { EXPECT_EQ("PrintableViaPrintTo: 0", Print(::foo::PrintableViaPrintTo())); } // Tests printing a pointer to a user-defined type that has a << // operator for its pointer. TEST(PrintPrintableTypeTest, PointerInUserNamespace) { ::foo::PointerPrintable x; EXPECT_EQ("PointerPrintable*", Print(&x)); } // Tests printing user-defined class template that have a PrintTo() function. TEST(PrintPrintableTypeTest, TemplateInUserNamespace) { EXPECT_EQ("PrintableViaPrintToTemplate: 5", Print(::foo::PrintableViaPrintToTemplate(5))); } #if GTEST_HAS_PROTOBUF_ // Tests printing a protocol message. TEST(PrintProtocolMessageTest, PrintsShortDebugString) { testing::internal::TestMessage msg; msg.set_member("yes"); EXPECT_EQ("", Print(msg)); } // Tests printing a short proto2 message. TEST(PrintProto2MessageTest, PrintsShortDebugStringWhenItIsShort) { testing::internal::FooMessage msg; msg.set_int_field(2); msg.set_string_field("hello"); EXPECT_PRED2(RE::FullMatch, Print(msg), ""); } // Tests printing a long proto2 message. TEST(PrintProto2MessageTest, PrintsDebugStringWhenItIsLong) { testing::internal::FooMessage msg; msg.set_int_field(2); msg.set_string_field("hello"); msg.add_names("peter"); msg.add_names("paul"); msg.add_names("mary"); EXPECT_PRED2(RE::FullMatch, Print(msg), "<\n" "int_field:\\s*2\n" "string_field:\\s*\"hello\"\n" "names:\\s*\"peter\"\n" "names:\\s*\"paul\"\n" "names:\\s*\"mary\"\n" ">"); } #endif // GTEST_HAS_PROTOBUF_ // Tests that the universal printer prints both the address and the // value of a reference. TEST(PrintReferenceTest, PrintsAddressAndValue) { int n = 5; EXPECT_EQ("@" + PrintPointer(&n) + " 5", PrintByRef(n)); int a[2][3] = { { 0, 1, 2 }, { 3, 4, 5 } }; EXPECT_EQ("@" + PrintPointer(a) + " { { 0, 1, 2 }, { 3, 4, 5 } }", PrintByRef(a)); const ::foo::UnprintableInFoo x; EXPECT_EQ("@" + PrintPointer(&x) + " 16-byte object " "", PrintByRef(x)); } // Tests that the universal printer prints a function pointer passed by // reference. TEST(PrintReferenceTest, HandlesFunctionPointer) { void (*fp)(int n) = &MyFunction; const string fp_pointer_string = PrintPointer(reinterpret_cast(&fp)); // We cannot directly cast &MyFunction to const void* because the // standard disallows casting between pointers to functions and // pointers to objects, and some compilers (e.g. GCC 3.4) enforce // this limitation. const string fp_string = PrintPointer(reinterpret_cast( reinterpret_cast(fp))); EXPECT_EQ("@" + fp_pointer_string + " " + fp_string, PrintByRef(fp)); } // Tests that the universal printer prints a member function pointer // passed by reference. TEST(PrintReferenceTest, HandlesMemberFunctionPointer) { int (Foo::*p)(char ch) = &Foo::MyMethod; EXPECT_TRUE(HasPrefix( PrintByRef(p), "@" + PrintPointer(reinterpret_cast(&p)) + " " + Print(sizeof(p)) + "-byte object ")); char (Foo::*p2)(int n) = &Foo::MyVirtualMethod; EXPECT_TRUE(HasPrefix( PrintByRef(p2), "@" + PrintPointer(reinterpret_cast(&p2)) + " " + Print(sizeof(p2)) + "-byte object ")); } // Tests that the universal printer prints a member variable pointer // passed by reference. TEST(PrintReferenceTest, HandlesMemberVariablePointer) { int (Foo::*p) = &Foo::value; // NOLINT EXPECT_TRUE(HasPrefix( PrintByRef(p), "@" + PrintPointer(&p) + " " + Print(sizeof(p)) + "-byte object ")); } // Tests that FormatForComparisonFailureMessage(), which is used to print // an operand in a comparison assertion (e.g. ASSERT_EQ) when the assertion // fails, formats the operand in the desired way. // scalar TEST(FormatForComparisonFailureMessageTest, WorksForScalar) { EXPECT_STREQ("123", FormatForComparisonFailureMessage(123, 124).c_str()); } // non-char pointer TEST(FormatForComparisonFailureMessageTest, WorksForNonCharPointer) { int n = 0; EXPECT_EQ(PrintPointer(&n), FormatForComparisonFailureMessage(&n, &n).c_str()); } // non-char array TEST(FormatForComparisonFailureMessageTest, FormatsNonCharArrayAsPointer) { // In expression 'array == x', 'array' is compared by pointer. // Therefore we want to print an array operand as a pointer. int n[] = { 1, 2, 3 }; EXPECT_EQ(PrintPointer(n), FormatForComparisonFailureMessage(n, n).c_str()); } // Tests formatting a char pointer when it's compared with another pointer. // In this case we want to print it as a raw pointer, as the comparision is by // pointer. // char pointer vs pointer TEST(FormatForComparisonFailureMessageTest, WorksForCharPointerVsPointer) { // In expression 'p == x', where 'p' and 'x' are (const or not) char // pointers, the operands are compared by pointer. Therefore we // want to print 'p' as a pointer instead of a C string (we don't // even know if it's supposed to point to a valid C string). // const char* const char* s = "hello"; EXPECT_EQ(PrintPointer(s), FormatForComparisonFailureMessage(s, s).c_str()); // char* char ch = 'a'; EXPECT_EQ(PrintPointer(&ch), FormatForComparisonFailureMessage(&ch, &ch).c_str()); } // wchar_t pointer vs pointer TEST(FormatForComparisonFailureMessageTest, WorksForWCharPointerVsPointer) { // In expression 'p == x', where 'p' and 'x' are (const or not) char // pointers, the operands are compared by pointer. Therefore we // want to print 'p' as a pointer instead of a wide C string (we don't // even know if it's supposed to point to a valid wide C string). // const wchar_t* const wchar_t* s = L"hello"; EXPECT_EQ(PrintPointer(s), FormatForComparisonFailureMessage(s, s).c_str()); // wchar_t* wchar_t ch = L'a'; EXPECT_EQ(PrintPointer(&ch), FormatForComparisonFailureMessage(&ch, &ch).c_str()); } // Tests formatting a char pointer when it's compared to a string object. // In this case we want to print the char pointer as a C string. #if GTEST_HAS_GLOBAL_STRING // char pointer vs ::string TEST(FormatForComparisonFailureMessageTest, WorksForCharPointerVsString) { const char* s = "hello \"world"; EXPECT_STREQ("\"hello \\\"world\"", // The string content should be escaped. FormatForComparisonFailureMessage(s, ::string()).c_str()); // char* char str[] = "hi\1"; char* p = str; EXPECT_STREQ("\"hi\\x1\"", // The string content should be escaped. FormatForComparisonFailureMessage(p, ::string()).c_str()); } #endif // char pointer vs std::string TEST(FormatForComparisonFailureMessageTest, WorksForCharPointerVsStdString) { const char* s = "hello \"world"; EXPECT_STREQ("\"hello \\\"world\"", // The string content should be escaped. FormatForComparisonFailureMessage(s, ::std::string()).c_str()); // char* char str[] = "hi\1"; char* p = str; EXPECT_STREQ("\"hi\\x1\"", // The string content should be escaped. FormatForComparisonFailureMessage(p, ::std::string()).c_str()); } #if GTEST_HAS_GLOBAL_WSTRING // wchar_t pointer vs ::wstring TEST(FormatForComparisonFailureMessageTest, WorksForWCharPointerVsWString) { const wchar_t* s = L"hi \"world"; EXPECT_STREQ("L\"hi \\\"world\"", // The string content should be escaped. FormatForComparisonFailureMessage(s, ::wstring()).c_str()); // wchar_t* wchar_t str[] = L"hi\1"; wchar_t* p = str; EXPECT_STREQ("L\"hi\\x1\"", // The string content should be escaped. FormatForComparisonFailureMessage(p, ::wstring()).c_str()); } #endif #if GTEST_HAS_STD_WSTRING // wchar_t pointer vs std::wstring TEST(FormatForComparisonFailureMessageTest, WorksForWCharPointerVsStdWString) { const wchar_t* s = L"hi \"world"; EXPECT_STREQ("L\"hi \\\"world\"", // The string content should be escaped. FormatForComparisonFailureMessage(s, ::std::wstring()).c_str()); // wchar_t* wchar_t str[] = L"hi\1"; wchar_t* p = str; EXPECT_STREQ("L\"hi\\x1\"", // The string content should be escaped. FormatForComparisonFailureMessage(p, ::std::wstring()).c_str()); } #endif // Tests formatting a char array when it's compared with a pointer or array. // In this case we want to print the array as a row pointer, as the comparison // is by pointer. // char array vs pointer TEST(FormatForComparisonFailureMessageTest, WorksForCharArrayVsPointer) { char str[] = "hi \"world\""; char* p = NULL; EXPECT_EQ(PrintPointer(str), FormatForComparisonFailureMessage(str, p).c_str()); } // char array vs char array TEST(FormatForComparisonFailureMessageTest, WorksForCharArrayVsCharArray) { const char str[] = "hi \"world\""; EXPECT_EQ(PrintPointer(str), FormatForComparisonFailureMessage(str, str).c_str()); } // wchar_t array vs pointer TEST(FormatForComparisonFailureMessageTest, WorksForWCharArrayVsPointer) { wchar_t str[] = L"hi \"world\""; wchar_t* p = NULL; EXPECT_EQ(PrintPointer(str), FormatForComparisonFailureMessage(str, p).c_str()); } // wchar_t array vs wchar_t array TEST(FormatForComparisonFailureMessageTest, WorksForWCharArrayVsWCharArray) { const wchar_t str[] = L"hi \"world\""; EXPECT_EQ(PrintPointer(str), FormatForComparisonFailureMessage(str, str).c_str()); } // Tests formatting a char array when it's compared with a string object. // In this case we want to print the array as a C string. #if GTEST_HAS_GLOBAL_STRING // char array vs string TEST(FormatForComparisonFailureMessageTest, WorksForCharArrayVsString) { const char str[] = "hi \"w\0rld\""; EXPECT_STREQ("\"hi \\\"w\"", // The content should be escaped. // Embedded NUL terminates the string. FormatForComparisonFailureMessage(str, ::string()).c_str()); } #endif // char array vs std::string TEST(FormatForComparisonFailureMessageTest, WorksForCharArrayVsStdString) { const char str[] = "hi \"world\""; EXPECT_STREQ("\"hi \\\"world\\\"\"", // The content should be escaped. FormatForComparisonFailureMessage(str, ::std::string()).c_str()); } #if GTEST_HAS_GLOBAL_WSTRING // wchar_t array vs wstring TEST(FormatForComparisonFailureMessageTest, WorksForWCharArrayVsWString) { const wchar_t str[] = L"hi \"world\""; EXPECT_STREQ("L\"hi \\\"world\\\"\"", // The content should be escaped. FormatForComparisonFailureMessage(str, ::wstring()).c_str()); } #endif #if GTEST_HAS_STD_WSTRING // wchar_t array vs std::wstring TEST(FormatForComparisonFailureMessageTest, WorksForWCharArrayVsStdWString) { const wchar_t str[] = L"hi \"w\0rld\""; EXPECT_STREQ( "L\"hi \\\"w\"", // The content should be escaped. // Embedded NUL terminates the string. FormatForComparisonFailureMessage(str, ::std::wstring()).c_str()); } #endif // Useful for testing PrintToString(). We cannot use EXPECT_EQ() // there as its implementation uses PrintToString(). The caller must // ensure that 'value' has no side effect. #define EXPECT_PRINT_TO_STRING_(value, expected_string) \ EXPECT_TRUE(PrintToString(value) == (expected_string)) \ << " where " #value " prints as " << (PrintToString(value)) TEST(PrintToStringTest, WorksForScalar) { EXPECT_PRINT_TO_STRING_(123, "123"); } TEST(PrintToStringTest, WorksForPointerToConstChar) { const char* p = "hello"; EXPECT_PRINT_TO_STRING_(p, "\"hello\""); } TEST(PrintToStringTest, WorksForPointerToNonConstChar) { char s[] = "hello"; char* p = s; EXPECT_PRINT_TO_STRING_(p, "\"hello\""); } TEST(PrintToStringTest, EscapesForPointerToConstChar) { const char* p = "hello\n"; EXPECT_PRINT_TO_STRING_(p, "\"hello\\n\""); } TEST(PrintToStringTest, EscapesForPointerToNonConstChar) { char s[] = "hello\1"; char* p = s; EXPECT_PRINT_TO_STRING_(p, "\"hello\\x1\""); } TEST(PrintToStringTest, WorksForArray) { int n[3] = { 1, 2, 3 }; EXPECT_PRINT_TO_STRING_(n, "{ 1, 2, 3 }"); } TEST(PrintToStringTest, WorksForCharArray) { char s[] = "hello"; EXPECT_PRINT_TO_STRING_(s, "\"hello\""); } TEST(PrintToStringTest, WorksForCharArrayWithEmbeddedNul) { const char str_with_nul[] = "hello\0 world"; EXPECT_PRINT_TO_STRING_(str_with_nul, "\"hello\\0 world\""); char mutable_str_with_nul[] = "hello\0 world"; EXPECT_PRINT_TO_STRING_(mutable_str_with_nul, "\"hello\\0 world\""); } #undef EXPECT_PRINT_TO_STRING_ TEST(UniversalTersePrintTest, WorksForNonReference) { ::std::stringstream ss; UniversalTersePrint(123, &ss); EXPECT_EQ("123", ss.str()); } TEST(UniversalTersePrintTest, WorksForReference) { const int& n = 123; ::std::stringstream ss; UniversalTersePrint(n, &ss); EXPECT_EQ("123", ss.str()); } TEST(UniversalTersePrintTest, WorksForCString) { const char* s1 = "abc"; ::std::stringstream ss1; UniversalTersePrint(s1, &ss1); EXPECT_EQ("\"abc\"", ss1.str()); char* s2 = const_cast(s1); ::std::stringstream ss2; UniversalTersePrint(s2, &ss2); EXPECT_EQ("\"abc\"", ss2.str()); const char* s3 = NULL; ::std::stringstream ss3; UniversalTersePrint(s3, &ss3); EXPECT_EQ("NULL", ss3.str()); } TEST(UniversalPrintTest, WorksForNonReference) { ::std::stringstream ss; UniversalPrint(123, &ss); EXPECT_EQ("123", ss.str()); } TEST(UniversalPrintTest, WorksForReference) { const int& n = 123; ::std::stringstream ss; UniversalPrint(n, &ss); EXPECT_EQ("123", ss.str()); } TEST(UniversalPrintTest, WorksForCString) { const char* s1 = "abc"; ::std::stringstream ss1; UniversalPrint(s1, &ss1); EXPECT_EQ(PrintPointer(s1) + " pointing to \"abc\"", string(ss1.str())); char* s2 = const_cast(s1); ::std::stringstream ss2; UniversalPrint(s2, &ss2); EXPECT_EQ(PrintPointer(s2) + " pointing to \"abc\"", string(ss2.str())); const char* s3 = NULL; ::std::stringstream ss3; UniversalPrint(s3, &ss3); EXPECT_EQ("NULL", ss3.str()); } TEST(UniversalPrintTest, WorksForCharArray) { const char str[] = "\"Line\0 1\"\nLine 2"; ::std::stringstream ss1; UniversalPrint(str, &ss1); EXPECT_EQ("\"\\\"Line\\0 1\\\"\\nLine 2\"", ss1.str()); const char mutable_str[] = "\"Line\0 1\"\nLine 2"; ::std::stringstream ss2; UniversalPrint(mutable_str, &ss2); EXPECT_EQ("\"\\\"Line\\0 1\\\"\\nLine 2\"", ss2.str()); } #if GTEST_HAS_TR1_TUPLE TEST(UniversalTersePrintTupleFieldsToStringsTest, PrintsEmptyTuple) { Strings result = UniversalTersePrintTupleFieldsToStrings(make_tuple()); EXPECT_EQ(0u, result.size()); } TEST(UniversalTersePrintTupleFieldsToStringsTest, PrintsOneTuple) { Strings result = UniversalTersePrintTupleFieldsToStrings(make_tuple(1)); ASSERT_EQ(1u, result.size()); EXPECT_EQ("1", result[0]); } TEST(UniversalTersePrintTupleFieldsToStringsTest, PrintsTwoTuple) { Strings result = UniversalTersePrintTupleFieldsToStrings(make_tuple(1, 'a')); ASSERT_EQ(2u, result.size()); EXPECT_EQ("1", result[0]); EXPECT_EQ("'a' (97, 0x61)", result[1]); } TEST(UniversalTersePrintTupleFieldsToStringsTest, PrintsTersely) { const int n = 1; Strings result = UniversalTersePrintTupleFieldsToStrings( tuple(n, "a")); ASSERT_EQ(2u, result.size()); EXPECT_EQ("1", result[0]); EXPECT_EQ("\"a\"", result[1]); } #endif // GTEST_HAS_TR1_TUPLE } // namespace gtest_printers_test } // namespace testing dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-test-part_test.cc000066400000000000000000000161621377520261000230300ustar00rootroot00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: mheule@google.com (Markus Heule) // #include "gtest/gtest-test-part.h" #include "gtest/gtest.h" using testing::Message; using testing::Test; using testing::TestPartResult; using testing::TestPartResultArray; namespace { // Tests the TestPartResult class. // The test fixture for testing TestPartResult. class TestPartResultTest : public Test { protected: TestPartResultTest() : r1_(TestPartResult::kSuccess, "foo/bar.cc", 10, "Success!"), r2_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure!"), r3_(TestPartResult::kFatalFailure, NULL, -1, "Failure!") {} TestPartResult r1_, r2_, r3_; }; TEST_F(TestPartResultTest, ConstructorWorks) { Message message; message << "something is terribly wrong"; message << static_cast(testing::internal::kStackTraceMarker); message << "some unimportant stack trace"; const TestPartResult result(TestPartResult::kNonFatalFailure, "some_file.cc", 42, message.GetString().c_str()); EXPECT_EQ(TestPartResult::kNonFatalFailure, result.type()); EXPECT_STREQ("some_file.cc", result.file_name()); EXPECT_EQ(42, result.line_number()); EXPECT_STREQ(message.GetString().c_str(), result.message()); EXPECT_STREQ("something is terribly wrong", result.summary()); } TEST_F(TestPartResultTest, ResultAccessorsWork) { const TestPartResult success(TestPartResult::kSuccess, "file.cc", 42, "message"); EXPECT_TRUE(success.passed()); EXPECT_FALSE(success.failed()); EXPECT_FALSE(success.nonfatally_failed()); EXPECT_FALSE(success.fatally_failed()); const TestPartResult nonfatal_failure(TestPartResult::kNonFatalFailure, "file.cc", 42, "message"); EXPECT_FALSE(nonfatal_failure.passed()); EXPECT_TRUE(nonfatal_failure.failed()); EXPECT_TRUE(nonfatal_failure.nonfatally_failed()); EXPECT_FALSE(nonfatal_failure.fatally_failed()); const TestPartResult fatal_failure(TestPartResult::kFatalFailure, "file.cc", 42, "message"); EXPECT_FALSE(fatal_failure.passed()); EXPECT_TRUE(fatal_failure.failed()); EXPECT_FALSE(fatal_failure.nonfatally_failed()); EXPECT_TRUE(fatal_failure.fatally_failed()); } // Tests TestPartResult::type(). TEST_F(TestPartResultTest, type) { EXPECT_EQ(TestPartResult::kSuccess, r1_.type()); EXPECT_EQ(TestPartResult::kNonFatalFailure, r2_.type()); EXPECT_EQ(TestPartResult::kFatalFailure, r3_.type()); } // Tests TestPartResult::file_name(). TEST_F(TestPartResultTest, file_name) { EXPECT_STREQ("foo/bar.cc", r1_.file_name()); EXPECT_STREQ(NULL, r3_.file_name()); } // Tests TestPartResult::line_number(). TEST_F(TestPartResultTest, line_number) { EXPECT_EQ(10, r1_.line_number()); EXPECT_EQ(-1, r2_.line_number()); } // Tests TestPartResult::message(). TEST_F(TestPartResultTest, message) { EXPECT_STREQ("Success!", r1_.message()); } // Tests TestPartResult::passed(). TEST_F(TestPartResultTest, Passed) { EXPECT_TRUE(r1_.passed()); EXPECT_FALSE(r2_.passed()); EXPECT_FALSE(r3_.passed()); } // Tests TestPartResult::failed(). TEST_F(TestPartResultTest, Failed) { EXPECT_FALSE(r1_.failed()); EXPECT_TRUE(r2_.failed()); EXPECT_TRUE(r3_.failed()); } // Tests TestPartResult::fatally_failed(). TEST_F(TestPartResultTest, FatallyFailed) { EXPECT_FALSE(r1_.fatally_failed()); EXPECT_FALSE(r2_.fatally_failed()); EXPECT_TRUE(r3_.fatally_failed()); } // Tests TestPartResult::nonfatally_failed(). TEST_F(TestPartResultTest, NonfatallyFailed) { EXPECT_FALSE(r1_.nonfatally_failed()); EXPECT_TRUE(r2_.nonfatally_failed()); EXPECT_FALSE(r3_.nonfatally_failed()); } // Tests the TestPartResultArray class. class TestPartResultArrayTest : public Test { protected: TestPartResultArrayTest() : r1_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure 1"), r2_(TestPartResult::kFatalFailure, "foo/bar.cc", -1, "Failure 2") {} const TestPartResult r1_, r2_; }; // Tests that TestPartResultArray initially has size 0. TEST_F(TestPartResultArrayTest, InitialSizeIsZero) { TestPartResultArray results; EXPECT_EQ(0, results.size()); } // Tests that TestPartResultArray contains the given TestPartResult // after one Append() operation. TEST_F(TestPartResultArrayTest, ContainsGivenResultAfterAppend) { TestPartResultArray results; results.Append(r1_); EXPECT_EQ(1, results.size()); EXPECT_STREQ("Failure 1", results.GetTestPartResult(0).message()); } // Tests that TestPartResultArray contains the given TestPartResults // after two Append() operations. TEST_F(TestPartResultArrayTest, ContainsGivenResultsAfterTwoAppends) { TestPartResultArray results; results.Append(r1_); results.Append(r2_); EXPECT_EQ(2, results.size()); EXPECT_STREQ("Failure 1", results.GetTestPartResult(0).message()); EXPECT_STREQ("Failure 2", results.GetTestPartResult(1).message()); } typedef TestPartResultArrayTest TestPartResultArrayDeathTest; // Tests that the program dies when GetTestPartResult() is called with // an invalid index. TEST_F(TestPartResultArrayDeathTest, DiesWhenIndexIsOutOfBound) { TestPartResultArray results; results.Append(r1_); EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(-1), ""); EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(1), ""); } // TODO(mheule@google.com): Add a test for the class HasNewFatalFailureHelper. } // namespace dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-tuple_test.cc000066400000000000000000000220421377520261000222300ustar00rootroot00000000000000// Copyright 2007, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #include "gtest/internal/gtest-tuple.h" #include #include "gtest/gtest.h" namespace { using ::std::tr1::get; using ::std::tr1::make_tuple; using ::std::tr1::tuple; using ::std::tr1::tuple_element; using ::std::tr1::tuple_size; using ::testing::StaticAssertTypeEq; // Tests that tuple_element >::type returns TK. TEST(tuple_element_Test, ReturnsElementType) { StaticAssertTypeEq >::type>(); StaticAssertTypeEq >::type>(); StaticAssertTypeEq >::type>(); } // Tests that tuple_size::value gives the number of fields in tuple // type T. TEST(tuple_size_Test, ReturnsNumberOfFields) { EXPECT_EQ(0, +tuple_size >::value); EXPECT_EQ(1, +tuple_size >::value); EXPECT_EQ(1, +tuple_size >::value); EXPECT_EQ(1, +(tuple_size > >::value)); EXPECT_EQ(2, +(tuple_size >::value)); EXPECT_EQ(3, +(tuple_size >::value)); } // Tests comparing a tuple with itself. TEST(ComparisonTest, ComparesWithSelf) { const tuple a(5, 'a', false); EXPECT_TRUE(a == a); EXPECT_FALSE(a != a); } // Tests comparing two tuples with the same value. TEST(ComparisonTest, ComparesEqualTuples) { const tuple a(5, true), b(5, true); EXPECT_TRUE(a == b); EXPECT_FALSE(a != b); } // Tests comparing two different tuples that have no reference fields. TEST(ComparisonTest, ComparesUnequalTuplesWithoutReferenceFields) { typedef tuple FooTuple; const FooTuple a(0, 'x'); const FooTuple b(1, 'a'); EXPECT_TRUE(a != b); EXPECT_FALSE(a == b); const FooTuple c(1, 'b'); EXPECT_TRUE(b != c); EXPECT_FALSE(b == c); } // Tests comparing two different tuples that have reference fields. TEST(ComparisonTest, ComparesUnequalTuplesWithReferenceFields) { typedef tuple FooTuple; int i = 5; const char ch = 'a'; const FooTuple a(i, ch); int j = 6; const FooTuple b(j, ch); EXPECT_TRUE(a != b); EXPECT_FALSE(a == b); j = 5; const char ch2 = 'b'; const FooTuple c(j, ch2); EXPECT_TRUE(b != c); EXPECT_FALSE(b == c); } // Tests that a tuple field with a reference type is an alias of the // variable it's supposed to reference. TEST(ReferenceFieldTest, IsAliasOfReferencedVariable) { int n = 0; tuple t(true, n); n = 1; EXPECT_EQ(n, get<1>(t)) << "Changing a underlying variable should update the reference field."; // Makes sure that the implementation doesn't do anything funny with // the & operator for the return type of get<>(). EXPECT_EQ(&n, &(get<1>(t))) << "The address of a reference field should equal the address of " << "the underlying variable."; get<1>(t) = 2; EXPECT_EQ(2, n) << "Changing a reference field should update the underlying variable."; } // Tests that tuple's default constructor default initializes each field. // This test needs to compile without generating warnings. TEST(TupleConstructorTest, DefaultConstructorDefaultInitializesEachField) { // The TR1 report requires that tuple's default constructor default // initializes each field, even if it's a primitive type. If the // implementation forgets to do this, this test will catch it by // generating warnings about using uninitialized variables (assuming // a decent compiler). tuple<> empty; tuple a1, b1; b1 = a1; EXPECT_EQ(0, get<0>(b1)); tuple a2, b2; b2 = a2; EXPECT_EQ(0, get<0>(b2)); EXPECT_EQ(0.0, get<1>(b2)); tuple a3, b3; b3 = a3; EXPECT_EQ(0.0, get<0>(b3)); EXPECT_EQ('\0', get<1>(b3)); EXPECT_TRUE(get<2>(b3) == NULL); tuple a10, b10; b10 = a10; EXPECT_EQ(0, get<0>(b10)); EXPECT_EQ(0, get<1>(b10)); EXPECT_EQ(0, get<2>(b10)); EXPECT_EQ(0, get<3>(b10)); EXPECT_EQ(0, get<4>(b10)); EXPECT_EQ(0, get<5>(b10)); EXPECT_EQ(0, get<6>(b10)); EXPECT_EQ(0, get<7>(b10)); EXPECT_EQ(0, get<8>(b10)); EXPECT_EQ(0, get<9>(b10)); } // Tests constructing a tuple from its fields. TEST(TupleConstructorTest, ConstructsFromFields) { int n = 1; // Reference field. tuple a(n); EXPECT_EQ(&n, &(get<0>(a))); // Non-reference fields. tuple b(5, 'a'); EXPECT_EQ(5, get<0>(b)); EXPECT_EQ('a', get<1>(b)); // Const reference field. const int m = 2; tuple c(true, m); EXPECT_TRUE(get<0>(c)); EXPECT_EQ(&m, &(get<1>(c))); } // Tests tuple's copy constructor. TEST(TupleConstructorTest, CopyConstructor) { tuple a(0.0, true); tuple b(a); EXPECT_DOUBLE_EQ(0.0, get<0>(b)); EXPECT_TRUE(get<1>(b)); } // Tests constructing a tuple from another tuple that has a compatible // but different type. TEST(TupleConstructorTest, ConstructsFromDifferentTupleType) { tuple a(0, 1, 'a'); tuple b(a); EXPECT_DOUBLE_EQ(0.0, get<0>(b)); EXPECT_EQ(1, get<1>(b)); EXPECT_EQ('a', get<2>(b)); } // Tests constructing a 2-tuple from an std::pair. TEST(TupleConstructorTest, ConstructsFromPair) { ::std::pair a(1, 'a'); tuple b(a); tuple c(a); } // Tests assigning a tuple to another tuple with the same type. TEST(TupleAssignmentTest, AssignsToSameTupleType) { const tuple a(5, 7L); tuple b; b = a; EXPECT_EQ(5, get<0>(b)); EXPECT_EQ(7L, get<1>(b)); } // Tests assigning a tuple to another tuple with a different but // compatible type. TEST(TupleAssignmentTest, AssignsToDifferentTupleType) { const tuple a(1, 7L, true); tuple b; b = a; EXPECT_EQ(1L, get<0>(b)); EXPECT_EQ(7, get<1>(b)); EXPECT_TRUE(get<2>(b)); } // Tests assigning an std::pair to a 2-tuple. TEST(TupleAssignmentTest, AssignsFromPair) { const ::std::pair a(5, true); tuple b; b = a; EXPECT_EQ(5, get<0>(b)); EXPECT_TRUE(get<1>(b)); tuple c; c = a; EXPECT_EQ(5L, get<0>(c)); EXPECT_TRUE(get<1>(c)); } // A fixture for testing big tuples. class BigTupleTest : public testing::Test { protected: typedef tuple BigTuple; BigTupleTest() : a_(1, 0, 0, 0, 0, 0, 0, 0, 0, 2), b_(1, 0, 0, 0, 0, 0, 0, 0, 0, 3) {} BigTuple a_, b_; }; // Tests constructing big tuples. TEST_F(BigTupleTest, Construction) { BigTuple a; BigTuple b(b_); } // Tests that get(t) returns the N-th (0-based) field of tuple t. TEST_F(BigTupleTest, get) { EXPECT_EQ(1, get<0>(a_)); EXPECT_EQ(2, get<9>(a_)); // Tests that get() works on a const tuple too. const BigTuple a(a_); EXPECT_EQ(1, get<0>(a)); EXPECT_EQ(2, get<9>(a)); } // Tests comparing big tuples. TEST_F(BigTupleTest, Comparisons) { EXPECT_TRUE(a_ == a_); EXPECT_FALSE(a_ != a_); EXPECT_TRUE(a_ != b_); EXPECT_FALSE(a_ == b_); } TEST(MakeTupleTest, WorksForScalarTypes) { tuple a; a = make_tuple(true, 5); EXPECT_TRUE(get<0>(a)); EXPECT_EQ(5, get<1>(a)); tuple b; b = make_tuple('a', 'b', 5); EXPECT_EQ('a', get<0>(b)); EXPECT_EQ('b', get<1>(b)); EXPECT_EQ(5, get<2>(b)); } TEST(MakeTupleTest, WorksForPointers) { int a[] = { 1, 2, 3, 4 }; const char* const str = "hi"; int* const p = a; tuple t; t = make_tuple(str, p); EXPECT_EQ(str, get<0>(t)); EXPECT_EQ(p, get<1>(t)); } } // namespace dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-typed-test2_test.cc000066400000000000000000000040131377520261000232610ustar00rootroot00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #include #include "test/gtest-typed-test_test.h" #include "gtest/gtest.h" #if GTEST_HAS_TYPED_TEST_P // Tests that the same type-parameterized test case can be // instantiated in different translation units linked together. // (ContainerTest is also instantiated in gtest-typed-test_test.cc.) INSTANTIATE_TYPED_TEST_CASE_P(Vector, ContainerTest, testing::Types >); #endif // GTEST_HAS_TYPED_TEST_P dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-typed-test_test.cc000066400000000000000000000261511377520261000232060ustar00rootroot00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #include #include #include "test/gtest-typed-test_test.h" #include "gtest/gtest.h" using testing::Test; // Used for testing that SetUpTestCase()/TearDownTestCase(), fixture // ctor/dtor, and SetUp()/TearDown() work correctly in typed tests and // type-parameterized test. template class CommonTest : public Test { // For some technical reason, SetUpTestCase() and TearDownTestCase() // must be public. public: static void SetUpTestCase() { shared_ = new T(5); } static void TearDownTestCase() { delete shared_; shared_ = NULL; } // This 'protected:' is optional. There's no harm in making all // members of this fixture class template public. protected: // We used to use std::list here, but switched to std::vector since // MSVC's doesn't compile cleanly with /W4. typedef std::vector Vector; typedef std::set IntSet; CommonTest() : value_(1) {} virtual ~CommonTest() { EXPECT_EQ(3, value_); } virtual void SetUp() { EXPECT_EQ(1, value_); value_++; } virtual void TearDown() { EXPECT_EQ(2, value_); value_++; } T value_; static T* shared_; }; template T* CommonTest::shared_ = NULL; // This #ifdef block tests typed tests. #if GTEST_HAS_TYPED_TEST using testing::Types; // Tests that SetUpTestCase()/TearDownTestCase(), fixture ctor/dtor, // and SetUp()/TearDown() work correctly in typed tests typedef Types TwoTypes; TYPED_TEST_CASE(CommonTest, TwoTypes); TYPED_TEST(CommonTest, ValuesAreCorrect) { // Static members of the fixture class template can be visited via // the TestFixture:: prefix. EXPECT_EQ(5, *TestFixture::shared_); // Typedefs in the fixture class template can be visited via the // "typename TestFixture::" prefix. typename TestFixture::Vector empty; EXPECT_EQ(0U, empty.size()); typename TestFixture::IntSet empty2; EXPECT_EQ(0U, empty2.size()); // Non-static members of the fixture class must be visited via // 'this', as required by C++ for class templates. EXPECT_EQ(2, this->value_); } // The second test makes sure shared_ is not deleted after the first // test. TYPED_TEST(CommonTest, ValuesAreStillCorrect) { // Static members of the fixture class template can also be visited // via 'this'. ASSERT_TRUE(this->shared_ != NULL); EXPECT_EQ(5, *this->shared_); // TypeParam can be used to refer to the type parameter. EXPECT_EQ(static_cast(2), this->value_); } // Tests that multiple TYPED_TEST_CASE's can be defined in the same // translation unit. template class TypedTest1 : public Test { }; // Verifies that the second argument of TYPED_TEST_CASE can be a // single type. TYPED_TEST_CASE(TypedTest1, int); TYPED_TEST(TypedTest1, A) {} template class TypedTest2 : public Test { }; // Verifies that the second argument of TYPED_TEST_CASE can be a // Types<...> type list. TYPED_TEST_CASE(TypedTest2, Types); // This also verifies that tests from different typed test cases can // share the same name. TYPED_TEST(TypedTest2, A) {} // Tests that a typed test case can be defined in a namespace. namespace library1 { template class NumericTest : public Test { }; typedef Types NumericTypes; TYPED_TEST_CASE(NumericTest, NumericTypes); TYPED_TEST(NumericTest, DefaultIsZero) { EXPECT_EQ(0, TypeParam()); } } // namespace library1 #endif // GTEST_HAS_TYPED_TEST // This #ifdef block tests type-parameterized tests. #if GTEST_HAS_TYPED_TEST_P using testing::Types; using testing::internal::TypedTestCasePState; // Tests TypedTestCasePState. class TypedTestCasePStateTest : public Test { protected: virtual void SetUp() { state_.AddTestName("foo.cc", 0, "FooTest", "A"); state_.AddTestName("foo.cc", 0, "FooTest", "B"); state_.AddTestName("foo.cc", 0, "FooTest", "C"); } TypedTestCasePState state_; }; TEST_F(TypedTestCasePStateTest, SucceedsForMatchingList) { const char* tests = "A, B, C"; EXPECT_EQ(tests, state_.VerifyRegisteredTestNames("foo.cc", 1, tests)); } // Makes sure that the order of the tests and spaces around the names // don't matter. TEST_F(TypedTestCasePStateTest, IgnoresOrderAndSpaces) { const char* tests = "A,C, B"; EXPECT_EQ(tests, state_.VerifyRegisteredTestNames("foo.cc", 1, tests)); } typedef TypedTestCasePStateTest TypedTestCasePStateDeathTest; TEST_F(TypedTestCasePStateDeathTest, DetectsDuplicates) { EXPECT_DEATH_IF_SUPPORTED( state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, A, C"), "foo\\.cc.1.?: Test A is listed more than once\\."); } TEST_F(TypedTestCasePStateDeathTest, DetectsExtraTest) { EXPECT_DEATH_IF_SUPPORTED( state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, C, D"), "foo\\.cc.1.?: No test named D can be found in this test case\\."); } TEST_F(TypedTestCasePStateDeathTest, DetectsMissedTest) { EXPECT_DEATH_IF_SUPPORTED( state_.VerifyRegisteredTestNames("foo.cc", 1, "A, C"), "foo\\.cc.1.?: You forgot to list test B\\."); } // Tests that defining a test for a parameterized test case generates // a run-time error if the test case has been registered. TEST_F(TypedTestCasePStateDeathTest, DetectsTestAfterRegistration) { state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, C"); EXPECT_DEATH_IF_SUPPORTED( state_.AddTestName("foo.cc", 2, "FooTest", "D"), "foo\\.cc.2.?: Test D must be defined before REGISTER_TYPED_TEST_CASE_P" "\\(FooTest, \\.\\.\\.\\)\\."); } // Tests that SetUpTestCase()/TearDownTestCase(), fixture ctor/dtor, // and SetUp()/TearDown() work correctly in type-parameterized tests. template class DerivedTest : public CommonTest { }; TYPED_TEST_CASE_P(DerivedTest); TYPED_TEST_P(DerivedTest, ValuesAreCorrect) { // Static members of the fixture class template can be visited via // the TestFixture:: prefix. EXPECT_EQ(5, *TestFixture::shared_); // Non-static members of the fixture class must be visited via // 'this', as required by C++ for class templates. EXPECT_EQ(2, this->value_); } // The second test makes sure shared_ is not deleted after the first // test. TYPED_TEST_P(DerivedTest, ValuesAreStillCorrect) { // Static members of the fixture class template can also be visited // via 'this'. ASSERT_TRUE(this->shared_ != NULL); EXPECT_EQ(5, *this->shared_); EXPECT_EQ(2, this->value_); } REGISTER_TYPED_TEST_CASE_P(DerivedTest, ValuesAreCorrect, ValuesAreStillCorrect); typedef Types MyTwoTypes; INSTANTIATE_TYPED_TEST_CASE_P(My, DerivedTest, MyTwoTypes); // Tests that multiple TYPED_TEST_CASE_P's can be defined in the same // translation unit. template class TypedTestP1 : public Test { }; TYPED_TEST_CASE_P(TypedTestP1); // For testing that the code between TYPED_TEST_CASE_P() and // TYPED_TEST_P() is not enclosed in a namespace. typedef int IntAfterTypedTestCaseP; TYPED_TEST_P(TypedTestP1, A) {} TYPED_TEST_P(TypedTestP1, B) {} // For testing that the code between TYPED_TEST_P() and // REGISTER_TYPED_TEST_CASE_P() is not enclosed in a namespace. typedef int IntBeforeRegisterTypedTestCaseP; REGISTER_TYPED_TEST_CASE_P(TypedTestP1, A, B); template class TypedTestP2 : public Test { }; TYPED_TEST_CASE_P(TypedTestP2); // This also verifies that tests from different type-parameterized // test cases can share the same name. TYPED_TEST_P(TypedTestP2, A) {} REGISTER_TYPED_TEST_CASE_P(TypedTestP2, A); // Verifies that the code between TYPED_TEST_CASE_P() and // REGISTER_TYPED_TEST_CASE_P() is not enclosed in a namespace. IntAfterTypedTestCaseP after = 0; IntBeforeRegisterTypedTestCaseP before = 0; // Verifies that the last argument of INSTANTIATE_TYPED_TEST_CASE_P() // can be either a single type or a Types<...> type list. INSTANTIATE_TYPED_TEST_CASE_P(Int, TypedTestP1, int); INSTANTIATE_TYPED_TEST_CASE_P(Int, TypedTestP2, Types); // Tests that the same type-parameterized test case can be // instantiated more than once in the same translation unit. INSTANTIATE_TYPED_TEST_CASE_P(Double, TypedTestP2, Types); // Tests that the same type-parameterized test case can be // instantiated in different translation units linked together. // (ContainerTest is also instantiated in gtest-typed-test_test.cc.) typedef Types, std::set > MyContainers; INSTANTIATE_TYPED_TEST_CASE_P(My, ContainerTest, MyContainers); // Tests that a type-parameterized test case can be defined and // instantiated in a namespace. namespace library2 { template class NumericTest : public Test { }; TYPED_TEST_CASE_P(NumericTest); TYPED_TEST_P(NumericTest, DefaultIsZero) { EXPECT_EQ(0, TypeParam()); } TYPED_TEST_P(NumericTest, ZeroIsLessThanOne) { EXPECT_LT(TypeParam(0), TypeParam(1)); } REGISTER_TYPED_TEST_CASE_P(NumericTest, DefaultIsZero, ZeroIsLessThanOne); typedef Types NumericTypes; INSTANTIATE_TYPED_TEST_CASE_P(My, NumericTest, NumericTypes); } // namespace library2 #endif // GTEST_HAS_TYPED_TEST_P #if !defined(GTEST_HAS_TYPED_TEST) && !defined(GTEST_HAS_TYPED_TEST_P) // Google Test may not support type-parameterized tests with some // compilers. If we use conditional compilation to compile out all // code referring to the gtest_main library, MSVC linker will not link // that library at all and consequently complain about missing entry // point defined in that library (fatal error LNK1561: entry point // must be defined). This dummy test keeps gtest_main linked in. TEST(DummyTest, TypedTestsAreNotSupportedOnThisPlatform) {} #endif // #if !defined(GTEST_HAS_TYPED_TEST) && !defined(GTEST_HAS_TYPED_TEST_P) dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-typed-test_test.h000066400000000000000000000046651377520261000230560ustar00rootroot00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #ifndef GTEST_TEST_GTEST_TYPED_TEST_TEST_H_ #define GTEST_TEST_GTEST_TYPED_TEST_TEST_H_ #include "gtest/gtest.h" #if GTEST_HAS_TYPED_TEST_P using testing::Test; // For testing that the same type-parameterized test case can be // instantiated in different translation units linked together. // ContainerTest will be instantiated in both gtest-typed-test_test.cc // and gtest-typed-test2_test.cc. template class ContainerTest : public Test { }; TYPED_TEST_CASE_P(ContainerTest); TYPED_TEST_P(ContainerTest, CanBeDefaultConstructed) { TypeParam container; } TYPED_TEST_P(ContainerTest, InitialSizeIsZero) { TypeParam container; EXPECT_EQ(0U, container.size()); } REGISTER_TYPED_TEST_CASE_P(ContainerTest, CanBeDefaultConstructed, InitialSizeIsZero); #endif // GTEST_HAS_TYPED_TEST_P #endif // GTEST_TEST_GTEST_TYPED_TEST_TEST_H_ dlt-daemon-2.18.6/gtest-1.7.0/test/gtest-unittest-api_test.cc000066400000000000000000000316271377520261000235360ustar00rootroot00000000000000// Copyright 2009 Google Inc. All rights reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // // The Google C++ Testing Framework (Google Test) // // This file contains tests verifying correctness of data provided via // UnitTest's public methods. #include "gtest/gtest.h" #include // For strcmp. #include using ::testing::InitGoogleTest; namespace testing { namespace internal { template struct LessByName { bool operator()(const T* a, const T* b) { return strcmp(a->name(), b->name()) < 0; } }; class UnitTestHelper { public: // Returns the array of pointers to all test cases sorted by the test case // name. The caller is responsible for deleting the array. static TestCase const** const GetSortedTestCases() { UnitTest& unit_test = *UnitTest::GetInstance(); TestCase const** const test_cases = new const TestCase*[unit_test.total_test_case_count()]; for (int i = 0; i < unit_test.total_test_case_count(); ++i) test_cases[i] = unit_test.GetTestCase(i); std::sort(test_cases, test_cases + unit_test.total_test_case_count(), LessByName()); return test_cases; } // Returns the test case by its name. The caller doesn't own the returned // pointer. static const TestCase* FindTestCase(const char* name) { UnitTest& unit_test = *UnitTest::GetInstance(); for (int i = 0; i < unit_test.total_test_case_count(); ++i) { const TestCase* test_case = unit_test.GetTestCase(i); if (0 == strcmp(test_case->name(), name)) return test_case; } return NULL; } // Returns the array of pointers to all tests in a particular test case // sorted by the test name. The caller is responsible for deleting the // array. static TestInfo const** const GetSortedTests(const TestCase* test_case) { TestInfo const** const tests = new const TestInfo*[test_case->total_test_count()]; for (int i = 0; i < test_case->total_test_count(); ++i) tests[i] = test_case->GetTestInfo(i); std::sort(tests, tests + test_case->total_test_count(), LessByName()); return tests; } }; #if GTEST_HAS_TYPED_TEST template class TestCaseWithCommentTest : public Test {}; TYPED_TEST_CASE(TestCaseWithCommentTest, Types); TYPED_TEST(TestCaseWithCommentTest, Dummy) {} const int kTypedTestCases = 1; const int kTypedTests = 1; #else const int kTypedTestCases = 0; const int kTypedTests = 0; #endif // GTEST_HAS_TYPED_TEST // We can only test the accessors that do not change value while tests run. // Since tests can be run in any order, the values the accessors that track // test execution (such as failed_test_count) can not be predicted. TEST(ApiTest, UnitTestImmutableAccessorsWork) { UnitTest* unit_test = UnitTest::GetInstance(); ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count()); EXPECT_EQ(1 + kTypedTestCases, unit_test->test_case_to_run_count()); EXPECT_EQ(2, unit_test->disabled_test_count()); EXPECT_EQ(5 + kTypedTests, unit_test->total_test_count()); EXPECT_EQ(3 + kTypedTests, unit_test->test_to_run_count()); const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases(); EXPECT_STREQ("ApiTest", test_cases[0]->name()); EXPECT_STREQ("DISABLED_Test", test_cases[1]->name()); #if GTEST_HAS_TYPED_TEST EXPECT_STREQ("TestCaseWithCommentTest/0", test_cases[2]->name()); #endif // GTEST_HAS_TYPED_TEST delete[] test_cases; // The following lines initiate actions to verify certain methods in // FinalSuccessChecker::TearDown. // Records a test property to verify TestResult::GetTestProperty(). RecordProperty("key", "value"); } AssertionResult IsNull(const char* str) { if (str != NULL) { return testing::AssertionFailure() << "argument is " << str; } return AssertionSuccess(); } TEST(ApiTest, TestCaseImmutableAccessorsWork) { const TestCase* test_case = UnitTestHelper::FindTestCase("ApiTest"); ASSERT_TRUE(test_case != NULL); EXPECT_STREQ("ApiTest", test_case->name()); EXPECT_TRUE(IsNull(test_case->type_param())); EXPECT_TRUE(test_case->should_run()); EXPECT_EQ(1, test_case->disabled_test_count()); EXPECT_EQ(3, test_case->test_to_run_count()); ASSERT_EQ(4, test_case->total_test_count()); const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case); EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name()); EXPECT_STREQ("ApiTest", tests[0]->test_case_name()); EXPECT_TRUE(IsNull(tests[0]->value_param())); EXPECT_TRUE(IsNull(tests[0]->type_param())); EXPECT_FALSE(tests[0]->should_run()); EXPECT_STREQ("TestCaseDisabledAccessorsWork", tests[1]->name()); EXPECT_STREQ("ApiTest", tests[1]->test_case_name()); EXPECT_TRUE(IsNull(tests[1]->value_param())); EXPECT_TRUE(IsNull(tests[1]->type_param())); EXPECT_TRUE(tests[1]->should_run()); EXPECT_STREQ("TestCaseImmutableAccessorsWork", tests[2]->name()); EXPECT_STREQ("ApiTest", tests[2]->test_case_name()); EXPECT_TRUE(IsNull(tests[2]->value_param())); EXPECT_TRUE(IsNull(tests[2]->type_param())); EXPECT_TRUE(tests[2]->should_run()); EXPECT_STREQ("UnitTestImmutableAccessorsWork", tests[3]->name()); EXPECT_STREQ("ApiTest", tests[3]->test_case_name()); EXPECT_TRUE(IsNull(tests[3]->value_param())); EXPECT_TRUE(IsNull(tests[3]->type_param())); EXPECT_TRUE(tests[3]->should_run()); delete[] tests; tests = NULL; #if GTEST_HAS_TYPED_TEST test_case = UnitTestHelper::FindTestCase("TestCaseWithCommentTest/0"); ASSERT_TRUE(test_case != NULL); EXPECT_STREQ("TestCaseWithCommentTest/0", test_case->name()); EXPECT_STREQ(GetTypeName().c_str(), test_case->type_param()); EXPECT_TRUE(test_case->should_run()); EXPECT_EQ(0, test_case->disabled_test_count()); EXPECT_EQ(1, test_case->test_to_run_count()); ASSERT_EQ(1, test_case->total_test_count()); tests = UnitTestHelper::GetSortedTests(test_case); EXPECT_STREQ("Dummy", tests[0]->name()); EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name()); EXPECT_TRUE(IsNull(tests[0]->value_param())); EXPECT_STREQ(GetTypeName().c_str(), tests[0]->type_param()); EXPECT_TRUE(tests[0]->should_run()); delete[] tests; #endif // GTEST_HAS_TYPED_TEST } TEST(ApiTest, TestCaseDisabledAccessorsWork) { const TestCase* test_case = UnitTestHelper::FindTestCase("DISABLED_Test"); ASSERT_TRUE(test_case != NULL); EXPECT_STREQ("DISABLED_Test", test_case->name()); EXPECT_TRUE(IsNull(test_case->type_param())); EXPECT_FALSE(test_case->should_run()); EXPECT_EQ(1, test_case->disabled_test_count()); EXPECT_EQ(0, test_case->test_to_run_count()); ASSERT_EQ(1, test_case->total_test_count()); const TestInfo* const test_info = test_case->GetTestInfo(0); EXPECT_STREQ("Dummy2", test_info->name()); EXPECT_STREQ("DISABLED_Test", test_info->test_case_name()); EXPECT_TRUE(IsNull(test_info->value_param())); EXPECT_TRUE(IsNull(test_info->type_param())); EXPECT_FALSE(test_info->should_run()); } // These two tests are here to provide support for testing // test_case_to_run_count, disabled_test_count, and test_to_run_count. TEST(ApiTest, DISABLED_Dummy1) {} TEST(DISABLED_Test, Dummy2) {} class FinalSuccessChecker : public Environment { protected: virtual void TearDown() { UnitTest* unit_test = UnitTest::GetInstance(); EXPECT_EQ(1 + kTypedTestCases, unit_test->successful_test_case_count()); EXPECT_EQ(3 + kTypedTests, unit_test->successful_test_count()); EXPECT_EQ(0, unit_test->failed_test_case_count()); EXPECT_EQ(0, unit_test->failed_test_count()); EXPECT_TRUE(unit_test->Passed()); EXPECT_FALSE(unit_test->Failed()); ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count()); const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases(); EXPECT_STREQ("ApiTest", test_cases[0]->name()); EXPECT_TRUE(IsNull(test_cases[0]->type_param())); EXPECT_TRUE(test_cases[0]->should_run()); EXPECT_EQ(1, test_cases[0]->disabled_test_count()); ASSERT_EQ(4, test_cases[0]->total_test_count()); EXPECT_EQ(3, test_cases[0]->successful_test_count()); EXPECT_EQ(0, test_cases[0]->failed_test_count()); EXPECT_TRUE(test_cases[0]->Passed()); EXPECT_FALSE(test_cases[0]->Failed()); EXPECT_STREQ("DISABLED_Test", test_cases[1]->name()); EXPECT_TRUE(IsNull(test_cases[1]->type_param())); EXPECT_FALSE(test_cases[1]->should_run()); EXPECT_EQ(1, test_cases[1]->disabled_test_count()); ASSERT_EQ(1, test_cases[1]->total_test_count()); EXPECT_EQ(0, test_cases[1]->successful_test_count()); EXPECT_EQ(0, test_cases[1]->failed_test_count()); #if GTEST_HAS_TYPED_TEST EXPECT_STREQ("TestCaseWithCommentTest/0", test_cases[2]->name()); EXPECT_STREQ(GetTypeName().c_str(), test_cases[2]->type_param()); EXPECT_TRUE(test_cases[2]->should_run()); EXPECT_EQ(0, test_cases[2]->disabled_test_count()); ASSERT_EQ(1, test_cases[2]->total_test_count()); EXPECT_EQ(1, test_cases[2]->successful_test_count()); EXPECT_EQ(0, test_cases[2]->failed_test_count()); EXPECT_TRUE(test_cases[2]->Passed()); EXPECT_FALSE(test_cases[2]->Failed()); #endif // GTEST_HAS_TYPED_TEST const TestCase* test_case = UnitTestHelper::FindTestCase("ApiTest"); const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case); EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name()); EXPECT_STREQ("ApiTest", tests[0]->test_case_name()); EXPECT_FALSE(tests[0]->should_run()); EXPECT_STREQ("TestCaseDisabledAccessorsWork", tests[1]->name()); EXPECT_STREQ("ApiTest", tests[1]->test_case_name()); EXPECT_TRUE(IsNull(tests[1]->value_param())); EXPECT_TRUE(IsNull(tests[1]->type_param())); EXPECT_TRUE(tests[1]->should_run()); EXPECT_TRUE(tests[1]->result()->Passed()); EXPECT_EQ(0, tests[1]->result()->test_property_count()); EXPECT_STREQ("TestCaseImmutableAccessorsWork", tests[2]->name()); EXPECT_STREQ("ApiTest", tests[2]->test_case_name()); EXPECT_TRUE(IsNull(tests[2]->value_param())); EXPECT_TRUE(IsNull(tests[2]->type_param())); EXPECT_TRUE(tests[2]->should_run()); EXPECT_TRUE(tests[2]->result()->Passed()); EXPECT_EQ(0, tests[2]->result()->test_property_count()); EXPECT_STREQ("UnitTestImmutableAccessorsWork", tests[3]->name()); EXPECT_STREQ("ApiTest", tests[3]->test_case_name()); EXPECT_TRUE(IsNull(tests[3]->value_param())); EXPECT_TRUE(IsNull(tests[3]->type_param())); EXPECT_TRUE(tests[3]->should_run()); EXPECT_TRUE(tests[3]->result()->Passed()); EXPECT_EQ(1, tests[3]->result()->test_property_count()); const TestProperty& property = tests[3]->result()->GetTestProperty(0); EXPECT_STREQ("key", property.key()); EXPECT_STREQ("value", property.value()); delete[] tests; #if GTEST_HAS_TYPED_TEST test_case = UnitTestHelper::FindTestCase("TestCaseWithCommentTest/0"); tests = UnitTestHelper::GetSortedTests(test_case); EXPECT_STREQ("Dummy", tests[0]->name()); EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name()); EXPECT_TRUE(IsNull(tests[0]->value_param())); EXPECT_STREQ(GetTypeName().c_str(), tests[0]->type_param()); EXPECT_TRUE(tests[0]->should_run()); EXPECT_TRUE(tests[0]->result()->Passed()); EXPECT_EQ(0, tests[0]->result()->test_property_count()); delete[] tests; #endif // GTEST_HAS_TYPED_TEST delete[] test_cases; } }; } // namespace internal } // namespace testing int main(int argc, char **argv) { InitGoogleTest(&argc, argv); AddGlobalTestEnvironment(new testing::internal::FinalSuccessChecker()); return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_all_test.cc000066400000000000000000000043131377520261000217320ustar00rootroot00000000000000// Copyright 2009, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // Tests for Google C++ Testing Framework (Google Test) // // Sometimes it's desirable to build most of Google Test's own tests // by compiling a single file. This file serves this purpose. #include "test/gtest-filepath_test.cc" #include "test/gtest-linked_ptr_test.cc" #include "test/gtest-message_test.cc" #include "test/gtest-options_test.cc" #include "test/gtest-port_test.cc" #include "test/gtest_pred_impl_unittest.cc" #include "test/gtest_prod_test.cc" #include "test/gtest-test-part_test.cc" #include "test/gtest-typed-test_test.cc" #include "test/gtest-typed-test2_test.cc" #include "test/gtest_unittest.cc" #include "test/production.cc" dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_break_on_failure_unittest.py000077500000000000000000000162531377520261000254250ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2006, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Unit test for Google Test's break-on-failure mode. A user can ask Google Test to seg-fault when an assertion fails, using either the GTEST_BREAK_ON_FAILURE environment variable or the --gtest_break_on_failure flag. This script tests such functionality by invoking gtest_break_on_failure_unittest_ (a program written with Google Test) with different environments and command line flags. """ __author__ = 'wan@google.com (Zhanyong Wan)' import gtest_test_utils import os import sys # Constants. IS_WINDOWS = os.name == 'nt' # The environment variable for enabling/disabling the break-on-failure mode. BREAK_ON_FAILURE_ENV_VAR = 'GTEST_BREAK_ON_FAILURE' # The command line flag for enabling/disabling the break-on-failure mode. BREAK_ON_FAILURE_FLAG = 'gtest_break_on_failure' # The environment variable for enabling/disabling the throw-on-failure mode. THROW_ON_FAILURE_ENV_VAR = 'GTEST_THROW_ON_FAILURE' # The environment variable for enabling/disabling the catch-exceptions mode. CATCH_EXCEPTIONS_ENV_VAR = 'GTEST_CATCH_EXCEPTIONS' # Path to the gtest_break_on_failure_unittest_ program. EXE_PATH = gtest_test_utils.GetTestExecutablePath( 'gtest_break_on_failure_unittest_') environ = gtest_test_utils.environ SetEnvVar = gtest_test_utils.SetEnvVar # Tests in this file run a Google-Test-based test program and expect it # to terminate prematurely. Therefore they are incompatible with # the premature-exit-file protocol by design. Unset the # premature-exit filepath to prevent Google Test from creating # the file. SetEnvVar(gtest_test_utils.PREMATURE_EXIT_FILE_ENV_VAR, None) def Run(command): """Runs a command; returns 1 if it was killed by a signal, or 0 otherwise.""" p = gtest_test_utils.Subprocess(command, env=environ) if p.terminated_by_signal: return 1 else: return 0 # The tests. class GTestBreakOnFailureUnitTest(gtest_test_utils.TestCase): """Tests using the GTEST_BREAK_ON_FAILURE environment variable or the --gtest_break_on_failure flag to turn assertion failures into segmentation faults. """ def RunAndVerify(self, env_var_value, flag_value, expect_seg_fault): """Runs gtest_break_on_failure_unittest_ and verifies that it does (or does not) have a seg-fault. Args: env_var_value: value of the GTEST_BREAK_ON_FAILURE environment variable; None if the variable should be unset. flag_value: value of the --gtest_break_on_failure flag; None if the flag should not be present. expect_seg_fault: 1 if the program is expected to generate a seg-fault; 0 otherwise. """ SetEnvVar(BREAK_ON_FAILURE_ENV_VAR, env_var_value) if env_var_value is None: env_var_value_msg = ' is not set' else: env_var_value_msg = '=' + env_var_value if flag_value is None: flag = '' elif flag_value == '0': flag = '--%s=0' % BREAK_ON_FAILURE_FLAG else: flag = '--%s' % BREAK_ON_FAILURE_FLAG command = [EXE_PATH] if flag: command.append(flag) if expect_seg_fault: should_or_not = 'should' else: should_or_not = 'should not' has_seg_fault = Run(command) SetEnvVar(BREAK_ON_FAILURE_ENV_VAR, None) msg = ('when %s%s, an assertion failure in "%s" %s cause a seg-fault.' % (BREAK_ON_FAILURE_ENV_VAR, env_var_value_msg, ' '.join(command), should_or_not)) self.assert_(has_seg_fault == expect_seg_fault, msg) def testDefaultBehavior(self): """Tests the behavior of the default mode.""" self.RunAndVerify(env_var_value=None, flag_value=None, expect_seg_fault=0) def testEnvVar(self): """Tests using the GTEST_BREAK_ON_FAILURE environment variable.""" self.RunAndVerify(env_var_value='0', flag_value=None, expect_seg_fault=0) self.RunAndVerify(env_var_value='1', flag_value=None, expect_seg_fault=1) def testFlag(self): """Tests using the --gtest_break_on_failure flag.""" self.RunAndVerify(env_var_value=None, flag_value='0', expect_seg_fault=0) self.RunAndVerify(env_var_value=None, flag_value='1', expect_seg_fault=1) def testFlagOverridesEnvVar(self): """Tests that the flag overrides the environment variable.""" self.RunAndVerify(env_var_value='0', flag_value='0', expect_seg_fault=0) self.RunAndVerify(env_var_value='0', flag_value='1', expect_seg_fault=1) self.RunAndVerify(env_var_value='1', flag_value='0', expect_seg_fault=0) self.RunAndVerify(env_var_value='1', flag_value='1', expect_seg_fault=1) def testBreakOnFailureOverridesThrowOnFailure(self): """Tests that gtest_break_on_failure overrides gtest_throw_on_failure.""" SetEnvVar(THROW_ON_FAILURE_ENV_VAR, '1') try: self.RunAndVerify(env_var_value=None, flag_value='1', expect_seg_fault=1) finally: SetEnvVar(THROW_ON_FAILURE_ENV_VAR, None) if IS_WINDOWS: def testCatchExceptionsDoesNotInterfere(self): """Tests that gtest_catch_exceptions doesn't interfere.""" SetEnvVar(CATCH_EXCEPTIONS_ENV_VAR, '1') try: self.RunAndVerify(env_var_value='1', flag_value='1', expect_seg_fault=1) finally: SetEnvVar(CATCH_EXCEPTIONS_ENV_VAR, None) if __name__ == '__main__': gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_break_on_failure_unittest_.cc000066400000000000000000000062771377520261000255230ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Unit test for Google Test's break-on-failure mode. // // A user can ask Google Test to seg-fault when an assertion fails, using // either the GTEST_BREAK_ON_FAILURE environment variable or the // --gtest_break_on_failure flag. This file is used for testing such // functionality. // // This program will be invoked from a Python unit test. It is // expected to fail. Don't run it directly. #include "gtest/gtest.h" #if GTEST_OS_WINDOWS # include # include #endif namespace { // A test that's expected to fail. TEST(Foo, Bar) { EXPECT_EQ(2, 3); } #if GTEST_HAS_SEH && !GTEST_OS_WINDOWS_MOBILE // On Windows Mobile global exception handlers are not supported. LONG WINAPI ExitWithExceptionCode( struct _EXCEPTION_POINTERS* exception_pointers) { exit(exception_pointers->ExceptionRecord->ExceptionCode); } #endif } // namespace int main(int argc, char **argv) { #if GTEST_OS_WINDOWS // Suppresses display of the Windows error dialog upon encountering // a general protection fault (segment violation). SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS); # if GTEST_HAS_SEH && !GTEST_OS_WINDOWS_MOBILE // The default unhandled exception filter does not always exit // with the exception code as exit code - for example it exits with // 0 for EXCEPTION_ACCESS_VIOLATION and 1 for EXCEPTION_BREAKPOINT // if the application is compiled in debug mode. Thus we use our own // filter which always exits with the exception code for unhandled // exceptions. SetUnhandledExceptionFilter(ExitWithExceptionCode); # endif #endif testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_catch_exceptions_test.py000077500000000000000000000232551377520261000245610ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2010 Google Inc. All Rights Reserved. # # 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 Google Inc. 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. """Tests Google Test's exception catching behavior. This script invokes gtest_catch_exceptions_test_ and gtest_catch_exceptions_ex_test_ (programs written with Google Test) and verifies their output. """ __author__ = 'vladl@google.com (Vlad Losev)' import os import gtest_test_utils # Constants. FLAG_PREFIX = '--gtest_' LIST_TESTS_FLAG = FLAG_PREFIX + 'list_tests' NO_CATCH_EXCEPTIONS_FLAG = FLAG_PREFIX + 'catch_exceptions=0' FILTER_FLAG = FLAG_PREFIX + 'filter' # Path to the gtest_catch_exceptions_ex_test_ binary, compiled with # exceptions enabled. EX_EXE_PATH = gtest_test_utils.GetTestExecutablePath( 'gtest_catch_exceptions_ex_test_') # Path to the gtest_catch_exceptions_test_ binary, compiled with # exceptions disabled. EXE_PATH = gtest_test_utils.GetTestExecutablePath( 'gtest_catch_exceptions_no_ex_test_') environ = gtest_test_utils.environ SetEnvVar = gtest_test_utils.SetEnvVar # Tests in this file run a Google-Test-based test program and expect it # to terminate prematurely. Therefore they are incompatible with # the premature-exit-file protocol by design. Unset the # premature-exit filepath to prevent Google Test from creating # the file. SetEnvVar(gtest_test_utils.PREMATURE_EXIT_FILE_ENV_VAR, None) TEST_LIST = gtest_test_utils.Subprocess( [EXE_PATH, LIST_TESTS_FLAG], env=environ).output SUPPORTS_SEH_EXCEPTIONS = 'ThrowsSehException' in TEST_LIST if SUPPORTS_SEH_EXCEPTIONS: BINARY_OUTPUT = gtest_test_utils.Subprocess([EXE_PATH], env=environ).output EX_BINARY_OUTPUT = gtest_test_utils.Subprocess( [EX_EXE_PATH], env=environ).output # The tests. if SUPPORTS_SEH_EXCEPTIONS: # pylint:disable-msg=C6302 class CatchSehExceptionsTest(gtest_test_utils.TestCase): """Tests exception-catching behavior.""" def TestSehExceptions(self, test_output): self.assert_('SEH exception with code 0x2a thrown ' 'in the test fixture\'s constructor' in test_output) self.assert_('SEH exception with code 0x2a thrown ' 'in the test fixture\'s destructor' in test_output) self.assert_('SEH exception with code 0x2a thrown in SetUpTestCase()' in test_output) self.assert_('SEH exception with code 0x2a thrown in TearDownTestCase()' in test_output) self.assert_('SEH exception with code 0x2a thrown in SetUp()' in test_output) self.assert_('SEH exception with code 0x2a thrown in TearDown()' in test_output) self.assert_('SEH exception with code 0x2a thrown in the test body' in test_output) def testCatchesSehExceptionsWithCxxExceptionsEnabled(self): self.TestSehExceptions(EX_BINARY_OUTPUT) def testCatchesSehExceptionsWithCxxExceptionsDisabled(self): self.TestSehExceptions(BINARY_OUTPUT) class CatchCxxExceptionsTest(gtest_test_utils.TestCase): """Tests C++ exception-catching behavior. Tests in this test case verify that: * C++ exceptions are caught and logged as C++ (not SEH) exceptions * Exception thrown affect the remainder of the test work flow in the expected manner. """ def testCatchesCxxExceptionsInFixtureConstructor(self): self.assert_('C++ exception with description ' '"Standard C++ exception" thrown ' 'in the test fixture\'s constructor' in EX_BINARY_OUTPUT) self.assert_('unexpected' not in EX_BINARY_OUTPUT, 'This failure belongs in this test only if ' '"CxxExceptionInConstructorTest" (no quotes) ' 'appears on the same line as words "called unexpectedly"') if ('CxxExceptionInDestructorTest.ThrowsExceptionInDestructor' in EX_BINARY_OUTPUT): def testCatchesCxxExceptionsInFixtureDestructor(self): self.assert_('C++ exception with description ' '"Standard C++ exception" thrown ' 'in the test fixture\'s destructor' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInDestructorTest::TearDownTestCase() ' 'called as expected.' in EX_BINARY_OUTPUT) def testCatchesCxxExceptionsInSetUpTestCase(self): self.assert_('C++ exception with description "Standard C++ exception"' ' thrown in SetUpTestCase()' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInConstructorTest::TearDownTestCase() ' 'called as expected.' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInSetUpTestCaseTest constructor ' 'called as expected.' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInSetUpTestCaseTest destructor ' 'called as expected.' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInSetUpTestCaseTest::SetUp() ' 'called as expected.' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInSetUpTestCaseTest::TearDown() ' 'called as expected.' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInSetUpTestCaseTest test body ' 'called as expected.' in EX_BINARY_OUTPUT) def testCatchesCxxExceptionsInTearDownTestCase(self): self.assert_('C++ exception with description "Standard C++ exception"' ' thrown in TearDownTestCase()' in EX_BINARY_OUTPUT) def testCatchesCxxExceptionsInSetUp(self): self.assert_('C++ exception with description "Standard C++ exception"' ' thrown in SetUp()' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInSetUpTest::TearDownTestCase() ' 'called as expected.' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInSetUpTest destructor ' 'called as expected.' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInSetUpTest::TearDown() ' 'called as expected.' in EX_BINARY_OUTPUT) self.assert_('unexpected' not in EX_BINARY_OUTPUT, 'This failure belongs in this test only if ' '"CxxExceptionInSetUpTest" (no quotes) ' 'appears on the same line as words "called unexpectedly"') def testCatchesCxxExceptionsInTearDown(self): self.assert_('C++ exception with description "Standard C++ exception"' ' thrown in TearDown()' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInTearDownTest::TearDownTestCase() ' 'called as expected.' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInTearDownTest destructor ' 'called as expected.' in EX_BINARY_OUTPUT) def testCatchesCxxExceptionsInTestBody(self): self.assert_('C++ exception with description "Standard C++ exception"' ' thrown in the test body' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInTestBodyTest::TearDownTestCase() ' 'called as expected.' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInTestBodyTest destructor ' 'called as expected.' in EX_BINARY_OUTPUT) self.assert_('CxxExceptionInTestBodyTest::TearDown() ' 'called as expected.' in EX_BINARY_OUTPUT) def testCatchesNonStdCxxExceptions(self): self.assert_('Unknown C++ exception thrown in the test body' in EX_BINARY_OUTPUT) def testUnhandledCxxExceptionsAbortTheProgram(self): # Filters out SEH exception tests on Windows. Unhandled SEH exceptions # cause tests to show pop-up windows there. FITLER_OUT_SEH_TESTS_FLAG = FILTER_FLAG + '=-*Seh*' # By default, Google Test doesn't catch the exceptions. uncaught_exceptions_ex_binary_output = gtest_test_utils.Subprocess( [EX_EXE_PATH, NO_CATCH_EXCEPTIONS_FLAG, FITLER_OUT_SEH_TESTS_FLAG], env=environ).output self.assert_('Unhandled C++ exception terminating the program' in uncaught_exceptions_ex_binary_output) self.assert_('unexpected' not in uncaught_exceptions_ex_binary_output) if __name__ == '__main__': gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_catch_exceptions_test_.cc000066400000000000000000000213271377520261000246500ustar00rootroot00000000000000// Copyright 2010, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: vladl@google.com (Vlad Losev) // // Tests for Google Test itself. Tests in this file throw C++ or SEH // exceptions, and the output is verified by gtest_catch_exceptions_test.py. #include "gtest/gtest.h" #include // NOLINT #include // For exit(). #if GTEST_HAS_SEH # include #endif #if GTEST_HAS_EXCEPTIONS # include // For set_terminate(). # include #endif using testing::Test; #if GTEST_HAS_SEH class SehExceptionInConstructorTest : public Test { public: SehExceptionInConstructorTest() { RaiseException(42, 0, 0, NULL); } }; TEST_F(SehExceptionInConstructorTest, ThrowsExceptionInConstructor) {} class SehExceptionInDestructorTest : public Test { public: ~SehExceptionInDestructorTest() { RaiseException(42, 0, 0, NULL); } }; TEST_F(SehExceptionInDestructorTest, ThrowsExceptionInDestructor) {} class SehExceptionInSetUpTestCaseTest : public Test { public: static void SetUpTestCase() { RaiseException(42, 0, 0, NULL); } }; TEST_F(SehExceptionInSetUpTestCaseTest, ThrowsExceptionInSetUpTestCase) {} class SehExceptionInTearDownTestCaseTest : public Test { public: static void TearDownTestCase() { RaiseException(42, 0, 0, NULL); } }; TEST_F(SehExceptionInTearDownTestCaseTest, ThrowsExceptionInTearDownTestCase) {} class SehExceptionInSetUpTest : public Test { protected: virtual void SetUp() { RaiseException(42, 0, 0, NULL); } }; TEST_F(SehExceptionInSetUpTest, ThrowsExceptionInSetUp) {} class SehExceptionInTearDownTest : public Test { protected: virtual void TearDown() { RaiseException(42, 0, 0, NULL); } }; TEST_F(SehExceptionInTearDownTest, ThrowsExceptionInTearDown) {} TEST(SehExceptionTest, ThrowsSehException) { RaiseException(42, 0, 0, NULL); } #endif // GTEST_HAS_SEH #if GTEST_HAS_EXCEPTIONS class CxxExceptionInConstructorTest : public Test { public: CxxExceptionInConstructorTest() { // Without this macro VC++ complains about unreachable code at the end of // the constructor. GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_( throw std::runtime_error("Standard C++ exception")); } static void TearDownTestCase() { printf("%s", "CxxExceptionInConstructorTest::TearDownTestCase() " "called as expected.\n"); } protected: ~CxxExceptionInConstructorTest() { ADD_FAILURE() << "CxxExceptionInConstructorTest destructor " << "called unexpectedly."; } virtual void SetUp() { ADD_FAILURE() << "CxxExceptionInConstructorTest::SetUp() " << "called unexpectedly."; } virtual void TearDown() { ADD_FAILURE() << "CxxExceptionInConstructorTest::TearDown() " << "called unexpectedly."; } }; TEST_F(CxxExceptionInConstructorTest, ThrowsExceptionInConstructor) { ADD_FAILURE() << "CxxExceptionInConstructorTest test body " << "called unexpectedly."; } // Exceptions in destructors are not supported in C++11. #if !defined(__GXX_EXPERIMENTAL_CXX0X__) && __cplusplus < 201103L class CxxExceptionInDestructorTest : public Test { public: static void TearDownTestCase() { printf("%s", "CxxExceptionInDestructorTest::TearDownTestCase() " "called as expected.\n"); } protected: ~CxxExceptionInDestructorTest() { GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_( throw std::runtime_error("Standard C++ exception")); } }; TEST_F(CxxExceptionInDestructorTest, ThrowsExceptionInDestructor) {} #endif // C++11 mode class CxxExceptionInSetUpTestCaseTest : public Test { public: CxxExceptionInSetUpTestCaseTest() { printf("%s", "CxxExceptionInSetUpTestCaseTest constructor " "called as expected.\n"); } static void SetUpTestCase() { throw std::runtime_error("Standard C++ exception"); } static void TearDownTestCase() { printf("%s", "CxxExceptionInSetUpTestCaseTest::TearDownTestCase() " "called as expected.\n"); } protected: ~CxxExceptionInSetUpTestCaseTest() { printf("%s", "CxxExceptionInSetUpTestCaseTest destructor " "called as expected.\n"); } virtual void SetUp() { printf("%s", "CxxExceptionInSetUpTestCaseTest::SetUp() " "called as expected.\n"); } virtual void TearDown() { printf("%s", "CxxExceptionInSetUpTestCaseTest::TearDown() " "called as expected.\n"); } }; TEST_F(CxxExceptionInSetUpTestCaseTest, ThrowsExceptionInSetUpTestCase) { printf("%s", "CxxExceptionInSetUpTestCaseTest test body " "called as expected.\n"); } class CxxExceptionInTearDownTestCaseTest : public Test { public: static void TearDownTestCase() { throw std::runtime_error("Standard C++ exception"); } }; TEST_F(CxxExceptionInTearDownTestCaseTest, ThrowsExceptionInTearDownTestCase) {} class CxxExceptionInSetUpTest : public Test { public: static void TearDownTestCase() { printf("%s", "CxxExceptionInSetUpTest::TearDownTestCase() " "called as expected.\n"); } protected: ~CxxExceptionInSetUpTest() { printf("%s", "CxxExceptionInSetUpTest destructor " "called as expected.\n"); } virtual void SetUp() { throw std::runtime_error("Standard C++ exception"); } virtual void TearDown() { printf("%s", "CxxExceptionInSetUpTest::TearDown() " "called as expected.\n"); } }; TEST_F(CxxExceptionInSetUpTest, ThrowsExceptionInSetUp) { ADD_FAILURE() << "CxxExceptionInSetUpTest test body " << "called unexpectedly."; } class CxxExceptionInTearDownTest : public Test { public: static void TearDownTestCase() { printf("%s", "CxxExceptionInTearDownTest::TearDownTestCase() " "called as expected.\n"); } protected: ~CxxExceptionInTearDownTest() { printf("%s", "CxxExceptionInTearDownTest destructor " "called as expected.\n"); } virtual void TearDown() { throw std::runtime_error("Standard C++ exception"); } }; TEST_F(CxxExceptionInTearDownTest, ThrowsExceptionInTearDown) {} class CxxExceptionInTestBodyTest : public Test { public: static void TearDownTestCase() { printf("%s", "CxxExceptionInTestBodyTest::TearDownTestCase() " "called as expected.\n"); } protected: ~CxxExceptionInTestBodyTest() { printf("%s", "CxxExceptionInTestBodyTest destructor " "called as expected.\n"); } virtual void TearDown() { printf("%s", "CxxExceptionInTestBodyTest::TearDown() " "called as expected.\n"); } }; TEST_F(CxxExceptionInTestBodyTest, ThrowsStdCxxException) { throw std::runtime_error("Standard C++ exception"); } TEST(CxxExceptionTest, ThrowsNonStdCxxException) { throw "C-string"; } // This terminate handler aborts the program using exit() rather than abort(). // This avoids showing pop-ups on Windows systems and core dumps on Unix-like // ones. void TerminateHandler() { fprintf(stderr, "%s\n", "Unhandled C++ exception terminating the program."); fflush(NULL); exit(3); } #endif // GTEST_HAS_EXCEPTIONS int main(int argc, char** argv) { #if GTEST_HAS_EXCEPTIONS std::set_terminate(&TerminateHandler); #endif testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_color_test.py000077500000000000000000000114571377520261000223550ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2008, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Verifies that Google Test correctly determines whether to use colors.""" __author__ = 'wan@google.com (Zhanyong Wan)' import os import gtest_test_utils IS_WINDOWS = os.name = 'nt' COLOR_ENV_VAR = 'GTEST_COLOR' COLOR_FLAG = 'gtest_color' COMMAND = gtest_test_utils.GetTestExecutablePath('gtest_color_test_') def SetEnvVar(env_var, value): """Sets the env variable to 'value'; unsets it when 'value' is None.""" if value is not None: os.environ[env_var] = value elif env_var in os.environ: del os.environ[env_var] def UsesColor(term, color_env_var, color_flag): """Runs gtest_color_test_ and returns its exit code.""" SetEnvVar('TERM', term) SetEnvVar(COLOR_ENV_VAR, color_env_var) if color_flag is None: args = [] else: args = ['--%s=%s' % (COLOR_FLAG, color_flag)] p = gtest_test_utils.Subprocess([COMMAND] + args) return not p.exited or p.exit_code class GTestColorTest(gtest_test_utils.TestCase): def testNoEnvVarNoFlag(self): """Tests the case when there's neither GTEST_COLOR nor --gtest_color.""" if not IS_WINDOWS: self.assert_(not UsesColor('dumb', None, None)) self.assert_(not UsesColor('emacs', None, None)) self.assert_(not UsesColor('xterm-mono', None, None)) self.assert_(not UsesColor('unknown', None, None)) self.assert_(not UsesColor(None, None, None)) self.assert_(UsesColor('linux', None, None)) self.assert_(UsesColor('cygwin', None, None)) self.assert_(UsesColor('xterm', None, None)) self.assert_(UsesColor('xterm-color', None, None)) self.assert_(UsesColor('xterm-256color', None, None)) def testFlagOnly(self): """Tests the case when there's --gtest_color but not GTEST_COLOR.""" self.assert_(not UsesColor('dumb', None, 'no')) self.assert_(not UsesColor('xterm-color', None, 'no')) if not IS_WINDOWS: self.assert_(not UsesColor('emacs', None, 'auto')) self.assert_(UsesColor('xterm', None, 'auto')) self.assert_(UsesColor('dumb', None, 'yes')) self.assert_(UsesColor('xterm', None, 'yes')) def testEnvVarOnly(self): """Tests the case when there's GTEST_COLOR but not --gtest_color.""" self.assert_(not UsesColor('dumb', 'no', None)) self.assert_(not UsesColor('xterm-color', 'no', None)) if not IS_WINDOWS: self.assert_(not UsesColor('dumb', 'auto', None)) self.assert_(UsesColor('xterm-color', 'auto', None)) self.assert_(UsesColor('dumb', 'yes', None)) self.assert_(UsesColor('xterm-color', 'yes', None)) def testEnvVarAndFlag(self): """Tests the case when there are both GTEST_COLOR and --gtest_color.""" self.assert_(not UsesColor('xterm-color', 'no', 'no')) self.assert_(UsesColor('dumb', 'no', 'yes')) self.assert_(UsesColor('xterm-color', 'no', 'auto')) def testAliasesOfYesAndNo(self): """Tests using aliases in specifying --gtest_color.""" self.assert_(UsesColor('dumb', None, 'true')) self.assert_(UsesColor('dumb', None, 'YES')) self.assert_(UsesColor('dumb', None, 'T')) self.assert_(UsesColor('dumb', None, '1')) self.assert_(not UsesColor('xterm', None, 'f')) self.assert_(not UsesColor('xterm', None, 'false')) self.assert_(not UsesColor('xterm', None, '0')) self.assert_(not UsesColor('xterm', None, 'unknown')) if __name__ == '__main__': gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_color_test_.cc000066400000000000000000000055101377520261000224370ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // A helper program for testing how Google Test determines whether to use // colors in the output. It prints "YES" and returns 1 if Google Test // decides to use colors, and prints "NO" and returns 0 otherwise. #include #include "gtest/gtest.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ using testing::internal::ShouldUseColor; // The purpose of this is to ensure that the UnitTest singleton is // created before main() is entered, and thus that ShouldUseColor() // works the same way as in a real Google-Test-based test. We don't actual // run the TEST itself. TEST(GTestColorTest, Dummy) { } int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); if (ShouldUseColor(true)) { // Google Test decides to use colors in the output (assuming it // goes to a TTY). printf("YES\n"); return 1; } else { // Google Test decides not to use colors in the output. printf("NO\n"); return 0; } } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_env_var_test.py000077500000000000000000000066371377520261000227030ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2008, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Verifies that Google Test correctly parses environment variables.""" __author__ = 'wan@google.com (Zhanyong Wan)' import os import gtest_test_utils IS_WINDOWS = os.name == 'nt' IS_LINUX = os.name == 'posix' and os.uname()[0] == 'Linux' COMMAND = gtest_test_utils.GetTestExecutablePath('gtest_env_var_test_') environ = os.environ.copy() def AssertEq(expected, actual): if expected != actual: print 'Expected: %s' % (expected,) print ' Actual: %s' % (actual,) raise AssertionError def SetEnvVar(env_var, value): """Sets the env variable to 'value'; unsets it when 'value' is None.""" if value is not None: environ[env_var] = value elif env_var in environ: del environ[env_var] def GetFlag(flag): """Runs gtest_env_var_test_ and returns its output.""" args = [COMMAND] if flag is not None: args += [flag] return gtest_test_utils.Subprocess(args, env=environ).output def TestFlag(flag, test_val, default_val): """Verifies that the given flag is affected by the corresponding env var.""" env_var = 'GTEST_' + flag.upper() SetEnvVar(env_var, test_val) AssertEq(test_val, GetFlag(flag)) SetEnvVar(env_var, None) AssertEq(default_val, GetFlag(flag)) class GTestEnvVarTest(gtest_test_utils.TestCase): def testEnvVarAffectsFlag(self): """Tests that environment variable should affect the corresponding flag.""" TestFlag('break_on_failure', '1', '0') TestFlag('color', 'yes', 'auto') TestFlag('filter', 'FooTest.Bar', '*') TestFlag('output', 'xml:tmp/foo.xml', '') TestFlag('print_time', '0', '1') TestFlag('repeat', '999', '1') TestFlag('throw_on_failure', '1', '0') TestFlag('death_test_style', 'threadsafe', 'fast') TestFlag('catch_exceptions', '0', '1') if IS_LINUX: TestFlag('death_test_use_fork', '1', '0') TestFlag('stack_trace_depth', '0', '100') if __name__ == '__main__': gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_env_var_test_.cc000066400000000000000000000067701377520261000227720ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // A helper program for testing that Google Test parses the environment // variables correctly. #include "gtest/gtest.h" #include #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ using ::std::cout; namespace testing { // The purpose of this is to make the test more realistic by ensuring // that the UnitTest singleton is created before main() is entered. // We don't actual run the TEST itself. TEST(GTestEnvVarTest, Dummy) { } void PrintFlag(const char* flag) { if (strcmp(flag, "break_on_failure") == 0) { cout << GTEST_FLAG(break_on_failure); return; } if (strcmp(flag, "catch_exceptions") == 0) { cout << GTEST_FLAG(catch_exceptions); return; } if (strcmp(flag, "color") == 0) { cout << GTEST_FLAG(color); return; } if (strcmp(flag, "death_test_style") == 0) { cout << GTEST_FLAG(death_test_style); return; } if (strcmp(flag, "death_test_use_fork") == 0) { cout << GTEST_FLAG(death_test_use_fork); return; } if (strcmp(flag, "filter") == 0) { cout << GTEST_FLAG(filter); return; } if (strcmp(flag, "output") == 0) { cout << GTEST_FLAG(output); return; } if (strcmp(flag, "print_time") == 0) { cout << GTEST_FLAG(print_time); return; } if (strcmp(flag, "repeat") == 0) { cout << GTEST_FLAG(repeat); return; } if (strcmp(flag, "stack_trace_depth") == 0) { cout << GTEST_FLAG(stack_trace_depth); return; } if (strcmp(flag, "throw_on_failure") == 0) { cout << GTEST_FLAG(throw_on_failure); return; } cout << "Invalid flag name " << flag << ". Valid names are break_on_failure, color, filter, etc.\n"; exit(1); } } // namespace testing int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); if (argc != 2) { cout << "Usage: gtest_env_var_test_ NAME_OF_FLAG\n"; return 1; } testing::PrintFlag(argv[1]); return 0; } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_environment_test.cc000066400000000000000000000147161377520261000235360ustar00rootroot00000000000000// Copyright 2007, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // Tests using global test environments. #include #include #include "gtest/gtest.h" #define GTEST_IMPLEMENTATION_ 1 // Required for the next #include. #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ namespace testing { GTEST_DECLARE_string_(filter); } namespace { enum FailureType { NO_FAILURE, NON_FATAL_FAILURE, FATAL_FAILURE }; // For testing using global test environments. class MyEnvironment : public testing::Environment { public: MyEnvironment() { Reset(); } // Depending on the value of failure_in_set_up_, SetUp() will // generate a non-fatal failure, generate a fatal failure, or // succeed. virtual void SetUp() { set_up_was_run_ = true; switch (failure_in_set_up_) { case NON_FATAL_FAILURE: ADD_FAILURE() << "Expected non-fatal failure in global set-up."; break; case FATAL_FAILURE: FAIL() << "Expected fatal failure in global set-up."; break; default: break; } } // Generates a non-fatal failure. virtual void TearDown() { tear_down_was_run_ = true; ADD_FAILURE() << "Expected non-fatal failure in global tear-down."; } // Resets the state of the environment s.t. it can be reused. void Reset() { failure_in_set_up_ = NO_FAILURE; set_up_was_run_ = false; tear_down_was_run_ = false; } // We call this function to set the type of failure SetUp() should // generate. void set_failure_in_set_up(FailureType type) { failure_in_set_up_ = type; } // Was SetUp() run? bool set_up_was_run() const { return set_up_was_run_; } // Was TearDown() run? bool tear_down_was_run() const { return tear_down_was_run_; } private: FailureType failure_in_set_up_; bool set_up_was_run_; bool tear_down_was_run_; }; // Was the TEST run? bool test_was_run; // The sole purpose of this TEST is to enable us to check whether it // was run. TEST(FooTest, Bar) { test_was_run = true; } // Prints the message and aborts the program if condition is false. void Check(bool condition, const char* msg) { if (!condition) { printf("FAILED: %s\n", msg); testing::internal::posix::Abort(); } } // Runs the tests. Return true iff successful. // // The 'failure' parameter specifies the type of failure that should // be generated by the global set-up. int RunAllTests(MyEnvironment* env, FailureType failure) { env->Reset(); env->set_failure_in_set_up(failure); test_was_run = false; testing::internal::GetUnitTestImpl()->ClearAdHocTestResult(); return RUN_ALL_TESTS(); } } // namespace int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); // Registers a global test environment, and verifies that the // registration function returns its argument. MyEnvironment* const env = new MyEnvironment; Check(testing::AddGlobalTestEnvironment(env) == env, "AddGlobalTestEnvironment() should return its argument."); // Verifies that RUN_ALL_TESTS() runs the tests when the global // set-up is successful. Check(RunAllTests(env, NO_FAILURE) != 0, "RUN_ALL_TESTS() should return non-zero, as the global tear-down " "should generate a failure."); Check(test_was_run, "The tests should run, as the global set-up should generate no " "failure"); Check(env->tear_down_was_run(), "The global tear-down should run, as the global set-up was run."); // Verifies that RUN_ALL_TESTS() runs the tests when the global // set-up generates no fatal failure. Check(RunAllTests(env, NON_FATAL_FAILURE) != 0, "RUN_ALL_TESTS() should return non-zero, as both the global set-up " "and the global tear-down should generate a non-fatal failure."); Check(test_was_run, "The tests should run, as the global set-up should generate no " "fatal failure."); Check(env->tear_down_was_run(), "The global tear-down should run, as the global set-up was run."); // Verifies that RUN_ALL_TESTS() runs no test when the global set-up // generates a fatal failure. Check(RunAllTests(env, FATAL_FAILURE) != 0, "RUN_ALL_TESTS() should return non-zero, as the global set-up " "should generate a fatal failure."); Check(!test_was_run, "The tests should not run, as the global set-up should generate " "a fatal failure."); Check(env->tear_down_was_run(), "The global tear-down should run, as the global set-up was run."); // Verifies that RUN_ALL_TESTS() doesn't do global set-up or // tear-down when there is no test to run. testing::GTEST_FLAG(filter) = "-*"; Check(RunAllTests(env, NO_FAILURE) == 0, "RUN_ALL_TESTS() should return zero, as there is no test to run."); Check(!env->set_up_was_run(), "The global set-up should not run, as there is no test to run."); Check(!env->tear_down_was_run(), "The global tear-down should not run, " "as the global set-up was not run."); printf("PASS\n"); return 0; } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_filter_unittest.py000077500000000000000000000514151377520261000234220ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2005 Google Inc. All Rights Reserved. # # 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 Google Inc. 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. """Unit test for Google Test test filters. A user can specify which test(s) in a Google Test program to run via either the GTEST_FILTER environment variable or the --gtest_filter flag. This script tests such functionality by invoking gtest_filter_unittest_ (a program written with Google Test) with different environments and command line flags. Note that test sharding may also influence which tests are filtered. Therefore, we test that here also. """ __author__ = 'wan@google.com (Zhanyong Wan)' import os import re import sets import sys import gtest_test_utils # Constants. # Checks if this platform can pass empty environment variables to child # processes. We set an env variable to an empty string and invoke a python # script in a subprocess to print whether the variable is STILL in # os.environ. We then use 'eval' to parse the child's output so that an # exception is thrown if the input is anything other than 'True' nor 'False'. os.environ['EMPTY_VAR'] = '' child = gtest_test_utils.Subprocess( [sys.executable, '-c', 'import os; print \'EMPTY_VAR\' in os.environ']) CAN_PASS_EMPTY_ENV = eval(child.output) # Check if this platform can unset environment variables in child processes. # We set an env variable to a non-empty string, unset it, and invoke # a python script in a subprocess to print whether the variable # is NO LONGER in os.environ. # We use 'eval' to parse the child's output so that an exception # is thrown if the input is neither 'True' nor 'False'. os.environ['UNSET_VAR'] = 'X' del os.environ['UNSET_VAR'] child = gtest_test_utils.Subprocess( [sys.executable, '-c', 'import os; print \'UNSET_VAR\' not in os.environ']) CAN_UNSET_ENV = eval(child.output) # Checks if we should test with an empty filter. This doesn't # make sense on platforms that cannot pass empty env variables (Win32) # and on platforms that cannot unset variables (since we cannot tell # the difference between "" and NULL -- Borland and Solaris < 5.10) CAN_TEST_EMPTY_FILTER = (CAN_PASS_EMPTY_ENV and CAN_UNSET_ENV) # The environment variable for specifying the test filters. FILTER_ENV_VAR = 'GTEST_FILTER' # The environment variables for test sharding. TOTAL_SHARDS_ENV_VAR = 'GTEST_TOTAL_SHARDS' SHARD_INDEX_ENV_VAR = 'GTEST_SHARD_INDEX' SHARD_STATUS_FILE_ENV_VAR = 'GTEST_SHARD_STATUS_FILE' # The command line flag for specifying the test filters. FILTER_FLAG = 'gtest_filter' # The command line flag for including disabled tests. ALSO_RUN_DISABED_TESTS_FLAG = 'gtest_also_run_disabled_tests' # Command to run the gtest_filter_unittest_ program. COMMAND = gtest_test_utils.GetTestExecutablePath('gtest_filter_unittest_') # Regex for determining whether parameterized tests are enabled in the binary. PARAM_TEST_REGEX = re.compile(r'/ParamTest') # Regex for parsing test case names from Google Test's output. TEST_CASE_REGEX = re.compile(r'^\[\-+\] \d+ tests? from (\w+(/\w+)?)') # Regex for parsing test names from Google Test's output. TEST_REGEX = re.compile(r'^\[\s*RUN\s*\].*\.(\w+(/\w+)?)') # The command line flag to tell Google Test to output the list of tests it # will run. LIST_TESTS_FLAG = '--gtest_list_tests' # Indicates whether Google Test supports death tests. SUPPORTS_DEATH_TESTS = 'HasDeathTest' in gtest_test_utils.Subprocess( [COMMAND, LIST_TESTS_FLAG]).output # Full names of all tests in gtest_filter_unittests_. PARAM_TESTS = [ 'SeqP/ParamTest.TestX/0', 'SeqP/ParamTest.TestX/1', 'SeqP/ParamTest.TestY/0', 'SeqP/ParamTest.TestY/1', 'SeqQ/ParamTest.TestX/0', 'SeqQ/ParamTest.TestX/1', 'SeqQ/ParamTest.TestY/0', 'SeqQ/ParamTest.TestY/1', ] DISABLED_TESTS = [ 'BarTest.DISABLED_TestFour', 'BarTest.DISABLED_TestFive', 'BazTest.DISABLED_TestC', 'DISABLED_FoobarTest.Test1', 'DISABLED_FoobarTest.DISABLED_Test2', 'DISABLED_FoobarbazTest.TestA', ] if SUPPORTS_DEATH_TESTS: DEATH_TESTS = [ 'HasDeathTest.Test1', 'HasDeathTest.Test2', ] else: DEATH_TESTS = [] # All the non-disabled tests. ACTIVE_TESTS = [ 'FooTest.Abc', 'FooTest.Xyz', 'BarTest.TestOne', 'BarTest.TestTwo', 'BarTest.TestThree', 'BazTest.TestOne', 'BazTest.TestA', 'BazTest.TestB', ] + DEATH_TESTS + PARAM_TESTS param_tests_present = None # Utilities. environ = os.environ.copy() def SetEnvVar(env_var, value): """Sets the env variable to 'value'; unsets it when 'value' is None.""" if value is not None: environ[env_var] = value elif env_var in environ: del environ[env_var] def RunAndReturnOutput(args = None): """Runs the test program and returns its output.""" return gtest_test_utils.Subprocess([COMMAND] + (args or []), env=environ).output def RunAndExtractTestList(args = None): """Runs the test program and returns its exit code and a list of tests run.""" p = gtest_test_utils.Subprocess([COMMAND] + (args or []), env=environ) tests_run = [] test_case = '' test = '' for line in p.output.split('\n'): match = TEST_CASE_REGEX.match(line) if match is not None: test_case = match.group(1) else: match = TEST_REGEX.match(line) if match is not None: test = match.group(1) tests_run.append(test_case + '.' + test) return (tests_run, p.exit_code) def InvokeWithModifiedEnv(extra_env, function, *args, **kwargs): """Runs the given function and arguments in a modified environment.""" try: original_env = environ.copy() environ.update(extra_env) return function(*args, **kwargs) finally: environ.clear() environ.update(original_env) def RunWithSharding(total_shards, shard_index, command): """Runs a test program shard and returns exit code and a list of tests run.""" extra_env = {SHARD_INDEX_ENV_VAR: str(shard_index), TOTAL_SHARDS_ENV_VAR: str(total_shards)} return InvokeWithModifiedEnv(extra_env, RunAndExtractTestList, command) # The unit test. class GTestFilterUnitTest(gtest_test_utils.TestCase): """Tests the env variable or the command line flag to filter tests.""" # Utilities. def AssertSetEqual(self, lhs, rhs): """Asserts that two sets are equal.""" for elem in lhs: self.assert_(elem in rhs, '%s in %s' % (elem, rhs)) for elem in rhs: self.assert_(elem in lhs, '%s in %s' % (elem, lhs)) def AssertPartitionIsValid(self, set_var, list_of_sets): """Asserts that list_of_sets is a valid partition of set_var.""" full_partition = [] for slice_var in list_of_sets: full_partition.extend(slice_var) self.assertEqual(len(set_var), len(full_partition)) self.assertEqual(sets.Set(set_var), sets.Set(full_partition)) def AdjustForParameterizedTests(self, tests_to_run): """Adjust tests_to_run in case value parameterized tests are disabled.""" global param_tests_present if not param_tests_present: return list(sets.Set(tests_to_run) - sets.Set(PARAM_TESTS)) else: return tests_to_run def RunAndVerify(self, gtest_filter, tests_to_run): """Checks that the binary runs correct set of tests for a given filter.""" tests_to_run = self.AdjustForParameterizedTests(tests_to_run) # First, tests using the environment variable. # Windows removes empty variables from the environment when passing it # to a new process. This means it is impossible to pass an empty filter # into a process using the environment variable. However, we can still # test the case when the variable is not supplied (i.e., gtest_filter is # None). # pylint: disable-msg=C6403 if CAN_TEST_EMPTY_FILTER or gtest_filter != '': SetEnvVar(FILTER_ENV_VAR, gtest_filter) tests_run = RunAndExtractTestList()[0] SetEnvVar(FILTER_ENV_VAR, None) self.AssertSetEqual(tests_run, tests_to_run) # pylint: enable-msg=C6403 # Next, tests using the command line flag. if gtest_filter is None: args = [] else: args = ['--%s=%s' % (FILTER_FLAG, gtest_filter)] tests_run = RunAndExtractTestList(args)[0] self.AssertSetEqual(tests_run, tests_to_run) def RunAndVerifyWithSharding(self, gtest_filter, total_shards, tests_to_run, args=None, check_exit_0=False): """Checks that binary runs correct tests for the given filter and shard. Runs all shards of gtest_filter_unittest_ with the given filter, and verifies that the right set of tests were run. The union of tests run on each shard should be identical to tests_to_run, without duplicates. Args: gtest_filter: A filter to apply to the tests. total_shards: A total number of shards to split test run into. tests_to_run: A set of tests expected to run. args : Arguments to pass to the to the test binary. check_exit_0: When set to a true value, make sure that all shards return 0. """ tests_to_run = self.AdjustForParameterizedTests(tests_to_run) # Windows removes empty variables from the environment when passing it # to a new process. This means it is impossible to pass an empty filter # into a process using the environment variable. However, we can still # test the case when the variable is not supplied (i.e., gtest_filter is # None). # pylint: disable-msg=C6403 if CAN_TEST_EMPTY_FILTER or gtest_filter != '': SetEnvVar(FILTER_ENV_VAR, gtest_filter) partition = [] for i in range(0, total_shards): (tests_run, exit_code) = RunWithSharding(total_shards, i, args) if check_exit_0: self.assertEqual(0, exit_code) partition.append(tests_run) self.AssertPartitionIsValid(tests_to_run, partition) SetEnvVar(FILTER_ENV_VAR, None) # pylint: enable-msg=C6403 def RunAndVerifyAllowingDisabled(self, gtest_filter, tests_to_run): """Checks that the binary runs correct set of tests for the given filter. Runs gtest_filter_unittest_ with the given filter, and enables disabled tests. Verifies that the right set of tests were run. Args: gtest_filter: A filter to apply to the tests. tests_to_run: A set of tests expected to run. """ tests_to_run = self.AdjustForParameterizedTests(tests_to_run) # Construct the command line. args = ['--%s' % ALSO_RUN_DISABED_TESTS_FLAG] if gtest_filter is not None: args.append('--%s=%s' % (FILTER_FLAG, gtest_filter)) tests_run = RunAndExtractTestList(args)[0] self.AssertSetEqual(tests_run, tests_to_run) def setUp(self): """Sets up test case. Determines whether value-parameterized tests are enabled in the binary and sets the flags accordingly. """ global param_tests_present if param_tests_present is None: param_tests_present = PARAM_TEST_REGEX.search( RunAndReturnOutput()) is not None def testDefaultBehavior(self): """Tests the behavior of not specifying the filter.""" self.RunAndVerify(None, ACTIVE_TESTS) def testDefaultBehaviorWithShards(self): """Tests the behavior without the filter, with sharding enabled.""" self.RunAndVerifyWithSharding(None, 1, ACTIVE_TESTS) self.RunAndVerifyWithSharding(None, 2, ACTIVE_TESTS) self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS) - 1, ACTIVE_TESTS) self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS), ACTIVE_TESTS) self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS) + 1, ACTIVE_TESTS) def testEmptyFilter(self): """Tests an empty filter.""" self.RunAndVerify('', []) self.RunAndVerifyWithSharding('', 1, []) self.RunAndVerifyWithSharding('', 2, []) def testBadFilter(self): """Tests a filter that matches nothing.""" self.RunAndVerify('BadFilter', []) self.RunAndVerifyAllowingDisabled('BadFilter', []) def testFullName(self): """Tests filtering by full name.""" self.RunAndVerify('FooTest.Xyz', ['FooTest.Xyz']) self.RunAndVerifyAllowingDisabled('FooTest.Xyz', ['FooTest.Xyz']) self.RunAndVerifyWithSharding('FooTest.Xyz', 5, ['FooTest.Xyz']) def testUniversalFilters(self): """Tests filters that match everything.""" self.RunAndVerify('*', ACTIVE_TESTS) self.RunAndVerify('*.*', ACTIVE_TESTS) self.RunAndVerifyWithSharding('*.*', len(ACTIVE_TESTS) - 3, ACTIVE_TESTS) self.RunAndVerifyAllowingDisabled('*', ACTIVE_TESTS + DISABLED_TESTS) self.RunAndVerifyAllowingDisabled('*.*', ACTIVE_TESTS + DISABLED_TESTS) def testFilterByTestCase(self): """Tests filtering by test case name.""" self.RunAndVerify('FooTest.*', ['FooTest.Abc', 'FooTest.Xyz']) BAZ_TESTS = ['BazTest.TestOne', 'BazTest.TestA', 'BazTest.TestB'] self.RunAndVerify('BazTest.*', BAZ_TESTS) self.RunAndVerifyAllowingDisabled('BazTest.*', BAZ_TESTS + ['BazTest.DISABLED_TestC']) def testFilterByTest(self): """Tests filtering by test name.""" self.RunAndVerify('*.TestOne', ['BarTest.TestOne', 'BazTest.TestOne']) def testFilterDisabledTests(self): """Select only the disabled tests to run.""" self.RunAndVerify('DISABLED_FoobarTest.Test1', []) self.RunAndVerifyAllowingDisabled('DISABLED_FoobarTest.Test1', ['DISABLED_FoobarTest.Test1']) self.RunAndVerify('*DISABLED_*', []) self.RunAndVerifyAllowingDisabled('*DISABLED_*', DISABLED_TESTS) self.RunAndVerify('*.DISABLED_*', []) self.RunAndVerifyAllowingDisabled('*.DISABLED_*', [ 'BarTest.DISABLED_TestFour', 'BarTest.DISABLED_TestFive', 'BazTest.DISABLED_TestC', 'DISABLED_FoobarTest.DISABLED_Test2', ]) self.RunAndVerify('DISABLED_*', []) self.RunAndVerifyAllowingDisabled('DISABLED_*', [ 'DISABLED_FoobarTest.Test1', 'DISABLED_FoobarTest.DISABLED_Test2', 'DISABLED_FoobarbazTest.TestA', ]) def testWildcardInTestCaseName(self): """Tests using wildcard in the test case name.""" self.RunAndVerify('*a*.*', [ 'BarTest.TestOne', 'BarTest.TestTwo', 'BarTest.TestThree', 'BazTest.TestOne', 'BazTest.TestA', 'BazTest.TestB', ] + DEATH_TESTS + PARAM_TESTS) def testWildcardInTestName(self): """Tests using wildcard in the test name.""" self.RunAndVerify('*.*A*', ['FooTest.Abc', 'BazTest.TestA']) def testFilterWithoutDot(self): """Tests a filter that has no '.' in it.""" self.RunAndVerify('*z*', [ 'FooTest.Xyz', 'BazTest.TestOne', 'BazTest.TestA', 'BazTest.TestB', ]) def testTwoPatterns(self): """Tests filters that consist of two patterns.""" self.RunAndVerify('Foo*.*:*A*', [ 'FooTest.Abc', 'FooTest.Xyz', 'BazTest.TestA', ]) # An empty pattern + a non-empty one self.RunAndVerify(':*A*', ['FooTest.Abc', 'BazTest.TestA']) def testThreePatterns(self): """Tests filters that consist of three patterns.""" self.RunAndVerify('*oo*:*A*:*One', [ 'FooTest.Abc', 'FooTest.Xyz', 'BarTest.TestOne', 'BazTest.TestOne', 'BazTest.TestA', ]) # The 2nd pattern is empty. self.RunAndVerify('*oo*::*One', [ 'FooTest.Abc', 'FooTest.Xyz', 'BarTest.TestOne', 'BazTest.TestOne', ]) # The last 2 patterns are empty. self.RunAndVerify('*oo*::', [ 'FooTest.Abc', 'FooTest.Xyz', ]) def testNegativeFilters(self): self.RunAndVerify('*-BazTest.TestOne', [ 'FooTest.Abc', 'FooTest.Xyz', 'BarTest.TestOne', 'BarTest.TestTwo', 'BarTest.TestThree', 'BazTest.TestA', 'BazTest.TestB', ] + DEATH_TESTS + PARAM_TESTS) self.RunAndVerify('*-FooTest.Abc:BazTest.*', [ 'FooTest.Xyz', 'BarTest.TestOne', 'BarTest.TestTwo', 'BarTest.TestThree', ] + DEATH_TESTS + PARAM_TESTS) self.RunAndVerify('BarTest.*-BarTest.TestOne', [ 'BarTest.TestTwo', 'BarTest.TestThree', ]) # Tests without leading '*'. self.RunAndVerify('-FooTest.Abc:FooTest.Xyz:BazTest.*', [ 'BarTest.TestOne', 'BarTest.TestTwo', 'BarTest.TestThree', ] + DEATH_TESTS + PARAM_TESTS) # Value parameterized tests. self.RunAndVerify('*/*', PARAM_TESTS) # Value parameterized tests filtering by the sequence name. self.RunAndVerify('SeqP/*', [ 'SeqP/ParamTest.TestX/0', 'SeqP/ParamTest.TestX/1', 'SeqP/ParamTest.TestY/0', 'SeqP/ParamTest.TestY/1', ]) # Value parameterized tests filtering by the test name. self.RunAndVerify('*/0', [ 'SeqP/ParamTest.TestX/0', 'SeqP/ParamTest.TestY/0', 'SeqQ/ParamTest.TestX/0', 'SeqQ/ParamTest.TestY/0', ]) def testFlagOverridesEnvVar(self): """Tests that the filter flag overrides the filtering env. variable.""" SetEnvVar(FILTER_ENV_VAR, 'Foo*') args = ['--%s=%s' % (FILTER_FLAG, '*One')] tests_run = RunAndExtractTestList(args)[0] SetEnvVar(FILTER_ENV_VAR, None) self.AssertSetEqual(tests_run, ['BarTest.TestOne', 'BazTest.TestOne']) def testShardStatusFileIsCreated(self): """Tests that the shard file is created if specified in the environment.""" shard_status_file = os.path.join(gtest_test_utils.GetTempDir(), 'shard_status_file') self.assert_(not os.path.exists(shard_status_file)) extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file} try: InvokeWithModifiedEnv(extra_env, RunAndReturnOutput) finally: self.assert_(os.path.exists(shard_status_file)) os.remove(shard_status_file) def testShardStatusFileIsCreatedWithListTests(self): """Tests that the shard file is created with the "list_tests" flag.""" shard_status_file = os.path.join(gtest_test_utils.GetTempDir(), 'shard_status_file2') self.assert_(not os.path.exists(shard_status_file)) extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file} try: output = InvokeWithModifiedEnv(extra_env, RunAndReturnOutput, [LIST_TESTS_FLAG]) finally: # This assertion ensures that Google Test enumerated the tests as # opposed to running them. self.assert_('[==========]' not in output, 'Unexpected output during test enumeration.\n' 'Please ensure that LIST_TESTS_FLAG is assigned the\n' 'correct flag value for listing Google Test tests.') self.assert_(os.path.exists(shard_status_file)) os.remove(shard_status_file) if SUPPORTS_DEATH_TESTS: def testShardingWorksWithDeathTests(self): """Tests integration with death tests and sharding.""" gtest_filter = 'HasDeathTest.*:SeqP/*' expected_tests = [ 'HasDeathTest.Test1', 'HasDeathTest.Test2', 'SeqP/ParamTest.TestX/0', 'SeqP/ParamTest.TestX/1', 'SeqP/ParamTest.TestY/0', 'SeqP/ParamTest.TestY/1', ] for flag in ['--gtest_death_test_style=threadsafe', '--gtest_death_test_style=fast']: self.RunAndVerifyWithSharding(gtest_filter, 3, expected_tests, check_exit_0=True, args=[flag]) self.RunAndVerifyWithSharding(gtest_filter, 5, expected_tests, check_exit_0=True, args=[flag]) if __name__ == '__main__': gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_filter_unittest_.cc000066400000000000000000000067541377520261000235210ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Unit test for Google Test test filters. // // A user can specify which test(s) in a Google Test program to run via // either the GTEST_FILTER environment variable or the --gtest_filter // flag. This is used for testing such functionality. // // The program will be invoked from a Python unit test. Don't run it // directly. #include "gtest/gtest.h" namespace { // Test case FooTest. class FooTest : public testing::Test { }; TEST_F(FooTest, Abc) { } TEST_F(FooTest, Xyz) { FAIL() << "Expected failure."; } // Test case BarTest. TEST(BarTest, TestOne) { } TEST(BarTest, TestTwo) { } TEST(BarTest, TestThree) { } TEST(BarTest, DISABLED_TestFour) { FAIL() << "Expected failure."; } TEST(BarTest, DISABLED_TestFive) { FAIL() << "Expected failure."; } // Test case BazTest. TEST(BazTest, TestOne) { FAIL() << "Expected failure."; } TEST(BazTest, TestA) { } TEST(BazTest, TestB) { } TEST(BazTest, DISABLED_TestC) { FAIL() << "Expected failure."; } // Test case HasDeathTest TEST(HasDeathTest, Test1) { EXPECT_DEATH_IF_SUPPORTED(exit(1), ".*"); } // We need at least two death tests to make sure that the all death tests // aren't on the first shard. TEST(HasDeathTest, Test2) { EXPECT_DEATH_IF_SUPPORTED(exit(1), ".*"); } // Test case FoobarTest TEST(DISABLED_FoobarTest, Test1) { FAIL() << "Expected failure."; } TEST(DISABLED_FoobarTest, DISABLED_Test2) { FAIL() << "Expected failure."; } // Test case FoobarbazTest TEST(DISABLED_FoobarbazTest, TestA) { FAIL() << "Expected failure."; } #if GTEST_HAS_PARAM_TEST class ParamTest : public testing::TestWithParam { }; TEST_P(ParamTest, TestX) { } TEST_P(ParamTest, TestY) { } INSTANTIATE_TEST_CASE_P(SeqP, ParamTest, testing::Values(1, 2)); INSTANTIATE_TEST_CASE_P(SeqQ, ParamTest, testing::Values(5, 6)); #endif // GTEST_HAS_PARAM_TEST } // namespace int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_help_test.py000077500000000000000000000133401377520261000221600ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2009, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Tests the --help flag of Google C++ Testing Framework. SYNOPSIS gtest_help_test.py --build_dir=BUILD/DIR # where BUILD/DIR contains the built gtest_help_test_ file. gtest_help_test.py """ __author__ = 'wan@google.com (Zhanyong Wan)' import os import re import gtest_test_utils IS_LINUX = os.name == 'posix' and os.uname()[0] == 'Linux' IS_WINDOWS = os.name == 'nt' PROGRAM_PATH = gtest_test_utils.GetTestExecutablePath('gtest_help_test_') FLAG_PREFIX = '--gtest_' DEATH_TEST_STYLE_FLAG = FLAG_PREFIX + 'death_test_style' STREAM_RESULT_TO_FLAG = FLAG_PREFIX + 'stream_result_to' UNKNOWN_FLAG = FLAG_PREFIX + 'unknown_flag_for_testing' LIST_TESTS_FLAG = FLAG_PREFIX + 'list_tests' INCORRECT_FLAG_VARIANTS = [re.sub('^--', '-', LIST_TESTS_FLAG), re.sub('^--', '/', LIST_TESTS_FLAG), re.sub('_', '-', LIST_TESTS_FLAG)] INTERNAL_FLAG_FOR_TESTING = FLAG_PREFIX + 'internal_flag_for_testing' SUPPORTS_DEATH_TESTS = "DeathTest" in gtest_test_utils.Subprocess( [PROGRAM_PATH, LIST_TESTS_FLAG]).output # The help message must match this regex. HELP_REGEX = re.compile( FLAG_PREFIX + r'list_tests.*' + FLAG_PREFIX + r'filter=.*' + FLAG_PREFIX + r'also_run_disabled_tests.*' + FLAG_PREFIX + r'repeat=.*' + FLAG_PREFIX + r'shuffle.*' + FLAG_PREFIX + r'random_seed=.*' + FLAG_PREFIX + r'color=.*' + FLAG_PREFIX + r'print_time.*' + FLAG_PREFIX + r'output=.*' + FLAG_PREFIX + r'break_on_failure.*' + FLAG_PREFIX + r'throw_on_failure.*' + FLAG_PREFIX + r'catch_exceptions=0.*', re.DOTALL) def RunWithFlag(flag): """Runs gtest_help_test_ with the given flag. Returns: the exit code and the text output as a tuple. Args: flag: the command-line flag to pass to gtest_help_test_, or None. """ if flag is None: command = [PROGRAM_PATH] else: command = [PROGRAM_PATH, flag] child = gtest_test_utils.Subprocess(command) return child.exit_code, child.output class GTestHelpTest(gtest_test_utils.TestCase): """Tests the --help flag and its equivalent forms.""" def TestHelpFlag(self, flag): """Verifies correct behavior when help flag is specified. The right message must be printed and the tests must skipped when the given flag is specified. Args: flag: A flag to pass to the binary or None. """ exit_code, output = RunWithFlag(flag) self.assertEquals(0, exit_code) self.assert_(HELP_REGEX.search(output), output) if IS_LINUX: self.assert_(STREAM_RESULT_TO_FLAG in output, output) else: self.assert_(STREAM_RESULT_TO_FLAG not in output, output) if SUPPORTS_DEATH_TESTS and not IS_WINDOWS: self.assert_(DEATH_TEST_STYLE_FLAG in output, output) else: self.assert_(DEATH_TEST_STYLE_FLAG not in output, output) def TestNonHelpFlag(self, flag): """Verifies correct behavior when no help flag is specified. Verifies that when no help flag is specified, the tests are run and the help message is not printed. Args: flag: A flag to pass to the binary or None. """ exit_code, output = RunWithFlag(flag) self.assert_(exit_code != 0) self.assert_(not HELP_REGEX.search(output), output) def testPrintsHelpWithFullFlag(self): self.TestHelpFlag('--help') def testPrintsHelpWithShortFlag(self): self.TestHelpFlag('-h') def testPrintsHelpWithQuestionFlag(self): self.TestHelpFlag('-?') def testPrintsHelpWithWindowsStyleQuestionFlag(self): self.TestHelpFlag('/?') def testPrintsHelpWithUnrecognizedGoogleTestFlag(self): self.TestHelpFlag(UNKNOWN_FLAG) def testPrintsHelpWithIncorrectFlagStyle(self): for incorrect_flag in INCORRECT_FLAG_VARIANTS: self.TestHelpFlag(incorrect_flag) def testRunsTestsWithoutHelpFlag(self): """Verifies that when no help flag is specified, the tests are run and the help message is not printed.""" self.TestNonHelpFlag(None) def testRunsTestsWithGtestInternalFlag(self): """Verifies that the tests are run and no help message is printed when a flag starting with Google Test prefix and 'internal_' is supplied.""" self.TestNonHelpFlag(INTERNAL_FLAG_FOR_TESTING) if __name__ == '__main__': gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_help_test_.cc000066400000000000000000000041231377520261000222500ustar00rootroot00000000000000// Copyright 2009, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // This program is meant to be run by gtest_help_test.py. Do not run // it directly. #include "gtest/gtest.h" // When a help flag is specified, this program should skip the tests // and exit with 0; otherwise the following test will be executed, // causing this program to exit with a non-zero code. TEST(HelpFlagTest, ShouldNotBeRun) { ASSERT_TRUE(false) << "Tests shouldn't be run when --help is specified."; } #if GTEST_HAS_DEATH_TEST TEST(DeathTest, UsedByPythonScriptToDetectSupportForDeathTestsInThisBinary) {} #endif dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_list_tests_unittest.py000077500000000000000000000145631377520261000243350ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2006, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Unit test for Google Test's --gtest_list_tests flag. A user can ask Google Test to list all tests by specifying the --gtest_list_tests flag. This script tests such functionality by invoking gtest_list_tests_unittest_ (a program written with Google Test) the command line flags. """ __author__ = 'phanna@google.com (Patrick Hanna)' import gtest_test_utils import re # Constants. # The command line flag for enabling/disabling listing all tests. LIST_TESTS_FLAG = 'gtest_list_tests' # Path to the gtest_list_tests_unittest_ program. EXE_PATH = gtest_test_utils.GetTestExecutablePath('gtest_list_tests_unittest_') # The expected output when running gtest_list_tests_unittest_ with # --gtest_list_tests EXPECTED_OUTPUT_NO_FILTER_RE = re.compile(r"""FooDeathTest\. Test1 Foo\. Bar1 Bar2 DISABLED_Bar3 Abc\. Xyz Def FooBar\. Baz FooTest\. Test1 DISABLED_Test2 Test3 TypedTest/0\. # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. TestA TestB TypedTest/1\. # TypeParam = int\s*\* TestA TestB TypedTest/2\. # TypeParam = .*MyArray TestA TestB My/TypeParamTest/0\. # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. TestA TestB My/TypeParamTest/1\. # TypeParam = int\s*\* TestA TestB My/TypeParamTest/2\. # TypeParam = .*MyArray TestA TestB MyInstantiation/ValueParamTest\. TestA/0 # GetParam\(\) = one line TestA/1 # GetParam\(\) = two\\nlines TestA/2 # GetParam\(\) = a very\\nlo{241}\.\.\. TestB/0 # GetParam\(\) = one line TestB/1 # GetParam\(\) = two\\nlines TestB/2 # GetParam\(\) = a very\\nlo{241}\.\.\. """) # The expected output when running gtest_list_tests_unittest_ with # --gtest_list_tests and --gtest_filter=Foo*. EXPECTED_OUTPUT_FILTER_FOO_RE = re.compile(r"""FooDeathTest\. Test1 Foo\. Bar1 Bar2 DISABLED_Bar3 FooBar\. Baz FooTest\. Test1 DISABLED_Test2 Test3 """) # Utilities. def Run(args): """Runs gtest_list_tests_unittest_ and returns the list of tests printed.""" return gtest_test_utils.Subprocess([EXE_PATH] + args, capture_stderr=False).output # The unit test. class GTestListTestsUnitTest(gtest_test_utils.TestCase): """Tests using the --gtest_list_tests flag to list all tests.""" def RunAndVerify(self, flag_value, expected_output_re, other_flag): """Runs gtest_list_tests_unittest_ and verifies that it prints the correct tests. Args: flag_value: value of the --gtest_list_tests flag; None if the flag should not be present. expected_output_re: regular expression that matches the expected output after running command; other_flag: a different flag to be passed to command along with gtest_list_tests; None if the flag should not be present. """ if flag_value is None: flag = '' flag_expression = 'not set' elif flag_value == '0': flag = '--%s=0' % LIST_TESTS_FLAG flag_expression = '0' else: flag = '--%s' % LIST_TESTS_FLAG flag_expression = '1' args = [flag] if other_flag is not None: args += [other_flag] output = Run(args) if expected_output_re: self.assert_( expected_output_re.match(output), ('when %s is %s, the output of "%s" is "%s",\n' 'which does not match regex "%s"' % (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output, expected_output_re.pattern))) else: self.assert_( not EXPECTED_OUTPUT_NO_FILTER_RE.match(output), ('when %s is %s, the output of "%s" is "%s"'% (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output))) def testDefaultBehavior(self): """Tests the behavior of the default mode.""" self.RunAndVerify(flag_value=None, expected_output_re=None, other_flag=None) def testFlag(self): """Tests using the --gtest_list_tests flag.""" self.RunAndVerify(flag_value='0', expected_output_re=None, other_flag=None) self.RunAndVerify(flag_value='1', expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE, other_flag=None) def testOverrideNonFilterFlags(self): """Tests that --gtest_list_tests overrides the non-filter flags.""" self.RunAndVerify(flag_value='1', expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE, other_flag='--gtest_break_on_failure') def testWithFilterFlags(self): """Tests that --gtest_list_tests takes into account the --gtest_filter flag.""" self.RunAndVerify(flag_value='1', expected_output_re=EXPECTED_OUTPUT_FILTER_FOO_RE, other_flag='--gtest_filter=Foo*') if __name__ == '__main__': gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_list_tests_unittest_.cc000066400000000000000000000111461377520261000244200ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: phanna@google.com (Patrick Hanna) // Unit test for Google Test's --gtest_list_tests flag. // // A user can ask Google Test to list all tests that will run // so that when using a filter, a user will know what // tests to look for. The tests will not be run after listing. // // This program will be invoked from a Python unit test. // Don't run it directly. #include "gtest/gtest.h" // Several different test cases and tests that will be listed. TEST(Foo, Bar1) { } TEST(Foo, Bar2) { } TEST(Foo, DISABLED_Bar3) { } TEST(Abc, Xyz) { } TEST(Abc, Def) { } TEST(FooBar, Baz) { } class FooTest : public testing::Test { }; TEST_F(FooTest, Test1) { } TEST_F(FooTest, DISABLED_Test2) { } TEST_F(FooTest, Test3) { } TEST(FooDeathTest, Test1) { } // A group of value-parameterized tests. class MyType { public: explicit MyType(const std::string& a_value) : value_(a_value) {} const std::string& value() const { return value_; } private: std::string value_; }; // Teaches Google Test how to print a MyType. void PrintTo(const MyType& x, std::ostream* os) { *os << x.value(); } class ValueParamTest : public testing::TestWithParam { }; TEST_P(ValueParamTest, TestA) { } TEST_P(ValueParamTest, TestB) { } INSTANTIATE_TEST_CASE_P( MyInstantiation, ValueParamTest, testing::Values(MyType("one line"), MyType("two\nlines"), MyType("a very\nloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong line"))); // NOLINT // A group of typed tests. // A deliberately long type name for testing the line-truncating // behavior when printing a type parameter. class VeryLoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooogName { // NOLINT }; template class TypedTest : public testing::Test { }; template class MyArray { }; typedef testing::Types > MyTypes; TYPED_TEST_CASE(TypedTest, MyTypes); TYPED_TEST(TypedTest, TestA) { } TYPED_TEST(TypedTest, TestB) { } // A group of type-parameterized tests. template class TypeParamTest : public testing::Test { }; TYPED_TEST_CASE_P(TypeParamTest); TYPED_TEST_P(TypeParamTest, TestA) { } TYPED_TEST_P(TypeParamTest, TestB) { } REGISTER_TYPED_TEST_CASE_P(TypeParamTest, TestA, TestB); INSTANTIATE_TYPED_TEST_CASE_P(My, TypeParamTest, MyTypes); int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_main_unittest.cc000066400000000000000000000035401377520261000230070ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #include "gtest/gtest.h" // Tests that we don't have to define main() when we link to // gtest_main instead of gtest. namespace { TEST(GTestMainTest, ShouldSucceed) { } } // namespace // We are using the main() function defined in src/gtest_main.cc, so // we don't define it here. dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_no_test_unittest.cc000066400000000000000000000046171377520261000235440ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // Tests that a Google Test program that has no test defined can run // successfully. // // Author: wan@google.com (Zhanyong Wan) #include "gtest/gtest.h" int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); // An ad-hoc assertion outside of all tests. // // This serves three purposes: // // 1. It verifies that an ad-hoc assertion can be executed even if // no test is defined. // 2. It verifies that a failed ad-hoc assertion causes the test // program to fail. // 3. We had a bug where the XML output won't be generated if an // assertion is executed before RUN_ALL_TESTS() is called, even // though --gtest_output=xml is specified. This makes sure the // bug is fixed and doesn't regress. EXPECT_EQ(1, 2); // The above EXPECT_EQ() should cause RUN_ALL_TESTS() to return non-zero. return RUN_ALL_TESTS() ? 0 : 1; } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_output_test.py000077500000000000000000000273451377520261000226020ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2008, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Tests the text output of Google C++ Testing Framework. SYNOPSIS gtest_output_test.py --build_dir=BUILD/DIR --gengolden # where BUILD/DIR contains the built gtest_output_test_ file. gtest_output_test.py --gengolden gtest_output_test.py """ __author__ = 'wan@google.com (Zhanyong Wan)' import os import re import sys import gtest_test_utils # The flag for generating the golden file GENGOLDEN_FLAG = '--gengolden' CATCH_EXCEPTIONS_ENV_VAR_NAME = 'GTEST_CATCH_EXCEPTIONS' IS_WINDOWS = os.name == 'nt' # TODO(vladl@google.com): remove the _lin suffix. GOLDEN_NAME = 'gtest_output_test_golden_lin.txt' PROGRAM_PATH = gtest_test_utils.GetTestExecutablePath('gtest_output_test_') # At least one command we exercise must not have the # --gtest_internal_skip_environment_and_ad_hoc_tests flag. COMMAND_LIST_TESTS = ({}, [PROGRAM_PATH, '--gtest_list_tests']) COMMAND_WITH_COLOR = ({}, [PROGRAM_PATH, '--gtest_color=yes']) COMMAND_WITH_TIME = ({}, [PROGRAM_PATH, '--gtest_print_time', '--gtest_internal_skip_environment_and_ad_hoc_tests', '--gtest_filter=FatalFailureTest.*:LoggingTest.*']) COMMAND_WITH_DISABLED = ( {}, [PROGRAM_PATH, '--gtest_also_run_disabled_tests', '--gtest_internal_skip_environment_and_ad_hoc_tests', '--gtest_filter=*DISABLED_*']) COMMAND_WITH_SHARDING = ( {'GTEST_SHARD_INDEX': '1', 'GTEST_TOTAL_SHARDS': '2'}, [PROGRAM_PATH, '--gtest_internal_skip_environment_and_ad_hoc_tests', '--gtest_filter=PassingTest.*']) GOLDEN_PATH = os.path.join(gtest_test_utils.GetSourceDir(), GOLDEN_NAME) def ToUnixLineEnding(s): """Changes all Windows/Mac line endings in s to UNIX line endings.""" return s.replace('\r\n', '\n').replace('\r', '\n') def RemoveLocations(test_output): """Removes all file location info from a Google Test program's output. Args: test_output: the output of a Google Test program. Returns: output with all file location info (in the form of 'DIRECTORY/FILE_NAME:LINE_NUMBER: 'or 'DIRECTORY\\FILE_NAME(LINE_NUMBER): ') replaced by 'FILE_NAME:#: '. """ return re.sub(r'.*[/\\](.+)(\:\d+|\(\d+\))\: ', r'\1:#: ', test_output) def RemoveStackTraceDetails(output): """Removes all stack traces from a Google Test program's output.""" # *? means "find the shortest string that matches". return re.sub(r'Stack trace:(.|\n)*?\n\n', 'Stack trace: (omitted)\n\n', output) def RemoveStackTraces(output): """Removes all traces of stack traces from a Google Test program's output.""" # *? means "find the shortest string that matches". return re.sub(r'Stack trace:(.|\n)*?\n\n', '', output) def RemoveTime(output): """Removes all time information from a Google Test program's output.""" return re.sub(r'\(\d+ ms', '(? ms', output) def RemoveTypeInfoDetails(test_output): """Removes compiler-specific type info from Google Test program's output. Args: test_output: the output of a Google Test program. Returns: output with type information normalized to canonical form. """ # some compilers output the name of type 'unsigned int' as 'unsigned' return re.sub(r'unsigned int', 'unsigned', test_output) def NormalizeToCurrentPlatform(test_output): """Normalizes platform specific output details for easier comparison.""" if IS_WINDOWS: # Removes the color information that is not present on Windows. test_output = re.sub('\x1b\\[(0;3\d)?m', '', test_output) # Changes failure message headers into the Windows format. test_output = re.sub(r': Failure\n', r': error: ', test_output) # Changes file(line_number) to file:line_number. test_output = re.sub(r'((\w|\.)+)\((\d+)\):', r'\1:\3:', test_output) return test_output def RemoveTestCounts(output): """Removes test counts from a Google Test program's output.""" output = re.sub(r'\d+ tests?, listed below', '? tests, listed below', output) output = re.sub(r'\d+ FAILED TESTS', '? FAILED TESTS', output) output = re.sub(r'\d+ tests? from \d+ test cases?', '? tests from ? test cases', output) output = re.sub(r'\d+ tests? from ([a-zA-Z_])', r'? tests from \1', output) return re.sub(r'\d+ tests?\.', '? tests.', output) def RemoveMatchingTests(test_output, pattern): """Removes output of specified tests from a Google Test program's output. This function strips not only the beginning and the end of a test but also all output in between. Args: test_output: A string containing the test output. pattern: A regex string that matches names of test cases or tests to remove. Returns: Contents of test_output with tests whose names match pattern removed. """ test_output = re.sub( r'.*\[ RUN \] .*%s(.|\n)*?\[( FAILED | OK )\] .*%s.*\n' % ( pattern, pattern), '', test_output) return re.sub(r'.*%s.*\n' % pattern, '', test_output) def NormalizeOutput(output): """Normalizes output (the output of gtest_output_test_.exe).""" output = ToUnixLineEnding(output) output = RemoveLocations(output) output = RemoveStackTraceDetails(output) output = RemoveTime(output) return output def GetShellCommandOutput(env_cmd): """Runs a command in a sub-process, and returns its output in a string. Args: env_cmd: The shell command. A 2-tuple where element 0 is a dict of extra environment variables to set, and element 1 is a string with the command and any flags. Returns: A string with the command's combined standard and diagnostic output. """ # Spawns cmd in a sub-process, and gets its standard I/O file objects. # Set and save the environment properly. environ = os.environ.copy() environ.update(env_cmd[0]) p = gtest_test_utils.Subprocess(env_cmd[1], env=environ) return p.output def GetCommandOutput(env_cmd): """Runs a command and returns its output with all file location info stripped off. Args: env_cmd: The shell command. A 2-tuple where element 0 is a dict of extra environment variables to set, and element 1 is a string with the command and any flags. """ # Disables exception pop-ups on Windows. environ, cmdline = env_cmd environ = dict(environ) # Ensures we are modifying a copy. environ[CATCH_EXCEPTIONS_ENV_VAR_NAME] = '1' return NormalizeOutput(GetShellCommandOutput((environ, cmdline))) def GetOutputOfAllCommands(): """Returns concatenated output from several representative commands.""" return (GetCommandOutput(COMMAND_WITH_COLOR) + GetCommandOutput(COMMAND_WITH_TIME) + GetCommandOutput(COMMAND_WITH_DISABLED) + GetCommandOutput(COMMAND_WITH_SHARDING)) test_list = GetShellCommandOutput(COMMAND_LIST_TESTS) SUPPORTS_DEATH_TESTS = 'DeathTest' in test_list SUPPORTS_TYPED_TESTS = 'TypedTest' in test_list SUPPORTS_THREADS = 'ExpectFailureWithThreadsTest' in test_list SUPPORTS_STACK_TRACES = False CAN_GENERATE_GOLDEN_FILE = (SUPPORTS_DEATH_TESTS and SUPPORTS_TYPED_TESTS and SUPPORTS_THREADS) class GTestOutputTest(gtest_test_utils.TestCase): def RemoveUnsupportedTests(self, test_output): if not SUPPORTS_DEATH_TESTS: test_output = RemoveMatchingTests(test_output, 'DeathTest') if not SUPPORTS_TYPED_TESTS: test_output = RemoveMatchingTests(test_output, 'TypedTest') test_output = RemoveMatchingTests(test_output, 'TypedDeathTest') test_output = RemoveMatchingTests(test_output, 'TypeParamDeathTest') if not SUPPORTS_THREADS: test_output = RemoveMatchingTests(test_output, 'ExpectFailureWithThreadsTest') test_output = RemoveMatchingTests(test_output, 'ScopedFakeTestPartResultReporterTest') test_output = RemoveMatchingTests(test_output, 'WorksConcurrently') if not SUPPORTS_STACK_TRACES: test_output = RemoveStackTraces(test_output) return test_output def testOutput(self): output = GetOutputOfAllCommands() golden_file = open(GOLDEN_PATH, 'rb') # A mis-configured source control system can cause \r appear in EOL # sequences when we read the golden file irrespective of an operating # system used. Therefore, we need to strip those \r's from newlines # unconditionally. golden = ToUnixLineEnding(golden_file.read()) golden_file.close() # We want the test to pass regardless of certain features being # supported or not. # We still have to remove type name specifics in all cases. normalized_actual = RemoveTypeInfoDetails(output) normalized_golden = RemoveTypeInfoDetails(golden) if CAN_GENERATE_GOLDEN_FILE: self.assertEqual(normalized_golden, normalized_actual) else: normalized_actual = NormalizeToCurrentPlatform( RemoveTestCounts(normalized_actual)) normalized_golden = NormalizeToCurrentPlatform( RemoveTestCounts(self.RemoveUnsupportedTests(normalized_golden))) # This code is very handy when debugging golden file differences: if os.getenv('DEBUG_GTEST_OUTPUT_TEST'): open(os.path.join( gtest_test_utils.GetSourceDir(), '_gtest_output_test_normalized_actual.txt'), 'wb').write( normalized_actual) open(os.path.join( gtest_test_utils.GetSourceDir(), '_gtest_output_test_normalized_golden.txt'), 'wb').write( normalized_golden) self.assertEqual(normalized_golden, normalized_actual) if __name__ == '__main__': if sys.argv[1:] == [GENGOLDEN_FLAG]: if CAN_GENERATE_GOLDEN_FILE: output = GetOutputOfAllCommands() golden_file = open(GOLDEN_PATH, 'wb') golden_file.write(output) golden_file.close() else: message = ( """Unable to write a golden file when compiled in an environment that does not support all the required features (death tests, typed tests, and multiple threads). Please generate the golden file using a binary built with those features enabled.""") sys.stderr.write(message) sys.exit(1) else: gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_output_test_.cc000066400000000000000000000772661377520261000227020ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // The purpose of this file is to generate Google Test output under // various conditions. The output will then be verified by // gtest_output_test.py to ensure that Google Test generates the // desired messages. Therefore, most tests in this file are MEANT TO // FAIL. // // Author: wan@google.com (Zhanyong Wan) #include "gtest/gtest-spi.h" #include "gtest/gtest.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ #include #if GTEST_IS_THREADSAFE using testing::ScopedFakeTestPartResultReporter; using testing::TestPartResultArray; using testing::internal::Notification; using testing::internal::ThreadWithParam; #endif namespace posix = ::testing::internal::posix; using testing::internal::scoped_ptr; // Tests catching fatal failures. // A subroutine used by the following test. void TestEq1(int x) { ASSERT_EQ(1, x); } // This function calls a test subroutine, catches the fatal failure it // generates, and then returns early. void TryTestSubroutine() { // Calls a subrountine that yields a fatal failure. TestEq1(2); // Catches the fatal failure and aborts the test. // // The testing::Test:: prefix is necessary when calling // HasFatalFailure() outside of a TEST, TEST_F, or test fixture. if (testing::Test::HasFatalFailure()) return; // If we get here, something is wrong. FAIL() << "This should never be reached."; } TEST(PassingTest, PassingTest1) { } TEST(PassingTest, PassingTest2) { } // Tests that parameters of failing parameterized tests are printed in the // failing test summary. class FailingParamTest : public testing::TestWithParam {}; TEST_P(FailingParamTest, Fails) { EXPECT_EQ(1, GetParam()); } // This generates a test which will fail. Google Test is expected to print // its parameter when it outputs the list of all failed tests. INSTANTIATE_TEST_CASE_P(PrintingFailingParams, FailingParamTest, testing::Values(2)); static const char kGoldenString[] = "\"Line\0 1\"\nLine 2"; TEST(NonfatalFailureTest, EscapesStringOperands) { std::string actual = "actual \"string\""; EXPECT_EQ(kGoldenString, actual); const char* golden = kGoldenString; EXPECT_EQ(golden, actual); } // Tests catching a fatal failure in a subroutine. TEST(FatalFailureTest, FatalFailureInSubroutine) { printf("(expecting a failure that x should be 1)\n"); TryTestSubroutine(); } // Tests catching a fatal failure in a nested subroutine. TEST(FatalFailureTest, FatalFailureInNestedSubroutine) { printf("(expecting a failure that x should be 1)\n"); // Calls a subrountine that yields a fatal failure. TryTestSubroutine(); // Catches the fatal failure and aborts the test. // // When calling HasFatalFailure() inside a TEST, TEST_F, or test // fixture, the testing::Test:: prefix is not needed. if (HasFatalFailure()) return; // If we get here, something is wrong. FAIL() << "This should never be reached."; } // Tests HasFatalFailure() after a failed EXPECT check. TEST(FatalFailureTest, NonfatalFailureInSubroutine) { printf("(expecting a failure on false)\n"); EXPECT_TRUE(false); // Generates a nonfatal failure ASSERT_FALSE(HasFatalFailure()); // This should succeed. } // Tests interleaving user logging and Google Test assertions. TEST(LoggingTest, InterleavingLoggingAndAssertions) { static const int a[4] = { 3, 9, 2, 6 }; printf("(expecting 2 failures on (3) >= (a[i]))\n"); for (int i = 0; i < static_cast(sizeof(a)/sizeof(*a)); i++) { printf("i == %d\n", i); EXPECT_GE(3, a[i]); } } // Tests the SCOPED_TRACE macro. // A helper function for testing SCOPED_TRACE. void SubWithoutTrace(int n) { EXPECT_EQ(1, n); ASSERT_EQ(2, n); } // Another helper function for testing SCOPED_TRACE. void SubWithTrace(int n) { SCOPED_TRACE(testing::Message() << "n = " << n); SubWithoutTrace(n); } // Tests that SCOPED_TRACE() obeys lexical scopes. TEST(SCOPED_TRACETest, ObeysScopes) { printf("(expected to fail)\n"); // There should be no trace before SCOPED_TRACE() is invoked. ADD_FAILURE() << "This failure is expected, and shouldn't have a trace."; { SCOPED_TRACE("Expected trace"); // After SCOPED_TRACE(), a failure in the current scope should contain // the trace. ADD_FAILURE() << "This failure is expected, and should have a trace."; } // Once the control leaves the scope of the SCOPED_TRACE(), there // should be no trace again. ADD_FAILURE() << "This failure is expected, and shouldn't have a trace."; } // Tests that SCOPED_TRACE works inside a loop. TEST(SCOPED_TRACETest, WorksInLoop) { printf("(expected to fail)\n"); for (int i = 1; i <= 2; i++) { SCOPED_TRACE(testing::Message() << "i = " << i); SubWithoutTrace(i); } } // Tests that SCOPED_TRACE works in a subroutine. TEST(SCOPED_TRACETest, WorksInSubroutine) { printf("(expected to fail)\n"); SubWithTrace(1); SubWithTrace(2); } // Tests that SCOPED_TRACE can be nested. TEST(SCOPED_TRACETest, CanBeNested) { printf("(expected to fail)\n"); SCOPED_TRACE(""); // A trace without a message. SubWithTrace(2); } // Tests that multiple SCOPED_TRACEs can be used in the same scope. TEST(SCOPED_TRACETest, CanBeRepeated) { printf("(expected to fail)\n"); SCOPED_TRACE("A"); ADD_FAILURE() << "This failure is expected, and should contain trace point A."; SCOPED_TRACE("B"); ADD_FAILURE() << "This failure is expected, and should contain trace point A and B."; { SCOPED_TRACE("C"); ADD_FAILURE() << "This failure is expected, and should " << "contain trace point A, B, and C."; } SCOPED_TRACE("D"); ADD_FAILURE() << "This failure is expected, and should " << "contain trace point A, B, and D."; } #if GTEST_IS_THREADSAFE // Tests that SCOPED_TRACE()s can be used concurrently from multiple // threads. Namely, an assertion should be affected by // SCOPED_TRACE()s in its own thread only. // Here's the sequence of actions that happen in the test: // // Thread A (main) | Thread B (spawned) // ===============================|================================ // spawns thread B | // -------------------------------+-------------------------------- // waits for n1 | SCOPED_TRACE("Trace B"); // | generates failure #1 // | notifies n1 // -------------------------------+-------------------------------- // SCOPED_TRACE("Trace A"); | waits for n2 // generates failure #2 | // notifies n2 | // -------------------------------|-------------------------------- // waits for n3 | generates failure #3 // | trace B dies // | generates failure #4 // | notifies n3 // -------------------------------|-------------------------------- // generates failure #5 | finishes // trace A dies | // generates failure #6 | // -------------------------------|-------------------------------- // waits for thread B to finish | struct CheckPoints { Notification n1; Notification n2; Notification n3; }; static void ThreadWithScopedTrace(CheckPoints* check_points) { { SCOPED_TRACE("Trace B"); ADD_FAILURE() << "Expected failure #1 (in thread B, only trace B alive)."; check_points->n1.Notify(); check_points->n2.WaitForNotification(); ADD_FAILURE() << "Expected failure #3 (in thread B, trace A & B both alive)."; } // Trace B dies here. ADD_FAILURE() << "Expected failure #4 (in thread B, only trace A alive)."; check_points->n3.Notify(); } TEST(SCOPED_TRACETest, WorksConcurrently) { printf("(expecting 6 failures)\n"); CheckPoints check_points; ThreadWithParam thread(&ThreadWithScopedTrace, &check_points, NULL); check_points.n1.WaitForNotification(); { SCOPED_TRACE("Trace A"); ADD_FAILURE() << "Expected failure #2 (in thread A, trace A & B both alive)."; check_points.n2.Notify(); check_points.n3.WaitForNotification(); ADD_FAILURE() << "Expected failure #5 (in thread A, only trace A alive)."; } // Trace A dies here. ADD_FAILURE() << "Expected failure #6 (in thread A, no trace alive)."; thread.Join(); } #endif // GTEST_IS_THREADSAFE TEST(DisabledTestsWarningTest, DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning) { // This test body is intentionally empty. Its sole purpose is for // verifying that the --gtest_also_run_disabled_tests flag // suppresses the "YOU HAVE 12 DISABLED TESTS" warning at the end of // the test output. } // Tests using assertions outside of TEST and TEST_F. // // This function creates two failures intentionally. void AdHocTest() { printf("The non-test part of the code is expected to have 2 failures.\n\n"); EXPECT_TRUE(false); EXPECT_EQ(2, 3); } // Runs all TESTs, all TEST_Fs, and the ad hoc test. int RunAllTests() { AdHocTest(); return RUN_ALL_TESTS(); } // Tests non-fatal failures in the fixture constructor. class NonFatalFailureInFixtureConstructorTest : public testing::Test { protected: NonFatalFailureInFixtureConstructorTest() { printf("(expecting 5 failures)\n"); ADD_FAILURE() << "Expected failure #1, in the test fixture c'tor."; } ~NonFatalFailureInFixtureConstructorTest() { ADD_FAILURE() << "Expected failure #5, in the test fixture d'tor."; } virtual void SetUp() { ADD_FAILURE() << "Expected failure #2, in SetUp()."; } virtual void TearDown() { ADD_FAILURE() << "Expected failure #4, in TearDown."; } }; TEST_F(NonFatalFailureInFixtureConstructorTest, FailureInConstructor) { ADD_FAILURE() << "Expected failure #3, in the test body."; } // Tests fatal failures in the fixture constructor. class FatalFailureInFixtureConstructorTest : public testing::Test { protected: FatalFailureInFixtureConstructorTest() { printf("(expecting 2 failures)\n"); Init(); } ~FatalFailureInFixtureConstructorTest() { ADD_FAILURE() << "Expected failure #2, in the test fixture d'tor."; } virtual void SetUp() { ADD_FAILURE() << "UNEXPECTED failure in SetUp(). " << "We should never get here, as the test fixture c'tor " << "had a fatal failure."; } virtual void TearDown() { ADD_FAILURE() << "UNEXPECTED failure in TearDown(). " << "We should never get here, as the test fixture c'tor " << "had a fatal failure."; } private: void Init() { FAIL() << "Expected failure #1, in the test fixture c'tor."; } }; TEST_F(FatalFailureInFixtureConstructorTest, FailureInConstructor) { ADD_FAILURE() << "UNEXPECTED failure in the test body. " << "We should never get here, as the test fixture c'tor " << "had a fatal failure."; } // Tests non-fatal failures in SetUp(). class NonFatalFailureInSetUpTest : public testing::Test { protected: virtual ~NonFatalFailureInSetUpTest() { Deinit(); } virtual void SetUp() { printf("(expecting 4 failures)\n"); ADD_FAILURE() << "Expected failure #1, in SetUp()."; } virtual void TearDown() { FAIL() << "Expected failure #3, in TearDown()."; } private: void Deinit() { FAIL() << "Expected failure #4, in the test fixture d'tor."; } }; TEST_F(NonFatalFailureInSetUpTest, FailureInSetUp) { FAIL() << "Expected failure #2, in the test function."; } // Tests fatal failures in SetUp(). class FatalFailureInSetUpTest : public testing::Test { protected: virtual ~FatalFailureInSetUpTest() { Deinit(); } virtual void SetUp() { printf("(expecting 3 failures)\n"); FAIL() << "Expected failure #1, in SetUp()."; } virtual void TearDown() { FAIL() << "Expected failure #2, in TearDown()."; } private: void Deinit() { FAIL() << "Expected failure #3, in the test fixture d'tor."; } }; TEST_F(FatalFailureInSetUpTest, FailureInSetUp) { FAIL() << "UNEXPECTED failure in the test function. " << "We should never get here, as SetUp() failed."; } TEST(AddFailureAtTest, MessageContainsSpecifiedFileAndLineNumber) { ADD_FAILURE_AT("foo.cc", 42) << "Expected failure in foo.cc"; } #if GTEST_IS_THREADSAFE // A unary function that may die. void DieIf(bool should_die) { GTEST_CHECK_(!should_die) << " - death inside DieIf()."; } // Tests running death tests in a multi-threaded context. // Used for coordination between the main and the spawn thread. struct SpawnThreadNotifications { SpawnThreadNotifications() {} Notification spawn_thread_started; Notification spawn_thread_ok_to_terminate; private: GTEST_DISALLOW_COPY_AND_ASSIGN_(SpawnThreadNotifications); }; // The function to be executed in the thread spawn by the // MultipleThreads test (below). static void ThreadRoutine(SpawnThreadNotifications* notifications) { // Signals the main thread that this thread has started. notifications->spawn_thread_started.Notify(); // Waits for permission to finish from the main thread. notifications->spawn_thread_ok_to_terminate.WaitForNotification(); } // This is a death-test test, but it's not named with a DeathTest // suffix. It starts threads which might interfere with later // death tests, so it must run after all other death tests. class DeathTestAndMultiThreadsTest : public testing::Test { protected: // Starts a thread and waits for it to begin. virtual void SetUp() { thread_.reset(new ThreadWithParam( &ThreadRoutine, ¬ifications_, NULL)); notifications_.spawn_thread_started.WaitForNotification(); } // Tells the thread to finish, and reaps it. // Depending on the version of the thread library in use, // a manager thread might still be left running that will interfere // with later death tests. This is unfortunate, but this class // cleans up after itself as best it can. virtual void TearDown() { notifications_.spawn_thread_ok_to_terminate.Notify(); } private: SpawnThreadNotifications notifications_; scoped_ptr > thread_; }; #endif // GTEST_IS_THREADSAFE // The MixedUpTestCaseTest test case verifies that Google Test will fail a // test if it uses a different fixture class than what other tests in // the same test case use. It deliberately contains two fixture // classes with the same name but defined in different namespaces. // The MixedUpTestCaseWithSameTestNameTest test case verifies that // when the user defines two tests with the same test case name AND // same test name (but in different namespaces), the second test will // fail. namespace foo { class MixedUpTestCaseTest : public testing::Test { }; TEST_F(MixedUpTestCaseTest, FirstTestFromNamespaceFoo) {} TEST_F(MixedUpTestCaseTest, SecondTestFromNamespaceFoo) {} class MixedUpTestCaseWithSameTestNameTest : public testing::Test { }; TEST_F(MixedUpTestCaseWithSameTestNameTest, TheSecondTestWithThisNameShouldFail) {} } // namespace foo namespace bar { class MixedUpTestCaseTest : public testing::Test { }; // The following two tests are expected to fail. We rely on the // golden file to check that Google Test generates the right error message. TEST_F(MixedUpTestCaseTest, ThisShouldFail) {} TEST_F(MixedUpTestCaseTest, ThisShouldFailToo) {} class MixedUpTestCaseWithSameTestNameTest : public testing::Test { }; // Expected to fail. We rely on the golden file to check that Google Test // generates the right error message. TEST_F(MixedUpTestCaseWithSameTestNameTest, TheSecondTestWithThisNameShouldFail) {} } // namespace bar // The following two test cases verify that Google Test catches the user // error of mixing TEST and TEST_F in the same test case. The first // test case checks the scenario where TEST_F appears before TEST, and // the second one checks where TEST appears before TEST_F. class TEST_F_before_TEST_in_same_test_case : public testing::Test { }; TEST_F(TEST_F_before_TEST_in_same_test_case, DefinedUsingTEST_F) {} // Expected to fail. We rely on the golden file to check that Google Test // generates the right error message. TEST(TEST_F_before_TEST_in_same_test_case, DefinedUsingTESTAndShouldFail) {} class TEST_before_TEST_F_in_same_test_case : public testing::Test { }; TEST(TEST_before_TEST_F_in_same_test_case, DefinedUsingTEST) {} // Expected to fail. We rely on the golden file to check that Google Test // generates the right error message. TEST_F(TEST_before_TEST_F_in_same_test_case, DefinedUsingTEST_FAndShouldFail) { } // Used for testing EXPECT_NONFATAL_FAILURE() and EXPECT_FATAL_FAILURE(). int global_integer = 0; // Tests that EXPECT_NONFATAL_FAILURE() can reference global variables. TEST(ExpectNonfatalFailureTest, CanReferenceGlobalVariables) { global_integer = 0; EXPECT_NONFATAL_FAILURE({ EXPECT_EQ(1, global_integer) << "Expected non-fatal failure."; }, "Expected non-fatal failure."); } // Tests that EXPECT_NONFATAL_FAILURE() can reference local variables // (static or not). TEST(ExpectNonfatalFailureTest, CanReferenceLocalVariables) { int m = 0; static int n; n = 1; EXPECT_NONFATAL_FAILURE({ EXPECT_EQ(m, n) << "Expected non-fatal failure."; }, "Expected non-fatal failure."); } // Tests that EXPECT_NONFATAL_FAILURE() succeeds when there is exactly // one non-fatal failure and no fatal failure. TEST(ExpectNonfatalFailureTest, SucceedsWhenThereIsOneNonfatalFailure) { EXPECT_NONFATAL_FAILURE({ ADD_FAILURE() << "Expected non-fatal failure."; }, "Expected non-fatal failure."); } // Tests that EXPECT_NONFATAL_FAILURE() fails when there is no // non-fatal failure. TEST(ExpectNonfatalFailureTest, FailsWhenThereIsNoNonfatalFailure) { printf("(expecting a failure)\n"); EXPECT_NONFATAL_FAILURE({ }, ""); } // Tests that EXPECT_NONFATAL_FAILURE() fails when there are two // non-fatal failures. TEST(ExpectNonfatalFailureTest, FailsWhenThereAreTwoNonfatalFailures) { printf("(expecting a failure)\n"); EXPECT_NONFATAL_FAILURE({ ADD_FAILURE() << "Expected non-fatal failure 1."; ADD_FAILURE() << "Expected non-fatal failure 2."; }, ""); } // Tests that EXPECT_NONFATAL_FAILURE() fails when there is one fatal // failure. TEST(ExpectNonfatalFailureTest, FailsWhenThereIsOneFatalFailure) { printf("(expecting a failure)\n"); EXPECT_NONFATAL_FAILURE({ FAIL() << "Expected fatal failure."; }, ""); } // Tests that EXPECT_NONFATAL_FAILURE() fails when the statement being // tested returns. TEST(ExpectNonfatalFailureTest, FailsWhenStatementReturns) { printf("(expecting a failure)\n"); EXPECT_NONFATAL_FAILURE({ return; }, ""); } #if GTEST_HAS_EXCEPTIONS // Tests that EXPECT_NONFATAL_FAILURE() fails when the statement being // tested throws. TEST(ExpectNonfatalFailureTest, FailsWhenStatementThrows) { printf("(expecting a failure)\n"); try { EXPECT_NONFATAL_FAILURE({ throw 0; }, ""); } catch(int) { // NOLINT } } #endif // GTEST_HAS_EXCEPTIONS // Tests that EXPECT_FATAL_FAILURE() can reference global variables. TEST(ExpectFatalFailureTest, CanReferenceGlobalVariables) { global_integer = 0; EXPECT_FATAL_FAILURE({ ASSERT_EQ(1, global_integer) << "Expected fatal failure."; }, "Expected fatal failure."); } // Tests that EXPECT_FATAL_FAILURE() can reference local static // variables. TEST(ExpectFatalFailureTest, CanReferenceLocalStaticVariables) { static int n; n = 1; EXPECT_FATAL_FAILURE({ ASSERT_EQ(0, n) << "Expected fatal failure."; }, "Expected fatal failure."); } // Tests that EXPECT_FATAL_FAILURE() succeeds when there is exactly // one fatal failure and no non-fatal failure. TEST(ExpectFatalFailureTest, SucceedsWhenThereIsOneFatalFailure) { EXPECT_FATAL_FAILURE({ FAIL() << "Expected fatal failure."; }, "Expected fatal failure."); } // Tests that EXPECT_FATAL_FAILURE() fails when there is no fatal // failure. TEST(ExpectFatalFailureTest, FailsWhenThereIsNoFatalFailure) { printf("(expecting a failure)\n"); EXPECT_FATAL_FAILURE({ }, ""); } // A helper for generating a fatal failure. void FatalFailure() { FAIL() << "Expected fatal failure."; } // Tests that EXPECT_FATAL_FAILURE() fails when there are two // fatal failures. TEST(ExpectFatalFailureTest, FailsWhenThereAreTwoFatalFailures) { printf("(expecting a failure)\n"); EXPECT_FATAL_FAILURE({ FatalFailure(); FatalFailure(); }, ""); } // Tests that EXPECT_FATAL_FAILURE() fails when there is one non-fatal // failure. TEST(ExpectFatalFailureTest, FailsWhenThereIsOneNonfatalFailure) { printf("(expecting a failure)\n"); EXPECT_FATAL_FAILURE({ ADD_FAILURE() << "Expected non-fatal failure."; }, ""); } // Tests that EXPECT_FATAL_FAILURE() fails when the statement being // tested returns. TEST(ExpectFatalFailureTest, FailsWhenStatementReturns) { printf("(expecting a failure)\n"); EXPECT_FATAL_FAILURE({ return; }, ""); } #if GTEST_HAS_EXCEPTIONS // Tests that EXPECT_FATAL_FAILURE() fails when the statement being // tested throws. TEST(ExpectFatalFailureTest, FailsWhenStatementThrows) { printf("(expecting a failure)\n"); try { EXPECT_FATAL_FAILURE({ throw 0; }, ""); } catch(int) { // NOLINT } } #endif // GTEST_HAS_EXCEPTIONS // This #ifdef block tests the output of typed tests. #if GTEST_HAS_TYPED_TEST template class TypedTest : public testing::Test { }; TYPED_TEST_CASE(TypedTest, testing::Types); TYPED_TEST(TypedTest, Success) { EXPECT_EQ(0, TypeParam()); } TYPED_TEST(TypedTest, Failure) { EXPECT_EQ(1, TypeParam()) << "Expected failure"; } #endif // GTEST_HAS_TYPED_TEST // This #ifdef block tests the output of type-parameterized tests. #if GTEST_HAS_TYPED_TEST_P template class TypedTestP : public testing::Test { }; TYPED_TEST_CASE_P(TypedTestP); TYPED_TEST_P(TypedTestP, Success) { EXPECT_EQ(0U, TypeParam()); } TYPED_TEST_P(TypedTestP, Failure) { EXPECT_EQ(1U, TypeParam()) << "Expected failure"; } REGISTER_TYPED_TEST_CASE_P(TypedTestP, Success, Failure); typedef testing::Types UnsignedTypes; INSTANTIATE_TYPED_TEST_CASE_P(Unsigned, TypedTestP, UnsignedTypes); #endif // GTEST_HAS_TYPED_TEST_P #if GTEST_HAS_DEATH_TEST // We rely on the golden file to verify that tests whose test case // name ends with DeathTest are run first. TEST(ADeathTest, ShouldRunFirst) { } # if GTEST_HAS_TYPED_TEST // We rely on the golden file to verify that typed tests whose test // case name ends with DeathTest are run first. template class ATypedDeathTest : public testing::Test { }; typedef testing::Types NumericTypes; TYPED_TEST_CASE(ATypedDeathTest, NumericTypes); TYPED_TEST(ATypedDeathTest, ShouldRunFirst) { } # endif // GTEST_HAS_TYPED_TEST # if GTEST_HAS_TYPED_TEST_P // We rely on the golden file to verify that type-parameterized tests // whose test case name ends with DeathTest are run first. template class ATypeParamDeathTest : public testing::Test { }; TYPED_TEST_CASE_P(ATypeParamDeathTest); TYPED_TEST_P(ATypeParamDeathTest, ShouldRunFirst) { } REGISTER_TYPED_TEST_CASE_P(ATypeParamDeathTest, ShouldRunFirst); INSTANTIATE_TYPED_TEST_CASE_P(My, ATypeParamDeathTest, NumericTypes); # endif // GTEST_HAS_TYPED_TEST_P #endif // GTEST_HAS_DEATH_TEST // Tests various failure conditions of // EXPECT_{,NON}FATAL_FAILURE{,_ON_ALL_THREADS}. class ExpectFailureTest : public testing::Test { public: // Must be public and not protected due to a bug in g++ 3.4.2. enum FailureMode { FATAL_FAILURE, NONFATAL_FAILURE }; static void AddFailure(FailureMode failure) { if (failure == FATAL_FAILURE) { FAIL() << "Expected fatal failure."; } else { ADD_FAILURE() << "Expected non-fatal failure."; } } }; TEST_F(ExpectFailureTest, ExpectFatalFailure) { // Expected fatal failure, but succeeds. printf("(expecting 1 failure)\n"); EXPECT_FATAL_FAILURE(SUCCEED(), "Expected fatal failure."); // Expected fatal failure, but got a non-fatal failure. printf("(expecting 1 failure)\n"); EXPECT_FATAL_FAILURE(AddFailure(NONFATAL_FAILURE), "Expected non-fatal " "failure."); // Wrong message. printf("(expecting 1 failure)\n"); EXPECT_FATAL_FAILURE(AddFailure(FATAL_FAILURE), "Some other fatal failure " "expected."); } TEST_F(ExpectFailureTest, ExpectNonFatalFailure) { // Expected non-fatal failure, but succeeds. printf("(expecting 1 failure)\n"); EXPECT_NONFATAL_FAILURE(SUCCEED(), "Expected non-fatal failure."); // Expected non-fatal failure, but got a fatal failure. printf("(expecting 1 failure)\n"); EXPECT_NONFATAL_FAILURE(AddFailure(FATAL_FAILURE), "Expected fatal failure."); // Wrong message. printf("(expecting 1 failure)\n"); EXPECT_NONFATAL_FAILURE(AddFailure(NONFATAL_FAILURE), "Some other non-fatal " "failure."); } #if GTEST_IS_THREADSAFE class ExpectFailureWithThreadsTest : public ExpectFailureTest { protected: static void AddFailureInOtherThread(FailureMode failure) { ThreadWithParam thread(&AddFailure, failure, NULL); thread.Join(); } }; TEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailure) { // We only intercept the current thread. printf("(expecting 2 failures)\n"); EXPECT_FATAL_FAILURE(AddFailureInOtherThread(FATAL_FAILURE), "Expected fatal failure."); } TEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailure) { // We only intercept the current thread. printf("(expecting 2 failures)\n"); EXPECT_NONFATAL_FAILURE(AddFailureInOtherThread(NONFATAL_FAILURE), "Expected non-fatal failure."); } typedef ExpectFailureWithThreadsTest ScopedFakeTestPartResultReporterTest; // Tests that the ScopedFakeTestPartResultReporter only catches failures from // the current thread if it is instantiated with INTERCEPT_ONLY_CURRENT_THREAD. TEST_F(ScopedFakeTestPartResultReporterTest, InterceptOnlyCurrentThread) { printf("(expecting 2 failures)\n"); TestPartResultArray results; { ScopedFakeTestPartResultReporter reporter( ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD, &results); AddFailureInOtherThread(FATAL_FAILURE); AddFailureInOtherThread(NONFATAL_FAILURE); } // The two failures should not have been intercepted. EXPECT_EQ(0, results.size()) << "This shouldn't fail."; } #endif // GTEST_IS_THREADSAFE TEST_F(ExpectFailureTest, ExpectFatalFailureOnAllThreads) { // Expected fatal failure, but succeeds. printf("(expecting 1 failure)\n"); EXPECT_FATAL_FAILURE_ON_ALL_THREADS(SUCCEED(), "Expected fatal failure."); // Expected fatal failure, but got a non-fatal failure. printf("(expecting 1 failure)\n"); EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailure(NONFATAL_FAILURE), "Expected non-fatal failure."); // Wrong message. printf("(expecting 1 failure)\n"); EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailure(FATAL_FAILURE), "Some other fatal failure expected."); } TEST_F(ExpectFailureTest, ExpectNonFatalFailureOnAllThreads) { // Expected non-fatal failure, but succeeds. printf("(expecting 1 failure)\n"); EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(SUCCEED(), "Expected non-fatal " "failure."); // Expected non-fatal failure, but got a fatal failure. printf("(expecting 1 failure)\n"); EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddFailure(FATAL_FAILURE), "Expected fatal failure."); // Wrong message. printf("(expecting 1 failure)\n"); EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddFailure(NONFATAL_FAILURE), "Some other non-fatal failure."); } // Two test environments for testing testing::AddGlobalTestEnvironment(). class FooEnvironment : public testing::Environment { public: virtual void SetUp() { printf("%s", "FooEnvironment::SetUp() called.\n"); } virtual void TearDown() { printf("%s", "FooEnvironment::TearDown() called.\n"); FAIL() << "Expected fatal failure."; } }; class BarEnvironment : public testing::Environment { public: virtual void SetUp() { printf("%s", "BarEnvironment::SetUp() called.\n"); } virtual void TearDown() { printf("%s", "BarEnvironment::TearDown() called.\n"); ADD_FAILURE() << "Expected non-fatal failure."; } }; bool GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests) = false; // The main function. // // The idea is to use Google Test to run all the tests we have defined (some // of them are intended to fail), and then compare the test results // with the "golden" file. int main(int argc, char **argv) { testing::GTEST_FLAG(print_time) = false; // We just run the tests, knowing some of them are intended to fail. // We will use a separate Python script to compare the output of // this program with the golden file. // It's hard to test InitGoogleTest() directly, as it has many // global side effects. The following line serves as a sanity test // for it. testing::InitGoogleTest(&argc, argv); if (argc >= 2 && (std::string(argv[1]) == "--gtest_internal_skip_environment_and_ad_hoc_tests")) GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests) = true; #if GTEST_HAS_DEATH_TEST if (testing::internal::GTEST_FLAG(internal_run_death_test) != "") { // Skip the usual output capturing if we're running as the child // process of an threadsafe-style death test. # if GTEST_OS_WINDOWS posix::FReopen("nul:", "w", stdout); # else posix::FReopen("/dev/null", "w", stdout); # endif // GTEST_OS_WINDOWS return RUN_ALL_TESTS(); } #endif // GTEST_HAS_DEATH_TEST if (GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests)) return RUN_ALL_TESTS(); // Registers two global test environments. // The golden file verifies that they are set up in the order they // are registered, and torn down in the reverse order. testing::AddGlobalTestEnvironment(new FooEnvironment); testing::AddGlobalTestEnvironment(new BarEnvironment); return RunAllTests(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_output_test_golden_lin.txt000066400000000000000000000670041377520261000251540ustar00rootroot00000000000000The non-test part of the code is expected to have 2 failures. gtest_output_test_.cc:#: Failure Value of: false Actual: false Expected: true gtest_output_test_.cc:#: Failure Value of: 3 Expected: 2 [==========] Running 63 tests from 28 test cases. [----------] Global test environment set-up. FooEnvironment::SetUp() called. BarEnvironment::SetUp() called. [----------] 1 test from ADeathTest [ RUN ] ADeathTest.ShouldRunFirst [ OK ] ADeathTest.ShouldRunFirst [----------] 1 test from ATypedDeathTest/0, where TypeParam = int [ RUN ] ATypedDeathTest/0.ShouldRunFirst [ OK ] ATypedDeathTest/0.ShouldRunFirst [----------] 1 test from ATypedDeathTest/1, where TypeParam = double [ RUN ] ATypedDeathTest/1.ShouldRunFirst [ OK ] ATypedDeathTest/1.ShouldRunFirst [----------] 1 test from My/ATypeParamDeathTest/0, where TypeParam = int [ RUN ] My/ATypeParamDeathTest/0.ShouldRunFirst [ OK ] My/ATypeParamDeathTest/0.ShouldRunFirst [----------] 1 test from My/ATypeParamDeathTest/1, where TypeParam = double [ RUN ] My/ATypeParamDeathTest/1.ShouldRunFirst [ OK ] My/ATypeParamDeathTest/1.ShouldRunFirst [----------] 2 tests from PassingTest [ RUN ] PassingTest.PassingTest1 [ OK ] PassingTest.PassingTest1 [ RUN ] PassingTest.PassingTest2 [ OK ] PassingTest.PassingTest2 [----------] 1 test from NonfatalFailureTest [ RUN ] NonfatalFailureTest.EscapesStringOperands gtest_output_test_.cc:#: Failure Value of: actual Actual: "actual \"string\"" Expected: kGoldenString Which is: "\"Line" gtest_output_test_.cc:#: Failure Value of: actual Actual: "actual \"string\"" Expected: golden Which is: "\"Line" [ FAILED ] NonfatalFailureTest.EscapesStringOperands [----------] 3 tests from FatalFailureTest [ RUN ] FatalFailureTest.FatalFailureInSubroutine (expecting a failure that x should be 1) gtest_output_test_.cc:#: Failure Value of: x Actual: 2 Expected: 1 [ FAILED ] FatalFailureTest.FatalFailureInSubroutine [ RUN ] FatalFailureTest.FatalFailureInNestedSubroutine (expecting a failure that x should be 1) gtest_output_test_.cc:#: Failure Value of: x Actual: 2 Expected: 1 [ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine [ RUN ] FatalFailureTest.NonfatalFailureInSubroutine (expecting a failure on false) gtest_output_test_.cc:#: Failure Value of: false Actual: false Expected: true [ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine [----------] 1 test from LoggingTest [ RUN ] LoggingTest.InterleavingLoggingAndAssertions (expecting 2 failures on (3) >= (a[i])) i == 0 i == 1 gtest_output_test_.cc:#: Failure Expected: (3) >= (a[i]), actual: 3 vs 9 i == 2 i == 3 gtest_output_test_.cc:#: Failure Expected: (3) >= (a[i]), actual: 3 vs 6 [ FAILED ] LoggingTest.InterleavingLoggingAndAssertions [----------] 6 tests from SCOPED_TRACETest [ RUN ] SCOPED_TRACETest.ObeysScopes (expected to fail) gtest_output_test_.cc:#: Failure Failed This failure is expected, and shouldn't have a trace. gtest_output_test_.cc:#: Failure Failed This failure is expected, and should have a trace. Google Test trace: gtest_output_test_.cc:#: Expected trace gtest_output_test_.cc:#: Failure Failed This failure is expected, and shouldn't have a trace. [ FAILED ] SCOPED_TRACETest.ObeysScopes [ RUN ] SCOPED_TRACETest.WorksInLoop (expected to fail) gtest_output_test_.cc:#: Failure Value of: n Actual: 1 Expected: 2 Google Test trace: gtest_output_test_.cc:#: i = 1 gtest_output_test_.cc:#: Failure Value of: n Actual: 2 Expected: 1 Google Test trace: gtest_output_test_.cc:#: i = 2 [ FAILED ] SCOPED_TRACETest.WorksInLoop [ RUN ] SCOPED_TRACETest.WorksInSubroutine (expected to fail) gtest_output_test_.cc:#: Failure Value of: n Actual: 1 Expected: 2 Google Test trace: gtest_output_test_.cc:#: n = 1 gtest_output_test_.cc:#: Failure Value of: n Actual: 2 Expected: 1 Google Test trace: gtest_output_test_.cc:#: n = 2 [ FAILED ] SCOPED_TRACETest.WorksInSubroutine [ RUN ] SCOPED_TRACETest.CanBeNested (expected to fail) gtest_output_test_.cc:#: Failure Value of: n Actual: 2 Expected: 1 Google Test trace: gtest_output_test_.cc:#: n = 2 gtest_output_test_.cc:#: [ FAILED ] SCOPED_TRACETest.CanBeNested [ RUN ] SCOPED_TRACETest.CanBeRepeated (expected to fail) gtest_output_test_.cc:#: Failure Failed This failure is expected, and should contain trace point A. Google Test trace: gtest_output_test_.cc:#: A gtest_output_test_.cc:#: Failure Failed This failure is expected, and should contain trace point A and B. Google Test trace: gtest_output_test_.cc:#: B gtest_output_test_.cc:#: A gtest_output_test_.cc:#: Failure Failed This failure is expected, and should contain trace point A, B, and C. Google Test trace: gtest_output_test_.cc:#: C gtest_output_test_.cc:#: B gtest_output_test_.cc:#: A gtest_output_test_.cc:#: Failure Failed This failure is expected, and should contain trace point A, B, and D. Google Test trace: gtest_output_test_.cc:#: D gtest_output_test_.cc:#: B gtest_output_test_.cc:#: A [ FAILED ] SCOPED_TRACETest.CanBeRepeated [ RUN ] SCOPED_TRACETest.WorksConcurrently (expecting 6 failures) gtest_output_test_.cc:#: Failure Failed Expected failure #1 (in thread B, only trace B alive). Google Test trace: gtest_output_test_.cc:#: Trace B gtest_output_test_.cc:#: Failure Failed Expected failure #2 (in thread A, trace A & B both alive). Google Test trace: gtest_output_test_.cc:#: Trace A gtest_output_test_.cc:#: Failure Failed Expected failure #3 (in thread B, trace A & B both alive). Google Test trace: gtest_output_test_.cc:#: Trace B gtest_output_test_.cc:#: Failure Failed Expected failure #4 (in thread B, only trace A alive). gtest_output_test_.cc:#: Failure Failed Expected failure #5 (in thread A, only trace A alive). Google Test trace: gtest_output_test_.cc:#: Trace A gtest_output_test_.cc:#: Failure Failed Expected failure #6 (in thread A, no trace alive). [ FAILED ] SCOPED_TRACETest.WorksConcurrently [----------] 1 test from NonFatalFailureInFixtureConstructorTest [ RUN ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor (expecting 5 failures) gtest_output_test_.cc:#: Failure Failed Expected failure #1, in the test fixture c'tor. gtest_output_test_.cc:#: Failure Failed Expected failure #2, in SetUp(). gtest_output_test_.cc:#: Failure Failed Expected failure #3, in the test body. gtest_output_test_.cc:#: Failure Failed Expected failure #4, in TearDown. gtest_output_test_.cc:#: Failure Failed Expected failure #5, in the test fixture d'tor. [ FAILED ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor [----------] 1 test from FatalFailureInFixtureConstructorTest [ RUN ] FatalFailureInFixtureConstructorTest.FailureInConstructor (expecting 2 failures) gtest_output_test_.cc:#: Failure Failed Expected failure #1, in the test fixture c'tor. gtest_output_test_.cc:#: Failure Failed Expected failure #2, in the test fixture d'tor. [ FAILED ] FatalFailureInFixtureConstructorTest.FailureInConstructor [----------] 1 test from NonFatalFailureInSetUpTest [ RUN ] NonFatalFailureInSetUpTest.FailureInSetUp (expecting 4 failures) gtest_output_test_.cc:#: Failure Failed Expected failure #1, in SetUp(). gtest_output_test_.cc:#: Failure Failed Expected failure #2, in the test function. gtest_output_test_.cc:#: Failure Failed Expected failure #3, in TearDown(). gtest_output_test_.cc:#: Failure Failed Expected failure #4, in the test fixture d'tor. [ FAILED ] NonFatalFailureInSetUpTest.FailureInSetUp [----------] 1 test from FatalFailureInSetUpTest [ RUN ] FatalFailureInSetUpTest.FailureInSetUp (expecting 3 failures) gtest_output_test_.cc:#: Failure Failed Expected failure #1, in SetUp(). gtest_output_test_.cc:#: Failure Failed Expected failure #2, in TearDown(). gtest_output_test_.cc:#: Failure Failed Expected failure #3, in the test fixture d'tor. [ FAILED ] FatalFailureInSetUpTest.FailureInSetUp [----------] 1 test from AddFailureAtTest [ RUN ] AddFailureAtTest.MessageContainsSpecifiedFileAndLineNumber foo.cc:42: Failure Failed Expected failure in foo.cc [ FAILED ] AddFailureAtTest.MessageContainsSpecifiedFileAndLineNumber [----------] 4 tests from MixedUpTestCaseTest [ RUN ] MixedUpTestCaseTest.FirstTestFromNamespaceFoo [ OK ] MixedUpTestCaseTest.FirstTestFromNamespaceFoo [ RUN ] MixedUpTestCaseTest.SecondTestFromNamespaceFoo [ OK ] MixedUpTestCaseTest.SecondTestFromNamespaceFoo [ RUN ] MixedUpTestCaseTest.ThisShouldFail gtest.cc:#: Failure Failed All tests in the same test case must use the same test fixture class. However, in test case MixedUpTestCaseTest, you defined test FirstTestFromNamespaceFoo and test ThisShouldFail using two different test fixture classes. This can happen if the two classes are from different namespaces or translation units and have the same name. You should probably rename one of the classes to put the tests into different test cases. [ FAILED ] MixedUpTestCaseTest.ThisShouldFail [ RUN ] MixedUpTestCaseTest.ThisShouldFailToo gtest.cc:#: Failure Failed All tests in the same test case must use the same test fixture class. However, in test case MixedUpTestCaseTest, you defined test FirstTestFromNamespaceFoo and test ThisShouldFailToo using two different test fixture classes. This can happen if the two classes are from different namespaces or translation units and have the same name. You should probably rename one of the classes to put the tests into different test cases. [ FAILED ] MixedUpTestCaseTest.ThisShouldFailToo [----------] 2 tests from MixedUpTestCaseWithSameTestNameTest [ RUN ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail [ OK ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail [ RUN ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail gtest.cc:#: Failure Failed All tests in the same test case must use the same test fixture class. However, in test case MixedUpTestCaseWithSameTestNameTest, you defined test TheSecondTestWithThisNameShouldFail and test TheSecondTestWithThisNameShouldFail using two different test fixture classes. This can happen if the two classes are from different namespaces or translation units and have the same name. You should probably rename one of the classes to put the tests into different test cases. [ FAILED ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail [----------] 2 tests from TEST_F_before_TEST_in_same_test_case [ RUN ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F [ OK ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F [ RUN ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail gtest.cc:#: Failure Failed All tests in the same test case must use the same test fixture class, so mixing TEST_F and TEST in the same test case is illegal. In test case TEST_F_before_TEST_in_same_test_case, test DefinedUsingTEST_F is defined using TEST_F but test DefinedUsingTESTAndShouldFail is defined using TEST. You probably want to change the TEST to TEST_F or move it to another test case. [ FAILED ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail [----------] 2 tests from TEST_before_TEST_F_in_same_test_case [ RUN ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST [ OK ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST [ RUN ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail gtest.cc:#: Failure Failed All tests in the same test case must use the same test fixture class, so mixing TEST_F and TEST in the same test case is illegal. In test case TEST_before_TEST_F_in_same_test_case, test DefinedUsingTEST_FAndShouldFail is defined using TEST_F but test DefinedUsingTEST is defined using TEST. You probably want to change the TEST to TEST_F or move it to another test case. [ FAILED ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail [----------] 8 tests from ExpectNonfatalFailureTest [ RUN ] ExpectNonfatalFailureTest.CanReferenceGlobalVariables [ OK ] ExpectNonfatalFailureTest.CanReferenceGlobalVariables [ RUN ] ExpectNonfatalFailureTest.CanReferenceLocalVariables [ OK ] ExpectNonfatalFailureTest.CanReferenceLocalVariables [ RUN ] ExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure [ OK ] ExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure [ RUN ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure (expecting a failure) gtest.cc:#: Failure Expected: 1 non-fatal failure Actual: 0 failures [ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure [ RUN ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures (expecting a failure) gtest.cc:#: Failure Expected: 1 non-fatal failure Actual: 2 failures gtest_output_test_.cc:#: Non-fatal failure: Failed Expected non-fatal failure 1. gtest_output_test_.cc:#: Non-fatal failure: Failed Expected non-fatal failure 2. [ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures [ RUN ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure (expecting a failure) gtest.cc:#: Failure Expected: 1 non-fatal failure Actual: gtest_output_test_.cc:#: Fatal failure: Failed Expected fatal failure. [ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure [ RUN ] ExpectNonfatalFailureTest.FailsWhenStatementReturns (expecting a failure) gtest.cc:#: Failure Expected: 1 non-fatal failure Actual: 0 failures [ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementReturns [ RUN ] ExpectNonfatalFailureTest.FailsWhenStatementThrows (expecting a failure) gtest.cc:#: Failure Expected: 1 non-fatal failure Actual: 0 failures [ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementThrows [----------] 8 tests from ExpectFatalFailureTest [ RUN ] ExpectFatalFailureTest.CanReferenceGlobalVariables [ OK ] ExpectFatalFailureTest.CanReferenceGlobalVariables [ RUN ] ExpectFatalFailureTest.CanReferenceLocalStaticVariables [ OK ] ExpectFatalFailureTest.CanReferenceLocalStaticVariables [ RUN ] ExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure [ OK ] ExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure [ RUN ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure (expecting a failure) gtest.cc:#: Failure Expected: 1 fatal failure Actual: 0 failures [ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure [ RUN ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures (expecting a failure) gtest.cc:#: Failure Expected: 1 fatal failure Actual: 2 failures gtest_output_test_.cc:#: Fatal failure: Failed Expected fatal failure. gtest_output_test_.cc:#: Fatal failure: Failed Expected fatal failure. [ FAILED ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures [ RUN ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure (expecting a failure) gtest.cc:#: Failure Expected: 1 fatal failure Actual: gtest_output_test_.cc:#: Non-fatal failure: Failed Expected non-fatal failure. [ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure [ RUN ] ExpectFatalFailureTest.FailsWhenStatementReturns (expecting a failure) gtest.cc:#: Failure Expected: 1 fatal failure Actual: 0 failures [ FAILED ] ExpectFatalFailureTest.FailsWhenStatementReturns [ RUN ] ExpectFatalFailureTest.FailsWhenStatementThrows (expecting a failure) gtest.cc:#: Failure Expected: 1 fatal failure Actual: 0 failures [ FAILED ] ExpectFatalFailureTest.FailsWhenStatementThrows [----------] 2 tests from TypedTest/0, where TypeParam = int [ RUN ] TypedTest/0.Success [ OK ] TypedTest/0.Success [ RUN ] TypedTest/0.Failure gtest_output_test_.cc:#: Failure Value of: TypeParam() Actual: 0 Expected: 1 Expected failure [ FAILED ] TypedTest/0.Failure, where TypeParam = int [----------] 2 tests from Unsigned/TypedTestP/0, where TypeParam = unsigned char [ RUN ] Unsigned/TypedTestP/0.Success [ OK ] Unsigned/TypedTestP/0.Success [ RUN ] Unsigned/TypedTestP/0.Failure gtest_output_test_.cc:#: Failure Value of: TypeParam() Actual: '\0' Expected: 1U Which is: 1 Expected failure [ FAILED ] Unsigned/TypedTestP/0.Failure, where TypeParam = unsigned char [----------] 2 tests from Unsigned/TypedTestP/1, where TypeParam = unsigned int [ RUN ] Unsigned/TypedTestP/1.Success [ OK ] Unsigned/TypedTestP/1.Success [ RUN ] Unsigned/TypedTestP/1.Failure gtest_output_test_.cc:#: Failure Value of: TypeParam() Actual: 0 Expected: 1U Which is: 1 Expected failure [ FAILED ] Unsigned/TypedTestP/1.Failure, where TypeParam = unsigned int [----------] 4 tests from ExpectFailureTest [ RUN ] ExpectFailureTest.ExpectFatalFailure (expecting 1 failure) gtest.cc:#: Failure Expected: 1 fatal failure Actual: gtest_output_test_.cc:#: Success: Succeeded (expecting 1 failure) gtest.cc:#: Failure Expected: 1 fatal failure Actual: gtest_output_test_.cc:#: Non-fatal failure: Failed Expected non-fatal failure. (expecting 1 failure) gtest.cc:#: Failure Expected: 1 fatal failure containing "Some other fatal failure expected." Actual: gtest_output_test_.cc:#: Fatal failure: Failed Expected fatal failure. [ FAILED ] ExpectFailureTest.ExpectFatalFailure [ RUN ] ExpectFailureTest.ExpectNonFatalFailure (expecting 1 failure) gtest.cc:#: Failure Expected: 1 non-fatal failure Actual: gtest_output_test_.cc:#: Success: Succeeded (expecting 1 failure) gtest.cc:#: Failure Expected: 1 non-fatal failure Actual: gtest_output_test_.cc:#: Fatal failure: Failed Expected fatal failure. (expecting 1 failure) gtest.cc:#: Failure Expected: 1 non-fatal failure containing "Some other non-fatal failure." Actual: gtest_output_test_.cc:#: Non-fatal failure: Failed Expected non-fatal failure. [ FAILED ] ExpectFailureTest.ExpectNonFatalFailure [ RUN ] ExpectFailureTest.ExpectFatalFailureOnAllThreads (expecting 1 failure) gtest.cc:#: Failure Expected: 1 fatal failure Actual: gtest_output_test_.cc:#: Success: Succeeded (expecting 1 failure) gtest.cc:#: Failure Expected: 1 fatal failure Actual: gtest_output_test_.cc:#: Non-fatal failure: Failed Expected non-fatal failure. (expecting 1 failure) gtest.cc:#: Failure Expected: 1 fatal failure containing "Some other fatal failure expected." Actual: gtest_output_test_.cc:#: Fatal failure: Failed Expected fatal failure. [ FAILED ] ExpectFailureTest.ExpectFatalFailureOnAllThreads [ RUN ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads (expecting 1 failure) gtest.cc:#: Failure Expected: 1 non-fatal failure Actual: gtest_output_test_.cc:#: Success: Succeeded (expecting 1 failure) gtest.cc:#: Failure Expected: 1 non-fatal failure Actual: gtest_output_test_.cc:#: Fatal failure: Failed Expected fatal failure. (expecting 1 failure) gtest.cc:#: Failure Expected: 1 non-fatal failure containing "Some other non-fatal failure." Actual: gtest_output_test_.cc:#: Non-fatal failure: Failed Expected non-fatal failure. [ FAILED ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads [----------] 2 tests from ExpectFailureWithThreadsTest [ RUN ] ExpectFailureWithThreadsTest.ExpectFatalFailure (expecting 2 failures) gtest_output_test_.cc:#: Failure Failed Expected fatal failure. gtest.cc:#: Failure Expected: 1 fatal failure Actual: 0 failures [ FAILED ] ExpectFailureWithThreadsTest.ExpectFatalFailure [ RUN ] ExpectFailureWithThreadsTest.ExpectNonFatalFailure (expecting 2 failures) gtest_output_test_.cc:#: Failure Failed Expected non-fatal failure. gtest.cc:#: Failure Expected: 1 non-fatal failure Actual: 0 failures [ FAILED ] ExpectFailureWithThreadsTest.ExpectNonFatalFailure [----------] 1 test from ScopedFakeTestPartResultReporterTest [ RUN ] ScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread (expecting 2 failures) gtest_output_test_.cc:#: Failure Failed Expected fatal failure. gtest_output_test_.cc:#: Failure Failed Expected non-fatal failure. [ FAILED ] ScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread [----------] 1 test from PrintingFailingParams/FailingParamTest [ RUN ] PrintingFailingParams/FailingParamTest.Fails/0 gtest_output_test_.cc:#: Failure Value of: GetParam() Actual: 2 Expected: 1 [ FAILED ] PrintingFailingParams/FailingParamTest.Fails/0, where GetParam() = 2 [----------] Global test environment tear-down BarEnvironment::TearDown() called. gtest_output_test_.cc:#: Failure Failed Expected non-fatal failure. FooEnvironment::TearDown() called. gtest_output_test_.cc:#: Failure Failed Expected fatal failure. [==========] 63 tests from 28 test cases ran. [ PASSED ] 21 tests. [ FAILED ] 42 tests, listed below: [ FAILED ] NonfatalFailureTest.EscapesStringOperands [ FAILED ] FatalFailureTest.FatalFailureInSubroutine [ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine [ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine [ FAILED ] LoggingTest.InterleavingLoggingAndAssertions [ FAILED ] SCOPED_TRACETest.ObeysScopes [ FAILED ] SCOPED_TRACETest.WorksInLoop [ FAILED ] SCOPED_TRACETest.WorksInSubroutine [ FAILED ] SCOPED_TRACETest.CanBeNested [ FAILED ] SCOPED_TRACETest.CanBeRepeated [ FAILED ] SCOPED_TRACETest.WorksConcurrently [ FAILED ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor [ FAILED ] FatalFailureInFixtureConstructorTest.FailureInConstructor [ FAILED ] NonFatalFailureInSetUpTest.FailureInSetUp [ FAILED ] FatalFailureInSetUpTest.FailureInSetUp [ FAILED ] AddFailureAtTest.MessageContainsSpecifiedFileAndLineNumber [ FAILED ] MixedUpTestCaseTest.ThisShouldFail [ FAILED ] MixedUpTestCaseTest.ThisShouldFailToo [ FAILED ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail [ FAILED ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail [ FAILED ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail [ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure [ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures [ FAILED ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure [ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementReturns [ FAILED ] ExpectNonfatalFailureTest.FailsWhenStatementThrows [ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure [ FAILED ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures [ FAILED ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure [ FAILED ] ExpectFatalFailureTest.FailsWhenStatementReturns [ FAILED ] ExpectFatalFailureTest.FailsWhenStatementThrows [ FAILED ] TypedTest/0.Failure, where TypeParam = int [ FAILED ] Unsigned/TypedTestP/0.Failure, where TypeParam = unsigned char [ FAILED ] Unsigned/TypedTestP/1.Failure, where TypeParam = unsigned int [ FAILED ] ExpectFailureTest.ExpectFatalFailure [ FAILED ] ExpectFailureTest.ExpectNonFatalFailure [ FAILED ] ExpectFailureTest.ExpectFatalFailureOnAllThreads [ FAILED ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads [ FAILED ] ExpectFailureWithThreadsTest.ExpectFatalFailure [ FAILED ] ExpectFailureWithThreadsTest.ExpectNonFatalFailure [ FAILED ] ScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread [ FAILED ] PrintingFailingParams/FailingParamTest.Fails/0, where GetParam() = 2 42 FAILED TESTS  YOU HAVE 1 DISABLED TEST Note: Google Test filter = FatalFailureTest.*:LoggingTest.* [==========] Running 4 tests from 2 test cases. [----------] Global test environment set-up. [----------] 3 tests from FatalFailureTest [ RUN ] FatalFailureTest.FatalFailureInSubroutine (expecting a failure that x should be 1) gtest_output_test_.cc:#: Failure Value of: x Actual: 2 Expected: 1 [ FAILED ] FatalFailureTest.FatalFailureInSubroutine (? ms) [ RUN ] FatalFailureTest.FatalFailureInNestedSubroutine (expecting a failure that x should be 1) gtest_output_test_.cc:#: Failure Value of: x Actual: 2 Expected: 1 [ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine (? ms) [ RUN ] FatalFailureTest.NonfatalFailureInSubroutine (expecting a failure on false) gtest_output_test_.cc:#: Failure Value of: false Actual: false Expected: true [ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine (? ms) [----------] 3 tests from FatalFailureTest (? ms total) [----------] 1 test from LoggingTest [ RUN ] LoggingTest.InterleavingLoggingAndAssertions (expecting 2 failures on (3) >= (a[i])) i == 0 i == 1 gtest_output_test_.cc:#: Failure Expected: (3) >= (a[i]), actual: 3 vs 9 i == 2 i == 3 gtest_output_test_.cc:#: Failure Expected: (3) >= (a[i]), actual: 3 vs 6 [ FAILED ] LoggingTest.InterleavingLoggingAndAssertions (? ms) [----------] 1 test from LoggingTest (? ms total) [----------] Global test environment tear-down [==========] 4 tests from 2 test cases ran. (? ms total) [ PASSED ] 0 tests. [ FAILED ] 4 tests, listed below: [ FAILED ] FatalFailureTest.FatalFailureInSubroutine [ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine [ FAILED ] FatalFailureTest.NonfatalFailureInSubroutine [ FAILED ] LoggingTest.InterleavingLoggingAndAssertions 4 FAILED TESTS Note: Google Test filter = *DISABLED_* [==========] Running 1 test from 1 test case. [----------] Global test environment set-up. [----------] 1 test from DisabledTestsWarningTest [ RUN ] DisabledTestsWarningTest.DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning [ OK ] DisabledTestsWarningTest.DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning [----------] Global test environment tear-down [==========] 1 test from 1 test case ran. [ PASSED ] 1 test. Note: Google Test filter = PassingTest.* Note: This is test shard 2 of 2. [==========] Running 1 test from 1 test case. [----------] Global test environment set-up. [----------] 1 test from PassingTest [ RUN ] PassingTest.PassingTest2 [ OK ] PassingTest.PassingTest2 [----------] Global test environment tear-down [==========] 1 test from 1 test case ran. [ PASSED ] 1 test. dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_pred_impl_unittest.cc000066400000000000000000002271021377520261000240400ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // This file is AUTOMATICALLY GENERATED on 10/31/2011 by command // 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! // Regression test for gtest_pred_impl.h // // This file is generated by a script and quite long. If you intend to // learn how Google Test works by reading its unit tests, read // gtest_unittest.cc instead. // // This is intended as a regression test for the Google Test predicate // assertions. We compile it as part of the gtest_unittest target // only to keep the implementation tidy and compact, as it is quite // involved to set up the stage for testing Google Test using Google // Test itself. // // Currently, gtest_unittest takes ~11 seconds to run in the testing // daemon. In the future, if it grows too large and needs much more // time to finish, we should consider separating this file into a // stand-alone regression test. #include #include "gtest/gtest.h" #include "gtest/gtest-spi.h" // A user-defined data type. struct Bool { explicit Bool(int val) : value(val != 0) {} bool operator>(int n) const { return value > Bool(n).value; } Bool operator+(const Bool& rhs) const { return Bool(value + rhs.value); } bool operator==(const Bool& rhs) const { return value == rhs.value; } bool value; }; // Enables Bool to be used in assertions. std::ostream& operator<<(std::ostream& os, const Bool& x) { return os << (x.value ? "true" : "false"); } // Sample functions/functors for testing unary predicate assertions. // A unary predicate function. template bool PredFunction1(T1 v1) { return v1 > 0; } // The following two functions are needed to circumvent a bug in // gcc 2.95.3, which sometimes has problem with the above template // function. bool PredFunction1Int(int v1) { return v1 > 0; } bool PredFunction1Bool(Bool v1) { return v1 > 0; } // A unary predicate functor. struct PredFunctor1 { template bool operator()(const T1& v1) { return v1 > 0; } }; // A unary predicate-formatter function. template testing::AssertionResult PredFormatFunction1(const char* e1, const T1& v1) { if (PredFunction1(v1)) return testing::AssertionSuccess(); return testing::AssertionFailure() << e1 << " is expected to be positive, but evaluates to " << v1 << "."; } // A unary predicate-formatter functor. struct PredFormatFunctor1 { template testing::AssertionResult operator()(const char* e1, const T1& v1) const { return PredFormatFunction1(e1, v1); } }; // Tests for {EXPECT|ASSERT}_PRED_FORMAT1. class Predicate1Test : public testing::Test { protected: virtual void SetUp() { expected_to_finish_ = true; finished_ = false; n1_ = 0; } virtual void TearDown() { // Verifies that each of the predicate's arguments was evaluated // exactly once. EXPECT_EQ(1, n1_) << "The predicate assertion didn't evaluate argument 2 " "exactly once."; // Verifies that the control flow in the test function is expected. if (expected_to_finish_ && !finished_) { FAIL() << "The predicate assertion unexpactedly aborted the test."; } else if (!expected_to_finish_ && finished_) { FAIL() << "The failed predicate assertion didn't abort the test " "as expected."; } } // true iff the test function is expected to run to finish. static bool expected_to_finish_; // true iff the test function did run to finish. static bool finished_; static int n1_; }; bool Predicate1Test::expected_to_finish_; bool Predicate1Test::finished_; int Predicate1Test::n1_; typedef Predicate1Test EXPECT_PRED_FORMAT1Test; typedef Predicate1Test ASSERT_PRED_FORMAT1Test; typedef Predicate1Test EXPECT_PRED1Test; typedef Predicate1Test ASSERT_PRED1Test; // Tests a successful EXPECT_PRED1 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeSuccess) { EXPECT_PRED1(PredFunction1Int, ++n1_); finished_ = true; } // Tests a successful EXPECT_PRED1 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED1Test, FunctionOnUserTypeSuccess) { EXPECT_PRED1(PredFunction1Bool, Bool(++n1_)); finished_ = true; } // Tests a successful EXPECT_PRED1 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeSuccess) { EXPECT_PRED1(PredFunctor1(), ++n1_); finished_ = true; } // Tests a successful EXPECT_PRED1 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED1Test, FunctorOnUserTypeSuccess) { EXPECT_PRED1(PredFunctor1(), Bool(++n1_)); finished_ = true; } // Tests a failed EXPECT_PRED1 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED1(PredFunction1Int, n1_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED1 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED1Test, FunctionOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED1(PredFunction1Bool, Bool(n1_++)); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED1 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED1(PredFunctor1(), n1_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED1 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED1Test, FunctorOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED1(PredFunctor1(), Bool(n1_++)); finished_ = true; }, ""); } // Tests a successful ASSERT_PRED1 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeSuccess) { ASSERT_PRED1(PredFunction1Int, ++n1_); finished_ = true; } // Tests a successful ASSERT_PRED1 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED1Test, FunctionOnUserTypeSuccess) { ASSERT_PRED1(PredFunction1Bool, Bool(++n1_)); finished_ = true; } // Tests a successful ASSERT_PRED1 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeSuccess) { ASSERT_PRED1(PredFunctor1(), ++n1_); finished_ = true; } // Tests a successful ASSERT_PRED1 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED1Test, FunctorOnUserTypeSuccess) { ASSERT_PRED1(PredFunctor1(), Bool(++n1_)); finished_ = true; } // Tests a failed ASSERT_PRED1 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED1(PredFunction1Int, n1_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED1 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED1Test, FunctionOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED1(PredFunction1Bool, Bool(n1_++)); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED1 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED1(PredFunctor1(), n1_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED1 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED1Test, FunctorOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED1(PredFunctor1(), Bool(n1_++)); finished_ = true; }, ""); } // Tests a successful EXPECT_PRED_FORMAT1 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) { EXPECT_PRED_FORMAT1(PredFormatFunction1, ++n1_); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT1 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) { EXPECT_PRED_FORMAT1(PredFormatFunction1, Bool(++n1_)); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT1 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) { EXPECT_PRED_FORMAT1(PredFormatFunctor1(), ++n1_); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT1 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) { EXPECT_PRED_FORMAT1(PredFormatFunctor1(), Bool(++n1_)); finished_ = true; } // Tests a failed EXPECT_PRED_FORMAT1 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT1(PredFormatFunction1, n1_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT1 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT1(PredFormatFunction1, Bool(n1_++)); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT1 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT1(PredFormatFunctor1(), n1_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT1 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT1(PredFormatFunctor1(), Bool(n1_++)); finished_ = true; }, ""); } // Tests a successful ASSERT_PRED_FORMAT1 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) { ASSERT_PRED_FORMAT1(PredFormatFunction1, ++n1_); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT1 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) { ASSERT_PRED_FORMAT1(PredFormatFunction1, Bool(++n1_)); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT1 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) { ASSERT_PRED_FORMAT1(PredFormatFunctor1(), ++n1_); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT1 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) { ASSERT_PRED_FORMAT1(PredFormatFunctor1(), Bool(++n1_)); finished_ = true; } // Tests a failed ASSERT_PRED_FORMAT1 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT1(PredFormatFunction1, n1_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT1 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT1(PredFormatFunction1, Bool(n1_++)); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT1 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT1(PredFormatFunctor1(), n1_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT1 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT1(PredFormatFunctor1(), Bool(n1_++)); finished_ = true; }, ""); } // Sample functions/functors for testing binary predicate assertions. // A binary predicate function. template bool PredFunction2(T1 v1, T2 v2) { return v1 + v2 > 0; } // The following two functions are needed to circumvent a bug in // gcc 2.95.3, which sometimes has problem with the above template // function. bool PredFunction2Int(int v1, int v2) { return v1 + v2 > 0; } bool PredFunction2Bool(Bool v1, Bool v2) { return v1 + v2 > 0; } // A binary predicate functor. struct PredFunctor2 { template bool operator()(const T1& v1, const T2& v2) { return v1 + v2 > 0; } }; // A binary predicate-formatter function. template testing::AssertionResult PredFormatFunction2(const char* e1, const char* e2, const T1& v1, const T2& v2) { if (PredFunction2(v1, v2)) return testing::AssertionSuccess(); return testing::AssertionFailure() << e1 << " + " << e2 << " is expected to be positive, but evaluates to " << v1 + v2 << "."; } // A binary predicate-formatter functor. struct PredFormatFunctor2 { template testing::AssertionResult operator()(const char* e1, const char* e2, const T1& v1, const T2& v2) const { return PredFormatFunction2(e1, e2, v1, v2); } }; // Tests for {EXPECT|ASSERT}_PRED_FORMAT2. class Predicate2Test : public testing::Test { protected: virtual void SetUp() { expected_to_finish_ = true; finished_ = false; n1_ = n2_ = 0; } virtual void TearDown() { // Verifies that each of the predicate's arguments was evaluated // exactly once. EXPECT_EQ(1, n1_) << "The predicate assertion didn't evaluate argument 2 " "exactly once."; EXPECT_EQ(1, n2_) << "The predicate assertion didn't evaluate argument 3 " "exactly once."; // Verifies that the control flow in the test function is expected. if (expected_to_finish_ && !finished_) { FAIL() << "The predicate assertion unexpactedly aborted the test."; } else if (!expected_to_finish_ && finished_) { FAIL() << "The failed predicate assertion didn't abort the test " "as expected."; } } // true iff the test function is expected to run to finish. static bool expected_to_finish_; // true iff the test function did run to finish. static bool finished_; static int n1_; static int n2_; }; bool Predicate2Test::expected_to_finish_; bool Predicate2Test::finished_; int Predicate2Test::n1_; int Predicate2Test::n2_; typedef Predicate2Test EXPECT_PRED_FORMAT2Test; typedef Predicate2Test ASSERT_PRED_FORMAT2Test; typedef Predicate2Test EXPECT_PRED2Test; typedef Predicate2Test ASSERT_PRED2Test; // Tests a successful EXPECT_PRED2 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeSuccess) { EXPECT_PRED2(PredFunction2Int, ++n1_, ++n2_); finished_ = true; } // Tests a successful EXPECT_PRED2 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED2Test, FunctionOnUserTypeSuccess) { EXPECT_PRED2(PredFunction2Bool, Bool(++n1_), Bool(++n2_)); finished_ = true; } // Tests a successful EXPECT_PRED2 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeSuccess) { EXPECT_PRED2(PredFunctor2(), ++n1_, ++n2_); finished_ = true; } // Tests a successful EXPECT_PRED2 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED2Test, FunctorOnUserTypeSuccess) { EXPECT_PRED2(PredFunctor2(), Bool(++n1_), Bool(++n2_)); finished_ = true; } // Tests a failed EXPECT_PRED2 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED2(PredFunction2Int, n1_++, n2_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED2 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED2Test, FunctionOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED2(PredFunction2Bool, Bool(n1_++), Bool(n2_++)); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED2 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED2(PredFunctor2(), n1_++, n2_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED2 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED2Test, FunctorOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED2(PredFunctor2(), Bool(n1_++), Bool(n2_++)); finished_ = true; }, ""); } // Tests a successful ASSERT_PRED2 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeSuccess) { ASSERT_PRED2(PredFunction2Int, ++n1_, ++n2_); finished_ = true; } // Tests a successful ASSERT_PRED2 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED2Test, FunctionOnUserTypeSuccess) { ASSERT_PRED2(PredFunction2Bool, Bool(++n1_), Bool(++n2_)); finished_ = true; } // Tests a successful ASSERT_PRED2 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeSuccess) { ASSERT_PRED2(PredFunctor2(), ++n1_, ++n2_); finished_ = true; } // Tests a successful ASSERT_PRED2 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED2Test, FunctorOnUserTypeSuccess) { ASSERT_PRED2(PredFunctor2(), Bool(++n1_), Bool(++n2_)); finished_ = true; } // Tests a failed ASSERT_PRED2 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED2(PredFunction2Int, n1_++, n2_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED2 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED2Test, FunctionOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED2(PredFunction2Bool, Bool(n1_++), Bool(n2_++)); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED2 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED2(PredFunctor2(), n1_++, n2_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED2 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED2Test, FunctorOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED2(PredFunctor2(), Bool(n1_++), Bool(n2_++)); finished_ = true; }, ""); } // Tests a successful EXPECT_PRED_FORMAT2 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) { EXPECT_PRED_FORMAT2(PredFormatFunction2, ++n1_, ++n2_); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT2 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) { EXPECT_PRED_FORMAT2(PredFormatFunction2, Bool(++n1_), Bool(++n2_)); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT2 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) { EXPECT_PRED_FORMAT2(PredFormatFunctor2(), ++n1_, ++n2_); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT2 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) { EXPECT_PRED_FORMAT2(PredFormatFunctor2(), Bool(++n1_), Bool(++n2_)); finished_ = true; } // Tests a failed EXPECT_PRED_FORMAT2 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT2(PredFormatFunction2, n1_++, n2_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT2 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT2(PredFormatFunction2, Bool(n1_++), Bool(n2_++)); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT2 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT2(PredFormatFunctor2(), n1_++, n2_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT2 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT2(PredFormatFunctor2(), Bool(n1_++), Bool(n2_++)); finished_ = true; }, ""); } // Tests a successful ASSERT_PRED_FORMAT2 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) { ASSERT_PRED_FORMAT2(PredFormatFunction2, ++n1_, ++n2_); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT2 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) { ASSERT_PRED_FORMAT2(PredFormatFunction2, Bool(++n1_), Bool(++n2_)); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT2 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) { ASSERT_PRED_FORMAT2(PredFormatFunctor2(), ++n1_, ++n2_); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT2 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) { ASSERT_PRED_FORMAT2(PredFormatFunctor2(), Bool(++n1_), Bool(++n2_)); finished_ = true; } // Tests a failed ASSERT_PRED_FORMAT2 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT2(PredFormatFunction2, n1_++, n2_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT2 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT2(PredFormatFunction2, Bool(n1_++), Bool(n2_++)); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT2 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT2(PredFormatFunctor2(), n1_++, n2_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT2 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT2(PredFormatFunctor2(), Bool(n1_++), Bool(n2_++)); finished_ = true; }, ""); } // Sample functions/functors for testing ternary predicate assertions. // A ternary predicate function. template bool PredFunction3(T1 v1, T2 v2, T3 v3) { return v1 + v2 + v3 > 0; } // The following two functions are needed to circumvent a bug in // gcc 2.95.3, which sometimes has problem with the above template // function. bool PredFunction3Int(int v1, int v2, int v3) { return v1 + v2 + v3 > 0; } bool PredFunction3Bool(Bool v1, Bool v2, Bool v3) { return v1 + v2 + v3 > 0; } // A ternary predicate functor. struct PredFunctor3 { template bool operator()(const T1& v1, const T2& v2, const T3& v3) { return v1 + v2 + v3 > 0; } }; // A ternary predicate-formatter function. template testing::AssertionResult PredFormatFunction3(const char* e1, const char* e2, const char* e3, const T1& v1, const T2& v2, const T3& v3) { if (PredFunction3(v1, v2, v3)) return testing::AssertionSuccess(); return testing::AssertionFailure() << e1 << " + " << e2 << " + " << e3 << " is expected to be positive, but evaluates to " << v1 + v2 + v3 << "."; } // A ternary predicate-formatter functor. struct PredFormatFunctor3 { template testing::AssertionResult operator()(const char* e1, const char* e2, const char* e3, const T1& v1, const T2& v2, const T3& v3) const { return PredFormatFunction3(e1, e2, e3, v1, v2, v3); } }; // Tests for {EXPECT|ASSERT}_PRED_FORMAT3. class Predicate3Test : public testing::Test { protected: virtual void SetUp() { expected_to_finish_ = true; finished_ = false; n1_ = n2_ = n3_ = 0; } virtual void TearDown() { // Verifies that each of the predicate's arguments was evaluated // exactly once. EXPECT_EQ(1, n1_) << "The predicate assertion didn't evaluate argument 2 " "exactly once."; EXPECT_EQ(1, n2_) << "The predicate assertion didn't evaluate argument 3 " "exactly once."; EXPECT_EQ(1, n3_) << "The predicate assertion didn't evaluate argument 4 " "exactly once."; // Verifies that the control flow in the test function is expected. if (expected_to_finish_ && !finished_) { FAIL() << "The predicate assertion unexpactedly aborted the test."; } else if (!expected_to_finish_ && finished_) { FAIL() << "The failed predicate assertion didn't abort the test " "as expected."; } } // true iff the test function is expected to run to finish. static bool expected_to_finish_; // true iff the test function did run to finish. static bool finished_; static int n1_; static int n2_; static int n3_; }; bool Predicate3Test::expected_to_finish_; bool Predicate3Test::finished_; int Predicate3Test::n1_; int Predicate3Test::n2_; int Predicate3Test::n3_; typedef Predicate3Test EXPECT_PRED_FORMAT3Test; typedef Predicate3Test ASSERT_PRED_FORMAT3Test; typedef Predicate3Test EXPECT_PRED3Test; typedef Predicate3Test ASSERT_PRED3Test; // Tests a successful EXPECT_PRED3 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeSuccess) { EXPECT_PRED3(PredFunction3Int, ++n1_, ++n2_, ++n3_); finished_ = true; } // Tests a successful EXPECT_PRED3 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED3Test, FunctionOnUserTypeSuccess) { EXPECT_PRED3(PredFunction3Bool, Bool(++n1_), Bool(++n2_), Bool(++n3_)); finished_ = true; } // Tests a successful EXPECT_PRED3 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeSuccess) { EXPECT_PRED3(PredFunctor3(), ++n1_, ++n2_, ++n3_); finished_ = true; } // Tests a successful EXPECT_PRED3 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED3Test, FunctorOnUserTypeSuccess) { EXPECT_PRED3(PredFunctor3(), Bool(++n1_), Bool(++n2_), Bool(++n3_)); finished_ = true; } // Tests a failed EXPECT_PRED3 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED3(PredFunction3Int, n1_++, n2_++, n3_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED3 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED3Test, FunctionOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED3(PredFunction3Bool, Bool(n1_++), Bool(n2_++), Bool(n3_++)); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED3 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED3(PredFunctor3(), n1_++, n2_++, n3_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED3 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED3Test, FunctorOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED3(PredFunctor3(), Bool(n1_++), Bool(n2_++), Bool(n3_++)); finished_ = true; }, ""); } // Tests a successful ASSERT_PRED3 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeSuccess) { ASSERT_PRED3(PredFunction3Int, ++n1_, ++n2_, ++n3_); finished_ = true; } // Tests a successful ASSERT_PRED3 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED3Test, FunctionOnUserTypeSuccess) { ASSERT_PRED3(PredFunction3Bool, Bool(++n1_), Bool(++n2_), Bool(++n3_)); finished_ = true; } // Tests a successful ASSERT_PRED3 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeSuccess) { ASSERT_PRED3(PredFunctor3(), ++n1_, ++n2_, ++n3_); finished_ = true; } // Tests a successful ASSERT_PRED3 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED3Test, FunctorOnUserTypeSuccess) { ASSERT_PRED3(PredFunctor3(), Bool(++n1_), Bool(++n2_), Bool(++n3_)); finished_ = true; } // Tests a failed ASSERT_PRED3 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED3(PredFunction3Int, n1_++, n2_++, n3_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED3 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED3Test, FunctionOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED3(PredFunction3Bool, Bool(n1_++), Bool(n2_++), Bool(n3_++)); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED3 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED3(PredFunctor3(), n1_++, n2_++, n3_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED3 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED3Test, FunctorOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED3(PredFunctor3(), Bool(n1_++), Bool(n2_++), Bool(n3_++)); finished_ = true; }, ""); } // Tests a successful EXPECT_PRED_FORMAT3 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) { EXPECT_PRED_FORMAT3(PredFormatFunction3, ++n1_, ++n2_, ++n3_); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT3 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) { EXPECT_PRED_FORMAT3(PredFormatFunction3, Bool(++n1_), Bool(++n2_), Bool(++n3_)); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT3 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) { EXPECT_PRED_FORMAT3(PredFormatFunctor3(), ++n1_, ++n2_, ++n3_); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT3 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) { EXPECT_PRED_FORMAT3(PredFormatFunctor3(), Bool(++n1_), Bool(++n2_), Bool(++n3_)); finished_ = true; } // Tests a failed EXPECT_PRED_FORMAT3 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT3(PredFormatFunction3, n1_++, n2_++, n3_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT3 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT3(PredFormatFunction3, Bool(n1_++), Bool(n2_++), Bool(n3_++)); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT3 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT3(PredFormatFunctor3(), n1_++, n2_++, n3_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT3 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT3(PredFormatFunctor3(), Bool(n1_++), Bool(n2_++), Bool(n3_++)); finished_ = true; }, ""); } // Tests a successful ASSERT_PRED_FORMAT3 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) { ASSERT_PRED_FORMAT3(PredFormatFunction3, ++n1_, ++n2_, ++n3_); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT3 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) { ASSERT_PRED_FORMAT3(PredFormatFunction3, Bool(++n1_), Bool(++n2_), Bool(++n3_)); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT3 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) { ASSERT_PRED_FORMAT3(PredFormatFunctor3(), ++n1_, ++n2_, ++n3_); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT3 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) { ASSERT_PRED_FORMAT3(PredFormatFunctor3(), Bool(++n1_), Bool(++n2_), Bool(++n3_)); finished_ = true; } // Tests a failed ASSERT_PRED_FORMAT3 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT3(PredFormatFunction3, n1_++, n2_++, n3_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT3 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT3(PredFormatFunction3, Bool(n1_++), Bool(n2_++), Bool(n3_++)); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT3 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT3(PredFormatFunctor3(), n1_++, n2_++, n3_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT3 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT3(PredFormatFunctor3(), Bool(n1_++), Bool(n2_++), Bool(n3_++)); finished_ = true; }, ""); } // Sample functions/functors for testing 4-ary predicate assertions. // A 4-ary predicate function. template bool PredFunction4(T1 v1, T2 v2, T3 v3, T4 v4) { return v1 + v2 + v3 + v4 > 0; } // The following two functions are needed to circumvent a bug in // gcc 2.95.3, which sometimes has problem with the above template // function. bool PredFunction4Int(int v1, int v2, int v3, int v4) { return v1 + v2 + v3 + v4 > 0; } bool PredFunction4Bool(Bool v1, Bool v2, Bool v3, Bool v4) { return v1 + v2 + v3 + v4 > 0; } // A 4-ary predicate functor. struct PredFunctor4 { template bool operator()(const T1& v1, const T2& v2, const T3& v3, const T4& v4) { return v1 + v2 + v3 + v4 > 0; } }; // A 4-ary predicate-formatter function. template testing::AssertionResult PredFormatFunction4(const char* e1, const char* e2, const char* e3, const char* e4, const T1& v1, const T2& v2, const T3& v3, const T4& v4) { if (PredFunction4(v1, v2, v3, v4)) return testing::AssertionSuccess(); return testing::AssertionFailure() << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " is expected to be positive, but evaluates to " << v1 + v2 + v3 + v4 << "."; } // A 4-ary predicate-formatter functor. struct PredFormatFunctor4 { template testing::AssertionResult operator()(const char* e1, const char* e2, const char* e3, const char* e4, const T1& v1, const T2& v2, const T3& v3, const T4& v4) const { return PredFormatFunction4(e1, e2, e3, e4, v1, v2, v3, v4); } }; // Tests for {EXPECT|ASSERT}_PRED_FORMAT4. class Predicate4Test : public testing::Test { protected: virtual void SetUp() { expected_to_finish_ = true; finished_ = false; n1_ = n2_ = n3_ = n4_ = 0; } virtual void TearDown() { // Verifies that each of the predicate's arguments was evaluated // exactly once. EXPECT_EQ(1, n1_) << "The predicate assertion didn't evaluate argument 2 " "exactly once."; EXPECT_EQ(1, n2_) << "The predicate assertion didn't evaluate argument 3 " "exactly once."; EXPECT_EQ(1, n3_) << "The predicate assertion didn't evaluate argument 4 " "exactly once."; EXPECT_EQ(1, n4_) << "The predicate assertion didn't evaluate argument 5 " "exactly once."; // Verifies that the control flow in the test function is expected. if (expected_to_finish_ && !finished_) { FAIL() << "The predicate assertion unexpactedly aborted the test."; } else if (!expected_to_finish_ && finished_) { FAIL() << "The failed predicate assertion didn't abort the test " "as expected."; } } // true iff the test function is expected to run to finish. static bool expected_to_finish_; // true iff the test function did run to finish. static bool finished_; static int n1_; static int n2_; static int n3_; static int n4_; }; bool Predicate4Test::expected_to_finish_; bool Predicate4Test::finished_; int Predicate4Test::n1_; int Predicate4Test::n2_; int Predicate4Test::n3_; int Predicate4Test::n4_; typedef Predicate4Test EXPECT_PRED_FORMAT4Test; typedef Predicate4Test ASSERT_PRED_FORMAT4Test; typedef Predicate4Test EXPECT_PRED4Test; typedef Predicate4Test ASSERT_PRED4Test; // Tests a successful EXPECT_PRED4 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeSuccess) { EXPECT_PRED4(PredFunction4Int, ++n1_, ++n2_, ++n3_, ++n4_); finished_ = true; } // Tests a successful EXPECT_PRED4 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED4Test, FunctionOnUserTypeSuccess) { EXPECT_PRED4(PredFunction4Bool, Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_)); finished_ = true; } // Tests a successful EXPECT_PRED4 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeSuccess) { EXPECT_PRED4(PredFunctor4(), ++n1_, ++n2_, ++n3_, ++n4_); finished_ = true; } // Tests a successful EXPECT_PRED4 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED4Test, FunctorOnUserTypeSuccess) { EXPECT_PRED4(PredFunctor4(), Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_)); finished_ = true; } // Tests a failed EXPECT_PRED4 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED4(PredFunction4Int, n1_++, n2_++, n3_++, n4_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED4 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED4Test, FunctionOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED4(PredFunction4Bool, Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++)); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED4 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED4(PredFunctor4(), n1_++, n2_++, n3_++, n4_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED4 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED4Test, FunctorOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED4(PredFunctor4(), Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++)); finished_ = true; }, ""); } // Tests a successful ASSERT_PRED4 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeSuccess) { ASSERT_PRED4(PredFunction4Int, ++n1_, ++n2_, ++n3_, ++n4_); finished_ = true; } // Tests a successful ASSERT_PRED4 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED4Test, FunctionOnUserTypeSuccess) { ASSERT_PRED4(PredFunction4Bool, Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_)); finished_ = true; } // Tests a successful ASSERT_PRED4 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeSuccess) { ASSERT_PRED4(PredFunctor4(), ++n1_, ++n2_, ++n3_, ++n4_); finished_ = true; } // Tests a successful ASSERT_PRED4 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED4Test, FunctorOnUserTypeSuccess) { ASSERT_PRED4(PredFunctor4(), Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_)); finished_ = true; } // Tests a failed ASSERT_PRED4 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED4(PredFunction4Int, n1_++, n2_++, n3_++, n4_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED4 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED4Test, FunctionOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED4(PredFunction4Bool, Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++)); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED4 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED4(PredFunctor4(), n1_++, n2_++, n3_++, n4_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED4 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED4Test, FunctorOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED4(PredFunctor4(), Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++)); finished_ = true; }, ""); } // Tests a successful EXPECT_PRED_FORMAT4 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) { EXPECT_PRED_FORMAT4(PredFormatFunction4, ++n1_, ++n2_, ++n3_, ++n4_); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT4 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) { EXPECT_PRED_FORMAT4(PredFormatFunction4, Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_)); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT4 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) { EXPECT_PRED_FORMAT4(PredFormatFunctor4(), ++n1_, ++n2_, ++n3_, ++n4_); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT4 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) { EXPECT_PRED_FORMAT4(PredFormatFunctor4(), Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_)); finished_ = true; } // Tests a failed EXPECT_PRED_FORMAT4 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT4(PredFormatFunction4, n1_++, n2_++, n3_++, n4_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT4 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT4(PredFormatFunction4, Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++)); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT4 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT4(PredFormatFunctor4(), n1_++, n2_++, n3_++, n4_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT4 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT4(PredFormatFunctor4(), Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++)); finished_ = true; }, ""); } // Tests a successful ASSERT_PRED_FORMAT4 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) { ASSERT_PRED_FORMAT4(PredFormatFunction4, ++n1_, ++n2_, ++n3_, ++n4_); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT4 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) { ASSERT_PRED_FORMAT4(PredFormatFunction4, Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_)); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT4 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) { ASSERT_PRED_FORMAT4(PredFormatFunctor4(), ++n1_, ++n2_, ++n3_, ++n4_); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT4 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) { ASSERT_PRED_FORMAT4(PredFormatFunctor4(), Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_)); finished_ = true; } // Tests a failed ASSERT_PRED_FORMAT4 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT4(PredFormatFunction4, n1_++, n2_++, n3_++, n4_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT4 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT4(PredFormatFunction4, Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++)); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT4 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT4(PredFormatFunctor4(), n1_++, n2_++, n3_++, n4_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT4 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT4(PredFormatFunctor4(), Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++)); finished_ = true; }, ""); } // Sample functions/functors for testing 5-ary predicate assertions. // A 5-ary predicate function. template bool PredFunction5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) { return v1 + v2 + v3 + v4 + v5 > 0; } // The following two functions are needed to circumvent a bug in // gcc 2.95.3, which sometimes has problem with the above template // function. bool PredFunction5Int(int v1, int v2, int v3, int v4, int v5) { return v1 + v2 + v3 + v4 + v5 > 0; } bool PredFunction5Bool(Bool v1, Bool v2, Bool v3, Bool v4, Bool v5) { return v1 + v2 + v3 + v4 + v5 > 0; } // A 5-ary predicate functor. struct PredFunctor5 { template bool operator()(const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5) { return v1 + v2 + v3 + v4 + v5 > 0; } }; // A 5-ary predicate-formatter function. template testing::AssertionResult PredFormatFunction5(const char* e1, const char* e2, const char* e3, const char* e4, const char* e5, const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5) { if (PredFunction5(v1, v2, v3, v4, v5)) return testing::AssertionSuccess(); return testing::AssertionFailure() << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5 << " is expected to be positive, but evaluates to " << v1 + v2 + v3 + v4 + v5 << "."; } // A 5-ary predicate-formatter functor. struct PredFormatFunctor5 { template testing::AssertionResult operator()(const char* e1, const char* e2, const char* e3, const char* e4, const char* e5, const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5) const { return PredFormatFunction5(e1, e2, e3, e4, e5, v1, v2, v3, v4, v5); } }; // Tests for {EXPECT|ASSERT}_PRED_FORMAT5. class Predicate5Test : public testing::Test { protected: virtual void SetUp() { expected_to_finish_ = true; finished_ = false; n1_ = n2_ = n3_ = n4_ = n5_ = 0; } virtual void TearDown() { // Verifies that each of the predicate's arguments was evaluated // exactly once. EXPECT_EQ(1, n1_) << "The predicate assertion didn't evaluate argument 2 " "exactly once."; EXPECT_EQ(1, n2_) << "The predicate assertion didn't evaluate argument 3 " "exactly once."; EXPECT_EQ(1, n3_) << "The predicate assertion didn't evaluate argument 4 " "exactly once."; EXPECT_EQ(1, n4_) << "The predicate assertion didn't evaluate argument 5 " "exactly once."; EXPECT_EQ(1, n5_) << "The predicate assertion didn't evaluate argument 6 " "exactly once."; // Verifies that the control flow in the test function is expected. if (expected_to_finish_ && !finished_) { FAIL() << "The predicate assertion unexpactedly aborted the test."; } else if (!expected_to_finish_ && finished_) { FAIL() << "The failed predicate assertion didn't abort the test " "as expected."; } } // true iff the test function is expected to run to finish. static bool expected_to_finish_; // true iff the test function did run to finish. static bool finished_; static int n1_; static int n2_; static int n3_; static int n4_; static int n5_; }; bool Predicate5Test::expected_to_finish_; bool Predicate5Test::finished_; int Predicate5Test::n1_; int Predicate5Test::n2_; int Predicate5Test::n3_; int Predicate5Test::n4_; int Predicate5Test::n5_; typedef Predicate5Test EXPECT_PRED_FORMAT5Test; typedef Predicate5Test ASSERT_PRED_FORMAT5Test; typedef Predicate5Test EXPECT_PRED5Test; typedef Predicate5Test ASSERT_PRED5Test; // Tests a successful EXPECT_PRED5 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeSuccess) { EXPECT_PRED5(PredFunction5Int, ++n1_, ++n2_, ++n3_, ++n4_, ++n5_); finished_ = true; } // Tests a successful EXPECT_PRED5 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED5Test, FunctionOnUserTypeSuccess) { EXPECT_PRED5(PredFunction5Bool, Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_), Bool(++n5_)); finished_ = true; } // Tests a successful EXPECT_PRED5 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeSuccess) { EXPECT_PRED5(PredFunctor5(), ++n1_, ++n2_, ++n3_, ++n4_, ++n5_); finished_ = true; } // Tests a successful EXPECT_PRED5 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED5Test, FunctorOnUserTypeSuccess) { EXPECT_PRED5(PredFunctor5(), Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_), Bool(++n5_)); finished_ = true; } // Tests a failed EXPECT_PRED5 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED5(PredFunction5Int, n1_++, n2_++, n3_++, n4_++, n5_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED5 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED5Test, FunctionOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED5(PredFunction5Bool, Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++), Bool(n5_++)); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED5 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED5(PredFunctor5(), n1_++, n2_++, n3_++, n4_++, n5_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED5 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED5Test, FunctorOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED5(PredFunctor5(), Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++), Bool(n5_++)); finished_ = true; }, ""); } // Tests a successful ASSERT_PRED5 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeSuccess) { ASSERT_PRED5(PredFunction5Int, ++n1_, ++n2_, ++n3_, ++n4_, ++n5_); finished_ = true; } // Tests a successful ASSERT_PRED5 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED5Test, FunctionOnUserTypeSuccess) { ASSERT_PRED5(PredFunction5Bool, Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_), Bool(++n5_)); finished_ = true; } // Tests a successful ASSERT_PRED5 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeSuccess) { ASSERT_PRED5(PredFunctor5(), ++n1_, ++n2_, ++n3_, ++n4_, ++n5_); finished_ = true; } // Tests a successful ASSERT_PRED5 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED5Test, FunctorOnUserTypeSuccess) { ASSERT_PRED5(PredFunctor5(), Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_), Bool(++n5_)); finished_ = true; } // Tests a failed ASSERT_PRED5 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED5(PredFunction5Int, n1_++, n2_++, n3_++, n4_++, n5_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED5 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED5Test, FunctionOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED5(PredFunction5Bool, Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++), Bool(n5_++)); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED5 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED5(PredFunctor5(), n1_++, n2_++, n3_++, n4_++, n5_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED5 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED5Test, FunctorOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED5(PredFunctor5(), Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++), Bool(n5_++)); finished_ = true; }, ""); } // Tests a successful EXPECT_PRED_FORMAT5 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) { EXPECT_PRED_FORMAT5(PredFormatFunction5, ++n1_, ++n2_, ++n3_, ++n4_, ++n5_); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT5 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) { EXPECT_PRED_FORMAT5(PredFormatFunction5, Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_), Bool(++n5_)); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT5 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) { EXPECT_PRED_FORMAT5(PredFormatFunctor5(), ++n1_, ++n2_, ++n3_, ++n4_, ++n5_); finished_ = true; } // Tests a successful EXPECT_PRED_FORMAT5 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) { EXPECT_PRED_FORMAT5(PredFormatFunctor5(), Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_), Bool(++n5_)); finished_ = true; } // Tests a failed EXPECT_PRED_FORMAT5 where the // predicate-formatter is a function on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT5(PredFormatFunction5, n1_++, n2_++, n3_++, n4_++, n5_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT5 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT5(PredFormatFunction5, Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++), Bool(n5_++)); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT5 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT5(PredFormatFunctor5(), n1_++, n2_++, n3_++, n4_++, n5_++); finished_ = true; }, ""); } // Tests a failed EXPECT_PRED_FORMAT5 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT5(PredFormatFunctor5(), Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++), Bool(n5_++)); finished_ = true; }, ""); } // Tests a successful ASSERT_PRED_FORMAT5 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) { ASSERT_PRED_FORMAT5(PredFormatFunction5, ++n1_, ++n2_, ++n3_, ++n4_, ++n5_); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT5 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) { ASSERT_PRED_FORMAT5(PredFormatFunction5, Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_), Bool(++n5_)); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT5 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) { ASSERT_PRED_FORMAT5(PredFormatFunctor5(), ++n1_, ++n2_, ++n3_, ++n4_, ++n5_); finished_ = true; } // Tests a successful ASSERT_PRED_FORMAT5 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) { ASSERT_PRED_FORMAT5(PredFormatFunctor5(), Bool(++n1_), Bool(++n2_), Bool(++n3_), Bool(++n4_), Bool(++n5_)); finished_ = true; } // Tests a failed ASSERT_PRED_FORMAT5 where the // predicate-formatter is a function on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT5(PredFormatFunction5, n1_++, n2_++, n3_++, n4_++, n5_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT5 where the // predicate-formatter is a function on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT5(PredFormatFunction5, Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++), Bool(n5_++)); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT5 where the // predicate-formatter is a functor on a built-in type (int). TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT5(PredFormatFunctor5(), n1_++, n2_++, n3_++, n4_++, n5_++); finished_ = true; }, ""); } // Tests a failed ASSERT_PRED_FORMAT5 where the // predicate-formatter is a functor on a user-defined type (Bool). TEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) { expected_to_finish_ = false; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT5(PredFormatFunctor5(), Bool(n1_++), Bool(n2_++), Bool(n3_++), Bool(n4_++), Bool(n5_++)); finished_ = true; }, ""); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_premature_exit_test.cc000066400000000000000000000112441377520261000242200ustar00rootroot00000000000000// Copyright 2013, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // Tests that Google Test manipulates the premature-exit-detection // file correctly. #include #include "gtest/gtest.h" using ::testing::InitGoogleTest; using ::testing::Test; using ::testing::internal::posix::GetEnv; using ::testing::internal::posix::Stat; using ::testing::internal::posix::StatStruct; namespace { // Is the TEST_PREMATURE_EXIT_FILE environment variable expected to be // set? const bool kTestPrematureExitFileEnvVarShouldBeSet = false; class PrematureExitTest : public Test { public: // Returns true iff the given file exists. static bool FileExists(const char* filepath) { StatStruct stat; return Stat(filepath, &stat) == 0; } protected: PrematureExitTest() { premature_exit_file_path_ = GetEnv("TEST_PREMATURE_EXIT_FILE"); // Normalize NULL to "" for ease of handling. if (premature_exit_file_path_ == NULL) { premature_exit_file_path_ = ""; } } // Returns true iff the premature-exit file exists. bool PrematureExitFileExists() const { return FileExists(premature_exit_file_path_); } const char* premature_exit_file_path_; }; typedef PrematureExitTest PrematureExitDeathTest; // Tests that: // - the premature-exit file exists during the execution of a // death test (EXPECT_DEATH*), and // - a death test doesn't interfere with the main test process's // handling of the premature-exit file. TEST_F(PrematureExitDeathTest, FileExistsDuringExecutionOfDeathTest) { if (*premature_exit_file_path_ == '\0') { return; } EXPECT_DEATH_IF_SUPPORTED({ // If the file exists, crash the process such that the main test // process will catch the (expected) crash and report a success; // otherwise don't crash, which will cause the main test process // to report that the death test has failed. if (PrematureExitFileExists()) { exit(1); } }, ""); } // Tests that TEST_PREMATURE_EXIT_FILE is set where it's expected to // be set. TEST_F(PrematureExitTest, TestPrematureExitFileEnvVarIsSet) { if (kTestPrematureExitFileEnvVarShouldBeSet) { const char* const filepath = GetEnv("TEST_PREMATURE_EXIT_FILE"); ASSERT_TRUE(filepath != NULL); ASSERT_NE(*filepath, '\0'); } } // Tests that the premature-exit file exists during the execution of a // normal (non-death) test. TEST_F(PrematureExitTest, PrematureExitFileExistsDuringTestExecution) { if (*premature_exit_file_path_ == '\0') { return; } EXPECT_TRUE(PrematureExitFileExists()) << " file " << premature_exit_file_path_ << " should exist during test execution, but doesn't."; } } // namespace int main(int argc, char **argv) { InitGoogleTest(&argc, argv); const int exit_code = RUN_ALL_TESTS(); // Test that the premature-exit file is deleted upon return from // RUN_ALL_TESTS(). const char* const filepath = GetEnv("TEST_PREMATURE_EXIT_FILE"); if (filepath != NULL && *filepath != '\0') { if (PrematureExitTest::FileExists(filepath)) { printf( "File %s shouldn't exist after the test program finishes, but does.", filepath); return 1; } } return exit_code; } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_prod_test.cc000066400000000000000000000042411377520261000221260ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // Unit test for include/gtest/gtest_prod.h. #include "gtest/gtest.h" #include "test/production.h" // Tests that private members can be accessed from a TEST declared as // a friend of the class. TEST(PrivateCodeTest, CanAccessPrivateMembers) { PrivateCode a; EXPECT_EQ(0, a.x_); a.set_x(1); EXPECT_EQ(1, a.x_); } typedef testing::Test PrivateCodeFixtureTest; // Tests that private members can be accessed from a TEST_F declared // as a friend of the class. TEST_F(PrivateCodeFixtureTest, CanAccessPrivateMembers) { PrivateCode a; EXPECT_EQ(0, a.x_); a.set_x(2); EXPECT_EQ(2, a.x_); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_repeat_test.cc000066400000000000000000000200011377520261000224320ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Tests the --gtest_repeat=number flag. #include #include #include "gtest/gtest.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ namespace testing { GTEST_DECLARE_string_(death_test_style); GTEST_DECLARE_string_(filter); GTEST_DECLARE_int32_(repeat); } // namespace testing using testing::GTEST_FLAG(death_test_style); using testing::GTEST_FLAG(filter); using testing::GTEST_FLAG(repeat); namespace { // We need this when we are testing Google Test itself and therefore // cannot use Google Test assertions. #define GTEST_CHECK_INT_EQ_(expected, actual) \ do {\ const int expected_val = (expected);\ const int actual_val = (actual);\ if (::testing::internal::IsTrue(expected_val != actual_val)) {\ ::std::cout << "Value of: " #actual "\n"\ << " Actual: " << actual_val << "\n"\ << "Expected: " #expected "\n"\ << "Which is: " << expected_val << "\n";\ ::testing::internal::posix::Abort();\ }\ } while (::testing::internal::AlwaysFalse()) // Used for verifying that global environment set-up and tear-down are // inside the gtest_repeat loop. int g_environment_set_up_count = 0; int g_environment_tear_down_count = 0; class MyEnvironment : public testing::Environment { public: MyEnvironment() {} virtual void SetUp() { g_environment_set_up_count++; } virtual void TearDown() { g_environment_tear_down_count++; } }; // A test that should fail. int g_should_fail_count = 0; TEST(FooTest, ShouldFail) { g_should_fail_count++; EXPECT_EQ(0, 1) << "Expected failure."; } // A test that should pass. int g_should_pass_count = 0; TEST(FooTest, ShouldPass) { g_should_pass_count++; } // A test that contains a thread-safe death test and a fast death // test. It should pass. int g_death_test_count = 0; TEST(BarDeathTest, ThreadSafeAndFast) { g_death_test_count++; GTEST_FLAG(death_test_style) = "threadsafe"; EXPECT_DEATH_IF_SUPPORTED(::testing::internal::posix::Abort(), ""); GTEST_FLAG(death_test_style) = "fast"; EXPECT_DEATH_IF_SUPPORTED(::testing::internal::posix::Abort(), ""); } #if GTEST_HAS_PARAM_TEST int g_param_test_count = 0; const int kNumberOfParamTests = 10; class MyParamTest : public testing::TestWithParam {}; TEST_P(MyParamTest, ShouldPass) { // TODO(vladl@google.com): Make parameter value checking robust // WRT order of tests. GTEST_CHECK_INT_EQ_(g_param_test_count % kNumberOfParamTests, GetParam()); g_param_test_count++; } INSTANTIATE_TEST_CASE_P(MyParamSequence, MyParamTest, testing::Range(0, kNumberOfParamTests)); #endif // GTEST_HAS_PARAM_TEST // Resets the count for each test. void ResetCounts() { g_environment_set_up_count = 0; g_environment_tear_down_count = 0; g_should_fail_count = 0; g_should_pass_count = 0; g_death_test_count = 0; #if GTEST_HAS_PARAM_TEST g_param_test_count = 0; #endif // GTEST_HAS_PARAM_TEST } // Checks that the count for each test is expected. void CheckCounts(int expected) { GTEST_CHECK_INT_EQ_(expected, g_environment_set_up_count); GTEST_CHECK_INT_EQ_(expected, g_environment_tear_down_count); GTEST_CHECK_INT_EQ_(expected, g_should_fail_count); GTEST_CHECK_INT_EQ_(expected, g_should_pass_count); GTEST_CHECK_INT_EQ_(expected, g_death_test_count); #if GTEST_HAS_PARAM_TEST GTEST_CHECK_INT_EQ_(expected * kNumberOfParamTests, g_param_test_count); #endif // GTEST_HAS_PARAM_TEST } // Tests the behavior of Google Test when --gtest_repeat is not specified. void TestRepeatUnspecified() { ResetCounts(); GTEST_CHECK_INT_EQ_(1, RUN_ALL_TESTS()); CheckCounts(1); } // Tests the behavior of Google Test when --gtest_repeat has the given value. void TestRepeat(int repeat) { GTEST_FLAG(repeat) = repeat; ResetCounts(); GTEST_CHECK_INT_EQ_(repeat > 0 ? 1 : 0, RUN_ALL_TESTS()); CheckCounts(repeat); } // Tests using --gtest_repeat when --gtest_filter specifies an empty // set of tests. void TestRepeatWithEmptyFilter(int repeat) { GTEST_FLAG(repeat) = repeat; GTEST_FLAG(filter) = "None"; ResetCounts(); GTEST_CHECK_INT_EQ_(0, RUN_ALL_TESTS()); CheckCounts(0); } // Tests using --gtest_repeat when --gtest_filter specifies a set of // successful tests. void TestRepeatWithFilterForSuccessfulTests(int repeat) { GTEST_FLAG(repeat) = repeat; GTEST_FLAG(filter) = "*-*ShouldFail"; ResetCounts(); GTEST_CHECK_INT_EQ_(0, RUN_ALL_TESTS()); GTEST_CHECK_INT_EQ_(repeat, g_environment_set_up_count); GTEST_CHECK_INT_EQ_(repeat, g_environment_tear_down_count); GTEST_CHECK_INT_EQ_(0, g_should_fail_count); GTEST_CHECK_INT_EQ_(repeat, g_should_pass_count); GTEST_CHECK_INT_EQ_(repeat, g_death_test_count); #if GTEST_HAS_PARAM_TEST GTEST_CHECK_INT_EQ_(repeat * kNumberOfParamTests, g_param_test_count); #endif // GTEST_HAS_PARAM_TEST } // Tests using --gtest_repeat when --gtest_filter specifies a set of // failed tests. void TestRepeatWithFilterForFailedTests(int repeat) { GTEST_FLAG(repeat) = repeat; GTEST_FLAG(filter) = "*ShouldFail"; ResetCounts(); GTEST_CHECK_INT_EQ_(1, RUN_ALL_TESTS()); GTEST_CHECK_INT_EQ_(repeat, g_environment_set_up_count); GTEST_CHECK_INT_EQ_(repeat, g_environment_tear_down_count); GTEST_CHECK_INT_EQ_(repeat, g_should_fail_count); GTEST_CHECK_INT_EQ_(0, g_should_pass_count); GTEST_CHECK_INT_EQ_(0, g_death_test_count); #if GTEST_HAS_PARAM_TEST GTEST_CHECK_INT_EQ_(0, g_param_test_count); #endif // GTEST_HAS_PARAM_TEST } } // namespace int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); testing::AddGlobalTestEnvironment(new MyEnvironment); TestRepeatUnspecified(); TestRepeat(0); TestRepeat(1); TestRepeat(5); TestRepeatWithEmptyFilter(2); TestRepeatWithEmptyFilter(3); TestRepeatWithFilterForSuccessfulTests(3); TestRepeatWithFilterForFailedTests(4); // It would be nice to verify that the tests indeed loop forever // when GTEST_FLAG(repeat) is negative, but this test will be quite // complicated to write. Since this flag is for interactive // debugging only and doesn't affect the normal test result, such a // test would be an overkill. printf("PASS\n"); return 0; } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_shuffle_test.py000077500000000000000000000304051377520261000226650ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2009 Google Inc. All Rights Reserved. # # 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 Google Inc. 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. """Verifies that test shuffling works.""" __author__ = 'wan@google.com (Zhanyong Wan)' import os import gtest_test_utils # Command to run the gtest_shuffle_test_ program. COMMAND = gtest_test_utils.GetTestExecutablePath('gtest_shuffle_test_') # The environment variables for test sharding. TOTAL_SHARDS_ENV_VAR = 'GTEST_TOTAL_SHARDS' SHARD_INDEX_ENV_VAR = 'GTEST_SHARD_INDEX' TEST_FILTER = 'A*.A:A*.B:C*' ALL_TESTS = [] ACTIVE_TESTS = [] FILTERED_TESTS = [] SHARDED_TESTS = [] SHUFFLED_ALL_TESTS = [] SHUFFLED_ACTIVE_TESTS = [] SHUFFLED_FILTERED_TESTS = [] SHUFFLED_SHARDED_TESTS = [] def AlsoRunDisabledTestsFlag(): return '--gtest_also_run_disabled_tests' def FilterFlag(test_filter): return '--gtest_filter=%s' % (test_filter,) def RepeatFlag(n): return '--gtest_repeat=%s' % (n,) def ShuffleFlag(): return '--gtest_shuffle' def RandomSeedFlag(n): return '--gtest_random_seed=%s' % (n,) def RunAndReturnOutput(extra_env, args): """Runs the test program and returns its output.""" environ_copy = os.environ.copy() environ_copy.update(extra_env) return gtest_test_utils.Subprocess([COMMAND] + args, env=environ_copy).output def GetTestsForAllIterations(extra_env, args): """Runs the test program and returns a list of test lists. Args: extra_env: a map from environment variables to their values args: command line flags to pass to gtest_shuffle_test_ Returns: A list where the i-th element is the list of tests run in the i-th test iteration. """ test_iterations = [] for line in RunAndReturnOutput(extra_env, args).split('\n'): if line.startswith('----'): tests = [] test_iterations.append(tests) elif line.strip(): tests.append(line.strip()) # 'TestCaseName.TestName' return test_iterations def GetTestCases(tests): """Returns a list of test cases in the given full test names. Args: tests: a list of full test names Returns: A list of test cases from 'tests', in their original order. Consecutive duplicates are removed. """ test_cases = [] for test in tests: test_case = test.split('.')[0] if not test_case in test_cases: test_cases.append(test_case) return test_cases def CalculateTestLists(): """Calculates the list of tests run under different flags.""" if not ALL_TESTS: ALL_TESTS.extend( GetTestsForAllIterations({}, [AlsoRunDisabledTestsFlag()])[0]) if not ACTIVE_TESTS: ACTIVE_TESTS.extend(GetTestsForAllIterations({}, [])[0]) if not FILTERED_TESTS: FILTERED_TESTS.extend( GetTestsForAllIterations({}, [FilterFlag(TEST_FILTER)])[0]) if not SHARDED_TESTS: SHARDED_TESTS.extend( GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3', SHARD_INDEX_ENV_VAR: '1'}, [])[0]) if not SHUFFLED_ALL_TESTS: SHUFFLED_ALL_TESTS.extend(GetTestsForAllIterations( {}, [AlsoRunDisabledTestsFlag(), ShuffleFlag(), RandomSeedFlag(1)])[0]) if not SHUFFLED_ACTIVE_TESTS: SHUFFLED_ACTIVE_TESTS.extend(GetTestsForAllIterations( {}, [ShuffleFlag(), RandomSeedFlag(1)])[0]) if not SHUFFLED_FILTERED_TESTS: SHUFFLED_FILTERED_TESTS.extend(GetTestsForAllIterations( {}, [ShuffleFlag(), RandomSeedFlag(1), FilterFlag(TEST_FILTER)])[0]) if not SHUFFLED_SHARDED_TESTS: SHUFFLED_SHARDED_TESTS.extend( GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3', SHARD_INDEX_ENV_VAR: '1'}, [ShuffleFlag(), RandomSeedFlag(1)])[0]) class GTestShuffleUnitTest(gtest_test_utils.TestCase): """Tests test shuffling.""" def setUp(self): CalculateTestLists() def testShufflePreservesNumberOfTests(self): self.assertEqual(len(ALL_TESTS), len(SHUFFLED_ALL_TESTS)) self.assertEqual(len(ACTIVE_TESTS), len(SHUFFLED_ACTIVE_TESTS)) self.assertEqual(len(FILTERED_TESTS), len(SHUFFLED_FILTERED_TESTS)) self.assertEqual(len(SHARDED_TESTS), len(SHUFFLED_SHARDED_TESTS)) def testShuffleChangesTestOrder(self): self.assert_(SHUFFLED_ALL_TESTS != ALL_TESTS, SHUFFLED_ALL_TESTS) self.assert_(SHUFFLED_ACTIVE_TESTS != ACTIVE_TESTS, SHUFFLED_ACTIVE_TESTS) self.assert_(SHUFFLED_FILTERED_TESTS != FILTERED_TESTS, SHUFFLED_FILTERED_TESTS) self.assert_(SHUFFLED_SHARDED_TESTS != SHARDED_TESTS, SHUFFLED_SHARDED_TESTS) def testShuffleChangesTestCaseOrder(self): self.assert_(GetTestCases(SHUFFLED_ALL_TESTS) != GetTestCases(ALL_TESTS), GetTestCases(SHUFFLED_ALL_TESTS)) self.assert_( GetTestCases(SHUFFLED_ACTIVE_TESTS) != GetTestCases(ACTIVE_TESTS), GetTestCases(SHUFFLED_ACTIVE_TESTS)) self.assert_( GetTestCases(SHUFFLED_FILTERED_TESTS) != GetTestCases(FILTERED_TESTS), GetTestCases(SHUFFLED_FILTERED_TESTS)) self.assert_( GetTestCases(SHUFFLED_SHARDED_TESTS) != GetTestCases(SHARDED_TESTS), GetTestCases(SHUFFLED_SHARDED_TESTS)) def testShuffleDoesNotRepeatTest(self): for test in SHUFFLED_ALL_TESTS: self.assertEqual(1, SHUFFLED_ALL_TESTS.count(test), '%s appears more than once' % (test,)) for test in SHUFFLED_ACTIVE_TESTS: self.assertEqual(1, SHUFFLED_ACTIVE_TESTS.count(test), '%s appears more than once' % (test,)) for test in SHUFFLED_FILTERED_TESTS: self.assertEqual(1, SHUFFLED_FILTERED_TESTS.count(test), '%s appears more than once' % (test,)) for test in SHUFFLED_SHARDED_TESTS: self.assertEqual(1, SHUFFLED_SHARDED_TESTS.count(test), '%s appears more than once' % (test,)) def testShuffleDoesNotCreateNewTest(self): for test in SHUFFLED_ALL_TESTS: self.assert_(test in ALL_TESTS, '%s is an invalid test' % (test,)) for test in SHUFFLED_ACTIVE_TESTS: self.assert_(test in ACTIVE_TESTS, '%s is an invalid test' % (test,)) for test in SHUFFLED_FILTERED_TESTS: self.assert_(test in FILTERED_TESTS, '%s is an invalid test' % (test,)) for test in SHUFFLED_SHARDED_TESTS: self.assert_(test in SHARDED_TESTS, '%s is an invalid test' % (test,)) def testShuffleIncludesAllTests(self): for test in ALL_TESTS: self.assert_(test in SHUFFLED_ALL_TESTS, '%s is missing' % (test,)) for test in ACTIVE_TESTS: self.assert_(test in SHUFFLED_ACTIVE_TESTS, '%s is missing' % (test,)) for test in FILTERED_TESTS: self.assert_(test in SHUFFLED_FILTERED_TESTS, '%s is missing' % (test,)) for test in SHARDED_TESTS: self.assert_(test in SHUFFLED_SHARDED_TESTS, '%s is missing' % (test,)) def testShuffleLeavesDeathTestsAtFront(self): non_death_test_found = False for test in SHUFFLED_ACTIVE_TESTS: if 'DeathTest.' in test: self.assert_(not non_death_test_found, '%s appears after a non-death test' % (test,)) else: non_death_test_found = True def _VerifyTestCasesDoNotInterleave(self, tests): test_cases = [] for test in tests: [test_case, _] = test.split('.') if test_cases and test_cases[-1] != test_case: test_cases.append(test_case) self.assertEqual(1, test_cases.count(test_case), 'Test case %s is not grouped together in %s' % (test_case, tests)) def testShuffleDoesNotInterleaveTestCases(self): self._VerifyTestCasesDoNotInterleave(SHUFFLED_ALL_TESTS) self._VerifyTestCasesDoNotInterleave(SHUFFLED_ACTIVE_TESTS) self._VerifyTestCasesDoNotInterleave(SHUFFLED_FILTERED_TESTS) self._VerifyTestCasesDoNotInterleave(SHUFFLED_SHARDED_TESTS) def testShuffleRestoresOrderAfterEachIteration(self): # Get the test lists in all 3 iterations, using random seed 1, 2, # and 3 respectively. Google Test picks a different seed in each # iteration, and this test depends on the current implementation # picking successive numbers. This dependency is not ideal, but # makes the test much easier to write. [tests_in_iteration1, tests_in_iteration2, tests_in_iteration3] = ( GetTestsForAllIterations( {}, [ShuffleFlag(), RandomSeedFlag(1), RepeatFlag(3)])) # Make sure running the tests with random seed 1 gets the same # order as in iteration 1 above. [tests_with_seed1] = GetTestsForAllIterations( {}, [ShuffleFlag(), RandomSeedFlag(1)]) self.assertEqual(tests_in_iteration1, tests_with_seed1) # Make sure running the tests with random seed 2 gets the same # order as in iteration 2 above. Success means that Google Test # correctly restores the test order before re-shuffling at the # beginning of iteration 2. [tests_with_seed2] = GetTestsForAllIterations( {}, [ShuffleFlag(), RandomSeedFlag(2)]) self.assertEqual(tests_in_iteration2, tests_with_seed2) # Make sure running the tests with random seed 3 gets the same # order as in iteration 3 above. Success means that Google Test # correctly restores the test order before re-shuffling at the # beginning of iteration 3. [tests_with_seed3] = GetTestsForAllIterations( {}, [ShuffleFlag(), RandomSeedFlag(3)]) self.assertEqual(tests_in_iteration3, tests_with_seed3) def testShuffleGeneratesNewOrderInEachIteration(self): [tests_in_iteration1, tests_in_iteration2, tests_in_iteration3] = ( GetTestsForAllIterations( {}, [ShuffleFlag(), RandomSeedFlag(1), RepeatFlag(3)])) self.assert_(tests_in_iteration1 != tests_in_iteration2, tests_in_iteration1) self.assert_(tests_in_iteration1 != tests_in_iteration3, tests_in_iteration1) self.assert_(tests_in_iteration2 != tests_in_iteration3, tests_in_iteration2) def testShuffleShardedTestsPreservesPartition(self): # If we run M tests on N shards, the same M tests should be run in # total, regardless of the random seeds used by the shards. [tests1] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3', SHARD_INDEX_ENV_VAR: '0'}, [ShuffleFlag(), RandomSeedFlag(1)]) [tests2] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3', SHARD_INDEX_ENV_VAR: '1'}, [ShuffleFlag(), RandomSeedFlag(20)]) [tests3] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3', SHARD_INDEX_ENV_VAR: '2'}, [ShuffleFlag(), RandomSeedFlag(25)]) sorted_sharded_tests = tests1 + tests2 + tests3 sorted_sharded_tests.sort() sorted_active_tests = [] sorted_active_tests.extend(ACTIVE_TESTS) sorted_active_tests.sort() self.assertEqual(sorted_active_tests, sorted_sharded_tests) if __name__ == '__main__': gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_shuffle_test_.cc000066400000000000000000000063521377520261000227620ustar00rootroot00000000000000// Copyright 2009, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Verifies that test shuffling works. #include "gtest/gtest.h" namespace { using ::testing::EmptyTestEventListener; using ::testing::InitGoogleTest; using ::testing::Message; using ::testing::Test; using ::testing::TestEventListeners; using ::testing::TestInfo; using ::testing::UnitTest; using ::testing::internal::scoped_ptr; // The test methods are empty, as the sole purpose of this program is // to print the test names before/after shuffling. class A : public Test {}; TEST_F(A, A) {} TEST_F(A, B) {} TEST(ADeathTest, A) {} TEST(ADeathTest, B) {} TEST(ADeathTest, C) {} TEST(B, A) {} TEST(B, B) {} TEST(B, C) {} TEST(B, DISABLED_D) {} TEST(B, DISABLED_E) {} TEST(BDeathTest, A) {} TEST(BDeathTest, B) {} TEST(C, A) {} TEST(C, B) {} TEST(C, C) {} TEST(C, DISABLED_D) {} TEST(CDeathTest, A) {} TEST(DISABLED_D, A) {} TEST(DISABLED_D, DISABLED_B) {} // This printer prints the full test names only, starting each test // iteration with a "----" marker. class TestNamePrinter : public EmptyTestEventListener { public: virtual void OnTestIterationStart(const UnitTest& /* unit_test */, int /* iteration */) { printf("----\n"); } virtual void OnTestStart(const TestInfo& test_info) { printf("%s.%s\n", test_info.test_case_name(), test_info.name()); } }; } // namespace int main(int argc, char **argv) { InitGoogleTest(&argc, argv); // Replaces the default printer with TestNamePrinter, which prints // the test name only. TestEventListeners& listeners = UnitTest::GetInstance()->listeners(); delete listeners.Release(listeners.default_result_printer()); listeners.Append(new TestNamePrinter); return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_sole_header_test.cc000066400000000000000000000042551377520261000234410ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: mheule@google.com (Markus Heule) // // This test verifies that it's possible to use Google Test by including // the gtest.h header file alone. #include "gtest/gtest.h" namespace { void Subroutine() { EXPECT_EQ(42, 42); } TEST(NoFatalFailureTest, ExpectNoFatalFailure) { EXPECT_NO_FATAL_FAILURE(;); EXPECT_NO_FATAL_FAILURE(SUCCEED()); EXPECT_NO_FATAL_FAILURE(Subroutine()); EXPECT_NO_FATAL_FAILURE({ SUCCEED(); }); } TEST(NoFatalFailureTest, AssertNoFatalFailure) { ASSERT_NO_FATAL_FAILURE(;); ASSERT_NO_FATAL_FAILURE(SUCCEED()); ASSERT_NO_FATAL_FAILURE(Subroutine()); ASSERT_NO_FATAL_FAILURE({ SUCCEED(); }); } } // namespace dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_stress_test.cc000066400000000000000000000226511377520261000225120ustar00rootroot00000000000000// Copyright 2007, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Tests that SCOPED_TRACE() and various Google Test assertions can be // used in a large number of threads concurrently. #include "gtest/gtest.h" #include #include // We must define this macro in order to #include // gtest-internal-inl.h. This is how Google Test prevents a user from // accidentally depending on its internal implementation. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ #if GTEST_IS_THREADSAFE namespace testing { namespace { using internal::Notification; using internal::TestPropertyKeyIs; using internal::ThreadWithParam; using internal::scoped_ptr; // In order to run tests in this file, for platforms where Google Test is // thread safe, implement ThreadWithParam. See the description of its API // in gtest-port.h, where it is defined for already supported platforms. // How many threads to create? const int kThreadCount = 50; std::string IdToKey(int id, const char* suffix) { Message key; key << "key_" << id << "_" << suffix; return key.GetString(); } std::string IdToString(int id) { Message id_message; id_message << id; return id_message.GetString(); } void ExpectKeyAndValueWereRecordedForId( const std::vector& properties, int id, const char* suffix) { TestPropertyKeyIs matches_key(IdToKey(id, suffix).c_str()); const std::vector::const_iterator property = std::find_if(properties.begin(), properties.end(), matches_key); ASSERT_TRUE(property != properties.end()) << "expecting " << suffix << " value for id " << id; EXPECT_STREQ(IdToString(id).c_str(), property->value()); } // Calls a large number of Google Test assertions, where exactly one of them // will fail. void ManyAsserts(int id) { GTEST_LOG_(INFO) << "Thread #" << id << " running..."; SCOPED_TRACE(Message() << "Thread #" << id); for (int i = 0; i < kThreadCount; i++) { SCOPED_TRACE(Message() << "Iteration #" << i); // A bunch of assertions that should succeed. EXPECT_TRUE(true); ASSERT_FALSE(false) << "This shouldn't fail."; EXPECT_STREQ("a", "a"); ASSERT_LE(5, 6); EXPECT_EQ(i, i) << "This shouldn't fail."; // RecordProperty() should interact safely with other threads as well. // The shared_key forces property updates. Test::RecordProperty(IdToKey(id, "string").c_str(), IdToString(id).c_str()); Test::RecordProperty(IdToKey(id, "int").c_str(), id); Test::RecordProperty("shared_key", IdToString(id).c_str()); // This assertion should fail kThreadCount times per thread. It // is for testing whether Google Test can handle failed assertions in a // multi-threaded context. EXPECT_LT(i, 0) << "This should always fail."; } } void CheckTestFailureCount(int expected_failures) { const TestInfo* const info = UnitTest::GetInstance()->current_test_info(); const TestResult* const result = info->result(); GTEST_CHECK_(expected_failures == result->total_part_count()) << "Logged " << result->total_part_count() << " failures " << " vs. " << expected_failures << " expected"; } // Tests using SCOPED_TRACE() and Google Test assertions in many threads // concurrently. TEST(StressTest, CanUseScopedTraceAndAssertionsInManyThreads) { { scoped_ptr > threads[kThreadCount]; Notification threads_can_start; for (int i = 0; i != kThreadCount; i++) threads[i].reset(new ThreadWithParam(&ManyAsserts, i, &threads_can_start)); threads_can_start.Notify(); // Blocks until all the threads are done. for (int i = 0; i != kThreadCount; i++) threads[i]->Join(); } // Ensures that kThreadCount*kThreadCount failures have been reported. const TestInfo* const info = UnitTest::GetInstance()->current_test_info(); const TestResult* const result = info->result(); std::vector properties; // We have no access to the TestResult's list of properties but we can // copy them one by one. for (int i = 0; i < result->test_property_count(); ++i) properties.push_back(result->GetTestProperty(i)); EXPECT_EQ(kThreadCount * 2 + 1, result->test_property_count()) << "String and int values recorded on each thread, " << "as well as one shared_key"; for (int i = 0; i < kThreadCount; ++i) { ExpectKeyAndValueWereRecordedForId(properties, i, "string"); ExpectKeyAndValueWereRecordedForId(properties, i, "int"); } CheckTestFailureCount(kThreadCount*kThreadCount); } void FailingThread(bool is_fatal) { if (is_fatal) FAIL() << "Fatal failure in some other thread. " << "(This failure is expected.)"; else ADD_FAILURE() << "Non-fatal failure in some other thread. " << "(This failure is expected.)"; } void GenerateFatalFailureInAnotherThread(bool is_fatal) { ThreadWithParam thread(&FailingThread, is_fatal, NULL); thread.Join(); } TEST(NoFatalFailureTest, ExpectNoFatalFailureIgnoresFailuresInOtherThreads) { EXPECT_NO_FATAL_FAILURE(GenerateFatalFailureInAnotherThread(true)); // We should only have one failure (the one from // GenerateFatalFailureInAnotherThread()), since the EXPECT_NO_FATAL_FAILURE // should succeed. CheckTestFailureCount(1); } void AssertNoFatalFailureIgnoresFailuresInOtherThreads() { ASSERT_NO_FATAL_FAILURE(GenerateFatalFailureInAnotherThread(true)); } TEST(NoFatalFailureTest, AssertNoFatalFailureIgnoresFailuresInOtherThreads) { // Using a subroutine, to make sure, that the test continues. AssertNoFatalFailureIgnoresFailuresInOtherThreads(); // We should only have one failure (the one from // GenerateFatalFailureInAnotherThread()), since the EXPECT_NO_FATAL_FAILURE // should succeed. CheckTestFailureCount(1); } TEST(FatalFailureTest, ExpectFatalFailureIgnoresFailuresInOtherThreads) { // This statement should fail, since the current thread doesn't generate a // fatal failure, only another one does. EXPECT_FATAL_FAILURE(GenerateFatalFailureInAnotherThread(true), "expected"); CheckTestFailureCount(2); } TEST(FatalFailureOnAllThreadsTest, ExpectFatalFailureOnAllThreads) { // This statement should succeed, because failures in all threads are // considered. EXPECT_FATAL_FAILURE_ON_ALL_THREADS( GenerateFatalFailureInAnotherThread(true), "expected"); CheckTestFailureCount(0); // We need to add a failure, because main() checks that there are failures. // But when only this test is run, we shouldn't have any failures. ADD_FAILURE() << "This is an expected non-fatal failure."; } TEST(NonFatalFailureTest, ExpectNonFatalFailureIgnoresFailuresInOtherThreads) { // This statement should fail, since the current thread doesn't generate a // fatal failure, only another one does. EXPECT_NONFATAL_FAILURE(GenerateFatalFailureInAnotherThread(false), "expected"); CheckTestFailureCount(2); } TEST(NonFatalFailureOnAllThreadsTest, ExpectNonFatalFailureOnAllThreads) { // This statement should succeed, because failures in all threads are // considered. EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS( GenerateFatalFailureInAnotherThread(false), "expected"); CheckTestFailureCount(0); // We need to add a failure, because main() checks that there are failures, // But when only this test is run, we shouldn't have any failures. ADD_FAILURE() << "This is an expected non-fatal failure."; } } // namespace } // namespace testing int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); const int result = RUN_ALL_TESTS(); // Expected to fail. GTEST_CHECK_(result == 1) << "RUN_ALL_TESTS() did not fail as expected"; printf("\nPASS\n"); return 0; } #else TEST(StressTest, DISABLED_ThreadSafetyTestsAreSkippedWhenGoogleTestIsNotThreadSafe) { } int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } #endif // GTEST_IS_THREADSAFE dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_test_utils.py000077500000000000000000000250741377520261000223770ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2006, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Unit test utilities for Google C++ Testing Framework.""" __author__ = 'wan@google.com (Zhanyong Wan)' import atexit import os import shutil import sys import tempfile import unittest _test_module = unittest # Suppresses the 'Import not at the top of the file' lint complaint. # pylint: disable-msg=C6204 try: import subprocess _SUBPROCESS_MODULE_AVAILABLE = True except: import popen2 _SUBPROCESS_MODULE_AVAILABLE = False # pylint: enable-msg=C6204 GTEST_OUTPUT_VAR_NAME = 'GTEST_OUTPUT' IS_WINDOWS = os.name == 'nt' IS_CYGWIN = os.name == 'posix' and 'CYGWIN' in os.uname()[0] # The environment variable for specifying the path to the premature-exit file. PREMATURE_EXIT_FILE_ENV_VAR = 'TEST_PREMATURE_EXIT_FILE' environ = os.environ.copy() def SetEnvVar(env_var, value): """Sets/unsets an environment variable to a given value.""" if value is not None: environ[env_var] = value elif env_var in environ: del environ[env_var] # Here we expose a class from a particular module, depending on the # environment. The comment suppresses the 'Invalid variable name' lint # complaint. TestCase = _test_module.TestCase # pylint: disable-msg=C6409 # Initially maps a flag to its default value. After # _ParseAndStripGTestFlags() is called, maps a flag to its actual value. _flag_map = {'source_dir': os.path.dirname(sys.argv[0]), 'build_dir': os.path.dirname(sys.argv[0])} _gtest_flags_are_parsed = False def _ParseAndStripGTestFlags(argv): """Parses and strips Google Test flags from argv. This is idempotent.""" # Suppresses the lint complaint about a global variable since we need it # here to maintain module-wide state. global _gtest_flags_are_parsed # pylint: disable-msg=W0603 if _gtest_flags_are_parsed: return _gtest_flags_are_parsed = True for flag in _flag_map: # The environment variable overrides the default value. if flag.upper() in os.environ: _flag_map[flag] = os.environ[flag.upper()] # The command line flag overrides the environment variable. i = 1 # Skips the program name. while i < len(argv): prefix = '--' + flag + '=' if argv[i].startswith(prefix): _flag_map[flag] = argv[i][len(prefix):] del argv[i] break else: # We don't increment i in case we just found a --gtest_* flag # and removed it from argv. i += 1 def GetFlag(flag): """Returns the value of the given flag.""" # In case GetFlag() is called before Main(), we always call # _ParseAndStripGTestFlags() here to make sure the --gtest_* flags # are parsed. _ParseAndStripGTestFlags(sys.argv) return _flag_map[flag] def GetSourceDir(): """Returns the absolute path of the directory where the .py files are.""" return os.path.abspath(GetFlag('source_dir')) def GetBuildDir(): """Returns the absolute path of the directory where the test binaries are.""" return os.path.abspath(GetFlag('build_dir')) _temp_dir = None def _RemoveTempDir(): if _temp_dir: shutil.rmtree(_temp_dir, ignore_errors=True) atexit.register(_RemoveTempDir) def GetTempDir(): """Returns a directory for temporary files.""" global _temp_dir if not _temp_dir: _temp_dir = tempfile.mkdtemp() return _temp_dir def GetTestExecutablePath(executable_name, build_dir=None): """Returns the absolute path of the test binary given its name. The function will print a message and abort the program if the resulting file doesn't exist. Args: executable_name: name of the test binary that the test script runs. build_dir: directory where to look for executables, by default the result of GetBuildDir(). Returns: The absolute path of the test binary. """ path = os.path.abspath(os.path.join(build_dir or GetBuildDir(), executable_name)) if (IS_WINDOWS or IS_CYGWIN) and not path.endswith('.exe'): path += '.exe' if not os.path.exists(path): message = ( 'Unable to find the test binary. Please make sure to provide path\n' 'to the binary via the --build_dir flag or the BUILD_DIR\n' 'environment variable.') print >> sys.stderr, message sys.exit(1) return path def GetExitStatus(exit_code): """Returns the argument to exit(), or -1 if exit() wasn't called. Args: exit_code: the result value of os.system(command). """ if os.name == 'nt': # On Windows, os.WEXITSTATUS() doesn't work and os.system() returns # the argument to exit() directly. return exit_code else: # On Unix, os.WEXITSTATUS() must be used to extract the exit status # from the result of os.system(). if os.WIFEXITED(exit_code): return os.WEXITSTATUS(exit_code) else: return -1 class Subprocess: def __init__(self, command, working_dir=None, capture_stderr=True, env=None): """Changes into a specified directory, if provided, and executes a command. Restores the old directory afterwards. Args: command: The command to run, in the form of sys.argv. working_dir: The directory to change into. capture_stderr: Determines whether to capture stderr in the output member or to discard it. env: Dictionary with environment to pass to the subprocess. Returns: An object that represents outcome of the executed process. It has the following attributes: terminated_by_signal True iff the child process has been terminated by a signal. signal Sygnal that terminated the child process. exited True iff the child process exited normally. exit_code The code with which the child process exited. output Child process's stdout and stderr output combined in a string. """ # The subprocess module is the preferrable way of running programs # since it is available and behaves consistently on all platforms, # including Windows. But it is only available starting in python 2.4. # In earlier python versions, we revert to the popen2 module, which is # available in python 2.0 and later but doesn't provide required # functionality (Popen4) under Windows. This allows us to support Mac # OS X 10.4 Tiger, which has python 2.3 installed. if _SUBPROCESS_MODULE_AVAILABLE: if capture_stderr: stderr = subprocess.STDOUT else: stderr = subprocess.PIPE p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=stderr, cwd=working_dir, universal_newlines=True, env=env) # communicate returns a tuple with the file obect for the child's # output. self.output = p.communicate()[0] self._return_code = p.returncode else: old_dir = os.getcwd() def _ReplaceEnvDict(dest, src): # Changes made by os.environ.clear are not inheritable by child # processes until Python 2.6. To produce inheritable changes we have # to delete environment items with the del statement. for key in dest.keys(): del dest[key] dest.update(src) # When 'env' is not None, backup the environment variables and replace # them with the passed 'env'. When 'env' is None, we simply use the # current 'os.environ' for compatibility with the subprocess.Popen # semantics used above. if env is not None: old_environ = os.environ.copy() _ReplaceEnvDict(os.environ, env) try: if working_dir is not None: os.chdir(working_dir) if capture_stderr: p = popen2.Popen4(command) else: p = popen2.Popen3(command) p.tochild.close() self.output = p.fromchild.read() ret_code = p.wait() finally: os.chdir(old_dir) # Restore the old environment variables # if they were replaced. if env is not None: _ReplaceEnvDict(os.environ, old_environ) # Converts ret_code to match the semantics of # subprocess.Popen.returncode. if os.WIFSIGNALED(ret_code): self._return_code = -os.WTERMSIG(ret_code) else: # os.WIFEXITED(ret_code) should return True here. self._return_code = os.WEXITSTATUS(ret_code) if self._return_code < 0: self.terminated_by_signal = True self.exited = False self.signal = -self._return_code else: self.terminated_by_signal = False self.exited = True self.exit_code = self._return_code def Main(): """Runs the unit test.""" # We must call _ParseAndStripGTestFlags() before calling # unittest.main(). Otherwise the latter will be confused by the # --gtest_* flags. _ParseAndStripGTestFlags(sys.argv) # The tested binaries should not be writing XML output files unless the # script explicitly instructs them to. # TODO(vladl@google.com): Move this into Subprocess when we implement # passing environment into it as a parameter. if GTEST_OUTPUT_VAR_NAME in os.environ: del os.environ[GTEST_OUTPUT_VAR_NAME] _test_module.main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_throw_on_failure_ex_test.cc000066400000000000000000000065641377520261000252360ustar00rootroot00000000000000// Copyright 2009, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Tests Google Test's throw-on-failure mode with exceptions enabled. #include "gtest/gtest.h" #include #include #include #include // Prints the given failure message and exits the program with // non-zero. We use this instead of a Google Test assertion to // indicate a failure, as the latter is been tested and cannot be // relied on. void Fail(const char* msg) { printf("FAILURE: %s\n", msg); fflush(stdout); exit(1); } // Tests that an assertion failure throws a subclass of // std::runtime_error. void TestFailureThrowsRuntimeError() { testing::GTEST_FLAG(throw_on_failure) = true; // A successful assertion shouldn't throw. try { EXPECT_EQ(3, 3); } catch(...) { Fail("A successful assertion wrongfully threw."); } // A failed assertion should throw a subclass of std::runtime_error. try { EXPECT_EQ(2, 3) << "Expected failure"; } catch(const std::runtime_error& e) { if (strstr(e.what(), "Expected failure") != NULL) return; printf("%s", "A failed assertion did throw an exception of the right type, " "but the message is incorrect. Instead of containing \"Expected " "failure\", it is:\n"); Fail(e.what()); } catch(...) { Fail("A failed assertion threw the wrong type of exception."); } Fail("A failed assertion should've thrown but didn't."); } int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); // We want to ensure that people can use Google Test assertions in // other testing frameworks, as long as they initialize Google Test // properly and set the thrown-on-failure mode. Therefore, we don't // use Google Test's constructs for defining and running tests // (e.g. TEST and RUN_ALL_TESTS) here. TestFailureThrowsRuntimeError(); return 0; } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_throw_on_failure_test.py000077500000000000000000000132061377520261000245770ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2009, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Tests Google Test's throw-on-failure mode with exceptions disabled. This script invokes gtest_throw_on_failure_test_ (a program written with Google Test) with different environments and command line flags. """ __author__ = 'wan@google.com (Zhanyong Wan)' import os import gtest_test_utils # Constants. # The command line flag for enabling/disabling the throw-on-failure mode. THROW_ON_FAILURE = 'gtest_throw_on_failure' # Path to the gtest_throw_on_failure_test_ program, compiled with # exceptions disabled. EXE_PATH = gtest_test_utils.GetTestExecutablePath( 'gtest_throw_on_failure_test_') # Utilities. def SetEnvVar(env_var, value): """Sets an environment variable to a given value; unsets it when the given value is None. """ env_var = env_var.upper() if value is not None: os.environ[env_var] = value elif env_var in os.environ: del os.environ[env_var] def Run(command): """Runs a command; returns True/False if its exit code is/isn't 0.""" print 'Running "%s". . .' % ' '.join(command) p = gtest_test_utils.Subprocess(command) return p.exited and p.exit_code == 0 # The tests. TODO(wan@google.com): refactor the class to share common # logic with code in gtest_break_on_failure_unittest.py. class ThrowOnFailureTest(gtest_test_utils.TestCase): """Tests the throw-on-failure mode.""" def RunAndVerify(self, env_var_value, flag_value, should_fail): """Runs gtest_throw_on_failure_test_ and verifies that it does (or does not) exit with a non-zero code. Args: env_var_value: value of the GTEST_BREAK_ON_FAILURE environment variable; None if the variable should be unset. flag_value: value of the --gtest_break_on_failure flag; None if the flag should not be present. should_fail: True iff the program is expected to fail. """ SetEnvVar(THROW_ON_FAILURE, env_var_value) if env_var_value is None: env_var_value_msg = ' is not set' else: env_var_value_msg = '=' + env_var_value if flag_value is None: flag = '' elif flag_value == '0': flag = '--%s=0' % THROW_ON_FAILURE else: flag = '--%s' % THROW_ON_FAILURE command = [EXE_PATH] if flag: command.append(flag) if should_fail: should_or_not = 'should' else: should_or_not = 'should not' failed = not Run(command) SetEnvVar(THROW_ON_FAILURE, None) msg = ('when %s%s, an assertion failure in "%s" %s cause a non-zero ' 'exit code.' % (THROW_ON_FAILURE, env_var_value_msg, ' '.join(command), should_or_not)) self.assert_(failed == should_fail, msg) def testDefaultBehavior(self): """Tests the behavior of the default mode.""" self.RunAndVerify(env_var_value=None, flag_value=None, should_fail=False) def testThrowOnFailureEnvVar(self): """Tests using the GTEST_THROW_ON_FAILURE environment variable.""" self.RunAndVerify(env_var_value='0', flag_value=None, should_fail=False) self.RunAndVerify(env_var_value='1', flag_value=None, should_fail=True) def testThrowOnFailureFlag(self): """Tests using the --gtest_throw_on_failure flag.""" self.RunAndVerify(env_var_value=None, flag_value='0', should_fail=False) self.RunAndVerify(env_var_value=None, flag_value='1', should_fail=True) def testThrowOnFailureFlagOverridesEnvVar(self): """Tests that --gtest_throw_on_failure overrides GTEST_THROW_ON_FAILURE.""" self.RunAndVerify(env_var_value='0', flag_value='0', should_fail=False) self.RunAndVerify(env_var_value='0', flag_value='1', should_fail=True) self.RunAndVerify(env_var_value='1', flag_value='0', should_fail=False) self.RunAndVerify(env_var_value='1', flag_value='1', should_fail=True) if __name__ == '__main__': gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_throw_on_failure_test_.cc000066400000000000000000000060401377520261000246660ustar00rootroot00000000000000// Copyright 2009, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // Tests Google Test's throw-on-failure mode with exceptions disabled. // // This program must be compiled with exceptions disabled. It will be // invoked by gtest_throw_on_failure_test.py, and is expected to exit // with non-zero in the throw-on-failure mode or 0 otherwise. #include "gtest/gtest.h" #include // for fflush, fprintf, NULL, etc. #include // for exit #include // for set_terminate // This terminate handler aborts the program using exit() rather than abort(). // This avoids showing pop-ups on Windows systems and core dumps on Unix-like // ones. void TerminateHandler() { fprintf(stderr, "%s\n", "Unhandled C++ exception terminating the program."); fflush(NULL); exit(1); } int main(int argc, char** argv) { #if GTEST_HAS_EXCEPTIONS std::set_terminate(&TerminateHandler); #endif testing::InitGoogleTest(&argc, argv); // We want to ensure that people can use Google Test assertions in // other testing frameworks, as long as they initialize Google Test // properly and set the throw-on-failure mode. Therefore, we don't // use Google Test's constructs for defining and running tests // (e.g. TEST and RUN_ALL_TESTS) here. // In the throw-on-failure mode with exceptions disabled, this // assertion will cause the program to exit with a non-zero code. EXPECT_EQ(2, 3); // When not in the throw-on-failure mode, the control will reach // here. return 0; } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_uninitialized_test.py000077500000000000000000000046601377520261000241050ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2008, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Verifies that Google Test warns the user when not initialized properly.""" __author__ = 'wan@google.com (Zhanyong Wan)' import gtest_test_utils COMMAND = gtest_test_utils.GetTestExecutablePath('gtest_uninitialized_test_') def Assert(condition): if not condition: raise AssertionError def AssertEq(expected, actual): if expected != actual: print 'Expected: %s' % (expected,) print ' Actual: %s' % (actual,) raise AssertionError def TestExitCodeAndOutput(command): """Runs the given command and verifies its exit code and output.""" # Verifies that 'command' exits with code 1. p = gtest_test_utils.Subprocess(command) Assert(p.exited) AssertEq(1, p.exit_code) Assert('InitGoogleTest' in p.output) class GTestUninitializedTest(gtest_test_utils.TestCase): def testExitCodeAndOutput(self): TestExitCodeAndOutput(COMMAND) if __name__ == '__main__': gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_uninitialized_test_.cc000066400000000000000000000036011377520261000241700ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) #include "gtest/gtest.h" TEST(DummyTest, Dummy) { // This test doesn't verify anything. We just need it to create a // realistic stage for testing the behavior of Google Test when // RUN_ALL_TESTS() is called without testing::InitGoogleTest() being // called first. } int main() { return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_unittest.cc000066400000000000000000007231111377520261000220060ustar00rootroot00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // Tests for Google Test itself. This verifies that the basic constructs of // Google Test work. #include "gtest/gtest.h" // Verifies that the command line flag variables can be accessed // in code once has been #included. // Do not move it after other #includes. TEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) { bool dummy = testing::GTEST_FLAG(also_run_disabled_tests) || testing::GTEST_FLAG(break_on_failure) || testing::GTEST_FLAG(catch_exceptions) || testing::GTEST_FLAG(color) != "unknown" || testing::GTEST_FLAG(filter) != "unknown" || testing::GTEST_FLAG(list_tests) || testing::GTEST_FLAG(output) != "unknown" || testing::GTEST_FLAG(print_time) || testing::GTEST_FLAG(random_seed) || testing::GTEST_FLAG(repeat) > 0 || testing::GTEST_FLAG(show_internal_stack_frames) || testing::GTEST_FLAG(shuffle) || testing::GTEST_FLAG(stack_trace_depth) > 0 || testing::GTEST_FLAG(stream_result_to) != "unknown" || testing::GTEST_FLAG(throw_on_failure); EXPECT_TRUE(dummy || !dummy); // Suppresses warning that dummy is unused. } #include // For INT_MAX. #include #include #include #include #include #include #include "gtest/gtest-spi.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ namespace testing { namespace internal { #if GTEST_CAN_STREAM_RESULTS_ class StreamingListenerTest : public Test { public: class FakeSocketWriter : public StreamingListener::AbstractSocketWriter { public: // Sends a string to the socket. virtual void Send(const string& message) { output_ += message; } string output_; }; StreamingListenerTest() : fake_sock_writer_(new FakeSocketWriter), streamer_(fake_sock_writer_), test_info_obj_("FooTest", "Bar", NULL, NULL, 0, NULL) {} protected: string* output() { return &(fake_sock_writer_->output_); } FakeSocketWriter* const fake_sock_writer_; StreamingListener streamer_; UnitTest unit_test_; TestInfo test_info_obj_; // The name test_info_ was taken by testing::Test. }; TEST_F(StreamingListenerTest, OnTestProgramEnd) { *output() = ""; streamer_.OnTestProgramEnd(unit_test_); EXPECT_EQ("event=TestProgramEnd&passed=1\n", *output()); } TEST_F(StreamingListenerTest, OnTestIterationEnd) { *output() = ""; streamer_.OnTestIterationEnd(unit_test_, 42); EXPECT_EQ("event=TestIterationEnd&passed=1&elapsed_time=0ms\n", *output()); } TEST_F(StreamingListenerTest, OnTestCaseStart) { *output() = ""; streamer_.OnTestCaseStart(TestCase("FooTest", "Bar", NULL, NULL)); EXPECT_EQ("event=TestCaseStart&name=FooTest\n", *output()); } TEST_F(StreamingListenerTest, OnTestCaseEnd) { *output() = ""; streamer_.OnTestCaseEnd(TestCase("FooTest", "Bar", NULL, NULL)); EXPECT_EQ("event=TestCaseEnd&passed=1&elapsed_time=0ms\n", *output()); } TEST_F(StreamingListenerTest, OnTestStart) { *output() = ""; streamer_.OnTestStart(test_info_obj_); EXPECT_EQ("event=TestStart&name=Bar\n", *output()); } TEST_F(StreamingListenerTest, OnTestEnd) { *output() = ""; streamer_.OnTestEnd(test_info_obj_); EXPECT_EQ("event=TestEnd&passed=1&elapsed_time=0ms\n", *output()); } TEST_F(StreamingListenerTest, OnTestPartResult) { *output() = ""; streamer_.OnTestPartResult(TestPartResult( TestPartResult::kFatalFailure, "foo.cc", 42, "failed=\n&%")); // Meta characters in the failure message should be properly escaped. EXPECT_EQ( "event=TestPartResult&file=foo.cc&line=42&message=failed%3D%0A%26%25\n", *output()); } #endif // GTEST_CAN_STREAM_RESULTS_ // Provides access to otherwise private parts of the TestEventListeners class // that are needed to test it. class TestEventListenersAccessor { public: static TestEventListener* GetRepeater(TestEventListeners* listeners) { return listeners->repeater(); } static void SetDefaultResultPrinter(TestEventListeners* listeners, TestEventListener* listener) { listeners->SetDefaultResultPrinter(listener); } static void SetDefaultXmlGenerator(TestEventListeners* listeners, TestEventListener* listener) { listeners->SetDefaultXmlGenerator(listener); } static bool EventForwardingEnabled(const TestEventListeners& listeners) { return listeners.EventForwardingEnabled(); } static void SuppressEventForwarding(TestEventListeners* listeners) { listeners->SuppressEventForwarding(); } }; class UnitTestRecordPropertyTestHelper : public Test { protected: UnitTestRecordPropertyTestHelper() {} // Forwards to UnitTest::RecordProperty() to bypass access controls. void UnitTestRecordProperty(const char* key, const std::string& value) { unit_test_.RecordProperty(key, value); } UnitTest unit_test_; }; } // namespace internal } // namespace testing using testing::AssertionFailure; using testing::AssertionResult; using testing::AssertionSuccess; using testing::DoubleLE; using testing::EmptyTestEventListener; using testing::Environment; using testing::FloatLE; using testing::GTEST_FLAG(also_run_disabled_tests); using testing::GTEST_FLAG(break_on_failure); using testing::GTEST_FLAG(catch_exceptions); using testing::GTEST_FLAG(color); using testing::GTEST_FLAG(death_test_use_fork); using testing::GTEST_FLAG(filter); using testing::GTEST_FLAG(list_tests); using testing::GTEST_FLAG(output); using testing::GTEST_FLAG(print_time); using testing::GTEST_FLAG(random_seed); using testing::GTEST_FLAG(repeat); using testing::GTEST_FLAG(show_internal_stack_frames); using testing::GTEST_FLAG(shuffle); using testing::GTEST_FLAG(stack_trace_depth); using testing::GTEST_FLAG(stream_result_to); using testing::GTEST_FLAG(throw_on_failure); using testing::IsNotSubstring; using testing::IsSubstring; using testing::Message; using testing::ScopedFakeTestPartResultReporter; using testing::StaticAssertTypeEq; using testing::Test; using testing::TestCase; using testing::TestEventListeners; using testing::TestInfo; using testing::TestPartResult; using testing::TestPartResultArray; using testing::TestProperty; using testing::TestResult; using testing::TimeInMillis; using testing::UnitTest; using testing::kMaxStackTraceDepth; using testing::internal::AddReference; using testing::internal::AlwaysFalse; using testing::internal::AlwaysTrue; using testing::internal::AppendUserMessage; using testing::internal::ArrayAwareFind; using testing::internal::ArrayEq; using testing::internal::CodePointToUtf8; using testing::internal::CompileAssertTypesEqual; using testing::internal::CopyArray; using testing::internal::CountIf; using testing::internal::EqFailure; using testing::internal::FloatingPoint; using testing::internal::ForEach; using testing::internal::FormatEpochTimeInMillisAsIso8601; using testing::internal::FormatTimeInMillisAsSeconds; using testing::internal::GTestFlagSaver; using testing::internal::GetCurrentOsStackTraceExceptTop; using testing::internal::GetElementOr; using testing::internal::GetNextRandomSeed; using testing::internal::GetRandomSeedFromFlag; using testing::internal::GetTestTypeId; using testing::internal::GetTimeInMillis; using testing::internal::GetTypeId; using testing::internal::GetUnitTestImpl; using testing::internal::ImplicitlyConvertible; using testing::internal::Int32; using testing::internal::Int32FromEnvOrDie; using testing::internal::IsAProtocolMessage; using testing::internal::IsContainer; using testing::internal::IsContainerTest; using testing::internal::IsNotContainer; using testing::internal::NativeArray; using testing::internal::ParseInt32Flag; using testing::internal::RemoveConst; using testing::internal::RemoveReference; using testing::internal::ShouldRunTestOnShard; using testing::internal::ShouldShard; using testing::internal::ShouldUseColor; using testing::internal::Shuffle; using testing::internal::ShuffleRange; using testing::internal::SkipPrefix; using testing::internal::StreamableToString; using testing::internal::String; using testing::internal::TestEventListenersAccessor; using testing::internal::TestResultAccessor; using testing::internal::UInt32; using testing::internal::WideStringToUtf8; using testing::internal::kCopy; using testing::internal::kMaxRandomSeed; using testing::internal::kReference; using testing::internal::kTestTypeIdInGoogleTest; using testing::internal::scoped_ptr; #if GTEST_HAS_STREAM_REDIRECTION using testing::internal::CaptureStdout; using testing::internal::GetCapturedStdout; #endif #if GTEST_IS_THREADSAFE using testing::internal::ThreadWithParam; #endif class TestingVector : public std::vector { }; ::std::ostream& operator<<(::std::ostream& os, const TestingVector& vector) { os << "{ "; for (size_t i = 0; i < vector.size(); i++) { os << vector[i] << " "; } os << "}"; return os; } // This line tests that we can define tests in an unnamed namespace. namespace { TEST(GetRandomSeedFromFlagTest, HandlesZero) { const int seed = GetRandomSeedFromFlag(0); EXPECT_LE(1, seed); EXPECT_LE(seed, static_cast(kMaxRandomSeed)); } TEST(GetRandomSeedFromFlagTest, PreservesValidSeed) { EXPECT_EQ(1, GetRandomSeedFromFlag(1)); EXPECT_EQ(2, GetRandomSeedFromFlag(2)); EXPECT_EQ(kMaxRandomSeed - 1, GetRandomSeedFromFlag(kMaxRandomSeed - 1)); EXPECT_EQ(static_cast(kMaxRandomSeed), GetRandomSeedFromFlag(kMaxRandomSeed)); } TEST(GetRandomSeedFromFlagTest, NormalizesInvalidSeed) { const int seed1 = GetRandomSeedFromFlag(-1); EXPECT_LE(1, seed1); EXPECT_LE(seed1, static_cast(kMaxRandomSeed)); const int seed2 = GetRandomSeedFromFlag(kMaxRandomSeed + 1); EXPECT_LE(1, seed2); EXPECT_LE(seed2, static_cast(kMaxRandomSeed)); } TEST(GetNextRandomSeedTest, WorksForValidInput) { EXPECT_EQ(2, GetNextRandomSeed(1)); EXPECT_EQ(3, GetNextRandomSeed(2)); EXPECT_EQ(static_cast(kMaxRandomSeed), GetNextRandomSeed(kMaxRandomSeed - 1)); EXPECT_EQ(1, GetNextRandomSeed(kMaxRandomSeed)); // We deliberately don't test GetNextRandomSeed() with invalid // inputs, as that requires death tests, which are expensive. This // is fine as GetNextRandomSeed() is internal and has a // straightforward definition. } static void ClearCurrentTestPartResults() { TestResultAccessor::ClearTestPartResults( GetUnitTestImpl()->current_test_result()); } // Tests GetTypeId. TEST(GetTypeIdTest, ReturnsSameValueForSameType) { EXPECT_EQ(GetTypeId(), GetTypeId()); EXPECT_EQ(GetTypeId(), GetTypeId()); } class SubClassOfTest : public Test {}; class AnotherSubClassOfTest : public Test {}; TEST(GetTypeIdTest, ReturnsDifferentValuesForDifferentTypes) { EXPECT_NE(GetTypeId(), GetTypeId()); EXPECT_NE(GetTypeId(), GetTypeId()); EXPECT_NE(GetTypeId(), GetTestTypeId()); EXPECT_NE(GetTypeId(), GetTestTypeId()); EXPECT_NE(GetTypeId(), GetTestTypeId()); EXPECT_NE(GetTypeId(), GetTypeId()); } // Verifies that GetTestTypeId() returns the same value, no matter it // is called from inside Google Test or outside of it. TEST(GetTestTypeIdTest, ReturnsTheSameValueInsideOrOutsideOfGoogleTest) { EXPECT_EQ(kTestTypeIdInGoogleTest, GetTestTypeId()); } // Tests FormatTimeInMillisAsSeconds(). TEST(FormatTimeInMillisAsSecondsTest, FormatsZero) { EXPECT_EQ("0", FormatTimeInMillisAsSeconds(0)); } TEST(FormatTimeInMillisAsSecondsTest, FormatsPositiveNumber) { EXPECT_EQ("0.003", FormatTimeInMillisAsSeconds(3)); EXPECT_EQ("0.01", FormatTimeInMillisAsSeconds(10)); EXPECT_EQ("0.2", FormatTimeInMillisAsSeconds(200)); EXPECT_EQ("1.2", FormatTimeInMillisAsSeconds(1200)); EXPECT_EQ("3", FormatTimeInMillisAsSeconds(3000)); } TEST(FormatTimeInMillisAsSecondsTest, FormatsNegativeNumber) { EXPECT_EQ("-0.003", FormatTimeInMillisAsSeconds(-3)); EXPECT_EQ("-0.01", FormatTimeInMillisAsSeconds(-10)); EXPECT_EQ("-0.2", FormatTimeInMillisAsSeconds(-200)); EXPECT_EQ("-1.2", FormatTimeInMillisAsSeconds(-1200)); EXPECT_EQ("-3", FormatTimeInMillisAsSeconds(-3000)); } // Tests FormatEpochTimeInMillisAsIso8601(). The correctness of conversion // for particular dates below was verified in Python using // datetime.datetime.fromutctimestamp(/1000). // FormatEpochTimeInMillisAsIso8601 depends on the current timezone, so we // have to set up a particular timezone to obtain predictable results. class FormatEpochTimeInMillisAsIso8601Test : public Test { public: // On Cygwin, GCC doesn't allow unqualified integer literals to exceed // 32 bits, even when 64-bit integer types are available. We have to // force the constants to have a 64-bit type here. static const TimeInMillis kMillisPerSec = 1000; private: virtual void SetUp() { saved_tz_ = NULL; #if _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4996) // Temporarily disables warning 4996 // (function or variable may be unsafe // for getenv, function is deprecated for // strdup). if (getenv("TZ")) saved_tz_ = strdup(getenv("TZ")); # pragma warning(pop) // Restores the warning state again. #else if (getenv("TZ")) saved_tz_ = strdup(getenv("TZ")); #endif // Set up the time zone for FormatEpochTimeInMillisAsIso8601 to use. We // cannot use the local time zone because the function's output depends // on the time zone. SetTimeZone("UTC+00"); } virtual void TearDown() { SetTimeZone(saved_tz_); free(const_cast(saved_tz_)); saved_tz_ = NULL; } static void SetTimeZone(const char* time_zone) { // tzset() distinguishes between the TZ variable being present and empty // and not being present, so we have to consider the case of time_zone // being NULL. #if _MSC_VER // ...Unless it's MSVC, whose standard library's _putenv doesn't // distinguish between an empty and a missing variable. const std::string env_var = std::string("TZ=") + (time_zone ? time_zone : ""); _putenv(env_var.c_str()); # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4996) // Temporarily disables warning 4996 // (function is deprecated). tzset(); # pragma warning(pop) // Restores the warning state again. #else if (time_zone) { setenv(("TZ"), time_zone, 1); } else { unsetenv("TZ"); } tzset(); #endif } const char* saved_tz_; }; const TimeInMillis FormatEpochTimeInMillisAsIso8601Test::kMillisPerSec; TEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsTwoDigitSegments) { EXPECT_EQ("2011-10-31T18:52:42", FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec)); } TEST_F(FormatEpochTimeInMillisAsIso8601Test, MillisecondsDoNotAffectResult) { EXPECT_EQ( "2011-10-31T18:52:42", FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec + 234)); } TEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsLeadingZeroes) { EXPECT_EQ("2011-09-03T05:07:02", FormatEpochTimeInMillisAsIso8601(1315026422 * kMillisPerSec)); } TEST_F(FormatEpochTimeInMillisAsIso8601Test, Prints24HourTime) { EXPECT_EQ("2011-09-28T17:08:22", FormatEpochTimeInMillisAsIso8601(1317229702 * kMillisPerSec)); } TEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsEpochStart) { EXPECT_EQ("1970-01-01T00:00:00", FormatEpochTimeInMillisAsIso8601(0)); } #if GTEST_CAN_COMPARE_NULL # ifdef __BORLANDC__ // Silences warnings: "Condition is always true", "Unreachable code" # pragma option push -w-ccc -w-rch # endif // Tests that GTEST_IS_NULL_LITERAL_(x) is true when x is a null // pointer literal. TEST(NullLiteralTest, IsTrueForNullLiterals) { EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(NULL)); EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0)); EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0U)); EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0L)); } // Tests that GTEST_IS_NULL_LITERAL_(x) is false when x is not a null // pointer literal. TEST(NullLiteralTest, IsFalseForNonNullLiterals) { EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(1)); EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(0.0)); EXPECT_FALSE(GTEST_IS_NULL_LITERAL_('a')); EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(static_cast(NULL))); } # ifdef __BORLANDC__ // Restores warnings after previous "#pragma option push" suppressed them. # pragma option pop # endif #endif // GTEST_CAN_COMPARE_NULL // // Tests CodePointToUtf8(). // Tests that the NUL character L'\0' is encoded correctly. TEST(CodePointToUtf8Test, CanEncodeNul) { EXPECT_EQ("", CodePointToUtf8(L'\0')); } // Tests that ASCII characters are encoded correctly. TEST(CodePointToUtf8Test, CanEncodeAscii) { EXPECT_EQ("a", CodePointToUtf8(L'a')); EXPECT_EQ("Z", CodePointToUtf8(L'Z')); EXPECT_EQ("&", CodePointToUtf8(L'&')); EXPECT_EQ("\x7F", CodePointToUtf8(L'\x7F')); } // Tests that Unicode code-points that have 8 to 11 bits are encoded // as 110xxxxx 10xxxxxx. TEST(CodePointToUtf8Test, CanEncode8To11Bits) { // 000 1101 0011 => 110-00011 10-010011 EXPECT_EQ("\xC3\x93", CodePointToUtf8(L'\xD3')); // 101 0111 0110 => 110-10101 10-110110 // Some compilers (e.g., GCC on MinGW) cannot handle non-ASCII codepoints // in wide strings and wide chars. In order to accomodate them, we have to // introduce such character constants as integers. EXPECT_EQ("\xD5\xB6", CodePointToUtf8(static_cast(0x576))); } // Tests that Unicode code-points that have 12 to 16 bits are encoded // as 1110xxxx 10xxxxxx 10xxxxxx. TEST(CodePointToUtf8Test, CanEncode12To16Bits) { // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011 EXPECT_EQ("\xE0\xA3\x93", CodePointToUtf8(static_cast(0x8D3))); // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101 EXPECT_EQ("\xEC\x9D\x8D", CodePointToUtf8(static_cast(0xC74D))); } #if !GTEST_WIDE_STRING_USES_UTF16_ // Tests in this group require a wchar_t to hold > 16 bits, and thus // are skipped on Windows, Cygwin, and Symbian, where a wchar_t is // 16-bit wide. This code may not compile on those systems. // Tests that Unicode code-points that have 17 to 21 bits are encoded // as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. TEST(CodePointToUtf8Test, CanEncode17To21Bits) { // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011 EXPECT_EQ("\xF0\x90\xA3\x93", CodePointToUtf8(L'\x108D3')); // 0 0001 0000 0100 0000 0000 => 11110-000 10-010000 10-010000 10-000000 EXPECT_EQ("\xF0\x90\x90\x80", CodePointToUtf8(L'\x10400')); // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100 EXPECT_EQ("\xF4\x88\x98\xB4", CodePointToUtf8(L'\x108634')); } // Tests that encoding an invalid code-point generates the expected result. TEST(CodePointToUtf8Test, CanEncodeInvalidCodePoint) { EXPECT_EQ("(Invalid Unicode 0x1234ABCD)", CodePointToUtf8(L'\x1234ABCD')); } #endif // !GTEST_WIDE_STRING_USES_UTF16_ // Tests WideStringToUtf8(). // Tests that the NUL character L'\0' is encoded correctly. TEST(WideStringToUtf8Test, CanEncodeNul) { EXPECT_STREQ("", WideStringToUtf8(L"", 0).c_str()); EXPECT_STREQ("", WideStringToUtf8(L"", -1).c_str()); } // Tests that ASCII strings are encoded correctly. TEST(WideStringToUtf8Test, CanEncodeAscii) { EXPECT_STREQ("a", WideStringToUtf8(L"a", 1).c_str()); EXPECT_STREQ("ab", WideStringToUtf8(L"ab", 2).c_str()); EXPECT_STREQ("a", WideStringToUtf8(L"a", -1).c_str()); EXPECT_STREQ("ab", WideStringToUtf8(L"ab", -1).c_str()); } // Tests that Unicode code-points that have 8 to 11 bits are encoded // as 110xxxxx 10xxxxxx. TEST(WideStringToUtf8Test, CanEncode8To11Bits) { // 000 1101 0011 => 110-00011 10-010011 EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", 1).c_str()); EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", -1).c_str()); // 101 0111 0110 => 110-10101 10-110110 const wchar_t s[] = { 0x576, '\0' }; EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, 1).c_str()); EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, -1).c_str()); } // Tests that Unicode code-points that have 12 to 16 bits are encoded // as 1110xxxx 10xxxxxx 10xxxxxx. TEST(WideStringToUtf8Test, CanEncode12To16Bits) { // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011 const wchar_t s1[] = { 0x8D3, '\0' }; EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, 1).c_str()); EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, -1).c_str()); // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101 const wchar_t s2[] = { 0xC74D, '\0' }; EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, 1).c_str()); EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, -1).c_str()); } // Tests that the conversion stops when the function encounters \0 character. TEST(WideStringToUtf8Test, StopsOnNulCharacter) { EXPECT_STREQ("ABC", WideStringToUtf8(L"ABC\0XYZ", 100).c_str()); } // Tests that the conversion stops when the function reaches the limit // specified by the 'length' parameter. TEST(WideStringToUtf8Test, StopsWhenLengthLimitReached) { EXPECT_STREQ("ABC", WideStringToUtf8(L"ABCDEF", 3).c_str()); } #if !GTEST_WIDE_STRING_USES_UTF16_ // Tests that Unicode code-points that have 17 to 21 bits are encoded // as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. This code may not compile // on the systems using UTF-16 encoding. TEST(WideStringToUtf8Test, CanEncode17To21Bits) { // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011 EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", 1).c_str()); EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", -1).c_str()); // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100 EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", 1).c_str()); EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", -1).c_str()); } // Tests that encoding an invalid code-point generates the expected result. TEST(WideStringToUtf8Test, CanEncodeInvalidCodePoint) { EXPECT_STREQ("(Invalid Unicode 0xABCDFF)", WideStringToUtf8(L"\xABCDFF", -1).c_str()); } #else // !GTEST_WIDE_STRING_USES_UTF16_ // Tests that surrogate pairs are encoded correctly on the systems using // UTF-16 encoding in the wide strings. TEST(WideStringToUtf8Test, CanEncodeValidUtf16SUrrogatePairs) { const wchar_t s[] = { 0xD801, 0xDC00, '\0' }; EXPECT_STREQ("\xF0\x90\x90\x80", WideStringToUtf8(s, -1).c_str()); } // Tests that encoding an invalid UTF-16 surrogate pair // generates the expected result. TEST(WideStringToUtf8Test, CanEncodeInvalidUtf16SurrogatePair) { // Leading surrogate is at the end of the string. const wchar_t s1[] = { 0xD800, '\0' }; EXPECT_STREQ("\xED\xA0\x80", WideStringToUtf8(s1, -1).c_str()); // Leading surrogate is not followed by the trailing surrogate. const wchar_t s2[] = { 0xD800, 'M', '\0' }; EXPECT_STREQ("\xED\xA0\x80M", WideStringToUtf8(s2, -1).c_str()); // Trailing surrogate appearas without a leading surrogate. const wchar_t s3[] = { 0xDC00, 'P', 'Q', 'R', '\0' }; EXPECT_STREQ("\xED\xB0\x80PQR", WideStringToUtf8(s3, -1).c_str()); } #endif // !GTEST_WIDE_STRING_USES_UTF16_ // Tests that codepoint concatenation works correctly. #if !GTEST_WIDE_STRING_USES_UTF16_ TEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) { const wchar_t s[] = { 0x108634, 0xC74D, '\n', 0x576, 0x8D3, 0x108634, '\0'}; EXPECT_STREQ( "\xF4\x88\x98\xB4" "\xEC\x9D\x8D" "\n" "\xD5\xB6" "\xE0\xA3\x93" "\xF4\x88\x98\xB4", WideStringToUtf8(s, -1).c_str()); } #else TEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) { const wchar_t s[] = { 0xC74D, '\n', 0x576, 0x8D3, '\0'}; EXPECT_STREQ( "\xEC\x9D\x8D" "\n" "\xD5\xB6" "\xE0\xA3\x93", WideStringToUtf8(s, -1).c_str()); } #endif // !GTEST_WIDE_STRING_USES_UTF16_ // Tests the Random class. TEST(RandomDeathTest, GeneratesCrashesOnInvalidRange) { testing::internal::Random random(42); EXPECT_DEATH_IF_SUPPORTED( random.Generate(0), "Cannot generate a number in the range \\[0, 0\\)"); EXPECT_DEATH_IF_SUPPORTED( random.Generate(testing::internal::Random::kMaxRange + 1), "Generation of a number in \\[0, 2147483649\\) was requested, " "but this can only generate numbers in \\[0, 2147483648\\)"); } TEST(RandomTest, GeneratesNumbersWithinRange) { const UInt32 kRange = 10000; testing::internal::Random random(12345); for (int i = 0; i < 10; i++) { EXPECT_LT(random.Generate(kRange), kRange) << " for iteration " << i; } testing::internal::Random random2(testing::internal::Random::kMaxRange); for (int i = 0; i < 10; i++) { EXPECT_LT(random2.Generate(kRange), kRange) << " for iteration " << i; } } TEST(RandomTest, RepeatsWhenReseeded) { const int kSeed = 123; const int kArraySize = 10; const UInt32 kRange = 10000; UInt32 values[kArraySize]; testing::internal::Random random(kSeed); for (int i = 0; i < kArraySize; i++) { values[i] = random.Generate(kRange); } random.Reseed(kSeed); for (int i = 0; i < kArraySize; i++) { EXPECT_EQ(values[i], random.Generate(kRange)) << " for iteration " << i; } } // Tests STL container utilities. // Tests CountIf(). static bool IsPositive(int n) { return n > 0; } TEST(ContainerUtilityTest, CountIf) { std::vector v; EXPECT_EQ(0, CountIf(v, IsPositive)); // Works for an empty container. v.push_back(-1); v.push_back(0); EXPECT_EQ(0, CountIf(v, IsPositive)); // Works when no value satisfies. v.push_back(2); v.push_back(-10); v.push_back(10); EXPECT_EQ(2, CountIf(v, IsPositive)); } // Tests ForEach(). static int g_sum = 0; static void Accumulate(int n) { g_sum += n; } TEST(ContainerUtilityTest, ForEach) { std::vector v; g_sum = 0; ForEach(v, Accumulate); EXPECT_EQ(0, g_sum); // Works for an empty container; g_sum = 0; v.push_back(1); ForEach(v, Accumulate); EXPECT_EQ(1, g_sum); // Works for a container with one element. g_sum = 0; v.push_back(20); v.push_back(300); ForEach(v, Accumulate); EXPECT_EQ(321, g_sum); } // Tests GetElementOr(). TEST(ContainerUtilityTest, GetElementOr) { std::vector a; EXPECT_EQ('x', GetElementOr(a, 0, 'x')); a.push_back('a'); a.push_back('b'); EXPECT_EQ('a', GetElementOr(a, 0, 'x')); EXPECT_EQ('b', GetElementOr(a, 1, 'x')); EXPECT_EQ('x', GetElementOr(a, -2, 'x')); EXPECT_EQ('x', GetElementOr(a, 2, 'x')); } TEST(ContainerUtilityDeathTest, ShuffleRange) { std::vector a; a.push_back(0); a.push_back(1); a.push_back(2); testing::internal::Random random(1); EXPECT_DEATH_IF_SUPPORTED( ShuffleRange(&random, -1, 1, &a), "Invalid shuffle range start -1: must be in range \\[0, 3\\]"); EXPECT_DEATH_IF_SUPPORTED( ShuffleRange(&random, 4, 4, &a), "Invalid shuffle range start 4: must be in range \\[0, 3\\]"); EXPECT_DEATH_IF_SUPPORTED( ShuffleRange(&random, 3, 2, &a), "Invalid shuffle range finish 2: must be in range \\[3, 3\\]"); EXPECT_DEATH_IF_SUPPORTED( ShuffleRange(&random, 3, 4, &a), "Invalid shuffle range finish 4: must be in range \\[3, 3\\]"); } class VectorShuffleTest : public Test { protected: static const int kVectorSize = 20; VectorShuffleTest() : random_(1) { for (int i = 0; i < kVectorSize; i++) { vector_.push_back(i); } } static bool VectorIsCorrupt(const TestingVector& vector) { if (kVectorSize != static_cast(vector.size())) { return true; } bool found_in_vector[kVectorSize] = { false }; for (size_t i = 0; i < vector.size(); i++) { const int e = vector[i]; if (e < 0 || e >= kVectorSize || found_in_vector[e]) { return true; } found_in_vector[e] = true; } // Vector size is correct, elements' range is correct, no // duplicate elements. Therefore no corruption has occurred. return false; } static bool VectorIsNotCorrupt(const TestingVector& vector) { return !VectorIsCorrupt(vector); } static bool RangeIsShuffled(const TestingVector& vector, int begin, int end) { for (int i = begin; i < end; i++) { if (i != vector[i]) { return true; } } return false; } static bool RangeIsUnshuffled( const TestingVector& vector, int begin, int end) { return !RangeIsShuffled(vector, begin, end); } static bool VectorIsShuffled(const TestingVector& vector) { return RangeIsShuffled(vector, 0, static_cast(vector.size())); } static bool VectorIsUnshuffled(const TestingVector& vector) { return !VectorIsShuffled(vector); } testing::internal::Random random_; TestingVector vector_; }; // class VectorShuffleTest const int VectorShuffleTest::kVectorSize; TEST_F(VectorShuffleTest, HandlesEmptyRange) { // Tests an empty range at the beginning... ShuffleRange(&random_, 0, 0, &vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector_); ASSERT_PRED1(VectorIsUnshuffled, vector_); // ...in the middle... ShuffleRange(&random_, kVectorSize/2, kVectorSize/2, &vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector_); ASSERT_PRED1(VectorIsUnshuffled, vector_); // ...at the end... ShuffleRange(&random_, kVectorSize - 1, kVectorSize - 1, &vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector_); ASSERT_PRED1(VectorIsUnshuffled, vector_); // ...and past the end. ShuffleRange(&random_, kVectorSize, kVectorSize, &vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector_); ASSERT_PRED1(VectorIsUnshuffled, vector_); } TEST_F(VectorShuffleTest, HandlesRangeOfSizeOne) { // Tests a size one range at the beginning... ShuffleRange(&random_, 0, 1, &vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector_); ASSERT_PRED1(VectorIsUnshuffled, vector_); // ...in the middle... ShuffleRange(&random_, kVectorSize/2, kVectorSize/2 + 1, &vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector_); ASSERT_PRED1(VectorIsUnshuffled, vector_); // ...and at the end. ShuffleRange(&random_, kVectorSize - 1, kVectorSize, &vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector_); ASSERT_PRED1(VectorIsUnshuffled, vector_); } // Because we use our own random number generator and a fixed seed, // we can guarantee that the following "random" tests will succeed. TEST_F(VectorShuffleTest, ShufflesEntireVector) { Shuffle(&random_, &vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector_); EXPECT_FALSE(VectorIsUnshuffled(vector_)) << vector_; // Tests the first and last elements in particular to ensure that // there are no off-by-one problems in our shuffle algorithm. EXPECT_NE(0, vector_[0]); EXPECT_NE(kVectorSize - 1, vector_[kVectorSize - 1]); } TEST_F(VectorShuffleTest, ShufflesStartOfVector) { const int kRangeSize = kVectorSize/2; ShuffleRange(&random_, 0, kRangeSize, &vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector_); EXPECT_PRED3(RangeIsShuffled, vector_, 0, kRangeSize); EXPECT_PRED3(RangeIsUnshuffled, vector_, kRangeSize, kVectorSize); } TEST_F(VectorShuffleTest, ShufflesEndOfVector) { const int kRangeSize = kVectorSize / 2; ShuffleRange(&random_, kRangeSize, kVectorSize, &vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector_); EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize); EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, kVectorSize); } TEST_F(VectorShuffleTest, ShufflesMiddleOfVector) { int kRangeSize = kVectorSize/3; ShuffleRange(&random_, kRangeSize, 2*kRangeSize, &vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector_); EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize); EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, 2*kRangeSize); EXPECT_PRED3(RangeIsUnshuffled, vector_, 2*kRangeSize, kVectorSize); } TEST_F(VectorShuffleTest, ShufflesRepeatably) { TestingVector vector2; for (int i = 0; i < kVectorSize; i++) { vector2.push_back(i); } random_.Reseed(1234); Shuffle(&random_, &vector_); random_.Reseed(1234); Shuffle(&random_, &vector2); ASSERT_PRED1(VectorIsNotCorrupt, vector_); ASSERT_PRED1(VectorIsNotCorrupt, vector2); for (int i = 0; i < kVectorSize; i++) { EXPECT_EQ(vector_[i], vector2[i]) << " where i is " << i; } } // Tests the size of the AssertHelper class. TEST(AssertHelperTest, AssertHelperIsSmall) { // To avoid breaking clients that use lots of assertions in one // function, we cannot grow the size of AssertHelper. EXPECT_LE(sizeof(testing::internal::AssertHelper), sizeof(void*)); } // Tests String::EndsWithCaseInsensitive(). TEST(StringTest, EndsWithCaseInsensitive) { EXPECT_TRUE(String::EndsWithCaseInsensitive("foobar", "BAR")); EXPECT_TRUE(String::EndsWithCaseInsensitive("foobaR", "bar")); EXPECT_TRUE(String::EndsWithCaseInsensitive("foobar", "")); EXPECT_TRUE(String::EndsWithCaseInsensitive("", "")); EXPECT_FALSE(String::EndsWithCaseInsensitive("Foobar", "foo")); EXPECT_FALSE(String::EndsWithCaseInsensitive("foobar", "Foo")); EXPECT_FALSE(String::EndsWithCaseInsensitive("", "foo")); } // C++Builder's preprocessor is buggy; it fails to expand macros that // appear in macro parameters after wide char literals. Provide an alias // for NULL as a workaround. static const wchar_t* const kNull = NULL; // Tests String::CaseInsensitiveWideCStringEquals TEST(StringTest, CaseInsensitiveWideCStringEquals) { EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(NULL, NULL)); EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"")); EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"", kNull)); EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"foobar")); EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"foobar", kNull)); EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"foobar")); EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"FOOBAR")); EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"FOOBAR", L"foobar")); } #if GTEST_OS_WINDOWS // Tests String::ShowWideCString(). TEST(StringTest, ShowWideCString) { EXPECT_STREQ("(null)", String::ShowWideCString(NULL).c_str()); EXPECT_STREQ("", String::ShowWideCString(L"").c_str()); EXPECT_STREQ("foo", String::ShowWideCString(L"foo").c_str()); } # if GTEST_OS_WINDOWS_MOBILE TEST(StringTest, AnsiAndUtf16Null) { EXPECT_EQ(NULL, String::AnsiToUtf16(NULL)); EXPECT_EQ(NULL, String::Utf16ToAnsi(NULL)); } TEST(StringTest, AnsiAndUtf16ConvertBasic) { const char* ansi = String::Utf16ToAnsi(L"str"); EXPECT_STREQ("str", ansi); delete [] ansi; const WCHAR* utf16 = String::AnsiToUtf16("str"); EXPECT_EQ(0, wcsncmp(L"str", utf16, 3)); delete [] utf16; } TEST(StringTest, AnsiAndUtf16ConvertPathChars) { const char* ansi = String::Utf16ToAnsi(L".:\\ \"*?"); EXPECT_STREQ(".:\\ \"*?", ansi); delete [] ansi; const WCHAR* utf16 = String::AnsiToUtf16(".:\\ \"*?"); EXPECT_EQ(0, wcsncmp(L".:\\ \"*?", utf16, 3)); delete [] utf16; } # endif // GTEST_OS_WINDOWS_MOBILE #endif // GTEST_OS_WINDOWS // Tests TestProperty construction. TEST(TestPropertyTest, StringValue) { TestProperty property("key", "1"); EXPECT_STREQ("key", property.key()); EXPECT_STREQ("1", property.value()); } // Tests TestProperty replacing a value. TEST(TestPropertyTest, ReplaceStringValue) { TestProperty property("key", "1"); EXPECT_STREQ("1", property.value()); property.SetValue("2"); EXPECT_STREQ("2", property.value()); } // AddFatalFailure() and AddNonfatalFailure() must be stand-alone // functions (i.e. their definitions cannot be inlined at the call // sites), or C++Builder won't compile the code. static void AddFatalFailure() { FAIL() << "Expected fatal failure."; } static void AddNonfatalFailure() { ADD_FAILURE() << "Expected non-fatal failure."; } class ScopedFakeTestPartResultReporterTest : public Test { public: // Must be public and not protected due to a bug in g++ 3.4.2. enum FailureMode { FATAL_FAILURE, NONFATAL_FAILURE }; static void AddFailure(FailureMode failure) { if (failure == FATAL_FAILURE) { AddFatalFailure(); } else { AddNonfatalFailure(); } } }; // Tests that ScopedFakeTestPartResultReporter intercepts test // failures. TEST_F(ScopedFakeTestPartResultReporterTest, InterceptsTestFailures) { TestPartResultArray results; { ScopedFakeTestPartResultReporter reporter( ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD, &results); AddFailure(NONFATAL_FAILURE); AddFailure(FATAL_FAILURE); } EXPECT_EQ(2, results.size()); EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed()); EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed()); } TEST_F(ScopedFakeTestPartResultReporterTest, DeprecatedConstructor) { TestPartResultArray results; { // Tests, that the deprecated constructor still works. ScopedFakeTestPartResultReporter reporter(&results); AddFailure(NONFATAL_FAILURE); } EXPECT_EQ(1, results.size()); } #if GTEST_IS_THREADSAFE class ScopedFakeTestPartResultReporterWithThreadsTest : public ScopedFakeTestPartResultReporterTest { protected: static void AddFailureInOtherThread(FailureMode failure) { ThreadWithParam thread(&AddFailure, failure, NULL); thread.Join(); } }; TEST_F(ScopedFakeTestPartResultReporterWithThreadsTest, InterceptsTestFailuresInAllThreads) { TestPartResultArray results; { ScopedFakeTestPartResultReporter reporter( ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, &results); AddFailure(NONFATAL_FAILURE); AddFailure(FATAL_FAILURE); AddFailureInOtherThread(NONFATAL_FAILURE); AddFailureInOtherThread(FATAL_FAILURE); } EXPECT_EQ(4, results.size()); EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed()); EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed()); EXPECT_TRUE(results.GetTestPartResult(2).nonfatally_failed()); EXPECT_TRUE(results.GetTestPartResult(3).fatally_failed()); } #endif // GTEST_IS_THREADSAFE // Tests EXPECT_FATAL_FAILURE{,ON_ALL_THREADS}. Makes sure that they // work even if the failure is generated in a called function rather than // the current context. typedef ScopedFakeTestPartResultReporterTest ExpectFatalFailureTest; TEST_F(ExpectFatalFailureTest, CatchesFatalFaliure) { EXPECT_FATAL_FAILURE(AddFatalFailure(), "Expected fatal failure."); } #if GTEST_HAS_GLOBAL_STRING TEST_F(ExpectFatalFailureTest, AcceptsStringObject) { EXPECT_FATAL_FAILURE(AddFatalFailure(), ::string("Expected fatal failure.")); } #endif TEST_F(ExpectFatalFailureTest, AcceptsStdStringObject) { EXPECT_FATAL_FAILURE(AddFatalFailure(), ::std::string("Expected fatal failure.")); } TEST_F(ExpectFatalFailureTest, CatchesFatalFailureOnAllThreads) { // We have another test below to verify that the macro catches fatal // failures generated on another thread. EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFatalFailure(), "Expected fatal failure."); } #ifdef __BORLANDC__ // Silences warnings: "Condition is always true" # pragma option push -w-ccc #endif // Tests that EXPECT_FATAL_FAILURE() can be used in a non-void // function even when the statement in it contains ASSERT_*. int NonVoidFunction() { EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), ""); EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), ""); return 0; } TEST_F(ExpectFatalFailureTest, CanBeUsedInNonVoidFunction) { NonVoidFunction(); } // Tests that EXPECT_FATAL_FAILURE(statement, ...) doesn't abort the // current function even though 'statement' generates a fatal failure. void DoesNotAbortHelper(bool* aborted) { EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), ""); EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), ""); *aborted = false; } #ifdef __BORLANDC__ // Restores warnings after previous "#pragma option push" suppressed them. # pragma option pop #endif TEST_F(ExpectFatalFailureTest, DoesNotAbort) { bool aborted = true; DoesNotAbortHelper(&aborted); EXPECT_FALSE(aborted); } // Tests that the EXPECT_FATAL_FAILURE{,_ON_ALL_THREADS} accepts a // statement that contains a macro which expands to code containing an // unprotected comma. static int global_var = 0; #define GTEST_USE_UNPROTECTED_COMMA_ global_var++, global_var++ TEST_F(ExpectFatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) { #ifndef __BORLANDC__ // ICE's in C++Builder. EXPECT_FATAL_FAILURE({ GTEST_USE_UNPROTECTED_COMMA_; AddFatalFailure(); }, ""); #endif EXPECT_FATAL_FAILURE_ON_ALL_THREADS({ GTEST_USE_UNPROTECTED_COMMA_; AddFatalFailure(); }, ""); } // Tests EXPECT_NONFATAL_FAILURE{,ON_ALL_THREADS}. typedef ScopedFakeTestPartResultReporterTest ExpectNonfatalFailureTest; TEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailure) { EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), "Expected non-fatal failure."); } #if GTEST_HAS_GLOBAL_STRING TEST_F(ExpectNonfatalFailureTest, AcceptsStringObject) { EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), ::string("Expected non-fatal failure.")); } #endif TEST_F(ExpectNonfatalFailureTest, AcceptsStdStringObject) { EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(), ::std::string("Expected non-fatal failure.")); } TEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailureOnAllThreads) { // We have another test below to verify that the macro catches // non-fatal failures generated on another thread. EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddNonfatalFailure(), "Expected non-fatal failure."); } // Tests that the EXPECT_NONFATAL_FAILURE{,_ON_ALL_THREADS} accepts a // statement that contains a macro which expands to code containing an // unprotected comma. TEST_F(ExpectNonfatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) { EXPECT_NONFATAL_FAILURE({ GTEST_USE_UNPROTECTED_COMMA_; AddNonfatalFailure(); }, ""); EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS({ GTEST_USE_UNPROTECTED_COMMA_; AddNonfatalFailure(); }, ""); } #if GTEST_IS_THREADSAFE typedef ScopedFakeTestPartResultReporterWithThreadsTest ExpectFailureWithThreadsTest; TEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailureOnAllThreads) { EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailureInOtherThread(FATAL_FAILURE), "Expected fatal failure."); } TEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailureOnAllThreads) { EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS( AddFailureInOtherThread(NONFATAL_FAILURE), "Expected non-fatal failure."); } #endif // GTEST_IS_THREADSAFE // Tests the TestProperty class. TEST(TestPropertyTest, ConstructorWorks) { const TestProperty property("key", "value"); EXPECT_STREQ("key", property.key()); EXPECT_STREQ("value", property.value()); } TEST(TestPropertyTest, SetValue) { TestProperty property("key", "value_1"); EXPECT_STREQ("key", property.key()); property.SetValue("value_2"); EXPECT_STREQ("key", property.key()); EXPECT_STREQ("value_2", property.value()); } // Tests the TestResult class // The test fixture for testing TestResult. class TestResultTest : public Test { protected: typedef std::vector TPRVector; // We make use of 2 TestPartResult objects, TestPartResult * pr1, * pr2; // ... and 3 TestResult objects. TestResult * r0, * r1, * r2; virtual void SetUp() { // pr1 is for success. pr1 = new TestPartResult(TestPartResult::kSuccess, "foo/bar.cc", 10, "Success!"); // pr2 is for fatal failure. pr2 = new TestPartResult(TestPartResult::kFatalFailure, "foo/bar.cc", -1, // This line number means "unknown" "Failure!"); // Creates the TestResult objects. r0 = new TestResult(); r1 = new TestResult(); r2 = new TestResult(); // In order to test TestResult, we need to modify its internal // state, in particular the TestPartResult vector it holds. // test_part_results() returns a const reference to this vector. // We cast it to a non-const object s.t. it can be modified (yes, // this is a hack). TPRVector* results1 = const_cast( &TestResultAccessor::test_part_results(*r1)); TPRVector* results2 = const_cast( &TestResultAccessor::test_part_results(*r2)); // r0 is an empty TestResult. // r1 contains a single SUCCESS TestPartResult. results1->push_back(*pr1); // r2 contains a SUCCESS, and a FAILURE. results2->push_back(*pr1); results2->push_back(*pr2); } virtual void TearDown() { delete pr1; delete pr2; delete r0; delete r1; delete r2; } // Helper that compares two two TestPartResults. static void CompareTestPartResult(const TestPartResult& expected, const TestPartResult& actual) { EXPECT_EQ(expected.type(), actual.type()); EXPECT_STREQ(expected.file_name(), actual.file_name()); EXPECT_EQ(expected.line_number(), actual.line_number()); EXPECT_STREQ(expected.summary(), actual.summary()); EXPECT_STREQ(expected.message(), actual.message()); EXPECT_EQ(expected.passed(), actual.passed()); EXPECT_EQ(expected.failed(), actual.failed()); EXPECT_EQ(expected.nonfatally_failed(), actual.nonfatally_failed()); EXPECT_EQ(expected.fatally_failed(), actual.fatally_failed()); } }; // Tests TestResult::total_part_count(). TEST_F(TestResultTest, total_part_count) { ASSERT_EQ(0, r0->total_part_count()); ASSERT_EQ(1, r1->total_part_count()); ASSERT_EQ(2, r2->total_part_count()); } // Tests TestResult::Passed(). TEST_F(TestResultTest, Passed) { ASSERT_TRUE(r0->Passed()); ASSERT_TRUE(r1->Passed()); ASSERT_FALSE(r2->Passed()); } // Tests TestResult::Failed(). TEST_F(TestResultTest, Failed) { ASSERT_FALSE(r0->Failed()); ASSERT_FALSE(r1->Failed()); ASSERT_TRUE(r2->Failed()); } // Tests TestResult::GetTestPartResult(). typedef TestResultTest TestResultDeathTest; TEST_F(TestResultDeathTest, GetTestPartResult) { CompareTestPartResult(*pr1, r2->GetTestPartResult(0)); CompareTestPartResult(*pr2, r2->GetTestPartResult(1)); EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(2), ""); EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(-1), ""); } // Tests TestResult has no properties when none are added. TEST(TestResultPropertyTest, NoPropertiesFoundWhenNoneAreAdded) { TestResult test_result; ASSERT_EQ(0, test_result.test_property_count()); } // Tests TestResult has the expected property when added. TEST(TestResultPropertyTest, OnePropertyFoundWhenAdded) { TestResult test_result; TestProperty property("key_1", "1"); TestResultAccessor::RecordProperty(&test_result, "testcase", property); ASSERT_EQ(1, test_result.test_property_count()); const TestProperty& actual_property = test_result.GetTestProperty(0); EXPECT_STREQ("key_1", actual_property.key()); EXPECT_STREQ("1", actual_property.value()); } // Tests TestResult has multiple properties when added. TEST(TestResultPropertyTest, MultiplePropertiesFoundWhenAdded) { TestResult test_result; TestProperty property_1("key_1", "1"); TestProperty property_2("key_2", "2"); TestResultAccessor::RecordProperty(&test_result, "testcase", property_1); TestResultAccessor::RecordProperty(&test_result, "testcase", property_2); ASSERT_EQ(2, test_result.test_property_count()); const TestProperty& actual_property_1 = test_result.GetTestProperty(0); EXPECT_STREQ("key_1", actual_property_1.key()); EXPECT_STREQ("1", actual_property_1.value()); const TestProperty& actual_property_2 = test_result.GetTestProperty(1); EXPECT_STREQ("key_2", actual_property_2.key()); EXPECT_STREQ("2", actual_property_2.value()); } // Tests TestResult::RecordProperty() overrides values for duplicate keys. TEST(TestResultPropertyTest, OverridesValuesForDuplicateKeys) { TestResult test_result; TestProperty property_1_1("key_1", "1"); TestProperty property_2_1("key_2", "2"); TestProperty property_1_2("key_1", "12"); TestProperty property_2_2("key_2", "22"); TestResultAccessor::RecordProperty(&test_result, "testcase", property_1_1); TestResultAccessor::RecordProperty(&test_result, "testcase", property_2_1); TestResultAccessor::RecordProperty(&test_result, "testcase", property_1_2); TestResultAccessor::RecordProperty(&test_result, "testcase", property_2_2); ASSERT_EQ(2, test_result.test_property_count()); const TestProperty& actual_property_1 = test_result.GetTestProperty(0); EXPECT_STREQ("key_1", actual_property_1.key()); EXPECT_STREQ("12", actual_property_1.value()); const TestProperty& actual_property_2 = test_result.GetTestProperty(1); EXPECT_STREQ("key_2", actual_property_2.key()); EXPECT_STREQ("22", actual_property_2.value()); } // Tests TestResult::GetTestProperty(). TEST(TestResultPropertyTest, GetTestProperty) { TestResult test_result; TestProperty property_1("key_1", "1"); TestProperty property_2("key_2", "2"); TestProperty property_3("key_3", "3"); TestResultAccessor::RecordProperty(&test_result, "testcase", property_1); TestResultAccessor::RecordProperty(&test_result, "testcase", property_2); TestResultAccessor::RecordProperty(&test_result, "testcase", property_3); const TestProperty& fetched_property_1 = test_result.GetTestProperty(0); const TestProperty& fetched_property_2 = test_result.GetTestProperty(1); const TestProperty& fetched_property_3 = test_result.GetTestProperty(2); EXPECT_STREQ("key_1", fetched_property_1.key()); EXPECT_STREQ("1", fetched_property_1.value()); EXPECT_STREQ("key_2", fetched_property_2.key()); EXPECT_STREQ("2", fetched_property_2.value()); EXPECT_STREQ("key_3", fetched_property_3.key()); EXPECT_STREQ("3", fetched_property_3.value()); EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(3), ""); EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(-1), ""); } // Tests that GTestFlagSaver works on Windows and Mac. class GTestFlagSaverTest : public Test { protected: // Saves the Google Test flags such that we can restore them later, and // then sets them to their default values. This will be called // before the first test in this test case is run. static void SetUpTestCase() { saver_ = new GTestFlagSaver; GTEST_FLAG(also_run_disabled_tests) = false; GTEST_FLAG(break_on_failure) = false; GTEST_FLAG(catch_exceptions) = false; GTEST_FLAG(death_test_use_fork) = false; GTEST_FLAG(color) = "auto"; GTEST_FLAG(filter) = ""; GTEST_FLAG(list_tests) = false; GTEST_FLAG(output) = ""; GTEST_FLAG(print_time) = true; GTEST_FLAG(random_seed) = 0; GTEST_FLAG(repeat) = 1; GTEST_FLAG(shuffle) = false; GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth; GTEST_FLAG(stream_result_to) = ""; GTEST_FLAG(throw_on_failure) = false; } // Restores the Google Test flags that the tests have modified. This will // be called after the last test in this test case is run. static void TearDownTestCase() { delete saver_; saver_ = NULL; } // Verifies that the Google Test flags have their default values, and then // modifies each of them. void VerifyAndModifyFlags() { EXPECT_FALSE(GTEST_FLAG(also_run_disabled_tests)); EXPECT_FALSE(GTEST_FLAG(break_on_failure)); EXPECT_FALSE(GTEST_FLAG(catch_exceptions)); EXPECT_STREQ("auto", GTEST_FLAG(color).c_str()); EXPECT_FALSE(GTEST_FLAG(death_test_use_fork)); EXPECT_STREQ("", GTEST_FLAG(filter).c_str()); EXPECT_FALSE(GTEST_FLAG(list_tests)); EXPECT_STREQ("", GTEST_FLAG(output).c_str()); EXPECT_TRUE(GTEST_FLAG(print_time)); EXPECT_EQ(0, GTEST_FLAG(random_seed)); EXPECT_EQ(1, GTEST_FLAG(repeat)); EXPECT_FALSE(GTEST_FLAG(shuffle)); EXPECT_EQ(kMaxStackTraceDepth, GTEST_FLAG(stack_trace_depth)); EXPECT_STREQ("", GTEST_FLAG(stream_result_to).c_str()); EXPECT_FALSE(GTEST_FLAG(throw_on_failure)); GTEST_FLAG(also_run_disabled_tests) = true; GTEST_FLAG(break_on_failure) = true; GTEST_FLAG(catch_exceptions) = true; GTEST_FLAG(color) = "no"; GTEST_FLAG(death_test_use_fork) = true; GTEST_FLAG(filter) = "abc"; GTEST_FLAG(list_tests) = true; GTEST_FLAG(output) = "xml:foo.xml"; GTEST_FLAG(print_time) = false; GTEST_FLAG(random_seed) = 1; GTEST_FLAG(repeat) = 100; GTEST_FLAG(shuffle) = true; GTEST_FLAG(stack_trace_depth) = 1; GTEST_FLAG(stream_result_to) = "localhost:1234"; GTEST_FLAG(throw_on_failure) = true; } private: // For saving Google Test flags during this test case. static GTestFlagSaver* saver_; }; GTestFlagSaver* GTestFlagSaverTest::saver_ = NULL; // Google Test doesn't guarantee the order of tests. The following two // tests are designed to work regardless of their order. // Modifies the Google Test flags in the test body. TEST_F(GTestFlagSaverTest, ModifyGTestFlags) { VerifyAndModifyFlags(); } // Verifies that the Google Test flags in the body of the previous test were // restored to their original values. TEST_F(GTestFlagSaverTest, VerifyGTestFlags) { VerifyAndModifyFlags(); } // Sets an environment variable with the given name to the given // value. If the value argument is "", unsets the environment // variable. The caller must ensure that both arguments are not NULL. static void SetEnv(const char* name, const char* value) { #if GTEST_OS_WINDOWS_MOBILE // Environment variables are not supported on Windows CE. return; #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) // C++Builder's putenv only stores a pointer to its parameter; we have to // ensure that the string remains valid as long as it might be needed. // We use an std::map to do so. static std::map added_env; // Because putenv stores a pointer to the string buffer, we can't delete the // previous string (if present) until after it's replaced. std::string *prev_env = NULL; if (added_env.find(name) != added_env.end()) { prev_env = added_env[name]; } added_env[name] = new std::string( (Message() << name << "=" << value).GetString()); // The standard signature of putenv accepts a 'char*' argument. Other // implementations, like C++Builder's, accept a 'const char*'. // We cast away the 'const' since that would work for both variants. putenv(const_cast(added_env[name]->c_str())); delete prev_env; #elif GTEST_OS_WINDOWS // If we are on Windows proper. _putenv((Message() << name << "=" << value).GetString().c_str()); #else if (*value == '\0') { unsetenv(name); } else { setenv(name, value, 1); } #endif // GTEST_OS_WINDOWS_MOBILE } #if !GTEST_OS_WINDOWS_MOBILE // Environment variables are not supported on Windows CE. using testing::internal::Int32FromGTestEnv; // Tests Int32FromGTestEnv(). // Tests that Int32FromGTestEnv() returns the default value when the // environment variable is not set. TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenVariableIsNotSet) { SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", ""); EXPECT_EQ(10, Int32FromGTestEnv("temp", 10)); } // Tests that Int32FromGTestEnv() returns the default value when the // environment variable overflows as an Int32. TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueOverflows) { printf("(expecting 2 warnings)\n"); SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12345678987654321"); EXPECT_EQ(20, Int32FromGTestEnv("temp", 20)); SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-12345678987654321"); EXPECT_EQ(30, Int32FromGTestEnv("temp", 30)); } // Tests that Int32FromGTestEnv() returns the default value when the // environment variable does not represent a valid decimal integer. TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueIsInvalid) { printf("(expecting 2 warnings)\n"); SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "A1"); EXPECT_EQ(40, Int32FromGTestEnv("temp", 40)); SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12X"); EXPECT_EQ(50, Int32FromGTestEnv("temp", 50)); } // Tests that Int32FromGTestEnv() parses and returns the value of the // environment variable when it represents a valid decimal integer in // the range of an Int32. TEST(Int32FromGTestEnvTest, ParsesAndReturnsValidValue) { SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "123"); EXPECT_EQ(123, Int32FromGTestEnv("temp", 0)); SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-321"); EXPECT_EQ(-321, Int32FromGTestEnv("temp", 0)); } #endif // !GTEST_OS_WINDOWS_MOBILE // Tests ParseInt32Flag(). // Tests that ParseInt32Flag() returns false and doesn't change the // output value when the flag has wrong format TEST(ParseInt32FlagTest, ReturnsFalseForInvalidFlag) { Int32 value = 123; EXPECT_FALSE(ParseInt32Flag("--a=100", "b", &value)); EXPECT_EQ(123, value); EXPECT_FALSE(ParseInt32Flag("a=100", "a", &value)); EXPECT_EQ(123, value); } // Tests that ParseInt32Flag() returns false and doesn't change the // output value when the flag overflows as an Int32. TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueOverflows) { printf("(expecting 2 warnings)\n"); Int32 value = 123; EXPECT_FALSE(ParseInt32Flag("--abc=12345678987654321", "abc", &value)); EXPECT_EQ(123, value); EXPECT_FALSE(ParseInt32Flag("--abc=-12345678987654321", "abc", &value)); EXPECT_EQ(123, value); } // Tests that ParseInt32Flag() returns false and doesn't change the // output value when the flag does not represent a valid decimal // integer. TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueIsInvalid) { printf("(expecting 2 warnings)\n"); Int32 value = 123; EXPECT_FALSE(ParseInt32Flag("--abc=A1", "abc", &value)); EXPECT_EQ(123, value); EXPECT_FALSE(ParseInt32Flag("--abc=12X", "abc", &value)); EXPECT_EQ(123, value); } // Tests that ParseInt32Flag() parses the value of the flag and // returns true when the flag represents a valid decimal integer in // the range of an Int32. TEST(ParseInt32FlagTest, ParsesAndReturnsValidValue) { Int32 value = 123; EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=456", "abc", &value)); EXPECT_EQ(456, value); EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=-789", "abc", &value)); EXPECT_EQ(-789, value); } // Tests that Int32FromEnvOrDie() parses the value of the var or // returns the correct default. // Environment variables are not supported on Windows CE. #if !GTEST_OS_WINDOWS_MOBILE TEST(Int32FromEnvOrDieTest, ParsesAndReturnsValidValue) { EXPECT_EQ(333, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "123"); EXPECT_EQ(123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "-123"); EXPECT_EQ(-123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333)); } #endif // !GTEST_OS_WINDOWS_MOBILE // Tests that Int32FromEnvOrDie() aborts with an error message // if the variable is not an Int32. TEST(Int32FromEnvOrDieDeathTest, AbortsOnFailure) { SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "xxx"); EXPECT_DEATH_IF_SUPPORTED( Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123), ".*"); } // Tests that Int32FromEnvOrDie() aborts with an error message // if the variable cannot be represnted by an Int32. TEST(Int32FromEnvOrDieDeathTest, AbortsOnInt32Overflow) { SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "1234567891234567891234"); EXPECT_DEATH_IF_SUPPORTED( Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123), ".*"); } // Tests that ShouldRunTestOnShard() selects all tests // where there is 1 shard. TEST(ShouldRunTestOnShardTest, IsPartitionWhenThereIsOneShard) { EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 0)); EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 1)); EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 2)); EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 3)); EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 4)); } class ShouldShardTest : public testing::Test { protected: virtual void SetUp() { index_var_ = GTEST_FLAG_PREFIX_UPPER_ "INDEX"; total_var_ = GTEST_FLAG_PREFIX_UPPER_ "TOTAL"; } virtual void TearDown() { SetEnv(index_var_, ""); SetEnv(total_var_, ""); } const char* index_var_; const char* total_var_; }; // Tests that sharding is disabled if neither of the environment variables // are set. TEST_F(ShouldShardTest, ReturnsFalseWhenNeitherEnvVarIsSet) { SetEnv(index_var_, ""); SetEnv(total_var_, ""); EXPECT_FALSE(ShouldShard(total_var_, index_var_, false)); EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); } // Tests that sharding is not enabled if total_shards == 1. TEST_F(ShouldShardTest, ReturnsFalseWhenTotalShardIsOne) { SetEnv(index_var_, "0"); SetEnv(total_var_, "1"); EXPECT_FALSE(ShouldShard(total_var_, index_var_, false)); EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); } // Tests that sharding is enabled if total_shards > 1 and // we are not in a death test subprocess. // Environment variables are not supported on Windows CE. #if !GTEST_OS_WINDOWS_MOBILE TEST_F(ShouldShardTest, WorksWhenShardEnvVarsAreValid) { SetEnv(index_var_, "4"); SetEnv(total_var_, "22"); EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); SetEnv(index_var_, "8"); SetEnv(total_var_, "9"); EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); SetEnv(index_var_, "0"); SetEnv(total_var_, "9"); EXPECT_TRUE(ShouldShard(total_var_, index_var_, false)); EXPECT_FALSE(ShouldShard(total_var_, index_var_, true)); } #endif // !GTEST_OS_WINDOWS_MOBILE // Tests that we exit in error if the sharding values are not valid. typedef ShouldShardTest ShouldShardDeathTest; TEST_F(ShouldShardDeathTest, AbortsWhenShardingEnvVarsAreInvalid) { SetEnv(index_var_, "4"); SetEnv(total_var_, "4"); EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); SetEnv(index_var_, "4"); SetEnv(total_var_, "-2"); EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); SetEnv(index_var_, "5"); SetEnv(total_var_, ""); EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); SetEnv(index_var_, ""); SetEnv(total_var_, "5"); EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*"); } // Tests that ShouldRunTestOnShard is a partition when 5 // shards are used. TEST(ShouldRunTestOnShardTest, IsPartitionWhenThereAreFiveShards) { // Choose an arbitrary number of tests and shards. const int num_tests = 17; const int num_shards = 5; // Check partitioning: each test should be on exactly 1 shard. for (int test_id = 0; test_id < num_tests; test_id++) { int prev_selected_shard_index = -1; for (int shard_index = 0; shard_index < num_shards; shard_index++) { if (ShouldRunTestOnShard(num_shards, shard_index, test_id)) { if (prev_selected_shard_index < 0) { prev_selected_shard_index = shard_index; } else { ADD_FAILURE() << "Shard " << prev_selected_shard_index << " and " << shard_index << " are both selected to run test " << test_id; } } } } // Check balance: This is not required by the sharding protocol, but is a // desirable property for performance. for (int shard_index = 0; shard_index < num_shards; shard_index++) { int num_tests_on_shard = 0; for (int test_id = 0; test_id < num_tests; test_id++) { num_tests_on_shard += ShouldRunTestOnShard(num_shards, shard_index, test_id); } EXPECT_GE(num_tests_on_shard, num_tests / num_shards); } } // For the same reason we are not explicitly testing everything in the // Test class, there are no separate tests for the following classes // (except for some trivial cases): // // TestCase, UnitTest, UnitTestResultPrinter. // // Similarly, there are no separate tests for the following macros: // // TEST, TEST_F, RUN_ALL_TESTS TEST(UnitTestTest, CanGetOriginalWorkingDir) { ASSERT_TRUE(UnitTest::GetInstance()->original_working_dir() != NULL); EXPECT_STRNE(UnitTest::GetInstance()->original_working_dir(), ""); } TEST(UnitTestTest, ReturnsPlausibleTimestamp) { EXPECT_LT(0, UnitTest::GetInstance()->start_timestamp()); EXPECT_LE(UnitTest::GetInstance()->start_timestamp(), GetTimeInMillis()); } // When a property using a reserved key is supplied to this function, it // tests that a non-fatal failure is added, a fatal failure is not added, // and that the property is not recorded. void ExpectNonFatalFailureRecordingPropertyWithReservedKey( const TestResult& test_result, const char* key) { EXPECT_NONFATAL_FAILURE(Test::RecordProperty(key, "1"), "Reserved key"); ASSERT_EQ(0, test_result.test_property_count()) << "Property for key '" << key << "' recorded unexpectedly."; } void ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( const char* key) { const TestInfo* test_info = UnitTest::GetInstance()->current_test_info(); ASSERT_TRUE(test_info != NULL); ExpectNonFatalFailureRecordingPropertyWithReservedKey(*test_info->result(), key); } void ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( const char* key) { const TestCase* test_case = UnitTest::GetInstance()->current_test_case(); ASSERT_TRUE(test_case != NULL); ExpectNonFatalFailureRecordingPropertyWithReservedKey( test_case->ad_hoc_test_result(), key); } void ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( const char* key) { ExpectNonFatalFailureRecordingPropertyWithReservedKey( UnitTest::GetInstance()->ad_hoc_test_result(), key); } // Tests that property recording functions in UnitTest outside of tests // functions correcly. Creating a separate instance of UnitTest ensures it // is in a state similar to the UnitTest's singleton's between tests. class UnitTestRecordPropertyTest : public testing::internal::UnitTestRecordPropertyTestHelper { public: static void SetUpTestCase() { ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( "disabled"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( "errors"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( "failures"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( "name"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( "tests"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase( "time"); Test::RecordProperty("test_case_key_1", "1"); const TestCase* test_case = UnitTest::GetInstance()->current_test_case(); ASSERT_TRUE(test_case != NULL); ASSERT_EQ(1, test_case->ad_hoc_test_result().test_property_count()); EXPECT_STREQ("test_case_key_1", test_case->ad_hoc_test_result().GetTestProperty(0).key()); EXPECT_STREQ("1", test_case->ad_hoc_test_result().GetTestProperty(0).value()); } }; // Tests TestResult has the expected property when added. TEST_F(UnitTestRecordPropertyTest, OnePropertyFoundWhenAdded) { UnitTestRecordProperty("key_1", "1"); ASSERT_EQ(1, unit_test_.ad_hoc_test_result().test_property_count()); EXPECT_STREQ("key_1", unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); EXPECT_STREQ("1", unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); } // Tests TestResult has multiple properties when added. TEST_F(UnitTestRecordPropertyTest, MultiplePropertiesFoundWhenAdded) { UnitTestRecordProperty("key_1", "1"); UnitTestRecordProperty("key_2", "2"); ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count()); EXPECT_STREQ("key_1", unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); EXPECT_STREQ("1", unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); EXPECT_STREQ("key_2", unit_test_.ad_hoc_test_result().GetTestProperty(1).key()); EXPECT_STREQ("2", unit_test_.ad_hoc_test_result().GetTestProperty(1).value()); } // Tests TestResult::RecordProperty() overrides values for duplicate keys. TEST_F(UnitTestRecordPropertyTest, OverridesValuesForDuplicateKeys) { UnitTestRecordProperty("key_1", "1"); UnitTestRecordProperty("key_2", "2"); UnitTestRecordProperty("key_1", "12"); UnitTestRecordProperty("key_2", "22"); ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count()); EXPECT_STREQ("key_1", unit_test_.ad_hoc_test_result().GetTestProperty(0).key()); EXPECT_STREQ("12", unit_test_.ad_hoc_test_result().GetTestProperty(0).value()); EXPECT_STREQ("key_2", unit_test_.ad_hoc_test_result().GetTestProperty(1).key()); EXPECT_STREQ("22", unit_test_.ad_hoc_test_result().GetTestProperty(1).value()); } TEST_F(UnitTestRecordPropertyTest, AddFailureInsideTestsWhenUsingTestCaseReservedKeys) { ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( "name"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( "value_param"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( "type_param"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( "status"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( "time"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest( "classname"); } TEST_F(UnitTestRecordPropertyTest, AddRecordWithReservedKeysGeneratesCorrectPropertyList) { EXPECT_NONFATAL_FAILURE( Test::RecordProperty("name", "1"), "'classname', 'name', 'status', 'time', 'type_param', and 'value_param'" " are reserved"); } class UnitTestRecordPropertyTestEnvironment : public Environment { public: virtual void TearDown() { ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( "tests"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( "failures"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( "disabled"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( "errors"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( "name"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( "timestamp"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( "time"); ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase( "random_seed"); } }; // This will test property recording outside of any test or test case. static Environment* record_property_env = AddGlobalTestEnvironment(new UnitTestRecordPropertyTestEnvironment); // This group of tests is for predicate assertions (ASSERT_PRED*, etc) // of various arities. They do not attempt to be exhaustive. Rather, // view them as smoke tests that can be easily reviewed and verified. // A more complete set of tests for predicate assertions can be found // in gtest_pred_impl_unittest.cc. // First, some predicates and predicate-formatters needed by the tests. // Returns true iff the argument is an even number. bool IsEven(int n) { return (n % 2) == 0; } // A functor that returns true iff the argument is an even number. struct IsEvenFunctor { bool operator()(int n) { return IsEven(n); } }; // A predicate-formatter function that asserts the argument is an even // number. AssertionResult AssertIsEven(const char* expr, int n) { if (IsEven(n)) { return AssertionSuccess(); } Message msg; msg << expr << " evaluates to " << n << ", which is not even."; return AssertionFailure(msg); } // A predicate function that returns AssertionResult for use in // EXPECT/ASSERT_TRUE/FALSE. AssertionResult ResultIsEven(int n) { if (IsEven(n)) return AssertionSuccess() << n << " is even"; else return AssertionFailure() << n << " is odd"; } // A predicate function that returns AssertionResult but gives no // explanation why it succeeds. Needed for testing that // EXPECT/ASSERT_FALSE handles such functions correctly. AssertionResult ResultIsEvenNoExplanation(int n) { if (IsEven(n)) return AssertionSuccess(); else return AssertionFailure() << n << " is odd"; } // A predicate-formatter functor that asserts the argument is an even // number. struct AssertIsEvenFunctor { AssertionResult operator()(const char* expr, int n) { return AssertIsEven(expr, n); } }; // Returns true iff the sum of the arguments is an even number. bool SumIsEven2(int n1, int n2) { return IsEven(n1 + n2); } // A functor that returns true iff the sum of the arguments is an even // number. struct SumIsEven3Functor { bool operator()(int n1, int n2, int n3) { return IsEven(n1 + n2 + n3); } }; // A predicate-formatter function that asserts the sum of the // arguments is an even number. AssertionResult AssertSumIsEven4( const char* e1, const char* e2, const char* e3, const char* e4, int n1, int n2, int n3, int n4) { const int sum = n1 + n2 + n3 + n4; if (IsEven(sum)) { return AssertionSuccess(); } Message msg; msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " (" << n1 << " + " << n2 << " + " << n3 << " + " << n4 << ") evaluates to " << sum << ", which is not even."; return AssertionFailure(msg); } // A predicate-formatter functor that asserts the sum of the arguments // is an even number. struct AssertSumIsEven5Functor { AssertionResult operator()( const char* e1, const char* e2, const char* e3, const char* e4, const char* e5, int n1, int n2, int n3, int n4, int n5) { const int sum = n1 + n2 + n3 + n4 + n5; if (IsEven(sum)) { return AssertionSuccess(); } Message msg; msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5 << " (" << n1 << " + " << n2 << " + " << n3 << " + " << n4 << " + " << n5 << ") evaluates to " << sum << ", which is not even."; return AssertionFailure(msg); } }; // Tests unary predicate assertions. // Tests unary predicate assertions that don't use a custom formatter. TEST(Pred1Test, WithoutFormat) { // Success cases. EXPECT_PRED1(IsEvenFunctor(), 2) << "This failure is UNEXPECTED!"; ASSERT_PRED1(IsEven, 4); // Failure cases. EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED1(IsEven, 5) << "This failure is expected."; }, "This failure is expected."); EXPECT_FATAL_FAILURE(ASSERT_PRED1(IsEvenFunctor(), 5), "evaluates to false"); } // Tests unary predicate assertions that use a custom formatter. TEST(Pred1Test, WithFormat) { // Success cases. EXPECT_PRED_FORMAT1(AssertIsEven, 2); ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), 4) << "This failure is UNEXPECTED!"; // Failure cases. const int n = 5; EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT1(AssertIsEvenFunctor(), n), "n evaluates to 5, which is not even."); EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT1(AssertIsEven, 5) << "This failure is expected."; }, "This failure is expected."); } // Tests that unary predicate assertions evaluates their arguments // exactly once. TEST(Pred1Test, SingleEvaluationOnFailure) { // A success case. static int n = 0; EXPECT_PRED1(IsEven, n++); EXPECT_EQ(1, n) << "The argument is not evaluated exactly once."; // A failure case. EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), n++) << "This failure is expected."; }, "This failure is expected."); EXPECT_EQ(2, n) << "The argument is not evaluated exactly once."; } // Tests predicate assertions whose arity is >= 2. // Tests predicate assertions that don't use a custom formatter. TEST(PredTest, WithoutFormat) { // Success cases. ASSERT_PRED2(SumIsEven2, 2, 4) << "This failure is UNEXPECTED!"; EXPECT_PRED3(SumIsEven3Functor(), 4, 6, 8); // Failure cases. const int n1 = 1; const int n2 = 2; EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED2(SumIsEven2, n1, n2) << "This failure is expected."; }, "This failure is expected."); EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED3(SumIsEven3Functor(), 1, 2, 4); }, "evaluates to false"); } // Tests predicate assertions that use a custom formatter. TEST(PredTest, WithFormat) { // Success cases. ASSERT_PRED_FORMAT4(AssertSumIsEven4, 4, 6, 8, 10) << "This failure is UNEXPECTED!"; EXPECT_PRED_FORMAT5(AssertSumIsEven5Functor(), 2, 4, 6, 8, 10); // Failure cases. const int n1 = 1; const int n2 = 2; const int n3 = 4; const int n4 = 6; EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT4(AssertSumIsEven4, n1, n2, n3, n4); }, "evaluates to 13, which is not even."); EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 1, 2, 4, 6, 8) << "This failure is expected."; }, "This failure is expected."); } // Tests that predicate assertions evaluates their arguments // exactly once. TEST(PredTest, SingleEvaluationOnFailure) { // A success case. int n1 = 0; int n2 = 0; EXPECT_PRED2(SumIsEven2, n1++, n2++); EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; // Another success case. n1 = n2 = 0; int n3 = 0; int n4 = 0; int n5 = 0; ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), n1++, n2++, n3++, n4++, n5++) << "This failure is UNEXPECTED!"; EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once."; EXPECT_EQ(1, n5) << "Argument 5 is not evaluated exactly once."; // A failure case. n1 = n2 = n3 = 0; EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED3(SumIsEven3Functor(), ++n1, n2++, n3++) << "This failure is expected."; }, "This failure is expected."); EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; // Another failure case. n1 = n2 = n3 = n4 = 0; EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT4(AssertSumIsEven4, ++n1, n2++, n3++, n4++); }, "evaluates to 1, which is not even."); EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once."; EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once."; EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once."; EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once."; } // Some helper functions for testing using overloaded/template // functions with ASSERT_PREDn and EXPECT_PREDn. bool IsPositive(double x) { return x > 0; } template bool IsNegative(T x) { return x < 0; } template bool GreaterThan(T1 x1, T2 x2) { return x1 > x2; } // Tests that overloaded functions can be used in *_PRED* as long as // their types are explicitly specified. TEST(PredicateAssertionTest, AcceptsOverloadedFunction) { // C++Builder requires C-style casts rather than static_cast. EXPECT_PRED1((bool (*)(int))(IsPositive), 5); // NOLINT ASSERT_PRED1((bool (*)(double))(IsPositive), 6.0); // NOLINT } // Tests that template functions can be used in *_PRED* as long as // their types are explicitly specified. TEST(PredicateAssertionTest, AcceptsTemplateFunction) { EXPECT_PRED1(IsNegative, -5); // Makes sure that we can handle templates with more than one // parameter. ASSERT_PRED2((GreaterThan), 5, 0); } // Some helper functions for testing using overloaded/template // functions with ASSERT_PRED_FORMATn and EXPECT_PRED_FORMATn. AssertionResult IsPositiveFormat(const char* /* expr */, int n) { return n > 0 ? AssertionSuccess() : AssertionFailure(Message() << "Failure"); } AssertionResult IsPositiveFormat(const char* /* expr */, double x) { return x > 0 ? AssertionSuccess() : AssertionFailure(Message() << "Failure"); } template AssertionResult IsNegativeFormat(const char* /* expr */, T x) { return x < 0 ? AssertionSuccess() : AssertionFailure(Message() << "Failure"); } template AssertionResult EqualsFormat(const char* /* expr1 */, const char* /* expr2 */, const T1& x1, const T2& x2) { return x1 == x2 ? AssertionSuccess() : AssertionFailure(Message() << "Failure"); } // Tests that overloaded functions can be used in *_PRED_FORMAT* // without explicitly specifying their types. TEST(PredicateFormatAssertionTest, AcceptsOverloadedFunction) { EXPECT_PRED_FORMAT1(IsPositiveFormat, 5); ASSERT_PRED_FORMAT1(IsPositiveFormat, 6.0); } // Tests that template functions can be used in *_PRED_FORMAT* without // explicitly specifying their types. TEST(PredicateFormatAssertionTest, AcceptsTemplateFunction) { EXPECT_PRED_FORMAT1(IsNegativeFormat, -5); ASSERT_PRED_FORMAT2(EqualsFormat, 3, 3); } // Tests string assertions. // Tests ASSERT_STREQ with non-NULL arguments. TEST(StringAssertionTest, ASSERT_STREQ) { const char * const p1 = "good"; ASSERT_STREQ(p1, p1); // Let p2 have the same content as p1, but be at a different address. const char p2[] = "good"; ASSERT_STREQ(p1, p2); EXPECT_FATAL_FAILURE(ASSERT_STREQ("bad", "good"), "Expected: \"bad\""); } // Tests ASSERT_STREQ with NULL arguments. TEST(StringAssertionTest, ASSERT_STREQ_Null) { ASSERT_STREQ(static_cast(NULL), NULL); EXPECT_FATAL_FAILURE(ASSERT_STREQ(NULL, "non-null"), "non-null"); } // Tests ASSERT_STREQ with NULL arguments. TEST(StringAssertionTest, ASSERT_STREQ_Null2) { EXPECT_FATAL_FAILURE(ASSERT_STREQ("non-null", NULL), "non-null"); } // Tests ASSERT_STRNE. TEST(StringAssertionTest, ASSERT_STRNE) { ASSERT_STRNE("hi", "Hi"); ASSERT_STRNE("Hi", NULL); ASSERT_STRNE(NULL, "Hi"); ASSERT_STRNE("", NULL); ASSERT_STRNE(NULL, ""); ASSERT_STRNE("", "Hi"); ASSERT_STRNE("Hi", ""); EXPECT_FATAL_FAILURE(ASSERT_STRNE("Hi", "Hi"), "\"Hi\" vs \"Hi\""); } // Tests ASSERT_STRCASEEQ. TEST(StringAssertionTest, ASSERT_STRCASEEQ) { ASSERT_STRCASEEQ("hi", "Hi"); ASSERT_STRCASEEQ(static_cast(NULL), NULL); ASSERT_STRCASEEQ("", ""); EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("Hi", "hi2"), "(ignoring case)"); } // Tests ASSERT_STRCASENE. TEST(StringAssertionTest, ASSERT_STRCASENE) { ASSERT_STRCASENE("hi1", "Hi2"); ASSERT_STRCASENE("Hi", NULL); ASSERT_STRCASENE(NULL, "Hi"); ASSERT_STRCASENE("", NULL); ASSERT_STRCASENE(NULL, ""); ASSERT_STRCASENE("", "Hi"); ASSERT_STRCASENE("Hi", ""); EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("Hi", "hi"), "(ignoring case)"); } // Tests *_STREQ on wide strings. TEST(StringAssertionTest, STREQ_Wide) { // NULL strings. ASSERT_STREQ(static_cast(NULL), NULL); // Empty strings. ASSERT_STREQ(L"", L""); // Non-null vs NULL. EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"non-null", NULL), "non-null"); // Equal strings. EXPECT_STREQ(L"Hi", L"Hi"); // Unequal strings. EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc", L"Abc"), "Abc"); // Strings containing wide characters. EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc\x8119", L"abc\x8120"), "abc"); // The streaming variation. EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_STREQ(L"abc\x8119", L"abc\x8121") << "Expected failure"; }, "Expected failure"); } // Tests *_STRNE on wide strings. TEST(StringAssertionTest, STRNE_Wide) { // NULL strings. EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_STRNE(static_cast(NULL), NULL); }, ""); // Empty strings. EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"", L""), "L\"\""); // Non-null vs NULL. ASSERT_STRNE(L"non-null", NULL); // Equal strings. EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"Hi", L"Hi"), "L\"Hi\""); // Unequal strings. EXPECT_STRNE(L"abc", L"Abc"); // Strings containing wide characters. EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"abc\x8119", L"abc\x8119"), "abc"); // The streaming variation. ASSERT_STRNE(L"abc\x8119", L"abc\x8120") << "This shouldn't happen"; } // Tests for ::testing::IsSubstring(). // Tests that IsSubstring() returns the correct result when the input // argument type is const char*. TEST(IsSubstringTest, ReturnsCorrectResultForCString) { EXPECT_FALSE(IsSubstring("", "", NULL, "a")); EXPECT_FALSE(IsSubstring("", "", "b", NULL)); EXPECT_FALSE(IsSubstring("", "", "needle", "haystack")); EXPECT_TRUE(IsSubstring("", "", static_cast(NULL), NULL)); EXPECT_TRUE(IsSubstring("", "", "needle", "two needles")); } // Tests that IsSubstring() returns the correct result when the input // argument type is const wchar_t*. TEST(IsSubstringTest, ReturnsCorrectResultForWideCString) { EXPECT_FALSE(IsSubstring("", "", kNull, L"a")); EXPECT_FALSE(IsSubstring("", "", L"b", kNull)); EXPECT_FALSE(IsSubstring("", "", L"needle", L"haystack")); EXPECT_TRUE(IsSubstring("", "", static_cast(NULL), NULL)); EXPECT_TRUE(IsSubstring("", "", L"needle", L"two needles")); } // Tests that IsSubstring() generates the correct message when the input // argument type is const char*. TEST(IsSubstringTest, GeneratesCorrectMessageForCString) { EXPECT_STREQ("Value of: needle_expr\n" " Actual: \"needle\"\n" "Expected: a substring of haystack_expr\n" "Which is: \"haystack\"", IsSubstring("needle_expr", "haystack_expr", "needle", "haystack").failure_message()); } // Tests that IsSubstring returns the correct result when the input // argument type is ::std::string. TEST(IsSubstringTest, ReturnsCorrectResultsForStdString) { EXPECT_TRUE(IsSubstring("", "", std::string("hello"), "ahellob")); EXPECT_FALSE(IsSubstring("", "", "hello", std::string("world"))); } #if GTEST_HAS_STD_WSTRING // Tests that IsSubstring returns the correct result when the input // argument type is ::std::wstring. TEST(IsSubstringTest, ReturnsCorrectResultForStdWstring) { EXPECT_TRUE(IsSubstring("", "", ::std::wstring(L"needle"), L"two needles")); EXPECT_FALSE(IsSubstring("", "", L"needle", ::std::wstring(L"haystack"))); } // Tests that IsSubstring() generates the correct message when the input // argument type is ::std::wstring. TEST(IsSubstringTest, GeneratesCorrectMessageForWstring) { EXPECT_STREQ("Value of: needle_expr\n" " Actual: L\"needle\"\n" "Expected: a substring of haystack_expr\n" "Which is: L\"haystack\"", IsSubstring( "needle_expr", "haystack_expr", ::std::wstring(L"needle"), L"haystack").failure_message()); } #endif // GTEST_HAS_STD_WSTRING // Tests for ::testing::IsNotSubstring(). // Tests that IsNotSubstring() returns the correct result when the input // argument type is const char*. TEST(IsNotSubstringTest, ReturnsCorrectResultForCString) { EXPECT_TRUE(IsNotSubstring("", "", "needle", "haystack")); EXPECT_FALSE(IsNotSubstring("", "", "needle", "two needles")); } // Tests that IsNotSubstring() returns the correct result when the input // argument type is const wchar_t*. TEST(IsNotSubstringTest, ReturnsCorrectResultForWideCString) { EXPECT_TRUE(IsNotSubstring("", "", L"needle", L"haystack")); EXPECT_FALSE(IsNotSubstring("", "", L"needle", L"two needles")); } // Tests that IsNotSubstring() generates the correct message when the input // argument type is const wchar_t*. TEST(IsNotSubstringTest, GeneratesCorrectMessageForWideCString) { EXPECT_STREQ("Value of: needle_expr\n" " Actual: L\"needle\"\n" "Expected: not a substring of haystack_expr\n" "Which is: L\"two needles\"", IsNotSubstring( "needle_expr", "haystack_expr", L"needle", L"two needles").failure_message()); } // Tests that IsNotSubstring returns the correct result when the input // argument type is ::std::string. TEST(IsNotSubstringTest, ReturnsCorrectResultsForStdString) { EXPECT_FALSE(IsNotSubstring("", "", std::string("hello"), "ahellob")); EXPECT_TRUE(IsNotSubstring("", "", "hello", std::string("world"))); } // Tests that IsNotSubstring() generates the correct message when the input // argument type is ::std::string. TEST(IsNotSubstringTest, GeneratesCorrectMessageForStdString) { EXPECT_STREQ("Value of: needle_expr\n" " Actual: \"needle\"\n" "Expected: not a substring of haystack_expr\n" "Which is: \"two needles\"", IsNotSubstring( "needle_expr", "haystack_expr", ::std::string("needle"), "two needles").failure_message()); } #if GTEST_HAS_STD_WSTRING // Tests that IsNotSubstring returns the correct result when the input // argument type is ::std::wstring. TEST(IsNotSubstringTest, ReturnsCorrectResultForStdWstring) { EXPECT_FALSE( IsNotSubstring("", "", ::std::wstring(L"needle"), L"two needles")); EXPECT_TRUE(IsNotSubstring("", "", L"needle", ::std::wstring(L"haystack"))); } #endif // GTEST_HAS_STD_WSTRING // Tests floating-point assertions. template class FloatingPointTest : public Test { protected: // Pre-calculated numbers to be used by the tests. struct TestValues { RawType close_to_positive_zero; RawType close_to_negative_zero; RawType further_from_negative_zero; RawType close_to_one; RawType further_from_one; RawType infinity; RawType close_to_infinity; RawType further_from_infinity; RawType nan1; RawType nan2; }; typedef typename testing::internal::FloatingPoint Floating; typedef typename Floating::Bits Bits; virtual void SetUp() { const size_t max_ulps = Floating::kMaxUlps; // The bits that represent 0.0. const Bits zero_bits = Floating(0).bits(); // Makes some numbers close to 0.0. values_.close_to_positive_zero = Floating::ReinterpretBits( zero_bits + max_ulps/2); values_.close_to_negative_zero = -Floating::ReinterpretBits( zero_bits + max_ulps - max_ulps/2); values_.further_from_negative_zero = -Floating::ReinterpretBits( zero_bits + max_ulps + 1 - max_ulps/2); // The bits that represent 1.0. const Bits one_bits = Floating(1).bits(); // Makes some numbers close to 1.0. values_.close_to_one = Floating::ReinterpretBits(one_bits + max_ulps); values_.further_from_one = Floating::ReinterpretBits( one_bits + max_ulps + 1); // +infinity. values_.infinity = Floating::Infinity(); // The bits that represent +infinity. const Bits infinity_bits = Floating(values_.infinity).bits(); // Makes some numbers close to infinity. values_.close_to_infinity = Floating::ReinterpretBits( infinity_bits - max_ulps); values_.further_from_infinity = Floating::ReinterpretBits( infinity_bits - max_ulps - 1); // Makes some NAN's. Sets the most significant bit of the fraction so that // our NaN's are quiet; trying to process a signaling NaN would raise an // exception if our environment enables floating point exceptions. values_.nan1 = Floating::ReinterpretBits(Floating::kExponentBitMask | (static_cast(1) << (Floating::kFractionBitCount - 1)) | 1); values_.nan2 = Floating::ReinterpretBits(Floating::kExponentBitMask | (static_cast(1) << (Floating::kFractionBitCount - 1)) | 200); } void TestSize() { EXPECT_EQ(sizeof(RawType), sizeof(Bits)); } static TestValues values_; }; template typename FloatingPointTest::TestValues FloatingPointTest::values_; // Instantiates FloatingPointTest for testing *_FLOAT_EQ. typedef FloatingPointTest FloatTest; // Tests that the size of Float::Bits matches the size of float. TEST_F(FloatTest, Size) { TestSize(); } // Tests comparing with +0 and -0. TEST_F(FloatTest, Zeros) { EXPECT_FLOAT_EQ(0.0, -0.0); EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(-0.0, 1.0), "1.0"); EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.5), "1.5"); } // Tests comparing numbers close to 0. // // This ensures that *_FLOAT_EQ handles the sign correctly and no // overflow occurs when comparing numbers whose absolute value is very // small. TEST_F(FloatTest, AlmostZeros) { // In C++Builder, names within local classes (such as used by // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the // scoping class. Use a static local alias as a workaround. // We use the assignment syntax since some compilers, like Sun Studio, // don't allow initializing references using construction syntax // (parentheses). static const FloatTest::TestValues& v = this->values_; EXPECT_FLOAT_EQ(0.0, v.close_to_positive_zero); EXPECT_FLOAT_EQ(-0.0, v.close_to_negative_zero); EXPECT_FLOAT_EQ(v.close_to_positive_zero, v.close_to_negative_zero); EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_FLOAT_EQ(v.close_to_positive_zero, v.further_from_negative_zero); }, "v.further_from_negative_zero"); } // Tests comparing numbers close to each other. TEST_F(FloatTest, SmallDiff) { EXPECT_FLOAT_EQ(1.0, values_.close_to_one); EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, values_.further_from_one), "values_.further_from_one"); } // Tests comparing numbers far apart. TEST_F(FloatTest, LargeDiff) { EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(2.5, 3.0), "3.0"); } // Tests comparing with infinity. // // This ensures that no overflow occurs when comparing numbers whose // absolute value is very large. TEST_F(FloatTest, Infinity) { EXPECT_FLOAT_EQ(values_.infinity, values_.close_to_infinity); EXPECT_FLOAT_EQ(-values_.infinity, -values_.close_to_infinity); #if !GTEST_OS_SYMBIAN // Nokia's STLport crashes if we try to output infinity or NaN. EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, -values_.infinity), "-values_.infinity"); // This is interesting as the representations of infinity and nan1 // are only 1 DLP apart. EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, values_.nan1), "values_.nan1"); #endif // !GTEST_OS_SYMBIAN } // Tests that comparing with NAN always returns false. TEST_F(FloatTest, NaN) { #if !GTEST_OS_SYMBIAN // Nokia's STLport crashes if we try to output infinity or NaN. // In C++Builder, names within local classes (such as used by // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the // scoping class. Use a static local alias as a workaround. // We use the assignment syntax since some compilers, like Sun Studio, // don't allow initializing references using construction syntax // (parentheses). static const FloatTest::TestValues& v = this->values_; EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan1), "v.nan1"); EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan2), "v.nan2"); EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, v.nan1), "v.nan1"); EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(v.nan1, v.infinity), "v.infinity"); #endif // !GTEST_OS_SYMBIAN } // Tests that *_FLOAT_EQ are reflexive. TEST_F(FloatTest, Reflexive) { EXPECT_FLOAT_EQ(0.0, 0.0); EXPECT_FLOAT_EQ(1.0, 1.0); ASSERT_FLOAT_EQ(values_.infinity, values_.infinity); } // Tests that *_FLOAT_EQ are commutative. TEST_F(FloatTest, Commutative) { // We already tested EXPECT_FLOAT_EQ(1.0, values_.close_to_one). EXPECT_FLOAT_EQ(values_.close_to_one, 1.0); // We already tested EXPECT_FLOAT_EQ(1.0, values_.further_from_one). EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.further_from_one, 1.0), "1.0"); } // Tests EXPECT_NEAR. TEST_F(FloatTest, EXPECT_NEAR) { EXPECT_NEAR(-1.0f, -1.1f, 0.2f); EXPECT_NEAR(2.0f, 3.0f, 1.0f); EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0f,1.5f, 0.25f), // NOLINT "The difference between 1.0f and 1.5f is 0.5, " "which exceeds 0.25f"); // To work around a bug in gcc 2.95.0, there is intentionally no // space after the first comma in the previous line. } // Tests ASSERT_NEAR. TEST_F(FloatTest, ASSERT_NEAR) { ASSERT_NEAR(-1.0f, -1.1f, 0.2f); ASSERT_NEAR(2.0f, 3.0f, 1.0f); EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0f,1.5f, 0.25f), // NOLINT "The difference between 1.0f and 1.5f is 0.5, " "which exceeds 0.25f"); // To work around a bug in gcc 2.95.0, there is intentionally no // space after the first comma in the previous line. } // Tests the cases where FloatLE() should succeed. TEST_F(FloatTest, FloatLESucceeds) { EXPECT_PRED_FORMAT2(FloatLE, 1.0f, 2.0f); // When val1 < val2, ASSERT_PRED_FORMAT2(FloatLE, 1.0f, 1.0f); // val1 == val2, // or when val1 is greater than, but almost equals to, val2. EXPECT_PRED_FORMAT2(FloatLE, values_.close_to_positive_zero, 0.0f); } // Tests the cases where FloatLE() should fail. TEST_F(FloatTest, FloatLEFails) { // When val1 is greater than val2 by a large margin, EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(FloatLE, 2.0f, 1.0f), "(2.0f) <= (1.0f)"); // or by a small yet non-negligible margin, EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT2(FloatLE, values_.further_from_one, 1.0f); }, "(values_.further_from_one) <= (1.0f)"); #if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) // Nokia's STLport crashes if we try to output infinity or NaN. // C++Builder gives bad results for ordered comparisons involving NaNs // due to compiler bugs. EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT2(FloatLE, values_.nan1, values_.infinity); }, "(values_.nan1) <= (values_.infinity)"); EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT2(FloatLE, -values_.infinity, values_.nan1); }, "(-values_.infinity) <= (values_.nan1)"); EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT2(FloatLE, values_.nan1, values_.nan1); }, "(values_.nan1) <= (values_.nan1)"); #endif // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) } // Instantiates FloatingPointTest for testing *_DOUBLE_EQ. typedef FloatingPointTest DoubleTest; // Tests that the size of Double::Bits matches the size of double. TEST_F(DoubleTest, Size) { TestSize(); } // Tests comparing with +0 and -0. TEST_F(DoubleTest, Zeros) { EXPECT_DOUBLE_EQ(0.0, -0.0); EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(-0.0, 1.0), "1.0"); EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(0.0, 1.0), "1.0"); } // Tests comparing numbers close to 0. // // This ensures that *_DOUBLE_EQ handles the sign correctly and no // overflow occurs when comparing numbers whose absolute value is very // small. TEST_F(DoubleTest, AlmostZeros) { // In C++Builder, names within local classes (such as used by // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the // scoping class. Use a static local alias as a workaround. // We use the assignment syntax since some compilers, like Sun Studio, // don't allow initializing references using construction syntax // (parentheses). static const DoubleTest::TestValues& v = this->values_; EXPECT_DOUBLE_EQ(0.0, v.close_to_positive_zero); EXPECT_DOUBLE_EQ(-0.0, v.close_to_negative_zero); EXPECT_DOUBLE_EQ(v.close_to_positive_zero, v.close_to_negative_zero); EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_DOUBLE_EQ(v.close_to_positive_zero, v.further_from_negative_zero); }, "v.further_from_negative_zero"); } // Tests comparing numbers close to each other. TEST_F(DoubleTest, SmallDiff) { EXPECT_DOUBLE_EQ(1.0, values_.close_to_one); EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, values_.further_from_one), "values_.further_from_one"); } // Tests comparing numbers far apart. TEST_F(DoubleTest, LargeDiff) { EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(2.0, 3.0), "3.0"); } // Tests comparing with infinity. // // This ensures that no overflow occurs when comparing numbers whose // absolute value is very large. TEST_F(DoubleTest, Infinity) { EXPECT_DOUBLE_EQ(values_.infinity, values_.close_to_infinity); EXPECT_DOUBLE_EQ(-values_.infinity, -values_.close_to_infinity); #if !GTEST_OS_SYMBIAN // Nokia's STLport crashes if we try to output infinity or NaN. EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, -values_.infinity), "-values_.infinity"); // This is interesting as the representations of infinity_ and nan1_ // are only 1 DLP apart. EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, values_.nan1), "values_.nan1"); #endif // !GTEST_OS_SYMBIAN } // Tests that comparing with NAN always returns false. TEST_F(DoubleTest, NaN) { #if !GTEST_OS_SYMBIAN // In C++Builder, names within local classes (such as used by // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the // scoping class. Use a static local alias as a workaround. // We use the assignment syntax since some compilers, like Sun Studio, // don't allow initializing references using construction syntax // (parentheses). static const DoubleTest::TestValues& v = this->values_; // Nokia's STLport crashes if we try to output infinity or NaN. EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan1), "v.nan1"); EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan2), "v.nan2"); EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, v.nan1), "v.nan1"); EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(v.nan1, v.infinity), "v.infinity"); #endif // !GTEST_OS_SYMBIAN } // Tests that *_DOUBLE_EQ are reflexive. TEST_F(DoubleTest, Reflexive) { EXPECT_DOUBLE_EQ(0.0, 0.0); EXPECT_DOUBLE_EQ(1.0, 1.0); #if !GTEST_OS_SYMBIAN // Nokia's STLport crashes if we try to output infinity or NaN. ASSERT_DOUBLE_EQ(values_.infinity, values_.infinity); #endif // !GTEST_OS_SYMBIAN } // Tests that *_DOUBLE_EQ are commutative. TEST_F(DoubleTest, Commutative) { // We already tested EXPECT_DOUBLE_EQ(1.0, values_.close_to_one). EXPECT_DOUBLE_EQ(values_.close_to_one, 1.0); // We already tested EXPECT_DOUBLE_EQ(1.0, values_.further_from_one). EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.further_from_one, 1.0), "1.0"); } // Tests EXPECT_NEAR. TEST_F(DoubleTest, EXPECT_NEAR) { EXPECT_NEAR(-1.0, -1.1, 0.2); EXPECT_NEAR(2.0, 3.0, 1.0); EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0, 1.5, 0.25), // NOLINT "The difference between 1.0 and 1.5 is 0.5, " "which exceeds 0.25"); // To work around a bug in gcc 2.95.0, there is intentionally no // space after the first comma in the previous statement. } // Tests ASSERT_NEAR. TEST_F(DoubleTest, ASSERT_NEAR) { ASSERT_NEAR(-1.0, -1.1, 0.2); ASSERT_NEAR(2.0, 3.0, 1.0); EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0, 1.5, 0.25), // NOLINT "The difference between 1.0 and 1.5 is 0.5, " "which exceeds 0.25"); // To work around a bug in gcc 2.95.0, there is intentionally no // space after the first comma in the previous statement. } // Tests the cases where DoubleLE() should succeed. TEST_F(DoubleTest, DoubleLESucceeds) { EXPECT_PRED_FORMAT2(DoubleLE, 1.0, 2.0); // When val1 < val2, ASSERT_PRED_FORMAT2(DoubleLE, 1.0, 1.0); // val1 == val2, // or when val1 is greater than, but almost equals to, val2. EXPECT_PRED_FORMAT2(DoubleLE, values_.close_to_positive_zero, 0.0); } // Tests the cases where DoubleLE() should fail. TEST_F(DoubleTest, DoubleLEFails) { // When val1 is greater than val2 by a large margin, EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(DoubleLE, 2.0, 1.0), "(2.0) <= (1.0)"); // or by a small yet non-negligible margin, EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT2(DoubleLE, values_.further_from_one, 1.0); }, "(values_.further_from_one) <= (1.0)"); #if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) // Nokia's STLport crashes if we try to output infinity or NaN. // C++Builder gives bad results for ordered comparisons involving NaNs // due to compiler bugs. EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.infinity); }, "(values_.nan1) <= (values_.infinity)"); EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_PRED_FORMAT2(DoubleLE, -values_.infinity, values_.nan1); }, " (-values_.infinity) <= (values_.nan1)"); EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.nan1); }, "(values_.nan1) <= (values_.nan1)"); #endif // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__) } // Verifies that a test or test case whose name starts with DISABLED_ is // not run. // A test whose name starts with DISABLED_. // Should not run. TEST(DisabledTest, DISABLED_TestShouldNotRun) { FAIL() << "Unexpected failure: Disabled test should not be run."; } // A test whose name does not start with DISABLED_. // Should run. TEST(DisabledTest, NotDISABLED_TestShouldRun) { EXPECT_EQ(1, 1); } // A test case whose name starts with DISABLED_. // Should not run. TEST(DISABLED_TestCase, TestShouldNotRun) { FAIL() << "Unexpected failure: Test in disabled test case should not be run."; } // A test case and test whose names start with DISABLED_. // Should not run. TEST(DISABLED_TestCase, DISABLED_TestShouldNotRun) { FAIL() << "Unexpected failure: Test in disabled test case should not be run."; } // Check that when all tests in a test case are disabled, SetupTestCase() and // TearDownTestCase() are not called. class DisabledTestsTest : public Test { protected: static void SetUpTestCase() { FAIL() << "Unexpected failure: All tests disabled in test case. " "SetupTestCase() should not be called."; } static void TearDownTestCase() { FAIL() << "Unexpected failure: All tests disabled in test case. " "TearDownTestCase() should not be called."; } }; TEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_1) { FAIL() << "Unexpected failure: Disabled test should not be run."; } TEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_2) { FAIL() << "Unexpected failure: Disabled test should not be run."; } // Tests that disabled typed tests aren't run. #if GTEST_HAS_TYPED_TEST template class TypedTest : public Test { }; typedef testing::Types NumericTypes; TYPED_TEST_CASE(TypedTest, NumericTypes); TYPED_TEST(TypedTest, DISABLED_ShouldNotRun) { FAIL() << "Unexpected failure: Disabled typed test should not run."; } template class DISABLED_TypedTest : public Test { }; TYPED_TEST_CASE(DISABLED_TypedTest, NumericTypes); TYPED_TEST(DISABLED_TypedTest, ShouldNotRun) { FAIL() << "Unexpected failure: Disabled typed test should not run."; } #endif // GTEST_HAS_TYPED_TEST // Tests that disabled type-parameterized tests aren't run. #if GTEST_HAS_TYPED_TEST_P template class TypedTestP : public Test { }; TYPED_TEST_CASE_P(TypedTestP); TYPED_TEST_P(TypedTestP, DISABLED_ShouldNotRun) { FAIL() << "Unexpected failure: " << "Disabled type-parameterized test should not run."; } REGISTER_TYPED_TEST_CASE_P(TypedTestP, DISABLED_ShouldNotRun); INSTANTIATE_TYPED_TEST_CASE_P(My, TypedTestP, NumericTypes); template class DISABLED_TypedTestP : public Test { }; TYPED_TEST_CASE_P(DISABLED_TypedTestP); TYPED_TEST_P(DISABLED_TypedTestP, ShouldNotRun) { FAIL() << "Unexpected failure: " << "Disabled type-parameterized test should not run."; } REGISTER_TYPED_TEST_CASE_P(DISABLED_TypedTestP, ShouldNotRun); INSTANTIATE_TYPED_TEST_CASE_P(My, DISABLED_TypedTestP, NumericTypes); #endif // GTEST_HAS_TYPED_TEST_P // Tests that assertion macros evaluate their arguments exactly once. class SingleEvaluationTest : public Test { public: // Must be public and not protected due to a bug in g++ 3.4.2. // This helper function is needed by the FailedASSERT_STREQ test // below. It's public to work around C++Builder's bug with scoping local // classes. static void CompareAndIncrementCharPtrs() { ASSERT_STREQ(p1_++, p2_++); } // This helper function is needed by the FailedASSERT_NE test below. It's // public to work around C++Builder's bug with scoping local classes. static void CompareAndIncrementInts() { ASSERT_NE(a_++, b_++); } protected: SingleEvaluationTest() { p1_ = s1_; p2_ = s2_; a_ = 0; b_ = 0; } static const char* const s1_; static const char* const s2_; static const char* p1_; static const char* p2_; static int a_; static int b_; }; const char* const SingleEvaluationTest::s1_ = "01234"; const char* const SingleEvaluationTest::s2_ = "abcde"; const char* SingleEvaluationTest::p1_; const char* SingleEvaluationTest::p2_; int SingleEvaluationTest::a_; int SingleEvaluationTest::b_; // Tests that when ASSERT_STREQ fails, it evaluates its arguments // exactly once. TEST_F(SingleEvaluationTest, FailedASSERT_STREQ) { EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementCharPtrs(), "p2_++"); EXPECT_EQ(s1_ + 1, p1_); EXPECT_EQ(s2_ + 1, p2_); } // Tests that string assertion arguments are evaluated exactly once. TEST_F(SingleEvaluationTest, ASSERT_STR) { // successful EXPECT_STRNE EXPECT_STRNE(p1_++, p2_++); EXPECT_EQ(s1_ + 1, p1_); EXPECT_EQ(s2_ + 1, p2_); // failed EXPECT_STRCASEEQ EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ(p1_++, p2_++), "ignoring case"); EXPECT_EQ(s1_ + 2, p1_); EXPECT_EQ(s2_ + 2, p2_); } // Tests that when ASSERT_NE fails, it evaluates its arguments exactly // once. TEST_F(SingleEvaluationTest, FailedASSERT_NE) { EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementInts(), "(a_++) != (b_++)"); EXPECT_EQ(1, a_); EXPECT_EQ(1, b_); } // Tests that assertion arguments are evaluated exactly once. TEST_F(SingleEvaluationTest, OtherCases) { // successful EXPECT_TRUE EXPECT_TRUE(0 == a_++); // NOLINT EXPECT_EQ(1, a_); // failed EXPECT_TRUE EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(-1 == a_++), "-1 == a_++"); EXPECT_EQ(2, a_); // successful EXPECT_GT EXPECT_GT(a_++, b_++); EXPECT_EQ(3, a_); EXPECT_EQ(1, b_); // failed EXPECT_LT EXPECT_NONFATAL_FAILURE(EXPECT_LT(a_++, b_++), "(a_++) < (b_++)"); EXPECT_EQ(4, a_); EXPECT_EQ(2, b_); // successful ASSERT_TRUE ASSERT_TRUE(0 < a_++); // NOLINT EXPECT_EQ(5, a_); // successful ASSERT_GT ASSERT_GT(a_++, b_++); EXPECT_EQ(6, a_); EXPECT_EQ(3, b_); } #if GTEST_HAS_EXCEPTIONS void ThrowAnInteger() { throw 1; } // Tests that assertion arguments are evaluated exactly once. TEST_F(SingleEvaluationTest, ExceptionTests) { // successful EXPECT_THROW EXPECT_THROW({ // NOLINT a_++; ThrowAnInteger(); }, int); EXPECT_EQ(1, a_); // failed EXPECT_THROW, throws different EXPECT_NONFATAL_FAILURE(EXPECT_THROW({ // NOLINT a_++; ThrowAnInteger(); }, bool), "throws a different type"); EXPECT_EQ(2, a_); // failed EXPECT_THROW, throws nothing EXPECT_NONFATAL_FAILURE(EXPECT_THROW(a_++, bool), "throws nothing"); EXPECT_EQ(3, a_); // successful EXPECT_NO_THROW EXPECT_NO_THROW(a_++); EXPECT_EQ(4, a_); // failed EXPECT_NO_THROW EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW({ // NOLINT a_++; ThrowAnInteger(); }), "it throws"); EXPECT_EQ(5, a_); // successful EXPECT_ANY_THROW EXPECT_ANY_THROW({ // NOLINT a_++; ThrowAnInteger(); }); EXPECT_EQ(6, a_); // failed EXPECT_ANY_THROW EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(a_++), "it doesn't"); EXPECT_EQ(7, a_); } #endif // GTEST_HAS_EXCEPTIONS // Tests {ASSERT|EXPECT}_NO_FATAL_FAILURE. class NoFatalFailureTest : public Test { protected: void Succeeds() {} void FailsNonFatal() { ADD_FAILURE() << "some non-fatal failure"; } void Fails() { FAIL() << "some fatal failure"; } void DoAssertNoFatalFailureOnFails() { ASSERT_NO_FATAL_FAILURE(Fails()); ADD_FAILURE() << "shold not reach here."; } void DoExpectNoFatalFailureOnFails() { EXPECT_NO_FATAL_FAILURE(Fails()); ADD_FAILURE() << "other failure"; } }; TEST_F(NoFatalFailureTest, NoFailure) { EXPECT_NO_FATAL_FAILURE(Succeeds()); ASSERT_NO_FATAL_FAILURE(Succeeds()); } TEST_F(NoFatalFailureTest, NonFatalIsNoFailure) { EXPECT_NONFATAL_FAILURE( EXPECT_NO_FATAL_FAILURE(FailsNonFatal()), "some non-fatal failure"); EXPECT_NONFATAL_FAILURE( ASSERT_NO_FATAL_FAILURE(FailsNonFatal()), "some non-fatal failure"); } TEST_F(NoFatalFailureTest, AssertNoFatalFailureOnFatalFailure) { TestPartResultArray gtest_failures; { ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); DoAssertNoFatalFailureOnFails(); } ASSERT_EQ(2, gtest_failures.size()); EXPECT_EQ(TestPartResult::kFatalFailure, gtest_failures.GetTestPartResult(0).type()); EXPECT_EQ(TestPartResult::kFatalFailure, gtest_failures.GetTestPartResult(1).type()); EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure", gtest_failures.GetTestPartResult(0).message()); EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does", gtest_failures.GetTestPartResult(1).message()); } TEST_F(NoFatalFailureTest, ExpectNoFatalFailureOnFatalFailure) { TestPartResultArray gtest_failures; { ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); DoExpectNoFatalFailureOnFails(); } ASSERT_EQ(3, gtest_failures.size()); EXPECT_EQ(TestPartResult::kFatalFailure, gtest_failures.GetTestPartResult(0).type()); EXPECT_EQ(TestPartResult::kNonFatalFailure, gtest_failures.GetTestPartResult(1).type()); EXPECT_EQ(TestPartResult::kNonFatalFailure, gtest_failures.GetTestPartResult(2).type()); EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure", gtest_failures.GetTestPartResult(0).message()); EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does", gtest_failures.GetTestPartResult(1).message()); EXPECT_PRED_FORMAT2(testing::IsSubstring, "other failure", gtest_failures.GetTestPartResult(2).message()); } TEST_F(NoFatalFailureTest, MessageIsStreamable) { TestPartResultArray gtest_failures; { ScopedFakeTestPartResultReporter gtest_reporter(>est_failures); EXPECT_NO_FATAL_FAILURE(FAIL() << "foo") << "my message"; } ASSERT_EQ(2, gtest_failures.size()); EXPECT_EQ(TestPartResult::kNonFatalFailure, gtest_failures.GetTestPartResult(0).type()); EXPECT_EQ(TestPartResult::kNonFatalFailure, gtest_failures.GetTestPartResult(1).type()); EXPECT_PRED_FORMAT2(testing::IsSubstring, "foo", gtest_failures.GetTestPartResult(0).message()); EXPECT_PRED_FORMAT2(testing::IsSubstring, "my message", gtest_failures.GetTestPartResult(1).message()); } // Tests non-string assertions. // Tests EqFailure(), used for implementing *EQ* assertions. TEST(AssertionTest, EqFailure) { const std::string foo_val("5"), bar_val("6"); const std::string msg1( EqFailure("foo", "bar", foo_val, bar_val, false) .failure_message()); EXPECT_STREQ( "Value of: bar\n" " Actual: 6\n" "Expected: foo\n" "Which is: 5", msg1.c_str()); const std::string msg2( EqFailure("foo", "6", foo_val, bar_val, false) .failure_message()); EXPECT_STREQ( "Value of: 6\n" "Expected: foo\n" "Which is: 5", msg2.c_str()); const std::string msg3( EqFailure("5", "bar", foo_val, bar_val, false) .failure_message()); EXPECT_STREQ( "Value of: bar\n" " Actual: 6\n" "Expected: 5", msg3.c_str()); const std::string msg4( EqFailure("5", "6", foo_val, bar_val, false).failure_message()); EXPECT_STREQ( "Value of: 6\n" "Expected: 5", msg4.c_str()); const std::string msg5( EqFailure("foo", "bar", std::string("\"x\""), std::string("\"y\""), true).failure_message()); EXPECT_STREQ( "Value of: bar\n" " Actual: \"y\"\n" "Expected: foo (ignoring case)\n" "Which is: \"x\"", msg5.c_str()); } // Tests AppendUserMessage(), used for implementing the *EQ* macros. TEST(AssertionTest, AppendUserMessage) { const std::string foo("foo"); Message msg; EXPECT_STREQ("foo", AppendUserMessage(foo, msg).c_str()); msg << "bar"; EXPECT_STREQ("foo\nbar", AppendUserMessage(foo, msg).c_str()); } #ifdef __BORLANDC__ // Silences warnings: "Condition is always true", "Unreachable code" # pragma option push -w-ccc -w-rch #endif // Tests ASSERT_TRUE. TEST(AssertionTest, ASSERT_TRUE) { ASSERT_TRUE(2 > 1); // NOLINT EXPECT_FATAL_FAILURE(ASSERT_TRUE(2 < 1), "2 < 1"); } // Tests ASSERT_TRUE(predicate) for predicates returning AssertionResult. TEST(AssertionTest, AssertTrueWithAssertionResult) { ASSERT_TRUE(ResultIsEven(2)); #ifndef __BORLANDC__ // ICE's in C++Builder. EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEven(3)), "Value of: ResultIsEven(3)\n" " Actual: false (3 is odd)\n" "Expected: true"); #endif ASSERT_TRUE(ResultIsEvenNoExplanation(2)); EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEvenNoExplanation(3)), "Value of: ResultIsEvenNoExplanation(3)\n" " Actual: false (3 is odd)\n" "Expected: true"); } // Tests ASSERT_FALSE. TEST(AssertionTest, ASSERT_FALSE) { ASSERT_FALSE(2 < 1); // NOLINT EXPECT_FATAL_FAILURE(ASSERT_FALSE(2 > 1), "Value of: 2 > 1\n" " Actual: true\n" "Expected: false"); } // Tests ASSERT_FALSE(predicate) for predicates returning AssertionResult. TEST(AssertionTest, AssertFalseWithAssertionResult) { ASSERT_FALSE(ResultIsEven(3)); #ifndef __BORLANDC__ // ICE's in C++Builder. EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEven(2)), "Value of: ResultIsEven(2)\n" " Actual: true (2 is even)\n" "Expected: false"); #endif ASSERT_FALSE(ResultIsEvenNoExplanation(3)); EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEvenNoExplanation(2)), "Value of: ResultIsEvenNoExplanation(2)\n" " Actual: true\n" "Expected: false"); } #ifdef __BORLANDC__ // Restores warnings after previous "#pragma option push" supressed them # pragma option pop #endif // Tests using ASSERT_EQ on double values. The purpose is to make // sure that the specialization we did for integer and anonymous enums // isn't used for double arguments. TEST(ExpectTest, ASSERT_EQ_Double) { // A success. ASSERT_EQ(5.6, 5.6); // A failure. EXPECT_FATAL_FAILURE(ASSERT_EQ(5.1, 5.2), "5.1"); } // Tests ASSERT_EQ. TEST(AssertionTest, ASSERT_EQ) { ASSERT_EQ(5, 2 + 3); EXPECT_FATAL_FAILURE(ASSERT_EQ(5, 2*3), "Value of: 2*3\n" " Actual: 6\n" "Expected: 5"); } // Tests ASSERT_EQ(NULL, pointer). #if GTEST_CAN_COMPARE_NULL TEST(AssertionTest, ASSERT_EQ_NULL) { // A success. const char* p = NULL; // Some older GCC versions may issue a spurious waring in this or the next // assertion statement. This warning should not be suppressed with // static_cast since the test verifies the ability to use bare NULL as the // expected parameter to the macro. ASSERT_EQ(NULL, p); // A failure. static int n = 0; EXPECT_FATAL_FAILURE(ASSERT_EQ(NULL, &n), "Value of: &n\n"); } #endif // GTEST_CAN_COMPARE_NULL // Tests ASSERT_EQ(0, non_pointer). Since the literal 0 can be // treated as a null pointer by the compiler, we need to make sure // that ASSERT_EQ(0, non_pointer) isn't interpreted by Google Test as // ASSERT_EQ(static_cast(NULL), non_pointer). TEST(ExpectTest, ASSERT_EQ_0) { int n = 0; // A success. ASSERT_EQ(0, n); // A failure. EXPECT_FATAL_FAILURE(ASSERT_EQ(0, 5.6), "Expected: 0"); } // Tests ASSERT_NE. TEST(AssertionTest, ASSERT_NE) { ASSERT_NE(6, 7); EXPECT_FATAL_FAILURE(ASSERT_NE('a', 'a'), "Expected: ('a') != ('a'), " "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)"); } // Tests ASSERT_LE. TEST(AssertionTest, ASSERT_LE) { ASSERT_LE(2, 3); ASSERT_LE(2, 2); EXPECT_FATAL_FAILURE(ASSERT_LE(2, 0), "Expected: (2) <= (0), actual: 2 vs 0"); } // Tests ASSERT_LT. TEST(AssertionTest, ASSERT_LT) { ASSERT_LT(2, 3); EXPECT_FATAL_FAILURE(ASSERT_LT(2, 2), "Expected: (2) < (2), actual: 2 vs 2"); } // Tests ASSERT_GE. TEST(AssertionTest, ASSERT_GE) { ASSERT_GE(2, 1); ASSERT_GE(2, 2); EXPECT_FATAL_FAILURE(ASSERT_GE(2, 3), "Expected: (2) >= (3), actual: 2 vs 3"); } // Tests ASSERT_GT. TEST(AssertionTest, ASSERT_GT) { ASSERT_GT(2, 1); EXPECT_FATAL_FAILURE(ASSERT_GT(2, 2), "Expected: (2) > (2), actual: 2 vs 2"); } #if GTEST_HAS_EXCEPTIONS void ThrowNothing() {} // Tests ASSERT_THROW. TEST(AssertionTest, ASSERT_THROW) { ASSERT_THROW(ThrowAnInteger(), int); # ifndef __BORLANDC__ // ICE's in C++Builder 2007 and 2009. EXPECT_FATAL_FAILURE( ASSERT_THROW(ThrowAnInteger(), bool), "Expected: ThrowAnInteger() throws an exception of type bool.\n" " Actual: it throws a different type."); # endif EXPECT_FATAL_FAILURE( ASSERT_THROW(ThrowNothing(), bool), "Expected: ThrowNothing() throws an exception of type bool.\n" " Actual: it throws nothing."); } // Tests ASSERT_NO_THROW. TEST(AssertionTest, ASSERT_NO_THROW) { ASSERT_NO_THROW(ThrowNothing()); EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()), "Expected: ThrowAnInteger() doesn't throw an exception." "\n Actual: it throws."); } // Tests ASSERT_ANY_THROW. TEST(AssertionTest, ASSERT_ANY_THROW) { ASSERT_ANY_THROW(ThrowAnInteger()); EXPECT_FATAL_FAILURE( ASSERT_ANY_THROW(ThrowNothing()), "Expected: ThrowNothing() throws an exception.\n" " Actual: it doesn't."); } #endif // GTEST_HAS_EXCEPTIONS // Makes sure we deal with the precedence of <<. This test should // compile. TEST(AssertionTest, AssertPrecedence) { ASSERT_EQ(1 < 2, true); bool false_value = false; ASSERT_EQ(true && false_value, false); } // A subroutine used by the following test. void TestEq1(int x) { ASSERT_EQ(1, x); } // Tests calling a test subroutine that's not part of a fixture. TEST(AssertionTest, NonFixtureSubroutine) { EXPECT_FATAL_FAILURE(TestEq1(2), "Value of: x"); } // An uncopyable class. class Uncopyable { public: explicit Uncopyable(int a_value) : value_(a_value) {} int value() const { return value_; } bool operator==(const Uncopyable& rhs) const { return value() == rhs.value(); } private: // This constructor deliberately has no implementation, as we don't // want this class to be copyable. Uncopyable(const Uncopyable&); // NOLINT int value_; }; ::std::ostream& operator<<(::std::ostream& os, const Uncopyable& value) { return os << value.value(); } bool IsPositiveUncopyable(const Uncopyable& x) { return x.value() > 0; } // A subroutine used by the following test. void TestAssertNonPositive() { Uncopyable y(-1); ASSERT_PRED1(IsPositiveUncopyable, y); } // A subroutine used by the following test. void TestAssertEqualsUncopyable() { Uncopyable x(5); Uncopyable y(-1); ASSERT_EQ(x, y); } // Tests that uncopyable objects can be used in assertions. TEST(AssertionTest, AssertWorksWithUncopyableObject) { Uncopyable x(5); ASSERT_PRED1(IsPositiveUncopyable, x); ASSERT_EQ(x, x); EXPECT_FATAL_FAILURE(TestAssertNonPositive(), "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1"); EXPECT_FATAL_FAILURE(TestAssertEqualsUncopyable(), "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5"); } // Tests that uncopyable objects can be used in expects. TEST(AssertionTest, ExpectWorksWithUncopyableObject) { Uncopyable x(5); EXPECT_PRED1(IsPositiveUncopyable, x); Uncopyable y(-1); EXPECT_NONFATAL_FAILURE(EXPECT_PRED1(IsPositiveUncopyable, y), "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1"); EXPECT_EQ(x, x); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5"); } enum NamedEnum { kE1 = 0, kE2 = 1 }; TEST(AssertionTest, NamedEnum) { EXPECT_EQ(kE1, kE1); EXPECT_LT(kE1, kE2); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Which is: 0"); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Actual: 1"); } // The version of gcc used in XCode 2.2 has a bug and doesn't allow // anonymous enums in assertions. Therefore the following test is not // done on Mac. // Sun Studio and HP aCC also reject this code. #if !GTEST_OS_MAC && !defined(__SUNPRO_CC) && !defined(__HP_aCC) // Tests using assertions with anonymous enums. enum { kCaseA = -1, # if GTEST_OS_LINUX // We want to test the case where the size of the anonymous enum is // larger than sizeof(int), to make sure our implementation of the // assertions doesn't truncate the enums. However, MSVC // (incorrectly) doesn't allow an enum value to exceed the range of // an int, so this has to be conditionally compiled. // // On Linux, kCaseB and kCaseA have the same value when truncated to // int size. We want to test whether this will confuse the // assertions. kCaseB = testing::internal::kMaxBiggestInt, # else kCaseB = INT_MAX, # endif // GTEST_OS_LINUX kCaseC = 42 }; TEST(AssertionTest, AnonymousEnum) { # if GTEST_OS_LINUX EXPECT_EQ(static_cast(kCaseA), static_cast(kCaseB)); # endif // GTEST_OS_LINUX EXPECT_EQ(kCaseA, kCaseA); EXPECT_NE(kCaseA, kCaseB); EXPECT_LT(kCaseA, kCaseB); EXPECT_LE(kCaseA, kCaseB); EXPECT_GT(kCaseB, kCaseA); EXPECT_GE(kCaseA, kCaseA); EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseB), "(kCaseA) >= (kCaseB)"); EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseC), "-1 vs 42"); ASSERT_EQ(kCaseA, kCaseA); ASSERT_NE(kCaseA, kCaseB); ASSERT_LT(kCaseA, kCaseB); ASSERT_LE(kCaseA, kCaseB); ASSERT_GT(kCaseB, kCaseA); ASSERT_GE(kCaseA, kCaseA); # ifndef __BORLANDC__ // ICE's in C++Builder. EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseB), "Value of: kCaseB"); EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC), "Actual: 42"); # endif EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC), "Which is: -1"); } #endif // !GTEST_OS_MAC && !defined(__SUNPRO_CC) #if GTEST_OS_WINDOWS static HRESULT UnexpectedHRESULTFailure() { return E_UNEXPECTED; } static HRESULT OkHRESULTSuccess() { return S_OK; } static HRESULT FalseHRESULTSuccess() { return S_FALSE; } // HRESULT assertion tests test both zero and non-zero // success codes as well as failure message for each. // // Windows CE doesn't support message texts. TEST(HRESULTAssertionTest, EXPECT_HRESULT_SUCCEEDED) { EXPECT_HRESULT_SUCCEEDED(S_OK); EXPECT_HRESULT_SUCCEEDED(S_FALSE); EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()), "Expected: (UnexpectedHRESULTFailure()) succeeds.\n" " Actual: 0x8000FFFF"); } TEST(HRESULTAssertionTest, ASSERT_HRESULT_SUCCEEDED) { ASSERT_HRESULT_SUCCEEDED(S_OK); ASSERT_HRESULT_SUCCEEDED(S_FALSE); EXPECT_FATAL_FAILURE(ASSERT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()), "Expected: (UnexpectedHRESULTFailure()) succeeds.\n" " Actual: 0x8000FFFF"); } TEST(HRESULTAssertionTest, EXPECT_HRESULT_FAILED) { EXPECT_HRESULT_FAILED(E_UNEXPECTED); EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(OkHRESULTSuccess()), "Expected: (OkHRESULTSuccess()) fails.\n" " Actual: 0x0"); EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(FalseHRESULTSuccess()), "Expected: (FalseHRESULTSuccess()) fails.\n" " Actual: 0x1"); } TEST(HRESULTAssertionTest, ASSERT_HRESULT_FAILED) { ASSERT_HRESULT_FAILED(E_UNEXPECTED); # ifndef __BORLANDC__ // ICE's in C++Builder 2007 and 2009. EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(OkHRESULTSuccess()), "Expected: (OkHRESULTSuccess()) fails.\n" " Actual: 0x0"); # endif EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(FalseHRESULTSuccess()), "Expected: (FalseHRESULTSuccess()) fails.\n" " Actual: 0x1"); } // Tests that streaming to the HRESULT macros works. TEST(HRESULTAssertionTest, Streaming) { EXPECT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure"; ASSERT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure"; EXPECT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure"; ASSERT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure"; EXPECT_NONFATAL_FAILURE( EXPECT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure", "expected failure"); # ifndef __BORLANDC__ // ICE's in C++Builder 2007 and 2009. EXPECT_FATAL_FAILURE( ASSERT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure", "expected failure"); # endif EXPECT_NONFATAL_FAILURE( EXPECT_HRESULT_FAILED(S_OK) << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE( ASSERT_HRESULT_FAILED(S_OK) << "expected failure", "expected failure"); } #endif // GTEST_OS_WINDOWS #ifdef __BORLANDC__ // Silences warnings: "Condition is always true", "Unreachable code" # pragma option push -w-ccc -w-rch #endif // Tests that the assertion macros behave like single statements. TEST(AssertionSyntaxTest, BasicAssertionsBehavesLikeSingleStatement) { if (AlwaysFalse()) ASSERT_TRUE(false) << "This should never be executed; " "It's a compilation test only."; if (AlwaysTrue()) EXPECT_FALSE(false); else ; // NOLINT if (AlwaysFalse()) ASSERT_LT(1, 3); if (AlwaysFalse()) ; // NOLINT else EXPECT_GT(3, 2) << ""; } #if GTEST_HAS_EXCEPTIONS // Tests that the compiler will not complain about unreachable code in the // EXPECT_THROW/EXPECT_ANY_THROW/EXPECT_NO_THROW macros. TEST(ExpectThrowTest, DoesNotGenerateUnreachableCodeWarning) { int n = 0; EXPECT_THROW(throw 1, int); EXPECT_NONFATAL_FAILURE(EXPECT_THROW(n++, int), ""); EXPECT_NONFATAL_FAILURE(EXPECT_THROW(throw 1, const char*), ""); EXPECT_NO_THROW(n++); EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(throw 1), ""); EXPECT_ANY_THROW(throw 1); EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(n++), ""); } TEST(AssertionSyntaxTest, ExceptionAssertionsBehavesLikeSingleStatement) { if (AlwaysFalse()) EXPECT_THROW(ThrowNothing(), bool); if (AlwaysTrue()) EXPECT_THROW(ThrowAnInteger(), int); else ; // NOLINT if (AlwaysFalse()) EXPECT_NO_THROW(ThrowAnInteger()); if (AlwaysTrue()) EXPECT_NO_THROW(ThrowNothing()); else ; // NOLINT if (AlwaysFalse()) EXPECT_ANY_THROW(ThrowNothing()); if (AlwaysTrue()) EXPECT_ANY_THROW(ThrowAnInteger()); else ; // NOLINT } #endif // GTEST_HAS_EXCEPTIONS TEST(AssertionSyntaxTest, NoFatalFailureAssertionsBehavesLikeSingleStatement) { if (AlwaysFalse()) EXPECT_NO_FATAL_FAILURE(FAIL()) << "This should never be executed. " << "It's a compilation test only."; else ; // NOLINT if (AlwaysFalse()) ASSERT_NO_FATAL_FAILURE(FAIL()) << ""; else ; // NOLINT if (AlwaysTrue()) EXPECT_NO_FATAL_FAILURE(SUCCEED()); else ; // NOLINT if (AlwaysFalse()) ; // NOLINT else ASSERT_NO_FATAL_FAILURE(SUCCEED()); } // Tests that the assertion macros work well with switch statements. TEST(AssertionSyntaxTest, WorksWithSwitch) { switch (0) { case 1: break; default: ASSERT_TRUE(true); } switch (0) case 0: EXPECT_FALSE(false) << "EXPECT_FALSE failed in switch case"; // Binary assertions are implemented using a different code path // than the Boolean assertions. Hence we test them separately. switch (0) { case 1: default: ASSERT_EQ(1, 1) << "ASSERT_EQ failed in default switch handler"; } switch (0) case 0: EXPECT_NE(1, 2); } #if GTEST_HAS_EXCEPTIONS void ThrowAString() { throw "std::string"; } // Test that the exception assertion macros compile and work with const // type qualifier. TEST(AssertionSyntaxTest, WorksWithConst) { ASSERT_THROW(ThrowAString(), const char*); EXPECT_THROW(ThrowAString(), const char*); } #endif // GTEST_HAS_EXCEPTIONS } // namespace namespace testing { // Tests that Google Test tracks SUCCEED*. TEST(SuccessfulAssertionTest, SUCCEED) { SUCCEED(); SUCCEED() << "OK"; EXPECT_EQ(2, GetUnitTestImpl()->current_test_result()->total_part_count()); } // Tests that Google Test doesn't track successful EXPECT_*. TEST(SuccessfulAssertionTest, EXPECT) { EXPECT_TRUE(true); EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); } // Tests that Google Test doesn't track successful EXPECT_STR*. TEST(SuccessfulAssertionTest, EXPECT_STR) { EXPECT_STREQ("", ""); EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); } // Tests that Google Test doesn't track successful ASSERT_*. TEST(SuccessfulAssertionTest, ASSERT) { ASSERT_TRUE(true); EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); } // Tests that Google Test doesn't track successful ASSERT_STR*. TEST(SuccessfulAssertionTest, ASSERT_STR) { ASSERT_STREQ("", ""); EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count()); } } // namespace testing namespace { // Tests the message streaming variation of assertions. TEST(AssertionWithMessageTest, EXPECT) { EXPECT_EQ(1, 1) << "This should succeed."; EXPECT_NONFATAL_FAILURE(EXPECT_NE(1, 1) << "Expected failure #1.", "Expected failure #1"); EXPECT_LE(1, 2) << "This should succeed."; EXPECT_NONFATAL_FAILURE(EXPECT_LT(1, 0) << "Expected failure #2.", "Expected failure #2."); EXPECT_GE(1, 0) << "This should succeed."; EXPECT_NONFATAL_FAILURE(EXPECT_GT(1, 2) << "Expected failure #3.", "Expected failure #3."); EXPECT_STREQ("1", "1") << "This should succeed."; EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("1", "1") << "Expected failure #4.", "Expected failure #4."); EXPECT_STRCASEEQ("a", "A") << "This should succeed."; EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("a", "A") << "Expected failure #5.", "Expected failure #5."); EXPECT_FLOAT_EQ(1, 1) << "This should succeed."; EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1, 1.2) << "Expected failure #6.", "Expected failure #6."); EXPECT_NEAR(1, 1.1, 0.2) << "This should succeed."; } TEST(AssertionWithMessageTest, ASSERT) { ASSERT_EQ(1, 1) << "This should succeed."; ASSERT_NE(1, 2) << "This should succeed."; ASSERT_LE(1, 2) << "This should succeed."; ASSERT_LT(1, 2) << "This should succeed."; ASSERT_GE(1, 0) << "This should succeed."; EXPECT_FATAL_FAILURE(ASSERT_GT(1, 2) << "Expected failure.", "Expected failure."); } TEST(AssertionWithMessageTest, ASSERT_STR) { ASSERT_STREQ("1", "1") << "This should succeed."; ASSERT_STRNE("1", "2") << "This should succeed."; ASSERT_STRCASEEQ("a", "A") << "This should succeed."; EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("a", "A") << "Expected failure.", "Expected failure."); } TEST(AssertionWithMessageTest, ASSERT_FLOATING) { ASSERT_FLOAT_EQ(1, 1) << "This should succeed."; ASSERT_DOUBLE_EQ(1, 1) << "This should succeed."; EXPECT_FATAL_FAILURE(ASSERT_NEAR(1,1.2, 0.1) << "Expect failure.", // NOLINT "Expect failure."); // To work around a bug in gcc 2.95.0, there is intentionally no // space after the first comma in the previous statement. } // Tests using ASSERT_FALSE with a streamed message. TEST(AssertionWithMessageTest, ASSERT_FALSE) { ASSERT_FALSE(false) << "This shouldn't fail."; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_FALSE(true) << "Expected failure: " << 2 << " > " << 1 << " evaluates to " << true; }, "Expected failure"); } // Tests using FAIL with a streamed message. TEST(AssertionWithMessageTest, FAIL) { EXPECT_FATAL_FAILURE(FAIL() << 0, "0"); } // Tests using SUCCEED with a streamed message. TEST(AssertionWithMessageTest, SUCCEED) { SUCCEED() << "Success == " << 1; } // Tests using ASSERT_TRUE with a streamed message. TEST(AssertionWithMessageTest, ASSERT_TRUE) { ASSERT_TRUE(true) << "This should succeed."; ASSERT_TRUE(true) << true; EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_TRUE(false) << static_cast(NULL) << static_cast(NULL); }, "(null)(null)"); } #if GTEST_OS_WINDOWS // Tests using wide strings in assertion messages. TEST(AssertionWithMessageTest, WideStringMessage) { EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_TRUE(false) << L"This failure is expected.\x8119"; }, "This failure is expected."); EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_EQ(1, 2) << "This failure is " << L"expected too.\x8120"; }, "This failure is expected too."); } #endif // GTEST_OS_WINDOWS // Tests EXPECT_TRUE. TEST(ExpectTest, EXPECT_TRUE) { EXPECT_TRUE(true) << "Intentional success"; EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "Intentional failure #1.", "Intentional failure #1."); EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "Intentional failure #2.", "Intentional failure #2."); EXPECT_TRUE(2 > 1); // NOLINT EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 < 1), "Value of: 2 < 1\n" " Actual: false\n" "Expected: true"); EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 > 3), "2 > 3"); } // Tests EXPECT_TRUE(predicate) for predicates returning AssertionResult. TEST(ExpectTest, ExpectTrueWithAssertionResult) { EXPECT_TRUE(ResultIsEven(2)); EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEven(3)), "Value of: ResultIsEven(3)\n" " Actual: false (3 is odd)\n" "Expected: true"); EXPECT_TRUE(ResultIsEvenNoExplanation(2)); EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEvenNoExplanation(3)), "Value of: ResultIsEvenNoExplanation(3)\n" " Actual: false (3 is odd)\n" "Expected: true"); } // Tests EXPECT_FALSE with a streamed message. TEST(ExpectTest, EXPECT_FALSE) { EXPECT_FALSE(2 < 1); // NOLINT EXPECT_FALSE(false) << "Intentional success"; EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "Intentional failure #1.", "Intentional failure #1."); EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "Intentional failure #2.", "Intentional failure #2."); EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 > 1), "Value of: 2 > 1\n" " Actual: true\n" "Expected: false"); EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 < 3), "2 < 3"); } // Tests EXPECT_FALSE(predicate) for predicates returning AssertionResult. TEST(ExpectTest, ExpectFalseWithAssertionResult) { EXPECT_FALSE(ResultIsEven(3)); EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEven(2)), "Value of: ResultIsEven(2)\n" " Actual: true (2 is even)\n" "Expected: false"); EXPECT_FALSE(ResultIsEvenNoExplanation(3)); EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEvenNoExplanation(2)), "Value of: ResultIsEvenNoExplanation(2)\n" " Actual: true\n" "Expected: false"); } #ifdef __BORLANDC__ // Restores warnings after previous "#pragma option push" supressed them # pragma option pop #endif // Tests EXPECT_EQ. TEST(ExpectTest, EXPECT_EQ) { EXPECT_EQ(5, 2 + 3); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2*3), "Value of: 2*3\n" " Actual: 6\n" "Expected: 5"); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2 - 3), "2 - 3"); } // Tests using EXPECT_EQ on double values. The purpose is to make // sure that the specialization we did for integer and anonymous enums // isn't used for double arguments. TEST(ExpectTest, EXPECT_EQ_Double) { // A success. EXPECT_EQ(5.6, 5.6); // A failure. EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5.1, 5.2), "5.1"); } #if GTEST_CAN_COMPARE_NULL // Tests EXPECT_EQ(NULL, pointer). TEST(ExpectTest, EXPECT_EQ_NULL) { // A success. const char* p = NULL; // Some older GCC versions may issue a spurious warning in this or the next // assertion statement. This warning should not be suppressed with // static_cast since the test verifies the ability to use bare NULL as the // expected parameter to the macro. EXPECT_EQ(NULL, p); // A failure. int n = 0; EXPECT_NONFATAL_FAILURE(EXPECT_EQ(NULL, &n), "Value of: &n\n"); } #endif // GTEST_CAN_COMPARE_NULL // Tests EXPECT_EQ(0, non_pointer). Since the literal 0 can be // treated as a null pointer by the compiler, we need to make sure // that EXPECT_EQ(0, non_pointer) isn't interpreted by Google Test as // EXPECT_EQ(static_cast(NULL), non_pointer). TEST(ExpectTest, EXPECT_EQ_0) { int n = 0; // A success. EXPECT_EQ(0, n); // A failure. EXPECT_NONFATAL_FAILURE(EXPECT_EQ(0, 5.6), "Expected: 0"); } // Tests EXPECT_NE. TEST(ExpectTest, EXPECT_NE) { EXPECT_NE(6, 7); EXPECT_NONFATAL_FAILURE(EXPECT_NE('a', 'a'), "Expected: ('a') != ('a'), " "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)"); EXPECT_NONFATAL_FAILURE(EXPECT_NE(2, 2), "2"); char* const p0 = NULL; EXPECT_NONFATAL_FAILURE(EXPECT_NE(p0, p0), "p0"); // Only way to get the Nokia compiler to compile the cast // is to have a separate void* variable first. Putting // the two casts on the same line doesn't work, neither does // a direct C-style to char*. void* pv1 = (void*)0x1234; // NOLINT char* const p1 = reinterpret_cast(pv1); EXPECT_NONFATAL_FAILURE(EXPECT_NE(p1, p1), "p1"); } // Tests EXPECT_LE. TEST(ExpectTest, EXPECT_LE) { EXPECT_LE(2, 3); EXPECT_LE(2, 2); EXPECT_NONFATAL_FAILURE(EXPECT_LE(2, 0), "Expected: (2) <= (0), actual: 2 vs 0"); EXPECT_NONFATAL_FAILURE(EXPECT_LE(1.1, 0.9), "(1.1) <= (0.9)"); } // Tests EXPECT_LT. TEST(ExpectTest, EXPECT_LT) { EXPECT_LT(2, 3); EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 2), "Expected: (2) < (2), actual: 2 vs 2"); EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1), "(2) < (1)"); } // Tests EXPECT_GE. TEST(ExpectTest, EXPECT_GE) { EXPECT_GE(2, 1); EXPECT_GE(2, 2); EXPECT_NONFATAL_FAILURE(EXPECT_GE(2, 3), "Expected: (2) >= (3), actual: 2 vs 3"); EXPECT_NONFATAL_FAILURE(EXPECT_GE(0.9, 1.1), "(0.9) >= (1.1)"); } // Tests EXPECT_GT. TEST(ExpectTest, EXPECT_GT) { EXPECT_GT(2, 1); EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 2), "Expected: (2) > (2), actual: 2 vs 2"); EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 3), "(2) > (3)"); } #if GTEST_HAS_EXCEPTIONS // Tests EXPECT_THROW. TEST(ExpectTest, EXPECT_THROW) { EXPECT_THROW(ThrowAnInteger(), int); EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool), "Expected: ThrowAnInteger() throws an exception of " "type bool.\n Actual: it throws a different type."); EXPECT_NONFATAL_FAILURE( EXPECT_THROW(ThrowNothing(), bool), "Expected: ThrowNothing() throws an exception of type bool.\n" " Actual: it throws nothing."); } // Tests EXPECT_NO_THROW. TEST(ExpectTest, EXPECT_NO_THROW) { EXPECT_NO_THROW(ThrowNothing()); EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()), "Expected: ThrowAnInteger() doesn't throw an " "exception.\n Actual: it throws."); } // Tests EXPECT_ANY_THROW. TEST(ExpectTest, EXPECT_ANY_THROW) { EXPECT_ANY_THROW(ThrowAnInteger()); EXPECT_NONFATAL_FAILURE( EXPECT_ANY_THROW(ThrowNothing()), "Expected: ThrowNothing() throws an exception.\n" " Actual: it doesn't."); } #endif // GTEST_HAS_EXCEPTIONS // Make sure we deal with the precedence of <<. TEST(ExpectTest, ExpectPrecedence) { EXPECT_EQ(1 < 2, true); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(true, true && false), "Value of: true && false"); } // Tests the StreamableToString() function. // Tests using StreamableToString() on a scalar. TEST(StreamableToStringTest, Scalar) { EXPECT_STREQ("5", StreamableToString(5).c_str()); } // Tests using StreamableToString() on a non-char pointer. TEST(StreamableToStringTest, Pointer) { int n = 0; int* p = &n; EXPECT_STRNE("(null)", StreamableToString(p).c_str()); } // Tests using StreamableToString() on a NULL non-char pointer. TEST(StreamableToStringTest, NullPointer) { int* p = NULL; EXPECT_STREQ("(null)", StreamableToString(p).c_str()); } // Tests using StreamableToString() on a C string. TEST(StreamableToStringTest, CString) { EXPECT_STREQ("Foo", StreamableToString("Foo").c_str()); } // Tests using StreamableToString() on a NULL C string. TEST(StreamableToStringTest, NullCString) { char* p = NULL; EXPECT_STREQ("(null)", StreamableToString(p).c_str()); } // Tests using streamable values as assertion messages. // Tests using std::string as an assertion message. TEST(StreamableTest, string) { static const std::string str( "This failure message is a std::string, and is expected."); EXPECT_FATAL_FAILURE(FAIL() << str, str.c_str()); } // Tests that we can output strings containing embedded NULs. // Limited to Linux because we can only do this with std::string's. TEST(StreamableTest, stringWithEmbeddedNUL) { static const char char_array_with_nul[] = "Here's a NUL\0 and some more string"; static const std::string string_with_nul(char_array_with_nul, sizeof(char_array_with_nul) - 1); // drops the trailing NUL EXPECT_FATAL_FAILURE(FAIL() << string_with_nul, "Here's a NUL\\0 and some more string"); } // Tests that we can output a NUL char. TEST(StreamableTest, NULChar) { EXPECT_FATAL_FAILURE({ // NOLINT FAIL() << "A NUL" << '\0' << " and some more string"; }, "A NUL\\0 and some more string"); } // Tests using int as an assertion message. TEST(StreamableTest, int) { EXPECT_FATAL_FAILURE(FAIL() << 900913, "900913"); } // Tests using NULL char pointer as an assertion message. // // In MSVC, streaming a NULL char * causes access violation. Google Test // implemented a workaround (substituting "(null)" for NULL). This // tests whether the workaround works. TEST(StreamableTest, NullCharPtr) { EXPECT_FATAL_FAILURE(FAIL() << static_cast(NULL), "(null)"); } // Tests that basic IO manipulators (endl, ends, and flush) can be // streamed to testing::Message. TEST(StreamableTest, BasicIoManip) { EXPECT_FATAL_FAILURE({ // NOLINT FAIL() << "Line 1." << std::endl << "A NUL char " << std::ends << std::flush << " in line 2."; }, "Line 1.\nA NUL char \\0 in line 2."); } // Tests the macros that haven't been covered so far. void AddFailureHelper(bool* aborted) { *aborted = true; ADD_FAILURE() << "Intentional failure."; *aborted = false; } // Tests ADD_FAILURE. TEST(MacroTest, ADD_FAILURE) { bool aborted = true; EXPECT_NONFATAL_FAILURE(AddFailureHelper(&aborted), "Intentional failure."); EXPECT_FALSE(aborted); } // Tests ADD_FAILURE_AT. TEST(MacroTest, ADD_FAILURE_AT) { // Verifies that ADD_FAILURE_AT does generate a nonfatal failure and // the failure message contains the user-streamed part. EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42) << "Wrong!", "Wrong!"); // Verifies that the user-streamed part is optional. EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42), "Failed"); // Unfortunately, we cannot verify that the failure message contains // the right file path and line number the same way, as // EXPECT_NONFATAL_FAILURE() doesn't get to see the file path and // line number. Instead, we do that in gtest_output_test_.cc. } // Tests FAIL. TEST(MacroTest, FAIL) { EXPECT_FATAL_FAILURE(FAIL(), "Failed"); EXPECT_FATAL_FAILURE(FAIL() << "Intentional failure.", "Intentional failure."); } // Tests SUCCEED TEST(MacroTest, SUCCEED) { SUCCEED(); SUCCEED() << "Explicit success."; } // Tests for EXPECT_EQ() and ASSERT_EQ(). // // These tests fail *intentionally*, s.t. the failure messages can be // generated and tested. // // We have different tests for different argument types. // Tests using bool values in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, Bool) { EXPECT_EQ(true, true); EXPECT_FATAL_FAILURE({ bool false_value = false; ASSERT_EQ(false_value, true); }, "Value of: true"); } // Tests using int values in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, Int) { ASSERT_EQ(32, 32); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(32, 33), "33"); } // Tests using time_t values in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, Time_T) { EXPECT_EQ(static_cast(0), static_cast(0)); EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast(0), static_cast(1234)), "1234"); } // Tests using char values in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, Char) { ASSERT_EQ('z', 'z'); const char ch = 'b'; EXPECT_NONFATAL_FAILURE(EXPECT_EQ('\0', ch), "ch"); EXPECT_NONFATAL_FAILURE(EXPECT_EQ('a', ch), "ch"); } // Tests using wchar_t values in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, WideChar) { EXPECT_EQ(L'b', L'b'); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'\0', L'x'), "Value of: L'x'\n" " Actual: L'x' (120, 0x78)\n" "Expected: L'\0'\n" "Which is: L'\0' (0, 0x0)"); static wchar_t wchar; wchar = L'b'; EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'a', wchar), "wchar"); wchar = 0x8119; EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast(0x8120), wchar), "Value of: wchar"); } // Tests using ::std::string values in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, StdString) { // Compares a const char* to an std::string that has identical // content. ASSERT_EQ("Test", ::std::string("Test")); // Compares two identical std::strings. static const ::std::string str1("A * in the middle"); static const ::std::string str2(str1); EXPECT_EQ(str1, str2); // Compares a const char* to an std::string that has different // content EXPECT_NONFATAL_FAILURE(EXPECT_EQ("Test", ::std::string("test")), "\"test\""); // Compares an std::string to a char* that has different content. char* const p1 = const_cast("foo"); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::std::string("bar"), p1), "p1"); // Compares two std::strings that have different contents, one of // which having a NUL character in the middle. This should fail. static ::std::string str3(str1); str3.at(2) = '\0'; EXPECT_FATAL_FAILURE(ASSERT_EQ(str1, str3), "Value of: str3\n" " Actual: \"A \\0 in the middle\""); } #if GTEST_HAS_STD_WSTRING // Tests using ::std::wstring values in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, StdWideString) { // Compares two identical std::wstrings. const ::std::wstring wstr1(L"A * in the middle"); const ::std::wstring wstr2(wstr1); ASSERT_EQ(wstr1, wstr2); // Compares an std::wstring to a const wchar_t* that has identical // content. const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' }; EXPECT_EQ(::std::wstring(kTestX8119), kTestX8119); // Compares an std::wstring to a const wchar_t* that has different // content. const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' }; EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_EQ(::std::wstring(kTestX8119), kTestX8120); }, "kTestX8120"); // Compares two std::wstrings that have different contents, one of // which having a NUL character in the middle. ::std::wstring wstr3(wstr1); wstr3.at(2) = L'\0'; EXPECT_NONFATAL_FAILURE(EXPECT_EQ(wstr1, wstr3), "wstr3"); // Compares a wchar_t* to an std::wstring that has different // content. EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_EQ(const_cast(L"foo"), ::std::wstring(L"bar")); }, ""); } #endif // GTEST_HAS_STD_WSTRING #if GTEST_HAS_GLOBAL_STRING // Tests using ::string values in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, GlobalString) { // Compares a const char* to a ::string that has identical content. EXPECT_EQ("Test", ::string("Test")); // Compares two identical ::strings. const ::string str1("A * in the middle"); const ::string str2(str1); ASSERT_EQ(str1, str2); // Compares a ::string to a const char* that has different content. EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::string("Test"), "test"), "test"); // Compares two ::strings that have different contents, one of which // having a NUL character in the middle. ::string str3(str1); str3.at(2) = '\0'; EXPECT_NONFATAL_FAILURE(EXPECT_EQ(str1, str3), "str3"); // Compares a ::string to a char* that has different content. EXPECT_FATAL_FAILURE({ // NOLINT ASSERT_EQ(::string("bar"), const_cast("foo")); }, ""); } #endif // GTEST_HAS_GLOBAL_STRING #if GTEST_HAS_GLOBAL_WSTRING // Tests using ::wstring values in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, GlobalWideString) { // Compares two identical ::wstrings. static const ::wstring wstr1(L"A * in the middle"); static const ::wstring wstr2(wstr1); EXPECT_EQ(wstr1, wstr2); // Compares a const wchar_t* to a ::wstring that has identical content. const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' }; ASSERT_EQ(kTestX8119, ::wstring(kTestX8119)); // Compares a const wchar_t* to a ::wstring that has different // content. const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' }; EXPECT_NONFATAL_FAILURE({ // NOLINT EXPECT_EQ(kTestX8120, ::wstring(kTestX8119)); }, "Test\\x8119"); // Compares a wchar_t* to a ::wstring that has different content. wchar_t* const p1 = const_cast(L"foo"); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, ::wstring(L"bar")), "bar"); // Compares two ::wstrings that have different contents, one of which // having a NUL character in the middle. static ::wstring wstr3; wstr3 = wstr1; wstr3.at(2) = L'\0'; EXPECT_FATAL_FAILURE(ASSERT_EQ(wstr1, wstr3), "wstr3"); } #endif // GTEST_HAS_GLOBAL_WSTRING // Tests using char pointers in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, CharPointer) { char* const p0 = NULL; // Only way to get the Nokia compiler to compile the cast // is to have a separate void* variable first. Putting // the two casts on the same line doesn't work, neither does // a direct C-style to char*. void* pv1 = (void*)0x1234; // NOLINT void* pv2 = (void*)0xABC0; // NOLINT char* const p1 = reinterpret_cast(pv1); char* const p2 = reinterpret_cast(pv2); ASSERT_EQ(p1, p1); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2), "Value of: p2"); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2), "p2"); EXPECT_FATAL_FAILURE(ASSERT_EQ(reinterpret_cast(0x1234), reinterpret_cast(0xABC0)), "ABC0"); } // Tests using wchar_t pointers in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, WideCharPointer) { wchar_t* const p0 = NULL; // Only way to get the Nokia compiler to compile the cast // is to have a separate void* variable first. Putting // the two casts on the same line doesn't work, neither does // a direct C-style to char*. void* pv1 = (void*)0x1234; // NOLINT void* pv2 = (void*)0xABC0; // NOLINT wchar_t* const p1 = reinterpret_cast(pv1); wchar_t* const p2 = reinterpret_cast(pv2); EXPECT_EQ(p0, p0); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2), "Value of: p2"); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2), "p2"); void* pv3 = (void*)0x1234; // NOLINT void* pv4 = (void*)0xABC0; // NOLINT const wchar_t* p3 = reinterpret_cast(pv3); const wchar_t* p4 = reinterpret_cast(pv4); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p3, p4), "p4"); } // Tests using other types of pointers in {EXPECT|ASSERT}_EQ. TEST(EqAssertionTest, OtherPointer) { ASSERT_EQ(static_cast(NULL), static_cast(NULL)); EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast(NULL), reinterpret_cast(0x1234)), "0x1234"); } // A class that supports binary comparison operators but not streaming. class UnprintableChar { public: explicit UnprintableChar(char ch) : char_(ch) {} bool operator==(const UnprintableChar& rhs) const { return char_ == rhs.char_; } bool operator!=(const UnprintableChar& rhs) const { return char_ != rhs.char_; } bool operator<(const UnprintableChar& rhs) const { return char_ < rhs.char_; } bool operator<=(const UnprintableChar& rhs) const { return char_ <= rhs.char_; } bool operator>(const UnprintableChar& rhs) const { return char_ > rhs.char_; } bool operator>=(const UnprintableChar& rhs) const { return char_ >= rhs.char_; } private: char char_; }; // Tests that ASSERT_EQ() and friends don't require the arguments to // be printable. TEST(ComparisonAssertionTest, AcceptsUnprintableArgs) { const UnprintableChar x('x'), y('y'); ASSERT_EQ(x, x); EXPECT_NE(x, y); ASSERT_LT(x, y); EXPECT_LE(x, y); ASSERT_GT(y, x); EXPECT_GE(x, x); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <78>"); EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <79>"); EXPECT_NONFATAL_FAILURE(EXPECT_LT(y, y), "1-byte object <79>"); EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <78>"); EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <79>"); // Code tested by EXPECT_FATAL_FAILURE cannot reference local // variables, so we have to write UnprintableChar('x') instead of x. #ifndef __BORLANDC__ // ICE's in C++Builder. EXPECT_FATAL_FAILURE(ASSERT_NE(UnprintableChar('x'), UnprintableChar('x')), "1-byte object <78>"); EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')), "1-byte object <78>"); #endif EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')), "1-byte object <79>"); EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')), "1-byte object <78>"); EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')), "1-byte object <79>"); } // Tests the FRIEND_TEST macro. // This class has a private member we want to test. We will test it // both in a TEST and in a TEST_F. class Foo { public: Foo() {} private: int Bar() const { return 1; } // Declares the friend tests that can access the private member // Bar(). FRIEND_TEST(FRIEND_TEST_Test, TEST); FRIEND_TEST(FRIEND_TEST_Test2, TEST_F); }; // Tests that the FRIEND_TEST declaration allows a TEST to access a // class's private members. This should compile. TEST(FRIEND_TEST_Test, TEST) { ASSERT_EQ(1, Foo().Bar()); } // The fixture needed to test using FRIEND_TEST with TEST_F. class FRIEND_TEST_Test2 : public Test { protected: Foo foo; }; // Tests that the FRIEND_TEST declaration allows a TEST_F to access a // class's private members. This should compile. TEST_F(FRIEND_TEST_Test2, TEST_F) { ASSERT_EQ(1, foo.Bar()); } // Tests the life cycle of Test objects. // The test fixture for testing the life cycle of Test objects. // // This class counts the number of live test objects that uses this // fixture. class TestLifeCycleTest : public Test { protected: // Constructor. Increments the number of test objects that uses // this fixture. TestLifeCycleTest() { count_++; } // Destructor. Decrements the number of test objects that uses this // fixture. ~TestLifeCycleTest() { count_--; } // Returns the number of live test objects that uses this fixture. int count() const { return count_; } private: static int count_; }; int TestLifeCycleTest::count_ = 0; // Tests the life cycle of test objects. TEST_F(TestLifeCycleTest, Test1) { // There should be only one test object in this test case that's // currently alive. ASSERT_EQ(1, count()); } // Tests the life cycle of test objects. TEST_F(TestLifeCycleTest, Test2) { // After Test1 is done and Test2 is started, there should still be // only one live test object, as the object for Test1 should've been // deleted. ASSERT_EQ(1, count()); } } // namespace // Tests that the copy constructor works when it is NOT optimized away by // the compiler. TEST(AssertionResultTest, CopyConstructorWorksWhenNotOptimied) { // Checks that the copy constructor doesn't try to dereference NULL pointers // in the source object. AssertionResult r1 = AssertionSuccess(); AssertionResult r2 = r1; // The following line is added to prevent the compiler from optimizing // away the constructor call. r1 << "abc"; AssertionResult r3 = r1; EXPECT_EQ(static_cast(r3), static_cast(r1)); EXPECT_STREQ("abc", r1.message()); } // Tests that AssertionSuccess and AssertionFailure construct // AssertionResult objects as expected. TEST(AssertionResultTest, ConstructionWorks) { AssertionResult r1 = AssertionSuccess(); EXPECT_TRUE(r1); EXPECT_STREQ("", r1.message()); AssertionResult r2 = AssertionSuccess() << "abc"; EXPECT_TRUE(r2); EXPECT_STREQ("abc", r2.message()); AssertionResult r3 = AssertionFailure(); EXPECT_FALSE(r3); EXPECT_STREQ("", r3.message()); AssertionResult r4 = AssertionFailure() << "def"; EXPECT_FALSE(r4); EXPECT_STREQ("def", r4.message()); AssertionResult r5 = AssertionFailure(Message() << "ghi"); EXPECT_FALSE(r5); EXPECT_STREQ("ghi", r5.message()); } // Tests that the negation flips the predicate result but keeps the message. TEST(AssertionResultTest, NegationWorks) { AssertionResult r1 = AssertionSuccess() << "abc"; EXPECT_FALSE(!r1); EXPECT_STREQ("abc", (!r1).message()); AssertionResult r2 = AssertionFailure() << "def"; EXPECT_TRUE(!r2); EXPECT_STREQ("def", (!r2).message()); } TEST(AssertionResultTest, StreamingWorks) { AssertionResult r = AssertionSuccess(); r << "abc" << 'd' << 0 << true; EXPECT_STREQ("abcd0true", r.message()); } TEST(AssertionResultTest, CanStreamOstreamManipulators) { AssertionResult r = AssertionSuccess(); r << "Data" << std::endl << std::flush << std::ends << "Will be visible"; EXPECT_STREQ("Data\n\\0Will be visible", r.message()); } // Tests streaming a user type whose definition and operator << are // both in the global namespace. class Base { public: explicit Base(int an_x) : x_(an_x) {} int x() const { return x_; } private: int x_; }; std::ostream& operator<<(std::ostream& os, const Base& val) { return os << val.x(); } std::ostream& operator<<(std::ostream& os, const Base* pointer) { return os << "(" << pointer->x() << ")"; } TEST(MessageTest, CanStreamUserTypeInGlobalNameSpace) { Message msg; Base a(1); msg << a << &a; // Uses ::operator<<. EXPECT_STREQ("1(1)", msg.GetString().c_str()); } // Tests streaming a user type whose definition and operator<< are // both in an unnamed namespace. namespace { class MyTypeInUnnamedNameSpace : public Base { public: explicit MyTypeInUnnamedNameSpace(int an_x): Base(an_x) {} }; std::ostream& operator<<(std::ostream& os, const MyTypeInUnnamedNameSpace& val) { return os << val.x(); } std::ostream& operator<<(std::ostream& os, const MyTypeInUnnamedNameSpace* pointer) { return os << "(" << pointer->x() << ")"; } } // namespace TEST(MessageTest, CanStreamUserTypeInUnnamedNameSpace) { Message msg; MyTypeInUnnamedNameSpace a(1); msg << a << &a; // Uses ::operator<<. EXPECT_STREQ("1(1)", msg.GetString().c_str()); } // Tests streaming a user type whose definition and operator<< are // both in a user namespace. namespace namespace1 { class MyTypeInNameSpace1 : public Base { public: explicit MyTypeInNameSpace1(int an_x): Base(an_x) {} }; std::ostream& operator<<(std::ostream& os, const MyTypeInNameSpace1& val) { return os << val.x(); } std::ostream& operator<<(std::ostream& os, const MyTypeInNameSpace1* pointer) { return os << "(" << pointer->x() << ")"; } } // namespace namespace1 TEST(MessageTest, CanStreamUserTypeInUserNameSpace) { Message msg; namespace1::MyTypeInNameSpace1 a(1); msg << a << &a; // Uses namespace1::operator<<. EXPECT_STREQ("1(1)", msg.GetString().c_str()); } // Tests streaming a user type whose definition is in a user namespace // but whose operator<< is in the global namespace. namespace namespace2 { class MyTypeInNameSpace2 : public ::Base { public: explicit MyTypeInNameSpace2(int an_x): Base(an_x) {} }; } // namespace namespace2 std::ostream& operator<<(std::ostream& os, const namespace2::MyTypeInNameSpace2& val) { return os << val.x(); } std::ostream& operator<<(std::ostream& os, const namespace2::MyTypeInNameSpace2* pointer) { return os << "(" << pointer->x() << ")"; } TEST(MessageTest, CanStreamUserTypeInUserNameSpaceWithStreamOperatorInGlobal) { Message msg; namespace2::MyTypeInNameSpace2 a(1); msg << a << &a; // Uses ::operator<<. EXPECT_STREQ("1(1)", msg.GetString().c_str()); } // Tests streaming NULL pointers to testing::Message. TEST(MessageTest, NullPointers) { Message msg; char* const p1 = NULL; unsigned char* const p2 = NULL; int* p3 = NULL; double* p4 = NULL; bool* p5 = NULL; Message* p6 = NULL; msg << p1 << p2 << p3 << p4 << p5 << p6; ASSERT_STREQ("(null)(null)(null)(null)(null)(null)", msg.GetString().c_str()); } // Tests streaming wide strings to testing::Message. TEST(MessageTest, WideStrings) { // Streams a NULL of type const wchar_t*. const wchar_t* const_wstr = NULL; EXPECT_STREQ("(null)", (Message() << const_wstr).GetString().c_str()); // Streams a NULL of type wchar_t*. wchar_t* wstr = NULL; EXPECT_STREQ("(null)", (Message() << wstr).GetString().c_str()); // Streams a non-NULL of type const wchar_t*. const_wstr = L"abc\x8119"; EXPECT_STREQ("abc\xe8\x84\x99", (Message() << const_wstr).GetString().c_str()); // Streams a non-NULL of type wchar_t*. wstr = const_cast(const_wstr); EXPECT_STREQ("abc\xe8\x84\x99", (Message() << wstr).GetString().c_str()); } // This line tests that we can define tests in the testing namespace. namespace testing { // Tests the TestInfo class. class TestInfoTest : public Test { protected: static const TestInfo* GetTestInfo(const char* test_name) { const TestCase* const test_case = GetUnitTestImpl()-> GetTestCase("TestInfoTest", "", NULL, NULL); for (int i = 0; i < test_case->total_test_count(); ++i) { const TestInfo* const test_info = test_case->GetTestInfo(i); if (strcmp(test_name, test_info->name()) == 0) return test_info; } return NULL; } static const TestResult* GetTestResult( const TestInfo* test_info) { return test_info->result(); } }; // Tests TestInfo::test_case_name() and TestInfo::name(). TEST_F(TestInfoTest, Names) { const TestInfo* const test_info = GetTestInfo("Names"); ASSERT_STREQ("TestInfoTest", test_info->test_case_name()); ASSERT_STREQ("Names", test_info->name()); } // Tests TestInfo::result(). TEST_F(TestInfoTest, result) { const TestInfo* const test_info = GetTestInfo("result"); // Initially, there is no TestPartResult for this test. ASSERT_EQ(0, GetTestResult(test_info)->total_part_count()); // After the previous assertion, there is still none. ASSERT_EQ(0, GetTestResult(test_info)->total_part_count()); } // Tests setting up and tearing down a test case. class SetUpTestCaseTest : public Test { protected: // This will be called once before the first test in this test case // is run. static void SetUpTestCase() { printf("Setting up the test case . . .\n"); // Initializes some shared resource. In this simple example, we // just create a C string. More complex stuff can be done if // desired. shared_resource_ = "123"; // Increments the number of test cases that have been set up. counter_++; // SetUpTestCase() should be called only once. EXPECT_EQ(1, counter_); } // This will be called once after the last test in this test case is // run. static void TearDownTestCase() { printf("Tearing down the test case . . .\n"); // Decrements the number of test cases that have been set up. counter_--; // TearDownTestCase() should be called only once. EXPECT_EQ(0, counter_); // Cleans up the shared resource. shared_resource_ = NULL; } // This will be called before each test in this test case. virtual void SetUp() { // SetUpTestCase() should be called only once, so counter_ should // always be 1. EXPECT_EQ(1, counter_); } // Number of test cases that have been set up. static int counter_; // Some resource to be shared by all tests in this test case. static const char* shared_resource_; }; int SetUpTestCaseTest::counter_ = 0; const char* SetUpTestCaseTest::shared_resource_ = NULL; // A test that uses the shared resource. TEST_F(SetUpTestCaseTest, Test1) { EXPECT_STRNE(NULL, shared_resource_); } // Another test that uses the shared resource. TEST_F(SetUpTestCaseTest, Test2) { EXPECT_STREQ("123", shared_resource_); } // The InitGoogleTestTest test case tests testing::InitGoogleTest(). // The Flags struct stores a copy of all Google Test flags. struct Flags { // Constructs a Flags struct where each flag has its default value. Flags() : also_run_disabled_tests(false), break_on_failure(false), catch_exceptions(false), death_test_use_fork(false), filter(""), list_tests(false), output(""), print_time(true), random_seed(0), repeat(1), shuffle(false), stack_trace_depth(kMaxStackTraceDepth), stream_result_to(""), throw_on_failure(false) {} // Factory methods. // Creates a Flags struct where the gtest_also_run_disabled_tests flag has // the given value. static Flags AlsoRunDisabledTests(bool also_run_disabled_tests) { Flags flags; flags.also_run_disabled_tests = also_run_disabled_tests; return flags; } // Creates a Flags struct where the gtest_break_on_failure flag has // the given value. static Flags BreakOnFailure(bool break_on_failure) { Flags flags; flags.break_on_failure = break_on_failure; return flags; } // Creates a Flags struct where the gtest_catch_exceptions flag has // the given value. static Flags CatchExceptions(bool catch_exceptions) { Flags flags; flags.catch_exceptions = catch_exceptions; return flags; } // Creates a Flags struct where the gtest_death_test_use_fork flag has // the given value. static Flags DeathTestUseFork(bool death_test_use_fork) { Flags flags; flags.death_test_use_fork = death_test_use_fork; return flags; } // Creates a Flags struct where the gtest_filter flag has the given // value. static Flags Filter(const char* filter) { Flags flags; flags.filter = filter; return flags; } // Creates a Flags struct where the gtest_list_tests flag has the // given value. static Flags ListTests(bool list_tests) { Flags flags; flags.list_tests = list_tests; return flags; } // Creates a Flags struct where the gtest_output flag has the given // value. static Flags Output(const char* output) { Flags flags; flags.output = output; return flags; } // Creates a Flags struct where the gtest_print_time flag has the given // value. static Flags PrintTime(bool print_time) { Flags flags; flags.print_time = print_time; return flags; } // Creates a Flags struct where the gtest_random_seed flag has // the given value. static Flags RandomSeed(Int32 random_seed) { Flags flags; flags.random_seed = random_seed; return flags; } // Creates a Flags struct where the gtest_repeat flag has the given // value. static Flags Repeat(Int32 repeat) { Flags flags; flags.repeat = repeat; return flags; } // Creates a Flags struct where the gtest_shuffle flag has // the given value. static Flags Shuffle(bool shuffle) { Flags flags; flags.shuffle = shuffle; return flags; } // Creates a Flags struct where the GTEST_FLAG(stack_trace_depth) flag has // the given value. static Flags StackTraceDepth(Int32 stack_trace_depth) { Flags flags; flags.stack_trace_depth = stack_trace_depth; return flags; } // Creates a Flags struct where the GTEST_FLAG(stream_result_to) flag has // the given value. static Flags StreamResultTo(const char* stream_result_to) { Flags flags; flags.stream_result_to = stream_result_to; return flags; } // Creates a Flags struct where the gtest_throw_on_failure flag has // the given value. static Flags ThrowOnFailure(bool throw_on_failure) { Flags flags; flags.throw_on_failure = throw_on_failure; return flags; } // These fields store the flag values. bool also_run_disabled_tests; bool break_on_failure; bool catch_exceptions; bool death_test_use_fork; const char* filter; bool list_tests; const char* output; bool print_time; Int32 random_seed; Int32 repeat; bool shuffle; Int32 stack_trace_depth; const char* stream_result_to; bool throw_on_failure; }; // Fixture for testing InitGoogleTest(). class InitGoogleTestTest : public Test { protected: // Clears the flags before each test. virtual void SetUp() { GTEST_FLAG(also_run_disabled_tests) = false; GTEST_FLAG(break_on_failure) = false; GTEST_FLAG(catch_exceptions) = false; GTEST_FLAG(death_test_use_fork) = false; GTEST_FLAG(filter) = ""; GTEST_FLAG(list_tests) = false; GTEST_FLAG(output) = ""; GTEST_FLAG(print_time) = true; GTEST_FLAG(random_seed) = 0; GTEST_FLAG(repeat) = 1; GTEST_FLAG(shuffle) = false; GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth; GTEST_FLAG(stream_result_to) = ""; GTEST_FLAG(throw_on_failure) = false; } // Asserts that two narrow or wide string arrays are equal. template static void AssertStringArrayEq(size_t size1, CharType** array1, size_t size2, CharType** array2) { ASSERT_EQ(size1, size2) << " Array sizes different."; for (size_t i = 0; i != size1; i++) { ASSERT_STREQ(array1[i], array2[i]) << " where i == " << i; } } // Verifies that the flag values match the expected values. static void CheckFlags(const Flags& expected) { EXPECT_EQ(expected.also_run_disabled_tests, GTEST_FLAG(also_run_disabled_tests)); EXPECT_EQ(expected.break_on_failure, GTEST_FLAG(break_on_failure)); EXPECT_EQ(expected.catch_exceptions, GTEST_FLAG(catch_exceptions)); EXPECT_EQ(expected.death_test_use_fork, GTEST_FLAG(death_test_use_fork)); EXPECT_STREQ(expected.filter, GTEST_FLAG(filter).c_str()); EXPECT_EQ(expected.list_tests, GTEST_FLAG(list_tests)); EXPECT_STREQ(expected.output, GTEST_FLAG(output).c_str()); EXPECT_EQ(expected.print_time, GTEST_FLAG(print_time)); EXPECT_EQ(expected.random_seed, GTEST_FLAG(random_seed)); EXPECT_EQ(expected.repeat, GTEST_FLAG(repeat)); EXPECT_EQ(expected.shuffle, GTEST_FLAG(shuffle)); EXPECT_EQ(expected.stack_trace_depth, GTEST_FLAG(stack_trace_depth)); EXPECT_STREQ(expected.stream_result_to, GTEST_FLAG(stream_result_to).c_str()); EXPECT_EQ(expected.throw_on_failure, GTEST_FLAG(throw_on_failure)); } // Parses a command line (specified by argc1 and argv1), then // verifies that the flag values are expected and that the // recognized flags are removed from the command line. template static void TestParsingFlags(int argc1, const CharType** argv1, int argc2, const CharType** argv2, const Flags& expected, bool should_print_help) { const bool saved_help_flag = ::testing::internal::g_help_flag; ::testing::internal::g_help_flag = false; #if GTEST_HAS_STREAM_REDIRECTION CaptureStdout(); #endif // Parses the command line. internal::ParseGoogleTestFlagsOnly(&argc1, const_cast(argv1)); #if GTEST_HAS_STREAM_REDIRECTION const std::string captured_stdout = GetCapturedStdout(); #endif // Verifies the flag values. CheckFlags(expected); // Verifies that the recognized flags are removed from the command // line. AssertStringArrayEq(argc1 + 1, argv1, argc2 + 1, argv2); // ParseGoogleTestFlagsOnly should neither set g_help_flag nor print the // help message for the flags it recognizes. EXPECT_EQ(should_print_help, ::testing::internal::g_help_flag); #if GTEST_HAS_STREAM_REDIRECTION const char* const expected_help_fragment = "This program contains tests written using"; if (should_print_help) { EXPECT_PRED_FORMAT2(IsSubstring, expected_help_fragment, captured_stdout); } else { EXPECT_PRED_FORMAT2(IsNotSubstring, expected_help_fragment, captured_stdout); } #endif // GTEST_HAS_STREAM_REDIRECTION ::testing::internal::g_help_flag = saved_help_flag; } // This macro wraps TestParsingFlags s.t. the user doesn't need // to specify the array sizes. #define GTEST_TEST_PARSING_FLAGS_(argv1, argv2, expected, should_print_help) \ TestParsingFlags(sizeof(argv1)/sizeof(*argv1) - 1, argv1, \ sizeof(argv2)/sizeof(*argv2) - 1, argv2, \ expected, should_print_help) }; // Tests parsing an empty command line. TEST_F(InitGoogleTestTest, Empty) { const char* argv[] = { NULL }; const char* argv2[] = { NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false); } // Tests parsing a command line that has no flag. TEST_F(InitGoogleTestTest, NoFlag) { const char* argv[] = { "foo.exe", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false); } // Tests parsing a bad --gtest_filter flag. TEST_F(InitGoogleTestTest, FilterBad) { const char* argv[] = { "foo.exe", "--gtest_filter", NULL }; const char* argv2[] = { "foo.exe", "--gtest_filter", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), true); } // Tests parsing an empty --gtest_filter flag. TEST_F(InitGoogleTestTest, FilterEmpty) { const char* argv[] = { "foo.exe", "--gtest_filter=", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), false); } // Tests parsing a non-empty --gtest_filter flag. TEST_F(InitGoogleTestTest, FilterNonEmpty) { const char* argv[] = { "foo.exe", "--gtest_filter=abc", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("abc"), false); } // Tests parsing --gtest_break_on_failure. TEST_F(InitGoogleTestTest, BreakOnFailureWithoutValue) { const char* argv[] = { "foo.exe", "--gtest_break_on_failure", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false); } // Tests parsing --gtest_break_on_failure=0. TEST_F(InitGoogleTestTest, BreakOnFailureFalse_0) { const char* argv[] = { "foo.exe", "--gtest_break_on_failure=0", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); } // Tests parsing --gtest_break_on_failure=f. TEST_F(InitGoogleTestTest, BreakOnFailureFalse_f) { const char* argv[] = { "foo.exe", "--gtest_break_on_failure=f", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); } // Tests parsing --gtest_break_on_failure=F. TEST_F(InitGoogleTestTest, BreakOnFailureFalse_F) { const char* argv[] = { "foo.exe", "--gtest_break_on_failure=F", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false); } // Tests parsing a --gtest_break_on_failure flag that has a "true" // definition. TEST_F(InitGoogleTestTest, BreakOnFailureTrue) { const char* argv[] = { "foo.exe", "--gtest_break_on_failure=1", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false); } // Tests parsing --gtest_catch_exceptions. TEST_F(InitGoogleTestTest, CatchExceptions) { const char* argv[] = { "foo.exe", "--gtest_catch_exceptions", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::CatchExceptions(true), false); } // Tests parsing --gtest_death_test_use_fork. TEST_F(InitGoogleTestTest, DeathTestUseFork) { const char* argv[] = { "foo.exe", "--gtest_death_test_use_fork", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::DeathTestUseFork(true), false); } // Tests having the same flag twice with different values. The // expected behavior is that the one coming last takes precedence. TEST_F(InitGoogleTestTest, DuplicatedFlags) { const char* argv[] = { "foo.exe", "--gtest_filter=a", "--gtest_filter=b", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("b"), false); } // Tests having an unrecognized flag on the command line. TEST_F(InitGoogleTestTest, UnrecognizedFlag) { const char* argv[] = { "foo.exe", "--gtest_break_on_failure", "bar", // Unrecognized by Google Test. "--gtest_filter=b", NULL }; const char* argv2[] = { "foo.exe", "bar", NULL }; Flags flags; flags.break_on_failure = true; flags.filter = "b"; GTEST_TEST_PARSING_FLAGS_(argv, argv2, flags, false); } // Tests having a --gtest_list_tests flag TEST_F(InitGoogleTestTest, ListTestsFlag) { const char* argv[] = { "foo.exe", "--gtest_list_tests", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false); } // Tests having a --gtest_list_tests flag with a "true" value TEST_F(InitGoogleTestTest, ListTestsTrue) { const char* argv[] = { "foo.exe", "--gtest_list_tests=1", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false); } // Tests having a --gtest_list_tests flag with a "false" value TEST_F(InitGoogleTestTest, ListTestsFalse) { const char* argv[] = { "foo.exe", "--gtest_list_tests=0", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); } // Tests parsing --gtest_list_tests=f. TEST_F(InitGoogleTestTest, ListTestsFalse_f) { const char* argv[] = { "foo.exe", "--gtest_list_tests=f", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); } // Tests parsing --gtest_list_tests=F. TEST_F(InitGoogleTestTest, ListTestsFalse_F) { const char* argv[] = { "foo.exe", "--gtest_list_tests=F", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false); } // Tests parsing --gtest_output (invalid). TEST_F(InitGoogleTestTest, OutputEmpty) { const char* argv[] = { "foo.exe", "--gtest_output", NULL }; const char* argv2[] = { "foo.exe", "--gtest_output", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), true); } // Tests parsing --gtest_output=xml TEST_F(InitGoogleTestTest, OutputXml) { const char* argv[] = { "foo.exe", "--gtest_output=xml", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml"), false); } // Tests parsing --gtest_output=xml:file TEST_F(InitGoogleTestTest, OutputXmlFile) { const char* argv[] = { "foo.exe", "--gtest_output=xml:file", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml:file"), false); } // Tests parsing --gtest_output=xml:directory/path/ TEST_F(InitGoogleTestTest, OutputXmlDirectory) { const char* argv[] = { "foo.exe", "--gtest_output=xml:directory/path/", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml:directory/path/"), false); } // Tests having a --gtest_print_time flag TEST_F(InitGoogleTestTest, PrintTimeFlag) { const char* argv[] = { "foo.exe", "--gtest_print_time", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false); } // Tests having a --gtest_print_time flag with a "true" value TEST_F(InitGoogleTestTest, PrintTimeTrue) { const char* argv[] = { "foo.exe", "--gtest_print_time=1", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false); } // Tests having a --gtest_print_time flag with a "false" value TEST_F(InitGoogleTestTest, PrintTimeFalse) { const char* argv[] = { "foo.exe", "--gtest_print_time=0", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); } // Tests parsing --gtest_print_time=f. TEST_F(InitGoogleTestTest, PrintTimeFalse_f) { const char* argv[] = { "foo.exe", "--gtest_print_time=f", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); } // Tests parsing --gtest_print_time=F. TEST_F(InitGoogleTestTest, PrintTimeFalse_F) { const char* argv[] = { "foo.exe", "--gtest_print_time=F", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false); } // Tests parsing --gtest_random_seed=number TEST_F(InitGoogleTestTest, RandomSeed) { const char* argv[] = { "foo.exe", "--gtest_random_seed=1000", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::RandomSeed(1000), false); } // Tests parsing --gtest_repeat=number TEST_F(InitGoogleTestTest, Repeat) { const char* argv[] = { "foo.exe", "--gtest_repeat=1000", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Repeat(1000), false); } // Tests having a --gtest_also_run_disabled_tests flag TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFlag) { const char* argv[] = { "foo.exe", "--gtest_also_run_disabled_tests", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::AlsoRunDisabledTests(true), false); } // Tests having a --gtest_also_run_disabled_tests flag with a "true" value TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsTrue) { const char* argv[] = { "foo.exe", "--gtest_also_run_disabled_tests=1", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::AlsoRunDisabledTests(true), false); } // Tests having a --gtest_also_run_disabled_tests flag with a "false" value TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFalse) { const char* argv[] = { "foo.exe", "--gtest_also_run_disabled_tests=0", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::AlsoRunDisabledTests(false), false); } // Tests parsing --gtest_shuffle. TEST_F(InitGoogleTestTest, ShuffleWithoutValue) { const char* argv[] = { "foo.exe", "--gtest_shuffle", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false); } // Tests parsing --gtest_shuffle=0. TEST_F(InitGoogleTestTest, ShuffleFalse_0) { const char* argv[] = { "foo.exe", "--gtest_shuffle=0", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(false), false); } // Tests parsing a --gtest_shuffle flag that has a "true" // definition. TEST_F(InitGoogleTestTest, ShuffleTrue) { const char* argv[] = { "foo.exe", "--gtest_shuffle=1", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false); } // Tests parsing --gtest_stack_trace_depth=number. TEST_F(InitGoogleTestTest, StackTraceDepth) { const char* argv[] = { "foo.exe", "--gtest_stack_trace_depth=5", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::StackTraceDepth(5), false); } TEST_F(InitGoogleTestTest, StreamResultTo) { const char* argv[] = { "foo.exe", "--gtest_stream_result_to=localhost:1234", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_( argv, argv2, Flags::StreamResultTo("localhost:1234"), false); } // Tests parsing --gtest_throw_on_failure. TEST_F(InitGoogleTestTest, ThrowOnFailureWithoutValue) { const char* argv[] = { "foo.exe", "--gtest_throw_on_failure", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false); } // Tests parsing --gtest_throw_on_failure=0. TEST_F(InitGoogleTestTest, ThrowOnFailureFalse_0) { const char* argv[] = { "foo.exe", "--gtest_throw_on_failure=0", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(false), false); } // Tests parsing a --gtest_throw_on_failure flag that has a "true" // definition. TEST_F(InitGoogleTestTest, ThrowOnFailureTrue) { const char* argv[] = { "foo.exe", "--gtest_throw_on_failure=1", NULL }; const char* argv2[] = { "foo.exe", NULL }; GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false); } #if GTEST_OS_WINDOWS // Tests parsing wide strings. TEST_F(InitGoogleTestTest, WideStrings) { const wchar_t* argv[] = { L"foo.exe", L"--gtest_filter=Foo*", L"--gtest_list_tests=1", L"--gtest_break_on_failure", L"--non_gtest_flag", NULL }; const wchar_t* argv2[] = { L"foo.exe", L"--non_gtest_flag", NULL }; Flags expected_flags; expected_flags.break_on_failure = true; expected_flags.filter = "Foo*"; expected_flags.list_tests = true; GTEST_TEST_PARSING_FLAGS_(argv, argv2, expected_flags, false); } #endif // GTEST_OS_WINDOWS // Tests current_test_info() in UnitTest. class CurrentTestInfoTest : public Test { protected: // Tests that current_test_info() returns NULL before the first test in // the test case is run. static void SetUpTestCase() { // There should be no tests running at this point. const TestInfo* test_info = UnitTest::GetInstance()->current_test_info(); EXPECT_TRUE(test_info == NULL) << "There should be no tests running at this point."; } // Tests that current_test_info() returns NULL after the last test in // the test case has run. static void TearDownTestCase() { const TestInfo* test_info = UnitTest::GetInstance()->current_test_info(); EXPECT_TRUE(test_info == NULL) << "There should be no tests running at this point."; } }; // Tests that current_test_info() returns TestInfo for currently running // test by checking the expected test name against the actual one. TEST_F(CurrentTestInfoTest, WorksForFirstTestInATestCase) { const TestInfo* test_info = UnitTest::GetInstance()->current_test_info(); ASSERT_TRUE(NULL != test_info) << "There is a test running so we should have a valid TestInfo."; EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name()) << "Expected the name of the currently running test case."; EXPECT_STREQ("WorksForFirstTestInATestCase", test_info->name()) << "Expected the name of the currently running test."; } // Tests that current_test_info() returns TestInfo for currently running // test by checking the expected test name against the actual one. We // use this test to see that the TestInfo object actually changed from // the previous invocation. TEST_F(CurrentTestInfoTest, WorksForSecondTestInATestCase) { const TestInfo* test_info = UnitTest::GetInstance()->current_test_info(); ASSERT_TRUE(NULL != test_info) << "There is a test running so we should have a valid TestInfo."; EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name()) << "Expected the name of the currently running test case."; EXPECT_STREQ("WorksForSecondTestInATestCase", test_info->name()) << "Expected the name of the currently running test."; } } // namespace testing // These two lines test that we can define tests in a namespace that // has the name "testing" and is nested in another namespace. namespace my_namespace { namespace testing { // Makes sure that TEST knows to use ::testing::Test instead of // ::my_namespace::testing::Test. class Test {}; // Makes sure that an assertion knows to use ::testing::Message instead of // ::my_namespace::testing::Message. class Message {}; // Makes sure that an assertion knows to use // ::testing::AssertionResult instead of // ::my_namespace::testing::AssertionResult. class AssertionResult {}; // Tests that an assertion that should succeed works as expected. TEST(NestedTestingNamespaceTest, Success) { EXPECT_EQ(1, 1) << "This shouldn't fail."; } // Tests that an assertion that should fail works as expected. TEST(NestedTestingNamespaceTest, Failure) { EXPECT_FATAL_FAILURE(FAIL() << "This failure is expected.", "This failure is expected."); } } // namespace testing } // namespace my_namespace // Tests that one can call superclass SetUp and TearDown methods-- // that is, that they are not private. // No tests are based on this fixture; the test "passes" if it compiles // successfully. class ProtectedFixtureMethodsTest : public Test { protected: virtual void SetUp() { Test::SetUp(); } virtual void TearDown() { Test::TearDown(); } }; // StreamingAssertionsTest tests the streaming versions of a representative // sample of assertions. TEST(StreamingAssertionsTest, Unconditional) { SUCCEED() << "expected success"; EXPECT_NONFATAL_FAILURE(ADD_FAILURE() << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(FAIL() << "expected failure", "expected failure"); } #ifdef __BORLANDC__ // Silences warnings: "Condition is always true", "Unreachable code" # pragma option push -w-ccc -w-rch #endif TEST(StreamingAssertionsTest, Truth) { EXPECT_TRUE(true) << "unexpected failure"; ASSERT_TRUE(true) << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_TRUE(false) << "expected failure", "expected failure"); } TEST(StreamingAssertionsTest, Truth2) { EXPECT_FALSE(false) << "unexpected failure"; ASSERT_FALSE(false) << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_FALSE(true) << "expected failure", "expected failure"); } #ifdef __BORLANDC__ // Restores warnings after previous "#pragma option push" supressed them # pragma option pop #endif TEST(StreamingAssertionsTest, IntegerEquals) { EXPECT_EQ(1, 1) << "unexpected failure"; ASSERT_EQ(1, 1) << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_EQ(1, 2) << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_EQ(1, 2) << "expected failure", "expected failure"); } TEST(StreamingAssertionsTest, IntegerLessThan) { EXPECT_LT(1, 2) << "unexpected failure"; ASSERT_LT(1, 2) << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1) << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_LT(2, 1) << "expected failure", "expected failure"); } TEST(StreamingAssertionsTest, StringsEqual) { EXPECT_STREQ("foo", "foo") << "unexpected failure"; ASSERT_STREQ("foo", "foo") << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_STREQ("foo", "bar") << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_STREQ("foo", "bar") << "expected failure", "expected failure"); } TEST(StreamingAssertionsTest, StringsNotEqual) { EXPECT_STRNE("foo", "bar") << "unexpected failure"; ASSERT_STRNE("foo", "bar") << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("foo", "foo") << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_STRNE("foo", "foo") << "expected failure", "expected failure"); } TEST(StreamingAssertionsTest, StringsEqualIgnoringCase) { EXPECT_STRCASEEQ("foo", "FOO") << "unexpected failure"; ASSERT_STRCASEEQ("foo", "FOO") << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ("foo", "bar") << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("foo", "bar") << "expected failure", "expected failure"); } TEST(StreamingAssertionsTest, StringNotEqualIgnoringCase) { EXPECT_STRCASENE("foo", "bar") << "unexpected failure"; ASSERT_STRCASENE("foo", "bar") << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("foo", "FOO") << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("bar", "BAR") << "expected failure", "expected failure"); } TEST(StreamingAssertionsTest, FloatingPointEquals) { EXPECT_FLOAT_EQ(1.0, 1.0) << "unexpected failure"; ASSERT_FLOAT_EQ(1.0, 1.0) << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(0.0, 1.0) << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.0) << "expected failure", "expected failure"); } #if GTEST_HAS_EXCEPTIONS TEST(StreamingAssertionsTest, Throw) { EXPECT_THROW(ThrowAnInteger(), int) << "unexpected failure"; ASSERT_THROW(ThrowAnInteger(), int) << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool) << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_THROW(ThrowAnInteger(), bool) << "expected failure", "expected failure"); } TEST(StreamingAssertionsTest, NoThrow) { EXPECT_NO_THROW(ThrowNothing()) << "unexpected failure"; ASSERT_NO_THROW(ThrowNothing()) << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()) << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()) << "expected failure", "expected failure"); } TEST(StreamingAssertionsTest, AnyThrow) { EXPECT_ANY_THROW(ThrowAnInteger()) << "unexpected failure"; ASSERT_ANY_THROW(ThrowAnInteger()) << "unexpected failure"; EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(ThrowNothing()) << "expected failure", "expected failure"); EXPECT_FATAL_FAILURE(ASSERT_ANY_THROW(ThrowNothing()) << "expected failure", "expected failure"); } #endif // GTEST_HAS_EXCEPTIONS // Tests that Google Test correctly decides whether to use colors in the output. TEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsYes) { GTEST_FLAG(color) = "yes"; SetEnv("TERM", "xterm"); // TERM supports colors. EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. SetEnv("TERM", "dumb"); // TERM doesn't support colors. EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. } TEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsAliasOfYes) { SetEnv("TERM", "dumb"); // TERM doesn't support colors. GTEST_FLAG(color) = "True"; EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. GTEST_FLAG(color) = "t"; EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. GTEST_FLAG(color) = "1"; EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY. } TEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsNo) { GTEST_FLAG(color) = "no"; SetEnv("TERM", "xterm"); // TERM supports colors. EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. SetEnv("TERM", "dumb"); // TERM doesn't support colors. EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. } TEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsInvalid) { SetEnv("TERM", "xterm"); // TERM supports colors. GTEST_FLAG(color) = "F"; EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. GTEST_FLAG(color) = "0"; EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. GTEST_FLAG(color) = "unknown"; EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. } TEST(ColoredOutputTest, UsesColorsWhenStdoutIsTty) { GTEST_FLAG(color) = "auto"; SetEnv("TERM", "xterm"); // TERM supports colors. EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY. EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. } TEST(ColoredOutputTest, UsesColorsWhenTermSupportsColors) { GTEST_FLAG(color) = "auto"; #if GTEST_OS_WINDOWS // On Windows, we ignore the TERM variable as it's usually not set. SetEnv("TERM", "dumb"); EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", ""); EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", "xterm"); EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. #else // On non-Windows platforms, we rely on TERM to determine if the // terminal supports colors. SetEnv("TERM", "dumb"); // TERM doesn't support colors. EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", "emacs"); // TERM doesn't support colors. EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", "vt100"); // TERM doesn't support colors. EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", "xterm-mono"); // TERM doesn't support colors. EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", "xterm"); // TERM supports colors. EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", "xterm-color"); // TERM supports colors. EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", "xterm-256color"); // TERM supports colors. EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", "screen"); // TERM supports colors. EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", "screen-256color"); // TERM supports colors. EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", "linux"); // TERM supports colors. EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. SetEnv("TERM", "cygwin"); // TERM supports colors. EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY. #endif // GTEST_OS_WINDOWS } // Verifies that StaticAssertTypeEq works in a namespace scope. static bool dummy1 GTEST_ATTRIBUTE_UNUSED_ = StaticAssertTypeEq(); static bool dummy2 GTEST_ATTRIBUTE_UNUSED_ = StaticAssertTypeEq(); // Verifies that StaticAssertTypeEq works in a class. template class StaticAssertTypeEqTestHelper { public: StaticAssertTypeEqTestHelper() { StaticAssertTypeEq(); } }; TEST(StaticAssertTypeEqTest, WorksInClass) { StaticAssertTypeEqTestHelper(); } // Verifies that StaticAssertTypeEq works inside a function. typedef int IntAlias; TEST(StaticAssertTypeEqTest, CompilesForEqualTypes) { StaticAssertTypeEq(); StaticAssertTypeEq(); } TEST(GetCurrentOsStackTraceExceptTopTest, ReturnsTheStackTrace) { testing::UnitTest* const unit_test = testing::UnitTest::GetInstance(); // We don't have a stack walker in Google Test yet. EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 0).c_str()); EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 1).c_str()); } TEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsNoFailure) { EXPECT_FALSE(HasNonfatalFailure()); } static void FailFatally() { FAIL(); } TEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsOnlyFatalFailure) { FailFatally(); const bool has_nonfatal_failure = HasNonfatalFailure(); ClearCurrentTestPartResults(); EXPECT_FALSE(has_nonfatal_failure); } TEST(HasNonfatalFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) { ADD_FAILURE(); const bool has_nonfatal_failure = HasNonfatalFailure(); ClearCurrentTestPartResults(); EXPECT_TRUE(has_nonfatal_failure); } TEST(HasNonfatalFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) { FailFatally(); ADD_FAILURE(); const bool has_nonfatal_failure = HasNonfatalFailure(); ClearCurrentTestPartResults(); EXPECT_TRUE(has_nonfatal_failure); } // A wrapper for calling HasNonfatalFailure outside of a test body. static bool HasNonfatalFailureHelper() { return testing::Test::HasNonfatalFailure(); } TEST(HasNonfatalFailureTest, WorksOutsideOfTestBody) { EXPECT_FALSE(HasNonfatalFailureHelper()); } TEST(HasNonfatalFailureTest, WorksOutsideOfTestBody2) { ADD_FAILURE(); const bool has_nonfatal_failure = HasNonfatalFailureHelper(); ClearCurrentTestPartResults(); EXPECT_TRUE(has_nonfatal_failure); } TEST(HasFailureTest, ReturnsFalseWhenThereIsNoFailure) { EXPECT_FALSE(HasFailure()); } TEST(HasFailureTest, ReturnsTrueWhenThereIsFatalFailure) { FailFatally(); const bool has_failure = HasFailure(); ClearCurrentTestPartResults(); EXPECT_TRUE(has_failure); } TEST(HasFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) { ADD_FAILURE(); const bool has_failure = HasFailure(); ClearCurrentTestPartResults(); EXPECT_TRUE(has_failure); } TEST(HasFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) { FailFatally(); ADD_FAILURE(); const bool has_failure = HasFailure(); ClearCurrentTestPartResults(); EXPECT_TRUE(has_failure); } // A wrapper for calling HasFailure outside of a test body. static bool HasFailureHelper() { return testing::Test::HasFailure(); } TEST(HasFailureTest, WorksOutsideOfTestBody) { EXPECT_FALSE(HasFailureHelper()); } TEST(HasFailureTest, WorksOutsideOfTestBody2) { ADD_FAILURE(); const bool has_failure = HasFailureHelper(); ClearCurrentTestPartResults(); EXPECT_TRUE(has_failure); } class TestListener : public EmptyTestEventListener { public: TestListener() : on_start_counter_(NULL), is_destroyed_(NULL) {} TestListener(int* on_start_counter, bool* is_destroyed) : on_start_counter_(on_start_counter), is_destroyed_(is_destroyed) {} virtual ~TestListener() { if (is_destroyed_) *is_destroyed_ = true; } protected: virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { if (on_start_counter_ != NULL) (*on_start_counter_)++; } private: int* on_start_counter_; bool* is_destroyed_; }; // Tests the constructor. TEST(TestEventListenersTest, ConstructionWorks) { TestEventListeners listeners; EXPECT_TRUE(TestEventListenersAccessor::GetRepeater(&listeners) != NULL); EXPECT_TRUE(listeners.default_result_printer() == NULL); EXPECT_TRUE(listeners.default_xml_generator() == NULL); } // Tests that the TestEventListeners destructor deletes all the listeners it // owns. TEST(TestEventListenersTest, DestructionWorks) { bool default_result_printer_is_destroyed = false; bool default_xml_printer_is_destroyed = false; bool extra_listener_is_destroyed = false; TestListener* default_result_printer = new TestListener( NULL, &default_result_printer_is_destroyed); TestListener* default_xml_printer = new TestListener( NULL, &default_xml_printer_is_destroyed); TestListener* extra_listener = new TestListener( NULL, &extra_listener_is_destroyed); { TestEventListeners listeners; TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, default_result_printer); TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, default_xml_printer); listeners.Append(extra_listener); } EXPECT_TRUE(default_result_printer_is_destroyed); EXPECT_TRUE(default_xml_printer_is_destroyed); EXPECT_TRUE(extra_listener_is_destroyed); } // Tests that a listener Append'ed to a TestEventListeners list starts // receiving events. TEST(TestEventListenersTest, Append) { int on_start_counter = 0; bool is_destroyed = false; TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); { TestEventListeners listeners; listeners.Append(listener); TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( *UnitTest::GetInstance()); EXPECT_EQ(1, on_start_counter); } EXPECT_TRUE(is_destroyed); } // Tests that listeners receive events in the order they were appended to // the list, except for *End requests, which must be received in the reverse // order. class SequenceTestingListener : public EmptyTestEventListener { public: SequenceTestingListener(std::vector* vector, const char* id) : vector_(vector), id_(id) {} protected: virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { vector_->push_back(GetEventDescription("OnTestProgramStart")); } virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) { vector_->push_back(GetEventDescription("OnTestProgramEnd")); } virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, int /*iteration*/) { vector_->push_back(GetEventDescription("OnTestIterationStart")); } virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, int /*iteration*/) { vector_->push_back(GetEventDescription("OnTestIterationEnd")); } private: std::string GetEventDescription(const char* method) { Message message; message << id_ << "." << method; return message.GetString(); } std::vector* vector_; const char* const id_; GTEST_DISALLOW_COPY_AND_ASSIGN_(SequenceTestingListener); }; TEST(EventListenerTest, AppendKeepsOrder) { std::vector vec; TestEventListeners listeners; listeners.Append(new SequenceTestingListener(&vec, "1st")); listeners.Append(new SequenceTestingListener(&vec, "2nd")); listeners.Append(new SequenceTestingListener(&vec, "3rd")); TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( *UnitTest::GetInstance()); ASSERT_EQ(3U, vec.size()); EXPECT_STREQ("1st.OnTestProgramStart", vec[0].c_str()); EXPECT_STREQ("2nd.OnTestProgramStart", vec[1].c_str()); EXPECT_STREQ("3rd.OnTestProgramStart", vec[2].c_str()); vec.clear(); TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramEnd( *UnitTest::GetInstance()); ASSERT_EQ(3U, vec.size()); EXPECT_STREQ("3rd.OnTestProgramEnd", vec[0].c_str()); EXPECT_STREQ("2nd.OnTestProgramEnd", vec[1].c_str()); EXPECT_STREQ("1st.OnTestProgramEnd", vec[2].c_str()); vec.clear(); TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationStart( *UnitTest::GetInstance(), 0); ASSERT_EQ(3U, vec.size()); EXPECT_STREQ("1st.OnTestIterationStart", vec[0].c_str()); EXPECT_STREQ("2nd.OnTestIterationStart", vec[1].c_str()); EXPECT_STREQ("3rd.OnTestIterationStart", vec[2].c_str()); vec.clear(); TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationEnd( *UnitTest::GetInstance(), 0); ASSERT_EQ(3U, vec.size()); EXPECT_STREQ("3rd.OnTestIterationEnd", vec[0].c_str()); EXPECT_STREQ("2nd.OnTestIterationEnd", vec[1].c_str()); EXPECT_STREQ("1st.OnTestIterationEnd", vec[2].c_str()); } // Tests that a listener removed from a TestEventListeners list stops receiving // events and is not deleted when the list is destroyed. TEST(TestEventListenersTest, Release) { int on_start_counter = 0; bool is_destroyed = false; // Although Append passes the ownership of this object to the list, // the following calls release it, and we need to delete it before the // test ends. TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); { TestEventListeners listeners; listeners.Append(listener); EXPECT_EQ(listener, listeners.Release(listener)); TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( *UnitTest::GetInstance()); EXPECT_TRUE(listeners.Release(listener) == NULL); } EXPECT_EQ(0, on_start_counter); EXPECT_FALSE(is_destroyed); delete listener; } // Tests that no events are forwarded when event forwarding is disabled. TEST(EventListenerTest, SuppressEventForwarding) { int on_start_counter = 0; TestListener* listener = new TestListener(&on_start_counter, NULL); TestEventListeners listeners; listeners.Append(listener); ASSERT_TRUE(TestEventListenersAccessor::EventForwardingEnabled(listeners)); TestEventListenersAccessor::SuppressEventForwarding(&listeners); ASSERT_FALSE(TestEventListenersAccessor::EventForwardingEnabled(listeners)); TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( *UnitTest::GetInstance()); EXPECT_EQ(0, on_start_counter); } // Tests that events generated by Google Test are not forwarded in // death test subprocesses. TEST(EventListenerDeathTest, EventsNotForwardedInDeathTestSubprecesses) { EXPECT_DEATH_IF_SUPPORTED({ GTEST_CHECK_(TestEventListenersAccessor::EventForwardingEnabled( *GetUnitTestImpl()->listeners())) << "expected failure";}, "expected failure"); } // Tests that a listener installed via SetDefaultResultPrinter() starts // receiving events and is returned via default_result_printer() and that // the previous default_result_printer is removed from the list and deleted. TEST(EventListenerTest, default_result_printer) { int on_start_counter = 0; bool is_destroyed = false; TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); TestEventListeners listeners; TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener); EXPECT_EQ(listener, listeners.default_result_printer()); TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( *UnitTest::GetInstance()); EXPECT_EQ(1, on_start_counter); // Replacing default_result_printer with something else should remove it // from the list and destroy it. TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, NULL); EXPECT_TRUE(listeners.default_result_printer() == NULL); EXPECT_TRUE(is_destroyed); // After broadcasting an event the counter is still the same, indicating // the listener is not in the list anymore. TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( *UnitTest::GetInstance()); EXPECT_EQ(1, on_start_counter); } // Tests that the default_result_printer listener stops receiving events // when removed via Release and that is not owned by the list anymore. TEST(EventListenerTest, RemovingDefaultResultPrinterWorks) { int on_start_counter = 0; bool is_destroyed = false; // Although Append passes the ownership of this object to the list, // the following calls release it, and we need to delete it before the // test ends. TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); { TestEventListeners listeners; TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener); EXPECT_EQ(listener, listeners.Release(listener)); EXPECT_TRUE(listeners.default_result_printer() == NULL); EXPECT_FALSE(is_destroyed); // Broadcasting events now should not affect default_result_printer. TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( *UnitTest::GetInstance()); EXPECT_EQ(0, on_start_counter); } // Destroying the list should not affect the listener now, too. EXPECT_FALSE(is_destroyed); delete listener; } // Tests that a listener installed via SetDefaultXmlGenerator() starts // receiving events and is returned via default_xml_generator() and that // the previous default_xml_generator is removed from the list and deleted. TEST(EventListenerTest, default_xml_generator) { int on_start_counter = 0; bool is_destroyed = false; TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); TestEventListeners listeners; TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener); EXPECT_EQ(listener, listeners.default_xml_generator()); TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( *UnitTest::GetInstance()); EXPECT_EQ(1, on_start_counter); // Replacing default_xml_generator with something else should remove it // from the list and destroy it. TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, NULL); EXPECT_TRUE(listeners.default_xml_generator() == NULL); EXPECT_TRUE(is_destroyed); // After broadcasting an event the counter is still the same, indicating // the listener is not in the list anymore. TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( *UnitTest::GetInstance()); EXPECT_EQ(1, on_start_counter); } // Tests that the default_xml_generator listener stops receiving events // when removed via Release and that is not owned by the list anymore. TEST(EventListenerTest, RemovingDefaultXmlGeneratorWorks) { int on_start_counter = 0; bool is_destroyed = false; // Although Append passes the ownership of this object to the list, // the following calls release it, and we need to delete it before the // test ends. TestListener* listener = new TestListener(&on_start_counter, &is_destroyed); { TestEventListeners listeners; TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener); EXPECT_EQ(listener, listeners.Release(listener)); EXPECT_TRUE(listeners.default_xml_generator() == NULL); EXPECT_FALSE(is_destroyed); // Broadcasting events now should not affect default_xml_generator. TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart( *UnitTest::GetInstance()); EXPECT_EQ(0, on_start_counter); } // Destroying the list should not affect the listener now, too. EXPECT_FALSE(is_destroyed); delete listener; } // Sanity tests to ensure that the alternative, verbose spellings of // some of the macros work. We don't test them thoroughly as that // would be quite involved. Since their implementations are // straightforward, and they are rarely used, we'll just rely on the // users to tell us when they are broken. GTEST_TEST(AlternativeNameTest, Works) { // GTEST_TEST is the same as TEST. GTEST_SUCCEED() << "OK"; // GTEST_SUCCEED is the same as SUCCEED. // GTEST_FAIL is the same as FAIL. EXPECT_FATAL_FAILURE(GTEST_FAIL() << "An expected failure", "An expected failure"); // GTEST_ASSERT_XY is the same as ASSERT_XY. GTEST_ASSERT_EQ(0, 0); EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(0, 1) << "An expected failure", "An expected failure"); EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(1, 0) << "An expected failure", "An expected failure"); GTEST_ASSERT_NE(0, 1); GTEST_ASSERT_NE(1, 0); EXPECT_FATAL_FAILURE(GTEST_ASSERT_NE(0, 0) << "An expected failure", "An expected failure"); GTEST_ASSERT_LE(0, 0); GTEST_ASSERT_LE(0, 1); EXPECT_FATAL_FAILURE(GTEST_ASSERT_LE(1, 0) << "An expected failure", "An expected failure"); GTEST_ASSERT_LT(0, 1); EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(0, 0) << "An expected failure", "An expected failure"); EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(1, 0) << "An expected failure", "An expected failure"); GTEST_ASSERT_GE(0, 0); GTEST_ASSERT_GE(1, 0); EXPECT_FATAL_FAILURE(GTEST_ASSERT_GE(0, 1) << "An expected failure", "An expected failure"); GTEST_ASSERT_GT(1, 0); EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(0, 1) << "An expected failure", "An expected failure"); EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(1, 1) << "An expected failure", "An expected failure"); } // Tests for internal utilities necessary for implementation of the universal // printing. // TODO(vladl@google.com): Find a better home for them. class ConversionHelperBase {}; class ConversionHelperDerived : public ConversionHelperBase {}; // Tests that IsAProtocolMessage::value is a compile-time constant. TEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) { GTEST_COMPILE_ASSERT_(IsAProtocolMessage::value, const_true); GTEST_COMPILE_ASSERT_(!IsAProtocolMessage::value, const_false); } // Tests that IsAProtocolMessage::value is true when T is // proto2::Message or a sub-class of it. TEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAProtocolMessage) { EXPECT_TRUE(IsAProtocolMessage< ::proto2::Message>::value); EXPECT_TRUE(IsAProtocolMessage::value); } // Tests that IsAProtocolMessage::value is false when T is neither // ProtocolMessage nor a sub-class of it. TEST(IsAProtocolMessageTest, ValueIsFalseWhenTypeIsNotAProtocolMessage) { EXPECT_FALSE(IsAProtocolMessage::value); EXPECT_FALSE(IsAProtocolMessage::value); } // Tests that CompileAssertTypesEqual compiles when the type arguments are // equal. TEST(CompileAssertTypesEqual, CompilesWhenTypesAreEqual) { CompileAssertTypesEqual(); CompileAssertTypesEqual(); } // Tests that RemoveReference does not affect non-reference types. TEST(RemoveReferenceTest, DoesNotAffectNonReferenceType) { CompileAssertTypesEqual::type>(); CompileAssertTypesEqual::type>(); } // Tests that RemoveReference removes reference from reference types. TEST(RemoveReferenceTest, RemovesReference) { CompileAssertTypesEqual::type>(); CompileAssertTypesEqual::type>(); } // Tests GTEST_REMOVE_REFERENCE_. template void TestGTestRemoveReference() { CompileAssertTypesEqual(); } TEST(RemoveReferenceTest, MacroVersion) { TestGTestRemoveReference(); TestGTestRemoveReference(); } // Tests that RemoveConst does not affect non-const types. TEST(RemoveConstTest, DoesNotAffectNonConstType) { CompileAssertTypesEqual::type>(); CompileAssertTypesEqual::type>(); } // Tests that RemoveConst removes const from const types. TEST(RemoveConstTest, RemovesConst) { CompileAssertTypesEqual::type>(); CompileAssertTypesEqual::type>(); CompileAssertTypesEqual::type>(); } // Tests GTEST_REMOVE_CONST_. template void TestGTestRemoveConst() { CompileAssertTypesEqual(); } TEST(RemoveConstTest, MacroVersion) { TestGTestRemoveConst(); TestGTestRemoveConst(); TestGTestRemoveConst(); } // Tests GTEST_REMOVE_REFERENCE_AND_CONST_. template void TestGTestRemoveReferenceAndConst() { CompileAssertTypesEqual(); } TEST(RemoveReferenceToConstTest, Works) { TestGTestRemoveReferenceAndConst(); TestGTestRemoveReferenceAndConst(); TestGTestRemoveReferenceAndConst(); TestGTestRemoveReferenceAndConst(); TestGTestRemoveReferenceAndConst(); } // Tests that AddReference does not affect reference types. TEST(AddReferenceTest, DoesNotAffectReferenceType) { CompileAssertTypesEqual::type>(); CompileAssertTypesEqual::type>(); } // Tests that AddReference adds reference to non-reference types. TEST(AddReferenceTest, AddsReference) { CompileAssertTypesEqual::type>(); CompileAssertTypesEqual::type>(); } // Tests GTEST_ADD_REFERENCE_. template void TestGTestAddReference() { CompileAssertTypesEqual(); } TEST(AddReferenceTest, MacroVersion) { TestGTestAddReference(); TestGTestAddReference(); } // Tests GTEST_REFERENCE_TO_CONST_. template void TestGTestReferenceToConst() { CompileAssertTypesEqual(); } TEST(GTestReferenceToConstTest, Works) { TestGTestReferenceToConst(); TestGTestReferenceToConst(); TestGTestReferenceToConst(); TestGTestReferenceToConst(); } // Tests that ImplicitlyConvertible::value is a compile-time constant. TEST(ImplicitlyConvertibleTest, ValueIsCompileTimeConstant) { GTEST_COMPILE_ASSERT_((ImplicitlyConvertible::value), const_true); GTEST_COMPILE_ASSERT_((!ImplicitlyConvertible::value), const_false); } // Tests that ImplicitlyConvertible::value is true when T1 can // be implicitly converted to T2. TEST(ImplicitlyConvertibleTest, ValueIsTrueWhenConvertible) { EXPECT_TRUE((ImplicitlyConvertible::value)); EXPECT_TRUE((ImplicitlyConvertible::value)); EXPECT_TRUE((ImplicitlyConvertible::value)); EXPECT_TRUE((ImplicitlyConvertible::value)); EXPECT_TRUE((ImplicitlyConvertible::value)); EXPECT_TRUE((ImplicitlyConvertible::value)); } // Tests that ImplicitlyConvertible::value is false when T1 // cannot be implicitly converted to T2. TEST(ImplicitlyConvertibleTest, ValueIsFalseWhenNotConvertible) { EXPECT_FALSE((ImplicitlyConvertible::value)); EXPECT_FALSE((ImplicitlyConvertible::value)); EXPECT_FALSE((ImplicitlyConvertible::value)); EXPECT_FALSE((ImplicitlyConvertible::value)); } // Tests IsContainerTest. class NonContainer {}; TEST(IsContainerTestTest, WorksForNonContainer) { EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest(0))); EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest(0))); EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest(0))); } TEST(IsContainerTestTest, WorksForContainer) { EXPECT_EQ(sizeof(IsContainer), sizeof(IsContainerTest >(0))); EXPECT_EQ(sizeof(IsContainer), sizeof(IsContainerTest >(0))); } // Tests ArrayEq(). TEST(ArrayEqTest, WorksForDegeneratedArrays) { EXPECT_TRUE(ArrayEq(5, 5L)); EXPECT_FALSE(ArrayEq('a', 0)); } TEST(ArrayEqTest, WorksForOneDimensionalArrays) { // Note that a and b are distinct but compatible types. const int a[] = { 0, 1 }; long b[] = { 0, 1 }; EXPECT_TRUE(ArrayEq(a, b)); EXPECT_TRUE(ArrayEq(a, 2, b)); b[0] = 2; EXPECT_FALSE(ArrayEq(a, b)); EXPECT_FALSE(ArrayEq(a, 1, b)); } TEST(ArrayEqTest, WorksForTwoDimensionalArrays) { const char a[][3] = { "hi", "lo" }; const char b[][3] = { "hi", "lo" }; const char c[][3] = { "hi", "li" }; EXPECT_TRUE(ArrayEq(a, b)); EXPECT_TRUE(ArrayEq(a, 2, b)); EXPECT_FALSE(ArrayEq(a, c)); EXPECT_FALSE(ArrayEq(a, 2, c)); } // Tests ArrayAwareFind(). TEST(ArrayAwareFindTest, WorksForOneDimensionalArray) { const char a[] = "hello"; EXPECT_EQ(a + 4, ArrayAwareFind(a, a + 5, 'o')); EXPECT_EQ(a + 5, ArrayAwareFind(a, a + 5, 'x')); } TEST(ArrayAwareFindTest, WorksForTwoDimensionalArray) { int a[][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } }; const int b[2] = { 2, 3 }; EXPECT_EQ(a + 1, ArrayAwareFind(a, a + 3, b)); const int c[2] = { 6, 7 }; EXPECT_EQ(a + 3, ArrayAwareFind(a, a + 3, c)); } // Tests CopyArray(). TEST(CopyArrayTest, WorksForDegeneratedArrays) { int n = 0; CopyArray('a', &n); EXPECT_EQ('a', n); } TEST(CopyArrayTest, WorksForOneDimensionalArrays) { const char a[3] = "hi"; int b[3]; #ifndef __BORLANDC__ // C++Builder cannot compile some array size deductions. CopyArray(a, &b); EXPECT_TRUE(ArrayEq(a, b)); #endif int c[3]; CopyArray(a, 3, c); EXPECT_TRUE(ArrayEq(a, c)); } TEST(CopyArrayTest, WorksForTwoDimensionalArrays) { const int a[2][3] = { { 0, 1, 2 }, { 3, 4, 5 } }; int b[2][3]; #ifndef __BORLANDC__ // C++Builder cannot compile some array size deductions. CopyArray(a, &b); EXPECT_TRUE(ArrayEq(a, b)); #endif int c[2][3]; CopyArray(a, 2, c); EXPECT_TRUE(ArrayEq(a, c)); } // Tests NativeArray. TEST(NativeArrayTest, ConstructorFromArrayWorks) { const int a[3] = { 0, 1, 2 }; NativeArray na(a, 3, kReference); EXPECT_EQ(3U, na.size()); EXPECT_EQ(a, na.begin()); } TEST(NativeArrayTest, CreatesAndDeletesCopyOfArrayWhenAskedTo) { typedef int Array[2]; Array* a = new Array[1]; (*a)[0] = 0; (*a)[1] = 1; NativeArray na(*a, 2, kCopy); EXPECT_NE(*a, na.begin()); delete[] a; EXPECT_EQ(0, na.begin()[0]); EXPECT_EQ(1, na.begin()[1]); // We rely on the heap checker to verify that na deletes the copy of // array. } TEST(NativeArrayTest, TypeMembersAreCorrect) { StaticAssertTypeEq::value_type>(); StaticAssertTypeEq::value_type>(); StaticAssertTypeEq::const_iterator>(); StaticAssertTypeEq::const_iterator>(); } TEST(NativeArrayTest, MethodsWork) { const int a[3] = { 0, 1, 2 }; NativeArray na(a, 3, kCopy); ASSERT_EQ(3U, na.size()); EXPECT_EQ(3, na.end() - na.begin()); NativeArray::const_iterator it = na.begin(); EXPECT_EQ(0, *it); ++it; EXPECT_EQ(1, *it); it++; EXPECT_EQ(2, *it); ++it; EXPECT_EQ(na.end(), it); EXPECT_TRUE(na == na); NativeArray na2(a, 3, kReference); EXPECT_TRUE(na == na2); const int b1[3] = { 0, 1, 1 }; const int b2[4] = { 0, 1, 2, 3 }; EXPECT_FALSE(na == NativeArray(b1, 3, kReference)); EXPECT_FALSE(na == NativeArray(b2, 4, kCopy)); } TEST(NativeArrayTest, WorksForTwoDimensionalArray) { const char a[2][3] = { "hi", "lo" }; NativeArray na(a, 2, kReference); ASSERT_EQ(2U, na.size()); EXPECT_EQ(a, na.begin()); } // Tests SkipPrefix(). TEST(SkipPrefixTest, SkipsWhenPrefixMatches) { const char* const str = "hello"; const char* p = str; EXPECT_TRUE(SkipPrefix("", &p)); EXPECT_EQ(str, p); p = str; EXPECT_TRUE(SkipPrefix("hell", &p)); EXPECT_EQ(str + 4, p); } TEST(SkipPrefixTest, DoesNotSkipWhenPrefixDoesNotMatch) { const char* const str = "world"; const char* p = str; EXPECT_FALSE(SkipPrefix("W", &p)); EXPECT_EQ(str, p); p = str; EXPECT_FALSE(SkipPrefix("world!", &p)); EXPECT_EQ(str, p); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_xml_outfile1_test_.cc000066400000000000000000000037331377520261000237360ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: keith.ray@gmail.com (Keith Ray) // // gtest_xml_outfile1_test_ writes some xml via TestProperty used by // gtest_xml_outfiles_test.py #include "gtest/gtest.h" class PropertyOne : public testing::Test { protected: virtual void SetUp() { RecordProperty("SetUpProp", 1); } virtual void TearDown() { RecordProperty("TearDownProp", 1); } }; TEST_F(PropertyOne, TestSomeProperties) { RecordProperty("TestSomeProperty", 1); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_xml_outfile2_test_.cc000066400000000000000000000037331377520261000237370ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: keith.ray@gmail.com (Keith Ray) // // gtest_xml_outfile2_test_ writes some xml via TestProperty used by // gtest_xml_outfiles_test.py #include "gtest/gtest.h" class PropertyTwo : public testing::Test { protected: virtual void SetUp() { RecordProperty("SetUpProp", 2); } virtual void TearDown() { RecordProperty("TearDownProp", 2); } }; TEST_F(PropertyTwo, TestSomeProperties) { RecordProperty("TestSomeProperty", 2); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_xml_outfiles_test.py000077500000000000000000000123341377520261000237440ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2008, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Unit test for the gtest_xml_output module.""" __author__ = "keith.ray@gmail.com (Keith Ray)" import os from xml.dom import minidom, Node import gtest_test_utils import gtest_xml_test_utils GTEST_OUTPUT_SUBDIR = "xml_outfiles" GTEST_OUTPUT_1_TEST = "gtest_xml_outfile1_test_" GTEST_OUTPUT_2_TEST = "gtest_xml_outfile2_test_" EXPECTED_XML_1 = """ """ EXPECTED_XML_2 = """ """ class GTestXMLOutFilesTest(gtest_xml_test_utils.GTestXMLTestCase): """Unit test for Google Test's XML output functionality.""" def setUp(self): # We want the trailing '/' that the last "" provides in os.path.join, for # telling Google Test to create an output directory instead of a single file # for xml output. self.output_dir_ = os.path.join(gtest_test_utils.GetTempDir(), GTEST_OUTPUT_SUBDIR, "") self.DeleteFilesAndDir() def tearDown(self): self.DeleteFilesAndDir() def DeleteFilesAndDir(self): try: os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_1_TEST + ".xml")) except os.error: pass try: os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_2_TEST + ".xml")) except os.error: pass try: os.rmdir(self.output_dir_) except os.error: pass def testOutfile1(self): self._TestOutFile(GTEST_OUTPUT_1_TEST, EXPECTED_XML_1) def testOutfile2(self): self._TestOutFile(GTEST_OUTPUT_2_TEST, EXPECTED_XML_2) def _TestOutFile(self, test_name, expected_xml): gtest_prog_path = gtest_test_utils.GetTestExecutablePath(test_name) command = [gtest_prog_path, "--gtest_output=xml:%s" % self.output_dir_] p = gtest_test_utils.Subprocess(command, working_dir=gtest_test_utils.GetTempDir()) self.assert_(p.exited) self.assertEquals(0, p.exit_code) # TODO(wan@google.com): libtool causes the built test binary to be # named lt-gtest_xml_outfiles_test_ instead of # gtest_xml_outfiles_test_. To account for this possibillity, we # allow both names in the following code. We should remove this # hack when Chandler Carruth's libtool replacement tool is ready. output_file_name1 = test_name + ".xml" output_file1 = os.path.join(self.output_dir_, output_file_name1) output_file_name2 = 'lt-' + output_file_name1 output_file2 = os.path.join(self.output_dir_, output_file_name2) self.assert_(os.path.isfile(output_file1) or os.path.isfile(output_file2), output_file1) expected = minidom.parseString(expected_xml) if os.path.isfile(output_file1): actual = minidom.parse(output_file1) else: actual = minidom.parse(output_file2) self.NormalizeXml(actual.documentElement) self.AssertEquivalentNodes(expected.documentElement, actual.documentElement) expected.unlink() actual.unlink() if __name__ == "__main__": os.environ["GTEST_STACK_TRACE_DEPTH"] = "0" gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_xml_output_unittest.py000077500000000000000000000343641377520261000243610ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2006, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Unit test for the gtest_xml_output module""" __author__ = 'eefacm@gmail.com (Sean Mcafee)' import datetime import errno import os import re import sys from xml.dom import minidom, Node import gtest_test_utils import gtest_xml_test_utils GTEST_FILTER_FLAG = '--gtest_filter' GTEST_LIST_TESTS_FLAG = '--gtest_list_tests' GTEST_OUTPUT_FLAG = "--gtest_output" GTEST_DEFAULT_OUTPUT_FILE = "test_detail.xml" GTEST_PROGRAM_NAME = "gtest_xml_output_unittest_" SUPPORTS_STACK_TRACES = False if SUPPORTS_STACK_TRACES: STACK_TRACE_TEMPLATE = '\nStack trace:\n*' else: STACK_TRACE_TEMPLATE = '' EXPECTED_NON_EMPTY_XML = """ ]]>%(stack)s]]> """ % {'stack': STACK_TRACE_TEMPLATE} EXPECTED_FILTERED_TEST_XML = """ """ EXPECTED_EMPTY_XML = """ """ GTEST_PROGRAM_PATH = gtest_test_utils.GetTestExecutablePath(GTEST_PROGRAM_NAME) SUPPORTS_TYPED_TESTS = 'TypedTest' in gtest_test_utils.Subprocess( [GTEST_PROGRAM_PATH, GTEST_LIST_TESTS_FLAG], capture_stderr=False).output class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase): """ Unit test for Google Test's XML output functionality. """ # This test currently breaks on platforms that do not support typed and # type-parameterized tests, so we don't run it under them. if SUPPORTS_TYPED_TESTS: def testNonEmptyXmlOutput(self): """ Runs a test program that generates a non-empty XML output, and tests that the XML output is expected. """ self._TestXmlOutput(GTEST_PROGRAM_NAME, EXPECTED_NON_EMPTY_XML, 1) def testEmptyXmlOutput(self): """Verifies XML output for a Google Test binary without actual tests. Runs a test program that generates an empty XML output, and tests that the XML output is expected. """ self._TestXmlOutput('gtest_no_test_unittest', EXPECTED_EMPTY_XML, 0) def testTimestampValue(self): """Checks whether the timestamp attribute in the XML output is valid. Runs a test program that generates an empty XML output, and checks if the timestamp attribute in the testsuites tag is valid. """ actual = self._GetXmlOutput('gtest_no_test_unittest', [], 0) date_time_str = actual.documentElement.getAttributeNode('timestamp').value # datetime.strptime() is only available in Python 2.5+ so we have to # parse the expected datetime manually. match = re.match(r'(\d+)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)', date_time_str) self.assertTrue( re.match, 'XML datettime string %s has incorrect format' % date_time_str) date_time_from_xml = datetime.datetime( year=int(match.group(1)), month=int(match.group(2)), day=int(match.group(3)), hour=int(match.group(4)), minute=int(match.group(5)), second=int(match.group(6))) time_delta = abs(datetime.datetime.now() - date_time_from_xml) # timestamp value should be near the current local time self.assertTrue(time_delta < datetime.timedelta(seconds=600), 'time_delta is %s' % time_delta) actual.unlink() def testDefaultOutputFile(self): """ Confirms that Google Test produces an XML output file with the expected default name if no name is explicitly specified. """ output_file = os.path.join(gtest_test_utils.GetTempDir(), GTEST_DEFAULT_OUTPUT_FILE) gtest_prog_path = gtest_test_utils.GetTestExecutablePath( 'gtest_no_test_unittest') try: os.remove(output_file) except OSError, e: if e.errno != errno.ENOENT: raise p = gtest_test_utils.Subprocess( [gtest_prog_path, '%s=xml' % GTEST_OUTPUT_FLAG], working_dir=gtest_test_utils.GetTempDir()) self.assert_(p.exited) self.assertEquals(0, p.exit_code) self.assert_(os.path.isfile(output_file)) def testSuppressedXmlOutput(self): """ Tests that no XML file is generated if the default XML listener is shut down before RUN_ALL_TESTS is invoked. """ xml_path = os.path.join(gtest_test_utils.GetTempDir(), GTEST_PROGRAM_NAME + 'out.xml') if os.path.isfile(xml_path): os.remove(xml_path) command = [GTEST_PROGRAM_PATH, '%s=xml:%s' % (GTEST_OUTPUT_FLAG, xml_path), '--shut_down_xml'] p = gtest_test_utils.Subprocess(command) if p.terminated_by_signal: # p.signal is avalable only if p.terminated_by_signal is True. self.assertFalse( p.terminated_by_signal, '%s was killed by signal %d' % (GTEST_PROGRAM_NAME, p.signal)) else: self.assert_(p.exited) self.assertEquals(1, p.exit_code, "'%s' exited with code %s, which doesn't match " 'the expected exit code %s.' % (command, p.exit_code, 1)) self.assert_(not os.path.isfile(xml_path)) def testFilteredTestXmlOutput(self): """Verifies XML output when a filter is applied. Runs a test program that executes only some tests and verifies that non-selected tests do not show up in the XML output. """ self._TestXmlOutput(GTEST_PROGRAM_NAME, EXPECTED_FILTERED_TEST_XML, 0, extra_args=['%s=SuccessfulTest.*' % GTEST_FILTER_FLAG]) def _GetXmlOutput(self, gtest_prog_name, extra_args, expected_exit_code): """ Returns the xml output generated by running the program gtest_prog_name. Furthermore, the program's exit code must be expected_exit_code. """ xml_path = os.path.join(gtest_test_utils.GetTempDir(), gtest_prog_name + 'out.xml') gtest_prog_path = gtest_test_utils.GetTestExecutablePath(gtest_prog_name) command = ([gtest_prog_path, '%s=xml:%s' % (GTEST_OUTPUT_FLAG, xml_path)] + extra_args) p = gtest_test_utils.Subprocess(command) if p.terminated_by_signal: self.assert_(False, '%s was killed by signal %d' % (gtest_prog_name, p.signal)) else: self.assert_(p.exited) self.assertEquals(expected_exit_code, p.exit_code, "'%s' exited with code %s, which doesn't match " 'the expected exit code %s.' % (command, p.exit_code, expected_exit_code)) actual = minidom.parse(xml_path) return actual def _TestXmlOutput(self, gtest_prog_name, expected_xml, expected_exit_code, extra_args=None): """ Asserts that the XML document generated by running the program gtest_prog_name matches expected_xml, a string containing another XML document. Furthermore, the program's exit code must be expected_exit_code. """ actual = self._GetXmlOutput(gtest_prog_name, extra_args or [], expected_exit_code) expected = minidom.parseString(expected_xml) self.NormalizeXml(actual.documentElement) self.AssertEquivalentNodes(expected.documentElement, actual.documentElement) expected.unlink() actual.unlink() if __name__ == '__main__': os.environ['GTEST_STACK_TRACE_DEPTH'] = '1' gtest_test_utils.Main() dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_xml_output_unittest_.cc000066400000000000000000000137771377520261000244570ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // Author: eefacm@gmail.com (Sean Mcafee) // Unit test for Google Test XML output. // // A user can specify XML output in a Google Test program to run via // either the GTEST_OUTPUT environment variable or the --gtest_output // flag. This is used for testing such functionality. // // This program will be invoked from a Python unit test. Don't run it // directly. #include "gtest/gtest.h" using ::testing::InitGoogleTest; using ::testing::TestEventListeners; using ::testing::TestWithParam; using ::testing::UnitTest; using ::testing::Test; using ::testing::Values; class SuccessfulTest : public Test { }; TEST_F(SuccessfulTest, Succeeds) { SUCCEED() << "This is a success."; ASSERT_EQ(1, 1); } class FailedTest : public Test { }; TEST_F(FailedTest, Fails) { ASSERT_EQ(1, 2); } class DisabledTest : public Test { }; TEST_F(DisabledTest, DISABLED_test_not_run) { FAIL() << "Unexpected failure: Disabled test should not be run"; } TEST(MixedResultTest, Succeeds) { EXPECT_EQ(1, 1); ASSERT_EQ(1, 1); } TEST(MixedResultTest, Fails) { EXPECT_EQ(1, 2); ASSERT_EQ(2, 3); } TEST(MixedResultTest, DISABLED_test) { FAIL() << "Unexpected failure: Disabled test should not be run"; } TEST(XmlQuotingTest, OutputsCData) { FAIL() << "XML output: " ""; } // Helps to test that invalid characters produced by test code do not make // it into the XML file. TEST(InvalidCharactersTest, InvalidCharactersInMessage) { FAIL() << "Invalid characters in brackets [\x1\x2]"; } class PropertyRecordingTest : public Test { public: static void SetUpTestCase() { RecordProperty("SetUpTestCase", "yes"); } static void TearDownTestCase() { RecordProperty("TearDownTestCase", "aye"); } }; TEST_F(PropertyRecordingTest, OneProperty) { RecordProperty("key_1", "1"); } TEST_F(PropertyRecordingTest, IntValuedProperty) { RecordProperty("key_int", 1); } TEST_F(PropertyRecordingTest, ThreeProperties) { RecordProperty("key_1", "1"); RecordProperty("key_2", "2"); RecordProperty("key_3", "3"); } TEST_F(PropertyRecordingTest, TwoValuesForOneKeyUsesLastValue) { RecordProperty("key_1", "1"); RecordProperty("key_1", "2"); } TEST(NoFixtureTest, RecordProperty) { RecordProperty("key", "1"); } void ExternalUtilityThatCallsRecordProperty(const std::string& key, int value) { testing::Test::RecordProperty(key, value); } void ExternalUtilityThatCallsRecordProperty(const std::string& key, const std::string& value) { testing::Test::RecordProperty(key, value); } TEST(NoFixtureTest, ExternalUtilityThatCallsRecordIntValuedProperty) { ExternalUtilityThatCallsRecordProperty("key_for_utility_int", 1); } TEST(NoFixtureTest, ExternalUtilityThatCallsRecordStringValuedProperty) { ExternalUtilityThatCallsRecordProperty("key_for_utility_string", "1"); } // Verifies that the test parameter value is output in the 'value_param' // XML attribute for value-parameterized tests. class ValueParamTest : public TestWithParam {}; TEST_P(ValueParamTest, HasValueParamAttribute) {} TEST_P(ValueParamTest, AnotherTestThatHasValueParamAttribute) {} INSTANTIATE_TEST_CASE_P(Single, ValueParamTest, Values(33, 42)); #if GTEST_HAS_TYPED_TEST // Verifies that the type parameter name is output in the 'type_param' // XML attribute for typed tests. template class TypedTest : public Test {}; typedef testing::Types TypedTestTypes; TYPED_TEST_CASE(TypedTest, TypedTestTypes); TYPED_TEST(TypedTest, HasTypeParamAttribute) {} #endif #if GTEST_HAS_TYPED_TEST_P // Verifies that the type parameter name is output in the 'type_param' // XML attribute for type-parameterized tests. template class TypeParameterizedTestCase : public Test {}; TYPED_TEST_CASE_P(TypeParameterizedTestCase); TYPED_TEST_P(TypeParameterizedTestCase, HasTypeParamAttribute) {} REGISTER_TYPED_TEST_CASE_P(TypeParameterizedTestCase, HasTypeParamAttribute); typedef testing::Types TypeParameterizedTestCaseTypes; INSTANTIATE_TYPED_TEST_CASE_P(Single, TypeParameterizedTestCase, TypeParameterizedTestCaseTypes); #endif int main(int argc, char** argv) { InitGoogleTest(&argc, argv); if (argc > 1 && strcmp(argv[1], "--shut_down_xml") == 0) { TestEventListeners& listeners = UnitTest::GetInstance()->listeners(); delete listeners.Release(listeners.default_xml_generator()); } testing::Test::RecordProperty("ad_hoc_property", "42"); return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/gtest-1.7.0/test/gtest_xml_test_utils.py000077500000000000000000000212541377520261000232530ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2006, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """Unit test utilities for gtest_xml_output""" __author__ = 'eefacm@gmail.com (Sean Mcafee)' import re from xml.dom import minidom, Node import gtest_test_utils GTEST_OUTPUT_FLAG = '--gtest_output' GTEST_DEFAULT_OUTPUT_FILE = 'test_detail.xml' class GTestXMLTestCase(gtest_test_utils.TestCase): """ Base class for tests of Google Test's XML output functionality. """ def AssertEquivalentNodes(self, expected_node, actual_node): """ Asserts that actual_node (a DOM node object) is equivalent to expected_node (another DOM node object), in that either both of them are CDATA nodes and have the same value, or both are DOM elements and actual_node meets all of the following conditions: * It has the same tag name as expected_node. * It has the same set of attributes as expected_node, each with the same value as the corresponding attribute of expected_node. Exceptions are any attribute named "time", which needs only be convertible to a floating-point number and any attribute named "type_param" which only has to be non-empty. * It has an equivalent set of child nodes (including elements and CDATA sections) as expected_node. Note that we ignore the order of the children as they are not guaranteed to be in any particular order. """ if expected_node.nodeType == Node.CDATA_SECTION_NODE: self.assertEquals(Node.CDATA_SECTION_NODE, actual_node.nodeType) self.assertEquals(expected_node.nodeValue, actual_node.nodeValue) return self.assertEquals(Node.ELEMENT_NODE, actual_node.nodeType) self.assertEquals(Node.ELEMENT_NODE, expected_node.nodeType) self.assertEquals(expected_node.tagName, actual_node.tagName) expected_attributes = expected_node.attributes actual_attributes = actual_node .attributes self.assertEquals( expected_attributes.length, actual_attributes.length, 'attribute numbers differ in element %s:\nExpected: %r\nActual: %r' % ( actual_node.tagName, expected_attributes.keys(), actual_attributes.keys())) for i in range(expected_attributes.length): expected_attr = expected_attributes.item(i) actual_attr = actual_attributes.get(expected_attr.name) self.assert_( actual_attr is not None, 'expected attribute %s not found in element %s' % (expected_attr.name, actual_node.tagName)) self.assertEquals( expected_attr.value, actual_attr.value, ' values of attribute %s in element %s differ: %s vs %s' % (expected_attr.name, actual_node.tagName, expected_attr.value, actual_attr.value)) expected_children = self._GetChildren(expected_node) actual_children = self._GetChildren(actual_node) self.assertEquals( len(expected_children), len(actual_children), 'number of child elements differ in element ' + actual_node.tagName) for child_id, child in expected_children.iteritems(): self.assert_(child_id in actual_children, '<%s> is not in <%s> (in element %s)' % (child_id, actual_children, actual_node.tagName)) self.AssertEquivalentNodes(child, actual_children[child_id]) identifying_attribute = { 'testsuites': 'name', 'testsuite': 'name', 'testcase': 'name', 'failure': 'message', } def _GetChildren(self, element): """ Fetches all of the child nodes of element, a DOM Element object. Returns them as the values of a dictionary keyed by the IDs of the children. For , and elements, the ID is the value of their "name" attribute; for elements, it is the value of the "message" attribute; CDATA sections and non-whitespace text nodes are concatenated into a single CDATA section with ID "detail". An exception is raised if any element other than the above four is encountered, if two child elements with the same identifying attributes are encountered, or if any other type of node is encountered. """ children = {} for child in element.childNodes: if child.nodeType == Node.ELEMENT_NODE: self.assert_(child.tagName in self.identifying_attribute, 'Encountered unknown element <%s>' % child.tagName) childID = child.getAttribute(self.identifying_attribute[child.tagName]) self.assert_(childID not in children) children[childID] = child elif child.nodeType in [Node.TEXT_NODE, Node.CDATA_SECTION_NODE]: if 'detail' not in children: if (child.nodeType == Node.CDATA_SECTION_NODE or not child.nodeValue.isspace()): children['detail'] = child.ownerDocument.createCDATASection( child.nodeValue) else: children['detail'].nodeValue += child.nodeValue else: self.fail('Encountered unexpected node type %d' % child.nodeType) return children def NormalizeXml(self, element): """ Normalizes Google Test's XML output to eliminate references to transient information that may change from run to run. * The "time" attribute of , and elements is replaced with a single asterisk, if it contains only digit characters. * The "timestamp" attribute of elements is replaced with a single asterisk, if it contains a valid ISO8601 datetime value. * The "type_param" attribute of elements is replaced with a single asterisk (if it sn non-empty) as it is the type name returned by the compiler and is platform dependent. * The line info reported in the first line of the "message" attribute and CDATA section of elements is replaced with the file's basename and a single asterisk for the line number. * The directory names in file paths are removed. * The stack traces are removed. """ if element.tagName == 'testsuites': timestamp = element.getAttributeNode('timestamp') timestamp.value = re.sub(r'^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d$', '*', timestamp.value) if element.tagName in ('testsuites', 'testsuite', 'testcase'): time = element.getAttributeNode('time') time.value = re.sub(r'^\d+(\.\d+)?$', '*', time.value) type_param = element.getAttributeNode('type_param') if type_param and type_param.value: type_param.value = '*' elif element.tagName == 'failure': source_line_pat = r'^.*[/\\](.*:)\d+\n' # Replaces the source line information with a normalized form. message = element.getAttributeNode('message') message.value = re.sub(source_line_pat, '\\1*\n', message.value) for child in element.childNodes: if child.nodeType == Node.CDATA_SECTION_NODE: # Replaces the source line information with a normalized form. cdata = re.sub(source_line_pat, '\\1*\n', child.nodeValue) # Removes the actual stack trace. child.nodeValue = re.sub(r'\nStack trace:\n(.|\n)*', '', cdata) for child in element.childNodes: if child.nodeType == Node.ELEMENT_NODE: self.NormalizeXml(child) dlt-daemon-2.18.6/gtest-1.7.0/test/production.cc000066400000000000000000000033041377520261000211020ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // This is part of the unit test for include/gtest/gtest_prod.h. #include "production.h" PrivateCode::PrivateCode() : x_(0) {} dlt-daemon-2.18.6/gtest-1.7.0/test/production.h000066400000000000000000000041741377520261000207520ustar00rootroot00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: wan@google.com (Zhanyong Wan) // // This is part of the unit test for include/gtest/gtest_prod.h. #ifndef GTEST_TEST_PRODUCTION_H_ #define GTEST_TEST_PRODUCTION_H_ #include "gtest/gtest_prod.h" class PrivateCode { public: // Declares a friend test that does not use a fixture. FRIEND_TEST(PrivateCodeTest, CanAccessPrivateMembers); // Declares a friend test that uses a fixture. FRIEND_TEST(PrivateCodeFixtureTest, CanAccessPrivateMembers); PrivateCode(); int x() const { return x_; } private: void set_x(int an_x) { x_ = an_x; } int x_; }; #endif // GTEST_TEST_PRODUCTION_H_ dlt-daemon-2.18.6/gtest-1.7.0/xcode/000077500000000000000000000000001377520261000165305ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/xcode/Config/000077500000000000000000000000001377520261000177355ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/xcode/Config/DebugProject.xcconfig000066400000000000000000000017271377520261000240430ustar00rootroot00000000000000// // DebugProject.xcconfig // // These are Debug Configuration project settings for the gtest framework and // examples. It is set in the "Based On:" dropdown in the "Project" info // dialog. // This file is based on the Xcode Configuration files in: // http://code.google.com/p/google-toolbox-for-mac/ // #include "General.xcconfig" // No optimization GCC_OPTIMIZATION_LEVEL = 0 // Deployment postprocessing is what triggers Xcode to strip, turn it off DEPLOYMENT_POSTPROCESSING = NO // Dead code stripping off DEAD_CODE_STRIPPING = NO // Debug symbols should be on obviously GCC_GENERATE_DEBUGGING_SYMBOLS = YES // Define the DEBUG macro in all debug builds OTHER_CFLAGS = $(OTHER_CFLAGS) -DDEBUG=1 // These are turned off to avoid STL incompatibilities with client code // // Turns on special C++ STL checks to "encourage" good STL use // GCC_PREPROCESSOR_DEFINITIONS = $(GCC_PREPROCESSOR_DEFINITIONS) _GLIBCXX_DEBUG_PEDANTIC _GLIBCXX_DEBUG _GLIBCPP_CONCEPT_CHECKS dlt-daemon-2.18.6/gtest-1.7.0/xcode/Config/FrameworkTarget.xcconfig000066400000000000000000000010471377520261000245650ustar00rootroot00000000000000// // FrameworkTarget.xcconfig // // These are Framework target settings for the gtest framework and examples. It // is set in the "Based On:" dropdown in the "Target" info dialog. // This file is based on the Xcode Configuration files in: // http://code.google.com/p/google-toolbox-for-mac/ // // Dynamic libs need to be position independent GCC_DYNAMIC_NO_PIC = NO // Dynamic libs should not have their external symbols stripped. STRIP_STYLE = non-global // Let the user install by specifying the $DSTROOT with xcodebuild SKIP_INSTALL = NO dlt-daemon-2.18.6/gtest-1.7.0/xcode/Config/General.xcconfig000066400000000000000000000022571377520261000230420ustar00rootroot00000000000000// // General.xcconfig // // These are General configuration settings for the gtest framework and // examples. // This file is based on the Xcode Configuration files in: // http://code.google.com/p/google-toolbox-for-mac/ // // Build for PPC and Intel, 32- and 64-bit ARCHS = i386 x86_64 ppc ppc64 // Zerolink prevents link warnings so turn it off ZERO_LINK = NO // Prebinding considered unhelpful in 10.3 and later PREBINDING = NO // Strictest warning policy WARNING_CFLAGS = -Wall -Werror -Wendif-labels -Wnewline-eof -Wno-sign-compare -Wshadow // Work around Xcode bugs by using external strip. See: // http://lists.apple.com/archives/Xcode-users/2006/Feb/msg00050.html SEPARATE_STRIP = YES // Force C99 dialect GCC_C_LANGUAGE_STANDARD = c99 // not sure why apple defaults this on, but it's pretty risky ALWAYS_SEARCH_USER_PATHS = NO // Turn on position dependent code for most cases (overridden where appropriate) GCC_DYNAMIC_NO_PIC = YES // Default SDK and minimum OS version is 10.4 SDKROOT = $(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk MACOSX_DEPLOYMENT_TARGET = 10.4 GCC_VERSION = 4.0 // VERSIONING BUILD SETTINGS (used in Info.plist) GTEST_VERSIONINFO_ABOUT = Š 2008 Google Inc. dlt-daemon-2.18.6/gtest-1.7.0/xcode/Config/ReleaseProject.xcconfig000066400000000000000000000017411377520261000243710ustar00rootroot00000000000000// // ReleaseProject.xcconfig // // These are Release Configuration project settings for the gtest framework // and examples. It is set in the "Based On:" dropdown in the "Project" info // dialog. // This file is based on the Xcode Configuration files in: // http://code.google.com/p/google-toolbox-for-mac/ // #include "General.xcconfig" // subconfig/Release.xcconfig // Optimize for space and size (Apple recommendation) GCC_OPTIMIZATION_LEVEL = s // Deploment postprocessing is what triggers Xcode to strip DEPLOYMENT_POSTPROCESSING = YES // No symbols GCC_GENERATE_DEBUGGING_SYMBOLS = NO // Dead code strip does not affect ObjC code but can help for C DEAD_CODE_STRIPPING = YES // NDEBUG is used by things like assert.h, so define it for general compat. // ASSERT going away in release tends to create unused vars. OTHER_CFLAGS = $(OTHER_CFLAGS) -DNDEBUG=1 -Wno-unused-variable // When we strip we want to strip all symbols in release, but save externals. STRIP_STYLE = all dlt-daemon-2.18.6/gtest-1.7.0/xcode/Config/StaticLibraryTarget.xcconfig000066400000000000000000000011131377520261000253760ustar00rootroot00000000000000// // StaticLibraryTarget.xcconfig // // These are static library target settings for libgtest.a. It // is set in the "Based On:" dropdown in the "Target" info dialog. // This file is based on the Xcode Configuration files in: // http://code.google.com/p/google-toolbox-for-mac/ // // Static libs can be included in bundles so make them position independent GCC_DYNAMIC_NO_PIC = NO // Static libs should not have their internal globals or external symbols // stripped. STRIP_STYLE = debugging // Let the user install by specifying the $DSTROOT with xcodebuild SKIP_INSTALL = NO dlt-daemon-2.18.6/gtest-1.7.0/xcode/Config/TestTarget.xcconfig000066400000000000000000000003561377520261000235510ustar00rootroot00000000000000// // TestTarget.xcconfig // // These are Test target settings for the gtest framework and examples. It // is set in the "Based On:" dropdown in the "Target" info dialog. PRODUCT_NAME = $(TARGET_NAME) HEADER_SEARCH_PATHS = ../include dlt-daemon-2.18.6/gtest-1.7.0/xcode/Resources/000077500000000000000000000000001377520261000205025ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/xcode/Resources/Info.plist000066400000000000000000000017621377520261000224600ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile CFBundleIdentifier com.google.${PRODUCT_NAME} CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType FMWK CFBundleSignature ???? CFBundleVersion GTEST_VERSIONINFO_LONG CFBundleShortVersionString GTEST_VERSIONINFO_SHORT CFBundleGetInfoString ${PRODUCT_NAME} GTEST_VERSIONINFO_LONG, ${GTEST_VERSIONINFO_ABOUT} NSHumanReadableCopyright ${GTEST_VERSIONINFO_ABOUT} CSResourcesFileMapped dlt-daemon-2.18.6/gtest-1.7.0/xcode/Samples/000077500000000000000000000000001377520261000201345ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/xcode/Samples/FrameworkSample/000077500000000000000000000000001377520261000232335ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/xcode/Samples/FrameworkSample/Info.plist000066400000000000000000000015161377520261000252060ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile CFBundleIdentifier com.google.gtest.${PRODUCT_NAME:identifier} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1.0 CSResourcesFileMapped dlt-daemon-2.18.6/gtest-1.7.0/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/000077500000000000000000000000001377520261000303305ustar00rootroot00000000000000project.pbxproj000066400000000000000000000372741377520261000333420ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXAggregateTarget section */ 4024D162113D7D2400C7059E /* Test */ = { isa = PBXAggregateTarget; buildConfigurationList = 4024D169113D7D4600C7059E /* Build configuration list for PBXAggregateTarget "Test" */; buildPhases = ( 4024D161113D7D2400C7059E /* ShellScript */, ); dependencies = ( 4024D166113D7D3100C7059E /* PBXTargetDependency */, ); name = Test; productName = TestAndBuild; }; 4024D1E9113D83FF00C7059E /* TestAndBuild */ = { isa = PBXAggregateTarget; buildConfigurationList = 4024D1F0113D842B00C7059E /* Build configuration list for PBXAggregateTarget "TestAndBuild" */; buildPhases = ( ); dependencies = ( 4024D1ED113D840900C7059E /* PBXTargetDependency */, 4024D1EF113D840D00C7059E /* PBXTargetDependency */, ); name = TestAndBuild; productName = TestAndBuild; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ 3B7EB1250E5AEE3500C7F239 /* widget.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B7EB1230E5AEE3500C7F239 /* widget.cc */; }; 3B7EB1260E5AEE3500C7F239 /* widget.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B7EB1240E5AEE3500C7F239 /* widget.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3B7EB1280E5AEE4600C7F239 /* widget_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B7EB1270E5AEE4600C7F239 /* widget_test.cc */; }; 3B7EB1480E5AF3B400C7F239 /* Widget.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D07F2C80486CC7A007CD1D0 /* Widget.framework */; }; 4024D188113D7D7800C7059E /* libgtest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4024D185113D7D5500C7059E /* libgtest.a */; }; 4024D189113D7D7A00C7059E /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4024D183113D7D5500C7059E /* libgtest_main.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 3B07BDF00E3F3FAE00647869 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0; remoteInfo = gTestExample; }; 4024D165113D7D3100C7059E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 3B07BDE90E3F3F9E00647869; remoteInfo = WidgetFrameworkTest; }; 4024D1EC113D840900C7059E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0; remoteInfo = WidgetFramework; }; 4024D1EE113D840D00C7059E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 4024D162113D7D2400C7059E; remoteInfo = Test; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 3B07BDEA0E3F3F9E00647869 /* WidgetFrameworkTest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = WidgetFrameworkTest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B7EB1230E5AEE3500C7F239 /* widget.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = widget.cc; sourceTree = ""; }; 3B7EB1240E5AEE3500C7F239 /* widget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = widget.h; sourceTree = ""; }; 3B7EB1270E5AEE4600C7F239 /* widget_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = widget_test.cc; sourceTree = ""; }; 4024D183113D7D5500C7059E /* libgtest_main.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgtest_main.a; path = /usr/local/lib/libgtest_main.a; sourceTree = ""; }; 4024D185113D7D5500C7059E /* libgtest.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgtest.a; path = /usr/local/lib/libgtest.a; sourceTree = ""; }; 4024D1E2113D838200C7059E /* runtests.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = runtests.sh; sourceTree = ""; }; 8D07F2C70486CC7A007CD1D0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8D07F2C80486CC7A007CD1D0 /* Widget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Widget.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 3B07BDE80E3F3F9E00647869 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 4024D189113D7D7A00C7059E /* libgtest_main.a in Frameworks */, 4024D188113D7D7800C7059E /* libgtest.a in Frameworks */, 3B7EB1480E5AF3B400C7F239 /* Widget.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 8D07F2C30486CC7A007CD1D0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 034768DDFF38A45A11DB9C8B /* Products */ = { isa = PBXGroup; children = ( 8D07F2C80486CC7A007CD1D0 /* Widget.framework */, 3B07BDEA0E3F3F9E00647869 /* WidgetFrameworkTest */, ); name = Products; sourceTree = ""; }; 0867D691FE84028FC02AAC07 /* gTestExample */ = { isa = PBXGroup; children = ( 4024D1E1113D836C00C7059E /* Scripts */, 08FB77ACFE841707C02AAC07 /* Source */, 089C1665FE841158C02AAC07 /* Resources */, 3B07BE350E4094E400647869 /* Test */, 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, 034768DDFF38A45A11DB9C8B /* Products */, ); name = gTestExample; sourceTree = ""; }; 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( 4024D183113D7D5500C7059E /* libgtest_main.a */, 4024D185113D7D5500C7059E /* libgtest.a */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; 089C1665FE841158C02AAC07 /* Resources */ = { isa = PBXGroup; children = ( 8D07F2C70486CC7A007CD1D0 /* Info.plist */, ); name = Resources; sourceTree = ""; }; 08FB77ACFE841707C02AAC07 /* Source */ = { isa = PBXGroup; children = ( 3B7EB1230E5AEE3500C7F239 /* widget.cc */, 3B7EB1240E5AEE3500C7F239 /* widget.h */, ); name = Source; sourceTree = ""; }; 3B07BE350E4094E400647869 /* Test */ = { isa = PBXGroup; children = ( 3B7EB1270E5AEE4600C7F239 /* widget_test.cc */, ); name = Test; sourceTree = ""; }; 4024D1E1113D836C00C7059E /* Scripts */ = { isa = PBXGroup; children = ( 4024D1E2113D838200C7059E /* runtests.sh */, ); name = Scripts; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 8D07F2BD0486CC7A007CD1D0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 3B7EB1260E5AEE3500C7F239 /* widget.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 3B07BDE90E3F3F9E00647869 /* WidgetFrameworkTest */ = { isa = PBXNativeTarget; buildConfigurationList = 3B07BDF40E3F3FB600647869 /* Build configuration list for PBXNativeTarget "WidgetFrameworkTest" */; buildPhases = ( 3B07BDE70E3F3F9E00647869 /* Sources */, 3B07BDE80E3F3F9E00647869 /* Frameworks */, ); buildRules = ( ); dependencies = ( 3B07BDF10E3F3FAE00647869 /* PBXTargetDependency */, ); name = WidgetFrameworkTest; productName = gTestExampleTest; productReference = 3B07BDEA0E3F3F9E00647869 /* WidgetFrameworkTest */; productType = "com.apple.product-type.tool"; }; 8D07F2BC0486CC7A007CD1D0 /* WidgetFramework */ = { isa = PBXNativeTarget; buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "WidgetFramework" */; buildPhases = ( 8D07F2C10486CC7A007CD1D0 /* Sources */, 8D07F2C30486CC7A007CD1D0 /* Frameworks */, 8D07F2BD0486CC7A007CD1D0 /* Headers */, 8D07F2BF0486CC7A007CD1D0 /* Resources */, 8D07F2C50486CC7A007CD1D0 /* Rez */, ); buildRules = ( ); dependencies = ( ); name = WidgetFramework; productInstallPath = "$(HOME)/Library/Frameworks"; productName = gTestExample; productReference = 8D07F2C80486CC7A007CD1D0 /* Widget.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "WidgetFramework" */; compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* gTestExample */; productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 8D07F2BC0486CC7A007CD1D0 /* WidgetFramework */, 3B07BDE90E3F3F9E00647869 /* WidgetFrameworkTest */, 4024D162113D7D2400C7059E /* Test */, 4024D1E9113D83FF00C7059E /* TestAndBuild */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 8D07F2BF0486CC7A007CD1D0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ 8D07F2C50486CC7A007CD1D0 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 4024D161113D7D2400C7059E /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "/bin/bash $SRCROOT/runtests.sh $BUILT_PRODUCTS_DIR/WidgetFrameworkTest\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 3B07BDE70E3F3F9E00647869 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 3B7EB1280E5AEE4600C7F239 /* widget_test.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 8D07F2C10486CC7A007CD1D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 3B7EB1250E5AEE3500C7F239 /* widget.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 3B07BDF10E3F3FAE00647869 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 8D07F2BC0486CC7A007CD1D0 /* WidgetFramework */; targetProxy = 3B07BDF00E3F3FAE00647869 /* PBXContainerItemProxy */; }; 4024D166113D7D3100C7059E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 3B07BDE90E3F3F9E00647869 /* WidgetFrameworkTest */; targetProxy = 4024D165113D7D3100C7059E /* PBXContainerItemProxy */; }; 4024D1ED113D840900C7059E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 8D07F2BC0486CC7A007CD1D0 /* WidgetFramework */; targetProxy = 4024D1EC113D840900C7059E /* PBXContainerItemProxy */; }; 4024D1EF113D840D00C7059E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4024D162113D7D2400C7059E /* Test */; targetProxy = 4024D1EE113D840D00C7059E /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 3B07BDEC0E3F3F9F00647869 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = WidgetFrameworkTest; }; name = Debug; }; 3B07BDED0E3F3F9F00647869 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = WidgetFrameworkTest; }; name = Release; }; 4024D163113D7D2400C7059E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = TestAndBuild; }; name = Debug; }; 4024D164113D7D2400C7059E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = TestAndBuild; }; name = Release; }; 4024D1EA113D83FF00C7059E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = TestAndBuild; }; name = Debug; }; 4024D1EB113D83FF00C7059E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = TestAndBuild; }; name = Release; }; 4FADC24308B4156D00ABE55E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = Widget; }; name = Debug; }; 4FADC24408B4156D00ABE55E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = Widget; }; name = Release; }; 4FADC24708B4156D00ABE55E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_VERSION = 4.0; SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Debug; }; 4FADC24808B4156D00ABE55E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_VERSION = 4.0; SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 3B07BDF40E3F3FB600647869 /* Build configuration list for PBXNativeTarget "WidgetFrameworkTest" */ = { isa = XCConfigurationList; buildConfigurations = ( 3B07BDEC0E3F3F9F00647869 /* Debug */, 3B07BDED0E3F3F9F00647869 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4024D169113D7D4600C7059E /* Build configuration list for PBXAggregateTarget "Test" */ = { isa = XCConfigurationList; buildConfigurations = ( 4024D163113D7D2400C7059E /* Debug */, 4024D164113D7D2400C7059E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4024D1F0113D842B00C7059E /* Build configuration list for PBXAggregateTarget "TestAndBuild" */ = { isa = XCConfigurationList; buildConfigurations = ( 4024D1EA113D83FF00C7059E /* Debug */, 4024D1EB113D83FF00C7059E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "WidgetFramework" */ = { isa = XCConfigurationList; buildConfigurations = ( 4FADC24308B4156D00ABE55E /* Debug */, 4FADC24408B4156D00ABE55E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "WidgetFramework" */ = { isa = XCConfigurationList; buildConfigurations = ( 4FADC24708B4156D00ABE55E /* Debug */, 4FADC24808B4156D00ABE55E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 0867D690FE84028FC02AAC07 /* Project object */; } dlt-daemon-2.18.6/gtest-1.7.0/xcode/Samples/FrameworkSample/runtests.sh000066400000000000000000000044621377520261000254640ustar00rootroot00000000000000#!/bin/bash # # Copyright 2008, Google Inc. # All rights reserved. # # 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 Google Inc. 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. # Executes the samples and tests for the Google Test Framework. # Help the dynamic linker find the path to the libraries. export DYLD_FRAMEWORK_PATH=$BUILT_PRODUCTS_DIR export DYLD_LIBRARY_PATH=$BUILT_PRODUCTS_DIR # Create some executables. test_executables=$@ # Now execute each one in turn keeping track of how many succeeded and failed. succeeded=0 failed=0 failed_list=() for test in ${test_executables[*]}; do "$test" result=$? if [ $result -eq 0 ]; then succeeded=$(( $succeeded + 1 )) else failed=$(( failed + 1 )) failed_list="$failed_list $test" fi done # Report the successes and failures to the console. echo "Tests complete with $succeeded successes and $failed failures." if [ $failed -ne 0 ]; then echo "The following tests failed:" echo $failed_list fi exit $failed dlt-daemon-2.18.6/gtest-1.7.0/xcode/Samples/FrameworkSample/widget.cc000066400000000000000000000044031377520261000250260ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: preston.a.jackson@gmail.com (Preston Jackson) // // Google Test - FrameworkSample // widget.cc // // Widget is a very simple class used for demonstrating the use of gtest #include "widget.h" Widget::Widget(int number, const std::string& name) : number_(number), name_(name) {} Widget::~Widget() {} float Widget::GetFloatValue() const { return number_; } int Widget::GetIntValue() const { return static_cast(number_); } std::string Widget::GetStringValue() const { return name_; } void Widget::GetCharPtrValue(char* buffer, size_t max_size) const { // Copy the char* representation of name_ into buffer, up to max_size. strncpy(buffer, name_.c_str(), max_size-1); buffer[max_size-1] = '\0'; return; } dlt-daemon-2.18.6/gtest-1.7.0/xcode/Samples/FrameworkSample/widget.h000066400000000000000000000043361377520261000246750ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: preston.a.jackson@gmail.com (Preston Jackson) // // Google Test - FrameworkSample // widget.h // // Widget is a very simple class used for demonstrating the use of gtest. It // simply stores two values a string and an integer, which are returned via // public accessors in multiple forms. #import class Widget { public: Widget(int number, const std::string& name); ~Widget(); // Public accessors to number data float GetFloatValue() const; int GetIntValue() const; // Public accessors to the string data std::string GetStringValue() const; void GetCharPtrValue(char* buffer, size_t max_size) const; private: // Data members float number_; std::string name_; }; dlt-daemon-2.18.6/gtest-1.7.0/xcode/Samples/FrameworkSample/widget_test.cc000066400000000000000000000051551377520261000260720ustar00rootroot00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // 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 Google Inc. 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. // // Author: preston.a.jackson@gmail.com (Preston Jackson) // // Google Test - FrameworkSample // widget_test.cc // // This is a simple test file for the Widget class in the Widget.framework #include #include "gtest/gtest.h" #include // This test verifies that the constructor sets the internal state of the // Widget class correctly. TEST(WidgetInitializerTest, TestConstructor) { Widget widget(1.0f, "name"); EXPECT_FLOAT_EQ(1.0f, widget.GetFloatValue()); EXPECT_EQ(std::string("name"), widget.GetStringValue()); } // This test verifies the conversion of the float and string values to int and // char*, respectively. TEST(WidgetInitializerTest, TestConversion) { Widget widget(1.0f, "name"); EXPECT_EQ(1, widget.GetIntValue()); size_t max_size = 128; char buffer[max_size]; widget.GetCharPtrValue(buffer, max_size); EXPECT_STREQ("name", buffer); } // Use the Google Test main that is linked into the framework. It does something // like this: // int main(int argc, char** argv) { // testing::InitGoogleTest(&argc, argv); // return RUN_ALL_TESTS(); // } dlt-daemon-2.18.6/gtest-1.7.0/xcode/Scripts/000077500000000000000000000000001377520261000201575ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/xcode/Scripts/runtests.sh000066400000000000000000000050331377520261000224030ustar00rootroot00000000000000#!/bin/bash # # Copyright 2008, Google Inc. # All rights reserved. # # 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 Google Inc. 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. # Executes the samples and tests for the Google Test Framework. # Help the dynamic linker find the path to the libraries. export DYLD_FRAMEWORK_PATH=$BUILT_PRODUCTS_DIR export DYLD_LIBRARY_PATH=$BUILT_PRODUCTS_DIR # Create some executables. test_executables=("$BUILT_PRODUCTS_DIR/gtest_unittest-framework" "$BUILT_PRODUCTS_DIR/gtest_unittest" "$BUILT_PRODUCTS_DIR/sample1_unittest-framework" "$BUILT_PRODUCTS_DIR/sample1_unittest-static") # Now execute each one in turn keeping track of how many succeeded and failed. succeeded=0 failed=0 failed_list=() for test in ${test_executables[*]}; do "$test" result=$? if [ $result -eq 0 ]; then succeeded=$(( $succeeded + 1 )) else failed=$(( failed + 1 )) failed_list="$failed_list $test" fi done # Report the successes and failures to the console. echo "Tests complete with $succeeded successes and $failed failures." if [ $failed -ne 0 ]; then echo "The following tests failed:" echo $failed_list fi exit $failed dlt-daemon-2.18.6/gtest-1.7.0/xcode/Scripts/versiongenerate.py000077500000000000000000000106701377520261000237400ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2008, Google Inc. # All rights reserved. # # 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 Google Inc. 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. """A script to prepare version informtion for use the gtest Info.plist file. This script extracts the version information from the configure.ac file and uses it to generate a header file containing the same information. The #defines in this header file will be included in during the generation of the Info.plist of the framework, giving the correct value to the version shown in the Finder. This script makes the following assumptions (these are faults of the script, not problems with the Autoconf): 1. The AC_INIT macro will be contained within the first 1024 characters of configure.ac 2. The version string will be 3 integers separated by periods and will be surrounded by squre brackets, "[" and "]" (e.g. [1.0.1]). The first segment represents the major version, the second represents the minor version and the third represents the fix version. 3. No ")" character exists between the opening "(" and closing ")" of AC_INIT, including in comments and character strings. """ import sys import re # Read the command line argument (the output directory for Version.h) if (len(sys.argv) < 3): print "Usage: versiongenerate.py input_dir output_dir" sys.exit(1) else: input_dir = sys.argv[1] output_dir = sys.argv[2] # Read the first 1024 characters of the configure.ac file config_file = open("%s/configure.ac" % input_dir, 'r') buffer_size = 1024 opening_string = config_file.read(buffer_size) config_file.close() # Extract the version string from the AC_INIT macro # The following init_expression means: # Extract three integers separated by periods and surrounded by squre # brackets(e.g. "[1.0.1]") between "AC_INIT(" and ")". Do not be greedy # (*? is the non-greedy flag) since that would pull in everything between # the first "(" and the last ")" in the file. version_expression = re.compile(r"AC_INIT\(.*?\[(\d+)\.(\d+)\.(\d+)\].*?\)", re.DOTALL) version_values = version_expression.search(opening_string) major_version = version_values.group(1) minor_version = version_values.group(2) fix_version = version_values.group(3) # Write the version information to a header file to be included in the # Info.plist file. file_data = """// // DO NOT MODIFY THIS FILE (but you can delete it) // // This file is autogenerated by the versiongenerate.py script. This script // is executed in a "Run Script" build phase when creating gtest.framework. This // header file is not used during compilation of C-source. Rather, it simply // defines some version strings for substitution in the Info.plist. Because of // this, we are not not restricted to C-syntax nor are we using include guards. // #define GTEST_VERSIONINFO_SHORT %s.%s #define GTEST_VERSIONINFO_LONG %s.%s.%s """ % (major_version, minor_version, major_version, minor_version, fix_version) version_file = open("%s/Version.h" % output_dir, 'w') version_file.write(file_data) version_file.close() dlt-daemon-2.18.6/gtest-1.7.0/xcode/gtest.xcodeproj/000077500000000000000000000000001377520261000216525ustar00rootroot00000000000000dlt-daemon-2.18.6/gtest-1.7.0/xcode/gtest.xcodeproj/project.pbxproj000066400000000000000000001434341377520261000247370ustar00rootroot00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXAggregateTarget section */ 3B238F5F0E828B5400846E11 /* Check */ = { isa = PBXAggregateTarget; buildConfigurationList = 3B238FA30E828BB600846E11 /* Build configuration list for PBXAggregateTarget "Check" */; buildPhases = ( 3B238F5E0E828B5400846E11 /* ShellScript */, ); dependencies = ( 40899F9D0FFA740F000B29AE /* PBXTargetDependency */, 40C849F7101A43440083642A /* PBXTargetDependency */, 4089A0980FFAD34A000B29AE /* PBXTargetDependency */, 40C849F9101A43490083642A /* PBXTargetDependency */, ); name = Check; productName = Check; }; 40C44ADC0E3798F4008FCC51 /* Version Info */ = { isa = PBXAggregateTarget; buildConfigurationList = 40C44AE40E379905008FCC51 /* Build configuration list for PBXAggregateTarget "Version Info" */; buildPhases = ( 40C44ADB0E3798F4008FCC51 /* Generate Version.h */, ); comments = "The generation of Version.h must be performed in its own target. Since the Info.plist is preprocessed before any of the other build phases in gtest, the Version.h file would not be ready if included as a build phase of that target."; dependencies = ( ); name = "Version Info"; productName = Version.h; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ 224A12A30E9EADCC00BD17FD /* gtest-test-part.h in Headers */ = {isa = PBXBuildFile; fileRef = 224A12A20E9EADCC00BD17FD /* gtest-test-part.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3BF6F2A00E79B5AD000F2EEE /* gtest-type-util.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 3BF6F29F0E79B5AD000F2EEE /* gtest-type-util.h */; }; 3BF6F2A50E79B616000F2EEE /* gtest-typed-test.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BF6F2A40E79B616000F2EEE /* gtest-typed-test.h */; settings = {ATTRIBUTES = (Public, ); }; }; 404884380E2F799B00CF7658 /* gtest-death-test.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DB0E2F799B00CF7658 /* gtest-death-test.h */; settings = {ATTRIBUTES = (Public, ); }; }; 404884390E2F799B00CF7658 /* gtest-message.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DC0E2F799B00CF7658 /* gtest-message.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4048843A0E2F799B00CF7658 /* gtest-spi.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DD0E2F799B00CF7658 /* gtest-spi.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4048843B0E2F799B00CF7658 /* gtest.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DE0E2F799B00CF7658 /* gtest.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4048843C0E2F799B00CF7658 /* gtest_pred_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DF0E2F799B00CF7658 /* gtest_pred_impl.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4048843D0E2F799B00CF7658 /* gtest_prod.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883E00E2F799B00CF7658 /* gtest_prod.h */; settings = {ATTRIBUTES = (Public, ); }; }; 404884500E2F799B00CF7658 /* README in Resources */ = {isa = PBXBuildFile; fileRef = 404883F60E2F799B00CF7658 /* README */; }; 404884A00E2F7BE600CF7658 /* gtest-death-test-internal.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E20E2F799B00CF7658 /* gtest-death-test-internal.h */; }; 404884A10E2F7BE600CF7658 /* gtest-filepath.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E30E2F799B00CF7658 /* gtest-filepath.h */; }; 404884A20E2F7BE600CF7658 /* gtest-internal.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E40E2F799B00CF7658 /* gtest-internal.h */; }; 404884A30E2F7BE600CF7658 /* gtest-port.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E50E2F799B00CF7658 /* gtest-port.h */; }; 404884A40E2F7BE600CF7658 /* gtest-string.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E60E2F799B00CF7658 /* gtest-string.h */; }; 404884AC0E2F7CD900CF7658 /* CHANGES in Resources */ = {isa = PBXBuildFile; fileRef = 404884A90E2F7CD900CF7658 /* CHANGES */; }; 404884AD0E2F7CD900CF7658 /* CONTRIBUTORS in Resources */ = {isa = PBXBuildFile; fileRef = 404884AA0E2F7CD900CF7658 /* CONTRIBUTORS */; }; 404884AE0E2F7CD900CF7658 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 404884AB0E2F7CD900CF7658 /* LICENSE */; }; 40899F3A0FFA70D4000B29AE /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = 224A12A10E9EADA700BD17FD /* gtest-all.cc */; }; 40899F500FFA7281000B29AE /* gtest-tuple.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 40899F4D0FFA7271000B29AE /* gtest-tuple.h */; }; 40899F530FFA72A0000B29AE /* gtest_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C120E7FE13C00846E11 /* gtest_unittest.cc */; }; 4089A0440FFAD1BE000B29AE /* sample1.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02C0FFACF7F000B29AE /* sample1.cc */; }; 4089A0460FFAD1BE000B29AE /* sample1_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */; }; 40C848FF101A21150083642A /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = 224A12A10E9EADA700BD17FD /* gtest-all.cc */; }; 40C84915101A21DF0083642A /* gtest_main.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4048840D0E2F799B00CF7658 /* gtest_main.cc */; }; 40C84916101A235B0083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; }; 40C84921101A23AD0083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; }; 40C84978101A36540083642A /* libgtest_main.a in Resources */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; }; 40C84980101A36850083642A /* gtest_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C120E7FE13C00846E11 /* gtest_unittest.cc */; }; 40C84982101A36850083642A /* libgtest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C848FA101A209C0083642A /* libgtest.a */; }; 40C84983101A36850083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; }; 40C8498F101A36A60083642A /* sample1.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02C0FFACF7F000B29AE /* sample1.cc */; }; 40C84990101A36A60083642A /* sample1_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */; }; 40C84992101A36A60083642A /* libgtest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C848FA101A209C0083642A /* libgtest.a */; }; 40C84993101A36A60083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; }; 40C849A2101A37050083642A /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; }; 40C849A4101A37150083642A /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; }; 4539C9340EC280AE00A70F4C /* gtest-param-test.h in Headers */ = {isa = PBXBuildFile; fileRef = 4539C9330EC280AE00A70F4C /* gtest-param-test.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4539C9380EC280E200A70F4C /* gtest-linked_ptr.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 4539C9350EC280E200A70F4C /* gtest-linked_ptr.h */; }; 4539C9390EC280E200A70F4C /* gtest-param-util-generated.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 4539C9360EC280E200A70F4C /* gtest-param-util-generated.h */; }; 4539C93A0EC280E200A70F4C /* gtest-param-util.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 4539C9370EC280E200A70F4C /* gtest-param-util.h */; }; 4567C8181264FF71007740BE /* gtest-printers.h in Headers */ = {isa = PBXBuildFile; fileRef = 4567C8171264FF71007740BE /* gtest-printers.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 40899F9C0FFA740F000B29AE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 40899F420FFA7184000B29AE; remoteInfo = gtest_unittest; }; 4089A0970FFAD34A000B29AE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 4089A0120FFACEFC000B29AE; remoteInfo = sample1_unittest; }; 408BEC0F1046CFE900DEF522 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 40C848F9101A209C0083642A; remoteInfo = "gtest-static"; }; 40C44AE50E379922008FCC51 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 40C44ADC0E3798F4008FCC51; remoteInfo = Version.h; }; 40C8497C101A36850083642A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 40C848F9101A209C0083642A; remoteInfo = "gtest-static"; }; 40C8497E101A36850083642A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 40C8490A101A217E0083642A; remoteInfo = "gtest_main-static"; }; 40C8498B101A36A60083642A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 40C848F9101A209C0083642A; remoteInfo = "gtest-static"; }; 40C8498D101A36A60083642A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 40C8490A101A217E0083642A; remoteInfo = "gtest_main-static"; }; 40C8499B101A36DC0083642A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 40C8490A101A217E0083642A; remoteInfo = "gtest_main-static"; }; 40C8499D101A36E50083642A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0; remoteInfo = "gtest-framework"; }; 40C8499F101A36F10083642A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0; remoteInfo = "gtest-framework"; }; 40C849F6101A43440083642A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 40C8497A101A36850083642A; remoteInfo = "gtest_unittest-static"; }; 40C849F8101A43490083642A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 40C84989101A36A60083642A; remoteInfo = "sample1_unittest-static"; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ 404884A50E2F7C0400CF7658 /* Copy Headers Internal */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = Headers/internal; dstSubfolderSpec = 6; files = ( 404884A00E2F7BE600CF7658 /* gtest-death-test-internal.h in Copy Headers Internal */, 404884A10E2F7BE600CF7658 /* gtest-filepath.h in Copy Headers Internal */, 404884A20E2F7BE600CF7658 /* gtest-internal.h in Copy Headers Internal */, 4539C9380EC280E200A70F4C /* gtest-linked_ptr.h in Copy Headers Internal */, 4539C9390EC280E200A70F4C /* gtest-param-util-generated.h in Copy Headers Internal */, 4539C93A0EC280E200A70F4C /* gtest-param-util.h in Copy Headers Internal */, 404884A30E2F7BE600CF7658 /* gtest-port.h in Copy Headers Internal */, 404884A40E2F7BE600CF7658 /* gtest-string.h in Copy Headers Internal */, 40899F500FFA7281000B29AE /* gtest-tuple.h in Copy Headers Internal */, 3BF6F2A00E79B5AD000F2EEE /* gtest-type-util.h in Copy Headers Internal */, ); name = "Copy Headers Internal"; runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 224A12A10E9EADA700BD17FD /* gtest-all.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-all.cc"; sourceTree = ""; }; 224A12A20E9EADCC00BD17FD /* gtest-test-part.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = "gtest-test-part.h"; sourceTree = ""; }; 3B238C120E7FE13C00846E11 /* gtest_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_unittest.cc; sourceTree = ""; }; 3B87D2100E96B92E000D1852 /* runtests.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = runtests.sh; sourceTree = ""; }; 3BF6F29F0E79B5AD000F2EEE /* gtest-type-util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-type-util.h"; sourceTree = ""; }; 3BF6F2A40E79B616000F2EEE /* gtest-typed-test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-typed-test.h"; sourceTree = ""; }; 403EE37C0E377822004BD1E2 /* versiongenerate.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = versiongenerate.py; sourceTree = ""; }; 404883DB0E2F799B00CF7658 /* gtest-death-test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-death-test.h"; sourceTree = ""; }; 404883DC0E2F799B00CF7658 /* gtest-message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-message.h"; sourceTree = ""; }; 404883DD0E2F799B00CF7658 /* gtest-spi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-spi.h"; sourceTree = ""; }; 404883DE0E2F799B00CF7658 /* gtest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gtest.h; sourceTree = ""; }; 404883DF0E2F799B00CF7658 /* gtest_pred_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gtest_pred_impl.h; sourceTree = ""; }; 404883E00E2F799B00CF7658 /* gtest_prod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gtest_prod.h; sourceTree = ""; }; 404883E20E2F799B00CF7658 /* gtest-death-test-internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-death-test-internal.h"; sourceTree = ""; }; 404883E30E2F799B00CF7658 /* gtest-filepath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-filepath.h"; sourceTree = ""; }; 404883E40E2F799B00CF7658 /* gtest-internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-internal.h"; sourceTree = ""; }; 404883E50E2F799B00CF7658 /* gtest-port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-port.h"; sourceTree = ""; }; 404883E60E2F799B00CF7658 /* gtest-string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-string.h"; sourceTree = ""; }; 404883F60E2F799B00CF7658 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README; path = ../README; sourceTree = SOURCE_ROOT; }; 4048840D0E2F799B00CF7658 /* gtest_main.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_main.cc; sourceTree = ""; }; 404884A90E2F7CD900CF7658 /* CHANGES */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CHANGES; path = ../CHANGES; sourceTree = SOURCE_ROOT; }; 404884AA0E2F7CD900CF7658 /* CONTRIBUTORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CONTRIBUTORS; path = ../CONTRIBUTORS; sourceTree = SOURCE_ROOT; }; 404884AB0E2F7CD900CF7658 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = SOURCE_ROOT; }; 40899F430FFA7184000B29AE /* gtest_unittest-framework */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gtest_unittest-framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 40899F4D0FFA7271000B29AE /* gtest-tuple.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-tuple.h"; sourceTree = ""; }; 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = StaticLibraryTarget.xcconfig; sourceTree = ""; }; 4089A0130FFACEFC000B29AE /* sample1_unittest-framework */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "sample1_unittest-framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 4089A02C0FFACF7F000B29AE /* sample1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample1.cc; sourceTree = ""; }; 4089A02D0FFACF7F000B29AE /* sample1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sample1.h; sourceTree = ""; }; 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample1_unittest.cc; sourceTree = ""; }; 40C848FA101A209C0083642A /* libgtest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgtest.a; sourceTree = BUILT_PRODUCTS_DIR; }; 40C8490B101A217E0083642A /* libgtest_main.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgtest_main.a; sourceTree = BUILT_PRODUCTS_DIR; }; 40C84987101A36850083642A /* gtest_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_unittest; sourceTree = BUILT_PRODUCTS_DIR; }; 40C84997101A36A60083642A /* sample1_unittest-static */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "sample1_unittest-static"; sourceTree = BUILT_PRODUCTS_DIR; }; 40D4CDF10E30E07400294801 /* DebugProject.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = DebugProject.xcconfig; sourceTree = ""; }; 40D4CDF20E30E07400294801 /* FrameworkTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = FrameworkTarget.xcconfig; sourceTree = ""; }; 40D4CDF30E30E07400294801 /* General.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = General.xcconfig; sourceTree = ""; }; 40D4CDF40E30E07400294801 /* ReleaseProject.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = ReleaseProject.xcconfig; sourceTree = ""; }; 40D4CF510E30F5E200294801 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 4539C8FF0EC27F6400A70F4C /* gtest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = gtest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4539C9330EC280AE00A70F4C /* gtest-param-test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-param-test.h"; sourceTree = ""; }; 4539C9350EC280E200A70F4C /* gtest-linked_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-linked_ptr.h"; sourceTree = ""; }; 4539C9360EC280E200A70F4C /* gtest-param-util-generated.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-param-util-generated.h"; sourceTree = ""; }; 4539C9370EC280E200A70F4C /* gtest-param-util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-param-util.h"; sourceTree = ""; }; 4567C8171264FF71007740BE /* gtest-printers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-printers.h"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 40899F410FFA7184000B29AE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 40C849A4101A37150083642A /* gtest.framework in Frameworks */, 40C84916101A235B0083642A /* libgtest_main.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 4089A0110FFACEFC000B29AE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 40C849A2101A37050083642A /* gtest.framework in Frameworks */, 40C84921101A23AD0083642A /* libgtest_main.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 40C84981101A36850083642A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 40C84982101A36850083642A /* libgtest.a in Frameworks */, 40C84983101A36850083642A /* libgtest_main.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 40C84991101A36A60083642A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 40C84992101A36A60083642A /* libgtest.a in Frameworks */, 40C84993101A36A60083642A /* libgtest_main.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 034768DDFF38A45A11DB9C8B /* Products */ = { isa = PBXGroup; children = ( 4539C8FF0EC27F6400A70F4C /* gtest.framework */, 40C848FA101A209C0083642A /* libgtest.a */, 40C8490B101A217E0083642A /* libgtest_main.a */, 40899F430FFA7184000B29AE /* gtest_unittest-framework */, 40C84987101A36850083642A /* gtest_unittest */, 4089A0130FFACEFC000B29AE /* sample1_unittest-framework */, 40C84997101A36A60083642A /* sample1_unittest-static */, ); name = Products; sourceTree = ""; }; 0867D691FE84028FC02AAC07 /* gtest */ = { isa = PBXGroup; children = ( 40D4CDF00E30E07400294801 /* Config */, 08FB77ACFE841707C02AAC07 /* Source */, 40D4CF4E0E30F5E200294801 /* Resources */, 403EE37B0E377822004BD1E2 /* Scripts */, 034768DDFF38A45A11DB9C8B /* Products */, ); name = gtest; sourceTree = ""; }; 08FB77ACFE841707C02AAC07 /* Source */ = { isa = PBXGroup; children = ( 404884A90E2F7CD900CF7658 /* CHANGES */, 404884AA0E2F7CD900CF7658 /* CONTRIBUTORS */, 404884AB0E2F7CD900CF7658 /* LICENSE */, 404883F60E2F799B00CF7658 /* README */, 404883D90E2F799B00CF7658 /* include */, 4089A02F0FFACF84000B29AE /* samples */, 404884070E2F799B00CF7658 /* src */, 3B238BF00E7FE13B00846E11 /* test */, ); name = Source; sourceTree = ""; }; 3B238BF00E7FE13B00846E11 /* test */ = { isa = PBXGroup; children = ( 3B238C120E7FE13C00846E11 /* gtest_unittest.cc */, ); name = test; path = ../test; sourceTree = SOURCE_ROOT; }; 403EE37B0E377822004BD1E2 /* Scripts */ = { isa = PBXGroup; children = ( 403EE37C0E377822004BD1E2 /* versiongenerate.py */, 3B87D2100E96B92E000D1852 /* runtests.sh */, ); path = Scripts; sourceTree = ""; }; 404883D90E2F799B00CF7658 /* include */ = { isa = PBXGroup; children = ( 404883DA0E2F799B00CF7658 /* gtest */, ); name = include; path = ../include; sourceTree = SOURCE_ROOT; }; 404883DA0E2F799B00CF7658 /* gtest */ = { isa = PBXGroup; children = ( 404883E10E2F799B00CF7658 /* internal */, 224A12A20E9EADCC00BD17FD /* gtest-test-part.h */, 404883DB0E2F799B00CF7658 /* gtest-death-test.h */, 404883DC0E2F799B00CF7658 /* gtest-message.h */, 4539C9330EC280AE00A70F4C /* gtest-param-test.h */, 4567C8171264FF71007740BE /* gtest-printers.h */, 404883DD0E2F799B00CF7658 /* gtest-spi.h */, 404883DE0E2F799B00CF7658 /* gtest.h */, 404883DF0E2F799B00CF7658 /* gtest_pred_impl.h */, 404883E00E2F799B00CF7658 /* gtest_prod.h */, 3BF6F2A40E79B616000F2EEE /* gtest-typed-test.h */, ); path = gtest; sourceTree = ""; }; 404883E10E2F799B00CF7658 /* internal */ = { isa = PBXGroup; children = ( 404883E20E2F799B00CF7658 /* gtest-death-test-internal.h */, 404883E30E2F799B00CF7658 /* gtest-filepath.h */, 404883E40E2F799B00CF7658 /* gtest-internal.h */, 4539C9350EC280E200A70F4C /* gtest-linked_ptr.h */, 4539C9360EC280E200A70F4C /* gtest-param-util-generated.h */, 4539C9370EC280E200A70F4C /* gtest-param-util.h */, 404883E50E2F799B00CF7658 /* gtest-port.h */, 404883E60E2F799B00CF7658 /* gtest-string.h */, 40899F4D0FFA7271000B29AE /* gtest-tuple.h */, 3BF6F29F0E79B5AD000F2EEE /* gtest-type-util.h */, ); path = internal; sourceTree = ""; }; 404884070E2F799B00CF7658 /* src */ = { isa = PBXGroup; children = ( 224A12A10E9EADA700BD17FD /* gtest-all.cc */, 4048840D0E2F799B00CF7658 /* gtest_main.cc */, ); name = src; path = ../src; sourceTree = SOURCE_ROOT; }; 4089A02F0FFACF84000B29AE /* samples */ = { isa = PBXGroup; children = ( 4089A02C0FFACF7F000B29AE /* sample1.cc */, 4089A02D0FFACF7F000B29AE /* sample1.h */, 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */, ); name = samples; path = ../samples; sourceTree = SOURCE_ROOT; }; 40D4CDF00E30E07400294801 /* Config */ = { isa = PBXGroup; children = ( 40D4CDF10E30E07400294801 /* DebugProject.xcconfig */, 40D4CDF20E30E07400294801 /* FrameworkTarget.xcconfig */, 40D4CDF30E30E07400294801 /* General.xcconfig */, 40D4CDF40E30E07400294801 /* ReleaseProject.xcconfig */, 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */, ); path = Config; sourceTree = ""; }; 40D4CF4E0E30F5E200294801 /* Resources */ = { isa = PBXGroup; children = ( 40D4CF510E30F5E200294801 /* Info.plist */, ); path = Resources; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 8D07F2BD0486CC7A007CD1D0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 404884380E2F799B00CF7658 /* gtest-death-test.h in Headers */, 404884390E2F799B00CF7658 /* gtest-message.h in Headers */, 4539C9340EC280AE00A70F4C /* gtest-param-test.h in Headers */, 4567C8181264FF71007740BE /* gtest-printers.h in Headers */, 3BF6F2A50E79B616000F2EEE /* gtest-typed-test.h in Headers */, 4048843A0E2F799B00CF7658 /* gtest-spi.h in Headers */, 4048843B0E2F799B00CF7658 /* gtest.h in Headers */, 4048843C0E2F799B00CF7658 /* gtest_pred_impl.h in Headers */, 4048843D0E2F799B00CF7658 /* gtest_prod.h in Headers */, 224A12A30E9EADCC00BD17FD /* gtest-test-part.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 40899F420FFA7184000B29AE /* gtest_unittest-framework */ = { isa = PBXNativeTarget; buildConfigurationList = 40899F4A0FFA71BC000B29AE /* Build configuration list for PBXNativeTarget "gtest_unittest-framework" */; buildPhases = ( 40899F400FFA7184000B29AE /* Sources */, 40899F410FFA7184000B29AE /* Frameworks */, ); buildRules = ( ); dependencies = ( 40C849A0101A36F10083642A /* PBXTargetDependency */, ); name = "gtest_unittest-framework"; productName = gtest_unittest; productReference = 40899F430FFA7184000B29AE /* gtest_unittest-framework */; productType = "com.apple.product-type.tool"; }; 4089A0120FFACEFC000B29AE /* sample1_unittest-framework */ = { isa = PBXNativeTarget; buildConfigurationList = 4089A0240FFACF01000B29AE /* Build configuration list for PBXNativeTarget "sample1_unittest-framework" */; buildPhases = ( 4089A0100FFACEFC000B29AE /* Sources */, 4089A0110FFACEFC000B29AE /* Frameworks */, ); buildRules = ( ); dependencies = ( 40C8499E101A36E50083642A /* PBXTargetDependency */, ); name = "sample1_unittest-framework"; productName = sample1_unittest; productReference = 4089A0130FFACEFC000B29AE /* sample1_unittest-framework */; productType = "com.apple.product-type.tool"; }; 40C848F9101A209C0083642A /* gtest-static */ = { isa = PBXNativeTarget; buildConfigurationList = 40C84902101A212E0083642A /* Build configuration list for PBXNativeTarget "gtest-static" */; buildPhases = ( 40C848F7101A209C0083642A /* Sources */, ); buildRules = ( ); dependencies = ( ); name = "gtest-static"; productName = "gtest-static"; productReference = 40C848FA101A209C0083642A /* libgtest.a */; productType = "com.apple.product-type.library.static"; }; 40C8490A101A217E0083642A /* gtest_main-static */ = { isa = PBXNativeTarget; buildConfigurationList = 40C84912101A21D20083642A /* Build configuration list for PBXNativeTarget "gtest_main-static" */; buildPhases = ( 40C84908101A217E0083642A /* Sources */, ); buildRules = ( ); dependencies = ( ); name = "gtest_main-static"; productName = "gtest_main-static"; productReference = 40C8490B101A217E0083642A /* libgtest_main.a */; productType = "com.apple.product-type.library.static"; }; 40C8497A101A36850083642A /* gtest_unittest-static */ = { isa = PBXNativeTarget; buildConfigurationList = 40C84984101A36850083642A /* Build configuration list for PBXNativeTarget "gtest_unittest-static" */; buildPhases = ( 40C8497F101A36850083642A /* Sources */, 40C84981101A36850083642A /* Frameworks */, ); buildRules = ( ); dependencies = ( 40C8497B101A36850083642A /* PBXTargetDependency */, 40C8497D101A36850083642A /* PBXTargetDependency */, ); name = "gtest_unittest-static"; productName = gtest_unittest; productReference = 40C84987101A36850083642A /* gtest_unittest */; productType = "com.apple.product-type.tool"; }; 40C84989101A36A60083642A /* sample1_unittest-static */ = { isa = PBXNativeTarget; buildConfigurationList = 40C84994101A36A60083642A /* Build configuration list for PBXNativeTarget "sample1_unittest-static" */; buildPhases = ( 40C8498E101A36A60083642A /* Sources */, 40C84991101A36A60083642A /* Frameworks */, ); buildRules = ( ); dependencies = ( 40C8498A101A36A60083642A /* PBXTargetDependency */, 40C8498C101A36A60083642A /* PBXTargetDependency */, ); name = "sample1_unittest-static"; productName = sample1_unittest; productReference = 40C84997101A36A60083642A /* sample1_unittest-static */; productType = "com.apple.product-type.tool"; }; 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */ = { isa = PBXNativeTarget; buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "gtest-framework" */; buildPhases = ( 8D07F2C10486CC7A007CD1D0 /* Sources */, 8D07F2BD0486CC7A007CD1D0 /* Headers */, 404884A50E2F7C0400CF7658 /* Copy Headers Internal */, 8D07F2BF0486CC7A007CD1D0 /* Resources */, ); buildRules = ( ); dependencies = ( 40C44AE60E379922008FCC51 /* PBXTargetDependency */, 408BEC101046CFE900DEF522 /* PBXTargetDependency */, 40C8499C101A36DC0083642A /* PBXTargetDependency */, ); name = "gtest-framework"; productInstallPath = "$(HOME)/Library/Frameworks"; productName = gtest; productReference = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0460; }; buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "gtest" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( English, Japanese, French, German, en, ); mainGroup = 0867D691FE84028FC02AAC07 /* gtest */; productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */, 40C848F9101A209C0083642A /* gtest-static */, 40C8490A101A217E0083642A /* gtest_main-static */, 40899F420FFA7184000B29AE /* gtest_unittest-framework */, 40C8497A101A36850083642A /* gtest_unittest-static */, 4089A0120FFACEFC000B29AE /* sample1_unittest-framework */, 40C84989101A36A60083642A /* sample1_unittest-static */, 3B238F5F0E828B5400846E11 /* Check */, 40C44ADC0E3798F4008FCC51 /* Version Info */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 8D07F2BF0486CC7A007CD1D0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 404884500E2F799B00CF7658 /* README in Resources */, 404884AC0E2F7CD900CF7658 /* CHANGES in Resources */, 404884AD0E2F7CD900CF7658 /* CONTRIBUTORS in Resources */, 404884AE0E2F7CD900CF7658 /* LICENSE in Resources */, 40C84978101A36540083642A /* libgtest_main.a in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 3B238F5E0E828B5400846E11 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "# Remember, this \"Run Script\" build phase will be executed from $SRCROOT\n/bin/bash Scripts/runtests.sh"; }; 40C44ADB0E3798F4008FCC51 /* Generate Version.h */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( "$(SRCROOT)/Scripts/versiongenerate.py", "$(SRCROOT)/../configure.ac", ); name = "Generate Version.h"; outputPaths = ( "$(PROJECT_TEMP_DIR)/Version.h", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "# Remember, this \"Run Script\" build phase will be executed from $SRCROOT\n/usr/bin/python Scripts/versiongenerate.py ../ $PROJECT_TEMP_DIR"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 40899F400FFA7184000B29AE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 40899F530FFA72A0000B29AE /* gtest_unittest.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 4089A0100FFACEFC000B29AE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 4089A0440FFAD1BE000B29AE /* sample1.cc in Sources */, 4089A0460FFAD1BE000B29AE /* sample1_unittest.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 40C848F7101A209C0083642A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 40C848FF101A21150083642A /* gtest-all.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 40C84908101A217E0083642A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 40C84915101A21DF0083642A /* gtest_main.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 40C8497F101A36850083642A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 40C84980101A36850083642A /* gtest_unittest.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 40C8498E101A36A60083642A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 40C8498F101A36A60083642A /* sample1.cc in Sources */, 40C84990101A36A60083642A /* sample1_unittest.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 8D07F2C10486CC7A007CD1D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 40899F3A0FFA70D4000B29AE /* gtest-all.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 40899F9D0FFA740F000B29AE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 40899F420FFA7184000B29AE /* gtest_unittest-framework */; targetProxy = 40899F9C0FFA740F000B29AE /* PBXContainerItemProxy */; }; 4089A0980FFAD34A000B29AE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4089A0120FFACEFC000B29AE /* sample1_unittest-framework */; targetProxy = 4089A0970FFAD34A000B29AE /* PBXContainerItemProxy */; }; 408BEC101046CFE900DEF522 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 40C848F9101A209C0083642A /* gtest-static */; targetProxy = 408BEC0F1046CFE900DEF522 /* PBXContainerItemProxy */; }; 40C44AE60E379922008FCC51 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 40C44ADC0E3798F4008FCC51 /* Version Info */; targetProxy = 40C44AE50E379922008FCC51 /* PBXContainerItemProxy */; }; 40C8497B101A36850083642A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 40C848F9101A209C0083642A /* gtest-static */; targetProxy = 40C8497C101A36850083642A /* PBXContainerItemProxy */; }; 40C8497D101A36850083642A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 40C8490A101A217E0083642A /* gtest_main-static */; targetProxy = 40C8497E101A36850083642A /* PBXContainerItemProxy */; }; 40C8498A101A36A60083642A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 40C848F9101A209C0083642A /* gtest-static */; targetProxy = 40C8498B101A36A60083642A /* PBXContainerItemProxy */; }; 40C8498C101A36A60083642A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 40C8490A101A217E0083642A /* gtest_main-static */; targetProxy = 40C8498D101A36A60083642A /* PBXContainerItemProxy */; }; 40C8499C101A36DC0083642A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 40C8490A101A217E0083642A /* gtest_main-static */; targetProxy = 40C8499B101A36DC0083642A /* PBXContainerItemProxy */; }; 40C8499E101A36E50083642A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */; targetProxy = 40C8499D101A36E50083642A /* PBXContainerItemProxy */; }; 40C849A0101A36F10083642A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */; targetProxy = 40C8499F101A36F10083642A /* PBXContainerItemProxy */; }; 40C849F7101A43440083642A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 40C8497A101A36850083642A /* gtest_unittest-static */; targetProxy = 40C849F6101A43440083642A /* PBXContainerItemProxy */; }; 40C849F9101A43490083642A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 40C84989101A36A60083642A /* sample1_unittest-static */; targetProxy = 40C849F8101A43490083642A /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 3B238F600E828B5400846E11 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = Check; SDKROOT = macosx; }; name = Debug; }; 3B238F610E828B5400846E11 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = Check; SDKROOT = macosx; ZERO_LINK = NO; }; name = Release; }; 40899F450FFA7185000B29AE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ../; PRODUCT_NAME = "gtest_unittest-framework"; SDKROOT = macosx; }; name = Debug; }; 40899F460FFA7185000B29AE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ../; PRODUCT_NAME = "gtest_unittest-framework"; SDKROOT = macosx; }; name = Release; }; 4089A0150FFACEFD000B29AE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "sample1_unittest-framework"; SDKROOT = macosx; }; name = Debug; }; 4089A0160FFACEFD000B29AE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "sample1_unittest-framework"; SDKROOT = macosx; }; name = Release; }; 40C44ADF0E3798F4008FCC51 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; MACOSX_DEPLOYMENT_TARGET = 10.7; PRODUCT_NAME = gtest; SDKROOT = macosx; TARGET_NAME = gtest; }; name = Debug; }; 40C44AE00E3798F4008FCC51 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; MACOSX_DEPLOYMENT_TARGET = 10.7; PRODUCT_NAME = gtest; SDKROOT = macosx; TARGET_NAME = gtest; }; name = Release; }; 40C848FB101A209D0083642A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ( ../, ../include/, ); PRODUCT_NAME = gtest; SDKROOT = macosx; }; name = Debug; }; 40C848FC101A209D0083642A /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ( ../, ../include/, ); PRODUCT_NAME = gtest; SDKROOT = macosx; }; name = Release; }; 40C8490E101A217F0083642A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ( ../, ../include/, ); PRODUCT_NAME = gtest_main; SDKROOT = macosx; }; name = Debug; }; 40C8490F101A217F0083642A /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ( ../, ../include/, ); PRODUCT_NAME = gtest_main; SDKROOT = macosx; }; name = Release; }; 40C84985101A36850083642A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ../; PRODUCT_NAME = gtest_unittest; SDKROOT = macosx; }; name = Debug; }; 40C84986101A36850083642A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ../; PRODUCT_NAME = gtest_unittest; SDKROOT = macosx; }; name = Release; }; 40C84995101A36A60083642A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "sample1_unittest-static"; SDKROOT = macosx; }; name = Debug; }; 40C84996101A36A60083642A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "sample1_unittest-static"; SDKROOT = macosx; }; name = Release; }; 4FADC24308B4156D00ABE55E /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 40D4CDF20E30E07400294801 /* FrameworkTarget.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ( ../, ../include/, ); INFOPLIST_FILE = Resources/Info.plist; INFOPLIST_PREFIX_HEADER = "$(PROJECT_TEMP_DIR)/Version.h"; INFOPLIST_PREPROCESS = YES; PRODUCT_NAME = gtest; SDKROOT = macosx; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; }; 4FADC24408B4156D00ABE55E /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 40D4CDF20E30E07400294801 /* FrameworkTarget.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ( ../, ../include/, ); INFOPLIST_FILE = Resources/Info.plist; INFOPLIST_PREFIX_HEADER = "$(PROJECT_TEMP_DIR)/Version.h"; INFOPLIST_PREPROCESS = YES; PRODUCT_NAME = gtest; SDKROOT = macosx; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; }; 4FADC24708B4156D00ABE55E /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 40D4CDF10E30E07400294801 /* DebugProject.xcconfig */; buildSettings = { }; name = Debug; }; 4FADC24808B4156D00ABE55E /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 40D4CDF40E30E07400294801 /* ReleaseProject.xcconfig */; buildSettings = { }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 3B238FA30E828BB600846E11 /* Build configuration list for PBXAggregateTarget "Check" */ = { isa = XCConfigurationList; buildConfigurations = ( 3B238F600E828B5400846E11 /* Debug */, 3B238F610E828B5400846E11 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 40899F4A0FFA71BC000B29AE /* Build configuration list for PBXNativeTarget "gtest_unittest-framework" */ = { isa = XCConfigurationList; buildConfigurations = ( 40899F450FFA7185000B29AE /* Debug */, 40899F460FFA7185000B29AE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4089A0240FFACF01000B29AE /* Build configuration list for PBXNativeTarget "sample1_unittest-framework" */ = { isa = XCConfigurationList; buildConfigurations = ( 4089A0150FFACEFD000B29AE /* Debug */, 4089A0160FFACEFD000B29AE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 40C44AE40E379905008FCC51 /* Build configuration list for PBXAggregateTarget "Version Info" */ = { isa = XCConfigurationList; buildConfigurations = ( 40C44ADF0E3798F4008FCC51 /* Debug */, 40C44AE00E3798F4008FCC51 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 40C84902101A212E0083642A /* Build configuration list for PBXNativeTarget "gtest-static" */ = { isa = XCConfigurationList; buildConfigurations = ( 40C848FB101A209D0083642A /* Debug */, 40C848FC101A209D0083642A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 40C84912101A21D20083642A /* Build configuration list for PBXNativeTarget "gtest_main-static" */ = { isa = XCConfigurationList; buildConfigurations = ( 40C8490E101A217F0083642A /* Debug */, 40C8490F101A217F0083642A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 40C84984101A36850083642A /* Build configuration list for PBXNativeTarget "gtest_unittest-static" */ = { isa = XCConfigurationList; buildConfigurations = ( 40C84985101A36850083642A /* Debug */, 40C84986101A36850083642A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 40C84994101A36A60083642A /* Build configuration list for PBXNativeTarget "sample1_unittest-static" */ = { isa = XCConfigurationList; buildConfigurations = ( 40C84995101A36A60083642A /* Debug */, 40C84996101A36A60083642A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "gtest-framework" */ = { isa = XCConfigurationList; buildConfigurations = ( 4FADC24308B4156D00ABE55E /* Debug */, 4FADC24408B4156D00ABE55E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "gtest" */ = { isa = XCConfigurationList; buildConfigurations = ( 4FADC24708B4156D00ABE55E /* Debug */, 4FADC24808B4156D00ABE55E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 0867D690FE84028FC02AAC07 /* Project object */; } dlt-daemon-2.18.6/include/000077500000000000000000000000001377520261000152625ustar00rootroot00000000000000dlt-daemon-2.18.6/include/CMakeLists.txt000066400000000000000000000007021377520261000200210ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### ADD_SUBDIRECTORY( dlt ) dlt-daemon-2.18.6/include/dlt/000077500000000000000000000000001377520261000160455ustar00rootroot00000000000000dlt-daemon-2.18.6/include/dlt/CMakeLists.txt000066400000000000000000000016741377520261000206150ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### configure_file(dlt_user.h.in dlt_user.h) install(FILES dlt.h dlt_user_macros.h dlt_client.h dlt_protocol.h dlt_common.h dlt_types.h dlt_shm.h dlt_offline_trace.h dlt_filetransfer.h dlt_common_api.h ${CMAKE_CURRENT_BINARY_DIR}/dlt_version.h ${CMAKE_CURRENT_BINARY_DIR}/dlt_user.h DESTINATION include/dlt COMPONENT devel) if(WITH_DLT_CXX11_EXT) install(FILES dlt_cpp_extension.hpp DESTINATION include/dlt COMPONENT devel) endif() dlt-daemon-2.18.6/include/dlt/dlt.h000066400000000000000000000067211377520261000170070ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #ifndef DLT_H #define DLT_H #include "dlt_common.h" #include "dlt_user.h" #endif /* DLT_H */ dlt-daemon-2.18.6/include/dlt/dlt_client.h000066400000000000000000000310331377520261000203370ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_client.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_client.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision$ * $LastChangedDate$ * $LastChangedBy$ */ #ifndef DLT_CLIENT_H # define DLT_CLIENT_H /** * \defgroup clientapi DLT Client API * \addtogroup clientapi \{ */ # include "dlt_types.h" # include "dlt_common.h" typedef enum { DLT_CLIENT_MODE_UNDEFINED = -1, DLT_CLIENT_MODE_TCP, DLT_CLIENT_MODE_SERIAL, DLT_CLIENT_MODE_UNIX, DLT_CLIENT_MODE_UDP_MULTICAST } DltClientMode; typedef struct { DltReceiver receiver; /**< receiver pointer to dlt receiver structure */ int sock; /**< sock Connection handle/socket */ char *servIP; /**< servIP IP adress/Hostname of interface */ char *hostip; /**< hostip IP address of UDP host receiver interface */ int port; /**< Port for TCP connections (optional) */ char *serialDevice; /**< serialDevice Devicename of serial device */ char *socketPath; /**< socketPath Unix socket path */ char ecuid[4]; /**< ECUiD */ speed_t baudrate; /**< baudrate Baudrate of serial interface, as speed_t */ DltClientMode mode; /**< mode DltClientMode */ } DltClient; # ifdef __cplusplus extern "C" { # endif void dlt_client_register_message_callback(int (*registerd_callback)(DltMessage *message, void *data)); /** * Initialising dlt client structure with a specific port * @param client pointer to dlt client structure * @param port The port for the tcp connection * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_client_init_port(DltClient *client, int port, int verbose); /** * Initialising dlt client structure * @param client pointer to dlt client structure * @param verbose if set to true verbose information is printed out. * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_init(DltClient *client, int verbose); /** * Connect to dlt daemon using the information from the dlt client structure * @param client pointer to dlt client structure * @param verbose if set to true verbose information is printed out. * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_connect(DltClient *client, int verbose); /** * Cleanup dlt client structure * @param client pointer to dlt client structure * @param verbose if set to true verbose information is printed out. * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_cleanup(DltClient *client, int verbose); /** * Main Loop of dlt client application * @param client pointer to dlt client structure * @param data pointer to data to be provided to the main loop * @param verbose if set to true verbose information is printed out. * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_main_loop(DltClient *client, void *data, int verbose); /** * Send ancontrol message to the dlt daemon * @param client pointer to dlt client structure * @param apid application id * @param ctid context id * @param payload Buffer filled with control message data * @param size Size of control message data * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_send_ctrl_msg(DltClient *client, char *apid, char *ctid, uint8_t *payload, uint32_t size); /** * Send an injection message to the dlt daemon * @param client pointer to dlt client structure * @param apid application id * @param ctid context id * @param serviceID service id * @param buffer Buffer filled with injection message data * @param size Size of injection data within buffer * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_send_inject_msg(DltClient *client, char *apid, char *ctid, uint32_t serviceID, uint8_t *buffer, uint32_t size); /** * Send an set log level message to the dlt daemon * @param client pointer to dlt client structure * @param apid application id * @param ctid context id * @param logLevel Log Level * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_send_log_level(DltClient *client, char *apid, char *ctid, uint8_t logLevel); /** * Send an request to get log info message to the dlt daemon * @param client pointer to dlt client structure * @return negative value if there was an error */ int dlt_client_get_log_info(DltClient *client); /** * Send an request to get default log level to the dlt daemon * @param client pointer to dlt client structure * @return negative value if there was an error */ DltReturnValue dlt_client_get_default_log_level(DltClient *client); /** * Send an request to get software version to the dlt daemon * @param client pointer to dlt client structure * @return negative value if there was an error */ int dlt_client_get_software_version(DltClient *client); /** * Initialise get log info structure * @return void */ void dlt_getloginfo_init(void); /** * To free the memory allocated for app description in get log info * @return void */ void dlt_getloginfo_free(void); /** * Send a set trace status message to the dlt daemon * @param client pointer to dlt client structure * @param apid application id * @param ctid context id * @param traceStatus Default Trace Status * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_send_trace_status(DltClient *client, char *apid, char *ctid, uint8_t traceStatus); /** * Send the default log level to the dlt daemon * @param client pointer to dlt client structure * @param defaultLogLevel Default Log Level * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_send_default_log_level(DltClient *client, uint8_t defaultLogLevel); /** * Send the log level to all contexts registered with dlt daemon * @param client pointer to dlt client structure * @param LogLevel Log Level to be set * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_send_all_log_level(DltClient *client, uint8_t LogLevel); /** * Send the default trace status to the dlt daemon * @param client pointer to dlt client structure * @param defaultTraceStatus Default Trace Status * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_send_default_trace_status(DltClient *client, uint8_t defaultTraceStatus); /** * Send the trace status to all contexts registered with dlt daemon * @param client pointer to dlt client structure * @param traceStatus trace status to be set * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_send_all_trace_status(DltClient *client, uint8_t traceStatus); /** * Send the timing pakets status to the dlt daemon * @param client pointer to dlt client structure * @param timingPakets Timing pakets enabled * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_send_timing_pakets(DltClient *client, uint8_t timingPakets); /** * Send the store config command to the dlt daemon * @param client pointer to dlt client structure * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_send_store_config(DltClient *client); /** * Send the reset to factory default command to the dlt daemon * @param client pointer to dlt client structure * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_send_reset_to_factory_default(DltClient *client); /** * Set baudrate within dlt client structure * @param client pointer to dlt client structure * @param baudrate Baudrate * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_setbaudrate(DltClient *client, int baudrate); /** * Set mode within dlt client structure * @param client pointer to dlt client structure * @param mode DltClientMode * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_set_mode(DltClient *client, DltClientMode mode); /** * Set server ip * @param client pointer to dlt client structure * @param ipaddr pointer to command line argument * @return negative value if there was an error */ int dlt_client_set_server_ip(DltClient *client, char *ipaddr); /** * Set server UDP host receiver interface address * @param client pointer to dlt client structure * @param hostip pointer to multicast group address * @return negative value if there was an error */ int dlt_client_set_host_if_address(DltClient *client, char *hostip); /** * Set serial device * @param client pointer to dlt client structure * @param serial_device pointer to command line argument * @return negative value if there was an error */ int dlt_client_set_serial_device(DltClient *client, char *serial_device); /** * Set socket path * @param client pointer to dlt client structure * @param socket_path pointer to socket path string * @return negative value if there was an error */ int dlt_client_set_socket_path(DltClient *client, char *socket_path); /** * Parse GET_LOG_INFO response text * @param resp GET_LOG_INFO response * @param resp_text response text represented by ASCII * @return Value from DltReturnValue enum */ DltReturnValue dlt_client_parse_get_log_info_resp_text(DltServiceGetLogInfoResponse *resp, char *resp_text); /** * Free memory allocated for get log info message * @param resp response * @return 0 on success, -1 otherwise */ int dlt_client_cleanup_get_log_info(DltServiceGetLogInfoResponse *resp); # ifdef __cplusplus } # endif /** \} */ #endif /* DLT_CLIENT_H */ dlt-daemon-2.18.6/include/dlt/dlt_common.h000066400000000000000000001666531377520261000203720ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_common.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_common.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #ifndef DLT_COMMON_H # define DLT_COMMON_H /** * \defgroup commonapi DLT Common API * \addtogroup commonapi \{ */ # include # include # ifdef __linux__ # include # include # else # include # endif # if !defined(_MSC_VER) # include # include # endif # if defined(__GNUC__) # define PURE_FUNCTION __attribute__((pure)) # else # define PURE_FUNCTION /* nothing */ # endif # if !defined (__WIN32__) && !defined(_MSC_VER) # include # endif # include "dlt_types.h" # include "dlt_protocol.h" # define DLT_PACKED __attribute__((aligned(1), packed)) # if defined (__MSDOS__) || defined (_MSC_VER) /* set instead /Zp8 flag in Visual C++ configuration */ # undef DLT_PACKED # define DLT_PACKED # endif /* * Macros to swap the byte order. */ # define DLT_SWAP_64(value) ((((uint64_t)DLT_SWAP_32((value) & 0xffffffffull)) << 32) | (DLT_SWAP_32((value) >> 32))) # define DLT_SWAP_16(value) ((((value) >> 8) & 0xff) | (((value) << 8) & 0xff00)) # define DLT_SWAP_32(value) ((((value) >> 24) & 0xff) | (((value) << 8) & 0xff0000) | (((value) >> 8) & 0xff00) | \ (((value) << 24) & 0xff000000)) /* Set Big Endian and Little Endian to a initial value, if not defined */ # if !defined __USE_BSD # ifndef LITTLE_ENDIAN # define LITTLE_ENDIAN 1234 # endif # ifndef BIG_ENDIAN # define BIG_ENDIAN 4321 # endif # endif /* __USE_BSD */ /* If byte order is not defined, default to little endian */ # if !defined __USE_BSD # ifndef BYTE_ORDER # define BYTE_ORDER LITTLE_ENDIAN # endif # endif /* __USE_BSD */ /* Check for byte-order */ # if (BYTE_ORDER == BIG_ENDIAN) /* #warning "Big Endian Architecture!" */ # define DLT_HTOBE_16(x) ((x)) # define DLT_HTOLE_16(x) DLT_SWAP_16((x)) # define DLT_BETOH_16(x) ((x)) # define DLT_LETOH_16(x) DLT_SWAP_16((x)) # define DLT_HTOBE_32(x) ((x)) # define DLT_HTOLE_32(x) DLT_SWAP_32((x)) # define DLT_BETOH_32(x) ((x)) # define DLT_LETOH_32(x) DLT_SWAP_32((x)) # define DLT_HTOBE_64(x) ((x)) # define DLT_HTOLE_64(x) DLT_SWAP_64((x)) # define DLT_BETOH_64(x) ((x)) # define DLT_LETOH_64(x) DLT_SWAP_64((x)) # else /* #warning "Litte Endian Architecture!" */ # define DLT_HTOBE_16(x) DLT_SWAP_16((x)) # define DLT_HTOLE_16(x) ((x)) # define DLT_BETOH_16(x) DLT_SWAP_16((x)) # define DLT_LETOH_16(x) ((x)) # define DLT_HTOBE_32(x) DLT_SWAP_32((x)) # define DLT_HTOLE_32(x) ((x)) # define DLT_BETOH_32(x) DLT_SWAP_32((x)) # define DLT_LETOH_32(x) ((x)) # define DLT_HTOBE_64(x) DLT_SWAP_64((x)) # define DLT_HTOLE_64(x) ((x)) # define DLT_BETOH_64(x) DLT_SWAP_64((x)) # define DLT_LETOH_64(x) ((x)) # endif # define DLT_ENDIAN_GET_16(htyp, x) ((((htyp) & DLT_HTYP_MSBF) > 0) ? DLT_BETOH_16(x) : DLT_LETOH_16(x)) # define DLT_ENDIAN_GET_32(htyp, x) ((((htyp) & DLT_HTYP_MSBF) > 0) ? DLT_BETOH_32(x) : DLT_LETOH_32(x)) # define DLT_ENDIAN_GET_64(htyp, x) ((((htyp) & DLT_HTYP_MSBF) > 0) ? DLT_BETOH_64(x) : DLT_LETOH_64(x)) # if defined (__WIN32__) || defined (_MSC_VER) # define LOG_EMERG 0 # define LOG_ALERT 1 # define LOG_CRIT 2 # define LOG_ERR 3 # define LOG_WARNING 4 # define LOG_NOTICE 5 # define LOG_INFO 6 # define LOG_DEBUG 7 # define LOG_PID 0x01 # define LOG_DAEMON (3 << 3) # endif enum { DLT_LOG_TO_CONSOLE = 0, DLT_LOG_TO_SYSLOG = 1, DLT_LOG_TO_FILE = 2, DLT_LOG_TO_STDERR = 3, DLT_LOG_DROPPED = 4 }; /** * The standard TCP Port used for DLT daemon, can be overwritten via -p \ when starting dlt-daemon */ # define DLT_DAEMON_TCP_PORT 3490 /* Initial value for file descriptor */ # define DLT_FD_INIT -1 /* Minimum value for a file descriptor except the POSIX Standards: stdin=0, stdout=1, stderr=2 */ # define DLT_FD_MINIMUM 3 /** * The size of a DLT ID */ # define DLT_ID_SIZE 4 # define DLT_SIZE_WEID DLT_ID_SIZE # define DLT_SIZE_WSID (sizeof(uint32_t)) # define DLT_SIZE_WTMS (sizeof(uint32_t)) /* Size of buffer for text output */ #define DLT_CONVERT_TEXTBUFSIZE 10024 /** * Definitions for GET_LOG_INFO */ # define DLT_GET_LOG_INFO_HEADER 18 /*Get log info header size in response text */ # define GET_LOG_INFO_LENGTH 13 # define SERVICE_OPT_LENGTH 3 /** * Get the size of extra header parameters, depends on htyp. */ # define DLT_STANDARD_HEADER_EXTRA_SIZE(htyp) ((DLT_IS_HTYP_WEID(htyp) ? DLT_SIZE_WEID : 0) + \ (DLT_IS_HTYP_WSID(htyp) ? DLT_SIZE_WSID : 0) + \ (DLT_IS_HTYP_WTMS(htyp) ? DLT_SIZE_WTMS : 0)) # if defined (__MSDOS__) || defined (_MSC_VER) # define __func__ __FUNCTION__ # endif # define PRINT_FUNCTION_VERBOSE(_verbose) \ { \ if (_verbose) \ { \ dlt_vlog(LOG_INFO, "%s()\n", __func__); \ } \ } # ifndef NULL # define NULL (char *)0 # endif # define DLT_MSG_IS_CONTROL(MSG) ((DLT_IS_HTYP_UEH((MSG)->standardheader->htyp)) && \ (DLT_GET_MSIN_MSTP((MSG)->extendedheader->msin) == DLT_TYPE_CONTROL)) # define DLT_MSG_IS_CONTROL_REQUEST(MSG) ((DLT_IS_HTYP_UEH((MSG)->standardheader->htyp)) && \ (DLT_GET_MSIN_MSTP((MSG)->extendedheader->msin) == DLT_TYPE_CONTROL) && \ (DLT_GET_MSIN_MTIN((MSG)->extendedheader->msin) == DLT_CONTROL_REQUEST)) # define DLT_MSG_IS_CONTROL_RESPONSE(MSG) ((DLT_IS_HTYP_UEH((MSG)->standardheader->htyp)) && \ (DLT_GET_MSIN_MSTP((MSG)->extendedheader->msin) == DLT_TYPE_CONTROL) && \ (DLT_GET_MSIN_MTIN((MSG)->extendedheader->msin) == DLT_CONTROL_RESPONSE)) # define DLT_MSG_IS_CONTROL_TIME(MSG) ((DLT_IS_HTYP_UEH((MSG)->standardheader->htyp)) && \ (DLT_GET_MSIN_MSTP((MSG)->extendedheader->msin) == DLT_TYPE_CONTROL) && \ (DLT_GET_MSIN_MTIN((MSG)->extendedheader->msin) == DLT_CONTROL_TIME)) # define DLT_MSG_IS_NW_TRACE(MSG) ((DLT_IS_HTYP_UEH((MSG)->standardheader->htyp)) && \ (DLT_GET_MSIN_MSTP((MSG)->extendedheader->msin) == DLT_TYPE_NW_TRACE)) # define DLT_MSG_IS_TRACE_MOST(MSG) ((DLT_IS_HTYP_UEH((MSG)->standardheader->htyp)) && \ (DLT_GET_MSIN_MSTP((MSG)->extendedheader->msin) == DLT_TYPE_NW_TRACE) && \ (DLT_GET_MSIN_MTIN((MSG)->extendedheader->msin) == DLT_NW_TRACE_MOST)) # define DLT_MSG_IS_NONVERBOSE(MSG) (!(DLT_IS_HTYP_UEH((MSG)->standardheader->htyp)) || \ ((DLT_IS_HTYP_UEH((MSG)->standardheader->htyp)) && \ (!(DLT_IS_MSIN_VERB((MSG)->extendedheader->msin))))) /* * * Definitions of DLT message buffer overflow */ # define DLT_MESSAGE_BUFFER_NO_OVERFLOW 0x00/**< Buffer overflow has not occured */ # define DLT_MESSAGE_BUFFER_OVERFLOW 0x01/**< Buffer overflow has occured */ /* * Definition of DLT output variants */ # define DLT_OUTPUT_HEX 1 # define DLT_OUTPUT_ASCII 2 # define DLT_OUTPUT_MIXED_FOR_PLAIN 3 # define DLT_OUTPUT_MIXED_FOR_HTML 4 # define DLT_OUTPUT_ASCII_LIMITED 5 # define DLT_FILTER_MAX 30 /**< Maximum number of filters */ # define DLT_MSG_READ_VALUE(dst, src, length, type) \ { \ if ((length < 0) || ((length) < ((int32_t) sizeof(type)))) \ { length = -1; } \ else \ { dst = *((type *)src); src += sizeof(type); length -= (int32_t) sizeof(type); } \ } # define DLT_MSG_READ_ID(dst, src, length) \ { \ if ((length < 0) || ((length) < DLT_ID_SIZE)) \ { length = -1; } \ else \ { memcpy(dst, src, DLT_ID_SIZE); src += DLT_ID_SIZE; length -= DLT_ID_SIZE; } \ } #define DLT_MSG_READ_STRING(dst, src, maxlength, dstlength, length) \ { \ if ((maxlength < 0) || (length <= 0) || (dstlength < length) || (maxlength < length)) \ { \ maxlength = -1; \ } \ else \ { \ memcpy(dst, src, (size_t) length); \ dlt_clean_string(dst, length); \ dst[length] = 0; \ src += length; \ maxlength -= length; \ } \ } # define DLT_MSG_READ_NULL(src, maxlength, length) \ { \ if (((maxlength) < 0) || ((length) < 0) || ((maxlength) < (length))) \ { length = -1; } \ else \ { src += length; maxlength -= length; } \ } # define DLT_HEADER_SHOW_NONE 0x0000 # define DLT_HEADER_SHOW_TIME 0x0001 # define DLT_HEADER_SHOW_TMSTP 0x0002 # define DLT_HEADER_SHOW_MSGCNT 0x0004 # define DLT_HEADER_SHOW_ECUID 0x0008 # define DLT_HEADER_SHOW_APID 0x0010 # define DLT_HEADER_SHOW_CTID 0x0020 # define DLT_HEADER_SHOW_MSGTYPE 0x0040 # define DLT_HEADER_SHOW_MSGSUBTYPE 0x0080 # define DLT_HEADER_SHOW_VNVSTATUS 0x0100 # define DLT_HEADER_SHOW_NOARG 0x0200 # define DLT_HEADER_SHOW_ALL 0xFFFF /* dlt_receiver_check_and_get flags */ # define DLT_RCV_NONE 0 # define DLT_RCV_SKIP_HEADER (1 << 0) # define DLT_RCV_REMOVE (1 << 1) /** * Maximal length of path in DLT * DLT limits the path length and does not do anything else to determine * the actual value, because the least that is supported on any system * that DLT runs on is 1024 bytes. */ # define DLT_PATH_MAX 1024 /** * Maximal length of mounted path */ # define DLT_MOUNT_PATH_MAX 1024 /** * Maximal length of an entry */ # define DLT_ENTRY_MAX 100 /** * Maximal IPC path len */ # define DLT_IPC_PATH_MAX 100 /** * Maximal receiver buffer size for application messages */ # define DLT_RECEIVE_BUFSIZE 65535 /** * Maximal line length */ # define DLT_LINE_LEN 1024 /** * Macros for network trace */ #define DLT_TRACE_NW_TRUNCATED "NWTR" #define DLT_TRACE_NW_START "NWST" #define DLT_TRACE_NW_SEGMENT "NWCH" #define DLT_TRACE_NW_END "NWEN" /** * Provision to test static function */ # ifndef DLT_UNIT_TESTS # define DLT_STATIC static # else # define DLT_STATIC # endif /** * Type to specify whether received data is from socket or file/fifo */ typedef enum { DLT_RECEIVE_SOCKET, DLT_RECEIVE_UDP_SOCKET, DLT_RECEIVE_FD } DltReceiverType; /** * The definition of the serial header containing the characters "DLS" + 0x01. */ extern const char dltSerialHeader[DLT_ID_SIZE]; /** * The definition of the serial header containing the characters "DLS" + 0x01 as char. */ extern char dltSerialHeaderChar[DLT_ID_SIZE]; #if defined DLT_DAEMON_USE_FIFO_IPC || defined DLT_LIB_USE_FIFO_IPC /** * The common base-path of the dlt-daemon-fifo and application-generated fifos */ extern char dltFifoBaseDir[DLT_PATH_MAX]; #endif #ifdef DLT_SHM_ENABLE /** * The common name of the dlt-daemon and application share memory */ extern char dltShmName[NAME_MAX + 1]; #endif /** * The type of a DLT ID (context id, application id, etc.) */ typedef char ID4[DLT_ID_SIZE]; /** * The structure of the DLT file storage header. This header is used before each stored DLT message. */ typedef struct { char pattern[DLT_ID_SIZE]; /**< This pattern should be DLT0x01 */ uint32_t seconds; /**< seconds since 1.1.1970 */ int32_t microseconds; /**< Microseconds */ char ecu[DLT_ID_SIZE]; /**< The ECU id is added, if it is not already in the DLT message itself */ } DLT_PACKED DltStorageHeader; /** * The structure of the DLT standard header. This header is used in each DLT message. */ typedef struct { uint8_t htyp; /**< This parameter contains several informations, see definitions below */ uint8_t mcnt; /**< The message counter is increased with each sent DLT message */ uint16_t len; /**< Length of the complete message, without storage header */ } DLT_PACKED DltStandardHeader; /** * The structure of the DLT extra header parameters. Each parameter is sent only if enabled in htyp. */ typedef struct { char ecu[DLT_ID_SIZE]; /**< ECU id */ uint32_t seid; /**< Session number */ uint32_t tmsp; /**< Timestamp since system start in 0.1 milliseconds */ } DLT_PACKED DltStandardHeaderExtra; /** * The structure of the DLT extended header. This header is only sent if enabled in htyp parameter. */ typedef struct { uint8_t msin; /**< messsage info */ uint8_t noar; /**< number of arguments */ char apid[DLT_ID_SIZE]; /**< application id */ char ctid[DLT_ID_SIZE]; /**< context id */ } DLT_PACKED DltExtendedHeader; /** * The structure to organise the DLT messages. * This structure is used by the corresponding functions. */ typedef struct sDltMessage { /* flags */ int8_t found_serialheader; /* offsets */ int32_t resync_offset; /* size parameters */ uint32_t headersize; /**< size of complete header including storage header */ uint32_t datasize; /**< size of complete payload */ /* buffer for current loaded message */ uint8_t headerbuffer[sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + sizeof(DltStandardHeaderExtra) + sizeof(DltExtendedHeader)]; /**< buffer for loading complete header */ uint8_t *databuffer; /**< buffer for loading payload */ uint32_t databuffersize; /* header values of current loaded message */ DltStorageHeader *storageheader; /**< pointer to storage header of current loaded header */ DltStandardHeader *standardheader; /**< pointer to standard header of current loaded header */ DltStandardHeaderExtra headerextra; /**< extra parameters of current loaded header */ DltExtendedHeader *extendedheader; /**< pointer to extended of current loaded header */ } DltMessage; /** * The structure of the DLT Service Get Log Info. */ typedef struct { uint32_t service_id; /**< service ID */ uint8_t options; /**< type of request */ char apid[DLT_ID_SIZE]; /**< application id */ char ctid[DLT_ID_SIZE]; /**< context id */ char com[DLT_ID_SIZE]; /**< communication interface */ } DLT_PACKED DltServiceGetLogInfoRequest; typedef struct { uint32_t service_id; /**< service ID */ } DLT_PACKED DltServiceGetDefaultLogLevelRequest; /** * The structure of the DLT Service Get Log Info response. */ typedef struct { char context_id[DLT_ID_SIZE]; int16_t log_level; int16_t trace_status; uint16_t len_context_description; char *context_description; } ContextIDsInfoType; typedef struct { char app_id[DLT_ID_SIZE]; uint16_t count_context_ids; ContextIDsInfoType *context_id_info; /**< holds info about a specific con id */ uint16_t len_app_description; char *app_description; } AppIDsType; typedef struct { uint16_t count_app_ids; AppIDsType *app_ids; /**< holds info about a specific app id */ } LogInfoType; typedef struct { uint32_t service_id; /**< service ID */ uint8_t status; /**< type of request */ LogInfoType log_info_type; /**< log info type */ char com[DLT_ID_SIZE]; /**< communication interface */ } DltServiceGetLogInfoResponse; /** * The structure of the DLT Service Set Log Level. */ typedef struct { uint32_t service_id; /**< service ID */ char apid[DLT_ID_SIZE]; /**< application id */ char ctid[DLT_ID_SIZE]; /**< context id */ uint8_t log_level; /**< log level to be set */ char com[DLT_ID_SIZE]; /**< communication interface */ } DLT_PACKED DltServiceSetLogLevel; /** * The structure of the DLT Service Set Default Log Level. */ typedef struct { uint32_t service_id; /**< service ID */ uint8_t log_level; /**< default log level to be set */ char com[DLT_ID_SIZE]; /**< communication interface */ } DLT_PACKED DltServiceSetDefaultLogLevel; /** * The structure of the DLT Service Set Verbose Mode */ typedef struct { uint32_t service_id; /**< service ID */ uint8_t new_status; /**< new status to be set */ } DLT_PACKED DltServiceSetVerboseMode; /** * The structure of the DLT Service Set Communication Interface Status */ typedef struct { uint32_t service_id; /**< service ID */ char com[DLT_ID_SIZE]; /**< communication interface */ uint8_t new_status; /**< new status to be set */ } DLT_PACKED DltServiceSetCommunicationInterfaceStatus; /** * The structure of the DLT Service Set Communication Maximum Bandwidth */ typedef struct { uint32_t service_id; /**< service ID */ char com[DLT_ID_SIZE]; /**< communication interface */ uint32_t max_bandwidth; /**< maximum bandwith */ } DLT_PACKED DltServiceSetCommunicationMaximumBandwidth; typedef struct { uint32_t service_id; /**< service ID */ uint8_t status; /**< reponse status */ } DLT_PACKED DltServiceResponse; typedef struct { uint32_t service_id; /**< service ID */ uint8_t status; /**< reponse status */ uint8_t log_level; /**< log level */ } DLT_PACKED DltServiceGetDefaultLogLevelResponse; typedef struct { uint32_t service_id; /**< service ID */ uint8_t status; /**< reponse status */ uint8_t overflow; /**< overflow status */ uint32_t overflow_counter; /**< overflow counter */ } DLT_PACKED DltServiceMessageBufferOverflowResponse; typedef struct { uint32_t service_id; /**< service ID */ } DLT_PACKED DltServiceGetSoftwareVersion; typedef struct { uint32_t service_id; /**< service ID */ uint8_t status; /**< reponse status */ uint32_t length; /**< length of following payload */ char *payload; /**< payload */ } DLT_PACKED DltServiceGetSoftwareVersionResponse; /** * The structure of the DLT Service Unregister Context. */ typedef struct { uint32_t service_id; /**< service ID */ uint8_t status; /**< reponse status */ char apid[DLT_ID_SIZE]; /**< application id */ char ctid[DLT_ID_SIZE]; /**< context id */ char comid[DLT_ID_SIZE]; /**< communication interface */ } DLT_PACKED DltServiceUnregisterContext; /** * The structure of the DLT Service Connection Info */ typedef struct { uint32_t service_id; /**< service ID */ uint8_t status; /**< reponse status */ uint8_t state; /**< new state */ char comid[DLT_ID_SIZE]; /**< communication interface */ } DLT_PACKED DltServiceConnectionInfo; /** * The structure of the DLT Service Timezone */ typedef struct { uint32_t service_id; /**< service ID */ uint8_t status; /**< reponse status */ int32_t timezone; /**< Timezone in seconds */ uint8_t isdst; /**< Is daylight saving time */ } DLT_PACKED DltServiceTimezone; /** * The structure of the DLT Service Marker */ typedef struct { uint32_t service_id; /**< service ID */ uint8_t status; /**< reponse status */ } DLT_PACKED DltServiceMarker; /*** * The structure of the DLT Service Offline Logstorage */ typedef struct { uint32_t service_id; /**< service ID */ char mount_point[DLT_MOUNT_PATH_MAX]; /**< storage device mount point */ uint8_t connection_type; /**< connection status of the connected device connected/disconnected */ char comid[DLT_ID_SIZE]; /**< communication interface */ } DLT_PACKED DltServiceOfflineLogstorage; typedef struct { uint32_t service_id; /**< service ID */ uint32_t connection_status; /**< connect/disconnect */ char node_id[DLT_ID_SIZE]; /**< passive node ID */ } DLT_PACKED DltServicePassiveNodeConnect; /** * The structure of DLT Service Passive Node Connection Status */ typedef struct { uint32_t service_id; /**< service ID */ uint8_t status; /**< response status */ uint32_t num_connections; /**< number of connections */ uint8_t connection_status[DLT_ENTRY_MAX]; /**< list of connection status */ char node_id[DLT_ENTRY_MAX]; /**< list of passive node IDs */ } DLT_PACKED DltServicePassiveNodeConnectionInfo; /** * Structure to store filter parameters. * ID are maximal four characters. Unused values are filled with zeros. * If every value as filter is valid, the id should be empty by having only zero values. */ typedef struct { char apid[DLT_FILTER_MAX][DLT_ID_SIZE]; /**< application id */ char ctid[DLT_FILTER_MAX][DLT_ID_SIZE]; /**< context id */ int counter; /**< number of filters */ } DltFilter; /** * The structure to organise the access to DLT files. * This structure is used by the corresponding functions. */ typedef struct sDltFile { /* file handle and index for fast access */ FILE *handle; /**< file handle of opened DLT file */ long *index; /**< file positions of all DLT messages for fast access to file, only filtered messages */ /* size parameters */ int32_t counter; /**< number of messages in DLT file with filter */ int32_t counter_total; /**< number of messages in DLT file without filter */ int32_t position; /**< current index to message parsed in DLT file starting at 0 */ long file_length; /**< length of the file */ long file_position; /**< current position in the file */ /* error counters */ int32_t error_messages; /**< number of incomplete DLT messages found during file parsing */ /* filter parameters */ DltFilter *filter; /**< pointer to filter list. Zero if no filter is set. */ int32_t filter_counter; /**< number of filter set */ /* current loaded message */ DltMessage msg; /**< pointer to message */ } DltFile; /** * The structure is used to organise the receiving of data * including buffer handling. * This structure is used by the corresponding functions. */ typedef struct { int32_t lastBytesRcvd; /**< bytes received in last receive call */ int32_t bytesRcvd; /**< received bytes */ int32_t totalBytesRcvd; /**< total number of received bytes */ char *buffer; /**< pointer to receiver buffer */ char *buf; /**< pointer to position within receiver buffer */ char *backup_buf; /** pointer to the buffer with partial messages if any **/ int fd; /**< connection handle */ DltReceiverType type; /**< type of connection handle */ uint32_t buffersize; /**< size of receiver buffer */ struct sockaddr_in addr; /**< socket address information */ } DltReceiver; typedef struct { unsigned char *shm; /* pointer to beginning of shared memory */ unsigned int size; /* size of data area in shared memory */ unsigned char *mem; /* pointer to data area in shared memory */ uint32_t min_size; /**< Minimum size of buffer */ uint32_t max_size; /**< Maximum size of buffer */ uint32_t step_size; /**< Step size of buffer */ } DltBuffer; typedef struct { int write; int read; int count; } DltBufferHead; # define DLT_BUFFER_HEAD "SHM" typedef struct { char head[4]; unsigned char status; int size; } DltBufferBlockHead; # ifdef DLT_USE_IPv6 # define DLT_IP_SIZE (INET6_ADDRSTRLEN) # else # define DLT_IP_SIZE (INET_ADDRSTRLEN) # endif typedef struct DltBindAddress { char ip[DLT_IP_SIZE]; struct DltBindAddress *next; } DltBindAddress_t; # define DLT_MESSAGE_ERROR_OK 0 # define DLT_MESSAGE_ERROR_UNKNOWN -1 # define DLT_MESSAGE_ERROR_SIZE -2 # define DLT_MESSAGE_ERROR_CONTENT -3 # ifdef __cplusplus extern "C" { # endif /** * Helper function to print a byte array in hex. * @param ptr pointer to the byte array. * @param size number of bytes to be printed. */ void dlt_print_hex(uint8_t *ptr, int size); /** * Helper function to print a byte array in hex into a string. * @param text pointer to a ASCII string, in which the text is written * @param textlength maximal size of text buffer * @param ptr pointer to the byte array. * @param size number of bytes to be printed. * @return negative value if there was an error */ DltReturnValue dlt_print_hex_string(char *text, int textlength, uint8_t *ptr, int size); /** * Helper function to print a byte array in hex and ascii into a string. * @param text pointer to a ASCII string, in which the text is written * @param textlength maximal size of text buffer * @param ptr pointer to the byte array. * @param size number of bytes to be printed. * @param html output is html? 0 - false, 1 - true * @return negative value if there was an error */ DltReturnValue dlt_print_mixed_string(char *text, int textlength, uint8_t *ptr, int size, int html); /** * Helper function to print a byte array in ascii into a string. * @param text pointer to a ASCII string, in which the text is written * @param textlength maximal size of text buffer * @param ptr pointer to the byte array. * @param size number of bytes to be printed. * @return negative value if there was an error */ DltReturnValue dlt_print_char_string(char **text, int textlength, uint8_t *ptr, int size); /** * Helper function to determine a bounded length of a string. * This function returns zero if @a str is a null pointer, * and it returns @a maxsize if the null character was not found in the first @a maxsize bytes of @a str. * This is a re-implementation of C11's strnlen_s, which we cannot yet assume to be available. * @param text pointer to string whose length is to be determined * @param maxsize maximal considered length of @a str * @return the bounded length of the string */ PURE_FUNCTION size_t dlt_strnlen_s(const char* str, size_t maxsize); /** * Helper function to print an id. * @param text pointer to ASCII string where to write the id * @param id four byte char array as used in DLT mesages as IDs. */ void dlt_print_id(char *text, const char *id); /** * Helper function to set an ID parameter. * @param id four byte char array as used in DLT mesages as IDs. * @param text string to be copied into char array. */ void dlt_set_id(char *id, const char *text); /** * Helper function to remove not nice to print characters, e.g. NULL or carage return. * @param text pointer to string to be cleaned. * @param length length of string excluding terminating zero. */ void dlt_clean_string(char *text, int length); /** * Initialise the filter list. * This function must be called before using further dlt filter. * @param filter pointer to structure of organising DLT filter * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_filter_init(DltFilter *filter, int verbose); /** * Free the used memory by the organising structure of filter. * @param filter pointer to structure of organising DLT filter * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_filter_free(DltFilter *filter, int verbose); /** * Load filter list from file. * @param filter pointer to structure of organising DLT filter * @param filename filename to load filters from * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_filter_load(DltFilter *filter, const char *filename, int verbose); /** * Save filter list to file. * @param filter pointer to structure of organising DLT filter * @param filename filename to load filters from * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_filter_save(DltFilter *filter, const char *filename, int verbose); /** * Find index of filter in filter list * @param filter pointer to structure of organising DLT filter * @param apid application id to be found in filter list * @param ctid context id to be found in filter list * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error (or not found), else return index of filter */ int dlt_filter_find(DltFilter *filter, const char *apid, const char *ctid, int verbose); /** * Add new filter to filter list. * @param filter pointer to structure of organising DLT filter * @param apid application id to be added to filter list (must always be set). * @param ctid context id to be added to filter list. empty equals don't care. * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_filter_add(DltFilter *filter, const char *apid, const char *ctid, int verbose); /** * Delete filter from filter list * @param filter pointer to structure of organising DLT filter * @param apid application id to be deleted from filter list * @param ctid context id to be deleted from filter list * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_filter_delete(DltFilter *filter, const char *apid, const char *ctid, int verbose); /** * Initialise the structure used to access a DLT message. * This function must be called before using further dlt_message functions. * @param msg pointer to structure of organising access to DLT messages * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_init(DltMessage *msg, int verbose); /** * Free the used memory by the organising structure of file. * @param msg pointer to structure of organising access to DLT messages * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_free(DltMessage *msg, int verbose); /** * Print Header into an ASCII string. * This function calls dlt_message_header_flags() with flags=DLT_HEADER_SHOW_ALL * @param msg pointer to structure of organising access to DLT messages * @param text pointer to a ASCII string, in which the header is written * @param textlength maximal size of text buffer * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_header(DltMessage *msg, char *text, size_t textlength, int verbose); /** * Print Header into an ASCII string, selective. * @param msg pointer to structure of organising access to DLT messages * @param text pointer to a ASCII string, in which the header is written * @param textlength maximal size of text buffer * @param flags select, bit-field to select, what should be printed (DLT_HEADER_SHOW_...) * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_header_flags(DltMessage *msg, char *text, size_t textlength, int flags, int verbose); /** * Print Payload into an ASCII string. * @param msg pointer to structure of organising access to DLT messages * @param text pointer to a ASCII string, in which the header is written * @param textlength maximal size of text buffer * @param type 1 = payload as hex, 2 = payload as ASCII. * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_payload(DltMessage *msg, char *text, size_t textlength, int type, int verbose); /** * Check if message is filtered or not. All filters are applied (logical OR). * @param msg pointer to structure of organising access to DLT messages * @param filter pointer to filter * @param verbose if set to true verbose information is printed out. * @return 1 = filter matches, 0 = filter does not match, negative value if there was an error */ DltReturnValue dlt_message_filter_check(DltMessage *msg, DltFilter *filter, int verbose); /** * Read message from memory buffer. * Message in buffer has no storage header. * @param msg pointer to structure of organising access to DLT messages * @param buffer pointer to memory buffer * @param length length of message in buffer * @param resync if set to true resync to serial header is enforced * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_message_read(DltMessage *msg, uint8_t *buffer, unsigned int length, int resync, int verbose); /** * Get standard header extra parameters * @param msg pointer to structure of organising access to DLT messages * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_get_extraparameters(DltMessage *msg, int verbose); /** * Set standard header extra parameters * @param msg pointer to structure of organising access to DLT messages * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_set_extraparameters(DltMessage *msg, int verbose); /** * Initialise the structure used to access a DLT file. * This function must be called before using further dlt_file functions. * @param file pointer to structure of organising access to DLT file * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_file_init(DltFile *file, int verbose); /** * Set a list to filters. * This function should be called before loading a DLT file, if filters should be used. * A filter list is an array of filters. Several filters are combined logically by or operation. * The filter list is not copied, so take care to keep list in memory. * @param file pointer to structure of organising access to DLT file * @param filter pointer to filter list array * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_file_set_filter(DltFile *file, DltFilter *filter, int verbose); /** * Initialising loading a DLT file. * @param file pointer to structure of organising access to DLT file * @param filename filename of DLT file * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_file_open(DltFile *file, const char *filename, int verbose); /** * This function reads DLT file and parse DLT message one by one. * Each message will be written into new file. * If a filter is set, the filter list is used. * @param file pointer to structure of organizing access to DLT file * @param filename file to contain parsed DLT messages. * @param type 1 = payload as hex, 2 = payload as ASCII. * @param verbose if set to true verbose information is printed out. * @return 0 = message does not match filter, 1 = message was read, negative value if there was an error */ DltReturnValue dlt_file_quick_parsing(DltFile *file, const char *filename, int type, int verbose); /** * Find next message in the DLT file and parse them. * This function finds the next message in the DLT file. * If a filter is set, the filter list is used. * @param file pointer to structure of organising access to DLT file * @param verbose if set to true verbose information is printed out. * @return 0 = message does not match filter, 1 = message was read, negative value if there was an error */ DltReturnValue dlt_file_read(DltFile *file, int verbose); /** * Find next message in the DLT file in RAW format (without storage header) and parse them. * This function finds the next message in the DLT file. * If a filter is set, the filter list is used. * @param file pointer to structure of organising access to DLT file * @param resync Resync to serial header when set to true * @param verbose if set to true verbose information is printed out. * @return 0 = message does not match filter, 1 = message was read, negative value if there was an error */ DltReturnValue dlt_file_read_raw(DltFile *file, int resync, int verbose); /** * Closing loading a DLT file. * @param file pointer to structure of organising access to DLT file * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_file_close(DltFile *file, int verbose); /** * Load standard header of a message from file * @param file pointer to structure of organising access to DLT file * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_file_read_header(DltFile *file, int verbose); /** * Load standard header of a message from file in RAW format (without storage header) * @param file pointer to structure of organising access to DLT file * @param resync Resync to serial header when set to true * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_file_read_header_raw(DltFile *file, int resync, int verbose); /** * Load, if available in message, extra standard header fields and * extended header of a message from file * (dlt_file_read_header() must have been called before this call!) * @param file pointer to structure of organising access to DLT file * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_file_read_header_extended(DltFile *file, int verbose); /** * Load payload of a message from file * (dlt_file_read_header() must have been called before this call!) * @param file pointer to structure of organising access to DLT file * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_file_read_data(DltFile *file, int verbose); /** * Load headers and payload of a message selected by the index. * If filters are set, index is based on the filtered list. * @param file pointer to structure of organising access to DLT file * @param index position of message in the files beginning from zero * @param verbose if set to true verbose information is printed out. * @return number of messages loaded, negative value if there was an error */ DltReturnValue dlt_file_message(DltFile *file, int index, int verbose); /** * Free the used memory by the organising structure of file. * @param file pointer to structure of organising access to DLT file * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_file_free(DltFile *file, int verbose); /** * Set internal logging filename if mode 2 * @param filename the filename */ void dlt_log_set_filename(const char *filename); #if defined DLT_DAEMON_USE_FIFO_IPC || defined DLT_LIB_USE_FIFO_IPC /** * Set FIFO base direction * @param pipe_dir the pipe direction */ void dlt_log_set_fifo_basedir(const char *pipe_dir); #endif /** * Set internal logging level * @param level the level */ void dlt_log_set_level(int level); /** * Initialize (external) logging facility * @param mode positive, 0 = log to stdout, 1 = log to syslog, 2 = log to file, 3 = log to stderr */ void dlt_log_init(int mode); /** * Print with variable arguments to specified file descriptor by DLT_LOG_MODE environment variable (like fprintf) * @param format format string for message * @return negative value if there was an error or the total number of characters written is returned on success */ int dlt_user_printf(const char *format, ...); /** * Log ASCII string with null-termination to (external) logging facility * @param prio priority (see syslog() call) * @param s Pointer to ASCII string with null-termination * @return negative value if there was an error */ DltReturnValue dlt_log(int prio, char *s); /** * Log with variable arguments to (external) logging facility (like printf) * @param prio priority (see syslog() call) * @param format format string for log message * @return negative value if there was an error */ DltReturnValue dlt_vlog(int prio, const char *format, ...); /** * Log size bytes with variable arguments to (external) logging facility (similar to snprintf) * @param prio priority (see syslog() call) * @param size number of bytes to log * @param format format string for log message * @return negative value if there was an error */ DltReturnValue dlt_vnlog(int prio, size_t size, const char *format, ...); /** * De-Initialize (external) logging facility */ void dlt_log_free(void); /** * Initialising a dlt receiver structure * @param receiver pointer to dlt receiver structure * @param _fd handle to file/socket/fifo, fram which the data should be received * @param type specify whether received data is from socket or file/fifo * @param _buffersize size of data buffer for storing the received data * @return negative value if there was an error */ DltReturnValue dlt_receiver_init(DltReceiver *receiver, int _fd, DltReceiverType type, int _buffersize); /** * De-Initialize a dlt receiver structure * @param receiver pointer to dlt receiver structure * @return negative value if there was an error */ DltReturnValue dlt_receiver_free(DltReceiver *receiver); /** * Initialising a dlt receiver structure * @param receiver pointer to dlt receiver structure * @param fd handle to file/socket/fifo, fram which the data should be received * @param type specify whether received data is from socket or file/fifo * @param buffer data buffer for storing the received data * @return negative value if there was an error and zero if success */ DltReturnValue dlt_receiver_init_global_buffer(DltReceiver *receiver, int fd, DltReceiverType type, char **buffer); /** * De-Initialize a dlt receiver structure * @param receiver pointer to dlt receiver structure * @return negative value if there was an error and zero if success */ DltReturnValue dlt_receiver_free_global_buffer(DltReceiver *receiver); /** * Receive data from socket or file/fifo using the dlt receiver structure * @param receiver pointer to dlt receiver structure * @return number of received bytes or negative value if there was an error */ int dlt_receiver_receive(DltReceiver *receiver); /** * Remove a specific size of bytes from the received data * @param receiver pointer to dlt receiver structure * @param size amount of bytes to be removed * @return negative value if there was an error */ DltReturnValue dlt_receiver_remove(DltReceiver *receiver, int size); /** * Move data from last receive call to front of receive buffer * @param receiver pointer to dlt receiver structure * @return negative value if there was an error */ DltReturnValue dlt_receiver_move_to_begin(DltReceiver *receiver); /** * Check whether to_get amount of data is available in receiver and * copy it to dest. Skip the DltUserHeader if skip_header is set to 1. * @param receiver pointer to dlt receiver structure * @param dest pointer to the destination buffer * @param to_get size of the data to copy in dest * @param skip_header whether if the DltUserHeader must be skipped. */ int dlt_receiver_check_and_get(DltReceiver *receiver, void *dest, unsigned int to_get, unsigned int skip_header); /** * Fill out storage header of a dlt message * @param storageheader pointer to storage header of a dlt message * @param ecu name of ecu to be set in storage header * @return negative value if there was an error */ DltReturnValue dlt_set_storageheader(DltStorageHeader *storageheader, const char *ecu); /** * Check if a storage header contains its marker * @param storageheader pointer to storage header of a dlt message * @return 0 no, 1 yes, negative value if there was an error */ DltReturnValue dlt_check_storageheader(DltStorageHeader *storageheader); /** * Checks if received size is big enough for expected data * @param received size * @param required size * @return negative value if required size is not sufficient * */ DltReturnValue dlt_check_rcv_data_size(uint32_t received, uint32_t required); /** * Initialise static ringbuffer with a size of size. * Initialise as server. Init counters. * Memory is already allocated. * @param buf Pointer to ringbuffer structure * @param ptr Ptr to ringbuffer memory * @param size Maximum size of buffer in bytes * @return negative value if there was an error */ DltReturnValue dlt_buffer_init_static_server(DltBuffer *buf, const unsigned char *ptr, uint32_t size); /** * Initialize static ringbuffer with a size of size. * Initialise as a client. Do not change counters. * Memory is already allocated. * @param buf Pointer to ringbuffer structure * @param ptr Ptr to ringbuffer memory * @param size Maximum size of buffer in bytes * @return negative value if there was an error */ DltReturnValue dlt_buffer_init_static_client(DltBuffer *buf, const unsigned char *ptr, uint32_t size); /** * Initialize dynamic ringbuffer with a size of size. * Initialise as a client. Do not change counters. * Memory will be allocated starting with min_size. * If more memory is needed size is increased wit step_size. * The maximum size is max_size. * @param buf Pointer to ringbuffer structure * @param min_size Minimum size of buffer in bytes * @param max_size Maximum size of buffer in bytes * @param step_size size of which ringbuffer is increased * @return negative value if there was an error */ DltReturnValue dlt_buffer_init_dynamic(DltBuffer *buf, uint32_t min_size, uint32_t max_size, uint32_t step_size); /** * Deinitilaise usage of static ringbuffer * @param buf Pointer to ringbuffer structure * @return negative value if there was an error */ DltReturnValue dlt_buffer_free_static(DltBuffer *buf); /** * Release and free memory used by dynamic ringbuffer * @param buf Pointer to ringbuffer structure * @return negative value if there was an error */ DltReturnValue dlt_buffer_free_dynamic(DltBuffer *buf); /** * Check if message fits into buffer. * @param buf Pointer to buffer structure * @param needed Needed size * @return DLT_RETURN_OK if enough space, DLT_RETURN_ERROR otherwise */ DltReturnValue dlt_buffer_check_size(DltBuffer *buf, int needed); /** * Write one entry to ringbuffer * @param buf Pointer to ringbuffer structure * @param data Pointer to data to be written to ringbuffer * @param size Size of data in bytes to be written to ringbuffer * @return negative value if there was an error */ DltReturnValue dlt_buffer_push(DltBuffer *buf, const unsigned char *data, unsigned int size); /** * Write up to three entries to ringbuffer. * Entries are joined to one block. * @param buf Pointer to ringbuffer structure * @param data1 Pointer to data to be written to ringbuffer * @param size1 Size of data in bytes to be written to ringbuffer * @param data2 Pointer to data to be written to ringbuffer * @param size2 Size of data in bytes to be written to ringbuffer * @param data3 Pointer to data to be written to ringbuffer * @param size3 Size of data in bytes to be written to ringbuffer * @return negative value if there was an error */ DltReturnValue dlt_buffer_push3(DltBuffer *buf, const unsigned char *data1, unsigned int size1, const unsigned char *data2, unsigned int size2, const unsigned char *data3, unsigned int size3); /** * Read one entry from ringbuffer. * Remove it from ringbuffer. * @param buf Pointer to ringbuffer structure * @param data Pointer to data read from ringbuffer * @param max_size Max size of read data in bytes from ringbuffer * @return size of read data, zero if no data available, negative value if there was an error */ int dlt_buffer_pull(DltBuffer *buf, unsigned char *data, int max_size); /** * Read one entry from ringbuffer. * Do not remove it from ringbuffer. * @param buf Pointer to ringbuffer structure * @param data Pointer to data read from ringbuffer * @param max_size Max size of read data in bytes from ringbuffer * @return size of read data, zero if no data available, negative value if there was an error */ int dlt_buffer_copy(DltBuffer *buf, unsigned char *data, int max_size); /** * Remove entry from ringbuffer. * @param buf Pointer to ringbuffer structure * @return size of read data, zero if no data available, negative value if there was an error */ int dlt_buffer_remove(DltBuffer *buf); /** * Print information about buffer and log to internal DLT log. * @param buf Pointer to ringbuffer structure */ void dlt_buffer_info(DltBuffer *buf); /** * Print status of buffer and log to internal DLT log. * @param buf Pointer to ringbuffer structure */ void dlt_buffer_status(DltBuffer *buf); /** * Get total size in bytes of ringbuffer. * If buffer is dynamic, max size is returned. * @param buf Pointer to ringbuffer structure * @return total size of buffer */ uint32_t dlt_buffer_get_total_size(DltBuffer *buf); /** * Get used size in bytes of ringbuffer. * @param buf Pointer to ringbuffer structure * @return used size of buffer */ int dlt_buffer_get_used_size(DltBuffer *buf); /** * Get number of entries in ringbuffer. * @param buf Pointer to ringbuffer structure * @return number of entries */ int dlt_buffer_get_message_count(DltBuffer *buf); # if !defined (__WIN32__) /** * Helper function: Setup serial connection * @param fd File descriptor of serial tty device * @param speed Serial line speed, as defined in termios.h * @return negative value if there was an error */ DltReturnValue dlt_setup_serial(int fd, speed_t speed); /** * Helper function: Convert serial line baudrate (as number) to line speed (as defined in termios.h) * @param baudrate Serial line baudrate (as number) * @return Serial line speed, as defined in termios.h */ speed_t dlt_convert_serial_speed(int baudrate); /** * Print dlt version and dlt svn version to buffer * @param buf Pointer to buffer * @param size size of buffer */ void dlt_get_version(char *buf, size_t size); /** * Print dlt major version to buffer * @param buf Pointer to buffer * @param size size of buffer */ void dlt_get_major_version(char *buf, size_t size); /** * Print dlt minor version to buffer * @param buf Pointer to buffer * @param size size of buffer */ void dlt_get_minor_version(char *buf, size_t size); # endif /* Function prototypes which should be used only internally */ /* */ /** * Common part of initialisation * @return negative value if there was an error */ DltReturnValue dlt_init_common(void); /** * Return the uptime of the system in 0.1 ms resolution * @return 0 if there was an error */ uint32_t dlt_uptime(void); /** * Print header of a DLT message * @param message pointer to structure of organising access to DLT messages * @param text pointer to a ASCII string, in which the header is written * @param size maximal size of text buffer * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_print_header(DltMessage *message, char *text, uint32_t size, int verbose); /** * Print payload of a DLT message as Hex-Output * @param message pointer to structure of organising access to DLT messages * @param text pointer to a ASCII string, in which the output is written * @param size maximal size of text buffer * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_print_hex(DltMessage *message, char *text, uint32_t size, int verbose); /** * Print payload of a DLT message as ASCII-Output * @param message pointer to structure of organising access to DLT messages * @param text pointer to a ASCII string, in which the output is written * @param size maximal size of text buffer * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_print_ascii(DltMessage *message, char *text, uint32_t size, int verbose); /** * Print payload of a DLT message as Mixed-Ouput (Hex and ASCII), for plain text output * @param message pointer to structure of organising access to DLT messages * @param text pointer to a ASCII string, in which the output is written * @param size maximal size of text buffer * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_print_mixed_plain(DltMessage *message, char *text, uint32_t size, int verbose); /** * Print payload of a DLT message as Mixed-Ouput (Hex and ASCII), for HTML text output * @param message pointer to structure of organising access to DLT messages * @param text pointer to a ASCII string, in which the output is written * @param size maximal size of text buffer * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_print_mixed_html(DltMessage *message, char *text, uint32_t size, int verbose); /** * Decode and print a argument of a DLT message * @param msg pointer to structure of organising access to DLT messages * @param type_info Type of argument * @param ptr pointer to pointer to data (pointer to data is changed within this function) * @param datalength pointer to datalength (datalength is changed within this function) * @param text pointer to a ASCII string, in which the output is written * @param textlength maximal size of text buffer * @param byteLength If argument is a string, and this value is 0 or greater, this value will be taken as string length * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ DltReturnValue dlt_message_argument_print(DltMessage *msg, uint32_t type_info, uint8_t **ptr, int32_t *datalength, char *text, size_t textlength, int byteLength, int verbose); /** * Check environment variables. */ void dlt_check_envvar(); /** * Parse the response text and identifying service id and its options. * * @param resp_text char * * @param service_id int * * @param service_opt int * * @return pointer to resp_text */ int dlt_set_loginfo_parse_service_id(char *resp_text, uint32_t *service_id, uint8_t *service_opt); /** * Convert get log info from ASCII to uint16 * * @param rp char * @param rp_count int * @return length */ int16_t dlt_getloginfo_conv_ascii_to_uint16_t(char *rp, int *rp_count); /** * Convert get log info from ASCII to int16 * * @param rp char * @param rp_count int * @return length */ int16_t dlt_getloginfo_conv_ascii_to_int16_t(char *rp, int *rp_count); /** * Convert get log info from ASCII to ID * * @param rp char * @param rp_count int * @param wp char * @param len int */ void dlt_getloginfo_conv_ascii_to_id(char *rp, int *rp_count, char *wp, int len); /** * Convert from hex ASCII to binary * @param ptr const char * @param binary uint8_t * @param size int */ void dlt_hex_ascii_to_binary(const char *ptr, uint8_t *binary, int *size); /** * Helper function to execute the execvp function in a new child process. * @param filename file path to store the stdout of command (NULL if not required) * @param command execution command followed by arguments with NULL-termination * @return negative value if there was an error */ int dlt_execute_command(char *filename, char *command, ...); # ifdef __cplusplus } # endif /** \} */ #endif /* DLT_COMMON_H */ dlt-daemon-2.18.6/include/dlt/dlt_common_api.h000066400000000000000000000461741377520261000212160ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_common_api.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_commpn_api.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #ifndef DLT_COMMON_API_H #define DLT_COMMON_API_H #include "dlt.h" /** * Create an object for a new context. * Common API with DLT Embedded * This macro has to be called first for every. * @param CONTEXT object containing information about one special logging context */ /* #define DLT_DECLARE_CONTEXT(CONTEXT) */ /* UNCHANGED */ /** * Use an object of a new context created in another module. * Common API with DLT Embedded * This macro has to be called first for every. * @param CONTEXT object containing information about one special logging context */ /* #define DLT_IMPORT_CONTEXT(CONTEXT) */ /* UNCHANGED */ /** * Register application. * Common API with DLT Embedded * @param APPID application id with maximal four characters * @param DESCRIPTION ASCII string containing description */ /* #define DLT_REGISTER_APP(APPID,DESCRIPTION) */ /* UNCHANGED */ /** * Register context including application (with default log level and default trace status) * Common API with DLT Embedded * @param CONTEXT object containing information about one special logging context * @param CONTEXTID context id with maximal four characters * @param APPID context id with maximal four characters * @param DESCRIPTION ASCII string containing description */ #define DLT_REGISTER_CONTEXT_APP(CONTEXT, CONTEXTID, APPID, DESCRIPTION) \ DLT_REGISTER_CONTEXT(CONTEXT, CONTEXTID, DESCRIPTION) /** * Send log message with variable list of messages (intended for verbose mode) * Common API with DLT Embedded * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message * @param ARGS variable list of arguments */ /*****************************************/ #define DLT_LOG0(CONTEXT, LOGLEVEL) \ DLT_LOG(CONTEXT, LOGLEVEL) /*****************************************/ #define DLT_LOG1(CONTEXT, LOGLEVEL, ARGS1) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1) /*****************************************/ #define DLT_LOG2(CONTEXT, LOGLEVEL, ARGS1, ARGS2) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2) /*****************************************/ #define DLT_LOG3(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3) /*****************************************/ #define DLT_LOG4(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4) /*****************************************/ #define DLT_LOG5(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5) /*****************************************/ #define DLT_LOG6(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6) /*****************************************/ #define DLT_LOG7(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7) /*****************************************/ #define DLT_LOG8(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8) /*****************************************/ #define DLT_LOG9(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9) /*****************************************/ #define DLT_LOG10(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10) /*****************************************/ #define DLT_LOG11(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11) /*****************************************/ #define DLT_LOG12(CONTEXT, \ LOGLEVEL, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12) \ DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12) /*****************************************/ #define DLT_LOG13(CONTEXT, \ LOGLEVEL, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13) \ DLT_LOG(CONTEXT, \ LOGLEVEL, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13) /*****************************************/ #define DLT_LOG14(CONTEXT, \ LOGLEVEL, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14) \ DLT_LOG(CONTEXT, \ LOGLEVEL, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14) /*****************************************/ #define DLT_LOG15(CONTEXT, \ LOGLEVEL, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14, \ ARGS15) \ DLT_LOG(CONTEXT, \ LOGLEVEL, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14, \ ARGS15) /*****************************************/ #define DLT_LOG16(CONTEXT, \ LOGLEVEL, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14, \ ARGS15, \ ARGS16) \ DLT_LOG(CONTEXT, \ LOGLEVEL, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14, \ ARGS15, \ ARGS16) /** * Send log message with variable list of messages (intended for non-verbose mode) * Common API with DLT Embedded * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message * @param MSGID the message id of log message * @param ARGS variable list of arguments: * calls to DLT_STRING(), DLT_BOOL(), DLT_FLOAT32(), DLT_FLOAT64(), * DLT_INT(), DLT_UINT(), DLT_RAW() */ /*****************************************/ #define DLT_LOG_ID0(CONTEXT, LOGLEVEL, MSGID) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID) /*****************************************/ #define DLT_LOG_ID1(CONTEXT, LOGLEVEL, MSGID, ARGS1) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1) /*****************************************/ #define DLT_LOG_ID2(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2) /*****************************************/ #define DLT_LOG_ID3(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3) /*****************************************/ #define DLT_LOG_ID4(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4) /*****************************************/ #define DLT_LOG_ID5(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5) /*****************************************/ #define DLT_LOG_ID6(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6) /*****************************************/ #define DLT_LOG_ID7(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7) /*****************************************/ #define DLT_LOG_ID8(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8) /*****************************************/ #define DLT_LOG_ID9(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9) /*****************************************/ #define DLT_LOG_ID10(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10) /*****************************************/ #define DLT_LOG_ID11(CONTEXT, \ LOGLEVEL, \ MSGID, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11) \ DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11) /*****************************************/ #define DLT_LOG_ID12(CONTEXT, \ LOGLEVEL, \ MSGID, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12) \ DLT_LOG_ID(CONTEXT, \ LOGLEVEL, \ MSGID, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12) /*****************************************/ #define DLT_LOG_ID13(CONTEXT, \ LOGLEVEL, \ MSGID, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13) \ DLT_LOG_ID(CONTEXT, \ LOGLEVEL, \ MSGID, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13) /*****************************************/ #define DLT_LOG_ID14(CONTEXT, \ LOGLEVEL, \ MSGID, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14) \ DLT_LOG_ID(CONTEXT, \ LOGLEVEL, \ MSGID, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14) /*****************************************/ #define DLT_LOG_ID15(CONTEXT, \ LOGLEVEL, \ MSGID, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14, \ ARGS15) \ DLT_LOG_ID(CONTEXT, \ LOGLEVEL, \ MSGID, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14, \ ARGS15) /*****************************************/ #define DLT_LOG_ID16(CONTEXT, \ LOGLEVEL, \ MSGID, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14, \ ARGS15, \ ARGS16) \ DLT_LOG_ID(CONTEXT, \ LOGLEVEL, \ MSGID, \ ARGS1, \ ARGS2, \ ARGS3, \ ARGS4, \ ARGS5, \ ARGS6, \ ARGS7, \ ARGS8, \ ARGS9, \ ARGS10, \ ARGS11, \ ARGS12, \ ARGS13, \ ARGS14, \ ARGS15, \ ARGS16) /** * Unregister context. * Common API with DLT Embedded * @param CONTEXT object containing information about one special logging context */ /* #define DLT_UNREGISTER_CONTEXT(CONTEXT) */ /* UNCHANGED */ /** * Unregister application. * Common API with DLT Embedded */ /* #define DLT_UNREGISTER_APP() */ /* UNCHANGED */ /** * Add string parameter to the log messsage. * Common API with DLT Embedded * In the future in none verbose mode the string will not be sent via DLT message. * @param TEXT ASCII string */ /* #define DLT_CSTRING(TEXT) */ /* UNCHANGED */ #endif /* DLT_COMMON_API_H */ dlt-daemon-2.18.6/include/dlt/dlt_cpp_extension.hpp000066400000000000000000000134521377520261000223040ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Intel Corporation * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Stefan Vacek Intel Corporation * * \copyright Copyright Š 2015 Intel Corporation. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_cpp_extension.hpp */ #ifndef DLT_CPP_EXTENSION_HPP #define DLT_CPP_EXTENSION_HPP #include #include #include #include #include "dlt.h" template int32_t logToDlt(DltContextData &log, T const &value) = delete; template<> inline int32_t logToDlt(DltContextData &log, int8_t const &value) { return dlt_user_log_write_int8(&log, value); } template<> inline int32_t logToDlt(DltContextData &log, int16_t const &value) { return dlt_user_log_write_int16(&log, value); } template<> inline int32_t logToDlt(DltContextData &log, int32_t const &value) { return dlt_user_log_write_int32(&log, value); } template<> inline int32_t logToDlt(DltContextData &log, int64_t const &value) { return dlt_user_log_write_int64(&log, value); } template<> inline int32_t logToDlt(DltContextData &log, uint8_t const &value) { return dlt_user_log_write_uint8(&log, value); } template<> inline int32_t logToDlt(DltContextData &log, uint16_t const &value) { return dlt_user_log_write_uint16(&log, value); } template<> inline int32_t logToDlt(DltContextData &log, uint32_t const &value) { return dlt_user_log_write_uint32(&log, value); } template<> inline int32_t logToDlt(DltContextData &log, uint64_t const &value) { return dlt_user_log_write_uint64(&log, value); } template<> inline int32_t logToDlt(DltContextData &log, float32_t const &value) { return dlt_user_log_write_float32(&log, value); } template<> inline int32_t logToDlt(DltContextData &log, double const &value) { return dlt_user_log_write_float64(&log, value); } template<> inline int32_t logToDlt(DltContextData &log, bool const &value) { return dlt_user_log_write_bool(&log, value); } static inline int32_t logToDlt(DltContextData &log, char const * const value) { return dlt_user_log_write_utf8_string(&log, value); } static inline int32_t logToDlt(DltContextData &log, char * const value) { return dlt_user_log_write_utf8_string(&log, value); } template<> inline int32_t logToDlt(DltContextData &log, std::string const &value) { return dlt_user_log_write_utf8_string(&log, value.c_str()); } /* stl types */ template<> int32_t logToDlt(DltContextData &log, std::string const &value); template> static inline int32_t logToDlt(DltContextData &log, std::vector<_Tp, _Alloc> const & value) { int result = 0; for (auto elem : value) result += logToDlt(log, elem); if (result != 0) result = -1; return result; } template> static inline int32_t logToDlt(DltContextData &log, std::list<_Tp, _Alloc> const & value) { int result = 0; for (auto elem : value) result += logToDlt(log, elem); if (result != 0) result = -1; return result; } template, typename _Alloc = std::allocator>> static inline int32_t logToDlt(DltContextData &log, std::map<_Key, _Tp, _Compare, _Alloc> const & value) { int result = 0; for (auto elem : value) { result += logToDlt(log, elem.first); result += logToDlt(log, elem.second); } if (result != 0) result = -1; return result; } //variadic functions using C11 standard template static inline int32_t logToDltVariadic(DltContextData &log, First const &valueA) { return logToDlt(log, valueA); } template static inline int32_t logToDltVariadic(DltContextData &log, First const &valueA, const Rest&... valueB) { int result = logToDlt(log, valueA) + logToDltVariadic(log, valueB...); if (result != 0) result = -1; return result; } /** * @brief macro to write a log message with variable number of arguments and without the need to specify the type of log data * * The macro can be used with any type that provides a logToDlt function. * * Example: * DLT_LOG_CXX(dltContext, DLT_LV_X, "text", valueA, valueB, ...) */ #define DLT_LOG_CXX(CONTEXT, LOGLEVEL, ...)\ do\ {\ DltContextData log;\ if (dlt_user_log_write_start(&CONTEXT,&log,LOGLEVEL)>0)\ {\ logToDltVariadic(log, ##__VA_ARGS__);\ dlt_user_log_write_finish(&log);\ }\ }\ while(0) /** * @brief macro to write a log message with variable number of arguments and without the need to specify the type of log data. * * The macro can be used with any type that provides a logToDlt function. * This includes all the types that are code generated. * * This macro is similar to \c DLT_LOG_CXX. However, it adds the current function name as the first log argument. * * Example: * DLT_LOG_FCN_CXX(dltContext, DLT_LV_X, "text", valueA, valueB, ...) */ #define DLT_LOG_FCN_CXX(CONTEXT, LOGLEVEL, ...) \ do\ {\ DltContextData log;\ if (dlt_user_log_write_start(&CONTEXT, &log, LOGLEVEL) > 0)\ {\ dlt_user_log_write_string(&log, __PRETTY_FUNCTION__);\ logToDltVariadic(log, ##__VA_ARGS__);\ dlt_user_log_write_finish(&log);\ }\ }\ while(0) #endif /* DLT_CPP_EXTENSION_HPP */ dlt-daemon-2.18.6/include/dlt/dlt_filetransfer.h000066400000000000000000000156511377520261000215550ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_filetransfer.h */ #ifndef DLT_FILETRANSFER_H #define DLT_FILETRANSFER_H #include /* Needed for LONG_MAX */ #include /* Needed for struct stat st*/ #include "dlt.h" /* Needed for DLT Logs */ #include /* Signal handling */ #include "errno.h" /* ! Error code for dlt_user_log_file_complete */ #define DLT_FILETRANSFER_ERROR_FILE_COMPLETE -300 /* ! Error code for dlt_user_log_file_complete */ #define DLT_FILETRANSFER_ERROR_FILE_COMPLETE1 -301 /* ! Error code for dlt_user_log_file_complete */ #define DLT_FILETRANSFER_ERROR_FILE_COMPLETE2 -302 /* ! Error code for dlt_user_log_file_complete */ #define DLT_FILETRANSFER_ERROR_FILE_COMPLETE3 -303 /* ! Error code for dlt_user_log_file_head */ #define DLT_FILETRANSFER_ERROR_FILE_HEAD -400 /* ! Error code for dlt_user_log_file_data */ #define DLT_FILETRANSFER_ERROR_FILE_DATA -500 /* ! Error code for dlt_user_log_file_data */ #define DLT_FILETRANSFER_ERROR_FILE_DATA_USER_BUFFER_FAILED -501 /* ! Error code for dlt_user_log_file_end */ #define DLT_FILETRANSFER_ERROR_FILE_END -600 /* ! Error code for dlt_user_log_file_infoAbout */ #define DLT_FILETRANSFER_ERROR_INFO_ABOUT -700 /* ! Error code for dlt_user_log_file_packagesCount */ #define DLT_FILETRANSFER_ERROR_PACKAGE_COUNT -800 /* !Transfer the complete file as several dlt logs. */ /**This method transfer the complete file as several dlt logs. At first it will be checked that the file exist. * In the next step some generic informations about the file will be logged to dlt. * Now the header will be logged to dlt. See the method dlt_user_log_file_header for more informations. * Then the method dlt_user_log_data will be called with the parameter to log all packages in a loop with some timeout. * At last dlt_user_log_end is called to signal that the complete file transfer was okey. This is important for the plugin of the dlt viewer. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @param deleteFlag Flag if the file will be deleted after transfer. 1->delete, 0->notDelete * @param timeout Timeout in ms to wait between some logs. Important that the FIFO of dlt will not be flooded with to many messages in a short period of time. * @return Returns 0 if everything was okey. If there was a failure value < 0 will be returned. */ extern int dlt_user_log_file_complete(DltContext *fileContext, const char *filename, int deleteFlag, int timeout); /* !This method gives information about the number of packages the file have */ /**Every file will be divided into several packages. Every package will be logged as a single dlt log. * The number of packages depends on the BUFFER_SIZE. * At first it will be checked if the file exist. Then the file will be divided into * several packages depending on the buffer size. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @return Returns 0 if everything was okey. If there was a failure value < 0 will be returned. */ extern int dlt_user_log_file_packagesCount(DltContext *fileContext, const char *filename); /* !Logs specific file inforamtions to dlt */ /**The filename, file size, file serial number and the number of packages will be logged to dlt. * @param fileContext Specific context * @param filename Absolute file path * @return Returns 0 if everything was okey.If there was a failure value < 0 will be returned. */ extern int dlt_user_log_file_infoAbout(DltContext *fileContext, const char *filename); /* !Transfer the head of the file as a dlt logs. */ /**The head of the file must be logged to dlt because the head contains inforamtion about the file serial number, * the file name, the file size, package number the file have and the buffer size. * All these informations are needed from the plugin of the dlt viewer. * See the Mainpages.c for more informations. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @param alias Alias for the file. An alternative name to show in the receiving end * @return Returns 0 if everything was okey. If there was a failure value < 0 will be returned. */ extern int dlt_user_log_file_header_alias(DltContext *fileContext, const char *filename, const char *alias); /* !Transfer the head of the file as a dlt logs. */ /**The head of the file must be logged to dlt because the head contains inforamtion about the file serial number, * the file name, the file size, package number the file have and the buffer size. * All these informations are needed from the plugin of the dlt viewer. * See the Mainpages.c for more informations. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @return Returns 0 if everything was okey. If there was a failure value < 0 will be returned. */ extern int dlt_user_log_file_header(DltContext *fileContext, const char *filename); /* !Transfer the content data of a file. */ /**See the Mainpages.c for more informations. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @param packageToTransfer Package number to transfer. If this param is LONG_MAX, the whole file will be transferred with a specific timeout * @param timeout Timeout to wait between dlt logs. Important because the dlt FIFO should not be flooded. Default is defined by MIN_TIMEOUT. The given timeout in ms can not be smaller than MIN_TIMEOUT. * @return Returns 0 if everything was okey. If there was a failure value < 0 will be returned. */ extern int dlt_user_log_file_data(DltContext *fileContext, const char *filename, int packageToTransfer, int timeout); /* !Transfer the end of the file as a dlt logs. */ /**The end of the file must be logged to dlt because the end contains inforamtion about the file serial number. * This informations is needed from the plugin of the dlt viewer. * See the Mainpages.c for more informations. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @param deleteFlag Flag to delete the file after the whole file is transferred (logged to dlt).1->delete,0->NotDelete * @return Returns 0 if everything was okey. If there was a failure value < 0 will be returned. */ extern int dlt_user_log_file_end(DltContext *fileContext, const char *filename, int deleteFlag); #endif /* DLT_FILETRANSFER_H */ dlt-daemon-2.18.6/include/dlt/dlt_offline_trace.h000066400000000000000000000165631377520261000216740ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_offline_trace.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_offline_trace.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #ifndef DLT_OFFLINE_TRACE_H #define DLT_OFFLINE_TRACE_H #include #include "dlt_types.h" #define DLT_OFFLINETRACE_FILENAME_BASE "dlt_offlinetrace" #define DLT_OFFLINETRACE_FILENAME_INDEX_DELI "." #define DLT_OFFLINETRACE_FILENAME_TIMESTAMP_DELI "_" #define DLT_OFFLINETRACE_FILENAME_EXT ".dlt" typedef struct { char directory[NAME_MAX + 1];/**< (String) Store DLT messages to local directory */ char filename[NAME_MAX + 1]; /**< (String) Filename of currently used log file */ int fileSize; /**< (int) Maximum size in bytes of one trace file (Default: 1000000) */ int maxSize; /**< (int) Maximum size of all trace files (Default: 4000000) */ int filenameTimestampBased; /**< (int) timestamp based or index based (Default: 1 Timestamp based) */ int ohandle; } DltOfflineTrace; /** * Initialise the offline trace * This function call opens the currently used log file. * A check of the complete size of the offline trace is done during startup. * Old files are deleted, if there is not enough space left to create new file. * This function must be called before using further offline trace functions. * @param trace pointer to offline trace structure * @param directory directory where to store offline trace files * @param fileSize maximum size of one offline trace file. * @param maxSize maximum size of complete offline trace in bytes. *.@param filenameTimestampBased filename to be created on timestamp based or index based * @return negative value if there was an error */ extern DltReturnValue dlt_offline_trace_init(DltOfflineTrace *trace, const char *directory, int fileSize, int maxSize, int filenameTimestampBased); /** * Uninitialise the offline trace * This function call closes currently used log file. * This function must be called after usage of offline trace * @param buf pointer to offline trace structure * @return negative value if there was an error */ extern DltReturnValue dlt_offline_trace_free(DltOfflineTrace *buf); /** * Write data into offline trace * If the current used log file exceeds the max file size, new log file is created. * A check of the complete size of the offline trace is done before new file is created. * Old files are deleted, if there is not enough space left to create new file. * @param trace pointer to offline trace structure * @param data1 pointer to first data block to be written, null if not used * @param size1 size in bytes of first data block to be written, 0 if not used * @param data2 pointer to second data block to be written, null if not used * @param size2 size in bytes of second data block to be written, 0 if not used * @param data3 pointer to third data block to be written, null if not used * @param size3 size in bytes of third data block to be written, 0 if not used * @return negative value if there was an error */ extern DltReturnValue dlt_offline_trace_write(DltOfflineTrace *trace, unsigned char *data1, int size1, unsigned char *data2, int size2, unsigned char *data3, int size3); /** * Get size of currently used offline trace buffer * @return size in bytes */ extern ssize_t dlt_offline_trace_get_total_size(DltOfflineTrace *trace); /** * Provides info about the offline logs storage directory * @param path path of the storage directory * @param file_name filename to search for * @param newest pointer to store newest filename * @param oldest pointer to store oldest filename * @return num of files in the directory */ unsigned int dlt_offline_trace_storage_dir_info(char *path, char *file_name, char *newest, char *oldest); /** * creates filename with index * @param log_file_name file name created with index * @param length the maximum length of the log_file_name * @param name filename base * @param idx index to be used for file name creation */ void dlt_offline_trace_file_name(char *log_file_name, size_t length, char *name, unsigned int idx); /** * generates index for log file name * @param file filename supplied to create index * @return the index to be used for log file name */ unsigned int dlt_offline_trace_get_idx_of_log_file(char *file); #endif /* DLT_OFFLINE_TRACE_H */ dlt-daemon-2.18.6/include/dlt/dlt_protocol.h000066400000000000000000000250451377520261000207300ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_protocol.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_protocol.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision$ * $LastChangedDate$ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #ifndef DLT_PROTOCOL_H #define DLT_PROTOCOL_H /** * \defgroup protocolapi DLT Protocol API * \addtogroup protocolapi \{ */ /* * Definitions of the htyp parameter in standard header. */ #define DLT_HTYP_UEH 0x01 /**< use extended header */ #define DLT_HTYP_MSBF 0x02 /**< MSB first */ #define DLT_HTYP_WEID 0x04 /**< with ECU ID */ #define DLT_HTYP_WSID 0x08 /**< with session ID */ #define DLT_HTYP_WTMS 0x10 /**< with timestamp */ #define DLT_HTYP_VERS 0xe0 /**< version number, 0x1 */ #define DLT_IS_HTYP_UEH(htyp) ((htyp) & DLT_HTYP_UEH) #define DLT_IS_HTYP_MSBF(htyp) ((htyp) & DLT_HTYP_MSBF) #define DLT_IS_HTYP_WEID(htyp) ((htyp) & DLT_HTYP_WEID) #define DLT_IS_HTYP_WSID(htyp) ((htyp) & DLT_HTYP_WSID) #define DLT_IS_HTYP_WTMS(htyp) ((htyp) & DLT_HTYP_WTMS) #define DLT_HTYP_PROTOCOL_VERSION1 (1 << 5) /* * Definitions of msin parameter in extended header. */ #define DLT_MSIN_VERB 0x01 /**< verbose */ #define DLT_MSIN_MSTP 0x0e /**< message type */ #define DLT_MSIN_MTIN 0xf0 /**< message type info */ #define DLT_MSIN_MSTP_SHIFT 1 /**< shift right offset to get mstp value */ #define DLT_MSIN_MTIN_SHIFT 4 /**< shift right offset to get mtin value */ #define DLT_IS_MSIN_VERB(msin) ((msin) & DLT_MSIN_VERB) #define DLT_GET_MSIN_MSTP(msin) (((msin) & DLT_MSIN_MSTP) >> DLT_MSIN_MSTP_SHIFT) #define DLT_GET_MSIN_MTIN(msin) (((msin) & DLT_MSIN_MTIN) >> DLT_MSIN_MTIN_SHIFT) /* * Definitions of mstp parameter in extended header. */ #define DLT_TYPE_LOG 0x00 /**< Log message type */ #define DLT_TYPE_APP_TRACE 0x01 /**< Application trace message type */ #define DLT_TYPE_NW_TRACE 0x02 /**< Network trace message type */ #define DLT_TYPE_CONTROL 0x03 /**< Control message type */ /* * Definitions of msti parameter in extended header. */ #define DLT_TRACE_VARIABLE 0x01 /**< tracing of a variable */ #define DLT_TRACE_FUNCTION_IN 0x02 /**< tracing of function calls */ #define DLT_TRACE_FUNCTION_OUT 0x03 /**< tracing of function return values */ #define DLT_TRACE_STATE 0x04 /**< tracing of states of a state machine */ #define DLT_TRACE_VFB 0x05 /**< tracing of virtual function bus */ /* * Definitions of msbi parameter in extended header. */ /* see file dlt_user.h */ /* * Definitions of msci parameter in extended header. */ #define DLT_CONTROL_REQUEST 0x01 /**< Request message */ #define DLT_CONTROL_RESPONSE 0x02 /**< Response to request message */ #define DLT_CONTROL_TIME 0x03 /**< keep-alive message */ #define DLT_MSIN_CONTROL_REQUEST ((DLT_TYPE_CONTROL << DLT_MSIN_MSTP_SHIFT) | \ (DLT_CONTROL_REQUEST << DLT_MSIN_MTIN_SHIFT)) #define DLT_MSIN_CONTROL_RESPONSE ((DLT_TYPE_CONTROL << DLT_MSIN_MSTP_SHIFT) | \ (DLT_CONTROL_RESPONSE << DLT_MSIN_MTIN_SHIFT)) #define DLT_MSIN_CONTROL_TIME ((DLT_TYPE_CONTROL << DLT_MSIN_MSTP_SHIFT) | \ (DLT_CONTROL_TIME << DLT_MSIN_MTIN_SHIFT)) /* * Definitions of types of arguments in payload. */ #define DLT_TYPE_INFO_TYLE 0x0000000f /**< Length of standard data: 1 = 8bit, 2 = 16bit, 3 = 32 bit, 4 = 64 bit, 5 = 128 bit */ #define DLT_TYPE_INFO_BOOL 0x00000010 /**< Boolean data */ #define DLT_TYPE_INFO_SINT 0x00000020 /**< Signed integer data */ #define DLT_TYPE_INFO_UINT 0x00000040 /**< Unsigned integer data */ #define DLT_TYPE_INFO_FLOA 0x00000080 /**< Float data */ #define DLT_TYPE_INFO_ARAY 0x00000100 /**< Array of standard types */ #define DLT_TYPE_INFO_STRG 0x00000200 /**< String */ #define DLT_TYPE_INFO_RAWD 0x00000400 /**< Raw data */ #define DLT_TYPE_INFO_VARI 0x00000800 /**< Set, if additional information to a variable is available */ #define DLT_TYPE_INFO_FIXP 0x00001000 /**< Set, if quantization and offset are added */ #define DLT_TYPE_INFO_TRAI 0x00002000 /**< Set, if additional trace information is added */ #define DLT_TYPE_INFO_STRU 0x00004000 /**< Struct */ #define DLT_TYPE_INFO_SCOD 0x00038000 /**< coding of the type string: 0 = ASCII, 1 = UTF-8 */ #define DLT_TYLE_8BIT 0x00000001 #define DLT_TYLE_16BIT 0x00000002 #define DLT_TYLE_32BIT 0x00000003 #define DLT_TYLE_64BIT 0x00000004 #define DLT_TYLE_128BIT 0x00000005 #define DLT_SCOD_ASCII 0x00000000 #define DLT_SCOD_UTF8 0x00008000 #define DLT_SCOD_HEX 0x00010000 #define DLT_SCOD_BIN 0x00018000 /* * Definitions of DLT services. */ #define DLT_SERVICE_ID_CALLSW_CINJECTION 0xFFF enum dlt_services { DLT_SERVICE_ID = 0x00, DLT_SERVICE_ID_SET_LOG_LEVEL = 0x01, DLT_SERVICE_ID_SET_TRACE_STATUS = 0x02, DLT_SERVICE_ID_GET_LOG_INFO = 0x03, DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL = 0x04, DLT_SERVICE_ID_STORE_CONFIG = 0x05, DLT_SERVICE_ID_RESET_TO_FACTORY_DEFAULT = 0x06, DLT_SERVICE_ID_SET_COM_INTERFACE_STATUS = 0x07, DLT_SERVICE_ID_SET_COM_INTERFACE_MAX_BANDWIDTH = 0x08, DLT_SERVICE_ID_SET_VERBOSE_MODE = 0x09, DLT_SERVICE_ID_SET_MESSAGE_FILTERING = 0x0A, DLT_SERVICE_ID_SET_TIMING_PACKETS = 0x0B, DLT_SERVICE_ID_GET_LOCAL_TIME = 0x0C, DLT_SERVICE_ID_USE_ECU_ID = 0x0D, DLT_SERVICE_ID_USE_SESSION_ID = 0x0E, DLT_SERVICE_ID_USE_TIMESTAMP = 0x0F, DLT_SERVICE_ID_USE_EXTENDED_HEADER = 0x10, DLT_SERVICE_ID_SET_DEFAULT_LOG_LEVEL = 0x11, DLT_SERVICE_ID_SET_DEFAULT_TRACE_STATUS = 0x12, DLT_SERVICE_ID_GET_SOFTWARE_VERSION = 0x13, DLT_SERVICE_ID_MESSAGE_BUFFER_OVERFLOW = 0x14, DLT_SERVICE_ID_LAST_ENTRY }; enum dlt_user_services { DLT_USER_SERVICE_ID = 0xF00, DLT_SERVICE_ID_UNREGISTER_CONTEXT = 0xF01, DLT_SERVICE_ID_CONNECTION_INFO = 0xF02, DLT_SERVICE_ID_TIMEZONE = 0xF03, DLT_SERVICE_ID_MARKER = 0xF04, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE = 0xF05, DLT_SERVICE_ID_PASSIVE_NODE_CONNECT = 0xF06, DLT_SERVICE_ID_PASSIVE_NODE_CONNECTION_STATUS = 0xF07, DLT_SERVICE_ID_SET_ALL_LOG_LEVEL = 0xF08, DLT_SERVICE_ID_SET_ALL_TRACE_STATUS = 0xF09, DLT_SERVICE_ID_RESERVED_B = 0xF0B, DLT_SERVICE_ID_RESERVED_C = 0xF0C, DLT_SERVICE_ID_RESERVED_D = 0xF0D, DLT_SERVICE_ID_RESERVED_E = 0xF0E, DLT_USER_SERVICE_ID_LAST_ENTRY }; /* Need to be adapted if another service is added */ extern const char *const dlt_service_names[]; extern const char *const dlt_user_service_names[]; extern const char *dlt_get_service_name(unsigned int id); /* * Definitions of DLT service response status */ #define DLT_SERVICE_RESPONSE_OK 0x00 /**< Control message response: OK */ #define DLT_SERVICE_RESPONSE_NOT_SUPPORTED 0x01 /**< Control message response: Not supported */ #define DLT_SERVICE_RESPONSE_ERROR 0x02 /**< Control message response: Error */ #define DLT_SERVICE_RESPONSE_PERM_DENIED 0x03 /**< Control message response: Permission denied */ #define DLT_SERVICE_RESPONSE_WARNING 0x04 /**< Control message response: warning */ #define DLT_SERVICE_RESPONSE_LAST 0x05 /**< Used as max value */ /* * Definitions of DLT service connection state */ #define DLT_CONNECTION_STATUS_DISCONNECTED 0x01 /**< Client is disconnected */ #define DLT_CONNECTION_STATUS_CONNECTED 0x02 /**< Client is connected */ /* * Definitions of DLT GET_LOG_INFO status */ #define GET_LOG_INFO_STATUS_MIN 3 #define GET_LOG_INFO_STATUS_MAX 7 #define GET_LOG_INFO_STATUS_NO_MATCHING_CTX 8 #define GET_LOG_INFO_STATUS_RESP_DATA_OVERFLOW 9 /** \} */ #endif /* DLT_PROTOCOL_H */ dlt-daemon-2.18.6/include/dlt/dlt_shm.h000066400000000000000000000172441377520261000176600ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_shm.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_shm.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #ifndef DLT_SHM_H #define DLT_SHM_H #include #include "dlt_common.h" /** * Default size of shared memory. * size is extended during creation to fit segment size. * client retrieves real size from file descriptor of shared memory. */ #define DLT_SHM_SIZE 100000 typedef struct { int shmfd; /* file descriptor of shared memory */ sem_t *sem; /* pointer to semaphore */ DltBuffer buffer; } DltShm; typedef struct { char head[4]; unsigned char status; int size; } DltShmBlockHead; #define DLT_SHM_SEM_GET(id) sem_wait(id) #define DLT_SHM_SEM_FREE(id) sem_post(id) /** * Initialise the shared memory on the client side. * This function must be called before using further shm functions. * @param buf pointer to shm structure * @param name the name of the shm, must be the same for server and client * @return negative value if there was an error */ extern DltReturnValue dlt_shm_init_client(DltShm *buf, const char *name); /** * Initialise the shared memory on the server side. * This function must be called before using further shm functions. * @param buf pointer to shm structure * @param name the name of the shm, must be the same for server and client * @param size the requested size of the shm * @return negative value if there was an error */ extern DltReturnValue dlt_shm_init_server(DltShm *buf, const char *name, int size); /** * Push data from client onto the shm. * @param buf pointer to shm structure * @param data1 pointer to first data block to be written, null if not used * @param size1 size in bytes of first data block to be written, 0 if not used * @param data2 pointer to second data block to be written, null if not used * @param size2 size in bytes of second data block to be written, 0 if not used * @param data3 pointer to third data block to be written, null if not used * @param size3 size in bytes of third data block to be written, 0 if not used * @return negative value if there was an error */ extern int dlt_shm_push(DltShm *buf, const unsigned char *data1, unsigned int size1, const unsigned char *data2, unsigned int size2, const unsigned char *data3, unsigned int size3); /** * Pull data from shm. * This function should be called from client. * Data is deleted from shm after this call. * @param buf pointer to shm structure * @param data pointer to buffer where data is to be written * @param size maximum size to be written into buffer * @return negative value if there was an error */ extern int dlt_shm_pull(DltShm *buf, unsigned char *data, int size); /** * Copy message from shm. * This function should be called from server. * Data is not deleted from shm after this call. * @param buf pointer to shm structure * @param data pointer to buffer where data is to be written * @param size maximum size to be written into buffer * @return negative value if there was an error */ extern int dlt_shm_copy(DltShm *buf, unsigned char *data, int size); /** * Delete message from shm. * This function should be called from server. * This function should be called after each succesful copy. * @param buf pointer to shm structure * @return negative value if there was an error */ extern int dlt_shm_remove(DltShm *buf); /** * Print information about shm. * @param buf pointer to shm structure */ extern void dlt_shm_info(DltShm *buf); /** * Print status about shm. * @param buf pointer to shm structure */ extern void dlt_shm_status(DltShm *buf); /** * Deinitialise the shared memory on the client side. * @param buf pointer to shm structure * @return negative value if there was an error */ extern DltReturnValue dlt_shm_free_client(DltShm *buf); /** * Returns the total size of the shm. * @param buf pointer to shm structure * @return size of the shared memory. */ extern int dlt_shm_get_total_size(DltShm *buf); /** * Returns the used size in the shm. * @param buf pointer to shm structure * @return size of the shared memory. */ extern int dlt_shm_get_used_size(DltShm *buf); /** * Returns the number of messages in the shm. * @param buf pointer to shm structure * @return size of the shared memory. */ extern int dlt_shm_get_message_count(DltShm *buf); /** * Reset pointers and counters when shm corrupted. * @param buf pointer to shm structure * @return size of the shared memory. */ extern int dlt_shm_reset(DltShm *buf); /** * Recover to find next valid message. * @param buf pointer to shm structure * @return size of the shared memory. */ extern int dlt_shm_recover(DltShm *buf); /** * Deinitialise the shared memory on the server side. * @param buf pointer to shm structure * @param name name of the shared memory * @return negative value if there was an error */ extern DltReturnValue dlt_shm_free_server(DltShm *buf, const char *name); #endif /* DLT_SHM_H */ dlt-daemon-2.18.6/include/dlt/dlt_types.h000066400000000000000000000163721377520261000202360ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_types.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_types.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ #ifndef DLT_TYPES_H #define DLT_TYPES_H #ifdef _MSC_VER typedef __int64 int64_t; typedef __int32 int32_t; typedef __int16 int16_t; typedef __int8 int8_t; typedef unsigned __int64 uint64_t; typedef unsigned __int32 uint32_t; typedef unsigned __int16 uint16_t; typedef unsigned __int8 uint8_t; typedef int pid_t; typedef unsigned int speed_t; # define UINT16_MAX 0xFFFF # include #else # include #endif /** * Definitions of DLT return values */ typedef enum { DLT_RETURN_LOGGING_DISABLED = -7, DLT_RETURN_USER_BUFFER_FULL = -6, DLT_RETURN_WRONG_PARAMETER = -5, DLT_RETURN_BUFFER_FULL = -4, DLT_RETURN_PIPE_FULL = -3, DLT_RETURN_PIPE_ERROR = -2, DLT_RETURN_ERROR = -1, DLT_RETURN_OK = 0, DLT_RETURN_TRUE = 1 } DltReturnValue; /** * Definitions of DLT log level */ typedef enum { DLT_LOG_DEFAULT = -1, /**< Default log level */ DLT_LOG_OFF = 0x00, /**< Log level off */ DLT_LOG_FATAL = 0x01, /**< fatal system error */ DLT_LOG_ERROR = 0x02, /**< error with impact to correct functionality */ DLT_LOG_WARN = 0x03, /**< warning, correct behaviour could not be ensured */ DLT_LOG_INFO = 0x04, /**< informational */ DLT_LOG_DEBUG = 0x05, /**< debug */ DLT_LOG_VERBOSE = 0x06, /**< highest grade of information */ DLT_LOG_MAX /**< maximum value, used for range check */ } DltLogLevelType; /** * Definitions of DLT Format */ typedef enum { DLT_FORMAT_DEFAULT = 0x00, /**< no sepecial format */ DLT_FORMAT_HEX8 = 0x01, /**< Hex 8 */ DLT_FORMAT_HEX16 = 0x02, /**< Hex 16 */ DLT_FORMAT_HEX32 = 0x03, /**< Hex 32 */ DLT_FORMAT_HEX64 = 0x04, /**< Hex 64 */ DLT_FORMAT_BIN8 = 0x05, /**< Binary 8 */ DLT_FORMAT_BIN16 = 0x06, /**< Binary 16 */ DLT_FORMAT_MAX /**< maximum value, used for range check */ } DltFormatType; /** * Definitions of DLT trace status */ typedef enum { DLT_TRACE_STATUS_DEFAULT = -1, /**< Default trace status */ DLT_TRACE_STATUS_OFF = 0x00, /**< Trace status: Off */ DLT_TRACE_STATUS_ON = 0x01, /**< Trace status: On */ DLT_TRACE_STATUS_MAX /**< maximum value, used for range check */ } DltTraceStatusType; /** * Definitions for dlt_user_trace_network/DLT_TRACE_NETWORK() * as defined in the DLT protocol */ typedef enum { DLT_NW_TRACE_IPC = 0x01, /**< Interprocess communication */ DLT_NW_TRACE_CAN = 0x02, /**< Controller Area Network Bus */ DLT_NW_TRACE_FLEXRAY = 0x03, /**< Flexray Bus */ DLT_NW_TRACE_MOST = 0x04, /**< Media Oriented System Transport Bus */ DLT_NW_TRACE_RESERVED0 = 0x05, DLT_NW_TRACE_RESERVED1 = 0x06, DLT_NW_TRACE_RESERVED2 = 0x07, DLT_NW_TRACE_USER_DEFINED0 = 0x08, DLT_NW_TRACE_USER_DEFINED1 = 0x09, DLT_NW_TRACE_USER_DEFINED2 = 0x0A, DLT_NW_TRACE_USER_DEFINED3 = 0x0B, DLT_NW_TRACE_USER_DEFINED4 = 0x0C, DLT_NW_TRACE_USER_DEFINED5 = 0x0D, DLT_NW_TRACE_USER_DEFINED6 = 0x0E, DLT_NW_TRACE_RESEND = 0x0F, /**< Mark a resend */ DLT_NW_TRACE_MAX /**< maximum value, used for range check */ } DltNetworkTraceType; /** * This are the log modes. */ typedef enum { DLT_USER_MODE_UNDEFINED = -1, DLT_USER_MODE_OFF = 0, DLT_USER_MODE_EXTERNAL, DLT_USER_MODE_INTERNAL, DLT_USER_MODE_BOTH, DLT_USER_MODE_MAX /**< maximum value, used for range check */ } DltUserLogMode; /** * Definition of Maintain Logstorage Loglevel modes */ #define DLT_MAINTAIN_LOGSTORAGE_LOGLEVEL_UNDEF -1 #define DLT_MAINTAIN_LOGSTORAGE_LOGLEVEL_OFF 0 #define DLT_MAINTAIN_LOGSTORAGE_LOGLEVEL_ON 1 typedef float float32_t; typedef double float64_t; #if defined DLT_LIB_USE_UNIX_SOCKET_IPC || defined DLT_LIB_USE_VSOCK_IPC /** * Definition Library connection state */ typedef enum { DLT_USER_NOT_CONNECTED = 0, DLT_USER_CONNECTED, DLT_USER_RETRY_CONNECT } DltUserConnectionState; #endif /** * Definition of timestamp types */ typedef enum { DLT_AUTO_TIMESTAMP = 0, DLT_USER_TIMESTAMP } DltTimestampType; #endif /* DLT_TYPES_H */ dlt-daemon-2.18.6/include/dlt/dlt_user.h.in000066400000000000000000001253501377520261000204520ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_user.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_user.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #ifndef DLT_USER_H # define DLT_USER_H /** * \defgroup userapi DLT User API * \addtogroup userapi \{ */ #ifndef DLT_NETWORK_TRACE_ENABLE #cmakedefine DLT_NETWORK_TRACE_ENABLE #endif #ifdef DLT_NETWORK_TRACE_ENABLE # include #else # include # include #endif # include # if !defined (__WIN32__) # include # endif # include "dlt_types.h" # include "dlt_user_macros.h" # include "dlt_shm.h" # ifdef __cplusplus extern "C" { # endif # define DLT_USER_BUF_MAX_SIZE 1390 /**< maximum size of each user buffer, also used for injection buffer */ # define DLT_USER_RESENDBUF_MAX_SIZE (DLT_USER_BUF_MAX_SIZE + 100) /**< Size of resend buffer; Max DLT message size is 1390 bytes plus some extra header space */ /* Use a semaphore or mutex from your OS to prevent concurrent access to the DLT buffer. */ #define DLT_SEM_LOCK() do{\ while ((sem_wait(&dlt_mutex) == -1) && (errno == EINTR)) \ continue; /* Restart if interrupted */ \ } while(0) #define DLT_SEM_FREE() { sem_post(&dlt_mutex); } /** * This structure is used for every context used in an application. */ typedef struct { char contextID[DLT_ID_SIZE]; /**< context id */ int32_t log_level_pos; /**< offset in user-application context field */ int8_t *log_level_ptr; /**< pointer to the log level */ int8_t *trace_status_ptr; /**< pointer to the trace status */ uint8_t mcnt; /**< message counter */ } DltContext; /** * This structure is used for context data used in an application. */ typedef struct { DltContext *handle; /**< pointer to DltContext */ unsigned char *buffer; /**< buffer for building log message*/ size_t size; /**< payload size */ int32_t log_level; /**< log level */ int32_t trace_status; /**< trace status */ int32_t args_num; /**< number of arguments for extended header*/ char *context_description; /**< description of context */ DltTimestampType use_timestamp; /**< whether to use user-supplied timestamps */ uint32_t user_timestamp; /**< user-supplied timestamp to use */ } DltContextData; typedef struct { uint32_t service_id; int (*injection_callback)(uint32_t service_id, void *data, uint32_t length); int (*injection_callback_with_id)(uint32_t service_id, void *data, uint32_t length, void *priv_data); void *data; } DltUserInjectionCallback; typedef struct { char contextID[DLT_ID_SIZE]; /**< Context ID */ int8_t log_level; /**< Log level */ int8_t trace_status; /**< Trace status */ void (*log_level_changed_callback)(char context_id[DLT_ID_SIZE], uint8_t log_level, uint8_t trace_status); } DltUserLogLevelChangedCallback; /** * This structure is used in a table managing all contexts and the corresponding log levels in an application. */ typedef struct { char contextID[DLT_ID_SIZE]; /**< Context ID */ int8_t log_level; /**< Log level */ int8_t *log_level_ptr; /**< Ptr to the log level */ int8_t trace_status; /**< Trace status */ int8_t *trace_status_ptr; /**< Ptr to the trace status */ char *context_description; /**< description of context */ DltUserInjectionCallback *injection_table; /**< Table with pointer to injection functions and service ids */ uint32_t nrcallbacks; /* Log Level changed callback */ void (*log_level_changed_callback)(char context_id[DLT_ID_SIZE], uint8_t log_level, uint8_t trace_status); } dlt_ll_ts_type; /** * @brief holds initial log-level for given appId:ctxId pair */ typedef struct { char appId[DLT_ID_SIZE]; char ctxId[DLT_ID_SIZE]; int8_t ll; } dlt_env_ll_item; /** * @brief holds all initial log-levels given via environment variable DLT_INITIAL_LOG_LEVEL */ typedef struct { dlt_env_ll_item *item; size_t array_size; size_t num_elem; } dlt_env_ll_set; /** * This structure is used once for one application. */ typedef struct { char ecuID[DLT_ID_SIZE]; /**< ECU ID */ char appID[DLT_ID_SIZE]; /**< Application ID */ int dlt_log_handle; /**< Handle to fifo of dlt daemon */ int dlt_user_handle; /**< Handle to own fifo */ #ifdef DLT_NETWORK_TRACE_ENABLE mqd_t dlt_segmented_queue_read_handle; /**< Handle message queue */ mqd_t dlt_segmented_queue_write_handle; /**< Handle message queue */ pthread_t dlt_segmented_nwt_handle; /**< thread handle of segmented sending */ #endif int8_t dlt_is_file; /**< Target of logging: 1 to file, 0 to daemon */ dlt_ll_ts_type *dlt_ll_ts; /** [MAX_DLT_LL_TS_ENTRIES]; < Internal management struct for all * contexts */ uint32_t dlt_ll_ts_max_num_entries; /**< Maximum number of contexts */ uint32_t dlt_ll_ts_num_entries; /**< Number of used contexts */ int8_t overflow; /**< Overflow marker, set to 1 on overflow, 0 otherwise */ uint32_t overflow_counter; /**< Counts the number of lost messages */ char *application_description; /**< description of application */ DltReceiver receiver; /**< Receiver for internal user-defined messages from daemon */ int8_t verbose_mode; /**< Verbose mode enabled: 1 enabled, 0 disabled */ int8_t use_extended_header_for_non_verbose; /**< Use extended header for non verbose: 1 enabled, 0 disabled */ int8_t with_session_id; /**< Send always session id: 1 enabled, 0 disabled */ int8_t with_timestamp; /**< Send always timestamp: 1 enabled, 0 disabled */ int8_t with_ecu_id; /**< Send always ecu id: 1 enabled, 0 disabled */ int8_t enable_local_print; /**< Local printing of log messages: 1 enabled, 0 disabled */ int8_t local_print_mode; /**< Local print mode, controlled by environment variable */ int8_t disable_injection_msg; /**< Injection msg availability: 1 disabled, 0 enabled (default) */ int8_t log_state; /**< Log state of external connection: * 1 client connected, * 0 not connected, * -1 unknown */ DltBuffer startup_buffer; /**< Ring-buffer for buffering messages during startup and missing connection */ /* Buffer used for resending, locked by DLT semaphore */ uint8_t *resend_buffer; uint32_t timeout_at_exit_handler; /**< timeout used in dlt_user_atexit_blow_out_user_buffer, in 0.1 milliseconds */ dlt_env_ll_set initial_ll_set; # ifdef DLT_SHM_ENABLE DltShm dlt_shm; # endif # ifdef DLT_TEST_ENABLE int corrupt_user_header; int corrupt_message_size; int16_t corrupt_message_size_size; # endif # if defined DLT_LIB_USE_UNIX_SOCKET_IPC || defined DLT_LIB_USE_VSOCK_IPC DltUserConnectionState connection_state; # endif uint16_t log_buf_len; /**< length of message buffer, by default: DLT_USER_BUF_MAX_SIZE */ } DltUser; typedef int (*dlt_injection_callback_id)(uint32_t, void *, uint32_t, void *); typedef int (*dlt_injection_callback)(uint32_t, void *, uint32_t); /************************************************************************************************** * The following API functions define a low level function interface for DLT **************************************************************************************************/ /** * Initialize the generation of a DLT log message (intended for usage in verbose mode) * This function has to be called first, when an application wants to send a new log messages. * Following functions like dlt_user_log_write_string and dlt_user_log_write_finish must only be called, * when return value is bigger than zero. * @param handle pointer to an object containing information about one special logging context * @param log pointer to an object containing information about logging context data * @param loglevel this is the current log level of the log message to be sent * @return Value from DltReturnValue enum, DLT_RETURN_TRUE if log level is matching */ DltReturnValue dlt_user_log_write_start(DltContext *handle, DltContextData *log, DltLogLevelType loglevel); /** * Initialize the generation of a DLT log message (intended for usage in non-verbose mode) * This function has to be called first, when an application wants to send a new log messages. * Following functions like dlt_user_log_write_string and dlt_user_log_write_finish must only be called, * when return value is bigger than zero. * @param handle pointer to an object containing information about one special logging context * @param log pointer to an object containing information about logging context data * @param loglevel this is the current log level of the log message to be sent * @param messageid message id of message * @return Value from DltReturnValue enum, DLT_RETURN_TRUE if log level is matching */ DltReturnValue dlt_user_log_write_start_id(DltContext *handle, DltContextData *log, DltLogLevelType loglevel, uint32_t messageid); /** * Finishing the generation of a DLT log message and sending it to the DLT daemon. * This function has to be called after writing all the log attributes of a log message. * @param log pointer to an object containing information about logging context data * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_finish(DltContextData *log); /** * Write a boolean parameter into a DLT log message. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param data boolean parameter written into log message (mapped to uint8) * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_bool(DltContextData *log, uint8_t data); /** * Write a float parameter into a DLT log message. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param data float32_t parameter written into log message. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_float32(DltContextData *log, float32_t data); /** * Write a double parameter into a DLT log message. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param data float64_t parameter written into log message. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_float64(DltContextData *log, double data); /** * Write a uint parameter into a DLT log message. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param data unsigned int parameter written into log message. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_uint(DltContextData *log, unsigned int data); DltReturnValue dlt_user_log_write_uint8(DltContextData *log, uint8_t data); DltReturnValue dlt_user_log_write_uint16(DltContextData *log, uint16_t data); DltReturnValue dlt_user_log_write_uint32(DltContextData *log, uint32_t data); DltReturnValue dlt_user_log_write_uint64(DltContextData *log, uint64_t data); /** * Write a uint parameter into a DLT log message. The output will be formatted as given by the parameter type. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param data unsigned int parameter written into log message. * @param type The formatting type of the string output. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_uint8_formatted(DltContextData *log, uint8_t data, DltFormatType type); DltReturnValue dlt_user_log_write_uint16_formatted(DltContextData *log, uint16_t data, DltFormatType type); DltReturnValue dlt_user_log_write_uint32_formatted(DltContextData *log, uint32_t data, DltFormatType type); DltReturnValue dlt_user_log_write_uint64_formatted(DltContextData *log, uint64_t data, DltFormatType type); /** * Write a pointer value architecture independent. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param data void* parameter written into log message. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_ptr(DltContextData *log, void *data); /** * Write a int parameter into a DLT log message. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param data int parameter written into log message. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_int(DltContextData *log, int data); DltReturnValue dlt_user_log_write_int8(DltContextData *log, int8_t data); DltReturnValue dlt_user_log_write_int16(DltContextData *log, int16_t data); DltReturnValue dlt_user_log_write_int32(DltContextData *log, int32_t data); DltReturnValue dlt_user_log_write_int64(DltContextData *log, int64_t data); /** * Write a null terminated ASCII string into a DLT log message. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param text pointer to the parameter written into log message containing null termination. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_string(DltContextData *log, const char *text); /** * Write a potentially non-null-terminated ASCII string into a DLT log message. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param text pointer to the parameter written into log message * @param length length in bytes of @a text (without any termination character) * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_sized_string(DltContextData *log, const char *text, uint16_t length); /** * Write a constant null terminated ASCII string into a DLT log message. * In non verbose mode DLT parameter will not be send at all. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param text pointer to the parameter written into log message containing null termination. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_constant_string(DltContextData *log, const char *text); /** * Write a constant, potentially non-null-terminated ASCII string into a DLT log message. * In non verbose mode DLT parameter will not be send at all. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param text pointer to the parameter written into log message containing null termination. * @param length length in bytes of @a text (without any termination character) * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_sized_constant_string(DltContextData *log, const char *text, uint16_t length); /** * Write a null terminated UTF8 string into a DLT log message. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param text pointer to the parameter written into log message containing null termination. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_utf8_string(DltContextData *log, const char *text); /** * Write a potentially non-null-terminated UTF8 string into a DLT log message. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param text pointer to the parameter written into log message * @param length length in bytes of @a text (without any termination character) * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_sized_utf8_string(DltContextData *log, const char *text, uint16_t length); /** * Write a binary memory block into a DLT log message. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param data pointer to the parameter written into log message. * @param length length in bytes of the parameter written into log message. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_raw(DltContextData *log, void *data, uint16_t length); /** * Write a binary memory block into a DLT log message. * dlt_user_log_write_start has to be called before adding any attributes to the log message. * Finish sending log message by calling dlt_user_log_write_finish. * @param log pointer to an object containing information about logging context data * @param data pointer to the parameter written into log message. * @param length length in bytes of the parameter written into log message. * @param type the format information. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_write_raw_formatted(DltContextData *log, void *data, uint16_t length, DltFormatType type); /** * Trace network message * @param handle pointer to an object containing information about one special logging context * @param nw_trace_type type of network trace (DLT_NW_TRACE_IPC, DLT_NW_TRACE_CAN, DLT_NW_TRACE_FLEXRAY, or DLT_NW_TRACE_MOST) * @param header_len length of network message header * @param header pointer to network message header * @param payload_len length of network message payload * @param payload pointer to network message payload * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_trace_network(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload); /** * Trace network message, truncated if necessary. * @param handle pointer to an object containing information about logging context * @param nw_trace_type type of network trace (DLT_NW_TRACE_IPC, DLT_NW_TRACE_CAN, DLT_NW_TRACE_FLEXRAY, or DLT_NW_TRACE_MOST) * @param header_len length of network message header * @param header pointer to network message header * @param payload_len length of network message payload * @param payload pointer to network message payload * @param allow_truncate Set to > 0 to allow truncating of the message if it is too large. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_trace_network_truncated(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload, int allow_truncate); /** * Trace network message in segmented asynchronous mode. * The sending of the data is done in a separate thread. * Please note that handle must exist for the lifetime of the application, because * data chunks are sent asynchronously in undetermined future time. * @param handle pointer to an object containing information about logging context * @param nw_trace_type type of network trace (DLT_NW_TRACE_IPC, DLT_NW_TRACE_CAN, DLT_NW_TRACE_FLEXRAY, or DLT_NW_TRACE_MOST) * @param header_len length of network message header * @param header pointer to network message header * @param payload_len length of network message payload * @param payload pointer to network message payload * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_trace_network_segmented(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload); /************************************************************************************************** * The following API functions define a high level function interface for DLT **************************************************************************************************/ /** * Initialize the user lib communication with daemon. * This function has to be called first, before using any DLT user lib functions. * @return Value from DltReturnValue enum */ DltReturnValue dlt_init(); /** * Initialize the user lib writing only to file. * This function has to be called first, before using any DLT user lib functions. * @param name name of an optional log file * @return Value from DltReturnValue enum */ DltReturnValue dlt_init_file(const char *name); /** * Terminate the user lib. * This function has to be called when finishing using the DLT user lib. * @return Value from DltReturnValue enum */ DltReturnValue dlt_free(); /** * Check the library version of DLT library. * @param user_major_version the major version to be compared * @param user_minor_version the minor version to be compared * @return Value from DltReturnValue enum, DLT_RETURN_ERROR if there is a mismatch */ DltReturnValue dlt_check_library_version(const char *user_major_version, const char *user_minor_version); /** * Register an application in the daemon. * @param apid four byte long character array with the application id * @param description long name of the application * @return Value from DltReturnValue enum */ DltReturnValue dlt_register_app(const char *apid, const char *description); /** * Unregister an application in the daemon. * This function has to be called when finishing using an application. * @return Value from DltReturnValue enum */ DltReturnValue dlt_unregister_app(void); /** * Unregister an application in the daemon and also flushes the buffered logs. * This function has to be called when finishing using an application. * @return Value from DltReturnValue enum */ DltReturnValue dlt_unregister_app_flush_buffered_logs(void); /** * Get the application id * @param four byte long character array to store the application id * @return Value from DltReturnValue enum */ DltReturnValue dlt_get_appid(char *appid); /** * Register a context in the daemon. * This function has to be called before first usage of the context. * @param handle pointer to an object containing information about one special logging context * @param contextid four byte long character array with the context id * @param description long name of the context * @return Value from DltReturnValue enum */ DltReturnValue dlt_register_context(DltContext *handle, const char *contextid, const char *description); /** * Register a context in the daemon with pre-defined log level and pre-defined trace status. * This function has to be called before first usage of the context. * @param handle pointer to an object containing information about one special logging context * @param contextid four byte long character array with the context id * @param description long name of the context * @param loglevel This is the log level to be pre-set for this context * (DLT_LOG_DEFAULT is not allowed here) * @param tracestatus This is the trace status to be pre-set for this context * (DLT_TRACE_STATUS_DEFAULT is not allowed here) * @return Value from DltReturnValue enum */ DltReturnValue dlt_register_context_ll_ts(DltContext *handle, const char *contextid, const char *description, int loglevel, int tracestatus); /** * Register a context in the daemon with log level changed callback fn. * This function is introduced to avoid missing of LL change callback during registration * @param handle pointer to an object containing information about one special logging context * @param contextid four byte long character array with the context id * @param description long name of the context * @param *dlt_log_level_changed_callback This is the fn which will be called when log level is changed * @return Value from DltReturnValue enum */ DltReturnValue dlt_register_context_llccb(DltContext *handle, const char *contextid, const char *description, void (*dlt_log_level_changed_callback)(char context_id[DLT_ID_SIZE], uint8_t log_level, uint8_t trace_status)); /** * Unregister a context in the DLT daemon. * This function has to be called when finishing using a context. * @param handle pointer to an object containing information about one special logging context * @return Value from DltReturnValue enum */ DltReturnValue dlt_unregister_context(DltContext *handle); /** * Set maximum timeout for re-sending at exit * @param timeout_in_milliseconds maximum time to wait until giving up re-sending, default 10000 (equals to 10 seconds) */ int dlt_set_resend_timeout_atexit(uint32_t timeout_in_milliseconds); /** * Set the logging mode used by the daemon. * The logging mode is stored persistantly by the daemon. * @see DltUserLogMode * @param mode the new logging mode used by the daemon: off, extern, internal, both. * @return Value from DltReturnValue enum */ DltReturnValue dlt_set_log_mode(DltUserLogMode mode); /** * Get the state of the connected client to the daemon. * The user application gets a message, when client is connected or disconnected. * This value contains the last state. * It needs some time until the application gets state from the daemon. * Until then the state is "unknown state". * @return -1 = unknown state, 0 = client not connected, 1 = client connected */ int dlt_get_log_state(); /** * Register callback function called when injection message was received * @param handle pointer to an object containing information about one special logging context * @param service_id the service id to be waited for * @param (*dlt_injection_callback) function pointer to callback function * @return Value from DltReturnValue enum */ DltReturnValue dlt_register_injection_callback(DltContext *handle, uint32_t service_id, int (*dlt_injection_callback)(uint32_t service_id, void *data, uint32_t length)); /** * Register callback function with private data called when injection message was received * @param handle pointer to an object containing information about one special logging context * @param service_id the service id to be waited for * @param (*dlt_injection_callback) function pointer to callback function * @param priv private data * @return Value from DltReturnValue enum */ DltReturnValue dlt_register_injection_callback_with_id(DltContext *handle, uint32_t service_id, int (*dlt_injection_callback)(uint32_t service_id, void *data, uint32_t length, void *priv_data), void *priv); /** * Register callback function called when log level of context was changed * @param handle pointer to an object containing information about one special logging context * @param (*dlt_log_level_changed_callback) function pointer to callback function * @return Value from DltReturnValue enum */ DltReturnValue dlt_register_log_level_changed_callback(DltContext *handle, void (*dlt_log_level_changed_callback)( char context_id[DLT_ID_SIZE], uint8_t log_level, uint8_t trace_status)); /** * Switch to verbose mode * @return Value from DltReturnValue enum */ DltReturnValue dlt_verbose_mode(void); /** * Check the version of dlt library with library version used of the application. * @param user_major_version version number of application - see dlt_version.h * @param user_minor_version version number of application - see dlt_version.h * @return Value from DltReturnValue enum, DLT_RETURN_ERROR if there is a mismatch */ DltReturnValue dlt_user_check_library_version(const char *user_major_version, const char *user_minor_version); /** * Switch to non-verbose mode * */ DltReturnValue dlt_nonverbose_mode(void); /** * Use extended header in non verbose mode. * Enabled by default. * @param use_extended_header_for_non_verbose Use extended header for non verbose mode if true * @return Value from DltReturnValue enum */ DltReturnValue dlt_use_extended_header_for_non_verbose(int8_t use_extended_header_for_non_verbose); /** * Send session id configuration. * Enabled by default. * @param with_session_id Send session id in each message if enabled * @return Value from DltReturnValue enum */ DltReturnValue dlt_with_session_id(int8_t with_session_id); /** * Send timestamp configuration. * Enabled by default. * @param with_timestamp Send timestamp id in each message if enabled * @return Value from DltReturnValue enum */ DltReturnValue dlt_with_timestamp(int8_t with_timestamp); /** * Send ecu id configuration. * Enabled by default. * @param with_ecu_id Send ecu id in each message if enabled * @return Value from DltReturnValue enum */ DltReturnValue dlt_with_ecu_id(int8_t with_ecu_id); /** * Set maximum logged log level and trace status of application * * @param loglevel This is the log level to be set for the whole application * @param tracestatus This is the trace status to be set for the whole application * @return Value from DltReturnValue enum */ DltReturnValue dlt_set_application_ll_ts_limit(DltLogLevelType loglevel, DltTraceStatusType tracestatus); /** * @brief adjust log-level based on values given through environment * * Iterate over the set of items, and find the best match. * For any item that matches, the one with the highest priority is selected and that * log-level is returned. * * Priorities are determined as follows: * - no apid, no ctid only ll given in item: use ll with prio 1 * - no apid, ctid matches: use ll with prio 2 * - no ctid, apid matches: use ll with prio 3 * - apid, ctid matches: use ll with prio 4 * * @param ll_set * @param apid * @param ctid * @param ll * If no item matches or in case of error, the original log-level (\param ll) is returned */ int dlt_env_adjust_ll_from_env(dlt_env_ll_set const *const ll_set, char const *const apid, char const *const ctid, int const ll); /** * @brief extract log-level settings from given string * * Scan \param env for setttings like apid:ctid:log-level and store them * in given \param ll_set * * @param env reference to a string to be parsed, after parsing env will point after the last parse character * @param ll_set set of log-level extracted from given string * * @return 0 on success * @return -1 on failure */ int dlt_env_extract_ll_set(char **const env, dlt_env_ll_set *const ll_set); void dlt_env_free_ll_set(dlt_env_ll_set *const ll_set); /** * Enable local printing of messages * @return Value from DltReturnValue enum */ DltReturnValue dlt_enable_local_print(void); /** * Disable local printing of messages * @return Value from DltReturnValue enum */ DltReturnValue dlt_disable_local_print(void); /** * Write a null terminated ASCII string into a DLT log message. * @param handle pointer to an object containing information about one special logging context * @param loglevel this is the current log level of the log message to be sent * @param text pointer to the ASCII string written into log message containing null termination. * @return Value from DltReturnValue enum */ DltReturnValue dlt_log_string(DltContext *handle, DltLogLevelType loglevel, const char *text); /** * Write a null terminated ASCII string and an integer value into a DLT log message. * @param handle pointer to an object containing information about one special logging context * @param loglevel this is the current log level of the log message to be sent * @param text pointer to the ASCII string written into log message containing null termination. * @param data integer value written into the log message * @return Value from DltReturnValue enum */ DltReturnValue dlt_log_string_int(DltContext *handle, DltLogLevelType loglevel, const char *text, int data); /** * Write a null terminated ASCII string and an unsigned integer value into a DLT log message. * @param handle pointer to an object containing information about one special logging context * @param loglevel this is the current log level of the log message to be sent * @param text pointer to the ASCII string written into log message containing null termination. * @param data unsigned integer value written into the log message * @return Value from DltReturnValue enum */ DltReturnValue dlt_log_string_uint(DltContext *handle, DltLogLevelType loglevel, const char *text, unsigned int data); /** * Write an integer value into a DLT log message. * @param handle pointer to an object containing information about one special logging context * @param loglevel this is the current log level of the log message to be sent * @param data integer value written into the log message * @return Value from DltReturnValue enum */ DltReturnValue dlt_log_int(DltContext *handle, DltLogLevelType loglevel, int data); /** * Write an unsigned integer value into a DLT log message. * @param handle pointer to an object containing information about one special logging context * @param loglevel this is the current log level of the log message to be sent * @param data unsigned integer value written into the log message * @return Value from DltReturnValue enum */ DltReturnValue dlt_log_uint(DltContext *handle, DltLogLevelType loglevel, unsigned int data); /** * Write an unsigned integer value into a DLT log message. * @param handle pointer to an object containing information about one special logging context * @param loglevel this is the current log level of the log message to be sent * @param data pointer to the parameter written into log message. * @param length length in bytes of the parameter written into log message. * @return Value from DltReturnValue enum */ DltReturnValue dlt_log_raw(DltContext *handle, DltLogLevelType loglevel, void *data, uint16_t length); /** * Write marker message to DLT. * @return Value from DltReturnValue enum */ DltReturnValue dlt_log_marker(); /** * Get the total size and available size of the shared memory buffer between daemon and applications. * This information is useful to control the flow control between applications and daemon. * For example only 50% of the buffer should be used for file transfer. * @param total_size total size of buffer in bytes * @param used_size used size of buffer in bytes * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_check_buffer(int *total_size, int *used_size); /** * Try to resend log message in the user buffer. Stops if the dlt_uptime is bigger than * dlt_uptime() + DLT_USER_ATEXIT_RESEND_BUFFER_EXIT_TIMEOUT. A pause between the resending * attempts can be defined with DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP * @return number of messages in the user buffer */ int dlt_user_atexit_blow_out_user_buffer(void); /** * Try to resend log message in the user buffer. * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_resend_buffer(void); /** * Checks the log level passed by the log function if enabled for that context or not. * This function can be called by applications before generating their logs. * Also called before writing new log messages. * @param handle pointer to an object containing information about one special logging context * @param loglevel this is the current log level of the log message to be sent * @return Value from DltReturnValue enum, DLT_RETURN_TRUE if log level is enabled */ static inline DltReturnValue dlt_user_is_logLevel_enabled(DltContext *handle, DltLogLevelType loglevel) { if ((loglevel < DLT_LOG_DEFAULT) || (loglevel >= DLT_LOG_MAX)) return DLT_RETURN_WRONG_PARAMETER; if ((handle == NULL) || (handle->log_level_ptr == NULL)) return DLT_RETURN_WRONG_PARAMETER; if ((loglevel <= (DltLogLevelType)(*(handle->log_level_ptr))) && (loglevel != DLT_LOG_OFF)) return DLT_RETURN_TRUE; return DLT_RETURN_LOGGING_DISABLED; } # ifdef DLT_TEST_ENABLE void dlt_user_test_corrupt_user_header(int enable); void dlt_user_test_corrupt_message_size(int enable, int16_t size); # endif /* DLT_TEST_ENABLE */ # ifdef __cplusplus } # endif /** \} */ #endif /* DLT_USER_H */ dlt-daemon-2.18.6/include/dlt/dlt_user_macros.h000066400000000000000000000605201377520261000214060ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_user_macros.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_user_macros.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1515 $ * $LastChangedDate: 2010-12-13 09:18:54 +0100 (Mon, 13 Dec 2010) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #ifndef DLT_USER_MACROS_H #define DLT_USER_MACROS_H #include "dlt_version.h" #include "dlt_types.h" /** * \defgroup userapi DLT User API * \addtogroup userapi \{ */ /************************************************************************************************** * The folowing macros define a macro interface for DLT **************************************************************************************************/ /** * Create an object for a new context. * This macro has to be called first for every. * @param CONTEXT object containing information about one special logging context * @note To avoid the MISRA warning "Null statement is located close to other code or comments" * remove the semicolon when using the macro. * Example: DLT_DECLARE_CONTEXT(hContext) */ #define DLT_DECLARE_CONTEXT(CONTEXT) \ DltContext CONTEXT; /** * Use an object of a new context created in another module. * This macro has to be called first for every. * @param CONTEXT object containing information about one special logging context * @note To avoid the MISRA warning "Null statement is located close to other code or comments" * remove the semicolon when using the macro. * Example: DLT_IMPORT_CONTEXT(hContext) */ #define DLT_IMPORT_CONTEXT(CONTEXT) \ extern DltContext CONTEXT; /** * Register application. * @param APPID application id with maximal four characters * @param DESCRIPTION ASCII string containing description */ #define DLT_REGISTER_APP(APPID, DESCRIPTION) do { \ (void)dlt_check_library_version(_DLT_PACKAGE_MAJOR_VERSION, _DLT_PACKAGE_MINOR_VERSION); \ (void)dlt_register_app(APPID, DESCRIPTION); } while (0) /** * Unregister application. */ #define DLT_UNREGISTER_APP() do { \ (void)dlt_unregister_app(); } while (0) /** * Unregister application and flush the logs buffered in startup buffer if any. */ #define DLT_UNREGISTER_APP_FLUSH_BUFFERED_LOGS() do { \ (void)dlt_unregister_app_flush_buffered_logs(); } while (0) /** * To Get application ID. * @Param APPID character pointer of minimum 4 bytes */ #define DLT_GET_APPID(APPID) do{\ dlt_get_appid(APPID);} while(0) /** * Register context (with default log level and default trace status) * @param CONTEXT object containing information about one special logging context * @param CONTEXTID context id with maximal four characters * @param DESCRIPTION ASCII string containing description */ #define DLT_REGISTER_CONTEXT(CONTEXT, CONTEXTID, DESCRIPTION) do { \ (void)dlt_register_context(&(CONTEXT), CONTEXTID, DESCRIPTION); } while (0) /** * Register context with pre-defined log level and pre-defined trace status. * @param CONTEXT object containing information about one special logging context * @param CONTEXTID context id with maximal four characters * @param DESCRIPTION ASCII string containing description * @param LOGLEVEL log level to be pre-set for this context * (DLT_LOG_DEFAULT is not allowed here) * @param TRACESTATUS trace status to be pre-set for this context * (DLT_TRACE_STATUS_DEFAULT is not allowed here) */ #define DLT_REGISTER_CONTEXT_LL_TS(CONTEXT, CONTEXTID, DESCRIPTION, LOGLEVEL, TRACESTATUS) do { \ (void)dlt_register_context_ll_ts(&(CONTEXT), CONTEXTID, DESCRIPTION, LOGLEVEL, TRACESTATUS); } while (0) /** * Register context (with default log level and default trace status and log level change callback) * @param CONTEXT object containing information about one special logging context * @param CONTEXTID context id with maximal four characters * @param DESCRIPTION ASCII string containing description * @param CBK log level change callback to be registered */ #define DLT_REGISTER_CONTEXT_LLCCB(CONTEXT, CONTEXTID, DESCRIPTION, CBK) do { \ (void)dlt_register_context_llccb(&(CONTEXT), CONTEXTID, DESCRIPTION, CBK); } while (0) /** * Unregister context. * @param CONTEXT object containing information about one special logging context */ #define DLT_UNREGISTER_CONTEXT(CONTEXT) do { \ (void)dlt_unregister_context(&(CONTEXT)); } while (0) /** * Register callback function called when injection message was received * @param CONTEXT object containing information about one special logging context * @param SERVICEID service id of the injection message * @param CALLBACK function pointer to callback function */ #define DLT_REGISTER_INJECTION_CALLBACK(CONTEXT, SERVICEID, CALLBACK) do { \ (void)dlt_register_injection_callback(&(CONTEXT), SERVICEID, CALLBACK); } while (0) /** * Register callback function called when injection message was received * @param CONTEXT object containing information about one special logging context * @param SERVICEID service id of the injection message * @param CALLBACK function pointer to callback function * @param PRIV_DATA data specific to context */ #define DLT_REGISTER_INJECTION_CALLBACK_WITH_ID(CONTEXT, SERVICEID, CALLBACK, PRIV_DATA) do { \ (void)dlt_register_injection_callback_with_id(&(CONTEXT), SERVICEID, CALLBACK, PRIV_DATA); } while (0) /** * Register callback function called when log level of context was changed * @param CONTEXT object containing information about one special logging context * @param CALLBACK function pointer to callback function */ #define DLT_REGISTER_LOG_LEVEL_CHANGED_CALLBACK(CONTEXT, CALLBACK) do { \ (void)dlt_register_log_level_changed_callback(&(CONTEXT), CALLBACK); } while (0) /** * Send log message with variable list of messages (intended for verbose mode) * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message * @param ... variable list of arguments * @note To avoid the MISRA warning "The comma operator has been used outside a for statement" * use a semicolon instead of a comma to separate the __VA_ARGS__. * Example: DLT_LOG(hContext, DLT_LOG_INFO, DLT_STRING("Hello world"); DLT_INT(123)); */ #ifdef _MSC_VER /* DLT_LOG is not supported by MS Visual C++ */ /* use function interface instead */ #else # define DLT_LOG(CONTEXT, LOGLEVEL, ...) \ do { \ DltContextData log_local; \ int dlt_local; \ dlt_local = dlt_user_log_write_start(&CONTEXT, &log_local, LOGLEVEL); \ if (dlt_local == DLT_RETURN_TRUE) \ { \ __VA_ARGS__; \ (void)dlt_user_log_write_finish(&log_local); \ } \ } while (0) #endif /** * Send log message with variable list of messages (intended for verbose mode) * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message * @param TS timestamp to be used for log message * @param ... variable list of arguments * @note To avoid the MISRA warning "The comma operator has been used outside a for statement" * use a semicolon instead of a comma to separate the __VA_ARGS__. * Example: DLT_LOG_TS(hContext, DLT_LOG_INFO, timestamp, DLT_STRING("Hello world"); DLT_INT(123)); */ #ifdef _MSC_VER /* DLT_LOG_TS is not supported by MS Visual C++ */ /* use function interface instead */ #else # define DLT_LOG_TS(CONTEXT, LOGLEVEL, TS, ...) \ do { \ DltContextData log_local; \ int dlt_local; \ dlt_local = dlt_user_log_write_start(&CONTEXT, &log_local, LOGLEVEL); \ if (dlt_local == DLT_RETURN_TRUE) \ { \ __VA_ARGS__; \ log_local.use_timestamp = DLT_USER_TIMESTAMP; \ log_local.user_timestamp = (uint32_t) TS; \ (void)dlt_user_log_write_finish(&log_local); \ } \ } while (0) #endif /** * Send log message with variable list of messages (intended for non-verbose mode) * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message * @param MSGID the message id of log message * @param ... variable list of arguments * calls to DLT_STRING(), DLT_BOOL(), DLT_FLOAT32(), DLT_FLOAT64(), * DLT_INT(), DLT_UINT(), DLT_RAW() * @note To avoid the MISRA warning "The comma operator has been used outside a for statement" * use a semicolon instead of a comma to separate the __VA_ARGS__. * Example: DLT_LOG_ID(hContext, DLT_LOG_INFO, 0x1234, DLT_STRING("Hello world"); DLT_INT(123)); */ #ifdef _MSC_VER /* DLT_LOG_ID is not supported by MS Visual C++ */ /* use function interface instead */ #else # define DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ...) \ do { \ DltContextData log_local; \ int dlt_local; \ dlt_local = dlt_user_log_write_start_id(&CONTEXT, &log_local, LOGLEVEL, MSGID); \ if (dlt_local == DLT_RETURN_TRUE) \ { \ __VA_ARGS__; \ (void)dlt_user_log_write_finish(&log_local); \ } \ } while (0) #endif /** * Send log message with variable list of messages (intended for non-verbose mode) * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message * @param MSGID the message id of log message * @param TS timestamp to be used for log message * @param ... variable list of arguments * calls to DLT_STRING(), DLT_BOOL(), DLT_FLOAT32(), DLT_FLOAT64(), * DLT_INT(), DLT_UINT(), DLT_RAW() * @note To avoid the MISRA warning "The comma operator has been used outside a for statement" * use a semicolon instead of a comma to separate the __VA_ARGS__. * Example: DLT_LOG_ID_TS(hContext, DLT_LOG_INFO, 0x1234, timestamp, DLT_STRING("Hello world"); DLT_INT(123)); */ #ifdef _MSC_VER /* DLT_LOG_ID_TS is not supported by MS Visual C++ */ /* use function interface instead */ #else # define DLT_LOG_ID_TS(CONTEXT, LOGLEVEL, MSGID, TS, ...) \ do { \ DltContextData log_local; \ int dlt_local; \ dlt_local = dlt_user_log_write_start_id(&CONTEXT, &log_local, LOGLEVEL, MSGID); \ if (dlt_local == DLT_RETURN_TRUE) \ { \ __VA_ARGS__; \ log_local.use_timestamp = DLT_USER_TIMESTAMP; \ log_local.user_timestamp = (uint32_t) TS; \ (void)dlt_user_log_write_finish(&log_local); \ } \ } while (0) #endif /** * Add string parameter to the log messsage. * @param TEXT ASCII string */ #define DLT_STRING(TEXT) \ (void)dlt_user_log_write_string(&log_local, TEXT) /** * Add string parameter with given length to the log messsage. * The string in @a TEXT does not need to be null-terminated, but * the copied string will be null-terminated at its destination * in the message buffer. * @param TEXT ASCII string * @param LEN length in bytes to take from @a TEXT */ #define DLT_SIZED_STRING(TEXT, LEN) \ (void)dlt_user_log_write_sized_string(&log_local, TEXT, LEN) /** * Add constant string parameter to the log messsage. * @param TEXT Constant ASCII string */ #define DLT_CSTRING(TEXT) \ (void)dlt_user_log_write_constant_string(&log_local, TEXT) /** * Add constant string parameter with given length to the log messsage. * The string in @a TEXT does not need to be null-terminated, but * the copied string will be null-terminated at its destination * in the message buffer. * @param TEXT Constant ASCII string * @param LEN length in bytes to take from @a TEXT */ #define DLT_SIZED_CSTRING(TEXT, LEN) \ (void)dlt_user_log_write_sized_constant_string(&log_local, TEXT, LEN) /** * Add utf8-encoded string parameter to the log messsage. * @param TEXT UTF8-encoded string */ #define DLT_UTF8(TEXT) \ (void)dlt_user_log_write_utf8_string(&log_local, TEXT) /** * Add utf8-encoded string parameter with given length to the log messsage. * The string in @a TEXT does not need to be null-terminated, but * the copied string will be null-terminated at its destination * in the message buffer. * @param TEXT UTF8-encoded string * @param LEN length in bytes to take from @a TEXT */ #define DLT_SIZED_UTF8(TEXT, LEN) \ (void)dlt_user_log_write_sized_utf8_string(&log_local, TEXT, LEN) /** * Add boolean parameter to the log messsage. * @param BOOL_VAR Boolean value (mapped to uint8) */ #define DLT_BOOL(BOOL_VAR) \ (void)dlt_user_log_write_bool(&log_local, BOOL_VAR) /** * Add float32 parameter to the log messsage. * @param FLOAT32_VAR Float32 value (mapped to float) */ #define DLT_FLOAT32(FLOAT32_VAR) \ (void)dlt_user_log_write_float32(&log_local, FLOAT32_VAR) /** * Add float64 parameter to the log messsage. * @param FLOAT64_VAR Float64 value (mapped to double) */ #define DLT_FLOAT64(FLOAT64_VAR) \ (void)dlt_user_log_write_float64(&log_local, FLOAT64_VAR) /** * Add integer parameter to the log messsage. * @param INT_VAR integer value */ #define DLT_INT(INT_VAR) \ (void)dlt_user_log_write_int(&log_local, INT_VAR) #define DLT_INT8(INT_VAR) \ (void)dlt_user_log_write_int8(&log_local, INT_VAR) #define DLT_INT16(INT_VAR) \ (void)dlt_user_log_write_int16(&log_local, INT_VAR) #define DLT_INT32(INT_VAR) \ (void)dlt_user_log_write_int32(&log_local, INT_VAR) #define DLT_INT64(INT_VAR) \ (void)dlt_user_log_write_int64(&log_local, INT_VAR) /** * Add unsigned integer parameter to the log messsage. * @param UINT_VAR unsigned integer value */ #define DLT_UINT(UINT_VAR) \ (void)dlt_user_log_write_uint(&log_local, UINT_VAR) #define DLT_UINT8(UINT_VAR) \ (void)dlt_user_log_write_uint8(&log_local, UINT_VAR) #define DLT_UINT16(UINT_VAR) \ (void)dlt_user_log_write_uint16(&log_local, UINT_VAR) #define DLT_UINT32(UINT_VAR) \ (void)dlt_user_log_write_uint32(&log_local, UINT_VAR) #define DLT_UINT64(UINT_VAR) \ (void)dlt_user_log_write_uint64(&log_local, UINT_VAR) /** * Add binary memory block to the log messages. * @param BUF pointer to memory block * @param LEN length of memory block */ #define DLT_RAW(BUF, LEN) \ (void)dlt_user_log_write_raw(&log_local, BUF, LEN) #define DLT_HEX8(UINT_VAR) \ (void)dlt_user_log_write_uint8_formatted(&log_local, UINT_VAR, DLT_FORMAT_HEX8) #define DLT_HEX16(UINT_VAR) \ (void)dlt_user_log_write_uint16_formatted(&log_local, UINT_VAR, DLT_FORMAT_HEX16) #define DLT_HEX32(UINT_VAR) \ (void)dlt_user_log_write_uint32_formatted(&log_local, UINT_VAR, DLT_FORMAT_HEX32) #define DLT_HEX64(UINT_VAR) \ (void)dlt_user_log_write_uint64_formatted(&log_local, UINT_VAR, DLT_FORMAT_HEX64) #define DLT_BIN8(UINT_VAR) \ (void)dlt_user_log_write_uint8_formatted(&log_local, UINT_VAR, DLT_FORMAT_BIN8) #define DLT_BIN16(UINT_VAR) \ (void)dlt_user_log_write_uint16_formatted(&log_local, UINT_VAR, DLT_FORMAT_BIN16) /** * Architecture independent macro to print pointers */ #define DLT_PTR(PTR_VAR) \ (void)dlt_user_log_write_ptr(&log_local, PTR_VAR) /** * Trace network message * @param CONTEXT object containing information about one special logging context * @param TYPE type of network trace message * @param HEADERLEN length of network message header * @param HEADER pointer to network message header * @param PAYLOADLEN length of network message payload * @param PAYLOAD pointer to network message payload */ #define DLT_TRACE_NETWORK(CONTEXT, TYPE, HEADERLEN, HEADER, PAYLOADLEN, PAYLOAD) \ do { \ if ((CONTEXT).trace_status_ptr && *((CONTEXT).trace_status_ptr) == DLT_TRACE_STATUS_ON) \ { \ (void)dlt_user_trace_network(&(CONTEXT), TYPE, HEADERLEN, HEADER, PAYLOADLEN, PAYLOAD); \ } \ } while (0) /** * Trace network message, allow truncation * @param CONTEXT object containing information about one special logging context * @param TYPE type of network trace message * @param HEADERLEN length of network message header * @param HEADER pointer to network message header * @param PAYLOADLEN length of network message payload * @param PAYLOAD pointer to network message payload */ #define DLT_TRACE_NETWORK_TRUNCATED(CONTEXT, TYPE, HEADERLEN, HEADER, PAYLOADLEN, PAYLOAD) \ do { \ if ((CONTEXT).trace_status_ptr && *((CONTEXT).trace_status_ptr) == DLT_TRACE_STATUS_ON) \ { \ (void)dlt_user_trace_network_truncated(&(CONTEXT), TYPE, HEADERLEN, HEADER, PAYLOADLEN, PAYLOAD, 1); \ } \ } while (0) /** * Trace network message, segment large messages * @param CONTEXT object containing information about one special logging context * @param TYPE type of network trace message * @param HEADERLEN length of network message header * @param HEADER pointer to network message header * @param PAYLOADLEN length of network message payload * @param PAYLOAD pointer to network message payload */ #define DLT_TRACE_NETWORK_SEGMENTED(CONTEXT, TYPE, HEADERLEN, HEADER, PAYLOADLEN, PAYLOAD) \ do { \ if ((CONTEXT).trace_status_ptr && *((CONTEXT).trace_status_ptr) == DLT_TRACE_STATUS_ON) \ { \ (void)dlt_user_trace_network_segmented(&(CONTEXT), TYPE, HEADERLEN, HEADER, PAYLOADLEN, PAYLOAD); \ } \ } while (0) /** * Send log message with string parameter. * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message * @param TEXT ASCII string */ #define DLT_LOG_STRING(CONTEXT, LOGLEVEL, TEXT) \ do { \ if (dlt_user_is_logLevel_enabled(&CONTEXT, LOGLEVEL) == DLT_RETURN_TRUE) \ { \ (void)dlt_log_string(&(CONTEXT), LOGLEVEL, TEXT); \ } \ } while (0) /** * Send log message with string parameter and integer parameter. * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log messages * @param TEXT ASCII string * @param INT_VAR integer value */ #define DLT_LOG_STRING_INT(CONTEXT, LOGLEVEL, TEXT, INT_VAR) \ do { \ if (dlt_user_is_logLevel_enabled(&CONTEXT, LOGLEVEL) == DLT_RETURN_TRUE) \ { \ (void)dlt_log_string_int(&(CONTEXT), LOGLEVEL, TEXT, INT_VAR); \ } \ } while (0) /** * Send log message with string parameter and unsigned integer parameter. * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message * @param TEXT ASCII string * @param UINT_VAR unsigned integer value */ #define DLT_LOG_STRING_UINT(CONTEXT, LOGLEVEL, TEXT, UINT_VAR) \ do { \ if (dlt_user_is_logLevel_enabled(&CONTEXT, LOGLEVEL) == DLT_RETURN_TRUE) \ { \ (void)dlt_log_string_uint(&(CONTEXT), LOGLEVEL, TEXT, UINT_VAR); \ } \ } while (0) /** * Send log message with unsigned integer parameter. * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message * @param UINT_VAR unsigned integer value */ #define DLT_LOG_UINT(CONTEXT, LOGLEVEL, UINT_VAR) \ do { \ if (dlt_user_is_logLevel_enabled(&CONTEXT, LOGLEVEL) == DLT_RETURN_TRUE) \ { \ (void)dlt_log_uint(&(CONTEXT), LOGLEVEL, UINT_VAR); \ } \ } while (0) /** * Send log message with integer parameter. * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message * @param INT_VAR integer value */ #define DLT_LOG_INT(CONTEXT, LOGLEVEL, INT_VAR) \ do { \ if (dlt_user_is_logLevel_enabled(&CONTEXT, LOGLEVEL) == DLT_RETURN_TRUE) \ { \ (void)dlt_log_int(&(CONTEXT), LOGLEVEL, INT_VAR); \ } \ } while (0) /** * Send log message with binary memory block. * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message * @param BUF pointer to memory block * @param LEN length of memory block */ #define DLT_LOG_RAW(CONTEXT, LOGLEVEL, BUF, LEN) \ do { \ if (dlt_user_is_logLevel_enabled(&CONTEXT, LOGLEVEL) == DLT_RETURN_TRUE) \ { \ (void)dlt_log_raw(&(CONTEXT), LOGLEVEL, BUF, LEN); \ } \ } while (0) /** * Send log message with marker. */ #define DLT_LOG_MARKER() \ do { \ (void)dlt_log_marker(); \ } while (0) /** * Switch to verbose mode * */ #define DLT_VERBOSE_MODE() do { \ (void)dlt_verbose_mode(); } while (0) /** * Switch to non-verbose mode * */ #define DLT_NONVERBOSE_MODE() do { \ (void)dlt_nonverbose_mode(); } while (0) /** * Set maximum logged log level and trace status of application * * @param LOGLEVEL This is the log level to be set for the whole application * @param TRACESTATUS This is the trace status to be set for the whole application */ #define DLT_SET_APPLICATION_LL_TS_LIMIT(LOGLEVEL, TRACESTATUS) do { \ (void)dlt_set_application_ll_ts_limit(LOGLEVEL, TRACESTATUS); } while (0) /** * Enable local printing of messages * */ #define DLT_ENABLE_LOCAL_PRINT() do { \ (void)dlt_enable_local_print(); } while (0) /** * Disable local printing of messages * */ #define DLT_DISABLE_LOCAL_PRINT() do { \ (void)dlt_disable_local_print(); } while (0) /** * Check if log level is enabled * * @param CONTEXT object containing information about one special logging context * @param LOGLEVEL the log level of the log message */ #define DLT_IS_LOG_LEVEL_ENABLED(CONTEXT, LOGLEVEL) \ (dlt_user_is_logLevel_enabled(&CONTEXT, LOGLEVEL) == DLT_RETURN_TRUE) /** \} */ #endif /* DLT_USER_MACROS_H */ dlt-daemon-2.18.6/src/000077500000000000000000000000001377520261000144265ustar00rootroot00000000000000dlt-daemon-2.18.6/src/CMakeLists.txt000066400000000000000000000023461377520261000171730ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### add_subdirectory( lib ) add_subdirectory( daemon ) add_subdirectory( gateway ) if( WITH_DLT_CONSOLE ) add_subdirectory( console ) endif( WITH_DLT_CONSOLE ) if( WITH_DLT_EXAMPLES ) add_subdirectory( examples ) endif( WITH_DLT_EXAMPLES ) if( WITH_DLT_ADAPTOR ) add_subdirectory( adaptor ) endif( WITH_DLT_ADAPTOR ) if( WITH_DLT_TESTS ) add_subdirectory( tests ) endif( WITH_DLT_TESTS ) if( WITH_DLT_SYSTEM ) add_subdirectory( system ) endif( WITH_DLT_SYSTEM ) if( WITH_DLT_DBUS ) add_subdirectory( dbus ) endif( WITH_DLT_DBUS ) if( WITH_DLT_COREDUMPHANDLER ) add_subdirectory( core_dump_handler ) endif( WITH_DLT_COREDUMPHANDLER ) if( WITH_DLT_KPI ) add_subdirectory( kpi ) endif( WITH_DLT_KPI ) if( WITH_DLT_QNX_SYSTEM ) add_subdirectory( dlt-qnx-system ) endif( WITH_DLT_QNX_SYSTEM ) dlt-daemon-2.18.6/src/adaptor/000077500000000000000000000000001377520261000160605ustar00rootroot00000000000000dlt-daemon-2.18.6/src/adaptor/CMakeLists.txt000066400000000000000000000016731377520261000206270ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### set(dlt_adaptor_stdin_SRCS dlt-adaptor-stdin.c) add_executable(dlt-adaptor-stdin ${dlt_adaptor_stdin_SRCS}) target_link_libraries(dlt-adaptor-stdin dlt) set_target_properties(dlt-adaptor-stdin PROPERTIES LINKER_LANGUAGE C) set(dlt_adaptor_udp_SRCS dlt-adaptor-udp.c) add_executable(dlt-adaptor-udp ${dlt_adaptor_udp_SRCS}) target_link_libraries(dlt-adaptor-udp dlt) set_target_properties(dlt-adaptor-udp PROPERTIES LINKER_LANGUAGE C) install(TARGETS dlt-adaptor-stdin dlt-adaptor-udp RUNTIME DESTINATION bin COMPONENT base) dlt-daemon-2.18.6/src/adaptor/dlt-adaptor-stdin.c000066400000000000000000000157221377520261000215650ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-adaptor-stdin.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-adaptor-stdin.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ */ #include #include #include #include "dlt_common.h" #include "dlt_user.h" #define MAXSTRLEN 1024 #define PS_DLT_APP_DESC "stdin adaptor application" #define PS_DLT_CONTEXT_DESC "stdin adaptor context" #define PS_DLT_APP "SINA" #define PS_DLT_CONTEXT "SINC" DLT_DECLARE_CONTEXT(mycontext) int main(int argc, char *argv[]) { char str[MAXSTRLEN]; int opt; char apid[DLT_ID_SIZE]; char ctid[DLT_ID_SIZE]; char version[255]; int timeout = -1; int verbosity = DLT_LOG_INFO; int bflag = 0; dlt_set_id(apid, PS_DLT_APP); dlt_set_id(ctid, PS_DLT_CONTEXT); while ((opt = getopt(argc, argv, "a:c:bht:v:")) != -1) switch (opt) { case 'a': { dlt_set_id(apid, optarg); break; } case 'c': { dlt_set_id(ctid, optarg); break; } case 'b': { bflag = 1; break; } case 't': { timeout = atoi(optarg); break; } case 'h': { dlt_get_version(version, 255); printf("Usage: dlt-adaptor-stdin [options]\n"); printf("Adaptor for forwarding input from stdin to DLT daemon.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -a apid - Set application id to apid (default: SINA)\n"); printf(" -c ctid - Set context id to ctid (default: SINC)\n"); printf(" -b - Flush buffered logs before unregistering app\n"); printf(" -t timeout - Set timeout when sending messages at exit, in ms (Default: 10000 = 10sec)\n"); printf( " -v verbosity level - Set verbosity level (Default: INFO, values: FATAL ERROR WARN INFO DEBUG VERBOSE)\n"); printf(" -h - This help\n"); return 0; break; } case 'v': { if (!strcmp(optarg, "FATAL")) { verbosity = DLT_LOG_FATAL; break; } else if (!strcmp(optarg, "ERROR")) { verbosity = DLT_LOG_ERROR; break; } else if (!strcmp(optarg, "WARN")) { verbosity = DLT_LOG_WARN; break; } else if (!strcmp(optarg, "INFO")) { verbosity = DLT_LOG_INFO; break; } else if (!strcmp(optarg, "DEBUG")) { verbosity = DLT_LOG_DEBUG; break; } else if (!strcmp(optarg, "VERBOSE")) { verbosity = DLT_LOG_VERBOSE; break; } else { printf( "Wrong verbosity level, setting to INFO. Accepted values are: FATAL ERROR WARN INFO DEBUG VERBOSE\n"); verbosity = DLT_LOG_INFO; break; } break; } default: /* '?' */ { fprintf(stderr, "Unknown option '%c'\n", optopt); return -1; } } DLT_REGISTER_APP(apid, PS_DLT_APP_DESC); DLT_REGISTER_CONTEXT(mycontext, ctid, PS_DLT_CONTEXT_DESC); if (timeout > -1) dlt_set_resend_timeout_atexit(timeout); while (fgets(str, MAXSTRLEN, stdin)) if (strcmp(str, "") != 0) DLT_LOG(mycontext, verbosity, DLT_STRING(str)); DLT_UNREGISTER_CONTEXT(mycontext); if (bflag == 1) DLT_UNREGISTER_APP_FLUSH_BUFFERED_LOGS(); else DLT_UNREGISTER_APP(); return 0; } dlt-daemon-2.18.6/src/adaptor/dlt-adaptor-udp.c000066400000000000000000000200461377520261000212270ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-adaptor-udp.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-adaptor-udp.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ */ #include #include #include #include #include #include #include #include #include #include "dlt_common.h" #include "dlt_user.h" /* Port number, to which the syslogd-ng sends its log messages */ #define RCVPORT 47111 #define MAXSTRLEN 1024 #define PU_DLT_APP_DESC "udp adaptor application" #define PU_DLT_CONTEXT_DESC "udp adaptor context" #define PU_DLT_APP "UDPA" #define PU_DLT_CONTEXT "UDPC" DLT_DECLARE_CONTEXT(mycontext) int main(int argc, char *argv[]) { int sock; int bytes_read; socklen_t addr_len; int opt, port; char recv_data[MAXSTRLEN]; struct sockaddr_in client_addr, server_addr; char apid[DLT_ID_SIZE]; char ctid[DLT_ID_SIZE]; char version[255]; int verbosity = DLT_LOG_INFO; dlt_set_id(apid, PU_DLT_APP); dlt_set_id(ctid, PU_DLT_CONTEXT); port = RCVPORT; while ((opt = getopt(argc, argv, "a:c:hp:v:")) != -1) switch (opt) { case 'a': { dlt_set_id(apid, optarg); break; } case 'c': { dlt_set_id(ctid, optarg); break; } case 'h': { dlt_get_version(version, 255); printf("Usage: dlt-adaptor-udp [options]\n"); printf("Adaptor for forwarding received UDP messages to DLT daemon.\n"); printf("%s \n", version); printf("Options:\n"); printf("-a apid - Set application id to apid (default: UDPA)\n"); printf("-c ctid - Set context id to ctid (default: UDPC)\n"); printf("-p - Set receive port number for UDP messages (default: %d) \n", port); printf( "-v verbosity level - Set verbosity level (Default: INFO, values: FATAL ERROR WARN INFO DEBUG VERBOSE)\n"); printf("-h - This help\n"); return 0; break; } case 'p': { port = atoi(optarg); break; } case 'v': { if (!strcmp(optarg, "FATAL")) { verbosity = DLT_LOG_FATAL; break; } else if (!strcmp(optarg, "ERROR")) { verbosity = DLT_LOG_ERROR; break; } else if (!strcmp(optarg, "WARN")) { verbosity = DLT_LOG_WARN; break; } else if (!strcmp(optarg, "INFO")) { verbosity = DLT_LOG_INFO; break; } else if (!strcmp(optarg, "DEBUG")) { verbosity = DLT_LOG_DEBUG; break; } else if (!strcmp(optarg, "VERBOSE")) { verbosity = DLT_LOG_VERBOSE; break; } else { printf( "Wrong verbosity level, setting to INFO. Accepted values are: FATAL ERROR WARN INFO DEBUG VERBOSE\n"); verbosity = DLT_LOG_INFO; break; } break; } default: /* '?' */ { fprintf(stderr, "Unknown option '%c'\n", optopt); exit(3); return 3;/*for parasoft */ } } #ifdef DLT_USE_IPv6 if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) == -1) #else if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) #endif { perror("Socket"); exit(1); } #ifdef DLT_USE_IPv6 server_addr.sin_family = AF_INET6; #else server_addr.sin_family = AF_INET; #endif server_addr.sin_port = htons(port); server_addr.sin_addr.s_addr = INADDR_ANY; memset(&(server_addr.sin_zero), 0, 8); if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { perror("Bind"); return -1; } addr_len = sizeof(struct sockaddr); DLT_REGISTER_APP(apid, PU_DLT_APP_DESC); DLT_REGISTER_CONTEXT(mycontext, ctid, PU_DLT_CONTEXT_DESC); while (1) { bytes_read = 0; bytes_read = recvfrom(sock, recv_data, MAXSTRLEN, 0, (struct sockaddr *)&client_addr, &addr_len); if (bytes_read == -1) { if (errno == EINTR) { continue; } else { DLT_UNREGISTER_CONTEXT(mycontext); DLT_UNREGISTER_APP(); exit(1); } } recv_data[bytes_read] = '\0'; if (bytes_read != 0) DLT_LOG(mycontext, verbosity, DLT_STRING(recv_data)); } DLT_UNREGISTER_CONTEXT(mycontext); DLT_UNREGISTER_APP(); return 0; } dlt-daemon-2.18.6/src/android/000077500000000000000000000000001377520261000160465ustar00rootroot00000000000000dlt-daemon-2.18.6/src/android/dlt-logd-converter.cpp000066400000000000000000000172601377520261000222730ustar00rootroot00000000000000/** * @licence app begin@ * Copyright (C) 2019 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT logd converter: Retrieve log entries from logd and forward them to DLT. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * \file: dlt-logd-convert * For further information see http://www.genivi.org/. * @licence end@ */ #include #include #include #include #include #include #include #include DLT_DECLARE_CONTEXT(dlt_ctx_self) DLT_DECLARE_CONTEXT(dlt_ctx_main) DLT_DECLARE_CONTEXT(dlt_ctx_rdio) DLT_DECLARE_CONTEXT(dlt_ctx_evnt) /* Binary Buffer */ DLT_DECLARE_CONTEXT(dlt_ctx_syst) DLT_DECLARE_CONTEXT(dlt_ctx_crsh) DLT_DECLARE_CONTEXT(dlt_ctx_stat) /* Binary Buffer */ DLT_DECLARE_CONTEXT(dlt_ctx_secu) /* Binary Buffer */ DLT_DECLARE_CONTEXT(dlt_ctx_krnl) volatile sig_atomic_t exit_parser_loop = false; static inline struct logger *init_logger(struct logger_list *logger_list, log_id_t log_id) { struct logger *logger; logger = android_logger_open(logger_list, log_id); if (logger == nullptr) { DLT_LOG(dlt_ctx_self, DLT_LOG_WARN, DLT_STRING("could not open logd buffer id="), DLT_INT64(log_id)); } return logger; } static struct logger_list *init_logger_list(bool skip_binary_buffers) { struct logger_list *logger_list; logger_list = android_logger_list_alloc(ANDROID_LOG_RDONLY, 0, 0); if (logger_list == nullptr) { DLT_LOG(dlt_ctx_self, DLT_LOG_FATAL, DLT_STRING("could not allocate logger list")); return nullptr; } /** * logd buffer types are defined in: * system/core/include/log/android/log.h */ init_logger(logger_list, LOG_ID_MAIN); init_logger(logger_list, LOG_ID_RADIO); init_logger(logger_list, LOG_ID_SYSTEM); init_logger(logger_list, LOG_ID_KERNEL); init_logger(logger_list, LOG_ID_CRASH); if (!skip_binary_buffers) { init_logger(logger_list, LOG_ID_EVENTS); init_logger(logger_list, LOG_ID_STATS); init_logger(logger_list, LOG_ID_SECURITY); } return logger_list; } static DltContext *get_log_context_from_log_msg(struct log_msg *log_msg) { switch (log_msg->id()) { case LOG_ID_MAIN: return &dlt_ctx_main; case LOG_ID_RADIO: return &dlt_ctx_rdio; case LOG_ID_EVENTS: return &dlt_ctx_evnt; case LOG_ID_SYSTEM: return &dlt_ctx_syst; case LOG_ID_CRASH: return &dlt_ctx_crsh; case LOG_ID_STATS: return &dlt_ctx_stat; case LOG_ID_SECURITY: return &dlt_ctx_secu; case LOG_ID_KERNEL: return &dlt_ctx_krnl; default: return &dlt_ctx_self; } } static uint32_t get_timestamp_from_log_msg(struct log_msg *log_msg) { /* in 0.1 ms = 100 us */ return (uint32_t)log_msg->entry.sec * 10000 + (uint32_t)log_msg->entry.nsec / 100000; } static DltLogLevelType get_log_level_from_log_msg(struct log_msg *log_msg) { android_LogPriority priority = static_cast(log_msg->buf[0]); switch (priority) { case ANDROID_LOG_VERBOSE: return DLT_LOG_VERBOSE; case ANDROID_LOG_DEBUG: return DLT_LOG_DEBUG; case ANDROID_LOG_INFO: return DLT_LOG_INFO; case ANDROID_LOG_WARN: return DLT_LOG_WARN; case ANDROID_LOG_ERROR: return DLT_LOG_ERROR; case ANDROID_LOG_FATAL: return DLT_LOG_FATAL; case ANDROID_LOG_SILENT: return DLT_LOG_OFF; case ANDROID_LOG_UNKNOWN: case ANDROID_LOG_DEFAULT: default: return DLT_LOG_DEFAULT; } } void signal_handler(int signal) { (void) signal; if (signal == SIGTERM) { exit_parser_loop = true; } } static int logd_parser_loop(struct logger_list *logger_list) { struct log_msg log_msg; int ret; DLT_LOG(dlt_ctx_self, DLT_LOG_VERBOSE, DLT_STRING("Entering parsing loop")); while (!exit_parser_loop) { ret = android_logger_list_read(logger_list, &log_msg); if (ret == -EAGAIN || ret == -EINTR) { if (exit_parser_loop == true) { break; } continue; } else if (ret == -EINVAL || ret == -ENOMEM || ret == -ENODEV || ret == -EIO) { DLT_LOG(dlt_ctx_self, DLT_LOG_FATAL, DLT_STRING("Could not cannot retrieve logs, permanent error="), DLT_INT32(ret)); return ret; } else if (ret <= 0) { DLT_LOG(dlt_ctx_self, DLT_LOG_ERROR, DLT_STRING("android_logger_list_read unexpected return="), DLT_INT32(ret)); return ret; } DltContext *ctx = nullptr; ctx = get_log_context_from_log_msg(&log_msg); DltLogLevelType log_level; log_level = get_log_level_from_log_msg(&log_msg); /* Look into system/core/liblog/logprint.c for buffer format. "\0\0" */ const char *tag = ""; const char *message= ""; if(log_msg.entry.len > 1) tag = log_msg.msg() + 1; if (log_msg.entry.len > 1 + strlen(tag) + 1) message = tag + strlen(tag) + 1; uint32_t ts; ts = get_timestamp_from_log_msg(&log_msg); /* Binary buffers are not supported by DLT_STRING DLT_RAW would need the message length */ DLT_LOG_TS(*ctx, log_level, ts, DLT_STRING(tag), DLT_INT32(log_msg.entry.pid), DLT_UINT32(log_msg.entry.tid), DLT_STRING(message)); } DLT_LOG(dlt_ctx_self, DLT_LOG_VERBOSE, DLT_STRING("Exited parsing loop")); return EXIT_SUCCESS; } int main(int argc, char *argv[]) { (void) argc; (void) argv; bool skip_binary_buffers = true; DLT_REGISTER_APP("LOGD", "logd -> dlt adapter"); DLT_REGISTER_CONTEXT(dlt_ctx_self, "LOGF", "logd retriever"); DLT_REGISTER_CONTEXT(dlt_ctx_main, "MAIN", "logd type: main"); DLT_REGISTER_CONTEXT(dlt_ctx_rdio, "RDIO", "logd type: rdio"); DLT_REGISTER_CONTEXT(dlt_ctx_syst, "SYST", "logd type: syst"); DLT_REGISTER_CONTEXT(dlt_ctx_crsh, "CRSH", "logd type: crsh"); DLT_REGISTER_CONTEXT(dlt_ctx_krnl, "KRNL", "logd type: krnl"); if(!skip_binary_buffers){ DLT_REGISTER_CONTEXT(dlt_ctx_evnt, "EVNT", "logd type: evnt"); DLT_REGISTER_CONTEXT(dlt_ctx_stat, "STAT", "logd type: stat"); DLT_REGISTER_CONTEXT(dlt_ctx_secu, "SECU", "logd type: secu"); } struct sigaction act; act.sa_handler = signal_handler; sigemptyset(&act.sa_mask); act.sa_flags = 0; sigaction(SIGTERM, &act, 0); struct logger_list *logger_list; /* Binary buffers are currently not supported */ logger_list = init_logger_list(skip_binary_buffers); if (logger_list == nullptr) return EXIT_FAILURE; int ret; ret = logd_parser_loop(logger_list); /* Main loop */ android_logger_list_free(logger_list); DLT_UNREGISTER_CONTEXT(dlt_ctx_krnl); DLT_UNREGISTER_CONTEXT(dlt_ctx_secu); DLT_UNREGISTER_CONTEXT(dlt_ctx_stat); DLT_UNREGISTER_CONTEXT(dlt_ctx_crsh); DLT_UNREGISTER_CONTEXT(dlt_ctx_syst); DLT_UNREGISTER_CONTEXT(dlt_ctx_evnt); DLT_UNREGISTER_CONTEXT(dlt_ctx_rdio); DLT_UNREGISTER_CONTEXT(dlt_ctx_main); DLT_UNREGISTER_CONTEXT(dlt_ctx_self); if(!skip_binary_buffers){ DLT_UNREGISTER_CONTEXT(dlt_ctx_evnt); DLT_UNREGISTER_CONTEXT(dlt_ctx_stat); DLT_UNREGISTER_CONTEXT(dlt_ctx_secu); } DLT_UNREGISTER_APP_FLUSH_BUFFERED_LOGS(); return ret; } dlt-daemon-2.18.6/src/android/dlt-logd-converter.rc000066400000000000000000000001751377520261000221120ustar00rootroot00000000000000service dlt-logd-converter /vendor/bin/dlt-logd-converter class late_start user system group system disabled dlt-daemon-2.18.6/src/console/000077500000000000000000000000001377520261000160705ustar00rootroot00000000000000dlt-daemon-2.18.6/src/console/CMakeLists.txt000066400000000000000000000022721377520261000206330ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### set(dlt_control_common_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/dlt-control-common.c) add_subdirectory(logstorage) set(dlt-sortbytimestamp_SRCS dlt-sortbytimestamp.c) set(dlt-convert_SRCS dlt-convert.c) set(dlt-receive_SRCS dlt-receive.c) set(dlt-control_SRCS dlt-control.c ${dlt_control_common_SRCS}) set(dlt-passive-node-ctrl_SRCS dlt-passive-node-ctrl.c ${dlt_control_common_SRCS}) foreach(target dlt-sortbytimestamp dlt-convert dlt-receive dlt-control dlt-passive-node-ctrl ) add_executable(${target} ${${target}_SRCS}) target_link_libraries(${target} dlt) set_target_properties(${target} PROPERTIES LINKER_LANGUAGE C) install(TARGETS ${target} RUNTIME DESTINATION bin COMPONENT base) endforeach() dlt-daemon-2.18.6/src/console/dlt-control-common.c000066400000000000000000000466621377520261000220010ustar00rootroot00000000000000/** * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Christoph Lipka ADIT 2015 * \author Frederic Berat ADIT 2015 * * \file dlt-control-common.c * For further information see http://www.genivi.org/. */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-control-common.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Christoph Lipka clipka@jp.adit-jv.com ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** cl Christoph Lipka ADIT ** ** fb Frederic Berat ADIT ** *******************************************************************************/ #define pr_fmt(fmt) "Common control: "fmt #include #include #include #include #include #include #include #include #include "dlt_common.h" #include "dlt_protocol.h" #include "dlt_client.h" #include "dlt-control-common.h" #define DLT_CTRL_APID "DLTC" #define DLT_CTRL_CTID "DLTC" #define DLT_DAEMON_DEFAULT_CTRL_SOCK_PATH "/tmp/dlt-ctrl.sock" /** @brief Analyze the daemon answer * * This function as to be provided by the user of the connection. * * @param answer The textual answer of the daemon * @param payload The daemons answer payload * @param length The daemons answer payload length * * @return User defined. */ static int (*response_analyzer_cb)(char *, void *, int); static pthread_t daemon_connect_thread; static DltClient g_client; static int callback_return = -1; static pthread_mutex_t answer_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t answer_cond = PTHREAD_COND_INITIALIZER; static int local_verbose; static char local_ecuid[DLT_CTRL_ECUID_LEN]; /* Name of ECU */ static int local_timeout; int get_verbosity(void) { return local_verbose; } void set_verbosity(int v) { local_verbose = !!v; } char *get_ecuid(void) { return local_ecuid; } void set_ecuid(char *ecuid) { char *ecuid_conf = NULL; if (local_ecuid != ecuid) { /* If user pass NULL, read ECUId from dlt.conf */ if (ecuid == NULL) { if (dlt_parse_config_param("ECUId", &ecuid_conf) == 0) { memset(local_ecuid, 0, DLT_CTRL_ECUID_LEN); strncpy(local_ecuid, ecuid_conf, DLT_CTRL_ECUID_LEN); local_ecuid[DLT_CTRL_ECUID_LEN - 1] = '\0'; } else { pr_error("Cannot read ECUid from dlt.conf\n"); } } else { /* Set user passed ECUID */ memset(local_ecuid, 0, DLT_CTRL_ECUID_LEN); strncpy(local_ecuid, ecuid, DLT_CTRL_ECUID_LEN); local_ecuid[DLT_CTRL_ECUID_LEN - 1] = '\0'; } } } int get_timeout(void) { return local_timeout; } void set_timeout(int t) { local_timeout = DLT_CTRL_TIMEOUT; if (t > 1) local_timeout = t; else pr_error("Timeout to small. Set to default: %d", DLT_CTRL_TIMEOUT); } int dlt_parse_config_param(char *config_id, char **config_data) { FILE *pFile = NULL; int value_length = DLT_LINE_LEN; char line[DLT_LINE_LEN - 1] = { 0 }; char token[DLT_LINE_LEN] = { 0 }; char value[DLT_LINE_LEN] = { 0 }; char *pch = NULL; const char *filename = NULL; if (*config_data != NULL) *config_data = NULL; /* open configuration file */ filename = CONFIGURATION_FILES_DIR "/dlt.conf"; pFile = fopen(filename, "r"); if (pFile != NULL) { while (1) { /* fetch line from configuration file */ if (fgets(line, value_length - 1, pFile) != NULL) { if (strncmp(line, config_id, strlen(config_id)) == 0) { pch = strtok(line, " =\r\n"); token[0] = 0; value[0] = 0; while (pch != NULL) { if (token[0] == 0) { strncpy(token, pch, sizeof(token) - 1); token[sizeof(token) - 1] = 0; } else { strncpy(value, pch, sizeof(value) - 1); value[sizeof(value) - 1] = 0; break; } pch = strtok(NULL, " =\r\n"); } if (token[0] && value[0]) { if (strcmp(token, config_id) == 0) { *(config_data) = (char *) calloc(DLT_DAEMON_FLAG_MAX, sizeof(char)); memcpy(*config_data, value, DLT_DAEMON_FLAG_MAX - 1); } } } } else { break; } } fclose (pFile); } else { fprintf(stderr, "Cannot open configuration file: %s\n", filename); } if (*config_data == NULL) return -1; return 0; } /** @brief Send a message to the daemon through the socket. * * The socket as to be opened and active before sending. * * @param sock The socket to send the message through * @param msg The message to be send in DLT format. * * @return 0 on success, -1 otherwise. */ static int dlt_control_send_message_to_socket(int sock, DltMessage *msg) { if (send(sock, (const char *)(msg->headerbuffer + sizeof(DltStorageHeader)), msg->headersize - sizeof(DltStorageHeader), 0) == -1) { pr_error("Sending message header failed: %s\n", strerror(errno)); return -1; } if (send(sock, (const char *)msg->databuffer, msg->datasize, 0) == -1) { pr_error("Sending message failed: %s\n", strerror(errno)); return -1; } return 0; } /** @brief Prepare the extra headers of a DLT message * * Modifies the extra headers of the message so that it can be sent. * * @param msg The message to be prepared * @param header The base header to be used. * * @return 0 on success, -1 otherwise. */ static int prepare_extra_headers(DltMessage *msg, uint8_t *header) { uint32_t shift = 0; pr_verbose("Preparing extra headers.\n"); if (!msg || !header) return -1; shift = (uint32_t) (sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg->standardheader->htyp)); /* Set header extra parameters */ dlt_set_id(msg->headerextra.ecu, get_ecuid()); msg->headerextra.tmsp = dlt_uptime(); /* Copy header extra parameters to header buffer */ if (dlt_message_set_extraparameters(msg, get_verbosity()) == -1) { pr_error("Cannot copy header extra parameter\n"); return -1; } /* prepare extended header */ msg->extendedheader = (DltExtendedHeader *)(header + shift); msg->extendedheader->msin = DLT_MSIN_CONTROL_REQUEST; msg->extendedheader->noar = 1; /* one payload packet */ /* Dummy values have to be set */ dlt_set_id(msg->extendedheader->apid, DLT_CTRL_APID); dlt_set_id(msg->extendedheader->ctid, DLT_CTRL_CTID); return 0; } /** @brief Prepare the headers of a DLT message * * Modifies the headers of the message so that it can be sent. * * @param msg The message to be prepared * @param header The base header to be used. * * @return 0 on success, -1 otherwise. */ static int prepare_headers(DltMessage *msg, uint8_t *header) { uint32_t len = 0; pr_verbose("Preparing headers.\n"); if (!msg || !header) return -1; msg->storageheader = (DltStorageHeader *)header; if (dlt_set_storageheader(msg->storageheader, "") == -1) { pr_error("Storage header initialization failed.\n"); return -1; } /* prepare standard header */ msg->standardheader = (DltStandardHeader *)(header + sizeof(DltStorageHeader)); msg->standardheader->htyp = DLT_HTYP_WEID | DLT_HTYP_WTMS | DLT_HTYP_UEH | DLT_HTYP_PROTOCOL_VERSION1; #if (BYTE_ORDER == BIG_ENDIAN) msg->standardheader->htyp = (msg->standardheader->htyp | DLT_HTYP_MSBF); #endif msg->standardheader->mcnt = 0; /* prepare length information */ msg->headersize = (uint32_t) (sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + sizeof(DltExtendedHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg->standardheader->htyp)); len = (uint32_t) (msg->headersize - sizeof(DltStorageHeader) + msg->datasize); if (len > UINT16_MAX) { pr_error("Message header is too long.\n"); return -1; } msg->standardheader->len = DLT_HTOBE_16(len); return 0; } /** @brief Prepare a DLT message. * * The DLT message is built using the data given by the user. * The data is basically composed of a buffer and a size. * * @param data The message body to be used to build the DLT message. * * @return 0 on success, -1 otherwise. */ static DltMessage *dlt_control_prepare_message(DltControlMsgBody *data) { DltMessage *msg = NULL; pr_verbose("Preparing message.\n"); if (data == NULL) { pr_error("Data for message body is NULL\n"); return NULL; } msg = calloc(1, sizeof(DltMessage)); if (msg == NULL) { pr_error("Cannot allocate memory for Dlt Message\n"); return NULL; } if (dlt_message_init(msg, get_verbosity()) == -1) { pr_error("Cannot initialize Dlt Message\n"); free(msg); return NULL; } /* prepare payload of data */ msg->databuffersize = msg->datasize = (uint32_t) data->size; /* Allocate memory for Dlt Message's buffer */ msg->databuffer = (uint8_t *)calloc(1, data->size); if (msg->databuffer == NULL) { pr_error("Cannot allocate memory for data buffer\n"); free(msg); return NULL; } /* copy data into message */ memcpy(msg->databuffer, data->data, data->size); /* prepare storage header */ if (prepare_headers(msg, msg->headerbuffer)) { dlt_message_free(msg, get_verbosity()); free(msg); return NULL; } /* prepare extra headers */ if (prepare_extra_headers(msg, msg->headerbuffer)) { dlt_message_free(msg, get_verbosity()); free(msg); return NULL; } return msg; } /** @brief Initialize the connection with the daemon * * The connection is initialized using an internal callback. The user's * response analyzer will be finally executed by this callback. * The client pointer is used to established the connection. * * @param client A pointer to a valid client structure * @param cb The internal callback to be executed while receiving a new message * * @return 0 on success, -1 otherwise. */ static int dlt_control_init_connection(DltClient *client, void *cb) { int (*callback)(DltMessage *message, void *data) = cb; if (!cb || !client) { pr_error("%s: Invalid parameters\n", __func__); return -1; } pr_verbose("Initializing the connection.\n"); if (dlt_client_init(client, get_verbosity()) != 0) { pr_error("Failed to register callback (NULL)\n"); return -1; } dlt_client_register_message_callback(callback); client->socketPath = NULL; if (dlt_parse_config_param("ControlSocketPath", &client->socketPath) != 0) { /* Failed to read from conf, copy default */ if (dlt_client_set_socket_path(client, DLT_DAEMON_DEFAULT_CTRL_SOCK_PATH) == -1) { pr_error("set socket path didn't succeed\n"); return -1; } } client->mode = DLT_CLIENT_MODE_UNIX; return dlt_client_connect(client, get_verbosity()); } /** @brief Daemon listener function * * This function will continuously read on the DLT socket, until an error occurs * or the thread executing this function is canceled. * * @param data Thread parameter * * @return The thread parameter given as argument. */ static void *dlt_control_listen_to_daemon(void *data) { pr_verbose("Ready to receive DLT answers.\n"); dlt_client_main_loop(&g_client, NULL, get_verbosity()); return data; } /** @brief Internal callback for DLT response * * This function is called by the dlt_client_main_loop once a response is read * from the DLT socket. * After some basic checks, the user's response analyzer is called. The return * value of the analyzer is then provided back to the dlt_control_send_message * function to be given back as a return value. * As this function is called in a dedicated thread, the return value is * provided using a global variable. * Access to this variable is controlled through a dedicated mutex. * New values are signaled using a dedicated condition variable. * * @param message The DLT answer * @param data Unused * * @return The analyzer return value or -1 on early errors. */ static int dlt_control_callback(DltMessage *message, void *data) { char text[DLT_RECEIVE_BUFSIZE] = { 0 }; (void)data; if (message == NULL) { pr_error("Received message is null\n"); return -1; } /* prepare storage header */ if (DLT_IS_HTYP_WEID(message->standardheader->htyp)) dlt_set_storageheader(message->storageheader, message->headerextra.ecu); else dlt_set_storageheader(message->storageheader, "LCTL"); dlt_message_header(message, text, DLT_RECEIVE_BUFSIZE, get_verbosity()); /* Extracting payload */ dlt_message_payload(message, text, DLT_RECEIVE_BUFSIZE, DLT_OUTPUT_ASCII, get_verbosity()); /* * Checking payload with the provided callback and return the result */ pthread_mutex_lock(&answer_lock); callback_return = response_analyzer_cb(text, message->databuffer, (int) message->datasize); pthread_cond_signal(&answer_cond); pthread_mutex_unlock(&answer_lock); return callback_return; } /** @brief Send a message to the daemon and wait for the asynchronous answer. * * The answer is received and analyzed by a dedicated thread. Thus we need * to wait for the signal from this thread and then read the return value * to be provided to the user. * In case of timeout, this function fails. * The message provided by the user is formated in DLT format before sending. * * @param body The message provided by the user * @param timeout The time to wait before considering that no answer will come * * @return The user response analyzer return value, -1 in case of early error. */ int dlt_control_send_message(DltControlMsgBody *body, int timeout) { struct timespec t; DltMessage *msg = NULL; if (!body) { pr_error("%s: Invalid input.\n", __func__); return -1; } if (clock_gettime(CLOCK_REALTIME, &t) == -1) { pr_error("Cannot read system time.\n"); return -1; } t.tv_sec += timeout; /* send command to daemon here */ msg = dlt_control_prepare_message(body); if (msg == NULL) { pr_error("Control message preparation failed\n"); return -1; } pthread_mutex_lock(&answer_lock); /* Re-init the return value */ callback_return = -1; if (dlt_control_send_message_to_socket(g_client.sock, msg) != 0) { pr_error("Sending message to daemon failed\n"); free(msg); return -1; } /* If we timeout the lock is not taken back */ if (!pthread_cond_timedwait(&answer_cond, &answer_lock, &t)) pthread_mutex_unlock(&answer_lock); /* Destroying the message */ dlt_message_free(msg, get_verbosity()); free(msg); /* At this point either the value is already correct, either it's still -1. * Then, we don't care to lock the access. */ return callback_return; } /** @brief Control communication initialization * * This will prepare the DLT connection and the thread dedicated to the * response listening. * * @param response_analyzer User defined function used to analyze the response * @param ecuid The ECUID to provide to the daemon * @param verbosity The verbosity level * * @return 0 on success, -1 otherwise. */ int dlt_control_init(int (*response_analyzer)(char *, void *, int), char *ecuid, int verbosity) { if (!response_analyzer || !ecuid) { pr_error("%s: Invalid input.\n", __func__); return -1; } response_analyzer_cb = response_analyzer; set_ecuid(ecuid); set_verbosity(verbosity); if (dlt_control_init_connection(&g_client, dlt_control_callback) != 0) { pr_error("Connection initialization failed\n"); dlt_client_cleanup(&g_client, get_verbosity()); return -1; } /* Contact DLT daemon */ if (pthread_create(&daemon_connect_thread, NULL, dlt_control_listen_to_daemon, NULL) != 0) { pr_error("Cannot create thread to communicate with DLT daemon.\n"); return -1; } return 0; } /** @brief Control communication clean-up * * Cancels the listener thread and clean=up the dlt client structure. * * @return 0 on success, -1 otherwise. */ int dlt_control_deinit(void) { /* Stopping the listener thread */ pthread_cancel(daemon_connect_thread); /* Closing the socket */ return dlt_client_cleanup(&g_client, get_verbosity()); } dlt-daemon-2.18.6/src/console/dlt-control-common.h000066400000000000000000000047021377520261000217730ustar00rootroot00000000000000/** * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Christoph Lipka ADIT 2015 * \author Frederic Berat ADIT 2015 * * \file dlt-control-common.h * For further information see http://www.genivi.org/. */ #ifndef _DLT_CONTROL_COMMON_H_ #define _DLT_CONTROL_COMMON_H_ #include #include "dlt_common.h" #define DLT_CTRL_TIMEOUT 10 #define DLT_CTRL_ECUID_LEN 10 #define DLT_DAEMON_FLAG_MAX 256 #ifndef pr_fmt # define pr_fmt(fmt) fmt #endif #ifndef USE_STDOUT # define PRINT_OUT stderr #else # define PRINT_OUT stdout #endif #define pr_error(fmt, ...) \ ({ fprintf(PRINT_OUT, pr_fmt(fmt), ## __VA_ARGS__); fflush(PRINT_OUT); }) #define pr_verbose(fmt, ...) \ ({ if (get_verbosity()) { fprintf(PRINT_OUT, pr_fmt(fmt), ## __VA_ARGS__); fflush(PRINT_OUT); } }) #define DLT_CTRL_DEFAULT_ECUID "ECU1" #define NANOSEC_PER_MILLISEC 1000000 #define NANOSEC_PER_SEC 1000000000 /* To be used as Dlt Message body when sending to DLT daemon */ typedef struct { void *data; /**< data to be send to DLT Daemon */ uint32_t size; /**< size of that data */ } DltControlMsgBody; /* As verbosity, ecuid and timeout are needed during the communication, * defining getter and setters here. * Then there is no need to define them in the control's user application. */ int get_verbosity(void); void set_verbosity(int); char *get_ecuid(void); void set_ecuid(char *); int get_timeout(void); void set_timeout(int); /* Parse dlt.conf file and return the value of requested configuration */ int dlt_parse_config_param(char *config_id, char **config_data); /* Initialize the connection to the daemon */ int dlt_control_init(int (*response_analyser)(char *, void *, int), char *ecuid, int verbosity); /* Send a message to the daemon. The call is not thread safe. */ int dlt_control_send_message(DltControlMsgBody *, int); /* Destroys the connection to the daemon */ int dlt_control_deinit(void); #endif dlt-daemon-2.18.6/src/console/dlt-control.c000066400000000000000000000717031377520261000205050ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-control.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-control.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #include /* for isprint() */ #include /* for atoi() */ #include /* for writev() */ #include /* for open() */ #include "dlt_client.h" #include "dlt_user.h" #include "dlt-control-common.h" #define DLT_GLOGINFO_APID_NUM_MAX 150 #define DLT_GLOGINFO_DATA_MAX 800 #define DLT_GET_LOG_INFO_HEADER 18 /*Get log info header size in response text */ #define DLT_INVALID_LOG_LEVEL 0xF #define DLT_INVALID_TRACE_STATUS 0xF /* Option of GET_LOG_INFO */ #define DLT_SERVICE_GET_LOG_INFO_OPT7 7 /* get Apid, ApDescription, Ctid, CtDescription, loglevel, tracestatus */ /** * The structure of the DLT Service header */ typedef struct { uint32_t service_id; /**< service ID */ uint8_t status; /**< response status */ } DLT_PACKED DltServiceHeader; DltClient g_dltclient; /* Function prototypes */ int dlt_receive_message_callback(DltMessage *message, void *data); typedef struct { int vflag; int yflag; char *evalue; char *avalue; char *cvalue; int svalue; char *mvalue; char *xvalue; int tvalue; int lvalue; int rvalue; int dvalue; int fvalue; int ivalue; int oflag; int gflag; int jvalue; int kvalue; int bvalue; char ecuid[4]; DltFile file; DltFilter filter; } DltReceiveData; /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-control [options] hostname/serial_device_name\n"); printf("Send control message to DLT daemon.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -v Verbose mode\n"); printf(" -h Usage\n"); printf(" -y Serial device mode\n"); printf(" -b baudrate Serial device baudrate (Default: 115200)\n"); printf(" -e ecuid Set ECU ID (Default: RECV)\n"); printf("\n"); printf(" -a id Control message application id\n"); printf(" -c id Control message context id\n"); printf(" -s id Control message injection service id\n"); printf(" -m message Control message injection in ASCII\n"); printf(" -x message Control message injection in Hex e.g. 'ad 01 24 ef'\n"); printf(" -t milliseconds Timeout to terminate application (Default:1000)'\n"); printf(" -l loglevel Set the log level (0=off - 6=verbose default= -1)\n"); printf(" supported options:\n"); printf(" -l level -a apid -c ctid\n"); printf(" -l level -a abc* (set level for all ctxts of apps name starts with abc)\n"); printf(" -l level -a apid (set level for all ctxts of this app)\n"); printf(" -l level -c xyz* (set level for all ctxts whose name starts with xyz)\n"); printf(" -l level -c ctid (set level for the particular ctxt)\n"); printf(" -l level (set level for all the registered contexts)\n"); printf(" -r tracestatus Set the trace status (0=off - 1=on,255=default)\n"); printf(" supported options:\n"); printf(" -r tracestatus -a apid -c ctid\n"); printf(" -r tracestatus -a abc* (set status for all ctxts of apps name starts with abc)\n"); printf(" -r tracestatus -a apid (set status for all ctxts of this app)\n"); printf(" -r tracestatus -c xyz* (set status for all ctxts whose name starts with xyz)\n"); printf(" -r tracestatus -c ctid (set status for the particular ctxt)\n"); printf(" -r tracestatus (set status for all the registered contexts)\n"); printf(" -d loglevel Set the default log level (0=off - 5=verbose)\n"); printf(" -f tracestatus Set the default trace status (0=off - 1=on)\n"); printf(" -i enable Enable timing packets (0=off - 1=on)\n"); printf(" -o Store configuration\n"); printf(" -g Reset to factory default\n"); printf(" -j Get log info\n"); printf(" -k Get software version\n"); printf(" -u unix port\n"); } /** * Function for sending get log info ctrl msg and printing the response. */ void dlt_process_get_log_info(void) { char apid[DLT_ID_SIZE + 1] = { 0 }; char ctid[DLT_ID_SIZE + 1] = { 0 }; AppIDsType app; ContextIDsInfoType con; int i = 0; int j = 0; DltServiceGetLogInfoResponse *resp = (DltServiceGetLogInfoResponse *)calloc(1, sizeof(DltServiceGetLogInfoResponse)); if (NULL == resp) { fprintf(stderr, "ERROR: calloc for resp data failed.\n"); return; } /* prepare request data */ resp->service_id = DLT_SERVICE_ID_GET_LOG_INFO; resp->status = DLT_SERVICE_RESPONSE_ERROR; /* send control message*/ if (0 != dlt_client_get_log_info(&g_dltclient)) { fprintf(stderr, "ERROR: Could not get log info\n"); dlt_client_cleanup_get_log_info(resp); resp = NULL; return; } if (dlt_client_main_loop(&g_dltclient, (void *)resp, 0) == DLT_RETURN_TRUE) fprintf(stdout, "DLT-daemon's response is invalid.\n"); if (resp->service_id == DLT_SERVICE_ID_GET_LOG_INFO && resp->status >= GET_LOG_INFO_STATUS_MIN && resp->status <= GET_LOG_INFO_STATUS_MAX) { for (i = 0; i < resp->log_info_type.count_app_ids; i++) { app = resp->log_info_type.app_ids[i]; dlt_print_id(apid, app.app_id); if (app.app_description != 0) printf("APID:%4s %s\n", apid, app.app_description); else printf("APID:%4s \n", apid); for (j = 0; j < app.count_context_ids; j++) { con = app.context_id_info[j]; dlt_print_id(ctid, con.context_id); if (con.context_description != 0) printf("CTID:%4s %2d %2d %s\n", ctid, con.log_level, con.trace_status, con.context_description); else printf("CTID:%4s %2d %2d\n", ctid, con.log_level, con.trace_status); } } } dlt_client_cleanup_get_log_info(resp); resp = NULL; } /** * Function for sending get software version ctrl msg and printing the response. */ void dlt_process_get_software_version(void) { DltServiceGetSoftwareVersionResponse *resp = (DltServiceGetSoftwareVersionResponse *)calloc(1, sizeof(DltServiceGetSoftwareVersionResponse)); if (NULL == resp) { fprintf(stderr, "ERROR: calloc for resp data failed.\n"); return; } /* prepare request data */ resp->service_id = DLT_SERVICE_ID_GET_SOFTWARE_VERSION; resp->status = DLT_SERVICE_RESPONSE_ERROR; /* send control message*/ if (0 != dlt_client_get_software_version(&g_dltclient)) { fprintf(stderr, "ERROR: Get software version failed.\n"); free(resp); resp = NULL; return; } if (dlt_client_main_loop(&g_dltclient, (void *)resp, 0) == DLT_RETURN_TRUE) fprintf(stdout, "DLT-daemon's response is invalid.\n"); if (resp->service_id == DLT_SERVICE_ID_GET_SOFTWARE_VERSION && resp->status == DLT_SERVICE_RESPONSE_OK && resp->payload != NULL) { printf("%s\n", resp->payload); free(resp->payload); resp->payload = NULL; } free(resp); resp = NULL; } /** * Main function of tool. */ int main(int argc, char *argv[]) { DltReceiveData dltdata; int c; int ret; int index; char *endptr = NULL; struct timespec ts; /* Initialize dltdata */ dltdata = (DltReceiveData) { .tvalue = 1000, .lvalue = DLT_INVALID_LOG_LEVEL, .rvalue = DLT_INVALID_TRACE_STATUS, .dvalue = -1, .fvalue = -1, .ivalue = -1, .oflag = -1, .gflag = -1, }; /* Fetch command line arguments */ opterr = 0; /* Default return value */ ret = 0; while ((c = getopt (argc, argv, "vhye:b:a:c:s:m:x:t:l:r:d:f:i:ogjku")) != -1) switch (c) { case 'v': { dltdata.vflag = 1; break; } case 'h': { usage(); return -1; } case 'y': { dltdata.yflag = DLT_CLIENT_MODE_SERIAL; break; } case 'e': { dltdata.evalue = optarg; break; } case 'b': { dltdata.bvalue = atoi(optarg); break; } case 'a': { dltdata.avalue = optarg; if (strlen(dltdata.avalue) > DLT_ID_SIZE) { fprintf (stderr, "Invalid application id\n"); return -1; } break; } case 'c': { dltdata.cvalue = optarg; if (strlen(dltdata.cvalue) > DLT_ID_SIZE) { fprintf (stderr, "Invalid context id\n"); return -1; } break; } case 's': { dltdata.svalue = atoi(optarg); break; } case 'm': { dltdata.mvalue = optarg; break; } case 'x': { dltdata.xvalue = optarg; break; } case 't': { dltdata.tvalue = atoi(optarg); break; } case 'l': { dltdata.lvalue = (int) strtol(optarg, &endptr, 10); if ((dltdata.lvalue < DLT_LOG_DEFAULT) || (dltdata.lvalue > DLT_LOG_VERBOSE)) { fprintf (stderr, "invalid log level, supported log level 0-6\n"); return -1; } break; } case 'r': { dltdata.rvalue = (int) strtol(optarg, &endptr, 10); if ((dltdata.rvalue < DLT_TRACE_STATUS_DEFAULT) || (dltdata.rvalue > DLT_TRACE_STATUS_ON)) { fprintf (stderr, "invalid trace status, supported trace status -1, 0, 1\n"); return -1; } break; } case 'd': { dltdata.dvalue = atoi(optarg); break; } case 'f': { dltdata.fvalue = atoi(optarg); break; } case 'i': { dltdata.ivalue = atoi(optarg); break; } case 'o': { dltdata.oflag = 1; break; } case 'g': { dltdata.gflag = 1; break; } case 'j': { dltdata.jvalue = 1; break; } case 'k': { dltdata.kvalue = 1; break; } case 'u': { dltdata.yflag = DLT_CLIENT_MODE_UNIX; break; } case '?': { if ((optopt == 'o') || (optopt == 'f')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { abort (); return -1; /*for parasoft */ } } /* Initialize DLT Client */ dlt_client_init(&g_dltclient, dltdata.vflag); /* Register callback to be called when message was received */ dlt_client_register_message_callback(dlt_receive_message_callback); /* Setup DLT Client structure */ if (dltdata.yflag == DLT_CLIENT_MODE_SERIAL) { g_dltclient.mode = DLT_CLIENT_MODE_SERIAL; } else if (dltdata.yflag == DLT_CLIENT_MODE_UNIX) { g_dltclient.mode = DLT_CLIENT_MODE_UNIX; g_dltclient.socketPath = NULL; dlt_parse_config_param("ControlSocketPath", &g_dltclient.socketPath); } else { g_dltclient.mode = DLT_CLIENT_MODE_TCP; } if (g_dltclient.mode == DLT_CLIENT_MODE_TCP) { for (index = optind; index < argc; index++) if (dlt_client_set_server_ip(&g_dltclient, argv[index]) == -1) { pr_error("set server ip didn't succeed\n"); return -1; } if (g_dltclient.servIP == 0) { /* no hostname selected, show usage and terminate */ fprintf(stderr, "ERROR: No hostname selected\n"); usage(); dlt_client_cleanup(&g_dltclient, dltdata.vflag); return -1; } } else if (g_dltclient.mode == DLT_CLIENT_MODE_SERIAL) { for (index = optind; index < argc; index++) if (dlt_client_set_serial_device(&g_dltclient, argv[index]) == -1) { pr_error("set serial device didn't succeed\n"); return -1; } if (g_dltclient.serialDevice == 0) { /* no serial device name selected, show usage and terminate */ fprintf(stderr, "ERROR: No serial device name specified\n"); usage(); return -1; } dlt_client_setbaudrate(&g_dltclient, dltdata.bvalue); } /* initialise structure to use DLT file */ dlt_file_init(&(dltdata.file), dltdata.vflag); /* first parse filter file if filter parameter is used */ dlt_filter_init(&(dltdata.filter), dltdata.vflag); if (dltdata.evalue) { dlt_set_id(dltdata.ecuid, dltdata.evalue); dlt_set_id(g_dltclient.ecuid, dltdata.evalue); } else { dltdata.evalue = NULL; if (dlt_parse_config_param("ECUId", &dltdata.evalue) == 0) { dlt_set_id(dltdata.ecuid, dltdata.evalue); dlt_set_id(g_dltclient.ecuid, dltdata.evalue); free (dltdata.evalue); } else { fprintf(stderr, "ERROR: Failed to read ECUId from dlt.conf \n"); } } /* Connect to TCP socket or open serial device */ if (dlt_client_connect(&g_dltclient, dltdata.vflag) != DLT_RETURN_ERROR) { /* send injection message */ if (dltdata.mvalue && dltdata.avalue && dltdata.cvalue) { /* ASCII */ printf("Send injection message:\n"); printf("AppId: %s\n", dltdata.avalue); printf("ConId: %s\n", dltdata.cvalue); printf("ServiceId: %d\n", dltdata.svalue); printf("Message: %s\n", dltdata.mvalue); /* send control message in ascii */ if (dlt_client_send_inject_msg(&g_dltclient, dltdata.avalue, dltdata.cvalue, (uint32_t) dltdata.svalue, (uint8_t *)dltdata.mvalue, (uint32_t) strlen(dltdata.mvalue)) != DLT_RETURN_OK) { fprintf(stderr, "ERROR: Could not send inject message\n"); ret = -1; } } else if (dltdata.xvalue && dltdata.avalue && dltdata.cvalue) { /* Hex */ uint8_t buffer[1024]; int size = 1024; printf("Send injection message:\n"); printf("AppId: %s\n", dltdata.avalue); printf("ConId: %s\n", dltdata.cvalue); printf("ServiceId: %d\n", dltdata.svalue); printf("Message: %s\n", dltdata.xvalue); dlt_hex_ascii_to_binary(dltdata.xvalue, buffer, &size); printf("Size: %d\n", size); /* send control message in hex */ if (dlt_client_send_inject_msg(&g_dltclient, dltdata.avalue, dltdata.cvalue, (uint32_t) dltdata.svalue, buffer, (uint32_t)size) != DLT_RETURN_OK) { fprintf(stderr, "ERROR: Could not send inject message\n"); ret = -1; } } else if (dltdata.lvalue != DLT_INVALID_LOG_LEVEL) /*&& dltdata.avalue && dltdata.cvalue)*/ { if ((dltdata.avalue == 0) && (dltdata.cvalue == 0)) { if (dltdata.vflag) { printf("Set all log level:\n"); printf("Loglevel: %d\n", dltdata.lvalue); } if (0 != dlt_client_send_all_log_level(&g_dltclient, (uint8_t) dltdata.lvalue)) { fprintf(stderr, "ERROR: Could not send log level\n"); ret = -1; } } else { /* log level */ if (dltdata.vflag) { printf("Set log level:\n"); printf("AppId: %s\n", dltdata.avalue); printf("ConId: %s\n", dltdata.cvalue); printf("Loglevel: %d\n", dltdata.lvalue); } /* send control message*/ if (0 != dlt_client_send_log_level(&g_dltclient, dltdata.avalue, dltdata.cvalue, (uint8_t) dltdata.lvalue)) { fprintf(stderr, "ERROR: Could not send log level\n"); ret = -1; } } } else if (dltdata.rvalue != DLT_INVALID_TRACE_STATUS) { if ((dltdata.avalue == 0) && (dltdata.cvalue == 0)) { if (dltdata.vflag) { printf("Set all trace status:\n"); printf("Tracestatus: %d\n", dltdata.rvalue); } if (0 != dlt_client_send_all_trace_status(&g_dltclient, (uint8_t) dltdata.rvalue)) { fprintf(stderr, "ERROR: Could not send trace status\n"); ret = -1; } } else { /* trace status */ if (dltdata.vflag) { printf("Set trace status:\n"); printf("AppId: %s\n", dltdata.avalue); printf("ConId: %s\n", dltdata.cvalue); printf("Tracestatus: %d\n", dltdata.rvalue); } /* send control message*/ if (0 != dlt_client_send_trace_status(&g_dltclient, dltdata.avalue, dltdata.cvalue, (uint8_t) dltdata.rvalue)) { fprintf(stderr, "ERROR: Could not send trace status\n"); ret = -1; } } } else if (dltdata.dvalue != -1) { /* default log level */ printf("Set default log level:\n"); printf("Loglevel: %d\n", dltdata.dvalue); /* send control message in*/ if (dlt_client_send_default_log_level(&g_dltclient, (uint8_t) dltdata.dvalue) != DLT_RETURN_OK) { fprintf (stderr, "ERROR: Could not send default log level\n"); ret = -1; } } else if (dltdata.fvalue != -1) { /* default trace status */ printf("Set default trace status:\n"); printf("TraceStatus: %d\n", dltdata.fvalue); /* send control message in*/ if (dlt_client_send_default_trace_status(&g_dltclient, (uint8_t) dltdata.fvalue) != DLT_RETURN_OK) { fprintf (stderr, "ERROR: Could not send default trace status\n"); ret = -1; } } else if (dltdata.ivalue != -1) { /* timing pakets */ printf("Set timing pakets:\n"); printf("Timing packets: %d\n", dltdata.ivalue); /* send control message in*/ if (dlt_client_send_timing_pakets(&g_dltclient, (uint8_t) dltdata.ivalue) != DLT_RETURN_OK) { fprintf (stderr, "ERROR: Could not send timing packets\n"); ret = -1; } } else if (dltdata.oflag != -1) { /* default trace status */ printf("Store config\n"); /* send control message in*/ if (dlt_client_send_store_config(&g_dltclient) != DLT_RETURN_OK) { fprintf (stderr, "ERROR: Could not send store config\n"); ret = -1; } } else if (dltdata.gflag != -1) { /* reset to factory default */ printf("Reset to factory default\n"); /* send control message in*/ if (dlt_client_send_reset_to_factory_default(&g_dltclient) != DLT_RETURN_OK) { fprintf (stderr, "ERROR: Could not send reset to factory default\n"); ret = -1; } } else if (dltdata.jvalue == 1) { /* get log info */ printf("Get log info:\n"); dlt_process_get_log_info(); } else if (dltdata.kvalue == 1) { /* Get software version */ printf("Get software version:\n"); dlt_process_get_software_version(); } /* Dlt Client Main Loop */ /*dlt_client_main_loop(&dltclient, &dltdata, dltdata.vflag); */ /* Wait timeout */ ts.tv_sec = (dltdata.tvalue * NANOSEC_PER_MILLISEC) / NANOSEC_PER_SEC; ts.tv_nsec = (dltdata.tvalue * NANOSEC_PER_MILLISEC) % NANOSEC_PER_SEC; nanosleep(&ts, NULL); } else { ret = -1; } /* Dlt Client Cleanup */ dlt_client_cleanup(&g_dltclient, dltdata.vflag); if (g_dltclient.socketPath != NULL) free(g_dltclient.socketPath); dlt_file_free(&(dltdata.file), dltdata.vflag); dlt_filter_free(&(dltdata.filter), dltdata.vflag); return ret; } int dlt_receive_message_callback(DltMessage *message, void *data) { static char resp_text[DLT_RECEIVE_BUFSIZE]; int ret = DLT_RETURN_OK; uint32_t id = 0; uint32_t uint32_tmp = 0; uint8_t *ptr; int32_t datalength; DltServiceHeader *req_header = NULL; if ((message == NULL) || (data == NULL) || !DLT_MSG_IS_CONTROL_RESPONSE(message)) return -1; /* get request service id */ req_header = (DltServiceHeader *)data; /* get response service id */ ptr = message->databuffer; datalength =(int32_t) message->datasize; DLT_MSG_READ_VALUE(uint32_tmp, ptr, datalength, uint32_t); id = DLT_ENDIAN_GET_32(message->standardheader->htyp, uint32_tmp); if ((id > DLT_SERVICE_ID) && (id < DLT_SERVICE_ID_LAST_ENTRY) && (id == req_header->service_id)) { switch (id) { case DLT_SERVICE_ID_GET_LOG_INFO: { DltServiceGetLogInfoResponse *resp = (DltServiceGetLogInfoResponse *)data; /* prepare storage header */ if (DLT_IS_HTYP_WEID(message->standardheader->htyp)) dlt_set_storageheader(message->storageheader, message->headerextra.ecu); else dlt_set_storageheader(message->storageheader, "LCTL"); /* get response data */ ret = dlt_message_header(message, resp_text, DLT_RECEIVE_BUFSIZE, 0); if (ret < 0) { fprintf(stderr, "GET_LOG_INFO message_header result failed.\n"); dlt_client_cleanup(&g_dltclient, 0); return -1; } ret = dlt_message_payload(message, resp_text, DLT_RECEIVE_BUFSIZE, DLT_OUTPUT_ASCII, 0); if (ret < 0) { fprintf(stderr, "GET_LOG_INFO message_payload result failed.\n"); dlt_client_cleanup(&g_dltclient, 0); return -1; } ret = dlt_set_loginfo_parse_service_id(resp_text, &resp->service_id, &resp->status); if ((ret == 0) && (resp->service_id == DLT_SERVICE_ID_GET_LOG_INFO)) { ret = dlt_client_parse_get_log_info_resp_text(resp, resp_text); if (ret != 0) { fprintf(stderr, "GET_LOG_INFO failed [status=%d]\n", resp->status); dlt_client_cleanup(&g_dltclient, 0); return -1; } dlt_client_cleanup(&g_dltclient, 0); } break; } case DLT_SERVICE_ID_GET_SOFTWARE_VERSION: { DltServiceGetSoftwareVersionResponse *resp = (DltServiceGetSoftwareVersionResponse *)data; resp->service_id = id; DLT_MSG_READ_VALUE(resp->status, ptr, datalength, uint8_t); DLT_MSG_READ_VALUE(uint32_tmp, ptr, datalength, uint32_t); resp->length = DLT_ENDIAN_GET_32(message->standardheader->htyp, uint32_tmp); if (resp->status != DLT_SERVICE_RESPONSE_OK) { fprintf(stderr, "GET_SOFTWARE_VERSION failed [status=%d]\n", resp->status); dlt_client_cleanup(&g_dltclient, 0); return -1; } resp->payload = (char *)calloc(resp->length + 1, sizeof(char)); if (resp->payload != NULL) memcpy(resp->payload, message->databuffer + message->datasize - resp->length, resp->length); dlt_client_cleanup(&g_dltclient, 0); break; } default: { break; } } } return ret; } dlt-daemon-2.18.6/src/console/dlt-convert.c000066400000000000000000000424541377520261000205060ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-convert.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-convert.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include #include #include #include #include #include #include #include #include #include /* writev() */ #include "dlt_common.h" #define COMMAND_SIZE 1024 /* Size of command */ #define FILENAME_SIZE 1024 /* Size of filename */ #define DLT_EXTENSION "dlt" #define DLT_CONVERT_WS "/tmp/dlt_convert_workspace/" /** * Print usage information of tool. */ void usage() { char version[DLT_CONVERT_TEXTBUFSIZE]; dlt_get_version(version, 255); printf("Usage: dlt-convert [options] [commands] file1 [file2]\n"); printf("Read DLT files, print DLT messages as ASCII and store the messages again.\n"); printf("Use filters to filter DLT messages.\n"); printf("Use Ranges and Output file to cut DLT files.\n"); printf("Use two files and Output file to join DLT files.\n"); printf("%s \n", version); printf("Commands:\n"); printf(" -h Usage\n"); printf(" -a Print DLT file; payload as ASCII\n"); printf(" -x Print DLT file; payload as hex\n"); printf(" -m Print DLT file; payload as hex and ASCII\n"); printf(" -s Print DLT file; only headers\n"); printf(" -o filename Output messages in new DLT file\n"); printf("Options:\n"); printf(" -v Verbose mode\n"); printf(" -c Count number of messages\n"); printf(" -f filename Enable filtering of messages\n"); printf(" -b number First messages to be handled\n"); printf(" -e number Last message to be handled\n"); printf(" -w Follow dlt file while file is increasing\n"); printf(" -t Handling input compressed files (tar.gz)\n"); } char *get_filename_ext(const char *filename) { if (filename == NULL) fprintf(stderr, "ERROR: %s: invalid arguments\n", __FUNCTION__); char *dot = strrchr(filename, '.'); if(!dot || dot == filename) return ""; return dot + 1; } void empty_dir(const char *dir) { struct dirent **files = { 0 }; struct stat st; uint32_t n = 0; char tmp_filename[FILENAME_SIZE] = { 0 }; uint32_t i; if (dir == NULL) fprintf(stderr, "ERROR: %s: invalid arguments\n", __FUNCTION__); if (stat(dir, &st) == 0) { if (S_ISDIR(st.st_mode)) { n = (uint32_t) scandir(dir, &files, NULL, alphasort); /* Do not include /. and /.. */ if (n < 2) fprintf(stderr, "ERROR: Failed to scan %s with error %s\n", dir, strerror(errno)); else if (n == 2) printf("%s is already empty\n", dir); else { for (i = 2; i < n; i++) { memset(tmp_filename, 0, FILENAME_SIZE); snprintf(tmp_filename, FILENAME_SIZE, "%s%s", dir, files[i]->d_name); if (remove(tmp_filename) != 0) fprintf(stderr, "ERROR: Failed to delete %s with error %s\n", tmp_filename, strerror(errno)); } if (files) { for (i = 0; i < n ; i++) if (files[i]) { free(files[i]); files[i] = NULL; } free(files); files = NULL; } } } else fprintf(stderr, "ERROR: %s is not a directory\n", dir); } else fprintf(stderr, "ERROR: Failed to stat %s with error %s\n", dir, strerror(errno)); } /** * Main function of tool. */ int main(int argc, char *argv[]) { int vflag = 0; int cflag = 0; int aflag = 0; int sflag = 0; int xflag = 0; int mflag = 0; int wflag = 0; int tflag = 0; char *fvalue = 0; char *bvalue = 0; char *evalue = 0; char *ovalue = 0; int index; int c; DltFile file; DltFilter filter; int ohandle = -1; int num, begin, end; char text[DLT_CONVERT_TEXTBUFSIZE] = { 0 }; /* For handling compressed files */ char tmp_filename[FILENAME_SIZE] = { 0 }; struct stat st = { 0 }; struct dirent **files = { 0 }; int n = 0; int i = 0; struct iovec iov[2]; int bytes_written = 0; int syserr = 0; opterr = 0; while ((c = getopt (argc, argv, "vcashxmwtf:b:e:o:")) != -1) { switch (c) { case 'v': { vflag = 1; break; } case 'c': { cflag = 1; break; } case 'a': { aflag = 1; break; } case 's': { sflag = 1; break; } case 'x': { xflag = 1; break; } case 'm': { mflag = 1; break; } case 'w': { wflag = 1; break; } case 't': { tflag = 1; break; } case 'h': { usage(); return -1; } case 'f': { fvalue = optarg; break; } case 'b': { bvalue = optarg; break; } case 'e': { evalue = optarg; break; } case 'o': { ovalue = optarg; break; } case '?': { if ((optopt == 'f') || (optopt == 'b') || (optopt == 'e') || (optopt == 'o')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { return -1; /*for parasoft */ } } } /* Initialize structure to use DLT file */ dlt_file_init(&file, vflag); /* first parse filter file if filter parameter is used */ if (fvalue) { if (dlt_filter_load(&filter, fvalue, vflag) < DLT_RETURN_OK) { dlt_file_free(&file, vflag); return -1; } dlt_file_set_filter(&file, &filter, vflag); } if (ovalue) { ohandle = open(ovalue, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* mode: wb */ if (ohandle == -1) { dlt_file_free(&file, vflag); fprintf(stderr, "ERROR: Output file %s cannot be opened!\n", ovalue); return -1; } } if (tflag) { /* Prepare the temp dir to untar compressed files */ if (stat(DLT_CONVERT_WS, &st) == -1) { if (mkdir(DLT_CONVERT_WS, 0700) != 0) { fprintf(stderr,"ERROR: Cannot create temp dir %s!\n", DLT_CONVERT_WS); if (ovalue) close(ohandle); return -1; } } else { if (S_ISDIR(st.st_mode)) empty_dir(DLT_CONVERT_WS); else fprintf(stderr, "ERROR: %s is not a directory", DLT_CONVERT_WS); } for (index = optind; index < argc; index++) { /* Check extension of input file * If it is a compressed file, uncompress it */ if (strcmp(get_filename_ext(argv[index]), DLT_EXTENSION) != 0) { syserr = dlt_execute_command(NULL, "tar", "xf", argv[index], "-C", DLT_CONVERT_WS, NULL); if (syserr != 0) fprintf(stderr, "ERROR: Failed to uncompress %s to %s with error [%d]\n", argv[index], DLT_CONVERT_WS, WIFEXITED(syserr)); } else { syserr = dlt_execute_command(NULL, "cp", argv[index], DLT_CONVERT_WS, NULL); if (syserr != 0) fprintf(stderr, "ERROR: Failed to copy %s to %s with error [%d]\n", argv[index], DLT_CONVERT_WS, WIFEXITED(syserr)); } } n = scandir(DLT_CONVERT_WS, &files, NULL, alphasort); if (n == -1) { fprintf(stderr,"ERROR: Cannot scan temp dir %s!\n", DLT_CONVERT_WS); if (ovalue) close(ohandle); return -1; } /* do not include ./ and ../ in the files */ argc = optind + (n - 2); } for (index = optind; index < argc; index++) { if (tflag) { memset(tmp_filename, 0, FILENAME_SIZE); snprintf(tmp_filename, FILENAME_SIZE, "%s%s", DLT_CONVERT_WS, files[index - optind + 2]->d_name); argv[index] = tmp_filename; } /* load, analyze data file and create index list */ if (dlt_file_open(&file, argv[index], vflag) >= DLT_RETURN_OK) { while (dlt_file_read(&file, vflag) >= DLT_RETURN_OK) { } } if (aflag || sflag || xflag || mflag || ovalue) { if (bvalue) begin = atoi(bvalue); else begin = 0; if (evalue && (wflag == 0)) end = atoi(evalue); else end = file.counter - 1; if ((begin < 0) || (begin >= file.counter)) { fprintf(stderr, "ERROR: Selected first message %d is out of range!\n", begin); if (ovalue) close(ohandle); return -1; } if ((end < 0) || (end >= file.counter) || (end < begin)) { fprintf(stderr, "ERROR: Selected end message %d is out of range!\n", end); if (ovalue) close(ohandle); return -1; } for (num = begin; num <= end; num++) { dlt_file_message(&file, num, vflag); if (xflag) { printf("%d ", num); dlt_message_print_hex(&(file.msg), text, DLT_CONVERT_TEXTBUFSIZE, vflag); } else if (aflag) { printf("%d ", num); dlt_message_header(&(file.msg), text, DLT_CONVERT_TEXTBUFSIZE, vflag); printf("%s ", text); dlt_message_payload(&file.msg, text, DLT_CONVERT_TEXTBUFSIZE, DLT_OUTPUT_ASCII, vflag); printf("[%s]\n", text); } else if (mflag) { printf("%d ", num); dlt_message_print_mixed_plain(&(file.msg), text, DLT_CONVERT_TEXTBUFSIZE, vflag); } else if (sflag) { printf("%d ", num); dlt_message_header(&(file.msg), text, DLT_CONVERT_TEXTBUFSIZE, vflag); printf("%s \n", text); } /* if file output enabled write message */ if (ovalue) { iov[0].iov_base = file.msg.headerbuffer; iov[0].iov_len = (uint32_t) file.msg.headersize; iov[1].iov_base = file.msg.databuffer; iov[1].iov_len = (uint32_t) file.msg.datasize; bytes_written =(int) writev(ohandle, iov, 2); if (0 > bytes_written) { printf("in main: writev(ohandle, iov, 2); returned an error!"); if (ovalue) close(ohandle); dlt_file_free(&file, vflag); return -1; } } /* check for new messages if follow flag set */ if (wflag && (num == end)) { while (1) { while (dlt_file_read(&file, 0) >= 0){ } if (end == (file.counter - 1)) { /* Sleep if no new message was received */ struct timespec req; req.tv_sec = 0; req.tv_nsec = 100000000; nanosleep(&req, NULL); } else { /* set new end of log file and continue reading */ end = file.counter - 1; break; } } } } } if (cflag) { printf("Total number of messages: %d\n", file.counter_total); if (file.filter) printf("Filtered number of messages: %d\n", file.counter); } } if (ovalue) close(ohandle); if (tflag) { empty_dir(DLT_CONVERT_WS); if (files) { for (i = 0; i < n ; i++) if (files[i]) free(files[i]); free(files); } rmdir(DLT_CONVERT_WS); } if (index == optind) { /* no file selected, show usage and terminate */ fprintf(stderr, "ERROR: No file selected\n"); usage(); return -1; } dlt_file_free(&file, vflag); return 0; } dlt-daemon-2.18.6/src/console/dlt-passive-node-ctrl.c000066400000000000000000000312641377520261000223620ustar00rootroot00000000000000/** * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Christoph Lipka ADIT 2015 * * \file dlt-passive-node-ctrl.c * For further information see http://www.genivi.org/. */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-passive-node-ctrl.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Christoph Lipka ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** CL Christoph Lipka ADIT ** *******************************************************************************/ #include #include #include #include #include #include "dlt_protocol.h" #include "dlt_client.h" #include "dlt-control-common.h" #include "dlt_daemon_connection_types.h" #define MAX_RESPONSE_LENGTH 32 #define DLT_NODE_CONNECT 1 #define DLT_NODE_DISCONNECT 0 #define DLT_NODE_CONNECT_UNDEF 999 #define DLT_GATEWAY_CONNECTED 2 #define DLT_NODE_CONNECTED_STR "Connected" #define DLT_NODE_DISCONNECTED_STR "Disconnected" #define UNDEFINED 999 static struct PassiveNodeOptions { unsigned int command; /**< passive node control command */ unsigned int connection_state; /**< connection state */ char node_id[DLT_ID_SIZE]; /**< node identifier */ long timeout; /**< Default timeout */ } g_options = { .command = UNDEFINED, .connection_state = UNDEFINED, .node_id = { '\0' }, }; unsigned int get_command(void) { return g_options.command; } void set_command(unsigned int c) { g_options.command = c; } unsigned int get_connection_state(void) { return g_options.connection_state; } void set_connection_state(unsigned int s) { if ((s == DLT_NODE_CONNECT) || (s == DLT_NODE_DISCONNECT)) { g_options.connection_state = s; set_command(DLT_SERVICE_ID_PASSIVE_NODE_CONNECT); } else { pr_error("Connection status %u invalid\n", s); exit(-1); } } void set_node_id(char *id) { if (id == 0) { pr_error("node identifier is NULL\n"); exit(-1); } else { strncpy(g_options.node_id, id, DLT_ID_SIZE); } } char *get_node_id() { return g_options.node_id; } /** * @brief Print passive node status information * * @param info DltServicePassiveNodeConnectionInfo */ static void dlt_print_passive_node_status( DltServicePassiveNodeConnectionInfo *info) { unsigned int i = 0; char *status; if (info == NULL) return; printf("\nPassive Node connection status:\n" "---------------------------------\n"); for (i = 0; i < info->num_connections; i++) { if (info->connection_status[i] == DLT_GATEWAY_CONNECTED) status = DLT_NODE_CONNECTED_STR; else status = DLT_NODE_DISCONNECTED_STR; printf("%.4s: %s\n", &info->node_id[i * DLT_ID_SIZE], status); } printf("\n"); } /** * @brief Analyze received DLT Daemon response * * This function checks the received message. In particular, it checks the * answer string 'service(\, {ok, error, perm_denied})'. In any case the * g_callback_return variable will be set as well which is evaluated in the * main function after the communication thread returned. * * @param answer Recieved response * @param payload Received DLT Message * @param len Length of received DLT message * @return 0 if daemon returns 'ok' message, -1 otherwise */ static int dlt_passive_node_analyze_response(char *answer, void *payload, int len) { int ret = -1; char resp_ok[MAX_RESPONSE_LENGTH] = { 0 }; if ((answer == NULL) || (payload == NULL)) return -1; snprintf(resp_ok, MAX_RESPONSE_LENGTH, "service(%u), ok", get_command()); pr_verbose("Response received: '%s'\n", answer); pr_verbose("Response expected: '%s'\n", resp_ok); if (strncmp(answer, resp_ok, strlen(resp_ok)) == 0) { ret = 0; if (get_command() == DLT_SERVICE_ID_PASSIVE_NODE_CONNECTION_STATUS) { if ((int)sizeof(DltServicePassiveNodeConnectionInfo) > len) { pr_error("Received payload is smaller than expected\n"); pr_verbose("Expected: %zu,\nreceived: %d", sizeof(DltServicePassiveNodeConnectionInfo), len); ret = -1; } else { DltServicePassiveNodeConnectionInfo *info = (DltServicePassiveNodeConnectionInfo *)(payload); if (info == NULL) { fprintf(stderr, "Received response is NULL\n"); return -1; } dlt_print_passive_node_status(info); } } } return ret; } /** * @brief Prepare message body to be send to DLT Daemon * * @return Pointer ot DltControlMsgBody, NULL otherwise */ DltControlMsgBody *dlt_passive_node_prepare_message_body() { DltControlMsgBody *mb = calloc(1, sizeof(DltControlMsgBody)); char *ecuid = get_node_id(); if (mb == NULL) return NULL; if (get_command() == DLT_SERVICE_ID_PASSIVE_NODE_CONNECT) { mb->data = calloc(1, sizeof(DltServicePassiveNodeConnect)); if (mb->data == NULL) { free(mb); return NULL; } mb->size = sizeof(DltServicePassiveNodeConnect); DltServicePassiveNodeConnect *serv = (DltServicePassiveNodeConnect *) mb->data; serv->service_id = DLT_SERVICE_ID_PASSIVE_NODE_CONNECT; serv->connection_status = get_connection_state(); memcpy(serv->node_id, ecuid, DLT_ID_SIZE); } else { /* DLT_SERVICE_ID_PASSIVE_NODE_CONNECTION_STATUS */ mb->data = calloc(1, sizeof(DltServicePassiveNodeConnectionInfo)); if (mb->data == NULL) { free(mb); return NULL; } mb->size = sizeof(DltServicePassiveNodeConnectionInfo); DltServicePassiveNodeConnectionInfo *serv = (DltServicePassiveNodeConnectionInfo *)mb->data; serv->service_id = DLT_SERVICE_ID_PASSIVE_NODE_CONNECTION_STATUS; } return mb; } /** * @brief Destroy message body */ void dlt_passive_node_destroy_message_body(DltControlMsgBody *msg_body) { if (msg_body == NULL) return; if (msg_body->data != NULL) free(msg_body->data); free(msg_body); } /** * @brief Send a single command to DLT daemon and wait for response * * @return 0 on success, -1 on error */ static int dlt_passive_node_ctrl_single_request() { int ret = -1; /* Initializing the communication with the daemon */ if (dlt_control_init(dlt_passive_node_analyze_response, get_ecuid(), get_verbosity()) != 0) { pr_error("Failed to initialize connection with the daemon.\n"); return ret; } /* prepare message body */ DltControlMsgBody *msg_body = NULL; msg_body = dlt_passive_node_prepare_message_body(); if (msg_body == NULL) { pr_error("Data for Dlt Message body is NULL\n"); return ret; } ret = dlt_control_send_message(msg_body, get_timeout()); dlt_passive_node_destroy_message_body(msg_body); dlt_control_deinit(); return ret; } static void usage() { printf("Usage: dlt-passive-node-ctrl [options]\n"); printf("Send a trigger to DLT daemon to (dis)connect a passive node " "or get current passive node status \n"); printf("\n"); printf("Options:\n"); printf(" -c Connection status (1 - connect, 0 - disconnect)\n"); printf(" -h Usage\n"); printf(" -n passive Node identifier (e.g. ECU2)\n"); printf(" -s Show passive node(s) connection status\n"); printf(" -t Specify connection timeout (Default: %ds)\n", DLT_CTRL_TIMEOUT); printf(" -v Set verbose flag (Default:%d)\n", get_verbosity()); } /** * @brief Parse application arguments * * The arguments are parsed and saved in static structure for future use. * * @param argc amount of arguments * @param argv argument table * @return 0 on success, -1 otherwise */ static int parse_args(int argc, char *argv[]) { int c = 0; int state = -1; /* Get command line arguments */ opterr = 0; while ((c = getopt(argc, argv, "c:hn:stv")) != -1) switch (c) { case 'c': state = (int)strtol(optarg, NULL, 10); if ((state == DLT_NODE_CONNECT) || (state == DLT_NODE_DISCONNECT)) { set_connection_state((unsigned int) state); set_command(DLT_SERVICE_ID_PASSIVE_NODE_CONNECT); } else { pr_error("unknown connection state: %d\n", state); return -1; } break; case 'h': usage(); return -1; case 'n': set_node_id(optarg); break; case 's': set_command(DLT_SERVICE_ID_PASSIVE_NODE_CONNECTION_STATUS); break; case 't': set_timeout((int) strtol(optarg, NULL, 10)); break; case 'v': set_verbosity(1); pr_verbose("Now in verbose mode.\n"); break; case '?': if (isprint(optopt)) pr_error("Unknown option -%c.\n", optopt); else pr_error("Unknown option character \\x%x.\n", optopt); usage(); return -1; default: pr_error("Try %s -h for more information.\n", argv[0]); return -1; } return 0; } /** * @brief Entry point * * Execute the argument parser and call the main feature accordingly * * @param argc amount of arguments * @param argv argument table * @return 0 on success, -1 otherwise */ int main(int argc, char *argv[]) { int ret = 0; set_ecuid(NULL); set_timeout(DLT_CTRL_TIMEOUT); /* Get command line arguments */ if (parse_args(argc, argv) != 0) return -1; if ((get_command() == UNDEFINED) || ((get_command() == DLT_SERVICE_ID_PASSIVE_NODE_CONNECT) && (g_options.node_id[0] == '\0') && (g_options.connection_state == DLT_NODE_CONNECT_UNDEF))) { pr_error("No valid parameter configuration given!\n"); usage(); return -1; } pr_verbose("Sending command to DLT daemon.\n"); /* one shot request */ ret = dlt_passive_node_ctrl_single_request(); pr_verbose("Exiting.\n"); return ret; } dlt-daemon-2.18.6/src/console/dlt-receive.c000066400000000000000000000474571377520261000204600ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-receive.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-receive.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include /* for isprint() */ #include /* for atoi() */ #include /* for S_IRUSR, S_IWUSR, S_IRGRP, S_IROTH */ #include /* for open() */ #include /* for writev() */ #include #include #include #include #include #include #ifdef __linux__ # include #else # include #endif #include #include "dlt_client.h" #define DLT_RECEIVE_ECU_ID "RECV" DltClient dltclient; void signal_handler(int signal) { switch (signal) { case SIGHUP: case SIGTERM: case SIGINT: case SIGQUIT: /* stop main loop */ shutdown(dltclient.receiver.fd, SHUT_RD); break; default: /* This case should never happen! */ break; } /* switch */ } /* Function prototypes */ int dlt_receive_message_callback(DltMessage *message, void *data); typedef struct { int aflag; int sflag; int xflag; int mflag; int vflag; int yflag; int uflag; char *ovalue; char *ovaluebase; /* ovalue without ".dlt" */ char *fvalue; char *evalue; int bvalue; int64_t climit; char ecuid[4]; int ohandle; int64_t totalbytes; /* bytes written so far into the output file, used to check the file size limit */ int part_num; /* number of current output file if limit was exceeded */ DltFile file; DltFilter filter; } DltReceiveData; /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-receive [options] hostname/serial_device_name\n"); printf("Receive DLT messages from DLT daemon and print or store the messages.\n"); printf("Use filters to filter received messages.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -a Print DLT messages; payload as ASCII\n"); printf(" -x Print DLT messages; payload as hex\n"); printf(" -m Print DLT messages; payload as hex and ASCII\n"); printf(" -s Print DLT messages; only headers\n"); printf(" -v Verbose mode\n"); printf(" -h Usage\n"); printf(" -y Serial device mode\n"); printf(" -u UDP multicast mode\n"); printf(" -b baudrate Serial device baudrate (Default: 115200)\n"); printf(" -e ecuid Set ECU ID (Default: RECV)\n"); printf(" -o filename Output messages in new DLT file\n"); printf(" -c limit Restrict file size to bytes when output to file\n"); printf(" When limit is reached, a new file is opened. Use K,M,G as\n"); printf(" suffix to specify kilo-, mega-, giga-bytes respectively\n"); printf(" -f filename Enable filtering of messages\n"); } int64_t convert_arg_to_byte_size(char *arg) { size_t i; int64_t factor; int64_t result; /* check if valid input */ for (i = 0; i < strlen(arg) - 1; ++i) if (!isdigit(arg[i])) return -2; /* last character */ factor = 1; if ((arg[strlen(arg) - 1] == 'K') || (arg[strlen(arg) - 1] == 'k')) { factor = 1024; } else if ((arg[strlen(arg) - 1] == 'M') || (arg[strlen(arg) - 1] == 'm')) { factor = 1024 * 1024; } else if ((arg[strlen(arg) - 1] == 'G') || (arg[strlen(arg) - 1] == 'g')) { factor = 1024 * 1024 * 1024; } else if (!isdigit(arg[strlen(arg) - 1])) return -2; /* range checking */ int64_t const mult = atoll(arg); if (((INT64_MAX) / factor) < mult) /* Would overflow! */ return -2; result = factor * mult; /* The result be at least the size of one message * One message consists of its header + user data: */ DltMessage msg; int64_t min_size = sizeof(msg.headerbuffer); min_size += 2048 /* DLT_USER_BUF_MAX_SIZE */; if (min_size > result) { dlt_vlog(LOG_ERR, "ERROR: Specified limit: %" PRId64 "is smaller than a the size of a single message: %" PRId64 "!\n", result, min_size); result = -2; } return result; } /* * open output file */ int dlt_receive_open_output_file(DltReceiveData *dltdata) { /* if (file_already_exists) */ glob_t outer; if (glob(dltdata->ovalue, #ifndef __ANDROID_API__ GLOB_TILDE | #endif GLOB_NOSORT, NULL, &outer) == 0) { if (dltdata->vflag) { dlt_vlog(LOG_INFO, "File %s already exists, need to rename first\n", dltdata->ovalue); } if (dltdata->part_num < 0) { char pattern[PATH_MAX + 1]; pattern[PATH_MAX] = 0; snprintf(pattern, PATH_MAX, "%s.*.dlt", dltdata->ovaluebase); glob_t inner; /* sort does not help here because we have to traverse the * full result in any case. Remember, a sorted list would look like: * foo.1.dlt * foo.10.dlt * foo.1000.dlt * foo.11.dlt */ if (glob(pattern, #ifndef __ANDROID_API__ GLOB_TILDE | #endif GLOB_NOSORT, NULL, &inner) == 0) { /* search for the highest number used */ size_t i; for (i = 0; i < inner.gl_pathc; ++i) { /* convert string that follows the period after the initial portion, * e.g. gt.gl_pathv[i] = foo.1.dlt -> atoi("1.dlt"); */ int cur = atoi(&inner.gl_pathv[i][strlen(dltdata->ovaluebase) + 1]); if (cur > dltdata->part_num) dltdata->part_num = cur; } } globfree(&inner); ++dltdata->part_num; } char filename[PATH_MAX + 1]; filename[PATH_MAX] = 0; snprintf(filename, PATH_MAX, "%s.%i.dlt", dltdata->ovaluebase, dltdata->part_num++); if (rename(dltdata->ovalue, filename) != 0) { dlt_vlog(LOG_ERR, "ERROR: rename %s to %s failed with error %s\n", dltdata->ovalue, filename, strerror(errno)); } else if (dltdata->vflag) { dlt_vlog(LOG_INFO, "Renaming existing file from %s to %s\n", dltdata->ovalue, filename); } } /* if (file_already_exists) */ globfree(&outer); dltdata->ohandle = open(dltdata->ovalue, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); return dltdata->ohandle; } void dlt_receive_close_output_file(DltReceiveData *dltdata) { if (dltdata->ohandle) { close(dltdata->ohandle); dltdata->ohandle = -1; } } /** * Main function of tool. */ int main(int argc, char *argv[]) { DltReceiveData dltdata; int c; int index; /* Initialize dltdata */ dltdata.aflag = 0; dltdata.sflag = 0; dltdata.xflag = 0; dltdata.mflag = 0; dltdata.vflag = 0; dltdata.yflag = 0; dltdata.uflag = 0; dltdata.ovalue = 0; dltdata.ovaluebase = 0; dltdata.fvalue = 0; dltdata.evalue = 0; dltdata.bvalue = 0; dltdata.climit = -1; /* default: -1 = unlimited */ dltdata.ohandle = -1; dltdata.totalbytes = 0; dltdata.part_num = -1; /* Config signal handler */ struct sigaction act; act.sa_handler = signal_handler; sigemptyset(&act.sa_mask); sigaction(SIGHUP, &act, 0); sigaction(SIGTERM, &act, 0); sigaction(SIGINT, &act, 0); sigaction(SIGQUIT, &act, 0); /* Fetch command line arguments */ opterr = 0; while ((c = getopt (argc, argv, "vashyuxmf:o:e:b:c:")) != -1) switch (c) { case 'v': { dltdata.vflag = 1; break; } case 'a': { dltdata.aflag = 1; break; } case 's': { dltdata.sflag = 1; break; } case 'x': { dltdata.xflag = 1; break; } case 'm': { dltdata.mflag = 1; break; } case 'h': { usage(); return -1; } case 'y': { dltdata.yflag = 1; break; } case 'u': { dltdata.uflag = 1; break; } case 'f': { dltdata.fvalue = optarg; break; } case 'o': { dltdata.ovalue = optarg; size_t to_copy = strlen(dltdata.ovalue); if (strcmp(&dltdata.ovalue[to_copy - 4], ".dlt") == 0) to_copy = to_copy - 4; dltdata.ovaluebase = (char *)calloc(1, to_copy + 1); if (dltdata.ovaluebase == NULL) { fprintf (stderr, "Memory allocation failed.\n"); return -1; } dltdata.ovaluebase[to_copy] = '\0'; memcpy(dltdata.ovaluebase, dltdata.ovalue, to_copy); break; } case 'e': { dltdata.evalue = optarg; break; } case 'b': { dltdata.bvalue = atoi(optarg); break; } case 'c': { dltdata.climit = convert_arg_to_byte_size(optarg); if (dltdata.climit < -1) { fprintf (stderr, "Invalid argument for option -c.\n"); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } break; } case '?': { if ((optopt == 'o') || (optopt == 'f') || (optopt == 'c')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { abort (); return -1; /*for parasoft */ } } /* Initialize DLT Client */ dlt_client_init(&dltclient, dltdata.vflag); /* Register callback to be called when message was received */ dlt_client_register_message_callback(dlt_receive_message_callback); /* Setup DLT Client structure */ if(dltdata.uflag) { dltclient.mode = DLT_CLIENT_MODE_UDP_MULTICAST; } else { dltclient.mode = dltdata.yflag; } if (dltclient.mode == DLT_CLIENT_MODE_TCP || dltclient.mode == DLT_CLIENT_MODE_UDP_MULTICAST) { for (index = optind; index < argc; index++) if (dlt_client_set_server_ip(&dltclient, argv[index]) == -1) { fprintf(stderr, "set server ip didn't succeed\n"); return -1; } if (dltclient.servIP == 0) { /* no hostname selected, show usage and terminate */ fprintf(stderr, "ERROR: No hostname selected\n"); usage(); dlt_client_cleanup(&dltclient, dltdata.vflag); return -1; } } else { for (index = optind; index < argc; index++) if (dlt_client_set_serial_device(&dltclient, argv[index]) == -1) { fprintf(stderr, "set serial device didn't succeed\n"); return -1; } if (dltclient.serialDevice == 0) { /* no serial device name selected, show usage and terminate */ fprintf(stderr, "ERROR: No serial device name specified\n"); usage(); return -1; } dlt_client_setbaudrate(&dltclient, dltdata.bvalue); } /* initialise structure to use DLT file */ dlt_file_init(&(dltdata.file), dltdata.vflag); /* first parse filter file if filter parameter is used */ dlt_filter_init(&(dltdata.filter), dltdata.vflag); if (dltdata.fvalue) { if (dlt_filter_load(&(dltdata.filter), dltdata.fvalue, dltdata.vflag) < DLT_RETURN_OK) { dlt_file_free(&(dltdata.file), dltdata.vflag); return -1; } dlt_file_set_filter(&(dltdata.file), &(dltdata.filter), dltdata.vflag); } /* open DLT output file */ if (dltdata.ovalue) { if (dltdata.climit > -1) { dlt_vlog(LOG_INFO, "Using file size limit of %" PRId64 "bytes\n", dltdata.climit); dltdata.ohandle = dlt_receive_open_output_file(&dltdata); } else { /* in case no limit for the output file is given, we simply overwrite any existing file */ dltdata.ohandle = open(dltdata.ovalue, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); } if (dltdata.ohandle == -1) { dlt_file_free(&(dltdata.file), dltdata.vflag); fprintf(stderr, "ERROR: Output file %s cannot be opened!\n", dltdata.ovalue); return -1; } } if (dltdata.evalue) dlt_set_id(dltdata.ecuid, dltdata.evalue); else dlt_set_id(dltdata.ecuid, DLT_RECEIVE_ECU_ID); /* Connect to TCP socket or open serial device */ if (dlt_client_connect(&dltclient, dltdata.vflag) != DLT_RETURN_ERROR) { /* Dlt Client Main Loop */ dlt_client_main_loop(&dltclient, &dltdata, dltdata.vflag); /* Dlt Client Cleanup */ dlt_client_cleanup(&dltclient, dltdata.vflag); } /* dlt-receive cleanup */ if (dltdata.ovalue) close(dltdata.ohandle); free(dltdata.ovaluebase); dlt_file_free(&(dltdata.file), dltdata.vflag); dlt_filter_free(&(dltdata.filter), dltdata.vflag); return 0; } int dlt_receive_message_callback(DltMessage *message, void *data) { DltReceiveData *dltdata; static char text[DLT_RECEIVE_BUFSIZE]; struct iovec iov[2]; int bytes_written; if ((message == 0) || (data == 0)) return -1; dltdata = (DltReceiveData *)data; /* prepare storage header */ if (DLT_IS_HTYP_WEID(message->standardheader->htyp)) dlt_set_storageheader(message->storageheader, message->headerextra.ecu); else dlt_set_storageheader(message->storageheader, dltdata->ecuid); if ((dltdata->fvalue == 0) || (dltdata->fvalue && (dlt_message_filter_check(message, &(dltdata->filter), dltdata->vflag) == DLT_RETURN_TRUE))) { /* if no filter set or filter is matching display message */ if (dltdata->xflag) { dlt_message_print_hex(message, text, DLT_RECEIVE_BUFSIZE, dltdata->vflag); } else if (dltdata->aflag) { dlt_message_header(message, text, DLT_RECEIVE_BUFSIZE, dltdata->vflag); printf("%s ", text); dlt_message_payload(message, text, DLT_RECEIVE_BUFSIZE, DLT_OUTPUT_ASCII, dltdata->vflag); printf("[%s]\n", text); } else if (dltdata->mflag) { dlt_message_print_mixed_plain(message, text, DLT_RECEIVE_BUFSIZE, dltdata->vflag); } else if (dltdata->sflag) { dlt_message_header(message, text, DLT_RECEIVE_BUFSIZE, dltdata->vflag); printf("%s \n", text); } /* if file output enabled write message */ if (dltdata->ovalue) { iov[0].iov_base = message->headerbuffer; iov[0].iov_len = (uint32_t) message->headersize; iov[1].iov_base = message->databuffer; iov[1].iov_len = (uint32_t) message->datasize; if (dltdata->climit > -1) { uint32_t bytes_to_write = message->headersize + message->datasize; if ((bytes_to_write + dltdata->totalbytes > dltdata->climit)) { dlt_receive_close_output_file(dltdata); if (dlt_receive_open_output_file(dltdata) < 0) { printf( "ERROR: dlt_receive_message_callback: Unable to open log when maximum filesize was reached!\n"); return -1; } dltdata->totalbytes = 0; } } bytes_written = (int) writev(dltdata->ohandle, iov, 2); dltdata->totalbytes += bytes_written; if (0 > bytes_written) { printf("dlt_receive_message_callback: writev(dltdata->ohandle, iov, 2); returned an error!"); return -1; } } } return 0; } dlt-daemon-2.18.6/src/console/dlt-sortbytimestamp.c000066400000000000000000000352731377520261000222750ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2018, Codethink Ltd. * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Jonathan Sambrook * * \copyright Copyright Š 2018 Codethink Ltd. \n * Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-sortbytimestamp.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-sortbytimestamp.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Jonathan Sambrook jonathasambrook@codethink.co.uk ** ** Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** js Jonathan Sambrook Codethink ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include /* writev() */ #include "dlt_common.h" #define DLT_VERBUFSIZE 255 #define FIFTY_SEC_IN_MSEC 500000 #define THREE_MIN_IN_SEC 180 typedef struct sTimestampIndex { int num; uint32_t tmsp; uint32_t systmsp; } TimestampIndex; int verbosity = 0; /** * Print information, conditional upon requested verbosity level */ void verbose(int level, char *msg, ...) { if (level <= verbosity) { if (verbosity > 1) { /* timestamp */ time_t tnow = time((time_t *)0); if (tnow != -1) { char snow[50]; ctime_r(&tnow, snow); /* suppress newline char */ snow[strlen(snow) - 1] = 0; printf("%s: ", snow); } } int len = (int) strlen(msg); va_list args; va_start (args, msg); vprintf(msg, args); va_end(args); /* lines without a terminal newline aren't guaranteed to be displayed */ if (msg[len - 1] != '\n') fflush(stdout); } } /** * Comparison function for use with qsort * Used for time stamp */ int compare_index_timestamps(const void *a, const void *b) { int ret = -1; if (((TimestampIndex *)a)->tmsp > ((TimestampIndex *)b)->tmsp) ret = 1; else if (((TimestampIndex *)a)->tmsp == ((TimestampIndex *)b)->tmsp) ret = 0; return ret; } /** * Comparison function for use with qsort * Used for system time */ int compare_index_systime(const void *a, const void *b) { int ret = -1; if(((TimestampIndex *) a)->systmsp > ((TimestampIndex *) b)->systmsp) ret = 1; else if(((TimestampIndex *) a)->systmsp == ((TimestampIndex *) b)->systmsp) ret = 0; return ret; } /** * Write the messages in the order specified by the given index */ void write_messages(int ohandle, DltFile *file, TimestampIndex *timestamps, uint32_t message_count) { struct iovec iov[2]; ssize_t bytes_written; uint32_t i = 0; int last_errno = 0; verbose(1, "Writing %d messages\n", message_count); for (i = 0; i < message_count; ++i) { errno = 0; if ((0 == i % 1001) || (i == message_count - 1)) verbose(2, "Writing message %d\r", i); dlt_file_message(file, timestamps[i].num, 0); iov[0].iov_base = file->msg.headerbuffer; iov[0].iov_len = file->msg.headersize; iov[1].iov_base = file->msg.databuffer; iov[1].iov_len = file->msg.datasize; bytes_written = writev(ohandle, iov, 2); last_errno = errno; if (0 > bytes_written) { printf("%s: returned an error [%s]!\n", __func__, strerror(last_errno)); if (ohandle > 0) { close(ohandle); ohandle = -1; } if (timestamps) { free(timestamps); timestamps = NULL; } dlt_file_free(file, 0); exit (-1); } } verbose (2, "\n"); } /** * Print usage information of tool. */ void usage() { char version[DLT_VERBUFSIZE]; dlt_get_version(version, DLT_VERBUFSIZE); printf("Usage: dlt-sortbytimestamp [options] [commands] file_in file_out\n"); printf("Read DLT file, sort by timestamp and store the messages again.\n"); printf("Use filters to filter DLT messages.\n"); printf("Use range to cut DLT file. Indices are zero based.\n"); printf("%s \n", version); printf("Commands:\n"); printf(" -h Usage\n"); printf("Options:\n"); printf(" -v Verbosity. Multiple uses will effect an increase in loquacity\n"); printf(" -c Count number of messages\n"); printf(" -f filename Enable filtering of messages\n"); printf(" -b number First message in range to be handled (default: first message)\n"); printf(" -e number Last message in range to be handled (default: last message)\n"); } /** * Main function of tool. */ int main(int argc, char *argv[]) { int vflag = 0; int cflag = 0; char *fvalue = 0; char *bvalue = 0; char *evalue = 0; char *ivalue = 0; char *ovalue = 0; TimestampIndex *timestamp_index = 0; TimestampIndex *temp_timestamp_index = 0; uint32_t message_count = 0; uint32_t count = 0; uint32_t start = 0; uint32_t delta_tmsp = 0; uint32_t delta_systime = 0; size_t i; int c; DltFile file; DltFilter filter; int ohandle = -1; int num, begin, end; opterr = 0; verbose(1, "Configuring\n"); while ((c = getopt (argc, argv, "vchf:b:e:")) != -1) { switch (c) { case 'v': { verbosity += 1; break; } case 'c': { cflag = 1; break; } case 'h': { usage(); return -1; } case 'f': { fvalue = optarg; break; } case 'b': { bvalue = optarg; break; } case 'e': { evalue = optarg; break; } case '?': { if ((optopt == 'f') || (optopt == 'b') || (optopt == 'e')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { usage(); return -1; /*for parasoft */ } } } /* Don't use vflag on quietest levels */ if (verbosity > 2) vflag = 1; verbose (1, "Initializing\n"); /* Initialize structure to use DLT file */ dlt_file_init(&file, vflag); /* first parse filter file if filter parameter is used */ if (fvalue) { if (bvalue || evalue) { fprintf(stderr, "ERROR: can't specify a range *and* filtering!\n"); dlt_file_free(&file, vflag); return -1; } if (dlt_filter_load(&filter, fvalue, vflag) < DLT_RETURN_OK) { dlt_file_free(&file, vflag); return -1; } dlt_file_set_filter(&file, &filter, vflag); } ivalue = argv[optind]; if (!ivalue) { dlt_file_free(&file, vflag); fprintf(stderr, "ERROR: Need an input file!\n"); return -1; } ovalue = argv[optind + 1]; if (ovalue) { ohandle = open(ovalue, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* mode: wb */ if (ohandle == -1) { dlt_file_free(&file, vflag); fprintf(stderr, "ERROR: Output file %s cannot be opened!\n", ovalue); return -1; } } else { dlt_file_free(&file, vflag); fprintf(stderr, "ERROR: Need an output file!\n"); return -1; } verbose(1, "Loading\n"); /* load, analyze data file and create index list */ if (dlt_file_open(&file, ivalue, vflag) >= DLT_RETURN_OK) { while (dlt_file_read(&file, vflag) >= DLT_RETURN_OK) { } } if (cflag) { if (fvalue) printf("Loaded %d messages, %d after filtering.\n", file.counter_total, file.counter); else printf("Loaded %d messages.\n", file.counter_total); } if (bvalue) begin = atoi(bvalue); else begin = 0; if (evalue) end = atoi(evalue); else end = file.counter - 1; if ((begin < 0) || (end < 0) || (begin > end) || (begin >= file.counter) || (end >= file.counter)) { fprintf(stderr, "ERROR: Selected message [begin-end]-[%d-%d] is out of range!\n", begin, end); dlt_file_free(&file, vflag); if (ovalue) close(ohandle); return -1; } verbose(2, "Begin: %d End: %d Range: %d\n", begin, end, 1 + end - begin); verbose(1, "Allocating memory\n"); message_count = (uint32_t) (1 + end - begin); timestamp_index = (TimestampIndex *) malloc(sizeof(TimestampIndex) * (message_count + 1)); if (timestamp_index == NULL) { fprintf(stderr, "ERROR: Failed to allocate memory for message index!\n"); dlt_file_free(&file, vflag); if (ovalue) close(ohandle); return -1; } verbose(1, "Filling %d entries\n", message_count); for (num = begin; num <= end; num++) { dlt_file_message(&file, num, vflag); timestamp_index[num - begin].num = num; timestamp_index[num - begin].systmsp = file.msg.storageheader->seconds; timestamp_index[num - begin].tmsp = file.msg.headerextra.tmsp; } /* This step is extending the array one more element by copying the first element */ timestamp_index[num].num = timestamp_index[0].num; timestamp_index[num].systmsp = timestamp_index[0].systmsp; timestamp_index[num].tmsp = timestamp_index[0].tmsp; verbose(1, "Sorting\n"); qsort((void *) timestamp_index, message_count, sizeof(TimestampIndex), compare_index_systime); for (num = begin; num <= end; num++) { delta_tmsp = (uint32_t)llabs((int64_t)timestamp_index[num + 1].tmsp - timestamp_index[num].tmsp); delta_systime = (uint32_t)llabs((int64_t)timestamp_index[num + 1].systmsp - timestamp_index[num].systmsp); /* * Here is a try to detect a new cycle of boot in system. * Relatively, if there are gaps whose systime is larger than 3 mins and * timestamp is larger than 15 secs should be identified as a new boot cycle. */ count++; if(delta_tmsp > FIFTY_SEC_IN_MSEC || delta_systime >= THREE_MIN_IN_SEC) { verbose(1, "Detected a new cycle of boot\n"); temp_timestamp_index = (TimestampIndex *) malloc(sizeof(TimestampIndex) * count); if (temp_timestamp_index == NULL) { fprintf(stderr, "ERROR: Failed to allocate memory for array\n"); dlt_file_free(&file, vflag); if (ovalue) close(ohandle); return -1; } for (i = 0; i < count; i++) { memcpy((void*) &temp_timestamp_index[i], (void*) ×tamp_index[start + i], sizeof(TimestampIndex)); } qsort((void *) temp_timestamp_index, count, sizeof(TimestampIndex), compare_index_timestamps); write_messages(ohandle, &file, temp_timestamp_index, count); free(temp_timestamp_index); temp_timestamp_index = NULL; start = start + count; count = 0; } } /* * In case there is only cycle of boot in DLT file, * sort the DLT file again by timestamp then write * all messages out. */ if (count == message_count) { qsort((void *) timestamp_index, message_count + 1, sizeof(TimestampIndex), compare_index_timestamps); write_messages(ohandle, &file, timestamp_index, count); } if (ovalue) close(ohandle); verbose(1, "Tidying up.\n"); free(timestamp_index); timestamp_index = NULL; dlt_file_free(&file, vflag); return 0; } dlt-daemon-2.18.6/src/console/filter.txt000066400000000000000000000000241377520261000201120ustar00rootroot00000000000000ABCD IJKL TEST LOG dlt-daemon-2.18.6/src/console/logstorage/000077500000000000000000000000001377520261000202365ustar00rootroot00000000000000dlt-daemon-2.18.6/src/console/logstorage/CMakeLists.txt000066400000000000000000000023361377520261000230020ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2015, ADIT GmbH # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### add_definitions(-Werror) set(dlt-logstorage-ctrl_SRCS dlt-logstorage-ctrl.c dlt-logstorage-common.c dlt-logstorage-list.c) if(WITH_DLT_LOGSTORAGE_CTRL_UDEV) set(dlt-logstorage-ctrl_SRCS ${dlt-logstorage-ctrl_SRCS} dlt-logstorage-udev.c) set(LOGSTORAGE_LIBRARY udev) endif() if(WITH_SYSTEMD) set(dlt-logstorage-ctrl_SRCS ${dlt-logstorage-ctrl_SRCS} ${PROJECT_SOURCE_DIR}/systemd/3rdparty/sd-daemon.c) endif() add_executable(dlt-logstorage-ctrl ${dlt-logstorage-ctrl_SRCS} ${dlt_control_common_SRCS}) target_link_libraries(dlt-logstorage-ctrl dlt ${LOGSTORAGE_LIBRARY}) set_target_properties(dlt-logstorage-ctrl PROPERTIES LINKER_LANGUAGE C) install(TARGETS dlt-logstorage-ctrl RUNTIME DESTINATION bin COMPONENT base) dlt-daemon-2.18.6/src/console/logstorage/dlt-logstorage-common.c000066400000000000000000000222241377520261000246210ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Syed Hameed ADIT 2013 - 2015 * \author Christoph Lipka ADIT 2015 * \author Frederic Berat ADIT 2015 * * \file dlt-logstorage-common.c * For further information see http://www.genivi.org/. */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-logstorage-common.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Christoph Lipka clipka@jp.adit-jv.com ** ** Frederic Berat fberat@de.adit-jv.com ** ** PURPOSE : ** ** ** ** REMARKS : Code extracted from dlt-control-common.c and reworked. ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** cl Christoph Lipka ADIT ** ** fb Frederic Berat ADIT ** *******************************************************************************/ #define pr_fmt(fmt) "Logstorage common: "fmt #include #include #include #include #include #include #include #include #include #include "dlt_common.h" #include "dlt_protocol.h" #include "dlt_client.h" #include "dlt-control-common.h" #include "dlt-logstorage-common.h" #ifdef DLT_LOGSTORAGE_CTRL_UDEV_ENABLE # include "dlt-logstorage-udev.h" #endif #include "dlt-logstorage-prop.h" static struct LogstorageOptions { int event_type; /**< EVENT_UNMOUNTING/EVENT_MOUNTED */ char device_path[DLT_MOUNT_PATH_MAX]; /**< Default Mount path */ DltLogstorageHandler handler_type; /**< be controlled by udev or prop */ long timeout; /**< Default timeout */ } g_options = { .event_type = EVENT_MOUNTED, .handler_type = CTRL_NOHANDLER, }; DltLogstorageHandler get_handler_type(void) { return g_options.handler_type; } void set_handler_type(char *type) { g_options.handler_type = CTRL_UDEV; if (type && check_proprietary_handling(type)) g_options.handler_type = CTRL_PROPRIETARY; } int get_default_event_type(void) { return g_options.event_type; } void set_default_event_type(long type) { g_options.event_type = (int) type; } char *get_default_path(void) { return g_options.device_path; } void set_default_path(char *path) { memset(g_options.device_path, 0, DLT_MOUNT_PATH_MAX); if (path != NULL) strncpy(g_options.device_path, path, DLT_MOUNT_PATH_MAX - 1); } /* Used by the handlers */ static DltLogstorageCtrl lctrl; DltLogstorageCtrl *get_logstorage_control(void) { return &lctrl; } void *dlt_logstorage_get_handler_cb(void) { return lctrl.callback; } int dlt_logstorage_get_handler_fd(void) { return lctrl.fd; } /** @brief Initialized the handler based on configuration * * @return 0 on success, -1 otherwise. */ int dlt_logstorage_init_handler(void) { switch (get_handler_type()) { case CTRL_PROPRIETARY: return dlt_logstorage_prop_init(); case CTRL_UDEV: default: #ifdef DLT_LOGSTORAGE_CTRL_UDEV_ENABLE return dlt_logstorage_udev_init(); #else return -1; #endif } } /** @brief Clean-up the handler based on configuration * * @return 0 on success, -1 otherwise. */ int dlt_logstorage_deinit_handler(void) { switch (get_handler_type()) { case CTRL_PROPRIETARY: return dlt_logstorage_prop_deinit(); case CTRL_UDEV: default: #ifdef DLT_LOGSTORAGE_CTRL_UDEV_ENABLE return dlt_logstorage_udev_deinit(); #else return -1; #endif } } /** @brief Search for config file in given mount point * * The file is searched at the top directory. The function exits once it * founds it. * * @param mnt_point The mount point to check * * @return 1 if the file is found, 0 otherwise. */ int dlt_logstorage_check_config_file(char *mnt_point) { struct dirent **files; int n; int i = 0; int ret = 0; if ((mnt_point == NULL) || (mnt_point[0] == '\0')) { pr_error("Mount point missing.\n"); return ret; } pr_verbose("Now scanning %s\n", mnt_point); n = scandir(mnt_point, &files, NULL, alphasort); if (n <= 0) { pr_error("Cannot read mounted directory\n"); return ret; } do { pr_verbose("Checking %s.\n", files[i]->d_name); if (strncmp(files[i]->d_name, CONF_NAME, strlen(CONF_NAME)) == 0) { /* We found it ! */ pr_verbose("File found.\n"); ret = 1; break; } } while (++i < n); for (i = 0; i < n; i++) free(files[i]); free(files); return ret; } /** @brief Check if given mount point is writable * * @param mnt_point The mount point to check * * @return 1 if the file is writable, 0 otherwise. */ int dlt_logstorage_check_directory_permission(char *mnt_point) { if (mnt_point == NULL) { pr_error("Given mount point is NULL\n"); return 0; } if (access(mnt_point, W_OK) == 0) return 1; return 0; } /** @brief Prepares the body of the message to be send to DLT * * @param body A pointer to the MsgBody structure pointer * @param conn_type The type of the event (Mounted/Unmounting) * @param path The mount point path. * * @return The body once built or NULL. */ static DltControlMsgBody *prepare_message_body(DltControlMsgBody **body, int conn_type, char *path) { DltServiceOfflineLogstorage *serv = NULL; if (path == NULL) { pr_error("Mount path is uninitialized.\n"); return NULL; } pr_verbose("Sending event %d for %s.\n", conn_type, path); *body = calloc(1, sizeof(DltControlMsgBody)); if (!*body) { pr_error("Not able to allocate memory for body.\n"); return *body; } (*body)->data = calloc(1, sizeof(DltServiceOfflineLogstorage)); if (!(*body)->data) { free(*body); *body = NULL; pr_error("Not able to allocate memory for body data.\n"); return NULL; } (*body)->size = sizeof(DltServiceOfflineLogstorage); serv = (DltServiceOfflineLogstorage *)(*body)->data; serv->service_id = DLT_SERVICE_ID_OFFLINE_LOGSTORAGE; serv->connection_type = (uint8_t) conn_type; /* mount_point is DLT_MOUNT_PATH_MAX + 1 long, * and the memory is already zeroed. */ strncpy(serv->mount_point, path, DLT_MOUNT_PATH_MAX - 1); pr_verbose("Body is now ready.\n"); return *body; } /** @brief Send a logstorage event to DLT * * @param type The type of the event (Mounted/Unmounting) * @param mount_point The mount point for this event * * @return 0 On success, -1 otherwise. */ int dlt_logstorage_send_event(int type, char *mount_point) { int ret = 0; DltControlMsgBody *msg_body = NULL; /* mount_point is checked against NULL in the preparation */ if (!prepare_message_body(&msg_body, type, mount_point)) { pr_error("Data for Dlt Message body is NULL\n"); return -1; } ret = dlt_control_send_message(msg_body, get_timeout()); free(msg_body->data); free(msg_body); return ret; } dlt-daemon-2.18.6/src/console/logstorage/dlt-logstorage-common.h000066400000000000000000000051061377520261000246260ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Syed Hameed ADIT 2013 - 2015 * \author Christoph Lipka ADIT 2015 * \author Frederic Berat ADIT 2015 * * \file dlt-logstorage-common.h * For further information see http://www.genivi.org/. */ #ifndef _DLT_LOGSTORAGE_COMMON_H_ #define _DLT_LOGSTORAGE_COMMON_H_ #define CONF_NAME "dlt_logstorage.conf" #define EVENT_UNMOUNTING 0 #define EVENT_MOUNTED 1 #define EVENT_SYNC_CACHE 2 typedef enum { CTRL_NOHANDLER = 0, /**< one shot application */ CTRL_UDEV, /**< Handles udev events */ CTRL_PROPRIETARY /**< Handles proprietary event */ } DltLogstorageHandler; DltLogstorageHandler get_handler_type(void); void set_handler_type(char *); char *get_default_path(void); void set_default_path(char *); int get_default_event_type(void); void set_default_event_type(long type); typedef struct { int fd; int (*callback)(void); /* callback for event handling */ void *prvt; /* Private data */ } DltLogstorageCtrl; /* Get a reference to the logstorage control instance */ DltLogstorageCtrl *get_logstorage_control(void); void *dlt_logstorage_get_handler_cb(void); int dlt_logstorage_get_handler_fd(void); int dlt_logstorage_init_handler(void); int dlt_logstorage_deinit_handler(void); /** * Send an event to the dlt daemon * * @param type Event type (EVENT_UNMOUNTING/EVENT_MOUNTED) * @param mount_point The mount point path concerned by this event * * @return 0 on success, -1 on error */ int dlt_logstorage_send_event(int, char *); /** @brief Search for config file in given mount point * * The file is searched at the top directory. The function exits once it * founds it. * * @param mnt_point The mount point to check * * @return 1 if the file is found, 0 otherwise. */ int dlt_logstorage_check_config_file(char *); /** @brief Check if given mount point is writable * * @param mnt_point The mount point to check * * @return 1 if the file is writable, 0 otherwise. */ int dlt_logstorage_check_directory_permission(char *mnt_point); #endif dlt-daemon-2.18.6/src/console/logstorage/dlt-logstorage-ctrl.c000066400000000000000000000431641377520261000243030ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Syed Hameed ADIT 2013 - 2015 * \author Christoph Lipka ADIT 2015 * \author Frederic Berat ADIT 2015 * * \file dlt-logstorage-ctrl.c * For further information see http://www.genivi.org/. */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-logstorage-ctrl.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Syed Hameed shameed@jp.adit-jv.com ** ** Christoph Lipka clipka@jp.adit-jv.com ** ** AnithaAmmaji.baggam@in.bosch.com ** ** Frederic Berat fberat@de.adit-jv.com ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** sh Syed Hameed ADIT ** ** cl Christoph Lipka ADIT ** ** BA Anitha BA ADIT ** ** fb Frederic Berat ADIT ** *******************************************************************************/ #define pr_fmt(fmt) "Logstorage control: "fmt #include #include #include #include #include #include #include #include #if defined(__linux__) # include "sd-daemon.h" #endif #include "dlt_protocol.h" #include "dlt_client.h" #include "dlt-control-common.h" #include "dlt-logstorage-common.h" #include "dlt-logstorage-ctrl.h" #define POLL_TIME_OUT 500 #define EV_MASK_REJECTED (POLLERR | POLLHUP | POLLNVAL) #define DLT_LOGSTORAGE_CTRL_EXIT 1 static int must_exit; struct dlt_event { struct pollfd pfd; void *func; }; /** @brief Triggers the application exit * * The application will exit on next poll timeout. */ void dlt_logstorage_exit(void) { must_exit = DLT_LOGSTORAGE_CTRL_EXIT; } /** @brief Check if the application must exit * * The application will exit on next poll timeout. */ int dlt_logstorage_must_exit(void) { return must_exit; } /** @brief Signal handler. * * Triggers the exit of the application in case of specific signals * * @param signo The value of the signal received. */ static void catch_signal(int signo) { if (signo) { pr_error("Signal %d received, exiting.", signo); dlt_logstorage_exit(); } } /** @brief Install a handler for some signals * * Handler are installed on exit related signals. That allows to exit from * the main loop gracefully. */ static void install_signal_handler(void) { int signals[] = { SIGINT, SIGQUIT, SIGTERM, 0 }; unsigned int i; struct sigaction sa; pr_verbose("Installing signal handler.\n"); /* install a signal handler for the above listed signals */ for (i = 0; signals[i]; i++) { memset(&sa, 0, sizeof(sa)); sa.sa_handler = catch_signal; if (sigaction(signals[i], &sa, NULL) < 0) pr_error("Failed to install signal %u handler. Error: %s\n", signals[i], strerror(errno)); } } #define MAX_RESPONSE_LENGTH 32 /** @brief Analyze the daemon answer to a request * * This function checks whether if the daemon answered positively to * the request or not. * * @param data The textual answer * @param payload The answer payload * @param len The answer payload length * @return 0 on success, -1 otherwise. */ static int analyze_response(char *data, void *payload, int len) { int ret = -1; char resp_ok[MAX_RESPONSE_LENGTH] = { 0 }; char resp_warning[MAX_RESPONSE_LENGTH] = { 0 }; char resp_perm_denied[MAX_RESPONSE_LENGTH] = { 0 }; if ((data == NULL) || (payload == NULL)) return -1; /* satisfy compiler */ (void)payload; (void)len; snprintf(resp_ok, MAX_RESPONSE_LENGTH, "service(%u), ok", DLT_SERVICE_ID_OFFLINE_LOGSTORAGE); snprintf(resp_warning, MAX_RESPONSE_LENGTH, "service(%u), warning", DLT_SERVICE_ID_OFFLINE_LOGSTORAGE); snprintf(resp_perm_denied, MAX_RESPONSE_LENGTH, "service(%u), perm_denied", DLT_SERVICE_ID_OFFLINE_LOGSTORAGE); if (strncmp(data, resp_ok, strlen(resp_ok)) == 0) ret = 0; if (strncmp(data, resp_warning, strlen(resp_warning)) == 0) { pr_error("Warning:Some filter configurations are ignored due to configuration issues \n"); ret = 0; } if (strncmp(data, resp_perm_denied, strlen(resp_perm_denied)) == 0) { pr_error("Warning: Permission denied.\n"); ret = 0; } pr_verbose("Response received: '%s'\n", data); pr_verbose("Response expected: '%s'\n", resp_ok); return ret; } /** @brief Add a new event to watch * * This function could be exported to be used by udev/prop so that they can * register several events. * * @param ev_hdl The structure containing the file descriptors * @param fd The file descriptor to watch * @param cb The callback to be called on event. * * @return 0 on success, -1 if the parameters are invalid. */ static int dlt_logstorage_ctrl_add_event(struct dlt_event *ev_hdl, int fd, void *cb) { if ((fd < 0) || !cb || !ev_hdl) { pr_error("Wrong parameter to add event (%d %p)\n", fd, cb); return -1; } pr_verbose("Setting up the event handler with (%d, %p).\n", fd, cb); ev_hdl->func = cb; ev_hdl->pfd.fd = fd; return 0; } /** @brief Main execution loop * * Waits on events, and executes the callbacks retrieved * back from the event structure. * * @return 0 on success, -1 otherwise. */ static int dlt_logstorage_ctrl_execute_event_loop(struct dlt_event *ev) { int ret = 0; int (*callback)() = ev->func; ret = poll(&ev->pfd, 1, POLL_TIME_OUT); if (ret <= 0) { if (errno == EINTR) ret = 0; if (ret < 0) pr_error("poll error: %s\n", strerror(errno)); return ret; } if (ev->pfd.revents == 0) return 0; if (ev->pfd.events & EV_MASK_REJECTED) { pr_error("Error while polling. Event received: 0x%x\n", ev->pfd.events); /* We only support one event producer. * Error means that this producer died. */ pr_error("Now closing fd and exiting.\n"); close(ev->pfd.fd); ev->pfd.fd = -1; dlt_logstorage_exit(); return -1; } if (!callback) { pr_error("Callback not found, exiting.\n"); dlt_logstorage_exit(); return -1; } pr_verbose("Got new event, calling %p.\n", callback); if (callback() < 0) { pr_error("Error while calling the callback, exiting.\n"); dlt_logstorage_exit(); return -1; } return 0; } /** @brief Start event loop and receive messages from DLT. * * The function will first install the signal handler, * then create the poll instance, initialize the communication controller, * initialize the event handler and finally start the polling. * * @return 0 on success, -1 on error */ static int dlt_logstorage_ctrl_setup_event_loop(void) { int ret = 0; struct dlt_event ev_hdl = { .pfd = { .fd = -1, .events = POLLIN } }; install_signal_handler(); pr_verbose("Creating poll instance.\n"); /* Initializing the communication with the daemon */ while (dlt_control_init(analyze_response, get_ecuid(), get_verbosity()) && !dlt_logstorage_must_exit()) { pr_error("Failed to initialize connection with the daemon.\n"); pr_error("Retrying to connect in %ds.\n", get_timeout()); sleep((unsigned int) get_timeout()); } if (dlt_logstorage_must_exit()) { pr_verbose("Exiting.\n"); return 0; } pr_verbose("Initializing event generator.\n"); if (dlt_logstorage_init_handler() < 0) { pr_error("Failed to initialize handler.\n"); dlt_control_deinit(); return -1; } if (dlt_logstorage_ctrl_add_event(&ev_hdl, dlt_logstorage_get_handler_fd(), dlt_logstorage_get_handler_cb()) < 0) { pr_error("add_event error: %s\n", strerror(errno)); dlt_logstorage_exit(); } while (!dlt_logstorage_must_exit() && (ret == 0)) ret = dlt_logstorage_ctrl_execute_event_loop(&ev_hdl); /* Clean up */ dlt_logstorage_deinit_handler(); dlt_control_deinit(); return ret; } /** @brief Send a single command to DLT daemon and wait for response * * @return 0 on success, -1 otherwise. */ static int dlt_logstorage_ctrl_single_request() { int ret = 0; /* in case sync all caches, an empty path is given */ if (get_default_event_type() != EVENT_SYNC_CACHE) { /* Check if a 'CONF_NAME' file is present at the given path */ if (!dlt_logstorage_check_config_file(get_default_path())) { pr_error("No '%s' file available at: %s\n", CONF_NAME, get_default_path()); return -1; } if (!dlt_logstorage_check_directory_permission(get_default_path())) { pr_error("'%s' is not writable\n", get_default_path()); return -1; } } /* Initializing the communication with the daemon */ while (dlt_control_init(analyze_response, get_ecuid(), get_verbosity()) && !dlt_logstorage_must_exit()) { pr_error("Failed to initialize connection with the daemon.\n"); pr_error("Retrying to connect in %ds.\n", get_timeout()); sleep( (unsigned int) get_timeout()); } pr_verbose("event type is [%d]\t device path is [%s]\n", get_default_event_type(), get_default_path()); ret = dlt_logstorage_send_event(get_default_event_type(), get_default_path()); dlt_control_deinit(); return ret; } /** @brief Print out the application help */ static void usage(void) { printf("Usage: dlt-logstorage-ctrl [options]\n"); printf("Send a trigger to DLT daemon to connect/disconnect" "a certain logstorage device\n"); printf("\n"); printf("Options:\n"); printf(" -c --command Connection type: connect = 1, disconnect = 0\n"); printf(" -d[prop] --daemonize=prop Run as daemon: prop = use proprietary handler\n"); printf(" 'prop' may be replaced by any meaningful word\n"); printf(" If prop is not specified, udev will be used\n"); printf(" -e --ecuid Set ECU ID (Default: %s)\n", DLT_CTRL_DEFAULT_ECUID); printf(" -h --help Usage\n"); printf(" -p --path Mount point path\n"); printf(" -s[path] --snapshot=path Sync Logstorage cache\n"); printf(" Don't use -s together with -d and -c\n"); printf(" -t Specify connection timeout (Default: %ds)\n", DLT_CTRL_TIMEOUT); printf(" -v --verbose Set verbose flag (Default:%d)\n", get_verbosity()); } static struct option long_options[] = { { "command", required_argument, 0, 'c' }, { "daemonize", optional_argument, 0, 'd' }, { "ecuid", required_argument, 0, 'e' }, { "help", no_argument, 0, 'h' }, { "path", required_argument, 0, 'p' }, { "snapshot", optional_argument, 0, 's' }, { "timeout", required_argument, 0, 't' }, { "verbose", no_argument, 0, 'v' }, { 0, 0, 0, 0 } }; /** @brief Parses the application arguments * * The arguments are parsed and saved in static structure for future use. * * @param argc The amount of arguments * @param argv The table of arguments * * @return 0 on success, -1 otherwise */ static int parse_args(int argc, char *argv[]) { int c = -1; int long_index = 0; while ((c = getopt_long(argc, argv, ":s::t:he:p:d::c:v", long_options, &long_index)) != -1) switch (c) { case 's': set_default_event_type(EVENT_SYNC_CACHE); if ((optarg != NULL) && (strlen(optarg) >= DLT_MOUNT_PATH_MAX)) { pr_error("Mount path '%s' too long\n", optarg); return -1; } set_default_path(optarg); break; case 't': set_timeout((int) strtol(optarg, NULL, 10)); break; case 'h': usage(); return -1; case 'e': set_ecuid(optarg); break; case 'd': pr_verbose("Choosing handler.\n"); set_handler_type(optarg); pr_verbose("Handler chosen: %d.\n", get_handler_type()); break; case 'p': if (strlen(optarg) >= DLT_MOUNT_PATH_MAX) { pr_error("Mount path '%s' too long\n", optarg); return -1; } set_default_path(optarg); break; case 'c': set_default_event_type(strtol(optarg, NULL, 10)); break; case 'v': set_verbosity(1); pr_verbose("Now in verbose mode.\n"); break; case ':': pr_error("Option -%c requires an argument.\n", optopt); usage(); return -1; case '?': if (isprint(optopt)) pr_error("Unknown option -%c.\n", optopt); else pr_error("Unknown option character \\x%x.\n", optopt); usage(); return -1; default: pr_error("Try %s -h for more information.\n", argv[0]); return -1; } if ((get_default_event_type() == EVENT_SYNC_CACHE) && (get_handler_type() != CTRL_NOHANDLER)) { pr_error("Sync caches not available in daemon mode\n"); return -1; } return 0; } #if !defined(DLT_SYSTEMD_ENABLE) int sd_notify(int unset_environment, const char *state) { /* Satisfy Compiler for warnings */ (void)unset_environment; (void)state; return 0; } #endif /** @brief Entry point * * Execute the argument parser and call the main feature accordingly. * * @param argc The amount of arguments * @param argv The table of arguments * * @return 0 on success, -1 otherwise */ int main(int argc, char *argv[]) { int ret = 0; set_ecuid(NULL); set_timeout(DLT_CTRL_TIMEOUT); /* Get command line arguments */ if (parse_args(argc, argv) != 0) return -1; /* all parameter valid, start communication with daemon or setup * communication with control daemon */ if (get_handler_type() == CTRL_NOHANDLER) { pr_verbose("One shot.\n"); ret = dlt_logstorage_ctrl_single_request(); if (ret < 0) pr_error("Message failed to be send. Please check DLT config.\n"); } else { pr_verbose("Entering in daemon mode.\n"); /* Let's daemonize */ if (sd_notify(0, "READY=1") <= 0) { pr_verbose("SD notify failed, manually daemonizing.\n"); /* No message can be sent or Systemd is not available. * Daemonizing manually. */ if (daemon(1, 1)) { pr_error("Failed to daemonize: %s\n", strerror(errno)); return EXIT_FAILURE; } } pr_verbose("Executing the event loop\n"); ret = dlt_logstorage_ctrl_setup_event_loop(); } pr_verbose("Exiting.\n"); return ret; } dlt-daemon-2.18.6/src/console/logstorage/dlt-logstorage-ctrl.h000066400000000000000000000016161377520261000243040ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Syed Hameed ADIT 2013 - 2015 * \author Christoph Lipka ADIT 2015 * * \file dlt-logstorage-ctrl.h * For further information see http://www.genivi.org/. */ #ifndef _DLT_LOGSTORAGE_CONTROL_H_ #define _DLT_LOGSTORAGE_CONTROL_H_ /* Triggers the exit at the end of the event */ void dlt_logstorage_exit(void); #endif dlt-daemon-2.18.6/src/console/logstorage/dlt-logstorage-list.c000066400000000000000000000164601377520261000243110ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Anitha.BA ADIT 2015 * \author Christoph Lipka ADIT 2015 * \author Frederic Berat ADIT 2015 * * \file dlt-logstorage-list.c * For further information see http://www.genivi.org/. */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-logstorage-list.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Christoph Lipka clipka@jp.adit-jv.com ** ** Anitha.B.A anithaammaji.baggam@in.bosch.com ** ** Frederic Berat fberat@de.adit-jv.com ** ** ** ** PURPOSE : linked list implementation for storing the device info ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** BA Anitha ADIT ** ** cl Christoph Lipka ADIT ** ** fb Frederic Berat ADIT ** *******************************************************************************/ #define pr_fmt(fmt) "Log storage list: "fmt #include #include #include #include #include "dlt_common.h" #include "dlt-control-common.h" #include "dlt-logstorage-common.h" static struct LogstorageDeviceInfo { char *dev_node; /**< The device node */ char *mnt_point; /**< Mount point for this device */ struct LogstorageDeviceInfo *prev; /**< Previous element of the list */ struct LogstorageDeviceInfo *next; /**< Next element of the list */ } *g_info; /** @brief Prints the device list in verbose mode * * This can be used to debug the behavior. * Therefore, it's only available in verbose mode. */ void print_list() { struct LogstorageDeviceInfo *ptr = g_info; pr_verbose(" -------Device list-------\n"); while (ptr != NULL) { pr_verbose("%p:\t[%s][%s] \n", ptr, ptr->dev_node, ptr->mnt_point); ptr = ptr->next; } pr_verbose(" -------Device list end-------\n\n"); return; } /** @brief Find element in the list based on device node * * Allows to check whether a device is already in the list or * to find out the one to be removed. * * @param node The device node to look for * * @return The element of the list found, NULL either. */ static struct LogstorageDeviceInfo *logstorage_find_dev_info(const char *node) { struct LogstorageDeviceInfo *ptr = g_info; if (!node) return NULL; pr_verbose("Looking for %s.\n", node); while (ptr != NULL) { if (strncmp(ptr->dev_node, node, DLT_MOUNT_PATH_MAX) == 0) { pr_verbose("%s found in %p.\n", node, ptr); break; } else { ptr = ptr->next; } } return ptr; } /** @brief Add new device in the list * * The device is only added if a configuration file has been found and * if it's not already in the list. * * @param node The device node to add * @param path The corresponding mount point path * * @return 0 on success, -1 in case of error. */ int logstorage_store_dev_info(const char *node, const char *path) { struct LogstorageDeviceInfo *ptr = NULL; size_t path_len = 0; if ((node == NULL) || (path == NULL)) { pr_error("Invalid input\n"); return -1; } if (logstorage_find_dev_info(node)) { pr_verbose("%s already in list.\n", node); print_list(); return 0; } ptr = calloc(1, sizeof(struct LogstorageDeviceInfo)); if (ptr == NULL) { pr_error("Node creation failed\n"); return -1; } ptr->dev_node = strdup(node); path_len = strlen(path); if (path_len > DLT_MOUNT_PATH_MAX) path_len = (size_t)DLT_MOUNT_PATH_MAX; ptr->mnt_point = (char *)calloc(1, path_len + 1); if (ptr->mnt_point == NULL) { pr_error("memory allocation failed for mnt_point\n"); free(ptr); ptr = NULL; return -1; } ptr->mnt_point[path_len] = '\0'; memcpy(ptr->mnt_point, path, path_len); /* Put it on head */ ptr->next = g_info; if (g_info) g_info->prev = ptr; g_info = ptr; pr_verbose("%s added to list.\n", node); print_list(); return 0; } /** @brief Remove a device from the list * * If the device is removed from the list, the mount point * pointer is given back to the caller. That means that * he has to free it. * * @param node The device node to be removed * * @return the mount point if the node is found, NULL either. */ char *logstorage_delete_dev_info(const char *node) { struct LogstorageDeviceInfo *del = NULL; char *ret = NULL; del = logstorage_find_dev_info(node); if (del == NULL) { pr_verbose("%s not found in list.\n", node); print_list(); return ret; } /* Has to be freed by the caller */ ret = del->mnt_point; if (del->prev) del->prev->next = del->next; if (del->next) del->next->prev = del->prev; if (del == g_info) g_info = g_info->next; free(del->dev_node); free(del); pr_verbose("%s removed from list.\n", node); print_list(); return ret; } dlt-daemon-2.18.6/src/console/logstorage/dlt-logstorage-list.h000066400000000000000000000021571377520261000243140ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Christoph Lipka clipka@jp.adit-jv.com * \author Anitha BA ADIT 2015 * \author Frederic Berat ADIT 2015 * * \file dlt-logstorage-list.h * For further information see http://www.genivi.org/. */ #ifndef _DLT_LOGSTORAGE_LIST_H_ #define _DLT_LOGSTORAGE_LIST_H_ /* Return 0 it the node as been added (or is already present) */ int logstorage_store_dev_info(const char *node, const char *path); /* Returns the mount point if node has been found and deleted. NULL either */ char *logstorage_delete_dev_info(const char *node); #endif dlt-daemon-2.18.6/src/console/logstorage/dlt-logstorage-prop.h000066400000000000000000000033231377520261000243150ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * \author Christoph Lipka ADIT 2015 * \author Frederic Berat ADIT 2015 * * \file dlt-logstorage-udev.h * For further information see http://www.genivi.org/. */ #ifndef _DLT_LOGSTORAGE_PROP_H_ #define _DLT_LOGSTORAGE_PROP_H_ #ifndef HAS_PROPRIETARY_LOGSTORAGE /** @brief Initialize proprietary connection * * @return 0 */ static inline int dlt_logstorage_prop_init(void) { return 0; } /** @brief Clean-up proprietary connection * * @return 0 */ static inline int dlt_logstorage_prop_deinit(void) { return 0; } /** @brief Check whether user wants to use proprietary handler * * @return 0 */ static inline int check_proprietary_handling(char *type) { (void)type; return 0; } #else /** * Initialize proprietary connection * * @return 0 on success, -1 on error */ int dlt_logstorage_prop_init(void); /** * Clean-up proprietary connection * * @return 0 on success, -1 on error */ int dlt_logstorage_prop_deinit(void); /** * Check whether user wants to use proprietary event handler * * @return 1 if yes, 0 either. */ int check_proprietary_handling(char *); #endif /* HAS_PROPRIETARY_LOGSTORAGE */ #endif /* _DLT_LOGSTORAGE_PROP_H_ */ dlt-daemon-2.18.6/src/console/logstorage/dlt-logstorage-udev.c000066400000000000000000000320401377520261000242710ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Christoph Lipka ADIT 2015 * \author Frederic Berat ADIT 2015 * * \file dlt-logstorage-udev.c * For further information see http://www.genivi.org/. */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-logstorage-udev.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Christoph Lipka clipka@jp.adit-jv.com ** ** Frederic Berat fberat@de.adit-jv.com ** ** ** ** PURPOSE : For udev-based handling of any device ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** cl Christoph Lipka ADIT ** ** fb Frederic Berat ADIT ** *******************************************************************************/ #define pr_fmt(fmt) "Udev control: "fmt #include #include #include #include #include #include #include #include #include "dlt-control-common.h" #include "dlt-logstorage-common.h" #include "dlt-logstorage-list.h" #include "dlt-logstorage-udev.h" typedef struct { struct udev *udev; /**< Udev instance */ struct udev_monitor *mon; /**< Udev monitor instance */ } LogstorageCtrlUdev; /** @brief Get mount point of a device node * * This function search for the mount point in /proc/mounts * based on the device node. * * @param dev_node Device node as string * * @return mount path or NULL on error */ static char *dlt_logstorage_udev_get_mount_point(char *dev_node) { struct mntent *ent; FILE *f; char *mnt_point = NULL; if (dev_node == NULL) return NULL; f = setmntent("/proc/mounts", "r"); if (f == NULL) { pr_error("Cannot read /proc/mounts\n"); return NULL; } while (NULL != (ent = getmntent(f))) if (strncmp(ent->mnt_fsname, dev_node, strlen(ent->mnt_fsname)) == 0) { mnt_point = strdup(ent->mnt_dir); if (mnt_point == NULL) { pr_error("Cannot duplicate string.\n"); return NULL; } /* Remounting rw */ if (strlen(mnt_point)) /* capabilities needed. Thus we don't really car on failure. * Therefor we can ignore the return value. */ (void)mount(NULL, mnt_point, NULL, MS_REMOUNT, ent->mnt_opts); break; } endmntent(f); return mnt_point; } /** @brief Check if the daemon needs to be notified by the event * * On mount event: * If the device mount point contains the DLT configuration file, * the function will then send a message to the daemon. * On Unmounting event: * Check if the device was on the list, remove it and send the message * to the daemon. * * @param event The kind of event happening * @param part The device partition to be checked * * @return 0 on success, -1 if an error occured. */ static int check_mountpoint_from_partition(int event, struct udev_device *part) { int logstorage_dev = 0; char *mnt_point = NULL; char *dev_node = NULL; int ret = 0; if (!part) { pr_verbose("No partition structure given.\n"); return -1; } pr_verbose("Checking mount point.\n"); if (!udev_device_get_devnode(part)) { pr_verbose("Skipping as no devnode.\n"); return 0; } dev_node = strdup(udev_device_get_devnode(part)); if (dev_node == NULL) { pr_error("Cannot allocate memory for to store string\n"); return -1; } if (event == EVENT_MOUNTED) { mnt_point = dlt_logstorage_udev_get_mount_point(dev_node); logstorage_dev = dlt_logstorage_check_config_file(mnt_point); if (logstorage_dev) { /* Configuration file available, add node to internal list */ logstorage_store_dev_info(dev_node, mnt_point); } else { free(mnt_point); mnt_point = NULL; } } else { /* remove device information */ mnt_point = logstorage_delete_dev_info(dev_node); } if (mnt_point) { ret = dlt_logstorage_send_event(event, mnt_point); if (ret) pr_error("Can't send event for %s to DLT.\n", mnt_point); } free(dev_node); free(mnt_point); return 0; } /** @brief Handles the udev events * * On event, it finds the corresponding action, and calls * check_mountpoint_from_partition with the corresponding event. * * @return 0 on success, -1 on error. */ static int logstorage_udev_udevd_callback(void) { const char *action; int ret = 0; DltLogstorageCtrl *lctrl = get_logstorage_control(); LogstorageCtrlUdev *prvt = NULL; struct udev_device *partition = NULL; struct timespec ts; if (!lctrl) { pr_error("Not able to get logstorage control instance.\n"); return -1; } prvt = (LogstorageCtrlUdev *)lctrl->prvt; if ((!prvt) || (!prvt->mon)) { pr_error("Not able to get private data.\n"); return -1; } partition = udev_monitor_receive_device(prvt->mon); if (!partition) { pr_error("Not able to get partition.\n"); return -1; } action = udev_device_get_action(partition); if (!action) { pr_error("Not able to get action.\n"); udev_device_unref(partition); return -1; } pr_verbose("%s action received from udev for %s.\n", action, udev_device_get_devnode(partition)); if (strncmp(action, "add", sizeof("add")) == 0) { /*TODO: This can be replaced by polling on /proc/mount. * we could get event on modification, and keep track on a list * of mounted devices. New devices could be check that way. * That also would solve the unmount event issue. * Then, udev is only interesting to simplify the check on new devices, * and/or for hot unplug (without unmount). */ ts.tv_sec = 0; ts.tv_nsec = 500 * NANOSEC_PER_MILLISEC; nanosleep(&ts, NULL); ret = check_mountpoint_from_partition(EVENT_MOUNTED, partition); } else if (strncmp(action, "remove", sizeof("remove")) == 0) { ret = check_mountpoint_from_partition(EVENT_UNMOUNTING, partition); } udev_device_unref(partition); return ret; } /** @brief Check all partitions on the system to find configuration file * * The function looks for block devices that are of "partition" type. * Then, it gets the node, and call check_mountpoint_from_partition with it. * * @param udev The udev device used to find all the nodes * * @return 0 on success, -1 otherwise. */ static int dlt_logstorage_udev_check_mounted(struct udev *udev) { if (udev == NULL) { pr_error("%s: udev structure is NULL\n", __func__); return -1; } /* Create a list of the devices in the 'partition' subsystem. */ struct udev_enumerate *enumerate = udev_enumerate_new(udev); struct udev_list_entry *devices = NULL; struct udev_list_entry *dev_list_entry = NULL; if (!enumerate) { pr_error("Can't enumerate devices.\n"); return -1; } udev_enumerate_add_match_subsystem(enumerate, "block"); udev_enumerate_add_match_property(enumerate, "DEVTYPE", "partition"); udev_enumerate_scan_devices(enumerate); devices = udev_enumerate_get_list_entry(enumerate); /* For each list entry, get the corresponding device */ udev_list_entry_foreach(dev_list_entry, devices) { const char *path; struct udev_device *partition = NULL; /* Get the filename of the /sys entry for the device * and create a udev_device object representing it */ path = udev_list_entry_get_name(dev_list_entry); partition = udev_device_new_from_syspath(udev, path); if (!partition) continue; pr_verbose("Found device %s %s %s.\n", path, udev_device_get_devnode(partition), udev_device_get_devtype(partition)); /* Check the device and clean-up */ check_mountpoint_from_partition(EVENT_MOUNTED, partition); udev_device_unref(partition); } /* Free the enumerator object */ udev_enumerate_unref(enumerate); return 0; } /** @brief Clean-up the udev data * * That will destroy all the private data. * * @return 0 on success, -1 otherwise. */ int dlt_logstorage_udev_deinit(void) { DltLogstorageCtrl *lctrl = get_logstorage_control(); LogstorageCtrlUdev *prvt = NULL; if (!lctrl) return -1; prvt = (LogstorageCtrlUdev *)lctrl->prvt; if (prvt == NULL) return -1; if (prvt->mon) udev_monitor_unref(prvt->mon); if (prvt->udev) udev_unref(prvt->udev); free(prvt); lctrl->prvt = NULL; return 0; } /** @brief Initialize the private data * * That function will create the udev device and monitor. * * @return 0 on success, -1 otherwise. */ int dlt_logstorage_udev_init(void) { int ret = 0; DltLogstorageCtrl *lctrl = get_logstorage_control(); LogstorageCtrlUdev *prvt = NULL; pr_verbose("Initializing.\n"); if (!lctrl) { pr_error("Not able to get logstorage control instance.\n"); return -1; } lctrl->prvt = calloc(1, sizeof(LogstorageCtrlUdev)); if (!lctrl->prvt) { pr_error("No memory to allocate private data.\n"); return -1; } prvt = (LogstorageCtrlUdev *)lctrl->prvt; /* Initialize udev object */ prvt->udev = udev_new(); if (!prvt->udev) { pr_error("Cannot initialize udev object\n"); dlt_logstorage_udev_deinit(); return -1; } /* setup udev monitor which will report events when * devices attached to the system change. Events include * "add", "remove", "change", etc */ prvt->mon = udev_monitor_new_from_netlink(prvt->udev, "udev"); if (!prvt->mon) { pr_error("Cannot initialize udev monitor\n"); dlt_logstorage_udev_deinit(); return -1; } ret = udev_monitor_filter_add_match_subsystem_devtype(prvt->mon, "block", NULL); if (ret) { pr_error("Cannot attach filter to monitor: %s.\n", strerror(-ret)); dlt_logstorage_udev_deinit(); return -1; } ret = udev_monitor_enable_receiving(prvt->mon); if (ret < 0) { pr_error("Cannot start receiving: %s.\n", strerror(-ret)); dlt_logstorage_udev_deinit(); return -1; } /* get file descriptor */ lctrl->fd = udev_monitor_get_fd(prvt->mon); /* set callback function */ lctrl->callback = &logstorage_udev_udevd_callback; /* check if there is something already mounted */ return dlt_logstorage_udev_check_mounted(prvt->udev); } dlt-daemon-2.18.6/src/console/logstorage/dlt-logstorage-udev.h000066400000000000000000000020221377520261000242730ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * \author Christoph Lipka ADIT 2015 * \author Frederic Berat ADIT 2015 * * \file dlt-logstorage-udev.h * For further information see http://www.genivi.org/. */ #ifndef _DLT_LOGSTORAGE_UDEV_H_ #define _DLT_LOGSTORAGE_UDEV_H_ /** * Initialize udev connection * * @return 0 on success, -1 on error */ int dlt_logstorage_udev_init(void); /** * Clean-up udev connection * * @return 0 on success, -1 on error */ int dlt_logstorage_udev_deinit(void); #endif dlt-daemon-2.18.6/src/core_dump_handler/000077500000000000000000000000001377520261000201005ustar00rootroot00000000000000dlt-daemon-2.18.6/src/core_dump_handler/50-coredump.conf.cmake000066400000000000000000000007551377520261000240750ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### kernel.core_pattern=|@CMAKE_INSTALL_PREFIX@/bin/dlt-cdh %t %p %s %e dlt-daemon-2.18.6/src/core_dump_handler/CMakeLists.txt000066400000000000000000000030261377520261000226410ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### if(WITH_DLT_COREDUMPHANDLER) set(PLATFORM_DIR ${PROJECT_SOURCE_DIR}/src/core_dump_handler/${TARGET_CPU_NAME}) set(dlt_cdh_SRCS dlt_cdh.c dlt_cdh_context.c dlt_cdh_coredump.c ${PLATFORM_DIR}/dlt_cdh_cpuinfo.c dlt_cdh_crashid.c dlt_cdh_streamer.c) set(COREDUMP_CONF_DIR "/usr/lib/sysctl.d/") #add_definitions( -fno-strict-aliasing ) if(WITH_CITYHASH) set(CITYHASH_DIR ${PROJECT_SOURCE_DIR}/src/core_dump_handler/cityhash_c) add_definitions(-DHAS_CITYHASH_C) set(dlt_cdh_SRCS ${CITYHASH_DIR}/city_c.c ${dlt_cdh_SRCS}) endif(WITH_CITYHASH) add_executable(dlt-cdh ${dlt_cdh_SRCS}) target_link_libraries(dlt-cdh ${ZLIB_LIBRARY}) set_target_properties(dlt-cdh PROPERTIES LINKER_LANGUAGE C) configure_file(${PROJECT_SOURCE_DIR}/src/core_dump_handler/50-coredump.conf.cmake ${PROJECT_BINARY_DIR}/core_dump_handler/50-coredump.conf) install(TARGETS dlt-cdh RUNTIME DESTINATION bin COMPONENT base) install(FILES ${PROJECT_BINARY_DIR}/core_dump_handler/50-coredump.conf DESTINATION ${COREDUMP_CONF_DIR}) endif(WITH_DLT_COREDUMPHANDLER) dlt-daemon-2.18.6/src/core_dump_handler/README000066400000000000000000000016101377520261000207560ustar00rootroot00000000000000To build use cmake with -DWITH_DLT_COREDUMPHANDLER=ON -DTARGET_CPU_NAME={i686|x86_64} Temporary replacement of default crash handler: If you don't want to make the change persistent just become root (not sudo) and execute the following ("man core" for details): echo "|/usr/local/bin/dlt-cdh %t %p %s %e" > /proc/sys/kernel/core_pattern (replace /usr/local/bin with the path dlt-cdh has been installed to) Persistent replacement of default crash handler: We have to generate "50-coredump.conf" in "/usr/lib/sysctl.d/" which is done automatically by "make install". Unfortunately at least on Fedora systems we also have to remove abrt with "yum remove abrtd*" because this ruthlessly overwrites our change at every boot. This must be done when installing this stuff as Debian package. To enable the core dump handler without rebooting we have to execute "sysctl -p /usr/lib/sysctl.d/50-coredump.conf" dlt-daemon-2.18.6/src/core_dump_handler/cityhash_c/000077500000000000000000000000001377520261000222165ustar00rootroot00000000000000dlt-daemon-2.18.6/src/core_dump_handler/cityhash_c/COPYING000066400000000000000000000021251377520261000232510ustar00rootroot00000000000000// Copyright (c) 2011 Google, Inc. // // 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.dlt-daemon-2.18.6/src/core_dump_handler/cityhash_c/README000066400000000000000000000165401377520261000231040ustar00rootroot00000000000000CityHash, a family of hash functions for strings. Introduction ============ CityHash provides hash functions for strings. The functions mix the input bits thoroughly but are not suitable for cryptography. See "Hash Quality," below, for details on how CityHash was tested and so on. We provide reference implementations in C++, with a friendly MIT license. CityHash32() returns a 32-bit hash. CityHash64() and similar return a 64-bit hash. CityHash128() and similar return a 128-bit hash and are tuned for strings of at least a few hundred bytes. Depending on your compiler and hardware, it's likely faster than CityHash64() on sufficiently long strings. It's slower than necessary on shorter strings, but we expect that case to be relatively unimportant. CityHashCrc128() and similar are variants of CityHash128() that depend on _mm_crc32_u64(), an intrinsic that compiles to a CRC32 instruction on some CPUs. However, none of the functions we provide are CRCs. CityHashCrc256() is a variant of CityHashCrc128() that also depends on _mm_crc32_u64(). It returns a 256-bit hash. All members of the CityHash family were designed with heavy reliance on previous work by Austin Appleby, Bob Jenkins, and others. For example, CityHash32 has many similarities with Murmur3a. Performance on long strings: 64-bit CPUs ======================================== We are most excited by the performance of CityHash64() and its variants on short strings, but long strings are interesting as well. CityHash is intended to be fast, under the constraint that it hash very well. For CPUs with the CRC32 instruction, CRC is speedy, but CRC wasn't designed as a hash function and shouldn't be used as one. CityHashCrc128() is not a CRC, but it uses the CRC32 machinery. On a single core of a 2.67GHz Intel Xeon X5550, CityHashCrc256 peaks at about 5 to 5.5 bytes/cycle. The other CityHashCrc functions are wrappers around CityHashCrc256 and should have similar performance on long strings. (CityHashCrc256 in v1.0.3 was even faster, but we decided it wasn't as thorough as it should be.) CityHash128 peaks at about 4.3 bytes/cycle. The fastest Murmur variant on that hardware, Murmur3F, peaks at about 2.4 bytes/cycle. We expect the peak speed of CityHash128 to dominate CityHash64, which is aimed more toward short strings or use in hash tables. For long strings, a new function by Bob Jenkins, SpookyHash, is just slightly slower than CityHash128 on Intel x86-64 CPUs, but noticeably faster on AMD x86-64 CPUs. For hashing long strings on AMD CPUs and/or CPUs without the CRC instruction, SpookyHash may be just as good or better than any of the CityHash variants. Performance on short strings: 64-bit CPUs ========================================= For short strings, e.g., most hash table keys, CityHash64 is faster than CityHash128, and probably faster than all the aforementioned functions, depending on the mix of string lengths. Here are a few results from that same hardware, where we (unrealistically) tested a single string length over and over again: Hash Results ------------------------------------------------------------------------------ CityHash64 v1.0.3 7ns for 1 byte, or 6ns for 8 bytes, or 9ns for 64 bytes Murmur2 (64-bit) 6ns for 1 byte, or 6ns for 8 bytes, or 15ns for 64 bytes Murmur3F 14ns for 1 byte, or 15ns for 8 bytes, or 23ns for 64 bytes We don't have CityHash64 benchmarks results for v1.1, but we expect the numbers to be similar. Performance: 32-bit CPUs ======================== CityHash32 is the newest variant of CityHash. It is intended for 32-bit hardware in general but has been mostly tested on x86. Our benchmarks suggest that Murmur3 is the nearest competitor to CityHash32 on x86. We don't know of anything faster that has comparable quality. The speed rankings in our testing: CityHash32 > Murmur3f > Murmur3a (for long strings), and CityHash32 > Murmur3a > Murmur3f (for short strings). Installation ============ We provide reference implementations of several CityHash functions, written in C++. The build system is based on autoconf. It defaults the C++ compiler flags to "-g -O2", which is probably slower than -O3 if you are using gcc. YMMV. On systems with gcc, we generally recommend: ./configure make all check CXXFLAGS="-g -O3" sudo make install Or, if your system has the CRC32 instruction, and you want to build everything: ./configure --enable-sse4.2 make all check CXXFLAGS="-g -O3 -msse4.2" sudo make install Note that our build system doesn't try to determine the appropriate compiler flag for enabling SSE4.2. For gcc it is "-msse4.2". The --enable-sse4.2 flag to the configure script controls whether citycrc.h is installed when you "make install." In general, picking the right compiler flags can be tricky, and may depend on your compiler, your hardware, and even how you plan to use the library. For generic information about how to configure this software, please try: ./configure --help Failing that, please work from city.cc and city*.h, as they contain all the necessary code. Usage ===== The above installation instructions will produce a single library. It will contain CityHash32(), CityHash64(), and CityHash128(), and their variants, and possibly CityHashCrc128(), CityHashCrc128WithSeed(), and CityHashCrc256(). The functions with Crc in the name are declared in citycrc.h; the rest are declared in city.h. Limitations =========== 1) CityHash32 is intended for little-endian 32-bit code, and everything else in the current version of CityHash is intended for little-endian 64-bit CPUs. All functions that don't use the CRC32 instruction should work in little-endian 32-bit or 64-bit code. CityHash should work on big-endian CPUs as well, but we haven't tested that very thoroughly yet. 2) CityHash is fairly complex. As a result of its complexity, it may not perform as expected on some compilers. For example, preliminary reports suggest that some Microsoft compilers compile CityHash to assembly that's 10-20% slower than it could be. Hash Quality ============ We like to test hash functions with SMHasher, among other things. SMHasher isn't perfect, but it seems to find almost any significant flaw. SMHasher is available at http://code.google.com/p/smhasher/ SMHasher is designed to pass a 32-bit seed to the hash functions it tests. No CityHash function is designed to work that way, so we adapt as follows: For our functions that accept a seed, we use the given seed directly (padded with zeroes); for our functions that don't accept a seed, we hash the concatenation of the given seed and the input string. The CityHash functions have the following flaws according to SMHasher: (1) CityHash64: none (2) CityHash64WithSeed: none (3) CityHash64WithSeeds: did not test (4) CityHash128: none (5) CityHash128WithSeed: none (6) CityHashCrc128: none (7) CityHashCrc128WithSeed: none (8) CityHashCrc256: none (9) CityHash32: none Some minor flaws in 32-bit and 64-bit functions are harmless, as we expect the primary use of these functions will be in hash tables. We may have gone slightly overboard in trying to please SMHasher and other similar tests, but we don't want anyone to choose a different hash function because of some minor issue reported by a quality test. For more information ==================== http://code.google.com/p/cityhash/ cityhash-discuss@googlegroups.com Please feel free to send us comments, questions, bug reports, or patches.dlt-daemon-2.18.6/src/core_dump_handler/cityhash_c/city-test.cc000066400000000000000000003053041377520261000244570ustar00rootroot00000000000000// Copyright (c) 2011 Google, Inc. // // 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. #include #include #include #include "city_c.h" #ifdef __SSE4_2__ #include "citycrc_c.h" #endif using std::cout; using std::cerr; using std::hex; static const uint64 k0 = 0xc3a5c85c97cb3127ULL; static const uint64 kSeed0 = 1234567; static const uint64 kSeed1 = k0; static const uint128 kSeed128 = {kSeed0, kSeed1}; static const int kDataSize = 1 << 20; static const int kTestSize = 300; static char data[kDataSize]; static int errors = 0; // global error count // Initialize data to pseudorandom values. void setup() { uint64 a = 9; uint64 b = 777; for (int i = 0; i < kDataSize; i++) { a = (a ^ (a >> 41)) * k0 + b; b = (b ^ (b >> 41)) * k0 + i; uint8 u = (uint8)(b >> 37); memcpy(data + i, &u, 1); // uint8 -> char } } #if 1 #define C(y) 0x ## y ## ULL static const uint64 testdata[kTestSize][15] = { {C(9ae16a3b2f90404f), C(75106db890237a4a), C(3feac5f636039766), C(3df09dfc64c09a2b), C(3cb540c392e51e29), C(6b56343feac0663), C(5b7bc50fd8e8ad92), C(3df09dfc64c09a2b), C(3cb540c392e51e29), C(6b56343feac0663), C(5b7bc50fd8e8ad92), C(889f555a0f5b2dc0), C(7767800902c8a8ce), C(bcd2a808f4cb4a44), C(e9024dba8f94f2f3)}, {C(75e9dee28ded761d), C(931992c1b14334c5), C(245eeb25ba2c172e), C(1290f0e8a5caa74d), C(ca4c6bf7583f5cda), C(e1d60d51632c536d), C(cbc54a1db641910a), C(1290f0e8a5caa74d), C(ca4c6bf7583f5cda), C(e1d60d51632c536d), C(cbc54a1db641910a), C(9866d68d17c2c08e), C(8d84ba63eb4d020a), C(df0ad99c78cbce44), C(7c98593ef62573ed)}, {C(75de892fdc5ba914), C(f89832e71f764c86), C(39a82df1f278a297), C(b4af8ae673acb930), C(992b7acb203d8885), C(57b533f3f8b94d50), C(bbb69298a5dcf1a1), C(b4af8ae673acb930), C(992b7acb203d8885), C(57b533f3f8b94d50), C(bbb69298a5dcf1a1), C(433495196af9ac4f), C(53445c0896ae1fe6), C(f7b939315f6fb56f), C(ac1b05e5a2e0335e)}, {C(69cfe9fca1cc683a), C(e65f2a81e19b8067), C(20575ea6370a9d14), C(8f52532fc6f005b7), C(4ebe60df371ec129), C(c6ef8a7f8deb8116), C(83df17e3c9bb9a67), C(8f52532fc6f005b7), C(4ebe60df371ec129), C(c6ef8a7f8deb8116), C(83df17e3c9bb9a67), C(6a0aaf51016e19cd), C(fb0d1e89f39dbf6a), C(c73095102872943a), C(405ea97456c28a75)}, {C(675b04c582a34966), C(53624b5ef8cd4f45), C(c412e0931ac8c9b1), C(798637e677c65a3), C(83e3b06adc4cd3ff), C(f3e76e8a7135852f), C(111e66cfbb05366d), C(798637e677c65a3), C(83e3b06adc4cd3ff), C(f3e76e8a7135852f), C(111e66cfbb05366d), C(29c4f84aa48e8682), C(b77a8685750c94d0), C(7cab65571969123f), C(fb1dbd79f68a8519)}, {C(46fa817397ea8b68), C(cc960c1c15ce2d20), C(e5f9f947bafb9e79), C(b342cdf0d7ac4b2a), C(66914d44b373b232), C(261194e76cb43966), C(45a0010190365048), C(b342cdf0d7ac4b2a), C(66914d44b373b232), C(261194e76cb43966), C(45a0010190365048), C(e2586947ca8eac83), C(6650daf2d9677cdc), C(2f9533d8f4951a9), C(a5bdc0f3edc4bd7b)}, {C(406e959cdffadec7), C(e80dc125dca28ed1), C(e5beb146d4b79a21), C(e66d5c1bb441541a), C(d14961bc1fd265a2), C(e4cc669d4fc0577f), C(abf4a51e36da2702), C(e66d5c1bb441541a), C(d14961bc1fd265a2), C(e4cc669d4fc0577f), C(abf4a51e36da2702), C(21236d12df338f75), C(54b8c4a5ad2ae4a4), C(202d50ef9c2d4465), C(5ecc6a128e51a797)}, {C(46663908b4169b95), C(4e7e90b5c426bf1d), C(dc660b58daaf8b2c), C(b298265ebd1bd55f), C(4a5f6838b55c0b08), C(fc003c97aa05d397), C(2fb5adad3380c3bc), C(b298265ebd1bd55f), C(4a5f6838b55c0b08), C(fc003c97aa05d397), C(2fb5adad3380c3bc), C(c46fd01d253b4a0b), C(4c799235c2a33188), C(7e21bc57487a11bf), C(e1392bb1994bd4f2)}, {C(f214b86cffeab596), C(5fccb0b132da564f), C(86e7aa8b4154b883), C(763529c8d4189ea8), C(860d77e7fef74ca3), C(3b1ba41191219b6b), C(722b25dfa6d0a04b), C(763529c8d4189ea8), C(860d77e7fef74ca3), C(3b1ba41191219b6b), C(722b25dfa6d0a04b), C(5f7b463094e22a91), C(75d6f57376b31bd7), C(d253c7f89efec8e6), C(efe56ac880a2b8a3)}, {C(eba670441d1a4f7d), C(eb6b272502d975fa), C(69f8d424d50c083e), C(313d49cb51b8cd2c), C(6e982d8b4658654a), C(dd59629a17e5492d), C(81cb23bdab95e30e), C(313d49cb51b8cd2c), C(6e982d8b4658654a), C(dd59629a17e5492d), C(81cb23bdab95e30e), C(1e6c3e6c454c774f), C(177655172666d5ea), C(9cc67e0d38d80886), C(36a2d64d7bc58d22)}, {C(172c17ff21dbf88d), C(1f5104e320f0c815), C(1e34e9f1fa63bcef), C(3506ae8fae368d2a), C(59fa2b2de5306203), C(67d1119dcfa6007e), C(1f7190c648ad9aef), C(3506ae8fae368d2a), C(59fa2b2de5306203), C(67d1119dcfa6007e), C(1f7190c648ad9aef), C(7e8b1e689137b637), C(cbe373368a31db3c), C(dbc79d82cd49c671), C(641399520c452c99)}, {C(5a0838df8a019b8c), C(73fc859b4952923), C(45e39daf153491bd), C(a9b91459a5fada46), C(de0fbf8800a2da3), C(21800e4b5af9dedb), C(517c3726ae0dbae7), C(a9b91459a5fada46), C(de0fbf8800a2da3), C(21800e4b5af9dedb), C(517c3726ae0dbae7), C(1ccffbd74acf9d66), C(cbb08cf95e7eda99), C(61444f09e2a29587), C(35c0d15745f96455)}, {C(8f42b1fbb2fc0302), C(5ae31626076ab6ca), C(b87f0cb67cb75d28), C(2498586ac2e1fab2), C(e683f9cbea22809a), C(a9728d0b2bbe377c), C(46baf5cae53dc39a), C(2498586ac2e1fab2), C(e683f9cbea22809a), C(a9728d0b2bbe377c), C(46baf5cae53dc39a), C(806f4352c99229e), C(d4643728fc71754a), C(998c1647976bc893), C(d8094fdc2d6bb032)}, {C(72085e82d70dcea9), C(32f502c43349ba16), C(5ebc98c3645a018f), C(c7fa762238fd90ac), C(8d03b5652d615677), C(a3f5226e51d42217), C(46d5010a7cae8c1e), C(c7fa762238fd90ac), C(8d03b5652d615677), C(a3f5226e51d42217), C(46d5010a7cae8c1e), C(4293122580db7f5f), C(3df6042f39c6d487), C(439124809cf5c90e), C(90b704e4f71d0ccf)}, {C(32b75fc2223b5032), C(246fff80eb230868), C(a6fdbc82c9aeecc0), C(c089498074167021), C(ab094a9f9ab81c23), C(4facf3d9466bcb03), C(57aa9c67938cf3eb), C(c089498074167021), C(ab094a9f9ab81c23), C(4facf3d9466bcb03), C(57aa9c67938cf3eb), C(79a769ca1c762117), C(9c8dee60337f87a8), C(dabf1b96535a3abb), C(f87e9fbb590ba446)}, {C(e1dd010487d2d647), C(12352858295d2167), C(acc5e9b6f6b02dbb), C(1c66ceea473413df), C(dc3f70a124b25a40), C(66a6dfe54c441cd8), C(b436dabdaaa37121), C(1c66ceea473413df), C(dc3f70a124b25a40), C(66a6dfe54c441cd8), C(b436dabdaaa37121), C(6d95aa6890f51674), C(42c6c0fc7ab3c107), C(83b9dfe082e76140), C(939cdbd3614d6416)}, {C(2994f9245194a7e2), C(b7cd7249d6db6c0c), C(2170a7d119c5c6c3), C(8505c996b70ee9fc), C(b92bba6b5d778eb7), C(4db4c57f3a7a4aee), C(3cfd441cb222d06f), C(8505c996b70ee9fc), C(b92bba6b5d778eb7), C(4db4c57f3a7a4aee), C(3cfd441cb222d06f), C(4d940313c96ac6bd), C(43762837c9ffac4b), C(480fcf58920722e3), C(4bbd1e1a1d06752f)}, {C(32e2ed6fa03e5b22), C(58baf09d7c71c62b), C(a9c599f3f8f50b5b), C(1660a2c4972d0fa1), C(1a1538d6b50a57c), C(8a5362485bbc9363), C(e8eec3c84fd9f2f8), C(1660a2c4972d0fa1), C(1a1538d6b50a57c), C(8a5362485bbc9363), C(e8eec3c84fd9f2f8), C(2562514461d373da), C(33857675fed52b4), C(e58d2a17057f1943), C(fe7d3f30820e4925)}, {C(37a72b6e89410c9f), C(139fec53b78cee23), C(4fccd8f0da7575c3), C(3a5f04166518ac75), C(f49afe05a44fc090), C(cb01b4713cfda4bd), C(9027bd37ffc0a5de), C(3a5f04166518ac75), C(f49afe05a44fc090), C(cb01b4713cfda4bd), C(9027bd37ffc0a5de), C(e15144d3ad46ec1b), C(736fd99679a5ae78), C(b3d7ed9ed0ddfe57), C(cef60639457867d7)}, {C(10836563cb8ff3a1), C(d36f67e2dfc085f7), C(edc1bb6a3dcba8df), C(bd4f3a0566df3bed), C(81fc8230c163dcbe), C(4168bc8417a8281b), C(7100c9459827c6a6), C(bd4f3a0566df3bed), C(81fc8230c163dcbe), C(4168bc8417a8281b), C(7100c9459827c6a6), C(21cad59eaf79e72f), C(61c8af6fb71469f3), C(b0dfc42ce4f578b), C(33ea34ccea305d4e)}, {C(4dabcb5c1d382e5c), C(9a868c608088b7a4), C(7b2b6c389b943be5), C(c914b925ab69fda0), C(6bafe864647c94d7), C(7a48682dd4afa22), C(40fe01210176ba10), C(c914b925ab69fda0), C(6bafe864647c94d7), C(7a48682dd4afa22), C(40fe01210176ba10), C(88dd28f33ec31388), C(c6db60abf1d45381), C(7b94c447298824d5), C(6b2a5e05ad0b9fc0)}, {C(296afb509046d945), C(c38fe9eb796bd4be), C(d7b17535df110279), C(dd2482b87d1ade07), C(662785d2e3e78ddf), C(eae39994375181bb), C(9994500c077ee1db), C(dd2482b87d1ade07), C(662785d2e3e78ddf), C(eae39994375181bb), C(9994500c077ee1db), C(a275489f8c6bb289), C(30695ea31df1a369), C(1aeeb31802d701b5), C(7799d5a6d5632838)}, {C(f7c0257efde772ea), C(af6af9977ecf7bff), C(1cdff4bd07e8d973), C(fab1f4acd2cd4ab4), C(b4e19ba52b566bd), C(7f1db45725fe2881), C(70276ff8763f8396), C(fab1f4acd2cd4ab4), C(b4e19ba52b566bd), C(7f1db45725fe2881), C(70276ff8763f8396), C(1b0f2b546dddd16b), C(aa066984b5fd5144), C(7c3f9386c596a5a8), C(e5befdb24b665d5f)}, {C(61e021c8da344ba1), C(cf9c720676244755), C(354ffa8e9d3601f6), C(44e40a03093fbd92), C(bda9481cc5b93cae), C(986b589cbc0cf617), C(210f59f074044831), C(44e40a03093fbd92), C(bda9481cc5b93cae), C(986b589cbc0cf617), C(210f59f074044831), C(ac32cbbb6f50245a), C(afa6f712efb22075), C(47289f7af581719f), C(31b6e75d3aa0e54b)}, {C(c0a86ed83908560b), C(440c8b6f97bd1749), C(a99bf2891726ea93), C(ac0c0b84df66df9d), C(3ee2337b437eb264), C(8a341daed9a25f98), C(cc665499aa38c78c), C(ac0c0b84df66df9d), C(3ee2337b437eb264), C(8a341daed9a25f98), C(cc665499aa38c78c), C(af7275299d79a727), C(874fa8434b45d0e), C(ca7b67388950dd33), C(2db5cd3675ec58f7)}, {C(35c9cf87e4accbf3), C(2267eb4d2191b2a3), C(80217695666b2c9), C(cd43a24abbaae6d), C(a88abf0ea1b2a8ff), C(e297ff01427e2a9d), C(935d545695b2b41d), C(cd43a24abbaae6d), C(a88abf0ea1b2a8ff), C(e297ff01427e2a9d), C(935d545695b2b41d), C(6accd4dbcb52e849), C(261295acb662fd49), C(f9d91f1ac269a8a2), C(5e45f39df355e395)}, {C(e74c366b3091e275), C(522e657c5da94b06), C(ca9afa806f1a54ac), C(b545042f67929471), C(90d10e75ed0e75d8), C(3ea60f8f158df77e), C(8863eff3c2d670b7), C(b545042f67929471), C(90d10e75ed0e75d8), C(3ea60f8f158df77e), C(8863eff3c2d670b7), C(5799296e97f144a7), C(1d6e517c12a88271), C(da579e9e1add90ef), C(942fb4cdbc3a4da)}, {C(a3f2ca45089ad1a6), C(13f6270fe56fbce4), C(1f93a534bf03e705), C(aaea14288ae2d90c), C(1be3cd51ef0f15e8), C(e8b47c84d5a4aac1), C(297d27d55b766782), C(aaea14288ae2d90c), C(1be3cd51ef0f15e8), C(e8b47c84d5a4aac1), C(297d27d55b766782), C(e922d1d8bb2afd0), C(b4481c4fa2e7d8d5), C(691e21538af794d5), C(9bd4fb0a53962a72)}, {C(e5181466d8e60e26), C(cf31f3a2d582c4f3), C(d9cee87cb71f75b2), C(4750ca6050a2d726), C(d6e6dd8940256849), C(f3b3749fdab75b0), C(c55d8a0f85ba0ccf), C(4750ca6050a2d726), C(d6e6dd8940256849), C(f3b3749fdab75b0), C(c55d8a0f85ba0ccf), C(47f134f9544c6da6), C(e1cdd9cb74ad764), C(3ce2d096d844941e), C(321fe62f608d2d4e)}, {C(fb528a8dd1e48ad7), C(98c4fd149c8a63dd), C(4abd8fc3377ae1f), C(d7a9304abbb47cc5), C(7f2b9a27aa57f99), C(353ab332d4ef9f18), C(47d56b8d6c8cf578), C(d7a9304abbb47cc5), C(7f2b9a27aa57f99), C(353ab332d4ef9f18), C(47d56b8d6c8cf578), C(df55f58ae09f311f), C(dba9511784fa86e3), C(c43ce0288858a47e), C(62971e94270b78e1)}, {C(da6d2b7ea9d5f9b6), C(57b11153ee3b4cc8), C(7d3bd1256037142f), C(90b16ff331b719b5), C(fc294e7ad39e01e6), C(d2145386bab41623), C(7045a63d44d76011), C(90b16ff331b719b5), C(fc294e7ad39e01e6), C(d2145386bab41623), C(7045a63d44d76011), C(a232222ed0fe2fa4), C(e6c17dff6c323a8a), C(bbcb079be123ac6c), C(4121fe2c5de7d850)}, {C(61d95225bc2293e), C(f6c52cb6be9889a8), C(91a0667a7ed6a113), C(441133d221486a3d), C(fb9c5a40e19515b), C(6c967b6c69367c2d), C(145bd9ef258c4099), C(441133d221486a3d), C(fb9c5a40e19515b), C(6c967b6c69367c2d), C(145bd9ef258c4099), C(a0197657160c686e), C(91ada0871c23f379), C(2fd74fceccb5c80c), C(bf04f24e2dc17913)}, {C(81247c01ab6a9cc1), C(fbccea953e810636), C(ae18965000c31be0), C(15bb46383daec2a5), C(716294063b4ba089), C(f3bd691ce02c3014), C(14ccaad685a20764), C(15bb46383daec2a5), C(716294063b4ba089), C(f3bd691ce02c3014), C(14ccaad685a20764), C(5db25914279d6f24), C(25c451fce3b2ed06), C(e6bacb43ba1ddb9a), C(6d77493a2e6fd76)}, {C(c17f3ebd3257cb8b), C(e9e68c939c118c8d), C(72a5572be35bfc1b), C(f6916c341cb31f2a), C(591da1353ee5f31c), C(f1313c98a836b407), C(e0b8473eada48cd1), C(f6916c341cb31f2a), C(591da1353ee5f31c), C(f1313c98a836b407), C(e0b8473eada48cd1), C(ac5c2fb40b09ba46), C(3a3e8a9344eb6548), C(3bf9349a9d8483a6), C(c30dd0d9b15e92d0)}, {C(9802438969c3043b), C(6cd07575c948dd82), C(83e26b6830ea8640), C(d52f1fa190576961), C(11d182e4f0d419cc), C(5d9ccf1b56617424), C(c8a16debb585e452), C(d52f1fa190576961), C(11d182e4f0d419cc), C(5d9ccf1b56617424), C(c8a16debb585e452), C(2158a752d2686d40), C(b93c1fdf54789e8c), C(3a9a435627b2a30b), C(de6e5e551e7e5ad5)}, {C(3dd8ed248a03d754), C(d8c1fcf001cb62e0), C(87a822141ed64927), C(4bfaf6fd26271f47), C(aefeae8222ad3c77), C(cfb7b24351a60585), C(8678904e9e890b8f), C(4bfaf6fd26271f47), C(aefeae8222ad3c77), C(cfb7b24351a60585), C(8678904e9e890b8f), C(968dd1aa4d7dcf31), C(7ac643b015007a39), C(d1e1bac3d94406ec), C(babfa52474a404fa)}, {C(c5bf48d7d3e9a5a3), C(8f0249b5c5996341), C(c6d2c8a606f45125), C(fd1779db740e2c48), C(1950ef50fefab3f8), C(e4536426a6196809), C(699556c502a01a6a), C(fd1779db740e2c48), C(1950ef50fefab3f8), C(e4536426a6196809), C(699556c502a01a6a), C(2f49d268bb57b946), C(b205baa6c66ebfa5), C(ab91ebe4f48b0da1), C(c7e0718ccc360328)}, {C(bc4a21d00cf52288), C(28df3eb5a533fa87), C(6081bbc2a18dd0d), C(8eed355d219e58b9), C(2d7b9f1a3d645165), C(5758d1aa8d85f7b2), C(9c90c65920041dff), C(8eed355d219e58b9), C(2d7b9f1a3d645165), C(5758d1aa8d85f7b2), C(9c90c65920041dff), C(3c5c4ea46645c7f1), C(346879ecc0e2eb90), C(8434fec461bb5a0f), C(783ccede50ef5ce9)}, {C(172c8674913ff413), C(1815a22400e832bf), C(7e011f9467a06650), C(161be43353a31dd0), C(79a8afddb0642ac3), C(df43af54e3e16709), C(6e12553a75b43f07), C(161be43353a31dd0), C(79a8afddb0642ac3), C(df43af54e3e16709), C(6e12553a75b43f07), C(3ac1b1121e87d023), C(2d47d33df7b9b027), C(e2d3f71f4e817ff5), C(70b3a11ca85f8a39)}, {C(17a361dbdaaa7294), C(c67d368223a3b83c), C(f49cf8d51ab583d2), C(666eb21e2eaa596), C(778f3e1b6650d56), C(3f6be451a668fe2d), C(5452892b0b101388), C(666eb21e2eaa596), C(778f3e1b6650d56), C(3f6be451a668fe2d), C(5452892b0b101388), C(cc867fceaeabdb95), C(f238913c18aaa101), C(f5236b44f324cea1), C(c507cc892ff83dd1)}, {C(5cc268bac4bd55f), C(232717a35d5b2f1), C(38da1393365c961d), C(2d187f89c16f7b62), C(4eb504204fa1be8), C(222bd53d2efe5fa), C(a4dcd6d721ddb187), C(2d187f89c16f7b62), C(4eb504204fa1be8), C(222bd53d2efe5fa), C(a4dcd6d721ddb187), C(d86bbe67666eca70), C(c8bbae99d8e6429f), C(41dac4ceb2cb6b10), C(2f90c331755f6c48)}, {C(db04969cc06547f1), C(fcacc8a75332f120), C(967ccec4ed0c977e), C(ac5d1087e454b6cd), C(c1f8b2e284d28f6c), C(cc3994f4a9312cfa), C(8d61606dbc4e060d), C(ac5d1087e454b6cd), C(c1f8b2e284d28f6c), C(cc3994f4a9312cfa), C(8d61606dbc4e060d), C(17315af3202a1307), C(850775145e01163a), C(96f10e7357f930d2), C(abf27049cf07129)}, {C(25bd8d3ca1b375b2), C(4ad34c2c865816f9), C(9be30ad32f8f28aa), C(7755ea02dbccad6a), C(cb8aaf8886247a4a), C(8f6966ce7ea1b6e6), C(3f2863090fa45a70), C(7755ea02dbccad6a), C(cb8aaf8886247a4a), C(8f6966ce7ea1b6e6), C(3f2863090fa45a70), C(1e46d73019c9fb06), C(af37f39351616f2c), C(657efdfff20ea2ed), C(93bdf4c58ada3ecb)}, {C(166c11fbcbc89fd8), C(cce1af56c48a48aa), C(78908959b8ede084), C(19032925ba2c951a), C(a53ed6e81b67943a), C(edc871a9e8ef4bdf), C(ae66cf46a8371aba), C(19032925ba2c951a), C(a53ed6e81b67943a), C(edc871a9e8ef4bdf), C(ae66cf46a8371aba), C(a37b97790fe75861), C(eda28c8622708b98), C(3f0a23509d3d5c9d), C(5787b0e7976c97cf)}, {C(3565bcc4ca4ce807), C(ec35bfbe575819d5), C(6a1f690d886e0270), C(1ab8c584625f6a04), C(ccfcdafb81b572c4), C(53b04ba39fef5af9), C(64ce81828eefeed4), C(1ab8c584625f6a04), C(ccfcdafb81b572c4), C(53b04ba39fef5af9), C(64ce81828eefeed4), C(131af99997fc662c), C(8d9081192fae833c), C(2828064791cb2eb), C(80554d2e8294065c)}, {C(b7897fd2f274307d), C(6d43a9e5dd95616d), C(31a2218e64d8fce0), C(664e581fc1cf769b), C(415110942fc97022), C(7a5d38fee0bfa763), C(dc87ddb4d7495b6c), C(664e581fc1cf769b), C(415110942fc97022), C(7a5d38fee0bfa763), C(dc87ddb4d7495b6c), C(7c3b66372e82e64b), C(1c89c0ceeeb2dd1), C(dad76d2266214dbd), C(744783486e43cc61)}, {C(aba98113ab0e4a16), C(287f883aede0274d), C(3ecd2a607193ba3b), C(e131f6cc9e885c28), C(b399f98d827e4958), C(6eb90c8ed6c9090c), C(ec89b378612a2b86), C(e131f6cc9e885c28), C(b399f98d827e4958), C(6eb90c8ed6c9090c), C(ec89b378612a2b86), C(cfc0e126e2f860c0), C(a9a8ab5dec95b1c), C(d06747f372f7c733), C(fbd643f943a026d3)}, {C(17f7796e0d4b636c), C(ddba5551d716137b), C(65f9735375df1ada), C(a39e946d02e14ec2), C(1c88cc1d3822a193), C(663f8074a5172bb4), C(8ad2934942e4cb9c), C(a39e946d02e14ec2), C(1c88cc1d3822a193), C(663f8074a5172bb4), C(8ad2934942e4cb9c), C(3da03b033a95f16c), C(54a52f1932a1749d), C(779eeb734199bc25), C(359ce8c8faccc57b)}, {C(33c0128e62122440), C(b23a588c8c37ec2b), C(f2608199ca14c26a), C(acab0139dc4f36df), C(9502b1605ca1345a), C(32174ef1e06a5e9c), C(d824b7869258192b), C(acab0139dc4f36df), C(9502b1605ca1345a), C(32174ef1e06a5e9c), C(d824b7869258192b), C(681d021b52064762), C(30b6c735f80ac371), C(6a12d8d7f78896b3), C(157111657a972144)}, {C(988bc5d290b97aef), C(6754bb647eb47666), C(44b5cf8b5b8106a8), C(a1c5ba961937f723), C(32d6bc7214dfcb9b), C(6863397e0f4c6758), C(e644bcb87e3eef70), C(a1c5ba961937f723), C(32d6bc7214dfcb9b), C(6863397e0f4c6758), C(e644bcb87e3eef70), C(bf25ae22e7aa7c97), C(f5f3177da5756312), C(56a469cb0dbb58cd), C(5233184bb6130470)}, {C(23c8c25c2ab72381), C(d6bc672da4175fba), C(6aef5e6eb4a4eb10), C(3df880c945e68aed), C(5e08a75e956d456f), C(f984f088d1a322d7), C(7d44a1b597b7a05e), C(3df880c945e68aed), C(5e08a75e956d456f), C(f984f088d1a322d7), C(7d44a1b597b7a05e), C(cbd7d157b7fcb020), C(2e2945e90749c2aa), C(a86a13c934d8b1bb), C(fbe3284bb4eab95f)}, {C(450fe4acc4ad3749), C(3111b29565e4f852), C(db570fc2abaf13a9), C(35107d593ba38b22), C(fd8212a125073d88), C(72805d6e015bfacf), C(6b22ae1a29c4b853), C(35107d593ba38b22), C(fd8212a125073d88), C(72805d6e015bfacf), C(6b22ae1a29c4b853), C(df2401f5c3c1b633), C(c72307e054c81c8f), C(3efbfe65bd2922c0), C(b4f632e240b3190c)}, {C(48e1eff032d90c50), C(dee0fe333d962b62), C(c845776990c96775), C(8ea71758346b71c9), C(d84258cab79431fd), C(af566b4975cce10a), C(5c5c7e70a91221d2), C(8ea71758346b71c9), C(d84258cab79431fd), C(af566b4975cce10a), C(5c5c7e70a91221d2), C(c33202c7be49ea6f), C(e8ade53b6cbf4caf), C(102ea04fc82ce320), C(c1f7226614715e5e)}, {C(c048604ba8b6c753), C(21ea6d24b417fdb6), C(4e40a127ad2d6834), C(5234231bf173c51), C(62319525583eaf29), C(87632efa9144cc04), C(1749de70c8189067), C(5234231bf173c51), C(62319525583eaf29), C(87632efa9144cc04), C(1749de70c8189067), C(29672240923e8207), C(11dd247a815f6d0d), C(8d64e16922487ed0), C(9fa6f45d50d83627)}, {C(67ff1cbe469ebf84), C(3a828ac9e5040eb0), C(85bf1ad6b363a14b), C(2fc6c0783390d035), C(ef78307f5be5524e), C(a46925b7a1a77905), C(fea37470f9a51514), C(2fc6c0783390d035), C(ef78307f5be5524e), C(a46925b7a1a77905), C(fea37470f9a51514), C(9d6504cf6d3947ce), C(174cc006b8e96e7), C(d653a06d8a009836), C(7d22b5399326a76c)}, {C(b45c7536bd7a5416), C(e2d17c16c4300d3c), C(b70b641138765ff5), C(a5a859ab7d0ddcfc), C(8730164a0b671151), C(af93810c10348dd0), C(7256010c74f5d573), C(a5a859ab7d0ddcfc), C(8730164a0b671151), C(af93810c10348dd0), C(7256010c74f5d573), C(e22a335be6cd49f3), C(3bc9c8b40c9c397a), C(18da5c08e28d3fb5), C(f58ea5a00404a5c9)}, {C(215c2eaacdb48f6f), C(33b09acf1bfa2880), C(78c4e94ba9f28bf), C(981b7219224443d1), C(1f476fc4344d7bba), C(abad36e07283d3a5), C(831bf61190eaaead), C(981b7219224443d1), C(1f476fc4344d7bba), C(abad36e07283d3a5), C(831bf61190eaaead), C(4c90729f62432254), C(2ffadc94c89f47b3), C(677e790b43d20e9a), C(bb0a1686e7c3ae5f)}, {C(241baf16d80e0fe8), C(b6b3c5b53a3ce1d), C(6ae6b36209eecd70), C(a560b6a4aa3743a4), C(b3e04f202b7a99b), C(3b3b1573f4c97d9f), C(ccad8715a65af186), C(a560b6a4aa3743a4), C(b3e04f202b7a99b), C(3b3b1573f4c97d9f), C(ccad8715a65af186), C(d0c93a838b0c37e7), C(7150aa1be7eb1aad), C(755b1e60b84d8d), C(51916e77b1b05ba9)}, {C(d10a9743b5b1c4d1), C(f16e0e147ff9ccd6), C(fbd20a91b6085ed3), C(43d309eb00b771d5), C(a6d1f26105c0f61b), C(d37ad62406e5c37e), C(75d9b28c717c8cf7), C(43d309eb00b771d5), C(a6d1f26105c0f61b), C(d37ad62406e5c37e), C(75d9b28c717c8cf7), C(8f5f118b425b57cd), C(5d806318613275f3), C(8150848bcf89d009), C(d5531710d53e1462)}, {C(919ef9e209f2edd1), C(684c33fb726a720a), C(540353f94e8033), C(26da1a143e7d4ec4), C(55095eae445aacf4), C(31efad866d075938), C(f9b580cff4445f94), C(26da1a143e7d4ec4), C(55095eae445aacf4), C(31efad866d075938), C(f9b580cff4445f94), C(b1bea6b8716d9c48), C(9ed2a3df4a15dc53), C(11f1be58843eb8e9), C(d9899ecaaef3c77c)}, {C(b5f9519b6c9280b), C(7823a2fe2e103803), C(d379a205a3bd4660), C(466ec55ee4b4302a), C(714f1b9985deeaf0), C(728595f26e633cf7), C(25ecd0738e1bee2b), C(466ec55ee4b4302a), C(714f1b9985deeaf0), C(728595f26e633cf7), C(25ecd0738e1bee2b), C(db51771ad4778278), C(763e5742ac55639e), C(df040e92d38aa785), C(5df997d298499bf1)}, {C(77a75e89679e6757), C(25d31fee616b5dd0), C(d81f2dfd08890060), C(7598df8911dd40a4), C(3b6dda517509b41b), C(7dae29d248dfffae), C(6697c427733135f), C(7598df8911dd40a4), C(3b6dda517509b41b), C(7dae29d248dfffae), C(6697c427733135f), C(834d6c0444c90899), C(c790675b3cd53818), C(28bb4c996ecadf18), C(92c648513e6e6064)}, {C(9d709e1b086aabe2), C(4d6d6a6c543e3fec), C(df73b01acd416e84), C(d54f613658e35418), C(fcc88fd0567afe77), C(d18f2380980db355), C(ec3896137dfbfa8b), C(d54f613658e35418), C(fcc88fd0567afe77), C(d18f2380980db355), C(ec3896137dfbfa8b), C(eb48dbd9a1881600), C(ca7bd7415ab43ca9), C(e6c5a362919e2351), C(2f4e4bd2d5267c21)}, {C(91c89971b3c20a8a), C(87b82b1d55780b5), C(bc47bb80dfdaefcd), C(87e11c0f44454863), C(2df1aedb5871cc4b), C(ba72fd91536382c8), C(52cebef9e6ea865d), C(87e11c0f44454863), C(2df1aedb5871cc4b), C(ba72fd91536382c8), C(52cebef9e6ea865d), C(5befc3fc66bc7fc5), C(b128bbd735a89061), C(f8f500816fa012b3), C(f828626c9612f04)}, {C(16468c55a1b3f2b4), C(40b1e8d6c63c9ff4), C(143adc6fee592576), C(4caf4deeda66a6ee), C(264720f6f35f7840), C(71c3aef9e59e4452), C(97886ca1cb073c55), C(4caf4deeda66a6ee), C(264720f6f35f7840), C(71c3aef9e59e4452), C(97886ca1cb073c55), C(16155fef16fc08e8), C(9d0c1d1d5254139a), C(246513bf2ac95ee2), C(22c8440f59925034)}, {C(1a2bd6641870b0e4), C(e4126e928f4a7314), C(1e9227d52aab00b2), C(d82489179f16d4e8), C(a3c59f65e2913cc5), C(36cbaecdc3532b3b), C(f1b454616cfeca41), C(d82489179f16d4e8), C(a3c59f65e2913cc5), C(36cbaecdc3532b3b), C(f1b454616cfeca41), C(99393e31e3eefc16), C(3ca886eac5754cdf), C(c11776fc3e4756dd), C(ca118f7059198ba)}, {C(1d2f92f23d3e811a), C(e0812edbcd475412), C(92d2d6ad29c05767), C(fd7feb3d2956875e), C(d7192a886b8b01b6), C(16e71dba55f5b85a), C(93dabd3ff22ff144), C(fd7feb3d2956875e), C(d7192a886b8b01b6), C(16e71dba55f5b85a), C(93dabd3ff22ff144), C(14ff0a5444c272c9), C(fb024d3bb8d915c2), C(1bc3229a94cab5fe), C(6f6f1fb3c0dccf09)}, {C(a47c08255da30ca8), C(cf6962b7353f4e68), C(2808051ea18946b1), C(b5b472960ece11ec), C(13935c99b9abbf53), C(3e80d95687f0432c), C(3516ab536053be5), C(b5b472960ece11ec), C(13935c99b9abbf53), C(3e80d95687f0432c), C(3516ab536053be5), C(748ce6a935755e20), C(2961b51d61b0448c), C(864624113aae88d2), C(a143805366f91338)}, {C(efb3b0262c9cd0c), C(1273901e9e7699b3), C(58633f4ad0dcd5bb), C(62e33ba258712d51), C(fa085c15d779c0e), C(2c15d9142308c5ad), C(feb517011f27be9e), C(62e33ba258712d51), C(fa085c15d779c0e), C(2c15d9142308c5ad), C(feb517011f27be9e), C(1b2b049793b9eedb), C(d26be505fabc5a8f), C(adc483e42a5c36c5), C(c81ff37d56d3b00b)}, {C(5029700a7773c3a4), C(d01231e97e300d0f), C(397cdc80f1f0ec58), C(e4041579de57c879), C(bbf513cb7bab5553), C(66ad0373099d5fa0), C(44bb6b21b87f3407), C(e4041579de57c879), C(bbf513cb7bab5553), C(66ad0373099d5fa0), C(44bb6b21b87f3407), C(a8108c43b4daba33), C(c0b5308c311e865e), C(cdd265ada48f6fcf), C(efbc1dae0a95ac0a)}, {C(71c8287225d96c9a), C(eb836740524735c4), C(4777522d0e09846b), C(16fde90d02a1343b), C(ad14e0ed6e165185), C(8df6e0b2f24085dd), C(caa8a47292d50263), C(16fde90d02a1343b), C(ad14e0ed6e165185), C(8df6e0b2f24085dd), C(caa8a47292d50263), C(a020413ba660359d), C(9de401413f7c8a0c), C(20bfb965927a7c85), C(b52573e5f817ae27)}, {C(4e8b9ad9347d7277), C(c0f195eeee7641cf), C(dbd810bee1ad5e50), C(8459801016414808), C(6fbf75735353c2d1), C(6e69aaf2d93ed647), C(85bb5b90167cce5e), C(8459801016414808), C(6fbf75735353c2d1), C(6e69aaf2d93ed647), C(85bb5b90167cce5e), C(39d79ee490d890cc), C(ac9f31f7ec97deb0), C(3bdc1cae4ed46504), C(eb5c63cfaee05622)}, {C(1d5218d6ee2e52ab), C(cb25025c4daeff3b), C(aaf107566f31bf8c), C(aad20d70e231582b), C(eab92d70d9a22e54), C(cc5ab266375580c0), C(85091463e3630dce), C(aad20d70e231582b), C(eab92d70d9a22e54), C(cc5ab266375580c0), C(85091463e3630dce), C(b830b617a4690089), C(9dacf13cd76f13cf), C(d47cc5224265c68f), C(f04690880202b002)}, {C(162360be6c293c8b), C(ff672b4a831953c8), C(dda57487ab6f78b5), C(38a42e0db55a4275), C(585971da56bb56d6), C(cd957009adc1482e), C(d6a96021e427567d), C(38a42e0db55a4275), C(585971da56bb56d6), C(cd957009adc1482e), C(d6a96021e427567d), C(8e2b1a5a63cd96fe), C(426ef8ce033d722d), C(c4d1c3d8acdda5f), C(4e694c9be38769b2)}, {C(31459914f13c8867), C(ef96f4342d3bef53), C(a4e944ee7a1762fc), C(3526d9b950a1d910), C(a58ba01135bca7c0), C(cbad32e86d60a87c), C(adde1962aad3d730), C(3526d9b950a1d910), C(a58ba01135bca7c0), C(cbad32e86d60a87c), C(adde1962aad3d730), C(55faade148929704), C(bfc06376c72a2968), C(97762698b87f84be), C(117483d4828cbaf7)}, {C(6b4e8fca9b3aecff), C(3ea0a33def0a296c), C(901fcb5fe05516f5), C(7c909e8cd5261727), C(c5acb3d5fbdc832e), C(54eff5c782ad3cdd), C(9d54397f3caf5bfa), C(7c909e8cd5261727), C(c5acb3d5fbdc832e), C(54eff5c782ad3cdd), C(9d54397f3caf5bfa), C(6b53ce24c4fc3092), C(2789abfdd4c9a14d), C(94d6a2261637276c), C(648aa4a2a1781f25)}, {C(dd3271a46c7aec5d), C(fb1dcb0683d711c3), C(240332e9ebe5da44), C(479f936b6d496dca), C(dc2dc93d63739d4a), C(27e4151c3870498c), C(3a3a22ba512d13ba), C(479f936b6d496dca), C(dc2dc93d63739d4a), C(27e4151c3870498c), C(3a3a22ba512d13ba), C(5da92832f96d3cde), C(439b9ad48c4e7644), C(d2939279030accd9), C(6829f920e2950dbe)}, {C(109b226238347d6e), C(e27214c32c43b7e7), C(eb71b0afaf0163ef), C(464f1adf4c68577), C(acf3961e1c9d897f), C(985b01ab89b41fe1), C(6972d6237390aac0), C(464f1adf4c68577), C(acf3961e1c9d897f), C(985b01ab89b41fe1), C(6972d6237390aac0), C(122d89898e256a0e), C(ac830561bd8be599), C(5744312574fbf0ad), C(7bff7f480a924ce9)}, {C(cc920608aa94cce4), C(d67efe9e097bce4f), C(5687727c2c9036a9), C(8af42343888843c), C(191433ffcbab7800), C(7eb45fc94f88a71), C(31bc5418ffb88fa8), C(8af42343888843c), C(191433ffcbab7800), C(7eb45fc94f88a71), C(31bc5418ffb88fa8), C(4b53a37d8f446cb7), C(a6a7dfc757a60d28), C(a074be7bacbc013a), C(cc6db5f270de7adc)}, {C(901ff46f22283dbe), C(9dd59794d049a066), C(3c7d9c3b0e77d2c6), C(dc46069eec17bfdf), C(cacb63fe65d9e3e), C(362fb57287d530c6), C(5854a4fbe1762d9), C(dc46069eec17bfdf), C(cacb63fe65d9e3e), C(362fb57287d530c6), C(5854a4fbe1762d9), C(3197427495021efc), C(5fabf34386aa4205), C(ca662891de36212), C(21f603e4d39bca84)}, {C(11b3bdda68b0725d), C(2366bf0aa97a00bd), C(55dc4a4f6bf47e2b), C(69437142dae5a255), C(f2980cc4816965ac), C(dbbe76ba1d9adfcf), C(49c18025c0a8b0b5), C(69437142dae5a255), C(f2980cc4816965ac), C(dbbe76ba1d9adfcf), C(49c18025c0a8b0b5), C(fe25c147c9001731), C(38b99cad0ca30c81), C(c7ff06ac47eb950), C(a10f92885a6b3c02)}, {C(9f5f03e84a40d232), C(1151a9ff99da844), C(d6f2e7c559ac4657), C(5e351e20f30377bf), C(91b3805daf12972c), C(94417fa6452a265e), C(bfa301a26765a7c), C(5e351e20f30377bf), C(91b3805daf12972c), C(94417fa6452a265e), C(bfa301a26765a7c), C(6924e2a053297d13), C(ed4a7904ed30d77e), C(d734abaad66d6eab), C(ce373e6c09e6e8a1)}, {C(39eeff4f60f439be), C(1f7559c118517c70), C(6139d2492237a36b), C(fd39b7642cecf78f), C(104f1af4e9201df5), C(ab1a3cc7eaeab609), C(cee3363f210a3d8b), C(fd39b7642cecf78f), C(104f1af4e9201df5), C(ab1a3cc7eaeab609), C(cee3363f210a3d8b), C(51490f65fe56c884), C(6a8c8322cda993c), C(1f90609a017de1f0), C(9f3acea480a41edf)}, {C(9b9e0126fe4b8b04), C(6a6190d520886c41), C(69640b27c16b3ed8), C(18865ff87619fd8f), C(dec5293e665663d8), C(ea07c345872d3201), C(6fce64da038a17ab), C(18865ff87619fd8f), C(dec5293e665663d8), C(ea07c345872d3201), C(6fce64da038a17ab), C(ad48f3c826c6a83e), C(70a1ff080a4da737), C(ecdac686c7d7719), C(700338424b657470)}, {C(3ec4b8462b36df47), C(ff8de4a1cbdb7e37), C(4ede0449884716ac), C(b5f630ac75a8ce03), C(7cf71ae74fa8566a), C(e068f2b4618df5d), C(369df952ad3fd0b8), C(b5f630ac75a8ce03), C(7cf71ae74fa8566a), C(e068f2b4618df5d), C(369df952ad3fd0b8), C(5e1ba38fea018eb6), C(5ea5edce48e3da30), C(9b3490c941069dcb), C(e17854a44cc2fff)}, {C(5e3fd9298fe7009f), C(d2058a44222d5a1d), C(cc25df39bfeb005c), C(1b0118c5c60a99c7), C(6ae919ef932301b8), C(cde25defa089c2fc), C(c2a3776e3a7716c4), C(1b0118c5c60a99c7), C(6ae919ef932301b8), C(cde25defa089c2fc), C(c2a3776e3a7716c4), C(2557bf65fb26269e), C(b2edabba58f2ae4f), C(264144e9f0e632cb), C(ad6481273c979566)}, {C(7504ecb4727b274e), C(f698cfed6bc11829), C(71b62c425ecd348e), C(2a5e555fd35627db), C(55d5da439c42f3b8), C(a758e451732a1c6f), C(18caa6b46664b484), C(2a5e555fd35627db), C(55d5da439c42f3b8), C(a758e451732a1c6f), C(18caa6b46664b484), C(6ec1c7d1524bbad7), C(1cc3531dc422529d), C(61a6eeb29c0e5110), C(9cc8652016784a6a)}, {C(4bdedc104d5eaed5), C(531c4bb4fd721e5d), C(1d860834e94a219f), C(1944ec723253392b), C(7ea6aa6a2f278ea5), C(5ff786af8113b3d5), C(194832eb9b0b8d0f), C(1944ec723253392b), C(7ea6aa6a2f278ea5), C(5ff786af8113b3d5), C(194832eb9b0b8d0f), C(56ab0396ed73fd38), C(2c88725b3dfbf89d), C(7ff57adf6275c816), C(b32f7630bcdb218)}, {C(da0b4a6fb26a4748), C(8a3165320ae1af74), C(4803664ee3d61d09), C(81d90ddff0d00fdb), C(2c8c7ce1173b5c77), C(18c6b6c8d3f91dfb), C(415d5cbbf7d9f717), C(81d90ddff0d00fdb), C(2c8c7ce1173b5c77), C(18c6b6c8d3f91dfb), C(415d5cbbf7d9f717), C(b683e956f1eb3235), C(43166dde2b64d11f), C(f9689c90f5aad771), C(ca0ebc253c2eec38)}, {C(bad6dd64d1b18672), C(6d4c4b91c68bd23f), C(d8f1507176822db7), C(381068e0f65f708b), C(b4f3762e451b12a6), C(6d61ed2f6d4e741), C(8b3b9df537b91a2c), C(381068e0f65f708b), C(b4f3762e451b12a6), C(6d61ed2f6d4e741), C(8b3b9df537b91a2c), C(b0759e599a91575c), C(9e7adbcc77212239), C(cf0eba98436555fe), C(b1fcc9c42c4cd1e6)}, {C(98da3fe388d5860e), C(14a9fda8b3adb103), C(d85f5f798637994b), C(6e8e8ff107799274), C(24a2ef180891b531), C(c0eaf33a074bcb9d), C(1fa399a82974e17e), C(6e8e8ff107799274), C(24a2ef180891b531), C(c0eaf33a074bcb9d), C(1fa399a82974e17e), C(e7c116bef933725d), C(859908c7d17b93de), C(f6cfa27113af4a72), C(edf41c5d83c721a8)}, {C(ef243a576431d7ac), C(92a32619ecfae0a5), C(fb34d2c062dc803a), C(f5f8b21ec30bd3a0), C(80a442fd5c6482a8), C(4fde11e5ccde5169), C(55671451f661a885), C(f5f8b21ec30bd3a0), C(80a442fd5c6482a8), C(4fde11e5ccde5169), C(55671451f661a885), C(94f27bc2d5d8d63e), C(2156968b87f084dc), C(b591bcae146f6fea), C(f57f4c01e41ac7fe)}, {C(97854de6f22c97b6), C(1292ac07b0f426bb), C(9a099a28b22d3a38), C(caac64f5865d87f3), C(771b9fdbd3aa4bd2), C(88446393c3606c2d), C(bc3d3dcd5b7d6d7f), C(caac64f5865d87f3), C(771b9fdbd3aa4bd2), C(88446393c3606c2d), C(bc3d3dcd5b7d6d7f), C(56e22512b832d3ee), C(bbc677fe5ce0b665), C(f1914b0f070e5c32), C(c10d40362472dcd1)}, {C(d26ce17bfc1851d), C(db30fb632c7da294), C(26cb7b1a465400a5), C(401a0581221957e2), C(fc04e99ae3a283ce), C(fe895303ab2d1e3e), C(35ab7c498403975b), C(401a0581221957e2), C(fc04e99ae3a283ce), C(fe895303ab2d1e3e), C(35ab7c498403975b), C(c6e4c8dc6f52fb11), C(63f0b484c2c7502f), C(93693da3439bdbe9), C(1264dbaaaaf6b7f1)}, {C(97477bac0ba4c7f1), C(788ef8729dca29ac), C(63d88e226d36132c), C(330b7e93663affbd), C(3c59913fcf0d603f), C(e207e6572672fd0a), C(8a5dc17019c8a667), C(330b7e93663affbd), C(3c59913fcf0d603f), C(e207e6572672fd0a), C(8a5dc17019c8a667), C(5c8f47ade659d40), C(6e0838e5a808e9a2), C(8a2d9a0afcd48b19), C(d1c9d5af7b48418d)}, {C(f6bbcba92b11f5c8), C(72cf221cad20f191), C(a04726593764122d), C(77fbb70409d316e2), C(c864432c5208e583), C(d3f593922668c184), C(23307562648bdb54), C(77fbb70409d316e2), C(c864432c5208e583), C(d3f593922668c184), C(23307562648bdb54), C(b03e0b274f848a74), C(c6121e3af71f4281), C(2e48dd2a16ca63ec), C(f4cd44c69ae024df)}, {C(1ac8b67c1c82132), C(7536db9591be9471), C(42f18fbe7141e565), C(20085827a39ff749), C(42e6c504df174606), C(839da16331fea7ac), C(7fd768552b10ffc6), C(20085827a39ff749), C(42e6c504df174606), C(839da16331fea7ac), C(7fd768552b10ffc6), C(d1c53c90fde72640), C(c61ae7cf4e266556), C(127561e440e4c156), C(f329cae8c26af3e1)}, {C(9cd716ca0eee52fa), C(67c1076e1ef11f93), C(927342024f36f5d7), C(d0884af223fd056b), C(bb33aafc7b80b3e4), C(36b722fea81a4c88), C(6e72e3022c0ed97), C(d0884af223fd056b), C(bb33aafc7b80b3e4), C(36b722fea81a4c88), C(6e72e3022c0ed97), C(5db446a3ba66e0ba), C(2e138fb81b28ad9), C(16e8e82995237c85), C(9730dbfb072fbf03)}, {C(1909f39123d9ad44), C(c0bdd71c5641fdb7), C(112e5d19abda9b14), C(984cf3f611546e28), C(d7d9c9c4e7efb5d7), C(b3152c389532b329), C(1c168b512ec5f659), C(984cf3f611546e28), C(d7d9c9c4e7efb5d7), C(b3152c389532b329), C(1c168b512ec5f659), C(eca67cc49e26069a), C(73cb0b224d36d541), C(df8379190ae6c5fe), C(e0f6bde7c4726211)}, {C(1d206f99f535efeb), C(882e15548afc3422), C(c94f203775c8c634), C(24940a3adac420b8), C(5adf73051c52bce0), C(1aa5030247ed3d32), C(e1ae74ab6804c08b), C(24940a3adac420b8), C(5adf73051c52bce0), C(1aa5030247ed3d32), C(e1ae74ab6804c08b), C(95217bf71b0da84c), C(ca9bb91c0126a36e), C(741b9a99ea470974), C(2adc4e34b8670f41)}, {C(b38c3a83042eb802), C(ea134be7c6e0c326), C(81d396c683df4f35), C(2a55645640911e27), C(4fac2eefbd36e26f), C(79ad798fb4c5835c), C(359aa2faec050131), C(2a55645640911e27), C(4fac2eefbd36e26f), C(79ad798fb4c5835c), C(359aa2faec050131), C(5b802dcec21a7157), C(6ecde915b75ede0a), C(f2e653587e89058b), C(a661be80528d3385)}, {C(488d6b45d927161b), C(f5cac66d869a8aaf), C(c326d56c643a214e), C(10a7228693eb083e), C(1054fb19cbacf01c), C(a8f389d24587ebd8), C(afcb783a39926dba), C(10a7228693eb083e), C(1054fb19cbacf01c), C(a8f389d24587ebd8), C(afcb783a39926dba), C(fe83e658532edf8f), C(6fdcf97f147dc4db), C(dc5e487845abef4b), C(137693f4eab77e27)}, {C(3d6aaa43af5d4f86), C(44c7d370910418d8), C(d099515f7c5c4eca), C(39756960441fbe2f), C(fb68e5fedbe3d874), C(3ff380fbdd27b8e), C(f48832fdda648998), C(39756960441fbe2f), C(fb68e5fedbe3d874), C(3ff380fbdd27b8e), C(f48832fdda648998), C(270ddbf2327058c9), C(9eead83a8319d0c4), C(b4c3356e162b086d), C(88f013588f411b7)}, {C(e5c40a6381e43845), C(312a18e66bbceaa3), C(31365186c2059563), C(cba4c10e65410ba0), C(3c250c8b2d72c1b6), C(177e82f415595117), C(8c8dcfb9e73d3f6), C(cba4c10e65410ba0), C(3c250c8b2d72c1b6), C(177e82f415595117), C(8c8dcfb9e73d3f6), C(c017a797e49c0f7), C(ea2b233b2e7d5aea), C(878d204c55a56cb1), C(7b1b62cc0dfdc523)}, {C(86fb323e5a4b710b), C(710c1092c23a79e0), C(bd2c6d3fc949402e), C(951f2078aa4b8099), C(e68b7fefa1cfd190), C(41525a4990ba6d4a), C(c373552ef4b51712), C(951f2078aa4b8099), C(e68b7fefa1cfd190), C(41525a4990ba6d4a), C(c373552ef4b51712), C(73eb44c6122bdf5a), C(58047289a314b013), C(e31d30432521705b), C(6cf856774873faa4)}, {C(7930c09adaf6e62e), C(f230d3311593662c), C(a795b9bf6c37d211), C(b57ec44bc7101b96), C(6cb710e77767a25a), C(2f446152d5e3a6d0), C(cd69172f94543ce3), C(b57ec44bc7101b96), C(6cb710e77767a25a), C(2f446152d5e3a6d0), C(cd69172f94543ce3), C(e6c2483cf425f072), C(2060d5d4379d6d5a), C(86a3c04c2110d893), C(561d3b8a509313c6)}, {C(e505e86f0eff4ecd), C(cf31e1ccb273b9e6), C(d8efb8e9d0fe575), C(ed094f47671e359d), C(d9ebdb047d57611a), C(1c620e4d301037a3), C(df6f401c172f68e8), C(ed094f47671e359d), C(d9ebdb047d57611a), C(1c620e4d301037a3), C(df6f401c172f68e8), C(af0a2c7f72388ec7), C(6d4c4a087fa4564a), C(411b30def69700a), C(67e5c84557a47e01)}, {C(dedccb12011e857), C(d831f899174feda8), C(ee4bcdb5804c582a), C(5d765af4e88f3277), C(d2abe1c63ad4d103), C(342a8ce0bc7af6e4), C(31bfda956f3e5058), C(5d765af4e88f3277), C(d2abe1c63ad4d103), C(342a8ce0bc7af6e4), C(31bfda956f3e5058), C(4c7a1fec9af54bbb), C(84a88f0655899bf4), C(66fb60d0582ac601), C(be0dd1ffe967bd4a)}, {C(4d679bda26f5555f), C(7deb387eb7823c1c), C(a65ef3b4fecd6888), C(a6814d3dc578b9df), C(3372111a3292b691), C(e97589c81d92b513), C(74edd943d1b9b5bf), C(a6814d3dc578b9df), C(3372111a3292b691), C(e97589c81d92b513), C(74edd943d1b9b5bf), C(889e38b0af80bb7a), C(a416349af3c5818b), C(f5f5bb25576221c1), C(3be023fa6912c32e)}, {C(e47cd22995a75a51), C(3686350c2569a162), C(861afcb185b8efd9), C(63672de7951e1853), C(3ca0c763273b99db), C(29e04fa994cccb98), C(b02587d792be5ee8), C(63672de7951e1853), C(3ca0c763273b99db), C(29e04fa994cccb98), C(b02587d792be5ee8), C(c85ada4858f7e4fc), C(3f280ab7d5864460), C(4109822f92f68326), C(2d73f61314a2f630)}, {C(92ba8e12e0204f05), C(4e29321580273802), C(aa83b675ed74a851), C(a16cd2e8b445a3fd), C(f0d4f9fb613c38ef), C(eee7755d444d8f2f), C(b530591eb67ae30d), C(a16cd2e8b445a3fd), C(f0d4f9fb613c38ef), C(eee7755d444d8f2f), C(b530591eb67ae30d), C(6fb3031a6edf8fec), C(65118d08aecf56d8), C(9a2117bbef1faa8), C(97055c5fd310aa93)}, {C(bb3a8427c64f8939), C(b5902af2ec095a04), C(89f1b440667b2a28), C(5386ef0b438d0330), C(d39e03c686f8a2da), C(9555249bb9073d78), C(8c0b3623fdf0b156), C(5386ef0b438d0330), C(d39e03c686f8a2da), C(9555249bb9073d78), C(8c0b3623fdf0b156), C(354fc5d3a5504e5e), C(b2fd7391719aa614), C(13cd4ce3dfe27b3d), C(a2d63a85dc3cae4b)}, {C(998988f7d6dacc43), C(5f2b853d841152db), C(d76321badc5cb978), C(e381f24ee1d9a97d), C(7c5d95b2a3af2e08), C(ca714acc461cdc93), C(1a8ee94bc847aa3e), C(e381f24ee1d9a97d), C(7c5d95b2a3af2e08), C(ca714acc461cdc93), C(1a8ee94bc847aa3e), C(ee59ee4c21a36f47), C(d476e8bba5bf5143), C(22a03cb5900f6ec8), C(19d954e14f35d7a8)}, {C(3f1049221dd72b98), C(8d9200d7a0664c37), C(3925704c83a5f406), C(4cbef49086e62678), C(d77dfecc2819ef19), C(c327e4deaf4c7e72), C(b4d58c73a262a32d), C(4cbef49086e62678), C(d77dfecc2819ef19), C(c327e4deaf4c7e72), C(b4d58c73a262a32d), C(78cd002324861653), C(7c3f3977576efb88), C(d1c9975fd4a4cc26), C(3e3cbc90a9baa442)}, {C(419e4ff78c3e06f3), C(aa8ff514c8a141d7), C(5bb176e21f89f10d), C(becb065dc12d8b4e), C(ebee135492a2018), C(d3f07e65bcd9e13a), C(85c933e85382e9f9), C(becb065dc12d8b4e), C(ebee135492a2018), C(d3f07e65bcd9e13a), C(85c933e85382e9f9), C(2c19ab7c419ebaca), C(982375b2999bdb46), C(652ca1c6325d9296), C(e9c790fa8561940a)}, {C(9ba090af14171317), C(b0445c5232d7be53), C(72cc929d1577ddb8), C(bc944c1b5ba2184d), C(ab3d57e5e60e9714), C(5d8d27e7dd0a365a), C(4dd809e11740af1a), C(bc944c1b5ba2184d), C(ab3d57e5e60e9714), C(5d8d27e7dd0a365a), C(4dd809e11740af1a), C(6f42d856faad44df), C(5118dc58d7eaf56e), C(829bbc076a43004), C(1747fbbfaca6da98)}, {C(6ad739e4ada9a340), C(2c6c4fb3a2e9b614), C(ab58620e94ca8a77), C(aaa144fbe3e6fda2), C(52a9291d1e212bc5), C(2b4c68291f26b570), C(45351ab332855267), C(aaa144fbe3e6fda2), C(52a9291d1e212bc5), C(2b4c68291f26b570), C(45351ab332855267), C(1149f55400bc9799), C(8c6ec1a0c617771f), C(e9966cc03f3bec05), C(3e6889140ccd2646)}, {C(8ecff07fd67e4abd), C(f1b8029b17006ece), C(21d96d5859229a61), C(b8c18d66154ac51), C(5807350371ad7388), C(81f783f4f5ab2b8), C(fa4e659f90744de7), C(b8c18d66154ac51), C(5807350371ad7388), C(81f783f4f5ab2b8), C(fa4e659f90744de7), C(809da4baa51cad2c), C(88d5c11ff5598342), C(7c7125b0681d67d0), C(1b5ba6124bfed8e8)}, {C(497ca8dbfee8b3a7), C(58c708155d70e20e), C(90428a7e349d6949), C(b744f5056e74ca86), C(88aa27b96f3d84a5), C(b4b1ee0470ac3826), C(aeb46264f4e15d4f), C(b744f5056e74ca86), C(88aa27b96f3d84a5), C(b4b1ee0470ac3826), C(aeb46264f4e15d4f), C(14921b1ee856bc55), C(a341d74aaba00a02), C(4f50aa8e3d08a919), C(75a148668ff3869e)}, {C(a929cd66daa65b0a), C(7c0150a2d9ca564d), C(46ddec37e2ec0a6d), C(4323852cc57e4af3), C(1f5f638bbf9d2e5b), C(578fb6ac89a31d9), C(7792536d9ac4bf12), C(4323852cc57e4af3), C(1f5f638bbf9d2e5b), C(578fb6ac89a31d9), C(7792536d9ac4bf12), C(60be62e795ef5798), C(c276cc5b44febefe), C(519ba0b9f6d1be95), C(1fdce3561ed35bb8)}, {C(4107c4156bc8d4bc), C(1cda0c6f3f0f48af), C(cf11a23299cf7181), C(766b71bff7d6f461), C(b004f2c910a6659e), C(4c0eb3848e1a7c8), C(3f90439d05c3563b), C(766b71bff7d6f461), C(b004f2c910a6659e), C(4c0eb3848e1a7c8), C(3f90439d05c3563b), C(4a2a013f4bc2c1d7), C(888779ab0c272548), C(ae0f8462d89a4241), C(c5c85b7c44679abd)}, {C(15b38dc0e40459d1), C(344fedcfc00fff43), C(b9215c5a0fcf17df), C(d178444a236c1f2d), C(5576deee27f3f103), C(943611bb5b1b0736), C(a0fde17cb5c2316d), C(d178444a236c1f2d), C(5576deee27f3f103), C(943611bb5b1b0736), C(a0fde17cb5c2316d), C(feaa1a047f4375f3), C(5435f313e84767e), C(522e4333cd0330c1), C(7e6b609b0ea9e91f)}, {C(e5e5370ed3186f6c), C(4592e75db47ea35d), C(355d452b82250e83), C(7a265e37da616168), C(6a1f06c34bafa27), C(fbae175e7ed22a9c), C(b144e84f6f33c098), C(7a265e37da616168), C(6a1f06c34bafa27), C(fbae175e7ed22a9c), C(b144e84f6f33c098), C(bd444561b0db41fc), C(2072c85731e7b0b0), C(ce1b1fac436b51f3), C(4f5d44f31a3dcdb9)}, {C(ea2785c8f873e28f), C(3e257272f4464f5f), C(9267e7e0cc9c7fb5), C(9fd4d9362494cbbc), C(e562bc615befb1b9), C(8096808d8646cfde), C(c4084a587b9776ec), C(9fd4d9362494cbbc), C(e562bc615befb1b9), C(8096808d8646cfde), C(c4084a587b9776ec), C(a9135db8a850d8e4), C(fffc4f8b1a11f5af), C(c50e9173c2c6fe64), C(a32630581df4ceda)}, {C(e7bf98235fc8a4a8), C(4042ef2aae400e64), C(6538ba9ffe72dd70), C(c84bb7b3881ab070), C(36fe6c51023fbda0), C(d62838514bb87ea4), C(9eeb5e7934373d86), C(c84bb7b3881ab070), C(36fe6c51023fbda0), C(d62838514bb87ea4), C(9eeb5e7934373d86), C(5f8480d0a2750a96), C(40afa38506456ad9), C(e4012b7ef2e0ddea), C(659da200a011836b)}, {C(b94e261a90888396), C(1f468d07e853294c), C(cb2c9b863a5317b9), C(4473c8e2a3458ee0), C(258053945ab4a39a), C(f8d745ca41962817), C(7afb6d40df9b8f71), C(4473c8e2a3458ee0), C(258053945ab4a39a), C(f8d745ca41962817), C(7afb6d40df9b8f71), C(9030c2349604f677), C(f544dcd593087faf), C(77a3b0efe6345d12), C(fff4e398c05817cc)}, {C(4b0226e5f5cdc9c), C(a836ae7303dc4301), C(8505e1b628bac101), C(b5f52041a698da7), C(29864874b5f1936d), C(49b3a0c6d78f98da), C(93a1a8c7d90de296), C(b5f52041a698da7), C(29864874b5f1936d), C(49b3a0c6d78f98da), C(93a1a8c7d90de296), C(ed62288423c17b7f), C(685afa2cfba09660), C(6d9b6f59585452c6), C(e505535c4010efb9)}, {C(e07edbe7325c718c), C(9db1eda964f06827), C(2f245ad774e4cb1b), C(664ec3fad8521859), C(406f082beb9ca29a), C(b6b0fb3a7981c7c8), C(3ebd280b598a9721), C(664ec3fad8521859), C(406f082beb9ca29a), C(b6b0fb3a7981c7c8), C(3ebd280b598a9721), C(d9a6ceb072eab22a), C(d5bc5df5eb2ff6f1), C(488db3cab48daa0b), C(9916f14fa5672f37)}, {C(f4b56421eae4c4e7), C(5da0070cf40937a0), C(aca4a5e01295984a), C(5414e385f5677a6d), C(41ef105f8a682a28), C(4cd2e95ea7f5e7b0), C(775bb1e0d57053b2), C(5414e385f5677a6d), C(41ef105f8a682a28), C(4cd2e95ea7f5e7b0), C(775bb1e0d57053b2), C(8919017805e84b3f), C(15402f44e0e2b259), C(483b1309e1403c87), C(85c7b4232d45b0d9)}, {C(c07fcb8ae7b4e480), C(4ebcad82e0b53976), C(8643c63d6c78a6ce), C(d4bd358fed3e6aa5), C(8a1ba396356197d9), C(7afc2a54733922cc), C(b813bdac4c7c02ef), C(d4bd358fed3e6aa5), C(8a1ba396356197d9), C(7afc2a54733922cc), C(b813bdac4c7c02ef), C(f6c610cf7e7c955), C(dab6a53e1c0780f8), C(837c9ffec33e5d48), C(8cb8c20032af152d)}, {C(3edad9568a9aaab), C(23891bbaeb3a17bc), C(4eb7238738b0c51a), C(db0c32f76f5b7fc1), C(5e41b711f0abd1a0), C(bcb758f01ded0a11), C(7d15f7d87955e28b), C(db0c32f76f5b7fc1), C(5e41b711f0abd1a0), C(bcb758f01ded0a11), C(7d15f7d87955e28b), C(cd2dc1f0b05939b), C(9fd6d680462e4c47), C(95d5846e993bc8ff), C(f0b3cafc2697b8a8)}, {C(fcabde8700de91e8), C(63784d19c60bf366), C(8f3af9a056b1a1c8), C(32d3a29cf49e2dc9), C(3079c0b0c2269bd0), C(ed76ba44f04e7b82), C(6eee76a90b83035f), C(32d3a29cf49e2dc9), C(3079c0b0c2269bd0), C(ed76ba44f04e7b82), C(6eee76a90b83035f), C(4a9286f545bbc09), C(bd36525be4dd1b51), C(5f7a9117228fdee5), C(543c96a08f03151c)}, {C(362fc5ba93e8eb31), C(7549ae99fa609d61), C(47e4cf524e37178f), C(a54eaa5d7f3a7227), C(9d26922965d54727), C(27d22acb31a194d4), C(e9b8e68771db0da6), C(a54eaa5d7f3a7227), C(9d26922965d54727), C(27d22acb31a194d4), C(e9b8e68771db0da6), C(16fd0e006209abe8), C(81d3f72987a6a81a), C(74e96e4044817bc7), C(924ca5f08572fef9)}, {C(e323b1c5b55a4dfb), C(719993d7d1ad77fb), C(555ca6c6166e989c), C(ea37f61c0c2f6d53), C(9b0c2174f14a01f5), C(7bbe6921e26293f3), C(2ab6c72235b6c98a), C(ea37f61c0c2f6d53), C(9b0c2174f14a01f5), C(7bbe6921e26293f3), C(2ab6c72235b6c98a), C(2c6e7668f37f6d23), C(3e8edb057a57c2dd), C(2595fc79768c8b34), C(ffc541f5efed9c43)}, {C(9461913a153530ef), C(83fc6d9ed7d1285a), C(73df90bdc50807cf), C(a32c192f6e3c3f66), C(8f10077b8a902d00), C(61a227f2faac29b4), C(1a71466fc005a61d), C(a32c192f6e3c3f66), C(8f10077b8a902d00), C(61a227f2faac29b4), C(1a71466fc005a61d), C(12545812f3d01a92), C(aece72f823ade07d), C(52634cdd5f9e5260), C(cb48f56805c08e98)}, {C(ec2332acc6df0c41), C(59f5ee17e20a8263), C(1087d756afcd8e7b), C(a82a7bb790678fc9), C(d197682c421e4373), C(dd78d25c7f0f935a), C(9850cb6fbfee520f), C(a82a7bb790678fc9), C(d197682c421e4373), C(dd78d25c7f0f935a), C(9850cb6fbfee520f), C(2590847398688a46), C(ad266f08713ca5fe), C(25b978be91e830b5), C(2996c8f2b4c8f231)}, {C(aae00b3a289bc82), C(4f6d69f5a5a5b659), C(3ff5abc145614e3), C(33322363b5f45216), C(7e83f1fe4189e843), C(df384b2adfc35b03), C(396ce7790a5ada53), C(33322363b5f45216), C(7e83f1fe4189e843), C(df384b2adfc35b03), C(396ce7790a5ada53), C(c3286e44108b8d36), C(6db8716c498d703f), C(d1db09466f37f4e7), C(56c98e7f68a41388)}, {C(4c842e732fcd25f), C(e7dd7b953cf9c2b2), C(911ee248a76ae3), C(33c6690937582317), C(fe6d61a77985d7bb), C(97b153d04a115535), C(d3fde02e42cfe6df), C(33c6690937582317), C(fe6d61a77985d7bb), C(97b153d04a115535), C(d3fde02e42cfe6df), C(d1c7d1efa52a016), C(1d6ed137f4634c), C(1a260ec505097081), C(8d1e70861a1c7db6)}, {C(40e23ca5817a91f3), C(353e2935809b7ad1), C(f7820021b86391bb), C(f3d41b3d4717eb83), C(2670d457dde68842), C(19707a6732c49278), C(5d0f05a83569ba26), C(f3d41b3d4717eb83), C(2670d457dde68842), C(19707a6732c49278), C(5d0f05a83569ba26), C(6fe5bc84e528816a), C(94df3dca91a29ace), C(420196ed097e8b6f), C(7c52da0e1f043ad6)}, {C(2564527fad710b8d), C(2bdcca8d57f890f), C(81f7bfcd9ea5a532), C(dd70e407984cfa80), C(66996d6066db6e1a), C(36a812bc418b97c9), C(18ea2c63da57f36e), C(dd70e407984cfa80), C(66996d6066db6e1a), C(36a812bc418b97c9), C(18ea2c63da57f36e), C(937fd7ad09be1a8f), C(163b12cab35d5d15), C(3606c3e441335cce), C(949f6ea5bb241ae8)}, {C(6bf70df9d15a2bf6), C(81cad17764b8e0dd), C(58b349a9ba22a7ef), C(9432536dd9f65229), C(192dc54522da3e3d), C(274c6019e0227ca9), C(160abc932a4e4f35), C(9432536dd9f65229), C(192dc54522da3e3d), C(274c6019e0227ca9), C(160abc932a4e4f35), C(1204f2fb5aa79dc6), C(2536edaf890f0760), C(6f2b561f44ff46b4), C(8c7b3e95baa8d984)}, {C(45e6f446eb6bbcf5), C(98ab0ef06f1a7d84), C(85ae96bacca50de6), C(b9aa5bead3352801), C(8a6d9e02a19a4229), C(c352f5b6d5ee1d9d), C(ce562bdb0cfa84fb), C(b9aa5bead3352801), C(8a6d9e02a19a4229), C(c352f5b6d5ee1d9d), C(ce562bdb0cfa84fb), C(d47b768a85283981), C(1fe72557be57a11b), C(95d8afe4af087d51), C(2f59c4e383f30045)}, {C(620d3fe4b8849c9e), C(975a15812a429ec2), C(437c453593dcaf13), C(8d8e7c63385df78e), C(16d55add72a5e25e), C(aa6321421dd87eb5), C(6f27f62e785f0203), C(8d8e7c63385df78e), C(16d55add72a5e25e), C(aa6321421dd87eb5), C(6f27f62e785f0203), C(829030a61078206e), C(ae1f30fcfa445cc8), C(f61f21c9df4ef68d), C(1e5b1945f858dc4c)}, {C(535aa7340b3c168f), C(bed5d3c3cd87d48a), C(266d40ae10f0cbc1), C(ce218d5b44f7825a), C(2ae0c64765800d3a), C(f22dc1ae0728fc01), C(48a171bc666d227f), C(ce218d5b44f7825a), C(2ae0c64765800d3a), C(f22dc1ae0728fc01), C(48a171bc666d227f), C(e7367aff24203c97), C(da39d2be1db3a58d), C(85ce86523003933a), C(dfd4ef2ae83f138a)}, {C(dd3e761d4eada300), C(893d7e4c3bea5bb6), C(cc6d6783bf43eea), C(eb8eed7c391f0044), C(b58961c3abf80753), C(3d75ea687191521), C(389be7bbd8e478f3), C(eb8eed7c391f0044), C(b58961c3abf80753), C(3d75ea687191521), C(389be7bbd8e478f3), C(917070a07441ee47), C(d78efa8cd65b313), C(a8a16f4c1c08c8a1), C(b69cb8ee549eb113)}, {C(4ac1902ccde06545), C(2c44aeb0983a7a07), C(b566035215b309f9), C(64c136fe9404a7b3), C(99f3d8c98a399d5e), C(6319c7cb14180185), C(fbacdbd277d33f4c), C(64c136fe9404a7b3), C(99f3d8c98a399d5e), C(6319c7cb14180185), C(fbacdbd277d33f4c), C(a96a5626c2adda86), C(39ea72fd2ad133ed), C(b5583f2f736df73e), C(ef2c63619782b7ba)}, {C(aee339a23bb00a5e), C(cbb402255318f919), C(9922948e99aa0781), C(df367034233fedc4), C(dcbe14db816586e5), C(f4b1cb814adf21d3), C(f4690695102fa00a), C(df367034233fedc4), C(dcbe14db816586e5), C(f4b1cb814adf21d3), C(f4690695102fa00a), C(6b4f01dd6b76dafc), C(b79388676b50da5d), C(cb64f8bde5ed3393), C(9b422781f13219d3)}, {C(627599e91148df4f), C(3e2d01e8baab062b), C(2daab20edb245251), C(9a958bc3a895a223), C(331058dd6c5d2064), C(46c4d962072094fa), C(e6207c19160e58eb), C(9a958bc3a895a223), C(331058dd6c5d2064), C(46c4d962072094fa), C(e6207c19160e58eb), C(5655e4dbf7272728), C(67b217b1f56c747d), C(3ac0be79691b9a0d), C(9d0954dd0b57073)}, {C(cfb04cf00cfed6b3), C(5fe75fc559af22fa), C(c440a935d72cdc40), C(3ab0d0691b251b8b), C(47181a443504a819), C(9bcaf1253f99f499), C(8ee002b89c1b6b3f), C(3ab0d0691b251b8b), C(47181a443504a819), C(9bcaf1253f99f499), C(8ee002b89c1b6b3f), C(55dfe8eedcd1ec5e), C(1bf50f0bbad796a5), C(9044369a042d7fd6), C(d423df3e3738ba8f)}, {C(942631c47a26889), C(427962c82d8a6e00), C(224071a6592537ff), C(d3e96f4fb479401), C(68b3f2ec11de9368), C(cb51b01083acad4f), C(500cec4564d62aeb), C(d3e96f4fb479401), C(68b3f2ec11de9368), C(cb51b01083acad4f), C(500cec4564d62aeb), C(4ce547491e732887), C(9423883a9a11df4c), C(1a0fc7a14214360), C(9e837914505da6ed)}, {C(4c9eb4e09726b47e), C(fd927483a2b38cf3), C(6d7e56407d1ba870), C(9f5dc7db69fa1e29), C(f42fff56934533d5), C(92d768c230a53918), C(f3360ff11642136c), C(9f5dc7db69fa1e29), C(f42fff56934533d5), C(92d768c230a53918), C(f3360ff11642136c), C(9e989932eb86d1b5), C(449a77f69a8a9d65), C(efabaf8a7789ed9a), C(2798eb4c50c826fd)}, {C(cf7f208ef20e887a), C(f4ce4edeadcaf1a1), C(7ee15226eaf4a74d), C(17ab41ab2ae0705d), C(9dd56694aa2dcd4e), C(dd4fa2add9baced2), C(7ad99099c9e199a3), C(17ab41ab2ae0705d), C(9dd56694aa2dcd4e), C(dd4fa2add9baced2), C(7ad99099c9e199a3), C(a59112144accef0e), C(5838df47e38d251d), C(8750fe45760331e5), C(4b2ce14732e0312a)}, {C(a8dc4687bcf27f4), C(c4aadd7802553f15), C(5401eb9912be5269), C(5c2a2b5b0657a928), C(1e1968ebb38fcb99), C(a082d0e067c4a59c), C(18b616495ad9bf5d), C(5c2a2b5b0657a928), C(1e1968ebb38fcb99), C(a082d0e067c4a59c), C(18b616495ad9bf5d), C(18c5dc6c78a7f9ed), C(b3cc94fe34b68aa1), C(3b77e91292be38cc), C(61d1786ec5097971)}, {C(daed638536ed19df), C(1a762ea5d7ac6f7e), C(48a1cc07a798b84f), C(7f15bdaf50d550f9), C(4c1d48aa621a037e), C(2b1d7a389d497ee0), C(81c6775d46f4b517), C(7f15bdaf50d550f9), C(4c1d48aa621a037e), C(2b1d7a389d497ee0), C(81c6775d46f4b517), C(35296005cbba3ebe), C(db1642f825b53532), C(3e07588a9fd829a4), C(60f13b5446bc7638)}, {C(90a04b11ee1e4af3), C(ab09a35f8f2dff95), C(d7cbe82231ae1e83), C(3262e9017bb788c4), C(1612017731c997bc), C(e789d66134aff5e1), C(275642fd17048af1), C(3262e9017bb788c4), C(1612017731c997bc), C(e789d66134aff5e1), C(275642fd17048af1), C(99255b68d0b46b51), C(74a6f1ad4b2bb296), C(4164222761af840e), C(54d59bf6211a8fe6)}, {C(511f29e1b732617d), C(551cb47a9a83d769), C(df6f56fbda20e7a), C(f27583a930221d44), C(d7d2c46de69b2ed8), C(add24ddd2be4a850), C(5cf2f688dbb93585), C(f27583a930221d44), C(d7d2c46de69b2ed8), C(add24ddd2be4a850), C(5cf2f688dbb93585), C(a7f8e42d5dd4aa00), C(72dc11fd76b4dea9), C(8886f194e6f8e3ff), C(7e8ead04a0e0b1ef)}, {C(95567f03939e651f), C(62a426f09d81d884), C(15cb96e36a8e712c), C(1a2f43bdeaea9c28), C(bca2fd840831291f), C(83446d4a1f7dcc1a), C(449a211df83b6187), C(1a2f43bdeaea9c28), C(bca2fd840831291f), C(83446d4a1f7dcc1a), C(449a211df83b6187), C(553ce97832b2f695), C(3110a2ba303db75), C(b91d6d399a02f453), C(3cb148561e0ef2bb)}, {C(248a32ad10e76bc3), C(dac39c8b036985e9), C(79d38c4af2958b56), C(cc954b4e56275f54), C(700cd864e04e8aaa), C(d6ba03cbff7cc34b), C(da297d7891c9c046), C(cc954b4e56275f54), C(700cd864e04e8aaa), C(d6ba03cbff7cc34b), C(da297d7891c9c046), C(c05d2be8f8ee8114), C(7f4541cbe2ec0025), C(8f0a7a70af6ea926), C(3837ddce693781b5)}, {C(f9f05a2a892242eb), C(de00b6b2e0998460), C(f1f4bd817041497a), C(3deac49eb42a1e26), C(642f77f7c57e84b7), C(2f2c231222651e8b), C(380202ec06bdc29e), C(3deac49eb42a1e26), C(642f77f7c57e84b7), C(2f2c231222651e8b), C(380202ec06bdc29e), C(59abc4ff54765e66), C(8561ea1dddd1f742), C(9ca1f94b0d3f3875), C(b7fa93c3a9fa4ec4)}, {C(3a015cea8c3f5bdf), C(5583521b852fc3ac), C(53d5cd66029a1014), C(ac2eeca7bb04412a), C(daba45cb16ccff2b), C(ddd90b51209e414), C(d90e74ee28cb6271), C(ac2eeca7bb04412a), C(daba45cb16ccff2b), C(ddd90b51209e414), C(d90e74ee28cb6271), C(117027648ca9db68), C(29c1dba39bbcf072), C(787f6bb010a34cd9), C(e099f487e09b847)}, {C(670e43506aa1f71b), C(1cd7929573e54c05), C(cbb00a0aaba5f20a), C(f779909e3d5688d1), C(88211b9117678271), C(59f44f73759a8bc6), C(ef14f73c405123b4), C(f779909e3d5688d1), C(88211b9117678271), C(59f44f73759a8bc6), C(ef14f73c405123b4), C(78775601f11186f), C(fc4641d676fbeed9), C(669ca96b5a2ae5b), C(67b5f0d072025f8d)}, {C(977bb79b58bbd984), C(26d45cfcfb0e9756), C(df8885db518d5f6a), C(6a1d2876488bed06), C(ae35d83c3afb5769), C(33667427d99f9f4e), C(d84c31c17495e3ba), C(6a1d2876488bed06), C(ae35d83c3afb5769), C(33667427d99f9f4e), C(d84c31c17495e3ba), C(31357cded7495ffc), C(295e2eefcd383a2e), C(25063ef4a24c29ae), C(88c694170fcbf0b7)}, {C(e6264fbccd93a530), C(c92f420494e99a7d), C(c14001a298cf976), C(5c8685fee2e4ce55), C(228c49268d6a4345), C(3b04ee2861baec6d), C(7334878a00e96e72), C(5c8685fee2e4ce55), C(228c49268d6a4345), C(3b04ee2861baec6d), C(7334878a00e96e72), C(7317164b2ce711bb), C(e645447e363e8ca1), C(d326d129ad7b4e7f), C(58b9b76d5c2eb272)}, {C(54e4d0cab7ec5c27), C(31ca61d2262a9acc), C(30bd3a50d8082ff6), C(46b3b963bf7e2847), C(b319d04e16ad10b0), C(76c8dd82e6f5a0eb), C(2070363cefb488bc), C(46b3b963bf7e2847), C(b319d04e16ad10b0), C(76c8dd82e6f5a0eb), C(2070363cefb488bc), C(6f9dbacb2bdc556d), C(88a5fb0b293c1e22), C(cb131d9b9abd84b7), C(21db6f0e147a0040)}, {C(882a598e98cf5416), C(36c8dca4a80d9788), C(c386480f07591cfe), C(5b517bcf2005fd9c), C(b9b8f8e5f90e7025), C(2a833e6199e21708), C(bcb7549de5fda812), C(5b517bcf2005fd9c), C(b9b8f8e5f90e7025), C(2a833e6199e21708), C(bcb7549de5fda812), C(44fc96a3cafa1c34), C(fb7724d4899ec7c7), C(4662e3b87df93e13), C(bcf22545acbcfd4e)}, {C(7c37a5376c056d55), C(e0cce8936a06b6f6), C(d32f933fdbec4c7d), C(7ac50423e2be4703), C(546d4b42340d6dc7), C(624f56ee027f12bf), C(5f7f65d1e90c30f9), C(7ac50423e2be4703), C(546d4b42340d6dc7), C(624f56ee027f12bf), C(5f7f65d1e90c30f9), C(d6f15c19625d2621), C(c7afd12394f24b50), C(2c6adde5d249bcd0), C(6c857e6aa07b9fd2)}, {C(21c5e9616f24be97), C(ba3536c86e4b6fe9), C(6d3a65cfe3a9ae06), C(2113903ebd760a31), C(e561f76a5eac8beb), C(86b5b3e76392e166), C(68c8004ccc53e049), C(2113903ebd760a31), C(e561f76a5eac8beb), C(86b5b3e76392e166), C(68c8004ccc53e049), C(b51a28fe4251dd79), C(fd9c2d4d2a84c3c7), C(5bf2ec8a470d2553), C(135a52cdc76241c9)}, {C(a6eaefe74fa7d62b), C(cb34669c751b10eb), C(80da952ad8abd5f3), C(3368262b0e172d82), C(1d51f6c982476285), C(4497675ac57228a9), C(2a71766a71d0b83f), C(3368262b0e172d82), C(1d51f6c982476285), C(4497675ac57228a9), C(2a71766a71d0b83f), C(79ad94d1e9c1dedd), C(cbf1a1c9f23bfa40), C(3ebf24e068cd638b), C(be8e63472edfb462)}, {C(764af88ed4b0b828), C(36946775f20457ce), C(d4bc88ac8281c22e), C(3b2104d68dd9ac02), C(2eca14fcdc0892d0), C(7913b0c09329cd47), C(9373f458938688c8), C(3b2104d68dd9ac02), C(2eca14fcdc0892d0), C(7913b0c09329cd47), C(9373f458938688c8), C(b4448f52a5bf9425), C(9f8c8b90b61ed532), C(78f6774f48e72961), C(e47c00bf9c1206f4)}, {C(5f55a694fb173ea3), C(7db02b80ef5a918b), C(d87ff079f476ca3a), C(1d11117374e0da3), C(744bfbde42106439), C(93a99fab10bb1789), C(246ba292a85d8d7c), C(1d11117374e0da3), C(744bfbde42106439), C(93a99fab10bb1789), C(246ba292a85d8d7c), C(e5bd7838e9edd53a), C(d9c0b104c79d9019), C(ee3dcc7a8e565de5), C(619c9e0a9cf3596d)}, {C(86d086738b0a7701), C(d2402313a4280dda), C(b327aa1a25278366), C(49efdde5d1f98163), C(cbcffcee90f22824), C(951aec1daeb79bab), C(7055e2c70d2eeb4c), C(49efdde5d1f98163), C(cbcffcee90f22824), C(951aec1daeb79bab), C(7055e2c70d2eeb4c), C(1fc0de9399bacb96), C(dab7bbe67901959e), C(375805eccf683ef0), C(bbb6f465c4bae04e)}, {C(acfc8be97115847b), C(c8f0d887bf8d9d1), C(e698fbc6d39bf837), C(61fd1d6b13c1ea77), C(527ed97ff4ae24f0), C(af51a9ebb322c0), C(14f7c25058864825), C(61fd1d6b13c1ea77), C(527ed97ff4ae24f0), C(af51a9ebb322c0), C(14f7c25058864825), C(f40b2bbeaf9f021d), C(80d827160dfdc2d2), C(77baea2e3650486e), C(5de2d256740a1a97)}, {C(dc5ad3c016024d4), C(a0235e954da1a152), C(6daa8a4ed194cc43), C(185e650afc8d39f8), C(adba03a4d40de998), C(9975c776b499b26f), C(9770c59368a43a2), C(185e650afc8d39f8), C(adba03a4d40de998), C(9975c776b499b26f), C(9770c59368a43a2), C(d2776f0cf0e4f66c), C(38eaaabfb743f7f6), C(c066f03d959b3f07), C(9d91c2d52240d546)}, {C(a0e91182f03277f7), C(15c6ebef7376556), C(516f887657ab5a), C(f95050524c7f4b84), C(460dcebbaaa09ae3), C(a9f7a9f0b1b2a961), C(5f8dc5e198e34539), C(f95050524c7f4b84), C(460dcebbaaa09ae3), C(a9f7a9f0b1b2a961), C(5f8dc5e198e34539), C(9c49227ffcff07cb), C(a29388e9fcb794c8), C(475867910d110cba), C(8c9a5cee480b5bac)}, {C(767f1dbd1dba673b), C(1e466a3848a5b01e), C(483eadef1347cd6e), C(a67645c72f54fe24), C(c7a5562c69bd796b), C(e14201a35b55e4a6), C(b3a6d89f19d8f774), C(a67645c72f54fe24), C(c7a5562c69bd796b), C(e14201a35b55e4a6), C(b3a6d89f19d8f774), C(bb4d607ac22bebe5), C(792030edeaa924e0), C(138730dcb60f7e32), C(699d9dcc326c72dc)}, {C(a5e30221500dcd53), C(3a1058d71c9fad93), C(510520710c6444e8), C(a6a5e60c2c1d0108), C(45c8ea4e14bf8c6b), C(213a7235416b86df), C(c186072f80d56ad3), C(a6a5e60c2c1d0108), C(45c8ea4e14bf8c6b), C(213a7235416b86df), C(c186072f80d56ad3), C(2e7be098db59d832), C(d5fa382f3717a0ee), C(b168b26921d243d), C(61601a60c2addfbb)}, {C(ebaed82e48e18ce4), C(cfe6836b65ebe7c7), C(504d9d388684d449), C(bd9c744ee9e3308e), C(faefbb8d296b65d4), C(eba051fe2404c25f), C(250c8510b8931f87), C(bd9c744ee9e3308e), C(faefbb8d296b65d4), C(eba051fe2404c25f), C(250c8510b8931f87), C(3c4a49150dc5676f), C(6c28793c565345c4), C(9df6dd8829a6d8fb), C(760d3a023fab72e7)}, {C(ffa50913362b118d), C(626d52251a8ec3e0), C(76ce4b9dde2e8c5e), C(fc57418d92e52355), C(6b46c559e67a063), C(3f5c269e10690c5c), C(6870de8d49e65349), C(fc57418d92e52355), C(6b46c559e67a063), C(3f5c269e10690c5c), C(6870de8d49e65349), C(88737e5c672de296), C(ca71fca5f4c4f1ce), C(42fca3fa7f60e031), C(4a70246d0d4c2bd8)}, {C(256186bcda057f54), C(fb059b012049fd8e), C(304e07418b5f739b), C(3e166f9fac2eec0b), C(82bc11707ec4a7a4), C(e29acd3851ce36b6), C(9765ca9323d30046), C(3e166f9fac2eec0b), C(82bc11707ec4a7a4), C(e29acd3851ce36b6), C(9765ca9323d30046), C(dab63e7790017f7c), C(b9559988bff0f170), C(48d9ef8aea13eee8), C(e31e47857c511ec2)}, {C(382b15315e84f28b), C(f9a2578b79590b72), C(708936af6d4450e8), C(76a9d4843df75c1c), C(2c33447da3f2c70a), C(5e4dcf2eaeace0d6), C(2ae1727aa7220634), C(76a9d4843df75c1c), C(2c33447da3f2c70a), C(5e4dcf2eaeace0d6), C(2ae1727aa7220634), C(a122f6b52e1130ba), C(a17ae9a21f345e91), C(ff67313f1d0906a9), C(bb16dc0acd6ebecc)}, {C(9983a9cc5576d967), C(29e37689a173109f), C(c526073a91f2808c), C(fe9a9d4a799cf817), C(7ca841999012c0d1), C(8b3abfa4bd2aa28e), C(4ed49274526602eb), C(fe9a9d4a799cf817), C(7ca841999012c0d1), C(8b3abfa4bd2aa28e), C(4ed49274526602eb), C(40995df99063fe23), C(7f51b7ceded05144), C(743c89732b265bf2), C(10c8e1fd835713fd)}, {C(c2c58a843f733bdb), C(516c47c97b4ba886), C(abc3cae0339517db), C(be29af0dad5c9d27), C(70f802599d97fe08), C(23af3f67d941e52b), C(a031edd8b3a008fb), C(be29af0dad5c9d27), C(70f802599d97fe08), C(23af3f67d941e52b), C(a031edd8b3a008fb), C(43431336b198f8fd), C(7c4b60284e1c2245), C(51ee580ddabae1b3), C(ca99bd13845d8f7f)}, {C(648ff27fabf93521), C(d7fba33cbc153035), C(3dbcdcf87ad06c9e), C(52ddbdc9dfd26990), C(d46784cd2aeabb28), C(bd3a15e5e4eb7177), C(b5d7632e19a2cd), C(52ddbdc9dfd26990), C(d46784cd2aeabb28), C(bd3a15e5e4eb7177), C(b5d7632e19a2cd), C(8007450fa355dc04), C(41ca59f64588bb5c), C(66f2ca6b7487499d), C(8098716530db9bea)}, {C(99be55475dcb3461), C(d94ffa462f6ba8dc), C(dbab2b456bdf13bb), C(f28f496e15914b2d), C(1171ce20f49cc87d), C(1b5f514bc1b377a9), C(8a02cb12ec4d6397), C(f28f496e15914b2d), C(1171ce20f49cc87d), C(1b5f514bc1b377a9), C(8a02cb12ec4d6397), C(1c6540740c128d79), C(d085b67114969f41), C(af8c1988085306f3), C(4681f415d9ce8038)}, {C(e16fbb9303dd6d92), C(4d92b99dd164db74), C(3f98f2c9da4f5ce3), C(c65b38c5a47eeed0), C(5c5301c8ee3923a6), C(51bf9f9eddec630e), C(b1cbf1a68be455c2), C(c65b38c5a47eeed0), C(5c5301c8ee3923a6), C(51bf9f9eddec630e), C(b1cbf1a68be455c2), C(c356f5f98499bdb8), C(d897df1ad63fc1d4), C(9bf2a3a69982e93a), C(a2380d43e271bcc8)}, {C(4a57a4899834e4c0), C(836c4df2aac32257), C(cdb66b29e3e12147), C(c734232cbda1eb4c), C(30a3cffff6b9dda0), C(d199313e17cca1ed), C(594d99e4c1360d82), C(c734232cbda1eb4c), C(30a3cffff6b9dda0), C(d199313e17cca1ed), C(594d99e4c1360d82), C(ccc37662829a65b7), C(cae30ff4d2343ce9), C(54da907f7aade4fa), C(5d6e4a0272958922)}, {C(f658958cdf49f149), C(de8e4a622b7a16b), C(a227ebf448c80415), C(3de9e38b3a369785), C(84d160d688c573a9), C(8f562593add0ad54), C(4446b762cc34e6bf), C(3de9e38b3a369785), C(84d160d688c573a9), C(8f562593add0ad54), C(4446b762cc34e6bf), C(2f795f1594c7d598), C(29e05bd1e0dceaff), C(a9a88f2962b49589), C(4b9c86c141ac120b)}, {C(ae1befc65d3ea04d), C(cfd9bc0388c8fd00), C(522f2e1f6cdb31af), C(585447ebe078801a), C(14a31676ec4a2cbd), C(b274e7e6af86a5e1), C(2d487019570bedce), C(585447ebe078801a), C(14a31676ec4a2cbd), C(b274e7e6af86a5e1), C(2d487019570bedce), C(ea1dc9ef3c7b2fcc), C(bde99d4af2f4ee8c), C(64e4c43cd7c43442), C(9b5262ee2eed2f99)}, {C(2fc8f9fc5946296d), C(6a2b94c6765ebfa2), C(f4108b8c79662fd8), C(3a48de4a1e994623), C(6318e6e1ff7bc092), C(84aee2ea26a048fb), C(cf3c393fdad7b184), C(3a48de4a1e994623), C(6318e6e1ff7bc092), C(84aee2ea26a048fb), C(cf3c393fdad7b184), C(28b265bd8985a71e), C(bd3d97dbd76d89a5), C(b04ba1623c0937d), C(b6de821229693515)}, {C(efdb4dc26e84dce4), C(9ce45b6172dffee8), C(c15ad8c8bcaced19), C(f10cc2bcf0475411), C(1126f457c160d8f5), C(34c67f6ea249d5cc), C(3ab7633f4557083), C(f10cc2bcf0475411), C(1126f457c160d8f5), C(34c67f6ea249d5cc), C(3ab7633f4557083), C(3b2e4d8611a03bd7), C(3103d6e63d71c3c9), C(43a56a0b93bb9d53), C(50aa3ae25803c403)}, {C(e84a123b3e1b0c91), C(735cc1d493c5e524), C(287030af8f4ac951), C(fb46abaf4713dda0), C(e8835b9a08cf8cb2), C(3b85a40e6bee4cce), C(eea02a3930757200), C(fb46abaf4713dda0), C(e8835b9a08cf8cb2), C(3b85a40e6bee4cce), C(eea02a3930757200), C(fe7057d5fb18ee87), C(723d258b36eada2a), C(67641393692a716c), C(c8539a48dae2e539)}, {C(686c22d2863c48a6), C(1ee6804e3ddde627), C(8d66184dd34ddac8), C(35ac1bc76c11976), C(fed58f898503280d), C(ab6fcb01c630071e), C(edabf3ec7663c3c9), C(35ac1bc76c11976), C(fed58f898503280d), C(ab6fcb01c630071e), C(edabf3ec7663c3c9), C(591ec5025592b76e), C(918a77179b072163), C(25421d9db4c81e1a), C(96f1b3be51f0b548)}, {C(2c5c1c9fa0ecfde0), C(266a71b430afaec3), C(53ab2d731bd8184a), C(5722f16b15e7f206), C(35bb5922c0946610), C(b8d72c08f927f2aa), C(65f2c378cb9e8c51), C(5722f16b15e7f206), C(35bb5922c0946610), C(b8d72c08f927f2aa), C(65f2c378cb9e8c51), C(cd42fec772c2d221), C(10ccd5d7bacffdd9), C(a75ecb52192f60e2), C(a648f5fe45e5c164)}, {C(7a0ac8dd441c9a9d), C(4a4315964b7377f0), C(24092991c8f27459), C(9c6868d561691eb6), C(78b7016996f98828), C(651e072f06c9e7b7), C(fed953d1251ae90), C(9c6868d561691eb6), C(78b7016996f98828), C(651e072f06c9e7b7), C(fed953d1251ae90), C(7a4d19fdd89e368c), C(d8224d83b6b9a753), C(3a93520a455ee9c9), C(159942bea42b999c)}, {C(c6f9a31dfc91537c), C(b3a250ae029272f8), C(d065fc76d79ec222), C(d2baa99749c71d52), C(5f90a2cfc2a3f637), C(79e4aca7c8bb0998), C(981633149c85c0ba), C(d2baa99749c71d52), C(5f90a2cfc2a3f637), C(79e4aca7c8bb0998), C(981633149c85c0ba), C(5ded415df904b2ee), C(d37d1fc032ebca94), C(ed5b024594967bf7), C(ed7ae636d467e961)}, {C(2d12010eaf7d8d3d), C(eaec74ccd9b76590), C(541338571d45608b), C(e97454e4191065f3), C(afb357655f2a5d1c), C(521ac1614653c130), C(c8a8cac96aa7f32c), C(e97454e4191065f3), C(afb357655f2a5d1c), C(521ac1614653c130), C(c8a8cac96aa7f32c), C(196d7f3f386dfd29), C(1dcd2da5227325cc), C(10e3b9fa712d3405), C(fdf7864ede0856c0)}, {C(f46de22b2d79a5bd), C(e3e198ba766c0a29), C(828d8c137216b797), C(bafdb732c8a29420), C(2ed0b9f4548a9ac3), C(f1ed2d5417d8d1f7), C(451462f90354d097), C(bafdb732c8a29420), C(2ed0b9f4548a9ac3), C(f1ed2d5417d8d1f7), C(451462f90354d097), C(bdd091094408851a), C(c4c1731c1ea46c2c), C(615a2348d60409a8), C(fbc2f058d5539bcc)}, {C(2ce2f3e89fa141fe), C(ac588fe6ab2b719), C(59b848c80739487d), C(423722957b566d10), C(ae4be02664998dc6), C(64017aacfa69ef80), C(28076dddbf65a40a), C(423722957b566d10), C(ae4be02664998dc6), C(64017aacfa69ef80), C(28076dddbf65a40a), C(873bc41acb810f94), C(ac0edafb574b7c0d), C(937d5d5fd95330bf), C(4ea91171e208bd7e)}, {C(8aa75419d95555dd), C(bdb046419d0bf1b0), C(aadf49f217b153da), C(c3cbbe7eb0f5e126), C(fd1809c329311bf6), C(9c26cc255714d79d), C(67093aeb89f5d8c8), C(c3cbbe7eb0f5e126), C(fd1809c329311bf6), C(9c26cc255714d79d), C(67093aeb89f5d8c8), C(265954c61009eaf7), C(a5703e8073eaf83f), C(855382b1aed9c128), C(a6652d5a53d4a008)}, {C(1fbf19dd9207e6aa), C(722834f3c5e43cb7), C(e3c13578c5a69744), C(db9120bc83472135), C(f3d9f715e669cfd5), C(63facc852f487dda), C(9f08fd85a3a78111), C(db9120bc83472135), C(f3d9f715e669cfd5), C(63facc852f487dda), C(9f08fd85a3a78111), C(6c1e5c694b51b7ca), C(bbceb2e47d44f6a1), C(2eb472efe06f8330), C(1844408e2bb87ee)}, {C(6f11f9c1131f1182), C(6f90740debc7bad2), C(8d6e4e2d46ee614b), C(403e3793f0805ac3), C(6278da3d8667a055), C(98eceadb4f237978), C(4daa96284c847b0), C(403e3793f0805ac3), C(6278da3d8667a055), C(98eceadb4f237978), C(4daa96284c847b0), C(ab119ac9f803d770), C(ab893fe847208376), C(f9d9968ae4472ac3), C(b149ff3b35874201)}, {C(92e896d8bfdebdb5), C(2d5c691a0acaeba7), C(377d7f86b7cb2f8b), C(b8a0738135dde772), C(57fb6c9033fc5f35), C(20e628f266e63e1), C(1ad6647eaaa153a3), C(b8a0738135dde772), C(57fb6c9033fc5f35), C(20e628f266e63e1), C(1ad6647eaaa153a3), C(10005c85a89e601a), C(cc9088ed03a78e4a), C(c8d3049b8c0d26a1), C(26e8c0e936cf8cce)}, {C(369ba54df3c534d1), C(972c7d2be5f62834), C(112c8d0cfcc8b1e), C(bcddd22a14192678), C(446cf170a4f05e72), C(c9e992c7a79ce219), C(fa4762e60a93cf84), C(bcddd22a14192678), C(446cf170a4f05e72), C(c9e992c7a79ce219), C(fa4762e60a93cf84), C(b2e11a375a352f), C(a70467d0fd624cf1), C(776b638246febf88), C(e7d1033f7faa39b5)}, {C(bcc4229e083e940e), C(7a42ebe9e8f526b5), C(bb8d1f389b0769ee), C(ae6790e9fe24c57a), C(659a16feab53eb5), C(6fd4cfade750bf16), C(31b1acd328815c81), C(ae6790e9fe24c57a), C(659a16feab53eb5), C(6fd4cfade750bf16), C(31b1acd328815c81), C(8a711090a6ccfd44), C(363240c31681b80e), C(ad791f19de0b07e9), C(d512217d21c7c370)}, {C(17c648f416fb15ca), C(fe4d070d14d71a1d), C(ff22eac66f7eb0d3), C(fa4c10f92facc6c7), C(94cad9e4daecfd58), C(6ffcf829a275d7ef), C(2a35d2436894d549), C(fa4c10f92facc6c7), C(94cad9e4daecfd58), C(6ffcf829a275d7ef), C(2a35d2436894d549), C(c9ea25549513f5a), C(93f7cf06df2d0206), C(ef0da319d38fe57c), C(f715dc84df4f4a75)}, {C(8b752dfa2f9fa592), C(ca95e87b662fe94d), C(34da3aadfa49936d), C(bf1696df6e61f235), C(9724fac2c03e3859), C(d9fd1463b07a8b61), C(f8e397251053d8ca), C(bf1696df6e61f235), C(9724fac2c03e3859), C(d9fd1463b07a8b61), C(f8e397251053d8ca), C(c6d26d868c9e858e), C(2f4a1cb842ed6105), C(6cc48927bd59d1c9), C(469e836d0b7901e1)}, {C(3edda5262a7869bf), C(a15eab8c522050c9), C(ba0853c48707207b), C(4d751c1a836dcda3), C(9747a6e96f1dd82c), C(3c986fc5c9dc9755), C(a9d04f3a92844ecd), C(4d751c1a836dcda3), C(9747a6e96f1dd82c), C(3c986fc5c9dc9755), C(a9d04f3a92844ecd), C(2da9c6cede185e36), C(fae575ef03f987d6), C(b4a6a620b2bee11a), C(8acba91c5813c424)}, {C(b5776f9ceaf0dba2), C(546eee4cee927b0a), C(ce70d774c7b1cf77), C(7f707785c2d807d7), C(1ea8247d40cdfae9), C(4945806eac060028), C(1a14948790321c37), C(7f707785c2d807d7), C(1ea8247d40cdfae9), C(4945806eac060028), C(1a14948790321c37), C(ba3327bf0a6ab79e), C(54e2939592862de8), C(b7d4651234fa11c7), C(d122970552454def)}, {C(313161f3ce61ec83), C(c6c5acb78303987d), C(f00761c6c6e44cee), C(ea660b39d2528951), C(e84537f81a44826a), C(b850bbb69593c26d), C(22499793145e1209), C(ea660b39d2528951), C(e84537f81a44826a), C(b850bbb69593c26d), C(22499793145e1209), C(4c61b993560bbd58), C(636d296abe771743), C(f1861b17b8bc3146), C(cd5fca4649d30f8a)}, {C(6e23080c57f4bcb), C(5f4dad6078644535), C(f1591bc445804407), C(46ca76959d0d4824), C(200b16bb4031e6a5), C(3d0e4718ed5363d2), C(4c8cfcc96382106f), C(46ca76959d0d4824), C(200b16bb4031e6a5), C(3d0e4718ed5363d2), C(4c8cfcc96382106f), C(8d6258d795b8097b), C(23ae7cd1cab4b141), C(cbe74e8fd420afa), C(d553da4575629c63)}, {C(a194c120f440fd48), C(ac0d985eef446947), C(5df9fa7d97244438), C(fce2269035535eba), C(2d9b4b2010a90960), C(2b0952b893dd72f0), C(9a51e8462c1111de), C(fce2269035535eba), C(2d9b4b2010a90960), C(2b0952b893dd72f0), C(9a51e8462c1111de), C(8682b5e0624432a4), C(de8500edda7c67a9), C(4821b171f562c5a2), C(ecb17dea1002e2df)}, {C(3c78f67ee87b62fe), C(274c83c73f20f662), C(25a94c36d3763332), C(7e053f1b873bed61), C(d1c343547cd9c816), C(4deee69b90a52394), C(14038f0f3128ca46), C(7e053f1b873bed61), C(d1c343547cd9c816), C(4deee69b90a52394), C(14038f0f3128ca46), C(ebbf836e38c70747), C(c3c1077b9a7598d0), C(e73c720a27b07ba7), C(ec57f8a9a75af4d9)}, {C(b7d2aee81871e3ac), C(872ac6546cc94ff2), C(a1b0d2f507ad2d8f), C(bdd983653b339252), C(c02783d47ab815f8), C(36c5dc27d64d776c), C(5193988eea7df808), C(bdd983653b339252), C(c02783d47ab815f8), C(36c5dc27d64d776c), C(5193988eea7df808), C(8d8cca9c605cdb4a), C(334904fd32a1f934), C(dbfc15742057a47f), C(f3f92db42ec0cba1)}, {C(41ec0382933e8f72), C(bd5e52d651bf3a41), C(cbf51a6873d4b29e), C(1c8c650bfed2c546), C(9c9085c070350c27), C(e82305be3bded854), C(cf56326bab3d685d), C(1c8c650bfed2c546), C(9c9085c070350c27), C(e82305be3bded854), C(cf56326bab3d685d), C(f94db129adc6cecc), C(1f80871ec4b35deb), C(c0dc1a4c74d63d0), C(d3cac509f998c174)}, {C(7fe4e777602797f0), C(626e62f39f7c575d), C(d15d6185215fee2f), C(f82ef80641514b70), C(e2702de53389d34e), C(9950592b7f2da8d8), C(d6b960bf3503f893), C(f82ef80641514b70), C(e2702de53389d34e), C(9950592b7f2da8d8), C(d6b960bf3503f893), C(95de69e4f131a9b), C(ee6f56eeff9cdefa), C(28f4f86c2b856b72), C(b73d2decaac56b5b)}, {C(aa71127fd91bd68a), C(960f6304500f8069), C(5cfa9758933beba8), C(dcbbdeb1f56b0ac5), C(45164c603d084ce4), C(85693f4ef7e34314), C(e3a3e3a5ec1f6252), C(dcbbdeb1f56b0ac5), C(45164c603d084ce4), C(85693f4ef7e34314), C(e3a3e3a5ec1f6252), C(91f4711c59532bab), C(5e5a61d26f97200b), C(ffa65a1a41da5883), C(5f0e712235371eef)}, {C(677b53782a8af152), C(90d76ef694361f72), C(fa2cb9714617a9e0), C(72c8667cc1e45aa9), C(3a0aa035bbcd1ef6), C(588e89b034fde91b), C(f62e4e1d81c1687), C(72c8667cc1e45aa9), C(3a0aa035bbcd1ef6), C(588e89b034fde91b), C(f62e4e1d81c1687), C(1ea81508efa11e09), C(1cf493a4dcd49aad), C(8217d0fbe8226130), C(607b979c0eb297dd)}, {C(8f97bb03473c860f), C(e23e420f9a32e4a2), C(3432c97895fea7cf), C(69cc85dac0991c6c), C(4a6c529f94e9c36a), C(e5865f8da8c887df), C(27e8c77da38582e0), C(69cc85dac0991c6c), C(4a6c529f94e9c36a), C(e5865f8da8c887df), C(27e8c77da38582e0), C(8e60596b4e327dbc), C(955cf21baa1ddb18), C(c24a8eb9360370aa), C(70d75fd116c2cab1)}, {C(fe50ea9f58e4de6f), C(f0a085b814230ce7), C(89407f0548f90e9d), C(6c595ea139648eba), C(efe867c726ab2974), C(26f48ecc1c3821cf), C(55c63c1b3d0f1549), C(6c595ea139648eba), C(efe867c726ab2974), C(26f48ecc1c3821cf), C(55c63c1b3d0f1549), C(552e5f78e1d87a69), C(c9bfe2747a4eedf0), C(d5230acb6ef95a1), C(1e812f3c0d9962bd)}, {C(56eb0fcb9852bd27), C(c817b9a578c7b12), C(45427842795bfa84), C(8dccc5f52a65030c), C(f89ffa1f4fab979), C(7d94da4a61305982), C(1ba6839d59f1a07a), C(8dccc5f52a65030c), C(f89ffa1f4fab979), C(7d94da4a61305982), C(1ba6839d59f1a07a), C(e0162ec1f40d583e), C(6abf0b85552c7c33), C(f14bb021a875867d), C(c12a569c8bfe3ba7)}, {C(6be2903d8f07af90), C(26aaf7b795987ae8), C(44a19337cb53fdeb), C(f0e14afc59e29a3a), C(a4d0084172a98c0d), C(275998a345d04f0f), C(db73704d81680e8d), C(f0e14afc59e29a3a), C(a4d0084172a98c0d), C(275998a345d04f0f), C(db73704d81680e8d), C(351388cf7529b1b1), C(a3155d0237571da5), C(355231b516da2890), C(263c5a3d498c1cc)}, {C(58668066da6bfc4), C(a4ea2eb7212df3dd), C(481f64f7ca220524), C(11b3b649b1cea339), C(57f4ad5b54d71118), C(feeb30bec803ab49), C(6ed9bcc1973d9bf9), C(11b3b649b1cea339), C(57f4ad5b54d71118), C(feeb30bec803ab49), C(6ed9bcc1973d9bf9), C(bf2859d9964a70c8), C(d31ab162ca25f24e), C(70349336ff55d5d5), C(9a2fa97115ef4409)}, {C(2d04d1fbab341106), C(efe0c5b2878b444c), C(882a2a889b5e8e71), C(18cc96be09e5455), C(1ad58fd26919e409), C(76593521c4a0006b), C(f1361f348fa7cbfb), C(18cc96be09e5455), C(1ad58fd26919e409), C(76593521c4a0006b), C(f1361f348fa7cbfb), C(205bc68e660b0560), C(74360e11f9fc367e), C(a88b7b0fa86caf), C(a982d749b30d4e4c)}, {C(d366b37bcd83805b), C(a6d16fea50466886), C(cb76dfa8eaf74d70), C(389c44e423749aa), C(a30d802bec4e5430), C(9ac1279f92bea800), C(686ef471c2624025), C(389c44e423749aa), C(a30d802bec4e5430), C(9ac1279f92bea800), C(686ef471c2624025), C(2c21a72f8e3a3423), C(df5ab83f0918646a), C(cd876e0cb4df80fa), C(5abbb92679b3ea36)}, {C(bbb9bc819ab65946), C(25e0c756c95803e2), C(82a73a1e1cc9bf6a), C(671b931b702519a3), C(61609e7dc0dd9488), C(9cb329b8cab5420), C(3c64f8ea340096ca), C(671b931b702519a3), C(61609e7dc0dd9488), C(9cb329b8cab5420), C(3c64f8ea340096ca), C(1690afe3befd3afb), C(4d3c18a846602740), C(a6783133a31dd64d), C(ecf4665e6bc76729)}, {C(8e994eac99bbc61), C(84de870b6f3c114e), C(150efc95ce7b0cd2), C(4c5d48abf41185e3), C(86049a83c7cdcc70), C(ad828ff609277b93), C(f60fe028d582ccc7), C(4c5d48abf41185e3), C(86049a83c7cdcc70), C(ad828ff609277b93), C(f60fe028d582ccc7), C(464e0b174da0cbd4), C(eadf1df69041b06e), C(48cb9c96a9df1cdc), C(b7e5ee62809223a1)}, {C(364cabf6585e2f7d), C(3be1cc452509807e), C(1236ce85788680d4), C(4cea77c54fc3583a), C(9a2a64766fd77614), C(63e6c9254b5dc4db), C(26af12ba3bf5988e), C(4cea77c54fc3583a), C(9a2a64766fd77614), C(63e6c9254b5dc4db), C(26af12ba3bf5988e), C(4a821aca3ffa26a1), C(99aa9aacbb3d08e3), C(619ac77b52e8a823), C(68c745a1ce4b7adb)}, {C(e878e2200893d775), C(76b1e0a25867a803), C(9c14d6d91f5ae2c5), C(ac0ffd8d64e242ed), C(e1673ee2dd997587), C(8cdf3e9369d61003), C(c37c9a5258b98eba), C(ac0ffd8d64e242ed), C(e1673ee2dd997587), C(8cdf3e9369d61003), C(c37c9a5258b98eba), C(f252b2e7b67dd012), C(47fc1eb088858f28), C(59c42e4af1353223), C(e05b6c61c19eb26e)}, {C(6f6a014b9a861926), C(269e13a120277867), C(37fc8a181e78711b), C(33dd054c41f3aef2), C(4fc8ab1a2ef3da7b), C(597178c3756a06dc), C(748f8aadc540116f), C(33dd054c41f3aef2), C(4fc8ab1a2ef3da7b), C(597178c3756a06dc), C(748f8aadc540116f), C(78e3be34de99461e), C(28b7b60d90dddab4), C(e47475fa9327a619), C(88b17629e6265924)}, {C(da52b64212e8149b), C(121e713c1692086f), C(f3d63cfa03850a02), C(f0d82bafec3c564c), C(37dece35b549a1ce), C(5fb28f6078c4a2bd), C(b69990b7d9405710), C(f0d82bafec3c564c), C(37dece35b549a1ce), C(5fb28f6078c4a2bd), C(b69990b7d9405710), C(3af5223132071100), C(56d5bb35f3bb5d2a), C(fcad4a4d5d3a1bc7), C(f17bf3d8853724d0)}, {C(1100f797ce53a629), C(f528c6614a1a30c2), C(30e49fb56bec67fa), C(f991664844003cf5), C(d54f5f6c8c7cf835), C(ca9cc4437c591ef3), C(d5871c77cf8fb424), C(f991664844003cf5), C(d54f5f6c8c7cf835), C(ca9cc4437c591ef3), C(d5871c77cf8fb424), C(5cf90f1e617b750c), C(1648f825ab986232), C(936cf225126a60), C(90fa5311d6f2445c)}, {C(4f00655b76e9cfda), C(9dc5c707772ed283), C(b0f885f1e01927ec), C(6e4d6843289dfb47), C(357b41c6e5fd561f), C(491e386bacb6df3c), C(86be1b64ecd9945c), C(6e4d6843289dfb47), C(357b41c6e5fd561f), C(491e386bacb6df3c), C(86be1b64ecd9945c), C(be9547e3cfd85fae), C(f9e26ac346b430a8), C(38508b84b0e68cff), C(a28d49dbd5562703)}, {C(d970198b6ca854db), C(92e3d1786ae556a0), C(99a165d7f0d85cf1), C(6548910c5f668397), C(a5c8d20873e7de65), C(5b7c4ecfb8e38e81), C(6aa50a5531dad63e), C(6548910c5f668397), C(a5c8d20873e7de65), C(5b7c4ecfb8e38e81), C(6aa50a5531dad63e), C(ab903d724449e003), C(ea3cc836c28fef88), C(4b250d6c7200949d), C(13a110654fa916c0)}, {C(76c850754f28803), C(a4bffed2982cb821), C(6710e352247caf63), C(d9cbf5b9c31d964e), C(25c8f890178b97ae), C(e7c46064676cde9f), C(d8bb5eeb49c06336), C(d9cbf5b9c31d964e), C(25c8f890178b97ae), C(e7c46064676cde9f), C(d8bb5eeb49c06336), C(962b35ae89d5f4c1), C(c49083801ac2c21), C(2db46ddec36ff33b), C(da48992ab8da284)}, {C(9c98da9763f0d691), C(f5437139a3d40401), C(6f493c26c42f91e2), C(e857e4ab2d124d5), C(6417bb2f363f36da), C(adc36c9c92193bb1), C(d35bd456172df3df), C(e857e4ab2d124d5), C(6417bb2f363f36da), C(adc36c9c92193bb1), C(d35bd456172df3df), C(577da94064d3a3d6), C(23f13d7532ea496a), C(6e09392d80b8e85b), C(2e05ff6f23663892)}, {C(22f8f6869a5f325), C(a0e7a96180772c26), C(cb71ea6825fa3b77), C(39d3dec4e718e903), C(900c9fbdf1ae2428), C(305301da2584818), C(c6831f674e1fdb1f), C(39d3dec4e718e903), C(900c9fbdf1ae2428), C(305301da2584818), C(c6831f674e1fdb1f), C(8ad0e38ffe71babf), C(554ac85a8a837e64), C(9900c582cf401356), C(169f646b01ed7762)}, {C(9ae7575fc14256bb), C(ab9c5a397fabc1b3), C(1d3f582aaa724b2e), C(94412f598ef156), C(15bf1a588f25b327), C(5756646bd68ce022), C(f062a7d29be259a5), C(94412f598ef156), C(15bf1a588f25b327), C(5756646bd68ce022), C(f062a7d29be259a5), C(aa99c683cfb60b26), C(9e3b7d4b17f91273), C(301d3f5422dd34cf), C(53d3769127253551)}, {C(540040e79752b619), C(670327e237c88cb3), C(50962f261bcc31d9), C(9a8ea2b68b2847ec), C(bc24ab7d4cbbda31), C(df5aff1cd42a9b57), C(db47d368295f4628), C(9a8ea2b68b2847ec), C(bc24ab7d4cbbda31), C(df5aff1cd42a9b57), C(db47d368295f4628), C(9a66c221d1bf3f3), C(7ae74ee1281de8ee), C(a4e173e2c787621f), C(5b51062d10ae472)}, {C(34cbf85722d897b1), C(6208cb2a0fff4eba), C(e926cbc7e86f544e), C(883706c4321efee0), C(8fd5d3d84c7827e4), C(a5c80e455a7ccaaa), C(3515f41164654591), C(883706c4321efee0), C(8fd5d3d84c7827e4), C(a5c80e455a7ccaaa), C(3515f41164654591), C(2c08bfc75dbfd261), C(6e9eadf14f8c965e), C(18783f5770cd19a3), C(a6c7f2f1aa7b59ea)}, {C(46afa66366bf5989), C(aa0d424ac649008b), C(97a9108b3cd9c5c9), C(6ca08e09227a9630), C(8b11f73a8e5b80eb), C(2391bb535dc7ce02), C(e43e2529cf36f4b9), C(6ca08e09227a9630), C(8b11f73a8e5b80eb), C(2391bb535dc7ce02), C(e43e2529cf36f4b9), C(c9bd6d82b7a73d9d), C(b2ed9bae888447ac), C(bd22bb13af0cd06d), C(62781441785b355b)}, {C(e15074b077c6e560), C(7c8f2173fcc34afa), C(8aad55bc3bd38370), C(d407ecdbfb7cb138), C(642442eff44578af), C(d3e9fdaf71a5b79e), C(c87c53eda46aa860), C(d407ecdbfb7cb138), C(642442eff44578af), C(d3e9fdaf71a5b79e), C(c87c53eda46aa860), C(8462310a2c76ff51), C(1bc17a2e0976665e), C(6ec446b13b4d79cf), C(388c7a904b4264c1)}, {C(9740b2b2d6d06c6), C(e738265f9de8dafc), C(fdc947c1fca8be9e), C(d6936b41687c1e3d), C(a1a2deb673345994), C(91501e58b17168bd), C(b8edee2b0b708dfc), C(d6936b41687c1e3d), C(a1a2deb673345994), C(91501e58b17168bd), C(b8edee2b0b708dfc), C(ddf4b43dafd17445), C(44015d050a04ce5c), C(1019fd9ab82c4655), C(c803aea0957bcdd1)}, {C(f1431889f2db1bff), C(85257aa1dc6bd0d0), C(1abbdea0edda5be4), C(775aa89d278f26c3), C(a542d20265e3ef09), C(933bdcac58a33090), C(c43614862666ca42), C(775aa89d278f26c3), C(a542d20265e3ef09), C(933bdcac58a33090), C(c43614862666ca42), C(4c5e54d481a9748d), C(65ce3cd0db838b26), C(9ccbb4005c7f09d2), C(e6dda9555dde899a)}, {C(e2dd273a8d28c52d), C(8cd95915fdcfd96b), C(67c0f5b1025f0699), C(cbc94668d48df4d9), C(7e3d656e49d632d1), C(8329e30cac7a61d4), C(38e6cd1e2034e668), C(cbc94668d48df4d9), C(7e3d656e49d632d1), C(8329e30cac7a61d4), C(38e6cd1e2034e668), C(41e0bce03ed9394b), C(7be48d0158b9834a), C(9ea8d5d1a976b18b), C(606c424c33617e7a)}, {C(e0f79029834cc6ac), C(f2b1dcb87cc5e94c), C(4210bc221fe5e70a), C(fd4a4301d4e2ac67), C(8f84358d25b2999b), C(6c4b7d8a5a22ccbb), C(25df606bb23c9d40), C(fd4a4301d4e2ac67), C(8f84358d25b2999b), C(6c4b7d8a5a22ccbb), C(25df606bb23c9d40), C(915298b0eaadf85b), C(5ec23cc4c6a74e62), C(d640a4ff99763439), C(1603753fb34ad427)}, {C(9dc0a29830bcbec1), C(ec4a01dbd52d96a0), C(cd49c657eff87b05), C(ea487fe948c399e1), C(f5de9b2e59192609), C(4604d9b3248b3a5), C(1929878a22c86a1d), C(ea487fe948c399e1), C(f5de9b2e59192609), C(4604d9b3248b3a5), C(1929878a22c86a1d), C(3cf6cd7c19dfa1ef), C(46e404ee4af2d726), C(613ab0588a5527b5), C(73e39385ced7e684)}, {C(d10b70dde60270a6), C(be0f3b256e23422a), C(6c601297a3739826), C(e327ffc477cd2467), C(ebebba63911f32b2), C(2c2c5c24cf4970a2), C(a3cd2c192c1b8bf), C(e327ffc477cd2467), C(ebebba63911f32b2), C(2c2c5c24cf4970a2), C(a3cd2c192c1b8bf), C(94cb02c94aaf250b), C(30ca38d5e3dac579), C(d68598a91dc597b5), C(162b050e8de2d92)}, {C(58d2459f094d075c), C(b4df247528d23251), C(355283f2128a9e71), C(d046198e4df506c2), C(c61bb9705786ae53), C(b360200380d10da8), C(59942bf009ee7bc), C(d046198e4df506c2), C(c61bb9705786ae53), C(b360200380d10da8), C(59942bf009ee7bc), C(95806d027f8d245e), C(32df87487ed9d0f4), C(e2c5bc224ce97a98), C(9a47c1e33cfb1cc5)}, {C(68c600cdd42d9f65), C(bdf0c331f039ff25), C(1354ac1d98944023), C(b5cdfc0b06fd1bd9), C(71f0ce33b183efab), C(d8ae4f9d4b949755), C(877da19d6424f6b3), C(b5cdfc0b06fd1bd9), C(71f0ce33b183efab), C(d8ae4f9d4b949755), C(877da19d6424f6b3), C(f7cc5cbf76bc6006), C(c93078f44b98efdb), C(3d482142c727e8bc), C(8e23f92e0616d711)}, {C(9fc0bd876cb975da), C(80f41015045d1ade), C(5cbf601fc55c809a), C(7d9c567075001705), C(a2fafeed0df46d5d), C(a70b82990031da8f), C(8611c76abf697e56), C(7d9c567075001705), C(a2fafeed0df46d5d), C(a70b82990031da8f), C(8611c76abf697e56), C(806911617e1ee53), C(1ce82ae909fba503), C(52df85fea9e404bd), C(dbd184e5d9a11a3e)}, {C(7b3e8c267146c361), C(c6ad095af345b726), C(af702ddc731948bd), C(7ca4c883bded44b5), C(c90beb31ee9b699a), C(2cdb4aba3d59b8a3), C(df0d4fa685e938f0), C(7ca4c883bded44b5), C(c90beb31ee9b699a), C(2cdb4aba3d59b8a3), C(df0d4fa685e938f0), C(cc0e568e91aaa382), C(70ca583a464dbea), C(b7a5859b44710e1a), C(ad141467fdf9a83a)}, {C(6c49c6b3c9dd340f), C(897c41d89af37bd1), C(52df69e0e2c68a8d), C(eec4be1f65531a50), C(bf23d928f20f1b50), C(c642009b9c593940), C(c5e59e6ca9e96f85), C(eec4be1f65531a50), C(bf23d928f20f1b50), C(c642009b9c593940), C(c5e59e6ca9e96f85), C(7fbd53343e7da499), C(dd87e7b88afbd251), C(92696e7683b9f322), C(60ff51ef02c24652)}, {C(47324327a4cf1732), C(6044753d211e1dd5), C(1ecae46d75192d3b), C(b6d6315a902807e3), C(ccc8312c1b488e5d), C(b933a7b48a338ec), C(9d6753cd83422074), C(b6d6315a902807e3), C(ccc8312c1b488e5d), C(b933a7b48a338ec), C(9d6753cd83422074), C(5714bd5c0efdc7a8), C(221585e2c88068ca), C(303342b25678904), C(8c174a03e69a76e)}, {C(1e984ef53c5f6aae), C(99ea10dac804298b), C(a3f8c241100fb14d), C(259eb3c63a9c9be6), C(f8991532947c7037), C(a16d20b3fc29cfee), C(493c2e91a775af8c), C(259eb3c63a9c9be6), C(f8991532947c7037), C(a16d20b3fc29cfee), C(493c2e91a775af8c), C(275fccf4acb08abc), C(d13fb6ea3eeaf070), C(505283e5b702b9ea), C(64c092f9f8df1901)}, {C(b88f5c9b8b854cc6), C(54fc5d39825b446), C(a12fc1546eac665d), C(ab90eb7fa58b280c), C(dda26598356aa599), C(64191d63f2586e52), C(cada0075c34e8b02), C(ab90eb7fa58b280c), C(dda26598356aa599), C(64191d63f2586e52), C(cada0075c34e8b02), C(e7de6532b691d87c), C(a28fec86e368624), C(796c280eebd0241a), C(acfcecb641fdbeee)}, {C(9fcb3fdb09e7a63a), C(7a115c9ded150112), C(e9ba629108852f37), C(9b03c7c218c192a), C(93c1dd563f46308e), C(f9553625917ea800), C(e0a52f8a5024c59), C(9b03c7c218c192a), C(93c1dd563f46308e), C(f9553625917ea800), C(e0a52f8a5024c59), C(2bb3a9e8b053e490), C(8b97936723cd8ff6), C(bf3f835246d02722), C(c8e033da88ecd724)}, {C(d58438d62089243), C(d8c19375b228e9d3), C(13042546ed96e790), C(4a42ef343514138c), C(549e62449e225cf1), C(dd8260e2808f68e8), C(69580fc81fcf281b), C(4a42ef343514138c), C(549e62449e225cf1), C(dd8260e2808f68e8), C(69580fc81fcf281b), C(fc0e30d682e87289), C(f44b784248d6107b), C(df25119527fdf209), C(cc265612588171a8)}, {C(7ea73b6b74c8cd0b), C(e07188dd9b5bf3ca), C(6ef62ff2dd008ed4), C(acd94b3038342152), C(1b0ed99c9b7ba297), C(b794a93f4c895939), C(97a60cd93021206d), C(acd94b3038342152), C(1b0ed99c9b7ba297), C(b794a93f4c895939), C(97a60cd93021206d), C(9e0c0e6da5001b07), C(5f5b817de5d2a391), C(35b8a8702acdd533), C(3bbcfef344f455)}, {C(e42ffdf6278bb21), C(59df3e5ca582ff9d), C(f3108785599dbde9), C(f78e8a2d4aba6a1d), C(700473fb0d8380fc), C(d0a0d68061ac74b2), C(11650612fa426e5a), C(f78e8a2d4aba6a1d), C(700473fb0d8380fc), C(d0a0d68061ac74b2), C(11650612fa426e5a), C(e39ceb5b2955710c), C(f559ff201f8cebaa), C(1fbc182809e829a0), C(295c7fc82fa6fb5b)}, {C(9ad37fcd49fe4aa0), C(76d40da71930f708), C(bea08b630f731623), C(797292108901a81f), C(3b94127b18fae49c), C(688247179f144f1b), C(48a507a1625d13d7), C(797292108901a81f), C(3b94127b18fae49c), C(688247179f144f1b), C(48a507a1625d13d7), C(452322aaad817005), C(51d730d973e13d44), C(c883eb30176652ea), C(8d338fd678b2404d)}, {C(27b7ff391136696e), C(60db94a18593438c), C(b5e46d79c4dafbad), C(ad56fd25a6f15289), C(68a0ec7c0179df80), C(a0aacfc36620957), C(87a0762a09e2e1c1), C(ad56fd25a6f15289), C(68a0ec7c0179df80), C(a0aacfc36620957), C(87a0762a09e2e1c1), C(d50ace99460f0be3), C(7f1fe5653ae0d999), C(3870899d9d6c22c), C(df5f952dd90d5a09)}, {C(76bd077e42692ddf), C(c14b60958c2c7a85), C(fd9f3b0b3b1e2738), C(273d2c51a8e65e71), C(ac531423f670bf34), C(7f40c6bfb8c5758a), C(5fde65b433a10b02), C(273d2c51a8e65e71), C(ac531423f670bf34), C(7f40c6bfb8c5758a), C(5fde65b433a10b02), C(dbda6c4252b0a75c), C(5d4cfd8f937b23d9), C(3895f478e1c29c9d), C(e3e7c1fd1199aec6)}, {C(81c672225442e053), C(927c3f6c8964050e), C(cb59f8f2bb36fac5), C(298f3583326fd942), C(b85602a9a2e2f97c), C(65c849bfa3191459), C(bf21329dfb496c0d), C(298f3583326fd942), C(b85602a9a2e2f97c), C(65c849bfa3191459), C(bf21329dfb496c0d), C(ea7b7b44c596aa18), C(c18bfb6e9a36d59c), C(1b55f03e8a38cc0a), C(b6a94cd47bbf847f)}, {C(37b9e308747448ca), C(513f39f5545b1bd), C(145b32114ca00f9c), C(cce24b9910eb0489), C(af4ac64668ac57d9), C(ea0e44c13a9a5d5e), C(b224fb0c680455f4), C(cce24b9910eb0489), C(af4ac64668ac57d9), C(ea0e44c13a9a5d5e), C(b224fb0c680455f4), C(a7714bbba8699be7), C(fecad6e0e0092204), C(c1ce8bd5ac247eb4), C(3993aef5c07cdca2)}, {C(dab71695950a51d4), C(9e98e4dfa07566fe), C(fab3587513b84ec0), C(2409f60f0854f305), C(b17f6e6c8ff1894c), C(62fa048551dc7ad6), C(d99f4fe2799bad72), C(2409f60f0854f305), C(b17f6e6c8ff1894c), C(62fa048551dc7ad6), C(d99f4fe2799bad72), C(4a38e7f2f4a669d3), C(53173510ca91f0e3), C(cc9096c0df860b0), C(52ed637026a4a0d5)}, {C(28630288285c747b), C(a165a5bf51aaec95), C(927d211f27370016), C(727c782893d30c22), C(742706852989c247), C(c546494c3bb5e7e2), C(1fb2a5d1570f5dc0), C(727c782893d30c22), C(742706852989c247), C(c546494c3bb5e7e2), C(1fb2a5d1570f5dc0), C(71e498804df91b76), C(4a6a5aa6f7e5621), C(871a63730d13a544), C(63f77c8f371cc2f8)}, {C(4b591ad5160b6c1b), C(e8f85ddd5a1143f7), C(377e18171476d64), C(829481773cce2cb1), C(c9d9fb4e25e4d243), C(c1fff894f0cf713b), C(69edd73ec20984b0), C(829481773cce2cb1), C(c9d9fb4e25e4d243), C(c1fff894f0cf713b), C(69edd73ec20984b0), C(7fb1132262925f4a), C(a292e214fe56794f), C(915bfee68e16f46f), C(98bcc857bb6d31e7)}, {C(7e02f7a5a97dd3df), C(9724a88ac8c30809), C(d8dee12589eeaf36), C(c61f8fa31ad1885b), C(3e3744e04485ff9a), C(939335b37f34c7a2), C(faa5de308dbbbc39), C(c61f8fa31ad1885b), C(3e3744e04485ff9a), C(939335b37f34c7a2), C(faa5de308dbbbc39), C(f5996b1be7837a75), C(4fcb12d267f5af4f), C(39be67b8cd132169), C(5c39e3819198b8a1)}, {C(ff66660873521fb2), C(d82841f7e714ce03), C(c830d273f005e378), C(66990c8c54782228), C(4f28bea83dda97c), C(6a24c64698688de0), C(69721141111da99b), C(66990c8c54782228), C(4f28bea83dda97c), C(6a24c64698688de0), C(69721141111da99b), C(d5c771fade83931b), C(8094ed75e6feb396), C(7a79d4de8efd1a2c), C(5f9e50167693e363)}, {C(ef3c4dd60fa37412), C(e8d2898c86d11327), C(8c883d860aafacfe), C(a4ace72ba19d6de5), C(4cae26627dfc5511), C(38e496de9f677b05), C(558770996e1906d6), C(a4ace72ba19d6de5), C(4cae26627dfc5511), C(38e496de9f677b05), C(558770996e1906d6), C(40df30e332ceca69), C(8f106cbd94166c42), C(332b6ab4f4c1014e), C(7c0bc3092ad850e5)}, {C(a7b07bcb1a1333ba), C(9d007956720914c3), C(4751f60ef2b15545), C(77ac4dcee10c9023), C(e90235108fa20e56), C(1d3ea38535215800), C(5ed1ccfff26bc64), C(77ac4dcee10c9023), C(e90235108fa20e56), C(1d3ea38535215800), C(5ed1ccfff26bc64), C(789a1c352bf5c61e), C(860a119056da8252), C(a6c268a238699086), C(4d70f5cccf4ef2eb)}, {C(89858fc94ee25469), C(f72193b78aeaa896), C(7dba382760727c27), C(846b72f372f1685a), C(f708db2fead5433c), C(c04e121770ee5dc), C(4619793b67d0daa4), C(846b72f372f1685a), C(f708db2fead5433c), C(c04e121770ee5dc), C(4619793b67d0daa4), C(79f80506f152285f), C(5300074926fccd56), C(7fbbff6cc418fce6), C(b908f77c676b32e4)}, {C(e6344d83aafdca2e), C(6e147816e6ebf87), C(8508c38680732caf), C(f4ce36d3a375c981), C(9d67e5572f8d7bf4), C(900d63d9ec79e477), C(5251c85ab52839a3), C(f4ce36d3a375c981), C(9d67e5572f8d7bf4), C(900d63d9ec79e477), C(5251c85ab52839a3), C(92ec4b3952e38027), C(40b2dc421a518cbf), C(661ea97b2331a070), C(8d428a4a9485179b)}, {C(3ddbb400198d3d4d), C(fe73de3ada21af5c), C(cd7df833dacd8da3), C(162be779eea87bf8), C(7d62d36edf759e6d), C(dc20f528362e37b2), C(1a902edfe4a5824e), C(162be779eea87bf8), C(7d62d36edf759e6d), C(dc20f528362e37b2), C(1a902edfe4a5824e), C(e6a258d30fa817ba), C(c5d73adf6fb196fd), C(475b7a6286a207fb), C(d35f96363e8eba95)}, {C(79d4c20cf83a7732), C(651ea0a6ab059bcd), C(94631144f363cdef), C(894a0ee0c1f87a22), C(4e682573f8b38f25), C(89803fc082816289), C(71613963a02d90e1), C(894a0ee0c1f87a22), C(4e682573f8b38f25), C(89803fc082816289), C(71613963a02d90e1), C(4c6cc0e5a737c910), C(a3765b5da16bccd9), C(8bf483c4d735ec96), C(7fd7c8ba1934afec)}, {C(5aaf0d7b669173b5), C(19661ca108694547), C(5d03d681639d71fe), C(7c422f4a12fd1a66), C(aa561203e7413665), C(e99d8d202a04d573), C(6090357ec6f1f1), C(7c422f4a12fd1a66), C(aa561203e7413665), C(e99d8d202a04d573), C(6090357ec6f1f1), C(dbfe89f01f0162e), C(49aa89da4f1e389b), C(7119a6f4514efb22), C(56593f6b4e7318d9)}, {C(35d6cc883840170c), C(444694c4f8928732), C(98500f14b8741c6), C(5021ac9480077dd), C(44c2ebc11cfb9837), C(e5d310c4b5c1d9fd), C(a577102c33ac773c), C(5021ac9480077dd), C(44c2ebc11cfb9837), C(e5d310c4b5c1d9fd), C(a577102c33ac773c), C(a00d2efd2effa3cf), C(c2c33ffcda749df6), C(d172099d3b6f2986), C(f308fe33fcd23338)}, {C(b07eead7a57ff2fe), C(c1ffe295ca7dbf47), C(ef137b125cfa8851), C(8f8eec5cde7a490a), C(79916d20a405760b), C(3c30188c6d38c43c), C(b17e3c3ff7685e8d), C(8f8eec5cde7a490a), C(79916d20a405760b), C(3c30188c6d38c43c), C(b17e3c3ff7685e8d), C(ac8aa3cd0790c4c9), C(78ca60d8bf10f670), C(26f522be4fbc1184), C(55bc7688083326d4)}, {C(20fba36c76380b18), C(95c39353c2a3477d), C(4f362902cf9117ad), C(89816ec851e3f405), C(65258396f932858d), C(b7dcaf3cc57a0017), C(b368f482afc90506), C(89816ec851e3f405), C(65258396f932858d), C(b7dcaf3cc57a0017), C(b368f482afc90506), C(88f08c74465015f1), C(94ebaf209d59099d), C(c1b7ff7304b0a87), C(56bf8235257d4435)}, {C(c7e9e0c45afeab41), C(999d95f41d9ee841), C(55ef15ac11ea010), C(cc951b8eab5885d), C(956c702c88ac056b), C(de355f324a37e3c0), C(ed09057eb60bd463), C(cc951b8eab5885d), C(956c702c88ac056b), C(de355f324a37e3c0), C(ed09057eb60bd463), C(1f44b6d04a43d088), C(53631822a26ba96d), C(90305fc2d21f8d28), C(60693a9a6093351a)}, {C(69a8e59c1577145d), C(cb04a6e309ebc626), C(9b3326a5b250e9b1), C(d805f665265fd867), C(82b2b019652c19c6), C(f0df7738353c82a6), C(6a9acf124383ca5f), C(d805f665265fd867), C(82b2b019652c19c6), C(f0df7738353c82a6), C(6a9acf124383ca5f), C(6838374508a7a99f), C(7b6719db8d3e40af), C(1a22666cf0dcb7cf), C(989a9cf7f46b434d)}, {C(6638191337226509), C(42b55e08e4894870), C(a7696f5fbd51878e), C(433bbdd27481d85d), C(ee32136b5a47bbec), C(769a77f346d82f4e), C(38b91b1cb7e34be), C(433bbdd27481d85d), C(ee32136b5a47bbec), C(769a77f346d82f4e), C(38b91b1cb7e34be), C(cb10fd95c0e43875), C(ce9744efd6f11427), C(946b32bddada6a13), C(35d544690b99e3b6)}, {C(c44e8c33ff6c5e13), C(1f128a22aab3007f), C(6a8b41bf04cd593), C(1b9b0deaf126522a), C(cc51d382baedc2eb), C(8df8831bb2e75daa), C(de4e7a4b5de99588), C(1b9b0deaf126522a), C(cc51d382baedc2eb), C(8df8831bb2e75daa), C(de4e7a4b5de99588), C(55a2707103a9f968), C(e0063f4e1649702d), C(7e82f5b440e74043), C(649b44a27f00219d)}, {C(68125009158bded7), C(563a9a62753fc088), C(b97a9873a352cf6a), C(237d1de15ae56127), C(b96445f758ba57d), C(b842628a9f9938eb), C(70313d232dc2cd0d), C(237d1de15ae56127), C(b96445f758ba57d), C(b842628a9f9938eb), C(70313d232dc2cd0d), C(8bfe1f78cb40ad5b), C(a5bde811d49f56e1), C(1acd0cf913ded507), C(820b3049fa5e6786)}, {C(e0dd644db35a62d6), C(292889772752ab42), C(b80433749dbb8793), C(7032fe67035f95db), C(d8076d1fda17eb8d), C(115ca1775560f946), C(92da1e16f396bf61), C(7032fe67035f95db), C(d8076d1fda17eb8d), C(115ca1775560f946), C(92da1e16f396bf61), C(17c8bc7f6d23a639), C(fb28a2afa4d562a9), C(6c59c95fa2450d5f), C(fe0d41d5ebfbce2a)}, {C(21ce9eab220aaf87), C(27d20caec922d708), C(610c51f976cb1d30), C(6052f97a1e02d2ba), C(836eea7ce63dea17), C(e1f8efb81b443b45), C(ddbdbbe717570246), C(6052f97a1e02d2ba), C(836eea7ce63dea17), C(e1f8efb81b443b45), C(ddbdbbe717570246), C(69551045b0e56f60), C(625a435960ba7466), C(9cdb004e8b11405c), C(d6284db99a3b16af)}, {C(83b54046fdca7c1e), C(e3709e9153c01626), C(f306b5edc2682490), C(88f14b0b554fba02), C(a0ec13fac0a24d0), C(f468ebbc03b05f47), C(a9cc417c8dad17f0), C(88f14b0b554fba02), C(a0ec13fac0a24d0), C(f468ebbc03b05f47), C(a9cc417c8dad17f0), C(4c1ababa96d42275), C(c112895a2b751f17), C(5dd7d9fa55927aa9), C(ca09db548d91cd46)}, {C(dd3b2ce7dabb22fb), C(64888c62a5cb46ee), C(f004e8b4b2a97362), C(31831cf3efc20c84), C(901ba53808e677ae), C(4b36895c097d0683), C(7d93ad993f9179aa), C(31831cf3efc20c84), C(901ba53808e677ae), C(4b36895c097d0683), C(7d93ad993f9179aa), C(a4c5ea29ae78ba6b), C(9cf637af6d607193), C(5731bd261d5b3adc), C(d59a9e4f796984f3)}, {C(9ee08fc7a86b0ea6), C(5c8d17dff5768e66), C(18859672bafd1661), C(d3815c5f595e513e), C(44b3bdbdc0fe061f), C(f5f43b2a73ad2df5), C(7c0e6434c8d7553c), C(d3815c5f595e513e), C(44b3bdbdc0fe061f), C(f5f43b2a73ad2df5), C(7c0e6434c8d7553c), C(8c05859060821002), C(73629a0d275008ce), C(860c012879e6f00f), C(d48735a120d2c37c)}, {C(4e2a10f1c409dfa5), C(6e684591f5da86bd), C(ff8c9305d447cadb), C(c43ae49df25b1c86), C(d4f42115cee1ac8), C(a0e6a714471b975c), C(a40089dec5fe07b0), C(c43ae49df25b1c86), C(d4f42115cee1ac8), C(a0e6a714471b975c), C(a40089dec5fe07b0), C(18c3d8f967915e10), C(739c747dbe05adfb), C(4b0397b596e16230), C(3c57d7e1de9e58d1)}, {C(bdf3383d7216ee3c), C(eed3a37e4784d324), C(247cff656d081ba0), C(76059e4cb25d4700), C(e0af815fe1fa70ed), C(5a6ccb4f36c5b3df), C(391a274cd5f5182d), C(76059e4cb25d4700), C(e0af815fe1fa70ed), C(5a6ccb4f36c5b3df), C(391a274cd5f5182d), C(ff1579baa6a2b511), C(c385fc5062e8a728), C(e940749739a37c78), C(a093523a5b5edee5)}, {C(a22e8f6681f0267d), C(61e79bc120729914), C(86ec13c84c1600d3), C(1614811d59dcab44), C(d1ddcca9a2675c33), C(f3c551d5fa617763), C(5c78d4181402e98c), C(1614811d59dcab44), C(d1ddcca9a2675c33), C(f3c551d5fa617763), C(5c78d4181402e98c), C(b43b4a9caa6f5d4c), C(f112829bca2df8f3), C(87e5c85db80d06c3), C(8eb4bac85453409)}, {C(6997121cae0ce362), C(ba3594cbcc299a07), C(7e4b71c7de25a5e4), C(16ad89e66db557ba), C(a43c401140ffc77d), C(3780a8b3fd91e68), C(48190678248a06b5), C(16ad89e66db557ba), C(a43c401140ffc77d), C(3780a8b3fd91e68), C(48190678248a06b5), C(d10deb97b651ad42), C(3a69f3f29046a24f), C(f7179735f2c6dab4), C(ac82965ad3b67a02)}, {C(9bfc2c3e050a3c27), C(dc434110e1059ff3), C(5426055da178decd), C(cb44d00207e16f99), C(9d9e99afedc8107f), C(56907c4fb7b3bc01), C(bcff1472bb01f85a), C(cb44d00207e16f99), C(9d9e99afedc8107f), C(56907c4fb7b3bc01), C(bcff1472bb01f85a), C(516f800f74ad0985), C(f93193ade9614da4), C(9f4a7845355b75b7), C(423c17045824dea5)}, {C(a3f37e415aedf14), C(8d21c92bfa0dc545), C(a2715ebb07deaf80), C(98ce1ff2b3f99f0f), C(162acfd3b47c20bf), C(62b9a25fd39dc6c0), C(c165c3c95c878dfe), C(98ce1ff2b3f99f0f), C(162acfd3b47c20bf), C(62b9a25fd39dc6c0), C(c165c3c95c878dfe), C(2b9a7e1f055bd27c), C(e91c8099cafaa75d), C(37e38d64ef0263b), C(a46e89f47a1a70d5)}, {C(cef3c748045e7618), C(41dd44faef4ca301), C(6add718a88f383c6), C(1197eca317e70a93), C(61f9497e6cc4a33), C(22e7178d1e57af73), C(5df95da0ff1c6435), C(1197eca317e70a93), C(61f9497e6cc4a33), C(22e7178d1e57af73), C(5df95da0ff1c6435), C(934327643705e56c), C(11eb0eec553137c9), C(1e6b9b57ac5283ec), C(6934785db184b2e4)}, {C(fe2b841766a4d212), C(42cf817e58fe998c), C(29f7f493ba9cbe6c), C(2a9231d98b441827), C(fca55e769df78f6c), C(da87ea680eb14df4), C(e0b77394b0fd2bcc), C(2a9231d98b441827), C(fca55e769df78f6c), C(da87ea680eb14df4), C(e0b77394b0fd2bcc), C(f36a2a3c73ab371a), C(d52659d36d93b71), C(3d3b7d2d2fafbb14), C(b4b7b317d9266711)}, {C(d6131e688593a181), C(5b658b282688ccd3), C(b9f7c066beed1204), C(e9dd79bad89f6b19), C(b420092bae6aaf41), C(515f9bbd06069d77), C(80664957a02cbc29), C(e9dd79bad89f6b19), C(b420092bae6aaf41), C(515f9bbd06069d77), C(80664957a02cbc29), C(f9dc7a744a56d9b3), C(7eb2bdcd6667f383), C(c5914296fbdaf9d1), C(af0d5a8fec374fc4)}, {C(91288884ebfcf145), C(3dffd892d36403af), C(7c4789db82755080), C(634acbe037edec27), C(878a97fab822d804), C(fcb042af908f0577), C(4cbafc318bb90a2e), C(634acbe037edec27), C(878a97fab822d804), C(fcb042af908f0577), C(4cbafc318bb90a2e), C(68a96d589d5e5654), C(a752cb250bca1bc0), C(8f228f406024aa7e), C(fc5408cf22a080b5)}, {C(754c7e98ae3495ea), C(2030124a22512c19), C(ec241579c626c39d), C(e682b5c87fa8e41b), C(6cfa4baff26337ac), C(4d66358112f09b2a), C(58889d3f50ffa99c), C(33fc6ffd1ffb8676), C(36db7617b765f6e2), C(8df41c03c514a9dc), C(6707cc39a809bb74), C(3f27d7bb79e31984), C(a39dc6ac6cb0b0a8), C(33fc6ffd1ffb8676), C(36db7617b765f6e2)}, }; void Check(uint64 expected, uint64 actual) { if (expected != actual) { cerr << "ERROR: expected 0x" << hex << expected << ", but got 0x" << actual << "\n"; ++errors; } } void Test(const uint64* expected, int offset, int len) { const uint128 u = CityHash128(data + offset, len); const uint128 v = CityHash128WithSeed(data + offset, len, kSeed128); Check(expected[0], CityHash64(data + offset, len)); Check(expected[1], CityHash64WithSeed(data + offset, len, kSeed0)); Check(expected[2], CityHash64WithSeeds(data + offset, len, kSeed0, kSeed1)); Check(expected[3], Uint128Low64(u)); Check(expected[4], Uint128High64(u)); Check(expected[5], Uint128Low64(v)); Check(expected[6], Uint128High64(v)); #ifdef __SSE4_2__ const uint128 y = CityHashCrc128(data + offset, len); const uint128 z = CityHashCrc128WithSeed(data + offset, len, kSeed128); uint64 crc256_results[4]; CityHashCrc256(data + offset, len, crc256_results); Check(expected[7], Uint128Low64(y)); Check(expected[8], Uint128High64(y)); Check(expected[9], Uint128Low64(z)); Check(expected[10], Uint128High64(z)); for (int i = 0; i < 4; i++) { Check(expected[11 + i], crc256_results[i]); } #endif } #else #define Test(a, b, c) Dump((b), (c)) void Dump(int offset, int len) { const uint128 u = CityHash128(data + offset, len); const uint128 v = CityHash128WithSeed(data + offset, len, kSeed128); const uint128 y = CityHashCrc128(data + offset, len); const uint128 z = CityHashCrc128WithSeed(data + offset, len, kSeed128); uint64 crc256_results[4]; CityHashCrc256(data + offset, len, crc256_results); cout << hex << "{C(" << CityHash64(data + offset, len) << "), " << "C(" << CityHash64WithSeed(data + offset, len, kSeed0) << "), " << "C(" << CityHash64WithSeeds(data + offset, len, kSeed0, kSeed1) << "), " << "C(" << Uint128Low64(u) << "), " << "C(" << Uint128High64(u) << "), " << "C(" << Uint128Low64(v) << "), " << "C(" << Uint128High64(v) << "),\n" << "C(" << Uint128Low64(y) << "), " << "C(" << Uint128High64(y) << "), " << "C(" << Uint128Low64(z) << "), " << "C(" << Uint128High64(z) << "),\n"; for (int i = 0; i < 4; i++) { cout << hex << "C(" << crc256_results[i] << (i == 3 ? ")},\n" : "), "); } } #endif int main(int argc, char** argv) { setup(); int i = 0; for ( ; i < kTestSize - 1; i++) { Test(testdata[i], i * i, i); } Test(testdata[i], 0, kDataSize); return errors > 0; } dlt-daemon-2.18.6/src/core_dump_handler/cityhash_c/city_c.c000066400000000000000000000425131377520261000236410ustar00rootroot00000000000000/* Copyright (c) 2011 Google, Inc. */ /* */ /* 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. */ /* */ /* CityHash, by Geoff Pike and Jyrki Alakuijala */ /* */ /* This file provides CityHash64() and related functions. */ /* */ /* It's probably possible to create even faster hash functions by */ /* writing a program that systematically explores some of the space of */ /* possible hash functions, by using SIMD instructions, or by */ /* compromising on hash quality. */ #include "city_c.h" #include #if defined(__sparc) || defined(__sparc__) \ || defined(_POWER) || defined(__powerpc__) \ || defined(__ppc__) || defined(__hpux) || defined(__hppa) \ || defined(_MIPSEB) || defined(_POWER) \ || defined(__s390__) # define WORDS_BIGENDIAN #elif defined(__i386__) || defined(__alpha__) \ || defined(__ia64) || defined(__ia64__) \ || defined(_M_IX86) || defined(_M_IA64) \ || defined(_M_ALPHA) || defined(__amd64) \ || defined(__amd64__) || defined(_M_AMD64) \ || defined(__x86_64) || defined(__x86_64__) \ || defined(_M_X64) || defined(__bfin__) # define WORDS_LITTLEENDIAN #endif #if !defined(WORDS_BIGENDIAN) # define uint32_in_expected_order(x) (x) # define uint64_in_expected_order(x) (x) #else # if defined _MSC_VER # include # define bswap_32(x) _byteswap_ulong(x) # define bswap_64(x) _byteswap_uint64(x) # elif defined(__APPLE__) /* Mac OS X / Darwin features */ # include # define bswap_32(x) OSSwapInt32(x) # define bswap_64(x) OSSwapInt64(x) # else # include # endif # define uint32_in_expected_order(x) (bswap_32(x)) # define uint64_in_expected_order(x) (bswap_64(x)) #endif /* WORDS_BIGENDIAN */ #if !defined inline # ifdef _MSC_VER # define inline __inline # endif #endif #if !defined LIKELY # if defined __GNUC__ && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96))/*GCC 2.96 above */ # define LIKELY(x) (__builtin_expect(!!(x), 1)) # else # define LIKELY(x) (x) # endif #endif #define UNSAFE_SWAP(type, a, b) do { type tmp; tmp = (a); (a) = (b); (b) = tmp; } while (0) static inline uint128 UInt128(uint64 low, uint64 high) { uint128 val; val.first = low; val.second = high; return val; } static inline uint64 UNALIGNED_LOAD64(const char *p) { uint64 result; memcpy(&result, p, sizeof(result)); return result; } static inline uint32 UNALIGNED_LOAD32(const char *p) { uint32 result; memcpy(&result, p, sizeof(result)); return result; } static uint64 Hash64Pairto64(uint64 u, uint64 v) { /* Murmur-inspired hashing. */ static const uint64 kMul = 0x9ddfea08eb382d69ULL; uint64 a, b; a = (u ^ v) * kMul; a ^= (a >> 47); b = (v ^ a) * kMul; b ^= (b >> 47); b *= kMul; return b; } static inline uint64 Fetch64(const char *p) { return uint64_in_expected_order(UNALIGNED_LOAD64(p)); } static inline uint32 Fetch32(const char *p) { return uint32_in_expected_order(UNALIGNED_LOAD32(p)); } /* Some primes between 2^63 and 2^64 for various uses. */ static const uint64 k0 = 0xc3a5c85c97cb3127ULL; static const uint64 k1 = 0xb492b66fbe98f273ULL; static const uint64 k2 = 0x9ae16a3b2f90404fULL; static const uint64 k3 = 0xc949d7c7509e6557ULL; /* Bitwise right rotate. Normally this will compile to a single */ /* instruction, especially if the shift is a manifest constant. */ static inline uint64 Rotate(uint64 val, int shift) { /* Avoid shifting by 64: doing so yields an undefined result. */ return shift == 0 ? val : ((val >> shift) | (val << (64 - shift))); } /* Equivalent to Rotate(), but requires the second arg to be non-zero. */ /* On x86-64, and probably others, it's possible for this to compile */ /* to a single instruction if both args are already in registers. */ static inline uint64 RotateByAtLeast1(uint64 val, int shift) { return (val >> shift) | (val << (64 - shift)); } static inline uint64 ShiftMix(uint64 val) { return val ^ (val >> 47); } static inline uint64 HashLen16(uint64 u, uint64 v) { /*return Hash128to64(uint128(u, v)); */ return Hash64Pairto64(u, v); } static uint64 HashLen0to16(const char *s, size_t len) { if (len > 8) { uint64 a = Fetch64(s); uint64 b = Fetch64(s + len - 8); return HashLen16(a, RotateByAtLeast1(b + len, len)) ^ b; } if (len >= 4) { uint64 a = Fetch32(s); return HashLen16(len + (a << 3), Fetch32(s + len - 4)); } if (len > 0) { uint8 a = s[0]; uint8 b = s[len >> 1]; uint8 c = s[len - 1]; uint32 y = (uint32)a + ((uint32)b << 8); uint32 z = len + ((uint32)c << 2); return ShiftMix(y * k2 ^ z * k3) * k2; } return k2; } /* This probably works well for 16-byte strings as well, but it may be overkill */ /* in that case. */ static uint64 HashLen17to32(const char *s, size_t len) { uint64 a = Fetch64(s) * k1; uint64 b = Fetch64(s + 8); uint64 c = Fetch64(s + len - 8) * k2; uint64 d = Fetch64(s + len - 16) * k0; return HashLen16(Rotate(a - b, 43) + Rotate(c, 30) + d, a + Rotate(b ^ k3, 20) - c + len); } /* Return a 16-byte hash for 48 bytes. Quick and dirty. */ /* Callers do best to use "random-looking" values for a and b. */ static uint128 WeakHashLen32WithSeeds6(uint64 w, uint64 x, uint64 y, uint64 z, uint64 a, uint64 b) { uint64 c; a += w; b = Rotate(b + a + z, 21); c = a; a += x; a += y; b += Rotate(a, 44); return UInt128(a + z, b + c); } /* Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty. */ static uint128 WeakHashLen32WithSeeds3(const char *s, uint64 a, uint64 b) { return WeakHashLen32WithSeeds6(Fetch64(s), Fetch64(s + 8), Fetch64(s + 16), Fetch64(s + 24), a, b); } /* Return an 8-byte hash for 33 to 64 bytes. */ static uint64 HashLen33to64(const char *s, size_t len) { uint64 z = Fetch64(s + 24); uint64 a = Fetch64(s) + (len + Fetch64(s + len - 16)) * k0; uint64 b = Rotate(a + z, 52); uint64 c = Rotate(a, 37); uint64 vf, vs, wf, ws, r; a += Fetch64(s + 8); c += Rotate(a, 7); a += Fetch64(s + 16); vf = a + z; vs = b + Rotate(a, 31) + c; a = Fetch64(s + 16) + Fetch64(s + len - 32); z = Fetch64(s + len - 8); b = Rotate(a + z, 52); c = Rotate(a, 37); a += Fetch64(s + len - 24); c += Rotate(a, 7); a += Fetch64(s + len - 16); wf = a + z; ws = b + Rotate(a, 31) + c; r = ShiftMix((vf + ws) * k2 + (wf + vs) * k0); return ShiftMix(r * k0 + vs) * k2; } uint64 CityHash64(const char *s, size_t len) { if (len <= 32) { if (len <= 16) return HashLen0to16(s, len); else return HashLen17to32(s, len); } else if (len <= 64) { return HashLen33to64(s, len); } do { /* For strings over 64 bytes we hash the end first, and then as we */ /* loop we keep 56 bytes of state: v, w, x, y, and z. */ uint64 x = Fetch64(s + len - 40); uint64 y = Fetch64(s + len - 16) + Fetch64(s + len - 56); uint64 z = HashLen16(Fetch64(s + len - 48) + len, Fetch64(s + len - 24)); uint128 v = WeakHashLen32WithSeeds3(s + len - 64, len, z); uint128 w = WeakHashLen32WithSeeds3(s + len - 32, y + k1, x); x = x * k1 + Fetch64(s); /* Decrease len to the nearest multiple of 64, and operate on 64-byte chunks. */ len = (len - 1) & ~(size_t)63; do { x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1; y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; x ^= w.second; y += v.first + Fetch64(s + 40); z = Rotate(z + w.first, 33) * k1; v = WeakHashLen32WithSeeds3(s, v.second * k1, x + w.first); w = WeakHashLen32WithSeeds3(s + 32, z + w.second, y + Fetch64(s + 16)); UNSAFE_SWAP(uint64, z, x); s += 64; len -= 64; } while (len != 0); return HashLen16(HashLen16(v.first, w.first) + ShiftMix(y) * k1 + z, HashLen16(v.second, w.second) + x); } while (0); } uint64 CityHash64WithSeed(const char *s, size_t len, uint64 seed) { return CityHash64WithSeeds(s, len, k2, seed); } uint64 CityHash64WithSeeds(const char *s, size_t len, uint64 seed0, uint64 seed1) { return HashLen16(CityHash64(s, len) - seed0, seed1); } /* A subroutine for CityHash128(). Returns a decent 128-bit hash for strings */ /* of any length representable in signed long. Based on City and Murmur. */ static uint128 CityMurmur(const char *s, size_t len, uint128 seed) { uint64 a = Uint128Low64(seed); uint64 b = Uint128High64(seed); uint64 c = 0; uint64 d = 0; signed long l = len - 16; if (l <= 0) { /* len <= 16 */ a = ShiftMix(a * k1) * k1; c = b * k1 + HashLen0to16(s, len); d = ShiftMix(a + (len >= 8 ? Fetch64(s) : c)); } else { /* len > 16 */ c = HashLen16(Fetch64(s + len - 8) + k1, a); d = HashLen16(b + len, c + Fetch64(s + len - 16)); a += d; do { a ^= ShiftMix(Fetch64(s) * k1) * k1; a *= k1; b ^= a; c ^= ShiftMix(Fetch64(s + 8) * k1) * k1; c *= k1; d ^= c; s += 16; l -= 16; } while (l > 0); } a = HashLen16(a, c); b = HashLen16(d, b); return UInt128(a ^ b, HashLen16(b, a)); } uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed) { if (len < 128) return CityMurmur(s, len, seed); do { /* We expect len >= 128 to be the common case. Keep 56 bytes of state: */ /* v, w, x, y, and z. */ uint128 v, w; uint64 x = Uint128Low64(seed); uint64 y = Uint128High64(seed); uint64 z = len * k1; size_t tail_done; v.first = Rotate(y ^ k1, 49) * k1 + Fetch64(s); v.second = Rotate(v.first, 42) * k1 + Fetch64(s + 8); w.first = Rotate(y + z, 35) * k1 + x; w.second = Rotate(x + Fetch64(s + 88), 53) * k1; /* This is the same inner loop as CityHash64(), manually unrolled. */ do { x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1; y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; x ^= w.second; y += v.first + Fetch64(s + 40); z = Rotate(z + w.first, 33) * k1; v = WeakHashLen32WithSeeds3(s, v.second * k1, x + w.first); w = WeakHashLen32WithSeeds3(s + 32, z + w.second, y + Fetch64(s + 16)); UNSAFE_SWAP(uint64, z, x); s += 64; x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1; y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; x ^= w.second; y += v.first + Fetch64(s + 40); z = Rotate(z + w.first, 33) * k1; v = WeakHashLen32WithSeeds3(s, v.second * k1, x + w.first); w = WeakHashLen32WithSeeds3(s + 32, z + w.second, y + Fetch64(s + 16)); UNSAFE_SWAP(uint64, z, x); s += 64; len -= 128; } while (LIKELY(len >= 128)); x += Rotate(v.first + z, 49) * k0; z += Rotate(w.first, 37) * k0; /* If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s. */ for (tail_done = 0; tail_done < len;) { tail_done += 32; y = Rotate(x + y, 42) * k0 + v.second; w.first += Fetch64(s + len - tail_done + 16); x = x * k0 + w.first; z += w.second + Fetch64(s + len - tail_done); w.second += v.first; v = WeakHashLen32WithSeeds3(s + len - tail_done, v.first + z, v.second); } /* At this point our 56 bytes of state should contain more than */ /* enough information for a strong 128-bit hash. We use two */ /* different 56-byte-to-8-byte hashes to get a 16-byte final result. */ x = HashLen16(x, v.first); y = HashLen16(y + z, w.first); return UInt128(HashLen16(x + v.second, w.second) + y, HashLen16(x + w.second, y + v.second)); } while (0); } uint128 CityHash128(const char *s, size_t len) { if (len >= 16) return CityHash128WithSeed(s + 16, len - 16, UInt128(Fetch64(s) ^ k3, Fetch64(s + 8))); else if (len >= 8) return CityHash128WithSeed(NULL, 0, UInt128(Fetch64(s) ^ (len * k0), Fetch64(s + len - 8) ^ k1)); else return CityHash128WithSeed(s, len, UInt128(k0, k1)); } #ifdef __SSE4_2__ # include "citycrc_c.h" # include /* Requires len >= 240. */ static void CityHashCrc256Long(const char *s, size_t len, uint32 seed, uint64 *result) { uint64 a = Fetch64(s + 56) + k0; uint64 b = Fetch64(s + 96) + k0; uint64 c = result[0] = HashLen16(b, len); uint64 d = result[1] = Fetch64(s + 120) * k0 + len; uint64 e = Fetch64(s + 184) + seed; uint64 f = seed; uint64 g = 0; uint64 h = 0; uint64 i = 0; uint64 j = 0; uint64 t = c + d; /* 240 bytes of input per iter. */ size_t iters = len / 240; len -= iters * 240; do { # define CHUNK(multiplier, z) \ { \ uint64 old_a = a; \ a = Rotate(b, 41 ^ z) * multiplier + Fetch64(s); \ b = Rotate(c, 27 ^ z) * multiplier + Fetch64(s + 8); \ c = Rotate(d, 41 ^ z) * multiplier + Fetch64(s + 16); \ d = Rotate(e, 33 ^ z) * multiplier + Fetch64(s + 24); \ e = Rotate(t, 25 ^ z) * multiplier + Fetch64(s + 32); \ t = old_a; \ } \ f = _mm_crc32_u64(f, a); \ g = _mm_crc32_u64(g, b); \ h = _mm_crc32_u64(h, c); \ i = _mm_crc32_u64(i, d); \ j = _mm_crc32_u64(j, e); \ s += 40 CHUNK(1, 1); CHUNK(k0, 0); CHUNK(1, 1); CHUNK(k0, 0); CHUNK(1, 1); CHUNK(k0, 0); } while (--iters > 0); while (len >= 40) { CHUNK(k0, 0); len -= 40; } if (len > 0) { s = s + len - 40; CHUNK(k0, 0); } j += i << 32; a = HashLen16(a, j); h += g << 32; b += h; c = HashLen16(c, f) + i; d = HashLen16(d, e + result[0]); j += e; i += HashLen16(h, t); e = HashLen16(a, d) + j; f = HashLen16(b, c) + a; g = HashLen16(j, i) + c; result[0] = e + f + g + h; a = ShiftMix((a + g) * k0) * k0 + b; result[1] += a + result[0]; a = ShiftMix(a * k0) * k0 + c; result[2] = a + result[1]; a = ShiftMix((a + e) * k0) * k0; result[3] = a + result[2]; } /* Requires len < 240. */ static inline void CityHashCrc256Short(const char *s, size_t len, uint64 *result) { char buf[240]; memcpy(buf, s, len); memset(buf + len, 0, 240 - len); CityHashCrc256Long(buf, 240, ~(uint32)len, result); } void CityHashCrc256(const char *s, size_t len, uint64 *result) { if (LIKELY(len >= 240)) CityHashCrc256Long(s, len, 0, result); else CityHashCrc256Short(s, len, result); } uint128 CityHashCrc128WithSeed(const char *s, size_t len, uint128 seed) { if (len <= 900) { return CityHash128WithSeed(s, len, seed); } else { uint64 result[4], u, v; CityHashCrc256(s, len, result); u = Uint128High64(seed) + result[0]; v = Uint128Low64(seed) + result[1]; return UInt128(HashLen16(u, v + result[2]), HashLen16(Rotate(v, 32), u * k0 + result[3])); } } uint128 CityHashCrc128(const char *s, size_t len) { if (len <= 900) { return CityHash128(s, len); } else { uint64 result[4]; CityHashCrc256(s, len, result); return UInt128(result[2], result[3]); } } #endif dlt-daemon-2.18.6/src/core_dump_handler/cityhash_c/city_c.h000066400000000000000000000070301377520261000236410ustar00rootroot00000000000000/* Copyright (c) 2011 Google, Inc. */ /* */ /* 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. */ /* */ /* CityHash, by Geoff Pike and Jyrki Alakuijala */ /* */ /* This file provides a few functions for hashing strings. On x86-64 */ /* hardware in 2011, CityHash64() is faster than other high-quality */ /* hash functions, such as Murmur. This is largely due to higher */ /* instruction-level parallelism. CityHash64() and CityHash128() also perform */ /* well on hash-quality tests. */ /* */ /* CityHash128() is optimized for relatively long strings and returns */ /* a 128-bit hash. For strings more than about 2000 bytes it can be */ /* faster than CityHash64(). */ /* */ /* Functions in the CityHash family are not suitable for cryptography. */ /* */ /* WARNING: This code has not been tested on big-endian platforms! */ /* It is known to work well on little-endian platforms that have a small penalty */ /* for unaligned reads, such as current Intel and AMD moderate-to-high-end CPUs. */ /* */ /* By the way, for some hash functions, given strings a and b, the hash */ /* of a+b is easily derived from the hashes of a and b. This property */ /* doesn't hold for any hash functions in this file. */ #ifndef CITY_HASH_H_ # define CITY_HASH_H_ # include # ifdef _MSC_VER typedef unsigned char uint8; typedef unsigned int uint32; typedef unsigned long long uint64; # else # include typedef uint8_t uint8; typedef uint32_t uint32; typedef uint64_t uint64; # endif # ifdef __cplusplus extern "C" { # endif # pragma pack(1) typedef struct { uint64 first, second; } uint128; # pragma pack() # define Uint128Low64(x) ((x).first) # define Uint128High64(x) ((x).second) /* Hash function for a byte array. */ uint64 CityHash64(const char *buf, size_t len); /* Hash function for a byte array. For convenience, a 64-bit seed is also */ /* hashed into the result. */ uint64 CityHash64WithSeed(const char *buf, size_t len, uint64 seed); /* Hash function for a byte array. For convenience, two seeds are also */ /* hashed into the result. */ uint64 CityHash64WithSeeds(const char *buf, size_t len, uint64 seed0, uint64 seed1); /* Hash function for a byte array. */ uint128 CityHash128(const char *s, size_t len); /* Hash function for a byte array. For convenience, a 128-bit seed is also */ /* hashed into the result. */ uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed); # ifdef __cplusplus } # endif #endif /* CITY_HASH_H_ */ dlt-daemon-2.18.6/src/core_dump_handler/cityhash_c/citycrc_c.h000066400000000000000000000037741377520261000243440ustar00rootroot00000000000000/* Copyright (c) 2011 Google, Inc. */ /* */ /* 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. */ /* */ /* CityHash, by Geoff Pike and Jyrki Alakuijala */ /* */ /* This file declares the subset of the CityHash functions that require */ /* _mm_crc32_u64(). See the CityHash README for details. */ /* */ /* Functions in the CityHash family are not suitable for cryptography. */ #ifndef CITY_HASH_CRC_H_ # define CITY_HASH_CRC_H_ # include "city_c.h" # ifdef __cplusplus extern "C" { # endif /* Hash function for a byte array. */ uint128 CityHashCrc128(const char *s, size_t len); /* Hash function for a byte array. For convenience, a 128-bit seed is also */ /* hashed into the result. */ uint128 CityHashCrc128WithSeed(const char *s, size_t len, uint128 seed); /* Hash function for a byte array. Sets result[0] ... result[3]. */ void CityHashCrc256(const char *s, size_t len, uint64 *result); # ifdef __cplusplus } # endif #endif /* CITY_HASH_CRC_H_ */ dlt-daemon-2.18.6/src/core_dump_handler/dlt_cdh.c000066400000000000000000000315071377520261000216530ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Magneti Marelli http://www.magnetimarelli.com * \author Lutz Helwing * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_cdh.c */ #include #include #include #include #include #include #include #include #include #include #include #include #include "dlt_cdh.h" #include /* Unusual characters in a windows filename are replaced */ #define UNUSUAL_CHARS ":/\\!*" #define REPLACEMENT_CHAR '_' #define COREDUMP_FILESYSTEM "/var" #define COREDUMP_FILESYSTEM_MIN_SIZE_MB 40 #define COREDUMP_HANDLER_PRIORITY -19 void core_locks(const proc_info_t *p_proc, int action); /* =================================================================== ** Method : init_proc_info(...) ** ** Description : initialises all members of process info structure to defined values ** ** Parameters : INPUT p_proc ** OUTPUT pointer to initialised crashed process info structure ** ** Returns : nothing ** ===================================================================*/ void init_proc_info(proc_info_t *p_proc) { memset(p_proc->name, 0, sizeof(p_proc->name)); memset(p_proc->threadname, 0, sizeof(p_proc->threadname)); p_proc->pid = 0; p_proc->timestamp = 0; p_proc->signal = 0; p_proc->can_create_coredump = 1; memset(&p_proc->streamer, 0, sizeof(p_proc->streamer)); memset(&p_proc->m_Ehdr, 0, sizeof(p_proc->m_Ehdr)); p_proc->m_pPhdr = NULL; p_proc->m_Nhdr = NULL; p_proc->m_note_page_size = 0; memset(&p_proc->m_registers, 0, sizeof(p_proc->m_registers)); p_proc->m_crashed_pid = 0; p_proc->m_crashid_phase1 = 0; memset(p_proc->m_crashid, 0, sizeof(p_proc->m_crashid)); } /* =================================================================== ** Method : read_args(...) ** ** Description : reads command line arguments ** ** Parameters : INPUT argc ** INPUT argv ** OUTPUT pointer to crashed process info structure ** ** Returns : 0 if success, else -1 ** ===================================================================*/ cdh_status_t read_args(int argc, char **argv, proc_info_t *proc) { if (argc < 5) { syslog(LOG_ERR, "Usage: cdh timestamp pid signal procname"); return CDH_NOK; } init_proc_info(proc); if (sscanf(argv[1], "%u", &proc->timestamp) != 1) { syslog(LOG_ERR, "Unable to read timestamp argument <%s>. Closing", argv[1]); return CDH_NOK; } if (sscanf(argv[2], "%d", &proc->pid) != 1) { syslog(LOG_ERR, "Unable to read pid argument <%s>. Closing", argv[2]); return CDH_NOK; } if (sscanf(argv[3], "%d", &proc->signal) != 1) { syslog(LOG_ERR, "Unable to read signal argument <%s>. Closing", argv[3]); return CDH_NOK; } /* save the thread name given by the kernel */ strncpy(proc->threadname, argv[4], sizeof(proc->threadname) - 1); /* initialize the binary name with threadname... in case we cannot read it from /proc */ strncpy(proc->name, argv[4], sizeof(proc->name) - 1); return CDH_OK; } /* =================================================================== ** Method : remove_unusual_chars(...) ** ** Description : modify the input string to change UNUSUALS_CHARS to ** REPLACEMENT_CHAR ** Parameters : INPUT/OUTPUT string to be modified ** ** Returns : nothing ** ===================================================================*/ void remove_unusual_chars(char *p_string) { unsigned int l_char_index = 0; for (l_char_index = 0; l_char_index < sizeof(UNUSUAL_CHARS) - 1; l_char_index++) { char *l_str_pointer = p_string; do { l_str_pointer = strchr(l_str_pointer, UNUSUAL_CHARS[l_char_index]); if (l_str_pointer != NULL) { *l_str_pointer = REPLACEMENT_CHAR; l_str_pointer++; } } while (l_str_pointer != NULL); } } /* =================================================================== ** Method : check_disk_space(...) ** ** Description : check if there is sufficient disk space to write a coredump ** Parameters : INPUT/OUTPUT string to be modified ** ** Returns : 0 if success, else -1 ** ===================================================================*/ cdh_status_t check_disk_space() { struct statvfs stat; unsigned long free_size = 0; if (statvfs(COREDUMP_FILESYSTEM, &stat) < 0) { syslog(LOG_ERR, "ERR cannot stat disk space on %s: %s", COREDUMP_FILESYSTEM, strerror(errno)); return CDH_NOK; } /* free space: size of block * number of free blocks (>>20 => MB) */ free_size = (stat.f_bsize * stat.f_bavail) >> 20; if (free_size < COREDUMP_FILESYSTEM_MIN_SIZE_MB) { syslog(LOG_WARNING, "ERR insufficient disk space for coredump: %ld MB.", free_size); return CDH_NOK; } syslog(LOG_INFO, "INFO disk space for coredump: %ld MB.", free_size); return CDH_OK; } void clean_core_tmp_dir() { DIR *d = NULL; struct dirent *dir = NULL; if ((d = opendir(CORE_TMP_DIRECTORY)) != NULL) { char lockfilepath[CORE_MAX_FILENAME_LENGTH]; while ((dir = readdir(d)) != NULL) { struct stat unused_stat; /* check if lock file exists */ snprintf(lockfilepath, sizeof(lockfilepath), "%s/%s", CORE_LOCK_DIRECTORY, dir->d_name); if (stat(lockfilepath, &unused_stat) != 0) { /* No lock file found for this coredump => from previous LC => delete */ char filepath[CORE_MAX_FILENAME_LENGTH] = { 0 }; snprintf(filepath, sizeof(filepath), "%s/%s", CORE_TMP_DIRECTORY, dir->d_name); syslog(LOG_INFO, "Cleaning %s: delete file %s", CORE_TMP_DIRECTORY, filepath); unlink(filepath); } } closedir(d); } } /* =================================================================== ** Method : check_core_directory(...) ** ** Description : checks the availability of core dumps directory. ** if not available, there is an installation issue. ** ** Parameters : ** ** Returns : 0 if success, else -1 ** ===================================================================*/ cdh_status_t check_and_create_directory(const char *p_dirname, int create_silently) { int l_need_create = 0; int l_need_delete = 0; struct stat l_stat; if (lstat(p_dirname, &l_stat) < 0) { l_need_create = 1; } else if (!S_ISDIR(l_stat.st_mode)) { l_need_delete = 1; l_need_create = 1; } if (l_need_delete > 0) { syslog(LOG_WARNING, "WARN core directory '%s' is not a directory => removing it", p_dirname); if (unlink(p_dirname) == -1) { syslog(LOG_ERR, "ERR core directory '%s' cannot be unlinked: %s", p_dirname, strerror(errno)); return CDH_NOK; } } if (l_need_create > 0) { if (create_silently == 0) syslog(LOG_WARNING, "WARN core directory '%s' does not exist => creation", p_dirname); if (mkdir(p_dirname, 0666) == -1) { syslog(LOG_ERR, "ERR core directory '%s' cannot be created: %s", p_dirname, strerror(errno)); return CDH_NOK; } } return CDH_OK; } /* =================================================================== ** Method : check_core_directory(...) ** ** Description : checks the availability of core dumps directory. ** if not available, there is an installation issue. ** ** Parameters : ** ** Returns : 0 if success, else -1 ** ===================================================================*/ cdh_status_t check_core_directory() { if (check_and_create_directory(CORE_DIRECTORY, 0) < 0) return CDH_NOK; if (check_and_create_directory(CORE_TMP_DIRECTORY, 0) < 0) return CDH_NOK; if (check_and_create_directory(CORE_LOCK_DIRECTORY, 1) < 0) return CDH_NOK; clean_core_tmp_dir(); return CDH_OK; } /* =================================================================== ** Method : move_to_core_directory(...) ** ** Description : move the coredump and context files ** from temporary dir to final core directory ** ** Parameters : ** ** Returns : 0 if success, else -1 ** ===================================================================*/ cdh_status_t move_to_core_directory(proc_info_t *p_proc) { char l_src_filename[CORE_MAX_FILENAME_LENGTH] = { 0 }; char l_dst_filename[CORE_MAX_FILENAME_LENGTH] = { 0 }; char *patterns[] = { CORE_FILE_PATTERN, CONTEXT_FILE_PATTERN }; unsigned int pattern_num = 0; if (p_proc == NULL) return CDH_NOK; for (pattern_num = 0; pattern_num < sizeof(patterns) / sizeof(char *); pattern_num++) { /* Don't move coredump if it cannot be created */ if ((p_proc->can_create_coredump == 0) && (pattern_num == 0)) continue; snprintf(l_src_filename, sizeof(l_src_filename), patterns[pattern_num], CORE_TMP_DIRECTORY, p_proc->timestamp, p_proc->name, p_proc->pid); snprintf(l_dst_filename, sizeof(l_dst_filename), patterns[pattern_num], CORE_DIRECTORY, p_proc->timestamp, p_proc->name, p_proc->pid); syslog(LOG_INFO, "Moving coredump from %s to %s", l_src_filename, l_dst_filename); if (rename(l_src_filename, l_dst_filename) < 0) syslog(LOG_ERR, "Moving failed: %s", strerror(errno)); } return CDH_OK; } /* =================================================================== ** Method : main(...) ** ** Description : ** ** Parameters : argc, argv ** ** Returns : ** ===================================================================*/ int main(int argc, char *argv[]) { proc_info_t l_proc_info; /* char l_exec_name[CORE_MAX_FILENAME_LENGTH] = {0}; */ openlog("CoredumpHandler", 0, LOG_DAEMON); if (read_args(argc, argv, &l_proc_info) < 0) exit(-1); if (get_exec_name(l_proc_info.pid, l_proc_info.name, sizeof(l_proc_info.name)) != 0) syslog(LOG_ERR, "Failed to get executable name"); syslog(LOG_NOTICE, "Handling coredump procname:%s pid:%d timest:%d signal:%d", l_proc_info.name, l_proc_info.pid, l_proc_info.timestamp, l_proc_info.signal); /* Increase priority of the coredump handler */ if (nice(COREDUMP_HANDLER_PRIORITY) != COREDUMP_HANDLER_PRIORITY) syslog(LOG_WARNING, "Failed to change CDH priority"); if (check_disk_space() < 0) /*return CDH_NOK; */ l_proc_info.can_create_coredump = 0; if (check_core_directory() < 0) /*return CDH_NOK; */ l_proc_info.can_create_coredump = 0; remove_unusual_chars(l_proc_info.name); core_locks(&l_proc_info, 1); write_proc_context(&l_proc_info); treat_coredump(&l_proc_info); move_to_core_directory(&l_proc_info); core_locks(&l_proc_info, 0); treat_crash_data(&l_proc_info); closelog(); return CDH_OK; } void core_locks(const proc_info_t *p_proc, int action) { char l_lockfilepath[CORE_MAX_FILENAME_LENGTH] = { 0 }; char *patterns[] = { CORE_FILE_PATTERN, CONTEXT_FILE_PATTERN }; unsigned int pattern_num = 0; int fd_lockfile = -1; if (p_proc == NULL) return; for (pattern_num = 0; pattern_num < sizeof(patterns) / sizeof(char *); pattern_num++) { snprintf(l_lockfilepath, sizeof(l_lockfilepath), patterns[pattern_num], CORE_LOCK_DIRECTORY, p_proc->timestamp, p_proc->name, p_proc->pid); switch (action) { case 0: { unlink(l_lockfilepath); break; } case 1: { if ((fd_lockfile = open(l_lockfilepath, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR)) >= 0) { if (write(fd_lockfile, "1", 1) < 0) syslog(LOG_WARNING, "Failed to write lockfile %d: %s", fd_lockfile, strerror(errno)); close(fd_lockfile); } else { syslog(LOG_WARNING, "Failed to open lockfile %s: %s", l_lockfilepath, strerror(errno)); } break; } default: break; } } } dlt-daemon-2.18.6/src/core_dump_handler/dlt_cdh.h000066400000000000000000000047331377520261000216610ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Magneti Marelli http://www.magnetimarelli.com * \author Lutz Helwing * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_cdh.h */ #ifndef DLT_CDH_H #define DLT_CDH_H #include #include #include #include #include #include "dlt_cdh_streamer.h" #define CORE_DIRECTORY "/var/core" #define CORE_TMP_DIRECTORY "/var/core_tmp" #define CORE_LOCK_DIRECTORY "/tmp/.core_locks" #define CORE_MAX_FILENAME_LENGTH 255 #define MAX_PROC_NAME_LENGTH 32 #define CRASH_ID_LEN 8 #define CRASHID_FILE "/tmp/.crashid" /* the file where the white screen app will read the crashid */ #define CORE_FILE_PATTERN "%s/core.%d.%s.%d.gz" #define CONTEXT_FILE_PATTERN "%s/context.%d.%s.%d.txt" #define ELF_Ehdr Elf32_Ehdr #define ELF_Phdr Elf32_Phdr #define ELF_Shdr Elf32_Shdr #define ELF_Nhdr Elf32_Nhdr typedef struct { uint64_t pc; uint64_t ip; uint64_t lr; } cdh_registers_t; typedef struct { char name[MAX_PROC_NAME_LENGTH]; char threadname[MAX_PROC_NAME_LENGTH]; pid_t pid; uint32_t timestamp; int signal; int can_create_coredump; file_streamer_t streamer; /* coredump content, for crash id generation */ ELF_Ehdr m_Ehdr; ELF_Phdr *m_pPhdr; char *m_Nhdr; /* buffer with all NOTE pages */ unsigned int m_note_page_size; cdh_registers_t m_registers; pid_t m_crashed_pid; uint64_t m_crashid_phase1; unsigned char m_crashid[CRASH_ID_LEN]; } proc_info_t; cdh_status_t get_exec_name(unsigned int p_pid_str, char *p_exec_name, int p_exec_name_maxsize); cdh_status_t write_proc_context(const proc_info_t *); cdh_status_t treat_coredump(proc_info_t *p_proc); cdh_status_t treat_crash_data(proc_info_t *p_proc); cdh_status_t move_to_core_directory(proc_info_t *p_proc); cdh_status_t check_core_directory(); #endif /* #ifndef DLT_CDH_H */ dlt-daemon-2.18.6/src/core_dump_handler/dlt_cdh_context.c000066400000000000000000000257411377520261000234220ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Magneti Marelli http://www.magnetimarelli.com * \author Lutz Helwing * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_cdh_context.c */ #include #include #include #include #include #include #include #include "dlt_cdh.h" /* Global buffer for file reading */ char g_buffer[4096]; /* =================================================================== ** Method : get_exec_name(...) ** ** Description : read executable filename ** ** Parameters : INPUT p_pid_str pid of the process ** OUTPUT p_exec_name executable name ** INPUT p_exec_name_maxsize size of p_exec_name buffer ** ** Returns : 0 if success, else -1 ** ===================================================================*/ cdh_status_t get_exec_name(unsigned int p_pid, char *p_exec_name, int p_exec_name_maxsize) { char l_exe_link[CORE_MAX_FILENAME_LENGTH] = { 0 }; char *l_name_ptr = NULL; memset(l_exe_link, 0, sizeof(l_exe_link)); snprintf(l_exe_link, sizeof(l_exe_link) - 1, "/proc/%d/exe", p_pid); if (readlink(l_exe_link, g_buffer, p_exec_name_maxsize) < 0) return CDH_NOK; if ((l_name_ptr = strrchr(g_buffer, '/')) == NULL) return CDH_NOK; memset(p_exec_name, 0, p_exec_name_maxsize); strncpy(p_exec_name, l_name_ptr + 1, p_exec_name_maxsize - 1); return CDH_OK; } /* =================================================================== ** Method : dump_file_to(...) ** ** Description : dump the content of file p_src_filename to the file descriptor p_fout ** ** Parameters : INPUT p_src_filename ** INPUT p_fout ** ** Returns : 0 if success, else -1 ** ===================================================================*/ cdh_status_t dump_file_to(const char *p_src_filename, FILE *p_fout) { FILE *l_fin = NULL; int bytes_read = 0; if (p_fout == NULL) return CDH_NOK; fprintf(p_fout, "\n==== Dumping file <%s> ====\n", p_src_filename); if ((l_fin = fopen(p_src_filename, "rt")) == NULL) { syslog(LOG_ERR, "ERR opening info file '%s' for dumping [%s]", p_src_filename, strerror(errno)); fprintf(p_fout, "**error**\n"); return CDH_NOK; } while ((bytes_read = fread(g_buffer, 1, sizeof(g_buffer), l_fin)) != 0) { int i = 0; /* changes all "\0" in the file to a "\n" */ /* (needed for example for /proc//cmdline, to keep all arguments) */ for (i = 0; i < bytes_read; i++) if (g_buffer[i] == '\000') g_buffer[i] = '\n'; fwrite(g_buffer, 1, bytes_read, p_fout); if (ferror(p_fout)) { syslog(LOG_ERR, "Writing in context file failed [%s]", strerror(errno)); fclose(p_fout); fclose(l_fin); return CDH_NOK; } } if (ferror(l_fin)) { syslog(LOG_ERR, "reading '%s' failed [%s]", p_src_filename, strerror(errno)); fclose(l_fin); return CDH_NOK; } fclose(l_fin); fprintf(p_fout, "\n"); return CDH_OK; } /************************************************************************************************** / */ /* "ls -l" implementation for /proc//fd (at least) */ /* Taken from coreutils sources, lib/filemode.c */ /* */ /* Return a character indicating the type of file described by * file mode BITS: * '-' regular file * 'b' block special file * 'c' character special file * 'C' high performance ("contiguous data") file * 'd' directory * 'D' door * 'l' symbolic link * 'm' multiplexed file (7th edition Unix; obsolete) * 'n' network special file (HP-UX) * 'p' fifo (named pipe) * 'P' port * 's' socket * 'w' whiteout (4.4BSD) * '?' some other file type */ static char ftypelet(mode_t bits) { /* These are the most common, so test for them first. */ if (S_ISREG(bits)) return '-'; if (S_ISDIR(bits)) return 'd'; /* Other letters standardized by POSIX 1003.1-2004. */ if (S_ISBLK(bits)) return 'b'; if (S_ISCHR(bits)) return 'c'; if (S_ISLNK(bits)) return 'l'; if (S_ISFIFO(bits)) return 'p'; /* Other file types (though not letters) standardized by POSIX. */ if (S_ISSOCK(bits)) return 's'; /* Nonstandard file types. * if (S_ISCTG (bits)) * return 'C'; * if (S_ISDOOR (bits)) * return 'D'; * if (S_ISMPB (bits) || S_ISMPC (bits)) * return 'm'; * if (S_ISNWK (bits)) * return 'n'; * if (S_ISPORT (bits)) * return 'P'; * if (S_ISWHT (bits)) * return 'w'; */ return '?'; } void strmode(mode_t mode, char *str) { if (str == NULL) return; str[0] = ftypelet(mode); str[1] = mode & S_IRUSR ? 'r' : '-'; str[2] = mode & S_IWUSR ? 'w' : '-'; str[3] = (mode & S_ISUID ? (mode & S_IXUSR ? 's' : 'S') : (mode & S_IXUSR ? 'x' : '-')); str[4] = mode & S_IRGRP ? 'r' : '-'; str[5] = mode & S_IWGRP ? 'w' : '-'; str[6] = (mode & S_ISGID ? (mode & S_IXGRP ? 's' : 'S') : (mode & S_IXGRP ? 'x' : '-')); str[7] = mode & S_IROTH ? 'r' : '-'; str[8] = mode & S_IWOTH ? 'w' : '-'; str[9] = (mode & S_ISVTX ? (mode & S_IXOTH ? 't' : 'T') : (mode & S_IXOTH ? 'x' : '-')); str[10] = ' '; str[11] = '\0'; } /* =================================================================== ** Method : list_dircontent_to(...) ** ** Description : list the filenames in p_dirname directory to the file descriptor p_fout ** ** Parameters : INPUT p_dirname ** INPUT p_fout ** ** Returns : 0 if success, else -1 ** ===================================================================*/ cdh_status_t list_dircontent_to(const char *p_dirname, FILE *p_fout) { DIR *l_dd = NULL; /* directory descriptor */ struct dirent *l_entity = NULL; if ((l_dd = opendir(p_dirname)) == NULL) { syslog(LOG_ERR, "ERR reading info dir '%s' failed [%s]", p_dirname, strerror(errno)); return CDH_NOK; } fprintf(p_fout, "==== Listing directory <%s> ====\n", p_dirname); while ((l_entity = readdir(l_dd)) != NULL) { char l_fullpath[CORE_MAX_FILENAME_LENGTH] = { 0 }; char l_linkpath[CORE_MAX_FILENAME_LENGTH] = { 0 }; char l_modebuf[12] = { 0 }; struct stat l_stat; ssize_t l_size = 0; if (!strcmp(l_entity->d_name, ".") || !strcmp(l_entity->d_name, "..")) continue; snprintf(l_fullpath, sizeof(l_fullpath), "%s/%s", p_dirname, l_entity->d_name); if (lstat(l_fullpath, &l_stat) < 0) { syslog(LOG_ERR, "ERR lstat on '%s' failed. [%s]", l_fullpath, strerror(errno)); continue; } strmode(l_stat.st_mode, l_modebuf); fprintf(p_fout, "%s %ld %d %d %ld %4s", l_modebuf, l_stat.st_nlink, l_stat.st_uid, l_stat.st_gid, l_stat.st_size, l_entity->d_name); switch (l_stat.st_mode & S_IFMT) { case S_IFBLK: fprintf(p_fout, " [block device]\n"); break; case S_IFCHR: fprintf(p_fout, " [character device]\n"); break; case S_IFDIR: fprintf(p_fout, " [directory]\n"); break; case S_IFIFO: fprintf(p_fout, " [FIFO/pipe]\n"); break; case S_IFLNK: l_size = readlink(l_fullpath, l_linkpath, sizeof(l_linkpath)); l_linkpath[l_size] = 0; fprintf(p_fout, " -> %s\n", l_linkpath); break; case S_IFREG: fprintf(p_fout, " [regular file]\n"); break; case S_IFSOCK: fprintf(p_fout, " [socket]\n"); break; default: fprintf(p_fout, " [unknown?]\n"); break; } } /* while ( (l_entity = readdir(l_dd)) != NULL ) */ fprintf(p_fout, "===========================\n"); closedir(l_dd); return CDH_OK; } /************************************************************************************************** / */ /* END of "ls -l" implementation for /proc//fd (at least) */ /************************************************************************************************** / */ /* =================================================================== ** Method : write_proc_context(...) ** ** Description : write the context data of the crashed process ** (context data coming mainly from /proc) ** ** Parameters : INPUT p_proc crashed process info ** ** Returns : 0 if success, else -1 ** ===================================================================*/ cdh_status_t write_proc_context(const proc_info_t *p_proc) { FILE *l_fout = NULL; char l_procfile[256] = { 0 }; char l_outfilename[CORE_MAX_FILENAME_LENGTH] = { 0 }; if (p_proc == NULL) return CDH_NOK; snprintf(l_outfilename, sizeof(l_outfilename), CONTEXT_FILE_PATTERN, CORE_TMP_DIRECTORY, p_proc->timestamp, p_proc->name, p_proc->pid); if ((l_fout = fopen(l_outfilename, "w+t")) == NULL) { syslog(LOG_ERR, "ERR Cannot open context file '%s' [%s]", l_outfilename, strerror(errno)); return CDH_NOK; } #define PROC_FILENAME(x) do { \ snprintf(l_procfile, sizeof(l_procfile), "/proc/%d/"x, \ p_proc->pid); \ } while (0) fprintf(l_fout, "ProcName:%s\n", p_proc->name); fprintf(l_fout, "ThreadName:%s\n", p_proc->threadname); fprintf(l_fout, "PID:%d\n", p_proc->pid); fprintf(l_fout, "signal:%d\n", p_proc->signal); PROC_FILENAME("cmdline"); dump_file_to(l_procfile, l_fout); PROC_FILENAME("cgroup"); dump_file_to(l_procfile, l_fout); PROC_FILENAME("stack"); dump_file_to(l_procfile, l_fout); dump_file_to("/proc/loadavg", l_fout); dump_file_to("/etc/sysrel", l_fout); dump_file_to("/proc/version", l_fout); PROC_FILENAME("environ"); dump_file_to(l_procfile, l_fout); PROC_FILENAME("status"); dump_file_to(l_procfile, l_fout); PROC_FILENAME("sched"); dump_file_to(l_procfile, l_fout); PROC_FILENAME("maps"); dump_file_to(l_procfile, l_fout); PROC_FILENAME("fd"); list_dircontent_to(l_procfile, l_fout); #undef PROC_FILENAME fflush(l_fout); return CDH_OK; } dlt-daemon-2.18.6/src/core_dump_handler/dlt_cdh_coredump.c000066400000000000000000000120001377520261000235340ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Magneti Marelli http://www.magnetimarelli.com * \author Lutz Helwing * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_cdh_coredump.c */ #include #include #include #include #include #include #include #include #include #include "dlt_cdh.h" cdh_status_t read_elf_headers(proc_info_t *p_proc) { int phnum = 0; /* Read ELF header */ stream_read(&p_proc->streamer, &p_proc->m_Ehdr, sizeof(p_proc->m_Ehdr)); /* Read until PROG position */ stream_move_to_offest(&p_proc->streamer, p_proc->m_Ehdr.e_phoff); /* Read and store all program headers */ p_proc->m_pPhdr = (ELF_Phdr *)malloc(sizeof(ELF_Phdr) * p_proc->m_Ehdr.e_phnum); if (p_proc->m_pPhdr == NULL) { syslog(LOG_ERR, "Cannot allocate Phdr memory (%d headers)", p_proc->m_Ehdr.e_phnum); return CDH_NOK; } for (phnum = 0; phnum < p_proc->m_Ehdr.e_phnum; phnum++) /* Read Programm header */ stream_read(&p_proc->streamer, &p_proc->m_pPhdr[phnum], sizeof(ELF_Phdr)); return CDH_OK; } int getNotePageIndex(proc_info_t *p_proc) { int i = 0; /* Search PT_NOTE section */ for (i = 0; i < p_proc->m_Ehdr.e_phnum; i++) { syslog(LOG_INFO, "==Note section prog_note:%d type:0x%X offset:0x%X size:0x%X (%dbytes)", i, p_proc->m_pPhdr[i].p_type, p_proc->m_pPhdr[i].p_offset, p_proc->m_pPhdr[i].p_filesz, p_proc->m_pPhdr[i].p_filesz); if (p_proc->m_pPhdr[i].p_type == PT_NOTE) break; } return i == p_proc->m_Ehdr.e_phnum ? CDH_NOK : i; } cdh_status_t read_notes(proc_info_t *p_proc) { int prog_note = getNotePageIndex(p_proc); /* p_proc->m_note_page_size = 0; */ p_proc->m_Nhdr = NULL; /* note page not found, abort */ if (prog_note < 0) { syslog(LOG_ERR, "Cannot find note header page index"); return CDH_NOK; } /* Move to NOTE header position */ if (stream_move_to_offest(&p_proc->streamer, p_proc->m_pPhdr[prog_note].p_offset) != CDH_OK) { syslog(LOG_ERR, "Cannot move to note header"); return CDH_NOK; } if ((p_proc->m_Nhdr = (char *)malloc(p_proc->m_pPhdr[prog_note].p_filesz)) == NULL) { syslog(LOG_ERR, "Cannot allocate Nhdr memory (note size %d bytes)", p_proc->m_pPhdr[prog_note].p_filesz); return CDH_NOK; } if (stream_read(&p_proc->streamer, p_proc->m_Nhdr, p_proc->m_pPhdr[prog_note].p_filesz) != CDH_OK) { syslog(LOG_ERR, "Cannot read note header"); return CDH_NOK; } p_proc->m_note_page_size = p_proc->m_pPhdr[prog_note].p_filesz; return CDH_OK; } cdh_status_t init_coredump(proc_info_t *p_proc) { if (p_proc == NULL) return CDH_NOK; if (p_proc->can_create_coredump) { char l_dst_filename[CORE_MAX_FILENAME_LENGTH]; snprintf(l_dst_filename, sizeof(l_dst_filename), CORE_FILE_PATTERN, CORE_TMP_DIRECTORY, p_proc->timestamp, p_proc->name, p_proc->pid); stream_init(&p_proc->streamer, 0, l_dst_filename); } else { stream_init(&p_proc->streamer, 0, NULL); } return CDH_OK; } cdh_status_t close_coredump(proc_info_t *p_proc) { stream_close(&p_proc->streamer); return CDH_OK; } cdh_status_t treat_coredump(proc_info_t *p_proc) { cdh_status_t ret = CDH_OK; /* open src and dest files, allocate read buffer */ if (init_coredump(p_proc) != CDH_OK) { syslog(LOG_ERR, "cannot init coredump system"); ret = CDH_NOK; goto finished; } if (read_elf_headers(p_proc) == CDH_OK) { /* TODO: No NOTES here leads to crash elsewhere!!! dlt_cdh_crashid.c: around line 76 */ if (read_notes(p_proc) != CDH_OK) { syslog(LOG_ERR, "cannot read NOTES"); ret = CDH_NOK; goto finished; } } else if (read_elf_headers(p_proc) != CDH_OK) { syslog(LOG_ERR, "cannot read ELF header"); ret = CDH_NOK; goto finished; } finished: /* In all cases, we try to finish to read/compress the coredump until the end */ if (stream_finish(&p_proc->streamer) != CDH_OK) syslog(LOG_ERR, "cannot finish coredump compression"); /* In all cases, let's close the files */ if (close_coredump(p_proc) != CDH_OK) syslog(LOG_ERR, "cannot close coredump system"); return ret; } dlt-daemon-2.18.6/src/core_dump_handler/dlt_cdh_cpuinfo.h000066400000000000000000000015661377520261000234050ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Magneti Marelli http://www.magnetimarelli.com * \author Lutz Helwing * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_cdh_cpuinfo.h */ #ifndef DLT_CDH_CPUINFO_H #define DLT_CDH_CPUINFO_H #include "dlt_cdh.h" void get_registers(prstatus_t *prstatus, cdh_registers_t *registers); #endif /* DLT_CDH_CPUINFO_H */ dlt-daemon-2.18.6/src/core_dump_handler/dlt_cdh_crashid.c000066400000000000000000000134561377520261000233530ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Magneti Marelli http://www.magnetimarelli.com * \author Lutz Helwing * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_cdh_crashid.c */ #include #include #include #include #include #include #include #include #include #include "dlt_cdh.h" #include "dlt_cdh_cpuinfo.h" #ifdef HAS_CITYHASH_C # include "city_c.h" #endif /*ARM32 specific */ /*#define REG_FRAME_POINTER 11 */ /*#define REG_INSTR_POINTER 12 */ /*#define REG_STACK_POINTER 13 */ /*#define REG_LINK_REGISTER 14 */ /*#define REG_PROC_COUNTER 15 */ #ifdef HAS_CITYHASH_C static cdh_status_t crashid_cityhash(proc_info_t *p_proc); #endif cdh_status_t get_phdr_num(proc_info_t *p_proc, unsigned int p_address, int *phdr_num) { int i = 0; if (phdr_num == NULL) return CDH_NOK; for (i = 0; i < p_proc->m_Ehdr.e_phnum; i++) if ((p_proc->m_pPhdr[i].p_vaddr < p_address) && (p_proc->m_pPhdr[i].p_vaddr + p_proc->m_pPhdr[i].p_memsz > p_address)) { *phdr_num = i; return CDH_OK; } *phdr_num = -1; return CDH_NOK; } /* Thanks to libunwind for the following definitions, which helps to */ #define ALIGN(x, a) (((x) + (a) - 1UL) & ~((a) - 1UL)) #define NOTE_SIZE(_hdr) (sizeof (_hdr) + ALIGN((_hdr).n_namesz, 4) + (_hdr).n_descsz) cdh_status_t get_crashed_registers(proc_info_t *p_proc) { int found = CDH_NOK; /* CDH_OK, when we find the page note associated to PID of crashed process */ unsigned int offset = 0; /* TODO: if no notes were found m_note_page_size was not set to 0 which leads to a crash in this loop because it is then used */ /* uninitialised here => this is an x86_64 issue */ while (found != CDH_OK && offset < p_proc->m_note_page_size) { /* Crash mentioned in TODO dlt_cdh_coredump.c line 163 */ ELF_Nhdr *ptr_note = (ELF_Nhdr *)(p_proc->m_Nhdr + offset); if (ptr_note->n_type == NT_PRSTATUS) { /* The first PRSTATUS note is the one of the crashed thread */ prstatus_t *prstatus = (prstatus_t *)((char *)ptr_note + sizeof(ELF_Nhdr) + ALIGN(ptr_note->n_namesz, 4)); p_proc->m_crashed_pid = prstatus->pr_pid; get_registers(prstatus, &p_proc->m_registers); found = CDH_OK; } offset += NOTE_SIZE(*ptr_note); } return found; } #ifdef HAS_CITYHASH_C cdh_status_t crashid_cityhash(proc_info_t *p_proc) { # define CRASHID_BUF_SIZE MAX_PROC_NAME_LENGTH + sizeof(uint64_t) char cityhash_in[CRASHID_BUF_SIZE]; uint64_t cityhash_result = 0; memcpy(cityhash_in, p_proc->name, MAX_PROC_NAME_LENGTH); memcpy(cityhash_in + MAX_PROC_NAME_LENGTH, &p_proc->m_crashid_phase1, sizeof(uint64_t)); cityhash_result = CityHash64(cityhash_in, CRASHID_BUF_SIZE); memcpy(p_proc->m_crashid, &cityhash_result, sizeof(uint64_t)); return CDH_OK; # undef CRASHID_BUF_SIZE } #endif /* HAS_CITYHASH_C */ cdh_status_t create_crashid(proc_info_t *p_proc) { uint32_t final_lr = 0; uint32_t final_pc = 0; int pc_phnum = 0; int lr_phnum = 0; /* translate address from virtual address (process point of view) to offset in the stack memory page */ #define ADDRESS_REBASE(__x, __phdr_num) (__x - p_proc->m_pPhdr[__phdr_num].p_vaddr) /* read value in the stack at position offset: +/- sizeof(), depends on stack growing upward or downward */ #define READ_STACK_VALUE(__offset, __type) (*(__type *)(stack_page + __offset - sizeof(__type))) get_phdr_num(p_proc, p_proc->m_registers.pc, &pc_phnum); final_pc = ADDRESS_REBASE(p_proc->m_registers.pc, pc_phnum); get_phdr_num(p_proc, p_proc->m_registers.lr, &lr_phnum); if (lr_phnum >= 0) final_lr = ADDRESS_REBASE(p_proc->m_registers.lr, lr_phnum); p_proc->m_crashid_phase1 = p_proc->signal << 24; p_proc->m_crashid_phase1 |= (uint64_t)final_lr; p_proc->m_crashid_phase1 <<= 32; p_proc->m_crashid_phase1 |= (uint64_t)final_pc; #ifdef HAS_CITYHASH_C crashid_cityhash(p_proc); #else memcpy(p_proc->m_crashid, &p_proc->m_crashid_phase1, sizeof(uint64_t)); #endif syslog(LOG_INFO, "Crash in \"%s\", thread=\"%s\", pid=%d, crashID=%" PRIx64 ", based on signal=%d, PC=0x%x, caller=0x%x", p_proc->name, p_proc->threadname, p_proc->pid, *((uint64_t *)p_proc->m_crashid), p_proc->signal, final_pc, final_lr ); return CDH_OK; } int write_crashid_to_filesystem(proc_info_t *p_proc) { FILE *crashid_file = NULL; if ((crashid_file = fopen(CRASHID_FILE, "wt")) == NULL) { syslog(LOG_ERR, "(pid=%d) cannot write crashid to %s: %s", p_proc->pid, CRASHID_FILE, strerror(errno)); return CDH_NOK; } fprintf(crashid_file, "%" PRIx64, *(uint64_t *)p_proc->m_crashid); fclose(crashid_file); return CDH_OK; } cdh_status_t treat_crash_data(proc_info_t *p_proc) { if (get_crashed_registers(p_proc) != CDH_OK) { syslog(LOG_ERR, "registers not found in notes"); return CDH_NOK; } if (create_crashid(p_proc) != CDH_OK) { syslog(LOG_ERR, "crashid not generated"); return CDH_NOK; } write_crashid_to_filesystem(p_proc); return CDH_OK; } dlt-daemon-2.18.6/src/core_dump_handler/dlt_cdh_definitions.h000066400000000000000000000015531377520261000242510ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Magneti Marelli http://www.magnetimarelli.com * \author Lutz Helwing * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_cdh_definitions.h */ #ifndef DLT_CDH_DEFINITIONS_H #define DLT_CDH_DEFINITIONS_H typedef enum { CDH_OK = 0, CDH_NOK = -1 } cdh_status_t; #endif /* DLT_CDH_DEFINITIONS_H */ dlt-daemon-2.18.6/src/core_dump_handler/dlt_cdh_streamer.c000066400000000000000000000127041377520261000235530ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Magneti Marelli http://www.magnetimarelli.com * \author Lutz Helwing * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_cdh_streamer.c */ #include #include #include #include #include #include "dlt_cdh_streamer.h" #define Z_CHUNK_SZ 1024 * 128 #define Z_MODE_STR "wb1" cdh_status_t stream_init(file_streamer_t *p_fs, const char *p_src_fname, const char *p_dst_fname) { if (p_fs == NULL) { syslog(LOG_ERR, "Internal pointer error in 'stream_init'"); return CDH_NOK; } memset(p_fs, 0, sizeof(file_streamer_t)); /* Allow to not save the coredump */ if (p_dst_fname == NULL) { p_fs->gz_dst_file = 0; } else { /* Create output file */ p_fs->gz_dst_file = gzopen(p_dst_fname, Z_MODE_STR); if (p_fs->gz_dst_file == Z_NULL) { /*return CDH_NOK; */ syslog(LOG_ERR, "Cannot open output filename <%s>. %s", p_dst_fname, strerror(errno)); p_fs->gz_dst_file = 0; } } if (p_fs->gz_dst_file == Z_NULL) syslog(LOG_WARNING, "The coredump will be processed, but not written"); /* Open input file */ if (p_src_fname == NULL) { p_fs->stream = stdin; } else if ((p_fs->stream = fopen(p_src_fname, "rb")) == NULL) { syslog(LOG_ERR, "Cannot open filename <%s>. %s", p_src_fname, strerror(errno)); return CDH_NOK; } /* Allocate read buffer */ if ((p_fs->read_buf = (unsigned char *)malloc(Z_CHUNK_SZ)) == NULL) { syslog(LOG_ERR, "Cannot allocate %d bytes for read buffer. %s", Z_CHUNK_SZ, strerror(errno)); return CDH_NOK; } return CDH_OK; } cdh_status_t stream_close(file_streamer_t *p_fs) { if (p_fs == NULL) { syslog(LOG_ERR, "Internal pointer error in 'stream_close'"); return CDH_NOK; } if (p_fs->gz_dst_file != NULL) { gzflush(p_fs->gz_dst_file, Z_FINISH); gzclose(p_fs->gz_dst_file); p_fs->gz_dst_file = NULL; } if (p_fs->stream != NULL) { fclose(p_fs->stream); p_fs->stream = NULL; } if (p_fs->read_buf != NULL) { free(p_fs->read_buf); p_fs->read_buf = NULL; } return CDH_OK; } cdh_status_t stream_read(file_streamer_t *p_fs, void *p_buf, unsigned int p_size) { unsigned int byte_read = 0; if (p_fs == NULL) { syslog(LOG_ERR, "Internal pointer error in 'stream_read'"); return CDH_NOK; } if (p_buf == NULL) { syslog(LOG_ERR, "Internal buffer pointer error in 'stream_read'"); return CDH_NOK; } if ((byte_read = fread(p_buf, 1, p_size, p_fs->stream)) != p_size) { syslog(LOG_WARNING, "Cannot read %d bytes from src. %s", p_size, strerror(errno)); return CDH_NOK; } p_fs->offset += byte_read; if (p_fs->gz_dst_file != NULL) gzwrite(p_fs->gz_dst_file, p_buf, byte_read); return CDH_OK; } int stream_finish(file_streamer_t *p_fs) { if ((p_fs == NULL) || (p_fs->stream == NULL)) { syslog(LOG_ERR, "Internal pointer error in 'stream_move_ahead'"); return CDH_NOK; } while (!feof(p_fs->stream)) { size_t read_bytes = fread(p_fs->read_buf, 1, Z_CHUNK_SZ, p_fs->stream); if (p_fs->gz_dst_file != NULL) gzwrite(p_fs->gz_dst_file, p_fs->read_buf, read_bytes); p_fs->offset += read_bytes; if (ferror(p_fs->stream)) { syslog(LOG_WARNING, "Error reading from the src stream: %s", strerror(errno)); return CDH_NOK; } } return CDH_OK; } int stream_move_to_offest(file_streamer_t *p_fs, unsigned int p_offset) { int bytes_to_read = 0; if (p_fs == NULL) { syslog(LOG_ERR, "Internal pointer error in 'stream_move_to_offest'"); return CDH_NOK; } bytes_to_read = p_offset - p_fs->offset; return stream_move_ahead(p_fs, bytes_to_read); } int stream_move_ahead(file_streamer_t *p_fs, unsigned int p_nbbytes) { int bytes_to_read = p_nbbytes; if (p_fs == NULL) { syslog(LOG_ERR, "Internal pointer error in 'stream_move_ahead'"); return CDH_NOK; } while (bytes_to_read > 0) { size_t chunk_size = bytes_to_read > Z_CHUNK_SZ ? Z_CHUNK_SZ : bytes_to_read; size_t read_bytes = fread(p_fs->read_buf, 1, chunk_size, p_fs->stream); if (read_bytes != chunk_size) { syslog(LOG_WARNING, "Cannot move ahead by %d bytes from src. Read %lu bytes", p_nbbytes, read_bytes); return CDH_NOK; } if (p_fs->gz_dst_file != 0) gzwrite(p_fs->gz_dst_file, p_fs->read_buf, chunk_size); bytes_to_read -= chunk_size; } p_fs->offset += p_nbbytes; return CDH_OK; } unsigned int stream_get_offset(file_streamer_t *p_fs) { if (p_fs == NULL) { syslog(LOG_ERR, "Internal pointer error in 'stream_get_offset'"); return CDH_NOK; } return p_fs->offset; } dlt-daemon-2.18.6/src/core_dump_handler/dlt_cdh_streamer.h000066400000000000000000000027471377520261000235660ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Magneti Marelli http://www.magnetimarelli.com * \author Lutz Helwing * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_cdh_streamer.h */ #ifndef DLT_CDH_STREAMER_H #define DLT_CDH_STREAMER_H #include #include #include "dlt_cdh_definitions.h" typedef struct { FILE *stream; unsigned int offset; gzFile gz_dst_file; unsigned char *read_buf; } file_streamer_t; cdh_status_t stream_init(file_streamer_t *p_fs, const char *p_src_fname, const char *p_dst_fname); cdh_status_t stream_close(file_streamer_t *p_fs); cdh_status_t stream_read(file_streamer_t *p_fs, void *p_buf, unsigned int p_size); cdh_status_t stream_finish(file_streamer_t *p_fs); cdh_status_t stream_move_to_offest(file_streamer_t *p_fs, unsigned int p_offset); cdh_status_t stream_move_ahead(file_streamer_t *p_fs, unsigned int p_nbbytes); unsigned int stream_get_offset(file_streamer_t *p_fs); #endif /* #ifndef DLT_CDH_STREAMER_H */ dlt-daemon-2.18.6/src/core_dump_handler/i686/000077500000000000000000000000001377520261000205745ustar00rootroot00000000000000dlt-daemon-2.18.6/src/core_dump_handler/i686/dlt_cdh_cpuinfo.c000066400000000000000000000020771377520261000240720ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Magneti Marelli http://www.magnetimarelli.com * \author Lutz Helwing * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file i686/dlt_cdh_cpuinfo.c */ #include "../dlt_cdh_cpuinfo.h" void get_registers(prstatus_t *prstatus, cdh_registers_t *registers) { struct user_regs_struct *ptr_reg = (struct user_regs_struct *)prstatus->pr_reg; registers->pc = ptr_reg->ecx; /* [REG_PROC_COUNTER]; */ registers->ip = ptr_reg->eip; /* [REG_INSTR_POINTER]; */ registers->lr = ptr_reg->ebp; /* [REG_LINK_REGISTER]; */ } dlt-daemon-2.18.6/src/core_dump_handler/x86_64/000077500000000000000000000000001377520261000210365ustar00rootroot00000000000000dlt-daemon-2.18.6/src/core_dump_handler/x86_64/dlt_cdh_cpuinfo.c000066400000000000000000000021011377520261000243200ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Magneti Marelli http://www.magnetimarelli.com * \author Lutz Helwing * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file x86_64/dlt_cdh_cpuinfo.c */ #include "../dlt_cdh_cpuinfo.h" void get_registers(prstatus_t *prstatus, cdh_registers_t *registers) { struct user_regs_struct *ptr_reg = (struct user_regs_struct *)prstatus->pr_reg; registers->pc = ptr_reg->rcx; /* [REG_PROC_COUNTER]; */ registers->ip = ptr_reg->rip; /* [REG_INSTR_POINTER]; */ registers->lr = ptr_reg->rsp; /* [REG_LINK_REGISTER]; */ } dlt-daemon-2.18.6/src/daemon/000077500000000000000000000000001377520261000156715ustar00rootroot00000000000000dlt-daemon-2.18.6/src/daemon/CMakeLists.txt000066400000000000000000000056461377520261000204440ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### if(WITH_SYSTEMD_WATCHDOG OR WITH_SYSTEMD) message(STATUS "Added ${systemd_SRCS} to dlt-daemon") endif() set(dlt_daemon_SRCS dlt-daemon.c dlt_daemon_client.c dlt_daemon_common.c dlt_daemon_connection.c dlt_daemon_event_handler.c dlt_daemon_offline_logstorage.c dlt_daemon_serial.c dlt_daemon_socket.c dlt_daemon_unix_socket.c ${PROJECT_SOURCE_DIR}/src/gateway/dlt_gateway.c ${PROJECT_SOURCE_DIR}/src/lib/dlt_client.c ${PROJECT_SOURCE_DIR}/src/shared/dlt_common.c ${PROJECT_SOURCE_DIR}/src/shared/dlt_config_file_parser.c ${PROJECT_SOURCE_DIR}/src/shared/dlt_offline_trace.c ${PROJECT_SOURCE_DIR}/src/shared/dlt_protocol.c ${PROJECT_SOURCE_DIR}/src/shared/dlt_user_shared.c ${PROJECT_SOURCE_DIR}/src/offlinelogstorage/dlt_offline_logstorage.c ${PROJECT_SOURCE_DIR}/src/offlinelogstorage/dlt_offline_logstorage_behavior.c ) if(WITH_DLT_SHM_ENABLE) set(dlt_daemon_SRCS ${dlt_daemon_SRCS} ${PROJECT_SOURCE_DIR}/src/shared/dlt_shm.c) endif() if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") set(RT_LIBRARY rt) set(SOCKET_LIBRARY "") else() set(RT_LIBRARY "") set(SOCKET_LIBRARY socket) endif() if(WITH_UDP_CONNECTION) include_directories(${PROJECT_SOURCE_DIR}/src/daemon/udp_connection) add_definitions(-DUDP_CONNECTION_SUPPORT) set(dlt_daemon_SRCS ${dlt_daemon_SRCS} ${PROJECT_SOURCE_DIR}/src/daemon/udp_connection/dlt_daemon_udp_socket.c) endif(WITH_UDP_CONNECTION) add_executable(dlt-daemon ${dlt_daemon_SRCS} ${systemd_SRCS}) target_link_libraries(dlt-daemon ${RT_LIBRARY} ${SOCKET_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) install(TARGETS dlt-daemon RUNTIME DESTINATION bin PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ COMPONENT base) if (WITH_DLT_UNIT_TESTS) set(library_SRCS ${dlt_daemon_SRCS}) if (WITH_SYSTEMD_WATCHDOG OR WITH_SYSTEMD) set(library_SRCS ${library_SRCS} ${systemd_SRCS}) endif(WITH_SYSTEMD_WATCHDOG OR WITH_SYSTEMD) add_library(dlt_daemon ${library_SRCS}) target_link_libraries(dlt_daemon ${RT_LIBRARY} ${SOCKET_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) install(TARGETS dlt_daemon RUNTIME DESTINATION bin LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/static COMPONENT base) endif(WITH_DLT_UNIT_TESTS) INSTALL(FILES dlt.conf DESTINATION ${CONFIGURATION_FILES_DIR} COMPONENT base) dlt-daemon-2.18.6/src/daemon/dlt-daemon.c000066400000000000000000003637331377520261000201000ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Alexander Wenzel * Markus Klein * Mikko Rapeli * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-daemon.c */ #include #include #include /* for printf() and fprintf() */ #include /* for socket(), connect(), (), and recv() */ #include #include /* for sockaddr_in and inet_addr() */ #include /* for atoi() and exit() */ #include /* for memset() */ #include /* for close() */ #include #include #include #include #include #include #ifdef linux # include #endif #include #include #if defined(linux) && defined(__NR_statx) # include #endif #ifdef DLT_DAEMON_VSOCK_IPC_ENABLE # ifdef linux # include # endif # ifdef __QNX__ # include # endif #endif #include "dlt_types.h" #include "dlt-daemon.h" #include "dlt-daemon_cfg.h" #include "dlt_daemon_common_cfg.h" #include "dlt_daemon_socket.h" #include "dlt_daemon_unix_socket.h" #include "dlt_daemon_serial.h" #include "dlt_daemon_client.h" #include "dlt_daemon_connection.h" #include "dlt_daemon_event_handler.h" #include "dlt_daemon_offline_logstorage.h" #include "dlt_gateway.h" #ifdef UDP_CONNECTION_SUPPORT # include "dlt_daemon_udp_socket.h" #endif #if defined(DLT_SYSTEMD_WATCHDOG_ENABLE) || defined(DLT_SYSTEMD_ENABLE) # include "sd-daemon.h" #endif /** * \defgroup daemon DLT Daemon * \addtogroup daemon \{ */ static int dlt_daemon_log_internal(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *str, int verbose); #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE static uint32_t watchdog_trigger_interval; /* watchdog trigger interval in [s] */ #endif /* used in main event loop and signal handler */ int g_exit = 0; int g_signo = 0; static char dlt_timer_conn_types[DLT_TIMER_UNKNOWN + 1] = { [DLT_TIMER_PACKET] = DLT_CONNECTION_ONE_S_TIMER, [DLT_TIMER_ECU] = DLT_CONNECTION_SIXTY_S_TIMER, #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE [DLT_TIMER_SYSTEMD] = DLT_CONNECTION_SYSTEMD_TIMER, #endif [DLT_TIMER_GATEWAY] = DLT_CONNECTION_GATEWAY_TIMER, [DLT_TIMER_UNKNOWN] = DLT_CONNECTION_TYPE_MAX }; static char dlt_timer_names[DLT_TIMER_UNKNOWN + 1][32] = { [DLT_TIMER_PACKET] = "Timing packet", [DLT_TIMER_ECU] = "ECU version", #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE [DLT_TIMER_SYSTEMD] = "Systemd watchdog", #endif [DLT_TIMER_GATEWAY] = "Gateway", [DLT_TIMER_UNKNOWN] = "Unknown timer" }; #ifdef __QNX__ static int dlt_timer_pipes[DLT_TIMER_UNKNOWN][2] = { /* [timer_id] = {read_pipe, write_pipe} */ [DLT_TIMER_PACKET] = {DLT_FD_INIT, DLT_FD_INIT}, [DLT_TIMER_ECU] = {DLT_FD_INIT, DLT_FD_INIT}, #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE [DLT_TIMER_SYSTEMD] = {DLT_FD_INIT, DLT_FD_INIT}, #endif [DLT_TIMER_GATEWAY] = {DLT_FD_INIT, DLT_FD_INIT} }; static pthread_t timer_threads[DLT_TIMER_UNKNOWN] = { [DLT_TIMER_PACKET] = 0, [DLT_TIMER_ECU] = 0, #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE [DLT_TIMER_SYSTEMD] = 0, #endif [DLT_TIMER_GATEWAY] = 0 }; static DltDaemonPeriodicData *timer_data[DLT_TIMER_UNKNOWN] = { [DLT_TIMER_PACKET] = NULL, [DLT_TIMER_ECU] = NULL, #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE [DLT_TIMER_SYSTEMD] = NULL, #endif [DLT_TIMER_GATEWAY] = NULL }; void close_pipes(int fds[2]) { if (fds[0] > 0) { close(fds[0]); fds[0] = DLT_FD_INIT; } if (fds[1] > 0) { close(fds[1]); fds[1] = DLT_FD_INIT; } } #endif // __QNX__ /** * Print usage information of tool. */ void usage() { char version[DLT_DAEMON_TEXTBUFSIZE]; dlt_get_version(version, DLT_DAEMON_TEXTBUFSIZE); /*printf("DLT logging daemon %s %s\n", _DLT_PACKAGE_VERSION, _DLT_PACKAGE_VERSION_STATE); */ /*printf("Compile options: %s %s %s %s",_DLT_SYSTEMD_ENABLE, _DLT_SYSTEMD_WATCHDOG_ENABLE, _DLT_TEST_ENABLE, _DLT_SHM_ENABLE); */ printf("%s", version); printf("Usage: dlt-daemon [options]\n"); printf("Options:\n"); printf(" -d Daemonize\n"); printf(" -h Usage\n"); printf(" -c filename DLT daemon configuration file (Default: " CONFIGURATION_FILES_DIR "/dlt.conf)\n"); #ifdef DLT_DAEMON_USE_FIFO_IPC printf(" -t directory Directory for local fifo and user-pipes (Default: /tmp)\n"); printf(" (Applications wanting to connect to a daemon using a\n"); printf(" custom directory need to be started with the environment \n"); printf(" variable DLT_PIPE_DIR set appropriately)\n"); #endif #ifdef DLT_SHM_ENABLE printf(" -s filename The file name to create the share memory (Default: /dlt-shm)\n"); printf(" (Applications wanting to connect to a daemon using a\n"); printf(" custom shm name need to be started with the environment \n"); printf(" variable DLT_SHM_NAME set appropriately)\n"); #endif printf(" -p port port to monitor for incoming requests (Default: 3490)\n"); printf(" (Applications wanting to connect to a daemon using a custom\n"); printf(" port need to be started with the environment variable\n"); printf(" DLT_DAEMON_TCP_PORT set appropriately)\n"); } /* usage() */ /** * Option handling */ int option_handling(DltDaemonLocal *daemon_local, int argc, char *argv[]) { int c; if (daemon_local == 0) { fprintf (stderr, "Invalid parameter passed to option_handling()\n"); return -1; } /* Initialize flags */ memset(daemon_local, 0, sizeof(DltDaemonLocal)); /* default values */ daemon_local->flags.port = DLT_DAEMON_TCP_PORT; #ifdef DLT_DAEMON_USE_FIFO_IPC dlt_log_set_fifo_basedir(DLT_USER_IPC_PATH); #endif #ifdef DLT_SHM_ENABLE strncpy(dltShmName, "/dlt-shm", NAME_MAX); #endif opterr = 0; #ifdef DLT_SHM_ENABLE while ((c = getopt (argc, argv, "hdc:t:s:p:")) != -1) #else while ((c = getopt (argc, argv, "hdc:t:p:")) != -1) #endif switch (c) { case 'd': { daemon_local->flags.dflag = 1; break; } case 'c': { strncpy(daemon_local->flags.cvalue, optarg, NAME_MAX); break; } #ifdef DLT_DAEMON_USE_FIFO_IPC case 't': { dlt_log_set_fifo_basedir(optarg); break; } #endif #ifdef DLT_SHM_ENABLE case 's': { strncpy(dltShmName, optarg, NAME_MAX); break; } #endif case 'p': { daemon_local->flags.port = (unsigned int) atoi(optarg); if (daemon_local->flags.port == 0) { fprintf (stderr, "Invalid port `%s' specified.\n", optarg); return -1; } break; } case 'h': { usage(); return -2; /* return no error */ } case '?': { if ((optopt == 'c') || (optopt == 't') || (optopt == 'p')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { fprintf (stderr, "Invalid option, this should never occur!\n"); return -1; } } /* switch() */ #ifdef DLT_DAEMON_USE_FIFO_IPC snprintf(daemon_local->flags.userPipesDir, DLT_PATH_MAX, "%s/dltpipes", dltFifoBaseDir); snprintf(daemon_local->flags.daemonFifoName, DLT_PATH_MAX, "%s/dlt", dltFifoBaseDir); #endif #ifdef DLT_SHM_ENABLE strncpy(daemon_local->flags.dltShmName, dltShmName, NAME_MAX); #endif return 0; } /* option_handling() */ /** * Option file parser */ int option_file_parser(DltDaemonLocal *daemon_local) { FILE *pFile; int value_length = 1024; char line[value_length - 1]; char token[value_length]; char value[value_length]; char *pch; const char *filename; ssize_t n; /* set default values for configuration */ daemon_local->flags.sharedMemorySize = DLT_SHM_SIZE; daemon_local->flags.sendMessageTime = 0; daemon_local->flags.offlineTraceDirectory[0] = 0; daemon_local->flags.offlineTraceFileSize = 1000000; daemon_local->flags.offlineTraceMaxSize = 4000000; daemon_local->flags.offlineTraceFilenameTimestampBased = 1; daemon_local->flags.loggingMode = DLT_LOG_TO_CONSOLE; daemon_local->flags.loggingLevel = LOG_INFO; #ifdef DLT_DAEMON_USE_UNIX_SOCKET_IPC n = snprintf(daemon_local->flags.loggingFilename, sizeof(daemon_local->flags.loggingFilename), "%s/dlt.log", DLT_USER_IPC_PATH); #else /* DLT_DAEMON_USE_FIFO_IPC */ n = snprintf(daemon_local->flags.loggingFilename, sizeof(daemon_local->flags.loggingFilename), "%s/dlt.log", dltFifoBaseDir); #endif if (n < 0 || (size_t)n > sizeof(daemon_local->flags.loggingFilename)) { dlt_vlog(LOG_WARNING, "%s: snprintf truncation/error(%ld) %s\n", __func__, n, daemon_local->flags.loggingFilename); } daemon_local->timeoutOnSend = 4; daemon_local->RingbufferMinSize = DLT_DAEMON_RINGBUFFER_MIN_SIZE; daemon_local->RingbufferMaxSize = DLT_DAEMON_RINGBUFFER_MAX_SIZE; daemon_local->RingbufferStepSize = DLT_DAEMON_RINGBUFFER_STEP_SIZE; daemon_local->daemonFifoSize = 0; daemon_local->flags.sendECUSoftwareVersion = 0; memset(daemon_local->flags.pathToECUSoftwareVersion, 0, sizeof(daemon_local->flags.pathToECUSoftwareVersion)); daemon_local->flags.sendTimezone = 0; daemon_local->flags.offlineLogstorageMaxDevices = 0; daemon_local->flags.offlineLogstorageDirPath[0] = 0; daemon_local->flags.offlineLogstorageTimestamp = 1; daemon_local->flags.offlineLogstorageDelimiter = '_'; daemon_local->flags.offlineLogstorageMaxCounter = UINT_MAX; daemon_local->flags.offlineLogstorageMaxCounterIdx = 0; daemon_local->flags.offlineLogstorageCacheSize = 30000; /* 30MB */ dlt_daemon_logstorage_set_logstorage_cache_size( daemon_local->flags.offlineLogstorageCacheSize); strncpy(daemon_local->flags.ctrlSockPath, DLT_DAEMON_DEFAULT_CTRL_SOCK_PATH, sizeof(daemon_local->flags.ctrlSockPath) - 1); #ifdef DLT_DAEMON_USE_UNIX_SOCKET_IPC snprintf(daemon_local->flags.appSockPath, DLT_IPC_PATH_MAX, "%s/dlt", DLT_USER_IPC_PATH); if (strlen(DLT_USER_IPC_PATH) > DLT_IPC_PATH_MAX) fprintf(stderr, "Provided path too long...trimming it to path[%s]\n", daemon_local->flags.appSockPath); #else /* DLT_DAEMON_USE_FIFO_IPC */ memset(daemon_local->flags.daemonFifoGroup, 0, sizeof(daemon_local->flags.daemonFifoGroup)); #endif daemon_local->flags.gatewayMode = 0; strncpy(daemon_local->flags.gatewayConfigFile, DLT_GATEWAY_CONFIG_PATH, DLT_DAEMON_FLAG_MAX - 1); daemon_local->flags.autoResponseGetLogInfoOption = 7; daemon_local->flags.contextLogLevel = DLT_LOG_INFO; daemon_local->flags.contextTraceStatus = DLT_TRACE_STATUS_OFF; daemon_local->flags.enforceContextLLAndTS = 0; /* default is off */ #ifdef UDP_CONNECTION_SUPPORT daemon_local->UDPConnectionSetup = MULTICAST_CONNECTION_ENABLED; strncpy(daemon_local->UDPMulticastIPAddress, MULTICASTIPADDRESS, MULTICASTIP_MAX_SIZE - 1); daemon_local->UDPMulticastIPPort = MULTICASTIPPORT; #endif daemon_local->flags.ipNodes = NULL; daemon_local->flags.injectionMode = 1; /* open configuration file */ if (daemon_local->flags.cvalue[0]) filename = daemon_local->flags.cvalue; else filename = CONFIGURATION_FILES_DIR "/dlt.conf"; /*printf("Load configuration from file: %s\n",filename); */ pFile = fopen (filename, "r"); if (pFile != NULL) { while (1) { /* fetch line from configuration file */ if (fgets (line, value_length - 1, pFile) != NULL) { pch = strtok (line, " =\r\n"); token[0] = 0; value[0] = 0; while (pch != NULL) { if (strcmp(pch, "#") == 0) break; if (token[0] == 0) { strncpy(token, pch, sizeof(token) - 1); token[sizeof(token) - 1] = 0; } else { strncpy(value, pch, sizeof(value) - 1); value[sizeof(value) - 1] = 0; break; } pch = strtok (NULL, " =\r\n"); } if (token[0] && value[0]) { /* parse arguments here */ if (strcmp(token, "Verbose") == 0) { daemon_local->flags.vflag = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "PrintASCII") == 0) { daemon_local->flags.aflag = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "PrintHex") == 0) { daemon_local->flags.xflag = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "PrintHeadersOnly") == 0) { daemon_local->flags.sflag = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "SendSerialHeader") == 0) { daemon_local->flags.lflag = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "SendContextRegistration") == 0) { daemon_local->flags.rflag = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "SendContextRegistrationOption") == 0) { daemon_local->flags.autoResponseGetLogInfoOption = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "SendMessageTime") == 0) { daemon_local->flags.sendMessageTime = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "RS232SyncSerialHeader") == 0) { daemon_local->flags.mflag = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "TCPSyncSerialHeader") == 0) { daemon_local->flags.nflag = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "RS232DeviceName") == 0) { strncpy(daemon_local->flags.yvalue, value, NAME_MAX); daemon_local->flags.yvalue[NAME_MAX] = 0; /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "RS232Baudrate") == 0) { strncpy(daemon_local->flags.bvalue, value, NAME_MAX); daemon_local->flags.bvalue[NAME_MAX] = 0; /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "ECUId") == 0) { strncpy(daemon_local->flags.evalue, value, NAME_MAX); daemon_local->flags.evalue[NAME_MAX] = 0; /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "PersistanceStoragePath") == 0) { strncpy(daemon_local->flags.ivalue, value, NAME_MAX); daemon_local->flags.ivalue[NAME_MAX] = 0; /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "LoggingMode") == 0) { daemon_local->flags.loggingMode = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "LoggingLevel") == 0) { daemon_local->flags.loggingLevel = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "LoggingFilename") == 0) { strncpy(daemon_local->flags.loggingFilename, value, sizeof(daemon_local->flags.loggingFilename) - 1); daemon_local->flags.loggingFilename[sizeof(daemon_local->flags.loggingFilename) - 1] = 0; /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "TimeOutOnSend") == 0) { daemon_local->timeoutOnSend = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "RingbufferMinSize") == 0) { sscanf(value, "%lu", &(daemon_local->RingbufferMinSize)); } else if (strcmp(token, "RingbufferMaxSize") == 0) { sscanf(value, "%lu", &(daemon_local->RingbufferMaxSize)); } else if (strcmp(token, "RingbufferStepSize") == 0) { sscanf(value, "%lu", &(daemon_local->RingbufferStepSize)); } else if (strcmp(token, "DaemonFIFOSize") == 0) { sscanf(value, "%lu", &(daemon_local->daemonFifoSize)); } else if (strcmp(token, "SharedMemorySize") == 0) { daemon_local->flags.sharedMemorySize = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "OfflineTraceDirectory") == 0) { strncpy(daemon_local->flags.offlineTraceDirectory, value, sizeof(daemon_local->flags.offlineTraceDirectory) - 1); daemon_local->flags.offlineTraceDirectory[sizeof(daemon_local->flags.offlineTraceDirectory) - 1] = 0; /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "OfflineTraceFileSize") == 0) { daemon_local->flags.offlineTraceFileSize = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "OfflineTraceMaxSize") == 0) { daemon_local->flags.offlineTraceMaxSize = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "OfflineTraceFileNameTimestampBased") == 0) { daemon_local->flags.offlineTraceFilenameTimestampBased = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "SendECUSoftwareVersion") == 0) { daemon_local->flags.sendECUSoftwareVersion = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "PathToECUSoftwareVersion") == 0) { strncpy(daemon_local->flags.pathToECUSoftwareVersion, value, sizeof(daemon_local->flags.pathToECUSoftwareVersion) - 1); daemon_local->flags.pathToECUSoftwareVersion[sizeof(daemon_local->flags.pathToECUSoftwareVersion) - 1] = 0; /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "SendTimezone") == 0) { daemon_local->flags.sendTimezone = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "OfflineLogstorageMaxDevices") == 0) { daemon_local->flags.offlineLogstorageMaxDevices = (uint32_t) atoi(value); } else if (strcmp(token, "OfflineLogstorageDirPath") == 0) { strncpy(daemon_local->flags.offlineLogstorageDirPath, value, sizeof(daemon_local->flags.offlineLogstorageDirPath) - 1); } else if (strcmp(token, "OfflineLogstorageTimestamp") == 0) { /* Check if set to 0, default otherwise */ if (atoi(value) == 0) daemon_local->flags.offlineLogstorageTimestamp = 0; } else if (strcmp(token, "OfflineLogstorageDelimiter") == 0) { /* Check if valid punctuation, default otherwise*/ if (ispunct((char)value[0])) daemon_local->flags.offlineLogstorageDelimiter = (char)value[0]; } else if (strcmp(token, "OfflineLogstorageMaxCounter") == 0) { daemon_local->flags.offlineLogstorageMaxCounter = (unsigned int) atoi(value); daemon_local->flags.offlineLogstorageMaxCounterIdx = (unsigned int) strlen(value); } else if (strcmp(token, "OfflineLogstorageCacheSize") == 0) { daemon_local->flags.offlineLogstorageCacheSize = (unsigned int)atoi(value); dlt_daemon_logstorage_set_logstorage_cache_size( daemon_local->flags.offlineLogstorageCacheSize); } else if (strcmp(token, "ControlSocketPath") == 0) { memset( daemon_local->flags.ctrlSockPath, 0, DLT_DAEMON_FLAG_MAX); strncpy( daemon_local->flags.ctrlSockPath, value, DLT_DAEMON_FLAG_MAX - 1); } else if (strcmp(token, "GatewayMode") == 0) { daemon_local->flags.gatewayMode = atoi(value); /*printf("Option: %s=%s\n",token,value); */ } else if (strcmp(token, "GatewayConfigFile") == 0) { memset( daemon_local->flags.gatewayConfigFile, 0, DLT_DAEMON_FLAG_MAX); strncpy( daemon_local->flags.gatewayConfigFile, value, DLT_DAEMON_FLAG_MAX - 1); } else if (strcmp(token, "ContextLogLevel") == 0) { int const intval = atoi(value); if ((intval >= DLT_LOG_OFF) && (intval <= DLT_LOG_VERBOSE)) { daemon_local->flags.contextLogLevel = intval; printf("Option: %s=%s\n", token, value); } else { fprintf(stderr, "Invalid value for ContextLogLevel: %i. Must be in range [%i..%i]\n", intval, DLT_LOG_OFF, DLT_LOG_VERBOSE); } } else if (strcmp(token, "ContextTraceStatus") == 0) { int const intval = atoi(value); if ((intval >= DLT_TRACE_STATUS_OFF) && (intval <= DLT_TRACE_STATUS_ON)) { daemon_local->flags.contextTraceStatus = intval; printf("Option: %s=%s\n", token, value); } else { fprintf(stderr, "Invalid value for ContextTraceStatus: %i. Must be in range [%i..%i]\n", intval, DLT_TRACE_STATUS_OFF, DLT_TRACE_STATUS_ON); } } else if (strcmp(token, "ForceContextLogLevelAndTraceStatus") == 0) { int const intval = atoi(value); if ((intval >= 0) && (intval <= 1)) { daemon_local->flags.enforceContextLLAndTS = intval; printf("Option: %s=%s\n", token, value); } else { fprintf(stderr, "Invalid value for ForceContextLogLevelAndTraceStatus: %i. Must be 0, 1\n", intval); } } #ifdef DLT_DAEMON_USE_FIFO_IPC else if (strcmp(token, "DaemonFifoGroup") == 0) { strncpy(daemon_local->flags.daemonFifoGroup, value, NAME_MAX); daemon_local->flags.daemonFifoGroup[NAME_MAX] = 0; } #endif #ifdef UDP_CONNECTION_SUPPORT else if (strcmp(token, "UDPConnectionSetup") == 0) { const long longval = strtol(value, NULL, 10); if ((longval == MULTICAST_CONNECTION_DISABLED) || (longval == MULTICAST_CONNECTION_ENABLED)) { daemon_local->UDPConnectionSetup = longval; printf("Option: %s=%s\n", token, value); } else { daemon_local->UDPConnectionSetup = MULTICAST_CONNECTION_DISABLED; fprintf(stderr, "Invalid value for UDPConnectionSetup set to default %ld\n", longval); } } else if (strcmp(token, "UDPMulticastIPAddress") == 0) { strncpy(daemon_local->UDPMulticastIPAddress, value, MULTICASTIP_MAX_SIZE - 1); } else if (strcmp(token, "UDPMulticastIPPort") == 0) { daemon_local->UDPMulticastIPPort = strtol(value, NULL, 10); } #endif else if (strcmp(token, "BindAddress") == 0) { DltBindAddress_t *newNode = NULL; DltBindAddress_t *temp = NULL; char *tok = strtok(value, ",;"); if (tok != NULL) { daemon_local->flags.ipNodes = calloc(1, sizeof(DltBindAddress_t)); if (daemon_local->flags.ipNodes == NULL) { dlt_vlog(LOG_ERR, "Could not allocate for IP list\n"); fclose(pFile); return -1; } else { strncpy(daemon_local->flags.ipNodes->ip, tok, sizeof(daemon_local->flags.ipNodes->ip) - 1); daemon_local->flags.ipNodes->next = NULL; temp = daemon_local->flags.ipNodes; tok = strtok(NULL, ",;"); while (tok != NULL) { newNode = calloc(1, sizeof(DltBindAddress_t)); if (newNode == NULL) { dlt_vlog(LOG_ERR, "Could not allocate for IP list\n"); fclose(pFile); return -1; } else { strncpy(newNode->ip, tok, sizeof(newNode->ip) - 1); } temp->next = newNode; temp = temp->next; tok = strtok(NULL, ",;"); } } } else { dlt_vlog(LOG_WARNING, "BindAddress option is empty\n"); } } else if (strcmp(token, "InjectionMode") == 0) { daemon_local->flags.injectionMode = atoi(value); } else { fprintf(stderr, "Unknown option: %s=%s\n", token, value); } } } else { break; } } fclose (pFile); } else { fprintf(stderr, "Cannot open configuration file: %s\n", filename); } return 0; } #ifdef DLT_DAEMON_USE_FIFO_IPC static int dlt_mkdir_recursive(const char *dir) { int ret = 0; char tmp[PATH_MAX + 1]; char *p = NULL; char *end = NULL; size_t len; strncpy(tmp, dir, PATH_MAX); len = strlen(tmp); if (tmp[len - 1] == '/') tmp[len - 1] = 0; end = tmp + len; for (p = tmp + 1; ((*p) && (ret == 0)) || ((ret == -1 && errno == EEXIST) && (p != end)); p++) if (*p == '/') { *p = 0; ret = mkdir(tmp, S_IRWXU); *p = '/'; } if ((ret == 0) || ((ret == -1) && (errno == EEXIST))) ret = mkdir(tmp, S_IRWXU); if ((ret == -1) && (errno == EEXIST)) ret = 0; return ret; } #endif #ifdef DLT_DAEMON_USE_FIFO_IPC static DltReturnValue dlt_daemon_create_pipes_dir(char *dir) { int ret = DLT_RETURN_OK; if (dir == NULL) { dlt_vlog(LOG_ERR, "%s: Invalid parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } /* create dlt pipes directory */ ret = mkdir(dir, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH | S_ISVTX); if ((ret == -1) && (errno != EEXIST)) { dlt_vlog(LOG_ERR, "FIFO user dir %s cannot be created (%s)!\n", dir, strerror(errno)); return DLT_RETURN_ERROR; } /* S_ISGID cannot be set by mkdir, let's reassign right bits */ ret = chmod(dir, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH | S_ISGID | S_ISVTX); if (ret == -1) { dlt_vlog(LOG_ERR, "FIFO user dir %s cannot be chmoded (%s)!\n", dir, strerror(errno)); return DLT_RETURN_ERROR; } return ret; } #endif /** * Main function of tool. */ int main(int argc, char *argv[]) { char version[DLT_DAEMON_TEXTBUFSIZE]; char local_str[DLT_DAEMON_TEXTBUFSIZE]; DltDaemonLocal daemon_local; DltDaemon daemon; int back = 0; memset(&daemon_local, 0, sizeof(DltDaemonLocal)); memset(&daemon, 0, sizeof(DltDaemon)); /* Command line option handling */ if ((back = option_handling(&daemon_local, argc, argv)) < 0) { if (back != -2) fprintf (stderr, "option_handling() failed!\n"); return -1; } /* Configuration file option handling */ if ((back = option_file_parser(&daemon_local)) < 0) { if (back != -2) fprintf (stderr, "option_file_parser() failed!\n"); return -1; } /* Initialize internal logging facility */ dlt_log_set_filename(daemon_local.flags.loggingFilename); dlt_log_set_level(daemon_local.flags.loggingLevel); dlt_log_init(daemon_local.flags.loggingMode); /* Print version information */ dlt_get_version(version, DLT_DAEMON_TEXTBUFSIZE); dlt_vlog(LOG_NOTICE, "Starting DLT Daemon; %s\n", version); PRINT_FUNCTION_VERBOSE(daemon_local.flags.vflag); #ifdef DLT_DAEMON_USE_FIFO_IPC /* Make sure the parent user directory is created */ if (dlt_mkdir_recursive(dltFifoBaseDir) != 0) { dlt_vlog(LOG_ERR, "Base dir %s cannot be created!\n", dltFifoBaseDir); return -1; } #endif /* --- Daemon init phase 1 begin --- */ if (dlt_daemon_local_init_p1(&daemon, &daemon_local, daemon_local.flags.vflag) == -1) { dlt_log(LOG_CRIT, "Initialization of phase 1 failed!\n"); return -1; } /* --- Daemon init phase 1 end --- */ if (dlt_daemon_prepare_event_handling(&daemon_local.pEvent)) { /* TODO: Perform clean-up */ dlt_log(LOG_CRIT, "Initialization of event handling failed!\n"); return -1; } /* --- Daemon connection init begin */ if (dlt_daemon_local_connection_init(&daemon, &daemon_local, daemon_local.flags.vflag) == -1) { dlt_log(LOG_CRIT, "Initialization of local connections failed!\n"); return -1; } /* --- Daemon connection init end */ if (dlt_daemon_init_runtime_configuration(&daemon, daemon_local.flags.ivalue, daemon_local.flags.vflag) == -1) { dlt_log(LOG_ERR, "Could not load runtime config\n"); return -1; } /* --- Daemon init phase 2 begin --- */ if (dlt_daemon_local_init_p2(&daemon, &daemon_local, daemon_local.flags.vflag) == -1) { dlt_log(LOG_CRIT, "Initialization of phase 2 failed!\n"); return -1; } /* --- Daemon init phase 2 end --- */ /* * Load dlt-runtime.cfg if available. * This must be loaded before offline setup */ dlt_daemon_configuration_load(&daemon, daemon.runtime_configuration, daemon_local.flags.vflag); if (daemon_local.flags.offlineLogstorageDirPath[0]) if (dlt_daemon_logstorage_setup_internal_storage( &daemon, &daemon_local, daemon_local.flags.offlineLogstorageDirPath, daemon_local.flags.vflag) == -1) dlt_log(LOG_INFO, "Setting up internal offline log storage failed!\n"); /* create fd for watchdog */ #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE { char *watchdogUSec = getenv("WATCHDOG_USEC"); int watchdogTimeoutSeconds = 0; dlt_log(LOG_DEBUG, "Systemd watchdog initialization\n"); if (watchdogUSec) watchdogTimeoutSeconds = atoi(watchdogUSec) / 2000000; watchdog_trigger_interval = watchdogTimeoutSeconds; create_timer_fd(&daemon_local, watchdogTimeoutSeconds, watchdogTimeoutSeconds, DLT_TIMER_SYSTEMD); } #endif /* create fd for timer timing packets */ create_timer_fd(&daemon_local, 1, 1, DLT_TIMER_PACKET); /* create fd for timer ecu version */ if ((daemon_local.flags.sendECUSoftwareVersion > 0) || (daemon_local.flags.sendTimezone > 0)) create_timer_fd(&daemon_local, 60, 60, DLT_TIMER_ECU); /* initiate gateway */ if (daemon_local.flags.gatewayMode == 1) { if (dlt_gateway_init(&daemon_local, daemon_local.flags.vflag) == -1) { dlt_log(LOG_CRIT, "Fail to create gateway\n"); return -1; } /* create gateway timer */ create_timer_fd(&daemon_local, daemon_local.pGateway.interval, daemon_local.pGateway.interval, DLT_TIMER_GATEWAY); } /* For offline tracing we still can use the same states */ /* as for socket sending. Using this trick we see the traces */ /* In the offline trace AND in the socket stream. */ if (daemon_local.flags.yvalue[0]) dlt_daemon_change_state(&daemon, DLT_DAEMON_STATE_SEND_DIRECT); else dlt_daemon_change_state(&daemon, DLT_DAEMON_STATE_BUFFER); dlt_daemon_init_user_information(&daemon, &daemon_local.pGateway, daemon_local.flags.gatewayMode, daemon_local.flags.vflag); /* * Check for app and ctx runtime cfg. * These cfg must be loaded after ecuId and num_user_lists are available */ if ((dlt_daemon_applications_load(&daemon, daemon.runtime_application_cfg, daemon_local.flags.vflag) == 0) && (dlt_daemon_contexts_load(&daemon, daemon.runtime_context_cfg, daemon_local.flags.vflag) == 0)) daemon.runtime_context_cfg_loaded = 1; dlt_daemon_log_internal(&daemon, &daemon_local, "Daemon launched. Starting to output traces...", daemon_local.flags.vflag); /* Even handling loop. */ while ((back >= 0) && (g_exit >= 0)) back = dlt_daemon_handle_event(&daemon_local.pEvent, &daemon, &daemon_local); snprintf(local_str, DLT_DAEMON_TEXTBUFSIZE, "Exiting DLT daemon... [%d]", g_signo); dlt_daemon_log_internal(&daemon, &daemon_local, local_str, daemon_local.flags.vflag); dlt_vlog(LOG_NOTICE, "%s%s", local_str, "\n"); dlt_daemon_local_cleanup(&daemon, &daemon_local, daemon_local.flags.vflag); #ifdef UDP_CONNECTION_SUPPORT dlt_daemon_udp_close_connection(); #endif dlt_gateway_deinit(&daemon_local.pGateway, daemon_local.flags.vflag); dlt_daemon_free(&daemon, daemon_local.flags.vflag); dlt_log(LOG_NOTICE, "Leaving DLT daemon\n"); return 0; } /* main() */ int dlt_daemon_local_init_p1(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); int ret = DLT_RETURN_OK; if ((daemon == 0) || (daemon_local == 0)) { dlt_log(LOG_ERR, "Invalid function parameters used for function dlt_daemon_local_init_p1()\n"); return -1; } #if defined(DLT_SYSTEMD_WATCHDOG_ENABLE) || defined(DLT_SYSTEMD_ENABLE) ret = sd_booted(); if (ret == 0) { dlt_log(LOG_CRIT, "System not booted with systemd!\n"); } else if (ret < 0) { dlt_log(LOG_CRIT, "sd_booted failed!\n"); return -1; } else { dlt_log(LOG_INFO, "System booted with systemd\n"); } #endif #ifdef DLT_DAEMON_USE_FIFO_IPC if (dlt_daemon_create_pipes_dir(daemon_local->flags.userPipesDir) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; #endif /* Check for daemon mode */ if (daemon_local->flags.dflag) dlt_daemon_daemonize(daemon_local->flags.vflag); /* Re-Initialize internal logging facility after fork */ dlt_log_set_filename(daemon_local->flags.loggingFilename); dlt_log_set_level(daemon_local->flags.loggingLevel); dlt_log_init(daemon_local->flags.loggingMode); /* initialise structure to use DLT file */ ret = dlt_file_init(&(daemon_local->file), daemon_local->flags.vflag); if (ret == DLT_RETURN_ERROR) { dlt_log(LOG_ERR, "Could not initialize file structure\n"); /* Return value ignored, dlt daemon will exit */ dlt_file_free(&(daemon_local->file), daemon_local->flags.vflag); return ret; } signal(SIGPIPE, SIG_IGN); signal(SIGTERM, dlt_daemon_signal_handler); /* software termination signal from kill */ signal(SIGHUP, dlt_daemon_signal_handler); /* hangup signal */ signal(SIGQUIT, dlt_daemon_signal_handler); signal(SIGINT, dlt_daemon_signal_handler); return DLT_RETURN_OK; } int dlt_daemon_local_init_p2(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == 0) || (daemon_local == 0)) { dlt_log(LOG_ERR, "Invalid function parameters used for function dlt_daemon_local_init_p2()\n"); return -1; } /* Daemon data */ if (dlt_daemon_init(daemon, daemon_local->RingbufferMinSize, daemon_local->RingbufferMaxSize, daemon_local->RingbufferStepSize, daemon_local->flags.ivalue, daemon_local->flags.contextLogLevel, daemon_local->flags.contextTraceStatus, daemon_local->flags.enforceContextLLAndTS, daemon_local->flags.vflag) == -1) { dlt_log(LOG_ERR, "Could not initialize daemon data\n"); return -1; } /* init offline trace */ if (((daemon->mode == DLT_USER_MODE_INTERNAL) || (daemon->mode == DLT_USER_MODE_BOTH)) && daemon_local->flags.offlineTraceDirectory[0]) { if (dlt_offline_trace_init(&(daemon_local->offlineTrace), daemon_local->flags.offlineTraceDirectory, daemon_local->flags.offlineTraceFileSize, daemon_local->flags.offlineTraceMaxSize, daemon_local->flags.offlineTraceFilenameTimestampBased) == -1) { dlt_log(LOG_ERR, "Could not initialize offline trace\n"); return -1; } } /* Init offline logstorage for MAX devices */ if (daemon_local->flags.offlineLogstorageMaxDevices > 0) { daemon->storage_handle = malloc(sizeof(DltLogStorage) * daemon_local->flags.offlineLogstorageMaxDevices); if (daemon->storage_handle == NULL) { dlt_log(LOG_ERR, "Could not initialize offline logstorage\n"); return -1; } memset(daemon->storage_handle, 0, (sizeof(DltLogStorage) * daemon_local->flags.offlineLogstorageMaxDevices)); } /* Set ECU id of daemon */ if (daemon_local->flags.evalue[0]) dlt_set_id(daemon->ecuid, daemon_local->flags.evalue); else dlt_set_id(daemon->ecuid, DLT_DAEMON_ECU_ID); /* Set flag for optional sending of serial header */ daemon->sendserialheader = daemon_local->flags.lflag; #ifdef DLT_SHM_ENABLE /* init shared memory */ if (dlt_shm_init_server(&(daemon_local->dlt_shm), daemon_local->flags.dltShmName, daemon_local->flags.sharedMemorySize) == DLT_RETURN_ERROR) { dlt_log(LOG_ERR, "Could not initialize shared memory\n"); return -1; } daemon_local->recv_buf_shm = (unsigned char *)calloc(1, DLT_SHM_RCV_BUFFER_SIZE); if (NULL == daemon_local->recv_buf_shm) { dlt_log(LOG_ERR, "failed to allocated the buffer to receive shm data\n"); return -1; } #endif /* prepare main loop */ if (dlt_message_init(&(daemon_local->msg), daemon_local->flags.vflag) == DLT_RETURN_ERROR) { dlt_log(LOG_ERR, "Could not initialize message\n"); return -1; } /* configure sending timing packets */ if (daemon_local->flags.sendMessageTime) daemon->timingpackets = 1; /* Binary semaphore for thread */ if (sem_init(&dlt_daemon_mutex, 0, 1) == -1) { dlt_log(LOG_ERR, "Could not initialize binary semaphore\n"); return -1; } /* Get ECU version info from a file. If it fails, use dlt_version as fallback. */ if (dlt_daemon_local_ecu_version_init(daemon, daemon_local, daemon_local->flags.vflag) < 0) { daemon->ECUVersionString = malloc(DLT_DAEMON_TEXTBUFSIZE); if (daemon->ECUVersionString == 0) { dlt_log(LOG_WARNING, "Could not allocate memory for version string\n"); return -1; } dlt_get_version(daemon->ECUVersionString, DLT_DAEMON_TEXTBUFSIZE); } /* Set to allows to maintain logstorage loglevel as default */ daemon->maintain_logstorage_loglevel = DLT_MAINTAIN_LOGSTORAGE_LOGLEVEL_ON; return 0; } static int dlt_daemon_init_serial(DltDaemonLocal *daemon_local) { /* create and open serial connection from/to client */ /* open serial connection */ int fd = -1; if (daemon_local->flags.yvalue[0] == '\0') return 0; fd = open(daemon_local->flags.yvalue, O_RDWR); if (fd < 0) { dlt_vlog(LOG_ERR, "Failed to open serial device %s\n", daemon_local->flags.yvalue); daemon_local->flags.yvalue[0] = 0; return -1; } if (isatty(fd)) { int speed = DLT_DAEMON_SERIAL_DEFAULT_BAUDRATE; if (daemon_local->flags.bvalue[0]) speed = atoi(daemon_local->flags.bvalue); daemon_local->baudrate = dlt_convert_serial_speed(speed); if (dlt_setup_serial(fd, (speed_t) daemon_local->baudrate) < 0) { close(fd); daemon_local->flags.yvalue[0] = 0; dlt_vlog(LOG_ERR, "Failed to configure serial device %s (%s) \n", daemon_local->flags.yvalue, strerror(errno)); return -1; } if (daemon_local->flags.vflag) dlt_log(LOG_DEBUG, "Serial init done\n"); } else { close(fd); fprintf(stderr, "Device is not a serial device, device = %s (%s) \n", daemon_local->flags.yvalue, strerror(errno)); daemon_local->flags.yvalue[0] = 0; return -1; } return dlt_connection_create(daemon_local, &daemon_local->pEvent, fd, POLLIN, DLT_CONNECTION_CLIENT_MSG_SERIAL); } #ifdef DLT_DAEMON_USE_FIFO_IPC static int dlt_daemon_init_fifo(DltDaemonLocal *daemon_local) { int ret; int fd = -1; int fifo_size; /* open named pipe(FIFO) to receive DLT messages from users */ umask(0); /* Try to delete existing pipe, ignore result of unlink */ const char *tmpFifo = daemon_local->flags.daemonFifoName; unlink(tmpFifo); ret = mkfifo(tmpFifo, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); if (ret == -1) { dlt_vlog(LOG_WARNING, "FIFO user %s cannot be created (%s)!\n", tmpFifo, strerror(errno)); return -1; } /* if */ /* Set group of daemon FIFO */ if (daemon_local->flags.daemonFifoGroup[0] != 0) { errno = 0; struct group *group_dlt = getgrnam(daemon_local->flags.daemonFifoGroup); if (group_dlt) { ret = chown(tmpFifo, -1, group_dlt->gr_gid); if (ret == -1) dlt_vlog(LOG_ERR, "FIFO user %s cannot be chowned to group %s (%s)\n", tmpFifo, daemon_local->flags.daemonFifoGroup, strerror(errno)); } else if ((errno == 0) || (errno == ENOENT) || (errno == EBADF) || (errno == EPERM)) { dlt_vlog(LOG_ERR, "Group name %s is not found (%s)\n", daemon_local->flags.daemonFifoGroup, strerror(errno)); } else { dlt_vlog(LOG_ERR, "Failed to get group id of %s (%s)\n", daemon_local->flags.daemonFifoGroup, strerror(errno)); } } fd = open(tmpFifo, O_RDWR); if (fd == -1) { dlt_vlog(LOG_WARNING, "FIFO user %s cannot be opened (%s)!\n", tmpFifo, strerror(errno)); return -1; } /* if */ if (daemon_local->daemonFifoSize != 0) { /* Set Daemon FIFO size */ if (fcntl(fd, F_SETPIPE_SZ, daemon_local->daemonFifoSize) == -1) dlt_vlog(LOG_ERR, "set FIFO size error: %s\n", strerror(errno)); } /* Get Daemon FIFO size */ if ((fifo_size = fcntl(fd, F_GETPIPE_SZ, 0)) == -1) dlt_vlog(LOG_ERR, "get FIFO size error: %s\n", strerror(errno)); else dlt_vlog(LOG_INFO, "FIFO size: %d\n", fifo_size); /* Early init, to be able to catch client (app) connections * as soon as possible. This registration is automatically ignored * during next execution. */ return dlt_connection_create(daemon_local, &daemon_local->pEvent, fd, POLLIN, DLT_CONNECTION_APP_MSG); } #endif #ifdef DLT_DAEMON_VSOCK_IPC_ENABLE static int dlt_daemon_init_vsock(DltDaemonLocal *daemon_local) { int fd; struct sockaddr_vm addr; fd = socket(AF_VSOCK, SOCK_STREAM, 0); if (fd == -1) { dlt_vlog(LOG_ERR, "Failed to create VSOCK socket: %s\n", strerror(errno)); return -1; } memset(&addr, 0, sizeof(addr)); addr.svm_family = AF_VSOCK; addr.svm_port = DLT_VSOCK_PORT; addr.svm_cid = VMADDR_CID_ANY; if (bind(fd, (struct sockaddr *) &addr, sizeof(addr)) != 0) { dlt_vlog(LOG_ERR, "Failed to bind VSOCK socket: %s\n", strerror(errno)); close(fd); return -1; } if (listen(fd, 1) != 0) { dlt_vlog(LOG_ERR, "Failed to listen on VSOCK socket: %s\n", strerror(errno)); close(fd); return -1; } return dlt_connection_create(daemon_local, &daemon_local->pEvent, fd, POLLIN, DLT_CONNECTION_APP_CONNECT); } #endif int dlt_daemon_local_connection_init(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { int fd = -1; int mask = 0; DltBindAddress_t *head = daemon_local->flags.ipNodes; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL)) { dlt_vlog(LOG_ERR, "%s: Invalid function parameters\n", __func__); return -1; } #ifdef DLT_DAEMON_USE_UNIX_SOCKET_IPC /* create and open socket to receive incoming connections from user application * socket access permission set to srw-rw-rw- (666) */ mask = S_IXUSR | S_IXGRP | S_IXOTH; if (dlt_daemon_unix_socket_open(&fd, daemon_local->flags.appSockPath, SOCK_STREAM, mask) == DLT_RETURN_OK) { if (dlt_connection_create(daemon_local, &daemon_local->pEvent, fd, POLLIN, DLT_CONNECTION_APP_CONNECT)) { dlt_log(LOG_CRIT, "Could not initialize app socket.\n"); return DLT_RETURN_ERROR; } } else { dlt_log(LOG_CRIT, "Could not initialize app socket.\n"); return DLT_RETURN_ERROR; } #else /* DLT_DAEMON_USE_FIFO_IPC */ if (dlt_daemon_init_fifo(daemon_local)) { dlt_log(LOG_ERR, "Unable to initialize fifo.\n"); return DLT_RETURN_ERROR; } #endif #ifdef DLT_DAEMON_VSOCK_IPC_ENABLE if (dlt_daemon_init_vsock(daemon_local) != 0) { dlt_log(LOG_ERR, "Unable to initialize app VSOCK socket.\n"); return DLT_RETURN_ERROR; } #endif /* create and open socket to receive incoming connections from client */ daemon_local->client_connections = 0; if (head == NULL) { /* no IP set in BindAddress option, will use "0.0.0.0" as default */ if (dlt_daemon_socket_open(&fd, daemon_local->flags.port, "0.0.0.0") == DLT_RETURN_OK) { if (dlt_connection_create(daemon_local, &daemon_local->pEvent, fd, POLLIN, DLT_CONNECTION_CLIENT_CONNECT)) { dlt_log(LOG_ERR, "Could not initialize main socket.\n"); return DLT_RETURN_ERROR; } } else { dlt_log(LOG_ERR, "Could not initialize main socket.\n"); return DLT_RETURN_ERROR; } } else { while (head != NULL) { /* open socket for each IP in the bindAddress list */ if (dlt_daemon_socket_open(&fd, daemon_local->flags.port, head->ip) == DLT_RETURN_OK) { if (dlt_connection_create(daemon_local, &daemon_local->pEvent, fd, POLLIN, DLT_CONNECTION_CLIENT_CONNECT)) { dlt_log(LOG_ERR, "Could not initialize main socket.\n"); return DLT_RETURN_ERROR; } } else { dlt_log(LOG_ERR, "Could not initialize main socket.\n"); return DLT_RETURN_ERROR; } head = head->next; } } #ifdef UDP_CONNECTION_SUPPORT if (daemon_local->UDPConnectionSetup == MULTICAST_CONNECTION_ENABLED) { if (dlt_daemon_udp_connection_setup(daemon_local) < 0) { dlt_log(LOG_ERR, "UDP fd creation failed\n"); return DLT_RETURN_ERROR; } else { dlt_log(LOG_INFO, "UDP fd creation success\n"); } } #endif /* create and open unix socket to receive incoming connections from * control application * socket access permission set to srw-rw---- (660) */ mask = S_IXUSR | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH; if (dlt_daemon_unix_socket_open(&fd, daemon_local->flags.ctrlSockPath, SOCK_STREAM, mask) == DLT_RETURN_OK) { if (dlt_connection_create(daemon_local, &daemon_local->pEvent, fd, POLLIN, DLT_CONNECTION_CONTROL_CONNECT)) { dlt_log(LOG_ERR, "Could not initialize control socket.\n"); return DLT_RETURN_ERROR; } } else { dlt_log(LOG_ERR, "Could not initialize control socket.\n"); return DLT_RETURN_ERROR; } /* Init serial */ if (dlt_daemon_init_serial(daemon_local) < 0) { dlt_log(LOG_ERR, "Could not initialize daemon data\n"); return DLT_RETURN_ERROR; } return 0; } int dlt_daemon_local_ecu_version_init(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { char *version = NULL; FILE *f = NULL; PRINT_FUNCTION_VERBOSE(verbose); /* By default, version string is null. */ daemon->ECUVersionString = NULL; /* Open the file. Bail out if error occurs */ f = fopen(daemon_local->flags.pathToECUSoftwareVersion, "r"); if (f == NULL) { /* Error level notice, because this might be deliberate choice */ dlt_log(LOG_NOTICE, "Failed to open ECU Software version file.\n"); return -1; } /* Get the file size. Bail out if stat fails. */ int fd = fileno(f); struct stat s_buf; if (fstat(fd, &s_buf) < 0) { dlt_log(LOG_WARNING, "Failed to stat ECU Software version file.\n"); fclose(f); return -1; } /* Bail out if file is too large. Use DLT_DAEMON_TEXTBUFSIZE max. * Reserve one byte for trailing '\0' */ off_t size = s_buf.st_size; if (size >= DLT_DAEMON_TEXTBUFSIZE) { dlt_log(LOG_WARNING, "Too large file for ECU version.\n"); fclose(f); return -1; } /* Allocate permanent buffer for version info */ version = malloc((size_t) (size + 1)); if (version == 0) { dlt_log(LOG_WARNING, "Cannot allocate memory for ECU version.\n"); fclose(f); return -1; } off_t offset = 0; while (!feof(f)) { offset += (off_t) fread(version + offset, 1, (size_t) size, f); if (ferror(f)) { dlt_log(LOG_WARNING, "Failed to read ECU Software version file.\n"); free(version); fclose(f); return -1; } if (offset > size) { dlt_log(LOG_WARNING, "Too long file for ECU Software version info.\n"); free(version); fclose(f); return -1; } } version[offset] = '\0';/*append null termination at end of version string */ daemon->ECUVersionString = version; fclose(f); return 0; } void dlt_daemon_local_cleanup(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == 0) || (daemon_local == 0)) { dlt_log(LOG_ERR, "Invalid function parameters used for function dlt_daemon_local_cleanup()\n"); return; } /* Don't receive event anymore */ dlt_event_handler_cleanup_connections(&daemon_local->pEvent); dlt_message_free(&(daemon_local->msg), daemon_local->flags.vflag); /* free shared memory */ if (daemon_local->flags.offlineTraceDirectory[0]) dlt_offline_trace_free(&(daemon_local->offlineTrace)); /* Ignore result */ dlt_file_free(&(daemon_local->file), daemon_local->flags.vflag); #ifdef DLT_DAEMON_USE_FIFO_IPC /* Try to delete existing pipe, ignore result of unlink() */ unlink(daemon_local->flags.daemonFifoName); #else /* DLT_DAEMON_USE_UNIX_SOCKET_IPC */ /* Try to delete existing pipe, ignore result of unlink() */ unlink(daemon_local->flags.appSockPath); #endif #ifdef DLT_SHM_ENABLE /* free shared memory */ dlt_shm_free_server(&(daemon_local->dlt_shm), daemon_local->flags.dltShmName); free(daemon_local->recv_buf_shm); daemon_local->recv_buf_shm = NULL; #endif if (daemon_local->flags.offlineLogstorageMaxDevices > 0) { /* disconnect all logstorage devices */ dlt_daemon_logstorage_cleanup(daemon, daemon_local, daemon_local->flags.vflag); free(daemon->storage_handle); } if (daemon->ECUVersionString != NULL) free(daemon->ECUVersionString); unlink(daemon_local->flags.ctrlSockPath); /* free IP list */ free(daemon_local->flags.ipNodes); } void dlt_daemon_exit_trigger() { #ifdef DLT_DAEMON_USE_FIFO_IPC char tmp[DLT_PATH_MAX] = { 0 }; ssize_t n; n = snprintf(tmp, DLT_PATH_MAX, "%s/dlt", dltFifoBaseDir); if (n < 0 || (size_t)n > DLT_PATH_MAX) { dlt_vlog(LOG_WARNING, "%s: snprintf truncation/error(%ld) %s\n", __func__, n, tmp); } (void)unlink(tmp); #endif #ifdef __QNX__ dlt_daemon_cleanup_timers(); #endif /* stop event loop */ g_exit = -1; } void dlt_daemon_signal_handler(int sig) { g_signo = sig; switch (sig) { case SIGHUP: case SIGTERM: case SIGINT: case SIGQUIT: { /* finalize the server */ dlt_vlog(LOG_NOTICE, "Exiting DLT daemon due to signal: %s\n", strsignal(sig)); dlt_daemon_exit_trigger(); break; } default: { /* This case should never happen! */ break; } } /* switch */ } /* dlt_daemon_signal_handler() */ #ifdef __QNX__ void dlt_daemon_cleanup_timers() { int i = 0; while (i < DLT_TIMER_UNKNOWN) { /* Remove FIFO of every timer and kill timer thread */ if (0 != timer_threads[i]) { pthread_kill(timer_threads[i], SIGUSR1); pthread_join(timer_threads[i], NULL); timer_threads[i] = 0; close_pipes(dlt_timer_pipes[i]); /* Free data of every timer */ if (NULL != timer_data[i]) { free(timer_data[i]); timer_data[i] = NULL; } } i++; } } #endif void dlt_daemon_daemonize(int verbose) { int i; int fd; PRINT_FUNCTION_VERBOSE(verbose); dlt_log(LOG_NOTICE, "Daemon mode\n"); /* Daemonize */ i = fork(); if (i < 0) { dlt_log(LOG_CRIT, "Unable to fork(), exiting DLT daemon\n"); exit(-1); /* fork error */ } if (i > 0) exit(0); /* parent exits */ /* child (daemon) continues */ /* Process independency */ /* obtain a new process group */ if (setsid() == -1) { dlt_log(LOG_CRIT, "setsid() failed, exiting DLT daemon\n"); exit(-1); /* fork error */ } /* Open standard descriptors stdin, stdout, stderr */ fd = open("/dev/null", O_RDWR); if (fd != -1) { /* Redirect STDOUT to /dev/null */ if (dup2(fd, STDOUT_FILENO) < 0) dlt_vlog(LOG_WARNING, "Failed to direct stdout to /dev/null. Error: %s\n", strerror(errno)); /* Redirect STDERR to /dev/null */ if (dup2(fd, STDERR_FILENO) < 0) dlt_vlog(LOG_WARNING, "Failed to direct stderr to /dev/null. Error: %s\n", strerror(errno)); close(fd); } else { dlt_log(LOG_CRIT, "Error opening /dev/null, exiting DLT daemon\n"); exit(-1); /* fork error */ } /* Set umask */ umask(DLT_DAEMON_UMASK); /* Change to root directory */ if (chdir("/") < 0) dlt_log(LOG_WARNING, "Failed to chdir to root\n"); /* Catch signals */ signal(SIGCHLD, SIG_IGN); /* ignore child */ signal(SIGTSTP, SIG_IGN); /* ignore tty signals */ signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); } /* dlt_daemon_daemonize() */ /* This function logs str to the configured output sink (socket, serial, offline trace). * To avoid recursion this function must be called only from DLT highlevel functions. * E. g. calling it to output a failure when the open of the offline trace file fails * would cause an endless loop because dlt_daemon_log_internal() would itself again try * to open the offline trace file. * This is a dlt-daemon only function. The libdlt has no equivalent function available. */ int dlt_daemon_log_internal(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *str, int verbose) { DltMessage msg = { 0 }; static uint8_t uiMsgCount = 0; DltStandardHeaderExtra *pStandardExtra = NULL; uint32_t uiType; uint16_t uiSize; uint32_t uiExtraSize; PRINT_FUNCTION_VERBOSE(verbose); /* Set storageheader */ msg.storageheader = (DltStorageHeader *)(msg.headerbuffer); dlt_set_storageheader(msg.storageheader, daemon->ecuid); /* Set standardheader */ msg.standardheader = (DltStandardHeader *)(msg.headerbuffer + sizeof(DltStorageHeader)); msg.standardheader->htyp = DLT_HTYP_UEH | DLT_HTYP_WEID | DLT_HTYP_WSID | DLT_HTYP_WTMS | DLT_HTYP_PROTOCOL_VERSION1; msg.standardheader->mcnt = uiMsgCount++; uiExtraSize = (uint32_t) (DLT_STANDARD_HEADER_EXTRA_SIZE(msg.standardheader->htyp) + (DLT_IS_HTYP_UEH(msg.standardheader->htyp) ? sizeof(DltExtendedHeader) : 0)); msg.headersize = (uint32_t) sizeof(DltStorageHeader) + (uint32_t) sizeof(DltStandardHeader) + uiExtraSize; /* Set extraheader */ pStandardExtra = (DltStandardHeaderExtra *)(msg.headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader)); dlt_set_id(pStandardExtra->ecu, daemon->ecuid); pStandardExtra->tmsp = DLT_HTOBE_32(dlt_uptime()); pStandardExtra->seid = (unsigned int) DLT_HTOBE_32(getpid()); /* Set extendedheader */ msg.extendedheader = (DltExtendedHeader *)(msg.headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg.standardheader->htyp)); msg.extendedheader->msin = DLT_MSIN_VERB | (DLT_TYPE_LOG << DLT_MSIN_MSTP_SHIFT) | ((DLT_LOG_INFO << DLT_MSIN_MTIN_SHIFT) & DLT_MSIN_MTIN); msg.extendedheader->noar = 1; dlt_set_id(msg.extendedheader->apid, "DLTD"); dlt_set_id(msg.extendedheader->ctid, "INTM"); /* Set payload data... */ uiType = DLT_TYPE_INFO_STRG; uiSize = (uint16_t) (strlen(str) + 1); msg.datasize = (uint32_t) (sizeof(uint32_t) + sizeof(uint16_t) + uiSize); msg.databuffer = (uint8_t *)malloc((size_t) msg.datasize); msg.databuffersize = msg.datasize; if (msg.databuffer == 0) { dlt_log(LOG_WARNING, "Can't allocate buffer for get log info message\n"); return -1; } msg.datasize = 0; memcpy((uint8_t *)(msg.databuffer + msg.datasize), (uint8_t *)(&uiType), sizeof(uint32_t)); msg.datasize += (uint32_t) sizeof(uint32_t); memcpy((uint8_t *)(msg.databuffer + msg.datasize), (uint8_t *)(&uiSize), sizeof(uint16_t)); msg.datasize += (uint32_t) sizeof(uint16_t); memcpy((uint8_t *)(msg.databuffer + msg.datasize), str, uiSize); msg.datasize += uiSize; /* Calc length */ msg.standardheader->len = DLT_HTOBE_16(msg.headersize - sizeof(DltStorageHeader) + msg.datasize); dlt_daemon_client_send(DLT_DAEMON_SEND_TO_ALL, daemon,daemon_local, msg.headerbuffer, sizeof(DltStorageHeader), msg.headerbuffer + sizeof(DltStorageHeader), (int) (msg.headersize - sizeof(DltStorageHeader)), msg.databuffer, (int) msg.datasize, verbose); free(msg.databuffer); return 0; } int dlt_daemon_process_client_connect(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { socklen_t cli_size; struct sockaddr_un cli; int in_sock = -1; char local_str[DLT_DAEMON_TEXTBUFSIZE] = { '\0' }; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (receiver == NULL)) { dlt_log(LOG_ERR, "Invalid function parameters used for function " "dlt_daemon_process_client_connect()\n"); return -1; } /* event from TCP server socket, new connection */ cli_size = sizeof(cli); if ((in_sock = accept(receiver->fd, (struct sockaddr *)&cli, &cli_size)) < 0) { dlt_vlog(LOG_ERR, "accept() for socket %d failed: %s\n", receiver->fd, strerror(errno)); return -1; } /* check if file file descriptor was already used, and make it invalid if it * is reused. */ /* This prevents sending messages to wrong file descriptor */ dlt_daemon_applications_invalidate_fd(daemon, daemon->ecuid, in_sock, verbose); dlt_daemon_contexts_invalidate_fd(daemon, daemon->ecuid, in_sock, verbose); /* Set socket timeout in reception */ struct timeval timeout_send; timeout_send.tv_sec = daemon_local->timeoutOnSend; timeout_send.tv_usec = 0; if (setsockopt (in_sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout_send, sizeof(timeout_send)) < 0) dlt_log(LOG_WARNING, "setsockopt failed\n"); if (dlt_connection_create(daemon_local, &daemon_local->pEvent, in_sock, POLLIN, DLT_CONNECTION_CLIENT_MSG_TCP)) { dlt_log(LOG_ERR, "Failed to register new client. \n"); /* TODO: Perform clean-up */ return -1; } /* send connection info about connected */ dlt_daemon_control_message_connection_info(in_sock, daemon, daemon_local, DLT_CONNECTION_STATUS_CONNECTED, "", verbose); /* send ecu version string */ if (daemon_local->flags.sendECUSoftwareVersion > 0) { if (daemon_local->flags.sendECUSoftwareVersion > 0) dlt_daemon_control_get_software_version(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, daemon_local->flags.vflag); if (daemon_local->flags.sendTimezone > 0) dlt_daemon_control_message_timezone(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, daemon_local->flags.vflag); } snprintf(local_str, DLT_DAEMON_TEXTBUFSIZE, "New client connection #%d established, Total Clients : %d", in_sock, daemon_local->client_connections); dlt_daemon_log_internal(daemon, daemon_local, local_str, daemon_local->flags.vflag); dlt_vlog(LOG_DEBUG, "%s%s", local_str, "\n"); if (daemon_local->client_connections == 1) { if (daemon_local->flags.vflag) dlt_log(LOG_DEBUG, "Send ring-buffer to client\n"); dlt_daemon_change_state(daemon, DLT_DAEMON_STATE_SEND_BUFFER); if (dlt_daemon_send_ringbuffer_to_client(daemon, daemon_local, verbose) == -1) { dlt_log(LOG_WARNING, "Can't send contents of ringbuffer to clients\n"); return -1; } /* send new log state to all applications */ daemon->connectionState = 1; dlt_daemon_user_send_all_log_state(daemon, verbose); } return 0; } int dlt_daemon_process_client_messages(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { int bytes_to_be_removed = 0; int must_close_socket = -1; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (receiver == NULL)) { dlt_log(LOG_ERR, "Invalid function parameters used for function " "dlt_daemon_process_client_messages()\n"); return -1; } must_close_socket = dlt_receiver_receive(receiver); if (must_close_socket < 0) { dlt_daemon_close_socket(receiver->fd, daemon, daemon_local, verbose); return -1; } /* Process all received messages */ while (dlt_message_read(&(daemon_local->msg), (uint8_t *)receiver->buf, (unsigned int) receiver->bytesRcvd, daemon_local->flags.nflag, daemon_local->flags.vflag) == DLT_MESSAGE_ERROR_OK) { /* Check for control message */ if ((0 < receiver->fd) && DLT_MSG_IS_CONTROL_REQUEST(&(daemon_local->msg))) dlt_daemon_client_process_control(receiver->fd, daemon, daemon_local, &(daemon_local->msg), daemon_local->flags.vflag); bytes_to_be_removed = (int) (daemon_local->msg.headersize + daemon_local->msg.datasize - sizeof(DltStorageHeader)); if (daemon_local->msg.found_serialheader) bytes_to_be_removed += (int) sizeof(dltSerialHeader); if (daemon_local->msg.resync_offset) bytes_to_be_removed += daemon_local->msg.resync_offset; if (dlt_receiver_remove(receiver, bytes_to_be_removed) == -1) { dlt_log(LOG_WARNING, "Can't remove bytes from receiver for sockets\n"); return -1; } } /* while */ if (dlt_receiver_move_to_begin(receiver) == -1) { dlt_log(LOG_WARNING, "Can't move bytes to beginning of receiver buffer for sockets\n"); return -1; } if (must_close_socket == 0) /* FIXME: Why the hell do we need to close the socket * on control message reception ?? */ dlt_daemon_close_socket(receiver->fd, daemon, daemon_local, verbose); return 0; } int dlt_daemon_process_client_messages_serial(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { int bytes_to_be_removed = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (receiver == NULL)) { dlt_log(LOG_ERR, "Invalid function parameters used for function " "dlt_daemon_process_client_messages_serial()\n"); return -1; } if (dlt_receiver_receive(receiver) <= 0) { dlt_log(LOG_WARNING, "dlt_receiver_receive_fd() for messages from serial interface " "failed!\n"); return -1; } /* Process all received messages */ while (dlt_message_read(&(daemon_local->msg), (uint8_t *)receiver->buf, (unsigned int) receiver->bytesRcvd, daemon_local->flags.mflag, daemon_local->flags.vflag) == DLT_MESSAGE_ERROR_OK) { /* Check for control message */ if (DLT_MSG_IS_CONTROL_REQUEST(&(daemon_local->msg))) { if (dlt_daemon_client_process_control(receiver->fd, daemon, daemon_local, &(daemon_local->msg), daemon_local->flags.vflag) == -1) { dlt_log(LOG_WARNING, "Can't process control messages\n"); return -1; } } bytes_to_be_removed = (int) (daemon_local->msg.headersize + daemon_local->msg.datasize - sizeof(DltStorageHeader)); if (daemon_local->msg.found_serialheader) bytes_to_be_removed += (int) sizeof(dltSerialHeader); if (daemon_local->msg.resync_offset) bytes_to_be_removed += daemon_local->msg.resync_offset; if (dlt_receiver_remove(receiver, bytes_to_be_removed) == -1) { dlt_log(LOG_WARNING, "Can't remove bytes from receiver for serial connection\n"); return -1; } } /* while */ if (dlt_receiver_move_to_begin(receiver) == -1) { dlt_log(LOG_WARNING, "Can't move bytes to beginning of receiver buffer for serial " "connection\n"); return -1; } return 0; } int dlt_daemon_process_control_connect( DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { socklen_t ctrl_size; struct sockaddr_un ctrl; int in_sock = -1; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (receiver == NULL)) { dlt_log(LOG_ERR, "Invalid function parameters used for function " "dlt_daemon_process_control_connect()\n"); return -1; } /* event from UNIX server socket, new connection */ ctrl_size = sizeof(ctrl); if ((in_sock = accept(receiver->fd, (struct sockaddr *)&ctrl, &ctrl_size)) < 0) { dlt_vlog(LOG_ERR, "accept() on UNIX control socket %d failed: %s\n", receiver->fd, strerror(errno)); return -1; } /* check if file file descriptor was already used, and make it invalid if it * is reused */ /* This prevents sending messages to wrong file descriptor */ dlt_daemon_applications_invalidate_fd(daemon, daemon->ecuid, in_sock, verbose); dlt_daemon_contexts_invalidate_fd(daemon, daemon->ecuid, in_sock, verbose); if (dlt_connection_create(daemon_local, &daemon_local->pEvent, in_sock, POLLIN, DLT_CONNECTION_CONTROL_MSG)) { dlt_log(LOG_ERR, "Failed to register new client. \n"); /* TODO: Perform clean-up */ return -1; } if (verbose) dlt_vlog(LOG_INFO, "New connection to control client established\n"); return 0; } #if defined DLT_DAEMON_USE_UNIX_SOCKET_IPC || defined DLT_DAEMON_VSOCK_IPC_ENABLE int dlt_daemon_process_app_connect( DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { int in_sock = -1; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (receiver == NULL)) { dlt_vlog(LOG_ERR, "%s: Invalid parameters\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } /* event from server socket, new connection */ if ((in_sock = accept(receiver->fd, NULL, NULL)) < 0) { dlt_vlog(LOG_ERR, "accept() on UNIX socket %d failed: %s\n", receiver->fd, strerror(errno)); return -1; } /* check if file file descriptor was already used, and make it invalid if it * is reused. This prevents sending messages to wrong file descriptor */ dlt_daemon_applications_invalidate_fd(daemon, daemon->ecuid, in_sock, verbose); dlt_daemon_contexts_invalidate_fd(daemon, daemon->ecuid, in_sock, verbose); if (dlt_connection_create(daemon_local, &daemon_local->pEvent, in_sock, POLLIN, DLT_CONNECTION_APP_MSG)) { dlt_log(LOG_ERR, "Failed to register new application. \n"); close(in_sock); return -1; } if (verbose) dlt_vlog(LOG_INFO, "New connection to application established\n"); return 0; } #endif int dlt_daemon_process_control_messages( DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { int bytes_to_be_removed = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (receiver == NULL)) { dlt_log(LOG_ERR, "Invalid function parameters used for function " "dlt_daemon_process_control_messages()\n"); return -1; } if (dlt_receiver_receive(receiver) <= 0) { dlt_daemon_close_socket(receiver->fd, daemon, daemon_local, verbose); /* FIXME: Why the hell do we need to close the socket * on control message reception ?? */ return 0; } /* Process all received messages */ while (dlt_message_read( &(daemon_local->msg), (uint8_t *)receiver->buf, (unsigned int) receiver->bytesRcvd, daemon_local->flags.nflag, daemon_local->flags.vflag) == DLT_MESSAGE_ERROR_OK) { /* Check for control message */ if ((receiver->fd > 0) && DLT_MSG_IS_CONTROL_REQUEST(&(daemon_local->msg))) dlt_daemon_client_process_control(receiver->fd, daemon, daemon_local, &(daemon_local->msg), daemon_local->flags.vflag); bytes_to_be_removed = (int) (daemon_local->msg.headersize + daemon_local->msg.datasize - sizeof(DltStorageHeader)); if (daemon_local->msg.found_serialheader) bytes_to_be_removed += (int) sizeof(dltSerialHeader); if (daemon_local->msg.resync_offset) bytes_to_be_removed += daemon_local->msg.resync_offset; if (dlt_receiver_remove(receiver, bytes_to_be_removed) == -1) { dlt_log(LOG_WARNING, "Can't remove bytes from receiver for sockets\n"); return -1; } } /* while */ if (dlt_receiver_move_to_begin(receiver) == -1) { dlt_log(LOG_WARNING, "Can't move bytes to beginning of receiver buffer for sockets\n"); return -1; } return 0; } static int dlt_daemon_process_user_message_not_sup(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { DltUserHeader *userheader = (DltUserHeader *)(receiver->buf); (void)daemon; (void)daemon_local; PRINT_FUNCTION_VERBOSE(verbose); dlt_vlog(LOG_ERR, "Invalid user message type received: %d!\n", userheader->message); /* remove user header */ if (dlt_receiver_remove(receiver, sizeof(DltUserHeader)) == -1) dlt_log(LOG_WARNING, "Can't remove bytes from receiver for user messages\n"); return -1; } static dlt_daemon_process_user_message_func process_user_func[DLT_USER_MESSAGE_NOT_SUPPORTED] = { dlt_daemon_process_user_message_not_sup, dlt_daemon_process_user_message_log, dlt_daemon_process_user_message_register_application, dlt_daemon_process_user_message_unregister_application, dlt_daemon_process_user_message_register_context, dlt_daemon_process_user_message_unregister_context, dlt_daemon_process_user_message_not_sup, dlt_daemon_process_user_message_not_sup, dlt_daemon_process_user_message_overflow, dlt_daemon_process_user_message_set_app_ll_ts, dlt_daemon_process_user_message_not_sup, dlt_daemon_process_user_message_not_sup, dlt_daemon_process_user_message_not_sup, dlt_daemon_process_user_message_marker, dlt_daemon_process_user_message_not_sup, dlt_daemon_process_user_message_not_sup }; int dlt_daemon_process_user_messages(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { int offset = 0; int run_loop = 1; int32_t min_size = (int32_t) sizeof(DltUserHeader); DltUserHeader *userheader; int recv; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (receiver == NULL)) { dlt_log(LOG_ERR, "Invalid function parameters used for function " "dlt_daemon_process_user_messages()\n"); return -1; } recv = dlt_receiver_receive(receiver); if (recv <= 0 && receiver->type == DLT_RECEIVE_SOCKET) { dlt_daemon_close_socket(receiver->fd, daemon, daemon_local, verbose); return 0; } else if (recv < 0) { dlt_log(LOG_WARNING, "dlt_receiver_receive_fd() for user messages failed!\n"); return -1; } /* look through buffer as long as data is in there */ while ((receiver->bytesRcvd >= min_size) && run_loop) { dlt_daemon_process_user_message_func func = NULL; offset = 0; userheader = (DltUserHeader *)(receiver->buf + offset); while (!dlt_user_check_userheader(userheader) && (offset + min_size <= receiver->bytesRcvd)) { /* resync if necessary */ offset++; userheader = (DltUserHeader *)(receiver->buf + offset); } /* Check for user header pattern */ if (!dlt_user_check_userheader(userheader)) break; /* Set new start offset */ if (offset > 0) dlt_receiver_remove(receiver, offset); if (userheader->message >= DLT_USER_MESSAGE_NOT_SUPPORTED) func = dlt_daemon_process_user_message_not_sup; else func = process_user_func[userheader->message]; if (func(daemon, daemon_local, receiver, daemon_local->flags.vflag) == -1) run_loop = 0; } /* keep not read data in buffer */ if (dlt_receiver_move_to_begin(receiver) == -1) { dlt_log(LOG_WARNING, "Can't move bytes to beginning of receiver buffer for user " "messages\n"); return -1; } return 0; } int dlt_daemon_process_user_message_overflow(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose) { uint32_t len = sizeof(DltUserControlMsgBufferOverflow); DltUserControlMsgBufferOverflow userpayload; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (rec == NULL)) { dlt_vlog(LOG_ERR, "Invalid function parameters used for %s\n", __func__); return -1; } if (dlt_receiver_check_and_get(rec, &userpayload, len, DLT_RCV_SKIP_HEADER | DLT_RCV_REMOVE) < 0) /* Not enough bytes received */ return -1; /* Store in daemon, that a message buffer overflow has occured */ /* look if TCP connection to client is available or it least message can be put into buffer */ if (dlt_daemon_control_message_buffer_overflow(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, userpayload.overflow_counter, userpayload.apid, verbose)) /* there was an error when storing message */ /* add the counter of lost messages to the daemon counter */ daemon->overflow_counter += userpayload.overflow_counter; return 0; } int dlt_daemon_send_message_overflow(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { int ret; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == 0) || (daemon_local == 0)) { dlt_log(LOG_ERR, "Invalid function parameters used for function dlt_daemon_process_user_message_overflow()\n"); return DLT_DAEMON_ERROR_UNKNOWN; } /* Store in daemon, that a message buffer overflow has occured */ if ((ret = dlt_daemon_control_message_buffer_overflow(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, daemon->overflow_counter, "", verbose))) return ret; return DLT_DAEMON_ERROR_OK; } int dlt_daemon_process_user_message_register_application(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose) { uint32_t len = sizeof(DltUserControlMsgRegisterApplication); uint32_t to_remove = 0; DltDaemonApplication *application = NULL; DltDaemonApplication *old_application = NULL; pid_t old_pid = 0; char description[DLT_DAEMON_DESCSIZE + 1] = { '\0' }; DltUserControlMsgRegisterApplication userapp; char *origin; int fd = -1; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (rec == NULL)) { dlt_vlog(LOG_ERR, "Invalid function parameters used for %s\n", __func__); return -1; } memset(&userapp, 0, sizeof(DltUserControlMsgRegisterApplication)); origin = rec->buf; /* Adding temp variable to check the return value */ int temp = 0; /* We shall not remove data before checking that everything is there. */ temp = dlt_receiver_check_and_get(rec, &userapp, len, DLT_RCV_SKIP_HEADER); if (temp < 0) /* Not enough bytes received */ return -1; else { to_remove = (uint32_t) temp; } len = userapp.description_length; if (len > DLT_DAEMON_DESCSIZE) { len = DLT_DAEMON_DESCSIZE; dlt_log(LOG_WARNING, "Application description exceeds limit\n"); } /* adjust buffer pointer */ rec->buf += to_remove + sizeof(DltUserHeader); if (dlt_receiver_check_and_get(rec, description, len, DLT_RCV_NONE) < 0) { dlt_log(LOG_ERR, "Unable to get application description\n"); /* in case description was not readable, set dummy description */ memcpy(description, "Unknown", sizeof("Unknown")); /* unknown len of original description, set to 0 to not remove in next * step. Because message buffer is re-adjusted the corrupted description * is ignored. */ len = 0; } /* adjust to_remove */ to_remove += (uint32_t) sizeof(DltUserHeader) + len; /* point to begin of message */ rec->buf = origin; /* We can now remove data. */ if (dlt_receiver_remove(rec, (int) to_remove) != DLT_RETURN_OK) { dlt_log(LOG_WARNING, "Can't remove bytes from receiver\n"); return -1; } old_application = dlt_daemon_application_find(daemon, userapp.apid, daemon->ecuid, verbose); if (old_application != NULL) old_pid = old_application->pid; if (rec->type == DLT_RECEIVE_SOCKET) fd = rec->fd; /* For sockets, an app specific fd has already been created with accept(). */ application = dlt_daemon_application_add(daemon, userapp.apid, userapp.pid, description, fd, daemon->ecuid, verbose); /* send log state to new application */ dlt_daemon_user_send_log_state(daemon, application, verbose); if (application == NULL) { dlt_vlog(LOG_WARNING, "Can't add ApplicationID '%.4s' for PID %d\n", userapp.apid, userapp.pid); return -1; } else if (old_pid != application->pid) { char local_str[DLT_DAEMON_TEXTBUFSIZE] = { '\0' }; snprintf(local_str, DLT_DAEMON_TEXTBUFSIZE, "ApplicationID '%.4s' registered for PID %d, Description=%s", application->apid, application->pid, application->application_description); dlt_daemon_log_internal(daemon, daemon_local, local_str, daemon_local->flags.vflag); dlt_vlog(LOG_DEBUG, "%s%s", local_str, "\n"); } return 0; } int dlt_daemon_process_user_message_register_context(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose) { uint32_t to_remove = 0; uint32_t len = sizeof(DltUserControlMsgRegisterContext); DltUserControlMsgRegisterContext userctxt; char description[DLT_DAEMON_DESCSIZE + 1] = { '\0' }; DltDaemonApplication *application = NULL; DltDaemonContext *context = NULL; DltServiceGetLogInfoRequest *req = NULL; char *origin; DltMessage msg; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (rec == NULL)) { dlt_vlog(LOG_ERR, "Invalid function parameters used for %s\n", __func__); return -1; } memset(&userctxt, 0, sizeof(DltUserControlMsgRegisterContext)); origin = rec->buf; /* Adding temp variable to check the return value */ int temp = 0; temp = dlt_receiver_check_and_get(rec, &userctxt, len, DLT_RCV_SKIP_HEADER); if (temp < 0) /* Not enough bytes received */ return -1; else { to_remove = (uint32_t) temp; } len = userctxt.description_length; if (len > DLT_DAEMON_DESCSIZE) { dlt_vlog(LOG_WARNING, "Context description exceeds limit: %d\n", len); len = DLT_DAEMON_DESCSIZE; } /* adjust buffer pointer */ rec->buf += to_remove + sizeof(DltUserHeader); if (dlt_receiver_check_and_get(rec, description, len, DLT_RCV_NONE) < 0) { dlt_log(LOG_ERR, "Unable to get context description\n"); /* in case description was not readable, set dummy description */ memcpy(description, "Unknown", sizeof("Unknown")); /* unknown len of original description, set to 0 to not remove in next * step. Because message buffer is re-adjusted the corrupted description * is ignored. */ len = 0; } /* adjust to_remove */ to_remove += (uint32_t) sizeof(DltUserHeader) + len; /* point to begin of message */ rec->buf = origin; /* We can now remove data. */ if (dlt_receiver_remove(rec, (int) to_remove) != DLT_RETURN_OK) { dlt_log(LOG_WARNING, "Can't remove bytes from receiver\n"); return -1; } application = dlt_daemon_application_find(daemon, userctxt.apid, daemon->ecuid, verbose); if (application == 0) { dlt_vlog(LOG_WARNING, "ApID '%.4s' not found for new ContextID '%.4s' in %s\n", userctxt.apid, userctxt.ctid, __func__); return 0; } /* Set log level */ if (userctxt.log_level == DLT_USER_LOG_LEVEL_NOT_SET) userctxt.log_level = DLT_LOG_DEFAULT; else /* Plausibility check */ if ((userctxt.log_level < DLT_LOG_DEFAULT) || (userctxt.log_level > DLT_LOG_VERBOSE)) return -1; /* Set trace status */ if (userctxt.trace_status == DLT_USER_TRACE_STATUS_NOT_SET) userctxt.trace_status = DLT_TRACE_STATUS_DEFAULT; else /* Plausibility check */ if ((userctxt.trace_status < DLT_TRACE_STATUS_DEFAULT) || (userctxt.trace_status > DLT_TRACE_STATUS_ON)) return -1; context = dlt_daemon_context_add(daemon, userctxt.apid, userctxt.ctid, userctxt.log_level, userctxt.trace_status, userctxt.log_level_pos, application->user_handle, description, daemon->ecuid, verbose); if (context == 0) { dlt_vlog(LOG_WARNING, "Can't add ContextID '%.4s' for ApID '%.4s'\n in %s", userctxt.ctid, userctxt.apid, __func__); return -1; } else { char local_str[DLT_DAEMON_TEXTBUFSIZE] = { '\0' }; snprintf(local_str, DLT_DAEMON_TEXTBUFSIZE, "ContextID '%.4s' registered for ApID '%.4s', Description=%s", context->ctid, context->apid, context->context_description); if (verbose) dlt_daemon_log_internal(daemon, daemon_local, local_str, verbose); dlt_vlog(LOG_DEBUG, "%s%s", local_str, "\n"); } if (daemon_local->flags.offlineLogstorageMaxDevices) /* Store log level set for offline logstorage into context structure*/ context->storage_log_level = (int8_t) dlt_daemon_logstorage_get_loglevel(daemon, (int8_t) daemon_local->flags.offlineLogstorageMaxDevices, userctxt.apid, userctxt.ctid); else context->storage_log_level = DLT_LOG_DEFAULT; /* Create automatic get log info response for registered context */ if (daemon_local->flags.rflag) { /* Prepare request for get log info with one application and one context */ if (dlt_message_init(&msg, verbose) == -1) { dlt_log(LOG_WARNING, "Can't initialize message"); return -1; } msg.datasize = sizeof(DltServiceGetLogInfoRequest); if (msg.databuffer && (msg.databuffersize < msg.datasize)) { free(msg.databuffer); msg.databuffer = 0; } if (msg.databuffer == 0) { msg.databuffer = (uint8_t *)malloc(msg.datasize); msg.databuffersize = msg.datasize; } if (msg.databuffer == 0) { dlt_log(LOG_WARNING, "Can't allocate buffer for get log info message\n"); return -1; } req = (DltServiceGetLogInfoRequest *)msg.databuffer; req->service_id = DLT_SERVICE_ID_GET_LOG_INFO; req->options = (uint8_t) daemon_local->flags.autoResponseGetLogInfoOption; dlt_set_id(req->apid, userctxt.apid); dlt_set_id(req->ctid, userctxt.ctid); dlt_set_id(req->com, "remo"); dlt_daemon_control_get_log_info(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, &msg, verbose); dlt_message_free(&msg, verbose); } if (context->user_handle >= DLT_FD_MINIMUM) { if ((userctxt.log_level == DLT_LOG_DEFAULT) || (userctxt.trace_status == DLT_TRACE_STATUS_DEFAULT)) { /* This call also replaces the default values with the values defined for default */ if (dlt_daemon_user_send_log_level(daemon, context, verbose) == -1) { dlt_vlog(LOG_WARNING, "Can't send current log level as response to %s for (%.4s;%.4s)\n", __func__, context->apid, context->ctid); return -1; } } } return 0; } int dlt_daemon_process_user_message_unregister_application(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose) { uint32_t len = sizeof(DltUserControlMsgUnregisterApplication); DltUserControlMsgUnregisterApplication userapp; DltDaemonApplication *application = NULL; DltDaemonContext *context; int i, offset_base; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (rec == NULL)) { dlt_vlog(LOG_ERR, "Invalid function parameters used for %s\n", __func__); return -1; } if (dlt_receiver_check_and_get(rec, &userapp, len, DLT_RCV_SKIP_HEADER | DLT_RCV_REMOVE) < 0) /* Not enough bytes received */ return -1; user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list == NULL) return -1; if (user_list->num_applications > 0) { /* Delete this application and all corresponding contexts * for this application from internal table. */ application = dlt_daemon_application_find(daemon, userapp.apid, daemon->ecuid, verbose); if (application) { /* Calculate start offset within contexts[] */ offset_base = 0; for (i = 0; i < (application - (user_list->applications)); i++) offset_base += user_list->applications[i].num_contexts; for (i = (application->num_contexts) - 1; i >= 0; i--) { context = &(user_list->contexts[offset_base + i]); if (context) { /* Delete context */ if (dlt_daemon_context_del(daemon, context, daemon->ecuid, verbose) == -1) { dlt_vlog(LOG_WARNING, "Can't delete CtID '%.4s' for ApID '%.4s' in %s\n", context->ctid, context->apid, __func__); return -1; } } } /* Delete this application entry from internal table*/ if (dlt_daemon_application_del(daemon, application, daemon->ecuid, verbose) == -1) { dlt_vlog(LOG_WARNING, "Can't delete ApID '%.4s' in %s\n", application->apid, __func__); return -1; } else { char local_str[DLT_DAEMON_TEXTBUFSIZE] = { '\0' }; snprintf(local_str, DLT_DAEMON_TEXTBUFSIZE, "Unregistered ApID '%.4s'", userapp.apid); dlt_daemon_log_internal(daemon, daemon_local, local_str, verbose); dlt_vlog(LOG_DEBUG, "%s%s", local_str, "\n"); } } } return 0; } int dlt_daemon_process_user_message_unregister_context(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose) { uint32_t len = sizeof(DltUserControlMsgUnregisterContext); DltUserControlMsgUnregisterContext userctxt; DltDaemonContext *context; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (rec == NULL)) { dlt_vlog(LOG_ERR, "Invalid function parameters used for %s\n", __func__); return -1; } if (dlt_receiver_check_and_get(rec, &userctxt, len, DLT_RCV_SKIP_HEADER | DLT_RCV_REMOVE) < 0) /* Not enough bytes received */ return -1; context = dlt_daemon_context_find(daemon, userctxt.apid, userctxt.ctid, daemon->ecuid, verbose); /* In case the daemon is loaded with predefined contexts and its context * unregisters, the context information will not be deleted from daemon's * table until its parent application is unregistered. */ if (context && (context->predefined == false)) { /* Delete this connection entry from internal table*/ if (dlt_daemon_context_del(daemon, context, daemon->ecuid, verbose) == -1) { dlt_vlog(LOG_WARNING, "Can't delete CtID '%.4s' for ApID '%.4s' in %s\n", userctxt.ctid, userctxt.apid, __func__); return -1; } else { char local_str[DLT_DAEMON_TEXTBUFSIZE] = { '\0' }; snprintf(local_str, DLT_DAEMON_TEXTBUFSIZE, "Unregistered CtID '%.4s' for ApID '%.4s'", userctxt.ctid, userctxt.apid); if (verbose) dlt_daemon_log_internal(daemon, daemon_local, local_str, verbose); dlt_vlog(LOG_DEBUG, "%s%s", local_str, "\n"); } } /* Create automatic unregister context response for unregistered context */ if (daemon_local->flags.rflag) dlt_daemon_control_message_unregister_context(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, userctxt.apid, userctxt.ctid, "remo", verbose); return 0; } int dlt_daemon_process_user_message_log(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose) { int ret = 0; int size = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (rec == NULL)) { dlt_vlog(LOG_ERR, "%s: invalid function parameters.\n", __func__); return DLT_DAEMON_ERROR_UNKNOWN; } #ifdef DLT_SHM_ENABLE /** In case of SHM, the header still received via fifo/unix_socket receiver, * so we need to remove header from the receiver. */ if (dlt_receiver_remove(rec, sizeof(DltUserHeader)) < 0) /* Not enough bytes received to remove*/ return DLT_DAEMON_ERROR_UNKNOWN; while (1) { /* get log message from SHM then store into receiver buffer */ size = dlt_shm_pull(&(daemon_local->dlt_shm), daemon_local->recv_buf_shm, DLT_SHM_RCV_BUFFER_SIZE); if (size <= 0) break; ret = dlt_message_read(&(daemon_local->msg), daemon_local->recv_buf_shm, size, 0, verbose); if (DLT_MESSAGE_ERROR_OK != ret) { dlt_shm_remove(&(daemon_local->dlt_shm)); dlt_log(LOG_WARNING, "failed to read messages from shm.\n"); return DLT_DAEMON_ERROR_UNKNOWN; } ret = dlt_daemon_client_send_message_to_all_client(daemon, daemon_local, verbose); if (DLT_DAEMON_ERROR_OK != ret) dlt_log(LOG_ERR, "failed to send message to client.\n"); } #else ret = dlt_message_read(&(daemon_local->msg), (unsigned char *)rec->buf + sizeof(DltUserHeader), (unsigned int) ((unsigned int) rec->bytesRcvd - sizeof(DltUserHeader)), 0, verbose); if (ret != DLT_MESSAGE_ERROR_OK) { if (ret != DLT_MESSAGE_ERROR_SIZE) /* This is a normal usecase: The daemon reads the data in 10kb chunks. * Thus the last trace in this chunk is probably not complete and will be completed * with the next chunk read. This happens always when the FIFO is filled with more than 10kb before * the daemon is able to read from the FIFO. * Thus the loglevel of this message is set to DEBUG. * A cleaner solution would be to check more in detail whether the message is not complete (normal usecase) * or the headers are corrupted (error case). */ dlt_log(LOG_DEBUG, "Can't read messages from receiver\n"); return DLT_DAEMON_ERROR_UNKNOWN; } dlt_daemon_client_send_message_to_all_client(daemon, daemon_local, verbose); /* keep not read data in buffer */ size = (int) (daemon_local->msg.headersize + daemon_local->msg.datasize - sizeof(DltStorageHeader) + sizeof(DltUserHeader)); if (daemon_local->msg.found_serialheader) size += (int) sizeof(dltSerialHeader); if (dlt_receiver_remove(rec, size) != DLT_RETURN_OK) { dlt_log(LOG_WARNING, "failed to remove bytes from receiver.\n"); return DLT_DAEMON_ERROR_UNKNOWN; } #endif return DLT_DAEMON_ERROR_OK; } int dlt_daemon_process_user_message_set_app_ll_ts(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose) { uint32_t len = sizeof(DltUserControlMsgAppLogLevelTraceStatus); DltUserControlMsgAppLogLevelTraceStatus userctxt; DltDaemonApplication *application; DltDaemonContext *context; int i, offset_base; int8_t old_log_level, old_trace_status; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (rec == NULL)) { dlt_vlog(LOG_ERR, "Invalid function parameters used for %s\n", __func__); return DLT_RETURN_ERROR; } user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list == NULL) return DLT_RETURN_ERROR; memset(&userctxt, 0, len); if (dlt_receiver_check_and_get(rec, &userctxt, len, DLT_RCV_SKIP_HEADER | DLT_RCV_REMOVE) < 0) /* Not enough bytes received */ return DLT_RETURN_ERROR; if (user_list->num_applications > 0) { /* Get all contexts with application id matching the received application id */ application = dlt_daemon_application_find(daemon, userctxt.apid, daemon->ecuid, verbose); if (application) { /* Calculate start offset within contexts[] */ offset_base = 0; for (i = 0; i < (application - (user_list->applications)); i++) offset_base += user_list->applications[i].num_contexts; for (i = 0; i < application->num_contexts; i++) { context = &(user_list->contexts[offset_base + i]); if (context) { old_log_level = context->log_level; context->log_level = (int8_t) userctxt.log_level; /* No endianess conversion necessary*/ old_trace_status = context->trace_status; context->trace_status = (int8_t) userctxt.trace_status; /* No endianess conversion necessary */ /* The following function sends also the trace status */ if ((context->user_handle >= DLT_FD_MINIMUM) && (dlt_daemon_user_send_log_level(daemon, context, verbose) != 0)) { context->log_level = old_log_level; context->trace_status = old_trace_status; } } } } } return DLT_RETURN_OK; } int dlt_daemon_process_user_message_log_mode(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose) { DltUserControlMsgLogMode userctxt; uint32_t len = sizeof(DltUserControlMsgLogMode); PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == 0) || (daemon_local == 0)) { dlt_log(LOG_ERR, "Invalid function parameters used for function dlt_daemon_process_log_mode()\n"); return -1; } memset(&userctxt, 0, len); if (dlt_receiver_check_and_get(rec, &userctxt, len, DLT_RCV_SKIP_HEADER | DLT_RCV_REMOVE) < 0) /* Not enough bytes received */ return -1; /* set the new log mode */ daemon->mode = userctxt.log_mode; /* write configuration persistantly */ dlt_daemon_configuration_save(daemon, daemon->runtime_configuration, verbose); return 0; } int dlt_daemon_process_user_message_marker(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose) { uint32_t len = sizeof(DltUserControlMsgLogMode); DltUserControlMsgLogMode userctxt; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (rec == NULL)) { dlt_vlog(LOG_ERR, "Invalid function parameters used for %s\n", __func__); return -1; } memset(&userctxt, 0, len); if (dlt_receiver_check_and_get(rec, &userctxt, len, DLT_RCV_SKIP_HEADER | DLT_RCV_REMOVE) < 0) /* Not enough bytes received */ return -1; /* Create automatic unregister context response for unregistered context */ dlt_daemon_control_message_marker(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, verbose); return 0; } int dlt_daemon_send_ringbuffer_to_client(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { int ret; static uint8_t data[DLT_DAEMON_RCVBUFSIZE]; int length; #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE uint32_t curr_time; #endif PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == 0) || (daemon_local == 0)) { dlt_log(LOG_ERR, "Invalid function parameters used for function dlt_daemon_send_ringbuffer_to_client()\n"); return DLT_DAEMON_ERROR_UNKNOWN; } if (dlt_buffer_get_message_count(&(daemon->client_ringbuffer)) <= 0) { dlt_daemon_change_state(daemon, DLT_DAEMON_STATE_SEND_DIRECT); return DLT_DAEMON_ERROR_OK; } #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE if (sd_notify(0, "WATCHDOG=1") < 0) dlt_log(LOG_WARNING, "Could not reset systemd watchdog\n"); curr_time = dlt_uptime(); #endif while ((length = dlt_buffer_copy(&(daemon->client_ringbuffer), data, sizeof(data))) > 0) { #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE if ((dlt_uptime() - curr_time) / 10000 >= watchdog_trigger_interval) { if (sd_notify(0, "WATCHDOG=1") < 0) dlt_log(LOG_WARNING, "Could not reset systemd watchdog\n"); curr_time = dlt_uptime(); } #endif if ((ret = dlt_daemon_client_send(DLT_DAEMON_SEND_FORCE, daemon, daemon_local, 0, 0, data, length, 0, 0, verbose))) return ret; dlt_buffer_remove(&(daemon->client_ringbuffer)); if (daemon->state != DLT_DAEMON_STATE_SEND_BUFFER) dlt_daemon_change_state(daemon, DLT_DAEMON_STATE_SEND_BUFFER); if (dlt_buffer_get_message_count(&(daemon->client_ringbuffer)) <= 0) { dlt_daemon_change_state(daemon, DLT_DAEMON_STATE_SEND_DIRECT); return DLT_DAEMON_ERROR_OK; } } return DLT_DAEMON_ERROR_OK; } #ifdef __QNX__ static void *timer_thread(void *data) { sigset_t set; sigset_t pset; int pexit = 0; /* * In timer thread, it is only expecting to receive SIGUSR1 */ sigemptyset(&set); sigaddset(&set, SIGUSR1); sigprocmask(SIG_BLOCK, &set, NULL); DltDaemonPeriodicData* timer_data = (DltDaemonPeriodicData*) data; /* Timer will start in starts_in sec*/ sleep(timer_data->starts_in); while (1) { if (0 > write(dlt_timer_pipes[timer_data->timer_id][1], "1", 1)) { dlt_vlog(LOG_ERR, "Failed to send notification for timer [%s]!\n", dlt_timer_names[timer_data->timer_id]); pexit = 1; } if (sigpending(&pset)) { dlt_log(LOG_ERR, "sigpending error!\n"); pexit = 1; } if (sigismember(&pset, SIGUSR1)) { dlt_log(LOG_NOTICE, "Received SIGUSR1! Stop thread\n"); pexit = 1; } if (pexit) { close_pipes(dlt_timer_pipes[timer_data->timer_id]); return NULL; } sleep(timer_data->period_sec); } } #endif int create_timer_fd(DltDaemonLocal *daemon_local, int period_sec, int starts_in, DltTimers timer_id) { int local_fd = DLT_FD_INIT; char *timer_name = NULL; if (timer_id >= DLT_TIMER_UNKNOWN) { dlt_log(DLT_LOG_ERROR, "Unknown timer."); return -1; } timer_name = dlt_timer_names[timer_id]; if (daemon_local == NULL) { dlt_log(DLT_LOG_ERROR, "Daemon local structure is NULL"); return -1; } if ((period_sec <= 0) || (starts_in <= 0)) { /* timer not activated via the service file */ dlt_vlog(LOG_INFO, "<%s> not set: period=0\n", timer_name); local_fd = DLT_FD_INIT; } else { #ifdef linux struct itimerspec l_timer_spec; local_fd = timerfd_create(CLOCK_MONOTONIC, 0); if (local_fd < 0) dlt_vlog(LOG_WARNING, "<%s> timerfd_create failed: %s\n", timer_name, strerror(errno)); l_timer_spec.it_interval.tv_sec = period_sec; l_timer_spec.it_interval.tv_nsec = 0; l_timer_spec.it_value.tv_sec = starts_in; l_timer_spec.it_value.tv_nsec = 0; if (timerfd_settime(local_fd, 0, &l_timer_spec, NULL) < 0) { dlt_vlog(LOG_WARNING, "<%s> timerfd_settime failed: %s\n", timer_name, strerror(errno)); local_fd = DLT_FD_INIT; } #elif __QNX__ /* * Since timerfd is not valid in QNX, new threads are introduced * to manage timers and communicate with main thread when timer expires. */ if(0 != pipe(dlt_timer_pipes[timer_id])) { dlt_vlog(LOG_ERR, "Failed to create pipe for timer [%s]", dlt_timer_names[timer_id]); return -1; } if (NULL == timer_data[timer_id]) { timer_data[timer_id] = calloc(1, sizeof(DltDaemonPeriodicData)); if (NULL == timer_data[timer_id]) { dlt_vlog(LOG_ERR, "Failed to allocate memory for timer_data [%s]!\n", dlt_timer_names[timer_id]); close_pipes(dlt_timer_pipes[timer_id]); return -1; } } timer_data[timer_id]->timer_id = timer_id; timer_data[timer_id]->period_sec = period_sec; timer_data[timer_id]->starts_in = starts_in; timer_data[timer_id]->wakeups_missed = 0; if (0 != pthread_create(&timer_threads[timer_id], NULL, &timer_thread, (void*)timer_data[timer_id])) { dlt_vlog(LOG_ERR, "Failed to create new thread for timer [%s]!\n", dlt_timer_names[timer_id]); /* Clean up timer before returning */ close_pipes(dlt_timer_pipes[timer_id]); free(timer_data[timer_id]); timer_data[timer_id] = NULL; return -1; } local_fd = dlt_timer_pipes[timer_id][0]; #endif } return dlt_connection_create(daemon_local, &daemon_local->pEvent, local_fd, POLLIN, dlt_timer_conn_types[timer_id]); } /* Close connection function */ int dlt_daemon_close_socket(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { char local_str[DLT_DAEMON_TEXTBUFSIZE] = { '\0' }; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon_local == NULL) || (daemon == NULL)) { dlt_log(LOG_ERR, "dlt_daemon_close_socket: Invalid input parmeters\n"); return -1; } /* Closure is done while unregistering has for any connection */ dlt_event_handler_unregister_connection(&daemon_local->pEvent, daemon_local, sock); if (daemon_local->client_connections == 0) { /* send new log state to all applications */ daemon->connectionState = 0; dlt_daemon_user_send_all_log_state(daemon, verbose); /* For offline tracing we still can use the same states */ /* as for socket sending. Using this trick we see the traces */ /* In the offline trace AND in the socket stream. */ if (daemon_local->flags.yvalue[0] == 0) dlt_daemon_change_state(daemon, DLT_DAEMON_STATE_BUFFER); } dlt_daemon_control_message_connection_info(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, DLT_CONNECTION_STATUS_DISCONNECTED, "", verbose); snprintf(local_str, DLT_DAEMON_TEXTBUFSIZE, "Client connection #%d closed. Total Clients : %d", sock, daemon_local->client_connections); dlt_daemon_log_internal(daemon, daemon_local, local_str, daemon_local->flags.vflag); dlt_vlog(LOG_DEBUG, "%s%s", local_str, "\n"); return 0; } /** \} */ dlt-daemon-2.18.6/src/daemon/dlt-daemon.h000066400000000000000000000371401377520261000200730ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-daemon.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-daemon.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ #ifndef DLT_DAEMON_H #define DLT_DAEMON_H #include /* for NAME_MAX */ #include #include "dlt_daemon_common.h" #include "dlt_user_shared.h" #include "dlt_user_shared_cfg.h" #include "dlt_daemon_event_handler_types.h" #include "dlt_gateway_types.h" #include "dlt_offline_trace.h" #define DLT_DAEMON_FLAG_MAX 256 /** * The flags of a dlt daemon. */ typedef struct { int aflag; /**< (Boolean) Print DLT messages; payload as ASCII */ int sflag; /**< (Boolean) Print DLT messages; payload as hex */ int xflag; /**< (Boolean) Print DLT messages; only headers */ int vflag; /**< (Boolean) Verbose mode */ int dflag; /**< (Boolean) Daemonize */ int lflag; /**< (Boolean) Send DLT messages with serial header */ int rflag; /**< (Boolean) Send automatic get log info response during context registration */ int mflag; /**< (Boolean) Sync to serial header on serial connection */ int nflag; /**< (Boolean) Sync to serial header on all TCP connections */ char evalue[NAME_MAX + 1]; /**< (String: ECU ID) Set ECU ID (Default: ECU1) */ char bvalue[NAME_MAX + 1]; /**< (String: Baudrate) Serial device baudrate (Default: 115200) */ char yvalue[NAME_MAX + 1]; /**< (String: Devicename) Additional support for serial device */ char ivalue[NAME_MAX + 1]; /**< (String: Directory) Directory where to store the persistant configuration (Default: /tmp) */ char cvalue[NAME_MAX + 1]; /**< (String: Directory) Filename of DLT configuration file (Default: /etc/dlt.conf) */ int sharedMemorySize; /**< (int) Size of shared memory (Default: 100000) */ int sendMessageTime; /**< (Boolean) Send periodic Message Time if client is connected (Default: 0) */ char offlineTraceDirectory[DLT_DAEMON_FLAG_MAX]; /**< (String: Directory) Store DLT messages to local directory (Default: /etc/dlt.conf) */ int offlineTraceFileSize; /**< (int) Maximum size in bytes of one trace file (Default: 1000000) */ int offlineTraceMaxSize; /**< (int) Maximum size of all trace files (Default: 4000000) */ int offlineTraceFilenameTimestampBased; /**< (int) timestamp based or index based (Default: 1 Timestamp based) */ int loggingMode; /**< (int) The logging console for internal logging of dlt-daemon (Default: 0) */ int loggingLevel; /**< (int) The logging level for internal logging of dlt-daemon (Default: 6) */ char loggingFilename[DLT_DAEMON_FLAG_MAX]; /**< (String: Filename) The logging filename if internal logging mode is log to file (Default: /tmp/log) */ int sendECUSoftwareVersion; /**< (Boolean) Send ECU software version perdiodically */ char pathToECUSoftwareVersion[DLT_DAEMON_FLAG_MAX]; /**< (String: Filename) The file from which to read the ECU version from. */ int sendTimezone; /**< (Boolean) Send Timezone perdiodically */ uint32_t offlineLogstorageMaxDevices; /**< (int) Maximum devices to be used as offline logstorage devices */ char offlineLogstorageDirPath[DLT_MOUNT_PATH_MAX]; /**< (String: Directory) DIR path to store offline logs */ int offlineLogstorageTimestamp; /**< (int) Append timestamp in offline logstorage filename */ char offlineLogstorageDelimiter; /**< (char) Append delimeter character in offline logstorage filename */ unsigned int offlineLogstorageMaxCounter; /**< (int) Maximum offline logstorage file counter index until wraparound */ unsigned int offlineLogstorageMaxCounterIdx; /**< (int) String len of offlineLogstorageMaxCounter*/ unsigned int offlineLogstorageCacheSize; /**< Max cache size offline logstorage cache */ #ifdef DLT_DAEMON_USE_UNIX_SOCKET_IPC char appSockPath[DLT_DAEMON_FLAG_MAX]; /**< Path to User socket */ #else /* DLT_DAEMON_USE_FIFO_IPC */ char userPipesDir[DLT_PATH_MAX]; /**< (String: Directory) directory where dltpipes reside (Default: /tmp/dltpipes) */ char daemonFifoName[DLT_PATH_MAX]; /**< (String: Filename) name of local fifo (Default: /tmp/dlt) */ char daemonFifoGroup[DLT_PATH_MAX]; /**< (String: Group name) Owner group of local fifo (Default: Primary Group) */ #endif #ifdef DLT_SHM_ENABLE char dltShmName[NAME_MAX + 1]; /**< Shared memory name */ #endif unsigned int port; /**< port number */ char ctrlSockPath[DLT_DAEMON_FLAG_MAX]; /**< Path to Control socket */ int gatewayMode; /**< (Boolean) Gateway Mode */ char gatewayConfigFile[DLT_DAEMON_FLAG_MAX]; /**< Gateway config file path */ int autoResponseGetLogInfoOption; /**< (int) The Option of automatic get log info response during context registration. (Default: 7)*/ int contextLogLevel; /**< (int) log level sent to context if registered with default log-level or if enforced*/ int contextTraceStatus; /**< (int) trace status sent to context if registered with default trace status or if enforced*/ int enforceContextLLAndTS; /**< (Boolean) Enforce log-level, trace-status not to exceed contextLogLevel, contextTraceStatus */ DltBindAddress_t* ipNodes; /**< (String: BindAddress) The daemon accepts connections only on this list of IP addresses */ int injectionMode; /**< (Boolean) Injection mode */ } DltDaemonFlags; /** * The global parameters of a dlt daemon. */ typedef struct { DltDaemonFlags flags; /**< flags of the daemon */ DltFile file; /**< struct for file access */ DltEventHandler pEvent; /**< struct for message producer event handling */ DltGateway pGateway; /**< struct for passive node connection handling */ DltMessage msg; /**< one dlt message */ int client_connections; /**< counter for nr. of client connections */ size_t baudrate; /**< Baudrate of serial connection */ #ifdef DLT_SHM_ENABLE DltShm dlt_shm; /**< Shared memory handling */ unsigned char *recv_buf_shm; /**< buffer for receive message from shm */ #endif DltOfflineTrace offlineTrace; /**< Offline trace handling */ int timeoutOnSend; unsigned long RingbufferMinSize; unsigned long RingbufferMaxSize; unsigned long RingbufferStepSize; unsigned long daemonFifoSize; #ifdef UDP_CONNECTION_SUPPORT int UDPConnectionSetup; /* enable/disable the UDP connection */ char UDPMulticastIPAddress[MULTICASTIP_MAX_SIZE]; /* multicast ip addres */ int UDPMulticastIPPort; /* multicast port */ #endif } DltDaemonLocal; typedef struct { unsigned long long wakeups_missed; int period_sec; int starts_in; int timer_id; } DltDaemonPeriodicData; typedef struct { DltDaemon *daemon; DltDaemonLocal *daemon_local; } DltDaemonTimingPacketThreadData; typedef DltDaemonTimingPacketThreadData DltDaemonECUVersionThreadData; #define DLT_DAEMON_ERROR_OK 0 #define DLT_DAEMON_ERROR_UNKNOWN -1 #define DLT_DAEMON_ERROR_BUFFER_FULL -2 #define DLT_DAEMON_ERROR_SEND_FAILED -3 #define DLT_DAEMON_ERROR_WRITE_FAILED -4 /* Function prototypes */ void dlt_daemon_local_cleanup(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); int dlt_daemon_local_init_p1(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); int dlt_daemon_local_init_p2(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); int dlt_daemon_local_connection_init(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); int dlt_daemon_local_ecu_version_init(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); void dlt_daemon_daemonize(int verbose); void dlt_daemon_exit_trigger(); void dlt_daemon_signal_handler(int sig); #ifdef __QNX__ void dlt_daemon_cleanup_timers(); void close_pipes(int fds[2]); #endif int dlt_daemon_process_client_connect(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *recv, int verbose); int dlt_daemon_process_client_messages(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *revc, int verbose); int dlt_daemon_process_client_messages_serial(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *recv, int verbose); int dlt_daemon_process_user_messages(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *recv, int verbose); int dlt_daemon_process_one_s_timer(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *recv, int verbose); int dlt_daemon_process_sixty_s_timer(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *recv, int verbose); int dlt_daemon_process_systemd_timer(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *recv, int verbose); int dlt_daemon_process_control_connect(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *recv, int verbose); #if defined DLT_DAEMON_USE_UNIX_SOCKET_IPC || defined DLT_DAEMON_VSOCK_IPC_ENABLE int dlt_daemon_process_app_connect(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *recv, int verbose); #endif int dlt_daemon_process_control_messages(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *recv, int verbose); typedef int (*dlt_daemon_process_user_message_func)(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose); int dlt_daemon_process_user_message_overflow(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose); int dlt_daemon_send_message_overflow(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); int dlt_daemon_process_user_message_register_application(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose); int dlt_daemon_process_user_message_unregister_application(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose); int dlt_daemon_process_user_message_register_context(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose); int dlt_daemon_process_user_message_unregister_context(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose); int dlt_daemon_process_user_message_log(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose); int dlt_daemon_process_user_message_set_app_ll_ts(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose); int dlt_daemon_process_user_message_marker(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose); int dlt_daemon_send_ringbuffer_to_client(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); void dlt_daemon_timingpacket_thread(void *ptr); void dlt_daemon_ecu_version_thread(void *ptr); #if defined(DLT_SYSTEMD_WATCHDOG_ENABLE) void dlt_daemon_systemd_watchdog_thread(void *ptr); #endif int create_timer_fd(DltDaemonLocal *daemon_local, int period_sec, int starts_in, DltTimers timer); int dlt_daemon_close_socket(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); #endif /* DLT_DAEMON_H */ dlt-daemon-2.18.6/src/daemon/dlt-daemon.rc000066400000000000000000000001511377520261000202400ustar00rootroot00000000000000service dlt-daemon /vendor/bin/dlt-daemon class late_start user root group root disabled dlt-daemon-2.18.6/src/daemon/dlt-daemon_cfg.h000066400000000000000000000120031377520261000207010ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-daemon_cfg.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-daemon-cfg.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ #ifndef DLT_DAEMON_CFG_H #define DLT_DAEMON_CFG_H /*************/ /* Changable */ /*************/ /* Stack size of timing packet thread */ #define DLT_DAEMON_TIMINGPACKET_THREAD_STACKSIZE 100000 /* Stack size of ecu version thread */ #define DLT_DAEMON_ECU_VERSION_THREAD_STACKSIZE 100000 /* Size of receive buffer for shm connection (from user application) */ #define DLT_SHM_RCV_BUFFER_SIZE 10000 /* Size of receive buffer for fifo connection (from user application) */ #define DLT_DAEMON_RCVBUFSIZE 10024 /* Size of receive buffer for socket connection (from dlt client) */ #define DLT_DAEMON_RCVBUFSIZESOCK 10024 /* Size of receive buffer for serial connection (from dlt client) */ #define DLT_DAEMON_RCVBUFSIZESERIAL 10024 /* Size of buffer for text output */ #define DLT_DAEMON_TEXTSIZE 10024 /* Size of buffer */ #define DLT_DAEMON_TEXTBUFSIZE 512 /* Maximum length of a description */ #define DLT_DAEMON_DESCSIZE 256 /* Umask of daemon, creates files with permission 750 */ #define DLT_DAEMON_UMASK 027 /* Default ECU ID, used in storage header and transmitted to client*/ #define DLT_DAEMON_ECU_ID "ECU1" /* Default baudrate for serial interface */ #define DLT_DAEMON_SERIAL_DEFAULT_BAUDRATE 115200 /************************/ /* Don't change please! */ /************************/ #endif /* DLT_DAEMON_CFG_H */ dlt-daemon-2.18.6/src/daemon/dlt.conf000066400000000000000000000210331377520261000173220ustar00rootroot00000000000000# Configuration file of DLT daemon # # Configurations made here will overwrite settings by command line ######################################################################## # General configuration # ######################################################################## # Start daemon in debug mode, so that all internal debug information is printed out on the console # Verbose = 1 # Daemonize DLT daemon, if it is started as daemon # Daemonize = 1 # Send DLT messages with serial header # SendSerialHeader = 1 # Send automatic get log info response during context registration SendContextRegistration = 1 # Option of get log info response during context registration (Default: 7) # Apid and Ctid Only = 3, with LogLevel = 4, with TraceStatus = 5, with LL and TS = 6, with LL, TS, and Description = 7 # SendContextRegistrationOption = 7 # Send automatic time packets every second if client is connected (Default: 0) # SendMessageTime = 0 # Set ECU ID (Default: ECU1) ECUId = ECU1 # Size of shared memory (Default: 100000) SharedMemorySize = 100000 # Directory where to store the persistant configuration (Default: /tmp) # PersistanceStoragePath = /tmp # The logging console for internal logging of dlt-daemon (Default: 0) # 0 = log to stdout # 1 = log to syslog # 2 = log to file (see LoggingFilename) # 3 = log to stderr LoggingMode = 0 # The internal log level, up to which logs are written (Default: 6) # LOG_EMERG = 0, LOG_ALERT = 1, LOG_CRIT = 2, LOG_ERR = 3, LOG_WARNING = 4, LOG_NOTICE = 5, LOG_INFO = 6, LOG_DEBUG = 7 LoggingLevel = 6 # The logging filename if internal logging mode is log to file (Default: /tmp/dlt.log) LoggingFilename = /tmp/dlt.log # Timeout on send to client (sec) TimeOutOnSend = 4 # The minimum size of the Ringbuffer, used for storing temporary DLT messages, until client is connected (Default: 500000) RingbufferMinSize = 500000 # The max size of the Ringbuffer, used for storing temporary DLT messages, until client is connected (Default: 10000000) RingbufferMaxSize = 10000000 # The step size the Ringbuffer is increased, used for storing temporary DLT messages, until client is connected (Default: 500000) RingbufferStepSize = 500000 # The size of Daemon FIFO (/tmp/dlt) (Default: 65536, MinSize: depend on pagesize of system, MaxSize: please check /proc/sys/fs/pipe-max-size) # DaemonFIFOSize = 65536 # Initial log-level that is sent when an application registers (Default: 4) # DLT_LOG_OFF = 0, DLT_LOG_FATAL = 1, DLT_LOG_ERROR = 2, DLT_LOG_WARN = 3, DLT_LOG_INFO = 4, DLT_LOG_DEBUG = 5, DLT_LOG_VERBOSE = 6 # ContextLogLevel = 4 # Initial trace-status that is sent when an application registers (Default: 0) # DLT_TRACE_STATUS_OFF = 0, DLT_TRACE_STATUS_ON = 1 # ContextTraceStatus = 0 # Force log level and trace status of context to not exceed "ContextLogLevel" and "ContextTraceStatus" (Default: 0 = OFF) # If set to 1 (ON) whenever a context registers or changes the log-level it has to be lower or equal to ContextLogLevel # ForceContextLogLevelAndTraceStatus = 1 # Allows injection mode usage (Default: 1) # InjectionMode = 1 ######################################################################## # Gateway Configuration # ######################################################################## # Enable Gateway mode (Default: 0) # GatewayMode = 1 # Read gateway configuration from another location # GatewayConfigFile = /etc/dlt_gateway.conf ######################################################################## # Permission configuration # # ==================================================================== # # Owner group of daemon FIFO directory(Default: /tmp/dlt) # (If not set, primary group of dlt-daemon process is used) # DaemonFifoGroup = dlt_user_apps_group ######################################################################## # Control Application # ######################################################################## ControlSocketPath = /tmp/dlt-ctrl.sock ######################################################################## # Offline Trace memory # ######################################################################## # Store DLT messages to local directory, if not set offline Trace is off (Default: off) # OfflineTraceDirectory = /tmp # Maximum size in bytes of one trace file (Default: 1000000) # OfflineTraceFileSize = 1000000 # Maximum size of all trace files (Default: 4000000) # OfflineTraceMaxSize = 4000000 # Filename timestamp based or index based (Default:1) (timestamp based=1, index based =0) # OfflineTraceFileNameTimestampBased = 1 ######################################################################## # Local console output configuration # ######################################################################## # Print DLT messages; payload as ASCII # PrintASCII = 1 # Print DLT messages; payload as hex # PrintHex = 1 # Print DLT messages; only headers # PrintHeadersOnly = 1 ######################################################################## # Client Serial port configuration # ######################################################################## # Additional support for serial device # If a device name is set serial port is enabled. # RS232DeviceName = /dev/ttyS0 # Serial device baudrate (Default: 115200) # RS232Baudrate = 115200 # Sync to serial header on serial connection # RS232SyncSerialHeader = 1 ######################################################################## # TCP Serial port configuration # ######################################################################## # Sync to serial header on all TCP connections # TCPSyncSerialHeader = 1 ######################################################################## # ECU Software version info # ######################################################################## # Send periodic get ecu version info (Default: 0) # SendECUSoftwareVersion = 0 # Absolute path to file storing version info - otherwise DLT version is used # PathToECUSoftwareVersion = ######################################################################## # Timezone info # ######################################################################## # Send periodic timezone info (Default: 0) # SendTimezone = 0 ############################################################################## # Offline logstorage # ############################################################################## # Store DLT log messages, if not set offline logstorage is off (Default: off) # Maximum devices to be used as offline logstorage devices # OfflineLogstorageMaxDevices = 1 # Path to store DLT offline log storage messages (Default: off) # OfflineLogstorageDirPath = /opt # File options # Appends timestamp in log file name, Disable by setting to 0 (Default: 1) # OfflineLogstorageTimestamp = 0 # Appends delimiter in log file name, allowed punctutations only (Default: _) # OfflineLogstorageDelimiter = _ # Wrap around value for log file count in file name (Default: UINT_MAX) # OfflineLogstorageMaxCounter = 999 # Maximal used memory for Logstorage Cache in KB (Default: 30000 KB) # OfflineLogstorageCacheSize = 30000 ############################################################################## # UDP Multicast Configuration # ############################################################################## # Enable UDP connection support for daemon(Control Message/Multicast is enabled) # UDPConnectionSetup = 1 # UDP multicast address(default:225.0.0.37) # UDPMulticastIPAddress = 225.0.0.37 # UDP multicast port(default:3491) # UDPMulticastIPPort = 3491 ############################################################################## # BindAddress Limitation # ############################################################################## # Accept connections only on this list of IP addresses (Default: "0.0.0.0" INADDR_ANY) # The IP addresses must be separated with ',' or ';' but not with space character ' ' # If DLT_USE_IPv6 flag is ON, then only IPv6 addresses are accepted # If DLT_USE_IPv6 flag is OFF, then only IPv4 addresses are accepted # BindAddress = 160.48.199.97;160.48.199.98 dlt-daemon-2.18.6/src/daemon/dlt_daemon_client.c000066400000000000000000003214501377520261000215060ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Alexander Wenzel * Markus Klein * Mikko Rapeli * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_client.c */ #include #include #include /* for printf() and fprintf() */ #include /* for socket(), connect(), (), and recv() */ #include /* for stat() */ #include /* for sockaddr_in and inet_addr() */ #include /* for atoi() and exit() */ #include /* for memset() */ #include /* for close() */ #include #include #include #include #ifdef linux # include #endif #include #if defined(linux) && defined(__NR_statx) # include #endif #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE # include #endif #include "dlt_types.h" #include "dlt-daemon.h" #include "dlt-daemon_cfg.h" #include "dlt_daemon_common_cfg.h" #include "dlt_daemon_socket.h" #include "dlt_daemon_serial.h" #include "dlt_daemon_client.h" #include "dlt_daemon_connection.h" #include "dlt_daemon_event_handler.h" #include "dlt_daemon_offline_logstorage.h" #include "dlt_gateway.h" /** Inline function to calculate/set the requested log level or traces status * with default log level or trace status when "ForceContextLogLevelAndTraceStatus" * is enabled and set to 1 in dlt.conf file. * * @param request_log The requested log level (or) trace status * @param context_log The default log level (or) trace status * * @return The log level if requested log level is lower or equal to ContextLogLevel */ static inline int8_t getStatus(uint8_t request_log, int context_log) { return (request_log <= context_log) ? request_log : context_log; } #ifdef UDP_CONNECTION_SUPPORT # include "dlt_daemon_udp_socket.h" #endif /** @brief Sends up to 2 messages to all the clients. * * Runs through the client list and sends the messages to them. If the message * transfer fails and the connection is a socket connection, the socket is closed. * Takes and release dlt_daemon_mutex. * * @param daemon Daemon structure needed for socket closure. * @param daemon_local Daemon local structure * @param data1 The first message to be sent. * @param size1 The size of the first message. * @param data2 The second message to be send. * @param size2 The second message size. * @param verbose Needed for socket closure. * * @return The amount of data transfered. */ static int dlt_daemon_client_send_all_multiple(DltDaemon *daemon, DltDaemonLocal *daemon_local, void *data1, int size1, void *data2, int size2, int verbose) { int sent = 0; unsigned int i = 0; int ret = 0; DltConnection *temp = NULL; int type_mask = (DLT_CON_MASK_CLIENT_MSG_TCP | DLT_CON_MASK_CLIENT_MSG_SERIAL); PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL)) { dlt_vlog(LOG_ERR, "%s: Invalid parameters\n", __func__); return 0; } for (i = 0; i < daemon_local->pEvent.nfds; i++) { temp = dlt_event_handler_find_connection(&(daemon_local->pEvent), daemon_local->pEvent.pfd[i].fd); if ((temp == NULL) || (temp->receiver == NULL) || !((1 << temp->type) & type_mask)) { dlt_vlog(LOG_DEBUG, "The connection not found or the connection type not TCP/Serial.\n"); continue; } DLT_DAEMON_SEM_LOCK(); ret = dlt_connection_send_multiple(temp, data1, size1, data2, size2, daemon->sendserialheader); DLT_DAEMON_SEM_FREE(); if ((ret != DLT_DAEMON_ERROR_OK) && (DLT_CONNECTION_CLIENT_MSG_TCP == temp->type)) { dlt_daemon_close_socket(temp->receiver->fd, daemon, daemon_local, verbose); } if (ret != DLT_DAEMON_ERROR_OK) dlt_vlog(LOG_WARNING, "%s: send dlt message failed\n", __func__); else /* If sent to at least one client, * then do not store in ring buffer */ sent = 1; } /* for */ return sent; } int dlt_daemon_client_send(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, void *storage_header, int storage_header_size, void *data1, int size1, void *data2, int size2, int verbose) { int sent, ret; if ((daemon == NULL) || (daemon_local == NULL)) { dlt_vlog(LOG_ERR, "%s: Invalid arguments\n", __func__); return DLT_DAEMON_ERROR_UNKNOWN; } if ((sock != DLT_DAEMON_SEND_TO_ALL) && (sock != DLT_DAEMON_SEND_FORCE)) { /* Send message to specific socket */ if (isatty(sock)) { DLT_DAEMON_SEM_LOCK(); if ((ret = dlt_daemon_serial_send(sock, data1, size1, data2, size2, (char) daemon->sendserialheader))) { DLT_DAEMON_SEM_FREE(); dlt_vlog(LOG_WARNING, "%s: serial send dlt message failed\n", __func__); return ret; } DLT_DAEMON_SEM_FREE(); } else { DLT_DAEMON_SEM_LOCK(); if ((ret = dlt_daemon_socket_send(sock, data1, size1, data2, size2, (char) daemon->sendserialheader))) { DLT_DAEMON_SEM_FREE(); dlt_vlog(LOG_WARNING, "%s: socket send dlt message failed\n", __func__); return ret; } DLT_DAEMON_SEM_FREE(); } return DLT_DAEMON_ERROR_OK; } /* write message to offline trace */ /* In the SEND_BUFFER state we must skip offline tracing because the offline traces */ /* are going without buffering directly to the offline trace. Thus we have to filter out */ /* the traces that are coming from the buffer. */ if ((sock != DLT_DAEMON_SEND_FORCE) && (daemon->state != DLT_DAEMON_STATE_SEND_BUFFER)) { if (((daemon->mode == DLT_USER_MODE_INTERNAL) || (daemon->mode == DLT_USER_MODE_BOTH)) && daemon_local->flags.offlineTraceDirectory[0]) { if (dlt_offline_trace_write(&(daemon_local->offlineTrace), storage_header, storage_header_size, data1, size1, data2, size2)) { static int error_dlt_offline_trace_write_failed = 0; if (!error_dlt_offline_trace_write_failed) { dlt_vlog(LOG_ERR, "%s: dlt_offline_trace_write failed!\n", __func__); error_dlt_offline_trace_write_failed = 1; } /*return DLT_DAEMON_ERROR_WRITE_FAILED; */ } } /* write messages to offline logstorage only if there is an extended header set * this need to be checked because the function is dlt_daemon_client_send is called by * newly introduced dlt_daemon_log_internal */ if (daemon_local->flags.offlineLogstorageMaxDevices > 0) dlt_daemon_logstorage_write(daemon, &daemon_local->flags, storage_header, storage_header_size, data1, size1, data2, size2); } /* send messages to daemon socket */ if ((daemon->mode == DLT_USER_MODE_EXTERNAL) || (daemon->mode == DLT_USER_MODE_BOTH)) { #ifdef UDP_CONNECTION_SUPPORT if (daemon_local->UDPConnectionSetup == MULTICAST_CONNECTION_ENABLED) dlt_daemon_udp_dltmsg_multicast(data1, size1, data2, size2, verbose); #endif if ((sock == DLT_DAEMON_SEND_FORCE) || (daemon->state == DLT_DAEMON_STATE_SEND_DIRECT)) { sent = dlt_daemon_client_send_all_multiple(daemon, daemon_local, data1, size1, data2, size2, verbose); if ((sock == DLT_DAEMON_SEND_FORCE) && !sent) return DLT_DAEMON_ERROR_SEND_FAILED; } } /* Message was not sent to client, so store it in client ringbuffer */ if ((sock != DLT_DAEMON_SEND_FORCE) && ((daemon->state == DLT_DAEMON_STATE_BUFFER) || (daemon->state == DLT_DAEMON_STATE_SEND_BUFFER) || (daemon->state == DLT_DAEMON_STATE_BUFFER_FULL))) { if (daemon->state != DLT_DAEMON_STATE_BUFFER_FULL) { DLT_DAEMON_SEM_LOCK(); /* Store message in history buffer */ ret = dlt_buffer_push3(&(daemon->client_ringbuffer), data1, (unsigned int) size1, data2, (unsigned int) size2, 0, 0); DLT_DAEMON_SEM_FREE(); if (ret < DLT_RETURN_OK) { dlt_daemon_change_state(daemon, DLT_DAEMON_STATE_BUFFER_FULL); } } if (daemon->state == DLT_DAEMON_STATE_BUFFER_FULL) { daemon->overflow_counter += 1; if (daemon->overflow_counter == 1) dlt_vlog(LOG_INFO, "%s: Buffer is full! Messages will be discarded.\n", __func__); return DLT_DAEMON_ERROR_BUFFER_FULL; } } else { if ((daemon->overflow_counter > 0) && (daemon_local->client_connections > 0) && (dlt_daemon_send_message_overflow(daemon, daemon_local, verbose) == DLT_DAEMON_ERROR_OK)) { dlt_vlog(LOG_WARNING, "%s: %u messages discarded! Now able to send messages to the client.\n", __func__, daemon->overflow_counter); daemon->overflow_counter = 0; } } return DLT_DAEMON_ERROR_OK; } int dlt_daemon_client_send_message_to_all_client(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { static char text[DLT_DAEMON_TEXTSIZE]; char * ecu_ptr = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL)) { dlt_vlog(LOG_ERR, "%s: invalid arguments\n", __func__); return DLT_DAEMON_ERROR_UNKNOWN; } /* set overwrite ecu id */ if ((daemon_local->flags.evalue[0]) && (strncmp(daemon_local->msg.headerextra.ecu, DLT_DAEMON_ECU_ID, DLT_ID_SIZE) == 0)) { /* Set header extra parameters */ dlt_set_id(daemon_local->msg.headerextra.ecu, daemon->ecuid); /*msg.headerextra.seid = 0; */ if (dlt_message_set_extraparameters(&(daemon_local->msg), 0)) { dlt_vlog(LOG_WARNING, "%s: failed to set message extra parameters.\n", __func__); return DLT_DAEMON_ERROR_UNKNOWN; } /* Correct value of timestamp, this was changed by dlt_message_set_extraparameters() */ daemon_local->msg.headerextra.tmsp = DLT_BETOH_32(daemon_local->msg.headerextra.tmsp); } /* prepare storage header */ if (DLT_IS_HTYP_WEID(daemon_local->msg.standardheader->htyp)) { ecu_ptr = daemon_local->msg.headerextra.ecu; } else { ecu_ptr = daemon->ecuid; } if (dlt_set_storageheader(daemon_local->msg.storageheader, ecu_ptr)) { dlt_vlog(LOG_WARNING, "%s: failed to set storage header with header type: 0x%x\n", __func__, daemon_local->msg.standardheader->htyp); return DLT_DAEMON_ERROR_UNKNOWN; } /* if no filter set or filter is matching display message */ if (daemon_local->flags.xflag) { if (DLT_RETURN_OK != dlt_message_print_hex(&(daemon_local->msg), text, DLT_DAEMON_TEXTSIZE, verbose)) dlt_log(LOG_WARNING, "dlt_message_print_hex() failed!\n"); } else if (daemon_local->flags.aflag) { if (DLT_RETURN_OK != dlt_message_print_ascii(&(daemon_local->msg), text, DLT_DAEMON_TEXTSIZE, verbose)) dlt_log(LOG_WARNING, "dlt_message_print_ascii() failed!\n"); } else if (daemon_local->flags.sflag) { if (DLT_RETURN_OK != dlt_message_print_header(&(daemon_local->msg), text, DLT_DAEMON_TEXTSIZE, verbose)) dlt_log(LOG_WARNING, "dlt_message_print_header() failed!\n"); } /* send message to client or write to log file */ return dlt_daemon_client_send(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, daemon_local->msg.headerbuffer, sizeof(DltStorageHeader), daemon_local->msg.headerbuffer + sizeof(DltStorageHeader), (int) (daemon_local->msg.headersize - sizeof(DltStorageHeader)), daemon_local->msg.databuffer, (int) daemon_local->msg.datasize, verbose); } int dlt_daemon_client_send_control_message(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, char *apid, char *ctid, int verbose) { int ret; int32_t len; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == 0) || (msg == 0) || (apid == 0) || (ctid == 0)) return DLT_DAEMON_ERROR_UNKNOWN; /* prepare storage header */ msg->storageheader = (DltStorageHeader *)msg->headerbuffer; if (dlt_set_storageheader(msg->storageheader, daemon->ecuid) == DLT_RETURN_ERROR) return DLT_DAEMON_ERROR_UNKNOWN; /* prepare standard header */ msg->standardheader = (DltStandardHeader *)(msg->headerbuffer + sizeof(DltStorageHeader)); msg->standardheader->htyp = DLT_HTYP_WEID | DLT_HTYP_WTMS | DLT_HTYP_UEH | DLT_HTYP_PROTOCOL_VERSION1; #if (BYTE_ORDER == BIG_ENDIAN) msg->standardheader->htyp = (msg->standardheader->htyp | DLT_HTYP_MSBF); #endif msg->standardheader->mcnt = 0; /* Set header extra parameters */ dlt_set_id(msg->headerextra.ecu, daemon->ecuid); /*msg->headerextra.seid = 0; */ msg->headerextra.tmsp = dlt_uptime(); dlt_message_set_extraparameters(msg, verbose); /* prepare extended header */ msg->extendedheader = (DltExtendedHeader *)(msg->headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg->standardheader->htyp)); msg->extendedheader->msin = DLT_MSIN_CONTROL_RESPONSE; msg->extendedheader->noar = 1; /* number of arguments */ if (strcmp(apid, "") == 0) dlt_set_id(msg->extendedheader->apid, DLT_DAEMON_CTRL_APID); /* application id */ else dlt_set_id(msg->extendedheader->apid, apid); if (strcmp(ctid, "") == 0) dlt_set_id(msg->extendedheader->ctid, DLT_DAEMON_CTRL_CTID); /* context id */ else dlt_set_id(msg->extendedheader->ctid, ctid); /* prepare length information */ msg->headersize = (uint32_t) (sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + sizeof(DltExtendedHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg->standardheader->htyp)); len = (int32_t) (msg->headersize - sizeof(DltStorageHeader) + msg->datasize); if (len > UINT16_MAX) { dlt_log(LOG_WARNING, "Huge control message discarded!\n"); return DLT_DAEMON_ERROR_UNKNOWN; } msg->standardheader->len = DLT_HTOBE_16(((uint16_t)len)); if ((ret = dlt_daemon_client_send(sock, daemon, daemon_local, msg->headerbuffer, sizeof(DltStorageHeader), msg->headerbuffer + sizeof(DltStorageHeader), (int) (msg->headersize - sizeof(DltStorageHeader)), msg->databuffer, (int) msg->datasize, verbose))) { dlt_log(LOG_DEBUG, "dlt_daemon_control_send_control_message: DLT message send to all failed!.\n"); return ret; } return DLT_DAEMON_ERROR_OK; } int dlt_daemon_client_process_control(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { uint32_t id, id_tmp = 0; DltStandardHeaderExtra extra; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (msg == NULL)) return -1; if (msg->datasize < (int32_t)sizeof(uint32_t)) return -1; extra = msg->headerextra; /* check if the message needs to be forwarded */ if (daemon_local->flags.gatewayMode == 1) { if (strcmp(daemon_local->flags.evalue, extra.ecu) != 0) return dlt_gateway_forward_control_message(&daemon_local->pGateway, daemon_local, msg, extra.ecu, verbose); } id_tmp = *((uint32_t *)(msg->databuffer)); id = DLT_ENDIAN_GET_32(msg->standardheader->htyp, id_tmp); if ((id > DLT_SERVICE_ID) && (id < DLT_SERVICE_ID_CALLSW_CINJECTION)) { /* Control message handling */ switch (id) { case DLT_SERVICE_ID_SET_LOG_LEVEL: { dlt_daemon_control_set_log_level(sock, daemon, daemon_local, msg, verbose); break; } case DLT_SERVICE_ID_SET_TRACE_STATUS: { dlt_daemon_control_set_trace_status(sock, daemon, daemon_local, msg, verbose); break; } case DLT_SERVICE_ID_GET_LOG_INFO: { dlt_daemon_control_get_log_info(sock, daemon, daemon_local, msg, verbose); break; } case DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL: { dlt_daemon_control_get_default_log_level(sock, daemon, daemon_local, verbose); break; } case DLT_SERVICE_ID_STORE_CONFIG: { if (dlt_daemon_applications_save(daemon, daemon->runtime_application_cfg, verbose) == 0) { if (dlt_daemon_contexts_save(daemon, daemon->runtime_context_cfg, verbose) == 0) { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); } else { /* Delete saved files */ dlt_daemon_control_reset_to_factory_default(daemon, daemon->runtime_application_cfg, daemon->runtime_context_cfg, daemon_local->flags.contextLogLevel, daemon_local->flags.contextTraceStatus, daemon_local->flags.enforceContextLLAndTS, verbose); dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); } } else { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); } break; } case DLT_SERVICE_ID_RESET_TO_FACTORY_DEFAULT: { dlt_daemon_control_reset_to_factory_default(daemon, daemon->runtime_application_cfg, daemon->runtime_context_cfg, daemon_local->flags.contextLogLevel, daemon_local->flags.contextTraceStatus, daemon_local->flags.enforceContextLLAndTS, verbose); dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); break; } case DLT_SERVICE_ID_SET_COM_INTERFACE_STATUS: { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_NOT_SUPPORTED, verbose); break; } case DLT_SERVICE_ID_SET_COM_INTERFACE_MAX_BANDWIDTH: { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_NOT_SUPPORTED, verbose); break; } case DLT_SERVICE_ID_SET_VERBOSE_MODE: { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_NOT_SUPPORTED, verbose); break; } case DLT_SERVICE_ID_SET_MESSAGE_FILTERING: { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_NOT_SUPPORTED, verbose); break; } case DLT_SERVICE_ID_SET_TIMING_PACKETS: { dlt_daemon_control_set_timing_packets(sock, daemon, daemon_local, msg, verbose); break; } case DLT_SERVICE_ID_GET_LOCAL_TIME: { /* Send response with valid timestamp (TMSP) field */ dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); break; } case DLT_SERVICE_ID_USE_ECU_ID: { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_NOT_SUPPORTED, verbose); break; } case DLT_SERVICE_ID_USE_SESSION_ID: { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_NOT_SUPPORTED, verbose); break; } case DLT_SERVICE_ID_USE_TIMESTAMP: { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_NOT_SUPPORTED, verbose); break; } case DLT_SERVICE_ID_USE_EXTENDED_HEADER: { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_NOT_SUPPORTED, verbose); break; } case DLT_SERVICE_ID_SET_DEFAULT_LOG_LEVEL: { dlt_daemon_control_set_default_log_level(sock, daemon, daemon_local, msg, verbose); break; } case DLT_SERVICE_ID_SET_DEFAULT_TRACE_STATUS: { dlt_daemon_control_set_default_trace_status(sock, daemon, daemon_local, msg, verbose); break; } case DLT_SERVICE_ID_GET_SOFTWARE_VERSION: { dlt_daemon_control_get_software_version(sock, daemon, daemon_local, verbose); break; } case DLT_SERVICE_ID_MESSAGE_BUFFER_OVERFLOW: { dlt_daemon_control_message_buffer_overflow(sock, daemon, daemon_local, daemon->overflow_counter, "", verbose); break; } case DLT_SERVICE_ID_OFFLINE_LOGSTORAGE: { dlt_daemon_control_service_logstorage(sock, daemon, daemon_local, msg, verbose); break; } case DLT_SERVICE_ID_PASSIVE_NODE_CONNECT: { dlt_daemon_control_passive_node_connect(sock, daemon, daemon_local, msg, verbose); break; } case DLT_SERVICE_ID_PASSIVE_NODE_CONNECTION_STATUS: { dlt_daemon_control_passive_node_connect_status(sock, daemon, daemon_local, verbose); break; } case DLT_SERVICE_ID_SET_ALL_LOG_LEVEL: { dlt_daemon_control_set_all_log_level(sock, daemon, daemon_local, msg, verbose); break; } case DLT_SERVICE_ID_SET_ALL_TRACE_STATUS: { dlt_daemon_control_set_all_trace_status(sock, daemon, daemon_local, msg, verbose); break; } default: { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_NOT_SUPPORTED, verbose); break; } } } else { /* Injection handling */ dlt_daemon_control_callsw_cinjection(sock, daemon, daemon_local, msg, verbose); } return 0; } void dlt_daemon_control_get_software_version(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { DltMessage msg; uint32_t len; DltServiceGetSoftwareVersionResponse *resp; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == 0) return; /* initialise new message */ if (dlt_message_init(&msg, 0) == DLT_RETURN_ERROR) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_GET_SOFTWARE_VERSION, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } /* prepare payload of data */ len = (uint32_t) strlen(daemon->ECUVersionString); /* msg.datasize = sizeof(serviceID) + sizeof(status) + sizeof(length) + len */ msg.datasize = (uint32_t) (sizeof(uint32_t) + sizeof(uint8_t) + sizeof(uint32_t) + len); if (msg.databuffer && (msg.databuffersize < msg.datasize)) { free(msg.databuffer); msg.databuffer = 0; } if (msg.databuffer == 0) { msg.databuffer = (uint8_t *)malloc(msg.datasize); msg.databuffersize = msg.datasize; } if (msg.databuffer == 0) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_GET_SOFTWARE_VERSION, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } resp = (DltServiceGetSoftwareVersionResponse *)msg.databuffer; resp->service_id = DLT_SERVICE_ID_GET_SOFTWARE_VERSION; resp->status = DLT_SERVICE_RESPONSE_OK; resp->length = len; memcpy(msg.databuffer + msg.datasize - len, daemon->ECUVersionString, len); /* send message */ dlt_daemon_client_send_control_message(sock, daemon, daemon_local, &msg, "", "", verbose); /* free message */ dlt_message_free(&msg, 0); } void dlt_daemon_control_get_default_log_level(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { DltMessage msg; DltServiceGetDefaultLogLevelResponse *resp; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == 0) return; /* initialise new message */ if (dlt_message_init(&msg, 0) == DLT_RETURN_ERROR) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } msg.datasize = sizeof(DltServiceGetDefaultLogLevelResponse); if (msg.databuffer && (msg.databuffersize < msg.datasize)) { free(msg.databuffer); msg.databuffer = 0; } if (msg.databuffer == 0) { msg.databuffer = (uint8_t *)malloc(msg.datasize); msg.databuffersize = msg.datasize; } if (msg.databuffer == 0) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } resp = (DltServiceGetDefaultLogLevelResponse *)msg.databuffer; resp->service_id = DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL; resp->status = DLT_SERVICE_RESPONSE_OK; resp->log_level = (uint8_t) daemon->default_log_level; /* send message */ dlt_daemon_client_send_control_message(sock, daemon, daemon_local, &msg, "", "", verbose); /* free message */ dlt_message_free(&msg, 0); } void dlt_daemon_control_get_log_info(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { DltServiceGetLogInfoRequest *req; DltMessage resp; DltDaemonContext *context = 0; DltDaemonApplication *application = 0; int num_applications = 0, num_contexts = 0; uint16_t count_app_ids = 0, count_con_ids = 0; #if (DLT_DEBUG_GETLOGINFO == 1) char buf[255]; #endif int32_t i, j; size_t offset = 0; char *apid = 0; int8_t ll, ts; uint16_t len; int8_t value; size_t sizecont = 0; int offset_base; uint32_t sid; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (msg == NULL) || (msg->databuffer == NULL)) return; if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServiceGetLogInfoRequest)) < 0) return; user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list == NULL) return; /* prepare pointer to message request */ req = (DltServiceGetLogInfoRequest *)(msg->databuffer); /* initialise new message */ if (dlt_message_init(&resp, 0) == DLT_RETURN_ERROR) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_GET_LOG_INFO, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } /* check request */ if ((req->options < 3) || (req->options > 7)) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_GET_LOG_INFO, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } if (req->apid[0] != '\0') { application = dlt_daemon_application_find(daemon, req->apid, daemon->ecuid, verbose); if (application) { num_applications = 1; if (req->ctid[0] != '\0') { context = dlt_daemon_context_find(daemon, req->apid, req->ctid, daemon->ecuid, verbose); num_contexts = ((context) ? 1 : 0); } else { num_contexts = application->num_contexts; } } else { num_applications = 0; num_contexts = 0; } } else { /* Request all applications and contexts */ num_applications = user_list->num_applications; num_contexts = user_list->num_contexts; } /* prepare payload of data */ /* Calculate maximum size for a response */ resp.datasize = sizeof(uint32_t) /* SID */ + sizeof(int8_t) /* status*/ + sizeof(ID4) /* DLT_DAEMON_REMO_STRING */; sizecont = sizeof(uint32_t) /* context_id */; /* Add additional size for response of Mode 4, 6, 7 */ if ((req->options == 4) || (req->options == 6) || (req->options == 7)) sizecont += sizeof(int8_t); /* log level */ /* Add additional size for response of Mode 5, 6, 7 */ if ((req->options == 5) || (req->options == 6) || (req->options == 7)) sizecont += sizeof(int8_t); /* trace status */ resp.datasize += (uint32_t) (((uint32_t) num_applications * (sizeof(uint32_t) /* app_id */ + sizeof(uint16_t) /* count_con_ids */)) + ((size_t) num_contexts * sizecont)); resp.datasize += (uint32_t) sizeof(uint16_t) /* count_app_ids */; /* Add additional size for response of Mode 7 */ if (req->options == 7) { if (req->apid[0] != '\0') { if (req->ctid[0] != '\0') { /* One application, one context */ /* context = dlt_daemon_context_find(daemon, req->apid, req->ctid, verbose); */ if (context) { resp.datasize += (uint32_t) sizeof(uint16_t) /* len_context_description */; if (context->context_description != 0) resp.datasize += (uint32_t) strlen(context->context_description); /* context_description */ } } else /* One application, all contexts */ if ((user_list->applications) && (application)) { /* Calculate start offset within contexts[] */ offset_base = 0; for (i = 0; i < (application - (user_list->applications)); i++) offset_base += user_list->applications[i].num_contexts; /* Iterate over all contexts belonging to this application */ for (j = 0; j < application->num_contexts; j++) { context = &(user_list->contexts[offset_base + j]); if (context) { resp.datasize += (uint32_t) sizeof(uint16_t) /* len_context_description */; if (context->context_description != 0) resp.datasize += (uint32_t) strlen(context->context_description); /* context_description */ } } } /* Space for application description */ if (application) { resp.datasize += (uint32_t) sizeof(uint16_t) /* len_app_description */; if (application->application_description != 0) resp.datasize += (uint32_t) strlen(application->application_description); /* app_description */ } } else { /* All applications, all contexts */ for (i = 0; i < user_list->num_contexts; i++) { resp.datasize += (uint32_t) sizeof(uint16_t) /* len_context_description */; if (user_list->contexts[i].context_description != 0) resp.datasize += (uint32_t) strlen(user_list->contexts[i].context_description); } for (i = 0; i < user_list->num_applications; i++) { resp.datasize += (uint32_t) sizeof(uint16_t) /* len_app_description */; if (user_list->applications[i].application_description != 0) resp.datasize += (uint32_t) strlen(user_list->applications[i].application_description); /* app_description */ } } } if (verbose) dlt_vlog(LOG_DEBUG, "Allocate %d bytes for response msg databuffer\n", resp.datasize); /* Allocate buffer for response message */ resp.databuffer = (uint8_t *)malloc(resp.datasize); resp.databuffersize = resp.datasize; if (resp.databuffer == 0) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_GET_LOG_INFO, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } memset(resp.databuffer, 0, resp.datasize); /* Preparation finished */ /* Prepare response */ sid = DLT_SERVICE_ID_GET_LOG_INFO; memcpy(resp.databuffer, &sid, sizeof(uint32_t)); offset += sizeof(uint32_t); value = (int8_t) (((num_applications != 0) && (num_contexts != 0)) ? req->options : 8); /* 8 = no matching context found */ memcpy(resp.databuffer + offset, &value, sizeof(int8_t)); offset += sizeof(int8_t); count_app_ids = (uint16_t) num_applications; if (count_app_ids != 0) { memcpy(resp.databuffer + offset, &count_app_ids, sizeof(uint16_t)); offset += sizeof(uint16_t); #if (DLT_DEBUG_GETLOGINFO == 1) dlt_vlog(LOG_DEBUG, "#apid: %d \n", count_app_ids); #endif for (i = 0; i < count_app_ids; i++) { if (req->apid[0] != '\0') { apid = req->apid; } else { if (user_list->applications) apid = user_list->applications[i].apid; else /* This should never occur! */ apid = 0; } application = dlt_daemon_application_find(daemon, apid, daemon->ecuid, verbose); if (application) { /* Calculate start offset within contexts[] */ offset_base = 0; for (j = 0; j < (application - (user_list->applications)); j++) offset_base += user_list->applications[j].num_contexts; dlt_set_id((char *)(resp.databuffer + offset), apid); offset += sizeof(ID4); #if (DLT_DEBUG_GETLOGINFO == 1) dlt_print_id(buf, apid); dlt_vlog(LOG_DEBUG, "apid: %s\n", buf); #endif if (req->apid[0] != '\0') count_con_ids = (uint16_t) num_contexts; else count_con_ids = (uint16_t) application->num_contexts; memcpy(resp.databuffer + offset, &count_con_ids, sizeof(uint16_t)); offset += sizeof(uint16_t); #if (DLT_DEBUG_GETLOGINFO == 1) dlt_vlog(LOG_DEBUG, "#ctid: %d \n", count_con_ids); #endif for (j = 0; j < count_con_ids; j++) { #if (DLT_DEBUG_GETLOGINFO == 1) dlt_vlog(LOG_DEBUG, "j: %d \n", j); #endif if (!((count_con_ids == 1) && (req->apid[0] != '\0') && (req->ctid[0] != '\0'))) context = &(user_list->contexts[offset_base + j]); /* else: context was already searched and found * (one application (found) with one context (found))*/ if ((context) && ((req->ctid[0] == '\0') || ((req->ctid[0] != '\0') && (memcmp(context->ctid, req->ctid, DLT_ID_SIZE) == 0))) ) { dlt_set_id((char *)(resp.databuffer + offset), context->ctid); offset += sizeof(ID4); #if (DLT_DEBUG_GETLOGINFO == 1) dlt_print_id(buf, context->ctid); dlt_vlog(LOG_DEBUG, "ctid: %s \n", buf); #endif /* Mode 4, 6, 7 */ if ((req->options == 4) || (req->options == 6) || (req->options == 7)) { ll = context->log_level; memcpy(resp.databuffer + offset, &ll, sizeof(int8_t)); offset += sizeof(int8_t); } /* Mode 5, 6, 7 */ if ((req->options == 5) || (req->options == 6) || (req->options == 7)) { ts = context->trace_status; memcpy(resp.databuffer + offset, &ts, sizeof(int8_t)); offset += sizeof(int8_t); } /* Mode 7 */ if (req->options == 7) { if (context->context_description) { len = (uint16_t) strlen(context->context_description); memcpy(resp.databuffer + offset, &len, sizeof(uint16_t)); offset += sizeof(uint16_t); memcpy(resp.databuffer + offset, context->context_description, strlen(context->context_description)); offset += strlen(context->context_description); } else { len = 0; memcpy(resp.databuffer + offset, &len, sizeof(uint16_t)); offset += sizeof(uint16_t); } } #if (DLT_DEBUG_GETLOGINFO == 1) dlt_vlog(LOG_DEBUG, "ll=%d ts=%d \n", (int32_t)ll, (int32_t)ts); #endif } #if (DLT_DEBUG_GETLOGINFO == 1) dlt_log(LOG_DEBUG, "\n"); #endif } /* Mode 7 */ if (req->options == 7) { if (application->application_description) { len = (uint16_t) strlen(application->application_description); memcpy(resp.databuffer + offset, &len, sizeof(uint16_t)); offset += sizeof(uint16_t); memcpy(resp.databuffer + offset, application->application_description, strlen(application->application_description)); offset += strlen(application->application_description); } else { len = 0; memcpy(resp.databuffer + offset, &len, sizeof(uint16_t)); offset += sizeof(uint16_t); } } } /* if (application) */ } /* for (i=0;iservice_id = DLT_SERVICE_ID_MESSAGE_BUFFER_OVERFLOW; resp->status = DLT_SERVICE_RESPONSE_OK; resp->overflow = DLT_MESSAGE_BUFFER_OVERFLOW; resp->overflow_counter = overflow_counter; /* send message */ if ((ret = dlt_daemon_client_send_control_message(sock, daemon, daemon_local, &msg, apid, "", verbose))) { dlt_message_free(&msg, 0); return ret; } /* free message */ dlt_message_free(&msg, 0); return DLT_DAEMON_ERROR_OK; } void dlt_daemon_control_service_response(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, uint32_t service_id, int8_t status, int verbose) { DltMessage msg; DltServiceResponse *resp; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == 0) return; /* initialise new message */ if (dlt_message_init(&msg, 0) == DLT_RETURN_ERROR) return; /* prepare payload of data */ msg.datasize = sizeof(DltServiceResponse); if (msg.databuffer && (msg.databuffersize < msg.datasize)) { free(msg.databuffer); msg.databuffer = 0; } if (msg.databuffer == 0) { msg.databuffer = (uint8_t *)malloc(msg.datasize); msg.databuffersize = msg.datasize; } if (msg.databuffer == 0) return; resp = (DltServiceResponse *)msg.databuffer; resp->service_id = service_id; resp->status = (uint8_t) status; /* send message */ dlt_daemon_client_send_control_message(sock, daemon, daemon_local, &msg, "", "", verbose); /* free message */ dlt_message_free(&msg, 0); } int dlt_daemon_control_message_unregister_context(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, char *apid, char *ctid, char *comid, int verbose) { DltMessage msg; DltServiceUnregisterContext *resp; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == 0) return -1; /* initialise new message */ if (dlt_message_init(&msg, 0) == DLT_RETURN_ERROR) return -1; /* prepare payload of data */ msg.datasize = sizeof(DltServiceUnregisterContext); if (msg.databuffer && (msg.databuffersize < msg.datasize)) { free(msg.databuffer); msg.databuffer = 0; } if (msg.databuffer == 0) { msg.databuffer = (uint8_t *)malloc(msg.datasize); msg.databuffersize = msg.datasize; } if (msg.databuffer == 0) return -1; resp = (DltServiceUnregisterContext *)msg.databuffer; resp->service_id = DLT_SERVICE_ID_UNREGISTER_CONTEXT; resp->status = DLT_SERVICE_RESPONSE_OK; dlt_set_id(resp->apid, apid); dlt_set_id(resp->ctid, ctid); dlt_set_id(resp->comid, comid); /* send message */ if (dlt_daemon_client_send_control_message(sock, daemon, daemon_local, &msg, "", "", verbose)) { dlt_message_free(&msg, 0); return -1; } /* free message */ dlt_message_free(&msg, 0); return 0; } int dlt_daemon_control_message_connection_info(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, uint8_t state, char *comid, int verbose) { DltMessage msg; DltServiceConnectionInfo *resp; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == 0) return -1; /* initialise new message */ if (dlt_message_init(&msg, 0) == DLT_RETURN_ERROR) return -1; /* prepare payload of data */ msg.datasize = sizeof(DltServiceConnectionInfo); if (msg.databuffer && (msg.databuffersize < msg.datasize)) { free(msg.databuffer); msg.databuffer = 0; } if (msg.databuffer == 0) { msg.databuffer = (uint8_t *)malloc(msg.datasize); msg.databuffersize = msg.datasize; } if (msg.databuffer == 0) return -1; resp = (DltServiceConnectionInfo *)msg.databuffer; resp->service_id = DLT_SERVICE_ID_CONNECTION_INFO; resp->status = DLT_SERVICE_RESPONSE_OK; resp->state = state; dlt_set_id(resp->comid, comid); /* send message */ if (dlt_daemon_client_send_control_message(sock, daemon, daemon_local, &msg, "", "", verbose)) { dlt_message_free(&msg, 0); return -1; } /* free message */ dlt_message_free(&msg, 0); return 0; } int dlt_daemon_control_message_timezone(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { DltMessage msg; DltServiceTimezone *resp; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == 0) return -1; /* initialise new message */ if (dlt_message_init(&msg, 0) == DLT_RETURN_ERROR) return -1; /* prepare payload of data */ msg.datasize = sizeof(DltServiceTimezone); if (msg.databuffer && (msg.databuffersize < msg.datasize)) { free(msg.databuffer); msg.databuffer = 0; } if (msg.databuffer == 0) { msg.databuffer = (uint8_t *)malloc(msg.datasize); msg.databuffersize = msg.datasize; } if (msg.databuffer == 0) return -1; resp = (DltServiceTimezone *)msg.databuffer; resp->service_id = DLT_SERVICE_ID_TIMEZONE; resp->status = DLT_SERVICE_RESPONSE_OK; time_t t = time(NULL); struct tm lt; tzset(); localtime_r(&t, <); #if !defined(__CYGWIN__) resp->timezone = (int32_t)lt.tm_gmtoff; #endif resp->isdst = (uint8_t)lt.tm_isdst; /* send message */ if (dlt_daemon_client_send_control_message(sock, daemon, daemon_local, &msg, "", "", verbose)) { dlt_message_free(&msg, 0); return -1; } /* free message */ dlt_message_free(&msg, 0); return 0; } int dlt_daemon_control_message_marker(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { DltMessage msg; DltServiceMarker *resp; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == 0) return -1; /* initialise new message */ if (dlt_message_init(&msg, 0) == DLT_RETURN_ERROR) return -1; /* prepare payload of data */ msg.datasize = sizeof(DltServiceMarker); if (msg.databuffer && (msg.databuffersize < msg.datasize)) { free(msg.databuffer); msg.databuffer = 0; } if (msg.databuffer == 0) { msg.databuffer = (uint8_t *)malloc(msg.datasize); msg.databuffersize = msg.datasize; } if (msg.databuffer == 0) return -1; resp = (DltServiceMarker *)msg.databuffer; resp->service_id = DLT_SERVICE_ID_MARKER; resp->status = DLT_SERVICE_RESPONSE_OK; /* send message */ if (dlt_daemon_client_send_control_message(sock, daemon, daemon_local, &msg, "", "", verbose)) { dlt_message_free(&msg, 0); return -1; } /* free message */ dlt_message_free(&msg, 0); return 0; } void dlt_daemon_control_callsw_cinjection(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { char apid[DLT_ID_SIZE], ctid[DLT_ID_SIZE]; uint32_t id = 0, id_tmp = 0; uint8_t *ptr; DltDaemonContext *context; uint32_t data_length_inject = 0; uint32_t data_length_inject_tmp = 0; int32_t datalength; DltUserHeader userheader; DltUserControlMsgInjection usercontext; uint8_t *userbuffer; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (msg == NULL) || (msg->databuffer == NULL)) return; datalength = (int32_t) msg->datasize; ptr = msg->databuffer; DLT_MSG_READ_VALUE(id_tmp, ptr, datalength, uint32_t); /* Get service id */ id = DLT_ENDIAN_GET_32(msg->standardheader->htyp, id_tmp); /* injectionMode is disabled */ if (daemon_local->flags.injectionMode == 0) { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_PERM_DENIED, verbose); return; } /* id is always less than DLT_DAEMON_INJECTION_MAX since its type is uinit32_t */ if (id >= DLT_DAEMON_INJECTION_MIN) { /* This a a real SW-C injection call */ data_length_inject = 0; data_length_inject_tmp = 0; DLT_MSG_READ_VALUE(data_length_inject_tmp, ptr, datalength, uint32_t); /* Get data length */ data_length_inject = DLT_ENDIAN_GET_32(msg->standardheader->htyp, data_length_inject_tmp); /* Get context handle for apid, ctid (and seid) */ /* Warning: seid is ignored in this implementation! */ if (DLT_IS_HTYP_UEH(msg->standardheader->htyp)) { dlt_set_id(apid, msg->extendedheader->apid); dlt_set_id(ctid, msg->extendedheader->ctid); } else { /* No extended header, and therefore no apid and ctid available */ dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } /* At this point, apid and ctid is available */ context = dlt_daemon_context_find(daemon, apid, ctid, daemon->ecuid, verbose); if (context == 0) { /* dlt_log(LOG_INFO,"No context found!\n"); */ dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } /* Send user message to handle, specified in context */ if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_INJECTION) < DLT_RETURN_OK) { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } usercontext.log_level_pos = context->log_level_pos; if (data_length_inject > msg->databuffersize) { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } userbuffer = malloc(data_length_inject); if (userbuffer == 0) { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } usercontext.data_length_inject = (uint32_t) data_length_inject; usercontext.service_id = id; memcpy(userbuffer, ptr, (size_t) data_length_inject); /* Copy received injection to send buffer */ /* write to FIFO */ DltReturnValue ret = dlt_user_log_out3(context->user_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgInjection), userbuffer, (size_t) data_length_inject); if (ret < DLT_RETURN_OK) { if (ret == DLT_RETURN_PIPE_ERROR) { /* Close connection */ close(context->user_handle); context->user_handle = DLT_FD_INIT; } dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); } else { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); } free(userbuffer); userbuffer = 0; } else { /* Invalid ID */ dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_NOT_SUPPORTED, verbose); } } void dlt_daemon_send_log_level(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltDaemonContext *context, int8_t loglevel, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); int32_t id = DLT_SERVICE_ID_SET_LOG_LEVEL; int8_t old_log_level = 0; old_log_level = context->log_level; context->log_level = loglevel; /* No endianess conversion necessary*/ if ((context->user_handle >= DLT_FD_MINIMUM) && (dlt_daemon_user_send_log_level(daemon, context, verbose) == 0)) { dlt_daemon_control_service_response(sock, daemon, daemon_local, (uint32_t) id, DLT_SERVICE_RESPONSE_OK, verbose); } else { dlt_log(LOG_ERR, "Log level could not be sent!\n"); context->log_level = old_log_level; dlt_daemon_control_service_response(sock, daemon, daemon_local, (uint32_t) id, DLT_SERVICE_RESPONSE_ERROR, verbose); } } void dlt_daemon_find_multiple_context_and_send_log_level(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int8_t app_flag, char *str, int8_t len, int8_t loglevel, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); int count = 0; DltDaemonContext *context = NULL; char src_str[DLT_ID_SIZE + 1] = { 0 }; int8_t ret = 0; DltDaemonRegisteredUsers *user_list = NULL; if (daemon == 0) { dlt_vlog(LOG_ERR, "%s: Invalid parameters\n", __func__); return; } user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list == NULL) return; for (count = 0; count < user_list->num_contexts; count++) { context = &(user_list->contexts[count]); if (context) { if (app_flag == 1) strncpy(src_str, context->apid, DLT_ID_SIZE); else strncpy(src_str, context->ctid, DLT_ID_SIZE); ret = (int8_t) strncmp(src_str, str, (size_t) len); if (ret == 0) dlt_daemon_send_log_level(sock, daemon, daemon_local, context, loglevel, verbose); else if ((ret > 0) && (app_flag == 1)) break; else continue; } } } void dlt_daemon_control_set_log_level(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); char apid[DLT_ID_SIZE + 1] = { 0 }; char ctid[DLT_ID_SIZE + 1] = { 0 }; DltServiceSetLogLevel *req = NULL; DltDaemonContext *context = NULL; int8_t apid_length = 0; int8_t ctid_length = 0; if ((daemon == NULL) || (msg == NULL) || (msg->databuffer == NULL)) return; if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServiceSetLogLevel)) < 0) return; req = (DltServiceSetLogLevel *)(msg->databuffer); if (daemon_local->flags.enforceContextLLAndTS) req->log_level = (uint8_t) getStatus(req->log_level, daemon_local->flags.contextLogLevel); dlt_set_id(apid, req->apid); dlt_set_id(ctid, req->ctid); apid_length = (int8_t) strlen(apid); ctid_length = (int8_t) strlen(ctid); if ((apid_length != 0) && (apid[apid_length - 1] == '*') && (ctid[0] == 0)) { /*apid provided having '*' in it and ctid is null*/ dlt_daemon_find_multiple_context_and_send_log_level(sock, daemon, daemon_local, 1, apid, (int8_t) (apid_length - 1), (int8_t) req->log_level, verbose); } else if ((ctid_length != 0) && (ctid[ctid_length - 1] == '*') && (apid[0] == 0)) /*ctid provided is having '*' in it and apid is null*/ { dlt_daemon_find_multiple_context_and_send_log_level(sock, daemon, daemon_local, 0, ctid, (int8_t) (ctid_length - 1), (int8_t) req->log_level, verbose); } else if ((apid_length != 0) && (apid[apid_length - 1] != '*') && (ctid[0] == 0)) /*only app id case*/ { dlt_daemon_find_multiple_context_and_send_log_level(sock, daemon, daemon_local, 1, apid, DLT_ID_SIZE, (int8_t) req->log_level, verbose); } else if ((ctid_length != 0) && (ctid[ctid_length - 1] != '*') && (apid[0] == 0)) /*only context id case*/ { dlt_daemon_find_multiple_context_and_send_log_level(sock, daemon, daemon_local, 0, ctid, DLT_ID_SIZE, (int8_t) req->log_level, verbose); } else { context = dlt_daemon_context_find(daemon, apid, ctid, daemon->ecuid, verbose); /* Set log level */ if (context != 0) { dlt_daemon_send_log_level(sock, daemon, daemon_local, context, (int8_t) req->log_level, verbose); } else { dlt_vlog(LOG_ERR, "Could not set log level: %d. Context [%.4s:%.4s] not found:", req->log_level, apid, ctid); dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_SET_LOG_LEVEL, DLT_SERVICE_RESPONSE_ERROR, verbose); } } } void dlt_daemon_send_trace_status(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltDaemonContext *context, int8_t tracestatus, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); int32_t id = DLT_SERVICE_ID_SET_TRACE_STATUS; int8_t old_trace_status = 0; old_trace_status = context->trace_status; context->trace_status = tracestatus; /* No endianess conversion necessary*/ if ((context->user_handle >= DLT_FD_MINIMUM) && (dlt_daemon_user_send_log_level(daemon, context, verbose) == 0)) { dlt_daemon_control_service_response(sock, daemon, daemon_local, (uint32_t) id, DLT_SERVICE_RESPONSE_OK, verbose); } else { dlt_log(LOG_ERR, "Trace status could not be sent!\n"); context->trace_status = old_trace_status; dlt_daemon_control_service_response(sock, daemon, daemon_local, (uint32_t) id, DLT_SERVICE_RESPONSE_ERROR, verbose); } } void dlt_daemon_find_multiple_context_and_send_trace_status(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int8_t app_flag, char *str, int8_t len, int8_t tracestatus, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); int count = 0; DltDaemonContext *context = NULL; char src_str[DLT_ID_SIZE + 1] = { 0 }; int8_t ret = 0; DltDaemonRegisteredUsers *user_list = NULL; if (daemon == 0) { dlt_vlog(LOG_ERR, "%s: Invalid parameters\n", __func__); return; } user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list == NULL) return; for (count = 0; count < user_list->num_contexts; count++) { context = &(user_list->contexts[count]); if (context) { if (app_flag == 1) strncpy(src_str, context->apid, DLT_ID_SIZE); else strncpy(src_str, context->ctid, DLT_ID_SIZE); ret = (int8_t) strncmp(src_str, str, (size_t) len); if (ret == 0) dlt_daemon_send_trace_status(sock, daemon, daemon_local, context, tracestatus, verbose); else if ((ret > 0) && (app_flag == 1)) break; else continue; } } } void dlt_daemon_control_set_trace_status(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); char apid[DLT_ID_SIZE + 1] = { 0 }; char ctid[DLT_ID_SIZE + 1] = { 0 }; DltServiceSetLogLevel *req = NULL; DltDaemonContext *context = NULL; int8_t apid_length = 0; int8_t ctid_length = 0; if ((daemon == NULL) || (msg == NULL) || (msg->databuffer == NULL)) return; if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServiceSetLogLevel)) < 0) return; req = (DltServiceSetLogLevel *)(msg->databuffer); if (daemon_local->flags.enforceContextLLAndTS) req->log_level = (uint8_t) getStatus(req->log_level, daemon_local->flags.contextTraceStatus); dlt_set_id(apid, req->apid); dlt_set_id(ctid, req->ctid); apid_length = (int8_t) strlen(apid); ctid_length = (int8_t) strlen(ctid); if ((apid_length != 0) && (apid[apid_length - 1] == '*') && (ctid[0] == 0)) { /*apid provided having '*' in it and ctid is null*/ dlt_daemon_find_multiple_context_and_send_trace_status(sock, daemon, daemon_local, 1, apid, (int8_t) (apid_length - 1), (int8_t) req->log_level, verbose); } else if ((ctid_length != 0) && (ctid[ctid_length - 1] == '*') && (apid[0] == 0)) /*ctid provided is having '*' in it and apid is null*/ { dlt_daemon_find_multiple_context_and_send_trace_status(sock, daemon, daemon_local, 0, ctid, (int8_t) (ctid_length - 1), (int8_t) req->log_level, verbose); } else if ((apid_length != 0) && (apid[apid_length - 1] != '*') && (ctid[0] == 0)) /*only app id case*/ { dlt_daemon_find_multiple_context_and_send_trace_status(sock, daemon, daemon_local, 1, apid, DLT_ID_SIZE, (int8_t) req->log_level, verbose); } else if ((ctid_length != 0) && (ctid[ctid_length - 1] != '*') && (apid[0] == 0)) /*only context id case*/ { dlt_daemon_find_multiple_context_and_send_trace_status(sock, daemon, daemon_local, 0, ctid, DLT_ID_SIZE, (int8_t) req->log_level, verbose); } else { context = dlt_daemon_context_find(daemon, apid, ctid, daemon->ecuid, verbose); /* Set trace status */ if (context != 0) { dlt_daemon_send_trace_status(sock, daemon, daemon_local, context, (int8_t) req->log_level, verbose); } else { dlt_vlog(LOG_ERR, "Could not set trace status: %d. Context [%.4s:%.4s] not found:", req->log_level, apid, ctid); dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_SET_LOG_LEVEL, DLT_SERVICE_RESPONSE_ERROR, verbose); } } } void dlt_daemon_control_set_default_log_level(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); DltServiceSetDefaultLogLevel *req; uint32_t id = DLT_SERVICE_ID_SET_DEFAULT_LOG_LEVEL; if ((daemon == NULL) || (msg == NULL) || (msg->databuffer == NULL)) return; if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServiceSetDefaultLogLevel)) < 0) return; req = (DltServiceSetDefaultLogLevel *)(msg->databuffer); /* No endianess conversion necessary */ if (/*(req->log_level>=0) &&*/ (req->log_level <= DLT_LOG_VERBOSE)) { if (daemon_local->flags.enforceContextLLAndTS) daemon->default_log_level = getStatus(req->log_level, daemon_local->flags.contextLogLevel); else daemon->default_log_level = (int8_t) req->log_level; /* No endianess conversion necessary */ /* Send Update to all contexts using the default log level */ dlt_daemon_user_send_default_update(daemon, verbose); dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); } else { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); } } void dlt_daemon_control_set_all_log_level(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); DltServiceSetDefaultLogLevel *req = NULL; uint32_t id = DLT_SERVICE_ID_SET_ALL_LOG_LEVEL; int8_t loglevel = 0; if ((daemon == NULL) || (msg == NULL) || (msg->databuffer == NULL)) { dlt_vlog(LOG_ERR, "%s: Invalid parameters\n", __func__); return; } if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServiceSetDefaultLogLevel)) < 0) return; req = (DltServiceSetDefaultLogLevel *)(msg->databuffer); /* No endianess conversion necessary */ if ((req != NULL) && ((req->log_level <= DLT_LOG_VERBOSE) || (req->log_level == (uint8_t)DLT_LOG_DEFAULT))) { if (daemon_local->flags.enforceContextLLAndTS) loglevel = getStatus(req->log_level, daemon_local->flags.contextLogLevel); else loglevel = (int8_t) req->log_level; /* No endianess conversion necessary */ /* Send Update to all contexts using the new log level */ dlt_daemon_user_send_all_log_level_update(daemon, loglevel, verbose); dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); } else { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); } } void dlt_daemon_control_set_default_trace_status(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); /* Payload of request message */ DltServiceSetDefaultLogLevel *req; uint32_t id = DLT_SERVICE_ID_SET_DEFAULT_TRACE_STATUS; if ((daemon == NULL) || (msg == NULL) || (msg->databuffer == NULL)) return; if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServiceSetDefaultLogLevel)) < 0) return; req = (DltServiceSetDefaultLogLevel *)(msg->databuffer); /* No endianess conversion necessary */ if ((req->log_level == DLT_TRACE_STATUS_OFF) || (req->log_level == DLT_TRACE_STATUS_ON)) { if (daemon_local->flags.enforceContextLLAndTS) daemon->default_trace_status = getStatus(req->log_level, daemon_local->flags.contextTraceStatus); else daemon->default_trace_status = (int8_t) req->log_level; /* No endianess conversion necessary*/ /* Send Update to all contexts using the default trace status */ dlt_daemon_user_send_default_update(daemon, verbose); dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); } else { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); } } void dlt_daemon_control_set_all_trace_status(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); DltServiceSetDefaultLogLevel *req = NULL; uint32_t id = DLT_SERVICE_ID_SET_ALL_TRACE_STATUS; int8_t tracestatus = 0; if ((daemon == NULL) || (msg == NULL) || (msg->databuffer == NULL)) { dlt_vlog(LOG_ERR, "%s: Invalid parameters\n", __func__); return; } if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServiceSetDefaultLogLevel)) < 0) return; req = (DltServiceSetDefaultLogLevel *)(msg->databuffer); /* No endianess conversion necessary */ if ((req != NULL) && ((req->log_level <= DLT_TRACE_STATUS_ON) || (req->log_level == (uint8_t)DLT_TRACE_STATUS_DEFAULT))) { if (daemon_local->flags.enforceContextLLAndTS) tracestatus = getStatus(req->log_level, daemon_local->flags.contextTraceStatus); else tracestatus = (int8_t) req->log_level; /* No endianess conversion necessary */ /* Send Update to all contexts using the new log level */ dlt_daemon_user_send_all_trace_status_update(daemon, tracestatus, verbose); dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); } else { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); } } void dlt_daemon_control_set_timing_packets(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); DltServiceSetVerboseMode *req; /* request uses same struct as set verbose mode */ uint32_t id = DLT_SERVICE_ID_SET_TIMING_PACKETS; if ((daemon == NULL) || (msg == NULL) || (msg->databuffer == NULL)) return; if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServiceSetVerboseMode)) < 0) return; req = (DltServiceSetVerboseMode *)(msg->databuffer); if ((req->new_status == 0) || (req->new_status == 1)) { daemon->timingpackets = req->new_status; dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); } else { dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); } } void dlt_daemon_control_message_time(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { DltMessage msg; int32_t len; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == 0) return; /* initialise new message */ if (dlt_message_init(&msg, 0) == DLT_RETURN_ERROR) return; /* send message */ /* prepare storage header */ msg.storageheader = (DltStorageHeader *)msg.headerbuffer; dlt_set_storageheader(msg.storageheader, daemon->ecuid); /* prepare standard header */ msg.standardheader = (DltStandardHeader *)(msg.headerbuffer + sizeof(DltStorageHeader)); msg.standardheader->htyp = DLT_HTYP_WEID | DLT_HTYP_WTMS | DLT_HTYP_UEH | DLT_HTYP_PROTOCOL_VERSION1; #if (BYTE_ORDER == BIG_ENDIAN) msg.standardheader->htyp = (msg.standardheader->htyp | DLT_HTYP_MSBF); #endif msg.standardheader->mcnt = 0; /* Set header extra parameters */ dlt_set_id(msg.headerextra.ecu, daemon->ecuid); msg.headerextra.tmsp = dlt_uptime(); dlt_message_set_extraparameters(&msg, verbose); /* prepare extended header */ msg.extendedheader = (DltExtendedHeader *)(msg.headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg.standardheader->htyp)); msg.extendedheader->msin = DLT_MSIN_CONTROL_TIME; msg.extendedheader->noar = 0; /* number of arguments */ dlt_set_id(msg.extendedheader->apid, ""); /* application id */ dlt_set_id(msg.extendedheader->ctid, ""); /* context id */ /* prepare length information */ msg.headersize = (uint32_t) (sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + sizeof(DltExtendedHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg.standardheader->htyp)); len = (int32_t) (msg.headersize - sizeof(DltStorageHeader) + msg.datasize); if (len > UINT16_MAX) { dlt_log(LOG_WARNING, "Huge control message discarded!\n"); /* free message */ dlt_message_free(&msg, 0); return; } msg.standardheader->len = DLT_HTOBE_16(((uint16_t)len)); /* Send message, ignore return value */ dlt_daemon_client_send(sock, daemon, daemon_local, msg.headerbuffer, sizeof(DltStorageHeader), msg.headerbuffer + sizeof(DltStorageHeader), (int) msg.headersize - (int) sizeof(DltStorageHeader), msg.databuffer, (int) msg.datasize, verbose); /* free message */ dlt_message_free(&msg, 0); } int dlt_daemon_process_one_s_timer(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { uint64_t expir = 0; ssize_t res = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon_local == NULL) || (daemon == NULL) || (receiver == NULL)) { dlt_vlog(LOG_ERR, "%s: invalid parameters", __func__); return -1; } res = read(receiver->fd, &expir, sizeof(expir)); if (res < 0) { dlt_vlog(LOG_WARNING, "%s: Fail to read timer (%s)\n", __func__, strerror(errno)); /* Activity received on timer_wd, but unable to read the fd: * let's go on sending notification */ } if ((daemon->state == DLT_DAEMON_STATE_SEND_BUFFER) || (daemon->state == DLT_DAEMON_STATE_BUFFER_FULL)) { if (dlt_daemon_send_ringbuffer_to_client(daemon, daemon_local, daemon_local->flags.vflag)) dlt_log(LOG_DEBUG, "Can't send contents of ring buffer to clients\n"); } if ((daemon->timingpackets) && (daemon->state == DLT_DAEMON_STATE_SEND_DIRECT)) dlt_daemon_control_message_time(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, daemon_local->flags.vflag); dlt_log(LOG_DEBUG, "Timer timingpacket\n"); return 0; } int dlt_daemon_process_sixty_s_timer(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { uint64_t expir = 0; ssize_t res = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon_local == NULL) || (daemon == NULL) || (receiver == NULL)) { dlt_vlog(LOG_ERR, "%s: invalid parameters", __func__); return -1; } res = read(receiver->fd, &expir, sizeof(expir)); if (res < 0) { dlt_vlog(LOG_WARNING, "%s: Fail to read timer (%s)\n", __func__, strerror(errno)); /* Activity received on timer_wd, but unable to read the fd: * let's go on sending notification */ } if (daemon_local->flags.sendECUSoftwareVersion > 0) dlt_daemon_control_get_software_version(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, daemon_local->flags.vflag); if (daemon_local->flags.sendTimezone > 0) { /* send timezone information */ time_t t = time(NULL); struct tm lt; /*Added memset to avoid compiler warning for near initialization */ memset((void *)<, 0, sizeof(lt)); tzset(); localtime_r(&t, <); dlt_daemon_control_message_timezone(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, daemon_local->flags.vflag); } dlt_log(LOG_DEBUG, "Timer ecuversion\n"); return 0; } #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE int dlt_daemon_process_systemd_timer(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { uint64_t expir = 0; ssize_t res = -1; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon_local == NULL) || (daemon == NULL) || (receiver == NULL)) { dlt_vlog(LOG_ERR, "%s: invalid parameters", __func__); return res; } res = read(receiver->fd, &expir, sizeof(expir)); if (res < 0) { dlt_vlog(LOG_WARNING, "Failed to read timer_wd; %s\n", strerror(errno)); /* Activity received on timer_wd, but unable to read the fd: * let's go on sending notification */ } if (sd_notify(0, "WATCHDOG=1") < 0) dlt_log(LOG_CRIT, "Could not reset systemd watchdog\n"); dlt_log(LOG_DEBUG, "Timer watchdog\n"); return 0; } #else int dlt_daemon_process_systemd_timer(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { (void)daemon; (void)daemon_local; (void)receiver; (void)verbose; dlt_log(LOG_DEBUG, "Timer watchdog not enabled\n"); return -1; } #endif void dlt_daemon_control_service_logstorage(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { DltServiceOfflineLogstorage *req; int ret; unsigned int connection_type = 0; DltLogStorage *device = NULL; int device_index = -1; uint32_t i = 0; int tmp_errno = 0; struct stat daemon_mpoint_st = {0}; int daemon_st_status = 0; struct stat req_mpoint_st = {0}; int req_st_status = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (msg == NULL) || (daemon_local == NULL)) { dlt_vlog(LOG_ERR, "%s: Invalid function parameters\n", __func__); return; } if ((daemon_local->flags.offlineLogstorageMaxDevices <= 0) || (msg->databuffer == NULL)) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE, DLT_SERVICE_RESPONSE_ERROR, verbose); dlt_log(LOG_INFO, "Logstorage functionality not enabled or MAX device set is 0\n"); return; } if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServiceOfflineLogstorage)) < 0) return; req = (DltServiceOfflineLogstorage *)(msg->databuffer); req_st_status= stat(req->mount_point, &req_mpoint_st); tmp_errno = errno; if (req_st_status < 0) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE, DLT_SERVICE_RESPONSE_ERROR, verbose); dlt_vlog(LOG_WARNING, "%s: Failed to stat requested mount point [%s] with error [%s]\n", __func__, req->mount_point, strerror(tmp_errno)); return; } for (i = 0; i < daemon_local->flags.offlineLogstorageMaxDevices; i++) { connection_type = daemon->storage_handle[i].connection_type; memset(&daemon_mpoint_st, 0, sizeof(struct stat)); if (strlen(daemon->storage_handle[i].device_mount_point) > 1) { daemon_st_status = stat(daemon->storage_handle[i].device_mount_point, &daemon_mpoint_st); tmp_errno = errno; if (daemon_st_status < 0) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE, DLT_SERVICE_RESPONSE_ERROR, verbose); dlt_vlog(LOG_WARNING, "%s: Failed to stat daemon mount point [%s] with error [%s]\n", __func__, daemon->storage_handle[i].device_mount_point, strerror(tmp_errno)); return; } /* Check if the requested device path is already used as log storage device */ if (req_mpoint_st.st_dev == daemon_mpoint_st.st_dev && req_mpoint_st.st_ino == daemon_mpoint_st.st_ino) { device_index = (int) i; break; } } /* Get first available device index here */ if ((connection_type != DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) && (device_index == -1)) device_index = (int) i; } /* It might be possible to sync all caches of all devices */ if ((req->connection_type == DLT_OFFLINE_LOGSTORAGE_SYNC_CACHES) && (strlen(req->mount_point) == 0)) { /* It is expected to receive an empty mount point to sync all Logstorage * devices in this case. */ } else if (device_index == -1) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE, DLT_SERVICE_RESPONSE_ERROR, verbose); dlt_log(LOG_WARNING, "MAX devices already in use \n"); return; } /* Check for device connection request from log storage ctrl app */ device = &daemon->storage_handle[device_index]; if (req->connection_type == DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) { ret = dlt_logstorage_device_connected(device, req->mount_point); if (ret == 1) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE, DLT_SERVICE_RESPONSE_WARNING, verbose); return; } else if (ret != 0) { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE, DLT_SERVICE_RESPONSE_OK, verbose); /* Update maintain logstorage loglevel if necessary */ if (daemon->storage_handle[device_index].maintain_logstorage_loglevel != DLT_MAINTAIN_LOGSTORAGE_LOGLEVEL_UNDEF) { daemon->maintain_logstorage_loglevel = daemon->storage_handle[device_index].maintain_logstorage_loglevel; } /* Check if log level of running application needs an update */ dlt_daemon_logstorage_update_application_loglevel(daemon, daemon_local, device_index, verbose); } /* Check for device disconnection request from log storage ctrl app */ else if (req->connection_type == DLT_OFFLINE_LOGSTORAGE_DEVICE_DISCONNECTED) { /* Check if log level of running application needs to be reset */ dlt_daemon_logstorage_reset_application_loglevel( daemon, daemon_local, device_index, (int) daemon_local->flags.offlineLogstorageMaxDevices, verbose); dlt_logstorage_device_disconnected(&(daemon->storage_handle[device_index]), DLT_LOGSTORAGE_SYNC_ON_DEVICE_DISCONNECT); dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE, DLT_SERVICE_RESPONSE_OK, verbose); } /* Check for cache synchronization request from log storage ctrl app */ else if (req->connection_type == DLT_OFFLINE_LOGSTORAGE_SYNC_CACHES) { int ret = 0; if (device_index == -1) { /* sync all Logstorage devices */ for (i = 0; i < daemon_local->flags.offlineLogstorageMaxDevices; i++) if (daemon->storage_handle[i].connection_type == DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) ret = dlt_daemon_logstorage_sync_cache( daemon, daemon_local, daemon->storage_handle[i].device_mount_point, verbose); } else { /* trigger logstorage to sync caches */ ret = dlt_daemon_logstorage_sync_cache(daemon, daemon_local, req->mount_point, verbose); } if (ret == 0) dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE, DLT_SERVICE_RESPONSE_OK, verbose); else dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE, DLT_SERVICE_RESPONSE_ERROR, verbose); } else { dlt_daemon_control_service_response(sock, daemon, daemon_local, DLT_SERVICE_ID_OFFLINE_LOGSTORAGE, DLT_SERVICE_RESPONSE_ERROR, verbose); } } void dlt_daemon_control_passive_node_connect(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); DltServicePassiveNodeConnect *req; uint32_t id = DLT_SERVICE_ID_PASSIVE_NODE_CONNECT; if ((daemon == NULL) || (daemon_local == NULL) || (msg == NULL) || (msg->databuffer == NULL)) return; /* return error, if gateway mode not enabled*/ if (daemon_local->flags.gatewayMode == 0) { dlt_log(LOG_WARNING, "Received passive node connection status request, " "but GatewayMode is disabled\n"); dlt_daemon_control_service_response( sock, daemon, daemon_local, DLT_SERVICE_ID_PASSIVE_NODE_CONNECTION_STATUS, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServicePassiveNodeConnect)) < 0) return; req = (DltServicePassiveNodeConnect *)msg->databuffer; if (dlt_gateway_process_on_demand_request(&daemon_local->pGateway, daemon_local, req->node_id, (int) req->connection_status, verbose) < 0) dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); else dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); } void dlt_daemon_control_passive_node_connect_status(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { DltMessage msg; DltServicePassiveNodeConnectionInfo *resp; DltGatewayConnection *con = NULL; unsigned int i = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL)) return; if (dlt_message_init(&msg, verbose) == -1) return; /* return error, if gateway mode not enabled*/ if (daemon_local->flags.gatewayMode == 0) { dlt_log(LOG_WARNING, "Received passive node connection status request, " "but GatewayMode is disabled\n"); dlt_daemon_control_service_response( sock, daemon, daemon_local, DLT_SERVICE_ID_PASSIVE_NODE_CONNECTION_STATUS, DLT_SERVICE_RESPONSE_ERROR, verbose); return; } /* prepare payload of data */ msg.datasize = sizeof(DltServicePassiveNodeConnectionInfo); if (msg.databuffer && (msg.databuffersize < msg.datasize)) msg.databuffer = NULL; if (msg.databuffer == NULL) { msg.databuffer = (uint8_t *)malloc(msg.datasize); if (msg.databuffer == NULL) { dlt_log(LOG_CRIT, "Cannot allocate memory for message response\n"); return; } msg.databuffersize = msg.datasize; } resp = (DltServicePassiveNodeConnectionInfo *)msg.databuffer; memset(resp, 0, msg.datasize); resp->service_id = DLT_SERVICE_ID_PASSIVE_NODE_CONNECTION_STATUS; resp->status = DLT_SERVICE_RESPONSE_OK; resp->num_connections = (uint32_t) daemon_local->pGateway.num_connections; for (i = 0; i < resp->num_connections; i++) { if ((i * DLT_ID_SIZE) > DLT_ENTRY_MAX) { dlt_log(LOG_ERR, "Maximal message size reached. Skip further information\n"); break; } con = &daemon_local->pGateway.connections[i]; if (con == NULL) { dlt_log(LOG_CRIT, "Passive node connection structure is NULL\n"); dlt_daemon_control_service_response( sock, daemon, daemon_local, DLT_SERVICE_ID_PASSIVE_NODE_CONNECTION_STATUS, DLT_SERVICE_RESPONSE_ERROR, verbose); /* free message */ dlt_message_free(&msg, verbose); return; } resp->connection_status[i] = con->status; memcpy(&resp->node_id[i * DLT_ID_SIZE], con->ecuid, DLT_ID_SIZE); } dlt_daemon_client_send_control_message(sock, daemon, daemon_local, &msg, "", "", verbose); /* free message */ dlt_message_free(&msg, verbose); } dlt-daemon-2.18.6/src/daemon/dlt_daemon_client.h000066400000000000000000000465071377520261000215220ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_client.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_daemon_client.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #ifndef DLT_DAEMON_CLIENT_H #define DLT_DAEMON_CLIENT_H #include /* for NAME_MAX */ #include "dlt_daemon_common.h" #include "dlt_user_shared.h" #include "dlt_user_shared_cfg.h" #include #include /** * Send out message to client or store message in offline trace. * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param storage_header pointer to data * @param storage_header_size size of data * @param data1 pointer to data * @param size1 size of data * @param data2 pointer to data * @param size2 size of data * @param verbose if set to true verbose information is printed out. * @return unequal 0 if there is an error or buffer is full */ int dlt_daemon_client_send(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, void *storage_header, int storage_header_size, void *data1, int size1, void *data2, int size2, int verbose); /** * Send out message to all client or store message in offline trace. * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param verbose if set to true verbose information is printed out. * @return 0 if success, less than 0 if there is an error or buffer is full */ int dlt_daemon_client_send_message_to_all_client(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); /** * Send out response message to dlt client * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to response message * @param apid pointer to application id to be used in response message * @param ctid pointer to context id to be used in response message * @param verbose if set to true verbose information is printed out. * @return -1 if there is an error or buffer is full */ int dlt_daemon_client_send_control_message(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, char *apid, char *ctid, int verbose); /** * Process and generate response to received get log info control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received control message * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_get_log_info(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Process and generate response to received get software version control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_get_software_version(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); /** * Process and generate response to received get default log level control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_get_default_log_level(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); /** * Process and generate response to message buffer overflow control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param overflow_counter Overflow counter * @param apid Application ID * @param verbose if set to true verbose information is printed out. * @return -1 if there is an error or buffer overflow, else 0 */ int dlt_daemon_control_message_buffer_overflow(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, unsigned int overflow_counter, char *apid, int verbose); /** * Generate response to control message from dlt client * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param service_id service id of control message * @param status status of response (e.g. ok, not supported, error) * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_service_response(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, uint32_t service_id, int8_t status, int verbose); /** * Send control message unregister context (add on to AUTOSAR standard) * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param apid application id to be unregisteres * @param ctid context id to be unregistered * @param comid Communication id where apid is unregistered * @param verbose if set to true verbose information is printed out. */ int dlt_daemon_control_message_unregister_context(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, char *apid, char *ctid, char *comid, int verbose); /** * Send control message connection info (add on to AUTOSAR standard) * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param state state of connection * @param comid Communication id where connection state changed * @param verbose if set to true verbose information is printed out. */ int dlt_daemon_control_message_connection_info(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, uint8_t state, char *comid, int verbose); /** * Send control message timezone (add on to AUTOSAR standard) * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param verbose if set to true verbose information is printed out. */ int dlt_daemon_control_message_timezone(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); /** * Send control message marker (add on to AUTOSAR standard) * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param verbose if set to true verbose information is printed out. */ int dlt_daemon_control_message_marker(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); /** * Process received control message from dlt client * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received control message * @param verbose if set to true verbose information is printed out. */ int dlt_daemon_client_process_control(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Process and generate response to received sw injection control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received sw injection control message * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_callsw_cinjection(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Process and generate response to received set log level control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received control message * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_set_log_level(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Process and generate response to received set trace status control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received control message * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_set_trace_status(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Process and generate response to received set default log level control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received control message * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_set_default_log_level(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Process and generate response to received set all log level control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received control message * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_set_all_log_level(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Process and generate response to received set default trace status control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received control message * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_set_default_trace_status(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Process and generate response to received set all trace status control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received control message * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_set_all_trace_status(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Process and generate response to set timing packets control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received control message * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_set_timing_packets(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Send time control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_message_time(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); /** * Service offline logstorage command request * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received control message * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_service_logstorage(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Process and generate response to received passive node connect control * message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param msg pointer to received control message * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_passive_node_connect(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, DltMessage *msg, int verbose); /** * Process and generate response to received passive node connection status * control message * @param sock connection handle used for sending response * @param daemon pointer to dlt daemon structure * @param daemon_local pointer to dlt daemon local structure * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_passive_node_connect_status(int sock, DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); #endif /* DLT_DAEMON_CLIENT_H */ dlt-daemon-2.18.6/src/daemon/dlt_daemon_common.c000066400000000000000000001530471377520261000215250ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_common.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_daemon_common.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include #include #include #include #include #include #include #include /* send() */ #include "dlt_types.h" #include "dlt_daemon_common.h" #include "dlt_daemon_common_cfg.h" #include "dlt_user_shared.h" #include "dlt_user_shared_cfg.h" #include "dlt-daemon.h" #include "dlt_daemon_socket.h" #include "dlt_daemon_serial.h" char *app_recv_buffer = NULL; /* pointer to receiver buffer for application msges */ sem_t dlt_daemon_mutex; static int dlt_daemon_cmp_apid(const void *m1, const void *m2) { if ((m1 == NULL) || (m2 == NULL)) return -1; DltDaemonApplication *mi1 = (DltDaemonApplication *)m1; DltDaemonApplication *mi2 = (DltDaemonApplication *)m2; return memcmp(mi1->apid, mi2->apid, DLT_ID_SIZE); } static int dlt_daemon_cmp_apid_ctid(const void *m1, const void *m2) { if ((m1 == NULL) || (m2 == NULL)) return -1; int ret, cmp; DltDaemonContext *mi1 = (DltDaemonContext *)m1; DltDaemonContext *mi2 = (DltDaemonContext *)m2; cmp = memcmp(mi1->apid, mi2->apid, DLT_ID_SIZE); if (cmp < 0) ret = -1; else if (cmp == 0) ret = memcmp(mi1->ctid, mi2->ctid, DLT_ID_SIZE); else ret = 1; return ret; } DltDaemonRegisteredUsers *dlt_daemon_find_users_list(DltDaemon *daemon, char *ecu, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); int i = 0; if ((daemon == NULL) || (ecu == NULL)) { dlt_vlog(LOG_ERR, "%s: Wrong parameters", __func__); return (DltDaemonRegisteredUsers *)NULL; } for (i = 0; i < daemon->num_user_lists; i++) if (strncmp(ecu, daemon->user_list[i].ecu, DLT_ID_SIZE) == 0) return &daemon->user_list[i]; dlt_vlog(LOG_ERR, "Cannot find user list for ECU: %4s\n", ecu); return (DltDaemonRegisteredUsers *)NULL; } int dlt_daemon_init_runtime_configuration(DltDaemon *daemon, const char *runtime_directory, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); size_t append_length = 0; if (daemon == NULL) return DLT_RETURN_ERROR; /* Default */ daemon->mode = DLT_USER_MODE_EXTERNAL; if (runtime_directory == NULL) return DLT_RETURN_ERROR; /* prepare filenames for configuration */ append_length = PATH_MAX - sizeof(DLT_RUNTIME_APPLICATION_CFG); if (runtime_directory[0]) { strncpy(daemon->runtime_application_cfg, runtime_directory, append_length); daemon->runtime_application_cfg[append_length] = 0; } else { strncpy(daemon->runtime_application_cfg, DLT_RUNTIME_DEFAULT_DIRECTORY, append_length); daemon->runtime_application_cfg[append_length] = 0; } strcat(daemon->runtime_application_cfg, DLT_RUNTIME_APPLICATION_CFG); /* strcat uncritical here, because max length already checked */ append_length = PATH_MAX - sizeof(DLT_RUNTIME_CONTEXT_CFG); if (runtime_directory[0]) { strncpy(daemon->runtime_context_cfg, runtime_directory, append_length); daemon->runtime_context_cfg[append_length] = 0; } else { strncpy(daemon->runtime_context_cfg, DLT_RUNTIME_DEFAULT_DIRECTORY, append_length); daemon->runtime_context_cfg[append_length] = 0; } strcat(daemon->runtime_context_cfg, DLT_RUNTIME_CONTEXT_CFG); /* strcat uncritical here, because max length already checked */ append_length = PATH_MAX - sizeof(DLT_RUNTIME_CONFIGURATION); if (runtime_directory[0]) { strncpy(daemon->runtime_configuration, runtime_directory, append_length); daemon->runtime_configuration[append_length] = 0; } else { strncpy(daemon->runtime_configuration, DLT_RUNTIME_DEFAULT_DIRECTORY, append_length); daemon->runtime_configuration[append_length] = 0; } strcat(daemon->runtime_configuration, DLT_RUNTIME_CONFIGURATION); /* strcat uncritical here, because max length already checked */ return DLT_RETURN_OK; } int dlt_daemon_init(DltDaemon *daemon, unsigned long RingbufferMinSize, unsigned long RingbufferMaxSize, unsigned long RingbufferStepSize, const char *runtime_directory, int InitialContextLogLevel, int InitialContextTraceStatus, int ForceLLTS, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (runtime_directory == NULL)) return -1; daemon->user_list = NULL; daemon->num_user_lists = 0; daemon->default_log_level = (int8_t) InitialContextLogLevel; daemon->default_trace_status = (int8_t) InitialContextTraceStatus; daemon->force_ll_ts = (int8_t) ForceLLTS; daemon->overflow_counter = 0; daemon->runtime_context_cfg_loaded = 0; daemon->connectionState = 0; /* no logger connected */ daemon->state = DLT_DAEMON_STATE_INIT; /* initial logging state */ daemon->sendserialheader = 0; daemon->timingpackets = 0; dlt_set_id(daemon->ecuid, ""); /* initialize ring buffer for client connection */ dlt_vlog(LOG_INFO, "Ringbuffer configuration: %lu/%lu/%lu\n", RingbufferMinSize, RingbufferMaxSize, RingbufferStepSize); if (dlt_buffer_init_dynamic(&(daemon->client_ringbuffer), (uint32_t) RingbufferMinSize, (uint32_t) RingbufferMaxSize, (uint32_t) RingbufferStepSize) == DLT_RETURN_ERROR) return -1; daemon->storage_handle = NULL; return 0; } int dlt_daemon_free(DltDaemon *daemon, int verbose) { int i = 0; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon->user_list == NULL)) return -1; /* free all registered user information */ for (i = 0; i < daemon->num_user_lists; i++) { user_list = &daemon->user_list[i]; if (user_list != NULL) { /* ignore return values */ dlt_daemon_contexts_clear(daemon, user_list->ecu, verbose); dlt_daemon_applications_clear(daemon, user_list->ecu, verbose); } } free(daemon->user_list); if (app_recv_buffer) free(app_recv_buffer); /* free ringbuffer */ dlt_buffer_free_dynamic(&(daemon->client_ringbuffer)); return 0; } int dlt_daemon_init_user_information(DltDaemon *daemon, DltGateway *gateway, int gateway_mode, int verbose) { int nodes = 1; int i = 1; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || ((gateway_mode == 1) && (gateway == NULL))) return DLT_RETURN_ERROR; if (gateway_mode == 0) { /* initialize application list */ daemon->user_list = calloc((size_t) nodes, sizeof(DltDaemonRegisteredUsers)); if (daemon->user_list == NULL) { dlt_log(LOG_ERR, "Allocating memory for user information"); return DLT_RETURN_ERROR; } dlt_set_id(daemon->user_list[0].ecu, daemon->ecuid); daemon->num_user_lists = 1; } else { /* gateway is active */ nodes += gateway->num_connections; /* initialize application list */ daemon->user_list = calloc((size_t) nodes, sizeof(DltDaemonRegisteredUsers)); if (daemon->user_list == NULL) { dlt_log(LOG_ERR, "Allocating memory for user information"); return DLT_RETURN_ERROR; } dlt_set_id(daemon->user_list[0].ecu, daemon->ecuid); daemon->num_user_lists = nodes; for (i = 1; i < nodes; i++) dlt_set_id(daemon->user_list[i].ecu, gateway->connections[i - 1].ecuid); } return DLT_RETURN_OK; } int dlt_daemon_applications_invalidate_fd(DltDaemon *daemon, char *ecu, int fd, int verbose) { int i; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (ecu == NULL)) return DLT_RETURN_ERROR; user_list = dlt_daemon_find_users_list(daemon, ecu, verbose); if (user_list != NULL) { for (i = 0; i < user_list->num_applications; i++) if (user_list->applications[i].user_handle == fd) user_list->applications[i].user_handle = DLT_FD_INIT; return DLT_RETURN_OK; } return DLT_RETURN_ERROR; } int dlt_daemon_applications_clear(DltDaemon *daemon, char *ecu, int verbose) { int i; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon->user_list == NULL) || (ecu == NULL)) return DLT_RETURN_WRONG_PARAMETER; user_list = dlt_daemon_find_users_list(daemon, ecu, verbose); if (user_list == NULL) return DLT_RETURN_ERROR; for (i = 0; i < user_list->num_applications; i++) if (user_list->applications[i].application_description != NULL) { free(user_list->applications[i].application_description); user_list->applications[i].application_description = NULL; } if (user_list->applications != NULL) free(user_list->applications); user_list->applications = NULL; user_list->num_applications = 0; return 0; } static void dlt_daemon_application_reset_user_handle(DltDaemon *daemon, DltDaemonApplication *application, int verbose) { DltDaemonRegisteredUsers *user_list; DltDaemonContext *context; int i; if (application->user_handle == DLT_FD_INIT) return; user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list != NULL) { for (i = 0; i < user_list->num_contexts; i++) { context = &user_list->contexts[i]; if (context->user_handle == application->user_handle) context->user_handle = DLT_FD_INIT; } } if (application->owns_user_handle) close(application->user_handle); application->user_handle = DLT_FD_INIT; application->owns_user_handle = false; } DltDaemonApplication *dlt_daemon_application_add(DltDaemon *daemon, char *apid, pid_t pid, char *description, int fd, char *ecu, int verbose) { DltDaemonApplication *application; DltDaemonApplication *old; int new_application; int dlt_user_handle; bool owns_user_handle; DltDaemonRegisteredUsers *user_list = NULL; #ifdef DLT_DAEMON_USE_FIFO_IPC (void)fd; /* To avoid compiler warning : unused variable */ char filename[DLT_DAEMON_COMMON_TEXTBUFSIZE]; #endif if ((daemon == NULL) || (apid == NULL) || (apid[0] == '\0') || (ecu == NULL)) return (DltDaemonApplication *)NULL; user_list = dlt_daemon_find_users_list(daemon, ecu, verbose); if (user_list == NULL) return (DltDaemonApplication *)NULL; if (user_list->applications == NULL) { user_list->applications = (DltDaemonApplication *) malloc(sizeof(DltDaemonApplication) * DLT_DAEMON_APPL_ALLOC_SIZE); if (user_list->applications == NULL) return (DltDaemonApplication *)NULL; } new_application = 0; /* Check if application [apid] is already available */ application = dlt_daemon_application_find(daemon, apid, ecu, verbose); if (application == NULL) { user_list->num_applications += 1; if (user_list->num_applications != 0) { if ((user_list->num_applications % DLT_DAEMON_APPL_ALLOC_SIZE) == 0) { /* allocate memory in steps of DLT_DAEMON_APPL_ALLOC_SIZE, e.g. 100 */ old = user_list->applications; user_list->applications = (DltDaemonApplication *) malloc(sizeof(DltDaemonApplication) * ((user_list->num_applications / DLT_DAEMON_APPL_ALLOC_SIZE) + 1) * DLT_DAEMON_APPL_ALLOC_SIZE); if (user_list->applications == NULL) { user_list->applications = old; user_list->num_applications -= 1; return (DltDaemonApplication *)NULL; } memcpy(user_list->applications, old, sizeof(DltDaemonApplication) * user_list->num_applications); free(old); } } application = &(user_list->applications[user_list->num_applications - 1]); dlt_set_id(application->apid, apid); application->pid = 0; application->application_description = NULL; application->num_contexts = 0; application->user_handle = DLT_FD_INIT; application->owns_user_handle = false; new_application = 1; } else if ((pid != application->pid) && (application->pid != 0)) { dlt_vlog(LOG_WARNING, "Duplicate registration of ApplicationID: '%.4s'; registering from PID %d, existing from PID %d\n", apid, pid, application->pid); } /* Store application description and pid of application */ if (application->application_description) { free(application->application_description); application->application_description = NULL; } if (description != NULL) { application->application_description = malloc(strlen(description) + 1); if (application->application_description) { memcpy(application->application_description, description, strlen(description) + 1); } else { dlt_log(LOG_ERR, "Cannot allocate memory to store application description\n"); free(application); return (DltDaemonApplication *)NULL; } } if (application->pid != pid) { dlt_daemon_application_reset_user_handle(daemon, application, verbose); application->pid = 0; } /* open user pipe only if it is not yet opened */ if ((application->user_handle == DLT_FD_INIT) && (pid != 0)) { dlt_user_handle = DLT_FD_INIT; owns_user_handle = false; #if defined DLT_DAEMON_USE_UNIX_SOCKET_IPC || defined DLT_DAEMON_VSOCK_IPC_ENABLE if (fd >= DLT_FD_MINIMUM) { dlt_user_handle = fd; owns_user_handle = false; } #endif #ifdef DLT_DAEMON_USE_FIFO_IPC if (dlt_user_handle < DLT_FD_MINIMUM) { snprintf(filename, DLT_DAEMON_COMMON_TEXTBUFSIZE, "%s/dltpipes/dlt%d", dltFifoBaseDir, pid); dlt_user_handle = open(filename, O_WRONLY | O_NONBLOCK); if (dlt_user_handle < 0) { int prio = (errno == ENOENT) ? LOG_INFO : LOG_WARNING; dlt_vlog(prio, "open() failed to %s, errno=%d (%s)!\n", filename, errno, strerror(errno)); } else { owns_user_handle = true; } } #endif /* check if file descriptor was already used, and make it invalid if it * is reused. This prevents sending messages to wrong file descriptor */ dlt_daemon_applications_invalidate_fd(daemon, ecu, dlt_user_handle, verbose); dlt_daemon_contexts_invalidate_fd(daemon, ecu, dlt_user_handle, verbose); application->user_handle = dlt_user_handle; application->owns_user_handle = owns_user_handle; application->pid = pid; } /* Sort */ if (new_application) { qsort(user_list->applications, (size_t) user_list->num_applications, sizeof(DltDaemonApplication), dlt_daemon_cmp_apid); /* Find new position of application with apid*/ application = dlt_daemon_application_find(daemon, apid, ecu, verbose); } return application; } int dlt_daemon_application_del(DltDaemon *daemon, DltDaemonApplication *application, char *ecu, int verbose) { int pos; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (application == NULL) || (ecu == NULL)) return -1; user_list = dlt_daemon_find_users_list(daemon, ecu, verbose); if (user_list == NULL) return -1; if (user_list->num_applications > 0) { dlt_daemon_application_reset_user_handle(daemon, application, verbose); /* Free description of application to be deleted */ if (application->application_description) { free(application->application_description); application->application_description = NULL; } pos = (int) (application - (user_list->applications)); /* move all applications above pos to pos */ memmove(&(user_list->applications[pos]), &(user_list->applications[pos + 1]), sizeof(DltDaemonApplication) * ((user_list->num_applications - 1) - pos)); /* Clear last application */ memset(&(user_list->applications[user_list->num_applications - 1]), 0, sizeof(DltDaemonApplication)); user_list->num_applications--; } return 0; } DltDaemonApplication *dlt_daemon_application_find(DltDaemon *daemon, char *apid, char *ecu, int verbose) { DltDaemonApplication application; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon->user_list == NULL) || (apid == NULL) || (apid[0] == '\0') || (ecu == NULL)) return (DltDaemonApplication *)NULL; user_list = dlt_daemon_find_users_list(daemon, ecu, verbose); if ((user_list == NULL) || (user_list->num_applications == 0)) return (DltDaemonApplication *)NULL; /* Check, if apid is smaller than smallest apid or greater than greatest apid */ if ((memcmp(apid, user_list->applications[0].apid, DLT_ID_SIZE) < 0) || (memcmp(apid, user_list->applications[user_list->num_applications - 1].apid, DLT_ID_SIZE) > 0)) return (DltDaemonApplication *)NULL; dlt_set_id(application.apid, apid); return (DltDaemonApplication *)bsearch(&application, user_list->applications, (size_t) user_list->num_applications, sizeof(DltDaemonApplication), dlt_daemon_cmp_apid); } int dlt_daemon_applications_load(DltDaemon *daemon, const char *filename, int verbose) { FILE *fd; ID4 apid; char buf[DLT_DAEMON_COMMON_TEXTBUFSIZE]; char *ret; char *pb; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (filename == NULL) || (filename[0] == '\0')) return -1; fd = fopen(filename, "r"); if (fd == NULL) { dlt_vlog(LOG_WARNING, "%s: cannot open file %s: %s\n", __func__, filename, strerror(errno)); return -1; } while (!feof(fd)) { /* Clear buf */ memset(buf, 0, sizeof(buf)); /* Get line */ ret = fgets(buf, sizeof(buf), fd); if (NULL == ret) { /* fgets always null pointer if the last byte of the file is a new line * We need to check here if there was an error or was it feof.*/ if (ferror(fd)) { dlt_vlog(LOG_WARNING, "%s: fgets(buf,sizeof(buf),fd) returned NULL. %s\n", __func__, strerror(errno)); fclose(fd); return -1; } else if (feof(fd)) { fclose(fd); return 0; } else { dlt_vlog(LOG_WARNING, "%s: fgets(buf,sizeof(buf),fd) returned NULL. Unknown error.\n", __func__); fclose(fd); return -1; } } if (strcmp(buf, "") != 0) { /* Split line */ pb = strtok(buf, ":"); if (pb != NULL) { dlt_set_id(apid, pb); pb = strtok(NULL, ":"); if (pb != NULL) { /* pb contains now the description */ /* pid is unknown at loading time */ if (dlt_daemon_application_add(daemon, apid, 0, pb, -1, daemon->ecuid, verbose) == 0) { dlt_vlog(LOG_WARNING, "%s: dlt_daemon_application_add failed for %4s\n", __func__, apid); fclose(fd); return -1; } } } } } fclose(fd); return 0; } int dlt_daemon_applications_save(DltDaemon *daemon, const char *filename, int verbose) { FILE *fd; int i; char apid[DLT_ID_SIZE + 1]; /* DLT_ID_SIZE+1, because the 0-termination is required here */ DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (filename == NULL) || (filename[0] == '\0')) return -1; memset(apid, 0, sizeof(apid)); user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list == NULL) return -1; if ((user_list->applications != NULL) && (user_list->num_applications > 0)) { fd = fopen(filename, "w"); if (fd != NULL) { for (i = 0; i < user_list->num_applications; i++) { dlt_set_id(apid, user_list->applications[i].apid); if ((user_list->applications[i].application_description) && (user_list->applications[i].application_description[0] != '\0')) fprintf(fd, "%s:%s:\n", apid, user_list->applications[i].application_description); else fprintf(fd, "%s::\n", apid); } fclose(fd); } else { dlt_vlog(LOG_ERR, "%s: open %s failed! No application information stored.\n", __func__, filename); } } return 0; } DltDaemonContext *dlt_daemon_context_add(DltDaemon *daemon, char *apid, char *ctid, int8_t log_level, int8_t trace_status, int log_level_pos, int user_handle, char *description, char *ecu, int verbose) { DltDaemonApplication *application; DltDaemonContext *context; DltDaemonContext *old; int new_context = 0; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (apid == NULL) || (apid[0] == '\0') || (ctid == NULL) || (ctid[0] == '\0') || (ecu == NULL)) return (DltDaemonContext *)NULL; if ((log_level < DLT_LOG_DEFAULT) || (log_level > DLT_LOG_VERBOSE)) return (DltDaemonContext *)NULL; if ((trace_status < DLT_TRACE_STATUS_DEFAULT) || (trace_status > DLT_TRACE_STATUS_ON)) return (DltDaemonContext *)NULL; user_list = dlt_daemon_find_users_list(daemon, ecu, verbose); if (user_list == NULL) return (DltDaemonContext *)NULL; if (user_list->contexts == NULL) { user_list->contexts = (DltDaemonContext *)malloc(sizeof(DltDaemonContext) * DLT_DAEMON_CONTEXT_ALLOC_SIZE); if (user_list->contexts == NULL) return (DltDaemonContext *)NULL; } /* Check if application [apid] is available */ application = dlt_daemon_application_find(daemon, apid, ecu, verbose); if (application == NULL) return (DltDaemonContext *)NULL; /* Check if context [apid, ctid] is already available */ context = dlt_daemon_context_find(daemon, apid, ctid, ecu, verbose); if (context == NULL) { user_list->num_contexts += 1; if (user_list->num_contexts != 0) { if ((user_list->num_contexts % DLT_DAEMON_CONTEXT_ALLOC_SIZE) == 0) { /* allocate memory for context in steps of DLT_DAEMON_CONTEXT_ALLOC_SIZE, e.g 100 */ old = user_list->contexts; user_list->contexts = (DltDaemonContext *)malloc((size_t) sizeof(DltDaemonContext) * ((user_list->num_contexts / DLT_DAEMON_CONTEXT_ALLOC_SIZE) + 1) * DLT_DAEMON_CONTEXT_ALLOC_SIZE); if (user_list->contexts == NULL) { user_list->contexts = old; user_list->num_contexts -= 1; return (DltDaemonContext *)NULL; } memcpy(user_list->contexts, old, (size_t) sizeof(DltDaemonContext) * user_list->num_contexts); free(old); } } context = &(user_list->contexts[user_list->num_contexts - 1]); dlt_set_id(context->apid, apid); dlt_set_id(context->ctid, ctid); context->context_description = NULL; application->num_contexts++; new_context = 1; } /* Set context description */ if (context->context_description) { free(context->context_description); context->context_description = NULL; } if (description != NULL) { context->context_description = malloc(strlen(description) + 1); if (context->context_description) { memcpy(context->context_description, description, strlen(description) + 1); } } if ((strncmp(daemon->ecuid, ecu, DLT_ID_SIZE) == 0) && (daemon->force_ll_ts)) { if (log_level > daemon->default_log_level) log_level = daemon->default_log_level; if (trace_status > daemon->default_trace_status) trace_status = daemon->default_trace_status; dlt_vlog(LOG_NOTICE, "Adapting ll_ts for context: %.4s:%.4s with %i %i\n", apid, ctid, log_level, trace_status); } /* Store log level and trace status, * if this is a new context, or * if this is an old context and the runtime cfg was not loaded */ if ((new_context == 1) || ((new_context == 0) && (daemon->runtime_context_cfg_loaded == 0))) { context->log_level = log_level; context->trace_status = trace_status; } context->log_level_pos = log_level_pos; context->user_handle = user_handle; /* In case a context is loaded from runtime config file, * the user_handle is 0 and we mark that context as predefined. */ if (context->user_handle == 0) context->predefined = true; else context->predefined = false; /* Sort */ if (new_context) { qsort(user_list->contexts, (size_t) user_list->num_contexts, sizeof(DltDaemonContext), dlt_daemon_cmp_apid_ctid); /* Find new position of context with apid, ctid */ context = dlt_daemon_context_find(daemon, apid, ctid, ecu, verbose); } return context; } int dlt_daemon_context_del(DltDaemon *daemon, DltDaemonContext *context, char *ecu, int verbose) { int pos; DltDaemonApplication *application; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (context == NULL) || (ecu == NULL)) return -1; user_list = dlt_daemon_find_users_list(daemon, ecu, verbose); if (user_list == NULL) return -1; if (user_list->num_contexts > 0) { application = dlt_daemon_application_find(daemon, context->apid, ecu, verbose); /* Free description of context to be deleted */ if (context->context_description) { free(context->context_description); context->context_description = NULL; } pos = (int) (context - (user_list->contexts)); /* move all contexts above pos to pos */ memmove(&(user_list->contexts[pos]), &(user_list->contexts[pos + 1]), sizeof(DltDaemonContext) * ((user_list->num_contexts - 1) - pos)); /* Clear last context */ memset(&(user_list->contexts[user_list->num_contexts - 1]), 0, sizeof(DltDaemonContext)); user_list->num_contexts--; /* Check if application [apid] is available */ if (application != NULL) application->num_contexts--; } return 0; } DltDaemonContext *dlt_daemon_context_find(DltDaemon *daemon, char *apid, char *ctid, char *ecu, int verbose) { DltDaemonContext context; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (apid == NULL) || (apid[0] == '\0') || (ctid == NULL) || (ctid[0] == '\0') || (ecu == NULL)) return (DltDaemonContext *)NULL; user_list = dlt_daemon_find_users_list(daemon, ecu, verbose); if ((user_list == NULL) || (user_list->num_contexts == 0)) return (DltDaemonContext *)NULL; /* Check, if apid is smaller than smallest apid or greater than greatest apid */ if ((memcmp(apid, user_list->contexts[0].apid, DLT_ID_SIZE) < 0) || (memcmp(apid, user_list->contexts[user_list->num_contexts - 1].apid, DLT_ID_SIZE) > 0)) return (DltDaemonContext *)NULL; dlt_set_id(context.apid, apid); dlt_set_id(context.ctid, ctid); return (DltDaemonContext *)bsearch(&context, user_list->contexts, (size_t) user_list->num_contexts, sizeof(DltDaemonContext), dlt_daemon_cmp_apid_ctid); } int dlt_daemon_contexts_invalidate_fd(DltDaemon *daemon, char *ecu, int fd, int verbose) { int i; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (ecu == NULL)) return -1; user_list = dlt_daemon_find_users_list(daemon, ecu, verbose); if (user_list != NULL) { for (i = 0; i < user_list->num_contexts; i++) if (user_list->contexts[i].user_handle == fd) user_list->contexts[i].user_handle = DLT_FD_INIT; return 0; } return -1; } int dlt_daemon_contexts_clear(DltDaemon *daemon, char *ecu, int verbose) { int i; DltDaemonRegisteredUsers *users = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (ecu == NULL)) return DLT_RETURN_WRONG_PARAMETER; users = dlt_daemon_find_users_list(daemon, ecu, verbose); if (users == NULL) return DLT_RETURN_ERROR; for (i = 0; i < users->num_contexts; i++) if (users->contexts[i].context_description != NULL) { free(users->contexts[i].context_description); users->contexts[i].context_description = NULL; } if (users->contexts) { free(users->contexts); users->contexts = NULL; } for (i = 0; i < users->num_applications; i++) users->applications[i].num_contexts = 0; users->num_contexts = 0; return 0; } int dlt_daemon_contexts_load(DltDaemon *daemon, const char *filename, int verbose) { FILE *fd; ID4 apid, ctid; char buf[DLT_DAEMON_COMMON_TEXTBUFSIZE]; char *ret; char *pb; int ll, ts; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (filename == NULL) || (filename[0] == '\0')) return -1; fd = fopen(filename, "r"); if (fd == NULL) { dlt_vlog(LOG_WARNING, "DLT runtime-context load, cannot open file %s: %s\n", filename, strerror(errno)); return -1; } while (!feof(fd)) { /* Clear buf */ memset(buf, 0, sizeof(buf)); /* Get line */ ret = fgets(buf, sizeof(buf), fd); if (NULL == ret) { /* fgets always returns null pointer if the last byte of the file is a new line. * We need to check here if there was an error or was it feof.*/ if (ferror(fd)) { dlt_vlog(LOG_WARNING, "%s fgets(buf,sizeof(buf),fd) returned NULL. %s\n", __func__, strerror(errno)); fclose(fd); return -1; } else if (feof(fd)) { fclose(fd); return 0; } else { dlt_vlog(LOG_WARNING, "%s fgets(buf,sizeof(buf),fd) returned NULL. Unknown error.\n", __func__); fclose(fd); return -1; } } if (strcmp(buf, "") != 0) { /* Split line */ pb = strtok(buf, ":"); if (pb != NULL) { dlt_set_id(apid, pb); pb = strtok(NULL, ":"); if (pb != NULL) { dlt_set_id(ctid, pb); pb = strtok(NULL, ":"); if (pb != NULL) { sscanf(pb, "%d", &ll); pb = strtok(NULL, ":"); if (pb != NULL) { sscanf(pb, "%d", &ts); pb = strtok(NULL, ":"); if (pb != NULL) { /* pb contains now the description */ /* log_level_pos, and user_handle are unknown at loading time */ if (dlt_daemon_context_add(daemon, apid, ctid, (int8_t)ll, (int8_t)ts, 0, 0, pb, daemon->ecuid, verbose) == NULL) { dlt_vlog(LOG_WARNING, "%s dlt_daemon_context_add failed\n", __func__); fclose(fd); return -1; } } } } } } } } fclose(fd); return 0; } int dlt_daemon_contexts_save(DltDaemon *daemon, const char *filename, int verbose) { FILE *fd; int i; char apid[DLT_ID_SIZE + 1], ctid[DLT_ID_SIZE + 1]; /* DLT_ID_SIZE+1, because the 0-termination is required here */ DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (filename == NULL) || (filename[0] == '\0')) return -1; user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list == NULL) return -1; memset(apid, 0, sizeof(apid)); memset(ctid, 0, sizeof(ctid)); if ((user_list->contexts) && (user_list->num_contexts > 0)) { fd = fopen(filename, "w"); if (fd != NULL) { for (i = 0; i < user_list->num_contexts; i++) { dlt_set_id(apid, user_list->contexts[i].apid); dlt_set_id(ctid, user_list->contexts[i].ctid); if ((user_list->contexts[i].context_description) && (user_list->contexts[i].context_description[0] != '\0')) fprintf(fd, "%s:%s:%d:%d:%s:\n", apid, ctid, (int)(user_list->contexts[i].log_level), (int)(user_list->contexts[i].trace_status), user_list->contexts[i].context_description); else fprintf(fd, "%s:%s:%d:%d::\n", apid, ctid, (int)(user_list->contexts[i].log_level), (int)(user_list->contexts[i].trace_status)); } fclose(fd); } else { dlt_vlog(LOG_ERR, "%s: Cannot open %s. No context information stored\n", __func__, filename); } } return 0; } int dlt_daemon_configuration_save(DltDaemon *daemon, const char *filename, int verbose) { FILE *fd; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (filename == NULL) || (filename[0] == '\0')) return -1; fd = fopen(filename, "w"); if (fd != NULL) { fprintf(fd, "# 0 = off, 1 = external, 2 = internal, 3 = both\n"); fprintf(fd, "LoggingMode = %d\n", daemon->mode); fclose(fd); } return 0; } int dlt_daemon_configuration_load(DltDaemon *daemon, const char *filename, int verbose) { if ((daemon == NULL) || (filename == NULL)) return -1; FILE *pFile; char line[1024]; char token[1024]; char value[1024]; char *pch; PRINT_FUNCTION_VERBOSE(verbose); pFile = fopen (filename, "r"); if (pFile != NULL) { while (1) { /* fetch line from configuration file */ if (fgets (line, 1024, pFile) != NULL) { pch = strtok (line, " =\r\n"); token[0] = 0; value[0] = 0; while (pch != NULL) { if (strcmp(pch, "#") == 0) break; if (token[0] == 0) { strncpy(token, pch, sizeof(token) - 1); token[sizeof(token) - 1] = 0; } else { strncpy(value, pch, sizeof(value) - 1); value[sizeof(value) - 1] = 0; break; } pch = strtok (NULL, " =\r\n"); } if (token[0] && value[0]) { /* parse arguments here */ if (strcmp(token, "LoggingMode") == 0) { daemon->mode = atoi(value); dlt_vlog(LOG_INFO, "Runtime Option: %s=%d\n", token, daemon->mode); } else { dlt_vlog(LOG_WARNING, "Unknown option: %s=%s\n", token, value); } } } else { break; } } fclose (pFile); } else { dlt_vlog(LOG_INFO, "Cannot open configuration file: %s\n", filename); } return 0; } int dlt_daemon_user_send_log_level(DltDaemon *daemon, DltDaemonContext *context, int verbose) { DltUserHeader userheader; DltUserControlMsgLogLevel usercontext; DltReturnValue ret; DltDaemonApplication *app; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (context == NULL)) { dlt_vlog(LOG_ERR, "NULL parameter in %s", __func__); return -1; } if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_LOG_LEVEL) < DLT_RETURN_OK) { dlt_vlog(LOG_ERR, "Failed to set userheader in %s", __func__); return -1; } if ((context->storage_log_level != DLT_LOG_DEFAULT) && (daemon->maintain_logstorage_loglevel != DLT_MAINTAIN_LOGSTORAGE_LOGLEVEL_OFF)) usercontext.log_level = (uint8_t) (context->log_level > context->storage_log_level ? context->log_level : context->storage_log_level); else /* Storage log level is not updated (is DEFAULT) then no device is yet connected so ignore */ usercontext.log_level = (uint8_t) ((context->log_level == DLT_LOG_DEFAULT) ? daemon->default_log_level : context->log_level); usercontext.trace_status = (uint8_t) ((context->trace_status == DLT_TRACE_STATUS_DEFAULT) ? daemon->default_trace_status : context->trace_status); usercontext.log_level_pos = context->log_level_pos; dlt_vlog(LOG_NOTICE, "Send log-level to context: %.4s:%.4s [%i -> %i] [%i -> %i]\n", context->apid, context->ctid, context->log_level, usercontext.log_level, context->trace_status, usercontext.trace_status); /* log to FIFO */ errno = 0; ret = dlt_user_log_out2(context->user_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgLogLevel)); if (ret < DLT_RETURN_OK) { dlt_vlog(LOG_ERR, "Failed to send data to application in %s: %s", __func__, errno != 0 ? strerror(errno) : "Unknown error"); if (errno == EPIPE) { app = dlt_daemon_application_find(daemon, context->apid, daemon->ecuid, verbose); if (app != NULL) dlt_daemon_application_reset_user_handle(daemon, app, verbose); } } return (ret == DLT_RETURN_OK) ? DLT_RETURN_OK : DLT_RETURN_ERROR; } int dlt_daemon_user_send_log_state(DltDaemon *daemon, DltDaemonApplication *app, int verbose) { DltUserHeader userheader; DltUserControlMsgLogState logstate; DltReturnValue ret; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (app == NULL)) return -1; if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_LOG_STATE) < DLT_RETURN_OK) return -1; logstate.log_state = daemon->connectionState; /* log to FIFO */ ret = dlt_user_log_out2(app->user_handle, &(userheader), sizeof(DltUserHeader), &(logstate), sizeof(DltUserControlMsgLogState)); if (ret < DLT_RETURN_OK) { if (errno == EPIPE) dlt_daemon_application_reset_user_handle(daemon, app, verbose); } return (ret == DLT_RETURN_OK) ? DLT_RETURN_OK : DLT_RETURN_ERROR; } void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon, const char *filename, const char *filename1, int InitialContextLogLevel, int InitialContextTraceStatus, int InitialEnforceLlTsStatus, int verbose) { FILE *fd; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (filename == NULL) || (filename1 == NULL)) { dlt_log(LOG_WARNING, "Wrong parameter: Null pointer\n"); return; } if ((filename[0] == '\0') || (filename1[0] == '\0')) { dlt_log(LOG_WARNING, "Wrong parameter: Empty string\n"); return; } /* Check for runtime cfg file and delete it, if available */ fd = fopen(filename, "r"); if (fd != NULL) { /* Close and delete file */ fclose(fd); unlink(filename); } fd = fopen(filename1, "r"); if (fd != NULL) { /* Close and delete file */ fclose(fd); unlink(filename1); } daemon->default_log_level = (int8_t) InitialContextLogLevel; daemon->default_trace_status = (int8_t) InitialContextTraceStatus; daemon->force_ll_ts = (int8_t) InitialEnforceLlTsStatus; /* Reset all other things (log level, trace status, etc. * to default values */ /* Inform user libraries about changed default log level/trace status */ dlt_daemon_user_send_default_update(daemon, verbose); } void dlt_daemon_user_send_default_update(DltDaemon *daemon, int verbose) { int32_t count; DltDaemonContext *context; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == NULL) { dlt_log(LOG_WARNING, "Wrong parameter: Null pointer\n"); return; } user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list == NULL) return; for (count = 0; count < user_list->num_contexts; count++) { context = &(user_list->contexts[count]); if (context != NULL) { if ((context->log_level == DLT_LOG_DEFAULT) || (context->trace_status == DLT_TRACE_STATUS_DEFAULT)) { if (context->user_handle >= DLT_FD_MINIMUM) if (dlt_daemon_user_send_log_level(daemon, context, verbose) == -1) dlt_vlog(LOG_WARNING, "Cannot update default of %.4s:%.4s\n", context->apid, context->ctid); } } } } void dlt_daemon_user_send_all_log_level_update(DltDaemon *daemon, int8_t log_level, int verbose) { int32_t count = 0; DltDaemonContext *context = NULL; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == NULL) return; user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list == NULL) return; for (count = 0; count < user_list->num_contexts; count++) { context = &(user_list->contexts[count]); if (context) { if (context->user_handle >= DLT_FD_MINIMUM) { context->log_level = log_level; if (dlt_daemon_user_send_log_level(daemon, context, verbose) == -1) dlt_vlog(LOG_WARNING, "Cannot send log level %.4s:%.4s -> %i\n", context->apid, context->ctid, context->log_level); } } } } void dlt_daemon_user_send_all_trace_status_update(DltDaemon *daemon, int8_t trace_status, int verbose) { int32_t count = 0; DltDaemonContext *context = NULL; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == NULL) return; user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list == NULL) return; dlt_vlog(LOG_NOTICE, "All trace status is updated -> %i\n", trace_status); for (count = 0; count < user_list->num_contexts; count++) { context = &(user_list->contexts[count]); if (context) { if (context->user_handle >= DLT_FD_MINIMUM) { context->trace_status = trace_status; if (dlt_daemon_user_send_log_level(daemon, context, verbose) == -1) dlt_vlog(LOG_WARNING, "Cannot send trace status %.4s:%.4s -> %i\n", context->apid, context->ctid, context->trace_status); } } } } void dlt_daemon_user_send_all_log_state(DltDaemon *daemon, int verbose) { int32_t count; DltDaemonApplication *app; DltDaemonRegisteredUsers *user_list = NULL; PRINT_FUNCTION_VERBOSE(verbose); if (daemon == NULL) { dlt_log(LOG_WARNING, "Wrong parameter: Null pointer\n"); return; } user_list = dlt_daemon_find_users_list(daemon, daemon->ecuid, verbose); if (user_list == NULL) return; for (count = 0; count < user_list->num_applications; count++) { app = &(user_list->applications[count]); if (app != NULL) { if (app->user_handle >= DLT_FD_MINIMUM) if (dlt_daemon_user_send_log_state(daemon, app, verbose) == -1) dlt_vlog(LOG_WARNING, "Cannot send log state to Apid: %.4s, PID: %d\n", app->apid, app->pid); } } } void dlt_daemon_change_state(DltDaemon *daemon, DltDaemonState newState) { switch (newState) { case DLT_DAEMON_STATE_INIT: dlt_log(LOG_INFO, "Switched to init state.\n"); daemon->state = DLT_DAEMON_STATE_INIT; break; case DLT_DAEMON_STATE_BUFFER: dlt_log(LOG_INFO, "Switched to buffer state for socket connections.\n"); daemon->state = DLT_DAEMON_STATE_BUFFER; break; case DLT_DAEMON_STATE_BUFFER_FULL: dlt_log(LOG_INFO, "Switched to buffer full state.\n"); daemon->state = DLT_DAEMON_STATE_BUFFER_FULL; break; case DLT_DAEMON_STATE_SEND_BUFFER: dlt_log(LOG_INFO, "Switched to send buffer state for socket connections.\n"); daemon->state = DLT_DAEMON_STATE_SEND_BUFFER; break; case DLT_DAEMON_STATE_SEND_DIRECT: dlt_log(LOG_INFO, "Switched to send direct state.\n"); daemon->state = DLT_DAEMON_STATE_SEND_DIRECT; break; } } dlt-daemon-2.18.6/src/daemon/dlt_daemon_common.h000066400000000000000000000604151377520261000215260ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_common.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_daemon_common.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 15.02.2010 initial */ #ifndef DLT_DAEMON_COMMON_H # define DLT_DAEMON_COMMON_H /** * \defgroup daemonapi DLT Daemon API * \addtogroup daemonapi \{ */ # include # include # include # include "dlt_common.h" # include "dlt_user.h" # include "dlt_offline_logstorage.h" # include "dlt_gateway_types.h" # ifdef __cplusplus extern "C" { # endif # define DLT_DAEMON_RINGBUFFER_MIN_SIZE 500000/**< Ring buffer size for storing log messages while no client is connected */ # define DLT_DAEMON_RINGBUFFER_MAX_SIZE 10000000/**< Ring buffer size for storing log messages while no client is connected */ # define DLT_DAEMON_RINGBUFFER_STEP_SIZE 500000/**< Ring buffer size for storing log messages while no client is connected */ # define DLT_DAEMON_SEND_TO_ALL -3/**< Constant value to identify the command "send to all" */ # define DLT_DAEMON_SEND_FORCE -4/**< Constant value to identify the command "send force to all" */ /* Use a semaphore or mutex from your OS to prevent concurrent access to the DLT buffer. */ #define DLT_DAEMON_SEM_LOCK() do{\ while ((sem_wait(&dlt_daemon_mutex) == -1) && (errno == EINTR)) \ continue; /* Restart if interrupted */ \ } while(0) #define DLT_DAEMON_SEM_FREE() { sem_post(&dlt_daemon_mutex); } extern sem_t dlt_daemon_mutex; /* UDPMulticart Default IP and Port */ # ifdef UDP_CONNECTION_SUPPORT # define MULTICASTIPADDRESS "225.0.0.37" # define MULTICASTIPPORT 3491 # define MULTICASTIP_MAX_SIZE 256 # define MULTICAST_CONNECTION_DISABLED 0 # define MULTICAST_CONNECTION_ENABLED 1 # endif /** * Definitions of DLT daemon logging states */ typedef enum { DLT_DAEMON_STATE_INIT = 0, /**< Initial state */ DLT_DAEMON_STATE_BUFFER = 1, /**< logging is buffered until external logger is connected or internal logging is activated */ DLT_DAEMON_STATE_BUFFER_FULL = 2, /**< then internal buffer is full, wait for connect from client */ DLT_DAEMON_STATE_SEND_BUFFER = 3, /**< external logger is connected, but buffer is still not empty or external logger queue is full */ DLT_DAEMON_STATE_SEND_DIRECT = 4 /**< External logger is connected or internal logging is active, and buffer is empty */ } DltDaemonState; /** * The parameters of a daemon application. */ typedef struct { char apid[DLT_ID_SIZE]; /**< application id */ pid_t pid; /**< process id of user application */ int user_handle; /**< connection handle for connection to user application */ bool owns_user_handle; /**< user_handle should be closed when reset */ char *application_description; /**< context description */ int num_contexts; /**< number of contexts for this application */ } DltDaemonApplication; /** * The parameters of a daemon context. */ typedef struct { char apid[DLT_ID_SIZE]; /**< application id */ char ctid[DLT_ID_SIZE]; /**< context id */ int8_t log_level; /**< the current log level of the context */ int8_t trace_status; /**< the current trace status of the context */ int log_level_pos; /**< offset of context in context field on user application */ int user_handle; /**< connection handle for connection to user application */ char *context_description; /**< context description */ int8_t storage_log_level; /**< log level set for offline logstorage */ bool predefined; /**< set to true if this context is predefined by runtime configuration file */ } DltDaemonContext; /* * The parameter of registered users list */ typedef struct { DltDaemonApplication *applications; /**< Pointer to applications */ int num_applications; /**< Number of available application */ DltDaemonContext *contexts; /**< Pointer to contexts */ int num_contexts; /**< Total number of all contexts in all applications in this list */ char ecu[DLT_ID_SIZE]; /**< ECU ID of where contexts are registered */ } DltDaemonRegisteredUsers; /** * The parameters of a daemon. */ typedef struct { DltDaemonRegisteredUsers *user_list; /**< registered users per ECU */ int num_user_lists; /** < number of context lists */ int8_t default_log_level; /**< Default log level (of daemon) */ int8_t default_trace_status; /**< Default trace status (of daemon) */ int8_t force_ll_ts; /**< Enforce ll and ts to not exceed default_log_level, default_trace_status */ unsigned int overflow_counter; /**< counts the number of lost messages. */ int runtime_context_cfg_loaded; /**< Set to one, if runtime context configuration has been loaded, zero otherwise */ char ecuid[DLT_ID_SIZE]; /**< ECU ID of daemon */ int sendserialheader; /**< 1: send serial header; 0 don't send serial header */ int timingpackets; /**< 1: send continous timing packets; 0 don't send continous timing packets */ DltBuffer client_ringbuffer; /**< Ring-buffer for storing received logs while no client connection is available */ char runtime_application_cfg[PATH_MAX + 1]; /**< Path and filename of persistent application configuration. Set to path max, as it specifies a full path*/ char runtime_context_cfg[PATH_MAX + 1]; /**< Path and filename of persistent context configuration */ char runtime_configuration[PATH_MAX + 1]; /**< Path and filename of persistent configuration */ DltUserLogMode mode; /**< Mode used for tracing: off, external, internal, both */ char connectionState; /**< state for tracing: 0 = no client connected, 1 = client connected */ char *ECUVersionString; /**< Version string to send to client. Loaded from a file at startup. May be null. */ DltDaemonState state; /**< the current logging state of dlt daemon. */ DltLogStorage *storage_handle; int maintain_logstorage_loglevel; /* Permission to maintain the logstorage loglevel*/ } DltDaemon; /** * Initialise the dlt daemon structure * This function must be called before using further dlt daemon structure * @param daemon pointer to dlt daemon structure * @param RingbufferMinSize ringbuffer size * @param RingbufferMaxSize ringbuffer size * @param RingbufferStepSize ringbuffer size * @param runtime_directory Directory of persistent configuration * @param InitialContextLogLevel loglevel to be sent to context when those register with loglevel default, read from dlt.conf * @param InitialContextTraceStatus tracestatus to be sent to context when those register with tracestatus default, read from dlt.conf * @param ForceLLTS force default log-level * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_init(DltDaemon *daemon, unsigned long RingbufferMinSize, unsigned long RingbufferMaxSize, unsigned long RingbufferStepSize, const char *runtime_directory, int InitialContextLogLevel, int InitialContextTraceStatus, int ForceLLTS, int verbose); /** * De-Initialise the dlt daemon structure * @param daemon pointer to dlt daemon structure * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_free(DltDaemon *daemon, int verbose); /** * Initialize data structures to store information about applications running on same * or passive node. * @param daemon pointer to dlt daemon structure * @param gateway pointer to dlt gateway structure * @param gateway_mode mode of dlt daemon, specified in dlt.conf * @param verbose if set to true verbose information is printed out * @return DLT_RETURN_OK on success, DLT_RETURN_ERROR otherwise */ int dlt_daemon_init_user_information(DltDaemon *daemon, DltGateway *gateway, int gateway_mode, int verbose); /** * Find information about application/contexts for a specific ECU * @param daemon pointer to dlt daemon structure * @param ecu pointer to node name * @param verbose if set to true verbose information is printed out * @return pointer to user list, NULL otherwise */ DltDaemonRegisteredUsers *dlt_daemon_find_users_list(DltDaemon *daemon, char *ecu, int verbose); /** * Init the user saved configurations to daemon. * Since the order of loading runtime config could be different, * this function won't be the place to do that. * This is just for preparation of real load later. * @param daemon pointer to dlt daemon structure * @param runtime_directory directory path * @param verbose if set to true verbose information is printed out * @return DLT_RETURN_OK on success, DLT_RETURN_ERROR otherwise */ int dlt_daemon_init_runtime_configuration(DltDaemon *daemon, const char *runtime_directory, int verbose); /** * Add (new) application to internal application management * @param daemon pointer to dlt daemon structure * @param apid pointer to application id * @param pid process id of user application * @param description description of application * @param fd file descriptor of application * @param ecu pointer to ecu id of node to add applications * @param verbose if set to true verbose information is printed out. * @return Pointer to added context, null pointer on error */ DltDaemonApplication *dlt_daemon_application_add(DltDaemon *daemon, char *apid, pid_t pid, char *description, int fd, char *ecu, int verbose); /** * Delete application from internal application management * @param daemon pointer to dlt daemon structure * @param application pointer to application to be deleted * @param ecu pointer to ecu id of node to delete applications * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_application_del(DltDaemon *daemon, DltDaemonApplication *application, char *ecu, int verbose); /** * Find application with specific application id * @param daemon pointer to dlt daemon structure * @param apid pointer to application id * @param ecu pointer to ecu id of node to clear applications * @param verbose if set to true verbose information is printed out. * @return Pointer to application, null pointer on error or not found */ DltDaemonApplication *dlt_daemon_application_find(DltDaemon *daemon, char *apid, char *ecu, int verbose); /** * Load applications from file to internal context management * @param daemon pointer to dlt daemon structure * @param filename name of file to be used for loading * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_applications_load(DltDaemon *daemon, const char *filename, int verbose); /** * Save applications from internal context management to file * @param daemon pointer to dlt daemon structure * @param filename name of file to be used for saving * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_applications_save(DltDaemon *daemon, const char *filename, int verbose); /** * Invalidate all applications fd, if fd is reused * @param daemon pointer to dlt daemon structure * @param ecu node these applications running on. * @param fd file descriptor * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_applications_invalidate_fd(DltDaemon *daemon, char *ecu, int fd, int verbose); /** * Clear all applications in internal application management of specific ecu * @param daemon pointer to dlt daemon structure * @param ecu pointer to ecu id of node to clear applications * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_applications_clear(DltDaemon *daemon, char *ecu, int verbose); /** * Add (new) context to internal context management * @param daemon pointer to dlt daemon structure * @param apid pointer to application id * @param ctid pointer to context id * @param log_level log level of context * @param trace_status trace status of context * @param log_level_pos offset of context in context field on user application * @param user_handle connection handle for connection to user application * @param description description of context * @param ecu pointer to ecu id of node to add application * @param verbose if set to true verbose information is printed out. * @return Pointer to added context, null pointer on error */ DltDaemonContext *dlt_daemon_context_add(DltDaemon *daemon, char *apid, char *ctid, int8_t log_level, int8_t trace_status, int log_level_pos, int user_handle, char *description, char *ecu, int verbose); /** * Delete context from internal context management * @param daemon pointer to dlt daemon structure * @param context pointer to context to be deleted * @param ecu pointer to ecu id of node to delete application * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_context_del(DltDaemon *daemon, DltDaemonContext *context, char *ecu, int verbose); /** * Find context with specific application id and context id * @param daemon pointer to dlt daemon structure * @param apid pointer to application id * @param ctid pointer to context id * @param ecu pointer to ecu id of node to clear applications * @param verbose if set to true verbose information is printed out. * @return Pointer to context, null pointer on error or not found */ DltDaemonContext *dlt_daemon_context_find(DltDaemon *daemon, char *apid, char *ctid, char *ecu, int verbose); /** * Invalidate all contexts fd, if fd is reused * @param daemon pointer to dlt daemon structure * @param ecu node these contexts running on. * @param fd file descriptor * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_contexts_invalidate_fd(DltDaemon *daemon, char *ecu, int fd, int verbose); /** * Clear all contexts in internal context management of specific ecu * @param daemon pointer to dlt daemon structure * @param ecu pointer to ecu id of node to clear contexts * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_contexts_clear(DltDaemon *daemon, char *ecu, int verbose); /** * Load contexts from file to internal context management * @param daemon pointer to dlt daemon structure * @param filename name of file to be used for loading * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_contexts_load(DltDaemon *daemon, const char *filename, int verbose); /** * Save contexts from internal context management to file * @param daemon pointer to dlt daemon structure * @param filename name of file to be used for saving * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_contexts_save(DltDaemon *daemon, const char *filename, int verbose); /** * Load persistant configuration * @param daemon pointer to dlt daemon structure * @param filename name of file to be used for loading * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_configuration_load(DltDaemon *daemon, const char *filename, int verbose); /** * Save configuration persistantly * @param daemon pointer to dlt daemon structure * @param filename name of file to be used for saving * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_configuration_save(DltDaemon *daemon, const char *filename, int verbose); /** * Send user message DLT_USER_MESSAGE_LOG_LEVEL to user application * @param daemon pointer to dlt daemon structure * @param context pointer to context for response * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_user_send_log_level(DltDaemon *daemon, DltDaemonContext *context, int verbose); /** * Send user message DLT_USER_MESSAGE_LOG_STATE to user application * @param daemon pointer to dlt daemon structure * @param app pointer to application for response * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ int dlt_daemon_user_send_log_state(DltDaemon *daemon, DltDaemonApplication *app, int verbose); /** * Send user messages to all user applications using default context, or trace status * to update those values * @param daemon pointer to dlt daemon structure * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_user_send_default_update(DltDaemon *daemon, int verbose); /** * Send user messages to all user applications context to update with the new log level * @param daemon pointer to dlt daemon structure * @param log_level new log level to be set * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_user_send_all_log_level_update(DltDaemon *daemon, int8_t log_level, int verbose); /** * Send user messages to all user applications context to update with the new trace status * @param daemon pointer to dlt daemon structure * @param trace_status new trace status to be set * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_user_send_all_trace_status_update(DltDaemon *daemon, int8_t trace_status, int verbose); /** * Send user messages to all user applications the log status * everytime the client is connected or disconnected. * @param daemon pointer to dlt daemon structure * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_user_send_all_log_state(DltDaemon *daemon, int verbose); /** * Process reset to factory default control message * @param daemon pointer to dlt daemon structure * @param filename name of file containing the runtime defaults for applications * @param filename1 name of file containing the runtime defaults for contexts * @param InitialContextLogLevel loglevel to be sent to context when those register with loglevel default, read from dlt.conf * @param InitialContextTraceStatus tracestatus to be sent to context when those register with tracestatus default, read from dlt.conf * @param InitialEnforceLlTsStatus force default log-level * @param verbose if set to true verbose information is printed out. */ void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon, const char *filename, const char *filename1, int InitialContextLogLevel, int InitialContextTraceStatus, int InitialEnforceLlTsStatus, int verbose); /** * Change the logging state of dlt daemon * @param daemon pointer to dlt daemon structure * @param newState the requested new state */ void dlt_daemon_change_state(DltDaemon *daemon, DltDaemonState newState); # ifdef __cplusplus } # endif /** \} */ #endif /* DLT_DAEMON_COMMON_H */ dlt-daemon-2.18.6/src/daemon/dlt_daemon_common_cfg.h000066400000000000000000000130531377520261000223410ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_common_cfg.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_daemon_common_cfg.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ #ifndef DLT_DAEMON_COMMON_CFG_H #define DLT_DAEMON_COMMON_CFG_H /*************/ /* Changable */ /*************/ /* Default Path for runtime configuration */ #define DLT_RUNTIME_DEFAULT_DIRECTORY "/tmp" /* Path and filename for runtime configuration (applications) */ #define DLT_RUNTIME_APPLICATION_CFG "/dlt-runtime-application.cfg" /* Path and filename for runtime configuration (contexts) */ #define DLT_RUNTIME_CONTEXT_CFG "/dlt-runtime-context.cfg" /* Path and filename for runtime configuration */ #define DLT_RUNTIME_CONFIGURATION "/dlt-runtime.cfg" /* Default Path for control socket */ #define DLT_DAEMON_DEFAULT_CTRL_SOCK_PATH DLT_RUNTIME_DEFAULT_DIRECTORY \ "/dlt-ctrl.sock" #ifdef DLT_DAEMON_USE_UNIX_SOCKET_IPC # define DLT_DAEMON_DEFAULT_APP_SOCK_PATH DLT_RUNTIME_DEFAULT_DIRECTORY \ "/dlt-app.sock" #endif /* Size of text buffer */ #define DLT_DAEMON_COMMON_TEXTBUFSIZE 255 /* Application ID used when the dlt daemon creates a control message */ #define DLT_DAEMON_CTRL_APID "DA1" /* Context ID used when the dlt daemon creates a control message */ #define DLT_DAEMON_CTRL_CTID "DC1" /* Number of entries to be allocated at one in application table, * when no more entries are available */ #define DLT_DAEMON_APPL_ALLOC_SIZE 500 /* Number of entries to be allocated at one in context table, * when no more entries are available */ #define DLT_DAEMON_CONTEXT_ALLOC_SIZE 1000 /* Debug get log info function, * set to 1 to enable, 0 to disable debugging */ #define DLT_DEBUG_GETLOGINFO 0 /************************/ /* Don't change please! */ /************************/ /* Minimum ID for an injection message */ #define DLT_DAEMON_INJECTION_MIN 0xFFF /* Maximum ID for an injection message */ #define DLT_DAEMON_INJECTION_MAX 0xFFFFFFFF /* Remote interface identifier */ #define DLT_DAEMON_REMO_STRING "remo" #endif /* DLT_DAEMON_COMMON_CFG_H */ dlt-daemon-2.18.6/src/daemon/dlt_daemon_connection.c000066400000000000000000000316501377520261000223670ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Frederic Berat * * \copyright Copyright Š 2015 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_connection.c */ #include #include #include #include #include #include #include #include #include #include "dlt_daemon_connection_types.h" #include "dlt_daemon_connection.h" #include "dlt_daemon_event_handler_types.h" #include "dlt_daemon_event_handler.h" #include "dlt-daemon.h" #include "dlt-daemon_cfg.h" #include "dlt_daemon_common.h" #include "dlt_common.h" #include "dlt_gateway.h" #include "dlt_daemon_socket.h" static DltConnectionId connectionId; extern char *app_recv_buffer; /** @brief Generic sending function. * * We manage different type of connection which have similar send/write * functions. We can then abstract the data transfer using this function, * moreover as we often transfer data to different kind of connection * within the same loop. * * @param conn The connection structure. * @param msg The message buffer to be sent * @param msg_size The length of the message to be sent * * @return DLT_DAEMON_ERROR_OK on success, DLT_DAEMON_ERROR_SEND_FAILED * on send failure, DLT_DAEMON_ERROR_UNKNOWN otherwise. * errno is appropriately set. */ DLT_STATIC int dlt_connection_send(DltConnection *conn, void *msg, size_t msg_size) { DltConnectionType type = DLT_CONNECTION_TYPE_MAX; int ret = 0; if ((conn != NULL) && (conn->receiver != NULL)) type = conn->type; switch (type) { case DLT_CONNECTION_CLIENT_MSG_SERIAL: if (write(conn->receiver->fd, msg, msg_size) > 0) return DLT_DAEMON_ERROR_OK; return DLT_DAEMON_ERROR_UNKNOWN; case DLT_CONNECTION_CLIENT_MSG_TCP: ret = dlt_daemon_socket_sendreliable(conn->receiver->fd, msg, (int) msg_size); return ret; default: return DLT_DAEMON_ERROR_UNKNOWN; } } /** @brief Send up to two messages through a connection. * * We often need to send 2 messages through a specific connection, plus * the serial header. This function groups these different calls. * * @param con The connection to send the messages through. * @param data1 The first message to be sent. * @param size1 The size of the first message. * @param data2 The second message to be send. * @param size2 The second message size. * @param sendserialheader Whether we need or not to send the serial header. * * @return DLT_DAEMON_ERROR_OK on success, -1 otherwise. errno is properly set. */ int dlt_connection_send_multiple(DltConnection *con, void *data1, int size1, void *data2, int size2, int sendserialheader) { int ret = 0; if (con == NULL) return DLT_DAEMON_ERROR_UNKNOWN; if (sendserialheader) ret = dlt_connection_send(con, (void *)dltSerialHeader, sizeof(dltSerialHeader)); if ((data1 != NULL) && (ret == DLT_RETURN_OK)) ret = dlt_connection_send(con, data1, (size_t) size1); if ((data2 != NULL) && (ret == DLT_RETURN_OK)) ret = dlt_connection_send(con, data2, (size_t) size2); return ret; } /** @brief Get the next connection filtered with a type mask. * * In some cases we need the next connection available of a specific type or * specific different types. This function returns the next available connection * that is of one of the types included in the mask. The current connection can * be returned. * * @param current The current connection pointer. * @param type_mask A bit mask representing the connection types to be filtered. * * @return The next available connection of the considered types or NULL. */ DltConnection *dlt_connection_get_next(DltConnection *current, int type_mask) { while (current && !((1 << current->type) & type_mask)) current = current->next; return current; } DLT_STATIC void dlt_connection_destroy_receiver(DltConnection *con) { if (!con) return; switch (con->type) { case DLT_CONNECTION_GATEWAY: /* We rely on the gateway for clean-up */ break; case DLT_CONNECTION_APP_MSG: dlt_receiver_free_global_buffer(con->receiver); free(con->receiver); con->receiver = NULL; break; default: (void)dlt_receiver_free(con->receiver); free(con->receiver); con->receiver = NULL; break; } } /** @brief Get the receiver structure associated to a connection. * * The receiver structure is sometimes needed while handling the event. * This behavior is mainly due to the fact that it's not intended to modify * the whole design of the daemon while implementing the new event handling. * Based on the connection type provided, this function returns the pointer * to the DltReceiver structure corresponding. * * @param daemon_local Structure where to take the DltReceiver pointer from. * @param type Type of the connection. * @param fd File descriptor * * @return DltReceiver structure or NULL if none corresponds to the type. */ DLT_STATIC DltReceiver *dlt_connection_get_receiver(DltDaemonLocal *daemon_local, DltConnectionType type, int fd) { DltReceiver *ret = NULL; DltReceiverType receiver_type = DLT_RECEIVE_FD; struct stat statbuf; switch (type) { case DLT_CONNECTION_CONTROL_CONNECT: /* FALL THROUGH */ case DLT_CONNECTION_CONTROL_MSG: /* FALL THROUGH */ case DLT_CONNECTION_CLIENT_CONNECT: /* FALL THROUGH */ case DLT_CONNECTION_CLIENT_MSG_TCP: ret = calloc(1, sizeof(DltReceiver)); if (ret) dlt_receiver_init(ret, fd, DLT_RECEIVE_SOCKET, DLT_DAEMON_RCVBUFSIZESOCK); break; case DLT_CONNECTION_CLIENT_MSG_SERIAL: ret = calloc(1, sizeof(DltReceiver)); if (ret) dlt_receiver_init(ret, fd, DLT_RECEIVE_FD, DLT_DAEMON_RCVBUFSIZESERIAL); break; case DLT_CONNECTION_APP_MSG: ret = calloc(1, sizeof(DltReceiver)); receiver_type = DLT_RECEIVE_FD; if (fstat(fd, &statbuf) == 0) { if (S_ISSOCK(statbuf.st_mode)) receiver_type = DLT_RECEIVE_SOCKET; } else { dlt_vlog(LOG_WARNING, "Failed to determine receive type for DLT_CONNECTION_APP_MSG, using \"FD\"\n"); } if (ret) dlt_receiver_init_global_buffer(ret, fd, receiver_type, &app_recv_buffer); break; #if defined DLT_DAEMON_USE_UNIX_SOCKET_IPC || defined DLT_DAEMON_VSOCK_IPC_ENABLE case DLT_CONNECTION_APP_CONNECT: /* FALL THROUGH */ #endif case DLT_CONNECTION_ONE_S_TIMER: /* FALL THROUGH */ case DLT_CONNECTION_SIXTY_S_TIMER: #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE /* FALL THROUGH */ case DLT_CONNECTION_SYSTEMD_TIMER: #endif /* FALL THROUGH */ case DLT_CONNECTION_GATEWAY_TIMER: ret = calloc(1, sizeof(DltReceiver)); if (ret) dlt_receiver_init(ret, fd, DLT_RECEIVE_FD, DLT_DAEMON_RCVBUFSIZE); break; case DLT_CONNECTION_GATEWAY: /* We rely on the gateway for init */ ret = dlt_gateway_get_connection_receiver(&daemon_local->pGateway, fd); break; default: ret = NULL; } return ret; } /** @brief Get the callback from a specific connection. * * The callback retrieved that way is used to handle event for this connection. * It as been chosen to proceed that way instead of having the callback directly * in the structure in order to have some way to check that the structure is * still valid, or at least gracefully handle errors instead of crashing. * * @param con The connection to retrieve the callback from. * * @return Function pointer or NULL. */ void *dlt_connection_get_callback(DltConnection *con) { void *ret = NULL; DltConnectionType type = DLT_CONNECTION_TYPE_MAX; if (con) type = con->type; switch (type) { case DLT_CONNECTION_CLIENT_CONNECT: ret = dlt_daemon_process_client_connect; break; case DLT_CONNECTION_CLIENT_MSG_TCP: ret = dlt_daemon_process_client_messages; break; case DLT_CONNECTION_CLIENT_MSG_SERIAL: ret = dlt_daemon_process_client_messages_serial; break; #if defined DLT_DAEMON_USE_UNIX_SOCKET_IPC || defined DLT_DAEMON_VSOCK_IPC_ENABLE case DLT_CONNECTION_APP_CONNECT: ret = dlt_daemon_process_app_connect; break; #endif case DLT_CONNECTION_APP_MSG: ret = dlt_daemon_process_user_messages; break; case DLT_CONNECTION_ONE_S_TIMER: ret = dlt_daemon_process_one_s_timer; break; case DLT_CONNECTION_SIXTY_S_TIMER: ret = dlt_daemon_process_sixty_s_timer; break; #ifdef DLT_SYSTEMD_WATCHDOG_ENABLE case DLT_CONNECTION_SYSTEMD_TIMER: ret = dlt_daemon_process_systemd_timer; break; #endif case DLT_CONNECTION_CONTROL_CONNECT: ret = dlt_daemon_process_control_connect; break; case DLT_CONNECTION_CONTROL_MSG: ret = dlt_daemon_process_control_messages; break; case DLT_CONNECTION_GATEWAY: ret = dlt_gateway_process_passive_node_messages; break; case DLT_CONNECTION_GATEWAY_TIMER: ret = dlt_gateway_process_gateway_timer; break; default: ret = NULL; } return ret; } /** @brief Destroys a connection. * * This function closes and frees the corresponding connection. This is expected * to be called by the connection owner: the DltEventHandler. * Ownership of the connection is given during the registration to * the DltEventHandler. * * @param to_destroy Connection to be destroyed. */ void dlt_connection_destroy(DltConnection *to_destroy) { to_destroy->id = 0; close(to_destroy->receiver->fd); dlt_connection_destroy_receiver(to_destroy); free(to_destroy); } /** @brief Creates a connection and registers it to the DltEventHandler. * * The function will allocate memory for the connection, and give the pointer * to the DltEventHandler in order to register it for incoming events. * The connection is then destroyed later on, once it's not needed anymore or * it the event handler is destroyed. * * @param daemon_local Structure were some needed information is. * @param evh DltEventHandler to register the connection to. * @param fd File descriptor of the connection. * @param mask Event list bit mask. * @param type Connection type. * * @return 0 On success, -1 otherwise. */ int dlt_connection_create(DltDaemonLocal *daemon_local, DltEventHandler *evh, int fd, int mask, DltConnectionType type) { DltConnection *temp = NULL; if (fd < 0) /* Nothing to do */ return 0; if (dlt_event_handler_find_connection(evh, fd) != NULL) /* No need for the same client to be registered twice * for the same event. * TODO: If another mask can be expected, * we need it to update the poll event here. */ return 0; temp = (DltConnection *)malloc(sizeof(DltConnection)); if (temp == NULL) { dlt_log(LOG_CRIT, "Allocation of client handle failed\n"); return -1; } memset(temp, 0, sizeof(DltConnection)); temp->receiver = dlt_connection_get_receiver(daemon_local, type, fd); if (!temp->receiver) { dlt_vlog(LOG_CRIT, "Unable to get receiver from %d connection.\n", type); free(temp); return -1; } /* We are single threaded no need for protection. */ temp->id = connectionId++; if (!temp->id) /* Skipping 0 */ temp->id = connectionId++; temp->type = type; temp->status = ACTIVE; /* Now give the ownership of the newly created connection * to the event handler, by registering for events. */ return dlt_event_handler_register_connection(evh, daemon_local, temp, mask); } dlt-daemon-2.18.6/src/daemon/dlt_daemon_connection.h000066400000000000000000000036551377520261000224000ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Frederic Berat * * \copyright Copyright Š 2015 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_connection.h */ #ifndef DLT_DAEMON_CONNECTION_H #define DLT_DAEMON_CONNECTION_H #include "dlt_daemon_connection_types.h" #include "dlt_daemon_event_handler_types.h" #include "dlt-daemon.h" int dlt_connection_send_multiple(DltConnection *, void *, int, void *, int, int); DltConnection *dlt_connection_get_next(DltConnection *, int); int dlt_connection_create_remaining(DltDaemonLocal *); int dlt_connection_create(DltDaemonLocal *, DltEventHandler *, int, int, DltConnectionType); void dlt_connection_destroy(DltConnection *); void *dlt_connection_get_callback(DltConnection *); #ifdef DLT_UNIT_TESTS int dlt_connection_send(DltConnection *conn, void *msg, size_t msg_size); void dlt_connection_destroy_receiver(DltConnection *con); DltReceiver *dlt_connection_get_receiver(DltDaemonLocal *daemon_local, DltConnectionType type, int fd); #endif #endif /* DLT_DAEMON_CONNECTION_H */ dlt-daemon-2.18.6/src/daemon/dlt_daemon_connection_types.h000066400000000000000000000065221377520261000236200ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Frederic Berat * * \copyright Copyright Š 2015 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_connection_types.h */ #ifndef DLT_DAEMON_CONNECTION_TYPES_H #define DLT_DAEMON_CONNECTION_TYPES_H #include "dlt_common.h" typedef enum { UNDEFINED, /* Undefined status */ INACTIVE, /* Connection is inactive, excluded from poll handling */ ACTIVE, /* Connection is actively handled by poll */ DEACTIVATE,/* Request for deactivation of the connection */ ACTIVATE /* Request for activation of the connection */ } DltConnectionStatus; typedef enum { DLT_CONNECTION_NONE = 0, DLT_CONNECTION_CLIENT_CONNECT, DLT_CONNECTION_CLIENT_MSG_TCP, DLT_CONNECTION_CLIENT_MSG_SERIAL, DLT_CONNECTION_APP_CONNECT, DLT_CONNECTION_APP_MSG, DLT_CONNECTION_ONE_S_TIMER, DLT_CONNECTION_SIXTY_S_TIMER, DLT_CONNECTION_SYSTEMD_TIMER, DLT_CONNECTION_CONTROL_CONNECT, DLT_CONNECTION_CONTROL_MSG, DLT_CONNECTION_GATEWAY, DLT_CONNECTION_GATEWAY_TIMER, DLT_CONNECTION_TYPE_MAX } DltConnectionType; #define DLT_CON_MASK_CLIENT_CONNECT (1 << DLT_CONNECTION_CLIENT_CONNECT) #define DLT_CON_MASK_CLIENT_MSG_TCP (1 << DLT_CONNECTION_CLIENT_MSG_TCP) #define DLT_CON_MASK_CLIENT_MSG_SERIAL (1 << DLT_CONNECTION_CLIENT_MSG_SERIAL) #define DLT_CON_MASK_APP_MSG (1 << DLT_CONNECTION_APP_MSG) #define DLT_CON_MASK_APP_CONNECT (1 << DLT_CONNECTION_APP_CONNECT) #define DLT_CON_MASK_ONE_S_TIMER (1 << DLT_CONNECTION_ONE_S_TIMER) #define DLT_CON_MASK_SIXTY_S_TIMER (1 << DLT_CONNECTION_SIXTY_S_TIMER) #define DLT_CON_MASK_SYSTEMD_TIMER (1 << DLT_CONNECTION_SYSTEMD_TIMER) #define DLT_CON_MASK_CONTROL_CONNECT (1 << DLT_CONNECTION_CONTROL_CONNECT) #define DLT_CON_MASK_CONTROL_MSG (1 << DLT_CONNECTION_CONTROL_MSG) #define DLT_CON_MASK_GATEWAY (1 << DLT_CONNECTION_GATEWAY) #define DLT_CON_MASK_GATEWAY_TIMER (1 << DLT_CONNECTION_GATEWAY_TIMER) #define DLT_CON_MASK_ALL (0xffff) typedef uintptr_t DltConnectionId; /* TODO: squash the DltReceiver structure in there * and remove any other duplicates of FDs */ typedef struct DltConnection { DltConnectionId id; DltReceiver *receiver; /**< Receiver structure for this connection */ DltConnectionType type; /**< Represents what type of handle is this (like FIFO, serial, client, server) */ DltConnectionStatus status; /**< Status of connection */ struct DltConnection *next; /**< For multiple client connection using linked list */ int ev_mask; /**< Mask to set when registering the connection for events */ } DltConnection; #endif /* DLT_DAEMON_CONNECTION_TYPES_H */ dlt-daemon-2.18.6/src/daemon/dlt_daemon_event_handler.c000066400000000000000000000372521377520261000230520ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Frederic Berat * * \copyright Copyright Š 2015 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_event_handler.c */ #include #include #include #include #include #include #include "dlt_common.h" #include "dlt-daemon.h" #include "dlt-daemon_cfg.h" #include "dlt_daemon_common.h" #include "dlt_daemon_connection.h" #include "dlt_daemon_connection_types.h" #include "dlt_daemon_event_handler.h" #include "dlt_daemon_event_handler_types.h" /** * \def DLT_EV_TIMEOUT_MSEC * The maximum amount of time to wait for a poll event. * Set to 1 second to avoid unnecessary wake ups. */ #define DLT_EV_TIMEOUT_MSEC 1000 #define DLT_EV_BASE_FD 16 #define DLT_EV_MASK_REJECTED (POLLERR | POLLNVAL) /** @brief Initialize a pollfd structure * * That ensures that no event will be mis-watched. * * @param pfd The element to initialize */ static void init_poll_fd(struct pollfd *pfd) { pfd->fd = -1; pfd->events = 0; pfd->revents = 0; } /** @brief Prepare the event handler * * This will create the base poll file descriptor list. * * @param ev The event handler to prepare. * * @return 0 on success, -1 otherwise. */ int dlt_daemon_prepare_event_handling(DltEventHandler *ev) { int i = 0; if (ev == NULL) return DLT_RETURN_ERROR; ev->pfd = calloc(DLT_EV_BASE_FD, sizeof(struct pollfd)); if (ev->pfd == NULL) { dlt_log(LOG_CRIT, "Creation of poll instance failed!\n"); return -1; } for (i = 0; i < DLT_EV_BASE_FD; i++) init_poll_fd(&ev->pfd[i]); ev->nfds = 0; ev->max_nfds = DLT_EV_BASE_FD; return 0; } /** @brief Enable a file descriptor to be watched * * Adds a file descriptor to the descriptor list. If the list is to small, * increase its size. * * @param ev The event handler structure, containing the list * @param fd The file descriptor to add * @param mask The mask of event to be watched */ static void dlt_event_handler_enable_fd(DltEventHandler *ev, int fd, int mask) { if (ev->max_nfds <= ev->nfds) { int i = (int) ev->nfds; int max = (int) (2 * ev->max_nfds); struct pollfd *tmp = realloc(ev->pfd, (size_t) (max) * sizeof(*ev->pfd)); if (!tmp) { dlt_log(LOG_CRIT, "Unable to register new fd for the event handler.\n"); return; } ev->pfd = tmp; ev->max_nfds = max; for (; i < max; i++) init_poll_fd(&ev->pfd[i]); } ev->pfd[ev->nfds].fd = fd; ev->pfd[ev->nfds].events = mask; ev->nfds++; } /** @brief Disable a file descriptor for watching * * The file descriptor is removed from the descriptor list, the list is * compressed during the process. * * @param ev The event handler structure containing the list * @param fd The file descriptor to be removed */ static void dlt_event_handler_disable_fd(DltEventHandler *ev, int fd) { unsigned int i = 0; unsigned int j = 0; unsigned int nfds = (unsigned int) ev->nfds; for (; i < nfds; i++, j++) { if (ev->pfd[i].fd == fd) { init_poll_fd(&ev->pfd[i]); j++; ev->nfds--; } if (i == j) continue; /* Compressing the table */ if (i < ev->nfds) { ev->pfd[i].fd = ev->pfd[j].fd; ev->pfd[i].events = ev->pfd[j].events; ev->pfd[i].revents = ev->pfd[j].revents; } else { init_poll_fd(&ev->pfd[i]); } } } /** @brief Catch and process incoming events. * * This function waits for events on all connections. Once an event raise, * the callback for the specific connection is called, or the connection is * destroyed if a hangup occurs. * * @param daemon Structure to be passed to the callback. * @param daemon_local Structure containing needed information. * @param pEvent Event handler structure. * * @return 0 on success, -1 otherwise. May be interrupted. */ int dlt_daemon_handle_event(DltEventHandler *pEvent, DltDaemon *daemon, DltDaemonLocal *daemon_local) { int ret = 0; unsigned int i = 0; int (*callback)(DltDaemon *, DltDaemonLocal *, DltReceiver *, int) = NULL; if ((pEvent == NULL) || (daemon == NULL) || (daemon_local == NULL)) return DLT_RETURN_ERROR; ret = poll(pEvent->pfd, pEvent->nfds, DLT_EV_TIMEOUT_MSEC); if (ret <= 0) { /* We are not interested in EINTR has it comes * either from timeout or signal. */ if (errno == EINTR) ret = 0; if (ret < 0) dlt_vlog(LOG_CRIT, "poll() failed: %s\n", strerror(errno)); return ret; } for (i = 0; i < pEvent->nfds; i++) { int fd = 0; DltConnection *con = NULL; DltConnectionType type = DLT_CONNECTION_TYPE_MAX; if (pEvent->pfd[i].revents == 0) continue; con = dlt_event_handler_find_connection(pEvent, pEvent->pfd[i].fd); if (con && con->receiver) { type = con->type; fd = con->receiver->fd; } else { /* connection might have been destroyed in the meanwhile */ dlt_event_handler_disable_fd(pEvent, pEvent->pfd[i].fd); continue; } /* First of all handle error events */ if (pEvent->pfd[i].revents & DLT_EV_MASK_REJECTED) { /* An error occurred, we need to clean-up the concerned event */ if (type == DLT_CONNECTION_CLIENT_MSG_TCP) /* To transition to BUFFER state if this is final TCP client connection, * call dedicated function. this function also calls * dlt_event_handler_unregister_connection() inside the function. */ dlt_daemon_close_socket(fd, daemon, daemon_local, 0); else dlt_event_handler_unregister_connection(pEvent, daemon_local, fd); continue; } /* Get the function to be used to handle the event */ callback = dlt_connection_get_callback(con); if (!callback) { dlt_vlog(LOG_CRIT, "Unable to find function for %d handle type.\n", type); return -1; } /* From now on, callback is correct */ if (callback(daemon, daemon_local, con->receiver, daemon_local->flags.vflag) == -1) { dlt_vlog(LOG_CRIT, "Processing from %d handle type failed!\n", type); return -1; } } return 0; } /** @brief Find connection with a specific \a fd in the connection list. * * There can be only one event per \a fd. We can then find a specific connection * based on this \a fd. That allows to check if a specific \a fd has already been * registered. * * @param ev The event handler structure where the list of connection is. * @param fd The file descriptor of the connection to be found. * * @return The found connection pointer, NULL otherwise. */ DltConnection *dlt_event_handler_find_connection(DltEventHandler *ev, int fd) { DltConnection *temp = ev->connections; while (temp != NULL) { if ((temp->receiver != NULL) && (temp->receiver->fd == fd)) return temp; temp = temp->next; } return temp; } /** @brief Remove a connection from the list and destroy it. * * This function will first look for the connection in the event handler list, * remove it from the list and then destroy it. * * @param ev The event handler structure where the list of connection is. * @param to_remove The connection to remove from the list. * * @return 0 on success, -1 if the connection is not found. */ DLT_STATIC int dlt_daemon_remove_connection(DltEventHandler *ev, DltConnection *to_remove) { if ((ev == NULL) || (to_remove == NULL)) return DLT_RETURN_ERROR; DltConnection *curr = ev->connections; DltConnection *prev = curr; /* Find the address where to_remove value is registered */ while (curr && (curr != to_remove)) { prev = curr; curr = curr->next; } if (!curr) { /* Must not be possible as we check for existence before */ dlt_log(LOG_CRIT, "Connection not found for removal.\n"); return -1; } else if (curr == ev->connections) { ev->connections = curr->next; } else { prev->next = curr->next; } /* Now we can destroy our pointer */ dlt_connection_destroy(to_remove); return 0; } /** @brief Destroy the connection list. * * This function runs through the connection list and destroy them one by one. * * @param ev Pointer to the event handler structure. */ void dlt_event_handler_cleanup_connections(DltEventHandler *ev) { unsigned int i = 0; if (ev == NULL) /* Nothing to do. */ return; while (ev->connections != NULL) /* We don really care on failure */ (void)dlt_daemon_remove_connection(ev, ev->connections); for (i = 0; i < ev->nfds; i++) init_poll_fd(&ev->pfd[i]); free(ev->pfd); } /** @brief Add a new connection to the list. * * The connection is added at the tail of the list. * * @param ev The event handler structure where the connection list is. * @param connection The connection to be added. */ DLT_STATIC void dlt_daemon_add_connection(DltEventHandler *ev, DltConnection *connection) { DltConnection **temp = &ev->connections; while (*temp != NULL) temp = &(*temp)->next; *temp = connection; } /** @brief Check for connection activation * * If the connection is active and it's not allowed anymore or it the user * ask for deactivation, the connection will be deactivated. * If the connection is inactive, the user asks for activation and it's * allowed for it to be activated, the connection will be activated. * * @param evhdl The event handler structure. * @param con The connection to act on * @param activation_type The type of activation requested ((DE)ACTIVATE) * * @return 0 on success, -1 otherwise */ int dlt_connection_check_activate(DltEventHandler *evhdl, DltConnection *con, int activation_type) { if (!evhdl || !con || !con->receiver) { dlt_vlog(LOG_ERR, "%s: wrong parameters.\n", __func__); return -1; } switch (con->status) { case ACTIVE: if (activation_type == DEACTIVATE) { dlt_vlog(LOG_INFO, "Deactivate connection type: %d\n", con->type); dlt_event_handler_disable_fd(evhdl, con->receiver->fd); if (con->type == DLT_CONNECTION_CLIENT_CONNECT) con->receiver->fd = -1; con->status = INACTIVE; } break; case INACTIVE: if (activation_type == ACTIVATE) { dlt_vlog(LOG_INFO, "Activate connection type: %d\n", con->type); dlt_event_handler_enable_fd(evhdl, con->receiver->fd, con->ev_mask); con->status = ACTIVE; } break; default: dlt_vlog(LOG_ERR, "Unknown connection status: %d\n", con->status); return -1; } return 0; } /** @brief Registers a connection for event handling and takes its ownership. * * As we add the connection to the list of connection, we take its ownership. * That's the only place where the connection pointer is stored. * The connection is then used to create a new event trigger. * If the connection is of type DLT_CONNECTION_CLIENT_MSG_TCP, we increase * the daemon_local->client_connections counter. TODO: Move this counter inside * the event handler structure. * * @param evhdl The event handler structure where the connection list is. * @param daemon_local Structure containing needed information. * @param connection The connection to be registered. * @param mask The bit mask of event to be registered. * * @return 0 on success, -1 otherwise. */ int dlt_event_handler_register_connection(DltEventHandler *evhdl, DltDaemonLocal *daemon_local, DltConnection *connection, int mask) { if (!evhdl || !connection || !connection->receiver) { dlt_log(LOG_ERR, "Wrong parameters when registering connection.\n"); return -1; } dlt_daemon_add_connection(evhdl, connection); if ((connection->type == DLT_CONNECTION_CLIENT_MSG_TCP) || (connection->type == DLT_CONNECTION_CLIENT_MSG_SERIAL)) daemon_local->client_connections++; /* On creation the connection is not active by default */ connection->status = INACTIVE; connection->next = NULL; connection->ev_mask = mask; return dlt_connection_check_activate(evhdl, connection, ACTIVATE); } /** @brief Unregisters a connection from the event handler and destroys it. * * We first look for the connection to be unregistered, delete the event * corresponding and then destroy the connection. * If the connection is of type DLT_CONNECTION_CLIENT_MSG_TCP, we decrease * the daemon_local->client_connections counter. TODO: Move this counter inside * the event handler structure. * * @param evhdl The event handler structure where the connection list is. * @param daemon_local Structure containing needed information. * @param fd The file descriptor of the connection to be unregistered. * * @return 0 on success, -1 otherwise. */ int dlt_event_handler_unregister_connection(DltEventHandler *evhdl, DltDaemonLocal *daemon_local, int fd) { if ((evhdl == NULL) || (daemon_local == NULL)) return DLT_RETURN_ERROR; /* Look for the pointer in the client list. * There shall be only one event handler with the same fd. */ DltConnection *temp = dlt_event_handler_find_connection(evhdl, fd); if (!temp) { dlt_log(LOG_ERR, "Connection not found for unregistration.\n"); return -1; } if ((temp->type == DLT_CONNECTION_CLIENT_MSG_TCP) || (temp->type == DLT_CONNECTION_CLIENT_MSG_SERIAL)) { daemon_local->client_connections--; if (daemon_local->client_connections < 0) { daemon_local->client_connections = 0; dlt_log(LOG_CRIT, "Unregistering more client than registered!\n"); } } if (dlt_connection_check_activate(evhdl, temp, DEACTIVATE) < 0) dlt_log(LOG_ERR, "Unable to unregister event.\n"); /* Cannot fail as far as dlt_daemon_find_connection succeed */ return dlt_daemon_remove_connection(evhdl, temp); } dlt-daemon-2.18.6/src/daemon/dlt_daemon_event_handler.h000066400000000000000000000045221377520261000230510ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Frederic Berat * * \copyright Copyright Š 2015 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_event_handler.h */ #include #include "dlt_daemon_connection_types.h" #include "dlt_daemon_event_handler_types.h" #include "dlt-daemon.h" #ifndef DLT_DAEMON_EVENT_HANDLER_H # define DLT_DAEMON_EVENT_HANDLER_H int dlt_daemon_prepare_event_handling(DltEventHandler *); int dlt_daemon_handle_event(DltEventHandler *, DltDaemon *, DltDaemonLocal *); DltConnection *dlt_event_handler_find_connection_by_id(DltEventHandler *, DltConnectionId); DltConnection *dlt_event_handler_find_connection(DltEventHandler *, int); void dlt_event_handler_cleanup_connections(DltEventHandler *); int dlt_event_handler_register_connection(DltEventHandler *, DltDaemonLocal *, DltConnection *, int); int dlt_event_handler_unregister_connection(DltEventHandler *, DltDaemonLocal *, int); int dlt_connection_check_activate(DltEventHandler *, DltConnection *, int); # ifdef DLT_UNIT_TESTS int dlt_daemon_remove_connection(DltEventHandler *ev, DltConnection *to_remove); void dlt_daemon_add_connection(DltEventHandler *ev, DltConnection *connection); # endif #endif /* DLT_DAEMON_EVENT_HANDLER_H */ dlt-daemon-2.18.6/src/daemon/dlt_daemon_event_handler_types.h000066400000000000000000000031301377520261000242670ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Frederic Berat * * \copyright Copyright Š 2015 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_event_handler_types.h */ #include #include "dlt_daemon_connection_types.h" #ifndef DLT_DAEMON_EVENT_HANDLER_TYPES_H # define DLT_DAEMON_EVENT_HANDLER_TYPES_H /* FIXME: Remove the need for DltDaemonLocal everywhere in the code * These typedefs are needed by DltDaemonLocal which is * itself needed for functions used by the event handler * (as this structure is used everywhere in the code ...) */ typedef enum { DLT_TIMER_PACKET = 0, DLT_TIMER_ECU, # ifdef DLT_SYSTEMD_WATCHDOG_ENABLE DLT_TIMER_SYSTEMD, # endif DLT_TIMER_GATEWAY, DLT_TIMER_UNKNOWN } DltTimers; typedef struct { struct pollfd *pfd; nfds_t nfds; nfds_t max_nfds; DltConnection *connections; } DltEventHandler; #endif /* DLT_DAEMON_EVENT_HANDLER_TYPES_H */ dlt-daemon-2.18.6/src/daemon/dlt_daemon_offline_logstorage.c000066400000000000000000001331251377520261000241000ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2018 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT offline log storage functionality source file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Syed Hameed ADIT 2013 - 2015 * \author Christoph Lipka ADIT 2015 * * \file: dlt_daemon_offline_logstorage.c * For further information see http://www.genivi.org/. */ #include #include #include #include #include "dlt_daemon_offline_logstorage.h" #include "dlt_daemon_offline_logstorage_internal.h" #include "dlt_gateway_types.h" #include "dlt_gateway.h" /** * dlt_logstorage_split_ecuid * * Split keys with ECU ID alone * * @param key Key * @param len Key length * @param ecuid ECU ID from key stored here * @param apid Application ID as .* stored here * @param ctid Context id as .* stored here * @return 0 on success -1 on error */ DLT_STATIC DltReturnValue dlt_logstorage_split_ecuid(char *key, int len, char *ecuid, char *apid, char *ctid) { if ((len > (DLT_ID_SIZE + 2)) || (len < 2)) return DLT_RETURN_ERROR; memcpy(ecuid, key, (size_t) (len - 2)); memcpy(apid, ".*", 2); memcpy(ctid, ".*", 2); return DLT_RETURN_OK; } unsigned int g_logstorage_cache_max; /** * dlt_logstorage_split_ctid * * Split keys with Context ID alone * * @param key Key * @param len Key length * @param apid Application ID as .* stored here * @param ctid Context id from key stored here * @return 0 on success -1 on error */ DLT_STATIC DltReturnValue dlt_logstorage_split_ctid(char *key, int len, char *apid, char *ctid) { if ((len > (DLT_ID_SIZE + 2)) || (len < 1)) return DLT_RETURN_ERROR; strncpy(ctid, (key + 2), (size_t) (len - 1)); memcpy(apid, ".*", 2); return DLT_RETURN_OK; } /** * dlt_logstorage_split_apid * * Split keys with Application ID alone * * @param key Key * @param len Key length * @param apid Application ID from key is stored here * @param ctid Context id as .* stored here * @return 0 on success -1 on error */ DLT_STATIC DltReturnValue dlt_logstorage_split_apid(char *key, int len, char *apid, char *ctid) { if ((len > (DLT_ID_SIZE + 2)) || (len < 2)) return DLT_RETURN_ERROR; strncpy(apid, key + 1, (size_t) (len - 2)); memcpy(ctid, ".*", 2); return DLT_RETURN_OK; } /** * dlt_logstorage_split_apid_ctid * * Split keys with Application ID and Context ID * * @param key Key * @param len Key length * @param apid Application ID from key is stored here * @param ctid CContext id from key is stored here * @return 0 on success -1 on error */ DLT_STATIC DltReturnValue dlt_logstorage_split_apid_ctid(char *key, int len, char *apid, char *ctid) { char *tok = NULL; if (len > DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN) return DLT_RETURN_ERROR; /* copy apid and ctid */ tok = strtok(key, ":"); if (tok != NULL) strncpy(apid, tok, DLT_ID_SIZE); else return DLT_RETURN_ERROR; tok = strtok(NULL, ":"); if (tok != NULL) strncpy(ctid, tok, DLT_ID_SIZE); else return DLT_RETURN_ERROR; return DLT_RETURN_OK; } /** * dlt_logstorage_split_ecuid_apid * * Split keys with ECU ID and Application ID * * @param key Key * @param len Key length * @param ecuid ECU ID from key stored here * @param apid Application ID from key is stored here * @param ctid Context id as .* stored here * @return 0 on success -1 on error */ DLT_STATIC DltReturnValue dlt_logstorage_split_ecuid_apid(char *key, int len, char *ecuid, char *apid, char *ctid) { char *tok = NULL; if (len > DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN) return DLT_RETURN_ERROR; /* copy apid and ctid */ tok = strtok(key, ":"); if (tok != NULL) strncpy(ecuid, tok, DLT_ID_SIZE); else return DLT_RETURN_ERROR; tok = strtok(NULL, ":"); if (tok != NULL) strncpy(apid, tok, DLT_ID_SIZE); else return DLT_RETURN_ERROR; memcpy(ctid, ".*", 2); return DLT_RETURN_OK; } /** * dlt_logstorage_split_multi * * Prepares keys with application ID alone, will use ecuid if provided * (ecuid\:apid\:\:) or (\:apid\:\:) * * @param key Prepared key stored here * @param len Key length * @param ecuid ECU ID * @param apid Application ID * @param ctid Context ID * @return None */ DLT_STATIC DltReturnValue dlt_logstorage_split_multi(char *key, int len, char *ecuid, char *apid, char *ctid) { char *tok = NULL; if (len > DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN) return DLT_RETURN_ERROR; tok = strtok(key, ":"); if (tok == NULL) return DLT_RETURN_ERROR; len = (int) strlen(tok); if (key[len + 1] == ':') { strncpy(ecuid, tok, DLT_ID_SIZE); tok = strtok(NULL, ":"); if (tok != NULL) strncpy(ctid, tok, DLT_ID_SIZE); memcpy(apid, ".*", 2); } else { strncpy(ecuid, tok, DLT_ID_SIZE); tok = strtok(NULL, ":"); strncpy(apid, tok, DLT_ID_SIZE); tok = strtok(NULL, ":"); strncpy(ctid, tok, DLT_ID_SIZE); } return DLT_RETURN_OK; } /** * dlt_logstorage_split_key * * Split a given key into apid and ctid. * If APID\: - apid = APID and ctid = .* * If \:CTID - ctid = CTID and apid = .* * Else apid = APID and ctid = CTID * * @param key Given key of filter hash map * @param apid Application id * @param ctid Context id * @param ecuid ECU id * @return 0 on success, -1 on error */ DLT_STATIC DltReturnValue dlt_logstorage_split_key(char *key, char *apid, char *ctid, char *ecuid) { int len = 0; char *sep = NULL; if ((key == NULL) || (apid == NULL) || (ctid == NULL) || (ecuid == NULL)) return DLT_RETURN_WRONG_PARAMETER; len = (int) strlen(key); sep = strchr (key, ':'); if (sep == NULL) return DLT_RETURN_WRONG_PARAMETER; /* key is ecuid only ecuid::*/ if ((key[len - 1] == ':') && (key[len - 2] == ':')) return dlt_logstorage_split_ecuid(key, len, ecuid, apid, ctid); /* key is context id only ::apid*/ else if ((key[0] == ':') && (key[1] == ':')) return dlt_logstorage_split_ctid(key, len, apid, ctid); /* key is application id only :apid: */ else if ((key[0] == ':') && (key[len - 1] == ':')) return dlt_logstorage_split_apid(key, len, apid, ctid); /* key is :apid:ctid */ else if ((key[0] == ':') && (key[len - 1] != ':')) return dlt_logstorage_split_apid_ctid(key, len, apid, ctid); /* key is ecuid:apid: */ else if ((key[0] != ':') && (key[len - 1] == ':')) return dlt_logstorage_split_ecuid_apid(key, len, ecuid, apid, ctid); /* key is either ecuid::ctid or ecuid:apid:ctid */ else return dlt_logstorage_split_multi(key, len, ecuid, apid, ctid); } /** * Forward SET_LOG_LEVEL request to passive node * * @param daemon_local pointer to DltDaemonLocal structure * @param apid Application ID * @param ctid Context ID * @param ecuid ECU ID * @param loglevel requested log level * @param verbose verbosity flag */ DLT_STATIC DltReturnValue dlt_daemon_logstorage_update_passive_node_context( DltDaemonLocal *daemon_local, char *apid, char *ctid, char *ecuid, int loglevel, int verbose) { DltServiceSetLogLevel req = { 0 }; DltPassiveControlMessage ctrl = { 0 }; DltGatewayConnection *con = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon_local == NULL) || (apid == NULL) || (ctid == NULL) || (ecuid == NULL) || (loglevel > DLT_LOG_VERBOSE) || (loglevel < DLT_LOG_DEFAULT)) { dlt_vlog(LOG_ERR, "%s: Wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } con = dlt_gateway_get_connection(&daemon_local->pGateway, ecuid, verbose); if (con == NULL) { dlt_vlog(LOG_ERR, "Failed to fond connection to passive node %s\n", ecuid); return DLT_RETURN_ERROR; } ctrl.id = DLT_SERVICE_ID_SET_LOG_LEVEL; ctrl.type = CONTROL_MESSAGE_ON_DEMAND; dlt_set_id(req.apid, apid); dlt_set_id(req.ctid, ctid); req.log_level = (uint8_t) loglevel; if (dlt_gateway_send_control_message(con, &ctrl, (void *)&req, verbose) != 0) { dlt_vlog(LOG_ERR, "Failed to forward SET_LOG_LEVEL message to passive node %s\n", ecuid); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } /** * dlt_daemon_logstorage_send_log_level * * Send new log level for the provided context, if ecuid is not daemon ecuid * update log level of passive node * * @param daemon DltDaemon structure * @param daemon_local DltDaemonLocal structure * @param context DltDaemonContext structure * @param ecuid ECU id * @param loglevel log level to be set to context * @param verbose If set to true verbose information is printed out * @return 0 on success, -1 on error */ DLT_STATIC DltReturnValue dlt_daemon_logstorage_send_log_level(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltDaemonContext *context, char *ecuid, int loglevel, int verbose) { int old_log_level = -1; int ll = DLT_LOG_DEFAULT; if ((daemon == NULL) || (daemon_local == NULL) || (ecuid == NULL) || (context == NULL) || (loglevel > DLT_LOG_VERBOSE) || (loglevel < DLT_LOG_DEFAULT)) { dlt_vlog(LOG_ERR, "%s: Wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (strncmp(ecuid, daemon->ecuid, DLT_ID_SIZE) == 0) { old_log_level = context->storage_log_level; context->storage_log_level = (int8_t) DLT_OFFLINE_LOGSTORAGE_MAX(loglevel, context->storage_log_level); if (context->storage_log_level > old_log_level) { if (dlt_daemon_user_send_log_level(daemon, context, verbose) == -1) { dlt_log(LOG_ERR, "Unable to update log level\n"); return DLT_RETURN_ERROR; } } } else { old_log_level = context->log_level; ll = DLT_OFFLINE_LOGSTORAGE_MAX(loglevel, context->log_level); if (ll > old_log_level) return dlt_daemon_logstorage_update_passive_node_context(daemon_local, context->apid, context->ctid, ecuid, ll, verbose); } return DLT_RETURN_OK; } /** * dlt_daemon_logstorage_reset_log_level * * The log levels are reset if log level provided is -1 (not sent to * application in this case). Reset and sent to application if current log level * provided is 0. * * @param daemon DltDaemon structure * @param daemon_local DltDaemonLocal structure * @param context DltDaemonContext structure * @param ecuid ECU ID * @param loglevel log level to be set to context * @param verbose If set to true verbose information is printed out * @return 0 on success, -1 on error */ DLT_STATIC DltReturnValue dlt_daemon_logstorage_reset_log_level(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltDaemonContext *context, char *ecuid, int loglevel, int verbose) { if ((daemon == NULL) || (daemon_local == NULL) || (ecuid == NULL) || (context == NULL) || (loglevel > DLT_LOG_VERBOSE) || (loglevel < DLT_LOG_DEFAULT)) { dlt_vlog(LOG_ERR, "%s: Wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } /* Set storage level to -1, to clear log levels */ context->storage_log_level = DLT_LOG_DEFAULT; if (loglevel == DLT_DAEMON_LOGSTORAGE_RESET_SEND_LOGLEVEL) { if (strncmp(ecuid, daemon->ecuid, DLT_ID_SIZE) == 0) { if (dlt_daemon_user_send_log_level(daemon, context, verbose) == DLT_RETURN_ERROR) { dlt_log(LOG_ERR, "Unable to update log level\n"); return DLT_RETURN_ERROR; } } else { /* forward set log level to passive node */ return dlt_daemon_logstorage_update_passive_node_context(daemon_local, context->apid, context->ctid, ecuid, DLT_LOG_DEFAULT, verbose); } } return DLT_RETURN_OK; } /** * dlt_daemon_logstorage_force_reset_level * * Force resetting of log level since have no data provided by passive node. * * @param daemon DltDaemon structure * @param daemon_local DltDaemonLocal structure * @param apid Application ID * @param ctid Context ID * @param ecuid ECU ID * @param loglevel log level to be set to context * @param verbose If set to true verbose information is printed out * @return 0 on success, -1 on error */ DLT_STATIC DltReturnValue dlt_daemon_logstorage_force_reset_level(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *apid, char *ctid, char *ecuid, int loglevel, int verbose) { int ll = DLT_LOG_DEFAULT; int num = 0; uint32_t i = 0; DltLogStorageFilterConfig *config[DLT_CONFIG_FILE_SECTIONS_MAX] = { 0 }; if ((daemon == NULL) || (daemon_local == NULL) || (ecuid == NULL) || (apid == NULL) || (ctid == NULL) || (loglevel > DLT_LOG_VERBOSE) || (loglevel < DLT_LOG_DEFAULT)) { dlt_vlog(LOG_ERR, "%s: Wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } for (i = 0; i < daemon_local->flags.offlineLogstorageMaxDevices; i++) { num = dlt_logstorage_get_config(&(daemon->storage_handle[i]), config, apid, ctid, ecuid); if (num > 0) break; /* found config */ } if ((num == 0) || (config[0] == NULL)) { dlt_vlog(LOG_ERR, "%s: No information about APID: %s, CTID: %s, ECU: %s in Logstorage configuration\n", __func__, apid, ctid, ecuid); return DLT_RETURN_ERROR; } if (loglevel == DLT_DAEMON_LOGSTORAGE_RESET_SEND_LOGLEVEL) ll = config[0]->reset_log_level; else ll = config[0]->log_level; return dlt_daemon_logstorage_update_passive_node_context(daemon_local, apid, ctid, ecuid, ll, verbose); } /** * dlt_logstorage_update_all_contexts * * Update log level of all contexts of the application by updating the daemon * internal table. The compare flags (cmp_flag) indicates if Id has to be * compared with application id or Context id of the daemon internal table. * The log levels are reset if current log level provided is -1 (not sent to * application in this case). Reset and sent to application if current log level * provided is 0. * * @param daemon DltDaemon structure * @param daemon_local DltDaemonLocal structure * @param id application id or context id * @param curr_log_level log level to be set to context * @param cmp_flag compare flag * @param ecuid ecu id where application runs * @param verbose If set to true verbose information is printed out * @return 0 on success, -1 on error */ DltReturnValue dlt_logstorage_update_all_contexts(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *id, int curr_log_level, int cmp_flag, char *ecuid, int verbose) { DltDaemonRegisteredUsers *user_list = NULL; int i = 0; char tmp_id[DLT_ID_SIZE + 1] = { '\0' }; if ((daemon == NULL) || (daemon_local == NULL) || (id == NULL) || (ecuid == NULL) || (cmp_flag <= DLT_DAEMON_LOGSTORAGE_CMP_MIN) || (cmp_flag >= DLT_DAEMON_LOGSTORAGE_CMP_MAX)) { dlt_vlog(LOG_ERR, "Wrong parameter in function %s\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } user_list = dlt_daemon_find_users_list(daemon, ecuid, verbose); if (user_list == NULL) return DLT_RETURN_ERROR; for (i = 0; i < user_list->num_contexts; i++) { if (cmp_flag == DLT_DAEMON_LOGSTORAGE_CMP_APID) dlt_set_id(tmp_id, user_list->contexts[i].apid); else if (cmp_flag == DLT_DAEMON_LOGSTORAGE_CMP_CTID) dlt_set_id(tmp_id, user_list->contexts[i].ctid); else /* this is for the case when both apid and ctid are wildcard */ dlt_set_id(tmp_id, ".*"); if (strncmp(id, tmp_id, DLT_ID_SIZE) == 0) { if (curr_log_level > 0) dlt_daemon_logstorage_send_log_level(daemon, daemon_local, &user_list->contexts[i], ecuid, curr_log_level, verbose); else /* The request is to reset log levels */ dlt_daemon_logstorage_reset_log_level(daemon, daemon_local, &user_list->contexts[i], ecuid, curr_log_level, verbose); } } return DLT_RETURN_OK; } /** * dlt_logstorage_update_context * * Update log level of a context by updating the daemon internal table * The log levels are reset if current log level provided is -1 (not sent to * application in this case) * Reset and sent to application if current log level provided is 0 * * @param daemon DltDaemon structure * @param daemon_local DltDaemonLocal structure * @param apid application id * @param ctid context id * @param ecuid ecu id * @param curr_log_level log level to be set to context * @param verbose If set to true verbose information is printed out * @return 0 on success, -1 on error */ DltReturnValue dlt_logstorage_update_context(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *apid, char *ctid, char *ecuid, int curr_log_level, int verbose) { DltDaemonContext *context = NULL; if ((daemon == NULL) || (daemon_local == NULL) || (apid == NULL) || (ctid == NULL) || (ecuid == NULL)) { dlt_vlog(LOG_ERR, "Wrong parameter in function %s\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } context = dlt_daemon_context_find(daemon, apid, ctid, ecuid, verbose); if (context != NULL) { if (curr_log_level > 0) return dlt_daemon_logstorage_send_log_level(daemon, daemon_local, context, ecuid, curr_log_level, verbose); else /* The request is to reset log levels */ return dlt_daemon_logstorage_reset_log_level(daemon, daemon_local, context, ecuid, curr_log_level, verbose); } else { if (strncmp(ecuid, daemon->ecuid, DLT_ID_SIZE) != 0) { /* we intentionally have no data provided by passive node. */ /* We blindly send the log level or reset log level */ return dlt_daemon_logstorage_force_reset_level(daemon, daemon_local, apid, ctid, ecuid, curr_log_level, verbose); } else { dlt_vlog(LOG_WARNING, "%s: No information about APID: %s, CTID: %s, ECU: %s\n", __func__, apid, ctid, ecuid); return DLT_RETURN_ERROR; } } return DLT_RETURN_OK; } /** * dlt_logstorage_update_context_loglevel * * Update all contexts or particular context depending provided key * * @param daemon Pointer to DLT Daemon structure * @param daemon_local Pointer to DLT Daemon Local structure * @param key Filter key stored in Hash Map * @param curr_log_level log level to be set to context * @param verbose If set to true verbose information is printed out * @return 0 on success, -1 on error */ DltReturnValue dlt_logstorage_update_context_loglevel(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *key, int curr_log_level, int verbose) { int cmp_flag = 0; char apid[DLT_ID_SIZE + 1] = { '\0' }; char ctid[DLT_ID_SIZE + 1] = { '\0' }; char ecuid[DLT_ID_SIZE + 1] = { '\0' }; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (key == NULL)) return DLT_RETURN_WRONG_PARAMETER; if (dlt_logstorage_split_key(key, apid, ctid, ecuid) != 0) { dlt_log(LOG_ERR, "Error while updating application log levels (split key)\n"); return DLT_RETURN_ERROR; } if (ecuid[0] == '\0') /* ECU id was not specified in filter configuration */ dlt_set_id(ecuid, daemon->ecuid); /* check wildcard for both apid and ctid first of all */ if (strcmp(ctid, ".*") == 0 && strcmp(apid, ".*") == 0) { cmp_flag = DLT_DAEMON_LOGSTORAGE_CMP_ECID; if (dlt_logstorage_update_all_contexts(daemon, daemon_local, apid, curr_log_level, cmp_flag, ecuid, verbose) != 0) return DLT_RETURN_ERROR; } else if (strcmp(ctid, ".*") == 0) { cmp_flag = DLT_DAEMON_LOGSTORAGE_CMP_APID; if (dlt_logstorage_update_all_contexts(daemon, daemon_local, apid, curr_log_level, cmp_flag, ecuid, verbose) != 0) return DLT_RETURN_ERROR; } /* wildcard for application id, find all contexts with context id */ else if (strcmp(apid, ".*") == 0) { cmp_flag = DLT_DAEMON_LOGSTORAGE_CMP_CTID; if (dlt_logstorage_update_all_contexts(daemon, daemon_local, ctid, curr_log_level, cmp_flag, ecuid, verbose) != 0) return DLT_RETURN_ERROR; } /* In case of given application id, context id pair, call available context * find function */ else if (dlt_logstorage_update_context(daemon, daemon_local, apid, ctid, ecuid, curr_log_level, verbose) != 0) { return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } /** * dlt_daemon_logstorage_reset_application_loglevel * * Reset storage log level of all running applications * 2 steps for resetting * 1. Setup storage_loglevel of all contexts configured for the requested device * to -1 * 2. Re-run update log level for all other configured devices * * @param daemon Pointer to DLT Daemon structure * @param daemon_local Pointer to DLT Daemon local structure * @param dev_num Number of attached DLT Logstorage device * @param max_device Maximum storage devices setup by the daemon * @param verbose If set to true verbose information is printed out */ void dlt_daemon_logstorage_reset_application_loglevel(DltDaemon *daemon, DltDaemonLocal *daemon_local, int dev_num, int max_device, int verbose) { DltLogStorage *handle = NULL; DltLogStorageFilterList **tmp = NULL; int i = 0; char key[DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN + 1] = { '\0' }; unsigned int status; int log_level = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (daemon->storage_handle == NULL) || (dev_num < 0)) { dlt_vlog(LOG_ERR, "Invalid function parameters used for %s\n", __func__); return; } handle = &(daemon->storage_handle[dev_num]); if ((handle->connection_type != DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) || (handle->config_status != DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE)) return; /* for all filters (keys) check if application context are already running * and log level need to be reset*/ tmp = &(handle->config_list); while (*(tmp) != NULL) { for (i = 0; i < (*tmp)->num_keys; i++) { memset(key, 0, sizeof(key)); strncpy(key, ((*tmp)->key_list + (i * DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN)), DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN); /* dlt-daemon wants to reset loglevel if * a logstorage device is disconnected. */ log_level = DLT_DAEMON_LOGSTORAGE_RESET_LOGLEVEL; dlt_logstorage_update_context_loglevel( daemon, daemon_local, key, log_level, verbose); } tmp = &(*tmp)->next; } /* Re-run update log level for all other configured devices */ for (i = 0; i < max_device; i++) { status = daemon->storage_handle[i].config_status; if (i == dev_num) continue; if (status == DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE) dlt_daemon_logstorage_update_application_loglevel(daemon, daemon_local, i, verbose); } return; } /** * dlt_daemon_logstorage_update_application_loglevel * * Update log level of all running applications with new filter configuration * available due to newly attached DltLogstorage device. The log level is only * updated when the current application log level is less than the log level * obtained from the storage configuration file * * @param daemon Pointer to DLT Daemon structure * @param daemon_local Pointer to DLT Daemon local structure * @param dev_num Number of attached DLT Logstorage device * @param verbose If set to true verbose information is printed out */ void dlt_daemon_logstorage_update_application_loglevel(DltDaemon *daemon, DltDaemonLocal *daemon_local, int dev_num, int verbose) { DltLogStorage *handle = NULL; DltLogStorageFilterList **tmp = NULL; char key[DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN + 1] = { '\0' }; int i = 0; int log_level = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (dev_num < 0)) { dlt_vlog(LOG_ERR, "Invalid function parameters used for %s\n", __func__); return; } handle = &(daemon->storage_handle[dev_num]); if ((handle->connection_type != DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) || (handle->config_status != DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE)) return; /* for all filters (keys) check if application or context already running * and log level need to be updated*/ tmp = &(handle->config_list); while (*(tmp) != NULL) { for (i = 0; i < (*tmp)->num_keys; i++) { memset(key, 0, sizeof(key)); strncpy(key, ((*tmp)->key_list + (i * DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN)), DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN); /* Obtain storage configuration data */ log_level = dlt_logstorage_get_loglevel_by_key(handle, key); if (log_level < 0) { dlt_log(LOG_ERR, "Failed to get log level by key \n"); return; } /* Update context log level with storage configuration log level */ dlt_logstorage_update_context_loglevel(daemon, daemon_local, key, log_level, verbose); } tmp = &(*tmp)->next; } return; } /** * dlt_daemon_logstorage_get_loglevel * * Obtain log level as a union of all configured storage devices and filters for * the provided application id and context id * * @param daemon Pointer to DLT Daemon structure * @param max_device Maximum storage devices setup by the daemon * @param apid Application ID * @param ctid Context ID * @return Log level on success, -1 on error */ int dlt_daemon_logstorage_get_loglevel(DltDaemon *daemon, int max_device, char *apid, char *ctid) { DltLogStorageFilterConfig *config[DLT_CONFIG_FILE_SECTIONS_MAX] = { 0 }; int i = 0; int j = 0; int8_t storage_loglevel = -1; int8_t configured_loglevel = -1; int num_config = 0; if ((daemon == NULL) || (max_device == 0) || (apid == NULL) || (ctid == NULL)) return DLT_RETURN_WRONG_PARAMETER; for (i = 0; i < max_device; i++) if (daemon->storage_handle[i].config_status == DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE) { num_config = dlt_logstorage_get_config(&(daemon->storage_handle[i]), config, apid, ctid, daemon->ecuid); if (num_config == 0) { dlt_log(LOG_DEBUG, "No valid filter configuration found\n"); continue; } for (j = 0; j < num_config; j++) { if (config[j] == NULL) continue; /* If logstorage configuration do not contain file name, * then it is non verbose control filter, so return level as in this filter */ if (config[j]->file_name == NULL) { storage_loglevel = (int8_t) config[j]->log_level; break; } configured_loglevel = (int8_t) config[j]->log_level; storage_loglevel = DLT_OFFLINE_LOGSTORAGE_MAX( configured_loglevel, storage_loglevel); } } return storage_loglevel; } /** * dlt_daemon_logstorage_write * * Write log message to all attached storage device. If the called * dlt_logstorage_write function is not able to write to the device, DltDaemon * will disconnect this device. * * @param daemon Pointer to Dlt Daemon structure * @param user_config DltDaemon configuration * @param data1 message header buffer * @param size1 message header buffer size * @param data2 message extended header buffer * @param size2 message extended header size * @param data3 message data buffer * @param size3 message data size */ void dlt_daemon_logstorage_write(DltDaemon *daemon, DltDaemonFlags *user_config, unsigned char *data1, int size1, unsigned char *data2, int size2, unsigned char *data3, int size3) { uint32_t i = 0; DltLogStorageUserConfig file_config; if ((daemon == NULL) || (user_config == NULL) || (user_config->offlineLogstorageMaxDevices <= 0) || (data1 == NULL) || (data2 == NULL) || (data3 == NULL)) { dlt_vlog(LOG_DEBUG, "%s: message type is not LOG. Skip storing.\n", __func__); return; /* Log Level changed callback */ } /* Copy user configuration */ file_config.logfile_timestamp = user_config->offlineLogstorageTimestamp; file_config.logfile_delimiter = user_config->offlineLogstorageDelimiter; file_config.logfile_maxcounter = user_config->offlineLogstorageMaxCounter; file_config.logfile_counteridxlen = user_config->offlineLogstorageMaxCounterIdx; for (i = 0; i < user_config->offlineLogstorageMaxDevices; i++) if (daemon->storage_handle[i].config_status == DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE) { if (dlt_logstorage_write(&(daemon->storage_handle[i]), &file_config, data1, size1, data2, size2, data3, size3) != 0) { dlt_log(LOG_ERR, "dlt_daemon_logstorage_write: failed. " "Disable storage device\n"); /* DLT_OFFLINE_LOGSTORAGE_MAX_WRITE_ERRORS happened, * therefore remove logstorage device */ dlt_logstorage_device_disconnected( &(daemon->storage_handle[i]), DLT_LOGSTORAGE_SYNC_ON_DEVICE_DISCONNECT); } } } /** * dlt_daemon_logstorage_setup_internal_storage * * Setup user defined path as offline log storage device * * @param daemon Pointer to Dlt Daemon structure * @param daemon_local Pointer to Dlt Daemon local structure * @param path User configured internal storage path * @param verbose If set to true verbose information is printed out * @return 0 on sucess, -1 otherwise */ int dlt_daemon_logstorage_setup_internal_storage(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *path, int verbose) { int ret = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((path == NULL) || (daemon == NULL)) return DLT_RETURN_WRONG_PARAMETER; /* connect internal storage device */ /* Device index always used as 0 as it is setup on DLT daemon startup */ ret = dlt_logstorage_device_connected(&(daemon->storage_handle[0]), path); if (ret != 0) { dlt_vlog(LOG_ERR, "%s: Device connect failed\n", __func__); return DLT_RETURN_ERROR; } /* check if log level of running application need an update */ dlt_daemon_logstorage_update_application_loglevel(daemon, daemon_local, 0, verbose); if (daemon->storage_handle[0].maintain_logstorage_loglevel != DLT_MAINTAIN_LOGSTORAGE_LOGLEVEL_UNDEF) { daemon->maintain_logstorage_loglevel = daemon->storage_handle[0].maintain_logstorage_loglevel; dlt_vlog(LOG_DEBUG, "[%s] Startup with maintain loglevel: [%d]\n", __func__, daemon->storage_handle[0].maintain_logstorage_loglevel); } return ret; } void dlt_daemon_logstorage_set_logstorage_cache_size(unsigned int size) { /* store given [KB] size in [Bytes] */ g_logstorage_cache_max = size * 1024; } int dlt_daemon_logstorage_cleanup(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { uint32_t i = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (daemon->storage_handle == NULL)) return DLT_RETURN_WRONG_PARAMETER; for (i = 0; i < daemon_local->flags.offlineLogstorageMaxDevices; i++) /* call disconnect on all currently connected devices */ if (daemon->storage_handle[i].connection_type == DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) { (&daemon->storage_handle[i])->uconfig.logfile_counteridxlen = daemon_local->flags.offlineLogstorageMaxCounterIdx; (&daemon->storage_handle[i])->uconfig.logfile_delimiter = daemon_local->flags.offlineLogstorageDelimiter; (&daemon->storage_handle[i])->uconfig.logfile_maxcounter = daemon_local->flags.offlineLogstorageMaxCounter; (&daemon->storage_handle[i])->uconfig.logfile_timestamp = daemon_local->flags.offlineLogstorageTimestamp; dlt_logstorage_device_disconnected( &daemon->storage_handle[i], DLT_LOGSTORAGE_SYNC_ON_DAEMON_EXIT); } return 0; } int dlt_daemon_logstorage_sync_cache(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *mnt_point, int verbose) { uint32_t i = 0; DltLogStorage *handle = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (mnt_point == NULL)) return DLT_RETURN_WRONG_PARAMETER; if (strlen(mnt_point) > 0) { /* mount point is given */ handle = dlt_daemon_logstorage_get_device(daemon, daemon_local, mnt_point, verbose); if (handle == NULL) { return DLT_RETURN_ERROR; } else { handle->uconfig.logfile_counteridxlen = daemon_local->flags.offlineLogstorageMaxCounterIdx; handle->uconfig.logfile_delimiter = daemon_local->flags.offlineLogstorageDelimiter; handle->uconfig.logfile_maxcounter = daemon_local->flags.offlineLogstorageMaxCounter; handle->uconfig.logfile_timestamp = daemon_local->flags.offlineLogstorageTimestamp; if (dlt_logstorage_sync_caches(handle) != 0) return DLT_RETURN_ERROR; } } else { /* sync caches for all connected logstorage devices */ for (i = 0; i < daemon_local->flags.offlineLogstorageMaxDevices; i++) if (daemon->storage_handle[i].connection_type == DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) { daemon->storage_handle[i].uconfig.logfile_counteridxlen = daemon_local->flags.offlineLogstorageMaxCounterIdx; daemon->storage_handle[i].uconfig.logfile_delimiter = daemon_local->flags.offlineLogstorageDelimiter; daemon->storage_handle[i].uconfig.logfile_maxcounter = daemon_local->flags.offlineLogstorageMaxCounter; daemon->storage_handle[i].uconfig.logfile_timestamp = daemon_local->flags.offlineLogstorageTimestamp; if (dlt_logstorage_sync_caches(&daemon->storage_handle[i]) != 0) return DLT_RETURN_ERROR; } } return 0; } DltLogStorage *dlt_daemon_logstorage_get_device(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *mnt_point, int verbose) { uint32_t i = 0; int len = 0; int len1 = 0; int len2 = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL) || (mnt_point == NULL)) return NULL; len1 = (int) strlen(mnt_point); for (i = 0; i < daemon_local->flags.offlineLogstorageMaxDevices; i++) { len2 = (int) strlen(daemon->storage_handle[i].device_mount_point); /* Check if the requested device path is already used as log storage * device. Check for strlen first, to avoid comparison errors when * final '/' is given or not */ len = len1 > len2 ? len2 : len1; if (strncmp(daemon->storage_handle[i].device_mount_point, mnt_point, (size_t) len) == 0) return &daemon->storage_handle[i]; } return NULL; } dlt-daemon-2.18.6/src/daemon/dlt_daemon_offline_logstorage.h000066400000000000000000000222271377520261000241050ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT offline log storage functionality header file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Syed Hameed ADIT 2013 - 2015 * \author Christoph Lipka ADIT 2015 * * \file: dlt_daemon_offline_logstorage.h * For further information see http://www.genivi.org/. */ /******************************************************************************* * ** * SRC-MODULE: dlt_daemon_offline_logstorage.h ** * ** * TARGET : linux ** * ** * PROJECT : DLT ** * ** * AUTHOR : Syed Hameed shameed@jp.adit-jv.com ** * Christoph Lipka clipka@jp.adit-jv.com ** * PURPOSE : ** * ** * REMARKS : ** * ** * PLATFORM DEPENDANT [yes/no]: yes ** * ** * TO BE CHANGED BY USER [yes/no]: no ** * ** ******************************************************************************/ /******************************************************************************* * Author Identity ** ******************************************************************************* * ** * Initials Name Company ** * -------- ------------------------- ---------------------------------- ** * sh Syed Hameed ADIT ** * cl Christoph Lipka ADIT ** *******************************************************************************/ #ifndef DLT_DAEMON_OFFLINE_LOGSTORAGE_H #define DLT_DAEMON_OFFLINE_LOGSTORAGE_H #include "dlt-daemon.h" #include "dlt_daemon_common.h" #include "dlt_offline_logstorage.h" #define DLT_DAEMON_LOGSTORAGE_RESET_LOGLEVEL -1 #define DLT_DAEMON_LOGSTORAGE_RESET_SEND_LOGLEVEL 0 typedef enum { DLT_DAEMON_LOGSTORAGE_CMP_MIN = 0, DLT_DAEMON_LOGSTORAGE_CMP_APID = 1, DLT_DAEMON_LOGSTORAGE_CMP_CTID = 2, DLT_DAEMON_LOGSTORAGE_CMP_ECID = 3, DLT_DAEMON_LOGSTORAGE_CMP_MAX, } DltCompareFlags; /** * dlt_daemon_logstorage_get_loglevel * * Obtain log level as a union of all configured storage devices and filters for * the provided application id and context id * * @param daemon Pointer to DLT Daemon structure * @param max_device Maximum storage devices setup by the daemon * @param apid Application ID * @param ctid Context ID * @return Log level on success, -1 on error */ int dlt_daemon_logstorage_get_loglevel(DltDaemon *daemon, int max_device, char *apid, char *ctid); /** * dlt_daemon_logstorage_reset_application_loglevel * * Reset storage log level of all running applications with -1 * * @param daemon Pointer to DLT Daemon structure * @param daemon_local Pointer to DLT Daemon local structure * @param dev_num Number of attached DLT Logstorage device * @param verbose If set to true verbose information is printed out */ void dlt_daemon_logstorage_reset_application_loglevel(DltDaemon *daemon, DltDaemonLocal *daemon_local, int dev_num, int max_device, int verbose); /** * dlt_daemon_logstorage_update_application_loglevel * * Update log level of all running applications with new filter configuration * available due to newly attached DltLogstorage device. The log level is only * updated when the current application log level is less than the log level * obtained from the storage configuration file. * * @param daemon Pointer to DLT Daemon structure * @param daemon_local Pointer to DLT Daemon local structure * @param dev_num Number of attached DLT Logstorage device * @param verbose if set to true verbose information is printed out */ void dlt_daemon_logstorage_update_application_loglevel(DltDaemon *daemon, DltDaemonLocal *daemon_local, int dev_num, int verbose); /** * dlt_daemon_logstorage_write * * Write log message to all attached storage device. If the called * dlt_logstorage_write function is not able to write to the device, * DltDaemon will disconnect this device. * * @param daemon Pointer to Dlt Daemon structure * @param user_config DltDaemon configuration * @param data1 message header buffer * @param size1 message header buffer size * @param data2 message extended data buffer * @param size2 message extended data size * @param data3 message data buffer * @param size3 message data size */ void dlt_daemon_logstorage_write(DltDaemon *daemon, DltDaemonFlags *user_config, unsigned char *data1, int size1, unsigned char *data2, int size2, unsigned char *data3, int size3); /** * dlt_daemon_logstorage_setup_internal_storage * * Setup user defined path as offline log storage device * * @param daemon Pointer to Dlt Daemon structure * @param daemon_local Pointer to Dlt Daemon Local structure * @param path User configured internal storage path * @param verbose If set to true verbose information is printed out */ int dlt_daemon_logstorage_setup_internal_storage(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *path, int verbose); /** * Set max size of logstorage cache. Stored internally in bytes * * @param size Size of logstorage cache [in KB] */ void dlt_daemon_logstorage_set_logstorage_cache_size(unsigned int size); /** * Cleanup dlt logstorage * * @param daemon Pointer to Dlt Daemon structure * @param daemon_local Pointer to Dlt Daemon Local structure * @param verbose If set to true verbose information is printed out */ int dlt_daemon_logstorage_cleanup(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose); /** * Sync logstorage caches * * @param daemon Pointer to Dlt Daemon structure * @param daemon_local Pointer to Dlt Daemon Local structure * @param mnt_point Logstorage device mount point * @param verbose If set to true verbose information is printed out * @return 0 on success, -1 otherwise */ int dlt_daemon_logstorage_sync_cache(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *mnt_point, int verbose); /** * dlt_logstorage_get_device * * Get a Logstorage device handle for given the mount point. * * @param daemon Pointer to Dlt Daemon structure * @param daemon_local Pointer to Dlt Daemon Local structure * @param mnt_point Logstorage device mount point * @param verbose If set to true verbose information is printed out * @return handle to Logstorage device on success, NULL otherwise */ DltLogStorage *dlt_daemon_logstorage_get_device(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *mnt_point, int verbose); #endif /* DLT_DAEMON_OFFLINE_LOGSTORAGE_H */ dlt-daemon-2.18.6/src/daemon/dlt_daemon_offline_logstorage_internal.h000066400000000000000000000105021377520261000257720ustar00rootroot00000000000000/** * Copyright (C) 2018 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT offline log storage functionality internal header file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Aditya Paluri ADIT 2018 * * \file: dlt_daemon_offline_logstorage_internal.h * For further information see http://www.genivi.org/. */ /******************************************************************************* * ** * SRC-MODULE: dlt_daemon_offline_logstorage_internal.h ** * ** * TARGET : linux ** * ** * PROJECT : DLT ** * ** * AUTHOR : Aditya Paluri venkataaditya.paluri@in.bosch.com ** * PURPOSE : ** * ** * REMARKS : ** * ** * PLATFORM DEPENDANT [yes/no]: yes ** * ** * TO BE CHANGED BY USER [yes/no]: no ** * ** ******************************************************************************/ /******************************************************************************* * Author Identity ** ******************************************************************************* * ** * Initials Name Company ** * -------- ------------------------- ---------------------------------- ** * ap Aditya Paluri ADIT ** *******************************************************************************/ #ifndef DLT_DAEMON_OFFLINE_LOGSTORAGE_INTERNAL_H #define DLT_DAEMON_OFFLINE_LOGSTORAGE_INTERNAL_H DLT_STATIC DltReturnValue dlt_logstorage_split_key(char *key, char *apid, char *ctid, char *ecuid); DltReturnValue dlt_logstorage_update_all_contexts(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *id, int curr_log_level, int cmp_flag, char *ecuid, int verbose); DltReturnValue dlt_logstorage_update_context(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *apid, char *ctid, char *ecuid, int curr_log_level, int verbose); DltReturnValue dlt_logstorage_update_context_loglevel(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *key, int curr_log_level, int verbose); #endif dlt-daemon-2.18.6/src/daemon/dlt_daemon_serial.c000066400000000000000000000071771377520261000215160ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_serial.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_daemon_serial.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #include #include #include #include #include #include #include /* send() */ #include "dlt-daemon.h" #include "dlt_types.h" #include "dlt_daemon_serial.h" int dlt_daemon_serial_send(int sock, void *data1, int size1, void *data2, int size2, char serialheader) { /* Optional: Send serial header, if requested */ if (serialheader) if (0 > write(sock, dltSerialHeader, sizeof(dltSerialHeader))) return DLT_DAEMON_ERROR_SEND_FAILED; /* Send data */ if (data1 && (size1 > 0)) if (0 > write(sock, data1, (size_t) size1)) return DLT_DAEMON_ERROR_SEND_FAILED; if (data2 && (size2 > 0)) if (0 > write(sock, data2, (size_t) size2)) return DLT_DAEMON_ERROR_SEND_FAILED; return DLT_DAEMON_ERROR_OK; } dlt-daemon-2.18.6/src/daemon/dlt_daemon_serial.h000066400000000000000000000061011377520261000215050ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_serial.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_daemon_serial.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #ifndef DLT_DAEMON_SERIAL_H #define DLT_DAEMON_SERIAL_H #include #include #include "dlt_common.h" #include "dlt_user.h" int dlt_daemon_serial_send(int sock, void *data1, int size1, void *data2, int size2, char serialheader); #endif /* DLT_DAEMON_SERIAL_H */ dlt-daemon-2.18.6/src/daemon/dlt_daemon_socket.c000066400000000000000000000136631377520261000215240ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Alexander Wenzel * Markus Klein * Mikko Rapeli * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_socket.c */ #include #include #include /* for printf() and fprintf() */ #include /* for socket(), connect(), (), and recv() */ #include /* for sockaddr_in and inet_addr() */ #include /* for atoi() and exit() */ #include /* for memset() */ #include /* for close() */ #include #include #include #include #include #ifdef linux # include #endif #include #if defined(linux) && defined(__NR_statx) # include #endif #include "dlt_types.h" #include "dlt-daemon.h" #include "dlt-daemon_cfg.h" #include "dlt_daemon_common_cfg.h" #include "dlt_daemon_socket.h" int dlt_daemon_socket_open(int *sock, unsigned int servPort, char *ip) { int yes = 1; int ret_inet_pton = 1; int lastErrno = 0; #ifdef DLT_USE_IPv6 /* create socket */ if ((*sock = socket(AF_INET6, SOCK_STREAM, 0)) == -1) { lastErrno = errno; dlt_vlog(LOG_ERR, "dlt_daemon_socket_open: socket() error %d: %s\n", lastErrno, strerror(lastErrno)); return -1; } #else if ((*sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { lastErrno = errno; dlt_vlog(LOG_ERR, "dlt_daemon_socket_open: socket() error %d: %s\n", lastErrno, strerror(lastErrno)); return -1; } #endif dlt_vlog(LOG_INFO, "%s: Socket created\n", __FUNCTION__); /* setsockpt SO_REUSEADDR */ if (setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { lastErrno = errno; dlt_vlog(LOG_ERR, "dlt_daemon_socket_open: Setsockopt error %d in dlt_daemon_local_connection_init: %s\n", lastErrno, strerror(lastErrno)); return -1; } /* bind */ #ifdef DLT_USE_IPv6 struct sockaddr_in6 forced_addr; memset(&forced_addr, 0, sizeof(forced_addr)); forced_addr.sin6_family = AF_INET6; forced_addr.sin6_port = htons(servPort); if (0 == strcmp(ip, "0.0.0.0")) forced_addr.sin6_addr = in6addr_any; else ret_inet_pton = inet_pton(AF_INET6, ip, &forced_addr.sin6_addr); #else struct sockaddr_in forced_addr; memset(&forced_addr, 0, sizeof(forced_addr)); forced_addr.sin_family = AF_INET; forced_addr.sin_port = htons(servPort); ret_inet_pton = inet_pton(AF_INET, ip, &forced_addr.sin_addr); #endif /* inet_pton returns 1 on success */ if (ret_inet_pton != 1) { lastErrno = errno; dlt_vlog(LOG_WARNING, "dlt_daemon_socket_open: inet_pton() error %d: %s. Cannot convert IP address: %s\n", lastErrno, strerror(lastErrno), ip); return -1; } if (bind(*sock, (struct sockaddr *)&forced_addr, sizeof(forced_addr)) == -1) { lastErrno = errno; /*close() may set errno too */ close(*sock); dlt_vlog(LOG_WARNING, "dlt_daemon_socket_open: bind() error %d: %s\n", lastErrno, strerror(lastErrno)); return -1; } /*listen */ dlt_vlog(LOG_INFO, "%s: Listening on ip %s and port: %u\n", __FUNCTION__, ip, servPort); /* get socket buffer size */ dlt_vlog(LOG_INFO, "dlt_daemon_socket_open: Socket send queue size: %d\n", dlt_daemon_socket_get_send_qeue_max_size(*sock)); if (listen(*sock, 3) < 0) { lastErrno = errno; dlt_vlog(LOG_WARNING, "dlt_daemon_socket_open: listen() failed with error %d: %s\n", lastErrno, strerror(lastErrno)); return -1; } return 0; /* OK */ } int dlt_daemon_socket_close(int sock) { close(sock); return 0; } int dlt_daemon_socket_send(int sock, void *data1, int size1, void *data2, int size2, char serialheader) { int ret = DLT_RETURN_OK; /* Optional: Send serial header, if requested */ if (serialheader) { ret = dlt_daemon_socket_sendreliable(sock, (void *)dltSerialHeader, sizeof(dltSerialHeader)); if (ret != DLT_RETURN_OK) return ret; } /* Send data */ if ((data1 != NULL) && (size1 > 0)) { ret = dlt_daemon_socket_sendreliable(sock, data1, size1); if (ret != DLT_RETURN_OK) return ret; } if ((data2 != NULL) && (size2 > 0)) ret = dlt_daemon_socket_sendreliable(sock, data2, size2); return ret; } int dlt_daemon_socket_get_send_qeue_max_size(int sock) { int n = 0; socklen_t m = sizeof(n); getsockopt(sock, SOL_SOCKET, SO_SNDBUF, (void *)&n, &m); return n; } int dlt_daemon_socket_sendreliable(int sock, void *data_buffer, int message_size) { int data_sent = 0; while (data_sent < message_size) { ssize_t ret = send(sock, (uint8_t*)data_buffer + data_sent, (size_t) (message_size - data_sent), 0); if (ret < 0) { dlt_vlog(LOG_WARNING, "%s: socket send failed [errno: %d]!\n", __func__, errno); return DLT_DAEMON_ERROR_SEND_FAILED; } else { data_sent += (int) ret; } } return DLT_DAEMON_ERROR_OK; } dlt-daemon-2.18.6/src/daemon/dlt_daemon_socket.h000066400000000000000000000071371377520261000215300ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_socket.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_daemon_socket.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #ifndef DLT_DAEMON_SOCKET_H #define DLT_DAEMON_SOCKET_H #include #include #include "dlt_common.h" #include "dlt_user.h" int dlt_daemon_socket_open(int *sock, unsigned int servPort, char *ip); int dlt_daemon_socket_close(int sock); int dlt_daemon_socket_get_send_qeue_max_size(int sock); int dlt_daemon_socket_send(int sock, void *data1, int size1, void *data2, int size2, char serialheader); /** * @brief dlt_daemon_socket_sendreliable - sends data to socket with additional checks and resending functionality - trying to be reliable * @param sock * @param data_buffer * @param message_size * @return on sucess: DLT_DAEMON_ERROR_OK, on error: DLT_DAEMON_ERROR_SEND_FAILED */ int dlt_daemon_socket_sendreliable(int sock, void *data_buffer, int message_size); #endif /* DLT_DAEMON_SOCKET_H */ dlt-daemon-2.18.6/src/daemon/dlt_daemon_unix_socket.c000066400000000000000000000043411377520261000225600ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015, Advanced Driver Information Technology * Copyright of Advanced Driver Information Technology, Bosch and Denso * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Christoph Lipka * * \copyright Copyright Š 2015 ADIT. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_unix_socket.c */ #include #include #include #include #include #include #include #include #include #include "dlt-daemon.h" #include "dlt_common.h" #include "dlt-daemon_cfg.h" #include "dlt_daemon_socket.h" #include "dlt_daemon_unix_socket.h" int dlt_daemon_unix_socket_open(int *sock, char *sock_path, int type, int mask) { struct sockaddr_un addr; int old_mask; if ((sock == NULL) || (sock_path == NULL)) { dlt_log(LOG_ERR, "dlt_daemon_unix_socket_open: arguments invalid"); return -1; } if ((*sock = socket(AF_UNIX, type, 0)) == -1) { dlt_log(LOG_WARNING, "unix socket: socket() error"); return -1; } memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; memcpy(addr.sun_path, sock_path, sizeof(addr.sun_path)); unlink(sock_path); /* set appropriate access permissions */ old_mask = umask(mask); if (bind(*sock, (struct sockaddr *)&addr, sizeof(addr)) == -1) { dlt_log(LOG_WARNING, "unix socket: bind() error"); return -1; } if (listen(*sock, 1) == -1) { dlt_log(LOG_WARNING, "unix socket: listen error"); return -1; } /* restore permissions */ umask(old_mask); return 0; } int dlt_daemon_unix_socket_close(int sock) { int ret = close(sock); if (ret != 0) { dlt_vlog(LOG_WARNING, "unix socket close failed: %s", strerror(errno)); } return ret; } dlt-daemon-2.18.6/src/daemon/dlt_daemon_unix_socket.h000066400000000000000000000061501377520261000225650ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015, Advanced Driver Information Technology * Copyright of Advanced Driver Information Technology, Bosch and Denso. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Christoph Lipka * * \copyright Copyright Š 2015 ADIT. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_unix_socket.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_daemon_unix_socket.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Christoph Lipka clipka@jp.adit-jv.com ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** cl Christoph Lipka ADIT ** *******************************************************************************/ #ifndef DLT_DAEMON_UNIX_SOCKET_H #define DLT_DAEMON_UNIX_SOCKET_H int dlt_daemon_unix_socket_open(int *sock, char *socket_path, int type, int mask); int dlt_daemon_unix_socket_close(int sock); #endif /* DLT_DAEMON_UNIX_SOCKET_H */ dlt-daemon-2.18.6/src/daemon/udp_connection/000077500000000000000000000000001377520261000207005ustar00rootroot00000000000000dlt-daemon-2.18.6/src/daemon/udp_connection/dlt_daemon_udp_common_socket.h000066400000000000000000000037351377520261000267570ustar00rootroot00000000000000/* * Copyright (c) 2019 LG Electronics Inc. * SPDX-License-Identifier: MPL-2.0 * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Guruprasad KN * Sachin Sudhakar Shetty * Sunil Kovila Sampath * * \copyright Copyright (c) 2019 LG Electronics Inc. * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_udp_common_socket.h */ #ifndef DLT_DAEMON_UDP_COMMON_SOCKET_H #define DLT_DAEMON_UDP_COMMON_SOCKET_H #include /* for sockaddr_in and inet_addr() */ #include #include #include #include #include /* for atoi() and exit() */ #include /* for memset() */ #include #include /* for socket(), connect(), (), and recv() */ #include /* for close() */ #include "dlt_common.h" #include "dlt-daemon.h" #include "dlt_daemon_udp_socket.h" #include "dlt_types.h" /* #define variables */ #define ADDRESS_VALID 1 #define ADDRESS_INVALID 0 #define SOCKPORT_MAX_LEN 6 /* port range 0-65535 */ #define SYSTEM_CALL_ERROR -1 #define ZERO_BYTE_RECIEVED 0 #define ONE_BYTE_RECIEVED 0 typedef struct sockaddr_storage CLIENT_ADDR_STRUCT; typedef socklen_t CLIENT_ADDR_STRUCT_SIZE; /* udp strutures */ typedef struct { CLIENT_ADDR_STRUCT clientaddr; CLIENT_ADDR_STRUCT_SIZE clientaddr_size; int isvalidflag; } DltDaemonClientSockInfo; /* Function prototype declaration */ void dlt_daemon_udp_init_clientstruct(DltDaemonClientSockInfo *clientinfo_struct); DltReturnValue dlt_daemon_udp_socket_open(int *sock, unsigned int servPort); void dlt_daemon_udp_setmulticast_addr(DltDaemonLocal *daemon_local); #endif /* DLT_DAEMON_UDP_COMMON_SOCKET_H */ dlt-daemon-2.18.6/src/daemon/udp_connection/dlt_daemon_udp_socket.c000066400000000000000000000240411377520261000253730ustar00rootroot00000000000000/* * Copyright (c) 2019 LG Electronics Inc. * SPDX-License-Identifier: MPL-2.0 * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Guruprasad KN * Sachin Sudhakar Shetty * Sunil Kovila Sampath * * \copyright Copyright (c) 2019 LG Electronics Inc. * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_udp_socket.c */ #include "dlt_daemon_udp_common_socket.h" static void dlt_daemon_udp_clientmsg_send(DltDaemonClientSockInfo *clientinfo, void *data1, int size1, void *data2, int size2, int verbose); static int g_udp_sock_fd = -1; static DltDaemonClientSockInfo g_udpmulticast_addr; /* ************************************************************************** */ /* Function : dlt_daemon_udp_init_clientstruct */ /* In Param : UDP client_info struct to be initilzed */ /* Out Param : NIL */ /* Description: client struct to be initilized to copy control/connect/disconnect */ /* client addr */ /* ************************************************************************** */ void dlt_daemon_udp_init_clientstruct(DltDaemonClientSockInfo *clientinfo_struct) { if (clientinfo_struct == NULL) { dlt_vlog(LOG_ERR, "%s: NULL arg\n", __func__); return; } memset(&clientinfo_struct->clientaddr, 0x00, sizeof(clientinfo_struct->clientaddr)); clientinfo_struct->clientaddr_size = sizeof(clientinfo_struct->clientaddr); clientinfo_struct->isvalidflag = ADDRESS_INVALID; /* info is invalid */ dlt_vlog(LOG_DEBUG, "%s: client addr struct init success \n", __func__); } /* ************************************************************************** */ /* Function : dlt_daemon_udp_setmulticast_addr */ /* In Param : NIL */ /* Out Param : NIL */ /* Description: set the multicast addr to global variables */ /* ************************************************************************** */ void dlt_daemon_udp_setmulticast_addr(DltDaemonLocal *daemon_local) { if (daemon_local == NULL) { dlt_vlog(LOG_ERR, "%s: NULL arg\n", __func__); return; } dlt_daemon_udp_init_clientstruct(&g_udpmulticast_addr); struct sockaddr_in clientaddr; clientaddr.sin_family = AF_INET; inet_pton(AF_INET, daemon_local->UDPMulticastIPAddress, &clientaddr.sin_addr); clientaddr.sin_port = htons(daemon_local->UDPMulticastIPPort); memcpy(&g_udpmulticast_addr.clientaddr, &clientaddr, sizeof(struct sockaddr_in)); g_udpmulticast_addr.clientaddr_size = sizeof(g_udpmulticast_addr.clientaddr); g_udpmulticast_addr.isvalidflag = ADDRESS_VALID; } /* ************************************************************************** */ /* Function : dlt_daemon_udp_connection_setup */ /* In Param : contains daemon param values used globally */ /* Out Param : status of udp connection setup and fd registration */ /* Description: DataGram socket fd connection is setup */ /* ************************************************************************** */ DltReturnValue dlt_daemon_udp_connection_setup(DltDaemonLocal *daemon_local) { int fd = DLT_FD_INIT; DltReturnValue ret_val = DLT_RETURN_WRONG_PARAMETER; if (daemon_local == NULL) return ret_val; if ((ret_val = dlt_daemon_udp_socket_open(&fd, daemon_local->flags.port)) != DLT_RETURN_OK) { dlt_log(LOG_ERR, "Could not initialize udp socket.\n"); } else { /* assign to global udp fd */ g_udp_sock_fd = fd; /* set global multicast addr */ dlt_daemon_udp_setmulticast_addr(daemon_local); dlt_log(LOG_DEBUG, "initialize udp socket success\n"); } return ret_val; } /* ************************************************************************** */ /* Function : dlt_daemon_udp_socket_open */ /* In Param : contains udp port number */ /* Out Param : status of udp connection setup */ /* Description: This funtion is used to setup DGRAM connection */ /* does socket()->bind() on udp port */ /* ************************************************************************** */ DltReturnValue dlt_daemon_udp_socket_open(int *sock, unsigned int servPort) { int enable_reuse_addr = 1; int sockbuffer = DLT_DAEMON_RCVBUFSIZESOCK; char portnumbuffer[SOCKPORT_MAX_LEN] = { 0 }; struct addrinfo hints; struct addrinfo *servinfo = NULL; struct addrinfo *addrinfo_iterator = NULL; int getaddrinfo_errorcode = -1; if (sock == NULL) return DLT_RETURN_WRONG_PARAMETER; memset(&hints, 0, sizeof hints); #ifdef DLT_USE_IPv6 hints.ai_family = AF_INET6; /* force IPv6 - will still work with IPv4 */ #else hints.ai_family = AF_INET; #endif hints.ai_socktype = SOCK_DGRAM;/* UDP Connection */ hints.ai_flags = AI_PASSIVE; /* use my IP address */ snprintf(portnumbuffer, SOCKPORT_MAX_LEN, "%d", servPort); if ((getaddrinfo_errorcode = getaddrinfo(NULL, portnumbuffer, &hints, &servinfo)) != 0) { dlt_vlog(LOG_WARNING, "[%s:%d] getaddrinfo: %s\n", __func__, __LINE__, gai_strerror(getaddrinfo_errorcode)); return DLT_RETURN_ERROR; } for (addrinfo_iterator = servinfo; addrinfo_iterator != NULL; addrinfo_iterator = addrinfo_iterator->ai_next) { if ((*sock = socket(addrinfo_iterator->ai_family, addrinfo_iterator->ai_socktype, addrinfo_iterator->ai_protocol)) == SYSTEM_CALL_ERROR) { dlt_log(LOG_WARNING, "socket() error\n"); continue; } dlt_vlog(LOG_INFO, "[%s:%d] Socket created - socket_family:%i socket_type:%i, protocol:%i\n", __func__, __LINE__, addrinfo_iterator->ai_family, addrinfo_iterator->ai_socktype, addrinfo_iterator->ai_protocol); if (setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, &enable_reuse_addr, sizeof(enable_reuse_addr)) == SYSTEM_CALL_ERROR) { dlt_vlog(LOG_WARNING, "[%s:%d] Setsockopt error %s\n", __func__, __LINE__, strerror(errno)); close(*sock); continue; } if (setsockopt(*sock, SOL_SOCKET, SO_RCVBUF, &sockbuffer, sizeof(sockbuffer)) == SYSTEM_CALL_ERROR) { dlt_vlog(LOG_WARNING, "[%s:%d] Setsockopt error %s\n", __func__, __LINE__, strerror(errno)); close(*sock); continue; } if (bind(*sock, addrinfo_iterator->ai_addr, addrinfo_iterator->ai_addrlen) == SYSTEM_CALL_ERROR) { close(*sock); dlt_log(LOG_WARNING, "bind() error\n"); continue; } break; } if (addrinfo_iterator == NULL) { dlt_log(LOG_WARNING, "failed to bind socket\n"); return DLT_RETURN_ERROR; } freeaddrinfo(servinfo); return DLT_RETURN_OK; /* OK */ } /* ************************************************************************** */ /* Function : dlt_daemon_udp_dltmsg_multicast */ /* In Param : data bytes in dlt format */ /* Out Param : NIL */ /* Description: multicast UDP dlt-message packets to dlt-client */ /* ************************************************************************** */ void dlt_daemon_udp_dltmsg_multicast(void *data1, int size1, void *data2, int size2, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); /* * When UDP Buffer is implemented then data2 would be expected to be NULL * as the data comes from buffer directly. In that case data2 should * not be checked for NULL */ if ((data1 == NULL) || (data2 == NULL)) { dlt_vlog(LOG_ERR, "%s: NULL arg\n", __func__); return; } dlt_daemon_udp_clientmsg_send(&g_udpmulticast_addr, data1, size1, data2, size2, verbose); } /* ************************************************************************** */ /* Function : dlt_daemon_udp_clientmsg_send */ /* In Param : data bytes & respective size in dlt format */ /* Out Param : NIL */ /* Description: common interface to send data via UDP protocol */ /* ************************************************************************** */ void dlt_daemon_udp_clientmsg_send(DltDaemonClientSockInfo *clientinfo, void *data1, int size1, void *data2, int size2, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if ((clientinfo->isvalidflag == ADDRESS_VALID) && (size1 > 0) && (size2 > 0)) { void *data = (void *)calloc(size1 + size2, sizeof(char)); if (data == NULL) { dlt_vlog(LOG_ERR, "%s: calloc failure\n", __func__); return; } memcpy(data, data1, size1); memcpy(data + size1, data2, size2); if (sendto(g_udp_sock_fd, data, size1 + size2, 0, (struct sockaddr *)&clientinfo->clientaddr, clientinfo->clientaddr_size) < 0) dlt_vlog(LOG_ERR, "%s: Send UDP Packet Data failed\n", __func__); free(data); data = NULL; } else { if (clientinfo->isvalidflag != ADDRESS_VALID) dlt_vlog(LOG_ERR, "%s: clientinfo->isvalidflag != ADDRESS_VALID %d\n", __func__, clientinfo->isvalidflag); if (size1 <= 0) dlt_vlog(LOG_ERR, "%s: size1 <= 0\n", __func__); if (size2 <= 0) dlt_vlog(LOG_ERR, "%s: size2 <= 0\n", __func__); } } /* ************************************************************************** */ /* Function : dlt_daemon_udp_close_connection */ /* In Param : NIL */ /* Out Param : NIL */ /* Description: Closes UDP Connection */ /* ************************************************************************** */ void dlt_daemon_udp_close_connection(void) { if (close(g_udp_sock_fd) == SYSTEM_CALL_ERROR) dlt_vlog(LOG_WARNING, "[%s:%d] close error %s\n", __func__, __LINE__, strerror(errno)); } dlt-daemon-2.18.6/src/daemon/udp_connection/dlt_daemon_udp_socket.h000066400000000000000000000020271377520261000254000ustar00rootroot00000000000000/* * Copyright (c) 2019 LG Electronics Inc. * SPDX-License-Identifier: MPL-2.0 * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Guruprasad KN * Sachin Sudhakar Shetty * Sunil Kovila Sampath * * \copyright Copyright (c) 2019 LG Electronics Inc. * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_daemon_udp_socket.h */ #ifndef DLT_DAEMON_UDP_SOCKET_H #define DLT_DAEMON_UDP_SOCKET_H #include "dlt-daemon.h" DltReturnValue dlt_daemon_udp_connection_setup(DltDaemonLocal *daemon_local); void dlt_daemon_udp_dltmsg_multicast(void *data1, int size1, void *data2, int size2, int verbose); void dlt_daemon_udp_close_connection(void); #endif /* DLT_DAEMON_UDP_SOCKET_H */ dlt-daemon-2.18.6/src/dbus/000077500000000000000000000000001377520261000153635ustar00rootroot00000000000000dlt-daemon-2.18.6/src/dbus/CMakeLists.txt000066400000000000000000000016041377520261000201240ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### include_directories( ${PROJECT_SOURCE_DIR}/ ${PROJECT_SOURCE_DIR}/include/dlt ${DBUS_INCLUDE_DIRS} ) set(dlt_dbus_SRCS dlt-dbus.c dlt-dbus-options.c) add_executable(dlt-dbus ${dlt_dbus_SRCS}) target_link_libraries(dlt-dbus dlt ${DBUS_LIBRARIES}) set_target_properties(dlt-dbus PROPERTIES LINKER_LANGUAGE C) install(TARGETS dlt-dbus RUNTIME DESTINATION bin COMPONENT base) INSTALL(FILES dlt-dbus.conf DESTINATION ${CONFIGURATION_FILES_DIR} COMPONENT base) dlt-daemon-2.18.6/src/dbus/dlt-dbus-options.c000066400000000000000000000156101377520261000207410ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-dbus-options.c */ #include "dlt-dbus.h" #include #include /** * Print information how to use this program. */ void usage(char *prog_name) { char version[255]; dlt_get_version(version, 255); printf("Usage: %s [options]\n", prog_name); printf("Application to forward dbus messages to DLT.\n"); printf("%s\n", version); printf("Options:\n"); printf(" -d Daemonize. Detach from terminal and run in background.\n"); printf(" -c filename Use configuration file. \n"); printf(" -a apid Used application id. \n"); printf(" Default: %s\n", DEFAULT_CONF_FILE); printf(" -b type Used bus type. \n"); printf(" Session = 0, System = 1.\n"); printf(" -h This help message.\n"); } /** * Initialize command line options with default values. */ void init_cli_options(DltDBusCliOptions *options) { options->ConfigurationFileName = DEFAULT_CONF_FILE; options->ApplicationId = 0; options->BusType = 0; options->Daemonize = 0; } /** * Read command line options and set the values in provided structure */ int read_command_line(DltDBusCliOptions *options, int argc, char *argv[]) { init_cli_options(options); int opt; while ((opt = getopt(argc, argv, "c:b:a:hd")) != -1) switch (opt) { case 'd': { options->Daemonize = 1; break; } case 'b': { options->BusType = malloc(strlen(optarg) + 1); MALLOC_ASSERT(options->BusType); strcpy(options->BusType, optarg); /* strcpy uncritical here, because size matches exactly the size to be copied */ break; } case 'a': { options->ApplicationId = malloc(strlen(optarg) + 1); MALLOC_ASSERT(options->ApplicationId); strcpy(options->ApplicationId, optarg); /* strcpy uncritical here, because size matches exactly the size to be copied */ break; } case 'c': { options->ConfigurationFileName = malloc(strlen(optarg) + 1); MALLOC_ASSERT(options->ConfigurationFileName); strcpy(options->ConfigurationFileName, optarg); /* strcpy uncritical here, because size matches exactly the size to be copied */ break; } case 'h': { usage(argv[0]); exit(0); return -1; /*for parasoft */ } default: { fprintf(stderr, "Unknown option '%c'\n", optopt); usage(argv[0]); return -1; } } return 0; } /** * Initialize configuration to default values. */ void init_configuration(DltDBusConfiguration *config) { /* Common */ config->ApplicationId = "IPC0"; /* DBus */ config->DBus.ContextId = "ALL"; config->DBus.BusType = 0; config->DBus.FilterCount = 0; } /** * Read options from the configuration file */ int read_configuration_file(DltDBusConfiguration *config, char *file_name) { FILE *file; char *line, *token, *value, *filter, *pch; int ret = 0; char *filterBegin, *filterEnd; init_configuration(config); file = fopen(file_name, "r"); if (file == NULL) { fprintf(stderr, "dlt-dbus-options, could not open configuration file.\n"); return -1; } line = malloc(MAX_LINE); token = malloc(MAX_LINE); value = malloc(MAX_LINE); filter = malloc(MAX_LINE); MALLOC_ASSERT(line); MALLOC_ASSERT(token); MALLOC_ASSERT(value); MALLOC_ASSERT(filter); while (fgets(line, MAX_LINE, file) != NULL) { token[0] = 0; value[0] = 0; filter[0] = 0; filterBegin = strchr(line, '='); filterEnd = strpbrk (line, "\r\n"); if (filterBegin) { if (filterEnd && (filterEnd > filterBegin)) { strncpy(filter, filterBegin + 1, filterEnd - filterBegin - 1); filter[filterEnd - filterBegin - 1] = 0; } else { strcpy(filter, filterBegin + 1); } } pch = strtok (line, " =\r\n"); while (pch != NULL) { if (pch[0] == '#') break; if (token[0] == 0) { strncpy(token, pch, MAX_LINE - 1); token[MAX_LINE - 1] = 0; } else { strncpy(value, pch, MAX_LINE); value[MAX_LINE - 1] = 0; break; } pch = strtok (NULL, " =\r\n"); } if (token[0] && value[0]) { /* Common */ if (strcmp(token, "ApplicationId") == 0) { config->ApplicationId = malloc(strlen(value) + 1); MALLOC_ASSERT(config->ApplicationId); strcpy(config->ApplicationId, value); /* strcpy unritical here, because size matches exactly the size to be copied */ } /* ContextId */ else if (strcmp(token, "ContextId") == 0) { config->DBus.ContextId = malloc(strlen(value) + 1); MALLOC_ASSERT(config->DBus.ContextId); strcpy(config->DBus.ContextId, value); /* strcpy unritical here, because size matches exactly the size to be copied */ } /* BusType */ else if (strcmp(token, "BusType") == 0) { config->DBus.BusType = malloc(strlen(value) + 1); MALLOC_ASSERT(config->DBus.BusType); strcpy(config->DBus.BusType, value); /* strcpy unritical here, because size matches exactly the size to be copied */ } /* BusType */ else if (strcmp(token, "FilterMatch") == 0) { if (config->DBus.FilterCount < DLT_DBUS_FILTER_MAX) { config->DBus.FilterMatch[config->DBus.FilterCount] = malloc(strlen(filter) + 1); MALLOC_ASSERT(config->DBus.FilterMatch[config->DBus.FilterCount]); strcpy(config->DBus.FilterMatch[config->DBus.FilterCount], filter); config->DBus.FilterCount++; } } } } fclose(file); free(value); free(token); free(filter); free(line); return ret; } dlt-daemon-2.18.6/src/dbus/dlt-dbus.c000066400000000000000000000114541377520261000172520ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-dbus.c */ #include "dlt-dbus.h" #include #include #include #include #include #include #include DLT_DECLARE_CONTEXT(dbusLog) DLT_DECLARE_CONTEXT(dbusContext) static char dbus_message_buffer[DBUS_MAXIMUM_MESSAGE_LENGTH]; static DBusHandlerResult filter_func (DBusConnection *con, DBusMessage *message, void *data) { char **buf; int len_p; UNUSED(con); UNUSED(data); buf = (char **)&dbus_message_buffer; if (!dbus_message_marshal(message, buf, &len_p)) { fprintf (stderr, "Failed to serialize DBus message!\n"); return DBUS_HANDLER_RESULT_HANDLED; } DLT_TRACE_NETWORK_SEGMENTED(dbusContext, DLT_NW_TRACE_IPC, 0, 0, len_p, (void *)*buf); free(*buf); *buf = NULL; if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected")) { DLT_UNREGISTER_CONTEXT (dbusContext); DLT_UNREGISTER_APP (); exit (0); } /* Conceptually we want this to be * DBUS_HANDLER_RESULT_NOT_YET_HANDLED, but this raises * some problems. See bug 1719. */ return DBUS_HANDLER_RESULT_HANDLED; } int main (int argc, char *argv[]) { DltDBusCliOptions options; DltDBusConfiguration config; DBusConnection *connection; DBusError error; DBusBusType type; int num; if (read_command_line(&options, argc, argv) < 0) { fprintf(stderr, "Failed to read command line!\n"); return -1; } if (read_configuration_file(&config, options.ConfigurationFileName) < 0) { fprintf(stderr, "Failed to read configuration file!\n"); return -1; } /* register application */ if (options.ApplicationId) DLT_REGISTER_APP (options.ApplicationId, "DBus Logging"); else DLT_REGISTER_APP (config.ApplicationId, "DBus Logging"); /* register context */ DLT_REGISTER_CONTEXT_LL_TS(dbusContext, config.DBus.ContextId, "DBus Context for Logging", DLT_LOG_INFO, DLT_TRACE_STATUS_ON); DLT_REGISTER_CONTEXT(dbusLog, "Log", "DBus Context for Logging Generic information"); /* initialise error handler */ dbus_error_init (&error); /* set DBus bus type */ if (options.BusType) type = (DBusBusType)atoi(options.BusType); else type = (DBusBusType)atoi(config.DBus.BusType); /* get connection */ connection = dbus_bus_get (type, &error); if (type == 0) DLT_LOG(dbusLog, DLT_LOG_INFO, DLT_STRING("BusType"), DLT_STRING("Session Bus")); else if (type == 1) DLT_LOG(dbusLog, DLT_LOG_INFO, DLT_STRING("BusType"), DLT_STRING("System Bus")); else DLT_LOG(dbusLog, DLT_LOG_INFO, DLT_STRING("BusType"), DLT_INT(type)); if (NULL == connection) { fprintf (stderr, "Failed to open connection to %d: %s\n", DBUS_BUS_SYSTEM, error.message); dbus_error_free (&error); exit (1); } for (num = 0; num < config.DBus.FilterCount; num++) { dbus_bus_add_match (connection, config.DBus.FilterMatch[num], &error); printf("Added FilterMatch: %s\n", config.DBus.FilterMatch[num]); DLT_LOG(dbusLog, DLT_LOG_INFO, DLT_STRING("FilterMatch"), DLT_UINT(num + 1), DLT_STRING(config.DBus.FilterMatch[num])); if (dbus_error_is_set (&error)) goto fail; } if (!dbus_connection_add_filter (connection, filter_func, NULL, NULL)) { fprintf (stderr, "Couldn't add filter!\n"); exit (1); } while (dbus_connection_read_write_dispatch(connection, -1)) ; DLT_UNREGISTER_CONTEXT (dbusContext); DLT_UNREGISTER_CONTEXT (dbusLog); DLT_UNREGISTER_APP (); exit(1); fail: /* fail */ fprintf (stderr, "Error: %s\n", error.message); DLT_UNREGISTER_CONTEXT (dbusContext); DLT_UNREGISTER_CONTEXT (dbusLog); DLT_UNREGISTER_APP (); exit(1); } dlt-daemon-2.18.6/src/dbus/dlt-dbus.conf000066400000000000000000000013031377520261000177450ustar00rootroot00000000000000# Configuration file of DLT dbus forwarder # ######################################################################## # General configuration ######################################################################## # The application Id used for DBus Trace (Default: DBUS) # If command line parameter used, the command line application id is used instead ApplicationId = DBUS # The context Id used for the DBus Trace(Default: ALL) ContextId = ALL # The DBus bus to be logged (Default: 1) # DBUS_BUS_SESSION = 0 # DBUS_BUS_SYSTEM = 1 # DBUS_BUS_STARTER = 2 BusType = 1 # Add one or several filters # Filter String is beginning directly after first occurence of character '=' FilterMatch=eavesdrop=true dlt-daemon-2.18.6/src/dbus/dlt-dbus.h000066400000000000000000000032551377520261000172570ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-dbus.h */ #ifndef DLT_DBUS_H_ #define DLT_DBUS_H_ /* DLT related includes. */ #include "dlt.h" #include "dlt_common.h" #define DEFAULT_CONF_FILE CONFIGURATION_FILES_DIR "/dlt-dbus.conf" #define DLT_DBUS_FILTER_MAX 32 /* Macros */ #define UNUSED(x) (void)(x) #define MALLOC_ASSERT(x) if (x == NULL) { \ fprintf(stderr, "Out of memory\n"); \ abort(); } #define MAX_LINE 1024 /* Command line options */ typedef struct { char *ConfigurationFileName; char *ApplicationId; char *BusType; int Daemonize; } DltDBusCliOptions; /* Configuration dbus options */ typedef struct { char *ContextId; char *BusType; int FilterCount; char *FilterMatch[DLT_DBUS_FILTER_MAX]; } DBusOptions; typedef struct { char *ApplicationId; DBusOptions DBus; } DltDBusConfiguration; extern void init_cli_options(DltDBusCliOptions *options); extern int read_command_line(DltDBusCliOptions *options, int argc, char *argv[]); extern int read_configuration_file(DltDBusConfiguration *config, char *file_name); #endif /* DLT_DBUS_H_ */ dlt-daemon-2.18.6/src/dlt-qnx-system/000077500000000000000000000000001377520261000173375ustar00rootroot00000000000000dlt-daemon-2.18.6/src/dlt-qnx-system/CMakeLists.txt000066400000000000000000000020121377520261000220720ustar00rootroot00000000000000####### # @licence make begin@ # SPDX license identifier: MPL-2.0 # # Copyright (C) 2018 Advanced Driver Information Technology. # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. # @licence end@ ####### if(NOT WITH_DLT_CXX11_EXT) message(FATAL_ERROR "DLT_QNX_SYSTEM needs the C++ features of dlt, please enable the WITH_DLT_CXX11_EXT option.") endif() set(dlt-qnx-system_SRCS dlt-qnx-system.c dlt-qnx-slogger2-adapter.cpp) add_executable(dlt-qnx-system ${dlt-qnx-system_SRCS}) target_link_libraries(dlt-qnx-system dlt slog2parse json) install(TARGETS dlt-qnx-system RUNTIME DESTINATION bin COMPONENT base) install(FILES dlt-qnx-system.conf dlt-slog2ctxt.json DESTINATION ${CONFIGURATION_FILES_DIR} COMPONENT base) dlt-daemon-2.18.6/src/dlt-qnx-system/dlt-qnx-slogger2-adapter.cpp000066400000000000000000000174641377520261000246060ustar00rootroot00000000000000/** * Copyright (C) 2018-2020 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT QNX system functionality source file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Nguyen Dinh Thi ADIT 2018 * \author Felix Herrmann ADIT 2020 * * \file: dlt-qnx-slogger2-adapter.cpp * For further information see http://www.genivi.org/. */ #include #include #include #include #include #include #include #include #include #include #include "dlt-qnx-system.h" #include "dlt_cpp_extension.hpp" /* Teach dlt about json_decoder_error_t */ template<> inline int32_t logToDlt(DltContextData &log, const json_decoder_error_t &value) { return logToDlt(log, static_cast(value)); } extern DltContext dltQnxSystem; static DltContext dltQnxSlogger2Context; extern DltQnxSystemThreads g_threads; static std::unordered_map g_slog2file; static void dlt_context_map_read(const char *json_filename) { DLT_LOG_CXX(dltQnxSlogger2Context, DLT_LOG_VERBOSE, "Loading Slog2Ctxt Map from json file: ", json_filename); auto dec = json_decoder_create(); if (json_decoder_parse_file(dec, json_filename) != JSON_DECODER_OK) { DLT_LOG_CXX(dltQnxSlogger2Context, DLT_LOG_ERROR, "Could not load Slog2Ctxt Map from json file: ", json_filename); return; } const char *ctxtID, *name, *description; /* go to first element in dlt-slog2ctxt.json e.g. "ADIO" */ auto ret = json_decoder_push_object(dec, nullptr, false); while (ret == JSON_DECODER_OK) { ctxtID = json_decoder_name(dec); /* go into the element e.g. { name: "", description: "" } */ ret = json_decoder_push_object(dec, nullptr, false); if (ret != JSON_DECODER_OK) { DLT_LOG_CXX(dltQnxSlogger2Context, DLT_LOG_WARN, __func__, ": json parser error while descending into context dict. ret=", ret); break; } ret = json_decoder_get_string(dec, "name", &name, false); if (ret != JSON_DECODER_OK) { DLT_LOG_CXX(dltQnxSlogger2Context, DLT_LOG_WARN, __func__, ": json parser error while retrieving 'name' element of ", ctxtID, ". ret=", ret); break; } ret = json_decoder_get_string(dec, "description", &description, false); if (ret != JSON_DECODER_OK) { DLT_LOG_CXX(dltQnxSlogger2Context, DLT_LOG_WARN, __func__, ": json parser error while retrieving 'description' element of ", ctxtID, ". ret=", ret); break; } auto ctxt = new DltContext; g_slog2file.emplace(name, ctxt); auto search = g_slog2file.find(name); if (search == g_slog2file.end()) { DLT_LOG_CXX(dltQnxSlogger2Context, DLT_LOG_INFO, "Could not emplace slog2ctxt map key: ", name); } else { dlt_register_context(ctxt, ctxtID, description); } ret = json_decoder_pop(dec); } DLT_LOG_CXX(dltQnxSlogger2Context, DLT_LOG_DEBUG, "Added ", g_slog2file.size(), " elements into the mapping table."); } /** * Map the slog2 logfile name to a dlt context * e.g. i2c_service.2948409 -> Context with id "I2CS" */ static DltContext *dlt_context_from_slog2file(const char *file_name) { auto d = strchr(file_name, '.'); if (d == nullptr) return &dltQnxSlogger2Context; auto name = std::string(file_name).substr(0, d - file_name); auto search = g_slog2file.find(name); if (search == g_slog2file.end()) { DLT_LOG_CXX(dltQnxSlogger2Context, DLT_LOG_VERBOSE, "slog2 filename not found in mapping: ", name.c_str()); return &dltQnxSlogger2Context; } else { return search->second; } } /** * Function which is invoked by slog2_parse_all() * See slog2_parse_all api docs on qnx.com for details */ static int sloggerinfo_callback(slog2_packet_info_t *info, void *payload, void *param) { DltQnxSystemConfiguration* conf = (DltQnxSystemConfiguration*) param; if (param == NULL) return -1; DltLogLevelType loglevel; switch (info->severity) { case SLOG2_SHUTDOWN: case SLOG2_CRITICAL: loglevel = DLT_LOG_FATAL; break; case SLOG2_ERROR: loglevel = DLT_LOG_ERROR; break; case SLOG2_WARNING: loglevel = DLT_LOG_WARN; break; case SLOG2_NOTICE: case SLOG2_INFO: loglevel = DLT_LOG_INFO; break; case SLOG2_DEBUG1: loglevel = DLT_LOG_DEBUG; break; case SLOG2_DEBUG2: loglevel = DLT_LOG_VERBOSE; break; default: loglevel = DLT_LOG_INFO; break; } DltContextData log_local; /* Used in DLT_* macros, do not rename */ DltContext *ctxt = dlt_context_from_slog2file(info->file_name); int ret; ret = dlt_user_log_write_start(ctxt, &log_local, loglevel); /* OK means loglevel under threshold */ if (ret == DLT_RETURN_OK) { return 0; } if (ret != DLT_RETURN_TRUE) { fprintf(stderr, "%s: could not log to DLT status=%d\n", __func__, ret); return -1; } if (conf->qnxslogger2.useOriginalTimestamp == 1) { /* convert from ns to .1 ms */ log_local.user_timestamp = (uint32_t) (info->timestamp / 100000); log_local.use_timestamp = DLT_USER_TIMESTAMP; } else { DLT_UINT64(info->timestamp); } DLT_UINT16(info->sequence_number); DLT_STRING((char *)info->file_name); DLT_STRING((char *)info->buffer_name); DLT_UINT16(info->thread_id); DLT_UINT8(info->severity); DLT_STRING((char *)payload); dlt_user_log_write_finish(&log_local); return 0; } static void *slogger2_thread(void *v_conf) { DltQnxSystemConfiguration *conf = (DltQnxSystemConfiguration *)v_conf; if (v_conf == NULL) return reinterpret_cast(EINVAL); slog2_packet_info_t packet_info = SLOG2_PACKET_INFO_INIT; DLT_LOG(dltQnxSystem, DLT_LOG_DEBUG, DLT_STRING("dlt-qnx-slogger2-adapter, in thread.")); DLT_REGISTER_CONTEXT(dltQnxSlogger2Context, conf->qnxslogger2.contextId, "SLOGGER2 Adapter"); dlt_context_map_read(CONFIGURATION_FILES_DIR "/dlt-slog2ctxt.json"); /** * Thread will block inside this function to get new log because * flag = SLOG2_PARSE_FLAGS_DYNAMIC */ int ret = slog2_parse_all( SLOG2_PARSE_FLAGS_DYNAMIC, /* live streaming of all buffers merged */ NULL, NULL, &packet_info, sloggerinfo_callback, (void*) conf); if (ret == -1) { DLT_LOG_CXX(dltQnxSlogger2Context, DLT_LOG_ERROR, "slog2_parse_all() returned error=", ret); ret = EBADMSG; } DLT_LOG_CXX(dltQnxSystem, DLT_LOG_DEBUG, __func__, ": Exited main loop."); DLT_UNREGISTER_CONTEXT(dltQnxSlogger2Context); /* Send a signal to main thread to wake up sigwait */ pthread_kill(g_threads.mainThread, SIGTERM); return reinterpret_cast(ret); } void start_qnx_slogger2(DltQnxSystemConfiguration *conf) { static pthread_attr_t t_attr; static pthread_t pt; DLT_LOG_CXX(dltQnxSlogger2Context, DLT_LOG_DEBUG, "dlt-qnx-slogger2-adapter, start syslog"); pthread_create(&pt, &t_attr, slogger2_thread, conf); g_threads.threads[g_threads.count++] = pt; } dlt-daemon-2.18.6/src/dlt-qnx-system/dlt-qnx-system.c000066400000000000000000000257761377520261000224350ustar00rootroot00000000000000/** * Copyright (C) 2020 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT QNX system functionality source file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Nguyen Dinh Thi * * \file: dlt-qnx-system.c * For further information see http://www.genivi.org/. * @licence end@ */ #include #include #include #include #include #include #include #include #include "dlt.h" #include "dlt-qnx-system.h" DLT_DECLARE_CONTEXT(dltQnxSystem) /* Global variables */ volatile DltQnxSystemThreads g_threads; /* Function prototype */ static void daemonize(); static void start_threads(DltQnxSystemConfiguration *config); static void join_threads(); static int read_configuration_file(DltQnxSystemConfiguration *config, const char *file_name); static int read_command_line(DltQnxSystemCliOptions *options, int argc, char *argv[]); int main(int argc, char* argv[]) { DltQnxSystemCliOptions options; DltQnxSystemConfiguration config; int sigNo = 0; int ret = 0; sigset_t mask; int i; if (read_command_line(&options, argc, argv) < 0) { fprintf(stderr, "Failed to read command line!\n"); return -1; } if (read_configuration_file(&config, options.configurationFileName) < 0) { fprintf(stderr, "Failed to read configuration file!\n"); return -1; } if (options.daemonize > 0) { daemonize(); } DLT_REGISTER_APP(config.applicationId, "DLT QNX System"); DLT_REGISTER_CONTEXT(dltQnxSystem, config.applicationContextId, "Context of main dlt qnx system manager"); DLT_LOG(dltQnxSystem, DLT_LOG_DEBUG, DLT_STRING("Setting signals wait for abnormal exit")); g_threads.mainThread = pthread_self(); sigemptyset(&mask); sigaddset(&mask, SIGTERM); sigaddset(&mask, SIGHUP); sigaddset(&mask, SIGQUIT); sigaddset(&mask, SIGINT); sigaddset(&mask, SIGALRM); if (pthread_sigmask(SIG_BLOCK, &mask, NULL) == -1) { DLT_LOG(dltQnxSystem, DLT_LOG_WARN, DLT_STRING("Failed to block signals!")); DLT_UNREGISTER_APP(); return -1; } DLT_LOG(dltQnxSystem, DLT_LOG_DEBUG, DLT_STRING("Launching threads.")); start_threads(&config); ret = sigwait(&mask, &sigNo); for (i = 0; i < MAX_THREADS; i++) { pthread_cancel(g_threads.threads[i]); } join_threads(); if (ret != 0) { DLT_LOG(dltQnxSystem, DLT_LOG_DEBUG, DLT_STRING("sigwait failed with error: "), DLT_INT(ret)); DLT_UNREGISTER_APP(); return -1; } DLT_LOG(dltQnxSystem, DLT_LOG_DEBUG, DLT_STRING("Received signal: "), DLT_STRING(strsignal(sigNo))); DLT_UNREGISTER_APP_FLUSH_BUFFERED_LOGS(); return 0; } /** * Print information how to use this program. */ static void usage(char *prog_name) { char version[255]; dlt_get_version(version, 255); printf("Usage: %s [options]\n", prog_name); printf("Application to manage QNX system, such as:\n"); printf(" - forward slogger2 messages from QNX to DLT) .\n"); printf("%s\n", version); printf("Options:\n"); printf(" -d Daemonize. Detach from terminal and run in background.\n"); printf(" -c filename Use configuration file. \n"); printf(" Default: %s\n", DEFAULT_CONF_FILE); printf(" -h This help message.\n"); } /** * Initialize command line options with default values. */ static void init_cli_options(DltQnxSystemCliOptions *options) { options->configurationFileName = DEFAULT_CONF_FILE; options->daemonize = 0; } /** * Read command line options and set the values in provided structure */ static int read_command_line(DltQnxSystemCliOptions *options, int argc, char *argv[]) { init_cli_options(options); int opt; while ((opt = getopt(argc, argv, "c:hd")) != -1) { switch (opt) { case 'd': { options->daemonize = 1; break; } case 'c': { options->configurationFileName = (char *)malloc(strlen(optarg)+1); MALLOC_ASSERT(options->configurationFileName); /** * strcpy unritical here, because size matches exactly the size * to be copied */ strcpy(options->configurationFileName, optarg); break; } case 'h': { usage(argv[0]); exit(0); return -1; } default: { fprintf(stderr, "Unknown option '%c'\n", optopt); usage(argv[0]); return -1; } } } return 0; } /** * Initialize configuration to default values. */ static void init_configuration(DltQnxSystemConfiguration *config) { /* Common */ config->applicationId = "QSYM"; config->applicationContextId = "QSYC"; /* Slogger2 */ config->qnxslogger2.enable = 0; config->qnxslogger2.contextId = "QSLA"; config->qnxslogger2.useOriginalTimestamp = 1; } /** * Read options from the configuration file */ static int read_configuration_file(DltQnxSystemConfiguration *config, const char *file_name) { FILE *file; char *line; char *token; char *value; char *pch; int ret = 0; init_configuration(config); file = fopen(file_name, "r"); if (file == NULL) { fprintf(stderr, "dlt-qnx-system, could not open configuration file.\n"); return -1; } line = malloc(MAX_LINE); token = malloc(MAX_LINE); value = malloc(MAX_LINE); MALLOC_ASSERT(line); MALLOC_ASSERT(token); MALLOC_ASSERT(value); while (fgets(line, MAX_LINE, file) != NULL) { token[0] = 0; value[0] = 0; pch = strtok(line, " =\r\n"); while (pch != NULL) { if (pch[0] == '#') { break; } if (token[0] == 0) { strncpy(token, pch, MAX_LINE-1); token[MAX_LINE-1] = 0; } else { strncpy(value, pch, MAX_LINE); value[MAX_LINE-1] = 0; break; } pch = strtok(NULL, " =\r\n"); } if (token[0] && value[0]) { /* Common */ if (strcmp(token, "ApplicationId") == 0) { config->applicationId = (char *)malloc(strlen(value) + 1); MALLOC_ASSERT(config->applicationId); /** * strcpy unritical here, because size matches exactly the * size to be copied */ strcpy(config->applicationId, value); } else if (strcmp(token, "ApplicationContextID") == 0) { config->applicationContextId = (char *)malloc(strlen(value) + 1); MALLOC_ASSERT(config->applicationContextId); /** * strcpy unritical here, because size matches exactly * the size to be copied */ strcpy(config->applicationContextId, value); } /* Slogger2 */ else if (strcmp(token, "QnxSlogger2Enable") == 0) { config->qnxslogger2.enable = atoi(value); } else if (strcmp(token, "QnxSlogger2ContextId") == 0) { config->qnxslogger2.contextId = (char *)malloc(strlen(value) + 1); MALLOC_ASSERT(config->qnxslogger2.contextId); /** * strcpy unritical here, because size matches exactly * the size to be copied */ strcpy(config->qnxslogger2.contextId, value); } else if (strcmp(token, "QnxSlogger2UseOriginalTimestamp") == 0) { config->qnxslogger2.useOriginalTimestamp = atoi(value); } else { /* Do nothing */ } } } fclose(file); file = NULL; free(value); value = NULL; free(token); token = NULL; free(line); line = NULL; return ret; } static void daemonize() { pid_t pid = fork(); if (pid == -1) { err(-1, "%s failed on fork()", __func__); } if (pid > 0) { /* parent process*/ exit(0); } /* Create a new process group */ if (setsid() == -1) { err(-1, "%s failed on setsid()", __func__); } /* Point std(in,out,err) to /dev/null */ close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); int fd = open("/dev/null", O_RDWR); if (fd == -1) { err(-1, "%s failed on open() /dev/null", __func__); } if ((dup2(fd, STDIN_FILENO) == -1) || (dup2(fd, STDOUT_FILENO) == -1 ) || (dup2(fd, STDERR_FILENO) == -1 )) { err(-1, "%s failed on dup2()", __func__); } /** * Ignore signals related to child processes and * terminal handling. */ signal(SIGCHLD, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); } static void start_threads(DltQnxSystemConfiguration *config) { int i = 0; /* Check parameter */ if (!config) { return; } DLT_LOG(dltQnxSystem, DLT_LOG_DEBUG, DLT_STRING("dlt-qnx-system, start threads")); g_threads.count = 0; g_threads.shutdown = 0; for (i = 0; i < MAX_THREADS; i++) { g_threads.threads[i] = 0; } if (config->qnxslogger2.enable) { start_qnx_slogger2(config); } } /** * Wait for threads to exit. */ static void join_threads() { int i = 0; DLT_LOG(dltQnxSystem, DLT_LOG_DEBUG, DLT_STRING("dlt-qnx-system, waiting for threads to exit")); if (g_threads.count < 1) { DLT_LOG(dltQnxSystem, DLT_LOG_DEBUG, DLT_STRING("dlt-qnx-system, no threads, waiting for signal.")); } else { DLT_LOG(dltQnxSystem, DLT_LOG_DEBUG, DLT_STRING("dlt-qnx-system, thread count: "), DLT_INT(g_threads.count)); for (i = 0; i < g_threads.count; i++) { pthread_join(g_threads.threads[i], NULL); DLT_LOG(dltQnxSystem, DLT_LOG_DEBUG, DLT_STRING("dlt-qnx-system, thread exit: "), DLT_INT(g_threads.threads[i])); } } DLT_UNREGISTER_CONTEXT(dltQnxSystem); } dlt-daemon-2.18.6/src/dlt-qnx-system/dlt-qnx-system.conf000066400000000000000000000014531377520261000231220ustar00rootroot00000000000000# Configuration file of DLT QNX Slogger2 Manager # ######################################################################## # General configuration ######################################################################## # The application Id used for the QNX system Manager (Default: QSYM) ApplicationId = QSYM # Context of main dlt QNX system ApplicationContextID = QSYC ######################################################################## # Syslog Adapter configuration ######################################################################## # Enable the Qnx slogger2 Adapter (Default: 1) QnxSlogger2Enable = 1 # The Context Id of the Qnx syslog adapter (Default: QSLA) QnxSlogger2ContextId = QSLA # Use slogger2 event timestamps as DLT timestamps (Default: 1) QnxSlogger2UseOriginalTimestamp = 1 dlt-daemon-2.18.6/src/dlt-qnx-system/dlt-qnx-system.h000066400000000000000000000100261377520261000224200ustar00rootroot00000000000000/** * Copyright (C) 2020 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT QNX system functionality header file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Nguyen Dinh Thi ADIT 2020 * * \file: dlt-qnx-system.h * For further information see http://www.genivi.org/. * @licence end@ */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_qnx-system.h ** ** ** ** TARGET : QNX ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Thi.NguyenDinh@vn.bosch.com ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** ndt Nguyen Dinh Thi ADIT ** ** ** *******************************************************************************/ #ifndef DLT_QNX_SYSTEM_H_ #define DLT_QNX_SYSTEM_H_ #include "dlt.h" /* Constants */ #define DEFAULT_CONF_FILE ( CONFIGURATION_FILES_DIR "/dlt-qnx-system.conf") #define MAX_LINE 1024 #define MAX_THREADS 8 /* Macros */ #define MALLOC_ASSERT(x)\ do\ {\ if(x == NULL) {\ fprintf(stderr, "%s - %d: Out of memory\n", __func__, __LINE__);\ abort();\ }\ }\ while (0) #ifdef __cplusplus extern "C" { #endif /* Command line options */ typedef struct { char *configurationFileName; int daemonize; } DltQnxSystemCliOptions; /* Configuration slogger2 options */ typedef struct { int enable; char *contextId; int useOriginalTimestamp; } Qnxslogger2Options; typedef struct { char *applicationId; char *applicationContextId; Qnxslogger2Options qnxslogger2; } DltQnxSystemConfiguration; typedef struct { pthread_t threads[MAX_THREADS]; pthread_t mainThread; int count; int shutdown; } DltQnxSystemThreads; void start_qnx_slogger2(DltQnxSystemConfiguration *conf); #ifdef __cplusplus } // extern "C" #endif #endif /* DLT_QNX_SYSTEM_H_ */ dlt-daemon-2.18.6/src/dlt-qnx-system/dlt-slog2ctxt.json000066400000000000000000000002701377520261000227430ustar00rootroot00000000000000{ "SRCN": { "name": "screen", "description": "" }, "SLM ": { "name": "slm", "description": "" }, "SYSL": { "name": "syslogd", "description": "" } } dlt-daemon-2.18.6/src/examples/000077500000000000000000000000001377520261000162445ustar00rootroot00000000000000dlt-daemon-2.18.6/src/examples/CMakeLists.txt000066400000000000000000000041331377520261000210050ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### set(dlt_example_user_SRCS dlt-example-user.c) add_executable(dlt-example-user ${dlt_example_user_SRCS}) target_link_libraries(dlt-example-user dlt) set_target_properties(dlt-example-user PROPERTIES LINKER_LANGUAGE C) set(dlt_example_user_common_api_SRCS dlt-example-user-common-api.c) add_executable(dlt-example-user-common-api ${dlt_example_user_common_api_SRCS}) target_link_libraries(dlt-example-user-common-api dlt) set_target_properties(dlt-example-user-common-api PROPERTIES LINKER_LANGUAGE C) set(dlt_example_user_func_SRCS dlt-example-user-func.c) add_executable(dlt-example-user-func ${dlt_example_user_func_SRCS}) target_link_libraries(dlt-example-user-func dlt) set_target_properties(dlt-example-user-func PROPERTIES LINKER_LANGUAGE C) set(dlt_example_filetransfer_SRCS dlt-example-filetransfer.c) add_executable( dlt-example-filetransfer ${dlt_example_filetransfer_SRCS}) target_link_libraries(dlt-example-filetransfer dlt ) set_target_properties(dlt-example-filetransfer PROPERTIES LINKER_LANGUAGE C) if(WITH_UDP_CONNECTION) set(dlt-example-multicast-clientmsg-view_SRCS dlt-example-multicast-clientmsg-view.c) add_executable(dlt-example-multicast-clientmsg-view ${dlt-example-multicast-clientmsg-view_SRCS} ${dlt_most_SRCS}) target_link_libraries(dlt-example-multicast-clientmsg-view dlt ) set_target_properties(dlt-example-multicast-clientmsg-view PROPERTIES LINKER_LANGUAGE C) install(TARGETS dlt-example-multicast-clientmsg-view RUNTIME DESTINATION bin COMPONENT base) endif(WITH_UDP_CONNECTION) install(TARGETS dlt-example-user dlt-example-user-func dlt-example-user-common-api dlt-example-filetransfer RUNTIME DESTINATION bin COMPONENT base) dlt-daemon-2.18.6/src/examples/dlt-example-filetransfer.c000066400000000000000000000153001377520261000233050ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-example-filetransfer.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-test-client.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #include #include #include #include /*Needed for transferring files with the dlt protocol*/ #include /*Needed for dlt logging*/ #define MAXSTRLEN 1024 #define FLTR_APP_DESC "Filetransfer application" #define FLTR_CONTEXT_DESC "Filetransfer context" #define FLTR_APP "FLTR" #define FLTR_CONTEXT "FLTR" #define TIMEOUT 1 /*!Declare some context for the file transfer. It's not a must have to do this, but later you can set a filter on this context in the dlt viewer. */ DLT_DECLARE_CONTEXT(fileContext) /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-example-filetransfer [options] absolute-path-to-file\n"); printf("Simple filetransfer example"); printf("%s \n", version); printf("Options:\n"); printf("-a apid - Set application id to apid (default: FLTR)\n"); printf("-c ctid - Set context id to ctid (default: FLTR)\n"); printf("-t ms - Timeout between file packages in ms (minimum 1 ms)\n"); printf("-d - Flag to delete the file after the transfer (default: false)\n"); printf("-i - Flag to log file infos to DLT before transfer file (default: false)\n"); printf("-h - This help\n"); } /*!Main program dlt-test-filestransfer starts here */ int main(int argc, char *argv[]) { /*char str[MAXSTRLEN]; */ int opt, timeout; char apid[DLT_ID_SIZE]; char ctid[DLT_ID_SIZE]; /*char version[255]; */ int index; int dflag = 0; int iflag = 0; char *file = 0; char *tvalue = 0; dlt_set_id(apid, FLTR_APP); dlt_set_id(ctid, FLTR_CONTEXT); while ((opt = getopt(argc, argv, "idf:t:a:c:h")) != -1) switch (opt) { case 'd': { dflag = 1; break; } case 'i': { iflag = 1; break; } case 't': { tvalue = optarg; break; } case 'a': { dlt_set_id(apid, optarg); break; } case 'c': { dlt_set_id(ctid, optarg); break; } case 'h': { usage(); break; } case '?': { if ((optopt == 'a') || (optopt == 'c') || (optopt == 't')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } } for (index = optind; index < argc; index++) file = argv[index]; if (file == 0) { /* no message, show usage and terminate */ fprintf(stderr, "ERROR: No absolute path to file specified\n"); usage(); return -1; } if (tvalue) timeout = atoi(tvalue); else timeout = TIMEOUT; /*Register the application at the dlt-daemon */ DLT_REGISTER_APP(apid, FLTR_APP_DESC); /*Register the context of the main program at the dlt-daemon */ DLT_REGISTER_CONTEXT(fileContext, ctid, FLTR_CONTEXT_DESC); /*More details in corresponding methods */ if (iflag) dlt_user_log_file_infoAbout(&fileContext, file); if (dlt_user_log_file_complete(&fileContext, file, dflag, timeout) < 0) printf("File couldn't be transferred. Please check the dlt log messages.\n"); /*Unregister the context in which the file transfer happened from the dlt-daemon */ DLT_UNREGISTER_CONTEXT(fileContext); /*Unregister the context of the main program from the dlt-daemon */ DLT_UNREGISTER_APP(); return 0; } dlt-daemon-2.18.6/src/examples/dlt-example-multicast-clientmsg-view.c000066400000000000000000000136541377520261000255730ustar00rootroot00000000000000/* * Copyright (c) 2019 LG Electronics Inc. * SPDX-License-Identifier: MPL-2.0 * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Guruprasad KN * Sachin Sudhakar Shetty * Sunil Kovila Sampath * * \copyright Copyright (c) 2019 LG Electronics Inc. * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-example-multicast-clientmsg-view.c */ #include #include #include #include #include #include #include #include /* for isprint() */ #include /* for atoi() */ #include /* for S_IRUSR, S_IWUSR, S_IRGRP, S_IROTH */ #include /* for open() */ #include /* for writev() */ #include #include #include #include #include /* for PATH_MAX */ #include #include "dlt_client.h" #include "dlt_client_cfg.h" #define DLT_RECEIVE_TEXTBUFSIZE 10024 #define HELLO_PORT 3491 #define HELLO_GROUP "225.0.0.37" struct clientinfostruct { int fd; struct sockaddr_in addr; socklen_t addlen; DltReceiver receiver; }; int dlt_receiver_receive_socket_udp(struct clientinfostruct *clientinfo, DltReceiver *receiver) { if ((receiver == NULL) || (clientinfo == NULL)) { printf("NULL receiver or clientinfo in dlt_receiver_receive_socket_udp\n"); return -1; } if (receiver->buffer == NULL) { printf("NULL receiver->buffer in dlt_receiver_receive_socket_udp\n"); return -1; } receiver->buf = (char *)receiver->buffer; receiver->lastBytesRcvd = receiver->bytesRcvd; /* wait for data from socket */ unsigned int addrlen = sizeof(clientinfo->addr); if ((receiver->bytesRcvd = recvfrom(clientinfo->fd, receiver->buf + receiver->lastBytesRcvd, receiver->buffersize - receiver->lastBytesRcvd, 0, (struct sockaddr *)&(clientinfo->addr), &addrlen)) <= 0) { printf("Error\n"); perror("recvfrom"); receiver->bytesRcvd = 0; return receiver->bytesRcvd; } /* if */ receiver->totalBytesRcvd += receiver->bytesRcvd; receiver->bytesRcvd += receiver->lastBytesRcvd; return receiver->bytesRcvd; } int dlt_receive_message_callback_udp(DltMessage *message) { static char text[DLT_RECEIVE_TEXTBUFSIZE]; if ((message == NULL)) { printf("NULL message in dlt_receive_message_callback_udp\n"); return -1; } /* prepare storage header */ if (DLT_IS_HTYP_WEID(message->standardheader->htyp)) dlt_set_storageheader(message->storageheader, message->headerextra.ecu); else dlt_set_storageheader(message->storageheader, "ECU1"); dlt_message_header(message, text, DLT_RECEIVE_TEXTBUFSIZE, 0); printf("%s ", text); dlt_message_payload(message, text, DLT_RECEIVE_TEXTBUFSIZE, DLT_OUTPUT_ASCII, 0); printf("[%s]\n", text); return 0; } int main() { struct clientinfostruct clientinfo; struct ip_mreq mreq; u_int yes = 1; /* create what looks like an ordinary UDP socket */ if ((clientinfo.fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); exit(1); } /* allow multiple sockets to use the same PORT number */ if (setsockopt(clientinfo.fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) { perror("Reusing ADDR failed"); exit(1); } /* set up destination address */ memset(&clientinfo.addr, 0, sizeof(clientinfo.addr)); clientinfo.addr.sin_family = AF_INET; clientinfo.addr.sin_addr.s_addr = htonl(INADDR_ANY); /* N.B.: differs from sender */ clientinfo.addr.sin_port = htons(HELLO_PORT); /* bind to receive address */ if (bind(clientinfo.fd, (struct sockaddr *)&clientinfo.addr, sizeof(clientinfo.addr)) < 0) { perror("bind"); exit(1); } /* use setsockopt() to request that the kernel join a multicast group */ mreq.imr_multiaddr.s_addr = inet_addr(HELLO_GROUP); mreq.imr_interface.s_addr = htonl(INADDR_ANY); if (setsockopt(clientinfo.fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) { perror("setsockopt"); exit(1); } DltMessage msg; if (dlt_message_init(&msg, 0) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; if (dlt_receiver_init(&(clientinfo.receiver), clientinfo.fd, DLT_RECEIVE_UDP_SOCKET, DLT_RECEIVE_BUFSIZE) != DLT_RETURN_OK) return DLT_RETURN_ERROR; printf("Waiting for message on ip %s port : %d\n", HELLO_GROUP, HELLO_PORT); while (1) { /* wait for data from socket */ dlt_receiver_receive_socket_udp(&clientinfo, &(clientinfo.receiver)); while (dlt_message_read(&msg, (unsigned char *)(clientinfo.receiver.buf), clientinfo.receiver.bytesRcvd, 0, 0) == DLT_MESSAGE_ERROR_OK) { dlt_receive_message_callback_udp(&msg); if (dlt_receiver_remove(&(clientinfo.receiver), msg.headersize + msg.datasize - sizeof(DltStorageHeader)) == DLT_RETURN_ERROR) { /* Return value ignored */ dlt_message_free(&msg, 0); return DLT_RETURN_ERROR; } } if (dlt_receiver_move_to_begin(&(clientinfo.receiver)) == DLT_RETURN_ERROR) { /* Return value ignored */ dlt_message_free(&msg, 0); return DLT_RETURN_ERROR; } } } dlt-daemon-2.18.6/src/examples/dlt-example-non-verbose-1.xml000077500000000000000000000600151377520261000236000ustar00rootroot00000000000000 projectTCB TCB 001.004.062 LOG Application 1 TEST Context 1 PDU_10_0 DLT non verbose test message. 0 OTHER PDU_11_0 Buffer near limit. Free size: 0 OTHER PDU_11_1 2 OTHER 0 PDU_12_0 Buffer size exceeded. 0 OTHER PDU_12_1 4 OTHER 0 PDU_12_2 4 OTHER 0 PDU_12_3 Process terminated. 0 OTHER PDU_13_0 Temperature measurement 0 OTHER PDU_13_1 1 OTHER 0 measurement_point PDU_13_2 4 OTHER 0 reading Kelvin PDU_14_0 Build ID: 0 OTHER PDU_14_1 0 OTHER 0 ID_10 0 OTHER 0 DLT_TYPE_LOG DLT_LOG_INFO LOG TEST dlt_test.c 411 ID_1001 2 OTHER 0 1 DLT_TYPE_LOG DLT_LOG_WARN LOG TEST application_file.c 955 ID_1002 2 OTHER 0 1 2 3 DLT_TYPE_LOG DLT_LOG_ERROR LOG TEST application_file.c 1058 ID_1003 5 OTHER 0 1 2 DLT_TYPE_LOG DLT_LOG_INFO LOG TEST temp_meas.c 42 ID_14 0 OTHER 0 1 DLT_TYPE_LOG DLT_LOG_INFO LOG TEST latsTask.c 421 S_BOOL S_SINT8 S_UINT8 S_SINT16 S_UINT16 S_SINT32 S_UINT32 S_SINT64 S_UINT64 S_FLOA16 S_FLOA32 S_FLOA64 S_STRG_ASCII S_STRG_UTF8 BOOL Coding for boolean values. 8 SINT8 Coding for signel 8bit values. 8 UINT8 Coding for unsignel 8bit values. 8 SINT16 Coding for signel 16bit values. 16 UINT16 Coding for unsignel 16bit values. 16 SINT32 Coding for signel 32bit values. 32 UINT32 Coding for unsignel 32bit values. 32 SINT64 Coding for signel 64bit values. 64 UINT64 Coding for unsignel 64bit values. 64 FLOA16 Coding for float 16bit values. 16 FLOA32 Coding for float 32bit values. 32 FLOA64 Coding for float 64bit values. 64 STRG_ASCII Coding for ASCII string. 0 255 STRG_UTF8 Coding for UTF8 string. 0 255 dlt-daemon-2.18.6/src/examples/dlt-example-non-verbose-1.xml.old000066400000000000000000000621201377520261000243510ustar00rootroot00000000000000 projectTCB TCB 001.004.062 APP1 Application 1 CON1 Context 1 TEST Test Application CON1 Context 1 LAT Log And Trace NV NV test PDU_10_0 DLT non verbose test message. 0 OTHER PDU_11_0 Buffer near limit. Free size: 0 OTHER PDU_11_1 2 OTHER 0 PDU_12_0 Buffer size exceeded. 0 OTHER PDU_12_1 4 OTHER 0 PDU_12_2 4 OTHER 0 PDU_12_3 Process terminated. 0 OTHER PDU_13_0 Temperature measurement 0 OTHER PDU_13_1 1 OTHER 0 measurement_point PDU_13_2 4 OTHER 0 reading Kelvin PDU_14_0 Build ID: 0 OTHER PDU_14_1 0 OTHER 0 ID_10 0 OTHER 0 DLT_TYPE_LOG DLT_LOG_INFO TEST CON1 dlt_test.c 411 ID_1001 2 OTHER 0 1 DLT_TYPE_LOG DLT_LOG_WARN APP1 CON1 application_file.c 955 ID_1002 2 OTHER 0 1 2 3 DLT_TYPE_LOG DLT_LOG_ERROR APP1 CON1 application_file.c 1058 ID_1003 5 OTHER 0 1 2 DLT_TYPE_LOG DLT_LOG_INFO APP1 CON1 temp_meas.c 42 ID_14 0 OTHER 0 1 DLT_TYPE_LOG DLT_LOG_INFO LAT NV latsTask.c 421 S_BOOL S_SINT8 S_UINT8 S_SINT16 S_UINT16 S_SINT32 S_UINT32 S_SINT64 S_UINT64 S_FLOA16 S_FLOA32 S_FLOA64 S_STRG_ASCII S_STRG_UTF8 BOOL Coding for boolean values. 8 SINT8 Coding for signel 8bit values. 8 UINT8 Coding for unsignel 8bit values. 8 SINT16 Coding for signel 16bit values. 16 UINT16 Coding for unsignel 16bit values. 16 SINT32 Coding for signel 32bit values. 32 UINT32 Coding for unsignel 32bit values. 32 SINT64 Coding for signel 64bit values. 64 UINT64 Coding for unsignel 64bit values. 64 FLOA16 Coding for float 16bit values. 16 FLOA32 Coding for float 32bit values. 32 FLOA64 Coding for float 64bit values. 64 STRG_ASCII Coding for ASCII string. 0 255 STRG_UTF8 Coding for UTF8 string. 0 255 dlt-daemon-2.18.6/src/examples/dlt-example-non-verbose.xml000066400000000000000000000443021377520261000234400ustar00rootroot00000000000000 projectTCB TCB 001.004.062 PDU_10_0 DLT non verbose test message. 0 OTHER PDU_11_0 Buffer near limit. Free size: 0 OTHER PDU_11_1 2 OTHER 0 PDU_12_0 Buffer size exceeded. 0 OTHER PDU_12_1 Requested size: 4 OTHER 0 PDU_12_2 Free size: 4 OTHER 0 PDU_12_3 Process terminated. 0 OTHER PDU_13_0 Temperature measurement 0 OTHER PDU_13_1 1 OTHER 0 measurement_point PDU_13_2 4 OTHER 0 reading Kelvin ID_10 0 OTHER 0 DLT_TYPE_LOG DLT_LOG_INFO TEST CON1 dlt_test.c 411 ID_11 2 OTHER 0 1 DLT_TYPE_LOG DLT_LOG_WARN APP1 CON1 application_file.c 955 ID_12 8 OTHER 0 1 2 3 DLT_TYPE_LOG DLT_LOG_ERROR APP1 CON1 application_file.c 1058 ID_13 5 OTHER 0 1 2 DLT_TYPE_LOG DLT_LOG_INFO APP1 CON1 temp_meas.c 42 S_BOOL S_SINT8 S_UINT8 S_SINT16 S_UINT16 S_SINT32 S_UINT32 S_SINT64 S_UINT64 S_FLOA16 S_FLOA32 S_FLOA64 S_STRG_ASCII S_STRG_UTF8 BOOL Coding for boolean values. 8 SINT8 Coding for signel 8bit values. 8 UINT8 Coding for unsignel 8bit values. 8 SINT16 Coding for signel 16bit values. 16 UINT16 Coding for unsignel 16bit values. 16 SINT32 Coding for signel 32bit values. 32 UINT32 Coding for unsignel 32bit values. 32 SINT64 Coding for signel 64bit values. 64 UINT64 Coding for unsignel 64bit values. 64 FLOA16 Coding for float 16bit values. 16 FLOA32 Coding for float 32bit values. 32 FLOA64 Coding for float 64bit values. 64 STRG_ASCII Coding for ASCII string. 0 255 STRG_UTF8 Coding for UTF8 string. 0 255 dlt-daemon-2.18.6/src/examples/dlt-example-user-common-api.c000066400000000000000000000207001377520261000236340ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-example-user-common-api.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-example-common-api.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #include #include #include /* for printf() and fprintf() */ #include /* for atoi() and exit() */ #include /* for memset() */ #include /* for close() */ #include "dlt_common_api.h" DLT_DECLARE_CONTEXT(mycontext) /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-example-common-api [options] message\n"); printf("Generate DLT messages and store them to file or send them to daemon.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -d delay Milliseconds to wait between sending messages (Default: 500)\n"); printf(" -f filename Use local log file instead of sending to daemon\n"); printf(" -n count Number of messages to be generated (Default: 10)\n"); printf(" -g Switch to non-verbose mode (Default: verbose mode)\n"); printf(" -a Enable local printing of DLT messages (Default: disabled)\n"); printf(" -m mode Set log mode 0=off,1=external,2=internal,3=both\n"); #ifdef DLT_TEST_ENABLE printf(" -c Corrupt user header\n"); printf(" -s size Corrupt message size\n"); printf(" -z size Size of message\n"); #endif /* DLT_TEST_ENABLE */ } /** * Main function of tool. */ int main(int argc, char *argv[]) { #ifdef DLT_TEST_ENABLE int cflag = 0; char *svalue = 0; char *zvalue = 0; #endif /* DLT_TEST_ENABLE */ int gflag = 0; char *dvalue = 0; char *nvalue = 0; char *message = 0; int index; int c; char *text; int num, maxnum; int delay; struct timespec ts; int state = -1, newstate; opterr = 0; #ifdef DLT_TEST_ENABLE while ((c = getopt (argc, argv, "vgcd:n:z:s:")) != -1) #else while ((c = getopt (argc, argv, "vgd:n:")) != -1) #endif /* DLT_TEST_ENABLE */ { switch (c) { #ifdef DLT_TEST_ENABLE case 'c': { cflag = 1; break; } case 's': { svalue = optarg; break; } case 'z': { zvalue = optarg; break; } #endif /* DLT_TEST_ENABLE */ case 'g': { gflag = 1; break; } case 'd': { dvalue = optarg; break; } case 'n': { nvalue = optarg; break; } case '?': { if ((optopt == 'd') || (optopt == 'f') || (optopt == 'n')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { abort (); break;/*for parasoft */ } } } for (index = optind; index < argc; index++) message = argv[index]; if (message == 0) { /* no message, show usage and terminate */ fprintf(stderr, "ERROR: No message selected\n"); usage(); return -1; } DLT_REGISTER_APP("LOG", "Test Application for Logging"); DLT_REGISTER_CONTEXT_APP(mycontext, "TEST", "LOG", "Test Context for Logging"); text = message; if (nvalue) maxnum = atoi(nvalue); else maxnum = 10; if (dvalue) delay = atoi(dvalue) * 1000000; else delay = 500 * 1000000; if (gflag) { /* DLT messages to test Fibex non-verbose description: dlt-example-non-verbose.xml */ DLT_LOG_ID0(mycontext, DLT_LOG_INFO, 10); DLT_LOG_ID1(mycontext, DLT_LOG_INFO, 11, DLT_UINT16(1011)); DLT_LOG_ID2(mycontext, DLT_LOG_INFO, 12, DLT_UINT32(1012), DLT_UINT32(1013)); DLT_LOG_ID2(mycontext, DLT_LOG_INFO, 13, DLT_UINT8(123), DLT_FLOAT32(1.12)); DLT_LOG_ID1(mycontext, DLT_LOG_INFO, 14, DLT_STRING("DEAD BEEF")); } #ifdef DLT_TEST_ENABLE if (cflag) dlt_user_test_corrupt_user_header(1); if (svalue) dlt_user_test_corrupt_message_size(1, atoi(svalue)); if (zvalue) { char *buffer = malloc(atoi(zvalue)); if (buffer == 0) { /* no message, show usage and terminate */ fprintf(stderr, "Cannot allocate buffer memory!\n"); return -1; } DLT_LOG2(mycontext, DLT_LOG_WARN, DLT_STRING(text), DLT_RAW(buffer, atoi(zvalue))); free(buffer); } #endif /* DLT_TEST_ENABLE */ for (num = 0; num < maxnum; num++) { printf("Send %d %s\n", num, text); newstate = dlt_get_log_state(); if (state != newstate) { state = newstate; if (state == -1) printf("Client unknown state!\n"); else if (state == 0) printf("Client disconnected!\n"); else if (state == 1) printf("Client connected!\n"); } if (gflag) /* Non-verbose mode */ DLT_LOG_ID2(mycontext, DLT_LOG_WARN, num, DLT_INT(num), DLT_STRING(text)); else /* Verbose mode */ DLT_LOG2(mycontext, DLT_LOG_WARN, DLT_INT(num), DLT_STRING(text)); if (delay > 0) { ts.tv_sec = delay / 1000000000; ts.tv_nsec = delay % 1000000000; nanosleep(&ts, NULL); } } sleep(1); DLT_UNREGISTER_CONTEXT(mycontext); DLT_UNREGISTER_APP(); return 0; } dlt-daemon-2.18.6/src/examples/dlt-example-user-func.c000066400000000000000000000226731377520261000225430ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-example-user-func.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-example-user-func.cpp ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include #include #include /* for printf() and fprintf() */ #include /* for atoi() and exit() */ #include /* for memset() */ #include /* for close() */ #include "dlt.h" #include "dlt_common.h" /* for dlt_get_version() */ int dlt_user_injection_callback(uint32_t service_id, void *data, uint32_t length); DltContext mycontext; DltContextData mycontextdata; /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-example-user-func [options] message\n"); printf("Generate DLT messages and store them to file or send them to daemon.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -d delay Milliseconds to wait between sending messages (Default: 500)\n"); printf(" -f filename Use local log file instead of sending to daemon\n"); printf(" -n count Number of messages to be generated (Default: 10)\n"); printf(" -g Switch to non-verbose mode (Default: verbose mode)\n"); printf(" -a Enable local printing of DLT messages (Default: disabled)\n"); } /** * Main function of tool. */ int main(int argc, char *argv[]) { int gflag = 0; int aflag = 0; char *dvalue = 0; char *fvalue = 0; char *nvalue = 0; char *message = 0; int index; int c; char *text; int num, maxnum; int delay; struct timespec ts; opterr = 0; while ((c = getopt (argc, argv, "vgad:f:n:")) != -1) switch (c) { case 'g': { gflag = 1; break; } case 'a': { aflag = 1; break; } case 'd': { dvalue = optarg; break; } case 'f': { fvalue = optarg; break; } case 'n': { nvalue = optarg; break; } case '?': { if ((optopt == 'd') || (optopt == 'f') || (optopt == 'n')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { abort (); return -1;/*for parasoft */ } } for (index = optind; index < argc; index++) message = argv[index]; if (message == 0) { /* no message, show usage and terminate */ fprintf(stderr, "ERROR: No message selected\n"); usage(); return -1; } if (fvalue) { /* DLT is intialised automatically, except another output target will be used */ if (dlt_init_file(fvalue) < 0) /* log to file */ return -1; } dlt_register_app("LOG", "Test Application for Logging"); dlt_register_context(&mycontext, "TEST", "Test Context for Logging"); dlt_register_injection_callback(&mycontext, 0xFFF, dlt_user_injection_callback); text = message; if (gflag) dlt_nonverbose_mode(); if (aflag) dlt_enable_local_print(); if (nvalue) maxnum = atoi(nvalue); else maxnum = 10; if (dvalue) delay = atoi(dvalue) * 1000000; else delay = 500 * 1000000; if (gflag) { /* DLT messages to test Fibex non-verbose description: dlt-example-non-verbose.xml */ if (dlt_user_log_write_start_id(&mycontext, &mycontextdata, DLT_LOG_INFO, 10) > 0) dlt_user_log_write_finish(&mycontextdata); if (dlt_user_log_write_start_id(&mycontext, &mycontextdata, DLT_LOG_INFO, 11) > 0) { dlt_user_log_write_uint16(&mycontextdata, 1011); dlt_user_log_write_finish(&mycontextdata); } if (dlt_user_log_write_start_id(&mycontext, &mycontextdata, DLT_LOG_INFO, 12) > 0) { dlt_user_log_write_uint32(&mycontextdata, 1012); dlt_user_log_write_uint32(&mycontextdata, 1013); dlt_user_log_write_finish(&mycontextdata); } if (dlt_user_log_write_start_id(&mycontext, &mycontextdata, DLT_LOG_INFO, 13) > 0) { dlt_user_log_write_uint8(&mycontextdata, 123); dlt_user_log_write_float32(&mycontextdata, 1.12); dlt_user_log_write_finish(&mycontextdata); } if (dlt_user_log_write_start_id(&mycontext, &mycontextdata, DLT_LOG_INFO, 14) > 0) { dlt_user_log_write_string(&mycontextdata, "DEAD BEEF"); dlt_user_log_write_finish(&mycontextdata); } } for (num = 0; num < maxnum; num++) { printf("Send %d %s\n", num, text); if (gflag) { /* Non-verbose mode */ if (dlt_user_log_write_start_id(&mycontext, &mycontextdata, DLT_LOG_WARN, num) > 0) { dlt_user_log_write_int(&mycontextdata, num); dlt_user_log_write_string(&mycontextdata, text); dlt_user_log_write_finish(&mycontextdata); } } else /* Verbose mode */ if (dlt_user_log_write_start(&mycontext, &mycontextdata, DLT_LOG_WARN) > 0) { dlt_user_log_write_int(&mycontextdata, num); dlt_user_log_write_string(&mycontextdata, text); dlt_user_log_write_finish(&mycontextdata); } if (delay > 0) { ts.tv_sec = delay / 1000000000; ts.tv_nsec = delay % 1000000000; nanosleep(&ts, NULL); } } dlt_unregister_context(&mycontext); dlt_unregister_app(); return 0; } int dlt_user_injection_callback(uint32_t service_id, void *data, uint32_t length) { char text[1024]; printf("Injection %d, Length=%d \n", service_id, length); if (length > 0) { dlt_print_mixed_string(text, 1024, data, length, 0); printf("%s \n", text); } return 0; } dlt-daemon-2.18.6/src/examples/dlt-example-user.c000066400000000000000000000343521377520261000216070ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-example-user.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-example-user.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include #include #include /* for printf() and fprintf() */ #include /* for atoi() and exit() */ #include /* for memset() */ #include /* for close() */ #include "dlt.h" #include "dlt_common.h" /* for dlt_get_version() */ int dlt_user_injection_callback(uint32_t service_id, void *data, uint32_t length); int dlt_user_injection_callback_with_specific_data(uint32_t service_id, void *data, uint32_t length, void *priv_data); void dlt_user_log_level_changed_callback(char context_id[DLT_ID_SIZE], uint8_t log_level, uint8_t trace_status); DLT_DECLARE_CONTEXT(mycontext1) DLT_DECLARE_CONTEXT(mycontext2) DLT_DECLARE_CONTEXT(mycontext3) /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-example-user [options] message\n"); printf("Generate DLT messages and store them to file or send them to daemon.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -d delay Milliseconds to wait between sending messages (Default: 500)\n"); printf(" -f filename Use local log file instead of sending to daemon\n"); printf(" -n count Number of messages to be generated (Default: 10)\n"); printf(" -g Switch to non-verbose mode (Default: verbose mode)\n"); printf(" -a Enable local printing of DLT messages (Default: disabled)\n"); printf(" -k Send marker message\n"); printf(" -m mode Set log mode 0=off, 1=external, 2=internal, 3=both\n"); printf(" -l level Set log level to , level=-1..6\n"); printf(" -C ContextID Set context ID for send message (Default: TEST)\n"); printf(" -A AppID Set app ID for send message (Default: LOG)\n"); printf(" -t timeout Set timeout when sending messages at exit, in ms (Default: 10000 = 10sec)\n"); printf(" -r size Send raw data with specified size instead of string\n"); #ifdef DLT_TEST_ENABLE printf(" -c Corrupt user header\n"); printf(" -s size Corrupt message size\n"); printf(" -z size Size of message\n"); #endif /* DLT_TEST_ENABLE */ } /** * Main function of tool. */ int main(int argc, char *argv[]) { int gflag = 0; int aflag = 0; int kflag = 0; #ifdef DLT_TEST_ENABLE int cflag = 0; char *svalue = 0; char *zvalue = 0; #endif /* DLT_TEST_ENABLE */ char *dvalue = 0; char *fvalue = 0; char *nvalue = 0; char *mvalue = 0; char *message = 0; int lvalue = DLT_LOG_WARN; char *tvalue = 0; int rvalue = -1; int index; int c; char *appID = "LOG"; char *contextID = "TEST"; char *text; int num, maxnum; int delay; struct timespec ts; int state = -1, newstate; opterr = 0; #ifdef DLT_TEST_ENABLE while ((c = getopt (argc, argv, "vgakcd:f:n:m:z:r:s:l:t:A:C:")) != -1) #else while ((c = getopt (argc, argv, "vgakd:f:n:m:l:r:t:A:C:")) != -1) #endif /* DLT_TEST_ENABLE */ { switch (c) { case 'g': { gflag = 1; break; } case 'a': { aflag = 1; break; } case 'k': { kflag = 1; break; } #ifdef DLT_TEST_ENABLE case 'c': { cflag = 1; break; } case 's': { svalue = optarg; break; } case 'z': { zvalue = optarg; break; } #endif /* DLT_TEST_ENABLE */ case 'd': { dvalue = optarg; break; } case 'f': { fvalue = optarg; break; } case 'n': { nvalue = optarg; break; } case 'm': { mvalue = optarg; break; } case 'l': { lvalue = atoi(optarg); break; } case 'A': { appID = optarg; break; } case 'C': { contextID = optarg; break; } case 't': { tvalue = optarg; break; } case 'r': { rvalue = atoi(optarg); break; } case '?': { if ((optopt == 'd') || (optopt == 'f') || (optopt == 'n') || (optopt == 'l') || (optopt == 't')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { abort (); break;/*for parasoft */ } } } if (rvalue == -1) { for (index = optind; index < argc; index++) message = argv[index]; } else { /* allocate raw buffer */ message = calloc(sizeof(char), (size_t) rvalue); memset(message, 'X', (size_t) (rvalue - 1)) ; } if (message == 0) { /* no message, show usage and terminate */ fprintf(stderr, "ERROR: No message selected\n"); usage(); return -1; } if (fvalue) { /* DLT is initialized automatically, except another output target will be used */ if (dlt_init_file(fvalue) < 0) /* log to file */ return -1; } dlt_with_session_id(1); dlt_with_timestamp(1); dlt_with_ecu_id(1); dlt_verbose_mode(); DLT_REGISTER_APP(appID, "Test Application for Logging"); DLT_REGISTER_CONTEXT(mycontext1, contextID, "Test Context for Logging"); DLT_REGISTER_CONTEXT_LLCCB(mycontext2, "TS1", "Test Context1 for injection", dlt_user_log_level_changed_callback); DLT_REGISTER_CONTEXT_LLCCB(mycontext3, "TS2", "Test Context2 for injection", dlt_user_log_level_changed_callback); DLT_REGISTER_INJECTION_CALLBACK(mycontext1, 0x1000, dlt_user_injection_callback); DLT_REGISTER_INJECTION_CALLBACK_WITH_ID(mycontext2, 0x1000, dlt_user_injection_callback_with_specific_data, (void *)"TS1 context"); DLT_REGISTER_INJECTION_CALLBACK(mycontext2, 0x1001, dlt_user_injection_callback); DLT_REGISTER_INJECTION_CALLBACK_WITH_ID(mycontext3, 0x1000, dlt_user_injection_callback_with_specific_data, (void *)"TS2 context"); DLT_REGISTER_INJECTION_CALLBACK(mycontext3, 0x1001, dlt_user_injection_callback); DLT_REGISTER_LOG_LEVEL_CHANGED_CALLBACK(mycontext1, dlt_user_log_level_changed_callback); text = message; if (mvalue) { printf("Set log mode to %d\n", atoi(mvalue)); dlt_set_log_mode(atoi(mvalue)); } if (gflag) DLT_NONVERBOSE_MODE(); if (aflag) DLT_ENABLE_LOCAL_PRINT(); if (kflag) DLT_LOG_MARKER(); if (nvalue) maxnum = atoi(nvalue); else maxnum = 10; if (dvalue) delay = atoi(dvalue); else delay = 500; if (tvalue) dlt_set_resend_timeout_atexit((uint32_t) atoi(tvalue)); if (gflag) { /* DLT messages to test Fibex non-verbose description: dlt-example-non-verbose.xml */ DLT_LOG_ID(mycontext1, DLT_LOG_INFO, 10); DLT_LOG_ID(mycontext1, DLT_LOG_INFO, 11, DLT_UINT16(1011)); DLT_LOG_ID(mycontext1, DLT_LOG_INFO, 12, DLT_UINT32(1012), DLT_UINT32(1013)); DLT_LOG_ID(mycontext1, DLT_LOG_INFO, 13, DLT_UINT8(123), DLT_FLOAT32(1.12)); DLT_LOG_ID(mycontext1, DLT_LOG_INFO, 14, DLT_STRING("DEAD BEEF")); } #ifdef DLT_TEST_ENABLE if (cflag) dlt_user_test_corrupt_user_header(1); if (svalue) dlt_user_test_corrupt_message_size(1, atoi(svalue)); if (zvalue) { char *buffer = malloc(atoi(zvalue)); if (buffer == 0) { /* no message, show usage and terminate */ fprintf(stderr, "Cannot allocate buffer memory!\n"); return -1; } DLT_LOG(mycontext1, DLT_LOG_WARN, DLT_STRING(text), DLT_RAW(buffer, atoi(zvalue))); free(buffer); } #endif /* DLT_TEST_ENABLE */ for (num = 0; num < maxnum; num++) { printf("Send %d %s\n", num, text); newstate = dlt_get_log_state(); if (state != newstate) { state = newstate; if (state == -1) printf("Client unknown state!\n"); else if (state == 0) printf("Client disconnected!\n"); else if (state == 1) printf("Client connected!\n"); } if (gflag) { /* Non-verbose mode */ DLT_LOG_ID(mycontext1, lvalue, num, DLT_INT(num), DLT_STRING(text)); } else { if (rvalue == -1) /* Verbose mode */ DLT_LOG(mycontext1, lvalue, DLT_INT(num), DLT_STRING(text)); else DLT_LOG(mycontext1, lvalue, DLT_RAW(text, rvalue)); } if (delay > 0) { ts.tv_sec = delay / 1000; ts.tv_nsec = (delay % 1000) * 1000000; nanosleep(&ts, NULL); } } sleep(1); DLT_UNREGISTER_CONTEXT(mycontext1); DLT_UNREGISTER_APP(); return 0; } int dlt_user_injection_callback(uint32_t service_id, void *data, uint32_t length) { char text[1024]; DLT_LOG(mycontext1, DLT_LOG_INFO, DLT_STRING("Injection: "), DLT_UINT32(service_id)); printf("Injection %d, Length=%d \n", service_id, length); if (length > 0) { dlt_print_mixed_string(text, 1024, data, length, 0); DLT_LOG(mycontext1, DLT_LOG_INFO, DLT_STRING("Data: "), DLT_STRING(text)); printf("%s \n", text); } return 0; } int dlt_user_injection_callback_with_specific_data(uint32_t service_id, void *data, uint32_t length, void *priv_data) { char text[1024]; DLT_LOG(mycontext1, DLT_LOG_INFO, DLT_STRING("Injection: "), DLT_UINT32(service_id)); printf("Injection %d, Length=%d \n", service_id, length); if (length > 0) { dlt_print_mixed_string(text, 1024, data, length, 0); DLT_LOG(mycontext1, DLT_LOG_INFO, DLT_STRING("Data: "), DLT_STRING(text), DLT_STRING(priv_data)); printf("%s \n", text); } return 0; } void dlt_user_log_level_changed_callback(char context_id[DLT_ID_SIZE], uint8_t log_level, uint8_t trace_status) { char text[5]; text[4] = 0; memcpy(text, context_id, DLT_ID_SIZE); printf("Log level changed of context %s, LogLevel=%u, TraceState=%u \n", text, log_level, trace_status); } dlt-daemon-2.18.6/src/gateway/000077500000000000000000000000001377520261000160675ustar00rootroot00000000000000dlt-daemon-2.18.6/src/gateway/CMakeLists.txt000066400000000000000000000012501377520261000206250ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2015, Advanced Driver Information Technology # This code is developed by Advanced Driver Information Technology. # Copyright of Advanced Driver Information Technology, Bosch and DENSO. # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### INSTALL(FILES dlt_gateway.conf DESTINATION ${CONFIGURATION_FILES_DIR} COMPONENT base) dlt-daemon-2.18.6/src/gateway/dlt_gateway.c000066400000000000000000001637161377520261000205550ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Christoph Lipka * Saya Sugiura * * \copyright Copyright Š 2015-2018 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_gateway.c */ #include #include #include #include #include #include #include #include #include #include #include "dlt_gateway.h" #include "dlt_gateway_internal.h" #include "dlt_config_file_parser.h" #include "dlt_common.h" #include "dlt-daemon_cfg.h" #include "dlt_daemon_common_cfg.h" #include "dlt_daemon_event_handler.h" #include "dlt_daemon_connection.h" #include "dlt_daemon_client.h" #include "dlt_daemon_offline_logstorage.h" /** * Check if given string is a valid IP address * * @param con DltGatewayConnection to be updated * @param value string to be tested * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_check_ip(DltGatewayConnection *con, char *value) { struct sockaddr_in sa; int ret = DLT_RETURN_ERROR; if ((con == NULL) || (value == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } ret = inet_pton(AF_INET, value, &(sa.sin_addr)); /* valid IP address */ if (ret != 0) { con->ip_address = strdup(value); if (con->ip_address == NULL) { dlt_log(LOG_ERR, "Cannot copy passive node IP address string\n"); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } else { dlt_log(LOG_ERR, "IP address is not valid\n"); } return DLT_RETURN_ERROR; } /** * Check port number * * @param con DltGatewayConnection to be updated * @param value string to be tested * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_check_port(DltGatewayConnection *con, char *value) { long int tmp = -1; if ((con == NULL) || (value == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } errno = 0; tmp = strtol(value, NULL, 10); if ((errno == ERANGE && (tmp == LONG_MAX || tmp == LONG_MIN)) || (errno != 0 && tmp == 0)) { dlt_vlog(LOG_ERR, "%s: cannot convert port number\n", __func__); return DLT_RETURN_ERROR; } /* port ranges for unprivileged applications */ if ((tmp > IPPORT_RESERVED) && ((unsigned)tmp <= USHRT_MAX)) { con->port = (int)tmp; return DLT_RETURN_OK; } else { dlt_log(LOG_ERR, "Port number is invalid\n"); } return DLT_RETURN_ERROR; } /** * Check ECU name * * @param con DltGatewayConnection to be updated * @param value string to be used as ECU identifier * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_check_ecu(DltGatewayConnection *con, char *value) { if ((con == NULL) || (value == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } con->ecuid = strdup(value); if (con->ecuid == NULL) return DLT_RETURN_ERROR; return DLT_RETURN_OK; } /** * Check connection trigger * * @param con DltGatewayConnection to be updated * @param value string to be tested * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_check_connect_trigger(DltGatewayConnection *con, char *value) { if ((con == NULL) || (value == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (strncasecmp(value, "OnStartup", strlen("OnStartup")) == 0) { con->trigger = DLT_GATEWAY_ON_STARTUP; } else if (strncasecmp(value, "OnDemand", strlen("OnDemand")) == 0) { con->trigger = DLT_GATEWAY_ON_DEMAND; } else { dlt_log(LOG_ERR, "Wrong connection trigger state given.\n"); con->trigger = DLT_GATEWAY_UNDEFINED; return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } /** * Check connection timeout value * * @param con DltGatewayConnection to be updated * @param value string to be tested * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_check_timeout(DltGatewayConnection *con, char *value) { if ((con == NULL) || (value == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } con->timeout = (int)strtol(value, NULL, 10); if (con->timeout >= 0) return DLT_RETURN_OK; return DLT_RETURN_ERROR; } /** * Check connection interval value in General section * * @param con DltGateway to be updated * @param value string to be tested * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_check_interval(DltGateway *gateway, char *value) { if ((gateway == NULL) || (value == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } gateway->interval = (int)strtol(value, NULL, 10); if (gateway->interval > 0) return DLT_RETURN_OK; return DLT_RETURN_ERROR; } /** * Check the value for SendSerialHeader * * @param con DltGatewayConnection to be updated * @param value string to be tested * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_check_send_serial(DltGatewayConnection *con, char *value) { if ((con == NULL) || (value == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } con->send_serial = !!((int)strtol(value, NULL, 10)); return DLT_RETURN_OK; } /** * Allocate passive control messages * * @param con DltGatewayConnection to be updated * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_allocate_control_messages(DltGatewayConnection *con) { if (con == NULL) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (con->p_control_msgs == NULL) { con->p_control_msgs = calloc(1, sizeof(DltPassiveControlMessage)); if (!con->p_control_msgs) { dlt_log(LOG_ERR, "Passive Control Message could not be allocated\n"); return DLT_RETURN_ERROR; } } else { con->p_control_msgs->next = calloc(1, sizeof(DltPassiveControlMessage)); if (!con->p_control_msgs->next) { dlt_log(LOG_ERR, "Passive Control Message could not be allocated\n"); return DLT_RETURN_ERROR; } con->p_control_msgs = con->p_control_msgs->next; } return DLT_RETURN_OK; } /** * Check the specified control messages identifier * * @param con DltGatewayConnection to be updated * @param value string to be tested * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_check_control_messages(DltGatewayConnection *con, char *value) { /* list of allowed clients given */ char *token = NULL; char *rest = NULL; DltPassiveControlMessage *head = NULL; if ((con == NULL) || (value == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (strlen(value) == 0) return DLT_RETURN_OK; /* set on startup control msg id and interval*/ token = strtok_r(value, ",", &rest); while (token != NULL) { if (dlt_gateway_allocate_control_messages(con) != DLT_RETURN_OK) { dlt_log(LOG_ERR, "Passive Control Message could not be allocated\n"); return DLT_RETURN_ERROR; } con->p_control_msgs->id = (uint32_t) strtol(token, NULL, 16); con->p_control_msgs->user_id = DLT_SERVICE_ID_PASSIVE_NODE_CONNECT; con->p_control_msgs->type = CONTROL_MESSAGE_ON_STARTUP; con->p_control_msgs->req = CONTROL_MESSAGE_NOT_REQUESTED; con->p_control_msgs->interval = -1; if (head == NULL) head = con->p_control_msgs; if ((errno == EINVAL) || (errno == ERANGE)) { dlt_vlog(LOG_ERR, "Control message ID is not an integer: %s\n", token); return DLT_RETURN_ERROR; } else if ((con->p_control_msgs->id < DLT_SERVICE_ID_SET_LOG_LEVEL) || (con->p_control_msgs->id >= DLT_SERVICE_ID_LAST_ENTRY)) { dlt_vlog(LOG_ERR, "Control message ID is not valid: %s\n", token); return DLT_RETURN_ERROR; } token = strtok_r(NULL, ",", &rest); } /* get back to head */ con->p_control_msgs = head; con->head = head; return DLT_RETURN_OK; } /** * Check the specified periodic control messages identifier * * @param con DltGatewayConnection to be updated * @param value string to be tested * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_check_periodic_control_messages( DltGatewayConnection *con, char *value) { char *token = NULL; char *rest = NULL; DltPassiveControlMessage *head = NULL; if ((con == NULL) || (value == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (strlen(value) == 0) return DLT_RETURN_OK; /* store head address */ head = con->p_control_msgs; /* set periodic control msg id and interval*/ token = strtok_r(value, ",", &rest); while (token != NULL) { char *p_token = NULL; char *p_rest = NULL; uint32_t id = 0; p_token = strtok_r(token, ":", &p_rest); if ((p_token != NULL) && (strlen(p_token) != 0)) { id = (uint32_t) strtol(p_token, NULL, 16); /* get back to head */ con->p_control_msgs = head; /* check if there is already id set in p_control_msgs */ while (con->p_control_msgs != NULL) { if (con->p_control_msgs->id == id) { con->p_control_msgs->type = CONTROL_MESSAGE_BOTH; con->p_control_msgs->interval = (int) strtol(p_rest, NULL, 10); if (con->p_control_msgs->interval <= 0) dlt_vlog(LOG_WARNING, "%s interval is %d. It won't be send periodically.\n", dlt_get_service_name(con->p_control_msgs->id), con->p_control_msgs->interval); break; } con->p_control_msgs = con->p_control_msgs->next; } /* if the id is not added yet, p_control_msgs supposed to be NULL */ if (con->p_control_msgs == NULL) { /* get back to head */ con->p_control_msgs = head; /* go to last pointer */ while (con->p_control_msgs != NULL) { if (con->p_control_msgs->next == NULL) break; con->p_control_msgs = con->p_control_msgs->next; } if (dlt_gateway_allocate_control_messages(con) != DLT_RETURN_OK) { dlt_log(LOG_ERR, "Passive Control Message could not be allocated\n"); return DLT_RETURN_ERROR; } con->p_control_msgs->id = id; con->p_control_msgs->user_id = DLT_SERVICE_ID_PASSIVE_NODE_CONNECT; con->p_control_msgs->type = CONTROL_MESSAGE_PERIODIC; con->p_control_msgs->req = CONTROL_MESSAGE_NOT_REQUESTED; con->p_control_msgs->interval = (int) strtol(p_rest, NULL, 10); if (con->p_control_msgs->interval <= 0) dlt_vlog(LOG_WARNING, "%s interval is %d. It won't be send periodically.\n", dlt_get_service_name(con->p_control_msgs->id), con->p_control_msgs->interval); if (head == NULL) head = con->p_control_msgs; } } if ((errno == EINVAL) || (errno == ERANGE)) { dlt_vlog(LOG_ERR, "Control message ID is not an integer: %s\n", p_token); return DLT_RETURN_ERROR; } else if ((con->p_control_msgs->id < DLT_SERVICE_ID_SET_LOG_LEVEL) || (con->p_control_msgs->id >= DLT_SERVICE_ID_LAST_ENTRY)) { dlt_vlog(LOG_ERR, "Control message ID is not valid: %s\n", p_token); return DLT_RETURN_ERROR; } token = strtok_r(NULL, ",", &rest); } /* get back to head */ con->p_control_msgs = head; con->head = head; return DLT_RETURN_OK; } /** * Expected entries for a passive node configuration * Caution: after changing entries here, * dlt_gateway_check_param needs to be updated as well * */ DLT_STATIC DltGatewayConf configuration_entries[GW_CONF_COUNT] = { [GW_CONF_IP_ADDRESS] = { .key = "IPaddress", .func = dlt_gateway_check_ip, .is_opt = 0 }, [GW_CONF_PORT] = { .key = "Port", .func = dlt_gateway_check_port, .is_opt = 1 }, [GW_CONF_ECUID] = { .key = "EcuID", .func = dlt_gateway_check_ecu, .is_opt = 0 }, [GW_CONF_CONNECT] = { .key = "Connect", .func = dlt_gateway_check_connect_trigger, .is_opt = 1 }, [GW_CONF_TIMEOUT] = { .key = "Timeout", .func = dlt_gateway_check_timeout, .is_opt = 0 }, [GW_CONF_SEND_CONTROL] = { .key = "SendControl", .func = dlt_gateway_check_control_messages, .is_opt = 1 }, [GW_CONF_SEND_PERIODIC_CONTROL] = { .key = "SendPeriodicControl", .func = dlt_gateway_check_periodic_control_messages, .is_opt = 1 }, [GW_CONF_SEND_SERIAL_HEADER] = { .key = "SendSerialHeader", .func = dlt_gateway_check_send_serial, .is_opt = 1 } }; DLT_STATIC DltGatewayGeneralConf general_entries[GW_CONF_COUNT] = { [GW_CONF_GENERAL_INTERVAL] = { .key = "Interval", .func = dlt_gateway_check_interval, .is_opt = 1 } }; #define DLT_GATEWAY_NUM_PROPERTIES_MAX GW_CONF_COUNT /** * Check if gateway connection general configuration parameter is valid. * * @param gateway DltGateway * @param ctype DltGatwayGeneralConnection property * @param value specified property value from configuration file * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_check_general_param(DltGateway *gateway, DltGatewayGeneralConfType ctype, char *value) { if ((gateway == NULL) || (value == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (ctype < GW_CONF_GENEREL_COUNT) return general_entries[ctype].func(gateway, value); return DLT_RETURN_ERROR; } /** * Check if gateway connection configuration parameter is valid. * * @param gateway DltGateway * @param con DltGatewayConnection * @param ctype DltGatwayConnection property * @param value specified property value from configuration file * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_check_param(DltGateway *gateway, DltGatewayConnection *con, DltGatewayConfType ctype, char *value) { if ((gateway == NULL) || (con == NULL) || (value == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (ctype < GW_CONF_COUNT) return configuration_entries[ctype].func(con, value); return DLT_RETURN_ERROR; } /** * Store gateway connection in internal data structure * * @param gateway DltGatway * @param tmp DltGatewayConnection * @param verbose verbose flag * @return 0 on success, -1 otherwise */ int dlt_gateway_store_connection(DltGateway *gateway, DltGatewayConnection *tmp, int verbose) { int i = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((gateway == NULL) || (tmp == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } /* find next free entry in connection array */ while (i < gateway->num_connections) { if (gateway->connections[i].status == DLT_GATEWAY_UNINITIALIZED) break; i++; } if (&(gateway->connections[i]) == NULL) return DLT_RETURN_ERROR; /* store values */ gateway->connections[i].ip_address = strdup(tmp->ip_address); gateway->connections[i].ecuid = strdup(tmp->ecuid); gateway->connections[i].sock_domain = tmp->sock_domain; gateway->connections[i].sock_type = tmp->sock_type; gateway->connections[i].sock_protocol = tmp->sock_protocol; gateway->connections[i].port = tmp->port; gateway->connections[i].trigger = tmp->trigger; gateway->connections[i].timeout = tmp->timeout; gateway->connections[i].handle = 0; gateway->connections[i].status = DLT_GATEWAY_INITIALIZED; gateway->connections[i].p_control_msgs = tmp->p_control_msgs; gateway->connections[i].head = tmp->head; gateway->connections[i].send_serial = tmp->send_serial; if (dlt_client_init_port(&gateway->connections[i].client, gateway->connections[i].port, verbose) != 0) { free(gateway->connections[i].ip_address); gateway->connections[i].ip_address = NULL; free(gateway->connections[i].ecuid); gateway->connections[i].ecuid = NULL; free(gateway->connections[i].p_control_msgs); gateway->connections[i].p_control_msgs = NULL; dlt_log(LOG_CRIT, "dlt_client_init_port() failed for gateway connection\n"); return DLT_RETURN_ERROR; } /* setup DltClient Structure */ if (dlt_client_set_server_ip(&gateway->connections[i].client, gateway->connections[i].ip_address) == -1) { dlt_log(LOG_ERR, "dlt_client_set_server_ip() failed for gateway connection \n"); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } /** * Read configuration file and initialize connection data structures * * @param gateway DltGateway * @param config_file Gateway configuration * @param verbose verbose flag * @return 0 on success, -1 otherwise */ int dlt_gateway_configure(DltGateway *gateway, char *config_file, int verbose) { int ret = 0; int i = 0; DltConfigFile *file = NULL; int num_sections = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((gateway == NULL) || (config_file == 0) || (config_file[0] == '\0')) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } /* read configuration file */ file = dlt_config_file_init(config_file); /* get number of entries and allocate memory to store information */ ret = dlt_config_file_get_num_sections(file, &num_sections); if (ret != 0) { dlt_config_file_release(file); dlt_log(LOG_ERR, "Invalid number of sections in configuration file\n"); return DLT_RETURN_ERROR; } ret = dlt_config_file_check_section_name_exists(file, DLT_GATEWAY_GENERAL_SECTION_NAME); if (ret == -1) { /* * No General section in configuration file. * Try to use default for interval. */ gateway->num_connections = num_sections; dlt_vlog(LOG_WARNING, "Missing General section in gateway. Using default interval %d (secs)\n", gateway->interval); } else { /* * Since the General section is also counted in num_sections, * so number of connections must be number of sections - 1. */ gateway->num_connections = num_sections - 1; } gateway->connections = calloc((size_t) gateway->num_connections, sizeof(DltGatewayConnection)); if (gateway->connections == NULL) { dlt_config_file_release(file); dlt_log(LOG_CRIT, "Memory allocation for gateway connections failed\n"); return DLT_RETURN_ERROR; } for (i = 0; i < num_sections; i++) { DltGatewayConnection tmp; int invalid = 0; DltGatewayConfType j = 0; DltGatewayGeneralConfType g = 0; char section[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = { '\0' }; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = { '\0' }; memset(&tmp, 0, sizeof(tmp)); /* Set default */ tmp.send_serial = gateway->send_serial; tmp.port = DLT_DAEMON_TCP_PORT; ret = dlt_config_file_get_section_name(file, i, section); if (ret != 0) { dlt_log(LOG_WARNING, "Get section name failed\n"); continue; } if (strncmp(section, DLT_GATEWAY_GENERAL_SECTION_NAME, sizeof(DLT_GATEWAY_GENERAL_SECTION_NAME)) == 0) { for (g = 0; g < GW_CONF_GENEREL_COUNT; g++) { ret = dlt_config_file_get_value(file, section, general_entries[g].key, value); if ((ret != 0) && general_entries[g].is_opt) { /* Use default values for this key */ dlt_vlog(LOG_WARNING, "Using default for %s.\n", general_entries[g].key); continue; } else if (ret != 0) { dlt_vlog(LOG_WARNING, "Missing configuration for %s.\n", general_entries[g].key); break; } /* check value and store general configuration */ ret = dlt_gateway_check_general_param(gateway, g, value); if (ret != 0) dlt_vlog(LOG_ERR, "Configuration %s = %s is invalid. Using default.\n", general_entries[g].key, value); } } else { for (j = 0; j < GW_CONF_COUNT; j++) { ret = dlt_config_file_get_value(file, section, configuration_entries[j].key, value); if ((ret != 0) && configuration_entries[j].is_opt) { /* Use default values for this key */ dlt_vlog(LOG_WARNING, "Using default for %s.\n", configuration_entries[j].key); continue; } else if (ret != 0) { dlt_vlog(LOG_WARNING, "Missing configuration for %s.\n", configuration_entries[j].key); invalid = 1; break; } /* check value and store temporary */ ret = dlt_gateway_check_param(gateway, &tmp, j, value); if (ret != 0) dlt_vlog(LOG_ERR, "Configuration %s = %s is invalid.\n" "Using default.\n", configuration_entries[j].key, value); } if (invalid) { dlt_vlog(LOG_ERR, "%s configuration is invalid.\n" "Ignoring.\n", section); } else { ret = dlt_gateway_store_connection(gateway, &tmp, verbose); if (ret != 0) dlt_log(LOG_ERR, "Storing gateway connection data failed\n"); } } /* strdup used inside some get_value function */ if (tmp.ecuid != NULL) { free(tmp.ecuid); tmp.ecuid = NULL; } if (tmp.ip_address != NULL) { free(tmp.ip_address); tmp.ip_address = NULL; } } dlt_config_file_release(file); return ret; } int dlt_gateway_init(DltDaemonLocal *daemon_local, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (daemon_local == NULL) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } DltGateway *gateway = &daemon_local->pGateway; if (gateway != NULL) { /* Get default value from daemon_local */ gateway->send_serial = daemon_local->flags.lflag; gateway->interval = DLT_GATEWAY_TIMER_DEFAULT_INTERVAL; if (dlt_gateway_configure(gateway, daemon_local->flags.gatewayConfigFile, verbose) != 0) { dlt_log(LOG_ERR, "Gateway initialization failed\n"); return DLT_RETURN_ERROR; } } else { dlt_log(LOG_CRIT, "Pointer to Gateway structure is NULL\n"); return DLT_RETURN_ERROR; } /* ignore return value */ dlt_gateway_establish_connections(gateway, daemon_local, verbose); return DLT_RETURN_OK; } void dlt_gateway_deinit(DltGateway *gateway, int verbose) { DltPassiveControlMessage *msg; int i = 0; if (gateway == NULL) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return; } PRINT_FUNCTION_VERBOSE(verbose); for (i = 0; i < gateway->num_connections; i++) { DltGatewayConnection *c = &gateway->connections[i]; dlt_client_cleanup(&c->client, verbose); free(c->ip_address); c->ip_address = NULL; free(c->ecuid); c->ecuid = NULL; while (c->p_control_msgs != NULL) { msg = c->p_control_msgs->next; free(c->p_control_msgs); c->p_control_msgs = msg; } } free(gateway->connections); gateway->connections = NULL; } /** * If connection to passive node established, add to event loop * * @param daemon_local DltDaemonLocal * @param con DltGatewayConnection * @param verbose verbose flag * @return 0 on success, -1 otherwise */ DLT_STATIC int dlt_gateway_add_to_event_loop(DltDaemonLocal *daemon_local, DltGatewayConnection *con, int verbose) { DltPassiveControlMessage *control_msg = NULL; int sendtime = 1; if ((daemon_local == NULL) || (con == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } /* connection to passive node established, add to event loop */ con->status = DLT_GATEWAY_CONNECTED; con->reconnect_cnt = 0; con->timeout_cnt = 0; con->sendtime_cnt = 0; /* setup dlt connection and add to poll event loop here */ if (dlt_connection_create(daemon_local, &daemon_local->pEvent, con->client.sock, POLLIN, DLT_CONNECTION_GATEWAY) != 0) { dlt_log(LOG_ERR, "Gateway connection creation failed\n"); return DLT_RETURN_ERROR; } /* immediately send configured control messages */ control_msg = con->p_control_msgs; while (control_msg != NULL) { if ((control_msg->type == CONTROL_MESSAGE_ON_STARTUP) || (control_msg->type == CONTROL_MESSAGE_BOTH)) { if (dlt_gateway_send_control_message(con, control_msg, NULL, verbose) == DLT_RETURN_OK) control_msg->req = CONTROL_MESSAGE_REQUESTED; } /* multiply periodic sending time */ if (((control_msg->type == CONTROL_MESSAGE_PERIODIC) || (control_msg->type == CONTROL_MESSAGE_BOTH)) && (control_msg->interval > 0)) sendtime *= control_msg->interval; control_msg = control_msg->next; } /* set periodic sending time */ con->sendtime = sendtime; con->sendtime_cnt = con->sendtime; return DLT_RETURN_OK; } int dlt_gateway_establish_connections(DltGateway *gateway, DltDaemonLocal *daemon_local, int verbose) { int i = 0; int ret = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((gateway == NULL) || (daemon_local == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } for (i = 0; i < gateway->num_connections; i++) { DltGatewayConnection *con = &(gateway->connections[i]); DltPassiveControlMessage *control_msg = NULL; if (con == NULL) { dlt_log(LOG_CRIT, "Cannot retrieve gateway connection details\n"); return DLT_RETURN_ERROR; } if ((con->status != DLT_GATEWAY_CONNECTED) && (con->trigger != DLT_GATEWAY_ON_DEMAND) && (con->trigger != DLT_GATEWAY_DISABLED)) { ret = dlt_client_connect(&con->client, verbose); if (ret == 0) { /* setup dlt connection and add to poll event loop here */ if (dlt_gateway_add_to_event_loop(daemon_local, con, verbose) != DLT_RETURN_OK) { dlt_log(LOG_ERR, "Gateway connection creation failed\n"); return DLT_RETURN_ERROR; } } else { dlt_log(LOG_DEBUG, "Passive Node is not up. Connection failed.\n"); con->timeout_cnt++; if (con->timeout > 0) { if (con->timeout_cnt > con->timeout) { con->trigger = DLT_GATEWAY_DISABLED; dlt_log(LOG_WARNING, "Passive Node connection retry timed out. " "Give up.\n"); } } else if (con->timeout == 0) { dlt_vlog(LOG_DEBUG, "Retried [%d] times\n", con->timeout_cnt); } } } else if ((con->status == DLT_GATEWAY_CONNECTED) && (con->trigger != DLT_GATEWAY_DISABLED)) { /* setup dlt connection and add to poll event loop here */ if (dlt_connection_create(daemon_local, &daemon_local->pEvent, con->client.sock, POLLIN, DLT_CONNECTION_GATEWAY) != 0) { dlt_log(LOG_ERR, "Gateway connection creation failed\n"); return DLT_RETURN_ERROR; } /* immediately send periodic configured control messages */ control_msg = con->p_control_msgs; while (control_msg != NULL) { if ((control_msg->type == CONTROL_MESSAGE_PERIODIC) || (control_msg->type == CONTROL_MESSAGE_BOTH)) { if (dlt_gateway_send_control_message(con, control_msg, NULL, verbose) == DLT_RETURN_OK) control_msg->req = CONTROL_MESSAGE_REQUESTED; } control_msg = control_msg->next; } /* check sendtime counter */ if (con->sendtime_cnt > 0) con->sendtime_cnt--; if (con->sendtime_cnt == 0) con->sendtime_cnt = con->sendtime; } } return DLT_RETURN_OK; } DltReceiver *dlt_gateway_get_connection_receiver(DltGateway *gateway, int fd) { int i = 0; if (gateway == NULL) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return NULL; } for (i = 0; i < gateway->num_connections; i++) { DltGatewayConnection *c = &gateway->connections[i]; if ((c->status == DLT_GATEWAY_CONNECTED) && (c->client.sock == fd)) return &c->client.receiver; } return NULL; } /** * Parse GET_LOG_INFO * * @param daemon DltDaemon * @param ecu Ecu ID * @param msg DltMessage * @param req 1 if requested from gateway, 0 otherwise * @param verbose verbose flag * @return Value from DltReturnValue enum */ DLT_STATIC DltReturnValue dlt_gateway_parse_get_log_info(DltDaemon *daemon, char *ecu, DltMessage *msg, int req, int verbose) { char resp_text[DLT_RECEIVE_BUFSIZE] = { '\0' }; DltServiceGetLogInfoResponse *resp = NULL; AppIDsType app; ContextIDsInfoType con; int i = 0; int j = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((msg == NULL) || (msg->databuffer == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServiceGetLogInfoResponse)) < 0) return DLT_RETURN_ERROR; /* if the request was send from gateway, clear all application and context list */ if (req == CONTROL_MESSAGE_REQUESTED) { /* clear application list */ if (dlt_daemon_applications_clear(daemon, ecu, verbose) == DLT_RETURN_ERROR) { dlt_log(LOG_ERR, "Cannot clear applications list\n"); return DLT_RETURN_ERROR; } /* clear context list */ if (dlt_daemon_contexts_clear(daemon, ecu, verbose) == DLT_RETURN_ERROR) { dlt_log(LOG_ERR, "Cannot clear contexts list\n"); return DLT_RETURN_ERROR; } } /* check response */ if (dlt_message_payload(msg, resp_text, DLT_RECEIVE_BUFSIZE, DLT_OUTPUT_ASCII, 0) != DLT_RETURN_OK) { dlt_log(LOG_ERR, "GET_LOG_INFO payload failed\n"); return DLT_RETURN_ERROR; } /* prepare pointer to message request */ resp = (DltServiceGetLogInfoResponse *)calloc(1, sizeof(DltServiceGetLogInfoResponse)); if (resp == NULL) { dlt_log(LOG_ERR, "Get Log Info Response could not be allocated\n"); return DLT_RETURN_ERROR; } if (dlt_set_loginfo_parse_service_id(resp_text, &resp->service_id, &resp->status) != DLT_RETURN_OK) { dlt_log(LOG_ERR, "Parsing GET_LOG_INFO failed\n"); dlt_client_cleanup_get_log_info(resp); return DLT_RETURN_ERROR; } if (dlt_client_parse_get_log_info_resp_text(resp, resp_text) != DLT_RETURN_OK) { dlt_log(LOG_ERR, "Parsing GET_LOG_INFO failed\n"); dlt_client_cleanup_get_log_info(resp); return DLT_RETURN_ERROR; } for (i = 0; i < resp->log_info_type.count_app_ids; i++) { app = resp->log_info_type.app_ids[i]; /* add application */ if (dlt_daemon_application_add(daemon, app.app_id, 0, app.app_description, -1, ecu, verbose) == 0) { dlt_vlog(LOG_WARNING, "%s: dlt_daemon_application_add failed\n", __func__); dlt_client_cleanup_get_log_info(resp); return DLT_RETURN_ERROR; } for (j = 0; j < app.count_context_ids; j++) { con = app.context_id_info[j]; /* add context */ if (dlt_daemon_context_add(daemon, app.app_id, con.context_id, (int8_t) con.log_level, (int8_t) con.trace_status, 0, -1, con.context_description, ecu, verbose) == 0) { dlt_vlog(LOG_WARNING, "%s: dlt_daemon_context_add failed for %4s\n", __func__, app.app_id); dlt_client_cleanup_get_log_info(resp); return DLT_RETURN_ERROR; } } } /* free response */ dlt_client_cleanup_get_log_info(resp); return DLT_RETURN_OK; } /** * Parse GET_DEFAULT_LOG_LEVEL * * @param daemon DltDaemon * @param daemon_local DltDaemonLocal * @param ecu Ecu ID * @param msg DltMessage * @param verbose verbose flag * @return 0 on success, -1 otherwise */ DLT_STATIC int dlt_gateway_parse_get_default_log_level(DltDaemon *daemon, DltDaemonLocal *daemon_local, char *ecu, DltMessage *msg, int verbose) { DltServiceGetDefaultLogLevelResponse *resp = NULL; DltGatewayConnection *con = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (daemon_local == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (dlt_check_rcv_data_size(msg->datasize, sizeof(DltServiceGetDefaultLogLevelResponse)) < 0) { dlt_log(LOG_ERR, "Received data incomplete.\n"); return DLT_RETURN_ERROR; } /* prepare pointer to message request */ resp = (DltServiceGetDefaultLogLevelResponse *)(msg->databuffer); con = dlt_gateway_get_connection(&daemon_local->pGateway, ecu, verbose); if (con == NULL) { dlt_vlog(LOG_ERR, "No information about passive ECU: %s\n", ecu); return DLT_RETURN_ERROR; } con->default_log_level = resp->log_level; return DLT_RETURN_OK; } /** * Service offline logstorage * * @param daemon DltDaemon * @param daemon_local DltDaemonLocal * @param verbose int * @return 0 on success, -1 otherwise */ DLT_STATIC int dlt_gateway_control_service_logstorage(DltDaemon *daemon, DltDaemonLocal *daemon_local, int verbose) { unsigned int connection_type = 0; uint32_t i = 0; if (daemon_local->flags.offlineLogstorageMaxDevices <= 0) { dlt_log(LOG_INFO, "Logstorage functionality not enabled or MAX device set is 0\n"); return DLT_RETURN_ERROR; } for (i = 0; i < daemon_local->flags.offlineLogstorageMaxDevices; i++) { connection_type = daemon->storage_handle[i].connection_type; if (connection_type == DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) /* Check if log level of running application needs an update */ dlt_daemon_logstorage_update_application_loglevel(daemon, daemon_local, (int) i, verbose); } return DLT_RETURN_OK; } DltReturnValue dlt_gateway_process_passive_node_messages(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { int i = 0; DltGateway *gateway = NULL; DltGatewayConnection *con = NULL; DltMessage msg = { 0 }; if ((daemon == NULL) || (daemon_local == NULL) || (receiver == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } PRINT_FUNCTION_VERBOSE(verbose); gateway = &daemon_local->pGateway; if (gateway == NULL) { dlt_log(LOG_ERR, "Gateway structure is NULL\n"); return DLT_RETURN_ERROR; } for (i = 0; i < gateway->num_connections; i++) if (gateway->connections[i].client.sock == receiver->fd) { con = &gateway->connections[i]; break; } if (con == NULL) { dlt_log(LOG_ERR, "Cannot associate fd to passive Node connection\n"); return DLT_RETURN_ERROR; } /* now the corresponding passive node connection is available */ if (dlt_message_init(&msg, verbose) == -1) { dlt_log(LOG_ERR, "Cannot initialize DLT message for passive node forwarding\n"); return DLT_RETURN_ERROR; } /* nearly copy and paste of dlt_client_main_loop function */ if (dlt_receiver_receive(receiver) <= 0) { /* No more data to be received */ if (dlt_message_free(&msg, verbose) < 0) { dlt_log(LOG_ERR, "Cannot free DLT message\n"); return DLT_RETURN_ERROR; } dlt_log(LOG_WARNING, "Connection to passive node lost\n"); if (con->reconnect_cnt < DLT_GATEWAY_RECONNECT_MAX) { dlt_log(LOG_WARNING, "Try to reconnect.\n"); con->reconnect_cnt += 1; con->timeout_cnt = 0; } else { con->status = DLT_GATEWAY_DISCONNECTED; if (dlt_event_handler_unregister_connection(&daemon_local->pEvent, daemon_local, receiver->fd) != 0) dlt_log(LOG_ERR, "Remove passive node Connection failed\n"); } return DLT_RETURN_OK; } while (dlt_message_read(&msg, (unsigned char *)receiver->buf, (unsigned int) receiver->bytesRcvd, 0, verbose) == DLT_MESSAGE_ERROR_OK) { DltStandardHeaderExtra *header = (DltStandardHeaderExtra *) (msg.headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader)); /* only forward messages if the received ECUid is the expected one */ if (strncmp(header->ecu, con->ecuid, strlen(con->ecuid)) == 0) { uint32_t id; uint32_t id_tmp; DltPassiveControlMessage *control_msg = con->p_control_msgs; dlt_vlog(LOG_DEBUG, "Received ECUid (%s) similar to configured ECUid(%s). " "Forwarding message (%s).\n", header->ecu, con->ecuid, msg.databuffer); id_tmp = *((uint32_t *)(msg.databuffer)); id = DLT_ENDIAN_GET_32(msg.standardheader->htyp, id_tmp); /* if ID is GET_LOG_INFO, parse msg */ if (id == DLT_SERVICE_ID_GET_LOG_INFO) { while (control_msg) { if (control_msg->id == id) { if (dlt_gateway_parse_get_log_info(daemon, header->ecu, &msg, control_msg->req, verbose) == DLT_RETURN_ERROR) dlt_log(LOG_WARNING, "Parsing GET_LOG_INFO message failed!\n"); /* Check for logstorage */ dlt_gateway_control_service_logstorage(daemon, daemon_local, verbose); /* initialize the flag */ control_msg->req = CONTROL_MESSAGE_NOT_REQUESTED; break; } control_msg = control_msg->next; } } else if (id == DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL) { if (dlt_gateway_parse_get_default_log_level( daemon, daemon_local, header->ecu, &msg, verbose) == DLT_RETURN_ERROR) dlt_log(LOG_WARNING, "Parsing GET_DEFAULT_LOG_LEVEL message failed!\n"); } /* prepare storage header */ if (dlt_set_storageheader(msg.storageheader, msg.headerextra.ecu) == DLT_RETURN_ERROR) { dlt_vlog(LOG_ERR, "%s: Can't set storage header\n", __func__); return DLT_RETURN_ERROR; } dlt_daemon_client_send(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, msg.headerbuffer, sizeof(DltStorageHeader), msg.headerbuffer + sizeof(DltStorageHeader), (int) (msg.headersize - sizeof(DltStorageHeader)), msg.databuffer, (int) msg.datasize, verbose); } else { /* otherwise remove this connection and do not connect again */ dlt_vlog(LOG_WARNING, "Received ECUid (%s) differs to configured ECUid(%s). " "Discard this message.\n", header->ecu, con->ecuid); /* disconnect from passive node */ con->status = DLT_GATEWAY_DISCONNECTED; con->trigger = DLT_GATEWAY_DISABLED; if (dlt_event_handler_unregister_connection(&daemon_local->pEvent, daemon_local, receiver->fd) != 0) dlt_log(LOG_ERR, "Remove passive node Connection failed\n"); dlt_log(LOG_WARNING, "Disconnect from passive node due to invalid ECUid\n"); } if (msg.found_serialheader) { if (dlt_receiver_remove(receiver, (int) (msg.headersize + msg.datasize - sizeof(DltStorageHeader) + sizeof(dltSerialHeader))) == -1) { /* Return value ignored */ dlt_message_free(&msg, verbose); return DLT_RETURN_ERROR; } } else if (dlt_receiver_remove(receiver, (int) (msg.headersize + msg.datasize - sizeof(DltStorageHeader))) == -1) { /* Return value ignored */ dlt_message_free(&msg, verbose); return DLT_RETURN_ERROR; } } if (dlt_receiver_move_to_begin(receiver) == -1) { /* Return value ignored */ dlt_message_free(&msg, verbose); return DLT_RETURN_ERROR; } if (dlt_message_free(&msg, verbose) == -1) return DLT_RETURN_ERROR; return DLT_RETURN_OK; } int dlt_gateway_process_gateway_timer(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *receiver, int verbose) { uint64_t expir = 0; ssize_t res = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((daemon_local == NULL) || (daemon == NULL) || (receiver == NULL)) { dlt_vlog(LOG_ERR, "%s: invalid parameters\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } res = read(receiver->fd, &expir, sizeof(expir)); if (res < 0) dlt_vlog(LOG_WARNING, "%s: Fail to read timer (%s)\n", __func__, strerror(errno)); /* Activity received on timer_wd, but unable to read the fd: * let's go on sending notification */ /* try to connect to passive nodes */ dlt_gateway_establish_connections(&daemon_local->pGateway, daemon_local, verbose); dlt_log(LOG_DEBUG, "Gateway Timer\n"); return DLT_RETURN_OK; } int dlt_gateway_forward_control_message(DltGateway *gateway, DltDaemonLocal *daemon_local, DltMessage *msg, char *ecu, int verbose) { int i = 0; int ret = 0; DltGatewayConnection *con = NULL; uint32_t id_tmp; uint32_t id; PRINT_FUNCTION_VERBOSE(verbose); if ((gateway == NULL) || (daemon_local == NULL) || (msg == NULL) || (ecu == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } for (i = 0; i < gateway->num_connections; i++) if (strncmp(gateway->connections[i].ecuid, ecu, strlen(gateway->connections[i].ecuid)) == 0) { con = &gateway->connections[i]; break; } if (con == NULL) { dlt_log(LOG_WARNING, "Unknown passive node identifier\n"); return DLT_RETURN_ERROR; } if (con->status != DLT_GATEWAY_CONNECTED) { dlt_log(LOG_INFO, "Passive node is not connected\n"); return DLT_RETURN_ERROR; } if (con->send_serial) { /* send serial header */ ret = (int) send(con->client.sock, (void *)dltSerialHeader, sizeof(dltSerialHeader), 0); if (ret == -1) { dlt_log(LOG_ERR, "Sending message to passive DLT Daemon failed\n"); return DLT_RETURN_ERROR; } } ret = (int) send(con->client.sock, msg->headerbuffer + sizeof(DltStorageHeader), msg->headersize - sizeof(DltStorageHeader), 0); if (ret == -1) { dlt_log(LOG_ERR, "Sending message to passive DLT Daemon failed\n"); return DLT_RETURN_ERROR; } else { ret = (int) send(con->client.sock, msg->databuffer, msg->datasize, 0); if (ret == -1) { dlt_log(LOG_ERR, "Sending message to passive DLT Daemon failed\n"); return DLT_RETURN_ERROR; } } id_tmp = *((uint32_t *)(msg->databuffer)); id = DLT_ENDIAN_GET_32(msg->standardheader->htyp, id_tmp); dlt_vlog(LOG_INFO, "Control message forwarded : %s\n", dlt_get_service_name(id)); return DLT_RETURN_OK; } int dlt_gateway_process_on_demand_request(DltGateway *gateway, DltDaemonLocal *daemon_local, char node_id[DLT_ID_SIZE], int connection_status, int verbose) { int i = 0; DltGatewayConnection *con = NULL; PRINT_FUNCTION_VERBOSE(verbose); if ((gateway == NULL) || (daemon_local == NULL) || (node_id == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } /* find connection by ECU id */ for (i = 0; i < gateway->num_connections; i++) { if (strncmp(node_id, gateway->connections[i].ecuid, DLT_ID_SIZE) == 0) { con = &gateway->connections[i]; break; } } if (con == NULL) { dlt_log(LOG_WARNING, "Specified ECUid not found\n"); return DLT_RETURN_ERROR; } if (connection_status == 1) { /* try to connect */ if (con->status != DLT_GATEWAY_CONNECTED) { if (dlt_client_connect(&con->client, verbose) == 0) { /* setup dlt connection and add to poll event loop here */ if (dlt_gateway_add_to_event_loop(daemon_local, con, verbose) != DLT_RETURN_OK) { dlt_log(LOG_ERR, "Gateway connection creation failed\n"); return DLT_RETURN_ERROR; } } else { dlt_log(LOG_ERR, "Could not connect to passive node\n"); return DLT_RETURN_ERROR; } } else { dlt_log(LOG_INFO, "Passive node already connected\n"); } } else if (connection_status == 0) /* disconnect*/ { con->status = DLT_GATEWAY_DISCONNECTED; con->trigger = DLT_GATEWAY_ON_DEMAND; if (dlt_event_handler_unregister_connection(&daemon_local->pEvent, daemon_local, con->client.sock) != 0) dlt_log(LOG_ERR, "Remove passive node event handler connection failed\n"); } else { dlt_log(LOG_ERR, "Unknown command (connection_status)\n"); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } int dlt_gateway_send_control_message(DltGatewayConnection *con, DltPassiveControlMessage *control_msg, void *data, int verbose) { int ret = DLT_RETURN_OK; PRINT_FUNCTION_VERBOSE(verbose); if (con == NULL) { dlt_vlog(LOG_WARNING, "%s: Invalid parameter given\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } /* no (more) control message to be send */ if (control_msg->id == 0) return DLT_RETURN_ERROR; /* check sendtime counter and message interval */ /* sendtime counter is 0 on startup, otherwise positive value */ if ((control_msg->type != CONTROL_MESSAGE_ON_DEMAND) && (con->sendtime_cnt > 0)) { if (control_msg->interval <= 0) return DLT_RETURN_ERROR; if ((control_msg->type == CONTROL_MESSAGE_PERIODIC) || (control_msg->type == CONTROL_MESSAGE_BOTH)) { if ((con->sendtime_cnt - 1) % control_msg->interval != 0) return DLT_RETURN_ERROR; } } if (con->send_serial) { /* send serial header */ ret = (int) send(con->client.sock, (void *)dltSerialHeader, sizeof(dltSerialHeader), 0); if (ret == -1) { dlt_log(LOG_ERR, "Sending message to passive DLT Daemon failed\n"); return DLT_RETURN_ERROR; } } switch (control_msg->id) { case DLT_SERVICE_ID_GET_LOG_INFO: return dlt_client_get_log_info(&con->client); break; case DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL: return dlt_client_get_default_log_level(&con->client); break; case DLT_SERVICE_ID_GET_SOFTWARE_VERSION: return dlt_client_get_software_version(&con->client); break; case DLT_SERVICE_ID_SET_LOG_LEVEL: if (data == NULL) { dlt_vlog(LOG_WARNING, "Insufficient data for %s received. Send control request failed.\n", dlt_get_service_name(control_msg->id)); return DLT_RETURN_ERROR; } DltServiceSetLogLevel *req = (DltServiceSetLogLevel *)data; return dlt_client_send_log_level(&con->client, req->apid, req->ctid, req->log_level); break; default: dlt_vlog(LOG_WARNING, "Cannot forward request: %s.\n", dlt_get_service_name(control_msg->id)); } return DLT_RETURN_OK; } DltGatewayConnection *dlt_gateway_get_connection(DltGateway *gateway, char *ecu, int verbose) { DltGatewayConnection *con = NULL; int i = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((gateway == NULL) || (ecu == NULL)) { dlt_vlog(LOG_ERR, "%s: wrong parameter\n", __func__); return con; } for (i = 0; i < gateway->num_connections; i++) { con = &gateway->connections[i]; if (strncmp(con->ecuid, ecu, DLT_ID_SIZE) == 0) return con; } dlt_vlog(LOG_ERR, "%s: No connection found\n", ecu); return con; } dlt-daemon-2.18.6/src/gateway/dlt_gateway.conf000066400000000000000000000017431377520261000212470ustar00rootroot00000000000000[General] ; Time interval for reconnection to passive Node in second. ; Interval=1 [PassiveNode1] IPaddress=192.168.2.11 ; TCP port. Default 3490 is used if no port is specified. ; Port=3490 ; passive nodes ECU identifier. Mandatory. EcuID=ECU2 ; Try connect to passive Node on DLT Daemon startup. Default OnStartup if not specified. ; Connect=OnStartup ; Stop connecting to passive node, if not successful after 10 retries. ; Set to 0 for endless retry. Timeout=10 ; Send following control messages after connection is established ; SendControl=0x03,0x04,0x13 ; Send Serial Header with control messages. Value in dlt.conf is used as default if not specified. ; SendSerialHeader=0 ; Send following control messages periodically () ; SendPeriodicControl=0x03:5,0x13:10 ; Supported Control messages: ; DLT_SERVICE_ID_GET_LOG_INFO 0x03 ; DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL 0x04 ; DLT_SERVICE_ID_GET_SOFTWARE_VERSION 0x13 dlt-daemon-2.18.6/src/gateway/dlt_gateway.h000066400000000000000000000166451377520261000205600ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Christoph Lipka * * \copyright Copyright Š 2015 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_gateway.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_gateway.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Christoph Lipka clipka@jp.adit-jv.com ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** cl Christoph Lipka ADIT ** *******************************************************************************/ #ifndef DLT_GATEWAY_H_ #define DLT_GATEWAY_H_ #include "dlt-daemon.h" #include "dlt_gateway_types.h" /** * Initialize the gateway to passive nodes * * TODO: Make path to configuration file configurable * * @param daemon_local pointer to DltDaemonLocal * @param verbose verbose flag * @return 0 on success, -1 on error */ int dlt_gateway_init(DltDaemonLocal *daemon_local, int verbose); /** * De-initialize the gateway. All internal data will be freed. * * @param g DltGateway pointer * @param verbose verbose flag */ void dlt_gateway_deinit(DltGateway *g, int verbose); /** * Establish all connections to passive nodes that are configured to be started * on daemon startup and add this connections to the main event loop. * * TODO: This function is called during gateway initialization and in main loop * whenever the poll returns. This may need to be improved. * * @param g DltGateway * @param daemon_local DltDaemonLocal * @param verbose verbose flag * @return 0 on success, -1 on error */ int dlt_gateway_establish_connections(DltGateway *g, DltDaemonLocal *daemon_local, int verbose); /** * Return the receiver for a given file descriptor * * @param g DltGateway * @param fd file descriptor * @return Pointer to DltReceiver on success, NULL otherwise */ DltReceiver *dlt_gateway_get_connection_receiver(DltGateway *g, int fd); /** * Process incoming messages from passive nodes * * @param daemon DltDaemon * @param daemon_local DltDaemonLocal * @param recv DltReceiver structure * @param verbose verbose flag * @return 0 on success, -1 otherwise */ int dlt_gateway_process_passive_node_messages(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *recv, int verbose); /** * Process gateway timer * * @param daemon DltDaemon * @param daemon_local DltDaemonLocal * @param rec DltReceiver * @param verbose verbose flag * @return 0 on success, -1 otherwise */ int dlt_gateway_process_gateway_timer(DltDaemon *daemon, DltDaemonLocal *daemon_local, DltReceiver *rec, int verbose); /** * Forward control messages to the specified passive node DLT Daemon. * * @param g DltGateway * @param daemon_local DltDaemonLocal * @param msg DltMessage * @param ecu Identifier of the passive node * @param verbose verbose flag * @return 0 on success, -1 otherwise */ int dlt_gateway_forward_control_message(DltGateway *g, DltDaemonLocal *daemon_local, DltMessage *msg, char *ecu, int verbose); /** * Process on demand connect/disconnect of passive nodes * * @param g DltGateway * @param daemon_local DltDaemonLocal * @param node_id Passive Node identifier * @param connection_status Connection status * @param verbose verbose flag * @return 0 on success, -1 otherwise */ int dlt_gateway_process_on_demand_request(DltGateway *g, DltDaemonLocal *daemon_local, char *node_id, int connection_status, int verbose); /** * Send control message to passive node * * @param con DltGatewayConnection * @param control_msg DltPassiveControlMessage * @param data DltMessage * @param verbose verbose flag * @return 0 on success, -1 otherwise */ int dlt_gateway_send_control_message(DltGatewayConnection *con, DltPassiveControlMessage *control_msg, void *data, int verbose); /** * Gets the connection handle of passive node with specified ECU * * @param g DltGateway * @param ecu Identifier string * @param verbose verbose flag * @returns Gateway connection handle on success, NULL otherwise */ DltGatewayConnection *dlt_gateway_get_connection(DltGateway *g, char *ecu, int verbose); #endif dlt-daemon-2.18.6/src/gateway/dlt_gateway_internal.h000066400000000000000000000122021377520261000224350ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2018 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Aditya Paluri * * \copyright Copyright Š 2018 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_gateway_internal.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_gateway_internal.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Aditya Paluri venkataaditya.paluri@in.bosch.com ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** ap Aditya Paluri ADIT ** *******************************************************************************/ #ifndef DLT_GATEWAY_INTERNAL_H_ #define DLT_GATEWAY_INTERNAL_H_ DLT_STATIC DltReturnValue dlt_gateway_check_ip(DltGatewayConnection *con, char *value); DLT_STATIC DltReturnValue dlt_gateway_check_port(DltGatewayConnection *con, char *value); DLT_STATIC DltReturnValue dlt_gateway_check_ecu(DltGatewayConnection *con, char *value); DLT_STATIC DltReturnValue dlt_gateway_check_connect_trigger(DltGatewayConnection *con, char *value); DLT_STATIC DltReturnValue dlt_gateway_check_timeout(DltGatewayConnection *con, char *value); DLT_STATIC DltReturnValue dlt_gateway_check_send_serial(DltGatewayConnection *con, char *value); DLT_STATIC DltReturnValue dlt_gateway_allocate_control_messages(DltGatewayConnection *con); DLT_STATIC DltReturnValue dlt_gateway_check_control_messages(DltGatewayConnection *con, char *value); DLT_STATIC DltReturnValue dlt_gateway_check_periodic_control_messages(DltGatewayConnection *con, char *value); DLT_STATIC DltReturnValue dlt_gateway_check_param(DltGateway *gateway, DltGatewayConnection *con, DltGatewayConfType ctype, char *value); int dlt_gateway_configure(DltGateway *gateway, char *config_file, int verbose); int dlt_gateway_store_connection(DltGateway *gateway, DltGatewayConnection *tmp, int verbose); DLT_STATIC DltReturnValue dlt_gateway_parse_get_log_info(DltDaemon *daemon, char *ecu, DltMessage *msg, int req, int verbose); #endif dlt-daemon-2.18.6/src/gateway/dlt_gateway_types.h000066400000000000000000000162411377520261000217740ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Christoph Lipka * * \copyright Copyright Š 2015 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_gateway_types.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_gateway_types.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Christoph Lipka clipka@jp.adit-jv.com ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** cl Christoph Lipka ADIT ** *******************************************************************************/ #ifndef DLT_GATEWAY_TYPES_H_ #define DLT_GATEWAY_TYPES_H_ #include "dlt_protocol.h" #include "dlt_client.h" #define DLT_GATEWAY_CONFIG_PATH CONFIGURATION_FILES_DIR "/dlt_gateway.conf" #define DLT_GATEWAY_TIMER_DEFAULT_INTERVAL 1 #define DLT_GATEWAY_GENERAL_SECTION_NAME "General" #define DLT_GATEWAY_RECONNECT_MAX 1 /* reconnect once after connection loss */ /* maximum number of control messages that can be send after connection is * established */ #define DLT_GATEWAY_MAX_STARTUP_CTRL_MSG 10 typedef enum { DLT_GATEWAY_UNINITIALIZED, DLT_GATEWAY_INITIALIZED, DLT_GATEWAY_CONNECTED, DLT_GATEWAY_DISCONNECTED } connection_status; typedef enum { DLT_GATEWAY_UNDEFINED = -1, DLT_GATEWAY_ON_STARTUP, /* connect directly on startup */ DLT_GATEWAY_ON_DEMAND, /* connect on demand only */ DLT_GATEWAY_DISABLED /* disable this connection due to problems */ } connection_trigger; typedef enum { CONTROL_MESSAGE_UNDEFINED = -1, CONTROL_MESSAGE_ON_STARTUP, /* send on startup */ CONTROL_MESSAGE_PERIODIC, /* send periodically */ CONTROL_MESSAGE_BOTH, /* send on startup and periodically */ CONTROL_MESSAGE_ON_DEMAND /* send on demand only */ } control_msg_trigger; typedef enum { CONTROL_MESSAGE_REQUEST_UNDEFINED = -1, CONTROL_MESSAGE_NOT_REQUESTED, /* control msg not requested (default) */ CONTROL_MESSAGE_REQUESTED /* control msg requested */ } control_msg_request; /* Passive control message */ typedef struct DltPassiveControlMessage { uint32_t id; /* msg ID */ uint32_t user_id; control_msg_trigger type; /* on startup or periodic or both */ control_msg_request req; /* whether it is requested from gateway or not */ int interval; /* interval for periodic sending. if on startup, -1 */ struct DltPassiveControlMessage *next; /* for multiple passive control message */ } DltPassiveControlMessage; /* DLT Gateway connection structure */ typedef struct { int handle; /* connection handle */ connection_status status; /* connected/disconnected */ char *ecuid; /* name of passive node */ char *ip_address; /* IP address */ int sock_domain; /* socket domain */ int sock_type; /* socket type */ int sock_protocol; /* socket protocol */ int port; /* port */ connection_trigger trigger; /* connection trigger */ int timeout; /* connection timeout */ int timeout_cnt; /* connection timeout counter */ int reconnect_cnt; /* reconnection counter */ int sendtime; /* periodic sending max time */ int sendtime_cnt; /* periodic sending counter */ DltPassiveControlMessage *p_control_msgs; /* passive control msgs */ DltPassiveControlMessage *head; /* to go back to the head pointer of p_control_msgs */ int send_serial; /* Send serial header with control messages */ DltClient client; /* DltClient structure */ int default_log_level; /* Default Log Level on passive node */ } DltGatewayConnection; /* DltGateway structure */ typedef struct { int send_serial; /* Default: Send serial header with control messages */ DltGatewayConnection *connections; /* pointer to connections */ int num_connections; /* number of connections */ int interval; /* interval of retry connection */ } DltGateway; typedef struct { char *key; /* The configuration key*/ int (*func)(DltGatewayConnection *con, char *value); /* Conf handler */ int is_opt; /* If the configuration is optional or not */ } DltGatewayConf; typedef struct { char *key; /* The configuration key*/ int (*func)(DltGateway *gateway, char *value); /* Conf handler */ int is_opt; /* If the configuration is optional or not */ } DltGatewayGeneralConf; typedef enum { GW_CONF_IP_ADDRESS = 0, GW_CONF_PORT, GW_CONF_ECUID, GW_CONF_CONNECT, GW_CONF_TIMEOUT, GW_CONF_SEND_CONTROL, GW_CONF_SEND_PERIODIC_CONTROL, GW_CONF_SEND_SERIAL_HEADER, GW_CONF_COUNT } DltGatewayConfType; typedef enum { GW_CONF_GENERAL_INTERVAL = 0, GW_CONF_GENEREL_COUNT } DltGatewayGeneralConfType; #endif /* DLT_GATEWAY_TYPES_H_ */ dlt-daemon-2.18.6/src/kpi/000077500000000000000000000000001377520261000152115ustar00rootroot00000000000000dlt-daemon-2.18.6/src/kpi/CMakeLists.txt000066400000000000000000000015071377520261000177540ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### set (dlt_kpi_SRCS dlt-kpi.c dlt-kpi-options.c dlt-kpi-process.c dlt-kpi-process-list.c dlt-kpi-common.c dlt-kpi-interrupt.c) add_executable (dlt-kpi ${dlt_kpi_SRCS}) target_link_libraries (dlt-kpi dlt) set_target_properties(dlt-kpi PROPERTIES LINKER_LANGUAGE C) install(TARGETS dlt-kpi RUNTIME DESTINATION bin COMPONENT base) INSTALL(FILES dlt-kpi.conf DESTINATION ${CONFIGURATION_FILES_DIR} COMPONENT base) dlt-daemon-2.18.6/src/kpi/dlt-kpi-common.c000066400000000000000000000053641377520261000202170ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-kpi-common.c */ #include "dlt-kpi-common.h" static int dlt_kpi_cpu_count = -1; DltReturnValue dlt_kpi_read_file_compact(char *filename, char **target) { if ((filename == NULL) || (target == NULL)) { fprintf(stderr, "%s: Nullpointer parameter!\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } char buffer[BUFFER_SIZE]; int ret = dlt_kpi_read_file(filename, buffer, BUFFER_SIZE); if (ret < DLT_RETURN_OK) return ret; if ((*target = malloc(strlen(buffer) + 1)) == NULL) { fprintf(stderr, "Out of memory!\n"); return DLT_RETURN_ERROR; } memcpy(*target, buffer, strlen(buffer) + 1); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_read_file(char *filename, char *buffer, uint maxLength) { if ((filename == NULL) || (buffer == NULL)) { fprintf(stderr, "%s: Nullpointer parameter!\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } FILE *file = fopen(filename, "r"); if (file == NULL) /* fprintf(stderr, "Could not read file %s\n", filename); */ return DLT_RETURN_ERROR; int buflen = fread(buffer, 1, maxLength - 1, file); buffer[buflen] = '\0'; fclose(file); return DLT_RETURN_OK; } int dlt_kpi_read_cpu_count() { char buffer[BUFFER_SIZE]; int ret = dlt_kpi_read_file("/proc/cpuinfo", buffer, sizeof(buffer)); if (ret != 0) { fprintf(stderr, "dlt_kpi_get_cpu_count(): Could not read /proc/cpuinfo\n"); return -1; } char *delim = "[] \t\n"; char *tok = strtok(buffer, delim); if (tok == NULL) { fprintf(stderr, "dlt_kpi_get_cpu_count(): Could not extract token\n"); return -1; } int num = 0; do { if (strcmp(tok, "processor") == 0) num++; tok = strtok(NULL, delim); } while (tok != NULL); return num; } int dlt_kpi_get_cpu_count() { if (dlt_kpi_cpu_count <= 0) { dlt_kpi_cpu_count = dlt_kpi_read_cpu_count(); if (dlt_kpi_cpu_count <= 0) { fprintf(stderr, "Could not get CPU count\n"); dlt_kpi_cpu_count = -1; } } return dlt_kpi_cpu_count; } dlt-daemon-2.18.6/src/kpi/dlt-kpi-common.h000066400000000000000000000020331377520261000202120ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-kpi-common.h */ #ifndef SRC_KPI_DLT_KPI_COMMON_H_ #define SRC_KPI_DLT_KPI_COMMON_H_ #include #include #include #include #define BUFFER_SIZE 4096 DltReturnValue dlt_kpi_read_file(char *filename, char *buffer, uint maxLength); DltReturnValue dlt_kpi_read_file_compact(char *filename, char **target); int dlt_kpi_get_cpu_count(); #endif /* SRC_KPI_DLT_KPI_COMMON_H_ */ dlt-daemon-2.18.6/src/kpi/dlt-kpi-interrupt.c000066400000000000000000000117341377520261000207610ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-kpi-interrupt.c */ #include "dlt-kpi-interrupt.h" DltReturnValue dlt_kpi_log_interrupts(DltContext *ctx, DltLogLevelType log_level) { if (ctx == NULL) { fprintf(stderr, "%s: Nullpointer parameter (NULL) !\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } char buffer[BUFFER_SIZE]; *buffer = '\0'; char file_buffer[BUFFER_SIZE]; char *token, *delim = " \t", *delim2 = " \t\n", *check; int head_line = 1, first_row = 1, cpu_count = 0, column = 0, buffer_offset = 0; DltReturnValue ret; if ((ret = dlt_kpi_read_file("/proc/interrupts", file_buffer, BUFFER_SIZE)) < DLT_RETURN_OK) return ret; token = strtok(file_buffer, delim); while (token != NULL) { if (head_line) { if ((strlen(token) > 3) && (token[0] == 'C') && (token[1] == 'P') && (token[2] == 'U')) { cpu_count++; } else if (cpu_count <= 0) { fprintf(stderr, "%s: Could not parse CPU count !\n", __func__); return DLT_RETURN_ERROR; } else if (strcmp(token, "\n") == 0) { head_line = 0; } token = strtok(NULL, delim); } else { int tokenlen = strlen(token); if (token[tokenlen - 1] == ':') { column = 0; if (first_row) first_row = 0; else buffer_offset += snprintf(buffer + buffer_offset, BUFFER_SIZE - buffer_offset, "\n"); } if (column == 0) { /* IRQ number */ buffer_offset += snprintf(buffer + buffer_offset, BUFFER_SIZE - buffer_offset, "%.*s;", tokenlen - 1, token); } else if (column <= cpu_count) { long int interrupt_count = strtol(token, &check, 10); if (*check != '\0') { fprintf(stderr, "%s: Could not parse interrupt count for CPU !\n", __func__); return DLT_RETURN_ERROR; } buffer_offset += snprintf(buffer + buffer_offset, BUFFER_SIZE - buffer_offset, "cpu%d:%ld;", column - 1, interrupt_count); } column++; token = strtok(NULL, delim2); } } /* synchronization message */ DLT_LOG(*ctx, log_level, DLT_STRING("IRQ"), DLT_STRING("BEG")); DltContextData ctx_data; if ((ret = dlt_user_log_write_start(ctx, &ctx_data, log_level)) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_start() returned error\n", __func__); return ret; } if ((ret = dlt_user_log_write_string(&ctx_data, "IRQ")) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_string() returned error\n", __func__); return ret; } token = strtok(buffer, "\n"); while (token != NULL) { if (dlt_user_log_write_string(&ctx_data, token) < DLT_RETURN_OK) { /* message buffer full, start new one */ if ((ret = dlt_user_log_write_finish(&ctx_data)) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_finish() returned error\n", __func__); return ret; } if ((ret = dlt_user_log_write_start(ctx, &ctx_data, log_level)) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_start() returned error\n", __func__); return ret; } if ((ret = dlt_user_log_write_string(&ctx_data, "IRQ")) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_string() returned error\n", __func__); return ret; } } else { token = strtok(NULL, "\n"); } } if ((ret = dlt_user_log_write_finish(&ctx_data)) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_finish() returned error\n", __func__); return ret; } /* synchronization message */ DLT_LOG(*ctx, log_level, DLT_STRING("IRQ"), DLT_STRING("END")); return DLT_RETURN_OK; } dlt-daemon-2.18.6/src/kpi/dlt-kpi-interrupt.h000066400000000000000000000016051377520261000207620ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-kpi-interrupt.h */ #ifndef SRC_KPI_DLT_KPI_INTERRUPT_H_ #define SRC_KPI_DLT_KPI_INTERRUPT_H_ #include "dlt.h" #include "dlt-kpi-common.h" DltReturnValue dlt_kpi_log_interrupts(DltContext *ctx, DltLogLevelType log_level); #endif /* SRC_KPI_DLT_KPI_INTERRUPT_H_ */ dlt-daemon-2.18.6/src/kpi/dlt-kpi-options.c000066400000000000000000000155721377520261000204240ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-kpi-options.c */ #include "dlt-kpi.h" /** * Print information how to use this program. */ void usage(char *prog_name) { char version[255]; dlt_get_version(version, 255); printf("Usage: %s [options]\n", prog_name); printf("Application to forward information from the /proc/ file system to DLT.\n"); printf("%s\n", version); printf("Options:\n"); /*printf(" -d Daemonize. Detach from terminal and run in background.\n"); */ printf(" -c filename Use configuration file. \n"); printf(" Default: %s\n", DEFAULT_CONF_FILE); printf(" -h This help message.\n"); } /** * Initialize command line options with default values. */ void dlt_kpi_init_cli_options(DltKpiOptions *options) { options->configurationFileName = DEFAULT_CONF_FILE; options->customConfigFile = 0; } void dlt_kpi_free_cli_options(DltKpiOptions *options) { if (options->customConfigFile) free(options->configurationFileName); } DltReturnValue dlt_kpi_read_command_line(DltKpiOptions *options, int argc, char **argv) { if (options == NULL) { fprintf(stderr, "%s: Nullpointer parameter\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } dlt_kpi_init_cli_options(options); int opt; while ((opt = getopt(argc, argv, "c:h")) != -1) switch (opt) { case 'c': { if ((options->configurationFileName = malloc(strlen(optarg) + 1)) == 0) { fprintf(stderr, "Out of memory!\n"); return DLT_RETURN_ERROR; } strcpy(options->configurationFileName, optarg); /* strcpy unritical here, because size matches exactly the size to be copied */ options->customConfigFile = 1; break; } case 'h': { usage(argv[0]); exit(0); return -1; /*for parasoft */ } default: { fprintf(stderr, "Unknown option: %c\n", optopt); usage(argv[0]); return DLT_RETURN_ERROR; } } return DLT_RETURN_OK; } /** * Initialize configuration to default values. */ void dlt_kpi_init_configuration(DltKpiConfig *config) { config->process_log_interval = 1000; config->irq_log_interval = 1000; config->log_level = DLT_LOG_DEFAULT; } /** * Read options from the configuration file */ DltReturnValue dlt_kpi_read_configuration_file(DltKpiConfig *config, char *file_name) { FILE *file; char *line = NULL; char *token = NULL; char *value = NULL; char *pch, *strchk; int tmp; if ((config == NULL) || (file_name == NULL)) { fprintf(stderr, "%s: Nullpointer parameter!\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } dlt_kpi_init_configuration(config); file = fopen(file_name, "r"); if (file == NULL) { fprintf(stderr, "%s: Could not open configuration file!\n", __func__); return DLT_RETURN_ERROR; } if (((line = malloc(COMMAND_LINE_SIZE)) == 0) || ((token = malloc(COMMAND_LINE_SIZE)) == 0) || ((value = malloc(COMMAND_LINE_SIZE)) == 0)) { fclose(file); free(line); free(token); free(value); fprintf(stderr, "%s: Out of memory!\n", __func__); return DLT_RETURN_ERROR; } while (fgets(line, COMMAND_LINE_SIZE, file) != NULL) { token[0] = '\0'; value[0] = '\0'; pch = strtok (line, " =\r\n"); while (pch != NULL) { if (pch[0] == '#') break; if (token[0] == '\0') { strncpy(token, pch, COMMAND_LINE_SIZE - 1); token[COMMAND_LINE_SIZE - 1] = '\0'; } else { strncpy(value, pch, COMMAND_LINE_SIZE - 1); value[COMMAND_LINE_SIZE - 1] = '\0'; break; } pch = strtok(NULL, " =\r\n"); } if ((token[0] != '\0') && (value[0] != '\0')) { if (strcmp(token, "process_interval") == '\0') { tmp = strtol(value, &strchk, 10); if ((strchk[0] == '\0') && (tmp > 0)) config->process_log_interval = tmp; else fprintf(stderr, "Error reading configuration file: %s is not a valid value for %s\n", value, token); } else if (strcmp(token, "irq_interval") == '\0') { tmp = strtol(value, &strchk, 10); if ((strchk[0] == '\0') && (tmp > 0)) config->irq_log_interval = tmp; else fprintf(stderr, "Error reading configuration file: %s is not a valid value for %s\n", value, token); } else if (strcmp(token, "check_interval") == '\0') { tmp = strtol(value, &strchk, 10); if ((strchk[0] == '\0') && (tmp > 0)) config->check_log_interval = tmp; else fprintf(stderr, "Error reading configuration file: %s is not a valid value for %s\n", value, token); } else if (strcmp(token, "log_level") == '\0') { tmp = strtol(value, &strchk, 10); if ((strchk[0] == '\0') && (tmp >= -1) && (tmp <= 6)) config->log_level = tmp; else fprintf(stderr, "Error reading configuration file: %s is not a valid value for %s\n", value, token); } } } fclose(file); free(value); free(token); free(line); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_init(int argc, char **argv, DltKpiConfig *config) { DltKpiOptions options; DltReturnValue ret; if (config == NULL) { fprintf(stderr, "%s: Invalid Parameter!", __func__); return DLT_RETURN_WRONG_PARAMETER; } if ((ret = dlt_kpi_read_command_line(&options, argc, argv)) < DLT_RETURN_OK) { fprintf(stderr, "Failed to read command line!"); return ret; } if ((ret = dlt_kpi_read_configuration_file(config, options.configurationFileName)) < DLT_RETURN_OK) { fprintf(stderr, "Failed to read configuration file!"); return ret; } dlt_kpi_free_cli_options(&options); return DLT_RETURN_OK; } dlt-daemon-2.18.6/src/kpi/dlt-kpi-process-list.c000066400000000000000000000152111377520261000213460ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-kpi-process-list.c */ #include "dlt-kpi-process-list.h" DltKpiProcessList *dlt_kpi_create_process_list() { DltKpiProcessList *new_list = malloc(sizeof(DltKpiProcessList)); if (new_list == NULL) { fprintf(stderr, "%s: Cannot create process list, out of memory\n", __func__); return NULL; } memset(new_list, 0, sizeof(DltKpiProcessList)); new_list->start = new_list->cursor = NULL; return new_list; } DltReturnValue dlt_kpi_free_process_list_soft(DltKpiProcessList *list) { if (list == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } free(list); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_free_process_list(DltKpiProcessList *list) { if (list == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } DltKpiProcess *tmp; list->cursor = list->start; while (list->cursor != NULL) { tmp = list->cursor->next; dlt_kpi_free_process(list->cursor); list->cursor = tmp; } return dlt_kpi_free_process_list_soft(list); } DltKpiProcess *dlt_kpi_get_process_at_cursor(DltKpiProcessList *list) { if (list == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return NULL; } return list->cursor; } DltReturnValue dlt_kpi_reset_cursor(DltKpiProcessList *list) { if (list == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } list->cursor = list->start; return DLT_RETURN_OK; } DltReturnValue dlt_kpi_set_cursor_at_end(DltKpiProcessList *list) { if (list == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } list->cursor = list->start; if (list->cursor == NULL) return DLT_RETURN_OK; while (list->cursor->next != NULL) dlt_kpi_increment_cursor(list); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_increment_cursor(DltKpiProcessList *list) { if (list == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (list->cursor == NULL) return DLT_RETURN_ERROR; list->cursor = list->cursor->next; return DLT_RETURN_OK; } DltReturnValue dlt_kpi_decrement_cursor(DltKpiProcessList *list) { if (list == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (list->cursor == NULL) return DLT_RETURN_ERROR; list->cursor = list->cursor->prev; return DLT_RETURN_OK; } DltReturnValue dlt_kpi_add_process_at_start(DltKpiProcessList *list, DltKpiProcess *process) { if ((list == NULL) || (process == NULL)) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (list->start != NULL) list->start->prev = process; process->next = list->start; list->start = process; return DLT_RETURN_OK; } DltReturnValue dlt_kpi_add_process_before_cursor(DltKpiProcessList *list, DltKpiProcess *process) { if ((list == NULL) || (process == NULL)) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (list->start == NULL) { /* Empty list? */ DltReturnValue ret = dlt_kpi_add_process_at_start(list, process); list->cursor = NULL; return ret; } else if (list->cursor == NULL) { dlt_kpi_set_cursor_at_end(list); DltReturnValue ret = dlt_kpi_add_process_after_cursor(list, process); list->cursor = NULL; return ret; } if (list->cursor->prev != NULL) list->cursor->prev->next = process; else list->start = process; process->next = list->cursor; process->prev = list->cursor->prev; list->cursor->prev = process; return DLT_RETURN_OK; } DltReturnValue dlt_kpi_add_process_after_cursor(DltKpiProcessList *list, DltKpiProcess *process) { if ((list == NULL) || (process == NULL)) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_ERROR; } if (list->cursor == NULL) return dlt_kpi_add_process_at_start(list, process); if (list->cursor->next != NULL) list->cursor->next->prev = process; process->next = list->cursor->next; process->prev = list->cursor; list->cursor->next = process; return DLT_RETURN_OK; } DltReturnValue dlt_kpi_remove_process_at_cursor_soft(DltKpiProcessList *list) { if (list == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (list->cursor == NULL) { fprintf(stderr, "%s: Cursor is Invalid (NULL)\n", __func__); return DLT_RETURN_ERROR; } DltKpiProcess *tmp = list->cursor; if (tmp->prev != NULL) { if (tmp->next != NULL) { tmp->prev->next = tmp->next; tmp->next->prev = tmp->prev; } else { tmp->prev->next = NULL; } } else { if (tmp->next != NULL) { tmp->next->prev = NULL; list->start = tmp->next; } else { list->start = NULL; } } list->cursor = tmp->next; /* becomes NULL if list is at end */ return DLT_RETURN_OK; } DltReturnValue dlt_kpi_remove_process_at_cursor(DltKpiProcessList *list) { if (list == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (list->cursor == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_ERROR; } DltKpiProcess *tmp = list->cursor; DltReturnValue ret = dlt_kpi_remove_process_at_cursor_soft(list); if (ret < DLT_RETURN_OK) return ret; dlt_kpi_free_process(tmp); return DLT_RETURN_OK; } dlt-daemon-2.18.6/src/kpi/dlt-kpi-process-list.h000066400000000000000000000036751377520261000213660ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-kpi-process-list.h */ #ifndef SRC_KPI_DLT_KPI_PROCESS_LIST_H_ #define SRC_KPI_DLT_KPI_PROCESS_LIST_H_ #include "dlt-kpi-process.h" #include "dlt-kpi-common.h" typedef struct { struct DltKpiProcess *start, *cursor; } DltKpiProcessList; DltKpiProcessList *dlt_kpi_create_process_list(); DltReturnValue dlt_kpi_free_process_list_soft(DltKpiProcessList *list); DltReturnValue dlt_kpi_free_process_list(DltKpiProcessList *list); DltKpiProcess *dlt_kpi_get_process_at_cursor(DltKpiProcessList *list); DltReturnValue dlt_kpi_increment_cursor(DltKpiProcessList *list); DltReturnValue dlt_kpi_decrement_cursor(DltKpiProcessList *list); DltReturnValue dlt_kpi_reset_cursor(DltKpiProcessList *list); DltReturnValue dlt_kpi_add_process_at_start(DltKpiProcessList *list, DltKpiProcess *process); DltReturnValue dlt_kpi_add_process_before_cursor(DltKpiProcessList *list, DltKpiProcess *process); DltReturnValue dlt_kpi_add_process_after_cursor(DltKpiProcessList *list, DltKpiProcess *process); DltReturnValue dlt_kpi_remove_process_at_cursor_soft(DltKpiProcessList *list); DltReturnValue dlt_kpi_remove_process_at_cursor(DltKpiProcessList *list); /* DltReturnValue dlt_kpi_remove_process_after_cursor(DltKpiProcessList *list); */ /* DltReturnValue dlt_kpi_remove_first_process(DltKpiProcessList *list); */ #endif /* SRC_KPI_DLT_KPI_PROCESS_LIST_H_ */ dlt-daemon-2.18.6/src/kpi/dlt-kpi-process.c000066400000000000000000000323211377520261000203760ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-kpi-process.c */ #include "dlt-kpi-process.h" #include #include DltReturnValue dlt_kpi_read_process_file_to_str(pid_t pid, char **target_str, char *subdir); unsigned long int dlt_kpi_read_process_stat_to_ulong(pid_t pid, unsigned int index); DltReturnValue dlt_kpi_read_process_stat_cmdline(pid_t pid, char **buffer); DltReturnValue dlt_kpi_process_update_io_wait(DltKpiProcess *process, unsigned long int time_dif_ms) { if (process == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } unsigned long int total_io_wait = dlt_kpi_read_process_stat_to_ulong(process->pid, 42); int cpu_count = dlt_kpi_get_cpu_count(); process->io_wait = (total_io_wait - process->last_io_wait) * 1000 / sysconf(_SC_CLK_TCK); /* busy milliseconds since last update */ if ((time_dif_ms > 0) && (cpu_count > 0)) process->io_wait = process->io_wait * 1000 / time_dif_ms / cpu_count; /* busy milliseconds per second per CPU */ process->last_io_wait = total_io_wait; return DLT_RETURN_OK; } DltReturnValue dlt_kpi_process_update_cpu_time(DltKpiProcess *process, unsigned long int time_dif_ms) { if (process == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } unsigned long int utime = dlt_kpi_read_process_stat_to_ulong(process->pid, 14); unsigned long int stime = dlt_kpi_read_process_stat_to_ulong(process->pid, 15); unsigned long total_cpu_time = utime + stime; if ((process->last_cpu_time > 0) && (process->last_cpu_time <= total_cpu_time)) { int cpu_count = dlt_kpi_get_cpu_count(); process->cpu_time = (total_cpu_time - process->last_cpu_time) * 1000 / sysconf(_SC_CLK_TCK); /* busy milliseconds since last update */ if ((time_dif_ms > 0) && (cpu_count > 0)) process->cpu_time = process->cpu_time * 1000 / time_dif_ms / cpu_count; /* busy milliseconds per second per CPU */ } else { process->cpu_time = 0; } process->last_cpu_time = total_cpu_time; return DLT_RETURN_OK; } DltReturnValue dlt_kpi_process_update_rss(DltKpiProcess *process) { if (process == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } process->rss = dlt_kpi_read_process_stat_to_ulong(process->pid, 24); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_process_update_ctx_switches(DltKpiProcess *process) { if (process == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } char *buffer, *tok, *last_tok; char *delim = " :\t\n"; last_tok = NULL; DltReturnValue ret; if ((ret = dlt_kpi_read_process_file_to_str(process->pid, &buffer, "status")) < DLT_RETURN_OK) return ret; process->ctx_switches = 0; tok = strtok(buffer, delim); while (tok != NULL) { if (last_tok != NULL) { if ((strcmp(last_tok, "voluntary_ctxt_switches") == 0) || (strcmp(last_tok, "nonvoluntary_ctxt_switches") == 0)) { char *chk; process->ctx_switches += strtol(tok, &chk, 10); if (*chk != '\0') { fprintf(stderr, "Could not parse ctx_switches info from /proc/%d/status", process->pid); free(buffer); return DLT_RETURN_ERROR; } } } last_tok = tok; tok = strtok(NULL, delim); } free(buffer); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_process_update_io_bytes(DltKpiProcess *process) { if (process == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } char *buffer, *tok, *last_tok; char *delim = " :\t\n"; last_tok = NULL; DltReturnValue ret; if ((ret = dlt_kpi_read_process_file_to_str(process->pid, &buffer, "io")) < DLT_RETURN_OK) return ret; process->io_bytes = 0; tok = strtok(buffer, delim); while (tok != NULL) { if (last_tok != NULL) { if ((strcmp(last_tok, "rchar") == 0) || (strcmp(last_tok, "wchar") == 0)) { char *chk; process->io_bytes += strtoul(tok, &chk, 10); if (*chk != '\0') { fprintf(stderr, "Could not parse io_bytes info from /proc/%d/io", process->pid); free(buffer); return DLT_RETURN_ERROR; } } } last_tok = tok; tok = strtok(NULL, delim); } free(buffer); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_update_process(DltKpiProcess *process, unsigned long int time_dif_ms) { if (process == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } dlt_kpi_process_update_io_wait(process, time_dif_ms); dlt_kpi_process_update_cpu_time(process, time_dif_ms); dlt_kpi_process_update_rss(process); dlt_kpi_process_update_ctx_switches(process); dlt_kpi_process_update_io_bytes(process); return DLT_RETURN_OK; } DltKpiProcess *dlt_kpi_create_process(int pid) { DltKpiProcess *new_process = malloc(sizeof(DltKpiProcess)); if (new_process == NULL) { fprintf(stderr, "%s: Out of Memory \n", __func__); return NULL; } memset(new_process, 0, sizeof(DltKpiProcess)); new_process->pid = pid; new_process->ppid = (pid_t)dlt_kpi_read_process_stat_to_ulong(pid, 4); dlt_kpi_read_process_file_to_str(pid, &(new_process->command_line), "cmdline"); if (new_process->command_line != NULL) if (strlen(new_process->command_line) == 0) { free(new_process->command_line); dlt_kpi_read_process_stat_cmdline(pid, &(new_process->command_line)); } dlt_kpi_update_process(new_process, 0); return new_process; } DltKpiProcess *dlt_kpi_clone_process(DltKpiProcess *original) { if (original == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return NULL; } /* DltKpiProcess *new_process = dlt_kpi_create_process(original->pid); */ DltKpiProcess *new_process = malloc(sizeof(DltKpiProcess)); if (new_process == NULL) { fprintf(stderr, "%s: Out of Memory\n", __func__); return NULL; } memcpy(new_process, original, sizeof(DltKpiProcess)); if (original->command_line != NULL) { new_process->command_line = malloc(strlen(original->command_line) + 1); if (new_process->command_line == NULL) { fprintf(stderr, "%s: Out of Memory\n", __func__); free(new_process); return NULL; } strncpy(new_process->command_line, original->command_line, strlen(original->command_line) + 1); } else { new_process->command_line = NULL; } new_process->next = new_process->prev = NULL; return new_process; } DltReturnValue dlt_kpi_free_process(DltKpiProcess *process) { if (process == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (process->command_line != NULL) free(process->command_line); free(process); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_print_process(DltKpiProcess *process) { if (process == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } printf("[PID %d]\n", process->pid); printf(" > PPID : %d\n", process->ppid); printf(" > CMDLINE : %s\n", process->command_line); printf(" > CPUTIME : %lu (busy ms/s)\n", process->cpu_time); printf(" > RSS : %ld\n", process->rss); printf(" > CTXSWTC : %ld\n", process->ctx_switches); printf(" > IOBYTES : %lu\n", process->io_bytes); printf(" > IOWAIT : %ld (%ld)\n", process->io_wait, process->last_io_wait); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_read_process_file_to_str(pid_t pid, char **target_str, char *subdir) { if (target_str == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_ERROR; } *target_str = NULL; if (pid <= 0) { fprintf(stderr, "%s: Invalid Parameter (PID)\n", __func__); return DLT_RETURN_ERROR; } if (subdir == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_ERROR; } char filename[BUFFER_SIZE]; snprintf(filename, BUFFER_SIZE, "/proc/%d/%s", pid, subdir); return dlt_kpi_read_file_compact(filename, target_str); } unsigned long int dlt_kpi_read_process_stat_to_ulong(pid_t pid, unsigned int index) { if (pid <= 0) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return 0; } char *buffer = NULL; if (dlt_kpi_read_process_file_to_str(pid, &buffer, "stat") < DLT_RETURN_OK) { /* fprintf(stderr, "dlt_kpi_read_process_stat_to_ulong(): Error while reading process stat file. Pid: %d. Requested index: %u\n", pid, index); // can happen if process closed shortly before */ if (buffer != NULL) free(buffer); return 0; } char *tok = strtok(buffer, " \t\n"); unsigned int i = 1, found = 0; while (tok != NULL) { if (i == index) { found = 1; break; } i++; tok = strtok(NULL, " \t\n"); } unsigned long int ret = 0; if (found) { char *check = NULL; ret = strtoul(tok, &check, 10); if (*check != '\0') { fprintf(stderr, "dlt_kpi_read_process_stat_to_ulong(): Could not extract token\n"); ret = 0; } } else { fprintf(stderr, "dlt_kpi_read_process_stat_to_ulong(): Index not found\n"); } free(buffer); return ret; } DltReturnValue dlt_kpi_read_process_stat_cmdline(pid_t pid, char **buffer) { if (pid <= 0) { fprintf(stderr, "%s: Invalid Parameter (PID)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (buffer == NULL) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } char *tmp_buffer = NULL; DltReturnValue tmp = dlt_kpi_read_process_file_to_str(pid, &tmp_buffer, "stat"); if (tmp < DLT_RETURN_OK) { if (tmp_buffer != NULL) free(tmp_buffer); return tmp; } char *tok = strtok(tmp_buffer, " \t\n"); unsigned int i = 1; while (tok != NULL) { if (i == 2) break; i++; tok = strtok(NULL, " \t\n"); } if (i == 2) { (*buffer) = malloc(strlen(tok) + 1); strncpy(*buffer, tok, strlen(tok) + 1); } else { fprintf(stderr, "dlt_kpi_read_process_stat_cmdline(): cmdline entry not found\n"); return DLT_RETURN_ERROR; } free(tmp_buffer); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_get_msg_process_update(DltKpiProcess *process, char *buffer, int maxlen) { if ((process == NULL) || (buffer == NULL)) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } snprintf(buffer, maxlen, "%d;%lu;%ld;%ld;%lu;%lu", process->pid, process->cpu_time, process->rss, process->ctx_switches, process->io_bytes, process->io_wait); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_get_msg_process_new(DltKpiProcess *process, char *buffer, int maxlen) { if ((process == NULL) || (buffer == NULL)) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } snprintf(buffer, maxlen, "%d;%d;%s", process->pid, process->ppid, process->command_line); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_get_msg_process_stop(DltKpiProcess *process, char *buffer, int maxlen) { if ((process == NULL) || (buffer == NULL)) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } snprintf(buffer, maxlen, "%d", process->pid); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_get_msg_process_commandline(DltKpiProcess *process, char *buffer, int maxlen) { if ((process == NULL) || (buffer == NULL)) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } snprintf(buffer, maxlen, "%d;%s", process->pid, process->command_line); return DLT_RETURN_OK; } dlt-daemon-2.18.6/src/kpi/dlt-kpi-process.h000066400000000000000000000035061377520261000204060ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-kpi-process.h */ #ifndef SRC_KPI_DLT_KPI_PROCESS_H_ #define SRC_KPI_DLT_KPI_PROCESS_H_ #include "dlt.h" #include #include "dlt-kpi-common.h" typedef struct DltKpiEventWatch DltKpiEventWatch; /* forward declaration */ typedef struct DltKpiProcess { pid_t pid, ppid; char *command_line; unsigned long int cpu_time, last_cpu_time, io_wait, last_io_wait, io_bytes; long int rss, ctx_switches; struct DltKpiProcess *next, *prev; } DltKpiProcess; DltKpiProcess *dlt_kpi_create_process(); DltKpiProcess *dlt_kpi_clone_process(DltKpiProcess *original); DltReturnValue dlt_kpi_free_process(DltKpiProcess *process); DltReturnValue dlt_kpi_print_process(DltKpiProcess *process); DltReturnValue dlt_kpi_update_process(DltKpiProcess *process, unsigned long int time_dif_ms); DltReturnValue dlt_kpi_get_msg_process_new(DltKpiProcess *process, char *buffer, int maxlen); DltReturnValue dlt_kpi_get_msg_process_stop(DltKpiProcess *process, char *buffer, int maxlen); DltReturnValue dlt_kpi_get_msg_process_update(DltKpiProcess *process, char *buffer, int maxlen); DltReturnValue dlt_kpi_get_msg_process_commandline(DltKpiProcess *process, char *buffer, int maxlen); #endif /* SRC_KPI_DLT_KPI_PROCESS_H_ */ dlt-daemon-2.18.6/src/kpi/dlt-kpi.c000066400000000000000000000365771377520261000167430ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-kpi.c */ #include "dlt-kpi.h" #include #include #include #include #include DLT_DECLARE_CONTEXT(kpi_ctx); DltKpiConfig config; static volatile sig_atomic_t stop_loop = 0; static DltKpiProcessList *list, *new_process_list, *stopped_process_list, *update_process_list; static struct timespec _tmp_time; static pthread_mutex_t process_list_mutex; void dlt_kpi_stop_loops(int sig); void dlt_kpi_init_sigterm_handler(); DltReturnValue dlt_kpi_init_process_lists(); DltReturnValue dlt_kpi_free_process_lists(); void *dlt_kpi_start_process_thread(); DltReturnValue dlt_kpi_process_loop(); DltReturnValue dlt_kpi_update_process_list(DltKpiProcessList *list, unsigned long int time_dif_ms); void *dlt_kpi_start_irq_thread(); DltReturnValue dlt_kpi_irq_loop(); void *dlt_kpi_start_check_thread(); DltReturnValue dlt_kpi_check_loop(); DltReturnValue dlt_kpi_log_check_commandlines(); unsigned long int timespec_to_millis(struct timespec *time) { return (time->tv_sec) * 1000 + (time->tv_nsec / 1000000); } unsigned long int get_millis() { clock_gettime(CLOCK_REALTIME, &_tmp_time); return timespec_to_millis(&_tmp_time); } int main(int argc, char **argv) { printf("Launching dlt-kpi...\n"); if (dlt_kpi_init(argc, argv, &config) < DLT_RETURN_OK) { fprintf(stderr, "Initialization error!\n"); return -1; } dlt_kpi_init_sigterm_handler(); if (dlt_kpi_init_process_lists() < DLT_RETURN_OK) { fprintf(stderr, "Error occurred initializing process lists\n"); return -1; } if (pthread_mutex_init(&process_list_mutex, NULL) < 0) { fprintf(stderr, "Error occurred initializing mutex\n"); return -1; } DLT_REGISTER_APP("PROC", "/proc/-filesystem logger application"); DLT_REGISTER_CONTEXT_LL_TS(kpi_ctx, "PROC", "/proc/-filesystem logger context", config.log_level, 1); pthread_t process_thread; pthread_t irq_thread; pthread_t check_thread; if (pthread_create(&process_thread, NULL, &dlt_kpi_start_process_thread, NULL) != 0) { fprintf(stderr, "Could not create thread\n"); return -1; } if (pthread_create(&irq_thread, NULL, &dlt_kpi_start_irq_thread, NULL) != 0) { fprintf(stderr, "Could not create thread\n"); return -1; } if (pthread_create(&check_thread, NULL, &dlt_kpi_start_check_thread, NULL) != 0) { fprintf(stderr, "Could not create thread\n"); return -1; } pthread_join(process_thread, NULL); pthread_join(irq_thread, NULL); pthread_join(check_thread, NULL); DLT_UNREGISTER_CONTEXT(kpi_ctx); DLT_UNREGISTER_APP(); pthread_mutex_destroy(&process_list_mutex); dlt_kpi_free_process_lists(); printf("Done.\n"); return 0; } void dlt_kpi_init_sigterm_handler() { struct sigaction action; memset(&action, 0, sizeof(struct sigaction)); action.sa_handler = dlt_kpi_stop_loops; sigaction(SIGTERM, &action, NULL); } void dlt_kpi_stop_loops(int sig) { if (sig > -1) fprintf(stderr, "dlt-kpi is now terminating due to signal %d...\n", sig); else fprintf(stderr, "dlt-kpi is now terminating due to an error...\n"); stop_loop = 1; } DltReturnValue dlt_kpi_init_process_lists() { if ((list = dlt_kpi_create_process_list()) == NULL) return DLT_RETURN_ERROR; if ((new_process_list = dlt_kpi_create_process_list()) == NULL) return DLT_RETURN_ERROR; if ((stopped_process_list = dlt_kpi_create_process_list()) == NULL) return DLT_RETURN_ERROR; if ((update_process_list = dlt_kpi_create_process_list()) == NULL) return DLT_RETURN_ERROR; return DLT_RETURN_OK; } DltReturnValue dlt_kpi_free_process_lists() { DltReturnValue ret = DLT_RETURN_OK; if (dlt_kpi_free_process_list(list) < DLT_RETURN_OK) ret = DLT_RETURN_ERROR; if (dlt_kpi_free_process_list(new_process_list) < DLT_RETURN_OK) ret = DLT_RETURN_ERROR; if (dlt_kpi_free_process_list(stopped_process_list) < DLT_RETURN_OK) ret = DLT_RETURN_ERROR; if (dlt_kpi_free_process_list(update_process_list) < DLT_RETURN_OK) ret = DLT_RETURN_ERROR; return ret; } void *dlt_kpi_start_process_thread() { if (dlt_kpi_process_loop() < DLT_RETURN_OK) dlt_kpi_stop_loops(-1); return NULL; } DltReturnValue dlt_kpi_process_loop() { static unsigned long int old_millis, sleep_millis, dif_millis; struct timespec ts; old_millis = get_millis(); while (!stop_loop) { /*DltReturnValue ret = */ dlt_kpi_update_process_list(list, config.process_log_interval); /*if(ret < DLT_RETURN_OK) */ /* return ret; */ dif_millis = get_millis() - old_millis; if (dif_millis >= (unsigned long)(config.process_log_interval)) sleep_millis = 0; else sleep_millis = config.process_log_interval - dif_millis; ts.tv_sec = (sleep_millis * NANOSEC_PER_MILLISEC) / NANOSEC_PER_SEC; ts.tv_nsec = (sleep_millis * NANOSEC_PER_MILLISEC) % NANOSEC_PER_SEC; nanosleep(&ts, NULL); old_millis = get_millis(); } return DLT_RETURN_OK; } DltReturnValue dlt_kpi_log_list(DltKpiProcessList *list, DltReturnValue (*process_callback)(DltKpiProcess *, char *, int), char *title, int delete_elements) { if ((list == NULL) || (process_callback == NULL) || (title == NULL)) { fprintf(stderr, "%s: Invalid Parameter (NULL)\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } dlt_kpi_reset_cursor(list); if (list->cursor == NULL) return DLT_RETURN_OK; /* list empty; nothing to do */ /* Synchronization message */ DLT_LOG(kpi_ctx, config.log_level, DLT_STRING(title), DLT_STRING("BEG")); DltReturnValue ret; DltContextData data; char buffer[BUFFER_SIZE]; buffer[0] = '\0'; if ((ret = dlt_user_log_write_start(&kpi_ctx, &data, config.log_level)) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_start() returned error.\n", __func__); return ret; } if ((ret = dlt_user_log_write_string(&data, title)) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_string() returned error.\n", __func__); return ret; } do { if ((ret = (*process_callback)(list->cursor, buffer, sizeof(buffer) - 1)) < DLT_RETURN_OK) return ret; if ((ret = dlt_user_log_write_string(&data, buffer)) < DLT_RETURN_OK) { /* Log buffer full => Write log and start new one*/ if ((ret = dlt_user_log_write_finish(&data)) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_finish() returned error.\n", __func__); return ret; } if ((ret = dlt_user_log_write_start(&kpi_ctx, &data, config.log_level)) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_start() returned error.\n", __func__); return ret; } if ((ret = dlt_user_log_write_string(&data, title)) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_string() returned error.\n", __func__); return ret; } } else if (delete_elements) { if ((ret = dlt_kpi_remove_process_at_cursor(list)) < DLT_RETURN_OK) return ret; } else { list->cursor = list->cursor->next; } } while (list->cursor != NULL); if ((ret = dlt_user_log_write_finish(&data)) < DLT_RETURN_OK) { fprintf(stderr, "%s: dlt_user_log_write_finish() returned error.\n", __func__); return ret; } /* Synchronization message */ DLT_LOG(kpi_ctx, config.log_level, DLT_STRING(title), DLT_STRING("END")); return DLT_RETURN_OK; } DltReturnValue dlt_kpi_update_process_list(DltKpiProcessList *list, unsigned long int time_dif_ms) { static char *strchk; static DltReturnValue tmp_ret; static struct dirent *current_dir; static pid_t current_dir_pid; if (list == NULL) { fprintf(stderr, "dlt_kpi_update_process_list(): Nullpointer parameter"); return DLT_RETURN_WRONG_PARAMETER; } DIR *proc_dir = opendir("/proc"); if (proc_dir == NULL) { dlt_log(LOG_ERR, "Could not open /proc/ !\n"); return DLT_RETURN_ERROR; } current_dir = readdir(proc_dir); dlt_kpi_reset_cursor(list); int debug_process_count = 0; if (pthread_mutex_lock(&process_list_mutex) < 0) { fprintf(stderr, "Can't lock mutex\n"); return DLT_RETURN_ERROR; } while (1) { if (current_dir == NULL) { /* no more active processes.. delete all remaining processes in the list */ if (list->cursor != NULL) while (list->cursor != NULL) { if ((tmp_ret = dlt_kpi_add_process_after_cursor(stopped_process_list, dlt_kpi_clone_process(list->cursor))) < DLT_RETURN_OK) return tmp_ret; dlt_kpi_remove_process_at_cursor(list); } break; } current_dir_pid = strtol(current_dir->d_name, &strchk, 10); if ((*strchk != '\0') || (current_dir_pid <= 0)) { /* no valid PID */ current_dir = readdir(proc_dir); /* next process in proc-fs */ continue; } /* compare the /proc/-filesystem with our process-list */ if ((list->cursor == NULL) || (current_dir_pid < list->cursor->pid)) { /* New Process */ DltKpiProcess *new_process = dlt_kpi_create_process(current_dir_pid); if (new_process == NULL) { fprintf(stderr, "Error: Could not create process (out of memory?)\n"); return DLT_RETURN_ERROR; } if ((tmp_ret = dlt_kpi_add_process_before_cursor(list, new_process)) < DLT_RETURN_OK) return tmp_ret; if ((tmp_ret = dlt_kpi_add_process_before_cursor(new_process_list, dlt_kpi_clone_process(new_process))) < DLT_RETURN_OK) return tmp_ret; current_dir = readdir(proc_dir); /* next process in proc-fs */ debug_process_count++; } else if (current_dir_pid > list->cursor->pid) /* Process ended */ { if ((tmp_ret = dlt_kpi_add_process_after_cursor(stopped_process_list, dlt_kpi_clone_process(list->cursor))) < DLT_RETURN_OK) return tmp_ret; if ((tmp_ret = dlt_kpi_remove_process_at_cursor(list)) < DLT_RETURN_OK) return tmp_ret; } else if (current_dir_pid == list->cursor->pid) /* Staying process */ { /* update data */ if ((tmp_ret = dlt_kpi_update_process(list->cursor, time_dif_ms)) < DLT_RETURN_OK) return tmp_ret; if (list->cursor->cpu_time > 0) /* only log active processes */ if ((tmp_ret = dlt_kpi_add_process_after_cursor(update_process_list, dlt_kpi_clone_process(list->cursor))) < DLT_RETURN_OK) { fprintf(stderr, "dlt_kpi_update_process_list: Can't add process to list updateProcessList\n"); return tmp_ret; } if ((tmp_ret = dlt_kpi_increment_cursor(list)) < DLT_RETURN_OK) /* next process in list */ return tmp_ret; current_dir = readdir(proc_dir); /* next process in proc-fs */ debug_process_count++; } } if (pthread_mutex_unlock(&process_list_mutex) < 0) { fprintf(stderr, "Can't unlock mutex\n"); return DLT_RETURN_ERROR; } /* Log new processes */ if ((tmp_ret = dlt_kpi_log_list(new_process_list, &dlt_kpi_get_msg_process_new, "NEW", 1)) < DLT_RETURN_OK) return tmp_ret; /* Log stopped processes */ if ((tmp_ret = dlt_kpi_log_list(stopped_process_list, &dlt_kpi_get_msg_process_stop, "STP", 1)) < DLT_RETURN_OK) return tmp_ret; /* Log active processes */ if ((tmp_ret = dlt_kpi_log_list(update_process_list, &dlt_kpi_get_msg_process_update, "ACT", 1)) < DLT_RETURN_OK) return tmp_ret; if (closedir(proc_dir) < 0) fprintf(stderr, "Could not close /proc/ directory\n"); return DLT_RETURN_OK; } void *dlt_kpi_start_irq_thread() { if (dlt_kpi_irq_loop() < DLT_RETURN_OK) dlt_kpi_stop_loops(-1); return NULL; } DltReturnValue dlt_kpi_irq_loop() { static unsigned long int old_millis, sleep_millis, dif_millis; struct timespec ts; old_millis = get_millis(); while (!stop_loop) { /*DltReturnValue ret = */ dlt_kpi_log_interrupts(&kpi_ctx, config.log_level); /*if(ret < DLT_RETURN_OK) */ /* return ret; */ dif_millis = get_millis() - old_millis; if (dif_millis >= (unsigned long)(config.irq_log_interval)) sleep_millis = 0; else sleep_millis = config.irq_log_interval - dif_millis; ts.tv_sec = (sleep_millis * NANOSEC_PER_MILLISEC) / NANOSEC_PER_SEC; ts.tv_nsec = (sleep_millis * NANOSEC_PER_MILLISEC) % NANOSEC_PER_SEC; nanosleep(&ts, NULL); old_millis = get_millis(); } return DLT_RETURN_OK; } void *dlt_kpi_start_check_thread() { if (dlt_kpi_check_loop() < DLT_RETURN_OK) dlt_kpi_stop_loops(-1); return NULL; } DltReturnValue dlt_kpi_check_loop() { static unsigned long int old_millis, sleep_millis, dif_millis; struct timespec ts; old_millis = get_millis(); while (!stop_loop) { /*DltReturnValue ret = */ dlt_kpi_log_check_commandlines(); /*if(ret < DLT_RETURN_OK) */ /* return ret; */ dif_millis = get_millis() - old_millis; if (dif_millis >= (unsigned long)(config.check_log_interval)) sleep_millis = 0; else sleep_millis = config.check_log_interval - dif_millis; ts.tv_sec = (sleep_millis * NANOSEC_PER_MILLISEC) / NANOSEC_PER_SEC; ts.tv_nsec = (sleep_millis * NANOSEC_PER_MILLISEC) % NANOSEC_PER_SEC; nanosleep(&ts, NULL); old_millis = get_millis(); } return DLT_RETURN_OK; } DltReturnValue dlt_kpi_log_check_commandlines() { if (pthread_mutex_lock(&process_list_mutex) < 0) { fprintf(stderr, "Can't lock mutex\n"); return DLT_RETURN_ERROR; } DltReturnValue ret = dlt_kpi_log_list(list, dlt_kpi_get_msg_process_commandline, "CHK", 0); if (pthread_mutex_unlock(&process_list_mutex) < 0) { fprintf(stderr, "Can't unlock mutex\n"); return DLT_RETURN_ERROR; } return ret; } dlt-daemon-2.18.6/src/kpi/dlt-kpi.conf000066400000000000000000000012431377520261000174240ustar00rootroot00000000000000# Configuration file for DLT KPI logger # ######################################################################## # General configuration ######################################################################## # The interval in milliseconds of how often process updates should be logged. (Default: 1000) process_interval = 1000 # The interval in milliseconds of how often interrupt stats should be logged. (Default: 3000) irq_interval = 3000 # The interval in milliseconds of how often the commandlines of all processes should be logged. (Default: 10000) check_interval = 10000 # The used log level. -1 = DEFAULT, 0 = OFF, [...], 6 = VERBOSE (Default: 4) log_level = 4dlt-daemon-2.18.6/src/kpi/dlt-kpi.h000066400000000000000000000032101377520261000167220ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-kpi.h */ #ifndef SRC_KPI_DLT_KPI_H_ #define SRC_KPI_DLT_KPI_H_ #include "dlt.h" #include #include "dlt-kpi-common.h" #include "dlt-kpi-interrupt.h" #include "dlt-kpi-process.h" #include "dlt-kpi-process-list.h" /* CONSTANT DEFINITIONS */ #define DEFAULT_CONF_FILE (CONFIGURATION_FILES_DIR "/dlt-kpi.conf") #define COMMAND_LINE_SIZE 1024 #define NANOSEC_PER_MILLISEC 1000000 #define NANOSEC_PER_SEC 1000000000 /* STRUCTURES */ typedef struct { char *configurationFileName; int customConfigFile; } DltKpiOptions; typedef struct { int process_log_interval, irq_log_interval, check_log_interval; DltLogLevelType log_level; } DltKpiConfig; /* FUNCTION DECLARATIONS: */ DltReturnValue dlt_kpi_read_command_line(DltKpiOptions *options, int argc, char **argv); DltReturnValue dlt_kpi_read_configuration_file(DltKpiConfig *config, char *file_name); void dlt_kpi_free_cli_options(DltKpiOptions *options); DltReturnValue dlt_kpi_init(int argc, char **argv, DltKpiConfig *config); #endif /* SRC_KPI_DLT_KPI_H_ */ dlt-daemon-2.18.6/src/lib/000077500000000000000000000000001377520261000151745ustar00rootroot00000000000000dlt-daemon-2.18.6/src/lib/CMakeLists.txt000066400000000000000000000036101377520261000177340ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### set(dlt_LIB_SRCS dlt_user.c dlt_client.c dlt_filetransfer.c dlt_env_ll.c ${PROJECT_SOURCE_DIR}/src/shared/dlt_common.c ${PROJECT_SOURCE_DIR}/src/shared/dlt_protocol.c ${PROJECT_SOURCE_DIR}/src/shared/dlt_user_shared.c ) if(WITH_DLT_SHM_ENABLE) set(dlt_LIB_SRCS ${dlt_LIB_SRCS} ${PROJECT_SOURCE_DIR}/src/shared/dlt_shm.c) endif() add_library(dlt ${dlt_LIB_SRCS}) if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") set(RT_LIBRARY rt) set(SOCKET_LIBRARY "") else() set(RT_LIBRARY "") set(SOCKET_LIBRARY socket) endif() if(HAVE_FUNC_PTHREAD_SETNAME_NP) add_definitions(-DDLT_USE_PTHREAD_SETNAME_NP) message(STATUS "Using pthread_setname_np API to set thread name") else() message(STATUS "pthread_setname_np API not available on this platform") endif() target_link_libraries(dlt ${RT_LIBRARY} ${SOCKET_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) target_include_directories(dlt PUBLIC ${PROJECT_SOURCE_DIR}/include/dlt ${PROJECT_BINARY_DIR}/include/dlt) if(WITH_LIB_SHORT_VERSION) set_target_properties(dlt PROPERTIES VERSION ${PROJECT_VERSION_MAJOR} SOVERSION ${PROJECT_VERSION_MAJOR}) else() set_target_properties(dlt PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) endif() install(TARGETS dlt RUNTIME DESTINATION bin COMPONENT base LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT base ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/static COMPONENT base) dlt-daemon-2.18.6/src/lib/dlt_client.c000066400000000000000000001137531377520261000174730ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_client.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_client.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision$ * $LastChangedDate$ * $LastChangedBy$ * Initials Date Comment * aw 12.07.2010 initial */ #include #if defined (__WIN32__) || defined (_MSC_VER) # pragma warning(disable : 4996) /* Switch off C4996 warnings */ # include /* for socket(), connect(), send(), and recv() */ #else # include /* for socket(), connect(), send(), and recv() */ # include /* for sockaddr_in and inet_addr() */ # include # include # include #endif #if defined(_MSC_VER) # include #else # include # include #endif #include #include /* for malloc(), free() */ #include /* for strlen(), memcmp(), memmove() */ #include #include #include "dlt_types.h" #include "dlt_client.h" #include "dlt_client_cfg.h" static int (*message_callback_function)(DltMessage *message, void *data) = NULL; void dlt_client_register_message_callback(int (*registerd_callback)(DltMessage *message, void *data)) { message_callback_function = registerd_callback; } DltReturnValue dlt_client_init_port(DltClient *client, int port, int verbose) { if (verbose && (port != DLT_DAEMON_TCP_PORT)) dlt_vlog(LOG_INFO, "Init dlt client struct with port %d\n", port); if (client == NULL) return DLT_RETURN_ERROR; client->sock = -1; client->servIP = NULL; client->serialDevice = NULL; client->baudrate = DLT_CLIENT_INITIAL_BAUDRATE; client->port = port; client->socketPath = NULL; client->mode = DLT_CLIENT_MODE_TCP; client->receiver.buffer = NULL; client->receiver.buf = NULL; client->receiver.backup_buf = NULL; client->hostip = NULL; return DLT_RETURN_OK; } DltReturnValue dlt_client_init(DltClient *client, int verbose) { char *env_daemon_port; int tmp_port; /* the port may be specified by an environment variable, defaults to DLT_DAEMON_TCP_PORT */ unsigned short servPort = DLT_DAEMON_TCP_PORT; /* the port may be specified by an environment variable */ env_daemon_port = getenv(DLT_CLIENT_ENV_DAEMON_TCP_PORT); if (env_daemon_port != NULL) { tmp_port = atoi(env_daemon_port); if ((tmp_port < IPPORT_RESERVED) || ((unsigned)tmp_port > USHRT_MAX)) { dlt_vlog(LOG_ERR, "Specified port is out of possible range: %d.\n", tmp_port); return DLT_RETURN_ERROR; } else { servPort = (unsigned short)tmp_port; } } if (verbose) dlt_vlog(LOG_INFO, "Init dlt client struct with default port: %hu.\n", servPort); return dlt_client_init_port(client, servPort, verbose); } DltReturnValue dlt_client_connect(DltClient *client, int verbose) { const int yes = 1; int connect_errno = 0; char portnumbuffer[33]; struct addrinfo hints, *servinfo, *p; struct sockaddr_un addr; int rv; struct ip_mreq mreq; DltReceiverType receiver_type = DLT_RECEIVE_FD; memset(&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_STREAM; if (client == 0) return DLT_RETURN_ERROR; switch (client->mode) { case DLT_CLIENT_MODE_TCP: snprintf(portnumbuffer, 32, "%d", client->port); if ((rv = getaddrinfo(client->servIP, portnumbuffer, &hints, &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); return DLT_RETURN_ERROR; } for (p = servinfo; p != NULL; p = p->ai_next) { if ((client->sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) < 0) { dlt_vlog(LOG_WARNING, "socket() failed! %s\n", strerror(errno)); continue; } if (connect(client->sock, p->ai_addr, p->ai_addrlen) < 0) { connect_errno = errno; close(client->sock); continue; } break; } freeaddrinfo(servinfo); if (p == NULL) { dlt_vlog(LOG_ERR, "ERROR: failed to connect! %s\n", strerror(connect_errno)); return DLT_RETURN_ERROR; } if (verbose) printf("Connected to DLT daemon (%s)\n", client->servIP); receiver_type = DLT_RECEIVE_SOCKET; break; case DLT_CLIENT_MODE_SERIAL: /* open serial connection */ client->sock = open(client->serialDevice, O_RDWR); if (client->sock < 0) { fprintf(stderr, "ERROR: Failed to open device %s\n", client->serialDevice); return DLT_RETURN_ERROR; } if (isatty(client->sock)) { #if !defined (__WIN32__) if (dlt_setup_serial(client->sock, client->baudrate) < DLT_RETURN_OK) { fprintf(stderr, "ERROR: Failed to configure serial device %s (%s) \n", client->serialDevice, strerror(errno)); return DLT_RETURN_ERROR; } #else return DLT_RETURN_ERROR; #endif } else { if (verbose) fprintf(stderr, "ERROR: Device is not a serial device, device = %s (%s) \n", client->serialDevice, strerror(errno)); return DLT_RETURN_ERROR; } if (verbose) printf("Connected to %s\n", client->serialDevice); receiver_type = DLT_RECEIVE_FD; break; case DLT_CLIENT_MODE_UNIX: if ((client->sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { fprintf(stderr, "ERROR: (unix) socket error: %s\n", strerror(errno)); return DLT_RETURN_ERROR; } memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; memcpy(addr.sun_path, client->socketPath, sizeof(addr.sun_path) - 1); if (connect(client->sock, (struct sockaddr *) &addr, sizeof(addr)) == -1) { fprintf(stderr, "ERROR: (unix) connect error: %s\n", strerror(errno)); return DLT_RETURN_ERROR; } if (client->sock < 0) { fprintf(stderr, "ERROR: Failed to open device %s\n", client->socketPath); return DLT_RETURN_ERROR; } receiver_type = DLT_RECEIVE_SOCKET; break; case DLT_CLIENT_MODE_UDP_MULTICAST: if ((client->sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { fprintf(stderr, "ERROR: socket error: %s\n", strerror(errno)); return DLT_RETURN_ERROR; } /* allow multiple sockets to use the same PORT number */ if (setsockopt(client->sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) { fprintf(stderr, "ERROR: Reusing address failed: %s\n", strerror(errno)); return DLT_RETURN_ERROR; } memset(&client->receiver.addr, 0, sizeof(client->receiver.addr)); client->receiver.addr.sin_family = AF_INET; client->receiver.addr.sin_addr.s_addr = htonl(INADDR_ANY); client->receiver.addr.sin_port = htons(client->port); /* bind to receive address */ if (bind(client->sock, (struct sockaddr*) &client->receiver.addr, sizeof(client->receiver.addr)) < 0) { fprintf(stderr, "ERROR: bind failed: %s\n", strerror(errno)); return DLT_RETURN_ERROR; } mreq.imr_interface.s_addr = htonl(INADDR_ANY); if (client->hostip) { mreq.imr_interface.s_addr = inet_addr(client->hostip); } if (client->servIP == NULL) { fprintf(stderr, "ERROR: server address not set\n"); return DLT_RETURN_ERROR; } mreq.imr_multiaddr.s_addr = inet_addr(client->servIP); if (mreq.imr_multiaddr.s_addr == (in_addr_t)-1) { fprintf(stderr, "ERROR: server address not not valid %s\n", client->servIP); return DLT_RETURN_ERROR; } if (setsockopt(client->sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq)) < 0) { fprintf(stderr, "ERROR: setsockopt add membership failed: %s\n", strerror(errno)); return DLT_RETURN_ERROR; } receiver_type = DLT_RECEIVE_UDP_SOCKET; break; default: if (verbose) fprintf(stderr, "ERROR: Mode not supported: %d\n", client->mode); return DLT_RETURN_ERROR; } if (dlt_receiver_init(&(client->receiver), client->sock, receiver_type, DLT_RECEIVE_BUFSIZE) != DLT_RETURN_OK) { fprintf(stderr, "ERROR initializing receiver\n"); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } DltReturnValue dlt_client_cleanup(DltClient *client, int verbose) { int ret = DLT_RETURN_OK; if (verbose) printf("Cleanup dlt client\n"); if (client == NULL) return DLT_RETURN_WRONG_PARAMETER; if (client->sock != -1) close(client->sock); if (dlt_receiver_free(&(client->receiver)) != DLT_RETURN_OK) { dlt_vlog(LOG_WARNING, "Failed to free receiver\n"); ret = DLT_RETURN_ERROR; } if (client->serialDevice) { free(client->serialDevice); client->serialDevice = NULL; } if (client->servIP) { free(client->servIP); client->servIP = NULL; } if (client->socketPath) { free(client->socketPath); client->socketPath = NULL; } if (client->hostip) { free(client->hostip); client->hostip = NULL; } return ret; } DltReturnValue dlt_client_main_loop(DltClient *client, void *data, int verbose) { DltMessage msg; int ret; if (client == 0) return DLT_RETURN_ERROR; if (dlt_message_init(&msg, verbose) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; while (1) { /* wait for data from socket or serial connection */ ret = dlt_receiver_receive(&(client->receiver)); if (ret <= 0) { /* No more data to be received */ if (dlt_message_free(&msg, verbose) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; return DLT_RETURN_TRUE; } while (dlt_message_read(&msg, (unsigned char *)(client->receiver.buf), (unsigned int) client->receiver.bytesRcvd, 0, verbose) == DLT_MESSAGE_ERROR_OK) { /* Call callback function */ if (message_callback_function) (*message_callback_function)(&msg, data); if (msg.found_serialheader) { if (dlt_receiver_remove(&(client->receiver), (int) (msg.headersize + msg.datasize - sizeof(DltStorageHeader) + sizeof(dltSerialHeader))) == DLT_RETURN_ERROR) { /* Return value ignored */ dlt_message_free(&msg, verbose); return DLT_RETURN_ERROR; } } else if (dlt_receiver_remove(&(client->receiver), (int) (msg.headersize + msg.datasize - sizeof(DltStorageHeader))) == DLT_RETURN_ERROR) { /* Return value ignored */ dlt_message_free(&msg, verbose); return DLT_RETURN_ERROR; } } if (dlt_receiver_move_to_begin(&(client->receiver)) == DLT_RETURN_ERROR) { /* Return value ignored */ dlt_message_free(&msg, verbose); return DLT_RETURN_ERROR; } } if (dlt_message_free(&msg, verbose) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; return DLT_RETURN_OK; } DltReturnValue dlt_client_send_ctrl_msg(DltClient *client, char *apid, char *ctid, uint8_t *payload, uint32_t size) { DltMessage msg; int ret; int32_t len; uint32_t id_tmp; uint32_t id; if ((client == 0) || (client->sock < 0) || (apid == 0) || (ctid == 0)) return DLT_RETURN_ERROR; /* initialise new message */ if (dlt_message_init(&msg, 0) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; /* prepare payload of data */ msg.datasize = size; if (msg.databuffer && (msg.databuffersize < msg.datasize)) { free(msg.databuffer); msg.databuffer = 0; } if (msg.databuffer == 0) { msg.databuffer = (uint8_t *)malloc(msg.datasize); msg.databuffersize = msg.datasize; } if (msg.databuffer == 0) { dlt_message_free(&msg, 0); return DLT_RETURN_ERROR; } /* copy data */ memcpy(msg.databuffer, payload, size); /* prepare storage header */ msg.storageheader = (DltStorageHeader *)msg.headerbuffer; if (dlt_set_storageheader(msg.storageheader, "") == DLT_RETURN_ERROR) { dlt_message_free(&msg, 0); return DLT_RETURN_ERROR; } /* prepare standard header */ msg.standardheader = (DltStandardHeader *)(msg.headerbuffer + sizeof(DltStorageHeader)); msg.standardheader->htyp = DLT_HTYP_WEID | DLT_HTYP_WTMS | DLT_HTYP_UEH | DLT_HTYP_PROTOCOL_VERSION1; #if (BYTE_ORDER == BIG_ENDIAN) msg.standardheader->htyp = (msg.standardheader->htyp | DLT_HTYP_MSBF); #endif msg.standardheader->mcnt = 0; /* Set header extra parameters */ dlt_set_id(msg.headerextra.ecu, client->ecuid); /*msg.headerextra.seid = 0; */ msg.headerextra.tmsp = dlt_uptime(); /* Copy header extra parameters to headerbuffer */ if (dlt_message_set_extraparameters(&msg, 0) == DLT_RETURN_ERROR) { dlt_message_free(&msg, 0); return DLT_RETURN_ERROR; } /* prepare extended header */ msg.extendedheader = (DltExtendedHeader *)(msg.headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg.standardheader->htyp)); msg.extendedheader->msin = DLT_MSIN_CONTROL_REQUEST; msg.extendedheader->noar = 1; /* number of arguments */ dlt_set_id(msg.extendedheader->apid, (apid[0] == '\0') ? DLT_CLIENT_DUMMY_APP_ID : apid); dlt_set_id(msg.extendedheader->ctid, (ctid[0] == '\0') ? DLT_CLIENT_DUMMY_CON_ID : ctid); /* prepare length information */ msg.headersize = (uint32_t) (sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + sizeof(DltExtendedHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg.standardheader->htyp)); len = (int32_t) (msg.headersize - sizeof(DltStorageHeader) + msg.datasize); if (len > UINT16_MAX) { fprintf(stderr, "Critical: Huge injection message discarded!\n"); dlt_message_free(&msg, 0); return DLT_RETURN_ERROR; } msg.standardheader->len = DLT_HTOBE_16(len); /* Send data (without storage header) */ if ((client->mode == DLT_CLIENT_MODE_TCP) || (client->mode == DLT_CLIENT_MODE_SERIAL)) { /* via FileDescriptor */ ret = (int) write(client->sock, msg.headerbuffer + sizeof(DltStorageHeader), msg.headersize - sizeof(DltStorageHeader)); if (0 > ret) { dlt_log(LOG_ERR, "Sending message failed\n"); dlt_message_free(&msg, 0); return DLT_RETURN_ERROR; } ret = (int) write(client->sock, msg.databuffer, msg.datasize); if (0 > ret) { dlt_log(LOG_ERR, "Sending message failed\n"); dlt_message_free(&msg, 0); return DLT_RETURN_ERROR; } id_tmp = *((uint32_t *)(msg.databuffer)); id = DLT_ENDIAN_GET_32(msg.standardheader->htyp, id_tmp); dlt_vlog(LOG_INFO, "Control message forwarded : %s\n", dlt_get_service_name(id)); } else { /* via Socket */ send(client->sock, (const char *)(msg.headerbuffer + sizeof(DltStorageHeader)), msg.headersize - sizeof(DltStorageHeader), 0); send(client->sock, (const char *)msg.databuffer, msg.datasize, 0); } /* free message */ if (dlt_message_free(&msg, 0) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; return DLT_RETURN_OK; } DltReturnValue dlt_client_send_inject_msg(DltClient *client, char *apid, char *ctid, uint32_t serviceID, uint8_t *buffer, uint32_t size) { uint8_t *payload; int offset; payload = (uint8_t *)malloc(sizeof(uint32_t) + sizeof(uint32_t) + size); if (payload == 0) return DLT_RETURN_ERROR; offset = 0; memcpy(payload, &serviceID, sizeof(serviceID)); offset += (int) sizeof(uint32_t); memcpy(payload + offset, &size, sizeof(size)); offset += (int) sizeof(uint32_t); memcpy(payload + offset, buffer, size); /* free message */ if (dlt_client_send_ctrl_msg(client, apid, ctid, payload, (uint32_t) (sizeof(uint32_t) + sizeof(uint32_t) + size)) == DLT_RETURN_ERROR) { free(payload); return DLT_RETURN_ERROR; } free(payload); return DLT_RETURN_OK; } DltReturnValue dlt_client_send_log_level(DltClient *client, char *apid, char *ctid, uint8_t logLevel) { DltServiceSetLogLevel *req; int ret = DLT_RETURN_ERROR; if (client == NULL) return ret; req = (DltServiceSetLogLevel *)malloc(sizeof(DltServiceSetLogLevel)); if (req == NULL) return ret; memset(req, 0, sizeof(DltServiceSetLogLevel)); req->service_id = DLT_SERVICE_ID_SET_LOG_LEVEL; dlt_set_id(req->apid, apid); dlt_set_id(req->ctid, ctid); req->log_level = logLevel; dlt_set_id(req->com, "remo"); /* free message */ ret = dlt_client_send_ctrl_msg(client, "APP", "CON", (uint8_t *)req, sizeof(DltServiceSetLogLevel)); free(req); return ret; } DltReturnValue dlt_client_get_log_info(DltClient *client) { DltServiceGetLogInfoRequest *req; int ret = DLT_RETURN_ERROR; if (client == NULL) return ret; req = (DltServiceGetLogInfoRequest *)malloc(sizeof(DltServiceGetLogInfoRequest)); if (req == NULL) return ret; req->service_id = DLT_SERVICE_ID_GET_LOG_INFO; req->options = 7; dlt_set_id(req->apid, ""); dlt_set_id(req->ctid, ""); dlt_set_id(req->com, "remo"); /* send control message to daemon*/ ret = dlt_client_send_ctrl_msg(client, "", "", (uint8_t *)req, sizeof(DltServiceGetLogInfoRequest)); free(req); return ret; } DltReturnValue dlt_client_get_default_log_level(DltClient *client) { DltServiceGetDefaultLogLevelRequest *req; int ret = DLT_RETURN_ERROR; if (client == NULL) return ret; req = (DltServiceGetDefaultLogLevelRequest *) malloc(sizeof(DltServiceGetDefaultLogLevelRequest)); if (req == NULL) return ret; req->service_id = DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL; /* send control message to daemon*/ ret = dlt_client_send_ctrl_msg(client, "", "", (uint8_t *)req, sizeof(DltServiceGetDefaultLogLevelRequest)); free(req); return ret; } DltReturnValue dlt_client_get_software_version(DltClient *client) { DltServiceGetSoftwareVersion *req; int ret = DLT_RETURN_ERROR; if (client == NULL) return ret; req = (DltServiceGetSoftwareVersion *)malloc(sizeof(DltServiceGetSoftwareVersion)); req->service_id = DLT_SERVICE_ID_GET_SOFTWARE_VERSION; /* send control message to daemon*/ ret = dlt_client_send_ctrl_msg(client, "", "", (uint8_t *)req, sizeof(DltServiceGetSoftwareVersion)); free(req); return ret; } DltReturnValue dlt_client_send_trace_status(DltClient *client, char *apid, char *ctid, uint8_t traceStatus) { DltServiceSetLogLevel *req; uint8_t *payload; payload = (uint8_t *)malloc(sizeof(DltServiceSetLogLevel)); if (payload == 0) return DLT_RETURN_ERROR; req = (DltServiceSetLogLevel *)payload; memset(req, 0, sizeof(DltServiceSetLogLevel)); req->service_id = DLT_SERVICE_ID_SET_TRACE_STATUS; dlt_set_id(req->apid, apid); dlt_set_id(req->ctid, ctid); req->log_level = traceStatus; dlt_set_id(req->com, "remo"); /* free message */ if (dlt_client_send_ctrl_msg(client, "APP", "CON", payload, sizeof(DltServiceSetLogLevel)) == DLT_RETURN_ERROR) { free(payload); return DLT_RETURN_ERROR; } free(payload); return DLT_RETURN_OK; } DltReturnValue dlt_client_send_default_log_level(DltClient *client, uint8_t defaultLogLevel) { DltServiceSetDefaultLogLevel *req; uint8_t *payload; payload = (uint8_t *)malloc(sizeof(DltServiceSetDefaultLogLevel)); if (payload == 0) return DLT_RETURN_ERROR; req = (DltServiceSetDefaultLogLevel *)payload; req->service_id = DLT_SERVICE_ID_SET_DEFAULT_LOG_LEVEL; req->log_level = defaultLogLevel; dlt_set_id(req->com, "remo"); /* free message */ if (dlt_client_send_ctrl_msg(client, "APP", "CON", payload, sizeof(DltServiceSetDefaultLogLevel)) == DLT_RETURN_ERROR) { free(payload); return DLT_RETURN_ERROR; } free(payload); return DLT_RETURN_OK; } DltReturnValue dlt_client_send_all_log_level(DltClient *client, uint8_t LogLevel) { DltServiceSetDefaultLogLevel *req; uint8_t *payload; payload = (uint8_t *)malloc(sizeof(DltServiceSetDefaultLogLevel)); if (payload == 0) return DLT_RETURN_ERROR; req = (DltServiceSetDefaultLogLevel *)payload; req->service_id = DLT_SERVICE_ID_SET_ALL_LOG_LEVEL; req->log_level = LogLevel; dlt_set_id(req->com, "remo"); /* free message */ if (dlt_client_send_ctrl_msg(client, "APP", "CON", payload, sizeof(DltServiceSetDefaultLogLevel)) == -1) { free(payload); return DLT_RETURN_ERROR; } free(payload); return DLT_RETURN_OK; } DltReturnValue dlt_client_send_default_trace_status(DltClient *client, uint8_t defaultTraceStatus) { DltServiceSetDefaultLogLevel *req; uint8_t *payload; payload = (uint8_t *)malloc(sizeof(DltServiceSetDefaultLogLevel)); if (payload == 0) return DLT_RETURN_ERROR; req = (DltServiceSetDefaultLogLevel *)payload; req->service_id = DLT_SERVICE_ID_SET_DEFAULT_TRACE_STATUS; req->log_level = defaultTraceStatus; dlt_set_id(req->com, "remo"); /* free message */ if (dlt_client_send_ctrl_msg(client, "APP", "CON", payload, sizeof(DltServiceSetDefaultLogLevel)) == DLT_RETURN_ERROR) { free(payload); return DLT_RETURN_ERROR; } free(payload); return DLT_RETURN_OK; } DltReturnValue dlt_client_send_all_trace_status(DltClient *client, uint8_t traceStatus) { DltServiceSetDefaultLogLevel *req; uint8_t *payload; if (client == NULL) { dlt_vlog(LOG_ERR, "%s: Invalid parameters\n", __func__); return DLT_RETURN_ERROR; } payload = (uint8_t *)malloc(sizeof(DltServiceSetDefaultLogLevel)); if (payload == 0) { dlt_vlog(LOG_ERR, "%s: Could not allocate memory %zu\n", __func__, sizeof(DltServiceSetDefaultLogLevel)); return DLT_RETURN_ERROR; } req = (DltServiceSetDefaultLogLevel *)payload; req->service_id = DLT_SERVICE_ID_SET_ALL_TRACE_STATUS; req->log_level = traceStatus; dlt_set_id(req->com, "remo"); /* free message */ if (dlt_client_send_ctrl_msg(client, "APP", "CON", payload, sizeof(DltServiceSetDefaultLogLevel)) == -1) { free(payload); return DLT_RETURN_ERROR; } free(payload); return DLT_RETURN_OK; } DltReturnValue dlt_client_send_timing_pakets(DltClient *client, uint8_t timingPakets) { DltServiceSetVerboseMode *req; uint8_t *payload; payload = (uint8_t *)malloc(sizeof(DltServiceSetVerboseMode)); if (payload == 0) return DLT_RETURN_ERROR; req = (DltServiceSetVerboseMode *)payload; req->service_id = DLT_SERVICE_ID_SET_TIMING_PACKETS; req->new_status = timingPakets; /* free message */ if (dlt_client_send_ctrl_msg(client, "APP", "CON", payload, sizeof(DltServiceSetVerboseMode)) == DLT_RETURN_ERROR) { free(payload); return DLT_RETURN_ERROR; } free(payload); return DLT_RETURN_OK; } DltReturnValue dlt_client_send_store_config(DltClient *client) { uint32_t service_id; service_id = DLT_SERVICE_ID_STORE_CONFIG; /* free message */ if (dlt_client_send_ctrl_msg(client, "APP", "CON", (uint8_t *)&service_id, sizeof(uint32_t)) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; return DLT_RETURN_OK; } DltReturnValue dlt_client_send_reset_to_factory_default(DltClient *client) { uint32_t service_id; service_id = DLT_SERVICE_ID_RESET_TO_FACTORY_DEFAULT; /* free message */ if (dlt_client_send_ctrl_msg(client, "APP", "CON", (uint8_t *)&service_id, sizeof(uint32_t)) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; return DLT_RETURN_OK; } DltReturnValue dlt_client_setbaudrate(DltClient *client, int baudrate) { if (client == 0) return DLT_RETURN_ERROR; client->baudrate = dlt_convert_serial_speed(baudrate); return DLT_RETURN_OK; } DltReturnValue dlt_client_set_mode(DltClient *client, DltClientMode mode) { if (client == 0) return DLT_RETURN_ERROR; client->mode = mode; return DLT_RETURN_OK; } int dlt_client_set_server_ip(DltClient *client, char *ipaddr) { client->servIP = strdup(ipaddr); if (client->servIP == NULL) { dlt_log(LOG_ERR, "ERROR: failed to duplicate server IP\n"); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } int dlt_client_set_host_if_address(DltClient *client, char *hostip) { client->hostip = strdup(hostip); if (client->hostip == NULL) { dlt_log(LOG_ERR, "ERROR: failed to duplicate UDP interface address\n"); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } int dlt_client_set_serial_device(DltClient *client, char *serial_device) { client->serialDevice = strdup(serial_device); if (client->serialDevice == NULL) { dlt_log(LOG_ERR, "ERROR: failed to duplicate serial device\n"); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } int dlt_client_set_socket_path(DltClient *client, char *socket_path) { client->socketPath = strdup(socket_path); if (client->socketPath == NULL) { dlt_log(LOG_ERR, "ERROR: failed to duplicate socket path\n"); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } /** * free allocation when calloc failed * * @param resp DltServiceGetLogInfoResponse * @param count_app_ids number of app_ids which needs to be freed */ DLT_STATIC void dlt_client_free_calloc_failed_get_log_info(DltServiceGetLogInfoResponse *resp, int count_app_ids) { AppIDsType *app = NULL; ContextIDsInfoType *con = NULL; int i = 0; int j = 0; for (i = 0; i < count_app_ids; i++) { app = &(resp->log_info_type.app_ids[i]); for (j = 0; j < app->count_context_ids; j++) { con = &(app->context_id_info[j]); free(con->context_description); con->context_description = NULL; } free(app->app_description); app->app_description = NULL; free(app->context_id_info); app->context_id_info = NULL; } free(resp->log_info_type.app_ids); resp->log_info_type.app_ids = NULL; return; } DltReturnValue dlt_client_parse_get_log_info_resp_text(DltServiceGetLogInfoResponse *resp, char *resp_text) { AppIDsType *app = NULL; ContextIDsInfoType *con = NULL; int i = 0; int j = 0; char *rp = NULL; int rp_count = 0; if ((resp == NULL) || (resp_text == NULL)) return DLT_RETURN_WRONG_PARAMETER; /* ------------------------------------------------------ * get_log_info data structure(all data is ascii) * * get_log_info, aa, bb bb cc cc cc cc dd dd ee ee ee ee ff gg hh hh ii ii ii .. .. * ~~ ~~~~~ ~~~~~~~~~~~ ~~~~~ ~~~~~~~~~~~~~~ * cc cc cc cc dd dd ee ee ee ee ff gg hh hh ii ii ii .. .. * jj jj kk kk kk .. .. * ~~~~~~~~~~~ ~~~~~ ~~~~~~~~~~~~~~ * aa : get mode (fix value at 0x07) * bb bb : list num of apid (little endian) * cc cc cc cc: apid * dd dd : list num of ctid (little endian) * ee ee ee ee: ctid * ff : log level * gg : trace status * hh hh : description length of ctid * ii ii .. : description text of ctid * jj jj : description length of apid * kk kk .. : description text of apid * ------------------------------------------------------ */ rp = resp_text + DLT_GET_LOG_INFO_HEADER; rp_count = 0; /* check if status is acceptable */ if ((resp->status < GET_LOG_INFO_STATUS_MIN) || (resp->status > GET_LOG_INFO_STATUS_MAX)) { if (resp->status == GET_LOG_INFO_STATUS_NO_MATCHING_CTX) dlt_vlog(LOG_WARNING, "The status(%d) is invalid: NO matching Context IDs\n", resp->status); else if (resp->status == GET_LOG_INFO_STATUS_RESP_DATA_OVERFLOW) dlt_vlog(LOG_WARNING, "The status(%d) is invalid: Response data over flow\n", resp->status); else dlt_vlog(LOG_WARNING, "The status(%d) is invalid\n", resp->status); return DLT_RETURN_ERROR; } /* count_app_ids */ resp->log_info_type.count_app_ids = (uint16_t) dlt_getloginfo_conv_ascii_to_uint16_t(rp, &rp_count); resp->log_info_type.app_ids = (AppIDsType *)calloc (resp->log_info_type.count_app_ids, sizeof(AppIDsType)); if (resp->log_info_type.app_ids == NULL) { dlt_vlog(LOG_ERR, "calloc failed for app_ids\n"); dlt_client_free_calloc_failed_get_log_info(resp, 0); return DLT_RETURN_ERROR; } for (i = 0; i < resp->log_info_type.count_app_ids; i++) { app = &(resp->log_info_type.app_ids[i]); /* get app id */ dlt_getloginfo_conv_ascii_to_id(rp, &rp_count, app->app_id, DLT_ID_SIZE); /* count_con_ids */ app->count_context_ids = (uint16_t) dlt_getloginfo_conv_ascii_to_uint16_t(rp, &rp_count); app->context_id_info = (ContextIDsInfoType *)calloc (app->count_context_ids, sizeof(ContextIDsInfoType)); if (app->context_id_info == NULL) { dlt_vlog(LOG_ERR, "calloc failed for context_id_info\n"); dlt_client_free_calloc_failed_get_log_info(resp, i); return DLT_RETURN_ERROR; } for (j = 0; j < app->count_context_ids; j++) { con = &(app->context_id_info[j]); /* get con id */ dlt_getloginfo_conv_ascii_to_id(rp, &rp_count, con->context_id, DLT_ID_SIZE); /* log_level */ if ((resp->status == 4) || (resp->status == 6) || (resp->status == 7)) con->log_level = dlt_getloginfo_conv_ascii_to_int16_t(rp, &rp_count); /* trace status */ if ((resp->status == 5) || (resp->status == 6) || (resp->status == 7)) con->trace_status = dlt_getloginfo_conv_ascii_to_int16_t(rp, &rp_count); /* context desc */ if (resp->status == 7) { con->len_context_description = (uint16_t) dlt_getloginfo_conv_ascii_to_uint16_t(rp, &rp_count); con->context_description = (char *)calloc ((size_t) (con->len_context_description + 1), sizeof(char)); if (con->context_description == 0) { dlt_log(LOG_ERR, "calloc failed for context description\n"); dlt_client_free_calloc_failed_get_log_info(resp, i); return DLT_RETURN_ERROR; } dlt_getloginfo_conv_ascii_to_id(rp, &rp_count, con->context_description, con->len_context_description); } } /* application desc */ if (resp->status == 7) { app->len_app_description = (uint16_t) dlt_getloginfo_conv_ascii_to_uint16_t(rp, &rp_count); app->app_description = (char *)calloc ((size_t) (app->len_app_description + 1), sizeof(char)); if (app->app_description == 0) { dlt_log(LOG_ERR, "calloc failed for application description\n"); dlt_client_free_calloc_failed_get_log_info(resp, i); return DLT_RETURN_ERROR; } dlt_getloginfo_conv_ascii_to_id(rp, &rp_count, app->app_description, app->len_app_description); } } return DLT_RETURN_OK; } int dlt_client_cleanup_get_log_info(DltServiceGetLogInfoResponse *resp) { AppIDsType app; int i = 0; int j = 0; if (resp == NULL) return DLT_RETURN_OK; for (i = 0; i < resp->log_info_type.count_app_ids; i++) { app = resp->log_info_type.app_ids[i]; for (j = 0; j < app.count_context_ids; j++) { free(app.context_id_info[j].context_description); app.context_id_info[j].context_description = NULL; } free(app.context_id_info); app.context_id_info = NULL; free(app.app_description); app.app_description = NULL; } free(resp->log_info_type.app_ids); resp->log_info_type.app_ids = NULL; free(resp); resp = NULL; return DLT_RETURN_OK; } dlt-daemon-2.18.6/src/lib/dlt_client_cfg.h000066400000000000000000000105721377520261000203120ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_client_cfg.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_client_cfg.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ #ifndef DLT_CLIENT_CFG_H #define DLT_CLIENT_CFG_H /*************/ /* Changable */ /*************/ /* Dummy application id of DLT client */ #define DLT_CLIENT_DUMMY_APP_ID "CA1" /* Dummy context id of DLT client */ #define DLT_CLIENT_DUMMY_CON_ID "CC1" /* Size of buffer */ #define DLT_CLIENT_TEXTBUFSIZE 512 /* Initial baudrate */ #if !defined (__WIN32__) && !defined(_MSC_VER) # define DLT_CLIENT_INITIAL_BAUDRATE B115200 #else # define DLT_CLIENT_INITIAL_BAUDRATE 0 #endif /* Name of environment variable for specifying the daemon port */ #define DLT_CLIENT_ENV_DAEMON_TCP_PORT "DLT_DAEMON_TCP_PORT" /************************/ /* Don't change please! */ /************************/ #endif /* DLT_CLIENT_CFG_H */ dlt-daemon-2.18.6/src/lib/dlt_env_ll.c000066400000000000000000000241701377520261000174660ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Intel Corporation * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Stefan Vacek Intel Corporation * * \copyright Copyright Š 2015 Intel Corporation. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_env_ll.c */ #include "dlt_user.h" #include #include #define DLT_ENV_LL_SET_INCREASE 10 /* a generic entry looks like: * ll_item ::= apid:ctid:ll * ll_set ::= ll_item | * ll_set;ll_item */ /** * @brief extract id out of given string * * Extract 4-byte string out of given environment string, the pointer of the * environment string is moved to the next un-used character and the extracted * id is copied into \param id * * Example: * env[] = "abcd:1234:3" * char res[4u]; * char * tmp = &env[0]; * int ret = extract_id(&tmp, res); * assert(ret == 0); * assert(*tmp == ':'); * assert(res[3] == 'd'); * * @param env Environment variable * @param id Extracted ID * @return 0 if successful, -1 else */ int dlt_env_extract_id(char **const env, char *id) { int i; if (!env || !id) return -1; if (!(*env)) return -1; memset(id, 0, 4); for (i = 0; (i < 4) && (**env != ':') && (**env != 0); ++i) *id++ = *((*env)++); /* the next/last character must be ':' */ if ((0 != **env) && (':' == **env)) return 0; return -1; } /** * @brief convert a given string to lower-case * * Stops end of string or if ';' is detected */ int dlt_env_helper_to_lower(char **const env, char *result, int const res_len) { int count = 0; char ch; if (!env || !result) return -1; if (!(*env)) return -1; ch = *(*env); while (ch && (count < res_len - 1) && (ch != ';')) { if ((ch >= 'A') && (ch <= 'Z')) result[count] = (char) (ch + 'a' - 'A'); else result[count] = ch; ch = *(++(*env)); ++count; } result[count] = 0; if (!ch || (ch == ';')) /* full input was parsed */ return 0; else return -1; } int dlt_env_extract_symbolic_ll(char **const env, int8_t *ll) { char result[strlen("verbose") + 1]; if (!env || !ll) return -1; if (!(*env)) return -1; if (dlt_env_helper_to_lower(env, &result[0], (int) sizeof(result)) == 0) { if (strncmp("default", result, sizeof(result)) == 0) *ll = -1; else if (strncmp("off", result, sizeof(result)) == 0) *ll = 0; else if (strncmp("fatal", result, sizeof(result)) == 0) *ll = 1; else if (strncmp("error", result, sizeof(result)) == 0) *ll = 2; else if (strncmp("warning", result, sizeof(result)) == 0) *ll = 3; else if (strncmp("info", result, sizeof(result)) == 0) *ll = 4; else if (strncmp("debug", result, sizeof(result)) == 0) *ll = 5; else if (strncmp("verbose", result, sizeof(result)) == 0) *ll = 6; else return -1; if (**env != 0) (*env)++; return 0; } else { return -1; } } /** * @brief extract log-level out of given string * * A valid log-level is a numeric value in the range of -1 .. 6, with: * -1: default * 0: off * 1: fatal * 2: error * 3: warning * 4: info * 5: debug * 6: verbose * During parsing, the environment string is moved to the next un-used character and the extracted * log-level is written into \param ll * * Example: * env[] = "abcd:1234:6" * int ll; * char ** tmp = &env[10]; // tmp points to '6'! * int ret = extract_ll(&tmp, &ll); * assert(ret == 0); * assert(*tmp == NULL); * assert(ll == 6); * * @param env Environment variable * @param ll Extracted log level * @return 0 if successful, -1 else */ int dlt_env_extract_ll(char **const env, int8_t *ll) { if (!env || !ll) return -1; if (!(*env)) return -1; /* extract number */ if (**env == '-') { (*env)++; if (**env == '1') { *ll = -1; (*env)++; } } else { if ((**env >= '0') && (**env < '7')) { *ll = (int8_t) (**env - '0'); (*env)++; } else if (dlt_env_extract_symbolic_ll(env, ll) != 0) return -1; } /* check end, either next char is NULL or ';' */ if ((**env == ';') || (**env == 0)) return 0; return -1; } /** * @brief extract one item out of string * * @return 0 if successful, -1 else */ int dlt_env_extract_ll_item(char **const env, dlt_env_ll_item *const item) { int ret = -1; if (!env || !item) return -1; if (!(*env)) return -1; memset(item, 0, sizeof(dlt_env_ll_item)); ret = dlt_env_extract_id(env, item->appId); if (ret == -1) return -1; (*env)++; ret = dlt_env_extract_id(env, item->ctxId); if (ret == -1) return -1; (*env)++; ret = dlt_env_extract_ll(env, &item->ll); if (ret == -1) return -1; return 0; } /** * @brief initialize ll_set * * Must call release_ll_set before exit to release all memory * * @return -1 if memory could not be allocated * @return 0 on success */ int dlt_env_init_ll_set(dlt_env_ll_set *const ll_set) { if (!ll_set) return -1; ll_set->array_size = DLT_ENV_LL_SET_INCREASE; ll_set->item = (dlt_env_ll_item *)malloc(sizeof(dlt_env_ll_item) * ll_set->array_size); if (!ll_set->item) { /* should trigger a warning: no memory left */ ll_set->array_size = 0; return -1; } ll_set->num_elem = 0u; return 0; } /** * @brief release ll_set */ void dlt_env_free_ll_set(dlt_env_ll_set *const ll_set) { if (!ll_set) return; if (ll_set->item != NULL) { free(ll_set->item); ll_set->item = NULL; } ll_set->array_size = 0u; ll_set->num_elem = 0u; } /** * @brief increase size of ll_set by LL_SET_INCREASE elements * * @return -1 if memory could not be allocated * @return 0 on success */ int dlt_env_increase_ll_set(dlt_env_ll_set *const ll_set) { dlt_env_ll_item *old_set; size_t old_size; if (!ll_set) return -1; old_set = ll_set->item; old_size = ll_set->array_size; ll_set->array_size += DLT_ENV_LL_SET_INCREASE; ll_set->item = (dlt_env_ll_item *)malloc(sizeof(dlt_env_ll_item) * ll_set->array_size); if (!ll_set->item) { /* should trigger a warning: no memory left */ ll_set->array_size -= DLT_ENV_LL_SET_INCREASE; return -1; } else { memcpy(ll_set->item, old_set, sizeof(dlt_env_ll_item) * old_size); free(old_set); return 0; } } /** * @brief extract all items out of string * * The given set is initialized within this function (memory is allocated). * Make sure, that the caller frees this memory when it is no longer needed! * * @return 0 if successful, -1 else */ int dlt_env_extract_ll_set(char **const env, dlt_env_ll_set *const ll_set) { if (!env || !ll_set) return -1; if (!(*env)) return -1; if (dlt_env_init_ll_set(ll_set) == -1) return -1; do { if (ll_set->num_elem == ll_set->array_size) { if (dlt_env_increase_ll_set(ll_set) == -1) return -1; } if (dlt_env_extract_ll_item(env, &ll_set->item[ll_set->num_elem++]) == -1) return -1; if (**env == ';') (*env)++; } while (**env != 0); return 0; } /** * @brief check if two ids match * * @return 1 if matching, 0 if not */ int dlt_env_ids_match(char const *const a, char const *const b) { if (a[0] != b[0]) return 0; if (a[1] != b[1]) return 0; if (a[2] != b[2]) return 0; if (a[3] != b[3]) return 0; return 1; } /** * @brief check if (and how) apid and ctid match with given item * * Resulting priorities: * - no apid, no ctid only ll given in item: use ll with prio 1 * - no apid, ctid matches: use ll with prio 2 * - no ctid, apid matches: use ll with prio 3 * - apid, ctid matches: use ll with prio 4 * * In case of error, -1 is returned. */ int dlt_env_ll_item_get_matching_prio(dlt_env_ll_item const *const item, char const *const apid, char const *const ctid) { if ((!item) || (!apid) || (!ctid)) return -1; if (item->appId[0] == 0) { if (item->ctxId[0] == 0) { return 1; } else if (dlt_env_ids_match(item->ctxId, ctid)) return 2; } else if (dlt_env_ids_match(item->appId, apid)) { if (item->ctxId[0] == 0) return 3; else if (dlt_env_ids_match(item->ctxId, ctid)) return 4; } return 0; } /** * @brief adjust log-level based on values given through environment * * Iterate over the set of items, and find the best match (\see ll_item_get_matching_prio) * For any item that matches, the one with the highest priority is selected and that * log-level is returned. * * If no item matches or in case of error, the original log-level (\param ll) is returned */ int dlt_env_adjust_ll_from_env(dlt_env_ll_set const *const ll_set, char const *const apid, char const *const ctid, int const ll) { if ((!ll_set) || (!apid) || (!ctid)) return ll; int res = ll; int prio = 0; /* no match so far */ size_t i; for (i = 0; i < ll_set->num_elem; ++i) { int p = dlt_env_ll_item_get_matching_prio(&ll_set->item[i], apid, ctid); if (p > prio) { prio = p; res = ll_set->item[i].ll; if (p == 4) /* maximum reached, immediate return */ return res; } } return res; } dlt-daemon-2.18.6/src/lib/dlt_filetransfer.c000066400000000000000000000615241377520261000206770ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_filetransfer.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-test-client.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #include #include #include #include "dlt_filetransfer.h" #include "dlt_common.h" /*!Defines the buffer size of a single file package which will be logged to dlt */ #define BUFFER_SIZE 1024 /*!Defines the minimum timeout between two dlt logs. This is important because dlt should not be flooded with too many logs in a short period of time. */ #define MIN_TIMEOUT 20 #define DLT_FILETRANSFER_TRANSFER_ALL_PACKAGES INT_MAX #define NANOSEC_PER_MILLISEC 1000000 #define NANOSEC_PER_SEC 1000000000 /*!Buffer for dlt file transfer. The size is defined by BUFFER_SIZE */ unsigned char buffer[BUFFER_SIZE]; /*!Get some information about the file size of a file */ /**See stat(2) for more informations. * @param file Absolute file path * @param ok Result of stat * @return Returns the size of the file (if it is a regular file or a symbolic link) in bytes. */ uint32_t getFilesize(const char *file, int *ok) { struct stat st; if (-1 == stat(file, &st)) { /*we can only return 0, as the value is unsigned */ *ok = 0; return 0; } *ok = 1; return (uint32_t) st.st_size; } /** A simple Hash function for C-strings * @param str input string. E.g. a file path. * @param hash start and result value for hash computation * */ void stringHash(const char *str, uint32_t *hash) { if (!str || !hash) return; unsigned int len = (unsigned int) strlen(str); unsigned int i = 0; if (len <= 0) return; for (i = 0; i < len; i++) *hash = (uint32_t) ((*hash) * 53) + (uint32_t) str[i]; } /*!Get some information about the file serial number of a file */ /** See stat(2) for more informations. * @param file Absolute file path * @param ok *ok == 0 -> error; *ok == 1 -> ok * @return Returns a unique number associated with each filename */ uint32_t getFileSerialNumber(const char *file, int *ok) { struct stat st; uint32_t ret; if (-1 == stat(file, &st)) { *ok = 0; ret = 0; } else { *ok = 1; ret = (uint32_t) st.st_ino; ret = ret << (sizeof(ret) * 8) / 2; ret |= (uint32_t) st.st_size; ret ^= (uint32_t) st.st_ctime; stringHash(file, &ret); } return ret; } /*!Returns the creation date of a file */ /** See stat(2) for more informations. * @param file Absolute file path * @param ok Result of stat * @return Returns the creation date of a file */ time_t getFileCreationDate(const char *file, int *ok) { struct stat st; if (-1 == stat(file, &st)) { *ok = 0; return 0; } *ok = 1; return st.st_ctime; } /*!Returns the creation date of a file */ /** Format of the creation date is Day Mon dd hh:mm:ss yyyy * @param file Absolute file path * @param ok Result of stat * @param date Local time * @return Returns the creation date of a file */ void getFileCreationDate2(const char *file, int *ok, char *date) { struct stat st; struct tm ts; if (-1 == stat(file, &st)) { *ok = 0; date = 0; } *ok = 1; tzset(); localtime_r(&st.st_ctime, &ts); asctime_r(&ts, date); } /*!Checks if the file exists */ /**@param file Absolute file path * @return Returns 1 if the file exists, 0 if the file does not exist */ int isFile (const char *file) { struct stat st; return stat (file, &st) == 0; } /*!Waits a period of time */ /**Waits a period of time. The minimal time to wait is MIN_TIMEOUT. This makes sure that the FIFO of dlt is not flooded. * @param timeout Timeout to in ms but can not be smaller as MIN_TIMEOUT */ void doTimeout(int timeout) { struct timespec ts; ts.tv_sec = (timeout * NANOSEC_PER_MILLISEC) / NANOSEC_PER_SEC; ts.tv_nsec = (timeout * NANOSEC_PER_MILLISEC) % NANOSEC_PER_SEC; nanosleep(&ts, NULL); } /*!Checks free space of the user buffer */ /** * @return -1 if more than 50% space in the user buffer is free. Otherwise 1 will be returned. */ int checkUserBufferForFreeSpace() { int total_size, used_size; dlt_user_check_buffer(&total_size, &used_size); if ((total_size - used_size) < (total_size / 2)) return -1; return 1; } /*!Deletes the given file */ /** * @param filename Absolute file path * @return If the file is successfully deleted, a zero value is returned.If the file can not be deleted a nonzero value is returned. */ int doRemoveFile(const char *filename) { return remove(filename); } void dlt_user_log_file_errorMessage(DltContext *fileContext, const char *filename, int errorCode) { if (errno != ENOENT) { int ok = 0; uint32_t fserial = getFileSerialNumber(filename, &ok); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_errorMessage, error in getFileSerialNumber for: "), DLT_STRING(filename)); uint32_t fsize = getFilesize(filename, &ok); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_errorMessage, error in getFilesize for: "), DLT_STRING(filename)); char fcreationdate[50]; getFileCreationDate2(filename, &ok, fcreationdate); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_errorMessage, error in getFilesize for: "), DLT_STRING(filename)); int package_count = dlt_user_log_file_packagesCount(fileContext, filename); DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("FLER"), DLT_INT(errorCode), DLT_INT(-errno), DLT_UINT(fserial), DLT_STRING(filename), DLT_UINT(fsize), DLT_STRING(fcreationdate), DLT_INT(package_count), DLT_UINT(BUFFER_SIZE), DLT_STRING("FLER") ); } else { DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("FLER"), DLT_INT(errorCode), DLT_INT(-errno), DLT_STRING(filename), DLT_STRING("FLER") ); } } /*!Logs specific file inforamtions to dlt */ /**The filename, file size, file serial number and the number of packages will be logged to dlt. * @param fileContext Specific context * @param filename Absolute file path * @return Returns 0 if everything was okey.If there was a failure a value < 0 will be returned. */ int dlt_user_log_file_infoAbout(DltContext *fileContext, const char *filename) { if (isFile(filename)) { int ok; uint32_t fsize = getFilesize(filename, &ok); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_infoAbout, Error getting size of file:"), DLT_STRING(filename)); uint32_t fserialnumber = getFileSerialNumber(filename, &ok); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_infoAbout, Error getting serial number of file:"), DLT_STRING(filename)); char creationdate[50]; getFileCreationDate2(filename, &ok, creationdate); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_infoAbout, Error getting creation date of file:"), DLT_STRING(filename)); DLT_LOG(*fileContext, DLT_LOG_INFO, DLT_STRING("FLIF"), DLT_STRING("file serialnumber"), DLT_UINT(fserialnumber), DLT_STRING("filename"), DLT_STRING(filename), DLT_STRING("file size in bytes"), DLT_UINT(fsize), DLT_STRING("file creation date"), DLT_STRING(creationdate), DLT_STRING("number of packages"), DLT_INT(dlt_user_log_file_packagesCount(fileContext, filename)), DLT_STRING("FLIF") ); return 0; } else { dlt_user_log_file_errorMessage(fileContext, filename, DLT_FILETRANSFER_ERROR_INFO_ABOUT); return DLT_FILETRANSFER_ERROR_INFO_ABOUT; } } /*!Transfer the complete file as several dlt logs. */ /**This method transfer the complete file as several dlt logs. At first it will be checked that the file exist. * In the next step some generic informations about the file will be logged to dlt. * Now the header will be logged to dlt. See the method dlt_user_log_file_header for more informations. * Then the method dlt_user_log_data will be called with the parameter to log all packages in a loop with some timeout. * At last dlt_user_log_end is called to signal that the complete file transfer was okey. This is important for the plugin of the dlt viewer. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @param deleteFlag Flag if the file will be deleted after transfer. 1->delete, 0->notDelete * @param timeout Timeout in ms to wait between some logs. Important that the FIFO of dlt will not be flooded with to many messages in a short period of time. * @return Returns 0 if everything was okey. If there was a failure a value < 0 will be returned. */ int dlt_user_log_file_complete(DltContext *fileContext, const char *filename, int deleteFlag, int timeout) { if (!isFile(filename)) { dlt_user_log_file_errorMessage(fileContext, filename, DLT_FILETRANSFER_ERROR_FILE_COMPLETE); return DLT_FILETRANSFER_ERROR_FILE_COMPLETE; } if (dlt_user_log_file_header(fileContext, filename) != 0) return DLT_FILETRANSFER_ERROR_FILE_COMPLETE1; if (dlt_user_log_file_data(fileContext, filename, DLT_FILETRANSFER_TRANSFER_ALL_PACKAGES, timeout) != 0) return DLT_FILETRANSFER_ERROR_FILE_COMPLETE2; if (dlt_user_log_file_end(fileContext, filename, deleteFlag) != 0) return DLT_FILETRANSFER_ERROR_FILE_COMPLETE3; return 0; } /*!This method gives information about the number of packages the file have */ /**Every file will be divided into several packages. Every package will be logged as a single dlt log. * The number of packages depends on the BUFFER_SIZE. * At first it will be checked if the file exist. Then the file will be divided into * several packages depending on the buffer size. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @return Returns the number of packages if everything was okey. If there was a failure a value < 0 will be returned. */ int dlt_user_log_file_packagesCount(DltContext *fileContext, const char *filename) { int packages; uint32_t filesize; if (isFile(filename)) { packages = 1; int ok; filesize = getFilesize(filename, &ok); if (!ok) { DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("Error in: dlt_user_log_file_packagesCount, isFile"), DLT_STRING(filename), DLT_INT(DLT_FILETRANSFER_ERROR_PACKAGE_COUNT)); return -1; } if (filesize < BUFFER_SIZE) { return packages; } else { packages = (int) (filesize / BUFFER_SIZE); if (filesize % BUFFER_SIZE == 0) return packages; else return packages + 1; } } else { DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("Error in: dlt_user_log_file_packagesCount, !isFile"), DLT_STRING(filename), DLT_INT(DLT_FILETRANSFER_ERROR_PACKAGE_COUNT)); return -1; } } /*!Transfer the head of the file as a dlt logs. */ /**The head of the file must be logged to dlt because the head contains inforamtion about the file serial number, * the file name, the file size, package number the file have and the buffer size. * All these informations are needed from the plugin of the dlt viewer. * See the Mainpages.c for more informations. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @param alias Alias for the file. An alternative name to show in the receiving end * @return Returns 0 if everything was okey. If there was a failure a value < 0 will be returned. */ int dlt_user_log_file_header_alias(DltContext *fileContext, const char *filename, const char *alias) { if (isFile(filename)) { int ok; uint32_t fserialnumber = getFileSerialNumber(filename, &ok); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_header_alias, Error getting serial number of file:"), DLT_STRING(filename)); uint32_t fsize = getFilesize(filename, &ok); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_header_alias, Error getting size of file:"), DLT_STRING(filename)); char fcreationdate[50]; getFileCreationDate2(filename, &ok, fcreationdate); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_header_alias, Error getting creation date of file:"), DLT_STRING(filename)); DLT_LOG(*fileContext, DLT_LOG_INFO, DLT_STRING("FLST"), DLT_UINT(fserialnumber), DLT_STRING(alias), DLT_UINT(fsize), DLT_STRING(fcreationdate); DLT_INT(dlt_user_log_file_packagesCount(fileContext, filename)), DLT_UINT(BUFFER_SIZE), DLT_STRING("FLST") ); return 0; } else { dlt_user_log_file_errorMessage(fileContext, filename, DLT_FILETRANSFER_ERROR_FILE_HEAD); return DLT_FILETRANSFER_ERROR_FILE_HEAD; } } /*!Transfer the head of the file as a dlt logs. */ /**The head of the file must be logged to dlt because the head contains inforamtion about the file serial number, * the file name, the file size, package number the file have and the buffer size. * All these informations are needed from the plugin of the dlt viewer. * See the Mainpages.c for more informations. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @return Returns 0 if everything was okey. If there was a failure a value < 0 will be returned. */ int dlt_user_log_file_header(DltContext *fileContext, const char *filename) { if (isFile(filename)) { int ok; uint32_t fserialnumber = getFileSerialNumber(filename, &ok); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_header, Error getting serial number of file:"), DLT_STRING(filename)); uint32_t fsize = getFilesize(filename, &ok); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_header, Error getting size of file:"), DLT_STRING(filename)); char fcreationdate[50]; getFileCreationDate2(filename, &ok, fcreationdate); if (!ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("dlt_user_log_file_header, Error getting creation date of file:"), DLT_STRING(filename)); DLT_LOG(*fileContext, DLT_LOG_INFO, DLT_STRING("FLST"), DLT_UINT(fserialnumber), DLT_STRING(filename), DLT_UINT(fsize), DLT_STRING(fcreationdate); DLT_INT(dlt_user_log_file_packagesCount(fileContext, filename)), DLT_UINT(BUFFER_SIZE), DLT_STRING("FLST") ); return 0; } else { dlt_user_log_file_errorMessage(fileContext, filename, DLT_FILETRANSFER_ERROR_FILE_HEAD); return DLT_FILETRANSFER_ERROR_FILE_HEAD; } } /*!Transfer the content data of a file. */ /**See the Mainpages.c for more informations. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @param packageToTransfer Package number to transfer. If this param is LONG_MAX, the whole file will be transferred with a specific timeout * @param timeout Timeout to wait between dlt logs. Important because the dlt FIFO should not be flooded. Default is defined by MIN_TIMEOUT. The given timeout in ms can not be smaller than MIN_TIMEOUT. * @return Returns 0 if everything was okey. If there was a failure a value < 0 will be returned. */ int dlt_user_log_file_data(DltContext *fileContext, const char *filename, int packageToTransfer, int timeout) { FILE *file; int pkgNumber; uint16_t readBytes; if (isFile(filename)) { file = fopen (filename, "rb"); if (file == NULL) { dlt_user_log_file_errorMessage(fileContext, filename, DLT_FILETRANSFER_ERROR_FILE_DATA); return DLT_FILETRANSFER_ERROR_FILE_DATA; } if (((packageToTransfer != DLT_FILETRANSFER_TRANSFER_ALL_PACKAGES) && (packageToTransfer > dlt_user_log_file_packagesCount(fileContext, filename))) || (packageToTransfer <= 0)) { DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("Error at dlt_user_log_file_data: packageToTransfer out of scope"), DLT_STRING("packageToTransfer:"), DLT_INT(packageToTransfer), DLT_STRING("numberOfMaximalPackages:"), DLT_INT(dlt_user_log_file_packagesCount(fileContext, filename)), DLT_STRING("for File:"), DLT_STRING(filename) ); fclose(file); return DLT_FILETRANSFER_ERROR_FILE_DATA; } readBytes = 0; if (packageToTransfer != DLT_FILETRANSFER_TRANSFER_ALL_PACKAGES) { /* If a single package should be transferred. The user has to check that the free space in the user buffer > 50% */ /* if(checkUserBufferForFreeSpace()<0) */ /* return DLT_FILETRANSFER_ERROR_FILE_DATA_USER_BUFFER_FAILED; */ if (0 != fseek (file, (packageToTransfer - 1) * BUFFER_SIZE, SEEK_SET)) { DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("failed to fseek in file: "), DLT_STRING(filename), DLT_STRING("ferror:"), DLT_INT(ferror(file)) ); fclose (file); return -1; } readBytes = (uint16_t) fread(buffer, sizeof(char), BUFFER_SIZE, file); int ok; uint32_t fserial = getFileSerialNumber(filename, &ok); if (1 != ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("failed to get FileSerialNumber for: "), DLT_STRING(filename)); DLT_LOG(*fileContext, DLT_LOG_INFO, DLT_STRING("FLDA"), DLT_UINT(fserial), DLT_INT(packageToTransfer), DLT_RAW(buffer, readBytes), DLT_STRING("FLDA") ); doTimeout(timeout); } else { pkgNumber = 0; while (!feof(file)) { /* If the complete file should be transferred, the user buffer will be checked. */ /* If free space < 50% the package won't be transferred. */ if (checkUserBufferForFreeSpace() > 0) { pkgNumber++; readBytes = (uint16_t) fread(buffer, sizeof(char), BUFFER_SIZE, file); int ok; uint32_t fserial = getFileSerialNumber(filename, &ok); if (1 != ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("failed to get FileSerialNumber for: "), DLT_STRING(filename)); DLT_LOG(*fileContext, DLT_LOG_INFO, DLT_STRING("FLDA"), DLT_UINT(fserial), DLT_INT(pkgNumber), DLT_RAW(buffer, readBytes), DLT_STRING("FLDA") ); } doTimeout(timeout); } } fclose(file); return 0; } else { dlt_user_log_file_errorMessage(fileContext, filename, DLT_FILETRANSFER_ERROR_FILE_DATA); return DLT_FILETRANSFER_ERROR_FILE_DATA; } } /*!Transfer the end of the file as a dlt logs. */ /**The end of the file must be logged to dlt because the end contains inforamtion about the file serial number. * This informations is needed from the plugin of the dlt viewer. * See the Mainpages.c for more informations. * @param fileContext Specific context to log the file to dlt * @param filename Absolute file path * @param deleteFlag Flag to delete the file after the whole file is transferred (logged to dlt).1->delete,0->NotDelete * @return Returns 0 if everything was okey. If there was a failure a value < 0 will be returned. */ int dlt_user_log_file_end(DltContext *fileContext, const char *filename, int deleteFlag) { if (isFile(filename)) { int ok; uint32_t fserial = getFileSerialNumber(filename, &ok); if (1 != ok) DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("failed to get FileSerialNumber for: "), DLT_STRING(filename)); DLT_LOG(*fileContext, DLT_LOG_INFO, DLT_STRING("FLFI"), DLT_UINT(fserial), DLT_STRING("FLFI") ); if (deleteFlag) { if (doRemoveFile(filename) != 0) { dlt_user_log_file_errorMessage(fileContext, filename, DLT_FILETRANSFER_ERROR_FILE_END); return -1; } } return 0; } else { dlt_user_log_file_errorMessage(fileContext, filename, DLT_FILETRANSFER_ERROR_FILE_END); return DLT_FILETRANSFER_ERROR_FILE_END; } } dlt-daemon-2.18.6/src/lib/dlt_user.c000066400000000000000000005031241377520261000171660ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Alexander Wenzel * Markus Klein * Mikko Rapeli * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_user.c */ #include /* for getenv(), free(), atexit() */ #include /* for strcmp(), strncmp(), strlen(), memset(), memcpy() */ #include /* for signal(), SIGPIPE, SIG_IGN */ #if !defined (__WIN32__) # include /* for LOG_... */ # include # include /* POSIX Threads */ #endif #include #include #include #include #include #include /* writev() */ #include #include #ifdef linux # include #endif #include /* needed for getpid() */ #include #include #if defined DLT_LIB_USE_UNIX_SOCKET_IPC || defined DLT_LIB_USE_VSOCK_IPC # include #endif #ifdef DLT_LIB_USE_UNIX_SOCKET_IPC # include #endif #ifdef DLT_LIB_USE_VSOCK_IPC # ifdef linux # include # endif # ifdef __QNX__ # include # endif #endif #include "dlt_user.h" #include "dlt_common.h" #include "dlt_user_shared.h" #include "dlt_user_shared_cfg.h" #include "dlt_user_cfg.h" #ifdef DLT_FATAL_LOG_RESET_ENABLE # define DLT_LOG_FATAL_RESET_TRAP(LOGLEVEL) \ do { \ if (LOGLEVEL == DLT_LOG_FATAL) { \ int *p = NULL; \ *p = 0; \ } \ } while (0) #else /* DLT_FATAL_LOG_RESET_ENABLE */ # define DLT_LOG_FATAL_RESET_TRAP(LOGLEVEL) #endif /* DLT_FATAL_LOG_RESET_ENABLE */ static DltUser dlt_user; static bool dlt_user_initialised = false; static int dlt_user_freeing = 0; #ifdef DLT_LIB_USE_FIFO_IPC static char dlt_user_dir[DLT_PATH_MAX]; static char dlt_daemon_fifo[DLT_PATH_MAX]; #endif static sem_t dlt_mutex; static pthread_t dlt_housekeeperthread_handle; /* calling dlt_user_atexit_handler() second time fails with error message */ static int atexit_registered = 0; /* used to disallow DLT usage in fork() child */ static int g_dlt_is_child = 0; /* String truncate message */ static const char STR_TRUNCATED_MESSAGE[] = "... <>"; /* Enum for type of string */ enum StringType { ASCII_STRING = 0, UTF8_STRING = 1 }; #define DLT_UNUSED(x) (void)(x) /* Network trace */ #ifdef DLT_NETWORK_TRACE_ENABLE #define DLT_USER_SEGMENTED_THREAD (1<<2) /* Segmented Network Trace */ #define DLT_MAX_TRACE_SEGMENT_SIZE 1024 #define DLT_MESSAGE_QUEUE_NAME "/dlt_message_queue" #define DLT_DELAYED_RESEND_INDICATOR_PATTERN 0xFFFF /* Mutex to wait on while message queue is not initialized */ pthread_mutex_t mq_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t mq_init_condition; #endif /* DLT_NETWORK_TRACE_ENABLE */ void dlt_lock_mutex(pthread_mutex_t *mutex) { int32_t lock_mutex_result = pthread_mutex_lock(mutex); if (lock_mutex_result != 0) dlt_vlog(LOG_ERR, "Mutex lock failed unexpected pid=%i with result %i!\n", getpid(), lock_mutex_result); } void dlt_unlock_mutex(pthread_mutex_t *mutex) { pthread_mutex_unlock(mutex); } /* Structure to pass data to segmented thread */ typedef struct { DltContext *handle; uint32_t id; DltNetworkTraceType nw_trace_type; uint32_t header_len; void *header; uint32_t payload_len; void *payload; } s_segmented_data; /* Function prototypes for internally used functions */ static void dlt_user_housekeeperthread_function(void *ptr); static void dlt_user_atexit_handler(void); static DltReturnValue dlt_user_log_init(DltContext *handle, DltContextData *log); static DltReturnValue dlt_user_log_send_log(DltContextData *log, int mtype); static DltReturnValue dlt_user_log_send_register_application(void); static DltReturnValue dlt_user_log_send_unregister_application(void); static DltReturnValue dlt_user_log_send_register_context(DltContextData *log); static DltReturnValue dlt_user_log_send_unregister_context(DltContextData *log); static DltReturnValue dlt_send_app_ll_ts_limit(const char *apid, DltLogLevelType loglevel, DltTraceStatusType tracestatus); static DltReturnValue dlt_user_log_send_log_mode(DltUserLogMode mode); static DltReturnValue dlt_user_log_send_marker(); static DltReturnValue dlt_user_print_msg(DltMessage *msg, DltContextData *log); static DltReturnValue dlt_user_log_check_user_message(void); static void dlt_user_log_reattach_to_daemon(void); static DltReturnValue dlt_user_log_send_overflow(void); static DltReturnValue dlt_user_log_out_error_handling(void *ptr1, size_t len1, void *ptr2, size_t len2, void *ptr3, size_t len3); static void dlt_user_cleanup_handler(void *arg); static int dlt_start_threads(); static void dlt_stop_threads(); static void dlt_fork_child_fork_handler(); #ifdef DLT_NETWORK_TRACE_ENABLE static void dlt_user_trace_network_segmented_thread(void *unused); static void dlt_user_trace_network_segmented_thread_segmenter(s_segmented_data *data); #endif static DltReturnValue dlt_user_log_write_string_utils(DltContextData *log, const char *text, const enum StringType type); static DltReturnValue dlt_user_log_write_sized_string_utils(DltContextData *log, const char *text, uint16_t text_len, const enum StringType type); static DltReturnValue dlt_unregister_app_util(bool force_sending_messages); DltReturnValue dlt_user_check_library_version(const char *user_major_version, const char *user_minor_version) { char lib_major_version[DLT_USER_MAX_LIB_VERSION_LENGTH]; char lib_minor_version[DLT_USER_MAX_LIB_VERSION_LENGTH]; dlt_get_major_version(lib_major_version, DLT_USER_MAX_LIB_VERSION_LENGTH); dlt_get_minor_version(lib_minor_version, DLT_USER_MAX_LIB_VERSION_LENGTH); if ((strcmp(lib_major_version, user_major_version) != 0) || (strcmp(lib_minor_version, user_minor_version) != 0)) { dlt_vnlog(LOG_WARNING, DLT_USER_BUFFER_LENGTH, "DLT Library version check failed! Installed DLT library version is %s.%s - Application using DLT library version %s.%s\n", lib_major_version, lib_minor_version, user_major_version, user_minor_version); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } #if defined DLT_LIB_USE_UNIX_SOCKET_IPC || defined DLT_LIB_USE_VSOCK_IPC static DltReturnValue dlt_socket_set_nonblock_and_linger(int sockfd) { int status; struct linger l_opt; status = fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFL, 0) | O_NONBLOCK); if (status == -1) { dlt_log(LOG_INFO, "Socket cannot be changed to NON BLOCK\n"); return DLT_RETURN_ERROR; } l_opt.l_onoff = 1; l_opt.l_linger = 10; if (setsockopt(sockfd, SOL_SOCKET, SO_LINGER, &l_opt, sizeof l_opt) < 0) dlt_log(LOG_WARNING, "Failed to set socket linger option\n"); return DLT_RETURN_OK; } #endif #ifdef DLT_LIB_USE_UNIX_SOCKET_IPC static DltReturnValue dlt_initialize_socket_connection(void) { struct sockaddr_un remote; char dltSockBaseDir[DLT_IPC_PATH_MAX]; DLT_SEM_LOCK(); int sockfd = socket(AF_UNIX, SOCK_STREAM, 0); if (sockfd == DLT_FD_INIT) { dlt_log(LOG_CRIT, "Failed to create socket\n"); DLT_SEM_FREE(); return DLT_RETURN_ERROR; } if (dlt_socket_set_nonblock_and_linger(sockfd) != DLT_RETURN_OK) { close(sockfd); DLT_SEM_FREE(); return DLT_RETURN_ERROR; } remote.sun_family = AF_UNIX; snprintf(dltSockBaseDir, DLT_IPC_PATH_MAX, "%s/dlt", DLT_USER_IPC_PATH); strncpy(remote.sun_path, dltSockBaseDir, sizeof(remote.sun_path)); if (strlen(DLT_USER_IPC_PATH) > DLT_IPC_PATH_MAX) dlt_vlog(LOG_INFO, "Provided path too long...trimming it to path[%s]\n", dltSockBaseDir); if (connect(sockfd, (struct sockaddr *)&remote, sizeof(remote)) == -1) { if (dlt_user.connection_state != DLT_USER_RETRY_CONNECT) { dlt_vlog(LOG_INFO, "Socket %s cannot be opened (errno=%d). Retrying later...\n", dltSockBaseDir, errno); dlt_user.connection_state = DLT_USER_RETRY_CONNECT; } close(sockfd); dlt_user.dlt_log_handle = -1; } else { dlt_user.dlt_log_handle = sockfd; dlt_user.connection_state = DLT_USER_CONNECTED; if (dlt_receiver_init(&(dlt_user.receiver), sockfd, DLT_RECEIVE_SOCKET, DLT_USER_RCVBUF_MAX_SIZE) == DLT_RETURN_ERROR) { dlt_user_initialised = false; close(sockfd); DLT_SEM_FREE(); return DLT_RETURN_ERROR; } } DLT_SEM_FREE(); return DLT_RETURN_OK; } #elif defined DLT_LIB_USE_VSOCK_IPC static DltReturnValue dlt_initialize_vsock_connection() { struct sockaddr_vm remote; DLT_SEM_LOCK(); int sockfd = socket(AF_VSOCK, SOCK_STREAM, 0); if (sockfd == DLT_FD_INIT) { dlt_log(LOG_CRIT, "Failed to create VSOCK socket\n"); DLT_SEM_FREE(); return DLT_RETURN_ERROR; } memset(&remote, 0, sizeof(remote)); remote.svm_family = AF_VSOCK; remote.svm_port = DLT_VSOCK_PORT; remote.svm_cid = VMADDR_CID_HOST; if (connect(sockfd, (struct sockaddr *)&remote, sizeof(remote)) == -1) { if (dlt_user.connection_state != DLT_USER_RETRY_CONNECT) { dlt_vlog(LOG_INFO, "VSOCK socket cannot be opened. Retrying later...\n"); dlt_user.connection_state = DLT_USER_RETRY_CONNECT; } close(sockfd); dlt_user.dlt_log_handle = -1; } else { /* Set to non-blocking after connect() to avoid EINPROGRESS. DltUserConntextionState needs "connecting" state if connect() should be non-blocking. */ if (dlt_socket_set_nonblock_and_linger(sockfd) != DLT_RETURN_OK) { close(sockfd); DLT_SEM_FREE(); return DLT_RETURN_ERROR; } dlt_user.dlt_log_handle = sockfd; dlt_user.connection_state = DLT_USER_CONNECTED; if (dlt_receiver_init(&(dlt_user.receiver), sockfd, DLT_RECEIVE_SOCKET, DLT_USER_RCVBUF_MAX_SIZE) == DLT_RETURN_ERROR) { dlt_user_initialised = false; close(sockfd); DLT_SEM_FREE(); return DLT_RETURN_ERROR; } } DLT_SEM_FREE(); return DLT_RETURN_OK; } #else /* DLT_LIB_USE_FIFO_IPC */ static DltReturnValue dlt_initialize_fifo_connection(void) { char filename[DLT_PATH_MAX]; int ret; snprintf(dlt_user_dir, DLT_PATH_MAX, "%s/dltpipes", dltFifoBaseDir); snprintf(dlt_daemon_fifo, DLT_PATH_MAX, "%s/dlt", dltFifoBaseDir); ret = mkdir(dlt_user_dir, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH | S_ISVTX); if ((ret == -1) && (errno != EEXIST)) { dlt_vnlog(LOG_ERR, DLT_USER_BUFFER_LENGTH, "FIFO user dir %s cannot be created!\n", dlt_user_dir); return DLT_RETURN_ERROR; } /* if dlt pipes directory is created by the application also chmod the directory */ if (ret == 0) { /* S_ISGID cannot be set by mkdir, let's reassign right bits */ ret = chmod(dlt_user_dir, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH | S_ISGID | S_ISVTX); if (ret == -1) { dlt_vnlog(LOG_ERR, DLT_USER_BUFFER_LENGTH, "FIFO user dir %s cannot be chmoded!\n", dlt_user_dir); return DLT_RETURN_ERROR; } } /* create and open DLT user FIFO */ snprintf(filename, DLT_PATH_MAX, "%s/dlt%d", dlt_user_dir, getpid()); /* Try to delete existing pipe, ignore result of unlink */ unlink(filename); ret = mkfifo(filename, S_IRUSR | S_IWUSR | S_IWGRP | S_IRGRP); if (ret == -1) dlt_vnlog(LOG_WARNING, DLT_USER_BUFFER_LENGTH, "Loging disabled, FIFO user %s cannot be created!\n", filename); /* S_IWGRP cannot be set by mkfifo (???), let's reassign right bits */ ret = chmod(filename, S_IRUSR | S_IWUSR | S_IWGRP | S_IRGRP); if (ret == -1) { dlt_vnlog(LOG_WARNING, DLT_USER_BUFFER_LENGTH, "FIFO user %s cannot be chmoded!\n", dlt_user_dir); return DLT_RETURN_ERROR; } dlt_user.dlt_user_handle = open(filename, O_RDWR | O_NONBLOCK | O_CLOEXEC); if (dlt_user.dlt_user_handle == DLT_FD_INIT) { dlt_vnlog(LOG_WARNING, DLT_USER_BUFFER_LENGTH, "Logging disabled, FIFO user %s cannot be opened!\n", filename); unlink(filename); return DLT_RETURN_OK; } /* open DLT output FIFO */ dlt_user.dlt_log_handle = open(dlt_daemon_fifo, O_WRONLY | O_NONBLOCK | O_CLOEXEC); if (dlt_user.dlt_log_handle == -1) /* This is a normal usecase. It is OK that the daemon (and thus the FIFO /tmp/dlt) * starts later and some DLT users have already been started before. * Thus it is OK if the FIFO can't be opened. */ dlt_vnlog(LOG_INFO, DLT_USER_BUFFER_LENGTH, "FIFO %s cannot be opened. Retrying later...\n", dlt_daemon_fifo); return DLT_RETURN_OK; } #endif DltReturnValue dlt_init(void) { /* check environment variables */ dlt_check_envvar(); /* process is exiting. Do not allocate new resources. */ if (dlt_user_freeing != 0) { dlt_vlog(LOG_INFO, "%s logging disabled, process is exiting", __func__); /* return negative value, to stop the current log */ return DLT_RETURN_LOGGING_DISABLED; } /* WARNING: multithread unsafe ! */ /* Another thread will check that dlt_user_initialised != 0, but the lib is not initialised ! */ dlt_user_initialised = true; /* Initialize common part of dlt_init()/dlt_init_file() */ if (dlt_init_common() == DLT_RETURN_ERROR) { dlt_user_initialised = false; return DLT_RETURN_ERROR; } dlt_user.dlt_is_file = 0; dlt_user.overflow = 0; dlt_user.overflow_counter = 0; #ifdef DLT_SHM_ENABLE memset(&(dlt_user.dlt_shm), 0, sizeof(DltShm)); /* init shared memory */ if (dlt_shm_init_client(&(dlt_user.dlt_shm), dltShmName) < DLT_RETURN_OK) dlt_vnlog(LOG_WARNING, DLT_USER_BUFFER_LENGTH, "Logging disabled," " Shared memory %s cannot be created!\n", dltShmName); #endif #ifdef DLT_LIB_USE_UNIX_SOCKET_IPC if (dlt_initialize_socket_connection() != DLT_RETURN_OK) /* We could connect to the pipe, but not to the socket, which is normally */ /* open before by the DLT daemon => bad failure => return error code */ /* in case application is started before daemon, it is expected behaviour */ return DLT_RETURN_ERROR; #elif defined DLT_LIB_USE_VSOCK_IPC if (dlt_initialize_vsock_connection() != DLT_RETURN_OK) return DLT_RETURN_ERROR; #else /* DLT_LIB_USE_FIFO_IPC */ if (dlt_initialize_fifo_connection() != DLT_RETURN_OK) return DLT_RETURN_ERROR; if (dlt_receiver_init(&(dlt_user.receiver), dlt_user.dlt_user_handle, DLT_RECEIVE_FD, DLT_USER_RCVBUF_MAX_SIZE) == DLT_RETURN_ERROR) { dlt_user_initialised = false; return DLT_RETURN_ERROR; } #endif #ifdef DLT_NETWORK_TRACE_ENABLE /* These will be lazy initialized only when needed */ dlt_user.dlt_segmented_queue_read_handle = -1; dlt_user.dlt_segmented_queue_write_handle = -1; pthread_cond_init(&mq_init_condition, NULL); #endif if (dlt_start_threads() < 0) { dlt_user_initialised = false; return DLT_RETURN_ERROR; } /* prepare for fork() call */ pthread_atfork(NULL, NULL, &dlt_fork_child_fork_handler); return DLT_RETURN_OK; } DltReturnValue dlt_get_appid(char *appid) { if (appid != NULL) { strncpy(appid, dlt_user.appID, 4); return DLT_RETURN_OK; } else { dlt_log(LOG_ERR, "Invalid parameter.\n"); return DLT_RETURN_WRONG_PARAMETER; } } DltReturnValue dlt_init_file(const char *name) { /* check null pointer */ if (!name) return DLT_RETURN_WRONG_PARAMETER; dlt_user_initialised = true; /* Initialize common part of dlt_init()/dlt_init_file() */ if (dlt_init_common() == DLT_RETURN_ERROR) { dlt_user_initialised = false; return DLT_RETURN_ERROR; } dlt_user.dlt_is_file = 1; /* open DLT output file */ dlt_user.dlt_log_handle = open(name, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* mode: wb */ if (dlt_user.dlt_log_handle == -1) { dlt_vnlog(LOG_ERR, DLT_USER_BUFFER_LENGTH, "Log file %s cannot be opened!\n", name); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } #ifdef DLT_NETWORK_TRACE_ENABLE DltReturnValue dlt_init_message_queue(void) { dlt_lock_mutex(&mq_mutex); if ((dlt_user.dlt_segmented_queue_read_handle >= 0) && (dlt_user.dlt_segmented_queue_write_handle >= 0)) { /* Already intialized */ dlt_unlock_mutex(&mq_mutex); return DLT_RETURN_OK; } /* Generate per process name for queue */ char queue_name[NAME_MAX]; snprintf(queue_name, NAME_MAX, "%s.%d", DLT_MESSAGE_QUEUE_NAME, getpid()); /* Maximum queue size is 10, limit to size of pointers */ struct mq_attr mqatr; mqatr.mq_flags = 0; mqatr.mq_maxmsg = 10; mqatr.mq_msgsize = sizeof(s_segmented_data *); mqatr.mq_curmsgs = 0; /** * Create the message queue. It must be newly created * if old one was left by a crashing process. * */ dlt_user.dlt_segmented_queue_read_handle = mq_open(queue_name, O_CREAT | O_RDONLY | O_EXCL, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, &mqatr); if (dlt_user.dlt_segmented_queue_read_handle < 0) { if (errno == EEXIST) { dlt_log(LOG_WARNING, "Old message queue exists, trying to delete.\n"); if (mq_unlink(queue_name) < 0) dlt_vnlog(LOG_CRIT, 256, "Could not delete existing message queue!: %s \n", strerror(errno)); else /* Retry */ dlt_user.dlt_segmented_queue_read_handle = mq_open(queue_name, O_CREAT | O_RDONLY | O_EXCL, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, &mqatr); } if (dlt_user.dlt_segmented_queue_read_handle < 0) { dlt_vnlog(LOG_CRIT, 256, "Can't create message queue read handle!: %s \n", strerror(errno)); dlt_unlock_mutex(&mq_mutex); return DLT_RETURN_ERROR; } } dlt_user.dlt_segmented_queue_write_handle = mq_open(queue_name, O_WRONLY | O_NONBLOCK); if (dlt_user.dlt_segmented_queue_write_handle < 0) { dlt_vnlog(LOG_CRIT, 256, "Can't open message queue write handle!: %s \n", strerror(errno)); dlt_unlock_mutex(&mq_mutex); return DLT_RETURN_ERROR; } pthread_cond_signal(&mq_init_condition); dlt_unlock_mutex(&mq_mutex); return DLT_RETURN_OK; } #endif /* DLT_NETWORK_TRACE_ENABLE */ DltReturnValue dlt_init_common(void) { char *env_local_print; char *env_initial_log_level; char *env_buffer_min; uint32_t buffer_min = DLT_USER_RINGBUFFER_MIN_SIZE; char *env_buffer_max; uint32_t buffer_max = DLT_USER_RINGBUFFER_MAX_SIZE; char *env_buffer_step; uint32_t buffer_step = DLT_USER_RINGBUFFER_STEP_SIZE; char *env_disable_extended_header_for_nonverbose; char *env_log_buffer_len; uint32_t buffer_max_configured = 0; uint32_t header_size = 0; /* Binary semaphore for threads */ if (sem_init(&dlt_mutex, 0, 1) == -1) { dlt_user_initialised = false; return DLT_RETURN_ERROR; } /* set to unknown state of connected client */ dlt_user.log_state = -1; dlt_user.dlt_log_handle = -1; dlt_user.dlt_user_handle = DLT_FD_INIT; dlt_set_id(dlt_user.ecuID, DLT_USER_DEFAULT_ECU_ID); dlt_set_id(dlt_user.appID, ""); dlt_user.application_description = NULL; /* Verbose mode is enabled by default */ dlt_user.verbose_mode = 1; /* header_size is used for resend buffer * so it won't include DltStorageHeader */ header_size = sizeof(DltUserHeader) + sizeof(DltStandardHeader) + sizeof(DltStandardHeaderExtra); /* Use extended header for non verbose is enabled by default */ dlt_user.use_extended_header_for_non_verbose = DLT_USER_USE_EXTENDED_HEADER_FOR_NONVERBOSE; /* Use extended header for non verbose is modified as per environment variable */ env_disable_extended_header_for_nonverbose = getenv(DLT_USER_ENV_DISABLE_EXTENDED_HEADER_FOR_NONVERBOSE); if (env_disable_extended_header_for_nonverbose) { if (strcmp(env_disable_extended_header_for_nonverbose, "1") == 0) dlt_user.use_extended_header_for_non_verbose = DLT_USER_NO_USE_EXTENDED_HEADER_FOR_NONVERBOSE; } if (dlt_user.use_extended_header_for_non_verbose == DLT_USER_USE_EXTENDED_HEADER_FOR_NONVERBOSE) header_size += (uint32_t) sizeof(DltExtendedHeader); /* With session id is enabled by default */ dlt_user.with_session_id = DLT_USER_WITH_SESSION_ID; /* With timestamp is enabled by default */ dlt_user.with_timestamp = DLT_USER_WITH_TIMESTAMP; /* With timestamp is enabled by default */ dlt_user.with_ecu_id = DLT_USER_WITH_ECU_ID; /* Local print is disabled by default */ dlt_user.enable_local_print = 0; dlt_user.local_print_mode = DLT_PM_UNSET; dlt_user.timeout_at_exit_handler = DLT_USER_ATEXIT_RESEND_BUFFER_EXIT_TIMEOUT; env_local_print = getenv(DLT_USER_ENV_LOCAL_PRINT_MODE); if (env_local_print) { if (strcmp(env_local_print, "AUTOMATIC") == 0) dlt_user.local_print_mode = DLT_PM_AUTOMATIC; else if (strcmp(env_local_print, "FORCE_ON") == 0) dlt_user.local_print_mode = DLT_PM_FORCE_ON; else if (strcmp(env_local_print, "FORCE_OFF") == 0) dlt_user.local_print_mode = DLT_PM_FORCE_OFF; } env_initial_log_level = getenv("DLT_INITIAL_LOG_LEVEL"); if (env_initial_log_level != NULL) { if (dlt_env_extract_ll_set(&env_initial_log_level, &dlt_user.initial_ll_set) != 0) dlt_vlog(LOG_WARNING, "Unable to parse initial set of log-levels from environment! Env:\n%s\n", getenv("DLT_INITIAL_LOG_LEVEL")); } /* Initialize LogLevel/TraceStatus field */ DLT_SEM_LOCK(); dlt_user.dlt_ll_ts = NULL; dlt_user.dlt_ll_ts_max_num_entries = 0; dlt_user.dlt_ll_ts_num_entries = 0; env_buffer_min = getenv(DLT_USER_ENV_BUFFER_MIN_SIZE); env_buffer_max = getenv(DLT_USER_ENV_BUFFER_MAX_SIZE); env_buffer_step = getenv(DLT_USER_ENV_BUFFER_STEP_SIZE); if (env_buffer_min != NULL) { buffer_min = (uint32_t)strtol(env_buffer_min, NULL, 10); if ((errno == EINVAL) || (errno == ERANGE)) { dlt_vlog(LOG_ERR, "Wrong value specified for %s. Using default\n", DLT_USER_ENV_BUFFER_MIN_SIZE); buffer_min = DLT_USER_RINGBUFFER_MIN_SIZE; } } if (env_buffer_max != NULL) { buffer_max = (uint32_t)strtol(env_buffer_max, NULL, 10); if ((errno == EINVAL) || (errno == ERANGE)) { dlt_vlog(LOG_ERR, "Wrong value specified for %s. Using default\n", DLT_USER_ENV_BUFFER_MAX_SIZE); buffer_max = DLT_USER_RINGBUFFER_MAX_SIZE; } } if (env_buffer_step != NULL) { buffer_step = (uint32_t)strtol(env_buffer_step, NULL, 10); if ((errno == EINVAL) || (errno == ERANGE)) { dlt_vlog(LOG_ERR, "Wrong value specified for %s. Using default\n", DLT_USER_ENV_BUFFER_STEP_SIZE); buffer_step = DLT_USER_RINGBUFFER_STEP_SIZE; } } /* init log buffer size */ dlt_user.log_buf_len = DLT_USER_BUF_MAX_SIZE; env_log_buffer_len = getenv(DLT_USER_ENV_LOG_MSG_BUF_LEN); if (env_log_buffer_len != NULL) { buffer_max_configured = (uint32_t)strtol(env_log_buffer_len, NULL, 10); if (buffer_max_configured > DLT_LOG_MSG_BUF_MAX_SIZE) { dlt_user.log_buf_len = DLT_LOG_MSG_BUF_MAX_SIZE; dlt_vlog(LOG_WARNING, "Configured size exceeds maximum allowed size,restricting to max [65535 bytes]\n"); } else { dlt_user.log_buf_len = (uint16_t) buffer_max_configured; dlt_vlog(LOG_INFO, "Configured buffer size to [%d bytes]\n", buffer_max_configured); } } if (dlt_user.resend_buffer == NULL) { dlt_user.resend_buffer = calloc(sizeof(unsigned char), (dlt_user.log_buf_len + header_size)); if (dlt_user.resend_buffer == NULL) { dlt_user_initialised = false; DLT_SEM_FREE(); dlt_vlog(LOG_ERR, "cannot allocate memory for resend buffer\n"); return DLT_RETURN_ERROR; } } dlt_user.disable_injection_msg = 0; if (getenv(DLT_USER_ENV_DISABLE_INJECTION_MSG)) { dlt_log(LOG_WARNING, "Injection message is disabled\n"); dlt_user.disable_injection_msg = 1; } if (dlt_buffer_init_dynamic(&(dlt_user.startup_buffer), buffer_min, buffer_max, buffer_step) == DLT_RETURN_ERROR) { dlt_user_initialised = false; DLT_SEM_FREE(); return DLT_RETURN_ERROR; } DLT_SEM_FREE(); signal(SIGPIPE, SIG_IGN); /* ignore pipe signals */ if (atexit_registered == 0) { atexit_registered = 1; atexit(dlt_user_atexit_handler); } #ifdef DLT_TEST_ENABLE dlt_user.corrupt_user_header = 0; dlt_user.corrupt_message_size = 0; dlt_user.corrupt_message_size_size = 0; #endif return DLT_RETURN_OK; } void dlt_user_atexit_handler(void) { /* parent will do clean-up */ if (g_dlt_is_child) return; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); /* close file */ dlt_log_free(); return; } /* Try to resend potential log messages in the user buffer */ int count = dlt_user_atexit_blow_out_user_buffer(); if (count != 0) dlt_vnlog(LOG_WARNING, 128, "Lost log messages in user buffer when exiting: %i\n", count); /* Unregister app (this also unregisters all contexts in daemon) */ /* Ignore return value */ dlt_unregister_app_util(false); /* Cleanup */ /* Ignore return value */ dlt_free(); } int dlt_user_atexit_blow_out_user_buffer(void) { int count, ret; struct timespec ts; uint32_t exitTime = dlt_uptime() + dlt_user.timeout_at_exit_handler; /* Send content of ringbuffer */ DLT_SEM_LOCK(); count = dlt_buffer_get_message_count(&(dlt_user.startup_buffer)); DLT_SEM_FREE(); if (count > 0) { while (dlt_uptime() < exitTime) { if (dlt_user.dlt_log_handle == -1) { /* Reattach to daemon if neccesary */ dlt_user_log_reattach_to_daemon(); if ((dlt_user.dlt_log_handle != -1) && (dlt_user.overflow_counter)) { if (dlt_user_log_send_overflow() == 0) { dlt_vnlog(LOG_WARNING, DLT_USER_BUFFER_LENGTH, "%u messages discarded!\n", dlt_user.overflow_counter); dlt_user.overflow_counter = 0; } } } if (dlt_user.dlt_log_handle != -1) { ret = dlt_user_log_resend_buffer(); if (ret == 0) { DLT_SEM_LOCK(); count = dlt_buffer_get_message_count(&(dlt_user.startup_buffer)); DLT_SEM_FREE(); return count; } } ts.tv_sec = 0; ts.tv_nsec = DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP; nanosleep(&ts, NULL); } DLT_SEM_LOCK(); count = dlt_buffer_get_message_count(&(dlt_user.startup_buffer)); DLT_SEM_FREE(); } return count; } static void dlt_user_free_buffer(unsigned char **buffer) { if (*buffer) { free(*buffer); *buffer = NULL; } } DltReturnValue dlt_free(void) { uint32_t i; int ret = 0; #ifdef DLT_LIB_USE_FIFO_IPC char filename[DLT_PATH_MAX]; #endif if (dlt_user_freeing != 0) /* resources are already being freed. Do nothing and return. */ return DLT_RETURN_ERROR; /* library is freeing its resources. Avoid to allocate it in dlt_init() */ dlt_user_freeing = 1; if (!dlt_user_initialised) { dlt_user_freeing = 0; return DLT_RETURN_ERROR; } dlt_user_initialised = false; dlt_stop_threads(); #ifdef DLT_LIB_USE_FIFO_IPC if (dlt_user.dlt_user_handle != DLT_FD_INIT) { close(dlt_user.dlt_user_handle); dlt_user.dlt_user_handle = DLT_FD_INIT; snprintf(filename, DLT_PATH_MAX, "%s/dlt%d", dlt_user_dir, getpid()); unlink(filename); } #endif #ifdef DLT_SHM_ENABLE /* free shared memory */ dlt_shm_free_client(&dlt_user.dlt_shm); #endif if (dlt_user.dlt_log_handle != -1) { /* close log file/output fifo to daemon */ #if defined DLT_LIB_USE_UNIX_SOCKET_IPC || defined DLT_LIB_USE_VSOCK_IPC ret = shutdown(dlt_user.dlt_log_handle, SHUT_WR); if (ret < 0) { dlt_vlog(LOG_WARNING, "%s: shutdown failed: %s\n", __func__, strerror(errno)); } else { ssize_t bytes_read = 0; int prev_errno = 0; struct pollfd nfd[1]; nfd[0].events = POLLIN; nfd[0].fd = dlt_user.dlt_log_handle; while (1) { ret = poll(nfd, 1, DLT_USER_RECEIVE_MDELAY); /* In case failure of polling or reaching timeout, * continue to close socket anyway. * */ if (ret < 0) { dlt_vlog(LOG_WARNING, "[%s] Failed to poll with error [%s]\n", __func__, strerror(errno)); break; } else if (ret == 0) { dlt_vlog(LOG_DEBUG, "[%s] Polling timeout\n", __func__); break; } else { /* It could take some time to get the socket is shutdown * So it means there could be some data available to read. * Try to consume the data and poll the socket again. * If read fails, time to close the socket then. */ dlt_vlog(LOG_DEBUG, "[%s] polling returns [%d] with revent [0x%x]." "There are something to read\n", __func__, ret, nfd[0].revents); bytes_read = read(dlt_user.dlt_log_handle, dlt_user.resend_buffer, dlt_user.log_buf_len); prev_errno = errno; if (bytes_read < 0) { dlt_vlog(LOG_WARNING, "[%s] Failed to read with error [%s]\n", __func__, strerror(prev_errno)); if ((prev_errno == EAGAIN) || (prev_errno == EWOULDBLOCK)) continue; else break; } if (bytes_read >= 0) { if (!bytes_read) break; dlt_vlog(LOG_NOTICE, "[%s] data is still readable... [%d] bytes read\n", __func__, bytes_read); } } } } #endif ret = close(dlt_user.dlt_log_handle); if (ret < 0) dlt_vlog(LOG_WARNING, "%s: close failed: %s\n", __func__, strerror(errno)); dlt_user.dlt_log_handle = -1; } /* Ignore return value */ DLT_SEM_LOCK(); dlt_receiver_free(&(dlt_user.receiver)); DLT_SEM_FREE(); /* Ignore return value */ DLT_SEM_LOCK(); dlt_user_free_buffer(&(dlt_user.resend_buffer)); dlt_buffer_free_dynamic(&(dlt_user.startup_buffer)); /* Clear and free local stored application information */ if (dlt_user.application_description != NULL) free(dlt_user.application_description); dlt_user.application_description = NULL; if (dlt_user.dlt_ll_ts) { for (i = 0; i < dlt_user.dlt_ll_ts_max_num_entries; i++) { if (dlt_user.dlt_ll_ts[i].context_description != NULL) { free (dlt_user.dlt_ll_ts[i].context_description); dlt_user.dlt_ll_ts[i].context_description = NULL; } if (dlt_user.dlt_ll_ts[i].log_level_ptr != NULL) { free(dlt_user.dlt_ll_ts[i].log_level_ptr); dlt_user.dlt_ll_ts[i].log_level_ptr = NULL; } if (dlt_user.dlt_ll_ts[i].trace_status_ptr != NULL) { free(dlt_user.dlt_ll_ts[i].trace_status_ptr); dlt_user.dlt_ll_ts[i].trace_status_ptr = NULL; } if (dlt_user.dlt_ll_ts[i].injection_table != NULL) { free(dlt_user.dlt_ll_ts[i].injection_table); dlt_user.dlt_ll_ts[i].injection_table = NULL; } dlt_user.dlt_ll_ts[i].nrcallbacks = 0; dlt_user.dlt_ll_ts[i].log_level_changed_callback = 0; } free(dlt_user.dlt_ll_ts); dlt_user.dlt_ll_ts = NULL; dlt_user.dlt_ll_ts_max_num_entries = 0; dlt_user.dlt_ll_ts_num_entries = 0; } dlt_env_free_ll_set(&dlt_user.initial_ll_set); DLT_SEM_FREE(); #ifdef DLT_NETWORK_TRACE_ENABLE char queue_name[NAME_MAX]; snprintf(queue_name, NAME_MAX, "%s.%d", DLT_MESSAGE_QUEUE_NAME, getpid()); /** * Ignore errors from these, to not to spam user if dlt_free * is accidentally called multiple times. */ if (dlt_user.dlt_segmented_queue_write_handle > 0) mq_close(dlt_user.dlt_segmented_queue_write_handle); if (dlt_user.dlt_segmented_queue_read_handle > 0) mq_close(dlt_user.dlt_segmented_queue_read_handle); if ((dlt_user.dlt_segmented_queue_write_handle > 0) || (dlt_user.dlt_segmented_queue_read_handle > 0)) mq_unlink(queue_name); dlt_user.dlt_segmented_queue_write_handle = DLT_FD_INIT; dlt_user.dlt_segmented_queue_read_handle = DLT_FD_INIT; pthread_cond_destroy(&mq_init_condition); #endif /* DLT_NETWORK_TRACE_ENABLE */ sem_destroy(&dlt_mutex); /* allow the user app to do dlt_init() again. */ /* The flag is unset only to keep almost the same behaviour as before, on EntryNav */ /* This should be removed for other projects (see documentation of dlt_free() */ dlt_user_freeing = 0; return DLT_RETURN_OK; } DltReturnValue dlt_check_library_version(const char *user_major_version, const char *user_minor_version) { return dlt_user_check_library_version(user_major_version, user_minor_version); } DltReturnValue dlt_register_app(const char *apid, const char *description) { DltReturnValue ret = DLT_RETURN_OK; /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; if (!dlt_user_initialised) { if (dlt_init() < 0) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } if ((apid == NULL) || (apid[0] == '\0')) return DLT_RETURN_WRONG_PARAMETER; /* check if application already registered */ /* if yes do not register again */ if (apid[1] == 0) { if (apid[0] == dlt_user.appID[0]) return DLT_RETURN_OK; } else if (apid[2] == 0) { if ((apid[0] == dlt_user.appID[0]) && (apid[1] == dlt_user.appID[1])) return DLT_RETURN_OK; } else if (apid[3] == 0) { if ((apid[0] == dlt_user.appID[0]) && (apid[1] == dlt_user.appID[1]) && (apid[2] == dlt_user.appID[2])) return DLT_RETURN_OK; } else if ((apid[0] == dlt_user.appID[0]) && (apid[1] == dlt_user.appID[1]) && (apid[2] == dlt_user.appID[2]) && (apid[3] == dlt_user.appID[3])) { return DLT_RETURN_OK; } DLT_SEM_LOCK(); /* Store locally application id and application description */ dlt_set_id(dlt_user.appID, apid); if (dlt_user.application_description != NULL) free(dlt_user.application_description); dlt_user.application_description = NULL; if (description != NULL) { size_t desc_len = strlen(description); dlt_user.application_description = malloc(desc_len + 1); if (dlt_user.application_description) { strncpy(dlt_user.application_description, description, desc_len + 1); } else { DLT_SEM_FREE(); return DLT_RETURN_ERROR; } } DLT_SEM_FREE(); ret = dlt_user_log_send_register_application(); if ((ret == DLT_RETURN_OK) && (dlt_user.dlt_log_handle != -1)) ret = dlt_user_log_resend_buffer(); return ret; } DltReturnValue dlt_register_context(DltContext *handle, const char *contextid, const char *description) { /* check nullpointer */ if (handle == NULL) return DLT_RETURN_WRONG_PARAMETER; /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; if (!dlt_user_initialised) { if (dlt_init() < 0) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } if ((contextid == NULL) || (contextid[0] == '\0')) return DLT_RETURN_WRONG_PARAMETER; return dlt_register_context_ll_ts(handle, contextid, description, DLT_USER_LOG_LEVEL_NOT_SET, DLT_USER_TRACE_STATUS_NOT_SET); } DltReturnValue dlt_register_context_ll_ts_llccb(DltContext *handle, const char *contextid, const char *description, int loglevel, int tracestatus, void (*dlt_log_level_changed_callback)(char context_id[DLT_ID_SIZE], uint8_t log_level, uint8_t trace_status)) { DltContextData log; uint32_t i; int envLogLevel = DLT_USER_LOG_LEVEL_NOT_SET; /*check nullpointer */ if ((handle == NULL) || (contextid == NULL) || (contextid[0] == '\0')) return DLT_RETURN_WRONG_PARAMETER; /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; if ((loglevel < DLT_USER_LOG_LEVEL_NOT_SET) || (loglevel >= DLT_LOG_MAX)) { dlt_vlog(LOG_ERR, "Loglevel %d is outside valid range", loglevel); return DLT_RETURN_WRONG_PARAMETER; } if ((tracestatus < DLT_USER_TRACE_STATUS_NOT_SET) || (tracestatus >= DLT_TRACE_STATUS_MAX)) { dlt_vlog(LOG_ERR, "Tracestatus %d is outside valid range", tracestatus); return DLT_RETURN_WRONG_PARAMETER; } if (dlt_user_log_init(handle, &log) < DLT_RETURN_OK) return DLT_RETURN_ERROR; /* Reset message counter */ handle->mcnt = 0; /* Store context id in log level/trace status field */ /* Check if already registered, else register context */ DLT_SEM_LOCK(); /* Check of double context registration removed */ /* Double registration is already checked by daemon */ /* Allocate or expand context array */ if (dlt_user.dlt_ll_ts == NULL) { dlt_user.dlt_ll_ts = (dlt_ll_ts_type *)malloc(sizeof(dlt_ll_ts_type) * DLT_USER_CONTEXT_ALLOC_SIZE); if (dlt_user.dlt_ll_ts == NULL) { DLT_SEM_FREE(); return DLT_RETURN_ERROR; } dlt_user.dlt_ll_ts_max_num_entries = DLT_USER_CONTEXT_ALLOC_SIZE; /* Initialize new entries */ for (i = 0; i < dlt_user.dlt_ll_ts_max_num_entries; i++) { dlt_set_id(dlt_user.dlt_ll_ts[i].contextID, ""); /* At startup, logging and tracing is locally enabled */ /* the correct log level/status is set after received from daemon */ dlt_user.dlt_ll_ts[i].log_level = DLT_USER_INITIAL_LOG_LEVEL; dlt_user.dlt_ll_ts[i].trace_status = DLT_USER_INITIAL_TRACE_STATUS; dlt_user.dlt_ll_ts[i].log_level_ptr = 0; dlt_user.dlt_ll_ts[i].trace_status_ptr = 0; dlt_user.dlt_ll_ts[i].context_description = 0; dlt_user.dlt_ll_ts[i].injection_table = 0; dlt_user.dlt_ll_ts[i].nrcallbacks = 0; dlt_user.dlt_ll_ts[i].log_level_changed_callback = 0; } } else if ((dlt_user.dlt_ll_ts_num_entries % DLT_USER_CONTEXT_ALLOC_SIZE) == 0) { /* allocate memory in steps of DLT_USER_CONTEXT_ALLOC_SIZE, e.g. 500 */ dlt_ll_ts_type *old_ll_ts; uint32_t old_max_entries; old_ll_ts = dlt_user.dlt_ll_ts; old_max_entries = dlt_user.dlt_ll_ts_max_num_entries; dlt_user.dlt_ll_ts_max_num_entries = ((dlt_user.dlt_ll_ts_num_entries / DLT_USER_CONTEXT_ALLOC_SIZE) + 1) * DLT_USER_CONTEXT_ALLOC_SIZE; dlt_user.dlt_ll_ts = (dlt_ll_ts_type *)malloc(sizeof(dlt_ll_ts_type) * dlt_user.dlt_ll_ts_max_num_entries); if (dlt_user.dlt_ll_ts == NULL) { dlt_user.dlt_ll_ts = old_ll_ts; dlt_user.dlt_ll_ts_max_num_entries = old_max_entries; DLT_SEM_FREE(); return DLT_RETURN_ERROR; } memcpy(dlt_user.dlt_ll_ts, old_ll_ts, sizeof(dlt_ll_ts_type) * dlt_user.dlt_ll_ts_num_entries); free(old_ll_ts); /* Initialize new entries */ for (i = dlt_user.dlt_ll_ts_num_entries; i < dlt_user.dlt_ll_ts_max_num_entries; i++) { dlt_set_id(dlt_user.dlt_ll_ts[i].contextID, ""); /* At startup, logging and tracing is locally enabled */ /* the correct log level/status is set after received from daemon */ dlt_user.dlt_ll_ts[i].log_level = DLT_USER_INITIAL_LOG_LEVEL; dlt_user.dlt_ll_ts[i].trace_status = DLT_USER_INITIAL_TRACE_STATUS; dlt_user.dlt_ll_ts[i].log_level_ptr = 0; dlt_user.dlt_ll_ts[i].trace_status_ptr = 0; dlt_user.dlt_ll_ts[i].context_description = 0; dlt_user.dlt_ll_ts[i].injection_table = 0; dlt_user.dlt_ll_ts[i].nrcallbacks = 0; dlt_user.dlt_ll_ts[i].log_level_changed_callback = 0; } } /* New context entry to be initialized */ dlt_ll_ts_type *ctx_entry; ctx_entry = &dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries]; /* Store locally context id and context description */ dlt_set_id(ctx_entry->contextID, contextid); if (ctx_entry->context_description != 0) free(ctx_entry->context_description); ctx_entry->context_description = 0; if (description != 0) { size_t desc_len = strlen(description); ctx_entry->context_description = malloc(desc_len + 1); if (ctx_entry->context_description == 0) { DLT_SEM_FREE(); return DLT_RETURN_ERROR; } strncpy(ctx_entry->context_description, description, desc_len + 1); } if (ctx_entry->log_level_ptr == 0) { ctx_entry->log_level_ptr = malloc(sizeof(int8_t)); if (ctx_entry->log_level_ptr == 0) { DLT_SEM_FREE(); return DLT_RETURN_ERROR; } } if (ctx_entry->trace_status_ptr == 0) { ctx_entry->trace_status_ptr = malloc(sizeof(int8_t)); if (ctx_entry->trace_status_ptr == 0) { DLT_SEM_FREE(); return DLT_RETURN_ERROR; } } /* check if the log level is set in the environement */ envLogLevel = dlt_env_adjust_ll_from_env(&dlt_user.initial_ll_set, dlt_user.appID, contextid, DLT_USER_LOG_LEVEL_NOT_SET); if (envLogLevel != DLT_USER_LOG_LEVEL_NOT_SET) { ctx_entry->log_level = (int8_t) envLogLevel; loglevel = envLogLevel; } else if (loglevel != DLT_USER_LOG_LEVEL_NOT_SET) { ctx_entry->log_level = (int8_t) loglevel; } if (tracestatus != DLT_USER_TRACE_STATUS_NOT_SET) ctx_entry->trace_status = (int8_t) tracestatus; /* Prepare transfer struct */ dlt_set_id(handle->contextID, contextid); handle->log_level_pos = (int32_t) dlt_user.dlt_ll_ts_num_entries; handle->log_level_ptr = ctx_entry->log_level_ptr; handle->trace_status_ptr = ctx_entry->trace_status_ptr; log.context_description = ctx_entry->context_description; *(ctx_entry->log_level_ptr) = ctx_entry->log_level; *(ctx_entry->trace_status_ptr) = ctx_entry->trace_status = (int8_t) tracestatus; ctx_entry->log_level_changed_callback = dlt_log_level_changed_callback; log.log_level = loglevel; log.trace_status = tracestatus; dlt_user.dlt_ll_ts_num_entries++; DLT_SEM_FREE(); return dlt_user_log_send_register_context(&log); } DltReturnValue dlt_register_context_ll_ts(DltContext *handle, const char *contextid, const char *description, int loglevel, int tracestatus) { return dlt_register_context_ll_ts_llccb(handle, contextid, description, loglevel, tracestatus, NULL); } DltReturnValue dlt_register_context_llccb(DltContext *handle, const char *contextid, const char *description, void (*dlt_log_level_changed_callback)(char context_id[DLT_ID_SIZE], uint8_t log_level, uint8_t trace_status)) { if ((handle == NULL) || (contextid == NULL) || (contextid[0] == '\0')) return DLT_RETURN_WRONG_PARAMETER; /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; if (!dlt_user_initialised) { if (dlt_init() < 0) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } return dlt_register_context_ll_ts_llccb(handle, contextid, description, DLT_USER_LOG_LEVEL_NOT_SET, DLT_USER_TRACE_STATUS_NOT_SET, dlt_log_level_changed_callback); } /* If force_sending_messages is set to true, do not clean appIDs when there are * still data in startup_buffer. atexit_handler will free the appIDs */ DltReturnValue dlt_unregister_app_util(bool force_sending_messages) { DltReturnValue ret = DLT_RETURN_OK; /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } /* Inform daemon to unregister application and all of its contexts */ ret = dlt_user_log_send_unregister_application(); DLT_SEM_LOCK(); int count = dlt_buffer_get_message_count(&(dlt_user.startup_buffer)); if (!force_sending_messages || (force_sending_messages && count == 0)) { /* Clear and free local stored application information */ dlt_set_id(dlt_user.appID, ""); if (dlt_user.application_description != NULL) free(dlt_user.application_description); dlt_user.application_description = NULL; } DLT_SEM_FREE(); return ret; } DltReturnValue dlt_unregister_app(void) { return dlt_unregister_app_util(false); } DltReturnValue dlt_unregister_app_flush_buffered_logs(void) { DltReturnValue ret = DLT_RETURN_OK; /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; if (!dlt_user_initialised) { dlt_vlog(LOG_ERR, "%s dlt_user_initialised false\n", __func__); return DLT_RETURN_ERROR; } if (dlt_user.dlt_log_handle != -1) { do ret = dlt_user_log_resend_buffer(); while ((ret != DLT_RETURN_OK) && (dlt_user.dlt_log_handle != -1)); } return dlt_unregister_app_util(true); } DltReturnValue dlt_unregister_context(DltContext *handle) { DltContextData log; DltReturnValue ret = DLT_RETURN_OK; /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; log.handle = NULL; log.context_description = NULL; if (dlt_user_log_init(handle, &log) <= DLT_RETURN_ERROR) return DLT_RETURN_ERROR; DLT_SEM_LOCK(); handle->log_level_ptr = NULL; handle->trace_status_ptr = NULL; if (dlt_user.dlt_ll_ts != NULL) { /* Clear and free local stored context information */ dlt_set_id(dlt_user.dlt_ll_ts[handle->log_level_pos].contextID, ""); dlt_user.dlt_ll_ts[handle->log_level_pos].log_level = DLT_USER_INITIAL_LOG_LEVEL; dlt_user.dlt_ll_ts[handle->log_level_pos].trace_status = DLT_USER_INITIAL_TRACE_STATUS; if (dlt_user.dlt_ll_ts[handle->log_level_pos].context_description != NULL) free(dlt_user.dlt_ll_ts[handle->log_level_pos].context_description); if (dlt_user.dlt_ll_ts[handle->log_level_pos].log_level_ptr != NULL) { free(dlt_user.dlt_ll_ts[handle->log_level_pos].log_level_ptr); dlt_user.dlt_ll_ts[handle->log_level_pos].log_level_ptr = NULL; } if (dlt_user.dlt_ll_ts[handle->log_level_pos].trace_status_ptr != NULL) { free(dlt_user.dlt_ll_ts[handle->log_level_pos].trace_status_ptr); dlt_user.dlt_ll_ts[handle->log_level_pos].trace_status_ptr = NULL; } dlt_user.dlt_ll_ts[handle->log_level_pos].context_description = NULL; if (dlt_user.dlt_ll_ts[handle->log_level_pos].injection_table != NULL) { free(dlt_user.dlt_ll_ts[handle->log_level_pos].injection_table); dlt_user.dlt_ll_ts[handle->log_level_pos].injection_table = NULL; } dlt_user.dlt_ll_ts[handle->log_level_pos].nrcallbacks = 0; dlt_user.dlt_ll_ts[handle->log_level_pos].log_level_changed_callback = 0; } DLT_SEM_FREE(); /* Inform daemon to unregister context */ ret = dlt_user_log_send_unregister_context(&log); return ret; } DltReturnValue dlt_set_application_ll_ts_limit(DltLogLevelType loglevel, DltTraceStatusType tracestatus) { uint32_t i; /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; if ((loglevel < DLT_USER_LOG_LEVEL_NOT_SET) || (loglevel >= DLT_LOG_MAX)) { dlt_vlog(LOG_ERR, "Loglevel %d is outside valid range", loglevel); return DLT_RETURN_WRONG_PARAMETER; } if ((tracestatus < DLT_USER_TRACE_STATUS_NOT_SET) || (tracestatus >= DLT_TRACE_STATUS_MAX)) { dlt_vlog(LOG_ERR, "Tracestatus %d is outside valid range", tracestatus); return DLT_RETURN_WRONG_PARAMETER; } if (!dlt_user_initialised) { if (dlt_init() < 0) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } DLT_SEM_LOCK(); if (dlt_user.dlt_ll_ts == NULL) { DLT_SEM_FREE(); return DLT_RETURN_ERROR; } /* Update local structures */ for (i = 0; i < dlt_user.dlt_ll_ts_num_entries; i++) { dlt_user.dlt_ll_ts[i].log_level = loglevel; dlt_user.dlt_ll_ts[i].trace_status = tracestatus; if (dlt_user.dlt_ll_ts[i].log_level_ptr) *(dlt_user.dlt_ll_ts[i].log_level_ptr) = loglevel; if (dlt_user.dlt_ll_ts[i].trace_status_ptr) *(dlt_user.dlt_ll_ts[i].trace_status_ptr) = tracestatus; } DLT_SEM_FREE(); /* Inform DLT server about update */ return dlt_send_app_ll_ts_limit(dlt_user.appID, loglevel, tracestatus); } int dlt_get_log_state() { return dlt_user.log_state; } DltReturnValue dlt_set_log_mode(DltUserLogMode mode) { DLT_UNUSED(mode); /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; if ((mode < DLT_USER_MODE_UNDEFINED) || (mode >= DLT_USER_MODE_MAX)) { dlt_vlog(LOG_ERR, "User log mode %d is outside valid range", mode); return DLT_RETURN_WRONG_PARAMETER; } if (!dlt_user_initialised) { if (dlt_init() < 0) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } return dlt_user_log_send_log_mode(mode); } int dlt_set_resend_timeout_atexit(uint32_t timeout_in_milliseconds) { /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; if (dlt_user_initialised == 0) if (dlt_init() < 0) return -1; dlt_user.timeout_at_exit_handler = timeout_in_milliseconds * 10; return 0; } /* ********************************************************************************************* */ inline DltReturnValue dlt_user_log_write_start(DltContext *handle, DltContextData *log, DltLogLevelType loglevel) { return dlt_user_log_write_start_id(handle, log, loglevel, DLT_USER_DEFAULT_MSGID); } DltReturnValue dlt_user_log_write_start_id(DltContext *handle, DltContextData *log, DltLogLevelType loglevel, uint32_t messageid) { DLT_LOG_FATAL_RESET_TRAP(loglevel); DltReturnValue ret = DLT_RETURN_OK; /* check nullpointer */ if ((handle == NULL) || (log == NULL)) return DLT_RETURN_WRONG_PARAMETER; /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; /* check log levels */ ret = dlt_user_is_logLevel_enabled(handle, loglevel); if (ret == DLT_RETURN_WRONG_PARAMETER) return DLT_RETURN_WRONG_PARAMETER; else if (ret == DLT_RETURN_LOGGING_DISABLED) return DLT_RETURN_OK; /* initialize values */ if ((dlt_user_log_init(handle, log) < DLT_RETURN_OK) || (dlt_user.dlt_ll_ts == NULL)) return DLT_RETURN_ERROR; /* initialize values */ if (log->buffer == NULL) { log->buffer = calloc(sizeof(unsigned char), dlt_user.log_buf_len); if (log->buffer == NULL) { dlt_vlog(LOG_ERR, "Cannot allocate buffer for DLT Log message\n"); return DLT_RETURN_ERROR; } } log->args_num = 0; log->log_level = loglevel; log->size = 0; log->use_timestamp = DLT_AUTO_TIMESTAMP; /* In non-verbose mode, insert message id */ if (dlt_user.verbose_mode == 0) { if ((sizeof(uint32_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; /* Write message id */ memcpy(log->buffer, &(messageid), sizeof(uint32_t)); log->size = sizeof(uint32_t); /* as the message id is part of each message in non-verbose mode, * it doesn't increment the argument counter in extended header (if used) */ } return DLT_RETURN_TRUE; } DltReturnValue dlt_user_log_write_finish(DltContextData *log) { int ret = DLT_RETURN_ERROR; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; ret = dlt_user_log_send_log(log, DLT_TYPE_LOG); dlt_user_free_buffer(&(log->buffer)); return ret; } DltReturnValue dlt_user_log_write_raw(DltContextData *log, void *data, uint16_t length) { return dlt_user_log_write_raw_formatted(log, data, length, DLT_FORMAT_DEFAULT); } DltReturnValue dlt_user_log_write_raw_formatted(DltContextData *log, void *data, uint16_t length, DltFormatType type) { size_t new_log_size = 0; uint32_t type_info = 0; /* check nullpointer */ if ((log == NULL) || ((data == NULL) && (length != 0))) return DLT_RETURN_WRONG_PARAMETER; /* Have to cast type to signed type because some compilers assume that DltFormatType is unsigned and issue a warning */ if (((int16_t)type < DLT_FORMAT_DEFAULT) || (type >= DLT_FORMAT_MAX)) { dlt_vlog(LOG_ERR, "Format type %d is outside valid range", type); return DLT_RETURN_WRONG_PARAMETER; } if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } new_log_size = log->size + length + sizeof(uint16_t); if (new_log_size > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { new_log_size = log->size + length + sizeof(uint32_t) + sizeof(uint16_t); if (new_log_size > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; /* Transmit type information */ type_info = DLT_TYPE_INFO_RAWD; if ((type >= DLT_FORMAT_HEX8) && (type <= DLT_FORMAT_HEX64)) { type_info |= DLT_SCOD_HEX; type_info += type; } else if ((type >= DLT_FORMAT_BIN8) && (type <= DLT_FORMAT_BIN16)) { type_info |= DLT_SCOD_BIN; type_info += type - DLT_FORMAT_BIN8 + 1; } memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } /* First transmit length of raw data, then the raw data itself */ memcpy((log->buffer) + log->size, &(length), sizeof(uint16_t)); log->size += sizeof(uint16_t); memcpy((log->buffer) + log->size, data, length); log->size += length; log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_float32(DltContextData *log, float32_t data) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if (sizeof(float32_t) != 4) return DLT_RETURN_ERROR; if ((log->size + sizeof(float32_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(float32_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_FLOA | DLT_TYLE_32BIT; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(float32_t)); log->size += sizeof(float32_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_float64(DltContextData *log, float64_t data) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if (sizeof(float64_t) != 8) return DLT_RETURN_ERROR; if ((log->size + sizeof(float64_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(float64_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_FLOA | DLT_TYLE_64BIT; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(float64_t)); log->size += sizeof(float64_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_uint(DltContextData *log, unsigned int data) { if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } switch (sizeof(unsigned int)) { case 1: { return dlt_user_log_write_uint8(log, (uint8_t)data); break; } case 2: { return dlt_user_log_write_uint16(log, (uint16_t)data); break; } case 4: { return dlt_user_log_write_uint32(log, (uint32_t)data); break; } case 8: { return dlt_user_log_write_uint64(log, (uint64_t)data); break; } default: { return DLT_RETURN_ERROR; break; } } return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_uint8(DltContextData *log, uint8_t data) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(uint8_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(uint8_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_UINT | DLT_TYLE_8BIT; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(uint8_t)); log->size += sizeof(uint8_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_uint16(DltContextData *log, uint16_t data) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(uint16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(uint16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_UINT | DLT_TYLE_16BIT; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(uint16_t)); log->size += sizeof(uint16_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_uint32(DltContextData *log, uint32_t data) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(uint32_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(uint32_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_UINT | DLT_TYLE_32BIT; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(uint32_t)); log->size += sizeof(uint32_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_uint64(DltContextData *log, uint64_t data) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(uint64_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(uint64_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_UINT | DLT_TYLE_64BIT; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(uint64_t)); log->size += sizeof(uint64_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_uint8_formatted(DltContextData *log, uint8_t data, DltFormatType type) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; /* Have to cast type to signed type because some compilers assume that DltFormatType is unsigned and issue a warning */ if (((int16_t)type < DLT_FORMAT_DEFAULT) || (type >= DLT_FORMAT_MAX)) { dlt_vlog(LOG_ERR, "Format type %d is outside valid range", type); return DLT_RETURN_WRONG_PARAMETER; } if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(uint16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(uint16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_UINT | DLT_TYLE_8BIT; if ((type >= DLT_FORMAT_HEX8) && (type <= DLT_FORMAT_HEX64)) type_info |= DLT_SCOD_HEX; else if ((type >= DLT_FORMAT_BIN8) && (type <= DLT_FORMAT_BIN16)) type_info |= DLT_SCOD_BIN; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(uint8_t)); log->size += sizeof(uint8_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_uint16_formatted(DltContextData *log, uint16_t data, DltFormatType type) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; /* Have to cast type to signed type because some compilers assume that DltFormatType is unsigned and issue a warning */ if (((int16_t)type < DLT_FORMAT_DEFAULT) || (type >= DLT_FORMAT_MAX)) { dlt_vlog(LOG_ERR, "Format type %d is outside valid range", type); return DLT_RETURN_WRONG_PARAMETER; } if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(uint16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(uint16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_UINT | DLT_TYLE_16BIT; if ((type >= DLT_FORMAT_HEX8) && (type <= DLT_FORMAT_HEX64)) type_info |= DLT_SCOD_HEX; else if ((type >= DLT_FORMAT_BIN8) && (type <= DLT_FORMAT_BIN16)) type_info |= DLT_SCOD_BIN; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(uint16_t)); log->size += sizeof(uint16_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_uint32_formatted(DltContextData *log, uint32_t data, DltFormatType type) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; /* Have to cast type to signed type because some compilers assume that DltFormatType is unsigned and issue a warning */ if (((int16_t)type < DLT_FORMAT_DEFAULT) || (type >= DLT_FORMAT_MAX)) { dlt_vlog(LOG_ERR, "Format type %d is outside valid range", type); return DLT_RETURN_WRONG_PARAMETER; } if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(uint16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(uint16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_UINT | DLT_TYLE_32BIT; if ((type >= DLT_FORMAT_HEX8) && (type <= DLT_FORMAT_HEX64)) type_info |= DLT_SCOD_HEX; else if ((type >= DLT_FORMAT_BIN8) && (type <= DLT_FORMAT_BIN16)) type_info |= DLT_SCOD_BIN; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(uint32_t)); log->size += sizeof(uint32_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_uint64_formatted(DltContextData *log, uint64_t data, DltFormatType type) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; /* Have to cast type to signed type because some compilers assume that DltFormatType is unsigned and issue a warning */ if (((int16_t)type < DLT_FORMAT_DEFAULT) || (type >= DLT_FORMAT_MAX)) { dlt_vlog(LOG_ERR, "Format type %d is outside valid range", type); return DLT_RETURN_WRONG_PARAMETER; } if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(uint16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(uint16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_UINT | DLT_TYLE_64BIT; if ((type >= DLT_FORMAT_HEX8) && (type <= DLT_FORMAT_HEX64)) type_info |= DLT_SCOD_HEX; else if ((type >= DLT_FORMAT_BIN8) && (type <= DLT_FORMAT_BIN16)) type_info |= DLT_SCOD_BIN; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(uint64_t)); log->size += sizeof(uint64_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_ptr(DltContextData *log, void *data) { if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } switch (sizeof(void *)) { case 4: return dlt_user_log_write_uint32_formatted(log, (uintptr_t) data, DLT_FORMAT_HEX32); break; case 8: return dlt_user_log_write_uint64_formatted(log, (uintptr_t) data, DLT_FORMAT_HEX64); break; default: ; /* skip */ } return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_int(DltContextData *log, int data) { if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } switch (sizeof(int)) { case 1: { return dlt_user_log_write_int8(log, (int8_t)data); break; } case 2: { return dlt_user_log_write_int16(log, (int16_t)data); break; } case 4: { return dlt_user_log_write_int32(log, (int32_t)data); break; } case 8: { return dlt_user_log_write_int64(log, (int64_t)data); break; } default: { return DLT_RETURN_ERROR; break; } } return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_int8(DltContextData *log, int8_t data) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(int8_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(int8_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_SINT | DLT_TYLE_8BIT; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(int8_t)); log->size += sizeof(int8_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_int16(DltContextData *log, int16_t data) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(int16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(int16_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_SINT | DLT_TYLE_16BIT; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(int16_t)); log->size += sizeof(int16_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_int32(DltContextData *log, int32_t data) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(int32_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(int32_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_SINT | DLT_TYLE_32BIT; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(int32_t)); log->size += sizeof(int32_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_int64(DltContextData *log, int64_t data) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(int64_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(int64_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_SINT | DLT_TYLE_64BIT; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(int64_t)); log->size += sizeof(int64_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_bool(DltContextData *log, uint8_t data) { uint32_t type_info; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log->size + sizeof(uint8_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; if (dlt_user.verbose_mode) { if ((log->size + sizeof(uint32_t) + sizeof(uint8_t)) > dlt_user.log_buf_len) return DLT_RETURN_USER_BUFFER_FULL; type_info = DLT_TYPE_INFO_BOOL; memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &data, sizeof(uint8_t)); log->size += sizeof(uint8_t); log->args_num++; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_string(DltContextData *log, const char *text) { return dlt_user_log_write_string_utils(log, text, ASCII_STRING); } DltReturnValue dlt_user_log_write_sized_string(DltContextData *log, const char *text, uint16_t length) { return dlt_user_log_write_sized_string_utils(log, text, length, ASCII_STRING); } DltReturnValue dlt_user_log_write_constant_string(DltContextData *log, const char *text) { /* Send parameter only in verbose mode */ return dlt_user.verbose_mode ? dlt_user_log_write_string(log, text) : DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_sized_constant_string(DltContextData *log, const char *text, uint16_t length) { /* Send parameter only in verbose mode */ return dlt_user.verbose_mode ? dlt_user_log_write_sized_string(log, text, length) : DLT_RETURN_OK; } DltReturnValue dlt_user_log_write_utf8_string(DltContextData *log, const char *text) { return dlt_user_log_write_string_utils(log, text, UTF8_STRING); } DltReturnValue dlt_user_log_write_sized_utf8_string(DltContextData *log, const char *text, uint16_t length) { return dlt_user_log_write_sized_string_utils(log, text, length, UTF8_STRING); } DltReturnValue dlt_user_log_write_sized_string_utils(DltContextData *log, const char *text, uint16_t length, const enum StringType type) { uint16_t arg_size = 0; uint32_t type_info = 0; size_t new_log_size = 0; DltReturnValue ret = DLT_RETURN_OK; size_t str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; size_t max_payload_str_msg; if ((log == NULL) || (text == NULL)) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { dlt_vlog(LOG_WARNING, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } arg_size = (uint16_t) (length + 1); new_log_size = log->size + arg_size + sizeof(uint16_t); if (dlt_user.verbose_mode) new_log_size += sizeof(uint32_t); /* Check log size condition */ if (new_log_size > dlt_user.log_buf_len) { ret = DLT_RETURN_USER_BUFFER_FULL; /* Re-calculate arg_size */ arg_size = (uint16_t) (dlt_user.log_buf_len - log->size - sizeof(uint16_t)); size_t min_payload_str_truncate_msg = log->size + str_truncate_message_length + sizeof(uint16_t); if (dlt_user.verbose_mode) { min_payload_str_truncate_msg += sizeof(uint32_t); arg_size -= (uint16_t) sizeof(uint32_t); } /* Return when dlt_user.log_buf_len does not have enough space for min_payload_str_truncate_msg */ if (min_payload_str_truncate_msg > dlt_user.log_buf_len) { dlt_vlog(LOG_WARNING, "%s not enough minimum space to store data\n", __FUNCTION__); return ret; } /* Calculate the maximum size of string will be copied after truncate */ max_payload_str_msg = dlt_user.log_buf_len - min_payload_str_truncate_msg; if (type == UTF8_STRING) { /** * Adjust the lengh to truncate one utf8 character corectly * refer: https://en.wikipedia.org/wiki/UTF-8 * one utf8 character will have maximum 4 bytes then maximum bytes will be truncate additional is 3 */ const char *tmp = (text + max_payload_str_msg - 3); uint16_t reduce_size = 0; if (tmp[2] & 0x80) { /* Is the last byte of truncated text is the first byte in multi-byte sequence (utf8 2 bytes) */ if (tmp[2] & 0x40) reduce_size = 1; /* Is the next to last byte of truncated text is the first byte in multi-byte sequence (utf8 3 bytes) */ else if ((tmp[1] & 0xe0) == 0xe0) reduce_size = 2; /* utf8 4 bytes */ else if ((tmp[0] & 0xf0) == 0xf0) reduce_size = 3; } max_payload_str_msg -= reduce_size; arg_size -= (uint16_t) reduce_size; } } if (dlt_user.verbose_mode) { switch (type) { case ASCII_STRING: { type_info = DLT_TYPE_INFO_STRG | DLT_SCOD_ASCII; break; } case UTF8_STRING: { type_info = DLT_TYPE_INFO_STRG | DLT_SCOD_UTF8; break; } default: { /* Do nothing */ break; } } memcpy((log->buffer) + log->size, &(type_info), sizeof(uint32_t)); log->size += sizeof(uint32_t); } memcpy((log->buffer) + log->size, &(arg_size), sizeof(uint16_t)); log->size += sizeof(uint16_t); switch (ret) { case DLT_RETURN_OK: { /* Whole string will be copied */ memcpy((log->buffer) + log->size, text, length); /* The input string might not be null-terminated, so we're doing that by ourselves */ log->buffer[log->size + length] = '\0'; log->size += arg_size; break; } case DLT_RETURN_USER_BUFFER_FULL: { /* Only copy partial string */ memcpy((log->buffer) + log->size, text, max_payload_str_msg); log->size += max_payload_str_msg; /* Append string truncate the input string */ memcpy((log->buffer) + log->size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); log->size += str_truncate_message_length; break; } default: { /* Do nothing */ break; } } log->args_num++; return ret; } DltReturnValue dlt_user_log_write_string_utils(DltContextData *log, const char *text, const enum StringType type) { if ((log == NULL) || (text == NULL)) return DLT_RETURN_WRONG_PARAMETER; uint16_t length = (uint16_t) strlen(text); return dlt_user_log_write_sized_string_utils(log, text, length, type); } DltReturnValue dlt_register_injection_callback_with_id(DltContext *handle, uint32_t service_id, dlt_injection_callback_id dlt_injection_cbk, void *priv) { DltContextData log; uint32_t i, j, k; int found = 0; DltUserInjectionCallback *old; if (dlt_user_log_init(handle, &log) < DLT_RETURN_OK) return DLT_RETURN_ERROR; if (service_id < DLT_USER_INJECTION_MIN) return DLT_RETURN_WRONG_PARAMETER; /* This function doesn't make sense storing to local file is choosen; * so terminate this function */ if (dlt_user.dlt_is_file) return DLT_RETURN_OK; DLT_SEM_LOCK(); if (dlt_user.dlt_ll_ts == NULL) { DLT_SEM_FREE(); return DLT_RETURN_OK; } /* Insert callback in corresponding table */ i = (uint32_t) handle->log_level_pos; /* Insert each service_id only once */ for (k = 0; k < dlt_user.dlt_ll_ts[i].nrcallbacks; k++) if ((dlt_user.dlt_ll_ts[i].injection_table) && (dlt_user.dlt_ll_ts[i].injection_table[k].service_id == service_id)) { found = 1; break; } if (found) { j = k; } else { j = dlt_user.dlt_ll_ts[i].nrcallbacks; /* Allocate or expand injection table */ if (dlt_user.dlt_ll_ts[i].injection_table == NULL) { dlt_user.dlt_ll_ts[i].injection_table = (DltUserInjectionCallback *)malloc(sizeof(DltUserInjectionCallback)); if (dlt_user.dlt_ll_ts[i].injection_table == NULL) { DLT_SEM_FREE(); return DLT_RETURN_ERROR; } } else { old = dlt_user.dlt_ll_ts[i].injection_table; dlt_user.dlt_ll_ts[i].injection_table = (DltUserInjectionCallback *)malloc( sizeof(DltUserInjectionCallback) * (j + 1)); if (dlt_user.dlt_ll_ts[i].injection_table == NULL) { dlt_user.dlt_ll_ts[i].injection_table = old; DLT_SEM_FREE(); return DLT_RETURN_ERROR; } memcpy(dlt_user.dlt_ll_ts[i].injection_table, old, sizeof(DltUserInjectionCallback) * j); free(old); } dlt_user.dlt_ll_ts[i].nrcallbacks++; } /* Store service_id and corresponding function pointer for callback function */ dlt_user.dlt_ll_ts[i].injection_table[j].service_id = service_id; if (priv == NULL) { dlt_user.dlt_ll_ts[i].injection_table[j].injection_callback = (dlt_injection_callback)(void*)dlt_injection_cbk; dlt_user.dlt_ll_ts[i].injection_table[j].injection_callback_with_id = NULL; dlt_user.dlt_ll_ts[i].injection_table[j].data = NULL; } else { dlt_user.dlt_ll_ts[i].injection_table[j].injection_callback = NULL; dlt_user.dlt_ll_ts[i].injection_table[j].injection_callback_with_id = dlt_injection_cbk; dlt_user.dlt_ll_ts[i].injection_table[j].data = priv; } DLT_SEM_FREE(); return DLT_RETURN_OK; } DltReturnValue dlt_register_injection_callback(DltContext *handle, uint32_t service_id, int (*dlt_injection_callback)(uint32_t service_id, void *data, uint32_t length)) { return dlt_register_injection_callback_with_id(handle, service_id, (dlt_injection_callback_id)(void*)dlt_injection_callback, NULL); } DltReturnValue dlt_register_log_level_changed_callback(DltContext *handle, void (*dlt_log_level_changed_callback)( char context_id[DLT_ID_SIZE], uint8_t log_level, uint8_t trace_status)) { DltContextData log; uint32_t i; if (dlt_user_log_init(handle, &log) < DLT_RETURN_OK) return DLT_RETURN_ERROR; /* This function doesn't make sense storing to local file is choosen; * so terminate this function */ if (dlt_user.dlt_is_file) return DLT_RETURN_OK; DLT_SEM_LOCK(); if (dlt_user.dlt_ll_ts == NULL) { DLT_SEM_FREE(); return DLT_RETURN_OK; } /* Insert callback in corresponding table */ i = (uint32_t) handle->log_level_pos; /* Store new callback function */ dlt_user.dlt_ll_ts[i].log_level_changed_callback = dlt_log_level_changed_callback; DLT_SEM_FREE(); return DLT_RETURN_OK; } /** * NW Trace related */ #ifdef DLT_NETWORK_TRACE_ENABLE int check_buffer(void) { int total_size, used_size; dlt_user_check_buffer(&total_size, &used_size); return (total_size - used_size < total_size / 2) ? -1 : 1; } /** * Send the start of a segment chain. * Returns DLT_RETURN_ERROR on failure */ DltReturnValue dlt_user_trace_network_segmented_start(uint32_t *id, DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len) { DltContextData log = { 0 }; struct timeval tv; int ret = DLT_RETURN_ERROR; /* check null pointer */ if (id == NULL) return DLT_RETURN_WRONG_PARAMETER; if ((nw_trace_type < DLT_NW_TRACE_IPC) || (nw_trace_type >= DLT_NW_TRACE_MAX)) { dlt_vlog(LOG_ERR, "Network trace type %d is outside valid range", nw_trace_type); return DLT_RETURN_WRONG_PARAMETER; } if (dlt_user.dlt_ll_ts == NULL) return DLT_RETURN_ERROR; if (handle->trace_status_ptr && (*(handle->trace_status_ptr) == DLT_TRACE_STATUS_ON)) { /* initialize values */ if (dlt_user_log_init(handle, &log) < DLT_RETURN_OK) return DLT_RETURN_ERROR; if (log.buffer == NULL) { log.buffer = calloc(sizeof(unsigned char), dlt_user.log_buf_len); if (log.buffer == NULL) { dlt_vlog(LOG_ERR, "Cannot allocate buffer for DLT Log message\n"); return DLT_RETURN_ERROR; } } log.args_num = 0; log.trace_status = nw_trace_type; log.size = 0; gettimeofday(&tv, NULL); *id = (uint32_t) tv.tv_usec; /* Write identifier */ if (dlt_user_log_write_string(&log, DLT_TRACE_NW_START) < 0) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Write stream handle */ if (dlt_user_log_write_uint32(&log, *id) < 0) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Write header */ if (dlt_user_log_write_raw(&log, header, header_len) < 0) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Write size of payload */ if (dlt_user_log_write_uint32(&log, payload_len) < 0) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Write expected segment count */ uint16_t segment_count = (uint16_t) (payload_len / DLT_MAX_TRACE_SEGMENT_SIZE + 1); /* If segments align perfectly with segment size, avoid sending empty segment */ if ((payload_len % DLT_MAX_TRACE_SEGMENT_SIZE) == 0) segment_count--; if (dlt_user_log_write_uint16(&log, segment_count) < 0) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Write length of one segment */ if (dlt_user_log_write_uint16(&log, DLT_MAX_TRACE_SEGMENT_SIZE) < 0) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Send log */ ret = dlt_user_log_send_log(&log, DLT_TYPE_NW_TRACE); dlt_user_free_buffer(&(log.buffer)); return ret; } return DLT_RETURN_OK; } DltReturnValue dlt_user_trace_network_segmented_segment(uint32_t id, DltContext *handle, DltNetworkTraceType nw_trace_type, int sequence, uint16_t payload_len, void *payload) { int ret = DLT_RETURN_ERROR; struct timespec ts; if ((nw_trace_type < DLT_NW_TRACE_IPC) || (nw_trace_type >= DLT_NW_TRACE_MAX)) { dlt_vlog(LOG_ERR, "Network trace type %d is outside valid range", nw_trace_type); return DLT_RETURN_WRONG_PARAMETER; } while (check_buffer() < 0) { /* Wait 50ms */ ts.tv_sec = 0; ts.tv_nsec = 1000000 * 50; nanosleep(&ts, NULL); dlt_user_log_resend_buffer(); } if (dlt_user.dlt_ll_ts == NULL) return DLT_RETURN_ERROR; if (handle->trace_status_ptr && (*(handle->trace_status_ptr) == DLT_TRACE_STATUS_ON)) { DltContextData log = { 0 }; if (dlt_user_log_init(handle, &log) < DLT_RETURN_OK) return DLT_RETURN_ERROR; /* initialize values */ if (log.buffer == NULL) { log.buffer = calloc(sizeof(unsigned char), dlt_user.log_buf_len); if (log.buffer == NULL) { dlt_vlog(LOG_ERR, "Cannot allocate buffer for DLT Log message\n"); return DLT_RETURN_ERROR; } } log.args_num = 0; log.trace_status = nw_trace_type; log.size = 0; /* Write identifier */ if (dlt_user_log_write_string(&log, DLT_TRACE_NW_SEGMENT) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Write stream handle */ if (dlt_user_log_write_uint32(&log, id) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Write segment sequence number */ if (dlt_user_log_write_uint16(&log, (uint16_t) sequence) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Write data */ if (dlt_user_log_write_raw(&log, payload, payload_len) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } ret = dlt_user_log_send_log(&log, DLT_TYPE_NW_TRACE); /* Send log */ dlt_user_free_buffer(&(log.buffer)); return ret; } /* Allow other threads to log between chunks */ sched_yield(); return DLT_RETURN_OK; } DltReturnValue dlt_user_trace_network_segmented_end(uint32_t id, DltContext *handle, DltNetworkTraceType nw_trace_type) { DltContextData log = { 0 }; int ret = DLT_RETURN_ERROR; if ((nw_trace_type < DLT_NW_TRACE_IPC) || (nw_trace_type >= DLT_NW_TRACE_MAX)) { dlt_vlog(LOG_ERR, "Network trace type %d is outside valid range", nw_trace_type); return DLT_RETURN_WRONG_PARAMETER; } if (dlt_user.dlt_ll_ts == NULL) return DLT_RETURN_ERROR; if (handle->trace_status_ptr && (*(handle->trace_status_ptr) == DLT_TRACE_STATUS_ON)) { /* initialize values */ if (dlt_user_log_init(handle, &log) < DLT_RETURN_OK) return DLT_RETURN_ERROR; /* initialize values */ if (log.buffer == NULL) { log.buffer = calloc(sizeof(unsigned char), dlt_user.log_buf_len); if (log.buffer == NULL) { dlt_vlog(LOG_ERR, "Cannot allocate buffer for DLT Log message\n"); return DLT_RETURN_ERROR; } } log.args_num = 0; log.trace_status = nw_trace_type; log.size = 0; /* Write identifier */ if (dlt_user_log_write_string(&log, DLT_TRACE_NW_END) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Write stream handle */ if (dlt_user_log_write_uint32(&log, id) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } ret = dlt_user_log_send_log(&log, DLT_TYPE_NW_TRACE); /* Send log */ dlt_user_free_buffer(&(log.buffer)); return ret; } return DLT_RETURN_OK; } void dlt_user_trace_network_segmented_thread(void *unused) { /* Unused on purpose. */ (void)unused; #ifdef linux prctl(PR_SET_NAME, "dlt_segmented", 0, 0, 0); #endif pthread_cleanup_push(dlt_user_cleanup_handler, NULL); s_segmented_data *data; while (1) { /* Wait until message queue is initialized */ dlt_lock_mutex(&mq_mutex); while (dlt_user.dlt_segmented_queue_read_handle < 0) { pthread_cond_wait(&mq_init_condition, &mq_mutex); } dlt_unlock_mutex(&mq_mutex); ssize_t read = mq_receive(dlt_user.dlt_segmented_queue_read_handle, (char *)&data, sizeof(s_segmented_data *), NULL); if (read < 0) { if (errno != EINTR) { struct timespec req; long sec = (DLT_USER_MQ_ERROR_RETRY_INTERVAL / 1000000); dlt_vlog(LOG_WARNING, "NWTSegmented: Error while reading queue: %s\n", strerror(errno)); req.tv_sec = sec; req.tv_nsec = (DLT_USER_MQ_ERROR_RETRY_INTERVAL - sec * 1000000) * 1000; nanosleep(&req, NULL); } continue; } if (read != sizeof(s_segmented_data *)) { /* This case will not happen. */ /* When this thread is interrupted by signal, mq_receive() will not return */ /* partial read length and will return -1. And also no data is removed from mq. */ dlt_vlog(LOG_WARNING, "NWTSegmented: Could not read data fully from queue: %zd\n", read); continue; } dlt_user_trace_network_segmented_thread_segmenter(data); /* Send the end message */ DltReturnValue err = dlt_user_trace_network_segmented_end(data->id, data->handle, data->nw_trace_type); if ((err == DLT_RETURN_BUFFER_FULL) || (err == DLT_RETURN_ERROR)) dlt_log(LOG_WARNING, "NWTSegmented: Could not send end segment.\n"); /* Free resources */ free(data->header); free(data->payload); free(data); } pthread_cleanup_pop(1); } void dlt_user_trace_network_segmented_thread_segmenter(s_segmented_data *data) { /* Segment the data and send the chunks */ void *ptr = NULL; uint32_t offset = 0; uint16_t sequence = 0; do { uint16_t len = 0; if (offset + DLT_MAX_TRACE_SEGMENT_SIZE > data->payload_len) len = (uint16_t) (data->payload_len - offset); else len = DLT_MAX_TRACE_SEGMENT_SIZE; /* If payload size aligns perfectly with segment size, avoid sending empty segment */ if (len == 0) break; ptr = data->payload + offset; DltReturnValue err = dlt_user_trace_network_segmented_segment(data->id, data->handle, data->nw_trace_type, sequence++, len, ptr); if ((err == DLT_RETURN_BUFFER_FULL) || (err == DLT_RETURN_ERROR)) { dlt_log(LOG_ERR, "NWTSegmented: Could not send segment. Aborting.\n"); break; /* loop */ } offset += len; } while (ptr < data->payload + data->payload_len); } DltReturnValue dlt_user_trace_network_segmented(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload) { /* forbid dlt usage in child after fork */ if (g_dlt_is_child) return DLT_RETURN_ERROR; /* Send as normal trace if possible */ if (header_len + payload_len + (uint16_t) sizeof(uint16_t) < dlt_user.log_buf_len) return dlt_user_trace_network(handle, nw_trace_type, header_len, header, payload_len, payload); /* Allocate Memory */ s_segmented_data *thread_data = malloc(sizeof(s_segmented_data)); if (thread_data == NULL) return DLT_RETURN_ERROR; thread_data->header = malloc(header_len); if (thread_data->header == NULL) { free(thread_data); return DLT_RETURN_ERROR; } thread_data->payload = malloc(payload_len); if (thread_data->payload == NULL) { free(thread_data->header); free(thread_data); return DLT_RETURN_ERROR; } /* Copy data */ thread_data->handle = handle; thread_data->nw_trace_type = nw_trace_type; thread_data->header_len = header_len; memcpy(thread_data->header, header, header_len); thread_data->payload_len = payload_len; memcpy(thread_data->payload, payload, payload_len); /* Send start message */ DltReturnValue err = dlt_user_trace_network_segmented_start(&(thread_data->id), thread_data->handle, thread_data->nw_trace_type, (uint16_t) thread_data->header_len, thread_data->header, (uint16_t) thread_data->payload_len); if ((err == DLT_RETURN_BUFFER_FULL) || (err == DLT_RETURN_ERROR)) { dlt_log(LOG_ERR, "NWTSegmented: Could not send start segment. Aborting.\n"); free(thread_data->header); free(thread_data->payload); free(thread_data); return DLT_RETURN_ERROR; } /* Open queue if it is not open */ if (dlt_init_message_queue() < 0) { dlt_log(LOG_ERR, "NWTSegmented: Could not open queue.\n"); free(thread_data->header); free(thread_data->payload); free(thread_data); return DLT_RETURN_ERROR; } /* Add to queue */ if (mq_send(dlt_user.dlt_segmented_queue_write_handle, (char *)&thread_data, sizeof(s_segmented_data *), 1) < 0) { if (errno == EAGAIN) dlt_log(LOG_WARNING, "NWTSegmented: Queue full. Message discarded.\n"); free(thread_data->header); free(thread_data->payload); free(thread_data); dlt_vnlog(LOG_WARNING, 256, "NWTSegmented: Could not write into queue: %s \n", strerror(errno)); return DLT_RETURN_ERROR; } /*thread_data will be freed by the receiver function */ /*coverity[leaked_storage] */ return DLT_RETURN_OK; } DltReturnValue dlt_user_trace_network(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload) { return dlt_user_trace_network_truncated(handle, nw_trace_type, header_len, header, payload_len, payload, 1); } DltReturnValue dlt_user_trace_network_truncated(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload, int allow_truncate) { int ret = DLT_RETURN_ERROR; DltContextData log = { 0 }; if ((payload == NULL) && (payload_len > 0)) return DLT_RETURN_WRONG_PARAMETER; if ((nw_trace_type < DLT_NW_TRACE_IPC) || (nw_trace_type >= DLT_NW_TRACE_MAX)) { dlt_vlog(LOG_ERR, "Network trace type %d is outside valid range", nw_trace_type); return DLT_RETURN_WRONG_PARAMETER; } if (dlt_user.dlt_ll_ts == NULL) return DLT_RETURN_ERROR; if (handle->trace_status_ptr && (*(handle->trace_status_ptr) == DLT_TRACE_STATUS_ON)) { if ((dlt_user_log_init(handle, &log) < DLT_RETURN_OK) || (dlt_user.dlt_ll_ts == NULL)) return DLT_RETURN_ERROR; /* initialize values */ if (log.buffer == NULL) { log.buffer = calloc(sizeof(unsigned char), dlt_user.log_buf_len); if (log.buffer == NULL) { dlt_vlog(LOG_ERR, "Cannot allocate buffer for DLT Log message\n"); return DLT_RETURN_ERROR; } } log.args_num = 0; log.trace_status = nw_trace_type; log.size = 0; if (header == NULL) header_len = 0; /* If truncation is allowed, check if we must do it */ if ((allow_truncate > 0) && ((header_len + payload_len + (uint16_t) sizeof(uint16_t)) > dlt_user.log_buf_len)) { /* Identify as truncated */ if (dlt_user_log_write_string(&log, DLT_TRACE_NW_TRUNCATED) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Write header and its length */ if (dlt_user_log_write_raw(&log, header, header_len) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /* Write original size of payload */ if (dlt_user_log_write_uint32(&log, payload_len) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } /** * Calculate maximum available space in sending buffer after headers. */ uint16_t truncated_payload_len = (uint16_t) (dlt_user.log_buf_len - log.size - sizeof(uint16_t) - sizeof(uint32_t)); /* Write truncated payload */ if (dlt_user_log_write_raw(&log, payload, truncated_payload_len) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } } else { /* Truncation not allowed or data short enough */ /* Write header and its length */ if (dlt_user_log_write_raw(&log, header, header_len) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } if (payload == NULL) payload_len = 0; /* Write payload and its length */ if (dlt_user_log_write_raw(&log, payload, payload_len) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return DLT_RETURN_ERROR; } } ret = dlt_user_log_send_log(&log, DLT_TYPE_NW_TRACE); dlt_user_free_buffer(&(log.buffer)); /* Send log */ return ret; } return DLT_RETURN_OK; } #endif /* DLT_NETWORK_TRACE_ENABLE */ DltReturnValue dlt_log_string(DltContext *handle, DltLogLevelType loglevel, const char *text) { DltReturnValue ret = DLT_RETURN_OK; DltContextData log; if (dlt_user.verbose_mode == 0) return DLT_RETURN_ERROR; if ((handle == NULL) || (text == NULL)) return DLT_RETURN_WRONG_PARAMETER; if (dlt_user_log_write_start(handle, &log, loglevel) == DLT_RETURN_TRUE) { ret = dlt_user_log_write_string(&log, text); if (dlt_user_log_write_finish(&log) < DLT_RETURN_OK) ret = DLT_RETURN_ERROR; } return ret; } DltReturnValue dlt_log_string_int(DltContext *handle, DltLogLevelType loglevel, const char *text, int data) { DltReturnValue ret = DLT_RETURN_OK; DltContextData log; if (dlt_user.verbose_mode == 0) return DLT_RETURN_ERROR; if ((handle == NULL) || (text == NULL)) return DLT_RETURN_WRONG_PARAMETER; if (dlt_user_log_write_start(handle, &log, loglevel) == DLT_RETURN_TRUE) { ret = dlt_user_log_write_string(&log, text); dlt_user_log_write_int(&log, data); if (dlt_user_log_write_finish(&log) < DLT_RETURN_OK) ret = DLT_RETURN_ERROR; } return ret; } DltReturnValue dlt_log_string_uint(DltContext *handle, DltLogLevelType loglevel, const char *text, unsigned int data) { DltReturnValue ret = DLT_RETURN_OK; DltContextData log; if (dlt_user.verbose_mode == 0) return DLT_RETURN_ERROR; if ((handle == NULL) || (text == NULL)) return DLT_RETURN_WRONG_PARAMETER; if (dlt_user_log_write_start(handle, &log, loglevel) == DLT_RETURN_TRUE) { ret = dlt_user_log_write_string(&log, text); dlt_user_log_write_uint(&log, data); if (dlt_user_log_write_finish(&log) < DLT_RETURN_OK) ret = DLT_RETURN_ERROR; } return ret; } DltReturnValue dlt_log_int(DltContext *handle, DltLogLevelType loglevel, int data) { DltContextData log; if (dlt_user.verbose_mode == 0) return DLT_RETURN_ERROR; if (handle == NULL) return DLT_RETURN_ERROR; if (dlt_user_log_write_start(handle, &log, loglevel) == DLT_RETURN_TRUE) { dlt_user_log_write_int(&log, data); if (dlt_user_log_write_finish(&log) < DLT_RETURN_OK) return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } DltReturnValue dlt_log_uint(DltContext *handle, DltLogLevelType loglevel, unsigned int data) { DltContextData log; if (dlt_user.verbose_mode == 0) return DLT_RETURN_ERROR; if (handle == NULL) return DLT_RETURN_WRONG_PARAMETER; if (dlt_user_log_write_start(handle, &log, loglevel) == DLT_RETURN_TRUE) { dlt_user_log_write_uint(&log, data); if (dlt_user_log_write_finish(&log) < DLT_RETURN_OK) return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } DltReturnValue dlt_log_raw(DltContext *handle, DltLogLevelType loglevel, void *data, uint16_t length) { DltContextData log; DltReturnValue ret = DLT_RETURN_OK; if (dlt_user.verbose_mode == 0) return DLT_RETURN_ERROR; if (handle == NULL) return DLT_RETURN_WRONG_PARAMETER; if (dlt_user_log_write_start(handle, &log, loglevel) > 0) { if ((ret = dlt_user_log_write_raw(&log, data, length)) < DLT_RETURN_OK) { dlt_user_free_buffer(&(log.buffer)); return ret; } if (dlt_user_log_write_finish(&log) < DLT_RETURN_OK) return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } DltReturnValue dlt_log_marker() { if (!dlt_user_initialised) { if (dlt_init() < DLT_RETURN_OK) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } return dlt_user_log_send_marker(); } DltReturnValue dlt_verbose_mode(void) { if (!dlt_user_initialised) { if (dlt_init() < DLT_RETURN_OK) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } /* Switch to verbose mode */ dlt_user.verbose_mode = 1; return DLT_RETURN_OK; } DltReturnValue dlt_nonverbose_mode(void) { if (!dlt_user_initialised) { if (dlt_init() < DLT_RETURN_OK) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } /* Switch to non-verbose mode */ dlt_user.verbose_mode = 0; return DLT_RETURN_OK; } DltReturnValue dlt_use_extended_header_for_non_verbose(int8_t use_extended_header_for_non_verbose) { if (!dlt_user_initialised) { if (dlt_init() < DLT_RETURN_OK) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } /* Set use_extended_header_for_non_verbose */ dlt_user.use_extended_header_for_non_verbose = use_extended_header_for_non_verbose; return DLT_RETURN_OK; } DltReturnValue dlt_with_session_id(int8_t with_session_id) { if (!dlt_user_initialised) { if (dlt_init() < DLT_RETURN_OK) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } /* Set use_extended_header_for_non_verbose */ dlt_user.with_session_id = with_session_id; return DLT_RETURN_OK; } DltReturnValue dlt_with_timestamp(int8_t with_timestamp) { if (!dlt_user_initialised) { if (dlt_init() < DLT_RETURN_OK) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } /* Set with_timestamp */ dlt_user.with_timestamp = with_timestamp; return DLT_RETURN_OK; } DltReturnValue dlt_with_ecu_id(int8_t with_ecu_id) { if (!dlt_user_initialised) { if (dlt_init() < DLT_RETURN_OK) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } /* Set with_timestamp */ dlt_user.with_ecu_id = with_ecu_id; return DLT_RETURN_OK; } DltReturnValue dlt_enable_local_print(void) { if (!dlt_user_initialised) { if (dlt_init() < DLT_RETURN_OK) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } dlt_user.enable_local_print = 1; return DLT_RETURN_OK; } DltReturnValue dlt_disable_local_print(void) { if (!dlt_user_initialised) { if (dlt_init() < DLT_RETURN_OK) { dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return DLT_RETURN_ERROR; } } dlt_user.enable_local_print = 0; return DLT_RETURN_OK; } /* Cleanup on thread cancellation, thread may hold lock release it here */ static void dlt_user_cleanup_handler(void *arg) { DLT_UNUSED(arg); /* Satisfy compiler */ #ifdef DLT_NETWORK_TRACE_ENABLE /* unlock the message queue */ dlt_unlock_mutex(&mq_mutex); #endif /* unlock DLT (dlt_mutex) */ DLT_SEM_FREE(); } void dlt_user_housekeeperthread_function(__attribute__((unused)) void *ptr) { struct timespec ts; bool in_loop = true; #ifdef __ANDROID_API__ sigset_t set; sigset_t pset; /* * bionic is not supporting pthread_cancel so * use SIGUSR1 to kill thread properly. */ sigemptyset(&set); sigaddset(&set, SIGUSR1); if (pthread_sigmask(SIG_BLOCK, &set, NULL) != 0) { dlt_vlog(LOG_ERR, "Failed to block signal with error [%s]\n", strerror(errno)); in_loop = false; } #endif #ifdef linux prctl(PR_SET_NAME, "dlt_housekeeper", 0, 0, 0); #endif pthread_cleanup_push(dlt_user_cleanup_handler, NULL); while (in_loop) { /* Check for new messages from DLT daemon */ if (!dlt_user.disable_injection_msg) if (dlt_user_log_check_user_message() < DLT_RETURN_OK) /* Critical error */ dlt_log(LOG_CRIT, "Housekeeper thread encountered error condition\n"); /* Reattach to daemon if neccesary */ dlt_user_log_reattach_to_daemon(); /* flush buffer to DLT daemon if possible */ if (dlt_user.dlt_log_handle != DLT_FD_INIT) dlt_user_log_resend_buffer(); #ifdef __ANDROID_API__ if (sigpending(&pset)) { dlt_vlog(LOG_ERR, "sigpending failed with error [%s]!\n", strerror(errno)); break; } if (sigismember(&pset, SIGUSR1)) { dlt_log(LOG_NOTICE, "Received SIGUSR1! Stop thread\n"); break; } #endif /* delay */ ts.tv_sec = 0; ts.tv_nsec = DLT_USER_RECEIVE_NDELAY; nanosleep(&ts, NULL); } pthread_cleanup_pop(1); } /* Private functions of user library */ DltReturnValue dlt_user_log_init(DltContext *handle, DltContextData *log) { int ret = DLT_RETURN_OK; if ((handle == NULL) || (log == NULL)) return DLT_RETURN_WRONG_PARAMETER; if (!dlt_user_initialised) { ret = dlt_init(); if (ret < DLT_RETURN_OK) { if (ret != DLT_RETURN_LOGGING_DISABLED) dlt_vlog(LOG_ERR, "%s Failed to initialise dlt", __FUNCTION__); return ret; } } log->handle = handle; log->buffer = NULL; return ret; } DltReturnValue dlt_user_log_send_log(DltContextData *log, int mtype) { DltMessage msg; DltUserHeader userheader; int32_t len; DltReturnValue ret = DLT_RETURN_OK; if (!dlt_user_initialised) { dlt_vlog(LOG_ERR, "%s dlt_user_initialised false\n", __FUNCTION__); return DLT_RETURN_ERROR; } if ((log == NULL) || (log->handle == NULL) || (log->handle->contextID[0] == '\0') || (mtype < DLT_TYPE_LOG) || (mtype > DLT_TYPE_CONTROL) ) return DLT_RETURN_WRONG_PARAMETER; /* also for Trace messages */ if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_LOG) < DLT_RETURN_OK) return DLT_RETURN_ERROR; if (dlt_message_init(&msg, 0) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; msg.storageheader = (DltStorageHeader *)msg.headerbuffer; if (dlt_set_storageheader(msg.storageheader, dlt_user.ecuID) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; msg.standardheader = (DltStandardHeader *)(msg.headerbuffer + sizeof(DltStorageHeader)); msg.standardheader->htyp = DLT_HTYP_PROTOCOL_VERSION1; /* send ecu id */ if (dlt_user.with_ecu_id) msg.standardheader->htyp |= DLT_HTYP_WEID; /* send timestamp */ if (dlt_user.with_timestamp) msg.standardheader->htyp |= DLT_HTYP_WTMS; /* send session id */ if (dlt_user.with_session_id) { msg.standardheader->htyp |= DLT_HTYP_WSID; msg.headerextra.seid = (uint32_t) getpid(); } if (dlt_user.verbose_mode) /* In verbose mode, send extended header */ msg.standardheader->htyp = (msg.standardheader->htyp | DLT_HTYP_UEH); else /* In non-verbose, send extended header if desired */ if (dlt_user.use_extended_header_for_non_verbose) msg.standardheader->htyp = (msg.standardheader->htyp | DLT_HTYP_UEH); #if (BYTE_ORDER == BIG_ENDIAN) msg.standardheader->htyp = (msg.standardheader->htyp | DLT_HTYP_MSBF); #endif msg.standardheader->mcnt = log->handle->mcnt++; /* Set header extra parameters */ dlt_set_id(msg.headerextra.ecu, dlt_user.ecuID); /*msg.headerextra.seid = 0; */ if (log->use_timestamp == DLT_AUTO_TIMESTAMP) { msg.headerextra.tmsp = dlt_uptime(); } else { msg.headerextra.tmsp = log->user_timestamp; } if (dlt_message_set_extraparameters(&msg, 0) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; /* Fill out extended header, if extended header should be provided */ if (DLT_IS_HTYP_UEH(msg.standardheader->htyp)) { /* with extended header */ msg.extendedheader = (DltExtendedHeader *)(msg.headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg.standardheader->htyp)); switch (mtype) { case DLT_TYPE_LOG: { msg.extendedheader->msin = (uint8_t) (DLT_TYPE_LOG << DLT_MSIN_MSTP_SHIFT | ((log->log_level << DLT_MSIN_MTIN_SHIFT) & DLT_MSIN_MTIN)); break; } case DLT_TYPE_NW_TRACE: { msg.extendedheader->msin = (uint8_t) (DLT_TYPE_NW_TRACE << DLT_MSIN_MSTP_SHIFT | ((log->trace_status << DLT_MSIN_MTIN_SHIFT) & DLT_MSIN_MTIN)); break; } default: { /* This case should not occur */ return DLT_RETURN_ERROR; break; } } /* If in verbose mode, set flag in header for verbose mode */ if (dlt_user.verbose_mode) msg.extendedheader->msin |= DLT_MSIN_VERB; msg.extendedheader->noar = (uint8_t) log->args_num; /* number of arguments */ dlt_set_id(msg.extendedheader->apid, dlt_user.appID); /* application id */ dlt_set_id(msg.extendedheader->ctid, log->handle->contextID); /* context id */ msg.headersize = (uint32_t) (sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + sizeof(DltExtendedHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg.standardheader->htyp)); } else { /* without extended header */ msg.headersize = (uint32_t) (sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE( msg.standardheader->htyp)); } len = (int32_t) (msg.headersize - sizeof(DltStorageHeader) + log->size); if (len > UINT16_MAX) { dlt_log(LOG_WARNING, "Huge message discarded!\n"); return DLT_RETURN_ERROR; } msg.standardheader->len = DLT_HTOBE_16(len); /* print to std out, if enabled */ if ((dlt_user.local_print_mode != DLT_PM_FORCE_OFF) && (dlt_user.local_print_mode != DLT_PM_AUTOMATIC)) { if ((dlt_user.enable_local_print) || (dlt_user.local_print_mode == DLT_PM_FORCE_ON)) if (dlt_user_print_msg(&msg, log) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; } if (dlt_user.dlt_is_file) { /* log to file */ ret = dlt_user_log_out2(dlt_user.dlt_log_handle, msg.headerbuffer, msg.headersize, log->buffer, log->size); return ret; } else { if (dlt_user.overflow_counter) { if (dlt_user_log_send_overflow() == DLT_RETURN_OK) { dlt_vnlog(LOG_WARNING, DLT_USER_BUFFER_LENGTH, "%u messages discarded!\n", dlt_user.overflow_counter); dlt_user.overflow_counter = 0; } } /* try to resent old data first */ ret = DLT_RETURN_OK; if ((dlt_user.dlt_log_handle != -1) && (dlt_user.appID[0] != '\0')) ret = dlt_user_log_resend_buffer(); if ((ret == DLT_RETURN_OK) && (dlt_user.appID[0] != '\0')) { /* resend ok or nothing to resent */ #ifdef DLT_SHM_ENABLE if (dlt_user.dlt_log_handle != -1) dlt_shm_push(&dlt_user.dlt_shm, msg.headerbuffer + sizeof(DltStorageHeader), msg.headersize - sizeof(DltStorageHeader), log->buffer, log->size, 0, 0); ret = dlt_user_log_out3(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), 0, 0, 0, 0); #else # ifdef DLT_TEST_ENABLE if (dlt_user.corrupt_user_header) { userheader.pattern[0] = (char) 0xff; userheader.pattern[1] = (char) 0xff; userheader.pattern[2] = (char) 0xff; userheader.pattern[3] = (char) 0xff; } if (dlt_user.corrupt_message_size) msg.standardheader->len = DLT_HTOBE_16(dlt_user.corrupt_message_size_size); # endif ret = dlt_user_log_out3(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), msg.headerbuffer + sizeof(DltStorageHeader), msg.headersize - sizeof(DltStorageHeader), log->buffer, log->size); #endif } /* store message in ringbuffer, if an error has occured */ if ((ret != DLT_RETURN_OK) || (dlt_user.appID[0] == '\0')) ret = dlt_user_log_out_error_handling(&(userheader), sizeof(DltUserHeader), msg.headerbuffer + sizeof(DltStorageHeader), msg.headersize - sizeof(DltStorageHeader), log->buffer, log->size); switch (ret) { case DLT_RETURN_BUFFER_FULL: { /* Buffer full */ dlt_user.overflow_counter += 1; return DLT_RETURN_BUFFER_FULL; } case DLT_RETURN_PIPE_FULL: { /* data could not be written */ return DLT_RETURN_PIPE_FULL; } case DLT_RETURN_PIPE_ERROR: { /* handle not open or pipe error */ close(dlt_user.dlt_log_handle); dlt_user.dlt_log_handle = -1; #if defined DLT_LIB_USE_UNIX_SOCKET_IPC || defined DLT_LIB_USE_VSOCK_IPC dlt_user.connection_state = DLT_USER_RETRY_CONNECT; #endif #ifdef DLT_SHM_ENABLE /* free shared memory */ dlt_shm_free_client(&dlt_user.dlt_shm); #endif if (dlt_user.local_print_mode == DLT_PM_AUTOMATIC) dlt_user_print_msg(&msg, log); return DLT_RETURN_PIPE_ERROR; } case DLT_RETURN_ERROR: { /* other error condition */ return DLT_RETURN_ERROR; } case DLT_RETURN_OK: { return DLT_RETURN_OK; } default: { /* This case should never occur. */ return DLT_RETURN_ERROR; } } } return DLT_RETURN_OK; } DltReturnValue dlt_user_log_send_register_application(void) { DltUserHeader userheader; DltUserControlMsgRegisterApplication usercontext; DltReturnValue ret; if (dlt_user.appID[0] == '\0') return DLT_RETURN_ERROR; /* set userheader */ if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_REGISTER_APPLICATION) < DLT_RETURN_OK) return DLT_RETURN_ERROR; /* set usercontext */ dlt_set_id(usercontext.apid, dlt_user.appID); /* application id */ usercontext.pid = getpid(); if (dlt_user.application_description != NULL) usercontext.description_length = (uint32_t) strlen(dlt_user.application_description); else usercontext.description_length = 0; if (dlt_user.dlt_is_file) return DLT_RETURN_OK; ret = dlt_user_log_out3(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgRegisterApplication), dlt_user.application_description, usercontext.description_length); /* store message in ringbuffer, if an error has occured */ if (ret < DLT_RETURN_OK) return dlt_user_log_out_error_handling(&(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgRegisterApplication), dlt_user.application_description, usercontext.description_length); return DLT_RETURN_OK; } DltReturnValue dlt_user_log_send_unregister_application(void) { DltUserHeader userheader; DltUserControlMsgUnregisterApplication usercontext; DltReturnValue ret = DLT_RETURN_OK; if (dlt_user.appID[0] == '\0') return DLT_RETURN_ERROR; /* set userheader */ if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_UNREGISTER_APPLICATION) < DLT_RETURN_OK) return DLT_RETURN_ERROR; /* set usercontext */ dlt_set_id(usercontext.apid, dlt_user.appID); /* application id */ usercontext.pid = getpid(); if (dlt_user.dlt_is_file) return DLT_RETURN_OK; ret = dlt_user_log_out2(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgUnregisterApplication)); /* store message in ringbuffer, if an error has occured */ if (ret < DLT_RETURN_OK) return dlt_user_log_out_error_handling(&(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgUnregisterApplication), NULL, 0); return DLT_RETURN_OK; } DltReturnValue dlt_user_log_send_register_context(DltContextData *log) { DltUserHeader userheader; DltUserControlMsgRegisterContext usercontext; DltReturnValue ret = DLT_RETURN_ERROR; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (log->handle == NULL) return DLT_RETURN_ERROR; if (log->handle->contextID[0] == '\0') return DLT_RETURN_ERROR; /* set userheader */ if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_REGISTER_CONTEXT) < DLT_RETURN_OK) return DLT_RETURN_ERROR; /* set usercontext */ dlt_set_id(usercontext.apid, dlt_user.appID); /* application id */ dlt_set_id(usercontext.ctid, log->handle->contextID); /* context id */ usercontext.log_level_pos = log->handle->log_level_pos; usercontext.pid = getpid(); usercontext.log_level = (int8_t) log->log_level; usercontext.trace_status = (int8_t) log->trace_status; if (log->context_description != NULL) usercontext.description_length = (uint32_t) strlen(log->context_description); else usercontext.description_length = 0; if (dlt_user.dlt_is_file) return DLT_RETURN_OK; if (dlt_user.appID[0] != '\0') ret = dlt_user_log_out3(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgRegisterContext), log->context_description, usercontext.description_length); /* store message in ringbuffer, if an error has occured */ if ((ret != DLT_RETURN_OK) || (dlt_user.appID[0] == '\0')) return dlt_user_log_out_error_handling(&(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgRegisterContext), log->context_description, usercontext.description_length); return DLT_RETURN_OK; } DltReturnValue dlt_user_log_send_unregister_context(DltContextData *log) { DltUserHeader userheader; DltUserControlMsgUnregisterContext usercontext; DltReturnValue ret; if (log == NULL) return DLT_RETURN_WRONG_PARAMETER; if (log->handle == NULL) return DLT_RETURN_WRONG_PARAMETER; if (log->handle->contextID[0] == '\0') return DLT_RETURN_ERROR; /* set userheader */ if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_UNREGISTER_CONTEXT) < DLT_RETURN_OK) return DLT_RETURN_ERROR; /* set usercontext */ dlt_set_id(usercontext.apid, dlt_user.appID); /* application id */ dlt_set_id(usercontext.ctid, log->handle->contextID); /* context id */ usercontext.pid = getpid(); if (dlt_user.dlt_is_file) return DLT_RETURN_OK; ret = dlt_user_log_out2(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgUnregisterContext)); /* store message in ringbuffer, if an error has occured */ if (ret < DLT_RETURN_OK) return dlt_user_log_out_error_handling(&(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgUnregisterContext), NULL, 0); return DLT_RETURN_OK; } DltReturnValue dlt_send_app_ll_ts_limit(const char *apid, DltLogLevelType loglevel, DltTraceStatusType tracestatus) { DltUserHeader userheader; DltUserControlMsgAppLogLevelTraceStatus usercontext; DltReturnValue ret; if ((loglevel < DLT_USER_LOG_LEVEL_NOT_SET) || (loglevel >= DLT_LOG_MAX)) { dlt_vlog(LOG_ERR, "Loglevel %d is outside valid range", loglevel); return DLT_RETURN_ERROR; } if ((tracestatus < DLT_USER_TRACE_STATUS_NOT_SET) || (tracestatus >= DLT_TRACE_STATUS_MAX)) { dlt_vlog(LOG_ERR, "Tracestatus %d is outside valid range", tracestatus); return DLT_RETURN_ERROR; } if ((apid == NULL) || (apid[0] == '\0')) return DLT_RETURN_ERROR; /* set userheader */ if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_APP_LL_TS) < DLT_RETURN_OK) return DLT_RETURN_ERROR; /* set usercontext */ dlt_set_id(usercontext.apid, apid); /* application id */ usercontext.log_level = loglevel; usercontext.trace_status = tracestatus; if (dlt_user.dlt_is_file) return DLT_RETURN_OK; ret = dlt_user_log_out2(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgAppLogLevelTraceStatus)); /* store message in ringbuffer, if an error has occured */ if (ret < DLT_RETURN_OK) return dlt_user_log_out_error_handling(&(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgAppLogLevelTraceStatus), NULL, 0); return DLT_RETURN_OK; } DltReturnValue dlt_user_log_send_log_mode(DltUserLogMode mode) { DltUserHeader userheader; DltUserControlMsgLogMode logmode; DltReturnValue ret; if ((mode < DLT_USER_MODE_UNDEFINED) || (mode >= DLT_USER_MODE_MAX)) { dlt_vlog(LOG_ERR, "User log mode %d is outside valid range", mode); return DLT_RETURN_WRONG_PARAMETER; } /* set userheader */ if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_LOG_MODE) < DLT_RETURN_OK) return DLT_RETURN_ERROR; /* set data */ logmode.log_mode = (unsigned char)mode; if (dlt_user.dlt_is_file) return DLT_RETURN_OK; ret = dlt_user_log_out2(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), &(logmode), sizeof(DltUserControlMsgLogMode)); /* store message in ringbuffer, if an error has occured */ if (ret < DLT_RETURN_OK) return dlt_user_log_out_error_handling(&(userheader), sizeof(DltUserHeader), &(logmode), sizeof(DltUserControlMsgLogMode), NULL, 0); return DLT_RETURN_OK; } DltReturnValue dlt_user_log_send_marker() { DltUserHeader userheader; DltReturnValue ret; /* set userheader */ if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_MARKER) < DLT_RETURN_OK) return DLT_RETURN_ERROR; if (dlt_user.dlt_is_file) return DLT_RETURN_OK; /* log to FIFO */ ret = dlt_user_log_out2(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), 0, 0); /* store message in ringbuffer, if an error has occured */ if (ret < DLT_RETURN_OK) return dlt_user_log_out_error_handling(&(userheader), sizeof(DltUserHeader), NULL, 0, NULL, 0); return DLT_RETURN_OK; } DltReturnValue dlt_user_print_msg(DltMessage *msg, DltContextData *log) { uint8_t *databuffer_tmp; uint32_t datasize_tmp; uint32_t databuffersize_tmp; static char text[DLT_USER_TEXT_LENGTH]; if ((msg == NULL) || (log == NULL)) return DLT_RETURN_WRONG_PARAMETER; /* Save variables before print */ databuffer_tmp = msg->databuffer; datasize_tmp = msg->datasize; databuffersize_tmp = msg->databuffersize; /* Act like a receiver, convert header back to host format */ msg->standardheader->len = DLT_BETOH_16(msg->standardheader->len); dlt_message_get_extraparameters(msg, 0); msg->databuffer = log->buffer; msg->datasize = (uint32_t) log->size; msg->databuffersize = (uint32_t) log->size; /* Print message as ASCII */ if (dlt_message_print_ascii(msg, text, DLT_USER_TEXT_LENGTH, 0) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; /* Restore variables and set len to BE*/ msg->databuffer = databuffer_tmp; msg->databuffersize = databuffersize_tmp; msg->datasize = datasize_tmp; msg->standardheader->len = DLT_HTOBE_16(msg->standardheader->len); return DLT_RETURN_OK; } DltReturnValue dlt_user_log_check_user_message(void) { int offset = 0; int leave_while = 0; int ret = 0; uint32_t i; int fd; struct pollfd nfd[1]; DltUserHeader *userheader; DltReceiver *receiver = &(dlt_user.receiver); DltUserControlMsgLogLevel *usercontextll; DltUserControlMsgInjection *usercontextinj; DltUserControlMsgLogState *userlogstate; unsigned char *userbuffer; /* For delayed calling of injection callback, to avoid deadlock */ DltUserInjectionCallback delayed_injection_callback; DltUserLogLevelChangedCallback delayed_log_level_changed_callback; unsigned char *delayed_inject_buffer = 0; uint32_t delayed_inject_data_length = 0; /* Ensure that callback is null before searching for it */ delayed_injection_callback.injection_callback = 0; delayed_injection_callback.injection_callback_with_id = 0; delayed_injection_callback.service_id = 0; delayed_log_level_changed_callback.log_level_changed_callback = 0; delayed_injection_callback.data = 0; #if defined DLT_LIB_USE_UNIX_SOCKET_IPC || defined DLT_LIB_USE_VSOCK_IPC fd = dlt_user.dlt_log_handle; #else /* DLT_LIB_USE_FIFO_IPC */ fd = dlt_user.dlt_user_handle; #endif nfd[0].events = POLLIN; nfd[0].fd = fd; if (fd >= 0) { ret = poll(nfd, 1, DLT_USER_RECEIVE_MDELAY); if (ret) { if (nfd[0].revents & (POLLHUP | POLLNVAL | POLLERR)) { dlt_user.dlt_log_handle = DLT_FD_INIT; return DLT_RETURN_ERROR; } if (dlt_receiver_receive(receiver) <= 0) /* No new message available */ return DLT_RETURN_OK; /* look through buffer as long as data is in there */ while (1) { if (receiver->bytesRcvd < (int32_t) sizeof(DltUserHeader)) break; /* resync if necessary */ offset = 0; do { userheader = (DltUserHeader *)(receiver->buf + offset); /* Check for user header pattern */ if (dlt_user_check_userheader(userheader)) break; offset++; } while (((int32_t) (sizeof(DltUserHeader)) + offset) <= receiver->bytesRcvd); /* Check for user header pattern */ if ((dlt_user_check_userheader(userheader) < 0) || (dlt_user_check_userheader(userheader) == 0)) break; /* Set new start offset */ if (offset > 0) { receiver->buf += offset; receiver->bytesRcvd -= offset; } switch (userheader->message) { case DLT_USER_MESSAGE_LOG_LEVEL: { if (receiver->bytesRcvd < (int32_t) (sizeof(DltUserHeader) + sizeof(DltUserControlMsgLogLevel))) { leave_while = 1; break; } usercontextll = (DltUserControlMsgLogLevel *)(receiver->buf + sizeof(DltUserHeader)); /* Update log level and trace status */ if (usercontextll != NULL) { DLT_SEM_LOCK(); if ((usercontextll->log_level_pos >= 0) && (usercontextll->log_level_pos < (int32_t)dlt_user.dlt_ll_ts_num_entries)) { if (dlt_user.dlt_ll_ts) { dlt_user.dlt_ll_ts[usercontextll->log_level_pos].log_level = (int8_t) usercontextll->log_level; dlt_user.dlt_ll_ts[usercontextll->log_level_pos].trace_status = (int8_t) usercontextll->trace_status; if (dlt_user.dlt_ll_ts[usercontextll->log_level_pos].log_level_ptr) *(dlt_user.dlt_ll_ts[usercontextll->log_level_pos].log_level_ptr) = (int8_t) usercontextll->log_level; if (dlt_user.dlt_ll_ts[usercontextll->log_level_pos].trace_status_ptr) *(dlt_user.dlt_ll_ts[usercontextll->log_level_pos].trace_status_ptr) = (int8_t) usercontextll->trace_status; delayed_log_level_changed_callback.log_level_changed_callback = dlt_user.dlt_ll_ts[usercontextll->log_level_pos].log_level_changed_callback; memcpy(delayed_log_level_changed_callback.contextID, dlt_user.dlt_ll_ts[usercontextll->log_level_pos].contextID, DLT_ID_SIZE); delayed_log_level_changed_callback.log_level = (int8_t) usercontextll->log_level; delayed_log_level_changed_callback.trace_status = (int8_t) usercontextll->trace_status; } } DLT_SEM_FREE(); } /* call callback outside of semaphore */ if (delayed_log_level_changed_callback.log_level_changed_callback != 0) delayed_log_level_changed_callback.log_level_changed_callback( delayed_log_level_changed_callback.contextID, (uint8_t) delayed_log_level_changed_callback.log_level, (uint8_t) delayed_log_level_changed_callback.trace_status); /* keep not read data in buffer */ if (dlt_receiver_remove(receiver, sizeof(DltUserHeader) + sizeof(DltUserControlMsgLogLevel)) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; } break; case DLT_USER_MESSAGE_INJECTION: { /* At least, user header, user context, and service id and data_length of injected message is available */ if (receiver->bytesRcvd < (int32_t) (sizeof(DltUserHeader) + sizeof(DltUserControlMsgInjection))) { leave_while = 1; break; } usercontextinj = (DltUserControlMsgInjection *)(receiver->buf + sizeof(DltUserHeader)); userbuffer = (unsigned char *)(receiver->buf + sizeof(DltUserHeader) + sizeof(DltUserControlMsgInjection)); if (userbuffer != NULL) { if (receiver->bytesRcvd < (int32_t) (sizeof(DltUserHeader) + sizeof(DltUserControlMsgInjection) + usercontextinj->data_length_inject)) { leave_while = 1; break; } DLT_SEM_LOCK(); if ((usercontextinj->data_length_inject > 0) && (dlt_user.dlt_ll_ts)) /* Check if injection callback is registered for this context */ for (i = 0; i < dlt_user.dlt_ll_ts[usercontextinj->log_level_pos].nrcallbacks; i++) if ((dlt_user.dlt_ll_ts[usercontextinj->log_level_pos].injection_table) && (dlt_user.dlt_ll_ts[usercontextinj->log_level_pos].injection_table[i].service_id == usercontextinj->service_id)) { /* Prepare delayed injection callback call */ if (dlt_user.dlt_ll_ts[usercontextinj->log_level_pos].injection_table[i]. injection_callback != NULL) { delayed_injection_callback.injection_callback = dlt_user.dlt_ll_ts[usercontextinj->log_level_pos].injection_table[i]. injection_callback; } else if (dlt_user.dlt_ll_ts[usercontextinj->log_level_pos].injection_table[i]. injection_callback_with_id != NULL) { delayed_injection_callback.injection_callback_with_id = dlt_user.dlt_ll_ts[usercontextinj->log_level_pos].injection_table[i]. injection_callback_with_id; delayed_injection_callback.data = dlt_user.dlt_ll_ts[usercontextinj->log_level_pos].injection_table[i].data; } delayed_injection_callback.service_id = usercontextinj->service_id; delayed_inject_data_length = usercontextinj->data_length_inject; delayed_inject_buffer = malloc(delayed_inject_data_length); if (delayed_inject_buffer != NULL) { memcpy(delayed_inject_buffer, userbuffer, delayed_inject_data_length); } else { DLT_SEM_FREE(); dlt_log(LOG_WARNING, "malloc failed!\n"); return DLT_RETURN_ERROR; } break; } DLT_SEM_FREE(); /* Delayed injection callback call */ if ((delayed_inject_buffer != NULL) && (delayed_injection_callback.injection_callback != NULL)) { delayed_injection_callback.injection_callback(delayed_injection_callback.service_id, delayed_inject_buffer, delayed_inject_data_length); delayed_injection_callback.injection_callback = NULL; } else if ((delayed_inject_buffer != NULL) && (delayed_injection_callback.injection_callback_with_id != NULL)) { delayed_injection_callback.injection_callback_with_id(delayed_injection_callback.service_id, delayed_inject_buffer, delayed_inject_data_length, delayed_injection_callback.data); delayed_injection_callback.injection_callback_with_id = NULL; } free(delayed_inject_buffer); delayed_inject_buffer = NULL; /* keep not read data in buffer */ if (dlt_receiver_remove(receiver, (int) (sizeof(DltUserHeader) + sizeof(DltUserControlMsgInjection) + usercontextinj->data_length_inject)) != DLT_RETURN_OK) return DLT_RETURN_ERROR; } } break; case DLT_USER_MESSAGE_LOG_STATE: { /* At least, user header, user context, and service id and data_length of injected message is available */ if (receiver->bytesRcvd < (int32_t) (sizeof(DltUserHeader) + sizeof(DltUserControlMsgLogState))) { leave_while = 1; break; } userlogstate = (DltUserControlMsgLogState *)(receiver->buf + sizeof(DltUserHeader)); dlt_user.log_state = userlogstate->log_state; /* keep not read data in buffer */ if (dlt_receiver_remove(receiver, (sizeof(DltUserHeader) + sizeof(DltUserControlMsgLogState))) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; } break; default: { dlt_log(LOG_WARNING, "Invalid user message type received!\n"); /* Ignore result */ dlt_receiver_remove(receiver, sizeof(DltUserHeader)); /* In next invocation of while loop, a resync will be triggered if additional data was received */ } break; } /* switch() */ if (leave_while == 1) { leave_while = 0; break; } } /* while buffer*/ if (dlt_receiver_move_to_begin(receiver) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; } /* while receive */ } /* if */ return DLT_RETURN_OK; } DltReturnValue dlt_user_log_resend_buffer(void) { int num, count; int size; DltReturnValue ret; DLT_SEM_LOCK(); if (dlt_user.appID[0] == '\0') { DLT_SEM_FREE(); return 0; } /* Send content of ringbuffer */ count = dlt_buffer_get_message_count(&(dlt_user.startup_buffer)); DLT_SEM_FREE(); for (num = 0; num < count; num++) { DLT_SEM_LOCK(); size = dlt_buffer_copy(&(dlt_user.startup_buffer), dlt_user.resend_buffer, dlt_user.log_buf_len); if (size > 0) { DltUserHeader *userheader = (DltUserHeader *)(dlt_user.resend_buffer); /* Add application id to the messages of needed*/ if (dlt_user_check_userheader(userheader)) { switch (userheader->message) { case DLT_USER_MESSAGE_REGISTER_CONTEXT: { DltUserControlMsgRegisterContext *usercontext = (DltUserControlMsgRegisterContext *)(dlt_user.resend_buffer + sizeof(DltUserHeader)); if ((usercontext != 0) && (usercontext->apid[0] == '\0')) dlt_set_id(usercontext->apid, dlt_user.appID); break; } case DLT_USER_MESSAGE_LOG: { DltExtendedHeader *extendedHeader = (DltExtendedHeader *)(dlt_user.resend_buffer + sizeof(DltUserHeader) + sizeof(DltStandardHeader) + sizeof(DltStandardHeaderExtra)); if (((extendedHeader) != 0) && (extendedHeader->apid[0] == '\0')) /* if application id is empty, add it */ dlt_set_id(extendedHeader->apid, dlt_user.appID); break; } default: { break; } } } #ifdef DLT_SHM_ENABLE dlt_shm_push(&dlt_user.dlt_shm, dlt_user.resend_buffer + sizeof(DltUserHeader), size - sizeof(DltUserHeader), 0, 0, 0, 0); ret = dlt_user_log_out3(dlt_user.dlt_log_handle, dlt_user.resend_buffer, sizeof(DltUserHeader), 0, 0, 0, 0); #else ret = dlt_user_log_out3(dlt_user.dlt_log_handle, dlt_user.resend_buffer, (size_t) size, 0, 0, 0, 0); #endif /* in case of error, keep message in ringbuffer */ if (ret == DLT_RETURN_OK) { dlt_buffer_remove(&(dlt_user.startup_buffer)); } else { if (ret == DLT_RETURN_PIPE_ERROR) { /* handle not open or pipe error */ close(dlt_user.dlt_log_handle); dlt_user.dlt_log_handle = -1; } /* keep message in ringbuffer */ DLT_SEM_FREE(); return ret; } } DLT_SEM_FREE(); } return DLT_RETURN_OK; } void dlt_user_log_reattach_to_daemon(void) { uint32_t num; DltContext handle; DltContextData log_new; if (dlt_user.dlt_log_handle < 0) { dlt_user.dlt_log_handle = DLT_FD_INIT; #ifdef DLT_LIB_USE_UNIX_SOCKET_IPC /* try to open connection to dlt daemon */ dlt_initialize_socket_connection(); if (dlt_user.connection_state != DLT_USER_CONNECTED) /* return if not connected */ return; #elif defined DLT_LIB_USE_VSOCK_IPC dlt_initialize_vsock_connection(); if (dlt_user.connection_state != DLT_USER_CONNECTED) return; #else /* DLT_LIB_USE_FIFO_IPC */ /* try to open pipe to dlt daemon */ int fd = open(dlt_daemon_fifo, O_WRONLY | O_NONBLOCK); if (fd < 0) return; dlt_user.dlt_log_handle = fd; #endif if (dlt_user_log_init(&handle, &log_new) < DLT_RETURN_OK) return; #ifdef DLT_SHM_ENABLE /* init shared memory */ if (dlt_shm_init_client(&dlt_user.dlt_shm, dltShmName) < DLT_RETURN_OK) dlt_vnlog(LOG_WARNING, DLT_USER_BUFFER_LENGTH, "Logging disabled," " Shared memory %s cannot be created!\n", dltShmName); #endif dlt_log(LOG_NOTICE, "Logging (re-)enabled!\n"); /* Re-register application */ if (dlt_user_log_send_register_application() < DLT_RETURN_ERROR) return; DLT_SEM_LOCK(); /* Re-register all stored contexts */ for (num = 0; num < dlt_user.dlt_ll_ts_num_entries; num++) /* Re-register stored context */ if ((dlt_user.appID[0] != '\0') && (dlt_user.dlt_ll_ts) && (dlt_user.dlt_ll_ts[num].contextID[0] != '\0')) { /*dlt_set_id(log_new.appID, dlt_user.appID); */ dlt_set_id(handle.contextID, dlt_user.dlt_ll_ts[num].contextID); handle.log_level_pos = (int32_t) num; log_new.context_description = dlt_user.dlt_ll_ts[num].context_description; /* Release the mutex for sending context registration: */ /* function dlt_user_log_send_register_context() can take the mutex to write to the DLT buffer. => dead lock */ DLT_SEM_FREE(); log_new.log_level = DLT_USER_LOG_LEVEL_NOT_SET; log_new.trace_status = DLT_USER_TRACE_STATUS_NOT_SET; if (dlt_user_log_send_register_context(&log_new) < DLT_RETURN_ERROR) return; /* Lock again the mutex */ /* it is necessary in the for(;;) test, in order to have coherent dlt_user data all over the critical section. */ DLT_SEM_LOCK(); } DLT_SEM_FREE(); } } DltReturnValue dlt_user_log_send_overflow(void) { DltUserHeader userheader; DltUserControlMsgBufferOverflow userpayload; /* set userheader */ if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_OVERFLOW) < DLT_RETURN_OK) return DLT_RETURN_ERROR; if (dlt_user.dlt_is_file) return DLT_RETURN_OK; /* set user message parameters */ userpayload.overflow_counter = dlt_user.overflow_counter; dlt_set_id(userpayload.apid, dlt_user.appID); return dlt_user_log_out2(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), &(userpayload), sizeof(DltUserControlMsgBufferOverflow)); } DltReturnValue dlt_user_check_buffer(int *total_size, int *used_size) { if ((total_size == NULL) || (used_size == NULL)) return DLT_RETURN_WRONG_PARAMETER; DLT_SEM_LOCK(); #ifdef DLT_SHM_ENABLE *total_size = dlt_shm_get_total_size(&(dlt_user.dlt_shm)); *used_size = dlt_shm_get_used_size(&(dlt_user.dlt_shm)); #else *total_size = (int) dlt_buffer_get_total_size(&(dlt_user.startup_buffer)); *used_size = dlt_buffer_get_used_size(&(dlt_user.startup_buffer)); #endif DLT_SEM_FREE(); return DLT_RETURN_OK; /* ok */ } #ifdef DLT_TEST_ENABLE void dlt_user_test_corrupt_user_header(int enable) { dlt_user.corrupt_user_header = enable; } void dlt_user_test_corrupt_message_size(int enable, int16_t size) { dlt_user.corrupt_message_size = enable; dlt_user.corrupt_message_size_size = size; } #endif int dlt_start_threads() { /* Start housekeeper thread */ if (pthread_create(&(dlt_housekeeperthread_handle), 0, (void *)&dlt_user_housekeeperthread_function, 0) != 0) { dlt_log(LOG_CRIT, "Can't create housekeeper thread!\n"); return -1; } #ifdef DLT_NETWORK_TRACE_ENABLE /* Start the segmented thread */ if (pthread_create(&(dlt_user.dlt_segmented_nwt_handle), NULL, (void *)dlt_user_trace_network_segmented_thread, NULL)) { dlt_log(LOG_CRIT, "Can't start segmented thread!\n"); return -1; } #endif return 0; } void dlt_stop_threads() { int dlt_housekeeperthread_result = 0; int joined = 0; if (dlt_housekeeperthread_handle) { /* do not ignore return value */ #ifndef __ANDROID_API__ dlt_housekeeperthread_result = pthread_cancel(dlt_housekeeperthread_handle); #else #ifdef DLT_NETWORK_TRACE_ENABLE dlt_lock_mutex(&mq_mutex); #endif /* DLT_NETWORK_TRACE_ENABLE */ dlt_housekeeperthread_result = pthread_kill(dlt_housekeeperthread_handle, SIGUSR1); dlt_user_cleanup_handler(NULL); #endif if (dlt_housekeeperthread_result != 0) dlt_vlog(LOG_ERR, "ERROR %s(dlt_housekeeperthread_handle): %s\n", #ifndef __ANDROID_API__ "pthread_cancel", #else "pthread_kill", #endif strerror(dlt_housekeeperthread_result)); } #ifdef DLT_NETWORK_TRACE_ENABLE int dlt_segmented_nwt_result = 0; if (dlt_user.dlt_segmented_nwt_handle) { dlt_lock_mutex(&mq_mutex); pthread_cond_signal(&mq_init_condition); dlt_unlock_mutex(&mq_mutex); dlt_segmented_nwt_result = pthread_cancel(dlt_user.dlt_segmented_nwt_handle); if (dlt_segmented_nwt_result != 0) dlt_vlog(LOG_ERR, "ERROR pthread_cancel(dlt_user.dlt_segmented_nwt_handle): %s\n", strerror(dlt_segmented_nwt_result)); } #endif /* DLT_NETWORK_TRACE_ENABLE */ /* make sure that the threads really finished working */ if ((dlt_housekeeperthread_result == 0) && dlt_housekeeperthread_handle) { joined = pthread_join(dlt_housekeeperthread_handle, NULL); if (joined != 0) dlt_vlog(LOG_ERR, "ERROR pthread_join(dlt_housekeeperthread_handle, NULL): %s\n", strerror(joined)); dlt_housekeeperthread_handle = 0; /* set to invalid */ } #ifdef DLT_NETWORK_TRACE_ENABLE if ((dlt_segmented_nwt_result == 0) && dlt_user.dlt_segmented_nwt_handle) { joined = pthread_join(dlt_user.dlt_segmented_nwt_handle, NULL); if (joined != 0) dlt_vlog(LOG_ERR, "ERROR pthread_join(dlt_user.dlt_segmented_nwt_handle, NULL): %s\n", strerror(joined)); dlt_user.dlt_segmented_nwt_handle = 0; /* set to invalid */ } #endif /* DLT_NETWORK_TRACE_ENABLE */ } static void dlt_fork_child_fork_handler() { g_dlt_is_child = 1; dlt_user_initialised = false; dlt_user.dlt_log_handle = -1; } DltReturnValue dlt_user_log_out_error_handling(void *ptr1, size_t len1, void *ptr2, size_t len2, void *ptr3, size_t len3) { int ret = DLT_RETURN_ERROR; size_t msg_size = len1 + len2 + len3; DLT_SEM_LOCK(); ret = (int) dlt_buffer_check_size(&(dlt_user.startup_buffer), (int) msg_size); DLT_SEM_FREE(); DLT_SEM_LOCK(); if (dlt_buffer_push3(&(dlt_user.startup_buffer), ptr1, (unsigned char) len1, ptr2, (unsigned char) len2, ptr3, (unsigned char) len3) == DLT_RETURN_ERROR) { if (dlt_user.overflow_counter == 0) dlt_log(LOG_WARNING, "Buffer full! Messages will be discarded.\n"); ret = DLT_RETURN_BUFFER_FULL; } DLT_SEM_FREE(); return ret; } dlt-daemon-2.18.6/src/lib/dlt_user_cfg.h000066400000000000000000000163041377520261000200110ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_user_cfg.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_user_cfg.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ #ifndef DLT_USER_CFG_H #define DLT_USER_CFG_H /*************/ /* Changable */ /*************/ /* Size of receive buffer */ #define DLT_USER_RCVBUF_MAX_SIZE 10024 /* Size of ring buffer */ #define DLT_USER_RINGBUFFER_MIN_SIZE 50000 #define DLT_USER_RINGBUFFER_MAX_SIZE 500000 #define DLT_USER_RINGBUFFER_STEP_SIZE 50000 /* Name of environment variable for ringbuffer configuration */ #define DLT_USER_ENV_BUFFER_MIN_SIZE "DLT_USER_BUFFER_MIN" #define DLT_USER_ENV_BUFFER_MAX_SIZE "DLT_USER_BUFFER_MAX" #define DLT_USER_ENV_BUFFER_STEP_SIZE "DLT_USER_BUFFER_STEP" /* Temporary buffer length */ #define DLT_USER_BUFFER_LENGTH 255 /* Number of context entries, which will be allocated, * if no more context entries are available */ #define DLT_USER_CONTEXT_ALLOC_SIZE 500 /* Maximu length of a filename string */ #define DLT_USER_MAX_FILENAME_LENGTH 255 /* Maximum length of a single version number */ #define DLT_USER_MAX_LIB_VERSION_LENGTH 3 /* Length of buffer for constructing text output */ #define DLT_USER_TEXT_LENGTH 10024 /* Stack size of receiver thread */ #define DLT_USER_RECEIVERTHREAD_STACKSIZE 100000 /* default value for storage to file, not used in daemon connection */ #define DLT_USER_DEFAULT_ECU_ID "ECU1" /* Initial log level */ #define DLT_USER_INITIAL_LOG_LEVEL DLT_LOG_INFO /* Initial trace status */ #define DLT_USER_INITIAL_TRACE_STATUS DLT_TRACE_STATUS_OFF /* send always session id: 0 - don't use, 1 - use */ #define DLT_USER_WITH_SESSION_ID 1 /* send always timestamp: 0 - don't use, 1 - use */ #define DLT_USER_WITH_TIMESTAMP 1 /* send always ecu id: 0 - don't use, 1 - use */ #define DLT_USER_WITH_ECU_ID 1 /* default message id for non-verbose mode, if no message id was provided */ #define DLT_USER_DEFAULT_MSGID 0xffff /* timeout for poll operations in milliseconds*/ #define DLT_USER_RECEIVE_MDELAY (500) /* delay for housekeeper thread (nsec) while receiving messages*/ #define DLT_USER_RECEIVE_NDELAY (DLT_USER_RECEIVE_MDELAY * 1000 * 1000) /* Name of environment variable for local print mode */ #define DLT_USER_ENV_LOCAL_PRINT_MODE "DLT_LOCAL_PRINT_MODE" /* Timeout offset for resending user buffer at exit in 10th milliseconds (10000 = 1s)*/ #define DLT_USER_ATEXIT_RESEND_BUFFER_EXIT_TIMEOUT 100000 /* Sleeps between resending user buffer at exit in nsec (1000000 nsec = 1ms)*/ #define DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP 100000000 /* Name of environment variable to disable extended header in non verbose mode */ #define DLT_USER_ENV_DISABLE_EXTENDED_HEADER_FOR_NONVERBOSE "DLT_DISABLE_EXTENDED_HEADER_FOR_NONVERBOSE" typedef enum { DLT_USER_NO_USE_EXTENDED_HEADER_FOR_NONVERBOSE = 0, DLT_USER_USE_EXTENDED_HEADER_FOR_NONVERBOSE } DltExtHeaderNonVer; /* Retry interval for mq error in usec */ #define DLT_USER_MQ_ERROR_RETRY_INTERVAL 100000 /* Name of environment variable to change the dlt log message buffer size */ #define DLT_USER_ENV_LOG_MSG_BUF_LEN "DLT_LOG_MSG_BUF_LEN" /* Maximum msg size as per autosar standard */ #define DLT_LOG_MSG_BUF_MAX_SIZE 65535 /* Name of environment variable for disabling the injection message at libdlt */ #define DLT_USER_ENV_DISABLE_INJECTION_MSG "DLT_DISABLE_INJECTION_MSG_AT_USER" /************************/ /* Don't change please! */ /************************/ /* Minimum valid ID of an injection message */ #define DLT_USER_INJECTION_MIN 0xFFF /* Defines of the different local print modes */ #define DLT_PM_UNSET 0 #define DLT_PM_AUTOMATIC 1 #define DLT_PM_FORCE_ON 2 #define DLT_PM_FORCE_OFF 3 #endif /* DLT_USER_CFG_H */ dlt-daemon-2.18.6/src/offlinelogstorage/000077500000000000000000000000001377520261000201375ustar00rootroot00000000000000dlt-daemon-2.18.6/src/offlinelogstorage/dlt_offline_logstorage.c000066400000000000000000002146701377520261000250300ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT offline log storage functionality source file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Syed Hameed ADIT 2013 - 2015 * \author Christoph Lipka ADIT 2015 * * \file: dlt_offline_logstorage.c * For further information see http://www.genivi.org/. */ #include #include #include #include #include #include #include #include #include #include #include #include "dlt_offline_logstorage.h" #include "dlt_offline_logstorage_internal.h" #include "dlt_offline_logstorage_behavior.h" #include "dlt_config_file_parser.h" #define DLT_OFFLINE_LOGSTORAGE_FILTER_ERROR 1 #define DLT_OFFLINE_LOGSTORAGE_STORE_FILTER_ERROR 2 #define DLT_OFFLINE_LOGSTORAGE_FILTER_CONTINUE 3 #define GENERAL_BASE_NAME "General" DLT_STATIC void dlt_logstorage_filter_config_free(DltLogStorageFilterConfig *data) { DltLogStorageFileList *n = NULL; DltLogStorageFileList *n1 = NULL; if (data->apids) { free(data->apids); data->apids = NULL; } if (data->ctids) { free(data->ctids); data->ctids = NULL; } if (data->file_name) { free(data->file_name); data->file_name = NULL; } if (data->working_file_name) { free(data->working_file_name); data->working_file_name = NULL; } if (data->ecuid != NULL) { free(data->ecuid); data->ecuid = NULL; } if (data->log != NULL) fclose(data->log); if (data->cache != NULL) { free(data->cache); data->cache = NULL; } n = data->records; while (n) { n1 = n; n = n->next; if (n1->name) { free(n1->name); n1->name = NULL; } free(n1); n1 = NULL; } } /** * dlt_logstorage_list_destroy * * Destroy Filter configurations list. * * @param list List of the filter configurations will be destroyed. * @param uconfig User configurations for log file * @param dev_path Path to the device * @param reason Reason for the destroying of Filter configurations list * @return 0 on success, -1 on error */ DLT_STATIC int dlt_logstorage_list_destroy(DltLogStorageFilterList **list, DltLogStorageUserConfig *uconfig, char *dev_path, int reason) { DltLogStorageFilterList *tmp = NULL; while (*(list) != NULL) { tmp = *list; *list = (*list)->next; if (tmp->key_list != NULL) { free(tmp->key_list); tmp->key_list = NULL; } if (tmp->data != NULL) { /* sync data if necessary */ /* ignore return value */ tmp->data->dlt_logstorage_sync(tmp->data, uconfig, dev_path, reason); dlt_logstorage_filter_config_free(tmp->data); free(tmp->data); tmp->data = NULL; } free(tmp); tmp = NULL; } return 0; } DLT_STATIC int dlt_logstorage_list_add_config(DltLogStorageFilterConfig *data, DltLogStorageFilterConfig **listdata) { if (*(listdata) == NULL) return -1; /* copy the data to list */ memcpy(*listdata, data, sizeof(DltLogStorageFilterConfig)); if (data->apids != NULL) (*listdata)->apids = strdup(data->apids); if (data->ctids != NULL) (*listdata)->ctids = strdup(data->ctids); if (data->file_name != NULL) (*listdata)->file_name = strdup(data->file_name); if (data->ecuid != NULL) (*listdata)->ecuid = strdup(data->ecuid); return 0; } /** * dlt_logstorage_list_add * * Add Filter configurations to the list. * * @param keys Keys will be added to the list. * @param num_keys Number of keys * @param data Filter configurations data will be added to the list. * @param list List of the filter configurations * @return 0 on success, -1 on error */ DLT_STATIC int dlt_logstorage_list_add(char *keys, int num_keys, DltLogStorageFilterConfig *data, DltLogStorageFilterList **list) { DltLogStorageFilterList *tmp = NULL; while (*(list) != NULL) { list = &(*list)->next; } tmp = calloc(1, sizeof(DltLogStorageFilterList)); if (tmp == NULL) return -1; tmp->key_list = (char *)calloc( (size_t) (num_keys * DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN), sizeof(char)); if (tmp->key_list == NULL) { free(tmp); tmp = NULL; return -1; } memcpy(tmp->key_list, keys, (size_t) (num_keys * DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN)); tmp->num_keys = num_keys; tmp->next = NULL; tmp->data = calloc(1, sizeof(DltLogStorageFilterConfig)); if (tmp->data == NULL) { free(tmp->key_list); tmp->key_list = NULL; free(tmp); tmp = NULL; return -1; } if (dlt_logstorage_list_add_config(data, &(tmp->data)) != 0) { free(tmp->key_list); tmp->key_list = NULL; free(tmp->data); tmp->data = NULL; free(tmp); tmp = NULL; return -1; } *list = tmp; return 0; } /** * dlt_logstorage_list_find * * Find all Filter configurations corresponding with key provided. * * @param key Key to find the filter configurations * @param list List of the filter configurations * @param config Filter configurations corresponding with the key. * @return Number of the filter configuration found. */ DLT_STATIC int dlt_logstorage_list_find(char *key, DltLogStorageFilterList **list, DltLogStorageFilterConfig **config) { int i = 0; int num = 0; while (*(list) != NULL) { for (i = 0; i < (*list)->num_keys; i++) { if (strncmp(((*list)->key_list + (i * DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN)), key, DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN) == 0) { config[num] = (*list)->data; num++; break; } } list = &(*list)->next; } return num; } /* Configuration file parsing helper functions */ DLT_STATIC int dlt_logstorage_count_ids(const char *str) { if (str == NULL) return -1; /* delimiter is: "," */ const char *p = str; int i = 0; int num = 1; while (p[i] != 0) { if (p[i] == ',') num++; i++; } return num; } /** * dlt_logstorage_free * * Free all allocated memory used in log storage handle * * @param handle DLT Logstorage handle * @param reason Reason for freeing the device * */ void dlt_logstorage_free(DltLogStorage *handle, int reason) { if (handle == NULL) { dlt_vlog(LOG_ERR, "%s failed: handle is NULL\n", __func__); return; } dlt_logstorage_list_destroy(&(handle->config_list), &handle->uconfig, handle->device_mount_point, reason); } /** * dlt_logstorage_read_list_of_names * * Evaluate app and ctx names given in config file and create a list of names * acceptable by DLT Daemon. When using SET_APPLICATION_NAME and SET_CONTEXT_NAME * there is no constraint that these names have max 4 characters. Internally, * these names are cutted down to max 4 chars. To have create valid keys, the * internal representation of these names has to be considered. * Therefore, a given configuration of "AppLogName = App1,Application2,A3" will * be stored as "App1,Appl,A3". * * @param names to store the list of names * @param value string given in config file * @return 0 on success, -1 on error */ DLT_STATIC int dlt_logstorage_read_list_of_names(char **names, char *value) { int i = 0; size_t y = 0; size_t len = 0; char *tok; int num = 1; if ((names == NULL) || (value == NULL)) return -1; /* free, alloce'd memory to store new apid/ctid */ if (*names != NULL) { free(*names); *names = NULL; } len = strlen(value); if (len == 0) return -1; /* count number of delimiters to get actual number off names */ num = dlt_logstorage_count_ids(value); /* need to alloc space for 5 chars, 4 for the name and "," and "\0" */ *names = (char *)calloc((size_t) (num * 5), sizeof(char)); if (*names == NULL) return -1; tok = strtok(value, ","); i = 1; while (tok != NULL) { len = strlen(tok); len = DLT_OFFLINE_LOGSTORAGE_MIN(len, 4); strncpy((*names + y), tok, len); if ((num > 1) && (i < num)) strncpy((*names + y + len), ",", 2); y += len + 1; i++; tok = strtok(NULL, ","); } return 0; } /** * dlt_logstorage_read_number * * Evaluate file size and number of files given in config file and set file size * The file number is checked by converting a string to an unsigned integer * width 0 > result < UINT_MAX (excludes 0!) * Non-digit characters including spaces and out of boundary will lead to an * error -1. * * @param number Number to be read * @param value string given in config file * @return 0 on success, -1 on error */ DLT_STATIC int dlt_logstorage_read_number(unsigned int *number, char *value) { int i = 0; int len = 0; unsigned long size = 0; if (value == NULL) return -1; *number = 0; len = (int) strlen(value); /* check if string consists of digits only */ for (i = 0; i < len; i++) if (!isdigit(value[i])) { dlt_log(LOG_ERR, "Invalid, is not a number \n"); return -1; } size = strtoul(value, NULL, 10); if ((size == 0) || (size > UINT_MAX)) { dlt_log(LOG_ERR, "Invalid, is not a number \n"); return -1; } *number = (unsigned int)size; return 0; } /** * dlt_logstorage_get_keys_list * * Obtain key list and number of keys for id list passed * after splitting it between seperator (,) * * @param ids ID's * @param sep Seperator * @param list Prepared key list is stored here * @param numids Number of keys in the list is stored here * @return: 0 on success, error on failure* */ DLT_STATIC int dlt_logstorage_get_keys_list(char *ids, char *sep, char **list, int *numids) { char *token = NULL; char *tmp_token = NULL; char *ids_local = NULL; *numids = 0; /* Duplicate the ids passed for using in strtok_r() */ ids_local = strdup(ids); if (ids_local == NULL) return -1; token = strtok_r(ids_local, sep, &tmp_token); if (token == NULL) { free(ids_local); return -1; } *list = (char *)calloc(DLT_OFFLINE_LOGSTORAGE_MAXIDS * (DLT_ID_SIZE + 1), sizeof(char)); if (*(list) == NULL) { free(ids_local); return -1; } while (token != NULL) { /* If it reached the max then other ids are ignored */ if (*numids >= DLT_OFFLINE_LOGSTORAGE_MAXIDS) { free(ids_local); return 0; } strncpy(((*list) + ((*numids) * (DLT_ID_SIZE + 1))), token, DLT_ID_SIZE); *numids = *numids + 1; token = strtok_r(NULL, sep, &tmp_token); } free(ids_local); return 0; } /** * dlt_logstorage_create_keys_only_ctid * * Prepares keys with context ID alone, will use ecuid if provided * (ecuid\:\:ctid) or (\:\:ctid) * * @param ecuid ECU ID * @param ctid Context ID * @param key Prepared key stored here * @return None */ DLT_STATIC void dlt_logstorage_create_keys_only_ctid(char *ecuid, char *ctid, char *key) { char curr_str[DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN + 1] = { 0 }; size_t curr_len = 0; if (ecuid != NULL) { strncpy(curr_str, ecuid, strlen(ecuid)); strncat(curr_str, "::", 2); } else { strncpy(curr_str, "::", 2); } curr_len = strlen(ctid); strncat(curr_str, ctid, curr_len); curr_len = strlen(curr_str); strncpy(key, curr_str, curr_len); } /** * dlt_logstorage_create_keys_only_apid * * Prepares keys with application ID alone, will use ecuid if provided * (ecuid:apid::) or (:apid::) * * @param ecuid ECU ID * @param apid Application ID * @param key Prepared key stored here * @return None */ DLT_STATIC void dlt_logstorage_create_keys_only_apid(char *ecuid, char *apid, char *key) { char curr_str[DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN + 1] = { 0 }; size_t curr_len = 0; if (ecuid != NULL) { strncpy(curr_str, ecuid, strlen(ecuid)); strncat(curr_str, ":", 1); } else { strncpy(curr_str, ":", 1); } curr_len = strlen(apid); strncat(curr_str, apid, curr_len); strncat(curr_str, ":", 1); curr_len = strlen(curr_str); strncpy(key, curr_str, curr_len); } /** * dlt_logstorage_create_keys_multi * * Prepares keys with apid, ctid (ecuid:apid:ctid), will use ecuid if is provided * (ecuid:apid:ctid) or (:apid:ctid) * * @param ecuid ECU ID * @param apid Application ID * @param ctid Context ID * @param key Prepared key stored here * @return None */ DLT_STATIC void dlt_logstorage_create_keys_multi(char *ecuid, char *apid, char *ctid, char *key) { char curr_str[DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN + 1] = { 0 }; size_t curr_len = 0; if (ecuid != NULL) { strncpy(curr_str, ecuid, strlen(ecuid)); strncat(curr_str, ":", 1); } else { strncpy(curr_str, ":", 1); } curr_len = strlen(apid); strncat(curr_str, apid, curr_len); strncat(curr_str, ":", 1); curr_len = strlen(ctid); strncat(curr_str, ctid, curr_len); curr_len = strlen(curr_str); strncpy(key, curr_str, curr_len); } /** * dlt_logstorage_create_keys_only_ecu * * Prepares keys with only ecuid (ecuid::) * * @param ecuid ECU ID * @param key Prepared key stored here * @return None */ DLT_STATIC void dlt_logstorage_create_keys_only_ecu(char *ecuid, char *key) { char curr_str[DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN + 1] = { 0 }; strncpy(curr_str, ecuid, strlen(ecuid)); strncat(curr_str, "::", 2); strncpy(key, curr_str, strlen(curr_str)); } /** * dlt_logstorage_create_keys * * Create keys for hash table * * From each section [filter] in offline logstorage configuration file, we * receive application and context id strings. * Application and context id can consist of * - a 4char long name * - a comma separated list of ids * - a wildcard: .* * * If both application and context id are set to wildcard, this will be treated * in the same way of the case application and context id are not present: * - EcuID must be specified * * If lists given for application and/or context id, all possible combinations * are returned as keys in a form "[apid][ctid], e.g. "APP1\:CTX1". * If wildcards are used, the non-wildcard value becomes the key, e.g. "APP1\:" * or "\:CTX2". * * @param[in] apids string given from filter configuration * @param[in] ctids string given from filter configuration * @param[in] ecuid string given from filter configuration * @param[out] keys keys to fill into hash table * @param[out] num_keys number of keys * @return: 0 on success, error on failure* */ DLT_STATIC int dlt_logstorage_create_keys(char *apids, char *ctids, char *ecuid, char **keys, int *num_keys) { int i, j; int num_apids = 0; int num_ctids = 0; char *apid_list = NULL; char *ctid_list = NULL; char *curr_apid = NULL; char *curr_ctid = NULL; char curr_key[DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN + 1] = { 0 }; int num_currkey = 0; /* Handle ecuid alone case here */ if (((apids == NULL) && (ctids == NULL) && (ecuid != NULL)) || ((apids != NULL) && (strncmp(apids, ".*", 2) == 0) && (ctids != NULL) && (strncmp(ctids, ".*", 2) == 0) && (ecuid != NULL)) ) { dlt_logstorage_create_keys_only_ecu(ecuid, curr_key); *(num_keys) = 1; *(keys) = (char *)calloc((size_t) (*num_keys * DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN), sizeof(char)); if (*(keys) == NULL) return -1; strncpy(*keys, curr_key, strlen(curr_key)); return 0; } if ((apids == NULL) || (ctids == NULL)) { dlt_log(LOG_ERR, "Required inputs (apid and ctid) are NULL\n"); return -1; } /* obtain key list and number of keys for application ids */ if (dlt_logstorage_get_keys_list(apids, ",", &apid_list, &num_apids) != 0) { dlt_log(LOG_ERR, "Failed to obtain apid, check configuration file \n"); return -1; } /* obtain key list and number of keys for context ids */ if (dlt_logstorage_get_keys_list(ctids, ",", &ctid_list, &num_ctids) != 0) { dlt_log(LOG_ERR, "Failed to obtain ctid, check configuration file \n"); free(apid_list); return -1; } *(num_keys) = num_apids * num_ctids; /* allocate memory for needed number of keys */ *(keys) = (char *)calloc((size_t) (*num_keys * DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN), sizeof(char)); if (*(keys) == NULL) { free(apid_list); free(ctid_list); return -1; } /* store all combinations of apid ctid in keys */ for (i = 0; i < num_apids; i++) { curr_apid = apid_list + (i * (DLT_ID_SIZE + 1)); for (j = 0; j < num_ctids; j++) { curr_ctid = ctid_list + (j * (DLT_ID_SIZE + 1)); if (strncmp(curr_apid, ".*", 2) == 0) /* only context id matters */ dlt_logstorage_create_keys_only_ctid(ecuid, curr_ctid, curr_key); else if (strncmp(curr_ctid, ".*", 2) == 0) /* only app id matters*/ dlt_logstorage_create_keys_only_apid(ecuid, curr_apid, curr_key); else /* key is combination of all */ dlt_logstorage_create_keys_multi(ecuid, curr_apid, curr_ctid, curr_key); strncpy((*keys + (num_currkey * DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN)), curr_key, strlen(curr_key)); num_currkey += 1; memset(&curr_key[0], 0, sizeof(curr_key)); } } free(apid_list); free(ctid_list); return 0; } /** * dlt_logstorage_prepare_table * * Prepares hash table with keys and data * * @param handle DLT Logstorage handle * @param data Holds all other configuration values * @return 0 on success, -1 on error */ DLT_STATIC int dlt_logstorage_prepare_table(DltLogStorage *handle, DltLogStorageFilterConfig *data) { int ret = 0; int num_keys = 0; int found = 0; char *keys = NULL; DltNewestFileName *tmp = NULL; DltNewestFileName *prev_tmp = NULL; DltNewestFileName *new_tmp = NULL; if ((handle == NULL) || (data == NULL)) { dlt_vlog(LOG_ERR, "Invalid parameters in %s\n", __func__); return -1; } ret = dlt_logstorage_create_keys(data->apids, data->ctids, data->ecuid, &keys, &num_keys); if (ret != 0) { dlt_log(LOG_ERR, "Not able to create keys for hash table\n"); return -1; } /* hash_add */ if (dlt_logstorage_list_add(keys, num_keys, data, &(handle->config_list)) != 0) { dlt_log(LOG_ERR, "Adding to hash table failed, returning failure\n"); dlt_logstorage_free(handle, DLT_LOGSTORAGE_SYNC_ON_ERROR); free(keys); keys = NULL; return -1; } if (data->file_name) { if (handle->newest_file_list != NULL) { tmp = handle->newest_file_list; while (tmp) { if (strcmp(tmp->file_name, data->file_name) == 0) { found = 1; break; } else { prev_tmp = tmp; tmp = tmp->next; } } } if (!found) { new_tmp = calloc(1, sizeof(DltNewestFileName)); if (new_tmp == NULL) { /* In this case, the existing list does not need to be freed.*/ dlt_vlog(LOG_ERR, "Failed to allocate memory for new file name [%s]\n", data->file_name); free(keys); keys = NULL; return -1; } new_tmp->file_name = strdup(data->file_name); new_tmp->newest_file = NULL; new_tmp->next = NULL; if (handle->newest_file_list == NULL) handle->newest_file_list = new_tmp; else prev_tmp->next = new_tmp; } } free(keys); keys = NULL; return 0; } /** * dlt_logstorage_validate_filter_name * * Validates if the provided filter name is as required [FILTER] * * @param name Filter name * @return 0 on success, -1 on error * */ DLT_STATIC int dlt_logstorage_validate_filter_name(char *name) { int len = 0; int idx = 0; size_t config_sec_len = strlen(DLT_OFFLINE_LOGSTORAGE_CONFIG_SECTION); size_t storage_sec_len = strlen(DLT_OFFLINE_LOGSTORAGE_NONVERBOSE_STORAGE_SECTION); size_t control_sec_len = strlen(DLT_OFFLINE_LOGSTORAGE_NONVERBOSE_CONTROL_SECTION); if (name == NULL) return -1; len = (int) strlen(name); /* Check if section header is of format "FILTER" followed by a number */ if (strncmp(name, DLT_OFFLINE_LOGSTORAGE_CONFIG_SECTION, config_sec_len) == 0) { for (idx = (int) config_sec_len; idx < len - 1; idx++) if (!isdigit(name[idx])) return -1; return 0; } /* Check if section header is of format "FILTER" followed by a number */ else if (strncmp(name, DLT_OFFLINE_LOGSTORAGE_NONVERBOSE_STORAGE_SECTION, storage_sec_len) == 0) { for (idx = (int) storage_sec_len; idx < len - 1; idx++) if (!isdigit(name[idx])) return -1; return 0; } /* Check if section header is of format "FILTER" followed by a number */ else if (strncmp(name, DLT_OFFLINE_LOGSTORAGE_NONVERBOSE_CONTROL_SECTION, control_sec_len) == 0) { for (idx = (int) control_sec_len; idx < len - 1; idx++) if (!isdigit(name[idx])) return -1; return 0; } else { return -1; } } DLT_STATIC void dlt_logstorage_filter_set_strategy(DltLogStorageFilterConfig *config, int strategy) { if (config == NULL) return; /* file based */ if ((strategy == DLT_LOGSTORAGE_SYNC_ON_MSG) || (strategy == DLT_LOGSTORAGE_SYNC_UNSET)) { config->dlt_logstorage_prepare = &dlt_logstorage_prepare_on_msg; config->dlt_logstorage_write = &dlt_logstorage_write_on_msg; config->dlt_logstorage_sync = &dlt_logstorage_sync_on_msg; } else { /* cache based */ config->dlt_logstorage_prepare = &dlt_logstorage_prepare_msg_cache; config->dlt_logstorage_write = &dlt_logstorage_write_msg_cache; config->dlt_logstorage_sync = &dlt_logstorage_sync_msg_cache; } } DLT_STATIC int dlt_logstorage_check_apids(DltLogStorageFilterConfig *config, char *value) { if ((config == NULL) || (value == NULL)) { dlt_log(LOG_ERR, "Not able to create keys for hash table\n"); return -1; } return dlt_logstorage_read_list_of_names(&config->apids, value); } DLT_STATIC int dlt_logstorage_check_ctids(DltLogStorageFilterConfig *config, char *value) { if ((config == NULL) || (value == NULL)) return -1; return dlt_logstorage_read_list_of_names(&config->ctids, value); } DLT_STATIC int dlt_logstorage_check_loglevel(DltLogStorageFilterConfig *config, char *value) { if ((config == NULL) || (value == NULL)) return -1; if (value == NULL) { config->log_level = 0; return -1; } if (strcmp(value, "DLT_LOG_FATAL") == 0) { config->log_level = 1; } else if (strcmp(value, "DLT_LOG_ERROR") == 0) { config->log_level = 2; } else if (strcmp(value, "DLT_LOG_WARN") == 0) { config->log_level = 3; } else if (strcmp(value, "DLT_LOG_INFO") == 0) { config->log_level = 4; } else if (strcmp(value, "DLT_LOG_DEBUG") == 0) { config->log_level = 5; } else if (strcmp(value, "DLT_LOG_VERBOSE") == 0) { config->log_level = 6; } else { config->log_level = -1; dlt_log(LOG_ERR, "Invalid log level \n"); return -1; } return 0; } DLT_STATIC int dlt_logstorage_check_reset_loglevel(DltLogStorageFilterConfig *config, char *value) { if (config == NULL) return -1; if (value == NULL) { config->reset_log_level = 0; return -1; } if (strcmp(value, "DLT_LOG_OFF") == 0) { config->reset_log_level = DLT_LOG_OFF; } else if (strcmp(value, "DLT_LOG_FATAL") == 0) { config->reset_log_level = DLT_LOG_FATAL; } else if (strcmp(value, "DLT_LOG_ERROR") == 0) { config->reset_log_level = DLT_LOG_ERROR; } else if (strcmp(value, "DLT_LOG_WARN") == 0) { config->reset_log_level = DLT_LOG_WARN; } else if (strcmp(value, "DLT_LOG_INFO") == 0) { config->reset_log_level = DLT_LOG_INFO; } else if (strcmp(value, "DLT_LOG_DEBUG") == 0) { config->reset_log_level = DLT_LOG_DEBUG; } else if (strcmp(value, "DLT_LOG_VERBOSE") == 0) { config->reset_log_level = DLT_LOG_VERBOSE; } else { config->reset_log_level = -1; dlt_log(LOG_ERR, "Invalid log level \n"); return -1; } return 0; } DLT_STATIC int dlt_logstorage_check_filename(DltLogStorageFilterConfig *config, char *value) { size_t len; if ((value == NULL) || (strcmp(value, "") == 0)) return -1; if (config->file_name != NULL) { free(config->file_name); config->file_name = NULL; } len = strlen(value); /* do not allow the user to change directory by adding a relative path */ if (strstr(value, "..") == NULL) { config->file_name = calloc(len + 1, sizeof(char)); if (config->file_name == NULL) { dlt_log(LOG_ERR, "Cannot allocate memory for filename\n"); return -1; } strncpy(config->file_name, value, len); } else { dlt_log(LOG_ERR, "Invalid filename, paths not accepted due to security issues\n"); return -1; } return 0; } DLT_STATIC int dlt_logstorage_check_filesize(DltLogStorageFilterConfig *config, char *value) { if ((config == NULL) || (value == NULL)) return -1; return dlt_logstorage_read_number(&config->file_size, value); } DLT_STATIC int dlt_logstorage_check_nofiles(DltLogStorageFilterConfig *config, char *value) { if ((config == NULL) || (value == NULL)) return -1; return dlt_logstorage_read_number(&config->num_files, value); } DLT_STATIC int dlt_logstorage_check_specificsize(DltLogStorageFilterConfig *config, char *value) { if ((config == NULL) || (value == NULL)) return -1; return dlt_logstorage_read_number(&config->specific_size, value); } /** * dlt_logstorage_check_sync_strategy * * Evaluate sync strategy. The sync strategy is an optional filter * configuration parameter. * If the given value cannot be associated with a sync strategy, the default * sync strategy will be assigned. * * @param config DltLogStorageFilterConfig * @param value string given in config file * @return 0 on success, -1 on error */ DLT_STATIC int dlt_logstorage_check_sync_strategy(DltLogStorageFilterConfig *config, char *value) { if ((config == NULL) || (value == NULL)) return -1; if (strcasestr(value, "ON_MSG") != NULL) { config->sync = DLT_LOGSTORAGE_SYNC_ON_MSG; dlt_log(LOG_DEBUG, "ON_MSG found, ignore other if added\n"); } else { /* ON_MSG not set, combination of cache based strategies possible */ if (strcasestr(value, "ON_DAEMON_EXIT") != NULL) config->sync |= DLT_LOGSTORAGE_SYNC_ON_DAEMON_EXIT; if (strcasestr(value, "ON_DEMAND") != NULL) config->sync |= DLT_LOGSTORAGE_SYNC_ON_DEMAND; if (strcasestr(value, "ON_DEVICE_DISCONNECT") != NULL) config->sync |= DLT_LOGSTORAGE_SYNC_ON_DEVICE_DISCONNECT; if (strcasestr(value, "ON_SPECIFIC_SIZE") != NULL) config->sync |= DLT_LOGSTORAGE_SYNC_ON_SPECIFIC_SIZE; if (strcasestr(value, "ON_FILE_SIZE") != NULL) config->sync |= DLT_LOGSTORAGE_SYNC_ON_FILE_SIZE; if (config->sync == 0) { dlt_log(LOG_WARNING, "Unknown sync strategies. Set default ON_MSG\n"); config->sync = DLT_LOGSTORAGE_SYNC_ON_MSG; return 1; } } return 0; } /** * dlt_logstorage_check_ecuid * * Evaluate if ECU idenfifier given in config file * * @param config DltLogStorageFilterConfig * @param value string given in config file * @return 0 on success, -1 on error */ DLT_STATIC int dlt_logstorage_check_ecuid(DltLogStorageFilterConfig *config, char *value) { size_t len; if ((config == NULL) || (value == NULL) || (value[0] == '\0')) return -1; if (config->ecuid != NULL) { free(config->ecuid); config->ecuid = NULL; } len = strlen(value); config->ecuid = calloc(len + 1, sizeof(char)); if (config->ecuid == NULL) return -1; strncpy(config->ecuid, value, len); return 0; } DLT_STATIC DltLogstorageFilterConf filter_cfg_entries[DLT_LOGSTORAGE_FILTER_CONF_COUNT] = { [DLT_LOGSTORAGE_FILTER_CONF_LOGAPPNAME] = { .key = "LogAppName", .func = dlt_logstorage_check_apids, .is_opt = 1 }, [DLT_LOGSTORAGE_FILTER_CONF_CONTEXTNAME] = { .key = "ContextName", .func = dlt_logstorage_check_ctids, .is_opt = 1 }, [DLT_LOGSTORAGE_FILTER_CONF_LOGLEVEL] = { .key = "LogLevel", .func = dlt_logstorage_check_loglevel, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_RESET_LOGLEVEL] = { .key = NULL, .func = dlt_logstorage_check_reset_loglevel, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_FILE] = { .key = "File", .func = dlt_logstorage_check_filename, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_FILESIZE] = { .key = "FileSize", .func = dlt_logstorage_check_filesize, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_NOFILES] = { .key = "NOFiles", .func = dlt_logstorage_check_nofiles, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_SYNCBEHAVIOR] = { .key = "SyncBehavior", .func = dlt_logstorage_check_sync_strategy, .is_opt = 1 }, [DLT_LOGSTORAGE_FILTER_CONF_ECUID] = { .key = "EcuID", .func = dlt_logstorage_check_ecuid, .is_opt = 1 }, [DLT_LOGSTORAGE_FILTER_CONF_SPECIFIC_SIZE] = { .key = "SpecificSize", .func = dlt_logstorage_check_specificsize, .is_opt = 1 } }; /* */ DLT_STATIC DltLogstorageFilterConf filter_nonverbose_storage_entries[DLT_LOGSTORAGE_FILTER_CONF_COUNT] = { [DLT_LOGSTORAGE_FILTER_CONF_LOGAPPNAME] = { .key = NULL, .func = dlt_logstorage_check_apids, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_CONTEXTNAME] = { .key = NULL, .func = dlt_logstorage_check_ctids, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_LOGLEVEL] = { .key = NULL, .func = dlt_logstorage_check_loglevel, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_RESET_LOGLEVEL] = { .key = NULL, .func = NULL, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_FILE] = { .key = "File", .func = dlt_logstorage_check_filename, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_FILESIZE] = { .key = "FileSize", .func = dlt_logstorage_check_filesize, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_NOFILES] = { .key = "NOFiles", .func = dlt_logstorage_check_nofiles, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_SYNCBEHAVIOR] = { .key = NULL, .func = dlt_logstorage_check_sync_strategy, .is_opt = 1 }, [DLT_LOGSTORAGE_FILTER_CONF_ECUID] = { .key = "EcuID", .func = dlt_logstorage_check_ecuid, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_SPECIFIC_SIZE] = { .key = NULL, .func = dlt_logstorage_check_specificsize, .is_opt = 1 } }; DLT_STATIC DltLogstorageFilterConf filter_nonverbose_control_entries[DLT_LOGSTORAGE_FILTER_CONF_COUNT] = { [DLT_LOGSTORAGE_FILTER_CONF_LOGAPPNAME] = { .key = "LogAppName", .func = dlt_logstorage_check_apids, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_CONTEXTNAME] = { .key = "ContextName", .func = dlt_logstorage_check_ctids, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_LOGLEVEL] = { .key = "LogLevel", .func = dlt_logstorage_check_loglevel, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_RESET_LOGLEVEL] = { .key = "ResetLogLevel", .func = dlt_logstorage_check_reset_loglevel, .is_opt = 1 }, [DLT_LOGSTORAGE_FILTER_CONF_FILE] = { .key = NULL, .func = dlt_logstorage_check_filename, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_FILESIZE] = { .key = NULL, .func = dlt_logstorage_check_filesize, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_NOFILES] = { .key = NULL, .func = dlt_logstorage_check_nofiles, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_SYNCBEHAVIOR] = { .key = NULL, .func = dlt_logstorage_check_sync_strategy, .is_opt = 1 }, [DLT_LOGSTORAGE_FILTER_CONF_ECUID] = { .key = "EcuID", .func = dlt_logstorage_check_ecuid, .is_opt = 0 }, [DLT_LOGSTORAGE_FILTER_CONF_SPECIFIC_SIZE] = { .key = NULL, .func = dlt_logstorage_check_specificsize, .is_opt = 1 } }; /** * Check filter configuration parameter is valid. * * @param config DltLogStorageFilterConfig * @param ctype DltLogstorageFilterConfType * @param value specified property value from configuration file * @return 0 on success, -1 otherwise */ DLT_STATIC int dlt_logstorage_check_param(DltLogStorageFilterConfig *config, DltLogstorageFilterConfType ctype, char *value) { if ((config == NULL) || (value == NULL)) return -1; if (ctype < DLT_LOGSTORAGE_FILTER_CONF_COUNT) return filter_cfg_entries[ctype].func(config, value); return -1; } DLT_STATIC int dlt_logstorage_get_filter_section_value(DltConfigFile *config_file, char *sec_name, DltLogstorageFilterConf entry, char *value) { int ret = 0; if ((config_file == NULL) || (sec_name == NULL)) return DLT_OFFLINE_LOGSTORAGE_FILTER_ERROR; if (entry.key != NULL) { ret = dlt_config_file_get_value(config_file, sec_name, entry.key, value); if ((ret != 0) && (entry.is_opt == 0)) { dlt_vlog(LOG_WARNING, "Invalid configuration in section: %s -> %s : %s\n", sec_name, entry.key, value); return DLT_OFFLINE_LOGSTORAGE_FILTER_ERROR; } if ((ret != 0) && (entry.is_opt == 1)) { dlt_vlog(LOG_DEBUG, "Optional parameter %s not specified\n", entry.key); return DLT_OFFLINE_LOGSTORAGE_FILTER_CONTINUE; } } else { return DLT_OFFLINE_LOGSTORAGE_FILTER_CONTINUE; } return 0; } DLT_STATIC int dlt_logstorage_get_filter_value(DltConfigFile *config_file, char *sec_name, int index, char *value) { int ret = 0; size_t config_sec_len = strlen(DLT_OFFLINE_LOGSTORAGE_CONFIG_SECTION); size_t storage_sec_len = strlen(DLT_OFFLINE_LOGSTORAGE_NONVERBOSE_STORAGE_SECTION); size_t control_sec_len = strlen(DLT_OFFLINE_LOGSTORAGE_NONVERBOSE_CONTROL_SECTION); if ((config_file == NULL) || (sec_name == NULL)) return DLT_OFFLINE_LOGSTORAGE_FILTER_ERROR; /* Branch based on section name, no complete string compare needed */ if (strncmp(sec_name, DLT_OFFLINE_LOGSTORAGE_CONFIG_SECTION, config_sec_len) == 0) { ret = dlt_logstorage_get_filter_section_value(config_file, sec_name, filter_cfg_entries[index], value); } else if (strncmp(sec_name, DLT_OFFLINE_LOGSTORAGE_NONVERBOSE_STORAGE_SECTION, storage_sec_len) == 0) { ret = dlt_logstorage_get_filter_section_value(config_file, sec_name, filter_nonverbose_storage_entries[index], value); } else if ((strncmp(sec_name, DLT_OFFLINE_LOGSTORAGE_NONVERBOSE_CONTROL_SECTION, control_sec_len) == 0)) { ret = dlt_logstorage_get_filter_section_value(config_file, sec_name, filter_nonverbose_control_entries[index], value); } else { dlt_log(LOG_ERR, "Error: Section name not valid \n"); ret = DLT_OFFLINE_LOGSTORAGE_FILTER_ERROR; } return ret; } DLT_STATIC int dlt_logstorage_setup_table(DltLogStorage *handle, DltLogStorageFilterConfig *tmp_data) { int ret = 0; /* depending on the specified strategy set function pointers for * prepare, write and sync */ dlt_logstorage_filter_set_strategy(tmp_data, tmp_data->sync); ret = dlt_logstorage_prepare_table(handle, tmp_data); if (ret != 0) { dlt_vlog(LOG_ERR, "%s Error: Storing filter values failed\n", __func__); ret = DLT_OFFLINE_LOGSTORAGE_STORE_FILTER_ERROR; } return ret; } /*Return : * DLT_OFFLINE_LOGSTORAGE_FILTER_ERROR - On filter properties or value is not valid * DLT_OFFLINE_LOGSTORAGE_STORE_FILTER_ERROR - On error while storing in hash table */ DLT_STATIC int dlt_daemon_offline_setup_filter_properties(DltLogStorage *handle, DltConfigFile *config_file, char *sec_name) { DltLogStorageFilterConfig tmp_data; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN + 1] = { '\0' }; int i = 0; int ret = 0; if ((handle == NULL) || (config_file == NULL) || (sec_name == NULL)) return DLT_OFFLINE_LOGSTORAGE_STORE_FILTER_ERROR; memset(&tmp_data, 0, sizeof(DltLogStorageFilterConfig)); tmp_data.log_level = DLT_LOG_VERBOSE; tmp_data.reset_log_level = DLT_LOG_OFF; for (i = 0; i < DLT_LOGSTORAGE_FILTER_CONF_COUNT; i++) { ret = dlt_logstorage_get_filter_value(config_file, sec_name, i, value); if (ret == DLT_OFFLINE_LOGSTORAGE_FILTER_ERROR) return ret; if (ret == DLT_OFFLINE_LOGSTORAGE_FILTER_CONTINUE) continue; /* check value and store temporary */ ret = dlt_logstorage_check_param(&tmp_data, i, value); if (ret != 0) { if (tmp_data.apids != NULL) { free(tmp_data.apids); tmp_data.apids = NULL; } if (tmp_data.ctids != NULL) { free(tmp_data.ctids); tmp_data.ctids = NULL; } if (tmp_data.file_name != NULL) { free(tmp_data.file_name); tmp_data.file_name = NULL; } if (tmp_data.working_file_name != NULL) { free(tmp_data.working_file_name); tmp_data.working_file_name = NULL; } if (tmp_data.ecuid != NULL) { free(tmp_data.ecuid); tmp_data.ecuid = NULL; } return DLT_OFFLINE_LOGSTORAGE_FILTER_ERROR; } } /* filter configuration is valid */ ret = dlt_logstorage_setup_table(handle, &tmp_data); if (ret != 0) { dlt_vlog(LOG_ERR, "%s Error: Storing filter values failed\n", __func__); ret = DLT_OFFLINE_LOGSTORAGE_STORE_FILTER_ERROR; } else { /* move to next free filter configuration, if no error occurred */ handle->num_configs += 1; } /* free tmp_data */ dlt_logstorage_filter_config_free(&tmp_data); return ret; } /** * dlt_logstorage_check_maintain_logstorage_loglevel * * Evaluate to maintain the logstorage loglevel setting. This is an optional * configuration parameter * If the given value cannot be associated with an overwrite, the default value * will be assigned. * * @param config DltLogStorage * @param value string given in config file * @return 0 on success, -1 on error */ DLT_STATIC int dlt_logstorage_check_maintain_logstorage_loglevel(DltLogStorage *handle, char *value) { if ((handle == NULL) || (value == NULL)) { return -1; } if ((strncmp(value, "OFF", 3) == 0) || (strncmp(value, "0", 1) == 0)) { handle->maintain_logstorage_loglevel = DLT_MAINTAIN_LOGSTORAGE_LOGLEVEL_OFF; } else if ((strncmp(value, "ON", 2) == 0) || (strncmp(value, "1", 1) == 0)) { handle->maintain_logstorage_loglevel = DLT_MAINTAIN_LOGSTORAGE_LOGLEVEL_ON; } else { dlt_vlog(LOG_ERR, "Wrong value for Maintain logstorage loglevel section name: %s\n", value); handle->maintain_logstorage_loglevel = DLT_MAINTAIN_LOGSTORAGE_LOGLEVEL_ON; return -1; } return 0; } DLT_STATIC DltLogstorageGeneralConf general_cfg_entries[DLT_LOGSTORAGE_GENERAL_CONF_COUNT] = { [DLT_LOGSTORAGE_GENERAL_CONF_MAINTAIN_LOGSTORAGE_LOGLEVEL] = { .key = "MaintainLogstorageLogLevel", .func = dlt_logstorage_check_maintain_logstorage_loglevel, .is_opt = 1 } }; /** * Check if DltLogstorage General configuration parameter is valid. * * @param handle pointer to DltLogstorage structure * @param ctype Logstorage general configuration type * @param value specified property value from configuration file * @return 0 on success, -1 otherwise */ DLT_STATIC int dlt_logstorage_check_general_param(DltLogStorage *handle, DltLogstorageGeneralConfType ctype, char *value) { if ((handle == NULL) || (value == NULL)) { return -1; } if (ctype < DLT_LOGSTORAGE_GENERAL_CONF_COUNT) { return general_cfg_entries[ctype].func(handle, value); } return -1; } DLT_STATIC int dlt_daemon_setup_general_properties(DltLogStorage *handle, DltConfigFile *config_file, char *sec_name) { DltLogstorageGeneralConfType type = DLT_LOGSTORAGE_GENERAL_CONF_MAINTAIN_LOGSTORAGE_LOGLEVEL; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = {0}; if ((handle == NULL) || (config_file == NULL) || (sec_name == NULL)) { return -1; } for ( ; type < DLT_LOGSTORAGE_GENERAL_CONF_COUNT ; type++) { if (dlt_config_file_get_value(config_file, sec_name, general_cfg_entries[type].key, value) == 0) { if (dlt_logstorage_check_general_param(handle, type, value) != 0) { dlt_vlog(LOG_WARNING, "General parameter %s [%s] is invalid\n", general_cfg_entries[type].key, value); } } else { if (general_cfg_entries[type].is_opt == 1) { dlt_vlog(LOG_DEBUG, "Optional General parameter %s not given\n", general_cfg_entries[type].key); } else { dlt_vlog(LOG_ERR, "General parameter %s not given\n", general_cfg_entries[type].key); return -1; } } } return 0; } /** * dlt_logstorage_store_filters * * This function reads the filter keys and values * and stores them into the hash map * * @param handle DLT Logstorage handle * @param config_file_name Configuration file name * @return 0 on success, -1 on error, 1 on warning * */ DLT_STATIC int dlt_logstorage_store_filters(DltLogStorage *handle, char *config_file_name) { DltConfigFile *config = NULL; int sec = 0; int num_sec = 0; int ret = 0; /* we have to make sure that this function returns success if atleast one * filter configuration is valid and stored */ int valid = -1; if (config_file_name == NULL) { dlt_vlog(LOG_ERR, "%s unexpected parameter received\n", __func__); return -1; } config = dlt_config_file_init(config_file_name); if (config == NULL) { dlt_log(LOG_CRIT, "Failed to open filter configuration file\n"); return -1; } handle->maintain_logstorage_loglevel = DLT_MAINTAIN_LOGSTORAGE_LOGLEVEL_UNDEF; dlt_config_file_get_num_sections(config, &num_sec); for (sec = 0; sec < num_sec; sec++) { char sec_name[DLT_CONFIG_FILE_ENTRY_MAX_LEN + 1]; if (dlt_config_file_get_section_name(config, sec, sec_name) == -1) { dlt_log(LOG_CRIT, "Failed to read section name\n"); dlt_config_file_release(config); return -1; } if (strstr(sec_name, GENERAL_BASE_NAME) != NULL) { if (dlt_daemon_setup_general_properties(handle, config, sec_name) == -1) { dlt_log(LOG_CRIT, "General configuration is invalid\n"); continue; } } else if (dlt_logstorage_validate_filter_name(sec_name) == 0) { ret = dlt_daemon_offline_setup_filter_properties(handle, config, sec_name); if (ret == DLT_OFFLINE_LOGSTORAGE_STORE_FILTER_ERROR) { break; } else if (ret == DLT_OFFLINE_LOGSTORAGE_FILTER_ERROR) { valid = 1; dlt_vlog(LOG_WARNING, "%s filter configuration is invalid \n", sec_name); /* Continue reading next filter section */ continue; } else /* Filter properties read and stored successfuly */ if (valid != 1) valid = 0; } else { /* unknown section */ dlt_vlog(LOG_WARNING, "Unknown section: %s", sec_name); } } dlt_config_file_release(config); return valid; } /** * dlt_logstorage_load_config * * Read dlt_logstorage.conf file and setup filters in hash table * Hash table key consists of "APID:CTID", e.g "APP1:CTX1". If * wildcards used for application id or context id, the hash table * key consists of none wildcard value, e.g. apid=.*, cxid=CTX1 * results in "CTX1". * * Combination of two wildcards is not allowed if ECUID is not specified. * * @param handle DLT Logstorage handle * @return 0 on success, -1 on error, 1 on warning */ DLT_STATIC int dlt_logstorage_load_config(DltLogStorage *handle) { char config_file_name[PATH_MAX] = {0}; int ret = 0; /* Check if handle is NULL or already initialized or already configured */ if ((handle == NULL) || (handle->connection_type != DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED)) return -1; /* Check if this device config was already setup */ if (handle->config_status == DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE) { dlt_vlog(LOG_ERR, "%s: Device already configured. Send disconnect first.\n", __func__); return -1; } if (snprintf(config_file_name, PATH_MAX, "%s/%s", handle->device_mount_point, DLT_OFFLINE_LOGSTORAGE_CONFIG_FILE_NAME) < 0) { dlt_log(LOG_ERR, "Creating configuration file path string failed\n"); return -1; } config_file_name[PATH_MAX - 1] = 0; ret = dlt_logstorage_store_filters(handle, config_file_name); if (ret == 1) { handle->config_status = DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE; return 1; } else if (ret != 0) { dlt_log(LOG_ERR, "dlt_logstorage_load_config Error : Storing filters failed\n"); return -1; } handle->config_status = DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE; return 0; } /** * dlt_logstorage_device_connected * * Initializes DLT Offline Logstorage with respect to device status * * @param handle DLT Logstorage handle * @param mount_point Device mount path * @return 0 on success, -1 on error, 1 on warning */ int dlt_logstorage_device_connected(DltLogStorage *handle, char *mount_point) { if ((handle == NULL) || (mount_point == NULL)) { dlt_log(LOG_ERR, "Handle error \n"); return -1; } if (handle->connection_type == DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) { dlt_log(LOG_WARNING, "Device already connected. Send disconnect, connect request\n"); dlt_logstorage_device_disconnected( handle, DLT_LOGSTORAGE_SYNC_ON_DEVICE_DISCONNECT); } strncpy(handle->device_mount_point, mount_point, DLT_MOUNT_PATH_MAX); handle->device_mount_point[DLT_MOUNT_PATH_MAX] = 0; handle->connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED; handle->config_status = 0; handle->write_errors = 0; handle->num_configs = 0; handle->newest_file_list = NULL; /* Setup logstorage with config file settings */ return dlt_logstorage_load_config(handle); } /** * dlt_logstorage_device_disconnected * * De-Initializes DLT Offline Logstorage with respect to device status * * @param handle DLT Logstorage handle * @param reason Reason for disconnect * @return 0 on success, -1 on error * */ int dlt_logstorage_device_disconnected(DltLogStorage *handle, int reason) { DltNewestFileName *tmp = NULL; if (handle == NULL) return -1; /* If configuration loading was done, free it */ if (handle->config_status == DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE) dlt_logstorage_free(handle, reason); /* Reset all device status */ memset(handle->device_mount_point, 0, sizeof(char) * (DLT_MOUNT_PATH_MAX + 1)); handle->connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_DISCONNECTED; handle->config_status = 0; handle->write_errors = 0; handle->num_configs = 0; while (handle->newest_file_list) { tmp = handle->newest_file_list; handle->newest_file_list = tmp->next; if (tmp->file_name) { free(tmp->file_name); tmp->file_name = NULL; } if (tmp->newest_file) { free(tmp->newest_file); tmp->newest_file = NULL; } free(tmp); tmp = NULL; } return 0; } /** * dlt_logstorage_get_loglevel_by_key * * Obtain the log level for the provided key * This function can be used to obtain log level when the actual * key stored in the Hash map is availble with the caller * * @param handle DltLogstorage handle * @param key key to search for in Hash MAP * @return log level on success:, -1 on error */ int dlt_logstorage_get_loglevel_by_key(DltLogStorage *handle, char *key) { DltLogStorageFilterConfig *config[DLT_CONFIG_FILE_SECTIONS_MAX] = { 0 }; int num_configs = 0; int i = 0; int log_level = 0; /* Check if handle is NULL,already initialized or already configured */ if ((handle == NULL) || (key == NULL) || (handle->connection_type != DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) || (handle->config_status != DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE)) return -1; num_configs = dlt_logstorage_list_find(key, &(handle->config_list), config); if (num_configs == 0) { dlt_vlog(LOG_WARNING, "Configuration for key [%s] not found!\n", key); return -1; } else if (num_configs == 1) { if (config[0] != NULL) { log_level = config[0]->log_level; } } else { /** * Multiple configurations found, raise a warning to the user and go * for the more verbose one. */ dlt_vlog(LOG_WARNING, "Multiple configuration for key [%s] found," " return the highest log level!\n", key); for (i = 0; i < num_configs; i++) { if ((config[i] != NULL) && (config[i]->log_level > log_level)) { log_level = config[i]->log_level; } } } return log_level; } /** * dlt_logstorage_get_config * * Obtain the configuration data of all filters for provided apid and ctid * * @param handle DltLogStorage handle * @param config [out] Pointer to array of filter configurations * @param apid application id * @param ctid context id * @param ecuid ecu id * @return number of configurations found */ int dlt_logstorage_get_config(DltLogStorage *handle, DltLogStorageFilterConfig **config, char *apid, char *ctid, char *ecuid) { DltLogStorageFilterConfig **cur_config_ptr = NULL; char key[DLT_CONFIG_FILE_SECTIONS_MAX][DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN] = { { '\0' }, { '\0' }, { '\0' } }; int i = 0; size_t apid_len = 0; size_t ctid_len = 0; size_t ecuid_len = 0; int num_configs = 0; int num = 0; /* Check if handle is NULL,already initialized or already configured */ if ((handle == NULL) || (config == NULL) || (handle->connection_type != DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) || (handle->config_status != DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE) || (ecuid == NULL)) return 0; /* Prepare possible keys with * Possible combinations are * ecu:: * ecu:apid:ctid * :apid:ctid * ecu::ctid * ecu:apid: * ::ctid * :apid: */ ecuid_len = strlen(ecuid); if (ecuid_len > DLT_ID_SIZE) ecuid_len = DLT_ID_SIZE; if ((apid == NULL) && (ctid == NULL)) { /* ecu:: */ strncpy(key[0], ecuid, ecuid_len); strncat(key[0], ":", 1); strncat(key[0], ":", 1); num_configs = dlt_logstorage_list_find(key[0], &(handle->config_list), config); return num_configs; } apid_len = strlen(apid); if (apid_len > DLT_ID_SIZE) apid_len = DLT_ID_SIZE; ctid_len = strlen(ctid); if (ctid_len > DLT_ID_SIZE) ctid_len = DLT_ID_SIZE; /* :apid: */ strncpy(key[0], ":", 1); strncat(key[0], apid, apid_len); strncat(key[0], ":", 1); /* ::ctid */ strncpy(key[1], ":", 1); strncat(key[1], ":", 1); strncat(key[1], ctid, ctid_len); /* :apid:ctid */ strncpy(key[2], ":", 1); strncat(key[2], apid, apid_len); strncat(key[2], ":", 1); strncat(key[2], ctid, ctid_len); /* ecu:apid:ctid */ strncpy(key[3], ecuid, ecuid_len); strncat(key[3], ":", 1); strncat(key[3], apid, apid_len); strncat(key[3], ":", 1); strncat(key[3], ctid, ctid_len); /* ecu:apid: */ strncpy(key[4], ecuid, ecuid_len); strncat(key[4], ":", 1); strncat(key[4], apid, apid_len); strncat(key[4], ":", 1); /* ecu::ctid */ strncpy(key[5], ecuid, ecuid_len); strncat(key[5], ":", 1); strncat(key[5], ":", 1); strncat(key[5], ctid, ctid_len); /* ecu:: */ strncpy(key[6], ecuid, ecuid_len); strncat(key[6], ":", 1); strncat(key[6], ":", 1); /* Search the list three times with keys as -apid: , :ctid and apid:ctid */ for (i = 0; i < DLT_OFFLINE_LOGSTORAGE_MAX_POSSIBLE_KEYS; i++) { cur_config_ptr = &config[num_configs]; num = dlt_logstorage_list_find(key[i], &(handle->config_list), cur_config_ptr); num_configs += num; /* If all filter configurations matched, stop and return */ if (num_configs == handle->num_configs) { break; } } return num_configs; } /** * dlt_logstorage_filter * * Check if log message need to be stored in a certain device based on filter * config * - get all DltLogStorageFilterConfig from hash table possible by given * apid/ctid (apid:, :ctid, apid:ctid * - for each found structure, compare message log level with configured one * * @param handle DltLogStorage handle * @param config Pointer to array of filter configurations * @param apid application id * @param ctid context id * @param log_level Log level of message * @param ecuid EcuID given in the message * @return number of found configurations */ DLT_STATIC int dlt_logstorage_filter(DltLogStorage *handle, DltLogStorageFilterConfig **config, char *apid, char *ctid, char *ecuid, int log_level) { int i = 0; int num = 0; if ((handle == NULL) || (config == NULL) || (ecuid == NULL)) return -1; /* filter on names: find DltLogStorageFilterConfig structures */ num = dlt_logstorage_get_config(handle, config, apid, ctid, ecuid); if (num == 0) { dlt_log(LOG_DEBUG, "No valid filter configuration found\n"); return 0; } for (i = 0 ; i < num ; i++) { if (config[i] == NULL) continue; /* filter on log level */ if (log_level > config[i]->log_level) { config[i] = NULL; continue; } /* filter on ECU id only if EcuID is set */ if (config[i]->ecuid != NULL) { if (strncmp(ecuid, config[i]->ecuid, DLT_ID_SIZE) != 0) config[i] = NULL; } } return num; } /** * dlt_logstorage_write * * Write a message to one or more configured log files, based on filter * configuration. * * @param handle DltLogStorage handle * @param uconfig User configurations for log file * @param data1 Data buffer of message header * @param size1 Size of message header buffer * @param data2 Data buffer of extended message body * @param size2 Size of extended message body * @param data3 Data buffer of message body * @param size3 Size of message body * @return 0 on success or write errors < max write errors, -1 on error */ int dlt_logstorage_write(DltLogStorage *handle, DltLogStorageUserConfig *uconfig, unsigned char *data1, int size1, unsigned char *data2, int size2, unsigned char *data3, int size3) { DltLogStorageFilterConfig *config[DLT_CONFIG_FILE_SECTIONS_MAX] = { 0 }; int i = 0; int ret = 0; int num = 0; int err = 0; /* data2 contains DltStandardHeader, DltStandardHeaderExtra and * DltExtendedHeader. We are interested in ecuid, apid, ctid and loglevel */ DltExtendedHeader *extendedHeader = NULL; DltStandardHeaderExtra *extraHeader = NULL; DltStandardHeader *standardHeader = NULL; unsigned int standardHeaderExtraLen = sizeof(DltStandardHeaderExtra); unsigned int header_len = 0; DltNewestFileName *tmp = NULL; int found = 0; int log_level = -1; if ((handle == NULL) || (uconfig == NULL) || (data1 == NULL) || (data2 == NULL) || (data3 == NULL) || (handle->connection_type != DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED) || (handle->config_status != DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE)) return 0; /* Calculate real length of DltStandardHeaderExtra */ standardHeader = (DltStandardHeader *)data2; if (!DLT_IS_HTYP_WEID(standardHeader->htyp)) standardHeaderExtraLen -= DLT_ID_SIZE; if (!DLT_IS_HTYP_WSID(standardHeader->htyp)) standardHeaderExtraLen -= DLT_SIZE_WSID; if (!DLT_IS_HTYP_WTMS(standardHeader->htyp)) standardHeaderExtraLen -= DLT_SIZE_WTMS; extraHeader = (DltStandardHeaderExtra *)(data2 + sizeof(DltStandardHeader)); if (DLT_IS_HTYP_UEH(standardHeader->htyp)) { header_len = (unsigned int) (sizeof(DltStandardHeader) + sizeof(DltExtendedHeader) + standardHeaderExtraLen); /* check if size2 is big enough to contain expected DLT message header */ if ((unsigned int) size2 < header_len) { dlt_log(LOG_ERR, "DLT message header is too small\n"); return 0; } extendedHeader = (DltExtendedHeader *)(data2 + sizeof(DltStandardHeader) + standardHeaderExtraLen); log_level = DLT_GET_MSIN_MTIN(extendedHeader->msin); /* check if log message need to be stored in a certain device based on * filter configuration */ num = dlt_logstorage_filter(handle, config, extendedHeader->apid, extendedHeader->ctid, extraHeader->ecu, log_level); if ((num == 0) || (num == -1)) { dlt_log(LOG_DEBUG, "No valid filter configuration found!\n"); return 0; } } else { header_len = (unsigned int) (sizeof(DltStandardHeader) + standardHeaderExtraLen); /* check if size2 is big enough to contain expected DLT message header */ if ((unsigned int) size2 < header_len) { dlt_log(LOG_ERR, "DLT message header is too small (without extended header)\n"); return 0; } log_level = DLT_LOG_VERBOSE; /* check if log message need to be stored in a certain device based on * filter configuration */ num = dlt_logstorage_filter(handle, config, NULL, NULL, extraHeader->ecu, log_level); if ((num == 0) || (num == -1)) { dlt_log(LOG_DEBUG, "No valid filter configuration found!\n"); return 0; } } /* store log message in every found filter */ for (i = 0; i < num; i++) { if (config[i] == NULL) continue; /* If file name is not present, the filter is non verbose control filter * hence skip storing */ if (config[i]->file_name == NULL) continue; tmp = handle->newest_file_list; while (tmp) { if (strcmp(tmp->file_name, config[i]->file_name) == 0) { found = 1; break; } else { tmp = tmp->next; } } if (!found) { dlt_vlog(LOG_ERR, "Cannot find out record for filename [%s]\n", config[i]->file_name); return -1; } /* prepare log file (create and/or open)*/ if (config[i]->ecuid == NULL) dlt_vlog(LOG_DEBUG, "%s: ApId-CtId-EcuId [%s]-[%s]-[]\n", __func__, config[i]->apids, config[i]->ctids); else dlt_vlog(LOG_DEBUG, "%s: ApId-CtId-EcuId [%s]-[%s]-[%s]\n", __func__, config[i]->apids, config[i]->ctids, config[i]->ecuid); ret = config[i]->dlt_logstorage_prepare(config[i], uconfig, handle->device_mount_point, size1 + size2 + size3, tmp); if (config[i]->sync == DLT_LOGSTORAGE_SYNC_UNSET || config[i]->sync == DLT_LOGSTORAGE_SYNC_ON_MSG) { /* It is abnormal if working file is still NULL after preparation. */ if (!config[i]->working_file_name) { dlt_vlog(LOG_ERR, "Failed to prepare working file for %s\n", config[i]->file_name); return -1; } else { /* After preparation phase, update newest file info * it means there is new file created, newest file info must be updated. */ if (tmp->newest_file) { free(tmp->newest_file); tmp->newest_file = NULL; } tmp->newest_file = strdup(config[i]->working_file_name); tmp->wrap_id = config[i]->wrap_id; } } if (ret == 0) { /* log data (write) */ ret = config[i]->dlt_logstorage_write(config[i], uconfig, handle->device_mount_point, data1, size1, data2, size2, data3, size3); if (ret == 0) { /* In case of behavior CACHED_BASED, the newest file info * must be updated right after writing phase. * That is because in writing phase, it could also perform * sync to file which actions could impact to the log file info. * If both working file name and newest file name are unavailable, * it means the sync to file is not performed yet, wait for next times. */ if (config[i]->sync != DLT_LOGSTORAGE_SYNC_ON_MSG && config[i]->sync != DLT_LOGSTORAGE_SYNC_UNSET) { if (config[i]->working_file_name) { if (tmp->newest_file) { free(tmp->newest_file); tmp->newest_file = NULL; } tmp->newest_file = strdup(config[i]->working_file_name); tmp->wrap_id = config[i]->wrap_id; } } /* flush to be sure log is stored on device */ ret = config[i]->dlt_logstorage_sync(config[i], uconfig, handle->device_mount_point, DLT_LOGSTORAGE_SYNC_ON_MSG); if (ret != 0) dlt_log(LOG_ERR, "dlt_logstorage_write: Unable to sync.\n"); } else { handle->write_errors += 1; if (handle->write_errors >= DLT_OFFLINE_LOGSTORAGE_MAX_WRITE_ERRORS) err = -1; dlt_log(LOG_ERR, "dlt_logstorage_write: Unable to write.\n"); } } else { dlt_log(LOG_ERR, "dlt_logstorage_write: Unable to prepare.\n"); } } return err; } /** * dlt_logstorage_sync_caches * * Write Cache data to file * * @param handle DltLogStorage handle * @return 0 on success, -1 on error */ int dlt_logstorage_sync_caches(DltLogStorage *handle) { DltLogStorageFilterList **tmp = NULL; if (handle == NULL) return -1; tmp = &(handle->config_list); while (*(tmp) != NULL) { if ((*tmp)->data != NULL) { if ((*tmp)->data->dlt_logstorage_sync((*tmp)->data, &handle->uconfig, handle->device_mount_point, DLT_LOGSTORAGE_SYNC_ON_DEMAND) != 0) dlt_vlog(LOG_ERR, "%s: Sync failed. Continue with next cache.\n", __func__); } tmp = &(*tmp)->next; } return 0; } dlt-daemon-2.18.6/src/offlinelogstorage/dlt_offline_logstorage.h000066400000000000000000000371341377520261000250330ustar00rootroot00000000000000/** * Copyright (C) 2013 - 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT offline log storage functionality header file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Syed Hameed ADIT 2013 - 2015 * \author Christoph Lipka ADIT 2015 * * \file: dlt_offline_logstorage.h * For further information see http://www.genivi.org/. */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_offline_logstorage.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Syed Hameed shameed@jp.adit-jv.com ** ** Christoph Lipka clipka@jp.adit-jv.com ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** sh Syed Hameed ADIT ** ** cl Christoph Lipka ADIT ** *******************************************************************************/ #ifndef DLT_OFFLINE_LOGSTORAGE_H #define DLT_OFFLINE_LOGSTORAGE_H #include #include #include "dlt_common.h" #include "dlt-daemon_cfg.h" #include "dlt_config_file_parser.h" #define DLT_OFFLINE_LOGSTORAGE_MAXIDS 100 /* Maximum entries for each apids and ctids */ #define DLT_OFFLINE_LOGSTORAGE_MAX_POSSIBLE_KEYS 7 /* Max number of possible keys when searching for */ #define DLT_OFFLINE_LOGSTORAGE_INIT_DONE 1 /* For device configuration status */ #define DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED 1 #define DLT_OFFLINE_LOGSTORAGE_FREE 0 #define DLT_OFFLINE_LOGSTORAGE_DEVICE_DISCONNECTED 0 #define DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE 1 #define DLT_OFFLINE_LOGSTORAGE_SYNC_CACHES 2 /* sync logstorage caches */ #define DLT_OFFLINE_LOGSTORAGE_MAX_KEY_LEN 15 /* Maximum size for key */ #define DLT_OFFLINE_LOGSTORAGE_MAX_FILE_NAME_LEN 50 /* Maximum file name length of the log file */ #define DLT_OFFLINE_LOGSTORAGE_FILE_EXTENSION_LEN 4 #define DLT_OFFLINE_LOGSTORAGE_INDEX_LEN 3 #define DLT_OFFLINE_LOGSTORAGE_MAX_INDEX 999 #define DLT_OFFLINE_LOGSTORAGE_TIMESTAMP_LEN 16 #define DLT_OFFLINE_LOGSTORAGE_INDEX_OFFSET (DLT_OFFLINE_LOGSTORAGE_TIMESTAMP_LEN + \ DLT_OFFLINE_LOGSTORAGE_FILE_EXTENSION_LEN + \ DLT_OFFLINE_LOGSTORAGE_INDEX_LEN) #define DLT_OFFLINE_LOGSTORAGE_MAX_LOG_FILE_LEN (DLT_OFFLINE_LOGSTORAGE_MAX_FILE_NAME_LEN + \ DLT_OFFLINE_LOGSTORAGE_TIMESTAMP_LEN + \ DLT_OFFLINE_LOGSTORAGE_INDEX_LEN + \ DLT_OFFLINE_LOGSTORAGE_FILE_EXTENSION_LEN + 1) #define DLT_OFFLINE_LOGSTORAGE_CONFIG_DIR_PATH_LEN 50 #define DLT_OFFLINE_LOGSTORAGE_CONFIG_FILE_NAME "dlt_logstorage.conf" /* +3 because of device number and \0 */ #define DLT_OFFLINE_LOGSTORAGE_MAX_PATH_LEN (DLT_OFFLINE_LOGSTORAGE_MAX_LOG_FILE_LEN + \ DLT_OFFLINE_LOGSTORAGE_CONFIG_DIR_PATH_LEN + 3) #define DLT_OFFLINE_LOGSTORAGE_MAX(A, B) ((A) > (B) ? (A) : (B)) #define DLT_OFFLINE_LOGSTORAGE_MIN(A, B) ((A) < (B) ? (A) : (B)) #define DLT_OFFLINE_LOGSTORAGE_MAX_WRITE_ERRORS 5 #define DLT_OFFLINE_LOGSTORAGE_MAX_KEY_NUM 8 #define DLT_OFFLINE_LOGSTORAGE_CONFIG_SECTION "FILTER" #define DLT_OFFLINE_LOGSTORAGE_GENERAL_CONFIG_SECTION "GENERAL" #define DLT_OFFLINE_LOGSTORAGE_NONVERBOSE_STORAGE_SECTION "NON-VERBOSE-STORAGE-FILTER" #define DLT_OFFLINE_LOGSTORAGE_NONVERBOSE_CONTROL_SECTION "NON-VERBOSE-LOGLEVEL-CTRL" /* Offline Logstorage sync strategies */ #define DLT_LOGSTORAGE_SYNC_ON_ERROR -1 /* error case */ #define DLT_LOGSTORAGE_SYNC_UNSET 0 /* strategy not set */ #define DLT_LOGSTORAGE_SYNC_ON_MSG 1 /* default, on message sync */ #define DLT_LOGSTORAGE_SYNC_ON_DAEMON_EXIT (1 << 1) /* sync on daemon exit */ #define DLT_LOGSTORAGE_SYNC_ON_DEMAND (1 << 2) /* sync on demand */ #define DLT_LOGSTORAGE_SYNC_ON_DEVICE_DISCONNECT (1 << 3) /* sync on device disconnect*/ #define DLT_LOGSTORAGE_SYNC_ON_SPECIFIC_SIZE (1 << 4) /* sync on after specific size */ #define DLT_LOGSTORAGE_SYNC_ON_FILE_SIZE (1 << 5) /* sync on file size reached */ #define DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(S, s) ((S)&(s)) /* logstorage max cache */ extern unsigned int g_logstorage_cache_max; /* current logstorage cache size */ extern unsigned int g_logstorage_cache_size; typedef struct { unsigned int offset; /* current write offset */ unsigned int wrap_around_cnt; /* wrap around counter */ unsigned int last_sync_offset; /* last sync position */ unsigned int end_sync_offset; /* end position of previous round */ } DltLogStorageCacheFooter; typedef struct { /* File name user configurations */ int logfile_timestamp; /* Timestamp set/reset */ char logfile_delimiter; /* Choice of delimiter */ unsigned int logfile_maxcounter; /* Maximum file index counter */ unsigned int logfile_counteridxlen; /* File index counter length */ } DltLogStorageUserConfig; typedef struct DltLogStorageFileList { /* List for filenames */ char *name; /* Filename */ unsigned int idx; /* File index */ struct DltLogStorageFileList *next; /* Pointer to next */ } DltLogStorageFileList; typedef struct DltNewestFileName DltNewestFileName; struct DltNewestFileName { char *file_name; /* The unique name of file in whole a dlt_logstorage.conf */ char *newest_file; /* The real newest name of file which is associated with filename.*/ unsigned int wrap_id; /* Identifier of wrap around happened for this file_name */ DltNewestFileName *next; /* Pointer to next */ }; typedef struct DltLogStorageFilterConfig DltLogStorageFilterConfig; struct DltLogStorageFilterConfig { /* filter section */ char *apids; /* Application IDs configured for filter */ char *ctids; /* Context IDs configured for filter */ int log_level; /* Log level number configured for filter */ int reset_log_level; /* reset Log level to be sent on disconnect */ char *file_name; /* File name for log storage configured for filter */ char *working_file_name; /* Current open log file name */ unsigned int wrap_id; /* Identifier of wrap around happened for this filter */ unsigned int file_size; /* MAX File size of storage file configured for filter */ unsigned int num_files; /* MAX number of storage files configured for filters */ int sync; /* Sync strategy */ char *ecuid; /* ECU identifier */ /* callback function for filter configurations */ int (*dlt_logstorage_prepare)(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, int log_msg_size, DltNewestFileName *newest_file_info); int (*dlt_logstorage_write)(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, unsigned char *data1, int size1, unsigned char *data2, int size2, unsigned char *data3, int size3); /* status is strategy, e.g. DLT_LOGSTORAGE_SYNC_ON_MSG is used when callback * is called on message received */ int (*dlt_logstorage_sync)(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *uconfig, char *dev_path, int status); FILE *log; /* current open log file */ void *cache; /* log data cache */ unsigned int specific_size; /* cache size used for specific_size sync strategy */ unsigned int current_write_file_offset; /* file offset for specific_size sync strategy */ DltLogStorageFileList *records; /* File name list */ }; typedef struct DltLogStorageFilterList DltLogStorageFilterList; struct DltLogStorageFilterList { char *key_list; /* List of key */ int num_keys; /* Number of keys */ DltLogStorageFilterConfig *data; /* Filter data */ DltLogStorageFilterList *next; /* Pointer to next */ }; typedef struct { DltLogStorageFilterList *config_list; /* List of all filters */ DltLogStorageUserConfig uconfig; /* User configurations for file name*/ int num_configs; /* Number of configs */ char device_mount_point[DLT_MOUNT_PATH_MAX + 1]; /* Device mount path */ unsigned int connection_type; /* Type of connection */ unsigned int config_status; /* Status of configuration */ int write_errors; /* number of write errors */ DltNewestFileName *newest_file_list; /* List of newest file name */ int maintain_logstorage_loglevel; /* Permission to maintain the logstorage loglevel*/ } DltLogStorage; typedef struct { char *key; /* The configuration key */ int (*func)(DltLogStorage *handle, char *value); /* conf handler */ int is_opt; /* If configuration is optional or not */ } DltLogstorageGeneralConf; typedef enum { DLT_LOGSTORAGE_GENERAL_CONF_MAINTAIN_LOGSTORAGE_LOGLEVEL = 1, DLT_LOGSTORAGE_GENERAL_CONF_COUNT } DltLogstorageGeneralConfType; typedef struct { char *key; /* Configuration key */ int (*func)(DltLogStorageFilterConfig *config, char *value); /* conf handler */ int is_opt; /* If configuration is optional or not */ } DltLogstorageFilterConf; typedef enum { DLT_LOGSTORAGE_FILTER_CONF_LOGAPPNAME = 0, DLT_LOGSTORAGE_FILTER_CONF_CONTEXTNAME, DLT_LOGSTORAGE_FILTER_CONF_LOGLEVEL, DLT_LOGSTORAGE_FILTER_CONF_RESET_LOGLEVEL, DLT_LOGSTORAGE_FILTER_CONF_FILE, DLT_LOGSTORAGE_FILTER_CONF_FILESIZE, DLT_LOGSTORAGE_FILTER_CONF_NOFILES, DLT_LOGSTORAGE_FILTER_CONF_SYNCBEHAVIOR, DLT_LOGSTORAGE_FILTER_CONF_ECUID, DLT_LOGSTORAGE_FILTER_CONF_SPECIFIC_SIZE, DLT_LOGSTORAGE_FILTER_CONF_COUNT } DltLogstorageFilterConfType; /** * dlt_logstorage_device_connected * * Initializes DLT Offline Logstorage with respect to device status * * * @param handle DLT Logstorage handle * @param mount_point Device mount path * @return 0 on success, -1 on error */ int dlt_logstorage_device_connected(DltLogStorage *handle, char *mount_point); /** * dlt_logstorage_device_disconnected * De-Initializes DLT Offline Logstorage with respect to device status * * @param handle DLT Logstorage handle * @param reason Reason for device disconnection * @return 0 on success, -1 on error */ int dlt_logstorage_device_disconnected(DltLogStorage *handle, int reason); /** * dlt_logstorage_get_config * * Obtain the configuration data of all filters for provided apid and ctid * For a given apid and ctid, there can be 3 possiblities of configuration * data available in the Hash map, this function will return the address * of configuration data for all these 3 combinations * * @param handle DltLogStorage handle * @param config Pointer to array of filter configurations * @param apid application id * @param ctid context id * @param ecuid ecu id * @return number of found configurations */ int dlt_logstorage_get_config(DltLogStorage *handle, DltLogStorageFilterConfig **config, char *apid, char *ctid, char *ecuid); /** * dlt_logstorage_get_loglevel_by_key * * Obtain the log level for the provided key * This function can be used to obtain log level when the actual * key stored in the Hash map is available with the caller * * @param handle DltLogstorage handle * @param key key to search for in Hash MAP * @return log level on success:, -1 on error */ int dlt_logstorage_get_loglevel_by_key(DltLogStorage *handle, char *key); /** * dlt_logstorage_write * * Write a message to one or more configured log files, based on filter * configuration. * * @param handle DltLogStorage handle * @param uconfig User configurations for log file * @param data1 Data buffer of message header * @param size1 Size of message header buffer * @param data2 Data buffer of extended message body * @param size2 Size of extended message body * @param data3 Data buffer of message body * @param size3 Size of message body * @return 0 on success or write errors < max write errors, -1 on error */ int dlt_logstorage_write(DltLogStorage *handle, DltLogStorageUserConfig *uconfig, unsigned char *data1, int size1, unsigned char *data2, int size2, unsigned char *data3, int size3); /** * dlt_logstorage_sync_caches * * Sync all caches inside the specified logstorage device. * * @param handle DltLogStorage handle * @return 0 on success, -1 otherwise */ int dlt_logstorage_sync_caches(DltLogStorage *handle); #endif /* DLT_OFFLINE_LOGSTORAGE_H */ dlt-daemon-2.18.6/src/offlinelogstorage/dlt_offline_logstorage_behavior.c000066400000000000000000001313611377520261000267020ustar00rootroot00000000000000/** * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT offline log storage functionality source file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Christoph Lipka ADIT 2015 * \author Syed Hameed ADIT 2015 * * \file: dlt_offline_logstorage_behavior.c * For further information see http://www.genivi.org/. */ #include #include #include #include #include #include #include #include #include #include "dlt_offline_logstorage.h" #include "dlt_offline_logstorage_behavior.h" #include "dlt_offline_logstorage_behavior_internal.h" unsigned int g_logstorage_cache_size; /** * dlt_logstorage_log_file_name * * Create log file name in the form configured by the user * \\\\\.dlt * * filename: given in configuration file * delimiter: Punctuation characters (configured in dlt.conf) * timestamp: yyyy-mm-dd-hh-mm-ss (enabled/disabled in dlt.conf) * index: Index len depends on wrap around value in dlt.conf * ex: wrap around = 99, index will 01..99 * * @param log_file_name contains complete logfile name * @param file_config User configurations for log file * @param name file name given in configuration file * @param idx continous index of log files * @ return None */ void dlt_logstorage_log_file_name(char *log_file_name, DltLogStorageUserConfig *file_config, char *name, int idx) { if ((log_file_name == NULL) || (file_config == NULL)) return; char file_index[10] = { '\0' }; /* create log file name */ memset(log_file_name, 0, DLT_MOUNT_PATH_MAX * sizeof(char)); strcat(log_file_name, name); strncat(log_file_name, &file_config->logfile_delimiter, 1); snprintf(file_index, 10, "%d", idx); if (file_config->logfile_maxcounter != UINT_MAX) { /* Setup 0's to be appended in file index until max index len*/ unsigned int digit_idx = 0; unsigned int i = 0; snprintf(file_index, 10, "%d", idx); digit_idx = (unsigned int) strlen(file_index); if (file_config->logfile_counteridxlen > digit_idx) { for (i = 0 ; i < (file_config->logfile_counteridxlen - digit_idx) ; i++) strcat(log_file_name, "0"); } } strcat(log_file_name, file_index); /* Add time stamp if user has configured */ if (file_config->logfile_timestamp) { char stamp[DLT_OFFLINE_LOGSTORAGE_TIMESTAMP_LEN + 1] = { 0 }; time_t t = time(NULL); struct tm tm_info; ssize_t n = 0; tzset(); localtime_r(&t, &tm_info); n = snprintf(stamp, DLT_OFFLINE_LOGSTORAGE_TIMESTAMP_LEN + 1, "%c%04d%02d%02d-%02d%02d%02d", file_config->logfile_delimiter, 1900 + tm_info.tm_year, 1 + tm_info.tm_mon, tm_info.tm_mday, tm_info.tm_hour, tm_info.tm_min, tm_info.tm_sec); if (n < 0 || (size_t)n > (DLT_OFFLINE_LOGSTORAGE_TIMESTAMP_LEN + 1)) { dlt_vlog(LOG_WARNING, "%s: snprintf truncation %s\n", __func__, stamp); } strcat(log_file_name, stamp); } strcat(log_file_name, ".dlt"); } /** * dlt_logstorage_sort_file_name * * Sort the filenames with index based ascending order (bubble sort) * * @param head Log filename list * @ return The last (biggest) index */ unsigned int dlt_logstorage_sort_file_name(DltLogStorageFileList **head) { int done = 0; unsigned int max_idx = 0; if ((head == NULL) || (*head == NULL) || ((*head)->next == NULL)) return 0; while (!done) { /* "source" of the pointer to the current node in the list struct */ DltLogStorageFileList **pv = head; DltLogStorageFileList *nd = *head; /* local iterator pointer */ DltLogStorageFileList *nx = (*head)->next; /* local next pointer */ done = 1; while (nx) { max_idx = nx->idx; if (nd->idx > nx->idx) { max_idx = nd->idx; nd->next = nx->next; nx->next = nd; *pv = nx; done = 0; } pv = &nd->next; nd = nx; nx = nx->next; } } return max_idx; } /** * dlt_logstorage_rearrange_file_name * * Rearrange the filenames in the order of latest and oldest * * @param head Log filename list * @ return None */ void dlt_logstorage_rearrange_file_name(DltLogStorageFileList **head) { DltLogStorageFileList *n_prev = NULL; DltLogStorageFileList *tail = NULL; DltLogStorageFileList *wrap_pre = NULL; DltLogStorageFileList *wrap_post = NULL; DltLogStorageFileList *n = NULL; if ((head == NULL) || (*head == NULL) || ((*head)->next == NULL)) return; if ((*head)->idx != 1) { /* Do not sort */ return; } for (n = *head; n != NULL; n = n->next) { /* Compare the diff between n->idx and n_prev->idx only if * wrap_post and wrap_pre are not set yet. Otherwise continue the loop * until the tail */ if (n && n_prev && !wrap_post && !wrap_pre) { if ((n->idx - n_prev->idx) != 1) { wrap_post = n; wrap_pre = n_prev; } } n_prev = n; } tail = n_prev; if (wrap_post && wrap_pre) { wrap_pre->next = NULL; tail->next = *head; *head = wrap_post; } } /** * dlt_logstorage_get_idx_of_log_file * * Extract index of log file name passed as input argument * * @param file file name to extract the index from * @param file_config User configurations for log file * @return index on success, -1 if no index is found */ unsigned int dlt_logstorage_get_idx_of_log_file(DltLogStorageUserConfig *file_config, char *file) { unsigned int idx = -1; char *endptr; char *filename; unsigned int filename_len = 0; unsigned int fileindex_len = 0; if ((file_config == NULL) || (file == NULL)) return -1; /* Calculate actual file name length */ filename = strchr(file, file_config->logfile_delimiter); if (filename == NULL) { dlt_vlog(LOG_ERR, "Cannot extract filename from %s\n", file); return -1; } filename_len = (unsigned int) (strlen(file) - strlen(filename)); /* index is retrived from file name */ if (file_config->logfile_timestamp) { fileindex_len = (unsigned int) strlen(file) - (DLT_OFFLINE_LOGSTORAGE_FILE_EXTENSION_LEN + DLT_OFFLINE_LOGSTORAGE_TIMESTAMP_LEN + filename_len + 1); idx = (unsigned int) strtol(&file[strlen(file) - (DLT_OFFLINE_LOGSTORAGE_FILE_EXTENSION_LEN + fileindex_len + DLT_OFFLINE_LOGSTORAGE_TIMESTAMP_LEN)], &endptr, 10); } else { fileindex_len = (unsigned int) strlen(file) - (DLT_OFFLINE_LOGSTORAGE_FILE_EXTENSION_LEN + filename_len + 1); idx = (unsigned int) strtol(&file[strlen(file) - (DLT_OFFLINE_LOGSTORAGE_FILE_EXTENSION_LEN + fileindex_len)], &endptr, 10); } if ((endptr == file) || (idx == 0)) dlt_log(LOG_ERR, "Unable to calculate index from log file name. Reset to 001.\n"); return idx; } /** * dlt_logstorage_storage_dir_info * * Read file names of storage directory. * Update the file list, arrange it in order of latest and oldest * * @param file_config User configurations for log file * @param path Path to storage directory * @param config DltLogStorageFilterConfig * @return 0 on success, -1 on error */ int dlt_logstorage_storage_dir_info(DltLogStorageUserConfig *file_config, char *path, DltLogStorageFilterConfig *config) { int check = 0; int i = 0; int cnt = 0; int ret = 0; unsigned int max_idx = 0; struct dirent **files = { 0 }; unsigned int current_idx = 0; DltLogStorageFileList *n = NULL; DltLogStorageFileList *n1 = NULL; if ((config == NULL) || (file_config == NULL) || (path == NULL) || (config->file_name == NULL)) return -1; cnt = scandir(path, &files, 0, alphasort); if (cnt < 0) { dlt_vlog(LOG_ERR, "%s: Failed to scan directory\n", __func__); return -1; } dlt_vlog(LOG_DEBUG, "%s: Scanned [%d] files from %s\n", __func__, cnt, path); /* In order to have a latest status of file list, * the existing records must be deleted before updating */ n = config->records; if (config->records) { while (n) { n1 = n; n = n->next; free(n1->name); n1->name = NULL; free(n1); n1 = NULL; } config->records = NULL; } for (i = 0; i < cnt; i++) { size_t len = 0; len = strlen(config->file_name); if ((strncmp(files[i]->d_name, config->file_name, len) == 0) && (files[i]->d_name[len] == file_config->logfile_delimiter)) { DltLogStorageFileList **tmp = NULL; current_idx = dlt_logstorage_get_idx_of_log_file(file_config, files[i]->d_name); if (config->records == NULL) { config->records = malloc(sizeof(DltLogStorageFileList)); if (config->records == NULL) { ret = -1; dlt_log(LOG_ERR, "Memory allocation failed\n"); break; } tmp = &config->records; } else { tmp = &config->records; while (*(tmp) != NULL) tmp = &(*tmp)->next; *tmp = malloc(sizeof(DltLogStorageFileList)); if (*tmp == NULL) { ret = -1; dlt_log(LOG_ERR, "Memory allocation failed\n"); break; } } (*tmp)->name = strdup(files[i]->d_name); (*tmp)->idx = current_idx; (*tmp)->next = NULL; check++; } } dlt_vlog(LOG_DEBUG, "%s: After dir scan: [%d] files of [%s]\n", __func__, check, config->file_name); if (ret == 0) { max_idx = dlt_logstorage_sort_file_name(&config->records); /* Fault tolerance: * In case there are some log files are removed but * the index is still not reaching maxcounter, no need * to perform rearrangement of filename. * This would help the log keeps growing until maxcounter is reached and * the maximum number of log files could be obtained. */ if (max_idx == file_config->logfile_maxcounter) dlt_logstorage_rearrange_file_name(&config->records); } /* free scandir result */ for (i = 0; i < cnt; i++) free(files[i]); free(files); return ret; } /** * dlt_logstorage_open_log_file * * Open a log file. Check storage directory for already created files and open * the oldest if there is enough space to store at least msg_size. * Otherwise create a new file, but take configured max number of files into * account and remove the oldest file if needed. * * @param config DltLogStorageFilterConfig * @param file_config User configurations for log file * @param dev_path Storage device path * @param msg_size Size of incoming message * @param is_update_required The file list needs to be updated * @return 0 on succes, -1 on error */ int dlt_logstorage_open_log_file(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, int msg_size, bool is_update_required) { int ret = 0; char absolute_file_path[DLT_MOUNT_PATH_MAX + DLT_OFFLINE_LOGSTORAGE_CONFIG_DIR_PATH_LEN + 1] = { '\0' }; char storage_path[DLT_OFFLINE_LOGSTORAGE_CONFIG_DIR_PATH_LEN + 1] = { '\0' }; unsigned int num_log_files = 0; struct stat s; DltLogStorageFileList **tmp = NULL; DltLogStorageFileList **newest = NULL; char file_name[DLT_MOUNT_PATH_MAX + 1] = { '\0' }; if (config == NULL) return -1; if (strlen(dev_path) > DLT_OFFLINE_LOGSTORAGE_CONFIG_DIR_PATH_LEN) { dlt_vlog(LOG_ERR, "device path '%s' is too long to store\n", dev_path); return -1; } snprintf(storage_path, DLT_OFFLINE_LOGSTORAGE_CONFIG_DIR_PATH_LEN, "%s/", dev_path); /* check if there are already files stored */ if (config->records == NULL || is_update_required) { if (dlt_logstorage_storage_dir_info(file_config, storage_path, config) != 0) return -1; } /* obtain locations of newest, current file names, file count */ tmp = &config->records; while (*(tmp) != NULL) { num_log_files += 1; if ((*tmp)->next == NULL) newest = tmp; tmp = &(*tmp)->next; } /* need new file*/ if (num_log_files == 0) { dlt_logstorage_log_file_name(file_name, file_config, config->file_name, 1); /* concatenate path and file and open absolute path */ strcat(absolute_file_path, storage_path); strcat(absolute_file_path, file_name); config->working_file_name = strdup(file_name); config->log = fopen(absolute_file_path, "a+"); /* Add file to file list */ *tmp = malloc(sizeof(DltLogStorageFileList)); if (*tmp == NULL) { dlt_log(LOG_ERR, "Memory allocation for file name failed\n"); return -1; } (*tmp)->name = strdup(file_name); (*tmp)->idx = 1; (*tmp)->next = NULL; } else { strcat(absolute_file_path, storage_path); /* newest file available * Since the working file is already updated from newest file info * So if there is already wrap-up, the newest file will be the working file */ if ((config->wrap_id == 0) || (config->working_file_name == NULL)) { if (config->working_file_name != NULL) { free(config->working_file_name); config->working_file_name = NULL; } config->working_file_name = strdup((*newest)->name); } strcat(absolute_file_path, config->working_file_name); dlt_vlog(LOG_DEBUG, "%s: Number of log files-newest file-wrap_id [%d]-[%s]-[%d]\n", __func__, num_log_files, config->working_file_name, config->wrap_id); ret = stat(absolute_file_path, &s); /* if size is enough, open it */ if ((ret == 0) && (s.st_size + msg_size <= (int) config->file_size)) { config->log = fopen(absolute_file_path, "a+"); config->current_write_file_offset = (unsigned int) s.st_size; } else { /* no space in file or file stats cannot be read */ unsigned int idx = 0; /* get index of newest log file */ idx = dlt_logstorage_get_idx_of_log_file(file_config, config->working_file_name); idx += 1; /* wrap around if max index is reached or an error occurred * while calculating index from file name */ if ((idx > file_config->logfile_maxcounter) || (idx == 0)) { idx = 1; config->wrap_id += 1; } dlt_logstorage_log_file_name(file_name, file_config, config->file_name, (int) idx); /* concatenate path and file and open absolute path */ memset(absolute_file_path, 0, sizeof(absolute_file_path) / sizeof(char)); strcat(absolute_file_path, storage_path); strcat(absolute_file_path, file_name); if(config->working_file_name) { free(config->working_file_name); config->working_file_name = strdup(file_name); } /* If there is already wrap-up, check the existence of file * remove it and reopen it. * In this case number of log file won't be increased*/ if (config->wrap_id && stat(absolute_file_path, &s) == 0) { remove(absolute_file_path); num_log_files -= 1; dlt_vlog(LOG_DEBUG, "%s: Remove '%s' (num_log_files: %d, config->num_files:%d)\n", __func__, absolute_file_path, num_log_files, config->num_files); } config->log = fopen(absolute_file_path, "a+"); dlt_vlog(LOG_DEBUG, "%s: Filename and Index after updating [%s]-[%d]\n", __func__, file_name, idx); /* Add file to file list */ *tmp = malloc(sizeof(DltLogStorageFileList)); if (*tmp == NULL) { dlt_log(LOG_ERR, "Memory allocation for file name failed\n"); return -1; } (*tmp)->name = strdup(file_name); (*tmp)->idx = idx; (*tmp)->next = NULL; num_log_files += 1; /* check if number of log files exceeds configured max value */ if (num_log_files > config->num_files) { /* delete oldest */ DltLogStorageFileList **head = &config->records; DltLogStorageFileList *n = *head; memset(absolute_file_path, 0, sizeof(absolute_file_path) / sizeof(char)); strcat(absolute_file_path, storage_path); strcat(absolute_file_path, (*head)->name); dlt_vlog(LOG_DEBUG, "%s: Remove '%s' (num_log_files: %d, config->num_files:%d)\n", __func__, absolute_file_path, num_log_files, config->num_files); remove(absolute_file_path); free((*head)->name); (*head)->name = NULL; *head = n->next; n->next = NULL; free(n); } } } if (config->log == NULL) { if (*tmp != NULL) { if ((*tmp)->name != NULL) { free((*tmp)->name); (*tmp)->name = NULL; } free(*tmp); *tmp = NULL; } if (config->working_file_name != NULL) { free(config->working_file_name); config->working_file_name = NULL; } dlt_vlog(LOG_ERR, "%s: Unable to open log file.\n", __func__); return -1; } return ret; } /** * dlt_logstorage_find_dlt_header * * search for dlt header in cache * * @param ptr cache starting position * @param offset offset * @param cnt count * @return index on success, -1 on error */ DLT_STATIC int dlt_logstorage_find_dlt_header(void *ptr, unsigned int offset, unsigned int cnt) { const char magic[] = { 'D', 'L', 'T', 0x01 }; const char *cache = (char*)ptr + offset; unsigned int i; for (i = 0; i < cnt; i++) { if ((cache[i] == 'D') && (strncmp(&cache[i], magic, 4) == 0)) return i; } return -1; } /** * dlt_logstorage_find_last_dlt_header * * search for last dlt header in cache * * @param ptr cache starting position * @param offset offset * @param cnt count * @return index on success, -1 on error */ DLT_STATIC int dlt_logstorage_find_last_dlt_header(void *ptr, unsigned int offset, unsigned int cnt) { const char magic[] = {'D', 'L', 'T', 0x01}; const char *cache = (char*)ptr + offset; unsigned int i; for (i = cnt; i > 0; i--) { if ((cache[i] == 'D') && (strncmp(&cache[i], magic, 4) == 0)) return i; } return -1; } /** * dlt_logstorage_check_write_ret * * check the return value of fwrite * * @param config DltLogStorageFilterConfig * @param ret return value of fwrite call */ DLT_STATIC void dlt_logstorage_check_write_ret(DltLogStorageFilterConfig *config, int ret) { if (config == NULL) dlt_vlog(LOG_ERR, "%s: cannot retrieve config information\n", __func__); if (ret <= 0) { if (ferror(config->log) != 0) dlt_vlog(LOG_ERR, "%s: failed to write cache into log file\n", __func__); } else { /* force sync */ if (fflush(config->log) != 0) dlt_vlog(LOG_ERR, "%s: failed to flush log file\n", __func__); if (fsync(fileno(config->log)) != 0) /* some filesystem doesn't support fsync() */ if (errno != ENOSYS) { dlt_vlog(LOG_ERR, "%s: failed to sync log file\n", __func__); } } } /** * dlt_logstorage_sync_to_file * * Write the log message to log file * * @param config DltLogStorageFilterConfig * @param file_config DltLogStorageUserConfig * @param dev_path Storage device mount point path * @param footer DltLogStorageCacheFooter * @param start_offset Start offset of the cache * @param end_offset End offset of the cache * @return 0 on success, -1 on error */ DLT_STATIC int dlt_logstorage_sync_to_file(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, DltLogStorageCacheFooter *footer, unsigned int start_offset, unsigned int end_offset) { int ret = 0; int start_index = 0; int end_index = 0; unsigned int count = 0; unsigned int remain_file_size = 0; if ((config == NULL) || (file_config == NULL) || (dev_path == NULL) || (footer == NULL)) { dlt_vlog(LOG_ERR, "%s: cannot retrieve config information\n", __func__); return -1; } count = end_offset - start_offset; /* In case of cached-based strategy, the newest file information * must be updated everytime of synchronization. */ if (config->log) { fclose(config->log); config->log = NULL; config->current_write_file_offset = 0; } if (dlt_logstorage_open_log_file(config, file_config, dev_path, (int) count, true) != 0) { dlt_vlog(LOG_ERR, "%s: failed to open log file\n", __func__); return -1; } remain_file_size = config->file_size - config->current_write_file_offset; if (count > remain_file_size) { /* Check if more than one message can fit into the remaining file */ start_index = dlt_logstorage_find_dlt_header(config->cache, start_offset, remain_file_size); end_index = dlt_logstorage_find_last_dlt_header(config->cache, start_offset + (unsigned int) start_index, remain_file_size - (unsigned int) start_index); count = (unsigned int) (end_index - start_index); if ((start_index >= 0) && (end_index > start_index) && (count > 0) && (count <= remain_file_size)) { ret = (int) fwrite((uint8_t*)config->cache + start_offset + start_index, count, 1, config->log); dlt_logstorage_check_write_ret(config, ret); /* Close log file */ fclose(config->log); config->log = NULL; config->current_write_file_offset = 0; footer->last_sync_offset = start_offset + count; start_offset = footer->last_sync_offset; } else { /* Close log file */ fclose(config->log); config->log = NULL; config->current_write_file_offset = 0; } } start_index = dlt_logstorage_find_dlt_header(config->cache, start_offset, count); count = end_offset - start_offset - (unsigned int) start_index; if ((start_index >= 0) && (count > 0)) { /* Prepare log file */ if (config->log == NULL) { if (dlt_logstorage_prepare_on_msg(config, file_config, dev_path, (int) count, NULL) != 0) { dlt_vlog(LOG_ERR, "%s: failed to prepare log file\n", __func__); return -1; } } ret = (int) fwrite((uint8_t*)config->cache + start_offset + start_index, count, 1, config->log); dlt_logstorage_check_write_ret(config, ret); config->current_write_file_offset += count; footer->last_sync_offset = end_offset; } footer->wrap_around_cnt = 0; return 0; } /** * dlt_logstorage_prepare_on_msg * * Prepare the log file for a certain filer. If log file not open or log * files max size reached, open a new file. * * @param config DltLogStorageFilterConfig * @param file_config User configurations for log file * @param dev_path Storage device path * @param log_msg_size Size of log message * @param newest_file_info Info of newest file for corresponding filename * @return 0 on success, -1 on error */ int dlt_logstorage_prepare_on_msg(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, int log_msg_size, DltNewestFileName *newest_file_info) { int ret = 0; struct stat s; if ((config == NULL) || (file_config == NULL) || (dev_path == NULL) || (newest_file_info == NULL)) { dlt_vlog(LOG_INFO, "Wrong paratemters\n"); return -1; } /* This is for ON_MSG/UNSET strategy */ if (config->log == NULL) { /* Sync the wrap id and working file name before opening log file */ if (config->wrap_id < newest_file_info->wrap_id) { config->wrap_id = newest_file_info->wrap_id; if (config->working_file_name) { free(config->working_file_name); config->working_file_name = NULL; } config->working_file_name = strdup(newest_file_info->newest_file); } /* open a new log file */ ret = dlt_logstorage_open_log_file(config, file_config, dev_path, log_msg_size, true); } else { /* already open, check size and create a new file if needed */ ret = fstat(fileno(config->log), &s); if (ret == 0) { /* check if adding new data do not exceed max file size */ /* Check if wrap id needs to be updated*/ if ((s.st_size + log_msg_size > (int)config->file_size) || (strcmp(config->working_file_name, newest_file_info->newest_file) != 0) || (config->wrap_id < newest_file_info->wrap_id)) { fclose(config->log); config->log = NULL; /* Sync the wrap id and working file name before opening log file */ if (config->wrap_id <= newest_file_info->wrap_id) { config->wrap_id = newest_file_info->wrap_id; if (config->working_file_name) { free(config->working_file_name); config->working_file_name = NULL; } config->working_file_name = strdup(newest_file_info->newest_file); } ret = dlt_logstorage_open_log_file(config, file_config, dev_path, log_msg_size, true); } else { /*everything is prepared */ ret = 0; } } else { dlt_log(LOG_ERR, "dlt_logstorage_prepare_log_file: stat() failed.\n"); ret = -1; } } return ret; } /** * dlt_logstorage_write_on_msg * * Write the log message. * * @param config DltLogStorageFilterConfig * @param file_config DltLogStorageUserConfig * @param dev_path Path to device * @param data1 header * @param size1 header size * @param data2 storage header * @param size2 storage header size * @param data3 payload * @param size3 payload size * @return 0 on success, -1 on error */ int dlt_logstorage_write_on_msg(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, unsigned char *data1, int size1, unsigned char *data2, int size2, unsigned char *data3, int size3) { int ret; if ((config == NULL) || (data1 == NULL) || (data2 == NULL) || (data3 == NULL) || (file_config == NULL) || (dev_path == NULL)) { return -1; } ret = (int) fwrite(data1, 1, (size_t) size1, config->log); if (ret != size1) dlt_log(LOG_WARNING, "Wrote less data than specified\n"); ret = (int) fwrite(data2, 1, (size_t) size2, config->log); if (ret != size2) dlt_log(LOG_WARNING, "Wrote less data than specified\n"); ret = (int) fwrite(data3, 1, (size_t) size3, config->log); if (ret != size3) dlt_log(LOG_WARNING, "Wrote less data than specified\n"); return ferror(config->log); } /** * dlt_logstorage_sync_on_msg * * sync data to disk. * * @param config DltLogStorageFilterConfig * @param file_config User configurations for log file * @param dev_path Storage device path * @param status Strategy flag * @return 0 on success, -1 on error */ int dlt_logstorage_sync_on_msg(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, int status) { int ret; (void)file_config; /* satisfy compiler */ (void)dev_path; if (config == NULL) return -1; if (status == DLT_LOGSTORAGE_SYNC_ON_MSG) { /* sync on every message */ ret = fflush(config->log); if (ret != 0) dlt_log(LOG_ERR, "fflush failed\n"); } return 0; } /** * dlt_logstorage_prepare_msg_cache * * Prepare the log file for a certain filer. If log file not open or log * files max size reached, open a new file. * Create a memory area to cache data. * * @param config DltLogStorageFilterConfig * @param file_config User configurations for log file * @param dev_path Storage device path * @param log_msg_size Size of log message * @param newest_file_info Info of newest files for corresponding filename * @return 0 on success, -1 on error */ int dlt_logstorage_prepare_msg_cache(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, int log_msg_size, DltNewestFileName *newest_file_info ) { if ((config == NULL) || (file_config == NULL) || (dev_path == NULL) || (newest_file_info == NULL)) return -1; /* check if newest file info is available * + working file name is NULL => update directly to newest file * + working file name is not NULL: check if * ++ wrap_ids are different from each other or * ++ newest file name <> working file name */ if (newest_file_info->newest_file) { if (config->working_file_name && ((config->wrap_id != newest_file_info->wrap_id) || (strcmp(newest_file_info->newest_file, config->working_file_name) != 0))) { free(config->working_file_name); config->working_file_name = NULL; } if (config->working_file_name == NULL) { config->working_file_name = strdup(newest_file_info->newest_file); config->wrap_id = newest_file_info->wrap_id; } } /* Combinations allowed: on Daemon_Exit with on Demand,File_Size with Daemon_Exit * File_Size with on Demand, Specific_Size with Daemon_Exit,Specific_Size with on Demand * Combination not allowed : File_Size with Specific_Size */ /* check for combinations of specific_size and file_size strategy */ if ((DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(config->sync, DLT_LOGSTORAGE_SYNC_ON_SPECIFIC_SIZE) > 0) && ((DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(config->sync, DLT_LOGSTORAGE_SYNC_ON_FILE_SIZE)) > 0)) { dlt_log(LOG_WARNING, "wrong combination of sync strategies \n"); return -1; } (void)log_msg_size; /* satisfy compiler */ /* check specific size is smaller than file size */ if ((DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(config->sync, DLT_LOGSTORAGE_SYNC_ON_SPECIFIC_SIZE) > 0) && (config->specific_size > config->file_size)) { dlt_log(LOG_ERR, "Cache size is larger than file size. " "Cannot prepare log file for ON_SPECIFIC_SIZE sync\n"); return -1; } if (config->cache == NULL) { unsigned int cache_size = 0; /* check for sync_specific_size strategy */ if (DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(config->sync, DLT_LOGSTORAGE_SYNC_ON_SPECIFIC_SIZE) > 0) { cache_size = config->specific_size; } else /* other cache strategies */ { cache_size = config->file_size; } /* check total logstorage cache size */ if ((g_logstorage_cache_size + cache_size + sizeof(DltLogStorageCacheFooter)) > g_logstorage_cache_max) { dlt_log(LOG_ERR, "Max size of Logstorage Cache already used."); return -1; } /* create cache */ config->cache = calloc(1, cache_size + sizeof(DltLogStorageCacheFooter)); if (config->cache == NULL) { dlt_log(LOG_CRIT, "Cannot allocate memory for filter ring buffer\n"); } else { /* update current used cache size */ g_logstorage_cache_size = (unsigned int) (cache_size + sizeof(DltLogStorageCacheFooter)); } } return 0; } /** * dlt_logstorage_write_msg_cache * * Write the log message. * * @param config DltLogStorageFilterConfig * @param file_config User configurations for log file * @param dev_path Storage device path * @param data1 header * @param size1 header size * @param data2 storage header * @param size2 storage header size * @param data3 payload * @param size3 payload size * @return 0 on success, -1 on error */ int dlt_logstorage_write_msg_cache(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, unsigned char *data1, int size1, unsigned char *data2, int size2, unsigned char *data3, int size3) { DltLogStorageCacheFooter *footer = NULL; unsigned int msg_size; unsigned int remain_cache_size; uint8_t *curr_write_addr = NULL; int ret = 0; unsigned int cache_size; if ((config == NULL) || (data1 == NULL) || (size1 < 0) || (data2 == NULL) || (size2 < 0) || (data3 == NULL) || (size3 < 0) || (config->cache == NULL) || (file_config == NULL) || (dev_path == NULL)) { return -1; } if (DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(config->sync, DLT_LOGSTORAGE_SYNC_ON_SPECIFIC_SIZE) > 0) { cache_size = config->specific_size; } else { cache_size = config->file_size; } footer = (DltLogStorageCacheFooter *)((uint8_t*)config->cache + cache_size); if (footer == NULL) { dlt_log(LOG_ERR, "Cannot retrieve cache footer. Address is NULL\n"); return -1; } msg_size = (unsigned int) (size1 + size2 + size3); remain_cache_size = cache_size - footer->offset; if (msg_size <= remain_cache_size) /* add at current position */ { curr_write_addr = (uint8_t*)config->cache + footer->offset; footer->offset += (unsigned int) msg_size; if (footer->wrap_around_cnt < 1) { footer->end_sync_offset = footer->offset; } /* write data to cache */ memcpy(curr_write_addr, data1, (size_t) size1); curr_write_addr += size1; memcpy(curr_write_addr, data2, (size_t) size2); curr_write_addr += size2; memcpy(curr_write_addr, data3, (size_t) size3); } /* * In case the msg_size is equal to remaining cache size, * the message is still written in cache. * Then whole cache data is synchronized to file. */ if (msg_size >= remain_cache_size) { /*check for message size exceeds cache size for specific_size strategy */ if ((unsigned int) msg_size > cache_size) { dlt_log(LOG_WARNING, "Message is larger than cache. Discard.\n"); return -1; } /*sync to file for specific_size or file_size */ if (DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(config->sync, DLT_LOGSTORAGE_SYNC_ON_FILE_SIZE) > 0) { ret = config->dlt_logstorage_sync(config, file_config, dev_path, DLT_LOGSTORAGE_SYNC_ON_FILE_SIZE); if (ret != 0) { dlt_log(LOG_ERR,"dlt_logstorage_sync: Unable to sync.\n"); return -1; } } else if (DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(config->sync, DLT_LOGSTORAGE_SYNC_ON_SPECIFIC_SIZE) > 0) { ret = config->dlt_logstorage_sync(config, file_config, dev_path, DLT_LOGSTORAGE_SYNC_ON_SPECIFIC_SIZE); if (ret != 0) { dlt_log(LOG_ERR,"dlt_logstorage_sync: Unable to sync.\n"); return -1; } } else if ((DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(config->sync, DLT_LOGSTORAGE_SYNC_ON_DEMAND) > 0) || (DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(config->sync, DLT_LOGSTORAGE_SYNC_ON_DAEMON_EXIT) > 0)) { footer->wrap_around_cnt += 1; } if (msg_size > remain_cache_size) { /* start writing from beginning */ footer->end_sync_offset = footer->offset; curr_write_addr = config->cache; footer->offset = (unsigned int) msg_size; /* write data to cache */ memcpy(curr_write_addr, data1, (size_t) size1); curr_write_addr += size1; memcpy(curr_write_addr, data2, (size_t) size2); curr_write_addr += size2; memcpy(curr_write_addr, data3, (size_t) size3); } } return 0; } /** * dlt_logstorage_sync_msg_cache * * sync data to disk. * * @param config DltLogStorageFilterConfig * @param file_config User configurations for log file * @param dev_path Storage device path * @param status Strategy flag * @return 0 on success, -1 on error */ int dlt_logstorage_sync_msg_cache(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, int status) { unsigned int cache_size; DltLogStorageCacheFooter *footer = NULL; if ((config == NULL) || (file_config == NULL) || (dev_path == NULL)) { return -1; } /* sync only, if given strategy is set */ if (DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(config->sync, status) > 0) { if (config->cache == NULL) { dlt_log(LOG_ERR, "Cannot copy cache to file. Cache is NULL\n"); return -1; } if (DLT_OFFLINE_LOGSTORAGE_IS_STRATEGY_SET(config->sync, DLT_LOGSTORAGE_SYNC_ON_SPECIFIC_SIZE) > 0) { cache_size = config->specific_size; } else { cache_size = config->file_size; } footer = (DltLogStorageCacheFooter *)((uint8_t*)config->cache + cache_size); if (footer == NULL) { dlt_log(LOG_ERR, "Cannot retrieve cache information\n"); return -1; } /* sync cache data to file */ if (footer->wrap_around_cnt < 1) { /* Sync whole cache */ dlt_logstorage_sync_to_file(config, file_config, dev_path, footer, footer->last_sync_offset, footer->offset); } else if ((footer->wrap_around_cnt == 1) && (footer->offset < footer->last_sync_offset)) { /* sync (1) footer->last_sync_offset to footer->end_sync_offset, * and (2) footer->last_sync_offset (= 0) to footer->offset */ dlt_logstorage_sync_to_file(config, file_config, dev_path, footer, footer->last_sync_offset, footer->end_sync_offset); footer->last_sync_offset = 0; dlt_logstorage_sync_to_file(config, file_config, dev_path, footer, footer->last_sync_offset, footer->offset); } else { /* sync (1) footer->offset + index to footer->end_sync_offset, * and (2) footer->last_sync_offset (= 0) to footer->offset */ dlt_logstorage_sync_to_file(config, file_config, dev_path, footer, footer->offset, footer->end_sync_offset); footer->last_sync_offset = 0; dlt_logstorage_sync_to_file(config, file_config, dev_path, footer, footer->last_sync_offset, footer->offset); } /* Initialize cache if needed */ if ((status == DLT_LOGSTORAGE_SYNC_ON_SPECIFIC_SIZE) || (status == DLT_LOGSTORAGE_SYNC_ON_FILE_SIZE)) { /* clean ring buffer and reset footer information */ memset(config->cache, 0, cache_size + sizeof(DltLogStorageCacheFooter)); } if (status == DLT_LOGSTORAGE_SYNC_ON_FILE_SIZE) { /* Close log file */ fclose(config->log); config->log = NULL; config->current_write_file_offset = 0; } } return 0; } dlt-daemon-2.18.6/src/offlinelogstorage/dlt_offline_logstorage_behavior.h000066400000000000000000000123051377520261000267030ustar00rootroot00000000000000/** * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT offline log storage functionality header file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Christoph Lipka ADIT 2015 * * \file: dlt_offline_logstorage_behavior.h * For further information see http://www.genivi.org/. */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_offline_logstorage_behavior.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Christoph Lipka clipka@jp.adit-jv.com ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** cl Christoph Lipka ADIT ** *******************************************************************************/ #ifndef DLT_OFFLINELOGSTORAGE_DLT_OFFLINE_LOGSTORAGE_BEHAVIOR_H_ #define DLT_OFFLINELOGSTORAGE_DLT_OFFLINE_LOGSTORAGE_BEHAVIOR_H_ /* ON_MSG behavior */ int dlt_logstorage_prepare_on_msg(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, int log_msg_size, DltNewestFileName *newest_file_info); int dlt_logstorage_write_on_msg(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, unsigned char *data1, int size1, unsigned char *data2, int size2, unsigned char *data3, int size3); /* status is strategy, e.g. DLT_LOGSTORAGE_SYNC_ON_MSG is used when callback * is called on message received */ int dlt_logstorage_sync_on_msg(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, int status); /* Logstorage cache functionality */ int dlt_logstorage_prepare_msg_cache(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, int log_msg_size, DltNewestFileName *newest_file_info); int dlt_logstorage_write_msg_cache(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, unsigned char *data1, int size1, unsigned char *data2, int size2, unsigned char *data3, int size3); int dlt_logstorage_sync_msg_cache(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, int status); #endif /* DLT_OFFLINELOGSTORAGE_DLT_OFFLINE_LOGSTORAGE_BEHAVIOR_H_ */ dlt-daemon-2.18.6/src/offlinelogstorage/dlt_offline_logstorage_behavior_internal.h000066400000000000000000000114041377520261000305760ustar00rootroot00000000000000/** * Copyright (C) 2018 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT offline log storage functionality internal header file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Aditya Paluri ADIT 2018 * * \file: dlt_offline_logstorage_behavior_internal.h * For further information see http://www.genivi.org/. */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_offline_logstorage_behavior_internal.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Aditya Paluri venkataaditya.paluri@in.bosch.com ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** ap Aditya Paluri ADIT ** *******************************************************************************/ #ifndef DLT_OFFLINELOGSTORAGE_BEHAVIOR_INTERNAL_H_ #define DLT_OFFLINELOGSTORAGE_BEHAVIOR_INTERNAL_H_ void dlt_logstorage_log_file_name(char *log_file_name, DltLogStorageUserConfig *file_config, char *name, int idx); unsigned int dlt_logstorage_sort_file_name(DltLogStorageFileList **head); void dlt_logstorage_rearrange_file_name(DltLogStorageFileList **head); unsigned int dlt_logstorage_get_idx_of_log_file(DltLogStorageUserConfig *file_config, char *file); int dlt_logstorage_storage_dir_info(DltLogStorageUserConfig *file_config, char *path, DltLogStorageFilterConfig *config); int dlt_logstorage_open_log_file(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, int msg_size, bool is_update_required); DLT_STATIC int dlt_logstorage_sync_to_file(DltLogStorageFilterConfig *config, DltLogStorageUserConfig *file_config, char *dev_path, DltLogStorageCacheFooter *footer, unsigned int start_offset, unsigned int end_offset); DLT_STATIC int dlt_logstorage_find_dlt_header(void *ptr, unsigned int offset, unsigned int cnt); DLT_STATIC int dlt_logstorage_find_last_dlt_header(void *ptr, unsigned int offset, unsigned int cnt); #endif /* DLT_OFFLINELOGSTORAGE_BEHAVIOR_INTERNAL_H_ */ dlt-daemon-2.18.6/src/offlinelogstorage/dlt_offline_logstorage_internal.h000066400000000000000000000141201377520261000267150ustar00rootroot00000000000000/** * Copyright (C) 2017 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * DLT offline log storage functionality internal header file. * * \copyright * This Source Code Form is subject to the terms of the * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * \author Aditya Paluri ADIT 2017 * * \file: dlt_offline_logstorage_internal.h * For further information see http://www.genivi.org/. */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_offline_logstorage_internal.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Aditya Paluri venkataaditya.paluri@in.bosch.com ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** ap Aditya Paluri ADIT ** *******************************************************************************/ #ifndef DLT_OFFLINE_LOGSTORAGE_INTERNAL_H #define DLT_OFFLINE_LOGSTORAGE_INTERNAL_H DLT_STATIC int dlt_logstorage_list_destroy(DltLogStorageFilterList **list, DltLogStorageUserConfig *uconfig, char *dev_path, int reason); DLT_STATIC int dlt_logstorage_list_add_config(DltLogStorageFilterConfig *data, DltLogStorageFilterConfig **listdata); DLT_STATIC int dlt_logstorage_list_add(char *key, int num_keys, DltLogStorageFilterConfig *data, DltLogStorageFilterList **list); DLT_STATIC int dlt_logstorage_list_find(char *key, DltLogStorageFilterList **list, DltLogStorageFilterConfig **config); DLT_STATIC int dlt_logstorage_count_ids(const char *str); DLT_STATIC int dlt_logstorage_read_number(unsigned int *number, char *value); DLT_STATIC int dlt_logstorage_read_list_of_names(char **names, char *value); DLT_STATIC int dlt_logstorage_check_apids(DltLogStorageFilterConfig *config, char *value); DLT_STATIC int dlt_logstorage_check_ctids(DltLogStorageFilterConfig *config, char *value); DLT_STATIC int dlt_logstorage_check_loglevel(DltLogStorageFilterConfig *config, char *value); DLT_STATIC int dlt_logstorage_check_filename(DltLogStorageFilterConfig *config, char *value); DLT_STATIC int dlt_logstorage_check_filesize(DltLogStorageFilterConfig *config, char *value); DLT_STATIC int dlt_logstorage_check_nofiles(DltLogStorageFilterConfig *config, char *value); DLT_STATIC int dlt_logstorage_check_sync_strategy(DltLogStorageFilterConfig *config, char *value); DLT_STATIC int dlt_logstorage_check_ecuid(DltLogStorageFilterConfig *config, char *value); DLT_STATIC int dlt_logstorage_check_param(DltLogStorageFilterConfig *config, DltLogstorageFilterConfType ctype, char *value); DLT_STATIC int dlt_logstorage_store_filters(DltLogStorage *handle, char *config_file_name); void dlt_logstorage_free(DltLogStorage *handle, int reason); DLT_STATIC int dlt_logstorage_create_keys(char *apids, char *ctids, char *ecuid, char **keys, int *num_keys); DLT_STATIC int dlt_logstorage_prepare_table(DltLogStorage *handle, DltLogStorageFilterConfig *data); DLT_STATIC int dlt_logstorage_validate_filter_name(char *name); DLT_STATIC void dlt_logstorage_filter_set_strategy(DltLogStorageFilterConfig *config, int strategy); DLT_STATIC int dlt_logstorage_load_config(DltLogStorage *handle); DLT_STATIC int dlt_logstorage_filter(DltLogStorage *handle, DltLogStorageFilterConfig **config, char *apid, char *ctid, char *ecuid, int log_level); #endif /* DLT_OFFLINE_LOGSTORAGE_INTERNAL_H */ dlt-daemon-2.18.6/src/shared/000077500000000000000000000000001377520261000156745ustar00rootroot00000000000000dlt-daemon-2.18.6/src/shared/dlt_common.c000066400000000000000000003653761377520261000202170ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Alexander Wenzel * Markus Klein * Mikko Rapeli * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_common.c */ #include #include /* for malloc(), free() */ #include /* for strlen(), memcmp(), memmove() */ #include /* for localtime_r(), strftime() */ #include /* for NAME_MAX */ #include /* for PRI formatting macro */ #include #include #include #include /* for mkdir() */ #include #include "dlt_user_shared.h" #include "dlt_common.h" #include "dlt_common_cfg.h" #include "dlt_version.h" #if defined (__WIN32__) || defined (_MSC_VER) # include /* for socket(), connect(), send(), and recv() */ #else # include /* for socket(), connect(), send(), and recv() */ # include # include /* for clock_gettime() */ #endif #if defined (_MSC_VER) # include #else # include /* for read(), close() */ # include /* for gettimeofday() */ #endif #if defined (__MSDOS__) || defined (_MSC_VER) # pragma warning(disable : 4996) /* Switch off C4996 warnings */ # include # include #endif const char dltSerialHeader[DLT_ID_SIZE] = { 'D', 'L', 'S', 1 }; char dltSerialHeaderChar[DLT_ID_SIZE] = { 'D', 'L', 'S', 1 }; #if defined DLT_DAEMON_USE_FIFO_IPC || defined DLT_LIB_USE_FIFO_IPC char dltFifoBaseDir[DLT_PATH_MAX] = "/tmp"; #endif #ifdef DLT_SHM_ENABLE char dltShmName[NAME_MAX + 1] = "/dlt-shm"; #endif /* internal logging parameters */ static int logging_mode = DLT_LOG_TO_CONSOLE; static int logging_level = LOG_INFO; static char logging_filename[NAME_MAX + 1] = ""; static FILE *logging_handle = NULL; char *message_type[] = { "log", "app_trace", "nw_trace", "control", "", "", "", "" }; char *log_info[] = { "", "fatal", "error", "warn", "info", "debug", "verbose", "", "", "", "", "", "", "", "", "" }; char *trace_type[] = { "", "variable", "func_in", "func_out", "state", "vfb", "", "", "", "", "", "", "", "", "", "" }; char *nw_trace_type[] = { "", "ipc", "can", "flexray", "most", "vfb", "", "", "", "", "", "", "", "", "", "" }; char *control_type[] = { "", "request", "response", "time", "", "", "", "", "", "", "", "", "", "", "", "" }; static char *service_id_name[] = { "", "set_log_level", "set_trace_status", "get_log_info", "get_default_log_level", "store_config", "reset_to_factory_default", "set_com_interface_status", "set_com_interface_max_bandwidth", "set_verbose_mode", "set_message_filtering", "set_timing_packets", "get_local_time", "use_ecu_id", "use_session_id", "use_timestamp", "use_extended_header", "set_default_log_level", "set_default_trace_status", "get_software_version", "message_buffer_overflow" }; static char *return_type[] = { "ok", "not_supported", "error", "perm_denied", "warning", "", "", "", "no_matching_context_id" }; /* internal function definitions */ int dlt_buffer_get(DltBuffer *buf, unsigned char *data, int max_size, int delete); int dlt_buffer_reset(DltBuffer *buf); int dlt_buffer_increase_size(DltBuffer *buf); int dlt_buffer_minimize_size(DltBuffer *buf); void dlt_buffer_write_block(DltBuffer *buf, int *write, const unsigned char *data, unsigned int size); void dlt_buffer_read_block(DltBuffer *buf, int *read, unsigned char *data, unsigned int size); void dlt_print_hex(uint8_t *ptr, int size) { int num; if (ptr == NULL) return; for (num = 0; num < size; num++) { if (num > 0) dlt_user_printf(" "); dlt_user_printf("%.2x", ((uint8_t *)ptr)[num]); } } DltReturnValue dlt_print_hex_string(char *text, int textlength, uint8_t *ptr, int size) { int num; if ((ptr == NULL) || (text == NULL) || (textlength <= 0) || (size < 0)) return DLT_RETURN_WRONG_PARAMETER; /* Length 3: AB_ , A is first digit of hex number, B is second digit of hex number, _ is space */ if (textlength < (size * 3)) { dlt_vlog(LOG_WARNING, "String does not fit hex data (available=%d, required=%d) !\n", textlength, size * 3); return DLT_RETURN_ERROR; } for (num = 0; num < size; num++) { if (num > 0) { snprintf(text, 2, " "); text++; } snprintf(text, 3, "%.2x", ((uint8_t *)ptr)[num]); text += 2; /* 2 chars */ } return DLT_RETURN_OK; } DltReturnValue dlt_print_mixed_string(char *text, int textlength, uint8_t *ptr, int size, int html) { int required_size = 0; int lines, rest, i; if ((ptr == NULL) || (text == NULL) || (textlength <= 0) || (size < 0)) return DLT_RETURN_WRONG_PARAMETER; /* Check maximum required size and do a length check */ if (html == 0) required_size = (DLT_COMMON_HEX_LINELEN + (2 * DLT_COMMON_HEX_CHARS + (DLT_COMMON_HEX_CHARS - 1)) + DLT_COMMON_CHARLEN + DLT_COMMON_HEX_CHARS + DLT_COMMON_CHARLEN) * ((size / DLT_COMMON_HEX_CHARS) + 1); /* Example: (8 chars line number + (2*16 chars + 15 spaces) + space + 16 ascii chars + CR) * * ((size/16) lines + extra line for the rest) */ else required_size = (DLT_COMMON_HEX_LINELEN + (2 * DLT_COMMON_HEX_CHARS + (DLT_COMMON_HEX_CHARS - 1)) + DLT_COMMON_CHARLEN + DLT_COMMON_HEX_CHARS + 4 * DLT_COMMON_CHARLEN) * ((size / DLT_COMMON_HEX_CHARS) + 1); /* Example: (8 chars line number + (2*16 chars + 15 spaces) + space + 16 ascii chars + 4 [HTML CR:
]) * * ((size/16) lines + extra line for the rest) */ if (textlength < required_size) { dlt_vlog(LOG_WARNING, "String does not fit mixed data (available=%d, required=%d) !\n", textlength, required_size); return DLT_RETURN_ERROR; } /* print full lines */ for (lines = 0; lines < (size / DLT_COMMON_HEX_CHARS); lines++) { int ret = 0; /* Line number */ ret = snprintf(text, DLT_COMMON_HEX_LINELEN + 1, "%.6x: ", lines * DLT_COMMON_HEX_CHARS); if ((ret < 0) || (ret >= (DLT_COMMON_HEX_LINELEN + 1))) dlt_log(LOG_WARNING, "line was truncated\n"); text += DLT_COMMON_HEX_LINELEN; /* 'XXXXXX: ' */ /* Hex-Output */ /* It is not required to decrement textlength, as it was already checked, that * there is enough space for the complete output */ dlt_print_hex_string(text, textlength, (uint8_t *)(ptr + (lines * DLT_COMMON_HEX_CHARS)), DLT_COMMON_HEX_CHARS); text += ((2 * DLT_COMMON_HEX_CHARS) + (DLT_COMMON_HEX_CHARS - 1)); /* 32 characters + 15 spaces */ snprintf(text, 2, " "); text += DLT_COMMON_CHARLEN; /* Char-Output */ /* It is not required to decrement textlength, as it was already checked, that * there is enough space for the complete output */ dlt_print_char_string(&text, textlength, (uint8_t *)(ptr + (lines * DLT_COMMON_HEX_CHARS)), DLT_COMMON_HEX_CHARS); if (html == 0) { snprintf(text, 2, "\n"); text += DLT_COMMON_CHARLEN; } else { snprintf(text, 5, "
"); text += (4 * DLT_COMMON_CHARLEN); } } /* print partial line */ rest = size % DLT_COMMON_HEX_CHARS; if (rest > 0) { /* Line number */ int ret = 0; ret = snprintf(text, 9, "%.6x: ", (size / DLT_COMMON_HEX_CHARS) * DLT_COMMON_HEX_CHARS); if ((ret < 0) || (ret >= 9)) dlt_log(LOG_WARNING, "line number was truncated"); text += DLT_COMMON_HEX_LINELEN; /* 'XXXXXX: ' */ /* Hex-Output */ /* It is not required to decrement textlength, as it was already checked, that * there is enough space for the complete output */ dlt_print_hex_string(text, textlength, (uint8_t *)(ptr + ((size / DLT_COMMON_HEX_CHARS) * DLT_COMMON_HEX_CHARS)), rest); text += 2 * rest + (rest - 1); for (i = 0; i < (DLT_COMMON_HEX_CHARS - rest); i++) { snprintf(text, 4, " xx"); text += (3 * DLT_COMMON_CHARLEN); } snprintf(text, 2, " "); text += DLT_COMMON_CHARLEN; /* Char-Output */ /* It is not required to decrement textlength, as it was already checked, that * there is enough space for the complete output */ dlt_print_char_string(&text, textlength, (uint8_t *)(ptr + ((size / DLT_COMMON_HEX_CHARS) * DLT_COMMON_HEX_CHARS)), rest); } return DLT_RETURN_OK; } DltReturnValue dlt_print_char_string(char **text, int textlength, uint8_t *ptr, int size) { int num; if ((text == NULL) || (ptr == NULL) || (*text == NULL) || (textlength <= 0) || (size < 0)) return DLT_RETURN_WRONG_PARAMETER; if (textlength < size) { dlt_vlog(LOG_WARNING, "String does not fit character data (available=%d, required=%d) !\n", textlength, size); return DLT_RETURN_WRONG_PARAMETER; } for (num = 0; num < size; num++) { if ((((char *)ptr)[num] < DLT_COMMON_ASCII_CHAR_SPACE) || (((char *)ptr)[num] > DLT_COMMON_ASCII_CHAR_TILDE)) { snprintf(*text, 2, "."); } else { /* replace < with . */ if (((char *)ptr)[num] != DLT_COMMON_ASCII_CHAR_LT) snprintf(*text, 2, "%c", ((char *)ptr)[num]); else snprintf(*text, 2, "."); } (*text)++; } return DLT_RETURN_OK; } size_t dlt_strnlen_s(const char* str, size_t maxsize) { if (str == NULL) return 0; for (size_t i = 0; i < maxsize; ++i) { if (str[i] == '\0') return i; } return maxsize; } void dlt_print_id(char *text, const char *id) { /* check nullpointer */ if ((text == NULL) || (id == NULL)) return; /* Initialize text */ memset(text, '-', DLT_ID_SIZE); text[DLT_ID_SIZE] = 0; size_t len = dlt_strnlen_s(id, DLT_ID_SIZE); memcpy(text, id, len); } void dlt_set_id(char *id, const char *text) { /* check nullpointer */ if ((id == NULL) || (text == NULL)) return; id[0] = 0; id[1] = 0; id[2] = 0; id[3] = 0; if (text[0] != 0) id[0] = text[0]; else return; if (text[1] != 0) id[1] = text[1]; else return; if (text[2] != 0) id[2] = text[2]; else return; if (text[3] != 0) id[3] = text[3]; else return; } void dlt_clean_string(char *text, int length) { int num; if (text == NULL) return; for (num = 0; num < length; num++) if ((text[num] == '\r') || (text[num] == '\n')) text[num] = ' '; } DltReturnValue dlt_filter_init(DltFilter *filter, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (filter == NULL) return DLT_RETURN_WRONG_PARAMETER; filter->counter = 0; return DLT_RETURN_OK; } DltReturnValue dlt_filter_free(DltFilter *filter, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (filter == NULL) return DLT_RETURN_WRONG_PARAMETER; return DLT_RETURN_OK; } DltReturnValue dlt_filter_load(DltFilter *filter, const char *filename, int verbose) { if ((filter == NULL) || (filename == NULL)) return DLT_RETURN_WRONG_PARAMETER; FILE *handle; char str1[DLT_COMMON_BUFFER_LENGTH]; char apid[DLT_ID_SIZE], ctid[DLT_ID_SIZE]; PRINT_FUNCTION_VERBOSE(verbose); handle = fopen(filename, "r"); if (handle == NULL) { dlt_vlog(LOG_WARNING, "Filter file %s cannot be opened!\n", filename); return DLT_RETURN_ERROR; } /* Reset filters */ filter->counter = 0; while (!feof(handle)) { str1[0] = 0; if (fscanf(handle, "%254s", str1) != 1) break; if (str1[0] == 0) break; printf(" %s", str1); if (strcmp(str1, "----") == 0) dlt_set_id(apid, ""); else dlt_set_id(apid, str1); str1[0] = 0; if (fscanf(handle, "%254s", str1) != 1) break; if (str1[0] == 0) break; printf(" %s\r\n", str1); if (strcmp(str1, "----") == 0) dlt_set_id(ctid, ""); else dlt_set_id(ctid, str1); if (filter->counter < DLT_FILTER_MAX) { dlt_filter_add(filter, apid, ctid, verbose); } else { dlt_vlog(LOG_WARNING, "Maximum number (%d) of allowed filters reached, ignoring rest of filters!\n", DLT_FILTER_MAX); } } fclose(handle); return DLT_RETURN_OK; } DltReturnValue dlt_filter_save(DltFilter *filter, const char *filename, int verbose) { if ((filter == NULL) || (filename == NULL)) return DLT_RETURN_WRONG_PARAMETER; FILE *handle; int num; char buf[DLT_COMMON_BUFFER_LENGTH]; PRINT_FUNCTION_VERBOSE(verbose); handle = fopen(filename, "w"); if (handle == NULL) { dlt_vlog(LOG_WARNING, "Filter file %s cannot be opened!\n", filename); return DLT_RETURN_ERROR; } for (num = 0; num < filter->counter; num++) { if (filter->apid[num][0] == 0) { fprintf(handle, "---- "); } else { dlt_print_id(buf, filter->apid[num]); fprintf(handle, "%s ", buf); } if (filter->ctid[num][0] == 0) { fprintf(handle, "---- "); } else { dlt_print_id(buf, filter->ctid[num]); fprintf(handle, "%s ", buf); } } fclose(handle); return DLT_RETURN_OK; } int dlt_filter_find(DltFilter *filter, const char *apid, const char *ctid, int verbose) { int num; PRINT_FUNCTION_VERBOSE(verbose); if ((filter == NULL) || (apid == NULL)) return -1; for (num = 0; num < filter->counter; num++) if (memcmp(filter->apid[num], apid, DLT_ID_SIZE) == 0) { /* apid matches, now check for ctid */ if (ctid == NULL) { /* check if empty ctid matches */ /*if (memcmp(filter->ctid[num],"",DLT_ID_SIZE)==0)//coverity complains here about Out-of-bounds access. */ char empty_ctid[DLT_ID_SIZE] = ""; if (memcmp(filter->ctid[num], empty_ctid, DLT_ID_SIZE) == 0) return num; } else if (memcmp(filter->ctid[num], ctid, DLT_ID_SIZE) == 0) return num; } return -1; /* Not found */ } DltReturnValue dlt_filter_add(DltFilter *filter, const char *apid, const char *ctid, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if ((filter == NULL) || (apid == NULL)) return DLT_RETURN_WRONG_PARAMETER; if (filter->counter >= DLT_FILTER_MAX) { dlt_vlog(LOG_WARNING, "Maximum number (%d) of allowed filters reached, ignoring filter!\n", DLT_FILTER_MAX); return DLT_RETURN_ERROR; } /* add each filter (apid, ctid) only once to filter array */ if (dlt_filter_find(filter, apid, ctid, verbose) < 0) { /* filter not found, so add it to filter array */ if (filter->counter < DLT_FILTER_MAX) { dlt_set_id(filter->apid[filter->counter], apid); dlt_set_id(filter->ctid[filter->counter], (ctid ? ctid : "")); filter->counter++; return DLT_RETURN_OK; } } return DLT_RETURN_ERROR; } DltReturnValue dlt_filter_delete(DltFilter *filter, const char *apid, const char *ctid, int verbose) { int j, k; int found = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((filter == NULL) || (apid == NULL) || (ctid == NULL)) return DLT_RETURN_WRONG_PARAMETER; if (filter->counter > 0) { /* Get first occurence of apid and ctid in filter array */ for (j = 0; j < filter->counter; j++) if ((memcmp(filter->apid[j], apid, DLT_ID_SIZE) == 0) && (memcmp(filter->ctid[j], ctid, DLT_ID_SIZE) == 0) ) { found = 1; break; } if (found) { /* j is index */ /* Copy from j+1 til end to j til end-1 */ dlt_set_id(filter->apid[j], ""); dlt_set_id(filter->ctid[j], ""); for (k = j; k < (filter->counter - 1); k++) { dlt_set_id(filter->apid[k], filter->apid[k + 1]); dlt_set_id(filter->ctid[k], filter->ctid[k + 1]); } filter->counter--; return DLT_RETURN_OK; } } return DLT_RETURN_ERROR; } DltReturnValue dlt_message_init(DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (msg == NULL) return DLT_RETURN_WRONG_PARAMETER; /* initalise structure parameters */ msg->headersize = 0; msg->datasize = 0; msg->databuffer = NULL; msg->databuffersize = 0; msg->storageheader = NULL; msg->standardheader = NULL; msg->extendedheader = NULL; msg->found_serialheader = 0; return DLT_RETURN_OK; } DltReturnValue dlt_message_free(DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (msg == NULL) return DLT_RETURN_WRONG_PARAMETER; /* delete databuffer if exists */ if (msg->databuffer) { free(msg->databuffer); msg->databuffer = NULL; msg->databuffersize = 0; } return DLT_RETURN_OK; } DltReturnValue dlt_message_header(DltMessage *msg, char *text, size_t textlength, int verbose) { return dlt_message_header_flags(msg, text, textlength, DLT_HEADER_SHOW_ALL, verbose); } DltReturnValue dlt_message_header_flags(DltMessage *msg, char *text, size_t textlength, int flags, int verbose) { struct tm timeinfo; char buffer [DLT_COMMON_BUFFER_LENGTH]; PRINT_FUNCTION_VERBOSE(verbose); if ((msg == NULL) || (text == NULL) || (textlength <= 0)) return DLT_RETURN_WRONG_PARAMETER; if ((flags < DLT_HEADER_SHOW_NONE) || (flags > DLT_HEADER_SHOW_ALL)) return DLT_RETURN_WRONG_PARAMETER; text[0] = 0; if ((flags & DLT_HEADER_SHOW_TIME) == DLT_HEADER_SHOW_TIME) { /* print received time */ time_t tt = msg->storageheader->seconds; tzset(); localtime_r(&tt, &timeinfo); strftime (buffer, sizeof(buffer), "%Y/%m/%d %H:%M:%S", &timeinfo); snprintf(text, textlength, "%s.%.6d ", buffer, msg->storageheader->microseconds); } if ((flags & DLT_HEADER_SHOW_TMSTP) == DLT_HEADER_SHOW_TMSTP) { /* print timestamp if available */ if (DLT_IS_HTYP_WTMS(msg->standardheader->htyp)) snprintf(text + strlen(text), textlength - strlen(text), "%10u ", msg->headerextra.tmsp); else snprintf(text + strlen(text), textlength - strlen(text), "---------- "); } if ((flags & DLT_HEADER_SHOW_MSGCNT) == DLT_HEADER_SHOW_MSGCNT) /* print message counter */ snprintf(text + strlen(text), textlength - strlen(text), "%.3d ", msg->standardheader->mcnt); if ((flags & DLT_HEADER_SHOW_ECUID) == DLT_HEADER_SHOW_ECUID) { /* print ecu id, use header extra if available, else storage header value */ if (DLT_IS_HTYP_WEID(msg->standardheader->htyp)) dlt_print_id(text + strlen(text), msg->headerextra.ecu); else dlt_print_id(text + strlen(text), msg->storageheader->ecu); } /* print app id and context id if extended header available, else '----' */ # if ((flags & DLT_HEADER_SHOW_APID) == DLT_HEADER_SHOW_APID) { snprintf(text + strlen(text), textlength - strlen(text), " "); if ((DLT_IS_HTYP_UEH(msg->standardheader->htyp)) && (msg->extendedheader->apid[0] != 0)) dlt_print_id(text + strlen(text), msg->extendedheader->apid); else snprintf(text + strlen(text), textlength - strlen(text), "----"); snprintf(text + strlen(text), textlength - strlen(text), " "); } if ((flags & DLT_HEADER_SHOW_CTID) == DLT_HEADER_SHOW_CTID) { if ((DLT_IS_HTYP_UEH(msg->standardheader->htyp)) && (msg->extendedheader->ctid[0] != 0)) dlt_print_id(text + strlen(text), msg->extendedheader->ctid); else snprintf(text + strlen(text), textlength - strlen(text), "----"); snprintf(text + strlen(text), textlength - strlen(text), " "); } /* print info about message type and length */ if (DLT_IS_HTYP_UEH(msg->standardheader->htyp)) { if ((flags & DLT_HEADER_SHOW_MSGTYPE) == DLT_HEADER_SHOW_MSGTYPE) { snprintf(text + strlen(text), textlength - strlen(text), "%s", message_type[DLT_GET_MSIN_MSTP(msg->extendedheader->msin)]); snprintf(text + strlen(text), textlength - strlen(text), " "); } if ((flags & DLT_HEADER_SHOW_MSGSUBTYPE) == DLT_HEADER_SHOW_MSGSUBTYPE) { if ((DLT_GET_MSIN_MSTP(msg->extendedheader->msin)) == DLT_TYPE_LOG) snprintf(text + strlen(text), textlength - strlen(text), "%s", log_info[DLT_GET_MSIN_MTIN(msg->extendedheader->msin)]); if ((DLT_GET_MSIN_MSTP(msg->extendedheader->msin)) == DLT_TYPE_APP_TRACE) snprintf(text + strlen(text), textlength - strlen(text), "%s", trace_type[DLT_GET_MSIN_MTIN(msg->extendedheader->msin)]); if ((DLT_GET_MSIN_MSTP(msg->extendedheader->msin)) == DLT_TYPE_NW_TRACE) snprintf(text + strlen(text), textlength - strlen(text), "%s", nw_trace_type[DLT_GET_MSIN_MTIN(msg->extendedheader->msin)]); if ((DLT_GET_MSIN_MSTP(msg->extendedheader->msin)) == DLT_TYPE_CONTROL) snprintf(text + strlen(text), textlength - strlen(text), "%s", control_type[DLT_GET_MSIN_MTIN(msg->extendedheader->msin)]); snprintf(text + strlen(text), textlength - strlen(text), " "); } if ((flags & DLT_HEADER_SHOW_VNVSTATUS) == DLT_HEADER_SHOW_VNVSTATUS) { /* print verbose status pf message */ if (DLT_IS_MSIN_VERB(msg->extendedheader->msin)) snprintf(text + strlen(text), textlength - strlen(text), "V"); else snprintf(text + strlen(text), textlength - strlen(text), "N"); snprintf(text + strlen(text), textlength - strlen(text), " "); } if ((flags & DLT_HEADER_SHOW_NOARG) == DLT_HEADER_SHOW_NOARG) /* print number of arguments */ snprintf(text + strlen(text), textlength - strlen(text), "%d", msg->extendedheader->noar); } else { if ((flags & DLT_HEADER_SHOW_MSGTYPE) == DLT_HEADER_SHOW_MSGTYPE) snprintf(text + strlen(text), textlength - strlen(text), "--- "); if ((flags & DLT_HEADER_SHOW_MSGSUBTYPE) == DLT_HEADER_SHOW_MSGSUBTYPE) snprintf(text + strlen(text), textlength - strlen(text), "--- "); if ((flags & DLT_HEADER_SHOW_VNVSTATUS) == DLT_HEADER_SHOW_VNVSTATUS) snprintf(text + strlen(text), textlength - strlen(text), "N "); if ((flags & DLT_HEADER_SHOW_NOARG) == DLT_HEADER_SHOW_NOARG) snprintf(text + strlen(text), textlength - strlen(text), "-"); } return DLT_RETURN_OK; } DltReturnValue dlt_message_payload(DltMessage *msg, char *text, size_t textlength, int type, int verbose) { uint32_t id = 0, id_tmp = 0; uint8_t retval = 0; uint8_t *ptr; int32_t datalength; /* Pointer to ptr and datalength */ uint8_t **pptr; int32_t *pdatalength; int ret = 0; int num; uint32_t type_info = 0, type_info_tmp = 0; int text_offset = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((msg == NULL) || (msg->databuffer == NULL) || (text == NULL) || (type < DLT_OUTPUT_HEX) || (type > DLT_OUTPUT_ASCII_LIMITED)) return DLT_RETURN_WRONG_PARAMETER; if (textlength <= 0) { dlt_log(LOG_WARNING, "String does not fit binary data!\n"); return DLT_RETURN_WRONG_PARAMETER; } /* start with empty string */ text[0] = 0; /* print payload only as hex */ if (type == DLT_OUTPUT_HEX) return dlt_print_hex_string(text, (int) textlength, msg->databuffer, (int) msg->datasize); /* print payload as mixed */ if (type == DLT_OUTPUT_MIXED_FOR_PLAIN) return dlt_print_mixed_string(text, (int) textlength, msg->databuffer, (int) msg->datasize, 0); if (type == DLT_OUTPUT_MIXED_FOR_HTML) return dlt_print_mixed_string(text, (int) textlength, msg->databuffer, (int) msg->datasize, 1); ptr = msg->databuffer; datalength = (int32_t) msg->datasize; /* Pointer to ptr and datalength */ pptr = &ptr; pdatalength = &datalength; /* non-verbose mode */ /* print payload as hex */ if (DLT_MSG_IS_NONVERBOSE(msg)) { DLT_MSG_READ_VALUE(id_tmp, ptr, datalength, uint32_t); id = DLT_ENDIAN_GET_32(msg->standardheader->htyp, id_tmp); if (textlength < (( (unsigned int) datalength * 3) + 20)) { dlt_vlog(LOG_WARNING, "String does not fit binary data (available=%d, required=%d) !\n", (int) textlength, (datalength * 3) + 20); return DLT_RETURN_ERROR; } /* process message id / service id */ if (DLT_MSG_IS_CONTROL(msg)) { if ((id > 0) && (id < DLT_SERVICE_ID_LAST_ENTRY)) { snprintf(text + strlen(text), textlength - strlen(text), "%s", service_id_name[id]); /* service id */ } else if (!(DLT_MSG_IS_CONTROL_TIME(msg))) snprintf(text + strlen(text), textlength - strlen(text), "service(%u)", id); /* service id */ if (datalength > 0) snprintf(text + strlen(text), textlength - strlen(text), ", "); } else { snprintf(text + strlen(text), textlength - strlen(text), "%u, ", id); /* message id */ } /* process return value */ if (DLT_MSG_IS_CONTROL_RESPONSE(msg)) { if (datalength > 0) { DLT_MSG_READ_VALUE(retval, ptr, datalength, uint8_t); /* No endian conversion necessary */ if ((retval < DLT_SERVICE_RESPONSE_LAST) || (retval == 8)) snprintf(text + strlen(text), textlength - strlen(text), "%s", return_type[retval]); else snprintf(text + strlen(text), textlength - strlen(text), "%.2x", retval); if (datalength >= 1) snprintf(text + strlen(text), textlength - strlen(text), ", "); } } if (type == DLT_OUTPUT_ASCII_LIMITED) { ret = dlt_print_hex_string(text + strlen(text), (int) (textlength - strlen( text)), ptr, (datalength > DLT_COMMON_ASCII_LIMIT_MAX_CHARS ? DLT_COMMON_ASCII_LIMIT_MAX_CHARS : datalength)); if ((datalength > DLT_COMMON_ASCII_LIMIT_MAX_CHARS) && ((textlength - strlen(text)) > 4)) snprintf(text + strlen(text), textlength - strlen(text), " ..."); } else { ret = dlt_print_hex_string(text + strlen(text),(int) (textlength - strlen(text)), ptr, datalength); } return ret; } /* At this point, it is ensured that a extended header is available */ /* verbose mode */ type_info = 0; type_info_tmp = 0; for (num = 0; num < (int)(msg->extendedheader->noar); num++) { if (num != 0) { text_offset = (int)strlen(text); snprintf(text + text_offset, textlength - (size_t) text_offset, " "); } /* first read the type info of the argument */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(msg->standardheader->htyp, type_info_tmp); /* print out argument */ text_offset = (int)strlen(text); if (dlt_message_argument_print(msg, type_info, pptr, pdatalength, (text + text_offset), (textlength - (size_t) text_offset), -1, 0) == DLT_RETURN_ERROR) return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } DltReturnValue dlt_message_filter_check(DltMessage *msg, DltFilter *filter, int verbose) { /* check the filters if message is used */ int num; DltReturnValue found = DLT_RETURN_OK; PRINT_FUNCTION_VERBOSE(verbose); if ((msg == NULL) || (filter == NULL)) return DLT_RETURN_WRONG_PARAMETER; if ((filter->counter == 0) || (!(DLT_IS_HTYP_UEH(msg->standardheader->htyp)))) /* no filter is set, or no extended header is available, so do as filter is matching */ return DLT_RETURN_TRUE; for (num = 0; num < filter->counter; num++) /* check each filter if it matches */ if ((DLT_IS_HTYP_UEH(msg->standardheader->htyp)) && ((filter->apid[num][0] == 0) || (memcmp(filter->apid[num], msg->extendedheader->apid, DLT_ID_SIZE) == 0)) && ((filter->ctid[num][0] == 0) || (memcmp(filter->ctid[num], msg->extendedheader->ctid, DLT_ID_SIZE) == 0))) { found = DLT_RETURN_TRUE; break; } return found; } int dlt_message_read(DltMessage *msg, uint8_t *buffer, unsigned int length, int resync, int verbose) { uint32_t extra_size = 0; PRINT_FUNCTION_VERBOSE(verbose); if ((msg == NULL) || (buffer == NULL) || (length <= 0)) return DLT_MESSAGE_ERROR_UNKNOWN; /* initialize resync_offset */ msg->resync_offset = 0; /* check if message contains serial header, smaller than standard header */ if (length < sizeof(dltSerialHeader)) /* dlt_log(LOG_ERR, "Length smaller than serial header!\n"); */ return DLT_MESSAGE_ERROR_SIZE; if (memcmp(buffer, dltSerialHeader, sizeof(dltSerialHeader)) == 0) { /* serial header found */ msg->found_serialheader = 1; buffer += sizeof(dltSerialHeader); length -= (unsigned int) sizeof(dltSerialHeader); } else { /* serial header not found */ msg->found_serialheader = 0; if (resync) { /* resync if necessary */ msg->resync_offset = 0; do { if (memcmp(buffer + msg->resync_offset, dltSerialHeader, sizeof(dltSerialHeader)) == 0) { /* serial header found */ msg->found_serialheader = 1; buffer += sizeof(dltSerialHeader); length -= (unsigned int) sizeof(dltSerialHeader); break; } msg->resync_offset++; } while ( (sizeof(dltSerialHeader) + (size_t) msg->resync_offset) <= length); /* Set new start offset */ if (msg->resync_offset > 0) { /* Resyncing connection */ buffer += msg->resync_offset; length -= (unsigned int) msg->resync_offset; } } } /* check that standard header fits buffer */ if (length < sizeof(DltStandardHeader)) /* dlt_log(LOG_ERR, "Length smaller than standard header!\n"); */ return DLT_MESSAGE_ERROR_SIZE; memcpy(msg->headerbuffer + sizeof(DltStorageHeader), buffer, sizeof(DltStandardHeader)); /* set ptrs to structures */ msg->storageheader = (DltStorageHeader *)msg->headerbuffer; msg->standardheader = (DltStandardHeader *)(msg->headerbuffer + sizeof(DltStorageHeader)); /* calculate complete size of headers */ extra_size = (uint32_t) (DLT_STANDARD_HEADER_EXTRA_SIZE(msg->standardheader->htyp) + (DLT_IS_HTYP_UEH(msg->standardheader->htyp) ? sizeof(DltExtendedHeader) : 0)); msg->headersize = (uint32_t) (sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + extra_size); msg->datasize = (uint32_t) DLT_BETOH_16(msg->standardheader->len) - msg->headersize + (uint32_t) sizeof(DltStorageHeader); /* calculate complete size of payload */ int32_t temp_datasize; temp_datasize = DLT_BETOH_16(msg->standardheader->len) - (int32_t) msg->headersize + (int32_t) sizeof(DltStorageHeader); /* check data size */ if (temp_datasize < 0) { dlt_vlog(LOG_WARNING, "Plausibility check failed. Complete message size too short (%d)!\n", temp_datasize); return DLT_MESSAGE_ERROR_CONTENT; } else { msg->datasize = (uint32_t) temp_datasize; } /* check if verbose mode is on*/ if (verbose) { dlt_vlog(LOG_DEBUG, "BufferLength=%d, HeaderSize=%d, DataSize=%d\n", length, msg->headersize, msg->datasize); } /* load standard header extra parameters and Extended header if used */ if (extra_size > 0) { if (length < (msg->headersize - sizeof(DltStorageHeader))) return DLT_MESSAGE_ERROR_SIZE; memcpy(msg->headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader), buffer + sizeof(DltStandardHeader), (size_t) extra_size); /* set extended header ptr and get standard header extra parameters */ if (DLT_IS_HTYP_UEH(msg->standardheader->htyp)) msg->extendedheader = (DltExtendedHeader *)(msg->headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg->standardheader->htyp)); else msg->extendedheader = NULL; dlt_message_get_extraparameters(msg, verbose); } /* check if payload fits length */ if (length < (msg->headersize - sizeof(DltStorageHeader) + msg->datasize)) /* dlt_log(LOG_ERR,"length does not fit!\n"); */ return DLT_MESSAGE_ERROR_SIZE; /* free last used memory for buffer */ if (msg->databuffer) { if (msg->datasize > msg->databuffersize) { free(msg->databuffer); msg->databuffer = (uint8_t *)malloc(msg->datasize); msg->databuffersize = msg->datasize; } } else { /* get new memory for buffer */ msg->databuffer = (uint8_t *)malloc(msg->datasize); msg->databuffersize = msg->datasize; } if (msg->databuffer == NULL) { dlt_vlog(LOG_WARNING, "Cannot allocate memory for payload buffer of size %d!\n", msg->datasize); return DLT_MESSAGE_ERROR_UNKNOWN; } /* load payload data from buffer */ memcpy(msg->databuffer, buffer + (msg->headersize - sizeof(DltStorageHeader)), msg->datasize); return DLT_MESSAGE_ERROR_OK; } DltReturnValue dlt_message_get_extraparameters(DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (msg == NULL) return DLT_RETURN_WRONG_PARAMETER; if (DLT_IS_HTYP_WEID(msg->standardheader->htyp)) memcpy(msg->headerextra.ecu, msg->headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader), DLT_ID_SIZE); if (DLT_IS_HTYP_WSID(msg->standardheader->htyp)) { memcpy(&(msg->headerextra.seid), msg->headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + (DLT_IS_HTYP_WEID(msg->standardheader->htyp) ? DLT_SIZE_WEID : 0), DLT_SIZE_WSID); msg->headerextra.seid = DLT_BETOH_32(msg->headerextra.seid); } if (DLT_IS_HTYP_WTMS(msg->standardheader->htyp)) { memcpy(&(msg->headerextra.tmsp), msg->headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + (DLT_IS_HTYP_WEID(msg->standardheader->htyp) ? DLT_SIZE_WEID : 0) + (DLT_IS_HTYP_WSID(msg->standardheader->htyp) ? DLT_SIZE_WSID : 0), DLT_SIZE_WTMS); msg->headerextra.tmsp = DLT_BETOH_32(msg->headerextra.tmsp); } return DLT_RETURN_OK; } DltReturnValue dlt_message_set_extraparameters(DltMessage *msg, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (msg == NULL) return DLT_RETURN_WRONG_PARAMETER; if (DLT_IS_HTYP_WEID(msg->standardheader->htyp)) memcpy(msg->headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader), msg->headerextra.ecu, DLT_ID_SIZE); if (DLT_IS_HTYP_WSID(msg->standardheader->htyp)) { msg->headerextra.seid = DLT_HTOBE_32(msg->headerextra.seid); memcpy(msg->headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + (DLT_IS_HTYP_WEID(msg->standardheader->htyp) ? DLT_SIZE_WEID : 0), &(msg->headerextra.seid), DLT_SIZE_WSID); } if (DLT_IS_HTYP_WTMS(msg->standardheader->htyp)) { msg->headerextra.tmsp = DLT_HTOBE_32(msg->headerextra.tmsp); memcpy(msg->headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + (DLT_IS_HTYP_WEID(msg->standardheader->htyp) ? DLT_SIZE_WEID : 0) + (DLT_IS_HTYP_WSID(msg->standardheader->htyp) ? DLT_SIZE_WSID : 0), &(msg->headerextra.tmsp), DLT_SIZE_WTMS); } return DLT_RETURN_OK; } DltReturnValue dlt_file_init(DltFile *file, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (file == NULL) return DLT_RETURN_WRONG_PARAMETER; /* initalise structure parameters */ file->handle = NULL; file->counter = 0; file->counter_total = 0; file->index = NULL; file->filter = NULL; file->filter_counter = 0; file->file_position = 0; file->position = 0; file->error_messages = 0; return dlt_message_init(&(file->msg), verbose); } DltReturnValue dlt_file_set_filter(DltFile *file, DltFilter *filter, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (file == NULL) return DLT_RETURN_WRONG_PARAMETER; /* set filter */ file->filter = filter; return DLT_RETURN_OK; } DltReturnValue dlt_file_read_header(DltFile *file, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (file == NULL) return DLT_RETURN_WRONG_PARAMETER; /* Loop until storage header is found */ while (1) { /* load header from file */ if (fread(file->msg.headerbuffer, sizeof(DltStorageHeader) + sizeof(DltStandardHeader), 1, file->handle) != 1) { if (!feof(file->handle)) dlt_log(LOG_WARNING, "Cannot read header from file!\n"); else dlt_log(LOG_DEBUG, "Reached end of file\n"); return DLT_RETURN_ERROR; } /* set ptrs to structures */ file->msg.storageheader = (DltStorageHeader *)file->msg.headerbuffer; file->msg.standardheader = (DltStandardHeader *)(file->msg.headerbuffer + sizeof(DltStorageHeader)); /* check id of storage header */ if (dlt_check_storageheader(file->msg.storageheader) != DLT_RETURN_TRUE) { /* Shift the position back to the place where it stared to read + 1 */ if (fseek(file->handle, (long) (1 - (sizeof(DltStorageHeader) + sizeof(DltStandardHeader))), SEEK_CUR) < 0) { dlt_log(LOG_WARNING, "DLT storage header pattern not found!\n"); return DLT_RETURN_ERROR; } } else { /* storage header is found */ break; } } /* calculate complete size of headers */ file->msg.headersize = (uint32_t) (sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(file->msg.standardheader->htyp) + (DLT_IS_HTYP_UEH(file->msg.standardheader->htyp) ? sizeof(DltExtendedHeader) : 0)); /* calculate complete size of payload */ int32_t temp_datasize; temp_datasize = DLT_BETOH_16(file->msg.standardheader->len) + (int32_t) sizeof(DltStorageHeader) - (int32_t) file->msg.headersize; /* check data size */ if (temp_datasize < 0) { dlt_vlog(LOG_WARNING, "Plausibility check failed. Complete message size too short! (%d)\n", temp_datasize); return DLT_RETURN_ERROR; } else { file->msg.datasize = (uint32_t) temp_datasize; } /* check if verbose mode is on */ if (verbose) { dlt_vlog(LOG_DEBUG, "HeaderSize=%d, DataSize=%d\n", file->msg.headersize, file->msg.datasize); } return DLT_RETURN_OK; } DltReturnValue dlt_file_read_header_raw(DltFile *file, int resync, int verbose) { char dltSerialHeaderBuffer[DLT_ID_SIZE]; PRINT_FUNCTION_VERBOSE(verbose); if (file == NULL) return DLT_RETURN_WRONG_PARAMETER; /* check if serial header exists, ignore if found */ if (fread(dltSerialHeaderBuffer, sizeof(dltSerialHeaderBuffer), 1, file->handle) != 1) { /* cannot read serial header, not enough data available in file */ if (!feof(file->handle)) dlt_log(LOG_WARNING, "Cannot read header from file!\n"); return DLT_RETURN_ERROR; } if (memcmp(dltSerialHeaderBuffer, dltSerialHeader, sizeof(dltSerialHeader)) == 0) { /* serial header found */ /* nothing to do continue reading */ } else { /* serial header not found */ if (resync) { /* increase error counter */ file->error_messages++; /* resync to serial header */ do { memmove(dltSerialHeaderBuffer, dltSerialHeaderBuffer + 1, sizeof(dltSerialHeader) - 1); if (fread(dltSerialHeaderBuffer + 3, 1, 1, file->handle) != 1) /* cannot read any data, perhaps end of file reached */ return DLT_RETURN_ERROR; if (memcmp(dltSerialHeaderBuffer, dltSerialHeader, sizeof(dltSerialHeader)) == 0) /* serial header synchronised */ break; } while (1); } else /* go back to last file position */ if (0 != fseek(file->handle, file->file_position, SEEK_SET)) return DLT_RETURN_ERROR; } /* load header from file */ if (fread(file->msg.headerbuffer + sizeof(DltStorageHeader), sizeof(DltStandardHeader), 1, file->handle) != 1) { if (!feof(file->handle)) dlt_log(LOG_WARNING, "Cannot read header from file!\n"); return DLT_RETURN_ERROR; } /* set ptrs to structures */ file->msg.storageheader = (DltStorageHeader *)file->msg.headerbuffer; /* this points now to a empty storage header (filled with '0') */ file->msg.standardheader = (DltStandardHeader *)(file->msg.headerbuffer + sizeof(DltStorageHeader)); /* Skip storage header field, fill this field with '0' */ memset(file->msg.storageheader, 0, sizeof(DltStorageHeader)); /* Set storage header */ dlt_set_storageheader(file->msg.storageheader, DLT_COMMON_DUMMY_ECUID); /* no check for storage header id*/ /* calculate complete size of headers */ file->msg.headersize = (uint32_t) (sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(file->msg.standardheader->htyp) + (DLT_IS_HTYP_UEH(file->msg.standardheader->htyp) ? sizeof(DltExtendedHeader) : 0)); /* calculate complete size of payload */ int32_t temp_datasize; temp_datasize = DLT_BETOH_16(file->msg.standardheader->len) + (int32_t) sizeof(DltStorageHeader) - (int32_t) file->msg.headersize; /* check data size */ if (temp_datasize < 0) { dlt_vlog(LOG_WARNING, "Plausibility check failed. Complete message size too short! (%d)\n", temp_datasize); return DLT_RETURN_ERROR; } else { file->msg.datasize = (uint32_t) temp_datasize; } /* check if verbose mode is on */ if (verbose) { dlt_vlog(LOG_DEBUG, "HeaderSize=%d, DataSize=%d\n", file->msg.headersize, file->msg.datasize); } return DLT_RETURN_OK; } DltReturnValue dlt_file_read_header_extended(DltFile *file, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (file == NULL) return DLT_RETURN_WRONG_PARAMETER; /* load standard header extra parameters if used */ if (DLT_STANDARD_HEADER_EXTRA_SIZE(file->msg.standardheader->htyp)) { if (fread(file->msg.headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader), DLT_STANDARD_HEADER_EXTRA_SIZE(file->msg.standardheader->htyp), 1, file->handle) != 1) { dlt_log(LOG_WARNING, "Cannot read standard header extra parameters from file!\n"); return DLT_RETURN_ERROR; } dlt_message_get_extraparameters(&(file->msg), verbose); } /* load Extended header if used */ if (DLT_IS_HTYP_UEH(file->msg.standardheader->htyp) == 0) /* there is nothing to be loaded */ return DLT_RETURN_OK; if (fread(file->msg.headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(file->msg.standardheader->htyp), (DLT_IS_HTYP_UEH(file->msg.standardheader->htyp) ? sizeof(DltExtendedHeader) : 0), 1, file->handle) != 1) { dlt_log(LOG_WARNING, "Cannot read extended header from file!\n"); return DLT_RETURN_ERROR; } /* set extended header ptr */ if (DLT_IS_HTYP_UEH(file->msg.standardheader->htyp)) file->msg.extendedheader = (DltExtendedHeader *)(file->msg.headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(file->msg.standardheader->htyp)); else file->msg.extendedheader = NULL; return DLT_RETURN_OK; } DltReturnValue dlt_file_read_data(DltFile *file, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (file == NULL) return DLT_RETURN_WRONG_PARAMETER; /* free last used memory for buffer */ if (file->msg.databuffer && (file->msg.databuffersize < file->msg.datasize)) { free(file->msg.databuffer); file->msg.databuffer = NULL; } if (file->msg.databuffer == NULL) { /* get new memory for buffer */ file->msg.databuffer = (uint8_t *)malloc(file->msg.datasize); file->msg.databuffersize = file->msg.datasize; } if (file->msg.databuffer == NULL) { dlt_vlog(LOG_WARNING, "Cannot allocate memory for payload buffer of size %d!\n", file->msg.datasize); return DLT_RETURN_ERROR; } /* load payload data from file */ if (fread(file->msg.databuffer, file->msg.datasize, 1, file->handle) != 1) { if (file->msg.datasize != 0) { dlt_vlog(LOG_WARNING, "Cannot read payload data from file of size %d!\n", file->msg.datasize); return DLT_RETURN_ERROR; } } return DLT_RETURN_OK; } DltReturnValue dlt_file_open(DltFile *file, const char *filename, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if ((file == NULL) || (filename == NULL)) return DLT_RETURN_WRONG_PARAMETER; /* reset counters */ file->counter = 0; file->counter_total = 0; file->position = 0; file->file_position = 0; file->file_length = 0; file->error_messages = 0; if (file->handle) fclose(file->handle); /* open dlt file */ file->handle = fopen(filename, "rb"); if (file->handle == NULL) { dlt_vlog(LOG_WARNING, "File %s cannot be opened!\n", filename); return DLT_RETURN_ERROR; } if (0 != fseek(file->handle, 0, SEEK_END)) { dlt_vlog(LOG_WARNING, "dlt_file_open: Seek failed to 0,SEEK_END"); return DLT_RETURN_ERROR; } file->file_length = ftell(file->handle); if (0 != fseek(file->handle, 0, SEEK_SET)) { dlt_vlog(LOG_WARNING, "dlt_file_open: Seek failed to 0,SEEK_SET"); return DLT_RETURN_ERROR; } if (verbose) { /* print file length */ dlt_vlog(LOG_DEBUG, "File is %lu bytes long\n", file->file_length); } return DLT_RETURN_OK; } DltReturnValue dlt_file_read(DltFile *file, int verbose) { long *ptr; int found = DLT_RETURN_OK; if (file == NULL) return DLT_RETURN_WRONG_PARAMETER; if (verbose) { dlt_vlog(LOG_DEBUG, "%s: Message %d:\n", __func__, file->counter_total); } /* allocate new memory for index if number of messages exceeds a multiple of DLT_COMMON_INDEX_ALLOC (e.g.: 1000) */ if (file->counter % DLT_COMMON_INDEX_ALLOC == 0) { ptr = (long *)malloc(((file->counter / DLT_COMMON_INDEX_ALLOC) + 1) * DLT_COMMON_INDEX_ALLOC * sizeof(long)); if (ptr == NULL) return DLT_RETURN_ERROR; if (file->index) { memcpy(ptr, file->index, (size_t) (file->counter) * sizeof(long)); free(file->index); } file->index = ptr; } /* set to end of last succesful read message, because of conflicting calls to dlt_file_read and dlt_file_message */ if (0 != fseek(file->handle, file->file_position, SEEK_SET)) { dlt_vlog(LOG_WARNING, "Seek failed to file_position %ld \n", file->file_position); return DLT_RETURN_ERROR; } /* get file position at start of DLT message */ if (verbose) { dlt_vlog(LOG_INFO, "Position in file: %ld\n", file->file_position); } /* read header */ if (dlt_file_read_header(file, verbose) < DLT_RETURN_OK) { /* go back to last position in file */ fseek(file->handle, file->file_position, SEEK_SET); return DLT_RETURN_ERROR; } if (file->filter) { /* read the extended header if filter is enabled and extended header exists */ if (dlt_file_read_header_extended(file, verbose) < DLT_RETURN_OK) { /* go back to last position in file */ if (0 != fseek(file->handle, file->file_position, SEEK_SET)) { dlt_vlog(LOG_WARNING, "Seek to last file pos failed!\n"); } return DLT_RETURN_ERROR; } /* check the filters if message is used */ if (dlt_message_filter_check(&(file->msg), file->filter, verbose) == DLT_RETURN_TRUE) { /* filter matched, consequently store current message */ /* store index pointer to message position in DLT file */ file->index[file->counter] = file->file_position; file->counter++; file->position = file->counter - 1; found = DLT_RETURN_TRUE; } /* skip payload data */ if (fseek(file->handle, file->msg.datasize, SEEK_CUR) != 0) { /* go back to last position in file */ dlt_vlog(LOG_WARNING, "Seek failed to skip payload data of size %d!\n", file->msg.datasize); if (0 != fseek(file->handle, file->file_position, SEEK_SET)) { dlt_log(LOG_WARNING, "Seek back also failed!\n"); } return DLT_RETURN_ERROR; } } else { /* filter is disabled */ /* skip additional header parameters and payload data */ if (fseek(file->handle, (long) (file->msg.headersize - sizeof(DltStorageHeader) - sizeof(DltStandardHeader) + file->msg.datasize), SEEK_CUR)) { dlt_vlog(LOG_WARNING, "Seek failed to skip extra header and payload data from file of size %d!\n", file->msg.headersize - (int32_t)sizeof(DltStorageHeader) - (int32_t)sizeof(DltStandardHeader) + file->msg.datasize); /* go back to last position in file */ if (fseek(file->handle, file->file_position, SEEK_SET)) { dlt_log(LOG_WARNING, "Seek back also failed!\n"); } return DLT_RETURN_ERROR; } /* store index pointer to message position in DLT file */ file->index[file->counter] = file->file_position; file->counter++; file->position = file->counter - 1; found = DLT_RETURN_TRUE; } /* increase total message counter */ file->counter_total++; /* store position to next message */ file->file_position = ftell(file->handle); return found; } DltReturnValue dlt_file_read_raw(DltFile *file, int resync, int verbose) { int found = DLT_RETURN_OK; long *ptr; if (verbose) { dlt_vlog(LOG_DEBUG, "%s: Message %d:\n", __func__, file->counter_total); } if (file == NULL) return DLT_RETURN_WRONG_PARAMETER; /* allocate new memory for index if number of messages exceeds a multiple of DLT_COMMON_INDEX_ALLOC (e.g.: 1000) */ if (file->counter % DLT_COMMON_INDEX_ALLOC == 0) { ptr = (long *)malloc(((file->counter / DLT_COMMON_INDEX_ALLOC) + 1) * DLT_COMMON_INDEX_ALLOC * sizeof(long)); if (ptr == NULL) return DLT_RETURN_ERROR; if (file->index) { memcpy(ptr, file->index, (size_t) (file->counter) * sizeof(long)); free(file->index); } file->index = ptr; } /* set to end of last successful read message, because of conflicting calls to dlt_file_read and dlt_file_message */ if (0 != fseek(file->handle, file->file_position, SEEK_SET)) return DLT_RETURN_ERROR; /* get file position at start of DLT message */ if (verbose) { dlt_vlog(LOG_DEBUG, "Position in file: %ld\n", file->file_position); } /* read header */ if (dlt_file_read_header_raw(file, resync, verbose) < DLT_RETURN_OK) { /* go back to last position in file */ if (0 != fseek(file->handle, file->file_position, SEEK_SET)) { dlt_log(LOG_WARNING, "dlt_file_read_raw, fseek failed 1\n"); } return DLT_RETURN_ERROR; } /* read the extended header if filter is enabled and extended header exists */ if (dlt_file_read_header_extended(file, verbose) < DLT_RETURN_OK) { /* go back to last position in file */ if (0 != fseek(file->handle, file->file_position, SEEK_SET)) { dlt_log(LOG_WARNING, "dlt_file_read_raw, fseek failed 2\n"); } return DLT_RETURN_ERROR; } if (dlt_file_read_data(file, verbose) < DLT_RETURN_OK) { /* go back to last position in file */ if (0 != fseek(file->handle, file->file_position, SEEK_SET)) { dlt_log(LOG_WARNING, "dlt_file_read_raw, fseek failed 3\n"); } return DLT_RETURN_ERROR; } /* store index pointer to message position in DLT file */ file->index[file->counter] = file->file_position; file->counter++; file->position = file->counter - 1; found = DLT_RETURN_TRUE; /* increase total message counter */ file->counter_total++; /* store position to next message */ file->file_position = ftell(file->handle); return found; } DltReturnValue dlt_file_close(DltFile *file, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (file == NULL) return DLT_RETURN_WRONG_PARAMETER; if (file->handle) fclose(file->handle); file->handle = NULL; return DLT_RETURN_OK; } DltReturnValue dlt_file_message(DltFile *file, int index, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (file == NULL) return DLT_RETURN_WRONG_PARAMETER; /* check if message is in range */ if (index >= file->counter) { dlt_vlog(LOG_WARNING, "Message %d out of range!\r\n", index); return DLT_RETURN_WRONG_PARAMETER; } /* seek to position in file */ if (fseek(file->handle, file->index[index], SEEK_SET) != 0) { dlt_vlog(LOG_WARNING, "Seek to message %d to position %ld failed!\r\n", index, file->index[index]); return DLT_RETURN_ERROR; } /* read all header and payload */ if (dlt_file_read_header(file, verbose) < DLT_RETURN_OK) return DLT_RETURN_ERROR; if (dlt_file_read_header_extended(file, verbose) < DLT_RETURN_OK) return DLT_RETURN_ERROR; if (dlt_file_read_data(file, verbose) < DLT_RETURN_OK) return DLT_RETURN_ERROR; /* set current position in file */ file->position = index; return DLT_RETURN_OK; } DltReturnValue dlt_file_free(DltFile *file, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); if (file == NULL) return DLT_RETURN_WRONG_PARAMETER; /* delete index lost if exists */ if (file->index) free(file->index); file->index = NULL; /* close file */ if (file->handle) fclose(file->handle); file->handle = NULL; return dlt_message_free(&(file->msg), verbose); } void dlt_log_set_level(int level) { if ((level < 0) || (level > LOG_DEBUG)) { if (logging_level < LOG_WARNING) logging_level = LOG_WARNING; dlt_vlog(LOG_WARNING, "Wrong parameter for level: %d\n", level); } else { logging_level = level; } } void dlt_log_set_filename(const char *filename) { /* check nullpointer */ if (filename == NULL) { dlt_log(LOG_WARNING, "Wrong parameter: filename is NULL\n"); return; } strncpy(logging_filename, filename, NAME_MAX); logging_filename[NAME_MAX] = 0; } #if defined DLT_DAEMON_USE_FIFO_IPC || defined DLT_LIB_USE_FIFO_IPC void dlt_log_set_fifo_basedir(const char *pipe_dir) { strncpy(dltFifoBaseDir, pipe_dir, DLT_PATH_MAX); dltFifoBaseDir[DLT_PATH_MAX - 1] = 0; } #endif #ifdef DLT_SHM_ENABLE void dlt_log_set_shm_name(const char * env_shm_name) { strncpy(dltShmName, env_shm_name, NAME_MAX); dltShmName[NAME_MAX] = 0; } #endif void dlt_log_init(int mode) { if ((mode < DLT_LOG_TO_CONSOLE) || (mode > DLT_LOG_DROPPED)) { dlt_vlog(LOG_WARNING, "Wrong parameter for mode: %d\n", mode); return; } logging_mode = mode; if (logging_mode == DLT_LOG_TO_FILE) { /* internal logging to file */ logging_handle = fopen(logging_filename, "a"); if (logging_handle == NULL) { dlt_user_printf("Internal log file %s cannot be opened!\n", logging_filename); return; } } } void dlt_log_free(void) { if (logging_mode == DLT_LOG_TO_FILE) fclose(logging_handle); } int dlt_user_printf(const char *format, ...) { va_list args; va_start(args, format); int ret = 0; switch (logging_mode) { case DLT_LOG_TO_CONSOLE: case DLT_LOG_TO_SYSLOG: case DLT_LOG_TO_FILE: case DLT_LOG_DROPPED: default: ret = vfprintf(stdout, format, args); break; case DLT_LOG_TO_STDERR: ret = vfprintf(stderr, format, args); break; } va_end(args); return ret; } DltReturnValue dlt_log(int prio, char *s) { static const char asSeverity[LOG_DEBUG + 2][11] = { "EMERGENCY", "ALERT ", "CRITICAL ", "ERROR ", "WARNING ", "NOTICE ", "INFO ", "DEBUG ", " " }; static const char sFormatString[] = "[%5d.%06d]~DLT~%5d~%s~%s"; struct timespec sTimeSpec; if (s == NULL) return DLT_RETURN_WRONG_PARAMETER; if (logging_level < prio) return DLT_RETURN_OK; if ((prio < 0) || (prio > LOG_DEBUG)) prio = LOG_DEBUG + 1; clock_gettime(CLOCK_MONOTONIC, &sTimeSpec); switch (logging_mode) { case DLT_LOG_TO_CONSOLE: /* log to stdout */ fprintf(stdout, sFormatString, (unsigned int)sTimeSpec.tv_sec, (unsigned int)(sTimeSpec.tv_nsec / 1000), getpid(), asSeverity[prio], s); fflush(stdout); break; case DLT_LOG_TO_STDERR: /* log to stderr */ fprintf(stderr, sFormatString, (unsigned int)sTimeSpec.tv_sec, (unsigned int)(sTimeSpec.tv_nsec / 1000), getpid(), asSeverity[prio], s); break; case DLT_LOG_TO_SYSLOG: /* log to syslog */ #if !defined (__WIN32__) && !defined(_MSC_VER) openlog("DLT", LOG_PID, LOG_DAEMON); syslog(prio, sFormatString, (unsigned int)sTimeSpec.tv_sec, (unsigned int)(sTimeSpec.tv_nsec / 1000), getpid(), asSeverity[prio], s); closelog(); #endif break; case DLT_LOG_TO_FILE: /* log to file */ if (logging_handle) { fprintf(logging_handle, sFormatString, (unsigned int)sTimeSpec.tv_sec, (unsigned int)(sTimeSpec.tv_nsec / 1000), getpid(), asSeverity[prio], s); fflush(logging_handle); } break; case DLT_LOG_DROPPED: default: break; } return DLT_RETURN_OK; } DltReturnValue dlt_vlog(int prio, const char *format, ...) { char outputString[2048] = { 0 }; /* TODO: what is a reasonable string length here? */ va_list args; if (format == NULL) return DLT_RETURN_WRONG_PARAMETER; if (logging_level < prio) return DLT_RETURN_OK; va_start(args, format); vsnprintf(outputString, 2047, format, args); va_end(args); dlt_log(prio, outputString); return DLT_RETURN_OK; } DltReturnValue dlt_vnlog(int prio, size_t size, const char *format, ...) { char *outputString = NULL; va_list args; if (format == NULL) return DLT_RETURN_WRONG_PARAMETER; if ((logging_level < prio) || (size == 0)) return DLT_RETURN_OK; if ((outputString = (char *)calloc(size + 1, sizeof(char))) == NULL) return DLT_RETURN_ERROR; va_start(args, format); vsnprintf(outputString, size, format, args); va_end(args); dlt_log(prio, outputString); free(outputString); outputString = NULL; return DLT_RETURN_OK; } DltReturnValue dlt_receiver_init(DltReceiver *receiver, int fd, DltReceiverType type, int buffersize) { if (NULL == receiver) return DLT_RETURN_WRONG_PARAMETER; receiver->fd = fd; receiver->type = type; /** Reuse the receiver buffer if it exists and the buffer size * is not changed. If not, free the old one and allocate a new buffer. */ if ((NULL != receiver->buffer) && ((uint32_t) buffersize != receiver->buffersize)) { free(receiver->buffer); receiver->buffer = NULL; } if (NULL == receiver->buffer) { receiver->lastBytesRcvd = 0; receiver->bytesRcvd = 0; receiver->totalBytesRcvd = 0; receiver->buf = NULL; receiver->backup_buf = NULL; receiver->buffer = (char *)calloc(1, (size_t) buffersize); receiver->buffersize = (uint32_t) buffersize; } if (NULL == receiver->buffer) { dlt_log(LOG_ERR, "allocate memory for receiver buffer failed.\n"); return DLT_RETURN_ERROR; } else { receiver->buf = receiver->buffer; } return DLT_RETURN_OK; } DltReturnValue dlt_receiver_init_global_buffer(DltReceiver *receiver, int fd, DltReceiverType type, char **buffer) { if (receiver == NULL) return DLT_RETURN_WRONG_PARAMETER; if (*buffer == NULL) { /* allocating the buffer once and using it for all application receivers * by keeping allocated buffer in app_recv_buffer global handle */ *buffer = (char *)malloc(DLT_RECEIVE_BUFSIZE); if (*buffer == NULL) return DLT_RETURN_ERROR; } receiver->lastBytesRcvd = 0; receiver->bytesRcvd = 0; receiver->totalBytesRcvd = 0; receiver->buffersize = DLT_RECEIVE_BUFSIZE; receiver->fd = fd; receiver->type = type; receiver->buffer = *buffer; receiver->backup_buf = NULL; receiver->buf = receiver->buffer; return DLT_RETURN_OK; } DltReturnValue dlt_receiver_free(DltReceiver *receiver) { if (receiver == NULL) return DLT_RETURN_WRONG_PARAMETER; if (receiver->buffer) free(receiver->buffer); if (receiver->backup_buf) free(receiver->backup_buf); receiver->buffer = NULL; receiver->buf = NULL; receiver->backup_buf = NULL; return DLT_RETURN_OK; } DltReturnValue dlt_receiver_free_global_buffer(DltReceiver *receiver) { if (receiver == NULL) return DLT_RETURN_WRONG_PARAMETER; if (receiver->backup_buf) free(receiver->backup_buf); receiver->buffer = NULL; receiver->buf = NULL; receiver->backup_buf = NULL; return DLT_RETURN_OK; } int dlt_receiver_receive(DltReceiver *receiver) { socklen_t addrlen; if (receiver == NULL) return -1; if (receiver->buffer == NULL) return -1; receiver->buf = (char *)receiver->buffer; receiver->lastBytesRcvd = receiver->bytesRcvd; if ((receiver->lastBytesRcvd) && (receiver->backup_buf != NULL)) { memcpy(receiver->buf, receiver->backup_buf, (size_t) receiver->lastBytesRcvd); free(receiver->backup_buf); receiver->backup_buf = NULL; } if (receiver->type == DLT_RECEIVE_SOCKET) /* wait for data from socket */ receiver->bytesRcvd = recv(receiver->fd, receiver->buf + receiver->lastBytesRcvd, receiver->buffersize - (uint32_t) receiver->lastBytesRcvd, 0); else if (receiver->type == DLT_RECEIVE_FD) /* wait for data from fd */ receiver->bytesRcvd = read(receiver->fd, receiver->buf + receiver->lastBytesRcvd, receiver->buffersize - (uint32_t) receiver->lastBytesRcvd); else { /* receiver->type == DLT_RECEIVE_UDP_SOCKET */ /* wait for data from UDP socket */ addrlen = sizeof(receiver->addr); receiver->bytesRcvd = recvfrom(receiver->fd, receiver->buf + receiver->lastBytesRcvd, receiver->buffersize - receiver->lastBytesRcvd, 0, (struct sockaddr *)&(receiver->addr), &addrlen); } if (receiver->bytesRcvd <= 0) { receiver->bytesRcvd = 0; return receiver->bytesRcvd; } /* if */ receiver->totalBytesRcvd += receiver->bytesRcvd; receiver->bytesRcvd += receiver->lastBytesRcvd; return receiver->bytesRcvd; } DltReturnValue dlt_receiver_remove(DltReceiver *receiver, int size) { if (receiver == NULL) return DLT_RETURN_WRONG_PARAMETER; if (receiver->buf == NULL) return DLT_RETURN_ERROR; if ((size > receiver->bytesRcvd) || (size <= 0)) { receiver->buf = receiver->buf + receiver->bytesRcvd; receiver->bytesRcvd = 0; return DLT_RETURN_WRONG_PARAMETER; } receiver->bytesRcvd = receiver->bytesRcvd - size; receiver->buf = receiver->buf + size; return DLT_RETURN_OK; } DltReturnValue dlt_receiver_move_to_begin(DltReceiver *receiver) { if (receiver == NULL) return DLT_RETURN_WRONG_PARAMETER; if ((receiver->buffer == NULL) || (receiver->buf == NULL)) return DLT_RETURN_ERROR; if ((receiver->buffer != receiver->buf) && (receiver->bytesRcvd != 0)) { receiver->backup_buf = calloc((size_t) (receiver->bytesRcvd + 1), sizeof(char)); if (receiver->backup_buf == NULL) dlt_vlog(LOG_WARNING, "Can't allocate memory for backup buf, there will be atleast" "one corrupted message for fd[%d] \n", receiver->fd); else memcpy(receiver->backup_buf, receiver->buf, (size_t) receiver->bytesRcvd); } return DLT_RETURN_OK; } int dlt_receiver_check_and_get(DltReceiver *receiver, void *dest, unsigned int to_get, unsigned int flags) { size_t min_size = (size_t) to_get; uint8_t *src = NULL; if (flags & DLT_RCV_SKIP_HEADER) min_size += sizeof(DltUserHeader); if (!receiver || (receiver->bytesRcvd < (int32_t) min_size) || !receiver->buf || !dest) return DLT_RETURN_WRONG_PARAMETER; src = (uint8_t *)receiver->buf; if (flags & DLT_RCV_SKIP_HEADER) src += sizeof(DltUserHeader); memcpy(dest, src, to_get); if (flags & DLT_RCV_REMOVE) { if (dlt_receiver_remove(receiver, (int) min_size) != DLT_RETURN_OK) { dlt_log(LOG_WARNING, "Can't remove bytes from receiver\n"); return DLT_RETURN_ERROR; } } return to_get; } DltReturnValue dlt_set_storageheader(DltStorageHeader *storageheader, const char *ecu) { #if !defined(_MSC_VER) struct timeval tv; #endif if ((storageheader == NULL) || (ecu == NULL)) return DLT_RETURN_WRONG_PARAMETER; /* get time of day */ #if defined(_MSC_VER) time(&(storageheader->seconds)); #else gettimeofday(&tv, NULL); #endif /* prepare storage header */ storageheader->pattern[0] = 'D'; storageheader->pattern[1] = 'L'; storageheader->pattern[2] = 'T'; storageheader->pattern[3] = 0x01; dlt_set_id(storageheader->ecu, ecu); /* Set current time */ #if defined(_MSC_VER) storageheader->microseconds = 0; #else storageheader->seconds = (uint32_t) tv.tv_sec; /* value is long */ storageheader->microseconds = (int32_t) tv.tv_usec; /* value is long */ #endif return DLT_RETURN_OK; } DltReturnValue dlt_check_rcv_data_size(uint32_t received, uint32_t required) { int _ret = DLT_RETURN_OK; if (received < required) { dlt_vlog(LOG_WARNING, "%s: Received data not complete\n", __func__); _ret = DLT_RETURN_ERROR; } return _ret; } DltReturnValue dlt_check_storageheader(DltStorageHeader *storageheader) { if (storageheader == NULL) return DLT_RETURN_WRONG_PARAMETER; return ((storageheader->pattern[0] == 'D') && (storageheader->pattern[1] == 'L') && (storageheader->pattern[2] == 'T') && (storageheader->pattern[3] == 1)) ? DLT_RETURN_TRUE : DLT_RETURN_OK; } DltReturnValue dlt_buffer_init_static_server(DltBuffer *buf, const unsigned char *ptr, uint32_t size) { if ((buf == NULL) || (ptr == NULL)) return DLT_RETURN_WRONG_PARAMETER; DltBufferHead *head; /* Init parameters */ buf->shm = (unsigned char *)ptr; buf->min_size = size; buf->max_size = size; buf->step_size = 0; /* Init pointers */ head = (DltBufferHead *)buf->shm; head->read = 0; head->write = 0; head->count = 0; buf->mem = (unsigned char *)(buf->shm + sizeof(DltBufferHead)); buf->size = (unsigned int) buf->min_size - (unsigned int) sizeof(DltBufferHead); /* clear memory */ memset(buf->mem, 0, buf->size); dlt_vlog(LOG_DEBUG, "%s: Buffer: Size %d, Start address %lX\n", __func__, buf->size, (unsigned long)buf->mem); return DLT_RETURN_OK; /* OK */ } DltReturnValue dlt_buffer_init_static_client(DltBuffer *buf, const unsigned char *ptr, uint32_t size) { if ((buf == NULL) || (ptr == NULL)) return DLT_RETURN_WRONG_PARAMETER; /* Init parameters */ buf->shm = (unsigned char *)ptr; buf->min_size = size; buf->max_size = size; buf->step_size = 0; /* Init pointers */ buf->mem = (unsigned char *)(buf->shm + sizeof(DltBufferHead)); buf->size = (uint32_t) (buf->min_size - sizeof(DltBufferHead)); dlt_vlog(LOG_DEBUG, "%s: Buffer: Size %d, Start address %lX\n", __func__, buf->size, (unsigned long)buf->mem); return DLT_RETURN_OK; /* OK */ } DltReturnValue dlt_buffer_init_dynamic(DltBuffer *buf, uint32_t min_size, uint32_t max_size, uint32_t step_size) { /*Do not DLT_SEM_LOCK inside here! */ DltBufferHead *head; /* catch null pointer */ if (buf == NULL) return DLT_RETURN_WRONG_PARAMETER; /* catch 0 logical errors */ if ((min_size == 0) || (max_size == 0) || (step_size == 0)) return DLT_RETURN_WRONG_PARAMETER; if (min_size > max_size) return DLT_RETURN_WRONG_PARAMETER; if (step_size > max_size) return DLT_RETURN_WRONG_PARAMETER; /* Init parameters */ buf->min_size = min_size; buf->max_size = max_size; buf->step_size = step_size; /* allocat memory */ buf->shm = malloc(buf->min_size); if (buf->shm == NULL) { dlt_vlog(LOG_EMERG, "%s: Buffer: Cannot allocate %d bytes\n", __func__, buf->min_size); return DLT_RETURN_ERROR; } /* Init pointers */ head = (DltBufferHead *)buf->shm; head->read = 0; head->write = 0; head->count = 0; buf->mem = (unsigned char *)(buf->shm + sizeof(DltBufferHead)); buf->size = (uint32_t) (buf->min_size - sizeof(DltBufferHead)); dlt_vlog(LOG_DEBUG, "%s: Buffer: Size %d, Start address %lX\n", __func__, buf->size, (unsigned long)buf->mem); /* clear memory */ memset(buf->mem, 0, (size_t) buf->size); return DLT_RETURN_OK; /* OK */ } DltReturnValue dlt_buffer_free_static(DltBuffer *buf) { /* catch null pointer */ if (buf == NULL) return DLT_RETURN_WRONG_PARAMETER; if (buf->mem == NULL) { /* buffer not initialized */ dlt_vlog(LOG_WARNING, "%s: Buffer: Buffer not initialized\n", __func__); return DLT_RETURN_ERROR; /* ERROR */ } return DLT_RETURN_OK; } DltReturnValue dlt_buffer_free_dynamic(DltBuffer *buf) { /* catch null pointer */ if (buf == NULL) return DLT_RETURN_WRONG_PARAMETER; if (buf->shm == NULL) { /* buffer not initialized */ dlt_vlog(LOG_WARNING, "%s: Buffer: Buffer not initialized\n", __func__); return DLT_RETURN_ERROR; /* ERROR */ } free(buf->shm); buf->shm = NULL; buf->mem = NULL; return DLT_RETURN_OK; } void dlt_buffer_write_block(DltBuffer *buf, int *write, const unsigned char *data, unsigned int size) { /* catch null pointer */ if ((buf != NULL) && (write != NULL) && (data != NULL)) { if (size <= buf->size){ if (( (unsigned int) (*write ) + size) <= buf->size) { /* write one block */ memcpy(buf->mem + *write, data, size); *write += (int) size; } else { if(buf->size > (unsigned int) (*write)) { /* write two blocks */ memcpy(buf->mem + *write, data, buf->size - (unsigned int) (*write)); memcpy(buf->mem, data + buf->size - *write, size - buf->size + (unsigned int) (*write)); } *write += (int) (size - buf->size); } } else { dlt_vlog(LOG_WARNING, "%s: Write error: ring buffer to small\n", __func__); } } else { dlt_vlog(LOG_WARNING, "%s: Wrong parameter: Null pointer\n", __func__); } } void dlt_buffer_read_block(DltBuffer *buf, int *read, unsigned char *data, unsigned int size) { /* catch nullpointer */ if ((buf != NULL) && (read != NULL) && (data != NULL)) { if (((unsigned int) (*read) + size) <= buf->size) { /* read one block */ memcpy(data, buf->mem + *read, size); *read +=(int) size; } else { if(buf->size > (unsigned int) (*read)) { /* read two blocks */ memcpy(data, buf->mem + *read, buf->size - (unsigned int) (*read)); memcpy(data + buf->size - *read, buf->mem, size - buf->size + (unsigned int) (*read)); } *read += (int) (size - buf->size); } } else { dlt_vlog(LOG_WARNING, "%s: Wrong parameter: Null pointer\n", __func__); } } int dlt_buffer_check_size(DltBuffer *buf, int needed) { if (buf == NULL) return DLT_RETURN_WRONG_PARAMETER; if ((buf->size + sizeof(DltBufferHead) + (size_t) needed) > buf->max_size) return DLT_RETURN_ERROR; return DLT_RETURN_OK; } int dlt_buffer_increase_size(DltBuffer *buf) { DltBufferHead *head, *new_head; unsigned char *new_ptr; /* catch null pointer */ if (buf == NULL) { dlt_vlog(LOG_WARNING, "%s: Wrong parameter: Null pointer\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } /* check size */ if (buf->step_size == 0) /* cannot increase size */ return DLT_RETURN_ERROR; /* check size */ if ((buf->size + sizeof(DltBufferHead) + buf->step_size) > buf->max_size) /* max size reached, do not increase */ return DLT_RETURN_ERROR; /* allocate new buffer */ new_ptr = malloc(buf->size + sizeof(DltBufferHead) + buf->step_size); if (new_ptr == NULL) { dlt_vlog(LOG_WARNING, "%s: Buffer: Cannot increase size because allocate %d bytes failed\n", __func__, buf->min_size); return DLT_RETURN_ERROR; } /* copy data */ head = (DltBufferHead *)buf->shm; new_head = (DltBufferHead *)new_ptr; if (head->read < head->write) { memcpy(new_ptr + sizeof(DltBufferHead), buf->mem + head->read, (size_t) (head->write - head->read)); new_head->read = 0; new_head->write = head->write - head->read; new_head->count = head->count; } else { memcpy(new_ptr + sizeof(DltBufferHead), buf->mem + head->read, buf->size - (uint32_t) (head->read)); memcpy(new_ptr + sizeof(DltBufferHead) + buf->size - head->read, buf->mem, (size_t) head->write); new_head->read = 0; new_head->write = (int) (buf->size) + head->write - head->read; new_head->count = head->count; } /* free old data */ free(buf->shm); /* update data */ buf->shm = new_ptr; buf->mem = new_ptr + sizeof(DltBufferHead); buf->size += buf->step_size; dlt_vlog(LOG_DEBUG, "%s: Buffer: Size increased to %d bytes with start address %lX\n", __func__, buf->size + (int32_t)sizeof(DltBufferHead), (unsigned long)buf->mem); return DLT_RETURN_OK; /* OK */ } int dlt_buffer_minimize_size(DltBuffer *buf) { unsigned char *new_ptr; /* catch null pointer */ if (buf == NULL) { dlt_vlog(LOG_WARNING, "%s: Wrong parameter: Null pointer\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if ((buf->size + sizeof(DltBufferHead)) == buf->min_size) /* already minimized */ return DLT_RETURN_OK; /* allocate new buffer */ new_ptr = malloc(buf->min_size); if (new_ptr == NULL) { dlt_vlog(LOG_WARNING, "%s: Buffer: Cannot set to min size of %d bytes\n", __func__, buf->min_size); return DLT_RETURN_ERROR; } /* free old data */ free(buf->shm); /* update data */ buf->shm = new_ptr; buf->mem = new_ptr + sizeof(DltBufferHead); buf->size = (uint32_t) (buf->min_size - sizeof(DltBufferHead)); /* reset pointers and counters */ ((int *)(buf->shm))[0] = 0; /* pointer to write memory */ ((int *)(buf->shm))[1] = 0; /* pointer to read memory */ ((int *)(buf->shm))[2] = 0; /* number of packets */ dlt_vlog(LOG_DEBUG, "%s: Buffer: Buffer minimized to Size %d bytes with start address %lX\n", __func__, buf->size, (unsigned long)buf->mem); /* clear memory */ memset(buf->mem, 0, buf->size); return DLT_RETURN_OK; /* OK */ } int dlt_buffer_reset(DltBuffer *buf) { /* catch null pointer */ if (buf == NULL) { dlt_vlog(LOG_WARNING, "%s: Wrong parameter: Null pointer\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } dlt_vlog(LOG_WARNING, "%s: Buffer: Buffer reset triggered. Size: %d, Start address: %lX\n", __func__, buf->size, (unsigned long)buf->mem); /* reset pointers and counters */ ((int *)(buf->shm))[0] = 0; /* pointer to write memory */ ((int *)(buf->shm))[1] = 0; /* pointer to read memory */ ((int *)(buf->shm))[2] = 0; /* number of packets */ /* clear memory */ memset(buf->mem, 0, buf->size); return DLT_RETURN_OK; /* OK */ } DltReturnValue dlt_buffer_push(DltBuffer *buf, const unsigned char *data, unsigned int size) { return dlt_buffer_push3(buf, data, size, 0, 0, 0, 0); } int dlt_buffer_push3(DltBuffer *buf, const unsigned char *data1, unsigned int size1, const unsigned char *data2, unsigned int size2, const unsigned char *data3, unsigned int size3) { int free_size; int write, read, count; DltBufferBlockHead head; /* catch null pointer */ if (buf == NULL) return DLT_RETURN_WRONG_PARAMETER; if (buf->shm == NULL) { /* buffer not initialised */ dlt_vlog(LOG_ERR, "%s: Buffer: Buffer not initialized\n", __func__); return DLT_RETURN_ERROR; /* ERROR */ } /* get current write pointer */ write = ((int *)(buf->shm))[0]; read = ((int *)(buf->shm))[1]; count = ((int *)(buf->shm))[2]; /* check pointers */ if (((unsigned int) read > buf->size) || ((unsigned int) write > buf->size)) { dlt_vlog(LOG_ERR, "%s: Buffer: Pointer out of range. Read: %d, Write: %d, Size: %d\n", __func__, read, write, buf->size); dlt_buffer_reset(buf); return DLT_RETURN_ERROR; /* ERROR */ } /* calculate free size */ if (read > write) free_size = read - write; else if (count && (write == read)) free_size = 0; else free_size = (int) buf->size - write + read; /* check size */ while (free_size < (int) (sizeof(DltBufferBlockHead) + size1 + size2 + size3)) { /* try to increase size if possible */ if (dlt_buffer_increase_size(buf)) /* increase size is not possible */ /*dlt_log(LOG_ERR, "Buffer: Buffer is full\n"); */ return DLT_RETURN_ERROR; /* ERROR */ /* update pointers */ write = ((int *)(buf->shm))[0]; read = ((int *)(buf->shm))[1]; /* update free size */ if (read > write) free_size = read - write; else if (count && (write == read)) free_size = 0; else free_size = buf->size - write + read; } /* set header */ strncpy(head.head, DLT_BUFFER_HEAD, 4); head.head[3] = 0; head.status = 2; head.size = (int) (size1 + size2 + size3); /* write data */ dlt_buffer_write_block(buf, &write, (unsigned char *)&head, sizeof(DltBufferBlockHead)); if (size1) dlt_buffer_write_block(buf, &write, data1, size1); if (size2) dlt_buffer_write_block(buf, &write, data2, size2); if (size3) dlt_buffer_write_block(buf, &write, data3, size3); /* update global shm pointers */ ((int *)(buf->shm))[0] = write; /* set new write pointer */ ((int *)(buf->shm))[2] += 1; /* increase counter */ return DLT_RETURN_OK; /* OK */ } int dlt_buffer_get(DltBuffer *buf, unsigned char *data, int max_size, int delete) { int used_size; int write, read, count; char head_compare[] = DLT_BUFFER_HEAD; DltBufferBlockHead head; /* catch null pointer */ if (buf == NULL) return DLT_RETURN_WRONG_PARAMETER; if (buf->shm == NULL) { /* shm not initialised */ dlt_vlog(LOG_ERR, "%s: Buffer: SHM not initialized\n", __func__); return DLT_RETURN_ERROR; /* ERROR */ } /* get current write pointer */ write = ((int *)(buf->shm))[0]; read = ((int *)(buf->shm))[1]; count = ((int *)(buf->shm))[2]; /* check pointers */ if (((unsigned int) read > buf->size) || ((unsigned int) write > buf->size) || (count < 0)) { dlt_vlog(LOG_ERR, "%s: Buffer: Pointer out of range. Read: %d, Write: %d, Count: %d, Size: %d\n", __func__, read, write, count, buf->size); dlt_buffer_reset(buf); return DLT_RETURN_ERROR; /* ERROR */ } /* check if data is in there */ if (count == 0) { if (write != read) { dlt_vlog(LOG_ERR, "%s: Buffer: SHM should be empty, but is not. Read: %d, Write: %d\n", __func__, read, write); dlt_buffer_reset(buf); } return DLT_RETURN_ERROR; /* ERROR */ } /* calculate used size */ if (write > read) used_size = write - read; else used_size = (int) buf->size - read + write; /* first check size */ if (used_size < (int)(sizeof(DltBufferBlockHead))) { dlt_vlog(LOG_ERR, "%s: Buffer: Used size is smaller than buffer block header size. Used size: %d\n", __func__, used_size); dlt_buffer_reset(buf); return DLT_RETURN_ERROR; /* ERROR */ } /* read header */ dlt_buffer_read_block(buf, &read, (unsigned char *)&head, sizeof(DltBufferBlockHead)); /* check header */ if (memcmp((unsigned char *)(head.head), head_compare, sizeof(head_compare)) != 0) { dlt_vlog(LOG_ERR, "%s: Buffer: Header head check failed\n", __func__); dlt_buffer_reset(buf); return DLT_RETURN_ERROR; /* ERROR */ } if (head.status != 2) { dlt_vlog(LOG_ERR, "%s: Buffer: Header status check failed\n", __func__); dlt_buffer_reset(buf); return DLT_RETURN_ERROR; /* ERROR */ } /* second check size */ if (used_size < ((int) sizeof(DltBufferBlockHead) + head.size)) { dlt_vlog(LOG_ERR, "%s: Buffer: Used size is smaller than buffer block header size And read header size. Used size: %d\n", __func__, used_size); dlt_buffer_reset(buf); return DLT_RETURN_ERROR; /* ERROR */ } /* third check size */ if (max_size && (head.size > max_size)) dlt_vlog(LOG_WARNING, "%s: Buffer: Max size is smaller than read header size. Max size: %d\n", __func__, max_size); /* nothing to do but data does not fit provided buffer */ if ((data != NULL) && max_size) { /* read data */ dlt_buffer_read_block(buf, &read, data, (unsigned int) head.size); if (delete) /* update buffer pointers */ ((int *)(buf->shm))[1] = read; /* set new read pointer */ } else if (delete) { if ((unsigned int) (read + head.size) <= buf->size) ((int *)(buf->shm))[1] = read + head.size; /* set new read pointer */ else ((int *)(buf->shm))[1] = read + head.size - (int) buf->size; /* set new read pointer */ } if (delete) { ((int *)(buf->shm))[2] -= 1; /* decrease counter */ if (((int *)(buf->shm))[2] == 0) /* try to minimize size */ dlt_buffer_minimize_size(buf); } return head.size; /* OK */ } int dlt_buffer_pull(DltBuffer *buf, unsigned char *data, int max_size) { return dlt_buffer_get(buf, data, max_size, 1); } int dlt_buffer_copy(DltBuffer *buf, unsigned char *data, int max_size) { return dlt_buffer_get(buf, data, max_size, 0); } int dlt_buffer_remove(DltBuffer *buf) { return dlt_buffer_get(buf, 0, 0, 1); } void dlt_buffer_info(DltBuffer *buf) { /* check nullpointer */ if (buf == NULL) { dlt_vlog(LOG_WARNING, "%s: Wrong parameter: Null pointer\n", __func__); return; } dlt_vlog(LOG_DEBUG, "Buffer: Available size: %d, Buffer: Buffer full start address: %lX, Buffer: Buffer start address: %lX\n", buf->size, (unsigned long)buf->shm, (unsigned long)buf->mem); } void dlt_buffer_status(DltBuffer *buf) { int write, read, count; /* check nullpointer */ if (buf == NULL) { dlt_vlog(LOG_WARNING, "%s: Wrong parameter: Null pointer\n", __func__); return; } /* check if buffer available */ if (buf->shm == NULL) return; write = ((int *)(buf->shm))[0]; read = ((int *)(buf->shm))[1]; count = ((int *)(buf->shm))[2]; dlt_vlog(LOG_DEBUG, "Buffer: Write: %d, Read: %d, Count: %d\n", write, read, count); } uint32_t dlt_buffer_get_total_size(DltBuffer *buf) { /* catch null pointer */ if (buf == NULL) return DLT_RETURN_WRONG_PARAMETER; return buf->max_size; } int dlt_buffer_get_used_size(DltBuffer *buf) { int write, read, count; /* catch null pointer */ if (buf == NULL) return DLT_RETURN_WRONG_PARAMETER; /* check if buffer available */ if (buf->shm == NULL) return DLT_RETURN_OK; write = ((int *)(buf->shm))[0]; read = ((int *)(buf->shm))[1]; count = ((int *)(buf->shm))[2]; if (count == 0) return DLT_RETURN_OK; if (write > read) return write - read; return (int) buf->size - read + write; } int dlt_buffer_get_message_count(DltBuffer *buf) { /* catch null pointer */ if (buf == NULL) return DLT_RETURN_WRONG_PARAMETER; /* check if buffer available */ if (buf->shm == NULL) return DLT_RETURN_OK; return ((int *)(buf->shm))[2]; } #if !defined (__WIN32__) DltReturnValue dlt_setup_serial(int fd, speed_t speed) { # if !defined (__WIN32__) && !defined(_MSC_VER) struct termios config; if (isatty(fd) == 0) return DLT_RETURN_ERROR; if (tcgetattr(fd, &config) < 0) return DLT_RETURN_ERROR; /* Input flags - Turn off input processing * convert break to null byte, no CR to NL translation, * no NL to CR translation, don't mark parity errors or breaks * no input parity check, don't strip high bit off, * no XON/XOFF software flow control */ config.c_iflag &= ~(IGNBRK | BRKINT | ICRNL | INLCR | PARMRK | INPCK | ISTRIP | IXON); /* Output flags - Turn off output processing * no CR to NL translation, no NL to CR-NL translation, * no NL to CR translation, no column 0 CR suppression, * no Ctrl-D suppression, no fill characters, no case mapping, * no local output processing * * config.c_oflag &= ~(OCRNL | ONLCR | ONLRET | * ONOCR | ONOEOT| OFILL | OLCUC | OPOST); */ config.c_oflag = 0; /* No line processing: * echo off, echo newline off, canonical mode off, * extended input processing off, signal chars off */ config.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN | ISIG); /* Turn off character processing * clear current char size mask, no parity checking, * no output processing, force 8 bit input */ config.c_cflag &= ~(CSIZE | PARENB); config.c_cflag |= CS8; /* One input byte is enough to return from read() * Inter-character timer off */ config.c_cc[VMIN] = 1; config.c_cc[VTIME] = 0; /* Communication speed (simple version, using the predefined * constants) */ if ((cfsetispeed(&config, speed) < 0) || (cfsetospeed(&config, speed) < 0)) return DLT_RETURN_ERROR; /* Finally, apply the configuration */ if (tcsetattr(fd, TCSAFLUSH, &config) < 0) return DLT_RETURN_ERROR; return DLT_RETURN_OK; # else return DLT_RETURN_ERROR; # endif } speed_t dlt_convert_serial_speed(int baudrate) { # if !defined (__WIN32__) && !defined(_MSC_VER) && !defined(__CYGWIN__) speed_t ret; switch (baudrate) { case 50: { ret = B50; break; } case 75: { ret = B75; break; } case 110: { ret = B110; break; } case 134: { ret = B134; break; } case 150: { ret = B150; break; } case 200: { ret = B200; break; } case 300: { ret = B300; break; } case 600: { ret = B600; break; } case 1200: { ret = B1200; break; } case 1800: { ret = B1800; break; } case 2400: { ret = B2400; break; } case 4800: { ret = B4800; break; } case 9600: { ret = B9600; break; } case 19200: { ret = B19200; break; } case 38400: { ret = B38400; break; } case 57600: { ret = B57600; break; } case 115200: { ret = B115200; break; } # ifdef __linux__ case 230400: { ret = B230400; break; } case 460800: { ret = B460800; break; } case 500000: { ret = B500000; break; } case 576000: { ret = B576000; break; } case 921600: { ret = B921600; break; } case 1000000: { ret = B1000000; break; } case 1152000: { ret = B1152000; break; } case 1500000: { ret = B1500000; break; } case 2000000: { ret = B2000000; break; } case 2500000: { ret = B2500000; break; } case 3000000: { ret = B3000000; break; } case 3500000: { ret = B3500000; break; } case 4000000: { ret = B4000000; break; } # endif /* __linux__ */ default: { ret = B115200; break; } } return ret; # else return 0; # endif } #endif void dlt_get_version(char *buf, size_t size) { if ((buf == NULL) && (size > 0)) { dlt_log(LOG_WARNING, "Wrong parameter: Null pointer\n"); return; } /* Clang does not like these macros, because they are not reproducable */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdate-time" snprintf(buf, size, "DLT Package Version: %s %s, Package Revision: %s, build on %s %s\n%s %s %s %s\n", _DLT_PACKAGE_VERSION, _DLT_PACKAGE_VERSION_STATE, _DLT_PACKAGE_REVISION, __DATE__, __TIME__, _DLT_SYSTEMD_ENABLE, _DLT_SYSTEMD_WATCHDOG_ENABLE, _DLT_TEST_ENABLE, _DLT_SHM_ENABLE); #pragma GCC diagnostic pop } void dlt_get_major_version(char *buf, size_t size) { if ((buf == NULL) && (size > 0)) { dlt_log(LOG_WARNING, "Wrong parameter: Null pointer\n"); return; } snprintf(buf, size, "%s", _DLT_PACKAGE_MAJOR_VERSION); } void dlt_get_minor_version(char *buf, size_t size) { if ((buf == NULL) && (size > 0)) { dlt_log(LOG_WARNING, "Wrong parameter: Null pointer\n"); return; } snprintf(buf, size, "%s", _DLT_PACKAGE_MINOR_VERSION); } uint32_t dlt_uptime(void) { #if defined (__WIN32__) || defined(_MSC_VER) return (uint32_t)(GetTickCount() * 10); /* GetTickCount() return DWORD */ #else struct timespec ts; if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) return (uint32_t)ts.tv_sec * 10000 + (uint32_t)ts.tv_nsec / 100000;/* in 0.1 ms = 100 us */ else return 0; #endif } DltReturnValue dlt_message_print_header(DltMessage *message, char *text, uint32_t size, int verbose) { if ((message == NULL) || (text == NULL)) return DLT_RETURN_WRONG_PARAMETER; dlt_message_header(message, text, size, verbose); dlt_user_printf("%s\n", text); return DLT_RETURN_OK; } DltReturnValue dlt_message_print_hex(DltMessage *message, char *text, uint32_t size, int verbose) { if ((message == NULL) || (text == NULL)) return DLT_RETURN_WRONG_PARAMETER; dlt_message_header(message, text, size, verbose); dlt_user_printf("%s ", text); dlt_message_payload(message, text, size, DLT_OUTPUT_HEX, verbose); dlt_user_printf("[%s]\n", text); return DLT_RETURN_OK; } DltReturnValue dlt_message_print_ascii(DltMessage *message, char *text, uint32_t size, int verbose) { if ((message == NULL) || (text == NULL)) return DLT_RETURN_WRONG_PARAMETER; dlt_message_header(message, text, size, verbose); dlt_user_printf("%s ", text); dlt_message_payload(message, text, size, DLT_OUTPUT_ASCII, verbose); dlt_user_printf("[%s]\n", text); return DLT_RETURN_OK; } DltReturnValue dlt_message_print_mixed_plain(DltMessage *message, char *text, uint32_t size, int verbose) { if ((message == NULL) || (text == NULL)) return DLT_RETURN_WRONG_PARAMETER; dlt_message_header(message, text, size, verbose); dlt_user_printf("%s \n", text); dlt_message_payload(message, text, size, DLT_OUTPUT_MIXED_FOR_PLAIN, verbose); dlt_user_printf("[%s]\n", text); return DLT_RETURN_OK; } DltReturnValue dlt_message_print_mixed_html(DltMessage *message, char *text, uint32_t size, int verbose) { if ((message == NULL) || (text == NULL)) return DLT_RETURN_WRONG_PARAMETER; dlt_message_header(message, text, size, verbose); dlt_user_printf("%s \n", text); dlt_message_payload(message, text, size, DLT_OUTPUT_MIXED_FOR_HTML, verbose); dlt_user_printf("[%s]\n", text); return DLT_RETURN_OK; } DltReturnValue dlt_message_argument_print(DltMessage *msg, uint32_t type_info, uint8_t **ptr, int32_t *datalength, char *text, size_t textlength, int byteLength, int __attribute__((unused)) verbose) { /* check null pointers */ if ((msg == NULL) || (ptr == NULL) || (datalength == NULL) || (text == NULL)) return DLT_RETURN_WRONG_PARAMETER; uint16_t length = 0, length2 = 0, length3 = 0; uint8_t value8u = 0; uint16_t value16u = 0, value16u_tmp = 0; uint32_t value32u = 0, value32u_tmp = 0; uint64_t value64u = 0, value64u_tmp = 0; int8_t value8i = 0; int16_t value16i = 0, value16i_tmp = 0; int32_t value32i = 0, value32i_tmp = 0; int64_t value64i = 0, value64i_tmp = 0; float32_t value32f = 0, value32f_tmp = 0; int32_t value32f_tmp_int32i = 0, value32f_tmp_int32i_swaped = 0; float64_t value64f = 0, value64f_tmp = 0; int64_t value64f_tmp_int64i = 0, value64f_tmp_int64i_swaped = 0; uint32_t quantisation_tmp = 0; /* apparently this makes no sense but needs to be done to prevent compiler warning. * This variable is only written by DLT_MSG_READ_VALUE macro in if (type_info & DLT_TYPE_INFO_FIXP) * case but never read anywhere */ quantisation_tmp += quantisation_tmp; if ((type_info & DLT_TYPE_INFO_STRG) && (((type_info & DLT_TYPE_INFO_SCOD) == DLT_SCOD_ASCII) || ((type_info & DLT_TYPE_INFO_SCOD) == DLT_SCOD_UTF8))) { /* string type or utf8-encoded string type */ if (byteLength < 0) { DLT_MSG_READ_VALUE(value16u_tmp, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; length = (uint16_t) DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16u_tmp); } else { length = (uint16_t)byteLength; } if (type_info & DLT_TYPE_INFO_VARI) { DLT_MSG_READ_VALUE(value16u_tmp, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; length2 = (uint16_t) DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16u_tmp); if ((*datalength) < length2) return DLT_RETURN_ERROR; *ptr += length2; *datalength -= length2; } DLT_MSG_READ_STRING(text, *ptr, *datalength, textlength, length); if ((*datalength) < 0) return DLT_RETURN_ERROR; } else if (type_info & DLT_TYPE_INFO_BOOL) { /* Boolean type */ if (type_info & DLT_TYPE_INFO_VARI) { DLT_MSG_READ_VALUE(value16u_tmp, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; length2 = (uint16_t) DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16u_tmp); if ((*datalength) < length2) return DLT_RETURN_ERROR; *ptr += length2; *datalength -= length2; } value8u = 0; DLT_MSG_READ_VALUE(value8u, *ptr, *datalength, uint8_t); /* No endian conversion necessary */ if ((*datalength) < 0) return DLT_RETURN_ERROR; snprintf(text, textlength, "%d", value8u); } else if ((type_info & DLT_TYPE_INFO_UINT) && (DLT_SCOD_BIN == (type_info & DLT_TYPE_INFO_SCOD))) { if (DLT_TYLE_8BIT == (type_info & DLT_TYPE_INFO_TYLE)) { DLT_MSG_READ_VALUE(value8u, *ptr, *datalength, uint8_t); /* No endian conversion necessary */ if ((*datalength) < 0) return DLT_RETURN_ERROR; char binary[10] = { '\0' }; /* e.g.: "0b1100 0010" */ int i; for (i = (1 << 7); i > 0; i >>= 1) { if ((1 << 3) == i) strcat(binary, " "); strcat(binary, (i == (value8u & i)) ? "1" : "0"); } snprintf(text, textlength, "0b%s", binary); } if (DLT_TYLE_16BIT == (type_info & DLT_TYPE_INFO_TYLE)) { DLT_MSG_READ_VALUE(value16u, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; char binary[20] = { '\0' }; /* e.g.: "0b1100 0010 0011 0110" */ int i; for (i = (1 << 15); i > 0; i >>= 1) { if (((1 << 3) == i) || ((1 << 7) == i) || ((1 << 11) == i)) strcat(binary, " "); strcat(binary, (i == (value16u & i)) ? "1" : "0"); } snprintf(text, textlength, "0b%s", binary); } } else if ((type_info & DLT_TYPE_INFO_UINT) && (DLT_SCOD_HEX == (type_info & DLT_TYPE_INFO_SCOD))) { if (DLT_TYLE_8BIT == (type_info & DLT_TYPE_INFO_TYLE)) { DLT_MSG_READ_VALUE(value8u, *ptr, *datalength, uint8_t); /* No endian conversion necessary */ if ((*datalength) < 0) return DLT_RETURN_ERROR; snprintf(text, textlength, "0x%02x", value8u); } if (DLT_TYLE_16BIT == (type_info & DLT_TYPE_INFO_TYLE)) { DLT_MSG_READ_VALUE(value16u, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; snprintf(text, textlength, "0x%04x", value16u); } if (DLT_TYLE_32BIT == (type_info & DLT_TYPE_INFO_TYLE)) { DLT_MSG_READ_VALUE(value32u, *ptr, *datalength, uint32_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; snprintf(text, textlength, "0x%08x", value32u); } if (DLT_TYLE_64BIT == (type_info & DLT_TYPE_INFO_TYLE)) { *ptr += 4; DLT_MSG_READ_VALUE(value32u, *ptr, *datalength, uint32_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; snprintf(text, textlength, "0x%08x", value32u); *ptr -= 8; DLT_MSG_READ_VALUE(value32u, *ptr, *datalength, uint32_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; snprintf(text + strlen(text), textlength - strlen(text), "%08x", value32u); *ptr += 4; } } else if ((type_info & DLT_TYPE_INFO_SINT) || (type_info & DLT_TYPE_INFO_UINT)) { /* signed or unsigned argument received */ if (type_info & DLT_TYPE_INFO_VARI) { DLT_MSG_READ_VALUE(value16u_tmp, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; length2 = (uint16_t) DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16u_tmp); DLT_MSG_READ_VALUE(value16u_tmp, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; length3 = (uint16_t) DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16u_tmp); if ((*datalength) < length2) return DLT_RETURN_ERROR; *ptr += length2; *datalength -= length2; if ((*datalength) < length3) return DLT_RETURN_ERROR; *ptr += length3; *datalength -= length3; } if (type_info & DLT_TYPE_INFO_FIXP) { DLT_MSG_READ_VALUE(quantisation_tmp, *ptr, *datalength, uint32_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; switch (type_info & DLT_TYPE_INFO_TYLE) { case DLT_TYLE_8BIT: case DLT_TYLE_16BIT: case DLT_TYLE_32BIT: { if ((*datalength) < 4) return DLT_RETURN_ERROR; *ptr += 4; *datalength -= 4; break; } case DLT_TYLE_64BIT: { if ((*datalength) < 8) return DLT_RETURN_ERROR; *ptr += 8; *datalength -= 8; break; } case DLT_TYLE_128BIT: { if ((*datalength) < 16) return DLT_RETURN_ERROR; *ptr += 16; *datalength -= 16; break; } default: { return DLT_RETURN_ERROR; } } } switch (type_info & DLT_TYPE_INFO_TYLE) { case DLT_TYLE_8BIT: { if (type_info & DLT_TYPE_INFO_SINT) { value8i = 0; DLT_MSG_READ_VALUE(value8i, *ptr, *datalength, int8_t); /* No endian conversion necessary */ if ((*datalength) < 0) return DLT_RETURN_ERROR; snprintf(text, textlength, "%d", value8i); } else { value8u = 0; DLT_MSG_READ_VALUE(value8u, *ptr, *datalength, uint8_t); /* No endian conversion necessary */ if ((*datalength) < 0) return DLT_RETURN_ERROR; snprintf(text, textlength, "%d", value8u); } break; } case DLT_TYLE_16BIT: { if (type_info & DLT_TYPE_INFO_SINT) { value16i = 0; value16i_tmp = 0; DLT_MSG_READ_VALUE(value16i_tmp, *ptr, *datalength, int16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; value16i = (int16_t) DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16i_tmp); snprintf(text, textlength, "%hd", value16i); } else { value16u = 0; value16u_tmp = 0; DLT_MSG_READ_VALUE(value16u_tmp, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; value16u = (uint16_t) DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16u_tmp); snprintf(text, textlength, "%hu", value16u); } break; } case DLT_TYLE_32BIT: { if (type_info & DLT_TYPE_INFO_SINT) { value32i = 0; value32i_tmp = 0; DLT_MSG_READ_VALUE(value32i_tmp, *ptr, *datalength, int32_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; value32i = (int32_t) DLT_ENDIAN_GET_32(msg->standardheader->htyp, (uint32_t)value32i_tmp); snprintf(text, textlength, "%d", value32i); } else { value32u = 0; value32u_tmp = 0; DLT_MSG_READ_VALUE(value32u_tmp, *ptr, *datalength, uint32_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; value32u = DLT_ENDIAN_GET_32(msg->standardheader->htyp, value32u_tmp); snprintf(text, textlength, "%u", value32u); } break; } case DLT_TYLE_64BIT: { if (type_info & DLT_TYPE_INFO_SINT) { value64i = 0; value64i_tmp = 0; DLT_MSG_READ_VALUE(value64i_tmp, *ptr, *datalength, int64_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; value64i = (int64_t) DLT_ENDIAN_GET_64(msg->standardheader->htyp, (uint64_t)value64i_tmp); #if defined (__WIN32__) && !defined(_MSC_VER) snprintf(text, textlength, "%I64d", value64i); #else snprintf(text, textlength, "%" PRId64, value64i); #endif } else { value64u = 0; value64u_tmp = 0; DLT_MSG_READ_VALUE(value64u_tmp, *ptr, *datalength, uint64_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; value64u = DLT_ENDIAN_GET_64(msg->standardheader->htyp, value64u_tmp); #if defined (__WIN32__) && !defined(_MSC_VER) snprintf(text, textlength, "%I64u", value64u); #else snprintf(text, textlength, "%" PRIu64, value64u); #endif } break; } case DLT_TYLE_128BIT: { if (*datalength >= 16) dlt_print_hex_string(text, (int) textlength, *ptr, 16); if ((*datalength) < 16) return DLT_RETURN_ERROR; *ptr += 16; *datalength -= 16; break; } default: { return DLT_RETURN_ERROR; } } } else if (type_info & DLT_TYPE_INFO_FLOA) { /* float data argument */ if (type_info & DLT_TYPE_INFO_VARI) { DLT_MSG_READ_VALUE(value16u_tmp, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; length2 = DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16u_tmp); DLT_MSG_READ_VALUE(value16u_tmp, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; length3 = DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16u_tmp); if ((*datalength) < length2) return DLT_RETURN_ERROR; *ptr += length2; *datalength -= length2; if ((*datalength) < length3) return DLT_RETURN_ERROR; *ptr += length3; *datalength -= length3; } switch (type_info & DLT_TYPE_INFO_TYLE) { case DLT_TYLE_8BIT: { if (*datalength >= 1) dlt_print_hex_string(text, (int) textlength, *ptr, 1); if ((*datalength) < 1) return DLT_RETURN_ERROR; *ptr += 1; *datalength -= 1; break; } case DLT_TYLE_16BIT: { if (*datalength >= 2) dlt_print_hex_string(text, (int) textlength, *ptr, 2); if ((*datalength) < 2) return DLT_RETURN_ERROR; *ptr += 2; *datalength -= 2; break; } case DLT_TYLE_32BIT: { if (sizeof(float32_t) == 4) { value32f = 0; value32f_tmp = 0; value32f_tmp_int32i = 0; value32f_tmp_int32i_swaped = 0; DLT_MSG_READ_VALUE(value32f_tmp, *ptr, *datalength, float32_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; memcpy(&value32f_tmp_int32i, &value32f_tmp, sizeof(float32_t)); value32f_tmp_int32i_swaped = (int32_t) DLT_ENDIAN_GET_32(msg->standardheader->htyp, (uint32_t)value32f_tmp_int32i); memcpy(&value32f, &value32f_tmp_int32i_swaped, sizeof(float32_t)); snprintf(text, textlength, "%g", value32f); } else { dlt_log(LOG_ERR, "Invalid size of float32_t\n"); return DLT_RETURN_ERROR; } break; } case DLT_TYLE_64BIT: { if (sizeof(float64_t) == 8) { value64f = 0; value64f_tmp = 0; value64f_tmp_int64i = 0; value64f_tmp_int64i_swaped = 0; DLT_MSG_READ_VALUE(value64f_tmp, *ptr, *datalength, float64_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; memcpy(&value64f_tmp_int64i, &value64f_tmp, sizeof(float64_t)); value64f_tmp_int64i_swaped = (int64_t) DLT_ENDIAN_GET_64(msg->standardheader->htyp, (uint64_t)value64f_tmp_int64i); memcpy(&value64f, &value64f_tmp_int64i_swaped, sizeof(float64_t)); #ifdef __arm__ snprintf(text, textlength, "ILLEGAL"); #else snprintf(text, textlength, "%g", value64f); #endif } else { dlt_log(LOG_ERR, "Invalid size of float64_t\n"); return DLT_RETURN_ERROR; } break; } case DLT_TYLE_128BIT: { if (*datalength >= 16) dlt_print_hex_string(text, textlength, *ptr, 16); if ((*datalength) < 16) return DLT_RETURN_ERROR; *ptr += 16; *datalength -= 16; break; } default: { return DLT_RETURN_ERROR; } } } else if (type_info & DLT_TYPE_INFO_RAWD) { /* raw data argument */ DLT_MSG_READ_VALUE(value16u_tmp, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; length = DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16u_tmp); if (type_info & DLT_TYPE_INFO_VARI) { DLT_MSG_READ_VALUE(value16u_tmp, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; length2 = DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16u_tmp); if ((*datalength) < length2) return DLT_RETURN_ERROR; *ptr += length2; *datalength -= length2; } if ((*datalength) < length) return DLT_RETURN_ERROR; dlt_print_hex_string(text, (int) textlength, *ptr, length); *ptr += length; *datalength -= length; } else if (type_info & DLT_TYPE_INFO_TRAI) { /* trace info argument */ DLT_MSG_READ_VALUE(value16u_tmp, *ptr, *datalength, uint16_t); if ((*datalength) < 0) return DLT_RETURN_ERROR; length = DLT_ENDIAN_GET_16(msg->standardheader->htyp, value16u_tmp); DLT_MSG_READ_STRING(text, *ptr, *datalength, textlength, length); if ((*datalength) < 0) return DLT_RETURN_ERROR; } else { return DLT_RETURN_ERROR; } if (*datalength < 0) { dlt_log(LOG_ERR, "Payload of DLT message corrupted\n"); return DLT_RETURN_ERROR; } return DLT_RETURN_OK; } void dlt_check_envvar() { char *env_log_filename = getenv("DLT_LOG_FILENAME"); if (env_log_filename != NULL) dlt_log_set_filename(env_log_filename); char *env_log_level_str = getenv("DLT_LOG_LEVEL"); if (env_log_level_str != NULL) { int level = 0; if (sscanf(env_log_level_str, "%d", &level)) dlt_log_set_level(level); } char *env_log_mode = getenv("DLT_LOG_MODE"); if (env_log_mode != NULL) { int mode = 0; if (sscanf(env_log_mode, "%d", &mode)) dlt_log_init(mode); } #if defined DLT_DAEMON_USE_FIFO_IPC || defined DLT_LIB_USE_FIFO_IPC char *env_pipe_dir = getenv("DLT_PIPE_DIR"); if (env_pipe_dir != NULL) dlt_log_set_fifo_basedir(env_pipe_dir); else dlt_log_set_fifo_basedir(DLT_USER_IPC_PATH); #endif #ifdef DLT_SHM_ENABLE char* env_shm_name = getenv("DLT_SHM_NAME"); if (env_shm_name != NULL) { dlt_log_set_shm_name(env_shm_name); } #endif } int dlt_set_loginfo_parse_service_id(char *resp_text, uint32_t *service_id, uint8_t *service_opt) { int ret = -1; char get_log_info_tag[GET_LOG_INFO_LENGTH]; char service_opt_str[SERVICE_OPT_LENGTH]; if ((resp_text == NULL) || (service_id == NULL) || (service_opt == NULL)) return DLT_RETURN_ERROR; /* ascii type, syntax is 'get_log_info, ..' */ /* check target id */ strncpy(get_log_info_tag, "get_log_info", strlen("get_log_info") + 1); ret = memcmp((void *)resp_text, (void *)get_log_info_tag, sizeof(get_log_info_tag) - 1); if (ret == 0) { *service_id = DLT_SERVICE_ID_GET_LOG_INFO; /* reading the response mode from the resp_text. eg. option 7*/ service_opt_str[0] = *(resp_text + GET_LOG_INFO_LENGTH + 1); service_opt_str[1] = *(resp_text + GET_LOG_INFO_LENGTH + 2); service_opt_str[2] = 0; *service_opt = (uint8_t) atoi(service_opt_str); } return ret; } int16_t dlt_getloginfo_conv_ascii_to_uint16_t(char *rp, int *rp_count) { char num_work[5] = { 0 }; char *endptr; if ((rp == NULL) || (rp_count == NULL)) return -1; /* ------------------------------------------------------ * from: [89 13 ] -> to: ['+0x'1389\0] -> to num * ------------------------------------------------------ */ num_work[0] = *(rp + *rp_count + 3); num_work[1] = *(rp + *rp_count + 4); num_work[2] = *(rp + *rp_count + 0); num_work[3] = *(rp + *rp_count + 1); num_work[4] = 0; *rp_count += 6; return (unsigned char)strtol(num_work, &endptr, 16); } int16_t dlt_getloginfo_conv_ascii_to_int16_t(char *rp, int *rp_count) { char num_work[3] = { 0 }; char *endptr; if ((rp == NULL) || (rp_count == NULL)) return -1; /* ------------------------------------------------------ * from: [89 ] -> to: ['0x'89\0] -> to num * ------------------------------------------------------ */ num_work[0] = *(rp + *rp_count + 0); num_work[1] = *(rp + *rp_count + 1); num_work[2] = 0; *rp_count += 3; return (signed char)strtol(num_work, &endptr, 16); } void dlt_getloginfo_conv_ascii_to_id(char *rp, int *rp_count, char *wp, int len) { char number16[3] = {0}; char *endptr; int count; if ((rp == NULL) || (rp_count == NULL) || (wp == NULL)) return; /* ------------------------------------------------------ * from: [72 65 6d 6f ] -> to: [0x72,0x65,0x6d,0x6f,0x00] * ------------------------------------------------------ */ for (count = 0; count < len; count++) { number16[0] = *(rp + *rp_count + 0); number16[1] = *(rp + *rp_count + 1); *(wp + count) = (char) strtol(number16, &endptr, 16); *rp_count += 3; } *(wp + count) = 0; return; } void dlt_hex_ascii_to_binary(const char *ptr, uint8_t *binary, int *size) { char ch = *ptr; int pos = 0; binary[pos] = 0; int first = 1; int found; for (;;) { if (ch == 0) { *size = pos; return; } found = 0; if ((ch >= '0') && (ch <= '9')) { binary[pos] = (uint8_t) ((binary[pos] << 4) + (ch - '0')); found = 1; } else if ((ch >= 'A') && (ch <= 'F')) { binary[pos] = (uint8_t) ((binary[pos] << 4) + (ch - 'A' + 10)); found = 1; } else if ((ch >= 'a') && (ch <= 'f')) { binary[pos] = (uint8_t) ((binary[pos] << 4) + (ch - 'a' + 10)); found = 1; } if (found) { if (first) { first = 0; } else { first = 1; pos++; if (pos >= *size) return; binary[pos] = 0; } } ch = *(++ptr); } } DltReturnValue dlt_file_quick_parsing(DltFile *file, const char *filename, int type, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); int ret = DLT_RETURN_OK; char text[DLT_CONVERT_TEXTBUFSIZE] = { 0 }; if (file == NULL || filename == NULL) return DLT_RETURN_WRONG_PARAMETER; FILE *output = fopen(filename, "w+"); if (output == NULL) { dlt_vlog(LOG_ERR, "Cannot open output file %s for parsing\n", filename); return DLT_RETURN_ERROR; } while(ret >= DLT_RETURN_OK && file->file_position < file->file_length) { /* get file position at start of DLT message */ if (verbose) { dlt_vlog(LOG_DEBUG, "Position in file: %ld\n", file->file_position); } /* read all header and payload */ ret = dlt_file_read_header(file, verbose); if (ret < DLT_RETURN_OK) break; ret = dlt_file_read_header_extended(file, verbose); if (ret < DLT_RETURN_OK) break; ret = dlt_file_read_data(file, verbose); if (ret < DLT_RETURN_OK) break; if (file->filter) { /* check the filters if message is used */ ret = dlt_message_filter_check(&(file->msg), file->filter, verbose); if (ret != DLT_RETURN_TRUE) continue; } ret = dlt_message_header(&(file->msg), text, DLT_CONVERT_TEXTBUFSIZE, verbose); if (ret < DLT_RETURN_OK) break; fprintf(output, "%s", text); ret = dlt_message_payload(&(file->msg), text, DLT_CONVERT_TEXTBUFSIZE, type, verbose); if (ret < DLT_RETURN_OK) break; fprintf(output, "[%s]\n", text); /* store index pointer to message position in DLT file */ file->counter++; file->position = file->counter_total - 1; /* increase total message counter */ file->counter_total++; /* store position to next message */ file->file_position = ftell(file->handle); } // while() fclose(output); return ret; } int dlt_execute_command(char *filename, char *command, ...){ va_list val; int argc; char ** args = NULL; int ret = 0; if (command == NULL) return -1; /* Determine number of variadic arguments */ va_start(val, command); for (argc = 2; va_arg(val, char *) != NULL; argc++); va_end(val); /* Allocate args, put references to command */ args = (char **) malloc( (uint32_t) argc * sizeof(char*)); args[0] = command; va_start(val, command); for (int i = 0; args[i] != NULL; i++) args[i+1] = va_arg(val, char *); va_end(val); /* Run command in child process */ pid_t pid = fork(); if (pid == 0) { /* child process */ /* Redirect output if required */ if (filename != NULL) { int fd = open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); if (fd < 0) err(-1, "%s failed on open()", __func__); if (dup2(fd, STDOUT_FILENO) == -1) { close(fd); err(-1, "%s failed on dup2()", __func__); } close(fd); } /* Run command */ execvp(command, (char **)args); } else if (pid == -1) /* error in fork */ ret = -1; else /* parent */ wait(&ret); free(args); return ret; } dlt-daemon-2.18.6/src/shared/dlt_common_cfg.h000066400000000000000000000115541377520261000210250ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_common_cfg.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_common_cfg.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ #ifndef DLT_COMMON_CFG_H #define DLT_COMMON_CFG_H /*************/ /* Changable */ /*************/ /* Buffer length for temporary buffer */ #define DLT_COMMON_BUFFER_LENGTH 255 /* Number of ASCII chars to be printed in one line as HEX and as ASCII */ /* e.g. XX XX XX XX ABCD is DLT_COMMON_HEX_CHARS = 4 */ #define DLT_COMMON_HEX_CHARS 16 /* Length of line number */ #define DLT_COMMON_HEX_LINELEN 8 /* Length of one char */ #define DLT_COMMON_CHARLEN 1 /* Number of indices to be allocated at one, if no more indeces are left */ #define DLT_COMMON_INDEX_ALLOC 1000 /* If limited output is called, * this is the maximum number of characters to be printed out */ #define DLT_COMMON_ASCII_LIMIT_MAX_CHARS 20 /* This defines the dummy ECU ID set in storage header during import * of a message from a DLT file in RAW format (without storage header) */ #define DLT_COMMON_DUMMY_ECUID "ECU" /************************/ /* Don't change please! */ /************************/ /* ASCII value for space */ #define DLT_COMMON_ASCII_CHAR_SPACE 32 /* ASCII value for tilde */ #define DLT_COMMON_ASCII_CHAR_TILDE 126 /* ASCII value for lesser than */ #define DLT_COMMON_ASCII_CHAR_LT 60 #endif /* DLT_COMMON_CFG_H */ dlt-daemon-2.18.6/src/shared/dlt_config_file_parser.c000066400000000000000000000351041377520261000225260ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015, Advanced Driver Information Technology * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Christoph Lipka * * \copyright Copyright Š 2015 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_config_file_parser.c */ #include "dlt_config_file_parser.h" #include #include #include #include #include #include "dlt_common.h" #include "dlt-daemon_cfg.h" /* internal defines */ #define DLT_CONFIG_FILE_NEW_SECTION 0x0a #define DLT_CONFIG_FILE_NEW_DATA 0x0b /* internal helper functions */ /** * dlt_config_file_trim_line * * Trim all whitespace from a string * * @param line String to remove whitespace from */ static void dlt_config_file_trim_line(char *line) { if (line == NULL) return; char *i = line; char *j = line; while (*j != '\0') { *i = *j++; if (!isspace(*i)) i++; } *i = '\0'; } /** * dlt_config_file_ignore_line * * Check if a line has to be ignored, because it contains a comment or is empty * * @param line Line of configuration file * @return 0 if ignore, -1 do not ignore */ static int dlt_config_file_ignore_line(char *line) { if ((line[0] == '#') || (line[0] == ';') || (line[0] == '\n') || (line[0] == '\0')) return 0; /* ignore */ else return -1; /* do not ignore */ } /** * dlt_config_file_is_section_name * * Check if section name already used * * @param file DltConfigFile * @param name Name of section * @return 0, section name not used, -1 section name already used */ static int dlt_config_file_is_section_name(DltConfigFile *file, char *name) { int i = 0; if ((file == NULL) || (name == NULL)) return -1; for (i = 0; i < file->num_sections; i++) { DltConfigFileSection *s = &file->sections[i]; if (strncmp(s->name, name, DLT_CONFIG_FILE_ENTRY_MAX_LEN) == 0) return -1; } return 0; /* section name not used */ } /** * dlt_config_file_set_section * * Store section in internal data structure * * @param file DltConfigFile * @param name Name of section * @return 0 on success, else -1 */ static int dlt_config_file_set_section(DltConfigFile *file, char *name) { int section = file->num_sections; /* check if adding another section would exceed max number of sections */ if (section >= DLT_CONFIG_FILE_SECTIONS_MAX) { dlt_log(LOG_WARNING, "Cannot store more sections\n"); return -1; /* reached max number of sections */ } /* do not store section with same name again */ if (dlt_config_file_is_section_name(file, name) != 0) { dlt_log(LOG_WARNING, "Cannot store section name again\n"); return -1; } DltConfigFileSection *s = &file->sections[section]; /* alloc data for entries */ s->name = calloc(sizeof(char), DLT_CONFIG_FILE_ENTRY_MAX_LEN + 1); if (s->name == NULL) { dlt_log(LOG_ERR, "Cannot allocate memory for internal data structure\n"); return -1; } s->keys = calloc(sizeof(char), DLT_CONFIG_FILE_ENTRY_MAX_LEN * DLT_CONFIG_FILE_KEYS_MAX + 1); if (s->keys == NULL) { free(s->name); dlt_log(LOG_ERR, "Cannot allocate memory for internal data structure\n"); return -1; } strncpy(file->sections[section].name, name, DLT_CONFIG_FILE_ENTRY_MAX_LEN); file->num_sections += 1; return 0; } /** * dlt_config_file_set_section_data * * Store data pair of a section * * @param file DltConfigFile * @param str1 string used for key * @param str2 string used for value * @return 0 on success, else -1 */ static int dlt_config_file_set_section_data(DltConfigFile *file, char *str1, char *str2) { DltConfigKeyData **tmp = NULL; if ((file == NULL) || (str1 == NULL) || (str2 == NULL)) return -1; DltConfigFileSection *s = &file->sections[file->num_sections - 1]; int key_number = s->num_entries; if (key_number + 1 >= DLT_CONFIG_FILE_KEYS_MAX) { dlt_log(LOG_WARNING, "Cannot store more keys in section\n"); return -1; /* reached max number of keys per section */ } /* copy data into structure */ strncpy(&s->keys[key_number * DLT_CONFIG_FILE_ENTRY_MAX_LEN], str1, DLT_CONFIG_FILE_ENTRY_MAX_LEN); if (s->list == NULL) { /* creating a list if it doesnt exists */ s->list = malloc(sizeof(DltConfigKeyData)); if (s->list == NULL) { dlt_log(LOG_WARNING, "Could not allocate initial memory to list \n"); return -1; } tmp = &s->list; } else { tmp = &s->list; while (*(tmp) != NULL) tmp = &(*tmp)->next; /* Adding new entry to the list */ *tmp = malloc(sizeof(DltConfigKeyData)); if (*tmp == NULL) { dlt_log(LOG_WARNING, "Could not allocate memory to list \n"); return -1; } } (*tmp)->key = strdup(str1); (*tmp)->data = strdup(str2); (*tmp)->next = NULL; s->num_entries += 1; return 0; } /** * dlt_config_file_has_section * * Check if a certain line in config file is a section header * * @param line Line in configuration file * @return 0 if section header, else -1 */ static int dlt_config_file_line_has_section(char *line) { (void)line; /* avoid compiler warnings */ if (line[0] == '[') /* section found */ return 0; else return -1; } /** * dlt_config_file_get_section_name_from_string * * Extract section name from line * * @param line Line in configuration file containing a section header * @param name Section name * @return 0 on success, else -1 */ static int dlt_config_file_get_section_name_from_string(char *line, char *name) { int i = 0; int j = 0; if ((line == NULL) || (name == NULL)) return -1; for (i = 0; i < DLT_CONFIG_FILE_ENTRY_MAX_LEN; i++) { if ((line[i] == '[') || isspace(line[i])) continue; else if ((line[i] == ']') || (line[i] == '\n') || (line[i] == '\0')) break; else name[j++] = line[i]; } return 0; } /** * dlt_config_file_get_key_value * * Get key and value from a line of configuration file * * @param line Line on configuration file * @param[out] str1 String to be used as key * @param[out] str2 String to be used as value * @return 0 on success, else -1 */ static int dlt_config_file_get_key_value(char *line, char *str1, char *str2) { char *delimiter = "="; char *ptr; char *save_ptr; if ((line == NULL) || (str1 == NULL) || (str2 == NULL)) return -1; ptr = strtok_r(line, delimiter, &save_ptr); if (ptr != NULL) { /* get key */ strncpy(str1, ptr, DLT_CONFIG_FILE_ENTRY_MAX_LEN - 1); str1[DLT_CONFIG_FILE_ENTRY_MAX_LEN - 1] = '\0'; } else { return -1; } ptr = strtok_r(NULL, delimiter, &save_ptr); if (ptr != NULL) { strncpy(str2, ptr, DLT_CONFIG_FILE_ENTRY_MAX_LEN - 1); str2[DLT_CONFIG_FILE_ENTRY_MAX_LEN - 1] = '\0'; } else { return -1; } return 0; } /** * dlt_config_file_read_line * * Read line from configuration file * * @param line Line from configuration file * @param[out] str1 String contains section header or key * @param[out] str2 String contains value or is empty * @return 0 on success, else -1 */ static int dlt_config_file_read_line(char *line, char *str1, char *str2) { if ((line == NULL) || (str1 == NULL) || (str2 == NULL)) return -1; /* reset values to zero */ memset(str1, 0, DLT_CONFIG_FILE_ENTRY_MAX_LEN); memset(str2, 0, DLT_CONFIG_FILE_ENTRY_MAX_LEN); /* check if line contains a section */ if ((dlt_config_file_line_has_section(line)) == 0) { /* retrieve section name */ if (dlt_config_file_get_section_name_from_string(line, str1) != 0) return -1; return DLT_CONFIG_FILE_NEW_SECTION; } /* copy strings as key value pair into str1, str2 */ if (dlt_config_file_get_key_value(line, str1, str2) != 0) return -1; return DLT_CONFIG_FILE_NEW_DATA; } /** * dlt_config_file_read_file * * Read configuration file line by line and fill internal structures * * @param file DltConfigFile * @param hdl FILE handle of opened configuration file */ static void dlt_config_file_read_file(DltConfigFile *file, FILE *hdl) { int ret = 0; char line[DLT_CONFIG_FILE_LINE_MAX_LEN] = { '\0' }; char str1[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = { '\0' }; char str2[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = { '\0' }; int line_number = 0; int is_section_valid = -1; /* to check if section name is given twice or invalid */ /* read configuration file line by line */ while (fgets(line, DLT_CONFIG_FILE_LINE_MAX_LEN, hdl) != NULL) { line_number++; /* ignore empty and comment lines */ if (dlt_config_file_ignore_line(line) == 0) continue; /* trim line end */ dlt_config_file_trim_line(line); /* parse content of line */ ret = dlt_config_file_read_line(line, str1, str2); switch (ret) { case DLT_CONFIG_FILE_NEW_SECTION: /* store str1 as new section */ is_section_valid = -1; if ((ret = dlt_config_file_set_section(file, str1)) == 0) is_section_valid = 0; break; case DLT_CONFIG_FILE_NEW_DATA: /* store str1 and str2 as new data for section */ if (is_section_valid == 0) ret = dlt_config_file_set_section_data(file, str1, str2); break; default: /* something is wrong with the line */ dlt_vlog(LOG_WARNING, "Line (%d) \"%s\" is invalid\n", line_number, line); } } } /** * dlt_config_file_find_section * * Find a section * * @param file DltConfigFile * @param section Name of section * @return number of section on success, else -1 */ static int dlt_config_file_find_section(const DltConfigFile *file, const char *section) { int i = 0; if ((file == NULL) || (section == NULL) || (file->num_sections <= 0)) { dlt_log(LOG_WARNING, "Section cannot be found due to invalid parameters\n"); return -1; } for (i = 0; i < file->num_sections; i++) { DltConfigFileSection *s = &file->sections[i]; if (strncmp(s->name, section, DLT_CONFIG_FILE_ENTRY_MAX_LEN) == 0) return i; } return -1; } /************************** interface implementation ***************************/ DltConfigFile *dlt_config_file_init(char *file_name) { DltConfigFile *file; FILE *hdl = NULL; if ((file_name == NULL) || (strlen(file_name) >= DLT_CONFIG_FILE_PATH_MAX_LEN)) { dlt_log(LOG_ERR, "Given configuration file invalid\n"); return NULL; } file = calloc(sizeof(DltConfigFile), 1); if (file == NULL) { dlt_log(LOG_ERR, "Setup internal data structure to parse config file failed\n"); return NULL; } file->sections = calloc(sizeof(DltConfigFileSection), DLT_CONFIG_FILE_SECTIONS_MAX); /* open file */ if ((hdl = fopen(file_name, "r")) == NULL) { dlt_log(LOG_ERR, "Cannot open configuration file\n"); free(file); return NULL; } dlt_config_file_read_file(file, hdl); /* all information stored internally */ fclose(hdl); return file; } void dlt_config_file_release(DltConfigFile *file) { int i = 0; if (file != NULL) { int max = file->num_sections; for (i = 0; i < max; i++) { DltConfigFileSection *s = &file->sections[i]; DltConfigKeyData *node = file->sections[i].list; free(s->name); if (s->keys != NULL) free(s->keys); while (node) { DltConfigKeyData *tmp = node; node = node->next; free(tmp->key); free(tmp->data); free(tmp); } } free(file->sections); free(file); } } int dlt_config_file_get_section_name(const DltConfigFile *file, int num, char *name) { if ((file == NULL) || (name == NULL) || (num < 0) || (num >= file->num_sections)) return -1; strncpy(name, (file->sections + num)->name, DLT_CONFIG_FILE_ENTRY_MAX_LEN); return 0; } int dlt_config_file_get_num_sections(const DltConfigFile *file, int *num) { if ((file == NULL) || (file->num_sections < 0)) return -1; /* * Note: Since General section could be used in configuration file, * this number could be also containing General section. */ *num = file->num_sections; return 0; } int dlt_config_file_get_value(const DltConfigFile *file, const char *section, const char *key, char *value) { DltConfigFileSection *s = NULL; DltConfigKeyData **tmp = NULL; int num_section = 0; if ((file == NULL) || (section == NULL) || (key == NULL) || (value == NULL)) return -1; /* clean value */ memset(value, 0, DLT_CONFIG_FILE_ENTRY_MAX_LEN); num_section = dlt_config_file_find_section(file, section); if (num_section == -1) return -1; s = (file->sections + num_section); tmp = &s->list; while (*(tmp) != NULL) { if (strncmp((*tmp)->key, key, DLT_CONFIG_FILE_ENTRY_MAX_LEN) == 0) { strncpy(value, (*tmp)->data, DLT_CONFIG_FILE_ENTRY_MAX_LEN); return 0; } else { /* not found yet see list for more */ tmp = &(*tmp)->next; } } dlt_vlog(LOG_WARNING, "Entry does not exist in section: %s\n", key); return -1; } int dlt_config_file_check_section_name_exists(const DltConfigFile *file, const char *name) { int ret = 0; if ((file == NULL) || (file->num_sections <= 0) || (name == NULL)) return -1; ret = dlt_config_file_find_section(file, name); if (ret == -1) return ret; return 0; } dlt-daemon-2.18.6/src/shared/dlt_config_file_parser.h000066400000000000000000000136541377520261000225410ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015, Advanced Driver Information Technology * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Christoph Lipka * * \copyright Copyright Š 2015 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_config_file_parser.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_config_file_parser.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Christoph Lipka clipka@jp.adit-jv.com ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** cl Christoph Lipka ADIT ** *******************************************************************************/ #ifndef _DLT_CONFIG_FILE_PARSER_H_ #define _DLT_CONFIG_FILE_PARSER_H_ /* definitions */ #define DLT_CONFIG_FILE_PATH_MAX_LEN 100 /* absolute path including filename */ #define DLT_CONFIG_FILE_ENTRY_MAX_LEN 100 /* Entry for section, key and value */ #define DLT_CONFIG_FILE_LINE_MAX_LEN 210 #define DLT_CONFIG_FILE_SECTIONS_MAX 125 #define DLT_CONFIG_FILE_KEYS_MAX 25 /* Maximal keys per section */ typedef struct DltConfigKeyData { char *key; char *data; struct DltConfigKeyData *next; } DltConfigKeyData; /* Config file section structure */ typedef struct { int num_entries; /* number of entries */ char *name; /* name of section */ char *keys; /* keys */ DltConfigKeyData *list; } DltConfigFileSection; typedef struct { int num_sections; /* number of sections */ DltConfigFileSection *sections; /* sections */ } DltConfigFile; /** * dlt_config_file_init * * Load the configuration file and stores all data in * internal data structures. * * @param file_name File to be opened * @return Pointer to DltConfigFile object or NULL on error */ DltConfigFile *dlt_config_file_init(char *file_name); /** * dlt_config_file_release * * Release config file and frees all internal data. Has to be called after * after all data is read. * * @param file DltConfigFile */ void dlt_config_file_release(DltConfigFile *file); /** * dlt_config_file_get_section_name * * Get name of section number. * * @param[in] file DltConfigFile * @param[in] num Number of section * @param[out] name Section name * @return 0 on success, else -1 */ int dlt_config_file_get_section_name(const DltConfigFile *file, int num, char *name); /** * dlt_config_file_get_num_sections * * Get the number of sections inside configuration file * * @param[in] file DltConfigFile * @param[out] num Number of sections inside configuration file * @return 0 on success, else -1 */ int dlt_config_file_get_num_sections(const DltConfigFile *file, int *num); /** * dlt_config_file_get_value * * Get value of key in specified section. * * @param[in] file DltConfigFile * @param[in] section Name of section * @param[in] key Key * @param[out] value Value * @return 0 on success, else -1 */ int dlt_config_file_get_value(const DltConfigFile *file, const char *section, const char *key, char *value); /** * dlt_config_file_check_section_name_exists * * Get name of section number. * * @param[in] file DltConfigFile * @param[in] name Section name * @return 0 on success/exist, else -1 */ int dlt_config_file_check_section_name_exists(const DltConfigFile *file, const char *name); #endif dlt-daemon-2.18.6/src/shared/dlt_offline_trace.c000066400000000000000000000367621377520261000215210ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_offline_trace.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_offline_trace.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include "dlt_common.h" unsigned int dlt_offline_trace_storage_dir_info(char *path, char *file_name, char *newest, char *oldest) { int i = 0; unsigned int num = 0; int cnt = 0; struct dirent **files = { 0 }; char *tmp_old = NULL; char *tmp_new = NULL; if ((path == NULL) || (file_name == NULL) || (newest == NULL) || (oldest == NULL)) { printf("dlt_offline_trace_storage_dir_info: Invalid parameter(s)"); return 0; } cnt = scandir(path, &files, NULL, alphasort); if (cnt < 0) return 0; for (i = 0; i < cnt; i++) { size_t len = 0; len = strlen(file_name); if ((strncmp(files[i]->d_name, file_name, len) == 0) && (files[i]->d_name[len] == DLT_OFFLINETRACE_FILENAME_INDEX_DELI[0])) { num++; if ((tmp_old == NULL) || (strlen(tmp_old) >= strlen(files[i]->d_name))) { if (tmp_old == NULL) tmp_old = files[i]->d_name; /* when file name is smaller, it is older */ else if (strlen(tmp_old) > strlen(files[i]->d_name)) tmp_old = files[i]->d_name; else /* filename is equal, do a string compare */ if (strcmp(tmp_old, files[i]->d_name) > 0) tmp_old = files[i]->d_name; } if ((tmp_new == NULL) || (strlen(tmp_new) <= strlen(files[i]->d_name))) { if (tmp_new == NULL) tmp_new = files[i]->d_name; /* when file name is longer, it is younger */ else if (strlen(tmp_new) < strlen(files[i]->d_name)) tmp_new = files[i]->d_name; else if (strcmp(tmp_new, files[i]->d_name) < 0) tmp_new = files[i]->d_name; } } } if (num > 0) { if ((tmp_old != NULL) && (strlen(tmp_old) < NAME_MAX)) { strncpy(oldest, tmp_old, NAME_MAX); oldest[NAME_MAX] = '\0'; } if ((tmp_new != NULL) && (strlen(tmp_old) < NAME_MAX)) { strncpy(newest, tmp_new, NAME_MAX); oldest[NAME_MAX] = '\0'; } } /* free scandir result */ for (i = 0; i < cnt; i++) free(files[i]); free(files); return num; } void dlt_offline_trace_file_name(char *log_file_name, size_t length, char *name, unsigned int idx) { char file_index[11]; /* UINT_MAX = 4294967295 -> 10 digits */ snprintf(file_index, sizeof(file_index), "%010u", idx); /* create log file name */ memset(log_file_name, 0, length * sizeof(char)); strncat(log_file_name, name, length - strlen(log_file_name) - 1); strncat(log_file_name, DLT_OFFLINETRACE_FILENAME_INDEX_DELI, length - strlen(log_file_name) - 1); strncat(log_file_name, file_index, length - strlen(log_file_name) - 1); strncat(log_file_name, DLT_OFFLINETRACE_FILENAME_EXT, length - strlen(log_file_name) - 1); } unsigned int dlt_offline_trace_get_idx_of_log_file(char *file) { const char d[2] = DLT_OFFLINETRACE_FILENAME_INDEX_DELI; char *token; unsigned int idx = 0; if (file[0] == '\0') return 0; token = strtok(file, d); /* we are interested in 2. token because of log file name */ token = strtok(NULL, d); if (token != NULL) idx = (unsigned int) strtol(token, NULL, 10); else idx = 0; return idx; } DltReturnValue dlt_offline_trace_create_new_file(DltOfflineTrace *trace) { time_t t; struct tm tmp; char file_path[PATH_MAX + 1]; unsigned int idx = 0; int ret = 0; /* set filename */ if (trace->filenameTimestampBased) { /* timestamp format: "yyyymmdd_hhmmss" */ char timestamp[16]; t = time(NULL); tzset(); localtime_r(&t, &tmp); strftime(timestamp, sizeof(timestamp), "%Y%m%d_%H%M%S", &tmp); ret = snprintf(trace->filename, sizeof(trace->filename), "%s%s%s%s", DLT_OFFLINETRACE_FILENAME_BASE, DLT_OFFLINETRACE_FILENAME_TIMESTAMP_DELI, timestamp, DLT_OFFLINETRACE_FILENAME_EXT); if ((ret < 0) || ((size_t)ret >= (int)sizeof(trace->filename))) { printf("dlt_offlinetrace filename cannot be concatenated\n"); return DLT_RETURN_ERROR; } ret = snprintf(file_path, sizeof(file_path), "%s/%s", trace->directory, trace->filename); if ((ret < 0) || ((size_t)ret >= (int)sizeof(file_path))) { printf("dlt_offlinetrace file path cannot be concatenated\n"); return DLT_RETURN_ERROR; } } else { char newest[NAME_MAX + 1] = { 0 }; char oldest[NAME_MAX + 1] = { 0 }; /* targeting newest file, ignoring number of files in dir returned */ dlt_offline_trace_storage_dir_info(trace->directory, DLT_OFFLINETRACE_FILENAME_BASE, newest, oldest); idx = dlt_offline_trace_get_idx_of_log_file(newest) + 1; dlt_offline_trace_file_name(trace->filename, sizeof(trace->filename), DLT_OFFLINETRACE_FILENAME_BASE, idx); ret = snprintf(file_path, sizeof(file_path), "%s/%s", trace->directory, trace->filename); if ((ret < 0) || (ret >= NAME_MAX)) { printf("filename cannot be concatenated\n"); return DLT_RETURN_ERROR; } } /* open DLT output file */ trace->ohandle = open(file_path, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* mode: wb */ if (trace->ohandle == -1) { /* trace file cannot be opened */ printf("Offline trace file %s cannot be created\n", file_path); return DLT_RETURN_ERROR; } /* if */ return DLT_RETURN_OK; /* OK */ } ssize_t dlt_offline_trace_get_total_size(DltOfflineTrace *trace) { struct dirent *dp; char filename[PATH_MAX + 1]; ssize_t size = 0; struct stat status; /* go through all dlt files in directory */ DIR *dir = opendir(trace->directory); if (!dir) return -1; while ((dp = readdir(dir)) != NULL) if (strstr(dp->d_name, DLT_OFFLINETRACE_FILENAME_BASE)) { int res = snprintf(filename, sizeof(filename), "%s/%s", trace->directory, dp->d_name); /* if the total length of the string is greater than the buffer, silently forget it. */ /* snprintf: a return value of size or more means that the output was truncated */ /* if an output error is encountered, a negative value is returned. */ if (((unsigned int)res < sizeof(filename)) && (res > 0)) { if (0 == stat(filename, &status)) size += status.st_size; else printf("Offline trace file %s cannot be stat-ed", filename); } /*else */ /*{ */ /* dlt_log(3, "dlt_offline_trace_get_total_size: long filename ignored"); */ /*} */ } closedir(dir); /* return size */ return size; } int dlt_offline_trace_delete_oldest_file(DltOfflineTrace *trace) { struct dirent *dp; char filename[PATH_MAX + 1]; char filename_oldest[PATH_MAX + 1]; unsigned long size_oldest = 0; struct stat status; time_t time_oldest = 0; filename[0] = 0; filename_oldest[0] = 0; /* go through all dlt files in directory */ DIR *dir = opendir(trace->directory); while ((dp = readdir(dir)) != NULL) if (strstr(dp->d_name, DLT_OFFLINETRACE_FILENAME_BASE)) { int res = snprintf(filename, sizeof(filename), "%s/%s", trace->directory, dp->d_name); /* if the total length of the string is greater than the buffer, silently forget it. */ /* snprintf: a return value of size or more means that the output was truncated */ /* if an output error is encountered, a negative value is returned. */ if (((unsigned int)res < sizeof(filename)) && (res > 0)) { if (0 == stat(filename, &status)) { if ((time_oldest == 0) || (status.st_mtime < time_oldest)) { time_oldest = status.st_mtime; size_oldest = (unsigned long) status.st_size; strncpy(filename_oldest, filename, PATH_MAX); filename_oldest[PATH_MAX] = 0; } } else { printf("Old offline trace file %s cannot be stat-ed", filename); } } } closedir(dir); /* delete file */ if (filename_oldest[0]) { if (remove(filename_oldest)) { printf("Remove file %s failed!\n", filename_oldest); return -1; /* ERROR */ } } else { printf("No file to be removed!\n"); return -1; /* ERROR */ } /* return size of deleted file*/ return size_oldest; } DltReturnValue dlt_offline_trace_check_size(DltOfflineTrace *trace) { struct stat status; /* check for existence of offline trace directory */ if (stat(trace->directory, &status) == -1) { dlt_vlog(LOG_ERR, "Offline trace directory: %s doesn't exist \n", trace->directory); return DLT_RETURN_ERROR; } /* check for accesibilty of offline trace directory */ else if (access(trace->directory, W_OK) != 0) { dlt_vlog(LOG_ERR, "Offline trace directory: %s doesn't have the write access \n", trace->directory); return DLT_RETURN_ERROR; } ssize_t s = 0; /* check size of complete offline trace */ while ((s = dlt_offline_trace_get_total_size(trace)) > (trace->maxSize - trace->fileSize)) /* remove oldest files as long as new file will not fit in completely into complete offline trace */ if (dlt_offline_trace_delete_oldest_file(trace) < 0) return DLT_RETURN_ERROR; if (s == -1) return DLT_RETURN_ERROR; return DLT_RETURN_OK; /* OK */ } DltReturnValue dlt_offline_trace_init(DltOfflineTrace *trace, const char *directory, int fileSize, int maxSize, int filenameTimestampBased) { /* init parameters */ strncpy(trace->directory, directory, NAME_MAX); trace->directory[NAME_MAX] = 0; trace->fileSize = fileSize; trace->maxSize = maxSize; trace->filenameTimestampBased = filenameTimestampBased; /* check complete offlien trace size, remove old logs if needed */ dlt_offline_trace_check_size(trace); return dlt_offline_trace_create_new_file(trace); } DltReturnValue dlt_offline_trace_write(DltOfflineTrace *trace, unsigned char *data1, int size1, unsigned char *data2, int size2, unsigned char *data3, int size3) { if (trace->ohandle < 0) return DLT_RETURN_ERROR; /* check file size here */ if ((lseek(trace->ohandle, 0, SEEK_CUR) + size1 + size2 + size3) >= trace->fileSize) { /* close old file */ close(trace->ohandle); trace->ohandle = -1; /* check complete offline trace size, remove old logs if needed */ dlt_offline_trace_check_size(trace); /* create new file */ dlt_offline_trace_create_new_file(trace); } /* write data into log file */ if (data1 && (trace->ohandle >= 0)) { if (write(trace->ohandle, data1, (size_t) size1) != size1) { printf("Offline trace write failed!\n"); return DLT_RETURN_ERROR; } } if (data2 && (trace->ohandle >= 0)) { if (write(trace->ohandle, data2, (size_t) size2) != size2) { printf("Offline trace write failed!\n"); return DLT_RETURN_ERROR; } } if (data3 && (trace->ohandle >= 0)) { if (write(trace->ohandle, data3, (size_t) size3) != size3) { printf("Offline trace write failed!\n"); return DLT_RETURN_ERROR; } } return DLT_RETURN_OK; /* OK */ } DltReturnValue dlt_offline_trace_free(DltOfflineTrace *trace) { if (trace->ohandle < 0) return DLT_RETURN_ERROR; /* close last used log file */ close(trace->ohandle); return DLT_RETURN_OK; /* OK */ } dlt-daemon-2.18.6/src/shared/dlt_protocol.c000066400000000000000000000055471377520261000205570ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2016 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Christoph Lipka * * \copyright Copyright Š 2016 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_protocol.c */ #include "dlt_protocol.h" const char *const dlt_service_names[] = { "DLT_SERVICE_ID", "DLT_SERVICE_ID_SET_LOG_LEVEL", "DLT_SERVICE_ID_SET_TRACE_STATUS", "DLT_SERVICE_ID_GET_LOG_INFO", "DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL", "DLT_SERVICE_ID_STORE_CONFIG", "DLT_SERVICE_ID_RESET_TO_FACTORY_DEFAULT", "DLT_SERVICE_ID_SET_COM_INTERFACE_STATUS", "DLT_SERVICE_ID_SET_COM_INTERFACE_MAX_BANDWIDTH", "DLT_SERVICE_ID_SET_VERBOSE_MODE", "DLT_SERVICE_ID_SET_MESSAGE_FILTERING", "DLT_SERVICE_ID_SET_TIMING_PACKETS", "DLT_SERVICE_ID_GET_LOCAL_TIME", "DLT_SERVICE_ID_USE_ECU_ID", "DLT_SERVICE_ID_USE_SESSION_ID", "DLT_SERVICE_ID_USE_TIMESTAMP", "DLT_SERVICE_ID_USE_EXTENDED_HEADER", "DLT_SERVICE_ID_SET_DEFAULT_LOG_LEVEL", "DLT_SERVICE_ID_SET_DEFAULT_TRACE_STATUS", "DLT_SERVICE_ID_GET_SOFTWARE_VERSION", "DLT_SERVICE_ID_MESSAGE_BUFFER_OVERFLOW" }; const char *const dlt_user_service_names[] = { "DLT_USER_SERVICE_ID", "DLT_SERVICE_ID_UNREGISTER_CONTEXT", "DLT_SERVICE_ID_CONNECTION_INFO", "DLT_SERVICE_ID_TIMEZONE", "DLT_SERVICE_ID_MARKER", "DLT_SERVICE_ID_OFFLINE_LOGSTORAGE", "DLT_SERVICE_ID_PASSIVE_NODE_CONNECT", "DLT_SERVICE_ID_PASSIVE_NODE_CONNECTION_STATUS", "DLT_SERVICE_ID_SET_ALL_LOG_LEVEL", "DLT_SERVICE_ID_SET_ALL_TRACE_STATUS", "DLT_SERVICE_ID_UNDEFINED", /* 0xF0A is not defined */ "DLT_SERVICE_ID_RESERVED", "DLT_SERVICE_ID_RESERVED", "DLT_SERVICE_ID_RESERVED", "DLT_SERVICE_ID_RESERVED" }; const char *dlt_get_service_name(unsigned int id) { if (id == DLT_SERVICE_ID_CALLSW_CINJECTION) return "DLT_SERVICE_ID_CALLSW_CINJECTION"; else if ((id == DLT_SERVICE_ID) || (id >= DLT_USER_SERVICE_ID_LAST_ENTRY) || ((id >= DLT_SERVICE_ID_LAST_ENTRY) && (id <= DLT_USER_SERVICE_ID))) return "UNDEFINED"; else if ((id > DLT_SERVICE_ID) && (id < DLT_SERVICE_ID_LAST_ENTRY)) return dlt_service_names[id]; else /* user services */ return dlt_user_service_names[id & 0xFF]; } dlt-daemon-2.18.6/src/shared/dlt_shm.c000066400000000000000000000325021377520261000174740ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_shm.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_shm.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #include #include #include #include #include #include #include #if !defined(_MSC_VER) #include #include #endif #include #include void dlt_shm_print_hex(char *ptr, int size) { int num; for (num = 0; num < size; num++) { if ((num % 16) == 15) printf("%.2x\n", ((unsigned char *)ptr)[num]); else printf("%.2x ", ((unsigned char *)ptr)[num]); } printf("\n"); } DltReturnValue dlt_shm_init_server(DltShm *buf, const char *name, int size) { unsigned char *ptr; /* Check if buffer and name available */ if (buf == NULL || name == NULL) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } /* Init parameters */ buf->shmfd = 0; buf->sem = NULL; /** * Create the shared memory segment. * @name Name of the new shared memory object. * (shm_open will create a file under /dev/shm/) * @oflag O_CREAT | O_EXCL | O_RDWR * O_CREAT | O_EXCL: The shm_open() fails if the shared memory exists. * O_RDWR: Open the object for read-write access. * @mode 0666 * The shared memory object's permission. */ buf->shmfd = shm_open(name, O_CREAT | O_EXCL | O_RDWR, 0666); if (buf->shmfd == -1) { dlt_vlog(LOG_ERR, "%s: shm_open() failed: %s\n", __func__, strerror(errno)); return DLT_RETURN_ERROR; /* ERROR */ } /* Set the size of shm */ if (ftruncate(buf->shmfd, size) == -1) { dlt_vlog(LOG_ERR, "%s: ftruncate() failed: %s\n", __func__, strerror(errno)); return DLT_RETURN_ERROR; /* ERROR */ } /* Now we attach the segment to our data space. */ ptr = (unsigned char *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, buf->shmfd, 0); if (ptr == MAP_FAILED) { dlt_vlog(LOG_ERR, "%s: mmap() failed: %s\n", __func__, strerror(errno)); return DLT_RETURN_ERROR; /* ERROR */ } /** * Create the semaphore with input name * @name name * Name of the new semaphore * (sem_open will create a file under /dev/shm/sem.) * @oflag O_CREAT | O_EXCEL * The sem_open() fails if the semaphore name exists. * @mode 0777 * The permissions to be placed on the new semaphore. * @value 1 * Initial value for the new semaphore. */ buf->sem = sem_open(name, O_CREAT | O_EXCL, 0666, 1); if (buf->sem == SEM_FAILED) { dlt_vlog(LOG_ERR, "%s: sem_open() failed: %s\n", __func__, strerror(errno)); return DLT_RETURN_ERROR; /* ERROR */ } /* Init buffer */ dlt_buffer_init_static_server(&(buf->buffer), ptr, size); /* The 'buf->shmfd' is no longer needed */ if (close(buf->shmfd) == -1) { dlt_vlog(LOG_ERR, "%s: Failed to close shared memory" " file descriptor: %s\n", __func__, strerror(errno)); return DLT_RETURN_ERROR; /* ERROR */ } return DLT_RETURN_OK; /* OK */ } DltReturnValue dlt_shm_init_client(DltShm *buf, const char *name) { struct stat shm_buf; unsigned char *ptr; /* Check if buffer and name available */ if (buf == NULL || name == NULL) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } /* Init parameters */ buf->shmfd = 0; buf->sem = NULL; /** * Open the existing shared memory segment created by the server. * @name Name of the existing shared memory object. * (shm_open will open the file under /dev/shm/) * @oflag O_RDWR * Open the object for read-write access. * @mode 0 * We are not creating a new object, this argument should be specified as 0. */ buf->shmfd = shm_open(name, O_RDWR, 0); if (buf->shmfd == -1) { dlt_vlog(LOG_ERR, "%s: shm_open() failed: %s\n", __func__, strerror(errno)); return DLT_RETURN_ERROR; /* ERROR */ } /* Get the size of shm */ if (fstat(buf->shmfd, &shm_buf) == -1) { dlt_vlog(LOG_ERR, "%s: fstat() failed: %s\n", __func__, strerror(errno)); return DLT_RETURN_ERROR; /* ERROR */ } /* Now we attach the segment to our data space. */ ptr = (unsigned char *)mmap(NULL, shm_buf.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, buf->shmfd, 0); if (ptr == MAP_FAILED) { dlt_vlog(LOG_ERR, "%s: mmap() failed: %s\n", __func__, strerror(errno)); return DLT_RETURN_ERROR; /* ERROR */ } /** * Open the existing semaphore with name created by the server * The call requires only two arguments. * @name name * Name of the existing semaphore * (sem_open will open a file under /dev/shm/sem.) * @oflag 0 * We are accessing an existing semaphore, oflag should be specified as 0. */ buf->sem = sem_open(name, 0); if (buf->sem == SEM_FAILED) { dlt_vlog(LOG_ERR, "%s: sem_open() failed: %s\n", __func__, strerror(errno)); return DLT_RETURN_ERROR; /* ERROR */ } /* Init buffer */ dlt_buffer_init_static_client(&(buf->buffer), ptr, shm_buf.st_size); /* The 'buf->shmfd' is no longer needed */ if (close(buf->shmfd) == -1) { dlt_vlog(LOG_ERR, "%s: Failed to close shared memory" " file descriptor: %s\n", __func__, strerror(errno)); return DLT_RETURN_ERROR; /* ERROR */ } return DLT_RETURN_OK; /* OK */ } void dlt_shm_info(DltShm *buf) { /* Check if buffer available */ if (buf == NULL) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return; } dlt_buffer_info(&(buf->buffer)); } void dlt_shm_status(DltShm *buf) { /* Check if buffer available */ if (buf == NULL) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return; } dlt_buffer_status(&(buf->buffer)); } int dlt_shm_get_total_size(DltShm *buf) { /* Check if buffer available */ if (buf == NULL) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return -1; } return dlt_buffer_get_total_size(&(buf->buffer)); } int dlt_shm_get_used_size(DltShm *buf) { int ret; /* Check if buffer available */ if ((buf == NULL) || (buf->buffer.mem == NULL)) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return -1; } DLT_SHM_SEM_GET(buf->sem); ret = dlt_buffer_get_used_size(&(buf->buffer)); DLT_SHM_SEM_FREE(buf->sem); return ret; } int dlt_shm_get_message_count(DltShm *buf) { /* Check if buffer available */ if (buf == NULL) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return -1; } return dlt_buffer_get_message_count(&(buf->buffer)); } int dlt_shm_push(DltShm *buf, const unsigned char *data1, unsigned int size1, const unsigned char *data2, unsigned int size2, const unsigned char *data3, unsigned int size3) { int ret; /* Check if buffer available */ if ((buf == NULL) || (buf->buffer.mem == NULL)) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return -1; } DLT_SHM_SEM_GET(buf->sem); ret = dlt_buffer_push3(&(buf->buffer), data1, size1, data2, size2, data3, size3); DLT_SHM_SEM_FREE(buf->sem); return ret; } int dlt_shm_pull(DltShm *buf, unsigned char *data, int max_size) { int ret; /* Check if buffer available */ if ((buf == NULL) || (buf->buffer.mem == NULL)) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return -1; } DLT_SHM_SEM_GET(buf->sem); ret = dlt_buffer_pull(&(buf->buffer), data, max_size); DLT_SHM_SEM_FREE(buf->sem); return ret; } int dlt_shm_copy(DltShm *buf, unsigned char *data, int max_size) { int ret; /* Check if buffer available */ if ((buf == NULL) || (buf->buffer.mem == NULL)) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return -1; } DLT_SHM_SEM_GET(buf->sem); ret = dlt_buffer_copy(&(buf->buffer), data, max_size); DLT_SHM_SEM_FREE(buf->sem); return ret; } int dlt_shm_remove(DltShm *buf) { int ret; /* Check if buffer available */ if ((buf == NULL) || (buf->buffer.mem == NULL)) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return -1; } DLT_SHM_SEM_GET(buf->sem); ret = dlt_buffer_remove(&(buf->buffer)); DLT_SHM_SEM_FREE(buf->sem); return ret; } DltReturnValue dlt_shm_free_server(DltShm *buf, const char *name) { if ((buf == NULL) || (buf->buffer.shm == NULL) || name == NULL) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (munmap(buf->buffer.shm, buf->buffer.min_size) == -1) { dlt_vlog(LOG_ERR, "%s: munmap() failed: %s\n", __func__, strerror(errno)); } if (shm_unlink(name) == -1) { dlt_vlog(LOG_ERR, "%s: shm_unlink() failed: %s\n", __func__, strerror(errno)); } if (sem_close(buf->sem) == -1) { dlt_vlog(LOG_ERR, "%s: sem_close() failed: %s\n", __func__, strerror(errno)); } if (sem_unlink(name) == -1) { dlt_vlog(LOG_ERR, "%s: sem_unlink() failed: %s\n", __func__, strerror(errno)); } /* Reset parameters */ buf->shmfd = 0; buf->sem = NULL; return dlt_buffer_free_static(&(buf->buffer)); } DltReturnValue dlt_shm_free_client(DltShm *buf) { if ((buf == NULL) || (buf->buffer.shm == NULL)) { dlt_vlog(LOG_ERR, "%s: Wrong parameter: Null pointer\n", __func__); return DLT_RETURN_WRONG_PARAMETER; } if (munmap(buf->buffer.shm, buf->buffer.min_size) == -1) { dlt_vlog(LOG_ERR, "%s: munmap() failed: %s\n", __func__, strerror(errno)); } if (sem_close(buf->sem) == -1) { dlt_vlog(LOG_ERR, "%s: sem_close() failed: %s\n", __func__, strerror(errno)); } /* Reset parameters */ buf->shmfd = 0; buf->sem = NULL; return dlt_buffer_free_static(&(buf->buffer)); } dlt-daemon-2.18.6/src/shared/dlt_user_shared.c000066400000000000000000000136331377520261000212150ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_user_shared.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_user_shared.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include #include #include #include /* writev() */ #include "dlt_user_shared.h" #include "dlt_user_shared_cfg.h" DltReturnValue dlt_user_set_userheader(DltUserHeader *userheader, uint32_t mtype) { if (userheader == 0) return DLT_RETURN_ERROR; if (mtype <= 0) return DLT_RETURN_ERROR; userheader->pattern[0] = 'D'; userheader->pattern[1] = 'U'; userheader->pattern[2] = 'H'; userheader->pattern[3] = 1; userheader->message = mtype; return DLT_RETURN_OK; } int dlt_user_check_userheader(DltUserHeader *userheader) { if (userheader == 0) return -1; return (userheader->pattern[0] == 'D') && (userheader->pattern[1] == 'U') && (userheader->pattern[2] == 'H') && (userheader->pattern[3] == 1); } DltReturnValue dlt_user_log_out2(int handle, void *ptr1, size_t len1, void *ptr2, size_t len2) { struct iovec iov[2]; uint32_t bytes_written; if (handle < 0) /* Invalid handle */ return DLT_RETURN_ERROR; iov[0].iov_base = ptr1; iov[0].iov_len = len1; iov[1].iov_base = ptr2; iov[1].iov_len = len2; bytes_written = (uint32_t) writev(handle, iov, 2); if (bytes_written != (len1 + len2)) return DLT_RETURN_ERROR; return DLT_RETURN_OK; } DltReturnValue dlt_user_log_out3(int handle, void *ptr1, size_t len1, void *ptr2, size_t len2, void *ptr3, size_t len3) { struct iovec iov[3]; uint32_t bytes_written; if (handle < 0) /* Invalid handle */ return DLT_RETURN_ERROR; iov[0].iov_base = ptr1; iov[0].iov_len = len1; iov[1].iov_base = ptr2; iov[1].iov_len = len2; iov[2].iov_base = ptr3; iov[2].iov_len = len3; bytes_written = (uint32_t) writev(handle, iov, 3); if (bytes_written != (len1 + len2 + len3)) { switch (errno) { case ETIMEDOUT: { return DLT_RETURN_PIPE_ERROR; /* ETIMEDOUT - connect timeout */ break; } case EBADF: { return DLT_RETURN_PIPE_ERROR; /* EBADF - handle not open */ break; } case EPIPE: { return DLT_RETURN_PIPE_ERROR; /* EPIPE - pipe error */ break; } case EAGAIN: { return DLT_RETURN_PIPE_FULL; /* EAGAIN - data could not be written */ break; } default: { break; } } return DLT_RETURN_ERROR; } return DLT_RETURN_OK; }dlt-daemon-2.18.6/src/shared/dlt_user_shared.h000066400000000000000000000234671377520261000212300ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_user_shared.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_user_shared.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ #ifndef DLT_USER_SHARED_H #define DLT_USER_SHARED_H #include "dlt_types.h" #include "dlt_user.h" #include /** * This is the header of each message to be exchanged between application and daemon. */ typedef struct { char pattern[DLT_ID_SIZE]; /**< This pattern should be DUH0x01 */ uint32_t message; /**< messsage info */ } DLT_PACKED DltUserHeader; /** * This is the internal message content to exchange control msg register app information between application and daemon. */ typedef struct { char apid[DLT_ID_SIZE]; /**< application id */ pid_t pid; /**< process id of user application */ uint32_t description_length; /**< length of description */ } DLT_PACKED DltUserControlMsgRegisterApplication; /** * This is the internal message content to exchange control msg unregister app information between application and daemon. */ typedef struct { char apid[DLT_ID_SIZE]; /**< application id */ pid_t pid; /**< process id of user application */ } DLT_PACKED DltUserControlMsgUnregisterApplication; /** * This is the internal message content to exchange control msg register information between application and daemon. */ typedef struct { char apid[DLT_ID_SIZE]; /**< application id */ char ctid[DLT_ID_SIZE]; /**< context id */ int32_t log_level_pos; /**< offset in management structure on user-application side */ int8_t log_level; /**< log level */ int8_t trace_status; /**< trace status */ pid_t pid; /**< process id of user application */ uint32_t description_length; /**< length of description */ } DLT_PACKED DltUserControlMsgRegisterContext; /** * This is the internal message content to exchange control msg unregister information between application and daemon. */ typedef struct { char apid[DLT_ID_SIZE]; /**< application id */ char ctid[DLT_ID_SIZE]; /**< context id */ pid_t pid; /**< process id of user application */ } DLT_PACKED DltUserControlMsgUnregisterContext; /** * This is the internal message content to exchange control msg log level information between application and daemon. */ typedef struct { uint8_t log_level; /**< log level */ uint8_t trace_status; /**< trace status */ int32_t log_level_pos; /**< offset in management structure on user-application side */ } DLT_PACKED DltUserControlMsgLogLevel; /** * This is the internal message content to exchange control msg injection information between application and daemon. */ typedef struct { int32_t log_level_pos; /**< offset in management structure on user-application side */ uint32_t service_id; /**< service id of injection */ uint32_t data_length_inject; /**< length of injection message data field */ } DLT_PACKED DltUserControlMsgInjection; /** * This is the internal message content to exchange information about application log level and trace stats between * application and daemon. */ typedef struct { char apid[DLT_ID_SIZE]; /**< application id */ uint8_t log_level; /**< log level */ uint8_t trace_status; /**< trace status */ } DLT_PACKED DltUserControlMsgAppLogLevelTraceStatus; /** * This is the internal message content to set the logging mode: off, external, internal, both. */ typedef struct { int8_t log_mode; /**< the mode to be used for logging: off, external, internal, both */ } DLT_PACKED DltUserControlMsgLogMode; /** * This is the internal message content to get the logging state: 0 = off, 1 = external client connected. */ typedef struct { int8_t log_state; /**< the state to be used for logging state: 0 = off, 1 = external client connected */ } DLT_PACKED DltUserControlMsgLogState; /** * This is the internal message content to get the number of lost messages reported to the daemon. */ typedef struct { uint32_t overflow_counter; /**< counts the number of lost messages */ char apid[4]; /**< application which lost messages */ } DLT_PACKED DltUserControlMsgBufferOverflow; /************************************************************************************************** * The folowing functions are used shared between the user lib and the daemon implementation **************************************************************************************************/ /** * Set user header marker and store message type in user header * @param userheader pointer to the userheader * @param mtype user message type of internal message * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_set_userheader(DltUserHeader *userheader, uint32_t mtype); /** * Check if user header contains its marker * @param userheader pointer to the userheader * @return 0 no, 1 yes, negative value if there was an error */ int dlt_user_check_userheader(DltUserHeader *userheader); /** * Atomic write to file descriptor, using vector of 2 elements * @param handle file descriptor * @param ptr1 generic pointer to first segment of data to be written * @param len1 length of first segment of data to be written * @param ptr2 generic pointer to second segment of data to be written * @param len2 length of second segment of data to be written * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_out2(int handle, void *ptr1, size_t len1, void *ptr2, size_t len2); /** * Atomic write to file descriptor, using vector of 3 elements * @param handle file descriptor * @param ptr1 generic pointer to first segment of data to be written * @param len1 length of first segment of data to be written * @param ptr2 generic pointer to second segment of data to be written * @param len2 length of second segment of data to be written * @param ptr3 generic pointer to third segment of data to be written * @param len3 length of third segment of data to be written * @return Value from DltReturnValue enum */ DltReturnValue dlt_user_log_out3(int handle, void *ptr1, size_t len1, void *ptr2, size_t len2, void *ptr3, size_t len3); #endif /* DLT_USER_SHARED_H */ dlt-daemon-2.18.6/src/shared/dlt_user_shared_cfg.h000066400000000000000000000113241377520261000220340ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_user_shared_cfg.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt_user_shared_cfg.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ #ifndef DLT_USER_SHARED_CFG_H #define DLT_USER_SHARED_CFG_H /*************/ /* Changable */ /*************/ /************************/ /* Don't change please! */ /************************/ /* The different types of internal messages between user application and daemon. */ #define DLT_USER_MESSAGE_LOG 1 #define DLT_USER_MESSAGE_REGISTER_APPLICATION 2 #define DLT_USER_MESSAGE_UNREGISTER_APPLICATION 3 #define DLT_USER_MESSAGE_REGISTER_CONTEXT 4 #define DLT_USER_MESSAGE_UNREGISTER_CONTEXT 5 #define DLT_USER_MESSAGE_LOG_LEVEL 6 #define DLT_USER_MESSAGE_INJECTION 7 #define DLT_USER_MESSAGE_OVERFLOW 8 #define DLT_USER_MESSAGE_APP_LL_TS 9 #define DLT_USER_MESSAGE_LOG_SHM 10 #define DLT_USER_MESSAGE_LOG_MODE 11 #define DLT_USER_MESSAGE_LOG_STATE 12 #define DLT_USER_MESSAGE_MARKER 13 #define DLT_USER_MESSAGE_NOT_SUPPORTED 16 /* Internal defined values */ /* must be different from DltLogLevelType */ #define DLT_USER_LOG_LEVEL_NOT_SET -2 /* must be different from DltTraceStatusType */ #define DLT_USER_TRACE_STATUS_NOT_SET -2 #endif /* DLT_USER_SHARED_CFG_H */ dlt-daemon-2.18.6/src/system/000077500000000000000000000000001377520261000157525ustar00rootroot00000000000000dlt-daemon-2.18.6/src/system/CMakeLists.txt000066400000000000000000000032511377520261000205130ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### if(WITH_SYSTEMD_WATCHDOG OR WITH_SYSTEMD OR WITH_SYSTEMD_JOURNAL) message( STATUS "Added ${systemd_SRCS} to dlt-system") endif(WITH_SYSTEMD_WATCHDOG OR WITH_SYSTEMD OR WITH_SYSTEMD_JOURNAL) set(dlt_system_SRCS dlt-system.c dlt-system-options.c dlt-system-process-handling.c dlt-system-logfile.c dlt-system-processes.c dlt-system-shell.c dlt-system-syslog.c dlt-system-watchdog.c dlt-system-journal.c) if(WITH_DLT_FILETRANSFER) set(dlt_system_SRCS ${dlt_system_SRCS} dlt-system-filetransfer.c) add_definitions(-DDLT_FILETRANSFER_ENABLE) endif(WITH_DLT_FILETRANSFER) add_executable(dlt-system ${dlt_system_SRCS} ${systemd_SRCS}) target_link_libraries(dlt-system dlt) if(WITH_SYSTEMD_JOURNAL) if(SYSTEMD_VERSION LESS 209) target_link_libraries(dlt-system systemd-journal systemd-id128) else(SYSTEMD_VERSION LESS 209) target_link_libraries(dlt-system systemd) endif(SYSTEMD_VERSION LESS 209) endif(WITH_SYSTEMD_JOURNAL) if(WITH_DLT_FILETRANSFER) target_link_libraries(dlt-system ${ZLIB_LIBRARY}) endif(WITH_DLT_FILETRANSFER) set_target_properties(dlt-system PROPERTIES LINKER_LANGUAGE C) install(TARGETS dlt-system RUNTIME DESTINATION bin COMPONENT base) INSTALL(FILES dlt-system.conf DESTINATION ${CONFIGURATION_FILES_DIR} COMPONENT base) dlt-daemon-2.18.6/src/system/dlt-system-filetransfer.c000066400000000000000000000621101377520261000227050ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Lassi Marttala * Alexander Wenzel * Markus Klein * Mikko Rapeli * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-system-filetransfer.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-system-filetransfer.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Lassi Marttala ** ** Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #include #include #ifdef linux # include #endif #include #include #include #include #include #include #include #include "dlt-system.h" #include "dlt.h" #include "dlt_filetransfer.h" #ifdef linux # define INOTIFY_SZ (sizeof(struct inotify_event)) # define INOTIFY_LEN (INOTIFY_SZ + NAME_MAX + 1) #endif #define Z_CHUNK_SZ 1024 * 128 #define COMPRESS_EXTENSION ".gz" #define SUBDIR_COMPRESS ".tocompress" #define SUBDIR_TOSEND ".tosend" extern DltSystemThreads threads; /* From dlt_filetransfer */ extern uint32_t getFileSerialNumber(const char *file, int *ok); DLT_IMPORT_CONTEXT(dltsystem) DLT_DECLARE_CONTEXT(filetransferContext) #ifdef linux typedef struct { int handle; int fd[DLT_SYSTEM_LOG_DIRS_MAX]; } s_ft_inotify; s_ft_inotify ino; #endif char *origin_name(char *src) { if (strlen((char *)basename(src)) > 10) { return (char *)(basename(src) + 10); } else { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-filetransfer, error in recreating origin name!")); return NULL; } } char *unique_name(char *src) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, creating unique temporary file name.")); time_t t = time(NULL); int ok; uint32_t l = getFileSerialNumber(src, &ok) ^ t; if (!ok) return (char *)NULL; char *basename_f = basename(src); /* Length of ULONG_MAX + 1 */ int len = 11 + strlen(basename_f); if (len > NAME_MAX) { DLT_LOG(dltsystem, DLT_LOG_WARN, DLT_STRING("dlt-system-filetransfer, unique name creation needs to shorten the filename:"), DLT_STRING(basename_f)); len = NAME_MAX; } char *ret = malloc(len); MALLOC_ASSERT(ret); snprintf(ret, len, "%010" PRIu32 "%s", l, basename_f); return ret; } /** * Function which only calls the relevant part to transfer the payload */ void send_dumped_file(FiletransferOptions const *opts, char *dst_tosend) { /* check if a client is connected to the deamon. If not, try again in a second */ while (dlt_get_log_state() != 1) sleep(1); char *fn = origin_name(dst_tosend); DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, sending dumped file:"), DLT_STRING(fn)); if (dlt_user_log_file_header_alias(&filetransferContext, dst_tosend, fn) == 0) { int pkgcount = dlt_user_log_file_packagesCount(&filetransferContext, dst_tosend); int lastpkg = 0; int success = 1; while (lastpkg < pkgcount) { int total = 2; int used = 2; dlt_user_check_buffer(&total, &used); while ((total - used) < (total / 2)) { struct timespec t; t.tv_sec = 0; t.tv_nsec = 1000000ul * opts->TimeoutBetweenLogs; nanosleep(&t, NULL); dlt_user_log_resend_buffer(); dlt_user_check_buffer(&total, &used); } lastpkg++; if (dlt_user_log_file_data(&filetransferContext, dst_tosend, lastpkg, opts->TimeoutBetweenLogs) < 0) { success = 0; break; } } if (success) dlt_user_log_file_end(&filetransferContext, dst_tosend, 1); } DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, sent dumped file")); } /** * compress file, delete the source file * modification: compress into subdirectory * File whis is compress will be deleted afterwards * @param src File to be sent * @param dst destination where to compress the file * @param level of compression **/ int compress_file_to(char *src, char *dst, int level) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, compressing file from:"), DLT_STRING(src), DLT_STRING("to:"), DLT_STRING(dst)); char *buf; char dst_mode[8]; snprintf(dst_mode, 8, "wb%d", level); gzFile dst_file; FILE *src_file; dst_file = gzopen(dst, dst_mode); if (dst_file == Z_NULL) return -1; src_file = fopen(src, "r"); if (src_file == NULL) { gzclose(dst_file); return -1; } buf = malloc(Z_CHUNK_SZ); MALLOC_ASSERT(buf); while (!feof(src_file)) { int read = fread(buf, 1, Z_CHUNK_SZ, src_file); if (ferror(src_file)) { free(buf); gzclose(dst_file); fclose(src_file); return -1; } gzwrite(dst_file, buf, read); } if (remove(src) < 0) DLT_LOG(dltsystem, DLT_LOG_WARN, DLT_STRING("Could not remove file"), DLT_STRING(src)); free(buf); fclose(src_file); gzclose(dst_file); return 0; } /*!Sends one file over DLT. */ /** * If configured in opts, compresses it, then sends it. * uses subdirecties for compressing and before sending, to avoid that those files get changed in the meanwhile * */ int send_one(char *src, FiletransferOptions const *opts, int which) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, sending a file.")); sleep(opts->TimeDelay); /* Prepare all needed file names */ char *fn = basename(src); if (fn == NULL) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("basename not valid")); return -1; } char *src_copy = strndup(src, PATH_MAX); MALLOC_ASSERT(src_copy); /*dirname overwrites its argument anyway, */ /*but depending on argument returned address might change */ char *fdir = dirname(src_copy); char *dst_tosend;/*file which is going to be sent */ char *rn = unique_name(src);/*new unique filename based on inode */ if (rn == NULL) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("file information not available, may be file got overwritten")); return -1; } /* Compress if needed */ if (opts->Compression[which] > 0) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, Moving file to tmp directory for compressing it.")); char *dst_tocompress;/*file which is going to be compressed, the compressed one is named dst_tosend */ int len = strlen(fdir) + strlen(SUBDIR_COMPRESS) + strlen(rn) + 3;/*the filename in .tocompress +2 for 2*"/", +1 for \0 */ dst_tocompress = malloc(len); MALLOC_ASSERT(dst_tocompress); snprintf(dst_tocompress, len, "%s/%s/%s", fdir, SUBDIR_COMPRESS, rn); /*moving in subdir, from where it can be compressed */ if (rename(src, dst_tocompress) < 0) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("Could not move file"), DLT_STRING(src), DLT_STRING(dst_tocompress)); free(rn); free(dst_tocompress); free(src_copy); return -1; } len = strlen(fdir) + strlen(SUBDIR_TOSEND) + strlen(rn) + strlen(COMPRESS_EXTENSION) + 3;/*the resulting filename in .tosend +2 for 2*"/", +1 for \0 */ dst_tosend = malloc(len); MALLOC_ASSERT(dst_tosend); snprintf(dst_tosend, len, "%s/%s/%s%s", fdir, SUBDIR_TOSEND, rn, COMPRESS_EXTENSION); if (compress_file_to(dst_tocompress, dst_tosend, opts->CompressionLevel[which]) != 0) { free(rn); free(dst_tosend); free(dst_tocompress); free(src_copy); return -1; } free(dst_tocompress); } else { /*move it directly into "tosend" */ DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, Moving file to tmp directory.")); int len = strlen(fdir) + strlen(SUBDIR_TOSEND) + strlen(rn) + 3; dst_tosend = malloc(len);/*the resulting filename in .tosend +2 for 2*"/", +1 for \0 */ snprintf(dst_tosend, len, "%s/%s/%s", fdir, SUBDIR_TOSEND, rn); DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, Rename:"), DLT_STRING(src), DLT_STRING("to: "), DLT_STRING(dst_tosend)); /*moving in subdir, from where it can be compressed */ if (rename(src, dst_tosend) < 0) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("Could not move file"), DLT_STRING(src), DLT_STRING(dst_tosend)); free(rn); free(dst_tosend); free(src_copy); return -1; } } DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, File ready to send")); send_dumped_file(opts, dst_tosend); free(rn); free(dst_tosend); free(src_copy); return 0; } int flush_dir_send(FiletransferOptions const *opts, const char *compress_dir, const char *send_dir) { struct dirent *dp; DIR *dir; dir = opendir(send_dir); if (dir != NULL) { while ((dp = readdir(dir)) != NULL) { if (dp->d_type != DT_REG) continue; char *fn; DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, old compressed file found in send directory:"), DLT_STRING(dp->d_name)); int len = strlen(send_dir) + strlen(dp->d_name) + 2; fn = malloc(len); MALLOC_ASSERT(fn); snprintf(fn, len, "%s/%s", send_dir, dp->d_name); /*if we have a file here and in the to_compress dir, we delete the to_send file: we can not be sure, that it has been properly compressed! */ if (!strncmp(dp->d_name + strlen(dp->d_name) - strlen(COMPRESS_EXTENSION), COMPRESS_EXTENSION, strlen(COMPRESS_EXTENSION))) { /*ends with ".gz" */ /*old file name (not: path) would have been: */ char tmp[strlen(dp->d_name) - strlen(COMPRESS_EXTENSION) + 1]; strncpy(tmp, dp->d_name, strlen(dp->d_name) - strlen(COMPRESS_EXTENSION)); tmp[strlen(dp->d_name) - strlen(COMPRESS_EXTENSION)] = '\0'; int len = strlen(tmp) + strlen(compress_dir) + 1 + 1;/*2 sizes + 1*"/" + \0 */ char *path_uncompressed = malloc(len); MALLOC_ASSERT(path_uncompressed); snprintf(path_uncompressed, len, "%s/%s", compress_dir, tmp); struct stat sb; if (stat(path_uncompressed, &sb) == -1) { /*uncompressed equivalent does not exist. We can send it out. */ DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, sending file.")); send_dumped_file(opts, fn); } else { /*There is an uncompressed file. Compression seems to have been interrupted -> delete the compressed file instead of sending it! */ DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING( "dlt-system-filetransfer, uncompressed version exists. Deleting partially compressed version.")); if (sb.st_mode & S_IFREG) { if (remove(fn) != 0) /*"Error deleting file". Continue? If we would cancel, maybe the dump is never sent! Deletion would again be tried in next LC. */ DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("Error deleting file:"), DLT_STRING(fn)); } else { /*"Oldfile is a not reg file. Is this possible? Can we compress a directory?: %s\n",path_uncompressed); */ DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING( "dlt-system-filetransfer, Oldfile is a not regular file! Do we have a problem?"), DLT_STRING(fn)); } } free(path_uncompressed);/*it is no more used. It would be transferred in next step. */ }/*it is a .gz file */ else { /*uncompressed file. We can just resend it, the action to put it here was a move action. */ DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, Sending uncompressed file from previous LC."), DLT_STRING(fn)); send_dumped_file(opts, fn); } free(fn); } } else { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("Could not open directory"), DLT_STRING(send_dir)); return -1; } closedir(dir);/*end: send_dir */ return 0; } int flush_dir_compress(FiletransferOptions const *opts, int which, const char *compress_dir, const char *send_dir) { /*check for files in compress_dir. Assumption: a file which lies here, should have been compressed, but that action was interrupted. */ /*As it can arrive here only by a rename, it is most likely to be a complete file */ struct dirent *dp; DIR *dir; dir = opendir(compress_dir); if (dir != NULL) { while ((dp = readdir(dir)) != NULL) { if (dp->d_type != DT_REG) continue; DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, old file found in compress-directory.")); /*compress file into to_send dir */ int len = strlen(compress_dir) + strlen(dp->d_name) + 2; char *cd_filename = malloc(len); MALLOC_ASSERT(cd_filename); snprintf(cd_filename, len, "%s/%s", compress_dir, dp->d_name); len = strlen(send_dir) + strlen(dp->d_name) + strlen(COMPRESS_EXTENSION) + 2; char *dst_tosend = malloc(len);/*the resulting filename in .tosend +2 for 1*"/", +1 for \0 + .gz */ MALLOC_ASSERT(dst_tosend); snprintf(dst_tosend, len, "%s/%s%s", send_dir, dp->d_name, COMPRESS_EXTENSION); if (compress_file_to(cd_filename, dst_tosend, opts->CompressionLevel[which]) != 0) { free(dst_tosend); free(cd_filename); closedir(dir); return -1; } /*send file */ send_dumped_file(opts, dst_tosend); free(dst_tosend); free(cd_filename); } } else { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("Could not open directory"), DLT_STRING(compress_dir)); return -1; } closedir(dir);/*end: compress_dir */ return 0; } int flush_dir_original(FiletransferOptions const *opts, int which) { struct dirent *dp; DIR *dir; const char *sdir = opts->Directory[which]; dir = opendir(sdir); if (dir != NULL) { while ((dp = readdir(dir)) != NULL) { if (dp->d_type != DT_REG) /*we don't send directories */ continue; DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, old file found in directory.")); int len = strlen(sdir) + strlen(dp->d_name) + 2; char *fn = malloc(len); MALLOC_ASSERT(fn); snprintf(fn, len, "%s/%s", sdir, dp->d_name); if (send_one(fn, opts, which) < 0) { closedir(dir); free(fn); return -1; } free(fn); } } else { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("Could not open directory"), DLT_STRING(sdir)); return -1; } closedir(dir); return 0; } /*!Cleans the surveyed directories and subdirectories. Sends residing files into trace */ /** * @param opts FiletransferOptions * @param which which directory is affected -> position in list of opts->Directory * @return Returns 0 if everything was okay. If there was a failure a value < 0 will be returned. */ int flush_dir(FiletransferOptions const *opts, int which) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, flush directory of old files.")); char *compress_dir; char *send_dir; int len = strlen(opts->Directory[which]) + strlen(SUBDIR_COMPRESS) + 2; compress_dir = malloc (len); MALLOC_ASSERT(compress_dir); snprintf(compress_dir, len, "%s/%s", opts->Directory[which], SUBDIR_COMPRESS); len = strlen(opts->Directory[which]) + strlen(SUBDIR_TOSEND) + 2; send_dir = malloc (len); MALLOC_ASSERT(send_dir); snprintf(send_dir, len, "%s/%s", opts->Directory[which], SUBDIR_TOSEND); /*1st: scan the tosend directory. */ if (0 != flush_dir_send(opts, compress_dir, send_dir)) { free(send_dir); free(compress_dir); return -1; } /*1nd: scan the tocompress directory. */ if (0 != flush_dir_compress(opts, which, compress_dir, send_dir)) { free(send_dir); free(compress_dir); return -1; } free(send_dir);/*no more used */ free(compress_dir); /*last step: scan the original directory - we can reuse the send_one function */ if (0 != flush_dir_original(opts, which)) return -1; return 0; } /*!Initializes the surveyed directories */ /**On startup, the inotifiy handlers are created, and existing files shall be sent into DLT stream * @param opts FiletransferOptions * @return Returns 0 if everything was okay. If there was a failure a value < 0 will be returned. */ int init_filetransfer_dirs(FiletransferOptions const *opts) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, initializing inotify on directories.")); int i; #ifdef linux ino.handle = inotify_init(); if (ino.handle < 0) { DLT_LOG(filetransferContext, DLT_LOG_FATAL, DLT_STRING("Failed to initialize inotify in dlt-system file transfer.")); return -1; } #endif for (i = 0; i < opts->Count; i++) { /*create subdirectories for processing the files */ char *subdirpath; int len = strlen(opts->Directory[i]) + strlen(SUBDIR_COMPRESS) + 2; subdirpath = malloc (len); MALLOC_ASSERT(subdirpath); snprintf(subdirpath, len, "%s/%s", opts->Directory[i], SUBDIR_COMPRESS); int ret = mkdir(subdirpath, 0777); if ((0 != ret) && (EEXIST != errno)) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-filetransfer, error creating subdirectory: "), DLT_STRING(subdirpath), DLT_STRING(" Errorcode: "), DLT_INT(errno)); free (subdirpath); return -1; } free(subdirpath); len = strlen(opts->Directory[i]) + strlen(SUBDIR_TOSEND) + 2; subdirpath = malloc (len); MALLOC_ASSERT(subdirpath); snprintf(subdirpath, len, "%s/%s", opts->Directory[i], SUBDIR_TOSEND); ret = mkdir(subdirpath, 0777); if ((0 != ret) && (EEXIST != errno)) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-filetransfer, error creating subdirectory: "), DLT_STRING(subdirpath), DLT_STRING(" Errorcode: "), DLT_INT(errno)); free (subdirpath); return -1; } free(subdirpath); #ifdef linux ino.fd[i] = inotify_add_watch(ino.handle, opts->Directory[i], IN_CLOSE_WRITE | IN_MOVED_TO); if (ino.fd[i] < 0) { char buf[1024]; snprintf(buf, 1024, "Failed to add inotify watch to directory %s in dlt-system file transfer.", opts->Directory[i]); DLT_LOG(filetransferContext, DLT_LOG_FATAL, DLT_STRING(buf)); return -1; } #endif flush_dir(opts, i); } return 0; } int wait_for_files(FiletransferOptions const *opts) { #ifdef linux DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, waiting for files.")); static char buf[INOTIFY_LEN]; ssize_t len = read(ino.handle, buf, INOTIFY_LEN); if (len < 0) { DLT_LOG(filetransferContext, DLT_LOG_ERROR, DLT_STRING("Error while waiting for files in dlt-system file transfer.")); return -1; } unsigned int i = 0; while (i < (len - INOTIFY_SZ)) { struct inotify_event *ie = (struct inotify_event *)&buf[i]; if (ie->len > 0) { if ((ie->mask & IN_CLOSE_WRITE) || (ie->mask & IN_MOVED_TO)) { int j; for (j = 0; j < opts->Count; j++) if (ie->wd == ino.fd[j]) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, found new file."), DLT_STRING(ie->name)); int length = strlen(opts->Directory[j]) + ie->len + 1; if (length > PATH_MAX) { DLT_LOG(filetransferContext, DLT_LOG_ERROR, DLT_STRING( "dlt-system-filetransfer: Very long path for file transfer. Cancelling transfer! Length is: "), DLT_INT(length)); return -1; } char *tosend = malloc(length); snprintf(tosend, length, "%s/%s", opts->Directory[j], ie->name); send_one(tosend, opts, j); free(tosend); } } } i += INOTIFY_SZ + ie->len; } #endif return 0; } void filetransfer_thread(void *v_conf) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, in thread.")); DltSystemConfiguration *conf = (DltSystemConfiguration *)v_conf; DLT_REGISTER_CONTEXT(filetransferContext, conf->Filetransfer.ContextId, "File transfer manager."); sleep(conf->Filetransfer.TimeStartup); if (init_filetransfer_dirs(&(conf->Filetransfer)) < 0) return; while (!threads.shutdown) { if (wait_for_files(&(conf->Filetransfer)) < 0) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("Error while waiting files. File transfer shutdown.")); return; } sleep(conf->Filetransfer.TimeDelay); } } dlt-daemon-2.18.6/src/system/dlt-system-journal.c000066400000000000000000000332501377520261000216760ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-system-journal.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-system-journal.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #if defined(DLT_SYSTEMD_JOURNAL_ENABLE) #include #include #include #include #include #include #include "dlt-system.h" #include #include #include /* for PRI formatting macro */ extern DltSystemThreads threads; #define DLT_SYSTEM_JOURNAL_BUFFER_SIZE 256 #define DLT_SYSTEM_JOURNAL_BUFFER_SIZE_BIG 2048 #define DLT_SYSTEM_JOURNAL_ASCII_FIRST_VISIBLE_CHARACTER 31 #define DLT_SYSTEM_JOURNAL_BOOT_ID_MAX_LENGTH 9 + 32 + 1 typedef struct { char real[DLT_SYSTEM_JOURNAL_BUFFER_SIZE]; char monotonic[DLT_SYSTEM_JOURNAL_BUFFER_SIZE]; } MessageTimestamp; DLT_IMPORT_CONTEXT(dltsystem) DLT_DECLARE_CONTEXT(journalContext) int journal_checkUserBufferForFreeSpace() { int total_size, used_size; dlt_user_check_buffer(&total_size, &used_size); if ((total_size - used_size) < (total_size / 2)) return -1; return 1; } int dlt_system_journal_get(sd_journal *j, char *target, const char *field, size_t max_size) { char *data; size_t length; int error_code; size_t field_size; /* pre check parameters */ if ((max_size < 1) || (target == 0) || (field == 0) || (j == 0)) return -1; /* intialise empty target */ target[0] = 0; /* get data from journal */ error_code = sd_journal_get_data(j, field, (const void **)&data, &length); /* check if an error */ if (error_code) return error_code; /* calculate field size */ field_size = strlen(field) + 1; /*check length */ if (length < field_size) return -1; /* copy string */ if (max_size <= (length - field_size)) { /* truncate */ strncpy(target, data + field_size, max_size - 1); target[max_size - 1] = 0; } else { /* full copy */ strncpy(target, data + field_size, length - field_size); target[length - field_size] = 0; } /* debug messages */ /*printf("%s = %s\n",field,target); */ /* Success */ return 0; } void dlt_system_journal_get_timestamp(sd_journal *journal, MessageTimestamp *timestamp) { int ret = 0; time_t time_secs = 0; uint64_t time_usecs = 0; struct tm timeinfo; char buffer_realtime[DLT_SYSTEM_JOURNAL_BUFFER_SIZE] = { 0 }; char buffer_realtime_formatted[DLT_SYSTEM_JOURNAL_BUFFER_SIZE] = { 0 }; char buffer_monotime[DLT_SYSTEM_JOURNAL_BUFFER_SIZE] = { 0 }; /* Try to get realtime from message source and if not successful try to get realtime from journal entry */ ret = dlt_system_journal_get(journal, buffer_realtime, "_SOURCE_REALTIME_TIMESTAMP", sizeof(buffer_realtime)); if ((ret == 0) && (strlen(buffer_realtime) > 0)) { errno = 0; time_usecs = strtoull(buffer_realtime, NULL, 10); if (errno != 0) time_usecs = 0; } else if ((ret = sd_journal_get_realtime_usec(journal, &time_usecs)) < 0) { DLT_LOG(dltsystem, DLT_LOG_WARN, DLT_STRING("dlt-system-journal failed to get realtime: "), DLT_STRING(strerror(-ret))); /* just to be sure to have a defined value */ time_usecs = 0; } time_secs = (time_t)(time_usecs / 1000000); tzset(); localtime_r(&time_secs, &timeinfo); strftime(buffer_realtime_formatted, sizeof(buffer_realtime_formatted), "%Y/%m/%d %H:%M:%S", &timeinfo); snprintf(timestamp->real, sizeof(timestamp->real), "%s.%06" PRIu64, buffer_realtime_formatted, time_usecs % 1000000); /* Try to get monotonic time from message source and if not successful try to get monotonic time from journal entry */ ret = dlt_system_journal_get(journal, buffer_monotime, "_SOURCE_MONOTONIC_TIMESTAMP", sizeof(buffer_monotime)); if ((ret == 0) && (strlen(buffer_monotime) > 0)) { errno = 0; time_usecs = strtoull(buffer_monotime, NULL, 10); if (errno != 0) time_usecs = 0; } else if ((ret = sd_journal_get_monotonic_usec(journal, &time_usecs, NULL)) < 0) { DLT_LOG(dltsystem, DLT_LOG_WARN, DLT_STRING("dlt-system-journal failed to get monotonic time: "), DLT_STRING(strerror(-ret))); /* just to be sure to have a defined value */ time_usecs = 0; } snprintf(timestamp->monotonic, sizeof(timestamp->monotonic), "%" PRId64 ".%06" PRIu64, time_usecs / 1000000, time_usecs % 1000000); } void journal_thread(void *v_conf) { int r; sd_journal *j; char match[DLT_SYSTEM_JOURNAL_BOOT_ID_MAX_LENGTH] = "_BOOT_ID="; sd_id128_t boot_id; uint32_t ts; char buffer_process[DLT_SYSTEM_JOURNAL_BUFFER_SIZE] = { 0 }, buffer_priority[DLT_SYSTEM_JOURNAL_BUFFER_SIZE] = { 0 }, buffer_pid[DLT_SYSTEM_JOURNAL_BUFFER_SIZE] = { 0 }, buffer_comm[DLT_SYSTEM_JOURNAL_BUFFER_SIZE] = { 0 }, buffer_message[DLT_SYSTEM_JOURNAL_BUFFER_SIZE_BIG] = { 0 }, buffer_transport[DLT_SYSTEM_JOURNAL_BUFFER_SIZE] = { 0 }; MessageTimestamp timestamp; int loglevel, systemd_loglevel; char *systemd_log_levels[] = { "Emergency", "Alert", "Critical", "Error", "Warning", "Notice", "Informational", "Debug" }; DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-journal, in thread.")); DltSystemConfiguration *conf = (DltSystemConfiguration *)v_conf; DLT_REGISTER_CONTEXT(journalContext, conf->Journal.ContextId, "Journal Adapter"); r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY /*SD_JOURNAL_LOCAL_ONLY|SD_JOURNAL_RUNTIME_ONLY*/); printf("journal open return %d\n", r); if (r < 0) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-journal, cannot open journal:"), DLT_STRING(strerror(-r))); printf("journal open failed: %s\n", strerror(-r)); return; } if (conf->Journal.CurrentBoot) { /* show only current boot entries */ r = sd_id128_get_boot(&boot_id); if (r < 0) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-journal failed to get boot id:"), DLT_STRING(strerror(-r))); sd_journal_close(j); return; } sd_id128_to_string(boot_id, match + 9); r = sd_journal_add_match(j, match, strlen(match)); if (r < 0) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-journal failed to get match:"), DLT_STRING(strerror(-r))); sd_journal_close(j); return; } } if (conf->Journal.Follow) { /* show only last 10 entries and follow */ r = sd_journal_seek_tail(j); if (r < 0) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-journal failed to seek to tail:"), DLT_STRING(strerror(-r))); sd_journal_close(j); return; } r = sd_journal_previous_skip(j, 10); if (r < 0) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-journal failed to seek back 10 entries:"), DLT_STRING(strerror(-r))); sd_journal_close(j); return; } } while (!threads.shutdown) { r = sd_journal_next(j); if (r < 0) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-journal failed to get next entry:"), DLT_STRING(strerror(-r))); sd_journal_close(j); return; } else if (r > 0) { /* get all data from current journal entry */ dlt_system_journal_get_timestamp(j, ×tamp); /* get data from journal entry, empty string if invalid fields */ dlt_system_journal_get(j, buffer_comm, "_COMM", sizeof(buffer_comm)); dlt_system_journal_get(j, buffer_pid, "_PID", sizeof(buffer_pid)); dlt_system_journal_get(j, buffer_priority, "PRIORITY", sizeof(buffer_priority)); dlt_system_journal_get(j, buffer_message, "MESSAGE", sizeof(buffer_message)); dlt_system_journal_get(j, buffer_transport, "_TRANSPORT", sizeof(buffer_transport)); /* prepare process string */ if (strcmp(buffer_transport, "kernel") == 0) snprintf(buffer_process, DLT_SYSTEM_JOURNAL_BUFFER_SIZE, "kernel:"); else snprintf(buffer_process, DLT_SYSTEM_JOURNAL_BUFFER_SIZE, "%s[%s]:", buffer_comm, buffer_pid); /* map log level on demand */ loglevel = DLT_LOG_INFO; systemd_loglevel = atoi(buffer_priority); if (conf->Journal.MapLogLevels) { /* Map log levels from journal to DLT */ switch (systemd_loglevel) { case 0: /* Emergency */ case 1: /* Alert */ case 2: /* Critical */ loglevel = DLT_LOG_FATAL; break; case 3: /* Error */ loglevel = DLT_LOG_ERROR; break; case 4: /* Warning */ loglevel = DLT_LOG_WARN; break; case 5: /* Notice */ case 6: /* Informational */ loglevel = DLT_LOG_INFO; break; case 7: /* Debug */ loglevel = DLT_LOG_DEBUG; break; default: loglevel = DLT_LOG_INFO; break; } } if ((systemd_loglevel >= 0) && (systemd_loglevel <= 7)) snprintf(buffer_priority, DLT_SYSTEM_JOURNAL_BUFFER_SIZE, "%s:", systemd_log_levels[systemd_loglevel]); else snprintf(buffer_priority, DLT_SYSTEM_JOURNAL_BUFFER_SIZE, "prio_unknown:"); /* write log entry */ if (conf->Journal.UseOriginalTimestamp == 0) { DLT_LOG(journalContext, loglevel, DLT_STRING(timestamp.real), DLT_STRING(timestamp.monotonic), DLT_STRING(buffer_process), DLT_STRING(buffer_priority), DLT_STRING(buffer_message) ); } else { /* since we are talking about points in time, I'd prefer truncating over arithmetic rounding */ ts = (uint32_t)(atof(timestamp.monotonic) * 10000); DLT_LOG_TS(journalContext, loglevel, ts, DLT_STRING(timestamp.real), DLT_STRING(buffer_process), DLT_STRING(buffer_priority), DLT_STRING(buffer_message) ); } } else { r = sd_journal_wait(j, 1000000); if (r < 0) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-journal failed to call sd_journal_get_realtime_usec(): "), DLT_STRING(strerror(-r))); sd_journal_close(j); return; } } if (journal_checkUserBufferForFreeSpace() == -1) { /* buffer is nearly full */ /* wait 500ms for writing next entry */ struct timespec t; t.tv_sec = 0; t.tv_nsec = 1000000ul * 500; nanosleep(&t, NULL); } } sd_journal_close(j); DLT_UNREGISTER_CONTEXT(journalContext); } #endif /* DLT_SYSTEMD_JOURNAL_ENABLE */ dlt-daemon-2.18.6/src/system/dlt-system-logfile.c000066400000000000000000000115431377520261000216460ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Lassi Marttala * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-system-logfile.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-system-logfile.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Lassi Marttala ** ** Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #include #include #include "dlt-system.h" /* Modes of sending */ #define SEND_MODE_OFF 0 #define SEND_MODE_ONCE 1 #define SEND_MODE_ON 2 DLT_IMPORT_CONTEXT(dltsystem) extern DltSystemThreads threads; DltContext logfileContext[DLT_SYSTEM_LOG_FILE_MAX]; void send_file(LogFileOptions const *fileopt, int n) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-logfile, sending file.")); FILE *pFile; DltContext context = logfileContext[n]; char buffer[1024]; int bytes; int seq = 1; pFile = fopen((*fileopt).Filename[n], "r"); if (pFile != NULL) { while (!feof(pFile)) { bytes = fread(buffer, 1, sizeof(buffer) - 1, pFile); if (bytes >= 0) buffer[bytes] = 0; else buffer[0] = 0; if (feof(pFile)) { DLT_LOG(context, DLT_LOG_INFO, DLT_INT(seq * -1), DLT_STRING(buffer)); break; } else { DLT_LOG(context, DLT_LOG_INFO, DLT_INT(seq++), DLT_STRING(buffer)); } } fclose(pFile); } else { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-logfile, failed to open file."), DLT_STRING((*fileopt).Filename[n])); } } void register_contexts(LogFileOptions const *fileopts) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-logfile, registering file contexts.")); int i; for (i = 0; i < (*fileopts).Count; i++) DLT_REGISTER_CONTEXT(logfileContext[i], (*fileopts).ContextId[i], (*fileopts).Filename[i]); } void logfile_thread(void *v_conf) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-logfile, in thread.")); DltSystemConfiguration *conf = (DltSystemConfiguration *)v_conf; register_contexts(&(conf->LogFile)); int logfile_delays[DLT_SYSTEM_LOG_FILE_MAX]; int i; for (i = 0; i < conf->LogFile.Count; i++) logfile_delays[i] = conf->LogFile.TimeDelay[i]; while (!threads.shutdown) { sleep(1); for (i = 0; i < conf->LogFile.Count; i++) { if (conf->LogFile.Mode[i] == SEND_MODE_OFF) continue; if (logfile_delays[i] <= 0) { send_file(&(conf->LogFile), i); logfile_delays[i] = conf->LogFile.TimeDelay[i]; if (conf->LogFile.Mode[i] == SEND_MODE_ONCE) conf->LogFile.Mode[i] = SEND_MODE_OFF; } else { logfile_delays[i]--; } } } } dlt-daemon-2.18.6/src/system/dlt-system-options.c000066400000000000000000000411121377520261000217130ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Lassi Marttala * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-system-options.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-system-options.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Lassi Marttala ** ** Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** lm Lassi Marttala BMW ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #include "dlt-system.h" #include #include /** * Print information how to use this program. */ void usage(char *prog_name) { char version[255]; dlt_get_version(version, 255); printf("Usage: %s [options]\n", prog_name); printf("Application to forward syslog messages to DLT, transfer system information, logs and files.\n"); printf("%s\n", version); printf("Options:\n"); printf(" -d Daemonize. Detach from terminal and run in background.\n"); printf(" -c filename Use configuration file. \n"); printf(" Default: %s\n", DEFAULT_CONF_FILE); printf(" -h This help message.\n"); } /** * Initialize command line options with default values. */ void init_cli_options(DltSystemCliOptions *options) { options->ConfigurationFileName = DEFAULT_CONF_FILE; options->Daemonize = 0; } /** * Read command line options and set the values in provided structure */ int read_command_line(DltSystemCliOptions *options, int argc, char *argv[]) { init_cli_options(options); int opt; while ((opt = getopt(argc, argv, "c:hd")) != -1) switch (opt) { case 'd': { options->Daemonize = 1; break; } case 'c': { options->ConfigurationFileName = malloc(strlen(optarg) + 1); MALLOC_ASSERT(options->ConfigurationFileName); strcpy(options->ConfigurationFileName, optarg); /* strcpy unritical here, because size matches exactly the size to be copied */ break; } case 'h': { usage(argv[0]); exit(0); return -1; /*for parasoft */ } default: { fprintf(stderr, "Unknown option '%c'\n", optopt); usage(argv[0]); return -1; } } return 0; } /** * Initialize configuration to default values. */ void init_configuration(DltSystemConfiguration *config) { int i = 0; /* Common */ config->ApplicationId = "SYS"; /* Shell */ config->Shell.Enable = 0; /* Syslog */ config->Syslog.Enable = 0; config->Syslog.ContextId = "SYSL"; config->Syslog.Port = 47111; /* Journal */ config->Journal.Enable = 0; config->Journal.ContextId = "JOUR"; config->Journal.CurrentBoot = 1; config->Journal.Follow = 0; config->Journal.MapLogLevels = 1; config->Journal.UseOriginalTimestamp = 1; /* File transfer */ config->Filetransfer.Enable = 0; config->Filetransfer.ContextId = "FILE"; config->Filetransfer.TimeDelay = 10; config->Filetransfer.TimeStartup = 30; config->Filetransfer.TimeoutBetweenLogs = 10; config->Filetransfer.Count = 0; for (i = 0; i < DLT_SYSTEM_LOG_DIRS_MAX; i++) { config->Filetransfer.Directory[i] = NULL; config->Filetransfer.Compression[i] = 0; config->Filetransfer.CompressionLevel[i] = 5; } /* Log file */ config->LogFile.Enable = 0; config->LogFile.Count = 0; for (i = 0; i < DLT_SYSTEM_LOG_FILE_MAX; i++) { config->LogFile.ContextId[i] = NULL; config->LogFile.Filename[i] = NULL; config->LogFile.Mode[i] = 0; config->LogFile.TimeDelay[i] = 0; } /* Log process */ config->LogProcesses.Enable = 0; config->LogProcesses.ContextId = "PROC"; config->LogProcesses.Count = 0; for (i = 0; i < DLT_SYSTEM_LOG_PROCESSES_MAX; i++) { config->LogProcesses.Name[i] = NULL; config->LogProcesses.Filename[i] = NULL; config->LogProcesses.Mode[i] = 0; config->LogProcesses.TimeDelay[i] = 0; } } /** * Read options from the configuration file */ int read_configuration_file(DltSystemConfiguration *config, char *file_name) { FILE *file; char *line, *token, *value, *pch; int ret = 0; init_configuration(config); file = fopen(file_name, "r"); if (file == NULL) { fprintf(stderr, "dlt-system-options, could not open configuration file.\n"); return -1; } line = malloc(MAX_LINE); token = malloc(MAX_LINE); value = malloc(MAX_LINE); MALLOC_ASSERT(line); MALLOC_ASSERT(token); MALLOC_ASSERT(value); while (fgets(line, MAX_LINE, file) != NULL) { token[0] = 0; value[0] = 0; pch = strtok (line, " =\r\n"); while (pch != NULL) { if (pch[0] == '#') break; if (token[0] == 0) { strncpy(token, pch, MAX_LINE - 1); token[MAX_LINE - 1] = 0; } else { strncpy(value, pch, MAX_LINE); value[MAX_LINE - 1] = 0; break; } pch = strtok (NULL, " =\r\n"); } if (token[0] && value[0]) { /* Common */ if (strcmp(token, "ApplicationId") == 0) { config->ApplicationId = malloc(strlen(value) + 1); MALLOC_ASSERT(config->ApplicationId); strcpy(config->ApplicationId, value); /* strcpy unritical here, because size matches exactly the size to be copied */ } /* Shell */ else if (strcmp(token, "ShellEnable") == 0) { config->Shell.Enable = atoi(value); } /* Syslog */ else if (strcmp(token, "SyslogEnable") == 0) { config->Syslog.Enable = atoi(value); } else if (strcmp(token, "SyslogContextId") == 0) { config->Syslog.ContextId = malloc(strlen(value) + 1); MALLOC_ASSERT(config->Syslog.ContextId); strcpy(config->Syslog.ContextId, value); /* strcpy unritical here, because size matches exactly the size to be copied */ } else if (strcmp(token, "SyslogPort") == 0) { config->Syslog.Port = atoi(value); } /* Journal */ else if (strcmp(token, "JournalEnable") == 0) { config->Journal.Enable = atoi(value); } else if (strcmp(token, "JournalContextId") == 0) { config->Journal.ContextId = malloc(strlen(value) + 1); MALLOC_ASSERT(config->Journal.ContextId); strcpy(config->Journal.ContextId, value); /* strcpy unritical here, because size matches exactly the size to be copied */ } else if (strcmp(token, "JournalCurrentBoot") == 0) { config->Journal.CurrentBoot = atoi(value); } else if (strcmp(token, "JournalFollow") == 0) { config->Journal.Follow = atoi(value); } else if (strcmp(token, "JournalMapLogLevels") == 0) { config->Journal.MapLogLevels = atoi(value); } else if (strcmp(token, "JournalUseOriginalTimestamp") == 0) { config->Journal.UseOriginalTimestamp = atoi(value); } /* File transfer */ else if (strcmp(token, "FiletransferEnable") == 0) { config->Filetransfer.Enable = atoi(value); } else if (strcmp(token, "FiletransferContextId") == 0) { config->Filetransfer.ContextId = malloc(strlen(value) + 1); MALLOC_ASSERT(config->Filetransfer.ContextId); strcpy(config->Filetransfer.ContextId, value); /* strcpy unritical here, because size matches exactly the size to be copied */ } else if (strcmp(token, "FiletransferTimeStartup") == 0) { config->Filetransfer.TimeStartup = atoi(value); } else if (strcmp(token, "FiletransferTimeDelay") == 0) { config->Filetransfer.TimeDelay = atoi(value); } else if (strcmp(token, "FiletransferTimeoutBetweenLogs") == 0) { config->Filetransfer.TimeoutBetweenLogs = atoi(value); } else if (strcmp(token, "FiletransferTempDir") == 0) { config->Filetransfer.TempDir = malloc(strlen(value) + 1); MALLOC_ASSERT(config->Filetransfer.TempDir); strcpy(config->Filetransfer.TempDir, value); /* strcpy unritical here, because size matches exactly the size to be copied */ } else if (strcmp(token, "FiletransferDirectory") == 0) { config->Filetransfer.Directory[config->Filetransfer.Count] = malloc(strlen(value) + 1); MALLOC_ASSERT(config->Filetransfer.Directory[config->Filetransfer.Count]); strcpy(config->Filetransfer.Directory[config->Filetransfer.Count], value); /* strcpy unritical here, because size matches exactly the size to be copied */ } else if (strcmp(token, "FiletransferCompression") == 0) { config->Filetransfer.Compression[config->Filetransfer.Count] = atoi(value); } else if (strcmp(token, "FiletransferCompressionLevel") == 0) { config->Filetransfer.CompressionLevel[config->Filetransfer.Count] = atoi(value); if (config->Filetransfer.Count < (DLT_SYSTEM_LOG_DIRS_MAX - 1)) { config->Filetransfer.Count++; } else { fprintf(stderr, "Too many file transfer directories configured. Maximum: %d\n", DLT_SYSTEM_LOG_DIRS_MAX); ret = -1; break; } } /* Log files */ else if (strcmp(token, "LogFileEnable") == 0) { config->LogFile.Enable = atoi(value); } else if (strcmp(token, "LogFileFilename") == 0) { config->LogFile.Filename[config->LogFile.Count] = malloc(strlen(value) + 1); MALLOC_ASSERT(config->LogFile.Filename[config->LogFile.Count]); strcpy(config->LogFile.Filename[config->LogFile.Count], value); /* strcpy unritical here, because size matches exactly the size to be copied */ } else if (strcmp(token, "LogFileMode") == 0) { config->LogFile.Mode[config->LogFile.Count] = atoi(value); } else if (strcmp(token, "LogFileTimeDelay") == 0) { config->LogFile.TimeDelay[config->LogFile.Count] = atoi(value); } else if (strcmp(token, "LogFileContextId") == 0) { config->LogFile.ContextId[config->LogFile.Count] = malloc(strlen(value) + 1); MALLOC_ASSERT(config->LogFile.ContextId[config->LogFile.Count]); strcpy(config->LogFile.ContextId[config->LogFile.Count], value); /* strcpy unritical here, because size matches exactly the size to be copied */ if (config->LogFile.Count < (DLT_SYSTEM_LOG_FILE_MAX - 1)) { config->LogFile.Count++; } else { fprintf(stderr, "Too many log files configured. Maximum: %d\n", DLT_SYSTEM_LOG_FILE_MAX); ret = -1; break; } } /* Log Processes */ else if (strcmp(token, "LogProcessesEnable") == 0) { config->LogProcesses.Enable = atoi(value); } else if (strcmp(token, "LogProcessesContextId") == 0) { config->LogProcesses.ContextId = malloc(strlen(value) + 1); MALLOC_ASSERT(config->LogProcesses.ContextId); strcpy(config->LogProcesses.ContextId, value); /* strcpy unritical here, because size matches exactly the size to be copied */ } else if (strcmp(token, "LogProcessName") == 0) { config->LogProcesses.Name[config->LogProcesses.Count] = malloc(strlen(value) + 1); MALLOC_ASSERT(config->LogProcesses.Name[config->LogProcesses.Count]); strcpy(config->LogProcesses.Name[config->LogProcesses.Count], value); /* strcpy unritical here, because size matches exactly the size to be copied */ } else if (strcmp(token, "LogProcessFilename") == 0) { config->LogProcesses.Filename[config->LogProcesses.Count] = malloc(strlen(value) + 1); MALLOC_ASSERT(config->LogProcesses.Filename[config->LogProcesses.Count]); strcpy(config->LogProcesses.Filename[config->LogProcesses.Count], value); /* strcpy unritical here, because size matches exactly the size to be copied */ } else if (strcmp(token, "LogProcessMode") == 0) { config->LogProcesses.Mode[config->LogProcesses.Count] = atoi(value); } else if (strcmp(token, "LogProcessTimeDelay") == 0) { config->LogProcesses.TimeDelay[config->LogProcesses.Count] = atoi(value); if (config->LogProcesses.Count < (DLT_SYSTEM_LOG_PROCESSES_MAX - 1)) { config->LogProcesses.Count++; } else { fprintf(stderr, "Too many processes to log configured. Maximum: %d\n", DLT_SYSTEM_LOG_PROCESSES_MAX); ret = -1; break; } } } } fclose(file); free(value); free(token); free(line); return ret; } dlt-daemon-2.18.6/src/system/dlt-system-process-handling.c000066400000000000000000000153731377520261000234720ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Lassi Marttala * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-system-process-handling.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-systemprocess-handling.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Lassi Marttala ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #include "dlt.h" #include "dlt-system.h" #include #include #include #include #include #include #include volatile DltSystemThreads threads; DLT_IMPORT_CONTEXT(dltsystem) int daemonize() { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-process-handling, daemonize")); /* Fork new process */ int f = fork(); if (f < 0) return f; if (f > 0) exit(0); /* Create a new process group */ if (setsid() < 0) return -1; /** * Close all file descriptors and point * stdin, stdout and stderr to /dev/null */ int i; for (i = getdtablesize(); i >= 0; i--) close(i); int fd = open("/dev/null", O_RDWR); if (fd < 0) return -1; if ((dup(fd) < 0) || (dup(fd) < 0)) { close(fd); return -1; } /** * Ignore signals related to child processes and * terminal handling. */ signal(SIGCHLD, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); /*no close(fd); - we just intentionally pointed stdx to null! tbd: set ignore for coverity */ return 0; } void start_threads(DltSystemConfiguration *config) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-process-handling, start threads")); int i; threads.count = 0; threads.shutdown = 0; for (i = 0; i < MAX_THREADS; i++) threads.threads[i] = 0; #if defined(DLT_SYSTEMD_WATCHDOG_ENABLE) start_thread(config, watchdog_thread, "systemd watchdog"); #endif if (config->Shell.Enable) init_shell(); if (config->LogFile.Enable) start_thread(config, logfile_thread, "log file"); #if defined(DLT_FILETRANSFER_ENABLE) if (config->Filetransfer.Enable) start_thread(config, filetransfer_thread, "file transfer"); #endif if (config->LogProcesses.Enable) start_thread(config, logprocess_thread, "log process"); if (config->Syslog.Enable) start_thread(config, syslog_thread, "syslog"); #if defined(DLT_SYSTEMD_JOURNAL_ENABLE) if (config->Journal.Enable) start_thread(config, journal_thread, "systemd journal"); #endif } /** * Start a thread and add it to the thread pool. */ void start_thread(DltSystemConfiguration *conf, void (thread)(void *), const char *name) { if (threads.count == MAX_THREADS) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("Could not create thread for "), DLT_STRING(name), DLT_STRING("Out of thread slots.\n")); return; } DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("Creating thread for "), DLT_STRING(name), DLT_STRING("\n")); pthread_t pt; if (pthread_create(&pt, NULL, (void *)thread, conf) == 0) threads.threads[threads.count++] = pt; else DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("Could not create thread for "), DLT_STRING(name), DLT_STRING("\n")); } /** * Wait for threads to exit. * There's not actually a condition currently * to bail out of file transfer without a signal. */ void join_threads() { int i; DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-process-handling, waiting for threads to exit.")); if (threads.count < 1) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-process-handling, no threads, waiting for signal.")); sleep(UINT_MAX); } else { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-process-handling, thread count: "), DLT_INT(threads.count)); for (i = 0; i < threads.count; i++) { pthread_join(threads.threads[i], NULL); DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-process-handling, thread exit: "), DLT_INT(threads.threads[i])); } } } void dlt_system_signal_handler(int sig) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-process-handling, signal handler")); switch (sig) { case SIGHUP: case SIGTERM: case SIGINT: case SIGQUIT: DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-process-handling, exit, signal: "), DLT_INT(sig)); exit(0); break; default: DLT_LOG(dltsystem, DLT_LOG_WARN, DLT_STRING("dlt-system-process-handling, unknown signal!")); break; } } dlt-daemon-2.18.6/src/system/dlt-system-processes.c000066400000000000000000000132401377520261000222270ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Lassi Marttala * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-system-processes.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-system-processes.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Lassi Marttala ** ** Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #include #include #include #include #include #include #include #include #include "dlt-system.h" /* Modes of sending */ #define SEND_MODE_OFF 0 #define SEND_MODE_ONCE 1 #define SEND_MODE_ON 2 extern DltSystemThreads threads; DLT_IMPORT_CONTEXT(dltsystem) DLT_DECLARE_CONTEXT(procContext) void send_process(LogProcessOptions const *popts, int n) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-processes, send process info.")); FILE *pFile; struct dirent *dp; char filename[PATH_MAX]; char buffer[1024]; int bytes; int found = 0; /* go through all process files in directory */ DIR *dir = opendir("/proc"); if (dir != NULL) { while ((dp = readdir(dir)) != NULL) if (isdigit(dp->d_name[0])) { buffer[0] = 0; snprintf(filename, PATH_MAX, "/proc/%s/cmdline", dp->d_name); pFile = fopen(filename, "r"); if (pFile != NULL) { bytes = fread(buffer, 1, sizeof(buffer) - 1, pFile); fclose(pFile); } if ((strcmp((*popts).Name[n], "*") == 0) || (strcmp(buffer, (*popts).Name[n]) == 0)) { found = 1; snprintf(filename, PATH_MAX, "/proc/%s/%s", dp->d_name, (*popts).Filename[n]); pFile = fopen(filename, "r"); if (pFile != NULL) { bytes = fread(buffer, 1, sizeof(buffer) - 1, pFile); fclose(pFile); if (bytes > 0) { buffer[bytes] = 0; DLT_LOG(procContext, DLT_LOG_INFO, DLT_INT(atoi(dp->d_name)), DLT_STRING((*popts).Filename[n]), DLT_STRING(buffer)); } } if (strcmp((*popts).Name[n], "*") != 0) break; } } closedir(dir); } else { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-processes, failed to open /proc.")); } if (!found) DLT_LOG(procContext, DLT_LOG_INFO, DLT_STRING("Process"), DLT_STRING((*popts).Name[n]), DLT_STRING("not running!")); } void logprocess_thread(void *v_conf) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-processes, in thread.")); DltSystemConfiguration *conf = (DltSystemConfiguration *)v_conf; DLT_REGISTER_CONTEXT(procContext, conf->LogProcesses.ContextId, "Log Processes"); int process_delays[DLT_SYSTEM_LOG_PROCESSES_MAX]; int i; for (i = 0; i < conf->LogProcesses.Count; i++) process_delays[i] = conf->LogProcesses.TimeDelay[i]; while (!threads.shutdown) { sleep(1); for (i = 0; i < conf->LogProcesses.Count; i++) { if (conf->LogProcesses.Mode[i] == SEND_MODE_OFF) continue; if (process_delays[i] <= 0) { send_process(&(conf->LogProcesses), i); process_delays[i] = conf->LogProcesses.TimeDelay[i]; if (conf->LogProcesses.Mode[i] == SEND_MODE_ONCE) conf->LogProcesses.Mode[i] = SEND_MODE_OFF; } else { process_delays[i]--; } } } } dlt-daemon-2.18.6/src/system/dlt-system-shell.c000066400000000000000000000115111377520261000213270ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Lassi Marttala * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-system-shell.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-system-shell.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Lassi Marttala ** ** Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** lm Lassi Marttala BMW ** *******************************************************************************/ #include "dlt.h" #include "dlt-system.h" #include #include #define DLT_SHELL_COMMAND_MAX_LENGTH 1024 DLT_IMPORT_CONTEXT(dltsystem) DLT_DECLARE_CONTEXT(shellContext) int dlt_shell_injection_callback(uint32_t service_id, void *data, uint32_t length) { (void)length; DLT_LOG(shellContext, DLT_LOG_DEBUG, DLT_STRING("dlt-system-shell, injection callback")); char text[DLT_SHELL_COMMAND_MAX_LENGTH]; int syserr = 0; if (length <= DLT_SHELL_COMMAND_MAX_LENGTH - 1) { strncpy(text, data, length); text[length] = 0; } else { strncpy(text, data, DLT_SHELL_COMMAND_MAX_LENGTH - 1); text[DLT_SHELL_COMMAND_MAX_LENGTH - 1] = 0; } DLT_LOG(shellContext, DLT_LOG_DEBUG, DLT_STRING("dlt-system-shell, injection injection id:"), DLT_UINT32(service_id)); DLT_LOG(shellContext, DLT_LOG_DEBUG, DLT_STRING("dlt-system-shell, injection data:"), DLT_STRING(text)); switch (service_id) { case 0x1001: if ((syserr = system(text)) != 0) DLT_LOG(shellContext, DLT_LOG_ERROR, DLT_STRING("dlt-system-shell, abnormal exit status."), DLT_STRING(text), DLT_INT(syserr)); else DLT_LOG(shellContext, DLT_LOG_INFO, DLT_STRING("Shell command executed:"), DLT_STRING(text)); break; default: DLT_LOG(shellContext, DLT_LOG_ERROR, DLT_STRING("dlt-system-shell, unknown command received."), DLT_UINT32(service_id), DLT_STRING(text)); break; } return 0; } void init_shell() { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-shell, register callback")); DLT_REGISTER_CONTEXT(shellContext, "CMD", "Execute Shell commands"); DLT_REGISTER_INJECTION_CALLBACK(shellContext, 0x1001, dlt_shell_injection_callback); } dlt-daemon-2.18.6/src/system/dlt-system-syslog.c000066400000000000000000000114741377520261000215500ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Lassi Marttala * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-system-syslog.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-system-syslog.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Lassi Marttala ** ** Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #include #include #include #include #include #include #include "dlt-system.h" extern DltSystemThreads threads; DLT_IMPORT_CONTEXT(dltsystem) DLT_DECLARE_CONTEXT(syslogContext) #define RECV_BUF_SZ 1024 int init_socket(SyslogOptions opts) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-syslog, init socket, port: "), DLT_INT(opts.Port)); int sock = -1; struct sockaddr_in syslog_addr; #ifdef DLT_USE_IPv6 sock = socket(AF_INET6, SOCK_DGRAM, 0); #else sock = socket(AF_INET, SOCK_DGRAM, 0); #endif if (sock < 0) { DLT_LOG(syslogContext, DLT_LOG_FATAL, DLT_STRING("Unable to create socket for SYSLOG.")); return -1; } #ifdef DLT_USE_IPv6 syslog_addr.sin_family = AF_INET6; #else syslog_addr.sin_family = AF_INET; #endif syslog_addr.sin_port = htons(opts.Port); syslog_addr.sin_addr.s_addr = INADDR_ANY; memset(&(syslog_addr.sin_zero), 0, 8); if (bind(sock, (struct sockaddr *)&syslog_addr, sizeof(struct sockaddr)) == -1) { DLT_LOG(syslogContext, DLT_LOG_FATAL, DLT_STRING("Unable to bind socket for SYSLOG.")); close(sock); return -1; } return sock; } int read_socket(int sock) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-syslog, read socket")); char recv_data[RECV_BUF_SZ]; struct sockaddr_in client_addr; socklen_t addr_len = sizeof(struct sockaddr_in); int bytes_read = recvfrom(sock, recv_data, RECV_BUF_SZ, 0, (struct sockaddr *)&client_addr, &addr_len); if (bytes_read == -1) { if (errno == EINTR) { return 0; } else { DLT_LOG(syslogContext, DLT_LOG_FATAL, DLT_STRING("Read from socket failed in SYSLOG.")); return -1; } } recv_data[bytes_read] = '\0'; if (bytes_read != 0) DLT_LOG(syslogContext, DLT_LOG_INFO, DLT_STRING(recv_data)); return bytes_read; } void syslog_thread(void *v_conf) { DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-syslog, in thread.")); DltSystemConfiguration *conf = (DltSystemConfiguration *)v_conf; DLT_REGISTER_CONTEXT(syslogContext, conf->Syslog.ContextId, "SYSLOG Adapter"); int sock = init_socket(conf->Syslog); if (sock < 0) return; while (!threads.shutdown) if (read_socket(sock) < 0) { close(sock); return; } close (sock); } dlt-daemon-2.18.6/src/system/dlt-system-watchdog.c000066400000000000000000000111211377520261000220150ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Lassi Marttala * Alexander Wenzel * Markus Klein * Mikko Rapeli * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-system-watchdog.c */ #if defined(DLT_SYSTEMD_WATCHDOG_ENABLE) #include #include #include #include #include "dlt.h" #include "dlt-system.h" #include "sd-daemon.h" DLT_DECLARE_CONTEXT(watchdogContext) DLT_IMPORT_CONTEXT(dltsystem) extern DltSystemThreads threads; typedef struct { int timer_fd; unsigned long long wakeups_missed; } PeriodicData; void wait_period (PeriodicData *info) { unsigned long long missed; if (read (info->timer_fd, &missed, sizeof (missed)) < 0) DLT_LOG(watchdogContext, DLT_LOG_ERROR, DLT_STRING("Could not read from timer file descriptor in watchdog.\n")); if (missed > 0) info->wakeups_missed += (missed - 1); } int make_periodic(unsigned int period, PeriodicData *info) { unsigned int ns; unsigned int sec; int fd; struct itimerspec itval; if (info == 0) { DLT_LOG(watchdogContext, DLT_LOG_ERROR, DLT_STRING("Invalid function parameters used for function make_periodic.\n")); return -1; } /* Create the timer */ fd = timerfd_create (CLOCK_MONOTONIC, 0); info->wakeups_missed = 0; info->timer_fd = fd; if (fd == -1) { DLT_LOG(watchdogContext, DLT_LOG_ERROR, DLT_STRING("Can't create timer filedescriptor.\n")); return -1; } /* Make the timer periodic */ sec = period / 1000000; ns = (period - (sec * 1000000)) * 1000; itval.it_interval.tv_sec = sec; itval.it_interval.tv_nsec = ns; itval.it_value.tv_sec = sec; itval.it_value.tv_nsec = ns; return timerfd_settime (fd, 0, &itval, NULL); } void watchdog_thread(void *v_conf) { char str[512]; char *watchdogUSec; unsigned int watchdogTimeoutSeconds; unsigned int notifiyPeriodNSec; PeriodicData info; DLT_REGISTER_CONTEXT(watchdogContext, "DOG", "dlt system watchdog context."); sleep(1); DLT_LOG(watchdogContext, DLT_LOG_INFO, DLT_STRING("Watchdog thread started.\n")); if (v_conf == 0) { DLT_LOG(watchdogContext, DLT_LOG_ERROR, DLT_STRING("Invalid function parameters used for function watchdog_thread.\n")); return; } watchdogUSec = getenv("WATCHDOG_USEC"); if (watchdogUSec) { DLT_LOG(watchdogContext, DLT_LOG_DEBUG, DLT_STRING("watchdogusec: "), DLT_STRING(watchdogUSec)); watchdogTimeoutSeconds = atoi(watchdogUSec); if (watchdogTimeoutSeconds > 0) { /* Calculate half of WATCHDOG_USEC in ns for timer tick */ notifiyPeriodNSec = watchdogTimeoutSeconds / 2; snprintf(str, 512, "systemd watchdog timeout: %u nsec - timer will be initialized: %u nsec\n", watchdogTimeoutSeconds, notifiyPeriodNSec); DLT_LOG(watchdogContext, DLT_LOG_DEBUG, DLT_STRING(str)); if (make_periodic (notifiyPeriodNSec, &info) < 0) { DLT_LOG(watchdogContext, DLT_LOG_ERROR, DLT_STRING("Could not initialize systemd watchdog timer\n")); return; } while (1) { if (sd_notify(0, "WATCHDOG=1") < 0) DLT_LOG(watchdogContext, DLT_LOG_ERROR, DLT_STRING("Could not reset systemd watchdog\n")); DLT_LOG(watchdogContext, DLT_LOG_DEBUG, DLT_STRING("systemd watchdog waited periodic\n")); /* Wait for next period */ wait_period(&info); } } else { snprintf(str, 512, "systemd watchdog timeout incorrect: %u\n", watchdogTimeoutSeconds); DLT_LOG(watchdogContext, DLT_LOG_DEBUG, DLT_STRING(str)); } } else { DLT_LOG(watchdogContext, DLT_LOG_ERROR, DLT_STRING("systemd watchdog timeout (WATCHDOG_USEC) is null\n")); } } #endif dlt-daemon-2.18.6/src/system/dlt-system.c000066400000000000000000000104701377520261000202250ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Lassi Marttala * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-system.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-system.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Lassi Marttala ** ** Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #include "dlt-system.h" #include #include #include #include #if defined(DLT_SYSTEMD_WATCHDOG_ENABLE) || defined(DLT_SYSTEMD_ENABLE) # include "sd-daemon.h" #endif DLT_DECLARE_CONTEXT(dltsystem) int main(int argc, char *argv[]) { DltSystemCliOptions options; DltSystemConfiguration config; #if defined(DLT_SYSTEMD_WATCHDOG_ENABLE) || defined(DLT_SYSTEMD_ENABLE) int ret; #endif if (read_command_line(&options, argc, argv) < 0) { fprintf(stderr, "Failed to read command line!\n"); return -1; } if (read_configuration_file(&config, options.ConfigurationFileName) < 0) { fprintf(stderr, "Failed to read configuration file!\n"); return -1; } DLT_REGISTER_APP(config.ApplicationId, "DLT System Manager"); DLT_REGISTER_CONTEXT(dltsystem, "MGR", "Context of main dlt system manager"); #if defined(DLT_SYSTEMD_WATCHDOG_ENABLE) || defined(DLT_SYSTEMD_ENABLE) ret = sd_booted(); if (ret == 0) { DLT_LOG(dltsystem, DLT_LOG_INFO, DLT_STRING("system not booted with systemd!\n")); } else if (ret < 0) { DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("sd_booted failed!\n")); return -1; } else { DLT_LOG(dltsystem, DLT_LOG_INFO, DLT_STRING("system booted with systemd\n")); } #endif DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("Configuration loaded.")); if (options.Daemonize > 0) { if (daemonize() < 0) { DLT_LOG(dltsystem, DLT_LOG_FATAL, DLT_STRING("Daemonization failed!")); return -1; } DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system daemonized.")); } DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("Setting signal handlers for abnormal exit")); signal(SIGTERM, dlt_system_signal_handler); signal(SIGHUP, dlt_system_signal_handler); signal(SIGQUIT, dlt_system_signal_handler); signal(SIGINT, dlt_system_signal_handler); DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("Launching threads.")); start_threads(&config); join_threads(); return 0; } dlt-daemon-2.18.6/src/system/dlt-system.conf000066400000000000000000000146311377520261000207330ustar00rootroot00000000000000# Configuration file of DLT system manager # ######################################################################## # General configuration ######################################################################## # The application Id used for the System manager (Default: SYS) ApplicationId = SYS ######################################################################## # Shell configuration ######################################################################## # Be careful when you enable this feature. The user can send any kind of # shell commands. The commands are executed with the rights of the # dlt-system process. Dlt-system is started by default as user genivi. # Enable the Shell for command line injections (Default: 0) ShellEnable = 0 ######################################################################## # Syslog Adapter configuration ######################################################################## # Enable the Syslog Adapter (Default: 0) # Enable only when systemd is already running in your system otherwise # logs will not come to Client (e.g. dlt_viewer). SyslogEnable = 0 # The Context Id of the syslog adapter (Default: SYSL) SyslogContextId = SYSL # The UDP port opened by DLT system mamager to receive system logs (Default: 47111) SyslogPort = 47111 ######################################################################## # Systemd Journal Adapter configuration ######################################################################## # This feature is only available, when dlt is compiled with # the option "WITH_SYSTEMD_JOURNAL" # Dlt-system is started by default as user genivi, see dlt-system.service file. # The user genivi must be added to one of the groups 'adm', 'wheel' or # 'systemd-journal' to have access to all journal entries. # Enable Systemd Journal Adapter only when your system doesn't have systemd. # Don't enable both (SyslogEnable = 1 and JournalEnable = 1) together because # it causes bind error (can see on connected client). # Enable the Systemd Journal Adapter (Default: 0) JournalEnable = 0 # The Context Id of the journal adapter (Default: JOUR) JournalContextId = JOUR # Show only log entries of current boot and follow (Default: 1) # if not JournalCurrentBoot and not JournalFollow is set all # persistent journal entries will be logged JournalCurrentBoot = 1 # Show only the last 10 entries and follow (Default: 0) JournalFollow = 0 # Map the log levels (Default: 1) # Mapping journal log levels to DLT log levels # 0 Emergency DLT_LOG_FATAL # 1 Alert DLT_LOG_FATAL # 2 Critical DLT_LOG_FATAL # 3 Error DLT_LOG_ERROR # 4 Warning DLT_LOG_WARN # 5 Notice DLT_LOG_INFO # 6 Informational DLT_LOG_INFO # 7 Debug DLT_LOG_DEBUG JournalMapLogLevels = 1 # Use the original timestamp (uptime when the event actually occured) as DLT timestamp (Default: 1) JournalUseOriginalTimestamp = 1 ######################################################################## # Filetransfer Manager ######################################################################## # Enable the Filetransfer (Default: 0) FiletransferEnable = 0 # The Context Id of the filetransfer (Default: FILE) FiletransferContextId = FILE # Time in seconds after startup of dlt-system when first file is transfered (Default: 0) FiletransferTimeStartup = 0 # Time to wait when transfered file is deleted and next file transfer starts (Default: 10) # Time in seconds FiletransferTimeDelay = 10 # Time in ms seconds to wait between two file transfer logs of a single file to DLT. (Default: 10) FiletransferTimeoutBetweenLogs = 5 # You can define multiple file transfer directories # Define the directory to watch, whether to compress # the file with zlib and the zlib compression level # For parsing purposes, FiletransferCompressionLevel # must be the last one of three values. # For compressing and sending following subdirectories are used: .tocompress and .tosend FiletransferDirectory = /var/dlt/ft1 FiletransferCompression = 1 FiletransferCompressionLevel = 5 # Second directory to watch FiletransferDirectory = /var/dlt/ft2 FiletransferCompression = 0 FiletransferCompressionLevel = 5 # And so on... FiletransferDirectory = /var/dlt/ft3 FiletransferCompression = 0 FiletransferCompressionLevel = 5 ######################################################################## # Log short files, especially from proc filesystem ######################################################################## # Enable the logging of files (Default: 0) LogFileEnable = 0 # Log different files # Mode: 0 = off, 1 = startup only, 2 = regular # TimeDelay: If mode regular is set, time delay is the number of seconds for next sent # Log the file /etc/sysrel LogFileFilename = /etc/sysrel LogFileMode = 1 LogFileTimeDelay = 3 LogFileContextId = VER # Log the file /proc/version LogFileFilename = /proc/version LogFileMode = 1 LogFileTimeDelay = 3 LogFileContextId = VERK # Log the file /proc/meminfo # LogFileFilename = /proc/meminfo # LogFileMode = 2 # LogFileTimeDelay = 5 # LogFileContextId = MEM # Log the file /proc/cpuinfo # LogFileFilename = /proc/cpuinfo # LogFileMode = 2 # LogFileTimeDelay = 5 # LogFileContextId = CPU # Log the file /proc/stat LogFileFilename = /proc/stat LogFileMode = 2 LogFileTimeDelay = 1 LogFileContextId = STAT # Log the file /proc/modules # LogFileFilename = /proc/modules # LogFileMode = 2 # LogFileTimeDelay = 5 # LogFileContextId = MOD # Log the file /proc/ioports # LogFileFilename = /proc/ioports # LogFileMode = 1 # LogFileTimeDelay = 5 # LogFileContextId = IOP # Log the file /proc/iomem # LogFileFilename = /proc/iomem # LogFileMode = 1 # LogFileTimeDelay = 5 # LogFileContextId = IOM ######################################################################## # Log Processes ######################################################################## # Enable the logging of processes (Default: 0) LogProcessesEnable = 0 # The Context Id of the kernel version (Default: PROC) LogProcessesContextId = PROC # Log different processes # Name: * = all process, X=alternative name (must correspind to /proc/X/cmdline # Filename: the filename in the subdirectory /proc/processid/ # Mode: 0 = off, 1 = startup only, 2 = regular # TimeDelay: If mode regular is set, time delay is the number of seconds for next sent LogProcessName = * LogProcessFilename = stat LogProcessMode = 2 LogProcessTimeDelay = 5 # LogProcessName = dlt_viewer # LogProcessFilename = stat # LogProcessMode = 2 # LogProcessTimeDelay = 1 dlt-daemon-2.18.6/src/system/dlt-system.h000066400000000000000000000143041377520261000202320ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Lassi Marttala * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-system.h */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-system.h ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Lassi Marttala ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** lm Lassi Marttala BMW ** *******************************************************************************/ #ifndef DLT_SYSTEM_H_ #define DLT_SYSTEM_H_ /* DLT related includes. */ #include "dlt.h" #include "dlt_common.h" /* Constants */ #define DEFAULT_CONF_FILE (CONFIGURATION_FILES_DIR "/dlt-system.conf") #define DLT_SYSTEM_LOG_FILE_MAX 32 #define DLT_SYSTEM_LOG_DIRS_MAX 32 #define DLT_SYSTEM_LOG_PROCESSES_MAX 32 #define DLT_SYSTEM_MODE_OFF 0 #define DLT_SYSTEM_MODE_STARTUP 1 #define DLT_SYSTEM_MODE_REGULAR 2 #define MAX_LINE 1024 #define MAX_THREADS 8 /* Macros */ #define MALLOC_ASSERT(x) if (x == NULL) { \ fprintf(stderr, "Out of memory\n"); \ abort(); } /** * Configuration structures. * Please see dlt-system.conf for explanation of all the options. */ /* Command line options */ typedef struct { char *ConfigurationFileName; int Daemonize; } DltSystemCliOptions; /* Configuration shell options */ typedef struct { int Enable; } ShellOptions; /* Configuration syslog options */ typedef struct { int Enable; char *ContextId; int Port; } SyslogOptions; /* Configuration journal options */ typedef struct { int Enable; char *ContextId; int CurrentBoot; int Follow; int MapLogLevels; int UseOriginalTimestamp; } JournalOptions; typedef struct { int Enable; char *ContextId; int TimeStartup; int TimeDelay; int TimeoutBetweenLogs; char *TempDir; /* Variable number of file transfer dirs */ int Count; int Compression[DLT_SYSTEM_LOG_DIRS_MAX]; int CompressionLevel[DLT_SYSTEM_LOG_DIRS_MAX]; char *Directory[DLT_SYSTEM_LOG_DIRS_MAX]; } FiletransferOptions; typedef struct { int Enable; /* Variable number of files to transfer */ int Count; char *ContextId[DLT_SYSTEM_LOG_FILE_MAX]; char *Filename[DLT_SYSTEM_LOG_FILE_MAX]; int Mode[DLT_SYSTEM_LOG_FILE_MAX]; int TimeDelay[DLT_SYSTEM_LOG_FILE_MAX]; } LogFileOptions; typedef struct { int Enable; char *ContextId; /* Variable number of processes */ int Count; char *Name[DLT_SYSTEM_LOG_PROCESSES_MAX]; char *Filename[DLT_SYSTEM_LOG_PROCESSES_MAX]; int Mode[DLT_SYSTEM_LOG_PROCESSES_MAX]; int TimeDelay[DLT_SYSTEM_LOG_PROCESSES_MAX]; } LogProcessOptions; typedef struct { char *ApplicationId; ShellOptions Shell; SyslogOptions Syslog; JournalOptions Journal; FiletransferOptions Filetransfer; LogFileOptions LogFile; LogProcessOptions LogProcesses; } DltSystemConfiguration; typedef struct { pthread_t threads[MAX_THREADS]; int count; int shutdown; } DltSystemThreads; /** * Forward declarations for the whole application */ /* In dlt-system-options.c */ int read_command_line(DltSystemCliOptions *options, int argc, char *argv[]); int read_configuration_file(DltSystemConfiguration *config, char *file_name); /* In dlt-process-handling.c */ int daemonize(); void start_threads(DltSystemConfiguration *config); void start_thread(DltSystemConfiguration *conf, void (thread)(void *), const char *nam); void join_threads(); void dlt_system_signal_handler(int sig); void register_with_dlt(DltSystemConfiguration *config); /* Threads */ void init_shell(); void syslog_thread(void *v_conf); void filetransfer_thread(void *v_conf); void logfile_thread(void *v_conf); void logprocess_thread(void *v_conf); #if defined(DLT_SYSTEMD_WATCHDOG_ENABLE) void watchdog_thread(void *v_conf); #endif #if defined(DLT_SYSTEMD_JOURNAL_ENABLE) void journal_thread(void *v_conf); #endif #endif /* DLT_SYSTEM_H_ */ dlt-daemon-2.18.6/src/tests/000077500000000000000000000000001377520261000155705ustar00rootroot00000000000000dlt-daemon-2.18.6/src/tests/CMakeLists.txt000066400000000000000000000033041377520261000203300ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### set(dlt-test-multi-process_SRCS dlt-test-multi-process.c) set(dlt-test-multi-process-client_SRCS dlt-test-multi-process-client.c) set(dlt-test-user_SRCS dlt-test-user.c) set(dlt-test-client_SRCS dlt-test-client.c) set(dlt-test-stress-user_SRCS dlt-test-stress-user.c) set(dlt-test-stress-client_SRCS dlt-test-stress-client.c) set(dlt-test-stress_SRCS dlt-test-stress.c) set(dlt-test-filetransfer_SRCS dlt-test-filetransfer.c) set(dlt-test-fork-handler_SRCS dlt-test-fork-handler.c) set(dlt-test-init-free_SRCS dlt-test-init-free.c) set(dlt-test-non-verbose_SRCS dlt-test-non-verbose.c) foreach(target dlt-test-multi-process dlt-test-multi-process-client dlt-test-user dlt-test-client dlt-test-stress-user dlt-test-stress-client dlt-test-stress dlt-test-filetransfer dlt-test-fork-handler dlt-test-init-free dlt-test-non-verbose ) add_executable(${target} ${${target}_SRCS}) target_link_libraries(${target} dlt) set_target_properties(${target} PROPERTIES LINKER_LANGUAGE C) install(TARGETS ${target} RUNTIME DESTINATION bin COMPONENT base) endforeach() install(FILES dlt-test-filetransfer-file dlt-test-filetransfer-image.png DESTINATION share/dlt-filetransfer) dlt-daemon-2.18.6/src/tests/dlt-test-change-ll-through-env.sh000077500000000000000000000031161377520261000237640ustar00rootroot00000000000000#!/bin/bash # check if dlt-daemon is running daemon_running=`/usr/bin/ps -C dlt-daemon | wc -l` daemon_pid=0 if [ "$daemon_running" -lt "2" ]; then echo "No daemon running, starting one myself" /usr/bin/dlt-daemon > /tmp/dlt_daemon_dlt_receiver_test.txt & daemon_pid=$! echo "daemon pid: " ${daemon_pid} else echo "dlt-daemon already running" fi # create a directory in /tmp where all logs will be stored output_dir=`mktemp -d /tmp/DLT_TESTING_XXXXXX` echo "Using directory " ${output_dir} # start dlt-receive (in background) and store PID echo "Starting dlt-receive" /usr/bin/dlt-receive -o ${output_dir}/dlt_test.dlt localhost & dlt_receive_pid=$! disown # start dlt-example-user to create some logs # sleep time: 100ms # number of messages: 10 /usr/bin/dlt-example-user -d 100 -n 10 TEST_MESSAGE_ONE # stop dlt-receive kill ${dlt_receive_pid} # show content of /tmp echo "log-file after first run" ls -l ${output_dir} # start dlt-receive (in background) and store PID echo "Starting dlt-receive" /usr/bin/dlt-receive -o ${output_dir}/dlt_test_no_log.dlt localhost & dlt_receive_pid=$! disown # start dlt-example-user to create some logs, disable logging through environment variable DLT_INITIAL_LOG_LEVEL=::-1 /usr/bin/dlt-example-user -d 100 -n 10 TEST_MESSAGE_TWO # show content of /tmp, log should not contain log messages from dlt-example-user (TEST_MESSAGE_TWO) kill ${dlt_receive_pid} echo "log-file after second run" ls -l ${output_dir} # directory will not be cleaned up echo "Used directory " ${output_dir} if [ "${daemon_pid}" -ne "0" ]; then sleep 1 kill ${daemon_pid} fi dlt-daemon-2.18.6/src/tests/dlt-test-client.c000066400000000000000000003174431377520261000207640ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-client.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-test-client.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include /* for isprint() */ #include /* for atoi() */ #include /* for strcmp() */ #include /* for writev() */ #include "dlt_client.h" #include "dlt_protocol.h" #include "dlt_user.h" #define DLT_TESTCLIENT_TEXTBUFSIZE 10024 /* Size of buffer for text output */ #define DLT_TESTCLIENT_ECU_ID "ECU1" #define DLT_TESTCLIENT_NUM_TESTS 9 static int g_testsFailed = 0; DltClient g_dltclient; /* Function prototypes */ int dlt_testclient_message_callback(DltMessage *message, void *data); typedef struct { int aflag; int sflag; int xflag; int mflag; int vflag; int yflag; char *ovalue; char *fvalue; char *tvalue; char *evalue; int bvalue; char ecuid[4]; int ohandle; DltFile file; DltFilter filter; int running_test; int test_counter_macro[DLT_TESTCLIENT_NUM_TESTS]; int test_counter_function[DLT_TESTCLIENT_NUM_TESTS]; int tests_passed; int tests_failed; int sock; } DltTestclientData; /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-test-client [options] hostname/serial_device_name\n"); printf("Test against received data from dlt-test-user.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -a Print DLT messages; payload as ASCII\n"); printf(" -x Print DLT messages; payload as hex\n"); printf(" -m Print DLT messages; payload as hex and ASCII\n"); printf(" -s Print DLT messages; only headers\n"); printf(" -v Verbose mode\n"); printf(" -h Usage\n"); printf(" -y Serial device mode\n"); printf(" -b baudrate Serial device baudrate (Default: 115200)\n"); printf(" -e ecuid Set ECU ID (Default: ECU1)\n"); printf(" -o filename Output messages in new DLT file\n"); printf(" -f filename Enable filtering of messages\n"); } /** * Main function of tool. */ int main(int argc, char *argv[]) { DltTestclientData dltdata; int c, i; int index; /* Initialize dltdata */ dltdata.aflag = 0; dltdata.sflag = 0; dltdata.xflag = 0; dltdata.mflag = 0; dltdata.vflag = 0; dltdata.yflag = 0; dltdata.ovalue = 0; dltdata.fvalue = 0; dltdata.evalue = 0; dltdata.bvalue = 0; dltdata.ohandle = -1; dltdata.running_test = 0; for (i = 0; i < DLT_TESTCLIENT_NUM_TESTS; i++) { dltdata.test_counter_macro[i] = 0; dltdata.test_counter_function[i] = 0; } dltdata.tests_passed = 0; dltdata.tests_failed = 0; dltdata.sock = -1; /* Fetch command line arguments */ opterr = 0; while ((c = getopt (argc, argv, "vashyxmf:o:e:b:")) != -1) switch (c) { case 'v': { dltdata.vflag = 1; break; } case 'a': { dltdata.aflag = 1; break; } case 's': { dltdata.sflag = 1; break; } case 'x': { dltdata.xflag = 1; break; } case 'm': { dltdata.mflag = 1; break; } case 'h': { usage(); return -1; } case 'y': { dltdata.yflag = 1; break; } case 'f': { dltdata.fvalue = optarg; break; } case 'o': { dltdata.ovalue = optarg; break; } case 'e': { dltdata.evalue = optarg; break; } case 'b': { dltdata.bvalue = atoi(optarg); break; } case '?': { if ((optopt == 'o') || (optopt == 'f') || (optopt == 't')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { abort (); return -1;/*for parasoft */ } } /* Initialize DLT Client */ dlt_client_init(&g_dltclient, dltdata.vflag); /* Register callback to be called when message was received */ dlt_client_register_message_callback(dlt_testclient_message_callback); /* Setup DLT Client structure */ g_dltclient.mode = dltdata.yflag; if (g_dltclient.mode == 0) { for (index = optind; index < argc; index++) if (dlt_client_set_server_ip(&g_dltclient, argv[index]) == -1) { fprintf(stderr, "set server ip didn't succeed\n"); return -1; } if (g_dltclient.servIP == 0) { /* no hostname selected, show usage and terminate */ fprintf(stderr, "ERROR: No hostname selected\n"); usage(); dlt_client_cleanup(&g_dltclient, dltdata.vflag); return -1; } } else { for (index = optind; index < argc; index++) if (dlt_client_set_serial_device(&g_dltclient, argv[index]) == -1) { fprintf(stderr, "set serial device didn't succeed\n"); return -1; } if (g_dltclient.serialDevice == 0) { /* no serial device name selected, show usage and terminate */ fprintf(stderr, "ERROR: No serial device name specified\n"); usage(); return -1; } dlt_client_setbaudrate(&g_dltclient, dltdata.bvalue); } /* initialise structure to use DLT file */ dlt_file_init(&(dltdata.file), dltdata.vflag); /* first parse filter file if filter parameter is used */ dlt_filter_init(&(dltdata.filter), dltdata.vflag); if (dltdata.fvalue) { if (dlt_filter_load(&(dltdata.filter), dltdata.fvalue, dltdata.vflag) < DLT_RETURN_OK) { dlt_file_free(&(dltdata.file), dltdata.vflag); return -1; } dlt_file_set_filter(&(dltdata.file), &(dltdata.filter), dltdata.vflag); } /* open DLT output file */ if (dltdata.ovalue) { dltdata.ohandle = open(dltdata.ovalue, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* mode: wb */ if (dltdata.ohandle == -1) { dlt_file_free(&(dltdata.file), dltdata.vflag); fprintf(stderr, "ERROR: Output file %s cannot be opened!\n", dltdata.ovalue); return -1; } } if (dltdata.evalue) dlt_set_id(dltdata.ecuid, dltdata.evalue); else dlt_set_id(dltdata.ecuid, DLT_TESTCLIENT_ECU_ID); /* Connect to TCP socket or open serial device */ if (dlt_client_connect(&g_dltclient, dltdata.vflag) != DLT_RETURN_ERROR) { dltdata.sock = g_dltclient.sock; /* Dlt Client Main Loop */ dlt_client_main_loop(&g_dltclient, &dltdata, dltdata.vflag); /* Dlt Client Cleanup */ dlt_client_cleanup(&g_dltclient, dltdata.vflag); } /* dlt-receive cleanup */ if (dltdata.ovalue) close(dltdata.ohandle); dlt_file_free(&(dltdata.file), dltdata.vflag); dlt_filter_free(&(dltdata.filter), dltdata.vflag); return g_testsFailed == 0 ? 0 : 1; } int dlt_testclient_message_callback(DltMessage *message, void *data) { static char text[DLT_TESTCLIENT_TEXTBUFSIZE]; int mtin; DltTestclientData *dltdata; uint32_t type_info, type_info_tmp; int16_t length, length_tmp; /* the macro can set this variable to -1 */ uint32_t length_tmp32 = 0; uint8_t *ptr; int32_t datalength; uint32_t id, id_tmp; int slen; int tc_old; struct iovec iov[2]; int bytes_written; if ((message == 0) || (data == 0)) return -1; dltdata = (DltTestclientData *)data; /* prepare storage header */ if (DLT_IS_HTYP_WEID(message->standardheader->htyp)) dlt_set_storageheader(message->storageheader, message->headerextra.ecu); else dlt_set_storageheader(message->storageheader, dltdata->ecuid); if ((dltdata->fvalue == 0) || (dltdata->fvalue && (dlt_message_filter_check(message, &(dltdata->filter), dltdata->vflag) == DLT_RETURN_TRUE))) { dlt_message_header(message, text, sizeof(text), dltdata->vflag); if (dltdata->aflag) printf("%s ", text); dlt_message_payload(message, text, sizeof(text), DLT_OUTPUT_ASCII, dltdata->vflag); if (dltdata->aflag) printf("[%s]\n", text); if (strcmp(text, "Tests starting") == 0) printf("Tests starting\n"); /* check test 1m */ if (strcmp(text, "Test1: (Macro IF) Test all log levels") == 0) { printf("Test1m: (Macro IF) Test all log levels\n"); dltdata->running_test = 1; dltdata->test_counter_macro[0] = 0; } else if (strcmp(text, "Test1: (Macro IF) finished") == 0) { /* >=4, as "info" is default log level */ if (dltdata->test_counter_macro[0] >= 4) { printf("Test1m PASSED\n"); dltdata->tests_passed++; } else { printf("Test1m FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 1) { if (DLT_IS_HTYP_UEH(message->standardheader->htyp)) { if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_LOG) { mtin = DLT_GET_MSIN_MTIN(message->extendedheader->msin); if (mtin == DLT_LOG_FATAL) dltdata->test_counter_macro[0]++; if (mtin == DLT_LOG_ERROR) dltdata->test_counter_macro[0]++; if (mtin == DLT_LOG_WARN) dltdata->test_counter_macro[0]++; if (mtin == DLT_LOG_INFO) dltdata->test_counter_macro[0]++; if (mtin == DLT_LOG_DEBUG) dltdata->test_counter_macro[0]++; if (mtin == DLT_LOG_VERBOSE) dltdata->test_counter_macro[0]++; } } } /* check test 2m */ if (strcmp(text, "Test2: (Macro IF) Test all variable types (verbose)") == 0) { printf("Test2m: (Macro IF) Test all variable types (verbose)\n"); dltdata->running_test = 2; dltdata->test_counter_macro[1] = 0; } else if (strcmp(text, "Test2: (Macro IF) finished") == 0) { if (dltdata->test_counter_macro[1] == 16) { printf("Test2m PASSED\n"); dltdata->tests_passed++; } else { printf("Test2m FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 2) { /* Verbose */ if (!(DLT_MSG_IS_NONVERBOSE(message))) { type_info = 0; type_info_tmp = 0; length = 0; /* the macro can set this variable to -1 */ length_tmp = 0; ptr = message->databuffer; datalength = (int32_t) message->datasize; /* Log message */ if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_LOG) { if (message->extendedheader->noar >= 2) { /* get type of first argument: must be string */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { /* skip string */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if (length >= 0) { ptr += length; datalength -= length; /* read type of second argument: must be raw */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if ((type_info & DLT_TYPE_INFO_STRG) && ((type_info & DLT_TYPE_INFO_SCOD) == DLT_SCOD_ASCII)) { if (datalength == (sizeof(uint16_t) + strlen("Hello world") + 1)) dltdata->test_counter_macro[1]++; } else if ((type_info & DLT_TYPE_INFO_STRG) && ((type_info & DLT_TYPE_INFO_SCOD) == DLT_SCOD_UTF8)) { if (datalength == (sizeof(uint16_t) + strlen("Hello world") + 1)) dltdata->test_counter_macro[1]++; } else if (type_info & DLT_TYPE_INFO_BOOL) { if (datalength == sizeof(uint8_t)) dltdata->test_counter_macro[1]++; } else if (type_info & DLT_TYPE_INFO_SINT) { switch (type_info & DLT_TYPE_INFO_TYLE) { case DLT_TYLE_8BIT: { if (datalength == sizeof(int8_t)) dltdata->test_counter_macro[1]++; break; } case DLT_TYLE_16BIT: { if (datalength == sizeof(int16_t)) dltdata->test_counter_macro[1]++; break; } case DLT_TYLE_32BIT: { if (datalength == sizeof(int32_t)) dltdata->test_counter_macro[1]++; break; } case DLT_TYLE_64BIT: { if (datalength == sizeof(int64_t)) dltdata->test_counter_macro[1]++; break; } case DLT_TYLE_128BIT: { /* Not tested here */ break; } } } else if (type_info & DLT_TYPE_INFO_UINT) { switch (type_info & DLT_TYPE_INFO_TYLE) { case DLT_TYLE_8BIT: { if (datalength == sizeof(uint8_t)) dltdata->test_counter_macro[1]++; break; } case DLT_TYLE_16BIT: { if (datalength == sizeof(uint16_t)) dltdata->test_counter_macro[1]++; break; } case DLT_TYLE_32BIT: { if (datalength == sizeof(uint32_t)) dltdata->test_counter_macro[1]++; break; } case DLT_TYLE_64BIT: { if (datalength == sizeof(uint64_t)) dltdata->test_counter_macro[1]++; break; } case DLT_TYLE_128BIT: { /* Not tested here */ break; } } } else if (type_info & DLT_TYPE_INFO_FLOA) { switch (type_info & DLT_TYPE_INFO_TYLE) { case DLT_TYLE_8BIT: { /* Not tested here */ break; } case DLT_TYLE_16BIT: { /* Not tested here */ break; } case DLT_TYLE_32BIT: { if (datalength == (2 * sizeof(float) + sizeof(uint32_t))) dltdata->test_counter_macro[1]++; break; } case DLT_TYLE_64BIT: { if (datalength == (2 * sizeof(double) + sizeof(uint32_t))) dltdata->test_counter_macro[1]++; break; } case DLT_TYLE_128BIT: /* Not tested here */ break; } } else if (type_info & DLT_TYPE_INFO_RAWD) { /* Get length */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if ((length == datalength) && (10 == length)) dltdata->test_counter_macro[1]++; } } } } } } } /* check test 3m */ if (strcmp(text, "Test3: (Macro IF) Test all variable types (non-verbose)") == 0) { printf("Test3m: (Macro IF) Test all variable types (non-verbose)\n"); dltdata->running_test = 3; dltdata->test_counter_macro[2] = 0; } else if (strcmp(text, "Test3: (Macro IF) finished") == 0) { if (dltdata->test_counter_macro[2] == 16) { printf("Test3m PASSED\n"); dltdata->tests_passed++; } else { printf("Test3m FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 3) { /* Nonverbose */ if (DLT_MSG_IS_NONVERBOSE(message)) { id = 0; id_tmp = 0; ptr = message->databuffer; datalength = (int32_t) message->datasize; slen = -1; tc_old = dltdata->test_counter_macro[2]; /* Get message id */ DLT_MSG_READ_VALUE(id_tmp, ptr, datalength, uint32_t); id = DLT_ENDIAN_GET_32(message->standardheader->htyp, id_tmp); /* Length of string */ datalength -= (int32_t) sizeof(uint16_t); ptr += sizeof(uint16_t); switch (id) { case 1: { slen = strlen("string") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint16_t) + strlen("Hello world") + 1) dltdata->test_counter_macro[2]++; break; } case 2: { slen = strlen("utf8") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint16_t) + strlen("Hello world") + 1) dltdata->test_counter_macro[2]++; break; } case 3: { slen = strlen("bool") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint8_t)) dltdata->test_counter_macro[2]++; break; } case 4: { slen = strlen("int") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(int)) dltdata->test_counter_macro[2]++; break; } case 5: { slen = strlen("int8") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(int8_t)) dltdata->test_counter_macro[2]++; break; } case 6: { slen = strlen("int16") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(int16_t)) dltdata->test_counter_macro[2]++; break; } case 7: { slen = strlen("int32") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(int32_t)) dltdata->test_counter_macro[2]++; break; } case 8: { slen = strlen("int64") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(int64_t)) dltdata->test_counter_macro[2]++; break; } case 9: { slen = strlen("uint") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(unsigned int)) dltdata->test_counter_macro[2]++; break; } case 10: { slen = strlen("uint8") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint8_t)) dltdata->test_counter_macro[2]++; break; } case 11: { slen = strlen("uint16") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint16_t)) dltdata->test_counter_macro[2]++; break; } case 12: { slen = strlen("uint32") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint32_t)) dltdata->test_counter_macro[2]++; break; } case 13: { slen = strlen("uint64") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint64_t)) dltdata->test_counter_macro[2]++; break; } case 14: { slen = strlen("float32") + 1; datalength -= slen; ptr += slen; /* 2*, as the min and the max is transfered */ if (datalength == 2 * sizeof(float)) dltdata->test_counter_macro[2]++; break; } case 15: { slen = strlen("float64") + 1; datalength -= slen; ptr += slen; /* 2*, as the min and the max is transfered */ if (datalength == 2 * sizeof(double)) dltdata->test_counter_macro[2]++; break; } case 16: { slen = strlen("raw") + 1; datalength -= slen; ptr += slen; datalength -= (int32_t) sizeof(uint16_t); ptr += sizeof(uint16_t); if (datalength == 10) dltdata->test_counter_macro[2]++; break; } } if ((slen >= 0) && (tc_old == dltdata->test_counter_macro[2])) printf("ID=%d, Datalength=%d => Failed!", id, datalength); } } /* check test 4m */ if (strcmp(text, "Test4: (Macro IF) Test different message sizes") == 0) { printf("Test4m: (Macro IF) Test different message sizes\n"); dltdata->running_test = 4; dltdata->test_counter_macro[3] = 0; } else if (strcmp(text, "Test4: (Macro IF) finished") == 0) { if (dltdata->test_counter_macro[3] == 4) { printf("Test4m PASSED\n"); dltdata->tests_passed++; } else { printf("Test4m FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 4) { /* Extended header */ if (DLT_IS_HTYP_UEH(message->standardheader->htyp)) { /* Log message */ if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_LOG) { /* Verbose */ if (DLT_IS_MSIN_VERB(message->extendedheader->msin)) { /* 2 arguments */ if (message->extendedheader->noar == 2) { /* verbose mode */ type_info = 0; type_info_tmp = 0; length = 0; length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* first read the type info of the first argument: must be string */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { /* skip string */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if (length >= 0) { ptr += length; datalength -= length; /* read type of second argument: must be raw */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { /* get length of raw data block */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if ((length >= 0) && (length == datalength)) /*printf("Raw data found in payload, length="); */ /*printf("%d, datalength=%d \n", length, datalength); */ dltdata->test_counter_macro[3]++; } } } } } } } } /* check test 5m */ if (strcmp(text, "Test5: (Macro IF) Test high-level API") == 0) { printf("Test5m: (Macro IF) Test high-level API\n"); dltdata->running_test = 5; dltdata->test_counter_macro[4] = 0; } else if (strcmp(text, "Test5: (Macro IF) finished") == 0) { if (dltdata->test_counter_macro[4] == 12) { printf("Test5m PASSED\n"); dltdata->tests_passed++; } else { printf("Test5m FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 5) { if (strcmp(text, "Next line: DLT_LOG_INT") == 0) dltdata->test_counter_macro[4]++; if (strcmp(text, "-42") == 0) dltdata->test_counter_macro[4]++; if (strcmp(text, "Next line: DLT_LOG_UINT") == 0) dltdata->test_counter_macro[4]++; if (strcmp(text, "42") == 0) dltdata->test_counter_macro[4]++; if (strcmp(text, "Next line: DLT_LOG_STRING") == 0) dltdata->test_counter_macro[4]++; if (strcmp(text, "String output") == 0) dltdata->test_counter_macro[4]++; if (strcmp(text, "Next line: DLT_LOG_RAW") == 0) dltdata->test_counter_macro[4]++; if (strcmp(text, "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f") == 0) dltdata->test_counter_macro[4]++; if (strcmp(text, "Next line: DLT_LOG_STRING_INT") == 0) dltdata->test_counter_macro[4]++; if (strcmp(text, "String output: -42") == 0) dltdata->test_counter_macro[4]++; if (strcmp(text, "Next line: DLT_LOG_STRING_UINT") == 0) dltdata->test_counter_macro[4]++; if (strcmp(text, "String output: 42") == 0) dltdata->test_counter_macro[4]++; } /* check test 6m */ if (strcmp(text, "Test 6: (Macro IF) Test local printing") == 0) { printf("Test6m: (Macro IF) Test local printing\n"); dltdata->running_test = 6; dltdata->test_counter_macro[5] = 0; } else if (strcmp(text, "Test6: (Macro IF) finished") == 0) { if (dltdata->test_counter_macro[5] == 2) { printf("Test6m PASSED\n"); dltdata->tests_passed++; } else { printf("Test6m FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 6) { if (strcmp(text, "Message (visible: locally printed)") == 0) { printf("Message (visible: locally printed)\n"); dltdata->test_counter_macro[5]++; } if (strcmp(text, "Message (invisible: not locally printed)") == 0) { printf("Message (invisible: not locally printed)\n"); dltdata->test_counter_macro[5]++; } } /* check test 7m */ if (strcmp(text, "Test 7: (Macro IF) Test network trace") == 0) { printf("Test7m: (Macro IF) Test network trace\n"); dltdata->running_test = 7; dltdata->test_counter_macro[6] = 0; } else if (strcmp(text, "Test7: (Macro IF) finished") == 0) { if (dltdata->test_counter_macro[6] == 8) { printf("Test7m PASSED\n"); dltdata->tests_passed++; } else { printf("Test7m FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 7) { if (DLT_IS_HTYP_UEH(message->standardheader->htyp)) { if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_NW_TRACE) { /* Check message type information*/ /* Each correct message type increases the counter by 1 */ mtin = DLT_GET_MSIN_MTIN(message->extendedheader->msin); if (mtin == DLT_NW_TRACE_IPC) dltdata->test_counter_macro[6]++; if (mtin == DLT_NW_TRACE_CAN) dltdata->test_counter_macro[6]++; if (mtin == DLT_NW_TRACE_FLEXRAY) dltdata->test_counter_macro[6]++; if (mtin == DLT_NW_TRACE_MOST) dltdata->test_counter_macro[6]++; /* Check payload, must be two arguments (2 raw data blocks) */ /* If the payload is correct, the counter is increased by 1 */ if (message->extendedheader->noar == 2) { /* verbose mode */ type_info = 0; type_info_tmp = 0; length = 0, length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* first read the type info of the first argument: must be string */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { /* skip string */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if (length >= 0) { ptr += length; datalength -= length; /* read type of second argument: must be raw */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { /* get length of raw data block */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if ((length >= 0) && (length == datalength)) /*printf("Raw data found in payload, length="); */ /*printf("%d, datalength=%d \n", length, datalength); */ dltdata->test_counter_macro[6]++; } } } } } } } /* check test 8m */ if (strcmp(text, "Test 8: (Macro IF) Test truncated network trace") == 0) { printf("Test8m: (Macro IF) Test truncated network trace\n"); dltdata->running_test = 8; dltdata->test_counter_macro[7] = 0; } else if (strcmp(text, "Test8: (Macro IF) finished") == 0) { if (dltdata->test_counter_macro[7] == 20) { printf("Test8m PASSED\n"); dltdata->tests_passed++; } else { printf("Test8m FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 8) { if (DLT_IS_HTYP_UEH(message->standardheader->htyp)) { if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_NW_TRACE) { /* Check message type information*/ /* Each correct message type increases the counter by 1 */ mtin = DLT_GET_MSIN_MTIN(message->extendedheader->msin); if (mtin == DLT_NW_TRACE_IPC) dltdata->test_counter_macro[7]++; if (mtin == DLT_NW_TRACE_CAN) dltdata->test_counter_macro[7]++; if (mtin == DLT_NW_TRACE_FLEXRAY) dltdata->test_counter_macro[7]++; if (mtin == DLT_NW_TRACE_MOST) dltdata->test_counter_macro[7]++; /* Check payload, must be two arguments (2 raw data blocks) */ /* If the payload is correct, the counter is increased by 1 */ if (message->extendedheader->noar == 4) { type_info = 0; type_info_tmp = 0; length = 0, length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { /* Read NWTR */ char chdr[10]; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); DLT_MSG_READ_STRING(chdr, ptr, datalength, (int)sizeof(chdr), length); if (strcmp((char *)chdr, DLT_TRACE_NW_TRUNCATED) == 0) dltdata->test_counter_macro[7]++; DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { char hdr[2048]; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); DLT_MSG_READ_STRING(hdr, ptr, datalength, (int)sizeof(hdr), length); if ((length == 16) && (hdr[15] == 15)) dltdata->test_counter_macro[7]++; DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint32_t orig_size; DLT_MSG_READ_VALUE(length_tmp32, ptr, datalength, uint32_t); orig_size = DLT_ENDIAN_GET_32(message->standardheader->htyp, length_tmp32); if (orig_size == 1024 * 5) dltdata->test_counter_macro[7]++; DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); /* Size of the truncated message after headers */ if (length == DLT_USER_BUF_MAX_SIZE - 41 - sizeof(uint16_t) - sizeof(uint32_t)) dltdata->test_counter_macro[7]++; } } } } } } } } /* check test 9m */ if (strcmp(text, "Test 9: (Macro IF) Test segmented network trace") == 0) { printf("Test9m: (Macro IF) Test segmented network trace\n"); dltdata->running_test = 9; dltdata->test_counter_macro[8] = 0; } else if (strcmp(text, "Test9: (Macro IF) finished") == 0) { /* (Interface types) * (results per packet)*/ if (dltdata->test_counter_macro[8] == 4 * 35) { printf("Test9m PASSED\n"); dltdata->tests_passed++; } else { printf("Test9m FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 9) { if (DLT_IS_HTYP_UEH(message->standardheader->htyp)) { if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_NW_TRACE) { /* Check message type information*/ /* Each correct message type increases the counter by 1 */ mtin = DLT_GET_MSIN_MTIN(message->extendedheader->msin); if (mtin == DLT_NW_TRACE_IPC) dltdata->test_counter_macro[8]++; if (mtin == DLT_NW_TRACE_CAN) dltdata->test_counter_macro[8]++; if (mtin == DLT_NW_TRACE_FLEXRAY) dltdata->test_counter_macro[8]++; if (mtin == DLT_NW_TRACE_MOST) dltdata->test_counter_macro[8]++; /* Payload for first segmented message */ if (message->extendedheader->noar == 6) { /* verbose mode */ type_info = 0; type_info_tmp = 0; length = 0, length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* NWST */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { char chdr[10]; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); DLT_MSG_READ_STRING(chdr, ptr, datalength, (int)sizeof(chdr), length); if (strcmp((char *)chdr, DLT_TRACE_NW_START) == 0) dltdata->test_counter_macro[8]++; /* Streahandle */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint32_t handle; DLT_MSG_READ_VALUE(length_tmp32, ptr, datalength, uint32_t); handle = DLT_ENDIAN_GET_32(message->standardheader->htyp, length_tmp32); if (handle > 0) dltdata->test_counter_macro[8]++; /* Header */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); /* Test packet header size 16 */ if (length == 16) dltdata->test_counter_macro[8]++; /* Skip data */ ptr += length; datalength -= length; /* Payload size */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint32_t pl_sz; DLT_MSG_READ_VALUE(length_tmp32, ptr, datalength, uint32_t); pl_sz = DLT_ENDIAN_GET_32(message->standardheader->htyp, length_tmp32); /* Test packet payload size. */ if (pl_sz == 5120) dltdata->test_counter_macro[8]++; /* Segmentcount */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint16_t scount; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); scount = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); /* Test packet segment count 5 */ if (scount == 5) dltdata->test_counter_macro[8]++; /* Segment length */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint16_t slen; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); slen = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); /* Default segment size 1024 */ if (slen == 1024) dltdata->test_counter_macro[8]++; } } } } } } } /* Data segment */ else if (message->extendedheader->noar == 4) { /* verbose mode */ type_info = 0; type_info_tmp = 0; length = 0, length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* NWCH */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { char chdr[10]; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); DLT_MSG_READ_STRING(chdr, ptr, datalength, (int)sizeof(chdr), length); if (strcmp((char *)chdr, DLT_TRACE_NW_SEGMENT) == 0) dltdata->test_counter_macro[8]++; /* handle */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint32_t handle; DLT_MSG_READ_VALUE(length_tmp32, ptr, datalength, uint32_t); handle = DLT_ENDIAN_GET_32(message->standardheader->htyp, length_tmp32); if (handle > 0) dltdata->test_counter_macro[8]++; /* Sequence */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { /*uint16_t seq; */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); /*seq=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); */ dltdata->test_counter_macro[8]++; /* Data */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); /* Segment size by default, 1024 */ if (length == 1024) dltdata->test_counter_macro[8]++; } } } } } /* End segment */ else if (message->extendedheader->noar == 2) { /* verbose mode */ type_info = 0; type_info_tmp = 0; length = 0, length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* NWEN */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { char chdr[10]; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); DLT_MSG_READ_STRING(chdr, ptr, datalength, (int)sizeof(chdr), length); if (strcmp((char *)chdr, DLT_TRACE_NW_END) == 0) dltdata->test_counter_macro[8]++; /* handle */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint32_t handle; DLT_MSG_READ_VALUE(length_tmp32, ptr, datalength, uint32_t); handle = DLT_ENDIAN_GET_32(message->standardheader->htyp, length_tmp32); if (handle > 0) dltdata->test_counter_macro[8]++; } } } } } } /* check test 1f */ if (strcmp(text, "Test1: (Function IF) Test all log levels") == 0) { printf("Test1f: (Function IF) Test all log levels\n"); dltdata->running_test = 10; dltdata->test_counter_function[0] = 0; } else if (strcmp(text, "Test1: (Function IF) finished") == 0) { /* >=4, as "info" is default log level */ if (dltdata->test_counter_function[0] >= 4) { printf("Test1f PASSED\n"); dltdata->tests_passed++; } else { printf("Test1f FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 10) { if (DLT_IS_HTYP_UEH(message->standardheader->htyp)) { if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_LOG) { mtin = DLT_GET_MSIN_MTIN(message->extendedheader->msin); if (mtin == DLT_LOG_FATAL) dltdata->test_counter_function[0]++; if (mtin == DLT_LOG_ERROR) dltdata->test_counter_function[0]++; if (mtin == DLT_LOG_WARN) dltdata->test_counter_function[0]++; if (mtin == DLT_LOG_INFO) dltdata->test_counter_function[0]++; if (mtin == DLT_LOG_DEBUG) dltdata->test_counter_function[0]++; if (mtin == DLT_LOG_VERBOSE) dltdata->test_counter_function[0]++; } } } /* check test 2f */ if (strcmp(text, "Test2: (Function IF) Test all variable types (verbose)") == 0) { printf("Test2f: (Function IF) Test all variable types (verbose)\n"); dltdata->running_test = 11; dltdata->test_counter_function[1] = 0; } else if (strcmp(text, "Test2: (Function IF) finished") == 0) { if (dltdata->test_counter_function[1] == 14) { printf("Test2f PASSED\n"); dltdata->tests_passed++; } else { printf("Test2f FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 11) { /* Verbose */ if (!(DLT_MSG_IS_NONVERBOSE(message))) { type_info = 0; type_info_tmp = 0; length = 0; length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* Log message */ if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_LOG) { if (message->extendedheader->noar >= 2) { /* get type of first argument: must be string */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { /* skip string */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if (length >= 0) { ptr += length; datalength -= length; /* read type of second argument: must be raw */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_BOOL) { if (datalength == sizeof(uint8_t)) dltdata->test_counter_function[1]++; } else if (type_info & DLT_TYPE_INFO_SINT) { switch (type_info & DLT_TYPE_INFO_TYLE) { case DLT_TYLE_8BIT: { if (datalength == sizeof(int8_t)) dltdata->test_counter_function[1]++; break; } case DLT_TYLE_16BIT: { if (datalength == sizeof(int16_t)) dltdata->test_counter_function[1]++; break; } case DLT_TYLE_32BIT: { if (datalength == sizeof(int32_t)) dltdata->test_counter_function[1]++; break; } case DLT_TYLE_64BIT: { if (datalength == sizeof(int64_t)) dltdata->test_counter_function[1]++; break; } case DLT_TYLE_128BIT: { /* Not tested here */ break; } } } else if (type_info & DLT_TYPE_INFO_UINT) { switch (type_info & DLT_TYPE_INFO_TYLE) { case DLT_TYLE_8BIT: { if (datalength == sizeof(uint8_t)) dltdata->test_counter_function[1]++; break; } case DLT_TYLE_16BIT: { if (datalength == sizeof(uint16_t)) dltdata->test_counter_function[1]++; break; } case DLT_TYLE_32BIT: { if (datalength == sizeof(uint32_t)) dltdata->test_counter_function[1]++; break; } case DLT_TYLE_64BIT: { if (datalength == sizeof(uint64_t)) dltdata->test_counter_function[1]++; break; } case DLT_TYLE_128BIT: { /* Not tested here */ break; } } } else if (type_info & DLT_TYPE_INFO_FLOA) { switch (type_info & DLT_TYPE_INFO_TYLE) { case DLT_TYLE_8BIT: { /* Not tested here */ break; } case DLT_TYLE_16BIT: { /* Not tested here */ break; } case DLT_TYLE_32BIT: { if (datalength == (2 * sizeof(float) + sizeof(uint32_t))) dltdata->test_counter_function[1]++; break; } case DLT_TYLE_64BIT: { if (datalength == (2 * sizeof(double) + sizeof(uint32_t))) dltdata->test_counter_function[1]++; break; } case DLT_TYLE_128BIT: { /* Not tested here */ break; } } } else if (type_info & DLT_TYPE_INFO_RAWD) { /* Get length */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if ((length == datalength) && (length == 10)) dltdata->test_counter_function[1]++; } } } } } } } /* check test 3f */ if (strcmp(text, "Test3: (Function IF) Test all variable types (non-verbose)") == 0) { printf("Test3f: (Function IF) Test all variable types (non-verbose)\n"); dltdata->running_test = 12; dltdata->test_counter_function[2] = 0; } else if (strcmp(text, "Test3: (Function IF) finished") == 0) { if (dltdata->test_counter_function[2] == 14) { printf("Test3f PASSED\n"); dltdata->tests_passed++; } else { printf("Test3f FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 12) { /* Nonverbose */ if (DLT_MSG_IS_NONVERBOSE(message)) { id = 0; id_tmp = 0; ptr = message->databuffer; datalength = (int32_t) message->datasize; slen = -1; tc_old = dltdata->test_counter_function[2]; /* Get message id */ DLT_MSG_READ_VALUE(id_tmp, ptr, datalength, uint32_t); id = DLT_ENDIAN_GET_32(message->standardheader->htyp, id_tmp); /* Length of string */ datalength -= sizeof(uint16_t); ptr += sizeof(uint16_t); switch (id) { case 1: { slen = strlen("bool") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint8_t)) dltdata->test_counter_function[2]++; break; } case 2: { slen = strlen("int") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(int)) dltdata->test_counter_function[2]++; break; } case 3: { slen = strlen("int8") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(int8_t)) dltdata->test_counter_function[2]++; break; } case 4: { slen = strlen("int16") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(int16_t)) dltdata->test_counter_function[2]++; break; } case 5: { slen = strlen("int32") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(int32_t)) dltdata->test_counter_function[2]++; break; } case 6: { slen = strlen("int64") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(int64_t)) dltdata->test_counter_function[2]++; break; } case 7: { slen = strlen("uint") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(unsigned int)) dltdata->test_counter_function[2]++; break; } case 8: { slen = strlen("uint8") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint8_t)) dltdata->test_counter_function[2]++; break; } case 9: { slen = strlen("uint16") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint16_t)) dltdata->test_counter_function[2]++; break; } case 10: { slen = strlen("uint32") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint32_t)) dltdata->test_counter_function[2]++; break; } case 11: { slen = strlen("uint64") + 1; datalength -= slen; ptr += slen; if (datalength == sizeof(uint64_t)) dltdata->test_counter_function[2]++; break; } case 12: { slen = strlen("float32") + 1; datalength -= slen; ptr += slen; /* 2*, as the min and the max is transfered */ if (datalength == 2 * sizeof(float)) dltdata->test_counter_function[2]++; break; } case 13: { slen = strlen("float64") + 1; datalength -= slen; ptr += slen; /* 2*, as the min and the max is transfered */ if (datalength == 2 * sizeof(double)) dltdata->test_counter_function[2]++; break; } case 14: { slen = strlen("raw") + 1; datalength -= slen; ptr += slen; datalength -= sizeof(uint16_t); ptr += sizeof(uint16_t); if (datalength == 10) dltdata->test_counter_function[2]++; break; } } if ((slen >= 0) && (tc_old == dltdata->test_counter_function[2])) printf("ID=%d, Datalength=%d => Failed!", id, datalength); } } /* check test 4f */ if (strcmp(text, "Test4: (Function IF) Test different message sizes") == 0) { printf("Test4f: (Function IF) Test different message sizes\n"); dltdata->running_test = 13; dltdata->test_counter_function[3] = 0; } else if (strcmp(text, "Test4: (Function IF) finished") == 0) { if (dltdata->test_counter_function[3] == 4) { printf("Test4f PASSED\n"); dltdata->tests_passed++; } else { printf("Test4f FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 13) { /* Extended header */ if (DLT_IS_HTYP_UEH(message->standardheader->htyp)) { /* Log message */ if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_LOG) { /* Verbose */ if (DLT_IS_MSIN_VERB(message->extendedheader->msin)) { /* 2 arguments */ if (message->extendedheader->noar == 2) { /* verbose mode */ type_info = 0; type_info_tmp = 0; length = 0; length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* first read the type info of the first argument: should be string */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { /* skip string */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if (length >= 0) { ptr += length; datalength -= length; /* read type of second argument: should be raw */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { /* get length of raw data block */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if ((length >= 0) && (length == datalength)) /*printf("Raw data found in payload, length="); */ /*printf("%d, datalength=%d \n", length, datalength); */ dltdata->test_counter_function[3]++; } } } } } } } } /* check test 5f */ if (strcmp(text, "Test5: (Function IF) Test high-level API") == 0) { printf("Test5f: (Function IF) Test high-level API\n"); dltdata->running_test = 14; dltdata->test_counter_function[4] = 0; } else if (strcmp(text, "Test5: (Function IF) finished") == 0) { if (dltdata->test_counter_function[4] == 12) { printf("Test5f PASSED\n"); dltdata->tests_passed++; } else { printf("Test5f FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 14) { if (strcmp(text, "Next line: dlt_log_int()") == 0) dltdata->test_counter_function[4]++; if (strcmp(text, "-42") == 0) dltdata->test_counter_function[4]++; if (strcmp(text, "Next line: dlt_log_uint()") == 0) dltdata->test_counter_function[4]++; if (strcmp(text, "42") == 0) dltdata->test_counter_function[4]++; if (strcmp(text, "Next line: dlt_log_string()") == 0) dltdata->test_counter_function[4]++; if (strcmp(text, "String output") == 0) dltdata->test_counter_function[4]++; if (strcmp(text, "Next line: dlt_log_raw()") == 0) dltdata->test_counter_function[4]++; if (strcmp(text, "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f") == 0) dltdata->test_counter_function[4]++; if (strcmp(text, "Next line: dlt_log_string_int()") == 0) dltdata->test_counter_function[4]++; if (strcmp(text, "String output: -42") == 0) dltdata->test_counter_function[4]++; if (strcmp(text, "Next line: dlt_log_string_uint()") == 0) dltdata->test_counter_function[4]++; if (strcmp(text, "String output: 42") == 0) dltdata->test_counter_function[4]++; } /* check test 6f */ if (strcmp(text, "Test 6: (Function IF) Test local printing") == 0) { printf("Test6f: (Function IF) Test local printing\n"); dltdata->running_test = 15; dltdata->test_counter_function[5] = 0; } else if (strcmp(text, "Test6: (Function IF) finished") == 0) { if (dltdata->test_counter_function[5] == 2) { printf("Test6f PASSED\n"); dltdata->tests_passed++; } else { printf("Test6f FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 15) { if (strcmp(text, "Message (visible: locally printed)") == 0) { printf("Message (visible: locally printed)\n"); dltdata->test_counter_function[5]++; } if (strcmp(text, "Message (invisible: not locally printed)") == 0) { printf("Message (invisible: not locally printed)\n"); dltdata->test_counter_function[5]++; } } /* check test 7f */ if (strcmp(text, "Test 7: (Function IF) Test network trace") == 0) { printf("Test7f: (Function IF) Test network trace\n"); dltdata->running_test = 16; dltdata->test_counter_function[6] = 0; } else if (strcmp(text, "Test7: (Function IF) finished") == 0) { if (dltdata->test_counter_function[6] == 8) { printf("Test7f PASSED\n"); dltdata->tests_passed++; } else { printf("Test7f FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 16) { if (DLT_IS_HTYP_UEH(message->standardheader->htyp)) { if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_NW_TRACE) { /* Check message type information*/ /* Each correct message type increases the counter by 1 */ mtin = DLT_GET_MSIN_MTIN(message->extendedheader->msin); if (mtin == DLT_NW_TRACE_IPC) dltdata->test_counter_function[6]++; if (mtin == DLT_NW_TRACE_CAN) dltdata->test_counter_function[6]++; if (mtin == DLT_NW_TRACE_FLEXRAY) dltdata->test_counter_function[6]++; if (mtin == DLT_NW_TRACE_MOST) dltdata->test_counter_function[6]++; /* Check payload, must be two arguments (2 raw data blocks) */ /* If the payload is correct, the counter is increased by 1 */ if (message->extendedheader->noar == 2) { /* verbose mode */ type_info = 0; type_info_tmp = 0; length = 0; length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* first read the type info of the first argument: should be string */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { /* skip string */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if (length >= 0) { ptr += length; datalength -= length; /* read type of second argument: should be raw */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { /* get length of raw data block */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if ((length >= 0) && (length == datalength)) /*printf("Raw data found in payload, length="); */ /*printf("%d, datalength=%d \n", length, datalength); */ dltdata->test_counter_function[6]++; } } } } } } } /* check test 8f */ if (strcmp(text, "Test 8: (Function IF) Test truncated network trace") == 0) { printf("Test8f: (Function IF) Test truncated network trace\n"); dltdata->running_test = 17; dltdata->test_counter_function[7] = 0; } else if (strcmp(text, "Test8: (Function IF) finished") == 0) { if (dltdata->test_counter_function[7] == 20) { printf("Test8f PASSED\n"); dltdata->tests_passed++; } else { printf("Test8f FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 17) { if (DLT_IS_HTYP_UEH(message->standardheader->htyp)) { if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_NW_TRACE) { /* Check message type information*/ /* Each correct message type increases the counter by 1 */ mtin = DLT_GET_MSIN_MTIN(message->extendedheader->msin); if (mtin == DLT_NW_TRACE_IPC) dltdata->test_counter_function[7]++; if (mtin == DLT_NW_TRACE_CAN) dltdata->test_counter_function[7]++; if (mtin == DLT_NW_TRACE_FLEXRAY) dltdata->test_counter_function[7]++; if (mtin == DLT_NW_TRACE_MOST) dltdata->test_counter_function[7]++; /* Check payload, must be two arguments (2 raw data blocks) */ /* If the payload is correct, the counter is increased by 1 */ if (message->extendedheader->noar == 4) { type_info = 0; type_info_tmp = 0; length = 0, length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { /* Read NWTR */ char chdr[10]; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); DLT_MSG_READ_STRING(chdr, ptr, datalength, (int)sizeof(chdr), length); if (strcmp((char *)chdr, DLT_TRACE_NW_TRUNCATED) == 0) dltdata->test_counter_function[7]++; DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { char hdr[2048]; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); DLT_MSG_READ_STRING(hdr, ptr, datalength, (int)sizeof(hdr), length); if ((length == 16) && (hdr[15] == 15)) dltdata->test_counter_function[7]++; DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint32_t orig_size; DLT_MSG_READ_VALUE(length_tmp32, ptr, datalength, uint32_t); orig_size = DLT_ENDIAN_GET_32(message->standardheader->htyp, length_tmp32); if (orig_size == 1024 * 5) dltdata->test_counter_function[7]++; DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); /* Size of the truncated message after headers */ if (length == DLT_USER_BUF_MAX_SIZE - 41 - sizeof(uint16_t) - sizeof(uint32_t)) dltdata->test_counter_function[7]++; } } } } } } } } /* check test 9f */ if (strcmp(text, "Test 9: (Function IF) Test segmented network trace") == 0) { printf("Test9f: (Function IF) Test segmented network trace\n"); dltdata->running_test = 18; dltdata->test_counter_function[8] = 0; } else if (strcmp(text, "Test9: (Function IF) finished") == 0) { /* (Interface types) * (number of messages per complete message) */ if (dltdata->test_counter_function[8] == 4 * 35) { printf("Test9f PASSED\n"); dltdata->tests_passed++; } else { printf("Test9f FAILED\n"); dltdata->tests_failed++; } dltdata->running_test = 0; } else if (dltdata->running_test == 18) { if (DLT_IS_HTYP_UEH(message->standardheader->htyp)) { if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_NW_TRACE) { /* Check message type information*/ /* Each correct message type increases the counter by 1 */ mtin = DLT_GET_MSIN_MTIN(message->extendedheader->msin); if (mtin == DLT_NW_TRACE_IPC) dltdata->test_counter_function[8]++; if (mtin == DLT_NW_TRACE_CAN) dltdata->test_counter_function[8]++; if (mtin == DLT_NW_TRACE_FLEXRAY) dltdata->test_counter_function[8]++; if (mtin == DLT_NW_TRACE_MOST) dltdata->test_counter_function[8]++; /* Payload for first segmented message */ if (message->extendedheader->noar == 6) { /* verbose mode */ type_info = 0; type_info_tmp = 0; length = 0, length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* NWST */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { char chdr[10]; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); DLT_MSG_READ_STRING(chdr, ptr, datalength, (int)sizeof(chdr), length); if (strcmp((char *)chdr, DLT_TRACE_NW_START) == 0) dltdata->test_counter_function[8]++; /* Streahandle */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint32_t handle; DLT_MSG_READ_VALUE(length_tmp32, ptr, datalength, uint32_t); handle = DLT_ENDIAN_GET_32(message->standardheader->htyp, length_tmp32); if (handle > 0) dltdata->test_counter_function[8]++; /* Header */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); /* Test packet header size 16 */ if (length == 16) dltdata->test_counter_function[8]++; /* Skip data */ ptr += length; datalength -= length; /* Payload size */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint32_t pl_sz; DLT_MSG_READ_VALUE(length_tmp32, ptr, datalength, uint32_t); pl_sz = DLT_ENDIAN_GET_32(message->standardheader->htyp, length_tmp32); /* Test packet payload size. */ if (pl_sz == 5120) dltdata->test_counter_function[8]++; /* Segmentcount */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint16_t scount; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); scount = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); /* Test packet segment count 5 */ if (scount == 5) dltdata->test_counter_function[8]++; /* Segment length */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint16_t slen; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); slen = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); /* Default segment size 1024 */ if (slen == 1024) dltdata->test_counter_function[8]++; } } } } } } } /* Data segment */ else if (message->extendedheader->noar == 4) { /* verbose mode */ type_info = 0; type_info_tmp = 0; length = 0, length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* NWCH */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { char chdr[10]; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); DLT_MSG_READ_STRING(chdr, ptr, datalength, (int)sizeof(chdr), length); if (strcmp((char *)chdr, DLT_TRACE_NW_SEGMENT) == 0) dltdata->test_counter_function[8]++; /* handle */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint32_t handle; DLT_MSG_READ_VALUE(length_tmp32, ptr, datalength, uint32_t); handle = DLT_ENDIAN_GET_32(message->standardheader->htyp, length_tmp32); if (handle > 0) dltdata->test_counter_function[8]++; /* Sequence */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { /*uint16_t seq; */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); /*seq=DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); */ dltdata->test_counter_function[8]++; /* Data */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); /* Segment size by default, 1024 */ if (length == 1024) dltdata->test_counter_function[8]++; } } } } } /* End segment */ else if (message->extendedheader->noar == 2) { /* verbose mode */ type_info = 0; type_info_tmp = 0; length = 0, length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* NWEN */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_STRG) { char chdr[10]; DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); DLT_MSG_READ_STRING(chdr, ptr, datalength, (int)sizeof(chdr), length); if (strcmp((char *)chdr, DLT_TRACE_NW_END) == 0) dltdata->test_counter_function[8]++; /* handle */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_UINT) { uint32_t handle; DLT_MSG_READ_VALUE(length_tmp32, ptr, datalength, uint32_t); handle = DLT_ENDIAN_GET_32(message->standardheader->htyp, length_tmp32); if (handle > 0) dltdata->test_counter_function[8]++; } } } } } } if (strcmp(text, "Tests finished") == 0) { printf("Tests finished\n"); dltdata->running_test = 1; printf("%d tests passed\n", dltdata->tests_passed); printf("%d tests failed\n", dltdata->tests_failed); if (dltdata->sock != -1) close(dltdata->sock); g_testsFailed = dltdata->tests_failed; return 0; } /* if no filter set or filter is matching display message */ if (dltdata->xflag) dlt_message_print_hex(message, text, DLT_TESTCLIENT_TEXTBUFSIZE, dltdata->vflag); else if (dltdata->mflag) dlt_message_print_mixed_plain(message, text, DLT_TESTCLIENT_TEXTBUFSIZE, dltdata->vflag); else if (dltdata->sflag) dlt_message_print_header(message, text, sizeof(text), dltdata->vflag); /* if file output enabled write message */ if (dltdata->ovalue) { iov[0].iov_base = message->headerbuffer; iov[0].iov_len = message->headersize; iov[1].iov_base = message->databuffer; iov[1].iov_len = message->datasize; bytes_written = (int) writev(dltdata->ohandle, iov, 2); if (0 > bytes_written) { printf("dlt_testclient_message_callback, error in: writev(dltdata->ohandle, iov, 2)\n"); return -1; } } } return 0; } dlt-daemon-2.18.6/src/tests/dlt-test-filetransfer-file000066400000000000000000000000211377520261000226430ustar00rootroot00000000000000!!!HelloWorld!!! dlt-daemon-2.18.6/src/tests/dlt-test-filetransfer-image.png000066400000000000000000000447211377520261000236100ustar00rootroot00000000000000‰PNG  IHDRŦåÖ`sRGBŽÎégAMAą üa pHYsÃÃĮo¨dIjIDATx^íųûŝīũŗæÎ}fšÛ/s'“gî$“;Ųæf7‹™˜h&‹Ŗ&qÃHԈ**Š€Č"ûŽė›((*¨lĸ(.ˆ¸ Š[ī6í´mmŨ§Ī9užįÅķôŖĐŨĩŧ?¯ĒzWuuŸ PPPPP c.ȸl PPPP †PPPP˛VÚux(        †PPPP˛VÚux(        †PPPP˛VÚux(        †PPPP˛VÚux(        †PPPP˛VÚux(        †PPPP˛VÚux(        †PPPP˛VÚux(        †PPPP˛VÚux(        †PPPP˛VÚux(        †PPPP˛V`l ëŸūô'SįΟ7h0000lĒūD˙ϏÃZ5§gß˙Đ<ųâf͓/›ûWí7W<ø¤šäîŸ˙oōFķw—¯â@€€€ž1đ¯ŋßø)˙ņ‹û/|Éō/>åԙ÷‹ĩŌÌŗyĐ†ĩjROžķžYļ㈚jænķ…ĢךŸŪŊĶ\9ãisûŌfņŽãfŨS'>9ö>k^9a8Đ``` o ČoTũĮŠ'Ū,|ÉUŗö>å W­32ąn9d^û]ķŅG}b`ĮÍŧN8ÃZ5Š Ž‚Ŧ`+č`ŪÖWÍĄ7Λ—mä@€€€œ‰Ŋū‘įĖ—'­7ßŋe‹™ŗá€9üÚŠÂŧŽĶĘë„1ŦeĐĀ}/ŊU˜TWAV°s†‘˛ŅYÂ Ā Ā ÄØē˙´ųÃü}æ[7n.Ėë/ŧ>6ĢŽ°ĘŦʨ}ũ”šūá§Ė÷Ļl5+vY“ú–…Ÿ ```&[÷.ļ hN u}Åu¤ ̌Ē6#ŋ}úŦ™˛čYķ͡˜‡7žBŖœ`’I/€€p3 :-ÔiÁîø‰3Ÿ׉ļĮu$ kiTĪ;gî[ųŧų×ɛĖŊĢ›ƒ¯Ÿ7G­Yã@€€€qb@ v_ˇ_9šēäYsæė~]`ĸב3Ŧåã˙§Ū5WLŌÜļøEķüąs˜TŒ: Ā Ā ĀĀX3 …ģģ–(>•õÚ[īL¨Õ֑2ŦĨY=ōÚÛæĮˇī0‹ļŋ:Ö`ŽĶĖ‘ē˛R00i Ŧæ¤})k›yîțFOŖ'ÂŒŒa•Ø}įžWÍ÷§l3;_ø`¤Mkֆĩ4ĢyĘÂgė7UŸ5/ŊiÁ0000ÄĀŨ+™ëŪ3ŌĻ5kÃĒOVÉŦÎ\ûŧšŅ~(ŖŠY‡€€€æ ÜģęųãŖ{GÖ´fkXĩēĒm۞yŲ\|×Nc÷ s  Ā Ā Ā ´dāęYΘG7Ŋø‰iĨO^eiXËŦžōfņ‚ÕžWÎgK81úLt```ÄĀ‹ĮĪ›ŸŲEĀ]û‹‚Ŗôõ€ė kiVß8qēøtՎÎ`V1Ģ0000ĐOŋôõWیGé“WYÖō;ĢīŊ÷žųų´fŲãogp2ŗff 000P2°yßisŅ­[ÍÉĶŖķSŽYVŊdõūûī›Ûí5w.=`ŋa8Đ```:f`Öú—Í53Ÿ0Z$üčŖ˛ßʍa-_˛zéÕˇŠßÂ}áĩķĀŲ1œL˜Á Ā Ā ” |ī–­fĪ ĮŠ—°rßΚ…a-ˇŧûîģæsw›i+cV1Ģ0000ĐGŨvÜüúžæĖ™3ŲīgͰ–ß[}æĀ1sĄuûŦŽ2ûc``` ˙ \d_pßļ÷Hą%S~,×?C7ŦåęĒÜũ/í‹VrûÚ@Ņa``6=wÚ|÷ĻMæôéĶY¯˛Ũ°–/Z=ąī¨Ņ^ŠC¯4€€€€1đËé{Ėōm//`åēĘ:TÃZ~sõwŪ1—ŪĩÍ,Ųų&pN&LŒ```ÄĀÆg?^e=uęTļĢŦC5Ŧåęęs_1_ŋafŗ 000C`ābû Xž<˜í*ëĐ kuuõîÅģÍÍ ŸĐ!ĘėšŲ5 Ā Ā ĀĀôĩGͤYģ˛ŨË:TÃĒī~8qÂüÛí›ĖĘ'O`X1Ŧ00000?pÖ|mŌcæÍ7ßĖō‹C3ŦÚpöėYŗ˙āËæ_&­74€€€€!1pŅ­;ĖÆ'_4ú.~nŋ~5ÃZŨđĀō=æē‡ŸÎ!ÁÉD‰   €˜˛č€™2oW–/_ Ͱ–Û~vįfŗxĮ›V + Ā Ā Ā ‘­ûȝŧ!ËmC1ŦÚ o}zé˜ų—ë֛ũĮÎčefÍĖ```@ |ķÆÍæ‰gÛ6sÚ0Ã*ôËVˡė3—NÛeX8Đ```†ËĀĩv›ĻļkæöËW7ŦÚŋúᇚ“'Ošû—>i$ pNôG€€€1pĮŌCfōėÅWœ´}Sž-‡?C1Ŧ@ŸM˜ôĐvs÷Š#æĀk4€€€€Ą20Ëqķķģ6›×_=̏a-÷¯?~ÜüÔ~uŅö7͋N4€€€€á2°Ųžxõõ߯7ĮŽ+>o%ߖ߁Ví_•âGS6šåOœĀŦbØa``` ļŋpÖ|eŌ:sôčŅâ}#ųļļ Ô°ĒÂå WB‚HfSÝMĄ?úÃ Ā Ā ” üŨåĢĖáNj¯ÆÖ°ž;wŽ@B`Xit000y1 ÃzđāÁŦ~@`ā+ŦĨa=tčų§Ģ֚§Žœ3/Ø%p4€€€€á3 Ãúâ‹/bXO:e8`$`Lb@ ```JJÃĒOjĄq,÷°Ēâ2Ŧrî…a}Ձ0000…?{á…â›ųcmX%†ŖÎD``` ?0Ŧö+rę2Ŧrîäy;›â@€€€ȃ +†sÎ``` k0ŦÖŦef›ĮĖ–8€€a2€auÖũv–Ł0000V—a=fƒÃ0000V k 2A`’000ācÊaŰ2{†€€Ț ĢðîŗĐr  Ā Ā Ā äÁ†ÕeX_ąÁá@€€€Ȃ +†5 ™ 0I‚€€đ1€auÖįėlŠ ```` 0ŦVĖ9€€€Ŧ°bXŗ”™m3[â@``†É†ÕeX_ļPr  Ā Ā Ā dÁ†ÕaXŸĩpr  Ā Ā Ā äÁ†Ê9g‚0005V kր2ŗÍcfKˆ Ā ĀĀ0°bX1ŦĖĒa``˛fÃę0ŦĪXh9†¯ÁęíGĖīoi.ũĖ\đÉĄŋëßuž8 ?NĀĀ@{ļ?wŌL›Ŋ擞î7×O-ū>*ũÛC ˇ}tõPųaĸ=hįÖÃę2ŦG­XCÕ nR̆ĩú˙ž<>Ôr m` ūö}îSōj˙ÖK烏wÚŦ5Ū˛ë\ŋË0oÅnķ›IS?e–ztkßķíwŊHßŨ§`X1Ŧ7îÕێ˜ōhĶđBxŨ¸ĸSlSîÁÄĀ ¤0ā›ŒëßSîæ5Ã4ŦĄŧoŊwaöÚ 3nŖš7†ÃÚYÃö­Š~éĢšíĪžLĘ'ueĩėä1Ŧ˜‚Qí|)7ėŠ k;4Žø´ĶĸíĢŽ9ë†aŰvÖ°C¯V\c A÷Ci¸ÎaX'^§ã„ķÄ|"1€amĮslŦ˜HŒP—Á°: ë^+ Gs BČ*kXcšNąqBiüŗQ_b7÷ë(ˇ Ėĩ{˜béržy,Ņ Í``0 „úŧ~Å`›}âĩxũ~sŨgĒc†Ũ÷™ŌG×ËŖ{}åך~•_éÆ k?ķ&íÁ´ēÎV kgJ¯†UFԗƕvc}ŪõvE–Žc8ēŖ; tÃĀ  ĢúM_žúúJ“¸ͰjÃWkRŽí†å~ëˆaŰvÖ°{5ŦĄûĩ"ĐīÆ@úŖŅi'â4‘´aÕJĒ/O-4Ņv˜†UO×|õāÉÛÄė#0Ŧ.Ãú’ 6Gc ‚†uĢŨŅ4Øq¨~1}9O솁ütŋˇĘöÅ^Ãz™5Ŧ úÚ{fļØsMŌjsíú'Ž•Ą¸ ×ÜĶ›1õé‡aŰv66]a՛˙—Ø=S:ôØßw˙ßūĪĪ}r]yŊîmÛ)\?ef‘žŌUžÅį˛ėßYžģQš2“*GYö˛œJ?Ĩlę¸umYސ~mʧ2¨ŒĨfJŋi•ƃv_X5FĨ^ƒ|ä§2ÄQ,ššKÅ\÷…Ū8.ãĸüo™ļĐ41uF”†ōĢOD”fˆ•oz§”Weu^ÅVŠ6Ō<˒SéŅ4žõv×īøēÚšâäãIŠ^UaX{ékkqīĢ̝üU^ûÁˇX­öåÕž-uĸ_–+ÖūÅĢú ”~kúcVĨ+†ÃÚY#lbXC[BéTĪ55˜^÷„Œq“ÎF¸/­PŲ4ģü”zĢSnŌqj ōĨ›j1 út× —bčĢe”ļ1ã”:QHŒCĖøöøUķĐ>Āzū8Sã&,—ׯĘĢŧCņąščąũcŠú+žMë2¨øVË%mbƧŒ§4,ûˆ~ˇ¯ĐĶĢ”>§ŧĻ­aíßŊîŸ õߥ1ĸŸí¯)įãv=†ÕaXŸ˛Æ†ŖšĄÎo…5iUMõ÷&ĨëÚģŦ™i§Į{e•ĮkhSĶ NĘĮ•Žô^ë­û¯°F4Ĩœ?sŦ„•ų×câK/TŪ”2´Ŋ&Tö˜†Š+ß-vuđoūŧ˛K#v~’])‹ÕMŒ†Ø­4ēîUųcųļ=*¯˜Žiįk“Ō*ĻgčŧōõĩŠj]ß2oõmęĶĨmģîkU7WáãE×ËǟjĒK*ߥŧccC›vWÖ#–v1# ˇ˙°ē ë+Gc ‚†u‹5ŦMWØŋ7íČę×G‹8}÷"˙öƒ+ŽŗF0!ÍĮvų_+Ė’#[î ˙’WS=RĘ4Ŧĩ˜øę4Ŧ ZĨčYŋĻŗZ–wËŪ“Ÿ‰ChkĒ1ÁYf'8 |ų‰…‡ą˛HŸ6ēÆî •7eõĐÕ&'ŨŌ›Y-ĩ(ŒL„ˇAĮWåQ_3ōąxúÎĮę›rž‹žļ0ŦŽūĸkŊKRúļ¨aõ°Ōk?ÜvÜI‰ׄŊ†ÃRŅ  ëƒķˇļ*ģîëՄ…:=ĢkļpŨūž ēĢĖ1 FҰv5ēØ.Œp5žÉI˙ŽęâŠŊŒRjÛLŊŽ×ōÖķX[“ŅSLtŸLJĖĮŒĖ ã+]ģÎŗëÔ¸…ŽëʰbX­{Œī6†UuõũâOŒ•<ē&•Öá-čaX†uí„8škę–ÛŲy]ĶīV:c+č6ÛΧmœBé?lWÍbé~1đŗ€ëŦ‘¨ß[QzX#-ĘCåŖ:(ŨPYCƒŠ+&Ž´BZÅtjz^1Å^šhĐxÔN+ũŋK'Wũ\Ģ}â°Ôž^^åãÔī2ĻPņŌãEũŅNŒšęģžiyëąĒˇP=|åW,šö%eŊ_1ãU¨\ŌļŠšÅ+õ|Ŧ‰ÕAmĀ•WS^ēä;fX]åsžēúxTŸT틕oĒî\×ÜG„4ðbX;k|męøÕÉuŨđ/ˇŗh_ycų…L•†zYcēŗPũb†IŠīūQ3ŦąĮĮĄēĘ,U ’K“ĒŠĻ=4ā‡Ę‹}É ĘR/ohpÕ}>ŅK[I-¯tÖĩŌOĻ^ekÕId(­˜Ų™ÖP{t|Cũˆbä*Ģ4Šĩ钋^béģˇËž6•—~đŨưúúCWŋíŌ/e1Ŗ1#͏/†Ãڙ%ÃĒA6TŪĐęmh0u ÄĄU&WGîęœB†)d\FͰļY‘Ģë%“35ĄUŅĻ+IĄ—”=4Æ Q×YJyS˛/–ą§e|ĖĮîWûT|C}Hl⛜)íŽãÛõâ@ /ũâģKËU?â@šÍW_1ŦÖÎ:ÅQ2Ŧę,Bæ(´jZŠ”Ŋãj‡ĻNŋÍŖųQ2Ŧ1­†ŲÁ‡VĨB“ŽØ€[ąOm'VmôŠ•7fËCņŋÎŽ§”ŖMÜSŌu]*¯Ę‘ĘL(Ŋ”ōMėeM-GJ>ēĻM|CuôõŽō Ē}•yˇŠĢOĮaōĘ[į\eM4“ÁNe†ëš{„^5ðē ëaŽÆÖÍÖ°4]fĪ{ 믭aíC<Ö>^ŊÚôôÉĪä;}ž˙…Ģ—ķ§ļėžzM}ČvĒ ęZŲõĨĘ_š§äP”?–W—ZÅōjzž-ŸŠK¯ņī"†Šõ •ˇ0؉ņžüZ˙ņTîBšģÚZjŲ\×ĩ‰oWŧĒ}•õnSWŸļÃäģMŪą'UŠÅŋrĄQÚŽūŋƸˇw_…aŰ&Bą7j†Uõ ™@­øÕëˆ]œ:?Ÿ.Žĩ+M‰@×ĩ ģ0;ƒPCZĨšœ&z–×*nČ4HI¯ōHyS_Účúô6Z´1Ž|B܅xJ=×d˛×¯ø†ęؤmĒ}aX?6LĄ~Ļ ŸXumĐOsmīÆÔ§!†ÕaXŸ´pr4× Ôņ.ĩĢy!Mu>´ÂÚ¯xÜX1ũ‚5›õ|}eüļŨBā*c/šÔĶģ6đö;­ŲråTc1)Ķ ÕĄË¸tŠUJš{Å8Õ$ĩáSqņŨį‹YŊė]Ä0E]ĶEy•Î_wôkbŊh×īø†ØIm[ŌjPíĢd Ëžļ ^ÚōŨ6īPũ}ąPŦ›Ä4ĩŊq]3ŸaŰvfÎ{1]vĸM;Pš×Ømezŗ/>ipėˇamĶAˇ ĒuÔ€Ú ?Mb.Öē0ĒeyĨą/˙61›†ĩ×I@ė~_{“vƒŠoWŧĒ}aX˙͉‘6“*=ukŌ×pm3CĶ ÃŠaíŦöԁͰūG`ŋ]ĩƒ ]ˇŅ>Vîˇa Ŋ”Ä kZĮ¸ĀnșĄĻį1ŦŸÕžŠ†MŽ—ŅđĩˇAÆˇ—ūnB ëg9 =ĩęeu?fŧ8ŸÖ_×u°bXĮŪ°†šęļ€ĻÛbûš>b ­–bXĶ:¨NJÎKgéY=B†õŗÚ‡t––u}S˙Ž•UŸYM؊Đe|ĩ Č×'4iÛŦ°ú_L éØÅĶ 1#ž´ëĒq 1ˆMë‹Ûč„auÖ'ÃŅ\ƒØŠCHĶĐ ëÅÖ@ô;ũ?>į|æ¯ŲotøęwŸD}å =zžcƚFõúöüäŦĨģi]ûĮ™­Ę]­O(Ž]Æ%¤UHãÔ2Ho_]Ÿ†Jŋ-ŸĄ¨öUęԖe?]đŌ–•.ōŽ×I}@¨ģ0€ŖhXCõn:QKû ãÛEÛdûę•åqXa­Ö14&tŨ÷Ĩ2>î×aX†u—]!āhŽAȰ.ą+X!MuŪwŋėAÄã[GîĄíĄ˛Í l%PšzԝRˇ |~éģėK#4¨*˙õvuØw¯ŌŊ “RöÔkbZŠ.)iŨhWËepë×öÂW[>c†5Ĩ>!ÃkW)éW¯éĸŧJ/¤—+6MËéē~Đņ ÕQe‰ņ:30 -ëŌ….õ4BåV?Ķ$Ī.xiËwyĮę*[čŪË/ōęßbųq>ė;0ŦÖÎҍV™Į˜A̟ž˛ķ íÕšUvu7ÔQŌcČ´ÄL Lē+īXžũPcúk÷i%Ē“Žē.Ą´cEh2šPu1¨ļĐcurīĸŧ)Üû¸ •Ym-Äú0âãÕ×ļ5ЊŨĢķmbģ'f´›L‚ēāĨ-ßmōÖ=ą‰DU?_ß2öĄžSqÅ‡ķ~͊auփV0ŽÆ ë&ģÂĐt‰=ī]!ų•]aP)ũuŋb>ŌŰbX“ÍØ'‚aUG3xåyuę)ēčš&&05]įŧĢå u Mōr]›Z˙ÔëdÚģŌĒn†bæB:Õę}0Ŧū ~J,u4Ŧ>í}&wņ M´S؉]“Únš^×Ä4—etõ5mLcŊŦƒ4Ŧ.Ŋ5q*'ėå¤=Ļ& ÖÁ/ėaX†õqk08škę|ÛՅĻ:īģ˙'v0T<æFöœVËØ¤LMŌ båų‡ėĘbJBÚĻäZåMÉŋé5÷ډ@Jšb×ԙ{˚áØ=m·øŧ=°ēŽs)Ú(}_šbí*%ũę5]”ˇš^?¸÷ÕyņU]evÚpSŪ3čöĨ2‡â܄ĩ.xiËw›ŧ{‰Syol< Õ'voĶö:n×cX1ŦIƒfJ؆UõLYúĩ]‰MҤz fĻŌH5ĢeūW'Š“ÔÔ~r܎ðbX/_#™(†5eŤŠa,5S§{ÜŌQ÷ļ]U u¤Ž<Ģë0Ôļ+­1Râ[­¯Ė¯âí[ŠÆ°ÆŸÆôĘ}uŌ¤ßjYšš!MĘĘû‡Ņž“”ÉyYļĻĀTs6HÃÚËäI匙UiĒž8Äøåŧŋ?Á°ē ë+Gc ~ōK÷ŖKˆĮvÛYiDSŸ‘ģqęÂčŊą´›œWYcϞIzŽkZŧÛ|ë‡ū_ŽĒ`ēV÷ôšīŊlRŠãĘĮ?•—+ļ*S¯å‰Ũ¯Xh`OXUÕ/–ĻÎ/Ūhŋ( ŋōޞë*GˆĪšĢ÷;ËŽtt.ĨŦžUŦÔv•’GyMå åה{ĩÕSqHÕkņ­×UąŠąĒļ$ūĒ÷ēž(¨ŪMb׿Zĩs_ŋ]íƒ ķéčŋģāĨ-ßmķnŌ§HƒĻ}¯oė(žúā+zŌÃę0Ŧ;-Tí5Xa;ÁEļCÖŅFĮō^ĨĶæū.î =’Öcō.ōPëŦ!{Ä—Û뀠Cië(˙ŽsēĻĢüĘtĘ<˙`'˙fPå7͚ŊX^ŊÄĩ×:(īR—ęgX#+ˇ/oŨ§z×ĩWšž{Úđ­|JíږĩMžm5īĸŧąŧĢÜĢŊ‰CņXÆVzĩÕĒĖ{Pņ­×Õמb}Z¯ŒÄ4ĩ1_o_Š}xŧ´åģ—ŧUŋ˛ũ— öŌ÷JCßjšŌmîû؏`X1Ŧ4"Įå¯ėlØ×ņ„Ė Kû‰ÚĄ ĀĀ(3đMĪSũû(×+—˛cX1Ŧ4¤ša ͒ebsiŧ”ƒÁ`ō`@ĢĩŽE-~ÄV։aZ 1ŦV XͰúfÉęŒēÜ@'•ÖIĄ:Á ä΀Æ—aՖƒÜË>*åð: ëk`8ÆSƒåvßlč-}­žÂÆx˛A܉; Ā€‹ĩvēkÜĐžl˜éŽ Ģ˰žhæK Žē)üĶ pAۀ€¨2ā7ūęŋn,ĮĐ~ļ +†•FU™œ¨“ņ­°ūęęŠhÅD``āS ¸Æ9ĢöÃIĮœ`X1Ŧ4Ē?7Ē‹ÂŋDĨķũœ=’6Ģ6000Z ,ßūŲmd“íį؈c÷qİ: ëvk`8ÆO­ úVW5ƒ†‰ņc‚˜s€ȃ +†#öį Ę vVė2Ŧß°ßĐĶã:­<:-â@```ü°bX1bŦ¨Ã Ā Ā d͆Ú5 ĖĸĮoMˉ9 Ā Ā@ Ģ˰ž`Aá@€€€Ȃ Ģðnŗpr  Ā Ā Ā äÁ†Ê9g‚0005V kր2ŗÍcfKˆ Ā ĀĀ0°bX1ŦĖĒa``˛fÃę0Ŧ[-´h000y0€auÖįmp8Đ```˛`ÊaÍD&L’```| `X1ŦVfĪ000Y3€auÖ-Z4€€€€<°bX1įLP```˛fÃę2Ŧûíl‚ ```` 0ŦÃēŲÂɁ0000V +æœ Ā Ā Ā@Ö `X1ŦYĘĖ6™-q 00ÃdÃę2Ŧû,”h000Y0€auÖMN4€€€€<°bX?1įwÎÚj~ôī7|ę¸ųž5˜wĪfîÚ#æĘÉ3 Ŋ.¸ā‚Oũ]˙Žķ]utÄ&ŗĢx’ÎĮņdBsÚPčsķãÊa-ĶĒéĒū?Ļõŗ ˇnR}Ú-Ú|üSĻõžģÍĪ7õS“uŒĄŽ”Øä×q6ø¸Öŋļm=iũf€>7OÆ0ŦV kÃ- ˙õŋ}ÎkîëÆĩjöCā¤ÛzM+gžgŋ͉œ~Û64‘5Ąnų´súÜ|bQmV‡aŨh ˏ7VXunÜôđÕ÷‡ĩĮ˙ž•ÕōßĢÚ}ū˙^č5ēĀ}y›ņkšŊõŌ†&˛.Ô-ŸvNŸ›O,ĒíÃę2ŦĪŲ`ŲqĶŊū-:7nz¸ęģpĶņä•ÕO kEģ˜šõiLlƯ=NÔöÖkš¨ēP¯ŧÚ8}n^ņ(Û†uÄ ëō'ÍCËö50wĖÜją/û4íi ņzŨm ƒ†U+¨?üų ÅQ>ōŧwūîOba kÜËMŲįú8û]iÔkęǤ3¸˜ĸ֌‡yōauÖ vuuŽG+~WØˇÔ›Ô!Ö@›¤5Q¯•õ™ÎK;õ3z+>U-B[tΧÛ8ÄĻK–'*Ą^ŊļĄ‰ uČ|‡>w9ݎ°acWR}JC i ņN4´BēĖŽtĮôžfW[}ičÜ8Ö.YŽÅķqÖûĨQ¯m¨_å"Ũá1‘ŖöŒ‡yō€aŰF‰o ĄÁ6ĩĶÕJbš}C˙ŊŨnሙŨqˆ †5Î_*c9_×EĘš~”mbp<}î(˛ŠaŰbXˇ€øÛ¯_xYtuĩ—Îa:O ëÄčcœĢ ÅĘÅųņā/5ÎãĐįĻj‘ĶuV‡a]o Ė(ļüĀn hR‡_ Đš&iMÄkö 7ÕēŠ>ã›.YnĒ/×Ļŋf"ƃ‰ņDŅyúÜQŒ†ÕeXŸĩ{އ׸÷°&ĒAnœæ˙Ŧ•ΚŌRūÕc鎓ōlRžz^úû‚Įû–_Ŋl]jŨ¤ŪēļMlRķļŽe9‡Ĩ¯˜­jĒ[ĩÜ. ›ĻĶËõũn‡uĘüš–y1&ĪŊ˛ÔTĪQŧŪĮŌ ûō”8õŗĪM[Wí.5ŋQ¸Ã:b†õŌßL52Ŗ:ô(Ú÷ˆí/í‡čËëĒ˙ŊÖ~šÉfjU#ēü†™Féģōūü—., Vđß3ow°ŽĘ_åPy4Pu‘g5^´ÖŊõō¨SVY•ģŒ‘ū-Ôa§Æ&ĩūÃÖĩ,g/úJCËŌRi—íC˙ÕßĢ‹cĨQgX1 Mŧ¤ŌįąĪ”)_•ąÉD.ĨėŌ¯ßí°L?VOÕņ6ģÛĮ^/1vĩ!W>ũä9%mYŠĩWą#FËčŋ!î]é•i”ũĩâĨ4\ē?šŋ,cXĻQŽ'Š&S}shˍļ#Ĩ­xÆ´qõ­]ļų^ú\i[jVÖMõĒ÷AŽ:vÕîšę7*×cX†õ1; äxĖŦ¨ÆĪęyWŨūXaÕ9ŨēĻž˙×lĮ8߇6:>`ŧ·ęų}Û)´ÉĪuĘŪDS×ĩwێˇšvŠÆmc“Rīt-Ë9 –KŽÛ_ˇZV×3uĀõ1Sæ‹“‘ęũũn‡×Dž7ėĒŖôŦˇ÷~´ĄĒ~ƒā96,Å(·úŸ”ž5ÔÆūÁšß”r¨-´eZųĢOnĶŠ'W;ô•šë8ĩíĢcũšú_ējw)qÕk0ŦchXՍ憍Ō%vUŠiĮŖN§iÃPƒnšOõz×ĀŲ´ ē>Öņ¤”ąnRÚv‚mīĢÖ;]ģ6ŦMX–Ž1ƒĄ¸VãļÄŽÄļ™<šø VĨ.ąWÁöęm"ĩ ´IŋĖĢÎ{?ÚPYAņŠGS–RcP^ŠEĘ(6ąÛą2…ú}WÛ+Ķ Ũ&ü*˙XC‹)mÚ|(Ŋz˙P/[Ŧ¯điÖeģKŅkT¯Á°bX¯žöŖÃQęu*ËÕÆ(×p?Ûﯺí}] î]ę:LÃlj—V–büļ]͌ĨĢķõU÷ԉŖĘŪË –ōôĄÍ Oĩ΃2Ŧƒė'|m¯ KMMB()ņŒ­nÆXTyCLwšRĘ'Å´v§6}nlQĮˇbÜuģkĘŲ(]aCÃęšYĮfã)ƒąīš”ĮWąšL¨:`•SCĖx¤trĄ†Ú…a­wPm:Á^fûē77]ģ6Ŧũ`šjŧbƒ~Ķv{;Ŧv(CuQšÕĻĘöį2Īũ0Ŧõ64hž{GĘJ¨¯ŠõA1Ŗc3ļâĘß×ŋj›F,ß6įcÛēŽSĶž:ÆĨOë~´ģŖ|Ãę0Ŧëž1&×#fÔbÁמw™ŗn“{X]i~˙ŌŒŽŋü[÷ËWÕ{ŽžuaTĪP:žûo}ČŋŋJųĪZ}$šo(ÎŌ*ϧīŧęŗxûÉOåŌXį|ei{ŸŌËQײžš°\ĄVžĘ2ūĮī?ģEE\ˆ=_Ķ—ė71næm8Ū*Öũl‡jc>–}íO|K‡2Ž.†cZ„Ú—Ģ šįĻũbˆĨ6cJ¨žbÍ—ĻØŒõ]J;TĻPŨw×Ŋąņ@Ŧ”mGeÔQe(ԟļ-kL‡ōÉG5ũ&}ŽÚs(ŸŲ‰ž¯ėũjwmX…{0Ŧ#fXĢP…:%™É&ĻvĖŽÆjtjČ>“\–/”wĖė†LĢĖF B×vĄu“N°mį™z_.ē–åíBßžĒ‹WÅDykđ—&j7ՉF•/ąŸ: ™qß`¯ōĢĒŪŽAWõHiCU“߯DĨôWÃč'Rã‘ÂRŠŽõkÄ\͉DŽB“'*O}2ž’gŦ?ŽMnēh7ŠqjŌW‡ÚzlėDģkÃ]Ž÷`X1Ŧŀ”Ō1‡ĨPĮĒ.Ô|ŗōØ @lĨ.õū”ÆŲ…ĄjŌ ĻĪĐĘė(č:,ÃHĒúk  ė.~úëŌ¸ôŖúÎ#™Ō~tM¯mh<§ô‹MXJÕĒŧNąöÖPž!ŗYM/d}ųú&1ĄÕÕĐ*cU“￝ë8Ĩļßи—2ŲDģkĘ\Î×cX†u­í\Gá˜xėsĄ]1iR‡XƒŋËvœĄôæF‹,˛]÷‡ę ¯”:„Vx}ųϤ[ŊĻ ­c ¯Lmî]Ë:wĄo™VŒå˙bWV›ÆŋéõĄúhkkˆ~ĩCõ>ƒĸļŨ´ūMÛzŦŋĪÃfIũWčqŗ¯Ky Žk|ē7Õû~û„ĸM9뜈īP:mÛMĶ6ŸŌįN lIS~)íf펋ļ›KV k1…čeöŅz °ĄŽF +PžęSō už|SŌeÃ:*ēðvÅDˆĄļ|Xí0´R¤Á7f”SÚS[MbũS?û‰˜aK_ ėĨwÅ%¤ŗĢvÅ.´āĒsH§Ød¤ž×ãˆŌk§˜a -ФšUÕ{í.ĨmŽĘ5V—aŨkWXGā˜šĘŋąūÂKė kƒ:LžĮ˙ĶŦ:—’–ōôu6*Ģ+Ÿ]éßŖåģ§žNH‡)3ļ&•=Vŋ.´nĢq›ûFE×R÷.ô-Ķ éULž´‹ļ×ļ­O›X×ËØĻŪ57ŧ˛ĨvũšžĐ¨|‹ļŲ§%-4l̉ōĪ9°Ô´ žë?W˙ėęg}&šXŠtÄ>Ä\ęøQĻ2čž´šjã7”ŪÕSmÁ7ÖŠ-ÅŌ/ĪĸŨĨ–eŽÃ°bX‹Æ5Ŧ2ÔŅĨ>Ö ]×´ŗô5Ú^Û#*g›ØŒŠŽƒ6Ŧ]đ ÃρFiIįōĐ`žÂlh2Ų&Ö]VĨ„ëõRš ĖJŋ—64,žģˆG¯F`îz˙[čŠYJüe5Ysņ)VOÃĮąoÂbįūÅöIYƒ NķÛuœBéŋ``šÔuíŽiyržÃę0Ŧklã…#64ŠÃ VKI+ļ˛ãJ#uO1ŽkRËĢ_ZˇÕ¸Í}ŖĸkŠ{ú–iĩŅ+ŋÅŽÖ71u>fÕN|ųuQö6íPå ÅĀWéĄûRôë%ÆÃ⹋x¤hģ&T˙GŦĄ­Ūīë§zVŅefĢ÷ßg Ļ/ŪJÃUÖācüD>Ęt}ÆZyøúķŽãJ/6Ĩž¯‹vck”ÎcX1ŦEÔEƒo3PƯįe2ēhŊ ļŊŠ6ąéUˇØũ]éšŌi‡ ž+ļmô 1ĸØwaTKMs5ŦĨimc¯˛ĢtąvÖKŠņØëyĪ]ŗĶČw>dâĒe÷i\š(ŸNÕ|˔ëb&šLŖŠkŖy›{BąĨŠEšuĻiœĨQŋÚ]͞ä|=†Ã:a Ģ:€…öņm °—ÁvĸÖ.uÍŨ°†V›Úš¤œ kĘ*—¯Ūą§Ŋ´ĄļZ§Üâšk#Ôļ/ qøSûēL×g6ËķžũĄÕ•Sß5õ•Ø~֐aÎa…Ueˆ­ĀÆÚB›‰IÛvזšīðē ëĶvKĀ3W†_ējR‡îöŋtĨs)iWXmY]i„f•—]?Ķ(ī6Į-n5 ˇZŗÚQģĐē­Æmî]ËøtĄo™VŊ|œÄV=t^Ü×ģÁ-.ģ({›včĒŋÚĪUˇ,l´ōjsŊÄxXĸ‹x¤ä“rMŠŽūˇÚûb -/*ƒâėëÃįXæ+ghËLęøQĻũ‡é.Ëäks]Į)%ŊĪ*¯ę‘×Đ5]´ģ^ːĶũV kҍRh ܔĩž†gų:Ȑ!ˆ•ĨëķŊ ļŊŠ6ą]s6ŦĄĶ7ëĩ>mb]gŊM;Lm/ĒwȜ”ÆĮ•^/mhXâiR‡ë[t.%­Đ@ОēŌÕá/Ŧ1HÉwׄʩz§”Ą­Æmî]KŨrcYå ™ĢXŧÛōŌ&Öõ˛´i‡ąú4É×V[M”Ū°xî"Mĩ ]¯~=dZëį\}ĶžĮūĄ' ÷ÚÕÛPšt>4‰‘NŅ!Tŋ_ŲÕ__]ĮŠIząē§Ž)ú„Úļī~Å[ci=>šā¤ä™Ķ5V—a}ĘÖ8fŦđŋt%8u>ĩ×ßåéJįRŌųŪĪü{XCeų‹ŋņp]hJŪÕkl9Ų¨î)釴VŊSŌhĢqÛûFA×RˇÜXVšBp,ŪĄÁ?ÄKÛXWËĶĻ*ßÔvŽŧ|leOßŲkĪ]Ä#ÆJ“ķąGĐuf]1U˙˜ōõ„ę5)e ÅGįæí›Æ]í%fØ]mĒßí.´īYēĻÆļ ŖũŧÃę0Ŧ+í`5*G“ާė„ļæŽ^ŋXMŅãģÖí@J#ÔØËrëåQ?|F'–gJĘk”–/•'%­ļˇŊOeĘ]×Ēn9ąŦrÅV|÷›í$IlhBø“Č*KÉOˆ—^b]jŲĻēØū˛}ēņ[ûذ\Ō˙Įb4͚_[čĸ šį.â‘Ō74šĻÉę¨/]Å251žZž”ø¤æ[ŊÎ5fUËÔuœÚ¤'Busĩû~ˇģØ$"uėJŋ¯Ã°Ž¸aéj.#×ρÖál3P–ih kĶ‘…îÁ°“ģŽŠƒN“II,Ģ\ķ[<:MaxT kJ]Ē×Äŋ. ë yîŠĨ.ō.&FMtT;H-“tSųŌd0–×qj›ž&yĄzÕ'tŠ45ÂĨ^1kŗ1Ũ}Ãę0Ŧ+ö3JGĶYíˏ|Ļ~“{Xu.EauåYOķö‡ũßlͰSōLŠ—ŽQZĄ֔tÚjÜöž˛L9ëZ×-–Ër…´1ųåī¸/ĩ/ŊÆZéļi‡ž˛ÆęX}ú1oķÉ`?ŅERũÉsņHéš\“Z˙›ØŒGJlÅE“˛uÕ5%˙ŽãÔ6ŊŲëÂ_ĐP˙V­Oŋ۝Åų'—OMŌ7%ƒ¸Ã: Ģ‚&Ŋ Ŧļ ´šV›˛^ÕåŅ˙&lJ'ĢkÚt´Ą×Å`ÛVãļ÷Uë“ĢŽŽøįĀrĩ\ŋųcúãSą§ōk õ1“ŖaM5AŽö§úÄĖjW“ž2.ƒâš‹ļ×õ@.­SúA™§PŪĄūēL_ėˇ)¯ņŅĐdÁĄë8õ’^l’[HôģŨÅ tꄠ ũ¸Ã: ĢĀ˜)oĩôžG÷;M¯_KĪ×PÕų¤ hÕ<ԐšÎ>•Ī/íË0ŠåMŠSõŸ‘NíÔÛjÜö>WũrÔĩ^ÎXvéÅ_•u—ųņŌEŦÛļC•[åO0HĻ^¯m¨—~ķÜE<šö3)×Į&QĄIQ™žęZhĶo÷Ÿ6L)ĪŽãÔkzĄą¸ŪfúŨî|Ŧ¤0’Ââ ¯Á°: ërÛFõ˜kÛŦŲģÎ>ƯĶíĘeJtŋŽÕĄ˙Oš§~Í,kžË4ÚÜ_ŋįnÛą–uų…PŋcWtÔËëĨŦmĘWÖMõls[ÛŪį+cnēÖ˙ËŽ2Ũhŗ‰ŊŗĶtč˙Õæ|:ˇi]ÄēMžeÄxYĪ˛Í•íMÜ´íĒé+ļmČĨu?yî"múŠ”{Ęū¨=Ģi¤Ž)e+¯‘~ÕøTێ¸ę‚)åÕuœzM¯ÚSÚLŋÚ]ĩƒ/›pģÃ:Á k,āœŨÉą#v00ãʆÕeXwÛÁ0000V‡a]fáä@€€€ȃ +†sÎ``` k0ŦÖŦef›ĮĖ–8€€a2€auÖĨv–Ł0000V—a}Ō‡ ```` 0ŦÖ,@d‚Ā$ ```ĀĮ†ÕaX—ØŲĀ Ā Ā Ā@ `X1Ŧ˜s&(000Y3€aŰf (3ÛvÖ<˛ŨšV4€€€€20{ëyķųßŦ1[ļí0GŽÉę…ĢĄV퇨îcŊâîĩæōŒ1“€€€ø˜ëįŋj~2e­ŲŗgOvûW‡fXĩŧŦef-7ëô-Ú`ž§ˇŌŦ`h000ƒeā§÷ė5SfŽ-Ū/Ō{Fzß(—íC5Ŧåčŗ ;wî4˙Įž•6}ÃVL; Ā Ā Ā Yv;ĀŽZcÖoÚV|5§ (ŋP0”=ŦÕĪ[?~ŧøŧՔ™kĖÅw= ”Ųë`g¯čŪ0092đëéΛ̧­ūÔv€\žŋ:tÃZß°eËķÕIkĖ+O›‡ˇ4€€€€>3p˙úĖíęęēõÍķĪ?˙Év€\žŋš…a-ŋđĘ+¯ŠŊ}æJķŖ;ögŸádBĀ„```@ üû}ûÍĩĶV_mŌ6Mũëšsį˛Úŋ:´=ŦĨ[–{/D@ßüÚŧyŗųÁMĢÍ ŽcZ1­0000ĐGôT[Oˇ7lØ`öíۗŨTakh{XUm ¨¯˛>´`UņCŗm€8Đ```úÀžjßöЊOVWs|Ųjč[ęĢŦ'Nœ(>qĩuëÖb•õ÷v•@û(ēĸ+ Ā Ā Œ7S–Ÿ4ß°ĢĢ›6m*>eõæ›ofõSŦÕÕÕĄo ¨Ž˛žûîģŇjŸ~úiŗtÅķ•kי{֞5ŗˇZ 8Đ```:aāįĖW&­7s¯*Ū!Ō/æēw5›ÖōWú!“'OšC‡™;v˜s—šīŪ˛ŨLˇĸβ€r  Ā Ā Ā ôÆĀŒÍįÍoÜLš´xĒ­§ÛzĘ­wŠrû2@6{X˂”{YĪž=k^ũõbãīÆ͔éKĖnŗŠa‡€€€¸ôŪgÍĩw/3ëׯ7Ī<ķŒyíĩ׌žrëĸœ~Ų*ģ-UĶĒĪ(hï>sõÔSO™uë֙ßŪšĖüōž}@Ú¤ĖJ{›•ĸúÁ Ā Œ2ŋ™uČ\2e…YŊzuąāĨ—^2§NĘîgXëf5‹=ŦÕB•ŸšŌր#GŽ˜'žxÂŦZĩĘüĐž„uíŧcfĻ5mh000͸iÉ ķ?Ŧ1K–­0;wî,ļ`j+Āûīŋ_ŦŽæūg¨ŸĩĒ‹Sn xoŊõ–9pā@ąŸuņŌåæ[7üŲ´nąâ@€€€HbāĻÅ'ˎ&¯3 -3Ûļm3úöŊž  ­˜šoČęĨĢĒq­îg}ã7ŠŸ ĶĻā…‹—+­ŋ~đ@Rp0ĩ{€€€qgāĒŲGˎ'¯2ķ.-~ Iī ?~ŧØˇšã/ZųVzŗZa­īg•˜UânŲ˛Å,Y˛ÄüęÖĨæĸŠ{Ė›Î›‡ėˊ ````āŗ \2íYsņÍ+Ė‚…‹‹ī­>ûėŗÅ'Ds˙„Uö{Xë+­rūUâ>÷Üs…i]ļl™™{Aņ•%Ŋ¸Žw´č§Å?ų)}‘iÔVWŗûŦ•ĪUK\mОVŊÕĻO1čûaúčíâŋÍīgW[W™O}Ú(`4ÖņlŦĝ¸Ã Ā Œw¯ũĀ\zī~ķÅĢ֘îžo.\X|Į^ŸÕזôģũFŲŦŽŒaUA˯ŧ÷Ū{ÅwÎ=ZüBƒöĩŽXa7/X`Žšs^0N|Đ>á@€€€‰ÆĀũĪ›_>đĸųįĢךËo}ÔĖ›7¯Ø —ĢôãKúžŊ>ĒOWŌ×FvK€ë“WúNĢ~™A/cé[bšElذĄx!KSāĀ‹ėŠëUŧjԉ*õĄķ…€€ņcāēyĮÍĪĻ=gč֚_ܲČĖ|x^ņbÕc=Vl™Ôû>Ú¯ĒaŌ"ߨ|g5öÃY~Ö*Th­´j‹€–ļĩE@ŗ­ļęĶWúå-ƒ+pŗæĖ/V\0yšųû+W›Ø}ŋũĘĮ+¯›,āh0009÷o8oޚķją÷ų+W™īM^i~sÛ|ķĀŦyÅļČĩk×/¤ëŠŗVUĩuR[ʗĢFqŋęČ}%Āg\KĶĒ%n­ļę ÚŖĄ@)`Úd,ãĒWm˜3gŽš~ę\ķŖÉKÍ?ūn•ųŽ}Iëį÷0W˜Ģ‰6%/Z´¨@{^ebuŠŲŗgĮŦYŗ8Đ``` ¯ ČsČ”^dîÜš…?ŅÛūzRŦEˇŌ¤ęe*}ĻęĨ—^*čĒFuĸėU+ŦŽWL3 ­¸ę›coŋũvÔŌŧjåõÉ'Ÿ,ö{hõU/kiŖ˛ŒŦ ĐčĢ2ĩ… ```ēf@>C~CžCūC>D~DŸė”?Ņãū]ģv‹nzÁ\&UĢŠúR’ü|ŽüNiT'Ę^Õą0Ŧe%Ë×ĒyÕdÍD´×UoĪiŋĢžOĻ™Š^ؒ‘šŊč¯2ĩh000Đ/ä7ä;ä?äCäGäKäO´Ŋņ•W^)žkņM&UO‘õ2UuęD7ĒĨˇ›[B/gÕÍĢ^ŌŌ×xmúŌ€ŪĒZÕį˛dj9Đ``` _ ČohÕTūC>D~DžD lzĄ\~Ĩ\IG“ZõwÚ°ÖŋáZ5¯Z}UđĩœŽŲŠŒŦĄŒÂ000]3Pz ųŽŌƒČČ—ČŸčW)ßö—•ÔąÚûølųËY ~y4€€€U_2îĩîåÆf…5ÅÄr        @~ `Xķ‹ %B@@@¨(€a@@@@Ŧ°f ‡(€(€(€(€a…@@@@Ŧ°f ‡(€(€(€(€a…@@@@Ŧ°f ‡(€(€(€(€a…@@@@Ŧ°f ‡(€(€(€(€a…@@@@Ŧ°f ‡(€(€(€(€a…@@@@Ŧ°f ‡(€(€(€(€a…@@@@Ŧ°f ‡(€(€(€(€a…@@@@Ŧ°f ‡(€(€(€(€a…@@@@Ŧ°f ‡(€(€(€(€a…@@@@Ŧ°f ‡(€(€(€(€a…@@@@Ŧ°f ‡(€(€(€(€a…@@@@Ŧ°f ‡(€(€(€(đ˙G xyĨķ›IENDŽB`‚dlt-daemon-2.18.6/src/tests/dlt-test-filetransfer.c000066400000000000000000000444021377520261000221620ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-filetransfer.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-test-filetransfer.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** *******************************************************************************/ #include /*Needed for transferring files with the dlt protocol*/ #include /*Needed for dlt logging*/ /*!Declare some context for the main program. It's a must have to do this, when you want to log with dlt. */ DLT_DECLARE_CONTEXT(mainContext) /*!Declare some context for the file transfer. It's not a must have to do this, but later you can set a filter on this context in the dlt viewer. */ DLT_DECLARE_CONTEXT(fileContext) /*!Textfile which will be transferred. */ char *file1; /*!Image which will be transferred. */ char *file2; /*!Not existing file which will be transferred. */ char *file3_1; /*!Not existing file which will be transferred. */ char *file3_2; /*!Not existing file which will be transferred. */ char *file3_3; /*!Just some variables */ int i, countPackages, transferResult; static int g_numFailed = 0; /*!Prints the test result */ void printTestResultPositiveExpected(const char *function, int result) { if (result >= 0) { printf("%s successful\n", function); } else { printf("%s failed\n", function); g_numFailed++; } } /*!Prints the test result */ void printTestResultNegativeExpected(const char *function, int result) { if (result < 0) { printf("%s successful\n", function); } else { printf("%s failed\n", function); g_numFailed++; } } /*!Test the file transfer with the condition that the transferred file is smaller as the file transfer buffer using dlt_user_log_file_complete. */ int testFile1Run1() { /*Just some log to the main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Started testF1P1 - dlt_user_log_file_complete"), DLT_STRING(file1)); /*Here's the line where the dlt file transfer is called. The method call needs a context, the absolute file path, will the file be deleted after transfer and the timeout between the packages */ transferResult = dlt_user_log_file_complete(&fileContext, file1, 0, 20); if (transferResult < 0) { printf("Error: dlt_user_log_file_complete\n"); return transferResult; } /*Just some log to the main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Finished testF1P1"), DLT_STRING(file1)); printTestResultPositiveExpected(__FUNCTION__, transferResult); return transferResult; } /*!Test the file transfer with the condition that the transferred file is smaller as the file transfer buffer using single package transfer */ int testFile1Run2() { int total_size, used_size; /*Get the information how many packages have the file */ countPackages = dlt_user_log_file_packagesCount(&fileContext, file1); if (countPackages < 0) { printf("Error: dlt_user_log_file_packagesCount\n"); printTestResultPositiveExpected(__FUNCTION__, countPackages); return -1; } /*Just some log to the main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Started testF1P2 - transfer single package"), DLT_STRING(file1)); /*Logs the header of the file transfer. For more details see Mainpage.c. */ /*The header gives information about the file serial number, filename (with absolute path), filesize, packages of file, buffer size */ transferResult = dlt_user_log_file_header(&fileContext, file1); if (transferResult >= 0) { /*Loop to log all packages */ for (i = 1; i <= countPackages; i++) { dlt_user_check_buffer(&total_size, &used_size); if ((total_size - used_size) < (total_size / 2)) { printf("Error: dlt_user_log_file_data\n"); printTestResultPositiveExpected(__FUNCTION__, transferResult); break; } /*Logs one single package to the file context */ transferResult = dlt_user_log_file_data(&fileContext, file1, i, 20); if (transferResult < 0) { printf("Error: dlt_user_log_file_data\n"); printTestResultPositiveExpected(__FUNCTION__, transferResult); return transferResult; } } /*Logs the end of the file transfer. For more details see Mainpage.c */ /*The end gives just information about the file serial number but is needed to signal that the file transfer has correctly finished and needed for the file transfer plugin of the dlt viewer. */ transferResult = dlt_user_log_file_end(&fileContext, file1, 0); if (transferResult < 0) { printf("Error: dlt_user_log_file_end\n"); printTestResultPositiveExpected(__FUNCTION__, transferResult); return transferResult; } } else { printf("Error: dlt_user_log_file_header\n"); printTestResultPositiveExpected(__FUNCTION__, transferResult); return transferResult; } /*Just some log to main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Finished testF1P2 - transfer single package"), DLT_STRING(file1)); printTestResultPositiveExpected(__FUNCTION__, transferResult); return 0; } /*!Test the file transfer with the condition that the transferred file is bigger as the file transfer buffer using dlt_user_log_file_complete. */ int testFile2Run1() { /*Just some log to main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Started testF2P1 - dlt_user_log_file_complete"), DLT_STRING(file2)); /*Here's the line where the dlt file transfer is called. The method call needs a context, the absolute file path, will the file be deleted after transfer and the timeout between the packages */ transferResult = dlt_user_log_file_complete(&fileContext, file2, 0, 20); if (transferResult < 0) { printf("Error: dlt_user_log_file_complete\n"); printTestResultPositiveExpected(__FUNCTION__, transferResult); return transferResult; } /*Just some log to main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Finished testF2P1"), DLT_STRING(file2)); printTestResultPositiveExpected(__FUNCTION__, transferResult); return transferResult; } /*!Test the file transfer with the condition that the transferred file is bigger as the file transfer buffer using single package transfer */ int testFile2Run2() { int total_size, used_size; /*Get the information how many packages have the file */ countPackages = dlt_user_log_file_packagesCount(&fileContext, file2); if (countPackages < 0) { printf("Error: dlt_user_log_file_packagesCount\n"); printTestResultPositiveExpected(__FUNCTION__, countPackages); return -1; } /*Just some log to the main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Started testF2P2 - transfer single package"), DLT_STRING(file2)); /*Logs the header of the file transfer. For more details see Mainpage.c. */ /*The header gives information about the file serial number, filename (with absolute path), filesize, packages of file, buffer size */ transferResult = dlt_user_log_file_header(&fileContext, file2); if (transferResult >= 0) { /*Loop to log all packages */ for (i = 1; i <= countPackages; i++) { dlt_user_check_buffer(&total_size, &used_size); if ((total_size - used_size) < (total_size / 2)) { printf("Error: dlt_user_log_file_data\n"); printTestResultPositiveExpected(__FUNCTION__, transferResult); break; } /*Logs one single package to the file context */ transferResult = dlt_user_log_file_data(&fileContext, file2, i, 20); if (transferResult < 0) { printf("Error: dlt_user_log_file_data\n"); printTestResultPositiveExpected(__FUNCTION__, transferResult); return transferResult; } } /*Logs the end of the file transfer. For more details see Mainpage.c */ /*The end gives just information about the file serial number but is needed to signal that the file transfer has correctly finished and needed for the file transfer plugin of the dlt viewer. */ transferResult = dlt_user_log_file_end(&fileContext, file2, 0); if (transferResult < 0) { printf("Error: dlt_user_log_file_end\n"); printTestResultPositiveExpected(__FUNCTION__, transferResult); return transferResult; } } else { printf("Error: dlt_user_log_file_header\n"); printTestResultPositiveExpected(__FUNCTION__, transferResult); return transferResult; } /*Just some log to the main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Finished testF2P2"), DLT_STRING(file2)); printTestResultPositiveExpected(__FUNCTION__, transferResult); return 0; } /*!Test the file transfer with the condition that the transferred file does not exist using dlt_user_log_file_complete. */ int testFile3Run1() { /*Just some log to the main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Started testF3P1"), DLT_STRING(file3_1)); /*Here's the line where the dlt file transfer is called. The method call needs a context, the absolute file path, will the file be deleted after transfer and the timeout between the packages */ transferResult = dlt_user_log_file_complete(&fileContext, file3_1, 0, 20); if (transferResult < 0) { /*Error expected because file doesn't exist */ /*printf("Error: dlt_user_log_file_complete\n"); */ /*Just some log to the main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Finished testF3P1"), DLT_STRING(file3_1)); printTestResultNegativeExpected(__FUNCTION__, transferResult); return transferResult; } printTestResultNegativeExpected(__FUNCTION__, transferResult); return transferResult; } /*!Test the file transfer with the condition that the transferred file does not exist using single package transfer */ int testFile3Run2() { /*Get the information how many packages have the file */ countPackages = dlt_user_log_file_packagesCount(&fileContext, file3_2); if (countPackages < 0) { /*Error expected because file doesn't exist */ /*printf("Error: dlt_user_log_file_packagesCount\n"); */ /*Just some log to the main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Finished testF3P1"), DLT_STRING(file3_2)); printTestResultNegativeExpected(__FUNCTION__, countPackages); return -1; } /*Just some log to the main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Started testF3P1"), DLT_STRING(file3_2)); /*Logs the header of the file transfer. For more details see Mainpage.c. */ /*The header gives information about the file serial number, filename (with absolute path), filesize, packages of file, buffer size */ transferResult = dlt_user_log_file_header(&fileContext, file3_2); if (transferResult >= 0) { /*Loop to log all packages */ for (i = 1; i <= countPackages; i++) { /*Logs one single package to the file context */ transferResult = dlt_user_log_file_data(&fileContext, file3_2, i, 20); if (transferResult < 0) { printf("Error: dlt_user_log_file_data\n"); printTestResultNegativeExpected(__FUNCTION__, transferResult); return transferResult; } } /*Logs the end of the file transfer. For more details see Mainpage.c */ /*The end gives just information about the file serial number but is needed to signal that the file transfer has correctly finished and needed for the file transfer plugin of the dlt viewer. */ transferResult = dlt_user_log_file_end(&fileContext, file3_2, 0); if (transferResult < 0) { printf("Error: dlt_user_log_file_end\n"); printTestResultNegativeExpected(__FUNCTION__, transferResult); return transferResult; } } printTestResultNegativeExpected(__FUNCTION__, transferResult); return 0; } /*!Logs some information about the file. */ int testFile3Run3() { /*Just some log to the main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Started testF3P2"), DLT_STRING(file3_3)); /*Here's the line where the dlt file file info is called. The method call logs some information to dlt about the file, filesize, file serial number and number of packages */ transferResult = dlt_user_log_file_infoAbout(&fileContext, file3_3); if (transferResult < 0) { /*Error expected because file doesn't exist */ /*printf("Error: dlt_user_log_file_infoAbout\n"); */ /*Just some log to the main context */ DLT_LOG(mainContext, DLT_LOG_INFO, DLT_STRING("Finished testF3P2"), DLT_STRING(file3_3)); printTestResultNegativeExpected(__FUNCTION__, transferResult); return transferResult; } printTestResultNegativeExpected(__FUNCTION__, transferResult); return 0; } void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-test-filestransfer [options]\n"); printf("Test filestransfer application by transfering files.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -h display help information\n"); printf(" -t absolute path to a text file\n"); printf(" -i absolute path to an image file\n"); } /*!Main program dlt-test-filestransfer starts here */ int main(int argc, char* argv[]) { int c; /*First file contains some text */ file1 = "/usr/local/share/dlt-filetransfer/dlt-test-filetransfer-file"; /*Second file is a picture */ file2 = "/usr/local/share/dlt-filetransfer/dlt-test-filetransfer-image.png"; /*Third file doesn't exist. Just to test the reaction when the file isn't available. */ file3_1 = "dlt-test-filetransfer-doesntExist_1"; /*Third file doesn't exist. Just to test the reaction when the file isn't available. */ file3_2 = "dlt-test-filetransfer-doesntExist_2"; /*Third file doesn't exist. Just to test the reaction when the file isn't available. */ file3_3 = "dlt-test-filetransfer-doesntExist_3"; while((c = getopt(argc, argv, "ht:i:")) != -1) { switch (c) { case 't': { file1 = optarg; break; } case 'i': { file2 = optarg; break; } case 'h': { usage(); return 0; } default: { usage(); return -1; } } } /*Register the application at the dlt-daemon */ DLT_REGISTER_APP("FLTR", "Test Application filetransfer"); /*Register the context of the main program at the dlt-daemon */ DLT_REGISTER_CONTEXT(mainContext, "MAIN", "Main context for filetransfer test"); /*Register the context in which the file transfer will be logged at the dlt-daemon */ DLT_REGISTER_CONTEXT(fileContext, "FLTR", "Test Context for filetransfer"); /*More details in corresponding methods */ testFile1Run1(); testFile1Run2(); testFile2Run1(); testFile2Run2(); testFile3Run1(); testFile3Run2(); testFile3Run3(); /*Unregister the context in which the file transfer happened from the dlt-daemon */ DLT_UNREGISTER_CONTEXT(fileContext); /*Unregister the context of the main program from the dlt-daemon */ DLT_UNREGISTER_CONTEXT(mainContext); /*Unregister the app from the dlt-daemon */ DLT_UNREGISTER_APP(); return g_numFailed == 0 ? 0 : 1; } dlt-daemon-2.18.6/src/tests/dlt-test-fork-handler.c000066400000000000000000000044171377520261000220540ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Intel Corporation * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Stefan Vacek Intel Corporation * * \copyright Copyright Š 2015 Intel Corporation. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-fork-handler.c */ #include /* for fork() */ #include #include #include "dlt.h" /** * @brief sample code for using at_fork-handler */ int main() { DltContext mainContext; struct timespec timeout, r; timeout.tv_sec = 0; timeout.tv_nsec = 200000000L; DLT_REGISTER_APP("PRNT", "Parent application"); DLT_REGISTER_CONTEXT(mainContext, "CTXP", "Parent context"); DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("First message before fork")); nanosleep(&timeout, &r); pid_t pid = fork(); if (pid == 0) { /* child process */ /* this message should not be visible */ DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("Child's first message after fork, pid: "), DLT_INT32(getpid())); /* this will not register CHLD application */ DLT_REGISTER_APP("CHLD", "Child application"); /* this will not register CTXC context */ DLT_REGISTER_CONTEXT(mainContext, "CTXC", "Child context"); /* this will not log a message */ DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("Child's second message after fork, pid: "), DLT_INT32(getpid())); nanosleep(&timeout, &r); if (execlp("dlt-example-user", "dlt-example-user", "-n 1", "you should see this message", NULL)) return errno; } else if (pid == -1) /* error in fork */ { return -1; } else { /* parent */ DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("Parent's first message after fork, pid: "), DLT_INT32(getpid())); nanosleep(&timeout, &r); } DLT_UNREGISTER_APP() ; return 0; } dlt-daemon-2.18.6/src/tests/dlt-test-init-free.c000066400000000000000000000057761377520261000213730ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Sven Hassler * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-init-free.c */ #include #include #include #include #include "dlt_common.h" #include "dlt_user.h" void exec(const char *cmd, char *buffer, size_t length); void printMemoryUsage(); char *occupyMemory(int size); void do_example_test(); void do_dlt_test(); int num_repetitions; int main(int argc, char **argv) { if (argc > 1) num_repetitions = (int) strtol(argv[1], 0, 10); else num_repetitions = 1000; printf("Will do %d repetitions.\n", num_repetitions); /*do_example_test(); */ do_dlt_test(); printf("Done.\n"); return 0; } /* Should increase and then decrease memory amount. */ void do_example_test() { const int immediatelyFree = 0; int numBufs = 1024; int sizePerBuf = 1024 * 1024; /* 1MB */ char **bufs = (char **)malloc(numBufs * sizeof(char *)); for (int i = 0; i < numBufs; i++) { bufs[i] = occupyMemory(sizePerBuf); printf("after alloc: "); printMemoryUsage(); if (immediatelyFree) { free(bufs[i]); printf("after free: "); printMemoryUsage(); } } printf("deleting memory:\n"); if (!immediatelyFree) for (int i = 0; i < numBufs; i++) { /*for (int i = numBufs - 1; i >= 0; i--) // other way round works, too */ free(bufs[i]); printf("after free: "); printMemoryUsage(); } free(bufs); } /* Should give stable amount of memory across all iterations. */ void do_dlt_test() { for (int i = 0; i < num_repetitions; i++) { dlt_init(); dlt_free(); printf("Iteration %d) - currently used memory amount: ", i); printMemoryUsage(); } } void exec(const char *cmd, char *buffer, size_t length) { FILE *pipe = NULL; strncpy(buffer, "ERROR", length); if ((pipe = popen(cmd, "r")) == NULL) return; while (fgets(buffer, (int) length, pipe) != NULL); if (pipe != NULL) pclose(pipe); } void printMemoryUsage() { char result[128] = { 0 }; char command[128] = { 0 }; snprintf(command, sizeof(command), "pmap %d | grep total", getpid()); exec(command, result, sizeof(result)); printf("%s", result); } char *occupyMemory(int size) { char *buf = (char *)malloc(size * sizeof(char)); for (int i = 0; i < 1; i++) buf[i] = 1; return buf; } dlt-daemon-2.18.6/src/tests/dlt-test-multi-process-client.c000066400000000000000000000230161377520261000235560ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Lassi Marttala * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-multi-process-client.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-test-multi-process-client.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Lassi Marttala ** ** ** ** PURPOSE : Receive, validate and measure data from multi process tester ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /* System includes */ #include #include #include #include #include #include #include /* DLT Library includes */ #include "dlt_client.h" #include "dlt_protocol.h" #include "dlt_user.h" /* PRivate includes */ #include "dlt-test-multi-process.h" /* Local data structures */ typedef struct { int max_messages; int verbose; int serial; int baudrate; char *output; int output_handle; int messages_left; DltClient *client_ref; } s_parameters; typedef struct { int messages_received; int broken_messages_received; int bytes_received; int first_message_time; int output_bytes; } s_statistics; /* Forward declarations */ int receive(DltMessage *msg, void *data); /** * Print usage information */ void usage(char *name) { char version[255]; dlt_get_version(version, 255); printf("Usage: %s [options] \n", name); printf("Receive messages from dlt-test-multi-process.\n"); printf("%s", version); printf("Options:\n"); printf(" -m Total messages to receive. (Default: 10000)\n"); printf(" -y Serial device mode.\n"); printf(" -b baudrate Serial device baudrate. (Default: 115200)\n"); printf(" -v Verbose. Increases the verbosity level of dlt client library.\n"); printf(" -o filename Output messages in new DLT file.\n"); } /** * Initialize reasonable default parameters. */ void init_params(s_parameters *params) { params->max_messages = 10000; params->verbose = 0; params->serial = 0; params->output = NULL; params->output_handle = -1; params->baudrate = 115200; } /** * Read the command line parameters */ int read_params(s_parameters *params, int argc, char *argv[]) { init_params(params); int c; opterr = 0; while ((c = getopt(argc, argv, "m:yb:vo:")) != -1) switch (c) { case 'm': params->max_messages = atoi(optarg); break; case 'y': params->serial = 1; break; case 'b': params->baudrate = atoi(optarg); break; case 'v': params->verbose = 1; break; case 'o': params->output = optarg; break; case '?': if ((optopt == 'm') || (optopt == 'b') || (optopt == 'o')) fprintf(stderr, "Option -%c requires an argument.\n", optopt); if (isprint(optopt)) fprintf(stderr, "Unknown option '-%c'.\n", optopt); else fprintf(stderr, "Unknown option character '\\x%x'.\n", optopt); return -1; break; default: return -1; } return 0; } /** * Set the connection parameters for dlt client */ int init_dlt_connect(DltClient *client, const s_parameters *params, int argc, char *argv[]) { char id[4]; if (argc < 2) return -1; if (params->serial > 0) { client->mode = 1; if (dlt_client_set_serial_device(client, argv[argc - 1]) == -1) { fprintf(stderr, "set serial device didn't succeed\n"); return -1; } dlt_client_setbaudrate(client, params->baudrate); } else if (dlt_client_set_server_ip(client, argv[argc - 1]) == -1) { fprintf(stderr, "set serial ip didn't succeed\n"); return -1; } dlt_set_id(id, ECUID); return 0; } /** * Entry point */ int main(int argc, char *argv[]) { s_parameters params; DltClient client; params.client_ref = &client; int err = read_params(¶ms, argc, argv); if (err != 0) { usage(argv[0]); return err; } dlt_client_init(&client, params.verbose); dlt_client_register_message_callback(receive); err = init_dlt_connect(&client, ¶ms, argc, argv); if (err != 0) { usage(argv[0]); return err; } err = dlt_client_connect(&client, params.verbose); if (err != DLT_RETURN_OK) { printf("Failed to connect %s.\n", client.mode > 0 ? client.serialDevice : client.servIP); return err; } if (params.output) { params.output_handle = open(params.output, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); if (params.output_handle == -1) { fprintf(stderr, "Failed to open %s for writing.\n", params.output); return -1; } } params.messages_left = params.max_messages; dlt_client_main_loop(&client, ¶ms, params.verbose); if (params.output_handle > 0) close(params.output_handle); return 0; } /** * Print current test statistics */ void print_stats(s_statistics stats, s_parameters params) { static int last_print_time; if ((last_print_time >= time(NULL)) && /* Only print once a second */ ((stats.messages_received + stats.broken_messages_received) % 1000 != 0) && (params.messages_left != 0)) /* Print also every 1000th message */ return; printf("\033[2J\033[1;1H"); /* Clear screen. */ printf("Statistics:\n"); printf(" Messages received : %d\n", stats.messages_received); printf(" Broken messages received : %d\n", stats.broken_messages_received); printf(" Bytes received : %d\n", stats.bytes_received); printf(" Time running (seconds) : %ld\n", time(NULL) - stats.first_message_time); printf(" Throughput (msgs/sec)/(B/sec) : %ld/%ld\n", stats.messages_received / ((time(NULL) - stats.first_message_time) + 1), (stats.bytes_received) / ((time(NULL) - stats.first_message_time) + 1)); if (params.messages_left == 0) { if (stats.broken_messages_received == 0) printf("All messages received succesfully!\n"); else printf("Test failure! There were %d broken messages.", stats.broken_messages_received); } fflush(stdout); last_print_time = (int) time(NULL); } /** * Callback for dlt client */ int receive(DltMessage *msg, void *data) { static s_statistics stats; char apid[5]; struct iovec iov[2]; s_parameters *params = (s_parameters *)data; memset(apid, 0, 5); memcpy(apid, msg->extendedheader->apid, 4); if ((apid[0] != 'M') || (apid[1] != 'T')) /* TODO: Check through the app description */ return 0; params->messages_left--; if (stats.first_message_time == 0) stats.first_message_time = time(NULL); int buflen = (int) msg->datasize + 1; char *buf = malloc((size_t) buflen); if (buf == 0) { printf("Out of memory\n"); return -1; } memset(buf, 0, (size_t) buflen); dlt_message_payload(msg, buf, buflen - 1, DLT_OUTPUT_ASCII, 0); if (strcmp(buf, PAYLOAD_DATA) == 0) stats.messages_received++; else stats.broken_messages_received++; stats.bytes_received += msg->datasize + msg->headersize - sizeof(DltStorageHeader); free(buf); print_stats(stats, *params); if (params->output_handle > 0) { iov[0].iov_base = msg->headerbuffer; iov[0].iov_len = msg->headersize; iov[1].iov_base = msg->databuffer; iov[1].iov_len = msg->datasize; stats.output_bytes += (int) writev(params->output_handle, iov, 2); } if (params->messages_left < 1) dlt_client_cleanup(params->client_ref, params->verbose); return 0; } dlt-daemon-2.18.6/src/tests/dlt-test-multi-process.c000066400000000000000000000277761377520261000223230ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Lassi Marttala * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-multi-process.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-test-multi-process.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Lassi Marttala Lassi.LM.Marttala@partner.bmw.de ** ** ** ** PURPOSE : Stress test timing using multiple processes ** ** ** ** REMARKS : Requires POSIX fork() ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include "dlt.h" #include "dlt_common.h" #include "dlt-test-multi-process.h" /* Constants */ #define MAX_PROCS 100 #define MAX_THREADS 100 #define MAX_LOG_LENGTH 1024 #ifndef WAIT_ANY # define WAIT_ANY -1 #endif /* Structs */ typedef struct { int nmsgs; /* Number of messages to send */ int nprocs; /* Number of processes to start */ int nthreads; /* Number of threads to start */ int nloglength; /* Length of Log message */ int delay; /* Delay between logs messages for each process */ int delay_fudge; /* Fudge the delay by 0-n to cause desynchronization */ bool generate_ctid; /* true: To generate context Id from App Id + Thread Number */ } s_parameters; typedef struct { s_parameters params; DltContext ctx; unsigned int pidcount; unsigned int tidcount; } s_thread_data; /* Forward declarations */ void init_params(s_parameters *params); void quit_handler(int signum); void cleanup(); void do_forks(s_parameters params); void run_threads(s_parameters params); void do_logging(s_thread_data *data); int wait_for_death(); /* State information */ volatile sig_atomic_t in_handler = 0; /* Globals for cleanup from main and signal handler */ pid_t pids[MAX_PROCS]; unsigned int pidcount = 0; /** * Print instructions. */ void usage(char *prog_name) { char version[255]; dlt_get_version(version, 255); s_parameters defaults; init_params(&defaults); printf("Usage: %s [options]\n", prog_name); printf("Test application for stress testing the daemon with multiple processes and threads.\n"); printf("%s\n", version); printf("Options (Default):\n"); printf(" -m number Number of messages per thread to send. (%d)\n", defaults.nmsgs); printf(" -p number Number of processes to start. (%d), Max %d.\n", defaults.nprocs, MAX_PROCS); printf(" -t number Number of threads per process. (%d), Max %d.\n", defaults.nthreads, MAX_THREADS); printf(" -l number Length of log message. (%d)\n", defaults.nloglength); printf(" -d delay Delay in milliseconds to wait between log messages. (%d)\n", defaults.delay); printf(" -f delay Random fudge in milliseconds to add to delay. (%d)\n", defaults.delay_fudge); printf(" -g Generate Context IDs from Application ID and thread number \n"); } /** * Set nice default values for parameters */ void init_params(s_parameters *params) { params->nmsgs = 100; params->nprocs = 10; params->nthreads = 2; params->nloglength = 40; params->delay = 1000; params->delay_fudge = 100; params->generate_ctid = false; } /** * Read the command line and modify parameters */ int read_cli(s_parameters *params, int argc, char **argv) { int c; opterr = 0; while ((c = getopt (argc, argv, "m:p:t:l:d:f:g")) != -1) switch (c) { case 'm': params->nmsgs = atoi(optarg); break; case 'p': params->nprocs = atoi(optarg); if (params->nprocs > MAX_PROCS) { fprintf(stderr, "Too many processes selected.\n"); return -1; } break; case 't': params->nthreads = atoi(optarg); if (params->nthreads > MAX_THREADS) { fprintf(stderr, "Too many threads selected.\n"); return -1; } break; case 'l': params->nloglength = atoi(optarg); if(params->nloglength > MAX_LOG_LENGTH) { fprintf(stderr, "Too long log message selected.\n"); return -1; } break; case 'd': params->delay = atoi(optarg); break; case 'f': params->delay_fudge = atoi(optarg); break; case 'g': params->generate_ctid = true; break; case '?': if ((optopt == 'l') || (optopt == 'd') || (optopt == 'f')) fprintf(stderr, "Option -%c requires an argument.\n", optopt); else if (isprint(optopt)) fprintf(stderr, "Unknown option '-%c'.\n", optopt); else fprintf(stderr, "Unknown option character '\\x%x'.\n", optopt); return -1; break; default: abort(); return -1; /*for parasoft */ } return 0; } /** * Entry point */ int main(int argc, char **argv) { /* Prepare parameters */ s_parameters params; init_params(¶ms); if (read_cli(¶ms, argc, argv) != 0) { usage(argv[0]); exit(-1); } /* Launch the child processes */ do_forks(params); /* Register signal handlers */ if (signal(SIGINT, quit_handler) == SIG_IGN) signal(SIGINT, SIG_IGN); /* C-c */ if (signal(SIGHUP, quit_handler) == SIG_IGN) signal(SIGHUP, SIG_IGN); /* Terminal closed */ if (signal(SIGTERM, quit_handler) == SIG_IGN) signal(SIGTERM, SIG_IGN); /* kill (nice) */ printf("Setup done. Listening. My pid: %d\n", getpid()); fflush(stdout); int err = wait_for_death(); cleanup(); return err; } /** * Start the child processes */ void do_forks(s_parameters params) { int i; /* Launch child processes */ for (i = 0; i < params.nprocs; i++) { pid_t pid = fork(); switch (pid) { case -1: /* An error occured */ if (errno == EAGAIN) { fprintf(stderr, "Could not allocate resources for child process.\n"); cleanup(); abort(); } if (errno == ENOMEM) { fprintf(stderr, "Could not allocate memory for child process' kernel structure.\n"); cleanup(); abort(); } break; case 0: /* Child process, start threads */ run_threads(params); break; default: /* Parent process, store the childs pid */ pids[pidcount++] = pid; break; } } } /** * Clean up the child processes. * Reraise signal to default handler. */ void quit_handler(int signum) { if (in_handler) raise(signum); in_handler = 1; cleanup(); signal(signum, SIG_DFL); raise(signum); } /** * Ask the child processes to die */ void cleanup() { unsigned int i; for (i = 0; i < pidcount; i++) kill(pids[i], SIGINT); } /** * Generate the next sleep time */ time_t mksleep_time(int delay, int fudge) { if (!fudge) return delay*1000000; else return (delay+rand()%fudge)*1000000; } /** * Open logging channel and proceed to spam messages */ void do_logging(s_thread_data *data) { DltContext mycontext; char ctid[5]; char ctid_name[256]; struct timespec ts; time_t sleep_time; int i = 0; int n = 0; char *logmsg = NULL; if(data->params.generate_ctid) snprintf(ctid, 5, "%02u%02u", data->pidcount, data->tidcount); else snprintf(ctid, 5, "CT%02u", data->tidcount); snprintf(ctid_name, 256, "Child %s in dlt-test-multi-process", ctid); DLT_REGISTER_CONTEXT(mycontext, ctid, ctid_name); int msgs_left = data->params.nmsgs; logmsg = calloc(1, (size_t) (data->params.nloglength + 1)); if (logmsg == NULL) { printf("Error allocate memory for message.\n"); DLT_UNREGISTER_CONTEXT(mycontext); abort(); } for(i = 0; i < data->params.nloglength; i++) { n = 'A' + i; if(n > 90) { n = 'A' + (n - 91) % 26; } logmsg[i] = (char) n; } while (msgs_left-- > 0) { DLT_LOG(mycontext, DLT_LOG_INFO, DLT_STRING(logmsg)); sleep_time = mksleep_time(data->params.delay, data->params.delay_fudge); ts.tv_sec = sleep_time / 1000000000; ts.tv_nsec = sleep_time % 1000000000; nanosleep(&ts, NULL); } if (logmsg) { free(logmsg); logmsg = NULL; } DLT_UNREGISTER_CONTEXT(mycontext); } /** * Start the threads and wait for them to return. */ void run_threads(s_parameters params) { pthread_t thread[params.nthreads]; s_thread_data *thread_data = NULL; char apid[5]; char apid_name[256]; int i; srand((unsigned int) getpid()); snprintf(apid, 5, "MT%02u", pidcount); snprintf(apid_name, 256, "Apps %s.", apid); DLT_REGISTER_APP(apid, apid_name); thread_data = calloc( (size_t) params.nthreads, sizeof(s_thread_data)); if (thread_data == NULL) { printf("Error allocate memory for thread data.\n"); abort(); } for (i = 0; i < params.nthreads; i++) { thread_data[i].tidcount = (unsigned int) i; thread_data[i].params = params; thread_data[i].pidcount = pidcount; if (pthread_create(&(thread[i]), NULL, (void *)&do_logging, &thread_data[i]) != 0) { printf("Error creating thread.\n"); abort(); } } for (i = 0; i < params.nthreads; i++) pthread_join(thread[i], NULL); if(thread_data) free(thread_data); DLT_UNREGISTER_APP(); /* We can exit now */ exit(0); } /** * Wait for child processes to complete their work. */ int wait_for_death() { int pids_left = (int) pidcount; while (pids_left > 0) { int status; pid_t w = waitpid(WAIT_ANY, &status, 0); if (status < 0) { return -1; } else { unsigned int i; for (i = 0; i < pidcount; i++) if (pids[i] == w) { pids_left--; break; } } } return 0; } dlt-daemon-2.18.6/src/tests/dlt-test-multi-process.h000066400000000000000000000015721377520261000223120ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Lassi Marttala * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-multi-process.h */ #ifndef DLT_TEST_MULTI_PROCESS_H_ #define DLT_TEST_MULTI_PROCESS_H_ #define DMPT_NAME "DMPT" #define PAYLOAD_DATA "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMN" #define ECUID "ECU1" #endif /* DLT_TEST_MULTI_PROCESS_H_ */ dlt-daemon-2.18.6/src/tests/dlt-test-non-verbose.c000066400000000000000000000406731377520261000217410ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! *author * Onkar Palkar * *copyright Copyright Š 2015 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * *file dlt-test-non-verbose.c */ #include #include #include #include #include #include "dlt.h" /* data for real life message test */ #define DLT_COMMON_BUFFER_LENGTH 255 #define MAXSTRLEN 1024 #define DLT_MODULE_ID 0x0154 #define DLT_MSG_ID_1 0x0032 #define DLT_MSG_ID_2 0x0033 #define DLT_MSG_ID_3 0x0009 #define DLT_MSG_ID_4 0x000c #define DLT_MSG_ID_5 0x0004 #define DLT_MSG_ID_6 0x0009 #define LOG_DELAY 200 * 1000 #define NUM_LOG_MSGS 10 #define DEFAULT_WAIT_TIMEOUT 1000 DLT_DECLARE_CONTEXT(context_info) DLT_DECLARE_CONTEXT(context_log); DLT_DECLARE_CONTEXT(context_macro_test) DltContext context_function_test; DltContextData context_data; void dlt_user_log_level_changed_callback(char context_id[DLT_ID_SIZE],uint8_t log_level,uint8_t trace_status); void usage() { char version[DLT_COMMON_BUFFER_LENGTH]; dlt_get_version(version, DLT_COMMON_BUFFER_LENGTH); printf("Usage: dlt-test-non-verbose [options]\n"); printf("Test user application providing several Tests.\n"); printf("%s\n", version); printf("Options:\n"); printf(" -a run all tests \n"); printf(" -i test all types (macro interface and functional interface)\n"); printf(" -l message for log storage test\n"); printf(" -r real data\n"); printf(" -o Log level test \n"); printf(" -h this help\n"); printf("\nTests:\n"); printf(" 01: (Macro IF) Test all variable types (non-verbose)\n"); printf(" 02: (Function IF) Test all variable types (non-verbose)\n"); printf(" 03: Test Logstorage messages (non-verbose)\n"); printf(" 04: Test real life messages (non-verbose)\n"); } /******************/ /* The test cases */ /******************/ int test_logstorage() { int delay = LOG_DELAY; int i; DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test Logstorage messages")); printf("Test01: Sending log messages with level :\n"); printf(" FATAL\n"); printf(" ERROR\n"); printf(" WARN\n"); printf("Test01: Check DLT viewer\n"); printf("Test01: Log messages with FATAL," "ERROR should be seen\n"); printf("Test01: Connect USB to TARGET\n"); for(i = 1 ; i <= NUM_LOG_MSGS ; i++) { printf("Send log message %d\n", i); DLT_LOG_ID(context_log,DLT_LOG_FATAL, 1000, DLT_CSTRING("DLT Log Storage Test"), DLT_INT(i)); DLT_LOG_ID(context_log,DLT_LOG_ERROR, 1001, DLT_CSTRING("DLT Log Storage Test"), DLT_INT(i)); DLT_LOG_ID(context_log,DLT_LOG_WARN, 1002, DLT_CSTRING("DLT Log Storage Test"), DLT_INT(i)); usleep(delay); } printf("Test01: Remove USB from TARGET\n"); printf("Test01: Open log file stored in USB using DLT viewer\n"); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test Logstorage messages finished")); return 0; } int test_loglevel(int wait_duration) { DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test log level")); sleep(wait_duration); return 0; } int test_macro_interface(void) { char buffer[10]; int num2; printf("Test02: (Macro IF) Test all variable types (non-verbose)\n"); DLT_LOG(context_info, DLT_LOG_INFO,DLT_STRING ("Test02: (Macro IF) Test all variable types (non-verbose)")); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 1, DLT_STRING("string"), DLT_STRING("Hello world")); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 2, DLT_STRING("utf8"), DLT_UTF8("Hello world")); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 3, DLT_STRING("bool"), DLT_BOOL(1)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 4, DLT_STRING("int"), DLT_INT(INT32_MIN)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 5, DLT_STRING("int8"), DLT_INT8(INT8_MIN)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 6, DLT_STRING("int16"), DLT_INT16(INT16_MIN)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 7, DLT_STRING("int32"), DLT_INT32(INT32_MIN)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 8, DLT_STRING("int64"), DLT_INT64(INT64_MIN)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 9, DLT_STRING("uint"), DLT_UINT(UINT32_MAX)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 10, DLT_STRING("uint8"), DLT_UINT8(UINT8_MAX)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 11, DLT_STRING("uint16"), DLT_UINT16(UINT16_MAX)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 12, DLT_STRING("uint32"), DLT_UINT32(UINT32_MAX)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 13, DLT_STRING("uint64"), DLT_UINT64(UINT64_MAX)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 14, DLT_STRING("float32"), DLT_FLOAT32(FLT_MIN), DLT_FLOAT32(FLT_MAX)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 15, DLT_STRING("float64"), DLT_FLOAT64(DBL_MIN), DLT_FLOAT64(DBL_MAX)); for(num2 = 0 ; num2 < 10 ; num2++) { buffer[num2] = (char) num2; } DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, 14, DLT_STRING("raw"), DLT_RAW(buffer, 10)); sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test02: (Macro IF) finished")); return 0; } int test_function_interface(void) { char buffer[10]; int num2; printf("Test03: (Function IF) Test all variable types (non-verbose)\n"); if (dlt_user_log_write_start(&context_info, &context_data,DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test03: (Function IF) Test all variable types (non-verbose)"); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data,DLT_LOG_INFO, 1) > 0) { dlt_user_log_write_string(&context_data, "bool"); dlt_user_log_write_bool(&context_data, 1); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 2) > 0) { dlt_user_log_write_string(&context_data, "int"); dlt_user_log_write_int(&context_data, INT32_MIN);/* (-2147483647-1) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 3) > 0) { dlt_user_log_write_string(&context_data, "int8"); dlt_user_log_write_int8(&context_data, INT8_MIN); /* (-128) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO,4) > 0) { dlt_user_log_write_string(&context_data, "int16"); dlt_user_log_write_int16(&context_data, INT16_MIN);/* (-32767-1) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 5) > 0) { dlt_user_log_write_string(&context_data, "int32"); dlt_user_log_write_int32(&context_data, INT32_MIN);/*(-2147483647-1)*/ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 6) > 0) { dlt_user_log_write_string(&context_data, "int64"); dlt_user_log_write_int64(&context_data, INT64_MIN); /* (-__INT64_C(9223372036854775807)-1) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 7) > 0) { dlt_user_log_write_string(&context_data, "uint"); dlt_user_log_write_uint(&context_data, UINT32_MAX);/* (4294967295U)*/ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 8) > 0) { dlt_user_log_write_string(&context_data, "uint8"); dlt_user_log_write_uint8(&context_data, UINT8_MAX);/* (255) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 9) > 0) { dlt_user_log_write_string(&context_data, "uint16"); dlt_user_log_write_uint16(&context_data, UINT16_MAX);/* (65535) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 10) > 0) { dlt_user_log_write_string(&context_data,"uint32"); dlt_user_log_write_uint32(&context_data,UINT32_MAX);/* (4294967295U)*/ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 11) > 0) { dlt_user_log_write_string(&context_data,"uint64"); dlt_user_log_write_uint64(&context_data,UINT64_MAX); /* (__UINT64_C(18446744073709551615)) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 12) > 0) { dlt_user_log_write_string(&context_data,"float32"); dlt_user_log_write_float32(&context_data,FLT_MIN); dlt_user_log_write_float32(&context_data,FLT_MAX); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 13) > 0) { dlt_user_log_write_string(&context_data,"float64"); dlt_user_log_write_float64(&context_data,DBL_MIN); dlt_user_log_write_float64(&context_data,DBL_MAX); dlt_user_log_write_finish(&context_data); } for(num2 = 0 ; num2 < 10 ; num2++) { buffer[num2] = (char) num2; } if (dlt_user_log_write_start_id(&(context_function_test), &context_data, DLT_LOG_INFO, 14) > 0) { dlt_user_log_write_string(&context_data, "raw"); dlt_user_log_write_raw(&context_data,buffer, 10); dlt_user_log_write_finish(&context_data); } sleep(2); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test03: (Function IF) finished"); dlt_user_log_write_finish(&context_data); } return 0; } int test_real_data(void) { printf("Test04: Real data test (non-verbose)\n"); DLT_LOG(context_info, DLT_LOG_INFO,DLT_STRING("Test04: real life mesages" " (non-verbose)")); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, DLT_MSG_ID_1, DLT_UINT16(DLT_MODULE_ID), DLT_UINT8(0x98), DLT_UINT8(0x01)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, DLT_MSG_ID_2, DLT_UINT16(DLT_MODULE_ID), DLT_UINT8(0x64), DLT_UINT8(0x0)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, DLT_MSG_ID_3, DLT_UINT16(DLT_MODULE_ID), DLT_UINT8(0x31), DLT_UINT8(0x28)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, DLT_MSG_ID_4, DLT_UINT16(DLT_MODULE_ID), DLT_UINT8(0x30)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, DLT_MSG_ID_5, DLT_UINT16(DLT_MODULE_ID), DLT_UINT8(0x31), DLT_UINT8(0x02), DLT_UINT8(0x2c), DLT_UINT8(0x0f), DLT_UINT8(0x08), DLT_UINT8(0x01), DLT_UINT8(0x11)); DLT_LOG_ID(context_macro_test, DLT_LOG_INFO, DLT_MSG_ID_6, DLT_UINT16(DLT_MODULE_ID), DLT_UINT8(0x31), DLT_UINT8(0x28)); sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING (" Test04: real life mesages (non-verbose) finished")); return 0; } void dlt_user_log_level_changed_callback(char context_id[DLT_ID_SIZE],uint8_t log_level,uint8_t trace_status) { char text[5]; text[4]=0; memcpy(text,context_id,DLT_ID_SIZE); printf("Log level changed of context %s, LogLevel=%u, TraceState=%u \n",text,log_level,trace_status); } /** * Main function of tool. */ int main(int argc, char* argv[]) { int avalue = 0; int ivalue = 0; int lvalue = 0; int rvalue = 0; int ovalue = 0; int wait_timeout = DEFAULT_WAIT_TIMEOUT; int c; if(argc < 2) { printf("\nPlease enter valid option\n\n"); usage(); return -1; } while ((c = getopt (argc, argv, "ailrho:")) != -1) { switch (c) { case 'a': { avalue = 1; break; } case 'i': { ivalue = 1; break; } case 'l': { lvalue = 1; break; } case 'r': { rvalue = 1; break; } case 'h': { usage(); return 0; } case 'o': { ovalue = 1; wait_timeout = atoi(optarg); break; } case '?': { if (isprint (optopt)) { fprintf (stderr, "\nUnknown option `-%c'.\n\n", optopt); } else { fprintf (stderr, "\nUnknown option character `\\x%x'.\n\n", optopt); } usage(); return -1; } default: { abort (); return -1; } } } DLT_REGISTER_APP("DINT", "DLT Non-Verbose Interface Test"); DLT_REGISTER_CONTEXT(context_info, "INFO","Information context"); DLT_REGISTER_CONTEXT(context_log, "LOG", "Log Context"); DLT_REGISTER_CONTEXT(context_macro_test, "MACR", "Macro Test Context"); dlt_register_context(&(context_function_test), "FUNC", "Function Test Context"); DLT_REGISTER_LOG_LEVEL_CHANGED_CALLBACK(context_log, dlt_user_log_level_changed_callback); DLT_REGISTER_LOG_LEVEL_CHANGED_CALLBACK(context_macro_test, dlt_user_log_level_changed_callback); DLT_NONVERBOSE_MODE(); printf("Tests starting\n"); DLT_LOG(context_info, DLT_LOG_INFO,DLT_STRING("Tests starting")); if(avalue) { printf("Execute all tests\n"); test_logstorage(); sleep(1); test_macro_interface(); sleep(1); test_function_interface(); sleep(1); test_real_data(); } else if(ivalue) { printf("Test all different log interface types\n"); test_macro_interface(); sleep(1); test_function_interface(); } else if(lvalue) { printf("Log storage test\n"); test_logstorage(); } else if(rvalue) { printf("Real data test\n"); test_real_data(); } else if(ovalue) { printf("Log level test\n"); test_loglevel(wait_timeout); } printf("Tests finished\n"); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Tests finished")); DLT_UNREGISTER_CONTEXT(context_info); DLT_UNREGISTER_CONTEXT(context_log); DLT_UNREGISTER_CONTEXT(context_macro_test); dlt_unregister_context(&(context_function_test)); DLT_UNREGISTER_APP(); return 0; } dlt-daemon-2.18.6/src/tests/dlt-test-receiver-multiple-files.sh000077500000000000000000000037731377520261000244340ustar00rootroot00000000000000#!/bin/bash # check if dlt-daemon is running daemon_running=`/usr/bin/ps -C dlt-daemon | wc -l` daemon_pid=0 if [ "$daemon_running" -lt "2" ]; then echo "No daemon running, starting one myself" /usr/bin/dlt-daemon > /tmp/dlt_daemon_dlt_receiver_test.txt & daemon_pid=$! echo "daemon pid: " ${daemon_pid} else echo "dlt-daemon already running" fi # create a directory in /tmp where all logs will be stored output_dir=`mktemp -d /tmp/DLT_TESTING_XXXXXX` echo "Using directory " ${output_dir} # start dlt-receive (in background) and store PID echo "Starting dlt-receive" /usr/bin/dlt-receive -o ${output_dir}/dlt_test.dlt localhost & dlt_receive_pid=$! disown # start dlt-example-user to create some logs # sleep time: 100ms # number of messages: 10 /usr/bin/dlt-example-user -g -d 100 -n 10 TEST_MESSAGE_ONE # stop dlt-receive kill ${dlt_receive_pid} # show content of /tmp echo "log-file after first run" ls -l ${output_dir} # start dlt-receive (in background) and store PID echo "Starting dlt-receive" /usr/bin/dlt-receive -o ${output_dir}/dlt_test.dlt localhost & dlt_receive_pid=$! disown # start dlt-example-user to create some logs (use different number of messages) /usr/bin/dlt-example-user -d 100 -n 20 TEST_MESSAGE_TWO # show content of /tmp --> original file was overwritten kill ${dlt_receive_pid} echo "log-file after second run" ls -l ${output_dir} # start dlt-receive with small maximum file size (in background) and store PID echo "Starting dlt-receive" /usr/bin/dlt-receive -o ${output_dir}/dlt_test.dlt -c 3K localhost & dlt_receive_pid=$! disown # start dlt-example-user to create some logs (use even more messages then before) /usr/bin/dlt-example-user -d 20 -n 500 TEST_MESSAGE_THREE # show content of /tmp --> multiple files were created, the original file was preserved echo "log-file after third run (should show multiple files)" ls -l ${output_dir} # directory will not be cleaned up echo "Used directory " ${output_dir} if [ "${daemon_pid}" -ne "0" ]; then sleep 1 kill ${daemon_pid} fi dlt-daemon-2.18.6/src/tests/dlt-test-stress-client.c000066400000000000000000000440331377520261000222750ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-stress-client.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-test-stress-client.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include /* for isprint() */ #include /* for atoi() */ #include /* for strcmp() */ #include /* for writev() */ #include "dlt_client.h" #include "dlt_protocol.h" #include "dlt_user.h" #define DLT_TESTCLIENT_TEXTBUFSIZE 10024 /* Size of buffer for text output */ #define DLT_TESTCLIENT_ECU_ID "ECU1" #define DLT_TESTCLIENT_NUM_TESTS 7 /* Function prototypes */ int dlt_testclient_message_callback(DltMessage *message, void *data); typedef struct { int aflag; int sflag; int xflag; int mflag; int vflag; int yflag; char *ovalue; char *fvalue; char *tvalue; char *evalue; int nvalue; int bvalue; char ecuid[4]; int ohandle; DltFile file; DltFilter filter; int running_test; int test_counter_macro[DLT_TESTCLIENT_NUM_TESTS]; int test_counter_function[DLT_TESTCLIENT_NUM_TESTS]; int tests_passed; int tests_failed; int sock; /* test values */ unsigned long bytes_received; unsigned long time_elapsed; int last_value; int count_received_messages; int count_not_received_messages; } DltTestclientData; /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-test-stress-client [options] hostname/serial_device_name\n"); printf("Test against received data from dlt-test-stress-user.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -a Print DLT messages; payload as ASCII\n"); printf(" -x Print DLT messages; payload as hex\n"); printf(" -m Print DLT messages; payload as hex and ASCII\n"); printf(" -s Print DLT messages; only headers\n"); printf(" -v Verbose mode\n"); printf(" -h Usage\n"); printf(" -y Serial device mode\n"); printf(" -b baudrate Serial device baudrate (Default: 115200)\n"); printf(" -e ecuid Set ECU ID (Default: ECU1)\n"); printf(" -o filename Output messages in new DLT file\n"); printf(" -f filename Enable filtering of messages\n"); printf(" -n messages Number of messages to be received per test(Default: 10000)\n"); } /** * Main function of tool. */ int main(int argc, char *argv[]) { DltClient dltclient; DltTestclientData dltdata; int c, i; int index; /* Initialize dltclient */ memset(&dltclient, 0x0, sizeof(DltClient)); /* Initialize dltdata */ dltdata.aflag = 0; dltdata.sflag = 0; dltdata.xflag = 0; dltdata.mflag = 0; dltdata.vflag = 0; dltdata.yflag = 0; dltdata.ovalue = 0; dltdata.fvalue = 0; dltdata.evalue = 0; dltdata.bvalue = 0; dltdata.nvalue = 10000; dltdata.ohandle = -1; dltdata.running_test = 0; for (i = 0; i < DLT_TESTCLIENT_NUM_TESTS; i++) { dltdata.test_counter_macro[i] = 0; dltdata.test_counter_function[i] = 0; } dltdata.tests_passed = 0; dltdata.tests_failed = 0; dltdata.bytes_received = 0; dltdata.time_elapsed = dlt_uptime(); dltdata.last_value = 0; dltdata.count_received_messages = 0; dltdata.count_not_received_messages = 0; dltdata.sock = -1; /* Fetch command line arguments */ opterr = 0; while ((c = getopt (argc, argv, "vashyxmf:o:e:b:n:")) != -1) switch (c) { case 'v': { dltdata.vflag = 1; break; } case 'a': { dltdata.aflag = 1; break; } case 's': { dltdata.sflag = 1; break; } case 'x': { dltdata.xflag = 1; break; } case 'm': { dltdata.mflag = 1; break; } case 'h': { usage(); return -1; } case 'y': { dltdata.yflag = 1; break; } case 'f': { dltdata.fvalue = optarg; break; } case 'o': { dltdata.ovalue = optarg; break; } case 'e': { dltdata.evalue = optarg; break; } case 'b': { dltdata.bvalue = atoi(optarg); break; } case 'n': { dltdata.nvalue = atoi(optarg); break; } case '?': { if ((optopt == 'o') || (optopt == 'f') || (optopt == 't')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { abort (); return -1;/*for parasoft */ } } /* Initialize DLT Client */ dlt_client_init(&dltclient, dltdata.vflag); /* Register callback to be called when message was received */ dlt_client_register_message_callback(dlt_testclient_message_callback); /* Setup DLT Client structure */ dltclient.mode = dltdata.yflag; if (dltclient.mode == 0) { for (index = optind; index < argc; index++) if (dlt_client_set_server_ip(&dltclient, argv[index]) == -1) { fprintf(stderr, "set server ip didn't succeed\n"); return -1; } if (dltclient.servIP == 0) { /* no hostname selected, show usage and terminate */ fprintf(stderr, "ERROR: No hostname selected\n"); usage(); dlt_client_cleanup(&dltclient, dltdata.vflag); return -1; } } else { for (index = optind; index < argc; index++) if (dlt_client_set_serial_device(&dltclient, argv[index]) == -1) { fprintf(stderr, "set serial device didn't succeed\n"); return -1; } if (dltclient.serialDevice == 0) { /* no serial device name selected, show usage and terminate */ fprintf(stderr, "ERROR: No serial device name specified\n"); usage(); return -1; } dlt_client_setbaudrate(&dltclient, dltdata.bvalue); } /* initialise structure to use DLT file */ dlt_file_init(&(dltdata.file), dltdata.vflag); /* first parse filter file if filter parameter is used */ dlt_filter_init(&(dltdata.filter), dltdata.vflag); if (dltdata.fvalue) { if (dlt_filter_load(&(dltdata.filter), dltdata.fvalue, dltdata.vflag) < DLT_RETURN_OK) { dlt_file_free(&(dltdata.file), dltdata.vflag); return -1; } dlt_file_set_filter(&(dltdata.file), &(dltdata.filter), dltdata.vflag); } /* open DLT output file */ if (dltdata.ovalue) { dltdata.ohandle = open(dltdata.ovalue, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* mode: wb */ if (dltdata.ohandle == -1) { dlt_file_free(&(dltdata.file), dltdata.vflag); fprintf(stderr, "ERROR: Output file %s cannot be opened!\n", dltdata.ovalue); return -1; } } if (dltdata.evalue) dlt_set_id(dltdata.ecuid, dltdata.evalue); else dlt_set_id(dltdata.ecuid, DLT_TESTCLIENT_ECU_ID); /* Connect to TCP socket or open serial device */ if (dlt_client_connect(&dltclient, dltdata.vflag) != DLT_RETURN_ERROR) { dltdata.sock = dltclient.sock; /* Dlt Client Main Loop */ dlt_client_main_loop(&dltclient, &dltdata, dltdata.vflag); /* Dlt Client Cleanup */ dlt_client_cleanup(&dltclient, dltdata.vflag); } /* dlt-receive cleanup */ if (dltdata.ovalue) close(dltdata.ohandle); dlt_file_free(&(dltdata.file), dltdata.vflag); dlt_filter_free(&(dltdata.filter), dltdata.vflag); return 0; } int dlt_testclient_message_callback(DltMessage *message, void *data) { static char text[DLT_TESTCLIENT_TEXTBUFSIZE]; DltTestclientData *dltdata; uint32_t type_info, type_info_tmp; int16_t length, length_tmp; /* the macro can set this variable to -1 */ uint8_t *ptr; int32_t datalength; int32_t value; uint32_t value_tmp = 0; struct iovec iov[2]; int bytes_written; if ((message == 0) || (data == 0)) return -1; dltdata = (DltTestclientData *)data; /* prepare storage header */ if (DLT_IS_HTYP_WEID(message->standardheader->htyp)) dlt_set_storageheader(message->storageheader, message->headerextra.ecu); else dlt_set_storageheader(message->storageheader, dltdata->ecuid); if ((dltdata->fvalue == 0) || (dltdata->fvalue && (dlt_message_filter_check(message, &(dltdata->filter), dltdata->vflag) == DLT_RETURN_TRUE))) { /*dlt_message_header(message,text,sizeof(text),dltdata->vflag); */ if (dltdata->aflag) { /*printf("%s ",text); */ } /*dlt_message_payload(message,text,sizeof(text),DLT_OUTPUT_ASCII,dltdata->vflag); */ if (dltdata->aflag) { /*printf("[%s]\n",text); */ } /* do something here */ /* Count number of received bytes */ dltdata->bytes_received += message->datasize + message->headersize - sizeof(DltStorageHeader); /* print number of received bytes */ if ((dlt_uptime() - dltdata->time_elapsed) > 10000) { printf("Received %lu Bytes/s\n", dltdata->bytes_received /**10000/(dlt_uptime()-dltdata->time_elapsed)*/); /*printf("Received %lu Bytes received\n",dltdata->bytes_received); */ dltdata->time_elapsed = dlt_uptime(); dltdata->bytes_received = 0; } /* Extended header */ if (DLT_IS_HTYP_UEH(message->standardheader->htyp)) { /* Log message */ if ((DLT_GET_MSIN_MSTP(message->extendedheader->msin)) == DLT_TYPE_LOG) { /* Verbose */ if (DLT_IS_MSIN_VERB(message->extendedheader->msin)) { /* 2 arguments */ if (message->extendedheader->noar == 2) { /* verbose mode */ type_info = 0; type_info_tmp = 0; length = 0; length_tmp = 0; /* the macro can set this variable to -1 */ ptr = message->databuffer; datalength = (int32_t) message->datasize; /* first read the type info of the first argument: must be string */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_SINT) { /* read value */ DLT_MSG_READ_VALUE(value_tmp, ptr, datalength, int32_t); value = DLT_ENDIAN_GET_32(message->standardheader->htyp, value_tmp); /*printf("%d\n",value); */ if (value < dltdata->last_value) { if (dltdata->nvalue == dltdata->count_received_messages) printf("PASSED: %d Msg received, %d not received\n", dltdata->count_received_messages, dltdata->count_not_received_messages); else printf("FAILED: %d Msg received, %d not received\n", dltdata->count_received_messages, dltdata->count_not_received_messages); dltdata->last_value = 0; dltdata->count_received_messages = 0; dltdata->count_not_received_messages = value - 1; } else { dltdata->count_not_received_messages += value - dltdata->last_value - 1; } dltdata->last_value = value; dltdata->count_received_messages++; if (length >= 0) { ptr += length; datalength -= length; /* read type of second argument: must be raw */ DLT_MSG_READ_VALUE(type_info_tmp, ptr, datalength, uint32_t); type_info = DLT_ENDIAN_GET_32(message->standardheader->htyp, type_info_tmp); if (type_info & DLT_TYPE_INFO_RAWD) { /* get length of raw data block */ DLT_MSG_READ_VALUE(length_tmp, ptr, datalength, uint16_t); length = DLT_ENDIAN_GET_16(message->standardheader->htyp, length_tmp); if ((length >= 0) && (length == datalength)) /*printf("Raw data found in payload, length="); */ /*printf("%d, datalength=%d \n", length, datalength); */ dltdata->test_counter_macro[3]++; } } } } } } } /* if no filter set or filter is matching display message */ if (dltdata->xflag) dlt_message_print_hex(message, text, DLT_TESTCLIENT_TEXTBUFSIZE, dltdata->vflag); else if (dltdata->mflag) dlt_message_print_mixed_plain(message, text, DLT_TESTCLIENT_TEXTBUFSIZE, dltdata->vflag); else if (dltdata->sflag) dlt_message_print_header(message, text, sizeof(text), dltdata->vflag); /* if file output enabled write message */ if (dltdata->ovalue) { iov[0].iov_base = message->headerbuffer; iov[0].iov_len = message->headersize; iov[1].iov_base = message->databuffer; iov[1].iov_len = message->datasize; bytes_written = (int) writev(dltdata->ohandle, iov, 2); if (0 > bytes_written) { printf("dlt_testclient_message_callback, error when: writev(dltdata->ohandle, iov, 2) \n"); return -1; } } } return 0; } dlt-daemon-2.18.6/src/tests/dlt-test-stress-user.c000066400000000000000000000201651377520261000217750ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-stress-user.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-test-stress-user.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include /* for printf() and fprintf() */ #include #include /* for atoi(), abort() */ #include /* for memset() */ #include /* for isprint() */ #include "dlt.h" #define DLT_TEST_NUM_CONTEXT 7 /* Test functions... */ int testall(int count, int repeat, int delay, int size); /* Context declaration.. */ DLT_DECLARE_CONTEXT(context_info) /* for macro interface */ DLT_DECLARE_CONTEXT(context_macro_callback) DLT_DECLARE_CONTEXT(context_macro_test[DLT_TEST_NUM_CONTEXT]) /* for function interface */ DltContext context_function_callback; DltContext context_function_test[DLT_TEST_NUM_CONTEXT]; DltContextData context_data; /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-test-stress-user [options]\n"); printf("Test user application providing Test messages.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -v Verbose mode\n"); printf(" -f filename Use local log file instead of sending to daemon\n"); printf(" -n count Number of messages to be sent per test (Default: 10000)\n"); printf(" -r repeat How often test is repeated (Default: 100)\n"); printf(" -d delay Delay between sent messages in uSec (Default: 1000)\n"); printf(" -s size Size of extra message data in bytes (Default: 100)\n"); } /** * Main function of tool. */ int main(int argc, char *argv[]) { /*int vflag = 0; */ char *fvalue = 0; int nvalue = 10000; int rvalue = 100; int dvalue = 1000; int svalue = 100; int c; opterr = 0; while ((c = getopt (argc, argv, "vf:n:r:d:s:")) != -1) switch (c) { case 'v': { /*vflag = 1; */ break; } case 'f': { fvalue = optarg; break; } case 'n': { nvalue = atoi(optarg); break; } case 'r': { rvalue = atoi(optarg); break; } case 'd': { dvalue = atoi(optarg); break; } case 's': { svalue = atoi(optarg); break; } case '?': { if ((optopt == 'f') || (optopt == 'n') || (optopt == 'r') || (optopt == 'd') || (optopt == 's')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { abort (); return -1;/*for parasoft */ } } if (fvalue) { /* DLT is intialised automatically, except another output target will be used */ if (dlt_init_file(fvalue) < 0) /* log to file */ return -1; } /* Register APP */ DLT_REGISTER_APP("DIFT", "DLT Interface Test"); /* Register CONTEXTS... */ DLT_REGISTER_CONTEXT(context_info, "INFO", "Information context"); /* Tests starting */ printf("Tests starting\n"); /*DLT_LOG(context_info,DLT_LOG_INFO,DLT_STRING("Tests starting")); */ /* wait 3 seconds before starting */ /*sleep(3); */ testall(nvalue, rvalue, dvalue, svalue); /* Tests finished */ printf("Tests finished\n"); /*DLT_LOG(context_info,DLT_LOG_INFO,DLT_STRING("Tests finished")); */ /* wait 3 seconds before terminating application */ /*sleep(3); */ /* Unregister CONTEXTS... */ DLT_UNREGISTER_CONTEXT(context_info); /* Unregister APP */ DLT_UNREGISTER_APP(); return 0; } /******************/ /* The test cases */ /******************/ int testall(int count, int repeat, int delay, int size) { char buffer[size]; int num, rnum; struct timespec ts; for (num = 0; num < size; num++) buffer[num] = (char) num; /* Test All: Test all start */ /*printf("Test1: Test all\n"); */ /*DLT_LOG(context_info,DLT_LOG_INFO,DLT_STRING("Test1: Test all")); */ for (rnum = 0; rnum < repeat; rnum++) for (num = 1; num <= count; num++) { DLT_LOG(context_info, DLT_LOG_INFO, DLT_INT(num), DLT_RAW(buffer, size)); ts.tv_sec = (delay * 1000) / 1000000000; ts.tv_nsec = (delay * 1000) % 1000000000; nanosleep(&ts, NULL); } /* wait 5 seconds after test */ /*sleep(5); */ /*DLT_LOG(context_info,DLT_LOG_INFO,DLT_STRING("Test1: finished")); */ return 0; } dlt-daemon-2.18.6/src/tests/dlt-test-stress.c000066400000000000000000000244431377520261000210240ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-stress.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-test-stress.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include #include /* for isprint() */ #include #include /* for printf() and fprintf() */ #include /* for atoi() and exit() */ #include /* for memset() */ #include /* for close() */ #include /* POSIX Threads */ #include "dlt.h" #include "dlt_common.h" /* for dlt_get_version() */ DltContext mycontext[9999]; typedef struct { int num; } thread_data_t; #define STRESS1_NUM_CONTEXTS 3000 #define STRESS2_MAX_NUM_THREADS 64 #define STRESS3_MAX_NUM_MESSAGES 512 #define MAX_TESTS 3 void stress1(void); void stress2(void); void thread_function(void); void stress3(void); /* * This environment variable is used when developer wants to interrupt program manually */ char *env_manual_interruption = 0; /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-test-stress [options]\n"); printf("Test application executing several stress tests.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -v Verbose mode\n"); printf(" -f filename Use local log file instead of sending to daemon\n"); printf(" -1 Execute test 1 (register/unregister many contexts)\n"); printf(" In order to interrupt test manually (e.g: wait for ENTER key),\n"); printf(" set environment variable DLT_TEST_MANUAL_INTERRUPTION=1\n"); printf(" -2 Execute test 2 (multiple threads logging data)\n"); printf(" -3 Execute test 3 (logging much data)\n"); } /** * Main function of tool. */ int main(int argc, char *argv[]) { /*int vflag = 0; */ char *fvalue = 0; int test[MAX_TESTS]; int i, c, help; for (i = 0; i < MAX_TESTS; i++) test[i] = 0; opterr = 0; while ((c = getopt (argc, argv, "vf:123")) != -1) switch (c) { case 'v': { /*vflag = 1; */ break; } case 'f': { fvalue = optarg; break; } case '1': { test[0] = 1; env_manual_interruption = getenv("DLT_TEST_MANUAL_INTERRUPTION"); break; } case '2': { test[1] = 1; break; } case '3': { test[2] = 1; break; } case '?': { if (optopt == 'f') fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { abort (); return -1;/*for parasoft */ } } if (fvalue) { /* DLT is intialised automatically, except another output target will be used */ if (dlt_init_file(fvalue) < 0) /* log to file */ return -1; } help = 0; for (i = 0; i < MAX_TESTS; i++) if (test[i] == 1) { help = 1; break; } if (help == 0) { usage(); return -1; } DLT_REGISTER_APP("DSTS", "DLT daemon stress tests"); if (test[0]) stress1(); if (test[1]) stress2(); if (test[2]) stress3(); DLT_UNREGISTER_APP(); sleep(1); return 0; } void stress1(void) { int i, c; char ctid[5]; struct timespec ts; printf("Starting stress test1...\n"); printf("* Register %d contexts...\n", STRESS1_NUM_CONTEXTS); for (i = 0; i < STRESS1_NUM_CONTEXTS; i++) { /* Generate id */ memset(ctid, 0, 5); snprintf(ctid, 5, "%d", i); /*printf("%i: '%s' \n",i,ctid); */ dlt_register_context(&(mycontext[i]), ctid, ctid); ts.tv_sec = 0; ts.tv_nsec = 500 * 1000; nanosleep(&ts, NULL); } if (env_manual_interruption && (strcmp(env_manual_interruption, "1") == 0)) { printf("press \"Enter\" to terminate test"); while (1) { c=getchar(); /* if "Return" is pressed, exit loop; */ if (c==10) { break; } } } printf("* Unregister %d contexts...\n", STRESS1_NUM_CONTEXTS); for (i = 0; i < STRESS1_NUM_CONTEXTS; i++) { DLT_UNREGISTER_CONTEXT(mycontext[i]); ts.tv_sec = 0; ts.tv_nsec = 500 * 1000; nanosleep(&ts, NULL); } printf("Finished stress test1 \n\n"); } void stress2(void) { int ret, index; struct timespec ts; pthread_t thread[STRESS2_MAX_NUM_THREADS]; thread_data_t thread_data[STRESS2_MAX_NUM_THREADS]; printf("Starting stress test2... \n"); srand((unsigned int) time(NULL)); printf("* Creating %d Threads, each of them registers one context,\n", STRESS2_MAX_NUM_THREADS); printf(" sending one log message, then unregisters the context\n"); for (index = 0; index < STRESS2_MAX_NUM_THREADS; index++) { thread_data[index].num = index; ret = pthread_create(&(thread[index]), NULL, (void *)&thread_function, (void *)&(thread_data[index])); if (ret != 0) printf("Error creating thread %d: %s \n", index, strerror(errno)); ts.tv_sec = 0; ts.tv_nsec = 1000 * 1000; nanosleep(&ts, NULL); } for (index = 0; index < STRESS2_MAX_NUM_THREADS; index++) pthread_join(thread[index], NULL); printf("Finished stress test2 \n\n"); } void thread_function(void) { /*thread_data_t *data; */ DLT_DECLARE_CONTEXT(context_thread1); char ctid[5]; struct timespec ts; /*data = (thread_data_t *) ptr; */ memset(ctid, 0, 5); /* Create random context id */ snprintf(ctid, 5, "%.2x", rand() & 0x0000ffff); ts.tv_sec = 0; ts.tv_nsec = rand(); nanosleep(&ts, NULL); DLT_REGISTER_CONTEXT(context_thread1, ctid, ctid); DLT_LOG(context_thread1, DLT_LOG_INFO, DLT_STRING(ctid)); DLT_UNREGISTER_CONTEXT(context_thread1); } void stress3(void) { DLT_DECLARE_CONTEXT(context_stress3); char buffer[STRESS3_MAX_NUM_MESSAGES]; int num; struct timespec ts; /* Performance test */ DLT_REGISTER_CONTEXT(context_stress3, "TST3", "Stress Test 3 - Performance"); printf("Starting stress test3... \n"); printf("* Logging raw data, up to a size of %d\n", STRESS3_MAX_NUM_MESSAGES); for (num = 0; num < STRESS3_MAX_NUM_MESSAGES; num++) { buffer[num] = (char) num; DLT_LOG(context_stress3, DLT_LOG_INFO, DLT_INT(num), DLT_RAW(buffer,(uint16_t) num)); ts.tv_sec = 0; ts.tv_nsec = 10000 * 1000; nanosleep(&ts, NULL); } printf("Finished stress test3 \n\n"); } dlt-daemon-2.18.6/src/tests/dlt-test-user.c000066400000000000000000001501301377520261000204500ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Alexander Wenzel * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-user.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-test-user.c ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include /* for printf() and fprintf() */ #include #include /* for atoi(), abort() */ #include /* for memset() */ #include /* for isprint() */ #include "dlt.h" #define DLT_TEST_NUM_CONTEXT 10 #define DLT_MAX_TIMESTAMP 0xFFFFFFFF /* LogLevel string representation */ static const char *loglevelstr[DLT_LOG_MAX] = { "DLT_LOG_OFF", "DLT_LOG_FATAL", "DLT_LOG_ERROR", "DLT_LOG_WARN", "DLT_LOG_INFO", "DLT_LOG_DEBUG", "DLT_LOG_VERBOSE" }; /* Test functions... */ /* for macro interface */ int test1m(void); int test2m(void); int test3m(void); int test4m(void); int test5m(void); int test6m(void); int test7m(void); int test8m(void); int test9m(void); int test10m(void); /* for function interface */ int test1f(void); int test2f(void); int test3f(void); int test4f(void); int test5f(void); int test6f(void); int test7f(void); int test8f(void); int test9f(void); int test10f(void); /* Declaration of callback functions */ int test_injection_macro_callback(uint32_t service_id, void *data, uint32_t length); int test_injection_function_callback(uint32_t service_id, void *data, uint32_t length); /* Context declaration.. */ DLT_DECLARE_CONTEXT(context_info) /* for macro interface */ DLT_DECLARE_CONTEXT(context_macro_callback) DLT_DECLARE_CONTEXT(context_macro_test[DLT_TEST_NUM_CONTEXT]) /* for function interface */ DltContext context_function_callback; DltContext context_function_test[DLT_TEST_NUM_CONTEXT]; DltContextData context_data; /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-test-user [options]\n"); printf("Test user application providing several Tests.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -v Verbose mode\n"); printf(" -f filename Use local log file instead of sending to daemon\n"); printf(" -n count Repeats of tests (Default: 1)\n"); printf("Tests:\n"); printf(" 1m: (Macro IF) Test all log levels\n"); printf(" 2m: (Macro IF) Test all variable types (verbose) \n"); printf(" 3m: (Macro IF) Test all variable types (non-verbose) \n"); printf(" 4m: (Macro IF) Test different message sizes\n"); printf(" 5m: (Macro IF) Test high-level API\n"); printf(" 6m: (Macro IF) Test local printing\n"); printf(" 7m: (Macro IF) Test network trace\n"); printf(" 8m: (Macro IF) Test truncated network trace\n"); printf(" 9m: (Macro IF) Test segmented network trace\n"); printf(" 10m: (Macro IF) Test user-specified timestamps\n"); printf(" 1f: (Function IF) Test all log levels\n"); printf(" 2f: (Function IF) Test all variable types (verbose) \n"); printf(" 3f: (Function IF) Test all variable types (non-verbose) \n"); printf(" 4f: (Function IF) Test different message sizes\n"); printf(" 5f: (Function IF) Test high-level API\n"); printf(" 6f: (Function IF) Test local printing\n"); printf(" 7f: (Function IF) Test network trace\n"); printf(" 8f: (Function IF) Test truncated network trace\n"); printf(" 9f: (Function IF) Test segmented network trace\n"); printf(" 10f: (Function IF) Test user-specified timestamps\n"); } /** * Main function of tool. */ int main(int argc, char *argv[]) { /*int vflag = 0; */ char *fvalue = 0; char *nvalue = 0; int c; int i; char ctid[5], ctdesc[255]; int num, maxnum; opterr = 0; while ((c = getopt (argc, argv, "vf:n:")) != -1) switch (c) { case 'v': { /*vflag = 1; */ break; } case 'f': { fvalue = optarg; break; } case 'n': { nvalue = optarg; break; } case '?': { if ((optopt == 'd') || (optopt == 'f') || (optopt == 'n')) fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { abort (); return -1;/*for parasoft */ } } if (fvalue) { /* DLT is intialised automatically, except another output target will be used */ if (dlt_init_file(fvalue) < 0) /* log to file */ return -1; } if (nvalue) maxnum = atoi(nvalue); else maxnum = 1; /* Register APP */ DLT_REGISTER_APP("DIFT", "DLT Interface Test"); /* Register CONTEXTS... */ DLT_REGISTER_CONTEXT(context_info, "INFO", "Information context"); /* used for macro interface tests */ DLT_REGISTER_CONTEXT(context_macro_callback, "CBM", "Callback Test context for macro interface"); for (i = 0; i < DLT_TEST_NUM_CONTEXT; i++) { snprintf(ctid, 5, "TM%02d", i + 1); snprintf(ctdesc, 255, "Test %d context for macro interface", i + 1); DLT_REGISTER_CONTEXT(context_macro_test[i], ctid, ctdesc); } /* used for function interface tests */ dlt_register_context(&context_function_callback, "CBF", "Callback Test context for function interface"); for (i = 0; i < DLT_TEST_NUM_CONTEXT; i++) { snprintf(ctid, 5, "TF%02d", i + 1); snprintf(ctdesc, 255, "Test %d context for function interface", i + 1); dlt_register_context(&(context_function_test[i]), ctid, ctdesc); } /* Register callbacks... */ /* with macro interface */ DLT_LOG(context_macro_callback, DLT_LOG_INFO, DLT_STRING("Register callback (Macro Interface) for Injection ID: 0xFFF")); DLT_REGISTER_INJECTION_CALLBACK(context_macro_callback, 0xFFF, test_injection_macro_callback); /* with function interface */ if (dlt_user_log_write_start(&context_function_callback, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Register callback (Function Interface) for Injection ID: 0xFFF"); dlt_user_log_write_finish(&context_data); } dlt_register_injection_callback(&context_function_callback, 0xFFF, test_injection_function_callback); /* Tests starting */ printf("Tests starting\n"); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Tests starting")); /* wait 3 seconds before starting */ sleep(3); for (num = 0; num < maxnum; num++) { /* Execute tests... */ /* with macro interface */ test1m(); test2m(); test3m(); test4m(); test5m(); test6m(); test7m(); test8m(); test9m(); test10m(); /* with function interface */ test1f(); test2f(); test3f(); test4f(); test5f(); test6f(); test7f(); test8f(); test9f(); test10f(); /* wait 1 second before next repeat of tests */ sleep(1); } /* Tests finished */ printf("Tests finished\n"); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Tests finished")); /* wait 3 seconds before terminating application */ sleep(3); /* Unregister CONTEXTS... */ DLT_UNREGISTER_CONTEXT(context_info); /* used for macro interface tests */ for (i = 0; i < DLT_TEST_NUM_CONTEXT; i++) DLT_UNREGISTER_CONTEXT(context_macro_test[i]); DLT_UNREGISTER_CONTEXT(context_macro_callback); /* used for function interface tests */ for (i = 0; i < DLT_TEST_NUM_CONTEXT; i++) dlt_unregister_context(&(context_function_test[i])); dlt_unregister_context(&context_function_callback); /* Unregister APP */ DLT_UNREGISTER_APP(); return 0; } /******************/ /* The test cases */ /******************/ int test1m(void) { /* Test 1: (Macro IF) Test all log levels */ printf("Test1m: (Macro IF) Test all log levels\n"); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test1: (Macro IF) Test all log levels")); DLT_LOG(context_macro_test[0], DLT_LOG_FATAL, DLT_STRING("fatal")); DLT_LOG(context_macro_test[0], DLT_LOG_ERROR, DLT_STRING("error")); DLT_LOG(context_macro_test[0], DLT_LOG_WARN, DLT_STRING("warn")); DLT_LOG(context_macro_test[0], DLT_LOG_INFO, DLT_STRING("info")); DLT_LOG(context_macro_test[0], DLT_LOG_DEBUG, DLT_STRING("debug")); DLT_LOG(context_macro_test[0], DLT_LOG_VERBOSE, DLT_STRING("verbose")); /* wait 2 second before next test */ sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test1: (Macro IF) finished")); return 0; } int test2m(void) { char buffer[10]; int num2; /* Test 2: (Macro IF) Test all variable types (verbose) */ printf("Test2m: (Macro IF) Test all variable types (verbose)\n"); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test2: (Macro IF) Test all variable types (verbose)")); DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("string"), DLT_STRING("Hello world")); DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("utf8"), DLT_UTF8("Hello world")); DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("bool"), DLT_BOOL(1)); DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("int"), DLT_INT(INT32_MIN)); /* (-2147483647-1) */ DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("int8"), DLT_INT8(INT8_MIN)); /* (-128) */ DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("int16"), DLT_INT16(INT16_MIN)); /* (-32767-1) */ DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("int32"), DLT_INT32(INT32_MIN)); /* (-2147483647-1) */ DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("int64"), DLT_INT64(INT64_MIN)); /* (-__INT64_C(9223372036854775807)-1) */ DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("uint"), DLT_UINT(UINT32_MAX)); /* (4294967295U) */ DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("uint8"), DLT_UINT8(UINT8_MAX)); /* (255) */ DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("uint16"), DLT_UINT16(UINT16_MAX)); /* (65535) */ DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("uint32"), DLT_UINT32(UINT32_MAX)); /* (4294967295U) */ DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("uint64"), DLT_UINT64(UINT64_MAX)); /* (__UINT64_C(18446744073709551615)) */ DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("float32"), DLT_FLOAT32(FLT_MIN), DLT_FLOAT32(FLT_MAX)); DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("float64"), DLT_FLOAT64(DBL_MIN), DLT_FLOAT64(DBL_MAX)); for (num2 = 0; num2 < 10; num2++) buffer[num2] = (char) num2; DLT_LOG(context_macro_test[1], DLT_LOG_INFO, DLT_STRING("raw"), DLT_RAW(buffer, 10)); /* wait 2 second before next test */ sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test2: (Macro IF) finished")); return 0; } int test3m(void) { char buffer[10]; int num2; /* Test 3: (Macro IF) Test all variable types (non-verbose) */ printf("Test3m: (Macro IF) Test all variable types (non-verbose)\n"); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test3: (Macro IF) Test all variable types (non-verbose)")); DLT_NONVERBOSE_MODE(); DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 1, DLT_STRING("string"), DLT_STRING("Hello world")); DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 2, DLT_STRING("utf8"), DLT_UTF8("Hello world")); DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 3, DLT_STRING("bool"), DLT_BOOL(1)); DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 4, DLT_STRING("int"), DLT_INT(INT32_MIN)); /* (-2147483647-1) */ DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 5, DLT_STRING("int8"), DLT_INT8(INT8_MIN)); /* (-128) */ DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 6, DLT_STRING("int16"), DLT_INT16(INT16_MIN)); /* (-32767-1) */ DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 7, DLT_STRING("int32"), DLT_INT32(INT32_MIN)); /* (-2147483647-1) */ DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 8, DLT_STRING("int64"), DLT_INT64(INT64_MIN)); /* (-__INT64_C(9223372036854775807)-1) */ DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 9, DLT_STRING("uint"), DLT_UINT(UINT32_MAX)); /* (4294967295U) */ DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 10, DLT_STRING("uint8"), DLT_UINT8(UINT8_MAX)); /* (255) */ DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 11, DLT_STRING("uint16"), DLT_UINT16(UINT16_MAX)); /* (65535) */ DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 12, DLT_STRING("uint32"), DLT_UINT32(UINT32_MAX)); /* (4294967295U) */ DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 13, DLT_STRING("uint64"), DLT_UINT64(UINT64_MAX)); /* (__UINT64_C(18446744073709551615)) */ DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 14, DLT_STRING("float32"), DLT_FLOAT32(FLT_MIN), DLT_FLOAT32(FLT_MAX)); DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 15, DLT_STRING("float64"), DLT_FLOAT64(DBL_MIN), DLT_FLOAT64(DBL_MAX)); for (num2 = 0; num2 < 10; num2++) buffer[num2] = (char) num2; DLT_LOG_ID(context_macro_test[2], DLT_LOG_INFO, 14, DLT_STRING("raw"), DLT_RAW(buffer, 10)); DLT_VERBOSE_MODE(); /* wait 2 second before next test */ sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test3: (Macro IF) finished")); return 0; } int test4m(void) { char buffer[1024]; int num; for (num = 0; num < 1024; num++) buffer[num] = (char) num; /* Test 4: (Macro IF) Message size test */ printf("Test4m: (Macro IF) Test different message sizes\n"); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test4: (Macro IF) Test different message sizes")); DLT_LOG(context_macro_test[3], DLT_LOG_INFO, DLT_STRING("1"), DLT_RAW(buffer, 1)); DLT_LOG(context_macro_test[3], DLT_LOG_INFO, DLT_STRING("16"), DLT_RAW(buffer, 16)); DLT_LOG(context_macro_test[3], DLT_LOG_INFO, DLT_STRING("256"), DLT_RAW(buffer, 256)); DLT_LOG(context_macro_test[3], DLT_LOG_INFO, DLT_STRING("1024"), DLT_RAW(buffer, 1024)); /* wait 2 second before next test */ sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test4: (Macro IF) finished")); return 0; } int test5m(void) { char buffer[32]; int num; int i; void *ptr = malloc(sizeof(int)); for (num = 0; num < 32; num++) buffer[num] = (char) num; /* Test 5: (Macro IF) Test high-level API */ printf("Test5m: (Macro IF) Test high-level API\n"); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test5: (Macro IF) Test high-level API")); DLT_LOG(context_macro_test[4], DLT_LOG_INFO, DLT_STRING("Next line: DLT_LOG_INT")); DLT_LOG_INT(context_macro_test[4], DLT_LOG_INFO, -42); DLT_LOG(context_macro_test[4], DLT_LOG_INFO, DLT_STRING("Next line: DLT_LOG_UINT")); DLT_LOG_UINT(context_macro_test[4], DLT_LOG_INFO, 42); DLT_LOG(context_macro_test[4], DLT_LOG_INFO, DLT_STRING("Next line: DLT_LOG_STRING")); DLT_LOG_STRING(context_macro_test[4], DLT_LOG_INFO, "String output"); DLT_LOG(context_macro_test[4], DLT_LOG_INFO, DLT_STRING("Next line: DLT_LOG_RAW")); DLT_LOG_RAW(context_macro_test[4], DLT_LOG_INFO, buffer, 16); DLT_LOG(context_macro_test[4], DLT_LOG_INFO, DLT_STRING("Next line: DLT_LOG_STRING_INT")); DLT_LOG_STRING_INT(context_macro_test[4], DLT_LOG_INFO, "String output: ", -42); DLT_LOG(context_macro_test[4], DLT_LOG_INFO, DLT_STRING("Next line: DLT_LOG_STRING_UINT")); DLT_LOG_STRING_UINT(context_macro_test[4], DLT_LOG_INFO, "String output: ", 42); DLT_LOG(context_macro_test[4], DLT_LOG_INFO, DLT_STRING("Next line: DLT_LOG_PTR")); DLT_LOG(context_macro_test[4], DLT_LOG_INFO, DLT_PTR(ptr)); DLT_LOG(context_macro_test[4], DLT_LOG_INFO, DLT_STRING("Next lines: DLT_IS_LOG_LEVEL_ENABLED")); for (i = DLT_LOG_FATAL; i < DLT_LOG_MAX; i++) { if (DLT_IS_LOG_LEVEL_ENABLED(context_macro_test[4], i)) DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Loglevel is enabled: "), DLT_STRING(loglevelstr[i])); else DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Loglevel is disabled: "), DLT_STRING(loglevelstr[i])); } /* wait 2 second before next test */ sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test5: (Macro IF) finished")); free(ptr); return 0; } int test6m(void) { /* Test 6: (Macro IF) Test local printing */ printf("Test6m: (Macro IF) Test local printing\n"); DLT_LOG_STRING(context_info, DLT_LOG_INFO, "Test 6: (Macro IF) Test local printing"); DLT_ENABLE_LOCAL_PRINT(); DLT_LOG_STRING(context_macro_test[5], DLT_LOG_INFO, "Message (visible: locally printed)"); DLT_DISABLE_LOCAL_PRINT(); DLT_LOG_STRING(context_macro_test[5], DLT_LOG_INFO, "Message (invisible: not locally printed)"); /* wait 2 second before next test */ sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test6: (Macro IF) finished")); return 0; } int test7m(void) { #ifdef DLT_NETWORK_TRACE_ENABLE char buffer[32]; int num; for (num = 0; num < 32; num++) buffer[num] = (char) num; /* Show all log messages and traces */ DLT_SET_APPLICATION_LL_TS_LIMIT(DLT_LOG_VERBOSE, DLT_TRACE_STATUS_ON); /* Test 7: (Macro IF) Test network trace */ printf("Test7m: (Macro IF) Test network trace\n"); DLT_LOG_STRING(context_info, DLT_LOG_INFO, "Test 7: (Macro IF) Test network trace"); /* Dummy messages: 16 byte header, 32 byte payload */ DLT_TRACE_NETWORK(context_macro_test[6], DLT_NW_TRACE_IPC, 16, buffer, 32, buffer); DLT_TRACE_NETWORK(context_macro_test[6], DLT_NW_TRACE_CAN, 16, buffer, 32, buffer); DLT_TRACE_NETWORK(context_macro_test[6], DLT_NW_TRACE_FLEXRAY, 16, buffer, 32, buffer); DLT_TRACE_NETWORK(context_macro_test[6], DLT_NW_TRACE_MOST, 16, buffer, 32, buffer); /* wait 2 second before next test */ sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test7: (Macro IF) finished")); DLT_SET_APPLICATION_LL_TS_LIMIT(DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT); sleep(2); #else /* Test 7: (Macro IF) Test network trace */ printf("Test7m: (Macro IF) Test network trace: Network trace interface is not supported, skipping\n"); DLT_LOG_STRING(context_info, DLT_LOG_INFO, "Test 7: (Macro IF) Test network trace: Network trace interface is not supported, skipping"); #endif return 0; } int test8m(void) { #ifdef DLT_NETWORK_TRACE_ENABLE char buffer[1024 * 5]; int num; for (num = 0; num < 1024 * 5; num++) buffer[num] = (char) num; /* Show all log messages and traces */ DLT_SET_APPLICATION_LL_TS_LIMIT(DLT_LOG_VERBOSE, DLT_TRACE_STATUS_ON); /* Test 8: (Macro IF) Test truncated network trace*/ printf("Test8m: (Macro IF) Test truncated network trace\n"); DLT_LOG_STRING(context_info, DLT_LOG_INFO, "Test 8: (Macro IF) Test truncated network trace"); /* Dummy messages: 16 byte header, 5k payload */ DLT_TRACE_NETWORK_TRUNCATED(context_macro_test[7], DLT_NW_TRACE_IPC, 16, buffer, 1024 * 5, buffer); DLT_TRACE_NETWORK_TRUNCATED(context_macro_test[7], DLT_NW_TRACE_CAN, 16, buffer, 1024 * 5, buffer); DLT_TRACE_NETWORK_TRUNCATED(context_macro_test[7], DLT_NW_TRACE_FLEXRAY, 16, buffer, 1024 * 5, buffer); DLT_TRACE_NETWORK_TRUNCATED(context_macro_test[7], DLT_NW_TRACE_MOST, 16, buffer, 1024 * 5, buffer); /* wait 2 second before next test */ sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test8: (Macro IF) finished")); DLT_SET_APPLICATION_LL_TS_LIMIT(DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT); sleep(2); #else /* Test 8: (Macro IF) Test truncated network trace*/ printf("Test8m: (Macro IF) Test truncated network trace: Network trace interface is not supported, skipping\n"); DLT_LOG_STRING(context_info, DLT_LOG_INFO, "Test 8: (Macro IF) Test truncated network trace: Network trace interface is not supported, skipping"); #endif return 0; } int test9m(void) { #ifdef DLT_NETWORK_TRACE_ENABLE char buffer[1024 * 5]; int num; for (num = 0; num < 1024 * 5; num++) buffer[num] = (char) num; /* Show all log messages and traces */ DLT_SET_APPLICATION_LL_TS_LIMIT(DLT_LOG_VERBOSE, DLT_TRACE_STATUS_ON); /* Test 9: (Macro IF) Test segmented network trace*/ printf("Test9m: (Macro IF) Test segmented network trace\n"); DLT_LOG_STRING(context_info, DLT_LOG_INFO, "Test 9: (Macro IF) Test segmented network trace"); /* Dummy messages: 16 byte header, 5k payload */ DLT_TRACE_NETWORK_SEGMENTED(context_macro_test[8], DLT_NW_TRACE_IPC, 16, buffer, 1024 * 5, buffer); DLT_TRACE_NETWORK_SEGMENTED(context_macro_test[8], DLT_NW_TRACE_CAN, 16, buffer, 1024 * 5, buffer); DLT_TRACE_NETWORK_SEGMENTED(context_macro_test[8], DLT_NW_TRACE_FLEXRAY, 16, buffer, 1024 * 5, buffer); DLT_TRACE_NETWORK_SEGMENTED(context_macro_test[8], DLT_NW_TRACE_MOST, 16, buffer, 1024 * 5, buffer); /* wait 2 second before next test */ sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test9: (Macro IF) finished")); DLT_SET_APPLICATION_LL_TS_LIMIT(DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT); sleep(2); #else /* Test 9: (Macro IF) Test segmented network trace*/ printf("Test9m: (Macro IF) Test segmented network trace: Network trace interface is not supported, skipping\n"); DLT_LOG_STRING(context_info, DLT_LOG_INFO, "Test 9: (Macro IF) Test segmented network trace: Network trace interface is not supported, skipping"); #endif return 0; } int test10m(void) { unsigned long timestamp[] = { 0, 100000, DLT_MAX_TIMESTAMP }; /* Test 10: test minimum, regular and maximum timestamp for both verbose and non verbose mode*/ printf("Test10m: (Macro IF) Test user-supplied time stamps\n"); DLT_LOG_STRING(context_info, DLT_LOG_INFO, "Test10: (Macro IF) Test user-supplied timestamps"); for (int i = 0; i < 3; i++) { char s[12]; snprintf(s, 12, "%d.%04d", (int)(timestamp[i] / 10000), (int)(timestamp[i] % 10000)); DLT_VERBOSE_MODE(); DLT_LOG_TS(context_macro_test[9], DLT_LOG_INFO, timestamp[i], DLT_STRING("Tested Timestamp:"), DLT_STRING(s)); DLT_NONVERBOSE_MODE(); DLT_LOG_ID_TS(context_macro_test[9], DLT_LOG_INFO, 16, timestamp[i], DLT_STRING(s)); } DLT_VERBOSE_MODE(); /* wait 2 second before next test */ sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test10: (Macro IF) finished")); return 0; } int test1f(void) { /* Test 1: (Function IF) Test all log levels */ printf("Test1f: (Function IF) Test all log levels\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test1: (Function IF) Test all log levels"); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[0]), &context_data, DLT_LOG_FATAL) > 0) { dlt_user_log_write_string(&context_data, "fatal"); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[0]), &context_data, DLT_LOG_ERROR) > 0) { dlt_user_log_write_string(&context_data, "error"); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[0]), &context_data, DLT_LOG_WARN) > 0) { dlt_user_log_write_string(&context_data, "warn"); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[0]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "info"); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[0]), &context_data, DLT_LOG_DEBUG) > 0) { dlt_user_log_write_string(&context_data, "debug"); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[0]), &context_data, DLT_LOG_VERBOSE) > 0) { dlt_user_log_write_string(&context_data, "verbose"); dlt_user_log_write_finish(&context_data); } /* wait 2 second before next test */ sleep(2); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test1: (Function IF) finished"); dlt_user_log_write_finish(&context_data); } return 0; } int test2f(void) { char buffer[10]; int num2; /* Test 2: (Function IF) Test all variable types (verbose) */ printf("Test2f: (Function IF) Test all variable types (verbose)\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test2: (Function IF) Test all variable types (verbose)"); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "bool"); dlt_user_log_write_bool(&context_data, 1); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "int"); dlt_user_log_write_int(&context_data, INT32_MIN); /* (-2147483647-1) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "int8"); dlt_user_log_write_int8(&context_data, INT8_MIN); /* (-128) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "int16"); dlt_user_log_write_int16(&context_data, INT16_MIN); /* (-32767-1) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "int32"); dlt_user_log_write_int32(&context_data, INT32_MIN); /* (-2147483647-1) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "int64"); dlt_user_log_write_int64(&context_data, INT64_MIN); /* (-__INT64_C(9223372036854775807)-1) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "uint"); dlt_user_log_write_uint(&context_data, UINT32_MAX); /* (4294967295U) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "uint8"); dlt_user_log_write_uint8(&context_data, UINT8_MAX); /* (255) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "uint16"); dlt_user_log_write_uint16(&context_data, UINT16_MAX); /* (65535) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "uint32"); dlt_user_log_write_uint32(&context_data, UINT32_MAX); /* (4294967295U) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "uint64"); dlt_user_log_write_uint64(&context_data, UINT64_MAX); /* (__UINT64_C(18446744073709551615)) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "float32"); dlt_user_log_write_float32(&context_data, FLT_MIN); dlt_user_log_write_float32(&context_data, FLT_MAX); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "float64"); dlt_user_log_write_float64(&context_data, DBL_MIN); dlt_user_log_write_float64(&context_data, DBL_MAX); dlt_user_log_write_finish(&context_data); } for (num2 = 0; num2 < 10; num2++) buffer[num2] = (char) num2; if (dlt_user_log_write_start(&(context_function_test[1]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "raw"); dlt_user_log_write_raw(&context_data, buffer, 10); dlt_user_log_write_finish(&context_data); } /* wait 2 second before next test */ sleep(2); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test2: (Function IF) finished"); dlt_user_log_write_finish(&context_data); } return 0; } int test3f(void) { char buffer[10]; int num2; /* Test 3: (Function IF) Test all variable types (non-verbose) */ printf("Test3f: (Function IF) Test all variable types (non-verbose)\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test3: (Function IF) Test all variable types (non-verbose)"); dlt_user_log_write_finish(&context_data); } dlt_nonverbose_mode(); if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 1) > 0) { /* bug mb: we have to compare against >0. in case of error -1 is returned! */ dlt_user_log_write_string(&context_data, "bool"); dlt_user_log_write_bool(&context_data, 1); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 2) > 0) { dlt_user_log_write_string(&context_data, "int"); dlt_user_log_write_int(&context_data, INT32_MIN); /* (-2147483647-1) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 3) > 0) { dlt_user_log_write_string(&context_data, "int8"); dlt_user_log_write_int8(&context_data, INT8_MIN); /* (-128) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 4) > 0) { dlt_user_log_write_string(&context_data, "int16"); dlt_user_log_write_int16(&context_data, INT16_MIN); /* (-32767-1) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 5) > 0) { dlt_user_log_write_string(&context_data, "int32"); dlt_user_log_write_int32(&context_data, INT32_MIN); /* (-2147483647-1) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 6) > 0) { dlt_user_log_write_string(&context_data, "int64"); dlt_user_log_write_int64(&context_data, INT64_MIN); /* (-__INT64_C(9223372036854775807)-1) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 7) > 0) { dlt_user_log_write_string(&context_data, "uint"); dlt_user_log_write_uint(&context_data, UINT32_MAX); /* (4294967295U) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 8) > 0) { dlt_user_log_write_string(&context_data, "uint8"); dlt_user_log_write_uint8(&context_data, UINT8_MAX); /* (255) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 9) > 0) { dlt_user_log_write_string(&context_data, "uint16"); dlt_user_log_write_uint16(&context_data, UINT16_MAX); /* (65535) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 10) > 0) { dlt_user_log_write_string(&context_data, "uint32"); dlt_user_log_write_uint32(&context_data, UINT32_MAX); /* (4294967295U) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 11) > 0) { dlt_user_log_write_string(&context_data, "uint64"); dlt_user_log_write_uint64(&context_data, UINT64_MAX); /* (__UINT64_C(18446744073709551615)) */ dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 12) > 0) { dlt_user_log_write_string(&context_data, "float32"); dlt_user_log_write_float32(&context_data, FLT_MIN); dlt_user_log_write_float32(&context_data, FLT_MAX); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 13) > 0) { dlt_user_log_write_string(&context_data, "float64"); dlt_user_log_write_float64(&context_data, DBL_MIN); dlt_user_log_write_float64(&context_data, DBL_MAX); dlt_user_log_write_finish(&context_data); } for (num2 = 0; num2 < 10; num2++) buffer[num2] = (char) num2; if (dlt_user_log_write_start_id(&(context_function_test[2]), &context_data, DLT_LOG_INFO, 14) > 0) { dlt_user_log_write_string(&context_data, "raw"); dlt_user_log_write_raw(&context_data, buffer, 10); dlt_user_log_write_finish(&context_data); } dlt_verbose_mode(); /* wait 2 second before next test */ sleep(2); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test3: (Function IF) finished"); dlt_user_log_write_finish(&context_data); } return 0; } int test4f(void) { char buffer[1024]; int num; for (num = 0; num < 1024; num++) buffer[num] = (char) num; /* Test 4: (Function IF) Message size test */ printf("Test4f: (Function IF) Test different message sizes\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test4: (Function IF) Test different message sizes"); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[3]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "1"); dlt_user_log_write_raw(&context_data, buffer, 1); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[3]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "16"); dlt_user_log_write_raw(&context_data, buffer, 16); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[3]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "256"); dlt_user_log_write_raw(&context_data, buffer, 256); dlt_user_log_write_finish(&context_data); } if (dlt_user_log_write_start(&(context_function_test[3]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "1024"); dlt_user_log_write_raw(&context_data, buffer, 1024); dlt_user_log_write_finish(&context_data); } /* wait 2 second before next test */ sleep(2); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test4: (Function IF) finished"); dlt_user_log_write_finish(&context_data); } return 0; } int test5f(void) { char buffer[32]; int num; int i; char log[DLT_USER_BUF_MAX_SIZE]; for (num = 0; num < 32; num++) buffer[num] = (char) num; /* Test 5: (Function IF) Test high-level API */ printf("Test5f: (Function IF) Test high-level API\n"); dlt_log_string(&context_info, DLT_LOG_INFO, "Test5: (Function IF) Test high-level API"); dlt_log_string(&(context_function_test[4]), DLT_LOG_INFO, "Next line: dlt_log_int()"); dlt_log_int(&(context_function_test[4]), DLT_LOG_INFO, -42); dlt_log_string(&(context_function_test[4]), DLT_LOG_INFO, "Next line: dlt_log_uint()"); dlt_log_uint(&(context_function_test[4]), DLT_LOG_INFO, 42); dlt_log_string(&(context_function_test[4]), DLT_LOG_INFO, "Next line: dlt_log_string()"); dlt_log_string(&(context_function_test[4]), DLT_LOG_INFO, "String output"); dlt_log_string(&(context_function_test[4]), DLT_LOG_INFO, "Next line: dlt_log_raw()"); dlt_log_raw(&(context_function_test[4]), DLT_LOG_INFO, buffer, 16); dlt_log_string(&(context_function_test[4]), DLT_LOG_INFO, "Next line: dlt_log_string_int()"); dlt_log_string_int(&(context_function_test[4]), DLT_LOG_INFO, "String output: ", -42); dlt_log_string(&(context_function_test[4]), DLT_LOG_INFO, "Next line: dlt_log_string_uint()"); dlt_log_string_uint(&(context_function_test[4]), DLT_LOG_INFO, "String output: ", 42); dlt_log_string(&(context_function_test[4]), DLT_LOG_INFO, "Next lines: dlt_user_is_logLevel_enabled"); for (i = DLT_LOG_FATAL; i < DLT_LOG_MAX; i++) { if (dlt_user_is_logLevel_enabled(&(context_function_test[4]), i) == DLT_RETURN_TRUE) { snprintf(log, DLT_USER_BUF_MAX_SIZE, "Loglevel is enabled: %s", loglevelstr[i]); dlt_log_string(&(context_function_test[4]), DLT_LOG_INFO, log); } else { snprintf(log, DLT_USER_BUF_MAX_SIZE, "Loglevel is disabled: %s", loglevelstr[i]); dlt_log_string(&(context_function_test[4]), DLT_LOG_INFO, log); } } /* wait 2 second before next test */ sleep(2); dlt_log_string(&context_info, DLT_LOG_INFO, "Test5: (Function IF) finished"); return 0; } int test6f(void) { /* Test 6: (Function IF) Test local printing */ printf("Test6f: (Function IF) Test local printing\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test 6: (Function IF) Test local printing"); dlt_user_log_write_finish(&context_data); } dlt_enable_local_print(); if (dlt_user_log_write_start(&(context_function_test[5]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Message (visible: locally printed)"); dlt_user_log_write_finish(&context_data); } dlt_disable_local_print(); if (dlt_user_log_write_start(&(context_function_test[5]), &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Message (invisible: not locally printed)"); dlt_user_log_write_finish(&context_data); } /* wait 2 second before next test */ sleep(2); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test6: (Function IF) finished"); dlt_user_log_write_finish(&context_data); } return 0; } int test7f(void) { #ifdef DLT_NETWORK_TRACE_ENABLE char buffer[32]; int num; for (num = 0; num < 32; num++) buffer[num] = (char) num; /* Show all log messages and traces */ dlt_set_application_ll_ts_limit(DLT_LOG_VERBOSE, DLT_TRACE_STATUS_ON); /* Test 7: (Function IF) Test network trace */ printf("Test7f: (Function IF) Test network trace\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test 7: (Function IF) Test network trace"); dlt_user_log_write_finish(&context_data); } /* Dummy message: 16 byte header, 32 byte payload */ dlt_user_trace_network(&(context_function_test[6]), DLT_NW_TRACE_IPC, 16, buffer, 32, buffer); dlt_user_trace_network(&(context_function_test[6]), DLT_NW_TRACE_CAN, 16, buffer, 32, buffer); dlt_user_trace_network(&(context_function_test[6]), DLT_NW_TRACE_FLEXRAY, 16, buffer, 32, buffer); dlt_user_trace_network(&(context_function_test[6]), DLT_NW_TRACE_MOST, 16, buffer, 32, buffer); /* wait 2 second before next test */ sleep(2); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test7: (Function IF) finished"); dlt_user_log_write_finish(&context_data); } dlt_set_application_ll_ts_limit(DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT); sleep(2); #else /* Test 7: (Function IF) Test network trace */ printf("Test7f: (Function IF) Test network trace: Network trace interface is not supported, skipping\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test 7: (Function IF) Test network trace: Network trace interface is not supported, skipping"); dlt_user_log_write_finish(&context_data); } #endif return 0; } int test8f(void) { #ifdef DLT_NETWORK_TRACE_ENABLE char buffer[1024 * 5]; int num; for (num = 0; num < 1024 * 5; num++) buffer[num] = (char) num; /* Show all log messages and traces */ dlt_set_application_ll_ts_limit(DLT_LOG_VERBOSE, DLT_TRACE_STATUS_ON); /* Test 8: (Function IF) Test truncated network trace */ printf("Test8f: (Function IF) Test truncated network trace\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test 8: (Function IF) Test truncated network trace"); dlt_user_log_write_finish(&context_data); } /* Dummy message: 16 byte header, 32 byte payload */ dlt_user_trace_network_truncated(&(context_function_test[7]), DLT_NW_TRACE_IPC, 16, buffer, 1024 * 5, buffer, 1); dlt_user_trace_network_truncated(&(context_function_test[7]), DLT_NW_TRACE_CAN, 16, buffer, 1024 * 5, buffer, 1); dlt_user_trace_network_truncated(&(context_function_test[7]), DLT_NW_TRACE_FLEXRAY, 16, buffer, 1024 * 5, buffer, 1); dlt_user_trace_network_truncated(&(context_function_test[7]), DLT_NW_TRACE_MOST, 16, buffer, 1024 * 5, buffer, 1); /* wait 2 second before next test */ sleep(2); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test8: (Function IF) finished"); dlt_user_log_write_finish(&context_data); } dlt_set_application_ll_ts_limit(DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT); sleep(2); #else /* Test 8: (Function IF) Test truncated network trace */ printf("Test8f: (Function IF) Test truncated network trace: Network trace interface is not supported, skipping\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test 8: (Function IF) Test truncated network trace: Network trace interface is not supported, skipping"); dlt_user_log_write_finish(&context_data); } #endif return 0; } int test9f(void) { #ifdef DLT_NETWORK_TRACE_ENABLE char buffer[1024 * 5]; int num; for (num = 0; num < 1024 * 5; num++) buffer[num] = (char) num; /* Show all log messages and traces */ dlt_set_application_ll_ts_limit(DLT_LOG_VERBOSE, DLT_TRACE_STATUS_ON); /* Test 9: (Function IF) Test segmented network trace */ printf("Test9f: (Function IF) Test segmented network trace\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test 9: (Function IF) Test segmented network trace"); dlt_user_log_write_finish(&context_data); } /* Dummy message: 16 byte header, 5k payload */ dlt_user_trace_network_segmented(&(context_function_test[8]), DLT_NW_TRACE_IPC, 16, buffer, 1024 * 5, buffer); dlt_user_trace_network_segmented(&(context_function_test[8]), DLT_NW_TRACE_CAN, 16, buffer, 1024 * 5, buffer); dlt_user_trace_network_segmented(&(context_function_test[8]), DLT_NW_TRACE_FLEXRAY, 16, buffer, 1024 * 5, buffer); dlt_user_trace_network_segmented(&(context_function_test[8]), DLT_NW_TRACE_MOST, 16, buffer, 1024 * 5, buffer); /* wait 2 second before next test */ sleep(2); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test9: (Function IF) finished"); dlt_user_log_write_finish(&context_data); } dlt_set_application_ll_ts_limit(DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT); sleep(2); #else /* Test 9: (Function IF) Test segmented network trace */ printf("Test9f: (Function IF) Test segmented network trace: Network trace interface is not supported, skipping\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test 9: (Function IF) Test segmented network trace: Network trace interface is not supported, skipping"); dlt_user_log_write_finish(&context_data); } #endif return 0; } int test10f(void) { unsigned long timestamp[] = { 0, 100000, DLT_MAX_TIMESTAMP }; /* Test 10: test minimum, regular and maximum timestamp for both verbose and non verbose mode*/ printf("Test10f: (Function IF) Test user-supplied timestamps\n"); if (dlt_user_log_write_start(&context_info, &context_data, DLT_LOG_INFO) > 0) { dlt_user_log_write_string(&context_data, "Test10: (Function IF) Test user-supplied time stamps"); dlt_user_log_write_finish(&context_data); } for (int i = 0; i < 3; i++) { char s[12]; snprintf(s, 12, "%d.%04d", (int)(timestamp[i] / 10000), (int)(timestamp[i] % 10000)); dlt_verbose_mode(); if (dlt_user_log_write_start(&context_function_test[9], &context_data, DLT_LOG_INFO) > 0) { context_data.use_timestamp = DLT_USER_TIMESTAMP; context_data.user_timestamp = (uint32_t) timestamp[i]; dlt_user_log_write_string(&context_data, "Tested Timestamp:"); dlt_user_log_write_string(&context_data, s); dlt_user_log_write_finish(&context_data); } dlt_nonverbose_mode(); if (dlt_user_log_write_start_id(&(context_function_test[9]), &context_data, DLT_LOG_INFO, 16) > 0) { context_data.use_timestamp = DLT_USER_TIMESTAMP; context_data.user_timestamp = (uint32_t) timestamp[i]; dlt_user_log_write_string(&context_data, s); dlt_user_log_write_finish(&context_data); } } dlt_verbose_mode(); /* wait 2 second before next test */ sleep(2); DLT_LOG(context_info, DLT_LOG_INFO, DLT_STRING("Test10: (Macro IF) finished")); return 0; } int test_injection_macro_callback(uint32_t service_id, void *data, uint32_t length) { char text[1024]; memset(text, 0, 1024); snprintf(text, 1024, "Injection received (macro IF). ID: 0x%.4x, Length: %d", service_id, length); printf("%s \n", text); DLT_LOG(context_macro_callback, DLT_LOG_INFO, DLT_STRING("Injection received (macro IF). ID: "), DLT_UINT32(service_id), DLT_STRING("Data:"), DLT_STRING(text)); memset(text, 0, 1024); if (length > 0) { dlt_print_mixed_string(text, 1024, data, (int) length, 0); printf("%s \n", text); } return 0; } int test_injection_function_callback(uint32_t service_id, void *data, uint32_t length) { char text[1024]; memset(text, 0, 1024); snprintf(text, 1024, "Injection received (function IF). ID: 0x%.4x, Length: %d", service_id, length); printf("%s \n", text); DLT_LOG(context_function_callback, DLT_LOG_INFO, DLT_STRING("Injection received (function IF). ID: "), DLT_UINT32(service_id), DLT_STRING("Data:"), DLT_STRING(text)); memset(text, 0, 1024); if (length > 0) { dlt_print_mixed_string(text, 1024, data, (int) length, 0); printf("%s \n", text); } return 0; } dlt-daemon-2.18.6/systemd/000077500000000000000000000000001377520261000153275ustar00rootroot00000000000000dlt-daemon-2.18.6/systemd/3rdparty/000077500000000000000000000000001377520261000170775ustar00rootroot00000000000000dlt-daemon-2.18.6/systemd/3rdparty/sd-daemon.c000066400000000000000000000330561377520261000211210ustar00rootroot00000000000000/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /*** Copyright 2010 Lennart Poettering 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. ***/ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include #include #include #include #ifdef __BIONIC__ #include #else #include #endif #include #include #include #include #include #include #include #include #include #if defined(__linux__) #include #endif #include "sd-daemon.h" #if (__GNUC__ >= 4) #ifdef SD_EXPORT_SYMBOLS /* Export symbols */ #define _sd_export_ __attribute__ ((visibility("default"))) #else /* Don't export the symbols */ #define _sd_export_ __attribute__ ((visibility("hidden"))) #endif #else #define _sd_export_ #endif _sd_export_ int sd_listen_fds(int unset_environment) { #if defined(DISABLE_SYSTEMD) || !defined(__linux__) return 0; #else int r, fd; const char *e; char *p = NULL; unsigned long l; if (!(e = getenv("LISTEN_PID"))) { r = 0; goto finish; } errno = 0; l = strtoul(e, &p, 10); if (errno != 0) { r = -errno; goto finish; } if (!p || *p || l <= 0) { r = -EINVAL; goto finish; } /* Is this for us? */ if (getpid() != (pid_t) l) { r = 0; goto finish; } if (!(e = getenv("LISTEN_FDS"))) { r = 0; goto finish; } errno = 0; l = strtoul(e, &p, 10); if (errno != 0) { r = -errno; goto finish; } if (!p || *p) { r = -EINVAL; goto finish; } for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) { int flags; if ((flags = fcntl(fd, F_GETFD)) < 0) { r = -errno; goto finish; } if (flags & FD_CLOEXEC) continue; if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) { r = -errno; goto finish; } } r = (int) l; finish: if (unset_environment) { unsetenv("LISTEN_PID"); unsetenv("LISTEN_FDS"); } return r; #endif } _sd_export_ int sd_is_fifo(int fd, const char *path) { struct stat st_fd; if (fd < 0) return -EINVAL; memset(&st_fd, 0, sizeof(st_fd)); if (fstat(fd, &st_fd) < 0) return -errno; if (!S_ISFIFO(st_fd.st_mode)) return 0; if (path) { struct stat st_path; memset(&st_path, 0, sizeof(st_path)); if (stat(path, &st_path) < 0) { if (errno == ENOENT || errno == ENOTDIR) return 0; return -errno; } return st_path.st_dev == st_fd.st_dev && st_path.st_ino == st_fd.st_ino; } return 1; } _sd_export_ int sd_is_special(int fd, const char *path) { struct stat st_fd; if (fd < 0) return -EINVAL; if (fstat(fd, &st_fd) < 0) return -errno; if (!S_ISREG(st_fd.st_mode) && !S_ISCHR(st_fd.st_mode)) return 0; if (path) { struct stat st_path; if (stat(path, &st_path) < 0) { if (errno == ENOENT || errno == ENOTDIR) return 0; return -errno; } if (S_ISREG(st_fd.st_mode) && S_ISREG(st_path.st_mode)) return st_path.st_dev == st_fd.st_dev && st_path.st_ino == st_fd.st_ino; else if (S_ISCHR(st_fd.st_mode) && S_ISCHR(st_path.st_mode)) return st_path.st_rdev == st_fd.st_rdev; else return 0; } return 1; } static int sd_is_socket_internal(int fd, int type, int listening) { struct stat st_fd; if (fd < 0 || type < 0) return -EINVAL; if (fstat(fd, &st_fd) < 0) return -errno; if (!S_ISSOCK(st_fd.st_mode)) return 0; if (type != 0) { int other_type = 0; socklen_t l = sizeof(other_type); if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &other_type, &l) < 0) return -errno; if (l != sizeof(other_type)) return -EINVAL; if (other_type != type) return 0; } if (listening >= 0) { int accepting = 0; socklen_t l = sizeof(accepting); if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &accepting, &l) < 0) return -errno; if (l != sizeof(accepting)) return -EINVAL; if (!accepting != !listening) return 0; } return 1; } union sockaddr_union { struct sockaddr sa; struct sockaddr_in in4; struct sockaddr_in6 in6; struct sockaddr_un un; struct sockaddr_storage storage; }; _sd_export_ int sd_is_socket(int fd, int family, int type, int listening) { int r; if (family < 0) return -EINVAL; if ((r = sd_is_socket_internal(fd, type, listening)) <= 0) return r; if (family > 0) { union sockaddr_union sockaddr; socklen_t l; memset(&sockaddr, 0, sizeof(sockaddr)); l = sizeof(sockaddr); if (getsockname(fd, &sockaddr.sa, &l) < 0) return -errno; if (l < sizeof(sa_family_t)) return -EINVAL; return sockaddr.sa.sa_family == family; } return 1; } _sd_export_ int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) { union sockaddr_union sockaddr; socklen_t l; int r; if (family != 0 && family != AF_INET && family != AF_INET6) return -EINVAL; if ((r = sd_is_socket_internal(fd, type, listening)) <= 0) return r; memset(&sockaddr, 0, sizeof(sockaddr)); l = sizeof(sockaddr); if (getsockname(fd, &sockaddr.sa, &l) < 0) return -errno; if (l < sizeof(sa_family_t)) return -EINVAL; if (sockaddr.sa.sa_family != AF_INET && sockaddr.sa.sa_family != AF_INET6) return 0; if (family > 0) if (sockaddr.sa.sa_family != family) return 0; if (port > 0) { if (sockaddr.sa.sa_family == AF_INET) { if (l < sizeof(struct sockaddr_in)) return -EINVAL; return htons(port) == sockaddr.in4.sin_port; } else { if (l < sizeof(struct sockaddr_in6)) return -EINVAL; return htons(port) == sockaddr.in6.sin6_port; } } return 1; } _sd_export_ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length) { union sockaddr_union sockaddr; socklen_t l; int r; if ((r = sd_is_socket_internal(fd, type, listening)) <= 0) return r; memset(&sockaddr, 0, sizeof(sockaddr)); l = sizeof(sockaddr); if (getsockname(fd, &sockaddr.sa, &l) < 0) return -errno; if (l < sizeof(sa_family_t)) return -EINVAL; if (sockaddr.sa.sa_family != AF_UNIX) return 0; if (path) { if (length <= 0) length = strlen(path); if (length <= 0) /* Unnamed socket */ return l == offsetof(struct sockaddr_un, sun_path); if (path[0]) /* Normal path socket */ return (l >= offsetof(struct sockaddr_un, sun_path) + length + 1) && memcmp(path, sockaddr.un.sun_path, length+1) == 0; else /* Abstract namespace socket */ return (l == offsetof(struct sockaddr_un, sun_path) + length) && memcmp(path, sockaddr.un.sun_path, length) == 0; } return 1; } _sd_export_ int sd_is_mq(int fd, const char *path) { #if !defined(__linux__) return 0; #else struct mq_attr attr; if (fd < 0) return -EINVAL; if (mq_getattr(fd, &attr) < 0) return -errno; if (path) { char fpath[PATH_MAX]; struct stat a, b; if (path[0] != '/') return -EINVAL; if (fstat(fd, &a) < 0) return -errno; strncpy(stpcpy(fpath, "/dev/mqueue"), path, sizeof(fpath) - 12); fpath[sizeof(fpath)-1] = 0; if (stat(fpath, &b) < 0) return -errno; if (a.st_dev != b.st_dev || a.st_ino != b.st_ino) return 0; } return 1; #endif } _sd_export_ int sd_notify(int unset_environment, const char *state) { #if defined(DISABLE_SYSTEMD) || !defined(__linux__) || !defined(SOCK_CLOEXEC) return 0; #else int fd = -1, r; struct msghdr msghdr; struct iovec iovec; union sockaddr_union sockaddr; const char *e; if (!state) { r = -EINVAL; goto finish; } if (!(e = getenv("NOTIFY_SOCKET"))) return 0; /* Must be an abstract socket, or an absolute path */ if ((e[0] != '@' && e[0] != '/') || e[1] == 0) { r = -EINVAL; goto finish; } if ((fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) { r = -errno; goto finish; } memset(&sockaddr, 0, sizeof(sockaddr)); sockaddr.sa.sa_family = AF_UNIX; strncpy(sockaddr.un.sun_path, e, sizeof(sockaddr.un.sun_path)-1); if (sockaddr.un.sun_path[0] == '@') sockaddr.un.sun_path[0] = 0; memset(&iovec, 0, sizeof(iovec)); iovec.iov_base = (char*) state; iovec.iov_len = strlen(state); memset(&msghdr, 0, sizeof(msghdr)); msghdr.msg_name = &sockaddr; msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(e); if (msghdr.msg_namelen > sizeof(struct sockaddr_un)) msghdr.msg_namelen = sizeof(struct sockaddr_un); msghdr.msg_iov = &iovec; msghdr.msg_iovlen = 1; if (sendmsg(fd, &msghdr, MSG_NOSIGNAL) < 0) { r = -errno; goto finish; } r = 1; finish: if (unset_environment) unsetenv("NOTIFY_SOCKET"); if (fd >= 0) close(fd); return r; #endif } _sd_export_ int sd_notifyf(int unset_environment, const char *format, ...) { #if defined(DISABLE_SYSTEMD) || !defined(__linux__) return 0; #else va_list ap; char *p = NULL; int r; va_start(ap, format); r = vasprintf(&p, format, ap); va_end(ap); if (r < 0 || !p) return -ENOMEM; r = sd_notify(unset_environment, p); free(p); return r; #endif } _sd_export_ int sd_booted(void) { #if defined(DISABLE_SYSTEMD) || !defined(__linux__) return 0; #else struct stat a, b; /* We simply test whether the systemd cgroup hierarchy is * mounted */ if (lstat("/sys/fs/cgroup", &a) < 0) return 0; if (lstat("/sys/fs/cgroup/systemd", &b) < 0) return 0; return a.st_dev != b.st_dev; #endif } dlt-daemon-2.18.6/systemd/3rdparty/sd-daemon.h000066400000000000000000000255641377520261000211330ustar00rootroot00000000000000/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ #ifndef foosddaemonhfoo #define foosddaemonhfoo /*** Copyright 2010 Lennart Poettering 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. ***/ #include #include #ifdef __cplusplus extern "C" { #endif /* Reference implementation of a few systemd related interfaces for writing daemons. These interfaces are trivial to implement. To simplify porting we provide this reference implementation. Applications are welcome to reimplement the algorithms described here if they do not want to include these two source files. The following functionality is provided: - Support for logging with log levels on stderr - File descriptor passing for socket-based activation - Daemon startup and status notification - Detection of systemd boots You may compile this with -DDISABLE_SYSTEMD to disable systemd support. This makes all those calls NOPs that are directly related to systemd (i.e. only sd_is_xxx() will stay useful). Since this is drop-in code we don't want any of our symbols to be exported in any case. Hence we declare hidden visibility for all of them. You may find an up-to-date version of these source files online: http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h http://cgit.freedesktop.org/systemd/systemd/plain/src/sd-daemon.c This should compile on non-Linux systems, too, but with the exception of the sd_is_xxx() calls all functions will become NOPs. See sd-daemon(7) for more information. */ #ifndef _sd_printf_attr_ #if __GNUC__ >= 4 #define _sd_printf_attr_(a,b) __attribute__ ((format (printf, a, b))) #else #define _sd_printf_attr_(a,b) #endif #endif /* Log levels for usage on stderr: fprintf(stderr, SD_NOTICE "Hello World!\n"); This is similar to printk() usage in the kernel. */ #define SD_EMERG "<0>" /* system is unusable */ #define SD_ALERT "<1>" /* action must be taken immediately */ #define SD_CRIT "<2>" /* critical conditions */ #define SD_ERR "<3>" /* error conditions */ #define SD_WARNING "<4>" /* warning conditions */ #define SD_NOTICE "<5>" /* normal but significant condition */ #define SD_INFO "<6>" /* informational */ #define SD_DEBUG "<7>" /* debug-level messages */ /* The first passed file descriptor is fd 3 */ #define SD_LISTEN_FDS_START 3 /* Returns how many file descriptors have been passed, or a negative errno code on failure. Optionally, removes the $LISTEN_FDS and $LISTEN_PID file descriptors from the environment (recommended, but problematic in threaded environments). If r is the return value of this function you'll find the file descriptors passed as fds SD_LISTEN_FDS_START to SD_LISTEN_FDS_START+r-1. Returns a negative errno style error code on failure. This function call ensures that the FD_CLOEXEC flag is set for the passed file descriptors, to make sure they are not passed on to child processes. If FD_CLOEXEC shall not be set, the caller needs to unset it after this call for all file descriptors that are used. See sd_listen_fds(3) for more information. */ int sd_listen_fds(int unset_environment); /* Helper call for identifying a passed file descriptor. Returns 1 if the file descriptor is a FIFO in the file system stored under the specified path, 0 otherwise. If path is NULL a path name check will not be done and the call only verifies if the file descriptor refers to a FIFO. Returns a negative errno style error code on failure. See sd_is_fifo(3) for more information. */ int sd_is_fifo(int fd, const char *path); /* Helper call for identifying a passed file descriptor. Returns 1 if the file descriptor is a special character device on the file system stored under the specified path, 0 otherwise. If path is NULL a path name check will not be done and the call only verifies if the file descriptor refers to a special character. Returns a negative errno style error code on failure. See sd_is_special(3) for more information. */ int sd_is_special(int fd, const char *path); /* Helper call for identifying a passed file descriptor. Returns 1 if the file descriptor is a socket of the specified family (AF_INET, ...) and type (SOCK_DGRAM, SOCK_STREAM, ...), 0 otherwise. If family is 0 a socket family check will not be done. If type is 0 a socket type check will not be done and the call only verifies if the file descriptor refers to a socket. If listening is > 0 it is verified that the socket is in listening mode. (i.e. listen() has been called) If listening is == 0 it is verified that the socket is not in listening mode. If listening is < 0 no listening mode check is done. Returns a negative errno style error code on failure. See sd_is_socket(3) for more information. */ int sd_is_socket(int fd, int family, int type, int listening); /* Helper call for identifying a passed file descriptor. Returns 1 if the file descriptor is an Internet socket, of the specified family (either AF_INET or AF_INET6) and the specified type (SOCK_DGRAM, SOCK_STREAM, ...), 0 otherwise. If version is 0 a protocol version check is not done. If type is 0 a socket type check will not be done. If port is 0 a socket port check will not be done. The listening flag is used the same way as in sd_is_socket(). Returns a negative errno style error code on failure. See sd_is_socket_inet(3) for more information. */ int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port); /* Helper call for identifying a passed file descriptor. Returns 1 if the file descriptor is an AF_UNIX socket of the specified type (SOCK_DGRAM, SOCK_STREAM, ...) and path, 0 otherwise. If type is 0 a socket type check will not be done. If path is NULL a socket path check will not be done. For normal AF_UNIX sockets set length to 0. For abstract namespace sockets set length to the length of the socket name (including the initial 0 byte), and pass the full socket path in path (including the initial 0 byte). The listening flag is used the same way as in sd_is_socket(). Returns a negative errno style error code on failure. See sd_is_socket_unix(3) for more information. */ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length); /* Helper call for identifying a passed file descriptor. Returns 1 if the file descriptor is a POSIX Message Queue of the specified name, 0 otherwise. If path is NULL a message queue name check is not done. Returns a negative errno style error code on failure. */ int sd_is_mq(int fd, const char *path); /* Informs systemd about changed daemon state. This takes a number of newline separated environment-style variable assignments in a string. The following variables are known: READY=1 Tells systemd that daemon startup is finished (only relevant for services of Type=notify). The passed argument is a boolean "1" or "0". Since there is little value in signaling non-readiness the only value daemons should send is "READY=1". STATUS=... Passes a single-line status string back to systemd that describes the daemon state. This is free-from and can be used for various purposes: general state feedback, fsck-like programs could pass completion percentages and failing programs could pass a human readable error message. Example: "STATUS=Completed 66% of file system check..." ERRNO=... If a daemon fails, the errno-style error code, formatted as string. Example: "ERRNO=2" for ENOENT. BUSERROR=... If a daemon fails, the D-Bus error-style error code. Example: "BUSERROR=org.freedesktop.DBus.Error.TimedOut" MAINPID=... The main pid of a daemon, in case systemd did not fork off the process itself. Example: "MAINPID=4711" WATCHDOG=1 Tells systemd to update the watchdog timestamp. Services using this feature should do this in regular intervals. A watchdog framework can use the timestamps to detect failed services. Daemons can choose to send additional variables. However, it is recommended to prefix variable names not listed above with X_. Returns a negative errno-style error code on failure. Returns > 0 if systemd could be notified, 0 if it couldn't possibly because systemd is not running. Example: When a daemon finished starting up, it could issue this call to notify systemd about it: sd_notify(0, "READY=1"); See sd_notifyf() for more complete examples. See sd_notify(3) for more information. */ int sd_notify(int unset_environment, const char *state); /* Similar to sd_notify() but takes a format string. Example 1: A daemon could send the following after initialization: sd_notifyf(0, "READY=1\n" "STATUS=Processing requests...\n" "MAINPID=%lu", (unsigned long) getpid()); Example 2: A daemon could send the following shortly before exiting, on failure: sd_notifyf(0, "STATUS=Failed to start up: %s\n" "ERRNO=%i", strerror(errno), errno); See sd_notifyf(3) for more information. */ int sd_notifyf(int unset_environment, const char *format, ...) _sd_printf_attr_(2,3); /* Returns > 0 if the system was booted with systemd. Returns < 0 on error. Returns 0 if the system was not booted with systemd. Note that all of the functions above handle non-systemd boots just fine. You should NOT protect them with a call to this function. Also note that this function checks whether the system, not the user session is controlled by systemd. However the functions above work for both user and system services. See sd_booted(3) for more information. */ int sd_booted(void); #ifdef __cplusplus } #endif #endif dlt-daemon-2.18.6/systemd/CMakeLists.txt000066400000000000000000000066531377520261000201010ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### if(WITH_SYSTEMD) set(SYSTEMD_CONFIGURATIONS_FILES_DIR ${SYSTEMD_UNITDIR} ) if(WITH_SYSTEMD_WATCHDOG) set( DLT_WatchdogSec 2 ) message( STATUS "The systemd watchdog is enabled - timeout is set to ${DLT_WatchdogSec} seconds") else(WITH_SYSTEMD_WATCHDOG) set( DLT_WatchdogSec 0 ) message( STATUS "The systemd watchdog is disabled") endif(WITH_SYSTEMD_WATCHDOG) configure_file(${PROJECT_SOURCE_DIR}/systemd/dlt.service.cmake ${PROJECT_BINARY_DIR}/systemd/dlt.service) message( STATUS "Configured systemd unit file:dlt.service" ) install(FILES ${PROJECT_BINARY_DIR}/systemd/dlt.service DESTINATION ${SYSTEMD_CONFIGURATIONS_FILES_DIR} ) if(WITH_DLT_SYSTEM) configure_file(${PROJECT_SOURCE_DIR}/systemd/dlt-system.service.cmake ${PROJECT_BINARY_DIR}/systemd/dlt-system.service) message( STATUS "Configured systemd unit file:dlt-system.service" ) install(FILES ${PROJECT_BINARY_DIR}/systemd/dlt-system.service DESTINATION ${SYSTEMD_CONFIGURATIONS_FILES_DIR} ) endif(WITH_DLT_SYSTEM) if(WITH_DLT_DBUS) configure_file(${PROJECT_SOURCE_DIR}/systemd/dlt-dbus.service.cmake ${PROJECT_BINARY_DIR}/systemd/dlt-dbus.service) message( STATUS "Configured systemd unit file:dlt-dbus.service" ) install(FILES ${PROJECT_BINARY_DIR}/systemd/dlt-dbus.service DESTINATION ${SYSTEMD_CONFIGURATIONS_FILES_DIR} ) endif(WITH_DLT_DBUS) if(WITH_DLT_CONSOLE AND WITH_DLT_EXAMPLES) configure_file(${PROJECT_SOURCE_DIR}/systemd/dlt-receive.service.cmake ${PROJECT_BINARY_DIR}/systemd/dlt-receive.service) message( STATUS "Configured systemd unit file:dlt-receive.service" ) install(FILES ${PROJECT_BINARY_DIR}/systemd/dlt-receive.service DESTINATION ${SYSTEMD_CONFIGURATIONS_FILES_DIR} ) endif(WITH_DLT_CONSOLE AND WITH_DLT_EXAMPLES) if(WITH_DLT_EXAMPLES) configure_file(${PROJECT_SOURCE_DIR}/systemd/dlt-example-user.service.cmake ${PROJECT_BINARY_DIR}/systemd/dlt-example-user.service) message( STATUS "Configured systemd unit file:dlt-example-user.service" ) install(FILES ${PROJECT_BINARY_DIR}/systemd/dlt-example-user.service DESTINATION ${SYSTEMD_CONFIGURATIONS_FILES_DIR} ) endif(WITH_DLT_EXAMPLES) if(WITH_DLT_ADAPTOR) set( DLT_ADAPTOR_UDP_APPID "DUDP" ) set( DLT_ADAPTOR_UDP_CTID "DCTI" ) set( DLT_ADAPTOR_UDP_PORT 4712 ) configure_file(${PROJECT_SOURCE_DIR}/systemd/dlt-adaptor-udp.service.cmake ${PROJECT_BINARY_DIR}/systemd/dlt-adaptor-udp.service) message( STATUS "Configured systemd unit file:dlt-adaptor-udp.service" ) message(STATUS "DLT adaptor udp configuration: APPID=${DLT_ADAPTOR_UDP_APPID} CTID=${DLT_ADAPTOR_UDP_CTID} PORT=${DLT_ADAPTOR_UDP_PORT}" ) install(FILES ${PROJECT_BINARY_DIR}/systemd/dlt-adaptor-udp.service DESTINATION ${SYSTEMD_CONFIGURATIONS_FILES_DIR} ) endif(WITH_DLT_ADAPTOR) message(STATUS "Unit files will be installed to ${SYSTEMD_CONFIGURATIONS_FILES_DIR} after make install" ) endif(WITH_SYSTEMD) dlt-daemon-2.18.6/systemd/dlt-adaptor-udp.service.cmake000066400000000000000000000014071377520261000227730ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### [Unit] Description=GENIVI DLT adaptor stdin. Adaptor for forwarding received UDP messages to DLT daemon. Wants=dlt.service [Service] Type=simple User=@DLT_USER@ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-adaptor-udp -a @DLT_ADAPTOR_UDP_APPID@ -c @DLT_ADAPTOR_UDP_CTID@ -p @DLT_ADAPTOR_UDP_PORT@ LimitCORE=infinity [Install] WantedBy=multi-user.targetdlt-daemon-2.18.6/systemd/dlt-dbus.service.cmake000066400000000000000000000013711377520261000215100ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### [Unit] Description=GENIVI DLT DBus. Application to forward DBus messages to DLT. Documentation=man:dlt-dbus(1) man:dlt-dbus.conf(5) Wants=dlt.service [Service] Type=simple User=@DLT_USER@ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-dbus WatchdogSec=@DLT_WatchdogSec@ NotifyAccess=main LimitCORE=infinity [Install] WantedBy=basic.target dlt-daemon-2.18.6/systemd/dlt-example-user.service.cmake000066400000000000000000000013141377520261000231570ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### [Unit] Description=GENIVI DLT example user. Generate DLT messages and store them to file or send them to daemon. Wants=dlt.service [Service] Type=simple User=@DLT_USER@ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-example-user "Hallo from GENIVI DLT example user application" LimitCORE=infinitydlt-daemon-2.18.6/systemd/dlt-receive.service.cmake000066400000000000000000000013311377520261000221710ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### [Unit] Description=GENIVI DLT receive. Receive DLT messages from DLT daemon and print or store the messages. Documentation=man:dlt-receive(1) Wants=dlt.service [Service] Type=simple User=@DLT_USER@ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-receive -o /tmp/dlt_receive_log.dlt localhost LimitCORE=infinitydlt-daemon-2.18.6/systemd/dlt-system.service.cmake000077500000000000000000000014601377520261000221010ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### [Unit] Description=GENIVI DLT system. Application to forward syslog messages to DLT, transfer system information, logs and files. Documentation=man:dlt-system(1) man:dlt-system.conf(5) Wants=dlt.service [Service] Type=simple User=@DLT_USER@ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-system WatchdogSec=@DLT_WatchdogSec@ NotifyAccess=main LimitCORE=infinity [Install] WantedBy=basic.target dlt-daemon-2.18.6/systemd/dlt.service.cmake000077500000000000000000000013011377520261000205510ustar00rootroot00000000000000####### # SPDX license identifier: MPL-2.0 # # Copyright (C) 2011-2015, BMW AG # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ####### [Unit] Description=GENIVI DLT logging daemon Documentation=man:dlt-daemon(1) man:dlt.conf(5) [Service] Type=simple User=@DLT_USER@ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-daemon WatchdogSec=@DLT_WatchdogSec@ NotifyAccess=main LimitCORE=infinity [Install] WantedBy=basic.target dlt-daemon-2.18.6/tests/000077500000000000000000000000001377520261000150015ustar00rootroot00000000000000dlt-daemon-2.18.6/tests/CMakeLists.txt000066400000000000000000000056361377520261000175530ustar00rootroot00000000000000#add_compile_options(-g -fsanitize=address) add_compile_options(-isystem ${gtest_SOURCE_DIR}/include) configure_file(${PROJECT_SOURCE_DIR}/tests/testfile.dlt ${PROJECT_BINARY_DIR}/tests COPYONLY) configure_file(${PROJECT_SOURCE_DIR}/tests/testfilter.txt ${PROJECT_BINARY_DIR}/tests COPYONLY) configure_file(${PROJECT_SOURCE_DIR}/tests/testfile_filetransfer.txt ${PROJECT_BINARY_DIR}/tests COPYONLY) if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") set(LIBRARIES gtest gtest_main) else() set(LIBRARIES gtest socket) endif() set(DLT_LIBRARIES ${LIBRARIES} dlt) set(DLT_DAEMON_LIBRARIES ${LIBRARIES} dlt_daemon) if(WITH_SYSTEMD OR WITH_SYSTEMD_WATCHDOG OR WITH_SYSTEMD_JOURNAL) add_definitions( -DSD_EXPORT_SYMBOLS ) endif() add_executable(gtest_dlt_common gtest_dlt_common.cpp) target_link_libraries(gtest_dlt_common ${DLT_LIBRARIES}) add_test(NAME gtest_dlt_common COMMAND gtest_dlt_common WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(gtest_dlt_user gtest_dlt_user.cpp) target_link_libraries(gtest_dlt_user ${DLT_LIBRARIES}) add_test(NAME gtest_dlt_user COMMAND gtest_dlt_user WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(gtest_dlt_daemon_common gtest_dlt_daemon_common.cpp ../src/daemon/dlt_daemon_common.c) target_link_libraries(gtest_dlt_daemon_common ${DLT_LIBRARIES}) add_test(NAME gtest_dlt_daemon_common COMMAND gtest_dlt_daemon_common WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(dlt_test_receiver dlt_test_receiver.c) target_link_libraries(dlt_test_receiver dlt) add_executable(dlt_env_ll_unit_test dlt_env_ll_unit_test.cpp) target_link_libraries(dlt_env_ll_unit_test ${DLT_LIBRARIES}) add_test(NAME dlt_env_ll_unit_test COMMAND gtest_dlt_common WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(dlt-test-preregister-context dlt-test-preregister-context.c) target_link_libraries(dlt-test-preregister-context ${DLT_LIBRARIES}) add_executable(gtest_dlt_daemon_gateway gtest_dlt_daemon_gateway.cpp ${systemd_SRCS}) target_link_libraries(gtest_dlt_daemon_gateway ${DLT_DAEMON_LIBRARIES}) add_executable(gtest_dlt_daemon_event_handler gtest_dlt_daemon_event_handler.cpp ${systemd_SRCS}) target_link_libraries(gtest_dlt_daemon_event_handler ${DLT_DAEMON_LIBRARIES}) add_test(NAME gtest_dlt_daemon_event_handler COMMAND gtest_dlt_daemon_event_handler WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(gtest_dlt_daemon_offline_log gtest_dlt_daemon_offline_log.cpp ${systemd_SRCS}) target_link_libraries(gtest_dlt_daemon_offline_log ${DLT_DAEMON_LIBRARIES}) if(WITH_DLT_SHM_ENABLE) add_executable(gtest_dlt_shm gtest_dlt_shm.cpp) endif(WITH_DLT_SHM_ENABLE) if(WITH_DLT_SHM_ENABLE) target_link_libraries(gtest_dlt_shm ${DLT_DAEMON_LIBRARIES}) endif(WITH_DLT_SHM_ENABLE) if(WITH_DLT_CXX11_EXT) add_executable(dlt-test-cpp-extension dlt-test-cpp-extension.cpp) target_link_libraries(dlt-test-cpp-extension ${DLT_LIBRARIES}) endif() dlt-daemon-2.18.6/tests/dlt-test-cpp-extension.cpp000066400000000000000000000062131377520261000220410ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Intel Corporation * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Stefan Vacek Intel Corporation * * \copyright Copyright Š 2015 Intel Corporation. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-cpp-extension.cpp */ #include "dlt_cpp_extension.hpp" #include #include struct MyStruct { int64_t uuid; int32_t interfaceId; int32_t registrationState; }; template<> inline int logToDlt(DltContextData &log, MyStruct const &value) { int result = 0; result += dlt_user_log_write_string(&log, "("); result += logToDlt(log, value.uuid); result += dlt_user_log_write_string(&log, ","); result += logToDlt(log, value.interfaceId); result += dlt_user_log_write_string(&log, ","); result += logToDlt(log, value.registrationState); result += dlt_user_log_write_string(&log, ")"); if (result != 0) result = -1; return result; } /** * Sample code to show usage of the cpp-extension * mainly the variadic templates */ int main() { if (dlt_register_app("TCPP", "Test cpp extension") < 0) { printf("Failed to register application\n"); return -1; } DltContext ctx; if (dlt_register_context_ll_ts(&ctx, "TCPP", "Test cpp extension", DLT_LOG_INFO, DLT_TRACE_STATUS_OFF) < 0) { printf("Failed to register context\n"); return -1; } dlt_enable_local_print(); dlt_verbose_mode(); DLT_LOG(ctx, DLT_LOG_WARN, DLT_STRING("a message")); /* the classic way to go */ int an_int = 42; float a_float = 22.7; DLT_LOG_FCN_CXX(ctx, DLT_LOG_WARN, "Testing DLT_LOG_CXX_FCN", an_int, a_float); DLT_LOG_CXX(ctx, DLT_LOG_WARN, 1.0, 65); /* Example for logging user-defined types */ MyStruct myData = { 1u, 2u, 3u }; DLT_LOG_CXX(ctx, DLT_LOG_WARN, "MyStruct myData", myData); char *non_const_string = (char *)malloc(17); memcpy(non_const_string, "non_const_string", 16); non_const_string[16] = 0; DLT_LOG_CXX(ctx, DLT_LOG_WARN, "char *", non_const_string); std::string aString = "std::string"; DLT_LOG_CXX(ctx, DLT_LOG_WARN, "std::string", aString); std::vector intVector; intVector.push_back(0); intVector.push_back(1); intVector.push_back(2); DLT_LOG_CXX(ctx, DLT_LOG_WARN, "vector", intVector); std::vector doubleList; doubleList.push_back(10.); doubleList.push_back(11.); doubleList.push_back(12.); DLT_LOG_CXX(ctx, DLT_LOG_WARN, "list", doubleList); std::map testMap; testMap["apple"] = 100; testMap["plum"] = 200; testMap["orange"] = 300; DLT_LOG_CXX(ctx, DLT_LOG_WARN, "map", testMap); dlt_unregister_context(&ctx); dlt_unregister_app(); return 0; } dlt-daemon-2.18.6/tests/dlt-test-preregister-context.c000066400000000000000000000026671377520261000227330ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Intel Corporation * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Stefan Vacek Intel Corporation * * \copyright Copyright Š 2015 Intel Corporation. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt-test-preregister-context.c */ #include /* for fork() */ #include "dlt.h" /** * @brief sample code for using pre-registered contexts */ int main() { DltContext mainContext; struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 200000 * 1000; DLT_REGISTER_CONTEXT(mainContext, "CTXP", "main context"); DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("First message before app registered")); nanosleep(&ts, NULL); DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("Second message before app registered")); nanosleep(&ts, NULL); DLT_REGISTER_APP("PRNT", "Sample pre-register application"); DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("First message after app registered")); nanosleep(&ts, NULL); DLT_UNREGISTER_APP() ; return 0; } dlt-daemon-2.18.6/tests/dlt_env_ll_unit_test.cpp000066400000000000000000000413371377520261000217350ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2015 Intel Corporation * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Stefan Vacek Intel Corporation * * \copyright Copyright Š 2015 Intel Corporation. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_env_ll_unit_test.cpp */ #include "gtest/gtest.h" #include "dlt_user.h" #include "dlt_common.h" /* needed for dlt_set_id */ /* simply include the whole file to allow testing it */ #include "src/lib/dlt_env_ll.c" int main(int argc, char *argv[]) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } TEST(DltExtensionTests, extract_id) { /* testing valid input */ char id[4u]; char env0[] = "abcd:1234:3"; char *tmp = &env0[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env0[0], 4); /* moved 4 bytes */ ASSERT_EQ(id[0], 'a'); ASSERT_EQ(id[1], 'b'); ASSERT_EQ(id[2], 'c'); ASSERT_EQ(id[3], 'd'); char env1[] = "abc:1234:3"; tmp = &env1[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env1[0], 3); /* moved 3 bytes */ ASSERT_EQ(id[0], 'a'); ASSERT_EQ(id[1], 'b'); ASSERT_EQ(id[2], 'c'); ASSERT_EQ(id[3], 0); char env2[] = "ab:1234:3"; tmp = &env2[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env2[0], 2); /* moved 2 bytes */ ASSERT_EQ(id[0], 'a'); ASSERT_EQ(id[1], 'b'); ASSERT_EQ(id[2], 0); ASSERT_EQ(id[3], 0); char env3[] = "a:1234:3"; tmp = &env3[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env3[0], 1); /* moved 1 byte */ ASSERT_EQ(id[0], 'a'); ASSERT_EQ(id[1], 0); ASSERT_EQ(id[2], 0); ASSERT_EQ(id[3], 0); char env4[] = ":1234:3"; tmp = &env4[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env4[0], 0); /* moved 1 byte */ ASSERT_EQ(id[0], 0); ASSERT_EQ(id[1], 0); ASSERT_EQ(id[2], 0); ASSERT_EQ(id[3], 0); char env5[] = "abcd:1234:3;"; tmp = &env5[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env5[0], 4); /* moved 4 bytes */ ASSERT_EQ(id[0], 'a'); ASSERT_EQ(id[1], 'b'); ASSERT_EQ(id[2], 'c'); ASSERT_EQ(id[3], 'd'); /* testing invalid input */ /* - string too long: abcde: * - string too short/missing end: abc * - NULL string: */ tmp = NULL; ASSERT_EQ(dlt_env_extract_id(&tmp, id), -1); char env6[] = "abcd:1234:3"; tmp = &env6[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, NULL), -1); char invalid0[] = ""; tmp = &invalid0[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), -1); char invalid1[] = "abcd"; /* missing delimiter */ tmp = &invalid1[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), -1); char invalid2[] = "abcde"; /* id too long */ tmp = &invalid2[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), -1); } TEST(DltExtensionTests, extract_ll) { /* testing valid input */ int8_t ll; char env_1[] = "-1"; char *tmp = &env_1[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env_1[0], 2); /* moved 2 bytes */ ASSERT_EQ(ll, -1); char env0[] = "0;"; tmp = &env0[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env0[0], 1); /* moved 1 byte */ ASSERT_EQ(ll, 0); char env1[] = "1;"; tmp = &env1[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env1[0], 1); /* moved 1 byte */ ASSERT_EQ(ll, 1); char env2[] = "2;"; tmp = &env2[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env2[0], 1); /* moved 1 byte */ ASSERT_EQ(ll, 2); char env3[] = "3;"; tmp = &env3[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env3[0], 1); /* moved 1 byte */ ASSERT_EQ(ll, 3); char env4[] = "4;"; tmp = &env4[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env4[0], 1); /* moved 1 byte */ ASSERT_EQ(ll, 4); char env5[] = "5;"; tmp = &env5[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env5[0], 1); /* moved 1 byte */ ASSERT_EQ(ll, 5); char env6[] = "6;"; tmp = &env6[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env6[0], 1); /* moved 1 byte */ ASSERT_EQ(ll, 6); /* testing invalid input */ /* - number outside range, e.g. -2, 103 * - missing delimiter * - NULL string: */ tmp = NULL; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), -1); char env7[] = "abcd:1234:3"; tmp = &env7[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, NULL), -1); char invalid0[] = ""; tmp = &invalid0[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), -1); char invalid1[] = "-2"; /* outside range */ tmp = &invalid1[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), -1); char invalid2[] = "8"; /* outside range */ tmp = &invalid2[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), -1); char invalid3[] = "1e"; /* missing delimiter */ tmp = &invalid3[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), -1); } TEST(DltExtensionTests, extract_ll_item) { /* testing valid input */ dlt_env_ll_item item; char env0[] = "abcd:1234:3"; char *tmp = &env0[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), 0); ASSERT_EQ(tmp - &env0[0], 11); /* moved 11 bytes */ ASSERT_EQ(item.appId[0], 'a'); ASSERT_EQ(item.appId[1], 'b'); ASSERT_EQ(item.appId[2], 'c'); ASSERT_EQ(item.appId[3], 'd'); ASSERT_EQ(item.ctxId[0], '1'); ASSERT_EQ(item.ctxId[1], '2'); ASSERT_EQ(item.ctxId[2], '3'); ASSERT_EQ(item.ctxId[3], '4'); ASSERT_EQ(item.ll, 3); char env1[] = "::-1;"; tmp = &env1[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), 0); ASSERT_EQ(tmp - &env1[0], 4); /* moved 4 bytes */ ASSERT_EQ(item.appId[0], 0); ASSERT_EQ(item.appId[1], 0); ASSERT_EQ(item.appId[2], 0); ASSERT_EQ(item.appId[3], 0); ASSERT_EQ(item.ctxId[0], 0); ASSERT_EQ(item.ctxId[1], 0); ASSERT_EQ(item.ctxId[2], 0); ASSERT_EQ(item.ctxId[3], 0); ASSERT_EQ(item.ll, -1); /* testing invalid input */ /* - string too long: abcde: * - string too short/missing end: abc * - NULL string: */ tmp = NULL; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); char env2[] = "abcd:1234:3"; tmp = &env2[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, NULL), -1); char invalid0[] = ""; tmp = &invalid0[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); char invalid1[] = "abcd:1234:"; /* missing ll */ tmp = &invalid1[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); char invalid2[] = "abcd:1234"; /* missing ll, missing delimiter in ctxId */ tmp = &invalid2[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); char invalid3[] = "abcd:"; /* missing ll, missing delimiter in appId */ tmp = &invalid3[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); char invalid4[] = "abcd"; /* missing ll, missing delimiter in appId */ tmp = &invalid4[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); } TEST(DltExtensionTests, basic_ll_set_handling) { dlt_env_init_ll_set(NULL); /* must not crash */ dlt_env_free_ll_set(NULL); /* must not crash */ dlt_env_increase_ll_set(NULL); /* must not crash */ dlt_env_ll_set ll_set; dlt_env_init_ll_set(&ll_set); EXPECT_TRUE(NULL != ll_set.item); EXPECT_EQ(DLT_ENV_LL_SET_INCREASE, ll_set.array_size); EXPECT_EQ(0, ll_set.num_elem); dlt_env_free_ll_set(&ll_set); EXPECT_TRUE(NULL == ll_set.item); EXPECT_EQ(0, ll_set.array_size); EXPECT_EQ(0, ll_set.num_elem); dlt_env_init_ll_set(&ll_set); for (int i = 0; i < DLT_ENV_LL_SET_INCREASE; ++i) ll_set.item[i].ll = i; dlt_env_increase_ll_set(&ll_set); EXPECT_EQ(2 * DLT_ENV_LL_SET_INCREASE, ll_set.array_size); for (int i = 0; i < DLT_ENV_LL_SET_INCREASE; ++i) EXPECT_EQ(ll_set.item[i].ll, i); dlt_env_free_ll_set(&ll_set); EXPECT_TRUE(NULL == ll_set.item); EXPECT_EQ(0, ll_set.array_size); EXPECT_EQ(0, ll_set.num_elem); } TEST(DltExtensionTests, extract_ll_set) { /* testing valid input */ dlt_env_ll_set ll_set; char env0[] = "abcd:1234:3"; char *tmp = &env0[0]; ASSERT_EQ(dlt_env_extract_ll_set(&tmp, &ll_set), 0); EXPECT_EQ(ll_set.array_size, DLT_ENV_LL_SET_INCREASE); EXPECT_EQ(ll_set.num_elem, 1); EXPECT_EQ(ll_set.item[0].ll, 3); dlt_env_free_ll_set(&ll_set); /* force increasing the list */ char env1[] = "abcd:0000:3;abcd:0001:3;abcd:0002:3;abcd:0003:3;abcd:0004:3;abcd:0005:3;abcd:0006:3;abcd:0007:3;abcd:0008:3;abcd:0009:3;abcd:0010:3"; tmp = &env1[0]; ASSERT_EQ(dlt_env_extract_ll_set(&tmp, &ll_set), 0); EXPECT_EQ(ll_set.array_size, 2 * DLT_ENV_LL_SET_INCREASE); EXPECT_EQ(ll_set.num_elem, 11); for (size_t i = 0; i < ll_set.num_elem; ++i) EXPECT_EQ(ll_set.item[i].ctxId[3], i % 10 + '0'); dlt_env_free_ll_set(&ll_set); char env2[] = "SINA:SINC:FATAL"; tmp = &env2[0]; ASSERT_EQ(dlt_env_extract_ll_set(&tmp, &ll_set), 0); EXPECT_EQ(ll_set.array_size, DLT_ENV_LL_SET_INCREASE); EXPECT_EQ(ll_set.num_elem, 1); EXPECT_EQ(ll_set.item[0].ll, 1); dlt_env_free_ll_set(&ll_set); } TEST(DltExtensionTests, ids_match) { ASSERT_EQ(1, dlt_env_ids_match("abcd", "abcd")); ASSERT_EQ(0, dlt_env_ids_match("abcd", "abce")); ASSERT_EQ(0, dlt_env_ids_match("abcd", "abee")); ASSERT_EQ(0, dlt_env_ids_match("abcd", "aeee")); ASSERT_EQ(0, dlt_env_ids_match("abcd", "eeee")); ASSERT_TRUE(dlt_env_ids_match("abcd", "abcd")); ASSERT_FALSE(dlt_env_ids_match("abcd", "abce")); } TEST(DltExtensionTests, get_matching_prio) { char apid[5] = "ABCD"; char ctid[5] = "1234"; dlt_env_ll_item test0; dlt_set_id(test0.appId, ""); dlt_set_id(test0.ctxId, ""); ASSERT_EQ(1, dlt_env_ll_item_get_matching_prio(&test0, apid, ctid)); dlt_set_id(test0.appId, ""); dlt_set_id(test0.ctxId, ctid); ASSERT_EQ(2, dlt_env_ll_item_get_matching_prio(&test0, apid, ctid)); dlt_set_id(test0.appId, apid); dlt_set_id(test0.ctxId, ""); ASSERT_EQ(3, dlt_env_ll_item_get_matching_prio(&test0, apid, ctid)); dlt_set_id(test0.appId, apid); dlt_set_id(test0.ctxId, ctid); ASSERT_EQ(4, dlt_env_ll_item_get_matching_prio(&test0, apid, ctid)); dlt_set_id(test0.appId, "EFGH"); /* appId should not match */ dlt_set_id(test0.ctxId, ctid); ASSERT_EQ(0, dlt_env_ll_item_get_matching_prio(&test0, apid, ctid)); ASSERT_EQ(-1, dlt_env_ll_item_get_matching_prio(NULL, apid, ctid)); ASSERT_EQ(-1, dlt_env_ll_item_get_matching_prio(&test0, NULL, ctid)); ASSERT_EQ(-1, dlt_env_ll_item_get_matching_prio(&test0, apid, NULL)); } TEST(DltExtensionTests, adjust_ll_from_env) { char apid[5] = "ABCD"; char ctid[5] = "1234"; int ll = 42; /* unrealistic value to see that the ll was not touched */ dlt_env_ll_set ll_set; dlt_env_init_ll_set(&ll_set); EXPECT_EQ(ll, dlt_env_adjust_ll_from_env(NULL, apid, ctid, ll)); /* orig value in case of error */ EXPECT_EQ(ll, dlt_env_adjust_ll_from_env(&ll_set, NULL, ctid, ll)); /* orig value in case of error */ EXPECT_EQ(ll, dlt_env_adjust_ll_from_env(&ll_set, apid, NULL, ll)); /* orig value in case of error */ EXPECT_EQ(ll, dlt_env_adjust_ll_from_env(&ll_set, apid, ctid, ll)); /* an empty set should not match anything */ dlt_set_id(ll_set.item[0].appId, "DEAD"); /* not matching */ dlt_set_id(ll_set.item[0].ctxId, "BEEF"); ll_set.item[0].ll = 0; ll_set.num_elem = 1; EXPECT_EQ(ll, dlt_env_adjust_ll_from_env(&ll_set, apid, ctid, ll)); /* not matching anything */ dlt_set_id(ll_set.item[1].appId, ""); /* empty rule, weakest */ dlt_set_id(ll_set.item[1].ctxId, ""); ll_set.item[1].ll = 1; ll_set.num_elem = 2; EXPECT_EQ(1, dlt_env_adjust_ll_from_env(&ll_set, apid, ctid, ll)); dlt_set_id(ll_set.item[2].appId, ""); /* prio 2 */ dlt_set_id(ll_set.item[2].ctxId, ctid); ll_set.item[2].ll = 2; ll_set.num_elem = 3; EXPECT_EQ(2, dlt_env_adjust_ll_from_env(&ll_set, apid, ctid, ll)); dlt_set_id(ll_set.item[3].appId, apid); /* prio 3 */ dlt_set_id(ll_set.item[3].ctxId, ""); ll_set.item[3].ll = 3; ll_set.num_elem = 4; EXPECT_EQ(3, dlt_env_adjust_ll_from_env(&ll_set, apid, ctid, ll)); dlt_set_id(ll_set.item[4].appId, apid); /* prio 4 */ dlt_set_id(ll_set.item[4].ctxId, ctid); ll_set.item[4].ll = 4; ll_set.num_elem = 5; EXPECT_EQ(4, dlt_env_adjust_ll_from_env(&ll_set, apid, ctid, ll)); dlt_set_id(ll_set.item[5].appId, apid); /* does not matter item[4] will always match */ dlt_set_id(ll_set.item[5].ctxId, ""); ll_set.item[5].ll = 5; ll_set.num_elem = 6; EXPECT_EQ(4, dlt_env_adjust_ll_from_env(&ll_set, apid, ctid, ll)); /* remember, item[4] matches */ dlt_env_free_ll_set(&ll_set); } /* int dlt_env_helper_to_lower(char **env, char *result, int res_len) */ TEST(DltExtensionTests, dlt_env_helper_to_lower) { /* default behavior */ char env0[] = "1238<><<>>>>#$//abcdABCDEDFGHIJKLMNOPQRSTUVWXYZpo;ABcd"; char res0[] = "1238<><<>>>>#$//abcdabcdedfghijklmnopqrstuvwxyzpo"; char *tmp0 = &env0[0]; char result0[sizeof(res0)]; ASSERT_EQ(0, dlt_env_helper_to_lower(&tmp0, result0, sizeof(result0))); ASSERT_EQ(';', *tmp0); /* next char is ';' */ ASSERT_STREQ(res0, result0); /* stops at ';' and is correctly converted */ /* default behavior with end of string */ char env1[] = "1238<><<>>>>#$//abcdABCDEDFGHIJKLMNOPQRSTUVWXYZpo"; char res1[] = "1238<><<>>>>#$//abcdabcdedfghijklmnopqrstuvwxyzpo"; char *tmp1 = &env1[0]; char result1[sizeof(res1)]; ASSERT_EQ(0, dlt_env_helper_to_lower(&tmp1, result1, sizeof(result1))); ASSERT_EQ(0, *tmp1); /* next char is void */ ASSERT_STREQ(res1, result1); /* stops at end-of-string and is correctly converted */ /* result string too short */ char env2[] = "2238<><<>>>>#$//abcdABCDEDFGHIJKLMNOPQRSTUVWXYZpo"; char res2[] = "2238<><<>>>>#$//abcdabcdedfg"; char *tmp2 = &env2[0]; char result2[sizeof(res2)]; ASSERT_EQ(-1, dlt_env_helper_to_lower(&tmp2, result2, sizeof(result2))); ASSERT_EQ('H', *tmp2); /* next char is void */ ASSERT_STREQ(res2, result2); /* stops at end-of-string and is partially converted */ /* input string shorter than result */ char env3[] = "3338<><<>>>>#$//abcdABCDEDFGHIJKLMNOPQRSTUVWXYZpo"; char res3[] = "3338<><<>>>>#$//abcdabcdedfghijklmnopqrstuvwxyzpo"; char *tmp3 = &env3[0]; char result3[sizeof(res3) + 5]; ASSERT_EQ(0, dlt_env_helper_to_lower(&tmp3, result3, sizeof(result3))); ASSERT_EQ(0, *tmp3); /* next char is void */ ASSERT_STREQ(res3, result3); /* stops at end-of-string and is correctly converted */ } /* int dlt_env_extract_symbolic_ll(char **env, int8_t * ll) */ TEST(DltExtensionTests, dlt_env_extract_symbolic_ll) { int8_t result; /* correct behavior */ char env0[] = "DEFAULT;off;fatal;error;warning;info;DeBuG;verbose"; char *tmp0 = &env0[0]; ASSERT_EQ(0, dlt_env_extract_symbolic_ll(&tmp0, &result)); ASSERT_EQ('o', *tmp0); ASSERT_EQ(-1, result); ASSERT_EQ(0, dlt_env_extract_symbolic_ll(&tmp0, &result)); ASSERT_EQ('f', *tmp0); ASSERT_EQ(0, result); ASSERT_EQ(0, dlt_env_extract_symbolic_ll(&tmp0, &result)); ASSERT_EQ('e', *tmp0); ASSERT_EQ(1, result); ASSERT_EQ(0, dlt_env_extract_symbolic_ll(&tmp0, &result)); ASSERT_EQ('w', *tmp0); ASSERT_EQ(2, result); ASSERT_EQ(0, dlt_env_extract_symbolic_ll(&tmp0, &result)); ASSERT_EQ('i', *tmp0); ASSERT_EQ(3, result); ASSERT_EQ(0, dlt_env_extract_symbolic_ll(&tmp0, &result)); ASSERT_EQ('D', *tmp0); ASSERT_EQ(4, result); ASSERT_EQ(0, dlt_env_extract_symbolic_ll(&tmp0, &result)); ASSERT_EQ('v', *tmp0); ASSERT_EQ(5, result); ASSERT_EQ(0, dlt_env_extract_symbolic_ll(&tmp0, &result)); ASSERT_EQ(0, *tmp0); ASSERT_EQ(6, result); /* incorrect behavior */ char env1[] = "DEF"; char *tmp1 = &env1[0]; result = 18; ASSERT_EQ(-1, dlt_env_extract_symbolic_ll(&tmp1, &result)); ASSERT_EQ(0, *tmp1); ASSERT_EQ(18, result); /* 'result' is not touched */ /* incorrect behavior */ char env2[] = "DEFaultingfBa"; char *tmp2 = &env2[0]; result = 28; ASSERT_EQ(-1, dlt_env_extract_symbolic_ll(&tmp2, &result)); ASSERT_EQ('i', *tmp2); ASSERT_EQ(28, result); /* 'result' is not touched */ } dlt-daemon-2.18.6/tests/dlt_test_receiver.c000066400000000000000000000330401377520261000206530ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Alexander Wenzel * Markus Klein * Stefan Held * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_test_receiver.c */ /******************************************************************************* ** ** ** SRC-MODULE: dlt-receive.cpp ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** ** Markus Klein ** ** ** ** PURPOSE : ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** aw Alexander Wenzel BMW ** ** mk Markus Klein Fraunhofer ESK ** *******************************************************************************/ /******************************************************************************* ** Revision Control History ** *******************************************************************************/ /* * $LastChangedRevision: 1670 $ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $ * $LastChangedBy$ * Initials Date Comment * aw 13.01.2010 initial */ #include /* for isprint() */ #include /* for atoi() */ #include /* for S_IRUSR, S_IWUSR, S_IRGRP, S_IROTH */ #include /* for open() */ #include /* for writev() */ #include #include #include "dlt_client.h" #define DLT_RECEIVE_ECU_ID "RECV" /* Function prototypes */ int dlt_receive_filetransfer_callback(DltMessage *message, void *data); typedef struct { int vflag; int yflag; char *ovalue; char *evalue; int bvalue; int filetransfervalue; int systemjournalvalue; int systemloggervalue; char ecuid[4]; int ohandle; DltFile file; DltFilter filter; } DltReceiveData; FILE *fp; int result = 0; /** * Print usage information of tool. */ void usage() { char version[255]; dlt_get_version(version, 255); printf("Usage: dlt-receive [options] hostname/serial_device_name\n"); printf("Receive DLT messages from DLT daemon and print or store the messages.\n"); printf("Use filters to filter received messages.\n"); printf("%s \n", version); printf("Options:\n"); printf(" -v Verbose mode\n"); printf(" -h Usage\n"); printf(" -y Serial device mode\n"); printf(" -f Activate filetransfer test case\n"); printf(" -s Activate systemd journal test case\n"); printf(" -l Activate system logger test case"); printf(" -b baudrate Serial device baudrate (Default: 115200)\n"); printf(" -e ecuid Set ECU ID (Default: RECV)\n"); printf(" -o filename Output messages in new DLT file\n"); } /** * Main function of tool. */ int main(int argc, char *argv[]) { DltClient dltclient; DltReceiveData dltdata; int c; int index; /* Initialize dltdata */ dltdata.vflag = 0; dltdata.yflag = 0; dltdata.ovalue = 0; dltdata.evalue = 0; dltdata.bvalue = 0; dltdata.ohandle = -1; dltdata.filetransfervalue = 0; dltdata.systemjournalvalue = 0; /* Fetch command line arguments */ opterr = 0; while ((c = getopt (argc, argv, "vshyfla:o:e:b:")) != -1) switch (c) { case 'v': { dltdata.vflag = 1; break; } case 'h': { usage(); return -1; } case 'y': { dltdata.yflag = 1; break; } case 'f': { dltdata.filetransfervalue = 1; break; } case 's': { dltdata.systemjournalvalue = 1; break; } case 'l': { dltdata.systemloggervalue = 1; break; } case 'o': { dltdata.ovalue = optarg; break; } case 'e': { dltdata.evalue = optarg; break; } case 'b': { dltdata.bvalue = atoi(optarg); break; } case '?': { if (optopt == 'o') fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); /* unknown or wrong option used, show usage information and terminate */ usage(); return -1; } default: { abort (); return -1; /*for parasoft */ } } /* Initialize DLT Client */ dlt_client_init(&dltclient, dltdata.vflag); /* Register callback to be called when message was received */ dlt_client_register_message_callback(dlt_receive_filetransfer_callback); /* Setup DLT Client structure */ dltclient.mode = dltdata.yflag; if (dltclient.mode == 0) { for (index = optind; index < argc; index++) if (dlt_client_set_server_ip(&dltclient, argv[index]) == -1) { fprintf(stderr, "set server ip didn't succeed\n"); return -1; } if (dltclient.servIP == 0) { /* no hostname selected, show usage and terminate */ fprintf(stderr, "ERROR: No hostname selected\n"); usage(); dlt_client_cleanup(&dltclient, dltdata.vflag); return -1; } } else { for (index = optind; index < argc; index++) if (dlt_client_set_serial_device(&dltclient, argv[index]) == -1) { fprintf(stderr, "set serial device didn't succeed\n"); return -1; } if (dltclient.serialDevice == 0) { /* no serial device name selected, show usage and terminate */ fprintf(stderr, "ERROR: No serial device name specified\n"); usage(); return -1; } dlt_client_setbaudrate(&dltclient, dltdata.bvalue); } /* initialise structure to use DLT file */ dlt_file_init(&(dltdata.file), dltdata.vflag); /* first parse filter file if filter parameter is used */ dlt_filter_init(&(dltdata.filter), dltdata.vflag); /* open DLT output file */ if (dltdata.ovalue) { dltdata.ohandle = open(dltdata.ovalue, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* mode: wb */ if (dltdata.ohandle == -1) { dlt_file_free(&(dltdata.file), dltdata.vflag); fprintf(stderr, "ERROR: Output file %s cannot be opened!\n", dltdata.ovalue); return -1; } } if (dltdata.evalue) dlt_set_id(dltdata.ecuid, dltdata.evalue); else dlt_set_id(dltdata.ecuid, DLT_RECEIVE_ECU_ID); /* Connect to TCP socket or open serial device */ if (dlt_client_connect(&dltclient, dltdata.vflag) != DLT_RETURN_ERROR) { /* Dlt Client Main Loop */ dlt_client_main_loop(&dltclient, &dltdata, dltdata.vflag); /* Dlt Client Cleanup */ dlt_client_cleanup(&dltclient, dltdata.vflag); } /* dlt-receive cleanup */ if (dltdata.ovalue) close(dltdata.ohandle); dlt_file_free(&(dltdata.file), dltdata.vflag); dlt_filter_free(&(dltdata.filter), dltdata.vflag); return 0; } int dlt_receive_filetransfer_callback(DltMessage *message, void *data) { DltReceiveData *dltdata; static char text[DLT_RECEIVE_BUFSIZE]; char filename[255]; struct iovec iov[2]; int bytes_written; if ((message == 0) || (data == 0)) return -1; dltdata = (DltReceiveData *)data; if (dltdata->filetransfervalue) { dlt_message_print_ascii(message, text, DLT_RECEIVE_BUFSIZE, dltdata->vflag); /* 1st find starting point of tranfering data packages */ if (strncmp(text, "FLST", 4) == 0) { char *tmpFilename; tmpFilename = strrchr(text, '/') + 1; unsigned int i; for (i = 0; i < strlen(tmpFilename); i++) if (isspace(tmpFilename[i])) { tmpFilename[i] = '\0'; break; } /* create file for each received file, as named as crc value */ snprintf(filename, 255, "/tmp/%s", tmpFilename); fp = fopen(filename, "w+"); } /* 3rd close fp */ if (strncmp(text, "FLFI", 4) == 0) { printf("TEST FILETRANSFER PASSED\n"); fclose(fp); } /* 2nd check if incomming data are filetransfer data */ if (strncmp(text, "FLDA", 4) == 0) { /* truncate beginning of data stream ( FLDA, File identifier and package number) */ char *position = strchr(text, 32); /* search for space */ strncpy(text, position + 1, DLT_RECEIVE_BUFSIZE); position = strchr(text, 32); strncpy(text, position + 1, DLT_RECEIVE_BUFSIZE); position = strchr(text, 32); strncpy(text, position + 1, DLT_RECEIVE_BUFSIZE); /* truncate ending of data stream ( FLDA ) */ int len = strlen(text); text[len - 4] = '\0'; /* hex to ascii and store at /tmp */ char tmp[3]; int i; for (i = 0; i < (int)strlen(text); i = i + 3) { tmp[0] = text[i]; tmp[1] = text[i + 1]; tmp[2] = '\0'; unsigned long h = strtoul(tmp, NULL, 16); fprintf(fp, "%c", (int)h); } } } if (dltdata->systemjournalvalue) { dlt_message_print_ascii(message, text, DLT_RECEIVE_BUFSIZE, dltdata->vflag); /* 1st find the relevant packages */ char *tmp = message->extendedheader->ctid; tmp[4] = '\0'; if (strcmp(tmp, (const char *)"JOUR") == 0) { if (strstr(text, "DLT SYSTEM JOURNAL TEST")) { result++; if (result == 1000) exit(159); } } } if (dltdata->systemloggervalue) { dlt_message_print_ascii(message, text, DLT_RECEIVE_BUFSIZE, dltdata->vflag); /* 1st find the relevant packages */ char *tmp = message->extendedheader->ctid; tmp[4] = '\0'; const char *substring = text; const char *founding = "Test Systemlogger"; int length = strlen(founding); if (strcmp(tmp, (const char *)"PROC") == 0) { substring = strstr(text, founding); while (substring != NULL) { result++; substring += length; if (result == 1000) exit(159); } } } /* if file output enabled write message */ if (dltdata->ovalue) { iov[0].iov_base = message->headerbuffer; iov[0].iov_len = message->headersize; iov[1].iov_base = message->databuffer; iov[1].iov_len = message->datasize; bytes_written = writev(dltdata->ohandle, iov, 2); if (0 > bytes_written) { printf("dlt_receive_message_callback: writev(dltdata->ohandle, iov, 2); returned an error!"); return -1; } } return 0; } dlt-daemon-2.18.6/tests/gtest_dlt_common.cpp000066400000000000000000006105101377520261000210510ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Stefan Held * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file gtest_dlt_common.cpp */ #include #include #include #include extern "C" { #include "dlt-daemon.h" #include "dlt-daemon_cfg.h" #include "dlt_user_cfg.h" #include "dlt_version.h" int dlt_buffer_increase_size(DltBuffer *); int dlt_buffer_minimize_size(DltBuffer *); int dlt_buffer_reset(DltBuffer *); DltReturnValue dlt_buffer_push(DltBuffer *, const unsigned char *, unsigned int); DltReturnValue dlt_buffer_push3(DltBuffer *, const unsigned char *, unsigned int, const unsigned char *, unsigned int, const unsigned char *, unsigned int); int dlt_buffer_get(DltBuffer *, unsigned char *, int, int); int dlt_buffer_pull(DltBuffer *, unsigned char *, int); int dlt_buffer_remove(DltBuffer *); void dlt_buffer_status(DltBuffer *); void dlt_buffer_write_block(DltBuffer *, int *, const unsigned char *, unsigned int); void dlt_buffer_read_block(DltBuffer *, int *, unsigned char *, unsigned int); void dlt_buffer_info(DltBuffer *); } /* Begin Method: dlt_common::dlt_buffer_init_dynamic */ TEST(t_dlt_buffer_init_dynamic, normal) { DltBuffer init_dynamic; /* Normal Use-Case for initializing a buffer */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&init_dynamic, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&init_dynamic)); /* Min Values for a success init */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&init_dynamic, 12, 12, 12)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&init_dynamic)); } TEST(t_dlt_buffer_init_dynamic, abnormal) { /* DltBuffer buf; */ /* Initialze buffer twice, expected -1 for second init */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(-1, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_free_dynamic(&buf)); */ /* Initialize buffer with max-value of uint32, expected 0 */ /* TODO: what should the maximum parameter values be? UINT_MAX is too large and leads to segfault */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, UINT_MAX,UINT_MAX,UINT_MAX)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_free_dynamic(&buf)); */ /* Initialize buffer with min-value of uint32, expected 0 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, 0,0,0)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_free_dynamic(&buf)); */ /* Initialize buffer min-value > max-value, expected -1 */ /* EXPECT_GE(-1, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_free_dynamic(&buf)); */ /* Initialsize buffer step-value > max-value, expected -1 */ /* EXPECT_GE(-1,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE * 2)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_free_dynamic(&buf)); */ } TEST(t_dlt_buffer_init_dynamic, nullpointer) { DltBuffer buf; /* NULL-Pointer, expect -1 */ EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(NULL, 0, 0, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(NULL, 0, 0, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(NULL, 0, DLT_USER_RINGBUFFER_MAX_SIZE, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(NULL, 0, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(NULL, DLT_USER_RINGBUFFER_MIN_SIZE, 0, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(NULL, DLT_USER_RINGBUFFER_MIN_SIZE, 0, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(NULL, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(NULL, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(&buf, 0, 0, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(&buf, 0, 0, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(&buf, 0, DLT_USER_RINGBUFFER_MAX_SIZE, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(&buf, 0, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, 0, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, 0, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, 0)); } /* End Method: dlt_common::dlt_buffer_init_dynamic */ /* Begin Method: dlt_common::dlt_buffer_free_dynamic */ TEST(t_dlt_buffer_free_dynamic, normal) { DltBuffer buf; /* Normal Use-Case szenario */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Normal Use-Case szenario */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, 12, 12, 12)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_free_dynamic, abnormal) { /* DltBuffer buf; */ /* Free uninizialised buffer, expected -1 */ /* EXPECT_GE(-1, dlt_buffer_free_dynamic(&buf)); */ /* Free buffer twice, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_GE(-1, dlt_buffer_free_dynamic(&buf)); */ } TEST(t_dlt_buffer_free_dynamic, nullpointer) { /* NULL-POinter */ EXPECT_GE(-1, dlt_buffer_free_dynamic(NULL)); } /* End Method: dlt_common::dlt_buffer_free_dynamic */ /* Begin Method: dlt_common::dlt_buffer_increase_size */ TEST(t_dlt_buffer_increase_size, normal) { DltBuffer buf; /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(0, dlt_buffer_increase_size(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Fill buffer to max-value, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); for (int i = 0; i <= (DLT_USER_RINGBUFFER_MAX_SIZE / DLT_USER_RINGBUFFER_MIN_SIZE); i += DLT_USER_RINGBUFFER_STEP_SIZE) EXPECT_LE(0, dlt_buffer_increase_size(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_increase_size, abnormal) { /* DltBuffer buf; */ /* Increase uninizialised buffer */ /* EXPECT_GE(-1, dlt_buffer_increase_size(&buf)); */ /* Fill buffer over max-value, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(-1, dlt_buffer_increase_size(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* min-value > max-value, trying to increase buffer, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(-1, dlt_buffer_increase_size(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* trying to increase buffer with 0 , expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, 0)); */ /* EXPECT_GE(-1, dlt_buffer_increase_size(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ } TEST(t_dlt_buffer_increase_size, nullpointer) { /* NULL-Pointer, expected -1 */ EXPECT_GE(-1, dlt_buffer_increase_size(NULL)); } /* End Method: dlt_common::dlt_buffer_increase_size */ /* Begin Method: dlt_common::dlt_buffer_minimize_size */ TEST(t_dlt_buffer_minimize_size, normal) { DltBuffer buf; /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(0, dlt_buffer_minimize_size(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* minimize buffer to min-value, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); for (int i = (DLT_USER_RINGBUFFER_MAX_SIZE / DLT_USER_RINGBUFFER_MIN_SIZE); i >= 0; i -= DLT_USER_RINGBUFFER_STEP_SIZE) EXPECT_LE(0, dlt_buffer_minimize_size(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_minimize_size, abnormal) { /* DltBuffer buf; */ /* Minimize uninizialised buffer */ /* EXPECT_GE(-1, dlt_buffer_minimize_size(&buf)); */ /* minimize buffer under min-value, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(-1, dlt_buffer_minimize_size(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* min-value > max-value, trying to minimize buffer, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(-1, dlt_buffer_minimize_size(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* trying to minimize buffer with 0 , expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, 0)); */ /* EXPECT_GE(-1, dlt_buffer_minimize_size(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ } TEST(t_dlt_buffer_minimize_size, nullpointer) { /* NULL-Pointer, expected -1 */ EXPECT_GE(-1, dlt_buffer_minimize_size(NULL)); } /* End Method: dlt_common::dlt_buffer_minimize_size */ /* Begin Method: dlt_common::dlt_buffer_reset */ TEST(t_dlt_buffer_reset, normal) { DltBuffer buf; /* Normal Use-Case. expect 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(0, dlt_buffer_reset(&buf)); } TEST(t_dlt_buffer_reset, abnormal) { /* DltBuffer buf; */ /*Use uninizialsied buffer, expected -1 */ /* EXPECT_GE(-1, dlt_buffer_reset(&buf)); */ } TEST(t_dlt_buffer_reset, nullpointer) { /*Use NULL-Pointer, expected -1 */ EXPECT_GE(-1, dlt_buffer_reset(NULL)); } /* End Method: dlt_common::dlt_buffer_reset */ /* Begin Method: dlt_common::dlt_buffer_push*/ TEST(t_dlt_buffer_push, normal) { DltBuffer buf; char *test; unsigned int size = sizeof(test); /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&test, size)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Push till buffer is full, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); for (unsigned int i = 0; i <= (DLT_USER_RINGBUFFER_MIN_SIZE / size); i++) EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&test, size)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_push, abnormal) { /* DltBuffer buf; */ /* char * test; */ /* int size = sizeof(test); */ /* Use uninizialsied, expected -1 */ /* EXPECT_GE(-1, dlt_buffer_push(&buf,(unsigned char *)&test,size)); */ /* set size == 0, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push(&buf,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* set size == 0 and char == 0 expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push(&buf,0,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* Push till buffer is overfilled , expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* for(int i=0; i<= (DLT_USER_RINGBUFFER_MIN_SIZE/size) + size; i++) */ /* { */ /* if(i <= DLT_USER_RINGBUFFER_MIN_SIZE) */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf,(unsigned char *)&test,size)); */ /* else */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push(&buf,(unsigned char *)&test,size)); */ /* } */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* All use-case, wich works with null pointer, has to discuss */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push(&buf,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push(&buf,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ } TEST(t_dlt_buffer_push, nullpointer) { char *test; int size = sizeof(test); /* NULL-Pointer, expected -1 */ EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push(NULL, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push(NULL, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push(NULL, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push(NULL, (unsigned char *)&test, size)); } /* End Method: dlt_common::dlt_buffer_push*/ /* Begin Method: dlt_common::dlt_buffer_push3 */ TEST(t_dlt_buffer_push3, normal) { DltBuffer buf; char *test; int size = sizeof(test); /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push3(&buf, (unsigned char *)&test, size, 0, 0, 0, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push3(&buf, (unsigned char *)&test, size, (unsigned char *)&test, size, (unsigned char *)&test, size)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Push till buffer is full, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); for (int i = 0; i <= (DLT_USER_RINGBUFFER_MIN_SIZE / size); i++) EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push3(&buf, (unsigned char *)&test, size, (unsigned char *)&test, size, (unsigned char *)&test, size)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_push3, abnormal) { /* DltBuffer buf; */ /* char * test; */ /* int size = sizeof(test); */ /* Use uninizialsied, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,(unsigned char *)&test,size,(unsigned char *)&test,size)); */ /* set size == 0, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0, (unsigned char *)&test,0, (unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* set size == 0 and char == 0 expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,0,0,0,0,0,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* works with null pointer, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,NULL,0,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* Push till buffer is overfilled , expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* for(int i=0; i<= (DLT_USER_RINGBUFFER_MIN_SIZE/size) + size; i++) */ /* { */ /* if(i <= DLT_USER_RINGBUFFER_MIN_SIZE) */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push3(&buf,(unsigned char *)&test,size,(unsigned char *)&test,size,(unsigned char *)&test,size)); */ /* else */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,(unsigned char *)&test,size,(unsigned char *)&test,size)); */ /* } */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* All use-case, wich works with null pointer, has to discuss */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,NULL,0,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,NULL,0,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,NULL,0,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,NULL,size,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,NULL,size,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,NULL,size,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,NULL,size,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,(unsigned char *)&test,0,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,(unsigned char *)&test,0,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,(unsigned char *)&test,0,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,(unsigned char *)&test,0,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,(unsigned char *)&test,size,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,(unsigned char *)&test,size,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,(unsigned char *)&test,size,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,0,(unsigned char *)&test,size,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,NULL,0,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,NULL,0,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,NULL,0,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,NULL,0,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,NULL,size,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,NULL,size,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,NULL,size,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,NULL,size,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,(unsigned char *)&test,0,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,(unsigned char *)&test,0,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,(unsigned char *)&test,0,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,(unsigned char *)&test,0,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,(unsigned char *)&test,size,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,(unsigned char *)&test,size,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,(unsigned char *)&test,size,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,NULL,size,(unsigned char *)&test,size,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,NULL,0,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,NULL,0,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,NULL,0,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,NULL,0,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,NULL,size,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,NULL,size,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,NULL,size,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,NULL,size,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,(unsigned char *)&test,0,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,(unsigned char *)&test,0,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,(unsigned char *)&test,size,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,0,(unsigned char *)&test,size,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,NULL,0,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,NULL,0,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,NULL,0,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,NULL,0,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,NULL,size,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,NULL,size,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,NULL,size,(unsigned char *)&test,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,NULL,size,(unsigned char *)&test,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,(unsigned char *)&test,0,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,(unsigned char *)&test,0,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,(unsigned char *)&test,size,NULL,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK,dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(&buf,(unsigned char *)&test,size,(unsigned char *)&test,size,NULL,size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ } TEST(t_dlt_buffer_push3, nullpointer) { char *test; int size = sizeof(test); /*Null Pointer, expected -1 */ EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, NULL, 0, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, NULL, 0, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, NULL, 0, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, NULL, 0, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, NULL, size, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, NULL, size, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, NULL, size, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, NULL, size, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, (unsigned char *)&test, 0, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, (unsigned char *)&test, 0, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, (unsigned char *)&test, 0, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, (unsigned char *)&test, 0, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, (unsigned char *)&test, size, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, (unsigned char *)&test, size, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, (unsigned char *)&test, size, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, 0, (unsigned char *)&test, size, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, NULL, 0, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, NULL, 0, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, NULL, 0, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, NULL, 0, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, NULL, size, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, NULL, size, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, NULL, size, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, NULL, size, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, (unsigned char *)&test, 0, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, (unsigned char *)&test, 0, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, (unsigned char *)&test, 0, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, (unsigned char *)&test, 0, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, (unsigned char *)&test, size, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, (unsigned char *)&test, size, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, (unsigned char *)&test, size, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, NULL, size, (unsigned char *)&test, size, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, NULL, 0, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, NULL, 0, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, NULL, 0, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, NULL, 0, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, NULL, size, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, NULL, size, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, NULL, size, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, NULL, size, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, (unsigned char *)&test, 0, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, (unsigned char *)&test, 0, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, (unsigned char *)&test, 0, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, (unsigned char *)&test, 0, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, (unsigned char *)&test, size, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, (unsigned char *)&test, size, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, (unsigned char *)&test, size, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, 0, (unsigned char *)&test, size, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, NULL, 0, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, NULL, 0, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, NULL, 0, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, NULL, 0, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, NULL, size, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, NULL, size, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, NULL, size, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, NULL, size, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, (unsigned char *)&test, 0, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, (unsigned char *)&test, 0, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, (unsigned char *)&test, 0, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, (unsigned char *)&test, 0, (unsigned char *)&test, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, (unsigned char *)&test, size, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, (unsigned char *)&test, size, NULL, size)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, (unsigned char *)&test, size, (unsigned char *)&test, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_buffer_push3(NULL, (unsigned char *)&test, size, (unsigned char *)&test, size, (unsigned char *)&test, size)); } /* End Method: dlt_common::dlt_buffer_push3 */ /* Begin Method: dlt_common::dlt_buffer_pull */ TEST(t_dlt_buffer_pull, normal) { /*Normal Use Cases, expected 0 or -1 in return */ DltBuffer buf; DltUserHeader header; int size = sizeof(DltUserHeader); /* Normal Use-Case, empty pull, expected -1 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(-1, dlt_buffer_pull(&buf, (unsigned char *)&header, size)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Normal Use-Case, expected > 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, sizeof(DltUserHeader))); EXPECT_LE(1, dlt_buffer_pull(&buf, (unsigned char *)&header, size)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_pull, abnormal) { /* DltBuffer buf; */ /* DltUserHeader header; */ /* Uninizialised, expected -1 */ /* EXPECT_GE(-1, dlt_buffer_pull(&buf, (unsigned char*)&header, sizeof(DltUserHeader))); */ /* data == 0 and max_size == 0, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf,(unsigned char *)&header,sizeof(DltUserHeader))); */ /* EXPECT_GE(-1, dlt_buffer_pull(&buf, 0, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* no push before pull, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(-1, dlt_buffer_pull(&buf, 0, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ } TEST(t_dlt_buffer_pull, nullpointer) { DltBuffer buf; DltUserHeader header; /* NULL-Point, expected -1 */ EXPECT_GE(-1, dlt_buffer_pull(NULL, NULL, 0)); EXPECT_GE(-1, dlt_buffer_pull(NULL, NULL, sizeof(DltUserHeader))); EXPECT_GE(-1, dlt_buffer_pull(NULL, (unsigned char *)&header, 0)); EXPECT_GE(-1, dlt_buffer_pull(NULL, (unsigned char *)&header, sizeof(DltUserHeader))); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(-1, dlt_buffer_pull(&buf, NULL, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(-1, dlt_buffer_pull(&buf, NULL, sizeof(DltUserHeader))); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } /* End Method: dlt_common::dlt_buffer_pull */ /* Begin Method: dlt_common::dlt_buffer_remove */ TEST(t_dlt_buffer_remove, normal) { DltBuffer buf; DltUserHeader header; int size = sizeof(DltUserHeader); /* Normal Use-Case, empty pull, expected -1 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(-1, dlt_buffer_remove(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Normal Use-Case, expected > 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, size)); EXPECT_LE(0, dlt_buffer_remove(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_remove, abnormal) { /* DltBuffer buf; */ /* DltUserHeader header; */ /* int size = sizeof(DltUserHeader); */ /* Uninizialised, expected -1 */ /* EXPECT_GE(-1, dlt_buffer_remove(&buf)); */ /* no push before remove, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_GE(-1, dlt_buffer_remove(&buf)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ /* Call remove 10 time, expected > 1 till buffer is empty */ /* pushed one time so expect one > 1 and 9 times < 0 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf,(unsigned char *)&header,size)); */ /* for(int i=0; i<10;i++) */ /* { */ /* if(i == 0) */ /* EXPECT_LE(1, dlt_buffer_remove(&buf)); */ /* else */ /* EXPECT_GE(-1, dlt_buffer_remove(&buf)); */ /* } */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ } TEST(t_dlt_buffer_remove, nullpointer) { /* NULL_Pointer, expected -1 */ EXPECT_GE(-1, dlt_buffer_remove(NULL)); } /* End Method: dlt_common::dlt_buffer_remove*/ /* Begin Method: dlt_common::dlt_buffer_copy */ TEST(t_dlt_buffer_copy, normal) { DltBuffer buf; DltUserHeader header; int size = sizeof(DltUserHeader); /* Normal Use-Case, empty pull, expected -1 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(-1, dlt_buffer_copy(&buf, (unsigned char *)&header, size)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Normal Use-Case, expected > 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, sizeof(DltUserHeader))); EXPECT_LE(1, dlt_buffer_copy(&buf, (unsigned char *)&header, size)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_copy, abnormal) { /* DltBuffer buf; */ /* DltUserHeader header; */ /* int size = sizeof(DltUserHeader); */ /* Uninizialised buffer , expected -1 */ /* EXPECT_LE(-1, dlt_buffer_copy(&buf, (unsigned char *)&header, size)); */ /* no push before copy, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_LE(-1, dlt_buffer_copy(&buf, (unsigned char *)&header, size)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ } TEST(t_dlt_buffer_copy, nullpointer) { DltBuffer buf; DltUserHeader header; int size = sizeof(DltUserHeader); /* NULL-Pointer, expected -1 */ EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_buffer_copy(NULL, NULL, size)); EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_buffer_copy(NULL, NULL, 0)); EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_buffer_copy(NULL, (unsigned char *)&header, size)); EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_buffer_copy(NULL, (unsigned char *)&header, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_buffer_copy(&buf, NULL, size)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_buffer_copy(&buf, NULL, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } /* End Method: dlt_common::dlt_buffer_copy */ /* Begin Method: dlt_common::dlt_buffer_get */ TEST(t_dlt_buffer_get, normal) { DltBuffer buf; DltUserHeader header; int size = sizeof(DltUserHeader); /* Normal Use-Case */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, size)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); EXPECT_LE(0, dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, size)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); EXPECT_LE(0, dlt_buffer_get(&buf, (unsigned char *)&header, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); EXPECT_GE(-1, dlt_buffer_get(&buf, (unsigned char *)&header, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); ((int *)(buf.shm))[0] = 50000; EXPECT_GE(-1, dlt_buffer_get(&buf, (unsigned char *)&header, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); ((int *)(buf.shm))[1] = 50000; EXPECT_GE(-1, dlt_buffer_get(&buf, (unsigned char *)&header, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); ((int *)(buf.shm))[2] = -50000; EXPECT_GE(-1, dlt_buffer_get(&buf, (unsigned char *)&header, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); ((int *)(buf.shm))[2] = 0; EXPECT_GE(-1, dlt_buffer_get(&buf, (unsigned char *)&header, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); ((int *)(buf.shm))[0] = 4000; ((int *)(buf.shm))[1] = 5000; ((int *)(buf.shm))[2] = 0; EXPECT_GE(-1, dlt_buffer_get(&buf, (unsigned char *)&header, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); ((int *)(buf.shm))[0] = 10; ((int *)(buf.shm))[1] = 5; ((int *)(buf.shm))[2] = 5; EXPECT_GE(-1, dlt_buffer_get(&buf, (unsigned char *)&header, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); ((int *)(buf.shm))[2] = 50000; EXPECT_GE(-1, dlt_buffer_get(&buf, (unsigned char *)&header, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, size)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); ((int *)(buf.shm))[0] = 19; EXPECT_GE(-1, dlt_buffer_get(&buf, (unsigned char *)&header, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, size)); printf("#### %i\n", dlt_buffer_get(&buf, (unsigned char *)&header, size, 0)); ((int *)(buf.shm))[2] = 19; EXPECT_LE(0, dlt_buffer_get(&buf, (unsigned char *)&header, 5, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_get, abnormal) { /* DltBuffer buf; */ /* DltUserHeader header; */ /* int size = sizeof(DltUserHeader); */ /* Uninizialsied, expected -1 */ /* EXPECT_GE(-1, dlt_buffer_get(&buf,(unsigned char *)&header,size, 0)); */ /* Integer with 12345678 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf,(unsigned char *)&header,size)); */ /* printf("#### %i\n", dlt_buffer_get(&buf,(unsigned char*)&header,size,0)); */ /* EXPECT_LE(0, dlt_buffer_get(&buf,(unsigned char*)&header,size,12345678)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); */ } TEST(t_dlt_buffer_get, nullpointer) { DltBuffer buf; DltUserHeader header; int size = sizeof(DltUserHeader); /* NULL-Pointer */ EXPECT_GE(-1, dlt_buffer_get(NULL, NULL, 0, 0)); EXPECT_GE(-1, dlt_buffer_get(NULL, NULL, 0, 1)); EXPECT_GE(-1, dlt_buffer_get(NULL, NULL, size, 0)); EXPECT_GE(-1, dlt_buffer_get(NULL, NULL, size, 1)); EXPECT_GE(-1, dlt_buffer_get(NULL, (unsigned char *)&header, 0, 0)); EXPECT_GE(-1, dlt_buffer_get(NULL, (unsigned char *)&header, 0, 1)); EXPECT_GE(-1, dlt_buffer_get(NULL, (unsigned char *)&header, size, 0)); EXPECT_GE(-1, dlt_buffer_get(NULL, (unsigned char *)&header, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(-1, dlt_buffer_get(&buf, NULL, 0, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(-1, dlt_buffer_get(&buf, NULL, 0, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(-1, dlt_buffer_get(&buf, NULL, size, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_GE(-1, dlt_buffer_get(&buf, NULL, size, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } /* End Method: dlt_common::dlt_buffer_get */ /* Begin MEthod: dlt_common::dlt_buffer_get_message_count */ TEST(t_dlt_buffer_get_message_count, normal) { DltBuffer buf; DltUserHeader header; /* Normal Usce-Case without pushing data, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); /*printf("##### %i\n", dlt_buffer_get_message_count(&buf)); */ EXPECT_LE(0, dlt_buffer_get_message_count(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Normal Use-Case, with pushing data, expected > 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, sizeof(DltUserHeader))); /*printf("#### %i\n", dlt_buffer_get_message_count(&buf)); */ EXPECT_LE(0, dlt_buffer_get_message_count(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Pushing 1000 mesages, expected 10000 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); for (int i = 1; i <= 10000; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, sizeof(DltUserHeader))); /*printf("#### %i\n", dlt_buffer_get_message_count(&buf)); */ EXPECT_LE(i, dlt_buffer_get_message_count(&buf)); } EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_get_message_count, abnormal) { /* DltBuffer buf; */ /* Uninizialised, expected -1 */ /* EXPECT_GE(-1, dlt_buffer_get_message_count(&buf)); */ } TEST(t_dlt_buffer_get_message_count, nullpointer) { /*NULL-Pointer, expected -1 */ /* EXPECT_GE(-1, dlt_buffer_get_message_count(NULL)); */ } /* Begin MEthod: dlt_common::dlt_buffer_get_message_count */ /* Begin Method: dlt_common::dlt_buffer_get_total_size*/ TEST(t_dlt_buffer_get_total_size, normal) { DltBuffer buf; DltUserHeader header; /* Normal Use-Case, expected max buffer size (DLT_USER_RINGBUFFER_MAX_SIZE) */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); /*printf("##### %i\n", dlt_buffer_get_total_size(&buf)); */ EXPECT_LE(DLT_USER_RINGBUFFER_MAX_SIZE, dlt_buffer_get_total_size(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Normal Use-Case, 1st pushing data, expected max buffer size (DLT_USER_RINGBUFFER_MAX_SIZE) */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, sizeof(DltUserHeader))); /*printf("##### %i\n", dlt_buffer_get_total_size(&buf)); */ EXPECT_LE(DLT_USER_RINGBUFFER_MAX_SIZE, dlt_buffer_get_total_size(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_get_total_size, abnormal) { /* DltBuffer buf; */ /* Uninizialised, expected -1 */ /* EXPECT_GE(-1, dlt_buffer_get_total_size(&buf)); */ } TEST(t_dlt_buffer_get_total_size, nullpointer) { /* NULL-Pointer, expect -1 */ EXPECT_GE(-1, dlt_buffer_get_total_size(NULL)); } /* End Method: dlt_common::dlt_buffer_get_total_size*/ /* Begin Method: dlt_common::dlt_buffer_get_used_size*/ TEST(t_dlt_buffer_get_used_size, normal) { DltBuffer buf; DltUserHeader header; /* Normal Use Cas buffer empty, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); /*printf("##### %i\n", dlt_buffer_get_used_size(&buf)); */ EXPECT_LE(0, dlt_buffer_get_used_size(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Normal Use-Case with pushing data, expected > 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, sizeof(DltUserHeader))); /*printf("##### %i\n", dlt_buffer_get_used_size(&buf)); */ EXPECT_LE(0, dlt_buffer_get_used_size(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); /* Normal Use-Case with pushing 10000 data, expected > 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); for (int i = 1; i <= 10000; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_buffer_push(&buf, (unsigned char *)&header, sizeof(DltUserHeader))); /*printf("#### %i\n", dlt_buffer_get_used_size(&buf)); */ EXPECT_LE(1, dlt_buffer_get_used_size(&buf)); } EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_get_used_size, abnormal) { /* DltBuffer buf; */ /* Uninizialised, expected -1 */ /* EXPECT_GE(-1, dlt_buffer_get_used_size(&buf)); */ } TEST(t_dlt_buffer_get_used_size, nullpointer) { /*NULL-Pointer, expcted -1 */ EXPECT_GE(-1, dlt_buffer_get_used_size(NULL)); } /* End Method: dlt_common::dlt_buffer_get_used_size*/ /* Begin Method: dlt_common::dlt_buffer_write_block */ TEST(t_dlt_buffer_write_block, normal) { DltBuffer buf; unsigned char *data = NULL; int write; int size1 = 516; int size2 = 1024; /* Normal Use-Case, void method, expected no error */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_write_block(&buf, &write, data, size1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_write_block(&buf, &write, data, size2)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); int tmp = 0; for (int i = 0; i <= 10000; i += 10) { tmp += i; EXPECT_NO_THROW(dlt_buffer_write_block(&buf, &write, data, i)); } EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_write_block, abnormal) { /* actual no abnormal test cases */ /* because of void funktion and missing gtest tools for that */ } TEST(t_dlt_buffer_write_block, nullpointer) { DltBuffer buf; char *data; int write; int test1 = 1000; /* NULL-Pointer, expected < 0 */ EXPECT_NO_THROW(dlt_buffer_write_block(NULL, NULL, NULL, 0)); EXPECT_NO_THROW(dlt_buffer_write_block(NULL, NULL, NULL, test1)); EXPECT_NO_THROW(dlt_buffer_write_block(NULL, NULL, (unsigned char *)&data, 0)); EXPECT_NO_THROW(dlt_buffer_write_block(NULL, NULL, (unsigned char *)&data, test1)); EXPECT_NO_THROW(dlt_buffer_write_block(NULL, &write, NULL, 0)); EXPECT_NO_THROW(dlt_buffer_write_block(NULL, &write, NULL, test1)); EXPECT_NO_THROW(dlt_buffer_write_block(NULL, &write, (unsigned char *)&data, 0)); EXPECT_NO_THROW(dlt_buffer_write_block(NULL, &write, (unsigned char *)&data, test1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_write_block(&buf, NULL, NULL, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_write_block(&buf, NULL, NULL, test1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_write_block(&buf, NULL, (unsigned char *)&data, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_write_block(&buf, NULL, (unsigned char *)&data, test1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_write_block(&buf, &write, NULL, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_write_block(&buf, &write, NULL, test1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } /* End Method: dlt_common::dlt_buffer_write_block */ /* Begin Method: dlt_common::dlt_buffer_read_block */ TEST(t_dlt_buffer_read_block, normal) { DltBuffer buf; unsigned char *data = NULL; int write, read; int size1 = 516; int size2 = 1024; /* Normal Use-Case, void method, expected no error */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_write_block(&buf, &write, data, size1)); EXPECT_NO_THROW(dlt_buffer_read_block(&buf, &write, data, size1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_write_block(&buf, &read, data, size2)); EXPECT_NO_THROW(dlt_buffer_read_block(&buf, &write, data, size2)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_buffer_read_block, abnormal) { /* actual no abnormal test cases */ /* because of void funktion and missing gtest tools for that */ } TEST(t_dlt_buffer_read_block, nullpointer) { DltBuffer buf; char *data; int read = -1; int test1 = 1000; /* NULL-Pointer, expected < 0 */ EXPECT_NO_THROW(dlt_buffer_read_block(NULL, NULL, NULL, 0)); EXPECT_NO_THROW(dlt_buffer_read_block(NULL, NULL, NULL, test1)); EXPECT_NO_THROW(dlt_buffer_read_block(NULL, NULL, (unsigned char *)&data, 0)); EXPECT_NO_THROW(dlt_buffer_read_block(NULL, NULL, (unsigned char *)&data, test1)); EXPECT_NO_THROW(dlt_buffer_read_block(NULL, &read, NULL, 0)); EXPECT_NO_THROW(dlt_buffer_read_block(NULL, &read, NULL, test1)); EXPECT_NO_THROW(dlt_buffer_read_block(NULL, &read, (unsigned char *)&data, 0)); EXPECT_NO_THROW(dlt_buffer_read_block(NULL, &read, (unsigned char *)&data, test1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_read_block(&buf, NULL, NULL, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_read_block(&buf, NULL, NULL, test1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_read_block(&buf, NULL, (unsigned char *)&data, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_read_block(&buf, NULL, (unsigned char *)&data, test1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_read_block(&buf, &read, NULL, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_read_block(&buf, &read, NULL, test1)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_read_block(&buf, &read, (unsigned char *)&data, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } /* End Method: dlt_common::dlt_buffer_read_block */ /* Begin Method: dlt_common::dlt_buffer_info */ TEST(t_dlt_buffer_info, normal) { DltBuffer buf; /* Normal Use-Case */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_info(&buf)); } TEST(t_dlt_buffer_info, abnormal) { /* actually no abnormal test cases */ /* because of void function and missing gtest tools for that */ } TEST(t_dlt_buffer_info, nullpointer) { /* NULL-Pointer, no throw */ EXPECT_NO_THROW(dlt_buffer_info(NULL)); } /* End Method: dlt_common::dlt_buffer_info */ /* Begin Method: dlt_common::dlt_buffer_status */ TEST(t_dlt_buffer_status, normal) { DltBuffer buf; /* Normal Use-Case */ EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_NO_THROW(dlt_buffer_status(&buf)); } TEST(t_dlt_buffer_status, abnormal) { /* actual no abnormal test cases */ /* because of void funktion and missing gtest tools for that */ } TEST(t_dlt_buffer_status, nullpointer) { /* NULL-Pointer, expected -1 */ EXPECT_NO_THROW(dlt_buffer_status(NULL)); } /* End Method: dlt_common::dlt_buffer_status */ /*##############################################################################################################################*/ /*##############################################################################################################################*/ /*##############################################################################################################################*/ /* Begin Method: dlt_common::dlt_message_init*/ TEST(t_dlt_message_init, normal) { DltMessage msg; /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_message_init(&msg, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_free(&msg, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_init(&msg, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_message_free(&msg, 0)); } TEST(t_dlt_message_init, abnormal) { /* DltMessage msg; */ /* Double use init, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_message_init(&msg,0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_init(&msg,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_message_free(&msg,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_message_init(&msg,1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_init(&msg,1)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_message_free(&msg,1)); */ /* set Verbose to 12345678, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_init(&msg,12345678)); */ } TEST(t_dlt_message_init, nullpointer) { /*NULL-Pointer, expected -1 */ EXPECT_GE(DLT_RETURN_ERROR, dlt_message_init(NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_init(NULL, 1)); } /* End Method: dlt_common::dlt_message_init*/ /* Begin Method: dlt_common::dlt_message_free */ TEST(t_dlt_message_free, normal) { DltMessage msg; /* Normal Use Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_message_init(&msg, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_free(&msg, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_init(&msg, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_free(&msg, 1)); } TEST(t_dlt_message_free, abnormal) { /* DltMessage msg; */ /* Double use free, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_message_init(&msg,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_message_free(&msg,0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_free(&msg,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_message_init(&msg,0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_message_free(&msg,1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_free(&msg,1)); */ /* set Verbose to 12345678, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_free(&msg,12345678)); */ } TEST(t_dlt_message_free, nullpointer) { /*NULL-Pointer, expected -1 */ EXPECT_GE(DLT_RETURN_ERROR, dlt_message_free(NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_free(NULL, 1)); } /* End Method: dlt_common::dlt_message_free */ /* Begin Method: dlt_common::dlt_file_open */ TEST(t_dlt_file_open, normal) { DltFile file; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_file_open, abnormal) { /* DltFile file; */ /* / * Get PWD so file can be used* / */ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114]; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /*---------------------------------------*/ /* Uninizialsied, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_file_open(&file, openfile, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_file_open(&file, openfile, 1)); */ /* Verbose set to 12345678 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_file_open(&file, openfile, 12345678)); */ /* Path doesn't exist, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_file_open(&file, "This Path doesn't exist!!", 0)); */ } TEST(t_dlt_file_open, nullpointer) { DltFile file; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ /* NULL-Pointer, expected -1 */ EXPECT_GE(DLT_RETURN_ERROR, dlt_file_open(NULL, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_file_open(NULL, NULL, 1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_file_open(NULL, openfile, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_file_open(NULL, openfile, 1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_file_open(&file, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_file_open(&file, NULL, 1)); } /* End Method: dlt_common::dlt_file_open */ /* Begin Method: dlt_common::dlt_file_quick_parsing */ TEST(t_dlt_file_quick_parsing, normal) { DltFile file; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; char output[128] = "/tmp/output_testfile.txt"; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_quick_parsing(&file, output, DLT_OUTPUT_ASCII, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); unlink(output); } TEST(t_dlt_file_quick_parsing, abnormal) { DltFile file; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; char output[128] = "/tmp/output_testfile.txt"; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ /* Abnormal Use-Case, expected DLT_RETURN_WRONG_PARAMETER (-5) */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); EXPECT_GE(DLT_RETURN_WRONG_PARAMETER, dlt_file_quick_parsing(&file, NULL, DLT_OUTPUT_ASCII, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); EXPECT_GE(DLT_RETURN_WRONG_PARAMETER, dlt_file_quick_parsing(NULL, output, DLT_OUTPUT_ASCII, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } /* End Method: dlt_common::dlt_file_quick_parsing */ /* Begin Method: dlt_common::dlt_message_print_ascii*/ TEST(t_dlt_message_print_ascii, normal) { DltFile file; static char text[DLT_DAEMON_TEXTSIZE]; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file, 0) >= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_ascii(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_ascii(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_print_ascii, abnormal) { /* DltFile file; */ /* static char text[DLT_DAEMON_TEXTSIZE]; */ /* / * Get PWD so file and filter can be used* / */ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114]; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /*---------------------------------------*/ /* No messages read, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_ascii(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_ascii(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); */ /* Set verbose to 12345678 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_ascii(&file.msg, text, DLT_DAEMON_TEXTSIZE, 12345678)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); */ /* while (dlt_file_read(&file,0)>=0){} */ /* for(int i=0;i= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_ascii(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_ascii(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_print_ascii_with_filter, abnormal) { /* equal with t_dlt_message_print_ascii */ } TEST(t_dlt_message_print_ascii_with_filter, nullpointer) { /* equal with t_dlt_message_print_ascii */ } /* End Method: dlt_common::dlt_message_print_ascii with filter*/ /* Begin Method: dlt_common::dlt_message_print_header */ TEST(t_dlt_message_print_header, normal) { DltFile file; static char text[DLT_DAEMON_TEXTSIZE]; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file, 0) >= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_print_header, abnormal) { /* DltFile file; */ /* static char text[DLT_DAEMON_TEXTSIZE]; */ /* / * Get PWD so file and filter can be used* / */ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114]; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /*---------------------------------------*/ /* No messages read, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); */ /* Set verbose to 12345678 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 12345678)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); */ /* while (dlt_file_read(&file,0)>=0){} */ /* for(int i=0;i= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_print_header_with_filter, abnormal) { /* equal with t_dlt_message_print_header */ } TEST(t_dlt_message_print_header_with_filter, nullpointer) { /* equal with t_dlt_message_print_header */ } /* End Method: dlt_common::dlt_message_print_header with filter */ /* Begin Method: dlt_common::dlt_message_print_hex */ TEST(t_dlt_message_print_hex, normal) { DltFile file; static char text[DLT_DAEMON_TEXTSIZE]; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file, 0) >= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_hex(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_hex(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_print_hex, abnormal) { /* DltFile file; */ /* static char text[DLT_DAEMON_TEXTSIZE]; */ /* / * Get PWD so file and filter can be used* / */ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114]; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /*---------------------------------------*/ /* No messages read, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_hex(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_hex(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); */ /* Set verbose to 12345678 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_hex(&file.msg, text, DLT_DAEMON_TEXTSIZE, 12345678)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); */ /* while (dlt_file_read(&file,0)>=0){} */ /* for(int i=0;i= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_hex(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_hex(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_print_hex_with_filter, abnormal) { /* equal with t_dlt_message_print_hex */ } TEST(t_dlt_message_print_hex_with_filter, nullpointer) { /* equal with t_dlt_message_print_hex */ } /* End Method: dlt_common::dlt_message_print_hex with filter */ /* Begin Method: dlt_common::dlt_message_print_mixed_plain */ TEST(t_dlt_message_print_mixed_plain, normal) { DltFile file; static char text[DLT_DAEMON_TEXTSIZE]; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file, 0) >= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_mixed_plain(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_mixed_plain(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_print_mixed_plain, abnormal) { /* DltFile file; */ /* static char text[DLT_DAEMON_TEXTSIZE]; */ /* / * Get PWD so file and filter can be used* / */ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114]; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /*---------------------------------------*/ /* No messages read, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_mixed_plain(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_mixed_plain(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); */ /* Set verbose to 12345678 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_mixed_plain(&file.msg, text, DLT_DAEMON_TEXTSIZE, 12345678)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); */ /* while (dlt_file_read(&file,0)>=0){} */ /* for(int i=0;i= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_mixed_plain(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_mixed_plain(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_print_mixed_plain_with_filter, abnormal) { /* equal with t_dlt_message_print_mixed_plain */ } TEST(t_dlt_message_print_mixed_plain_with_filter, nullpointer) { /* equal with t_dlt_message_print_mixed_plain */ } /* End Method: dlt_common::dlt_message_print_mixed_pain with filter */ /* Begin Method: dlt_common::dlt_message_print_mixed_html */ TEST(t_dlt_message_print_mixed_html, normal) { DltFile file; static char text[DLT_DAEMON_TEXTSIZE]; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ /* Normal Use-Case, expected 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file, 0) >= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_mixed_html(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_mixed_html(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_print_mixed_html, abnormal) { /* DltFile file; */ /* static char text[DLT_DAEMON_TEXTSIZE]; */ /* / * Get PWD so file and filter can be used* / */ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114]; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /*---------------------------------------*/ /* No messages read, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_mixed_html(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_mixed_html(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); */ /* Set verbose to 12345678 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_print_mixed_html(&file.msg, text, DLT_DAEMON_TEXTSIZE, 12345678)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); */ /* while (dlt_file_read(&file,0)>=0){} */ /* for(int i=0;i= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_mixed_html(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_print_mixed_html(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_print_mixed_html_with_filter, abnormal) { /* equal with t_dlt_message_print_mixed_html */ } TEST(t_dlt_message_print_mixed_html_with_filter, nullpointer) { /* equal with t_dlt_message_print_mixed_html */ } /* End Method: dlt_common::dlt_message_print_mixed_html_with filter */ /* Begin Method:dlt_common::dlt_message_filter_check */ TEST(t_dlt_message_filter_check, normal) { DltFile file; DltFilter filter; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} char openfilter[117]; sprintf(openfile, "%s/testfile.dlt", pwd); sprintf(openfilter, "%s/testfilter.txt", pwd); /*---------------------------------------*/ /* Normal Use-Case, expected > 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_filter_init(&filter, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_filter_load(&filter, openfilter, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_set_filter(&file, &filter, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file, 0) >= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_filter_check(&file.msg, &filter, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_filter_check(&file.msg, &filter, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_filter_check, abnormal) { /* DltFile file; */ /* DltFilter filter; */ /* Get PWD so file and filter can be used*/ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114]; */ /* char openfilter[117]; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /* sprintf(openfilter, "%s/testfilter.txt", pwd); */ /*---------------------------------------*/ /* No messages read, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_filter_check(&file.msg, &filter, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_filter_check(&file.msg, &filter, 1)); */ /* Set verbose to 12345678 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_filter_check(&file.msg, &filter, 12345678)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); */ /* while (dlt_file_read(&file,0)>=0){} */ /* for(int i=0;i0 */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file, 0) >= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_get_extraparameters(&file.msg, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_get_extraparameters(&file.msg, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_get_extraparamters, abnormal) { /* DltFile file; */ /* Get PWD so file and filter can be used*/ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114]; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /*---------------------------------------*/ /* Uninizialised, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_get_extraparameters(&file.msg, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_get_extraparameters(&file.msg, 1)); */ /* set verbose to 12345678, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_get_extraparameters(&file.msg, 12345678)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); */ /* while (dlt_file_read(&file,0)>=0){} */ /* for(int i=0;i= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); printf("%s \n", text); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); printf("%s \n", text); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_header, abnormal) { /* DltFile file; */ /* static char text[DLT_DAEMON_TEXTSIZE]; */ /* Get PWD so file and filter can be used*/ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114]; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /*---------------------------------------*/ /* Uninizialised, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 1)); */ /* set verbose to 12345678, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header(&file.msg, text, DLT_DAEMON_TEXTSIZE, 12345678)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); */ /* while (dlt_file_read(&file,0)>=0){} */ /* for(int i=0;i= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_NONE, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_TIME, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_TMSTP, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGCNT, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_ECUID, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_APID, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_CTID, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGTYPE, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGSUBTYPE, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_VNVSTATUS, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_NOARG, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_ALL, 0)); printf("%s \n", text); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_NONE, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_TIME, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_TMSTP, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGCNT, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_ECUID, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_APID, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_CTID, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGTYPE, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGSUBTYPE, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_VNVSTATUS, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_NOARG, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_ALL, 1)); printf("%s \n", text); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_header_flags, abnormal) { /* DltFile file; */ /* static char text[DLT_DAEMON_TEXTSIZE]; */ /* / * Get PWD so file and filter can be used* / */ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114];; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /*---------------------------------------*/ /* Uninizialised, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_NONE, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_TIME, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_TMSTP, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGCNT, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_ECUID, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_APID, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_CTID, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGTYPE, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGSUBTYPE, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_VNVSTATUS, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_NOARG, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_ALL, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_NONE, 1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_TIME, 1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_TMSTP, 1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGCNT, 1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_ECUID, 1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_APID, 1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_CTID, 1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGTYPE, 1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_MSGSUBTYPE, 1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_VNVSTATUS, 1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_NOARG, 1)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_HEADER_SHOW_ALL, 1)); */ /* USE own DLT_HEADER_SHOW , expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_header_flags(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0x1234, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); */ /* while (dlt_file_read(&file,0)>=0){} */ /* for(int i=0;i= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_HEX, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_ASCII, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_MIXED_FOR_PLAIN, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_MIXED_FOR_HTML, 0)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_ASCII_LIMITED, 0)); printf("%s \n", text); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_HEX, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_ASCII, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_MIXED_FOR_PLAIN, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_MIXED_FOR_HTML, 1)); printf("%s \n", text); EXPECT_LE(DLT_RETURN_OK, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_ASCII_LIMITED, 1)); printf("%s \n", text); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_payload, abnormal) { DltFile file; static char text[DLT_DAEMON_TEXTSIZE]; /* Get PWD so file and filter can be used*/ char pwd[100]; if (getcwd(pwd, 100) == NULL) {} char openfile[114]; sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ /* Uninizialised, expected -1 */ memset(&file, 0x00, sizeof(DltFile)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_HEX, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_ASCII, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_MIXED_FOR_PLAIN, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_MIXED_FOR_HTML, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_ASCII_LIMITED, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_HEX, 1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_ASCII, 1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_MIXED_FOR_PLAIN, 1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_MIXED_FOR_HTML, 1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, DLT_OUTPUT_ASCII_LIMITED, 1)); /* USE own DLT_HEADER_SHOW , expected -1 */ EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, 99, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file,0)>=0){} for(int i=0;i 0 but */ /* we don't have text: */ /* dlt_common.c line 943: ptr = msg->databuffer; */ /* (gdb) p ptr */ /* $28 = (uint8_t *) 0x5124010337d46c00 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_payload(&file.msg, text, DLT_DAEMON_TEXTSIZE, 0, 1)); */ } /* End Method:dlt_common::dlt_message_payload */ /* Begin Method:dlt_common::dlt_message_set_extraparameters */ TEST(t_dlt_message_set_extraparamters, normal) { DltFile file; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ /* Normal Use-Case, expect 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file, 0) >= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_set_extraparameters(&file.msg, 0)); } for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_message_set_extraparameters(&file.msg, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_set_extraparamters, abnormal) { /* DltFile file; */ /* // Get PWD so file and filter can be used */ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114]; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /*---------------------------------------*/ /* Uninizialised, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_set_extraparameters(&file.msg, 0)); */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_set_extraparameters(&file.msg, 1)); */ /* set verbos to 12345678 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); */ /* while (dlt_file_read(&file,0)>=0){} */ /* for(int i=0;i= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_ERROR, dlt_message_read(&file.msg, (unsigned char *)buffer, 255, 0, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); EXPECT_LE(DLT_RETURN_OK, dlt_buffer_init_dynamic(&buf, DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE)); EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file, 0) >= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); EXPECT_LE(DLT_RETURN_ERROR, dlt_message_read(&file.msg, (unsigned char *)buffer, 255, 1, 1)); } EXPECT_LE(DLT_RETURN_OK, dlt_buffer_free_dynamic(&buf)); } TEST(t_dlt_message_read, abnormal) {} TEST(t_dlt_message_read, nullpointer) { DltFile file; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); /*---------------------------------------*/ DltBuffer buf; /* NULL_Pointer, expected -1 */ EXPECT_GE(DLT_RETURN_ERROR, dlt_message_read(NULL, NULL, 0, 0, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_read(NULL, (uint8_t *)&buf, 0, 0, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_read(&file.msg, NULL, 0, 0, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_message_read(&file.msg, (uint8_t *)&buf, 0, 0, 0)); } /* End Method:dlt_common::dlt_message_read */ /* Begin Method:dlt_common::dlt_message_argument_print */ TEST(t_dlt_message_argument_print, normal) { DltFile file; /* Get PWD so file can be used*/ char pwd[100]; char openfile[114]; /* ignore returned value from getcwd */ if (getcwd(pwd, 100) == NULL) {} sprintf(openfile, "%s/testfile.dlt", pwd); static char text[DLT_DAEMON_TEXTSIZE]; /*---------------------------------------*/ uint8_t *ptr; int32_t datalength; uint8_t **pptr; int32_t *pdatalength; /* Normal Use-Case, expect 0 */ EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file, 0) >= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); ptr = file.msg.databuffer; datalength = file.msg.datasize; pptr = &ptr; pdatalength = &datalength; EXPECT_GE(DLT_RETURN_OK, dlt_message_argument_print(&file.msg, DLT_TYPE_INFO_BOOL, pptr, pdatalength, text, DLT_DAEMON_TEXTSIZE, 0, 1)); /*printf("### ARGUMENT:%s\n", text); */ } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); while (dlt_file_read(&file, 0) >= 0) {} for (int i = 0; i < file.counter; i++) { EXPECT_LE(DLT_RETURN_OK, dlt_file_message(&file, i, 0)); ptr = file.msg.databuffer; datalength = file.msg.datasize; pptr = &ptr; pdatalength = &datalength; EXPECT_GE(DLT_RETURN_OK, dlt_message_argument_print(&file.msg, DLT_TYPE_INFO_RAWD, pptr, pdatalength, text, DLT_DAEMON_TEXTSIZE, 0, 1)); /*printf("### ARGUMENT:%s\n", text); */ } EXPECT_LE(DLT_RETURN_OK, dlt_file_free(&file, 0)); } TEST(t_dlt_message_argument_print, abnormal) { /* DltFile file; */ /* Get PWD so file and filter can be used */ /* char pwd[100]; */ /* getcwd(pwd, 100); */ /* char openfile[114]; */ /* sprintf(openfile, "%s/testfile.dlt", pwd); */ /* static char text[DLT_DAEMON_TEXTSIZE]; */ /*---------------------------------------*/ /* uint8_t *ptr; */ /* int32_t datalength; */ /* uint8_t **pptr; */ /* int32_t *pdatalength; */ /* Uninizialised, expected -1 */ /* EXPECT_GE(DLT_RETURN_ERROR, dlt_message_argument_print(&file.msg,12345678,pptr,pdatalength,text,DLT_DAEMON_TEXTSIZE,0,1)); */ /* Use a non defined type_info, expected -1 */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_init(&file, 0)); */ /* EXPECT_LE(DLT_RETURN_OK, dlt_file_open(&file, openfile, 0)); */ /* while (dlt_file_read(&file,0)>=0){} */ /* for(int i=0;i|"; */ /* char text3[DLT_DAEMON_TEXTSIZE]; */ /* EXPECT_LE(DLT_RETURN_OK, dlt_print_hex_string(text3,DLT_DAEMON_TEXTSIZE,(unsigned char *)test3, strlen(test3))); */ /*printf("text:%s\n", text3); */ /* convert text3 to an ascii string to compare with the original */ /* char * converted = (char*) malloc(strlen(test3) +1); */ /* int t = 0; */ /* for(unsigned int i=0;i|"; */ /* char text5[DLT_DAEMON_TEXTSIZE]; */ /* EXPECT_LE(DLT_RETURN_OK, dlt_print_mixed_string(text5,DLT_DAEMON_TEXTSIZE,(unsigned char *)test5,strlen(test5),0)); */ /* printf("%s\n", text5); */ /* const char * test6 = "^°!\"§$%&/()=?`Â´ÂšÂ˛ÂŗÂŧÂŊÂŦ{[]}\\¸@â‚ŦÃŧÃļä+#*'~`,.-;:_¡â€Ļ–<>|"; */ /* char text6[DLT_DAEMON_TEXTSIZE]; */ /* EXPECT_LE(DLT_RETURN_OK, dlt_print_mixed_string(text6,DLT_DAEMON_TEXTSIZE,(unsigned char *)test6,strlen(test6),1)); */ /* printf("%s\n", text6); */ /* const char * test7 = ""; */ /* char text7[DLT_DAEMON_TEXTSIZE]; */ /* EXPECT_LE(DLT_RETURN_OK, dlt_print_mixed_string(text7,DLT_DAEMON_TEXTSIZE,(unsigned char *)test7,strlen(test7),0)); */ /* printf("%s\n", text7); */ /* const char * test8 = ""; */ /* char text8[DLT_DAEMON_TEXTSIZE]; */ /* EXPECT_LE(DLT_RETURN_OK, dlt_print_mixed_string(text8,DLT_DAEMON_TEXTSIZE,(unsigned char *)test8,strlen(test8),1)); */ /* printf("%s\n", text8); */ } TEST(t_dlt_print_mixed_string, nullpointer) { const char *test9 = ""; char text9[DLT_DAEMON_TEXTSIZE]; EXPECT_GE(DLT_RETURN_ERROR, dlt_print_mixed_string(NULL, 0, 0, 0, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_print_mixed_string(NULL, 0, 0, 0, 1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_print_mixed_string(NULL, 0, (unsigned char *)test9, 0, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_print_mixed_string(NULL, 0, (unsigned char *)test9, 0, 1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_print_mixed_string(text9, 0, NULL, 0, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_print_mixed_string(text9, 0, NULL, 0, 1)); } /* End Method:dlt_common::dlt_print_mixed_string */ /* Begin Method:dlt_common::dlt_print_char_string */ TEST(t_dlt_print_char_string, normal) { /* Normal Use-Case, expect 0 */ const char *test1 = "HELLO"; char text1[DLT_DAEMON_TEXTSIZE]; char *ptr1 = text1; EXPECT_LE(DLT_RETURN_OK, dlt_print_char_string(&ptr1, DLT_DAEMON_TEXTSIZE, (unsigned char *)test1, strlen(test1))); printf("text:%s\n", text1); EXPECT_STREQ(text1, test1); const char *test2 = "qwertzuiopasdfghjklyxcvbnm1234567890"; char text2[DLT_DAEMON_TEXTSIZE]; char *ptr2 = text2; EXPECT_LE(DLT_RETURN_OK, dlt_print_char_string(&ptr2, DLT_DAEMON_TEXTSIZE, (unsigned char *)test2, strlen(test2))); printf("text:%s\n", text2); EXPECT_STREQ(text2, test2); } TEST(t_dlt_print_char_string, abnormal) { /* print special characters, expected 0 */ /* const char * test3 = "^°!\"§$%&/()=?`Â´ÂšÂ˛ÂŗÂŧÂŊÂŦ{[]}\\¸@â‚ŦÃŧÃļä+#*'~`,.-;:_¡â€Ļ–<>|"; */ /* char text3[DLT_DAEMON_TEXTSIZE]; */ /* char * ptr3 = text3; */ /* EXPECT_LE(DLT_RETURN_OK, dlt_print_char_string(&ptr3,DLT_DAEMON_TEXTSIZE,(unsigned char *)test3, strlen(test3))); */ /* printf("text:%s\n", text3); */ /* EXPECT_STREQ(text3, test3); */ /* Empty char *, expect 0 */ /* const char * test4 = ""; */ /* char text4[DLT_DAEMON_TEXTSIZE]; */ /* char * ptr4 = text4; */ /* EXPECT_LE(DLT_RETURN_OK, dlt_print_char_string(&ptr4,DLT_DAEMON_TEXTSIZE,(unsigned char *)test4, strlen(test4))); */ /* printf("text:%s\n", text4); */ /* EXPECT_STREQ(text4, test4); */ } TEST(t_dlt_print_char_string, nullpointer) { const char *test5 = "HELLO"; char text5[DLT_DAEMON_TEXTSIZE]; char *ptr5 = text5; EXPECT_GE(DLT_RETURN_ERROR, dlt_print_char_string(NULL, 0, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_print_char_string(NULL, 0, (unsigned char *)test5, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_print_char_string(&ptr5, 0, NULL, 0)); } /* End Method:dlt_common::dlt_print_char_string */ /* Begin Method:dlt_common::dlt_strnlen_s*/ TEST(t_dlt_strnlen_s, nullpointer) { size_t len = dlt_strnlen_s(NULL, 0); EXPECT_EQ(len, 0); } TEST(t_dlt_strnlen_s, len_zero) { const char text[] = "The Quick Brown Fox"; size_t len = dlt_strnlen_s(text, 0); EXPECT_EQ(len, 0); } TEST(t_dlt_strnlen_s, len_smaller) { const char text[] = "The Quick Brown Fox"; size_t len = dlt_strnlen_s(text, 10); EXPECT_EQ(len, 10); } TEST(t_dlt_strnlen_s, len_equal) { const char text[] = "The Quick Brown Fox"; size_t len = dlt_strnlen_s(text, 19); EXPECT_EQ(len, 19); } TEST(t_dlt_strnlen_s, len_larger) { const char text[] = "The Quick Brown Fox"; size_t len = dlt_strnlen_s(text, 100); EXPECT_EQ(len, 19); } /* End Method:dlt_common::dlt_strnlen_s*/ /* Begin Method:dlt_common::dlt_print_id */ TEST(t_dlt_print_id, normal) { /* Normal Use-Case, expect text==id */ const char *id = "DLTD"; char text[DLT_DAEMON_TEXTSIZE]; dlt_print_id(text, id); EXPECT_STREQ(text, id); } TEST(t_dlt_print_id, abnormal) { /* id to long, expect only first 4 chars */ /* const char* id = "DLTD123456789"; */ /* char text[DLT_DAEMON_TEXTSIZE]; */ /* dlt_print_id(text,id); */ /* EXPECT_STREQ(text,"DLTD"); */ /* id to short, expect expend with "-" to 4 chars */ /* id = "DL"; */ /* dlt_print_id(text,id); */ /* EXPECT_STREQ(text,"DL--"); */ } TEST(t_dlt_print_id, nullpointer) { const char *id = "DLTD"; char text[DLT_DAEMON_TEXTSIZE]; /* NULL-Pointer, expected nothing in return */ EXPECT_NO_THROW(dlt_print_id(NULL, NULL)); EXPECT_NO_THROW(dlt_print_id(NULL, id)); EXPECT_NO_THROW(dlt_print_id(text, NULL)); } /* End Method:dlt_common::dlt_print_id */ /* Begin Method:dlt_common::dlt_get_version */ TEST(t_dlt_get_version, normal) { /* Normal Use-Case */ char ver[255]; dlt_get_version(ver, 255); printf("%s\n", ver); } TEST(t_dlt_get_version, abnormal) { /* Change default length of ver to 1 */ /* char ver[1]; */ /* dlt_get_version(ver, DLT_USER_MAX_LIB_VERSION_LENGTH); */ /* printf("%s\n", ver); */ /* Change default length of ver to 1 and reduce second para to 1, too */ /* dlt_get_version(ver, 1); */ /* printf("%s\n", ver); */ } TEST(t_dlt_get_version, nullpointer) { EXPECT_NO_THROW(dlt_get_version(NULL, 0)); } /* End Method:dlt_common::dlt_get_version */ /* Begin Method:dlt_common::dlt_get_major_version */ TEST(dlt_get_major_version, normal) { char ver[DLT_USER_MAX_LIB_VERSION_LENGTH]; dlt_get_major_version(ver, DLT_USER_MAX_LIB_VERSION_LENGTH); EXPECT_STREQ(ver, _DLT_PACKAGE_MAJOR_VERSION); } TEST(dlt_get_major_version, abnormal) { /* Change default length of ver to 1 */ /* char ver[1]; */ /* dlt_get_major_version(ver, DLT_USER_MAX_LIB_VERSION_LENGTH); */ /* EXPECT_STREQ(ver, _DLT_PACKAGE_MAJOR_VERSION); */ /* Change default length of ver to 1 and reduce second para to 1, too */ /* dlt_get_major_version(ver, 1); */ /* EXPECT_STREQ(ver, _DLT_PACKAGE_MAJOR_VERSION); */ } TEST(dlt_get_major_version, nullpointer) { /* NULL-Pointer, expect exeption */ EXPECT_NO_THROW(dlt_get_major_version(NULL, 0)); } /* End Method:dlt_common::dlt_get_major_version */ /* Begin Method:dlt_common::dlt_get_minor_version */ TEST(dlt_get_minor_version, normal) { char ver[DLT_USER_MAX_LIB_VERSION_LENGTH]; dlt_get_minor_version(ver, DLT_USER_MAX_LIB_VERSION_LENGTH); EXPECT_STREQ(ver, _DLT_PACKAGE_MINOR_VERSION); } TEST(dlt_get_minor_version, abnormal) { /* Change default length of ver to 1 */ /* char ver[1]; */ /* dlt_get_minor_version(ver, DLT_USER_MAX_LIB_VERSION_LENGTH); */ /* EXPECT_STREQ(ver, _DLT_PACKAGE_MINOR_VERSION); */ /* Change default length of ver to 1 and reduce second para to 1, too */ /* dlt_get_minor_version(ver, 1); */ /* EXPECT_STREQ(ver, _DLT_PACKAGE_MINOR_VERSION); */ } TEST(dlt_get_minor_version, nullpointer) { /* NULL-Pointer, expect exeption */ EXPECT_NO_THROW(dlt_get_minor_version(NULL, 0)); } /* End Method:dlt_common::dlt_get_minor_version */ /*##############################################################################################################################*/ /*##############################################################################################################################*/ /*##############################################################################################################################*/ int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); ::testing::FLAGS_gtest_break_on_failure = true; /*::testing::FLAGS_gtest_filter = "*.normal"; */ return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/tests/gtest_dlt_daemon_common.cpp000066400000000000000000002337161377520261000224050ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author * Stefan Held * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file gtest_dlt_common.cpp */ #include #include extern "C" { #include "dlt_daemon_common.h" #include "dlt_daemon_common_cfg.h" #include "dlt_user_shared_cfg.h" #include "errno.h" #include #include "dlt_types.h" #include "dlt-daemon.h" #include "dlt-daemon_cfg.h" #include "dlt_daemon_common_cfg.h" #include "dlt_daemon_socket.h" #include "dlt_daemon_serial.h" #include "dlt_daemon_client.h" #include "dlt_offline_trace.h" #include "dlt_gateway_types.h" } #ifndef DLT_USER_DIR # define DLT_USER_DIR "/tmp/dltpipes" #endif /* Name of named pipe to DLT daemon */ #ifndef DLT_USER_FIFO # define DLT_USER_FIFO "/tmp/dlt" #endif /* Begin Method:dlt_daemon_common::dlt_daemon_init_user_information */ TEST(t_dlt_daemon_init_user_information, normal_one_list) { DltDaemon daemon; DltGateway gateway; char ecu[] = "ECU1"; EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } /* Begin Method:dlt_daemon_common::dlt_daemon_init_user_information */ TEST(t_dlt_daemon_init_user_information, normal_multiple_lists) { DltDaemon daemon; DltGateway gateway; char ecu[] = "ECU1"; char ecu2[] = "ECU2"; char ecu3[] = "ECU3"; gateway.connections = (DltGatewayConnection *)calloc(2, sizeof(DltGatewayConnection)); gateway.connections[0].ecuid = &ecu2[0]; gateway.connections[1].ecuid = &ecu3[0]; gateway.num_connections = 2; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 1, 0)); EXPECT_EQ(3, daemon.num_user_lists); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); EXPECT_EQ(DLT_RETURN_OK, strncmp(gateway.connections[0].ecuid, daemon.user_list[1].ecu, DLT_ID_SIZE)); EXPECT_EQ(DLT_RETURN_OK, strncmp(gateway.connections[1].ecuid, daemon.user_list[2].ecu, DLT_ID_SIZE)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); free(gateway.connections); } TEST(t_dlt_daemon_init_user_information, nullpointer) { DltDaemon daemon; DltGateway gateway; EXPECT_EQ(-1, dlt_daemon_init_user_information(NULL, NULL, 0, 0)); EXPECT_EQ(-1, dlt_daemon_init_user_information(NULL, &gateway, 0, 0)); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, NULL, 0, 0)); EXPECT_EQ(-1, dlt_daemon_init_user_information(&daemon, NULL, 1, 0)); } /* Begin Method:dlt_daemon_common::dlt_daemon_find_users_list */ TEST(t_dlt_daemon_find_users_list, normal_one_list) { DltDaemon daemon; DltGateway gateway; DltDaemonRegisteredUsers *user_list; char ecu[] = "ECU1"; EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); user_list = dlt_daemon_find_users_list(&daemon, &ecu[0], 0); EXPECT_NE(user_list, nullptr); EXPECT_EQ(DLT_RETURN_OK, strncmp(user_list->ecu, daemon.ecuid, DLT_ID_SIZE)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } /* Begin Method:dlt_daemon_common::dlt_daemon_find_users_list */ TEST(t_dlt_daemon_find_users_list, abnormal) { DltDaemon daemon; DltGateway gateway; DltDaemonRegisteredUsers *user_list; char ecu[] = "ECU1"; char bla[] = "BLAH"; EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); user_list = dlt_daemon_find_users_list(&daemon, bla, 0); EXPECT_EQ(user_list, nullptr); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } /* Begin Method:dlt_daemon_common::dlt_daemon_init_user_information */ TEST(t_dlt_daemon_find_users_list, normal_multiple_lists) { DltDaemon daemon; DltGateway gateway; char ecu[] = "ECU1"; char ecu2[] = "ECU2"; char ecu3[] = "ECU3"; DltDaemonRegisteredUsers *user_list; gateway.connections = (DltGatewayConnection *)calloc(2, sizeof(DltGatewayConnection)); gateway.connections[0].ecuid = &ecu2[0]; gateway.connections[1].ecuid = &ecu3[0]; gateway.num_connections = 2; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 1, 0)); EXPECT_EQ(3, daemon.num_user_lists); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); EXPECT_EQ(DLT_RETURN_OK, strncmp(gateway.connections[0].ecuid, daemon.user_list[1].ecu, DLT_ID_SIZE)); EXPECT_EQ(DLT_RETURN_OK, strncmp(gateway.connections[1].ecuid, daemon.user_list[2].ecu, DLT_ID_SIZE)); user_list = dlt_daemon_find_users_list(&daemon, &ecu[0], 0); EXPECT_NE(user_list, nullptr); EXPECT_EQ(DLT_RETURN_OK, strncmp(user_list->ecu, daemon.ecuid, DLT_ID_SIZE)); user_list = dlt_daemon_find_users_list(&daemon, &ecu2[0], 0); EXPECT_NE(user_list, nullptr); EXPECT_EQ(DLT_RETURN_OK, strncmp(user_list->ecu, gateway.connections[0].ecuid, DLT_ID_SIZE)); user_list = dlt_daemon_find_users_list(&daemon, &ecu3[0], 0); EXPECT_NE(user_list, nullptr); EXPECT_EQ(DLT_RETURN_OK, strncmp(user_list->ecu, gateway.connections[1].ecuid, DLT_ID_SIZE)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); free(gateway.connections); } TEST(t_dlt_daemon_find_users_list, nullpointer) { DltDaemon daemon; char ecu[] = "ECU1"; EXPECT_EQ(NULL, dlt_daemon_find_users_list(NULL, NULL, 0)); EXPECT_EQ(NULL, dlt_daemon_find_users_list(&daemon, NULL, 0)); EXPECT_EQ(NULL, dlt_daemon_find_users_list(NULL, &ecu[0], 0)); } /* Begin Method:dlt_daemon_common::dlt_daemon_application_add */ TEST(t_dlt_daemon_application_add, normal) { DltDaemon daemon; DltGateway gateway; const char *apid = "TEST"; pid_t pid = 0; const char *desc = "HELLO_TEST"; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 15; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, (char *)apid, pid, (char *)desc, fd, ecu, 0); /*printf("### APP: APID=%s DESCR=%s NUMCONTEXT=%i PID=%i USERHANDLE=%i\n", app->apid,app->application_description, app->num_contexts, app->pid, app->user_handle); */ EXPECT_STREQ(apid, app->apid); EXPECT_STREQ(desc, app->application_description); EXPECT_EQ(pid, app->pid); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); /* Apid > 4, expected truncate to 4 char or error */ apid = "TO_LONG"; app = dlt_daemon_application_add(&daemon, (char *)apid, pid, (char *)desc, fd, ecu, 0); char tmp[5]; strncpy(tmp, apid, 4); tmp[4] = '\0'; EXPECT_STREQ(tmp, app->apid); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_application_add, abnormal) { /* DltDaemon daemon; */ /* const char * apid = "TEST"; */ /* pid_t pid = 0; */ /* const char * desc = "HELLO_TEST"; */ /* DltDaemonApplication *app = NULL; */ /* Add the same application with same pid twice */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* EXPECT_LE((DltDaemonApplication *) 0, app); */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* EXPECT_EQ((DltDaemonApplication *) 0, app); */ /* dlt_daemon_application_del(&daemon,app, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* Add the same applicaiotn with different pid */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, 0, (char *) desc, 0); */ /* EXPECT_LE((DltDaemonApplication *) 0, app); */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, 123, (char *) desc, 0); */ /* EXPECT_EQ((DltDaemonApplication *) 0, app); */ /* dlt_daemon_application_del(&daemon,app, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* verbose value != 0 or 1 */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 12345678)); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* Apid < 4, expected fill to 4 chars or error */ /* apid = "SH"; */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* char tmp[5]; */ /* strncpy(tmp, apid, 4); */ /* tmp[4] = '\0'; */ /* EXPECT_STREQ(tmp, app->apid); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_application_add, nullpointer) { DltDaemon daemon; const char *apid = "TEST"; const char *desc = "HELLO_TEST"; int fd = 42; char ecu[] = "ECU1"; /* NULL-Pointer test */ EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_add(NULL, NULL, 0, NULL, 0, NULL, 0)); EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_add(NULL, NULL, 0, (char *)desc, 0, NULL, 0)); EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_add(NULL, (char *)apid, 0, NULL, 0, NULL, 0)); EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_add(NULL, (char *)apid, 0, (char *)desc, 0, NULL, 0)); EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_add(&daemon, NULL, 0, NULL, 0, NULL, 0)); EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_add(&daemon, NULL, 0, (char *)desc, 0, NULL, 0)); EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_add(NULL, NULL, 0, NULL, fd, NULL, 0)); EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_add(NULL, NULL, 0, NULL, 0, ecu, 0)); } /* End Method:dlt_daemon_common::dlt_daemon_application_add */ /* Begin Method: dlt_daemon_common::dlt_daemon_application_del */ TEST(t_dlt_daemon_application_del, normal) { DltDaemon daemon; DltGateway gateway; const char *apid = "TEST"; pid_t pid = 0; const char *desc = "HELLO_TEST"; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case, retrun type cannot be tested, only apid and desc */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, (char *)apid, pid, (char *)desc, fd, ecu, 0); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_application_del, abnormal) { /* DltDaemon daemon; */ /* const char * apid = "TEST"; */ /* pid_t pid = 0; */ /* const char * desc = "HELLO_TEST"; */ /* DltDaemonApplication *app = NULL; */ /* no application exists, expect < 0 */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_application_del(&daemon, app, 0)); */ /* Call delete two times */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* EXPECT_LE(0, dlt_daemon_application_del(&daemon,app, 0)); */ /* EXPECT_GE(-1, dlt_daemon_application_del(&daemon,app, 0)); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* Verbose parameter != 0 or 1 */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* EXPECT_GE(-1, dlt_daemon_application_del(&daemon,app, 123456789)); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_application_del, nullpointer) { DltDaemon daemon; DltDaemonApplication app; char ecu[] = "ECU1"; /* NULL-Pointer */ EXPECT_GE(-1, dlt_daemon_application_del(NULL, NULL, NULL, 0)); EXPECT_GE(-1, dlt_daemon_application_del(NULL, &app, NULL, 0)); EXPECT_GE(-1, dlt_daemon_application_del(&daemon, NULL, ecu, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_application_del */ /* Begin Method: dlt_daemon_common::dlt_daemon_applikation_find */ TEST(t_dlt_daemon_application_find, normal) { DltDaemon daemon; DltGateway gateway; const char *apid = "TEST"; pid_t pid = 0; const char *desc = "HELLO_TEST"; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, (char *)apid, pid, (char *)desc, fd, ecu, 0); EXPECT_STREQ(apid, app->apid); EXPECT_STREQ(desc, app->application_description); EXPECT_EQ(pid, app->pid); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); /* Application doesn't exist, expect NULL */ EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_find(&daemon, ecu, (char *)apid, 0)); /* Use a different apid, expect NULL */ app = dlt_daemon_application_add(&daemon, (char *)apid, pid, (char *)desc, fd, ecu, 0); EXPECT_LE((DltDaemonApplication *)0, dlt_daemon_application_find(&daemon, ecu, (char *)apid, 0)); EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_find(&daemon, ecu, (char *)"NEXI", 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_application_find, abnormal) { /* DltDaemon daemon; */ /* const char * apid = "TEST"; */ /* pid_t pid = 0; */ /* const char * desc = "HELLO_TEST"; */ /* DltDaemonApplication *app = NULL; */ /* Verbose != 0 or 1, expect error */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* dlt_daemon_application_find(&daemon, (char *) apid, 0); */ /* EXPECT_EQ((DltDaemonApplication *) 0, dlt_daemon_application_find(&daemon, (char *) apid, 123456789)); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_application_find, nullpointer) { DltDaemon daemon; const char *apid = "TEST"; /* NULL-Pointer, expected NULL */ EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_find(NULL, NULL, NULL, 0)); EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_find(NULL, (char *)apid, NULL, 0)); EXPECT_EQ((DltDaemonApplication *)0, dlt_daemon_application_find(&daemon, NULL, NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_applikation_find */ /* Begin Method: dlt_daemon_common::dlt_daemon_applications_clear */ TEST(t_dlt_daemon_applications_clear, normal) { DltDaemon daemon; DltGateway gateway; pid_t pid = 0; char ecu[] = "ECU1"; int fd = 42; /* Normal Use Case, expect >= 0 */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); EXPECT_LE((DltDaemonApplication *)0, dlt_daemon_application_add(&daemon, (char *)"TES1", pid, (char *)"Test clear 1", fd, ecu, 0)); dlt_daemon_application_add(&daemon, (char *)"TES2", pid, (char *)"Test clear 2", fd, ecu, 0); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_applications_clear, abnormal) { /* DltDaemon daemon; */ /* pid_t pid = 0; */ /* No applications added, expect < -1 */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_applications_clear(&daemon, 0)); */ /* Verbose != 0 or 1, expect error */ /* dlt_daemon_application_add(&daemon, (char *) "TEST", pid, (char *) "Test clear", 0); */ /* EXPECT_GE(-1, dlt_daemon_applications_clear(&daemon, 123456789)); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_applications_clear, nullpointer) { /* NULL-Pointer, expect < 0 */ EXPECT_GE(-1, dlt_daemon_applications_clear(NULL, NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_applications_clear */ /* Begin Method: dlt_daemon_common::dlt_daemon_applications_invalidate_fd */ TEST(t_dlt_daemon_applications_invalidate_fd, normal) { DltDaemon daemon; DltGateway gateway; const char *apid = "TEST"; pid_t pid = 0; const char *desc = "HELLO_TEST"; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, (char *)apid, pid, (char *)desc, fd, ecu, 0); EXPECT_LE(0, dlt_daemon_applications_invalidate_fd(&daemon, ecu, app->user_handle, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_applications_invalidate_fd, abnormal) { /* DltDaemon daemon; */ /* const char * apid = "TEST"; */ /* pid_t pid = 0; */ /* const char * desc = "HELLO_TEST"; */ /* DltDaemonApplication *app = NULL; */ /* Daemon isn't initialized, expected error */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_applications_invalidate_fd(&daemon, 0, 0)); */ /* Verbose != 0 or 1, expect error */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* EXPECT_GE(-1, dlt_daemon_applications_invalidate_fd(&daemon, app->user_handle, 123456789)); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_applications_invalidate_fd, nullpointer) { /* NULL-Pointer */ EXPECT_GE(-1, dlt_daemon_applications_invalidate_fd(NULL, NULL, 0, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_applications_invalidate_fd */ /* Begin Method: dlt_daemon_common::dlt_daemon_applications_save */ TEST(t_dlt_daemon_applications_save, normal) { DltDaemon daemon; DltGateway gateway; const char *apid = "TEST"; pid_t pid = 0; const char *desc = "HELLO_TEST"; DltDaemonApplication *app = NULL; const char *filename = "/tmp/dlt-runtime.cfg"; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, (char *)apid, pid, (char *)desc, fd, ecu, 0); EXPECT_LE(0, dlt_daemon_applications_save(&daemon, (char *)filename, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_applications_save, abnormal) { /* DltDaemon daemon; */ /* const char * apid = "TEST"; */ /* pid_t pid = 0; */ /* const char * desc = "HELLO_TEST"; */ /* DltDaemonApplication *app = NULL; */ /* const char * filename = "/tmp/dlt-runtime.cfg"; */ /* Uninitialized */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_applications_save(&daemon, (char *) filename, 0)); */ /* Verbose != 1 or 0, expect error */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* EXPECT_GE(-1, dlt_daemon_applications_save(&daemon, (char *) filename, 123456789)); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* Wrong path filename */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* EXPECT_GE(-1, dlt_daemon_applications_save(&daemon, (char *) "PATH_DONT_EXIST", 0)); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_applications_save, nullpointer) { DltDaemon daemon; const char *filename = "/tmp/dlt-runtime.cfg"; /* NULL-Pointer */ EXPECT_GE(-1, dlt_daemon_applications_save(NULL, NULL, 0)); EXPECT_GE(-1, dlt_daemon_applications_save(NULL, (char *)filename, 0)); EXPECT_GE(-1, dlt_daemon_applications_save(&daemon, NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_applications_save */ /* Begin Method: dlt_daemon_common::dlt_daemon_applications_load */ TEST(t_dlt_daemon_applications_load, normal) { DltDaemon daemon; DltGateway gateway; char ecu[] = "ECU1"; const char *filename = "/tmp/dlt-runtime.cfg"; /* Normal Use-Case, first execute t_dlt_daemon_applications_save !! */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); EXPECT_LE(0, dlt_daemon_applications_load(&daemon, (char *)filename, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_applications_load, abnormal) { /* DltDaemon daemon; */ /* const char * apid = "TEST"; */ /* pid_t pid = 0; */ /* const char * desc = "HELLO_TEST"; */ /* DltDaemonApplication *app = NULL; */ /* const char * filename = "/tmp/dlt-runtime.cfg"; */ /* Uninitialized */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_applications_load(&daemon, (char *) filename, 0)); */ /* Verbose != 1 or 0, expect error */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* EXPECT_GE(-1, dlt_daemon_applications_load(&daemon, (char *) filename, 123456789)); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* Wrong path filename */ /* app = dlt_daemon_application_add(&daemon,(char *) apid, pid, (char *) desc, 0); */ /* EXPECT_GE(-1, dlt_daemon_applications_load(&daemon, (char *) "PATH_DONT_EXIST", 0)); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_applications_load, nullpointer) { DltDaemon daemon; const char *filename = "/tmp/dlt-runtime.cfg"; /* NULL-Pointer */ EXPECT_GE(-1, dlt_daemon_applications_load(NULL, NULL, 0)); EXPECT_GE(-1, dlt_daemon_applications_load(NULL, (char *)filename, 0)); EXPECT_GE(-1, dlt_daemon_applications_load(&daemon, NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_applications_load */ /*##############################################################################################################################*/ /*##############################################################################################################################*/ /*##############################################################################################################################*/ /* Begin Method: dlt_daemon_common::dlt_daemon_context_add */ TEST(t_dlt_daemon_context_add, normal) { /* Log Level */ /* DLT_LOG_DEFAULT = -1, / **< Default log level * / */ /* DLT_LOG_OFF = 0x00, / **< Log level off * / */ /* DLT_LOG_FATAL = 0x01, / **< fatal system error * / */ /* DLT_LOG_ERROR = 0x02, / **< error with impact to correct functionality * / */ /* DLT_LOG_WARN = 0x03, / **< warning, correct behaviour could not be ensured * / */ /* DLT_LOG_INFO = 0x04, / **< informational * / */ /* DLT_LOG_DEBUG = 0x05, / **< debug * / */ /* DLT_LOG_VERBOSE = 0x06 / **< highest grade of information * / */ /* Trace Status */ /* DLT_TRACE_STATUS_DEFAULT = -1, / **< Default trace status * / */ /* DLT_TRACE_STATUS_OFF = 0x00, / **< Trace status: Off * / */ /* DLT_TRACE_STATUS_ON = 0x01 / **< Trace status: On * / */ DltDaemon daemon; DltGateway gateway; ID4 apid = "TES"; ID4 ctid = "CON"; char desc[255] = "TEST dlt_daemon_context_add"; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, 0, desc, ecu, 0); /*printf("### CONTEXT: APID=%s\tCTID=%s\n", daecontext->apid,daecontext->ctid); */ EXPECT_STREQ(apid, daecontext->apid); EXPECT_STREQ(ctid, daecontext->ctid); EXPECT_STREQ(desc, daecontext->context_description); EXPECT_EQ(DLT_LOG_DEFAULT, daecontext->log_level); EXPECT_EQ(DLT_TRACE_STATUS_DEFAULT, daecontext->trace_status); EXPECT_LE(0, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_context_add, abnormal) { DltDaemon daemon; DltGateway gateway; ID4 apid = "TES"; ID4 ctid = "CON"; char desc[255] = "TEST dlt_daemon_context_add"; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 42; /* Log Level dont exists */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); DltLogLevelType DLT_LOG_NOT_EXIST = (DltLogLevelType) - 100; app = dlt_daemon_application_add(&daemon, apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_NOT_EXIST, DLT_TRACE_STATUS_DEFAULT, 0, 0, desc, ecu, 0); /*printf("### CONTEXT: APID=%s\tCTID=%s\n", daecontext->apid,daecontext->ctid); */ EXPECT_EQ((DltDaemonContext *)0, daecontext); EXPECT_GE(-1, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); /* Trace Status dont exists */ DltTraceStatusType DLT_TRACE_TYPE_NOT_EXIST = (DltTraceStatusType) - 100; app = dlt_daemon_application_add(&daemon, apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_TYPE_NOT_EXIST, 0, 0, desc, ecu, 0); /*printf("### CONTEXT: APID=%s\tCTID=%s\n", daecontext->apid,daecontext->ctid); */ EXPECT_EQ((DltDaemonContext *)0, daecontext); EXPECT_GE(-1, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); /* Apid to long */ /* char apid_tl[8] = "TO_LONG"; */ /* app = dlt_daemon_application_add(&daemon, apid_tl, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid_tl,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* printf("### CONTEXT: APID=%s\tCTID=%s\n", daecontext->apid,daecontext->ctid); */ /* EXPECT_STREQ(apid_tl, daecontext->apid); */ /* EXPECT_STREQ(ctid, daecontext->ctid); */ /* EXPECT_STREQ(desc, daecontext->context_description); */ /* EXPECT_EQ(DLT_LOG_DEFAULT, daecontext->log_level); */ /* EXPECT_EQ(DLT_TRACE_STATUS_DEFAULT, daecontext->trace_status); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* Apid to short */ /* char apid_ts[3] = "TS"; */ /* app = dlt_daemon_application_add(&daemon, apid_ts, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid_ts,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* //printf("### CONTEXT: APID=%s\tCTID=%s\n", daecontext->apid,daecontext->ctid); */ /* EXPECT_STREQ(apid_ts, daecontext->apid); */ /* EXPECT_STREQ(ctid, daecontext->ctid); */ /* EXPECT_STREQ(desc, daecontext->context_description); */ /* EXPECT_EQ(DLT_LOG_DEFAULT, daecontext->log_level); */ /* EXPECT_EQ(DLT_TRACE_STATUS_DEFAULT, daecontext->trace_status); */ /* //EXPECT_EQ(4, strlen(apid_ts)); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* Ctid to long */ /* char ctid_tl[8] = "TO_LONG"; */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid_tl,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* //printf("### CONTEXT: APID=%s\tCTID=%s\n", daecontext->apid,daecontext->ctid); */ /* EXPECT_STREQ(apid, daecontext->apid); */ /* EXPECT_STREQ(ctid_tl, daecontext->ctid); */ /* EXPECT_STREQ(desc, daecontext->context_description); */ /* EXPECT_EQ(DLT_LOG_DEFAULT, daecontext->log_level); */ /* EXPECT_EQ(DLT_TRACE_STATUS_DEFAULT, daecontext->trace_status); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* Ctid to short */ /* char ctid_ts[4] = "TS"; */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid_ts,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* //printf("### CONTEXT: APID=%s\tCTID=%s\n", daecontext->apid,daecontext->ctid); */ /* EXPECT_STREQ(apid, daecontext->apid); */ /* EXPECT_STREQ(ctid_ts, daecontext->ctid); */ /* EXPECT_STREQ(desc, daecontext->context_description); */ /* EXPECT_EQ(DLT_LOG_DEFAULT, daecontext->log_level); */ /* EXPECT_EQ(DLT_TRACE_STATUS_DEFAULT, daecontext->trace_status); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* Verbose != 0 or 1 */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,123456789); */ /* //printf("### CONTEXT: APID=%s\tCTID=%s\n", daecontext->apid,daecontext->ctid); */ /* EXPECT_EQ((DltDaemonContext *) 0, daecontext); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_context_add, nullpointer) { DltDaemon daemon; DltGateway gateway; ID4 apid = "TES"; ID4 ctid = "CON"; char ecu[] = "ECU1"; char desc[255] = "TEST dlt_daemon_context_add"; /* NULL-Pointer */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(NULL, NULL, NULL, 0, 0, 0, 0, desc, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(NULL, NULL, ctid, 0, 0, 0, 0, NULL, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(NULL, NULL, ctid, 0, 0, 0, 0, desc, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(NULL, apid, NULL, 0, 0, 0, 0, NULL, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(NULL, apid, NULL, 0, 0, 0, 0, desc, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(NULL, apid, ctid, 0, 0, 0, 0, NULL, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(NULL, apid, ctid, 0, 0, 0, 0, desc, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(&daemon, NULL, NULL, 0, 0, 0, 0, NULL, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(&daemon, NULL, NULL, 0, 0, 0, 0, desc, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(&daemon, NULL, ctid, 0, 0, 0, 0, NULL, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(&daemon, NULL, ctid, 0, 0, 0, 0, desc, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(&daemon, apid, NULL, 0, 0, 0, 0, NULL, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(&daemon, apid, NULL, 0, 0, 0, 0, desc, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_add(&daemon, apid, ctid, 0, 0, 0, 0, NULL, NULL, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_context_add */ /* Begin Method: dlt_daemon_common::dlt_daemon_context_del */ TEST(t_dlt_daemon_context_del, normal) { DltDaemon daemon; DltGateway gateway; ID4 apid = "TES"; ID4 ctid = "CON"; char desc[255] = "TEST dlt_daemon_context_add"; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, 0, desc, ecu, 0); EXPECT_LE(0, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_context_del, abnormal) { /* DltDaemon daemon; */ /* ID4 apid = "TES"; */ /* ID4 ctid = "CON"; */ /* char desc[255] = "TEST dlt_daemon_context_add"; */ /* DltDaemonContext *daecontext; */ /* DltDaemonApplication *app; */ /* Context uninitialized */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_context_del(&daemon, daecontext, 0)); */ /* No application used */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* EXPECT_GE(-1, dlt_daemon_context_del(&daemon, daecontext, 0)); */ /* EXPECT_GE(-1, dlt_daemon_application_del(&daemon, app, 0)); */ /* EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, 0)); */ /* EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, 0)); */ /* No contex added */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* EXPECT_GE(-1, dlt_daemon_context_del(&daemon, daecontext, 0)); */ /* EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, 0)); */ /* EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, 0)); */ /* EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, 0)); */ /* Verbose != 0 or 1 */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* EXPECT_GE(-1, dlt_daemon_context_del(&daemon, daecontext, 123456789)); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_context_del, nullpointer) { DltDaemon daemon; DltDaemonContext daecontext; char ecu[] = "ECU1"; /*NULL-Pointer */ EXPECT_GE(-1, dlt_daemon_context_del(NULL, NULL, ecu, 0)); EXPECT_GE(-1, dlt_daemon_context_del(NULL, &daecontext, NULL, 0)); EXPECT_GE(-1, dlt_daemon_context_del(&daemon, NULL, NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_context_del */ /* Begin Method: dlt_daemon_common::dlt_daemon_context_find */ TEST(t_dlt_daemon_context_find, normal) { DltDaemon daemon; DltGateway gateway; ID4 apid = "TES"; ID4 ctid = "CON"; char desc[255] = "TEST dlt_daemon_context_add"; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, 0, desc, ecu, 0); EXPECT_STREQ(apid, daecontext->apid); EXPECT_STREQ(ctid, daecontext->ctid); EXPECT_STREQ(desc, daecontext->context_description); EXPECT_EQ(DLT_LOG_DEFAULT, daecontext->log_level); EXPECT_EQ(DLT_TRACE_STATUS_DEFAULT, daecontext->trace_status); EXPECT_LE(0, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_context_find, abnormal) { DltDaemon daemon; DltGateway gateway; ID4 apid = "TES"; ID4 ctid = "CON"; char desc[255] = "TEST dlt_daemon_context_add"; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 42; /* Uninitialized */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(&daemon, apid, ctid, ecu, 0)); /* No apid */ char no_apid[1] = ""; app = dlt_daemon_application_add(&daemon, no_apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, no_apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, 0, desc, ecu, 0); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(&daemon, no_apid, ctid, ecu, 0)); EXPECT_GE(-1, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_GE(-1, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); /* No ctid */ char no_ctid[1] = ""; app = dlt_daemon_application_add(&daemon, apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, no_ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, 0, desc, ecu, 0); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(&daemon, apid, no_ctid, ecu, 0)); EXPECT_GE(-1, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); /* No application added */ daecontext = dlt_daemon_context_add(&daemon, no_apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, 0, desc, ecu, 0); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(&daemon, no_apid, ctid, ecu, 0)); EXPECT_GE(-1, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); /* Verbose != 0 or 1 */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* EXPECT_EQ((DltDaemonContext *) 0 ,dlt_daemon_context_find(&daemon, apid, ctid, 123456789)); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_context_find, nullpointer) { DltDaemon daemon; ID4 apid = "TES"; ID4 ctid = "CON"; ID4 ecu = "ECU"; EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(NULL, NULL, NULL, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(NULL, NULL, ctid, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(NULL, apid, NULL, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(NULL, apid, ctid, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(&daemon, NULL, NULL, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(&daemon, NULL, ctid, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(&daemon, apid, NULL, NULL, 0)); EXPECT_EQ((DltDaemonContext *)0, dlt_daemon_context_find(&daemon, NULL, NULL, ecu, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_context_find */ /* Begin Method: dlt_daemon_common::dlt_daemon_contexts_clear */ TEST(t_dlt_daemon_contexts_clear, normal) { DltDaemon daemon; DltGateway gateway; ID4 apid = "TES"; ID4 ctid = "CON"; char desc[255] = "TEST dlt_daemon_context_add"; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, 0, desc, ecu, 0); EXPECT_LE(0, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_contexts_clear, abnormal) { /* DltDaemon daemon; */ /* ID4 apid = "TES"; */ /* ID4 ctid = "CON"; */ /* char desc[255] = "TEST dlt_daemon_context_add"; */ /* DltDaemonContext *daecontext = NULL; */ /* DltDaemonApplication *app = NULL; */ /* No context added */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_contexts_clear(&daemon, 0)); */ /* Verbose != 0 or 1 */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, 123456789)); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_contexts_clear, nullpointer) { /* NULL-Pointer */ EXPECT_GE(-1, dlt_daemon_contexts_clear(NULL, NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_contexts_clear */ /* Begin Method: dlt_daemon_common::dlt_daemon_contexts_invalidate_fd */ TEST(t_dlt_daemon_contexts_invalidate_fd, normal) { DltDaemon daemon; DltGateway gateway; ID4 apid = "TES"; ID4 ctid = "CON"; char desc[255] = "TEST dlt_daemon_context_add"; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, 0, desc, ecu, 0); EXPECT_LE(0, dlt_daemon_contexts_invalidate_fd(&daemon, ecu, app->user_handle, 0)); EXPECT_LE(0, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_contexts_invalidate_fd, abnormal) { /* DltDaemon daemon; */ /* ID4 apid = "TES"; */ /* ID4 ctid = "CON"; */ /* char desc[255] = "TEST dlt_daemon_context_add"; */ /* DltDaemonContext *daecontext = NULL; */ /* DltDaemonApplication *app = NULL; */ /* Uninitialized */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_contexts_invalidate_fd(&daemon, app->user_handle, 0)); */ /* Verbose != 0 or 1 */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* EXPECT_GE(-1, dlt_daemon_contexts_invalidate_fd(&daemon, app->user_handle, 123456789)); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_contexts_invalidate_fd, nullpointer) { /* NULL-Pointer */ EXPECT_GE(-1, dlt_daemon_contexts_invalidate_fd(NULL, NULL, 0, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_contexts_invalidate_fd */ /* Begin Method: dlt_daemon_common::dlt_daemon_contexts_save */ TEST(t_dlt_daemon_contexts_save, normal) { DltDaemon daemon; DltGateway gateway; ID4 apid = "TES"; ID4 ctid = "CON"; char desc[255] = "TEST dlt_daemon_context_add"; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; const char *filename = "/tmp/dlt-runtime-context.cfg"; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, 0, desc, ecu, 0); EXPECT_LE(0, dlt_daemon_contexts_save(&daemon, filename, 0)); EXPECT_LE(0, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_contexts_save, abnormal) { /* DltDaemon daemon; */ /* ID4 apid = "TES"; */ /* ID4 ctid = "CON"; */ /* char desc[255] = "TEST dlt_daemon_context_add"; */ /* DltDaemonContext *daecontext = NULL; */ /* DltDaemonApplication *app = NULL; */ /* const char * filename = "/tmp/dlt-runtime-context.cfg"; */ /* Uninitialized */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_contexts_save(&daemon, filename, 0)); */ /* Verbose != 1 or 0, expect error */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* EXPECT_GE(-1, dlt_daemon_contexts_save(&daemon, filename, 123456789)); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* Wrong path filename */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* EXPECT_GE(-1, dlt_daemon_contexts_save(&daemon, (char *) "PATCH_NOT_EXISTS", 0)); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_contexts_save, nullpointer) { DltDaemon daemon; const char *filename = "/tmp/dlt-runtime-context.cfg"; /* NULL-Pointer */ EXPECT_GE(-1, dlt_daemon_contexts_save(NULL, NULL, 0)); EXPECT_GE(-1, dlt_daemon_contexts_save(NULL, filename, 0)); EXPECT_GE(-1, dlt_daemon_contexts_save(&daemon, NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_contexts_save */ /* Begin Method: dlt_daemon_common::dlt_daemon_contexts_load */ TEST(t_dlt_daemon_contexts_load, normal) { DltDaemon daemon; DltGateway gateway; ID4 apid = "TES"; ID4 ctid = "CON"; char desc[255] = "TEST dlt_daemon_context_add"; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; const char *filename = "/tmp/dlt-runtime-context.cfg"; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, 0, desc, ecu, 0); EXPECT_LE(0, dlt_daemon_contexts_load(&daemon, filename, 0)); EXPECT_LE(0, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_contexts_load, abnormal) { /* DltDaemon daemon; */ /* ID4 apid = "TES"; */ /* ID4 ctid = "CON"; */ /* char desc[255] = "TEST dlt_daemon_context_add"; */ /* DltDaemonContext *daecontext = NULL; */ /* DltDaemonApplication *app = NULL; */ /* const char * filename = "/tmp/dlt-runtime-context.cfg"; */ /* Uninitialized */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_contexts_load(&daemon, filename, 0)); */ /* Verbose != 1 or 0, expect error */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* EXPECT_GE(-1, dlt_daemon_contexts_load(&daemon, filename, 123456789)); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* Wrong path filename */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* EXPECT_GE(-1, dlt_daemon_contexts_load(&daemon, (char *) "PATCH_NOT_EXISTS", 0)); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_contexts_load, nullpointer) { DltDaemon daemon; const char *filename = "/tmp/dlt-runtime-context.cfg"; /* NULL-Pointer */ EXPECT_GE(-1, dlt_daemon_contexts_load(NULL, NULL, 0)); EXPECT_GE(-1, dlt_daemon_contexts_load(NULL, filename, 0)); EXPECT_GE(-1, dlt_daemon_contexts_load(&daemon, NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_contexts_load */ /*##############################################################################################################################*/ /*##############################################################################################################################*/ /*##############################################################################################################################*/ /* Begin Method: dlt_daemon_common::dlt_daemon_user_send_all_log_state */ /* Can't test this Method, maybe a return value would be a better solution */ TEST(t_dlt_daemon_user_send_all_log_state, normal) { DltDaemon daemon; DltGateway gateway; char ecu[] = "ECU1"; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); EXPECT_NO_FATAL_FAILURE(dlt_daemon_user_send_all_log_state(&daemon, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_user_send_all_log_state, abnormal) {} TEST(t_dlt_daemon_user_send_all_log_state, nullpointer) { EXPECT_NO_FATAL_FAILURE(dlt_daemon_user_send_all_log_state(NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_user_send_all_log_state */ /* Begin Method: dlt_daemon_common::dlt_daemon_user_send_default_update */ /* Can't test this Method, maybe a return value would be a better solution */ TEST(t_dlt_daemon_user_send_default_update, normal) { DltDaemon daemon; DltGateway gateway; char ecu[] = "ECU1"; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); EXPECT_NO_FATAL_FAILURE(dlt_daemon_user_send_default_update(&daemon, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_user_send_default_update, abnormal) {} TEST(t_dlt_daemon_user_send_default_update, nullpointer) { EXPECT_NO_FATAL_FAILURE(dlt_daemon_user_send_default_update(NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_user_send_default_update */ /* Begin Method: dlt_daemon_common::dlt_daemon_user_send_log_level */ TEST(t_dlt_daemon_user_send_log_level, normal) { DltDaemon daemon; DltGateway gateway; ID4 apid = "TES"; ID4 ctid = "CON"; char desc[255] = "TEST dlt_daemon_context_add"; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; char ecu[] = "ECU1"; int fd = 42; /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); app = dlt_daemon_application_add(&daemon, apid, 0, desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, 1, desc, ecu, 0); EXPECT_LE(0, dlt_daemon_user_send_log_level(&daemon, daecontext, 0)); EXPECT_LE(0, dlt_daemon_context_del(&daemon, daecontext, ecu, 0)); EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, ecu, 0)); EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, ecu, 0)); EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, ecu, 0)); EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_user_send_log_level, abnormal) { /* DltDaemon daemon; */ /* ID4 apid = "TES"; */ /* ID4 ctid = "CON"; */ /* char desc[255] = "TEST dlt_daemon_context_add"; */ /* DltDaemonContext *daecontext = NULL; */ /* DltDaemonApplication *app = NULL; */ /* Uninitialized */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_user_send_log_level(&daemon, daecontext, 0)); */ /* File Handler <= 0 */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,-1,desc,0); */ /* EXPECT_GE(-1, dlt_daemon_user_send_log_level(&daemon, daecontext, 0)); */ /* EXPECT_LE(0, dlt_daemon_context_del(&daemon, daecontext, 0)); */ /* EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, 0)); */ /* EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, 0)); */ /* EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, 0)); */ /* Verbose != 0 or 1 */ /* app = dlt_daemon_application_add(&daemon, apid, 0, desc, 0); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,1,desc,0); */ /* EXPECT_GE(-1, dlt_daemon_user_send_log_level(&daemon, daecontext, 123456789)); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_user_send_log_level, nullpointer) { DltDaemon daemon; DltDaemonContext daecontext; /* NULL-Pointer */ EXPECT_GE(-1, dlt_daemon_user_send_log_level(NULL, NULL, 0)); EXPECT_GE(-1, dlt_daemon_user_send_log_level(NULL, &daecontext, 0)); EXPECT_GE(-1, dlt_daemon_user_send_log_level(&daemon, NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_user_send_log_level */ /* Begin Method: dlt_daemon_common::dlt_daemon_user_send_log_state */ TEST(t_dlt_daemon_user_send_log_state, normal) { DltDaemon daemon; DltGateway gateway; /* ID4 apid = "TES"; */ /* ID4 ctid = "CON"; */ /* char desc[255] = "TEST dlt_daemon_context_add"; */ /* DltDaemonContext *daecontext; */ /* DltDaemonApplication *app; */ pid_t pid = 18166; char ecu[] = "ECU1"; char filename[DLT_DAEMON_COMMON_TEXTBUFSIZE + 1]; snprintf(filename, DLT_DAEMON_COMMON_TEXTBUFSIZE, "%s/dlt%d", DLT_USER_DIR, pid); /* Normal Use-Case */ EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE)); /* open(filename, O_RDWR |O_NONBLOCK); */ /* dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, "",0); */ /* app = dlt_daemon_application_add(&daemon, apid, pid, desc, 0); */ /* //printf("### USERHANDLE=%i\n", app->user_handle); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* EXPECT_GE(0, dlt_daemon_user_send_log_state(&daemon, app, 0)); */ /* EXPECT_LE(0, dlt_daemon_context_del(&daemon, daecontext, 0)); */ /* EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, 0)); */ /* EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, 0)); */ /* EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, 0)); */ /* EXPECT_LE(0, close(app->user_handle)); */ EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); } TEST(t_dlt_daemon_user_send_log_state, abnormal) { /* DltDaemon daemon; */ /* ID4 apid = "TES"; */ /* ID4 ctid = "CON"; */ /* char desc[255] = "TEST dlt_daemon_context_add"; */ /* DltDaemonContext *daecontext = NULL; */ /* DltDaemonApplication *app = NULL; */ /* pid_t pid = 18166; */ /* char filename[DLT_DAEMON_COMMON_TEXTBUFSIZE+1]; */ /* snprintf(filename,DLT_DAEMON_COMMON_TEXTBUFSIZE,"%s/dlt%d",DLT_USER_DIR,pid); */ /*Uninitialized */ /* EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY,DLT_LOG_INFO, DLT_TRACE_STATUS_OFF,0,0)); */ /* EXPECT_GE(-1, dlt_daemon_user_send_log_state(&daemon, app, 0)); */ /* No Pipe open */ /*open(filename, O_RDWR |O_NONBLOCK); */ /* dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, "",0); */ /* app = dlt_daemon_application_add(&daemon, apid, pid, desc, 0); */ /*printf("### USERHANDLE=%i\n", app->user_handle); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* EXPECT_GE(-1, dlt_daemon_user_send_log_state(&daemon, app, 0)); */ /* EXPECT_LE(0, dlt_daemon_context_del(&daemon, daecontext, 0)); */ /* EXPECT_LE(0, dlt_daemon_application_del(&daemon, app, 0)); */ /* EXPECT_LE(0, dlt_daemon_contexts_clear(&daemon, 0)); */ /* EXPECT_LE(0, dlt_daemon_applications_clear(&daemon, 0)); */ /* EXPECT_LE(0, close(app->user_handle)); */ /* Verbose != 1 or 0 */ /* open(filename, O_RDWR |O_NONBLOCK); */ /* dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, "",0); */ /* app = dlt_daemon_application_add(&daemon, apid, pid, desc, 0); */ /* //printf("### USERHANDLE=%i\n", app->user_handle); */ /* daecontext = dlt_daemon_context_add(&daemon,apid,ctid,DLT_LOG_DEFAULT,DLT_TRACE_STATUS_DEFAULT,0,0,desc,0); */ /* EXPECT_GE(-1, dlt_daemon_user_send_log_state(&daemon, app, 123456789)); */ /* dlt_daemon_context_del(&daemon, daecontext, 0); */ /* dlt_daemon_application_del(&daemon, app, 0); */ /* dlt_daemon_contexts_clear(&daemon, 0); */ /* dlt_daemon_applications_clear(&daemon, 0); */ /* close(app->user_handle); */ /* EXPECT_EQ(0, dlt_daemon_free(&daemon, 0)); */ } TEST(t_dlt_daemon_user_send_log_state, nullpointer) { DltDaemon daemon; DltDaemonApplication app; EXPECT_GE(0, dlt_daemon_user_send_log_state(NULL, NULL, 0)); EXPECT_GE(0, dlt_daemon_user_send_log_state(NULL, &app, 0)); EXPECT_GE(0, dlt_daemon_user_send_log_state(&daemon, NULL, 0)); } /* End Method: dlt_daemon_common::dlt_daemon_user_send_log_state */ /*##############################################################################################################################*/ /*##############################################################################################################################*/ /*##############################################################################################################################*/ int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); ::testing::FLAGS_gtest_break_on_failure = true; /*::testing::FLAGS_gtest_filter = "*.normal"; */ /*::testing::FLAGS_gtest_repeat = 10000; */ return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/tests/gtest_dlt_daemon_event_handler.cpp000066400000000000000000000601111377520261000237160ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2016 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Onkar Palkar onkar.palkar@wipro.com * * \copyright Copyright Š 2016 Advanced Driver Information Technology. * * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file gtest_dlt_daemon_event_handler.cpp */ /******************************************************************************* ** ** ** SRC-MODULE: gtest_dlt_daemon_event_handler.cpp ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Onkar Palkar onkar.palkar@wipro.com ** ** PURPOSE : Unit test connection and event handling ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** op Onkar Palkar Wipro ** *******************************************************************************/ #include int connectServer(void); extern "C" { #include "dlt_daemon_event_handler.h" #include "dlt_daemon_connection.h" #include #include #include #include } /* Begin Method: dlt_daemon_event_handler::t_dlt_daemon_prepare_event_handling*/ TEST(t_dlt_daemon_prepare_event_handling, normal) { DltEventHandler ev; EXPECT_EQ(DLT_RETURN_OK, dlt_daemon_prepare_event_handling(&ev)); } TEST(t_dlt_daemon_prepare_event_handling, nullpointer) { /* NULL-Pointer, expect -1 */ EXPECT_EQ(DLT_RETURN_ERROR, dlt_daemon_prepare_event_handling(NULL)); } /* Begin Method: dlt_daemon_event_handler::t_dlt_daemon_handle_event*/ TEST(t_dlt_daemon_handle_event, normal) { DltDaemonLocal daemon_local; DltDaemon daemon; EXPECT_EQ(DLT_RETURN_OK, dlt_daemon_prepare_event_handling(&daemon_local.pEvent)); EXPECT_EQ(DLT_RETURN_OK, dlt_daemon_handle_event(&daemon_local.pEvent, &daemon, &daemon_local)); } TEST(t_dlt_daemon_handle_event, nullpointer) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_daemon_handle_event(NULL, NULL, NULL)); } /* Begin Method: dlt_daemon_event_handler::dlt_event_handler_find_connection*/ TEST(t_dlt_event_handler_find_connection, normal) { int fd = 10; DltEventHandler ev; DltConnection connections; DltConnection *ret = nullptr; DltReceiver receiver; memset(&ev, 0, sizeof(DltEventHandler)); memset(&connections, 0, sizeof(DltConnection)); memset(&receiver, 0, sizeof(DltReceiver)); receiver.fd = fd; ev.connections = &connections; ev.connections->receiver = &receiver; ret = dlt_event_handler_find_connection(&ev, fd); EXPECT_EQ(10, ret->receiver->fd); } /* Begin Method: dlt_daemon_event_handler::dlt_daemon_add_connection*/ TEST(t_dlt_daemon_add_connection, normal) { DltEventHandler ev1; DltConnection *head = nullptr; DltConnection *connections1 = nullptr; DltReceiver receiver; memset(&ev1, 0, sizeof(DltEventHandler)); memset(&receiver, 0, sizeof(DltReceiver)); ev1.connections = (DltConnection *)malloc(sizeof(DltConnection)); head = (DltConnection *)ev1.connections; memset(ev1.connections, 0, sizeof(DltConnection)); ev1.connections->next = 0; ev1.connections->type = DLT_CONNECTION_CLIENT_MSG_SERIAL; connections1 = (DltConnection *)malloc(sizeof(DltConnection)); memset(connections1, 0, sizeof(DltConnection)); connections1->next = 0; connections1->type = DLT_CONNECTION_GATEWAY; connections1->receiver = &receiver; EXPECT_EQ(DLT_CONNECTION_CLIENT_MSG_SERIAL, ev1.connections->type); dlt_daemon_add_connection(&ev1, connections1); head = (DltConnection *)ev1.connections->next; EXPECT_EQ(DLT_CONNECTION_GATEWAY, head->type); free(ev1.connections); free(connections1); } /* Begin Method: dlt_daemon_event_handler::dlt_daemon_remove_connection*/ TEST(t_dlt_daemon_remove_connection, normal) { DltEventHandler ev1; DltConnection *head = nullptr; DltConnection *connections1 = nullptr; memset(&ev1, 0, sizeof(DltEventHandler)); ev1.connections = (DltConnection *)malloc(sizeof(DltConnection)); head = (DltConnection *)ev1.connections; memset(ev1.connections, 0, sizeof(DltConnection)); ev1.connections->next = 0; ev1.connections->type = DLT_CONNECTION_CLIENT_MSG_SERIAL; connections1 = (DltConnection *)malloc(sizeof(DltConnection)); memset(connections1, 0, sizeof(DltConnection)); connections1->next = 0; connections1->type = DLT_CONNECTION_GATEWAY; DltReceiver receiver; connections1->receiver = &receiver; EXPECT_EQ(DLT_CONNECTION_CLIENT_MSG_SERIAL, ev1.connections->type); dlt_daemon_add_connection(&ev1, connections1); head = (DltConnection *)ev1.connections->next; EXPECT_EQ(DLT_CONNECTION_GATEWAY, head->type); EXPECT_EQ(DLT_RETURN_OK, dlt_daemon_remove_connection(&ev1, connections1)); } /* Begin Method: dlt_daemon_event_handler::dlt_event_handler_cleanup_connections*/ TEST(t_dlt_event_handler_cleanup_connections, normal) { DltEventHandler ev1; DltReceiver receiver1; memset(&ev1, 0, sizeof(DltEventHandler)); memset(&receiver1, 0, sizeof(DltReceiver)); ev1.connections = (DltConnection *)malloc(sizeof(DltConnection)); memset(ev1.connections, 0, sizeof(DltConnection)); ev1.connections->next = 0; ev1.connections->type = DLT_CONNECTION_GATEWAY; ev1.connections->receiver = &receiver1; dlt_event_handler_cleanup_connections(&ev1); } /* Begin Method: dlt_daemon_event_handler::dlt_connection_check_activate*/ TEST(t_dlt_connection_check_activate, normal) { int ret; DltEventHandler evhdl; DltReceiver receiver; DltConnection con; memset(&evhdl, 0, sizeof(DltEventHandler)); memset(&receiver, 0, sizeof(DltReceiver)); memset(&con, 0, sizeof(DltConnection)); receiver.fd = 1; con.receiver = &receiver; con.status = INACTIVE; con.type = DLT_CONNECTION_CLIENT_MSG_TCP; EXPECT_EQ(DLT_RETURN_OK, dlt_daemon_prepare_event_handling(&evhdl)); ret = dlt_connection_check_activate(&evhdl, &con, ACTIVATE); EXPECT_EQ(DLT_RETURN_OK, ret); ret = dlt_connection_check_activate(&evhdl, &con, DEACTIVATE); EXPECT_EQ(DLT_RETURN_OK, ret); free(evhdl.pfd); } TEST(t_dlt_connection_check_activate, nullpointer) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_connection_check_activate(NULL, NULL, DEACTIVATE)); } /* Begin Method: dlt_daemon_event_handler::dlt_event_handler_register_connection*/ TEST(t_dlt_event_handler_register_connection, normal) { int ret = 0; DltDaemonLocal daemon_local; int mask = 0; DltEventHandler ev1; DltConnection *connections1 = nullptr; DltReceiver receiver; memset(&daemon_local, 0, sizeof(DltDaemonLocal)); memset(&ev1, 0, sizeof(DltEventHandler)); memset(&receiver, 0, sizeof(DltReceiver)); EXPECT_EQ(DLT_RETURN_OK, dlt_daemon_prepare_event_handling(&ev1)); connections1 = (DltConnection *)malloc(sizeof(DltConnection)); memset(connections1, 0, sizeof(DltConnection)); connections1->next = 0; connections1->type = DLT_CONNECTION_GATEWAY; connections1->receiver = &receiver; ret = dlt_event_handler_register_connection(&ev1, &daemon_local, connections1, mask); EXPECT_EQ(DLT_RETURN_OK, ret); EXPECT_EQ(DLT_CONNECTION_GATEWAY, ev1.connections->type); free(ev1.pfd); free(connections1); } TEST(t_dlt_event_handler_register_connection, nullpointer) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_event_handler_register_connection(NULL, NULL, NULL, 1)); } /* Begin Method: dlt_daemon_event_handler::dlt_event_handler_unregister_connection*/ TEST(t_dlt_event_handler_unregister_connection, normal) { int ret = 0; DltDaemonLocal daemon_local; int mask = 0; DltEventHandler ev1; DltConnection *connections1 = nullptr; DltReceiver receiver; memset(&daemon_local, 0, sizeof(DltDaemonLocal)); memset(&ev1, 0, sizeof(DltEventHandler)); memset(&receiver, 0, sizeof(DltReceiver)); EXPECT_EQ(DLT_RETURN_OK, dlt_daemon_prepare_event_handling(&ev1)); connections1 = (DltConnection *)malloc(sizeof(DltConnection)); memset(connections1, 0, sizeof(DltConnection)); connections1->next = 0; connections1->type = DLT_CONNECTION_GATEWAY; connections1->receiver = &receiver; receiver.fd = 100; ret = dlt_event_handler_register_connection(&ev1, &daemon_local, connections1, mask); EXPECT_EQ(DLT_RETURN_OK, ret); EXPECT_EQ(DLT_CONNECTION_GATEWAY, ev1.connections->type); ret = dlt_event_handler_unregister_connection(&ev1, &daemon_local, receiver.fd); EXPECT_EQ(DLT_RETURN_OK, ret); free(ev1.pfd); } /* Begin Method: dlt_daemon_connections::dlt_connection_create*/ TEST(t_dlt_connection_create, normal) { int fd = 100; int ret = 0; DltDaemonLocal daemon_local; memset(&daemon_local, 0, sizeof(DltDaemonLocal)); EXPECT_EQ(DLT_RETURN_OK, dlt_daemon_prepare_event_handling(&daemon_local.pEvent)); ret = dlt_connection_create(&daemon_local, &daemon_local.pEvent, fd, POLLIN, DLT_CONNECTION_CLIENT_MSG_SERIAL); EXPECT_EQ(DLT_RETURN_OK, ret); dlt_event_handler_unregister_connection(&daemon_local.pEvent, &daemon_local, fd); free(daemon_local.pEvent.pfd); } /* Begin Method: dlt_daemon_connections::dlt_connection_destroy*/ TEST(t_dlt_connection_destroy, normal) { DltConnection *to_destroy = (DltConnection *)malloc(sizeof(DltConnection)); memset(to_destroy, 0, sizeof(DltConnection)); to_destroy->next = 0; to_destroy->type = DLT_CONNECTION_CLIENT_MSG_SERIAL; to_destroy->receiver = (DltReceiver *)malloc(sizeof(DltReceiver)); memset(to_destroy->receiver, 0, sizeof(DltReceiver)); to_destroy->receiver->fd = -1; to_destroy->receiver->buffer = nullptr; dlt_connection_destroy(to_destroy); } /* Begin Method: dlt_daemon_connections::t_dlt_connection_destroy_receiver*/ TEST(t_dlt_connection_destroy_receiver, normal) { DltConnection to_destroy; memset(&to_destroy, 0, sizeof(DltConnection)); to_destroy.receiver = (DltReceiver *)malloc(sizeof(DltReceiver)); memset(to_destroy.receiver, 0, sizeof(DltReceiver)); to_destroy.receiver->fd = -1; to_destroy.receiver->buffer = nullptr; dlt_connection_destroy_receiver(&to_destroy); } /* Begin Method: dlt_daemon_connections::t_dlt_connection_get_receiver*/ TEST(t_dlt_connection_get_receiver, normal) { int fd = 10; DltReceiver *ret; DltDaemonLocal daemon_local; memset(&daemon_local, 0, sizeof(DltDaemonLocal)); ret = dlt_connection_get_receiver(&daemon_local, DLT_CONNECTION_CLIENT_MSG_TCP, fd); ASSERT_NE(ret, nullptr); EXPECT_EQ(fd, ret->fd); } /* Begin Method: dlt_daemon_connections::(t_dlt_connection_get_next*/ TEST(t_dlt_connection_get_next, normal) { int type_mask = (DLT_CON_MASK_CLIENT_MSG_TCP | DLT_CON_MASK_CLIENT_MSG_SERIAL); DltConnection *ret = nullptr; DltConnection node; DltConnection current; memset(&node, 0, sizeof(DltConnection)); memset(¤t, 0, sizeof(DltConnection)); node.type = DLT_CONNECTION_CLIENT_MSG_TCP; current.type = DLT_CONNECTION_ONE_S_TIMER; current.next = &node; ret = dlt_connection_get_next(¤t, type_mask); ASSERT_NE(ret, nullptr); EXPECT_EQ(DLT_CONNECTION_CLIENT_MSG_TCP, ret->type); EXPECT_NE(DLT_CONNECTION_ONE_S_TIMER, ret->type); } /* Begin Method: dlt_daemon_connections::(t_dlt_connection_get_next*/ TEST(t_dlt_connection_get_next, abnormal) { int type_mask = (DLT_CON_MASK_CLIENT_MSG_TCP | DLT_CON_MASK_CLIENT_MSG_SERIAL); DltConnection *ret; DltConnection node; DltConnection current; memset(&node, 0, sizeof(DltConnection)); memset(¤t, 0, sizeof(DltConnection)); node.type = DLT_CONNECTION_CLIENT_MSG_TCP; current.type = DLT_CONNECTION_CLIENT_MSG_SERIAL; current.next = &node; ret = dlt_connection_get_next(¤t, type_mask); ASSERT_NE(ret, nullptr); EXPECT_NE(DLT_CONNECTION_CLIENT_MSG_TCP, ret->type); EXPECT_EQ(DLT_CONNECTION_CLIENT_MSG_SERIAL, ret->type); } /* Begin Method: dlt_daemon_connections::t_dlt_connection_send*/ TEST(t_dlt_connection_send, normal_1) { int ret = 0; DltConnection conn; DltReceiver receiver; void *data1 = nullptr; int size1 = 0; DltDaemonLocal daemon_local; memset(&conn, 0, sizeof(DltConnection)); memset(&receiver, 0, sizeof(DltReceiver)); memset(&daemon_local, 0, sizeof(DltDaemonLocal)); receiver.fd = connectServer(); EXPECT_NE(-1, receiver.fd); conn.receiver = &receiver; conn.type = DLT_CONNECTION_CLIENT_MSG_TCP; daemon_local.msg.databuffer = (uint8_t *)malloc(sizeof(uint8_t)); if (daemon_local.msg.databuffer == NULL) close(receiver.fd); EXPECT_NE((uint8_t *)NULL, daemon_local.msg.databuffer); memset(daemon_local.msg.databuffer, 1, sizeof(uint8_t)); daemon_local.msg.datasize = sizeof(uint8_t); data1 = daemon_local.msg.databuffer; size1 = daemon_local.msg.datasize; ret = dlt_connection_send(&conn, data1, size1); EXPECT_EQ(DLT_RETURN_OK, ret); close(receiver.fd); free(daemon_local.msg.databuffer); } TEST(t_dlt_connection_send, normal_2) { int ret = 0; DltConnection conn; DltReceiver receiver; memset(&conn, 0, sizeof(DltConnection)); memset(&receiver, 0, sizeof(DltReceiver)); receiver.fd = 1; conn.receiver = &receiver; conn.type = DLT_CONNECTION_CLIENT_MSG_SERIAL; ret = dlt_connection_send(&conn, (void *)dltSerialHeader, sizeof(dltSerialHeader)); EXPECT_EQ(DLT_RETURN_OK, ret); } TEST(t_dlt_connection_send, abnormal) { int ret = 0; DltConnection conn; DltReceiver receiver; memset(&conn, 0, sizeof(DltConnection)); memset(&receiver, 0, sizeof(DltReceiver)); receiver.fd = -1; conn.receiver = &receiver; conn.type = DLT_CONNECTION_TYPE_MAX; ret = dlt_connection_send(&conn, (void *)dltSerialHeader, sizeof(dltSerialHeader)); EXPECT_EQ(DLT_RETURN_ERROR, ret); } /* Begin Method: dlt_daemon_connections::t_dlt_connection_send_multiple*/ TEST(t_dlt_connection_send_multiple, normal_1) { int ret = 0; void *data1 = nullptr; void *data2 = nullptr; int size1 = 0; int size2 = 0; DltConnection conn; DltReceiver receiver; DltDaemonLocal daemon_local; memset(&conn, 0, sizeof(DltConnection)); memset(&receiver, 0, sizeof(DltReceiver)); memset(&daemon_local, 0, sizeof(DltDaemonLocal)); data1 = daemon_local.msg.headerbuffer + sizeof(DltStorageHeader); size1 = daemon_local.msg.headersize - sizeof(DltStorageHeader); data2 = daemon_local.msg.databuffer; size2 = daemon_local.msg.datasize; receiver.fd = connectServer(); EXPECT_NE(-1, receiver.fd); conn.receiver = &receiver; conn.type = DLT_CONNECTION_CLIENT_MSG_TCP; daemon_local.msg.headersize = sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + sizeof(DltStandardHeaderExtra) + sizeof(DltExtendedHeader); memset(daemon_local.msg.headerbuffer, 0, daemon_local.msg.headersize); data1 = daemon_local.msg.headerbuffer + sizeof(DltStorageHeader); size1 = daemon_local.msg.headersize - sizeof(DltStorageHeader); daemon_local.msg.databuffer = (uint8_t *)malloc(sizeof(uint8_t)); if (daemon_local.msg.databuffer == NULL) close(receiver.fd); EXPECT_NE((uint8_t *)NULL, daemon_local.msg.databuffer); memset(daemon_local.msg.databuffer, 0, sizeof(uint8_t)); daemon_local.msg.datasize = sizeof(uint8_t); data2 = daemon_local.msg.databuffer; size2 = daemon_local.msg.datasize; ret = dlt_connection_send_multiple(&conn, data1, size1, data2, size2, 1); EXPECT_EQ(DLT_RETURN_OK, ret); close(receiver.fd); free(daemon_local.msg.databuffer); } TEST(t_dlt_connection_send_multiple, normal_2) { int ret = 0; void *data1 = nullptr; void *data2 = nullptr; int size1 = 0; int size2 = 0; DltConnection conn; DltReceiver receiver; DltDaemonLocal daemon_local; memset(&conn, 0, sizeof(DltConnection)); memset(&receiver, 0, sizeof(DltReceiver)); memset(&daemon_local, 0, sizeof(DltDaemonLocal)); data1 = daemon_local.msg.headerbuffer + sizeof(DltStorageHeader); size1 = daemon_local.msg.headersize - sizeof(DltStorageHeader); data2 = daemon_local.msg.databuffer; size2 = daemon_local.msg.datasize; receiver.fd = connectServer(); EXPECT_NE(-1, receiver.fd); conn.receiver = &receiver; conn.type = DLT_CONNECTION_CLIENT_MSG_TCP; daemon_local.msg.headersize = sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + sizeof(DltStandardHeaderExtra) + sizeof(DltExtendedHeader); memset(daemon_local.msg.headerbuffer, 0, daemon_local.msg.headersize); data1 = daemon_local.msg.headerbuffer + sizeof(DltStorageHeader); size1 = daemon_local.msg.headersize - sizeof(DltStorageHeader); daemon_local.msg.databuffer = (uint8_t *)malloc(sizeof(uint8_t)); if (daemon_local.msg.databuffer == NULL) close(receiver.fd); EXPECT_NE((uint8_t *)NULL, daemon_local.msg.databuffer); memset(daemon_local.msg.databuffer, 0, sizeof(uint8_t)); daemon_local.msg.datasize = sizeof(uint8_t); data2 = daemon_local.msg.databuffer; size2 = daemon_local.msg.datasize; ret = dlt_connection_send_multiple(&conn, data1, size1, data2, size2, 0); EXPECT_EQ(DLT_RETURN_OK, ret); close(receiver.fd); free(daemon_local.msg.databuffer); } TEST(t_dlt_connection_send_multiple, nullpointer) { int ret = 0; void *data1 = nullptr; void *data2 = nullptr; int size1 = 0; int size2 = 0; DltDaemonLocal daemon_local; memset(&daemon_local, 0, sizeof(DltDaemonLocal)); data1 = daemon_local.msg.headerbuffer + sizeof(DltStorageHeader); size1 = daemon_local.msg.headersize - sizeof(DltStorageHeader); data2 = daemon_local.msg.databuffer; size2 = daemon_local.msg.datasize; ret = dlt_connection_send_multiple(NULL, data1, size1, data2, size2, 0); EXPECT_EQ(DLT_RETURN_ERROR, ret); } int connectServer(void) { int sockfd = 0, portno = 0; struct sockaddr_in serv_addr; struct hostent *server = nullptr; portno = 8080; sockfd = socket(AF_INET, SOCK_STREAM, 0); server = gethostbyname("127.0.0.1"); memset((char *)&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; memcpy((char *)&serv_addr.sin_addr.s_addr, (char *)server->h_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { printf("Error: %s (%d) occured in connect socket\n", strerror(errno), errno); close(sockfd); return -1; } return sockfd; } #define GTEST_SOCKS_ACCEPTED 3 int main(int argc, char **argv) { pid_t cpid = fork(); if (cpid == -1) { printf("fork fail\n"); return -1; } if (cpid) { int i = GTEST_SOCKS_ACCEPTED; int j = 0, optval = 1; char buffer[256] = {}; int sockfd = 0, newsockfd[GTEST_SOCKS_ACCEPTED] = {}, portno = 0; socklen_t clilen = {}; struct sockaddr_in serv_addr, cli_addr; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { printf("Error in creating socket\n"); return -1; } memset((char *) &serv_addr, 0, sizeof(serv_addr)); memset((char *) &cli_addr, 0, sizeof(cli_addr)); portno = 8080; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) == -1) { perror("setsockopt"); close(sockfd); exit(1); } j = bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); if (j == -1) { perror("Bind Error\n"); close(sockfd); return -1; } listen(sockfd, 5); while (i) { clilen = sizeof(cli_addr); newsockfd[i - 1] = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen); if (newsockfd[i - 1] == -1) { printf("Error in accept"); return -1; } memset(buffer, 0, 256); (void)(read(newsockfd[i - 1], buffer, 255) + 1); /* just ignore result */ i--; } for (j = 0; j < GTEST_SOCKS_ACCEPTED; j++) close(newsockfd[i]); close(sockfd); } else { ::testing::InitGoogleTest(&argc, argv); ::testing::FLAGS_gtest_break_on_failure = false; /* ::testing::FLAGS_gtest_filter = "t_dlt_event_handler_register_connection*"; */ return RUN_ALL_TESTS(); } return 0; } dlt-daemon-2.18.6/tests/gtest_dlt_daemon_gateway.cpp000066400000000000000000000576061377520261000225600ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2016 Advanced Driver Information Technology. * This code is developed by Advanced Driver Information Technology. * Copyright of Advanced Driver Information Technology, Bosch and DENSO. * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Onkar Palkar onkar.palkar@wipro.com * * \copyright Copyright Š 2015 Advanced Driver Information Technology. * * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file gtest_dlt_daemon_gateway.cpp */ /******************************************************************************* ** ** ** SRC-MODULE: gtest_dlt_daemon_gateway.cpp ** ** ** ** TARGET : linux ** ** ** ** PROJECT : DLT ** ** ** ** AUTHOR : Onkar Palkar onkar.palkar@wipro.com ** ** PURPOSE : Unit test for dlt_gateway.c ** ** ** ** REMARKS : ** ** ** ** PLATFORM DEPENDANT [yes/no]: yes ** ** ** ** TO BE CHANGED BY USER [yes/no]: no ** ** ** *******************************************************************************/ /******************************************************************************* ** Author Identity ** ******************************************************************************** ** ** ** Initials Name Company ** ** -------- ------------------------- ---------------------------------- ** ** op Onkar Palkar Wipro ** *******************************************************************************/ #include #include #include extern "C" { #include "dlt_gateway.h" #include "dlt_gateway_internal.h" } /* Begin Method: dlt_gateway::t_dlt_gateway_init*/ TEST(t_dlt_gateway_init, normal) { DltDaemonLocal daemon_local; DltGatewayConnection connections; daemon_local.pGateway.connections = &connections; daemon_local.pGateway.num_connections = 1; daemon_local.flags.lflag = 0; DltConnection connections1; DltReceiver receiver; daemon_local.pEvent.connections = &connections1; daemon_local.pEvent.pfd = 0; daemon_local.pEvent.nfds = 0; daemon_local.pEvent.max_nfds = 0; daemon_local.pEvent.connections->receiver = &receiver; daemon_local.pEvent.connections->next = NULL; memset(daemon_local.flags.gatewayConfigFile, 0, DLT_DAEMON_FLAG_MAX); strncpy(daemon_local.flags.gatewayConfigFile, "/tmp/dlt_gateway.conf", DLT_DAEMON_FLAG_MAX - 1); EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_init(&daemon_local, 1)); dlt_gateway_deinit(&daemon_local.pGateway, 0); } TEST(t_dlt_gateway_init, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_init(NULL, 0)); } /* Begin Method: dlt_gateway::t_dlt_gateway_send_control_message*/ TEST(t_dlt_gateway_send_control_message, Normal) { int ret = 0; DltDaemonLocal daemon_local; DltGatewayConnection connections; DltConnection connections1; DltReceiver receiver1; daemon_local.pGateway.connections = &connections; daemon_local.pEvent.connections = &connections1; daemon_local.pEvent.connections->next = NULL; daemon_local.pEvent.pfd = 0; daemon_local.pEvent.nfds = 0; daemon_local.pEvent.max_nfds = 0; daemon_local.pEvent.connections->receiver = &receiver1; memset(daemon_local.flags.gatewayConfigFile, 0, DLT_DAEMON_FLAG_MAX); strncpy(daemon_local.flags.gatewayConfigFile, "/tmp/dlt_gateway.conf", DLT_DAEMON_FLAG_MAX - 1); ret = dlt_gateway_init(&daemon_local, 0); EXPECT_EQ(DLT_RETURN_OK, ret); dlt_gateway_send_control_message(daemon_local.pGateway.connections, daemon_local.pGateway.connections->p_control_msgs, NULL, 0); dlt_gateway_deinit(&daemon_local.pGateway, 0); } TEST(t_dlt_gateway_send_control_message, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_send_control_message(NULL, NULL, NULL, 0)); } /* Begin Method: dlt_gateway::t_dlt_gateway_store_connection*/ TEST(t_dlt_gateway_store_connection, normal) { char ip_address[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "10.113.100.100"; char ecuid[] = "1234"; DltGateway gateway; DltGatewayConnection tmp; DltGatewayConnection tmp1; gateway.num_connections = 1; gateway.connections = &tmp1; gateway.connections->status = DLT_GATEWAY_UNINITIALIZED; tmp.ip_address = ip_address; tmp.ecuid = ecuid; tmp.sock_domain = 1; tmp.sock_type = 2; tmp.sock_protocol = 1; tmp.port = 1; tmp.trigger = DLT_GATEWAY_ON_STARTUP; tmp.timeout = 500; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_store_connection(&gateway, &tmp, 0)); EXPECT_EQ(gateway.connections->sock_domain, tmp.sock_domain); EXPECT_EQ(gateway.connections->sock_type, tmp.sock_type); EXPECT_EQ(gateway.connections->port, tmp.port); } TEST(t_dlt_gateway_store_connection, nullpointer) { DltGateway gateway; EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_store_connection(NULL, NULL, 0)); EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_store_connection(&gateway, NULL, 0)); } /* Begin Method: dlt_gateway::t_dlt_gateway_check_ip*/ TEST(t_dlt_gateway_check_ip, normal) { DltGatewayConnection tmp; DltGatewayConnection *con; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "10.113.100.100"; con = &tmp; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_check_ip(con, value)); } TEST(t_dlt_gateway_check_ip, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_check_ip(NULL, NULL)); } /* Begin Method: dlt_gateway::t_dlt_gateway_check_send_serial*/ TEST(t_dlt_gateway_check_send_serial, normal) { DltGatewayConnection tmp; DltGatewayConnection *con; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "134dltgatway"; con = &tmp; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_check_send_serial(con, value)); } TEST(t_dlt_gateway_check_send_serial, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_check_send_serial(NULL, NULL)); } /* Begin Method: dlt_gateway::t_dlt_gateway_allocate_control_messages*/ TEST(t_dlt_gateway_allocate_control_messages, normal) { DltGatewayConnection tmp; DltGatewayConnection *con; tmp.p_control_msgs = NULL; con = &tmp; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_allocate_control_messages(con)); } TEST(t_dlt_gateway_allocate_control_messages, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_allocate_control_messages(NULL)); } /* Begin Method: dlt_gateway::t_dlt_gateway_check_control_messages*/ TEST(t_dlt_gateway_check_control_messages, normal) { DltGatewayConnection tmp; DltGatewayConnection *con; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "1,2,3,4,5"; tmp.p_control_msgs = NULL; con = &tmp; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_check_control_messages(con, value)); } TEST(t_dlt_gateway_check_control_messages, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_check_control_messages(NULL, NULL)); } /* Begin Method: dlt_gateway::t_dlt_gateway_check_periodic_control_messages*/ TEST(t_dlt_gateway_check_periodic_control_messages, normal) { DltGatewayConnection tmp; DltGatewayConnection *con; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "1:5,2:10"; tmp.p_control_msgs = NULL; con = &tmp; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_check_periodic_control_messages(con, value)); } TEST(t_dlt_gateway_check_periodic_control_messages, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_check_periodic_control_messages(NULL, NULL)); } /* Begin Method: dlt_gateway::t_dlt_gateway_check_port*/ TEST(t_dlt_gateway_check_port, normal) { DltGatewayConnection tmp; DltGatewayConnection *con; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "3490"; con = &tmp; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_check_port(con, value)); } TEST(t_dlt_gateway_check_port, abnormal) { DltGatewayConnection tmp; DltGatewayConnection *con; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "9999999999"; con = &tmp; EXPECT_EQ(DLT_RETURN_ERROR, dlt_gateway_check_port(con, value)); } TEST(t_dlt_gateway_check_port, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_check_port(NULL, NULL)); } /* Begin Method: dlt_gateway::t_dlt_gateway_check_ecu*/ TEST(t_dlt_gateway_check_ecu, normal) { DltGatewayConnection tmp; DltGatewayConnection *con; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "ECU2"; con = &tmp; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_check_ecu(con, value)); } TEST(t_dlt_gateway_check_ecu, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_check_ecu(NULL, NULL)); } /* Begin Method: dlt_gateway::t_dlt_gateway_check_connect_trigger*/ TEST(t_dlt_gateway_check_connect_trigger, normal) { DltGatewayConnection tmp; DltGatewayConnection *con; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "OnStartup"; con = &tmp; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_check_connect_trigger(con, value)); } TEST(t_dlt_gateway_check_connect_trigger, abnormal) { DltGatewayConnection tmp; DltGatewayConnection *con; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "wrong_parameter"; con = &tmp; EXPECT_EQ(DLT_RETURN_ERROR, dlt_gateway_check_connect_trigger(con, value)); } TEST(t_dlt_gateway_check_connect_trigger, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_check_connect_trigger(NULL, NULL)); } /* Begin Method: dlt_gateway::t_dlt_gateway_check_timeout*/ TEST(t_dlt_gateway_check_timeout, normal) { DltGatewayConnection tmp; DltGatewayConnection *con; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "10"; con = &tmp; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_check_timeout(con, value)); } TEST(t_dlt_gateway_check_timeout, abnormal) { DltGatewayConnection tmp; DltGatewayConnection *con; char value[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "-1"; con = &tmp; EXPECT_EQ(DLT_RETURN_ERROR, dlt_gateway_check_timeout(con, value)); } TEST(t_dlt_gateway_check_timeout, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_check_timeout(NULL, NULL)); } /* Begin Method: dlt_gateway::t_dlt_gateway_establish_connections*/ TEST(t_dlt_gateway_establish_connections, normal) { char ip[] = "127.0.0.1"; int port = 3491; DltDaemonLocal daemon_local; DltGateway *gateway = &daemon_local.pGateway; DltGatewayConnection connections; gateway->num_connections = 1; gateway->connections = &connections; gateway->connections->status = DLT_GATEWAY_INITIALIZED; gateway->connections->trigger = DLT_GATEWAY_ON_STARTUP; gateway->connections->client.mode = DLT_CLIENT_MODE_TCP; gateway->connections->client.servIP = ip; gateway->connections->client.port = port; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_establish_connections(gateway, &daemon_local, 0)); } TEST(t_dlt_gateway_establish_connections, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_establish_connections(NULL, NULL, 0)); } /* Begin Method: dlt_gateway::t_dlt_gateway_get_connection_receiver*/ TEST(t_dlt_gateway_get_connection_receiver, normal) { DltReceiver *ret = NULL; DltGateway gateway; DltGatewayConnection connections; gateway.connections = &connections; int fd = 10; gateway.num_connections = 1; gateway.connections->client.sock = fd; gateway.connections->client.receiver.fd = 12; gateway.connections->status = DLT_GATEWAY_CONNECTED; ret = dlt_gateway_get_connection_receiver(&gateway, fd); EXPECT_EQ(12, ret->fd); } TEST(t_dlt_gateway_get_connection_receiver, abnormal) { DltReceiver *ret = NULL; DltGateway gateway; DltGatewayConnection connections; gateway.connections = &connections; int fd = 10; gateway.num_connections = 1; gateway.connections->client.sock = fd; gateway.connections->client.receiver.fd = 12; ret = dlt_gateway_get_connection_receiver(&gateway, fd); EXPECT_EQ(NULL, ret); } TEST(t_dlt_gateway_get_connection_receiver, nullpointer) { DltReceiver *ret; ret = dlt_gateway_get_connection_receiver(NULL, 0); EXPECT_EQ(NULL, ret); } /* Begin Method: dlt_gateway::t_dlt_gateway_parse_get_log_info*/ TEST(t_dlt_gateway_parse_get_log_info, normal) { int32_t len; int32_t ret = DLT_RETURN_ERROR; DltDaemon daemon; DltGateway gateway; DltMessage msg; char ecuid[] = "ECU2"; uint32_t sid = DLT_SERVICE_ID_GET_LOG_INFO; uint8_t status = 7; uint16_t count_app_ids = 1; uint16_t count_context_ids = 1; const char *apid = "LOG"; const char *ctid = "TEST"; const char *com = "remo"; char app_description[] = "Test Application for Logging"; char context_description[] = "Test Context for Logging"; uint16_t len_app = 0; uint16_t len_con = 0; int8_t log_level = -1; int8_t trace_status = -1; int offset = 0; memset(&daemon, 0, sizeof(DltDaemon)); dlt_set_id(daemon.ecuid, ecuid); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); ret = strncmp(daemon.ecuid, daemon.user_list[0].ecu, DLT_ID_SIZE); ASSERT_EQ(DLT_RETURN_OK, ret); /* create response message */ msg.datasize = sizeof(DltServiceGetLogInfoResponse) + sizeof(AppIDsType) + sizeof(ContextIDsInfoType) + strlen(app_description) + strlen(context_description); msg.databuffer = (uint8_t *)malloc(msg.datasize); msg.databuffersize = msg.datasize; memset(msg.databuffer, 0, msg.datasize); memcpy(msg.databuffer, &sid, sizeof(uint32_t)); offset += sizeof(uint32_t); memcpy(msg.databuffer + offset, &status, sizeof(int8_t)); offset += sizeof(int8_t); memcpy(msg.databuffer + offset, &count_app_ids, sizeof(uint16_t)); offset += sizeof(uint16_t); dlt_set_id((char *)(msg.databuffer + offset), apid); offset += sizeof(ID4); memcpy(msg.databuffer + offset, &count_context_ids, sizeof(uint16_t)); offset += sizeof(uint16_t); dlt_set_id((char *)(msg.databuffer + offset), ctid); offset += sizeof(ID4); memcpy(msg.databuffer + offset, &log_level, sizeof(int8_t)); offset += sizeof(int8_t); memcpy(msg.databuffer + offset, &trace_status, sizeof(int8_t)); offset += sizeof(int8_t); len_con = strlen(context_description); memcpy(msg.databuffer + offset, &len_con, sizeof(uint16_t)); offset += sizeof(uint16_t); memcpy(msg.databuffer + offset, context_description, strlen(context_description)); offset += strlen(context_description); len_app = strlen(app_description); memcpy(msg.databuffer + offset, &len_app, sizeof(uint16_t)); offset += sizeof(uint16_t); memcpy(msg.databuffer + offset, app_description, strlen(app_description)); offset += strlen(app_description); dlt_set_id((char *)(msg.databuffer + offset), com); msg.storageheader = (DltStorageHeader *)msg.headerbuffer; dlt_set_storageheader(msg.storageheader, ""); msg.standardheader = (DltStandardHeader *)(msg.headerbuffer + sizeof(DltStorageHeader)); msg.standardheader->htyp = DLT_HTYP_WEID | DLT_HTYP_WTMS | DLT_HTYP_UEH | DLT_HTYP_PROTOCOL_VERSION1; msg.standardheader->mcnt = 0; dlt_set_id(msg.headerextra.ecu, ecuid); msg.headerextra.tmsp = dlt_uptime(); dlt_message_set_extraparameters(&msg, 0); msg.extendedheader = (DltExtendedHeader *)(msg.headerbuffer + sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg.standardheader->htyp)); msg.extendedheader->msin = DLT_MSIN_CONTROL_RESPONSE; msg.extendedheader->noar = 1; dlt_set_id(msg.extendedheader->apid, ""); dlt_set_id(msg.extendedheader->ctid, ""); msg.headersize = sizeof(DltStorageHeader) + sizeof(DltStandardHeader) + sizeof(DltExtendedHeader) + DLT_STANDARD_HEADER_EXTRA_SIZE(msg.standardheader->htyp); len = msg.headersize - sizeof(DltStorageHeader) + msg.datasize; msg.standardheader->len = DLT_HTOBE_16(len); EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_parse_get_log_info(&daemon, ecuid, &msg, CONTROL_MESSAGE_NOT_REQUESTED, 0)); } TEST(t_dlt_gateway_parse_get_log_info, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_parse_get_log_info(NULL, NULL, NULL, 0, 0)); } /* Begin Method: dlt_gateway::t_dlt_gateway_process_passive_node_messages*/ TEST(t_dlt_gateway_process_passive_node_messages, normal) { DltDaemon daemon; DltDaemonLocal daemon_local; DltReceiver receiver; DltGatewayConnection connections; memset(&daemon, 0, sizeof(DltDaemon)); memset(&daemon_local, 0, sizeof(DltDaemonLocal)); memset(&receiver, 0, sizeof(DltReceiver)); memset(&connections, 0, sizeof(DltGatewayConnection)); daemon_local.pGateway.connections = &connections; daemon_local.pGateway.num_connections = 1; daemon_local.pGateway.connections->status = DLT_GATEWAY_CONNECTED; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_process_passive_node_messages(&daemon, &daemon_local, &receiver, 1)); } TEST(t_dlt_gateway_process_passive_node_messages, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_process_passive_node_messages(NULL, NULL, NULL, 0)); } /* Begin Method: dlt_gateway::t_dlt_gateway_process_gateway_timer*/ TEST(t_dlt_gateway_process_gateway_timer, normal) { char ECUVersionString[] = "12.34"; char ip[] = "127.0.0.1"; int port = 3491; DltDaemon daemon; DltDaemonLocal daemon_local; DltReceiver receiver; DltGatewayConnection connections; DltConnection connections1; daemon_local.pGateway.connections = &connections; daemon_local.pGateway.num_connections = 1; DltLogStorage storage_handle; daemon_local.pGateway.connections->status = DLT_GATEWAY_INITIALIZED; daemon_local.pGateway.connections->trigger = DLT_GATEWAY_ON_STARTUP; daemon_local.pGateway.connections->client.mode = DLT_CLIENT_MODE_TCP; daemon_local.pGateway.connections->client.servIP = ip; daemon_local.pGateway.connections->client.port = port; daemon_local.pEvent.connections = &connections1; daemon_local.pEvent.connections->receiver = &receiver; daemon.ECUVersionString = ECUVersionString; daemon.storage_handle = &storage_handle; daemon_local.pEvent.connections->receiver->fd = -1; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_process_gateway_timer(&daemon, &daemon_local, daemon_local.pEvent.connections->receiver, 1)); } TEST(t_dlt_gateway_process_gateway_timer, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_process_gateway_timer(NULL, NULL, NULL, 0)); } /* Begin Method: dlt_gateway::t_dlt_gateway_process_on_demand_request*/ TEST(t_dlt_gateway_process_on_demand_request, normal) { char node_id[DLT_ID_SIZE] = "123"; uint32_t connection_status = 1; DltDaemonLocal daemon_local; DltGatewayConnection connections; daemon_local.pGateway.connections = &connections; daemon_local.pGateway.num_connections = 1; connections.status = DLT_GATEWAY_CONNECTED; connections.trigger = DLT_GATEWAY_ON_STARTUP; connections.ecuid = node_id; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_process_on_demand_request(&daemon_local.pGateway, &daemon_local, node_id, connection_status, 1)); } TEST(t_dlt_gateway_process_on_demand_request, abnormal) { char node_id[DLT_ID_SIZE] = "123"; uint32_t connection_status = 1; DltDaemonLocal daemon_local; DltGatewayConnection connections; daemon_local.pGateway.connections = &connections; daemon_local.pGateway.num_connections = 1; connections.status = DLT_GATEWAY_INITIALIZED; connections.ecuid = node_id; EXPECT_EQ(DLT_RETURN_ERROR, dlt_gateway_process_on_demand_request(&daemon_local.pGateway, &daemon_local, node_id, connection_status, 0)); } TEST(t_dlt_gateway_process_on_demand_request, nullpointer) { char node_id[DLT_ID_SIZE] = "123"; EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_process_on_demand_request(NULL, NULL, node_id, 1, 0)); } /* Begin Method: dlt_gateway::t_dlt_gateway_check_param*/ TEST(t_dlt_gateway_check_param, normal) { char value_1[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "10.11.22.33"; char value_2[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "3490"; DltGateway gateway; DltGatewayConnection tmp; gateway.connections = &tmp; EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_check_param(&gateway, &tmp, GW_CONF_IP_ADDRESS, value_1)); EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_check_param(&gateway, &tmp, GW_CONF_PORT, value_2)); } TEST(t_dlt_gateway_check_param, abnormal) { char value_1[DLT_CONFIG_FILE_ENTRY_MAX_LEN] = "10.11.22.33"; DltGateway gateway; DltGatewayConnection tmp; gateway.connections = &tmp; EXPECT_EQ(DLT_RETURN_ERROR, dlt_gateway_check_param(&gateway, &tmp, GW_CONF_PORT, value_1)); } TEST(t_dlt_gateway_check_param, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_check_param(NULL, NULL, GW_CONF_PORT, 0)); } /* Begin Method: dlt_gateway::t_dlt_gateway_configure*/ TEST(t_dlt_gateway_configure, Normal) { DltGateway gateway; DltGatewayConnection tmp; gateway.connections = &tmp; gateway.num_connections = 1; char gatewayConfigFile[DLT_DAEMON_FLAG_MAX]; strncpy(gatewayConfigFile, "/tmp/dlt_gateway.conf", DLT_DAEMON_FLAG_MAX - 1); EXPECT_EQ(DLT_RETURN_OK, dlt_gateway_configure(&gateway, gatewayConfigFile, 0)); } TEST(t_dlt_gateway_configure, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_gateway_configure(NULL, NULL, 0)); } int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); /* ::testing::FLAGS_gtest_break_on_failure = true; */ /* ::testing::FLAGS_gtest_filter = "t_dlt_gateway_process_passive_node_messages*"; */ return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/tests/gtest_dlt_daemon_gateway.sh000077500000000000000000000143741377520261000224060ustar00rootroot00000000000000#!/bin/sh ################################################################################ # SPDX license identifier: MPL-2.0 # # Copyright (C) 2016, Advanced Driver Information Technology # This code is developed by Advanced Driver Information Technology. # Copyright of Advanced Driver Information Technology, Bosch and DENSO. # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ################################################################################ ################################################################################ #file : g_test_dlt_daemon_gateway.sh # #Description : gateway unit test preparation # #Author Name : Onkar Palkar # Jeevan Ramakant Nagvekar #Email Id : onkar.palkar@wipro.com # jeevan.nagvekar1@wipro.com # #History : Last modified date : 31/07/2018 ipaddr=127.0.0.1 ################################################################################ # Function: -getOSname() # # Description -Retrieves OS name # getOSname() { OS="`uname`" } ################################################################################ # # Function: -cleanup() # # Description -Delete the dlt_test folder if it already present # -Check weather required binaries are avaiable or not # -Restore dlt_gateway.conf file # # Return -Zero on success # -Non zero on failure # cleanup() { tmpPath=/tmp if [ "$OS" = "QNX" ] then PIDOF() { slay -p $1 > /dev/null if [ $? -eq '0' ] then return 1 else return 0 fi } KILLALL() { slay -9 -f $1 > /dev/null if [ $? -eq '0' ] then return 1 else return 0 fi } else PIDOF() { pidof $1 > /dev/null return $? } KILLALL() { killall $1 > /dev/null return $? } fi cd $tmpPath PIDOF dlt-daemon if [ $? -eq '0' ] then KILLALL dlt-daemon if [ $? -eq '1' ] then echo "Failed to kill daemons" return 1 fi fi rm -f $tmpPath/dlt.conf rm -f $tmpPath/dlt_gateway.conf rm -f /dev/shm/dlt-shm rm -f /dev/shm/sem.dlt-shm rm -f /dev/shm/dlt-shm-passive rm -f /dev/shm/sem.dlt-shm-passive return 0 } # # Function: -setupTest() # # Description -Create gateway folder # -Create and add dlt.conf and dlt_gateway.conf file in the gateway folder # # Return -Zero on success # -Non zero on failure # setupTest() { which dlt-daemon > /dev/null if [ $? -eq '1' ] then echo "dlt-daemon is not available" return 1 fi touch $tmpPath/dlt.conf if [ $? -eq '1' ] then echo "Error in creating dlt.conf file" return 1 fi echo "SendContextRegistration = 1" >>$tmpPath/dlt.conf echo "ECUId = ECU2" >>$tmpPath/dlt.conf echo "GatewayMode = 1" >>$tmpPath/dlt.conf echo "SharedMemorySize = 100000" >>$tmpPath/dlt.conf echo "LoggingMode = 0" >>$tmpPath/dlt.conf echo "LoggingLevel = 6" >>$tmpPath/dlt.conf echo "LoggingFilename = /tmp/dlt.log" >>$tmpPath/dlt.conf echo "TimeOutOnSend = 4" >>$tmpPath/dlt.conf echo "RingbufferMinSize = 500000" >>$tmpPath/dlt.conf echo "RingbufferMaxSize = 10000000" >>$tmpPath/dlt.conf echo "RingbufferStepSize = 500000" >>$tmpPath/dlt.conf echo "ControlSocketPath = /tmp/dlt-ctrl.sock" >>$tmpPath/dlt.conf echo "GatewayConfigFile = /tmp/dlt_gateway.conf" >>$tmpPath/dlt.conf touch $tmpPath/dlt_gateway.conf if [ $? -eq '1' ] then echo "Error in creating dlt_gateway file" return 1 fi if [ $# -eq 1 ] && [ "$1" = "1" ] then echo "[General]" >>$tmpPath/dlt_gateway.conf echo "Interval=1">>$tmpPath/dlt_gateway.conf fi echo "[PassiveNode1]" >>$tmpPath/dlt_gateway.conf echo "IPaddress=$ipaddr">>$tmpPath/dlt_gateway.conf echo "Port=3490" >>$tmpPath/dlt_gateway.conf echo "EcuID=ECU1" >>$tmpPath/dlt_gateway.conf echo "Connect=OnStartup" >>$tmpPath/dlt_gateway.conf echo "Timeout=10" >>$tmpPath/dlt_gateway.conf echo "SendControl=0x03,0x13" >>$tmpPath/dlt_gateway.conf echo "SendSerialHeader=0" >>$tmpPath/dlt_gateway.conf echo "NOFiles=1" >>$tmpPath/dlt_gateway.conf return 0 } # # Function: -startDaemons() # # Description -Start dlt-daemon as passive node # -Start dlt-daemon as gateway node # # Return -Zero on success # -Non zero on failure # startDaemons() { DLT_PASSIVE_SHM_NAME="" tmpPath=/tmp dlt-daemon -d sleep 1 # Check if the dlt shm file exist (DLT_SHM_ENABLE=ON) if [ -f /dev/shm/dlt-shm ]; then DLT_PASSIVE_SHM_NAME="-s dlt-shm-passive" fi dlt-daemon -d -p 3495 -c $tmpPath/dlt.conf $DLT_PASSIVE_SHM_NAME return 0 } # # Function: -checkDaemonStart # # Description -Check if dlt-daemon instances started successfully # checkDaemonStart() { if [ "$OS" = "QNX" ]; then slay -p dlt-daemon > /dev/null total=$? else total=`pgrep -c dlt-daemon` fi if [ $total -ne '2' ]; then echo "Initialization of dlt-daemon instances failed" exit fi } help() { echo "Usage: " echo "sh ./gtest_dlt_daemon_gateway.sh" } executeTests() { echo "Execute: gtest_dlt_daemon_gateway unit test" } #main function ######################################################################################## getOSname echo "Cleaning up dlt-daemon instances" cleanup if [ $? -ne '0' ] then help exit fi echo "Initializing test" if [ $# -eq 1 ] && [ "$1" = "-w" ] then echo "Including General section in dlt_gateway.conf" setupTest 1 else setupTest fi if [ $? -ne '0' ] then help exit fi echo "Restarting dlt-daemons" startDaemons checkDaemonStart executeTests dlt-daemon-2.18.6/tests/gtest_dlt_daemon_logstorage.sh000077500000000000000000000030101377520261000230740ustar00rootroot00000000000000#!/bin/sh ######################################################################################## #file : g_test_dlt_daemon_logstorage.sh # #Description : logstorage unit test preparation # #Author Name : Onkar Palkar #Email Id : onkar.palkar@wipro.com # #History : Last modified date : 02/09/2016 ######################################################################################## # # Function: -cleanup() # # Description -Delete dlt_logstorage.conf file from tmp folder if present # # Return -Zero on success # -Non zero on failure # cleanup() { tmpPath=/tmp cd $tmpPath rm -rf $tmpPath/dlt_logstorage.conf return 0 } # # Function: -setupTest() # # Description -create logstorage.conf file # # Return -Zero on success # -Non zero on failure # setupTest() { touch $tmpPath/dlt_logstorage.conf if [ $? -eq '1' ] then echo "Error in creating dlt_logstorage.conf file" return 1 fi echo "[FILTER1]" >>$tmpPath/dlt_logstorage.conf echo "LogAppName=DLST" >>$tmpPath/dlt_logstorage.conf echo "ContextName=.*" >>$tmpPath/dlt_logstorage.conf echo "LogLevel=DLT_LOG_ERROR" >>$tmpPath/dlt_logstorage.conf echo "File=Test" >>$tmpPath/dlt_logstorage.conf echo "FileSize=1000000" >>$tmpPath/dlt_logstorage.conf echo "NOFiles=1" >>$tmpPath/dlt_logstorage.conf return 0 } #main function ######################################################################################## cleanup setupTest dlt-daemon-2.18.6/tests/gtest_dlt_daemon_offline_log.cpp000066400000000000000000001762001377520261000233720ustar00rootroot00000000000000/*! * file gtest_dlt_daemon_logstorage.cpp * * Descriptiom : Unit test for dlt_logstorage.c * * Author : Onkar Palkar * * Email : onkar.palkar@wipro.com * * History : 30-Jun-2016 */ #include int connectServer(void); extern "C" { #include "dlt_offline_logstorage.h" #include "dlt_offline_logstorage_internal.h" #include "dlt_offline_logstorage_behavior.h" #include "dlt_offline_logstorage_behavior_internal.h" #include "dlt_daemon_offline_logstorage.h" #include "dlt_daemon_offline_logstorage_internal.h" #include "dlt_daemon_common_cfg.h" #include #include #include #include #include } unsigned int g_logstorage_cache_max; /* Begin Method: dlt_logstorage::t_dlt_logstorage_list_add*/ TEST(t_dlt_logstorage_list_add, normal) { DltLogStorageFilterList *list = NULL; DltLogStorageFilterConfig *data = NULL; DltLogStorageUserConfig file_config; char *path = (char*)"/tmp"; char key = 1; int num_keys = 1; data = (DltLogStorageFilterConfig *)calloc(1, sizeof(DltLogStorageFilterConfig)); if (data != NULL) { dlt_logstorage_filter_set_strategy(data, DLT_LOGSTORAGE_SYNC_ON_MSG); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(&key, num_keys, data, &list)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_destroy(&list, &file_config, path, 0)); } } /* Begin Method: dlt_logstorage::t_dlt_logstorage_list_add_config*/ TEST(t_dlt_logstorage_list_add_config, normal) { DltLogStorageFilterConfig *data = NULL; DltLogStorageFilterConfig *listdata = NULL; data = (DltLogStorageFilterConfig *)calloc(1, sizeof(DltLogStorageFilterConfig)); listdata = (DltLogStorageFilterConfig *)calloc(1, sizeof(DltLogStorageFilterConfig)); if ((data != NULL) && (listdata != NULL)) { dlt_logstorage_list_add_config(data, &listdata); free(data); free(listdata); } } /* Begin Method: dlt_logstorage::t_dlt_logstorage_list_destroy*/ TEST(t_dlt_logstorage_list_destroy, normal) { DltLogStorageFilterList *list = NULL; DltLogStorageFilterConfig *data = NULL; DltLogStorageUserConfig file_config; char *path = (char*)"/tmp"; char key = 1; int num_keys = 1; data = (DltLogStorageFilterConfig *)calloc(1, sizeof(DltLogStorageFilterConfig)); if (data != NULL) { dlt_logstorage_filter_set_strategy(data, DLT_LOGSTORAGE_SYNC_ON_MSG); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(&key, num_keys, data, &list)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_destroy(&list, &file_config, path, 0)); } } /* Begin Method: dlt_logstorage::t_dlt_logstorage_list_find*/ TEST(t_dlt_logstorage_list_find, normal) { DltLogStorageFilterList *list = NULL; DltLogStorageFilterConfig *data = NULL; int num_configs = 0; DltLogStorageUserConfig file_config; char *path = (char*)"/tmp"; char key[] = ":1234:5678"; char apid[] = "1234"; char ctid[] = "5678"; int num_keys = 1; DltLogStorageFilterConfig *config[DLT_CONFIG_FILE_SECTIONS_MAX] = { 0 }; data = (DltLogStorageFilterConfig *)calloc(1, sizeof(DltLogStorageFilterConfig)); if (data != NULL) { data->apids = strdup(apid); data->ctids = strdup(ctid); dlt_logstorage_filter_set_strategy(data, DLT_LOGSTORAGE_SYNC_ON_MSG); ASSERT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key, num_keys, data, &list)); num_configs = dlt_logstorage_list_find(key, &list, config); ASSERT_EQ(1, num_configs); ASSERT_NE((DltLogStorageFilterConfig *)NULL, config[0]); EXPECT_STREQ(apid, config[0]->apids); EXPECT_STREQ(ctid, config[0]->ctids); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_destroy(&list, &file_config, path, 0)); } } /* Begin Method: dlt_logstorage::t_dlt_logstorage_free*/ TEST(t_dlt_logstorage_free, normal) { char key = 1; DltLogStorage handle; DltLogStorageFilterConfig *data = NULL; int reason = 0; handle.num_configs = 0; handle.config_list = NULL; int num_keys = 1; data = (DltLogStorageFilterConfig *)calloc(1, sizeof(DltLogStorageFilterConfig)); if (data != NULL) { dlt_logstorage_filter_set_strategy(data, DLT_LOGSTORAGE_SYNC_ON_MSG); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(&key, num_keys, data, &handle.config_list)); dlt_logstorage_free(&handle, reason); } } /* Begin Method: dlt_logstorage::t_dlt_logstorage_count_ids*/ TEST(t_dlt_logstorage_count_ids, normal) { char const *str = "a,b,c,d"; EXPECT_EQ(4, dlt_logstorage_count_ids(str)); } TEST(t_dlt_logstorage_count_ids, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_count_ids(NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_read_number*/ TEST(t_dlt_logstorage_read_number, normal) { char str[] = "100"; unsigned int number; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_read_number(&number, str)); EXPECT_EQ(100, number); } TEST(t_dlt_logstorage_read_number, null) { unsigned int number; EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_read_number(&number, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_create_keys*/ TEST(t_dlt_logstorage_create_keys, normal) { DltLogStorageFilterConfig data; char *keys = NULL; int num_keys = 0; char apids[] = "1234"; char ctids[] = "5678"; char ecuid[] = "ECU1"; data.apids = apids; data.ctids = ctids; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_create_keys(data.apids, data.ctids, ecuid, &keys, &num_keys)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_prepare_table*/ TEST(t_dlt_logstorage_prepare_table, normal) { DltLogStorage handle; DltLogStorageFilterConfig data; DltLogStorageUserConfig file_config; char *path = (char*)"/tmp"; memset(&handle, 0, sizeof(DltLogStorage)); memset(&data, 0, sizeof(DltLogStorageFilterConfig)); char apids[] = "1234"; char ctids[] = "5678"; data.apids = apids; data.ctids = ctids; data.records = NULL; data.log = NULL; data.cache = NULL; dlt_logstorage_filter_set_strategy(&data, DLT_LOGSTORAGE_SYNC_ON_MSG); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_prepare_table(&handle, &data)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_destroy(&handle.config_list, &file_config, path, 0)); } TEST(t_dlt_logstorage_prepare_table, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_prepare_table(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_validate_filter_name*/ TEST(t_dlt_logstorage_validate_filter_name, normal) { char name[] = "FILTER100"; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_validate_filter_name(name)); } TEST(t_dlt_logstorage_validate_filter_name, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_validate_filter_name(NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_filter_set_strategy*/ TEST(t_dlt_logstorage_filter_set_strategy, normal) { DltLogStorageFilterConfig config; dlt_logstorage_filter_set_strategy(&config, DLT_LOGSTORAGE_SYNC_ON_MSG); EXPECT_EQ(&dlt_logstorage_prepare_on_msg, config.dlt_logstorage_prepare); dlt_logstorage_filter_set_strategy(&config, 2); EXPECT_EQ(&dlt_logstorage_prepare_msg_cache, config.dlt_logstorage_prepare); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_read_list_of_names*/ TEST(t_dlt_logstorage_read_list_of_names, normal) { char *namesPtr = NULL; char value[] = "a,b,c,d"; namesPtr = (char *)calloc (1, sizeof(char)); if (namesPtr != NULL) { EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_read_list_of_names(&namesPtr, value)); free(namesPtr); } } TEST(t_dlt_logstorage_read_list_of_names, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_read_list_of_names(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_check_apids*/ TEST(t_dlt_logstorage_check_apids, normal) { char value[] = "a,b,c,d"; DltLogStorageFilterConfig config; config.apids = (char *)calloc (1, sizeof(char)); if (config.apids != NULL) { EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_check_apids(&config, value)); free(config.apids); } } TEST(t_dlt_logstorage_check_apids, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_check_apids(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_check_ctids*/ TEST(t_dlt_logstorage_check_ctids, normal) { char value[] = "a,b,c,d"; DltLogStorageFilterConfig config; config.ctids = (char *)calloc (1, sizeof(char)); if (config.ctids != NULL) { EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_check_ctids(&config, value)); free(config.ctids); } } TEST(t_dlt_logstorage_check_ctids, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_check_ctids(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_check_loglevel*/ TEST(t_dlt_logstorage_check_loglevel, normal) { char value[] = "DLT_LOG_FATAL"; DltLogStorageFilterConfig config; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_check_loglevel(&config, value)); EXPECT_EQ(1, config.log_level); } TEST(t_dlt_logstorage_check_loglevel, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_check_loglevel(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_check_filename*/ TEST(t_dlt_logstorage_check_filename, normal) { char value[] = "file_name"; DltLogStorageFilterConfig config; config.file_name = (char *)calloc (1, sizeof(char)); if (config.file_name != NULL) { EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_check_filename(&config, value)); free(config.file_name); } } TEST(t_dlt_logstorage_check_filename, abnormal) { char value[] = "../file_name"; DltLogStorageFilterConfig config; config.file_name = (char *)calloc (1, sizeof(char)); if (config.file_name != NULL) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_check_filename(&config, value)); free(config.file_name); } } TEST(t_dlt_logstorage_check_filename, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_check_filename(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_check_filesize*/ TEST(t_dlt_logstorage_check_filesize, normal) { char value[] = "100"; DltLogStorageFilterConfig config; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_check_filesize(&config, value)); EXPECT_EQ(100, config.file_size); } TEST(t_dlt_logstorage_check_filesize, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_check_filesize(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_check_nofiles*/ TEST(t_dlt_logstorage_check_nofiles, normal) { char value[] = "100"; DltLogStorageFilterConfig config; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_check_nofiles(&config, value)); EXPECT_EQ(100, config.num_files); } TEST(t_dlt_logstorage_check_nofiles, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_check_nofiles(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_check_sync_strategy*/ TEST(t_dlt_logstorage_check_sync_strategy, normal) { char value[] = "ON_MSG"; DltLogStorageFilterConfig config; config.sync = 0; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_check_sync_strategy(&config, value)); EXPECT_EQ(DLT_LOGSTORAGE_SYNC_ON_MSG, config.sync); } TEST(t_dlt_logstorage_check_sync_strategy, abnormal) { char value[] = "UNKNOWN"; DltLogStorageFilterConfig config; config.sync = 0; EXPECT_EQ(DLT_RETURN_TRUE, dlt_logstorage_check_sync_strategy(&config, value)); EXPECT_EQ(DLT_LOGSTORAGE_SYNC_ON_MSG, config.sync); } TEST(t_dlt_logstorage_check_sync_strategy, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_check_sync_strategy(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_check_ecuid*/ TEST(t_dlt_logstorage_check_ecuid, normal) { char value[] = "213"; DltLogStorageFilterConfig config; config.ecuid = (char *)calloc (1, sizeof(char)); if (config.ecuid != NULL) { EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_check_ecuid(&config, value)); EXPECT_EQ('2', *config.ecuid); EXPECT_EQ('1', *(config.ecuid + 1)); EXPECT_EQ('3', *(config.ecuid + 2)); free(config.ecuid); } } TEST(t_dlt_logstorage_check_ecuid, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_check_ecuid(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_check_param*/ TEST(t_dlt_logstorage_check_param, normal) { char value[] = "100"; DltLogStorageFilterConfig config; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_check_param(&config, DLT_LOGSTORAGE_FILTER_CONF_FILESIZE, value)); EXPECT_EQ(100, config.file_size); } TEST(t_dlt_logstorage_check_param, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_check_param(NULL, DLT_LOGSTORAGE_FILTER_CONF_FILESIZE, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_store_filters*/ TEST(t_dlt_logstorage_store_filters, normal) { DltLogStorage handle; DltLogStorageUserConfig file_config; char *path = (char*)"/tmp"; char config_file_name[] = "/tmp/dlt_logstorage.conf"; handle.connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED; handle.config_status = 0; handle.write_errors = 0; handle.config_list = NULL; handle.newest_file_list = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_store_filters(&handle, config_file_name)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_destroy(&handle.config_list, &file_config, path, 0)); } TEST(t_dlt_logstorage_store_filters, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_store_filters(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_load_config*/ TEST(t_dlt_logstorage_load_config, normal) { DltLogStorage handle; DltLogStorageUserConfig file_config; char *path = (char*)"/tmp"; handle.connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED; handle.config_status = 0; handle.write_errors = 0; handle.config_list = NULL; handle.newest_file_list = NULL; strncpy(handle.device_mount_point, "/tmp", DLT_MOUNT_PATH_MAX); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_load_config(&handle)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_destroy(&handle.config_list, &file_config, path, 0)); } TEST(t_dlt_logstorage_load_config, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_load_config(NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_device_connected*/ TEST(t_dlt_logstorage_device_connected, normal) { DltLogStorage handle; handle.connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_DISCONNECTED; handle.config_status = 0; handle.write_errors = 0; handle.config_list = NULL; handle.newest_file_list = NULL; strncpy(handle.device_mount_point, "/tmp", DLT_MOUNT_PATH_MAX); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_device_connected(&handle, handle.device_mount_point)); } TEST(t_dlt_logstorage_device_connected, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_device_connected(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_device_disconnected*/ TEST(t_dlt_logstorage_device_disconnected, normal) { DltLogStorage handle; int reason = 0; handle.config_status = 0; handle.newest_file_list = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_device_disconnected(&handle, reason)); } TEST(t_dlt_logstorage_device_disconnected, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_device_disconnected(NULL, 1)); } TEST(t_dlt_logstorage_get_loglevel_by_key, normal) { char arr[] = "abc"; char *key = arr; DltLogStorageFilterConfig *config = NULL; DltLogStorage handle; handle.config_status = 0; handle.connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED; handle.config_status = DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE; handle.config_list = NULL; handle.newest_file_list = NULL; int num_keys = 1; config = (DltLogStorageFilterConfig *)calloc(1, sizeof(DltLogStorageFilterConfig)); if (config != NULL) { config->log_level = DLT_LOG_ERROR; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key, num_keys, config, &(handle.config_list))); EXPECT_GE(DLT_LOG_ERROR, dlt_logstorage_get_loglevel_by_key(&handle, key)); free(config); } } TEST(t_dlt_logstorage_get_loglevel_by_key, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_get_loglevel_by_key(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_get_config*/ TEST(t_dlt_logstorage_get_config, normal) { char apid[] = "1234"; char ctid[] = "5678"; char ecuid[] = "12"; char file_name[] = "file_name"; int num_config = 0; DltLogStorageFilterConfig value; value.log_level = 0; value.apids = apid; value.ctids = ctid; value.ecuid = ecuid; value.file_name = file_name; char key0[] = ":1234:\000\000\000\000"; char key1[] = "::5678\000\000\000\000"; char key2[] = ":1234:5678"; DltLogStorageFilterConfig *config[3] = { 0 }; DltLogStorage handle; handle.connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED; handle.config_status = DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE; handle.config_list = NULL; int num_keys = 1; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key0, num_keys, &value, &(handle.config_list))); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key1, num_keys, &value, &(handle.config_list))); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key2, num_keys, &value, &(handle.config_list))); num_config = dlt_logstorage_get_config(&handle, config, apid, ctid, ecuid); EXPECT_EQ(num_config, 3); } TEST(t_dlt_logstorage_get_config, null) { int num = -1; num = dlt_logstorage_get_config(NULL, NULL, NULL, NULL, NULL); EXPECT_EQ(num, 0); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_filter*/ TEST(t_dlt_logstorage_filter, normal) { char apid[] = "1234"; char ctid[] = "5678"; char ecuid[] = "12"; char filename[] = "file_name"; int num = 1; DltLogStorageFilterConfig value; value.apids = apid; value.ctids = ctid; value.ecuid = ecuid; value.file_name = filename; value.log_level = DLT_LOG_VERBOSE; char key0[] = ":1234:\000\000\000\000"; char key1[] = "::5678\000\000\000\000"; char key2[] = ":1234:5678"; DltLogStorageFilterConfig *config[DLT_CONFIG_FILE_SECTIONS_MAX] = { 0 }; DltLogStorage handle; handle.connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED; handle.config_status = DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE; handle.config_list = NULL; handle.newest_file_list = NULL; int num_keys = 1; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key0, num_keys, &value, &(handle.config_list))); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key1, num_keys, &value, &(handle.config_list))); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key2, num_keys, &value, &(handle.config_list))); num = dlt_logstorage_filter(&handle, config, apid, ctid, ecuid, 0); EXPECT_EQ(num, 3); } TEST(t_dlt_logstorage_filter, null) { DltLogStorageFilterConfig *config[3] = { 0 }; int num = dlt_logstorage_filter(NULL, config, NULL, NULL, NULL, 0); EXPECT_EQ(DLT_RETURN_ERROR, num); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_write*/ TEST(t_dlt_logstorage_write, normal) { char apid[] = "1234"; char ctid[] = "5678"; char ecuid[] = "12"; char file_name[] = "file_name"; DltLogStorage handle; DltLogStorageUserConfig uconfig; unsigned char data1[] = "123"; int size1 = 3; unsigned char data2[] = "123"; int size2 = 3; unsigned char data3[] = "123"; int size3 = 3; handle.connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED; handle.config_status = DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE; handle.config_list = NULL; handle.newest_file_list = NULL; DltLogStorageFilterConfig value; value.apids = apid; value.ctids = ctid; value.ecuid = ecuid; value.file_name = file_name; char key0[] = ":1234:\000\000\000\000"; char key1[] = "::5678\000\000\000\000"; char key2[] = ":1234:5678"; int num_keys = 1; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key0, num_keys, &value, &(handle.config_list))); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key1, num_keys, &value, &(handle.config_list))); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key2, num_keys, &value, &(handle.config_list))); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_write(&handle, &uconfig, data1, size1, data2, size2, data3, size3)); } TEST(t_dlt_logstorage_write, null) { EXPECT_EQ(0, dlt_logstorage_write(NULL, NULL, NULL, 1, NULL, 1, NULL, 1)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_sync_caches*/ TEST(t_dlt_logstorage_sync_caches, normal) { char apid[] = "1234"; char ctid[] = "5678"; char ecuid[] = "12"; char filename[] = "file_name"; char key[] = "12:1234:5678"; DltLogStorage handle; handle.num_configs = 1; handle.config_list = NULL; DltLogStorageFilterConfig configs; configs.apids = apid; configs.ctids = ctid; configs.ecuid = ecuid; configs.file_name = filename; int num_keys = 1; dlt_logstorage_filter_set_strategy(&configs, DLT_LOGSTORAGE_SYNC_ON_MSG); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key, num_keys, &configs, &(handle.config_list))); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_sync_caches(&handle)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_log_file_name*/ TEST(t_dlt_logstorage_log_file_name, normal) { char log_file_name[DLT_MOUNT_PATH_MAX] = { '\0' }; DltLogStorageUserConfig file_config; file_config.logfile_delimiter = '/'; file_config.logfile_maxcounter = 0; file_config.logfile_timestamp = 1; file_config.logfile_counteridxlen = 10; int cmpRes = 0; char name[] = "log"; dlt_logstorage_log_file_name(log_file_name, &file_config, name, 0); cmpRes = strncmp(log_file_name, "log/0000000000", 14); EXPECT_EQ(0, cmpRes); } TEST(t_dlt_logstorage_log_file_name, null) { char name[] = "log"; dlt_logstorage_log_file_name(NULL, NULL, name, 0); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_sort_file_name*/ TEST(t_dlt_logstorage_sort_file_name, normal) { DltLogStorageFileList *node1, *node2, *node3; DltLogStorageFileList **head; node1 = (DltLogStorageFileList *)calloc (1, sizeof(DltLogStorageFileList)); node2 = (DltLogStorageFileList *)calloc (1, sizeof(DltLogStorageFileList)); node3 = (DltLogStorageFileList *)calloc (1, sizeof(DltLogStorageFileList)); if ((node1 != NULL) && (node2 != NULL) && (node3 != NULL)) { node1->next = node2; node2->next = node3; node3->next = NULL; head = &node1; node1->idx = 8; node2->idx = 4; node3->idx = 1; EXPECT_EQ(8, (*head)->idx); EXPECT_EQ(4, ((*head)->next)->idx); EXPECT_EQ(1, ((((*head)->next)->next)->idx)); EXPECT_EQ(8, dlt_logstorage_sort_file_name(head)); EXPECT_EQ(1, (*head)->idx); EXPECT_EQ(4, ((*head)->next)->idx); EXPECT_EQ(8, ((((*head)->next)->next)->idx)); free((((*head)->next)->next)); free(((*head)->next)); free(*head); node1 = NULL; node2 = NULL; node3 = NULL; } if (node1 != NULL) free(node1); if (node2 != NULL) free(node2); if (node3 != NULL) free(node3); } TEST(t_dlt_logstorage_sort_file_name, null) { dlt_logstorage_sort_file_name(NULL); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_rearrange_file_name*/ TEST(t_dlt_logstorage_rearrange_file_name, normal1) { DltLogStorageFileList *node1, *node2, *node3; DltLogStorageFileList **head; node1 = (DltLogStorageFileList *)calloc (1, sizeof(DltLogStorageFileList)); node2 = (DltLogStorageFileList *)calloc (1, sizeof(DltLogStorageFileList)); node3 = (DltLogStorageFileList *)calloc (1, sizeof(DltLogStorageFileList)); if ((node1 != NULL) && (node2 != NULL) && (node3 != NULL)) { node1->next = node2; node2->next = node3; node3->next = NULL; head = &node1; node1->idx = 1; node2->idx = 4; node3->idx = 8; EXPECT_EQ(1, (*head)->idx); EXPECT_EQ(4, ((*head)->next)->idx); EXPECT_EQ(8, ((((*head)->next)->next)->idx)); dlt_logstorage_rearrange_file_name(head); EXPECT_EQ(4, (*head)->idx); EXPECT_EQ(8, ((*head)->next)->idx); EXPECT_EQ(1, ((((*head)->next)->next)->idx)); free((((*head)->next)->next)); free(((*head)->next)); free(*head); node1 = NULL; node2 = NULL; node3 = NULL; } if (node1 != NULL) free(node1); if (node2 != NULL) free(node2); if (node3 != NULL) free(node3); } TEST(t_dlt_logstorage_rearrange_file_name, normal2) { DltLogStorageFileList *node1, *node2, *node3; DltLogStorageFileList **head; node1 = (DltLogStorageFileList *)calloc (1, sizeof(DltLogStorageFileList)); node2 = (DltLogStorageFileList *)calloc (1, sizeof(DltLogStorageFileList)); node3 = (DltLogStorageFileList *)calloc (1, sizeof(DltLogStorageFileList)); if ((node1 != NULL) && (node2 != NULL) && (node3 != NULL)) { node1->next = node2; node2->next = node3; node3->next = NULL; head = &node1; node1->idx = 2; node2->idx = 4; node3->idx = 8; EXPECT_EQ(2, (*head)->idx); EXPECT_EQ(4, ((*head)->next)->idx); EXPECT_EQ(8, ((((*head)->next)->next)->idx)); dlt_logstorage_rearrange_file_name(head); EXPECT_EQ(2, (*head)->idx); EXPECT_EQ(4, ((*head)->next)->idx); EXPECT_EQ(8, ((((*head)->next)->next)->idx)); free((((*head)->next)->next)); free(((*head)->next)); free(*head); node1 = NULL; node2 = NULL; node3 = NULL; } if (node1 != NULL) free(node1); if (node2 != NULL) free(node2); if (node3 != NULL) free(node3); } TEST(t_dlt_logstorage_rearrange_file_name, null) { dlt_logstorage_rearrange_file_name(NULL); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_get_idx_of_log_file*/ TEST(t_dlt_logstorage_get_idx_of_log_file, normal) { DltLogStorageUserConfig file_config; file_config.logfile_timestamp = 191132; file_config.logfile_delimiter = { '_' }; file_config.logfile_maxcounter = 2; file_config.logfile_counteridxlen = 2; char *file = (char *)"Test_002_20160509_191132.dlt"; EXPECT_EQ(2, dlt_logstorage_get_idx_of_log_file(&file_config, file)); } TEST(t_dlt_logstorage_get_idx_of_log_file, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_get_idx_of_log_file(NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_storage_dir_info*/ TEST(t_dlt_logstorage_storage_dir_info, normal) { DltLogStorageUserConfig file_config; file_config.logfile_timestamp = 191132; file_config.logfile_delimiter = { '_' }; file_config.logfile_maxcounter = 2; file_config.logfile_counteridxlen = 2; char *path = (char *)"/tmp"; DltLogStorageFilterConfig config; char apids; char ctids; config.apids = &apids; config.ctids = &ctids; config.file_name = (char *)"Test_002_20160509_191132.dlt"; config.records = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_storage_dir_info(&file_config, path, &config)); } TEST(t_dlt_logstorage_storage_dir_info, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_storage_dir_info(NULL, NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_open_log_file*/ TEST(t_dlt_logstorage_open_log_file, normal) { DltLogStorageUserConfig file_config; file_config.logfile_timestamp = 191132; file_config.logfile_delimiter = { '_' }; file_config.logfile_maxcounter = 2; file_config.logfile_counteridxlen = 2; char *path = (char *)"/tmp"; DltLogStorageFilterConfig config; char apids; char ctids; config.apids = &apids; config.ctids = &ctids; config.file_name = (char *)"Test"; config.records = NULL; config.working_file_name = NULL; config.wrap_id = 0; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_open_log_file(&config, &file_config, path, 1, true)); } TEST(t_dlt_logstorage_open_log_file, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_open_log_file(NULL, NULL, NULL, 0, true)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_prepare_on_msg*/ TEST(t_dlt_logstorage_prepare_on_msg, normal1) { DltLogStorageUserConfig file_config; file_config.logfile_timestamp = 191132; file_config.logfile_delimiter = { '_' }; file_config.logfile_maxcounter = 2; file_config.logfile_counteridxlen = 2; char *path = (char *)"/tmp"; DltLogStorageFilterConfig config; char apids; char ctids; config.apids = &apids; config.ctids = &ctids; config.file_name = (char *)"Test"; config.records = NULL; config.log = NULL; config.working_file_name = NULL; config.wrap_id = 0; DltNewestFileName newest_file_name; newest_file_name.file_name = (char *)"Test"; newest_file_name.newest_file = (char *)"Test_003_20200728_191132.dlt"; newest_file_name.wrap_id = 0; newest_file_name.next = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_prepare_on_msg(&config, &file_config, path, 1, &newest_file_name)); } TEST(t_dlt_logstorage_prepare_on_msg, normal2) { DltLogStorageUserConfig file_config; file_config.logfile_timestamp = 191132; file_config.logfile_delimiter = { '_' }; file_config.logfile_maxcounter = 2; file_config.logfile_counteridxlen = 2; char *path = (char *)"/tmp"; DltLogStorageFilterConfig config; char apids; char ctids; config.apids = &apids; config.ctids = &ctids; config.file_name = (char *)"Test"; config.records = NULL; config.log = NULL; config.working_file_name = NULL; config.wrap_id = 0; DltNewestFileName newest_file_name; newest_file_name.file_name = (char *)"Test"; newest_file_name.newest_file = (char *)"Test_003_20200728_191132.dlt"; newest_file_name.wrap_id = 1; newest_file_name.next = NULL; /* Create dummy file */ char dummy_file[100] = ""; sprintf(dummy_file, "%s/%s", path, newest_file_name.newest_file); int ret = 0; FILE *fp = fopen(dummy_file, "w"); ret = ftruncate(fileno(fp), 1024); fclose(fp); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_prepare_on_msg(&config, &file_config, path, 1, &newest_file_name)); if (ret == 0) { remove(dummy_file); } } TEST(t_dlt_logstorage_prepare_on_msg, normal3) { DltLogStorageUserConfig file_config; file_config.logfile_timestamp = 191132; file_config.logfile_delimiter = { '_' }; file_config.logfile_maxcounter = 2; file_config.logfile_counteridxlen = 2; char *path = (char *)"/tmp"; DltLogStorageFilterConfig config; char apids; char ctids; char *working_file_name = (char *)"Test_002_20160509_191132.dlt"; config.apids = &apids; config.ctids = &ctids; config.file_name = (char *)"Test"; config.records = NULL; config.log = NULL; config.working_file_name = strdup(working_file_name); config.wrap_id = 0; DltNewestFileName newest_file_name; newest_file_name.file_name = (char *)"Test"; newest_file_name.newest_file = (char *)"Test_003_20200728_191132.dlt"; newest_file_name.wrap_id = 1; newest_file_name.next = NULL; /* Create dummy file */ char dummy_file[100] = ""; sprintf(dummy_file, "%s/%s", path, newest_file_name.newest_file); int ret = 0; FILE *fp = fopen(dummy_file, "w"); ret = ftruncate(fileno(fp), 1024); fclose(fp); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_prepare_on_msg(&config, &file_config, path, 1, &newest_file_name)); if (ret == 0) { remove(dummy_file); } } TEST(t_dlt_logstorage_prepare_on_msg, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_prepare_on_msg(NULL, NULL, NULL, 0, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_write_on_msg*/ TEST(t_dlt_logstorage_write_on_msg, normal) { DltLogStorageUserConfig file_config; file_config.logfile_timestamp = 191132; file_config.logfile_delimiter = { '_' }; file_config.logfile_maxcounter = 2; file_config.logfile_counteridxlen = 2; char *path = (char *)"/tmp"; DltLogStorageFilterConfig config; char apids; char ctids; config.apids = &apids; config.ctids = &ctids; config.file_name = (char *)"Test"; config.records = NULL; config.log = NULL; config.working_file_name = NULL; config.wrap_id = 0; unsigned int size = 8; unsigned char data1[] = "dlt_data"; unsigned char data2[] = "dlt_data"; unsigned char data3[] = "dlt_data"; DltNewestFileName newest_file_name; newest_file_name.file_name = (char *)"Test"; newest_file_name.newest_file = (char *)"Test_003_20200728_191132.dlt"; newest_file_name.wrap_id = 0; newest_file_name.next = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_prepare_on_msg(&config, &file_config, path, 1, &newest_file_name)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_write_on_msg(&config, &file_config, path, data1, size, data2, size, data3, size)); } TEST(t_dlt_logstorage_write_on_msg, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_write_on_msg(NULL, NULL, NULL, NULL, 0, NULL, 0, NULL, 0)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_sync_on_msg*/ TEST(t_dlt_logstorage_sync_on_msg, normal) { DltLogStorageFilterConfig config; DltLogStorageUserConfig file_config; char apids; char ctids; memset(&config, 0, sizeof(DltLogStorageFilterConfig)); config.apids = &apids; config.ctids = &ctids; config.file_name = (char *)"Test"; config.records = NULL; config.log = NULL; config.working_file_name = NULL; config.wrap_id = 0; char *path = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_sync_on_msg(&config, &file_config, path, DLT_LOGSTORAGE_SYNC_ON_MSG)); } TEST(t_dlt_logstorage_sync_on_msg, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_sync_on_msg(NULL, NULL, NULL, 0)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_prepare_msg_cache*/ TEST(t_dlt_logstorage_prepare_msg_cache, normal) { DltLogStorageUserConfig file_config; file_config.logfile_timestamp = 191132; file_config.logfile_delimiter = { '_' }; file_config.logfile_maxcounter = 2; file_config.logfile_counteridxlen = 2; char *path = (char *)"/tmp"; DltLogStorageFilterConfig config; DltNewestFileName newest_info; char apids; char ctids; config.apids = &apids; config.ctids = &ctids; config.file_name = (char *)"Test"; config.records = NULL; config.log = NULL; config.cache = NULL; config.file_size = 0; config.sync = DLT_LOGSTORAGE_SYNC_ON_DEMAND; config.working_file_name = NULL; config.wrap_id = 0; g_logstorage_cache_max = 16; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_prepare_msg_cache(&config, &file_config, path, 1, &newest_info)); free(config.cache); } TEST(t_dlt_logstorage_prepare_msg_cache, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_prepare_msg_cache(NULL, NULL, NULL, 0, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_write_msg_cache*/ TEST(t_dlt_logstorage_write_msg_cache, normal) { unsigned int size = 10; unsigned char data1[10] = "dlt_data1"; unsigned char data2[10] = "dlt_data2"; unsigned char data3[10] = "dlt_dat3"; DltLogStorageFilterConfig config; memset(&config, 0, sizeof(DltLogStorageFilterConfig)); DltLogStorageUserConfig file_config; char *path = (char*)"/tmp"; config.cache = calloc(1, 50 + sizeof(DltLogStorageCacheFooter)); if (config.cache != NULL) { config.file_size = 50; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_write_msg_cache(&config, &file_config, path, data1, size, data2, size, data3, size)); free(config.cache); config.cache = NULL; } } TEST(t_dlt_logstorage_write_msg_cache, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_write_msg_cache(NULL, NULL, NULL, NULL, 0, NULL, 0, NULL, 0)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_split_key*/ TEST(t_dlt_logstorage_split_key, normal) { char key[] = "dlt:1020:"; char apid[] = ":2345:"; char ctid[] = "::6789"; char ecuid[] = "ECU1"; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_split_key(key, apid, ctid, ecuid)); } TEST(t_dlt_logstorage_split_key, null) { char key[] = "dlt:1020:"; char apid[] = "2345"; char ctid[] = "6789"; char ecuid[] = "ECU1"; EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_logstorage_split_key(NULL, NULL, NULL, NULL)); EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_logstorage_split_key(NULL, apid, ctid, ecuid)); EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_logstorage_split_key(key, NULL, ctid, ecuid)); EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_logstorage_split_key(key, apid, NULL, ecuid)); EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_logstorage_split_key(key, apid, ctid, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_update_all_contexts*/ TEST(t_dlt_logstorage_update_all_contexts, normal) { DltDaemon daemon; DltDaemonLocal daemon_local; memset(&daemon, 0, sizeof(DltDaemon)); memset(&daemon_local.pGateway, 0, sizeof(DltGateway)); char ecu[] = "ECU1"; char apid[] = "123"; daemon_local.RingbufferMinSize = DLT_DAEMON_RINGBUFFER_MIN_SIZE; daemon_local.RingbufferMaxSize = DLT_DAEMON_RINGBUFFER_MAX_SIZE; daemon_local.RingbufferStepSize = DLT_DAEMON_RINGBUFFER_STEP_SIZE; EXPECT_EQ(0, dlt_daemon_init(&daemon, daemon_local.RingbufferMinSize, daemon_local.RingbufferMaxSize, daemon_local.RingbufferStepSize, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &daemon_local.pGateway, 0, 0)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_update_all_contexts(&daemon, &daemon_local, apid, 1, 1, ecu, 0)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_update_all_contexts(&daemon, &daemon_local, apid, 0, 1, ecu, 0)); } TEST(t_dlt_logstorage_update_all_contexts, null) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_logstorage_update_all_contexts(NULL, NULL, NULL, 0, 0, NULL, 0)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_update_context*/ TEST(t_dlt_logstorage_update_context, normal) { DltDaemon daemon; DltDaemonLocal daemon_local; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; memset(&daemon, 0, sizeof(DltDaemon)); memset(&daemon_local, 0, sizeof(DltDaemonLocal)); memset(&daemon_local.pGateway, 0, sizeof(DltGateway)); int fd = connectServer(); EXPECT_NE(-1, fd); daemon_local.RingbufferMinSize = DLT_DAEMON_RINGBUFFER_MIN_SIZE; daemon_local.RingbufferMaxSize = DLT_DAEMON_RINGBUFFER_MAX_SIZE; daemon_local.RingbufferStepSize = DLT_DAEMON_RINGBUFFER_STEP_SIZE; char apid[] = "123"; char ctid[] = "456"; char desc[255] = "TEST dlt_logstorage_update_context"; char ecu[] = "ECU1"; EXPECT_EQ(0, dlt_daemon_init(&daemon, daemon_local.RingbufferMinSize, daemon_local.RingbufferMaxSize, daemon_local.RingbufferStepSize, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &daemon_local.pGateway, 0, 0)); app = dlt_daemon_application_add(&daemon, apid, getpid(), desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, app->user_handle, desc, daemon.ecuid, 0); EXPECT_NE((DltDaemonContext *)(NULL), daecontext); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_update_context(&daemon, &daemon_local, apid, ctid, ecu, 1, 0)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_update_context(&daemon, &daemon_local, apid, ctid, ecu, 0, 0)); } TEST(t_dlt_logstorage_update_context, null) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_logstorage_update_context(NULL, NULL, NULL, NULL, NULL, 0, 0)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_update_context_loglevel*/ TEST(t_dlt_logstorage_update_context_loglevel, normal) { DltDaemon daemon; DltDaemonLocal daemon_local; DltDaemonContext *daecontext = NULL; DltDaemonApplication *app = NULL; memset(&daemon, 0, sizeof(DltDaemon)); memset(&daemon_local, 0, sizeof(DltDaemonLocal)); memset(&daemon_local.pGateway, 0, sizeof(DltGateway)); int fd = connectServer(); EXPECT_NE(-1, fd); daemon_local.RingbufferMinSize = DLT_DAEMON_RINGBUFFER_MIN_SIZE; daemon_local.RingbufferMaxSize = DLT_DAEMON_RINGBUFFER_MAX_SIZE; daemon_local.RingbufferStepSize = DLT_DAEMON_RINGBUFFER_STEP_SIZE; char apid[] = "123"; char ctid[] = "456"; char key[] = ":123:456"; char desc[255] = "TEST dlt_logstorage_update_context_loglevel"; char ecu[] = "ECU1"; EXPECT_EQ(0, dlt_daemon_init(&daemon, daemon_local.RingbufferMinSize, daemon_local.RingbufferMaxSize, daemon_local.RingbufferStepSize, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &daemon_local.pGateway, 0, 0)); app = dlt_daemon_application_add(&daemon, apid, getpid(), desc, fd, ecu, 0); daecontext = dlt_daemon_context_add(&daemon, apid, ctid, DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT, 0, app->user_handle, desc, daemon.ecuid, 0); EXPECT_NE((DltDaemonContext *)(NULL), daecontext); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_update_context_loglevel (&daemon, &daemon_local, key, 1, 0)); } TEST(t_dlt_logstorage_update_context_loglevel, null) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_logstorage_update_context_loglevel(NULL, NULL, NULL, 0, 0)); } /* Begin Method: dlt_logstorage::t_dlt_daemon_logstorage_reset_application_loglevel*/ TEST(t_dlt_daemon_logstorage_reset_application_loglevel, normal) { DltDaemon daemon; DltDaemonLocal daemon_local; memset(&daemon, 0, sizeof(DltDaemon)); memset(&daemon_local, 0, sizeof(daemon_local)); memset(&daemon_local.pGateway, 0, sizeof(DltGateway)); daemon_local.RingbufferMinSize = DLT_DAEMON_RINGBUFFER_MIN_SIZE; daemon_local.RingbufferMaxSize = DLT_DAEMON_RINGBUFFER_MAX_SIZE; daemon_local.RingbufferStepSize = DLT_DAEMON_RINGBUFFER_STEP_SIZE; char ecu[] = "ECU1"; int device_index = 0; EXPECT_EQ(0, dlt_daemon_init(&daemon, daemon_local.RingbufferMinSize, daemon_local.RingbufferMaxSize, daemon_local.RingbufferStepSize, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &daemon_local.pGateway, 0, 0)); EXPECT_NO_THROW(dlt_daemon_logstorage_reset_application_loglevel(&daemon, &daemon_local, device_index, 1, 0)); } TEST(t_dlt_daemon_logstorage_reset_application_loglevel, null) { EXPECT_NO_THROW(dlt_daemon_logstorage_reset_application_loglevel(NULL, NULL, 0, 0, 0)); } /* Begin Method: dlt_logstorage::t_dlt_daemon_logstorage_get_loglevel*/ TEST(t_dlt_daemon_logstorage_get_loglevel, normal) { char ecu[] = "ECU1"; char apid[] = "1234"; char ctid[] = "5678"; char file_name[] = "file_name"; char key[] = "ECU1:1234:5678"; int device_index = 0; DltDaemon daemon; DltDaemonLocal daemon_local; memset(&daemon, 0, sizeof(DltDaemon)); memset(&daemon_local, 0, sizeof(DltDaemonLocal)); memset(&daemon_local.pGateway, 0, sizeof(DltGateway)); DltLogStorageFilterConfig value; value.log_level = 4; value.apids = apid; value.ctids = ctid; value.ecuid = ecu; value.file_name = file_name; DltLogStorage storage_handle; daemon_local.RingbufferMinSize = DLT_DAEMON_RINGBUFFER_MIN_SIZE; daemon_local.RingbufferMaxSize = DLT_DAEMON_RINGBUFFER_MAX_SIZE; daemon_local.RingbufferStepSize = DLT_DAEMON_RINGBUFFER_STEP_SIZE; EXPECT_EQ(0, dlt_daemon_init(&daemon, daemon_local.RingbufferMinSize, daemon_local.RingbufferMaxSize, daemon_local.RingbufferStepSize, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &daemon_local.pGateway, 0, 0)); daemon.storage_handle = &storage_handle; daemon.storage_handle->connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED; daemon.storage_handle->config_status = DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE; daemon.storage_handle->config_list = NULL; daemon.storage_handle->num_configs = 1; int num_keys = 1; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key, num_keys, &value, &(daemon.storage_handle->config_list))); EXPECT_NO_THROW(dlt_daemon_logstorage_update_application_loglevel(&daemon, &daemon_local, device_index, 0)); EXPECT_EQ(4, dlt_daemon_logstorage_get_loglevel(&daemon, 1, apid, ctid)); } TEST(t_dlt_daemon_logstorage_get_loglevel, null) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_daemon_logstorage_get_loglevel(NULL, 0, NULL, NULL)); } /* Begin Method: dlt_logstorage::t_dlt_daemon_logstorage_update_application_loglevel*/ TEST(t_dlt_daemon_logstorage_update_application_loglevel, normal) { char ecu[] = "key"; char apid[] = "1234"; char ctid[] = "5678"; char file_name[] = "file_name"; char key[] = "key:1234:5678"; int device_index = 0; DltDaemon daemon; DltDaemonLocal daemon_local; memset(&daemon, 0, sizeof(DltDaemon)); memset(&daemon_local, 0, sizeof(DltDaemonLocal)); memset(&daemon_local.pGateway, 0, sizeof(DltGateway)); DltLogStorageFilterConfig value; value.log_level = 5; value.apids = apid; value.ctids = ctid; value.ecuid = ecu; value.file_name = file_name; DltLogStorage storage_handle; daemon_local.RingbufferMinSize = DLT_DAEMON_RINGBUFFER_MIN_SIZE; daemon_local.RingbufferMaxSize = DLT_DAEMON_RINGBUFFER_MAX_SIZE; daemon_local.RingbufferStepSize = DLT_DAEMON_RINGBUFFER_STEP_SIZE; EXPECT_EQ(0, dlt_daemon_init(&daemon, daemon_local.RingbufferMinSize, daemon_local.RingbufferMaxSize, daemon_local.RingbufferStepSize, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &daemon_local.pGateway, 0, 0)); daemon.storage_handle = &storage_handle; daemon.storage_handle->connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED; daemon.storage_handle->config_status = DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE; daemon.storage_handle->config_list = NULL; int num_keys = 1; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key, num_keys, &value, &(daemon.storage_handle->config_list))); EXPECT_NO_THROW(dlt_daemon_logstorage_update_application_loglevel(&daemon, &daemon_local, device_index, 0)); } TEST(t_dlt_daemon_logstorage_update_application_loglevel, null) { EXPECT_NO_THROW(dlt_daemon_logstorage_update_application_loglevel(NULL, NULL, 0, 0)); } /* Begin Method: dlt_logstorage::t_dlt_daemon_logstorage_write*/ TEST(t_dlt_daemon_logstorage_write, normal) { DltDaemon daemon; DltGateway gateway; memset(&daemon, 0, sizeof(DltDaemon)); memset(&gateway, 0, sizeof(DltGateway)); char ecu[] = "ECU1"; DltLogStorage storage_handle; EXPECT_EQ(0, dlt_daemon_init(&daemon, DLT_DAEMON_RINGBUFFER_MIN_SIZE, DLT_DAEMON_RINGBUFFER_MAX_SIZE, DLT_DAEMON_RINGBUFFER_STEP_SIZE, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &gateway, 0, 0)); daemon.storage_handle = &storage_handle; char apid[] = "1234"; char ctid[] = "5678"; char ecuid[] = "12"; char file_name[] = "file_name"; DltDaemonFlags uconfig; uconfig.offlineLogstorageTimestamp = 1; uconfig.offlineLogstorageDelimiter = '/'; uconfig.offlineLogstorageMaxCounter = 5; uconfig.offlineLogstorageMaxCounterIdx = 1; uconfig.offlineLogstorageMaxDevices = 1; unsigned char data1[] = "123"; unsigned char data2[] = "123"; unsigned char data3[] = "123"; int size = 10 * sizeof(uint32_t); daemon.storage_handle->connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_CONNECTED; daemon.storage_handle->config_status = DLT_OFFLINE_LOGSTORAGE_CONFIG_DONE; daemon.storage_handle->config_list = NULL; DltLogStorageFilterConfig value; value.apids = apid; value.ctids = ctid; value.ecuid = ecuid; value.file_name = file_name; char key0[] = "1234:\000\000\000\000"; char key1[] = ":5678\000\000\000\000"; char key2[] = "1234:5678"; int num_keys = 1; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key0, num_keys, &value, &(daemon.storage_handle->config_list))); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key1, num_keys, &value, &(daemon.storage_handle->config_list))); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key2, num_keys, &value, &(daemon.storage_handle->config_list))); EXPECT_NO_THROW(dlt_daemon_logstorage_write(&daemon, &uconfig, data1, size, data2, size, data3, size)); } TEST(t_dlt_daemon_logstorage_write, null) { EXPECT_NO_THROW(dlt_daemon_logstorage_write(NULL, NULL, NULL, 0, NULL, 0, NULL, 0)); } /* Begin Method: dlt_logstorage::t_dlt_daemon_logstorage_setup_internal_storage*/ TEST(t_dlt_daemon_logstorage_setup_internal_storage, normal) { DltDaemon daemon; DltDaemonLocal daemon_local; memset(&daemon, 0, sizeof(DltDaemon)); memset(&daemon_local, 0, sizeof(DltDaemonLocal)); memset(&daemon_local.pGateway, 0, sizeof(DltGateway)); daemon_local.RingbufferMinSize = DLT_DAEMON_RINGBUFFER_MIN_SIZE; daemon_local.RingbufferMaxSize = DLT_DAEMON_RINGBUFFER_MAX_SIZE; daemon_local.RingbufferStepSize = DLT_DAEMON_RINGBUFFER_STEP_SIZE; char ecu[] = "ECU1"; char path[] = "/tmp"; EXPECT_EQ(0, dlt_daemon_init(&daemon, daemon_local.RingbufferMinSize, daemon_local.RingbufferMaxSize, daemon_local.RingbufferStepSize, DLT_RUNTIME_DEFAULT_DIRECTORY, DLT_LOG_INFO, DLT_TRACE_STATUS_OFF, 0, 0)); dlt_set_id(daemon.ecuid, ecu); EXPECT_EQ(0, dlt_daemon_init_user_information(&daemon, &daemon_local.pGateway, 0, 0)); DltLogStorage storage_handle; daemon.storage_handle = &storage_handle; daemon.storage_handle->config_status = 0; daemon.storage_handle->connection_type = DLT_OFFLINE_LOGSTORAGE_DEVICE_DISCONNECTED; daemon.storage_handle->config_list = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_daemon_logstorage_setup_internal_storage(&daemon, &daemon_local, path, 1)); } TEST(t_dlt_daemon_logstorage_setup_internal_storage, null) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_daemon_logstorage_setup_internal_storage(NULL, NULL, NULL, 0)); } /* Begin Method: dlt_logstorage::dlt_daemon_logstorage_set_logstorage_cache_size*/ TEST(t_dlt_daemon_logstorage_set_logstorage_cache_size, normal) { EXPECT_NO_THROW(dlt_daemon_logstorage_set_logstorage_cache_size(1)); } /* Begin Method: dlt_logstorage::t_dlt_daemon_logstorage_cleanup*/ TEST(t_dlt_daemon_logstorage_cleanup, normal) { DltDaemon daemon; DltDaemonLocal daemon_local; daemon_local.flags.offlineLogstorageMaxDevices = 1; DltLogStorage storage_handle; daemon.storage_handle = &storage_handle; daemon.storage_handle->config_status = 0; EXPECT_EQ(DLT_RETURN_OK, dlt_daemon_logstorage_cleanup(&daemon, &daemon_local, 0)); } TEST(t_dlt_daemon_logstorage_cleanup, null) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_daemon_logstorage_cleanup(NULL, NULL, 0)); } /* Begin Method: dlt_logstorage::t_dlt_daemon_logstorage_sync_cache*/ TEST(t_dlt_daemon_logstorage_sync_cache, normal) { DltDaemon daemon; DltDaemonLocal daemon_local; daemon_local.flags.offlineLogstorageMaxDevices = 1; DltLogStorage storage_handle; daemon.storage_handle = &storage_handle; daemon.storage_handle->config_status = 0; char path[] = "/tmp"; char apid[] = "1234"; char ctid[] = "5678"; char ecuid[] = "12"; char file_name[] = "file_name"; char key[] = "12:1234:5678"; daemon.storage_handle->num_configs = 1; daemon.storage_handle->config_list = NULL; strncpy(daemon.storage_handle->device_mount_point, "/tmp", 5); DltLogStorageFilterConfig configs; configs.apids = apid; configs.ctids = ctid; configs.ecuid = ecuid; configs.file_name = file_name; dlt_logstorage_filter_set_strategy(&configs, DLT_LOGSTORAGE_SYNC_ON_MSG); int num_keys = 1; EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_list_add(key, num_keys, &configs, &(daemon.storage_handle->config_list))); EXPECT_EQ(DLT_RETURN_OK, dlt_daemon_logstorage_sync_cache(&daemon, &daemon_local, path, 0)); } TEST(t_dlt_daemon_logstorage_sync_cache, null) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_daemon_logstorage_sync_cache(NULL, NULL, NULL, 0)); } /* Begin Method: dlt_logstorage::t_dlt_daemon_logstorage_get_device*/ TEST(t_dlt_daemon_logstorage_get_device, normal) { DltDaemon daemon; DltDaemonLocal daemon_local; daemon_local.flags.offlineLogstorageMaxDevices = 1; DltLogStorage storage_handle; daemon.storage_handle = &storage_handle; daemon.storage_handle->config_status = 0; char path[] = "/tmp"; strncpy(daemon.storage_handle->device_mount_point, "/tmp", 5); EXPECT_NE((DltLogStorage *)NULL, dlt_daemon_logstorage_get_device(&daemon, &daemon_local, path, 0)); } TEST(t_dlt_daemon_logstorage_get_device, null) { EXPECT_EQ((DltLogStorage *)NULL, dlt_daemon_logstorage_get_device(NULL, NULL, NULL, 0)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_find_dlt_header*/ TEST(t_dlt_logstorage_find_dlt_header, normal) { char data[] = { 'a', 'b', 'D', 'L', 'T', 0x01 }; DltLogStorageFilterConfig config; memset(&config, 0, sizeof(DltLogStorageFilterConfig)); config.cache = calloc(1, sizeof(data)); if (config.cache != NULL) { strncpy((char *)config.cache, data, sizeof(data)); /* DLT header starts from index 2 */ EXPECT_EQ(2, dlt_logstorage_find_dlt_header(config.cache, 0, sizeof(data))); free(config.cache); } } TEST(t_dlt_logstorage_find_dlt_header, null) { char data[] = { 'N', 'o', 'H', 'e', 'a', 'd', 'e', 'r' }; DltLogStorageFilterConfig config; memset(&config, 0, sizeof(DltLogStorageFilterConfig)); config.cache = calloc(1, sizeof(data)); if (config.cache != NULL) { /* config.cache =(void *) "a,b,D,L,T,0x01"; */ strncpy((char *)config.cache, data, sizeof(data)); EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_find_dlt_header(config.cache, 0, sizeof(data))); free(config.cache); } } /* Begin Method: dlt_logstorage::t_dlt_logstorage_find_last_dlt_header*/ TEST(t_dlt_logstorage_find_last_dlt_header, normal) { char data[] = {'a','b','D','L','T',0x01}; DltLogStorageFilterConfig config; memset(&config, 0, sizeof(DltLogStorageFilterConfig)); config.cache = calloc(1, sizeof(data)); if (config.cache != NULL) { strncpy((char *)config.cache, data, sizeof(data)); /* DLT header starts from index 2 */ EXPECT_EQ(2, dlt_logstorage_find_last_dlt_header(config.cache, 0, sizeof(data))); free(config.cache); } } TEST(t_dlt_logstorage_find_last_dlt_header, null) { char data[] = {'N','o','H','e','a','d','e','r'}; DltLogStorageFilterConfig config; memset(&config, 0, sizeof(DltLogStorageFilterConfig)); config.cache = calloc(1, sizeof(data)); if (config.cache != NULL) { /* config.cache =(void *) "a,b,D,L,T,0x01"; */ strncpy((char *)config.cache, data, sizeof(data)); EXPECT_EQ(-1, dlt_logstorage_find_last_dlt_header(config.cache, 0, sizeof(data))); free(config.cache); } } /* Begin Method: dlt_logstorage::t_dlt_logstorage_sync_to_file*/ TEST(t_dlt_logstorage_sync_to_file, normal) { DltLogStorageUserConfig file_config; memset(&file_config, 0, sizeof(DltLogStorageUserConfig)); file_config.logfile_timestamp = 191132; file_config.logfile_delimiter = { '_' }; file_config.logfile_maxcounter = 6; file_config.logfile_counteridxlen = 2; char *path = (char *)"/tmp"; DltLogStorageFilterConfig config; DltNewestFileName newest_info; memset(&config, 0, sizeof(DltLogStorageFilterConfig)); char apids; char ctids; config.apids = &apids; config.ctids = &ctids; config.file_name = (char *)"Test"; config.records = NULL; config.log = NULL; config.cache = NULL; config.sync = DLT_LOGSTORAGE_SYNC_ON_DEMAND; config.num_files = 6; config.file_size = 50; g_logstorage_cache_max = 16; unsigned int size = 10; unsigned char data1[10] = "dlt_data0"; unsigned char data2[10] = "dlt_data1"; unsigned char data3[10] = "dlt_data2"; newest_info.wrap_id = 0; config.wrap_id = 0; DltLogStorageCacheFooter *footer = NULL; config.cache = calloc(1, config.file_size + sizeof(DltLogStorageCacheFooter)); if (config.cache != NULL) { EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_prepare_msg_cache(&config, &file_config, path, 1, &newest_info)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_write_msg_cache(&config, &file_config, path, data1, size, data2, size, data3, size)); footer = (DltLogStorageCacheFooter *)((uint8_t*)config.cache + config.file_size); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_sync_to_file(&config, &file_config, path, footer, footer->last_sync_offset, footer->offset)); free(config.cache); config.cache = NULL; } } TEST(t_dlt_logstorage_sync_to_file, null) { EXPECT_EQ(-1, dlt_logstorage_sync_to_file(NULL, NULL, NULL, NULL, 0, 1)); } /* Begin Method: dlt_logstorage::t_dlt_logstorage_sync_msg_cache*/ TEST(t_dlt_logstorage_sync_msg_cache, normal) { DltLogStorageUserConfig file_config; memset(&file_config, 0, sizeof(DltLogStorageUserConfig)); file_config.logfile_timestamp = 191132; file_config.logfile_delimiter = { '_' }; file_config.logfile_maxcounter = 8; file_config.logfile_counteridxlen = 2; char *path = (char *)"/tmp"; DltLogStorageFilterConfig config; DltNewestFileName newest_info; memset(&config, 0, sizeof(DltLogStorageFilterConfig)); char apids; char ctids; config.apids = &apids; config.ctids = &ctids; config.file_name = (char *)"Test"; config.records = NULL; config.log = NULL; config.cache = NULL; config.file_size = 50; config.sync = DLT_LOGSTORAGE_SYNC_ON_DEMAND; config.num_files = 8; g_logstorage_cache_max = 16; unsigned int size = 10; unsigned char data1[10] = "dlt_dataA"; unsigned char data2[10] = "dlt_dataB"; unsigned char data3[10] = "dlt_dataC"; config.cache = calloc(1, 50 + sizeof(DltLogStorageCacheFooter)); if (config.cache != NULL) { EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_prepare_msg_cache(&config, &file_config, path, 1, &newest_info)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_write_msg_cache(&config, &file_config, path, data1, size, data2, size, data3, size)); EXPECT_EQ(DLT_RETURN_OK, dlt_logstorage_sync_msg_cache(&config, &file_config, path, DLT_LOGSTORAGE_SYNC_ON_DEMAND)); free(config.cache); config.cache = NULL; } } TEST(t_dlt_logstorage_sync_msg_cache, null) { EXPECT_EQ(DLT_RETURN_ERROR, dlt_logstorage_sync_msg_cache(NULL, NULL, NULL, 0)); } int connectServer(void) { #ifdef DLT_DAEMON_USE_UNIX_SOCKET_IPC int sockfd, portno; struct sockaddr_in serv_addr; struct hostent *server; portno = 8080; sockfd = socket(AF_INET, SOCK_STREAM, 0); server = gethostbyname("127.0.0.1"); memset((char *) &serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; memcpy((char *)&serv_addr.sin_addr.s_addr, (char *)server->h_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { printf("Error: %s (%d) occured in connect socket\n", strerror(errno), errno); close(sockfd); return -1; } #else /* DLT_DAEMON_USE_FIFO_IPC */ char filename[1024]; int sockfd; snprintf(filename, 1024, "/tmp/dltpipes/dlt%d", getpid()); /* Try to delete existing pipe, ignore result of unlink */ unlink(filename); mkfifo(filename, S_IRUSR | S_IWUSR | S_IWGRP | S_IRGRP); chmod(filename, S_IRUSR | S_IWUSR | S_IWGRP | S_IRGRP); sockfd = open(filename, O_RDWR | O_CLOEXEC); #endif return sockfd; } #define GTEST_SOCKS_ACCEPTED 2 int main(int argc, char **argv) { #ifdef DLT_DAEMON_USE_UNIX_SOCKET_IPC pid_t cpid; cpid = fork(); if (cpid == -1) { printf("fork fail\n"); return -1; } if (cpid) { int i = GTEST_SOCKS_ACCEPTED; int j, optval = 1; char buffer[256]; int sockfd, newsockfd[GTEST_SOCKS_ACCEPTED], portno; socklen_t clilen; struct sockaddr_in serv_addr, cli_addr; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { printf("Error in creating socket\n"); return -1; } memset((char *) &serv_addr, 0, sizeof(serv_addr)); portno = 8080; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) == -1) { perror("setsockopt"); close(sockfd); exit(1); } j = bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); if (j == -1) { perror("Bind Error\n"); close(sockfd); return -1; } listen(sockfd, 5); while (i) { clilen = sizeof(cli_addr); newsockfd[i - 1] = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen); if (newsockfd[i - 1] == -1) { printf("Error in accept"); return -1; } memset(buffer, 0, 256); (void)(read(newsockfd[i - 1], buffer, 255) + 1); /* just ignore result */ i--; } for (j = 0; j < GTEST_SOCKS_ACCEPTED; j++) close(newsockfd[i]); close(sockfd); } else { #endif ::testing::InitGoogleTest(&argc, argv); ::testing::FLAGS_gtest_break_on_failure = false; /* ::testing::FLAGS_gtest_filter = "t_dlt_event_handler_register_connection*"; */ return RUN_ALL_TESTS(); #ifdef DLT_DAEMON_USE_UNIX_SOCKET_IPC } #endif return 0; } dlt-daemon-2.18.6/tests/gtest_dlt_shm.cpp000066400000000000000000000033001377520261000203410ustar00rootroot00000000000000#include extern "C" { #include "dlt_shm.h" } DltShm *server_buf = (DltShm *)calloc(1, sizeof(DltShm)); DltShm *client_buf = (DltShm *)calloc(1, sizeof(DltShm)); char *dltShmNameTest = (char *)"dlt-shm-test"; int size = 1000; /* Method: dlt_shm::t_dlt_shm_init_server */ TEST(t_dlt_shm_init_server, normal) { EXPECT_EQ(DLT_RETURN_OK, dlt_shm_init_server(server_buf, dltShmNameTest, size)); } /* Method: dlt_shm::t_dlt_shm_init_server */ TEST(t_dlt_shm_init_server, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_shm_init_server(NULL, NULL, size)); } /* Method: dlt_shm::t_dlt_shm_init_client */ TEST(t_dlt_shm_init_client, normal) { EXPECT_EQ(DLT_RETURN_OK, dlt_shm_init_client(client_buf, dltShmNameTest)); } /* Method: dlt_shm::t_dlt_shm_init_client */ TEST(t_dlt_shm_init_client, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_shm_init_client(NULL, NULL)); } /* Method: dlt_shm::t_dlt_shm_free_client */ TEST(t_dlt_shm_free_client, normal) { EXPECT_EQ(DLT_RETURN_OK, dlt_shm_free_client(client_buf)); } /* Method: dlt_shm::t_dlt_shm_free_client */ TEST(t_dlt_shm_free_client, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_shm_free_client(NULL)); } /* Method: dlt_shm::t_dlt_shm_free_server */ TEST(t_dlt_shm_free_server, normal) { EXPECT_EQ(DLT_RETURN_OK, dlt_shm_free_server(server_buf, dltShmNameTest)); } /* Method: dlt_shm::t_dlt_shm_free_server */ TEST(t_dlt_shm_free_server, nullpointer) { EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_shm_free_server(NULL, NULL)); } int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); ::testing::FLAGS_gtest_break_on_failure = false; return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/tests/gtest_dlt_user.cpp000066400000000000000000006070331377520261000205450ustar00rootroot00000000000000/* * SPDX license identifier: MPL-2.0 * * Copyright (C) 2011-2015, BMW AG * * This file is part of GENIVI Project DLT - Diagnostic Log and Trace. * * This Source Code Form is subject to the terms of the * Mozilla Public License (MPL), v. 2.0. * If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * For further information see http://www.genivi.org/. */ /*! * \author Jens Bocklage * \author Stefan Held * * \copyright Copyright Š 2011-2015 BMW AG. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file gtest_dlt_common.cpp */ #include #include "gtest/gtest.h" #include #include #include #include #include extern "C" { #include "dlt_user.h" #include "dlt_user_cfg.h" } /* TEST COMMENTED OUT WITH */ /* TODO: */ /* DO FAIL! */ /* tested functions */ /* * int dlt_user_log_write_start(DltContext *handle, DltContextData *log, DltLogLevelType loglevel); * int dlt_user_log_write_start_id(DltContext *handle, DltContextData *log, DltLogLevelType loglevel, uint32_t messageid); * int dlt_user_log_write_finish(DltContextData *log); * int dlt_user_log_write_bool(DltContextData *log, uint8_t data); * int dlt_user_log_write_float32(DltContextData *log, float32_t data); * int dlt_user_log_write_float64(DltContextData *log, double data); * int dlt_user_log_write_uint(DltContextData *log, unsigned int data); * int dlt_user_log_write_uint8(DltContextData *log, uint8_t data); * int dlt_user_log_write_uint16(DltContextData *log, uint16_t data); * int dlt_user_log_write_uint32(DltContextData *log, uint32_t data); * int dlt_user_log_write_uint64(DltContextData *log, uint64_t data); * int dlt_user_log_write_uint8_formatted(DltContextData *log, uint8_t data, DltFormatType type); * int dlt_user_log_write_uint16_formatted(DltContextData *log, uint16_t data, DltFormatType type); * int dlt_user_log_write_uint32_formatted(DltContextData *log, uint32_t data, DltFormatType type); * int dlt_user_log_write_uint64_formatted(DltContextData *log, uint64_t data, DltFormatType type); * int dlt_user_log_write_int(DltContextData *log, int data); * int dlt_user_log_write_int8(DltContextData *log, int8_t data); * int dlt_user_log_write_int16(DltContextData *log, int16_t data); * int dlt_user_log_write_int32(DltContextData *log, int32_t data); * int dlt_user_log_write_int64(DltContextData *log, int64_t data); * int dlt_user_log_write_string( DltContextData *log, const char *text); * int dlt_user_log_write_sized_string(DltContextData *log, const char *text, uint16_t length); * int dlt_user_log_write_constant_string( DltContextData *log, const char *text); * int dlt_user_log_write_sized_constant_string(DltContextData *log, const char *text, uint16_t length); * int dlt_user_log_write_utf8_string(DltContextData *log, const char *text); * int dlt_user_log_write_sized_utf8_string(DltContextData *log, const char *text, uint16_t length); * int dlt_user_log_write_raw(DltContextData *log,void *data,uint16_t length); * int dlt_user_log_write_raw_formatted(DltContextData *log,void *data,uint16_t length,DltFormatType type); */ /* * int dlt_log_string(DltContext *handle,DltLogLevelType loglevel, const char *text); * int dlt_log_string_int(DltContext *handle,DltLogLevelType loglevel, const char *text, int data); * int dlt_log_string_uint(DltContext *handle,DltLogLevelType loglevel, const char *text, unsigned int data); * int dlt_log_int(DltContext *handle,DltLogLevelType loglevel, int data); * int dlt_log_uint(DltContext *handle,DltLogLevelType loglevel, unsigned int data); * int dlt_log_raw(DltContext *handle,DltLogLevelType loglevel, void *data,uint16_t length); * int dlt_log_marker(); */ /* * int dlt_register_app(const char *apid, const char * description); * int dlt_unregister_app(void); * int dlt_register_context(DltContext *handle, const char *contextid, const char * description); * int dlt_register_context_ll_ts(DltContext *handle, const char *contextid, const char * description, int loglevel, int tracestatus); * int dlt_unregister_context(DltContext *handle); * int dlt_register_injection_callback(DltContext *handle, uint32_t service_id, int (*dlt_injection_callback)(uint32_t service_id, void *data, uint32_t length)); * int dlt_register_log_level_changed_callback(DltContext *handle, void (*dlt_log_level_changed_callback)(char context_id[DLT_ID_SIZE],uint8_t log_level, uint8_t trace_status)); */ /* * int dlt_user_trace_network(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload); * int dlt_user_trace_network_truncated(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload, int allow_truncate); * int dlt_user_trace_network_segmented(DltContext *handle, DltNetworkTraceType nw_trace_type, uint16_t header_len, void *header, uint16_t payload_len, void *payload); */ /* * int dlt_set_log_mode(DltUserLogMode mode); * int dlt_get_log_state(); */ /* * int dlt_verbose_mode(void); * int dlt_nonverbose_mode(void); */ static const char *STR_TRUNCATED_MESSAGE = "... <>"; /*/////////////////////////////////////// */ /* start initial dlt */ TEST(t_dlt_init, onetime) { /** * Unset DLT_USER_ENV_LOG_MSG_BUF_LEN environment variable * to make sure the dlt user buffer initialized with default value */ unsetenv(DLT_USER_ENV_LOG_MSG_BUF_LEN); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_start */ TEST(t_dlt_user_log_write_start, normal) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_start normal")); /* the defined enum values for log level */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_OFF)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_FATAL)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_ERROR)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_WARN)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_INFO)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEBUG)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_VERBOSE)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_start, abnormal) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_start abnormal")); /* undefined values for DltLogLevelType */ /* shouldn't it return -1? */ EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_user_log_write_start(&context, &contextData, (DltLogLevelType) - 100)); EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_user_log_write_start(&context, &contextData, (DltLogLevelType) - 10)); EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_user_log_write_start(&context, &contextData, (DltLogLevelType)10)); EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_user_log_write_start(&context, &contextData, (DltLogLevelType)100)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_start, startstartfinish) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_start startstartfinish")); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* shouldn't it return -1, because it is already started? */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_start, nullpointer) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_start nullpointer")); /* NULL's */ EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_start(NULL, &contextData, DLT_LOG_DEFAULT)); /*EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_finish(&contextData)); */ EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_start(NULL, NULL, DLT_LOG_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_start(&context, NULL, DLT_LOG_DEFAULT)); /*EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_finish(&contextData)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_start_id */ TEST(t_dlt_user_log_write_start_id, normal) { DltContext context; DltContextData contextData; uint32_t messageid; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_start_id normal")); /* the defined enum values for log level */ messageid = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_DEFAULT, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_OFF, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_FATAL, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_ERROR, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_WARN, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_INFO, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_DEBUG, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_VERBOSE, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); messageid = UINT32_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_DEFAULT, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_OFF, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_FATAL, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_ERROR, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_WARN, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_INFO, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_DEBUG, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_VERBOSE, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_start_id, abnormal) { DltContext context; /* TODO: DltContextData contextData; */ /* TODO: uint32_t messageid; */ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_start_id abnormal")); /* undefined values for DltLogLevelType */ /* shouldn't it return -1? */ /* TODO: messageid = 0; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_start_id(&context, &contextData, (DltLogLevelType)-100, messageid)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_start_id(&context, &contextData, (DltLogLevelType)-10, messageid)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_start_id(&context, &contextData, (DltLogLevelType)10, messageid)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_start_id(&context, &contextData, (DltLogLevelType)100, messageid)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_start_id, startstartfinish) { DltContext context; DltContextData contextData; uint32_t messageid; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_start_id startstartfinish")); messageid = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_DEFAULT, messageid)); /* shouldn't it return -1, because it is already started? */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_DEFAULT, messageid)); */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_start_id, nullpointer) { DltContext context; uint32_t messageid; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_start_id nullpointer")); /* NULL's */ messageid = 0; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_start_id(NULL, &contextData, DLT_LOG_DEFAULT, messageid)); /*EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_finish(&contextData)); */ EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_start_id(NULL, NULL, DLT_LOG_DEFAULT, messageid)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_start_id(&context, NULL, DLT_LOG_DEFAULT, messageid)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_finish */ TEST(t_dlt_user_log_write_finish, finish) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_start finish")); /* finish without start */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_finish(NULL)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_finish(&contextData)); */ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_finish finish")); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_finish(&contextData)); */ /* finish with start and initialized context */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); /* 2nd finish */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_finish(&contextData)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_finish */ TEST(t_dlt_user_log_write_finish, finish_with_timestamp) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_finish finish")); /* finish with start and initialized context */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); contextData.use_timestamp = DLT_USER_TIMESTAMP; contextData.user_timestamp = UINT32_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_bool */ TEST(t_dlt_user_log_write_bool, normal) { DltContext context; DltContextData contextData; uint8_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_bool normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = true; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_bool(&contextData, data)); data = false; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_bool(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_bool, abnormal) { DltContext context; DltContextData contextData; /* TODO: uint8_t data; */ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_bool abnormal")); /* abnormal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* TODO: data = 2; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_bool(&contextData, data)); */ /* TODO: data = 100; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_bool(&contextData, data)); */ /* TODO: data = UINT8_MAX; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_bool(&contextData, data)); */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_bool, nullpointer) { DltContext context; uint8_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_bool nullpointer")); /* NULL */ data = true; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_bool(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_float32 */ TEST(t_dlt_user_log_write_float32, normal) { DltContext context; DltContextData contextData; float32_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_float32 normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = 3.141592653589793238; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float32(&contextData, data)); data = -3.141592653589793238; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float32(&contextData, data)); data = 0.; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float32(&contextData, data)); data = -0.; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float32(&contextData, data)); data = FLT_MIN; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float32(&contextData, data)); data = FLT_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float32(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_float32, nullpointer) { DltContext context; float32_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_float32 nullpointer")); /* NULL */ data = 1.; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_float32(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_float64 */ TEST(t_dlt_user_log_write_float64, normal) { DltContext context; DltContextData contextData; double data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_float64 normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = 3.14159265358979323846; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float64(&contextData, data)); data = -3.14159265358979323846; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float64(&contextData, data)); data = 0.; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float64(&contextData, data)); data = -0.; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float64(&contextData, data)); data = DBL_MIN; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float64(&contextData, data)); data = DBL_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_float64(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_float64, nullpointer) { DltContext context; double data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_float64 nullpointer")); /* NULL */ data = 1.; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_float64(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_uint */ TEST(t_dlt_user_log_write_uint, normal) { DltContext context; DltContextData contextData; unsigned int data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint(&contextData, data)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint(&contextData, data)); data = UINT_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint, abnormal) { DltContext context; DltContextData contextData; /* TODO: unsigned int data; */ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint abnormal")); /* abnormal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* TODO: data = -1; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint(&contextData, data)); */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint, nullpointer) { DltContext context; unsigned int data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_uint8 */ TEST(t_dlt_user_log_write_uint8, normal) { DltContext context; DltContextData contextData; uint8_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint8 normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8(&contextData, data)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8(&contextData, data)); data = UINT8_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint8, nullpointer) { DltContext context; uint8_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint8 nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint8(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_uint16 */ TEST(t_dlt_user_log_write_uint16, normal) { DltContext context; DltContextData contextData; uint16_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint16 normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16(&contextData, data)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16(&contextData, data)); data = UINT16_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint16, nullpointer) { DltContext context; uint16_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint16 nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint16(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_uint32 */ TEST(t_dlt_user_log_write_uint32, normal) { DltContext context; DltContextData contextData; uint32_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint32 normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32(&contextData, data)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32(&contextData, data)); data = UINT32_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint32, nullpointer) { DltContext context; uint32_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint32 nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint32(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_uint64 */ TEST(t_dlt_user_log_write_uint64, normal) { DltContext context; DltContextData contextData; uint64_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint64 normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64(&contextData, data)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64(&contextData, data)); data = UINT64_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint64, nullpointer) { DltContext context; uint64_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint64 nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint64(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_uint8_formatted */ TEST(t_dlt_user_log_write_uint8_formatted, normal) { DltContext context; DltContextData contextData; uint8_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint8_formatted normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_BIN16)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_BIN16)); data = UINT8_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint8_formatted(&contextData, data, DLT_FORMAT_BIN16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint8_formatted, abnormal) { DltContext context; DltContextData contextData; /* TODO: uint8_t data; */ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint8_formatted abnormal")); /* abnormal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* TODO: data = 1; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint8_formatted(&contextData, data, (DltFormatType)-100)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint8_formatted(&contextData, data, (DltFormatType)-10)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint8_formatted(&contextData, data, (DltFormatType)10)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint8_formatted(&contextData, data, (DltFormatType)100)); */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint8_formatted, nullpointer) { DltContext context; uint8_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint8_formatted nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint8_formatted(NULL, data, DLT_FORMAT_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint8_formatted(NULL, data, DLT_FORMAT_HEX8)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint8_formatted(NULL, data, DLT_FORMAT_HEX16)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint8_formatted(NULL, data, DLT_FORMAT_HEX32)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint8_formatted(NULL, data, DLT_FORMAT_HEX64)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint8_formatted(NULL, data, DLT_FORMAT_BIN8)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint8_formatted(NULL, data, DLT_FORMAT_BIN16)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_uint16_formatted */ TEST(t_dlt_user_log_write_uint16_formatted, normal) { DltContext context; DltContextData contextData; uint16_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint16_formatted normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_BIN16)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_BIN16)); data = UINT16_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint16_formatted(&contextData, data, DLT_FORMAT_BIN16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint16_formatted, abnormal) { DltContext context; DltContextData contextData; /* TODO: uint16_t data; */ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint16_formatted abnormal")); /* abnormal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* TODO: data = 1; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint16_formatted(&contextData, data, (DltFormatType)-100)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint16_formatted(&contextData, data, (DltFormatType)-10)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint16_formatted(&contextData, data, (DltFormatType)10)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint16_formatted(&contextData, data, (DltFormatType)100)); */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint16_formatted, nullpointer) { DltContext context; uint16_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint16_formatted nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint16_formatted(NULL, data, DLT_FORMAT_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint16_formatted(NULL, data, DLT_FORMAT_HEX8)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint16_formatted(NULL, data, DLT_FORMAT_HEX16)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint16_formatted(NULL, data, DLT_FORMAT_HEX32)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint16_formatted(NULL, data, DLT_FORMAT_HEX64)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint16_formatted(NULL, data, DLT_FORMAT_BIN8)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint16_formatted(NULL, data, DLT_FORMAT_BIN16)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_uint32_formatted */ TEST(t_dlt_user_log_write_uint32_formatted, normal) { DltContext context; DltContextData contextData; uint32_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint32_formatted normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_BIN16)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_BIN16)); data = UINT32_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint32_formatted(&contextData, data, DLT_FORMAT_BIN16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint32_formatted, abnormal) { DltContext context; DltContextData contextData; /* TODO: uint32_t data; */ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint32_formatted abnormal")); /* abnormal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* TODO: data = 1; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint32_formatted(&contextData, data, (DltFormatType)-100)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint32_formatted(&contextData, data, (DltFormatType)-10)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint32_formatted(&contextData, data, (DltFormatType)10)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint32_formatted(&contextData, data, (DltFormatType)100)); */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint32_formatted, nullpointer) { DltContext context; uint32_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint32_formatted nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint32_formatted(NULL, data, DLT_FORMAT_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint32_formatted(NULL, data, DLT_FORMAT_HEX8)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint32_formatted(NULL, data, DLT_FORMAT_HEX16)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint32_formatted(NULL, data, DLT_FORMAT_HEX32)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint32_formatted(NULL, data, DLT_FORMAT_HEX64)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint32_formatted(NULL, data, DLT_FORMAT_BIN8)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint32_formatted(NULL, data, DLT_FORMAT_BIN16)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_uint64_formatted */ TEST(t_dlt_user_log_write_uint64_formatted, normal) { DltContext context; DltContextData contextData; uint64_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint64_formatted normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_BIN16)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_BIN16)); data = UINT64_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_uint64_formatted(&contextData, data, DLT_FORMAT_BIN16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint64_formatted, abnormal) { DltContext context; DltContextData contextData; /* TODO: uint64_t data; */ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint64_formatted abnormal")); /* abnormal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* TODO: data = 1; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint64_formatted(&contextData, data, (DltFormatType)-100)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint64_formatted(&contextData, data, (DltFormatType)-10)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint64_formatted(&contextData, data, (DltFormatType)10)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_uint64_formatted(&contextData, data, (DltFormatType)100)); */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_uint64_formatted, nullpointer) { DltContext context; uint64_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_uint64_formatted nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint64_formatted(NULL, data, DLT_FORMAT_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint64_formatted(NULL, data, DLT_FORMAT_HEX8)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint64_formatted(NULL, data, DLT_FORMAT_HEX16)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint64_formatted(NULL, data, DLT_FORMAT_HEX32)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint64_formatted(NULL, data, DLT_FORMAT_HEX64)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint64_formatted(NULL, data, DLT_FORMAT_BIN8)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_uint64_formatted(NULL, data, DLT_FORMAT_BIN16)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_int */ TEST(t_dlt_user_log_write_int, normal) { DltContext context; DltContextData contextData; int data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_int normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = -1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int(&contextData, data)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int(&contextData, data)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int(&contextData, data)); data = INT_MIN; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int(&contextData, data)); data = INT_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_int, nullpointer) { DltContext context; int data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_int nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_int(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_int8 */ TEST(t_dlt_user_log_write_int8, normal) { DltContext context; DltContextData contextData; int8_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_int8 normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = -1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int8(&contextData, data)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int8(&contextData, data)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int8(&contextData, data)); data = INT8_MIN; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int8(&contextData, data)); data = INT8_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int8(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_int8, nullpointer) { DltContext context; int8_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_int8 nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_int8(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_int16 */ TEST(t_dlt_user_log_write_int16, normal) { DltContext context; DltContextData contextData; int16_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_int16 normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = -1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int16(&contextData, data)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int16(&contextData, data)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int16(&contextData, data)); data = INT16_MIN; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int16(&contextData, data)); data = INT16_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int16(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_int16, nullpointer) { DltContext context; int16_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_int16 nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_int16(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_int32 */ TEST(t_dlt_user_log_write_int32, normal) { DltContext context; DltContextData contextData; int32_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_int32 normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = -1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int32(&contextData, data)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int32(&contextData, data)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int32(&contextData, data)); data = INT32_MIN; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int32(&contextData, data)); data = INT32_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int32(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_int32, nullpointer) { DltContext context; int32_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_int32 nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_int32(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_int64 */ TEST(t_dlt_user_log_write_int64, normal) { DltContext context; DltContextData contextData; int64_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_int64 normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); data = -1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int64(&contextData, data)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int64(&contextData, data)); data = 1; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int64(&contextData, data)); data = INT64_MIN; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int64(&contextData, data)); data = INT64_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_int64(&contextData, data)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_int64, nullpointer) { DltContext context; int64_t data; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_int64 nullpointer")); /* NULL */ data = 1; EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_int64(NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_string */ TEST(t_dlt_user_log_write_string, normal) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_string normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); const char *text1 = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_string(&contextData, text1)); const char *text2 = ""; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_string(&contextData, text2)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /** * Send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated and appended STR_TRUNCATED_MESSAGE at * the end of received message. */ TEST(t_dlt_user_log_write_string, normal_dlt_log_msg_truncated_because_exceed_the_buffer_length_in_verbose_mode) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t send_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; char *message = NULL; char *expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_string normal_dlt_log_msg_truncated_because_exceed_the_buffer_length_in_verbose_mode")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* Create the message exceed buffer length 10 bytes */ send_message_length = DLT_USER_BUF_MAX_SIZE + 10; message = (char *)(malloc(send_message_length)); ASSERT_TRUE(message != NULL) << "Failed to allocate memory."; for (index = 0; index < send_message_length; index++) { message[index] = '#'; } message[send_message_length - 1] = '\0'; /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; /* Create the expected message */ expected_message_length = DLT_USER_BUF_MAX_SIZE - package_description_size; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size = expected_message_length - str_truncate_message_length; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '#'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_string(&contextData, message)); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); free(message); message = NULL; free(expected_message); expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); } /** * In Non-Verbose mode, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated and appended STR_TRUNCATED_MESSAGE at * the end of received message. */ TEST(t_dlt_user_log_write_string, normal_dlt_log_msg_truncated_because_exceed_the_buffer_length_in_non_verbose_mode) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t send_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; char *message = NULL; char *expected_message = NULL; dlt_nonverbose_mode(); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_string normal_dlt_log_msg_truncated_because_exceed_the_buffer_length_in_non_verbose_mode")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* Create the message exceed buffer length 10 bytes */ send_message_length = DLT_USER_BUF_MAX_SIZE + 10; message = (char *)(malloc(send_message_length)); ASSERT_TRUE(message != NULL) << "Failed to allocate memory."; for (index = 0; index < send_message_length; index++) { message[index] = '#'; } message[send_message_length - 1] = '\0'; /** * In Non-Verbose Mode: * package_description_size = Message ID (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; /* Create the expected message */ expected_message_length = DLT_USER_BUF_MAX_SIZE - package_description_size; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size = expected_message_length - str_truncate_message_length; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '#'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_string(&contextData, message)); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); free(message); message = NULL; free(expected_message); expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore verbose mode */ dlt_verbose_mode(); } /** * Set the DLT_USER_ENV_LOG_MSG_BUF_LEN to 46, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated and appended STR_TRUNCATED_MESSAGE at * the end of received message. * Note: dlt_init() will be called after testcase is finished to restore environment for other test cases */ TEST(t_dlt_user_log_write_string, normal_message_truncated_because_exceed_buffer_length_and_reduce_msg_buf_len_by_env_variable) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; uint16_t user_message_after_truncated_size = 0; const char *message = "$$$$###############################################"; char *expected_message = NULL; /** * Re-initialize the dlt with dlt user buffer size from DLT_USER_ENV_LOG_MSG_BUF_LEN environment variable * to simulate use case the dlt user buffer size only available 4 bytes for store user message. * Note: 46 bytes = package_description_size (6 bytes) + str_truncated_message_length (35 bytes) + 4 bytes user message + 1 byte NULL terminator. */ user_message_after_truncated_size = 4; EXPECT_EQ(DLT_RETURN_OK, dlt_free()); setenv(DLT_USER_ENV_LOG_MSG_BUF_LEN, "46", 1); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_string normal_message_truncated_because_exceed_buffer_length_and_reduce_msg_buf_len_by_env_variable")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_string(&contextData, message)); /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; /* Create the expected message */ expected_message_length = user_message_after_truncated_size + str_truncate_message_length; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '$'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore the dlt with dlt user buffer size as default */ EXPECT_EQ(DLT_RETURN_OK, dlt_free()); unsetenv(DLT_USER_ENV_LOG_MSG_BUF_LEN); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); } /** * Set DLT_USER_ENV_LOG_MSG_BUF_LEN to 35 bytes and send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_string() will be returned DLT_RETURN_USER_BUFFER_FULL because the DLT_USER_ENV_LOG_MSG_BUF_LEN * does not have enough space to store truncate message STR_TRUNCATED_MESSAGE * Note: dlt_init() will be called after testcase is finished to restore environment for other test cases */ TEST(t_dlt_user_log_write_string, normal_DLT_USER_ENV_LOG_MSG_BUF_LEN_does_not_enough_space_for_truncated_message) { DltContext context; DltContextData contextData; uint16_t package_description_size = 0; const char *message = "################################################################################"; /** * Re-initialize the dlt with dlt user buffer size from DLT_USER_ENV_LOG_MSG_BUF_LEN environment variable * to simulate use case the dlt user buffer size not enough minimum space to store data even the truncate notice message. * Note: The minimum buffer to store the truncate notice message is 42 bytes. */ EXPECT_EQ(DLT_RETURN_OK, dlt_free()); setenv(DLT_USER_ENV_LOG_MSG_BUF_LEN, "35", 1); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_string normal_DLT_USER_ENV_LOG_MSG_BUF_LEN_does_not_enough_space_for_truncated_message")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_string(&contextData, message)); /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); ASSERT_STREQ("", (char *)(contextData.buffer + package_description_size)); EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore the dlt with dlt user buffer size as default */ EXPECT_EQ(DLT_RETURN_OK, dlt_free()); unsetenv(DLT_USER_ENV_LOG_MSG_BUF_LEN); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); } /** * Set DLT_USER_ENV_LOG_MSG_BUF_LEN to 42 bytes and send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * receive message will be STR_TRUNCATED_MESSAGE * Note: dlt_init() will be called after testcase is finished to restore environment for other test cases */ TEST(t_dlt_user_log_write_string, normal_DLT_USER_ENV_LOG_MSG_BUF_LEN_fix_truncate_message) { DltContext context; DltContextData contextData; uint16_t package_description_size = 0; const char *message = "################################################################################"; /** * Re-initialize the dlt with dlt user buffer size from DLT_USER_ENV_LOG_MSG_BUF_LEN environment variable * to simulate use case the dlt user buffer size just fixed to truncate message STR_TRUNCATED_MESSAGE * Note: 42 bytes = package_description_size (6 bytes) + str_truncated_message_length (35 bytes) + 1 byte NULL terminator. */ EXPECT_EQ(DLT_RETURN_OK, dlt_free()); setenv(DLT_USER_ENV_LOG_MSG_BUF_LEN, "42", 1); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c normal_DLT_USER_ENV_LOG_MSG_BUF_LEN_fix_truncate_message")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_string(&contextData, message)); /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); ASSERT_STREQ(STR_TRUNCATED_MESSAGE, (char *)(contextData.buffer + package_description_size)); EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore the dlt with dlt user buffer size as default */ EXPECT_EQ(DLT_RETURN_OK, dlt_free()); unsetenv(DLT_USER_ENV_LOG_MSG_BUF_LEN); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); } TEST(t_dlt_user_log_write_string, nullpointer) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_string nullpointer")); /* NULL */ const char *text1 = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_string(NULL, text1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_string(NULL, NULL)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_string(&contextData, NULL)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_sized_string */ TEST(t_dlt_user_log_write_sized_string, normal) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_sized_string normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); const char text1[] = "TheQuickBrownFox"; const char *arg1_start = strchr(text1, 'Q'); const size_t arg1_len = 5; /* from the above string, send only the substring "Quick" */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_sized_string(&contextData, arg1_start, arg1_len)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_constant_string */ TEST(t_dlt_user_log_write_constant_string, normal) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_constant_string normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); const char *text1 = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_constant_string(&contextData, text1)); const char *text2 = ""; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_constant_string(&contextData, text2)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /** * Send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_constant_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated and appended STR_TRUNCATED_MESSAGE at * the end of received message. */ TEST(t_dlt_user_log_write_constant_string, normal_too_long_message_is_truncated_and_appended_notice_message_in_verbose_mode) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t send_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; char *message = NULL; char *expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_constant_string normal_too_long_message_is_truncated_and_appended_notice_message_in_verbose_mode")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; /* Create the message exceed DLT_USER_ENV_LOG_MSG_BUF_LEN 10 bytes */ send_message_length = DLT_USER_BUF_MAX_SIZE + 10; message = (char *)(malloc(send_message_length)); ASSERT_TRUE(message != NULL) << "Failed to allocate memory."; for (index = 0; index < send_message_length; index++) { message[index] = '#'; } message[send_message_length - 1] = '\0'; /* Create the expected message */ expected_message_length = DLT_USER_BUF_MAX_SIZE - package_description_size; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size = expected_message_length - str_truncate_message_length; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '#'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_constant_string(&contextData, message)); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); free(message); message = NULL; free(expected_message); expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); } /** * In Non-Verbose Mode * Expectation: dlt_user_log_write_constant_string() will not package and send message. Return DLT_RETURN_OK */ TEST(t_dlt_user_log_write_constant_string, normal_do_nothing_in_non_verbose_mode) { DltContext context; DltContextData contextData; const char *message = "message"; dlt_nonverbose_mode(); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_constant_string normal_do_nothing_in_non_verbose_mode")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_constant_string(&contextData, message)); EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore verbose mode */ dlt_verbose_mode(); } TEST(t_dlt_user_log_write_constant_string, nullpointer) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_constant_string nullpointer")); /* NULL */ const char *text1 = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_constant_string(NULL, text1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_constant_string(NULL, NULL)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_constant_string(&contextData, NULL)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_sized_constant_string */ TEST(t_dlt_user_log_write_sized_constant_string, normal) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_sized_constant_string normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); const char text1[] = "TheQuickBrownFox"; const char *arg1_start = strchr(text1, 'Q'); const size_t arg1_len = 5; /* from the above string, send only the substring "Quick" */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_sized_constant_string(&contextData, arg1_start, arg1_len)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_utf8_string */ TEST(t_dlt_user_log_write_utf8_string, normal) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); const char *text1 = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_utf8_string(&contextData, text1)); const char *text2 = ""; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_utf8_string(&contextData, text2)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /** * Send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at one byte utf-8 and appended STR_TRUNCATED_MESSAGE at * the end of received message. */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_1byte_in_verbose_mode) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t send_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; char *message = NULL; char *expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_1byte_in_verbose_mode")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* Create the message exceed buffer length 10 bytes which have '$' character (utf-8 1 byte) right before truncate position */ send_message_length = DLT_USER_BUF_MAX_SIZE + 10; message = (char *)(malloc(send_message_length)); ASSERT_TRUE(message != NULL) << "Failed to allocate memory."; for (index = 0; index < send_message_length; index++) { message[index] = '#'; } message[send_message_length - 1] = '\0'; /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); /* Fill '$' before truncate position */ str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; index = (DLT_USER_BUF_MAX_SIZE - package_description_size - str_truncate_message_length - 1); message[index] = '$'; /* Create the expected message */ expected_message_length = DLT_USER_BUF_MAX_SIZE - package_description_size; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size = expected_message_length - str_truncate_message_length; for (index = 0; index < (user_message_after_truncated_size - 1); index++) { expected_message[index] = '#'; } expected_message[user_message_after_truncated_size - 1] = '$'; strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); free(message); message = NULL; free(expected_message); message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); } /** * In Non-Verbose Mode, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at one byte utf-8 and appended STR_TRUNCATED_MESSAGE at * the end of received message. */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_1byte_in_non_verbose_mode) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t send_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; char *message = NULL; char *expected_message = NULL; dlt_nonverbose_mode(); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_1byte_in_non_verbose_mode")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* Create the message exceed buffer length 10 bytes which have '$' character (utf-8 1 byte) right before truncate position */ send_message_length = DLT_USER_BUF_MAX_SIZE + 10; message = (char *)(malloc(send_message_length)); ASSERT_TRUE(message != NULL) << "Failed to allocate memory."; for (index = 0; index < send_message_length; index++) { message[index] = '#'; } message[send_message_length - 1] = '\0'; str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; /** * In Non-Verbose Mode: * package_description_size = Message ID (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); /* Fill '$' before truncate position */ index = (DLT_USER_BUF_MAX_SIZE - package_description_size - str_truncate_message_length - 1); message[index] = '$'; /* Create the expected message */ expected_message_length = DLT_USER_BUF_MAX_SIZE - package_description_size; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size = expected_message_length - str_truncate_message_length; for (index = 0; index < (user_message_after_truncated_size - 1); index++) { expected_message[index] = '#'; } expected_message[user_message_after_truncated_size - 1] = '$'; strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); free(message); message = NULL; free(expected_message); message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore verbose mode */ dlt_verbose_mode(); } /** * Set the DLT_USER_ENV_LOG_MSG_BUF_LEN to 46, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at the whole utf-8 1 bytes and appended * STR_TRUNCATED_MESSAGE at the end of received message. * Note: dlt_init() will be called after testcase is finished to restore environment for other testcases */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_1bytes_and_reduce_msg_buf_len_by_env_variable) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t expected_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t user_message_after_truncated_size = 0; const char *message = "$$$$###############################################"; char *expected_message = NULL; /** * Re-initialize the dlt with dlt user buffer size from DLT_USER_ENV_LOG_MSG_BUF_LEN environment variable * to simulate use case the dlt user buffer size only available 4 bytes for store user message. * Note: 46 bytes = package_description_size (6 bytes) + str_truncated_message_length (35 bytes) + 4 bytes user message + 1 byte NULL terminator. */ user_message_after_truncated_size = 4; EXPECT_EQ(DLT_RETURN_OK, dlt_free()); setenv(DLT_USER_ENV_LOG_MSG_BUF_LEN, "46", 1); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_1bytes_and_reduce_msg_buf_len_by_env_variable")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; /* Create the expected message */ expected_message_length = user_message_after_truncated_size + str_truncate_message_length; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '$'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore the dlt with dlt user buffer size as default */ EXPECT_EQ(DLT_RETURN_OK, dlt_free()); unsetenv(DLT_USER_ENV_LOG_MSG_BUF_LEN); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); } /** * In Non-Verbose Mode, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at the middle of utf-8 2 bytes, the rest of this utf-8 character will * be removed completely, after that appended STR_TRUNCATED_MESSAGE at * the end of received message. */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_2bytes_in_verbose_mode) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t send_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; uint16_t remaining_byte_truncated_utf8_character = 0; const char *utf8_2byte_character = "Âĸ"; char *message = NULL; char *expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_2bytes_in_verbose_mode")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* Create the message contain the 'Âĸ' (2 bytes utf-8 character) and last byte of this character is exceed buffer length */ send_message_length = DLT_USER_BUF_MAX_SIZE + 10; message = (char *)(malloc(send_message_length)); ASSERT_TRUE(message != NULL) << "Failed to allocate memory."; for (index = 0; index < send_message_length; index++) { message[index] = '#'; } message[send_message_length - 1] = '\0'; /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); /** * Fill the "Âĸ" character at the position which the last byte of this character is exceed the buffer length and * expectation is it will be truncated 1 more bytes in the character sequence */ str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; remaining_byte_truncated_utf8_character = 1; index = (DLT_USER_BUF_MAX_SIZE - package_description_size - str_truncate_message_length - remaining_byte_truncated_utf8_character); strncpy(message + index, utf8_2byte_character, strlen(utf8_2byte_character)); /* Create the expected message */ expected_message_length = DLT_USER_BUF_MAX_SIZE - package_description_size; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size = expected_message_length - str_truncate_message_length - remaining_byte_truncated_utf8_character; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '#'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); free(message); message = NULL; free(expected_message); expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); } /** * In Non-Verbose Mode, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at the middle of utf-8 2 bytes, the rest of this utf-8 character will * be removed completely, after that appended STR_TRUNCATED_MESSAGE at * the end of received message. */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_2bytes_in_non_verbose_mode) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t send_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; uint16_t remaining_byte_truncated_utf8_character = 0; const char *utf8_2byte_character = "Âĸ"; char *message = NULL; char *expected_message = NULL; dlt_nonverbose_mode(); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_2bytes_in_non_verbose_mode")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* Create the message contain the 'Âĸ' (2 bytes utf-8 character) and last byte of this character is exceed buffer length */ send_message_length = DLT_USER_BUF_MAX_SIZE + 10; message = (char *)(malloc(send_message_length)); ASSERT_TRUE(message != NULL) << "Failed to allocate memory."; for (index = 0; index < send_message_length; index++) { message[index] = '#'; } message[send_message_length - 1] = '\0'; /** * In Non-Verbose Mode: * package_description_size = Message ID (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); /** * Fill the "Âĸ" character at the position which the last byte of this character is exceed the buffer length and * expectation is it will be truncated 1 more bytes in the character sequence */ str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; remaining_byte_truncated_utf8_character = 1; index = (DLT_USER_BUF_MAX_SIZE - package_description_size - str_truncate_message_length - remaining_byte_truncated_utf8_character); strncpy(message + index, utf8_2byte_character, strlen(utf8_2byte_character)); /* Create the expected message */ expected_message_length = DLT_USER_BUF_MAX_SIZE - package_description_size; expected_message = (char *)(malloc(DLT_USER_BUF_MAX_SIZE)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size = expected_message_length - str_truncate_message_length - remaining_byte_truncated_utf8_character; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '#'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); free(message); message = NULL; free(expected_message); expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore verbose mode */ dlt_verbose_mode(); } /** * Set the DLT_USER_ENV_LOG_MSG_BUF_LEN to 46, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at the middle of utf-8 2 bytes, the rest of this utf-8 character will * be removed completely, after that appended STR_TRUNCATED_MESSAGE at * the end of received message. * Note: dlt_init() will be called after testcase is finished to restore environment for other testcases */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_2bytes_and_reduce_msg_buf_len_by_env_variable) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t remaining_byte_truncated_utf8_character = 0; const char *message = "$$$Âĸ###############################################"; char *expected_message = NULL; /** * Re-initialize the dlt with dlt user buffer size from DLT_USER_ENV_LOG_MSG_BUF_LEN environment variable * to simulate use case the dlt user buffer size only available 4 bytes for store user message. * Note: 46 bytes = package_description_size (6 bytes) + str_truncated_message_length (35 bytes) + 4 bytes user message + 1 byte NULL terminator. */ user_message_after_truncated_size = 4; EXPECT_EQ(DLT_RETURN_OK, dlt_free()); setenv(DLT_USER_ENV_LOG_MSG_BUF_LEN, "46", 1); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_2bytes_and_reduce_msg_buf_len_by_env_variable")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; /* Create the expected message */ remaining_byte_truncated_utf8_character = 1; expected_message_length = user_message_after_truncated_size - remaining_byte_truncated_utf8_character + str_truncate_message_length; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size -= remaining_byte_truncated_utf8_character; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '$'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore the dlt with dlt user buffer size as default */ EXPECT_EQ(DLT_RETURN_OK, dlt_free()); unsetenv(DLT_USER_ENV_LOG_MSG_BUF_LEN); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); } /** * In Non-Verbose Mode, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at the middle of utf-8 3 bytes, the rest of this utf-8 character will * be removed completely, after that appended STR_TRUNCATED_MESSAGE at * the end of received message. */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_3bytes_in_verbose_mode) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t send_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; uint16_t remaining_byte_truncated_utf8_character = 0; const char *utf8_3byte_character = "â‚Ŧ"; char *message = NULL; char *expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_3bytes_in_verbose_mode")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* Create the message contain the 'â‚Ŧ' (3 bytes utf-8 character) and last byte of this character is exceed buffer length */ send_message_length = DLT_USER_BUF_MAX_SIZE + 10; message = (char *)(malloc(send_message_length)); ASSERT_TRUE(message != NULL) << "Failed to allocate memory."; for (index = 0; index < send_message_length; index++) { message[index] = '#'; } message[send_message_length - 1] = '\0'; /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); /** * Fill the "â‚Ŧ" character at the position which the last byte of this character is exceed the buffer length and * expectation is it will be truncated 2 more bytes in the character sequence */ str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; remaining_byte_truncated_utf8_character = 2; index = (DLT_USER_BUF_MAX_SIZE - package_description_size - str_truncate_message_length - remaining_byte_truncated_utf8_character); strncpy(message + index, utf8_3byte_character, strlen(utf8_3byte_character)); /* Create the expected message */ expected_message_length = DLT_USER_BUF_MAX_SIZE - package_description_size; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size = expected_message_length - str_truncate_message_length - remaining_byte_truncated_utf8_character; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '#'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); free(message); message = NULL; free(expected_message); expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); } /** * In Non-Verbose Mode, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at the middle of utf-8 3 bytes, the rest of this utf-8 character will * be removed completely, after that appended STR_TRUNCATED_MESSAGE at * the end of received message. */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_3bytes_in_non_verbose_mode) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t send_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; uint16_t remaining_byte_truncated_utf8_character = 0; const char *utf8_3byte_character = "â‚Ŧ"; char *message = NULL; char *expected_message = NULL; dlt_nonverbose_mode(); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_3bytes_in_non_verbose_mode")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* Create the message contain the 'â‚Ŧ' (3 bytes utf-8 character) and last byte of this character is exceed buffer length */ send_message_length = DLT_USER_BUF_MAX_SIZE + 10; message = (char *)(malloc(send_message_length)); ASSERT_TRUE(message != NULL) << "Failed to allocate memory."; for (index = 0; index < send_message_length; index++) { message[index] = '#'; } message[send_message_length - 1] = '\0'; /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); /** * Fill the "â‚Ŧ" character at the position which the last byte of this character is exceed the buffer length and * expectation is it will be truncated 2 more bytes in the character sequence */ str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; remaining_byte_truncated_utf8_character = 2; index = (DLT_USER_BUF_MAX_SIZE - package_description_size - str_truncate_message_length - remaining_byte_truncated_utf8_character); strncpy(message + index, utf8_3byte_character, strlen(utf8_3byte_character)); /* Create the expected message */ expected_message_length = DLT_USER_BUF_MAX_SIZE - package_description_size; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size = expected_message_length - str_truncate_message_length - remaining_byte_truncated_utf8_character; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '#'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); free(message); message = NULL; free(expected_message); expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore verbose mode */ dlt_verbose_mode(); } /** * Set the DLT_USER_ENV_LOG_MSG_BUF_LEN to 46, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at the middle of utf-8 3 bytes, the rest of this utf-8 character will * be removed completely, after that appended STR_TRUNCATED_MESSAGE at * the end of received message. * Note: dlt_init() will be called after testcase is finished to restore environment for other testcases */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_3bytes_and_reduce_msg_buf_len_by_env_variable) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t remaining_byte_truncated_utf8_character = 0; const char *message = "$$â‚Ŧ###############################################"; char *expected_message = NULL; /** * Re-initialize the dlt with dlt user buffer size from DLT_USER_ENV_LOG_MSG_BUF_LEN environment variable * to simulate use case the dlt user buffer size only available 4 bytes for store user message. * Note: 46 bytes = package_description_size (6 bytes) + str_truncated_message_length (35 bytes) + 4 bytes user message + 1 byte NULL terminator. */ user_message_after_truncated_size = 4; EXPECT_EQ(DLT_RETURN_OK, dlt_free()); setenv(DLT_USER_ENV_LOG_MSG_BUF_LEN, "46", 1); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_3bytes_and_reduce_msg_buf_len_by_env_variable")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; /* Create the expected message */ remaining_byte_truncated_utf8_character = 2; expected_message_length = user_message_after_truncated_size - remaining_byte_truncated_utf8_character + str_truncate_message_length; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size -= remaining_byte_truncated_utf8_character; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '$'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore the dlt with dlt user buffer size as default */ EXPECT_EQ(DLT_RETURN_OK, dlt_free()); unsetenv(DLT_USER_ENV_LOG_MSG_BUF_LEN); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); } /** * In Non-Verbose Mode, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at the middle of utf-8 4 bytes, the rest of this utf-8 character will * be removed completely, after that appended STR_TRUNCATED_MESSAGE at * the end of received message. */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_4bytes_in_verbose_mode) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t send_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; uint16_t remaining_byte_truncated_utf8_character = 0; const char *utf8_4byte_character = "𐍈"; char *message = NULL; char *expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_4bytes_in_verbose_mode")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* Create the message contain the '𐍈' (4 bytes utf-8 character) and last byte of this character is exceed buffer length */ send_message_length = DLT_USER_BUF_MAX_SIZE + 10; message = (char *)(malloc(send_message_length)); ASSERT_TRUE(message != NULL) << "Failed to allocate memory."; for (index = 0; index < send_message_length; index++) { message[index] = '#'; } message[send_message_length - 1] = '\0'; /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); /** * Fill the "𐍈" character at the position which the last byte of this character is exceed the buffer length and * expectation is it will be truncated 3 more bytes in the character sequence */ str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; remaining_byte_truncated_utf8_character = 3; index = (DLT_USER_BUF_MAX_SIZE - package_description_size - str_truncate_message_length - remaining_byte_truncated_utf8_character); strncpy(message + index, utf8_4byte_character, strlen(utf8_4byte_character)); /* Create the expected message */ expected_message_length = DLT_USER_BUF_MAX_SIZE - package_description_size; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size = expected_message_length - str_truncate_message_length - remaining_byte_truncated_utf8_character; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '#'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); free(message); message = NULL; free(expected_message); expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); } /** * In Non-Verbose Mode, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at the middle of utf-8 4 bytes, the rest of this utf-8 character will * be removed completely, after that appended STR_TRUNCATED_MESSAGE at * the end of received message. */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_4bytes_in_non_verbose_mode) { DltContext context; DltContextData contextData; uint16_t index = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t send_message_length = 0; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; uint16_t remaining_byte_truncated_utf8_character = 0; const char *utf8_4byte_character = "𐍈"; char *message = NULL; char *expected_message = NULL; dlt_nonverbose_mode(); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_4bytes_in_non_verbose_mode")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); /* Create the message contain the '𐍈' (4 bytes utf-8 character) and last byte of this character is exceed buffer length */ send_message_length = DLT_USER_BUF_MAX_SIZE + 10; message = (char *)(malloc(send_message_length)); ASSERT_TRUE(message != NULL) << "Failed to allocate memory."; for (index = 0; index < send_message_length; index++) { message[index] = '#'; } message[send_message_length - 1] = '\0'; /** * In Non-Verbose Mode: * package_description_size = Message ID (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); /** * Fill the "𐍈" character at the position which the last byte of this character is exceed the buffer length and * expectation is it will be truncated 3 more bytes in the character sequence */ str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; remaining_byte_truncated_utf8_character = 3; index = (DLT_USER_BUF_MAX_SIZE - package_description_size - str_truncate_message_length - remaining_byte_truncated_utf8_character); strncpy(message + index, utf8_4byte_character, strlen(utf8_4byte_character)); /* Create the expected message */ expected_message_length = DLT_USER_BUF_MAX_SIZE - package_description_size; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; user_message_after_truncated_size = expected_message_length - str_truncate_message_length - remaining_byte_truncated_utf8_character; for (index = 0; index < user_message_after_truncated_size; index++) { expected_message[index] = '#'; } strncpy(expected_message + user_message_after_truncated_size, STR_TRUNCATED_MESSAGE, str_truncate_message_length); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); free(message); message = NULL; free(expected_message); expected_message = NULL; EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore verbose mode */ dlt_verbose_mode(); } /** * Set the DLT_USER_ENV_LOG_MSG_BUF_LEN to 46, send a message which has the length exceed DLT_USER_ENV_LOG_MSG_BUF_LEN * Expectation: dlt_user_log_write_utf8_string() will be returned DLT_RETURN_USER_BUFFER_FULL and * message will be truncated at the middle of utf-8 4 bytes, the rest of this utf-8 character will * be removed completely, after that appended STR_TRUNCATED_MESSAGE at * the end of received message. * Note: dlt_init() will be called after testcase is finished to restore environment for other testcases */ TEST(t_dlt_user_log_write_utf8_string, normal_message_truncated_at_utf8_4bytes_and_reduce_msg_buf_len_by_env_variable) { DltContext context; DltContextData contextData; uint16_t str_truncate_message_length = 0; uint16_t expected_message_length = 0; uint16_t package_description_size = 0; uint16_t user_message_after_truncated_size = 0; uint16_t remaining_byte_truncated_utf8_character = 0; const char *message = "$𐍈###############################################"; char *expected_message = NULL; /** * Re-initialize the dlt with dlt user buffer size from DLT_USER_ENV_LOG_MSG_BUF_LEN environment variable * to simulate use case the dlt user buffer size only available 4 bytes for store user message. * Note: 46 bytes = package_description_size (6 bytes) + str_truncated_message_length (35 bytes) + 4 bytes user message + 1 byte NULL terminator. */ user_message_after_truncated_size = 4; EXPECT_EQ(DLT_RETURN_OK, dlt_free()); setenv(DLT_USER_ENV_LOG_MSG_BUF_LEN, "46", 1); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string normal_message_truncated_at_utf8_4bytes_and_reduce_msg_buf_len_by_env_variable")); /* Normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_utf8_string(&contextData, message)); /** * In Verbose Mode: * package_description_size = Type info (32 bits) + Description of data payload of type string (16 bits) */ package_description_size = sizeof(uint32_t) + sizeof(uint16_t); str_truncate_message_length = strlen(STR_TRUNCATED_MESSAGE) + 1; /* Create the expected message */ remaining_byte_truncated_utf8_character = 3; expected_message_length = user_message_after_truncated_size - remaining_byte_truncated_utf8_character + str_truncate_message_length; expected_message = (char *)(malloc(expected_message_length)); ASSERT_TRUE(expected_message != NULL) << "Failed to allocate memory."; expected_message[0] = '$'; strncpy(expected_message + 1, STR_TRUNCATED_MESSAGE, str_truncate_message_length); ASSERT_STREQ(expected_message, (char *)(contextData.buffer + package_description_size)); EXPECT_EQ(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); /* Restore the dlt with dlt user buffer size as default */ EXPECT_EQ(DLT_RETURN_OK, dlt_free()); unsetenv(DLT_USER_ENV_LOG_MSG_BUF_LEN); EXPECT_EQ(DLT_RETURN_OK, dlt_init()); } TEST(t_dlt_user_log_write_utf8_string, nullpointer) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_utf8_string nullpointer")); /* NULL */ const char *text1 = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_utf8_string(NULL, text1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_utf8_string(NULL, NULL)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_utf8_string(&contextData, NULL)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_sized_utf8_string */ TEST(t_dlt_user_log_write_sized_utf8_string, partial_string) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_sized_utf8_string normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); const char text1[] = "TheQuickBrownFox"; const char* arg1_start = strchr(text1, 'Q'); const size_t arg1_len = 5; /* from the above string, send only the substring "Quick" */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_sized_utf8_string(&contextData, arg1_start, arg1_len)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_sized_utf8_string, nullpointer) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_sized_utf8_string nullpointer")); /* NULL */ const char *text1 = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_sized_utf8_string(NULL, text1, 5)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_sized_utf8_string(NULL, NULL, 5)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_sized_utf8_string(&contextData, NULL, 5)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_raw */ TEST(t_dlt_user_log_write_raw, normal) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_raw normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); char text1[6] = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw(&contextData, text1, 6)); char text2[1] = ""; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw(&contextData, text2, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_raw, nullpointer) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_raw nullpointer")); /* NULL */ char text1[6] = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_raw(NULL, text1, 6)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_raw(NULL, NULL, 0)); EXPECT_GE(DLT_RETURN_OK, dlt_user_log_write_raw(&contextData, NULL, 0)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_raw(&contextData, NULL, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_log_write_raw_formatted */ TEST(t_dlt_user_log_write_raw_formatted, normal) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_raw_formatted normal")); /* normal values */ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); char text1[6] = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text1, 6, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text1, 6, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text1, 6, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text1, 6, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text1, 6, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text1, 6, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text1, 6, DLT_FORMAT_BIN16)); char text2[1] = ""; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text2, 0, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text2, 0, DLT_FORMAT_HEX8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text2, 0, DLT_FORMAT_HEX16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text2, 0, DLT_FORMAT_HEX32)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text2, 0, DLT_FORMAT_HEX64)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text2, 0, DLT_FORMAT_BIN8)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, text2, 0, DLT_FORMAT_BIN16)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_raw_formatted, abnormal) { DltContext context; DltContextData contextData; uint16_t length = DLT_USER_BUF_MAX_SIZE + 10; char buffer[length]; memset(buffer, '\000', length); for (int i = 0; i < length; i++) buffer[i] = 'X'; EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_raw_formatted abnormal")); EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_user_log_write_raw_formatted(&contextData, buffer, length, DLT_FORMAT_DEFAULT)); /* undefined values for DltFormatType */ /* shouldn't it return -1? */ /* char text1[6] = "test1"; */ /* EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_raw_formatted(&contextData, text1, 6, (DltFormatType)-100)); */ /* EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_raw_formatted(&contextData, text1, 6, (DltFormatType)-10)); */ /* EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_raw_formatted(&contextData, text1, 6, (DltFormatType)10)); */ /* EXPECT_GE(DLT_RETURN_ERROR,dlt_user_log_write_raw_formatted(&contextData, text1, 6, (DltFormatType)100)); */ EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_log_write_raw_formatted, nullpointer) { DltContext context; DltContextData contextData; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_raw_formatted nullpointer")); /* NULL */ char text1[6] = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_raw_formatted(NULL, text1, 6, DLT_FORMAT_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_raw_formatted(NULL, NULL, 0, DLT_FORMAT_DEFAULT)); EXPECT_GE(DLT_RETURN_OK, dlt_user_log_write_raw_formatted(&contextData, NULL, 0, DLT_FORMAT_DEFAULT)); EXPECT_GE(DLT_RETURN_ERROR, dlt_user_log_write_raw_formatted(&contextData, NULL, 1, DLT_FORMAT_DEFAULT)); EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /* * int dlt_log_string(DltContext *handle,DltLogLevelType loglevel, const char *text); * int dlt_log_string_int(DltContext *handle,DltLogLevelType loglevel, const char *text, int data); * int dlt_log_string_uint(DltContext *handle,DltLogLevelType loglevel, const char *text, unsigned int data); * int dlt_log_int(DltContext *handle,DltLogLevelType loglevel, int data); * int dlt_log_uint(DltContext *handle,DltLogLevelType loglevel, unsigned int data); * int dlt_log_raw(DltContext *handle,DltLogLevelType loglevel, void *data,uint16_t length); * int dlt_log_marker(); */ /*/////////////////////////////////////// */ /* t_dlt_log_string */ TEST(t_dlt_log_string, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_string normal")); /* normal values */ const char text1[6] = "test1"; EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_DEFAULT, text1)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_OFF, text1)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_FATAL, text1)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_ERROR, text1)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_WARN, text1)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_INFO, text1)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_VERBOSE, text1)); const char text2[1] = ""; EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_DEFAULT, text2)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_OFF, text2)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_FATAL, text2)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_ERROR, text2)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_WARN, text2)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_INFO, text2)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string(&context, DLT_LOG_VERBOSE, text2)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_string, abnormal) { DltContext context; EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_string abnormal")); uint16_t length = DLT_USER_BUF_MAX_SIZE + 10; char buffer[length]; memset(buffer, '\000', length); for (int i = 0; i < length - 1; i++) buffer[i] = 'X'; EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_log_string(&context, DLT_LOG_INFO, buffer)); /* undefined values for DltLogLevelType */ /* shouldn't it return -1? */ /* TODO: const char text1[6] = "test1"; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string(&context, (DltLogLevelType)-100, text1)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string(&context, (DltLogLevelType)-10, text1)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string(&context, (DltLogLevelType)10, text1)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string(&context, (DltLogLevelType)100, text1)); */ EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_string, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_string nullpointer")); /* NULL */ char text1[6] = "test1"; EXPECT_GE(DLT_RETURN_ERROR, dlt_log_string(NULL, DLT_LOG_DEFAULT, text1)); EXPECT_GE(DLT_RETURN_ERROR, dlt_log_string(NULL, DLT_LOG_DEFAULT, NULL)); EXPECT_GE(DLT_RETURN_ERROR, dlt_log_string(&context, DLT_LOG_DEFAULT, NULL)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_log_string_int */ TEST(t_dlt_log_string_int, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_string_int normal")); /* normal values */ const char text1[6] = "test1"; int data = INT_MIN; EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_DEFAULT, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_OFF, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_FATAL, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_ERROR, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_WARN, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_INFO, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_VERBOSE, text1, data)); const char text2[1] = ""; data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_DEFAULT, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_OFF, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_FATAL, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_ERROR, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_WARN, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_INFO, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_VERBOSE, text2, data)); data = INT_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_DEFAULT, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_OFF, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_FATAL, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_ERROR, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_WARN, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_INFO, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_int(&context, DLT_LOG_VERBOSE, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_string_int, abnormal) { DltContext context; EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_string_int abnormal")); uint16_t length = DLT_USER_BUF_MAX_SIZE + 10; char buffer[length]; memset(buffer, '\000', length); for (int i = 0; i < length - 1; i++) buffer[i] = 'X'; EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_log_string_int(&context, DLT_LOG_INFO, buffer, 1)); /* undefined values for DltLogLevelType */ /* shouldn't it return -1? */ /* TODO: const char text1[6] = "test1"; */ /* TODO: int data = 1; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string_int(&context, (DltLogLevelType)-100, text1, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string_int(&context, (DltLogLevelType)-10, text1, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string_int(&context, (DltLogLevelType)10, text1, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string_int(&context, (DltLogLevelType)100, text1, data)); */ EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_string_int, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_string_int nullpointer")); /* NULL */ char text1[6] = "test1"; int data = 0; EXPECT_GE(DLT_RETURN_ERROR, dlt_log_string_int(NULL, DLT_LOG_DEFAULT, text1, data)); EXPECT_GE(DLT_RETURN_ERROR, dlt_log_string_int(NULL, DLT_LOG_DEFAULT, NULL, data)); EXPECT_GE(DLT_RETURN_ERROR, dlt_log_string_int(&context, DLT_LOG_DEFAULT, NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_log_string_uint */ TEST(t_dlt_log_string_uint, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_string_uint normal")); /* normal values */ const char text1[6] = "test1"; unsigned int data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_DEFAULT, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_OFF, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_FATAL, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_ERROR, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_WARN, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_INFO, text1, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_VERBOSE, text1, data)); const char text2[1] = ""; data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_DEFAULT, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_OFF, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_FATAL, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_ERROR, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_WARN, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_INFO, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_VERBOSE, text2, data)); data = UINT_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_DEFAULT, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_OFF, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_FATAL, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_ERROR, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_WARN, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_INFO, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_string_uint(&context, DLT_LOG_VERBOSE, text2, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_string_uint, abnormal) { DltContext context; EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_string_uint abnormal")); uint16_t length = DLT_USER_BUF_MAX_SIZE + 10; char buffer[length]; memset(buffer, '\000', DLT_USER_BUF_MAX_SIZE + 10); for (int i = 0; i < length - 1; i++) buffer[i] = 'X'; EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_log_string_uint(&context, DLT_LOG_INFO, buffer, 1)); /* undefined values for DltLogLevelType */ /* shouldn't it return -1? */ /* TODO: const char text1[6] = "test1"; */ /* TODO: unsigned int data = 1; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string_uint(&context, (DltLogLevelType)-100, text1, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string_uint(&context, (DltLogLevelType)-10, text1, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string_uint(&context, (DltLogLevelType)10, text1, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_string_uint(&context, (DltLogLevelType)100, text1, data)); */ EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_string_uint, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_string_uint nullpointer")); /* NULL */ char text1[6] = "test1"; unsigned int data = 0; EXPECT_GE(DLT_RETURN_ERROR, dlt_log_string_uint(NULL, DLT_LOG_DEFAULT, text1, data)); EXPECT_GE(DLT_RETURN_ERROR, dlt_log_string_uint(NULL, DLT_LOG_DEFAULT, NULL, data)); EXPECT_GE(DLT_RETURN_ERROR, dlt_log_string_uint(&context, DLT_LOG_DEFAULT, NULL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_log_int */ TEST(t_dlt_log_int, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_int normal")); /* normal values */ int data = INT_MIN; EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_DEFAULT, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_OFF, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_FATAL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_ERROR, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_WARN, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_INFO, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_VERBOSE, data)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_DEFAULT, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_OFF, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_FATAL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_ERROR, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_WARN, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_INFO, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_VERBOSE, data)); data = INT_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_DEFAULT, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_OFF, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_FATAL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_ERROR, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_WARN, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_INFO, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_int(&context, DLT_LOG_VERBOSE, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_int, abnormal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_int abnormal")); /* undefined values for DltLogLevelType */ /* shouldn't it return -1? */ /* TODO: int data = 1; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_int(&context, (DltLogLevelType)-100, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_int(&context, (DltLogLevelType)-10, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_int(&context, (DltLogLevelType)10, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_int(&context, (DltLogLevelType)100, data)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_int, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_int nullpointer")); /* NULL */ int data = 0; EXPECT_GE(DLT_RETURN_ERROR, dlt_log_int(NULL, DLT_LOG_DEFAULT, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_log_uint */ TEST(t_dlt_log_uint, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_uint normal")); /* normal values */ unsigned int data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_DEFAULT, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_OFF, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_FATAL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_ERROR, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_WARN, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_INFO, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_VERBOSE, data)); data = 0; EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_DEFAULT, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_OFF, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_FATAL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_ERROR, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_WARN, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_INFO, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_VERBOSE, data)); data = UINT_MAX; EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_DEFAULT, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_OFF, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_FATAL, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_ERROR, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_WARN, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_INFO, data)); EXPECT_LE(DLT_RETURN_OK, dlt_log_uint(&context, DLT_LOG_VERBOSE, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_uint, abnormal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_uint abnormal")); /* undefined values for DltLogLevelType */ /* shouldn't it return -1? */ /* TODO: unsigned int data = 1; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_uint(&context, (DltLogLevelType)-100, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_uint(&context, (DltLogLevelType)-10, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_uint(&context, (DltLogLevelType)10, data)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_uint(&context, (DltLogLevelType)100, data)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_uint, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_uint nullpointer")); /* NULL */ unsigned int data = 0; EXPECT_GE(DLT_RETURN_ERROR, dlt_log_uint(NULL, DLT_LOG_DEFAULT, data)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_log_raw */ TEST(t_dlt_log_raw, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_raw normal")); /* normal values */ char data[5] = "test"; uint16_t length = 4; EXPECT_LE(DLT_RETURN_OK, dlt_log_raw(&context, DLT_LOG_DEFAULT, data, length)); EXPECT_LE(DLT_RETURN_OK, dlt_log_raw(&context, DLT_LOG_OFF, data, length)); EXPECT_LE(DLT_RETURN_OK, dlt_log_raw(&context, DLT_LOG_FATAL, data, length)); EXPECT_LE(DLT_RETURN_OK, dlt_log_raw(&context, DLT_LOG_ERROR, data, length)); EXPECT_LE(DLT_RETURN_OK, dlt_log_raw(&context, DLT_LOG_WARN, data, length)); EXPECT_LE(DLT_RETURN_OK, dlt_log_raw(&context, DLT_LOG_INFO, data, length)); EXPECT_LE(DLT_RETURN_OK, dlt_log_raw(&context, DLT_LOG_VERBOSE, data, length)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_raw, abnormal) { DltContext context; EXPECT_EQ(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_EQ(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_raw abnormal")); uint16_t length = DLT_USER_BUF_MAX_SIZE + 10; char buffer[length]; memset(buffer, '\000', length); for (int i = 0; i < length; i++) buffer[i] = 'X'; EXPECT_EQ(DLT_RETURN_USER_BUFFER_FULL, dlt_log_raw(&context, DLT_LOG_INFO, buffer, length)); /* undefined values for DltLogLevelType */ /* shouldn't it return -1? */ /* char data[5] = "test"; */ /* TODO: uint16_t length = 4; */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_raw(&context, (DltLogLevelType)-100, data, length)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_raw(&context, (DltLogLevelType)-10, data, length)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_raw(&context, (DltLogLevelType)10, data, length)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_raw(&context, (DltLogLevelType)100, data, length)); */ /* zero length */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_log_raw(&context, DLT_LOG_DEFAULT, data, 0)); */ /* negative length */ /* EXPECT_GE(DLT_RETURN_ERROR,dlt_log_raw(&context, DLT_LOG_DEFAULT, data, -1)); */ /* EXPECT_GE(DLT_RETURN_ERROR,dlt_log_raw(&context, DLT_LOG_DEFAULT, data, -100)); */ EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_EQ(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_log_raw, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_raw nullpointer")); /* NULL */ char data[5] = "test"; uint16_t length = 4; EXPECT_GE(DLT_RETURN_ERROR, dlt_log_raw(NULL, DLT_LOG_DEFAULT, data, length)); EXPECT_GE(DLT_RETURN_ERROR, dlt_log_raw(NULL, DLT_LOG_DEFAULT, NULL, length)); EXPECT_GE(DLT_RETURN_ERROR, dlt_log_raw(&context, DLT_LOG_DEFAULT, NULL, length)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_log_marker */ TEST(t_dlt_log_marker, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_log_marker normal")); /* normal */ EXPECT_LE(DLT_RETURN_OK, dlt_log_marker()); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_register_app */ TEST(t_dlt_register_app, normal) { EXPECT_LE(DLT_RETURN_OK, dlt_register_app("T", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TU", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUS", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_register_app, abnormal) { EXPECT_GE(DLT_RETURN_ERROR, dlt_register_app("", "dlt_user.c tests")); EXPECT_GE(DLT_RETURN_ERROR, dlt_unregister_app()); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_app("TUSR1", "dlt_user.c tests")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_app()); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_app("TUSR123445667", "dlt_user.c tests")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_app()); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_app("TUSR", "")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_app()); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_app("TUSR", NULL)); */ } TEST(t_dlt_register_app, nullpointer) { EXPECT_GE(DLT_RETURN_ERROR, dlt_register_app(NULL, NULL)); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_app(NULL, "dlt_user.c tests")); } /*/////////////////////////////////////// */ /* t_dlt_unregister_app */ TEST(t_dlt_unregister_app, normal) { EXPECT_LE(DLT_RETURN_OK, dlt_register_app("T", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TU", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUS", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_unregister_app, abnormal) { EXPECT_GE(DLT_RETURN_ERROR, dlt_unregister_app()); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_app("", "dlt_user.c tests")); EXPECT_GE(DLT_RETURN_ERROR, dlt_unregister_app()); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_app("TUSR1", "dlt_user.c tests")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_app()); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_app("TUSR123445667", "dlt_user.c tests")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_app()); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_app("TUSR", "")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_app()); */ } /*/////////////////////////////////////// */ /* t_dlt_register_context */ TEST(t_dlt_register_context, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_register_context normal")); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_register_context, abnormal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(&context, "", "d")); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "T", "")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(&context, "", "")); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST1", "")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST1", "1")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST1234567890", "")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST1234567890", "1")); */ EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_register_context normal")); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_register_context normal")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_register_context normal")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_register_context normal")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_register_context normal")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST", NULL)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_register_context, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(&context, NULL, "dlt_user.c t_dlt_register_context normal")); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(&context, NULL, NULL)); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(NULL, "TEST", NULL)); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(NULL, NULL, "dlt_user.c t_dlt_register_context normal")); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(NULL, NULL, NULL)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_register_context_ll_ts */ TEST(t_dlt_register_context_ll_ts, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, DLT_TRACE_STATUS_OFF)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_FATAL, DLT_TRACE_STATUS_OFF)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_ERROR, DLT_TRACE_STATUS_OFF)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_WARN, DLT_TRACE_STATUS_OFF)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_INFO, DLT_TRACE_STATUS_OFF)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_DEBUG, DLT_TRACE_STATUS_OFF)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_VERBOSE, DLT_TRACE_STATUS_OFF)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_FATAL, DLT_TRACE_STATUS_ON)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_ERROR, DLT_TRACE_STATUS_ON)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_WARN, DLT_TRACE_STATUS_ON)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_INFO, DLT_TRACE_STATUS_ON)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_DEBUG, DLT_TRACE_STATUS_ON)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_VERBOSE, DLT_TRACE_STATUS_ON)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_register_context_ll_ts, abnormal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context_ll_ts(&context, "", "d", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "T", "", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context_ll_ts(&context, "", "", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST1", "", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST1", "1", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST1234567890", "", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST1234567890", "1", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); */ EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, DLT_TRACE_STATUS_ON)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); /* DLT_LOG_DEFAULT and DLT_TRACE_STATUS_DEFAULT not allowed */ /* TODO: Why not? */ /* EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_DEFAULT, DLT_TRACE_STATUS_OFF)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_DEFAULT, DLT_TRACE_STATUS_DEFAULT)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, DLT_TRACE_STATUS_DEFAULT)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* abnormal values for loglevel and tracestatus */ EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", -3, DLT_TRACE_STATUS_OFF)); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", 100, DLT_TRACE_STATUS_OFF)); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, -3)); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ EXPECT_EQ(DLT_RETURN_WRONG_PARAMETER, dlt_register_context_ll_ts(&context, "TEST", "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, 100)); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context_ll_ts(&context, "TEST", NULL, DLT_LOG_OFF, DLT_TRACE_STATUS_OFF)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_register_context_ll_ts, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context_ll_ts(&context, NULL, "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, DLT_TRACE_STATUS_OFF)); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context_ll_ts(&context, NULL, NULL, DLT_LOG_OFF, DLT_TRACE_STATUS_OFF)); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context_ll_ts(NULL, "TEST", NULL, DLT_LOG_OFF, DLT_TRACE_STATUS_OFF)); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context_ll_ts(NULL, NULL, "dlt_user.c t_dlt_register_context_ll_ts normal", DLT_LOG_OFF, DLT_TRACE_STATUS_OFF)); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context_ll_ts(NULL, NULL, NULL, DLT_LOG_OFF, DLT_TRACE_STATUS_OFF)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_unregister_context */ TEST(t_dlt_unregister_context, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_unregister_context normal")); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_unregister_context, abnormal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(&context, "", "d")); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "T", "")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(&context, "", "")); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST1", "")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST1", "1")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST1234567890", "")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_unregister_context(&context)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST1234567890", "1")); */ EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_unregister_context normal")); /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_unregister_context normal")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_unregister_context normal")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_unregister_context normal")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_unregister_context normal")); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_register_context(&context, "TEST", NULL)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_unregister_context, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(&context, NULL, "dlt_user.c t_dlt_unregister_context normal")); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(&context, NULL, NULL)); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(NULL, "TEST", NULL)); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(NULL, NULL, "dlt_user.c t_dlt_unregister_context normal")); EXPECT_GE(DLT_RETURN_ERROR, dlt_register_context(NULL, NULL, NULL)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_register_injection_callback */ int dlt_user_injection_callback(uint32_t /*service_id*/, void */*data*/, uint32_t /*length*/) { return 0; } TEST(t_dlt_register_injection_callback, normal) { DltContext context; /* TODO: uint32_t service_id; */ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_register_injection_callback normal")); /* TODO: service_id = 0x123; */ /* TODO: EXPECT_LE(DLT_RETURN_OK,dlt_register_injection_callback(&context, service_id, dlt_user_injection_callback)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_register_log_level_changed_callback */ void dlt_user_log_level_changed_callback(char /*context_id*/[DLT_ID_SIZE], uint8_t /*log_level*/, uint8_t /*trace_status*/) {} TEST(t_dlt_register_log_level_changed_callback, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_register_log_level_changed_callback normal")); EXPECT_LE(DLT_RETURN_OK, dlt_register_log_level_changed_callback(&context, dlt_user_log_level_changed_callback)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } #ifdef DLT_NETWORK_TRACE_ENABLE /*/////////////////////////////////////// */ /* t_dlt_user_trace_network */ TEST(t_dlt_user_trace_network, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_trace_network normal")); char header[16]; for (char i = 0; i < 16; ++i) header[(int)i] = i; char payload[32]; for (char i = 0; i < 32; ++i) payload[(int)i] = i; EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network(&context, DLT_NW_TRACE_IPC, 16, header, 32, payload)); EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network(&context, DLT_NW_TRACE_CAN, 16, header, 32, payload)); EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network(&context, DLT_NW_TRACE_FLEXRAY, 16, header, 32, payload)); EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network(&context, DLT_NW_TRACE_MOST, 16, header, 32, payload)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_trace_network, abnormal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_trace_network abnormal")); /* TODO: char header[16]; */ /* TODO: for(char i = 0; i < 16; ++i) */ /* TODO: { */ /* TODO: header[(int)i] = i; */ /* TODO: } */ /* TODO: char payload[32]; */ /* TODO: for(char i = 0; i < 32; ++i) */ /* TODO: { */ /* TODO: payload[(int)i] = i; */ /* TODO: } */ /* data length = 0. Does this make sense? */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network(&context, DLT_NW_TRACE_IPC, 0, header, 32, payload)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network(&context, DLT_NW_TRACE_CAN, 0, header, 0, payload)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network(&context, DLT_NW_TRACE_FLEXRAY, 16, header, 0, payload)); */ /* invalid DltNetworkTraceType value */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network(&context, (DltNetworkTraceType)-100, 16, header, 32, payload)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network(&context, (DltNetworkTraceType)-10, 16, header, 32, payload)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network(&context, (DltNetworkTraceType)10, 16, header, 32, payload)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network(&context, (DltNetworkTraceType)100, 16, header, 32, payload)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_trace_network, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_trace_network nullpointer")); char header[16]; for (char i = 0; i < 16; ++i) header[(int)i] = i; char payload[32]; for (char i = 0; i < 32; ++i) payload[(int)i] = i; /* what to expect when giving in NULL pointer? */ EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network(&context, DLT_NW_TRACE_IPC, 16, NULL, 32, payload)); EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_user_trace_network(&context, DLT_NW_TRACE_CAN, 16, header, 32, NULL)); EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_user_trace_network(&context, DLT_NW_TRACE_FLEXRAY, 16, NULL, 32, NULL)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_trace_network_truncated */ TEST(t_dlt_user_trace_network_truncated, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_trace_network_truncated normal")); char header[16]; for (char i = 0; i < 16; ++i) header[(int)i] = i; char payload[32]; for (char i = 0; i < 32; ++i) payload[(int)i] = i; EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network_truncated(&context, DLT_NW_TRACE_IPC, 16, header, 32, payload, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network_truncated(&context, DLT_NW_TRACE_CAN, 16, header, 32, payload, 1)); EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network_truncated(&context, DLT_NW_TRACE_FLEXRAY, 16, header, 32, payload, -1)); EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network_truncated(&context, DLT_NW_TRACE_MOST, 16, header, 32, payload, 10)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_trace_network_truncated, abnormal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_trace_network_truncated abnormal")); /* TODO: char header[16]; */ /* TODO: for(char i = 0; i < 16; ++i) */ /* TODO: { */ /* TODO: header[(int)i] = i; */ /* TODO: } */ /* TODO: char payload[32]; */ /* TODO: for(char i = 0; i < 32; ++i) */ /* TODO: { */ /* TODO: payload[(int)i] = i; */ /* TODO: } */ /* data length = 0. Does this make sense? */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_truncated(&context, DLT_NW_TRACE_IPC, 0, header, 32, payload, 0)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_truncated(&context, DLT_NW_TRACE_CAN, 0, header, 0, payload, 0)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_truncated(&context, DLT_NW_TRACE_FLEXRAY, 16, header, 0, payload, 0)); */ /* invalid DltNetworkTraceType value */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_truncated(&context, (DltNetworkTraceType)-100, 16, header, 32, payload, 0)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_truncated(&context, (DltNetworkTraceType)-10, 16, header, 32, payload, 0)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_truncated(&context, (DltNetworkTraceType)10, 16, header, 32, payload, 0)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_truncated(&context, (DltNetworkTraceType)100, 16, header, 32, payload, 0)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_trace_network_truncated, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_trace_network_truncated nullpointer")); char header[16]; for (char i = 0; i < 16; ++i) header[(int)i] = i; char payload[32]; for (char i = 0; i < 32; ++i) payload[(int)i] = i; /* what to expect when giving in NULL pointer? */ EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network_truncated(&context, DLT_NW_TRACE_IPC, 16, NULL, 32, payload, 0)); EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_user_trace_network_truncated(&context, DLT_NW_TRACE_CAN, 16, header, 32, NULL, 0)); EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_user_trace_network_truncated(&context, DLT_NW_TRACE_FLEXRAY, 16, NULL, 32, NULL, 0)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } /*/////////////////////////////////////// */ /* t_dlt_user_trace_network_segmented */ TEST(t_dlt_user_trace_network_segmented, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_trace_network_segmented normal")); char header[16]; for (char i = 0; i < 16; ++i) header[(int)i] = i; char payload[32]; for (char i = 0; i < 32; ++i) payload[(int)i] = i; EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network_segmented(&context, DLT_NW_TRACE_IPC, 16, header, 32, payload)); EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network_segmented(&context, DLT_NW_TRACE_CAN, 16, header, 32, payload)); EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network_segmented(&context, DLT_NW_TRACE_FLEXRAY, 16, header, 32, payload)); EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network_segmented(&context, DLT_NW_TRACE_MOST, 16, header, 32, payload)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_trace_network_segmented, abnormal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_trace_network_segmented abnormal")); /* TODO: char header[16]; */ /* TODO: for(char i = 0; i < 16; ++i) */ /* TODO: { */ /* TODO: header[(int)i] = i; */ /* TODO: } */ /* TODO: char payload[32]; */ /* TODO: for(char i = 0; i < 32; ++i) */ /* TODO: { */ /* TODO: payload[(int)i] = i; */ /* TODO: } */ /* data length = 0. Does this make sense? */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_segmented(&context, DLT_NW_TRACE_IPC, 0, header, 32, payload)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_segmented(&context, DLT_NW_TRACE_CAN, 0, header, 0, payload)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_segmented(&context, DLT_NW_TRACE_FLEXRAY, 16, header, 0, payload)); */ /* invalid DltNetworkTraceType value */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_segmented(&context, (DltNetworkTraceType)-100, 16, header, 32, payload)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_segmented(&context, (DltNetworkTraceType)-10, 16, header, 32, payload)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_segmented(&context, (DltNetworkTraceType)10, 16, header, 32, payload)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_user_trace_network_segmented(&context, (DltNetworkTraceType)100, 16, header, 32, payload)); */ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_trace_network_segmented, nullpointer) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_trace_network_segmented nullpointer")); char header[16]; for (char i = 0; i < 16; ++i) header[(int)i] = i; char payload[32]; for (char i = 0; i < 32; ++i) payload[(int)i] = i; /* what to expect when giving in NULL pointer? */ EXPECT_LE(DLT_RETURN_OK, dlt_user_trace_network_segmented(&context, DLT_NW_TRACE_IPC, 16, NULL, 32, payload)); EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_user_trace_network_segmented(&context, DLT_NW_TRACE_CAN, 16, header, 32, NULL)); EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_user_trace_network_segmented(&context, DLT_NW_TRACE_FLEXRAY, 16, NULL, 32, NULL)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } #endif /* DLT_NETWORK_TRACE_ENABLE */ /*/////////////////////////////////////// */ /* t_dlt_set_log_mode */ TEST(t_dlt_set_log_mode, normal) { EXPECT_LE(DLT_RETURN_OK, dlt_set_log_mode(DLT_USER_MODE_OFF)); EXPECT_LE(DLT_RETURN_OK, dlt_set_log_mode(DLT_USER_MODE_EXTERNAL)); EXPECT_LE(DLT_RETURN_OK, dlt_set_log_mode(DLT_USER_MODE_INTERNAL)); EXPECT_LE(DLT_RETURN_OK, dlt_set_log_mode(DLT_USER_MODE_BOTH)); } TEST(t_dlt_set_log_mode, abnormal) { /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_set_log_mode(DLT_USER_MODE_UNDEFINED)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_set_log_mode((DltUserLogMode)-100)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_set_log_mode((DltUserLogMode)-10)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_set_log_mode((DltUserLogMode)10)); */ /* TODO: EXPECT_GE(DLT_RETURN_ERROR,dlt_set_log_mode((DltUserLogMode)100)); */ } /*/////////////////////////////////////// */ /* t_dlt_get_log_state */ TEST(t_dlt_get_log_state, normal) { sleep(1); dlt_init_common(); EXPECT_EQ(-1, dlt_get_log_state()); } /*/////////////////////////////////////// */ /* t_dlt_verbose_mode */ TEST(t_dlt_verbose_mode, normal) { EXPECT_LE(DLT_RETURN_OK, dlt_verbose_mode()); } /*/////////////////////////////////////// */ /* t_dlt_nonverbose_mode */ TEST(t_dlt_nonverbose_mode, normal) { EXPECT_LE(DLT_RETURN_OK, dlt_nonverbose_mode()); } /*/////////////////////////////////////// */ /* free dlt */ TEST(t_dlt_free, onetime) { EXPECT_EQ(DLT_RETURN_OK, dlt_free()); } /*/////////////////////////////////////// */ /* dlt_user_is_logLevel_enabled */ TEST(t_dlt_user_is_logLevel_enabled, normal) { DltContext context; EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests")); EXPECT_LE(DLT_RETURN_OK, dlt_register_context_ll_ts(&context, "ILLE", "t_dlt_user_is_logLevel_enabled context", DLT_LOG_INFO, -2)); /* DLT_USER_TRACE_STATUS_NOT_SET */ EXPECT_LE(DLT_RETURN_TRUE, dlt_user_is_logLevel_enabled(&context, DLT_LOG_FATAL)); EXPECT_LE(DLT_RETURN_TRUE, dlt_user_is_logLevel_enabled(&context, DLT_LOG_ERROR)); EXPECT_LE(DLT_RETURN_TRUE, dlt_user_is_logLevel_enabled(&context, DLT_LOG_WARN)); EXPECT_LE(DLT_RETURN_TRUE, dlt_user_is_logLevel_enabled(&context, DLT_LOG_INFO)); EXPECT_LE(DLT_RETURN_LOGGING_DISABLED, dlt_user_is_logLevel_enabled(&context, DLT_LOG_DEBUG)); EXPECT_LE(DLT_RETURN_LOGGING_DISABLED, dlt_user_is_logLevel_enabled(&context, DLT_LOG_VERBOSE)); EXPECT_LE(DLT_RETURN_LOGGING_DISABLED, dlt_user_is_logLevel_enabled(&context, DLT_LOG_OFF)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context)); EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app()); } TEST(t_dlt_user_is_logLevel_enabled, nullpointer) { EXPECT_LE(DLT_RETURN_WRONG_PARAMETER, dlt_user_is_logLevel_enabled(NULL, DLT_LOG_FATAL)); } /*/////////////////////////////////////// */ /* main */ int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } dlt-daemon-2.18.6/tests/mod_system_logger/000077500000000000000000000000001377520261000205235ustar00rootroot00000000000000dlt-daemon-2.18.6/tests/mod_system_logger/Makefile000066400000000000000000000003021377520261000221560ustar00rootroot00000000000000obj-m := mod_system_logger.o KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean dlt-daemon-2.18.6/tests/mod_system_logger/mod_system_logger.c000066400000000000000000000015471377520261000244200ustar00rootroot00000000000000#include #include #include int i; static int system_proc_show(struct seq_file *m, void *v) { for (i = 0; i < 1000; i++) seq_printf(m, "Test Systemlogger %i\n", i); return 0; } static int system_proc_open(struct inode *inode, struct file *file) { return single_open(file, system_proc_show, NULL); } static const struct file_operations system_proc_fops = { .owner = THIS_MODULE, .open = system_proc_open, .read = seq_read, .llseek = seq_lseek, .release = single_release, }; static int __init system_proc_init(void) { proc_create("systemlogger", 0, NULL, &system_proc_fops); return 0; } static void __exit system_proc_exit(void) { remove_proc_entry("systemlogger", NULL); } MODULE_LICENSE("GPL"); module_init(system_proc_init); module_exit(system_proc_exit); dlt-daemon-2.18.6/tests/start_filetransfer_test.sh000077500000000000000000000010561377520261000223020ustar00rootroot00000000000000#!/bin/bash file="testfile_filetransfer.txt" fullpath="$(pwd)/testfile_filetransfer.txt" #start dlt-daemon dlt-daemon & sleep 1 #start dlt-test-receiver ./../build/tests/dlt_test_receiver -f localhost & sleep 1 #send file to daemon dlt-example-filetransfer $fullpath & sleep 1 #create md5 sum md5_1=($(md5sum $file)) md5_2=($(md5sum /tmp/$file)) echo $md5_1 echo $md5_2 #verify the sums tput setaf 1 if [ $md5_1 == $md5_2 ] then echo "Files are equal. Transfer succuess." else echo "File not equal. Error on transmission" fi tput setaf 7 pkill dlt-daemon dlt-daemon-2.18.6/tests/start_logstorage_test.sh000077500000000000000000000136311377520261000217660ustar00rootroot00000000000000#!/bin/sh ################################################################################ # SPDX license identifier: MPL-2.0 # # Copyright (C) 2016, Advanced Driver Information Technology # This code is developed by Advanced Driver Information Technology. # Copyright of Advanced Driver Information Technology, Bosch and DENSO. # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ################################################################################ ################################################################################ #file : dlt_logstorage_test.sh # #Descriptiom : Smoke testing for logstorage feature of DLT # #Author : Onkar Palkar #Email : onkar.palkar@wipro.com # #History : 8/6/2016 ################################################################################ # # Function: -cleanup() # # Description -Delete the tmpDltLog folder if it already present # # Return -Zero on success # -Non zero on failure # cleanup() { pathTmp=/tmp folderName=tmpDltLog ls $pathTmp | grep $folderName > /dev/null if [ $? -eq '0' ] then rm -rf $pathTmp/$folderName fi pidof dlt-daemon > /dev/null if [ $? -eq '0' ] then killall dlt-daemon if [ $? -ne '0' ] then echo "Failed to kill dlt-daemon" return 1 fi fi return 0 } # # Function: -setup() # # Description -Create tmpDltLog folder # -Add dlt.conf file in the tmpDltLog folder # -Add dlt_logstorage.conf file in the tmpDltLog folder # # Return -Zero on success # -Non zero on failure # setup() { which dlt-daemon > /dev/null if [ $? -ne '0' ] then echo "dlt-daemon not available" return 1 fi which dlt-example-user > /dev/null if [ $? -ne '0' ] then echo "dlt-example-user not available" return 1 fi which dlt-convert > /dev/null if [ $? -ne '0' ] then echo "dlt-convert not available" return 1 fi mkdir $pathTmp/$folderName if [ $? -ne '0' ] then echo "Error while creating folder tmpDltLog" return 1 fi touch $pathTmp/$folderName/dlt.conf if [ $? -ne '0' ] then echo "Error while creating dlt.conf file" return 1 fi echo "SendContextRegistration = 1" >>$pathTmp/$folderName/dlt.conf echo "ECUId = ECU1" >>$pathTmp/$folderName/dlt.conf echo "SharedMemorySize = 100000" >>$pathTmp/$folderName/dlt.conf echo "LoggingMode = 0" >>$pathTmp/$folderName/dlt.conf echo "LoggingLevel = 6" >>$pathTmp/$folderName/dlt.conf echo "LoggingFilename = /tmp/dlt.log" >>$pathTmp/$folderName/dlt.conf echo "TimeOutOnSend = 4" >>$pathTmp/$folderName/dlt.conf echo "RingbufferMinSize = 500000" >>$pathTmp/$folderName/dlt.conf echo "RingbufferMaxSize = 10000000" >>$pathTmp/$folderName/dlt.conf echo "RingbufferStepSize = 500000" >>$pathTmp/$folderName/dlt.conf echo "ControlSocketPath = /tmp/dlt-ctrl.sock" >>$pathTmp/$folderName/dlt.conf echo "OfflineLogstorageMaxDevices = 2" >>$pathTmp/$folderName/dlt.conf echo "OfflineLogstorageDirPath = $pathTmp/$folderName" >>$pathTmp/$folderName/dlt.conf echo "OfflineLogstorageTimestamp = 1" >>$pathTmp/$folderName/dlt.conf echo "OfflineLogstorageDelimiter = _" >>$pathTmp/$folderName/dlt.conf echo "OfflineLogstorageMaxCounter = 999" >>$pathTmp/$folderName/dlt.conf echo "OfflineLogstorageCacheSize = 30000" >>$pathTmp/$folderName/dlt.conf touch $pathTmp/$folderName/dlt_logstorage.conf if [ $? -ne '0' ] then echo "Error while creating dlt_logstorage.conf file" return 1 fi echo "[FILTER1]" >>$pathTmp/$folderName/dlt_logstorage.conf echo "LogAppName=LOG" >>$pathTmp/$folderName/dlt_logstorage.conf echo "ContextName=TEST" >>$pathTmp/$folderName/dlt_logstorage.conf echo "LogLevel=DLT_LOG_INFO" >>$pathTmp/$folderName/dlt_logstorage.conf echo "File=Test" >>$pathTmp/$folderName/dlt_logstorage.conf echo "FileSize=10000" >>$pathTmp/$folderName/dlt_logstorage.conf echo "NOFiles=1" >>$pathTmp/$folderName/dlt_logstorage.conf return 0 } # # Function: -startDaemonAndApp() # # Description -Kill daemon if it is already running # -Start dlt-daemon # -Start dlt-example-user # # Return -Zero on success # -Non zero on failure # startDaemonAndApp() { dlt-daemon -c $pathTmp/$folderName/dlt.conf -d > /dev/null dlt-example-user test_msg > /dev/null return 0 } # # Function: -verifyTest() # # Description -Verify count of messages # # Return -Zero on success # -Non zero on failure # verifyTest() { ls $pathTmp/$folderName | grep .dlt > /dev/null if [ $? -ne '0' ] then echo "Log file is not present" return 1 fi msgCount=`dlt-convert -c $pathTmp/$folderName/*.dlt` if [ $? -ne '0' ] then echo "Error while reading count in log file" return 1 fi echo $msgCount | grep 10 > /dev/null if [ $? -ne '0' ] then echo "Message count is incorrect" return 1 fi return 0 } ######################################################################################## #main function ######################################################################################## cleanup setup if [ $? -ne '0' ] then echo "Error in function setup()" cleanup return 1 fi startDaemonAndApp if [ $? -ne '0' ] then echo "Error in function startDaemonAndApp()" cleanup return 1 fi verifyTest if [ $? -eq '0' ] then echo "Test Passed" else echo "Test Failed" fi cleanup dlt-daemon-2.18.6/tests/start_multinode_test.sh000077500000000000000000000234671377520261000216300ustar00rootroot00000000000000#!/bin/sh ################################################################################ # SPDX license identifier: MPL-2.0 # # Copyright (C) 2016, Advanced Driver Information Technology # This code is developed by Advanced Driver Information Technology. # Copyright of Advanced Driver Information Technology, Bosch and DENSO. # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. ################################################################################ ################################################################################ #file : dlt_multinode_test.sh # #Description : Smoke testing for multinode feature of DLT # #Author Name : Onkar Palkar # Jeevan Ramakant Nagvekar #Email Id : onkar.palkar@wipro.com # jeevan.nagvekar1@wipro.com # #History : 31/07/2018 ################################################################################ ipaddr=127.0.0.1 # # Function: -getOSname() # # Description -Retrieves OS name # getOSname() { OS="`uname`" } # # Function: -cleanup() # # Description -Delete the dlt_test folder if it already present # -Check weather required binaries are avaiable or not # -Restore dlt_gateway.conf file # # Return -Zero on success # -Non zero on failure # cleanup() { tmpPath=/tmp tmpFolder=dlt_test gatewayFolderName=gateway passiveFolderName=passive tmpPassiveDIR=tmpPassive tmpLogFile=log_multinode.txt tmpLogAsciFile=log_multinode_a.txt if [ "$OS" = "QNX" ] then PIDOF() { slay -p $1 > /dev/null if [ $? -eq '0' ] then return 1 else return 0 fi } KILLALL() { slay -9 -f $1 > /dev/null if [ $? -eq '0' ] then return 1 else return 0 fi } else PIDOF() { pidof $1 > /dev/null return $? } KILLALL() { killall $1 > /dev/null return $? } fi cd $tmpPath PIDOF "dlt-daemon" if [ $? -eq '0' ] then KILLALL "dlt-daemon" if [ $? -ne '0' ] then echo "Failed to kill daemons" return 1 fi fi PIDOF "dlt-receive" if [ $? -eq '0' ] then KILLALL "dlt-receive" if [ $? -ne '0' ] then echo "Failed to kill dlt-receive" return 1 fi fi PIDOF "dlt-convert" if [ $? -eq '0' ] then KILLALL "dlt-convert" if [ $? -ne '0' ] then echo "Failed to kill dlt-convert" return 1 fi fi rm -rf $tmpPath/$tmpFolder >/dev/null return 0 } # # Function: -setupTest() # # Description -Create one gateway and passive folder # -Create and add dlt.conf and dlt_gateway.conf file in the gateway folder # -Create and add dlt.conf file in the passive folder # # Return -Zero on success # -Non zero on failure # setupTest() { which dlt-daemon > /dev/null if [ $? -ne '0' ] then echo "dlt-daemon is not available" return 1 fi which dlt-example-user > /dev/null if [ $? -ne '0' ] then echo "dlt-example-user is not available" return 1 fi which dlt-receive > /dev/null if [ $? -ne '0' ] then echo "dlt-receive is not available" return 1 fi mkdir -p $tmpPath/$tmpFolder if [ $? -ne '0' ] then echo "Error in creating dlt_test folder" return 1 fi mkdir -p $tmpPath/$tmpFolder/$gatewayFolderName if [ $? -ne '0' ] then echo "Error in creating gateway folder" return 1 fi touch $tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf if [ $? -ne '0' ] then echo "Error in creating dlt.conf file" return 1 fi echo "SendContextRegistration = 1" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "ECUId = ECU1" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "GatewayMode = 1" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "SharedMemorySize = 100000" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "LoggingMode = 0" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "LoggingLevel = 6" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "LoggingFilename = /tmp/dlt.log" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "TimeOutOnSend = 4" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "RingbufferMinSize = 500000" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "RingbufferMaxSize = 10000000" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "RingbufferStepSize = 500000" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "ControlSocketPath = /tmp/dlt-ctrl.sock" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf echo "GatewayConfigFile = $tmpPath/$tmpFolder/$gatewayFolderName/dlt_gateway.conf" >> $tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf touch $tmpPath/$tmpFolder/$gatewayFolderName/dlt_gateway.conf if [ $? -ne '0' ] then echo "Error in creating dlt_gateway file" return 1 fi echo "[PassiveNode1]" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt_gateway.conf echo "IPaddress=$ipaddr">>$tmpPath/$tmpFolder/$gatewayFolderName/dlt_gateway.conf echo "Port=3495" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt_gateway.conf echo "EcuID=ECU2" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt_gateway.conf echo "Connect=OnStartup" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt_gateway.conf echo "Timeout=10" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt_gateway.conf echo "NOFiles=1" >>$tmpPath/$tmpFolder/$gatewayFolderName/dlt_gateway.conf mkdir -p $tmpPath/$tmpFolder/$passiveFolderName if [ $? -ne '0' ] then echo "Error in creating passive folder" return 1 fi touch $tmpPath/$tmpFolder/$passiveFolderName/dlt.conf if [ $? -ne '0' ] then echo "Error in creating dlt.conf file" return 1 fi echo "SendContextRegistration = 1" >>$tmpPath/$tmpFolder/$passiveFolderName/dlt.conf echo "ECUId = ECU2" >>$tmpPath/$tmpFolder/$passiveFolderName/dlt.conf echo "SharedMemorySize = 100000" >>$tmpPath/$tmpFolder/$passiveFolderName/dlt.conf echo "LoggingMode = 0" >>$tmpPath/$tmpFolder/$passiveFolderName/dlt.conf echo "LoggingLevel = 6" >>$tmpPath/$tmpFolder/$passiveFolderName/dlt.conf echo "LoggingFilename = /tmp/dlt.log" >>$tmpPath/$tmpFolder/$passiveFolderName/dlt.conf echo "TimeOutOnSend = 4" >>$tmpPath/$tmpFolder/$passiveFolderName/dlt.conf echo "RingbufferMinSize = 500000" >>$tmpPath/$tmpFolder/$passiveFolderName/dlt.conf echo "RingbufferMaxSize = 10000000" >>$tmpPath/$tmpFolder/$passiveFolderName/dlt.conf echo "RingbufferStepSize = 500000" >>$tmpPath/$tmpFolder/$passiveFolderName/dlt.conf echo "ControlSocketPath = /tmp/dlt-ctrl.sock" >>$tmpPath/$tmpFolder/$passiveFolderName/dlt.conf mkdir -p $tmpPath/$tmpFolder/$tmpPassiveDIR if [ $? -ne '0' ] then echo "Error while creating tempPassive folder" return 1 fi return 0 } # # Function: -startDaemons() # # Description -Start dlt-daemon as passive node # -Start dlt-daemon as gateway node # # Return -Zero on success # -Non zero on failure # startDaemons() { dlt-daemon -c $tmpPath/$tmpFolder/$passiveFolderName/dlt.conf -p 3495 -t $tmpPath/$tmpFolder/$tmpPassiveDIR -d > /dev/null dlt-daemon -c $tmpPath/$tmpFolder/$gatewayFolderName/dlt.conf -p 3490 -d > /dev/null return 0 } # # Function: -startExample() # # Description -Start dlt-example-user on passive node # # Return -Zero on success # -Non zero on failure # startExample() { export DLT_PIPE_DIR=$tmpPath/$tmpFolder/$tmpPassiveDIR dlt-example-user MultiNodeTesting > /dev/null & return 0 } # # Function: -starReceive() # # Description -Start dlt-receive # # Return -Zero on success # -Non zero on failure # startReceive() { dlt-receive -o $tmpPath/$tmpFolder/$tmpLogFile localhost & return 0 } # # Function: -verifyTest() # # Description -Start dlt-convert # -check weather msg sent by passive node are available in logs or not # # Return -Zero on success # -Non zero on failure # verifyTest() { dlt-convert -a $tmpPath/$tmpFolder/$tmpLogFile > $tmpPath/$tmpFolder/$tmpLogAsciFile cat $tmpPath/$tmpFolder/$tmpLogAsciFile | grep -F "ECU2" > /dev/null if [ $? -eq '0' ] then return 0 else return 1 fi } #main function ######################################################################################## getOSname cleanup if [ $? -ne '0' ] then echo "getIpAdd() failed" cleanup return 1 fi setupTest if [ $? -ne '0' ] then echo "setupTest() failed" cleanup return 1 fi startDaemons if [ $? -ne '0' ] then echo "startDaemons() failed" cleanup return 1 fi startExample if [ $? -ne '0' ] then echo "startExample() failed" cleanup return 1 fi #wait for 1 sec before starting dlt-receive to start dlt-example-user application properly sleep 1 startReceive if [ $? -ne '0' ] then echo "startReceive() failed" cleanup return 1 fi #Wait for 1 sec to collect messages sent by application at gateway sleep 1 verifyTest if [ $? -eq '0' ] then echo "Test Passed" else echo "Test Failed" fi cleanup dlt-daemon-2.18.6/tests/start_system_logger_test.sh000077500000000000000000000023401377520261000224760ustar00rootroot00000000000000#!/bin/bash #enable logging of files and setup sudo sed -i 's/LogFileEnable = 0/LogFileEnable = 1/g' /usr/local/etc/dlt-system.conf echo "# TEST LOG TO SYSTEMLOGGER_PROC" | sudo tee -a /usr/local/etc/dlt-system.conf echo "LogFileFilename = /proc/systemlogger" | sudo tee -a /usr/local/etc/dlt-system.conf echo "LogFileMode = 1" | sudo tee -a /usr/local/etc/dlt-system.conf echo "LogFileTimeDelay = 3" | sudo tee -a /usr/local/etc/dlt-system.conf echo "LogFileContextId = PROC" | sudo tee -a /usr/local/etc/dlt-system.conf #comile the kernel module for system logging cd mod_system_logger make cd .. #enable mod sudo insmod mod_system_logger/mod_system_logger.ko #start dlt-daemon dlt-daemon & sleep 1 #start dlt-system dlt-system & sleep 1 #start dlt-receiver ../build/tests/dlt_test_receiver -l localhost & sleep 1 pid=$! wait $pid exitcode=$? #kill processes and remove mod pkill dlt-daemon pkill dlt-system sudo rmmod mod_system_logger cd mod_system_logger make clean cd .. # if exit code == 159 , test successfull tput setaf 1 if [ $exitcode == 159 ]; then echo "System Logger tests successfull." else echo "System Logger tests failed." echo "Maybe missing kernel-heaers" echo "for compiling the test module" fi tput setaf 7 dlt-daemon-2.18.6/tests/start_systemd_journal_test.sh000077500000000000000000000015731377520261000230440ustar00rootroot00000000000000#!/bin/bash #build and install with SYSTEMD_JOURNAL=ON mkdir ../build cd ../build/ cmake -DWITH_SYSTEMD_JOURNAL=ON -DWITH_DLT_UNIT_TESTS=ON .. make sudo make install #enable SYSTEMD_JOURNAL in config file sudo vim -esnc '%s/JournalEnable = 0/JournalEnable = 1/g|:wq' /usr/local/etc/dlt-system.conf #start dlt-daemon dlt-daemon & sleep 1 #start dlt_system sudo dlt-system & sleep 1 #send 10 times "DLT SYSTEM JOURNAL TEST" for i in {1..1000} do logger DLT SYSTEM JOURNAL TEST done #start receiver ./../build/tests/dlt_test_receiver -s localhost & sleep 1 pid=$! wait $pid exitcode=$? # kill processes, receiver automatically killed with daemon pkill dlt-daemon sudo pkill dlt-system # if exit code == 159 , test successfull tput setaf 1 if [ $exitcode == 159 ]; then echo "Systemd Journal tests successfull." else echo "Systemd Journal tests failed." fi tput setaf 7 dlt-daemon-2.18.6/tests/testfile.dlt000066400000000000000000000105721377520261000173320ustar00rootroot00000000000000DLT&,ÉMØĸ ECU5ECU?ˆb:APPCONremoDLT&,ÉMØĸ ECU5ECU?ˆb:APPCONremoDLT&,ÉMØĸ ECU5ECU?ˆb:APPCON DLT&,ÉMØĸ ECU5ECU?ˆb:APPCON DLT+,ÉMzčECU!ALOGTES1DLT+,ÉMzčECU!ALOGTES1BķDLT+,ÉMzčECU!ALOGTES1 Hello BMWDLT+,ÉMzčECU!ALOGTES2AeDLT+,ÉMzčECU!ALOGTES2BfDLT+,ÉMzčECU!ALOGTES2CgDLT+,ÉMzčECU!ALOGTES2DhDLT+,ÉMzčECU!ALOGTES2!iDLT+,ÉMzčECU!ALOGTES2"jDLT+,ÉMzčECU!ALOGTES2#kDLT+,ÉMzčECU!ALOGTES2$lDLT+,ÉMzčECU!ALOGTES2#mDLT+,ÉMzčECU! ALOGTES2CnDLT+,ÉMzčECU! ALOGTES2oDLT+,ÉMzčECU! 'ALOGTES2STRING 112 messageDLT+,ÉMzčECU! (ALOGTES2CSTRING 113 messageDLT+,ÉMzčECU! ALOGTES2ƒÍˌ?DLT+,ÉMzčECU!ALOGTES2„333333ķ?DLT+,ÉMzčECU! ALOGTES2 Hello worldDLT,,ÉMHęECU!ALOGTES3DLT,,ÉMHęECU!ALOGTES3#DLT,,ÉMHęECU!ALOGTES3## DLT,,ÉMHęECU!&ALOGTES3#)#*#+DLT,,ÉMHęECU!.ALOGTES3#3#4#5#6DLT,,ÉMHęECU!6ALOGTES3#=#>#?#@#ADLT,,ÉMHęECU!>ALOGTES3#G#H#I#J#K#LDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU! (ALOGTES4#  Hello worldDLT-,ÉM–•ECU! (ALOGTES4#  Hello worldDLT-,ÉM–•ECU! (ALOGTES4#  Hello worldDLT-,ÉM–•ECU! (ALOGTES4#  Hello worldDLT-,ÉM–•ECU! (ALOGTES4#  Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT-,ÉM–•ECU!(ALOGTES4# Hello worldDLT4,ÉM@ECU5ECU?Šo&APPCONremoDLT4,ÉM@ECU5ECU?Šo&APPCONremoDLT4,ÉM@ECU5ECU?Šo&APPCON DLT4,ÉM@ECU5ECU?Šo&APPCON DLT7,ÉMø1ECU eDLT7,ÉMø1ECU  fķDLT7,ÉMø1ECU g Hello BMWDLT7,ÉMø1ECU ÉeDLT7,ÉMø1ECU  ĘfDLT7,ÉMø1ECU  ËgDLT7,ÉMø1ECU ĖhDLT7,ÉMø1ECU  ÍiDLT7,ÉMø1ECU  ÎjDLT7,ÉMø1ECU  ĪkDLT7,ÉMø1ECU ĐlDLT7,ÉMø1ECU  ŅmDLT7,ÉMø1ECU ŌnDLT7,ÉMø1ECU ĶoDLT7,ÉMø1ECU ÔSTRING 112 messageDLT7,ÉMø1ECU ÕCSTRING 113 messageDLT7,ÉMø1ECU ÖÍˌ?DLT7,ÉMø1ECU ×333333ķ?DLT7,ÉMø1ECU Ø Hello worldDLT8,ÉM3cECU -DLT8,ÉM3cECU  .DLT8,ÉM3cECU / DLT8,ÉM3cECU 0)*+DLT8,ÉM3cECU 13456DLT8,ÉM3cECU 1=>?@ADLT8,ÉM3cECU  1GHIJKLDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worldDLT9,ÉM¸ECU ‘ Hello worlddlt-daemon-2.18.6/tests/testfile_filetransfer.txt000066400000000000000000000001161377520261000221230ustar00rootroot00000000000000TEST DATEI. 123. qwertzuiopÃŧ+ asdfghjklÃļä# # Description: # <...> # <...> ### END INIT INFO # Author: root # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC=dlt-daemon # Introduce a short description here NAME=dlt-daemon # Introduce the short server's name here DAEMON=@CMAKE_INSTALL_PREFIX@/bin/dlt-daemon # Introduce the server's location here DAEMON_ARGS="-d" # Arguments to run the daemon with PIDFILE=/tmp/dltd.lock # Path is configured with DLT configuration of DLT_USER_DIR/DLT_DAEMON_LOCK_FILE SCRIPTNAME=/etc/init.d/$NAME # Exit if the package is not installed [ -x $DAEMON ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred # default: --retry=TERM/30/KILL/5 start-stop-daemon --stop --quiet --retry=TERM/1/KILL/1 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. # default: --retry=0/30/KILL/5 start-stop-daemon --stop --quiet --oknodo --retry=0/1/KILL/1 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) if [ -f /var/log/messages ] then log_daemon_msg "------- messages ----------------" cat /var/log/messages | grep -a DLT | tail fi if [ -f /var/log/syslog ] then log_daemon_msg "------- SYSLOG -------------------" cat /var/log/syslog | grep -a DLT | tail fi pidofdlt=`pidof $DESC` if [ $pidofdlt ] then log_daemon_msg "$NAME has the PID:$pidofdlt" fi status_of_proc "$DAEMON" "$NAME" || exit $? ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #log_end_msg $? #;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac : dlt-daemon-2.18.6/util/000077500000000000000000000000001377520261000146145ustar00rootroot00000000000000dlt-daemon-2.18.6/util/create_dlt_user_h.py000077500000000000000000000022571377520261000206520ustar00rootroot00000000000000#!/usr/bin/python3 # This software has been developed by Advanced Driver Information Technology. # Copyright(c) 2020 Advanced Driver Information Technology GmbH, # Advanced Driver Information Technology Corporation, Robert Bosch GmbH, # Robert Bosch Car Multimedia GmbH and DENSO Corporation. # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. import pathlib import argparse def main(header_in_file, header_out_file): header_in = pathlib.Path(header_in_file) header_out = pathlib.Path(header_out_file) with header_in.open() as hi, header_out.open('w') as ho: for line in hi: if line.startswith("#cmakedefine"): continue ho.write(line) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('header_in') parser.add_argument('header_out') args = parser.parse_args() main(args.header_in, args.header_out) dlt-daemon-2.18.6/util/create_dlt_version_h.py000077500000000000000000000052171377520261000213600ustar00rootroot00000000000000#!/usr/bin/python3 # This software has been developed by Advanced Driver Information Technology. # Copyright(c) 2019 Advanced Driver Information Technology GmbH, # Advanced Driver Information Technology Corporation, Robert Bosch GmbH, # Robert Bosch Car Multimedia GmbH and DENSO Corporation. # # This file is part of GENIVI Project DLT - Diagnostic Log and Trace. # # This Source Code Form is subject to the terms of the # Mozilla Public License (MPL), v. 2.0. # If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. # # For further information see http://www.genivi.org/. import pathlib import subprocess import argparse import re def get_cmd(cmd, cwd): return subprocess.check_output(cmd, cwd=cwd, shell=True, stderr=subprocess.STDOUT ).decode().strip() def get_revision(git_dir): try: rev = get_cmd('git describe --tags', git_dir) if not rev.startswith("fatal:"): return rev rev = get_cmd('git rev-parse HEAD', git_dir) if not rev.startswith("fatal:"): return rev except subprocess.CalledProcessError: pass return get_cmd('date +%F', git_dir) def main(cmake_file, header_in_file, header_out_file): cmakelists = pathlib.Path(cmake_file) header_in = pathlib.Path(header_in_file) header_out = pathlib.Path(header_out_file) git_dir = str(header_in.parent) cmake_vars = {} for m in re.finditer( 'project\(\S+ VERSION (?P\d+)\.(?P\d+)\.(?P\d+)(\.(?P\d+))?', cmakelists.open().read()): cmake_vars['PROJECT_VERSION_MAJOR'] = m.group('major') cmake_vars['PROJECT_VERSION_MINOR'] = m.group('minor') cmake_vars['PROJECT_VERSION_PATCH'] = m.group('patch') cmake_vars['PROJECT_VERSION'] = "{}.{}.{}".format(m.group('major'), m.group('minor'), m.group('patch')) cmake_vars['PROJECT_VERSION_TWEAK'] = m.group('tweak') cmake_vars['DLT_REVISION'] = get_revision(git_dir) cmake_vars['DLT_VERSION_STATE'] = 'STABLE' header_out.parent.mkdir(parents=True, exist_ok=True) with header_in.open() as hi, header_out.open('w') as ho: for line in hi: text, _ = re.subn('@(?P\w+)@', lambda x: cmake_vars.get(x.group('var_name'), "NONE"), line) ho.write(text) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('cmakelists') parser.add_argument('header_in') parser.add_argument('header_out') args = parser.parse_args() main(args.cmakelists, args.header_in, args.header_out) dlt-daemon-2.18.6/util/uncrustify.cfg000066400000000000000000003226711377520261000175230ustar00rootroot00000000000000# Uncrustify-0.68_f # # General options # # The type of line endings. # # Default: auto newlines = auto # lf/crlf/cr/auto # The original size of tabs in the input. # # Default: 8 input_tab_size = 4 # unsigned number # The size of tabs in the output (only used if align_with_tabs=true). # # Default: 8 output_tab_size = 4 # unsigned number # The ASCII value of the string escape char, usually 92 (\) or (Pawn) 94 (^). # # Default: 92 string_escape_char = 92 # unsigned number # Alternate string escape char (usually only used for Pawn). # Only works right before the quote char. string_escape_char2 = 0 # unsigned number # Replace tab characters found in string literals with the escape sequence \t # instead. string_replace_tab_chars = false # true/false # Allow interpreting '>=' and '>>=' as part of a template in code like # 'void f(list>=val);'. If true, 'assert(x<0 && y>=3)' will be broken. # Improvements to template detection may make this option obsolete. tok_split_gte = false # true/false # Specify the marker used in comments to disable processing of part of the # file. # # Default: *INDENT-OFF* disable_processing_cmt = "" # string # Specify the marker used in comments to (re)enable processing in a file. # # Default: *INDENT-ON* enable_processing_cmt = "" # string # Enable parsing of digraphs. enable_digraphs = false # true/false # Add or remove the UTF-8 BOM (recommend 'remove'). utf8_bom = ignore # ignore/add/remove/force # If the file contains bytes with values between 128 and 255, but is not # UTF-8, then output as UTF-8. utf8_byte = false # true/false # Force the output encoding to UTF-8. utf8_force = false # true/false # # Spacing options # # Add or remove space around non-assignment symbolic operators ('+', '/', '%', # '<<', and so forth). sp_arith = force # ignore/add/remove/force # Add or remove space around arithmetic operators '+' and '-'. # # Overrides sp_arith. sp_arith_additive = ignore # ignore/add/remove/force # Add or remove space around assignment operator '=', '+=', etc. sp_assign = force # ignore/add/remove/force # Add or remove space around '=' in C++11 lambda capture specifications. # # Overrides sp_assign. sp_cpp_lambda_assign = ignore # ignore/add/remove/force # Add or remove space after the capture specification in C++11 lambda. sp_cpp_lambda_paren = ignore # ignore/add/remove/force # Add or remove space around assignment operator '=' in a prototype. sp_assign_default = ignore # ignore/add/remove/force # Add or remove space before assignment operator '=', '+=', etc. # # Overrides sp_assign. sp_before_assign = ignore # ignore/add/remove/force # Add or remove space after assignment operator '=', '+=', etc. # # Overrides sp_assign. sp_after_assign = ignore # ignore/add/remove/force # Add or remove space in 'NS_ENUM ('. sp_enum_paren = ignore # ignore/add/remove/force # Add or remove space around assignment '=' in enum. sp_enum_assign = force # ignore/add/remove/force # Add or remove space before assignment '=' in enum. # # Overrides sp_enum_assign. sp_enum_before_assign = ignore # ignore/add/remove/force # Add or remove space after assignment '=' in enum. # # Overrides sp_enum_assign. sp_enum_after_assign = ignore # ignore/add/remove/force # Add or remove space around assignment ':' in enum. sp_enum_colon = ignore # ignore/add/remove/force # Add or remove space around preprocessor '##' concatenation operator. # # Default: add sp_pp_concat = ignore # ignore/add/remove/force # Add or remove space after preprocessor '#' stringify operator. # Also affects the '#@' charizing operator. sp_pp_stringify = ignore # ignore/add/remove/force # Add or remove space before preprocessor '#' stringify operator # as in '#define x(y) L#y'. sp_before_pp_stringify = ignore # ignore/add/remove/force # Add or remove space around boolean operators '&&' and '||'. sp_bool = force # ignore/add/remove/force # Add or remove space around compare operator '<', '>', '==', etc. sp_compare = force # ignore/add/remove/force # Add or remove space inside '(' and ')'. sp_inside_paren = remove # ignore/add/remove/force # Add or remove space between nested parentheses, i.e. '((' vs. ') )'. sp_paren_paren = remove # ignore/add/remove/force # Add or remove space between back-to-back parentheses, i.e. ')(' vs. ') ('. sp_cparen_oparen = ignore # ignore/add/remove/force # Whether to balance spaces inside nested parentheses. sp_balance_nested_parens = false # true/false # Add or remove space between ')' and '{'. sp_paren_brace = force # ignore/add/remove/force # Add or remove space between nested braces, i.e. '{{' vs '{ {'. sp_brace_brace = ignore # ignore/add/remove/force # Add or remove space before pointer star '*'. sp_before_ptr_star = force # ignore/add/remove/force # Add or remove space before pointer star '*' that isn't followed by a # variable name. If set to 'ignore', sp_before_ptr_star is used instead. sp_before_unnamed_ptr_star = force # ignore/add/remove/force # Add or remove space between pointer stars '*'. sp_between_ptr_star = remove # ignore/add/remove/force # Add or remove space after pointer star '*', if followed by a word. sp_after_ptr_star = remove # ignore/add/remove/force # Add or remove space after pointer caret '^', if followed by a word. sp_after_ptr_block_caret = ignore # ignore/add/remove/force # Add or remove space after pointer star '*', if followed by a qualifier. sp_after_ptr_star_qualifier = ignore # ignore/add/remove/force # Add or remove space after a pointer star '*', if followed by a function # prototype or function definition. sp_after_ptr_star_func = remove # ignore/add/remove/force # Add or remove space after a pointer star '*', if followed by an open # parenthesis, as in 'void* (*)(). sp_ptr_star_paren = ignore # ignore/add/remove/force # Add or remove space before a pointer star '*', if followed by a function # prototype or function definition. sp_before_ptr_star_func = add # ignore/add/remove/force # Add or remove space before a reference sign '&'. sp_before_byref = add # ignore/add/remove/force # Add or remove space before a reference sign '&' that isn't followed by a # variable name. If set to 'ignore', sp_before_byref is used instead. sp_before_unnamed_byref = add # ignore/add/remove/force # Add or remove space after reference sign '&', if followed by a word. sp_after_byref = remove # ignore/add/remove/force # Add or remove space after a reference sign '&', if followed by a function # prototype or function definition. sp_after_byref_func = remove # ignore/add/remove/force # Add or remove space before a reference sign '&', if followed by a function # prototype or function definition. sp_before_byref_func = add # ignore/add/remove/force # Add or remove space between type and word. # # Default: force sp_after_type = force # ignore/add/remove/force # Add or remove space between 'decltype(...)' and word. sp_after_decltype = ignore # ignore/add/remove/force # (D) Add or remove space before the parenthesis in the D constructs # 'template Foo(' and 'class Foo('. sp_before_template_paren = ignore # ignore/add/remove/force # Add or remove space between 'template' and '<'. # If set to ignore, sp_before_angle is used. sp_template_angle = ignore # ignore/add/remove/force # Add or remove space before '<'. sp_before_angle = ignore # ignore/add/remove/force # Add or remove space inside '<' and '>'. sp_inside_angle = ignore # ignore/add/remove/force # Add or remove space between '>' and ':'. sp_angle_colon = ignore # ignore/add/remove/force # Add or remove space after '<>'. sp_after_angle = ignore # ignore/add/remove/force # Add or remove space between '>' and '(' as found in 'new List(foo);'. sp_angle_paren = ignore # ignore/add/remove/force # Add or remove space between '>' and '()' as found in 'new List();'. sp_angle_paren_empty = ignore # ignore/add/remove/force # Add or remove space between '>' and a word as in 'List m;' or # 'template static ...'. sp_angle_word = ignore # ignore/add/remove/force # Add or remove space between '>' and '>' in '>>' (template stuff). # # Default: add sp_angle_shift = add # ignore/add/remove/force # (C++11) Permit removal of the space between '>>' in 'foo >'. Note # that sp_angle_shift cannot remove the space without this option. sp_permit_cpp11_shift = false # true/false # Add or remove space before '(' of control statements ('if', 'for', 'switch', # 'while', etc.). sp_before_sparen = force # ignore/add/remove/force # Add or remove space inside '(' and ')' of control statements. sp_inside_sparen = remove # ignore/add/remove/force # Add or remove space after '(' of control statements. # # Overrides sp_inside_sparen. sp_inside_sparen_open = ignore # ignore/add/remove/force # Add or remove space before ')' of control statements. # # Overrides sp_inside_sparen. sp_inside_sparen_close = ignore # ignore/add/remove/force # Add or remove space after ')' of control statements. sp_after_sparen = force # ignore/add/remove/force # Add or remove space between ')' and '{' of of control statements. sp_sparen_brace = force # ignore/add/remove/force # (D) Add or remove space between 'invariant' and '('. sp_invariant_paren = ignore # ignore/add/remove/force # (D) Add or remove space after the ')' in 'invariant (C) c'. sp_after_invariant_paren = ignore # ignore/add/remove/force # Add or remove space before empty statement ';' on 'if', 'for' and 'while'. sp_special_semi = remove # ignore/add/remove/force # Add or remove space before ';'. # # Default: remove sp_before_semi = remove # ignore/add/remove/force # Add or remove space before ';' in non-empty 'for' statements. sp_before_semi_for = remove # ignore/add/remove/force # Add or remove space before a semicolon of an empty part of a for statement. sp_before_semi_for_empty = ignore # ignore/add/remove/force # Add or remove space after ';', except when followed by a comment. # # Default: add sp_after_semi = add # ignore/add/remove/force # Add or remove space after ';' in non-empty 'for' statements. # # Default: force sp_after_semi_for = force # ignore/add/remove/force # Add or remove space after the final semicolon of an empty part of a for # statement, as in 'for ( ; ; )'. sp_after_semi_for_empty = ignore # ignore/add/remove/force # Add or remove space before '[' (except '[]'). sp_before_square = ignore # ignore/add/remove/force # Add or remove space before '[]'. sp_before_squares = remove # ignore/add/remove/force # Add or remove space before C++17 structured bindings. sp_cpp_before_struct_binding = ignore # ignore/add/remove/force # Add or remove space inside a non-empty '[' and ']'. sp_inside_square = remove # ignore/add/remove/force # (OC) Add or remove space inside a non-empty Objective-C boxed array '@[' and # ']'. If set to ignore, sp_inside_square is used. sp_inside_square_oc_array = ignore # ignore/add/remove/force # Add or remove space after ',', i.e. 'a,b' vs. 'a, b'. sp_after_comma = force # ignore/add/remove/force # Add or remove space before ','. # # Default: remove sp_before_comma = remove # ignore/add/remove/force # (C#) Add or remove space between ',' and ']' in multidimensional array type # like 'int[,,]'. sp_after_mdatype_commas = ignore # ignore/add/remove/force # (C#) Add or remove space between '[' and ',' in multidimensional array type # like 'int[,,]'. sp_before_mdatype_commas = ignore # ignore/add/remove/force # (C#) Add or remove space between ',' in multidimensional array type # like 'int[,,]'. sp_between_mdatype_commas = ignore # ignore/add/remove/force # Add or remove space between an open parenthesis and comma, # i.e. '(,' vs. '( ,'. # # Default: force sp_paren_comma = force # ignore/add/remove/force # Add or remove space before the variadic '...' when preceded by a # non-punctuator. sp_before_ellipsis = ignore # ignore/add/remove/force # Add or remove space between a type and '...'. sp_type_ellipsis = ignore # ignore/add/remove/force # Add or remove space between ')' and '...'. sp_paren_ellipsis = ignore # ignore/add/remove/force # Add or remove space after class ':'. sp_after_class_colon = ignore # ignore/add/remove/force # Add or remove space before class ':'. sp_before_class_colon = ignore # ignore/add/remove/force # Add or remove space after class constructor ':'. sp_after_constr_colon = ignore # ignore/add/remove/force # Add or remove space before class constructor ':'. sp_before_constr_colon = ignore # ignore/add/remove/force # Add or remove space before case ':'. # # Default: remove sp_before_case_colon = remove # ignore/add/remove/force # Add or remove space between 'operator' and operator sign. sp_after_operator = ignore # ignore/add/remove/force # Add or remove space between the operator symbol and the open parenthesis, as # in 'operator ++('. sp_after_operator_sym = ignore # ignore/add/remove/force # Overrides sp_after_operator_sym when the operator has no arguments, as in # 'operator *()'. sp_after_operator_sym_empty = ignore # ignore/add/remove/force # Add or remove space after C/D cast, i.e. 'cast(int)a' vs. 'cast(int) a' or # '(int)a' vs. '(int) a'. sp_after_cast = remove # ignore/add/remove/force # Add or remove spaces inside cast parentheses. sp_inside_paren_cast = remove # ignore/add/remove/force # Add or remove space between the type and open parenthesis in a C++ cast, # i.e. 'int(exp)' vs. 'int (exp)'. sp_cpp_cast_paren = ignore # ignore/add/remove/force # Add or remove space between 'sizeof' and '('. sp_sizeof_paren = ignore # ignore/add/remove/force # Add or remove space between 'sizeof' and '...'. sp_sizeof_ellipsis = ignore # ignore/add/remove/force # Add or remove space between 'sizeof...' and '('. sp_sizeof_ellipsis_paren = ignore # ignore/add/remove/force # Add or remove space between 'decltype' and '('. sp_decltype_paren = ignore # ignore/add/remove/force # (Pawn) Add or remove space after the tag keyword. sp_after_tag = ignore # ignore/add/remove/force # Add or remove space inside enum '{' and '}'. sp_inside_braces_enum = ignore # ignore/add/remove/force # Add or remove space inside struct/union '{' and '}'. sp_inside_braces_struct = ignore # ignore/add/remove/force # (OC) Add or remove space inside Objective-C boxed dictionary '{' and '}' sp_inside_braces_oc_dict = ignore # ignore/add/remove/force # Add or remove space after open brace in an unnamed temporary # direct-list-initialization. sp_after_type_brace_init_lst_open = ignore # ignore/add/remove/force # Add or remove space before close brace in an unnamed temporary # direct-list-initialization. sp_before_type_brace_init_lst_close = ignore # ignore/add/remove/force # Add or remove space inside an unnamed temporary direct-list-initialization. sp_inside_type_brace_init_lst = ignore # ignore/add/remove/force # Add or remove space inside '{' and '}'. sp_inside_braces = force # ignore/add/remove/force # Add or remove space inside '{}'. sp_inside_braces_empty = remove # ignore/add/remove/force # Add or remove space between return type and function name. A minimum of 1 # is forced except for pointer return types. sp_type_func = ignore # ignore/add/remove/force # Add or remove space between type and open brace of an unnamed temporary # direct-list-initialization. sp_type_brace_init_lst = ignore # ignore/add/remove/force # Add or remove space between function name and '(' on function declaration. sp_func_proto_paren = ignore # ignore/add/remove/force # Add or remove space between function name and '()' on function declaration # without parameters. sp_func_proto_paren_empty = ignore # ignore/add/remove/force # Add or remove space between function name and '(' on function definition. sp_func_def_paren = ignore # ignore/add/remove/force # Add or remove space between function name and '()' on function definition # without parameters. sp_func_def_paren_empty = ignore # ignore/add/remove/force # Add or remove space inside empty function '()'. sp_inside_fparens = remove # ignore/add/remove/force # Add or remove space inside function '(' and ')'. sp_inside_fparen = remove # ignore/add/remove/force # Add or remove space inside the first parentheses in a function type, as in # 'void (*x)(...)'. sp_inside_tparen = ignore # ignore/add/remove/force # Add or remove space between the ')' and '(' in a function type, as in # 'void (*x)(...)'. sp_after_tparen_close = ignore # ignore/add/remove/force # Add or remove space between ']' and '(' when part of a function call. sp_square_fparen = ignore # ignore/add/remove/force # Add or remove space between ')' and '{' of function. sp_fparen_brace = force # ignore/add/remove/force # Add or remove space between ')' and '{' of s function call in object # initialization. # # Overrides sp_fparen_brace. sp_fparen_brace_initializer = ignore # ignore/add/remove/force # (Java) Add or remove space between ')' and '{{' of double brace initializer. sp_fparen_dbrace = ignore # ignore/add/remove/force # Add or remove space between function name and '(' on function calls. sp_func_call_paren = ignore # ignore/add/remove/force # Add or remove space between function name and '()' on function calls without # parameters. If set to 'ignore' (the default), sp_func_call_paren is used. sp_func_call_paren_empty = ignore # ignore/add/remove/force # Add or remove space between the user function name and '(' on function # calls. You need to set a keyword to be a user function in the config file, # like: # set func_call_user tr _ i18n sp_func_call_user_paren = ignore # ignore/add/remove/force # Add or remove space inside user function '(' and ')'. sp_func_call_user_inside_fparen = ignore # ignore/add/remove/force # Add or remove space between nested parentheses with user functions, # i.e. '((' vs. '( ('. sp_func_call_user_paren_paren = ignore # ignore/add/remove/force # Add or remove space between a constructor/destructor and the open # parenthesis. sp_func_class_paren = ignore # ignore/add/remove/force # Add or remove space between a constructor without parameters or destructor # and '()'. sp_func_class_paren_empty = ignore # ignore/add/remove/force # Add or remove space between 'return' and '('. sp_return_paren = ignore # ignore/add/remove/force # Add or remove space between 'return' and '{'. sp_return_brace = ignore # ignore/add/remove/force # Add or remove space between '__attribute__' and '('. sp_attribute_paren = ignore # ignore/add/remove/force # Add or remove space between 'defined' and '(' in '#if defined (FOO)'. sp_defined_paren = ignore # ignore/add/remove/force # Add or remove space between 'throw' and '(' in 'throw (something)'. sp_throw_paren = ignore # ignore/add/remove/force # Add or remove space between 'throw' and anything other than '(' as in # '@throw [...];'. sp_after_throw = ignore # ignore/add/remove/force # Add or remove space between 'catch' and '(' in 'catch (something) { }'. # If set to ignore, sp_before_sparen is used. sp_catch_paren = ignore # ignore/add/remove/force # (OC) Add or remove space between '@catch' and '(' # in '@catch (something) { }'. If set to ignore, sp_catch_paren is used. sp_oc_catch_paren = ignore # ignore/add/remove/force # (D) Add or remove space between 'version' and '(' # in 'version (something) { }'. If set to ignore, sp_before_sparen is used. sp_version_paren = ignore # ignore/add/remove/force # (D) Add or remove space between 'scope' and '(' # in 'scope (something) { }'. If set to ignore, sp_before_sparen is used. sp_scope_paren = ignore # ignore/add/remove/force # Add or remove space between 'super' and '(' in 'super (something)'. # # Default: remove sp_super_paren = remove # ignore/add/remove/force # Add or remove space between 'this' and '(' in 'this (something)'. # # Default: remove sp_this_paren = remove # ignore/add/remove/force # Add or remove space between a macro name and its definition. sp_macro = ignore # ignore/add/remove/force # Add or remove space between a macro function ')' and its definition. sp_macro_func = ignore # ignore/add/remove/force # Add or remove space between 'else' and '{' if on the same line. sp_else_brace = force # ignore/add/remove/force # Add or remove space between '}' and 'else' if on the same line. sp_brace_else = force # ignore/add/remove/force # Add or remove space between '}' and the name of a typedef on the same line. sp_brace_typedef = force # ignore/add/remove/force # Add or remove space before the '{' of a 'catch' statement, if the '{' and # 'catch' are on the same line, as in 'catch (decl) {'. sp_catch_brace = force # ignore/add/remove/force # (OC) Add or remove space before the '{' of a '@catch' statement, if the '{' # and '@catch' are on the same line, as in '@catch (decl) {'. # If set to ignore, sp_catch_brace is used. sp_oc_catch_brace = ignore # ignore/add/remove/force # Add or remove space between '}' and 'catch' if on the same line. sp_brace_catch = force # ignore/add/remove/force # (OC) Add or remove space between '}' and '@catch' if on the same line. # If set to ignore, sp_brace_catch is used. sp_oc_brace_catch = ignore # ignore/add/remove/force # Add or remove space between 'finally' and '{' if on the same line. sp_finally_brace = ignore # ignore/add/remove/force # Add or remove space between '}' and 'finally' if on the same line. sp_brace_finally = ignore # ignore/add/remove/force # Add or remove space between 'try' and '{' if on the same line. sp_try_brace = ignore # ignore/add/remove/force # Add or remove space between get/set and '{' if on the same line. sp_getset_brace = ignore # ignore/add/remove/force # Add or remove space between a variable and '{' for C++ uniform # initialization. # # Default: add sp_word_brace = add # ignore/add/remove/force # Add or remove space between a variable and '{' for a namespace. # # Default: add sp_word_brace_ns = add # ignore/add/remove/force # Add or remove space before the '::' operator. sp_before_dc = ignore # ignore/add/remove/force # Add or remove space after the '::' operator. sp_after_dc = ignore # ignore/add/remove/force # (D) Add or remove around the D named array initializer ':' operator. sp_d_array_colon = ignore # ignore/add/remove/force # Add or remove space after the '!' (not) unary operator. # # Default: remove sp_not = remove # ignore/add/remove/force # Add or remove space after the '~' (invert) unary operator. # # Default: remove sp_inv = remove # ignore/add/remove/force # Add or remove space after the '&' (address-of) unary operator. This does not # affect the spacing after a '&' that is part of a type. # # Default: remove sp_addr = remove # ignore/add/remove/force # Add or remove space around the '.' or '->' operators. # # Default: remove sp_member = remove # ignore/add/remove/force # Add or remove space after the '*' (dereference) unary operator. This does # not affect the spacing after a '*' that is part of a type. # # Default: remove sp_deref = remove # ignore/add/remove/force # Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7'. # # Default: remove sp_sign = remove # ignore/add/remove/force # Add or remove space between '++' and '--' the word to which it is being # applied, as in '(--x)' or 'y++;'. # # Default: remove sp_incdec = remove # ignore/add/remove/force # Add or remove space before a backslash-newline at the end of a line. # # Default: add sp_before_nl_cont = add # ignore/add/remove/force # (OC) Add or remove space after the scope '+' or '-', as in '-(void) foo;' # or '+(int) bar;'. sp_after_oc_scope = ignore # ignore/add/remove/force # (OC) Add or remove space after the colon in message specs, # i.e. '-(int) f:(int) x;' vs. '-(int) f: (int) x;'. sp_after_oc_colon = ignore # ignore/add/remove/force # (OC) Add or remove space before the colon in message specs, # i.e. '-(int) f: (int) x;' vs. '-(int) f : (int) x;'. sp_before_oc_colon = ignore # ignore/add/remove/force # (OC) Add or remove space after the colon in immutable dictionary expression # 'NSDictionary *test = @{@"foo" :@"bar"};'. sp_after_oc_dict_colon = ignore # ignore/add/remove/force # (OC) Add or remove space before the colon in immutable dictionary expression # 'NSDictionary *test = @{@"foo" :@"bar"};'. sp_before_oc_dict_colon = ignore # ignore/add/remove/force # (OC) Add or remove space after the colon in message specs, # i.e. '[object setValue:1];' vs. '[object setValue: 1];'. sp_after_send_oc_colon = ignore # ignore/add/remove/force # (OC) Add or remove space before the colon in message specs, # i.e. '[object setValue:1];' vs. '[object setValue :1];'. sp_before_send_oc_colon = ignore # ignore/add/remove/force # (OC) Add or remove space after the (type) in message specs, # i.e. '-(int)f: (int) x;' vs. '-(int)f: (int)x;'. sp_after_oc_type = ignore # ignore/add/remove/force # (OC) Add or remove space after the first (type) in message specs, # i.e. '-(int) f:(int)x;' vs. '-(int)f:(int)x;'. sp_after_oc_return_type = ignore # ignore/add/remove/force # (OC) Add or remove space between '@selector' and '(', # i.e. '@selector(msgName)' vs. '@selector (msgName)'. # Also applies to '@protocol()' constructs. sp_after_oc_at_sel = ignore # ignore/add/remove/force # (OC) Add or remove space between '@selector(x)' and the following word, # i.e. '@selector(foo) a:' vs. '@selector(foo)a:'. sp_after_oc_at_sel_parens = ignore # ignore/add/remove/force # (OC) Add or remove space inside '@selector' parentheses, # i.e. '@selector(foo)' vs. '@selector( foo )'. # Also applies to '@protocol()' constructs. sp_inside_oc_at_sel_parens = ignore # ignore/add/remove/force # (OC) Add or remove space before a block pointer caret, # i.e. '^int (int arg){...}' vs. ' ^int (int arg){...}'. sp_before_oc_block_caret = ignore # ignore/add/remove/force # (OC) Add or remove space after a block pointer caret, # i.e. '^int (int arg){...}' vs. '^ int (int arg){...}'. sp_after_oc_block_caret = ignore # ignore/add/remove/force # (OC) Add or remove space between the receiver and selector in a message, # as in '[receiver selector ...]'. sp_after_oc_msg_receiver = ignore # ignore/add/remove/force # (OC) Add or remove space after '@property'. sp_after_oc_property = ignore # ignore/add/remove/force # (OC) Add or remove space between '@synchronized' and the open parenthesis, # i.e. '@synchronized(foo)' vs. '@synchronized (foo)'. sp_after_oc_synchronized = ignore # ignore/add/remove/force # Add or remove space around the ':' in 'b ? t : f'. sp_cond_colon = ignore # ignore/add/remove/force # Add or remove space before the ':' in 'b ? t : f'. # # Overrides sp_cond_colon. sp_cond_colon_before = ignore # ignore/add/remove/force # Add or remove space after the ':' in 'b ? t : f'. # # Overrides sp_cond_colon. sp_cond_colon_after = ignore # ignore/add/remove/force # Add or remove space around the '?' in 'b ? t : f'. sp_cond_question = ignore # ignore/add/remove/force # Add or remove space before the '?' in 'b ? t : f'. # # Overrides sp_cond_question. sp_cond_question_before = ignore # ignore/add/remove/force # Add or remove space after the '?' in 'b ? t : f'. # # Overrides sp_cond_question. sp_cond_question_after = ignore # ignore/add/remove/force # In the abbreviated ternary form '(a ?: b)', add or remove space between '?' # and ':'. # # Overrides all other sp_cond_* options. sp_cond_ternary_short = ignore # ignore/add/remove/force # Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make # sense here. sp_case_label = ignore # ignore/add/remove/force # (D) Add or remove space around the D '..' operator. sp_range = ignore # ignore/add/remove/force # Add or remove space after ':' in a Java/C++11 range-based 'for', # as in 'for (Type var : expr)'. sp_after_for_colon = ignore # ignore/add/remove/force # Add or remove space before ':' in a Java/C++11 range-based 'for', # as in 'for (Type var : expr)'. sp_before_for_colon = ignore # ignore/add/remove/force # (D) Add or remove space between 'extern' and '(' as in 'extern (C)'. sp_extern_paren = ignore # ignore/add/remove/force # Add or remove space after the opening of a C++ comment, # i.e. '// A' vs. '//A'. sp_cmt_cpp_start = ignore # ignore/add/remove/force # If true, space is added with sp_cmt_cpp_start will be added after doxygen # sequences like '///', '///<', '//!' and '//!<'. sp_cmt_cpp_doxygen = false # true/false # If true, space is added with sp_cmt_cpp_start will be added after Qt # translator or meta-data comments like '//:', '//=', and '//~'. sp_cmt_cpp_qttr = false # true/false # Add or remove space between #else or #endif and a trailing comment. sp_endif_cmt = ignore # ignore/add/remove/force # Add or remove space after 'new', 'delete' and 'delete[]'. sp_after_new = ignore # ignore/add/remove/force # Add or remove space between 'new' and '(' in 'new()'. sp_between_new_paren = ignore # ignore/add/remove/force # Add or remove space between ')' and type in 'new(foo) BAR'. sp_after_newop_paren = ignore # ignore/add/remove/force # Add or remove space inside parenthesis of the new operator # as in 'new(foo) BAR'. sp_inside_newop_paren = ignore # ignore/add/remove/force # Add or remove space after the open parenthesis of the new operator, # as in 'new(foo) BAR'. # # Overrides sp_inside_newop_paren. sp_inside_newop_paren_open = ignore # ignore/add/remove/force # Add or remove space before the close parenthesis of the new operator, # as in 'new(foo) BAR'. # # Overrides sp_inside_newop_paren. sp_inside_newop_paren_close = ignore # ignore/add/remove/force # Add or remove space before a trailing or embedded comment. sp_before_tr_emb_cmt = ignore # ignore/add/remove/force # Number of spaces before a trailing or embedded comment. sp_num_before_tr_emb_cmt = 0 # unsigned number # (Java) Add or remove space between an annotation and the open parenthesis. sp_annotation_paren = ignore # ignore/add/remove/force # If true, vbrace tokens are dropped to the previous token and skipped. sp_skip_vbrace_tokens = false # true/false # Add or remove space after 'noexcept'. sp_after_noexcept = ignore # ignore/add/remove/force # If true, a is inserted after #define. force_tab_after_define = false # true/false # # Indenting options # # The number of columns to indent per level. Usually 2, 3, 4, or 8. # # Default: 8 indent_columns = 4 # unsigned number # The continuation indent. If non-zero, this overrides the indent of '(' and # '=' continuation indents. Negative values are OK; negative value is absolute # and not increased for each '(' level. # # For FreeBSD, this is set to 4. indent_continue = 0 # number # The continuation indent, only for class header line(s). If non-zero, this # overrides the indent of 'class' continuation indents. indent_continue_class_head = 0 # unsigned number # Whether to indent empty lines (i.e. lines which contain only spaces before # the newline character). indent_single_newlines = false # true/false # The continuation indent for func_*_param if they are true. If non-zero, this # overrides the indent. indent_param = 0 # unsigned number # How to use tabs when indenting code. # # 0: Spaces only # 1: Indent with tabs to brace level, align with spaces (default) # 2: Indent and align with tabs, using spaces when not on a tabstop # # Default: 1 indent_with_tabs = 0 # unsigned number # Whether to indent comments that are not at a brace level with tabs on a # tabstop. Requires indent_with_tabs=2. If false, will use spaces. indent_cmt_with_tabs = false # true/false # Whether to indent strings broken by '\' so that they line up. indent_align_string = false # true/false # The number of spaces to indent multi-line XML strings. # Requires indent_align_string=true. indent_xml_string = 0 # unsigned number # Spaces to indent '{' from level. indent_brace = 0 # unsigned number # Whether braces are indented to the body level. indent_braces = false # true/false # Whether to disable indenting function braces if indent_braces=true. indent_braces_no_func = false # true/false # Whether to disable indenting class braces if indent_braces=true. indent_braces_no_class = false # true/false # Whether to disable indenting struct braces if indent_braces=true. indent_braces_no_struct = false # true/false # Whether to indent based on the size of the brace parent, # i.e. 'if' → 3 spaces, 'for' → 4 spaces, etc. indent_brace_parent = false # true/false # Whether to indent based on the open parenthesis instead of the open brace # in '({\n'. indent_paren_open_brace = false # true/false # (C#) Whether to indent the brace of a C# delegate by another level. indent_cs_delegate_brace = false # true/false # (C#) Whether to indent a C# delegate (to handle delegates with no brace) by # another level. indent_cs_delegate_body = false # true/false # Whether to indent the body of a 'namespace'. indent_namespace = false # true/false # Whether to indent only the first namespace, and not any nested namespaces. # Requires indent_namespace=true. indent_namespace_single_indent = false # true/false # The number of spaces to indent a namespace block. indent_namespace_level = 0 # unsigned number # If the body of the namespace is longer than this number, it won't be # indented. Requires indent_namespace=true. 0 means no limit. indent_namespace_limit = 0 # unsigned number # Whether the 'extern "C"' body is indented. indent_extern = false # true/false # Whether the 'class' body is indented. indent_class = false # true/false # Whether to indent the stuff after a leading base class colon. indent_class_colon = false # true/false # Whether to indent based on a class colon instead of the stuff after the # colon. Requires indent_class_colon=true. indent_class_on_colon = false # true/false # Whether to indent the stuff after a leading class initializer colon. indent_constr_colon = false # true/false # Virtual indent from the ':' for member initializers. # # Default: 2 indent_ctor_init_leading = 2 # unsigned number # Additional indent for constructor initializer list. # Negative values decrease indent down to the first column. indent_ctor_init = 0 # number # Whether to indent 'if' following 'else' as a new block under the 'else'. # If false, 'else\nif' is treated as 'else if' for indenting purposes. indent_else_if = false # true/false # Amount to indent variable declarations after a open brace. # # <0: Relative # â‰Ĩ0: Absolute indent_var_def_blk = 0 # number # Whether to indent continued variable declarations instead of aligning. indent_var_def_cont = false # true/false # Whether to indent continued shift expressions ('<<' and '>>') instead of # aligning. Set align_left_shift=false when enabling this. indent_shift = false # true/false # Whether to force indentation of function definitions to start in column 1. indent_func_def_force_col1 = false # true/false # Whether to indent continued function call parameters one indent level, # rather than aligning parameters under the open parenthesis. indent_func_call_param = false # true/false # Same as indent_func_call_param, but for function definitions. indent_func_def_param = false # true/false # Same as indent_func_call_param, but for function prototypes. indent_func_proto_param = false # true/false # Same as indent_func_call_param, but for class declarations. indent_func_class_param = false # true/false # Same as indent_func_call_param, but for class variable constructors. indent_func_ctor_var_param = false # true/false # Same as indent_func_call_param, but for template parameter lists. indent_template_param = false # true/false # Double the indent for indent_func_xxx_param options. # Use both values of the options indent_columns and indent_param. indent_func_param_double = false # true/false # Indentation column for standalone 'const' qualifier on a function # prototype. indent_func_const = 0 # unsigned number # Indentation column for standalone 'throw' qualifier on a function # prototype. indent_func_throw = 0 # unsigned number # The number of spaces to indent a continued '->' or '.'. # Usually set to 0, 1, or indent_columns. indent_member = 0 # unsigned number # Whether lines broken at '.' or '->' should be indented by a single indent. # The indent_member option will not be effective if this is set to true. indent_member_single = false # true/false # Spaces to indent single line ('//') comments on lines before code. indent_sing_line_comments = 0 # unsigned number # Whether to indent trailing single line ('//') comments relative to the code # instead of trying to keep the same absolute column. indent_relative_single_line_comments = false # true/false # Spaces to indent 'case' from 'switch'. Usually 0 or indent_columns. indent_switch_case = 0 # unsigned number # Whether to indent preprocessor statements inside of switch statements. # # Default: true indent_switch_pp = true # true/false # Spaces to shift the 'case' line, without affecting any other lines. # Usually 0. indent_case_shift = 0 # unsigned number # Spaces to indent '{' from 'case'. By default, the brace will appear under # the 'c' in case. Usually set to 0 or indent_columns. Negative values are OK. indent_case_brace = 0 # number # Whether to indent comments found in first column. indent_col1_comment = false # true/false # How to indent goto labels. # # >0: Absolute column where 1 is the leftmost column # ≤0: Subtract from brace indent # # Default: 1 indent_label = 1 # number # Same as indent_label, but for access specifiers that are followed by a # colon. # # Default: 1 indent_access_spec = 1 # number # Whether to indent the code after an access specifier by one level. # If true, this option forces 'indent_access_spec=0'. indent_access_spec_body = false # true/false # If an open parenthesis is followed by a newline, whether to indent the next # line so that it lines up after the open parenthesis (not recommended). indent_paren_nl = false # true/false # How to indent a close parenthesis after a newline. # # 0: Indent to body level (default) # 1: Align under the open parenthesis # 2: Indent to the brace level indent_paren_close = 0 # unsigned number # Whether to indent the open parenthesis of a function definition, # if the parenthesis is on its own line. indent_paren_after_func_def = false # true/false # Whether to indent the open parenthesis of a function declaration, # if the parenthesis is on its own line. indent_paren_after_func_decl = false # true/false # Whether to indent the open parenthesis of a function call, # if the parenthesis is on its own line. indent_paren_after_func_call = false # true/false # Whether to indent a comma when inside a parenthesis. # If true, aligns under the open parenthesis. indent_comma_paren = false # true/false # Whether to indent a Boolean operator when inside a parenthesis. # If true, aligns under the open parenthesis. indent_bool_paren = false # true/false # Whether to indent a semicolon when inside a for parenthesis. # If true, aligns under the open for parenthesis. indent_semicolon_for_paren = false # true/false # Whether to align the first expression to following ones # if indent_bool_paren=true. indent_first_bool_expr = false # true/false # Whether to align the first expression to following ones # if indent_semicolon_for_paren=true. indent_first_for_expr = false # true/false # If an open square is followed by a newline, whether to indent the next line # so that it lines up after the open square (not recommended). indent_square_nl = false # true/false # (ESQL/C) Whether to preserve the relative indent of 'EXEC SQL' bodies. indent_preserve_sql = false # true/false # Whether to align continued statements at the '='. If false or if the '=' is # followed by a newline, the next line is indent one tab. # # Default: true indent_align_assign = false # true/false # Whether to align continued statements at the '('. If false or the '(' is not # followed by a newline, the next line indent is one tab. # # Default: true indent_align_paren = true # true/false # (OC) Whether to indent Objective-C blocks at brace level instead of usual # rules. indent_oc_block = false # true/false # (OC) Indent for Objective-C blocks in a message relative to the parameter # name. # # =0: Use indent_oc_block rules # >0: Use specified number of spaces to indent indent_oc_block_msg = 0 # unsigned number # (OC) Minimum indent for subsequent parameters indent_oc_msg_colon = 0 # unsigned number # (OC) Whether to prioritize aligning with initial colon (and stripping spaces # from lines, if necessary). # # Default: true indent_oc_msg_prioritize_first_colon = true # true/false # (OC) Whether to indent blocks the way that Xcode does by default # (from the keyword if the parameter is on its own line; otherwise, from the # previous indentation level). Requires indent_oc_block_msg=true. indent_oc_block_msg_xcode_style = false # true/false # (OC) Whether to indent blocks from where the brace is, relative to a # message keyword. Requires indent_oc_block_msg=true. indent_oc_block_msg_from_keyword = false # true/false # (OC) Whether to indent blocks from where the brace is, relative to a message # colon. Requires indent_oc_block_msg=true. indent_oc_block_msg_from_colon = false # true/false # (OC) Whether to indent blocks from where the block caret is. # Requires indent_oc_block_msg=true. indent_oc_block_msg_from_caret = false # true/false # (OC) Whether to indent blocks from where the brace caret is. # Requires indent_oc_block_msg=true. indent_oc_block_msg_from_brace = false # true/false # When indenting after virtual brace open and newline add further spaces to # reach this minimum indent. indent_min_vbrace_open = 0 # unsigned number # Whether to add further spaces after regular indent to reach next tabstop # when identing after virtual brace open and newline. indent_vbrace_open_on_tabstop = false # true/false # How to indent after a brace followed by another token (not a newline). # true: indent all contained lines to match the token # false: indent all contained lines to match the brace # # Default: true indent_token_after_brace = true # true/false # Whether to indent the body of a C++11 lambda. indent_cpp_lambda_body = false # true/false # (C#) Whether to indent a 'using' block if no braces are used. # # Default: true indent_using_block = true # true/false # How to indent the continuation of ternary operator. # # 0: Off (default) # 1: When the `if_false` is a continuation, indent it under `if_false` # 2: When the `:` is a continuation, indent it under `?` indent_ternary_operator = 0 # unsigned number # If true, the indentation of the chunks after a `return new` sequence will be set at return indentation column. indent_off_after_return_new = false # true/false # If true, the tokens after return are indented with regular single indentation. By default (false) the indentation is after the return token. indent_single_after_return = false # true/false # Whether to ignore indent and alignment for 'asm' blocks (i.e. assume they # have their own indentation). indent_ignore_asm_block = false # true/false # # Newline adding and removing options # # Whether to collapse empty blocks between '{' and '}'. nl_collapse_empty_body = true # true/false # Don't split one-line braced assignments, as in 'foo_t f = { 1, 2 };'. nl_assign_leave_one_liners = false # true/false # Don't split one-line braced statements inside a 'class xx { }' body. nl_class_leave_one_liners = false # true/false # Don't split one-line enums, as in 'enum foo { BAR = 15 };' nl_enum_leave_one_liners = false # true/false # Don't split one-line get or set functions. nl_getset_leave_one_liners = false # true/false # (C#) Don't split one-line property get or set functions. nl_cs_property_leave_one_liners = false # true/false # Don't split one-line function definitions, as in 'int foo() { return 0; }'. nl_func_leave_one_liners = false # true/false # Don't split one-line C++11 lambdas, as in '[]() { return 0; }'. nl_cpp_lambda_leave_one_liners = false # true/false # Don't split one-line if/else statements, as in 'if(...) b++;'. nl_if_leave_one_liners = false # true/false # Don't split one-line while statements, as in 'while(...) b++;'. nl_while_leave_one_liners = false # true/false # Don't split one-line for statements, as in 'for(...) b++;'. nl_for_leave_one_liners = false # true/false # (OC) Don't split one-line Objective-C messages. nl_oc_msg_leave_one_liner = false # true/false # (OC) Add or remove newline between method declaration and '{'. nl_oc_mdef_brace = ignore # ignore/add/remove/force # (OC) Add or remove newline between Objective-C block signature and '{'. nl_oc_block_brace = ignore # ignore/add/remove/force # (OC) Add or remove newline between '@interface' and '{'. nl_oc_interface_brace = ignore # ignore/add/remove/force # (OC) Add or remove newline between '@implementation' and '{'. nl_oc_implementation_brace = ignore # ignore/add/remove/force # Add or remove newlines at the start of the file. nl_start_of_file = ignore # ignore/add/remove/force # The minimum number of newlines at the start of the file (only used if # nl_start_of_file is 'add' or 'force'). nl_start_of_file_min = 0 # unsigned number # Add or remove newline at the end of the file. nl_end_of_file = ignore # ignore/add/remove/force # The minimum number of newlines at the end of the file (only used if # nl_end_of_file is 'add' or 'force'). nl_end_of_file_min = 0 # unsigned number # Add or remove newline between '=' and '{'. nl_assign_brace = remove # ignore/add/remove/force # (D) Add or remove newline between '=' and '['. nl_assign_square = ignore # ignore/add/remove/force # Add or remove newline between '[]' and '{'. nl_tsquare_brace = ignore # ignore/add/remove/force # (D) Add or remove newline after '= ['. Will also affect the newline before # the ']'. nl_after_square_assign = ignore # ignore/add/remove/force # The number of blank lines after a block of variable definitions at the top # of a function body. # # 0 = No change (default). nl_func_var_def_blk = 0 # unsigned number # The number of newlines before a block of typedefs. If nl_after_access_spec # is non-zero, that option takes precedence. # # 0 = No change (default). nl_typedef_blk_start = 0 # unsigned number # The number of newlines after a block of typedefs. # # 0 = No change (default). nl_typedef_blk_end = 0 # unsigned number # The maximum number of consecutive newlines within a block of typedefs. # # 0 = No change (default). nl_typedef_blk_in = 0 # unsigned number # The number of newlines before a block of variable definitions not at the top # of a function body. If nl_after_access_spec is non-zero, that option takes # precedence. # # 0 = No change (default). nl_var_def_blk_start = 0 # unsigned number # The number of newlines after a block of variable definitions not at the top # of a function body. # # 0 = No change (default). nl_var_def_blk_end = 0 # unsigned number # The maximum number of consecutive newlines within a block of variable # definitions. # # 0 = No change (default). nl_var_def_blk_in = 0 # unsigned number # Add or remove newline between a function call's ')' and '{', as in # 'list_for_each(item, &list) { }'. nl_fcall_brace = ignore # ignore/add/remove/force # Add or remove newline between 'enum' and '{'. nl_enum_brace = ignore # ignore/add/remove/force # Add or remove newline between 'enum' and 'class'. nl_enum_class = ignore # ignore/add/remove/force # Add or remove newline between 'enum class' and the identifier. nl_enum_class_identifier = ignore # ignore/add/remove/force # Add or remove newline between 'enum class' type and ':'. nl_enum_identifier_colon = ignore # ignore/add/remove/force # Add or remove newline between 'enum class identifier :' and type. nl_enum_colon_type = ignore # ignore/add/remove/force # Add or remove newline between 'struct and '{'. nl_struct_brace = ignore # ignore/add/remove/force # Add or remove newline between 'union' and '{'. nl_union_brace = ignore # ignore/add/remove/force # Add or remove newline between 'if' and '{'. nl_if_brace = remove # ignore/add/remove/force # Add or remove newline between '}' and 'else'. nl_brace_else = add # ignore/add/remove/force # Add or remove newline between 'else if' and '{'. If set to ignore, # nl_if_brace is used instead. nl_elseif_brace = add # ignore/add/remove/force # Add or remove newline between 'else' and '{'. nl_else_brace = remove # ignore/add/remove/force # Add or remove newline between 'else' and 'if'. nl_else_if = ignore # ignore/add/remove/force # Add or remove newline before 'if'/'else if' closing parenthesis. nl_before_if_closing_paren = ignore # ignore/add/remove/force # Add or remove newline between '}' and 'finally'. nl_brace_finally = ignore # ignore/add/remove/force # Add or remove newline between 'finally' and '{'. nl_finally_brace = ignore # ignore/add/remove/force # Add or remove newline between 'try' and '{'. nl_try_brace = ignore # ignore/add/remove/force # Add or remove newline between get/set and '{'. nl_getset_brace = ignore # ignore/add/remove/force # Add or remove newline between 'for' and '{'. nl_for_brace = remove # ignore/add/remove/force # Add or remove newline before the '{' of a 'catch' statement, as in # 'catch (decl) {'. nl_catch_brace = ignore # ignore/add/remove/force # (OC) Add or remove newline before the '{' of a '@catch' statement, as in # '@catch (decl) {'. If set to ignore, nl_catch_brace is used. nl_oc_catch_brace = ignore # ignore/add/remove/force # Add or remove newline between '}' and 'catch'. nl_brace_catch = ignore # ignore/add/remove/force # (OC) Add or remove newline between '}' and '@catch'. If set to ignore, # nl_brace_catch is used. nl_oc_brace_catch = ignore # ignore/add/remove/force # Add or remove newline between '}' and ']'. nl_brace_square = ignore # ignore/add/remove/force # Add or remove newline between '}' and ')' in a function invocation. nl_brace_fparen = ignore # ignore/add/remove/force # Add or remove newline between 'while' and '{'. nl_while_brace = remove # ignore/add/remove/force # (D) Add or remove newline between 'scope (x)' and '{'. nl_scope_brace = ignore # ignore/add/remove/force # (D) Add or remove newline between 'unittest' and '{'. nl_unittest_brace = ignore # ignore/add/remove/force # (D) Add or remove newline between 'version (x)' and '{'. nl_version_brace = ignore # ignore/add/remove/force # (C#) Add or remove newline between 'using' and '{'. nl_using_brace = ignore # ignore/add/remove/force # Add or remove newline between two open or close braces. Due to general # newline/brace handling, REMOVE may not work. nl_brace_brace = ignore # ignore/add/remove/force # Add or remove newline between 'do' and '{'. nl_do_brace = remove # ignore/add/remove/force # Add or remove newline between '}' and 'while' of 'do' statement. nl_brace_while = remove # ignore/add/remove/force # Add or remove newline between 'switch' and '{'. nl_switch_brace = remove # ignore/add/remove/force # Add or remove newline between 'synchronized' and '{'. nl_synchronized_brace = ignore # ignore/add/remove/force # Add a newline between ')' and '{' if the ')' is on a different line than the # if/for/etc. # # Overrides nl_for_brace, nl_if_brace, nl_switch_brace, nl_while_switch and # nl_catch_brace. nl_multi_line_cond = false # true/false # Force a newline in a define after the macro name for multi-line defines. nl_multi_line_define = false # true/false # Whether to add a newline before 'case', and a blank line before a 'case' # statement that follows a ';' or '}'. nl_before_case = false # true/false # Whether to add a newline after a 'case' statement. nl_after_case = false # true/false # Add or remove newline between a case ':' and '{'. # # Overrides nl_after_case. nl_case_colon_brace = ignore # ignore/add/remove/force # Add or remove newline between ')' and 'throw'. nl_before_throw = ignore # ignore/add/remove/force # Add or remove newline between 'namespace' and '{'. nl_namespace_brace = ignore # ignore/add/remove/force # Add or remove newline between 'template<>' and whatever follows. nl_template_class = ignore # ignore/add/remove/force # Add or remove newline between 'class' and '{'. nl_class_brace = ignore # ignore/add/remove/force # Add or remove newline before or after (depending on pos_class_comma) each # ',' in the base class list. nl_class_init_args = ignore # ignore/add/remove/force # Add or remove newline after each ',' in the constructor member # initialization. Related to nl_constr_colon, pos_constr_colon and # pos_constr_comma. nl_constr_init_args = ignore # ignore/add/remove/force # Add or remove newline before first element, after comma, and after last # element, in 'enum'. nl_enum_own_lines = ignore # ignore/add/remove/force # Add or remove newline between return type and function name in a function # definition. nl_func_type_name = ignore # ignore/add/remove/force # Add or remove newline between return type and function name inside a class # definition. If set to ignore, nl_func_type_name or nl_func_proto_type_name # is used instead. nl_func_type_name_class = ignore # ignore/add/remove/force # Add or remove newline between class specification and '::' # in 'void A::f() { }'. Only appears in separate member implementation (does # not appear with in-line implementation). nl_func_class_scope = ignore # ignore/add/remove/force # Add or remove newline between function scope and name, as in # 'void A :: f() { }'. nl_func_scope_name = ignore # ignore/add/remove/force # Add or remove newline between return type and function name in a prototype. nl_func_proto_type_name = ignore # ignore/add/remove/force # Add or remove newline between a function name and the opening '(' in the # declaration. nl_func_paren = ignore # ignore/add/remove/force # Overrides nl_func_paren for functions with no parameters. nl_func_paren_empty = ignore # ignore/add/remove/force # Add or remove newline between a function name and the opening '(' in the # definition. nl_func_def_paren = ignore # ignore/add/remove/force # Overrides nl_func_def_paren for functions with no parameters. nl_func_def_paren_empty = ignore # ignore/add/remove/force # Add or remove newline between a function name and the opening '(' in the # call. nl_func_call_paren = ignore # ignore/add/remove/force # Overrides nl_func_call_paren for functions with no parameters. nl_func_call_paren_empty = ignore # ignore/add/remove/force # Add or remove newline after '(' in a function declaration. nl_func_decl_start = ignore # ignore/add/remove/force # Add or remove newline after '(' in a function definition. nl_func_def_start = ignore # ignore/add/remove/force # Overrides nl_func_decl_start when there is only one parameter. nl_func_decl_start_single = ignore # ignore/add/remove/force # Overrides nl_func_def_start when there is only one parameter. nl_func_def_start_single = ignore # ignore/add/remove/force # Whether to add a newline after '(' in a function declaration if '(' and ')' # are in different lines. If false, nl_func_decl_start is used instead. nl_func_decl_start_multi_line = false # true/false # Whether to add a newline after '(' in a function definition if '(' and ')' # are in different lines. If false, nl_func_def_start is used instead. nl_func_def_start_multi_line = false # true/false # Add or remove newline after each ',' in a function declaration. nl_func_decl_args = ignore # ignore/add/remove/force # Add or remove newline after each ',' in a function definition. nl_func_def_args = ignore # ignore/add/remove/force # Whether to add a newline after each ',' in a function declaration if '(' # and ')' are in different lines. If false, nl_func_decl_args is used instead. nl_func_decl_args_multi_line = false # true/false # Whether to add a newline after each ',' in a function definition if '(' # and ')' are in different lines. If false, nl_func_def_args is used instead. nl_func_def_args_multi_line = false # true/false # Add or remove newline before the ')' in a function declaration. nl_func_decl_end = ignore # ignore/add/remove/force # Add or remove newline before the ')' in a function definition. nl_func_def_end = ignore # ignore/add/remove/force # Overrides nl_func_decl_end when there is only one parameter. nl_func_decl_end_single = ignore # ignore/add/remove/force # Overrides nl_func_def_end when there is only one parameter. nl_func_def_end_single = ignore # ignore/add/remove/force # Whether to add a newline before ')' in a function declaration if '(' and ')' # are in different lines. If false, nl_func_decl_end is used instead. nl_func_decl_end_multi_line = false # true/false # Whether to add a newline before ')' in a function definition if '(' and ')' # are in different lines. If false, nl_func_def_end is used instead. nl_func_def_end_multi_line = false # true/false # Add or remove newline between '()' in a function declaration. nl_func_decl_empty = ignore # ignore/add/remove/force # Add or remove newline between '()' in a function definition. nl_func_def_empty = ignore # ignore/add/remove/force # Add or remove newline between '()' in a function call. nl_func_call_empty = ignore # ignore/add/remove/force # Whether to add a newline after '(' in a function call if '(' and ')' are in # different lines. nl_func_call_start_multi_line = false # true/false # Whether to add a newline after each ',' in a function call if '(' and ')' # are in different lines. nl_func_call_args_multi_line = false # true/false # Whether to add a newline before ')' in a function call if '(' and ')' are in # different lines. nl_func_call_end_multi_line = false # true/false # (OC) Whether to put each Objective-C message parameter on a separate line. # See nl_oc_msg_leave_one_liner. nl_oc_msg_args = false # true/false # Add or remove newline between function signature and '{'. nl_fdef_brace = force # ignore/add/remove/force # Add or remove newline between C++11 lambda signature and '{'. nl_cpp_ldef_brace = ignore # ignore/add/remove/force # Add or remove newline between 'return' and the return expression. nl_return_expr = ignore # ignore/add/remove/force # Whether to add a newline after semicolons, except in 'for' statements. nl_after_semicolon = false # true/false # (Java) Add or remove newline between the ')' and '{{' of the double brace # initializer. nl_paren_dbrace_open = ignore # ignore/add/remove/force # Whether to add a newline after the type in an unnamed temporary # direct-list-initialization. nl_type_brace_init_lst = ignore # ignore/add/remove/force # Whether to add a newline after the open brace in an unnamed temporary # direct-list-initialization. nl_type_brace_init_lst_open = ignore # ignore/add/remove/force # Whether to add a newline before the close brace in an unnamed temporary # direct-list-initialization. nl_type_brace_init_lst_close = ignore # ignore/add/remove/force # Whether to add a newline after '{'. This also adds a newline before the # matching '}'. nl_after_brace_open = false # true/false # Whether to add a newline between the open brace and a trailing single-line # comment. Requires nl_after_brace_open=true. nl_after_brace_open_cmt = false # true/false # Whether to add a newline after a virtual brace open with a non-empty body. # These occur in un-braced if/while/do/for statement bodies. nl_after_vbrace_open = false # true/false # Whether to add a newline after a virtual brace open with an empty body. # These occur in un-braced if/while/do/for statement bodies. nl_after_vbrace_open_empty = false # true/false # Whether to add a newline after '}'. Does not apply if followed by a # necessary ';'. nl_after_brace_close = false # true/false # Whether to add a newline after a virtual brace close, # as in 'if (foo) a++; return;'. nl_after_vbrace_close = false # true/false # Add or remove newline between the close brace and identifier, # as in 'struct { int a; } b;'. Affects enumerations, unions and # structures. If set to ignore, uses nl_after_brace_close. nl_brace_struct_var = ignore # ignore/add/remove/force # Whether to alter newlines in '#define' macros. nl_define_macro = false # true/false # Whether to alter newlines between consecutive parenthesis closes. The number # of closing parentheses in a line will depend on respective open parenthesis # lines. nl_squeeze_paren_close = false # true/false # Whether to remove blanks after '#ifxx' and '#elxx', or before '#elxx' and # '#endif'. Does not affect top-level #ifdefs. nl_squeeze_ifdef = false # true/false # Makes the nl_squeeze_ifdef option affect the top-level #ifdefs as well. nl_squeeze_ifdef_top_level = false # true/false # Add or remove blank line before 'if'. nl_before_if = force # ignore/add/remove/force # Add or remove blank line after 'if' statement. Add/Force work only if the # next token is not a closing brace. nl_after_if = force # ignore/add/remove/force # Add or remove blank line before 'for'. nl_before_for = force # ignore/add/remove/force # Add or remove blank line after 'for' statement. nl_after_for = force # ignore/add/remove/force # Add or remove blank line before 'while'. nl_before_while = force # ignore/add/remove/force # Add or remove blank line after 'while' statement. nl_after_while = force # ignore/add/remove/force # Add or remove blank line before 'switch'. nl_before_switch = force # ignore/add/remove/force # Add or remove blank line after 'switch' statement. nl_after_switch = force # ignore/add/remove/force # Add or remove blank line before 'synchronized'. nl_before_synchronized = ignore # ignore/add/remove/force # Add or remove blank line after 'synchronized' statement. nl_after_synchronized = ignore # ignore/add/remove/force # Add or remove blank line before 'do'. nl_before_do = force # ignore/add/remove/force # Add or remove blank line after 'do/while' statement. nl_after_do = force # ignore/add/remove/force # Whether to double-space commented-entries in 'struct'/'union'/'enum'. nl_ds_struct_enum_cmt = false # true/false # Whether to force a newline before '}' of a 'struct'/'union'/'enum'. # (Lower priority than eat_blanks_before_close_brace.) nl_ds_struct_enum_close_brace = false # true/false # Add or remove newline before or after (depending on pos_class_colon) a class # colon, as in 'class Foo : public Bar'. nl_class_colon = ignore # ignore/add/remove/force # Add or remove newline around a class constructor colon. The exact position # depends on nl_constr_init_args, pos_constr_colon and pos_constr_comma. nl_constr_colon = ignore # ignore/add/remove/force # Whether to collapse a two-line namespace, like 'namespace foo\n{ decl; }' # into a single line. If true, prevents other brace newline rules from turning # such code into four lines. nl_namespace_two_to_one_liner = false # true/false # Whether to remove a newline in simple unbraced if statements, turning them # into one-liners, as in 'if(b)\n i++;' → 'if(b) i++;'. nl_create_if_one_liner = false # true/false # Whether to remove a newline in simple unbraced for statements, turning them # into one-liners, as in 'for (...)\n stmt;' → 'for (...) stmt;'. nl_create_for_one_liner = false # true/false # Whether to remove a newline in simple unbraced while statements, turning # them into one-liners, as in 'while (expr)\n stmt;' → 'while (expr) stmt;'. nl_create_while_one_liner = false # true/false # Whether to collapse a function definition whose body (not counting braces) # is only one line so that the entire definition (prototype, braces, body) is # a single line. nl_create_func_def_one_liner = false # true/false # Whether to split one-line simple unbraced if statements into two lines by # adding a newline, as in 'if(b) i++;'. nl_split_if_one_liner = false # true/false # Whether to split one-line simple unbraced for statements into two lines by # adding a newline, as in 'for (...) stmt;'. nl_split_for_one_liner = false # true/false # Whether to split one-line simple unbraced while statements into two lines by # adding a newline, as in 'while (expr) stmt;'. nl_split_while_one_liner = false # true/false # # Blank line options # # The maximum number of consecutive newlines (3 = 2 blank lines). nl_max = 0 # unsigned number # The maximum number of consecutive newlines in a function. nl_max_blank_in_func = 0 # unsigned number # The number of newlines before a function prototype. nl_before_func_body_proto = 0 # unsigned number # The number of newlines before a multi-line function definition. nl_before_func_body_def = 0 # unsigned number # The number of newlines before a class constructor/destructor prototype. nl_before_func_class_proto = 0 # unsigned number # The number of newlines before a class constructor/destructor definition. nl_before_func_class_def = 0 # unsigned number # The number of newlines after a function prototype. nl_after_func_proto = 0 # unsigned number # The number of newlines after a function prototype, if not followed by # another function prototype. nl_after_func_proto_group = 0 # unsigned number # The number of newlines after a class constructor/destructor prototype. nl_after_func_class_proto = 0 # unsigned number # The number of newlines after a class constructor/destructor prototype, # if not followed by another constructor/destructor prototype. nl_after_func_class_proto_group = 0 # unsigned number # Whether one-line method definitions inside a class body should be treated # as if they were prototypes for the purposes of adding newlines. # # Requires nl_class_leave_one_liners=true. Overrides nl_before_func_body_def # and nl_before_func_class_def for one-liners. nl_class_leave_one_liner_groups = false # true/false # The number of newlines after '}' of a multi-line function body. nl_after_func_body = 0 # unsigned number # The number of newlines after '}' of a multi-line function body in a class # declaration. Also affects class constructors/destructors. # # Overrides nl_after_func_body. nl_after_func_body_class = 0 # unsigned number # The number of newlines after '}' of a single line function body. Also # affects class constructors/destructors. # # Overrides nl_after_func_body and nl_after_func_body_class. nl_after_func_body_one_liner = 0 # unsigned number # The minimum number of newlines before a multi-line comment. # Doesn't apply if after a brace open or another multi-line comment. nl_before_block_comment = 0 # unsigned number # The minimum number of newlines before a single-line C comment. # Doesn't apply if after a brace open or other single-line C comments. nl_before_c_comment = 0 # unsigned number # The minimum number of newlines before a CPP comment. # Doesn't apply if after a brace open or other CPP comments. nl_before_cpp_comment = 0 # unsigned number # Whether to force a newline after a multi-line comment. nl_after_multiline_comment = false # true/false # Whether to force a newline after a label's colon. nl_after_label_colon = false # true/false # The number of newlines after '}' or ';' of a struct/enum/union definition. nl_after_struct = 0 # unsigned number # The number of newlines before a class definition. nl_before_class = 0 # unsigned number # The number of newlines after '}' or ';' of a class definition. nl_after_class = 0 # unsigned number # The number of newlines before an access specifier label. This also includes # the Qt-specific 'signals:' and 'slots:'. Will not change the newline count # if after a brace open. # # 0 = No change (default). nl_before_access_spec = 0 # unsigned number # The number of newlines after an access specifier label. This also includes # the Qt-specific 'signals:' and 'slots:'. Will not change the newline count # if after a brace open. # # 0 = No change (default). # # Overrides nl_typedef_blk_start and nl_var_def_blk_start. nl_after_access_spec = 0 # unsigned number # The number of newlines between a function definition and the function # comment, as in '// comment\n void foo() {...}'. # # 0 = No change (default). nl_comment_func_def = 0 # unsigned number # The number of newlines after a try-catch-finally block that isn't followed # by a brace close. # # 0 = No change (default). nl_after_try_catch_finally = 0 # unsigned number # (C#) The number of newlines before and after a property, indexer or event # declaration. # # 0 = No change (default). nl_around_cs_property = 0 # unsigned number # (C#) The number of newlines between the get/set/add/remove handlers. # # 0 = No change (default). nl_between_get_set = 0 # unsigned number # (C#) Add or remove newline between property and the '{'. nl_property_brace = ignore # ignore/add/remove/force # The number of newlines after '{' of a namespace. This also adds newlines # before the matching '}'. # # 0 = Apply eat_blanks_after_open_brace or eat_blanks_before_close_brace if # applicable, otherwise no change. # # Overrides eat_blanks_after_open_brace and eat_blanks_before_close_brace. nl_inside_namespace = 0 # unsigned number # Whether to remove blank lines after '{'. eat_blanks_after_open_brace = false # true/false # Whether to remove blank lines before '}'. eat_blanks_before_close_brace = false # true/false # How aggressively to remove extra newlines not in preprocessor. # # 0: No change (default) # 1: Remove most newlines not handled by other config # 2: Remove all newlines and reformat completely by config nl_remove_extra_newlines = 0 # unsigned number # Whether to put a blank line before 'return' statements, unless after an open # brace. nl_before_return = false # true/false # Whether to put a blank line after 'return' statements, unless followed by a # close brace. nl_after_return = false # true/false # (Java) Add or remove newline after an annotation statement. Only affects # annotations that are after a newline. nl_after_annotation = ignore # ignore/add/remove/force # (Java) Add or remove newline between two annotations. nl_between_annotation = ignore # ignore/add/remove/force # # Positioning options # # The position of arithmetic operators in wrapped expressions. pos_arith = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of assignment in wrapped expressions. Do not affect '=' # followed by '{'. pos_assign = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of Boolean operators in wrapped expressions. pos_bool = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of comparison operators in wrapped expressions. pos_compare = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of conditional operators, as in the '?' and ':' of # 'expr ? stmt : stmt', in wrapped expressions. pos_conditional = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of the comma in wrapped expressions. pos_comma = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of the comma in enum entries. pos_enum_comma = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of the comma in the base class list if there is more than one # line. Affects nl_class_init_args. pos_class_comma = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of the comma in the constructor initialization list. # Related to nl_constr_colon, nl_constr_init_args and pos_constr_colon. pos_constr_comma = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of trailing/leading class colon, between class and base class # list. Affects nl_class_colon. pos_class_colon = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of colons between constructor and member initialization. # Related to nl_constr_colon, nl_constr_init_args and pos_constr_comma. pos_constr_colon = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # # Line splitting options # # Try to limit code width to N columns. code_width = 120 # unsigned number # Whether to fully split long 'for' statements at semi-colons. ls_for_split_full = true # true/false # Whether to fully split long function prototypes/calls at commas. ls_func_split_full = true # true/false # Whether to split lines as close to code_width as possible and ignore some # groupings. ls_code_width = false # true/false # # Code alignment options (not left column spaces/tabs) # # Whether to keep non-indenting tabs. align_keep_tabs = false # true/false # Whether to use tabs for aligning. align_with_tabs = false # true/false # Whether to bump out to the next tab when aligning. align_on_tabstop = false # true/false # Whether to right-align numbers. align_number_right = false # true/false # Whether to keep whitespace not required for alignment. align_keep_extra_space = false # true/false # Whether to align variable definitions in prototypes and functions. align_func_params = false # true/false # The span for aligning parameter definitions in function on parameter name. # # 0 = Don't align (default). align_func_params_span = 0 # unsigned number # The threshold for aligning function parameter definitions. # # 0 = No limit (default). align_func_params_thresh = 0 # unsigned number # The gap for aligning function parameter definitions. align_func_params_gap = 0 # unsigned number # Whether to align parameters in single-line functions that have the same # name. The function names must already be aligned with each other. align_same_func_call_params = false # true/false # The span for aligning function-call parameters for single line functions. # # 0 = Don't align (default). align_same_func_call_params_span = 0 # unsigned number # The threshold for aligning function-call parameters for single line # functions. # # 0 = No limit (default). align_same_func_call_params_thresh = 0 # unsigned number # The span for aligning variable definitions. # # 0 = Don't align (default). align_var_def_span = 0 # unsigned number # How to align the '*' in variable definitions. # # 0: Part of the type 'void * foo;' (default) # 1: Part of the variable 'void *foo;' # 2: Dangling 'void *foo;' align_var_def_star_style = 0 # unsigned number # How to align the '&' in variable definitions. # # 0: Part of the type 'long & foo;' (default) # 1: Part of the variable 'long &foo;' # 2: Dangling 'long &foo;' align_var_def_amp_style = 0 # unsigned number # The threshold for aligning variable definitions. # # 0 = No limit (default). align_var_def_thresh = 0 # unsigned number # The gap for aligning variable definitions. align_var_def_gap = 0 # unsigned number # Whether to align the colon in struct bit fields. align_var_def_colon = false # true/false # The gap for aligning the colon in struct bit fields. align_var_def_colon_gap = 0 # unsigned number # Whether to align any attribute after the variable name. align_var_def_attribute = false # true/false # Whether to align inline struct/enum/union variable definitions. align_var_def_inline = false # true/false # The span for aligning on '=' in assignments. # # 0 = Don't align (default). align_assign_span = 0 # unsigned number # The threshold for aligning on '=' in assignments. # # 0 = No limit (default). align_assign_thresh = 0 # unsigned number # How to apply align_assign_span to function declaration "assignments", i.e. # 'virtual void foo() = 0' or '~foo() = {default|delete}'. # # 0: Align with other assignments (default) # 1: Align with each other, ignoring regular assignments # 2: Don't align align_assign_decl_func = 0 # unsigned number # The span for aligning on '=' in enums. # # 0 = Don't align (default). align_enum_equ_span = 0 # unsigned number # The threshold for aligning on '=' in enums. # # 0 = no limit (default). align_enum_equ_thresh = 0 # unsigned number # The span for aligning class member definitions. # # 0 = Don't align (default). align_var_class_span = 0 # unsigned number # The threshold for aligning class member definitions. # # 0 = No limit (default). align_var_class_thresh = 0 # unsigned number # The gap for aligning class member definitions. align_var_class_gap = 0 # unsigned number # The span for aligning struct/union member definitions. # # 0 = Don't align (default). align_var_struct_span = 0 # unsigned number # The threshold for aligning struct/union member definitions. # # 0 = No limit (default). align_var_struct_thresh = 0 # unsigned number # The gap for aligning struct/union member definitions. align_var_struct_gap = 0 # unsigned number # The span for aligning struct initializer values. # # 0 = Don't align (default). align_struct_init_span = 0 # unsigned number # The minimum space between the type and the synonym of a typedef. align_typedef_gap = 0 # unsigned number # The span for aligning single-line typedefs. # # 0 = Don't align (default). align_typedef_span = 0 # unsigned number # How to align typedef'd functions with other typedefs. # # 0: Don't mix them at all (default) # 1: Align the open parenthesis with the types # 2: Align the function type name with the other type names align_typedef_func = 0 # unsigned number # How to align the '*' in typedefs. # # 0: Align on typedef type, ignore '*' (default) # 1: The '*' is part of type name: 'typedef int *pint;' # 2: The '*' is part of the type, but dangling: 'typedef int *pint;' align_typedef_star_style = 0 # unsigned number # How to align the '&' in typedefs. # # 0: Align on typedef type, ignore '&' (default) # 1: The '&' is part of type name: 'typedef int &pint;' # 2: The '&' is part of the type, but dangling: 'typedef int &pint;' align_typedef_amp_style = 0 # unsigned number # The span for aligning comments that end lines. # # 0 = Don't align (default). align_right_cmt_span = 0 # unsigned number # If aligning comments, whether to mix with comments after '}' and #endif with # less than three spaces before the comment. align_right_cmt_mix = false # true/false # Whether to only align trailing comments that are at the same brace level. align_right_cmt_same_level = false # true/false # Minimum number of columns between preceding text and a trailing comment in # order for the comment to qualify for being aligned. Must be non-zero to have # an effect. align_right_cmt_gap = 0 # unsigned number # Minimum column at which to align trailing comments. Comments which are # aligned beyond this column, but which can be aligned in a lesser column, # may be "pulled in". # # 0 = Ignore (default). align_right_cmt_at_col = 0 # unsigned number # The span for aligning function prototypes. # # 0 = Don't align (default). align_func_proto_span = 0 # unsigned number # Minimum gap between the return type and the function name. align_func_proto_gap = 0 # unsigned number # Whether to align function prototypes on the 'operator' keyword instead of # what follows. align_on_operator = false # true/false # Whether to mix aligning prototype and variable declarations. If true, # align_var_def_XXX options are used instead of align_func_proto_XXX options. align_mix_var_proto = false # true/false # Whether to align single-line functions with function prototypes. # Uses align_func_proto_span. align_single_line_func = false # true/false # Whether to align the open brace of single-line functions. # Requires align_single_line_func=true. Uses align_func_proto_span. align_single_line_brace = false # true/false # Gap for align_single_line_brace. align_single_line_brace_gap = 0 # unsigned number # (OC) The span for aligning Objective-C message specifications. # # 0 = Don't align (default). align_oc_msg_spec_span = 0 # unsigned number # Whether to align macros wrapped with a backslash and a newline. This will # not work right if the macro contains a multi-line comment. align_nl_cont = false # true/false # Whether to align macro functions and variables together. align_pp_define_together = false # true/false # The minimum space between label and value of a preprocessor define. align_pp_define_gap = 0 # unsigned number # The span for aligning on '#define' bodies. # # =0: Don't align (default) # >0: Number of lines (including comments) between blocks align_pp_define_span = 0 # unsigned number # Whether to align lines that start with '<<' with previous '<<'. # # Default: true align_left_shift = true # true/false # Whether to align text after 'asm volatile ()' colons. align_asm_colon = false # true/false # (OC) Span for aligning parameters in an Objective-C message call # on the ':'. # # 0 = Don't align. align_oc_msg_colon_span = 0 # unsigned number # (OC) Whether to always align with the first parameter, even if it is too # short. align_oc_msg_colon_first = false # true/false # (OC) Whether to align parameters in an Objective-C '+' or '-' declaration # on the ':'. align_oc_decl_colon = false # true/false # # Comment modification options # # Try to wrap comments at N columns. cmt_width = 0 # unsigned number # How to reflow comments. # # 0: No reflowing (apart from the line wrapping due to cmt_width) (default) # 1: No touching at all # 2: Full reflow cmt_reflow_mode = 0 # unsigned number # Whether to convert all tabs to spaces in comments. If false, tabs in # comments are left alone, unless used for indenting. cmt_convert_tab_to_spaces = true # true/false # Whether to apply changes to multi-line comments, including cmt_width, # keyword substitution and leading chars. # # Default: true cmt_indent_multi = true # true/false # Whether to group c-comments that look like they are in a block. cmt_c_group = false # true/false # Whether to put an empty '/*' on the first line of the combined c-comment. cmt_c_nl_start = false # true/false # Whether to add a newline before the closing '*/' of the combined c-comment. cmt_c_nl_end = false # true/false # Whether to change cpp-comments into c-comments. cmt_cpp_to_c = true # true/false # Whether to group cpp-comments that look like they are in a block. Only # meaningful if cmt_cpp_to_c=true. cmt_cpp_group = false # true/false # Whether to put an empty '/*' on the first line of the combined cpp-comment # when converting to a c-comment. # # Requires cmt_cpp_to_c=true and cmt_cpp_group=true. cmt_cpp_nl_start = false # true/false # Whether to add a newline before the closing '*/' of the combined cpp-comment # when converting to a c-comment. # # Requires cmt_cpp_to_c=true and cmt_cpp_group=true. cmt_cpp_nl_end = false # true/false # Whether to put a star on subsequent comment lines. cmt_star_cont = true # true/false # The number of spaces to insert at the start of subsequent comment lines. cmt_sp_before_star_cont = 0 # unsigned number # The number of spaces to insert after the star on subsequent comment lines. cmt_sp_after_star_cont = 0 # unsigned number # For multi-line comments with a '*' lead, remove leading spaces if the first # and last lines of the comment are the same length. # # Default: true cmt_multi_check_last = true # true/false # For multi-line comments with a '*' lead, remove leading spaces if the first # and last lines of the comment are the same length AND if the length is # bigger as the first_len minimum. # # Default: 4 cmt_multi_first_len_minimum = 4 # unsigned number # Path to a file that contains text to insert at the beginning of a file if # the file doesn't start with a C/C++ comment. If the inserted text contains # '$(filename)', that will be replaced with the current file's name. cmt_insert_file_header = "" # string # Path to a file that contains text to insert at the end of a file if the # file doesn't end with a C/C++ comment. If the inserted text contains # '$(filename)', that will be replaced with the current file's name. cmt_insert_file_footer = "" # string # Path to a file that contains text to insert before a function definition if # the function isn't preceded by a C/C++ comment. If the inserted text # contains '$(function)', '$(javaparam)' or '$(fclass)', these will be # replaced with, respectively, the name of the function, the javadoc '@param' # and '@return' stuff, or the name of the class to which the member function # belongs. cmt_insert_func_header = "" # string # Path to a file that contains text to insert before a class if the class # isn't preceded by a C/C++ comment. If the inserted text contains '$(class)', # that will be replaced with the class name. cmt_insert_class_header = "" # string # Path to a file that contains text to insert before an Objective-C message # specification, if the method isn't preceded by a C/C++ comment. If the # inserted text contains '$(message)' or '$(javaparam)', these will be # replaced with, respectively, the name of the function, or the javadoc # '@param' and '@return' stuff. cmt_insert_oc_msg_header = "" # string # Whether a comment should be inserted if a preprocessor is encountered when # stepping backwards from a function name. # # Applies to cmt_insert_oc_msg_header, cmt_insert_func_header and # cmt_insert_class_header. cmt_insert_before_preproc = false # true/false # Whether a comment should be inserted if a function is declared inline to a # class definition. # # Applies to cmt_insert_func_header. # # Default: true cmt_insert_before_inlines = true # true/false # Whether a comment should be inserted if the function is a class constructor # or destructor. # # Applies to cmt_insert_func_header. cmt_insert_before_ctor_dtor = false # true/false # # Code modifying options (non-whitespace) # # Add or remove braces on a single-line 'do' statement. mod_full_brace_do = remove # ignore/add/remove/force # Add or remove braces on a single-line 'for' statement. mod_full_brace_for = remove # ignore/add/remove/force # (Pawn) Add or remove braces on a single-line function definition. mod_full_brace_function = force # ignore/add/remove/force # Add or remove braces on a single-line 'if' statement. Braces will not be # removed if the braced statement contains an 'else'. mod_full_brace_if = remove # ignore/add/remove/force # Whether to enforce that all blocks of an 'if'/'else if'/'else' chain either # have, or do not have, braces. If true, braces will be added if any block # needs braces, and will only be removed if they can be removed from all # blocks. # # Overrides mod_full_brace_if. mod_full_brace_if_chain = true # true/false # Whether to add braces to all blocks of an 'if'/'else if'/'else' chain. # If true, mod_full_brace_if_chain will only remove braces from an 'if' that # does not have an 'else if' or 'else'. mod_full_brace_if_chain_only = false # true/false # Add or remove braces on single-line 'while' statement. mod_full_brace_while = remove # ignore/add/remove/force # Add or remove braces on single-line 'using ()' statement. mod_full_brace_using = ignore # ignore/add/remove/force # Don't remove braces around statements that span N newlines mod_full_brace_nl = 0 # unsigned number # Whether to prevent removal of braces from 'if'/'for'/'while'/etc. blocks # which span multiple lines. # # Affects: # mod_full_brace_for # mod_full_brace_if # mod_full_brace_if_chain # mod_full_brace_if_chain_only # mod_full_brace_while # mod_full_brace_using # # Does not affect: # mod_full_brace_do # mod_full_brace_function mod_full_brace_nl_block_rem_mlcond = false # true/false # Add or remove unnecessary parenthesis on 'return' statement. mod_paren_on_return = remove # ignore/add/remove/force # (Pawn) Whether to change optional semicolons to real semicolons. mod_pawn_semicolon = false # true/false # Whether to fully parenthesize Boolean expressions in 'while' and 'if' # statement, as in 'if (a && b > c)' → 'if (a && (b > c))'. mod_full_paren_if_bool = true # true/false # Whether to remove superfluous semicolons. mod_remove_extra_semicolon = true # true/false # If a function body exceeds the specified number of newlines and doesn't have # a comment after the close brace, a comment will be added. mod_add_long_function_closebrace_comment = 0 # unsigned number # If a namespace body exceeds the specified number of newlines and doesn't # have a comment after the close brace, a comment will be added. mod_add_long_namespace_closebrace_comment = 0 # unsigned number # If a class body exceeds the specified number of newlines and doesn't have a # comment after the close brace, a comment will be added. mod_add_long_class_closebrace_comment = 0 # unsigned number # If a switch body exceeds the specified number of newlines and doesn't have a # comment after the close brace, a comment will be added. mod_add_long_switch_closebrace_comment = 0 # unsigned number # If an #ifdef body exceeds the specified number of newlines and doesn't have # a comment after the #endif, a comment will be added. mod_add_long_ifdef_endif_comment = 0 # unsigned number # If an #ifdef or #else body exceeds the specified number of newlines and # doesn't have a comment after the #else, a comment will be added. mod_add_long_ifdef_else_comment = 0 # unsigned number # Whether to sort consecutive single-line 'import' statements. mod_sort_import = false # true/false # (C#) Whether to sort consecutive single-line 'using' statements. mod_sort_using = false # true/false # Whether to sort consecutive single-line '#include' statements (C/C++) and # '#import' statements (Objective-C). Be aware that this has the potential to # break your code if your includes/imports have ordering dependencies. mod_sort_include = false # true/false # Whether to move a 'break' that appears after a fully braced 'case' before # the close brace, as in 'case X: { ... } break;' → 'case X: { ... break; }'. mod_move_case_break = false # true/false # Add or remove braces around a fully braced case statement. Will only remove # braces if there are no variable declarations in the block. mod_case_brace = ignore # ignore/add/remove/force # Whether to remove a void 'return;' that appears as the last statement in a # function. mod_remove_empty_return = false # true/false # Add or remove the comma after the last value of an enumeration. mod_enum_last_comma = ignore # ignore/add/remove/force # (OC) Whether to organize the properties. If true, properties will be # rearranged according to the mod_sort_oc_property_*_weight factors. mod_sort_oc_properties = false # true/false # (OC) Weight of a class property modifier. mod_sort_oc_property_class_weight = 0 # number # (OC) Weight of 'atomic' and 'nonatomic'. mod_sort_oc_property_thread_safe_weight = 0 # number # (OC) Weight of 'readwrite' when organizing properties. mod_sort_oc_property_readwrite_weight = 0 # number # (OC) Weight of a reference type specifier ('retain', 'copy', 'assign', # 'weak', 'strong') when organizing properties. mod_sort_oc_property_reference_weight = 0 # number # (OC) Weight of getter type ('getter=') when organizing properties. mod_sort_oc_property_getter_weight = 0 # number # (OC) Weight of setter type ('setter=') when organizing properties. mod_sort_oc_property_setter_weight = 0 # number # (OC) Weight of nullability type ('nullable', 'nonnull', 'null_unspecified', # 'null_resettable') when organizing properties. mod_sort_oc_property_nullability_weight = 0 # number # # Preprocessor options # # Add or remove indentation of preprocessor directives inside #if blocks # at brace level 0 (file-level). pp_indent = ignore # ignore/add/remove/force # Whether to indent #if/#else/#endif at the brace level. If false, these are # indented from column 1. pp_indent_at_level = false # true/false # Specifies the number of columns to indent preprocessors per level # at brace level 0 (file-level). If pp_indent_at_level=false, also specifies # the number of columns to indent preprocessors per level # at brace level > 0 (function-level). # # Default: 1 pp_indent_count = 1 # unsigned number # Add or remove space after # based on pp_level of #if blocks. pp_space = force # ignore/add/remove/force # Sets the number of spaces per level added with pp_space. pp_space_count = 3 # unsigned number # The indent for '#region' and '#endregion' in C# and '#pragma region' in # C/C++. Negative values decrease indent down to the first column. pp_indent_region = 0 # number # Whether to indent the code between #region and #endregion. pp_region_indent_code = false # true/false # If pp_indent_at_level=true, sets the indent for #if, #else and #endif when # not at file-level. Negative values decrease indent down to the first column. # # =0: Indent preprocessors using output_tab_size # >0: Column at which all preprocessors will be indented pp_indent_if = 0 # number # Whether to indent the code between #if, #else and #endif. pp_if_indent_code = false # true/false # Whether to indent '#define' at the brace level. If false, these are # indented from column 1. pp_define_at_level = false # true/false # Whether to ignore the '#define' body while formatting. pp_ignore_define_body = false # true/false # Whether to indent case statements between #if, #else, and #endif. # Only applies to the indent of the preprocesser that the case statements # directly inside of. # # Default: true pp_indent_case = true # true/false # Whether to indent whole function definitions between #if, #else, and #endif. # Only applies to the indent of the preprocesser that the function definition # is directly inside of. # # Default: true pp_indent_func_def = true # true/false # Whether to indent extern C blocks between #if, #else, and #endif. # Only applies to the indent of the preprocesser that the extern block is # directly inside of. # # Default: true pp_indent_extern = true # true/false # Whether to indent braces directly inside #if, #else, and #endif. # Only applies to the indent of the preprocesser that the braces are directly # inside of. # # Default: true pp_indent_brace = true # true/false # # Sort includes options # # The regex for include category with priority 0. include_category_0 = "" # string # The regex for include category with priority 1. include_category_1 = "" # string # The regex for include category with priority 2. include_category_2 = "" # string # # Use or Do not Use options # # true: indent_func_call_param will be used (default) # false: indent_func_call_param will NOT be used # # Default: true use_indent_func_call_param = true # true/false # The value of the indentation for a continuation line is calculated # differently if the statement is: # - a declaration: your case with QString fileName ... # - an assignment: your case with pSettings = new QSettings( ... # # At the second case the indentation value might be used twice: # - at the assignment # - at the function call (if present) # # To prevent the double use of the indentation value, use this option with the # value 'true'. # # true: indent_continue will be used only once # false: indent_continue will be used every time (default) use_indent_continue_only_once = false # true/false # The value might be used twice: # - at the assignment # - at the opening brace # # To prevent the double use of the indentation value, use this option with the # value 'true'. # # true: indentation will be used only once # false: indentation will be used every time (default) indent_cpp_lambda_only_once = false # true/false # Whether to apply special formatting for Qt SIGNAL/SLOT macros. Essentially, # this tries to format these so that they match Qt's normalized form (i.e. the # result of QMetaObject::normalizedSignature), which can slightly improve the # performance of the QObject::connect call, rather than how they would # otherwise be formatted. # # See options_for_QT.cpp for details. # # Default: true use_options_overriding_for_qt_macros = true # true/false # # Warn levels - 1: error, 2: warning (default), 3: note # # (C#) Warning is given if doing tab-to-\t replacement and we have found one # in a C# verbatim string literal. # # Default: 2 warn_level_tabs_found_in_verbatim_string_literals = 2 # unsigned number # Meaning of the settings: # Ignore - do not do any changes # Add - makes sure there is 1 or more space/brace/newline/etc # Force - makes sure there is exactly 1 space/brace/newline/etc, # behaves like Add in some contexts # Remove - removes space/brace/newline/etc # # # - Token(s) can be treated as specific type(s) with the 'set' option: # `set tokenType tokenString [tokenString...]` # # Example: # `set BOOL __AND__ __OR__` # # tokenTypes are defined in src/token_enum.h, use them without the # 'CT_' prefix: 'CT_BOOL' → 'BOOL' # # # - Token(s) can be treated as type(s) with the 'type' option. # `type tokenString [tokenString...]` # # Example: # `type int c_uint_8 Rectangle` # # This can also be achieved with `set TYPE int c_uint_8 Rectangle` # # # To embed whitespace in tokenStrings use the '\' escape character, or quote # the tokenStrings. These quotes are supported: "'` # # # - Support for the auto detection of languages through the file ending can be # added using the 'file_ext' command. # `file_ext langType langString [langString..]` # # Example: # `file_ext CPP .ch .cxx .cpp.in` # # langTypes are defined in uncrusify_types.h in the lang_flag_e enum, use # them without the 'LANG_' prefix: 'LANG_CPP' → 'CPP' # # # - Custom macro-based indentation can be set up using 'macro-open', # 'macro-else' and 'macro-close'. # `(macro-open | macro-else | macro-close) tokenString` # # Example: # `macro-open BEGIN_TEMPLATE_MESSAGE_MAP` # `macro-open BEGIN_MESSAGE_MAP` # `macro-close END_MESSAGE_MAP` # # # option(s) with 'not default' value: 87 #